ltcai 10.0.0 → 10.3.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 +43 -32
- package/docs/CHANGELOG.md +204 -0
- package/docs/COMMUNITY_AND_PLUGINS.md +1 -1
- package/docs/DEVELOPMENT.md +1 -1
- package/docs/HYBRID_CLOUD_KG_STREAMING.md +101 -0
- package/docs/MYPY_BACKLOG.md +98 -0
- package/docs/ONBOARDING.md +1 -1
- package/docs/OPERATIONS.md +1 -1
- package/docs/TRUST_MODEL.md +1 -1
- package/docs/WHY_LATTICE.md +1 -1
- package/docs/kg-schema.md +1 -1
- package/lattice_brain/__init__.py +1 -1
- package/lattice_brain/archive.py +5 -4
- package/lattice_brain/conversations.py +14 -3
- package/lattice_brain/embeddings.py +12 -2
- package/lattice_brain/graph/_kg_common.py +5 -5
- package/lattice_brain/graph/_kg_fsutil.py +5 -4
- package/lattice_brain/graph/discovery.py +4 -3
- package/lattice_brain/graph/discovery_index.py +0 -1
- package/lattice_brain/graph/documents.py +3 -2
- package/lattice_brain/graph/fusion.py +4 -0
- package/lattice_brain/graph/ingest.py +12 -2
- package/lattice_brain/graph/projection.py +3 -2
- package/lattice_brain/graph/provenance.py +5 -3
- package/lattice_brain/graph/rerank.py +4 -1
- package/lattice_brain/graph/retrieval.py +0 -1
- package/lattice_brain/graph/retrieval_docgen.py +0 -1
- package/lattice_brain/graph/retrieval_reads.py +0 -1
- package/lattice_brain/graph/retrieval_vector.py +0 -1
- package/lattice_brain/graph/schema.py +4 -3
- package/lattice_brain/graph/store.py +18 -4
- package/lattice_brain/graph/write_master.py +46 -1
- package/lattice_brain/ingestion.py +4 -1
- package/lattice_brain/portability.py +5 -2
- package/lattice_brain/quality.py +12 -5
- package/lattice_brain/quiet.py +43 -0
- package/lattice_brain/runtime/agent_runtime.py +19 -10
- package/lattice_brain/runtime/hooks.py +3 -2
- package/lattice_brain/runtime/multi_agent.py +2 -3
- package/lattice_brain/sensitivity.py +94 -0
- package/lattice_brain/storage/base.py +30 -2
- package/lattice_brain/storage/migration.py +3 -2
- package/lattice_brain/storage/postgres.py +2 -2
- package/lattice_brain/storage/sqlite.py +6 -4
- package/lattice_brain/workflow.py +4 -2
- package/latticeai/__init__.py +1 -1
- package/latticeai/api/admin.py +1 -1
- package/latticeai/api/agents.py +4 -2
- package/latticeai/api/auth.py +5 -1
- package/latticeai/api/automation_intelligence.py +2 -1
- package/latticeai/api/browser.py +3 -2
- package/latticeai/api/chat.py +28 -17
- package/latticeai/api/chat_agent_http.py +22 -8
- package/latticeai/api/chat_contracts.py +4 -0
- package/latticeai/api/chat_documents.py +6 -2
- package/latticeai/api/chat_hybrid.py +82 -0
- package/latticeai/api/computer_use.py +8 -3
- package/latticeai/api/knowledge_graph.py +1 -1
- package/latticeai/api/mcp.py +4 -4
- package/latticeai/api/models.py +5 -2
- package/latticeai/api/network_boundary.py +220 -0
- package/latticeai/api/permissions.py +0 -1
- package/latticeai/api/realtime.py +1 -1
- package/latticeai/api/security_dashboard.py +1 -1
- package/latticeai/api/setup.py +16 -3
- package/latticeai/api/static_routes.py +2 -1
- package/latticeai/api/tools.py +12 -8
- package/latticeai/api/voice_capture.py +3 -1
- package/latticeai/api/workflow_designer.py +1 -1
- package/latticeai/api/workspace.py +1 -2
- package/latticeai/app_factory.py +174 -145
- package/latticeai/cli/entrypoint.py +6 -4
- package/latticeai/core/agent.py +55 -495
- package/latticeai/core/agent_eval.py +2 -2
- package/latticeai/core/agent_helpers.py +493 -0
- package/latticeai/core/agent_prompts.py +0 -1
- package/latticeai/core/agent_registry.py +3 -1
- package/latticeai/core/agent_state.py +41 -0
- package/latticeai/core/audit.py +1 -1
- package/latticeai/core/builtin_hooks.py +2 -1
- package/latticeai/core/config.py +0 -1
- package/latticeai/core/embedding_providers.py +12 -1
- package/latticeai/core/file_generation.py +3 -0
- package/latticeai/core/invitations.py +4 -1
- package/latticeai/core/io_utils.py +3 -1
- package/latticeai/core/legacy_compatibility.py +1 -2
- package/latticeai/core/local_embeddings.py +12 -1
- package/latticeai/core/marketplace.py +1 -2
- package/latticeai/core/mcp_registry.py +0 -1
- package/latticeai/core/model_compat.py +1 -1
- package/latticeai/core/model_resolution.py +1 -1
- package/latticeai/core/network_boundary.py +168 -0
- package/latticeai/core/oidc.py +3 -0
- package/latticeai/core/permission_mode.py +6 -6
- package/latticeai/core/plugins.py +3 -2
- package/latticeai/core/policy.py +0 -1
- package/latticeai/core/quiet.py +84 -0
- package/latticeai/core/realtime.py +3 -2
- package/latticeai/core/run_store.py +4 -2
- package/latticeai/core/security.py +4 -0
- package/latticeai/core/users.py +5 -3
- package/latticeai/core/workspace_graph_trace.py +3 -0
- package/latticeai/core/workspace_os.py +65 -273
- package/latticeai/core/workspace_os_constants.py +126 -0
- package/latticeai/core/workspace_os_state.py +180 -0
- package/latticeai/core/workspace_os_utils.py +3 -1
- package/latticeai/core/workspace_permissions.py +1 -0
- package/latticeai/core/workspace_snapshots.py +3 -1
- package/latticeai/core/workspace_timeline.py +3 -1
- package/latticeai/integrations/telegram_bot.py +25 -16
- package/latticeai/models/router.py +6 -3
- package/latticeai/runtime/access_runtime.py +3 -1
- package/latticeai/runtime/audit_runtime.py +3 -2
- package/latticeai/runtime/chat_wiring.py +4 -1
- package/latticeai/runtime/history_runtime.py +1 -1
- package/latticeai/runtime/history_writer.py +138 -0
- package/latticeai/runtime/lifespan_runtime.py +3 -1
- package/latticeai/runtime/network_boundary_wiring.py +124 -0
- package/latticeai/runtime/persistence_runtime.py +3 -1
- package/latticeai/runtime/router_registration.py +11 -1
- package/latticeai/services/architecture_readiness.py +1 -2
- package/latticeai/services/change_proposals.py +2 -1
- package/latticeai/services/cloud_egress_audit.py +85 -0
- package/latticeai/services/cloud_extraction.py +129 -0
- package/latticeai/services/cloud_streaming.py +266 -0
- package/latticeai/services/cloud_token_guard.py +84 -0
- package/latticeai/services/command_center.py +2 -1
- package/latticeai/services/folder_watch.py +3 -0
- package/latticeai/services/funnel_metrics.py +3 -1
- package/latticeai/services/hybrid_chat.py +265 -0
- package/latticeai/services/hybrid_context.py +228 -0
- package/latticeai/services/hybrid_policy.py +178 -0
- package/latticeai/services/memory_service.py +1 -1
- package/latticeai/services/model_catalog.py +10 -1
- package/latticeai/services/model_engines.py +35 -14
- package/latticeai/services/model_loading.py +3 -2
- package/latticeai/services/model_runtime.py +68 -17
- package/latticeai/services/multimodal_streaming.py +123 -0
- package/latticeai/services/network_boundary_service.py +154 -0
- package/latticeai/services/openai_compatible_adapter.py +100 -0
- package/latticeai/services/p_reinforce.py +4 -0
- package/latticeai/services/platform_runtime.py +9 -4
- package/latticeai/services/process_audit.py +0 -1
- package/latticeai/services/product_readiness.py +1 -1
- package/latticeai/services/run_executor.py +3 -2
- package/latticeai/services/search_service.py +1 -4
- package/latticeai/services/setup_detection.py +2 -1
- package/latticeai/services/tool_dispatch.py +7 -2
- package/latticeai/services/upload_service.py +2 -1
- package/latticeai/setup/auto_setup.py +10 -7
- package/latticeai/setup/wizard.py +15 -11
- package/latticeai/tools/__init__.py +3 -3
- package/latticeai/tools/commands.py +7 -7
- package/latticeai/tools/computer.py +3 -2
- package/latticeai/tools/documents.py +10 -9
- package/latticeai/tools/filesystem.py +7 -4
- package/latticeai/tools/knowledge.py +2 -0
- package/latticeai/tools/local_files.py +1 -1
- package/latticeai/tools/network.py +2 -1
- package/package.json +7 -3
- package/scripts/bench_agent_smoke.py +0 -1
- package/scripts/bench_models.py +0 -1
- package/scripts/brain_quality_eval.py +7 -2
- package/scripts/bump_version.py +2 -1
- package/scripts/check_current_release_docs.mjs +1 -1
- package/scripts/migrate_brain_storage.py +5 -1
- package/scripts/profile_kg.py +2 -7
- package/scripts/verify_hf_model_registry.py +2 -2
- package/src-tauri/Cargo.lock +1 -1
- package/src-tauri/Cargo.toml +1 -1
- package/src-tauri/tauri.conf.json +1 -1
- package/static/app/asset-manifest.json +37 -37
- package/static/app/assets/{Act-BtCREeN1.js → Act-DrKIGZeJ.js} +1 -1
- package/static/app/assets/{AdminConsole-TPeeN18T.js → AdminConsole-CEV1VefA.js} +1 -1
- package/static/app/assets/{Brain-BKs6JAp0.js → Brain-BZSXnwWU.js} +1 -1
- package/static/app/assets/{BrainHome-BPGOvSd6.js → BrainHome-CEBd86k6.js} +1 -1
- package/static/app/assets/{BrainSignals-CtzQZ15J.js → BrainSignals-O4s6R7av.js} +1 -1
- package/static/app/assets/{Capture-1_NaHWqB.js → Capture-AGbOxsg-.js} +1 -1
- package/static/app/assets/{CommandPalette-pqvQOXe4.js → CommandPalette-CeqBjCn2.js} +1 -1
- package/static/app/assets/Library-CXnbNiQW.js +1 -0
- package/static/app/assets/{LivingBrain-DlQ20Q75.js → LivingBrain-D9Iei2ZJ.js} +1 -1
- package/static/app/assets/{ProductFlow-BZvGDRi_.js → ProductFlow-JlXiDfMM.js} +1 -1
- package/static/app/assets/{ReviewCard-BWgI0D2s.js → ReviewCard-QQly2bTV.js} +1 -1
- package/static/app/assets/System-Bp9ZY4ER.js +1 -0
- package/static/app/assets/{activity-Dlfk8YC7.js → activity-CxRPOQ2F.js} +1 -1
- package/static/app/assets/{bot-CDvUB76P.js → bot-1bcsWB2s.js} +1 -1
- package/static/app/assets/{brain-xczrohrt.js → brain-CxaeKCRM.js} +1 -1
- package/static/app/assets/{button-SOdH3Oyf.js → button-ZYFqGan7.js} +1 -1
- package/static/app/assets/{circle-pause-CG1ythH4.js → circle-pause-B5NOIqvk.js} +1 -1
- package/static/app/assets/{circle-play-HXwvjS6W.js → circle-play-BiJVFXf7.js} +1 -1
- package/static/app/assets/{cpu-B0d-rGyk.js → cpu-Vvq0OKTr.js} +1 -1
- package/static/app/assets/{download-BGIkTQL6.js → download-SEcXzkx1.js} +1 -1
- package/static/app/assets/{folder-open-Dst_Z0_K.js → folder-open-Dw1ff_Qa.js} +1 -1
- package/static/app/assets/{hard-drive-D53MsWkV.js → hard-drive-B00fR7_r.js} +1 -1
- package/static/app/assets/index-CEkL4_M-.css +2 -0
- package/static/app/assets/{index-C_IrlQMV.js → index-Dm9VXl1o.js} +3 -3
- package/static/app/assets/{input-C5m0riF6.js → input-DtdWYQEa.js} +1 -1
- package/static/app/assets/{network-C5a-E5iS.js → network-CpjBu0kI.js} +1 -1
- package/static/app/assets/{primitives-vNXYf58F.js → primitives-CwsudBwc.js} +1 -1
- package/static/app/assets/search-CwEJWBEA.js +1 -0
- package/static/app/assets/{shield-alert-Cc-WVXqN.js → shield-alert-CpjBc-gQ.js} +1 -1
- package/static/app/assets/{textarea-BkZ0EqVO.js → textarea-DUPyjHQs.js} +1 -1
- package/static/app/assets/{useFocusTrap-CTtKbAOU.js → useFocusTrap-BWcMtCWH.js} +1 -1
- package/static/app/assets/{useQuery-Dx1fi4Wu.js → useQuery-Dg5fPqTS.js} +1 -1
- package/static/app/assets/{users-BFpQXtEF.js → users-BgcdTQGM.js} +1 -1
- package/static/app/assets/{utils-BA_lmW3J.js → utils-a3YXFtEO.js} +2 -2
- package/static/app/assets/workspace-BMUEiXUm.js +1 -0
- package/static/app/index.html +4 -4
- package/static/sw.js +1 -1
- package/static/app/assets/Library-DhvoPvC7.js +0 -1
- package/static/app/assets/System-CSMdYLMy.js +0 -1
- package/static/app/assets/index-FxDusbr0.css +0 -2
- package/static/app/assets/search-DhbSgW6m.js +0 -1
- package/static/app/assets/workspace-DBPB0jkX.js +0 -1
|
@@ -9,6 +9,7 @@ import subprocess
|
|
|
9
9
|
import tempfile
|
|
10
10
|
from typing import Any, Dict
|
|
11
11
|
|
|
12
|
+
from latticeai.core.quiet import quiet
|
|
12
13
|
from latticeai.tools import ToolError
|
|
13
14
|
|
|
14
15
|
_PLATFORM = platform.system()
|
|
@@ -27,7 +28,7 @@ def _init_computer_use():
|
|
|
27
28
|
_pyautogui = _pag
|
|
28
29
|
_CU_AVAILABLE = True
|
|
29
30
|
except Exception:
|
|
30
|
-
|
|
31
|
+
quiet()
|
|
31
32
|
|
|
32
33
|
_init_computer_use()
|
|
33
34
|
|
|
@@ -66,7 +67,7 @@ def computer_screenshot() -> Dict[str, Any]:
|
|
|
66
67
|
if os.path.exists(tmp):
|
|
67
68
|
os.unlink(tmp)
|
|
68
69
|
except OSError:
|
|
69
|
-
|
|
70
|
+
quiet()
|
|
70
71
|
|
|
71
72
|
|
|
72
73
|
def computer_open_app(app: str = "Google Chrome") -> Dict[str, Any]:
|
|
@@ -5,17 +5,18 @@ from __future__ import annotations
|
|
|
5
5
|
from pathlib import Path
|
|
6
6
|
from typing import Any, Dict, List
|
|
7
7
|
|
|
8
|
+
from latticeai.core.quiet import quiet
|
|
8
9
|
from latticeai.tools import (
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
_CJK_FONT_CANDIDATES,
|
|
11
|
+
_SUPPORTED_READ_EXTENSIONS,
|
|
12
|
+
DOCUMENT_MAX_READ_BYTES,
|
|
12
13
|
DOCUMENT_OUTPUT_DIR,
|
|
14
|
+
PDF_OUTPUT_DIR,
|
|
13
15
|
PRESENTATION_OUTPUT_DIR,
|
|
14
16
|
SPREADSHEET_OUTPUT_DIR,
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
_SUPPORTED_READ_EXTENSIONS,
|
|
17
|
+
ToolError,
|
|
18
|
+
_relative,
|
|
19
|
+
_resolve_path,
|
|
19
20
|
)
|
|
20
21
|
|
|
21
22
|
|
|
@@ -117,9 +118,9 @@ def create_pdf(title: str, body, filename: str = "document.pdf") -> Dict[str, An
|
|
|
117
118
|
from reportlab.lib.pagesizes import A4
|
|
118
119
|
from reportlab.lib.styles import ParagraphStyle
|
|
119
120
|
from reportlab.lib.units import mm
|
|
120
|
-
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer
|
|
121
121
|
from reportlab.pdfbase import pdfmetrics
|
|
122
122
|
from reportlab.pdfbase.ttfonts import TTFont
|
|
123
|
+
from reportlab.platypus import Paragraph, SimpleDocTemplate, Spacer
|
|
123
124
|
except Exception as exc:
|
|
124
125
|
raise ToolError("reportlab is not installed. Run `pip install reportlab`.") from exc
|
|
125
126
|
|
|
@@ -135,7 +136,7 @@ def create_pdf(title: str, body, filename: str = "document.pdf") -> Dict[str, An
|
|
|
135
136
|
pdfmetrics.registerFont(TTFont("KoreanFont", font_path))
|
|
136
137
|
font_name = "KoreanFont"
|
|
137
138
|
except Exception:
|
|
138
|
-
|
|
139
|
+
quiet()
|
|
139
140
|
break
|
|
140
141
|
|
|
141
142
|
title_style = ParagraphStyle("Title", fontName=font_name, fontSize=18, spaceAfter=8, leading=24)
|
|
@@ -15,13 +15,14 @@ from pathlib import Path
|
|
|
15
15
|
from typing import Any, Dict, List, Optional, Tuple
|
|
16
16
|
|
|
17
17
|
import latticeai.tools as tools
|
|
18
|
+
from latticeai.core.quiet import quiet
|
|
18
19
|
from latticeai.tools import (
|
|
19
|
-
ToolError,
|
|
20
|
-
ensure_agent_root,
|
|
21
|
-
_resolve_path,
|
|
22
|
-
_relative,
|
|
23
20
|
MAX_FILE_BYTES,
|
|
24
21
|
TEXT_EXTENSIONS,
|
|
22
|
+
ToolError,
|
|
23
|
+
_relative,
|
|
24
|
+
_resolve_path,
|
|
25
|
+
ensure_agent_root,
|
|
25
26
|
)
|
|
26
27
|
|
|
27
28
|
|
|
@@ -219,6 +220,7 @@ def grep(
|
|
|
219
220
|
try:
|
|
220
221
|
lines = file_path.read_text(encoding="utf-8").splitlines()
|
|
221
222
|
except (UnicodeDecodeError, OSError):
|
|
223
|
+
quiet()
|
|
222
224
|
continue
|
|
223
225
|
|
|
224
226
|
files_scanned += 1
|
|
@@ -340,6 +342,7 @@ def search_files(query: str, path: str = ".", max_results: int = 20) -> Dict[str
|
|
|
340
342
|
try:
|
|
341
343
|
lines = file_path.read_text(encoding="utf-8").splitlines()
|
|
342
344
|
except UnicodeDecodeError:
|
|
345
|
+
quiet()
|
|
343
346
|
continue
|
|
344
347
|
for index, line in enumerate(lines, start=1):
|
|
345
348
|
if query_lower in line.lower():
|
|
@@ -6,6 +6,7 @@ import hashlib
|
|
|
6
6
|
from pathlib import Path
|
|
7
7
|
from typing import Any, Dict, List, Optional
|
|
8
8
|
|
|
9
|
+
from latticeai.core.quiet import quiet
|
|
9
10
|
from latticeai.services.p_reinforce import BRAIN_DIR, STRUCTURE
|
|
10
11
|
from latticeai.tools import MAX_FILE_BYTES, ToolError
|
|
11
12
|
|
|
@@ -97,6 +98,7 @@ def knowledge_search(
|
|
|
97
98
|
try:
|
|
98
99
|
content = file_path.read_text(encoding="utf-8")
|
|
99
100
|
except UnicodeDecodeError:
|
|
101
|
+
quiet()
|
|
100
102
|
continue
|
|
101
103
|
if query_lower in content.lower() or query_lower in file_path.name.lower():
|
|
102
104
|
results.append(
|
|
@@ -6,7 +6,7 @@ from pathlib import Path
|
|
|
6
6
|
from typing import Any, Dict
|
|
7
7
|
|
|
8
8
|
from latticeai.core.tool_registry import LOCAL_WRITE_BLOCKED_PREFIXES
|
|
9
|
-
from latticeai.tools import
|
|
9
|
+
from latticeai.tools import LOCAL_MAX_FILE_BYTES, ToolError
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
def local_list(path: str) -> Dict[str, Any]:
|
|
@@ -7,6 +7,7 @@ import socket
|
|
|
7
7
|
import subprocess
|
|
8
8
|
from typing import Any, Dict, List
|
|
9
9
|
|
|
10
|
+
from latticeai.core.quiet import quiet
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
def _run_network_command(parts: List[str], timeout: int = 5) -> str:
|
|
@@ -44,7 +45,7 @@ def network_status() -> Dict[str, Any]:
|
|
|
44
45
|
sock.connect(("8.8.8.8", 80))
|
|
45
46
|
guessed_ip = sock.getsockname()[0]
|
|
46
47
|
except Exception:
|
|
47
|
-
|
|
48
|
+
quiet()
|
|
48
49
|
if guessed_ip and guessed_ip not in local_ips.values():
|
|
49
50
|
local_ips["default_route"] = guessed_ip
|
|
50
51
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ltcai",
|
|
3
|
-
"version": "10.
|
|
3
|
+
"version": "10.3.0",
|
|
4
4
|
"description": "Lattice AI — local-first Digital Brain that keeps your knowledge durable across any AI model.",
|
|
5
5
|
"homepage": "https://github.com/TaeSooPark-PTS/LatticeAI#readme",
|
|
6
6
|
"repository": {
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"check:python": "node scripts/run_python.mjs scripts/check_python.py",
|
|
27
27
|
"lint": "npm run lint:python && node --check tests/visual/mock_server.cjs && node --check tests/visual/v3.spec.js && npm run lint:frontend && npm run frontend:openapi:check && node scripts/check_i18n_literals.mjs && npm run check:i18n-namespaces && npm run check:bundle && npm run check:legacy-debt && npm run test:browser-extension && npm run test:vscode-extension",
|
|
28
28
|
"check:legacy-debt": "node scripts/check_legacy_debt.mjs",
|
|
29
|
-
"lint:python": "node scripts/run_python.mjs -m ruff check .",
|
|
29
|
+
"lint:python": "node scripts/run_python.mjs -m ruff check . && npm run typecheck:python",
|
|
30
30
|
"lint:frontend": "node scripts/lint_frontend.mjs",
|
|
31
31
|
"check:bundle": "node scripts/check_bundle_budget.mjs",
|
|
32
32
|
"docs:check-links": "node scripts/check_markdown_links.mjs && node scripts/check_doc_status.mjs",
|
|
@@ -59,7 +59,10 @@
|
|
|
59
59
|
"publish:openvsx": "cd vscode-extension && npm run package:vsix && npm run publish:openvsx",
|
|
60
60
|
"publish:all": "npm run release:artifacts && npm run release:validate && npm publish ltcai-$npm_package_version.tgz --access public && node scripts/run_python.mjs -m twine upload --skip-existing dist/ltcai-$npm_package_version.tar.gz dist/ltcai-$npm_package_version-py3-none-any.whl && cd vscode-extension && npm run publish:vscode && npm run publish:openvsx",
|
|
61
61
|
"test:vscode-extension": "cd vscode-extension && npm run build && cd .. && node --test tests/vscode-extension.test.cjs",
|
|
62
|
-
"check:i18n-namespaces": "node scripts/check_i18n_namespace_coverage.mjs"
|
|
62
|
+
"check:i18n-namespaces": "node scripts/check_i18n_namespace_coverage.mjs",
|
|
63
|
+
"typecheck:python": "node scripts/run_python.mjs -m mypy",
|
|
64
|
+
"test:coverage": "node scripts/run_python.mjs -m pytest tests/ -q --cov --cov-report=term:skip-covered",
|
|
65
|
+
"test:frontend:coverage": "vitest run --coverage"
|
|
63
66
|
},
|
|
64
67
|
"keywords": [
|
|
65
68
|
"ltcai",
|
|
@@ -135,6 +138,7 @@
|
|
|
135
138
|
"@types/react": "^19.2.17",
|
|
136
139
|
"@types/react-dom": "^19.2.3",
|
|
137
140
|
"@vitejs/plugin-react": "^6.0.2",
|
|
141
|
+
"@vitest/coverage-v8": "^4.1.10",
|
|
138
142
|
"autoprefixer": "^10.5.0",
|
|
139
143
|
"class-variance-authority": "^0.7.1",
|
|
140
144
|
"clsx": "^2.1.1",
|
|
@@ -73,7 +73,6 @@ from latticeai.core.agent_prompts import ( # noqa: E402
|
|
|
73
73
|
)
|
|
74
74
|
from latticeai.tools import ToolError # noqa: E402
|
|
75
75
|
|
|
76
|
-
|
|
77
76
|
# ── canonical smoke tasks ────────────────────────────────────────────────
|
|
78
77
|
# Small, file-flavored tasks users actually ask for. The tool port is canned,
|
|
79
78
|
# so the measurement is "can this model steer the real loop to completion",
|
package/scripts/bench_models.py
CHANGED
|
@@ -82,7 +82,6 @@ from latticeai.core.file_generation import ( # noqa: E402
|
|
|
82
82
|
validate_file_content,
|
|
83
83
|
)
|
|
84
84
|
|
|
85
|
-
|
|
86
85
|
# ── Scripted corpora ─────────────────────────────────────────────────────
|
|
87
86
|
# Each entry is one model output for a canonical agent turn. The tiers encode
|
|
88
87
|
# how the SAME intent degrades as model quality drops. All "should_parse=True"
|
|
@@ -18,9 +18,14 @@ if str(REPO_ROOT) not in sys.path:
|
|
|
18
18
|
|
|
19
19
|
from lattice_brain.graph.store import KnowledgeGraphStore # noqa: E402
|
|
20
20
|
from lattice_brain.quality import RetrievalBenchmarkRunner # noqa: E402
|
|
21
|
-
from
|
|
21
|
+
from lattice_brain.retrieval_benchmark_fixtures import ( # noqa: E402
|
|
22
|
+
DOCUMENTS,
|
|
23
|
+
FIXTURE_NAME,
|
|
24
|
+
QUERIES,
|
|
25
|
+
TOP_K,
|
|
26
|
+
)
|
|
22
27
|
from latticeai.services.memory_service import MemoryService # noqa: E402
|
|
23
|
-
from
|
|
28
|
+
from latticeai.services.search_service import SearchService # noqa: E402
|
|
24
29
|
|
|
25
30
|
|
|
26
31
|
class _EvalStore:
|
package/scripts/bump_version.py
CHANGED
|
@@ -24,7 +24,8 @@ REPO = Path(__file__).resolve().parents[1]
|
|
|
24
24
|
TARGETS = [
|
|
25
25
|
("latticeai/__init__.py", "regex", r'(__version__ = ")([^"]+)(")'),
|
|
26
26
|
("lattice_brain/__init__.py", "regex", r'(__version__ = ")([^"]+)(")'),
|
|
27
|
-
|
|
27
|
+
# Moved out of workspace_os.py in 10.2.0 when the vocabulary was split off.
|
|
28
|
+
("latticeai/core/workspace_os_constants.py", "regex", r'(WORKSPACE_OS_VERSION = ")([^"]+)(")'),
|
|
28
29
|
("latticeai/core/marketplace.py", "regex", r'(MARKETPLACE_VERSION = ")([^"]+)(")'),
|
|
29
30
|
("lattice_brain/runtime/multi_agent.py", "regex", r'(MULTI_AGENT_VERSION = ")([^"]+)(")'),
|
|
30
31
|
("latticeai/services/architecture_readiness.py", "regex", r'(ARCHITECTURE_VERSION_TARGET = ")([^"]+)(")'),
|
|
@@ -6,7 +6,7 @@ const root = process.cwd();
|
|
|
6
6
|
const pkg = JSON.parse(readFileSync(path.join(root, "package.json"), "utf8"));
|
|
7
7
|
const version = pkg.version;
|
|
8
8
|
const releaseDir = `output/release/v${version}`;
|
|
9
|
-
const releaseTheme = "
|
|
9
|
+
const releaseTheme = "Measured Ground";
|
|
10
10
|
const title = `${version} — ${releaseTheme}`;
|
|
11
11
|
const escapedVersion = version.replaceAll(".", "\\.");
|
|
12
12
|
|
|
@@ -13,7 +13,11 @@ import argparse
|
|
|
13
13
|
import json
|
|
14
14
|
from pathlib import Path
|
|
15
15
|
|
|
16
|
-
from lattice_brain.storage import
|
|
16
|
+
from lattice_brain.storage import (
|
|
17
|
+
DockerPostgresWizard,
|
|
18
|
+
PostgresEngine,
|
|
19
|
+
SQLiteToPostgresMigrator,
|
|
20
|
+
)
|
|
17
21
|
|
|
18
22
|
|
|
19
23
|
def _print_json(value: object) -> None:
|
package/scripts/profile_kg.py
CHANGED
|
@@ -51,7 +51,6 @@ if str(ROOT) not in sys.path:
|
|
|
51
51
|
|
|
52
52
|
from lattice_brain.graph.store import KnowledgeGraphStore # noqa: E402
|
|
53
53
|
|
|
54
|
-
|
|
55
54
|
# ── Synthetic corpus ─────────────────────────────────────────────────────────
|
|
56
55
|
# Recurring entities so concept nodes are shared across documents and edges
|
|
57
56
|
# actually form; a Korean slice exercises the FTS5 trigram path.
|
|
@@ -60,11 +59,7 @@ ENTITIES = [
|
|
|
60
59
|
"Telegram", "MLX", "Embedding", "Pipeline", "Workspace", "Provenance",
|
|
61
60
|
"Scheduler", "Retrieval", "Ingestion", "Router", "Registry", "Backup",
|
|
62
61
|
]
|
|
63
|
-
FILLER =
|
|
64
|
-
"the service processes requests and stores results in the database "
|
|
65
|
-
"while the worker retries failed jobs and reports metrics to the "
|
|
66
|
-
"dashboard for the on-call engineer to review during the incident "
|
|
67
|
-
).split()
|
|
62
|
+
FILLER = ["the", "service", "processes", "requests", "and", "stores", "results", "in", "the", "database", "while", "the", "worker", "retries", "failed", "jobs", "and", "reports", "metrics", "to", "the", "dashboard", "for", "the", "on-call", "engineer", "to", "review", "during", "the", "incident"]
|
|
68
63
|
KOREAN = ["프로젝트", "일정", "회의", "결정", "지식그래프", "검색", "성능", "메모리"]
|
|
69
64
|
|
|
70
65
|
|
|
@@ -134,7 +129,7 @@ def run_profile(
|
|
|
134
129
|
db_path: Optional[Path],
|
|
135
130
|
seed: int = 42,
|
|
136
131
|
) -> Dict[str, Any]:
|
|
137
|
-
rng = random.Random(seed)
|
|
132
|
+
rng = random.Random(seed) # noqa: S311 — synthetic profiling data, not a secret
|
|
138
133
|
tmp_ctx = None
|
|
139
134
|
if db_path is None:
|
|
140
135
|
tmp_ctx = tempfile.TemporaryDirectory(prefix="ltcai-profile-kg-")
|
|
@@ -40,8 +40,8 @@ sys.path.insert(0, str(REPO_ROOT))
|
|
|
40
40
|
|
|
41
41
|
try:
|
|
42
42
|
from latticeai.services.model_capability_registry import (
|
|
43
|
-
get_all_capabilities,
|
|
44
43
|
ModelCapability,
|
|
44
|
+
get_all_capabilities,
|
|
45
45
|
)
|
|
46
46
|
except Exception as e:
|
|
47
47
|
print("ERROR: Could not import model_capability_registry:", e)
|
|
@@ -210,7 +210,7 @@ def main() -> int:
|
|
|
210
210
|
print("-" * 88)
|
|
211
211
|
|
|
212
212
|
results: List[Dict[str, Any]] = []
|
|
213
|
-
tmp = Path("/tmp/lattice_verify_hf")
|
|
213
|
+
tmp = Path("/tmp/lattice_verify_hf") # noqa: S108 — developer verification scratch dir
|
|
214
214
|
tmp.mkdir(exist_ok=True)
|
|
215
215
|
|
|
216
216
|
missing_critical = 0
|
package/src-tauri/Cargo.lock
CHANGED
package/src-tauri/Cargo.toml
CHANGED
|
@@ -1,45 +1,45 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "10.
|
|
2
|
+
"version": "10.3.0",
|
|
3
3
|
"generated_at": "vite",
|
|
4
4
|
"entrypoints": {
|
|
5
|
-
"app": "/static/app/assets/index-
|
|
5
|
+
"app": "/static/app/assets/index-Dm9VXl1o.js"
|
|
6
6
|
},
|
|
7
7
|
"assets": {
|
|
8
8
|
"../node_modules/@tauri-apps/api/core.js": "/static/app/assets/core-CwxXejkd.js",
|
|
9
|
-
"_BrainSignals-
|
|
10
|
-
"_LivingBrain-
|
|
11
|
-
"_ReviewCard-
|
|
12
|
-
"_activity-
|
|
13
|
-
"_bot-
|
|
14
|
-
"_brain-
|
|
15
|
-
"_button-
|
|
16
|
-
"_circle-pause-
|
|
17
|
-
"_circle-play-
|
|
18
|
-
"_cpu-
|
|
19
|
-
"_download-
|
|
20
|
-
"_folder-open-
|
|
21
|
-
"_hard-drive-
|
|
22
|
-
"_input-
|
|
23
|
-
"_network-
|
|
24
|
-
"_primitives-
|
|
25
|
-
"_search-
|
|
26
|
-
"_shield-alert-
|
|
27
|
-
"_textarea-
|
|
28
|
-
"_useFocusTrap-
|
|
29
|
-
"_useQuery-
|
|
30
|
-
"_users-
|
|
31
|
-
"_utils-
|
|
32
|
-
"_workspace-
|
|
33
|
-
"index.html": "/static/app/assets/index-
|
|
34
|
-
"assets/index-
|
|
35
|
-
"src/components/ProductFlow.tsx": "/static/app/assets/ProductFlow-
|
|
36
|
-
"src/features/admin/AdminConsole.tsx": "/static/app/assets/AdminConsole-
|
|
37
|
-
"src/features/brain/BrainHome.tsx": "/static/app/assets/BrainHome-
|
|
38
|
-
"src/features/command/CommandPalette.tsx": "/static/app/assets/CommandPalette-
|
|
39
|
-
"src/pages/Act.tsx": "/static/app/assets/Act-
|
|
40
|
-
"src/pages/Brain.tsx": "/static/app/assets/Brain-
|
|
41
|
-
"src/pages/Capture.tsx": "/static/app/assets/Capture-
|
|
42
|
-
"src/pages/Library.tsx": "/static/app/assets/Library-
|
|
43
|
-
"src/pages/System.tsx": "/static/app/assets/System-
|
|
9
|
+
"_BrainSignals-O4s6R7av.js": "/static/app/assets/BrainSignals-O4s6R7av.js",
|
|
10
|
+
"_LivingBrain-D9Iei2ZJ.js": "/static/app/assets/LivingBrain-D9Iei2ZJ.js",
|
|
11
|
+
"_ReviewCard-QQly2bTV.js": "/static/app/assets/ReviewCard-QQly2bTV.js",
|
|
12
|
+
"_activity-CxRPOQ2F.js": "/static/app/assets/activity-CxRPOQ2F.js",
|
|
13
|
+
"_bot-1bcsWB2s.js": "/static/app/assets/bot-1bcsWB2s.js",
|
|
14
|
+
"_brain-CxaeKCRM.js": "/static/app/assets/brain-CxaeKCRM.js",
|
|
15
|
+
"_button-ZYFqGan7.js": "/static/app/assets/button-ZYFqGan7.js",
|
|
16
|
+
"_circle-pause-B5NOIqvk.js": "/static/app/assets/circle-pause-B5NOIqvk.js",
|
|
17
|
+
"_circle-play-BiJVFXf7.js": "/static/app/assets/circle-play-BiJVFXf7.js",
|
|
18
|
+
"_cpu-Vvq0OKTr.js": "/static/app/assets/cpu-Vvq0OKTr.js",
|
|
19
|
+
"_download-SEcXzkx1.js": "/static/app/assets/download-SEcXzkx1.js",
|
|
20
|
+
"_folder-open-Dw1ff_Qa.js": "/static/app/assets/folder-open-Dw1ff_Qa.js",
|
|
21
|
+
"_hard-drive-B00fR7_r.js": "/static/app/assets/hard-drive-B00fR7_r.js",
|
|
22
|
+
"_input-DtdWYQEa.js": "/static/app/assets/input-DtdWYQEa.js",
|
|
23
|
+
"_network-CpjBu0kI.js": "/static/app/assets/network-CpjBu0kI.js",
|
|
24
|
+
"_primitives-CwsudBwc.js": "/static/app/assets/primitives-CwsudBwc.js",
|
|
25
|
+
"_search-CwEJWBEA.js": "/static/app/assets/search-CwEJWBEA.js",
|
|
26
|
+
"_shield-alert-CpjBc-gQ.js": "/static/app/assets/shield-alert-CpjBc-gQ.js",
|
|
27
|
+
"_textarea-DUPyjHQs.js": "/static/app/assets/textarea-DUPyjHQs.js",
|
|
28
|
+
"_useFocusTrap-BWcMtCWH.js": "/static/app/assets/useFocusTrap-BWcMtCWH.js",
|
|
29
|
+
"_useQuery-Dg5fPqTS.js": "/static/app/assets/useQuery-Dg5fPqTS.js",
|
|
30
|
+
"_users-BgcdTQGM.js": "/static/app/assets/users-BgcdTQGM.js",
|
|
31
|
+
"_utils-a3YXFtEO.js": "/static/app/assets/utils-a3YXFtEO.js",
|
|
32
|
+
"_workspace-BMUEiXUm.js": "/static/app/assets/workspace-BMUEiXUm.js",
|
|
33
|
+
"index.html": "/static/app/assets/index-Dm9VXl1o.js",
|
|
34
|
+
"assets/index-CEkL4_M-.css": "/static/app/assets/index-CEkL4_M-.css",
|
|
35
|
+
"src/components/ProductFlow.tsx": "/static/app/assets/ProductFlow-JlXiDfMM.js",
|
|
36
|
+
"src/features/admin/AdminConsole.tsx": "/static/app/assets/AdminConsole-CEV1VefA.js",
|
|
37
|
+
"src/features/brain/BrainHome.tsx": "/static/app/assets/BrainHome-CEBd86k6.js",
|
|
38
|
+
"src/features/command/CommandPalette.tsx": "/static/app/assets/CommandPalette-CeqBjCn2.js",
|
|
39
|
+
"src/pages/Act.tsx": "/static/app/assets/Act-DrKIGZeJ.js",
|
|
40
|
+
"src/pages/Brain.tsx": "/static/app/assets/Brain-BZSXnwWU.js",
|
|
41
|
+
"src/pages/Capture.tsx": "/static/app/assets/Capture-AGbOxsg-.js",
|
|
42
|
+
"src/pages/Library.tsx": "/static/app/assets/Library-CXnbNiQW.js",
|
|
43
|
+
"src/pages/System.tsx": "/static/app/assets/System-Bp9ZY4ER.js"
|
|
44
44
|
}
|
|
45
45
|
}
|