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
|
@@ -51,574 +51,132 @@ LANGUAGE_HEADER = "x-lattice-language"
|
|
|
51
51
|
|
|
52
52
|
|
|
53
53
|
MESSAGES: Dict[str, Dict[str, str]] = {
|
|
54
|
-
# ──
|
|
55
|
-
"
|
|
56
|
-
"ko":
|
|
57
|
-
"en":
|
|
54
|
+
# ── agent_seam ────────────────────────────────────────────────────────
|
|
55
|
+
"agent_seam.disabled": {
|
|
56
|
+
"ko": '워커 시임이 꺼져 있습니다. 호스트가 직접 띄운 워커에서만 열립니다.',
|
|
57
|
+
"en": 'The worker seam is off. It opens only in a worker the host started itself.',
|
|
58
58
|
},
|
|
59
|
-
"
|
|
60
|
-
"ko":
|
|
61
|
-
"en":
|
|
59
|
+
"agent_seam.max_tokens_out_of_range": {
|
|
60
|
+
"ko": '한 번에 만들 길이는 {min}에서 {max} 사이여야 합니다.',
|
|
61
|
+
"en": 'Ask for between {min} and {max} tokens in one completion.',
|
|
62
62
|
},
|
|
63
|
-
"
|
|
64
|
-
"ko":
|
|
65
|
-
"en":
|
|
63
|
+
"agent_seam.message_required": {
|
|
64
|
+
"ko": '모델에 보낼 내용을 적어주세요.',
|
|
65
|
+
"en": 'Write the message to send to the model.',
|
|
66
66
|
},
|
|
67
|
-
"
|
|
68
|
-
"ko":
|
|
69
|
-
"en":
|
|
67
|
+
"agent_seam.temperature_out_of_range": {
|
|
68
|
+
"ko": '온도는 {min}에서 {max} 사이여야 합니다.',
|
|
69
|
+
"en": 'Temperature has to be between {min} and {max}.',
|
|
70
70
|
},
|
|
71
|
-
"
|
|
72
|
-
"ko": "
|
|
73
|
-
"en": "
|
|
71
|
+
"agent_seam.tool_blocked": {
|
|
72
|
+
"ko": "'{tool}' 도구는 어떤 모드에서도 차단됩니다 ({reason}).",
|
|
73
|
+
"en": "'{tool}' is blocked in every mode ({reason}).",
|
|
74
74
|
},
|
|
75
|
-
"
|
|
76
|
-
"ko": "
|
|
77
|
-
"en": "
|
|
75
|
+
"agent_seam.tool_fail_closed": {
|
|
76
|
+
"ko": "'{tool}' 도구는 기존 내용을 바꾸지만 검토할 수 있는 제안으로 만들 수 없어 차단했습니다 ({reason}).",
|
|
77
|
+
"en": "'{tool}' would change existing content but cannot be staged as a reviewable proposal, so it is blocked ({reason}).",
|
|
78
78
|
},
|
|
79
|
-
"
|
|
80
|
-
"ko":
|
|
81
|
-
"en":
|
|
79
|
+
"agent_seam.tool_required": {
|
|
80
|
+
"ko": '실행할 도구 이름이 필요합니다.',
|
|
81
|
+
"en": 'A tool name to run is required.',
|
|
82
82
|
},
|
|
83
|
+
# ── auth ────────────────────────────────────────────────────────
|
|
83
84
|
"auth.user_not_found": {
|
|
84
|
-
"ko":
|
|
85
|
-
"en":
|
|
86
|
-
},
|
|
87
|
-
"auth.current_password_wrong": {
|
|
88
|
-
"ko": "현재 비밀번호가 틀렸습니다.",
|
|
89
|
-
"en": "Your current password is not correct.",
|
|
90
|
-
},
|
|
91
|
-
"auth.name_required": {
|
|
92
|
-
"ko": "이름을 입력해주세요.",
|
|
93
|
-
"en": "Please enter a name.",
|
|
94
|
-
},
|
|
95
|
-
"auth.nickname_required": {
|
|
96
|
-
"ko": "닉네임을 입력해주세요.",
|
|
97
|
-
"en": "Please enter a nickname.",
|
|
98
|
-
},
|
|
99
|
-
# ── SSO ─────────────────────────────────────────────────────────────
|
|
100
|
-
"sso.not_configured": {
|
|
101
|
-
"ko": "SSO가 설정되지 않았습니다.",
|
|
102
|
-
"en": "Single sign-on is not set up.",
|
|
103
|
-
},
|
|
104
|
-
"sso.invalid_state": {
|
|
105
|
-
"ko": "유효하지 않은 SSO 상태입니다.",
|
|
106
|
-
"en": "That sign-on request is no longer valid. Please start again.",
|
|
107
|
-
},
|
|
108
|
-
"sso.config_error": {
|
|
109
|
-
"ko": "SSO 설정 오류입니다.",
|
|
110
|
-
"en": "Single sign-on is misconfigured.",
|
|
111
|
-
},
|
|
112
|
-
"sso.no_id_token": {
|
|
113
|
-
"ko": "ID 토큰을 받지 못했습니다.",
|
|
114
|
-
"en": "The identity provider did not return an ID token.",
|
|
115
|
-
},
|
|
116
|
-
"sso.token_verification_failed": {
|
|
117
|
-
"ko": "SSO 토큰 검증에 실패했습니다.",
|
|
118
|
-
"en": "The sign-on token could not be verified.",
|
|
119
|
-
},
|
|
120
|
-
"sso.provider_verification_failed": {
|
|
121
|
-
"ko": "SSO 공급자 검증에 실패했습니다.",
|
|
122
|
-
"en": "The sign-on provider could not be verified.",
|
|
85
|
+
"ko": '사용자를 찾을 수 없습니다.',
|
|
86
|
+
"en": 'No such user.',
|
|
123
87
|
},
|
|
124
|
-
|
|
125
|
-
"ko": "이메일을 확인할 수 없습니다.",
|
|
126
|
-
"en": "The identity provider did not share an email address.",
|
|
127
|
-
},
|
|
128
|
-
"sso.invitation_required": {
|
|
129
|
-
"ko": "신규 SSO 계정에는 유효한 서명 초대 권한이 필요합니다.",
|
|
130
|
-
"en": "New single sign-on accounts need a valid signed invitation.",
|
|
131
|
-
},
|
|
132
|
-
# ── admin ───────────────────────────────────────────────────────────
|
|
133
|
-
"admin.invalid_role": {
|
|
134
|
-
"ko": "role은 admin 또는 user만 가능합니다.",
|
|
135
|
-
"en": "Role must be either 'admin' or 'user'.",
|
|
136
|
-
},
|
|
137
|
-
"admin.cannot_disable_self": {
|
|
138
|
-
"ko": "자기 자신은 비활성화할 수 없습니다.",
|
|
139
|
-
"en": "You cannot disable your own account.",
|
|
140
|
-
},
|
|
141
|
-
"admin.cannot_delete_self": {
|
|
142
|
-
"ko": "자기 자신은 삭제할 수 없습니다.",
|
|
143
|
-
"en": "You cannot delete your own account.",
|
|
144
|
-
},
|
|
145
|
-
# ── capture / ingestion ─────────────────────────────────────────────
|
|
146
|
-
"capture.ingestion_disabled": {
|
|
147
|
-
"ko": "지식 그래프 수집이 꺼져 있습니다.",
|
|
148
|
-
"en": "Knowledge Graph ingestion is turned off.",
|
|
149
|
-
},
|
|
150
|
-
"capture.payload_too_large": {
|
|
151
|
-
"ko": "보낸 내용이 너무 큽니다.",
|
|
152
|
-
"en": "That capture is too large to accept.",
|
|
153
|
-
},
|
|
154
|
-
"capture.nothing_to_capture": {
|
|
155
|
-
"ko": "저장할 내용이 없습니다. 텍스트나 페이지 내용을 함께 보내주세요.",
|
|
156
|
-
"en": "Nothing to capture — send text, html, or a selection.",
|
|
157
|
-
},
|
|
158
|
-
# ── shared ──────────────────────────────────────────────────────────
|
|
159
|
-
"common.user_mismatch": {
|
|
160
|
-
"ko": "로그인한 사용자와 요청한 사용자가 다릅니다.",
|
|
161
|
-
"en": "user_email must match the authenticated user.",
|
|
162
|
-
},
|
|
163
|
-
"common.workspace_mismatch": {
|
|
164
|
-
"ko": "작업 공간 지정이 서로 다릅니다.",
|
|
165
|
-
"en": "Workspace selectors must match.",
|
|
166
|
-
},
|
|
167
|
-
"common.workspace_unreadable": {
|
|
168
|
-
"ko": "'{workspace}' 작업 공간을 읽을 권한이 없습니다.",
|
|
169
|
-
"en": "Workspace '{workspace}' is not readable.",
|
|
170
|
-
},
|
|
171
|
-
"common.file_not_found": {
|
|
172
|
-
"ko": "파일을 찾을 수 없습니다.",
|
|
173
|
-
"en": "File not found.",
|
|
174
|
-
},
|
|
175
|
-
"common.path_required": {
|
|
176
|
-
"ko": "경로를 입력해주세요.",
|
|
177
|
-
"en": "A path is required.",
|
|
178
|
-
},
|
|
179
|
-
"common.graph_disabled": {
|
|
180
|
-
"ko": "지식 그래프가 꺼져 있습니다.",
|
|
181
|
-
"en": "The Knowledge Graph is turned off.",
|
|
182
|
-
},
|
|
183
|
-
"common.graph_unavailable": {
|
|
184
|
-
"ko": "지식 그래프를 사용할 수 없습니다.",
|
|
185
|
-
"en": "The Knowledge Graph is not available.",
|
|
186
|
-
},
|
|
187
|
-
# ── chat ────────────────────────────────────────────────────────────
|
|
88
|
+
# ── chat ────────────────────────────────────────────────────────
|
|
188
89
|
"chat.model_not_loaded": {
|
|
189
90
|
"ko": "'{model}' 모델이 아직 준비되지 않았습니다.",
|
|
190
91
|
"en": "Model '{model}' is not loaded.",
|
|
191
92
|
},
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
"
|
|
195
|
-
|
|
196
|
-
"chat.conversation_not_found": {
|
|
197
|
-
"ko": "대화를 찾을 수 없습니다.",
|
|
198
|
-
"en": "That conversation no longer exists.",
|
|
199
|
-
},
|
|
200
|
-
"chat.file_name_collision": {
|
|
201
|
-
"ko": "'{name}' 이름의 파일이 너무 많습니다. 다른 이름을 지정해 주세요.",
|
|
202
|
-
"en": "Too many files are already named '{name}'. Please choose another name.",
|
|
203
|
-
},
|
|
204
|
-
"chat.file_generation_failed": {
|
|
205
|
-
"ko": "파일 내용을 만들지 못했습니다.",
|
|
206
|
-
"en": "The file content could not be generated.",
|
|
207
|
-
},
|
|
208
|
-
# ── memory / graph ──────────────────────────────────────────────────
|
|
209
|
-
"memory.unknown_source": {
|
|
210
|
-
"ko": "'{source}'는 알 수 없는 기억 출처입니다.",
|
|
211
|
-
"en": "Unknown memory source: {source}.",
|
|
212
|
-
},
|
|
213
|
-
# ── self-model (personal ontology) ──────────────────────────────────
|
|
214
|
-
"self_model.invalid_kind": {
|
|
215
|
-
"ko": "나 / 선호 / 습관 / 결정 / 관계 중 하나를 골라주세요.",
|
|
216
|
-
"en": "Choose one of: trait, preference, habit, decision, relationship.",
|
|
217
|
-
},
|
|
218
|
-
"self_model.text_required": {
|
|
219
|
-
"ko": "저장할 내용을 적어주세요.",
|
|
220
|
-
"en": "Please write what should be remembered.",
|
|
221
|
-
},
|
|
222
|
-
"self_model.not_found": {
|
|
223
|
-
"ko": "그 항목은 이미 없습니다.",
|
|
224
|
-
"en": "That entry is already gone.",
|
|
225
|
-
},
|
|
226
|
-
"self_model.not_self_model": {
|
|
227
|
-
"ko": "내 프로필 항목이 아니라서 지울 수 없습니다.",
|
|
228
|
-
"en": "That is not a profile entry, so it cannot be removed here.",
|
|
229
|
-
},
|
|
230
|
-
"self_model.not_a_proposal": {
|
|
231
|
-
"ko": "그 검토 항목은 내 프로필 제안이 아닙니다.",
|
|
232
|
-
"en": "That review item is not a profile proposal.",
|
|
233
|
-
},
|
|
234
|
-
"self_model.empty_proposal": {
|
|
235
|
-
"ko": "그 제안에는 저장할 내용이 없습니다.",
|
|
236
|
-
"en": "That proposal carries nothing to save.",
|
|
237
|
-
},
|
|
238
|
-
"self_model.graph_unavailable": {
|
|
239
|
-
"ko": "지식 그래프가 꺼져 있어 내 프로필을 쓸 수 없습니다.",
|
|
240
|
-
"en": "The knowledge graph is off, so the profile cannot be written.",
|
|
241
|
-
},
|
|
242
|
-
"self_model.queue_unavailable": {
|
|
243
|
-
"ko": "검토함이 연결되어 있지 않아 제안을 처리할 수 없습니다.",
|
|
244
|
-
"en": "The review queue is not connected, so proposals cannot be handled.",
|
|
245
|
-
},
|
|
246
|
-
"self_model.invalid": {
|
|
247
|
-
"ko": "내 프로필을 바꾸지 못했습니다.",
|
|
248
|
-
"en": "The profile could not be changed.",
|
|
249
|
-
},
|
|
250
|
-
"graph.node_id_required": {
|
|
251
|
-
"ko": "노드 식별자가 필요합니다.",
|
|
252
|
-
"en": "A node id is required.",
|
|
253
|
-
},
|
|
254
|
-
"graph.node_not_found": {
|
|
255
|
-
"ko": "노드를 찾을 수 없습니다.",
|
|
256
|
-
"en": "That node was not found.",
|
|
257
|
-
},
|
|
258
|
-
"graph.unsupported_type": {
|
|
259
|
-
"ko": "지원하는 종류: message, ai_response, note",
|
|
260
|
-
"en": "Supported types are: message, ai_response, note.",
|
|
261
|
-
},
|
|
262
|
-
# ── ingestion / folders ─────────────────────────────────────────────
|
|
263
|
-
"ingestion.job_not_found": {
|
|
264
|
-
"ko": "수집 작업을 찾을 수 없습니다.",
|
|
265
|
-
"en": "That ingestion job was not found.",
|
|
266
|
-
},
|
|
267
|
-
"ingestion.watch_unavailable": {
|
|
268
|
-
"ko": "폴더 감시 기능을 사용할 수 없습니다.",
|
|
269
|
-
"en": "The folder watch service is unavailable.",
|
|
270
|
-
},
|
|
271
|
-
"ingestion.watch_enable_failed": {
|
|
272
|
-
"ko": "폴더 감시를 켜지 못했습니다.",
|
|
273
|
-
"en": "Turning folder watch on did not succeed.",
|
|
274
|
-
},
|
|
275
|
-
"ingestion.watch_selector_required": {
|
|
276
|
-
"ko": "감시 항목 또는 경로가 필요합니다.",
|
|
277
|
-
"en": "A watch id or a path is required.",
|
|
278
|
-
},
|
|
279
|
-
"ingestion.watch_not_found": {
|
|
280
|
-
"ko": "감시 중인 폴더를 찾을 수 없습니다.",
|
|
281
|
-
"en": "That watched folder was not found.",
|
|
282
|
-
},
|
|
283
|
-
"portability.verification_failed": {
|
|
284
|
-
"ko": "보관 파일 검증에 실패했습니다.",
|
|
285
|
-
"en": "Archive verification failed.",
|
|
286
|
-
},
|
|
287
|
-
"portability.brain_network_disabled": {
|
|
288
|
-
"ko": "다른 Brain과의 공유 기능이 꺼져 있습니다. 기본값이 꺼짐이며, "
|
|
289
|
-
"LATTICEAI_BRAIN_NETWORK=1 로 직접 켜야 사용할 수 있습니다.",
|
|
290
|
-
"en": "Sharing with another Brain is off. It is off by default; set "
|
|
291
|
-
"LATTICEAI_BRAIN_NETWORK=1 to turn it on.",
|
|
292
|
-
},
|
|
293
|
-
"portability.review_queue_unavailable": {
|
|
294
|
-
"ko": "검토함이 연결되어 있지 않아 받은 지식을 제안으로 쌓을 수 없습니다.",
|
|
295
|
-
"en": "The review queue is not connected, so received knowledge cannot be queued as proposals.",
|
|
296
|
-
},
|
|
297
|
-
"ingestion.vault_path_required": {
|
|
298
|
-
"ko": "Obsidian 보관함 폴더 경로가 필요합니다.",
|
|
299
|
-
"en": "An Obsidian vault folder path is required.",
|
|
300
|
-
},
|
|
301
|
-
# ── review queue ────────────────────────────────────────────────────
|
|
302
|
-
"review.item_not_found": {
|
|
303
|
-
"ko": "검토 항목을 찾을 수 없습니다.",
|
|
304
|
-
"en": "That review item was not found.",
|
|
305
|
-
},
|
|
306
|
-
"review.cannot_approve_in_status": {
|
|
307
|
-
"ko": "'{status}' 상태의 검토 항목은 승인할 수 없습니다.",
|
|
308
|
-
"en": "A review item in status '{status}' cannot be approved.",
|
|
309
|
-
},
|
|
310
|
-
"review.bulk_ids_required": {
|
|
311
|
-
"ko": "한꺼번에 처리할 검토 항목을 하나 이상 골라 주세요.",
|
|
312
|
-
"en": "Choose at least one review item to act on.",
|
|
313
|
-
},
|
|
314
|
-
"review.bulk_too_many": {
|
|
315
|
-
"ko": "한 번에 최대 {cap}개까지 처리할 수 있습니다.",
|
|
316
|
-
"en": "At most {cap} items can be handled in one request.",
|
|
317
|
-
},
|
|
318
|
-
# ── interop bridges (Notion export / git / mail / calendar) ──────────
|
|
319
|
-
"ingestion.interop_path_required": {
|
|
320
|
-
"ko": "불러올 파일이나 폴더 경로가 필요합니다.",
|
|
321
|
-
"en": "A file or folder path to read is required.",
|
|
322
|
-
},
|
|
323
|
-
"ingestion.interop_unknown_source": {
|
|
324
|
-
"ko": "알 수 없는 연동 종류입니다: {source}",
|
|
325
|
-
"en": "Unknown interop source: {source}",
|
|
326
|
-
},
|
|
327
|
-
"ingestion.vault_watch_unavailable": {
|
|
328
|
-
"ko": "보관함 자동 확인 기능을 사용할 수 없습니다.",
|
|
329
|
-
"en": "Vault watch is unavailable.",
|
|
330
|
-
},
|
|
331
|
-
"ingestion.vault_watch_disabled": {
|
|
332
|
-
"ko": "보관함 자동 확인은 기본으로 꺼져 있습니다. 설정에서 켜야 사용할 수 있습니다.",
|
|
333
|
-
"en": "Vault watch is off by default; turn it on in settings to use it.",
|
|
334
|
-
},
|
|
335
|
-
# ── projects ────────────────────────────────────────────────────────
|
|
336
|
-
"project.not_found": {
|
|
337
|
-
"ko": "프로젝트를 찾을 수 없습니다.",
|
|
338
|
-
"en": "That project was not found.",
|
|
339
|
-
},
|
|
340
|
-
# ── network boundary ────────────────────────────────────────────────
|
|
341
|
-
"boundary.policy_not_configured": {
|
|
342
|
-
"ko": "혼합 검색 정책 서비스가 설정되지 않았습니다.",
|
|
343
|
-
"en": "The hybrid policy service is not configured.",
|
|
344
|
-
},
|
|
345
|
-
# ── feature toggles ─────────────────────────────────────────────────
|
|
346
|
-
# The switchboard renders from the server (see
|
|
347
|
-
# ``latticeai/services/feature_toggles.py``), so every label and one-line
|
|
348
|
-
# explanation a person reads lives here. The rule for the summaries: say
|
|
349
|
-
# what turning it *on* does, in the words someone who never read the
|
|
350
|
-
# environment-variable docs would use.
|
|
351
|
-
"features.note": {
|
|
352
|
-
"ko": "모두 지금 바로 적용됩니다. 다시 시작하지 않아도 됩니다.",
|
|
353
|
-
"en": "Every switch here takes effect right away — no restart needed.",
|
|
354
|
-
},
|
|
355
|
-
"features.unknown": {
|
|
356
|
-
"ko": "그런 기능은 없습니다: {feature}",
|
|
357
|
-
"en": "There is no such feature: {feature}",
|
|
358
|
-
},
|
|
359
|
-
"features.invalid_value": {
|
|
360
|
-
"ko": "이 기능에 쓸 수 없는 값입니다: {value}",
|
|
361
|
-
"en": "That is not a value this feature can take: {value}",
|
|
362
|
-
},
|
|
363
|
-
"features.choice.install_required": {
|
|
364
|
-
"ko": "설치 필요 — {reason}",
|
|
365
|
-
"en": "Install required — {reason}",
|
|
366
|
-
},
|
|
367
|
-
"features.allow_multimodal.label": {
|
|
368
|
-
"ko": "사진·녹음도 기억하기",
|
|
369
|
-
"en": "Remember pictures and recordings",
|
|
370
|
-
},
|
|
371
|
-
"features.allow_multimodal.summary": {
|
|
372
|
-
"ko": "폴더를 읽을 때 글뿐 아니라 사진과 녹음도 함께 저장합니다.",
|
|
373
|
-
"en": "A folder scan stores pictures and recordings too, not just text.",
|
|
374
|
-
},
|
|
375
|
-
"features.video_ingest.label": {
|
|
376
|
-
"ko": "영상도 함께",
|
|
377
|
-
"en": "Include videos",
|
|
378
|
-
},
|
|
379
|
-
"features.video_ingest.summary": {
|
|
380
|
-
"ko": "사진·녹음을 켠 상태에서, 영상은 장면과 자막으로 저장합니다.",
|
|
381
|
-
"en": "With the switch above on, videos are stored as keyframes and subtitles.",
|
|
382
|
-
},
|
|
383
|
-
"features.vault_watch.label": {
|
|
384
|
-
"ko": "노트 보관함 지켜보기",
|
|
385
|
-
"en": "Watch my notes vault",
|
|
386
|
-
},
|
|
387
|
-
"features.vault_watch.summary": {
|
|
388
|
-
"ko": "밖에 있는 노트 보관함이 바뀌면 알아서 다시 읽어옵니다.",
|
|
389
|
-
"en": "When an outside notes vault changes, it is re-read on its own.",
|
|
390
|
-
},
|
|
391
|
-
"features.brain_network.label": {
|
|
392
|
-
"ko": "골라서 나누기",
|
|
393
|
-
"en": "Share selected knowledge",
|
|
394
|
-
},
|
|
395
|
-
"features.brain_network.summary": {
|
|
396
|
-
"ko": "내가 고른 기억 묶음만 다른 기기로 내보내고 받아올 수 있습니다.",
|
|
397
|
-
"en": "Lets you export a hand-picked slice of memory to another device, and receive one.",
|
|
398
|
-
},
|
|
399
|
-
"features.brain_network.caution": {
|
|
400
|
-
"ko": "이 기능만 기억을 이 컴퓨터 밖으로 내보냅니다. 받은 내용은 바로 합쳐지지 않고 검토함으로 갑니다.",
|
|
401
|
-
"en": "This is the one switch that sends memory off this computer. Anything received waits in the review inbox instead of merging.",
|
|
402
|
-
},
|
|
403
|
-
"features.synthesis.label": {
|
|
404
|
-
"ko": "스스로 정리하기",
|
|
405
|
-
"en": "Tidy up on its own",
|
|
406
|
-
},
|
|
407
|
-
"features.synthesis.summary": {
|
|
408
|
-
"ko": "자료가 쌓이면 알아서 훑어보고, 고칠 거리를 검토함에 제안합니다.",
|
|
409
|
-
"en": "As material piles up, the Brain reviews it and proposes tidy-ups in the review inbox.",
|
|
410
|
-
},
|
|
411
|
-
"features.auto_vector_index.label": {
|
|
412
|
-
"ko": "넣자마자 검색 준비",
|
|
413
|
-
"en": "Make new material searchable at once",
|
|
414
|
-
},
|
|
415
|
-
"features.auto_vector_index.summary": {
|
|
416
|
-
"ko": "새 자료를 넣으면 바로 의미 검색까지 준비합니다. 끄면 나중에 한 번에 만듭니다.",
|
|
417
|
-
"en": "New material is prepared for meaning-based search immediately; off means you rebuild later.",
|
|
418
|
-
},
|
|
419
|
-
"features.auto_late_fusion.label": {
|
|
420
|
-
"ko": "글로 사진 찾기",
|
|
421
|
-
"en": "Find pictures by typing",
|
|
422
|
-
},
|
|
423
|
-
"features.auto_late_fusion.summary": {
|
|
424
|
-
"ko": "글로 물어봐도 사진까지 함께 찾습니다. 사진을 읽는 모델이 있어야 켜집니다.",
|
|
425
|
-
"en": "A typed question also searches pictures — needs a vision model that shares the same space.",
|
|
426
|
-
},
|
|
427
|
-
"features.fusion_rrf.label": {
|
|
428
|
-
"ko": "검색 결과 합치는 방식 바꾸기",
|
|
429
|
-
"en": "Blend search results by rank",
|
|
430
|
-
},
|
|
431
|
-
"features.fusion_rrf.summary": {
|
|
432
|
-
"ko": "점수 대신 순위로 합칩니다. 검색 채널마다 점수 크기가 달라도 흔들리지 않습니다.",
|
|
433
|
-
"en": "Combines channels by position instead of score, so mismatched score scales stop skewing results.",
|
|
434
|
-
},
|
|
435
|
-
"features.graph_expansion.label": {
|
|
436
|
-
"ko": "옆에 있는 기억까지 보기",
|
|
437
|
-
"en": "Look at neighbouring memories",
|
|
438
|
-
},
|
|
439
|
-
"features.graph_expansion.summary": {
|
|
440
|
-
"ko": "찾은 기억과 바로 이어진 기억도 후보로 넣습니다. 답은 넓어지고 조금 흐려집니다.",
|
|
441
|
-
"en": "Adds memories one link away from a hit as candidates — wider answers, slightly less focused.",
|
|
442
|
-
},
|
|
443
|
-
"features.vector_backend.label": {
|
|
444
|
-
"ko": "의미 검색 방식",
|
|
445
|
-
"en": "Meaning-search engine",
|
|
446
|
-
},
|
|
447
|
-
"features.vector_backend.summary": {
|
|
448
|
-
"ko": "빠르기와 정확함 사이에서 고릅니다. 기본값은 전부 훑어보는 정확한 방식입니다.",
|
|
449
|
-
"en": "Trade speed against exactness. The default compares everything and is exact.",
|
|
450
|
-
},
|
|
451
|
-
"features.vector_backend.choice.brute": {
|
|
452
|
-
"ko": "전부 비교 (정확)",
|
|
453
|
-
"en": "Compare everything (exact)",
|
|
454
|
-
},
|
|
455
|
-
"features.vector_backend.choice.quantized": {
|
|
456
|
-
"ko": "간추려 비교 (빠름)",
|
|
457
|
-
"en": "Compare compressed (faster)",
|
|
93
|
+
# ── common ────────────────────────────────────────────────────────
|
|
94
|
+
"common.file_not_found": {
|
|
95
|
+
"ko": '파일을 찾을 수 없습니다.',
|
|
96
|
+
"en": 'File not found.',
|
|
458
97
|
},
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
"
|
|
98
|
+
# ── models ────────────────────────────────────────────────────────
|
|
99
|
+
"models.download_consent_required": {
|
|
100
|
+
"ko": '모델 내려받기는 사용자가 직접 동의해야 시작됩니다.',
|
|
101
|
+
"en": 'Model downloads require explicit consent (allow_download=true).',
|
|
462
102
|
},
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
"
|
|
466
|
-
"en": "You cannot use another user's model credentials.",
|
|
103
|
+
"models.download_not_automated": {
|
|
104
|
+
"ko": '{provider} 엔진의 모델 내려받기는 아직 자동화되지 않았습니다.',
|
|
105
|
+
"en": 'Model downloads for the {provider} engine are not automated yet.',
|
|
467
106
|
},
|
|
468
|
-
"models.
|
|
469
|
-
"ko":
|
|
470
|
-
"en":
|
|
107
|
+
"models.download_timeout": {
|
|
108
|
+
"ko": '모델 내려받기 시간이 초과되었습니다.',
|
|
109
|
+
"en": 'The model download timed out.',
|
|
471
110
|
},
|
|
472
111
|
"models.identifier_empty": {
|
|
473
|
-
"ko":
|
|
474
|
-
"en":
|
|
112
|
+
"ko": '모델 식별자가 비어 있습니다.',
|
|
113
|
+
"en": 'The model identifier is empty.',
|
|
475
114
|
},
|
|
476
115
|
"models.name_empty": {
|
|
477
|
-
"ko":
|
|
478
|
-
"en":
|
|
116
|
+
"ko": '모델 이름이 비어 있습니다.',
|
|
117
|
+
"en": 'The model name is empty.',
|
|
479
118
|
},
|
|
480
119
|
"models.ollama_missing": {
|
|
481
|
-
"ko":
|
|
482
|
-
"en":
|
|
120
|
+
"ko": 'Ollama가 설치되어 있지 않습니다.',
|
|
121
|
+
"en": 'Ollama is not installed.',
|
|
483
122
|
},
|
|
484
|
-
"models.
|
|
485
|
-
"ko":
|
|
486
|
-
"en": "
|
|
487
|
-
},
|
|
488
|
-
"models.pull_failed": {
|
|
489
|
-
"ko": "모델 내려받기에 실패했습니다.",
|
|
490
|
-
"en": "The model download failed.",
|
|
491
|
-
},
|
|
492
|
-
"models.download_not_automated": {
|
|
493
|
-
"ko": "{provider} 엔진의 모델 내려받기는 아직 자동화되지 않았습니다.",
|
|
494
|
-
"en": "Model downloads for the {provider} engine are not automated yet.",
|
|
495
|
-
},
|
|
496
|
-
"models.unknown_provider": {
|
|
497
|
-
"ko": "알 수 없는 제공자입니다.",
|
|
498
|
-
"en": "Unknown provider.",
|
|
499
|
-
},
|
|
500
|
-
"models.api_key_empty": {
|
|
501
|
-
"ko": "API 키가 비어 있습니다.",
|
|
502
|
-
"en": "The API key is empty.",
|
|
503
|
-
},
|
|
504
|
-
"models.other_user_api_key": {
|
|
505
|
-
"ko": "다른 사용자의 API 키를 설정할 권한이 없습니다.",
|
|
506
|
-
"en": "You are not allowed to set another user's API key.",
|
|
123
|
+
"models.other_user_credentials": {
|
|
124
|
+
"ko": '다른 사용자의 모델 자격 증명을 사용할 수 없습니다.',
|
|
125
|
+
"en": "You cannot use another user's model credentials.",
|
|
507
126
|
},
|
|
508
|
-
"models.
|
|
509
|
-
"ko":
|
|
510
|
-
"en":
|
|
127
|
+
"models.public_mode_blocks_local": {
|
|
128
|
+
"ko": '공개 모드에서는 로컬 MLX 모델을 불러올 수 없습니다. openai:, openrouter:, groq:, together: 모델을 쓰거나 LATTICEAI_ALLOW_LOCAL_MODELS=true 로 설정하세요.',
|
|
129
|
+
"en": 'Public mode does not load local MLX models. Use an openai:, openrouter:, groq: or together: model, or set LATTICEAI_ALLOW_LOCAL_MODELS=true.',
|
|
511
130
|
},
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
"
|
|
515
|
-
"en": "The PDF could not be rendered: {reason}",
|
|
131
|
+
"models.pull_failed": {
|
|
132
|
+
"ko": '모델 내려받기에 실패했습니다.',
|
|
133
|
+
"en": 'The model download failed.',
|
|
516
134
|
},
|
|
135
|
+
# ── tools ────────────────────────────────────────────────────────
|
|
517
136
|
"tools.path_outside_workspace": {
|
|
518
|
-
"ko":
|
|
519
|
-
"en":
|
|
520
|
-
},
|
|
521
|
-
"tools.directory_not_found": {
|
|
522
|
-
"ko": "디렉터리를 찾을 수 없습니다.",
|
|
523
|
-
"en": "That directory was not found.",
|
|
524
|
-
},
|
|
525
|
-
# ── chronicle ───────────────────────────────────────────────────────
|
|
526
|
-
"chronicle.bad_date": {
|
|
527
|
-
"ko": "날짜를 읽을 수 없습니다. 2026-08-11 처럼 연-월-일로 적어 주세요.",
|
|
528
|
-
"en": "That date could not be read. Write it as year-month-day, like 2026-08-11.",
|
|
529
|
-
},
|
|
530
|
-
"chronicle.bad_timestamp": {
|
|
531
|
-
"ko": "시점을 읽을 수 없습니다. 2026-08-11T09:00:00 처럼 적어 주세요.",
|
|
532
|
-
"en": "That moment could not be read. Write it like 2026-08-11T09:00:00.",
|
|
533
|
-
},
|
|
534
|
-
# ── index jobs ──────────────────────────────────────────────────────
|
|
535
|
-
"index.limit_out_of_range": {
|
|
536
|
-
"ko": "한 번에 처리할 개수는 {min}에서 {max} 사이여야 합니다.",
|
|
537
|
-
"en": "Ask for between {min} and {max} items in one pass.",
|
|
137
|
+
"ko": '경로가 작업 공간 밖입니다.',
|
|
138
|
+
"en": 'That path is outside the workspace.',
|
|
538
139
|
},
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
"
|
|
542
|
-
"en": "The worker seam is off. It opens only in a worker the host started itself.",
|
|
543
|
-
},
|
|
544
|
-
"agent_seam.message_required": {
|
|
545
|
-
"ko": "모델에 보낼 내용을 적어주세요.",
|
|
546
|
-
"en": "Write the message to send to the model.",
|
|
547
|
-
},
|
|
548
|
-
"agent_seam.max_tokens_out_of_range": {
|
|
549
|
-
"ko": "한 번에 만들 길이는 {min}에서 {max} 사이여야 합니다.",
|
|
550
|
-
"en": "Ask for between {min} and {max} tokens in one completion.",
|
|
551
|
-
},
|
|
552
|
-
"agent_seam.temperature_out_of_range": {
|
|
553
|
-
"ko": "온도는 {min}에서 {max} 사이여야 합니다.",
|
|
554
|
-
"en": "Temperature has to be between {min} and {max}.",
|
|
555
|
-
},
|
|
556
|
-
"agent_seam.tool_required": {
|
|
557
|
-
"ko": "실행할 도구 이름이 필요합니다.",
|
|
558
|
-
"en": "A tool name to run is required.",
|
|
559
|
-
},
|
|
560
|
-
"agent_seam.tool_blocked": {
|
|
561
|
-
"ko": "'{tool}' 도구는 어떤 모드에서도 차단됩니다 ({reason}).",
|
|
562
|
-
"en": "'{tool}' is blocked in every mode ({reason}).",
|
|
563
|
-
},
|
|
564
|
-
"agent_seam.tool_fail_closed": {
|
|
565
|
-
"ko": "'{tool}' 도구는 기존 내용을 바꾸지만 검토할 수 있는 제안으로 "
|
|
566
|
-
"만들 수 없어 차단했습니다 ({reason}).",
|
|
567
|
-
"en": "'{tool}' would change existing content but cannot be staged as a "
|
|
568
|
-
"reviewable proposal, so it is blocked ({reason}).",
|
|
140
|
+
"tools.pdf_render_failed": {
|
|
141
|
+
"ko": 'PDF를 그리지 못했습니다: {reason}',
|
|
142
|
+
"en": 'The PDF could not be rendered: {reason}',
|
|
569
143
|
},
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
"
|
|
144
|
+
# ── worker_compute ────────────────────────────────────────────────────────
|
|
145
|
+
"worker_compute.audio_too_large": {
|
|
146
|
+
"ko": '오디오가 {size} bytes 입니다. 한도는 {limit} bytes 입니다.',
|
|
147
|
+
"en": 'The audio is {size} bytes; the limit is {limit} bytes.',
|
|
573
148
|
},
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
"
|
|
577
|
-
"en": "That connector was not found.",
|
|
149
|
+
"worker_compute.audio_unsupported": {
|
|
150
|
+
"ko": "'{suffix}' 은(는) 지원하는 오디오 형식이 아닙니다. {allowed} 만 가능합니다.",
|
|
151
|
+
"en": "'{suffix}' is not a supported audio container. Supported: {allowed}.",
|
|
578
152
|
},
|
|
579
|
-
"
|
|
580
|
-
"ko":
|
|
581
|
-
"en":
|
|
153
|
+
"worker_compute.content_invalid": {
|
|
154
|
+
"ko": '본문을 base64로 읽지 못했습니다: {reason}',
|
|
155
|
+
"en": 'The payload is not valid base64: {reason}',
|
|
582
156
|
},
|
|
583
|
-
"
|
|
584
|
-
"ko":
|
|
585
|
-
"en":
|
|
157
|
+
"worker_compute.embedder_unavailable": {
|
|
158
|
+
"ko": '임베딩 공급자가 연결되어 있지 않습니다.',
|
|
159
|
+
"en": 'No embedding provider is connected to this worker.',
|
|
586
160
|
},
|
|
587
|
-
"
|
|
588
|
-
"ko": "
|
|
589
|
-
"en": "
|
|
161
|
+
"worker_compute.extract_kind_invalid": {
|
|
162
|
+
"ko": "'{kind}' 은(는) 추출 종류가 아닙니다. {allowed} 중 하나여야 합니다.",
|
|
163
|
+
"en": "'{kind}' is not an extraction kind. Use one of {allowed}.",
|
|
590
164
|
},
|
|
591
|
-
"
|
|
592
|
-
"ko": "
|
|
593
|
-
"en": "
|
|
165
|
+
"worker_compute.kind_invalid": {
|
|
166
|
+
"ko": "'{kind}' 은(는) 임베딩 종류가 아닙니다. {allowed} 중 하나여야 합니다.",
|
|
167
|
+
"en": "'{kind}' is not an embedding kind. Use one of {allowed}.",
|
|
594
168
|
},
|
|
595
|
-
"
|
|
596
|
-
"ko":
|
|
597
|
-
"en":
|
|
169
|
+
"worker_compute.parse_failed": {
|
|
170
|
+
"ko": '문서를 읽지 못했습니다: {reason}',
|
|
171
|
+
"en": 'The document could not be parsed: {reason}',
|
|
598
172
|
},
|
|
599
|
-
"
|
|
600
|
-
"ko":
|
|
601
|
-
|
|
602
|
-
"openai:, openrouter:, groq:, together: 모델을 쓰거나 "
|
|
603
|
-
"LATTICEAI_ALLOW_LOCAL_MODELS=true 로 설정하세요."
|
|
604
|
-
),
|
|
605
|
-
"en": (
|
|
606
|
-
"Public mode does not load local MLX models. Use an openai:, "
|
|
607
|
-
"openrouter:, groq: or together: model, or set "
|
|
608
|
-
"LATTICEAI_ALLOW_LOCAL_MODELS=true."
|
|
609
|
-
),
|
|
173
|
+
"worker_compute.render_failed": {
|
|
174
|
+
"ko": "'{kind}' 문서 생성이 실패했습니다: {reason}",
|
|
175
|
+
"en": "Rendering the '{kind}' document failed: {reason}",
|
|
610
176
|
},
|
|
611
|
-
"
|
|
612
|
-
"ko":
|
|
613
|
-
|
|
614
|
-
"LATTICEAI_PUBLIC_MODEL={model} 을 설정하거나, OpenAI 호환 모델로 "
|
|
615
|
-
"/models/load 를 호출하세요."
|
|
616
|
-
),
|
|
617
|
-
"en": (
|
|
618
|
-
"No public model is loaded. Set OPENAI_API_KEY and "
|
|
619
|
-
"LATTICEAI_PUBLIC_MODEL={model}, or call /models/load with an "
|
|
620
|
-
"OpenAI-compatible model."
|
|
621
|
-
),
|
|
177
|
+
"worker_compute.render_unavailable": {
|
|
178
|
+
"ko": "이 워커는 '{kind}' 문서를 만들 수 없습니다: {reason}",
|
|
179
|
+
"en": "This worker cannot render '{kind}' documents: {reason}",
|
|
622
180
|
},
|
|
623
181
|
}
|
|
624
182
|
|