brainiac-cli 0.20.42__tar.gz → 0.20.44__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 (359) hide show
  1. {brainiac_cli-0.20.42/src/brainiac_cli.egg-info → brainiac_cli-0.20.44}/PKG-INFO +2 -2
  2. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/pyproject.toml +21 -2
  3. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_version.py +1 -1
  4. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/doctor_desktop.py +7 -3
  5. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/doctor_plugins.py +49 -10
  6. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44/src/brainiac_cli.egg-info}/PKG-INFO +2 -2
  7. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brainiac_cli.egg-info/requires.txt +1 -1
  8. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/LICENSE +0 -0
  9. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/MANIFEST.in +0 -0
  10. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/README.md +0 -0
  11. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/setup.cfg +0 -0
  12. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/__init__.py +0 -0
  13. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/__main__.py +0 -0
  14. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/AGENTS.md +0 -0
  15. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/assets/graph-explorer-template.html +0 -0
  16. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/overlay/template/brand/brand-guide.md +0 -0
  17. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/overlay/template/keywords/glossary.md +0 -0
  18. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/overlay/template/people/roster.md +0 -0
  19. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/overlay/template/voice/voice-profile.md +0 -0
  20. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/routines/manifest.json +0 -0
  21. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/scripts/brain-brief-mac.plist +0 -0
  22. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/scripts/brain-brief.sh +0 -0
  23. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/scripts/brain-synthesis-mac.plist +0 -0
  24. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/scripts/brain-synthesis.sh +0 -0
  25. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/scripts/brain_synthesis_codex.py +0 -0
  26. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/scripts/brainiac-alerts.sh +0 -0
  27. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/scripts/brainiac-egress-guard.sh +0 -0
  28. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/scripts/install-brief-mac.sh +0 -0
  29. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/scripts/install-brief-windows.ps1 +0 -0
  30. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/scripts/register_tasks.py +0 -0
  31. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/scripts/vm-boundary-probe.sh +0 -0
  32. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/scripts/vm-selftest.sh +0 -0
  33. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/templates/company.md +0 -0
  34. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/templates/concept.md +0 -0
  35. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/templates/daily.md +0 -0
  36. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/templates/decision.md +0 -0
  37. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/templates/deliverable.md +0 -0
  38. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/templates/meeting.md +0 -0
  39. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/templates/person.md +0 -0
  40. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/templates/project.md +0 -0
  41. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_assets/templates/state-moc.md +0 -0
  42. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/_optional.py +0 -0
  43. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/alerts.py +0 -0
  44. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/alerts_render.py +0 -0
  45. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/alerts_staging.py +0 -0
  46. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/anchor.py +0 -0
  47. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/atomic_temp.py +0 -0
  48. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/attestation.py +0 -0
  49. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/audit.py +0 -0
  50. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/audit_chain.py +0 -0
  51. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/audit_drift.py +0 -0
  52. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/autolink.py +0 -0
  53. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/backup.py +0 -0
  54. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/brief.py +0 -0
  55. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/brief_render.py +0 -0
  56. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/capture.py +0 -0
  57. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/chunk.py +0 -0
  58. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/classification.py +0 -0
  59. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli.py +0 -0
  60. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/__init__.py +0 -0
  61. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/common_parser.py +0 -0
  62. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/connect.py +0 -0
  63. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/connect_parser.py +0 -0
  64. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/eval.py +0 -0
  65. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/eval_parser.py +0 -0
  66. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/index_storage.py +0 -0
  67. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/index_storage_parser.py +0 -0
  68. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/ingest_storage.py +0 -0
  69. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/ingest_storage_parser.py +0 -0
  70. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/lifecycle.py +0 -0
  71. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/lifecycle_parser.py +0 -0
  72. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/maintenance.py +0 -0
  73. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/maintenance_parser.py +0 -0
  74. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/navigation.py +0 -0
  75. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/navigation_parser.py +0 -0
  76. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/owner_workflow.py +0 -0
  77. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/owner_workflow_parser.py +0 -0
  78. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/presentation.py +0 -0
  79. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/presentation_parser.py +0 -0
  80. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/retrieval.py +0 -0
  81. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/retrieval_parser.py +0 -0
  82. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/update.py +0 -0
  83. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/update_parser.py +0 -0
  84. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/versioning.py +0 -0
  85. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_cmds/versioning_parser.py +0 -0
  86. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_help.py +0 -0
  87. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_read_record.py +0 -0
  88. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cli_render.py +0 -0
  89. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/config.py +0 -0
  90. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/config_hostpaths.py +0 -0
  91. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/connect.py +0 -0
  92. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/context.py +0 -0
  93. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/conventions.py +0 -0
  94. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/conventions_scan.py +0 -0
  95. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/core/__init__.py +0 -0
  96. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/core/_audit.py +0 -0
  97. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/core/_briefing.py +0 -0
  98. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/core/_capture.py +0 -0
  99. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/core/_capture_staging.py +0 -0
  100. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/core/_durability.py +0 -0
  101. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/core/_health.py +0 -0
  102. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/core/_maintenance.py +0 -0
  103. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/core/_maintenance_state.py +0 -0
  104. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/core/_retrieval.py +0 -0
  105. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/core/_shared.py +0 -0
  106. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/core/_supersede_batch.py +0 -0
  107. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/core/_supersession.py +0 -0
  108. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/core/_supersession_journal.py +0 -0
  109. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cowork_leak_artifact.py +0 -0
  110. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cowork_leak_databases.py +0 -0
  111. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cowork_leak_notes.py +0 -0
  112. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cowork_leak_scan.py +0 -0
  113. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cowork_snapshot_guard.py +0 -0
  114. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/cowork_staging.py +0 -0
  115. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/dbretry.py +0 -0
  116. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/deliverables_absorb.py +0 -0
  117. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/deliverables_apply.py +0 -0
  118. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/deliverables_ledger.py +0 -0
  119. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/deliverables_materialize.py +0 -0
  120. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/deliverables_previous.py +0 -0
  121. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/deliverables_readme.py +0 -0
  122. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/deliverables_shelf.py +0 -0
  123. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/deliverables_sync.py +0 -0
  124. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/doctor.py +0 -0
  125. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/doctor_checks.py +0 -0
  126. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/doctor_context.py +0 -0
  127. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/doctor_health.py +0 -0
  128. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/doctor_mount_leak.py +0 -0
  129. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/doctor_staging.py +0 -0
  130. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/doctor_vendor.py +0 -0
  131. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/doctor_vm.py +0 -0
  132. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/doctor_wiring.py +0 -0
  133. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/draft_drain.py +0 -0
  134. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/draft_update.py +0 -0
  135. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/egress.py +0 -0
  136. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/egress_terms.py +0 -0
  137. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/embed.py +0 -0
  138. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/embed_backends.py +0 -0
  139. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/embed_catalog.py +0 -0
  140. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/embed_onnx.py +0 -0
  141. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/embed_qwen.py +0 -0
  142. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/encryption.py +0 -0
  143. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/exceptions_cli.py +0 -0
  144. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/exceptions_page.py +0 -0
  145. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/exceptions_render.py +0 -0
  146. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/exceptions_tray.py +0 -0
  147. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/exceptions_verify.py +0 -0
  148. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/folds/__init__.py +0 -0
  149. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/folds/context.py +0 -0
  150. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/folds/daily.py +0 -0
  151. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/folds/deliverables.py +0 -0
  152. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/folds/golden.py +0 -0
  153. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/folds/graph.py +0 -0
  154. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/folds/intake.py +0 -0
  155. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/folds/invariants.py +0 -0
  156. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/folds/orchestrator.py +0 -0
  157. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/folds/organization.py +0 -0
  158. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/folds/preflight.py +0 -0
  159. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/folds/publish.py +0 -0
  160. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/folds/remediation.py +0 -0
  161. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/folds/remediation_bookkeeping.py +0 -0
  162. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/folds/reporting.py +0 -0
  163. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/folds/retention.py +0 -0
  164. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/folds/watchdogs.py +0 -0
  165. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/folds/weekly.py +0 -0
  166. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/frontmatter.py +0 -0
  167. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/golden_ops.py +0 -0
  168. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/golden_probe.py +0 -0
  169. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/golden_probe_cases.py +0 -0
  170. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/graph.py +0 -0
  171. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/graph_hygiene.py +0 -0
  172. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/graph_ops.py +0 -0
  173. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/graphify.py +0 -0
  174. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/graphify_edges.py +0 -0
  175. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/graphreport.py +0 -0
  176. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/graphreport_sections.py +0 -0
  177. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/graphreport_sections_2.py +0 -0
  178. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/guard_settings.py +0 -0
  179. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/healthreport.py +0 -0
  180. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/healthreport_sections.py +0 -0
  181. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/healthreport_unsigned.py +0 -0
  182. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/inbox.py +0 -0
  183. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index/__init__.py +0 -0
  184. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index/_connection.py +0 -0
  185. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index/_families.py +0 -0
  186. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index/_graph.py +0 -0
  187. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index/_identity.py +0 -0
  188. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index/_lifecycle.py +0 -0
  189. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index/_models.py +0 -0
  190. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index/_planning.py +0 -0
  191. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index/_records.py +0 -0
  192. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index/_retirement.py +0 -0
  193. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index/_schema.py +0 -0
  194. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index/_search.py +0 -0
  195. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index/_settings.py +0 -0
  196. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index/_shared.py +0 -0
  197. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index/_tools.py +0 -0
  198. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index/_zones.py +0 -0
  199. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index_stages/__init__.py +0 -0
  200. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index_stages/connection.py +0 -0
  201. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index_stages/diagnostics.py +0 -0
  202. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index_stages/duplicate_families.py +0 -0
  203. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index_stages/near_duplicates.py +0 -0
  204. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index_stages/rebuild.py +0 -0
  205. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index_stages/reranking.py +0 -0
  206. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index_stages/search.py +0 -0
  207. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index_stages/search_finalization.py +0 -0
  208. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index_stages/search_identity.py +0 -0
  209. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index_stages/search_ranking.py +0 -0
  210. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/index_stages/sync.py +0 -0
  211. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/__init__.py +0 -0
  212. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/deliverables.py +0 -0
  213. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/handlers/__init__.py +0 -0
  214. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/handlers/base.py +0 -0
  215. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/handlers/concealment.py +0 -0
  216. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/handlers/concealment_gate.py +0 -0
  217. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/handlers/concealment_html.py +0 -0
  218. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/handlers/concealment_ledger.py +0 -0
  219. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/handlers/concealment_office.py +0 -0
  220. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/handlers/concealment_pdf.py +0 -0
  221. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/handlers/docx.py +0 -0
  222. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/handlers/email.py +0 -0
  223. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/handlers/html.py +0 -0
  224. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/handlers/image.py +0 -0
  225. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/handlers/ole.py +0 -0
  226. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/handlers/pdf.py +0 -0
  227. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/handlers/pptx.py +0 -0
  228. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/handlers/tables.py +0 -0
  229. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/handlers/text.py +0 -0
  230. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/handlers/xlsx.py +0 -0
  231. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/handlers/zip.py +0 -0
  232. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/pipeline.py +0 -0
  233. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/pipeline_duplicates.py +0 -0
  234. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/pipeline_files.py +0 -0
  235. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/pipeline_injection.py +0 -0
  236. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/pipeline_nested.py +0 -0
  237. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/pipeline_run.py +0 -0
  238. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/pipeline_stages.py +0 -0
  239. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/tierguard.py +0 -0
  240. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/tierguard_verdict.py +0 -0
  241. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/ingest/transcript.py +0 -0
  242. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/init.py +0 -0
  243. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/init_import.py +0 -0
  244. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/init_samples.py +0 -0
  245. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/init_seed.py +0 -0
  246. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/init_steps.py +0 -0
  247. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/injection_fold.py +0 -0
  248. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/injection_scan.py +0 -0
  249. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/interview.py +0 -0
  250. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/interview_apply.py +0 -0
  251. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/interview_detect.py +0 -0
  252. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/invariant_coverage.py +0 -0
  253. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/invariant_crosstier.py +0 -0
  254. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/invariant_deliverables.py +0 -0
  255. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/invariant_floors.py +0 -0
  256. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/invariant_ingest_guard.py +0 -0
  257. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/invariant_lane_health.py +0 -0
  258. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/invariant_reachability.py +0 -0
  259. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/invariant_shared.py +0 -0
  260. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/invariant_unsigned_notes.py +0 -0
  261. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/invariants.py +0 -0
  262. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/invariants_metrics.py +0 -0
  263. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/language.py +0 -0
  264. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/link_targets.py +0 -0
  265. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/lock.py +0 -0
  266. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/maintenance.py +0 -0
  267. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/maintenance_escalation.py +0 -0
  268. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/maintenance_folds.py +0 -0
  269. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/maintenance_folds_2.py +0 -0
  270. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/maintenance_folds_3.py +0 -0
  271. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/maintenance_folds_4.py +0 -0
  272. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/maintenance_golden.py +0 -0
  273. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/maintenance_graphfolds.py +0 -0
  274. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/maintenance_healthlog.py +0 -0
  275. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/maintenance_hotmd.py +0 -0
  276. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/maintenance_invariant_fields.py +0 -0
  277. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/maintenance_notify.py +0 -0
  278. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/maintenance_outcomes.py +0 -0
  279. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/maintenance_para.py +0 -0
  280. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/maintenance_recommendations.py +0 -0
  281. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/maintenance_retention.py +0 -0
  282. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/maintenance_sweep.py +0 -0
  283. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/maintenance_watchdog.py +0 -0
  284. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/mcp_adapter.py +0 -0
  285. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/mcp_capture_verbs.py +0 -0
  286. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/mcp_housekeeping_verbs.py +0 -0
  287. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/mcp_mediation.py +0 -0
  288. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/mcp_supersede_verbs.py +0 -0
  289. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/mcp_tools/__init__.py +0 -0
  290. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/mcp_tools/capture.py +0 -0
  291. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/mcp_tools/core_read.py +0 -0
  292. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/mcp_tools/housekeeping.py +0 -0
  293. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/mcp_tools/retrieval.py +0 -0
  294. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/mcp_tools/supersession.py +0 -0
  295. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/mcp_verbs.py +0 -0
  296. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/multihop.py +0 -0
  297. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/notes.py +0 -0
  298. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/originals_resolve.py +0 -0
  299. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/overlay.py +0 -0
  300. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/overlay_core.py +0 -0
  301. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/overlay_generated.py +0 -0
  302. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/overlay_keywords.py +0 -0
  303. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/overlay_rules.py +0 -0
  304. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/pathkey.py +0 -0
  305. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/progress.py +0 -0
  306. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/projection.py +0 -0
  307. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/provenance.py +0 -0
  308. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/provision.py +0 -0
  309. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/provision_mcp.py +0 -0
  310. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/provision_stage.py +0 -0
  311. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/provision_wire.py +0 -0
  312. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/querylog.py +0 -0
  313. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/querylog_digest.py +0 -0
  314. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/querylog_replay.py +0 -0
  315. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/querylog_status.py +0 -0
  316. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/read_log.py +0 -0
  317. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/reexec.py +0 -0
  318. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/remediation.py +0 -0
  319. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/remediation_answers.py +0 -0
  320. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/remediation_branches.py +0 -0
  321. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/remediation_converged.py +0 -0
  322. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/remediation_exceptions.py +0 -0
  323. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/remediation_exceptions_store.py +0 -0
  324. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/remediation_extract_retry.py +0 -0
  325. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/remediation_folds.py +0 -0
  326. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/remediation_questions.py +0 -0
  327. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/remediation_routing.py +0 -0
  328. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/remediation_schema.py +0 -0
  329. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/remediation_state.py +0 -0
  330. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/rerank.py +0 -0
  331. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/rerank_onnx.py +0 -0
  332. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/retrieval_ops.py +0 -0
  333. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/retro.py +0 -0
  334. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/session_hook.py +0 -0
  335. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/session_hook_settings.py +0 -0
  336. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/session_hook_spec.py +0 -0
  337. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/snapshot.py +0 -0
  338. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/status_ops.py +0 -0
  339. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/supersede_declared.py +0 -0
  340. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/sweepdirs.py +0 -0
  341. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/update.py +0 -0
  342. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/update_channels.py +0 -0
  343. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/update_channels_2.py +0 -0
  344. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/update_cos_guard.py +0 -0
  345. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/update_model.py +0 -0
  346. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/update_ops.py +0 -0
  347. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/update_plugins.py +0 -0
  348. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/update_state.py +0 -0
  349. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/update_venv.py +0 -0
  350. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/vectors.py +0 -0
  351. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/versionlink.py +0 -0
  352. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/versionlink_stages.py +0 -0
  353. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/vm_ceiling.py +0 -0
  354. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/vmstaging.py +0 -0
  355. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brain/workspaces.py +0 -0
  356. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brainiac_cli.egg-info/SOURCES.txt +0 -0
  357. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brainiac_cli.egg-info/dependency_links.txt +0 -0
  358. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brainiac_cli.egg-info/entry_points.txt +0 -0
  359. {brainiac_cli-0.20.42 → brainiac_cli-0.20.44}/src/brainiac_cli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: brainiac-cli
3
- Version: 0.20.42
3
+ Version: 0.20.44
4
4
  Summary: Brainiac — local any-LLM second-brain core engine + brain CLI (Markdown truth, derived SQLite index).
5
5
  License-Expression: Apache-2.0
6
6
  Project-URL: Homepage, https://github.com/Autopsias/brainiac
@@ -60,7 +60,7 @@ Requires-Dist: numpy>=1.24; extra == "eval"
60
60
  Provides-Extra: quant-tools
61
61
  Requires-Dist: onnx>=1.14; extra == "quant-tools"
62
62
  Provides-Extra: mcp
63
- Requires-Dist: mcp<2,>=1.28.1; extra == "mcp"
63
+ Requires-Dist: mcp<2,>=1.30.0; extra == "mcp"
64
64
  Provides-Extra: index
65
65
  Requires-Dist: regex>=2023.0.0; extra == "index"
66
66
  Dynamic: license-file
@@ -8,7 +8,7 @@ build-backend = "setuptools.build_meta"
8
8
  # check. The IMPORT package stays `brain` and the console script stays
9
9
  # `brain` — only the distribution/project name changes.
10
10
  name = "brainiac-cli"
11
- version = "0.20.42"
11
+ version = "0.20.44"
12
12
  description = "Brainiac — local any-LLM second-brain core engine + brain CLI (Markdown truth, derived SQLite index)."
13
13
  readme = "README.md"
14
14
  license = "Apache-2.0"
@@ -122,7 +122,10 @@ quant-tools = ["onnx>=1.14"]
122
122
  # release pipeline's release-asset handshake gate, after it had already shipped).
123
123
  # Upgrade path: port the adapter off FastMCP (mcp.server.lowlevel, or the
124
124
  # separate `fastmcp` package) and lift the cap — a real migration, not a bump.
125
- mcp = ["mcp>=1.28.1,<2"]
125
+ # >=1.30.0: CVE-2026-59951 (Streamable HTTP stateful sessions never reclaimed,
126
+ # unbounded memory) is fixed there. The FLOOR, not just the lock, for the same
127
+ # reason as pypdf above: a plain `pip install` reads this, not requirements.lock.
128
+ mcp = ["mcp>=1.30.0,<2"]
126
129
  # Timeout-bounded regex engine (mrab-regex) used by BrainIndex.grep's --regex
127
130
  # path (RET-04 hardening) as a ReDoS guard: regex.search(text, timeout=...)
128
131
  # genuinely bounds catastrophic backtracking, unlike stdlib `re`. Absent ->
@@ -277,3 +280,19 @@ pythonpath = ["src"]
277
280
  # artifact is ever distributed, re-run the code-origin audit gate first; only a
278
281
  # recorded Legal clearance for internal-only conveyance may reinstate a fork.
279
282
  # ---------------------------------------------------------------------------
283
+
284
+ [tool.ty.environment]
285
+ # The interpreter quality-ratchet.yml installs. tools/check_types.py passes
286
+ # --python sys.prefix, so imports resolve from that same environment.
287
+ python-version = "3.12"
288
+ # CI runs on ubuntu-latest; pinned so a Mac records the same `sys.platform`
289
+ # branches the runner judges.
290
+ python-platform = "linux"
291
+
292
+ [tool.ty.src]
293
+ # Authored Python: the package, its tools, the eval harness and the release
294
+ # scripts. `exclude` MIRRORS [tool.claude-quality].exclude above: a bare
295
+ # directory name there matches at any depth, so it is spelled `**/<name>` here.
296
+ # `_assets` is the generated mirror of tools/ + scripts/ inside src/brain/.
297
+ include = ["src", "tools", "eval", "scripts", "packaging"]
298
+ exclude = ["**/_plans", "**/_archive", "**/_evidence", "**/_assets"]
@@ -9,4 +9,4 @@ pip-installed host, importlib.metadata stays primary; brain/__init__.py reads
9
9
  this file only as the fallback before 0.0.0+unknown.
10
10
  """
11
11
 
12
- __version__ = "0.20.42"
12
+ __version__ = "0.20.44"
@@ -377,7 +377,11 @@ def check_mcp_server_code(config_path: Optional[Path] = None,
377
377
  continue
378
378
  at, version = installed
379
379
  when = datetime.datetime.fromtimestamp(at).strftime("%Y-%m-%d %H:%M")
380
- starts = [start for _pid, start, cmd in procs if command in cmd]
380
+ # Desktop runs each server under its `disclaimer --pgroup --` helper,
381
+ # which carries the same command line: count the server, not the
382
+ # wrapper too (it read "16 processes" for 8 servers, 2026-10-11).
383
+ starts = [start for _pid, start, cmd in procs
384
+ if command in cmd and "/Helpers/disclaimer " not in cmd]
381
385
  old = [s for s in starts if s < at]
382
386
  if not starts:
383
387
  rows.append(_row(surface, NOT_DETECTABLE,
@@ -385,13 +389,13 @@ def check_mcp_server_code(config_path: Optional[Path] = None,
385
389
  raw={"action_needed": False}))
386
390
  elif old:
387
391
  rows.append(_row(surface, MANUAL_REQUIRED,
388
- f"{len(old)} of {len(starts)} running process(es) started before the "
392
+ f"{len(old)} of {len(starts)} running server(s) started before the "
389
393
  f"engine was installed ({version}, {when}) — they still serve the old code",
390
394
  remediation="quit Claude Desktop completely (Cmd+Q) and reopen it",
391
395
  raw={"action_needed": True, "version": version}))
392
396
  else:
393
397
  rows.append(_row(surface, CURRENT,
394
- f"{len(starts)} running process(es), all started after the engine "
398
+ f"{len(starts)} running server(s), all started after the engine "
395
399
  f"install ({version}, {when})", raw={"action_needed": False}))
396
400
  return rows
397
401
 
@@ -237,6 +237,44 @@ def check_plugin_manifests(repo_root: Path, ssot: str) -> list[dict]:
237
237
  # marketplace + installed_plugins.json are both local files, no network).
238
238
  # --------------------------------------------------------------------------
239
239
 
240
+ def _plugin_copies(entries: list, folder_version: Optional[str] = None,
241
+ ) -> tuple[list[dict], Optional[str], int]:
242
+ """Each installed copy of one plugin as (scope, project_path, version),
243
+ plus the last unreadable installPath and the count of orphaned copies.
244
+
245
+ An orphaned copy is a project-scope entry whose project no longer exists
246
+ (a deleted worktree): Claude Code never loads it, and `brain update`
247
+ crashed running `claude plugin update` from the missing directory
248
+ (v0.20.42 deploy, 2026-10-11). It is not a copy to judge or update.
249
+
250
+ ``folder_version`` is set when the marketplace is a local folder. Claude
251
+ Code then reads a project copy straight from that folder ("is read from
252
+ its folder: nothing to update") and never rewrites its registry record, so
253
+ the recorded cache path stays at an old version forever: judge the copy
254
+ by the folder it actually loads (false stale rows after 0.20.42)."""
255
+ copies, unreadable, orphaned = [], None, 0
256
+ for entry in entries:
257
+ if not isinstance(entry, dict):
258
+ unreadable = None
259
+ continue
260
+ project = entry.get("projectPath")
261
+ if entry.get("scope") in ("project", "local") and project and not Path(project).is_dir():
262
+ orphaned += 1
263
+ continue
264
+ if folder_version and entry.get("scope") in ("project", "local"):
265
+ copies.append({"scope": entry["scope"], "project_path": project,
266
+ "version": folder_version})
267
+ continue
268
+ install_path = entry.get("installPath")
269
+ pjson = _read_json(Path(install_path) / ".claude-plugin" / "plugin.json") if install_path else None
270
+ if not (pjson and pjson.get("version")):
271
+ unreadable = install_path
272
+ continue
273
+ copies.append({"scope": entry.get("scope") or "user",
274
+ "project_path": project, "version": pjson["version"]})
275
+ return copies, unreadable, orphaned
276
+
277
+
240
278
  def check_installed_cli_plugins(
241
279
  claude_home: Path, ssot: str, marketplace_name: str = "brainiac",
242
280
  marketplace_dir: Optional[Path] = None,
@@ -246,6 +284,8 @@ def check_installed_cli_plugins(
246
284
  # installLocation, NOT the hardcoded marketplaces/<name> dir — the caller
247
285
  # passes the resolved dir; keep the hardcoded guess only as the fallback.
248
286
  marketplace_dir = marketplace_dir or (claude_home / "plugins" / "marketplaces" / marketplace_name)
287
+ known = (_read_json(claude_home / "plugins" / "known_marketplaces.json") or {}).get(marketplace_name)
288
+ from_folder = ((known or {}).get("source") or {}).get("source") == "directory"
249
289
  for pname in PLUGIN_NAMES:
250
290
  surface = f"Installed CLI plugin ({pname})"
251
291
  mkt_json = marketplace_dir / "plugins" / pname / ".claude-plugin" / "plugin.json"
@@ -289,16 +329,13 @@ def check_installed_cli_plugins(
289
329
  # at its own version. Judge the oldest copy: reading only the first
290
330
  # entry reported a stale copy current (or the reverse) by list order.
291
331
  entries = plugin_entries if isinstance(plugin_entries, list) else [plugin_entries]
292
- copies, unreadable = [], None
293
- for entry in entries:
294
- install_path = entry.get("installPath") if isinstance(entry, dict) else None
295
- pjson = _read_json(Path(install_path) / ".claude-plugin" / "plugin.json") if install_path else None
296
- if not (pjson and pjson.get("version")):
297
- unreadable = install_path
298
- continue
299
- copies.append({"scope": entry.get("scope") or "user",
300
- "project_path": entry.get("projectPath"),
301
- "version": pjson["version"]})
332
+ copies, unreadable, orphaned = _plugin_copies(entries, mkt_version if from_folder else None)
333
+ if orphaned and not copies and unreadable is None:
334
+ rows.append(_row(surface, NOT_DETECTABLE,
335
+ f"installed only for {orphaned} deleted project(s) "
336
+ f"(marketplace has {mkt_version})",
337
+ raw={"marketplace": mkt_version, "orphaned_copies": orphaned}))
338
+ continue
302
339
  if unreadable is not None or not copies:
303
340
  rows.append(_row(surface, UNKNOWN,
304
341
  f"installed but version unreadable at {unreadable}"))
@@ -309,6 +346,8 @@ def check_installed_cli_plugins(
309
346
  pick = min if stale_copies else max
310
347
  installed_version = pick((c["version"] for c in copies), key=cmp_to_key(_compare))
311
348
  where = "" if len(copies) == 1 else f" ({len(stale_copies)} of {len(copies)} copies behind)"
349
+ if orphaned:
350
+ where += f" ({orphaned} copy(ies) for deleted projects ignored)"
312
351
  cmp_ = _compare(installed_version, mkt_version or "")
313
352
  if cmp_ == 0:
314
353
  rows.append(_row(surface, CURRENT, f"installed {installed_version} == marketplace {mkt_version}",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: brainiac-cli
3
- Version: 0.20.42
3
+ Version: 0.20.44
4
4
  Summary: Brainiac — local any-LLM second-brain core engine + brain CLI (Markdown truth, derived SQLite index).
5
5
  License-Expression: Apache-2.0
6
6
  Project-URL: Homepage, https://github.com/Autopsias/brainiac
@@ -60,7 +60,7 @@ Requires-Dist: numpy>=1.24; extra == "eval"
60
60
  Provides-Extra: quant-tools
61
61
  Requires-Dist: onnx>=1.14; extra == "quant-tools"
62
62
  Provides-Extra: mcp
63
- Requires-Dist: mcp<2,>=1.28.1; extra == "mcp"
63
+ Requires-Dist: mcp<2,>=1.30.0; extra == "mcp"
64
64
  Provides-Extra: index
65
65
  Requires-Dist: regex>=2023.0.0; extra == "index"
66
66
  Dynamic: license-file
@@ -52,7 +52,7 @@ openpyxl>=3.1
52
52
  Pillow>=12.3.0
53
53
 
54
54
  [mcp]
55
- mcp<2,>=1.28.1
55
+ mcp<2,>=1.30.0
56
56
 
57
57
  [ocr]
58
58
  pytesseract>=0.3.10
File without changes
File without changes
File without changes