@archznn/crewloop-skills 0.6.0 → 0.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 (245) hide show
  1. package/README.md +4 -16
  2. package/package.json +1 -2
  3. package/packages/cli/dist/agents.js +1 -1
  4. package/packages/cli/dist/agents.js.map +1 -1
  5. package/packages/cli/dist/cli.d.ts.map +1 -1
  6. package/packages/cli/dist/cli.js +2 -30
  7. package/packages/cli/dist/cli.js.map +1 -1
  8. package/packages/cli/dist/hooks.d.ts +6 -4
  9. package/packages/cli/dist/hooks.d.ts.map +1 -1
  10. package/packages/cli/dist/hooks.js +250 -98
  11. package/packages/cli/dist/hooks.js.map +1 -1
  12. package/packages/cli/dist/tests/hooks.test.js +245 -33
  13. package/packages/cli/dist/tests/hooks.test.js.map +1 -1
  14. package/references/conventions.md +1 -10
  15. package/references/workflow.md +1 -1
  16. package/servers/dashboard/README.md +55 -1
  17. package/servers/dashboard/dist/adapters/agy.d.ts +19 -0
  18. package/servers/dashboard/dist/adapters/agy.d.ts.map +1 -0
  19. package/servers/dashboard/dist/adapters/agy.js +108 -0
  20. package/servers/dashboard/dist/adapters/agy.js.map +1 -0
  21. package/servers/dashboard/dist/adapters/codex.d.ts.map +1 -1
  22. package/servers/dashboard/dist/adapters/codex.js +2 -0
  23. package/servers/dashboard/dist/adapters/codex.js.map +1 -1
  24. package/servers/dashboard/dist/adapters/kimi.d.ts +1 -1
  25. package/servers/dashboard/dist/adapters/kimi.d.ts.map +1 -1
  26. package/servers/dashboard/dist/adapters/kimi.js +9 -0
  27. package/servers/dashboard/dist/adapters/kimi.js.map +1 -1
  28. package/servers/dashboard/dist/adapters/shim.d.ts +1 -1
  29. package/servers/dashboard/dist/adapters/shim.d.ts.map +1 -1
  30. package/servers/dashboard/dist/adapters/shim.js +32 -11
  31. package/servers/dashboard/dist/adapters/shim.js.map +1 -1
  32. package/servers/dashboard/dist/adapters/shim.test.js +46 -4
  33. package/servers/dashboard/dist/adapters/shim.test.js.map +1 -1
  34. package/servers/dashboard/dist/lib/constants.d.ts +5 -0
  35. package/servers/dashboard/dist/lib/constants.d.ts.map +1 -0
  36. package/servers/dashboard/dist/lib/constants.js +46 -0
  37. package/servers/dashboard/dist/lib/constants.js.map +1 -0
  38. package/servers/dashboard/dist/lib/format.d.ts +6 -0
  39. package/servers/dashboard/dist/lib/format.d.ts.map +1 -0
  40. package/servers/dashboard/dist/lib/format.js +52 -0
  41. package/servers/dashboard/dist/lib/format.js.map +1 -0
  42. package/servers/dashboard/dist/lib/graph.d.ts +22 -0
  43. package/servers/dashboard/dist/lib/graph.d.ts.map +1 -0
  44. package/servers/dashboard/dist/lib/graph.js +45 -0
  45. package/servers/dashboard/dist/lib/graph.js.map +1 -0
  46. package/servers/dashboard/dist/lib/invocations.d.ts +32 -0
  47. package/servers/dashboard/dist/lib/invocations.d.ts.map +1 -0
  48. package/servers/dashboard/dist/lib/invocations.js +135 -0
  49. package/servers/dashboard/dist/lib/invocations.js.map +1 -0
  50. package/servers/dashboard/dist/lib/invocations.test.d.ts +2 -0
  51. package/servers/dashboard/dist/lib/invocations.test.d.ts.map +1 -0
  52. package/servers/dashboard/dist/lib/invocations.test.js +68 -0
  53. package/servers/dashboard/dist/lib/invocations.test.js.map +1 -0
  54. package/servers/dashboard/dist/lib/paths.d.ts +2 -0
  55. package/servers/dashboard/dist/lib/paths.d.ts.map +1 -0
  56. package/servers/dashboard/dist/lib/paths.js +40 -0
  57. package/servers/dashboard/dist/lib/paths.js.map +1 -0
  58. package/servers/dashboard/dist/presenter.d.ts.map +1 -1
  59. package/servers/dashboard/dist/presenter.js +2 -0
  60. package/servers/dashboard/dist/presenter.js.map +1 -1
  61. package/servers/dashboard/dist/public/assets/index-DjmMKbPN.css +1 -0
  62. package/servers/dashboard/dist/public/assets/index-DzOqMleZ.js +5323 -0
  63. package/servers/dashboard/dist/public/assets/index-DzOqMleZ.js.map +1 -0
  64. package/servers/dashboard/dist/public/index.html +16 -0
  65. package/servers/dashboard/dist/server.d.ts.map +1 -1
  66. package/servers/dashboard/dist/server.js +5 -1
  67. package/servers/dashboard/dist/server.js.map +1 -1
  68. package/servers/dashboard/dist/skills/infer.d.ts.map +1 -1
  69. package/servers/dashboard/dist/skills/infer.js +0 -6
  70. package/servers/dashboard/dist/skills/infer.js.map +1 -1
  71. package/servers/dashboard/dist/skills/infer.test.js +10 -3
  72. package/servers/dashboard/dist/skills/infer.test.js.map +1 -1
  73. package/servers/dashboard/dist/skills/mapping.d.ts +0 -3
  74. package/servers/dashboard/dist/skills/mapping.d.ts.map +1 -1
  75. package/servers/dashboard/dist/skills/mapping.js +0 -18
  76. package/servers/dashboard/dist/skills/mapping.js.map +1 -1
  77. package/servers/dashboard/dist/skills/registry.d.ts.map +1 -1
  78. package/servers/dashboard/dist/skills/registry.js +0 -1
  79. package/servers/dashboard/dist/skills/registry.js.map +1 -1
  80. package/servers/dashboard/dist/tests/adapters.test.d.ts +2 -0
  81. package/servers/dashboard/dist/tests/adapters.test.d.ts.map +1 -0
  82. package/servers/dashboard/dist/tests/adapters.test.js +180 -0
  83. package/servers/dashboard/dist/tests/adapters.test.js.map +1 -0
  84. package/servers/dashboard/dist/tests/lib-helpers.test.d.ts +2 -0
  85. package/servers/dashboard/dist/tests/lib-helpers.test.d.ts.map +1 -0
  86. package/servers/dashboard/dist/tests/lib-helpers.test.js +123 -0
  87. package/servers/dashboard/dist/tests/lib-helpers.test.js.map +1 -0
  88. package/servers/dashboard/dist/tests/shim.test.js +88 -2
  89. package/servers/dashboard/dist/tests/shim.test.js.map +1 -1
  90. package/servers/dashboard/dist/types.d.ts +5 -2
  91. package/servers/dashboard/dist/types.d.ts.map +1 -1
  92. package/servers/dashboard/package.json +22 -5
  93. package/servers/dashboard/src/adapters/agy.ts +136 -0
  94. package/servers/dashboard/src/adapters/codex.ts +2 -0
  95. package/servers/dashboard/src/adapters/kimi.ts +11 -1
  96. package/servers/dashboard/src/adapters/shim.test.ts +57 -4
  97. package/servers/dashboard/src/adapters/shim.ts +31 -11
  98. package/servers/dashboard/src/lib/constants.ts +44 -0
  99. package/servers/dashboard/src/lib/format.ts +44 -0
  100. package/servers/dashboard/src/lib/graph.ts +69 -0
  101. package/servers/dashboard/src/lib/invocations.test.ts +70 -0
  102. package/servers/dashboard/src/lib/invocations.ts +172 -0
  103. package/servers/dashboard/src/lib/paths.ts +35 -0
  104. package/servers/dashboard/src/presenter.ts +2 -0
  105. package/servers/dashboard/src/server.ts +5 -1
  106. package/servers/dashboard/src/skills/infer.test.ts +11 -3
  107. package/servers/dashboard/src/skills/infer.ts +1 -8
  108. package/servers/dashboard/src/skills/mapping.ts +0 -20
  109. package/servers/dashboard/src/skills/registry.ts +0 -1
  110. package/servers/dashboard/src/tests/adapters.test.ts +198 -0
  111. package/servers/dashboard/src/tests/lib-helpers.test.ts +133 -0
  112. package/servers/dashboard/src/tests/shim.test.ts +110 -2
  113. package/servers/dashboard/src/types.ts +5 -3
  114. package/servers/dashboard/ui/index.html +15 -0
  115. package/servers/dashboard/ui/postcss.config.js +6 -0
  116. package/servers/dashboard/ui/src/App.tsx +360 -0
  117. package/servers/dashboard/ui/src/components/ActiveSkillPanel.tsx +69 -0
  118. package/servers/dashboard/ui/src/components/ActivityGraph.tsx +74 -0
  119. package/servers/dashboard/ui/src/components/CommandPalette.tsx +200 -0
  120. package/servers/dashboard/ui/src/components/FileActivity.tsx +20 -0
  121. package/servers/dashboard/ui/src/components/FileDiff.tsx +68 -0
  122. package/servers/dashboard/ui/src/components/FileList.tsx +64 -0
  123. package/servers/dashboard/ui/src/components/FilterBar.tsx +208 -0
  124. package/servers/dashboard/ui/src/components/Network3D.tsx +178 -0
  125. package/servers/dashboard/ui/src/components/SessionSelector.tsx +95 -0
  126. package/servers/dashboard/ui/src/components/Sidebar.tsx +110 -0
  127. package/servers/dashboard/ui/src/components/TelemetryPanel.tsx +57 -0
  128. package/servers/dashboard/ui/src/components/Timeline.tsx +57 -0
  129. package/servers/dashboard/ui/src/components/TimelineRow.tsx +112 -0
  130. package/servers/dashboard/ui/src/components/TopBar.tsx +116 -0
  131. package/servers/dashboard/ui/src/components/ViewHeader.tsx +19 -0
  132. package/servers/dashboard/ui/src/components/ui/Icon.tsx +105 -0
  133. package/servers/dashboard/ui/src/components/ui/StatusBadge.tsx +19 -0
  134. package/servers/dashboard/ui/src/components/views/FilesView.tsx +23 -0
  135. package/servers/dashboard/ui/src/components/views/NetworkView.tsx +20 -0
  136. package/servers/dashboard/ui/src/components/views/Overview.tsx +135 -0
  137. package/servers/dashboard/ui/src/components/views/SessionsView.tsx +84 -0
  138. package/servers/dashboard/ui/src/components/views/SettingsView.tsx +138 -0
  139. package/servers/dashboard/ui/src/components/views/SkillsView.tsx +92 -0
  140. package/servers/dashboard/ui/src/components/views/TimelineView.tsx +46 -0
  141. package/servers/dashboard/ui/src/contexts/FilterContext.tsx +41 -0
  142. package/servers/dashboard/ui/src/contexts/PinnedSessionsContext.tsx +80 -0
  143. package/servers/dashboard/ui/src/contexts/SettingsContext.tsx +60 -0
  144. package/servers/dashboard/ui/src/hooks/useCommandPalette.ts +36 -0
  145. package/servers/dashboard/ui/src/hooks/useKeyboardShortcut.ts +38 -0
  146. package/servers/dashboard/ui/src/hooks/useNow.ts +12 -0
  147. package/servers/dashboard/ui/src/hooks/useReducedMotion.ts +15 -0
  148. package/servers/dashboard/ui/src/hooks/useSessions.ts +64 -0
  149. package/servers/dashboard/ui/src/hooks/useTheme.ts +30 -0
  150. package/servers/dashboard/ui/src/hooks/useViewport.ts +19 -0
  151. package/servers/dashboard/ui/src/hooks/useWebSocket.ts +118 -0
  152. package/servers/dashboard/ui/src/lib/export.test.ts +33 -0
  153. package/servers/dashboard/ui/src/lib/export.ts +39 -0
  154. package/servers/dashboard/ui/src/lib/filter.test.ts +95 -0
  155. package/servers/dashboard/ui/src/lib/filter.ts +178 -0
  156. package/servers/dashboard/ui/src/lib/format.test.ts +25 -0
  157. package/servers/dashboard/ui/src/lib/search.test.ts +52 -0
  158. package/servers/dashboard/ui/src/lib/search.ts +60 -0
  159. package/servers/dashboard/ui/src/lib/settings.test.ts +50 -0
  160. package/servers/dashboard/ui/src/lib/settings.ts +56 -0
  161. package/servers/dashboard/ui/src/lib/types.ts +124 -0
  162. package/servers/dashboard/ui/src/main.tsx +19 -0
  163. package/servers/dashboard/ui/src/styles/index.css +155 -0
  164. package/servers/dashboard/ui/tailwind.config.js +45 -0
  165. package/servers/dashboard/ui/tsconfig.json +33 -0
  166. package/servers/dashboard/ui/tsconfig.node.json +10 -0
  167. package/servers/dashboard/ui/vite.config.ts +37 -0
  168. package/servers/dashboard/ui/vitest.config.ts +8 -0
  169. package/skills/accessibility-auditor/SKILL.md +0 -20
  170. package/skills/architect/SKILL.md +0 -45
  171. package/skills/designer/SKILL.md +0 -30
  172. package/skills/docs-writer/SKILL.md +0 -13
  173. package/skills/engineer/SKILL.md +0 -30
  174. package/skills/maintainer/SKILL.md +0 -20
  175. package/skills/orchestrator/SKILL.md +0 -13
  176. package/skills/product-manager/SKILL.md +0 -20
  177. package/skills/researcher/SKILL.md +0 -20
  178. package/skills/reviewer/SKILL.md +0 -30
  179. package/skills/security-guard/SKILL.md +0 -20
  180. package/skills/shipper/SKILL.md +0 -33
  181. package/skills/tester/SKILL.md +0 -20
  182. package/packages/cli/dist/mcp.d.ts +0 -28
  183. package/packages/cli/dist/mcp.d.ts.map +0 -1
  184. package/packages/cli/dist/mcp.js +0 -148
  185. package/packages/cli/dist/mcp.js.map +0 -1
  186. package/packages/cli/dist/tests/mcp.test.d.ts +0 -2
  187. package/packages/cli/dist/tests/mcp.test.d.ts.map +0 -1
  188. package/packages/cli/dist/tests/mcp.test.js +0 -232
  189. package/packages/cli/dist/tests/mcp.test.js.map +0 -1
  190. package/references/obsidian-mcp-usage.md +0 -190
  191. package/servers/dashboard/public/app.js +0 -516
  192. package/servers/dashboard/public/index.html +0 -96
  193. package/servers/dashboard/public/styles.css +0 -819
  194. package/servers/obsidian-mcp/README.md +0 -82
  195. package/servers/obsidian-mcp/pyproject.toml +0 -32
  196. package/servers/obsidian-mcp/src/obsidian_mcp/__init__.py +0 -0
  197. package/servers/obsidian-mcp/src/obsidian_mcp/config.py +0 -47
  198. package/servers/obsidian-mcp/src/obsidian_mcp/indexer/__init__.py +0 -0
  199. package/servers/obsidian-mcp/src/obsidian_mcp/indexer/embeddings.py +0 -105
  200. package/servers/obsidian-mcp/src/obsidian_mcp/indexer/indexer.py +0 -79
  201. package/servers/obsidian-mcp/src/obsidian_mcp/indexer/store.py +0 -141
  202. package/servers/obsidian-mcp/src/obsidian_mcp/indexer/sync.py +0 -37
  203. package/servers/obsidian-mcp/src/obsidian_mcp/learning/__init__.py +0 -0
  204. package/servers/obsidian-mcp/src/obsidian_mcp/learning/detector.py +0 -66
  205. package/servers/obsidian-mcp/src/obsidian_mcp/learning/note_generator.py +0 -40
  206. package/servers/obsidian-mcp/src/obsidian_mcp/main.py +0 -4
  207. package/servers/obsidian-mcp/src/obsidian_mcp/models.py +0 -42
  208. package/servers/obsidian-mcp/src/obsidian_mcp/privacy/__init__.py +0 -0
  209. package/servers/obsidian-mcp/src/obsidian_mcp/privacy/filter.py +0 -68
  210. package/servers/obsidian-mcp/src/obsidian_mcp/rag/__init__.py +0 -0
  211. package/servers/obsidian-mcp/src/obsidian_mcp/rag/engine.py +0 -50
  212. package/servers/obsidian-mcp/src/obsidian_mcp/rag/graph_search.py +0 -55
  213. package/servers/obsidian-mcp/src/obsidian_mcp/rag/text_search.py +0 -37
  214. package/servers/obsidian-mcp/src/obsidian_mcp/rag/vector_search.py +0 -118
  215. package/servers/obsidian-mcp/src/obsidian_mcp/server.py +0 -61
  216. package/servers/obsidian-mcp/src/obsidian_mcp/tools/__init__.py +0 -0
  217. package/servers/obsidian-mcp/src/obsidian_mcp/tools/create.py +0 -43
  218. package/servers/obsidian-mcp/src/obsidian_mcp/tools/delete.py +0 -16
  219. package/servers/obsidian-mcp/src/obsidian_mcp/tools/learn.py +0 -42
  220. package/servers/obsidian-mcp/src/obsidian_mcp/tools/list.py +0 -16
  221. package/servers/obsidian-mcp/src/obsidian_mcp/tools/read.py +0 -15
  222. package/servers/obsidian-mcp/src/obsidian_mcp/tools/registry.py +0 -130
  223. package/servers/obsidian-mcp/src/obsidian_mcp/tools/related.py +0 -20
  224. package/servers/obsidian-mcp/src/obsidian_mcp/tools/search.py +0 -26
  225. package/servers/obsidian-mcp/src/obsidian_mcp/tools/sync.py +0 -22
  226. package/servers/obsidian-mcp/src/obsidian_mcp/tools/update.py +0 -34
  227. package/servers/obsidian-mcp/src/obsidian_mcp/vault/__init__.py +0 -0
  228. package/servers/obsidian-mcp/src/obsidian_mcp/vault/parser.py +0 -82
  229. package/servers/obsidian-mcp/src/obsidian_mcp/vault/repository.py +0 -68
  230. package/servers/obsidian-mcp/src/obsidian_mcp/vault/writer.py +0 -61
  231. package/servers/obsidian-mcp/tests/conftest.py +0 -39
  232. package/servers/obsidian-mcp/tests/test_async_tools.py +0 -87
  233. package/servers/obsidian-mcp/tests/test_edge_cases.py +0 -59
  234. package/servers/obsidian-mcp/tests/test_indexer.py +0 -27
  235. package/servers/obsidian-mcp/tests/test_integration.py +0 -90
  236. package/servers/obsidian-mcp/tests/test_learning.py +0 -34
  237. package/servers/obsidian-mcp/tests/test_privacy.py +0 -31
  238. package/servers/obsidian-mcp/tests/test_privacy_config.py +0 -44
  239. package/servers/obsidian-mcp/tests/test_rag.py +0 -64
  240. package/servers/obsidian-mcp/tests/test_read_raw.py +0 -37
  241. package/servers/obsidian-mcp/tests/test_tfidf_fallback.py +0 -54
  242. package/servers/obsidian-mcp/tests/test_tools.py +0 -108
  243. package/servers/obsidian-mcp/tests/test_vault.py +0 -103
  244. package/servers/obsidian-mcp/tests/test_writer.py +0 -139
  245. package/skills/obsidian-second-brain/SKILL.md +0 -298
@@ -1,819 +0,0 @@
1
- :root {
2
- --bg-base: #09090b;
3
- --bg-surface: #121214;
4
- --bg-elevated: #1c1c1f;
5
- --bg-inset: #050507;
6
- --border-default: #27272a;
7
- --border-strong: #3f3f46;
8
- --text-primary: #f8fafc;
9
- --text-secondary: #94a3b8;
10
- --text-muted: #475569;
11
- --accent: #22d3ee;
12
- --accent-hover: #67e8f9;
13
- --accent-dim: #0891b2;
14
- --success: #4ade80;
15
- --error: #fb7185;
16
- --warning: #facc15;
17
- --running: #38bdf8;
18
-
19
- /* lifecycle tokens */
20
- --lifecycle-starting: var(--warning);
21
- --lifecycle-running: var(--running);
22
- --lifecycle-ended: var(--text-muted);
23
- --lifecycle-starting-bg: rgba(250, 204, 21, 0.12);
24
- --lifecycle-running-bg: rgba(56, 189, 248, 0.12);
25
- --lifecycle-ended-bg: rgba(148, 163, 184, 0.10);
26
-
27
- --font-display: 'Bebas Neue', 'Oswald', sans-serif;
28
- --font-body: 'DM Sans', system-ui, sans-serif;
29
- --font-mono: 'JetBrains Mono', ui-monospace, monospace;
30
- }
31
-
32
- [data-theme="light"] {
33
- --bg-base: #f8fafc;
34
- --bg-surface: #ffffff;
35
- --bg-elevated: #f1f5f9;
36
- --bg-inset: #e2e8f0;
37
- --border-default: #cbd5e1;
38
- --border-strong: #94a3b8;
39
- --text-primary: #0f172a;
40
- --text-secondary: #475569;
41
- --text-muted: #94a3b8;
42
- --accent: #0891b2;
43
- --accent-hover: #06b6d4;
44
- --accent-dim: #155e75;
45
- --success: #16a34a;
46
- --error: #e11d48;
47
- --warning: #ca8a04;
48
- --running: #0284c7;
49
- }
50
-
51
- * {
52
- box-sizing: border-box;
53
- }
54
-
55
- html, body {
56
- margin: 0;
57
- padding: 0;
58
- height: 100%;
59
- background: var(--bg-base);
60
- color: var(--text-primary);
61
- font-family: var(--font-body);
62
- font-size: 14px;
63
- line-height: 1.5;
64
- }
65
-
66
- .app {
67
- display: flex;
68
- flex-direction: column;
69
- min-height: 100vh;
70
- }
71
-
72
- /* Header */
73
- .header {
74
- height: 56px;
75
- background: var(--bg-surface);
76
- border-bottom: 1px solid var(--border-default);
77
- display: flex;
78
- align-items: center;
79
- justify-content: space-between;
80
- padding: 0 24px;
81
- flex-shrink: 0;
82
- }
83
-
84
- .brand {
85
- display: flex;
86
- align-items: baseline;
87
- gap: 8px;
88
- }
89
-
90
- .brand-name {
91
- font-family: var(--font-display);
92
- font-size: 1.25rem;
93
- letter-spacing: 0.12em;
94
- color: var(--text-primary);
95
- }
96
-
97
- .brand-separator {
98
- color: var(--text-muted);
99
- }
100
-
101
- .brand-label {
102
- font-size: 0.75rem;
103
- color: var(--text-muted);
104
- letter-spacing: 0.08em;
105
- }
106
-
107
- .header-actions {
108
- display: flex;
109
- align-items: center;
110
- gap: 12px;
111
- }
112
-
113
- .icon-button {
114
- width: 36px;
115
- height: 36px;
116
- border-radius: 8px;
117
- border: 1px solid var(--border-default);
118
- background: var(--bg-elevated);
119
- color: var(--text-secondary);
120
- display: flex;
121
- align-items: center;
122
- justify-content: center;
123
- cursor: pointer;
124
- transition: border-color 0.15s ease, color 0.15s ease;
125
- }
126
-
127
- .icon-button:hover {
128
- border-color: var(--accent);
129
- color: var(--accent);
130
- }
131
-
132
- .icon-button:focus-visible {
133
- outline: 2px solid var(--accent);
134
- outline-offset: 2px;
135
- }
136
-
137
- .icon-button i {
138
- font-size: 1.1rem;
139
- }
140
-
141
- /* Session selector */
142
- .session-selector {
143
- position: relative;
144
- }
145
-
146
- .session-trigger {
147
- display: flex;
148
- align-items: center;
149
- gap: 8px;
150
- padding: 6px 12px;
151
- border-radius: 999px;
152
- border: 1px solid var(--border-default);
153
- background: var(--bg-elevated);
154
- color: var(--text-secondary);
155
- font-family: var(--font-body);
156
- font-size: 0.75rem;
157
- cursor: pointer;
158
- min-height: 36px;
159
- transition: border-color 0.15s ease;
160
- }
161
-
162
- .session-trigger:hover,
163
- .session-trigger[aria-expanded="true"] {
164
- border-color: var(--accent);
165
- }
166
-
167
- .session-trigger:focus-visible {
168
- outline: 2px solid var(--accent);
169
- outline-offset: 2px;
170
- }
171
-
172
- .connection-dot {
173
- width: 8px;
174
- height: 8px;
175
- border-radius: 50%;
176
- background: var(--text-muted);
177
- flex-shrink: 0;
178
- }
179
-
180
- .connection-dot.connected {
181
- background: var(--success);
182
- }
183
-
184
- .connection-dot.connecting {
185
- background: var(--warning);
186
- }
187
-
188
- .connection-dot.disconnected {
189
- background: var(--error);
190
- }
191
-
192
- .session-list {
193
- position: absolute;
194
- top: calc(100% + 8px);
195
- right: 0;
196
- min-width: 240px;
197
- max-height: 320px;
198
- overflow-y: auto;
199
- background: var(--bg-surface);
200
- border: 1px solid var(--border-default);
201
- border-radius: 8px;
202
- list-style: none;
203
- margin: 0;
204
- padding: 6px;
205
- display: none;
206
- z-index: 100;
207
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
208
- }
209
-
210
- .session-list.open {
211
- display: block;
212
- }
213
-
214
- .session-item {
215
- display: flex;
216
- align-items: center;
217
- gap: 8px;
218
- padding: 8px 10px;
219
- border-radius: 6px;
220
- cursor: pointer;
221
- color: var(--text-secondary);
222
- font-size: 0.75rem;
223
- border-left: 2px solid transparent;
224
- }
225
-
226
- .session-item:hover,
227
- .session-item:focus-visible {
228
- background: var(--bg-elevated);
229
- outline: none;
230
- }
231
-
232
- .session-item.active {
233
- border-left-color: var(--accent);
234
- color: var(--text-primary);
235
- background: var(--bg-elevated);
236
- }
237
-
238
- .session-item-id {
239
- font-family: var(--font-mono);
240
- }
241
-
242
- .session-item-source {
243
- margin-left: auto;
244
- color: var(--text-muted);
245
- text-transform: uppercase;
246
- }
247
-
248
- .session-item-main {
249
- display: flex;
250
- flex-direction: column;
251
- gap: 2px;
252
- min-width: 0;
253
- }
254
-
255
- .session-item-meta {
256
- font-size: 0.6875rem;
257
- color: var(--text-muted);
258
- }
259
-
260
- /* Lifecycle badge */
261
- .lifecycle-badge {
262
- display: inline-flex;
263
- align-items: center;
264
- gap: 6px;
265
- padding: 4px 10px;
266
- border-radius: 999px;
267
- font-size: 0.75rem;
268
- font-weight: 600;
269
- line-height: 1;
270
- letter-spacing: 0.06em;
271
- text-transform: uppercase;
272
- border: 1px solid var(--border-default);
273
- background: var(--bg-elevated);
274
- color: var(--text-secondary);
275
- animation: lifecycle-enter 0.2s ease-out;
276
- }
277
-
278
- .lifecycle-badge.starting {
279
- color: var(--lifecycle-starting);
280
- background: var(--lifecycle-starting-bg);
281
- border-color: rgba(250, 204, 21, 0.35);
282
- }
283
-
284
- .lifecycle-badge.running {
285
- color: var(--lifecycle-running);
286
- background: var(--lifecycle-running-bg);
287
- border-color: rgba(56, 189, 248, 0.35);
288
- }
289
-
290
- .lifecycle-badge.ended {
291
- color: var(--lifecycle-ended);
292
- background: var(--lifecycle-ended-bg);
293
- border-color: var(--border-default);
294
- }
295
-
296
- @keyframes lifecycle-enter {
297
- from {
298
- opacity: 0;
299
- transform: translateY(-4px);
300
- }
301
- to {
302
- opacity: 1;
303
- transform: translateY(0);
304
- }
305
- }
306
-
307
- /* Empty state */
308
- .empty-state {
309
- display: flex;
310
- flex-direction: column;
311
- align-items: center;
312
- justify-content: center;
313
- gap: 12px;
314
- padding: 48px 24px;
315
- text-align: center;
316
- color: var(--text-secondary);
317
- animation: empty-state-enter 0.25s ease-out;
318
- }
319
-
320
- .empty-state-icon {
321
- width: 64px;
322
- height: 64px;
323
- border-radius: 16px;
324
- background: var(--bg-elevated);
325
- border: 1px solid var(--border-default);
326
- display: flex;
327
- align-items: center;
328
- justify-content: center;
329
- color: var(--text-muted);
330
- }
331
-
332
- .empty-state-icon i {
333
- font-size: 2rem;
334
- }
335
-
336
- .empty-state-title {
337
- font-family: var(--font-display);
338
- font-size: 2rem;
339
- font-weight: 400;
340
- line-height: 1.1;
341
- letter-spacing: 0.04em;
342
- color: var(--text-primary);
343
- margin: 0;
344
- }
345
-
346
- .empty-state-body {
347
- font-size: 0.875rem;
348
- color: var(--text-secondary);
349
- margin: 0;
350
- }
351
-
352
- @keyframes empty-state-enter {
353
- from {
354
- opacity: 0;
355
- transform: translateY(8px);
356
- }
357
- to {
358
- opacity: 1;
359
- transform: translateY(0);
360
- }
361
- }
362
-
363
- /* Main layout */
364
- .main {
365
- display: flex;
366
- flex: 1;
367
- gap: 16px;
368
- padding: 24px;
369
- overflow: hidden;
370
- }
371
-
372
- .sidebar {
373
- width: 320px;
374
- display: flex;
375
- flex-direction: column;
376
- gap: 16px;
377
- flex-shrink: 0;
378
- }
379
-
380
- .content {
381
- flex: 1;
382
- display: flex;
383
- flex-direction: column;
384
- gap: 16px;
385
- min-width: 0;
386
- }
387
-
388
- /* Panels */
389
- .panel {
390
- background: var(--bg-surface);
391
- border: 1px solid var(--border-default);
392
- border-radius: 8px;
393
- overflow: hidden;
394
- position: relative;
395
- }
396
-
397
- .panel-title {
398
- font-size: 0.75rem;
399
- font-weight: 600;
400
- text-transform: uppercase;
401
- letter-spacing: 0.08em;
402
- color: var(--text-muted);
403
- margin: 0;
404
- padding: 16px 20px;
405
- border-bottom: 1px solid var(--border-default);
406
- }
407
-
408
- /* Active skill */
409
- .active-skill-panel {
410
- padding: 24px;
411
- }
412
-
413
- .panel-accent-strip {
414
- position: absolute;
415
- top: 0;
416
- left: 0;
417
- right: 0;
418
- height: 4px;
419
- background: var(--text-muted);
420
- transition: background 0.2s ease, box-shadow 0.2s ease;
421
- }
422
-
423
- .panel-accent-strip.starting {
424
- background: var(--lifecycle-starting);
425
- box-shadow: 0 0 12px var(--lifecycle-starting);
426
- animation: lifecycle-glow 2s ease-in-out infinite;
427
- }
428
-
429
- .panel-accent-strip.running {
430
- background: var(--lifecycle-running);
431
- box-shadow: 0 0 12px var(--lifecycle-running);
432
- animation: lifecycle-glow 2s ease-in-out infinite;
433
- }
434
-
435
- .panel-accent-strip.ended {
436
- background: var(--border-strong);
437
- box-shadow: none;
438
- }
439
-
440
- .active-skill-content {
441
- display: flex;
442
- flex-direction: column;
443
- align-items: flex-start;
444
- gap: 16px;
445
- }
446
-
447
- .active-skill-icon-wrap {
448
- width: 64px;
449
- height: 64px;
450
- border-radius: 12px;
451
- background: var(--bg-elevated);
452
- border: 1px solid var(--border-default);
453
- display: flex;
454
- align-items: center;
455
- justify-content: center;
456
- color: var(--accent);
457
- }
458
-
459
- .active-skill-icon-wrap i {
460
- font-size: 2rem;
461
- }
462
-
463
- .active-skill-name {
464
- font-family: var(--font-display);
465
- font-size: 4rem;
466
- font-weight: 400;
467
- line-height: 0.95;
468
- margin: 0;
469
- color: var(--text-primary);
470
- }
471
-
472
- .active-skill-meta {
473
- display: flex;
474
- gap: 8px;
475
- flex-wrap: wrap;
476
- }
477
-
478
- .status-badge,
479
- .confidence-badge {
480
- display: inline-flex;
481
- align-items: center;
482
- gap: 6px;
483
- padding: 4px 10px;
484
- border-radius: 999px;
485
- font-size: 0.75rem;
486
- font-weight: 500;
487
- text-transform: uppercase;
488
- letter-spacing: 0.04em;
489
- background: var(--bg-elevated);
490
- border: 1px solid var(--border-default);
491
- color: var(--text-secondary);
492
- }
493
-
494
- .status-dot {
495
- width: 8px;
496
- height: 8px;
497
- border-radius: 50%;
498
- background: var(--text-muted);
499
- }
500
-
501
- .status-dot.starting {
502
- background: var(--lifecycle-starting);
503
- }
504
-
505
- .status-dot.running {
506
- background: var(--lifecycle-running);
507
- }
508
-
509
- .status-dot.ended {
510
- background: var(--lifecycle-ended);
511
- }
512
-
513
- .status-dot.error {
514
- background: var(--error);
515
- }
516
-
517
- .status-dot.success {
518
- background: var(--success);
519
- }
520
-
521
- .active-skill-source {
522
- display: flex;
523
- align-items: center;
524
- gap: 8px;
525
- color: var(--text-muted);
526
- font-size: 0.75rem;
527
- text-transform: uppercase;
528
- letter-spacing: 0.04em;
529
- }
530
-
531
- /* Telemetry */
532
- .telemetry-panel {
533
- padding: 20px;
534
- }
535
-
536
- .telemetry-panel .panel-title {
537
- padding: 0 0 16px;
538
- border-bottom: 1px solid var(--border-default);
539
- }
540
-
541
- .telemetry-grid {
542
- display: grid;
543
- grid-template-columns: 1fr;
544
- gap: 16px;
545
- padding-top: 16px;
546
- }
547
-
548
- .telemetry-card {
549
- display: flex;
550
- flex-direction: column;
551
- gap: 4px;
552
- padding: 12px;
553
- background: var(--bg-inset);
554
- border-radius: 6px;
555
- border: 1px solid var(--border-default);
556
- }
557
-
558
- .telemetry-value {
559
- font-family: var(--font-mono);
560
- font-size: 2rem;
561
- font-weight: 500;
562
- color: var(--accent);
563
- font-variant-numeric: tabular-nums;
564
- }
565
-
566
- .telemetry-label {
567
- font-size: 0.75rem;
568
- color: var(--text-muted);
569
- letter-spacing: 0.08em;
570
- }
571
-
572
- /* Activity graph */
573
- .activity-panel {
574
- flex: 0 0 220px;
575
- display: flex;
576
- flex-direction: column;
577
- }
578
-
579
- .activity-graph {
580
- flex: 1;
581
- min-height: 140px;
582
- padding: 16px 20px;
583
- position: relative;
584
- }
585
-
586
- .activity-empty {
587
- position: absolute;
588
- inset: 0;
589
- display: flex;
590
- align-items: center;
591
- justify-content: center;
592
- color: var(--text-muted);
593
- font-size: 0.875rem;
594
- }
595
-
596
- .activity-canvas {
597
- width: 100%;
598
- height: 100%;
599
- }
600
-
601
- /* Timeline */
602
- .timeline-panel {
603
- flex: 1;
604
- display: flex;
605
- flex-direction: column;
606
- min-height: 0;
607
- }
608
-
609
- .timeline {
610
- flex: 1;
611
- overflow-y: auto;
612
- list-style: none;
613
- margin: 0;
614
- padding: 12px 20px;
615
- position: relative;
616
- }
617
-
618
- .timeline::before {
619
- content: '';
620
- position: absolute;
621
- top: 12px;
622
- bottom: 12px;
623
- left: 32px;
624
- width: 1px;
625
- background: var(--border-default);
626
- }
627
-
628
- .timeline-item {
629
- display: grid;
630
- grid-template-columns: 56px 16px 1fr auto;
631
- align-items: center;
632
- gap: 12px;
633
- padding: 8px 0;
634
- position: relative;
635
- animation: slideIn 0.2s ease-out;
636
- }
637
-
638
- .timeline-time {
639
- font-family: var(--font-mono);
640
- font-size: 0.75rem;
641
- color: var(--text-muted);
642
- text-align: right;
643
- font-variant-numeric: tabular-nums;
644
- }
645
-
646
- .timeline-dot {
647
- width: 8px;
648
- height: 8px;
649
- border-radius: 50%;
650
- background: var(--text-muted);
651
- z-index: 1;
652
- justify-self: center;
653
- }
654
-
655
- .timeline-dot.running {
656
- background: var(--running);
657
- }
658
-
659
- .timeline-dot.success {
660
- background: var(--success);
661
- }
662
-
663
- .timeline-dot.error {
664
- background: var(--error);
665
- }
666
-
667
- .timeline-main {
668
- display: flex;
669
- align-items: baseline;
670
- gap: 10px;
671
- min-width: 0;
672
- }
673
-
674
- .timeline-tool {
675
- font-family: var(--font-mono);
676
- font-size: 0.875rem;
677
- font-weight: 500;
678
- color: var(--text-primary);
679
- flex-shrink: 0;
680
- }
681
-
682
- .timeline-detail {
683
- font-size: 0.875rem;
684
- color: var(--text-secondary);
685
- white-space: nowrap;
686
- overflow: hidden;
687
- text-overflow: ellipsis;
688
- }
689
-
690
- .timeline-outcome {
691
- color: var(--text-muted);
692
- font-size: 0.875rem;
693
- }
694
-
695
- /* Animations */
696
- @keyframes slideIn {
697
- from {
698
- opacity: 0;
699
- transform: translateX(16px);
700
- }
701
- to {
702
- opacity: 1;
703
- transform: translateX(0);
704
- }
705
- }
706
-
707
- .status-dot.running,
708
- .status-dot.starting {
709
- animation: lifecycle-pulse 1.5s ease-in-out infinite;
710
- }
711
-
712
- .lifecycle-dot {
713
- width: 6px;
714
- height: 6px;
715
- border-radius: 50%;
716
- background: currentColor;
717
- }
718
-
719
- .lifecycle-badge.starting .lifecycle-dot,
720
- .lifecycle-badge.running .lifecycle-dot {
721
- animation: lifecycle-pulse 1.5s ease-in-out infinite;
722
- }
723
-
724
- .panel-accent-strip.starting,
725
- .panel-accent-strip.running {
726
- animation: lifecycle-glow 2s ease-in-out infinite;
727
- }
728
-
729
- @keyframes lifecycle-pulse {
730
- 0%, 100% {
731
- opacity: 1;
732
- }
733
- 50% {
734
- opacity: 0.5;
735
- }
736
- }
737
-
738
- @keyframes lifecycle-glow {
739
- 0%, 100% {
740
- box-shadow: 0 0 8px currentColor;
741
- }
742
- 50% {
743
- box-shadow: 0 0 16px currentColor;
744
- }
745
- }
746
-
747
- /* Reduced motion */
748
- @media (prefers-reduced-motion: reduce) {
749
- *,
750
- *::before,
751
- *::after {
752
- animation-duration: 0.01ms !important;
753
- animation-iteration-count: 1 !important;
754
- transition-duration: 0.01ms !important;
755
- }
756
-
757
- .timeline-item {
758
- animation: none;
759
- }
760
- }
761
-
762
- /* Responsive */
763
- @media (max-width: 1023px) {
764
- .main {
765
- flex-direction: column;
766
- overflow: auto;
767
- }
768
-
769
- .sidebar {
770
- width: 100%;
771
- flex-direction: row;
772
- }
773
-
774
- .active-skill-panel {
775
- flex: 1;
776
- }
777
-
778
- .telemetry-panel {
779
- flex: 1;
780
- }
781
-
782
- .telemetry-grid {
783
- grid-template-columns: repeat(3, 1fr);
784
- }
785
-
786
- .active-skill-name {
787
- font-size: 3rem;
788
- }
789
- }
790
-
791
- @media (max-width: 767px) {
792
- .header {
793
- padding: 0 16px;
794
- }
795
-
796
- .main {
797
- padding: 16px;
798
- }
799
-
800
- .sidebar {
801
- flex-direction: column;
802
- }
803
-
804
- .active-skill-name {
805
- font-size: 2.5rem;
806
- }
807
-
808
- .telemetry-grid {
809
- grid-template-columns: 1fr;
810
- }
811
-
812
- .timeline::before {
813
- left: 28px;
814
- }
815
-
816
- .timeline-item {
817
- grid-template-columns: 48px 16px 1fr auto;
818
- }
819
- }