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
package/docs/CHANGELOG.md CHANGED
@@ -4,6 +4,135 @@ The top entry is either the current unreleased main-branch work or the current
4
4
  release line. Older entries are historical and may describe behavior as it
5
5
  existed at that release.
6
6
 
7
+ ## [11.6.0] - 2026-08-15 — One Door
8
+
9
+ ### Added
10
+ - **하나의 제품 서버**: `lattice-host`가 **네이티브 420 오퍼레이션 /
11
+ 41 라우트 패밀리**를 원래 경로에 서빙합니다. `mount_table()`이 아홉
12
+ 크레이트의 `MOUNTED` 합집합이고, `(method, path)` 중복은 axum 생성자
13
+ 패닉이 아니라 라우터 생성 **전** 단언으로 실패합니다.
14
+ - **네이티브 KG write 엔진**(`lattice_core::graph_write`): ingest,
15
+ curation, provenance, taxonomy, 벡터 큐. 32단계 행 단위 패리티 골든과
16
+ `sqlite_master` 67객체 스키마 대조로 못박혔습니다.
17
+ - **Python 순수 연산 시임 9종**(`/worker/*`): embed, parse, render×4,
18
+ asr, multimodal/describe, extract. `LATTICEAI_AGENT_TOOL_SEAM` 게이트
19
+ 뒤에 있으며 인증이 디코드보다 먼저 실행됩니다.
20
+ - **HTTP 골든 재생 스위트**: 커밋된 12개 픽스처의 **1,487 케이스**를
21
+ 네이티브 라우트에 재생해 상태줄과 본문을 대조합니다.
22
+ - `rust/fixtures/worker_allowlist.json` — 게이트웨이 프록시 allowlist의
23
+ 단일 출처(**28 라우트**). Python 쪽 `tests/unit/test_worker_allowlist.py`
24
+ 6종이 집합/바이트/결정성/그리디 컨버터/그룹 라벨/"네이티브는 없음"을
25
+ 단언합니다.
26
+ - `pdf` extra (`reportlab`) — `POST /worker/render/pdf`가 지연 임포트하던
27
+ 선언되지 않은 의존성. 없으면 500이 아니라 "렌더러 사용 불가"입니다.
28
+
29
+ ### Changed
30
+ - **Python은 AI 워커입니다.** `create_app`은 사라졌고
31
+ `latticeai.worker_app:create_worker_app`이 이 패키지가 만드는 유일한
32
+ 애플리케이션이며 **28 라우트**만 서빙합니다. 부트스트랩 10단계 → 7단계,
33
+ `RuntimeContext` 191 필드 → 47.
34
+ - 그래프 테이블 **17개**의 소유자가 WORKER → RUST_PLATFORM. 단일 writer
35
+ 불변식이 주석이 아니라 테스트입니다.
36
+ - 변경 제안 스테이징·승인·적용이 인프로세스가 되었습니다. 루프는 Review
37
+ Center와 **같은 문서 핸들**(`GovernanceState`)로 스테이징하고, 적용은
38
+ 네이티브 `write_file`과 같은 샌드박스를 지납니다. unified diff는 CPython
39
+ `difflib`를 이식한 `pydiff`(`autojunk` 포함)가 만듭니다.
40
+ - 워커 감독자가 uvicorn 팩토리로 기동합니다 —
41
+ `python -m uvicorn latticeai.worker_app:create_worker_app --factory`.
42
+ 모듈 형태(`-m latticeai.worker_app`)는 `__main__` 가드가 없어 임포트하고
43
+ 즉시 종료합니다.
44
+ - 잡 스케줄러가 `GraphWriter`를 받아 네이티브로 드레인합니다. 이전에는
45
+ 워커에서 이미 사라진 `POST /api/index/drain`을 매 tick 때리고 백오프만
46
+ 쌓았습니다.
47
+ - 공개 릴리스 히스토리와 보안 지원 하한이 **11.0.0**으로 상향
48
+ (README 표 · `RELEASE_NOTES.md` · `SECURITY.md` · 해당 테스트 동시 수정).
49
+
50
+ ### Removed
51
+ - **Telegram 브리지** — 워커가 된 플랫폼 코드와 함께 삭제.
52
+ `latticeai.integrations.telegram_bot`은 임포트 불가 목록에 있습니다.
53
+ - **SSO OIDC 로그인/콜백 플로우** — 워커는 `/auth/*`를 마운트하지
54
+ 않습니다. 설정 표면은 유지되고 패스워드 로그인은 네이티브입니다.
55
+ - Python **298 파일 / 73,617줄**. 의존성 `authlib`, `cryptography`,
56
+ `watchdog`, `psycopg[binary]`와 extras `ann`/`hnsw`/`postgres`.
57
+ - `POST /worker/chat/record-turn`, `POST /agent/change-proposal` —
58
+ 둘 다 네이티브 경로가 대체했습니다.
59
+
60
+ ### Fixed
61
+ - KG write 4건: `kgv2_*` 뷰만 충돌 시 `type`을 갱신하던 문제,
62
+ `sort_keys` 없는 직렬화 2곳, 기본 JSON 구분자로 해시되던 `edge:`/
63
+ `event:` id.
64
+ - 리댁션 2건: `Authorization: Bearer …`가 실제로는 리댁션되지 않던 문제,
65
+ 아무것도 거절하지 않던 텔레그램 토큰 lookahead.
66
+ - 변경 제안 종류 화이트리스트가 `"reorganization"`과 비교해 **모든 폴더
67
+ 재구성 제안이 승인 불가**였던 문제(실제 상수는 `"folder_reorganization"`).
68
+ - `serde_json/preserve_order` 피처 통합으로 제품 빌드에서 `Map`이 삽입
69
+ 순서로 순회해 `sort_keys=True`를 자처하던 덤프가 정렬되지 않은
70
+ `metadata_json`을 쓰던 문제(읽으면 같고 해시는 다름).
71
+ - FastAPI ≥ 0.140에서 `include_router`가 더 이상 평탄화하지 않아 워커
72
+ 라우트 필터가 라우트를 0개로 보던 문제 — 휠에서 부팅 자체가 실패하고
73
+ 있었습니다.
74
+
75
+ ### Known issues
76
+ - 그대로 이식한 오라클 버그 3건(`/api/command/search` knowledge 그룹 항상
77
+ 비어 있음 · 리뷰 스누즈 offset-aware 500 · 제안 이중 거절 500),
78
+ 업로드 추출 UTF-8 전용, 공급 벡터 1차 노드 한정, 네이티브 도구의 사용자
79
+ 훅 미발화, `sanitize_write_content` 미적용, 워커 원점으로 남은 seam 호출
80
+ 3건. 전문은 [RELEASE_NOTES_v11.6.0.md](../RELEASE_NOTES_v11.6.0.md).
81
+
82
+ ## [11.5.2] - 2026-08-12 — Tight Ship
83
+
84
+ ### Added
85
+ - `POST /api/search/graph` — 세 번째 검색 채널의 라우트. 허용 목록에는
86
+ 있었지만 도달 경로가 없었습니다(감사 산출).
87
+ - `GET /api/ingestion/multimodal` — FEATURE_STATUS가 사용자 표면으로
88
+ 기술하던 멀티모달 상태 조회를 실제 라우트에 배선.
89
+ - 골든 신규 2계열(코퍼스 총 **251 파일**): 실제 `/chat`이 호출하는
90
+ `build_recent_chat_context`를 못박는 `recent_chat`, 그리고
91
+ `document_targets`/`agent_profiles` 헬퍼 97행.
92
+ - 재발 금지 가드: `latticeai/` 아래 `sys.modules[__name__]` shim 패턴
93
+ 금지(legacy-debt 게이트 확장).
94
+ - `scripts/bump_version.py`가 rust workspace **여섯 크레이트 전부**를
95
+ 두 Cargo.lock에서 동기화합니다(11.5.0 이후 Phase 2/3/4 크레이트 세
96
+ 개가 매 bump마다 스테일로 남아 테스트 실행이 트리를 더럽혔습니다).
97
+
98
+ ### Changed
99
+ - **워크스페이스 선택자 통합(동작 변경, 의도됨)**: chat/agent/upload/
100
+ computer-use/admin의 축자 재구현이 정본 규칙을 사용합니다 — 헤더와
101
+ 쿼리가 불일치하면 조용히 헤더를 택하는 대신 **403**.
102
+ - 임베더 byte-identical 쌍을 골든에 못박힌 사본으로 단일화(두 쓰기
103
+ 경로 사이의 조용한 벡터 드리프트가 실패 양식이었습니다).
104
+ - sha256 헬퍼·SSE 프레임 빌더(출력 byte-identical)·데이터 디렉터리
105
+ 기본값·모드 서비스 삼형제·모듈 임포트 프로브를 각각 한 곳으로.
106
+ - Rust byte-identical 사본 7건 통합(통째로 복사돼 있던 `clock.rs` 포함).
107
+ `lattice-agent`의 독립 `pystr`는 의도된 경계로 유지.
108
+ - `recent_chat` 골든이 실제 발산을 잡아냄: Python의 `limit=0` 꼬리
109
+ 슬라이스는 전부를 남기는데 Rust는 빈 결과를 돌려주고 있었습니다.
110
+ **Python이 기준**이며 Rust를 수정했습니다.
111
+
112
+ ### Fixed
113
+ - **프록시 리다이렉트**: 3xx가 `Set-Cookie`·`Location`을 온전히 달고
114
+ 통과합니다. 초대 게이트의 막다른 길, SSO 로그인이 조용히 인증되지
115
+ 않던 문제, 딥링크 12개의 프래그먼트 분실이 함께 해소됩니다. 내부
116
+ 워커 오리진을 가리키는 절대 `Location`은 게이트웨이 오리진으로
117
+ 재작성됩니다.
118
+ - **네이티브 레인 posture 게이팅(fail-closed)**: `/rust/*`와
119
+ `/host/status|jobs`는 워커가 인증을 요구하는 상태에서 그래프 전체를
120
+ 무인증으로 서빙하고 있었습니다. posture가 닫힘/알 수 없음이면 401.
121
+ - **프록시 신원**: `X-Forwarded-For/Proto/Host`가 홉을 건너가고, 루프백
122
+ 또는 `LATTICEAI_TRUSTED_PROXIES` 피어에서 온 것만 존중됩니다.
123
+ `--no-spawn` CSRF 거절과 내부 워커 포트를 적어 보내던 초대 링크·
124
+ 권한 알림·SSO 리다이렉트 URL이 고쳐집니다.
125
+ - 수퍼바이저가 CSRF 오리진과 나란히 CORS 오리진도 주입합니다.
126
+ - 존재하지 않는 WebSocket 엔드포인트를 가리키던 CSP `ws://` 항목 제거.
127
+ - 게이트웨이 바인드 실패 시 Tauri 셸이 죽은 오리진으로 이동하지 않습니다.
128
+
129
+ ### Removed
130
+ - 이사 간 모듈 shim 6종, 배선된 적 없는 멀티모달 스트리밍 시임,
131
+ 호출자 0 심볼 약 27개(삭제마다 테스트 수술 동반), 소비자 없는
132
+ `metadata_for` 인터페이스(ABC + 구현 4곳), 죽은 측정 스크립트,
133
+ 그리고 npm tarball에 아직 실려 나가던 **레거시 Electron 셸**
134
+ (Tauri가 대체) — 약 1,100줄.
135
+
7
136
  ## [11.5.1] - 2026-08-12 — Rust Full Loop
8
137
 
9
138
  ### Added
@@ -1,6 +1,6 @@
1
1
  # Community And Plugins
2
2
 
3
- Current release: **11.5.1 — Rust Full Loop**.
3
+ Current release: **11.6.0 — One Door**.
4
4
 
5
5
  LatticeAI defines the path from a strong local-first framework (8.4.0
6
6
  action-aware baseline, 8.5.0 registry+DI hardening, 8.6.0 capture/navigation
@@ -3,12 +3,13 @@
3
3
  > **Status: canonical** — current contributor guidance, kept in sync with the
4
4
  > current release.
5
5
 
6
- Current release: **11.5.1 — Rust Full Loop**.
6
+ Current release: **11.6.0 — One Door**.
7
7
 
8
8
  This document is for contributors working on the local-first Digital Brain
9
- codebase. Product positioning and quick start stay in `README.md`; release
10
- history is intentionally limited to 8.0.0-9.9.0 in `docs/CHANGELOG.md` and
11
- `RELEASE.md`.
9
+ codebase. Product positioning and quick start stay in `README.md`; supported
10
+ release history is 11.0.0 and later in `docs/CHANGELOG.md` and `RELEASE.md`
11
+ (11.6.0 rebuilt the product server in Rust, so `SECURITY.md` supports only
12
+ 11.x).
12
13
 
13
14
  ## Product Contract
14
15
 
@@ -20,8 +21,9 @@ Engineering work should preserve these boundaries:
20
21
  - the Brain is the durable asset;
21
22
  - models are replaceable voices;
22
23
  - SQLite is the live local Brain store;
23
- - PostgreSQL scale/migration tooling, Docker, cloud models, downloads, update checks, Telegram, and
24
- Brain Network are opt-in;
24
+ - Docker, cloud models, downloads, update checks and Brain Network are opt-in
25
+ (the PostgreSQL scale/migration tooling and the Telegram bridge left the tree
26
+ in 11.6.0 with the platform code that became the AI worker);
25
27
  - import-only paths must not initialize MLX/GPU, write files, or make network
26
28
  calls;
27
29
  - normal Brain use must stay separate from Admin/operator controls.
@@ -21,7 +21,8 @@ boundary honest (Community is never crippled to upsell Enterprise).
21
21
 
22
22
  ## The extension seam
23
23
 
24
- The seam lives in [`latticeai/core/enterprise.py`](../latticeai/core/enterprise.py):
24
+ The seam moved to Rust with the product server in 11.6.0 and now lives in
25
+ [`rust/lattice-platform/src/admin/enterprise.rs`](../rust/lattice-platform/src/admin/enterprise.rs):
25
26
 
26
27
  - `Edition` — `community` (default) or `enterprise`.
27
28
  - `EnterpriseCapability` — the enum of reserved capabilities (below).
@@ -43,10 +43,14 @@ POST /api/network-boundary/policy
43
43
  Users approve cloud-derived memory growth in the existing Review Center.
44
44
 
45
45
  ### Multimodal / video
46
- `latticeai/services/multimodal_streaming.py`:
47
- - Same `NetworkBoundaryMode.CLOUD_ALLOWED` gate
48
- - Additional `allow_multimodal` policy flag
49
- - Adapter protocol for future Runway/Luma/Veo-compatible providers
46
+ There is no cloud multi-modal *streaming* path. A `multimodal_streaming` module
47
+ was written to a provider-adapter shape and never wired to a provider or a
48
+ route; 11.5.2 deleted it rather than keep a design sketch reading as a feature.
49
+
50
+ Multi-modal ingestion itself is local and unrelated to this document's cloud
51
+ boundary — see `lattice_brain/ingestion/routing.py` and the `allow_multimodal`
52
+ gate. If a cloud video provider ever lands, the module is recoverable from git
53
+ history (`latticeai/services/multimodal_streaming.py`, removed in 11.5.2).
50
54
 
51
55
  ### UI
52
56
  `NetworkBoundaryPanel` (React) + `GET /api/network-boundary/ui-state`:
@@ -2,14 +2,21 @@
2
2
 
3
3
  The Multi-Agent Runtime is the **orchestration layer** introduced in v2.0.0 and
4
4
  operationalized in v2.2.0. It sits
5
- *above* the v1.x single-agent state machine ([`SingleAgentRuntime`](../latticeai/core/agent/runtime.py))
5
+ *above* the single-agent state machine, which since 11.6.0 is the Rust loop
6
+ orchestrator ([`lattice_agent::agentloop`](../rust/lattice-agent/src/agentloop/mod.rs))
6
7
  and coordinates a pipeline of named **roles** that hand off work to one another,
7
8
  retry on a failing review, and emit a fully observable, replayable timeline.
8
9
 
9
- - **Source of truth:** `latticeai/core/multi_agent.py`
10
- - **HTTP surface:** `latticeai/api/agents.py`
11
- - **Persistence / Knowledge Graph integration:** `latticeai/core/workspace_os.py`
12
- (`WorkspaceOSStore.record_agent_run`, `replay_agent_run`, `list_handoffs`)
10
+ - **Source of truth:** `rust/lattice-platform/src/agents.rs` (the orchestration
11
+ routes) over `rust/lattice-agent/src/agentloop/` (the state machine)
12
+ - **HTTP surface:** the `agents` family, mounted by `lattice-platform`
13
+ - **Persistence:** `rust/lattice-platform/src/review_queue.rs` — the same
14
+ `workspace_os.json` document the Review Center reads
15
+
16
+ > **Moved in 11.6.0.** The Python modules this page used to name
17
+ > (`lattice_brain/runtime/multi_agent.py`, `latticeai/api/agents.py`,
18
+ > `latticeai/core/workspace_os.py`) were deleted when the product server became
19
+ > Rust. The behaviour described below is served natively.
13
20
 
14
21
  ```python
15
22
  MULTI_AGENT_VERSION = "2.2.0"
@@ -1,6 +1,6 @@
1
1
  # Lattice AI Onboarding
2
2
 
3
- Current release: **11.5.1 — Rust Full Loop**.
3
+ Current release: **11.6.0 — One Door**.
4
4
 
5
5
  The first-run goal is a five-minute path from "I opened the app" to "my Brain
6
6
  has a source, a question, and proof." This page is the product contract behind
@@ -1,4 +1,4 @@
1
- # Lattice AI — Operations Guide (v11.5.1)
1
+ # Lattice AI — Operations Guide (v11.6.0)
2
2
 
3
3
  > **Status: canonical** — kept in sync with the current release. Storage layout
4
4
  > below reflects the SQLite live Brain store and workspace scoping, not the
@@ -136,8 +136,11 @@ pip install --upgrade ltcai
136
136
  - [ ] `CSRF_TRUSTED_ORIGINS` 화이트리스트 설정
137
137
  - [ ] `ALLOWED_COMMANDS` 검토 — python3/node 등 불필요한 실행 도구 제거
138
138
  - [ ] 방화벽으로 4825 포트를 프록시만 접근 허용
139
- - [ ] Telegram 활성화 시 `LATTICEAI_TELEGRAM_ALLOWED_CHAT_IDS`와
140
- `LATTICEAI_SERVER_SESSION_TOKEN` 설정
139
+ > **11.6.0 변경**: Telegram 브리지가 제거되어 `LATTICEAI_TELEGRAM_*`는 더 이상
140
+ > 읽히지 않습니다. SSO OIDC 로그인/콜백 플로우도 함께 제거되었습니다 — 설정
141
+ > 표면은 남아 있고 패스워드 로그인은 네이티브(`lattice-auth`)입니다. 외부 OIDC
142
+ > 공급자로 사용자를 인증하던 배포는 해당 플로우가 이식될 때까지 11.5.2에
143
+ > 머무르십시오.
141
144
 
142
145
  ## 8. 사용자 데이터 격리
143
146
 
@@ -5,7 +5,7 @@ Realtime Collaboration is the subsystem that gives a Lattice AI workspace a live
5
5
  workspace-scoped execution observability for agents, handoffs, reviews,
6
6
  workflows, plugins, retries, and failures. It is delivered over Server-Sent
7
7
  Events (SSE) by an in-process pub/sub bus, the
8
- [`RealtimeBus`](../latticeai/core/realtime.py).
8
+ [`RealtimeBus`](../rust/lattice-platform/src/realtime.rs), native since 11.6.0.
9
9
 
10
10
  The design goal is to surface "what is happening in the workspace right now"
11
11
  (workspaces created, graphs indexed, agents and workflows run, plugins enabled,
@@ -1,6 +1,6 @@
1
1
  # Lattice AI Trust Model
2
2
 
3
- Current release: **11.5.1 — Rust Full Loop**.
3
+ Current release: **11.6.0 — One Door**.
4
4
 
5
5
  Lattice AI is local-first, explicit about external communication, and honest
6
6
  when a capability is unavailable.
@@ -1,6 +1,6 @@
1
1
  # Why Lattice AI Exists
2
2
 
3
- Current release: **11.5.1 — Rust Full Loop**.
3
+ Current release: **11.6.0 — One Door**.
4
4
 
5
5
  **Lattice AI is a local-first Digital Brain that keeps your knowledge durable
6
6
  across any AI model.**
@@ -8,9 +8,10 @@ node to an injected *runner* that calls the real tool registry, skill registry,
8
8
  plugin registry, or multi-agent orchestrator.
9
9
 
10
10
  The execution model lives in
11
- [`latticeai/core/workflow_engine.py`](../latticeai/core/workflow_engine.py)
11
+ [`rust/lattice-platform/src/workflow_designer/definition.rs`](../rust/lattice-platform/src/workflow_designer/definition.rs)
12
12
  (pure logic with injected runners) and the HTTP surface lives in
13
- [`latticeai/api/workflow_designer.py`](../latticeai/api/workflow_designer.py).
13
+ [`rust/lattice-platform/src/workflow_designer/handlers.rs`](../rust/lattice-platform/src/workflow_designer/handlers.rs).
14
+ Both moved from Python in 11.6.0.
14
15
  Persistence reuses the existing `WorkspaceOSStore`, so pre-2.0 workflow history
15
16
  is preserved.
16
17
 
@@ -7,10 +7,10 @@
7
7
  > are intentionally frozen at that point in time.
8
8
 
9
9
  > v3.6.0 — **Knowledge Graph First.** Every data source converges into the graph
10
- > through one unified ingestion pipeline (`latticeai/services/ingestion.py`), with
10
+ > through one unified ingestion pipeline (`lattice_brain/ingestion/pipeline.py`), with
11
11
  > formalized entities/relationships (`docs/kg-schema.md`), browser/web inputs,
12
12
  > per-node provenance, and local export/import/backup
13
- > (`latticeai/services/kg_portability.py`). The agent ecosystem, long-term memory,
13
+ > (`lattice_brain/portability/`). The agent ecosystem, long-term memory,
14
14
  > and skills/hooks/tool/MCP registries are all operable from `/app`. Enterprise
15
15
  > controls remain future work.
16
16
 
@@ -158,8 +158,8 @@ Basic mode and advanced mode have the same feature access.
158
158
  | `knowledge_graph.py` | Graph storage, extraction, local folder knowledge graph context |
159
159
  | `latticeai/core/context_builder.py` | Graph context for generation |
160
160
  | `latticeai/core/workspace_os.py` | Workspace state, timeline, snapshots, durable context |
161
- | `latticeai/core/multi_agent.py` | Planner/executor/reviewer/researcher orchestration |
162
- | `latticeai/core/workflow_engine.py` | Workflow definitions and run history |
161
+ | `lattice_brain/runtime/multi_agent.py` | Planner/executor/reviewer/researcher orchestration |
162
+ | `lattice_brain/workflow.py` | Workflow definitions and run history |
163
163
  | `latticeai/core/plugins.py` | Plugin manifest, registry, permission boundary |
164
164
  | `latticeai/core/security.py` | Local security primitives |
165
165
 
package/docs/kg-schema.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Knowledge Graph Schema
2
2
 
3
- Current release: **11.5.1 — Rust Full Loop**.
3
+ Current release: **11.6.0 — One Door**.
4
4
 
5
5
  명세 출처: `lattice_ai_full_spec.pptx` 슬라이드 20·21·22
6
6
  구현: `lattice_brain/graph/schema.py`
@@ -0,0 +1,144 @@
1
+ # v11.5.2 — Tight Ship (design plan)
2
+
3
+ Three audits ran against the settled v11.5.1 tree: AUDIT-A (Rust↔Python
4
+ duplication map), AUDIT-B (dead code and no-longer-needed tests, arc-level
5
+ verified against the 100% line+branch gate), AUDIT-C (live front-door parity:
6
+ Rust gateway vs. direct Python worker, 192-endpoint sweep plus targeted
7
+ batteries). This plan is the design synthesis; implementation is delegated in
8
+ two waves. Nothing in this release changes the migration's final form: Python
9
+ remains the AI Worker and the sole client-facing implementation of every
10
+ `/api/*` route; the Rust surface stays pinned by parity goldens.
11
+
12
+ ## Audit verdicts that shape the release
13
+
14
+ 1. **Cross-boundary duplication is all by design.** Every Rust module's Python
15
+ twin either serves a live route in Python-direct mode or feeds a parity
16
+ golden. Zero cross-boundary deletions. The real duplication is intra-Python
17
+ and intra-Rust.
18
+ 2. **The dead code is pre-Rust debt.** Six moved-module shims with zero
19
+ non-test importers, one never-wired streaming seam, and 27 zero-caller
20
+ symbols whose only callers are their own tests ("dead code wearing a
21
+ test" — invisible to the coverage gate by construction).
22
+ 3. **The 183 `test_cov_wp*` files are all load-bearing.** Ten look deletable
23
+ by line analysis and are collectively sole owners of 79 branch arcs. The
24
+ seven coverage-redundant feature-test files carry behavioural regression
25
+ value and are deliberately kept.
26
+ 4. **The front door has seven real gaps (G1–G7)**, one of which (Set-Cookie
27
+ destroyed on proxied redirects) makes the invite gate a hard dead-end and
28
+ silently breaks SSO login.
29
+
30
+ ## Workstream 1 — deletions (paired, gate-preserving)
31
+
32
+ - Six moved-module shims: `latticeai/core/{graph_curator,hooks,multi_agent,workflow_engine}.py`,
33
+ `latticeai/services/{ingestion,kg_portability}.py` + the shim-existence
34
+ tests + their `[tool.mypy] files` entries.
35
+ - `latticeai/services/multimodal_streaming.py` (never wired; restorable from
36
+ git if a provider ever lands).
37
+ - 25 of AUDIT-B's 27 dead symbols, with per-test surgery on the enumerated
38
+ collateral lines so `fail_under = 100` (lines AND branch arcs) holds.
39
+ Decisions on the three flagged items: `delete_conversation` **stays**
40
+ (public store API, exercised as a fixture by the read-equivalence suite);
41
+ `propose_file_delete` **goes together with** the now-uncreatable
42
+ `file_delete` limb of `approve()`; `multimodal_status` **is wired, not
43
+ deleted** (Workstream 3) — FEATURE_STATUS already documents it as
44
+ user-facing behaviour.
45
+ - `metadata_for` interface method (declared on the vector-index ABC,
46
+ implemented four times, called zero times) — removed from ABC and all
47
+ four implementations.
48
+ - `scripts/measure_brain_home_fill.mjs`, `tests/fixtures/filegen/` (12 unread
49
+ data files), and the legacy `desktop/electron/` shell (hardcodes 4825,
50
+ injects none of the safety flags, superseded by Tauri) after verifying it is
51
+ not referenced by any release artifact or workflow.
52
+ - A new guard extends the legacy-shim gate inward: no
53
+ `sys.modules[__name__] = _impl` shim may exist under `latticeai/` again.
54
+
55
+ ## Workstream 2 — consolidation (behaviour-preserving unless stated)
56
+
57
+ Python (the canonical copy is named; the direction always keeps
58
+ `lattice_brain` import-free of `latticeai`):
59
+
60
+ - **Embedder pair**: `latticeai/core/local_embeddings.py` is byte-identical to
61
+ the golden-pinned `lattice_brain/embeddings.py`. The unpinned copy is
62
+ deleted and importers rewired — silent vector drift between two write paths
63
+ was the failure mode.
64
+ - **`workspace_scope_from_request`**: the four verbatim re-derivations
65
+ (`chat_helpers`, `upload_service`, `computer_use`, `admin`) import the
66
+ canonical `api/workspace_scope.py`. Behaviour change, intended: the copies
67
+ silently preferred the header where the canonical rule 403s on
68
+ disagreement.
69
+ - `_default_data_dir` ×4 → `core/config.py`; sha256-hex ×6 → one helper;
70
+ SSE frame builders ×5 → one `sse_frame` (byte-identical output);
71
+ `model_runtime/engines.py` delegator/dead-fragment cleanup;
72
+ the AST-identical mode-service triplet → a `JsonBackedModeService` base;
73
+ module-importability ×4 → one helper (`find_spec` default, real-import
74
+ `strict=True` kept where native-lib load failures matter, e.g. mlx);
75
+ `parse_iso` → `lattice_brain/utils` (the golden-pinned copy);
76
+ `_detect_gpu`/`_detect_cpu` → `setup/wizard/detect.py`; the small ×2
77
+ helpers and the workspace-store mixin where mechanical.
78
+
79
+ Rust: `gateway/clock.rs` (wholesale copy) deleted in favour of
80
+ `lattice_retrieval::routes::naive_local_now`; `brain_not_found` shared;
81
+ `haystack`/`json_opt` lifted into `shape.rs`; `in_set`/`bad_request` lifted
82
+ within `lattice-agent`; `is_py_space`/`round3` shared from `lattice-core` into
83
+ `lattice-ingest`. `lattice-agent`'s independent `pystr` stays — its
84
+ zero-dependency isolation is a deliberate boundary.
85
+
86
+ Deliberately **not** done in a patch release: splitting the three oversized
87
+ route factories (`create_workspace_router` 706 lines et al.) — recorded as
88
+ future work, not silently dropped.
89
+
90
+ ## Workstream 3 — front-door and feature gaps
91
+
92
+ - **G1/G4 (redirects)**: the proxy gets its own reqwest client with redirect
93
+ following disabled; 3xx responses pass through with their `Set-Cookie` and
94
+ `Location` intact; absolute `Location` values naming the internal worker
95
+ origin are rewritten to the request's gateway origin. Fixes the invite
96
+ gate, SSO login, and the twelve legacy deep links.
97
+ - **G2/G3 (native-lane auth)**: the native `/rust/*` and `/host/*` lanes
98
+ mirror Python's `trusted_local_owner` posture exactly. The worker's health
99
+ payload gains the posture facts; the gateway caches them from its existing
100
+ health polling and **fails closed** (posture unknown → native lanes refuse).
101
+ With `LATTICEAI_REQUIRE_AUTH=true` the native lanes answer 401 with a
102
+ machine-readable reason instead of serving the graph unauthenticated (G2)
103
+ or dying mid-loop on a seam 401 (G3). FEATURE_STATUS states the boundary:
104
+ the native lanes are an open-posture, single-local-owner surface in 11.5.2.
105
+ - **G5/G7 (proxied identity)**: the proxy adds `X-Forwarded-For/Proto/Host`;
106
+ the worker computes its effective external origin from `X-Forwarded-Host`
107
+ only when the direct peer is loopback or listed in
108
+ `LATTICEAI_TRUSTED_PROXIES`. CSRF's `Origin == Host` fallback and the three
109
+ absolute-URL producers (admin invite link, permission notifications, SSO
110
+ redirect default) use it. Threat model note: browsers cannot set
111
+ `X-Forwarded-Host`, and a local non-browser caller could already forge
112
+ `Origin`, so this widens nothing.
113
+ - **G6 (CORS)**: the supervisor injects `LATTICEAI_CORS_ALLOWED_ORIGINS` with
114
+ the gateway origins, mirroring the CSRF injection — the browser extension
115
+ and any cross-origin local client work through the front door.
116
+ - **Feature gaps surfaced by the audits**: `graph_search` gains its missing
117
+ route (`POST /api/search/graph` — it was allow-listed but unreachable);
118
+ `multimodal_status` is wired to the route FEATURE_STATUS describes; the
119
+ `recent_chat` context seam is investigated and either wired into the live
120
+ assembler or the golden amended to match reality (whichever the original
121
+ intent supports — the current state, a golden pinning behaviour the product
122
+ never executes, is the one option that stays wrong); `tools/documents.py`
123
+ and `core/agent_profiles.py` — live `/agent` hot-path twins with no golden —
124
+ enter the fixture generators.
125
+ - Small honest fixes: stale `ws://` removed from both CSPs (no WebSocket
126
+ endpoint exists); the Tauri shell no longer navigates to a dead origin when
127
+ the gateway fails to bind.
128
+
129
+ Recorded, not fixed (with reasons): no request timeout on the proxy hop (a
130
+ blanket timeout would kill long-lived SSE; the 15-minute model endpoints rely
131
+ on the current behaviour), `request.is_disconnected()` seeing the gateway's
132
+ socket (inherent to proxying), per-IP buckets collapsing on loopback (the
133
+ gateway is loopback-only; the direct topology behaved identically).
134
+
135
+ ## Release mechanics
136
+
137
+ Both waves verified on the settled tree (dev 3.14 + fresh-resolve 3.11) before
138
+ the machinery runs: bump to 11.5.2 (Cargo.lock joins the sync so the suite
139
+ stops dirtying the tree), OpenAPI regenerated (new routes), release theme
140
+ "Tight Ship", OPERATIONS title, screen-claims entry (backend-only:
141
+ all thirteen measured, none gated), release notes / CHANGELOG / README /
142
+ extension README, screenshots + GIF re-shot at 11.5.2, ARCHITECTURE System
143
+ Map labels updated (proxy semantics, posture-gated native lanes), DMG via
144
+ release:artifacts, tag + GitHub Release, main push, CI green.