ltcai 2.1.0 → 2.2.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 +140 -590
- package/auto_setup.py +17 -17
- package/docs/CHANGELOG.md +45 -0
- package/docs/MULTI_AGENT_RUNTIME.md +4 -4
- package/docs/PLUGIN_SDK.md +7 -7
- package/docs/REALTIME_COLLABORATION.md +6 -6
- package/docs/V2_ARCHITECTURE.md +45 -25
- package/docs/WORKFLOW_DESIGNER.md +4 -4
- package/docs/architecture.md +127 -135
- package/docs/kg-schema.md +3 -3
- package/docs/public-deploy.md +2 -3
- package/knowledge_graph.py +2 -2
- package/latticeai/__init__.py +1 -1
- package/latticeai/api/models.py +8 -0
- package/latticeai/core/config.py +1 -1
- package/latticeai/core/graph_curator.py +2 -2
- package/latticeai/core/marketplace.py +2 -2
- package/latticeai/core/model_compat.py +7 -63
- package/latticeai/core/model_resolution.py +1 -1
- package/latticeai/core/multi_agent.py +1 -1
- package/latticeai/core/plugins.py +1 -1
- package/latticeai/core/realtime.py +1 -1
- package/latticeai/core/workflow_engine.py +1 -1
- package/latticeai/core/workspace_os.py +1 -1
- package/latticeai/server_app.py +1 -1
- package/latticeai/services/model_catalog.py +105 -153
- package/latticeai/services/model_recommendation.py +28 -17
- package/latticeai/services/model_runtime.py +2 -2
- package/llm_router.py +80 -92
- package/ltcai_cli.py +2 -3
- package/package.json +1 -1
- package/static/chat.html +5 -6
- package/static/scripts/chat.js +34 -36
- package/static/workspace.html +1 -1
- package/telegram_bot.py +1 -1
package/auto_setup.py
CHANGED
|
@@ -443,8 +443,6 @@ class Recommendation:
|
|
|
443
443
|
_MODEL_CATALOG: List[Dict[str, Any]] = [
|
|
444
444
|
# (min_ram_mb, min_vram_mb, model_id, quant, runtime_preference)
|
|
445
445
|
# OS 오버헤드(~4-6 GB) + KV 캐시 여유를 감안한 보수적 RAM 임계값
|
|
446
|
-
{"ram": 128 * 1024, "vram": 48 * 1024,
|
|
447
|
-
"id": "mlx-community/gpt-oss-120b-MXFP4-Q4", "q": "mxfp4", "multimodal": False},
|
|
448
446
|
{"ram": 64 * 1024, "vram": 32 * 1024,
|
|
449
447
|
"id": "mlx-community/gemma-4-31b-it-4bit", "q": "4bit", "multimodal": True},
|
|
450
448
|
{"ram": 64 * 1024, "vram": 32 * 1024,
|
|
@@ -452,9 +450,13 @@ _MODEL_CATALOG: List[Dict[str, Any]] = [
|
|
|
452
450
|
{"ram": 48 * 1024, "vram": 24 * 1024,
|
|
453
451
|
"id": "mlx-community/gemma-4-31b-it-4bit", "q": "4bit", "multimodal": True},
|
|
454
452
|
{"ram": 32 * 1024, "vram": 16 * 1024,
|
|
455
|
-
"id": "mlx-community/
|
|
453
|
+
"id": "mlx-community/gemma-4-26b-a4b-it-4bit", "q": "4bit", "multimodal": True},
|
|
456
454
|
{"ram": 48 * 1024, "vram": 24 * 1024,
|
|
457
455
|
"id": "Qwen/Qwen3-VL-30B-A3B-Instruct", "q": "q4_K_M", "multimodal": True},
|
|
456
|
+
{"ram": 24 * 1024, "vram": 12 * 1024,
|
|
457
|
+
"id": "mlx-community/Llama-4-Scout-17B-16E-Instruct-4bit", "q": "4bit", "multimodal": True},
|
|
458
|
+
{"ram": 16 * 1024, "vram": 8 * 1024,
|
|
459
|
+
"id": "mlx-community/gemma-4-12b-it-4bit", "q": "4bit", "multimodal": True},
|
|
458
460
|
{"ram": 32 * 1024, "vram": 16 * 1024,
|
|
459
461
|
"id": "Qwen/Qwen3-VL-8B-Instruct", "q": "q5_K_M", "multimodal": True},
|
|
460
462
|
{"ram": 24 * 1024, "vram": 12 * 1024,
|
|
@@ -466,7 +468,7 @@ _MODEL_CATALOG: List[Dict[str, Any]] = [
|
|
|
466
468
|
{"ram": 8 * 1024, "vram": 4 * 1024,
|
|
467
469
|
"id": "Qwen/Qwen3-VL-4B-Instruct", "q": "q4_K_M", "multimodal": True},
|
|
468
470
|
{"ram": 4 * 1024, "vram": 0,
|
|
469
|
-
"id": "
|
|
471
|
+
"id": "Qwen/Qwen3-VL-4B-Instruct", "q": "q4_K_M", "multimodal": True},
|
|
470
472
|
]
|
|
471
473
|
|
|
472
474
|
|
|
@@ -477,8 +479,8 @@ def recommend(profile: SystemProfile) -> Recommendation:
|
|
|
477
479
|
# backend / runtime
|
|
478
480
|
if profile.os == "darwin" and profile.gpu.vendor == "apple":
|
|
479
481
|
backend = "metal+mlx"
|
|
480
|
-
runtime = "mlx" if _has_module("
|
|
481
|
-
rationale.append("Apple Silicon → Metal + MLX")
|
|
482
|
+
runtime = "mlx" if _has_module("mlx_vlm") else "llama.cpp"
|
|
483
|
+
rationale.append("Apple Silicon → Metal + MLX-VLM")
|
|
482
484
|
elif profile.gpu.vendor == "nvidia" and profile.cuda_available and (profile.os == "linux" or profile.is_wsl):
|
|
483
485
|
backend = "cuda"
|
|
484
486
|
runtime = "vllm" if profile.gpu.vram_mb >= 12 * 1024 else "llama.cpp"
|
|
@@ -612,10 +614,10 @@ def plan(profile: SystemProfile, rec: Recommendation) -> InstallPlan:
|
|
|
612
614
|
need("node20", "VSCode 확장 / npm CLI 부트스트랩에 필요")
|
|
613
615
|
|
|
614
616
|
# 런타임별 추가
|
|
615
|
-
if rec.runtime == "mlx" and not _has_module("
|
|
617
|
+
if rec.runtime == "mlx" and not _has_module("mlx_vlm"):
|
|
616
618
|
steps.append(InstallStep(
|
|
617
|
-
name="mlx-
|
|
618
|
-
command=["pip3", "install", "--upgrade", "mlx-
|
|
619
|
+
name="mlx-vlm", why="Apple Silicon 멀티모달 추론",
|
|
620
|
+
command=["pip3", "install", "--upgrade", "mlx-vlm"],
|
|
619
621
|
))
|
|
620
622
|
if rec.runtime in {"llama.cpp", "ollama"} and not _which("ollama"):
|
|
621
623
|
need("ollama", "llama.cpp 가중치를 가장 쉽게 받는 경로")
|
|
@@ -638,18 +640,16 @@ def plan(profile: SystemProfile, rec: Recommendation) -> InstallPlan:
|
|
|
638
640
|
model_command = ["huggingface-cli", "download", rec.model_id, "--quiet"]
|
|
639
641
|
if rec.runtime == "ollama":
|
|
640
642
|
lower = rec.model_id.lower()
|
|
641
|
-
if "
|
|
642
|
-
model_command = ["ollama", "pull", "gpt-oss:120b"]
|
|
643
|
-
elif "gpt-oss-20b" in lower:
|
|
644
|
-
model_command = ["ollama", "pull", "gpt-oss:20b"]
|
|
645
|
-
elif "gemma-4-31b" in lower:
|
|
643
|
+
if "gemma-4-31b" in lower:
|
|
646
644
|
model_command = ["ollama", "pull", "hf.co/ggml-org/gemma-4-31B-it-GGUF:Q4_K_M"]
|
|
645
|
+
elif "gemma-4-12b" in lower:
|
|
646
|
+
model_command = ["ollama", "pull", "hf.co/ggml-org/gemma-4-12B-it-GGUF:Q4_K_M"]
|
|
647
|
+
elif "llama-4-scout" in lower:
|
|
648
|
+
model_command = ["ollama", "pull", "hf.co/ggml-org/Llama-4-Scout-17B-16E-Instruct-GGUF:Q4_K_M"]
|
|
647
649
|
elif "qwen3-vl-8b" in lower:
|
|
648
650
|
model_command = ["ollama", "pull", "qwen3-vl:8b"]
|
|
649
651
|
elif "qwen3-vl-4b" in lower:
|
|
650
652
|
model_command = ["ollama", "pull", "qwen3-vl:4b"]
|
|
651
|
-
elif "gemma-3-1b" in lower:
|
|
652
|
-
model_command = ["ollama", "pull", "gemma3:1b"]
|
|
653
653
|
elif rec.runtime == "lmstudio":
|
|
654
654
|
model_command = ["lms", "get", rec.model_id]
|
|
655
655
|
steps.append(InstallStep(
|
|
@@ -696,7 +696,7 @@ def verify(profile: SystemProfile, rec: Recommendation) -> Dict[str, Any]:
|
|
|
696
696
|
f"{profile.disk_free_mb} MB free")
|
|
697
697
|
|
|
698
698
|
if rec.runtime == "mlx":
|
|
699
|
-
add("
|
|
699
|
+
add("mlx_vlm import", _has_module("mlx_vlm"), "Apple Silicon 멀티모달 런타임")
|
|
700
700
|
if rec.runtime in {"llama.cpp", "ollama"}:
|
|
701
701
|
add("ollama binary", _which("ollama") is not None,
|
|
702
702
|
_which("ollama") or "not found")
|
package/docs/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,50 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.2.0] - 2026-06-04
|
|
4
|
+
|
|
5
|
+
> Multimodal-First Knowledge OS Release — Lattice AI is aligned around the
|
|
6
|
+
> Knowledge Graph, multimodal inputs, source disclosure, and Gemma-4-first model
|
|
7
|
+
> recommendations.
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **Source disclosure metadata** — recommended model catalog entries now include
|
|
12
|
+
maker country, maker company, execution method, internet requirement, and
|
|
13
|
+
model name.
|
|
14
|
+
- **Principle documents** — added root-level `PROJECT_PRINCIPLES.md`,
|
|
15
|
+
`AI_PHILOSOPHY.md`, `MODEL_POLICY.md`, `KNOWLEDGE_GRAPH.md`,
|
|
16
|
+
`RELEASE_NOTES.md`, `ARCHITECTURE.md`, and `CHANGELOG.md`.
|
|
17
|
+
- **Gemma-4 default path** — default local model configuration and recommendation
|
|
18
|
+
aliases now center on Gemma 4 12B/31B multimodal models.
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- **README / architecture rewrite** — current docs now describe Lattice AI as an
|
|
23
|
+
AI Knowledge OS rather than a chat app or model launcher.
|
|
24
|
+
- **Multimodal recommendation logic** — local recommendation catalogs and setup
|
|
25
|
+
flows use current multimodal model families only: Gemma 4, Qwen3-VL, and
|
|
26
|
+
Llama 4.
|
|
27
|
+
- **Mode language** — basic and advanced modes are feature-equivalent and differ
|
|
28
|
+
by explanation level; admin mode remains the authority boundary.
|
|
29
|
+
- **Runtime policy** — Apple Silicon local execution now checks MLX-VLM instead
|
|
30
|
+
of MLX-LM.
|
|
31
|
+
- **Version sync** — Python package, npm package, VS Code extension, Workspace
|
|
32
|
+
OS, runtime constants, FastAPI app, and `/health` metadata aligned at `2.2.0`.
|
|
33
|
+
|
|
34
|
+
### Removed
|
|
35
|
+
|
|
36
|
+
- MLX-LM as a current local text-only recommendation/install path.
|
|
37
|
+
- Text-only low-spec fallback recommendations.
|
|
38
|
+
- Current recommendation entries for Gemma 2, Gemma 3, Qwen2.5-VL, SmolLM,
|
|
39
|
+
Phi, Mistral, DeepSeek, GPT-OSS, and Llama 3.x.
|
|
40
|
+
|
|
41
|
+
### Validation
|
|
42
|
+
|
|
43
|
+
- Unit tests added/updated for multimodal catalog policy, source metadata,
|
|
44
|
+
Gemma-4 aliases, and version metadata.
|
|
45
|
+
- Package-store publishing remains manual; release artifacts are version-scoped
|
|
46
|
+
and must use exact filenames.
|
|
47
|
+
|
|
3
48
|
## [2.1.0] - 2026-06-01
|
|
4
49
|
|
|
5
50
|
> Agent Platform Maturity Release — v2.1 operationalizes the v2.0 platform
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Lattice AI Multi-Agent Runtime 2.1
|
|
2
2
|
|
|
3
3
|
The Multi-Agent Runtime is the **orchestration layer** introduced in v2.0.0 and
|
|
4
|
-
operationalized in v2.
|
|
4
|
+
operationalized in v2.2.0. It sits
|
|
5
5
|
*above* the v1.x single-agent state machine ([`AgentRuntime`](../latticeai/core/agent.py))
|
|
6
6
|
and coordinates a pipeline of named **roles** that hand off work to one another,
|
|
7
7
|
retry on a failing review, and emit a fully observable, replayable timeline.
|
|
@@ -12,12 +12,12 @@ retry on a failing review, and emit a fully observable, replayable timeline.
|
|
|
12
12
|
(`WorkspaceOSStore.record_agent_run`, `replay_agent_run`, `list_handoffs`)
|
|
13
13
|
|
|
14
14
|
```python
|
|
15
|
-
MULTI_AGENT_VERSION = "2.
|
|
15
|
+
MULTI_AGENT_VERSION = "2.2.0"
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
## What v2.
|
|
18
|
+
## What v2.2 adds
|
|
19
19
|
|
|
20
|
-
v2.
|
|
20
|
+
v2.2 does not replace the v2.0 runtime; it makes the runtime's operational
|
|
21
21
|
objects durable and inspectable:
|
|
22
22
|
|
|
23
23
|
- **Explicit handoff records**: `handoff_id`, source/target agent ids, reason,
|
package/docs/PLUGIN_SDK.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Lattice AI Plugin SDK
|
|
2
2
|
|
|
3
3
|
The Plugin SDK is the extension layer for the Lattice AI Agentic Workspace
|
|
4
|
-
Platform. v2.
|
|
4
|
+
Platform. v2.2.0 keeps the v2.0 plugin model and adds execution observability plus
|
|
5
5
|
local marketplace-template foundations. It lets you package skills, tools,
|
|
6
6
|
workflow templates, and actions into one versioned, permissioned unit — a
|
|
7
7
|
*plugin*. A plugin is a directory under the configured `plugins` root that ships
|
|
@@ -22,10 +22,10 @@ through the existing skill registry rather than owning a parallel one.
|
|
|
22
22
|
The host SDK version is exposed as:
|
|
23
23
|
|
|
24
24
|
```python
|
|
25
|
-
PLUGIN_SDK_VERSION = "2.
|
|
25
|
+
PLUGIN_SDK_VERSION = "2.2.0"
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
## v2.
|
|
28
|
+
## v2.2 additions
|
|
29
29
|
|
|
30
30
|
- `execute_action(...)` emits `plugin_started`, `plugin_completed`, and
|
|
31
31
|
`execution_failed` through the existing Workspace OS timeline/realtime feed.
|
|
@@ -51,7 +51,7 @@ parsed and validated into an immutable `PluginManifest`.
|
|
|
51
51
|
| `version` | string | yes | Semantic version (`^\d+\.\d+\.\d+([.-][0-9A-Za-z.]+)?$`). |
|
|
52
52
|
| `description` | string | no | Short summary. |
|
|
53
53
|
| `author` | string | no | Author or organization. |
|
|
54
|
-
| `lattice_version` | string | no | Minimum host version this plugin requires. May be bare (`"2.
|
|
54
|
+
| `lattice_version` | string | no | Minimum host version this plugin requires. May be bare (`"2.2.0"`) or prefixed (`">=2.2.0"`). Empty means "any host". |
|
|
55
55
|
| `permissions` | string[] | no | Must be a subset of the [permission allow-list](#permissions). Unknown values are rejected. |
|
|
56
56
|
| `provides` | object | no | What the plugin contributes. Keys must be in `("skills", "tools", "workflows", "actions")`; each value is a list of names. |
|
|
57
57
|
| `entrypoint` | string | no | Reserved for an optional code entrypoint. |
|
|
@@ -205,14 +205,14 @@ identically:
|
|
|
205
205
|
{ "lattice_version": ">=2.0.0" }
|
|
206
206
|
```
|
|
207
207
|
|
|
208
|
-
Examples against a host of `2.
|
|
208
|
+
Examples against a host of `2.2.0`:
|
|
209
209
|
|
|
210
210
|
| Required | Compatible | Why |
|
|
211
211
|
| --- | --- | --- |
|
|
212
212
|
| `""` (missing) | yes | Any host. |
|
|
213
213
|
| `2.0.0` / `>=2.0.0` | yes | Same major, host `>=` required. |
|
|
214
|
-
| `2.
|
|
215
|
-
| `2.
|
|
214
|
+
| `2.2.0` / `>=2.2.0` | yes | Same major, exact current host. |
|
|
215
|
+
| `2.3.0` | no | Host is lower than the required minimum. |
|
|
216
216
|
| `1.0.0` | no | Major mismatch. |
|
|
217
217
|
| `3.0.0` | no | Major mismatch. |
|
|
218
218
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Lattice AI Realtime Collaboration
|
|
2
2
|
|
|
3
3
|
Realtime Collaboration is the subsystem that gives a Lattice AI workspace a live
|
|
4
|
-
**presence** registry and an **activity feed**. In v2.
|
|
4
|
+
**presence** registry and an **activity feed**. In v2.2.0 it also carries
|
|
5
5
|
workspace-scoped execution observability for agents, handoffs, reviews,
|
|
6
6
|
workflows, plugins, retries, and failures. It is delivered over Server-Sent
|
|
7
7
|
Events (SSE) by an in-process pub/sub bus, the
|
|
@@ -15,10 +15,10 @@ event system.
|
|
|
15
15
|
The bus version is:
|
|
16
16
|
|
|
17
17
|
```python
|
|
18
|
-
REALTIME_VERSION = "2.
|
|
18
|
+
REALTIME_VERSION = "2.2.0"
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
v2.
|
|
21
|
+
v2.2 execution event types include `agent_started`, `handoff_created`,
|
|
22
22
|
`handoff_accepted`, `handoff_completed`, `review_requested`, `review_approved`,
|
|
23
23
|
`retry_requested`, `workflow_started`, `workflow_completed`, `plugin_started`,
|
|
24
24
|
`plugin_completed`, `execution_failed`, and `execution_cancelled`.
|
|
@@ -301,7 +301,7 @@ defaults to `50` and is clamped to the `200`-entry buffer. Returns newest-first:
|
|
|
301
301
|
{
|
|
302
302
|
"events": [ /* enriched events, newest first */ ],
|
|
303
303
|
"stats": {
|
|
304
|
-
"version": "2.
|
|
304
|
+
"version": "2.2.0",
|
|
305
305
|
"subscribers": 1,
|
|
306
306
|
"presence": 2,
|
|
307
307
|
"feed_size": 17,
|
|
@@ -325,7 +325,7 @@ Returns the scope-filtered presence registry plus the same `stats` block:
|
|
|
325
325
|
"last_seen": "2026-06-01T10:15:30"
|
|
326
326
|
}
|
|
327
327
|
],
|
|
328
|
-
"stats": { "version": "2.
|
|
328
|
+
"stats": { "version": "2.2.0", "subscribers": 1, "presence": 1, "feed_size": 17, "transport": "sse" }
|
|
329
329
|
}
|
|
330
330
|
```
|
|
331
331
|
|
|
@@ -419,5 +419,5 @@ no client-side filtering is needed.
|
|
|
419
419
|
on top of it, not a replacement.
|
|
420
420
|
- **Single process.** The bus is in-process by design for the local-first
|
|
421
421
|
deployment; it does not coordinate across multiple server processes.
|
|
422
|
-
- **`stats()`** reports `version` (`2.
|
|
422
|
+
- **`stats()`** reports `version` (`2.2.0`), live `subscribers`, `presence`
|
|
423
423
|
count, `feed_size`, and the `transport` (`"sse"`) for health/observability.
|
package/docs/V2_ARCHITECTURE.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# Lattice AI v2 Architecture — Agentic Workspace Platform
|
|
2
2
|
|
|
3
3
|
Lattice AI v2.0.0 turned the local-first Workspace OS into a full **Agentic
|
|
4
|
-
Workspace Platform**. v2.
|
|
4
|
+
Workspace Platform**. v2.2.0 keeps that architecture and matures the operational
|
|
5
5
|
layer: explicit handoffs, context packets, review/retry loops, memory snapshots,
|
|
6
6
|
planning records, replay, marketplace templates, and realtime execution
|
|
7
7
|
observability all compose over the same local-first JSON store and Knowledge
|
|
8
8
|
Graph.
|
|
9
9
|
|
|
10
|
-
This document describes how the
|
|
10
|
+
This document describes how the v2 platform pillars fit together, the small set of
|
|
11
11
|
**additive integration seams** that wire them, the cross-integration matrix that
|
|
12
12
|
results, and the compatibility surfaces that v1.x callers and data keep relying
|
|
13
13
|
on. Every claim below is grounded in the shipping source:
|
|
@@ -22,17 +22,17 @@ on. Every claim below is grounded in the shipping source:
|
|
|
22
22
|
- Marketplace foundation: `latticeai/core/marketplace.py`, `latticeai/api/marketplace.py`
|
|
23
23
|
- Project conventions: `AGENTS.md`
|
|
24
24
|
|
|
25
|
-
All
|
|
25
|
+
All v2 subsystems share the same design rules from `AGENTS.md`: dependency
|
|
26
26
|
injection, explicit interfaces, small focused modules, registry-based dispatch,
|
|
27
27
|
and composition over global state. None of them import the FastAPI app; each is
|
|
28
28
|
constructed by `server_app.py` and exposed through a router factory.
|
|
29
29
|
|
|
30
30
|
---
|
|
31
31
|
|
|
32
|
-
## 1. The
|
|
32
|
+
## 1. The v2 Platform Pillars
|
|
33
33
|
|
|
34
34
|
The platform version is the single source of truth `WORKSPACE_OS_VERSION =
|
|
35
|
-
"2.
|
|
35
|
+
"2.2.0"` (`latticeai/core/workspace_os.py`). Each pillar module re-declares the
|
|
36
36
|
same version for its own surface (`PLUGIN_SDK_VERSION`, `WORKFLOW_ENGINE_VERSION`,
|
|
37
37
|
`MULTI_AGENT_VERSION`, `REALTIME_VERSION`) and the marketplace foundation exposes
|
|
38
38
|
`MARKETPLACE_VERSION`.
|
|
@@ -176,6 +176,13 @@ drive an injected `workflow_runner` / `plugin_runner`), and the `reviewer`
|
|
|
176
176
|
returns `pass` / `retry`. The reviewer can rewind the pipeline to the executor up
|
|
177
177
|
to `max_retries` times; the final `status` is `ok`, `retried_ok`, or `failed`.
|
|
178
178
|
|
|
179
|
+
v2.2.0 matures that orchestration with first-class `AgentHandoff` and
|
|
180
|
+
`AgentContextPacket` records, structured plan review, retry history, memory
|
|
181
|
+
snapshots, and replay frames. Handoffs are workspace-scoped and persisted with
|
|
182
|
+
source/target agents, task summary, reason, status, timestamps, and redacted
|
|
183
|
+
context so a run can be inspected after the fact instead of inferred from a flat
|
|
184
|
+
log.
|
|
185
|
+
|
|
179
186
|
### 1.4 Realtime Collaboration (`latticeai.core.realtime`)
|
|
180
187
|
|
|
181
188
|
An in-process pub/sub bus, presence registry, and activity feed delivered over
|
|
@@ -201,21 +208,34 @@ class RealtimeBus:
|
|
|
201
208
|
return self.publish(event)
|
|
202
209
|
```
|
|
203
210
|
|
|
211
|
+
### 1.5 Marketplace Foundation (`latticeai.core.marketplace`)
|
|
212
|
+
|
|
213
|
+
v2.2.0 adds a local marketplace foundation rather than a cloud marketplace
|
|
214
|
+
service. `TemplateCatalog` manages Plugin, Workflow, and Agent templates with
|
|
215
|
+
metadata, export/import, install hooks, and a template registry stored through
|
|
216
|
+
Workspace OS. Marketplace templates are local extension points for the existing
|
|
217
|
+
Plugin SDK, Workflow Engine, and Multi-Agent Runtime; they do not bypass plugin
|
|
218
|
+
permissions, workflow execution guards, or workspace scoping.
|
|
219
|
+
|
|
204
220
|
---
|
|
205
221
|
|
|
206
222
|
## 2. How the Pillars Compose Into One Platform
|
|
207
223
|
|
|
208
|
-
The
|
|
224
|
+
The v2 platform pillars are not parallel silos. They are stitched into one platform by
|
|
209
225
|
exactly **three additive seams**, all introduced without changing any existing
|
|
210
226
|
behavior.
|
|
211
227
|
|
|
212
|
-
### Seam 1 —
|
|
228
|
+
### Seam 1 — Additive state keys with deep-merge backfill
|
|
213
229
|
|
|
214
|
-
`WorkspaceOSStore._default_state()` adds
|
|
215
|
-
JSON state
|
|
216
|
-
**`workflow_runs`** (a list, alongside the existing
|
|
217
|
-
|
|
218
|
-
|
|
230
|
+
`WorkspaceOSStore._default_state()` adds new top-level keys to the local-first
|
|
231
|
+
JSON state, including **`plugin_registry`** (an object, mirroring
|
|
232
|
+
`skill_registry`), **`workflow_runs`** (a list, alongside the existing
|
|
233
|
+
`workflows`), **`handoffs`**, **`memory_snapshots`**, and
|
|
234
|
+
**`template_registry`**. The default state also adds v2 feature flags
|
|
235
|
+
(`plugin_sdk`, `workflow_designer`, `multi_agent_runtime`,
|
|
236
|
+
`realtime_collaboration`, `agent_handoff`, `agent_context_packets`,
|
|
237
|
+
`review_retry_loop`, `timeline_replay`, `marketplace_foundation`, and related
|
|
238
|
+
agent memory/planning flags) plus platform navigation areas.
|
|
219
239
|
|
|
220
240
|
These are safe for existing data because `load_state()` runs `_deep_merge(default,
|
|
221
241
|
loaded)` on every load. `_deep_merge` walks the default tree and fills in any key
|
|
@@ -234,14 +254,14 @@ def _deep_merge(default: Any, loaded: Any) -> Any:
|
|
|
234
254
|
return loaded
|
|
235
255
|
```
|
|
236
256
|
|
|
237
|
-
A v1.x `workspace_os.json` that has
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
`save_state`.
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
257
|
+
A v1.x `workspace_os.json` that has none of these newer keys is therefore
|
|
258
|
+
upgraded *in memory* on first load — the new keys are backfilled with their
|
|
259
|
+
defaults, every pre-existing snapshot, trace, memory, agent run, workflow, and
|
|
260
|
+
skill entry is preserved, and the file is only rewritten on the next normal
|
|
261
|
+
`save_state`. Plugin lifecycle helpers, workflow-run helpers, handoff helpers,
|
|
262
|
+
memory snapshot helpers, and marketplace template helpers operate on these keys,
|
|
263
|
+
deliberately mirroring the existing skill-registry and workflow-history
|
|
264
|
+
contracts.
|
|
245
265
|
|
|
246
266
|
### Seam 2 — A single `event_sink` on `record_timeline_event`
|
|
247
267
|
|
|
@@ -281,7 +301,7 @@ behavior change.
|
|
|
281
301
|
|
|
282
302
|
### Seam 3 — `PlatformRuntime` as the one cross-wiring point
|
|
283
303
|
|
|
284
|
-
`latticeai/services/platform_runtime.py` is the single place the
|
|
304
|
+
`latticeai/services/platform_runtime.py` is the single place the v2 subsystems
|
|
285
305
|
cross-wire to one another and to the workspace. Keeping it out of `server_app`
|
|
286
306
|
honours the `AGENTS.md` preference for small, composable, independently testable
|
|
287
307
|
modules; `server_app` only constructs it and mounts routers.
|
|
@@ -315,7 +335,7 @@ PLATFORM = PlatformRuntime(
|
|
|
315
335
|
factories `build_workflow_runners`, `build_orchestrator`, and
|
|
316
336
|
`plugin_capability_runners` that are handed to the routers.
|
|
317
337
|
|
|
318
|
-
The
|
|
338
|
+
The v2 routers are wired entirely through `PLATFORM`:
|
|
319
339
|
|
|
320
340
|
```python
|
|
321
341
|
app.include_router(create_plugins_router(
|
|
@@ -472,7 +492,7 @@ Representative run request/response (Workflow Designer):
|
|
|
472
492
|
|
|
473
493
|
```json
|
|
474
494
|
// POST /agents/api/run
|
|
475
|
-
{ "goal": "Draft v2.
|
|
495
|
+
{ "goal": "Draft v2.2 release notes", "roles": ["planner", "executor", "reviewer"], "max_retries": 2 }
|
|
476
496
|
```
|
|
477
497
|
|
|
478
498
|
```json
|
|
@@ -486,7 +506,7 @@ Representative run request/response (Workflow Designer):
|
|
|
486
506
|
|
|
487
507
|
## 6. Compatibility
|
|
488
508
|
|
|
489
|
-
> **Compatibility note.** v2.
|
|
509
|
+
> **Compatibility note.** v2.2.0 is **additive**. All v1.x and v2.0 data and APIs are
|
|
490
510
|
> preserved; the platform layers new capabilities on top of unchanged surfaces.
|
|
491
511
|
|
|
492
512
|
Preserved surfaces, verified against source:
|
|
@@ -494,7 +514,7 @@ Preserved surfaces, verified against source:
|
|
|
494
514
|
- **ASGI entrypoints.** `server:app` and `latticeai.server_app.app` remain the
|
|
495
515
|
application objects. `server_app.py` still exposes the module-level `app =
|
|
496
516
|
FastAPI(...)` plus the `main()` / `uvicorn.run(app, ...)` entry point.
|
|
497
|
-
- **Version wiring.** `WORKSPACE_OS_VERSION = "2.
|
|
517
|
+
- **Version wiring.** `WORKSPACE_OS_VERSION = "2.2.0"` drives both
|
|
498
518
|
`APP_VERSION` (and thus the FastAPI `app.version`) and the `/health`
|
|
499
519
|
response — the health router is constructed with `app_version=APP_VERSION`.
|
|
500
520
|
- **Existing routes.** Every v1.x router (`auth`, `admin`, `security_dashboard`,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Lattice AI Workflow Designer
|
|
2
2
|
|
|
3
|
-
The Workflow Designer (introduced in **v2.0.0** and hardened in **v2.
|
|
3
|
+
The Workflow Designer (introduced in **v2.0.0** and hardened in **v2.2.0**) lets
|
|
4
4
|
you build, validate, run, inspect, replay, export, and import automations as a
|
|
5
5
|
small **directed graph of typed nodes**. A workflow starts from a single
|
|
6
6
|
`trigger` node and walks node-to-node to an `output`, dispatching each executable
|
|
@@ -17,10 +17,10 @@ is preserved.
|
|
|
17
17
|
The engine version is exported as:
|
|
18
18
|
|
|
19
19
|
```python
|
|
20
|
-
WORKFLOW_ENGINE_VERSION = "2.
|
|
20
|
+
WORKFLOW_ENGINE_VERSION = "2.2.0"
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
## v2.
|
|
23
|
+
## v2.2 hardening
|
|
24
24
|
|
|
25
25
|
- Agent node output is captured in workflow context and can flow into a later
|
|
26
26
|
plugin or output node through `last_output`.
|
|
@@ -449,7 +449,7 @@ or scope), stamped with the engine version and stripped of the internal
|
|
|
449
449
|
|
|
450
450
|
```json
|
|
451
451
|
{
|
|
452
|
-
"lattice_workflow_export": "2.
|
|
452
|
+
"lattice_workflow_export": "2.2.0",
|
|
453
453
|
"name": "Daily digest",
|
|
454
454
|
"nodes": [ /* ... */ ],
|
|
455
455
|
"metadata": {}
|