ltcai 11.1.0 → 11.4.0

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 (289) hide show
  1. package/README.md +47 -54
  2. package/docs/CHANGELOG.md +94 -0
  3. package/docs/COMMUNITY_AND_PLUGINS.md +1 -1
  4. package/docs/DEVELOPMENT.md +1 -1
  5. package/docs/FEATURE_AUDIT_v11.2.0.md +393 -0
  6. package/docs/LAYOUT_REBUILD_SPEC.md +9 -1
  7. package/docs/MULTI_AGENT_RUNTIME.md +1 -1
  8. package/docs/ONBOARDING.md +1 -1
  9. package/docs/OPERATIONS.md +6 -2
  10. package/docs/PERMISSION_MODE.md +1 -1
  11. package/docs/TRUST_MODEL.md +1 -1
  12. package/docs/WHY_LATTICE.md +1 -1
  13. package/docs/architecture.md +6 -2
  14. package/docs/kg-schema.md +2 -2
  15. package/docs/v11.3.0_PLAN.md +202 -0
  16. package/docs/v11.4.0_RUST_FOUNDATION_PLAN.md +176 -0
  17. package/lattice_brain/__init__.py +1 -1
  18. package/lattice_brain/gates.py +125 -0
  19. package/lattice_brain/graph/_kg_common/__init__.py +287 -0
  20. package/lattice_brain/graph/_kg_common/extraction.py +516 -0
  21. package/lattice_brain/graph/_kg_common/relations.py +161 -0
  22. package/lattice_brain/graph/_kg_common/text.py +479 -0
  23. package/lattice_brain/graph/discovery_index/__init__.py +35 -0
  24. package/lattice_brain/graph/discovery_index/cleanup.py +182 -0
  25. package/lattice_brain/graph/discovery_index/extract.py +137 -0
  26. package/lattice_brain/graph/discovery_index/scan.py +411 -0
  27. package/lattice_brain/graph/discovery_index/upsert.py +495 -0
  28. package/lattice_brain/graph/fusion.py +35 -4
  29. package/lattice_brain/graph/projection/__init__.py +42 -0
  30. package/lattice_brain/graph/projection/curation.py +500 -0
  31. package/lattice_brain/graph/{projection.py → projection/v2_schema.py} +81 -485
  32. package/lattice_brain/graph/retrieval/__init__.py +54 -0
  33. package/lattice_brain/graph/retrieval/context.py +197 -0
  34. package/lattice_brain/graph/retrieval/graph_view.py +319 -0
  35. package/lattice_brain/graph/retrieval/hybrid.py +488 -0
  36. package/lattice_brain/graph/retrieval/maintenance.py +121 -0
  37. package/lattice_brain/graph/retrieval/signals.py +95 -0
  38. package/lattice_brain/graph/retrieval_vector/__init__.py +42 -0
  39. package/lattice_brain/graph/retrieval_vector/fingerprint.py +97 -0
  40. package/lattice_brain/graph/retrieval_vector/indexing.py +347 -0
  41. package/lattice_brain/graph/retrieval_vector/search.py +560 -0
  42. package/lattice_brain/graph/retrieval_vector/status.py +374 -0
  43. package/lattice_brain/graph/schema.py +9 -0
  44. package/lattice_brain/graph/store.py +9 -0
  45. package/lattice_brain/graph/vector_index/selector.py +32 -2
  46. package/lattice_brain/ingestion/__init__.py +130 -0
  47. package/lattice_brain/ingestion/_contract.py +90 -0
  48. package/lattice_brain/ingestion/constants.py +127 -0
  49. package/lattice_brain/ingestion/folder_scan.py +57 -0
  50. package/lattice_brain/ingestion/folders.py +258 -0
  51. package/lattice_brain/ingestion/hashing.py +26 -0
  52. package/lattice_brain/ingestion/jobs_api.py +107 -0
  53. package/lattice_brain/ingestion/models.py +80 -0
  54. package/lattice_brain/ingestion/pipeline.py +486 -0
  55. package/lattice_brain/ingestion/quality.py +209 -0
  56. package/lattice_brain/ingestion/routing.py +295 -0
  57. package/lattice_brain/multimodal/__init__.py +164 -0
  58. package/lattice_brain/multimodal/audio.py +77 -0
  59. package/lattice_brain/multimodal/common.py +118 -0
  60. package/lattice_brain/{multimodal.py → multimodal/images.py} +22 -262
  61. package/lattice_brain/multimodal/ports.py +169 -0
  62. package/lattice_brain/multimodal/video.py +410 -0
  63. package/lattice_brain/portability/__init__.py +90 -0
  64. package/lattice_brain/portability/_contract.py +42 -0
  65. package/lattice_brain/portability/backups.py +338 -0
  66. package/lattice_brain/portability/bundles.py +136 -0
  67. package/lattice_brain/portability/constants.py +93 -0
  68. package/lattice_brain/portability/fsops.py +138 -0
  69. package/lattice_brain/portability/service.py +41 -0
  70. package/lattice_brain/portability/sharing.py +714 -0
  71. package/lattice_brain/runtime/__init__.py +1 -1
  72. package/lattice_brain/runtime/multi_agent.py +1 -1
  73. package/lattice_brain/sealed_box.py +244 -0
  74. package/lattice_brain/synthesis.py +24 -1
  75. package/latticeai/__init__.py +1 -1
  76. package/latticeai/api/brain_intelligence.py +4 -0
  77. package/latticeai/api/chat.py +11 -0
  78. package/latticeai/api/chat_helpers.py +16 -3
  79. package/latticeai/api/chat_hybrid.py +32 -1
  80. package/latticeai/api/chronicle.py +63 -0
  81. package/latticeai/api/features.py +70 -0
  82. package/latticeai/api/local_files.py +102 -0
  83. package/latticeai/api/portability.py +39 -4
  84. package/latticeai/api/review_queue.py +126 -0
  85. package/latticeai/api/search.py +16 -2
  86. package/latticeai/core/agent/__init__.py +93 -0
  87. package/latticeai/core/agent/_contract.py +79 -0
  88. package/latticeai/core/agent/context.py +57 -0
  89. package/latticeai/core/agent/deps.py +125 -0
  90. package/latticeai/core/agent/execution.py +622 -0
  91. package/latticeai/core/agent/planning.py +145 -0
  92. package/latticeai/core/agent/recovery.py +157 -0
  93. package/latticeai/core/agent/runtime.py +210 -0
  94. package/latticeai/core/agent/verification.py +231 -0
  95. package/latticeai/core/config.py +4 -1
  96. package/latticeai/core/context_builder.py +6 -3
  97. package/latticeai/core/embedding_providers/__init__.py +151 -0
  98. package/latticeai/core/embedding_providers/base.py +199 -0
  99. package/latticeai/core/embedding_providers/captions.py +162 -0
  100. package/latticeai/core/embedding_providers/profiles.py +126 -0
  101. package/latticeai/core/embedding_providers/text.py +350 -0
  102. package/latticeai/core/embedding_providers/vision.py +352 -0
  103. package/latticeai/core/file_generation/__init__.py +115 -0
  104. package/latticeai/core/file_generation/bundles.py +76 -0
  105. package/latticeai/core/file_generation/extraction.py +154 -0
  106. package/latticeai/core/file_generation/inference.py +235 -0
  107. package/latticeai/core/file_generation/orchestration.py +152 -0
  108. package/latticeai/core/file_generation/prompting.py +117 -0
  109. package/latticeai/core/file_generation/repair.py +114 -0
  110. package/latticeai/core/file_generation/sanitize.py +61 -0
  111. package/latticeai/core/file_generation/validation.py +201 -0
  112. package/latticeai/core/legacy_compatibility.py +1 -1
  113. package/latticeai/core/marketplace.py +1 -1
  114. package/latticeai/core/messages.py +152 -0
  115. package/latticeai/core/model_compat.py +73 -2
  116. package/latticeai/core/workspace_os_constants.py +1 -1
  117. package/latticeai/integrations/telegram_bot/__init__.py +123 -0
  118. package/latticeai/integrations/telegram_bot/__main__.py +17 -0
  119. package/latticeai/integrations/telegram_bot/config.py +86 -0
  120. package/latticeai/integrations/telegram_bot/dispatch.py +311 -0
  121. package/latticeai/integrations/telegram_bot/flows.py +478 -0
  122. package/latticeai/integrations/telegram_bot/helpers.py +322 -0
  123. package/latticeai/integrations/telegram_bot/screens.py +394 -0
  124. package/latticeai/models/model_providers.py +12 -4
  125. package/latticeai/models/router/__init__.py +88 -0
  126. package/latticeai/models/router/_contract.py +66 -0
  127. package/latticeai/models/router/branding.py +56 -0
  128. package/latticeai/models/router/catalog.py +69 -0
  129. package/latticeai/models/router/documents.py +199 -0
  130. package/latticeai/models/router/errors.py +37 -0
  131. package/latticeai/models/router/generation.py +258 -0
  132. package/latticeai/models/router/loading.py +291 -0
  133. package/latticeai/models/router/local_models.py +85 -0
  134. package/latticeai/models/router/registry.py +147 -0
  135. package/latticeai/runtime/build_phases/__init__.py +82 -0
  136. package/latticeai/runtime/build_phases/features.py +407 -0
  137. package/latticeai/runtime/build_phases/foundation.py +555 -0
  138. package/latticeai/runtime/build_phases/web.py +492 -0
  139. package/latticeai/runtime/chat_wiring.py +4 -0
  140. package/latticeai/runtime/feature_toggle_wiring.py +163 -0
  141. package/latticeai/runtime/router_registration.py +11 -0
  142. package/latticeai/runtime/runtime_context.py +1 -0
  143. package/latticeai/services/app_context.py +8 -0
  144. package/latticeai/services/architecture_readiness.py +48 -19
  145. package/latticeai/services/automation_intelligence.py +22 -2
  146. package/latticeai/services/brain_intelligence/__init__.py +58 -0
  147. package/latticeai/services/brain_intelligence/_contract.py +71 -0
  148. package/latticeai/services/brain_intelligence/consistency.py +193 -0
  149. package/latticeai/services/brain_intelligence/constants.py +47 -0
  150. package/latticeai/services/brain_intelligence/digest.py +258 -0
  151. package/latticeai/services/brain_intelligence/health.py +331 -0
  152. package/latticeai/services/brain_intelligence/proposals.py +264 -0
  153. package/latticeai/services/brain_intelligence/sampling.py +84 -0
  154. package/latticeai/services/brain_intelligence/service.py +48 -0
  155. package/latticeai/services/chronicle.py +557 -0
  156. package/latticeai/services/command_center.py +10 -4
  157. package/latticeai/services/feature_toggles.py +502 -0
  158. package/latticeai/services/folder_watch.py +122 -1
  159. package/latticeai/services/hybrid_chat.py +56 -5
  160. package/latticeai/services/interop_bridges.py +978 -0
  161. package/latticeai/services/memory_service/__init__.py +52 -0
  162. package/latticeai/services/memory_service/_contract.py +100 -0
  163. package/latticeai/services/memory_service/brief.py +431 -0
  164. package/latticeai/services/memory_service/constants.py +57 -0
  165. package/latticeai/services/memory_service/maintenance.py +138 -0
  166. package/latticeai/services/memory_service/manager.py +186 -0
  167. package/latticeai/services/memory_service/proof.py +136 -0
  168. package/latticeai/services/memory_service/recall.py +225 -0
  169. package/latticeai/services/memory_service/service.py +48 -0
  170. package/latticeai/services/memory_service/stores.py +110 -0
  171. package/latticeai/services/model_capability_registry.py +434 -261
  172. package/latticeai/services/model_catalog.py +95 -61
  173. package/latticeai/services/model_recommendation.py +18 -11
  174. package/latticeai/services/model_runtime/__init__.py +322 -0
  175. package/latticeai/services/model_runtime/cloud.py +87 -0
  176. package/latticeai/services/model_runtime/download.py +282 -0
  177. package/latticeai/services/model_runtime/engines.py +341 -0
  178. package/latticeai/services/model_runtime/loading.py +178 -0
  179. package/latticeai/services/model_runtime/service.py +129 -0
  180. package/latticeai/services/model_runtime/state.py +131 -0
  181. package/latticeai/services/model_runtime/status.py +255 -0
  182. package/latticeai/services/multimodal_ports.py +26 -1
  183. package/latticeai/services/obsidian_bridge.py +16 -25
  184. package/latticeai/services/product_readiness.py +15 -7
  185. package/latticeai/services/search_service.py +149 -2
  186. package/latticeai/services/tool_dispatch.py +4 -0
  187. package/latticeai/setup/auto_setup.py +27 -30
  188. package/latticeai/setup/wizard/__init__.py +126 -0
  189. package/latticeai/setup/wizard/catalog.py +172 -0
  190. package/latticeai/setup/wizard/detect.py +323 -0
  191. package/latticeai/setup/wizard/install.py +348 -0
  192. package/latticeai/setup/wizard/paths.py +168 -0
  193. package/latticeai/setup/wizard/plans.py +74 -0
  194. package/latticeai/setup/wizard/recommend.py +320 -0
  195. package/package.json +6 -2
  196. package/scripts/bump_version.py +14 -0
  197. package/scripts/capture_release_evidence.mjs +33 -21
  198. package/scripts/check_current_release_docs.mjs +1 -1
  199. package/scripts/check_i18n_namespace_coverage.mjs +41 -4
  200. package/scripts/check_max_file_lines.mjs +102 -0
  201. package/scripts/check_release_evidence_bound.mjs +30 -15
  202. package/scripts/check_screenshot_pixel_delta.py +34 -4
  203. package/scripts/check_server_i18n.mjs +2 -0
  204. package/scripts/generate_rust_parity_fixtures.py +562 -0
  205. package/scripts/lib/mock_server_fingerprint.mjs +94 -0
  206. package/scripts/release_screen_claims.json +44 -2
  207. package/scripts/verify_hf_model_registry.py +253 -218
  208. package/src-tauri/Cargo.lock +361 -3
  209. package/src-tauri/Cargo.toml +6 -1
  210. package/src-tauri/src/backend.rs +349 -0
  211. package/src-tauri/src/folder.rs +33 -0
  212. package/src-tauri/src/main.rs +97 -399
  213. package/src-tauri/tauri.conf.json +1 -1
  214. package/static/app/asset-manifest.json +41 -37
  215. package/static/app/assets/Act-yYpYnn0v.js +1 -0
  216. package/static/app/assets/AdminConsole-DL3Cr5pL.js +1 -0
  217. package/static/app/assets/{Brain-CzCsI1mi.js → Brain-C1HBN0Wf.js} +2 -2
  218. package/static/app/assets/BrainHome-DoXRhUUC.js +2 -0
  219. package/static/app/assets/BrainSignals-6yR6ir5t.js +1 -0
  220. package/static/app/assets/Capture-CFIRsFNE.js +1 -0
  221. package/static/app/assets/Chronicle-BZbEgiwN.js +1 -0
  222. package/static/app/assets/CommandPalette-D2pMxC2I.js +1 -0
  223. package/static/app/assets/Library-DwO3yZST.js +1 -0
  224. package/static/app/assets/{LivingBrain-BXMWIK_2.js → LivingBrain-Jn1GK0-S.js} +1 -1
  225. package/static/app/assets/ProductFlow-B-w1R4Oo.js +1 -0
  226. package/static/app/assets/ReviewCard-6B27X8Vg.js +3 -0
  227. package/static/app/assets/System-DW8F-2xL.js +1 -0
  228. package/static/app/assets/arrow-left-DXvKg9U6.js +1 -0
  229. package/static/app/assets/{bot-4BvN07ux.js → bot-IM_E_Y12.js} +1 -1
  230. package/static/app/assets/brain-Ci1CkWjM.js +1 -0
  231. package/static/app/assets/{button-CDjtnAoU.js → button-COwyqfHM.js} +1 -1
  232. package/static/app/assets/circle-check-DfInj-qD.js +1 -0
  233. package/static/app/assets/{circle-pause-D_RMn7tp.js → circle-pause-DEM4A1Y5.js} +1 -1
  234. package/static/app/assets/{circle-play-B5OpB8ae.js → circle-play-C9djDuLd.js} +1 -1
  235. package/static/app/assets/{cpu-BIlWInHf.js → cpu-DFdo1gw-.js} +1 -1
  236. package/static/app/assets/{download-BtjXfL3z.js → download-SnJL6oqk.js} +1 -1
  237. package/static/app/assets/{folder-open-DefMpxI2.js → folder-open-CqZeDkjE.js} +1 -1
  238. package/static/app/assets/{hard-drive-BQ8NZVkw.js → hard-drive-j1jJXYYf.js} +1 -1
  239. package/static/app/assets/{index-vtEfYvQY.css → index-BLPb5lmE.css} +1 -1
  240. package/static/app/assets/index-_u5iUHDr.js +10 -0
  241. package/static/app/assets/input-B0lPdRQZ.js +1 -0
  242. package/static/app/assets/link-2-CoFbooHS.js +1 -0
  243. package/static/app/assets/{permissionCopy-BqZ5tsgL.js → permissionCopy-BsyLxtao.js} +1 -1
  244. package/static/app/assets/primitives-DEbN-d6p.js +1 -0
  245. package/static/app/assets/search-BybIWPNd.js +1 -0
  246. package/static/app/assets/{share-2-D5zg_0fY.js → share-2-CVtZ_ewX.js} +1 -1
  247. package/static/app/assets/{shield-alert-B5pZzkUb.js → shield-alert-CBi2GNWM.js} +1 -1
  248. package/static/app/assets/{textarea-nEVIweKY.js → textarea-DNMpB5ih.js} +1 -1
  249. package/static/app/assets/{useFocusTrap-Cm99AHlz.js → useFocusTrap-C83t3GXF.js} +1 -1
  250. package/static/app/assets/useMutation-DtbJDoyz.js +1 -0
  251. package/static/app/assets/{useQuery-Dm__N6bL.js → useQuery-Dcp1OChy.js} +1 -1
  252. package/static/app/assets/utils-BlZr7Pd4.js +4 -0
  253. package/static/app/assets/workspace-jJY4RuAV.js +1 -0
  254. package/static/app/index.html +4 -4
  255. package/static/sw.js +1 -1
  256. package/lattice_brain/graph/_kg_common.py +0 -1331
  257. package/lattice_brain/graph/discovery_index.py +0 -1141
  258. package/lattice_brain/graph/retrieval.py +0 -1120
  259. package/lattice_brain/graph/retrieval_vector.py +0 -1293
  260. package/lattice_brain/ingestion.py +0 -1377
  261. package/lattice_brain/portability.py +0 -1210
  262. package/latticeai/core/agent.py +0 -1412
  263. package/latticeai/core/embedding_providers.py +0 -1196
  264. package/latticeai/core/file_generation.py +0 -1047
  265. package/latticeai/integrations/telegram_bot.py +0 -1390
  266. package/latticeai/models/router.py +0 -1007
  267. package/latticeai/runtime/build_phases.py +0 -1422
  268. package/latticeai/services/brain_intelligence.py +0 -967
  269. package/latticeai/services/memory_service.py +0 -1177
  270. package/latticeai/services/model_runtime.py +0 -1281
  271. package/latticeai/setup/wizard.py +0 -1277
  272. package/static/app/assets/Act-D0HWqtn0.js +0 -1
  273. package/static/app/assets/AdminConsole-D-QDW-A4.js +0 -1
  274. package/static/app/assets/BrainHome-Btns-_TA.js +0 -2
  275. package/static/app/assets/BrainSignals-2dHQNkns.js +0 -1
  276. package/static/app/assets/Capture-CT8v1StE.js +0 -1
  277. package/static/app/assets/CommandPalette-DoLXC2KH.js +0 -1
  278. package/static/app/assets/Library-DDoxFE5c.js +0 -1
  279. package/static/app/assets/ProductFlow-DOYf7JIs.js +0 -1
  280. package/static/app/assets/ReviewCard-COQsqidK.js +0 -3
  281. package/static/app/assets/System-BRllvYXd.js +0 -1
  282. package/static/app/assets/arrow-left-DnyMzss-.js +0 -1
  283. package/static/app/assets/brain-uMb_5hnO.js +0 -1
  284. package/static/app/assets/index-0AvoEBzJ.js +0 -10
  285. package/static/app/assets/input-B_5ZJ9oy.js +0 -1
  286. package/static/app/assets/primitives-CVwew78r.js +0 -1
  287. package/static/app/assets/search-DkhnOKZt.js +0 -1
  288. package/static/app/assets/utils-DcDMoZIe.js +0 -4
  289. package/static/app/assets/workspace-LtRRSKTf.js +0 -1
@@ -0,0 +1,287 @@
1
+ """
2
+ SQLite knowledge graph for Lattice AI workspace memory.
3
+
4
+ The graph keeps raw event JSON, normalized node metadata, and edges in one
5
+ portable database so it can later migrate to Neo4j/Postgres without changing
6
+ the ingestion contract.
7
+ """
8
+
9
+ # ruff: noqa: F401,F841
10
+
11
+ import asyncio
12
+ import hashlib
13
+ import json
14
+ import logging
15
+ import math
16
+ import os
17
+ import platform
18
+ import re
19
+ import shutil
20
+ import sqlite3
21
+ import time
22
+ import zipfile
23
+ from collections import Counter
24
+ from contextlib import contextmanager
25
+ from datetime import datetime
26
+ from pathlib import Path
27
+ from typing import Any, Dict, Iterable, Iterator, List, Optional, Tuple
28
+
29
+ try:
30
+ from ..schema import EdgeType, KGStoreV2, NodeType, _exec_script
31
+ except Exception: # pragma: no cover - v2 schema is optional at import time
32
+ KGStoreV2 = None # type: ignore[assignment,misc]
33
+ NodeType = None # type: ignore[assignment,misc]
34
+ EdgeType = None # type: ignore[assignment,misc]
35
+ _exec_script = None # type: ignore[assignment]
36
+
37
+ from ...embeddings import LocalEmbeddingModel
38
+ from ..json_utils import _json, _safe_loads
39
+ from ..runtime import get_llm_router, set_llm_router
40
+
41
+ # Default read source for the graph queries: v2 reconstruction views.
42
+ # Override with LATTICEAI_KG_READ_V2=0 to fall back to the legacy tables.
43
+ _READ_FROM_V2_DEFAULT = os.getenv("LATTICEAI_KG_READ_V2", "1") != "0"
44
+
45
+ # Static constants (projection/format versions, local-ingestion classification
46
+ # tables, OS exclusion lists) live in ._kg_constants; re-exported here so every
47
+ # existing ``from ._kg_common import <CONST>`` site is unaffected.
48
+ from ...quiet import quiet
49
+ from .._kg_constants import ( # noqa: E402
50
+ _KG_DB_FORMAT_KEY,
51
+ _KG_DB_FORMAT_VERSION,
52
+ _PROJECTION_VERSION,
53
+ _V2_WRITE_MASTER_KEY,
54
+ COMMON_EXCLUDED_DIRS,
55
+ COMMON_EXCLUDED_FILE_NAMES,
56
+ COMMON_EXCLUDED_FILE_SUFFIXES,
57
+ GRAPH_SCHEMA_VERSION,
58
+ LINUX_EXCLUDED_PREFIXES,
59
+ LOCAL_CODE_EXTENSIONS,
60
+ LOCAL_DOCUMENT_EXTENSIONS,
61
+ LOCAL_IMAGE_EXTENSIONS,
62
+ LOCAL_SIZE_LIMITS,
63
+ LOCAL_SLIDE_EXTENSIONS,
64
+ LOCAL_SPREADSHEET_EXTENSIONS,
65
+ LOCAL_SUPPORTED_EXTENSIONS,
66
+ LOCAL_TEXT_EXTENSIONS,
67
+ MACOS_EXCLUDED_PREFIXES,
68
+ SENSITIVE_PATH_KEYWORDS,
69
+ WINDOWS_EXCLUDED_NAMES,
70
+ )
71
+
72
+ # Pure fs/path/hash/classification helpers → ._kg_fsutil, re-exported so the
73
+ # static __all__ below forwards them to the graph mixins. Listed explicitly
74
+ # rather than star-imported: a star import here made every name in this
75
+ # module unverifiable to both ruff and mypy.
76
+ from .._kg_fsutil import ( # noqa: E402,F401
77
+ _current_os_type,
78
+ _drive_id_for_path,
79
+ _excluded_directory_reason,
80
+ _file_category,
81
+ _is_hidden_path,
82
+ _is_relative_to,
83
+ _node_type_for_category,
84
+ _now,
85
+ _parse_iso,
86
+ _parser_type_for_category,
87
+ _path_fingerprint,
88
+ _path_parts_lower,
89
+ _recency_score,
90
+ _root_warning,
91
+ _safe_iso_from_stat_mtime,
92
+ _sample_file,
93
+ _sensitive_file_reason,
94
+ _sha256_bytes,
95
+ _sha256_text,
96
+ _size_limit_for_category,
97
+ _slug,
98
+ )
99
+
100
+ # The logic this module used to hold inline lives in three cohesive submodules
101
+ # (v11.3.0 decomposition). Every name is re-exported below, so the twelve
102
+ # `from ._kg_common import *` consumers are unaffected — and `__all__` is still
103
+ # the single written-down star-import contract.
104
+ from .extraction import ( # noqa: E402
105
+ _CONCEPT_STOP,
106
+ _LLM_EXTRACT_CONCEPT_PROMPT,
107
+ _LLM_EXTRACT_TRIPLE_PROMPT,
108
+ ENABLE_LLM_EXTRACTION,
109
+ _extract_concepts,
110
+ _extract_concepts_rules,
111
+ _extract_triples,
112
+ _extract_triples_rules,
113
+ _llm_extract_concepts,
114
+ _llm_extract_triples,
115
+ _semantic_items,
116
+ _topic_candidates,
117
+ )
118
+ from .relations import ( # noqa: E402
119
+ _NOT_PERSON_WORDS,
120
+ COOCCURRENCE_CONCEPT_LIMIT,
121
+ COOCCURRENCE_EDGE_WEIGHT,
122
+ EDGE_VERB,
123
+ VERB_EDGE_WEIGHT,
124
+ _classify_node_type,
125
+ _infer_edge,
126
+ infer_edge_relation,
127
+ )
128
+ from .text import ( # noqa: E402
129
+ _CHUNK_STRATEGIES,
130
+ _CODE_BLANK_RUN_RE,
131
+ _CODE_BOUNDARY_LINE_RE,
132
+ _CODE_CHUNK_EXTENSIONS,
133
+ _MARKDOWN_CHUNK_EXTENSIONS,
134
+ _MARKDOWN_HEADING_RE,
135
+ _MARKDOWN_MIN_SECTION_CHARS,
136
+ _PROSE_CHUNK_EXTENSIONS,
137
+ _PROSE_MIN_SPAN_RATIO,
138
+ _PROSE_STRONG_BOUNDARY_RE,
139
+ _PROSE_WEAK_BOUNDARY_RE,
140
+ _chunks,
141
+ _clean_text,
142
+ _code_chunks,
143
+ _code_segment_spans,
144
+ _last_boundary,
145
+ _markdown_chunks,
146
+ _markdown_section_spans,
147
+ _merge_small_sections,
148
+ _plain_windows,
149
+ _prose_chunks,
150
+ chunk_strategy_for,
151
+ citation_locator,
152
+ page_for_offset,
153
+ pdf_page_offsets,
154
+ typed_chunk_meta_fields,
155
+ typed_chunks,
156
+ )
157
+
158
+ # Static export list. This used to be `[name for name in globals() if not
159
+ # name.startswith("__")]`, which is invisible to a type checker: every
160
+ # `from ._kg_common import *` consumer then had *no* resolvable names, and
161
+ # mypy reported ~750 spurious `name-defined` errors across the graph
162
+ # package. `tests/unit/test_kg_common_exports.py` asserts this list still
163
+ # equals what the computed expression would produce, so it cannot drift.
164
+ __all__ = [
165
+ "Any",
166
+ "COMMON_EXCLUDED_DIRS",
167
+ "COMMON_EXCLUDED_FILE_NAMES",
168
+ "COMMON_EXCLUDED_FILE_SUFFIXES",
169
+ "COOCCURRENCE_CONCEPT_LIMIT",
170
+ "COOCCURRENCE_EDGE_WEIGHT",
171
+ "Counter",
172
+ "Dict",
173
+ "EDGE_VERB",
174
+ "ENABLE_LLM_EXTRACTION",
175
+ "EdgeType",
176
+ "GRAPH_SCHEMA_VERSION",
177
+ "Iterable",
178
+ "Iterator",
179
+ "KGStoreV2",
180
+ "LINUX_EXCLUDED_PREFIXES",
181
+ "LOCAL_CODE_EXTENSIONS",
182
+ "LOCAL_DOCUMENT_EXTENSIONS",
183
+ "LOCAL_IMAGE_EXTENSIONS",
184
+ "LOCAL_SIZE_LIMITS",
185
+ "LOCAL_SLIDE_EXTENSIONS",
186
+ "LOCAL_SPREADSHEET_EXTENSIONS",
187
+ "LOCAL_SUPPORTED_EXTENSIONS",
188
+ "LOCAL_TEXT_EXTENSIONS",
189
+ "List",
190
+ "LocalEmbeddingModel",
191
+ "MACOS_EXCLUDED_PREFIXES",
192
+ "NodeType",
193
+ "Optional",
194
+ "Path",
195
+ "SENSITIVE_PATH_KEYWORDS",
196
+ "Tuple",
197
+ "VERB_EDGE_WEIGHT",
198
+ "WINDOWS_EXCLUDED_NAMES",
199
+ "_CHUNK_STRATEGIES",
200
+ "_CODE_BLANK_RUN_RE",
201
+ "_CODE_BOUNDARY_LINE_RE",
202
+ "_CODE_CHUNK_EXTENSIONS",
203
+ "_CONCEPT_STOP",
204
+ "_KG_DB_FORMAT_KEY",
205
+ "_KG_DB_FORMAT_VERSION",
206
+ "_LLM_EXTRACT_CONCEPT_PROMPT",
207
+ "_LLM_EXTRACT_TRIPLE_PROMPT",
208
+ "_MARKDOWN_CHUNK_EXTENSIONS",
209
+ "_MARKDOWN_HEADING_RE",
210
+ "_MARKDOWN_MIN_SECTION_CHARS",
211
+ "_NOT_PERSON_WORDS",
212
+ "_PROJECTION_VERSION",
213
+ "_PROSE_CHUNK_EXTENSIONS",
214
+ "_PROSE_MIN_SPAN_RATIO",
215
+ "_PROSE_STRONG_BOUNDARY_RE",
216
+ "_PROSE_WEAK_BOUNDARY_RE",
217
+ "_READ_FROM_V2_DEFAULT",
218
+ "_V2_WRITE_MASTER_KEY",
219
+ "_chunks",
220
+ "_classify_node_type",
221
+ "_clean_text",
222
+ "_code_chunks",
223
+ "_code_segment_spans",
224
+ "_current_os_type",
225
+ "_drive_id_for_path",
226
+ "_excluded_directory_reason",
227
+ "_exec_script",
228
+ "_extract_concepts",
229
+ "_extract_concepts_rules",
230
+ "_extract_triples",
231
+ "_extract_triples_rules",
232
+ "_file_category",
233
+ "_infer_edge",
234
+ "_is_hidden_path",
235
+ "_is_relative_to",
236
+ "_json",
237
+ "_last_boundary",
238
+ "_llm_extract_concepts",
239
+ "_llm_extract_triples",
240
+ "_markdown_chunks",
241
+ "_markdown_section_spans",
242
+ "_merge_small_sections",
243
+ "_node_type_for_category",
244
+ "_now",
245
+ "_parse_iso",
246
+ "_parser_type_for_category",
247
+ "_path_fingerprint",
248
+ "_path_parts_lower",
249
+ "_plain_windows",
250
+ "_prose_chunks",
251
+ "_recency_score",
252
+ "_root_warning",
253
+ "_safe_iso_from_stat_mtime",
254
+ "_safe_loads",
255
+ "_sample_file",
256
+ "_semantic_items",
257
+ "_sensitive_file_reason",
258
+ "_sha256_bytes",
259
+ "_sha256_text",
260
+ "_size_limit_for_category",
261
+ "_slug",
262
+ "_topic_candidates",
263
+ "asyncio",
264
+ "chunk_strategy_for",
265
+ "citation_locator",
266
+ "contextmanager",
267
+ "datetime",
268
+ "get_llm_router",
269
+ "hashlib",
270
+ "infer_edge_relation",
271
+ "json",
272
+ "logging",
273
+ "math",
274
+ "os",
275
+ "page_for_offset",
276
+ "pdf_page_offsets",
277
+ "platform",
278
+ "quiet",
279
+ "re",
280
+ "set_llm_router",
281
+ "shutil",
282
+ "sqlite3",
283
+ "time",
284
+ "typed_chunk_meta_fields",
285
+ "typed_chunks",
286
+ "zipfile",
287
+ ]