ltcai 8.6.0 → 8.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.
Files changed (40) hide show
  1. package/README.md +31 -29
  2. package/docs/CHANGELOG.md +23 -1
  3. package/docs/COMMUNITY_AND_PLUGINS.md +5 -3
  4. package/docs/DEVELOPMENT.md +11 -9
  5. package/docs/LEGACY_COMPATIBILITY.md +3 -3
  6. package/docs/ONBOARDING.md +2 -2
  7. package/docs/TRUST_MODEL.md +1 -1
  8. package/docs/WHY_LATTICE.md +2 -2
  9. package/docs/kg-schema.md +1 -1
  10. package/lattice_brain/__init__.py +1 -1
  11. package/lattice_brain/runtime/multi_agent.py +1 -1
  12. package/latticeai/__init__.py +1 -1
  13. package/latticeai/app_factory.py +2 -2
  14. package/latticeai/core/config.py +14 -2
  15. package/latticeai/core/marketplace.py +1 -1
  16. package/latticeai/core/workspace_os.py +1 -1
  17. package/latticeai/models/router.py +3 -2
  18. package/latticeai/runtime/router_registration.py +11 -5
  19. package/latticeai/services/architecture_readiness.py +2 -2
  20. package/latticeai/services/model_runtime.py +52 -28
  21. package/latticeai/services/product_readiness.py +11 -11
  22. package/package.json +3 -2
  23. package/scripts/bump_version.py +2 -0
  24. package/scripts/check_python.py +25 -12
  25. package/src-tauri/Cargo.lock +1 -1
  26. package/src-tauri/Cargo.toml +1 -1
  27. package/src-tauri/tauri.conf.json +1 -1
  28. package/static/app/asset-manifest.json +10 -10
  29. package/static/app/assets/{Act-IrojDEWY.js → Act-_U7mhXir.js} +1 -1
  30. package/static/app/assets/{Brain--VODO4HM.js → Brain-BxyTHZ21.js} +1 -1
  31. package/static/app/assets/Capture-DyDKWNh9.js +1 -0
  32. package/static/app/assets/{Library-DrVto3cO.js → Library-DJ8KioFM.js} +1 -1
  33. package/static/app/assets/{System-DNrVbcMX.js → System-C0FIb3OO.js} +1 -1
  34. package/static/app/assets/index-Bh7IIlyY.js +16 -0
  35. package/static/app/assets/{primitives-lz45ZfWY.js → primitives-BywkNS3f.js} +1 -1
  36. package/static/app/assets/{textarea-C7uwJsxy.js → textarea-CQ61Rycp.js} +1 -1
  37. package/static/app/index.html +1 -1
  38. package/static/sw.js +1 -1
  39. package/static/app/assets/Capture-BUP_wJ7s.js +0 -1
  40. package/static/app/assets/index-BaaPtsLp.js +0 -16
@@ -18,7 +18,7 @@ from typing import Any, Dict, List
18
18
 
19
19
  from latticeai.services.architecture_readiness import architecture_readiness
20
20
 
21
- PRODUCT_VERSION_TARGET = "8.6.0"
21
+ PRODUCT_VERSION_TARGET = "8.7.0"
22
22
 
23
23
 
24
24
  @dataclass(frozen=True)
@@ -76,10 +76,10 @@ PRODUCT_GATES: List[ProductGate] = [
76
76
  evidence=[
77
77
  "package.json::release:artifacts",
78
78
  "package.json::release:validate",
79
- "README.md::dist/ltcai-8.6.0-py3-none-any.whl",
80
- "README.md::dist/ltcai-8.6.0.tar.gz",
81
- "README.md::dist/ltcai-8.6.0.vsix",
82
- "README.md::ltcai-8.6.0.tgz",
79
+ "README.md::dist/ltcai-8.7.0-py3-none-any.whl",
80
+ "README.md::dist/ltcai-8.7.0.tar.gz",
81
+ "README.md::dist/ltcai-8.7.0.vsix",
82
+ "README.md::ltcai-8.7.0.tgz",
83
83
  "scripts/validate_release_artifacts.py",
84
84
  "scripts/release_smoke.py",
85
85
  "Dockerfile",
@@ -95,12 +95,12 @@ PRODUCT_GATES: List[ProductGate] = [
95
95
  title="Release story is documented and honest",
96
96
  evidence=[
97
97
  "README.md",
98
- "README.md::The current release is **8.6.0",
99
- "SECURITY.md::8.6.x (latest)",
100
- "vscode-extension/README.md::**8.6.0",
101
- "docs/CHANGELOG.md::## [8.6.0]",
98
+ "README.md::The current release is **8.7.0",
99
+ "SECURITY.md::8.7.x (latest)",
100
+ "vscode-extension/README.md::**8.7.0",
101
+ "docs/CHANGELOG.md::## [8.7.0]",
102
102
  "FEATURE_STATUS.md",
103
- "RELEASE_NOTES_v8.6.0.md",
103
+ "RELEASE_NOTES_v8.7.0.md",
104
104
  "latticeai/core/agent.py::SingleAgentRuntime",
105
105
  "latticeai/core/agent.py::AgentRuntime = SingleAgentRuntime",
106
106
  "lattice_brain/runtime/contracts.py::runtime-boundary/v1",
@@ -115,7 +115,7 @@ PRODUCT_GATES: List[ProductGate] = [
115
115
  id="ecosystem-path",
116
116
  title="Community and plugin growth path is explicit",
117
117
  evidence=[
118
- "docs/COMMUNITY_AND_PLUGINS.md::8.6.0",
118
+ "docs/COMMUNITY_AND_PLUGINS.md::8.7.0",
119
119
  "docs/PLUGIN_SDK.md",
120
120
  "plugins/README.md",
121
121
  "plugins/hello-world/plugin.json",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ltcai",
3
- "version": "8.6.0",
3
+ "version": "8.7.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": {
@@ -23,7 +23,8 @@
23
23
  "build:assets": "vite build && node scripts/build_frontend_assets.mjs",
24
24
  "build:python": "node scripts/run_python.mjs -m build",
25
25
  "check:python": "node scripts/run_python.mjs scripts/check_python.py",
26
- "lint": "node --check tests/visual/mock_server.cjs && node --check tests/visual/v3.spec.js && npm run lint:frontend && node scripts/check_i18n_literals.mjs",
26
+ "lint": "npm run lint:python && node --check tests/visual/mock_server.cjs && node --check tests/visual/v3.spec.js && npm run lint:frontend && node scripts/check_i18n_literals.mjs",
27
+ "lint:python": "node scripts/run_python.mjs -m ruff check .",
27
28
  "lint:frontend": "node scripts/lint_frontend.mjs",
28
29
  "docs:check-links": "node scripts/check_markdown_links.mjs",
29
30
  "typecheck": "npm run typecheck:frontend && cd vscode-extension && npm run build",
@@ -27,6 +27,8 @@ TARGETS = [
27
27
  ("latticeai/core/workspace_os.py", "regex", r'(WORKSPACE_OS_VERSION = ")([^"]+)(")'),
28
28
  ("latticeai/core/marketplace.py", "regex", r'(MARKETPLACE_VERSION = ")([^"]+)(")'),
29
29
  ("lattice_brain/runtime/multi_agent.py", "regex", r'(MULTI_AGENT_VERSION = ")([^"]+)(")'),
30
+ ("latticeai/services/architecture_readiness.py", "regex", r'(ARCHITECTURE_VERSION_TARGET = ")([^"]+)(")'),
31
+ ("latticeai/services/product_readiness.py", "regex", r'(PRODUCT_VERSION_TARGET = ")([^"]+)(")'),
30
32
  ("pyproject.toml", "regex", r'(^version = ")([^"]+)(")'),
31
33
  ("package.json", "json", "version"),
32
34
  ("package-lock.json", "package-lock", None),
@@ -1,23 +1,26 @@
1
1
  #!/usr/bin/env python3
2
- """Discover-and-compile every first-party Python module.
2
+ """Discover-and-syntax-check every first-party Python module.
3
3
 
4
4
  Replaces the hand-maintained ``py_compile`` enumeration in CI and
5
5
  ``package.json``: walks the repository, skips vendored / virtualenv / build /
6
- cache / generated directories, and byte-compiles everything that remains. New
6
+ cache / generated directories, and checks everything that remains. New
7
7
  modules are picked up automatically — there is nothing to update when a file is
8
8
  added, so the syntax gate can never silently fall behind the codebase.
9
9
 
10
+ Unlike ``py_compile``, this script does not write ``.pyc`` files or create
11
+ ``__pycache__`` directories. Validation should not dirty a developer's working
12
+ tree or leave generated files for later lint passes to trip over.
13
+
10
14
  Usage::
11
15
 
12
- python scripts/check_python.py # compile all discovered modules
13
- python scripts/check_python.py --list # just print what would be compiled
16
+ python scripts/check_python.py # syntax-check all discovered modules
17
+ python scripts/check_python.py --list # just print what would be checked
14
18
 
15
- Exit code is non-zero if any module fails to compile.
19
+ Exit code is non-zero if any module fails to parse.
16
20
  """
17
21
 
18
22
  from __future__ import annotations
19
23
 
20
- import py_compile
21
24
  import sys
22
25
  from pathlib import Path
23
26
 
@@ -44,6 +47,7 @@ EXCLUDE_DIRS = {
44
47
  "playwright-report",
45
48
  "test-results",
46
49
  "ltcai.egg-info",
50
+ "output",
47
51
  ".ltcai",
48
52
  ".ltcai-brain",
49
53
  ".ltcai-test",
@@ -60,6 +64,16 @@ def iter_modules():
60
64
  yield path
61
65
 
62
66
 
67
+ def check_syntax(path: Path) -> str | None:
68
+ """Return a human-readable failure string, or ``None`` when syntax is valid."""
69
+
70
+ try:
71
+ compile(path.read_bytes(), str(path), "exec", dont_inherit=True)
72
+ except (OSError, SyntaxError, ValueError) as exc:
73
+ return f"{path.relative_to(ROOT)}: {exc}"
74
+ return None
75
+
76
+
63
77
  def main(argv: list[str]) -> int:
64
78
  modules = sorted(iter_modules())
65
79
  if "--list" in argv:
@@ -69,17 +83,16 @@ def main(argv: list[str]) -> int:
69
83
 
70
84
  failures: list[str] = []
71
85
  for path in modules:
72
- try:
73
- py_compile.compile(str(path), doraise=True)
74
- except py_compile.PyCompileError as exc:
75
- failures.append(str(exc))
86
+ failure = check_syntax(path)
87
+ if failure:
88
+ failures.append(failure)
76
89
 
77
90
  if failures:
78
91
  print("\n".join(failures))
79
- print(f"check:python FAILED — {len(failures)} of {len(modules)} module(s) did not compile")
92
+ print(f"check:python FAILED — {len(failures)} of {len(modules)} module(s) did not parse")
80
93
  return 1
81
94
 
82
- print(f"check:python OK — compiled {len(modules)} modules")
95
+ print(f"check:python OK — syntax-checked {len(modules)} modules")
83
96
  return 0
84
97
 
85
98
 
@@ -1584,7 +1584,7 @@ dependencies = [
1584
1584
 
1585
1585
  [[package]]
1586
1586
  name = "lattice-ai-desktop"
1587
- version = "8.6.0"
1587
+ version = "8.7.0"
1588
1588
  dependencies = [
1589
1589
  "plist",
1590
1590
  "serde",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "lattice-ai-desktop"
3
- version = "8.6.0"
3
+ version = "8.7.0"
4
4
  description = "Lattice AI Digital Brain desktop shell"
5
5
  authors = ["TaeSoo Park"]
6
6
  edition = "2021"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://schema.tauri.app/config/2",
3
3
  "productName": "Lattice AI",
4
- "version": "8.6.0",
4
+ "version": "8.7.0",
5
5
  "identifier": "ai.lattice.desktop",
6
6
  "build": {
7
7
  "beforeDevCommand": "npm run frontend:dev",
@@ -1,19 +1,19 @@
1
1
  {
2
- "version": "8.6.0",
2
+ "version": "8.7.0",
3
3
  "generated_at": "vite",
4
4
  "entrypoints": {
5
- "app": "/static/app/assets/index-BaaPtsLp.js"
5
+ "app": "/static/app/assets/index-Bh7IIlyY.js"
6
6
  },
7
7
  "assets": {
8
8
  "../node_modules/@tauri-apps/api/core.js": "/static/app/assets/core-CwxXejkd.js",
9
- "_primitives-lz45ZfWY.js": "/static/app/assets/primitives-lz45ZfWY.js",
10
- "_textarea-C7uwJsxy.js": "/static/app/assets/textarea-C7uwJsxy.js",
11
- "index.html": "/static/app/assets/index-BaaPtsLp.js",
9
+ "_primitives-BywkNS3f.js": "/static/app/assets/primitives-BywkNS3f.js",
10
+ "_textarea-CQ61Rycp.js": "/static/app/assets/textarea-CQ61Rycp.js",
11
+ "index.html": "/static/app/assets/index-Bh7IIlyY.js",
12
12
  "assets/index-_M5aCv21.css": "/static/app/assets/index-_M5aCv21.css",
13
- "src/pages/Act.tsx": "/static/app/assets/Act-IrojDEWY.js",
14
- "src/pages/Brain.tsx": "/static/app/assets/Brain--VODO4HM.js",
15
- "src/pages/Capture.tsx": "/static/app/assets/Capture-BUP_wJ7s.js",
16
- "src/pages/Library.tsx": "/static/app/assets/Library-DrVto3cO.js",
17
- "src/pages/System.tsx": "/static/app/assets/System-DNrVbcMX.js"
13
+ "src/pages/Act.tsx": "/static/app/assets/Act-_U7mhXir.js",
14
+ "src/pages/Brain.tsx": "/static/app/assets/Brain-BxyTHZ21.js",
15
+ "src/pages/Capture.tsx": "/static/app/assets/Capture-DyDKWNh9.js",
16
+ "src/pages/Library.tsx": "/static/app/assets/Library-DJ8KioFM.js",
17
+ "src/pages/System.tsx": "/static/app/assets/System-C0FIb3OO.js"
18
18
  }
19
19
  }