manicule 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. manicule-0.1.0/.ci/grammars/.gitkeep +9 -0
  2. manicule-0.1.0/.dockerignore +28 -0
  3. manicule-0.1.0/.github/dependabot.yml +249 -0
  4. manicule-0.1.0/.github/workflows/ci.yml +703 -0
  5. manicule-0.1.0/.github/workflows/pr-title.yml +93 -0
  6. manicule-0.1.0/.github/workflows/release.yml +129 -0
  7. manicule-0.1.0/.gitignore +46 -0
  8. manicule-0.1.0/.release-please-manifest.json +3 -0
  9. manicule-0.1.0/.test_durations +3368 -0
  10. manicule-0.1.0/CAPABILITIES.md +372 -0
  11. manicule-0.1.0/CHANGELOG.md +16 -0
  12. manicule-0.1.0/CONTRIBUTING.md +300 -0
  13. manicule-0.1.0/Dockerfile +330 -0
  14. manicule-0.1.0/LICENSE +21 -0
  15. manicule-0.1.0/PKG-INFO +729 -0
  16. manicule-0.1.0/PLAN.md +433 -0
  17. manicule-0.1.0/README.md +626 -0
  18. manicule-0.1.0/RELEASING.md +111 -0
  19. manicule-0.1.0/alembic.ini +46 -0
  20. manicule-0.1.0/compose.yaml +50 -0
  21. manicule-0.1.0/docs/connectors/confluence.md +1224 -0
  22. manicule-0.1.0/docs/connectors/enriched-html.md +549 -0
  23. manicule-0.1.0/docs/contracts.md +268 -0
  24. manicule-0.1.0/docs/deployment.md +581 -0
  25. manicule-0.1.0/docs/embeddings.md +783 -0
  26. manicule-0.1.0/docs/evaluation/example-queries.json +58 -0
  27. manicule-0.1.0/docs/evaluation.md +336 -0
  28. manicule-0.1.0/docs/generation.md +1927 -0
  29. manicule-0.1.0/docs/images/browser-search.png +0 -0
  30. manicule-0.1.0/docs/ingest.md +2364 -0
  31. manicule-0.1.0/docs/parsing.md +2443 -0
  32. manicule-0.1.0/docs/release-notes.md +15 -0
  33. manicule-0.1.0/docs/retrieval.md +2090 -0
  34. manicule-0.1.0/docs/storage.md +2018 -0
  35. manicule-0.1.0/docs/surfaces.md +1161 -0
  36. manicule-0.1.0/docs/web.md +309 -0
  37. manicule-0.1.0/packages/manicule-mlx/LICENSE +674 -0
  38. manicule-0.1.0/packages/manicule-mlx/README.md +76 -0
  39. manicule-0.1.0/packages/manicule-mlx/pyproject.toml +47 -0
  40. manicule-0.1.0/packages/manicule-mlx/src/manicule_mlx/__init__.py +94 -0
  41. manicule-0.1.0/packages/manicule-mlx/src/manicule_mlx/backend.py +251 -0
  42. manicule-0.1.0/packages/manicule-mlx/src/manicule_mlx/config.py +41 -0
  43. manicule-0.1.0/packages/manicule-mlx/src/manicule_mlx/py.typed +0 -0
  44. manicule-0.1.0/packages/manicule-mlx/src/manicule_mlx/runtime.py +40 -0
  45. manicule-0.1.0/packages/manicule-mlx/tests/conftest.py +17 -0
  46. manicule-0.1.0/packages/manicule-mlx/tests/test_memory.py +376 -0
  47. manicule-0.1.0/packages/manicule-mlx/tests/test_parity.py +394 -0
  48. manicule-0.1.0/packages/manicule-mlx/tools/qualify_memory.py +490 -0
  49. manicule-0.1.0/packages/manicule-plugin-example/README.md +48 -0
  50. manicule-0.1.0/packages/manicule-plugin-example/pyproject.toml +20 -0
  51. manicule-0.1.0/packages/manicule-plugin-example/src/manicule_plugin_example/__init__.py +175 -0
  52. manicule-0.1.0/packages/manicule-plugin-example/src/manicule_plugin_example/py.typed +0 -0
  53. manicule-0.1.0/packages/manicule-plugin-example/tests/conftest.py +7 -0
  54. manicule-0.1.0/packages/manicule-plugin-example/tests/test_example_plugin.py +90 -0
  55. manicule-0.1.0/packages/manicule-plugin-hostile/README.md +20 -0
  56. manicule-0.1.0/packages/manicule-plugin-hostile/pyproject.toml +21 -0
  57. manicule-0.1.0/packages/manicule-plugin-hostile/src/manicule_plugin_hostile/__init__.py +269 -0
  58. manicule-0.1.0/packages/manicule-plugin-hostile/src/manicule_plugin_hostile/py.typed +0 -0
  59. manicule-0.1.0/pyproject.toml +531 -0
  60. manicule-0.1.0/release-please-config.json +73 -0
  61. manicule-0.1.0/src/manicule/__init__.py +14 -0
  62. manicule-0.1.0/src/manicule/api/__init__.py +35 -0
  63. manicule-0.1.0/src/manicule/api/app.py +483 -0
  64. manicule-0.1.0/src/manicule/api/context.py +53 -0
  65. manicule-0.1.0/src/manicule/api/envelopes.py +150 -0
  66. manicule-0.1.0/src/manicule/api/models.py +142 -0
  67. manicule-0.1.0/src/manicule/api/origins.py +171 -0
  68. manicule-0.1.0/src/manicule/api/proxy.py +184 -0
  69. manicule-0.1.0/src/manicule/api/routes/__init__.py +16 -0
  70. manicule-0.1.0/src/manicule/api/routes/admin.py +314 -0
  71. manicule-0.1.0/src/manicule/api/routes/auth.py +103 -0
  72. manicule-0.1.0/src/manicule/api/routes/chat.py +103 -0
  73. manicule-0.1.0/src/manicule/api/routes/conversations.py +186 -0
  74. manicule-0.1.0/src/manicule/api/routes/documents.py +165 -0
  75. manicule-0.1.0/src/manicule/api/routes/health.py +91 -0
  76. manicule-0.1.0/src/manicule/api/routes/organization.py +281 -0
  77. manicule-0.1.0/src/manicule/api/routes/plugins.py +73 -0
  78. manicule-0.1.0/src/manicule/api/routes/sockets.py +142 -0
  79. manicule-0.1.0/src/manicule/api/routes/workbench.py +43 -0
  80. manicule-0.1.0/src/manicule/api/security.py +231 -0
  81. manicule-0.1.0/src/manicule/api/serve.py +213 -0
  82. manicule-0.1.0/src/manicule/api/streaming.py +138 -0
  83. manicule-0.1.0/src/manicule/api/widget.py +247 -0
  84. manicule-0.1.0/src/manicule/app/__init__.py +62 -0
  85. manicule-0.1.0/src/manicule/app/bind.py +170 -0
  86. manicule-0.1.0/src/manicule/app/commands.py +384 -0
  87. manicule-0.1.0/src/manicule/app/control.py +946 -0
  88. manicule-0.1.0/src/manicule/app/daemon.py +174 -0
  89. manicule-0.1.0/src/manicule/app/dispatch.py +284 -0
  90. manicule-0.1.0/src/manicule/app/frontdoor.py +159 -0
  91. manicule-0.1.0/src/manicule/app/ports.py +613 -0
  92. manicule-0.1.0/src/manicule/app/results.py +2101 -0
  93. manicule-0.1.0/src/manicule/app/runtime.py +2445 -0
  94. manicule-0.1.0/src/manicule/app/served.py +665 -0
  95. manicule-0.1.0/src/manicule/app/service.py +5881 -0
  96. manicule-0.1.0/src/manicule/app/tenancy.py +104 -0
  97. manicule-0.1.0/src/manicule/chunking/__init__.py +34 -0
  98. manicule-0.1.0/src/manicule/chunking/breadcrumb.py +128 -0
  99. manicule-0.1.0/src/manicule/chunking/chunker.py +1167 -0
  100. manicule-0.1.0/src/manicule/chunking/sentences.py +104 -0
  101. manicule-0.1.0/src/manicule/chunking/tokens.py +232 -0
  102. manicule-0.1.0/src/manicule/cli/__init__.py +20 -0
  103. manicule-0.1.0/src/manicule/cli/main.py +1890 -0
  104. manicule-0.1.0/src/manicule/cli/proxy.py +252 -0
  105. manicule-0.1.0/src/manicule/cli/render.py +1199 -0
  106. manicule-0.1.0/src/manicule/cli/repl.py +144 -0
  107. manicule-0.1.0/src/manicule/cli/serving.py +532 -0
  108. manicule-0.1.0/src/manicule/cli/shell.py +41 -0
  109. manicule-0.1.0/src/manicule/cli/watch.py +111 -0
  110. manicule-0.1.0/src/manicule/config/__init__.py +114 -0
  111. manicule-0.1.0/src/manicule/config/loader.py +71 -0
  112. manicule-0.1.0/src/manicule/config/profiles.py +189 -0
  113. manicule-0.1.0/src/manicule/config/providers.py +381 -0
  114. manicule-0.1.0/src/manicule/config/settings.py +1454 -0
  115. manicule-0.1.0/src/manicule/connectors/__init__.py +54 -0
  116. manicule-0.1.0/src/manicule/connectors/browser.py +581 -0
  117. manicule-0.1.0/src/manicule/connectors/client.py +635 -0
  118. manicule-0.1.0/src/manicule/connectors/config.py +643 -0
  119. manicule-0.1.0/src/manicule/connectors/confluence.py +1649 -0
  120. manicule-0.1.0/src/manicule/connectors/confluence_snapshot.py +771 -0
  121. manicule-0.1.0/src/manicule/connectors/cql.py +224 -0
  122. manicule-0.1.0/src/manicule/connectors/credentials.py +331 -0
  123. manicule-0.1.0/src/manicule/connectors/enriched.py +791 -0
  124. manicule-0.1.0/src/manicule/connectors/enriched_html.py +324 -0
  125. manicule-0.1.0/src/manicule/connectors/errors.py +149 -0
  126. manicule-0.1.0/src/manicule/connectors/filesystem.py +794 -0
  127. manicule-0.1.0/src/manicule/connectors/intercept.py +228 -0
  128. manicule-0.1.0/src/manicule/connectors/macros.py +666 -0
  129. manicule-0.1.0/src/manicule/connectors/pagination.py +154 -0
  130. manicule-0.1.0/src/manicule/connectors/plugin.py +244 -0
  131. manicule-0.1.0/src/manicule/connectors/sessions.py +493 -0
  132. manicule-0.1.0/src/manicule/connectors/sidecar.py +392 -0
  133. manicule-0.1.0/src/manicule/connectors/subtree.py +526 -0
  134. manicule-0.1.0/src/manicule/container/__init__.py +19 -0
  135. manicule-0.1.0/src/manicule/container/container.py +618 -0
  136. manicule-0.1.0/src/manicule/container/keys.py +47 -0
  137. manicule-0.1.0/src/manicule/core/__init__.py +250 -0
  138. manicule-0.1.0/src/manicule/core/acquisition.py +324 -0
  139. manicule-0.1.0/src/manicule/core/anchors.py +246 -0
  140. manicule-0.1.0/src/manicule/core/content.py +563 -0
  141. manicule-0.1.0/src/manicule/core/embedding.py +646 -0
  142. manicule-0.1.0/src/manicule/core/errors.py +335 -0
  143. manicule-0.1.0/src/manicule/core/fingerprints.py +406 -0
  144. manicule-0.1.0/src/manicule/core/generation.py +72 -0
  145. manicule-0.1.0/src/manicule/core/glossary.py +253 -0
  146. manicule-0.1.0/src/manicule/core/ids.py +94 -0
  147. manicule-0.1.0/src/manicule/core/lifecycle.py +208 -0
  148. manicule-0.1.0/src/manicule/core/organization.py +391 -0
  149. manicule-0.1.0/src/manicule/core/protocols.py +1145 -0
  150. manicule-0.1.0/src/manicule/core/provenance.py +478 -0
  151. manicule-0.1.0/src/manicule/core/rebuild.py +297 -0
  152. manicule-0.1.0/src/manicule/core/reconciliation.py +67 -0
  153. manicule-0.1.0/src/manicule/core/retrieval.py +297 -0
  154. manicule-0.1.0/src/manicule/core/source_lifecycle.py +67 -0
  155. manicule-0.1.0/src/manicule/core/sources.py +90 -0
  156. manicule-0.1.0/src/manicule/core/version.py +24 -0
  157. manicule-0.1.0/src/manicule/embedding/__init__.py +28 -0
  158. manicule-0.1.0/src/manicule/embedding/artifacts.py +579 -0
  159. manicule-0.1.0/src/manicule/embedding/base.py +323 -0
  160. manicule-0.1.0/src/manicule/embedding/cache.py +131 -0
  161. manicule-0.1.0/src/manicule/embedding/cards.py +503 -0
  162. manicule-0.1.0/src/manicule/embedding/config.py +65 -0
  163. manicule-0.1.0/src/manicule/embedding/plugin.py +178 -0
  164. manicule-0.1.0/src/manicule/embedding/pooling.py +211 -0
  165. manicule-0.1.0/src/manicule/embedding/runtimes/__init__.py +28 -0
  166. manicule-0.1.0/src/manicule/embedding/runtimes/hub.py +231 -0
  167. manicule-0.1.0/src/manicule/embedding/runtimes/onnx_backend.py +176 -0
  168. manicule-0.1.0/src/manicule/embedding/runtimes/tokenization.py +74 -0
  169. manicule-0.1.0/src/manicule/entry.py +91 -0
  170. manicule-0.1.0/src/manicule/evaluation/__init__.py +136 -0
  171. manicule-0.1.0/src/manicule/evaluation/corpus.py +194 -0
  172. manicule-0.1.0/src/manicule/evaluation/errors.py +99 -0
  173. manicule-0.1.0/src/manicule/evaluation/harness.py +179 -0
  174. manicule-0.1.0/src/manicule/evaluation/judging.py +216 -0
  175. manicule-0.1.0/src/manicule/evaluation/preference.py +302 -0
  176. manicule-0.1.0/src/manicule/evaluation/probe.py +448 -0
  177. manicule-0.1.0/src/manicule/evaluation/queries.py +233 -0
  178. manicule-0.1.0/src/manicule/evaluation/report.py +333 -0
  179. manicule-0.1.0/src/manicule/evaluation/statistics.py +176 -0
  180. manicule-0.1.0/src/manicule/evaluation/systems.py +294 -0
  181. manicule-0.1.0/src/manicule/generation/__init__.py +167 -0
  182. manicule-0.1.0/src/manicule/generation/answering.py +722 -0
  183. manicule-0.1.0/src/manicule/generation/answers.py +467 -0
  184. manicule-0.1.0/src/manicule/generation/binder.py +217 -0
  185. manicule-0.1.0/src/manicule/generation/budget.py +146 -0
  186. manicule-0.1.0/src/manicule/generation/cli_provider.py +346 -0
  187. manicule-0.1.0/src/manicule/generation/config.py +50 -0
  188. manicule-0.1.0/src/manicule/generation/history.py +165 -0
  189. manicule-0.1.0/src/manicule/generation/markers.py +282 -0
  190. manicule-0.1.0/src/manicule/generation/plugin.py +134 -0
  191. manicule-0.1.0/src/manicule/generation/policy.py +187 -0
  192. manicule-0.1.0/src/manicule/generation/ports.py +214 -0
  193. manicule-0.1.0/src/manicule/generation/prompt.py +193 -0
  194. manicule-0.1.0/src/manicule/generation/provider.py +779 -0
  195. manicule-0.1.0/src/manicule/generation/redaction.py +376 -0
  196. manicule-0.1.0/src/manicule/generation/sharing.py +277 -0
  197. manicule-0.1.0/src/manicule/generation/verification.py +653 -0
  198. manicule-0.1.0/src/manicule/ingest/__init__.py +81 -0
  199. manicule-0.1.0/src/manicule/ingest/capacity.py +220 -0
  200. manicule-0.1.0/src/manicule/ingest/embedding.py +417 -0
  201. manicule-0.1.0/src/manicule/ingest/glossary.py +1286 -0
  202. manicule-0.1.0/src/manicule/ingest/glossary_lineage.py +366 -0
  203. manicule-0.1.0/src/manicule/ingest/limits.py +147 -0
  204. manicule-0.1.0/src/manicule/ingest/middleware.py +243 -0
  205. manicule-0.1.0/src/manicule/ingest/pipeline.py +4195 -0
  206. manicule-0.1.0/src/manicule/ingest/ports.py +760 -0
  207. manicule-0.1.0/src/manicule/ingest/rebuild.py +1230 -0
  208. manicule-0.1.0/src/manicule/ingest/reconcile.py +369 -0
  209. manicule-0.1.0/src/manicule/ingest/recovery.py +140 -0
  210. manicule-0.1.0/src/manicule/ingest/reembed.py +1106 -0
  211. manicule-0.1.0/src/manicule/ingest/refusals.py +245 -0
  212. manicule-0.1.0/src/manicule/ingest/reindex.py +1161 -0
  213. manicule-0.1.0/src/manicule/ingest/stages.py +322 -0
  214. manicule-0.1.0/src/manicule/ingest/sweeps.py +153 -0
  215. manicule-0.1.0/src/manicule/ingest/watch.py +173 -0
  216. manicule-0.1.0/src/manicule/ingest/workers.py +1573 -0
  217. manicule-0.1.0/src/manicule/mcp/__init__.py +12 -0
  218. manicule-0.1.0/src/manicule/mcp/__main__.py +45 -0
  219. manicule-0.1.0/src/manicule/mcp/serve.py +193 -0
  220. manicule-0.1.0/src/manicule/mcp/server.py +1151 -0
  221. manicule-0.1.0/src/manicule/parsers/__init__.py +17 -0
  222. manicule-0.1.0/src/manicule/parsers/adf.py +539 -0
  223. manicule-0.1.0/src/manicule/parsers/archive.py +500 -0
  224. manicule-0.1.0/src/manicule/parsers/base.py +240 -0
  225. manicule-0.1.0/src/manicule/parsers/chain.py +315 -0
  226. manicule-0.1.0/src/manicule/parsers/config.py +592 -0
  227. manicule-0.1.0/src/manicule/parsers/confluence.py +1200 -0
  228. manicule-0.1.0/src/manicule/parsers/expansion.py +340 -0
  229. manicule-0.1.0/src/manicule/parsers/grammar_bundle.py +786 -0
  230. manicule-0.1.0/src/manicule/parsers/grammars.py +846 -0
  231. manicule-0.1.0/src/manicule/parsers/inline.py +190 -0
  232. manicule-0.1.0/src/manicule/parsers/mail.py +518 -0
  233. manicule-0.1.0/src/manicule/parsers/markdown.py +425 -0
  234. manicule-0.1.0/src/manicule/parsers/notebook.py +471 -0
  235. manicule-0.1.0/src/manicule/parsers/pdf.py +455 -0
  236. manicule-0.1.0/src/manicule/parsers/plaintext.py +134 -0
  237. manicule-0.1.0/src/manicule/parsers/plugin.py +365 -0
  238. manicule-0.1.0/src/manicule/parsers/slides.py +343 -0
  239. manicule-0.1.0/src/manicule/parsers/sourcecode.py +655 -0
  240. manicule-0.1.0/src/manicule/parsers/spreadsheet.py +483 -0
  241. manicule-0.1.0/src/manicule/parsers/structured.py +631 -0
  242. manicule-0.1.0/src/manicule/parsers/versions.py +328 -0
  243. manicule-0.1.0/src/manicule/parsers/web.py +567 -0
  244. manicule-0.1.0/src/manicule/parsers/word.py +335 -0
  245. manicule-0.1.0/src/manicule/plugins/__init__.py +53 -0
  246. manicule-0.1.0/src/manicule/plugins/compat.py +133 -0
  247. manicule-0.1.0/src/manicule/plugins/manifest.py +108 -0
  248. manicule-0.1.0/src/manicule/plugins/registry.py +486 -0
  249. manicule-0.1.0/src/manicule/py.typed +0 -0
  250. manicule-0.1.0/src/manicule/retrieval/__init__.py +99 -0
  251. manicule-0.1.0/src/manicule/retrieval/assembly.py +151 -0
  252. manicule-0.1.0/src/manicule/retrieval/cache.py +246 -0
  253. manicule-0.1.0/src/manicule/retrieval/confidence.py +695 -0
  254. manicule-0.1.0/src/manicule/retrieval/config.py +166 -0
  255. manicule-0.1.0/src/manicule/retrieval/dense.py +264 -0
  256. manicule-0.1.0/src/manicule/retrieval/expansion.py +390 -0
  257. manicule-0.1.0/src/manicule/retrieval/fusion.py +121 -0
  258. manicule-0.1.0/src/manicule/retrieval/homographs.py +126 -0
  259. manicule-0.1.0/src/manicule/retrieval/hydration.py +52 -0
  260. manicule-0.1.0/src/manicule/retrieval/lexical.py +79 -0
  261. manicule-0.1.0/src/manicule/retrieval/merging.py +58 -0
  262. manicule-0.1.0/src/manicule/retrieval/plugin.py +178 -0
  263. manicule-0.1.0/src/manicule/retrieval/ports.py +108 -0
  264. manicule-0.1.0/src/manicule/retrieval/prefilter.py +188 -0
  265. manicule-0.1.0/src/manicule/retrieval/profile.py +56 -0
  266. manicule-0.1.0/src/manicule/retrieval/rerank.py +135 -0
  267. manicule-0.1.0/src/manicule/retrieval/retriever.py +704 -0
  268. manicule-0.1.0/src/manicule/retrieval/router.py +182 -0
  269. manicule-0.1.0/src/manicule/retrieval/runner.py +246 -0
  270. manicule-0.1.0/src/manicule/retrieval/runtimes/__init__.py +11 -0
  271. manicule-0.1.0/src/manicule/retrieval/runtimes/cross_encoder.py +121 -0
  272. manicule-0.1.0/src/manicule/retrieval/tokens.py +201 -0
  273. manicule-0.1.0/src/manicule/retrieval/trace.py +464 -0
  274. manicule-0.1.0/src/manicule/retrieval/utility.py +119 -0
  275. manicule-0.1.0/src/manicule/storage/__init__.py +0 -0
  276. manicule-0.1.0/src/manicule/storage/acquisition.py +3259 -0
  277. manicule-0.1.0/src/manicule/storage/autogen.py +93 -0
  278. manicule-0.1.0/src/manicule/storage/backup.py +416 -0
  279. manicule-0.1.0/src/manicule/storage/blobs.py +2180 -0
  280. manicule-0.1.0/src/manicule/storage/config.py +51 -0
  281. manicule-0.1.0/src/manicule/storage/conversations.py +563 -0
  282. manicule-0.1.0/src/manicule/storage/docstore.py +1394 -0
  283. manicule-0.1.0/src/manicule/storage/engine.py +293 -0
  284. manicule-0.1.0/src/manicule/storage/fts.py +197 -0
  285. manicule-0.1.0/src/manicule/storage/glossary.py +383 -0
  286. manicule-0.1.0/src/manicule/storage/history.py +454 -0
  287. manicule-0.1.0/src/manicule/storage/legacy_snapshots.py +711 -0
  288. manicule-0.1.0/src/manicule/storage/migrations/env.py +98 -0
  289. manicule-0.1.0/src/manicule/storage/migrations/script.py.mako +28 -0
  290. manicule-0.1.0/src/manicule/storage/migrations/versions/20260810_2674752edf52_initial_schema.py +632 -0
  291. manicule-0.1.0/src/manicule/storage/migrations/versions/20260810_9c1a4f7b2d10_ingest_states.py +185 -0
  292. manicule-0.1.0/src/manicule/storage/migrations/versions/20260810_a71f3c9d0e55_parse_lineage.py +54 -0
  293. manicule-0.1.0/src/manicule/storage/migrations/versions/20260810_c3f81a5b6e42_sharing_and_feedback.py +207 -0
  294. manicule-0.1.0/src/manicule/storage/migrations/versions/20260812_5f1c8a34b7d9_glossary_entries.py +106 -0
  295. manicule-0.1.0/src/manicule/storage/migrations/versions/20260813_b2e6d0c94a17_page_keyed_identity.py +277 -0
  296. manicule-0.1.0/src/manicule/storage/migrations/versions/20260813_d4a90c7e15b3_glossary_lineage.py +61 -0
  297. manicule-0.1.0/src/manicule/storage/migrations/versions/20260814_6e31b7d592ac_atomic_publications.py +82 -0
  298. manicule-0.1.0/src/manicule/storage/migrations/versions/20260815_31c7f944a31e_durable_reembedding.py +188 -0
  299. manicule-0.1.0/src/manicule/storage/migrations/versions/20260815_4d8f12a6bc91_snapshot_promotion.py +302 -0
  300. manicule-0.1.0/src/manicule/storage/migrations/versions/20260815_71be92f03ad4_derived_generations.py +140 -0
  301. manicule-0.1.0/src/manicule/storage/migrations/versions/20260815_7a9c31e4d2b6_legacy_snapshot_scope.py +56 -0
  302. manicule-0.1.0/src/manicule/storage/migrations/versions/20260815_8b7f91e42c0a_scope_reembedding_to_workspaces.py +298 -0
  303. manicule-0.1.0/src/manicule/storage/migrations/versions/20260815_a83d4e106b29_retain_released_document_versions.py +34 -0
  304. manicule-0.1.0/src/manicule/storage/migrations/versions/20260815_b7e4d921ac60_acquisition_recovery.py +68 -0
  305. manicule-0.1.0/src/manicule/storage/migrations/versions/20260815_c41d7ea923b8_acquired_source_envelope.py +42 -0
  306. manicule-0.1.0/src/manicule/storage/migrations/versions/20260815_d52f81a439bc_index_acquisition_marker_names.py +62 -0
  307. manicule-0.1.0/src/manicule/storage/migrations/versions/20260815_e4b81a7c2d90_reconciliation_inventory.py +162 -0
  308. manicule-0.1.0/src/manicule/storage/migrations/versions/20260815_e83a21f96c40_acquisition_marker_inventory.py +49 -0
  309. manicule-0.1.0/src/manicule/storage/migrations/versions/20260815_f7c2a91d4e63_acquisition_journal.py +203 -0
  310. manicule-0.1.0/src/manicule/storage/migrations/versions/20260816_c97a3e2b10f4_rebuild_evidence_verification_fence.py +48 -0
  311. manicule-0.1.0/src/manicule/storage/migrations/versions/20260816_d31f8a6c20e7_source_inventory_reenumeration.py +114 -0
  312. manicule-0.1.0/src/manicule/storage/migrations/versions/20260817_b9e14c72a6f0_bounded_acquisition_writers.py +76 -0
  313. manicule-0.1.0/src/manicule/storage/migrations/versions/20260817_c4b8d1e7a902_workspace_rebuild_snapshots.py +99 -0
  314. manicule-0.1.0/src/manicule/storage/migrations/versions/20260817_e6a2c91f04bd_full_inventory_authority.py +42 -0
  315. manicule-0.1.0/src/manicule/storage/migrations/versions/20260818_f3c18a9d72e1_workspace_index_identity.py +292 -0
  316. manicule-0.1.0/src/manicule/storage/migrator.py +177 -0
  317. manicule-0.1.0/src/manicule/storage/models.py +1616 -0
  318. manicule-0.1.0/src/manicule/storage/organization.py +795 -0
  319. manicule-0.1.0/src/manicule/storage/plugin.py +125 -0
  320. manicule-0.1.0/src/manicule/storage/rebuild.py +2270 -0
  321. manicule-0.1.0/src/manicule/storage/reconciliation.py +624 -0
  322. manicule-0.1.0/src/manicule/storage/reembed.py +1465 -0
  323. manicule-0.1.0/src/manicule/storage/relations.py +205 -0
  324. manicule-0.1.0/src/manicule/storage/rows.py +121 -0
  325. manicule-0.1.0/src/manicule/storage/scoped.py +301 -0
  326. manicule-0.1.0/src/manicule/storage/source_lifecycle.py +855 -0
  327. manicule-0.1.0/src/manicule/storage/types.py +73 -0
  328. manicule-0.1.0/src/manicule/storage/vectors.py +1618 -0
  329. manicule-0.1.0/src/manicule/testing/__init__.py +87 -0
  330. manicule-0.1.0/src/manicule/testing/contracts.py +1360 -0
  331. manicule-0.1.0/src/manicule/testing/fixtures.py +108 -0
  332. manicule-0.1.0/src/manicule/testing/models.py +231 -0
  333. manicule-0.1.0/src/manicule/testing/normalize.py +123 -0
  334. manicule-0.1.0/src/manicule/testing/roundtrip.py +451 -0
  335. manicule-0.1.0/src/manicule/vocabularies/__init__.py +58 -0
  336. manicule-0.1.0/src/manicule/vocabularies/bundle.py +558 -0
  337. manicule-0.1.0/src/manicule/vocabularies/store.py +701 -0
  338. manicule-0.1.0/src/manicule/web/__init__.py +34 -0
  339. manicule-0.1.0/src/manicule/web/areas.py +56 -0
  340. manicule-0.1.0/src/manicule/web/pages.py +638 -0
  341. manicule-0.1.0/src/manicule/web/rendering.py +313 -0
  342. manicule-0.1.0/src/manicule/web/security.py +188 -0
  343. manicule-0.1.0/src/manicule/web/static/manicule.css +245 -0
  344. manicule-0.1.0/src/manicule/web/static/manicule.js +777 -0
  345. manicule-0.1.0/src/manicule/web/templates/admin.html +132 -0
  346. manicule-0.1.0/src/manicule/web/templates/auth.html +94 -0
  347. manicule-0.1.0/src/manicule/web/templates/bare.html +23 -0
  348. manicule-0.1.0/src/manicule/web/templates/chat.html +85 -0
  349. manicule-0.1.0/src/manicule/web/templates/collections.html +61 -0
  350. manicule-0.1.0/src/manicule/web/templates/connectors.html +39 -0
  351. manicule-0.1.0/src/manicule/web/templates/dashboard.html +47 -0
  352. manicule-0.1.0/src/manicule/web/templates/document.html +76 -0
  353. manicule-0.1.0/src/manicule/web/templates/documents.html +68 -0
  354. manicule-0.1.0/src/manicule/web/templates/health.html +23 -0
  355. manicule-0.1.0/src/manicule/web/templates/layout.html +75 -0
  356. manicule-0.1.0/src/manicule/web/templates/lifecycle.html +81 -0
  357. manicule-0.1.0/src/manicule/web/templates/macros.html +55 -0
  358. manicule-0.1.0/src/manicule/web/templates/notfound.html +34 -0
  359. manicule-0.1.0/src/manicule/web/templates/plugins.html +68 -0
  360. manicule-0.1.0/src/manicule/web/templates/problem.html +27 -0
  361. manicule-0.1.0/src/manicule/web/templates/reembed.html +34 -0
  362. manicule-0.1.0/src/manicule/web/templates/refused.html +31 -0
  363. manicule-0.1.0/src/manicule/web/templates/search.html +81 -0
  364. manicule-0.1.0/src/manicule/web/templates/settings.html +80 -0
  365. manicule-0.1.0/src/manicule/web/templates/shared.html +50 -0
  366. manicule-0.1.0/src/manicule/web/templates/trash.html +33 -0
  367. manicule-0.1.0/src/manicule/web/templates/workspaces.html +31 -0
  368. manicule-0.1.0/tests/__init__.py +1 -0
  369. manicule-0.1.0/tests/api/__init__.py +1 -0
  370. manicule-0.1.0/tests/api/live.py +171 -0
  371. manicule-0.1.0/tests/api/support.py +92 -0
  372. manicule-0.1.0/tests/api/test_admin.py +259 -0
  373. manicule-0.1.0/tests/api/test_auth.py +252 -0
  374. manicule-0.1.0/tests/api/test_both_surfaces.py +316 -0
  375. manicule-0.1.0/tests/api/test_browser.py +277 -0
  376. manicule-0.1.0/tests/api/test_contract.py +229 -0
  377. manicule-0.1.0/tests/api/test_health.py +111 -0
  378. manicule-0.1.0/tests/api/test_origins.py +285 -0
  379. manicule-0.1.0/tests/api/test_proxy.py +227 -0
  380. manicule-0.1.0/tests/api/test_routes.py +713 -0
  381. manicule-0.1.0/tests/api/test_serve.py +111 -0
  382. manicule-0.1.0/tests/api/test_sharing.py +303 -0
  383. manicule-0.1.0/tests/api/test_streaming.py +184 -0
  384. manicule-0.1.0/tests/api/test_tenancy.py +227 -0
  385. manicule-0.1.0/tests/app/__init__.py +0 -0
  386. manicule-0.1.0/tests/app/fakes.py +1284 -0
  387. manicule-0.1.0/tests/app/test_bind.py +292 -0
  388. manicule-0.1.0/tests/app/test_cli.py +2403 -0
  389. manicule-0.1.0/tests/app/test_connector_login.py +128 -0
  390. manicule-0.1.0/tests/app/test_control.py +640 -0
  391. manicule-0.1.0/tests/app/test_daemon.py +120 -0
  392. manicule-0.1.0/tests/app/test_front_door.py +435 -0
  393. manicule-0.1.0/tests/app/test_ingest_outcomes.py +775 -0
  394. manicule-0.1.0/tests/app/test_launchd.py +383 -0
  395. manicule-0.1.0/tests/app/test_live_provenance_surface.py +408 -0
  396. manicule-0.1.0/tests/app/test_process_exclusion.py +607 -0
  397. manicule-0.1.0/tests/app/test_proxy.py +495 -0
  398. manicule-0.1.0/tests/app/test_rebuild_failure_envelopes.py +178 -0
  399. manicule-0.1.0/tests/app/test_rebuild_runtime.py +664 -0
  400. manicule-0.1.0/tests/app/test_reembed_runtime.py +231 -0
  401. manicule-0.1.0/tests/app/test_reembed_service.py +84 -0
  402. manicule-0.1.0/tests/app/test_results.py +101 -0
  403. manicule-0.1.0/tests/app/test_runtime.py +1436 -0
  404. manicule-0.1.0/tests/app/test_scheduler.py +478 -0
  405. manicule-0.1.0/tests/app/test_service.py +3004 -0
  406. manicule-0.1.0/tests/app/test_serving.py +231 -0
  407. manicule-0.1.0/tests/app/test_session_handover.py +734 -0
  408. manicule-0.1.0/tests/app/test_shutdown.py +444 -0
  409. manicule-0.1.0/tests/app/test_snapshot_lifecycle.py +217 -0
  410. manicule-0.1.0/tests/app/test_surface_parity.py +885 -0
  411. manicule-0.1.0/tests/app/test_tenancy.py +324 -0
  412. manicule-0.1.0/tests/benchmarks/__init__.py +0 -0
  413. manicule-0.1.0/tests/benchmarks/acquisition_enumeration.py +164 -0
  414. manicule-0.1.0/tests/benchmarks/acquisition_reuse.py +213 -0
  415. manicule-0.1.0/tests/benchmarks/embedding_reuse.py +256 -0
  416. manicule-0.1.0/tests/benchmarks/test_acquisition_reuse_benchmark.py +14 -0
  417. manicule-0.1.0/tests/benchmarks/test_embedding_reuse_benchmark.py +120 -0
  418. manicule-0.1.0/tests/conftest.py +170 -0
  419. manicule-0.1.0/tests/connectors/__init__.py +1 -0
  420. manicule-0.1.0/tests/connectors/fake_confluence.py +826 -0
  421. manicule-0.1.0/tests/connectors/support.py +175 -0
  422. manicule-0.1.0/tests/connectors/test_authoritative_inventory.py +435 -0
  423. manicule-0.1.0/tests/connectors/test_browser_login.py +1043 -0
  424. manicule-0.1.0/tests/connectors/test_browser_sso.py +833 -0
  425. manicule-0.1.0/tests/connectors/test_client.py +220 -0
  426. manicule-0.1.0/tests/connectors/test_confluence_snapshot.py +771 -0
  427. manicule-0.1.0/tests/connectors/test_contract.py +250 -0
  428. manicule-0.1.0/tests/connectors/test_cql_contract.py +189 -0
  429. manicule-0.1.0/tests/connectors/test_data_center.py +582 -0
  430. manicule-0.1.0/tests/connectors/test_discovery.py +300 -0
  431. manicule-0.1.0/tests/connectors/test_enriched_html.py +509 -0
  432. manicule-0.1.0/tests/connectors/test_enriched_storage.py +1484 -0
  433. manicule-0.1.0/tests/connectors/test_fetch.py +674 -0
  434. manicule-0.1.0/tests/connectors/test_filesystem.py +213 -0
  435. manicule-0.1.0/tests/connectors/test_instances.py +404 -0
  436. manicule-0.1.0/tests/connectors/test_macros.py +344 -0
  437. manicule-0.1.0/tests/connectors/test_pagination.py +374 -0
  438. manicule-0.1.0/tests/connectors/test_provenance.py +549 -0
  439. manicule-0.1.0/tests/connectors/test_reconcile.py +144 -0
  440. manicule-0.1.0/tests/connectors/test_sidecar.py +492 -0
  441. manicule-0.1.0/tests/connectors/test_sidecar_source.py +907 -0
  442. manicule-0.1.0/tests/connectors/test_subtree.py +1115 -0
  443. manicule-0.1.0/tests/corpus/__init__.py +84 -0
  444. manicule-0.1.0/tests/corpus/adf.py +268 -0
  445. manicule-0.1.0/tests/corpus/archive.py +269 -0
  446. manicule-0.1.0/tests/corpus/confluence.py +471 -0
  447. manicule-0.1.0/tests/corpus/mail.py +230 -0
  448. manicule-0.1.0/tests/corpus/markdown.py +224 -0
  449. manicule-0.1.0/tests/corpus/notebook.py +265 -0
  450. manicule-0.1.0/tests/corpus/pdf.py +239 -0
  451. manicule-0.1.0/tests/corpus/plaintext.py +114 -0
  452. manicule-0.1.0/tests/corpus/slides.py +307 -0
  453. manicule-0.1.0/tests/corpus/sourcecode.py +440 -0
  454. manicule-0.1.0/tests/corpus/spreadsheet.py +342 -0
  455. manicule-0.1.0/tests/corpus/structured.py +255 -0
  456. manicule-0.1.0/tests/corpus/web.py +225 -0
  457. manicule-0.1.0/tests/corpus/word.py +297 -0
  458. manicule-0.1.0/tests/embedding_fakes.py +157 -0
  459. manicule-0.1.0/tests/embedding_support.py +51 -0
  460. manicule-0.1.0/tests/evaluation/__init__.py +0 -0
  461. manicule-0.1.0/tests/evaluation/fakes.py +299 -0
  462. manicule-0.1.0/tests/evaluation/pipeline.py +148 -0
  463. manicule-0.1.0/tests/evaluation/test_corpus.py +100 -0
  464. manicule-0.1.0/tests/evaluation/test_harness.py +299 -0
  465. manicule-0.1.0/tests/evaluation/test_preference.py +190 -0
  466. manicule-0.1.0/tests/evaluation/test_probe.py +446 -0
  467. manicule-0.1.0/tests/evaluation/test_queries.py +154 -0
  468. manicule-0.1.0/tests/evaluation/test_report.py +256 -0
  469. manicule-0.1.0/tests/evaluation/test_statistics.py +122 -0
  470. manicule-0.1.0/tests/evaluation/test_systems.py +165 -0
  471. manicule-0.1.0/tests/fakes.py +720 -0
  472. manicule-0.1.0/tests/generation/__init__.py +1 -0
  473. manicule-0.1.0/tests/generation/fakes.py +284 -0
  474. manicule-0.1.0/tests/generation/test_answering.py +333 -0
  475. manicule-0.1.0/tests/generation/test_binder.py +381 -0
  476. manicule-0.1.0/tests/generation/test_cli_provider.py +217 -0
  477. manicule-0.1.0/tests/generation/test_conformance.py +113 -0
  478. manicule-0.1.0/tests/generation/test_markers.py +140 -0
  479. manicule-0.1.0/tests/generation/test_prompt_and_history.py +165 -0
  480. manicule-0.1.0/tests/generation/test_provider_and_budget.py +539 -0
  481. manicule-0.1.0/tests/generation/test_redaction_and_policy.py +283 -0
  482. manicule-0.1.0/tests/generation/test_regressions.py +954 -0
  483. manicule-0.1.0/tests/generation/test_sharing.py +148 -0
  484. manicule-0.1.0/tests/glossary/__init__.py +0 -0
  485. manicule-0.1.0/tests/glossary/corpus.py +421 -0
  486. manicule-0.1.0/tests/glossary/skeleton_corpus.py +506 -0
  487. manicule-0.1.0/tests/glossary/system.py +225 -0
  488. manicule-0.1.0/tests/glossary/test_confluence_ingest.py +419 -0
  489. manicule-0.1.0/tests/glossary/test_detection.py +1554 -0
  490. manicule-0.1.0/tests/glossary/test_expansion.py +395 -0
  491. manicule-0.1.0/tests/glossary/test_lineage.py +606 -0
  492. manicule-0.1.0/tests/glossary/test_measured.py +256 -0
  493. manicule-0.1.0/tests/glossary/test_repair.py +684 -0
  494. manicule-0.1.0/tests/glossary/test_retrieval.py +847 -0
  495. manicule-0.1.0/tests/glossary/test_service.py +230 -0
  496. manicule-0.1.0/tests/glossary/test_skeleton_evaluation.py +450 -0
  497. manicule-0.1.0/tests/glossary/test_storage.py +444 -0
  498. manicule-0.1.0/tests/glossary/test_surfaces.py +883 -0
  499. manicule-0.1.0/tests/grammar_support.py +113 -0
  500. manicule-0.1.0/tests/ingest/__init__.py +1 -0
  501. manicule-0.1.0/tests/ingest/fakes.py +1397 -0
  502. manicule-0.1.0/tests/ingest/test_benchmark_stages.py +119 -0
  503. manicule-0.1.0/tests/ingest/test_capacity.py +192 -0
  504. manicule-0.1.0/tests/ingest/test_concurrency.py +1269 -0
  505. manicule-0.1.0/tests/ingest/test_embedding_reuse.py +1098 -0
  506. manicule-0.1.0/tests/ingest/test_generation_rebuild.py +1281 -0
  507. manicule-0.1.0/tests/ingest/test_glossary_lineage.py +197 -0
  508. manicule-0.1.0/tests/ingest/test_middleware.py +137 -0
  509. manicule-0.1.0/tests/ingest/test_pipeline.py +1155 -0
  510. manicule-0.1.0/tests/ingest/test_provenance.py +633 -0
  511. manicule-0.1.0/tests/ingest/test_reconcile.py +167 -0
  512. manicule-0.1.0/tests/ingest/test_recovery.py +126 -0
  513. manicule-0.1.0/tests/ingest/test_reembed_storage.py +1465 -0
  514. manicule-0.1.0/tests/ingest/test_refusals.py +258 -0
  515. manicule-0.1.0/tests/ingest/test_reindex.py +488 -0
  516. manicule-0.1.0/tests/ingest/test_reindex_sweep.py +1282 -0
  517. manicule-0.1.0/tests/ingest/test_served_concurrency.py +927 -0
  518. manicule-0.1.0/tests/ingest/test_shadow_reembed.py +929 -0
  519. manicule-0.1.0/tests/ingest/test_stage_widths.py +159 -0
  520. manicule-0.1.0/tests/ingest/test_stages.py +234 -0
  521. manicule-0.1.0/tests/ingest/test_storage_integration.py +6236 -0
  522. manicule-0.1.0/tests/ingest/test_sweeps.py +145 -0
  523. manicule-0.1.0/tests/ingest/test_watch.py +117 -0
  524. manicule-0.1.0/tests/ingest/test_workers.py +878 -0
  525. manicule-0.1.0/tests/mcp/__init__.py +1 -0
  526. manicule-0.1.0/tests/mcp/qualification.py +648 -0
  527. manicule-0.1.0/tests/mcp/stdio_child.py +40 -0
  528. manicule-0.1.0/tests/mcp/test_annotations.py +490 -0
  529. manicule-0.1.0/tests/mcp/test_qualification.py +322 -0
  530. manicule-0.1.0/tests/mcp/test_stdio.py +148 -0
  531. manicule-0.1.0/tests/mcp/test_transports.py +115 -0
  532. manicule-0.1.0/tests/parsers/__init__.py +0 -0
  533. manicule-0.1.0/tests/parsers/conftest.py +19 -0
  534. manicule-0.1.0/tests/parsers/support.py +172 -0
  535. manicule-0.1.0/tests/parsers/test_adf.py +433 -0
  536. manicule-0.1.0/tests/parsers/test_archive.py +590 -0
  537. manicule-0.1.0/tests/parsers/test_confluence.py +1299 -0
  538. manicule-0.1.0/tests/parsers/test_every_parser.py +430 -0
  539. manicule-0.1.0/tests/parsers/test_grammar_bundle.py +1201 -0
  540. manicule-0.1.0/tests/parsers/test_grammars.py +677 -0
  541. manicule-0.1.0/tests/parsers/test_inline.py +156 -0
  542. manicule-0.1.0/tests/parsers/test_mail.py +681 -0
  543. manicule-0.1.0/tests/parsers/test_markdown.py +468 -0
  544. manicule-0.1.0/tests/parsers/test_notebook.py +404 -0
  545. manicule-0.1.0/tests/parsers/test_pdf.py +480 -0
  546. manicule-0.1.0/tests/parsers/test_plaintext.py +271 -0
  547. manicule-0.1.0/tests/parsers/test_slides.py +434 -0
  548. manicule-0.1.0/tests/parsers/test_sourcecode.py +772 -0
  549. manicule-0.1.0/tests/parsers/test_spreadsheet.py +449 -0
  550. manicule-0.1.0/tests/parsers/test_structured.py +401 -0
  551. manicule-0.1.0/tests/parsers/test_versions.py +279 -0
  552. manicule-0.1.0/tests/parsers/test_web.py +829 -0
  553. manicule-0.1.0/tests/parsers/test_word.py +414 -0
  554. manicule-0.1.0/tests/retrieval/__init__.py +1 -0
  555. manicule-0.1.0/tests/retrieval/fakes.py +201 -0
  556. manicule-0.1.0/tests/retrieval/test_assembly.py +228 -0
  557. manicule-0.1.0/tests/retrieval/test_cache.py +273 -0
  558. manicule-0.1.0/tests/retrieval/test_confidence.py +656 -0
  559. manicule-0.1.0/tests/retrieval/test_dense.py +386 -0
  560. manicule-0.1.0/tests/retrieval/test_fusion.py +152 -0
  561. manicule-0.1.0/tests/retrieval/test_lexical.py +124 -0
  562. manicule-0.1.0/tests/retrieval/test_prefilter.py +136 -0
  563. manicule-0.1.0/tests/retrieval/test_rerank.py +136 -0
  564. manicule-0.1.0/tests/retrieval/test_retriever.py +597 -0
  565. manicule-0.1.0/tests/retrieval/test_router.py +115 -0
  566. manicule-0.1.0/tests/retrieval/test_runner.py +246 -0
  567. manicule-0.1.0/tests/routing_support.py +175 -0
  568. manicule-0.1.0/tests/storage_helpers.py +131 -0
  569. manicule-0.1.0/tests/test_american_english.py +442 -0
  570. manicule-0.1.0/tests/test_anchors.py +148 -0
  571. manicule-0.1.0/tests/test_capabilities.py +111 -0
  572. manicule-0.1.0/tests/test_chunking.py +914 -0
  573. manicule-0.1.0/tests/test_ci_format_scope.py +129 -0
  574. manicule-0.1.0/tests/test_ci_grammar_cache.py +168 -0
  575. manicule-0.1.0/tests/test_ci_link_check.py +308 -0
  576. manicule-0.1.0/tests/test_ci_switches.py +232 -0
  577. manicule-0.1.0/tests/test_ci_test_sharding.py +197 -0
  578. manicule-0.1.0/tests/test_collections.py +613 -0
  579. manicule-0.1.0/tests/test_config.py +519 -0
  580. manicule-0.1.0/tests/test_conformance.py +534 -0
  581. manicule-0.1.0/tests/test_container.py +505 -0
  582. manicule-0.1.0/tests/test_content.py +167 -0
  583. manicule-0.1.0/tests/test_corpus.py +144 -0
  584. manicule-0.1.0/tests/test_embedding_backends.py +282 -0
  585. manicule-0.1.0/tests/test_embedding_cache.py +123 -0
  586. manicule-0.1.0/tests/test_embedding_embedder.py +333 -0
  587. manicule-0.1.0/tests/test_embedding_hub.py +93 -0
  588. manicule-0.1.0/tests/test_embedding_models.py +643 -0
  589. manicule-0.1.0/tests/test_embedding_pooling.py +201 -0
  590. manicule-0.1.0/tests/test_fingerprints.py +260 -0
  591. manicule-0.1.0/tests/test_import_boundary.py +432 -0
  592. manicule-0.1.0/tests/test_integration.py +378 -0
  593. manicule-0.1.0/tests/test_license_boundary.py +198 -0
  594. manicule-0.1.0/tests/test_packaging.py +328 -0
  595. manicule-0.1.0/tests/test_parser_chain.py +241 -0
  596. manicule-0.1.0/tests/test_parser_streams.py +173 -0
  597. manicule-0.1.0/tests/test_plugins.py +309 -0
  598. manicule-0.1.0/tests/test_protocol_signatures.py +199 -0
  599. manicule-0.1.0/tests/test_provenance.py +395 -0
  600. manicule-0.1.0/tests/test_roundtrip.py +425 -0
  601. manicule-0.1.0/tests/test_storage_acquisition.py +3888 -0
  602. manicule-0.1.0/tests/test_storage_backup.py +425 -0
  603. manicule-0.1.0/tests/test_storage_blobs.py +2597 -0
  604. manicule-0.1.0/tests/test_storage_conversations.py +515 -0
  605. manicule-0.1.0/tests/test_storage_docstore.py +571 -0
  606. manicule-0.1.0/tests/test_storage_fts.py +190 -0
  607. manicule-0.1.0/tests/test_storage_legacy_snapshots.py +762 -0
  608. manicule-0.1.0/tests/test_storage_migrations.py +1413 -0
  609. manicule-0.1.0/tests/test_storage_organization.py +616 -0
  610. manicule-0.1.0/tests/test_storage_rebuild.py +2878 -0
  611. manicule-0.1.0/tests/test_storage_reconciliation.py +417 -0
  612. manicule-0.1.0/tests/test_storage_schema.py +458 -0
  613. manicule-0.1.0/tests/test_storage_source_lifecycle.py +624 -0
  614. manicule-0.1.0/tests/test_storage_vectors.py +1015 -0
  615. manicule-0.1.0/tests/test_vocabulary.py +278 -0
  616. manicule-0.1.0/tests/vocabularies/__init__.py +1 -0
  617. manicule-0.1.0/tests/vocabularies/test_vocabulary_bundle.py +1172 -0
  618. manicule-0.1.0/tests/vocabularies/test_vocabulary_cache.py +132 -0
  619. manicule-0.1.0/tests/vocabulary_support.py +87 -0
  620. manicule-0.1.0/tests/web/__init__.py +1 -0
  621. manicule-0.1.0/tests/web/support.py +228 -0
  622. manicule-0.1.0/tests/web/test_boundaries.py +239 -0
  623. manicule-0.1.0/tests/web/test_empty_states.py +161 -0
  624. manicule-0.1.0/tests/web/test_escaping.py +254 -0
  625. manicule-0.1.0/tests/web/test_pages.py +351 -0
  626. manicule-0.1.0/tests/web/test_script_runtime.py +361 -0
  627. manicule-0.1.0/tests/web/test_sharing.py +153 -0
  628. manicule-0.1.0/tests/web/test_tenancy.py +192 -0
  629. manicule-0.1.0/tools/benchmark_ingest_stages.py +384 -0
  630. manicule-0.1.0/tools/build_grammar_bundle.py +227 -0
  631. manicule-0.1.0/tools/build_vocabulary_bundle.py +127 -0
  632. manicule-0.1.0/tools/check_link_report.py +135 -0
  633. manicule-0.1.0/tools/extract_surface.py +238 -0
  634. manicule-0.1.0/tools/launchd/com.manicule.server.plist +85 -0
  635. manicule-0.1.0/tools/prefetch_embedding_models.py +133 -0
  636. manicule-0.1.0/tools/smoke_offline_rebuild_settlement.py +455 -0
  637. manicule-0.1.0/uv.lock +4604 -0
@@ -0,0 +1,9 @@
1
+ # Kept so that the Dockerfile's `COPY .ci/grammars` resolves on a clean clone, where nothing
2
+ # has staged anything here. An absent directory is a build that fails at the copy; an empty one
3
+ # is a build that downloads the grammar release itself, which is what a developer running
4
+ # `docker build .` wants and gets.
5
+ #
6
+ # CI fills this from a cache before building — see the container job in
7
+ # .github/workflows/ci.yml — so that the release is fetched once per pack version rather than
8
+ # once per pull request. Contents are ignored by git: they are compiled libraries for one
9
+ # platform and one release, which is the definition of something that should not be committed.
@@ -0,0 +1,28 @@
1
+ # What the image build is allowed to see. Everything else is excluded, because a build
2
+ # context is copied into the daemon before the first instruction runs: a stray `.venv` or a
3
+ # populated data directory is minutes of transfer and, in the second case, a corpus baked
4
+ # into a layer.
5
+ *
6
+ !pyproject.toml
7
+ !uv.lock
8
+ !README.md
9
+ !LICENSE
10
+ !src
11
+ !tools
12
+ !packages
13
+ # Where a caller may stage the tree-sitter pack so that the build does not download it, named
14
+ # for the pack release it holds. Empty in the repository — it carries one committed placeholder
15
+ # so the Dockerfile's `COPY` resolves on a clean clone — and filled by CI from a cache. Admitted
16
+ # as a whole directory because that is how every other entry here reads; nothing else belongs
17
+ # under it, and anything that did would be copied into the daemon on every build.
18
+ !.ci
19
+
20
+ # Re-excluded from the directories admitted above. `**` because these appear at any depth,
21
+ # and the negations above would otherwise pull a workspace member's own build artifacts in.
22
+ **/__pycache__
23
+ **/*.pyc
24
+ **/*.pyo
25
+ **/.pytest_cache
26
+ **/.ruff_cache
27
+ **/.venv
28
+ **/*.egg-info
@@ -0,0 +1,249 @@
1
+ # Dependency update automation.
2
+ #
3
+ # The organizing idea is that not every bump costs the same. Most of them risk a regression,
4
+ # which CI catches. A few of them change what is *in the index* — the stored vectors, the
5
+ # chunk boundaries, or the text a document was reduced to — and the cost of accepting one is
6
+ # re-ingesting the corpus, which no test can pay on a maintainer's behalf. Those are grouped
7
+ # under an `index-affecting-` prefix so the pull request title says so before it is opened.
8
+ #
9
+ # What Dependabot does not do is check licenses. This project is GPL-3.0-or-later and has
10
+ # rejected dependencies on license grounds; a bump that changes a dependency's license is a
11
+ # real event and nothing here will catch it. CONTRIBUTING.md, "Reviewing a dependency
12
+ # update", says what to do about that.
13
+
14
+ version: 2
15
+
16
+ updates:
17
+ # ----------------------------------------------------------------------------------------
18
+ # GitHub Actions
19
+ # ----------------------------------------------------------------------------------------
20
+ # `/` is the documented value for this ecosystem and does not mean the repository root in
21
+ # the usual sense: Dependabot searches `.github/workflows/` plus a root `action.yml`. There
22
+ # are no composite actions here, so `/` is the whole surface.
23
+ - package-ecosystem: "github-actions"
24
+ directory: "/"
25
+ schedule:
26
+ interval: "weekly"
27
+ day: "monday"
28
+ groups:
29
+ # One pull request for the lot. These are pinned by major tag, they move together, and
30
+ # a failure is immediate and total rather than subtle — CI either runs or it does not.
31
+ github-actions:
32
+ patterns: ["*"]
33
+
34
+ # ----------------------------------------------------------------------------------------
35
+ # Python — one uv workspace, one lockfile
36
+ # ----------------------------------------------------------------------------------------
37
+ # `directory: "/"` covers the workspace *including* `packages/manicule-plugin-example` and
38
+ # `packages/manicule-plugin-hostile`. There is exactly one `uv.lock`, at the root, and its
39
+ # `[manifest] members` table names all three projects; Dependabot's uv ecosystem reads the
40
+ # workspace from there. Adding `directories: ["/", "/packages/*"]` would be wrong, not
41
+ # merely redundant: each member directory holds a `pyproject.toml` with no lockfile beside
42
+ # it, whose only dependency is `manicule` itself, which is resolved through
43
+ # `[tool.uv.sources]` and is not published to PyPI. Pointing Dependabot at them asks it to
44
+ # resolve a package that does not exist on any index.
45
+ - package-ecosystem: "uv"
46
+ directory: "/"
47
+ schedule:
48
+ interval: "weekly"
49
+ day: "monday"
50
+ # Five groups, and headroom. The default of 5 would sit exactly on the boundary, and the
51
+ # failure mode is silent: Dependabot stops opening pull requests rather than reporting
52
+ # that it wanted to. The headroom is for the weeks when a group cannot be updated as one
53
+ # — a member with an incompatible constraint is raised on its own — which is precisely
54
+ # when the queue is longest and least worth truncating.
55
+ open-pull-requests-limit: 10
56
+ # Security updates are deliberately left alone by everything above. They are not subject
57
+ # to `open-pull-requests-limit`, they do not wait for Monday, and `groups` defaults to
58
+ # `applies-to: version-updates`, so an advisory produces its own pull request the day it
59
+ # lands rather than joining a batch. That is the intended behavior and the reason no
60
+ # group below sets `applies-to`.
61
+ #
62
+ # `commit-message` is deliberately unset on both blocks. Its default is to follow the
63
+ # patterns already in the repository, which produces "Bump x from 1 to 2" — imperative,
64
+ # which is what CONTRIBUTING.md asks for. A `prefix` would replace that with a
65
+ # conventional-commit form this repository does not otherwise use.
66
+ #
67
+ # Every dependency in this project is declared with a bare `>=` floor, which reads as
68
+ # "the oldest version we have tested" rather than as a resolution. The default strategy
69
+ # tries to guess whether a project is an app or a library and, for a library, *widens* —
70
+ # which would start writing upper bounds into pyproject.toml that nobody chose.
71
+ # `increase-if-necessary` leaves a floor alone whenever the new release already satisfies
72
+ # it, so the ordinary bump moves uv.lock and touches nothing else.
73
+ versioning-strategy: "increase-if-necessary"
74
+ ignore:
75
+ # The three workspace members. They resolve through `[tool.uv.sources]`, never from an
76
+ # index, and none of them is published. Without this, a package registered on PyPI
77
+ # under one of these names could be offered as an "update" to a local path dependency.
78
+ - dependency-name: "manicule"
79
+ - dependency-name: "manicule-plugin-example"
80
+ - dependency-name: "manicule-plugin-hostile"
81
+
82
+ # One version, not a range, and it is upstream's arithmetic rather than a preference of
83
+ # ours. `tokenizers` published no final 0.23.0 — only 0.23.0rc0 — and went straight to
84
+ # 0.23.1, while every released `transformers`, up to and including 5.15.0, pins
85
+ # `tokenizers>=0.22.0,<=0.23.0`. `sentence-transformers` under the `rerank` extra
86
+ # depends on `transformers`, so `manicule[embeddings]` at 0.23.1 and `manicule[rerank]`
87
+ # cannot both be satisfied by any combination of versions. Without this entry Dependabot
88
+ # re-derives that every Monday and reports it as a resolution failure, which reads like
89
+ # a problem with this repository and is not one: `uv lock --upgrade-package tokenizers`
90
+ # already returns the newest satisfiable version and leaves the lockfile unchanged.
91
+ #
92
+ # Naming the single version rather than capping the dependency keeps this self-clearing.
93
+ # The next `tokenizers` release is offered normally, and by then `transformers` will
94
+ # have widened its bound or the failure will be a real one worth seeing. Drop this entry
95
+ # once `transformers` allows 0.23.1 — the whole point is that it does not outlive the
96
+ # upstream cap it describes.
97
+ - dependency-name: "tokenizers"
98
+ versions: ["0.23.1"]
99
+
100
+ # Group order is meaningful: a dependency joins the first group it matches. The
101
+ # `index-affecting-*` groups are therefore first, and `runtime` — the only group with a
102
+ # wildcard — repeats their patterns under `exclude-patterns` as well. That duplication is
103
+ # deliberate. Relying on ordering alone would mean one wildcard away from `mlx-embeddings`
104
+ # arriving in a pull request titled "the runtime group", which is exactly the outcome all
105
+ # of this exists to prevent.
106
+ #
107
+ # Note that these groups cannot carry their own labels — `labels` is a property of the
108
+ # update block, not of a group — so the group identifier is the signal. It is the text
109
+ # Dependabot puts in the branch name and the pull request title.
110
+ groups:
111
+ # --- index-affecting: the stored vectors ------------------------------------------
112
+ # A bump here can change the numbers written into the vector index. `EmbedFingerprint`
113
+ # exists to refuse an index built with something else, and the macOS backend parity job
114
+ # compares MLX against ONNX within a stated tolerance, so a genuinely divergent bump
115
+ # should go red rather than merge — but red is a signal, not a fix. Accepting one of
116
+ # these means re-embedding the corpus.
117
+ #
118
+ # `mlx-embeddings` is the sharp edge: it is at 0.1.0 and binds `last_hidden_state` to
119
+ # different meanings on different architectures, so a patch release can move vectors
120
+ # without changing an API. `tokenizers` is worse than it looks — `tokenizer_id` is an
121
+ # identity field of *both* fingerprints, so a vocabulary change invalidates the chunk
122
+ # boundaries as well as the vectors. `numpy` is here because pooling and normalization
123
+ # are done in manicule's own numpy rather than taken from a backend's convenience
124
+ # output, which puts it in the path that decides what a vector is.
125
+ #
126
+ # The patterns reach past the declared extra on purpose. `mlx` and `mlx-metal` are the
127
+ # array framework and the Metal kernels underneath `mlx-embeddings` — the arithmetic
128
+ # that produces the vectors is theirs, not its. `transformers` loads the model and
129
+ # tokenizer configuration, `sentencepiece` is the tokenizer implementation the bge
130
+ # models actually use, and `safetensors` is the format the executed weights arrive in;
131
+ # a corpus is only portable between backends because those agree.
132
+ #
133
+ # The line is drawn at libraries that decide what a vector *is*. It is not drawn at
134
+ # every transitive beneath them — `regex`, `protobuf` and `flatbuffers` are also in
135
+ # the path, and at that point the group stops distinguishing anything.
136
+ index-affecting-embedding:
137
+ patterns:
138
+ - "mlx"
139
+ - "mlx-*"
140
+ - "onnxruntime"
141
+ - "onnxruntime-*"
142
+ - "tokenizers"
143
+ - "sentencepiece"
144
+ - "transformers"
145
+ - "safetensors"
146
+ - "huggingface-hub"
147
+ - "numpy"
148
+
149
+ # --- index-affecting: where chunks begin and end ----------------------------------
150
+ # `ChunkFingerprint` records grammar versions per language, so a
151
+ # `tree-sitter-language-pack` bump invalidates the code documents in the languages it
152
+ # moved and leaves the rest alone. That selectivity is the whole reason the field is a
153
+ # mapping, and it is why this is a cheaper event than an embedding bump — but it is
154
+ # still a re-chunk and therefore a re-embed of what it touches.
155
+ #
156
+ # `tiktoken` backs the *provisional* token counter, which records its encoding and its
157
+ # installed version — `provisional:x1.5:tiktoken/cl100k_base@0.13.0` — so a bump moves
158
+ # the fingerprint and ingest says so. It is grouped here because that is what a bump
159
+ # costs, not because nothing would notice: provisional chunks are refused by ingest
160
+ # outright, so the practical effect is on dry-run parses and fixture builds.
161
+ #
162
+ # A `tiktoken` bump also touches the offline vocabulary bundle, and does so in a way
163
+ # that is checked rather than assumed. Bundles are *not* refused on a version mismatch,
164
+ # because the `.tiktoken` files have not moved across releases and forcing a rebuild
165
+ # that changes nothing would land on the hosts least able to rebuild anything. What is
166
+ # checked is the thing that would actually break: a release asking for a different URL,
167
+ # or declaring a different digest, fails the offline suite here rather than on an
168
+ # air-gapped host at its first question.
169
+ index-affecting-chunking:
170
+ patterns:
171
+ - "tiktoken"
172
+ - "tree-sitter"
173
+ - "tree-sitter-*"
174
+
175
+ # --- index-affecting: what a document was reduced to -------------------------------
176
+ # These decide the text that ends up in the corpus. `ParseFingerprint` records every
177
+ # one of them, per document, in `documents.parse_fp` — so a bump here no longer passes
178
+ # unnoticed: change detection stops treating the affected documents as unchanged and
179
+ # re-parses them, and `reindex --re-parse` selects exactly that set without waiting for
180
+ # a sync. What a bump costs is therefore a re-parse of the documents that library
181
+ # produced, and nothing else.
182
+ #
183
+ # `tests/parsers/test_versions.py` asserts that every distribution reaching a parse
184
+ # fingerprint is matched by a pattern in this group. A library that decides stored text
185
+ # and lands in a pull request titled "the runtime group" is the failure that check
186
+ # exists for.
187
+ #
188
+ # `lxml` is here rather than in `runtime` because it is what `python-docx` and
189
+ # `python-pptx` read OOXML *with*: the XML parse is the extraction step, and neither
190
+ # library would notice it changing. `ruamel*` is a wildcard because the declared name
191
+ # is `ruamel.yaml` and the resolved name is `ruamel-yaml` — package names normalize
192
+ # under PEP 503, and a literal `ruamel.yaml` pattern would match neither the lockfile
193
+ # entry nor the accelerator `ruamel-yaml-clib` beneath it.
194
+ index-affecting-extraction:
195
+ patterns:
196
+ - "pypdfium2"
197
+ - "selectolax"
198
+ - "lxml"
199
+ - "python-docx"
200
+ - "python-pptx"
201
+ - "python-calamine"
202
+ - "nbformat"
203
+ - "markdown-it-py"
204
+ - "ruamel*"
205
+
206
+ # --- routine ----------------------------------------------------------------------
207
+ # Development tooling. A bump here can fail the build; it cannot change a stored byte.
208
+ # `groups.dependency-type` would have expressed this directly, but it is documented as
209
+ # supported for `bundler`, `composer`, `mix`, `maven`, `npm` and `pip` only — not for
210
+ # `uv` — so the split is by name instead.
211
+ dev-tooling:
212
+ patterns:
213
+ - "pytest"
214
+ - "pytest-*"
215
+ - "ruff"
216
+ - "pyright"
217
+ - "reportlab"
218
+ - "openpyxl"
219
+
220
+ # Everything else, and anything transitive that Dependabot surfaces from uv.lock.
221
+ # Storage, HTTP, config and the reranker live here. `sentence-transformers` — and
222
+ # `torch`, `scikit-learn` and `scipy` under it — is deliberately *not* index-affecting:
223
+ # the cross-encoder runs at query time and reorders results, so a bump changes answers
224
+ # rather than the corpus, and no re-ingest follows from it.
225
+ runtime:
226
+ patterns: ["*"]
227
+ exclude-patterns:
228
+ - "mlx"
229
+ - "mlx-*"
230
+ - "onnxruntime"
231
+ - "onnxruntime-*"
232
+ - "tokenizers"
233
+ - "sentencepiece"
234
+ - "transformers"
235
+ - "safetensors"
236
+ - "huggingface-hub"
237
+ - "numpy"
238
+ - "tiktoken"
239
+ - "tree-sitter"
240
+ - "tree-sitter-*"
241
+ - "pypdfium2"
242
+ - "selectolax"
243
+ - "lxml"
244
+ - "python-docx"
245
+ - "python-pptx"
246
+ - "python-calamine"
247
+ - "nbformat"
248
+ - "markdown-it-py"
249
+ - "ruamel*"