bantamkit 0.35.8__tar.gz → 0.36.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- bantamkit-0.35.8/README.md → bantamkit-0.36.0/PKG-INFO +143 -64
- bantamkit-0.35.8/PKG-INFO → bantamkit-0.36.0/README.md +112 -93
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/tools/bantamkit_status.json +7 -1
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/tools/build_identity.json +7 -1
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/tools/memory_compact.json +8 -1
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/tools/memory_dream.json +8 -1
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/tools/memory_recall.json +7 -1
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/tools/memory_save.json +8 -1
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/tools/shiftwork_clock_in.json +9 -1
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/tools/shiftwork_clock_out.json +9 -1
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/tools/shiftwork_plan.json +7 -1
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/tools/shiftwork_status.json +7 -1
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/tools/skill_audit.json +8 -2
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/tools/token_ledger.json +8 -2
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/tools/validate_json.json +7 -1
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/tools/work_plan.json +7 -1
- {bantamkit-0.35.8 → bantamkit-0.36.0}/pyproject.toml +11 -3
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/__init__.py +1 -1
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/assets.py +29 -3
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/hookadapter.py +33 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/hostinstall.py +43 -9
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/mcpreport.py +4 -1
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/mcpserver.py +166 -25
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/mcpstdio.py +106 -4
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/memory/component.py +17 -6
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/memory/store.py +47 -18
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/shiftwork.py +4 -2
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/statusline.py +38 -4
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/tokenledger.py +22 -1
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/updatecheck.py +33 -4
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/data/served-tool-surface.json +121 -30
- bantamkit-0.36.0/tests/test_assets.py +48 -0
- bantamkit-0.36.0/tests/test_cli_oneshot.py +113 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_conformance.py +8 -1
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_hookadapter.py +111 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_hostinstall.py +75 -8
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_hostinstall_hooks.py +27 -2
- bantamkit-0.36.0/tests/test_mcp_request_guard.py +103 -0
- bantamkit-0.36.0/tests/test_mcpstdio_frames.py +68 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_memory.py +45 -2
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_selfupdate.py +1 -1
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_status_surface.py +4 -1
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_statusline.py +54 -1
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_tokenledger.py +89 -0
- bantamkit-0.36.0/tests/test_tool_annotations.py +176 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_tool_manifest.py +18 -1
- bantamkit-0.36.0/tests/test_unknown_arguments.py +110 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_updatecheck.py +32 -5
- {bantamkit-0.35.8 → bantamkit-0.36.0}/.gitignore +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/contracts/default.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/manifest.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/repo/HISTORY.md +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/repo/README.md +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/repo/docs/architecture.md +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/repo/docs/runbook.md +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/repo/issues/142-settlement-timeout.md +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/repo/patches/0009-retry-budget.patch +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/repo/src/ledger/__init__.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/repo/src/ledger/config.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/repo/src/ledger/errors.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/repo/src/ledger/posting.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/repo/src/ledger/registry.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/repo/src/ledger/report.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/repo/src/ledger/retry.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/repo/src/ledger/settle.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/repo/src/ledger/validate.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/repo/tests/test_posting.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/repo/tests/test_settle.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/tasks/dt-error-contract.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/tasks/dt-handler-map.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/tasks/dt-patch-before-after.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/tasks/dt-retry-attempts.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/tasks/dt-settlement-config.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/tasks/dt-symbol-home.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/tasks/dt-trace-blame.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/devteam/tasks/dt-unread-key.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/document/tasks/doc-large-in-137.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/document/tasks/doc-large-in-359.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/document/tasks/doc-large-in-372.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/document/tasks/doc-large-out-11764.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/document/tasks/doc-large-out-4137.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/document/tasks/doc-large-out-8022.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/document/tasks/doc-small-137.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/document/tasks/doc-small-261.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/document/tasks/doc-small-388.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/fixtures/.gitkeep +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/fixtures/catalog.json +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/perturbations/task-completion.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/tasks/.gitkeep +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/tasks/extract-contact.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/tasks/extract-invoice.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/tasks/extract-order.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/tasks/extract-schedule.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/tasks/extract-versions.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/tasks/nav-prod-port.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/tasks/nav-release-bundle.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/tasks/recall-audit-retention.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/tasks/recall-cache-ttl.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/tasks/recall-db-port.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/tasks/recall-deploy.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/tasks/recall-env-endpoint.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/tasks/recall-oncall-rotation.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/tasks/recall-oncall.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/tasks/recall-org-quota.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/tasks/recall-owner.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/tasks/shop-basket-total.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/tasks/shop-cheapest.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/tasks/shop-compare.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/tasks/shop-gadget-value.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/tasks/shop-stock-total.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/evals/tasks/shop-total.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/pricing/default.json +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/profiles/default.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/profiles/patient.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/rubrics/.gitkeep +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/rubrics/code-quality.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/rubrics/grounded-completion.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/rubrics/task-completion.yaml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/schemas/shiftwork-checkpoint.json +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/skills/.gitkeep +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/skills/file-graph.md +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/skills/memory.md +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/tools/.gitkeep +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/tools/bantamkit_read.json +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/tools/document_list.json +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/tools/document_read.json +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/tools/file_graph.json +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/_assets/tools/repo_map.json +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/hatch_build.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/agent.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/budget.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/client.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/contract.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/criticreplay.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/critique.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/docmanifest.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/docread.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/evalrun.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/eventlog.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/filegraph.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/loopguard.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/memory/__init__.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/memory/__main__.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/memory/divergence.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/memory/dream.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/memory/layers.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/pdfread.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/pricing.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/profile.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/repomap.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/selfupdate.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/skillaudit.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/structured.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/textutil.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/src/bantamkit/workplan.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/cli_exit_status_probe.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/conftest.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/data/docread/bad-crc.docx +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/data/docread/charref-4301-digits.html +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/data/docread/charset-table.json +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/data/docread/compression-method-9.docx +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/data/docread/corrupt-deflate.docx +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/data/docread/encrypted-member.docx +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/data/docread/encrypted-mimetype.odt +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/data/docread/eszett-cell-ref.xlsx +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/data/docread/internal-dtd-entity.docx +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/data/docread/rfc2231-charset.eml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/data/docread/rfc822-nested-twice.eml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/data/docread/unicode-digit-shared-string.xlsx +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/data/docread/x-uuencode.eml +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/data/f8404ab-perturbation-baseline.json +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/data/platform-assumption-baseline.json +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/docread_fixtures.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/perturbation_baseline_harness.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/rbp16_effect_probe.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/rbp18_payload_probe.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_adapter.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_agent.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_amendguard.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_bantamkit_gitignore.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_bantamkit_read_tool.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_budget.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_build_identity.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_client.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_compaction_corpus_survey.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_conformance_harness_resilience.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_conformance_suite_table_gate.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_contract_fanout.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_contract_patterns.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_contract_refs.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_criticreplay.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_critique.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_doc_commands_gate.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_docread.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_docread_ceilings.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_document_manifest_parity.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_document_setup.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_document_tasks.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_document_tools.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_encoding_gate.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_evalrun.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_eventlog.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_field_program_gates.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_field_programs.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_filegraph.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_install_shape.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_ladder_statistics.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_launcher_which.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_layers.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_loopguard.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_mcp_endpoint.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_mcpdrift.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_mcpreport.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_mcpserver.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_memory_compact_tool.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_memory_component.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_memory_divergence.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_memory_dream.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_memory_layers.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_memory_store_tripwire.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_memory_strings.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_mutmatrix.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_nativeexport.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_newline_gate.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_packaging.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_pdfread.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_pinharness_ledger.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_platform_assumption_gate.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_pricing.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_readme_separation.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_repo_map_tool.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_repomap.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_served_tool_count_records.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_shiftwork.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_skillaudit.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_structured.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_thread_exception_gate.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_version_agreement.py +0 -0
- {bantamkit-0.35.8 → bantamkit-0.36.0}/tests/test_workplan.py +0 -0
|
@@ -1,46 +1,117 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: bantamkit
|
|
3
|
+
Version: 0.36.0
|
|
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
|
+
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,agent-memory,ai-agents,claude,claude-code,claude-code-hooks,claude-desktop,copilot,cursor,github-copilot,json-schema,llm,mcp,mcp-server,memory,model-context-protocol,persistent-memory,token-usage,vscode
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
18
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
19
|
+
Requires-Python: >=3.11
|
|
20
|
+
Requires-Dist: httpx>=0.27
|
|
21
|
+
Requires-Dist: jsonschema>=4.21
|
|
22
|
+
Requires-Dist: pyyaml>=6.0
|
|
23
|
+
Provides-Extra: dev
|
|
24
|
+
Requires-Dist: build>=1.0; extra == 'dev'
|
|
25
|
+
Requires-Dist: hatchling>=1.24; extra == 'dev'
|
|
26
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
27
|
+
Requires-Dist: ruff>=0.4; extra == 'dev'
|
|
28
|
+
Provides-Extra: mcp
|
|
29
|
+
Requires-Dist: mcp<2.1,>=2.0; extra == 'mcp'
|
|
30
|
+
Description-Content-Type: text/markdown
|
|
31
|
+
|
|
1
32
|
# bantamkit — memory MCP server for Claude Code, Cursor, VS Code Copilot and Claude Desktop (Python)
|
|
2
33
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
34
|
+
[](https://www.npmjs.com/package/bantamkit-mcp)
|
|
35
|
+
[](https://pypi.org/project/bantamkit/)
|
|
36
|
+
[](https://pypi.org/project/bantamkit/)
|
|
37
|
+
[](https://www.npmjs.com/package/bantamkit-mcp)
|
|
38
|
+
[](https://github.com/Ink01101011/bantamkit/blob/main/LICENSE)
|
|
39
|
+
[](https://npm-stat.com/charts.html?package=bantamkit-mcp)
|
|
40
|
+
[](https://pypistats.org/packages/bantamkit)
|
|
41
|
+
|
|
42
|
+
**Give your coding agent a memory that outlasts the session.** bantamkit is a Python MCP server:
|
|
43
|
+
the agent saves what is worth keeping — a preference you stated, a decision, the fix that worked
|
|
44
|
+
— and recalls it next session instead of asking you again. It works with **Claude Code**,
|
|
45
|
+
**Claude Desktop**, **Cursor**, **GitHub Copilot in VS Code** and any stdio MCP client. Install it
|
|
46
|
+
with `pip install "bantamkit[mcp]"`; after one install it starts **offline**.
|
|
8
47
|
|
|
9
|
-
|
|
10
|
-
[`bantamkit-mcp`](https://www.npmjs.com/package/bantamkit-mcp)
|
|
11
|
-
|
|
12
|
-
|
|
48
|
+
**This page is the PyPI package's.** Every command on it runs `bantamkit` from PyPI. The same
|
|
49
|
+
server in pure Node is on npm as [`bantamkit-mcp`](https://www.npmjs.com/package/bantamkit-mcp);
|
|
50
|
+
it is named where the two differ, but its own install, update and CLI commands live on its page;
|
|
51
|
+
run them here and you get nothing.
|
|
13
52
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
53
|
+
## 🚀 Quick start
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
python -m venv <env>
|
|
57
|
+
<env>/bin/pip install "bantamkit[mcp]"
|
|
58
|
+
<env>/bin/bantamkit-mcp --install claude # or claude-desktop, copilot, cursor
|
|
59
|
+
```
|
|
17
60
|
|
|
18
|
-
|
|
61
|
+
Then restart the host (in Claude Code, open a new session) and ask the agent to call
|
|
62
|
+
`bantamkit_status`. Every route and host is below.
|
|
63
|
+
|
|
64
|
+
## ✨ What you get
|
|
65
|
+
|
|
66
|
+
- **Memory that persists.** Facts are plain Markdown files under `.bantamkit/memory`, deduped
|
|
67
|
+
and held to a byte budget. `memory_save` and `memory_recall` do the work; `memory_compact` and
|
|
68
|
+
`memory_dream` keep the store tidy.
|
|
69
|
+
- **Layered by default.** Recall reads the project store, any stores you grant in
|
|
70
|
+
`.bantamkit/config.yaml`, and your profile store `~/.bantamkit/memory`. Saves go to the
|
|
71
|
+
project store.
|
|
72
|
+
- **One command per host.** `--install` writes the entry for Claude Code, Claude Desktop, Cursor
|
|
73
|
+
or VS Code Copilot, backs up any file it edits, and never prompts.
|
|
74
|
+
- **Offline after one install.** `--install` records the venv's console script by absolute path,
|
|
75
|
+
so no launch needs the network or your shell's PATH.
|
|
76
|
+
- **Claude Code hooks, if you want them.** `--install-hooks` puts the memory index in front of
|
|
77
|
+
each new session, surfaces matching facts on each prompt, and nudges a save at the end of a
|
|
78
|
+
long session that saved nothing
|
|
79
|
+
([docs/hooks.md](https://github.com/Ink01101011/bantamkit/blob/main/docs/hooks.md)).
|
|
80
|
+
- **More than memory.** JSON Schema validation, a token ledger read off the host's transcripts,
|
|
81
|
+
a skill-catalogue audit, and shift-work tools that plan and hand off multi-step jobs —
|
|
82
|
+
[the fourteen tools](#-what-it-serves).
|
|
83
|
+
- **Same answers as the Node server.** The two share a memory store on disk, and every surface
|
|
84
|
+
is compared between both runtimes by a conformance suite (`node tools/conformance/run.mjs
|
|
85
|
+
--all` in the repository), so install whichever your host makes easy.
|
|
86
|
+
- **A Python library for small models, too.** `import bantamkit` lifts small-model agents
|
|
87
|
+
(~1B–8B, any OpenAI-compatible endpoint) — see [Module API](#-module-api).
|
|
88
|
+
|
|
89
|
+
## 📑 Contents
|
|
19
90
|
|
|
20
91
|
| Topic | What you'll find |
|
|
21
92
|
|---|---|
|
|
22
|
-
| [Install the MCP server](
|
|
93
|
+
| [Install the MCP server](#-install-the-mcp-server) | Try it; the `[mcp]` extra |
|
|
23
94
|
| [Install once, run offline](#install-once-run-offline) | A kept venv, or a wheelhouse |
|
|
24
95
|
| [Run with pipx at every launch](#run-with-pipx-at-every-launch) | The online form |
|
|
25
|
-
| [Connect it to a host](
|
|
96
|
+
| [Connect it to a host](#-connect-it-to-a-host) | The same five steps per host |
|
|
26
97
|
| [Connect to Claude Code](#connect-to-claude-code) | `--install claude`, `claude mcp remove` |
|
|
27
98
|
| [Connect to Claude Desktop](#connect-to-claude-desktop) | `claude_desktop_config.json` per OS |
|
|
28
99
|
| [Connect to Cursor](#connect-to-cursor) | `~/.cursor/mcp.json` |
|
|
29
100
|
| [Connect to VS Code (GitHub Copilot)](#connect-to-vs-code-github-copilot) | `mcp.json`, `servers` key |
|
|
30
101
|
| [Connect other MCP clients](#connect-other-mcp-clients) | Any stdio host |
|
|
31
|
-
| [Configuration](
|
|
32
|
-
| [Update](
|
|
33
|
-
| [Troubleshooting](
|
|
34
|
-
| [What it serves](
|
|
35
|
-
| [Requirements](
|
|
36
|
-
| [The asset pack](
|
|
37
|
-
| [The operator CLI: `python -m bantamkit.memory`](
|
|
38
|
-
| [Where the Python and Node servers differ](
|
|
39
|
-
| [Module API](
|
|
40
|
-
| [Development](
|
|
41
|
-
| [Documentation](
|
|
42
|
-
|
|
43
|
-
## Install the MCP server
|
|
102
|
+
| [Configuration](#-configuration) | Every flag and variable, with its default |
|
|
103
|
+
| [Update](#-update) | `--update`, pipx, uv, then restart |
|
|
104
|
+
| [Troubleshooting](#-troubleshooting) | Timeouts, refusals, the wrong store |
|
|
105
|
+
| [What it serves](#-what-it-serves) | 14 tools, one prompt, two resource templates |
|
|
106
|
+
| [Requirements](#-requirements) | Python and dependencies |
|
|
107
|
+
| [The asset pack](#-the-asset-pack) | `--assets-root`, `BANTAMKIT_ASSETS` |
|
|
108
|
+
| [The operator CLI: `python -m bantamkit.memory`](#-the-operator-cli-python--m-bantamkitmemory) | status, lint, compact, archived, archive, restore |
|
|
109
|
+
| [Where the Python and Node servers differ](#-where-the-python-and-node-servers-differ) | One store; pdf/.doc/.rtf, CLI name, `build_id`, YAML only PyYAML reads |
|
|
110
|
+
| [Module API](#-module-api) | `import bantamkit`: the library half, measured from the wheel |
|
|
111
|
+
| [Development](#-development) | Clone, test, lint, conformance |
|
|
112
|
+
| [Documentation](#-documentation) | The full docs on GitHub |
|
|
113
|
+
|
|
114
|
+
## 📥 Install the MCP server
|
|
44
115
|
|
|
45
116
|
To try it:
|
|
46
117
|
|
|
@@ -65,18 +136,17 @@ python -m venv <env>
|
|
|
65
136
|
```
|
|
66
137
|
|
|
67
138
|
`--install` records the venv's console script by absolute path with `"args": []`, so no launch
|
|
68
|
-
needs the network or your shell's PATH. Measured on macOS arm64
|
|
69
|
-
|
|
70
|
-
app's PATH, `/usr/bin:/bin:/usr/sbin:/sbin`; the Windows layout (`<env>\Scripts\`) was not.
|
|
139
|
+
needs the network or your shell's PATH. Measured on macOS arm64, it served under a GUI app's
|
|
140
|
+
PATH, `/usr/bin:/bin:/usr/sbin:/sbin`; the Windows layout (`<env>\Scripts\`) was not.
|
|
71
141
|
|
|
72
142
|
**No network on the target? Carry a wheelhouse.** Download it on a machine with the **same OS,
|
|
73
143
|
CPU architecture and Python minor version** (some wheels, such as `pydantic_core`, are built for
|
|
74
144
|
one platform only), copy `wheels/` across, and install from it:
|
|
75
145
|
|
|
76
146
|
```bash
|
|
77
|
-
python -m pip download "bantamkit[mcp]==0.
|
|
147
|
+
python -m pip download "bantamkit[mcp]==0.36.0" -d wheels
|
|
78
148
|
python -m venv <env>
|
|
79
|
-
<env>/bin/pip install --no-index --find-links wheels "bantamkit[mcp]==0.
|
|
149
|
+
<env>/bin/pip install --no-index --find-links wheels "bantamkit[mcp]==0.36.0"
|
|
80
150
|
<env>/bin/bantamkit-mcp --install cursor
|
|
81
151
|
```
|
|
82
152
|
|
|
@@ -94,12 +164,13 @@ exited 1 on a cold pipx home and 0 after one online run
|
|
|
94
164
|
([measured](https://github.com/Ink01101011/bantamkit/blob/main/docs/install.md#pipx-run-launches-online-and-is-offline-only-while-pipxs-cache-lasts)).
|
|
95
165
|
For Claude Code: `claude mcp add bantamkit -s user -- pipx run --spec "bantamkit[mcp]" bantamkit-mcp`.
|
|
96
166
|
|
|
97
|
-
## Connect it to a host
|
|
167
|
+
## 🔌 Connect it to a host
|
|
98
168
|
|
|
99
169
|
`bantamkit-mcp --install <host>` (`claude`, `claude-desktop`, `copilot`, `cursor`) writes an
|
|
100
170
|
entry pointing at the console script you ran. It never prompts, so it behaves the same in a
|
|
101
171
|
terminal, CI or another agent. For the three JSON hosts it backs the file up as
|
|
102
|
-
`<name>.backup-<date
|
|
172
|
+
`<name>.backup-<date>` (a second write the same day takes `<name>.backup-<date>.1`, never
|
|
173
|
+
overwriting a backup), keeps its permissions, and refuses a file that does not parse or a
|
|
103
174
|
differing entry without `--force`.
|
|
104
175
|
|
|
105
176
|
Every host has the same steps: **1** command, **2** file, **3** entry, **4** confirm, **5** undo
|
|
@@ -193,7 +264,7 @@ Any stdio MCP host runs the same `command`/`args` and talks JSON-RPC on stdin an
|
|
|
193
264
|
here is host-specific. Codex and a generic JSON config:
|
|
194
265
|
[docs/mcp.md → Client setup](https://github.com/Ink01101011/bantamkit/blob/main/docs/mcp.md#client-setup).
|
|
195
266
|
|
|
196
|
-
## Configuration
|
|
267
|
+
## 🔧 Configuration
|
|
197
268
|
|
|
198
269
|
Flags go in the entry's `args`; environment variables in its `env` block (or
|
|
199
270
|
`claude mcp add -e NAME=value`). Both runtimes print the same `--help`.
|
|
@@ -213,23 +284,26 @@ Flags go in the entry's `args`; environment variables in its `env` block (or
|
|
|
213
284
|
|
|
214
285
|
Don't add `--store` by reflex: the default is layered, and the layering is most of the value.
|
|
215
286
|
One-shot commands that print and exit: `--install {claude,claude-desktop,copilot,cursor}` (with
|
|
216
|
-
`--force`), `--
|
|
287
|
+
`--force`), `--install-hooks` / `--remove-hooks` (with `--yes`), `--hook`, `--update`,
|
|
288
|
+
`--assets-root`, `--mcp-report`, `--statusline`, `-h`. More:
|
|
217
289
|
[store binding](https://github.com/Ink01101011/bantamkit/blob/main/docs/mcp.md#which-memory-store-the-server-binds) ·
|
|
218
290
|
[pinning](https://github.com/Ink01101011/bantamkit/blob/main/docs/memory.md#pinning-the-store-bantamkit_memory_dir) ·
|
|
219
291
|
[event log](https://github.com/Ink01101011/bantamkit/blob/main/docs/eventlog.md#the-switch) ·
|
|
220
292
|
[prices](https://github.com/Ink01101011/bantamkit/blob/main/docs/ledger.md).
|
|
221
293
|
|
|
222
|
-
## Update
|
|
294
|
+
## 🔄 Update
|
|
223
295
|
|
|
224
296
|
```bash
|
|
225
|
-
<env>/bin/bantamkit-mcp --update # a pip install from PyPI: runs pip install --upgrade bantamkit
|
|
297
|
+
<env>/bin/bantamkit-mcp --update # a pip install from PyPI: runs pip install --upgrade bantamkit==<latest>
|
|
226
298
|
pip install -U "bantamkit[mcp]" # the same, by hand
|
|
227
299
|
pipx upgrade bantamkit # pipx
|
|
228
300
|
uv tool upgrade bantamkit # uv
|
|
229
301
|
```
|
|
230
302
|
|
|
231
|
-
`--update` (`check the package index and update this install if it differs, then exit`)
|
|
232
|
-
|
|
303
|
+
`--update` (`check the package index and update this install if it differs, then exit`) asks
|
|
304
|
+
this interpreter's pip which version the index has (`pip install --dry-run --report -`, so pip's
|
|
305
|
+
own index, proxy and credentials apply), installs exactly that version, and says `updated … to
|
|
306
|
+
<latest>` only after the installed distribution reports it; it is the only network access here. An editable
|
|
233
307
|
install, a local file or a source tree is refused with exit 1 and a sentence naming the manual
|
|
234
308
|
route (for a clone, `git pull`). For a wheelhouse, repeat the download and install.
|
|
235
309
|
|
|
@@ -237,21 +311,21 @@ route (for a clone, `git pull`). For a wheelhouse, repeat the download and insta
|
|
|
237
311
|
Desktop). `bantamkit_status` prints the version **and the `build_id` of the code answering
|
|
238
312
|
you**; a new version with an old `build_id` means an old process.
|
|
239
313
|
|
|
240
|
-
## Troubleshooting
|
|
314
|
+
## 🩺 Troubleshooting
|
|
241
315
|
|
|
242
316
|
| Symptom | Fix |
|
|
243
317
|
|---|---|
|
|
244
318
|
| 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) |
|
|
245
319
|
| `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 |
|
|
246
320
|
| `bantamkit-mcp needs the MCP extra: pip install "bantamkit[mcp]"` | Install with the `[mcp]` extra |
|
|
247
|
-
| `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>` |
|
|
321
|
+
| `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>` (`.backup-<date>.1` and on for a later write the same day) |
|
|
248
322
|
| `… is not valid JSON, so this refuses to touch it` | Fix the host's file by hand, then re-run |
|
|
249
323
|
| `MCP server bantamkit already exists in user config` | `claude mcp remove bantamkit -s user`, then install again |
|
|
250
324
|
| `pinned memory store must be an absolute path` or `pinned memory store is unreachable` | Give `BANTAMKIT_MEMORY_DIR` an absolute path that exists |
|
|
251
325
|
| 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)) |
|
|
252
|
-
| `AssetNotFound: no assets directory found; set BANTAMKIT_ASSETS` | See [The asset pack](
|
|
326
|
+
| `AssetNotFound: no assets directory found; set BANTAMKIT_ASSETS` | See [The asset pack](#-the-asset-pack) |
|
|
253
327
|
|
|
254
|
-
## What it serves
|
|
328
|
+
## 🧰 What it serves
|
|
255
329
|
|
|
256
330
|
It serves 14 tools, the `bantamkit_status` prompt and two resource templates
|
|
257
331
|
(`bantamkit://skills/{name}`, `bantamkit://rubrics/{name}`):
|
|
@@ -266,29 +340,29 @@ It serves 14 tools, the `bantamkit_status` prompt and two resource templates
|
|
|
266
340
|
| `skill_audit` | audit a skill catalogue for findings |
|
|
267
341
|
| `shiftwork_clock_in` | open a unit of work and get its brief |
|
|
268
342
|
| `shiftwork_clock_out` | close a unit with status and accounting |
|
|
269
|
-
| `shiftwork_status` |
|
|
343
|
+
| `shiftwork_status` | read-only progress summary of a checkpoint |
|
|
270
344
|
| `shiftwork_plan` | read-only: which units of a checkpoint its `depends_on` graph permits to run at once. Never moves the cursor |
|
|
271
345
|
| `work_plan` | turn any `{id, depends_on, priority}` graph into the batches that may run in parallel, plus the widest fan-out |
|
|
272
346
|
| `token_ledger` | what a session cost, read off the host's transcripts |
|
|
273
|
-
| `bantamkit_status` |
|
|
347
|
+
| `bantamkit_status` | is bantamkit working, and which build: version, `build_id`, store health against its budget |
|
|
274
348
|
| `build_identity` | report the fingerprint of the source on disk, not the executing code — useful when a machine carries two installs under one name |
|
|
275
349
|
|
|
276
|
-
The document reader `bantamkit_read`
|
|
277
|
-
|
|
350
|
+
The document reader `bantamkit_read` is no longer served; it stays in the library as
|
|
351
|
+
`bantamkit.docread`.
|
|
278
352
|
|
|
279
|
-
## Requirements
|
|
353
|
+
## 📋 Requirements
|
|
280
354
|
|
|
281
355
|
Python 3.11 or newer. Three runtime dependencies — `httpx`, `jsonschema`, `pyyaml` — plus `mcp`
|
|
282
356
|
under the `[mcp]` extra.
|
|
283
357
|
|
|
284
|
-
## The asset pack
|
|
358
|
+
## 📦 The asset pack
|
|
285
359
|
|
|
286
360
|
Contracts, schemas, eval tasks, rubrics and tool manifests ship inside the package.
|
|
287
361
|
`bantamkit-mcp --assets-root` prints the resolved directory and its file count, and
|
|
288
362
|
`BANTAMKIT_ASSETS` overrides it. A build that cannot find the pack fails instead of shipping
|
|
289
|
-
without it
|
|
363
|
+
without it.
|
|
290
364
|
|
|
291
|
-
## The operator CLI: `python -m bantamkit.memory`
|
|
365
|
+
## 🧹 The operator CLI: `python -m bantamkit.memory`
|
|
292
366
|
|
|
293
367
|
Store maintenance, not served over MCP:
|
|
294
368
|
|
|
@@ -304,10 +378,10 @@ python -m bantamkit.memory restore <name>
|
|
|
304
378
|
`archive` moves a fact out without deleting it; `restore` brings it back by name.
|
|
305
379
|
Full reference: [docs/memory.md → The operator CLI](https://github.com/Ink01101011/bantamkit/blob/main/docs/memory.md#the-operator-cli).
|
|
306
380
|
|
|
307
|
-
## Where the Python and Node servers differ
|
|
381
|
+
## 🔀 Where the Python and Node servers differ
|
|
308
382
|
|
|
309
383
|
Both servers read and write the same on-disk store. Every feature lands in both in one change, and
|
|
310
|
-
a conformance case compares their answers.
|
|
384
|
+
a conformance case compares their answers. Four differences are deliberate, each ruled in the
|
|
311
385
|
[divergence table](https://github.com/Ink01101011/bantamkit/blob/main/docs/porting.md#where-the-two-runtimes-deliberately-differ):
|
|
312
386
|
|
|
313
387
|
- **pdf, `.doc` and `.rtf`:** this side's reader (`bantamkit.docread`) reads them, pdf with a
|
|
@@ -317,20 +391,25 @@ a conformance case compares their answers. Three differences are deliberate, eac
|
|
|
317
391
|
text and errors alike.
|
|
318
392
|
- **`build_id`** hashes the executing tree, so it differs by construction; `assets_digest` is
|
|
319
393
|
identical, and that is the one that carries meaning.
|
|
394
|
+
- **Hand-edited YAML that only this side reads.** A fact file's frontmatter is read by PyYAML
|
|
395
|
+
here. Eight shapes it accepts — an anchor, `!!str`, a flow mapping (empty or not), a nested
|
|
396
|
+
flow sequence, a flow-sequence pair, a flow sequence over two lines, an anchored sequence
|
|
397
|
+
item — are refused by name on the Node side, whose recall and save skip that file and say
|
|
398
|
+
so. Every fact the tools *write* is in a shape both sides read.
|
|
320
399
|
|
|
321
|
-
## Module API
|
|
400
|
+
## 🧩 Module API
|
|
322
401
|
|
|
323
402
|
The package is a server first, but it is importable too: `import bantamkit` is a supported call,
|
|
324
403
|
and the names behind it are part of what is published.
|
|
325
404
|
|
|
326
405
|
Everything in this section was measured against the **wheel**, not the source tree: a
|
|
327
|
-
`bantamkit-0.35.
|
|
328
|
-
installed into a throwaway venv
|
|
329
|
-
|
|
406
|
+
`bantamkit-0.35.9-py3-none-any.whl` built from this tree with `pip wheel --no-deps
|
|
407
|
+
--no-build-isolation`, installed into a throwaway venv, and imported from a working directory
|
|
408
|
+
outside the checkout (2026-10-15). A name that only exists in `src/` is not API; this
|
|
330
409
|
is what an importer gets.
|
|
331
410
|
|
|
332
|
-
**There is no `exports` map in Python, so nothing is sealed.**
|
|
333
|
-
|
|
411
|
+
**There is no `exports` map in Python, so nothing is sealed.** Every module in the wheel is
|
|
412
|
+
deep-importable — `from bantamkit.mcpserver import main` resolves, and so does
|
|
334
413
|
`from bantamkit.memory import MemoryStore`. That is the opposite of the npm package, which
|
|
335
414
|
declares a single `.` entry point and refuses every deep import with
|
|
336
415
|
`ERR_PACKAGE_PATH_NOT_EXPORTED`. Only the names below are *intended* as API; the rest are
|
|
@@ -357,7 +436,7 @@ as a side effect of the package's own imports (`agent`, `assets`, `budget`, `cli
|
|
|
357
436
|
**This is not the npm package's export surface.** Both runtimes serve the same fourteen MCP
|
|
358
437
|
tools, but what each one exports *to an importer* is a different product: here it is the
|
|
359
438
|
agent/critique/eval library above; there it is the memory store, the asset pack, the event log,
|
|
360
|
-
the shift-work tools and a set of CPython-semantics shims —
|
|
439
|
+
the shift-work tools and a set of CPython-semantics shims — 141 values behind one entry point. Of
|
|
361
440
|
these 30 names exactly **three** are spelled the same on the npm side (`BantamError`, `Memory`,
|
|
362
441
|
`MemoryStore`), and a spelling is not a promise about behaviour. A parity claim about the MCP
|
|
363
442
|
tools is not a parity claim about these.
|
|
@@ -411,7 +490,7 @@ It prints `45`. The 30 values alone, without the submodules:
|
|
|
411
490
|
Both numbers move whenever `src/bantamkit/__init__.py` does, which is why they are quoted with
|
|
412
491
|
the command that prints them rather than kept in prose.
|
|
413
492
|
|
|
414
|
-
## Development
|
|
493
|
+
## 🧪 Development
|
|
415
494
|
|
|
416
495
|
```bash
|
|
417
496
|
git clone https://github.com/Ink01101011/bantamkit
|
|
@@ -427,7 +506,7 @@ The cross-runtime gate needs Node:
|
|
|
427
506
|
node tools/conformance/run.mjs --all
|
|
428
507
|
```
|
|
429
508
|
|
|
430
|
-
## Documentation
|
|
509
|
+
## 📚 Documentation
|
|
431
510
|
|
|
432
511
|
| Page | Covers |
|
|
433
512
|
|---|---|
|