bantamkit 0.35.7__tar.gz → 0.35.9__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.7 → bantamkit-0.35.9}/PKG-INFO +4 -4
- {bantamkit-0.35.7 → bantamkit-0.35.9}/README.md +2 -2
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/tools/memory_compact.json +1 -2
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/tools/memory_recall.json +1 -3
- bantamkit-0.35.9/_assets/tools/shiftwork_clock_in.json +37 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/tools/shiftwork_clock_out.json +1 -1
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/tools/validate_json.json +1 -1
- bantamkit-0.35.9/_assets/tools/work_plan.json +55 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/__init__.py +1 -1
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/assets.py +29 -3
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/contract.py +393 -6
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/eventlog.py +24 -1
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/hookadapter.py +273 -50
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/hostinstall.py +191 -32
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/mcpreport.py +29 -4
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/mcpserver.py +188 -35
- bantamkit-0.35.9/src/bantamkit/mcpstdio.py +248 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/memory/__main__.py +17 -2
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/memory/component.py +81 -7
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/memory/layers.py +41 -1
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/memory/store.py +325 -38
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/selfupdate.py +212 -73
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/shiftwork.py +244 -42
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/tokenledger.py +22 -1
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/updatecheck.py +33 -4
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/workplan.py +67 -7
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/data/served-tool-surface.json +19 -16
- bantamkit-0.35.9/tests/test_assets.py +48 -0
- bantamkit-0.35.9/tests/test_cli_oneshot.py +113 -0
- bantamkit-0.35.9/tests/test_contract_patterns.py +190 -0
- bantamkit-0.35.9/tests/test_contract_refs.py +155 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_eventlog.py +25 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_hookadapter.py +270 -2
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_hostinstall.py +181 -8
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_hostinstall_hooks.py +140 -2
- bantamkit-0.35.9/tests/test_mcp_request_guard.py +103 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_mcpreport.py +42 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_mcpserver.py +15 -0
- bantamkit-0.35.9/tests/test_mcpstdio_frames.py +68 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_memory.py +326 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_memory_compact_tool.py +8 -1
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_memory_component.py +12 -6
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_memory_layers.py +51 -0
- bantamkit-0.35.9/tests/test_memory_strings.py +372 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_nativeexport.py +10 -7
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_selfupdate.py +368 -34
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_shiftwork.py +420 -2
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_skillaudit.py +53 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_status_surface.py +20 -5
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_tokenledger.py +89 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_updatecheck.py +32 -5
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_workplan.py +82 -0
- bantamkit-0.35.7/_assets/tools/shiftwork_clock_in.json +0 -37
- bantamkit-0.35.7/_assets/tools/work_plan.json +0 -49
- {bantamkit-0.35.7 → bantamkit-0.35.9}/.gitignore +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/contracts/default.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/manifest.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/repo/HISTORY.md +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/repo/README.md +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/repo/docs/architecture.md +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/repo/docs/runbook.md +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/repo/issues/142-settlement-timeout.md +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/repo/patches/0009-retry-budget.patch +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/repo/src/ledger/__init__.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/repo/src/ledger/config.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/repo/src/ledger/errors.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/repo/src/ledger/posting.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/repo/src/ledger/registry.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/repo/src/ledger/report.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/repo/src/ledger/retry.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/repo/src/ledger/settle.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/repo/src/ledger/validate.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/repo/tests/test_posting.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/repo/tests/test_settle.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/tasks/dt-error-contract.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/tasks/dt-handler-map.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/tasks/dt-patch-before-after.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/tasks/dt-retry-attempts.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/tasks/dt-settlement-config.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/tasks/dt-symbol-home.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/tasks/dt-trace-blame.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/devteam/tasks/dt-unread-key.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/document/tasks/doc-large-in-137.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/document/tasks/doc-large-in-359.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/document/tasks/doc-large-in-372.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/document/tasks/doc-large-out-11764.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/document/tasks/doc-large-out-4137.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/document/tasks/doc-large-out-8022.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/document/tasks/doc-small-137.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/document/tasks/doc-small-261.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/document/tasks/doc-small-388.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/fixtures/.gitkeep +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/fixtures/catalog.json +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/perturbations/task-completion.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/tasks/.gitkeep +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/tasks/extract-contact.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/tasks/extract-invoice.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/tasks/extract-order.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/tasks/extract-schedule.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/tasks/extract-versions.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/tasks/nav-prod-port.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/tasks/nav-release-bundle.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/tasks/recall-audit-retention.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/tasks/recall-cache-ttl.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/tasks/recall-db-port.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/tasks/recall-deploy.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/tasks/recall-env-endpoint.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/tasks/recall-oncall-rotation.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/tasks/recall-oncall.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/tasks/recall-org-quota.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/tasks/recall-owner.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/tasks/shop-basket-total.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/tasks/shop-cheapest.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/tasks/shop-compare.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/tasks/shop-gadget-value.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/tasks/shop-stock-total.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/evals/tasks/shop-total.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/pricing/default.json +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/profiles/default.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/profiles/patient.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/rubrics/.gitkeep +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/rubrics/code-quality.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/rubrics/grounded-completion.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/rubrics/task-completion.yaml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/schemas/shiftwork-checkpoint.json +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/skills/.gitkeep +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/skills/file-graph.md +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/skills/memory.md +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/tools/.gitkeep +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/tools/bantamkit_read.json +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/tools/bantamkit_status.json +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/tools/build_identity.json +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/tools/document_list.json +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/tools/document_read.json +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/tools/file_graph.json +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/tools/memory_dream.json +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/tools/memory_save.json +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/tools/repo_map.json +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/tools/shiftwork_plan.json +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/tools/shiftwork_status.json +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/tools/skill_audit.json +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/_assets/tools/token_ledger.json +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/hatch_build.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/pyproject.toml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/agent.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/budget.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/client.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/criticreplay.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/critique.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/docmanifest.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/docread.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/evalrun.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/filegraph.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/loopguard.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/memory/__init__.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/memory/divergence.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/memory/dream.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/pdfread.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/pricing.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/profile.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/repomap.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/skillaudit.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/statusline.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/structured.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/src/bantamkit/textutil.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/cli_exit_status_probe.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/conftest.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/data/docread/bad-crc.docx +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/data/docread/charref-4301-digits.html +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/data/docread/charset-table.json +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/data/docread/compression-method-9.docx +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/data/docread/corrupt-deflate.docx +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/data/docread/encrypted-member.docx +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/data/docread/encrypted-mimetype.odt +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/data/docread/eszett-cell-ref.xlsx +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/data/docread/internal-dtd-entity.docx +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/data/docread/rfc2231-charset.eml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/data/docread/rfc822-nested-twice.eml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/data/docread/unicode-digit-shared-string.xlsx +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/data/docread/x-uuencode.eml +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/data/f8404ab-perturbation-baseline.json +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/data/platform-assumption-baseline.json +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/docread_fixtures.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/perturbation_baseline_harness.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/rbp16_effect_probe.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/rbp18_payload_probe.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_adapter.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_agent.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_amendguard.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_bantamkit_gitignore.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_bantamkit_read_tool.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_budget.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_build_identity.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_client.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_compaction_corpus_survey.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_conformance.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_conformance_harness_resilience.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_conformance_suite_table_gate.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_contract_fanout.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_criticreplay.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_critique.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_doc_commands_gate.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_docread.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_docread_ceilings.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_document_manifest_parity.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_document_setup.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_document_tasks.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_document_tools.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_encoding_gate.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_evalrun.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_field_program_gates.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_field_programs.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_filegraph.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_install_shape.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_ladder_statistics.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_launcher_which.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_layers.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_loopguard.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_mcp_endpoint.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_mcpdrift.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_memory_divergence.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_memory_dream.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_memory_store_tripwire.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_mutmatrix.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_newline_gate.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_packaging.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_pdfread.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_pinharness_ledger.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_platform_assumption_gate.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_pricing.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_readme_separation.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_repo_map_tool.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_repomap.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_served_tool_count_records.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_statusline.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_structured.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_thread_exception_gate.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_tool_manifest.py +0 -0
- {bantamkit-0.35.7 → bantamkit-0.35.9}/tests/test_version_agreement.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: bantamkit
|
|
3
|
-
Version: 0.35.
|
|
3
|
+
Version: 0.35.9
|
|
4
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
5
|
Project-URL: Homepage, https://github.com/Ink01101011/bantamkit
|
|
6
6
|
Project-URL: Repository, https://github.com/Ink01101011/bantamkit
|
|
@@ -103,9 +103,9 @@ CPU architecture and Python minor version** (some wheels, such as `pydantic_core
|
|
|
103
103
|
one platform only), copy `wheels/` across, and install from it:
|
|
104
104
|
|
|
105
105
|
```bash
|
|
106
|
-
python -m pip download "bantamkit[mcp]==0.35.
|
|
106
|
+
python -m pip download "bantamkit[mcp]==0.35.9" -d wheels
|
|
107
107
|
python -m venv <env>
|
|
108
|
-
<env>/bin/pip install --no-index --find-links wheels "bantamkit[mcp]==0.35.
|
|
108
|
+
<env>/bin/pip install --no-index --find-links wheels "bantamkit[mcp]==0.35.9"
|
|
109
109
|
<env>/bin/bantamkit-mcp --install cursor
|
|
110
110
|
```
|
|
111
111
|
|
|
@@ -74,9 +74,9 @@ CPU architecture and Python minor version** (some wheels, such as `pydantic_core
|
|
|
74
74
|
one platform only), copy `wheels/` across, and install from it:
|
|
75
75
|
|
|
76
76
|
```bash
|
|
77
|
-
python -m pip download "bantamkit[mcp]==0.35.
|
|
77
|
+
python -m pip download "bantamkit[mcp]==0.35.9" -d wheels
|
|
78
78
|
python -m venv <env>
|
|
79
|
-
<env>/bin/pip install --no-index --find-links wheels "bantamkit[mcp]==0.35.
|
|
79
|
+
<env>/bin/pip install --no-index --find-links wheels "bantamkit[mcp]==0.35.9"
|
|
80
80
|
<env>/bin/bantamkit-mcp --install cursor
|
|
81
81
|
```
|
|
82
82
|
|
|
@@ -10,8 +10,7 @@
|
|
|
10
10
|
"properties": {
|
|
11
11
|
"reserve": {
|
|
12
12
|
"type": "integer",
|
|
13
|
-
"
|
|
14
|
-
"description": "Bytes of index headroom to free below the budget. Omit for the default: the size of the largest index line the store holds, capped at half the budget."
|
|
13
|
+
"description": "Bytes of index headroom to free below the budget: the target is `budget - reserve`, a negative value counts as 0, any value is capped at half the budget, and 0 compacts to the budget itself. Omit for the default: the room the degraded-index warning demands (the budget minus `(90 * budget - 1) // 100`) plus the size of the largest index line the store holds -- at the default 24000-byte budget with a 39-byte largest line that is 2401 + 39 = 2440, a 21560-byte target."
|
|
15
14
|
}
|
|
16
15
|
}
|
|
17
16
|
},
|
|
@@ -17,9 +17,7 @@
|
|
|
17
17
|
},
|
|
18
18
|
"k": {
|
|
19
19
|
"type": "integer",
|
|
20
|
-
"
|
|
21
|
-
"maximum": 5,
|
|
22
|
-
"description": "Facts wanted. Raised to the store default of 3 when smaller; never lowered below it."
|
|
20
|
+
"description": "Facts wanted, clamped to 1..5. Raised to the store default of 3 when smaller; never lowered below it."
|
|
23
21
|
}
|
|
24
22
|
}
|
|
25
23
|
},
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "shiftwork_clock_in",
|
|
3
|
+
"description": "Shift-work clock-in: schema-validate the checkpoint file and return the brief for the unit at plan.cursor — {unit, role, invariants, handoff, do_not, files} — to hand to the spawned agent verbatim. The unit briefed is the one at plan.cursor, or, when unit_id is given, that unit — either way it must appear in shiftwork_plan's `ready`, the batch the dependency graph says may run now: the cursor unit is held to the same ready test as unit_id. A unit that is not ready (a done or dropped cursor, a cursor whose dependencies have not run, a unit_id naming no unit) is refused with {\"result\": \"error\", \"reason\": \"unit <id> is not ready; ready is <a, b>\"}, and on both paths the refusals of the batch view itself (cycle, unknown dependency, unreadable checkpoint) pass through verbatim; a cursor naming no unit still escalates. Clock-in still never moves plan.cursor; clock_out does. Structured refusals, never exceptions: result=escalate when handoff.open_questions is non-empty, result=success when every unit is done or dropped, result=error when the checkpoint fails validation. Clock-in also WRITES: on result=brief, and only then, it appends one line {event: brief, ts, unit, role} to <checkpoint>.log.jsonl — best-effort: a log it cannot write costs the brief nothing (the brief still returns, no error, only the record is lost). clock_out reads those lines back to write `briefed` on every accounting line, so the ledger is no longer one line per clock-out; a brief line carries `event` and no `status`. See docs/shiftwork.md.",
|
|
4
|
+
"surfaces": [
|
|
5
|
+
"mcp"
|
|
6
|
+
],
|
|
7
|
+
"parameters": {
|
|
8
|
+
"properties": {
|
|
9
|
+
"checkpoint": {
|
|
10
|
+
"title": "Checkpoint",
|
|
11
|
+
"type": "string"
|
|
12
|
+
},
|
|
13
|
+
"unit_id": {
|
|
14
|
+
"anyOf": [
|
|
15
|
+
{
|
|
16
|
+
"type": "string"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"type": "null"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"default": null,
|
|
23
|
+
"title": "Unit Id"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"required": [
|
|
27
|
+
"checkpoint"
|
|
28
|
+
],
|
|
29
|
+
"type": "object",
|
|
30
|
+
"title": "shiftwork_clock_inArguments"
|
|
31
|
+
},
|
|
32
|
+
"output_schema": {
|
|
33
|
+
"type": "object",
|
|
34
|
+
"additionalProperties": true,
|
|
35
|
+
"title": "shiftwork_clock_inDictOutput"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"anyOf": [
|
|
88
88
|
{
|
|
89
89
|
"type": "object",
|
|
90
|
-
"description": "Per-unit cost. Written verbatim, beside ts/unit/role/status, as one line of <checkpoint>.log.jsonl - the ledger the N-sessions experiment reads. The keys named here have fixed meanings so a reader holding only the ledger knows what each number counts, in which unit, and which model produced it; any other key passes through unchanged (a
|
|
90
|
+
"description": "Per-unit cost. Written verbatim, beside ts/unit/role/status, as one line of <checkpoint>.log.jsonl - the ledger the N-sessions experiment reads. The keys named here have fixed meanings so a reader holding only the ledger knows what each number counts, in which unit, and which model produced it; any other key passes through unchanged, except the five the runtime writes itself — unit, role, status, ts, event — which are refused (result=error) before anything is written; a self-reported briefed is overwritten, not refused. Lines written before this schema existed may spell these differently; the schema governs new writes only.",
|
|
91
91
|
"properties": {
|
|
92
92
|
"tokens": {
|
|
93
93
|
"type": "integer",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "validate_json",
|
|
3
|
-
"description": "Validate candidate output text against a JSON Schema. Returns {valid, feedback}; when invalid, feed the feedback back to the model and retry.",
|
|
3
|
+
"description": "Validate candidate output text against a JSON Schema. Returns {valid, feedback}; when invalid, feed the feedback back to the model and retry. The output may be any JSON value; otherwise the first fenced block, or the first object or array in the text, is used. $schema selects draft-04, draft-06, draft-07, 2019-09 or 2020-12 (default); $ref resolves only inside the one schema (\"#\", \"#/...\", \"#name\"), so a remote reference or an embedded $id is refused. pattern is Python re syntax, without inline flags, look-behind, backreferences, atomic or possessive groups, conditional groups or \\N{...}; a document's patterns get 500 ms in total.",
|
|
4
4
|
"surfaces": [
|
|
5
5
|
"mcp"
|
|
6
6
|
],
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "work_plan",
|
|
3
|
+
"description": "Work plan: turn a dependency graph into the batches that may run in parallel. Takes `nodes`, each `{id, depends_on, priority}` — `depends_on` absent or null means none, `priority` defaults to 0 — and answers `{\"result\": \"plan\", \"batches\", \"sequence\", \"width\"}`: batch k holds every node whose dependencies all appear in batches below k, `sequence` is those batches flattened in order, and `width` is the largest batch length — the widest fan-out, which is the number an orchestrator needs to decide whether it can afford the batch. Order inside a batch is priority descending, then the order the nodes were given; both halves are contract, because determinism inside a batch is what two implementations are held to. Empty `nodes` is an ANSWER, not a refusal: no batches, no sequence, width 0. Four refusals, checked in this order and one sentence each: `nodes[<i>].<field> must be ...` for a node whose `id` is not a string, whose `depends_on` is not a list of strings or whose `priority` is not an integer (named by position, never coerced), `duplicate node id <id>`, `node <id> depends on <dep>, which no node declares`, and `the graph has a cycle: <a> -> <b> -> <a>`. It reports what the graph permits and decides nothing about what may actually be dispatched together — `depends_on` encodes logical order, not file contention, so a batch this tool calls parallel may still hold work that writes one file. Pure computation over the nodes it was handed: it opens no file and takes no path. Never mutates.",
|
|
4
|
+
"surfaces": [
|
|
5
|
+
"mcp"
|
|
6
|
+
],
|
|
7
|
+
"parameters": {
|
|
8
|
+
"properties": {
|
|
9
|
+
"nodes": {
|
|
10
|
+
"title": "Nodes",
|
|
11
|
+
"type": "array",
|
|
12
|
+
"items": {
|
|
13
|
+
"type": "object",
|
|
14
|
+
"properties": {
|
|
15
|
+
"id": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "The node's identifier, unique across `nodes`"
|
|
18
|
+
},
|
|
19
|
+
"depends_on": {
|
|
20
|
+
"anyOf": [
|
|
21
|
+
{
|
|
22
|
+
"type": "array",
|
|
23
|
+
"items": {
|
|
24
|
+
"type": "string"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"type": "null"
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"description": "Ids this node waits for; every one of them must be declared by some node. Optional: absent or null means none"
|
|
32
|
+
},
|
|
33
|
+
"priority": {
|
|
34
|
+
"type": "integer",
|
|
35
|
+
"description": "Tie-break inside a batch, descending. Optional; 0 when absent"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"required": [
|
|
39
|
+
"id"
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"required": [
|
|
45
|
+
"nodes"
|
|
46
|
+
],
|
|
47
|
+
"type": "object",
|
|
48
|
+
"title": "work_planArguments"
|
|
49
|
+
},
|
|
50
|
+
"output_schema": {
|
|
51
|
+
"type": "object",
|
|
52
|
+
"additionalProperties": true,
|
|
53
|
+
"title": "work_planDictOutput"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -29,4 +29,4 @@ from bantamkit.structured import StructuredOutputError, extract_json, structured
|
|
|
29
29
|
# file as its dynamic version source, so the wheel's metadata and the string the MCP
|
|
30
30
|
# server advertises are the same committed bytes, and neither is a function of when
|
|
31
31
|
# someone last ran `pip`.
|
|
32
|
-
__version__ = "0.35.
|
|
32
|
+
__version__ = "0.35.9"
|
|
@@ -26,6 +26,32 @@ def assets_root() -> Path:
|
|
|
26
26
|
raise AssetNotFound("no assets directory found; set BANTAMKIT_ASSETS")
|
|
27
27
|
|
|
28
28
|
|
|
29
|
+
def _asset_path(kind: str, name: str, ext: str) -> Path:
|
|
30
|
+
"""job66/#145: the one path every loader below builds, and the containment check on it.
|
|
31
|
+
|
|
32
|
+
`name` is a BARE asset name (`memory`, `shiftwork-checkpoint`, `memory_recall`) and
|
|
33
|
+
nothing else. Before this, each loader joined `name` under its directory verbatim, so a
|
|
34
|
+
caller passing user input could read any `.json`/`.md` on disk through `..`. A name
|
|
35
|
+
holding a path separator (`/` or `\\`, either platform's), `..`, a drive colon or a NUL
|
|
36
|
+
is refused BEFORE any filesystem access, and the joined path is then checked LEXICALLY
|
|
37
|
+
(`os.path.abspath`, not `resolve()`: a pack may be a symlink farm, and the check is about
|
|
38
|
+
the name) to sit directly inside `<root>/<kind>s/`. On Windows `Path("tools") / "C:x"`
|
|
39
|
+
is drive-relative and leaves the pack, which is what the colon refusal and the lexical
|
|
40
|
+
check close. The refusal is an `AssetNotFound`, so the MCP resource handler's existing
|
|
41
|
+
`unknown skill asset: <name>` answer is unchanged. `runtime-ts/src/assets.ts::assetPath`
|
|
42
|
+
raises the same sentence.
|
|
43
|
+
"""
|
|
44
|
+
directory = assets_root() / f"{kind}s"
|
|
45
|
+
path = directory / f"{name}{ext}"
|
|
46
|
+
if (
|
|
47
|
+
any(c in name for c in "/\\:\0")
|
|
48
|
+
or ".." in name
|
|
49
|
+
or os.path.dirname(os.path.abspath(path)) != os.path.abspath(directory)
|
|
50
|
+
):
|
|
51
|
+
raise AssetNotFound(f"{kind} asset name is not a bare name: {name}")
|
|
52
|
+
return path
|
|
53
|
+
|
|
54
|
+
|
|
29
55
|
def load_tool_asset(name: str) -> dict:
|
|
30
56
|
"""Return one tool asset VERBATIM — every key, including the ones no surface uses.
|
|
31
57
|
|
|
@@ -34,7 +60,7 @@ def load_tool_asset(name: str) -> dict:
|
|
|
34
60
|
register this at all?) and `output_schema` (what do I advertise as the return shape?)
|
|
35
61
|
and neither belongs on the agent-facing `Tool`.
|
|
36
62
|
"""
|
|
37
|
-
path =
|
|
63
|
+
path = _asset_path("tool", name, ".json")
|
|
38
64
|
if not path.exists():
|
|
39
65
|
raise AssetNotFound(f"tool asset not found: {path}")
|
|
40
66
|
return json.loads(path.read_text(encoding="utf-8"))
|
|
@@ -54,14 +80,14 @@ def load_tool(name: str) -> Tool:
|
|
|
54
80
|
|
|
55
81
|
def load_schema(name: str) -> dict:
|
|
56
82
|
"""Return a JSON Schema asset (parsed) — e.g. the shift-work checkpoint contract."""
|
|
57
|
-
path =
|
|
83
|
+
path = _asset_path("schema", name, ".json")
|
|
58
84
|
if not path.exists():
|
|
59
85
|
raise AssetNotFound(f"schema asset not found: {path}")
|
|
60
86
|
return json.loads(path.read_text(encoding="utf-8"))
|
|
61
87
|
|
|
62
88
|
|
|
63
89
|
def load_skill(name: str) -> str:
|
|
64
|
-
path =
|
|
90
|
+
path = _asset_path("skill", name, ".md")
|
|
65
91
|
if not path.exists():
|
|
66
92
|
raise AssetNotFound(f"skill asset not found: {path}")
|
|
67
93
|
return path.read_text(encoding="utf-8")
|