bantamkit 0.34.0__tar.gz → 0.34.2__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.34.0 → bantamkit-0.34.2}/.gitignore +1 -0
- bantamkit-0.34.2/PKG-INFO +365 -0
- bantamkit-0.34.2/README.md +337 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/pyproject.toml +34 -1
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/__init__.py +1 -1
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_mutmatrix.py +47 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_thread_exception_gate.py +44 -4
- bantamkit-0.34.0/PKG-INFO +0 -296
- bantamkit-0.34.0/README.md +0 -279
- bantamkit-0.34.0/dist-0.33.0/bantamkit-0.33.0-py3-none-any.whl +0 -0
- bantamkit-0.34.0/dist-0.33.0/bantamkit-0.33.0.tar.gz +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/contracts/default.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/manifest.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/repo/HISTORY.md +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/repo/README.md +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/repo/docs/architecture.md +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/repo/docs/runbook.md +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/repo/issues/142-settlement-timeout.md +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/repo/patches/0009-retry-budget.patch +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/repo/src/ledger/__init__.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/repo/src/ledger/config.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/repo/src/ledger/errors.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/repo/src/ledger/posting.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/repo/src/ledger/registry.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/repo/src/ledger/report.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/repo/src/ledger/retry.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/repo/src/ledger/settle.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/repo/src/ledger/validate.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/repo/tests/test_posting.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/repo/tests/test_settle.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/tasks/dt-error-contract.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/tasks/dt-handler-map.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/tasks/dt-patch-before-after.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/tasks/dt-retry-attempts.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/tasks/dt-settlement-config.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/tasks/dt-symbol-home.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/tasks/dt-trace-blame.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/devteam/tasks/dt-unread-key.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/document/tasks/doc-large-in-137.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/document/tasks/doc-large-in-359.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/document/tasks/doc-large-in-372.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/document/tasks/doc-large-out-11764.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/document/tasks/doc-large-out-4137.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/document/tasks/doc-large-out-8022.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/document/tasks/doc-small-137.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/document/tasks/doc-small-261.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/document/tasks/doc-small-388.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/fixtures/.gitkeep +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/fixtures/catalog.json +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/perturbations/task-completion.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/tasks/.gitkeep +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/tasks/extract-contact.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/tasks/extract-invoice.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/tasks/extract-order.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/tasks/extract-schedule.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/tasks/extract-versions.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/tasks/nav-prod-port.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/tasks/nav-release-bundle.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/tasks/recall-audit-retention.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/tasks/recall-cache-ttl.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/tasks/recall-db-port.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/tasks/recall-deploy.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/tasks/recall-env-endpoint.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/tasks/recall-oncall-rotation.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/tasks/recall-oncall.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/tasks/recall-org-quota.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/tasks/recall-owner.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/tasks/shop-basket-total.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/tasks/shop-cheapest.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/tasks/shop-compare.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/tasks/shop-gadget-value.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/tasks/shop-stock-total.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/evals/tasks/shop-total.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/pricing/default.json +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/profiles/default.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/profiles/patient.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/rubrics/.gitkeep +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/rubrics/code-quality.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/rubrics/grounded-completion.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/rubrics/task-completion.yaml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/schemas/shiftwork-checkpoint.json +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/skills/.gitkeep +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/skills/file-graph.md +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/skills/memory.md +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/tools/.gitkeep +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/tools/bantamkit_read.json +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/tools/bantamkit_status.json +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/tools/build_identity.json +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/tools/document_list.json +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/tools/document_read.json +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/tools/file_graph.json +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/tools/memory_compact.json +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/tools/memory_dream.json +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/tools/memory_recall.json +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/tools/memory_save.json +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/tools/repo_map.json +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/tools/shiftwork_clock_in.json +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/tools/shiftwork_clock_out.json +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/tools/shiftwork_status.json +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/tools/skill_audit.json +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/tools/token_ledger.json +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/_assets/tools/validate_json.json +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/hatch_build.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/agent.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/assets.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/budget.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/client.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/contract.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/criticreplay.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/critique.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/docmanifest.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/docread.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/evalrun.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/eventlog.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/filegraph.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/hostinstall.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/loopguard.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/mcpreport.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/mcpserver.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/memory/__init__.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/memory/__main__.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/memory/component.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/memory/divergence.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/memory/dream.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/memory/layers.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/memory/store.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/pdfread.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/pricing.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/profile.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/repomap.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/selfupdate.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/shiftwork.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/skillaudit.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/statusline.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/structured.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/textutil.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/src/bantamkit/tokenledger.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/cli_exit_status_probe.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/conftest.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/data/docread/bad-crc.docx +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/data/docread/charref-4301-digits.html +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/data/docread/charset-table.json +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/data/docread/compression-method-9.docx +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/data/docread/corrupt-deflate.docx +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/data/docread/encrypted-member.docx +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/data/docread/encrypted-mimetype.odt +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/data/docread/eszett-cell-ref.xlsx +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/data/docread/internal-dtd-entity.docx +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/data/docread/rfc2231-charset.eml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/data/docread/rfc822-nested-twice.eml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/data/docread/unicode-digit-shared-string.xlsx +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/data/docread/x-uuencode.eml +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/data/f8404ab-perturbation-baseline.json +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/data/platform-assumption-baseline.json +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/data/served-tool-surface.json +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/docread_fixtures.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/perturbation_baseline_harness.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/rbp16_effect_probe.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/rbp18_payload_probe.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_adapter.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_agent.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_amendguard.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_bantamkit_gitignore.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_bantamkit_read_tool.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_budget.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_build_identity.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_client.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_compaction_corpus_survey.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_conformance.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_conformance_harness_resilience.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_conformance_suite_table_gate.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_contract_fanout.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_criticreplay.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_critique.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_doc_commands_gate.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_docread.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_docread_ceilings.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_document_manifest_parity.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_document_setup.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_document_tasks.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_document_tools.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_encoding_gate.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_evalrun.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_eventlog.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_field_program_gates.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_field_programs.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_filegraph.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_hostinstall.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_install_shape.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_ladder_statistics.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_launcher_which.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_layers.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_loopguard.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_mcp_endpoint.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_mcpdrift.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_mcpreport.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_mcpserver.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_memory.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_memory_compact_tool.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_memory_component.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_memory_divergence.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_memory_dream.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_memory_layers.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_memory_store_tripwire.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_newline_gate.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_packaging.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_pdfread.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_pinharness_ledger.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_platform_assumption_gate.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_pricing.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_repo_map_tool.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_repomap.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_selfupdate.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_served_tool_count_records.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_shiftwork.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_skillaudit.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_status_surface.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_statusline.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_structured.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_tokenledger.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_tool_manifest.py +0 -0
- {bantamkit-0.34.0 → bantamkit-0.34.2}/tests/test_version_agreement.py +0 -0
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: bantamkit
|
|
3
|
+
Version: 0.34.2
|
|
4
|
+
Summary: Memory MCP server for Claude Code, Cursor, VS Code Copilot and Claude Desktop, plus a Python library that lifts small-model agents. Install once, run offline.
|
|
5
|
+
Project-URL: Homepage, https://github.com/Ink01101011/bantamkit
|
|
6
|
+
Project-URL: Repository, https://github.com/Ink01101011/bantamkit
|
|
7
|
+
Project-URL: Issues, https://github.com/Ink01101011/bantamkit/issues
|
|
8
|
+
Project-URL: Documentation, https://github.com/Ink01101011/bantamkit/tree/main/docs
|
|
9
|
+
License-Expression: MIT
|
|
10
|
+
Keywords: agent,claude,claude-code,claude-desktop,copilot,cursor,json-schema,llm,mcp,mcp-server,memory,model-context-protocol,vscode
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
16
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
17
|
+
Requires-Python: >=3.11
|
|
18
|
+
Requires-Dist: httpx>=0.27
|
|
19
|
+
Requires-Dist: jsonschema>=4.21
|
|
20
|
+
Requires-Dist: pyyaml>=6.0
|
|
21
|
+
Provides-Extra: dev
|
|
22
|
+
Requires-Dist: hatchling>=1.24; extra == 'dev'
|
|
23
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
24
|
+
Requires-Dist: ruff>=0.4; extra == 'dev'
|
|
25
|
+
Provides-Extra: mcp
|
|
26
|
+
Requires-Dist: mcp<3,>=2.0; extra == 'mcp'
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
|
|
29
|
+
# bantamkit — memory MCP server for Claude Code, Cursor, VS Code Copilot and Claude Desktop (Python)
|
|
30
|
+
|
|
31
|
+
**bantamkit** is a Python **MCP server** on **PyPI** that gives coding agents a per-person
|
|
32
|
+
**memory** store, JSON Schema validation, shift-work accounting, a token ledger and a
|
|
33
|
+
skill-catalogue auditor. It works with **Claude Code**, **Claude Desktop**, **Cursor**, **GitHub
|
|
34
|
+
Copilot in VS Code** and any stdio MCP client. Install it with `pip install "bantamkit[mcp]"`;
|
|
35
|
+
after one install it starts **offline**.
|
|
36
|
+
|
|
37
|
+
The same server in pure Node is on **npm** as
|
|
38
|
+
[`bantamkit-mcp`](https://www.npmjs.com/package/bantamkit-mcp). The two share a memory store on
|
|
39
|
+
disk and a conformance suite holds them to the same answers, so install whichever your host makes
|
|
40
|
+
easy.
|
|
41
|
+
|
|
42
|
+
## Contents
|
|
43
|
+
|
|
44
|
+
| Topic | What you'll find |
|
|
45
|
+
|---|---|
|
|
46
|
+
| [Install the MCP server](#install-the-mcp-server) | Try it; the `[mcp]` extra |
|
|
47
|
+
| [Install once, run offline](#install-once-run-offline) | A kept venv, or a wheelhouse |
|
|
48
|
+
| [Run with pipx at every launch](#run-with-pipx-at-every-launch) | The online form |
|
|
49
|
+
| [Connect it to a host](#connect-it-to-a-host) | The same five steps per host |
|
|
50
|
+
| [Connect to Claude Code](#connect-to-claude-code) | `--install claude`, `claude mcp remove` |
|
|
51
|
+
| [Connect to Claude Desktop](#connect-to-claude-desktop) | `claude_desktop_config.json` per OS |
|
|
52
|
+
| [Connect to Cursor](#connect-to-cursor) | `~/.cursor/mcp.json` |
|
|
53
|
+
| [Connect to VS Code (GitHub Copilot)](#connect-to-vs-code-github-copilot) | `mcp.json`, `servers` key |
|
|
54
|
+
| [Connect other MCP clients](#connect-other-mcp-clients) | Any stdio host |
|
|
55
|
+
| [Configuration](#configuration) | Every flag and variable, with its default |
|
|
56
|
+
| [Update](#update) | `--update`, pipx, uv, then restart |
|
|
57
|
+
| [Troubleshooting](#troubleshooting) | Timeouts, refusals, the wrong store |
|
|
58
|
+
| [What it serves](#what-it-serves) | 12 tools, one prompt, two resource templates |
|
|
59
|
+
| [Requirements](#requirements) | Python and dependencies |
|
|
60
|
+
| [The asset pack](#the-asset-pack) | `--assets-root`, `BANTAMKIT_ASSETS` |
|
|
61
|
+
| [The operator CLI: `python -m bantamkit.memory`](#the-operator-cli-python--m-bantamkitmemory) | status, lint, compact, archived, archive, restore |
|
|
62
|
+
| [Where the Python and Node servers differ](#where-the-python-and-node-servers-differ) | One store; pdf/.doc/.rtf, CLI name, `build_id` |
|
|
63
|
+
| [Development](#development) | Clone, test, lint, conformance |
|
|
64
|
+
| [Documentation](#documentation) | The full docs on GitHub |
|
|
65
|
+
|
|
66
|
+
## Install the MCP server
|
|
67
|
+
|
|
68
|
+
To try it:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
pipx run --spec "bantamkit[mcp]" bantamkit-mcp --assets-root
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
The `[mcp]` extra pulls the MCP SDK. Without it you get the library only, and the server exits
|
|
75
|
+
with `bantamkit-mcp needs the MCP extra: pip install "bantamkit[mcp]"`. The uv form,
|
|
76
|
+
`uvx --from "bantamkit[mcp]" bantamkit-mcp`, is documented but not measured here.
|
|
77
|
+
|
|
78
|
+
A host launches the server every session, so for a host use **install once**.
|
|
79
|
+
|
|
80
|
+
### Install once, run offline
|
|
81
|
+
|
|
82
|
+
**Recommended.**
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
python -m venv <env>
|
|
86
|
+
<env>/bin/pip install "bantamkit[mcp]"
|
|
87
|
+
<env>/bin/bantamkit-mcp --install cursor # or claude, claude-desktop, copilot
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
`--install` records the venv's console script by absolute path with `"args": []`, so no launch
|
|
91
|
+
needs the network or your shell's PATH. Measured on macOS arm64, it served 12 tools under a GUI
|
|
92
|
+
app's PATH, `/usr/bin:/bin:/usr/sbin:/sbin`; the Windows layout (`<env>\Scripts\`) was not.
|
|
93
|
+
|
|
94
|
+
**No network on the target? Carry a wheelhouse.** Download it on a machine with the **same OS,
|
|
95
|
+
CPU architecture and Python minor version** (some wheels, such as `pydantic_core`, are built for
|
|
96
|
+
one platform only), copy `wheels/` across, and install from it:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
python -m pip download "bantamkit[mcp]==0.34.2" -d wheels
|
|
100
|
+
python -m venv <env>
|
|
101
|
+
<env>/bin/pip install --no-index --find-links wheels "bantamkit[mcp]==0.34.2"
|
|
102
|
+
<env>/bin/bantamkit-mcp --install cursor
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
For a newer version, repeat both steps with its number. Measurements:
|
|
106
|
+
[docs/install.md → Python package: measured detail](https://github.com/Ink01101011/bantamkit/blob/main/docs/install.md#python-package-measured-detail).
|
|
107
|
+
|
|
108
|
+
### Run with pipx at every launch
|
|
109
|
+
|
|
110
|
+
```json
|
|
111
|
+
{"mcpServers": {"bantamkit": {"command": "pipx", "args": ["run", "--spec", "bantamkit[mcp]", "bantamkit-mcp"]}}}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
No venv to keep, but offline it works **only while pipx's cache lasts**: with the network cut it
|
|
115
|
+
exited 1 on a cold pipx home and 0 after one online run
|
|
116
|
+
([measured](https://github.com/Ink01101011/bantamkit/blob/main/docs/install.md#pipx-run-launches-online-and-is-offline-only-while-pipxs-cache-lasts)).
|
|
117
|
+
For Claude Code: `claude mcp add bantamkit -s user -- pipx run --spec "bantamkit[mcp]" bantamkit-mcp`.
|
|
118
|
+
|
|
119
|
+
## Connect it to a host
|
|
120
|
+
|
|
121
|
+
`bantamkit-mcp --install <host>` (`claude`, `claude-desktop`, `copilot`, `cursor`) writes an
|
|
122
|
+
entry pointing at the console script you ran. It never prompts, so it behaves the same in a
|
|
123
|
+
terminal, CI or another agent. For the three JSON hosts it backs the file up as
|
|
124
|
+
`<name>.backup-<date>`, keeps its permissions, and refuses a file that does not parse or a
|
|
125
|
+
differing entry without `--force`.
|
|
126
|
+
|
|
127
|
+
Every host has the same steps: **1** command, **2** file, **3** entry, **4** confirm, **5** undo
|
|
128
|
+
or re-run. The entry's `command` and `args` depend on the install route:
|
|
129
|
+
|
|
130
|
+
| Route | `command` | `args` |
|
|
131
|
+
|---|---|---|
|
|
132
|
+
| Python venv, install once | `/absolute/path/to/env/bin/bantamkit-mcp` | `[]` |
|
|
133
|
+
| pipx at every launch | `pipx` | `["run", "--spec", "bantamkit[mcp]", "bantamkit-mcp"]` |
|
|
134
|
+
| npm, install once | see the [npm package](https://www.npmjs.com/package/bantamkit-mcp) | |
|
|
135
|
+
|
|
136
|
+
To check a recorded command, run it in a terminal: with nothing on stdin it prints
|
|
137
|
+
`usage: bantamkit-mcp …`.
|
|
138
|
+
|
|
139
|
+
### Connect to Claude Code
|
|
140
|
+
|
|
141
|
+
1. **Command:** `<env>/bin/bantamkit-mcp --install claude`
|
|
142
|
+
2. **File:** none edited directly. It runs `claude mcp add bantamkit -s user -- <command>` (user
|
|
143
|
+
scope, every project), because `~/.claude.json` is the host's file and holds more than MCP
|
|
144
|
+
configuration.
|
|
145
|
+
3. **Entry:** printed as `ran : claude mcp add bantamkit -s user -- <env>/bin/bantamkit-mcp`.
|
|
146
|
+
4. **Confirm:** `claude mcp list` lists `bantamkit`; in a session, ask the agent to call
|
|
147
|
+
`bantamkit_status`.
|
|
148
|
+
5. **Undo / re-run:** `--force` does not reach Claude Code, and a second add fails with
|
|
149
|
+
`MCP server bantamkit already exists in user config`. Remove first:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
claude mcp remove bantamkit -s user
|
|
153
|
+
<env>/bin/bantamkit-mcp --install claude
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Connect to Claude Desktop
|
|
157
|
+
|
|
158
|
+
1. **Command:** `<env>/bin/bantamkit-mcp --install claude-desktop`
|
|
159
|
+
2. **File:** macOS `~/Library/Application Support/Claude/claude_desktop_config.json` ·
|
|
160
|
+
Windows `%APPDATA%\Claude\claude_desktop_config.json` ·
|
|
161
|
+
Linux `~/.config/Claude/claude_desktop_config.json`
|
|
162
|
+
3. **Entry** (key `mcpServers`; each entry takes `command`, `args` and an optional `env`):
|
|
163
|
+
|
|
164
|
+
```json
|
|
165
|
+
{"mcpServers": {"bantamkit": {"command": "/absolute/path/to/env/bin/bantamkit-mcp", "args": []}}}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
4. **Confirm:** it prints `installed bantamkit into claude-desktop` with file, key and command.
|
|
169
|
+
Fully quit and reopen Claude Desktop, then ask it to call `bantamkit_status`.
|
|
170
|
+
5. **Undo / re-run:** no uninstall flag; delete the `bantamkit` entry or restore
|
|
171
|
+
`claude_desktop_config.json.backup-<date>`. A matching re-run prints
|
|
172
|
+
`bantamkit is already installed in claude-desktop and matches`; a differing entry needs `--force`.
|
|
173
|
+
|
|
174
|
+
### Connect to Cursor
|
|
175
|
+
|
|
176
|
+
1. **Command:** `<env>/bin/bantamkit-mcp --install cursor`
|
|
177
|
+
2. **File:** `~/.cursor/mcp.json` on every OS (`%USERPROFILE%\.cursor\mcp.json` on Windows);
|
|
178
|
+
`.cursor/mcp.json` for one project, by hand.
|
|
179
|
+
3. **Entry** (key `mcpServers`):
|
|
180
|
+
|
|
181
|
+
```json
|
|
182
|
+
{"mcpServers": {"bantamkit": {"command": "/absolute/path/to/env/bin/bantamkit-mcp", "args": []}}}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
4. **Confirm:** it prints `installed bantamkit into cursor` and `key : mcpServers`. Restart
|
|
186
|
+
Cursor and ask the agent to call `bantamkit_status`.
|
|
187
|
+
5. **Undo / re-run:** delete the entry or restore `mcp.json.backup-<date>`. A differing entry,
|
|
188
|
+
such as an old `pipx run` one, is refused and printed beside the proposed one; replace it with
|
|
189
|
+
`<env>/bin/bantamkit-mcp --install cursor --force`.
|
|
190
|
+
|
|
191
|
+
### Connect to VS Code (GitHub Copilot)
|
|
192
|
+
|
|
193
|
+
1. **Command:** `<env>/bin/bantamkit-mcp --install copilot`
|
|
194
|
+
2. **File:** macOS `~/Library/Application Support/Code/User/mcp.json` ·
|
|
195
|
+
Windows `%APPDATA%\Code\User\mcp.json` · Linux `~/.config/Code/User/mcp.json`;
|
|
196
|
+
`.vscode/mcp.json` for one workspace, or **MCP: Open User Configuration**, by hand.
|
|
197
|
+
3. **Entry:** the key is **`servers`**, not `mcpServers`, plus `"type": "stdio"` — the detail
|
|
198
|
+
that catches people out:
|
|
199
|
+
|
|
200
|
+
```json
|
|
201
|
+
{"servers": {"bantamkit": {"type": "stdio", "command": "/absolute/path/to/env/bin/bantamkit-mcp", "args": []}}}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
4. **Confirm:** it prints `installed bantamkit into copilot` and `key : servers`. Restart
|
|
205
|
+
VS Code and ask Copilot to call `bantamkit_status`.
|
|
206
|
+
5. **Undo / re-run:** delete the entry or restore `mcp.json.backup-<date>`; `--force` replaces
|
|
207
|
+
a differing entry.
|
|
208
|
+
|
|
209
|
+
### Connect other MCP clients
|
|
210
|
+
|
|
211
|
+
Any stdio MCP host runs the same `command`/`args` and talks JSON-RPC on stdin and stdout; nothing
|
|
212
|
+
here is host-specific. Codex and a generic JSON config:
|
|
213
|
+
[docs/mcp.md → Client setup](https://github.com/Ink01101011/bantamkit/blob/main/docs/mcp.md#client-setup).
|
|
214
|
+
|
|
215
|
+
## Configuration
|
|
216
|
+
|
|
217
|
+
Flags go in the entry's `args`; environment variables in its `env` block (or
|
|
218
|
+
`claude mcp add -e NAME=value`). Both runtimes print the same `--help`.
|
|
219
|
+
|
|
220
|
+
| Setting | What it does | Default | Example |
|
|
221
|
+
|---|---|---|---|
|
|
222
|
+
| `BANTAMKIT_MEMORY_DIR` | Pins the store to one absolute path; a relative or unreachable path refuses at startup | unset: nearest existing `.bantamkit/memory` at or above the start directory | `"env": {"BANTAMKIT_MEMORY_DIR": "/abs/project/.bantamkit/memory"}` |
|
|
223
|
+
| `--store STORE` | One store, layering off; outranks `BANTAMKIT_MEMORY_DIR` | off (layered) | `"--store", "/abs/store"` |
|
|
224
|
+
| `--start START` | Where project-store discovery starts; not with `--store` | cwd | `"--start", "/abs/project"` |
|
|
225
|
+
| Layered memory | Recall reads the project store, stores granted in `.bantamkit/config.yaml`, and `~/.bantamkit/memory`; saves go to the project store | on | [docs/memory.md → Layers](https://github.com/Ink01101011/bantamkit/blob/main/docs/memory.md#layers) |
|
|
226
|
+
| `--k K` | Default recall budget | `3` | `"--k", "5"` |
|
|
227
|
+
| `--index-budget BYTES` | Memory index byte budget | `24000` | `"--index-budget", "32000"` |
|
|
228
|
+
| `BANTAMKIT_EVENT_LOG` | Logs tool outcomes as JSONL | off; `on` → `<store>/events/mcp.jsonl`; other values are a path | `"env": {"BANTAMKIT_EVENT_LOG": "on"}` |
|
|
229
|
+
| `BANTAMKIT_ASSETS` | Your own asset pack (skills, rubrics, schemas) | the pack inside the package | `"env": {"BANTAMKIT_ASSETS": "/abs/my-assets"}` |
|
|
230
|
+
| `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` |
|
|
231
|
+
| `BANTAMKIT_PRICES` | Price table for the token ledger | `pricing/default.json` in the asset pack | `"env": {"BANTAMKIT_PRICES": "/abs/prices.json"}` |
|
|
232
|
+
|
|
233
|
+
Don't add `--store` by reflex: the default is layered, and the layering is most of the value.
|
|
234
|
+
One-shot commands that print and exit: `--install {claude,claude-desktop,copilot,cursor}` (with
|
|
235
|
+
`--force`), `--update`, `--assets-root`, `--mcp-report`, `--statusline`, `-h`. More:
|
|
236
|
+
[store binding](https://github.com/Ink01101011/bantamkit/blob/main/docs/mcp.md#which-memory-store-the-server-binds) ·
|
|
237
|
+
[pinning](https://github.com/Ink01101011/bantamkit/blob/main/docs/memory.md#pinning-the-store-bantamkit_memory_dir) ·
|
|
238
|
+
[event log](https://github.com/Ink01101011/bantamkit/blob/main/docs/eventlog.md#the-switch) ·
|
|
239
|
+
[prices](https://github.com/Ink01101011/bantamkit/blob/main/docs/ledger.md).
|
|
240
|
+
|
|
241
|
+
## Update
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
<env>/bin/bantamkit-mcp --update # a pip install from PyPI: runs pip install --upgrade bantamkit
|
|
245
|
+
pip install -U "bantamkit[mcp]" # the same, by hand
|
|
246
|
+
pipx upgrade bantamkit # pipx
|
|
247
|
+
uv tool upgrade bantamkit # uv
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
`--update` (`check the package index and update this install if it differs, then exit`) is the
|
|
251
|
+
only network access here. An editable install, a local file or a source tree is refused with
|
|
252
|
+
exit 1 and a sentence naming the manual route (for a clone, `git pull`). For a wheelhouse, repeat
|
|
253
|
+
the download and install.
|
|
254
|
+
|
|
255
|
+
**Then restart the server in the host** (`/mcp` → reconnect in Claude Code; fully restart Claude
|
|
256
|
+
Desktop). `bantamkit_status` prints the version **and the `build_id` of the code answering
|
|
257
|
+
you**; a new version with an old `build_id` means an old process.
|
|
258
|
+
|
|
259
|
+
## Troubleshooting
|
|
260
|
+
|
|
261
|
+
| Symptom | Fix |
|
|
262
|
+
|---|---|
|
|
263
|
+
| The host times out; the server never answers | A `pipx run` entry with a cold cache and no network. Use [Install once, run offline](#install-once-run-offline) |
|
|
264
|
+
| `ENOENT` from the host | A GUI host does not read your shell rc, so `pipx` is not on its PATH. `--install` records an absolute path |
|
|
265
|
+
| `bantamkit-mcp needs the MCP extra: pip install "bantamkit[mcp]"` | Install with the `[mcp]` extra |
|
|
266
|
+
| `already has a bantamkit entry with different settings … re-run with --force to replace it` | Re-run with `--force`; the old file is kept as `.backup-<date>` |
|
|
267
|
+
| `… is not valid JSON, so this refuses to touch it` | Fix the host's file by hand, then re-run |
|
|
268
|
+
| `MCP server bantamkit already exists in user config` | `claude mcp remove bantamkit -s user`, then install again |
|
|
269
|
+
| `pinned memory store must be an absolute path` or `pinned memory store is unreachable` | Give `BANTAMKIT_MEMORY_DIR` an absolute path that exists |
|
|
270
|
+
| Recall finds nothing, or the wrong store | Set `BANTAMKIT_MEMORY_DIR`; the reply names the store it searched ([the three states](https://github.com/Ink01101011/bantamkit/blob/main/docs/mcp.md#the-three-states-and-what-memory_recall-tells-the-model)) |
|
|
271
|
+
| `AssetNotFound: no assets directory found; set BANTAMKIT_ASSETS` | See [The asset pack](#the-asset-pack) |
|
|
272
|
+
|
|
273
|
+
## What it serves
|
|
274
|
+
|
|
275
|
+
12 tools, the `bantamkit_status` prompt and two resource templates
|
|
276
|
+
(`bantamkit://skills/{name}`, `bantamkit://rubrics/{name}`):
|
|
277
|
+
|
|
278
|
+
| Tool | What it does |
|
|
279
|
+
|---|---|
|
|
280
|
+
| `memory_save` | store one durable fact, deduped and budgeted |
|
|
281
|
+
| `memory_recall` | retrieve facts matching a query |
|
|
282
|
+
| `memory_compact` | archive the stalest facts to fit the index budget |
|
|
283
|
+
| `memory_dream` | consolidate facts the project and profile layers hold under the same name |
|
|
284
|
+
| `validate_json` | validate a document against a JSON Schema |
|
|
285
|
+
| `skill_audit` | audit a skill catalogue for findings |
|
|
286
|
+
| `shiftwork_clock_in` | open a unit of work and get its brief |
|
|
287
|
+
| `shiftwork_clock_out` | close a unit with status and accounting |
|
|
288
|
+
| `shiftwork_status` | report the open cursor |
|
|
289
|
+
| `token_ledger` | what a session cost, read off the host's transcripts |
|
|
290
|
+
| `bantamkit_status` | report store health against its budget |
|
|
291
|
+
| `build_identity` | report the fingerprint of the source on disk, not the executing code |
|
|
292
|
+
|
|
293
|
+
The document reader `bantamkit_read` left the served tools in job50 (2026-09-12) and stays in the
|
|
294
|
+
library as `bantamkit.docread`.
|
|
295
|
+
|
|
296
|
+
## Requirements
|
|
297
|
+
|
|
298
|
+
Python 3.11 or newer. Three runtime dependencies — `httpx`, `jsonschema`, `pyyaml` — plus `mcp`
|
|
299
|
+
under the `[mcp]` extra.
|
|
300
|
+
|
|
301
|
+
## The asset pack
|
|
302
|
+
|
|
303
|
+
Contracts, schemas, eval tasks, rubrics and tool manifests ship inside the package.
|
|
304
|
+
`bantamkit-mcp --assets-root` prints the resolved directory and its file count, and
|
|
305
|
+
`BANTAMKIT_ASSETS` overrides it. A build that cannot find the pack fails instead of shipping
|
|
306
|
+
without it.
|
|
307
|
+
|
|
308
|
+
## The operator CLI: `python -m bantamkit.memory`
|
|
309
|
+
|
|
310
|
+
Store maintenance, not served over MCP:
|
|
311
|
+
|
|
312
|
+
```bash
|
|
313
|
+
python -m bantamkit.memory status # index size, budget, headroom, archive count
|
|
314
|
+
python -m bantamkit.memory lint # exit 1 if the store is malformed or over budget
|
|
315
|
+
python -m bantamkit.memory compact # archive the stalest facts
|
|
316
|
+
python -m bantamkit.memory archived # list what compaction has moved out
|
|
317
|
+
python -m bantamkit.memory archive <name>
|
|
318
|
+
python -m bantamkit.memory restore <name>
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
`archive` moves a fact out without deleting it; `restore` brings it back by name.
|
|
322
|
+
Full reference: [docs/memory.md → The operator CLI](https://github.com/Ink01101011/bantamkit/blob/main/docs/memory.md#the-operator-cli).
|
|
323
|
+
|
|
324
|
+
## Where the Python and Node servers differ
|
|
325
|
+
|
|
326
|
+
Both servers read and write the same on-disk store. Every feature lands in both in one change, and
|
|
327
|
+
a conformance case compares their answers. Three differences are deliberate, each ruled in the
|
|
328
|
+
[divergence table](https://github.com/Ink01101011/bantamkit/blob/main/docs/porting.md#where-the-two-runtimes-deliberately-differ):
|
|
329
|
+
|
|
330
|
+
- **pdf, `.doc` and `.rtf`:** this side's reader (`bantamkit.docread`) reads them, pdf with a
|
|
331
|
+
stdlib reader and `.doc`/`.rtf` through macOS `/usr/bin/textutil`; the Node side refuses them
|
|
332
|
+
by name.
|
|
333
|
+
- **The operator CLI** is `python -m bantamkit.memory` here and `bantamkit-memory` there, in help
|
|
334
|
+
text and errors alike.
|
|
335
|
+
- **`build_id`** hashes the executing tree, so it differs by construction; `assets_digest` is
|
|
336
|
+
identical, and that is the one that carries meaning.
|
|
337
|
+
|
|
338
|
+
## Development
|
|
339
|
+
|
|
340
|
+
```bash
|
|
341
|
+
git clone https://github.com/Ink01101011/bantamkit
|
|
342
|
+
cd bantamkit
|
|
343
|
+
python -m venv .venv && .venv/bin/pip install -e "runtime-py[dev,mcp]"
|
|
344
|
+
.venv/bin/python -m pytest runtime-py/tests -q
|
|
345
|
+
.venv/bin/ruff check runtime-py
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
The cross-runtime gate needs Node:
|
|
349
|
+
|
|
350
|
+
```bash
|
|
351
|
+
node tools/conformance/run.mjs --all
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
## Documentation
|
|
355
|
+
|
|
356
|
+
| Page | Covers |
|
|
357
|
+
|---|---|
|
|
358
|
+
| [Source on GitHub](https://github.com/Ink01101011/bantamkit) | The repository and its README |
|
|
359
|
+
| [npm package `bantamkit-mcp`](https://www.npmjs.com/package/bantamkit-mcp) | The pure-Node server |
|
|
360
|
+
| [Install](https://github.com/Ink01101011/bantamkit/blob/main/docs/install.md) | Requirements, editable install, measured MCP install detail |
|
|
361
|
+
| [MCP](https://github.com/Ink01101011/bantamkit/blob/main/docs/mcp.md) | Client setup and which memory store the server binds |
|
|
362
|
+
| [Memory](https://github.com/Ink01101011/bantamkit/blob/main/docs/memory.md) | Store layout, layers, pinning, the operator CLI |
|
|
363
|
+
| [Porting](https://github.com/Ink01101011/bantamkit/blob/main/docs/porting.md) | What the two runtimes disagree about |
|
|
364
|
+
|
|
365
|
+
MIT.
|