ltcai 11.5.2 → 11.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +93 -148
- package/bin/ltcai.js +234 -24
- package/docs/CHANGELOG.md +119 -0
- package/docs/COMMUNITY_AND_PLUGINS.md +1 -1
- package/docs/DEVELOPMENT.md +8 -6
- package/docs/ENTERPRISE.md +2 -1
- 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/kg-schema.md +1 -1
- 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 -584
- package/latticeai/__init__.py +1 -1
- package/latticeai/api/agent_worker_seam.py +7 -80
- package/latticeai/api/health.py +6 -20
- package/latticeai/api/local_files.py +16 -613
- package/latticeai/api/models.py +12 -87
- package/latticeai/api/search.py +17 -255
- 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/core/agent_permission.py +16 -91
- package/latticeai/core/messages.py +89 -531
- package/latticeai/runtime/access_runtime.py +0 -14
- 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 +99 -389
- package/latticeai/runtime/build_phases/foundation.py +82 -392
- package/latticeai/runtime/build_phases/web.py +91 -408
- 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 +13 -130
- package/latticeai/runtime/security_runtime.py +10 -103
- package/latticeai/services/architecture_readiness.py +82 -43
- package/latticeai/services/model_runtime/__init__.py +2 -11
- 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 -386
- 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 +2 -3
- 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 +5 -5
- package/scripts/check_current_release_docs.mjs +7 -4
- 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 +54 -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 +151 -45
- package/src-tauri/src/main.rs +18 -18
- package/src-tauri/src/topology.rs +58 -88
- package/src-tauri/tauri.conf.json +1 -2
- package/static/app/asset-manifest.json +41 -41
- package/static/app/assets/{Act-DcQizkl1.js → Act-BPcVAbOL.js} +1 -1
- package/static/app/assets/AdminConsole-Bw1ATQL0.js +1 -0
- package/static/app/assets/{Brain-3VCSHFcn.js → Brain-CT92Kos0.js} +2 -2
- package/static/app/assets/{BrainHome-Qm8eaztx.js → BrainHome-CFBkt1K_.js} +1 -1
- package/static/app/assets/{BrainSignals-DS9BtKOW.js → BrainSignals-ReLWF2H8.js} +1 -1
- package/static/app/assets/Capture-BsTokYkk.js +1 -0
- package/static/app/assets/{Chronicle-BGvuAchH.js → Chronicle-B6f0T9id.js} +1 -1
- package/static/app/assets/{CommandPalette-Bqhm0Urn.js → CommandPalette-CuvjTv1u.js} +1 -1
- package/static/app/assets/{Library-BV6NnF0a.js → Library-BGJbG9Hd.js} +1 -1
- package/static/app/assets/{LivingBrain-GzenJchP.js → LivingBrain-DGYK_Jsa.js} +1 -1
- package/static/app/assets/{ProductFlow-DEP6-vML.js → ProductFlow-DXBC6brE.js} +1 -1
- package/static/app/assets/{ReviewCard-CNZ7XjWG.js → ReviewCard-HXRle3qq.js} +2 -2
- package/static/app/assets/System-CMHSO9qM.js +1 -0
- package/static/app/assets/arrow-left-BfmkskWx.js +1 -0
- package/static/app/assets/{bot-B_K1Tdmw.js → bot-Cn8bWRuq.js} +1 -1
- package/static/app/assets/{brain-DWyaV1L1.js → brain-CQJberbE.js} +1 -1
- package/static/app/assets/{button-aTn4s84A.js → button-Ct9f2_oT.js} +1 -1
- package/static/app/assets/circle-check-DruOxB-4.js +1 -0
- package/static/app/assets/{circle-pause-xKgeGXkT.js → circle-pause-CmzC_apg.js} +1 -1
- package/static/app/assets/{circle-play-DkT6tYPX.js → circle-play-D8mW2aQ7.js} +1 -1
- package/static/app/assets/{cpu-85xYObUC.js → cpu-DZcdd0PZ.js} +1 -1
- package/static/app/assets/{download-B5Fm7YXo.js → download-bv1KEPGQ.js} +1 -1
- package/static/app/assets/{folder-open-kk2Xa52u.js → folder-open-d-Pip5gr.js} +1 -1
- package/static/app/assets/{hard-drive-DkA3zBW_.js → hard-drive-D20iavUb.js} +1 -1
- package/static/app/assets/index-D9x-kSNy.css +2 -0
- package/static/app/assets/{index-BMPdTmlY.js → index-Do83hDzJ.js} +3 -3
- package/static/app/assets/{input-B0nRf2jO.js → input-BLXVNmj1.js} +1 -1
- package/static/app/assets/{link-2-Dwb4gnTc.js → link-2-BPJOFlAy.js} +1 -1
- package/static/app/assets/{permissionCopy-CQDUBrOZ.js → permissionCopy-ChdJd493.js} +1 -1
- package/static/app/assets/primitives-Cv5tbZBY.js +1 -0
- package/static/app/assets/search-CT9aho2j.js +1 -0
- package/static/app/assets/{share-2-BsrxFglO.js → share-2-YNX_NtMU.js} +1 -1
- package/static/app/assets/{shield-alert-5BStfp2_.js → shield-alert-DuQ3zrVL.js} +1 -1
- package/static/app/assets/{textarea-Cg8IUA-k.js → textarea-DqwLnli4.js} +1 -1
- package/static/app/assets/{useFocusTrap-CYKvE46M.js → useFocusTrap-ZVI98jaW.js} +1 -1
- package/static/app/assets/{useMutation-CSn9t1op.js → useMutation-CVC4qv_D.js} +1 -1
- package/static/app/assets/{useQuery-CY2OI2uy.js → useQuery-C7BeG4HU.js} +1 -1
- package/static/app/assets/{utils-Ddol2RWD.js → utils-CiFtIdZq.js} +1 -1
- package/static/app/assets/{workspace-BqDwOz_p.js → workspace-DQz9vIId.js} +1 -1
- package/static/app/index.html +4 -4
- package/static/sw.js +1 -1
- 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 -518
- 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 -167
- package/lattice_brain/graph/vector_index/brute_force.py +0 -110
- package/lattice_brain/graph/vector_index/hnsw.py +0 -290
- package/lattice_brain/graph/vector_index/jobs.py +0 -287
- package/lattice_brain/graph/vector_index/quantized.py +0 -148
- 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 -380
- package/lattice_brain/memory.py +0 -75
- 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 -710
- package/lattice_brain/quality.py +0 -543
- 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 -240
- 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 -383
- 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 -892
- package/latticeai/api/chat_contracts.py +0 -73
- package/latticeai/api/chat_documents.py +0 -276
- package/latticeai/api/chat_helpers.py +0 -460
- 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 -474
- 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 -436
- 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 -354
- 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 -154
- 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/invitations.py +0 -132
- package/latticeai/core/legacy_compatibility.py +0 -243
- 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/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 -426
- package/latticeai/core/run_store.py +0 -252
- package/latticeai/core/timezones.py +0 -80
- package/latticeai/core/workspace_computer_memory.py +0 -84
- package/latticeai/core/workspace_graph_trace.py +0 -155
- 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 -978
- 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 -103
- 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 -112
- package/latticeai/core/workspace_runs.py +0 -726
- package/latticeai/core/workspace_skills.py +0 -109
- 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 -157
- 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 -117
- package/latticeai/runtime/network_config_runtime.py +0 -56
- package/latticeai/runtime/permission_mode_wiring.py +0 -112
- 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 -693
- package/latticeai/runtime/service_singletons.py +0 -55
- 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 -259
- 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 -471
- package/latticeai/services/chat_service.py +0 -243
- package/latticeai/services/chronicle.py +0 -555
- 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 -258
- 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 -129
- package/latticeai/services/interop_bridges.py +0 -978
- 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/mode_store.py +0 -132
- package/latticeai/services/model_recommendation.py +0 -224
- package/latticeai/services/model_runtime/cloud.py +0 -87
- package/latticeai/services/network_boundary_service.py +0 -117
- 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 -122
- 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 -147
- package/latticeai/services/triggers.py +0 -378
- package/latticeai/services/upload_service.py +0 -172
- package/latticeai/services/workspace_service.py +0 -165
- package/latticeai/setup/__init__.py +0 -25
- package/latticeai/setup/auto_setup.py +0 -846
- package/latticeai/setup/demo_corpus.py +0 -98
- package/latticeai/setup/wizard/__init__.py +0 -126
- package/latticeai/setup/wizard/catalog.py +0 -175
- package/latticeai/setup/wizard/detect.py +0 -302
- package/latticeai/setup/wizard/install.py +0 -348
- package/latticeai/setup/wizard/paths.py +0 -165
- 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 -994
- package/scripts/generate_rust_parity_fixtures.py +0 -908
- package/scripts/migrate_brain_storage.py +0 -57
- package/scripts/parity_fixture_corpus_context.py +0 -162
- 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/AdminConsole-cf4npybT.js +0 -1
- package/static/app/assets/Capture-DiQ219jW.js +0 -1
- package/static/app/assets/System-CieofHQa.js +0 -1
- package/static/app/assets/arrow-left-kfsrk0mv.js +0 -1
- package/static/app/assets/circle-check-qqLug9nU.js +0 -1
- package/static/app/assets/index-DxmOfNRi.css +0 -2
- package/static/app/assets/primitives-SNp0LRJz.js +0 -1
- package/static/app/assets/search-BcHqkjoy.js +0 -1
package/docs/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,125 @@ The top entry is either the current unreleased main-branch work or the current
|
|
|
4
4
|
release line. Older entries are historical and may describe behavior as it
|
|
5
5
|
existed at that release.
|
|
6
6
|
|
|
7
|
+
## [11.7.0] - 2026-08-15 — Clean Sweep
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- 네이티브 훅 싱크(`HooksStore` → `HookSink`): 사용자 `pre_tool` /
|
|
11
|
+
`post_tool`이 네이티브 도구에서 발화하고 `hooks_runs.json`에 같은
|
|
12
|
+
13키 레코드를 남김(상한 100).
|
|
13
|
+
- `review_item_created` / `review_item_updated` 타임라인 이벤트 —
|
|
14
|
+
모든 변이 리뷰 경로에서 저장 후 1회. `run_now`는 쓰기가 없어 무발화.
|
|
15
|
+
- vault-watch 폴러: enable 시 기동, 마지막 watch disable 시 정지,
|
|
16
|
+
재시작 시 resume. 감시 `.pdf`/`.docx`는 `/worker/parse`.
|
|
17
|
+
- 좌초 워커 경로 정적 게이트(디코이 증명). 부채 레지스터 비움.
|
|
18
|
+
- 전면 시각 재설계: elevation 사다리, gradient/border 토큰, 유리 제거,
|
|
19
|
+
토큰 네이티브 cytoscape. 13 스크린 클레임.
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
- `workspace_os.json` writer 통합 — `WorkspaceOsStore` 하나 +
|
|
23
|
+
디렉터리 키 레지스트리 + retrieval/agent 포트. 스탬프는
|
|
24
|
+
`CARGO_PKG_VERSION`.
|
|
25
|
+
- 네 ingest 문(upload / browser-tab / garden note / chat turn)이
|
|
26
|
+
청크 배치 임베드를 붙임. `(model_id, dim)` 불일치 시 벡터 없음.
|
|
27
|
+
- `/upload/document`가 바이너리 본문을 `/worker/parse`로 보냄.
|
|
28
|
+
- 보안보내기 xlsx가 `/worker/render/xlsx`를 사용.
|
|
29
|
+
- UI 표면이 먹빛 밤 / 한지 낮 elevation 언어. 번들 ~103 KiB gzip.
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
- command-search knowledge 그룹이 `matches`를 읽어 결과를 반환
|
|
33
|
+
(오라클은 `results`를 읽어 항상 비었음).
|
|
34
|
+
- 리뷰 스누즈 offset-aware datetime → 200, 잘못된 `until` → 422.
|
|
35
|
+
- 이중 거절 → 409 (형제 dismiss와 바이트 동일).
|
|
36
|
+
- Self-Model 쓰기 5경로가 은퇴 시임으로 전면 정지 — 네이티브 복구,
|
|
37
|
+
녹화된 본문 9건 바이트 동일. `resolve_contradiction`이 빈 stamps로
|
|
38
|
+
"적용됨"을 주장하던 거짓말 포함.
|
|
39
|
+
- chat `ingest_generated` 스키마 400 (11.5.2에서도 깨져 있었음)과
|
|
40
|
+
vault-watch 미배선.
|
|
41
|
+
- chronicle `@today` 달력 결합, briefing/insights/garden/proactive/
|
|
42
|
+
health/quality 신선도 퓨즈. 시계 시임 + falsifier + 4시간대.
|
|
43
|
+
|
|
44
|
+
### Known issues
|
|
45
|
+
- `open_keys`는 `pending`만 (Python은 snoozed도). 추출 refiner 없음.
|
|
46
|
+
`delete_node`는 `PART_OF`를 남김. owner 없는 리뷰 이벤트는 침묵.
|
|
47
|
+
KG-api ingest는 텍스트 전용. 리뷰 변이 = 스토어 사이클 2회.
|
|
48
|
+
snooze 422 detail은 영문 리터럴. 전문은
|
|
49
|
+
[RELEASE_NOTES_v11.7.0.md](../RELEASE_NOTES_v11.7.0.md).
|
|
50
|
+
|
|
51
|
+
## [11.6.0] - 2026-08-15 — One Door
|
|
52
|
+
|
|
53
|
+
### Added
|
|
54
|
+
- **하나의 제품 서버**: `lattice-host`가 **네이티브 420 오퍼레이션 /
|
|
55
|
+
41 라우트 패밀리**를 원래 경로에 서빙합니다. `mount_table()`이 아홉
|
|
56
|
+
크레이트의 `MOUNTED` 합집합이고, `(method, path)` 중복은 axum 생성자
|
|
57
|
+
패닉이 아니라 라우터 생성 **전** 단언으로 실패합니다.
|
|
58
|
+
- **네이티브 KG write 엔진**(`lattice_core::graph_write`): ingest,
|
|
59
|
+
curation, provenance, taxonomy, 벡터 큐. 32단계 행 단위 패리티 골든과
|
|
60
|
+
`sqlite_master` 67객체 스키마 대조로 못박혔습니다.
|
|
61
|
+
- **Python 순수 연산 시임 9종**(`/worker/*`): embed, parse, render×4,
|
|
62
|
+
asr, multimodal/describe, extract. `LATTICEAI_AGENT_TOOL_SEAM` 게이트
|
|
63
|
+
뒤에 있으며 인증이 디코드보다 먼저 실행됩니다.
|
|
64
|
+
- **HTTP 골든 재생 스위트**: 커밋된 12개 픽스처의 **1,487 케이스**를
|
|
65
|
+
네이티브 라우트에 재생해 상태줄과 본문을 대조합니다.
|
|
66
|
+
- `rust/fixtures/worker_allowlist.json` — 게이트웨이 프록시 allowlist의
|
|
67
|
+
단일 출처(**28 라우트**). Python 쪽 `tests/unit/test_worker_allowlist.py`
|
|
68
|
+
6종이 집합/바이트/결정성/그리디 컨버터/그룹 라벨/"네이티브는 없음"을
|
|
69
|
+
단언합니다.
|
|
70
|
+
- `pdf` extra (`reportlab`) — `POST /worker/render/pdf`가 지연 임포트하던
|
|
71
|
+
선언되지 않은 의존성. 없으면 500이 아니라 "렌더러 사용 불가"입니다.
|
|
72
|
+
|
|
73
|
+
### Changed
|
|
74
|
+
- **Python은 AI 워커입니다.** `create_app`은 사라졌고
|
|
75
|
+
`latticeai.worker_app:create_worker_app`이 이 패키지가 만드는 유일한
|
|
76
|
+
애플리케이션이며 **28 라우트**만 서빙합니다. 부트스트랩 10단계 → 7단계,
|
|
77
|
+
`RuntimeContext` 191 필드 → 47.
|
|
78
|
+
- 그래프 테이블 **17개**의 소유자가 WORKER → RUST_PLATFORM. 단일 writer
|
|
79
|
+
불변식이 주석이 아니라 테스트입니다.
|
|
80
|
+
- 변경 제안 스테이징·승인·적용이 인프로세스가 되었습니다. 루프는 Review
|
|
81
|
+
Center와 **같은 문서 핸들**(`GovernanceState`)로 스테이징하고, 적용은
|
|
82
|
+
네이티브 `write_file`과 같은 샌드박스를 지납니다. unified diff는 CPython
|
|
83
|
+
`difflib`를 이식한 `pydiff`(`autojunk` 포함)가 만듭니다.
|
|
84
|
+
- 워커 감독자가 uvicorn 팩토리로 기동합니다 —
|
|
85
|
+
`python -m uvicorn latticeai.worker_app:create_worker_app --factory`.
|
|
86
|
+
모듈 형태(`-m latticeai.worker_app`)는 `__main__` 가드가 없어 임포트하고
|
|
87
|
+
즉시 종료합니다.
|
|
88
|
+
- 잡 스케줄러가 `GraphWriter`를 받아 네이티브로 드레인합니다. 이전에는
|
|
89
|
+
워커에서 이미 사라진 `POST /api/index/drain`을 매 tick 때리고 백오프만
|
|
90
|
+
쌓았습니다.
|
|
91
|
+
- 공개 릴리스 히스토리와 보안 지원 하한이 **11.0.0**으로 상향
|
|
92
|
+
(README 표 · `RELEASE_NOTES.md` · `SECURITY.md` · 해당 테스트 동시 수정).
|
|
93
|
+
|
|
94
|
+
### Removed
|
|
95
|
+
- **Telegram 브리지** — 워커가 된 플랫폼 코드와 함께 삭제.
|
|
96
|
+
`latticeai.integrations.telegram_bot`은 임포트 불가 목록에 있습니다.
|
|
97
|
+
- **SSO OIDC 로그인/콜백 플로우** — 워커는 `/auth/*`를 마운트하지
|
|
98
|
+
않습니다. 설정 표면은 유지되고 패스워드 로그인은 네이티브입니다.
|
|
99
|
+
- Python **298 파일 / 73,617줄**. 의존성 `authlib`, `cryptography`,
|
|
100
|
+
`watchdog`, `psycopg[binary]`와 extras `ann`/`hnsw`/`postgres`.
|
|
101
|
+
- `POST /worker/chat/record-turn`, `POST /agent/change-proposal` —
|
|
102
|
+
둘 다 네이티브 경로가 대체했습니다.
|
|
103
|
+
|
|
104
|
+
### Fixed
|
|
105
|
+
- KG write 4건: `kgv2_*` 뷰만 충돌 시 `type`을 갱신하던 문제,
|
|
106
|
+
`sort_keys` 없는 직렬화 2곳, 기본 JSON 구분자로 해시되던 `edge:`/
|
|
107
|
+
`event:` id.
|
|
108
|
+
- 리댁션 2건: `Authorization: Bearer …`가 실제로는 리댁션되지 않던 문제,
|
|
109
|
+
아무것도 거절하지 않던 텔레그램 토큰 lookahead.
|
|
110
|
+
- 변경 제안 종류 화이트리스트가 `"reorganization"`과 비교해 **모든 폴더
|
|
111
|
+
재구성 제안이 승인 불가**였던 문제(실제 상수는 `"folder_reorganization"`).
|
|
112
|
+
- `serde_json/preserve_order` 피처 통합으로 제품 빌드에서 `Map`이 삽입
|
|
113
|
+
순서로 순회해 `sort_keys=True`를 자처하던 덤프가 정렬되지 않은
|
|
114
|
+
`metadata_json`을 쓰던 문제(읽으면 같고 해시는 다름).
|
|
115
|
+
- FastAPI ≥ 0.140에서 `include_router`가 더 이상 평탄화하지 않아 워커
|
|
116
|
+
라우트 필터가 라우트를 0개로 보던 문제 — 휠에서 부팅 자체가 실패하고
|
|
117
|
+
있었습니다.
|
|
118
|
+
|
|
119
|
+
### Known issues
|
|
120
|
+
- 그대로 이식한 오라클 버그 3건(`/api/command/search` knowledge 그룹 항상
|
|
121
|
+
비어 있음 · 리뷰 스누즈 offset-aware 500 · 제안 이중 거절 500),
|
|
122
|
+
업로드 추출 UTF-8 전용, 공급 벡터 1차 노드 한정, 네이티브 도구의 사용자
|
|
123
|
+
훅 미발화, `sanitize_write_content` 미적용, 워커 원점으로 남은 seam 호출
|
|
124
|
+
3건. 전문은 [RELEASE_NOTES_v11.6.0.md](../RELEASE_NOTES_v11.6.0.md).
|
|
125
|
+
|
|
7
126
|
## [11.5.2] - 2026-08-12 — Tight Ship
|
|
8
127
|
|
|
9
128
|
### Added
|
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.7.0 — Clean Sweep**.
|
|
7
7
|
|
|
8
8
|
This document is for contributors working on the local-first Digital Brain
|
|
9
|
-
codebase. Product positioning and quick start stay in `README.md`;
|
|
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).
|
|
@@ -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.7.0 — Clean Sweep**.
|
|
4
4
|
|
|
5
5
|
The first-run goal is a five-minute path from "I opened the app" to "my Brain
|
|
6
6
|
has a source, a question, and proof." This page is the product contract behind
|
package/docs/OPERATIONS.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Lattice AI — Operations Guide (v11.
|
|
1
|
+
# Lattice AI — Operations Guide (v11.7.0)
|
|
2
2
|
|
|
3
3
|
> **Status: canonical** — kept in sync with the current release. Storage layout
|
|
4
4
|
> below reflects the SQLite live Brain store and workspace scoping, not the
|
|
@@ -136,8 +136,11 @@ pip install --upgrade ltcai
|
|
|
136
136
|
- [ ] `CSRF_TRUSTED_ORIGINS` 화이트리스트 설정
|
|
137
137
|
- [ ] `ALLOWED_COMMANDS` 검토 — python3/node 등 불필요한 실행 도구 제거
|
|
138
138
|
- [ ] 방화벽으로 4825 포트를 프록시만 접근 허용
|
|
139
|
-
|
|
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/kg-schema.md
CHANGED
|
@@ -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.7.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] = []
|