ltcai 11.5.1 → 11.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +92 -117
- package/bin/ltcai.js +234 -24
- package/docs/CHANGELOG.md +129 -0
- package/docs/COMMUNITY_AND_PLUGINS.md +1 -1
- package/docs/DEVELOPMENT.md +8 -6
- package/docs/ENTERPRISE.md +2 -1
- package/docs/HYBRID_CLOUD_KG_STREAMING.md +8 -4
- package/docs/MULTI_AGENT_RUNTIME.md +12 -5
- package/docs/ONBOARDING.md +1 -1
- package/docs/OPERATIONS.md +6 -3
- package/docs/REALTIME_COLLABORATION.md +1 -1
- package/docs/TRUST_MODEL.md +1 -1
- package/docs/WHY_LATTICE.md +1 -1
- package/docs/WORKFLOW_DESIGNER.md +3 -2
- package/docs/architecture.md +4 -4
- package/docs/kg-schema.md +1 -1
- package/docs/v11.5.2_TIGHT_SHIP_PLAN.md +144 -0
- package/docs/v11.6.0_ONE_DOOR_PLAN.md +170 -0
- package/lattice_brain/__init__.py +42 -79
- package/lattice_brain/graph/__init__.py +9 -24
- package/lattice_brain/graph/_kg_common/__init__.py +13 -24
- package/lattice_brain/ingestion/__init__.py +19 -58
- package/lattice_brain/ingestion/pipeline.py +20 -398
- package/lattice_brain/multimodal/__init__.py +7 -18
- package/lattice_brain/multimodal/images.py +6 -264
- package/lattice_brain/multimodal/video.py +8 -247
- package/lattice_brain/runtime/__init__.py +8 -79
- package/lattice_brain/runtime/hooks.py +22 -597
- package/latticeai/__init__.py +1 -1
- package/latticeai/api/agent_worker_seam.py +7 -80
- package/latticeai/api/health.py +26 -20
- package/latticeai/api/local_files.py +25 -608
- package/latticeai/api/models.py +12 -87
- package/latticeai/api/search.py +17 -231
- package/latticeai/api/tools.py +69 -750
- package/latticeai/api/voice_capture.py +8 -70
- package/latticeai/api/worker_compute.py +842 -0
- package/latticeai/api/worker_seams.py +216 -0
- package/latticeai/app_factory.py +23 -232
- package/latticeai/cli/entrypoint.py +36 -249
- package/latticeai/cli/runtime.py +7 -3
- package/latticeai/core/agent_permission.py +16 -91
- package/latticeai/core/config.py +47 -3
- package/latticeai/core/csrf.py +28 -2
- package/latticeai/core/embedding_providers/__init__.py +3 -5
- package/latticeai/core/embedding_providers/base.py +1 -1
- package/latticeai/core/embedding_providers/text.py +1 -1
- package/latticeai/core/http_origin.py +146 -0
- package/latticeai/core/io_utils.py +2 -11
- package/latticeai/core/messages.py +94 -531
- package/latticeai/core/model_compat.py +2 -8
- package/latticeai/core/module_probe.py +37 -0
- package/latticeai/core/security.py +13 -0
- package/latticeai/core/sessions.py +3 -2
- package/latticeai/core/sse.py +25 -0
- package/latticeai/core/users.py +0 -9
- package/latticeai/models/router/documents.py +0 -35
- package/latticeai/models/router/registry.py +0 -4
- package/latticeai/runtime/access_runtime.py +16 -18
- package/latticeai/runtime/bootstrap.py +10 -21
- package/latticeai/runtime/brain_runtime.py +35 -43
- package/latticeai/runtime/build_phases/__init__.py +21 -37
- package/latticeai/runtime/build_phases/features.py +101 -389
- package/latticeai/runtime/build_phases/foundation.py +82 -392
- package/latticeai/runtime/build_phases/web.py +91 -406
- package/latticeai/runtime/build_phases/worker_profile.py +244 -0
- package/latticeai/runtime/lifespan_runtime.py +7 -16
- package/latticeai/runtime/platform_services_runtime.py +1 -15
- package/latticeai/runtime/runtime_context.py +14 -143
- package/latticeai/runtime/security_runtime.py +10 -103
- package/latticeai/services/architecture_readiness.py +82 -43
- package/latticeai/services/model_capability_registry.py +0 -15
- package/latticeai/services/model_catalog.py +0 -7
- package/latticeai/services/model_loading.py +3 -2
- package/latticeai/services/model_runtime/__init__.py +2 -68
- package/latticeai/services/model_runtime/engines.py +27 -128
- package/latticeai/services/model_runtime/loading.py +2 -2
- package/latticeai/services/model_runtime/service.py +4 -28
- package/latticeai/services/p_reinforce.py +10 -261
- package/latticeai/services/product_readiness.py +31 -38
- package/latticeai/services/search_service.py +37 -795
- package/latticeai/services/tool_dispatch.py +30 -390
- package/latticeai/services/voice_capture.py +13 -107
- package/latticeai/tools/__init__.py +22 -49
- package/latticeai/tools/commands.py +0 -163
- package/latticeai/tools/computer.py +0 -39
- package/latticeai/tools/documents.py +1 -134
- package/latticeai/tools/filesystem.py +1 -247
- package/latticeai/tools/knowledge.py +1 -52
- package/latticeai/tools/local_files.py +0 -20
- package/latticeai/worker_app.py +75 -0
- package/package.json +3 -6
- package/requirements.txt +0 -5
- package/scripts/agent_eval.py +16 -28
- package/scripts/brain_quality_eval.py +20 -183
- package/scripts/bump_version.py +19 -6
- package/scripts/check_current_release_docs.mjs +7 -4
- package/scripts/check_legacy_debt.mjs +1 -1
- package/scripts/check_openapi_drift.mjs +10 -0
- package/scripts/check_server_i18n.mjs +2 -18
- package/scripts/compose_openapi.py +377 -0
- package/scripts/export_openapi.py +32 -4
- package/scripts/gen_messages_catalog_fixture.py +302 -0
- package/scripts/gen_openapi_fragments.py +365 -0
- package/scripts/gen_redact_fixture.py +196 -0
- package/scripts/gen_worker_allowlist_fixture.py +115 -0
- package/scripts/generate_agent_parity_fixtures.py +33 -14
- package/scripts/openapi_route_families.json +2161 -0
- package/scripts/release_screen_claims.json +31 -0
- package/scripts/run_integration_tests.mjs +134 -29
- package/scripts/run_sidecar_e2e.mjs +104 -11
- package/scripts/wheel_smoke.py +32 -22
- package/src-tauri/Cargo.lock +375 -9
- package/src-tauri/Cargo.toml +1 -1
- package/src-tauri/src/backend.rs +223 -43
- package/src-tauri/src/main.rs +27 -17
- package/src-tauri/src/topology.rs +58 -88
- package/src-tauri/tauri.conf.json +2 -3
- package/static/app/asset-manifest.json +41 -41
- package/static/app/assets/{Act-Drs_jd-O.js → Act-CToZnOHz.js} +1 -1
- package/static/app/assets/{AdminConsole-BqNx5oF6.js → AdminConsole-D5kbrBu8.js} +1 -1
- package/static/app/assets/{Brain-C7bdNmz-.js → Brain-C6zCdv4S.js} +1 -1
- package/static/app/assets/{BrainHome-DcTnINcI.js → BrainHome-D4n3EDUt.js} +1 -1
- package/static/app/assets/{BrainSignals-Df1MRIPD.js → BrainSignals-CzeZ-vQ9.js} +1 -1
- package/static/app/assets/{Capture-Dgsxvnbx.js → Capture-DPcyTczq.js} +1 -1
- package/static/app/assets/{Chronicle-BrkTxJK1.js → Chronicle-D3Nx-oWS.js} +1 -1
- package/static/app/assets/{CommandPalette-DDziw7Oj.js → CommandPalette-DPPvpp28.js} +1 -1
- package/static/app/assets/{Library-CYxeuraA.js → Library-Co2qTu3I.js} +1 -1
- package/static/app/assets/{LivingBrain-CNp6mvCm.js → LivingBrain-Bsmzwy8_.js} +1 -1
- package/static/app/assets/{ProductFlow-BVsowu3Z.js → ProductFlow-CBLdmesT.js} +1 -1
- package/static/app/assets/{ReviewCard-D1LbOfJS.js → ReviewCard-CfR6DLs7.js} +1 -1
- package/static/app/assets/{System-DcRAq7wj.js → System-Ce-P2YL6.js} +1 -1
- package/static/app/assets/arrow-left-DD5jFGHV.js +1 -0
- package/static/app/assets/{bot-BK2xQ9mN.js → bot-C5-XIww2.js} +1 -1
- package/static/app/assets/{brain-BZNztFBb.js → brain-CFRJUvdX.js} +1 -1
- package/static/app/assets/{button-CjueubVZ.js → button-DI1KcQP-.js} +1 -1
- package/static/app/assets/circle-check-CY20XMCh.js +1 -0
- package/static/app/assets/{circle-pause-HRjSmpyY.js → circle-pause-C8HHyood.js} +1 -1
- package/static/app/assets/{circle-play-CMcKDVwu.js → circle-play-Cufc235E.js} +1 -1
- package/static/app/assets/{cpu-B_MyTfYr.js → cpu-DW2_JVsv.js} +1 -1
- package/static/app/assets/{download-CTy0EByV.js → download-gbdKTBb8.js} +1 -1
- package/static/app/assets/{folder-open-DF6bLhTg.js → folder-open-C9ydyX33.js} +1 -1
- package/static/app/assets/{hard-drive-CpWHG77C.js → hard-drive-BxNMzBM3.js} +1 -1
- package/static/app/assets/index-BovSWRmQ.css +2 -0
- package/static/app/assets/{index-Dd6abJHX.js → index-q9XyDY7A.js} +3 -3
- package/static/app/assets/{input-bVgIRN3s.js → input-GLD94Y_K.js} +1 -1
- package/static/app/assets/{link-2-bg6CG5Vk.js → link-2-B4Y0gz1S.js} +1 -1
- package/static/app/assets/{permissionCopy-DFTf1HDZ.js → permissionCopy-CxrV0fvU.js} +1 -1
- package/static/app/assets/{primitives-D7D-sQ3T.js → primitives-2ANdAsu2.js} +1 -1
- package/static/app/assets/search-DTxtjQ07.js +1 -0
- package/static/app/assets/{share-2-BLzo7U4L.js → share-2-DxArfiuI.js} +1 -1
- package/static/app/assets/{shield-alert-BmngqnsJ.js → shield-alert-CgftuFFs.js} +1 -1
- package/static/app/assets/{textarea-DOSlAQQ3.js → textarea-BHVBAoCr.js} +1 -1
- package/static/app/assets/{useFocusTrap-pZhgeee4.js → useFocusTrap-Dzq2j_OG.js} +1 -1
- package/static/app/assets/{useMutation-BMDwNk4I.js → useMutation-BcqfMLNq.js} +1 -1
- package/static/app/assets/{useQuery-CSjKttRo.js → useQuery-DBzLKCOv.js} +1 -1
- package/static/app/assets/{utils-D3u_yv7B.js → utils-B-Aah1bO.js} +1 -1
- package/static/app/assets/{workspace-H3bMjYXC.js → workspace-B6fFhoko.js} +1 -1
- package/static/app/index.html +4 -4
- package/static/sw.js +1 -1
- package/desktop/electron/README.md +0 -9
- package/desktop/electron/main.cjs +0 -58
- package/desktop/electron/preload.cjs +0 -5
- package/lattice_brain/archive.py +0 -522
- package/lattice_brain/context.py +0 -325
- package/lattice_brain/conversations.py +0 -382
- package/lattice_brain/core.py +0 -82
- package/lattice_brain/graph/_kg_contract.py +0 -249
- package/lattice_brain/graph/curator.py +0 -676
- package/lattice_brain/graph/discovery.py +0 -595
- package/lattice_brain/graph/discovery_index/__init__.py +0 -35
- package/lattice_brain/graph/discovery_index/cleanup.py +0 -182
- package/lattice_brain/graph/discovery_index/extract.py +0 -137
- package/lattice_brain/graph/discovery_index/scan.py +0 -411
- package/lattice_brain/graph/discovery_index/upsert.py +0 -495
- package/lattice_brain/graph/documents.py +0 -380
- package/lattice_brain/graph/fusion.py +0 -395
- package/lattice_brain/graph/identity.py +0 -175
- package/lattice_brain/graph/image_vectors.py +0 -230
- package/lattice_brain/graph/ingest.py +0 -829
- package/lattice_brain/graph/network.py +0 -205
- package/lattice_brain/graph/proactive.py +0 -724
- package/lattice_brain/graph/projection/__init__.py +0 -42
- package/lattice_brain/graph/projection/curation.py +0 -500
- package/lattice_brain/graph/projection/v2_schema.py +0 -546
- package/lattice_brain/graph/provenance.py +0 -524
- package/lattice_brain/graph/rerank.py +0 -163
- package/lattice_brain/graph/retrieval/__init__.py +0 -54
- package/lattice_brain/graph/retrieval/context.py +0 -197
- package/lattice_brain/graph/retrieval/graph_view.py +0 -319
- package/lattice_brain/graph/retrieval/hybrid.py +0 -488
- package/lattice_brain/graph/retrieval/maintenance.py +0 -121
- package/lattice_brain/graph/retrieval/signals.py +0 -95
- package/lattice_brain/graph/retrieval_docgen.py +0 -253
- package/lattice_brain/graph/retrieval_policy.py +0 -180
- package/lattice_brain/graph/retrieval_reads.py +0 -769
- package/lattice_brain/graph/retrieval_vector/__init__.py +0 -42
- package/lattice_brain/graph/retrieval_vector/fingerprint.py +0 -97
- package/lattice_brain/graph/retrieval_vector/indexing.py +0 -347
- package/lattice_brain/graph/retrieval_vector/search.py +0 -560
- package/lattice_brain/graph/retrieval_vector/status.py +0 -374
- package/lattice_brain/graph/schema.py +0 -792
- package/lattice_brain/graph/store.py +0 -268
- package/lattice_brain/graph/vector_index/__init__.py +0 -85
- package/lattice_brain/graph/vector_index/base.py +0 -170
- package/lattice_brain/graph/vector_index/brute_force.py +0 -114
- package/lattice_brain/graph/vector_index/hnsw.py +0 -293
- package/lattice_brain/graph/vector_index/jobs.py +0 -287
- package/lattice_brain/graph/vector_index/quantized.py +0 -151
- package/lattice_brain/graph/vector_index/selector.py +0 -161
- package/lattice_brain/graph/write_master.py +0 -308
- package/lattice_brain/ingestion/_contract.py +0 -90
- package/lattice_brain/ingestion/folder_scan.py +0 -57
- package/lattice_brain/ingestion/folders.py +0 -258
- package/lattice_brain/ingestion/jobs_api.py +0 -107
- package/lattice_brain/ingestion/routing.py +0 -295
- package/lattice_brain/ingestion_jobs.py +0 -383
- package/lattice_brain/memory.py +0 -102
- package/lattice_brain/portability/__init__.py +0 -90
- package/lattice_brain/portability/_contract.py +0 -42
- package/lattice_brain/portability/backups.py +0 -338
- package/lattice_brain/portability/bundles.py +0 -136
- package/lattice_brain/portability/constants.py +0 -93
- package/lattice_brain/portability/fsops.py +0 -138
- package/lattice_brain/portability/service.py +0 -41
- package/lattice_brain/portability/sharing.py +0 -714
- package/lattice_brain/quality.py +0 -592
- package/lattice_brain/retrieval_benchmark_fixtures.py +0 -92
- package/lattice_brain/runtime/agent_runtime.py +0 -859
- package/lattice_brain/runtime/contracts.py +0 -460
- package/lattice_brain/runtime/multi_agent.py +0 -942
- package/lattice_brain/runtime/statuses.py +0 -10
- package/lattice_brain/sealed_box.py +0 -244
- package/lattice_brain/self_model.py +0 -675
- package/lattice_brain/sensitivity.py +0 -94
- package/lattice_brain/storage/__init__.py +0 -22
- package/lattice_brain/storage/base.py +0 -100
- package/lattice_brain/storage/docker.py +0 -105
- package/lattice_brain/storage/factory.py +0 -31
- package/lattice_brain/storage/migration.py +0 -191
- package/lattice_brain/storage/postgres.py +0 -123
- package/lattice_brain/storage/sqlite.py +0 -143
- package/lattice_brain/synthesis.py +0 -824
- package/lattice_brain/workflow.py +0 -497
- package/latticeai/api/admin.py +0 -471
- package/latticeai/api/agent_registry.py +0 -105
- package/latticeai/api/agents.py +0 -228
- package/latticeai/api/auth.py +0 -360
- package/latticeai/api/automation_intelligence.py +0 -401
- package/latticeai/api/brain_intelligence.py +0 -199
- package/latticeai/api/browser.py +0 -493
- package/latticeai/api/change_proposals.py +0 -89
- package/latticeai/api/chat.py +0 -572
- package/latticeai/api/chat_agent_http.py +0 -901
- package/latticeai/api/chat_contracts.py +0 -73
- package/latticeai/api/chat_documents.py +0 -276
- package/latticeai/api/chat_helpers.py +0 -463
- package/latticeai/api/chat_history.py +0 -101
- package/latticeai/api/chat_hybrid.py +0 -113
- package/latticeai/api/chat_intents.py +0 -646
- package/latticeai/api/chat_stream.py +0 -216
- package/latticeai/api/chronicle.py +0 -63
- package/latticeai/api/command_center.py +0 -51
- package/latticeai/api/computer_use.py +0 -485
- package/latticeai/api/evidence_actions.py +0 -48
- package/latticeai/api/features.py +0 -70
- package/latticeai/api/funnel_metrics.py +0 -31
- package/latticeai/api/garden.py +0 -34
- package/latticeai/api/hooks.py +0 -165
- package/latticeai/api/index_jobs.py +0 -145
- package/latticeai/api/invitations.py +0 -100
- package/latticeai/api/knowledge_graph.py +0 -536
- package/latticeai/api/marketplace.py +0 -105
- package/latticeai/api/mcp.py +0 -482
- package/latticeai/api/memory.py +0 -270
- package/latticeai/api/network.py +0 -81
- package/latticeai/api/network_boundary.py +0 -225
- package/latticeai/api/permission_mode.py +0 -61
- package/latticeai/api/permissions.py +0 -410
- package/latticeai/api/plugins.py +0 -126
- package/latticeai/api/portability.py +0 -391
- package/latticeai/api/project_sessions.py +0 -114
- package/latticeai/api/realtime.py +0 -118
- package/latticeai/api/review_queue.py +0 -364
- package/latticeai/api/security_dashboard.py +0 -604
- package/latticeai/api/setup.py +0 -319
- package/latticeai/api/static_routes.py +0 -351
- package/latticeai/api/ui_redirects.py +0 -26
- package/latticeai/api/workflow_designer.py +0 -394
- package/latticeai/api/workspace.py +0 -856
- package/latticeai/api/workspace_scope.py +0 -125
- package/latticeai/core/agent/__init__.py +0 -93
- package/latticeai/core/agent/_contract.py +0 -79
- package/latticeai/core/agent/context.py +0 -57
- package/latticeai/core/agent/deps.py +0 -125
- package/latticeai/core/agent/execution.py +0 -622
- package/latticeai/core/agent/planning.py +0 -145
- package/latticeai/core/agent/recovery.py +0 -157
- package/latticeai/core/agent/runtime.py +0 -210
- package/latticeai/core/agent/verification.py +0 -231
- package/latticeai/core/agent_eval.py +0 -739
- package/latticeai/core/agent_helpers.py +0 -493
- package/latticeai/core/agent_profiles.py +0 -110
- package/latticeai/core/agent_prompts.py +0 -171
- package/latticeai/core/agent_registry.py +0 -232
- package/latticeai/core/agent_state.py +0 -41
- package/latticeai/core/agent_trace.py +0 -104
- package/latticeai/core/artifact_ledger.py +0 -109
- package/latticeai/core/audit.py +0 -260
- package/latticeai/core/builtin_hooks.py +0 -105
- package/latticeai/core/context_builder.py +0 -394
- package/latticeai/core/document_generator.py +0 -103
- package/latticeai/core/enterprise.py +0 -157
- package/latticeai/core/enterprise_admin.py +0 -158
- package/latticeai/core/file_generation/__init__.py +0 -115
- package/latticeai/core/file_generation/bundles.py +0 -76
- package/latticeai/core/file_generation/extraction.py +0 -154
- package/latticeai/core/file_generation/inference.py +0 -235
- package/latticeai/core/file_generation/orchestration.py +0 -152
- package/latticeai/core/file_generation/prompting.py +0 -117
- package/latticeai/core/file_generation/repair.py +0 -114
- package/latticeai/core/file_generation/sanitize.py +0 -61
- package/latticeai/core/file_generation/validation.py +0 -201
- package/latticeai/core/graph_curator.py +0 -11
- package/latticeai/core/hooks.py +0 -11
- package/latticeai/core/invitations.py +0 -131
- package/latticeai/core/legacy_compatibility.py +0 -243
- package/latticeai/core/local_embeddings.py +0 -104
- package/latticeai/core/logging_safety.py +0 -46
- package/latticeai/core/marketplace.py +0 -293
- package/latticeai/core/mcp_catalog.py +0 -452
- package/latticeai/core/mcp_registry.py +0 -506
- package/latticeai/core/multi_agent.py +0 -11
- package/latticeai/core/network_boundary.py +0 -168
- package/latticeai/core/oidc.py +0 -208
- package/latticeai/core/plugins.py +0 -432
- package/latticeai/core/product_hardening.py +0 -218
- package/latticeai/core/project_sessions.py +0 -337
- package/latticeai/core/realtime.py +0 -238
- package/latticeai/core/run_explain.py +0 -423
- package/latticeai/core/run_store.py +0 -252
- package/latticeai/core/timezones.py +0 -80
- package/latticeai/core/workflow_engine.py +0 -11
- package/latticeai/core/workspace_computer_memory.py +0 -84
- package/latticeai/core/workspace_graph_trace.py +0 -161
- package/latticeai/core/workspace_indexing.py +0 -102
- package/latticeai/core/workspace_memory.py +0 -77
- package/latticeai/core/workspace_onboarding.py +0 -104
- package/latticeai/core/workspace_os.py +0 -988
- package/latticeai/core/workspace_os_constants.py +0 -126
- package/latticeai/core/workspace_os_state.py +0 -180
- package/latticeai/core/workspace_os_utils.py +0 -69
- package/latticeai/core/workspace_permissions.py +0 -101
- package/latticeai/core/workspace_plugins.py +0 -97
- package/latticeai/core/workspace_relationships.py +0 -99
- package/latticeai/core/workspace_reorganization.py +0 -335
- package/latticeai/core/workspace_review_items.py +0 -118
- package/latticeai/core/workspace_runs.py +0 -732
- package/latticeai/core/workspace_skills.py +0 -114
- package/latticeai/core/workspace_snapshots.py +0 -198
- package/latticeai/core/workspace_timeline.py +0 -110
- package/latticeai/integrations/__init__.py +0 -0
- package/latticeai/integrations/telegram_bot/__init__.py +0 -123
- package/latticeai/integrations/telegram_bot/__main__.py +0 -17
- package/latticeai/integrations/telegram_bot/config.py +0 -86
- package/latticeai/integrations/telegram_bot/dispatch.py +0 -311
- package/latticeai/integrations/telegram_bot/flows.py +0 -478
- package/latticeai/integrations/telegram_bot/helpers.py +0 -322
- package/latticeai/integrations/telegram_bot/screens.py +0 -394
- package/latticeai/runtime/audit_runtime.py +0 -76
- package/latticeai/runtime/automation_runtime.py +0 -81
- package/latticeai/runtime/chat_wiring.py +0 -141
- package/latticeai/runtime/context_runtime.py +0 -66
- package/latticeai/runtime/feature_toggle_wiring.py +0 -163
- package/latticeai/runtime/history_runtime.py +0 -163
- package/latticeai/runtime/history_writer.py +0 -138
- package/latticeai/runtime/hooks_runtime.py +0 -77
- package/latticeai/runtime/model_wiring.py +0 -68
- package/latticeai/runtime/namespace_runtime.py +0 -163
- package/latticeai/runtime/network_boundary_wiring.py +0 -128
- package/latticeai/runtime/network_config_runtime.py +0 -56
- package/latticeai/runtime/permission_mode_wiring.py +0 -119
- package/latticeai/runtime/persistence_runtime.py +0 -159
- package/latticeai/runtime/platform_runtime_wiring.py +0 -89
- package/latticeai/runtime/review_wiring.py +0 -42
- package/latticeai/runtime/router_registration.py +0 -689
- package/latticeai/runtime/sso_config_runtime.py +0 -128
- package/latticeai/runtime/user_key_runtime.py +0 -106
- package/latticeai/runtime/web_runtime.py +0 -92
- package/latticeai/server_app.py +0 -51
- package/latticeai/services/app_context.py +0 -130
- package/latticeai/services/automation_execution.py +0 -266
- package/latticeai/services/automation_intelligence.py +0 -614
- package/latticeai/services/brain_automation.py +0 -191
- package/latticeai/services/brain_intelligence/__init__.py +0 -58
- package/latticeai/services/brain_intelligence/_contract.py +0 -71
- package/latticeai/services/brain_intelligence/consistency.py +0 -193
- package/latticeai/services/brain_intelligence/constants.py +0 -47
- package/latticeai/services/brain_intelligence/digest.py +0 -258
- package/latticeai/services/brain_intelligence/health.py +0 -331
- package/latticeai/services/brain_intelligence/proposals.py +0 -264
- package/latticeai/services/brain_intelligence/sampling.py +0 -84
- package/latticeai/services/brain_intelligence/service.py +0 -48
- package/latticeai/services/change_proposals.py +0 -505
- package/latticeai/services/chat_service.py +0 -243
- package/latticeai/services/chronicle.py +0 -557
- package/latticeai/services/cloud_egress_audit.py +0 -85
- package/latticeai/services/cloud_extraction.py +0 -129
- package/latticeai/services/cloud_streaming.py +0 -268
- package/latticeai/services/cloud_token_guard.py +0 -84
- package/latticeai/services/command_center.py +0 -548
- package/latticeai/services/evidence_actions.py +0 -255
- package/latticeai/services/feature_toggles.py +0 -502
- package/latticeai/services/folder_watch.py +0 -520
- package/latticeai/services/funnel_metrics.py +0 -307
- package/latticeai/services/hybrid_chat.py +0 -316
- package/latticeai/services/hybrid_context.py +0 -228
- package/latticeai/services/hybrid_policy.py +0 -178
- package/latticeai/services/ingestion.py +0 -11
- package/latticeai/services/interop_bridges.py +0 -978
- package/latticeai/services/kg_portability.py +0 -11
- package/latticeai/services/local_knowledge.py +0 -465
- package/latticeai/services/memory_service/__init__.py +0 -52
- package/latticeai/services/memory_service/_contract.py +0 -100
- package/latticeai/services/memory_service/brief.py +0 -431
- package/latticeai/services/memory_service/constants.py +0 -57
- package/latticeai/services/memory_service/maintenance.py +0 -138
- package/latticeai/services/memory_service/manager.py +0 -186
- package/latticeai/services/memory_service/proof.py +0 -136
- package/latticeai/services/memory_service/recall.py +0 -225
- package/latticeai/services/memory_service/service.py +0 -48
- package/latticeai/services/memory_service/stores.py +0 -110
- package/latticeai/services/model_recommendation.py +0 -224
- package/latticeai/services/model_runtime/cloud.py +0 -87
- package/latticeai/services/multimodal_streaming.py +0 -129
- package/latticeai/services/network_boundary_service.py +0 -154
- package/latticeai/services/obsidian_bridge.py +0 -609
- package/latticeai/services/openai_compatible_adapter.py +0 -101
- package/latticeai/services/permission_mode_service.py +0 -170
- package/latticeai/services/platform_runtime.py +0 -366
- package/latticeai/services/review_queue.py +0 -380
- package/latticeai/services/router_context.py +0 -59
- package/latticeai/services/run_executor.py +0 -387
- package/latticeai/services/self_model_service.py +0 -171
- package/latticeai/services/setup_detection.py +0 -81
- package/latticeai/services/triggers.py +0 -378
- package/latticeai/services/upload_service.py +0 -185
- package/latticeai/services/workspace_service.py +0 -171
- package/latticeai/setup/__init__.py +0 -25
- package/latticeai/setup/auto_setup.py +0 -857
- package/latticeai/setup/demo_corpus.py +0 -98
- package/latticeai/setup/wizard/__init__.py +0 -126
- package/latticeai/setup/wizard/catalog.py +0 -172
- package/latticeai/setup/wizard/detect.py +0 -323
- package/latticeai/setup/wizard/install.py +0 -348
- package/latticeai/setup/wizard/paths.py +0 -168
- package/latticeai/setup/wizard/plans.py +0 -74
- package/latticeai/setup/wizard/recommend.py +0 -320
- package/scripts/bench_agent_smoke.py +0 -409
- package/scripts/bench_models.py +0 -540
- package/scripts/bench_vector_index.py +0 -295
- package/scripts/funnel_soft_gate.py +0 -192
- package/scripts/generate_agent_loop_fixtures.py +0 -907
- package/scripts/generate_rust_parity_fixtures.py +0 -1000
- package/scripts/measure_brain_home_fill.mjs +0 -141
- package/scripts/migrate_brain_storage.py +0 -57
- package/scripts/parity_fixture_corpus_docgen.py +0 -341
- package/scripts/profile_kg.py +0 -355
- package/server.py +0 -30
- package/static/app/assets/arrow-left-BHYmOTWU.js +0 -1
- package/static/app/assets/circle-check-CLeWJr67.js +0 -1
- package/static/app/assets/index-DxmOfNRi.css +0 -2
- package/static/app/assets/search-BgSVX6NG.js +0 -1
package/docs/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,135 @@ The top entry is either the current unreleased main-branch work or the current
|
|
|
4
4
|
release line. Older entries are historical and may describe behavior as it
|
|
5
5
|
existed at that release.
|
|
6
6
|
|
|
7
|
+
## [11.6.0] - 2026-08-15 — One Door
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- **하나의 제품 서버**: `lattice-host`가 **네이티브 420 오퍼레이션 /
|
|
11
|
+
41 라우트 패밀리**를 원래 경로에 서빙합니다. `mount_table()`이 아홉
|
|
12
|
+
크레이트의 `MOUNTED` 합집합이고, `(method, path)` 중복은 axum 생성자
|
|
13
|
+
패닉이 아니라 라우터 생성 **전** 단언으로 실패합니다.
|
|
14
|
+
- **네이티브 KG write 엔진**(`lattice_core::graph_write`): ingest,
|
|
15
|
+
curation, provenance, taxonomy, 벡터 큐. 32단계 행 단위 패리티 골든과
|
|
16
|
+
`sqlite_master` 67객체 스키마 대조로 못박혔습니다.
|
|
17
|
+
- **Python 순수 연산 시임 9종**(`/worker/*`): embed, parse, render×4,
|
|
18
|
+
asr, multimodal/describe, extract. `LATTICEAI_AGENT_TOOL_SEAM` 게이트
|
|
19
|
+
뒤에 있으며 인증이 디코드보다 먼저 실행됩니다.
|
|
20
|
+
- **HTTP 골든 재생 스위트**: 커밋된 12개 픽스처의 **1,487 케이스**를
|
|
21
|
+
네이티브 라우트에 재생해 상태줄과 본문을 대조합니다.
|
|
22
|
+
- `rust/fixtures/worker_allowlist.json` — 게이트웨이 프록시 allowlist의
|
|
23
|
+
단일 출처(**28 라우트**). Python 쪽 `tests/unit/test_worker_allowlist.py`
|
|
24
|
+
6종이 집합/바이트/결정성/그리디 컨버터/그룹 라벨/"네이티브는 없음"을
|
|
25
|
+
단언합니다.
|
|
26
|
+
- `pdf` extra (`reportlab`) — `POST /worker/render/pdf`가 지연 임포트하던
|
|
27
|
+
선언되지 않은 의존성. 없으면 500이 아니라 "렌더러 사용 불가"입니다.
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
- **Python은 AI 워커입니다.** `create_app`은 사라졌고
|
|
31
|
+
`latticeai.worker_app:create_worker_app`이 이 패키지가 만드는 유일한
|
|
32
|
+
애플리케이션이며 **28 라우트**만 서빙합니다. 부트스트랩 10단계 → 7단계,
|
|
33
|
+
`RuntimeContext` 191 필드 → 47.
|
|
34
|
+
- 그래프 테이블 **17개**의 소유자가 WORKER → RUST_PLATFORM. 단일 writer
|
|
35
|
+
불변식이 주석이 아니라 테스트입니다.
|
|
36
|
+
- 변경 제안 스테이징·승인·적용이 인프로세스가 되었습니다. 루프는 Review
|
|
37
|
+
Center와 **같은 문서 핸들**(`GovernanceState`)로 스테이징하고, 적용은
|
|
38
|
+
네이티브 `write_file`과 같은 샌드박스를 지납니다. unified diff는 CPython
|
|
39
|
+
`difflib`를 이식한 `pydiff`(`autojunk` 포함)가 만듭니다.
|
|
40
|
+
- 워커 감독자가 uvicorn 팩토리로 기동합니다 —
|
|
41
|
+
`python -m uvicorn latticeai.worker_app:create_worker_app --factory`.
|
|
42
|
+
모듈 형태(`-m latticeai.worker_app`)는 `__main__` 가드가 없어 임포트하고
|
|
43
|
+
즉시 종료합니다.
|
|
44
|
+
- 잡 스케줄러가 `GraphWriter`를 받아 네이티브로 드레인합니다. 이전에는
|
|
45
|
+
워커에서 이미 사라진 `POST /api/index/drain`을 매 tick 때리고 백오프만
|
|
46
|
+
쌓았습니다.
|
|
47
|
+
- 공개 릴리스 히스토리와 보안 지원 하한이 **11.0.0**으로 상향
|
|
48
|
+
(README 표 · `RELEASE_NOTES.md` · `SECURITY.md` · 해당 테스트 동시 수정).
|
|
49
|
+
|
|
50
|
+
### Removed
|
|
51
|
+
- **Telegram 브리지** — 워커가 된 플랫폼 코드와 함께 삭제.
|
|
52
|
+
`latticeai.integrations.telegram_bot`은 임포트 불가 목록에 있습니다.
|
|
53
|
+
- **SSO OIDC 로그인/콜백 플로우** — 워커는 `/auth/*`를 마운트하지
|
|
54
|
+
않습니다. 설정 표면은 유지되고 패스워드 로그인은 네이티브입니다.
|
|
55
|
+
- Python **298 파일 / 73,617줄**. 의존성 `authlib`, `cryptography`,
|
|
56
|
+
`watchdog`, `psycopg[binary]`와 extras `ann`/`hnsw`/`postgres`.
|
|
57
|
+
- `POST /worker/chat/record-turn`, `POST /agent/change-proposal` —
|
|
58
|
+
둘 다 네이티브 경로가 대체했습니다.
|
|
59
|
+
|
|
60
|
+
### Fixed
|
|
61
|
+
- KG write 4건: `kgv2_*` 뷰만 충돌 시 `type`을 갱신하던 문제,
|
|
62
|
+
`sort_keys` 없는 직렬화 2곳, 기본 JSON 구분자로 해시되던 `edge:`/
|
|
63
|
+
`event:` id.
|
|
64
|
+
- 리댁션 2건: `Authorization: Bearer …`가 실제로는 리댁션되지 않던 문제,
|
|
65
|
+
아무것도 거절하지 않던 텔레그램 토큰 lookahead.
|
|
66
|
+
- 변경 제안 종류 화이트리스트가 `"reorganization"`과 비교해 **모든 폴더
|
|
67
|
+
재구성 제안이 승인 불가**였던 문제(실제 상수는 `"folder_reorganization"`).
|
|
68
|
+
- `serde_json/preserve_order` 피처 통합으로 제품 빌드에서 `Map`이 삽입
|
|
69
|
+
순서로 순회해 `sort_keys=True`를 자처하던 덤프가 정렬되지 않은
|
|
70
|
+
`metadata_json`을 쓰던 문제(읽으면 같고 해시는 다름).
|
|
71
|
+
- FastAPI ≥ 0.140에서 `include_router`가 더 이상 평탄화하지 않아 워커
|
|
72
|
+
라우트 필터가 라우트를 0개로 보던 문제 — 휠에서 부팅 자체가 실패하고
|
|
73
|
+
있었습니다.
|
|
74
|
+
|
|
75
|
+
### Known issues
|
|
76
|
+
- 그대로 이식한 오라클 버그 3건(`/api/command/search` knowledge 그룹 항상
|
|
77
|
+
비어 있음 · 리뷰 스누즈 offset-aware 500 · 제안 이중 거절 500),
|
|
78
|
+
업로드 추출 UTF-8 전용, 공급 벡터 1차 노드 한정, 네이티브 도구의 사용자
|
|
79
|
+
훅 미발화, `sanitize_write_content` 미적용, 워커 원점으로 남은 seam 호출
|
|
80
|
+
3건. 전문은 [RELEASE_NOTES_v11.6.0.md](../RELEASE_NOTES_v11.6.0.md).
|
|
81
|
+
|
|
82
|
+
## [11.5.2] - 2026-08-12 — Tight Ship
|
|
83
|
+
|
|
84
|
+
### Added
|
|
85
|
+
- `POST /api/search/graph` — 세 번째 검색 채널의 라우트. 허용 목록에는
|
|
86
|
+
있었지만 도달 경로가 없었습니다(감사 산출).
|
|
87
|
+
- `GET /api/ingestion/multimodal` — FEATURE_STATUS가 사용자 표면으로
|
|
88
|
+
기술하던 멀티모달 상태 조회를 실제 라우트에 배선.
|
|
89
|
+
- 골든 신규 2계열(코퍼스 총 **251 파일**): 실제 `/chat`이 호출하는
|
|
90
|
+
`build_recent_chat_context`를 못박는 `recent_chat`, 그리고
|
|
91
|
+
`document_targets`/`agent_profiles` 헬퍼 97행.
|
|
92
|
+
- 재발 금지 가드: `latticeai/` 아래 `sys.modules[__name__]` shim 패턴
|
|
93
|
+
금지(legacy-debt 게이트 확장).
|
|
94
|
+
- `scripts/bump_version.py`가 rust workspace **여섯 크레이트 전부**를
|
|
95
|
+
두 Cargo.lock에서 동기화합니다(11.5.0 이후 Phase 2/3/4 크레이트 세
|
|
96
|
+
개가 매 bump마다 스테일로 남아 테스트 실행이 트리를 더럽혔습니다).
|
|
97
|
+
|
|
98
|
+
### Changed
|
|
99
|
+
- **워크스페이스 선택자 통합(동작 변경, 의도됨)**: chat/agent/upload/
|
|
100
|
+
computer-use/admin의 축자 재구현이 정본 규칙을 사용합니다 — 헤더와
|
|
101
|
+
쿼리가 불일치하면 조용히 헤더를 택하는 대신 **403**.
|
|
102
|
+
- 임베더 byte-identical 쌍을 골든에 못박힌 사본으로 단일화(두 쓰기
|
|
103
|
+
경로 사이의 조용한 벡터 드리프트가 실패 양식이었습니다).
|
|
104
|
+
- sha256 헬퍼·SSE 프레임 빌더(출력 byte-identical)·데이터 디렉터리
|
|
105
|
+
기본값·모드 서비스 삼형제·모듈 임포트 프로브를 각각 한 곳으로.
|
|
106
|
+
- Rust byte-identical 사본 7건 통합(통째로 복사돼 있던 `clock.rs` 포함).
|
|
107
|
+
`lattice-agent`의 독립 `pystr`는 의도된 경계로 유지.
|
|
108
|
+
- `recent_chat` 골든이 실제 발산을 잡아냄: Python의 `limit=0` 꼬리
|
|
109
|
+
슬라이스는 전부를 남기는데 Rust는 빈 결과를 돌려주고 있었습니다.
|
|
110
|
+
**Python이 기준**이며 Rust를 수정했습니다.
|
|
111
|
+
|
|
112
|
+
### Fixed
|
|
113
|
+
- **프록시 리다이렉트**: 3xx가 `Set-Cookie`·`Location`을 온전히 달고
|
|
114
|
+
통과합니다. 초대 게이트의 막다른 길, SSO 로그인이 조용히 인증되지
|
|
115
|
+
않던 문제, 딥링크 12개의 프래그먼트 분실이 함께 해소됩니다. 내부
|
|
116
|
+
워커 오리진을 가리키는 절대 `Location`은 게이트웨이 오리진으로
|
|
117
|
+
재작성됩니다.
|
|
118
|
+
- **네이티브 레인 posture 게이팅(fail-closed)**: `/rust/*`와
|
|
119
|
+
`/host/status|jobs`는 워커가 인증을 요구하는 상태에서 그래프 전체를
|
|
120
|
+
무인증으로 서빙하고 있었습니다. posture가 닫힘/알 수 없음이면 401.
|
|
121
|
+
- **프록시 신원**: `X-Forwarded-For/Proto/Host`가 홉을 건너가고, 루프백
|
|
122
|
+
또는 `LATTICEAI_TRUSTED_PROXIES` 피어에서 온 것만 존중됩니다.
|
|
123
|
+
`--no-spawn` CSRF 거절과 내부 워커 포트를 적어 보내던 초대 링크·
|
|
124
|
+
권한 알림·SSO 리다이렉트 URL이 고쳐집니다.
|
|
125
|
+
- 수퍼바이저가 CSRF 오리진과 나란히 CORS 오리진도 주입합니다.
|
|
126
|
+
- 존재하지 않는 WebSocket 엔드포인트를 가리키던 CSP `ws://` 항목 제거.
|
|
127
|
+
- 게이트웨이 바인드 실패 시 Tauri 셸이 죽은 오리진으로 이동하지 않습니다.
|
|
128
|
+
|
|
129
|
+
### Removed
|
|
130
|
+
- 이사 간 모듈 shim 6종, 배선된 적 없는 멀티모달 스트리밍 시임,
|
|
131
|
+
호출자 0 심볼 약 27개(삭제마다 테스트 수술 동반), 소비자 없는
|
|
132
|
+
`metadata_for` 인터페이스(ABC + 구현 4곳), 죽은 측정 스크립트,
|
|
133
|
+
그리고 npm tarball에 아직 실려 나가던 **레거시 Electron 셸**
|
|
134
|
+
(Tauri가 대체) — 약 1,100줄.
|
|
135
|
+
|
|
7
136
|
## [11.5.1] - 2026-08-12 — Rust Full Loop
|
|
8
137
|
|
|
9
138
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Community And Plugins
|
|
2
2
|
|
|
3
|
-
Current release: **11.
|
|
3
|
+
Current release: **11.6.0 — One Door**.
|
|
4
4
|
|
|
5
5
|
LatticeAI defines the path from a strong local-first framework (8.4.0
|
|
6
6
|
action-aware baseline, 8.5.0 registry+DI hardening, 8.6.0 capture/navigation
|
package/docs/DEVELOPMENT.md
CHANGED
|
@@ -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.
|
|
6
|
+
Current release: **11.6.0 — One Door**.
|
|
7
7
|
|
|
8
8
|
This document is for contributors working on the local-first Digital Brain
|
|
9
|
-
codebase. Product positioning and quick start stay in `README.md`;
|
|
10
|
-
history is
|
|
11
|
-
`
|
|
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
|
-
-
|
|
24
|
-
|
|
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.
|
package/docs/ENTERPRISE.md
CHANGED
|
@@ -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
|
|
24
|
+
The seam moved to Rust with the product server in 11.6.0 and now lives in
|
|
25
|
+
[`rust/lattice-platform/src/admin/enterprise.rs`](../rust/lattice-platform/src/admin/enterprise.rs):
|
|
25
26
|
|
|
26
27
|
- `Edition` — `community` (default) or `enterprise`.
|
|
27
28
|
- `EnterpriseCapability` — the enum of reserved capabilities (below).
|
|
@@ -43,10 +43,14 @@ POST /api/network-boundary/policy
|
|
|
43
43
|
Users approve cloud-derived memory growth in the existing Review Center.
|
|
44
44
|
|
|
45
45
|
### Multimodal / video
|
|
46
|
-
`
|
|
47
|
-
-
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
There is no cloud multi-modal *streaming* path. A `multimodal_streaming` module
|
|
47
|
+
was written to a provider-adapter shape and never wired to a provider or a
|
|
48
|
+
route; 11.5.2 deleted it rather than keep a design sketch reading as a feature.
|
|
49
|
+
|
|
50
|
+
Multi-modal ingestion itself is local and unrelated to this document's cloud
|
|
51
|
+
boundary — see `lattice_brain/ingestion/routing.py` and the `allow_multimodal`
|
|
52
|
+
gate. If a cloud video provider ever lands, the module is recoverable from git
|
|
53
|
+
history (`latticeai/services/multimodal_streaming.py`, removed in 11.5.2).
|
|
50
54
|
|
|
51
55
|
### UI
|
|
52
56
|
`NetworkBoundaryPanel` (React) + `GET /api/network-boundary/ui-state`:
|
|
@@ -2,14 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
The Multi-Agent Runtime is the **orchestration layer** introduced in v2.0.0 and
|
|
4
4
|
operationalized in v2.2.0. It sits
|
|
5
|
-
*above* the
|
|
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:** `
|
|
10
|
-
|
|
11
|
-
- **
|
|
12
|
-
|
|
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"
|
package/docs/ONBOARDING.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Lattice AI Onboarding
|
|
2
2
|
|
|
3
|
-
Current release: **11.
|
|
3
|
+
Current release: **11.6.0 — One Door**.
|
|
4
4
|
|
|
5
5
|
The first-run goal is a five-minute path from "I opened the app" to "my Brain
|
|
6
6
|
has a source, a question, and proof." This page is the product contract behind
|
package/docs/OPERATIONS.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Lattice AI — Operations Guide (v11.
|
|
1
|
+
# Lattice AI — Operations Guide (v11.6.0)
|
|
2
2
|
|
|
3
3
|
> **Status: canonical** — kept in sync with the current release. Storage layout
|
|
4
4
|
> below reflects the SQLite live Brain store and workspace scoping, not the
|
|
@@ -136,8 +136,11 @@ pip install --upgrade ltcai
|
|
|
136
136
|
- [ ] `CSRF_TRUSTED_ORIGINS` 화이트리스트 설정
|
|
137
137
|
- [ ] `ALLOWED_COMMANDS` 검토 — python3/node 등 불필요한 실행 도구 제거
|
|
138
138
|
- [ ] 방화벽으로 4825 포트를 프록시만 접근 허용
|
|
139
|
-
|
|
140
|
-
|
|
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`](../
|
|
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,
|
package/docs/TRUST_MODEL.md
CHANGED
package/docs/WHY_LATTICE.md
CHANGED
|
@@ -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
|
-
[`
|
|
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
|
-
[`
|
|
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/architecture.md
CHANGED
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
> are intentionally frozen at that point in time.
|
|
8
8
|
|
|
9
9
|
> v3.6.0 — **Knowledge Graph First.** Every data source converges into the graph
|
|
10
|
-
> through one unified ingestion pipeline (`
|
|
10
|
+
> through one unified ingestion pipeline (`lattice_brain/ingestion/pipeline.py`), with
|
|
11
11
|
> formalized entities/relationships (`docs/kg-schema.md`), browser/web inputs,
|
|
12
12
|
> per-node provenance, and local export/import/backup
|
|
13
|
-
> (`
|
|
13
|
+
> (`lattice_brain/portability/`). The agent ecosystem, long-term memory,
|
|
14
14
|
> and skills/hooks/tool/MCP registries are all operable from `/app`. Enterprise
|
|
15
15
|
> controls remain future work.
|
|
16
16
|
|
|
@@ -158,8 +158,8 @@ Basic mode and advanced mode have the same feature access.
|
|
|
158
158
|
| `knowledge_graph.py` | Graph storage, extraction, local folder knowledge graph context |
|
|
159
159
|
| `latticeai/core/context_builder.py` | Graph context for generation |
|
|
160
160
|
| `latticeai/core/workspace_os.py` | Workspace state, timeline, snapshots, durable context |
|
|
161
|
-
| `
|
|
162
|
-
| `
|
|
161
|
+
| `lattice_brain/runtime/multi_agent.py` | Planner/executor/reviewer/researcher orchestration |
|
|
162
|
+
| `lattice_brain/workflow.py` | Workflow definitions and run history |
|
|
163
163
|
| `latticeai/core/plugins.py` | Plugin manifest, registry, permission boundary |
|
|
164
164
|
| `latticeai/core/security.py` | Local security primitives |
|
|
165
165
|
|
package/docs/kg-schema.md
CHANGED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# v11.5.2 — Tight Ship (design plan)
|
|
2
|
+
|
|
3
|
+
Three audits ran against the settled v11.5.1 tree: AUDIT-A (Rust↔Python
|
|
4
|
+
duplication map), AUDIT-B (dead code and no-longer-needed tests, arc-level
|
|
5
|
+
verified against the 100% line+branch gate), AUDIT-C (live front-door parity:
|
|
6
|
+
Rust gateway vs. direct Python worker, 192-endpoint sweep plus targeted
|
|
7
|
+
batteries). This plan is the design synthesis; implementation is delegated in
|
|
8
|
+
two waves. Nothing in this release changes the migration's final form: Python
|
|
9
|
+
remains the AI Worker and the sole client-facing implementation of every
|
|
10
|
+
`/api/*` route; the Rust surface stays pinned by parity goldens.
|
|
11
|
+
|
|
12
|
+
## Audit verdicts that shape the release
|
|
13
|
+
|
|
14
|
+
1. **Cross-boundary duplication is all by design.** Every Rust module's Python
|
|
15
|
+
twin either serves a live route in Python-direct mode or feeds a parity
|
|
16
|
+
golden. Zero cross-boundary deletions. The real duplication is intra-Python
|
|
17
|
+
and intra-Rust.
|
|
18
|
+
2. **The dead code is pre-Rust debt.** Six moved-module shims with zero
|
|
19
|
+
non-test importers, one never-wired streaming seam, and 27 zero-caller
|
|
20
|
+
symbols whose only callers are their own tests ("dead code wearing a
|
|
21
|
+
test" — invisible to the coverage gate by construction).
|
|
22
|
+
3. **The 183 `test_cov_wp*` files are all load-bearing.** Ten look deletable
|
|
23
|
+
by line analysis and are collectively sole owners of 79 branch arcs. The
|
|
24
|
+
seven coverage-redundant feature-test files carry behavioural regression
|
|
25
|
+
value and are deliberately kept.
|
|
26
|
+
4. **The front door has seven real gaps (G1–G7)**, one of which (Set-Cookie
|
|
27
|
+
destroyed on proxied redirects) makes the invite gate a hard dead-end and
|
|
28
|
+
silently breaks SSO login.
|
|
29
|
+
|
|
30
|
+
## Workstream 1 — deletions (paired, gate-preserving)
|
|
31
|
+
|
|
32
|
+
- Six moved-module shims: `latticeai/core/{graph_curator,hooks,multi_agent,workflow_engine}.py`,
|
|
33
|
+
`latticeai/services/{ingestion,kg_portability}.py` + the shim-existence
|
|
34
|
+
tests + their `[tool.mypy] files` entries.
|
|
35
|
+
- `latticeai/services/multimodal_streaming.py` (never wired; restorable from
|
|
36
|
+
git if a provider ever lands).
|
|
37
|
+
- 25 of AUDIT-B's 27 dead symbols, with per-test surgery on the enumerated
|
|
38
|
+
collateral lines so `fail_under = 100` (lines AND branch arcs) holds.
|
|
39
|
+
Decisions on the three flagged items: `delete_conversation` **stays**
|
|
40
|
+
(public store API, exercised as a fixture by the read-equivalence suite);
|
|
41
|
+
`propose_file_delete` **goes together with** the now-uncreatable
|
|
42
|
+
`file_delete` limb of `approve()`; `multimodal_status` **is wired, not
|
|
43
|
+
deleted** (Workstream 3) — FEATURE_STATUS already documents it as
|
|
44
|
+
user-facing behaviour.
|
|
45
|
+
- `metadata_for` interface method (declared on the vector-index ABC,
|
|
46
|
+
implemented four times, called zero times) — removed from ABC and all
|
|
47
|
+
four implementations.
|
|
48
|
+
- `scripts/measure_brain_home_fill.mjs`, `tests/fixtures/filegen/` (12 unread
|
|
49
|
+
data files), and the legacy `desktop/electron/` shell (hardcodes 4825,
|
|
50
|
+
injects none of the safety flags, superseded by Tauri) after verifying it is
|
|
51
|
+
not referenced by any release artifact or workflow.
|
|
52
|
+
- A new guard extends the legacy-shim gate inward: no
|
|
53
|
+
`sys.modules[__name__] = _impl` shim may exist under `latticeai/` again.
|
|
54
|
+
|
|
55
|
+
## Workstream 2 — consolidation (behaviour-preserving unless stated)
|
|
56
|
+
|
|
57
|
+
Python (the canonical copy is named; the direction always keeps
|
|
58
|
+
`lattice_brain` import-free of `latticeai`):
|
|
59
|
+
|
|
60
|
+
- **Embedder pair**: `latticeai/core/local_embeddings.py` is byte-identical to
|
|
61
|
+
the golden-pinned `lattice_brain/embeddings.py`. The unpinned copy is
|
|
62
|
+
deleted and importers rewired — silent vector drift between two write paths
|
|
63
|
+
was the failure mode.
|
|
64
|
+
- **`workspace_scope_from_request`**: the four verbatim re-derivations
|
|
65
|
+
(`chat_helpers`, `upload_service`, `computer_use`, `admin`) import the
|
|
66
|
+
canonical `api/workspace_scope.py`. Behaviour change, intended: the copies
|
|
67
|
+
silently preferred the header where the canonical rule 403s on
|
|
68
|
+
disagreement.
|
|
69
|
+
- `_default_data_dir` ×4 → `core/config.py`; sha256-hex ×6 → one helper;
|
|
70
|
+
SSE frame builders ×5 → one `sse_frame` (byte-identical output);
|
|
71
|
+
`model_runtime/engines.py` delegator/dead-fragment cleanup;
|
|
72
|
+
the AST-identical mode-service triplet → a `JsonBackedModeService` base;
|
|
73
|
+
module-importability ×4 → one helper (`find_spec` default, real-import
|
|
74
|
+
`strict=True` kept where native-lib load failures matter, e.g. mlx);
|
|
75
|
+
`parse_iso` → `lattice_brain/utils` (the golden-pinned copy);
|
|
76
|
+
`_detect_gpu`/`_detect_cpu` → `setup/wizard/detect.py`; the small ×2
|
|
77
|
+
helpers and the workspace-store mixin where mechanical.
|
|
78
|
+
|
|
79
|
+
Rust: `gateway/clock.rs` (wholesale copy) deleted in favour of
|
|
80
|
+
`lattice_retrieval::routes::naive_local_now`; `brain_not_found` shared;
|
|
81
|
+
`haystack`/`json_opt` lifted into `shape.rs`; `in_set`/`bad_request` lifted
|
|
82
|
+
within `lattice-agent`; `is_py_space`/`round3` shared from `lattice-core` into
|
|
83
|
+
`lattice-ingest`. `lattice-agent`'s independent `pystr` stays — its
|
|
84
|
+
zero-dependency isolation is a deliberate boundary.
|
|
85
|
+
|
|
86
|
+
Deliberately **not** done in a patch release: splitting the three oversized
|
|
87
|
+
route factories (`create_workspace_router` 706 lines et al.) — recorded as
|
|
88
|
+
future work, not silently dropped.
|
|
89
|
+
|
|
90
|
+
## Workstream 3 — front-door and feature gaps
|
|
91
|
+
|
|
92
|
+
- **G1/G4 (redirects)**: the proxy gets its own reqwest client with redirect
|
|
93
|
+
following disabled; 3xx responses pass through with their `Set-Cookie` and
|
|
94
|
+
`Location` intact; absolute `Location` values naming the internal worker
|
|
95
|
+
origin are rewritten to the request's gateway origin. Fixes the invite
|
|
96
|
+
gate, SSO login, and the twelve legacy deep links.
|
|
97
|
+
- **G2/G3 (native-lane auth)**: the native `/rust/*` and `/host/*` lanes
|
|
98
|
+
mirror Python's `trusted_local_owner` posture exactly. The worker's health
|
|
99
|
+
payload gains the posture facts; the gateway caches them from its existing
|
|
100
|
+
health polling and **fails closed** (posture unknown → native lanes refuse).
|
|
101
|
+
With `LATTICEAI_REQUIRE_AUTH=true` the native lanes answer 401 with a
|
|
102
|
+
machine-readable reason instead of serving the graph unauthenticated (G2)
|
|
103
|
+
or dying mid-loop on a seam 401 (G3). FEATURE_STATUS states the boundary:
|
|
104
|
+
the native lanes are an open-posture, single-local-owner surface in 11.5.2.
|
|
105
|
+
- **G5/G7 (proxied identity)**: the proxy adds `X-Forwarded-For/Proto/Host`;
|
|
106
|
+
the worker computes its effective external origin from `X-Forwarded-Host`
|
|
107
|
+
only when the direct peer is loopback or listed in
|
|
108
|
+
`LATTICEAI_TRUSTED_PROXIES`. CSRF's `Origin == Host` fallback and the three
|
|
109
|
+
absolute-URL producers (admin invite link, permission notifications, SSO
|
|
110
|
+
redirect default) use it. Threat model note: browsers cannot set
|
|
111
|
+
`X-Forwarded-Host`, and a local non-browser caller could already forge
|
|
112
|
+
`Origin`, so this widens nothing.
|
|
113
|
+
- **G6 (CORS)**: the supervisor injects `LATTICEAI_CORS_ALLOWED_ORIGINS` with
|
|
114
|
+
the gateway origins, mirroring the CSRF injection — the browser extension
|
|
115
|
+
and any cross-origin local client work through the front door.
|
|
116
|
+
- **Feature gaps surfaced by the audits**: `graph_search` gains its missing
|
|
117
|
+
route (`POST /api/search/graph` — it was allow-listed but unreachable);
|
|
118
|
+
`multimodal_status` is wired to the route FEATURE_STATUS describes; the
|
|
119
|
+
`recent_chat` context seam is investigated and either wired into the live
|
|
120
|
+
assembler or the golden amended to match reality (whichever the original
|
|
121
|
+
intent supports — the current state, a golden pinning behaviour the product
|
|
122
|
+
never executes, is the one option that stays wrong); `tools/documents.py`
|
|
123
|
+
and `core/agent_profiles.py` — live `/agent` hot-path twins with no golden —
|
|
124
|
+
enter the fixture generators.
|
|
125
|
+
- Small honest fixes: stale `ws://` removed from both CSPs (no WebSocket
|
|
126
|
+
endpoint exists); the Tauri shell no longer navigates to a dead origin when
|
|
127
|
+
the gateway fails to bind.
|
|
128
|
+
|
|
129
|
+
Recorded, not fixed (with reasons): no request timeout on the proxy hop (a
|
|
130
|
+
blanket timeout would kill long-lived SSE; the 15-minute model endpoints rely
|
|
131
|
+
on the current behaviour), `request.is_disconnected()` seeing the gateway's
|
|
132
|
+
socket (inherent to proxying), per-IP buckets collapsing on loopback (the
|
|
133
|
+
gateway is loopback-only; the direct topology behaved identically).
|
|
134
|
+
|
|
135
|
+
## Release mechanics
|
|
136
|
+
|
|
137
|
+
Both waves verified on the settled tree (dev 3.14 + fresh-resolve 3.11) before
|
|
138
|
+
the machinery runs: bump to 11.5.2 (Cargo.lock joins the sync so the suite
|
|
139
|
+
stops dirtying the tree), OpenAPI regenerated (new routes), release theme
|
|
140
|
+
"Tight Ship", OPERATIONS title, screen-claims entry (backend-only:
|
|
141
|
+
all thirteen measured, none gated), release notes / CHANGELOG / README /
|
|
142
|
+
extension README, screenshots + GIF re-shot at 11.5.2, ARCHITECTURE System
|
|
143
|
+
Map labels updated (proxy semantics, posture-gated native lanes), DMG via
|
|
144
|
+
release:artifacts, tag + GitHub Release, main push, CI green.
|