@archznn/crewloop-skills 0.5.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 (250) hide show
  1. package/README.md +4 -16
  2. package/package.json +3 -3
  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 +31 -37
  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 +258 -98
  11. package/packages/cli/dist/hooks.js.map +1 -1
  12. package/packages/cli/dist/tests/cli.test.js +21 -0
  13. package/packages/cli/dist/tests/cli.test.js.map +1 -1
  14. package/packages/cli/dist/tests/hooks.test.js +253 -27
  15. package/packages/cli/dist/tests/hooks.test.js.map +1 -1
  16. package/references/conventions.md +1 -10
  17. package/references/workflow.md +1 -1
  18. package/servers/dashboard/README.md +55 -1
  19. package/servers/dashboard/bin/crewloop-shim.js +4 -0
  20. package/servers/dashboard/dist/adapters/agy.d.ts +19 -0
  21. package/servers/dashboard/dist/adapters/agy.d.ts.map +1 -0
  22. package/servers/dashboard/dist/adapters/agy.js +108 -0
  23. package/servers/dashboard/dist/adapters/agy.js.map +1 -0
  24. package/servers/dashboard/dist/adapters/codex.d.ts.map +1 -1
  25. package/servers/dashboard/dist/adapters/codex.js +2 -0
  26. package/servers/dashboard/dist/adapters/codex.js.map +1 -1
  27. package/servers/dashboard/dist/adapters/kimi.d.ts +1 -1
  28. package/servers/dashboard/dist/adapters/kimi.d.ts.map +1 -1
  29. package/servers/dashboard/dist/adapters/kimi.js +9 -0
  30. package/servers/dashboard/dist/adapters/kimi.js.map +1 -1
  31. package/servers/dashboard/dist/adapters/shim.d.ts +1 -1
  32. package/servers/dashboard/dist/adapters/shim.d.ts.map +1 -1
  33. package/servers/dashboard/dist/adapters/shim.js +32 -11
  34. package/servers/dashboard/dist/adapters/shim.js.map +1 -1
  35. package/servers/dashboard/dist/adapters/shim.test.js +46 -4
  36. package/servers/dashboard/dist/adapters/shim.test.js.map +1 -1
  37. package/servers/dashboard/dist/lib/constants.d.ts +5 -0
  38. package/servers/dashboard/dist/lib/constants.d.ts.map +1 -0
  39. package/servers/dashboard/dist/lib/constants.js +46 -0
  40. package/servers/dashboard/dist/lib/constants.js.map +1 -0
  41. package/servers/dashboard/dist/lib/format.d.ts +6 -0
  42. package/servers/dashboard/dist/lib/format.d.ts.map +1 -0
  43. package/servers/dashboard/dist/lib/format.js +52 -0
  44. package/servers/dashboard/dist/lib/format.js.map +1 -0
  45. package/servers/dashboard/dist/lib/graph.d.ts +22 -0
  46. package/servers/dashboard/dist/lib/graph.d.ts.map +1 -0
  47. package/servers/dashboard/dist/lib/graph.js +45 -0
  48. package/servers/dashboard/dist/lib/graph.js.map +1 -0
  49. package/servers/dashboard/dist/lib/invocations.d.ts +32 -0
  50. package/servers/dashboard/dist/lib/invocations.d.ts.map +1 -0
  51. package/servers/dashboard/dist/lib/invocations.js +135 -0
  52. package/servers/dashboard/dist/lib/invocations.js.map +1 -0
  53. package/servers/dashboard/dist/lib/invocations.test.d.ts +2 -0
  54. package/servers/dashboard/dist/lib/invocations.test.d.ts.map +1 -0
  55. package/servers/dashboard/dist/lib/invocations.test.js +68 -0
  56. package/servers/dashboard/dist/lib/invocations.test.js.map +1 -0
  57. package/servers/dashboard/dist/lib/paths.d.ts +2 -0
  58. package/servers/dashboard/dist/lib/paths.d.ts.map +1 -0
  59. package/servers/dashboard/dist/lib/paths.js +40 -0
  60. package/servers/dashboard/dist/lib/paths.js.map +1 -0
  61. package/servers/dashboard/dist/presenter.d.ts.map +1 -1
  62. package/servers/dashboard/dist/presenter.js +2 -0
  63. package/servers/dashboard/dist/presenter.js.map +1 -1
  64. package/servers/dashboard/dist/public/assets/index-DjmMKbPN.css +1 -0
  65. package/servers/dashboard/dist/public/assets/index-DzOqMleZ.js +5323 -0
  66. package/servers/dashboard/dist/public/assets/index-DzOqMleZ.js.map +1 -0
  67. package/servers/dashboard/dist/public/index.html +16 -0
  68. package/servers/dashboard/dist/server.d.ts.map +1 -1
  69. package/servers/dashboard/dist/server.js +5 -1
  70. package/servers/dashboard/dist/server.js.map +1 -1
  71. package/servers/dashboard/dist/skills/infer.d.ts.map +1 -1
  72. package/servers/dashboard/dist/skills/infer.js +0 -6
  73. package/servers/dashboard/dist/skills/infer.js.map +1 -1
  74. package/servers/dashboard/dist/skills/infer.test.js +10 -3
  75. package/servers/dashboard/dist/skills/infer.test.js.map +1 -1
  76. package/servers/dashboard/dist/skills/mapping.d.ts +0 -3
  77. package/servers/dashboard/dist/skills/mapping.d.ts.map +1 -1
  78. package/servers/dashboard/dist/skills/mapping.js +0 -18
  79. package/servers/dashboard/dist/skills/mapping.js.map +1 -1
  80. package/servers/dashboard/dist/skills/registry.d.ts.map +1 -1
  81. package/servers/dashboard/dist/skills/registry.js +0 -1
  82. package/servers/dashboard/dist/skills/registry.js.map +1 -1
  83. package/servers/dashboard/dist/tests/adapters.test.d.ts +2 -0
  84. package/servers/dashboard/dist/tests/adapters.test.d.ts.map +1 -0
  85. package/servers/dashboard/dist/tests/adapters.test.js +180 -0
  86. package/servers/dashboard/dist/tests/adapters.test.js.map +1 -0
  87. package/servers/dashboard/dist/tests/lib-helpers.test.d.ts +2 -0
  88. package/servers/dashboard/dist/tests/lib-helpers.test.d.ts.map +1 -0
  89. package/servers/dashboard/dist/tests/lib-helpers.test.js +123 -0
  90. package/servers/dashboard/dist/tests/lib-helpers.test.js.map +1 -0
  91. package/servers/dashboard/dist/tests/shim.test.d.ts +2 -0
  92. package/servers/dashboard/dist/tests/shim.test.d.ts.map +1 -0
  93. package/servers/dashboard/dist/tests/shim.test.js +133 -0
  94. package/servers/dashboard/dist/tests/shim.test.js.map +1 -0
  95. package/servers/dashboard/dist/types.d.ts +5 -2
  96. package/servers/dashboard/dist/types.d.ts.map +1 -1
  97. package/servers/dashboard/package.json +24 -6
  98. package/servers/dashboard/src/adapters/agy.ts +136 -0
  99. package/servers/dashboard/src/adapters/codex.ts +2 -0
  100. package/servers/dashboard/src/adapters/kimi.ts +11 -1
  101. package/servers/dashboard/src/adapters/shim.test.ts +57 -4
  102. package/servers/dashboard/src/adapters/shim.ts +31 -11
  103. package/servers/dashboard/src/lib/constants.ts +44 -0
  104. package/servers/dashboard/src/lib/format.ts +44 -0
  105. package/servers/dashboard/src/lib/graph.ts +69 -0
  106. package/servers/dashboard/src/lib/invocations.test.ts +70 -0
  107. package/servers/dashboard/src/lib/invocations.ts +172 -0
  108. package/servers/dashboard/src/lib/paths.ts +35 -0
  109. package/servers/dashboard/src/presenter.ts +2 -0
  110. package/servers/dashboard/src/server.ts +5 -1
  111. package/servers/dashboard/src/skills/infer.test.ts +11 -3
  112. package/servers/dashboard/src/skills/infer.ts +1 -8
  113. package/servers/dashboard/src/skills/mapping.ts +0 -20
  114. package/servers/dashboard/src/skills/registry.ts +0 -1
  115. package/servers/dashboard/src/tests/adapters.test.ts +198 -0
  116. package/servers/dashboard/src/tests/lib-helpers.test.ts +133 -0
  117. package/servers/dashboard/src/tests/shim.test.ts +153 -0
  118. package/servers/dashboard/src/types.ts +5 -3
  119. package/servers/dashboard/ui/index.html +15 -0
  120. package/servers/dashboard/ui/postcss.config.js +6 -0
  121. package/servers/dashboard/ui/src/App.tsx +360 -0
  122. package/servers/dashboard/ui/src/components/ActiveSkillPanel.tsx +69 -0
  123. package/servers/dashboard/ui/src/components/ActivityGraph.tsx +74 -0
  124. package/servers/dashboard/ui/src/components/CommandPalette.tsx +200 -0
  125. package/servers/dashboard/ui/src/components/FileActivity.tsx +20 -0
  126. package/servers/dashboard/ui/src/components/FileDiff.tsx +68 -0
  127. package/servers/dashboard/ui/src/components/FileList.tsx +64 -0
  128. package/servers/dashboard/ui/src/components/FilterBar.tsx +208 -0
  129. package/servers/dashboard/ui/src/components/Network3D.tsx +178 -0
  130. package/servers/dashboard/ui/src/components/SessionSelector.tsx +95 -0
  131. package/servers/dashboard/ui/src/components/Sidebar.tsx +110 -0
  132. package/servers/dashboard/ui/src/components/TelemetryPanel.tsx +57 -0
  133. package/servers/dashboard/ui/src/components/Timeline.tsx +57 -0
  134. package/servers/dashboard/ui/src/components/TimelineRow.tsx +112 -0
  135. package/servers/dashboard/ui/src/components/TopBar.tsx +116 -0
  136. package/servers/dashboard/ui/src/components/ViewHeader.tsx +19 -0
  137. package/servers/dashboard/ui/src/components/ui/Icon.tsx +105 -0
  138. package/servers/dashboard/ui/src/components/ui/StatusBadge.tsx +19 -0
  139. package/servers/dashboard/ui/src/components/views/FilesView.tsx +23 -0
  140. package/servers/dashboard/ui/src/components/views/NetworkView.tsx +20 -0
  141. package/servers/dashboard/ui/src/components/views/Overview.tsx +135 -0
  142. package/servers/dashboard/ui/src/components/views/SessionsView.tsx +84 -0
  143. package/servers/dashboard/ui/src/components/views/SettingsView.tsx +138 -0
  144. package/servers/dashboard/ui/src/components/views/SkillsView.tsx +92 -0
  145. package/servers/dashboard/ui/src/components/views/TimelineView.tsx +46 -0
  146. package/servers/dashboard/ui/src/contexts/FilterContext.tsx +41 -0
  147. package/servers/dashboard/ui/src/contexts/PinnedSessionsContext.tsx +80 -0
  148. package/servers/dashboard/ui/src/contexts/SettingsContext.tsx +60 -0
  149. package/servers/dashboard/ui/src/hooks/useCommandPalette.ts +36 -0
  150. package/servers/dashboard/ui/src/hooks/useKeyboardShortcut.ts +38 -0
  151. package/servers/dashboard/ui/src/hooks/useNow.ts +12 -0
  152. package/servers/dashboard/ui/src/hooks/useReducedMotion.ts +15 -0
  153. package/servers/dashboard/ui/src/hooks/useSessions.ts +64 -0
  154. package/servers/dashboard/ui/src/hooks/useTheme.ts +30 -0
  155. package/servers/dashboard/ui/src/hooks/useViewport.ts +19 -0
  156. package/servers/dashboard/ui/src/hooks/useWebSocket.ts +118 -0
  157. package/servers/dashboard/ui/src/lib/export.test.ts +33 -0
  158. package/servers/dashboard/ui/src/lib/export.ts +39 -0
  159. package/servers/dashboard/ui/src/lib/filter.test.ts +95 -0
  160. package/servers/dashboard/ui/src/lib/filter.ts +178 -0
  161. package/servers/dashboard/ui/src/lib/format.test.ts +25 -0
  162. package/servers/dashboard/ui/src/lib/search.test.ts +52 -0
  163. package/servers/dashboard/ui/src/lib/search.ts +60 -0
  164. package/servers/dashboard/ui/src/lib/settings.test.ts +50 -0
  165. package/servers/dashboard/ui/src/lib/settings.ts +56 -0
  166. package/servers/dashboard/ui/src/lib/types.ts +124 -0
  167. package/servers/dashboard/ui/src/main.tsx +19 -0
  168. package/servers/dashboard/ui/src/styles/index.css +155 -0
  169. package/servers/dashboard/ui/tailwind.config.js +45 -0
  170. package/servers/dashboard/ui/tsconfig.json +33 -0
  171. package/servers/dashboard/ui/tsconfig.node.json +10 -0
  172. package/servers/dashboard/ui/vite.config.ts +37 -0
  173. package/servers/dashboard/ui/vitest.config.ts +8 -0
  174. package/skills/accessibility-auditor/SKILL.md +0 -20
  175. package/skills/architect/SKILL.md +0 -45
  176. package/skills/designer/SKILL.md +0 -30
  177. package/skills/docs-writer/SKILL.md +0 -13
  178. package/skills/engineer/SKILL.md +0 -30
  179. package/skills/maintainer/SKILL.md +0 -20
  180. package/skills/orchestrator/SKILL.md +0 -13
  181. package/skills/product-manager/SKILL.md +0 -20
  182. package/skills/researcher/SKILL.md +0 -20
  183. package/skills/reviewer/SKILL.md +0 -30
  184. package/skills/security-guard/SKILL.md +0 -20
  185. package/skills/shipper/SKILL.md +0 -33
  186. package/skills/tester/SKILL.md +0 -20
  187. package/packages/cli/dist/mcp.d.ts +0 -28
  188. package/packages/cli/dist/mcp.d.ts.map +0 -1
  189. package/packages/cli/dist/mcp.js +0 -148
  190. package/packages/cli/dist/mcp.js.map +0 -1
  191. package/packages/cli/dist/tests/mcp.test.d.ts +0 -2
  192. package/packages/cli/dist/tests/mcp.test.d.ts.map +0 -1
  193. package/packages/cli/dist/tests/mcp.test.js +0 -232
  194. package/packages/cli/dist/tests/mcp.test.js.map +0 -1
  195. package/references/obsidian-mcp-usage.md +0 -190
  196. package/servers/dashboard/public/app.js +0 -516
  197. package/servers/dashboard/public/index.html +0 -96
  198. package/servers/dashboard/public/styles.css +0 -819
  199. package/servers/obsidian-mcp/README.md +0 -82
  200. package/servers/obsidian-mcp/pyproject.toml +0 -32
  201. package/servers/obsidian-mcp/src/obsidian_mcp/__init__.py +0 -0
  202. package/servers/obsidian-mcp/src/obsidian_mcp/config.py +0 -47
  203. package/servers/obsidian-mcp/src/obsidian_mcp/indexer/__init__.py +0 -0
  204. package/servers/obsidian-mcp/src/obsidian_mcp/indexer/embeddings.py +0 -105
  205. package/servers/obsidian-mcp/src/obsidian_mcp/indexer/indexer.py +0 -79
  206. package/servers/obsidian-mcp/src/obsidian_mcp/indexer/store.py +0 -141
  207. package/servers/obsidian-mcp/src/obsidian_mcp/indexer/sync.py +0 -37
  208. package/servers/obsidian-mcp/src/obsidian_mcp/learning/__init__.py +0 -0
  209. package/servers/obsidian-mcp/src/obsidian_mcp/learning/detector.py +0 -66
  210. package/servers/obsidian-mcp/src/obsidian_mcp/learning/note_generator.py +0 -40
  211. package/servers/obsidian-mcp/src/obsidian_mcp/main.py +0 -4
  212. package/servers/obsidian-mcp/src/obsidian_mcp/models.py +0 -42
  213. package/servers/obsidian-mcp/src/obsidian_mcp/privacy/__init__.py +0 -0
  214. package/servers/obsidian-mcp/src/obsidian_mcp/privacy/filter.py +0 -68
  215. package/servers/obsidian-mcp/src/obsidian_mcp/rag/__init__.py +0 -0
  216. package/servers/obsidian-mcp/src/obsidian_mcp/rag/engine.py +0 -50
  217. package/servers/obsidian-mcp/src/obsidian_mcp/rag/graph_search.py +0 -55
  218. package/servers/obsidian-mcp/src/obsidian_mcp/rag/text_search.py +0 -37
  219. package/servers/obsidian-mcp/src/obsidian_mcp/rag/vector_search.py +0 -118
  220. package/servers/obsidian-mcp/src/obsidian_mcp/server.py +0 -61
  221. package/servers/obsidian-mcp/src/obsidian_mcp/tools/__init__.py +0 -0
  222. package/servers/obsidian-mcp/src/obsidian_mcp/tools/create.py +0 -43
  223. package/servers/obsidian-mcp/src/obsidian_mcp/tools/delete.py +0 -16
  224. package/servers/obsidian-mcp/src/obsidian_mcp/tools/learn.py +0 -42
  225. package/servers/obsidian-mcp/src/obsidian_mcp/tools/list.py +0 -16
  226. package/servers/obsidian-mcp/src/obsidian_mcp/tools/read.py +0 -15
  227. package/servers/obsidian-mcp/src/obsidian_mcp/tools/registry.py +0 -130
  228. package/servers/obsidian-mcp/src/obsidian_mcp/tools/related.py +0 -20
  229. package/servers/obsidian-mcp/src/obsidian_mcp/tools/search.py +0 -26
  230. package/servers/obsidian-mcp/src/obsidian_mcp/tools/sync.py +0 -22
  231. package/servers/obsidian-mcp/src/obsidian_mcp/tools/update.py +0 -34
  232. package/servers/obsidian-mcp/src/obsidian_mcp/vault/__init__.py +0 -0
  233. package/servers/obsidian-mcp/src/obsidian_mcp/vault/parser.py +0 -82
  234. package/servers/obsidian-mcp/src/obsidian_mcp/vault/repository.py +0 -68
  235. package/servers/obsidian-mcp/src/obsidian_mcp/vault/writer.py +0 -61
  236. package/servers/obsidian-mcp/tests/conftest.py +0 -39
  237. package/servers/obsidian-mcp/tests/test_async_tools.py +0 -87
  238. package/servers/obsidian-mcp/tests/test_edge_cases.py +0 -59
  239. package/servers/obsidian-mcp/tests/test_indexer.py +0 -27
  240. package/servers/obsidian-mcp/tests/test_integration.py +0 -90
  241. package/servers/obsidian-mcp/tests/test_learning.py +0 -34
  242. package/servers/obsidian-mcp/tests/test_privacy.py +0 -31
  243. package/servers/obsidian-mcp/tests/test_privacy_config.py +0 -44
  244. package/servers/obsidian-mcp/tests/test_rag.py +0 -64
  245. package/servers/obsidian-mcp/tests/test_read_raw.py +0 -37
  246. package/servers/obsidian-mcp/tests/test_tfidf_fallback.py +0 -54
  247. package/servers/obsidian-mcp/tests/test_tools.py +0 -108
  248. package/servers/obsidian-mcp/tests/test_vault.py +0 -103
  249. package/servers/obsidian-mcp/tests/test_writer.py +0 -139
  250. package/skills/obsidian-second-brain/SKILL.md +0 -298
@@ -0,0 +1,155 @@
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
4
+
5
+ :root {
6
+ --bg-base: #070708;
7
+ --bg-surface: #0e0e10;
8
+ --bg-elevated: #16161a;
9
+ --bg-inset: #050506;
10
+ --border-default: #27272a;
11
+ --border-strong: #3f3f46;
12
+ --text-primary: #f4f4f5;
13
+ --text-secondary: #a1a1aa;
14
+ --text-muted: #52525b;
15
+ --accent: #f59e0b;
16
+ --accent-dim: #78350f;
17
+ --success: #22c55e;
18
+ --error: #ef4444;
19
+ --warning: #eab308;
20
+ --running: #38bdf8;
21
+ --overlay: rgba(0, 0, 0, 0.6);
22
+ }
23
+
24
+ html.light {
25
+ --bg-base: #f4f4f5;
26
+ --bg-surface: #ffffff;
27
+ --bg-elevated: #e4e4e7;
28
+ --bg-inset: #d4d4d8;
29
+ --border-default: #d4d4d8;
30
+ --border-strong: #a1a1aa;
31
+ --text-primary: #18181b;
32
+ --text-secondary: #52525b;
33
+ --text-muted: #a1a1aa;
34
+ --accent: #d97706;
35
+ --accent-dim: #fcd34d;
36
+ --success: #16a34a;
37
+ --error: #dc2626;
38
+ --warning: #ca8a04;
39
+ --running: #0284c7;
40
+ --overlay: rgba(0, 0, 0, 0.35);
41
+ }
42
+
43
+ html,
44
+ body,
45
+ #root {
46
+ height: 100%;
47
+ background: var(--bg-base);
48
+ color: var(--text-primary);
49
+ }
50
+
51
+ body {
52
+ font-family: 'JetBrains Mono', ui-monospace, monospace;
53
+ font-size: 14px;
54
+ line-height: 1.5;
55
+ }
56
+
57
+ @layer components {
58
+ .panel {
59
+ @apply bg-surface border border-border-default rounded overflow-hidden relative;
60
+ }
61
+ }
62
+
63
+ @layer utilities {
64
+ .font-display {
65
+ font-family: 'Teko', sans-serif;
66
+ }
67
+ .font-mono {
68
+ font-family: 'JetBrains Mono', ui-monospace, monospace;
69
+ }
70
+ .tabular {
71
+ font-variant-numeric: tabular-nums;
72
+ }
73
+ }
74
+
75
+ /* Density */
76
+ .density-compact .sidebar-item {
77
+ height: 2rem;
78
+ padding: 0.375rem 0.625rem;
79
+ }
80
+
81
+ .density-compact .timeline-row {
82
+ padding-top: 0.25rem;
83
+ padding-bottom: 0.25rem;
84
+ }
85
+
86
+ .density-compact .file-list-item {
87
+ padding: 0.5rem;
88
+ }
89
+
90
+ .density-compact .filter-bar {
91
+ padding-top: 0.5rem;
92
+ padding-bottom: 0.5rem;
93
+ }
94
+
95
+ /* Animations */
96
+ @keyframes fade-in {
97
+ from {
98
+ opacity: 0;
99
+ }
100
+ to {
101
+ opacity: 1;
102
+ }
103
+ }
104
+
105
+ @keyframes modal-in {
106
+ from {
107
+ opacity: 0;
108
+ transform: scale(0.96) translateY(8px);
109
+ }
110
+ to {
111
+ opacity: 1;
112
+ transform: scale(1) translateY(0);
113
+ }
114
+ }
115
+
116
+ .animate-fade-in {
117
+ animation: fade-in 150ms ease-out;
118
+ }
119
+
120
+ .animate-modal-in {
121
+ animation: modal-in 200ms ease-out;
122
+ }
123
+
124
+ /* Focus rings */
125
+ *:focus-visible {
126
+ outline: 2px solid var(--accent);
127
+ outline-offset: 2px;
128
+ }
129
+
130
+ /* Scrollbars */
131
+ ::-webkit-scrollbar {
132
+ width: 8px;
133
+ height: 8px;
134
+ }
135
+ ::-webkit-scrollbar-track {
136
+ background: transparent;
137
+ }
138
+ ::-webkit-scrollbar-thumb {
139
+ background: var(--border-default);
140
+ border-radius: 4px;
141
+ }
142
+ ::-webkit-scrollbar-thumb:hover {
143
+ background: var(--border-strong);
144
+ }
145
+
146
+ /* Reduced motion */
147
+ @media (prefers-reduced-motion: reduce) {
148
+ *,
149
+ *::before,
150
+ *::after {
151
+ animation-duration: 0.01ms !important;
152
+ animation-iteration-count: 1 !important;
153
+ transition-duration: 0.01ms !important;
154
+ }
155
+ }
@@ -0,0 +1,45 @@
1
+ /** @type {import('tailwindcss').Config} */
2
+ module.exports = {
3
+ darkMode: 'class',
4
+ content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'],
5
+ theme: {
6
+ extend: {
7
+ colors: {
8
+ base: 'var(--bg-base)',
9
+ surface: 'var(--bg-surface)',
10
+ elevated: 'var(--bg-elevated)',
11
+ inset: 'var(--bg-inset)',
12
+ 'border-default': 'var(--border-default)',
13
+ 'border-strong': 'var(--border-strong)',
14
+ 'text-primary': 'var(--text-primary)',
15
+ 'text-secondary': 'var(--text-secondary)',
16
+ 'text-muted': 'var(--text-muted)',
17
+ accent: 'var(--accent)',
18
+ 'accent-dim': 'var(--accent-dim)',
19
+ success: 'var(--success)',
20
+ error: 'var(--error)',
21
+ warning: 'var(--warning)',
22
+ running: 'var(--running)',
23
+ },
24
+ fontFamily: {
25
+ display: ['Teko', 'sans-serif'],
26
+ mono: ['"JetBrains Mono"', 'ui-monospace', 'monospace'],
27
+ },
28
+ animation: {
29
+ pulse: 'pulse 1.5s ease-in-out infinite',
30
+ 'slide-in': 'slideIn 0.2s ease-out',
31
+ },
32
+ keyframes: {
33
+ pulse: {
34
+ '0%, 100%': { opacity: '1' },
35
+ '50%': { opacity: '0.4' },
36
+ },
37
+ slideIn: {
38
+ from: { opacity: '0', transform: 'translateY(-8px)' },
39
+ to: { opacity: '1', transform: 'translateY(0)' },
40
+ },
41
+ },
42
+ },
43
+ },
44
+ plugins: [],
45
+ };
@@ -0,0 +1,33 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "useDefineForClassFields": true,
5
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
6
+ "module": "ESNext",
7
+ "skipLibCheck": true,
8
+ "moduleResolution": "bundler",
9
+ "allowImportingTsExtensions": true,
10
+ "resolveJsonModule": true,
11
+ "isolatedModules": true,
12
+ "noEmit": true,
13
+ "jsx": "react-jsx",
14
+ "strict": true,
15
+ "noUnusedLocals": true,
16
+ "noUnusedParameters": true,
17
+ "noFallthroughCasesInSwitch": true,
18
+ "baseUrl": ".",
19
+ "paths": {
20
+ "@/*": ["src/*"]
21
+ }
22
+ },
23
+ "include": [
24
+ "src",
25
+ "../src/types.ts",
26
+ "../src/lib/graph.ts",
27
+ "../src/lib/invocations.ts",
28
+ "../src/lib/constants.ts",
29
+ "../src/lib/paths.ts",
30
+ "../src/lib/format.ts"
31
+ ],
32
+ "references": [{ "path": "./tsconfig.node.json" }]
33
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "compilerOptions": {
3
+ "composite": true,
4
+ "skipLibCheck": true,
5
+ "module": "ESNext",
6
+ "moduleResolution": "bundler",
7
+ "allowSyntheticDefaultImports": true
8
+ },
9
+ "include": ["vite.config.ts"]
10
+ }
@@ -0,0 +1,37 @@
1
+ import { defineConfig } from 'vite';
2
+ import react from '@vitejs/plugin-react';
3
+ import path from 'node:path';
4
+
5
+ export default defineConfig({
6
+ plugins: [react()],
7
+ root: __dirname,
8
+ base: '/',
9
+ publicDir: path.resolve(__dirname, '../public'),
10
+ build: {
11
+ outDir: path.resolve(__dirname, '../dist/public'),
12
+ emptyOutDir: true,
13
+ sourcemap: true,
14
+ },
15
+ resolve: {
16
+ alias: {
17
+ '@': path.resolve(__dirname, './src'),
18
+ },
19
+ },
20
+ server: {
21
+ port: 5173,
22
+ proxy: {
23
+ '/event': {
24
+ target: 'http://127.0.0.1:7890',
25
+ changeOrigin: true,
26
+ },
27
+ '/api': {
28
+ target: 'http://127.0.0.1:7890',
29
+ changeOrigin: true,
30
+ },
31
+ '/ws': {
32
+ target: 'ws://127.0.0.1:7890',
33
+ ws: true,
34
+ },
35
+ },
36
+ },
37
+ });
@@ -0,0 +1,8 @@
1
+ import { defineConfig } from 'vitest/config';
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ include: ['src/**/*.{test,spec}.{js,ts,jsx,tsx}'],
6
+ globals: false,
7
+ },
8
+ });
@@ -25,26 +25,6 @@ You do NOT write production code. You do NOT run git operations. You do not repl
25
25
 
26
26
  ---
27
27
 
28
- ## MEMORY & CONTEXT
29
-
30
- **Always invoke the `obsidian-second-brain` skill via the `Skill` tool.**
31
- Never read or write files inside `~/.lea` directly with `Read`, `Edit`, `Write`, or `Bash`.
32
-
33
- At the start of the task, the `obsidian-second-brain` skill will search and read the relevant layers for this role.
34
- At the end of the task, it will persist outcomes to the correct layers.
35
-
36
- This skill's targets:
37
- - **Read at start:** prior accessibility decisions, known a11y patterns, and project design system guidance
38
- - **Persist at end:** audit findings to journal; reusable a11y heuristics to knowledge; active context to curated memory
39
-
40
- ### MCP Tools Reference
41
-
42
- | Tool | When to use |
43
- |------|-------------|
44
- | `search_notes` | Find prior a11y decisions and common failures in `Knowledge/` and `Journal/`. |
45
- | `learn_from_text` | Persist a new accessibility heuristic or remediation pattern. |
46
-
47
- ---
48
28
 
49
29
  ## AFK MODE & ROLE PREFIX
50
30
 
@@ -16,38 +16,6 @@ Before taking any action, you MUST read the global conventions in [conventions.m
16
16
 
17
17
  ---
18
18
 
19
- ## MEMORY & CONTEXT
20
-
21
- **Always invoke the `obsidian-second-brain` skill via the `Skill` tool.**
22
- Never read or write files inside `~/.lea` directly with `Read`, `Edit`, `Write`, or `Bash`.
23
-
24
- At the start of the task, the `obsidian-second-brain` skill will search and read the relevant layers for this role.
25
- At the end of the task, it will persist outcomes to the correct layers.
26
-
27
- This skill's targets:
28
- - **Read at start:** existing specs, ADRs, and architectural context
29
- - **Persist at end:** spec rationale and ADRs to durable knowledge; active spec link to `Journal/loop-engineering-agents.md`; active context to curated memory
30
-
31
- > **Note:** Project ADRs live in the repository's `specs/decisions/`; vault decisions and durable knowledge live in `Knowledge/`.
32
-
33
- ## AFK MODE & ROLE PREFIX
34
-
35
- **Role prefix:** [ARCHITECT ANALYZING]
36
-
37
- Print this prefix on its own line before the first line of every response.
38
-
39
- **AFK mode activation:**
40
- - User says "AFK", "estarei AFK", "modo AFK", "vou ficar AFK", or similar explicit marker.
41
- - `MEMORY.md` contains `afk: true`.
42
-
43
- **AFK mode behavior:**
44
- - Skip the navigation menu at the end.
45
- - State the next skill being activated.
46
- - Load the next skill via the Skill tool (do not wait for user choice).
47
-
48
- **Next skill:** Engineer (if the spec involves UI/frontend, route to Designer first; otherwise route directly to Engineer).
49
-
50
- ---
51
19
 
52
20
  ## MODE
53
21
 
@@ -127,19 +95,6 @@ specs/
127
95
 
128
96
  **Never skip specs.** If someone says "just a quick fix", create a lightweight spec anyway. Tracking is non-negotiable.
129
97
 
130
- ### Link Specs to Journal
131
-
132
- After creating a spec in `specs/changes/NNN-name/`, you MUST link it from the project note in Obsidian so specs are traceable across sessions.
133
-
134
- 1. Invoke the `obsidian-second-brain` skill.
135
- 2. Append a link to the new spec under `## Specs / ### Active` in `Journal/loop-engineering-agents.md`.
136
- 3. Use a relative path from the vault root, e.g.:
137
- ```markdown
138
- - [009-spec-journal-linking](../../specs/changes/009-spec-journal-linking/specs/spec.md)
139
- ```
140
- 4. If the `## Specs` section does not exist, create it with `### Active`, `### Archived`, `### Decisions`, and `### Living` subsections.
141
- 5. Do NOT read or write `~/.lea` files directly — use only the `obsidian-second-brain` skill.
142
-
143
98
  ### Specification Quality & Detail Level
144
99
  Every specification file (proposal.md, design.md, tasks.md) you write MUST be comprehensive, detailed, and clear.
145
100
  * **Spec files should NOT be trivial:** It is unacceptable to write simple 50-line files for non-trivial changes. Provide detailed and complete explanations.
@@ -18,36 +18,6 @@ Before taking any action, you MUST read the global conventions in [conventions.m
18
18
 
19
19
  ---
20
20
 
21
- ## MEMORY & CONTEXT
22
-
23
- **Always invoke the `obsidian-second-brain` skill via the `Skill` tool.**
24
- Never read or write files inside `~/.lea` directly with `Read`, `Edit`, `Write`, or `Bash`.
25
-
26
- At the start of the task, the `obsidian-second-brain` skill will search and read the relevant layers for this role.
27
- At the end of the task, it will persist outcomes to the correct layers.
28
-
29
- This skill's targets:
30
- - **Read at start:** prior design decisions, brand direction, and user preferences
31
- - **Persist at end:** design direction to journal; reusable systems to knowledge; active context to curated memory
32
-
33
- ## AFK MODE & ROLE PREFIX
34
-
35
- **Role prefix:** [DESIGNER DESIGNING]
36
-
37
- Print this prefix on its own line before the first line of every response.
38
-
39
- **AFK mode activation:**
40
- - User says "AFK", "estarei AFK", "modo AFK", "vou ficar AFK", or similar explicit marker.
41
- - `MEMORY.md` contains `afk: true`.
42
-
43
- **AFK mode behavior:**
44
- - Skip the navigation menu at the end.
45
- - State the next skill being activated.
46
- - Load the next skill via the Skill tool (do not wait for user choice).
47
-
48
- **Next skill:** Engineer (always).
49
-
50
- ---
51
21
 
52
22
  **Read specs first.** Before designing, check for existing specs in `specs/changes/NNN-name/`. If specs exist, your design must align with the architect's constraints, contracts, and technical boundaries. If no specs exist, ask the orchestrator to route to architect first.
53
23
 
@@ -16,19 +16,6 @@ Before taking any action, you MUST read the global conventions in [conventions.m
16
16
 
17
17
  ---
18
18
 
19
- ## MEMORY & CONTEXT
20
-
21
- **Always invoke the `obsidian-second-brain` skill via the `Skill` tool.**
22
- Never read or write files inside `~/.lea` directly with `Read`, `Edit`, `Write`, or `Bash`.
23
-
24
- At the start of the task, the `obsidian-second-brain` skill will search and read the relevant layers for this role.
25
- At the end of the task, it will persist outcomes to the correct layers.
26
-
27
- This skill's targets:
28
- - **Read at start:** existing docs, style decisions, and project context
29
- - **Persist at end:** new or updated documentation to knowledge; active context to curated memory
30
-
31
- ---
32
19
 
33
20
  ## MODE
34
21
 
@@ -16,36 +16,6 @@ Before taking any action, you MUST read the global conventions in [conventions.m
16
16
 
17
17
  ---
18
18
 
19
- ## MEMORY & CONTEXT
20
-
21
- **Always invoke the `obsidian-second-brain` skill via the `Skill` tool.**
22
- Never read or write files inside `~/.lea` directly with `Read`, `Edit`, `Write`, or `Bash`.
23
-
24
- At the start of the task, the `obsidian-second-brain` skill will search and read the relevant layers for this role.
25
- At the end of the task, it will persist outcomes to the correct layers.
26
-
27
- This skill's targets:
28
- - **Read at start:** relevant conventions, patterns, and prior implementations
29
- - **Persist at end:** implementation notes to journal; reusable patterns to knowledge; active context to curated memory
30
-
31
- ## AFK MODE & ROLE PREFIX
32
-
33
- **Role prefix:** [ENGINEER BUILDING]
34
-
35
- Print this prefix on its own line before the first line of every response.
36
-
37
- **AFK mode activation:**
38
- - User says "AFK", "estarei AFK", "modo AFK", "vou ficar AFK", or similar explicit marker.
39
- - `MEMORY.md` contains `afk: true`.
40
-
41
- **AFK mode behavior:**
42
- - Skip the navigation menu at the end.
43
- - State the next skill being activated.
44
- - Load the next skill via the Skill tool (do not wait for user choice).
45
-
46
- **Next skill:** Reviewer (always).
47
-
48
- ---
49
19
 
50
20
  ## MODE
51
21
 
@@ -25,26 +25,6 @@ You do NOT write production fixes. You do NOT run git operations. You produce cl
25
25
 
26
26
  ---
27
27
 
28
- ## MEMORY & CONTEXT
29
-
30
- **Always invoke the `obsidian-second-brain` skill via the `Skill` tool.**
31
- Never read or write files inside `~/.lea` directly with `Read`, `Edit`, `Write`, or `Bash`.
32
-
33
- At the start of the task, the `obsidian-second-brain` skill will search and read the relevant layers for this role.
34
- At the end of the task, it will persist outcomes to the correct layers.
35
-
36
- This skill's targets:
37
- - **Read at start:** prior incidents, debt decisions, and runbooks
38
- - **Persist at end:** incident/debt notes to journal; runbooks to knowledge; active context to curated memory
39
-
40
- ### MCP Tools Reference
41
-
42
- | Tool | When to use |
43
- |------|-------------|
44
- | `search_notes` | Find prior runbooks and debt decisions in `Knowledge/` and incidents in `Journal/incidents*`. |
45
- | `learn_from_text` | Persist a root-cause analysis or maintenance decision. |
46
-
47
- ---
48
28
 
49
29
  ## WORKFLOW
50
30
 
@@ -22,19 +22,6 @@ Before taking any action, you MUST read the global conventions in [conventions.m
22
22
 
23
23
  ---
24
24
 
25
- ## MEMORY & CONTEXT
26
-
27
- **Always invoke the `obsidian-second-brain` skill via the `Skill` tool.**
28
- Never read or write files inside `~/.lea` directly with `Read`, `Edit`, `Write`, or `Bash`.
29
-
30
- At the start of the task, the `obsidian-second-brain` skill will search and read the relevant layers for this role.
31
- At the end of the task, it will persist outcomes to the correct layers.
32
-
33
- This skill's targets:
34
- - **Read at start:** user priorities and active context
35
- - **Persist at end:** confirmed priorities to curated memory; unclear items to inbox
36
-
37
- ---
38
25
 
39
26
  ## SUBAGENT DELEGATION
40
27
 
@@ -25,26 +25,6 @@ You do NOT write specs. You do NOT write code. You feed clear, value-oriented in
25
25
 
26
26
  ---
27
27
 
28
- ## MEMORY & CONTEXT
29
-
30
- **Always invoke the `obsidian-second-brain` skill via the `Skill` tool.**
31
- Never read or write files inside `~/.lea` directly with `Read`, `Edit`, `Write`, or `Bash`.
32
-
33
- At the start of the task, the `obsidian-second-brain` skill will search and read the relevant layers for this role.
34
- At the end of the task, it will persist outcomes to the correct layers.
35
-
36
- This skill's targets:
37
- - **Read at start:** prior product decisions, success metrics, and user feedback
38
- - **Persist at end:** product decisions and metrics to knowledge or journal; active context to curated memory
39
-
40
- ### MCP Tools Reference
41
-
42
- | Tool | When to use |
43
- |------|-------------|
44
- | `search_notes` | Find prior product decisions and success metrics in `Knowledge/` and user feedback in `Journal/`. |
45
- | `learn_from_text` | Persist a product decision or success metric. |
46
-
47
- ---
48
28
 
49
29
  ## WORKFLOW
50
30
 
@@ -25,26 +25,6 @@ You do NOT make final architecture decisions. You do NOT write production code.
25
25
 
26
26
  ---
27
27
 
28
- ## MEMORY & CONTEXT
29
-
30
- **Always invoke the `obsidian-second-brain` skill via the `Skill` tool.**
31
- Never read or write files inside `~/.lea` directly with `Read`, `Edit`, `Write`, or `Bash`.
32
-
33
- At the start of the task, the `obsidian-second-brain` skill will search and read the relevant layers for this role.
34
- At the end of the task, it will persist outcomes to the correct layers.
35
-
36
- This skill's targets:
37
- - **Read at start:** prior research, technology decisions, and experiment results
38
- - **Persist at end:** research summaries to knowledge or inbox; experiment results to journal; active context to curated memory
39
-
40
- ### MCP Tools Reference
41
-
42
- | Tool | When to use |
43
- |------|-------------|
44
- | `search_notes` | Find prior research and technology decisions in `Knowledge/` and experiment results in `Journal/`. |
45
- | `learn_from_text` | Persist a research finding or decision rationale. |
46
-
47
- ---
48
28
 
49
29
  ## WORKFLOW
50
30
 
@@ -16,36 +16,6 @@ Before taking any action, you MUST read the global conventions in [conventions.m
16
16
 
17
17
  ---
18
18
 
19
- ## MEMORY & CONTEXT
20
-
21
- **Always invoke the `obsidian-second-brain` skill via the `Skill` tool.**
22
- Never read or write files inside `~/.lea` directly with `Read`, `Edit`, `Write`, or `Bash`.
23
-
24
- At the start of the task, the `obsidian-second-brain` skill will search and read the relevant layers for this role.
25
- At the end of the task, it will persist outcomes to the correct layers.
26
-
27
- This skill's targets:
28
- - **Read at start:** project conventions and prior decisions
29
- - **Persist at end:** review findings to journal; process updates to knowledge; active context to curated memory
30
-
31
- ## AFK MODE & ROLE PREFIX
32
-
33
- **Role prefix:** [REVIEWER REVIEWING]
34
-
35
- Print this prefix on its own line before the first line of every response.
36
-
37
- **AFK mode activation:**
38
- - User says "AFK", "estarei AFK", "modo AFK", "vou ficar AFK", or similar explicit marker.
39
- - `MEMORY.md` contains `afk: true`.
40
-
41
- **AFK mode behavior:**
42
- - Skip the navigation menu at the end.
43
- - State the next skill being activated.
44
- - Load the next skill via the Skill tool (do not wait for user choice).
45
-
46
- **Next skill:** Shipper (when review is approved or approved with warnings; if changes are required, route back to Engineer instead).
47
-
48
- ---
49
19
 
50
20
  ## MODE
51
21
 
@@ -25,26 +25,6 @@ You do NOT write production fixes. You do NOT run git operations. You do not rep
25
25
 
26
26
  ---
27
27
 
28
- ## MEMORY & CONTEXT
29
-
30
- **Always invoke the `obsidian-second-brain` skill via the `Skill` tool.**
31
- Never read or write files inside `~/.lea` directly with `Read`, `Edit`, `Write`, or `Bash`.
32
-
33
- At the start of the task, the `obsidian-second-brain` skill will search and read the relevant layers for this role.
34
- At the end of the task, it will persist outcomes to the correct layers.
35
-
36
- This skill's targets:
37
- - **Read at start:** prior security decisions, vulnerability patterns, and accepted risks
38
- - **Persist at end:** security findings to journal; threat patterns to knowledge; active context to curated memory
39
-
40
- ### MCP Tools Reference
41
-
42
- | Tool | When to use |
43
- |------|-------------|
44
- | `search_notes` | Find prior security decisions and vulnerability patterns in `Knowledge/` and `Journal/`. |
45
- | `learn_from_text` | Persist a security finding, threat pattern, or remediation decision. |
46
-
47
- ---
48
28
 
49
29
  ## WORKFLOW
50
30