ltcai 11.5.2 → 11.7.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 (443) hide show
  1. package/README.md +93 -148
  2. package/bin/ltcai.js +234 -24
  3. package/docs/CHANGELOG.md +119 -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/MULTI_AGENT_RUNTIME.md +12 -5
  8. package/docs/ONBOARDING.md +1 -1
  9. package/docs/OPERATIONS.md +6 -3
  10. package/docs/REALTIME_COLLABORATION.md +1 -1
  11. package/docs/TRUST_MODEL.md +1 -1
  12. package/docs/WHY_LATTICE.md +1 -1
  13. package/docs/WORKFLOW_DESIGNER.md +3 -2
  14. package/docs/kg-schema.md +1 -1
  15. package/docs/v11.6.0_ONE_DOOR_PLAN.md +170 -0
  16. package/lattice_brain/__init__.py +42 -79
  17. package/lattice_brain/graph/__init__.py +9 -24
  18. package/lattice_brain/graph/_kg_common/__init__.py +13 -24
  19. package/lattice_brain/ingestion/__init__.py +19 -58
  20. package/lattice_brain/ingestion/pipeline.py +20 -398
  21. package/lattice_brain/multimodal/__init__.py +7 -18
  22. package/lattice_brain/multimodal/images.py +6 -264
  23. package/lattice_brain/multimodal/video.py +8 -247
  24. package/lattice_brain/runtime/__init__.py +8 -79
  25. package/lattice_brain/runtime/hooks.py +22 -584
  26. package/latticeai/__init__.py +1 -1
  27. package/latticeai/api/agent_worker_seam.py +7 -80
  28. package/latticeai/api/health.py +6 -20
  29. package/latticeai/api/local_files.py +16 -613
  30. package/latticeai/api/models.py +12 -87
  31. package/latticeai/api/search.py +17 -255
  32. package/latticeai/api/tools.py +69 -750
  33. package/latticeai/api/voice_capture.py +8 -70
  34. package/latticeai/api/worker_compute.py +842 -0
  35. package/latticeai/api/worker_seams.py +216 -0
  36. package/latticeai/app_factory.py +23 -232
  37. package/latticeai/cli/entrypoint.py +36 -249
  38. package/latticeai/core/agent_permission.py +16 -91
  39. package/latticeai/core/messages.py +89 -531
  40. package/latticeai/runtime/access_runtime.py +0 -14
  41. package/latticeai/runtime/bootstrap.py +10 -21
  42. package/latticeai/runtime/brain_runtime.py +35 -43
  43. package/latticeai/runtime/build_phases/__init__.py +21 -37
  44. package/latticeai/runtime/build_phases/features.py +99 -389
  45. package/latticeai/runtime/build_phases/foundation.py +82 -392
  46. package/latticeai/runtime/build_phases/web.py +91 -408
  47. package/latticeai/runtime/build_phases/worker_profile.py +244 -0
  48. package/latticeai/runtime/lifespan_runtime.py +7 -16
  49. package/latticeai/runtime/platform_services_runtime.py +1 -15
  50. package/latticeai/runtime/runtime_context.py +13 -130
  51. package/latticeai/runtime/security_runtime.py +10 -103
  52. package/latticeai/services/architecture_readiness.py +82 -43
  53. package/latticeai/services/model_runtime/__init__.py +2 -11
  54. package/latticeai/services/model_runtime/service.py +4 -28
  55. package/latticeai/services/p_reinforce.py +10 -261
  56. package/latticeai/services/product_readiness.py +31 -38
  57. package/latticeai/services/search_service.py +37 -795
  58. package/latticeai/services/tool_dispatch.py +30 -386
  59. package/latticeai/services/voice_capture.py +13 -107
  60. package/latticeai/tools/__init__.py +22 -49
  61. package/latticeai/tools/commands.py +0 -163
  62. package/latticeai/tools/computer.py +0 -39
  63. package/latticeai/tools/documents.py +1 -134
  64. package/latticeai/tools/filesystem.py +1 -247
  65. package/latticeai/tools/knowledge.py +1 -52
  66. package/latticeai/tools/local_files.py +0 -20
  67. package/latticeai/worker_app.py +75 -0
  68. package/package.json +2 -3
  69. package/requirements.txt +0 -5
  70. package/scripts/agent_eval.py +16 -28
  71. package/scripts/brain_quality_eval.py +20 -183
  72. package/scripts/bump_version.py +5 -5
  73. package/scripts/check_current_release_docs.mjs +7 -4
  74. package/scripts/check_openapi_drift.mjs +10 -0
  75. package/scripts/check_server_i18n.mjs +2 -18
  76. package/scripts/compose_openapi.py +377 -0
  77. package/scripts/export_openapi.py +32 -4
  78. package/scripts/gen_messages_catalog_fixture.py +302 -0
  79. package/scripts/gen_openapi_fragments.py +365 -0
  80. package/scripts/gen_redact_fixture.py +196 -0
  81. package/scripts/gen_worker_allowlist_fixture.py +115 -0
  82. package/scripts/generate_agent_parity_fixtures.py +33 -14
  83. package/scripts/openapi_route_families.json +2161 -0
  84. package/scripts/release_screen_claims.json +54 -0
  85. package/scripts/run_integration_tests.mjs +134 -29
  86. package/scripts/run_sidecar_e2e.mjs +104 -11
  87. package/scripts/wheel_smoke.py +32 -22
  88. package/src-tauri/Cargo.lock +375 -9
  89. package/src-tauri/Cargo.toml +1 -1
  90. package/src-tauri/src/backend.rs +151 -45
  91. package/src-tauri/src/main.rs +18 -18
  92. package/src-tauri/src/topology.rs +58 -88
  93. package/src-tauri/tauri.conf.json +1 -2
  94. package/static/app/asset-manifest.json +41 -41
  95. package/static/app/assets/{Act-DcQizkl1.js → Act-BPcVAbOL.js} +1 -1
  96. package/static/app/assets/AdminConsole-Bw1ATQL0.js +1 -0
  97. package/static/app/assets/{Brain-3VCSHFcn.js → Brain-CT92Kos0.js} +2 -2
  98. package/static/app/assets/{BrainHome-Qm8eaztx.js → BrainHome-CFBkt1K_.js} +1 -1
  99. package/static/app/assets/{BrainSignals-DS9BtKOW.js → BrainSignals-ReLWF2H8.js} +1 -1
  100. package/static/app/assets/Capture-BsTokYkk.js +1 -0
  101. package/static/app/assets/{Chronicle-BGvuAchH.js → Chronicle-B6f0T9id.js} +1 -1
  102. package/static/app/assets/{CommandPalette-Bqhm0Urn.js → CommandPalette-CuvjTv1u.js} +1 -1
  103. package/static/app/assets/{Library-BV6NnF0a.js → Library-BGJbG9Hd.js} +1 -1
  104. package/static/app/assets/{LivingBrain-GzenJchP.js → LivingBrain-DGYK_Jsa.js} +1 -1
  105. package/static/app/assets/{ProductFlow-DEP6-vML.js → ProductFlow-DXBC6brE.js} +1 -1
  106. package/static/app/assets/{ReviewCard-CNZ7XjWG.js → ReviewCard-HXRle3qq.js} +2 -2
  107. package/static/app/assets/System-CMHSO9qM.js +1 -0
  108. package/static/app/assets/arrow-left-BfmkskWx.js +1 -0
  109. package/static/app/assets/{bot-B_K1Tdmw.js → bot-Cn8bWRuq.js} +1 -1
  110. package/static/app/assets/{brain-DWyaV1L1.js → brain-CQJberbE.js} +1 -1
  111. package/static/app/assets/{button-aTn4s84A.js → button-Ct9f2_oT.js} +1 -1
  112. package/static/app/assets/circle-check-DruOxB-4.js +1 -0
  113. package/static/app/assets/{circle-pause-xKgeGXkT.js → circle-pause-CmzC_apg.js} +1 -1
  114. package/static/app/assets/{circle-play-DkT6tYPX.js → circle-play-D8mW2aQ7.js} +1 -1
  115. package/static/app/assets/{cpu-85xYObUC.js → cpu-DZcdd0PZ.js} +1 -1
  116. package/static/app/assets/{download-B5Fm7YXo.js → download-bv1KEPGQ.js} +1 -1
  117. package/static/app/assets/{folder-open-kk2Xa52u.js → folder-open-d-Pip5gr.js} +1 -1
  118. package/static/app/assets/{hard-drive-DkA3zBW_.js → hard-drive-D20iavUb.js} +1 -1
  119. package/static/app/assets/index-D9x-kSNy.css +2 -0
  120. package/static/app/assets/{index-BMPdTmlY.js → index-Do83hDzJ.js} +3 -3
  121. package/static/app/assets/{input-B0nRf2jO.js → input-BLXVNmj1.js} +1 -1
  122. package/static/app/assets/{link-2-Dwb4gnTc.js → link-2-BPJOFlAy.js} +1 -1
  123. package/static/app/assets/{permissionCopy-CQDUBrOZ.js → permissionCopy-ChdJd493.js} +1 -1
  124. package/static/app/assets/primitives-Cv5tbZBY.js +1 -0
  125. package/static/app/assets/search-CT9aho2j.js +1 -0
  126. package/static/app/assets/{share-2-BsrxFglO.js → share-2-YNX_NtMU.js} +1 -1
  127. package/static/app/assets/{shield-alert-5BStfp2_.js → shield-alert-DuQ3zrVL.js} +1 -1
  128. package/static/app/assets/{textarea-Cg8IUA-k.js → textarea-DqwLnli4.js} +1 -1
  129. package/static/app/assets/{useFocusTrap-CYKvE46M.js → useFocusTrap-ZVI98jaW.js} +1 -1
  130. package/static/app/assets/{useMutation-CSn9t1op.js → useMutation-CVC4qv_D.js} +1 -1
  131. package/static/app/assets/{useQuery-CY2OI2uy.js → useQuery-C7BeG4HU.js} +1 -1
  132. package/static/app/assets/{utils-Ddol2RWD.js → utils-CiFtIdZq.js} +1 -1
  133. package/static/app/assets/{workspace-BqDwOz_p.js → workspace-DQz9vIId.js} +1 -1
  134. package/static/app/index.html +4 -4
  135. package/static/sw.js +1 -1
  136. package/lattice_brain/archive.py +0 -522
  137. package/lattice_brain/context.py +0 -325
  138. package/lattice_brain/conversations.py +0 -382
  139. package/lattice_brain/core.py +0 -82
  140. package/lattice_brain/graph/_kg_contract.py +0 -249
  141. package/lattice_brain/graph/curator.py +0 -676
  142. package/lattice_brain/graph/discovery.py +0 -595
  143. package/lattice_brain/graph/discovery_index/__init__.py +0 -35
  144. package/lattice_brain/graph/discovery_index/cleanup.py +0 -182
  145. package/lattice_brain/graph/discovery_index/extract.py +0 -137
  146. package/lattice_brain/graph/discovery_index/scan.py +0 -411
  147. package/lattice_brain/graph/discovery_index/upsert.py +0 -495
  148. package/lattice_brain/graph/documents.py +0 -380
  149. package/lattice_brain/graph/fusion.py +0 -395
  150. package/lattice_brain/graph/identity.py +0 -175
  151. package/lattice_brain/graph/image_vectors.py +0 -230
  152. package/lattice_brain/graph/ingest.py +0 -829
  153. package/lattice_brain/graph/network.py +0 -205
  154. package/lattice_brain/graph/proactive.py +0 -724
  155. package/lattice_brain/graph/projection/__init__.py +0 -42
  156. package/lattice_brain/graph/projection/curation.py +0 -500
  157. package/lattice_brain/graph/projection/v2_schema.py +0 -518
  158. package/lattice_brain/graph/provenance.py +0 -524
  159. package/lattice_brain/graph/rerank.py +0 -163
  160. package/lattice_brain/graph/retrieval/__init__.py +0 -54
  161. package/lattice_brain/graph/retrieval/context.py +0 -197
  162. package/lattice_brain/graph/retrieval/graph_view.py +0 -319
  163. package/lattice_brain/graph/retrieval/hybrid.py +0 -488
  164. package/lattice_brain/graph/retrieval/maintenance.py +0 -121
  165. package/lattice_brain/graph/retrieval/signals.py +0 -95
  166. package/lattice_brain/graph/retrieval_docgen.py +0 -253
  167. package/lattice_brain/graph/retrieval_policy.py +0 -180
  168. package/lattice_brain/graph/retrieval_reads.py +0 -769
  169. package/lattice_brain/graph/retrieval_vector/__init__.py +0 -42
  170. package/lattice_brain/graph/retrieval_vector/fingerprint.py +0 -97
  171. package/lattice_brain/graph/retrieval_vector/indexing.py +0 -347
  172. package/lattice_brain/graph/retrieval_vector/search.py +0 -560
  173. package/lattice_brain/graph/retrieval_vector/status.py +0 -374
  174. package/lattice_brain/graph/schema.py +0 -792
  175. package/lattice_brain/graph/store.py +0 -268
  176. package/lattice_brain/graph/vector_index/__init__.py +0 -85
  177. package/lattice_brain/graph/vector_index/base.py +0 -167
  178. package/lattice_brain/graph/vector_index/brute_force.py +0 -110
  179. package/lattice_brain/graph/vector_index/hnsw.py +0 -290
  180. package/lattice_brain/graph/vector_index/jobs.py +0 -287
  181. package/lattice_brain/graph/vector_index/quantized.py +0 -148
  182. package/lattice_brain/graph/vector_index/selector.py +0 -161
  183. package/lattice_brain/graph/write_master.py +0 -308
  184. package/lattice_brain/ingestion/_contract.py +0 -90
  185. package/lattice_brain/ingestion/folder_scan.py +0 -57
  186. package/lattice_brain/ingestion/folders.py +0 -258
  187. package/lattice_brain/ingestion/jobs_api.py +0 -107
  188. package/lattice_brain/ingestion/routing.py +0 -295
  189. package/lattice_brain/ingestion_jobs.py +0 -380
  190. package/lattice_brain/memory.py +0 -75
  191. package/lattice_brain/portability/__init__.py +0 -90
  192. package/lattice_brain/portability/_contract.py +0 -42
  193. package/lattice_brain/portability/backups.py +0 -338
  194. package/lattice_brain/portability/bundles.py +0 -136
  195. package/lattice_brain/portability/constants.py +0 -93
  196. package/lattice_brain/portability/fsops.py +0 -138
  197. package/lattice_brain/portability/service.py +0 -41
  198. package/lattice_brain/portability/sharing.py +0 -710
  199. package/lattice_brain/quality.py +0 -543
  200. package/lattice_brain/retrieval_benchmark_fixtures.py +0 -92
  201. package/lattice_brain/runtime/agent_runtime.py +0 -859
  202. package/lattice_brain/runtime/contracts.py +0 -460
  203. package/lattice_brain/runtime/multi_agent.py +0 -942
  204. package/lattice_brain/runtime/statuses.py +0 -10
  205. package/lattice_brain/sealed_box.py +0 -240
  206. package/lattice_brain/self_model.py +0 -675
  207. package/lattice_brain/sensitivity.py +0 -94
  208. package/lattice_brain/storage/__init__.py +0 -22
  209. package/lattice_brain/storage/base.py +0 -100
  210. package/lattice_brain/storage/docker.py +0 -105
  211. package/lattice_brain/storage/factory.py +0 -31
  212. package/lattice_brain/storage/migration.py +0 -191
  213. package/lattice_brain/storage/postgres.py +0 -123
  214. package/lattice_brain/storage/sqlite.py +0 -143
  215. package/lattice_brain/synthesis.py +0 -824
  216. package/lattice_brain/workflow.py +0 -497
  217. package/latticeai/api/admin.py +0 -471
  218. package/latticeai/api/agent_registry.py +0 -105
  219. package/latticeai/api/agents.py +0 -228
  220. package/latticeai/api/auth.py +0 -383
  221. package/latticeai/api/automation_intelligence.py +0 -401
  222. package/latticeai/api/brain_intelligence.py +0 -199
  223. package/latticeai/api/browser.py +0 -493
  224. package/latticeai/api/change_proposals.py +0 -89
  225. package/latticeai/api/chat.py +0 -572
  226. package/latticeai/api/chat_agent_http.py +0 -892
  227. package/latticeai/api/chat_contracts.py +0 -73
  228. package/latticeai/api/chat_documents.py +0 -276
  229. package/latticeai/api/chat_helpers.py +0 -460
  230. package/latticeai/api/chat_history.py +0 -101
  231. package/latticeai/api/chat_hybrid.py +0 -113
  232. package/latticeai/api/chat_intents.py +0 -646
  233. package/latticeai/api/chat_stream.py +0 -216
  234. package/latticeai/api/chronicle.py +0 -63
  235. package/latticeai/api/command_center.py +0 -51
  236. package/latticeai/api/computer_use.py +0 -474
  237. package/latticeai/api/evidence_actions.py +0 -48
  238. package/latticeai/api/features.py +0 -70
  239. package/latticeai/api/funnel_metrics.py +0 -31
  240. package/latticeai/api/garden.py +0 -34
  241. package/latticeai/api/hooks.py +0 -165
  242. package/latticeai/api/index_jobs.py +0 -145
  243. package/latticeai/api/invitations.py +0 -100
  244. package/latticeai/api/knowledge_graph.py +0 -536
  245. package/latticeai/api/marketplace.py +0 -105
  246. package/latticeai/api/mcp.py +0 -482
  247. package/latticeai/api/memory.py +0 -270
  248. package/latticeai/api/network.py +0 -81
  249. package/latticeai/api/network_boundary.py +0 -225
  250. package/latticeai/api/permission_mode.py +0 -61
  251. package/latticeai/api/permissions.py +0 -436
  252. package/latticeai/api/plugins.py +0 -126
  253. package/latticeai/api/portability.py +0 -391
  254. package/latticeai/api/project_sessions.py +0 -114
  255. package/latticeai/api/realtime.py +0 -118
  256. package/latticeai/api/review_queue.py +0 -364
  257. package/latticeai/api/security_dashboard.py +0 -604
  258. package/latticeai/api/setup.py +0 -319
  259. package/latticeai/api/static_routes.py +0 -354
  260. package/latticeai/api/ui_redirects.py +0 -26
  261. package/latticeai/api/workflow_designer.py +0 -394
  262. package/latticeai/api/workspace.py +0 -856
  263. package/latticeai/api/workspace_scope.py +0 -125
  264. package/latticeai/core/agent/__init__.py +0 -93
  265. package/latticeai/core/agent/_contract.py +0 -79
  266. package/latticeai/core/agent/context.py +0 -57
  267. package/latticeai/core/agent/deps.py +0 -125
  268. package/latticeai/core/agent/execution.py +0 -622
  269. package/latticeai/core/agent/planning.py +0 -145
  270. package/latticeai/core/agent/recovery.py +0 -157
  271. package/latticeai/core/agent/runtime.py +0 -210
  272. package/latticeai/core/agent/verification.py +0 -231
  273. package/latticeai/core/agent_eval.py +0 -739
  274. package/latticeai/core/agent_helpers.py +0 -493
  275. package/latticeai/core/agent_profiles.py +0 -110
  276. package/latticeai/core/agent_prompts.py +0 -171
  277. package/latticeai/core/agent_registry.py +0 -232
  278. package/latticeai/core/agent_state.py +0 -41
  279. package/latticeai/core/agent_trace.py +0 -104
  280. package/latticeai/core/artifact_ledger.py +0 -109
  281. package/latticeai/core/audit.py +0 -260
  282. package/latticeai/core/builtin_hooks.py +0 -105
  283. package/latticeai/core/context_builder.py +0 -394
  284. package/latticeai/core/document_generator.py +0 -103
  285. package/latticeai/core/enterprise.py +0 -154
  286. package/latticeai/core/enterprise_admin.py +0 -158
  287. package/latticeai/core/file_generation/__init__.py +0 -115
  288. package/latticeai/core/file_generation/bundles.py +0 -76
  289. package/latticeai/core/file_generation/extraction.py +0 -154
  290. package/latticeai/core/file_generation/inference.py +0 -235
  291. package/latticeai/core/file_generation/orchestration.py +0 -152
  292. package/latticeai/core/file_generation/prompting.py +0 -117
  293. package/latticeai/core/file_generation/repair.py +0 -114
  294. package/latticeai/core/file_generation/sanitize.py +0 -61
  295. package/latticeai/core/file_generation/validation.py +0 -201
  296. package/latticeai/core/invitations.py +0 -132
  297. package/latticeai/core/legacy_compatibility.py +0 -243
  298. package/latticeai/core/logging_safety.py +0 -46
  299. package/latticeai/core/marketplace.py +0 -293
  300. package/latticeai/core/mcp_catalog.py +0 -452
  301. package/latticeai/core/mcp_registry.py +0 -506
  302. package/latticeai/core/network_boundary.py +0 -168
  303. package/latticeai/core/oidc.py +0 -208
  304. package/latticeai/core/plugins.py +0 -432
  305. package/latticeai/core/product_hardening.py +0 -218
  306. package/latticeai/core/project_sessions.py +0 -337
  307. package/latticeai/core/realtime.py +0 -238
  308. package/latticeai/core/run_explain.py +0 -426
  309. package/latticeai/core/run_store.py +0 -252
  310. package/latticeai/core/timezones.py +0 -80
  311. package/latticeai/core/workspace_computer_memory.py +0 -84
  312. package/latticeai/core/workspace_graph_trace.py +0 -155
  313. package/latticeai/core/workspace_indexing.py +0 -102
  314. package/latticeai/core/workspace_memory.py +0 -77
  315. package/latticeai/core/workspace_onboarding.py +0 -104
  316. package/latticeai/core/workspace_os.py +0 -978
  317. package/latticeai/core/workspace_os_constants.py +0 -126
  318. package/latticeai/core/workspace_os_state.py +0 -180
  319. package/latticeai/core/workspace_os_utils.py +0 -103
  320. package/latticeai/core/workspace_permissions.py +0 -101
  321. package/latticeai/core/workspace_plugins.py +0 -97
  322. package/latticeai/core/workspace_relationships.py +0 -99
  323. package/latticeai/core/workspace_reorganization.py +0 -335
  324. package/latticeai/core/workspace_review_items.py +0 -112
  325. package/latticeai/core/workspace_runs.py +0 -726
  326. package/latticeai/core/workspace_skills.py +0 -109
  327. package/latticeai/core/workspace_snapshots.py +0 -198
  328. package/latticeai/core/workspace_timeline.py +0 -110
  329. package/latticeai/integrations/__init__.py +0 -0
  330. package/latticeai/integrations/telegram_bot/__init__.py +0 -123
  331. package/latticeai/integrations/telegram_bot/__main__.py +0 -17
  332. package/latticeai/integrations/telegram_bot/config.py +0 -86
  333. package/latticeai/integrations/telegram_bot/dispatch.py +0 -311
  334. package/latticeai/integrations/telegram_bot/flows.py +0 -478
  335. package/latticeai/integrations/telegram_bot/helpers.py +0 -322
  336. package/latticeai/integrations/telegram_bot/screens.py +0 -394
  337. package/latticeai/runtime/audit_runtime.py +0 -76
  338. package/latticeai/runtime/automation_runtime.py +0 -81
  339. package/latticeai/runtime/chat_wiring.py +0 -141
  340. package/latticeai/runtime/context_runtime.py +0 -66
  341. package/latticeai/runtime/feature_toggle_wiring.py +0 -157
  342. package/latticeai/runtime/history_runtime.py +0 -163
  343. package/latticeai/runtime/history_writer.py +0 -138
  344. package/latticeai/runtime/hooks_runtime.py +0 -77
  345. package/latticeai/runtime/model_wiring.py +0 -68
  346. package/latticeai/runtime/namespace_runtime.py +0 -163
  347. package/latticeai/runtime/network_boundary_wiring.py +0 -117
  348. package/latticeai/runtime/network_config_runtime.py +0 -56
  349. package/latticeai/runtime/permission_mode_wiring.py +0 -112
  350. package/latticeai/runtime/persistence_runtime.py +0 -159
  351. package/latticeai/runtime/platform_runtime_wiring.py +0 -89
  352. package/latticeai/runtime/review_wiring.py +0 -42
  353. package/latticeai/runtime/router_registration.py +0 -693
  354. package/latticeai/runtime/service_singletons.py +0 -55
  355. package/latticeai/runtime/sso_config_runtime.py +0 -128
  356. package/latticeai/runtime/user_key_runtime.py +0 -106
  357. package/latticeai/runtime/web_runtime.py +0 -92
  358. package/latticeai/server_app.py +0 -51
  359. package/latticeai/services/app_context.py +0 -130
  360. package/latticeai/services/automation_execution.py +0 -266
  361. package/latticeai/services/automation_intelligence.py +0 -614
  362. package/latticeai/services/brain_automation.py +0 -191
  363. package/latticeai/services/brain_intelligence/__init__.py +0 -58
  364. package/latticeai/services/brain_intelligence/_contract.py +0 -71
  365. package/latticeai/services/brain_intelligence/consistency.py +0 -193
  366. package/latticeai/services/brain_intelligence/constants.py +0 -47
  367. package/latticeai/services/brain_intelligence/digest.py +0 -258
  368. package/latticeai/services/brain_intelligence/health.py +0 -331
  369. package/latticeai/services/brain_intelligence/proposals.py +0 -259
  370. package/latticeai/services/brain_intelligence/sampling.py +0 -84
  371. package/latticeai/services/brain_intelligence/service.py +0 -48
  372. package/latticeai/services/change_proposals.py +0 -471
  373. package/latticeai/services/chat_service.py +0 -243
  374. package/latticeai/services/chronicle.py +0 -555
  375. package/latticeai/services/cloud_egress_audit.py +0 -85
  376. package/latticeai/services/cloud_extraction.py +0 -129
  377. package/latticeai/services/cloud_streaming.py +0 -268
  378. package/latticeai/services/cloud_token_guard.py +0 -84
  379. package/latticeai/services/command_center.py +0 -548
  380. package/latticeai/services/evidence_actions.py +0 -258
  381. package/latticeai/services/feature_toggles.py +0 -502
  382. package/latticeai/services/folder_watch.py +0 -520
  383. package/latticeai/services/funnel_metrics.py +0 -307
  384. package/latticeai/services/hybrid_chat.py +0 -316
  385. package/latticeai/services/hybrid_context.py +0 -228
  386. package/latticeai/services/hybrid_policy.py +0 -129
  387. package/latticeai/services/interop_bridges.py +0 -978
  388. package/latticeai/services/local_knowledge.py +0 -465
  389. package/latticeai/services/memory_service/__init__.py +0 -52
  390. package/latticeai/services/memory_service/_contract.py +0 -100
  391. package/latticeai/services/memory_service/brief.py +0 -431
  392. package/latticeai/services/memory_service/constants.py +0 -57
  393. package/latticeai/services/memory_service/maintenance.py +0 -138
  394. package/latticeai/services/memory_service/manager.py +0 -186
  395. package/latticeai/services/memory_service/proof.py +0 -136
  396. package/latticeai/services/memory_service/recall.py +0 -225
  397. package/latticeai/services/memory_service/service.py +0 -48
  398. package/latticeai/services/memory_service/stores.py +0 -110
  399. package/latticeai/services/mode_store.py +0 -132
  400. package/latticeai/services/model_recommendation.py +0 -224
  401. package/latticeai/services/model_runtime/cloud.py +0 -87
  402. package/latticeai/services/network_boundary_service.py +0 -117
  403. package/latticeai/services/obsidian_bridge.py +0 -609
  404. package/latticeai/services/openai_compatible_adapter.py +0 -101
  405. package/latticeai/services/permission_mode_service.py +0 -122
  406. package/latticeai/services/platform_runtime.py +0 -366
  407. package/latticeai/services/review_queue.py +0 -380
  408. package/latticeai/services/router_context.py +0 -59
  409. package/latticeai/services/run_executor.py +0 -387
  410. package/latticeai/services/self_model_service.py +0 -171
  411. package/latticeai/services/setup_detection.py +0 -147
  412. package/latticeai/services/triggers.py +0 -378
  413. package/latticeai/services/upload_service.py +0 -172
  414. package/latticeai/services/workspace_service.py +0 -165
  415. package/latticeai/setup/__init__.py +0 -25
  416. package/latticeai/setup/auto_setup.py +0 -846
  417. package/latticeai/setup/demo_corpus.py +0 -98
  418. package/latticeai/setup/wizard/__init__.py +0 -126
  419. package/latticeai/setup/wizard/catalog.py +0 -175
  420. package/latticeai/setup/wizard/detect.py +0 -302
  421. package/latticeai/setup/wizard/install.py +0 -348
  422. package/latticeai/setup/wizard/paths.py +0 -165
  423. package/latticeai/setup/wizard/plans.py +0 -74
  424. package/latticeai/setup/wizard/recommend.py +0 -320
  425. package/scripts/bench_agent_smoke.py +0 -409
  426. package/scripts/bench_models.py +0 -540
  427. package/scripts/bench_vector_index.py +0 -295
  428. package/scripts/funnel_soft_gate.py +0 -192
  429. package/scripts/generate_agent_loop_fixtures.py +0 -994
  430. package/scripts/generate_rust_parity_fixtures.py +0 -908
  431. package/scripts/migrate_brain_storage.py +0 -57
  432. package/scripts/parity_fixture_corpus_context.py +0 -162
  433. package/scripts/parity_fixture_corpus_docgen.py +0 -341
  434. package/scripts/profile_kg.py +0 -355
  435. package/server.py +0 -30
  436. package/static/app/assets/AdminConsole-cf4npybT.js +0 -1
  437. package/static/app/assets/Capture-DiQ219jW.js +0 -1
  438. package/static/app/assets/System-CieofHQa.js +0 -1
  439. package/static/app/assets/arrow-left-kfsrk0mv.js +0 -1
  440. package/static/app/assets/circle-check-qqLug9nU.js +0 -1
  441. package/static/app/assets/index-DxmOfNRi.css +0 -2
  442. package/static/app/assets/primitives-SNp0LRJz.js +0 -1
  443. package/static/app/assets/search-BcHqkjoy.js +0 -1
package/docs/CHANGELOG.md CHANGED
@@ -4,6 +4,125 @@ 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.7.0] - 2026-08-15 — Clean Sweep
8
+
9
+ ### Added
10
+ - 네이티브 훅 싱크(`HooksStore` → `HookSink`): 사용자 `pre_tool` /
11
+ `post_tool`이 네이티브 도구에서 발화하고 `hooks_runs.json`에 같은
12
+ 13키 레코드를 남김(상한 100).
13
+ - `review_item_created` / `review_item_updated` 타임라인 이벤트 —
14
+ 모든 변이 리뷰 경로에서 저장 후 1회. `run_now`는 쓰기가 없어 무발화.
15
+ - vault-watch 폴러: enable 시 기동, 마지막 watch disable 시 정지,
16
+ 재시작 시 resume. 감시 `.pdf`/`.docx`는 `/worker/parse`.
17
+ - 좌초 워커 경로 정적 게이트(디코이 증명). 부채 레지스터 비움.
18
+ - 전면 시각 재설계: elevation 사다리, gradient/border 토큰, 유리 제거,
19
+ 토큰 네이티브 cytoscape. 13 스크린 클레임.
20
+
21
+ ### Changed
22
+ - `workspace_os.json` writer 통합 — `WorkspaceOsStore` 하나 +
23
+ 디렉터리 키 레지스트리 + retrieval/agent 포트. 스탬프는
24
+ `CARGO_PKG_VERSION`.
25
+ - 네 ingest 문(upload / browser-tab / garden note / chat turn)이
26
+ 청크 배치 임베드를 붙임. `(model_id, dim)` 불일치 시 벡터 없음.
27
+ - `/upload/document`가 바이너리 본문을 `/worker/parse`로 보냄.
28
+ - 보안보내기 xlsx가 `/worker/render/xlsx`를 사용.
29
+ - UI 표면이 먹빛 밤 / 한지 낮 elevation 언어. 번들 ~103 KiB gzip.
30
+
31
+ ### Fixed
32
+ - command-search knowledge 그룹이 `matches`를 읽어 결과를 반환
33
+ (오라클은 `results`를 읽어 항상 비었음).
34
+ - 리뷰 스누즈 offset-aware datetime → 200, 잘못된 `until` → 422.
35
+ - 이중 거절 → 409 (형제 dismiss와 바이트 동일).
36
+ - Self-Model 쓰기 5경로가 은퇴 시임으로 전면 정지 — 네이티브 복구,
37
+ 녹화된 본문 9건 바이트 동일. `resolve_contradiction`이 빈 stamps로
38
+ "적용됨"을 주장하던 거짓말 포함.
39
+ - chat `ingest_generated` 스키마 400 (11.5.2에서도 깨져 있었음)과
40
+ vault-watch 미배선.
41
+ - chronicle `@today` 달력 결합, briefing/insights/garden/proactive/
42
+ health/quality 신선도 퓨즈. 시계 시임 + falsifier + 4시간대.
43
+
44
+ ### Known issues
45
+ - `open_keys`는 `pending`만 (Python은 snoozed도). 추출 refiner 없음.
46
+ `delete_node`는 `PART_OF`를 남김. owner 없는 리뷰 이벤트는 침묵.
47
+ KG-api ingest는 텍스트 전용. 리뷰 변이 = 스토어 사이클 2회.
48
+ snooze 422 detail은 영문 리터럴. 전문은
49
+ [RELEASE_NOTES_v11.7.0.md](../RELEASE_NOTES_v11.7.0.md).
50
+
51
+ ## [11.6.0] - 2026-08-15 — One Door
52
+
53
+ ### Added
54
+ - **하나의 제품 서버**: `lattice-host`가 **네이티브 420 오퍼레이션 /
55
+ 41 라우트 패밀리**를 원래 경로에 서빙합니다. `mount_table()`이 아홉
56
+ 크레이트의 `MOUNTED` 합집합이고, `(method, path)` 중복은 axum 생성자
57
+ 패닉이 아니라 라우터 생성 **전** 단언으로 실패합니다.
58
+ - **네이티브 KG write 엔진**(`lattice_core::graph_write`): ingest,
59
+ curation, provenance, taxonomy, 벡터 큐. 32단계 행 단위 패리티 골든과
60
+ `sqlite_master` 67객체 스키마 대조로 못박혔습니다.
61
+ - **Python 순수 연산 시임 9종**(`/worker/*`): embed, parse, render×4,
62
+ asr, multimodal/describe, extract. `LATTICEAI_AGENT_TOOL_SEAM` 게이트
63
+ 뒤에 있으며 인증이 디코드보다 먼저 실행됩니다.
64
+ - **HTTP 골든 재생 스위트**: 커밋된 12개 픽스처의 **1,487 케이스**를
65
+ 네이티브 라우트에 재생해 상태줄과 본문을 대조합니다.
66
+ - `rust/fixtures/worker_allowlist.json` — 게이트웨이 프록시 allowlist의
67
+ 단일 출처(**28 라우트**). Python 쪽 `tests/unit/test_worker_allowlist.py`
68
+ 6종이 집합/바이트/결정성/그리디 컨버터/그룹 라벨/"네이티브는 없음"을
69
+ 단언합니다.
70
+ - `pdf` extra (`reportlab`) — `POST /worker/render/pdf`가 지연 임포트하던
71
+ 선언되지 않은 의존성. 없으면 500이 아니라 "렌더러 사용 불가"입니다.
72
+
73
+ ### Changed
74
+ - **Python은 AI 워커입니다.** `create_app`은 사라졌고
75
+ `latticeai.worker_app:create_worker_app`이 이 패키지가 만드는 유일한
76
+ 애플리케이션이며 **28 라우트**만 서빙합니다. 부트스트랩 10단계 → 7단계,
77
+ `RuntimeContext` 191 필드 → 47.
78
+ - 그래프 테이블 **17개**의 소유자가 WORKER → RUST_PLATFORM. 단일 writer
79
+ 불변식이 주석이 아니라 테스트입니다.
80
+ - 변경 제안 스테이징·승인·적용이 인프로세스가 되었습니다. 루프는 Review
81
+ Center와 **같은 문서 핸들**(`GovernanceState`)로 스테이징하고, 적용은
82
+ 네이티브 `write_file`과 같은 샌드박스를 지납니다. unified diff는 CPython
83
+ `difflib`를 이식한 `pydiff`(`autojunk` 포함)가 만듭니다.
84
+ - 워커 감독자가 uvicorn 팩토리로 기동합니다 —
85
+ `python -m uvicorn latticeai.worker_app:create_worker_app --factory`.
86
+ 모듈 형태(`-m latticeai.worker_app`)는 `__main__` 가드가 없어 임포트하고
87
+ 즉시 종료합니다.
88
+ - 잡 스케줄러가 `GraphWriter`를 받아 네이티브로 드레인합니다. 이전에는
89
+ 워커에서 이미 사라진 `POST /api/index/drain`을 매 tick 때리고 백오프만
90
+ 쌓았습니다.
91
+ - 공개 릴리스 히스토리와 보안 지원 하한이 **11.0.0**으로 상향
92
+ (README 표 · `RELEASE_NOTES.md` · `SECURITY.md` · 해당 테스트 동시 수정).
93
+
94
+ ### Removed
95
+ - **Telegram 브리지** — 워커가 된 플랫폼 코드와 함께 삭제.
96
+ `latticeai.integrations.telegram_bot`은 임포트 불가 목록에 있습니다.
97
+ - **SSO OIDC 로그인/콜백 플로우** — 워커는 `/auth/*`를 마운트하지
98
+ 않습니다. 설정 표면은 유지되고 패스워드 로그인은 네이티브입니다.
99
+ - Python **298 파일 / 73,617줄**. 의존성 `authlib`, `cryptography`,
100
+ `watchdog`, `psycopg[binary]`와 extras `ann`/`hnsw`/`postgres`.
101
+ - `POST /worker/chat/record-turn`, `POST /agent/change-proposal` —
102
+ 둘 다 네이티브 경로가 대체했습니다.
103
+
104
+ ### Fixed
105
+ - KG write 4건: `kgv2_*` 뷰만 충돌 시 `type`을 갱신하던 문제,
106
+ `sort_keys` 없는 직렬화 2곳, 기본 JSON 구분자로 해시되던 `edge:`/
107
+ `event:` id.
108
+ - 리댁션 2건: `Authorization: Bearer …`가 실제로는 리댁션되지 않던 문제,
109
+ 아무것도 거절하지 않던 텔레그램 토큰 lookahead.
110
+ - 변경 제안 종류 화이트리스트가 `"reorganization"`과 비교해 **모든 폴더
111
+ 재구성 제안이 승인 불가**였던 문제(실제 상수는 `"folder_reorganization"`).
112
+ - `serde_json/preserve_order` 피처 통합으로 제품 빌드에서 `Map`이 삽입
113
+ 순서로 순회해 `sort_keys=True`를 자처하던 덤프가 정렬되지 않은
114
+ `metadata_json`을 쓰던 문제(읽으면 같고 해시는 다름).
115
+ - FastAPI ≥ 0.140에서 `include_router`가 더 이상 평탄화하지 않아 워커
116
+ 라우트 필터가 라우트를 0개로 보던 문제 — 휠에서 부팅 자체가 실패하고
117
+ 있었습니다.
118
+
119
+ ### Known issues
120
+ - 그대로 이식한 오라클 버그 3건(`/api/command/search` knowledge 그룹 항상
121
+ 비어 있음 · 리뷰 스누즈 offset-aware 500 · 제안 이중 거절 500),
122
+ 업로드 추출 UTF-8 전용, 공급 벡터 1차 노드 한정, 네이티브 도구의 사용자
123
+ 훅 미발화, `sanitize_write_content` 미적용, 워커 원점으로 남은 seam 호출
124
+ 3건. 전문은 [RELEASE_NOTES_v11.6.0.md](../RELEASE_NOTES_v11.6.0.md).
125
+
7
126
  ## [11.5.2] - 2026-08-12 — Tight Ship
8
127
 
9
128
  ### Added
@@ -1,6 +1,6 @@
1
1
  # Community And Plugins
2
2
 
3
- Current release: **11.5.2 — Tight Ship**.
3
+ Current release: **11.7.0 — Clean Sweep**.
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.2 — Tight Ship**.
6
+ Current release: **11.7.0 — Clean Sweep**.
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).
@@ -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:** `lattice_brain/runtime/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.2 — Tight Ship**.
3
+ Current release: **11.7.0 — Clean Sweep**.
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.2)
1
+ # Lattice AI — Operations Guide (v11.7.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.2 — Tight Ship**.
3
+ Current release: **11.7.0 — Clean Sweep**.
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.2 — Tight Ship**.
3
+ Current release: **11.7.0 — Clean Sweep**.
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
- [`lattice_brain/workflow.py`](../lattice_brain/workflow.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
 
package/docs/kg-schema.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Knowledge Graph Schema
2
2
 
3
- Current release: **11.5.2 — Tight Ship**.
3
+ Current release: **11.7.0 — Clean Sweep**.
4
4
 
5
5
  명세 출처: `lattice_ai_full_spec.pptx` 슬라이드 20·21·22
6
6
  구현: `lattice_brain/graph/schema.py`
@@ -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.2"
34
+ __version__ = "11.7.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] = []