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
@@ -1,322 +1,47 @@
1
- """Phases 9-10: platform features and the interaction routers.
1
+ """Phase 7 of the AI-Worker build: the compute routers.
2
2
 
3
- The tail of the build order — everything that mounts routers on the finished
4
- application. Split out of the single ``build_phases`` module in v11.3.0.
3
+ The tail of the build order — everything that mounts a router on the finished
4
+ application. WP-P1 replaced two phases (``platform_features`` and
5
+ ``interaction``, ~34 product routers between them) with this one, because the
6
+ worker mounts six things:
7
+
8
+ * ``/health`` — the posture the supervisor gates on;
9
+ * the MLX model lifecycle (``/models*``, ``/engines/*``);
10
+ * the embedder report (``/api/embeddings/{status,providers}``);
11
+ * the document parser (``POST /tools/read_document``, ``GET /tools/pdf_pages``);
12
+ * the two capability probes (``/api/ingestion/multimodal``,
13
+ ``/api/capture/voice/status``);
14
+ * the Rust loop's seam (``POST /agent/llm``, ``POST /agent/tool``).
15
+
16
+ The ``/worker/*`` seams are not here: they are mounted by
17
+ :func:`~latticeai.runtime.build_phases.worker_profile.phase_worker_routes`,
18
+ which runs after this phase and is the module that owns the worker contract.
5
19
 
6
20
  Every heavy import lives *inside* a phase, never at module scope.
7
21
  """
8
22
 
9
23
  from __future__ import annotations
10
24
 
25
+ from typing import Any, Dict
26
+
11
27
  from latticeai.runtime.runtime_context import RuntimeContext
12
28
 
13
29
 
14
- # ── phase 7: platform features ───────────────────────────────────────────────
15
- def phase_platform_features(ctx: RuntimeContext) -> None:
16
- """Workspace platform, automation, review queue, command centre, proposals."""
17
- ctx.enter("platform_features")
30
+ def phase_features(ctx: RuntimeContext) -> None:
31
+ """Mount the worker's compute routers on the application object."""
32
+ ctx.enter("features")
18
33
 
19
34
  from latticeai.api.agent_worker_seam import create_agent_worker_seam_router
20
- from latticeai.api.agents import create_agents_router
21
- from latticeai.api.automation_intelligence import (
22
- create_automation_intelligence_router,
23
- )
24
- from latticeai.api.change_proposals import create_change_proposals_router
25
- from latticeai.api.chronicle import create_chronicle_router
26
- from latticeai.api.command_center import create_command_center_router
27
- from latticeai.api.evidence_actions import create_evidence_actions_router
28
- from latticeai.api.funnel_metrics import create_funnel_metrics_router
29
- from latticeai.api.index_jobs import create_index_jobs_router
30
- from latticeai.api.marketplace import create_marketplace_router
31
- from latticeai.api.plugins import create_plugins_router
32
- from latticeai.api.project_sessions import create_project_sessions_router
33
- from latticeai.api.realtime import create_realtime_router
34
- from latticeai.api.voice_capture import create_voice_capture_router
35
- from latticeai.api.workflow_designer import create_workflow_designer_router
36
- from latticeai.api.workspace import _workspace_scope_from_request
37
- from latticeai.core.project_sessions import ProjectSessionStore
38
- from latticeai.runtime.hooks_runtime import (
39
- bind_builtin_hook_runners,
40
- bind_trigger_hook_runner,
41
- )
42
- from latticeai.runtime.platform_runtime_wiring import (
43
- build_platform_automation_runtime,
44
- )
45
- from latticeai.runtime.router_registration import (
46
- register_platform_feature_routers,
47
- )
48
- from latticeai.services.change_proposals import ChangeProposalService
49
- from latticeai.services.chronicle import ChronicleService
50
- from latticeai.services.command_center import CommandCenterService
51
- from latticeai.services.evidence_actions import EvidenceActionService
52
- from latticeai.services.tool_dispatch import (
53
- DEFAULT_TOOL_DISPATCH_SERVICE,
54
- get_tool_permission,
55
- )
56
- from latticeai.services.voice_capture import VoiceCaptureService
57
- from latticeai.tools import execute_tool, resolve_workspace_path
58
-
59
- # v2 Agentic Workspace Platform: cross-system wiring.
60
- platform_automation_runtime = build_platform_automation_runtime(
61
- model_router=ctx.model_router,
62
- workspace_store=ctx.WORKSPACE_OS,
63
- workspace_service=ctx.WORKSPACE_SERVICE,
64
- plugin_registry=ctx.PLUGIN_REGISTRY,
65
- get_current_user=ctx.get_current_user,
66
- workspace_graph=ctx._workspace_graph,
67
- workspace_scope_from_request=_workspace_scope_from_request,
68
- get_tool_permission=get_tool_permission,
69
- hooks=ctx.HOOKS_REGISTRY,
70
- agent_registry=ctx.AGENT_REGISTRY,
71
- data_dir=ctx.DATA_DIR,
72
- append_audit_event=ctx.append_audit_event,
73
- memory_service=ctx.MEMORY_SERVICE,
74
- tz_name=getattr(ctx.CONFIG, "timezone", None),
75
- )
76
- ctx.adopt(
77
- platform_automation_runtime,
78
- "_llm_generate_sync",
79
- "PLATFORM",
80
- "_automation_runtime",
81
- "REVIEW_QUEUE",
82
- "TRIGGER_SERVICE",
83
- "AGENT_RUNTIME",
84
- "RUN_EXECUTOR",
85
- )
86
- bind_trigger_hook_runner(
87
- registry=ctx.HOOKS_REGISTRY, trigger_service=ctx.TRIGGER_SERVICE
88
- )
89
- ctx.app.state.run_executor = ctx.RUN_EXECUTOR
90
- ctx.app.state.run_reconciliation = ctx.RUN_EXECUTOR.reconcile_startup()
91
- ctx.TRIGGER_SERVICE.start()
92
-
93
- bind_builtin_hook_runners(
94
- registry=ctx.HOOKS_REGISTRY,
95
- append_audit_event=ctx.append_audit_event,
96
- get_tool_permission=get_tool_permission,
97
- classify_sensitive_message=ctx.classify_sensitive_message,
98
- )
99
-
100
- register_platform_feature_routers(
101
- ctx.app,
102
- create_plugins_router=create_plugins_router,
103
- plugin_registry=ctx.PLUGIN_REGISTRY,
104
- require_user=ctx.require_user,
105
- require_admin=ctx.require_admin,
106
- append_audit_event=ctx.append_audit_event,
107
- platform=ctx.PLATFORM,
108
- ui_file_response=ctx.ui_file_response,
109
- static_dir=ctx.STATIC_DIR,
110
- create_workflow_designer_router=create_workflow_designer_router,
111
- store=ctx.WORKSPACE_OS,
112
- get_current_user=ctx.get_current_user,
113
- workspace_graph=ctx._workspace_graph,
114
- hooks=ctx.HOOKS_REGISTRY,
115
- run_executor=ctx.RUN_EXECUTOR,
116
- trigger_service=ctx.TRIGGER_SERVICE,
117
- create_agents_router=create_agents_router,
118
- agent_runtime=ctx.AGENT_RUNTIME,
119
- create_marketplace_router=create_marketplace_router,
120
- template_catalog=ctx.TEMPLATE_CATALOG,
121
- create_realtime_router=create_realtime_router,
122
- realtime_bus=ctx.REALTIME_BUS,
123
- )
124
-
125
- ctx.app.include_router(
126
- create_automation_intelligence_router(
127
- service=ctx.AUTOMATION_INTELLIGENCE,
128
- store=ctx.WORKSPACE_OS,
129
- require_user=ctx.require_user,
130
- gate_read=ctx.PLATFORM.gate_read,
131
- gate_write=ctx.PLATFORM.gate_write,
132
- append_audit_event=ctx.append_audit_event,
133
- workspace_graph=ctx._workspace_graph,
134
- run_executor=ctx.RUN_EXECUTOR,
135
- review_queue=ctx.REVIEW_QUEUE,
136
- )
137
- )
138
- # UX funnel metrics (backlog #16): admin-only runtime counters.
139
- ctx.app.include_router(
140
- create_funnel_metrics_router(
141
- service=ctx.FUNNEL_METRICS,
142
- require_admin=ctx.require_admin,
143
- )
144
- )
145
-
146
- ctx.set(
147
- COMMAND_CENTER=CommandCenterService(
148
- conversation_store=ctx.CONVERSATIONS,
149
- knowledge_graph=ctx.KNOWLEDGE_GRAPH,
150
- store=ctx.WORKSPACE_OS,
151
- search_service=ctx.SEARCH_SERVICE,
152
- brain_intelligence=ctx.BRAIN_INTELLIGENCE,
153
- automation_intelligence=ctx.AUTOMATION_INTELLIGENCE,
154
- review_queue=ctx.REVIEW_QUEUE,
155
- enable_graph=ctx.ENABLE_GRAPH,
156
- )
157
- )
158
- ctx.app.include_router(
159
- create_command_center_router(
160
- service=ctx.COMMAND_CENTER,
161
- require_user=ctx.require_user,
162
- gate_read=ctx.PLATFORM.gate_read,
163
- )
164
- )
165
-
166
- # Brain Chronicle (v11.3.0): the bitemporal columns v11.1.0 started
167
- # writing, read back as a timeline. Pure reads over the Brain's own
168
- # storage — no schema of its own, nothing to write, nothing to migrate.
169
- ctx.set(
170
- CHRONICLE=ChronicleService(
171
- knowledge_graph=ctx.KNOWLEDGE_GRAPH,
172
- conversations=ctx.CONVERSATIONS,
173
- enable_graph=ctx.ENABLE_GRAPH,
174
- )
175
- )
176
- ctx.app.include_router(
177
- create_chronicle_router(
178
- service=ctx.CHRONICLE,
179
- require_user=ctx.require_user,
180
- gate_read=ctx.PLATFORM.gate_read,
181
- )
182
- )
183
-
184
- # Index jobs (v11.5.0): the embed backlog has been durable since 11.1.0 and
185
- # had no trigger — the only drain was a pipeline method no scheduler could
186
- # reach. This is the HTTP surface lattice-jobs ticks.
187
- ctx.app.include_router(
188
- create_index_jobs_router(
189
- pipeline=ctx.INGESTION_PIPELINE if ctx.ENABLE_GRAPH else None,
190
- knowledge_graph=ctx.KNOWLEDGE_GRAPH if ctx.ENABLE_GRAPH else None,
191
- require_user=ctx.require_user,
192
- gate_read=ctx.PLATFORM.gate_read,
193
- gate_write=ctx.PLATFORM.gate_write,
194
- )
195
- )
196
-
197
- ctx.set(
198
- CHANGE_PROPOSALS=ChangeProposalService(
199
- review_queue=ctx.REVIEW_QUEUE,
200
- resolve_path=resolve_workspace_path,
201
- audit=ctx.append_audit_event,
202
- )
203
- )
204
- # Proposal-first mutations: the agent loop consults the governor so
205
- # additive creates run with minimal friction while changes and deletions
206
- # of existing files are staged for review instead of applied.
207
- ctx.CHAT_AGENT_RUNTIME.deps.change_governor = ctx.CHANGE_PROPOSALS
208
- ctx.app.include_router(
209
- create_change_proposals_router(
210
- service=ctx.CHANGE_PROPOSALS,
211
- require_user=ctx.require_user,
212
- gate_read=ctx.PLATFORM.gate_read,
213
- gate_write=ctx.PLATFORM.gate_write,
214
- )
215
- )
216
-
217
- # AI-Worker seam (v11.5.1, plan §Y1): the three calls the Rust agent loop
218
- # makes back into Python once orchestration lives in ``lattice-agent``.
219
- # Registered here because it needs the change governor above; the two
220
- # side-effecting routes stay behind ``LATTICEAI_AGENT_TOOL_SEAM=1``, which
221
- # only lattice-host injects into a worker it started.
222
- ctx.app.include_router(
223
- create_agent_worker_seam_router(
224
- model_router=ctx.model_router,
225
- dispatch_service=DEFAULT_TOOL_DISPATCH_SERVICE,
226
- execute_tool=execute_tool,
227
- hooks=ctx.HOOKS_REGISTRY,
228
- change_proposals=ctx.CHANGE_PROPOSALS,
229
- require_user=ctx.require_user,
230
- enforce_rate_limit=ctx.enforce_rate_limit,
231
- )
232
- )
233
-
234
- # Evidence → action (v9.9.6): an answer's citations become ready-to-send,
235
- # evidence-scoped follow-ups. Deterministic composition only — execution
236
- # stays on the chat/file-generation path.
237
- ctx.set(
238
- EVIDENCE_ACTIONS_SERVICE=EvidenceActionService(
239
- node_reader=getattr(ctx.KNOWLEDGE_GRAPH, "get_node", None)
240
- )
241
- )
242
- ctx.app.include_router(
243
- create_evidence_actions_router(
244
- service=ctx.EVIDENCE_ACTIONS_SERVICE,
245
- require_user=ctx.require_user,
246
- allowed_workspaces_for=ctx._allowed_workspaces_for,
247
- )
248
- )
249
-
250
- # Voice memo capture (v9.9.7): the shortest path from a thought to the
251
- # Brain. Transcription is an optional local port — absent, the memo is
252
- # still stored and the response says it is not searchable. v11.1.0 shares
253
- # that one port with multi-modal ingestion, so a memo and a scanned
254
- # recording can never disagree about whether this machine can hear.
255
- ctx.set(
256
- VOICE_CAPTURE=VoiceCaptureService(
257
- pipeline=ctx.INGESTION_PIPELINE if ctx.ENABLE_GRAPH else None,
258
- transcriber=ctx.MULTIMODAL_PORTS.transcriber,
259
- )
260
- )
261
- ctx.app.include_router(
262
- create_voice_capture_router(
263
- service=ctx.VOICE_CAPTURE,
264
- require_user=ctx.require_user,
265
- gate_write=ctx.PLATFORM.gate_write,
266
- append_audit_event=ctx.append_audit_event,
267
- )
268
- )
269
-
270
- # Multi-turn project loop (v9.9.6): work spanning several runs keeps its
271
- # files, open TODOs, and last honest verification in one project session.
272
- ctx.set(PROJECT_SESSIONS=ProjectSessionStore(ctx.DATA_DIR / "project_sessions"))
273
- ctx.app.include_router(
274
- create_project_sessions_router(
275
- store=ctx.PROJECT_SESSIONS,
276
- require_user=ctx.require_user,
277
- gate_read=ctx.PLATFORM.gate_read,
278
- gate_write=ctx.PLATFORM.gate_write,
279
- )
280
- )
281
-
282
-
283
- # ── phase 8: interaction routers ─────────────────────────────────────────────
284
- def phase_interaction(ctx: RuntimeContext) -> None:
285
- """Model, chat, search, tools, hooks, memory and brain tail routers."""
286
- ctx.enter("interaction")
287
-
288
- from fastapi import HTTPException
289
-
290
- from latticeai.api.agent_registry import create_agent_registry_router
291
- from latticeai.api.brain_intelligence import create_brain_intelligence_router
292
- from latticeai.api.browser import create_browser_router
293
- from latticeai.api.chat import create_chat_router
294
- from latticeai.api.garden import create_garden_router
295
35
  from latticeai.api.health import create_health_router
296
- from latticeai.api.hooks import create_hooks_router
297
- from latticeai.api.memory import create_memory_router
36
+ from latticeai.api.local_files import create_local_files_router
298
37
  from latticeai.api.models import create_models_router
299
- from latticeai.api.network import create_network_router
300
- from latticeai.api.portability import create_portability_router
301
- from latticeai.api.review_queue import create_review_queue_router
302
38
  from latticeai.api.search import create_search_router
303
- from latticeai.api.setup import create_setup_router
304
39
  from latticeai.api.tools import create_tools_router
305
- from latticeai.core.model_compat import (
306
- list_cached_profiles as _list_compat_profiles,
307
- )
40
+ from latticeai.api.voice_capture import create_voice_capture_router
41
+ from latticeai.core.model_compat import list_cached_profiles
308
42
  from latticeai.runtime.access_runtime import is_externally_reachable
309
- from latticeai.runtime.chat_wiring import build_interaction_contexts
310
- from latticeai.runtime.model_wiring import register_model_runtime_routers
311
- from latticeai.runtime.platform_services_runtime import build_brain_network
312
- from latticeai.runtime.review_wiring import build_review_run_now_runner
313
- from latticeai.runtime.router_registration import (
314
- register_health_and_model_routers,
315
- register_interaction_routers,
316
- register_review_and_brain_tail_routers,
317
- )
43
+ from latticeai.runtime.platform_services_runtime import build_model_service
318
44
  from latticeai.services.model_runtime import (
319
- CLOUD_VERIFY_TTL_SECONDS,
320
45
  ENGINE_MODEL_CATALOG,
321
46
  MODEL_ENGINE_ALIASES,
322
47
  download_hf_model,
@@ -326,30 +51,36 @@ def phase_interaction(ctx: RuntimeContext) -> None:
326
51
  normalize_local_model_request,
327
52
  sse_event,
328
53
  )
54
+ from latticeai.services.search_service import SearchService
55
+ from latticeai.services.tool_dispatch import DEFAULT_TOOL_DISPATCH_SERVICE
56
+ from latticeai.tools import execute_tool
329
57
 
58
+ app = ctx.app
330
59
  service = ctx.model_runtime_service
331
- ctx.set(
332
- model_runtime=register_model_runtime_routers(
333
- app=ctx.app,
334
- create_health_router=create_health_router,
335
- create_models_router=create_models_router,
336
- register_health_and_model_routers=register_health_and_model_routers,
337
- model_router=ctx.model_router,
338
- runtime_service=service,
339
- runtime_features=service.runtime_features,
340
- is_public_mode=ctx.IS_PUBLIC_MODE,
60
+ model_service = build_model_service(
61
+ model_router=ctx.model_router,
62
+ runtime_features=service.runtime_features,
63
+ is_public=ctx.IS_PUBLIC_MODE,
64
+ )
65
+ ctx.set(model_service=model_service)
66
+
67
+ app.include_router(
68
+ create_health_router(
69
+ model_service=model_service,
341
70
  engine_status=service.engine_status,
342
71
  get_current_user=ctx.get_current_user,
343
72
  require_auth=ctx.REQUIRE_AUTH,
344
73
  externally_reachable=is_externally_reachable(ctx.CONFIG),
345
74
  app_version=ctx.APP_VERSION,
346
75
  app_mode=ctx.APP_MODE,
76
+ )
77
+ )
78
+
79
+ app.include_router(
80
+ create_models_router(
81
+ model_router=ctx.model_router,
347
82
  require_user=ctx.require_user,
348
83
  require_admin=ctx.require_admin,
349
- load_users=ctx.load_users,
350
- get_user_role=ctx.get_user_role,
351
- install_engine=service.install_engine,
352
- verify_cloud_models=service.verify_cloud_models,
353
84
  normalize_local_model_request=normalize_local_model_request,
354
85
  download_hf_model=download_hf_model,
355
86
  prepare_and_load_model=service.prepare_and_load_model,
@@ -357,88 +88,67 @@ def phase_interaction(ctx: RuntimeContext) -> None:
357
88
  sse_event=sse_event,
358
89
  ensure_ollama_server=ensure_ollama_server,
359
90
  local_binary=local_binary,
91
+ engine_status=service.engine_status,
360
92
  filter_lower_family_versions=filter_lower_family_versions,
361
- list_compat_profiles=_list_compat_profiles,
362
- set_user_api_key=ctx.set_user_api_key,
93
+ list_compat_profiles=list_cached_profiles,
363
94
  engine_model_catalog=ENGINE_MODEL_CATALOG,
364
95
  model_engine_aliases=MODEL_ENGINE_ALIASES,
365
- cloud_verify_ttl_seconds=CLOUD_VERIFY_TTL_SECONDS,
96
+ is_public_mode=ctx.IS_PUBLIC_MODE,
366
97
  allow_local_models=ctx.ALLOW_LOCAL_MODELS,
98
+ require_auth=ctx.REQUIRE_AUTH,
367
99
  )
368
100
  )
369
101
 
370
- _tool_router_context, interaction_router_context = build_interaction_contexts(
371
- config=ctx.CONFIG,
372
- ingestion_pipeline=ctx.INGESTION_PIPELINE,
373
- data_dir=ctx.DATA_DIR,
374
- static_dir=ctx.STATIC_DIR,
375
- model_router=ctx.model_router,
376
- require_user=ctx.require_user,
377
- require_admin=ctx.require_admin,
378
- get_current_user=ctx.get_current_user,
379
- clear_history=ctx.clear_history,
380
- append_audit_event=ctx.append_audit_event,
381
- enforce_rate_limit=ctx.enforce_rate_limit,
382
- bytes_match_extension=ctx._bytes_match_extension,
383
- classify_sensitive_message=ctx.classify_sensitive_message,
384
- save_to_history=ctx.save_to_history,
385
- enable_graph=ctx.ENABLE_GRAPH,
386
- knowledge_graph=ctx.KNOWLEDGE_GRAPH,
387
- require_graph=ctx._require_graph,
388
- local_kg_watcher=ctx.LOCAL_KG_WATCHER,
389
- load_mcp_installs=ctx.load_mcp_installs,
390
- recommend_mcps=ctx.recommend_mcps,
391
- install_mcp=ctx.install_mcp,
392
- mcp_public_item=ctx.mcp_public_item,
393
- hooks=ctx.HOOKS_REGISTRY,
394
- workspace_service=ctx.WORKSPACE_SERVICE,
395
- chat_context=ctx.app_context,
396
- search_service=ctx.SEARCH_SERVICE,
397
- allowed_workspaces_for=ctx._allowed_workspaces_for,
398
- embedding_info=ctx._embedding_info,
399
- agent_registry=ctx.AGENT_REGISTRY,
400
- memory_service=ctx.MEMORY_SERVICE,
401
- platform=ctx.PLATFORM,
402
- active_model_getter=lambda: ctx.model_router.current_model_id or "",
403
- brain_intelligence=ctx.BRAIN_INTELLIGENCE,
102
+ def _embedding_info() -> Dict[str, Any]:
103
+ from latticeai.core.embedding_providers import (
104
+ PROVIDER_TYPES,
105
+ embedding_provider_profiles,
106
+ )
107
+
108
+ info = ctx.EMBEDDER.as_dict()
109
+ info["available_providers"] = list(PROVIDER_TYPES)
110
+ info["profile"] = ctx.CONFIG.embedding_profile or ""
111
+ info["profiles"] = embedding_provider_profiles()
112
+ return info
113
+
114
+ ctx.set(_embedding_info=_embedding_info)
115
+ app.include_router(
116
+ create_search_router(
117
+ service=SearchService(embedder=ctx.EMBEDDER),
118
+ require_user=ctx.require_user,
119
+ embedding_info=_embedding_info,
120
+ )
404
121
  )
405
- register_interaction_routers(
406
- ctx.app,
407
- interaction_context=interaction_router_context,
408
- create_chat_router=create_chat_router,
409
- create_search_router=create_search_router,
410
- create_tools_router=create_tools_router,
411
- create_hooks_router=create_hooks_router,
412
- create_agent_registry_router=create_agent_registry_router,
413
- create_memory_router=create_memory_router,
414
- create_brain_intelligence_router=create_brain_intelligence_router,
122
+
123
+ app.include_router(
124
+ create_tools_router(require_user=ctx.require_user)
125
+ )
126
+ app.include_router(
127
+ create_local_files_router(
128
+ require_user=ctx.require_user, ingestion_pipeline=ctx.INGESTION_PIPELINE
129
+ )
130
+ )
131
+ app.include_router(
132
+ create_voice_capture_router(
133
+ service=ctx.VOICE_CAPTURE, require_user=ctx.require_user
134
+ )
415
135
  )
416
136
 
417
- register_review_and_brain_tail_routers(
418
- ctx.app,
419
- create_review_queue_router=create_review_queue_router,
420
- review_queue=ctx.REVIEW_QUEUE,
421
- require_user=ctx.require_user,
422
- gate_read=ctx.PLATFORM.gate_read,
423
- gate_write=ctx.PLATFORM.gate_write,
424
- run_review_item=build_review_run_now_runner(ctx.PLATFORM, HTTPException),
425
- append_audit_event=ctx.append_audit_event,
426
- # Approving a change_proposal from the Review Center applies the
427
- # staged content through the same service the agent governor uses.
428
- change_proposals=ctx.CHANGE_PROPOSALS,
429
- create_browser_router=create_browser_router,
430
- ingestion_pipeline=ctx.INGESTION_PIPELINE,
431
- workspace_service=ctx.WORKSPACE_SERVICE,
432
- create_portability_router=create_portability_router,
433
- kg_portability=ctx.KG_PORTABILITY,
434
- require_admin=ctx.require_admin,
435
- build_brain_network=build_brain_network,
436
- device_identity=ctx.DEVICE_IDENTITY,
437
- data_dir=ctx.DATA_DIR,
438
- create_network_router=create_network_router,
439
- create_garden_router=create_garden_router,
440
- gardener=ctx.gardener,
441
- create_setup_router=create_setup_router,
442
- model_router=ctx.model_router,
443
- knowledge_graph=ctx.KNOWLEDGE_GRAPH,
137
+ # AI-Worker seam (v11.5.1, plan §Y1): the calls the Rust agent loop makes
138
+ # back into Python once orchestration lives in ``lattice-agent``. The tool
139
+ # route stays behind ``LATTICEAI_AGENT_TOOL_SEAM=1``, which only
140
+ # lattice-host injects into a worker it started.
141
+ app.include_router(
142
+ create_agent_worker_seam_router(
143
+ model_router=ctx.model_router,
144
+ dispatch_service=DEFAULT_TOOL_DISPATCH_SERVICE,
145
+ execute_tool=execute_tool,
146
+ # No registry: the hooks platform (persistence, ordering, the
147
+ # built-in runners that bound to the audit log) is native platform
148
+ # state now, and ``dispatch_tool(None, …)`` is a transparent
149
+ # pass-through rather than a pretend lifecycle.
150
+ hooks=None,
151
+ require_user=ctx.require_user,
152
+ enforce_rate_limit=ctx.enforce_rate_limit,
153
+ )
444
154
  )