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
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# v11.6.0 — One Door (설계 문서)
|
|
2
|
+
|
|
3
|
+
> 상태: 계획 → 구현. 목표는 한 문장이다: **이 릴리스가 끝나면 Python은
|
|
4
|
+
> AI Worker로만 쓰인다.** v11.5.1이 "설계상 최종 형태"로 남겨 둔
|
|
5
|
+
> 플랫폼 라우트 박스(~450 라우트)를 Rust로 옮기고, Python 워커는
|
|
6
|
+
> v11.5.1이 정의한 워커 소유물 — LLM 추론, 도구 핸들러 실행과
|
|
7
|
+
> 그래프·파일 쓰기(단일 작성자), 제안 스테이징, 문서 파서 매트릭스,
|
|
8
|
+
> 임베딩 생산 — 만 남긴다.
|
|
9
|
+
|
|
10
|
+
## 정찰 확정 수치 (2026-08-14)
|
|
11
|
+
|
|
12
|
+
- Python 라우트 464개 = KEEP_WORKER **25** + PORT_STATE **313** +
|
|
13
|
+
PORT_ORCH **108** + STATIC **18**. 클라이언트가 실제 밟는 경로는
|
|
14
|
+
~190개(전 계약 문서화됨).
|
|
15
|
+
- Rust 네이티브는 24 라우트(~5%). 프록시는 견고(스트리밍·쿠키·
|
|
16
|
+
멀티파트·SSE 무손상)하나 게이트웨이 자체 인증은 없다.
|
|
17
|
+
- 결핍 인프라: 인증/세션, 쓰기측 SQLite, 서버 메시지 i18n(한글
|
|
18
|
+
리터럴 292), CSRF/CORS 네이티브, SSE 파이프, 멀티파트, 레이트리밋,
|
|
19
|
+
OpenAPI 생성, SPA 서빙, 워크스페이스 스코핑.
|
|
20
|
+
|
|
21
|
+
## 최종 Python 워커 표면 (25 라우트 — 이것만 남는다)
|
|
22
|
+
|
|
23
|
+
`/health` · `/agent/{llm,tool,change-proposal}` ·
|
|
24
|
+
`/api/index/{drain,rebuild}` · `/api/embeddings/{status,providers}` ·
|
|
25
|
+
`/models` `/models/{load,switch/*,unload/*,unload-all}` ·
|
|
26
|
+
`/engines/prepare-model{,/stream}` ·
|
|
27
|
+
`/tools/{read_document,pdf_pages,create_docx,create_xlsx,create_pptx,create_pdf}` ·
|
|
28
|
+
`/upload/document` · `/api/ingestion/multimodal` ·
|
|
29
|
+
`/api/capture/voice{,/status}` · (+`/knowledge-graph/ingest` 그래프
|
|
30
|
+
단일 작성자 시임으로 유지)
|
|
31
|
+
|
|
32
|
+
여기에 v11.6.0 additive 시임을 더한다(§WP-I6): 히스토리 기록
|
|
33
|
+
(redact→audit→store→ingest 체인), 그래프 쓰기 위임, GPU sysinfo.
|
|
34
|
+
셋 다 게이트웨이(루프백 호스트)만 호출한다.
|
|
35
|
+
|
|
36
|
+
## 설계 결정
|
|
37
|
+
|
|
38
|
+
1. **토폴로지** — lattice-host 게이트웨이가 제품 서버가 된다. 464개
|
|
39
|
+
중 439개 라우트를 **기존 경로 그대로** 네이티브 axum 핸들러로
|
|
40
|
+
서빙한다(클라이언트 무변경). 프록시 폴스루는 워커 시임 25개만
|
|
41
|
+
통과시키는 allowlist로 뒤집는다 — 남는 프록시가 곧 워커 계약이다.
|
|
42
|
+
2. **저장소 쓰기 분할 (2026-08-14 상향)** — 사용자 기준 확정: **Rust가
|
|
43
|
+
쓰기 경로 전체의 주인이다.** 플랫폼 상태(사용자/세션, 워크스페이스,
|
|
44
|
+
리뷰 큐, 제안, 설정, 잡, 히스토리)뿐 아니라 **지식 그래프 쓰기
|
|
45
|
+
엔진도 Rust로 이관한다**(Wave 2.5 §W1: store write/ingest/projection/
|
|
46
|
+
provenance/벡터 쓰기 네이티브 — Python 스토어와 행 단위 패리티 골든).
|
|
47
|
+
Python 워커는 상태를 소유하지 않는 **순수 계산 워커**가 된다:
|
|
48
|
+
임베딩은 `/worker/embed`가 벡터를 반환하고 Rust가 저장하며, 문서
|
|
49
|
+
생성은 렌더 시임이 바이트를 반환하고 Rust가 파일을 놓는다. 전환
|
|
50
|
+
순서상 Wave 2는 상태-시임(`/worker/graph/mutate`,
|
|
51
|
+
`/worker/chat/record-turn`)에 대고 작업하고, Wave 2.5(§W3)가 그
|
|
52
|
+
호출부를 네이티브 쓰기 엔진으로 교체한 뒤 해당 시임을 폐지한다.
|
|
53
|
+
Scout가 찾은 "작성자 3곳"(write_file/edit_file, proposal approve)은
|
|
54
|
+
lattice-agent sandbox Workspace로 일원화한다(제안 apply 포함 —
|
|
55
|
+
네이티브).
|
|
56
|
+
3. **인증** — 신규 `lattice-auth` 크레이트: 세션/사용자/로그인/역할/
|
|
57
|
+
워크스페이스 스코프/레이트리밋 + CSRF Origin 7분기 포트. Python의
|
|
58
|
+
수제 쿠키 파서 의미론과 **정확한 거부 본문**까지 픽스처로 결속한다.
|
|
59
|
+
인증은 Python에서 핸들러 본문 안에 있으므로 OpenAPI가 아니라
|
|
60
|
+
본문 전사로 옮긴다(라우트 WP 명세에 인증 요구를 명기).
|
|
61
|
+
4. **OpenAPI 계약 파이프라인** — `frontend/openapi.json`이 계약의
|
|
62
|
+
단일 출처로 유지된다. Rust로 간 라우트의 스펙은 크레이트 옆에
|
|
63
|
+
데이터(JSON 프래그먼트)로 살고, Rust 테스트가 "마운트된 라우트 ==
|
|
64
|
+
스펙 경로"를 단언한다. `scripts/export_openapi.py`는 워커-전용
|
|
65
|
+
앱(축소된 app_factory) 스펙 + Rust 프래그먼트를 합성하는 컴포저로
|
|
66
|
+
재작성한다. 드리프트 게이트는 그대로 문다.
|
|
67
|
+
5. **i18n** — `lattice-core::messages` ko/en 카탈로그. 라우트가
|
|
68
|
+
이주할 때 해당 한글 리터럴도 함께 이주한다.
|
|
69
|
+
`check_server_i18n.mjs`의 라우터 목록은 축소분만큼 갱신.
|
|
70
|
+
6. **SSE** — `POST /chat`(오케스트레이션: redact→audit→워커 LLM
|
|
71
|
+
스트림→store→ingest 시임), `/engines/prepare-model/stream`
|
|
72
|
+
(워커 프록시 유지 — KEEP), `/agent`(v11.5.1 네이티브 루프 재사용,
|
|
73
|
+
경로만 게이트웨이가 직접 답함). **Accept 헤더 협상 금지** —
|
|
74
|
+
VS Code는 body `stream:true`만 보낸다.
|
|
75
|
+
7. **정적/SPA** — 게이트웨이 ServeDir: `/app`, `/static`, `/icons`,
|
|
76
|
+
`manifest.json`, `favicon.ico`, `sw.js` + `GET /chat` 리다이렉트.
|
|
77
|
+
8. **크레이트 배치** — 신규 3개: `lattice-auth`, `lattice-platform`
|
|
78
|
+
(workspace·admin·features·permissions·review·proposals·mcp·
|
|
79
|
+
marketplace·plugins·hooks·registry), `lattice-chat`(채팅
|
|
80
|
+
오케스트레이션 + hybrid cloud lane). 도메인 적합 라우트는 기존
|
|
81
|
+
크레이트 확장(retrieval: memory/brain 읽기, ingest: local_files/
|
|
82
|
+
capture, jobs: index). `RUST_CRATES`(bump/버전일관성) 갱신 필수.
|
|
83
|
+
9. **Python 축소** — `LATTICEAI_WORKER_ONLY=1` 프로필이 아니라
|
|
84
|
+
**삭제**가 원칙: keep-set(pts_grok 산출) 밖의 latticeai/
|
|
85
|
+
lattice_brain 모듈과 그 테스트를 지운다. 커버리지 100%는 분모
|
|
86
|
+
축소로 유지하되 arc 단위로 확인. 게이트 파일 10종 동기화
|
|
87
|
+
(mypy files 403경로, setuptools packages, wheel smoke 29모듈,
|
|
88
|
+
MANIFEST, package.json files, product_readiness needle,
|
|
89
|
+
FEATURE_STATUS `_NOT_HTTP_PATHS`, server_app 분해 테스트,
|
|
90
|
+
Release History 테스트, i18n 라우터 목록).
|
|
91
|
+
10. **클라이언트/진입점** — SPA·확장·Telegram은 무변경(경로 보존).
|
|
92
|
+
`bin/ltcai.js`·`cli/entrypoint.py`·src-tauri `direct/external`
|
|
93
|
+
토폴로지는 lattice-host 프론트 필수로 재배선. 워커 진입점은
|
|
94
|
+
유지(`server:app`) — 호스트가 스폰한다.
|
|
95
|
+
|
|
96
|
+
## 검증 규약 (전 WP 공통)
|
|
97
|
+
|
|
98
|
+
- **캡처-리플레이 패리티**: 삭제 전 Python 구현에서 TestClient로
|
|
99
|
+
라우트별 골든 요청/응답(정상 + 인증거부 + 오류 분기)을 생성해
|
|
100
|
+
`rust/fixtures/http/<family>.json`으로 커밋, Rust 테스트가 리플레이.
|
|
101
|
+
클라이언트가 밟는 ~190 경로는 전 분기, 나머지는 대표 분기.
|
|
102
|
+
- **네이티브 증명**: lattice-host `FakeWorker`로 "워커 요청 0건" 단언
|
|
103
|
+
(기존 gateway_mounts.rs 패턴).
|
|
104
|
+
- 공유 파일(`rust/Cargo.toml`, `gateway/{mod,mounts}.rs`,
|
|
105
|
+
`app_factory.py`, `pyproject.toml`)은 **통합자(Fable 5)만** 편집.
|
|
106
|
+
각 WP는 자기 크레이트/모듈 파일만 소유하고 배선 노트를 남긴다.
|
|
107
|
+
|
|
108
|
+
## 작업 패키지
|
|
109
|
+
|
|
110
|
+
Wave 1 — 인프라 (병렬):
|
|
111
|
+
- **I1** `lattice-core::db` 쓰기측(WAL·busy_timeout·풀) + 테이블
|
|
112
|
+
소유권 지도 + config 구조체 (Opus)
|
|
113
|
+
- **I2** `lattice-auth` + 게이트웨이 인증/CSRF/보안헤더 레이어 (Opus)
|
|
114
|
+
- **I3** `lattice-core::messages` ko/en 카탈로그 + 추출 (pts_grok)
|
|
115
|
+
- **I4** 게이트웨이 정적/SPA 서빙 + ui_redirects + static_routes (Opus)
|
|
116
|
+
- **I5** OpenAPI 컴포저 파이프라인 (Opus)
|
|
117
|
+
- **I6** Python 워커 additive 시임 3종 + 워커-전용 app 프로필 (Opus)
|
|
118
|
+
|
|
119
|
+
Wave 2 — 라우트 패밀리 (병렬, 픽스처 우선 생성):
|
|
120
|
+
- **R1** workspace(56)+scope+invitations+permissions → platform (Opus)
|
|
121
|
+
- **R2** admin+security_dashboard+features+funnel+setup → platform (Opus)
|
|
122
|
+
- **R3** auth 라우트(login/register/account) → auth (I2에 병합)
|
|
123
|
+
- **R4** chat 전 계열 + hybrid lane → lattice-chat (Opus, 최대 난도)
|
|
124
|
+
- **R5** memory+brain_intelligence+garden+chronicle+command_center+
|
|
125
|
+
evidence_actions → retrieval/platform (Opus)
|
|
126
|
+
- **R6** knowledge_graph+search+index+local_files+local_knowledge+
|
|
127
|
+
browser → ingest/retrieval (Opus)
|
|
128
|
+
- **R7** review_queue+change_proposals+automation_intelligence+hooks
|
|
129
|
+
→ platform (Opus)
|
|
130
|
+
- **R8** mcp+marketplace+plugins+agent_registry+agents+tools(비문서)
|
|
131
|
+
→ platform/agent (pts_grok)
|
|
132
|
+
- **R9** portability+network+network_boundary+realtime+
|
|
133
|
+
project_sessions+voice목록+computer_use표면 → platform (Opus)
|
|
134
|
+
- **R10** models 카탈로그/추천(비MLX)+permission_mode+
|
|
135
|
+
workflow_designer+잔여 → platform (Opus)
|
|
136
|
+
|
|
137
|
+
Wave 2.5 — 쓰기 경로 주권 이관 (Rust = 쓰기 주인, Python = 순수 계산):
|
|
138
|
+
- **W1** 네이티브 KG 쓰기 엔진: lattice_brain 그래프 write/ingest/
|
|
139
|
+
projection/provenance/벡터 쓰기 미러 포트 + 행 단위 패리티 골든
|
|
140
|
+
(Opus). `/knowledge-graph/ingest`·`/upload/document`·index drain/
|
|
141
|
+
rebuild가 네이티브가 된다.
|
|
142
|
+
- **W2** Python 순수 계산 시임: `/worker/embed`(벡터 반환),
|
|
143
|
+
`/worker/render/{docx,xlsx,pptx,pdf}`(바이트 반환), 파싱/ASR/멀티모달
|
|
144
|
+
시임 정렬; 상태-시임 3종 폐지 준비.
|
|
145
|
+
- **W3** Wave-2 호출부 교체: WorkerSeamClient 상태-시임 호출 →
|
|
146
|
+
네이티브 쓰기 엔진/감사 싱크; redact 규칙 네이티브 포트; record-turn
|
|
147
|
+
체인(redact→audit→store→ingest) 전부 Rust.
|
|
148
|
+
- **W4** 뮤테이팅 도구 핸들러 네이티브화: `/agent/tool`은 계산 전용
|
|
149
|
+
화이트리스트로 축소, 쓰기 도구는 sandbox/graph-write 경유.
|
|
150
|
+
|
|
151
|
+
Wave 3 — 축소·재배선:
|
|
152
|
+
- **P1** Python 삭제(keep-set 기준) + 테스트 정리 + 게이트 10종 동기화
|
|
153
|
+
- **P2** bin/ltcai.js·entrypoint·tauri 토폴로지 재배선
|
|
154
|
+
- **P3** 죽는 골든 생성기 정리(참조 구현 이관 또는 명시적 폐기)
|
|
155
|
+
|
|
156
|
+
Wave 4 — 릴리스: bump 11.6.0(31 타겟) → OpenAPI 재생성 →
|
|
157
|
+
releaseTheme "One Door" → 문서 동기화(README 현행 릴리스 문장·미디어
|
|
158
|
+
경로·Release History **11.0.0 미만 제거 + 해당 단언 테스트 갱신**,
|
|
159
|
+
RELEASE_NOTES, CHANGELOG, ARCHITECTURE **System Map 재작성**,
|
|
160
|
+
SECURITY 11.6.x, FEATURE_STATUS, release_screen_claims 11.6.0 엔트리)
|
|
161
|
+
→ build:assets → release:evidence(13샷+GIF) → 4중 로컬 검증
|
|
162
|
+
(fresh venv·비편집 설치·linux 컨테이너·rust 컨테이너) → artifacts →
|
|
163
|
+
main 커밋·푸시 → CI 그린.
|
|
164
|
+
|
|
165
|
+
## 완성 후 남는 것
|
|
166
|
+
|
|
167
|
+
Python AI Worker: 추론·도구 실행/그래프 쓰기·제안 스테이징·문서
|
|
168
|
+
파서·임베딩 + additive 시임 3종. HTTP 표면 25(+시임). 그 외 전부
|
|
169
|
+
Rust. 이것이 "One Door": 사용자와 클라이언트가 두드리는 문은
|
|
170
|
+
lattice-host 하나다.
|
|
@@ -1,87 +1,50 @@
|
|
|
1
|
-
"""lattice-brain —
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
"""lattice-brain — the compute half of the Brain Core.
|
|
2
|
+
|
|
3
|
+
This package hosted the knowledge graph, memory, context assembly,
|
|
4
|
+
conversations, the ingest write door, the agent/hook runtime, the workflow
|
|
5
|
+
engine, portability and the storage abstraction. v11.6.0 §Wave 2.5 made Rust
|
|
6
|
+
the single writer of every one of those, and WP-P1 deleted the Python side.
|
|
7
|
+
|
|
8
|
+
What remains is what a **pure compute worker** needs, and it is deliberately
|
|
9
|
+
small: the always-on hash embedder, the document parser matrix, chunking,
|
|
10
|
+
concept/triple extraction, the multi-modal fact readers, and the ingestion
|
|
11
|
+
vocabulary both sides hash against. The package still never imports
|
|
12
|
+
``latticeai``.
|
|
13
|
+
|
|
14
|
+
Nothing here is lazy any more, because nothing here is heavy: the modules that
|
|
15
|
+
justified the lazy table (the store, the ANN index, the workflow engine) are
|
|
16
|
+
gone.
|
|
12
17
|
"""
|
|
13
18
|
|
|
14
|
-
from .
|
|
15
|
-
from .
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
from .embeddings import LocalEmbeddingModel
|
|
20
|
+
from .multimodal import (
|
|
21
|
+
AudioFacts,
|
|
22
|
+
ImageFacts,
|
|
23
|
+
MultimodalPorts,
|
|
24
|
+
VideoFacts,
|
|
25
|
+
detect_modality,
|
|
26
|
+
extract_image_facts,
|
|
27
|
+
extract_keyframes,
|
|
28
|
+
ffmpeg_available,
|
|
29
|
+
parse_subtitles,
|
|
30
|
+
read_video_facts,
|
|
31
|
+
transcribe_audio,
|
|
27
32
|
)
|
|
28
33
|
|
|
29
|
-
__version__ = "11.
|
|
34
|
+
__version__ = "11.6.0"
|
|
30
35
|
|
|
31
36
|
__all__ = [
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"IngestionItem",
|
|
45
|
-
"IngestionPipeline",
|
|
46
|
-
"KGPortabilityService",
|
|
47
|
-
"KnowledgeGraphStore",
|
|
48
|
-
"LatticeBrainQuality",
|
|
49
|
-
"MultiAgentOrchestrator",
|
|
50
|
-
"PostgresConfig",
|
|
51
|
-
"PostgresEngine",
|
|
52
|
-
"SQLiteEngine",
|
|
53
|
-
"SQLiteToPostgresMigrator",
|
|
54
|
-
"StorageCapabilities",
|
|
55
|
-
"StorageEngine",
|
|
56
|
-
"StorageUnavailable",
|
|
57
|
-
"WorkflowEngine",
|
|
58
|
-
"storage_from_env",
|
|
37
|
+
"AudioFacts",
|
|
38
|
+
"ImageFacts",
|
|
39
|
+
"LocalEmbeddingModel",
|
|
40
|
+
"MultimodalPorts",
|
|
41
|
+
"VideoFacts",
|
|
42
|
+
"detect_modality",
|
|
43
|
+
"extract_image_facts",
|
|
44
|
+
"extract_keyframes",
|
|
45
|
+
"ffmpeg_available",
|
|
46
|
+
"parse_subtitles",
|
|
47
|
+
"read_video_facts",
|
|
48
|
+
"transcribe_audio",
|
|
59
49
|
"__version__",
|
|
60
50
|
]
|
|
61
|
-
|
|
62
|
-
_LAZY = {
|
|
63
|
-
"AssembledContext": ("context", "AssembledContext"),
|
|
64
|
-
"ContextAssembler": ("context", "ContextAssembler"),
|
|
65
|
-
"ContextSection": ("context", "ContextSection"),
|
|
66
|
-
"ConversationStore": ("conversations", "ConversationStore"),
|
|
67
|
-
"BrainMemory": ("memory", "BrainMemory"),
|
|
68
|
-
"KnowledgeGraphStore": ("graph.store", "KnowledgeGraphStore"),
|
|
69
|
-
"LatticeBrainQuality": ("quality", "LatticeBrainQuality"),
|
|
70
|
-
"IngestionItem": ("ingestion", "IngestionItem"),
|
|
71
|
-
"IngestionPipeline": ("ingestion", "IngestionPipeline"),
|
|
72
|
-
"KGPortabilityService": ("portability", "KGPortabilityService"),
|
|
73
|
-
"WorkflowEngine": ("workflow", "WorkflowEngine"),
|
|
74
|
-
"AgentRuntime": ("runtime.agent_runtime", "AgentRuntime"),
|
|
75
|
-
"MultiAgentOrchestrator": ("runtime.multi_agent", "MultiAgentOrchestrator"),
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
def __getattr__(name: str):
|
|
80
|
-
target = _LAZY.get(name)
|
|
81
|
-
if target is None:
|
|
82
|
-
raise AttributeError(name)
|
|
83
|
-
module_path, attr = target
|
|
84
|
-
import importlib
|
|
85
|
-
|
|
86
|
-
module = importlib.import_module(f".{module_path}", __name__)
|
|
87
|
-
return getattr(module, attr)
|
|
@@ -1,28 +1,13 @@
|
|
|
1
|
-
"""
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
"""Graph compute: chunking, extraction, parsing, and the embedder fingerprint.
|
|
2
|
+
|
|
3
|
+
The store, the schema, the write mixins, the ANN index and the retrieval stack
|
|
4
|
+
all moved to ``lattice-core`` / ``lattice-retrieval`` in v11.6.0 §Wave 2.5. This
|
|
5
|
+
package keeps only what turns bytes into structures a writer can use, which is
|
|
6
|
+
why it now exports nothing itself — import the submodule you mean
|
|
7
|
+
(``._kg_common``, ``.documents``, ``.retrieval_vector.fingerprint``,
|
|
8
|
+
``.runtime``).
|
|
7
9
|
"""
|
|
8
10
|
|
|
9
11
|
from __future__ import annotations
|
|
10
12
|
|
|
11
|
-
__all__ = [
|
|
12
|
-
"KnowledgeGraphStore",
|
|
13
|
-
"KGStoreV2",
|
|
14
|
-
"NodeType",
|
|
15
|
-
"EdgeType",
|
|
16
|
-
]
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
def __getattr__(name: str):
|
|
20
|
-
if name == "KnowledgeGraphStore":
|
|
21
|
-
from .store import KnowledgeGraphStore
|
|
22
|
-
|
|
23
|
-
return KnowledgeGraphStore
|
|
24
|
-
if name in {"KGStoreV2", "NodeType", "EdgeType"}:
|
|
25
|
-
from . import schema
|
|
26
|
-
|
|
27
|
-
return getattr(schema, name)
|
|
28
|
-
raise AttributeError(name)
|
|
13
|
+
__all__: list[str] = []
|
|
@@ -1,9 +1,15 @@
|
|
|
1
|
-
"""
|
|
2
|
-
|
|
1
|
+
"""The graph's *compute* vocabulary, in one importable place.
|
|
2
|
+
|
|
3
|
+
This package was the shared surface of the SQLite knowledge graph: constants,
|
|
4
|
+
path/hash helpers, chunking, concept and triple extraction, and the schema
|
|
5
|
+
handles the write mixins composed into ``KnowledgeGraphStore``. v11.6.0 moved
|
|
6
|
+
every write into ``lattice-core``, and the store went with them.
|
|
3
7
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
8
|
+
What is left is the half that produces *structures*: chunk a document, pull the
|
|
9
|
+
concepts and triples out of a passage, classify a node type, infer an edge verb,
|
|
10
|
+
hash a file. ``POST /worker/parse``, ``POST /worker/embed`` and
|
|
11
|
+
``POST /worker/extract`` are the routes that answer with them; Rust decides what
|
|
12
|
+
to write.
|
|
7
13
|
"""
|
|
8
14
|
|
|
9
15
|
# ruff: noqa: F401,F841
|
|
@@ -26,21 +32,7 @@ from datetime import datetime
|
|
|
26
32
|
from pathlib import Path
|
|
27
33
|
from typing import Any, Dict, Iterable, Iterator, List, Optional, Tuple
|
|
28
34
|
|
|
29
|
-
try:
|
|
30
|
-
from ..schema import EdgeType, KGStoreV2, NodeType, _exec_script
|
|
31
|
-
except Exception: # pragma: no cover - v2 schema is optional at import time
|
|
32
|
-
KGStoreV2 = None # type: ignore[assignment,misc]
|
|
33
|
-
NodeType = None # type: ignore[assignment,misc]
|
|
34
|
-
EdgeType = None # type: ignore[assignment,misc]
|
|
35
|
-
_exec_script = None # type: ignore[assignment]
|
|
36
|
-
|
|
37
35
|
from ...embeddings import LocalEmbeddingModel
|
|
38
|
-
from ..json_utils import _json, _safe_loads
|
|
39
|
-
from ..runtime import get_llm_router, set_llm_router
|
|
40
|
-
|
|
41
|
-
# Default read source for the graph queries: v2 reconstruction views.
|
|
42
|
-
# Override with LATTICEAI_KG_READ_V2=0 to fall back to the legacy tables.
|
|
43
|
-
_READ_FROM_V2_DEFAULT = os.getenv("LATTICEAI_KG_READ_V2", "1") != "0"
|
|
44
36
|
|
|
45
37
|
# Static constants (projection/format versions, local-ingestion classification
|
|
46
38
|
# tables, OS exclusion lists) live in ._kg_constants; re-exported here so every
|
|
@@ -96,6 +88,8 @@ from .._kg_fsutil import ( # noqa: E402,F401
|
|
|
96
88
|
_size_limit_for_category,
|
|
97
89
|
_slug,
|
|
98
90
|
)
|
|
91
|
+
from ..json_utils import _json, _safe_loads
|
|
92
|
+
from ..runtime import get_llm_router, set_llm_router
|
|
99
93
|
|
|
100
94
|
# The logic this module used to hold inline lives in three cohesive submodules
|
|
101
95
|
# (v11.3.0 decomposition). Every name is re-exported below, so the twelve
|
|
@@ -172,11 +166,9 @@ __all__ = [
|
|
|
172
166
|
"Dict",
|
|
173
167
|
"EDGE_VERB",
|
|
174
168
|
"ENABLE_LLM_EXTRACTION",
|
|
175
|
-
"EdgeType",
|
|
176
169
|
"GRAPH_SCHEMA_VERSION",
|
|
177
170
|
"Iterable",
|
|
178
171
|
"Iterator",
|
|
179
|
-
"KGStoreV2",
|
|
180
172
|
"LINUX_EXCLUDED_PREFIXES",
|
|
181
173
|
"LOCAL_CODE_EXTENSIONS",
|
|
182
174
|
"LOCAL_DOCUMENT_EXTENSIONS",
|
|
@@ -189,7 +181,6 @@ __all__ = [
|
|
|
189
181
|
"List",
|
|
190
182
|
"LocalEmbeddingModel",
|
|
191
183
|
"MACOS_EXCLUDED_PREFIXES",
|
|
192
|
-
"NodeType",
|
|
193
184
|
"Optional",
|
|
194
185
|
"Path",
|
|
195
186
|
"SENSITIVE_PATH_KEYWORDS",
|
|
@@ -214,7 +205,6 @@ __all__ = [
|
|
|
214
205
|
"_PROSE_MIN_SPAN_RATIO",
|
|
215
206
|
"_PROSE_STRONG_BOUNDARY_RE",
|
|
216
207
|
"_PROSE_WEAK_BOUNDARY_RE",
|
|
217
|
-
"_READ_FROM_V2_DEFAULT",
|
|
218
208
|
"_V2_WRITE_MASTER_KEY",
|
|
219
209
|
"_chunks",
|
|
220
210
|
"_classify_node_type",
|
|
@@ -224,7 +214,6 @@ __all__ = [
|
|
|
224
214
|
"_current_os_type",
|
|
225
215
|
"_drive_id_for_path",
|
|
226
216
|
"_excluded_directory_reason",
|
|
227
|
-
"_exec_script",
|
|
228
217
|
"_extract_concepts",
|
|
229
218
|
"_extract_concepts_rules",
|
|
230
219
|
"_extract_triples",
|
|
@@ -1,63 +1,34 @@
|
|
|
1
|
-
"""
|
|
1
|
+
"""Ingestion: what a source *is*, how it hashes, and how good it looks.
|
|
2
2
|
|
|
3
|
-
v3.6.0 Knowledge Graph First principle
|
|
4
|
-
Graph and no source creates an isolated silo
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
v3.6.0's Knowledge Graph First principle — *no data source bypasses the
|
|
4
|
+
Knowledge Graph and no source creates an isolated silo* — is still the rule.
|
|
5
|
+
The door it goes through is no longer here: v11.6.0 §Wave 2.5 made Rust the
|
|
6
|
+
single writer of the Brain, so ``IngestionPipeline.ingest``, the per-source
|
|
7
|
+
routing doors, the folder walk, the ``.latticeignore`` reader and the durable
|
|
8
|
+
background queue moved to ``lattice-core`` / ``lattice-ingest`` /
|
|
9
|
+
``lattice-jobs``.
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
What stays is the vocabulary both sides share, and the compute the write path
|
|
12
|
+
asks this worker for:
|
|
10
13
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
``
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
Web ingestion seam
|
|
20
|
-
------------------
|
|
21
|
-
The graph layer never fetches or parses the web. Fetching, rendering,
|
|
22
|
-
readability extraction, and parse quality are the responsibility of the
|
|
23
|
-
*upstream* capture surfaces (browser extension, tools layer, MCP servers):
|
|
24
|
-
they hand this module already-extracted text. :meth:`IngestionPipeline.
|
|
25
|
-
ingest_web_page` is the convenience wrapper for that hand-off — it normalizes
|
|
26
|
-
``(url, extracted_text)`` into an ``IngestionItem(source_type="web_url")`` and
|
|
27
|
-
routes it through the exact same :meth:`IngestionPipeline.ingest` door as every
|
|
28
|
-
other source. If the extracted text is bad, fix the extractor upstream; the
|
|
29
|
-
pipeline will not attempt network access or HTML parsing.
|
|
30
|
-
|
|
31
|
-
Folder ingestion (:meth:`IngestionPipeline.ingest_folder`) walks a local
|
|
32
|
-
directory, honors a gitignore-like ``.latticeignore`` file at the root
|
|
33
|
-
(blank lines, ``#`` comments, ``fnmatch`` glob patterns, ``dir/`` suffix for
|
|
34
|
-
directories), always skips common noise (``.git``, ``node_modules``,
|
|
35
|
-
``__pycache__``, virtualenvs, ``dist``, hidden entries by default), applies
|
|
36
|
-
size/extension filters, and either ingests inline or schedules through the
|
|
37
|
-
existing :class:`BackgroundIngestionQueue`.
|
|
38
|
-
|
|
39
|
-
Split into cohesive submodules in v11.3.0 (no behaviour change): ``constants``
|
|
40
|
-
(routing tables + gates), ``quality`` (advisory scoring), ``models`` (item and
|
|
41
|
-
result), ``hashing``, ``folder_scan`` (``.latticeignore``), and the three mixins
|
|
42
|
-
``routing`` / ``folders`` / ``jobs_api`` that ``pipeline`` composes into
|
|
43
|
-
``IngestionPipeline``. This module re-exports every name the single file
|
|
44
|
-
exposed, so ``lattice_brain.ingestion.X`` keeps working.
|
|
14
|
+
* ``constants`` — the routing tables and the multi-modal gates;
|
|
15
|
+
* ``models`` — :class:`IngestionItem` / :class:`IngestionResult`, now the DTOs
|
|
16
|
+
of a parse request rather than of a write;
|
|
17
|
+
* ``hashing`` — ``content_hash_text`` and the file digest, which decide
|
|
18
|
+
idempotency and must produce the same bytes on both sides;
|
|
19
|
+
* ``quality`` — the advisory extraction score behind ``POST /worker/parse``;
|
|
20
|
+
* ``pipeline`` — the multi-modal capability probe.
|
|
45
21
|
"""
|
|
46
22
|
|
|
47
23
|
from __future__ import annotations
|
|
48
24
|
|
|
49
|
-
#
|
|
50
|
-
#
|
|
51
|
-
# below therefore uses the redundant-alias form: it reproduces exactly that
|
|
52
|
-
# surface, and it marks each name as deliberate rather than a leftover import.
|
|
25
|
+
# Re-exports use the redundant-alias form: it says "this is a re-export", not a
|
|
26
|
+
# leftover import.
|
|
53
27
|
#
|
|
54
28
|
# Stubbing note: rebinding one of these *here* changes only this module's name.
|
|
55
29
|
# The submodule that calls it holds its own reference, so a test standing in for
|
|
56
30
|
# a helper patches the submodule that uses it.
|
|
57
31
|
from ..gates import FeatureGate as FeatureGate
|
|
58
|
-
from ..ingestion_jobs import JOB_ERRORS_CAP as JOB_ERRORS_CAP
|
|
59
|
-
from ..ingestion_jobs import BackgroundIngestionJob as BackgroundIngestionJob
|
|
60
|
-
from ..ingestion_jobs import BackgroundIngestionQueue as BackgroundIngestionQueue
|
|
61
32
|
from ..multimodal import AUDIO_EXTENSIONS as AUDIO_EXTENSIONS
|
|
62
33
|
from ..multimodal import DEFAULT_KEYFRAMES as DEFAULT_KEYFRAMES
|
|
63
34
|
from ..multimodal import IMAGE_EXTENSIONS as IMAGE_EXTENSIONS
|
|
@@ -75,12 +46,8 @@ from ..multimodal import ffmpeg_available as ffmpeg_available
|
|
|
75
46
|
from ..multimodal import image_quality_score as image_quality_score
|
|
76
47
|
from ..multimodal import read_video_facts as read_video_facts
|
|
77
48
|
from ..multimodal import transcribe_audio as transcribe_audio
|
|
78
|
-
from ..multimodal import video_frame_dir as video_frame_dir
|
|
79
49
|
from ..multimodal import video_quality_score as video_quality_score
|
|
80
|
-
from ..multimodal import write_image_memory as write_image_memory
|
|
81
|
-
from ..multimodal import write_video_memory as write_video_memory
|
|
82
50
|
from ..quiet import quiet as quiet
|
|
83
|
-
from ..runtime.hooks import dispatch_tool as dispatch_tool
|
|
84
51
|
from ..utils import utc_now_iso as utc_now_iso
|
|
85
52
|
from .constants import _MEMORY_NODE_TYPES as _MEMORY_NODE_TYPES
|
|
86
53
|
from .constants import ALLOW_MULTIMODAL_ENV as ALLOW_MULTIMODAL_ENV
|
|
@@ -107,15 +74,10 @@ from .constants import MULTIMODAL_GATE as MULTIMODAL_GATE
|
|
|
107
74
|
from .constants import TEXT_SOURCE_TYPES as TEXT_SOURCE_TYPES
|
|
108
75
|
from .constants import VIDEO_GATE as VIDEO_GATE
|
|
109
76
|
from .constants import VIDEO_SOURCE_TYPES as VIDEO_SOURCE_TYPES
|
|
110
|
-
from .folder_scan import _load_latticeignore as _load_latticeignore
|
|
111
|
-
from .folder_scan import _matches_ignore as _matches_ignore
|
|
112
|
-
from .folders import IngestionFolderMixin as IngestionFolderMixin
|
|
113
77
|
from .hashing import _file_digest as _file_digest
|
|
114
78
|
from .hashing import content_hash_text as content_hash_text
|
|
115
|
-
from .jobs_api import IngestionJobsMixin as IngestionJobsMixin
|
|
116
79
|
from .models import IngestionItem as IngestionItem
|
|
117
80
|
from .models import IngestionResult as IngestionResult
|
|
118
|
-
from .pipeline import VECTOR_TICK_LIMIT as VECTOR_TICK_LIMIT
|
|
119
81
|
from .pipeline import IngestionPipeline as IngestionPipeline
|
|
120
82
|
from .quality import _BOILERPLATE_LINE_MARKERS as _BOILERPLATE_LINE_MARKERS
|
|
121
83
|
from .quality import _CAPTURE_REASON_LABELS as _CAPTURE_REASON_LABELS
|
|
@@ -127,4 +89,3 @@ from .quality import QUALITY_LOW_WARNING as QUALITY_LOW_WARNING
|
|
|
127
89
|
from .quality import _quality_level as _quality_level
|
|
128
90
|
from .quality import assess_extraction_quality as assess_extraction_quality
|
|
129
91
|
from .quality import capture_quality_verdict as capture_quality_verdict
|
|
130
|
-
from .routing import IngestionRoutingMixin as IngestionRoutingMixin
|