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