ltcai 3.0.1 → 3.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.
Files changed (123) hide show
  1. package/README.md +54 -21
  2. package/docs/CHANGELOG.md +90 -0
  3. package/docs/V3_2_AUDIT.md +82 -0
  4. package/docs/V3_FRONTEND.md +20 -17
  5. package/docs/architecture.md +6 -0
  6. package/latticeai/__init__.py +1 -1
  7. package/latticeai/api/agent_registry.py +103 -0
  8. package/latticeai/api/auth.py +4 -1
  9. package/latticeai/api/hooks.py +113 -0
  10. package/latticeai/api/marketplace.py +13 -0
  11. package/latticeai/api/memory.py +109 -0
  12. package/latticeai/api/search.py +4 -0
  13. package/latticeai/core/agent_registry.py +234 -0
  14. package/latticeai/core/config.py +2 -0
  15. package/latticeai/core/embedding_providers.py +123 -0
  16. package/latticeai/core/hooks.py +284 -0
  17. package/latticeai/core/marketplace.py +87 -2
  18. package/latticeai/core/multi_agent.py +1 -1
  19. package/latticeai/core/workspace_os.py +1 -1
  20. package/latticeai/server_app.py +63 -6
  21. package/latticeai/services/memory_service.py +324 -0
  22. package/package.json +9 -4
  23. package/scripts/build_v3_assets.mjs +164 -0
  24. package/scripts/capture/README.md +28 -0
  25. package/scripts/capture/capture_enterprise.js +8 -0
  26. package/scripts/capture/capture_graph.js +8 -0
  27. package/scripts/capture/capture_onboarding.js +8 -0
  28. package/scripts/capture/capture_page.js +43 -0
  29. package/scripts/capture/capture_release_media.js +125 -0
  30. package/scripts/capture/capture_skills.js +8 -0
  31. package/scripts/capture/capture_workspace.js +8 -0
  32. package/scripts/generate_diagrams.py +513 -0
  33. package/scripts/lint_v3.mjs +33 -0
  34. package/scripts/release-0.3.1.sh +105 -0
  35. package/scripts/take_screenshots.js +69 -0
  36. package/scripts/validate_release_artifacts.py +167 -0
  37. package/static/account.html +9 -9
  38. package/static/activity.html +4 -4
  39. package/static/admin.html +8 -8
  40. package/static/agents.html +4 -4
  41. package/static/chat.html +9 -9
  42. package/static/css/tokens.5a595671.css +260 -0
  43. package/static/css/tokens.css +1 -1
  44. package/static/graph.html +9 -9
  45. package/static/plugins.html +4 -4
  46. package/static/sw.js +3 -1
  47. package/static/v3/asset-manifest.json +55 -0
  48. package/static/v3/css/lattice.base.e4cdd05d.css +128 -0
  49. package/static/v3/css/lattice.components.011e988b.css +447 -0
  50. package/static/v3/css/lattice.components.css +2 -2
  51. package/static/v3/css/lattice.shell.4920f42d.css +407 -0
  52. package/static/v3/css/lattice.tokens.c597ff81.css +132 -0
  53. package/static/v3/css/lattice.views.3ee19d4e.css +277 -0
  54. package/static/v3/index.html +38 -9
  55. package/static/v3/js/app.a5adc0f3.js +26 -0
  56. package/static/v3/js/core/api.603b978f.js +408 -0
  57. package/static/v3/js/core/api.js +132 -51
  58. package/static/v3/js/core/components.4c83e0a9.js +222 -0
  59. package/static/v3/js/core/components.js +9 -2
  60. package/static/v3/js/core/dom.a2773eb0.js +148 -0
  61. package/static/v3/js/core/router.584570f2.js +37 -0
  62. package/static/v3/js/core/routes.07ad6696.js +89 -0
  63. package/static/v3/js/core/routes.js +17 -1
  64. package/static/v3/js/core/shell.ea0b9ae5.js +363 -0
  65. package/static/v3/js/core/store.34ebd5e6.js +113 -0
  66. package/static/v3/js/views/admin-audit.660a1fb1.js +185 -0
  67. package/static/v3/js/views/admin-audit.js +1 -1
  68. package/static/v3/js/views/admin-permissions.a7ae5f09.js +177 -0
  69. package/static/v3/js/views/admin-permissions.js +4 -5
  70. package/static/v3/js/views/admin-policies.3658fd86.js +102 -0
  71. package/static/v3/js/views/admin-policies.js +4 -5
  72. package/static/v3/js/views/admin-private-vpc.7d342d36.js +135 -0
  73. package/static/v3/js/views/admin-private-vpc.js +2 -5
  74. package/static/v3/js/views/admin-security.07c66b72.js +180 -0
  75. package/static/v3/js/views/admin-security.js +4 -5
  76. package/static/v3/js/views/admin-users.03bac88c.js +168 -0
  77. package/static/v3/js/views/admin-users.js +6 -6
  78. package/static/v3/js/views/agents.c373d48c.js +293 -0
  79. package/static/v3/js/views/agents.js +101 -2
  80. package/static/v3/js/views/chat.718144ce.js +449 -0
  81. package/static/v3/js/views/chat.js +2 -3
  82. package/static/v3/js/views/files.4935197e.js +186 -0
  83. package/static/v3/js/views/files.js +27 -21
  84. package/static/v3/js/views/home.cdde3b32.js +119 -0
  85. package/static/v3/js/views/hooks.f3edebca.js +99 -0
  86. package/static/v3/js/views/hooks.js +99 -0
  87. package/static/v3/js/views/hybrid-search.b22b97e0.js +195 -0
  88. package/static/v3/js/views/hybrid-search.js +1 -1
  89. package/static/v3/js/views/knowledge-graph.a14ea7e7.js +237 -0
  90. package/static/v3/js/views/knowledge-graph.js +2 -3
  91. package/static/v3/js/views/marketplace.ab0583d4.js +141 -0
  92. package/static/v3/js/views/marketplace.js +141 -0
  93. package/static/v3/js/views/mcp.99b5c6a7.js +114 -0
  94. package/static/v3/js/views/mcp.js +114 -0
  95. package/static/v3/js/views/memory.d2ed7a7c.js +146 -0
  96. package/static/v3/js/views/memory.js +146 -0
  97. package/static/v3/js/views/models.a1ffa147.js +256 -0
  98. package/static/v3/js/views/models.js +17 -8
  99. package/static/v3/js/views/my-computer.1b2ff621.js +237 -0
  100. package/static/v3/js/views/my-computer.js +5 -5
  101. package/static/v3/js/views/pipeline.c522f1ce.js +157 -0
  102. package/static/v3/js/views/pipeline.js +3 -7
  103. package/static/v3/js/views/planning.9ac3e313.js +153 -0
  104. package/static/v3/js/views/planning.js +153 -0
  105. package/static/v3/js/views/settings.4f777210.js +250 -0
  106. package/static/v3/js/views/settings.js +6 -14
  107. package/static/v3/js/views/skills.c6c2f965.js +109 -0
  108. package/static/v3/js/views/skills.js +109 -0
  109. package/static/v3/js/views/tools.e4f11276.js +108 -0
  110. package/static/v3/js/views/tools.js +108 -0
  111. package/static/v3/js/views/workflows.26c57290.js +128 -0
  112. package/static/v3/js/views/workflows.js +128 -0
  113. package/static/workflows.html +4 -4
  114. package/static/workspace.html +5 -5
  115. package/docs/images/tmp_frames/frame_00.png +0 -0
  116. package/docs/images/tmp_frames/frame_01.png +0 -0
  117. package/docs/images/tmp_frames/frame_02.png +0 -0
  118. package/docs/images/tmp_frames/frame_03.png +0 -0
  119. package/docs/images/tmp_frames/hero_00.png +0 -0
  120. package/docs/images/tmp_frames/hero_01.png +0 -0
  121. package/docs/images/tmp_frames/hero_02.png +0 -0
  122. package/docs/images/tmp_frames/hero_03.png +0 -0
  123. package/static/v3/js/core/fixtures.js +0 -171
@@ -0,0 +1,260 @@
1
+ /* ============================================================================
2
+ * Lattice AI — Design Tokens (Single Source of Truth) v3.1.0
3
+ *
4
+ * 이 파일이 색·면·테두리·그림자·포커스의 단일 출처다.
5
+ * :root → 라이트 테마 값
6
+ * :root[data-lt-theme="dark"] → 동일 토큰명의 다크 값
7
+ * @media (prefers-color-scheme: dark) → 사용자가 명시 선택 안 했을 때 OS 추종
8
+ *
9
+ * 컴포넌트 CSS 는 항상 var(--token) 만 사용한다. 따라서 이 파일의 값만 바꾸면
10
+ * 전체 UI 가 자연스럽게 전환된다. (컴포넌트별 다크 오버라이드 / !important 금지)
11
+ *
12
+ * 토큰 카테고리(요청 범위): background · surface · card · sidebar · modal · table ·
13
+ * graph · text · muted-text · border · accent · success · warning · danger ·
14
+ * input · overlay · shadow · focus-ring
15
+ * ========================================================================== */
16
+
17
+ :root {
18
+ color-scheme: light;
19
+
20
+ /* ── Brand raw scale (불변, 테마 무관 기준점) ───────────────────────────── */
21
+ --lt-color-primary-100: #dbeafe;
22
+ --lt-color-primary-200: #bfdbfe;
23
+ --lt-color-primary-400: #60a5fa;
24
+ --lt-color-primary-600: #2563eb;
25
+ --lt-color-primary-800: #1e3a8a;
26
+ --lt-color-ink-900: #111827;
27
+ --lt-color-accent-cyan: #0891b2;
28
+ --lt-color-accent-green: #0f9f8f;
29
+ --lt-color-accent-amber: #b7791f;
30
+ --lt-color-accent-pink: #b83280;
31
+
32
+ /* ╔══════════════════════════════════════════════════════════════════════╗
33
+ ║ SEMANTIC TOKENS — LIGHT (neutral workspace palette) ║
34
+ ╚══════════════════════════════════════════════════════════════════════╝ */
35
+
36
+ /* background / surfaces */
37
+ --bg: #f6f8f7;
38
+ --bg-soft: #eef3f2;
39
+ --surface: #ffffff;
40
+ --surface-2: #f0f5f4;
41
+ --surface-3: #e4ecea;
42
+ --surface-muted: #edf3f2;
43
+ --surface-elevated: rgba(255, 255, 255, 0.94);
44
+ --card: rgba(255, 255, 255, 0.92);
45
+ --sidebar: rgba(255, 255, 255, 0.94);
46
+ --modal: rgba(255, 255, 255, 0.98);
47
+ --table: rgba(255, 255, 255, 0.78);
48
+ --input: rgba(255, 255, 255, 0.86);
49
+ --overlay: rgba(15, 23, 42, 0.44);
50
+ --overlay-scrim: var(--overlay);
51
+ --app-bg:
52
+ linear-gradient(180deg, #f8faf9 0%, #eef4f2 54%, #f7faf9 100%);
53
+
54
+ /* text */
55
+ --text: #24223d;
56
+ --muted: #475569; /* muted-text */
57
+ --faint: #70818f;
58
+ --text-muted: var(--muted);
59
+
60
+ /* border / line */
61
+ --border: rgba(15, 23, 42, 0.12);
62
+ --border-strong: rgba(15, 23, 42, 0.22);
63
+ --line: rgba(15, 23, 42, 0.10);
64
+ --line-strong: rgba(15, 23, 42, 0.18);
65
+
66
+ /* accent */
67
+ --accent: #2563eb;
68
+ --accent-2: #0f9f8f;
69
+ --accent-3: #b7791f;
70
+ --accent-pink: #b83280;
71
+ --accent-soft: rgba(37, 99, 235, 0.10);
72
+ --accent-deep: #1d4ed8;
73
+
74
+ /* status */
75
+ --success: #0f8f6d;
76
+ --warning: #a16207;
77
+ --danger: #c2410c;
78
+
79
+ /* graph */
80
+ --graph-bg: #f8faf9;
81
+ --graph-grid: rgba(12, 92, 115, 0.08);
82
+ --graph-pill: rgba(255, 255, 255, 0.92);
83
+
84
+ /* shadow */
85
+ --shadow: 0 18px 50px rgba(15, 23, 42, 0.10);
86
+ --shadow-sm: 0 8px 22px rgba(15, 23, 42, 0.08);
87
+
88
+ /* focus ring */
89
+ --focus-ring: rgba(37, 99, 235, 0.55);
90
+
91
+ /* ── 구조 토큰(색 아님) ─────────────────────────────────────────────── */
92
+ --radius: 14px;
93
+ --radius-sm: 8px;
94
+ --content-width: 900px;
95
+
96
+ /* ── 레거시/별칭 — 코드가 참조하는 모든 변수를 의미 토큰으로 매핑 ──────── */
97
+ --ink: var(--text);
98
+ --blue: var(--accent);
99
+ --green: var(--success);
100
+ --amber: var(--warning);
101
+ --red: var(--danger);
102
+ --pink: var(--accent-pink);
103
+ --ok: var(--success);
104
+ --warn: var(--warning);
105
+ --err: var(--danger);
106
+ --panel: var(--surface);
107
+ --panel-2: var(--surface-2);
108
+ --panel-3: var(--surface-3);
109
+ --panel-strong: var(--surface);
110
+ --glow-green: 0 0 34px rgba(15, 159, 143, 0.14);
111
+ --glow-blue: 0 0 34px rgba(37, 99, 235, 0.14);
112
+ /* PPT reference 스킨 별칭 */
113
+ --ref-purple: var(--accent);
114
+ --ref-purple-2: var(--accent-2);
115
+ --ref-indigo: #2563eb;
116
+ --ref-ink: var(--text);
117
+ --ref-muted: var(--muted);
118
+ --ref-faint: var(--faint);
119
+ --ref-line: var(--border);
120
+ --ref-soft: var(--surface);
121
+ --ref-card: var(--card);
122
+ --ref-shadow: var(--shadow);
123
+
124
+ /* ── --lt-* 별칭 (workspace.css / platform.css 가 참조) — LIGHT ──────────
125
+ 순환참조를 피하려 구체값으로 둔다(소비자가 --bg 등을 --lt-* 로 재정의해도 안전). */
126
+ --lt-bg: #f6f8f7;
127
+ --lt-surface: #ffffff;
128
+ --lt-surface-2: #f0f5f4;
129
+ --lt-input: rgba(255, 255, 255, 0.86);
130
+ --lt-ink: #24223d;
131
+ --lt-ink-soft: #475569;
132
+ --lt-muted: #70818f;
133
+ --lt-line: rgba(15, 23, 42, 0.12);
134
+ --lt-accent: #2563eb;
135
+ --lt-accent-2: #0f9f8f;
136
+ --lt-shadow-md: 0 18px 50px rgba(15, 23, 42, 0.10);
137
+
138
+ /* ── 모션 / 타이포 ─────────────────────────────────────────────────── */
139
+ --lt-motion-ease: cubic-bezier(0.22, 1, 0.36, 1);
140
+ }
141
+
142
+ /* ╔════════════════════════════════════════════════════════════════════════╗
143
+ ║ SEMANTIC TOKENS — DARK (값만 교체, 같은 토큰명) ║
144
+ ╚════════════════════════════════════════════════════════════════════════╝ */
145
+ :root[data-lt-theme="dark"] {
146
+ color-scheme: dark;
147
+
148
+ --bg: #101418;
149
+ --bg-soft: #151b20;
150
+ --surface: #1b2328;
151
+ --surface-2: #202b31;
152
+ --surface-3: #29363d;
153
+ --surface-muted: #151d22;
154
+ --surface-elevated: #253139;
155
+ --card: rgba(255, 255, 255, 0.055);
156
+ --sidebar: #11191d;
157
+ --modal: rgba(27, 35, 40, 0.98);
158
+ --table: rgba(255, 255, 255, 0.045);
159
+ --input: rgba(255, 255, 255, 0.065);
160
+ --overlay: rgba(0, 0, 0, 0.64);
161
+ --overlay-scrim: var(--overlay);
162
+ --app-bg:
163
+ linear-gradient(180deg, #101418 0%, #151d22 54%, #101418 100%);
164
+
165
+ --text: #edf3f2;
166
+ --muted: #b8c5c2;
167
+ --faint: #849894;
168
+ --text-muted: var(--muted);
169
+
170
+ --border: rgba(196, 213, 208, 0.18);
171
+ --border-strong: rgba(196, 213, 208, 0.30);
172
+ --line: rgba(196, 213, 208, 0.14);
173
+ --line-strong: rgba(196, 213, 208, 0.24);
174
+
175
+ --accent: #0284c7;
176
+ --accent-2: #0f766e;
177
+ --accent-3: #facc15;
178
+ --accent-pink: #f0abfc;
179
+ --accent-soft: rgba(2, 132, 199, 0.20);
180
+ --accent-deep: #0369a1;
181
+
182
+ --success: #34d399;
183
+ --warning: #fbbf24;
184
+ --danger: #fb923c;
185
+
186
+ --graph-bg: #0f1518;
187
+ --graph-grid: rgba(94, 234, 212, 0.08);
188
+ --graph-pill: rgba(27, 35, 40, 0.92);
189
+
190
+ --shadow: 0 18px 54px rgba(0, 0, 0, 0.50);
191
+ --shadow-sm: 0 8px 24px rgba(0, 0, 0, 0.42);
192
+
193
+ --focus-ring: rgba(125, 211, 252, 0.70);
194
+
195
+ --lt-bg: #101418;
196
+ --lt-surface: #1b2328;
197
+ --lt-surface-2: #202b31;
198
+ --lt-input: rgba(255, 255, 255, 0.065);
199
+ --lt-ink: #edf3f2;
200
+ --lt-ink-soft: #b8c5c2;
201
+ --lt-muted: #849894;
202
+ --lt-line: rgba(196, 213, 208, 0.18);
203
+ --lt-accent: #0284c7;
204
+ --lt-accent-2: #0f766e;
205
+ --lt-shadow-md: 0 18px 54px rgba(0, 0, 0, 0.50);
206
+
207
+ --ref-indigo: #93c5fd;
208
+ --glow-green: 0 0 34px rgba(94, 234, 212, 0.18);
209
+ --glow-blue: 0 0 34px rgba(125, 211, 252, 0.18);
210
+ }
211
+
212
+ /* OS 다크 추종 — 사용자가 명시적으로 라이트를 고르지 않은 경우에만 */
213
+ @media (prefers-color-scheme: dark) {
214
+ :root:not([data-lt-theme="light"]):not([data-lt-theme="dark"]) {
215
+ color-scheme: dark;
216
+ --bg: #101418; --bg-soft: #151b20;
217
+ --surface: #1b2328; --surface-2: #202b31; --surface-3: #29363d;
218
+ --surface-muted: #151d22; --surface-elevated: #253139;
219
+ --card: rgba(255,255,255,0.055); --sidebar: #11191d;
220
+ --modal: rgba(27,35,40,0.98); --table: rgba(255,255,255,0.045);
221
+ --input: rgba(255,255,255,0.065); --overlay: rgba(0,0,0,0.64); --overlay-scrim: var(--overlay);
222
+ --app-bg:
223
+ linear-gradient(180deg, #101418 0%, #151d22 54%, #101418 100%);
224
+ --text: #edf3f2; --muted: #b8c5c2; --faint: #849894; --text-muted: var(--muted);
225
+ --border: rgba(196,213,208,0.18); --border-strong: rgba(196,213,208,0.30);
226
+ --line: rgba(196,213,208,0.14); --line-strong: rgba(196,213,208,0.24);
227
+ --accent: #0284c7; --accent-2: #0f766e; --accent-3: #facc15;
228
+ --accent-pink: #f0abfc; --accent-soft: rgba(2,132,199,0.20); --accent-deep: #0369a1;
229
+ --success: #34d399; --warning: #fbbf24; --danger: #fb923c;
230
+ --graph-bg: #0f1518; --graph-grid: rgba(94,234,212,0.08); --graph-pill: rgba(27,35,40,0.92);
231
+ --shadow: 0 18px 54px rgba(0,0,0,0.50); --shadow-sm: 0 8px 24px rgba(0,0,0,0.42);
232
+ --focus-ring: rgba(125,211,252,0.70);
233
+ --lt-bg: #101418; --lt-surface: #1b2328; --lt-surface-2: #202b31; --lt-input: rgba(255,255,255,0.065);
234
+ --lt-ink: #edf3f2; --lt-ink-soft: #b8c5c2; --lt-muted: #849894;
235
+ --lt-line: rgba(196,213,208,0.18); --lt-accent: #0284c7; --lt-accent-2: #0f766e;
236
+ --lt-shadow-md: 0 18px 54px rgba(0,0,0,0.50);
237
+ }
238
+ }
239
+
240
+ /* ── 전역 폴리시 ───────────────────────────────────────────────────────── */
241
+ ::selection { background: var(--accent-soft); color: var(--text); }
242
+
243
+ :focus-visible {
244
+ outline: 2px solid var(--focus-ring);
245
+ outline-offset: 2px;
246
+ }
247
+
248
+ ::-webkit-scrollbar { width: 6px; height: 6px; }
249
+ ::-webkit-scrollbar-track { background: transparent; }
250
+ ::-webkit-scrollbar-thumb { background: var(--accent-soft); border-radius: 99px; }
251
+ ::-webkit-scrollbar-thumb:hover { background: var(--border-strong); }
252
+
253
+ @media (prefers-reduced-motion: reduce) {
254
+ *, *::before, *::after {
255
+ animation-duration: 0.001ms;
256
+ animation-iteration-count: 1;
257
+ transition-duration: 0.001ms;
258
+ scroll-behavior: auto;
259
+ }
260
+ }
@@ -1,5 +1,5 @@
1
1
  /* ============================================================================
2
- * Lattice AI — Design Tokens (Single Source of Truth) v3.0.0
2
+ * Lattice AI — Design Tokens (Single Source of Truth) v3.1.0
3
3
  *
4
4
  * 이 파일이 색·면·테두리·그림자·포커스의 단일 출처다.
5
5
  * :root → 라이트 테마 값
package/static/graph.html CHANGED
@@ -4,18 +4,18 @@
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=3.0.0"></script>
7
+ <script src="/static/scripts/ux.js"></script>
8
8
  <link rel="preconnect" href="https://fonts.googleapis.com">
9
9
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10
10
  <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap">
11
11
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@latest/tabler-icons.min.css">
12
- <link rel="stylesheet" href="/static/css/tokens.css?v=3.0.0">
13
- <link rel="stylesheet" href="/static/css/reference/base.css?v=3.0.0">
14
- <link rel="stylesheet" href="/static/css/reference/account.css?v=3.0.0">
15
- <link rel="stylesheet" href="/static/css/reference/admin.css?v=3.0.0">
16
- <link rel="stylesheet" href="/static/css/reference/graph.css?v=3.0.0">
17
- <link rel="stylesheet" href="/static/css/reference/chat.css?v=3.0.0">
18
- <link rel="stylesheet" href="/static/css/responsive.css?v=3.0.0">
12
+ <link rel="stylesheet" href="/static/css/tokens.css">
13
+ <link rel="stylesheet" href="/static/css/reference/base.css">
14
+ <link rel="stylesheet" href="/static/css/reference/account.css">
15
+ <link rel="stylesheet" href="/static/css/reference/admin.css">
16
+ <link rel="stylesheet" href="/static/css/reference/graph.css">
17
+ <link rel="stylesheet" href="/static/css/reference/chat.css">
18
+ <link rel="stylesheet" href="/static/css/responsive.css">
19
19
  </head>
20
20
  <body class="lattice-ref-graph">
21
21
  <div class="sidebar-overlay" onclick="closeGraphNav&&closeGraphNav()"></div>
@@ -119,6 +119,6 @@
119
119
 
120
120
  <div id="tooltip"></div>
121
121
 
122
- <script src="/static/scripts/graph.js?v=3.0.0"></script>
122
+ <script src="/static/scripts/graph.js"></script>
123
123
  </body>
124
124
  </html>
@@ -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>Plugin SDK — Lattice AI</title>
7
- <script src="/static/scripts/ux.js?v=3.0.0"></script>
8
- <link rel="stylesheet" href="/static/css/tokens.css?v=3.0.0" />
9
- <link rel="stylesheet" href="/static/platform.css?v=3.0.0" />
10
- <link rel="stylesheet" href="/static/css/responsive.css?v=3.0.0" />
7
+ <script src="/static/scripts/ux.js"></script>
8
+ <link rel="stylesheet" href="/static/css/tokens.css" />
9
+ <link rel="stylesheet" href="/static/platform.css" />
10
+ <link rel="stylesheet" href="/static/css/responsive.css" />
11
11
  </head>
12
12
  <body>
13
13
  <main>
package/static/sw.js CHANGED
@@ -1,9 +1,11 @@
1
1
  // Lattice AI Service Worker — enables PWA install on Android/iOS
2
2
  // Strategy: network-first for API, cache-first for static assets.
3
- const CACHE = "ltcai-v226";
3
+ const CACHE = "ltcai-v310";
4
4
  const STATIC = [
5
5
  "/",
6
+ "/app",
6
7
  "/workspace",
8
+ "/static/v3/asset-manifest.json",
7
9
  "/static/css/tokens.css",
8
10
  "/static/css/reference/base.css",
9
11
  "/static/css/reference/chat.css",
@@ -0,0 +1,55 @@
1
+ {
2
+ "version": "3.2.0",
3
+ "generated_at": "deterministic",
4
+ "entrypoints": {
5
+ "app": "/static/v3/js/app.a5adc0f3.js",
6
+ "styles": [
7
+ "/static/css/tokens.5a595671.css",
8
+ "/static/v3/css/lattice.tokens.c597ff81.css",
9
+ "/static/v3/css/lattice.base.e4cdd05d.css",
10
+ "/static/v3/css/lattice.components.011e988b.css",
11
+ "/static/v3/css/lattice.shell.4920f42d.css",
12
+ "/static/v3/css/lattice.views.3ee19d4e.css"
13
+ ]
14
+ },
15
+ "assets": {
16
+ "static/css/tokens.css": "/static/css/tokens.5a595671.css",
17
+ "static/v3/css/lattice.tokens.css": "/static/v3/css/lattice.tokens.c597ff81.css",
18
+ "static/v3/css/lattice.base.css": "/static/v3/css/lattice.base.e4cdd05d.css",
19
+ "static/v3/css/lattice.components.css": "/static/v3/css/lattice.components.011e988b.css",
20
+ "static/v3/css/lattice.shell.css": "/static/v3/css/lattice.shell.4920f42d.css",
21
+ "static/v3/css/lattice.views.css": "/static/v3/css/lattice.views.3ee19d4e.css",
22
+ "static/v3/js/app.js": "/static/v3/js/app.a5adc0f3.js",
23
+ "static/v3/js/core/api.js": "/static/v3/js/core/api.603b978f.js",
24
+ "static/v3/js/core/components.js": "/static/v3/js/core/components.4c83e0a9.js",
25
+ "static/v3/js/core/dom.js": "/static/v3/js/core/dom.a2773eb0.js",
26
+ "static/v3/js/core/router.js": "/static/v3/js/core/router.584570f2.js",
27
+ "static/v3/js/core/routes.js": "/static/v3/js/core/routes.07ad6696.js",
28
+ "static/v3/js/core/shell.js": "/static/v3/js/core/shell.ea0b9ae5.js",
29
+ "static/v3/js/core/store.js": "/static/v3/js/core/store.34ebd5e6.js",
30
+ "static/v3/js/views/admin-audit.js": "/static/v3/js/views/admin-audit.660a1fb1.js",
31
+ "static/v3/js/views/admin-permissions.js": "/static/v3/js/views/admin-permissions.a7ae5f09.js",
32
+ "static/v3/js/views/admin-policies.js": "/static/v3/js/views/admin-policies.3658fd86.js",
33
+ "static/v3/js/views/admin-private-vpc.js": "/static/v3/js/views/admin-private-vpc.7d342d36.js",
34
+ "static/v3/js/views/admin-security.js": "/static/v3/js/views/admin-security.07c66b72.js",
35
+ "static/v3/js/views/admin-users.js": "/static/v3/js/views/admin-users.03bac88c.js",
36
+ "static/v3/js/views/agents.js": "/static/v3/js/views/agents.c373d48c.js",
37
+ "static/v3/js/views/chat.js": "/static/v3/js/views/chat.718144ce.js",
38
+ "static/v3/js/views/files.js": "/static/v3/js/views/files.4935197e.js",
39
+ "static/v3/js/views/home.js": "/static/v3/js/views/home.cdde3b32.js",
40
+ "static/v3/js/views/hooks.js": "/static/v3/js/views/hooks.f3edebca.js",
41
+ "static/v3/js/views/hybrid-search.js": "/static/v3/js/views/hybrid-search.b22b97e0.js",
42
+ "static/v3/js/views/knowledge-graph.js": "/static/v3/js/views/knowledge-graph.a14ea7e7.js",
43
+ "static/v3/js/views/marketplace.js": "/static/v3/js/views/marketplace.ab0583d4.js",
44
+ "static/v3/js/views/mcp.js": "/static/v3/js/views/mcp.99b5c6a7.js",
45
+ "static/v3/js/views/memory.js": "/static/v3/js/views/memory.d2ed7a7c.js",
46
+ "static/v3/js/views/models.js": "/static/v3/js/views/models.a1ffa147.js",
47
+ "static/v3/js/views/my-computer.js": "/static/v3/js/views/my-computer.1b2ff621.js",
48
+ "static/v3/js/views/pipeline.js": "/static/v3/js/views/pipeline.c522f1ce.js",
49
+ "static/v3/js/views/planning.js": "/static/v3/js/views/planning.9ac3e313.js",
50
+ "static/v3/js/views/settings.js": "/static/v3/js/views/settings.4f777210.js",
51
+ "static/v3/js/views/skills.js": "/static/v3/js/views/skills.c6c2f965.js",
52
+ "static/v3/js/views/tools.js": "/static/v3/js/views/tools.e4f11276.js",
53
+ "static/v3/js/views/workflows.js": "/static/v3/js/views/workflows.26c57290.js"
54
+ }
55
+ }
@@ -0,0 +1,128 @@
1
+ /* ============================================================================
2
+ * Lattice AI v3 — Base layer (reset + element defaults + lattice backdrop)
3
+ * Token-native: no themed hex values, everything via var(--*).
4
+ * ========================================================================== */
5
+
6
+ *, *::before, *::after { box-sizing: border-box; }
7
+
8
+ html, body { height: 100%; }
9
+
10
+ body {
11
+ margin: 0;
12
+ font-family: var(--lt3-font-sans);
13
+ font-size: var(--lt3-text-md);
14
+ line-height: var(--lt3-leading-normal);
15
+ color: var(--text);
16
+ background: var(--bg);
17
+ -webkit-font-smoothing: antialiased;
18
+ text-rendering: optimizeLegibility;
19
+ overflow: hidden; /* shell owns scroll regions */
20
+ }
21
+
22
+ /* The signature lattice backdrop — a faint structural mesh of nodes+edges.
23
+ Sits behind the whole app; reinforces the "lattice" identity without noise. */
24
+ .lt3-app::before {
25
+ content: "";
26
+ position: fixed;
27
+ inset: 0;
28
+ z-index: 0;
29
+ pointer-events: none;
30
+ background:
31
+ radial-gradient(circle at center, var(--lt3-mesh-node) 0.9px, transparent 1.1px),
32
+ linear-gradient(var(--lt3-mesh-line) 1px, transparent 1px),
33
+ linear-gradient(90deg, var(--lt3-mesh-line) 1px, transparent 1px),
34
+ var(--app-bg);
35
+ background-size:
36
+ var(--lt3-mesh-size) var(--lt3-mesh-size),
37
+ var(--lt3-mesh-size) var(--lt3-mesh-size),
38
+ var(--lt3-mesh-size) var(--lt3-mesh-size),
39
+ cover;
40
+ background-position: center;
41
+ mask-image: radial-gradient(ellipse 120% 90% at 50% -10%, #000 55%, transparent 100%);
42
+ opacity: 0.9;
43
+ }
44
+
45
+ h1, h2, h3, h4, p, figure { margin: 0; }
46
+
47
+ a { color: inherit; text-decoration: none; }
48
+
49
+ button {
50
+ font: inherit;
51
+ color: inherit;
52
+ cursor: pointer;
53
+ border: none;
54
+ background: none;
55
+ }
56
+
57
+ input, select, textarea { font: inherit; color: inherit; }
58
+
59
+ textarea { resize: vertical; }
60
+
61
+ img, svg { display: block; max-width: 100%; }
62
+
63
+ code, pre, kbd, samp { font-family: var(--lt3-font-mono); }
64
+
65
+ :root[data-lt-icons="fallback"] .ti {
66
+ display: inline-grid;
67
+ place-items: center;
68
+ min-width: 1em;
69
+ min-height: 1em;
70
+ font-family: var(--lt3-font-mono);
71
+ font-size: 0.72em;
72
+ font-style: normal;
73
+ font-weight: 800;
74
+ line-height: 1;
75
+ text-transform: uppercase;
76
+ }
77
+
78
+ :root[data-lt-icons="fallback"] .ti::before {
79
+ content: attr(data-fallback);
80
+ }
81
+
82
+ :focus-visible {
83
+ outline: 2px solid var(--focus-ring);
84
+ outline-offset: 2px;
85
+ border-radius: var(--lt3-radius-xs);
86
+ }
87
+
88
+ ::-webkit-scrollbar { width: 8px; height: 8px; }
89
+ ::-webkit-scrollbar-track { background: transparent; }
90
+ ::-webkit-scrollbar-thumb {
91
+ background: color-mix(in srgb, var(--border-strong) 60%, transparent);
92
+ border-radius: 99px;
93
+ border: 2px solid transparent;
94
+ background-clip: padding-box;
95
+ }
96
+ ::-webkit-scrollbar-thumb:hover { background: var(--border-strong); background-clip: padding-box; }
97
+
98
+ /* Accessible visually-hidden utility */
99
+ .lt3-sr {
100
+ position: absolute !important;
101
+ width: 1px; height: 1px;
102
+ padding: 0; margin: -1px;
103
+ overflow: hidden; clip: rect(0,0,0,0);
104
+ white-space: nowrap; border: 0;
105
+ }
106
+
107
+ .lt3-skip {
108
+ position: fixed;
109
+ top: var(--lt3-space-3);
110
+ left: var(--lt3-space-3);
111
+ z-index: var(--lt3-z-toast);
112
+ padding: var(--lt3-space-2) var(--lt3-space-4);
113
+ background: var(--accent);
114
+ color: #fff;
115
+ border-radius: var(--lt3-radius-sm);
116
+ transform: translateY(-200%);
117
+ transition: transform var(--lt3-dur-2) var(--lt3-ease);
118
+ }
119
+ .lt3-skip:focus { transform: translateY(0); }
120
+
121
+ @media (prefers-reduced-motion: reduce) {
122
+ *, *::before, *::after {
123
+ animation-duration: 0.001ms !important;
124
+ animation-iteration-count: 1 !important;
125
+ transition-duration: 0.001ms !important;
126
+ scroll-behavior: auto !important;
127
+ }
128
+ }