ltcai 2.2.2 → 2.2.7
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 +27 -19
- package/codex_telegram_bot.py +6 -2
- package/docs/CHANGELOG.md +72 -0
- package/latticeai/__init__.py +1 -1
- package/latticeai/api/static_routes.py +10 -0
- package/latticeai/core/logging_safety.py +62 -0
- package/latticeai/core/workspace_os.py +1 -1
- package/package.json +4 -2
- package/static/account.html +9 -4
- package/static/activity.html +4 -4
- package/static/admin.html +8 -3
- package/static/agents.html +4 -4
- package/static/chat.html +15 -10
- package/static/css/reference/account.css +303 -0
- package/static/css/reference/admin.css +610 -0
- package/static/css/reference/base.css +1658 -0
- package/static/{lattice-reference.css → css/reference/chat.css} +243 -3599
- package/static/css/reference/graph.css +1016 -0
- package/static/css/responsive.css +206 -1
- package/static/css/tokens.css +16 -5
- package/static/favicon.ico +0 -0
- package/static/graph.html +9 -4
- package/static/platform.css +1 -1
- package/static/plugins.html +4 -4
- package/static/scripts/chat.js +187 -69
- package/static/sw.js +5 -3
- package/static/workflows.html +4 -4
- package/static/workspace.css +70 -14
- package/static/workspace.html +5 -5
- package/telegram_bot.py +18 -14
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
[](https://www.npmjs.com/package/ltcai)
|
|
16
16
|
[](https://marketplace.visualstudio.com/items?itemName=parktaesoo.ltcai)
|
|
17
17
|
[](https://open-vsx.org/extension/parktaesoo/ltcai)
|
|
18
|
-
[](https://github.com/TaeSooPark-PTS/LatticeAI/releases/tag/v2.2.
|
|
18
|
+
[](https://github.com/TaeSooPark-PTS/LatticeAI/releases/tag/v2.2.7)
|
|
19
19
|
[](LICENSE)
|
|
20
20
|
[](https://www.python.org/)
|
|
21
21
|
[](https://marketplace.visualstudio.com/items?itemName=parktaesoo.ltcai)
|
|
@@ -48,7 +48,7 @@ Install the coding extension:
|
|
|
48
48
|
|
|
49
49
|
- [VS Code Marketplace: parktaesoo.ltcai](https://marketplace.visualstudio.com/items?itemName=parktaesoo.ltcai)
|
|
50
50
|
- [Open VSX: parktaesoo.ltcai](https://open-vsx.org/extension/parktaesoo/ltcai)
|
|
51
|
-
- [GitHub Release v2.2.
|
|
51
|
+
- [GitHub Release v2.2.7](https://github.com/TaeSooPark-PTS/LatticeAI/releases/tag/v2.2.7)
|
|
52
52
|
|
|
53
53
|
## Quick Start
|
|
54
54
|
|
|
@@ -114,22 +114,25 @@ and disconnected automations. Lattice AI keeps those parts together:
|
|
|
114
114
|
- multi-agent workflows leave behind replayable plans, reviews, retries, and
|
|
115
115
|
outcomes.
|
|
116
116
|
|
|
117
|
-
## v2.2.
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
the existing design-token
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
-
|
|
127
|
-
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
117
|
+
## v2.2.7 Visual Stabilization Highlights
|
|
118
|
+
|
|
119
|
+
Lattice AI v2.2.7 is a visual stabilization release driven by rendered browser
|
|
120
|
+
screens, not stylesheet cleanup alone. It keeps the existing design-token
|
|
121
|
+
structure while making the app feel like one cohesive product.
|
|
122
|
+
|
|
123
|
+
- The dark chat composer is now an intentional dark surface with a crisp outer
|
|
124
|
+
focus state, no white haze, and no legacy inner textarea box.
|
|
125
|
+
- Knowledge Graph canvas and Workspace OS panels no longer fall back to
|
|
126
|
+
washed-out light surfaces in dark mode.
|
|
127
|
+
- Workspace select, onboarding, recommendation, auto setup, mode select,
|
|
128
|
+
pipeline, My Computer, profile, settings, VPC, and model-state surfaces use a
|
|
129
|
+
shared modal/panel language.
|
|
130
|
+
- Static frontend asset cache-busting is normalized to `?v=2.2.7`, including
|
|
131
|
+
`/static/scripts/chat.js?v=2.2.7`.
|
|
132
|
+
- Playwright visual coverage now locks the v2.2.7 composer, graph canvas,
|
|
133
|
+
Workspace OS dark inputs/cards, and mobile composer behavior.
|
|
134
|
+
|
|
135
|
+
Carried forward from v2.2.x: mobile-first responsive layout, design-token
|
|
133
136
|
light/dark themes, keyboard-safe chat composer, Knowledge Graph responsive UX,
|
|
134
137
|
Admin mobile card layout, drag-and-drop file attachment, and model-card source
|
|
135
138
|
disclosure.
|
|
@@ -227,7 +230,12 @@ Core areas:
|
|
|
227
230
|
|
|
228
231
|
| Version | Theme |
|
|
229
232
|
| --- | --- |
|
|
230
|
-
| **2.2.
|
|
233
|
+
| **2.2.7** | Visual system stabilization — cohesive dark/light screens, crisp chat composer, dark graph canvas, Workspace OS polish |
|
|
234
|
+
| 2.2.6 | Token-native CSS foundation |
|
|
235
|
+
| 2.2.5 | Release hygiene hotfix — dark overlays, modal stack, cache-busting, favicon, and Telegram log masking |
|
|
236
|
+
| 2.2.4 | Chat dark-mode completion |
|
|
237
|
+
| 2.2.3 | Frontend stability and UX fixes |
|
|
238
|
+
| 2.2.2 | Frontend QA stabilization — mobile nav, admin actions, overflow fixes, and expanded visual tests |
|
|
231
239
|
| 2.2.1 | Frontend and UX overhaul for responsive workspace, themes, graph UX, admin reflow, and file attachment |
|
|
232
240
|
| 2.2.0 | Multimodal-first Knowledge Graph and local model source disclosure |
|
|
233
241
|
| 2.1.0 | Multi-agent workflow maturity |
|
package/codex_telegram_bot.py
CHANGED
|
@@ -7,6 +7,10 @@ from pathlib import Path
|
|
|
7
7
|
import httpx
|
|
8
8
|
from openai import AsyncOpenAI
|
|
9
9
|
|
|
10
|
+
from latticeai.core.logging_safety import install_sensitive_log_filter, safe_log_text
|
|
11
|
+
|
|
12
|
+
install_sensitive_log_filter()
|
|
13
|
+
|
|
10
14
|
|
|
11
15
|
def load_env_file(path=".env"):
|
|
12
16
|
env_path = Path(path)
|
|
@@ -72,7 +76,7 @@ async def get_updates(client, offset=None):
|
|
|
72
76
|
res = await client.get(f"{TELEGRAM_API_URL}/getUpdates", params=params, timeout=35)
|
|
73
77
|
return res.json()
|
|
74
78
|
except Exception as exc:
|
|
75
|
-
logger.error("Telegram update failed: %s", exc)
|
|
79
|
+
logger.error("Telegram update failed: %s", safe_log_text(exc))
|
|
76
80
|
return None
|
|
77
81
|
|
|
78
82
|
|
|
@@ -161,7 +165,7 @@ async def handle_message(client, chat_id, text):
|
|
|
161
165
|
answer = await ask_codex(chat_id, text)
|
|
162
166
|
except Exception as exc:
|
|
163
167
|
logger.exception("OpenAI request failed")
|
|
164
|
-
answer = f"OpenAI 요청 실패: {exc}"
|
|
168
|
+
answer = f"OpenAI 요청 실패: {safe_log_text(exc)}"
|
|
165
169
|
await send_message(client, chat_id, answer)
|
|
166
170
|
|
|
167
171
|
|
package/docs/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,77 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.2.7] - 2026-06-05
|
|
4
|
+
|
|
5
|
+
> Visual Stabilization Release — browser-rendered screens were reviewed and
|
|
6
|
+
> polished until Chat, onboarding, graph, Workspace OS, and operational panels
|
|
7
|
+
> felt like one product.
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **Chat composer haze** — removed the dark-mode white/milky bottom composer
|
|
12
|
+
effect and the legacy inner textarea border; the shell now owns the focus
|
|
13
|
+
state and the attachment/send controls stay readable.
|
|
14
|
+
- **Knowledge Graph canvas** — replaced the washed-out light graph work surface
|
|
15
|
+
with an intentional dark canvas treatment.
|
|
16
|
+
- **Workspace OS dark surfaces** — relationship/list cards, inputs, tags,
|
|
17
|
+
health cards, and capability cards no longer fall back to hardcoded white.
|
|
18
|
+
- **Onboarding/modals** — workspace select, PC environment analysis,
|
|
19
|
+
recommendation result, auto setup, mode select, pipeline, My Computer,
|
|
20
|
+
profile, settings, Private VPC, and model-state panels now share the same
|
|
21
|
+
dark panel language.
|
|
22
|
+
- **Account dark contrast** — account/register logo text, inputs, and window
|
|
23
|
+
controls remain readable in dark mode.
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
|
|
27
|
+
- **Cache-busting** — all versioned frontend assets now use `?v=2.2.7`,
|
|
28
|
+
including `/static/scripts/chat.js?v=2.2.7`.
|
|
29
|
+
- **Version sync** — Python package, npm package, VS Code extension, Workspace
|
|
30
|
+
OS, lockfiles, and runtime metadata aligned at `2.2.7`.
|
|
31
|
+
|
|
32
|
+
### Validation
|
|
33
|
+
|
|
34
|
+
- Release target includes Python compile/pytest, npm lint/typecheck/test/build,
|
|
35
|
+
Python build + twine check, npm pack, VSIX package, and Playwright visual QA.
|
|
36
|
+
- Package-store publishing remains manual; release artifacts are version-scoped
|
|
37
|
+
and must use exact `2.2.7` filenames.
|
|
38
|
+
|
|
39
|
+
## [2.2.5] - 2026-06-04
|
|
40
|
+
|
|
41
|
+
> Release Hygiene Hotfix — dark-mode overlay clarity, modal state protection,
|
|
42
|
+
> static asset version alignment, favicon routing, and Telegram log redaction.
|
|
43
|
+
|
|
44
|
+
### Added
|
|
45
|
+
|
|
46
|
+
- **Modal manager** — Chat overlays now share one blocking-modal controller with
|
|
47
|
+
Escape close, backdrop close, pagehide/navigation cleanup, and body scroll-lock
|
|
48
|
+
restoration.
|
|
49
|
+
- **Favicon asset** — `static/favicon.ico` is packaged and served by
|
|
50
|
+
`/favicon.ico`.
|
|
51
|
+
- **Sensitive-log helper** — Telegram bot tokens are normalized to
|
|
52
|
+
`bot123:REDACTED` before HTTP, exception, or response text reaches logs.
|
|
53
|
+
- **Validation coverage** — unit tests for token masking and static release
|
|
54
|
+
hygiene, plus Playwright checks for modal stack behavior and favicon response.
|
|
55
|
+
|
|
56
|
+
### Changed
|
|
57
|
+
|
|
58
|
+
- **Overlay theme tokens** — full-screen overlays use `--overlay-scrim` and no
|
|
59
|
+
blur-heavy backdrop, preventing washed-out dark-mode UI.
|
|
60
|
+
- **Surface token coverage** — modal, drawer, file manager, My Computer,
|
|
61
|
+
onboarding, model switcher, pipeline, and admin surfaces are remapped to
|
|
62
|
+
semantic tokens (`--modal`, `--surface`, `--surface-elevated`, `--input`).
|
|
63
|
+
- **Cache-busting** — all versioned frontend assets now use `?v=2.2.5`, including
|
|
64
|
+
`/static/scripts/chat.js?v=2.2.5`.
|
|
65
|
+
- **Version sync** — Python package, npm package, VS Code extension, Workspace
|
|
66
|
+
OS, lockfiles, and runtime metadata aligned at `2.2.5`.
|
|
67
|
+
|
|
68
|
+
### Validation
|
|
69
|
+
|
|
70
|
+
- Release target includes Python compile/pytest, npm lint/typecheck/test/build,
|
|
71
|
+
Python build + twine check, npm pack, VSIX package, and Playwright visual QA.
|
|
72
|
+
- Package-store publishing remains manual; release artifacts are version-scoped
|
|
73
|
+
and must use exact `2.2.5` filenames.
|
|
74
|
+
|
|
3
75
|
## [2.2.1] - 2026-06-04
|
|
4
76
|
|
|
5
77
|
> Frontend / UX Overhaul Release — Lattice AI keeps feature behavior stable
|
package/latticeai/__init__.py
CHANGED
|
@@ -82,6 +82,16 @@ def create_static_routes_router(
|
|
|
82
82
|
if not p.exists():
|
|
83
83
|
raise HTTPException(status_code=404)
|
|
84
84
|
return FileResponse(str(p), media_type="application/manifest+json")
|
|
85
|
+
|
|
86
|
+
@api_router.api_route("/favicon.ico", methods=["GET", "HEAD"])
|
|
87
|
+
async def favicon():
|
|
88
|
+
ico = STATIC_DIR / "favicon.ico"
|
|
89
|
+
png = STATIC_DIR / "icons" / "favicon-32.png"
|
|
90
|
+
if ico.exists():
|
|
91
|
+
return FileResponse(str(ico), media_type="image/x-icon")
|
|
92
|
+
if png.exists():
|
|
93
|
+
return FileResponse(str(png), media_type="image/png")
|
|
94
|
+
raise HTTPException(status_code=404)
|
|
85
95
|
|
|
86
96
|
|
|
87
97
|
@api_router.get("/sw.js")
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"""Helpers for keeping sensitive values out of logs."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import logging
|
|
6
|
+
import re
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
_TELEGRAM_BOT_TOKEN_RE = re.compile(r"\bbot(\d{5,20}):([A-Za-z0-9_-]{8,})")
|
|
10
|
+
_TELEGRAM_BARE_TOKEN_RE = re.compile(
|
|
11
|
+
r"(?<![A-Za-z0-9_:-])(\d{5,20}):([A-Za-z0-9_-]{8,})(?![A-Za-z0-9_-])"
|
|
12
|
+
)
|
|
13
|
+
_LOG_FILTER_INSTALLED = False
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def mask_telegram_bot_token(value: Any) -> str:
|
|
17
|
+
"""Return ``value`` as text with Telegram bot token secrets redacted."""
|
|
18
|
+
|
|
19
|
+
text = str(value)
|
|
20
|
+
text = _TELEGRAM_BOT_TOKEN_RE.sub(r"bot\1:REDACTED", text)
|
|
21
|
+
return _TELEGRAM_BARE_TOKEN_RE.sub(r"bot\1:REDACTED", text)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def safe_log_text(value: Any) -> str:
|
|
25
|
+
"""Sanitize text before it is sent to application logs."""
|
|
26
|
+
|
|
27
|
+
return mask_telegram_bot_token(value)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _safe_log_arg(value: Any) -> Any:
|
|
31
|
+
if isinstance(value, str):
|
|
32
|
+
return mask_telegram_bot_token(value)
|
|
33
|
+
if isinstance(value, tuple):
|
|
34
|
+
return tuple(_safe_log_arg(item) for item in value)
|
|
35
|
+
if isinstance(value, list):
|
|
36
|
+
return [_safe_log_arg(item) for item in value]
|
|
37
|
+
if isinstance(value, dict):
|
|
38
|
+
return {_safe_log_arg(key): _safe_log_arg(item) for key, item in value.items()}
|
|
39
|
+
|
|
40
|
+
text = str(value)
|
|
41
|
+
masked = mask_telegram_bot_token(text)
|
|
42
|
+
return masked if masked != text else value
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def install_sensitive_log_filter() -> None:
|
|
46
|
+
"""Install a process-wide log-record sanitizer for known secret shapes."""
|
|
47
|
+
|
|
48
|
+
global _LOG_FILTER_INSTALLED
|
|
49
|
+
if _LOG_FILTER_INSTALLED:
|
|
50
|
+
return
|
|
51
|
+
|
|
52
|
+
original_factory = logging.getLogRecordFactory()
|
|
53
|
+
|
|
54
|
+
def factory(*args: Any, **kwargs: Any) -> logging.LogRecord:
|
|
55
|
+
record = original_factory(*args, **kwargs)
|
|
56
|
+
record.msg = _safe_log_arg(record.msg)
|
|
57
|
+
if record.args:
|
|
58
|
+
record.args = _safe_log_arg(record.args)
|
|
59
|
+
return record
|
|
60
|
+
|
|
61
|
+
logging.setLogRecordFactory(factory)
|
|
62
|
+
_LOG_FILTER_INSTALLED = True
|
|
@@ -18,7 +18,7 @@ from pathlib import Path
|
|
|
18
18
|
from typing import Any, Callable, Dict, Iterable, List, Optional
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
WORKSPACE_OS_VERSION = "2.2.
|
|
21
|
+
WORKSPACE_OS_VERSION = "2.2.7"
|
|
22
22
|
|
|
23
23
|
# Workspace types separate single-user Personal workspaces from shared
|
|
24
24
|
# Organization workspaces. Both keep the same local-first JSON store; the type
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ltcai",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.7",
|
|
4
4
|
"description": "Local-first AI workspace for knowledge graphs, AI pipelines, and multi-agent coding workflows.",
|
|
5
5
|
"homepage": "https://github.com/TaeSooPark-PTS/LatticeAI#readme",
|
|
6
6
|
"repository": {
|
|
@@ -20,6 +20,8 @@
|
|
|
20
20
|
"build": "npm run build:python",
|
|
21
21
|
"build:python": "python3 -m build",
|
|
22
22
|
"check:python": "python3 -m py_compile ltcai_cli.py server.py latticeai/server_app.py latticeai/api/chat.py latticeai/api/computer_use.py latticeai/api/deps.py latticeai/api/garden.py latticeai/api/local_files.py latticeai/api/permissions.py latticeai/api/setup.py latticeai/api/static_routes.py latticeai/api/tools.py latticeai/api/plugins.py latticeai/api/workflow_designer.py latticeai/api/agents.py latticeai/api/realtime.py latticeai/api/marketplace.py latticeai/services/app_context.py latticeai/services/model_runtime.py latticeai/services/model_catalog.py latticeai/services/model_recommendation.py latticeai/services/tool_dispatch.py latticeai/services/upload_service.py latticeai/core/tool_registry.py latticeai/core/enterprise.py latticeai/core/enterprise_admin.py latticeai/core/agent_prompts.py latticeai/core/workspace_os.py latticeai/core/plugins.py latticeai/core/marketplace.py latticeai/core/workflow_engine.py latticeai/core/multi_agent.py latticeai/core/realtime.py knowledge_graph.py knowledge_graph_api.py local_knowledge_api.py llm_router.py p_reinforce.py telegram_bot.py tools.py codex_telegram_bot.py",
|
|
23
|
+
"lint": "node --check static/scripts/account.js && node --check static/scripts/admin.js && node --check static/scripts/chat.js && node --check static/scripts/graph.js && node --check static/scripts/platform.js && node --check static/scripts/ux.js && node --check static/scripts/workspace.js && node --check tests/visual/mock_server.cjs",
|
|
24
|
+
"typecheck": "cd vscode-extension && npm run build",
|
|
23
25
|
"test": "python3 -m pytest tests/ -v",
|
|
24
26
|
"test:unit": "python3 -m pytest tests/unit/ -v",
|
|
25
27
|
"test:integration": "python3 -m pytest tests/integration/ -v",
|
|
@@ -80,9 +82,9 @@
|
|
|
80
82
|
"static/workflows.html",
|
|
81
83
|
"static/agents.html",
|
|
82
84
|
"static/activity.html",
|
|
85
|
+
"static/favicon.ico",
|
|
83
86
|
"static/manifest.json",
|
|
84
87
|
"static/sw.js",
|
|
85
|
-
"static/lattice-reference.css",
|
|
86
88
|
"static/workspace.css",
|
|
87
89
|
"static/platform.css",
|
|
88
90
|
"static/scripts/",
|
package/static/account.html
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover, interactive-widget=resizes-content">
|
|
6
6
|
<title>Lattice AI</title>
|
|
7
|
-
<script src="/static/scripts/ux.js?v=2.2.
|
|
7
|
+
<script src="/static/scripts/ux.js?v=2.2.7"></script>
|
|
8
8
|
<link rel="manifest" href="/manifest.json">
|
|
9
9
|
<meta name="theme-color" content="#f3ecff">
|
|
10
10
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
@@ -14,8 +14,13 @@
|
|
|
14
14
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
15
15
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap">
|
|
16
16
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@latest/tabler-icons.min.css">
|
|
17
|
-
<link rel="stylesheet" href="/static/
|
|
18
|
-
<link rel="stylesheet" href="/static/css/
|
|
17
|
+
<link rel="stylesheet" href="/static/css/tokens.css?v=2.2.7">
|
|
18
|
+
<link rel="stylesheet" href="/static/css/reference/base.css?v=2.2.7">
|
|
19
|
+
<link rel="stylesheet" href="/static/css/reference/account.css?v=2.2.7">
|
|
20
|
+
<link rel="stylesheet" href="/static/css/reference/admin.css?v=2.2.7">
|
|
21
|
+
<link rel="stylesheet" href="/static/css/reference/graph.css?v=2.2.7">
|
|
22
|
+
<link rel="stylesheet" href="/static/css/reference/chat.css?v=2.2.7">
|
|
23
|
+
<link rel="stylesheet" href="/static/css/responsive.css?v=2.2.7">
|
|
19
24
|
</head>
|
|
20
25
|
<body class="lattice-ref-auth">
|
|
21
26
|
<div class="orb orb-1"></div>
|
|
@@ -105,6 +110,6 @@
|
|
|
105
110
|
<a href="#" onclick="return false;" id="privacy-link">개인정보 처리방침</a>
|
|
106
111
|
</footer>
|
|
107
112
|
|
|
108
|
-
<script src="/static/scripts/account.js?v=
|
|
113
|
+
<script src="/static/scripts/account.js?v=2.2.7"></script>
|
|
109
114
|
</body>
|
|
110
115
|
</html>
|
package/static/activity.html
CHANGED
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover, interactive-widget=resizes-content" />
|
|
6
6
|
<title>Realtime Activity — Lattice AI</title>
|
|
7
|
-
<script src="/static/scripts/ux.js?v=2.2.
|
|
8
|
-
<link rel="stylesheet" href="/static/css/tokens.css?v=2.2.
|
|
9
|
-
<link rel="stylesheet" href="/static/platform.css?v=2.2.
|
|
10
|
-
<link rel="stylesheet" href="/static/css/responsive.css?v=2.2.
|
|
7
|
+
<script src="/static/scripts/ux.js?v=2.2.7"></script>
|
|
8
|
+
<link rel="stylesheet" href="/static/css/tokens.css?v=2.2.7" />
|
|
9
|
+
<link rel="stylesheet" href="/static/platform.css?v=2.2.7" />
|
|
10
|
+
<link rel="stylesheet" href="/static/css/responsive.css?v=2.2.7" />
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
|
13
13
|
<main>
|
package/static/admin.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta charset="UTF-8">
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover, interactive-widget=resizes-content">
|
|
7
7
|
<title>Lattice AI Admin</title>
|
|
8
|
-
<script src="/static/scripts/ux.js?v=2.2.
|
|
8
|
+
<script src="/static/scripts/ux.js?v=2.2.7"></script>
|
|
9
9
|
<link rel="manifest" href="/manifest.json">
|
|
10
10
|
<meta name="theme-color" content="#f3ecff">
|
|
11
11
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
@@ -15,8 +15,13 @@
|
|
|
15
15
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
16
16
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap">
|
|
17
17
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@latest/tabler-icons.min.css">
|
|
18
|
-
<link rel="stylesheet" href="/static/
|
|
19
|
-
<link rel="stylesheet" href="/static/css/
|
|
18
|
+
<link rel="stylesheet" href="/static/css/tokens.css?v=2.2.7">
|
|
19
|
+
<link rel="stylesheet" href="/static/css/reference/base.css?v=2.2.7">
|
|
20
|
+
<link rel="stylesheet" href="/static/css/reference/account.css?v=2.2.7">
|
|
21
|
+
<link rel="stylesheet" href="/static/css/reference/admin.css?v=2.2.7">
|
|
22
|
+
<link rel="stylesheet" href="/static/css/reference/graph.css?v=2.2.7">
|
|
23
|
+
<link rel="stylesheet" href="/static/css/reference/chat.css?v=2.2.7">
|
|
24
|
+
<link rel="stylesheet" href="/static/css/responsive.css?v=2.2.7">
|
|
20
25
|
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"></script>
|
|
21
26
|
</head>
|
|
22
27
|
|
package/static/agents.html
CHANGED
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover, interactive-widget=resizes-content" />
|
|
6
6
|
<title>Multi-Agent Runtime — Lattice AI</title>
|
|
7
|
-
<script src="/static/scripts/ux.js?v=2.2.
|
|
8
|
-
<link rel="stylesheet" href="/static/css/tokens.css?v=2.2.
|
|
9
|
-
<link rel="stylesheet" href="/static/platform.css?v=2.2.
|
|
10
|
-
<link rel="stylesheet" href="/static/css/responsive.css?v=2.2.
|
|
7
|
+
<script src="/static/scripts/ux.js?v=2.2.7"></script>
|
|
8
|
+
<link rel="stylesheet" href="/static/css/tokens.css?v=2.2.7" />
|
|
9
|
+
<link rel="stylesheet" href="/static/platform.css?v=2.2.7" />
|
|
10
|
+
<link rel="stylesheet" href="/static/css/responsive.css?v=2.2.7" />
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
|
13
13
|
<main>
|
package/static/chat.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta charset="UTF-8">
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover, interactive-widget=resizes-content">
|
|
7
7
|
<title>Lattice AI — All-in-One Multimodal Workspace</title>
|
|
8
|
-
<script src="/static/scripts/ux.js?v=2.2.
|
|
8
|
+
<script src="/static/scripts/ux.js?v=2.2.7"></script>
|
|
9
9
|
|
|
10
10
|
<!-- PWA -->
|
|
11
11
|
<link rel="manifest" href="/manifest.json">
|
|
@@ -24,8 +24,13 @@
|
|
|
24
24
|
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
|
|
25
25
|
|
|
26
26
|
<!-- ── Setup Wizard Styles ──────────────────────────────────────────── -->
|
|
27
|
-
<link rel="stylesheet" href="/static/
|
|
28
|
-
<link rel="stylesheet" href="/static/css/
|
|
27
|
+
<link rel="stylesheet" href="/static/css/tokens.css?v=2.2.7">
|
|
28
|
+
<link rel="stylesheet" href="/static/css/reference/base.css?v=2.2.7">
|
|
29
|
+
<link rel="stylesheet" href="/static/css/reference/account.css?v=2.2.7">
|
|
30
|
+
<link rel="stylesheet" href="/static/css/reference/admin.css?v=2.2.7">
|
|
31
|
+
<link rel="stylesheet" href="/static/css/reference/graph.css?v=2.2.7">
|
|
32
|
+
<link rel="stylesheet" href="/static/css/reference/chat.css?v=2.2.7">
|
|
33
|
+
<link rel="stylesheet" href="/static/css/responsive.css?v=2.2.7">
|
|
29
34
|
</head>
|
|
30
35
|
|
|
31
36
|
<body class="lattice-ref-chat">
|
|
@@ -414,7 +419,7 @@
|
|
|
414
419
|
<!-- Planning -->
|
|
415
420
|
<div class="pipeline-phase-row">
|
|
416
421
|
<div class="pipeline-phase-label">
|
|
417
|
-
<span class="pipeline-phase-badge" style="background:rgba(99,102,241,0.15);color
|
|
422
|
+
<span class="pipeline-phase-badge" style="background:rgba(99,102,241,0.15);color:var(--accent)">📋 Planning</span>
|
|
418
423
|
<span style="color:var(--muted);font-size:11px">계획 수립 · 유저와 함께 검토</span>
|
|
419
424
|
</div>
|
|
420
425
|
<select id="pipeline-planning-select" class="pipeline-select">
|
|
@@ -425,7 +430,7 @@
|
|
|
425
430
|
<!-- Executing -->
|
|
426
431
|
<div class="pipeline-phase-row">
|
|
427
432
|
<div class="pipeline-phase-label">
|
|
428
|
-
<span class="pipeline-phase-badge" style="background:rgba(34,197,94,0.12);color
|
|
433
|
+
<span class="pipeline-phase-badge" style="background:rgba(34,197,94,0.12);color:var(--success)">⚙️ Executing</span>
|
|
429
434
|
<span style="color:var(--muted);font-size:11px">코드 작성 · 파일 생성 · 툴 호출</span>
|
|
430
435
|
</div>
|
|
431
436
|
<select id="pipeline-executing-select" class="pipeline-select">
|
|
@@ -436,7 +441,7 @@
|
|
|
436
441
|
<!-- Reviewing -->
|
|
437
442
|
<div class="pipeline-phase-row">
|
|
438
443
|
<div class="pipeline-phase-label">
|
|
439
|
-
<span class="pipeline-phase-badge" style="background:rgba(251,146,60,0.12);color
|
|
444
|
+
<span class="pipeline-phase-badge" style="background:rgba(251,146,60,0.12);color:var(--warning)">🔍 Reviewing</span>
|
|
440
445
|
<span style="color:var(--muted);font-size:11px">결과 검증 · 최종 답변 생성</span>
|
|
441
446
|
</div>
|
|
442
447
|
<select id="pipeline-reviewing-select" class="pipeline-select">
|
|
@@ -501,7 +506,7 @@
|
|
|
501
506
|
<button class="admin-action" onclick="sendFileToChat()" style="flex:1;background:rgba(111,66,232,0.12);border-color:rgba(111,66,232,0.28)">
|
|
502
507
|
<i class="ti ti-send"></i> AI에게 보내기
|
|
503
508
|
</button>
|
|
504
|
-
<button class="status-btn" onclick="closeFileEditor();
|
|
509
|
+
<button class="status-btn" onclick="closeFileEditor();showModalLayer('local-browser-overlay')" style="flex:1">
|
|
505
510
|
<i class="ti ti-arrow-left"></i> 탐색기로
|
|
506
511
|
</button>
|
|
507
512
|
</div>
|
|
@@ -736,7 +741,7 @@
|
|
|
736
741
|
<div id="cu-screenshot-meta" style="font-size:11px;color:var(--faint);text-align:center"></div>
|
|
737
742
|
</div>
|
|
738
743
|
<!-- Controls panel -->
|
|
739
|
-
<div style="
|
|
744
|
+
<div class="cu-controls-panel" style="padding:14px;display:flex;flex-direction:column;gap:12px;overflow-y:auto">
|
|
740
745
|
<!-- Agent task input -->
|
|
741
746
|
<div>
|
|
742
747
|
<div style="font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin-bottom:8px">AI 자동 작업</div>
|
|
@@ -774,7 +779,7 @@
|
|
|
774
779
|
<div id="cu-log" style="flex:1;background:var(--surface-3);border:1px solid var(--border);border-radius:8px;padding:8px;font-size:11px;font-family:monospace;color:var(--muted);overflow-y:auto;max-height:200px;min-height:80px"></div>
|
|
775
780
|
</div>
|
|
776
781
|
<!-- Permission note -->
|
|
777
|
-
<div style="background:rgba(240,168,50,.07);border:1px solid rgba(240,168,50,.2);border-radius:8px;padding:9px 11px;font-size:11px;color:
|
|
782
|
+
<div style="background:rgba(240,168,50,.07);border:1px solid rgba(240,168,50,.2);border-radius:8px;padding:9px 11px;font-size:11px;color:var(--warning)">
|
|
778
783
|
<i class="ti ti-alert-triangle"></i> macOS 손쉬운 사용 권한 필요<br>
|
|
779
784
|
<span style="opacity:.7">시스템 설정 → 개인 정보 보호 → 손쉬운 사용</span>
|
|
780
785
|
</div>
|
|
@@ -833,7 +838,7 @@
|
|
|
833
838
|
</div>
|
|
834
839
|
|
|
835
840
|
|
|
836
|
-
<script src="/static/scripts/chat.js?v=
|
|
841
|
+
<script src="/static/scripts/chat.js?v=2.2.7"></script>
|
|
837
842
|
</body>
|
|
838
843
|
|
|
839
844
|
</html>
|