kompend 2026.10.4__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 (686) hide show
  1. kompend-2026.10.4/.agents/CHECKS.md +94 -0
  2. kompend-2026.10.4/.agents/CODE.md +79 -0
  3. kompend-2026.10.4/.agents/FILES.md +98 -0
  4. kompend-2026.10.4/.agents/HISTORY.md +95 -0
  5. kompend-2026.10.4/.agents/MAINTENANCE.md +67 -0
  6. kompend-2026.10.4/.agents/ONBOARDING.md +101 -0
  7. kompend-2026.10.4/.agents/POLICIES.md +120 -0
  8. kompend-2026.10.4/.agents/history/2026-08-14-migration-plan.md +364 -0
  9. kompend-2026.10.4/.agents/history/2026-08-14-refactoring-plan.md +442 -0
  10. kompend-2026.10.4/.agents/history/2026-08-15-env-any-refactor.md +488 -0
  11. kompend-2026.10.4/.agents/history/2026-08-15-rlm-integration.md +242 -0
  12. kompend-2026.10.4/.agents/history/2026-08-16-category-extraction.md +88 -0
  13. kompend-2026.10.4/.agents/history/2026-08-16-rumdl-format-wiring.md +184 -0
  14. kompend-2026.10.4/.agents/history/2026-08-16-source-export-md.md +189 -0
  15. kompend-2026.10.4/.agents/history/2026-08-22-markdown-only-vault.md +332 -0
  16. kompend-2026.10.4/.agents/history/2026-09-16-context-window-provider-overrides.md +148 -0
  17. kompend-2026.10.4/.agents/history/2026-09-24-knox-0iv2-audit.md +165 -0
  18. kompend-2026.10.4/.agents/history/2026-09-24-knox-storage-migration.md +298 -0
  19. kompend-2026.10.4/.beads/.gitignore +70 -0
  20. kompend-2026.10.4/.beads/README.md +85 -0
  21. kompend-2026.10.4/.beads/config.yaml +60 -0
  22. kompend-2026.10.4/.beads/dolt-backup.json +5 -0
  23. kompend-2026.10.4/.beads/hooks/post-checkout +24 -0
  24. kompend-2026.10.4/.beads/hooks/post-commit +28 -0
  25. kompend-2026.10.4/.beads/hooks/post-merge +24 -0
  26. kompend-2026.10.4/.beads/hooks/pre-commit +24 -0
  27. kompend-2026.10.4/.beads/hooks/pre-push +24 -0
  28. kompend-2026.10.4/.beads/hooks/prepare-commit-msg +24 -0
  29. kompend-2026.10.4/.beads/interactions.jsonl +319 -0
  30. kompend-2026.10.4/.beads/issues.jsonl +300 -0
  31. kompend-2026.10.4/.beads/issues_backup_20260715.jsonl +290 -0
  32. kompend-2026.10.4/.beads/metadata.json +7 -0
  33. kompend-2026.10.4/.beads/seed-ids.json +45 -0
  34. kompend-2026.10.4/.config/mise/conf.d/docs.toml +7 -0
  35. kompend-2026.10.4/.config/mise/conf.d/format.toml +11 -0
  36. kompend-2026.10.4/.config/mise/conf.d/lint.toml +11 -0
  37. kompend-2026.10.4/.config/mise/conf.d/mcp.toml +7 -0
  38. kompend-2026.10.4/.config/mise/conf.d/quality.toml +20 -0
  39. kompend-2026.10.4/.config/mise/conf.d/skills.toml +4 -0
  40. kompend-2026.10.4/.config/mise/conf.d/tasks.toml +24 -0
  41. kompend-2026.10.4/.config/mise/config.toml +40 -0
  42. kompend-2026.10.4/.config/mise/data/dev-features.csv +18 -0
  43. kompend-2026.10.4/.config/mise/data/skills.csv +15 -0
  44. kompend-2026.10.4/.config/mise/scripts/install_dev_features.py +94 -0
  45. kompend-2026.10.4/.config/reorder.toml +59 -0
  46. kompend-2026.10.4/.config/rumdl.toml +13 -0
  47. kompend-2026.10.4/.githooks/_delegate.sh +21 -0
  48. kompend-2026.10.4/.githooks/post-checkout +3 -0
  49. kompend-2026.10.4/.githooks/post-commit +3 -0
  50. kompend-2026.10.4/.githooks/post-merge +3 -0
  51. kompend-2026.10.4/.githooks/pre-commit +45 -0
  52. kompend-2026.10.4/.githooks/pre-push +3 -0
  53. kompend-2026.10.4/.githooks/prepare-commit-msg +3 -0
  54. kompend-2026.10.4/.github/workflows/docs.yml +85 -0
  55. kompend-2026.10.4/.github/workflows/release.yml +195 -0
  56. kompend-2026.10.4/.gitignore +94 -0
  57. kompend-2026.10.4/.pre-commit-config.yaml +56 -0
  58. kompend-2026.10.4/AGENTS.md +159 -0
  59. kompend-2026.10.4/LICENSE +21 -0
  60. kompend-2026.10.4/PKG-INFO +225 -0
  61. kompend-2026.10.4/README.md +164 -0
  62. kompend-2026.10.4/assets/readme/hero.svg +131 -0
  63. kompend-2026.10.4/assets/readme/pipeline.svg +135 -0
  64. kompend-2026.10.4/docs/about/acknowledgements.md +174 -0
  65. kompend-2026.10.4/docs/about/motivation.md +86 -0
  66. kompend-2026.10.4/docs/architecture/cache.md +179 -0
  67. kompend-2026.10.4/docs/architecture/chunk-tree.md +135 -0
  68. kompend-2026.10.4/docs/architecture/decisions.md +326 -0
  69. kompend-2026.10.4/docs/architecture/index.md +287 -0
  70. kompend-2026.10.4/docs/architecture/output.md +121 -0
  71. kompend-2026.10.4/docs/concepts/basic-principles.md +270 -0
  72. kompend-2026.10.4/docs/concepts/distill.md +57 -0
  73. kompend-2026.10.4/docs/concepts/memory-lifecycle.md +63 -0
  74. kompend-2026.10.4/docs/concepts/open-knowledge-format.md +169 -0
  75. kompend-2026.10.4/docs/concepts/pipeline-tiers.md +183 -0
  76. kompend-2026.10.4/docs/concepts/rag-pipeline.md +116 -0
  77. kompend-2026.10.4/docs/concepts/wicer-loop.md +113 -0
  78. kompend-2026.10.4/docs/guides/attachments.md +167 -0
  79. kompend-2026.10.4/docs/guides/cli.md +638 -0
  80. kompend-2026.10.4/docs/guides/compilation.md +257 -0
  81. kompend-2026.10.4/docs/guides/configuration.md +197 -0
  82. kompend-2026.10.4/docs/guides/dedup.md +201 -0
  83. kompend-2026.10.4/docs/guides/document-extraction.md +358 -0
  84. kompend-2026.10.4/docs/guides/initialization.md +121 -0
  85. kompend-2026.10.4/docs/guides/input-pipeline.md +118 -0
  86. kompend-2026.10.4/docs/guides/lint.md +356 -0
  87. kompend-2026.10.4/docs/guides/llm-config.md +442 -0
  88. kompend-2026.10.4/docs/guides/model-context.md +395 -0
  89. kompend-2026.10.4/docs/guides/observability.md +183 -0
  90. kompend-2026.10.4/docs/guides/output.md +201 -0
  91. kompend-2026.10.4/docs/guides/provenance.md +161 -0
  92. kompend-2026.10.4/docs/guides/query-memory.md +84 -0
  93. kompend-2026.10.4/docs/guides/review.md +84 -0
  94. kompend-2026.10.4/docs/guides/trust.md +126 -0
  95. kompend-2026.10.4/docs/guides/wiki-structure.md +191 -0
  96. kompend-2026.10.4/docs/index.md +120 -0
  97. kompend-2026.10.4/docs/integrations/acp-agent.md +150 -0
  98. kompend-2026.10.4/docs/integrations/open-webui.md +88 -0
  99. kompend-2026.10.4/docs/reference/caching.md +171 -0
  100. kompend-2026.10.4/docs/reference/ecosystem.md +186 -0
  101. kompend-2026.10.4/docs/reference/pydantic-ai-agents.md +273 -0
  102. kompend-2026.10.4/kompend.toml.example +670 -0
  103. kompend-2026.10.4/mkdocs.yml +125 -0
  104. kompend-2026.10.4/pyproject.toml +156 -0
  105. kompend-2026.10.4/ruff.toml +85 -0
  106. kompend-2026.10.4/scripts/analyze/analyze_codebase.py +146 -0
  107. kompend-2026.10.4/scripts/build/build-wiki.ps1 +545 -0
  108. kompend-2026.10.4/scripts/checks/_common.py +40 -0
  109. kompend-2026.10.4/scripts/checks/check_antipatterns.py +411 -0
  110. kompend-2026.10.4/scripts/checks/check_dox.py +211 -0
  111. kompend-2026.10.4/scripts/checks/check_field_consistency.py +388 -0
  112. kompend-2026.10.4/scripts/checks/check_mcp_parity.py +167 -0
  113. kompend-2026.10.4/scripts/checks/check_persisted_paths.py +177 -0
  114. kompend-2026.10.4/scripts/configs/config-cloud.toml +60 -0
  115. kompend-2026.10.4/scripts/configs/config-local.toml +62 -0
  116. kompend-2026.10.4/scripts/configs/demo-content.toml +37 -0
  117. kompend-2026.10.4/scripts/repo/set_repo_topics.py +68 -0
  118. kompend-2026.10.4/scripts/verify/verify_rlm.py +132 -0
  119. kompend-2026.10.4/skills/kompend/SKILL.md +506 -0
  120. kompend-2026.10.4/src/kompend/AGENTS.md +123 -0
  121. kompend-2026.10.4/src/kompend/__init__.py +10 -0
  122. kompend-2026.10.4/src/kompend/__main__.py +8 -0
  123. kompend-2026.10.4/src/kompend/acp/AGENTS.md +65 -0
  124. kompend-2026.10.4/src/kompend/acp/__init__.py +24 -0
  125. kompend-2026.10.4/src/kompend/acp/builtin/capture.toml +24 -0
  126. kompend-2026.10.4/src/kompend/acp/builtin/compile.toml +26 -0
  127. kompend-2026.10.4/src/kompend/acp/builtin/generic.toml +28 -0
  128. kompend-2026.10.4/src/kompend/acp/builtin/query.toml +28 -0
  129. kompend-2026.10.4/src/kompend/acp/definitions.py +130 -0
  130. kompend-2026.10.4/src/kompend/acp/harness_adapter.py +65 -0
  131. kompend-2026.10.4/src/kompend/acp/provider_store.py +164 -0
  132. kompend-2026.10.4/src/kompend/acp/registry.py +151 -0
  133. kompend-2026.10.4/src/kompend/acp/tools.py +171 -0
  134. kompend-2026.10.4/src/kompend/agents/AGENTS.md +152 -0
  135. kompend-2026.10.4/src/kompend/agents/__init__.py +61 -0
  136. kompend-2026.10.4/src/kompend/agents/agentic_harness.py +68 -0
  137. kompend-2026.10.4/src/kompend/agents/base.py +781 -0
  138. kompend-2026.10.4/src/kompend/agents/capture.py +18 -0
  139. kompend-2026.10.4/src/kompend/agents/capture_models.py +36 -0
  140. kompend-2026.10.4/src/kompend/agents/categorize.py +34 -0
  141. kompend-2026.10.4/src/kompend/agents/categorize_models.py +20 -0
  142. kompend-2026.10.4/src/kompend/agents/context_chunk.py +17 -0
  143. kompend-2026.10.4/src/kompend/agents/context_chunk_agentic.py +70 -0
  144. kompend-2026.10.4/src/kompend/agents/context_manager.py +60 -0
  145. kompend-2026.10.4/src/kompend/agents/deps.py +168 -0
  146. kompend-2026.10.4/src/kompend/agents/distill.py +21 -0
  147. kompend-2026.10.4/src/kompend/agents/distill_agentic.py +55 -0
  148. kompend-2026.10.4/src/kompend/agents/doctor.py +53 -0
  149. kompend-2026.10.4/src/kompend/agents/extraction.py +38 -0
  150. kompend-2026.10.4/src/kompend/agents/extraction_reduce.py +25 -0
  151. kompend-2026.10.4/src/kompend/agents/generation.py +130 -0
  152. kompend-2026.10.4/src/kompend/agents/instrument.py +102 -0
  153. kompend-2026.10.4/src/kompend/agents/kompend_model.py +179 -0
  154. kompend-2026.10.4/src/kompend/agents/lint.py +58 -0
  155. kompend-2026.10.4/src/kompend/agents/query.py +71 -0
  156. kompend-2026.10.4/src/kompend/agents/query_agentic.py +56 -0
  157. kompend-2026.10.4/src/kompend/agents/reference_extraction.py +37 -0
  158. kompend-2026.10.4/src/kompend/agents/reference_resolver.py +41 -0
  159. kompend-2026.10.4/src/kompend/agents/remediate.py +81 -0
  160. kompend-2026.10.4/src/kompend/agents/rlm.py +371 -0
  161. kompend-2026.10.4/src/kompend/agents/search.py +54 -0
  162. kompend-2026.10.4/src/kompend/agents/summarizer.py +16 -0
  163. kompend-2026.10.4/src/kompend/agents/summarizer_agentic.py +56 -0
  164. kompend-2026.10.4/src/kompend/agents/types.py +357 -0
  165. kompend-2026.10.4/src/kompend/agents/verification.py +68 -0
  166. kompend-2026.10.4/src/kompend/agents/vlm.py +125 -0
  167. kompend-2026.10.4/src/kompend/agents/wicer.py +54 -0
  168. kompend-2026.10.4/src/kompend/agents/wiki_index.py +67 -0
  169. kompend-2026.10.4/src/kompend/agents/write.py +68 -0
  170. kompend-2026.10.4/src/kompend/capture/AGENTS.md +32 -0
  171. kompend-2026.10.4/src/kompend/capture/__init__.py +5 -0
  172. kompend-2026.10.4/src/kompend/capture/_utils.py +41 -0
  173. kompend-2026.10.4/src/kompend/capture/capture.py +126 -0
  174. kompend-2026.10.4/src/kompend/capture/consolidate.py +175 -0
  175. kompend-2026.10.4/src/kompend/capture/distill.py +329 -0
  176. kompend-2026.10.4/src/kompend/capture/ingest.py +46 -0
  177. kompend-2026.10.4/src/kompend/capture/learn.py +47 -0
  178. kompend-2026.10.4/src/kompend/chunking/AGENTS.md +30 -0
  179. kompend-2026.10.4/src/kompend/chunking/__init__.py +11 -0
  180. kompend-2026.10.4/src/kompend/chunking/contextual.py +202 -0
  181. kompend-2026.10.4/src/kompend/chunking/extractors.py +192 -0
  182. kompend-2026.10.4/src/kompend/chunking/hierarchical.py +325 -0
  183. kompend-2026.10.4/src/kompend/chunking/summarizer.py +262 -0
  184. kompend-2026.10.4/src/kompend/cli/AGENTS.md +243 -0
  185. kompend-2026.10.4/src/kompend/cli/__init__.py +3 -0
  186. kompend-2026.10.4/src/kompend/cli/_ignore.py +132 -0
  187. kompend-2026.10.4/src/kompend/cli/_pipeline_helpers.py +240 -0
  188. kompend-2026.10.4/src/kompend/cli/_post_compile.py +345 -0
  189. kompend-2026.10.4/src/kompend/cli/_progress.py +259 -0
  190. kompend-2026.10.4/src/kompend/cli/_query_helpers.py +435 -0
  191. kompend-2026.10.4/src/kompend/cli/_shared.py +170 -0
  192. kompend-2026.10.4/src/kompend/cli/_sources.py +251 -0
  193. kompend-2026.10.4/src/kompend/cli/_sources_io.py +312 -0
  194. kompend-2026.10.4/src/kompend/cli/app.py +350 -0
  195. kompend-2026.10.4/src/kompend/cli/args/AGENTS.md +168 -0
  196. kompend-2026.10.4/src/kompend/cli/args/__init__.py +213 -0
  197. kompend-2026.10.4/src/kompend/cli/args/common.py +91 -0
  198. kompend-2026.10.4/src/kompend/cli/args/compile.py +98 -0
  199. kompend-2026.10.4/src/kompend/cli/args/config.py +31 -0
  200. kompend-2026.10.4/src/kompend/cli/args/init.py +66 -0
  201. kompend-2026.10.4/src/kompend/cli/args/memory.py +32 -0
  202. kompend-2026.10.4/src/kompend/cli/args/other.py +362 -0
  203. kompend-2026.10.4/src/kompend/cli/args/parse.py +25 -0
  204. kompend-2026.10.4/src/kompend/cli/args/pipeline.py +81 -0
  205. kompend-2026.10.4/src/kompend/cli/args/query.py +94 -0
  206. kompend-2026.10.4/src/kompend/cli/cmds/AGENTS.md +140 -0
  207. kompend-2026.10.4/src/kompend/cli/cmds/__init__.py +55 -0
  208. kompend-2026.10.4/src/kompend/cli/cmds/agent.py +68 -0
  209. kompend-2026.10.4/src/kompend/cli/cmds/agents.py +194 -0
  210. kompend-2026.10.4/src/kompend/cli/cmds/init.py +66 -0
  211. kompend-2026.10.4/src/kompend/cli/cmds/knowledge/__init__.py +1 -0
  212. kompend-2026.10.4/src/kompend/cli/cmds/knowledge/attachments.py +332 -0
  213. kompend-2026.10.4/src/kompend/cli/cmds/knowledge/capture.py +389 -0
  214. kompend-2026.10.4/src/kompend/cli/cmds/knowledge/memory.py +118 -0
  215. kompend-2026.10.4/src/kompend/cli/cmds/knowledge/organize.py +103 -0
  216. kompend-2026.10.4/src/kompend/cli/cmds/knowledge/pack.py +50 -0
  217. kompend-2026.10.4/src/kompend/cli/cmds/knowledge/query.py +291 -0
  218. kompend-2026.10.4/src/kompend/cli/cmds/knowledge/references.py +200 -0
  219. kompend-2026.10.4/src/kompend/cli/cmds/pipeline/__init__.py +1 -0
  220. kompend-2026.10.4/src/kompend/cli/cmds/pipeline/config.py +299 -0
  221. kompend-2026.10.4/src/kompend/cli/cmds/pipeline/pipeline.py +524 -0
  222. kompend-2026.10.4/src/kompend/cli/cmds/pipeline/sources.py +317 -0
  223. kompend-2026.10.4/src/kompend/cli/cmds/pipeline/status.py +139 -0
  224. kompend-2026.10.4/src/kompend/cli/cmds/quality/__init__.py +1 -0
  225. kompend-2026.10.4/src/kompend/cli/cmds/quality/doctor.py +619 -0
  226. kompend-2026.10.4/src/kompend/cli/cmds/quality/doctor_cmd.py +67 -0
  227. kompend-2026.10.4/src/kompend/cli/cmds/quality/lint.py +606 -0
  228. kompend-2026.10.4/src/kompend/cli/cmds/quality/list_parsers_cmd.py +34 -0
  229. kompend-2026.10.4/src/kompend/cli/cmds/quality/log.py +73 -0
  230. kompend-2026.10.4/src/kompend/cli/cmds/quality/provenance_cmd.py +135 -0
  231. kompend-2026.10.4/src/kompend/cli/cmds/quality/review.py +122 -0
  232. kompend-2026.10.4/src/kompend/cli/cmds/quality/status_cmd.py +31 -0
  233. kompend-2026.10.4/src/kompend/cli/cmds/serve.py +55 -0
  234. kompend-2026.10.4/src/kompend/compilation/AGENTS.md +55 -0
  235. kompend-2026.10.4/src/kompend/compilation/__init__.py +11 -0
  236. kompend-2026.10.4/src/kompend/compilation/_checkpoints.py +143 -0
  237. kompend-2026.10.4/src/kompend/compilation/_two_phase_core.py +667 -0
  238. kompend-2026.10.4/src/kompend/compilation/asset_mention_rewriter.py +73 -0
  239. kompend-2026.10.4/src/kompend/compilation/asset_registry.py +127 -0
  240. kompend-2026.10.4/src/kompend/compilation/asset_summarizer.py +49 -0
  241. kompend-2026.10.4/src/kompend/compilation/asset_tools.py +99 -0
  242. kompend-2026.10.4/src/kompend/compilation/base.py +438 -0
  243. kompend-2026.10.4/src/kompend/compilation/concept_broker.py +131 -0
  244. kompend-2026.10.4/src/kompend/compilation/concept_keys.py +143 -0
  245. kompend-2026.10.4/src/kompend/compilation/context_chunk_tools.py +49 -0
  246. kompend-2026.10.4/src/kompend/compilation/distill_tools.py +44 -0
  247. kompend-2026.10.4/src/kompend/compilation/extraction_memory.py +251 -0
  248. kompend-2026.10.4/src/kompend/compilation/flows/__init__.py +23 -0
  249. kompend-2026.10.4/src/kompend/compilation/flows/agentic.py +221 -0
  250. kompend-2026.10.4/src/kompend/compilation/flows/assembly.py +373 -0
  251. kompend-2026.10.4/src/kompend/compilation/flows/extraction.py +533 -0
  252. kompend-2026.10.4/src/kompend/compilation/flows/generation.py +1101 -0
  253. kompend-2026.10.4/src/kompend/compilation/flows/references.py +222 -0
  254. kompend-2026.10.4/src/kompend/compilation/gen_tools.py +65 -0
  255. kompend-2026.10.4/src/kompend/compilation/graph.py +499 -0
  256. kompend-2026.10.4/src/kompend/compilation/overview_tools.py +79 -0
  257. kompend-2026.10.4/src/kompend/compilation/query_tools.py +74 -0
  258. kompend-2026.10.4/src/kompend/compilation/reference_excision.py +98 -0
  259. kompend-2026.10.4/src/kompend/compilation/remediate_tools.py +81 -0
  260. kompend-2026.10.4/src/kompend/compilation/schema.py +149 -0
  261. kompend-2026.10.4/src/kompend/compilation/summarizer_tools.py +46 -0
  262. kompend-2026.10.4/src/kompend/compilation/two_phase.py +355 -0
  263. kompend-2026.10.4/src/kompend/compilation/verification_tools.py +80 -0
  264. kompend-2026.10.4/src/kompend/compilation/wicer.py +474 -0
  265. kompend-2026.10.4/src/kompend/compilation/write_tools.py +50 -0
  266. kompend-2026.10.4/src/kompend/core/AGENTS.md +48 -0
  267. kompend-2026.10.4/src/kompend/core/cache/AGENTS.md +23 -0
  268. kompend-2026.10.4/src/kompend/core/cache/__init__.py +7 -0
  269. kompend-2026.10.4/src/kompend/core/cache/store.py +358 -0
  270. kompend-2026.10.4/src/kompend/core/cache/wiki.py +45 -0
  271. kompend-2026.10.4/src/kompend/core/config/AGENTS.md +160 -0
  272. kompend-2026.10.4/src/kompend/core/config/__init__.py +89 -0
  273. kompend-2026.10.4/src/kompend/core/config/_configs.py +675 -0
  274. kompend-2026.10.4/src/kompend/core/config/_core.py +44 -0
  275. kompend-2026.10.4/src/kompend/core/config/engine/__init__.py +77 -0
  276. kompend-2026.10.4/src/kompend/core/config/engine/_check.py +656 -0
  277. kompend-2026.10.4/src/kompend/core/config/engine/_env.py +80 -0
  278. kompend-2026.10.4/src/kompend/core/config/engine/_loading.py +169 -0
  279. kompend-2026.10.4/src/kompend/core/config/engine/_overlay.py +39 -0
  280. kompend-2026.10.4/src/kompend/core/config/engine/_precedence.py +333 -0
  281. kompend-2026.10.4/src/kompend/core/config/engine/_schema.py +159 -0
  282. kompend-2026.10.4/src/kompend/core/config/generate.py +123 -0
  283. kompend-2026.10.4/src/kompend/core/config/keys.py +150 -0
  284. kompend-2026.10.4/src/kompend/core/config/rumdl.py +114 -0
  285. kompend-2026.10.4/src/kompend/core/env.py +153 -0
  286. kompend-2026.10.4/src/kompend/core/models/AGENTS.md +35 -0
  287. kompend-2026.10.4/src/kompend/core/models/__init__.py +108 -0
  288. kompend-2026.10.4/src/kompend/core/models/assets.py +60 -0
  289. kompend-2026.10.4/src/kompend/core/models/attachments.py +388 -0
  290. kompend-2026.10.4/src/kompend/core/models/chunks.py +115 -0
  291. kompend-2026.10.4/src/kompend/core/models/citations.py +81 -0
  292. kompend-2026.10.4/src/kompend/core/models/elements.py +37 -0
  293. kompend-2026.10.4/src/kompend/core/models/enums.py +261 -0
  294. kompend-2026.10.4/src/kompend/core/models/references.py +163 -0
  295. kompend-2026.10.4/src/kompend/core/models/structured.py +225 -0
  296. kompend-2026.10.4/src/kompend/core/models/trees.py +163 -0
  297. kompend-2026.10.4/src/kompend/core/models/wiki.py +331 -0
  298. kompend-2026.10.4/src/kompend/core/page_builder.py +220 -0
  299. kompend-2026.10.4/src/kompend/core/paths.py +678 -0
  300. kompend-2026.10.4/src/kompend/core/pipeline/AGENTS.md +56 -0
  301. kompend-2026.10.4/src/kompend/core/pipeline/__init__.py +5 -0
  302. kompend-2026.10.4/src/kompend/core/pipeline/assets.py +132 -0
  303. kompend-2026.10.4/src/kompend/core/pipeline/attachments.py +199 -0
  304. kompend-2026.10.4/src/kompend/core/pipeline/config.py +314 -0
  305. kompend-2026.10.4/src/kompend/core/pipeline/entity_types.py +98 -0
  306. kompend-2026.10.4/src/kompend/core/pipeline/export.py +454 -0
  307. kompend-2026.10.4/src/kompend/core/pipeline/ingest.py +346 -0
  308. kompend-2026.10.4/src/kompend/core/pipeline/orchestrator.py +30 -0
  309. kompend-2026.10.4/src/kompend/core/pipeline/parse_cache.py +166 -0
  310. kompend-2026.10.4/src/kompend/core/pipeline/references.py +450 -0
  311. kompend-2026.10.4/src/kompend/core/pipeline/runtime.py +86 -0
  312. kompend-2026.10.4/src/kompend/core/pipeline/stages/__init__.py +7 -0
  313. kompend-2026.10.4/src/kompend/core/pipeline/stages/_compile.py +137 -0
  314. kompend-2026.10.4/src/kompend/core/pipeline/stages/_factory.py +159 -0
  315. kompend-2026.10.4/src/kompend/core/pipeline/stages/_index.py +63 -0
  316. kompend-2026.10.4/src/kompend/core/pipeline/stages/_parse.py +519 -0
  317. kompend-2026.10.4/src/kompend/core/pipeline/stages/_pipeline.py +404 -0
  318. kompend-2026.10.4/src/kompend/core/pipeline/stages/_resolve.py +147 -0
  319. kompend-2026.10.4/src/kompend/core/pipeline/state.py +336 -0
  320. kompend-2026.10.4/src/kompend/core/reporting/AGENTS.md +25 -0
  321. kompend-2026.10.4/src/kompend/core/reporting/__init__.py +5 -0
  322. kompend-2026.10.4/src/kompend/core/reporting/log.py +156 -0
  323. kompend-2026.10.4/src/kompend/core/reporting/runlog.py +160 -0
  324. kompend-2026.10.4/src/kompend/core/resolution/AGENTS.md +23 -0
  325. kompend-2026.10.4/src/kompend/core/resolution/__init__.py +5 -0
  326. kompend-2026.10.4/src/kompend/core/resolution/entity_registry.py +346 -0
  327. kompend-2026.10.4/src/kompend/core/resolution/xref_checker.py +240 -0
  328. kompend-2026.10.4/src/kompend/core/source_metadata.py +161 -0
  329. kompend-2026.10.4/src/kompend/core/store/AGENTS.md +45 -0
  330. kompend-2026.10.4/src/kompend/core/store/__init__.py +32 -0
  331. kompend-2026.10.4/src/kompend/core/store/connection.py +119 -0
  332. kompend-2026.10.4/src/kompend/core/store/legacy.py +52 -0
  333. kompend-2026.10.4/src/kompend/core/store/locate.py +37 -0
  334. kompend-2026.10.4/src/kompend/core/store/schema.py +468 -0
  335. kompend-2026.10.4/src/kompend/core/templates/AGENTS.md +98 -0
  336. kompend-2026.10.4/src/kompend/core/templates/__init__.py +19 -0
  337. kompend-2026.10.4/src/kompend/core/templates/loader.py +519 -0
  338. kompend-2026.10.4/src/kompend/core/text/embedding_text.py +25 -0
  339. kompend-2026.10.4/src/kompend/core/text/encoding.py +159 -0
  340. kompend-2026.10.4/src/kompend/core/text/matching.py +182 -0
  341. kompend-2026.10.4/src/kompend/core/text/rumdl.py +147 -0
  342. kompend-2026.10.4/src/kompend/core/text/slug.py +20 -0
  343. kompend-2026.10.4/src/kompend/core/trust/AGENTS.md +25 -0
  344. kompend-2026.10.4/src/kompend/core/trust/__init__.py +5 -0
  345. kompend-2026.10.4/src/kompend/core/trust/actor.py +39 -0
  346. kompend-2026.10.4/src/kompend/core/utils/AGENTS.md +24 -0
  347. kompend-2026.10.4/src/kompend/core/utils/__init__.py +5 -0
  348. kompend-2026.10.4/src/kompend/core/utils/dicts.py +151 -0
  349. kompend-2026.10.4/src/kompend/core/utils/exceptions.py +16 -0
  350. kompend-2026.10.4/src/kompend/core/utils/time.py +35 -0
  351. kompend-2026.10.4/src/kompend/core/utils/tokens.py +14 -0
  352. kompend-2026.10.4/src/kompend/core/verbosity.py +26 -0
  353. kompend-2026.10.4/src/kompend/lint/AGENTS.md +37 -0
  354. kompend-2026.10.4/src/kompend/lint/__init__.py +35 -0
  355. kompend-2026.10.4/src/kompend/lint/_remediation_gaps.py +272 -0
  356. kompend-2026.10.4/src/kompend/lint/base.py +129 -0
  357. kompend-2026.10.4/src/kompend/lint/flow.py +326 -0
  358. kompend-2026.10.4/src/kompend/lint/gap_analysis.py +335 -0
  359. kompend-2026.10.4/src/kompend/lint/gap_broker.py +49 -0
  360. kompend-2026.10.4/src/kompend/lint/history.py +254 -0
  361. kompend-2026.10.4/src/kompend/lint/llm_rules.py +518 -0
  362. kompend-2026.10.4/src/kompend/lint/remediation.py +90 -0
  363. kompend-2026.10.4/src/kompend/lint/rumdl.toml +22 -0
  364. kompend-2026.10.4/src/kompend/lint/runner.py +278 -0
  365. kompend-2026.10.4/src/kompend/lint/semantic_gaps.py +184 -0
  366. kompend-2026.10.4/src/kompend/lint/structural.py +1335 -0
  367. kompend-2026.10.4/src/kompend/llm/AGENTS.md +92 -0
  368. kompend-2026.10.4/src/kompend/llm/__init__.py +43 -0
  369. kompend-2026.10.4/src/kompend/llm/context_window.py +196 -0
  370. kompend-2026.10.4/src/kompend/llm/debug.py +198 -0
  371. kompend-2026.10.4/src/kompend/llm/format.py +319 -0
  372. kompend-2026.10.4/src/kompend/llm/http_client.py +147 -0
  373. kompend-2026.10.4/src/kompend/llm/models.py +483 -0
  374. kompend-2026.10.4/src/kompend/llm/postprocess.py +432 -0
  375. kompend-2026.10.4/src/kompend/llm/usage.py +132 -0
  376. kompend-2026.10.4/src/kompend/llm/user_providers.py +104 -0
  377. kompend-2026.10.4/src/kompend/logging.py +109 -0
  378. kompend-2026.10.4/src/kompend/mcp/AGENTS.md +36 -0
  379. kompend-2026.10.4/src/kompend/mcp/__init__.py +1 -0
  380. kompend-2026.10.4/src/kompend/mcp/server.py +163 -0
  381. kompend-2026.10.4/src/kompend/mcp/tools/__init__.py +130 -0
  382. kompend-2026.10.4/src/kompend/mcp/tools/_helpers.py +39 -0
  383. kompend-2026.10.4/src/kompend/mcp/tools/attachments.py +223 -0
  384. kompend-2026.10.4/src/kompend/mcp/tools/config.py +161 -0
  385. kompend-2026.10.4/src/kompend/mcp/tools/knowledge.py +388 -0
  386. kompend-2026.10.4/src/kompend/mcp/tools/memory.py +75 -0
  387. kompend-2026.10.4/src/kompend/mcp/tools/packs.py +37 -0
  388. kompend-2026.10.4/src/kompend/mcp/tools/pipeline.py +358 -0
  389. kompend-2026.10.4/src/kompend/mcp/tools/quality.py +549 -0
  390. kompend-2026.10.4/src/kompend/mcp/tools/query.py +149 -0
  391. kompend-2026.10.4/src/kompend/mcp/tools/references.py +134 -0
  392. kompend-2026.10.4/src/kompend/mcp/tools/sources.py +220 -0
  393. kompend-2026.10.4/src/kompend/memory/AGENTS.md +42 -0
  394. kompend-2026.10.4/src/kompend/memory/__init__.py +14 -0
  395. kompend-2026.10.4/src/kompend/memory/lifecycle.py +353 -0
  396. kompend-2026.10.4/src/kompend/memory/store.py +247 -0
  397. kompend-2026.10.4/src/kompend/organize/__init__.py +38 -0
  398. kompend-2026.10.4/src/kompend/organize/categorize.py +351 -0
  399. kompend-2026.10.4/src/kompend/organize/engine.py +204 -0
  400. kompend-2026.10.4/src/kompend/organize/moves.py +258 -0
  401. kompend-2026.10.4/src/kompend/output/AGENTS.md +82 -0
  402. kompend-2026.10.4/src/kompend/output/__init__.py +13 -0
  403. kompend-2026.10.4/src/kompend/output/base.py +54 -0
  404. kompend-2026.10.4/src/kompend/output/bibtex.py +225 -0
  405. kompend-2026.10.4/src/kompend/output/json_writer.py +33 -0
  406. kompend-2026.10.4/src/kompend/output/markdown.py +521 -0
  407. kompend-2026.10.4/src/kompend/output/models.py +68 -0
  408. kompend-2026.10.4/src/kompend/output/pages/__init__.py +21 -0
  409. kompend-2026.10.4/src/kompend/output/pages/index.py +238 -0
  410. kompend-2026.10.4/src/kompend/output/pages/log.py +326 -0
  411. kompend-2026.10.4/src/kompend/output/pages/overview.py +165 -0
  412. kompend-2026.10.4/src/kompend/output/reference_links.py +302 -0
  413. kompend-2026.10.4/src/kompend/output/renderer.py +236 -0
  414. kompend-2026.10.4/src/kompend/output/typst.py +90 -0
  415. kompend-2026.10.4/src/kompend/output/vault.py +870 -0
  416. kompend-2026.10.4/src/kompend/output/wiki_index.py +25 -0
  417. kompend-2026.10.4/src/kompend/packs/AGENTS.md +68 -0
  418. kompend-2026.10.4/src/kompend/packs/__init__.py +15 -0
  419. kompend-2026.10.4/src/kompend/packs/base.py +174 -0
  420. kompend-2026.10.4/src/kompend/packs/builtins/__init__.py +9 -0
  421. kompend-2026.10.4/src/kompend/packs/builtins/academic/__init__.py +5 -0
  422. kompend-2026.10.4/src/kompend/packs/builtins/academic/pack.toml +14 -0
  423. kompend-2026.10.4/src/kompend/packs/builtins/default/pack.toml +16 -0
  424. kompend-2026.10.4/src/kompend/packs/builtins/technical/__init__.py +5 -0
  425. kompend-2026.10.4/src/kompend/packs/builtins/technical/pack.toml +14 -0
  426. kompend-2026.10.4/src/kompend/preprocessing/__init__.py +3 -0
  427. kompend-2026.10.4/src/kompend/preprocessing/dedup/__init__.py +16 -0
  428. kompend-2026.10.4/src/kompend/preprocessing/dedup/base.py +107 -0
  429. kompend-2026.10.4/src/kompend/preprocessing/dedup/embedding_matcher.py +114 -0
  430. kompend-2026.10.4/src/kompend/preprocessing/dedup/minhash_matcher.py +152 -0
  431. kompend-2026.10.4/src/kompend/preprocessing/dedup/orchestrator.py +329 -0
  432. kompend-2026.10.4/src/kompend/preprocessing/dedup/store.py +231 -0
  433. kompend-2026.10.4/src/kompend/preprocessing/downloaders/__init__.py +24 -0
  434. kompend-2026.10.4/src/kompend/preprocessing/downloaders/base.py +15 -0
  435. kompend-2026.10.4/src/kompend/preprocessing/downloaders/crawler.py +209 -0
  436. kompend-2026.10.4/src/kompend/preprocessing/downloaders/duplicate_detector.py +97 -0
  437. kompend-2026.10.4/src/kompend/preprocessing/downloaders/http_downloader.py +236 -0
  438. kompend-2026.10.4/src/kompend/preprocessing/downloaders/url_resolver.py +247 -0
  439. kompend-2026.10.4/src/kompend/preprocessing/parsers/AGENTS.md +133 -0
  440. kompend-2026.10.4/src/kompend/preprocessing/parsers/__init__.py +44 -0
  441. kompend-2026.10.4/src/kompend/preprocessing/parsers/_registry.py +243 -0
  442. kompend-2026.10.4/src/kompend/preprocessing/parsers/base.py +210 -0
  443. kompend-2026.10.4/src/kompend/preprocessing/parsers/markdown.py +102 -0
  444. kompend-2026.10.4/src/kompend/preprocessing/parsers/parsecraft_parser.py +497 -0
  445. kompend-2026.10.4/src/kompend/provenance.py +75 -0
  446. kompend-2026.10.4/src/kompend/rag/AGENTS.md +83 -0
  447. kompend-2026.10.4/src/kompend/rag/__init__.py +53 -0
  448. kompend-2026.10.4/src/kompend/rag/zvec_store.py +904 -0
  449. kompend-2026.10.4/src/kompend/resolution/__init__.py +9 -0
  450. kompend-2026.10.4/src/kompend/resolution/base.py +27 -0
  451. kompend-2026.10.4/src/kompend/resolution/chain.py +43 -0
  452. kompend-2026.10.4/src/kompend/resolution/vlm_enricher.py +203 -0
  453. kompend-2026.10.4/src/kompend/review.py +206 -0
  454. kompend-2026.10.4/src/kompend/scaffolding/__init__.py +23 -0
  455. kompend-2026.10.4/src/kompend/scaffolding/_core.py +425 -0
  456. kompend-2026.10.4/src/kompend/scaffolding/templates/AGENTS.md.j2 +95 -0
  457. kompend-2026.10.4/src/kompend/scaffolding/templates/NOTES.md +22 -0
  458. kompend-2026.10.4/src/kompend/scaffolding/templates/README.md.j2 +40 -0
  459. kompend-2026.10.4/src/kompend/scaffolding/templates/gitignore.j2 +11 -0
  460. kompend-2026.10.4/src/kompend/scaffolding/templates/next_steps.txt.j2 +4 -0
  461. kompend-2026.10.4/src/kompend/search/AGENTS.md +37 -0
  462. kompend-2026.10.4/src/kompend/search/adaptive_retriever.py +173 -0
  463. kompend-2026.10.4/src/kompend/search/budget.py +215 -0
  464. kompend-2026.10.4/src/kompend/search/classifier.py +157 -0
  465. kompend-2026.10.4/src/kompend/search/filters.py +43 -0
  466. kompend-2026.10.4/src/kompend/search/pipeline.py +328 -0
  467. kompend-2026.10.4/src/kompend/search/retriever.py +613 -0
  468. kompend-2026.10.4/src/kompend/templates/capture/capture_system.md.j2 +47 -0
  469. kompend-2026.10.4/src/kompend/templates/capture/distill.md.j2 +43 -0
  470. kompend-2026.10.4/src/kompend/templates/capture/distill_agentic_prompt.md.j2 +15 -0
  471. kompend-2026.10.4/src/kompend/templates/capture/distill_agentic_system.md.j2 +26 -0
  472. kompend-2026.10.4/src/kompend/templates/capture/write_agentic_prompt.md.j2 +1 -0
  473. kompend-2026.10.4/src/kompend/templates/capture/write_agentic_system.md.j2 +23 -0
  474. kompend-2026.10.4/src/kompend/templates/capture/write_prompt.md.j2 +17 -0
  475. kompend-2026.10.4/src/kompend/templates/chunking/contextual_agentic_prompt.md.j2 +8 -0
  476. kompend-2026.10.4/src/kompend/templates/chunking/contextual_agentic_system.md.j2 +17 -0
  477. kompend-2026.10.4/src/kompend/templates/chunking/contextual_context.md.j2 +8 -0
  478. kompend-2026.10.4/src/kompend/templates/chunking/node_summary.md.j2 +26 -0
  479. kompend-2026.10.4/src/kompend/templates/chunking/summarizer_agentic_prompt.md.j2 +10 -0
  480. kompend-2026.10.4/src/kompend/templates/chunking/summarizer_agentic_system.md.j2 +29 -0
  481. kompend-2026.10.4/src/kompend/templates/compilation/extraction_prompt.md.j2 +12 -0
  482. kompend-2026.10.4/src/kompend/templates/compilation/extraction_reduce_prompt.md.j2 +14 -0
  483. kompend-2026.10.4/src/kompend/templates/compilation/extraction_reduce_system.md.j2 +6 -0
  484. kompend-2026.10.4/src/kompend/templates/compilation/extraction_system.md.j2 +24 -0
  485. kompend-2026.10.4/src/kompend/templates/compilation/generation_agentic_prompt.md.j2 +46 -0
  486. kompend-2026.10.4/src/kompend/templates/compilation/generation_agentic_system.md.j2 +42 -0
  487. kompend-2026.10.4/src/kompend/templates/compilation/generation_prompt.md.j2 +62 -0
  488. kompend-2026.10.4/src/kompend/templates/compilation/generation_system.md.j2 +26 -0
  489. kompend-2026.10.4/src/kompend/templates/compilation/reference_extraction_prompt.md.j2 +14 -0
  490. kompend-2026.10.4/src/kompend/templates/compilation/reference_extraction_system.md.j2 +25 -0
  491. kompend-2026.10.4/src/kompend/templates/compilation/reference_resolver_prompt.md.j2 +14 -0
  492. kompend-2026.10.4/src/kompend/templates/compilation/reference_resolver_system.md.j2 +19 -0
  493. kompend-2026.10.4/src/kompend/templates/compilation/wicer_diagnose.md.j2 +12 -0
  494. kompend-2026.10.4/src/kompend/templates/compilation/wicer_evaluate.md.j2 +17 -0
  495. kompend-2026.10.4/src/kompend/templates/compilation/wicer_probe.md.j2 +9 -0
  496. kompend-2026.10.4/src/kompend/templates/lint/clarity-score.md.j2 +15 -0
  497. kompend-2026.10.4/src/kompend/templates/lint/contradiction-detection.md.j2 +38 -0
  498. kompend-2026.10.4/src/kompend/templates/lint/coverage-gap-dedup.md.j2 +27 -0
  499. kompend-2026.10.4/src/kompend/templates/lint/coverage-gap.md.j2 +24 -0
  500. kompend-2026.10.4/src/kompend/templates/lint/factual-consistency.md.j2 +15 -0
  501. kompend-2026.10.4/src/kompend/templates/lint/remediate_agentic_prompt.md.j2 +16 -0
  502. kompend-2026.10.4/src/kompend/templates/lint/remediate_agentic_system.md.j2 +30 -0
  503. kompend-2026.10.4/src/kompend/templates/lint/remediate_concept.md.j2 +46 -0
  504. kompend-2026.10.4/src/kompend/templates/lint/verify_agentic_prompt.md.j2 +2 -0
  505. kompend-2026.10.4/src/kompend/templates/lint/verify_agentic_system.md.j2 +20 -0
  506. kompend-2026.10.4/src/kompend/templates/memory/system_context.md.j2 +9 -0
  507. kompend-2026.10.4/src/kompend/templates/organize/categorize_prompt.md.j2 +14 -0
  508. kompend-2026.10.4/src/kompend/templates/organize/categorize_system.md.j2 +48 -0
  509. kompend-2026.10.4/src/kompend/templates/output/synthesize.md.j2 +16 -0
  510. kompend-2026.10.4/src/kompend/templates/output/synthesize_agentic_prompt.md.j2 +9 -0
  511. kompend-2026.10.4/src/kompend/templates/output/synthesize_agentic_system.md.j2 +23 -0
  512. kompend-2026.10.4/src/kompend/templates/query/synthesize_system.md.j2 +42 -0
  513. kompend-2026.10.4/src/kompend/templates/search/crag_grade.md.j2 +10 -0
  514. kompend-2026.10.4/src/kompend/templates/search/expand_query.md.j2 +26 -0
  515. kompend-2026.10.4/src/kompend/templates/search/hyde_generate.md.j2 +5 -0
  516. kompend-2026.10.4/src/kompend/templates/search/query_agentic_prompt.md.j2 +25 -0
  517. kompend-2026.10.4/src/kompend/templates/search/query_agentic_system.md.j2 +25 -0
  518. kompend-2026.10.4/src/kompend/templates/verification/verify_claim.md.j2 +21 -0
  519. kompend-2026.10.4/src/kompend/templates/verification/verify_system.md.j2 +7 -0
  520. kompend-2026.10.4/src/kompend/trust.py +206 -0
  521. kompend-2026.10.4/src/kompend/types.py +77 -0
  522. kompend-2026.10.4/src/kompend/verification.py +231 -0
  523. kompend-2026.10.4/src/kompend/web/_view_helpers.py +60 -0
  524. kompend-2026.10.4/src/kompend/web/routes_api.py +38 -0
  525. kompend-2026.10.4/src/kompend/web/routes_pages.py +420 -0
  526. kompend-2026.10.4/src/kompend/web/server.py +27 -0
  527. kompend-2026.10.4/tests/AGENTS.md +93 -0
  528. kompend-2026.10.4/tests/__init__.py +1 -0
  529. kompend-2026.10.4/tests/benchmarks/test_agent_quality.py +174 -0
  530. kompend-2026.10.4/tests/benchmarks/test_chunk_quality.py +198 -0
  531. kompend-2026.10.4/tests/conftest.py +139 -0
  532. kompend-2026.10.4/tests/data/README.md +41 -0
  533. kompend-2026.10.4/tests/data/batch2/ListeningEffortANC.pdf +0 -0
  534. kompend-2026.10.4/tests/data/batch2/T-REC-P.501-202504-I!!PDF-E.pdf +0 -0
  535. kompend-2026.10.4/tests/data/batch2/T-REC-P.57-202106-I!!PDF-E.pdf +0 -0
  536. kompend-2026.10.4/tests/data/batch2/T-REC-P.58-202303-I!!PDF-E.pdf +0 -0
  537. kompend-2026.10.4/tests/data/batch2/T-REC-P.800-199608-I!!PDF-E.pdf +0 -0
  538. kompend-2026.10.4/tests/data/batch2/T-REC-P.800.1-201607-I!!PDF-E.pdf +0 -0
  539. kompend-2026.10.4/tests/data/batch2/T-REC-P.800.2-201607-I!!PDF-E.pdf +0 -0
  540. kompend-2026.10.4/tests/data/batch2/T-REC-P.807-201602-I!!PDF-E.pdf +0 -0
  541. kompend-2026.10.4/tests/data/batch2/urls.txt +21 -0
  542. kompend-2026.10.4/tests/fixtures/documents.py +185 -0
  543. kompend-2026.10.4/tests/helpers/__init__.py +0 -0
  544. kompend-2026.10.4/tests/helpers/hooks.py +7 -0
  545. kompend-2026.10.4/tests/integration/test_arxiv_pipeline.py +205 -0
  546. kompend-2026.10.4/tests/integration/test_hierarchical_integration.py +527 -0
  547. kompend-2026.10.4/tests/integration/test_pipeline_mock.py +227 -0
  548. kompend-2026.10.4/tests/integration/test_pipeline_smoke.py +97 -0
  549. kompend-2026.10.4/tests/integration/test_real_corpus.py +182 -0
  550. kompend-2026.10.4/tests/test-cache/.gitignore +2 -0
  551. kompend-2026.10.4/tests/test_template_validation.py +32 -0
  552. kompend-2026.10.4/tests/unit/test_adaptive_retriever.py +193 -0
  553. kompend-2026.10.4/tests/unit/test_agent.py +216 -0
  554. kompend-2026.10.4/tests/unit/test_agent_debug.py +53 -0
  555. kompend-2026.10.4/tests/unit/test_agent_definitions.py +250 -0
  556. kompend-2026.10.4/tests/unit/test_agent_templates.py +156 -0
  557. kompend-2026.10.4/tests/unit/test_agentic_retry.py +69 -0
  558. kompend-2026.10.4/tests/unit/test_agentic_wiring.py +228 -0
  559. kompend-2026.10.4/tests/unit/test_asset_separation.py +347 -0
  560. kompend-2026.10.4/tests/unit/test_asset_tools.py +192 -0
  561. kompend-2026.10.4/tests/unit/test_attachment_pipeline.py +190 -0
  562. kompend-2026.10.4/tests/unit/test_attachments.py +351 -0
  563. kompend-2026.10.4/tests/unit/test_attachments_list_cli.py +70 -0
  564. kompend-2026.10.4/tests/unit/test_attachments_verify_adopt.py +161 -0
  565. kompend-2026.10.4/tests/unit/test_bibtex_export.py +267 -0
  566. kompend-2026.10.4/tests/unit/test_budget.py +137 -0
  567. kompend-2026.10.4/tests/unit/test_cache_store.py +167 -0
  568. kompend-2026.10.4/tests/unit/test_capture.py +383 -0
  569. kompend-2026.10.4/tests/unit/test_chunking.py +394 -0
  570. kompend-2026.10.4/tests/unit/test_cli_compile.py +196 -0
  571. kompend-2026.10.4/tests/unit/test_cli_config.py +145 -0
  572. kompend-2026.10.4/tests/unit/test_cli_doctor_status.py +483 -0
  573. kompend-2026.10.4/tests/unit/test_cli_help.py +61 -0
  574. kompend-2026.10.4/tests/unit/test_cli_ignore.py +110 -0
  575. kompend-2026.10.4/tests/unit/test_cli_index.py +122 -0
  576. kompend-2026.10.4/tests/unit/test_cli_init.py +134 -0
  577. kompend-2026.10.4/tests/unit/test_cli_progress.py +42 -0
  578. kompend-2026.10.4/tests/unit/test_cli_query.py +85 -0
  579. kompend-2026.10.4/tests/unit/test_cli_references.py +174 -0
  580. kompend-2026.10.4/tests/unit/test_cli_sources.py +285 -0
  581. kompend-2026.10.4/tests/unit/test_cli_verbosity.py +212 -0
  582. kompend-2026.10.4/tests/unit/test_compilation.py +1341 -0
  583. kompend-2026.10.4/tests/unit/test_concept_broker.py +132 -0
  584. kompend-2026.10.4/tests/unit/test_concept_keys.py +91 -0
  585. kompend-2026.10.4/tests/unit/test_config.py +965 -0
  586. kompend-2026.10.4/tests/unit/test_config_check.py +419 -0
  587. kompend-2026.10.4/tests/unit/test_context_manager_capability.py +48 -0
  588. kompend-2026.10.4/tests/unit/test_contextual_chunker.py +160 -0
  589. kompend-2026.10.4/tests/unit/test_dedup.py +488 -0
  590. kompend-2026.10.4/tests/unit/test_dicts.py +45 -0
  591. kompend-2026.10.4/tests/unit/test_distill_agent.py +23 -0
  592. kompend-2026.10.4/tests/unit/test_doctor_agent.py +75 -0
  593. kompend-2026.10.4/tests/unit/test_downloaders.py +558 -0
  594. kompend-2026.10.4/tests/unit/test_embedding_text.py +14 -0
  595. kompend-2026.10.4/tests/unit/test_entity_registry.py +279 -0
  596. kompend-2026.10.4/tests/unit/test_entity_type_registry.py +91 -0
  597. kompend-2026.10.4/tests/unit/test_export.py +406 -0
  598. kompend-2026.10.4/tests/unit/test_extraction_agent.py +114 -0
  599. kompend-2026.10.4/tests/unit/test_extraction_memory.py +209 -0
  600. kompend-2026.10.4/tests/unit/test_extraction_strategy.py +402 -0
  601. kompend-2026.10.4/tests/unit/test_extractors.py +177 -0
  602. kompend-2026.10.4/tests/unit/test_file_extension_text.py +38 -0
  603. kompend-2026.10.4/tests/unit/test_gap_analysis.py +128 -0
  604. kompend-2026.10.4/tests/unit/test_gen_checkpoint.py +85 -0
  605. kompend-2026.10.4/tests/unit/test_generation_agent.py +77 -0
  606. kompend-2026.10.4/tests/unit/test_http_client.py +201 -0
  607. kompend-2026.10.4/tests/unit/test_image_portablize.py +102 -0
  608. kompend-2026.10.4/tests/unit/test_image_provenance.py +57 -0
  609. kompend-2026.10.4/tests/unit/test_ingest_binary_gate.py +101 -0
  610. kompend-2026.10.4/tests/unit/test_ingest_reparse.py +385 -0
  611. kompend-2026.10.4/tests/unit/test_knox_agent_base.py +174 -0
  612. kompend-2026.10.4/tests/unit/test_knox_model.py +143 -0
  613. kompend-2026.10.4/tests/unit/test_kompend_agent_base.py +174 -0
  614. kompend-2026.10.4/tests/unit/test_kompend_model.py +143 -0
  615. kompend-2026.10.4/tests/unit/test_lint.py +1460 -0
  616. kompend-2026.10.4/tests/unit/test_lint_flow.py +63 -0
  617. kompend-2026.10.4/tests/unit/test_lint_history.py +262 -0
  618. kompend-2026.10.4/tests/unit/test_llm_context_window.py +254 -0
  619. kompend-2026.10.4/tests/unit/test_llm_format.py +130 -0
  620. kompend-2026.10.4/tests/unit/test_llm_models.py +417 -0
  621. kompend-2026.10.4/tests/unit/test_log_report.py +72 -0
  622. kompend-2026.10.4/tests/unit/test_markdown_converter.py +86 -0
  623. kompend-2026.10.4/tests/unit/test_mcp.py +215 -0
  624. kompend-2026.10.4/tests/unit/test_memory.py +173 -0
  625. kompend-2026.10.4/tests/unit/test_merge_by_concept_key.py +119 -0
  626. kompend-2026.10.4/tests/unit/test_metadata_field_tags.py +27 -0
  627. kompend-2026.10.4/tests/unit/test_models.py +485 -0
  628. kompend-2026.10.4/tests/unit/test_notes.py +204 -0
  629. kompend-2026.10.4/tests/unit/test_organize.py +828 -0
  630. kompend-2026.10.4/tests/unit/test_orphan_attachments_destructive.py +133 -0
  631. kompend-2026.10.4/tests/unit/test_orphan_attachments_fix.py +148 -0
  632. kompend-2026.10.4/tests/unit/test_otel_instrument.py +178 -0
  633. kompend-2026.10.4/tests/unit/test_output.py +960 -0
  634. kompend-2026.10.4/tests/unit/test_output_models.py +167 -0
  635. kompend-2026.10.4/tests/unit/test_output_okf.py +575 -0
  636. kompend-2026.10.4/tests/unit/test_output_wiki_index.py +442 -0
  637. kompend-2026.10.4/tests/unit/test_parsecraft_parser.py +578 -0
  638. kompend-2026.10.4/tests/unit/test_parser_options_surfaces.py +148 -0
  639. kompend-2026.10.4/tests/unit/test_parser_registry.py +192 -0
  640. kompend-2026.10.4/tests/unit/test_portable_wiki.py +84 -0
  641. kompend-2026.10.4/tests/unit/test_postprocess.py +79 -0
  642. kompend-2026.10.4/tests/unit/test_query_agent.py +96 -0
  643. kompend-2026.10.4/tests/unit/test_query_agentic_flow.py +199 -0
  644. kompend-2026.10.4/tests/unit/test_rag.py +243 -0
  645. kompend-2026.10.4/tests/unit/test_reference_dedup.py +377 -0
  646. kompend-2026.10.4/tests/unit/test_reference_excision.py +120 -0
  647. kompend-2026.10.4/tests/unit/test_reference_links.py +372 -0
  648. kompend-2026.10.4/tests/unit/test_reference_resolver.py +224 -0
  649. kompend-2026.10.4/tests/unit/test_reference_store.py +169 -0
  650. kompend-2026.10.4/tests/unit/test_references_model.py +182 -0
  651. kompend-2026.10.4/tests/unit/test_rel_to_vault.py +206 -0
  652. kompend-2026.10.4/tests/unit/test_resolution.py +161 -0
  653. kompend-2026.10.4/tests/unit/test_rlm_capability.py +439 -0
  654. kompend-2026.10.4/tests/unit/test_rumdl_config.py +85 -0
  655. kompend-2026.10.4/tests/unit/test_rumdl_normalize.py +101 -0
  656. kompend-2026.10.4/tests/unit/test_runlog.py +27 -0
  657. kompend-2026.10.4/tests/unit/test_safe_stem.py +63 -0
  658. kompend-2026.10.4/tests/unit/test_scaffolding.py +318 -0
  659. kompend-2026.10.4/tests/unit/test_search_pipeline.py +203 -0
  660. kompend-2026.10.4/tests/unit/test_search_retriever.py +212 -0
  661. kompend-2026.10.4/tests/unit/test_semantic_gaps.py +139 -0
  662. kompend-2026.10.4/tests/unit/test_source_metadata.py +143 -0
  663. kompend-2026.10.4/tests/unit/test_source_tags.py +62 -0
  664. kompend-2026.10.4/tests/unit/test_store.py +231 -0
  665. kompend-2026.10.4/tests/unit/test_store_migration_logs.py +122 -0
  666. kompend-2026.10.4/tests/unit/test_summarizer.py +290 -0
  667. kompend-2026.10.4/tests/unit/test_tag_filtering.py +116 -0
  668. kompend-2026.10.4/tests/unit/test_template_loader.py +332 -0
  669. kompend-2026.10.4/tests/unit/test_text_encoding.py +149 -0
  670. kompend-2026.10.4/tests/unit/test_text_matching.py +142 -0
  671. kompend-2026.10.4/tests/unit/test_throughput_features.py +1417 -0
  672. kompend-2026.10.4/tests/unit/test_unreferenced_attachments.py +168 -0
  673. kompend-2026.10.4/tests/unit/test_url_resolver.py +207 -0
  674. kompend-2026.10.4/tests/unit/test_usage_tracking.py +122 -0
  675. kompend-2026.10.4/tests/unit/test_user.py +61 -0
  676. kompend-2026.10.4/tests/unit/test_vault_paths.py +34 -0
  677. kompend-2026.10.4/tests/unit/test_wicer_agents.py +156 -0
  678. kompend-2026.10.4/tests/unit/test_wiki_cache.py +94 -0
  679. kompend-2026.10.4/tests/unit/test_wikilink_alias_learning.py +144 -0
  680. kompend-2026.10.4/tests/unit/test_wikilink_lookup.py +115 -0
  681. kompend-2026.10.4/tests/unit/test_xref_checker.py +243 -0
  682. kompend-2026.10.4/tests/unit/test_zvec_embed_text.py +270 -0
  683. kompend-2026.10.4/tests/unit/test_zvec_hybrid.py +250 -0
  684. kompend-2026.10.4/tests/unit/test_zvec_store_rebuild.py +270 -0
  685. kompend-2026.10.4/tests/unit/test_zvec_tags_schema.py +113 -0
  686. kompend-2026.10.4/ty.toml +13 -0
@@ -0,0 +1,94 @@
1
+ # AGENTS.md — Checks
2
+
3
+ Verification commands, enforcement scripts, and new-code checklist.
4
+
5
+ ## General Checks
6
+
7
+ ### Pattern: New Code Checklist
8
+
9
+ Before writing a function, tick these. If you can't, stop and fix the foundation
10
+ first — the alternatives are all antipatterns:
11
+
12
+ - **Limit values** — from config/DEFAULTS/field, not a literal slice?
13
+ - **Enum values** — from StrEnum members, not bare strings?
14
+ - **Imports** — at module level, not inside function bodies?
15
+ - **Global state** — no `global` keyword or module-level mutable singletons?
16
+ - **Noqa suppressions** — actually necessary, with a justification comment?
17
+
18
+ ### Pattern: Enforcement Scripts
19
+
20
+ A small set of scripts catch what linting misses: bare-string contract keys,
21
+ magic-number crops, banned-noqa patterns. Run them locally before pushing.
22
+ All exit non-zero on violations; `mise run check-all` runs them (no CI job
23
+ does — see **Wiring** below).
24
+
25
+ Two guarantees keep them honest: a scan that finds no files is an error (an
26
+ empty scan is not a pass), and an enforced contract that no longer exists in
27
+ the code (moved module, renamed enum) fails the script instead of warning.
28
+ Per-line waivers exist for sites the rule cannot judge — `# nocheck: <reason>`
29
+ in field-consistency, `# noqa: <code>` in antipatterns. The reason is part of
30
+ the waiver: it states why this site is legitimate.
31
+
32
+ ### Extension
33
+
34
+ | Who | When | What |
35
+ |-----|------|------|
36
+ | Project maintainer | Adding a new verification tool | Verification section |
37
+ | Project maintainer | Adding a new enforcement script | Enforcement table |
38
+ | Project maintainer | Adding a new checklist item | Checklist |
39
+
40
+ ---
41
+
42
+ ## Project-specific Checks — kompend
43
+
44
+ ### Verification
45
+
46
+ - Run `ruff check` on changed Python files before committing
47
+ - Run `uv run pytest tests/unit -x --timeout=30` for unit test coverage
48
+ - Run `uv run pytest tests/integration -x --timeout=30` for integration tests (no real-engine calls — must be fast)
49
+ - Run `ty check src/kompend` for type checking (mypy is not used)
50
+ - Run `uv run python scripts/checks/check_field_consistency.py` to catch hard-coded contract keys
51
+ - Run `uv run python scripts/checks/check_antipatterns.py` to catch banned-noqa, magic crops, `try/except ImportError` guards, and `global` keyword usage
52
+ - Verify `kompend.toml.example` stays in sync with `DEFAULTS` when adding config keys
53
+ - After changing `src/kompend/core/paths.py`, verify no hard-coded path strings
54
+ exist in other `.py` files
55
+ - After changing CLI commands, MCP tools, config keys, or output format, check
56
+ `skills/kompend/SKILL.md` for stale or missing info
57
+ - Run `uv run mkdocs build --strict` when changing documentation files
58
+
59
+ ### New Code Checklist
60
+
61
+ Tick these BEFORE writing a function:
62
+
63
+ - **Limit value** — from `config.get(...)` / `DEFAULTS` / `PipelineConfig` field?
64
+ Literals like `[:10]` silently drop data. Use `DisplayConfig` for display
65
+ limits or `BudgetConfig` for LLM input/output budgets.
66
+ - **Role / task / compiler / tier** — from `LLMRole` / `AgentTask` / `Compiler` /
67
+ `Tier` enum? Bare strings like `role="compile.extract"` will be rejected.
68
+ - **Import** — at module level? Function-body imports (`PLC0415`) are rejected
69
+ except for `try/except ImportError` probes for explicitly optional deps.
70
+ - **Global state** — no `global` keyword or module-level mutable singleton
71
+ (`_cache = {}`, `_instance = None`). A genuinely process-wide switch (one-shot
72
+ setup guard, verbosity toggle) may use `global` with a justified
73
+ `# noqa: PLW0603` — a contextvar would be wrong for it.
74
+ - **Noqa suppression** — actually necessary with a justification comment?
75
+ `PLC0415` and other banned-noqa rules cannot be suppressed.
76
+
77
+ ### Enforcement scripts
78
+
79
+ | Script | Catches | Lives in |
80
+ |---|---|---|
81
+ | `ruff check` | Most lint issues (PLC0415/E402 are warnings, not errors) | ruff.toml |
82
+ | `scripts/checks/check_field_consistency.py` | Bare-string contract keys | scripts/checks/ |
83
+ | `scripts/checks/check_antipatterns.py` | Banned-noqa, magic crops, `try/except ImportError` guards, `global` | scripts/checks/ |
84
+ | `scripts/checks/check_dox.py` | DOX file size budgets, cross-file duplication | scripts/checks/ |
85
+ | `scripts/analyze/analyze_codebase.py` | Files/submodules exceeding net-line targets (>350 lines/file, >7 files/submodule) | scripts/analyze/ |
86
+
87
+ **Wiring.** Git honours one `core.hooksPath`; this repo points it at
88
+ `.githooks` (`mise run install-hooks`). `.githooks/pre-commit` runs the
89
+ forbidden ruff rules plus the three gates, then `_delegate.sh` forwards to the
90
+ hook files other tools own in `.beads/hooks` (beads, repowise) — never edit
91
+ those, the tools regenerate them. `check_dox.py`'s scope is the DOX files plus
92
+ the core `.agents/` state files; `.agents/skills/**` and `.agents/history/**` are
93
+ not project DOX and are skipped. No CI job runs these; `mise run check-all` runs
94
+ the two AST gates.
@@ -0,0 +1,79 @@
1
+ # AGENTS.md — Code
2
+
3
+ kompend code policies: antipatterns, boundaries, error handling. Load when writing
4
+ or reviewing code — production or tests.
5
+
6
+ ## Python style
7
+
8
+ Follow the `python-ultimate` skill when in doubt about Python style, structure,
9
+ or conventions — it takes precedence over a conflicting habit or default.
10
+
11
+ ## Antipatterns
12
+
13
+ | Pattern | Verdict | Fix |
14
+ |---|---|---|
15
+ | Hard-coded model name (`model="ollama/llama3.2"`) | ❌ | Config field default, never a function signature |
16
+ | Domain value as function default (`prompt_budget: int = 200_000`) | ❌ | Config dataclass field |
17
+ | `x: T | None = None` with hidden default in body | ❌ | Config field; docstring if `None` is truly meaningful |
18
+ | `content[:200]` / `text[:4096]` | ❌ | Full content, or a batch size derived from config/model |
19
+ | Config fallback duplicating a runtime provider value (`dim = 384`) | ❌ | Read it from the provider at runtime (`provider.dim`) |
20
+ | Bare schema/field-name literals (`hit.get("source_file")`) | ❌ | `StrEnum` / `Final[str]` symbol imported at every site |
21
+ | Hard-coded `"KOMP_*"` env-var literal (`os.environ.get("KOMP_WIKI_DIR")`, `envvar=`) | ❌ | `EnvVar` member from `kompend.core.env` |
22
+ | Stable-shape dict without a schema (JSONL records, persisted entries — lint history, dedup store, graph edges, citations) | ❌ | `TypedDict` next to the owning model — types keys at zero runtime cost. Dataclasses only where the shape is also constructed/validated in code |
23
+ | Absolute path in a `.kompend/` artifact (`citing_source = str(path)`) | ❌ | Relativize at the persistence boundary (`rel_to_vault(path, base_dir)`) |
24
+
25
+ The first five are instances of the universal magic-number rule
26
+ (see `POLICIES.md`); rows 6–9 are kompend-specific. Two of them are enforced:
27
+ `scripts/checks/check_field_consistency.py` (bare contract keys) and
28
+ `scripts/checks/check_antipatterns.py` (env-var literals, magic crops). Run both
29
+ before committing — see `CHECKS.md`.
30
+
31
+ ## Boundaries
32
+
33
+ - **Every behaviour-affecting value is a config field** in a `_KompendBaseModel`
34
+ (`LLMConfig`, `BudgetConfig`, …) with a `Field(validation_alias=...)`. This
35
+ holds even when the default equals the current literal: the field is the
36
+ single source of truth, and `DEFAULTS` is generated from the schema.
37
+ - **No absolute paths in `.kompend/` artifacts.** Paths in every persisted record
38
+ (provenance, references, assets, dedup, memory, search index, compile state,
39
+ wiki cache) are vault-relative and POSIX-normalized. In-memory `Path` objects
40
+ may be absolute; relativization happens at the persistence boundary.
41
+ - **No `from typing import TYPE_CHECKING`** and no `if TYPE_CHECKING:` blocks —
42
+ they diverge runtime from the type checker. Break import cycles structurally
43
+ (neutral module, Protocol, or a runtime-only import at its call site) and use
44
+ `from __future__ import annotations` for forward references.
45
+ - **Never suppress** `PLC0415` (inline imports), `ANN001`/`ANN202` (missing
46
+ annotations) — hard errors, no `# noqa`. For non-ruff scanner false positives
47
+ (vibecheck, sloppylint, aislop) use that tool's own directive, so each
48
+ suppression names the scanner it targets.
49
+ - **Heavy optional dependencies stay lazy** (parsecraft, torch, transformers,
50
+ datasketch, scipy, crawl4ai, pydantic-ai, MCP SDK, zvec) so CLI startup stays
51
+ fast. Package level: `lazy.attach(__name__, submod_attrs={...})`. Function
52
+ level: the registry factory (`get_backend()`), never a module-scope import.
53
+ Canonical pattern: `src/kompend/preprocessing/parsers/__init__.py`.
54
+ - **Temp files** go in `./tmp` (gitignored) or `tempfile.TemporaryDirectory()`.
55
+
56
+ ## Error handling — prefer "let it burn"
57
+
58
+ Propagate. `None` may mean a thing is **absent** (lookup miss, optional value
59
+ unset), never that an operation **failed** — returning `None` for a corrupt file
60
+ is the antipattern, and it pushes `if x is None` chains onto every caller.
61
+
62
+ The only valid `try/except` sites:
63
+
64
+ 1. **Trust boundary** — translate a low-level error into a user-facing message
65
+ at the CLI/MCP top level; catch narrowly, report the real cause.
66
+ 2. **Optional-feature probe** — narrow to the specific exception
67
+ (`ImportError`, `FileNotFoundError`), never `Exception`.
68
+ 3. **Best-effort enrichment** — per-item catch that *records* the failure
69
+ (SKIP result, warning log) and continues the batch.
70
+ 4. **Cache miss** — narrow to `(json.JSONDecodeError, OSError)` and log at
71
+ `WARNING` so corruption stays visible.
72
+
73
+ Forbidden: `except Exception: pass`, `except Exception: return None`,
74
+ `# noqa: BLE001`/`S110` to silence a bare except, and catching a corrupt
75
+ internal-state file (wiki cache, tier state, compile state) to reset it —
76
+ corruption is a bug; raise.
77
+
78
+ Removing a `try/except` that surfaces a real error to someone who needs it is
79
+ the correct fix.
@@ -0,0 +1,98 @@
1
+ # AGENTS.md — Files
2
+
3
+ Path constants, VaultPaths, and naming conventions. Load when touching files.
4
+
5
+ ## General Files
6
+
7
+ ### Pattern: Single Source of Truth for Paths
8
+
9
+ Project artifact paths should be defined in a single constants module. No other
10
+ module hard-codes directory or file names. Always import from the constants
11
+ module.
12
+
13
+ ### Pattern: Resolved Path Object
14
+
15
+ Use a path-resolver class that takes a base directory and exposes every artifact
16
+ path as a property. This ensures consistent path construction across the codebase.
17
+
18
+ ### Extension
19
+
20
+ | Who | When | What |
21
+ |-----|------|------|
22
+ | Project maintainer | Adding a new artifact file/directory | Add constant row |
23
+ | Project maintainer | Renaming an artifact | Update constant value |
24
+ | Project maintainer | Changing the paths module | Update module reference |
25
+
26
+ ---
27
+
28
+ ## Project-specific Files — kompend
29
+
30
+ ### Path Constants — Single Source of Truth
31
+
32
+ All on-disk artifact names are `Final[str]` constants in **`src/kompend/core/paths.py`**.
33
+
34
+ **Rule:** `".kompend"`, `"cache"`, `"config.toml"`, `"vectors"`, `"memory.db"`,
35
+ `"last_wiki.json"`, etc. must **never** appear as a literal in
36
+ any `.py` file outside `paths.py`. Always import from `kompend.core.paths`.
37
+
38
+ | Constant | Value | Usage |
39
+ |----------|-------|-------|
40
+ | `KOMP_DIR` | `".kompend"` | Root metadata directory |
41
+ | `KOMP_DB_FILE` | `"kompend.db"` | Single non-vector SQLite store (`.kompend/kompend.db`) |
42
+ | `CACHE_SUBDIR` | `"cache"` | Cache component within `KOMP_DIR` |
43
+ | `CACHE_DIR` | `".kompend/cache"` | Full relative cache path (for DEFAULTS) |
44
+ | `CONFIG_FILE` | `"config.toml"` | Project-local config |
45
+ | `VECTORS_DIR` | `"vectors"` | Embedding vector store |
46
+ | `VECTORS_MANIFEST_FILE` | `"vectors.manifest.json"` | Vector id sidecar (legacy — now the `vector_manifest` row) |
47
+ | `DOWNLOADED_FILE` | `"downloaded.json"` | URL download manifest (legacy — now `downloaded` table) |
48
+ | `MEMORY_DB_FILE` | `"memory.db"` | Semantic query-memory collection **directory** (zvec, not SQLite) |
49
+ | `MEMORY_LOG_FILE` | `"memory.jsonl"` | Memory append-only log (legacy — now `memory_log` table) |
50
+ | `MEMORY_STORE_FILE` | `"memory.json"` | Memory state export (legacy — now `memory_states` table) |
51
+ | `PROVENANCE_DIR` | `"provenance"` | Provenance trace directory (legacy — now `provenance` table) |
52
+ | `SUMMARIES_SUBDIR` | `"summaries"` | Per-source summary pages (`wiki/summaries/`) |
53
+ | `EXPORTED_DIR_NAME` | `"exported"` | Full-source markdown exports (top-level, on demand) |
54
+ | `QUALITY_FILE` | `"quality.md"` | Verification summary page (`wiki/quality.md`) |
55
+ | `VERIFICATION_FILE` | `"verification.json"` | Verification results |
56
+ | `PRIVATE_FILE` | `"private.json"` | Private page manifest |
57
+ | `COMPILE_STATE_FILE` | `"compile_state.json"` | Tier state checkpoint |
58
+ | `LINT_HISTORY_FILE` | `"lint_history.jsonl"` | Append-only lint history log |
59
+ | `STATE_FILE` | `"state.json"` | General state file |
60
+
61
+ **Configurable directory names** (`"sources"`, `"wiki"`) live in `DEFAULTS`
62
+ under `["paths"]["sources_dir"]` and `["paths"]["output_dir"]` — not in
63
+ `paths.py`, because users can override them.
64
+
65
+ ### Project root naming
66
+
67
+ The project root directory is always called `base_dir`. Never use `target_dir`,
68
+ `resolved_base`, `project_root`, or `sources_dir.parent`.
69
+
70
+ ### VaultPaths
71
+
72
+ `VaultPaths` (in `paths.py`) resolves concrete paths inside a vault:
73
+
74
+ ```python
75
+ from kompend.core.paths import VaultPaths
76
+
77
+ paths = VaultPaths(base_dir)
78
+ paths.cache_dir # base_dir/.kompend/cache
79
+ paths.compile_state_file # base_dir/.kompend/compile_state.json
80
+ paths.wiki_cache_file # base_dir/.kompend/last_wiki.json
81
+ paths.extract_dir # base_dir/.kompend/cache/extract (legacy — now extract cache layer in kompend.db)
82
+ paths.images_dir # base_dir/.kompend/cache/images
83
+ ```
84
+
85
+ | Context | Pattern |
86
+ |---------|---------|
87
+ | Module has `config: PipelineConfig` | `config.paths.cache_dir` |
88
+ | Module has `base_dir: Path` | `VaultPaths(base_dir).cache_dir` |
89
+ | Module has `output_dir: Path` | `VaultPaths(output_dir.parent).cache_dir` |
90
+ | Test with `tmp_path` | `VaultPaths(tmp_path).cache_dir` |
91
+
92
+ ### Test conventions
93
+
94
+ - All tests use `pytest` and `tmp_path` for filesystem operations.
95
+ - Unit tests must mock external dependencies (LLM, network, filesystem).
96
+ - Integration tests calling LLM APIs must use `@pytest.mark.skipif` checking
97
+ for API key availability.
98
+ - Test files follow `test_<module>.py` naming.
@@ -0,0 +1,95 @@
1
+ # AGENTS.md — History
2
+
3
+ Past design decisions, known issues, and "why we banned X." Optional background
4
+ reading; not required for day-to-day work.
5
+
6
+ ## General History
7
+
8
+ ### Pattern: Design Decision Log
9
+
10
+ Record significant decisions that shaped the codebase. Each entry explains the
11
+ context, the decision, and where it landed. This prevents future contributors
12
+ from re-litigating settled questions.
13
+
14
+ ### Rules
15
+
16
+ - **Newest first**, **one entry per decision**, 2–6 lines: context, decision,
17
+ commit. Detail belongs in `.agents/history/` — link it.
18
+ - **Budgeted like every `.agents/` file (≤120 lines).** Over budget → archive the
19
+ oldest entries to `.agents/history/`, leaving a pointer line.
20
+ - Move resolved entries to a "Resolved" subsection rather than deleting them.
21
+
22
+ ### Extension
23
+
24
+ | Who | When | What |
25
+ |-----|------|------|
26
+ | Any contributor | Making a notable design decision | Add entry at top |
27
+ | Project maintainer | Resolving a known violation | Move to Resolved subsection |
28
+ | Project maintainer | Deprecating a tool/pattern | Add rationale entry |
29
+
30
+ ---
31
+
32
+ ## Project-specific History — kompend
33
+
34
+ ### Archived plans — full detail in `.agents/history/`
35
+
36
+ | Archived | Slug | What landed |
37
+ | -------- | ---- | ----------- |
38
+ | 2026-09-16 | `context-window-provider-overrides` | `[providers.<name>].context_window` now beats auto-discovery (step 1 of `discover_context_window`); `kompend doctor` stops reporting override-only blocks of *known* providers as `missing base_url` while still erroring on unknown ids |
39
+ | 2026-09-24 | `kompend-0iv2-audit` | Read-only audit resolving a tracker-vs-code contradiction from the code; the reusable part is the method — dynamic-access sweep plus `git log -S "<Class>"` |
40
+ | 2026-09-24 | `kompend-storage-migration` | `.kompend/` consolidated into one SQLite file (`core/store/`); clean cut, no migration code — `61147c5f`, `f6aee4c0`, `8aaf2eca` |
41
+ | 2026-08-22 | `markdown-only-vault` | The wiki is represented by its generated markdown alone; `.kompend/` is purely derived — `5d493119`, `51ea1111` |
42
+ | 2026-08-16 | `source-export-md`, `category-extraction`, `rumdl-format-wiring` | `kompend sources export` from the parse cache; configurable extraction categories; rumdl wiring for every markdown writer |
43
+ | 2026-08-15 | `env-any-refactor`, `rlm-integration` | Typed config access replacing `Any`; the optional RLM code-exploration capability |
44
+ | 2026-08-14 | `migration-plan`, `refactoring-plan` | `summarization-pydantic-ai` context management (`edb4d49`); super-module splits into `stages/`, `engine/`, `tools/`, `flows/`, `pages/` |
45
+
46
+ ### Why text-in-code is banned
47
+
48
+ Prompts embedded in Python were undiscoverable, unversionable, and invisible to
49
+ non-developers. All prompt text now lives in Jinja2 templates or pack TOML. The
50
+ remaining legacy violations are tracked in beads — `bd list`, not a table here.
51
+
52
+ ### Why litellm was removed
53
+
54
+ `c8055c0`. After moving to pydantic-ai's native `infer_model()` plus the
55
+ models.dev catalog, litellm was 40+ transitive dependencies and added latency
56
+ around a unified `build_model()` path. Removed.
57
+
58
+ ### Why heavy imports are lazy-loaded (SPEC-0001)
59
+
60
+ `kompend --help` took ~80s because `register_all_commands()` imported every command
61
+ module, each transitively pulling docling/torch/pydantic-ai/MCP. `lazy.attach()`
62
+ in five package `__init__.py` files, plus the `get_backend()` factory for
63
+ function-body-only classes, took it to 11s (−86%). No `_LAZY` dicts, no
64
+ `__getattr__` fallbacks.
65
+
66
+ ### Why `compile.embedding.dim` was removed
67
+
68
+ The `dim = 384` fallback shaped only the empty-text dedup vector while non-empty
69
+ fingerprints used `provider.embed()`'s real dimension, so a mismatch crashed
70
+ `EmbeddingMatcher.score(..., strict=True)` — and `make_provider()` ignored the
71
+ hint anyway. Both zvec stores had the same literal; all are gone and dim always
72
+ resolves from `provider.dim`, lazily probed. Stores rebuild when the stored
73
+ dimension differs from the current model's.
74
+
75
+ ### Why `_ENV_LIST_VARS` is schema-derived
76
+
77
+ The hand-listed `KOMP_*` names drifted from the schema (splitting a `str` field
78
+ into a list, listing a dead var). It now derives from list-typed config-map
79
+ fields. Separately, `KOMP_CHARS_PER_TOKEN` was a dead env var — the real alias is
80
+ `KOMP_LLM_DEFAULT_CHARS_PER_TOKEN` and the value already flows via
81
+ `default_chars_per_token`.
82
+
83
+ ### Lint remediation collapsed to page generation (2026-08-14)
84
+
85
+ Three overlapping tiers became one: LLM-generate missing concept pages from
86
+ cached extractions. Image-embed fixing moved into `run --fix` as the
87
+ `image-embed` structural rule; recommendations live only in `kompend lint gaps`;
88
+ `RemediationAction.tier` was removed. Same change added the `rumdl` structural
89
+ rule (`rumdl check` JSON over the vault's markdown, sources never touched, files
90
+ passed explicitly to bypass rumdl's ignore filtering).
91
+
92
+ ### Release versioning
93
+
94
+ Calver `YYYY.M.D` / `YYYY.M.D.N` — no zero-padding, no `v` prefix. See
95
+ `.forgejo/workflows/release.yml`.
@@ -0,0 +1,67 @@
1
+ # AGENTS.md — Maintenance
2
+
3
+ How to keep `.agents/` files current.
4
+
5
+ ## General Maintenance
6
+
7
+ ### Process
8
+
9
+ 1. When a rule changes, update the file that owns it — never another file.
10
+ 2. When adding a new `.agents/` file, add it to the `.agents/ index` table
11
+ in root `AGENTS.md`.
12
+ 3. After any `.agents/` change, check the AGENTS.md index for stale entries.
13
+
14
+ ### Principles
15
+
16
+ - **Single source of truth.** Each rule lives in exactly one file.
17
+ Cross-reference with a one-liner, never duplicate.
18
+ - **AGENTS.md is an index.** It points to `.agents/` files; it does not contain
19
+ the rules themselves.
20
+ - **No tree figures.** ASCII directory trees rot immediately. Regenerate on
21
+ demand: `rg --files | tree-cli --fromfile`.
22
+
23
+ ### Extension
24
+
25
+ | Who | When | What |
26
+ |-----|------|------|
27
+ | Project maintainer | Adding a new `.agents/` file | Add to AGENTS.md index |
28
+ | Project maintainer | Renaming a `.agents/` file | Update AGENTS.md + cross-references |
29
+ | Any contributor | Finding stale references | Fix or report |
30
+
31
+ ---
32
+
33
+ ## Project-specific Maintenance — kompend
34
+
35
+ ### File update triggers
36
+
37
+ | File | Update when |
38
+ |------|-------------|
39
+ | `POLICIES.md` | Adding/changing priorities, boundaries, DOX authoring, response format |
40
+ | `CODE.md` | Adding/changing a code antipattern, boundary, or the error-handling policy |
41
+ | `FILES.md` | Renaming/adding path constants in `paths.py` |
42
+ | `CHECKS.md` | Adding/changing verification commands or checklist items |
43
+ | `HISTORY.md` | Resolving a known violation or making a notable design decision |
44
+ | `ONBOARDING.md` | Project structure or entry points change |
45
+ | `plans/` | New feature implementation starts |
46
+ | `history/` | HISTORY.md overflow or completed plans archived |
47
+
48
+ ### Plan naming and dating
49
+
50
+ - Active plans in `plans/` keep their working name (no date prefix) but must
51
+ carry date info in the document (e.g. a `Created: YYYY-MM-DD` line under
52
+ the title; update a `Status:` line as work progresses).
53
+ - On archiving into `history/`, rename to `YYYY-MM-DD-<plan-slug>.md` where
54
+ the date is the **completion date** (e.g. `2026-08-14-migration-plan.md`).
55
+ Update any references to the old filename (HISTORY.md entries, links).
56
+
57
+ ### Cross-reference map
58
+
59
+ | `.agents/` file | Referenced from |
60
+ |-----------------|-----------------|
61
+ | `POLICIES.md` | Root `AGENTS.md`, all subtree `AGENTS.md` `on entry` headers |
62
+ | `CODE.md` | Root `AGENTS.md`, subtree `AGENTS.md` `on entry` headers, `tests/AGENTS.md` |
63
+ | `FILES.md` | Root `AGENTS.md`, all subtree `AGENTS.md` `on entry` headers |
64
+ | `CHECKS.md` | Root `AGENTS.md`, all subtree `AGENTS.md` `on entry` headers |
65
+ | `HISTORY.md` | `src/kompend/AGENTS.md` (text-in-code violations pointer) |
66
+ | `ONBOARDING.md` | Root `AGENTS.md` (First time? line) |
67
+ | `MAINTENANCE.md` | Root `AGENTS.md` (.agents/ index) |
@@ -0,0 +1,101 @@
1
+ # AGENTS.md — Onboarding
2
+
3
+ First 5 minutes to get oriented.
4
+
5
+ ## General Onboarding
6
+
7
+ This file follows a reusable template. Every project should cover:
8
+
9
+ 1. **What to read first** — the AGENTS.md chain: read root, then subtree
10
+ files for directories you'll touch.
11
+ 2. **Key entry points** — 5-10 files that give the fastest orientation.
12
+ 3. **Project structure** — one-line purpose per top-level directory.
13
+ 4. **Essential commands** — build, test, lint, typecheck with time estimates.
14
+ 5. **Key conventions** — the 5-8 rules you'll break most often if you don't
15
+ know them.
16
+ 6. **Where to dig deeper** — documentation index, issue tracker, child DOX docs.
17
+
18
+ ### Extension
19
+
20
+ | Who | When | What |
21
+ |-----|------|------|
22
+ | Project maintainer | After major code reorganization | Sections 2-3 |
23
+ | Project maintainer | When build/test tooling changes | Section 4 |
24
+ | Project maintainer | When key conventions change | Section 5 |
25
+
26
+ **Never duplicate content.** Reference the source file. This document is a map,
27
+ not a rulebook — rules live in `POLICIES.md`, path constants in `FILES.md`,
28
+ verification in `CHECKS.md`.
29
+
30
+ ---
31
+
32
+ ## Project-specific Onboarding — kompend
33
+
34
+ ### 1. What is kompend?
35
+
36
+ kompend = Knowledge Organizer for eXtended documents. A parser-agnostic,
37
+ structure-preserving, LLM-aware knowledge base compiler. 5-tier pipeline:
38
+ Preprocessing → Chunking → Resolution → Compilation → Output.
39
+
40
+ Every LLM call routes through PydanticAI agents in `src/kompend/agents/`.
41
+
42
+ ### 2. Key entry points (read these first)
43
+
44
+ | File | Why |
45
+ |------|-----|
46
+ | `AGENTS.md` | Root rail — index to all `.agents/` files |
47
+ | `.agents/POLICIES.md` | Priorities, boundaries, DOX authoring, response format |
48
+ | `.agents/CODE.md` | Code antipatterns, boundaries, error handling |
49
+ | `.agents/FILES.md` | Path constants, VaultPaths, naming |
50
+ | `src/kompend/AGENTS.md` | Python-specific: text-in-code, antipatterns |
51
+ | `docs/index.md` | User-facing documentation index |
52
+ | `kompend.toml.example` | All config keys with comments |
53
+ | `src/kompend/core/paths.py` | Single source of truth for artifact paths |
54
+ | `src/kompend/core/config/generate.py` | `DEFAULTS` dict — all config defaults |
55
+
56
+ ### 3. Project structure
57
+
58
+ | Path | Purpose |
59
+ |------|---------|
60
+ | `src/kompend/core/` | Foundation: config, models, paths, pipeline, cache, templates |
61
+ | `src/kompend/agents/` | PydanticAI agents for every LLM call |
62
+ | `src/kompend/llm/` | LLM client, provider registration, failover |
63
+ | `src/kompend/cli/` | Typer-based CLI (thin shell over core) |
64
+ | `src/kompend/preprocessing/` | Parsers (parsecraft adapter, marker, mineru, web) |
65
+ | `src/kompend/compilation/` | Tier 4: extraction, generation, WiCER, output |
66
+ | `src/kompend/search/` | Hybrid search: FTS + vector + RRF |
67
+ | `src/kompend/memory/` | Memory lifecycle: working → episodic → semantic → procedural |
68
+ | `tests/` | Unit, integration, benchmarks |
69
+ | `docs/` | MkDocs user-facing documentation |
70
+ | `.agents/skills/` | Installed agent skills |
71
+
72
+ ### 4. Essential commands
73
+
74
+ ```bash
75
+ uv run pytest tests/unit -x --timeout=30 # unit tests
76
+ uv run pytest tests/unit -q --no-cov --tb=line # unit tests (compact)
77
+ uv run pytest tests/integration -x --timeout=120 # integration tests
78
+ uv run pytest tests/benchmarks/ -q --no-cov # benchmarks
79
+ ruff check # lint
80
+ ty check src/kompend # type check (not mypy)
81
+ uv run python scripts/checks/check_field_consistency.py # bare-string contract keys
82
+ uv run python scripts/checks/check_antipatterns.py # banned-noqa, magic crops, global
83
+ uv run mkdocs build --strict # doc build check
84
+ ```
85
+
86
+ ### 5. Key conventions
87
+
88
+ - **`uv run`** for everything — never `python`, `python3`, `pip`
89
+ - **`base_dir`** — canonical name for the project root directory
90
+ - **`paths.py`** — all artifact names live here; never hard-code `.kompend`, `cache`, etc.
91
+ - **`VaultPaths`** — resolve concrete paths with `VaultPaths(base_dir)`
92
+ - **StrEnum** — roles, tasks, compilers, tiers must use enum members, not bare strings
93
+ - **No tree figures** in AGENTS.md — regenerate: `rg --files | tree-cli --fromfile`
94
+ - **No cross-level duplication** in DOX chain — reference, never copy
95
+
96
+ ### 6. Where to dig deeper
97
+
98
+ - Each `src/kompend/` subdirectory has its own `AGENTS.md` (DOX child doc)
99
+ - `docs/index.md` — full documentation index
100
+ - `.agents/HISTORY.md` — past design decisions, known issues
101
+ - `bd` (beads) — issue tracking: `bd list`, `bd show <id>`
@@ -0,0 +1,120 @@
1
+ # AGENTS.md — POLICIES
2
+
3
+ Always applicable. Priorities, boundaries, DOX authoring, response format.
4
+
5
+ ## Priorities
6
+
7
+ Correctness · Evidence · Safety · Minimal changes · Consistency · Performance
8
+
9
+ ## Boundaries
10
+
11
+ - NEVER fabricate paths, commits, APIs, config keys, env vars, test results, or
12
+ benchmark numbers. If you don't know, say so.
13
+ - NEVER guess at command names, flags, or paths — read source or run `--help`.
14
+ - NEVER add secrets, API keys, or tokens to files; use env vars.
15
+ - NEVER run destructive commands (`rm -rf`, `git reset --hard`,
16
+ `git push --force`) without explicit confirmation.
17
+ - NEVER delete or move files without explicit instruction.
18
+ - NEVER modify `.gitignore`, `pyproject.toml`, `ruff.toml`, or CI config, and add
19
+ no new dependency, without explicit instruction.
20
+ - NEVER create temp files outside `tmp/` (gitignored) — never `_tmp_*.py` at the root.
21
+
22
+ ## Change constraints
23
+
24
+ - Minimal, surgical edits. Preserve existing style. No unrelated refactoring.
25
+ - When changing tests, update only directly affected tests.
26
+
27
+ ## Code quality
28
+
29
+ Universal defaults. kompend code policies — antipatterns, boundaries, error
30
+ handling — live in `CODE.md`; project-specific standards in child AGENTS.md.
31
+
32
+ - **SRP** — one reason to change per module/function. If a name needs "and",
33
+ split it. Remove dead branches, unreachable conditions, and unused params or
34
+ imports before finishing.
35
+ - **DRY** — check for an existing helper/constant before adding one; extract on
36
+ the _third_ occurrence (Rule of Three), not earlier.
37
+ - Prefer a little duplication over the wrong premature abstraction; add no new
38
+ code-quality tooling, patterns, or value-object rules by default.
39
+
40
+ ## Completion checklist
41
+
42
+ Change solves the stated problem · relevant validation ran (or gaps explicitly
43
+ stated, see `CHECKS.md`) · no unintended side effects · no secrets added
44
+
45
+ ## DOX authoring (keep AGENTS.md lean)
46
+
47
+ AGENTS.md and `.agents/` files share limited context. Bloat and duplication are
48
+ the failure mode — they waste context on every subtree entry and drift apart as
49
+ rules change.
50
+
51
+ ### Where a rule lives
52
+
53
+ Ask: **what is the highest (most general) tier that fully applies?** Put the rule
54
+ there and nowhere else.
55
+
56
+ - All code in the project → `.agents/POLICIES.md` (universal) or `CODE.md` (code
57
+ policies). This is the default; when unsure, here.
58
+ - Only inside one subtree (framework-specific template rules) → that subtree's
59
+ `AGENTS.md`.
60
+ - Only navigation → the parent's Child DOX Index, nothing else.
61
+
62
+ ### Reference, don't restate
63
+
64
+ A rule appears in **exactly one file**; every other file touching it uses a
65
+ **pointer line** — `<topic> — see <file>`. Never copy the rule, its rationale, or
66
+ its example into a second file.
67
+
68
+ ### Rule first, rationale second, never third
69
+
70
+ A DOX line is the rule. If a rationale is costly to rediscover, add one short
71
+ clause. Never multi-paragraph explanations or more than one ❌/✅ pair per rule —
72
+ those belong in a skill or a `docs/` page, linked once.
73
+
74
+ ### Content rules
75
+
76
+ - **No tree views** — generate on demand: `rg --files | tree-cli --fromfile`.
77
+ - **No history** — git log has it; record only decisions costly to rediscover,
78
+ in `HISTORY.md` with commit refs.
79
+ - **No TODO lists or trackers** — use beads (`bd`).
80
+ - **Long-form explanation** belongs in `docs/` or a skill: link it, don't inline.
81
+
82
+ ### Size budget
83
+
84
+ - `.agents/` files: ≤ **120 lines** (always-injected context).
85
+ - Subtree `AGENTS.md`: ≤ **250 lines** (loaded cumulatively with every parent on
86
+ entry — deep-path cost adds up).
87
+
88
+ Over budget means the doc restates instead of pointing, or hoards rationale. Cut
89
+ first; split the subtree only as a last resort.
90
+
91
+ ## Response format
92
+
93
+ Concise and specific. No filler, intros, or restated requirements. Answer direct
94
+ questions directly. For review/debugging/analysis: findings with references,
95
+ conclusion, approach, and caveats.
96
+
97
+ ## Project-specific Policies — kompend
98
+
99
+ ### Implementation plans
100
+
101
+ - Plans go in `.agents/plans/<feature>/` — gitignored, never committed. Mutable
102
+ working artifacts, not shipped docs. Prefix filenames with phase numbers so
103
+ file order matches implementation order; carry `Created:` and `Status:` lines.
104
+ Shipped docs (user-facing guides, API references) go in `docs/` and ARE
105
+ committed.
106
+
107
+ ### Documentation and archiving
108
+
109
+ - `HISTORY.md` over budget → archive older entries to `.agents/history/` with a
110
+ one-line pointer left behind. `.agents/history/` IS version-controlled; it
111
+ holds the durable decision records.
112
+ - Completed plans move to `.agents/history/` as `YYYY-MM-DD-<slug>.md`
113
+ (completion date), with references updated. See `MAINTENANCE.md`.
114
+
115
+ ### User Preferences
116
+
117
+ - Concise, direct answers with no filler or intros
118
+ - Use `uv run` for all Python execution, never direct `python` calls
119
+ - English-only for code, docs, and commits; conventional commits (`feat:`, `fix:`,
120
+ `chore:`, `docs:`)