bantamkit 0.34.0__tar.gz → 0.34.2__tar.gz

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