ltcai 11.5.1 → 11.6.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 (473) hide show
  1. package/README.md +92 -117
  2. package/bin/ltcai.js +234 -24
  3. package/docs/CHANGELOG.md +129 -0
  4. package/docs/COMMUNITY_AND_PLUGINS.md +1 -1
  5. package/docs/DEVELOPMENT.md +8 -6
  6. package/docs/ENTERPRISE.md +2 -1
  7. package/docs/HYBRID_CLOUD_KG_STREAMING.md +8 -4
  8. package/docs/MULTI_AGENT_RUNTIME.md +12 -5
  9. package/docs/ONBOARDING.md +1 -1
  10. package/docs/OPERATIONS.md +6 -3
  11. package/docs/REALTIME_COLLABORATION.md +1 -1
  12. package/docs/TRUST_MODEL.md +1 -1
  13. package/docs/WHY_LATTICE.md +1 -1
  14. package/docs/WORKFLOW_DESIGNER.md +3 -2
  15. package/docs/architecture.md +4 -4
  16. package/docs/kg-schema.md +1 -1
  17. package/docs/v11.5.2_TIGHT_SHIP_PLAN.md +144 -0
  18. package/docs/v11.6.0_ONE_DOOR_PLAN.md +170 -0
  19. package/lattice_brain/__init__.py +42 -79
  20. package/lattice_brain/graph/__init__.py +9 -24
  21. package/lattice_brain/graph/_kg_common/__init__.py +13 -24
  22. package/lattice_brain/ingestion/__init__.py +19 -58
  23. package/lattice_brain/ingestion/pipeline.py +20 -398
  24. package/lattice_brain/multimodal/__init__.py +7 -18
  25. package/lattice_brain/multimodal/images.py +6 -264
  26. package/lattice_brain/multimodal/video.py +8 -247
  27. package/lattice_brain/runtime/__init__.py +8 -79
  28. package/lattice_brain/runtime/hooks.py +22 -597
  29. package/latticeai/__init__.py +1 -1
  30. package/latticeai/api/agent_worker_seam.py +7 -80
  31. package/latticeai/api/health.py +26 -20
  32. package/latticeai/api/local_files.py +25 -608
  33. package/latticeai/api/models.py +12 -87
  34. package/latticeai/api/search.py +17 -231
  35. package/latticeai/api/tools.py +69 -750
  36. package/latticeai/api/voice_capture.py +8 -70
  37. package/latticeai/api/worker_compute.py +842 -0
  38. package/latticeai/api/worker_seams.py +216 -0
  39. package/latticeai/app_factory.py +23 -232
  40. package/latticeai/cli/entrypoint.py +36 -249
  41. package/latticeai/cli/runtime.py +7 -3
  42. package/latticeai/core/agent_permission.py +16 -91
  43. package/latticeai/core/config.py +47 -3
  44. package/latticeai/core/csrf.py +28 -2
  45. package/latticeai/core/embedding_providers/__init__.py +3 -5
  46. package/latticeai/core/embedding_providers/base.py +1 -1
  47. package/latticeai/core/embedding_providers/text.py +1 -1
  48. package/latticeai/core/http_origin.py +146 -0
  49. package/latticeai/core/io_utils.py +2 -11
  50. package/latticeai/core/messages.py +94 -531
  51. package/latticeai/core/model_compat.py +2 -8
  52. package/latticeai/core/module_probe.py +37 -0
  53. package/latticeai/core/security.py +13 -0
  54. package/latticeai/core/sessions.py +3 -2
  55. package/latticeai/core/sse.py +25 -0
  56. package/latticeai/core/users.py +0 -9
  57. package/latticeai/models/router/documents.py +0 -35
  58. package/latticeai/models/router/registry.py +0 -4
  59. package/latticeai/runtime/access_runtime.py +16 -18
  60. package/latticeai/runtime/bootstrap.py +10 -21
  61. package/latticeai/runtime/brain_runtime.py +35 -43
  62. package/latticeai/runtime/build_phases/__init__.py +21 -37
  63. package/latticeai/runtime/build_phases/features.py +101 -389
  64. package/latticeai/runtime/build_phases/foundation.py +82 -392
  65. package/latticeai/runtime/build_phases/web.py +91 -406
  66. package/latticeai/runtime/build_phases/worker_profile.py +244 -0
  67. package/latticeai/runtime/lifespan_runtime.py +7 -16
  68. package/latticeai/runtime/platform_services_runtime.py +1 -15
  69. package/latticeai/runtime/runtime_context.py +14 -143
  70. package/latticeai/runtime/security_runtime.py +10 -103
  71. package/latticeai/services/architecture_readiness.py +82 -43
  72. package/latticeai/services/model_capability_registry.py +0 -15
  73. package/latticeai/services/model_catalog.py +0 -7
  74. package/latticeai/services/model_loading.py +3 -2
  75. package/latticeai/services/model_runtime/__init__.py +2 -68
  76. package/latticeai/services/model_runtime/engines.py +27 -128
  77. package/latticeai/services/model_runtime/loading.py +2 -2
  78. package/latticeai/services/model_runtime/service.py +4 -28
  79. package/latticeai/services/p_reinforce.py +10 -261
  80. package/latticeai/services/product_readiness.py +31 -38
  81. package/latticeai/services/search_service.py +37 -795
  82. package/latticeai/services/tool_dispatch.py +30 -390
  83. package/latticeai/services/voice_capture.py +13 -107
  84. package/latticeai/tools/__init__.py +22 -49
  85. package/latticeai/tools/commands.py +0 -163
  86. package/latticeai/tools/computer.py +0 -39
  87. package/latticeai/tools/documents.py +1 -134
  88. package/latticeai/tools/filesystem.py +1 -247
  89. package/latticeai/tools/knowledge.py +1 -52
  90. package/latticeai/tools/local_files.py +0 -20
  91. package/latticeai/worker_app.py +75 -0
  92. package/package.json +3 -6
  93. package/requirements.txt +0 -5
  94. package/scripts/agent_eval.py +16 -28
  95. package/scripts/brain_quality_eval.py +20 -183
  96. package/scripts/bump_version.py +19 -6
  97. package/scripts/check_current_release_docs.mjs +7 -4
  98. package/scripts/check_legacy_debt.mjs +1 -1
  99. package/scripts/check_openapi_drift.mjs +10 -0
  100. package/scripts/check_server_i18n.mjs +2 -18
  101. package/scripts/compose_openapi.py +377 -0
  102. package/scripts/export_openapi.py +32 -4
  103. package/scripts/gen_messages_catalog_fixture.py +302 -0
  104. package/scripts/gen_openapi_fragments.py +365 -0
  105. package/scripts/gen_redact_fixture.py +196 -0
  106. package/scripts/gen_worker_allowlist_fixture.py +115 -0
  107. package/scripts/generate_agent_parity_fixtures.py +33 -14
  108. package/scripts/openapi_route_families.json +2161 -0
  109. package/scripts/release_screen_claims.json +31 -0
  110. package/scripts/run_integration_tests.mjs +134 -29
  111. package/scripts/run_sidecar_e2e.mjs +104 -11
  112. package/scripts/wheel_smoke.py +32 -22
  113. package/src-tauri/Cargo.lock +375 -9
  114. package/src-tauri/Cargo.toml +1 -1
  115. package/src-tauri/src/backend.rs +223 -43
  116. package/src-tauri/src/main.rs +27 -17
  117. package/src-tauri/src/topology.rs +58 -88
  118. package/src-tauri/tauri.conf.json +2 -3
  119. package/static/app/asset-manifest.json +41 -41
  120. package/static/app/assets/{Act-Drs_jd-O.js → Act-CToZnOHz.js} +1 -1
  121. package/static/app/assets/{AdminConsole-BqNx5oF6.js → AdminConsole-D5kbrBu8.js} +1 -1
  122. package/static/app/assets/{Brain-C7bdNmz-.js → Brain-C6zCdv4S.js} +1 -1
  123. package/static/app/assets/{BrainHome-DcTnINcI.js → BrainHome-D4n3EDUt.js} +1 -1
  124. package/static/app/assets/{BrainSignals-Df1MRIPD.js → BrainSignals-CzeZ-vQ9.js} +1 -1
  125. package/static/app/assets/{Capture-Dgsxvnbx.js → Capture-DPcyTczq.js} +1 -1
  126. package/static/app/assets/{Chronicle-BrkTxJK1.js → Chronicle-D3Nx-oWS.js} +1 -1
  127. package/static/app/assets/{CommandPalette-DDziw7Oj.js → CommandPalette-DPPvpp28.js} +1 -1
  128. package/static/app/assets/{Library-CYxeuraA.js → Library-Co2qTu3I.js} +1 -1
  129. package/static/app/assets/{LivingBrain-CNp6mvCm.js → LivingBrain-Bsmzwy8_.js} +1 -1
  130. package/static/app/assets/{ProductFlow-BVsowu3Z.js → ProductFlow-CBLdmesT.js} +1 -1
  131. package/static/app/assets/{ReviewCard-D1LbOfJS.js → ReviewCard-CfR6DLs7.js} +1 -1
  132. package/static/app/assets/{System-DcRAq7wj.js → System-Ce-P2YL6.js} +1 -1
  133. package/static/app/assets/arrow-left-DD5jFGHV.js +1 -0
  134. package/static/app/assets/{bot-BK2xQ9mN.js → bot-C5-XIww2.js} +1 -1
  135. package/static/app/assets/{brain-BZNztFBb.js → brain-CFRJUvdX.js} +1 -1
  136. package/static/app/assets/{button-CjueubVZ.js → button-DI1KcQP-.js} +1 -1
  137. package/static/app/assets/circle-check-CY20XMCh.js +1 -0
  138. package/static/app/assets/{circle-pause-HRjSmpyY.js → circle-pause-C8HHyood.js} +1 -1
  139. package/static/app/assets/{circle-play-CMcKDVwu.js → circle-play-Cufc235E.js} +1 -1
  140. package/static/app/assets/{cpu-B_MyTfYr.js → cpu-DW2_JVsv.js} +1 -1
  141. package/static/app/assets/{download-CTy0EByV.js → download-gbdKTBb8.js} +1 -1
  142. package/static/app/assets/{folder-open-DF6bLhTg.js → folder-open-C9ydyX33.js} +1 -1
  143. package/static/app/assets/{hard-drive-CpWHG77C.js → hard-drive-BxNMzBM3.js} +1 -1
  144. package/static/app/assets/index-BovSWRmQ.css +2 -0
  145. package/static/app/assets/{index-Dd6abJHX.js → index-q9XyDY7A.js} +3 -3
  146. package/static/app/assets/{input-bVgIRN3s.js → input-GLD94Y_K.js} +1 -1
  147. package/static/app/assets/{link-2-bg6CG5Vk.js → link-2-B4Y0gz1S.js} +1 -1
  148. package/static/app/assets/{permissionCopy-DFTf1HDZ.js → permissionCopy-CxrV0fvU.js} +1 -1
  149. package/static/app/assets/{primitives-D7D-sQ3T.js → primitives-2ANdAsu2.js} +1 -1
  150. package/static/app/assets/search-DTxtjQ07.js +1 -0
  151. package/static/app/assets/{share-2-BLzo7U4L.js → share-2-DxArfiuI.js} +1 -1
  152. package/static/app/assets/{shield-alert-BmngqnsJ.js → shield-alert-CgftuFFs.js} +1 -1
  153. package/static/app/assets/{textarea-DOSlAQQ3.js → textarea-BHVBAoCr.js} +1 -1
  154. package/static/app/assets/{useFocusTrap-pZhgeee4.js → useFocusTrap-Dzq2j_OG.js} +1 -1
  155. package/static/app/assets/{useMutation-BMDwNk4I.js → useMutation-BcqfMLNq.js} +1 -1
  156. package/static/app/assets/{useQuery-CSjKttRo.js → useQuery-DBzLKCOv.js} +1 -1
  157. package/static/app/assets/{utils-D3u_yv7B.js → utils-B-Aah1bO.js} +1 -1
  158. package/static/app/assets/{workspace-H3bMjYXC.js → workspace-B6fFhoko.js} +1 -1
  159. package/static/app/index.html +4 -4
  160. package/static/sw.js +1 -1
  161. package/desktop/electron/README.md +0 -9
  162. package/desktop/electron/main.cjs +0 -58
  163. package/desktop/electron/preload.cjs +0 -5
  164. package/lattice_brain/archive.py +0 -522
  165. package/lattice_brain/context.py +0 -325
  166. package/lattice_brain/conversations.py +0 -382
  167. package/lattice_brain/core.py +0 -82
  168. package/lattice_brain/graph/_kg_contract.py +0 -249
  169. package/lattice_brain/graph/curator.py +0 -676
  170. package/lattice_brain/graph/discovery.py +0 -595
  171. package/lattice_brain/graph/discovery_index/__init__.py +0 -35
  172. package/lattice_brain/graph/discovery_index/cleanup.py +0 -182
  173. package/lattice_brain/graph/discovery_index/extract.py +0 -137
  174. package/lattice_brain/graph/discovery_index/scan.py +0 -411
  175. package/lattice_brain/graph/discovery_index/upsert.py +0 -495
  176. package/lattice_brain/graph/documents.py +0 -380
  177. package/lattice_brain/graph/fusion.py +0 -395
  178. package/lattice_brain/graph/identity.py +0 -175
  179. package/lattice_brain/graph/image_vectors.py +0 -230
  180. package/lattice_brain/graph/ingest.py +0 -829
  181. package/lattice_brain/graph/network.py +0 -205
  182. package/lattice_brain/graph/proactive.py +0 -724
  183. package/lattice_brain/graph/projection/__init__.py +0 -42
  184. package/lattice_brain/graph/projection/curation.py +0 -500
  185. package/lattice_brain/graph/projection/v2_schema.py +0 -546
  186. package/lattice_brain/graph/provenance.py +0 -524
  187. package/lattice_brain/graph/rerank.py +0 -163
  188. package/lattice_brain/graph/retrieval/__init__.py +0 -54
  189. package/lattice_brain/graph/retrieval/context.py +0 -197
  190. package/lattice_brain/graph/retrieval/graph_view.py +0 -319
  191. package/lattice_brain/graph/retrieval/hybrid.py +0 -488
  192. package/lattice_brain/graph/retrieval/maintenance.py +0 -121
  193. package/lattice_brain/graph/retrieval/signals.py +0 -95
  194. package/lattice_brain/graph/retrieval_docgen.py +0 -253
  195. package/lattice_brain/graph/retrieval_policy.py +0 -180
  196. package/lattice_brain/graph/retrieval_reads.py +0 -769
  197. package/lattice_brain/graph/retrieval_vector/__init__.py +0 -42
  198. package/lattice_brain/graph/retrieval_vector/fingerprint.py +0 -97
  199. package/lattice_brain/graph/retrieval_vector/indexing.py +0 -347
  200. package/lattice_brain/graph/retrieval_vector/search.py +0 -560
  201. package/lattice_brain/graph/retrieval_vector/status.py +0 -374
  202. package/lattice_brain/graph/schema.py +0 -792
  203. package/lattice_brain/graph/store.py +0 -268
  204. package/lattice_brain/graph/vector_index/__init__.py +0 -85
  205. package/lattice_brain/graph/vector_index/base.py +0 -170
  206. package/lattice_brain/graph/vector_index/brute_force.py +0 -114
  207. package/lattice_brain/graph/vector_index/hnsw.py +0 -293
  208. package/lattice_brain/graph/vector_index/jobs.py +0 -287
  209. package/lattice_brain/graph/vector_index/quantized.py +0 -151
  210. package/lattice_brain/graph/vector_index/selector.py +0 -161
  211. package/lattice_brain/graph/write_master.py +0 -308
  212. package/lattice_brain/ingestion/_contract.py +0 -90
  213. package/lattice_brain/ingestion/folder_scan.py +0 -57
  214. package/lattice_brain/ingestion/folders.py +0 -258
  215. package/lattice_brain/ingestion/jobs_api.py +0 -107
  216. package/lattice_brain/ingestion/routing.py +0 -295
  217. package/lattice_brain/ingestion_jobs.py +0 -383
  218. package/lattice_brain/memory.py +0 -102
  219. package/lattice_brain/portability/__init__.py +0 -90
  220. package/lattice_brain/portability/_contract.py +0 -42
  221. package/lattice_brain/portability/backups.py +0 -338
  222. package/lattice_brain/portability/bundles.py +0 -136
  223. package/lattice_brain/portability/constants.py +0 -93
  224. package/lattice_brain/portability/fsops.py +0 -138
  225. package/lattice_brain/portability/service.py +0 -41
  226. package/lattice_brain/portability/sharing.py +0 -714
  227. package/lattice_brain/quality.py +0 -592
  228. package/lattice_brain/retrieval_benchmark_fixtures.py +0 -92
  229. package/lattice_brain/runtime/agent_runtime.py +0 -859
  230. package/lattice_brain/runtime/contracts.py +0 -460
  231. package/lattice_brain/runtime/multi_agent.py +0 -942
  232. package/lattice_brain/runtime/statuses.py +0 -10
  233. package/lattice_brain/sealed_box.py +0 -244
  234. package/lattice_brain/self_model.py +0 -675
  235. package/lattice_brain/sensitivity.py +0 -94
  236. package/lattice_brain/storage/__init__.py +0 -22
  237. package/lattice_brain/storage/base.py +0 -100
  238. package/lattice_brain/storage/docker.py +0 -105
  239. package/lattice_brain/storage/factory.py +0 -31
  240. package/lattice_brain/storage/migration.py +0 -191
  241. package/lattice_brain/storage/postgres.py +0 -123
  242. package/lattice_brain/storage/sqlite.py +0 -143
  243. package/lattice_brain/synthesis.py +0 -824
  244. package/lattice_brain/workflow.py +0 -497
  245. package/latticeai/api/admin.py +0 -471
  246. package/latticeai/api/agent_registry.py +0 -105
  247. package/latticeai/api/agents.py +0 -228
  248. package/latticeai/api/auth.py +0 -360
  249. package/latticeai/api/automation_intelligence.py +0 -401
  250. package/latticeai/api/brain_intelligence.py +0 -199
  251. package/latticeai/api/browser.py +0 -493
  252. package/latticeai/api/change_proposals.py +0 -89
  253. package/latticeai/api/chat.py +0 -572
  254. package/latticeai/api/chat_agent_http.py +0 -901
  255. package/latticeai/api/chat_contracts.py +0 -73
  256. package/latticeai/api/chat_documents.py +0 -276
  257. package/latticeai/api/chat_helpers.py +0 -463
  258. package/latticeai/api/chat_history.py +0 -101
  259. package/latticeai/api/chat_hybrid.py +0 -113
  260. package/latticeai/api/chat_intents.py +0 -646
  261. package/latticeai/api/chat_stream.py +0 -216
  262. package/latticeai/api/chronicle.py +0 -63
  263. package/latticeai/api/command_center.py +0 -51
  264. package/latticeai/api/computer_use.py +0 -485
  265. package/latticeai/api/evidence_actions.py +0 -48
  266. package/latticeai/api/features.py +0 -70
  267. package/latticeai/api/funnel_metrics.py +0 -31
  268. package/latticeai/api/garden.py +0 -34
  269. package/latticeai/api/hooks.py +0 -165
  270. package/latticeai/api/index_jobs.py +0 -145
  271. package/latticeai/api/invitations.py +0 -100
  272. package/latticeai/api/knowledge_graph.py +0 -536
  273. package/latticeai/api/marketplace.py +0 -105
  274. package/latticeai/api/mcp.py +0 -482
  275. package/latticeai/api/memory.py +0 -270
  276. package/latticeai/api/network.py +0 -81
  277. package/latticeai/api/network_boundary.py +0 -225
  278. package/latticeai/api/permission_mode.py +0 -61
  279. package/latticeai/api/permissions.py +0 -410
  280. package/latticeai/api/plugins.py +0 -126
  281. package/latticeai/api/portability.py +0 -391
  282. package/latticeai/api/project_sessions.py +0 -114
  283. package/latticeai/api/realtime.py +0 -118
  284. package/latticeai/api/review_queue.py +0 -364
  285. package/latticeai/api/security_dashboard.py +0 -604
  286. package/latticeai/api/setup.py +0 -319
  287. package/latticeai/api/static_routes.py +0 -351
  288. package/latticeai/api/ui_redirects.py +0 -26
  289. package/latticeai/api/workflow_designer.py +0 -394
  290. package/latticeai/api/workspace.py +0 -856
  291. package/latticeai/api/workspace_scope.py +0 -125
  292. package/latticeai/core/agent/__init__.py +0 -93
  293. package/latticeai/core/agent/_contract.py +0 -79
  294. package/latticeai/core/agent/context.py +0 -57
  295. package/latticeai/core/agent/deps.py +0 -125
  296. package/latticeai/core/agent/execution.py +0 -622
  297. package/latticeai/core/agent/planning.py +0 -145
  298. package/latticeai/core/agent/recovery.py +0 -157
  299. package/latticeai/core/agent/runtime.py +0 -210
  300. package/latticeai/core/agent/verification.py +0 -231
  301. package/latticeai/core/agent_eval.py +0 -739
  302. package/latticeai/core/agent_helpers.py +0 -493
  303. package/latticeai/core/agent_profiles.py +0 -110
  304. package/latticeai/core/agent_prompts.py +0 -171
  305. package/latticeai/core/agent_registry.py +0 -232
  306. package/latticeai/core/agent_state.py +0 -41
  307. package/latticeai/core/agent_trace.py +0 -104
  308. package/latticeai/core/artifact_ledger.py +0 -109
  309. package/latticeai/core/audit.py +0 -260
  310. package/latticeai/core/builtin_hooks.py +0 -105
  311. package/latticeai/core/context_builder.py +0 -394
  312. package/latticeai/core/document_generator.py +0 -103
  313. package/latticeai/core/enterprise.py +0 -157
  314. package/latticeai/core/enterprise_admin.py +0 -158
  315. package/latticeai/core/file_generation/__init__.py +0 -115
  316. package/latticeai/core/file_generation/bundles.py +0 -76
  317. package/latticeai/core/file_generation/extraction.py +0 -154
  318. package/latticeai/core/file_generation/inference.py +0 -235
  319. package/latticeai/core/file_generation/orchestration.py +0 -152
  320. package/latticeai/core/file_generation/prompting.py +0 -117
  321. package/latticeai/core/file_generation/repair.py +0 -114
  322. package/latticeai/core/file_generation/sanitize.py +0 -61
  323. package/latticeai/core/file_generation/validation.py +0 -201
  324. package/latticeai/core/graph_curator.py +0 -11
  325. package/latticeai/core/hooks.py +0 -11
  326. package/latticeai/core/invitations.py +0 -131
  327. package/latticeai/core/legacy_compatibility.py +0 -243
  328. package/latticeai/core/local_embeddings.py +0 -104
  329. package/latticeai/core/logging_safety.py +0 -46
  330. package/latticeai/core/marketplace.py +0 -293
  331. package/latticeai/core/mcp_catalog.py +0 -452
  332. package/latticeai/core/mcp_registry.py +0 -506
  333. package/latticeai/core/multi_agent.py +0 -11
  334. package/latticeai/core/network_boundary.py +0 -168
  335. package/latticeai/core/oidc.py +0 -208
  336. package/latticeai/core/plugins.py +0 -432
  337. package/latticeai/core/product_hardening.py +0 -218
  338. package/latticeai/core/project_sessions.py +0 -337
  339. package/latticeai/core/realtime.py +0 -238
  340. package/latticeai/core/run_explain.py +0 -423
  341. package/latticeai/core/run_store.py +0 -252
  342. package/latticeai/core/timezones.py +0 -80
  343. package/latticeai/core/workflow_engine.py +0 -11
  344. package/latticeai/core/workspace_computer_memory.py +0 -84
  345. package/latticeai/core/workspace_graph_trace.py +0 -161
  346. package/latticeai/core/workspace_indexing.py +0 -102
  347. package/latticeai/core/workspace_memory.py +0 -77
  348. package/latticeai/core/workspace_onboarding.py +0 -104
  349. package/latticeai/core/workspace_os.py +0 -988
  350. package/latticeai/core/workspace_os_constants.py +0 -126
  351. package/latticeai/core/workspace_os_state.py +0 -180
  352. package/latticeai/core/workspace_os_utils.py +0 -69
  353. package/latticeai/core/workspace_permissions.py +0 -101
  354. package/latticeai/core/workspace_plugins.py +0 -97
  355. package/latticeai/core/workspace_relationships.py +0 -99
  356. package/latticeai/core/workspace_reorganization.py +0 -335
  357. package/latticeai/core/workspace_review_items.py +0 -118
  358. package/latticeai/core/workspace_runs.py +0 -732
  359. package/latticeai/core/workspace_skills.py +0 -114
  360. package/latticeai/core/workspace_snapshots.py +0 -198
  361. package/latticeai/core/workspace_timeline.py +0 -110
  362. package/latticeai/integrations/__init__.py +0 -0
  363. package/latticeai/integrations/telegram_bot/__init__.py +0 -123
  364. package/latticeai/integrations/telegram_bot/__main__.py +0 -17
  365. package/latticeai/integrations/telegram_bot/config.py +0 -86
  366. package/latticeai/integrations/telegram_bot/dispatch.py +0 -311
  367. package/latticeai/integrations/telegram_bot/flows.py +0 -478
  368. package/latticeai/integrations/telegram_bot/helpers.py +0 -322
  369. package/latticeai/integrations/telegram_bot/screens.py +0 -394
  370. package/latticeai/runtime/audit_runtime.py +0 -76
  371. package/latticeai/runtime/automation_runtime.py +0 -81
  372. package/latticeai/runtime/chat_wiring.py +0 -141
  373. package/latticeai/runtime/context_runtime.py +0 -66
  374. package/latticeai/runtime/feature_toggle_wiring.py +0 -163
  375. package/latticeai/runtime/history_runtime.py +0 -163
  376. package/latticeai/runtime/history_writer.py +0 -138
  377. package/latticeai/runtime/hooks_runtime.py +0 -77
  378. package/latticeai/runtime/model_wiring.py +0 -68
  379. package/latticeai/runtime/namespace_runtime.py +0 -163
  380. package/latticeai/runtime/network_boundary_wiring.py +0 -128
  381. package/latticeai/runtime/network_config_runtime.py +0 -56
  382. package/latticeai/runtime/permission_mode_wiring.py +0 -119
  383. package/latticeai/runtime/persistence_runtime.py +0 -159
  384. package/latticeai/runtime/platform_runtime_wiring.py +0 -89
  385. package/latticeai/runtime/review_wiring.py +0 -42
  386. package/latticeai/runtime/router_registration.py +0 -689
  387. package/latticeai/runtime/sso_config_runtime.py +0 -128
  388. package/latticeai/runtime/user_key_runtime.py +0 -106
  389. package/latticeai/runtime/web_runtime.py +0 -92
  390. package/latticeai/server_app.py +0 -51
  391. package/latticeai/services/app_context.py +0 -130
  392. package/latticeai/services/automation_execution.py +0 -266
  393. package/latticeai/services/automation_intelligence.py +0 -614
  394. package/latticeai/services/brain_automation.py +0 -191
  395. package/latticeai/services/brain_intelligence/__init__.py +0 -58
  396. package/latticeai/services/brain_intelligence/_contract.py +0 -71
  397. package/latticeai/services/brain_intelligence/consistency.py +0 -193
  398. package/latticeai/services/brain_intelligence/constants.py +0 -47
  399. package/latticeai/services/brain_intelligence/digest.py +0 -258
  400. package/latticeai/services/brain_intelligence/health.py +0 -331
  401. package/latticeai/services/brain_intelligence/proposals.py +0 -264
  402. package/latticeai/services/brain_intelligence/sampling.py +0 -84
  403. package/latticeai/services/brain_intelligence/service.py +0 -48
  404. package/latticeai/services/change_proposals.py +0 -505
  405. package/latticeai/services/chat_service.py +0 -243
  406. package/latticeai/services/chronicle.py +0 -557
  407. package/latticeai/services/cloud_egress_audit.py +0 -85
  408. package/latticeai/services/cloud_extraction.py +0 -129
  409. package/latticeai/services/cloud_streaming.py +0 -268
  410. package/latticeai/services/cloud_token_guard.py +0 -84
  411. package/latticeai/services/command_center.py +0 -548
  412. package/latticeai/services/evidence_actions.py +0 -255
  413. package/latticeai/services/feature_toggles.py +0 -502
  414. package/latticeai/services/folder_watch.py +0 -520
  415. package/latticeai/services/funnel_metrics.py +0 -307
  416. package/latticeai/services/hybrid_chat.py +0 -316
  417. package/latticeai/services/hybrid_context.py +0 -228
  418. package/latticeai/services/hybrid_policy.py +0 -178
  419. package/latticeai/services/ingestion.py +0 -11
  420. package/latticeai/services/interop_bridges.py +0 -978
  421. package/latticeai/services/kg_portability.py +0 -11
  422. package/latticeai/services/local_knowledge.py +0 -465
  423. package/latticeai/services/memory_service/__init__.py +0 -52
  424. package/latticeai/services/memory_service/_contract.py +0 -100
  425. package/latticeai/services/memory_service/brief.py +0 -431
  426. package/latticeai/services/memory_service/constants.py +0 -57
  427. package/latticeai/services/memory_service/maintenance.py +0 -138
  428. package/latticeai/services/memory_service/manager.py +0 -186
  429. package/latticeai/services/memory_service/proof.py +0 -136
  430. package/latticeai/services/memory_service/recall.py +0 -225
  431. package/latticeai/services/memory_service/service.py +0 -48
  432. package/latticeai/services/memory_service/stores.py +0 -110
  433. package/latticeai/services/model_recommendation.py +0 -224
  434. package/latticeai/services/model_runtime/cloud.py +0 -87
  435. package/latticeai/services/multimodal_streaming.py +0 -129
  436. package/latticeai/services/network_boundary_service.py +0 -154
  437. package/latticeai/services/obsidian_bridge.py +0 -609
  438. package/latticeai/services/openai_compatible_adapter.py +0 -101
  439. package/latticeai/services/permission_mode_service.py +0 -170
  440. package/latticeai/services/platform_runtime.py +0 -366
  441. package/latticeai/services/review_queue.py +0 -380
  442. package/latticeai/services/router_context.py +0 -59
  443. package/latticeai/services/run_executor.py +0 -387
  444. package/latticeai/services/self_model_service.py +0 -171
  445. package/latticeai/services/setup_detection.py +0 -81
  446. package/latticeai/services/triggers.py +0 -378
  447. package/latticeai/services/upload_service.py +0 -185
  448. package/latticeai/services/workspace_service.py +0 -171
  449. package/latticeai/setup/__init__.py +0 -25
  450. package/latticeai/setup/auto_setup.py +0 -857
  451. package/latticeai/setup/demo_corpus.py +0 -98
  452. package/latticeai/setup/wizard/__init__.py +0 -126
  453. package/latticeai/setup/wizard/catalog.py +0 -172
  454. package/latticeai/setup/wizard/detect.py +0 -323
  455. package/latticeai/setup/wizard/install.py +0 -348
  456. package/latticeai/setup/wizard/paths.py +0 -168
  457. package/latticeai/setup/wizard/plans.py +0 -74
  458. package/latticeai/setup/wizard/recommend.py +0 -320
  459. package/scripts/bench_agent_smoke.py +0 -409
  460. package/scripts/bench_models.py +0 -540
  461. package/scripts/bench_vector_index.py +0 -295
  462. package/scripts/funnel_soft_gate.py +0 -192
  463. package/scripts/generate_agent_loop_fixtures.py +0 -907
  464. package/scripts/generate_rust_parity_fixtures.py +0 -1000
  465. package/scripts/measure_brain_home_fill.mjs +0 -141
  466. package/scripts/migrate_brain_storage.py +0 -57
  467. package/scripts/parity_fixture_corpus_docgen.py +0 -341
  468. package/scripts/profile_kg.py +0 -355
  469. package/server.py +0 -30
  470. package/static/app/assets/arrow-left-BHYmOTWU.js +0 -1
  471. package/static/app/assets/circle-check-CLeWJr67.js +0 -1
  472. package/static/app/assets/index-DxmOfNRi.css +0 -2
  473. package/static/app/assets/search-BgSVX6NG.js +0 -1
@@ -0,0 +1,170 @@
1
+ # v11.6.0 — One Door (설계 문서)
2
+
3
+ > 상태: 계획 → 구현. 목표는 한 문장이다: **이 릴리스가 끝나면 Python은
4
+ > AI Worker로만 쓰인다.** v11.5.1이 "설계상 최종 형태"로 남겨 둔
5
+ > 플랫폼 라우트 박스(~450 라우트)를 Rust로 옮기고, Python 워커는
6
+ > v11.5.1이 정의한 워커 소유물 — LLM 추론, 도구 핸들러 실행과
7
+ > 그래프·파일 쓰기(단일 작성자), 제안 스테이징, 문서 파서 매트릭스,
8
+ > 임베딩 생산 — 만 남긴다.
9
+
10
+ ## 정찰 확정 수치 (2026-08-14)
11
+
12
+ - Python 라우트 464개 = KEEP_WORKER **25** + PORT_STATE **313** +
13
+ PORT_ORCH **108** + STATIC **18**. 클라이언트가 실제 밟는 경로는
14
+ ~190개(전 계약 문서화됨).
15
+ - Rust 네이티브는 24 라우트(~5%). 프록시는 견고(스트리밍·쿠키·
16
+ 멀티파트·SSE 무손상)하나 게이트웨이 자체 인증은 없다.
17
+ - 결핍 인프라: 인증/세션, 쓰기측 SQLite, 서버 메시지 i18n(한글
18
+ 리터럴 292), CSRF/CORS 네이티브, SSE 파이프, 멀티파트, 레이트리밋,
19
+ OpenAPI 생성, SPA 서빙, 워크스페이스 스코핑.
20
+
21
+ ## 최종 Python 워커 표면 (25 라우트 — 이것만 남는다)
22
+
23
+ `/health` · `/agent/{llm,tool,change-proposal}` ·
24
+ `/api/index/{drain,rebuild}` · `/api/embeddings/{status,providers}` ·
25
+ `/models` `/models/{load,switch/*,unload/*,unload-all}` ·
26
+ `/engines/prepare-model{,/stream}` ·
27
+ `/tools/{read_document,pdf_pages,create_docx,create_xlsx,create_pptx,create_pdf}` ·
28
+ `/upload/document` · `/api/ingestion/multimodal` ·
29
+ `/api/capture/voice{,/status}` · (+`/knowledge-graph/ingest` 그래프
30
+ 단일 작성자 시임으로 유지)
31
+
32
+ 여기에 v11.6.0 additive 시임을 더한다(§WP-I6): 히스토리 기록
33
+ (redact→audit→store→ingest 체인), 그래프 쓰기 위임, GPU sysinfo.
34
+ 셋 다 게이트웨이(루프백 호스트)만 호출한다.
35
+
36
+ ## 설계 결정
37
+
38
+ 1. **토폴로지** — lattice-host 게이트웨이가 제품 서버가 된다. 464개
39
+ 중 439개 라우트를 **기존 경로 그대로** 네이티브 axum 핸들러로
40
+ 서빙한다(클라이언트 무변경). 프록시 폴스루는 워커 시임 25개만
41
+ 통과시키는 allowlist로 뒤집는다 — 남는 프록시가 곧 워커 계약이다.
42
+ 2. **저장소 쓰기 분할 (2026-08-14 상향)** — 사용자 기준 확정: **Rust가
43
+ 쓰기 경로 전체의 주인이다.** 플랫폼 상태(사용자/세션, 워크스페이스,
44
+ 리뷰 큐, 제안, 설정, 잡, 히스토리)뿐 아니라 **지식 그래프 쓰기
45
+ 엔진도 Rust로 이관한다**(Wave 2.5 §W1: store write/ingest/projection/
46
+ provenance/벡터 쓰기 네이티브 — Python 스토어와 행 단위 패리티 골든).
47
+ Python 워커는 상태를 소유하지 않는 **순수 계산 워커**가 된다:
48
+ 임베딩은 `/worker/embed`가 벡터를 반환하고 Rust가 저장하며, 문서
49
+ 생성은 렌더 시임이 바이트를 반환하고 Rust가 파일을 놓는다. 전환
50
+ 순서상 Wave 2는 상태-시임(`/worker/graph/mutate`,
51
+ `/worker/chat/record-turn`)에 대고 작업하고, Wave 2.5(§W3)가 그
52
+ 호출부를 네이티브 쓰기 엔진으로 교체한 뒤 해당 시임을 폐지한다.
53
+ Scout가 찾은 "작성자 3곳"(write_file/edit_file, proposal approve)은
54
+ lattice-agent sandbox Workspace로 일원화한다(제안 apply 포함 —
55
+ 네이티브).
56
+ 3. **인증** — 신규 `lattice-auth` 크레이트: 세션/사용자/로그인/역할/
57
+ 워크스페이스 스코프/레이트리밋 + CSRF Origin 7분기 포트. Python의
58
+ 수제 쿠키 파서 의미론과 **정확한 거부 본문**까지 픽스처로 결속한다.
59
+ 인증은 Python에서 핸들러 본문 안에 있으므로 OpenAPI가 아니라
60
+ 본문 전사로 옮긴다(라우트 WP 명세에 인증 요구를 명기).
61
+ 4. **OpenAPI 계약 파이프라인** — `frontend/openapi.json`이 계약의
62
+ 단일 출처로 유지된다. Rust로 간 라우트의 스펙은 크레이트 옆에
63
+ 데이터(JSON 프래그먼트)로 살고, Rust 테스트가 "마운트된 라우트 ==
64
+ 스펙 경로"를 단언한다. `scripts/export_openapi.py`는 워커-전용
65
+ 앱(축소된 app_factory) 스펙 + Rust 프래그먼트를 합성하는 컴포저로
66
+ 재작성한다. 드리프트 게이트는 그대로 문다.
67
+ 5. **i18n** — `lattice-core::messages` ko/en 카탈로그. 라우트가
68
+ 이주할 때 해당 한글 리터럴도 함께 이주한다.
69
+ `check_server_i18n.mjs`의 라우터 목록은 축소분만큼 갱신.
70
+ 6. **SSE** — `POST /chat`(오케스트레이션: redact→audit→워커 LLM
71
+ 스트림→store→ingest 시임), `/engines/prepare-model/stream`
72
+ (워커 프록시 유지 — KEEP), `/agent`(v11.5.1 네이티브 루프 재사용,
73
+ 경로만 게이트웨이가 직접 답함). **Accept 헤더 협상 금지** —
74
+ VS Code는 body `stream:true`만 보낸다.
75
+ 7. **정적/SPA** — 게이트웨이 ServeDir: `/app`, `/static`, `/icons`,
76
+ `manifest.json`, `favicon.ico`, `sw.js` + `GET /chat` 리다이렉트.
77
+ 8. **크레이트 배치** — 신규 3개: `lattice-auth`, `lattice-platform`
78
+ (workspace·admin·features·permissions·review·proposals·mcp·
79
+ marketplace·plugins·hooks·registry), `lattice-chat`(채팅
80
+ 오케스트레이션 + hybrid cloud lane). 도메인 적합 라우트는 기존
81
+ 크레이트 확장(retrieval: memory/brain 읽기, ingest: local_files/
82
+ capture, jobs: index). `RUST_CRATES`(bump/버전일관성) 갱신 필수.
83
+ 9. **Python 축소** — `LATTICEAI_WORKER_ONLY=1` 프로필이 아니라
84
+ **삭제**가 원칙: keep-set(pts_grok 산출) 밖의 latticeai/
85
+ lattice_brain 모듈과 그 테스트를 지운다. 커버리지 100%는 분모
86
+ 축소로 유지하되 arc 단위로 확인. 게이트 파일 10종 동기화
87
+ (mypy files 403경로, setuptools packages, wheel smoke 29모듈,
88
+ MANIFEST, package.json files, product_readiness needle,
89
+ FEATURE_STATUS `_NOT_HTTP_PATHS`, server_app 분해 테스트,
90
+ Release History 테스트, i18n 라우터 목록).
91
+ 10. **클라이언트/진입점** — SPA·확장·Telegram은 무변경(경로 보존).
92
+ `bin/ltcai.js`·`cli/entrypoint.py`·src-tauri `direct/external`
93
+ 토폴로지는 lattice-host 프론트 필수로 재배선. 워커 진입점은
94
+ 유지(`server:app`) — 호스트가 스폰한다.
95
+
96
+ ## 검증 규약 (전 WP 공통)
97
+
98
+ - **캡처-리플레이 패리티**: 삭제 전 Python 구현에서 TestClient로
99
+ 라우트별 골든 요청/응답(정상 + 인증거부 + 오류 분기)을 생성해
100
+ `rust/fixtures/http/<family>.json`으로 커밋, Rust 테스트가 리플레이.
101
+ 클라이언트가 밟는 ~190 경로는 전 분기, 나머지는 대표 분기.
102
+ - **네이티브 증명**: lattice-host `FakeWorker`로 "워커 요청 0건" 단언
103
+ (기존 gateway_mounts.rs 패턴).
104
+ - 공유 파일(`rust/Cargo.toml`, `gateway/{mod,mounts}.rs`,
105
+ `app_factory.py`, `pyproject.toml`)은 **통합자(Fable 5)만** 편집.
106
+ 각 WP는 자기 크레이트/모듈 파일만 소유하고 배선 노트를 남긴다.
107
+
108
+ ## 작업 패키지
109
+
110
+ Wave 1 — 인프라 (병렬):
111
+ - **I1** `lattice-core::db` 쓰기측(WAL·busy_timeout·풀) + 테이블
112
+ 소유권 지도 + config 구조체 (Opus)
113
+ - **I2** `lattice-auth` + 게이트웨이 인증/CSRF/보안헤더 레이어 (Opus)
114
+ - **I3** `lattice-core::messages` ko/en 카탈로그 + 추출 (pts_grok)
115
+ - **I4** 게이트웨이 정적/SPA 서빙 + ui_redirects + static_routes (Opus)
116
+ - **I5** OpenAPI 컴포저 파이프라인 (Opus)
117
+ - **I6** Python 워커 additive 시임 3종 + 워커-전용 app 프로필 (Opus)
118
+
119
+ Wave 2 — 라우트 패밀리 (병렬, 픽스처 우선 생성):
120
+ - **R1** workspace(56)+scope+invitations+permissions → platform (Opus)
121
+ - **R2** admin+security_dashboard+features+funnel+setup → platform (Opus)
122
+ - **R3** auth 라우트(login/register/account) → auth (I2에 병합)
123
+ - **R4** chat 전 계열 + hybrid lane → lattice-chat (Opus, 최대 난도)
124
+ - **R5** memory+brain_intelligence+garden+chronicle+command_center+
125
+ evidence_actions → retrieval/platform (Opus)
126
+ - **R6** knowledge_graph+search+index+local_files+local_knowledge+
127
+ browser → ingest/retrieval (Opus)
128
+ - **R7** review_queue+change_proposals+automation_intelligence+hooks
129
+ → platform (Opus)
130
+ - **R8** mcp+marketplace+plugins+agent_registry+agents+tools(비문서)
131
+ → platform/agent (pts_grok)
132
+ - **R9** portability+network+network_boundary+realtime+
133
+ project_sessions+voice목록+computer_use표면 → platform (Opus)
134
+ - **R10** models 카탈로그/추천(비MLX)+permission_mode+
135
+ workflow_designer+잔여 → platform (Opus)
136
+
137
+ Wave 2.5 — 쓰기 경로 주권 이관 (Rust = 쓰기 주인, Python = 순수 계산):
138
+ - **W1** 네이티브 KG 쓰기 엔진: lattice_brain 그래프 write/ingest/
139
+ projection/provenance/벡터 쓰기 미러 포트 + 행 단위 패리티 골든
140
+ (Opus). `/knowledge-graph/ingest`·`/upload/document`·index drain/
141
+ rebuild가 네이티브가 된다.
142
+ - **W2** Python 순수 계산 시임: `/worker/embed`(벡터 반환),
143
+ `/worker/render/{docx,xlsx,pptx,pdf}`(바이트 반환), 파싱/ASR/멀티모달
144
+ 시임 정렬; 상태-시임 3종 폐지 준비.
145
+ - **W3** Wave-2 호출부 교체: WorkerSeamClient 상태-시임 호출 →
146
+ 네이티브 쓰기 엔진/감사 싱크; redact 규칙 네이티브 포트; record-turn
147
+ 체인(redact→audit→store→ingest) 전부 Rust.
148
+ - **W4** 뮤테이팅 도구 핸들러 네이티브화: `/agent/tool`은 계산 전용
149
+ 화이트리스트로 축소, 쓰기 도구는 sandbox/graph-write 경유.
150
+
151
+ Wave 3 — 축소·재배선:
152
+ - **P1** Python 삭제(keep-set 기준) + 테스트 정리 + 게이트 10종 동기화
153
+ - **P2** bin/ltcai.js·entrypoint·tauri 토폴로지 재배선
154
+ - **P3** 죽는 골든 생성기 정리(참조 구현 이관 또는 명시적 폐기)
155
+
156
+ Wave 4 — 릴리스: bump 11.6.0(31 타겟) → OpenAPI 재생성 →
157
+ releaseTheme "One Door" → 문서 동기화(README 현행 릴리스 문장·미디어
158
+ 경로·Release History **11.0.0 미만 제거 + 해당 단언 테스트 갱신**,
159
+ RELEASE_NOTES, CHANGELOG, ARCHITECTURE **System Map 재작성**,
160
+ SECURITY 11.6.x, FEATURE_STATUS, release_screen_claims 11.6.0 엔트리)
161
+ → build:assets → release:evidence(13샷+GIF) → 4중 로컬 검증
162
+ (fresh venv·비편집 설치·linux 컨테이너·rust 컨테이너) → artifacts →
163
+ main 커밋·푸시 → CI 그린.
164
+
165
+ ## 완성 후 남는 것
166
+
167
+ Python AI Worker: 추론·도구 실행/그래프 쓰기·제안 스테이징·문서
168
+ 파서·임베딩 + additive 시임 3종. HTTP 표면 25(+시임). 그 외 전부
169
+ Rust. 이것이 "One Door": 사용자와 클라이언트가 두드리는 문은
170
+ lattice-host 하나다.
@@ -1,87 +1,50 @@
1
- """lattice-brain — independent Brain Core package for Lattice AI.
2
-
3
- Physically hosts the knowledge graph (``lattice_brain.graph``), memory,
4
- context assembly, conversations, ingestion, agent/hook runtime
5
- (``lattice_brain.runtime``), workflow engine, portability (backup/restore and
6
- ``.latticebrain`` archives), and the storage abstraction.
7
-
8
- The package never imports ``latticeai``; FastAPI and the desktop product
9
- import this package, not the other way around. Heavy graph modules are
10
- lazy-loaded so storage and archive utilities remain usable without creating
11
- runtime globals.
1
+ """lattice-brain — the compute half of the Brain Core.
2
+
3
+ This package hosted the knowledge graph, memory, context assembly,
4
+ conversations, the ingest write door, the agent/hook runtime, the workflow
5
+ engine, portability and the storage abstraction. v11.6.0 §Wave 2.5 made Rust
6
+ the single writer of every one of those, and WP-P1 deleted the Python side.
7
+
8
+ What remains is what a **pure compute worker** needs, and it is deliberately
9
+ small: the always-on hash embedder, the document parser matrix, chunking,
10
+ concept/triple extraction, the multi-modal fact readers, and the ingestion
11
+ vocabulary both sides hash against. The package still never imports
12
+ ``latticeai``.
13
+
14
+ Nothing here is lazy any more, because nothing here is heavy: the modules that
15
+ justified the lazy table (the store, the ANN index, the workflow engine) are
16
+ gone.
12
17
  """
13
18
 
14
- from .archive import BrainArchivePaths, EncryptedBrainArchive
15
- from .core import BrainCore, BrainCoreConfig
16
- from .storage import (
17
- DockerPostgresPlan,
18
- DockerPostgresWizard,
19
- PostgresConfig,
20
- PostgresEngine,
21
- SQLiteEngine,
22
- SQLiteToPostgresMigrator,
23
- StorageCapabilities,
24
- StorageEngine,
25
- StorageUnavailable,
26
- storage_from_env,
19
+ from .embeddings import LocalEmbeddingModel
20
+ from .multimodal import (
21
+ AudioFacts,
22
+ ImageFacts,
23
+ MultimodalPorts,
24
+ VideoFacts,
25
+ detect_modality,
26
+ extract_image_facts,
27
+ extract_keyframes,
28
+ ffmpeg_available,
29
+ parse_subtitles,
30
+ read_video_facts,
31
+ transcribe_audio,
27
32
  )
28
33
 
29
- __version__ = "11.5.1"
34
+ __version__ = "11.6.0"
30
35
 
31
36
  __all__ = [
32
- "AgentRuntime",
33
- "AssembledContext",
34
- "BrainArchivePaths",
35
- "BrainCore",
36
- "BrainCoreConfig",
37
- "BrainMemory",
38
- "ContextAssembler",
39
- "ContextSection",
40
- "ConversationStore",
41
- "DockerPostgresPlan",
42
- "DockerPostgresWizard",
43
- "EncryptedBrainArchive",
44
- "IngestionItem",
45
- "IngestionPipeline",
46
- "KGPortabilityService",
47
- "KnowledgeGraphStore",
48
- "LatticeBrainQuality",
49
- "MultiAgentOrchestrator",
50
- "PostgresConfig",
51
- "PostgresEngine",
52
- "SQLiteEngine",
53
- "SQLiteToPostgresMigrator",
54
- "StorageCapabilities",
55
- "StorageEngine",
56
- "StorageUnavailable",
57
- "WorkflowEngine",
58
- "storage_from_env",
37
+ "AudioFacts",
38
+ "ImageFacts",
39
+ "LocalEmbeddingModel",
40
+ "MultimodalPorts",
41
+ "VideoFacts",
42
+ "detect_modality",
43
+ "extract_image_facts",
44
+ "extract_keyframes",
45
+ "ffmpeg_available",
46
+ "parse_subtitles",
47
+ "read_video_facts",
48
+ "transcribe_audio",
59
49
  "__version__",
60
50
  ]
61
-
62
- _LAZY = {
63
- "AssembledContext": ("context", "AssembledContext"),
64
- "ContextAssembler": ("context", "ContextAssembler"),
65
- "ContextSection": ("context", "ContextSection"),
66
- "ConversationStore": ("conversations", "ConversationStore"),
67
- "BrainMemory": ("memory", "BrainMemory"),
68
- "KnowledgeGraphStore": ("graph.store", "KnowledgeGraphStore"),
69
- "LatticeBrainQuality": ("quality", "LatticeBrainQuality"),
70
- "IngestionItem": ("ingestion", "IngestionItem"),
71
- "IngestionPipeline": ("ingestion", "IngestionPipeline"),
72
- "KGPortabilityService": ("portability", "KGPortabilityService"),
73
- "WorkflowEngine": ("workflow", "WorkflowEngine"),
74
- "AgentRuntime": ("runtime.agent_runtime", "AgentRuntime"),
75
- "MultiAgentOrchestrator": ("runtime.multi_agent", "MultiAgentOrchestrator"),
76
- }
77
-
78
-
79
- def __getattr__(name: str):
80
- target = _LAZY.get(name)
81
- if target is None:
82
- raise AttributeError(name)
83
- module_path, attr = target
84
- import importlib
85
-
86
- module = importlib.import_module(f".{module_path}", __name__)
87
- return getattr(module, attr)
@@ -1,28 +1,13 @@
1
- """Knowledge graph subsystem of the Brain Core.
2
-
3
- Physically hosts the graph schema, store, mixins (write/retrieval/discovery/
4
- documents/ingest/projection/provenance), device identity, brain network, and
5
- the graph curator. Heavy modules are lazy-loaded so importing
6
- ``lattice_brain.graph`` stays cheap.
1
+ """Graph compute: chunking, extraction, parsing, and the embedder fingerprint.
2
+
3
+ The store, the schema, the write mixins, the ANN index and the retrieval stack
4
+ all moved to ``lattice-core`` / ``lattice-retrieval`` in v11.6.0 §Wave 2.5. This
5
+ package keeps only what turns bytes into structures a writer can use, which is
6
+ why it now exports nothing itself — import the submodule you mean
7
+ (``._kg_common``, ``.documents``, ``.retrieval_vector.fingerprint``,
8
+ ``.runtime``).
7
9
  """
8
10
 
9
11
  from __future__ import annotations
10
12
 
11
- __all__ = [
12
- "KnowledgeGraphStore",
13
- "KGStoreV2",
14
- "NodeType",
15
- "EdgeType",
16
- ]
17
-
18
-
19
- def __getattr__(name: str):
20
- if name == "KnowledgeGraphStore":
21
- from .store import KnowledgeGraphStore
22
-
23
- return KnowledgeGraphStore
24
- if name in {"KGStoreV2", "NodeType", "EdgeType"}:
25
- from . import schema
26
-
27
- return getattr(schema, name)
28
- raise AttributeError(name)
13
+ __all__: list[str] = []
@@ -1,9 +1,15 @@
1
- """
2
- SQLite knowledge graph for Lattice AI workspace memory.
1
+ """The graph's *compute* vocabulary, in one importable place.
2
+
3
+ This package was the shared surface of the SQLite knowledge graph: constants,
4
+ path/hash helpers, chunking, concept and triple extraction, and the schema
5
+ handles the write mixins composed into ``KnowledgeGraphStore``. v11.6.0 moved
6
+ every write into ``lattice-core``, and the store went with them.
3
7
 
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.
8
+ What is left is the half that produces *structures*: chunk a document, pull the
9
+ concepts and triples out of a passage, classify a node type, infer an edge verb,
10
+ hash a file. ``POST /worker/parse``, ``POST /worker/embed`` and
11
+ ``POST /worker/extract`` are the routes that answer with them; Rust decides what
12
+ to write.
7
13
  """
8
14
 
9
15
  # ruff: noqa: F401,F841
@@ -26,21 +32,7 @@ from datetime import datetime
26
32
  from pathlib import Path
27
33
  from typing import Any, Dict, Iterable, Iterator, List, Optional, Tuple
28
34
 
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
35
  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
36
 
45
37
  # Static constants (projection/format versions, local-ingestion classification
46
38
  # tables, OS exclusion lists) live in ._kg_constants; re-exported here so every
@@ -96,6 +88,8 @@ from .._kg_fsutil import ( # noqa: E402,F401
96
88
  _size_limit_for_category,
97
89
  _slug,
98
90
  )
91
+ from ..json_utils import _json, _safe_loads
92
+ from ..runtime import get_llm_router, set_llm_router
99
93
 
100
94
  # The logic this module used to hold inline lives in three cohesive submodules
101
95
  # (v11.3.0 decomposition). Every name is re-exported below, so the twelve
@@ -172,11 +166,9 @@ __all__ = [
172
166
  "Dict",
173
167
  "EDGE_VERB",
174
168
  "ENABLE_LLM_EXTRACTION",
175
- "EdgeType",
176
169
  "GRAPH_SCHEMA_VERSION",
177
170
  "Iterable",
178
171
  "Iterator",
179
- "KGStoreV2",
180
172
  "LINUX_EXCLUDED_PREFIXES",
181
173
  "LOCAL_CODE_EXTENSIONS",
182
174
  "LOCAL_DOCUMENT_EXTENSIONS",
@@ -189,7 +181,6 @@ __all__ = [
189
181
  "List",
190
182
  "LocalEmbeddingModel",
191
183
  "MACOS_EXCLUDED_PREFIXES",
192
- "NodeType",
193
184
  "Optional",
194
185
  "Path",
195
186
  "SENSITIVE_PATH_KEYWORDS",
@@ -214,7 +205,6 @@ __all__ = [
214
205
  "_PROSE_MIN_SPAN_RATIO",
215
206
  "_PROSE_STRONG_BOUNDARY_RE",
216
207
  "_PROSE_WEAK_BOUNDARY_RE",
217
- "_READ_FROM_V2_DEFAULT",
218
208
  "_V2_WRITE_MASTER_KEY",
219
209
  "_chunks",
220
210
  "_classify_node_type",
@@ -224,7 +214,6 @@ __all__ = [
224
214
  "_current_os_type",
225
215
  "_drive_id_for_path",
226
216
  "_excluded_directory_reason",
227
- "_exec_script",
228
217
  "_extract_concepts",
229
218
  "_extract_concepts_rules",
230
219
  "_extract_triples",
@@ -1,63 +1,34 @@
1
- """Unified ingestion pipeline — the single write-side seam into the Knowledge Graph.
1
+ """Ingestion: what a source *is*, how it hashes, and how good it looks.
2
2
 
3
- v3.6.0 Knowledge Graph First principle: *no data source bypasses the Knowledge
4
- Graph and no source creates an isolated silo*. Every source — local files,
5
- connected folders, PDFs/Markdown/text/code, web URLs, browser tabs — is
6
- normalized into one :class:`IngestionItem` and pushed through one
7
- :meth:`IngestionPipeline.ingest` entrypoint:
3
+ v3.6.0's Knowledge Graph First principle — *no data source bypasses the
4
+ Knowledge Graph and no source creates an isolated silo* — is still the rule.
5
+ The door it goes through is no longer here: v11.6.0 §Wave 2.5 made Rust the
6
+ single writer of the Brain, so ``IngestionPipeline.ingest``, the per-source
7
+ routing doors, the folder walk, the ``.latticeignore`` reader and the durable
8
+ background queue moved to ``lattice-core`` / ``lattice-ingest`` /
9
+ ``lattice-jobs``.
8
10
 
9
- Source → normalize → content hash → (file | text) ingest → provenance
11
+ What stays is the vocabulary both sides share, and the compute the write path
12
+ asks this worker for:
10
13
 
11
- The pipeline is deliberately thin. It owns normalization, idempotency reporting,
12
- provenance capture, and — crucially — routing every ingest through the shared
13
- ``dispatch_tool`` lifecycle so ``pre_tool``/``post_tool`` hooks fire on data
14
- ingestion exactly as they do on tool calls. The heavy graph construction lives in
15
- :class:`knowledge_graph.KnowledgeGraphStore` (``ingest_document`` for files,
16
- ``ingest_source`` for text/web), which this module composes rather than
17
- re-implements.
18
-
19
- Web ingestion seam
20
- ------------------
21
- The graph layer never fetches or parses the web. Fetching, rendering,
22
- readability extraction, and parse quality are the responsibility of the
23
- *upstream* capture surfaces (browser extension, tools layer, MCP servers):
24
- they hand this module already-extracted text. :meth:`IngestionPipeline.
25
- ingest_web_page` is the convenience wrapper for that hand-off — it normalizes
26
- ``(url, extracted_text)`` into an ``IngestionItem(source_type="web_url")`` and
27
- routes it through the exact same :meth:`IngestionPipeline.ingest` door as every
28
- other source. If the extracted text is bad, fix the extractor upstream; the
29
- pipeline will not attempt network access or HTML parsing.
30
-
31
- Folder ingestion (:meth:`IngestionPipeline.ingest_folder`) walks a local
32
- directory, honors a gitignore-like ``.latticeignore`` file at the root
33
- (blank lines, ``#`` comments, ``fnmatch`` glob patterns, ``dir/`` suffix for
34
- directories), always skips common noise (``.git``, ``node_modules``,
35
- ``__pycache__``, virtualenvs, ``dist``, hidden entries by default), applies
36
- size/extension filters, and either ingests inline or schedules through the
37
- existing :class:`BackgroundIngestionQueue`.
38
-
39
- Split into cohesive submodules in v11.3.0 (no behaviour change): ``constants``
40
- (routing tables + gates), ``quality`` (advisory scoring), ``models`` (item and
41
- result), ``hashing``, ``folder_scan`` (``.latticeignore``), and the three mixins
42
- ``routing`` / ``folders`` / ``jobs_api`` that ``pipeline`` composes into
43
- ``IngestionPipeline``. This module re-exports every name the single file
44
- exposed, so ``lattice_brain.ingestion.X`` keeps working.
14
+ * ``constants`` — the routing tables and the multi-modal gates;
15
+ * ``models`` — :class:`IngestionItem` / :class:`IngestionResult`, now the DTOs
16
+ of a parse request rather than of a write;
17
+ * ``hashing`` — ``content_hash_text`` and the file digest, which decide
18
+ idempotency and must produce the same bytes on both sides;
19
+ * ``quality`` — the advisory extraction score behind ``POST /worker/parse``;
20
+ * ``pipeline`` — the multi-modal capability probe.
45
21
  """
46
22
 
47
23
  from __future__ import annotations
48
24
 
49
- # The single file had no ``__all__``, so its public surface was "every module
50
- # global" — including the names it imported for its own use. Every re-export
51
- # below therefore uses the redundant-alias form: it reproduces exactly that
52
- # surface, and it marks each name as deliberate rather than a leftover import.
25
+ # Re-exports use the redundant-alias form: it says "this is a re-export", not a
26
+ # leftover import.
53
27
  #
54
28
  # Stubbing note: rebinding one of these *here* changes only this module's name.
55
29
  # The submodule that calls it holds its own reference, so a test standing in for
56
30
  # a helper patches the submodule that uses it.
57
31
  from ..gates import FeatureGate as FeatureGate
58
- from ..ingestion_jobs import JOB_ERRORS_CAP as JOB_ERRORS_CAP
59
- from ..ingestion_jobs import BackgroundIngestionJob as BackgroundIngestionJob
60
- from ..ingestion_jobs import BackgroundIngestionQueue as BackgroundIngestionQueue
61
32
  from ..multimodal import AUDIO_EXTENSIONS as AUDIO_EXTENSIONS
62
33
  from ..multimodal import DEFAULT_KEYFRAMES as DEFAULT_KEYFRAMES
63
34
  from ..multimodal import IMAGE_EXTENSIONS as IMAGE_EXTENSIONS
@@ -75,12 +46,8 @@ from ..multimodal import ffmpeg_available as ffmpeg_available
75
46
  from ..multimodal import image_quality_score as image_quality_score
76
47
  from ..multimodal import read_video_facts as read_video_facts
77
48
  from ..multimodal import transcribe_audio as transcribe_audio
78
- from ..multimodal import video_frame_dir as video_frame_dir
79
49
  from ..multimodal import video_quality_score as video_quality_score
80
- from ..multimodal import write_image_memory as write_image_memory
81
- from ..multimodal import write_video_memory as write_video_memory
82
50
  from ..quiet import quiet as quiet
83
- from ..runtime.hooks import dispatch_tool as dispatch_tool
84
51
  from ..utils import utc_now_iso as utc_now_iso
85
52
  from .constants import _MEMORY_NODE_TYPES as _MEMORY_NODE_TYPES
86
53
  from .constants import ALLOW_MULTIMODAL_ENV as ALLOW_MULTIMODAL_ENV
@@ -107,15 +74,10 @@ from .constants import MULTIMODAL_GATE as MULTIMODAL_GATE
107
74
  from .constants import TEXT_SOURCE_TYPES as TEXT_SOURCE_TYPES
108
75
  from .constants import VIDEO_GATE as VIDEO_GATE
109
76
  from .constants import VIDEO_SOURCE_TYPES as VIDEO_SOURCE_TYPES
110
- from .folder_scan import _load_latticeignore as _load_latticeignore
111
- from .folder_scan import _matches_ignore as _matches_ignore
112
- from .folders import IngestionFolderMixin as IngestionFolderMixin
113
77
  from .hashing import _file_digest as _file_digest
114
78
  from .hashing import content_hash_text as content_hash_text
115
- from .jobs_api import IngestionJobsMixin as IngestionJobsMixin
116
79
  from .models import IngestionItem as IngestionItem
117
80
  from .models import IngestionResult as IngestionResult
118
- from .pipeline import VECTOR_TICK_LIMIT as VECTOR_TICK_LIMIT
119
81
  from .pipeline import IngestionPipeline as IngestionPipeline
120
82
  from .quality import _BOILERPLATE_LINE_MARKERS as _BOILERPLATE_LINE_MARKERS
121
83
  from .quality import _CAPTURE_REASON_LABELS as _CAPTURE_REASON_LABELS
@@ -127,4 +89,3 @@ from .quality import QUALITY_LOW_WARNING as QUALITY_LOW_WARNING
127
89
  from .quality import _quality_level as _quality_level
128
90
  from .quality import assess_extraction_quality as assess_extraction_quality
129
91
  from .quality import capture_quality_verdict as capture_quality_verdict
130
- from .routing import IngestionRoutingMixin as IngestionRoutingMixin