bantamkit 0.34.1__tar.gz → 0.34.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. {bantamkit-0.34.1 → bantamkit-0.34.2}/.gitignore +1 -0
  2. {bantamkit-0.34.1 → bantamkit-0.34.2}/PKG-INFO +75 -99
  3. {bantamkit-0.34.1 → bantamkit-0.34.2}/README.md +74 -98
  4. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/__init__.py +1 -1
  5. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_mutmatrix.py +47 -0
  6. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_thread_exception_gate.py +44 -4
  7. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/contracts/default.yaml +0 -0
  8. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/manifest.yaml +0 -0
  9. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/repo/HISTORY.md +0 -0
  10. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/repo/README.md +0 -0
  11. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/repo/docs/architecture.md +0 -0
  12. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/repo/docs/runbook.md +0 -0
  13. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/repo/issues/142-settlement-timeout.md +0 -0
  14. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/repo/patches/0009-retry-budget.patch +0 -0
  15. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/repo/src/ledger/__init__.py +0 -0
  16. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/repo/src/ledger/config.py +0 -0
  17. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/repo/src/ledger/errors.py +0 -0
  18. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/repo/src/ledger/posting.py +0 -0
  19. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/repo/src/ledger/registry.py +0 -0
  20. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/repo/src/ledger/report.py +0 -0
  21. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/repo/src/ledger/retry.py +0 -0
  22. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/repo/src/ledger/settle.py +0 -0
  23. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/repo/src/ledger/validate.py +0 -0
  24. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/repo/tests/test_posting.py +0 -0
  25. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/repo/tests/test_settle.py +0 -0
  26. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/tasks/dt-error-contract.yaml +0 -0
  27. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/tasks/dt-handler-map.yaml +0 -0
  28. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/tasks/dt-patch-before-after.yaml +0 -0
  29. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/tasks/dt-retry-attempts.yaml +0 -0
  30. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/tasks/dt-settlement-config.yaml +0 -0
  31. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/tasks/dt-symbol-home.yaml +0 -0
  32. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/tasks/dt-trace-blame.yaml +0 -0
  33. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/devteam/tasks/dt-unread-key.yaml +0 -0
  34. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/document/tasks/doc-large-in-137.yaml +0 -0
  35. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/document/tasks/doc-large-in-359.yaml +0 -0
  36. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/document/tasks/doc-large-in-372.yaml +0 -0
  37. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/document/tasks/doc-large-out-11764.yaml +0 -0
  38. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/document/tasks/doc-large-out-4137.yaml +0 -0
  39. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/document/tasks/doc-large-out-8022.yaml +0 -0
  40. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/document/tasks/doc-small-137.yaml +0 -0
  41. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/document/tasks/doc-small-261.yaml +0 -0
  42. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/document/tasks/doc-small-388.yaml +0 -0
  43. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/fixtures/.gitkeep +0 -0
  44. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/fixtures/catalog.json +0 -0
  45. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/perturbations/task-completion.yaml +0 -0
  46. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/tasks/.gitkeep +0 -0
  47. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/tasks/extract-contact.yaml +0 -0
  48. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/tasks/extract-invoice.yaml +0 -0
  49. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/tasks/extract-order.yaml +0 -0
  50. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/tasks/extract-schedule.yaml +0 -0
  51. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/tasks/extract-versions.yaml +0 -0
  52. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/tasks/nav-prod-port.yaml +0 -0
  53. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/tasks/nav-release-bundle.yaml +0 -0
  54. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/tasks/recall-audit-retention.yaml +0 -0
  55. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/tasks/recall-cache-ttl.yaml +0 -0
  56. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/tasks/recall-db-port.yaml +0 -0
  57. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/tasks/recall-deploy.yaml +0 -0
  58. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/tasks/recall-env-endpoint.yaml +0 -0
  59. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/tasks/recall-oncall-rotation.yaml +0 -0
  60. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/tasks/recall-oncall.yaml +0 -0
  61. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/tasks/recall-org-quota.yaml +0 -0
  62. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/tasks/recall-owner.yaml +0 -0
  63. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/tasks/shop-basket-total.yaml +0 -0
  64. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/tasks/shop-cheapest.yaml +0 -0
  65. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/tasks/shop-compare.yaml +0 -0
  66. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/tasks/shop-gadget-value.yaml +0 -0
  67. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/tasks/shop-stock-total.yaml +0 -0
  68. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/evals/tasks/shop-total.yaml +0 -0
  69. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/pricing/default.json +0 -0
  70. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/profiles/default.yaml +0 -0
  71. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/profiles/patient.yaml +0 -0
  72. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/rubrics/.gitkeep +0 -0
  73. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/rubrics/code-quality.yaml +0 -0
  74. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/rubrics/grounded-completion.yaml +0 -0
  75. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/rubrics/task-completion.yaml +0 -0
  76. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/schemas/shiftwork-checkpoint.json +0 -0
  77. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/skills/.gitkeep +0 -0
  78. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/skills/file-graph.md +0 -0
  79. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/skills/memory.md +0 -0
  80. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/tools/.gitkeep +0 -0
  81. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/tools/bantamkit_read.json +0 -0
  82. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/tools/bantamkit_status.json +0 -0
  83. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/tools/build_identity.json +0 -0
  84. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/tools/document_list.json +0 -0
  85. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/tools/document_read.json +0 -0
  86. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/tools/file_graph.json +0 -0
  87. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/tools/memory_compact.json +0 -0
  88. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/tools/memory_dream.json +0 -0
  89. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/tools/memory_recall.json +0 -0
  90. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/tools/memory_save.json +0 -0
  91. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/tools/repo_map.json +0 -0
  92. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/tools/shiftwork_clock_in.json +0 -0
  93. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/tools/shiftwork_clock_out.json +0 -0
  94. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/tools/shiftwork_status.json +0 -0
  95. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/tools/skill_audit.json +0 -0
  96. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/tools/token_ledger.json +0 -0
  97. {bantamkit-0.34.1 → bantamkit-0.34.2}/_assets/tools/validate_json.json +0 -0
  98. {bantamkit-0.34.1 → bantamkit-0.34.2}/hatch_build.py +0 -0
  99. {bantamkit-0.34.1 → bantamkit-0.34.2}/pyproject.toml +0 -0
  100. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/agent.py +0 -0
  101. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/assets.py +0 -0
  102. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/budget.py +0 -0
  103. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/client.py +0 -0
  104. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/contract.py +0 -0
  105. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/criticreplay.py +0 -0
  106. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/critique.py +0 -0
  107. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/docmanifest.py +0 -0
  108. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/docread.py +0 -0
  109. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/evalrun.py +0 -0
  110. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/eventlog.py +0 -0
  111. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/filegraph.py +0 -0
  112. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/hostinstall.py +0 -0
  113. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/loopguard.py +0 -0
  114. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/mcpreport.py +0 -0
  115. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/mcpserver.py +0 -0
  116. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/memory/__init__.py +0 -0
  117. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/memory/__main__.py +0 -0
  118. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/memory/component.py +0 -0
  119. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/memory/divergence.py +0 -0
  120. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/memory/dream.py +0 -0
  121. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/memory/layers.py +0 -0
  122. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/memory/store.py +0 -0
  123. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/pdfread.py +0 -0
  124. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/pricing.py +0 -0
  125. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/profile.py +0 -0
  126. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/repomap.py +0 -0
  127. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/selfupdate.py +0 -0
  128. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/shiftwork.py +0 -0
  129. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/skillaudit.py +0 -0
  130. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/statusline.py +0 -0
  131. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/structured.py +0 -0
  132. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/textutil.py +0 -0
  133. {bantamkit-0.34.1 → bantamkit-0.34.2}/src/bantamkit/tokenledger.py +0 -0
  134. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/cli_exit_status_probe.py +0 -0
  135. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/conftest.py +0 -0
  136. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/data/docread/bad-crc.docx +0 -0
  137. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/data/docread/charref-4301-digits.html +0 -0
  138. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/data/docread/charset-table.json +0 -0
  139. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/data/docread/compression-method-9.docx +0 -0
  140. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/data/docread/corrupt-deflate.docx +0 -0
  141. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/data/docread/encrypted-member.docx +0 -0
  142. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/data/docread/encrypted-mimetype.odt +0 -0
  143. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/data/docread/eszett-cell-ref.xlsx +0 -0
  144. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/data/docread/internal-dtd-entity.docx +0 -0
  145. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/data/docread/rfc2231-charset.eml +0 -0
  146. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/data/docread/rfc822-nested-twice.eml +0 -0
  147. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/data/docread/unicode-digit-shared-string.xlsx +0 -0
  148. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/data/docread/x-uuencode.eml +0 -0
  149. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/data/f8404ab-perturbation-baseline.json +0 -0
  150. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/data/platform-assumption-baseline.json +0 -0
  151. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/data/served-tool-surface.json +0 -0
  152. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/docread_fixtures.py +0 -0
  153. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/perturbation_baseline_harness.py +0 -0
  154. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/rbp16_effect_probe.py +0 -0
  155. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/rbp18_payload_probe.py +0 -0
  156. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_adapter.py +0 -0
  157. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_agent.py +0 -0
  158. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_amendguard.py +0 -0
  159. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_bantamkit_gitignore.py +0 -0
  160. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_bantamkit_read_tool.py +0 -0
  161. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_budget.py +0 -0
  162. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_build_identity.py +0 -0
  163. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_client.py +0 -0
  164. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_compaction_corpus_survey.py +0 -0
  165. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_conformance.py +0 -0
  166. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_conformance_harness_resilience.py +0 -0
  167. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_conformance_suite_table_gate.py +0 -0
  168. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_contract_fanout.py +0 -0
  169. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_criticreplay.py +0 -0
  170. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_critique.py +0 -0
  171. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_doc_commands_gate.py +0 -0
  172. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_docread.py +0 -0
  173. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_docread_ceilings.py +0 -0
  174. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_document_manifest_parity.py +0 -0
  175. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_document_setup.py +0 -0
  176. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_document_tasks.py +0 -0
  177. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_document_tools.py +0 -0
  178. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_encoding_gate.py +0 -0
  179. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_evalrun.py +0 -0
  180. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_eventlog.py +0 -0
  181. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_field_program_gates.py +0 -0
  182. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_field_programs.py +0 -0
  183. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_filegraph.py +0 -0
  184. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_hostinstall.py +0 -0
  185. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_install_shape.py +0 -0
  186. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_ladder_statistics.py +0 -0
  187. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_launcher_which.py +0 -0
  188. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_layers.py +0 -0
  189. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_loopguard.py +0 -0
  190. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_mcp_endpoint.py +0 -0
  191. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_mcpdrift.py +0 -0
  192. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_mcpreport.py +0 -0
  193. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_mcpserver.py +0 -0
  194. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_memory.py +0 -0
  195. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_memory_compact_tool.py +0 -0
  196. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_memory_component.py +0 -0
  197. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_memory_divergence.py +0 -0
  198. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_memory_dream.py +0 -0
  199. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_memory_layers.py +0 -0
  200. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_memory_store_tripwire.py +0 -0
  201. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_newline_gate.py +0 -0
  202. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_packaging.py +0 -0
  203. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_pdfread.py +0 -0
  204. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_pinharness_ledger.py +0 -0
  205. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_platform_assumption_gate.py +0 -0
  206. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_pricing.py +0 -0
  207. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_repo_map_tool.py +0 -0
  208. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_repomap.py +0 -0
  209. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_selfupdate.py +0 -0
  210. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_served_tool_count_records.py +0 -0
  211. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_shiftwork.py +0 -0
  212. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_skillaudit.py +0 -0
  213. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_status_surface.py +0 -0
  214. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_statusline.py +0 -0
  215. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_structured.py +0 -0
  216. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_tokenledger.py +0 -0
  217. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_tool_manifest.py +0 -0
  218. {bantamkit-0.34.1 → bantamkit-0.34.2}/tests/test_version_agreement.py +0 -0
@@ -2,6 +2,7 @@
2
2
  __pycache__/
3
3
  *.egg-info/
4
4
  dist/
5
+ dist-*/
5
6
  .DS_Store
6
7
  .pytest_cache/
7
8
  .ruff_cache/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: bantamkit
3
- Version: 0.34.1
3
+ Version: 0.34.2
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
@@ -43,26 +43,25 @@ easy.
43
43
 
44
44
  | Topic | What you'll find |
45
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 |
46
+ | [Install the MCP server](#install-the-mcp-server) | Try it; the `[mcp]` extra |
47
+ | [Install once, run offline](#install-once-run-offline) | A kept venv, or a wheelhouse |
48
+ | [Run with pipx at every launch](#run-with-pipx-at-every-launch) | The online form |
49
+ | [Connect it to a host](#connect-it-to-a-host) | The same five steps per host |
50
50
  | [Connect to Claude Code](#connect-to-claude-code) | `--install claude`, `claude mcp remove` |
51
51
  | [Connect to Claude Desktop](#connect-to-claude-desktop) | `claude_desktop_config.json` per OS |
52
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 |
53
+ | [Connect to VS Code (GitHub Copilot)](#connect-to-vs-code-github-copilot) | `mcp.json`, `servers` key |
54
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 |
55
+ | [Configuration](#configuration) | Every flag and variable, with its default |
56
+ | [Update](#update) | `--update`, pipx, uv, then restart |
57
57
  | [Troubleshooting](#troubleshooting) | Timeouts, refusals, the wrong store |
58
- | [What it serves](#what-it-serves) | The 12 tools, one prompt, two resource templates |
58
+ | [What it serves](#what-it-serves) | 12 tools, one prompt, two resource templates |
59
59
  | [Requirements](#requirements) | Python and dependencies |
60
- | [The asset pack](#the-asset-pack) | `--assets-root` and `BANTAMKIT_ASSETS` |
60
+ | [The asset pack](#the-asset-pack) | `--assets-root`, `BANTAMKIT_ASSETS` |
61
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` |
62
+ | [Where the Python and Node servers differ](#where-the-python-and-node-servers-differ) | One store; pdf/.doc/.rtf, CLI name, `build_id` |
64
63
  | [Development](#development) | Clone, test, lint, conformance |
65
- | [Documentation](#documentation) | Links to the full docs on GitHub |
64
+ | [Documentation](#documentation) | The full docs on GitHub |
66
65
 
67
66
  ## Install the MCP server
68
67
 
@@ -72,12 +71,11 @@ To try it:
72
71
  pipx run --spec "bantamkit[mcp]" bantamkit-mcp --assets-root
73
72
  ```
74
73
 
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.
74
+ The `[mcp]` extra pulls the MCP SDK. Without it you get the library only, and the server exits
75
+ with `bantamkit-mcp needs the MCP extra: pip install "bantamkit[mcp]"`. The uv form,
76
+ `uvx --from "bantamkit[mcp]" bantamkit-mcp`, is documented but not measured here.
78
77
 
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**.
78
+ A host launches the server every session, so for a host use **install once**.
81
79
 
82
80
  ### Install once, run offline
83
81
 
@@ -90,22 +88,21 @@ python -m venv <env>
90
88
  ```
91
89
 
92
90
  `--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.
91
+ needs the network or your shell's PATH. Measured on macOS arm64, it served 12 tools under a GUI
92
+ app's PATH, `/usr/bin:/bin:/usr/sbin:/sbin`; the Windows layout (`<env>\Scripts\`) was not.
96
93
 
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:
94
+ **No network on the target? Carry a wheelhouse.** Download it on a machine with the **same OS,
95
+ CPU architecture and Python minor version** (some wheels, such as `pydantic_core`, are built for
96
+ one platform only), copy `wheels/` across, and install from it:
100
97
 
101
98
  ```bash
102
- python -m pip download "bantamkit[mcp]==0.34.0" -d wheels
99
+ python -m pip download "bantamkit[mcp]==0.34.2" -d wheels
103
100
  python -m venv <env>
104
- <env>/bin/pip install --no-index --find-links wheels "bantamkit[mcp]==0.34.0"
101
+ <env>/bin/pip install --no-index --find-links wheels "bantamkit[mcp]==0.34.2"
105
102
  <env>/bin/bantamkit-mcp --install cursor
106
103
  ```
107
104
 
108
- To move to a newer version, repeat both steps with the new version number. Measurements:
105
+ For a newer version, repeat both steps with its number. Measurements:
109
106
  [docs/install.md → Python package: measured detail](https://github.com/Ink01101011/bantamkit/blob/main/docs/install.md#python-package-measured-detail).
110
107
 
111
108
  ### Run with pipx at every launch
@@ -114,23 +111,21 @@ To move to a newer version, repeat both steps with the new version number. Measu
114
111
  {"mcpServers": {"bantamkit": {"command": "pipx", "args": ["run", "--spec", "bantamkit[mcp]", "bantamkit-mcp"]}}}
115
112
  ```
116
113
 
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`.
114
+ No venv to keep, but offline it works **only while pipx's cache lasts**: with the network cut it
115
+ exited 1 on a cold pipx home and 0 after one online run
116
+ ([measured](https://github.com/Ink01101011/bantamkit/blob/main/docs/install.md#pipx-run-launches-online-and-is-offline-only-while-pipxs-cache-lasts)).
117
+ For Claude Code: `claude mcp add bantamkit -s user -- pipx run --spec "bantamkit[mcp]" bantamkit-mcp`.
123
118
 
124
119
  ## Connect it to a host
125
120
 
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`.
121
+ `bantamkit-mcp --install <host>` (`claude`, `claude-desktop`, `copilot`, `cursor`) writes an
122
+ entry pointing at the console script you ran. It never prompts, so it behaves the same in a
123
+ terminal, CI or another agent. For the three JSON hosts it backs the file up as
124
+ `<name>.backup-<date>`, keeps its permissions, and refuses a file that does not parse or a
125
+ differing entry without `--force`.
131
126
 
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:
127
+ Every host has the same steps: **1** command, **2** file, **3** entry, **4** confirm, **5** undo
128
+ or re-run. The entry's `command` and `args` depend on the install route:
134
129
 
135
130
  | Route | `command` | `args` |
136
131
  |---|---|---|
@@ -144,11 +139,11 @@ To check a recorded command, run it in a terminal: with nothing on stdin it prin
144
139
  ### Connect to Claude Code
145
140
 
146
141
  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.
142
+ 2. **File:** none edited directly. It runs `claude mcp add bantamkit -s user -- <command>` (user
143
+ scope, every project), because `~/.claude.json` is the host's file and holds more than MCP
144
+ configuration.
150
145
  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
146
+ 4. **Confirm:** `claude mcp list` lists `bantamkit`; in a session, ask the agent to call
152
147
  `bantamkit_status`.
153
148
  5. **Undo / re-run:** `--force` does not reach Claude Code, and a second add fails with
154
149
  `MCP server bantamkit already exists in user config`. Remove first:
@@ -172,7 +167,7 @@ To check a recorded command, run it in a terminal: with nothing on stdin it prin
172
167
 
173
168
  4. **Confirm:** it prints `installed bantamkit into claude-desktop` with file, key and command.
174
169
  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
170
+ 5. **Undo / re-run:** no uninstall flag; delete the `bantamkit` entry or restore
176
171
  `claude_desktop_config.json.backup-<date>`. A matching re-run prints
177
172
  `bantamkit is already installed in claude-desktop and matches`; a differing entry needs `--force`.
178
173
 
@@ -190,8 +185,8 @@ To check a recorded command, run it in a terminal: with nothing on stdin it prin
190
185
  4. **Confirm:** it prints `installed bantamkit into cursor` and `key : mcpServers`. Restart
191
186
  Cursor and ask the agent to call `bantamkit_status`.
192
187
  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`.
188
+ such as an old `pipx run` one, is refused and printed beside the proposed one; replace it with
189
+ `<env>/bin/bantamkit-mcp --install cursor --force`.
195
190
 
196
191
  ### Connect to VS Code (GitHub Copilot)
197
192
 
@@ -199,8 +194,8 @@ To check a recorded command, run it in a terminal: with nothing on stdin it prin
199
194
  2. **File:** macOS `~/Library/Application Support/Code/User/mcp.json` ·
200
195
  Windows `%APPDATA%\Code\User\mcp.json` · Linux `~/.config/Code/User/mcp.json`;
201
196
  `.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:
197
+ 3. **Entry:** the key is **`servers`**, not `mcpServers`, plus `"type": "stdio"` — the detail
198
+ that catches people out:
204
199
 
205
200
  ```json
206
201
  {"servers": {"bantamkit": {"type": "stdio", "command": "/absolute/path/to/env/bin/bantamkit-mcp", "args": []}}}
@@ -213,8 +208,8 @@ To check a recorded command, run it in a terminal: with nothing on stdin it prin
213
208
 
214
209
  ### Connect other MCP clients
215
210
 
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:
211
+ Any stdio MCP host runs the same `command`/`args` and talks JSON-RPC on stdin and stdout; nothing
212
+ here is host-specific. Codex and a generic JSON config:
218
213
  [docs/mcp.md → Client setup](https://github.com/Ink01101011/bantamkit/blob/main/docs/mcp.md#client-setup).
219
214
 
220
215
  ## Configuration
@@ -252,22 +247,20 @@ pipx upgrade bantamkit # pipx
252
247
  uv tool upgrade bantamkit # uv
253
248
  ```
254
249
 
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.
250
+ `--update` (`check the package index and update this install if it differs, then exit`) is the
251
+ only network access here. An editable install, a local file or a source tree is refused with
252
+ exit 1 and a sentence naming the manual route (for a clone, `git pull`). For a wheelhouse, repeat
253
+ the download and install.
260
254
 
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.
255
+ **Then restart the server in the host** (`/mcp` → reconnect in Claude Code; fully restart Claude
256
+ Desktop). `bantamkit_status` prints the version **and the `build_id` of the code answering
257
+ you**; a new version with an old `build_id` means an old process.
265
258
 
266
259
  ## Troubleshooting
267
260
 
268
261
  | Symptom | Fix |
269
262
  |---|---|
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) |
263
+ | The host times out; the server never answers | A `pipx run` entry with a cold cache and no network. Use [Install once, run offline](#install-once-run-offline) |
271
264
  | `ENOENT` from the host | A GUI host does not read your shell rc, so `pipx` is not on its PATH. `--install` records an absolute path |
272
265
  | `bantamkit-mcp needs the MCP extra: pip install "bantamkit[mcp]"` | Install with the `[mcp]` extra |
273
266
  | `already has a bantamkit entry with different settings … re-run with --force to replace it` | Re-run with `--force`; the old file is kept as `.backup-<date>` |
@@ -279,7 +272,7 @@ means an old process.
279
272
 
280
273
  ## What it serves
281
274
 
282
- The server serves 12 tools, the `bantamkit_status` prompt and two resource templates
275
+ 12 tools, the `bantamkit_status` prompt and two resource templates
283
276
  (`bantamkit://skills/{name}`, `bantamkit://rubrics/{name}`):
284
277
 
285
278
  | Tool | What it does |
@@ -295,12 +288,10 @@ The server serves 12 tools, the `bantamkit_status` prompt and two resource templ
295
288
  | `shiftwork_status` | report the open cursor |
296
289
  | `token_ledger` | what a session cost, read off the host's transcripts |
297
290
  | `bantamkit_status` | report store health against its budget |
298
- | `build_identity` | report the fingerprint of the source on disk |
291
+ | `build_identity` | report the fingerprint of the source on disk, not the executing code |
299
292
 
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`.
293
+ The document reader `bantamkit_read` left the served tools in job50 (2026-09-12) and stays in the
294
+ library as `bantamkit.docread`.
304
295
 
305
296
  ## Requirements
306
297
 
@@ -309,20 +300,14 @@ under the `[mcp]` extra.
309
300
 
310
301
  ## The asset pack
311
302
 
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.
303
+ Contracts, schemas, eval tasks, rubrics and tool manifests ship inside the package.
304
+ `bantamkit-mcp --assets-root` prints the resolved directory and its file count, and
305
+ `BANTAMKIT_ASSETS` overrides it. A build that cannot find the pack fails instead of shipping
306
+ without it.
322
307
 
323
308
  ## The operator CLI: `python -m bantamkit.memory`
324
309
 
325
- Memory-store maintenance is separate from the agent-facing tools and is not served over MCP:
310
+ Store maintenance, not served over MCP:
326
311
 
327
312
  ```bash
328
313
  python -m bantamkit.memory status # index size, budget, headroom, archive count
@@ -333,31 +318,22 @@ python -m bantamkit.memory archive <name>
333
318
  python -m bantamkit.memory restore <name>
334
319
  ```
335
320
 
336
- `archive` moves a fact out of the store without deleting it; `restore` brings it back by name.
321
+ `archive` moves a fact out without deleting it; `restore` brings it back by name.
337
322
  Full reference: [docs/memory.md → The operator CLI](https://github.com/Ink01101011/bantamkit/blob/main/docs/memory.md#the-operator-cli).
338
323
 
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
324
  ## Where the Python and Node servers differ
347
325
 
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.
326
+ Both servers read and write the same on-disk store. Every feature lands in both in one change, and
327
+ a conformance case compares their answers. Three differences are deliberate, each ruled in the
328
+ [divergence table](https://github.com/Ink01101011/bantamkit/blob/main/docs/porting.md#where-the-two-runtimes-deliberately-differ):
329
+
330
+ - **pdf, `.doc` and `.rtf`:** this side's reader (`bantamkit.docread`) reads them, pdf with a
331
+ stdlib reader and `.doc`/`.rtf` through macOS `/usr/bin/textutil`; the Node side refuses them
332
+ by name.
333
+ - **The operator CLI** is `python -m bantamkit.memory` here and `bantamkit-memory` there, in help
334
+ text and errors alike.
335
+ - **`build_id`** hashes the executing tree, so it differs by construction; `assets_digest` is
336
+ identical, and that is the one that carries meaning.
361
337
 
362
338
  ## Development
363
339