@polderlabs/bizar 6.3.0 → 7.0.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/.claude/hooks/sessionend-recall.mjs +3 -3
  2. package/.claude/hooks/worker-suggest.mjs +110 -0
  3. package/.claude/settings.json +9 -0
  4. package/bizar-dash/dist/assets/{EnvVarsSection-B58aiJiE.js → EnvVarsSection-CW6fWKds.js} +3 -3
  5. package/bizar-dash/dist/assets/{EnvVarsSection-B58aiJiE.js.map → EnvVarsSection-CW6fWKds.js.map} +1 -1
  6. package/bizar-dash/dist/assets/MobileChat-D7zRhU9K.js +1 -0
  7. package/bizar-dash/dist/assets/{MobileChat-BJrqwVDd.js.map → MobileChat-D7zRhU9K.js.map} +1 -1
  8. package/bizar-dash/dist/assets/MobileSettings-K-sNsn_r.js +1 -0
  9. package/bizar-dash/dist/assets/{MobileSettings-CEQNJNLJ.js.map → MobileSettings-K-sNsn_r.js.map} +1 -1
  10. package/bizar-dash/dist/assets/{Toast-Cpl6-E63.js → Toast-WTxc3m2g.js} +1 -1
  11. package/bizar-dash/dist/assets/{Toast-Cpl6-E63.js.map → Toast-WTxc3m2g.js.map} +1 -1
  12. package/bizar-dash/dist/assets/flow-BpU0-gK2.js +1 -0
  13. package/bizar-dash/dist/assets/flow-BpU0-gK2.js.map +1 -0
  14. package/bizar-dash/dist/assets/fuzzy-l0sNRNKZ.js +1 -0
  15. package/bizar-dash/dist/assets/fuzzy-l0sNRNKZ.js.map +1 -0
  16. package/bizar-dash/dist/assets/{icons-Do5N2jmX.js → icons-B0AKnYI3.js} +98 -103
  17. package/bizar-dash/dist/assets/icons-B0AKnYI3.js.map +1 -0
  18. package/bizar-dash/dist/assets/main-C-Md3DaY.css +1 -0
  19. package/bizar-dash/dist/assets/main-CO8fIxQK.js +18 -0
  20. package/bizar-dash/dist/assets/main-CO8fIxQK.js.map +1 -0
  21. package/bizar-dash/dist/assets/markdown-w2bDDkAH.js +1 -0
  22. package/bizar-dash/dist/assets/{markdown-tOLaD6nm.js.map → markdown-w2bDDkAH.js.map} +1 -1
  23. package/bizar-dash/dist/assets/mobile-DXYCA0hC.js +1 -0
  24. package/bizar-dash/dist/assets/{mobile-DYCHcUpq.js.map → mobile-DXYCA0hC.js.map} +1 -1
  25. package/bizar-dash/dist/assets/mobile-layout-DSmtNPja.js +2 -0
  26. package/bizar-dash/dist/assets/mobile-layout-DSmtNPja.js.map +1 -0
  27. package/bizar-dash/dist/assets/react-vendor-BnuhLJ6X.css +1 -0
  28. package/bizar-dash/dist/assets/react-vendor-D3pra6w-.js +46 -0
  29. package/bizar-dash/dist/assets/react-vendor-D3pra6w-.js.map +1 -0
  30. package/bizar-dash/dist/assets/useSlashCommands-3DFLOfpk.js +2 -0
  31. package/bizar-dash/dist/assets/useSlashCommands-3DFLOfpk.js.map +1 -0
  32. package/bizar-dash/dist/assets/vendor-Di7Cp-rw.js +45 -0
  33. package/bizar-dash/dist/assets/vendor-Di7Cp-rw.js.map +1 -0
  34. package/bizar-dash/dist/index.html +12 -10
  35. package/bizar-dash/dist/mobile.html +7 -4
  36. package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  37. package/bizar-dash/src/server/api.mjs +11 -0
  38. package/bizar-dash/src/server/memory-consolidator.mjs +218 -0
  39. package/bizar-dash/src/server/memory-distillation.mjs +296 -0
  40. package/bizar-dash/src/server/routes/distill.mjs +129 -0
  41. package/bizar-dash/src/server/routes/goal-planner.mjs +236 -0
  42. package/bizar-dash/src/web/App.tsx +4 -0
  43. package/bizar-dash/src/web/components/Tag.tsx +18 -5
  44. package/bizar-dash/src/web/components/Topbar.tsx +3 -0
  45. package/bizar-dash/src/web/components/agents/CommunicationLog.tsx +126 -0
  46. package/bizar-dash/src/web/components/agents/DependencyGraph.tsx +163 -0
  47. package/bizar-dash/src/web/components/agents/QualityGates.tsx +123 -0
  48. package/bizar-dash/src/web/components/agents/RealTimeEventLog.tsx +127 -0
  49. package/bizar-dash/src/web/components/agents/RoutingDecisions.test.tsx +148 -0
  50. package/bizar-dash/src/web/components/agents/RoutingDecisions.tsx +160 -0
  51. package/bizar-dash/src/web/components/goals/GoalInput.tsx +86 -0
  52. package/bizar-dash/src/web/components/goals/PlanVisualization.tsx +111 -0
  53. package/bizar-dash/src/web/lib/goapPlanner.ts +614 -0
  54. package/bizar-dash/src/web/lib/types.ts +25 -0
  55. package/bizar-dash/src/web/styles/agents-redesign.css +311 -0
  56. package/bizar-dash/src/web/styles/main.css +251 -0
  57. package/bizar-dash/src/web/styles/tasks-redesign.css +231 -0
  58. package/bizar-dash/src/web/ui/controls/Button.tsx +77 -0
  59. package/bizar-dash/src/web/ui/controls/Checkbox.tsx +95 -0
  60. package/bizar-dash/src/web/ui/controls/IconButton.tsx +66 -0
  61. package/bizar-dash/src/web/ui/controls/Kbd.tsx +24 -0
  62. package/bizar-dash/src/web/ui/controls/NumberInput.tsx +77 -0
  63. package/bizar-dash/src/web/ui/controls/RadioGroup.tsx +109 -0
  64. package/bizar-dash/src/web/ui/controls/SearchInput.tsx +91 -0
  65. package/bizar-dash/src/web/ui/controls/Select.tsx +92 -0
  66. package/bizar-dash/src/web/ui/controls/Slider.tsx +70 -0
  67. package/bizar-dash/src/web/ui/controls/TextInput.tsx +67 -0
  68. package/bizar-dash/src/web/ui/controls/Toggle.tsx +79 -0
  69. package/bizar-dash/src/web/ui/controls/controls.css +454 -0
  70. package/bizar-dash/src/web/ui/controls/index.ts +33 -0
  71. package/bizar-dash/src/web/ui/data/BarChart.tsx +60 -0
  72. package/bizar-dash/src/web/ui/data/DataTable.tsx +216 -0
  73. package/bizar-dash/src/web/ui/data/EmptyState.tsx +60 -0
  74. package/bizar-dash/src/web/ui/data/ErrorState.tsx +56 -0
  75. package/bizar-dash/src/web/ui/data/KeyValueList.tsx +106 -0
  76. package/bizar-dash/src/web/ui/data/LoadingState.tsx +65 -0
  77. package/bizar-dash/src/web/ui/data/Sparkline.tsx +87 -0
  78. package/bizar-dash/src/web/ui/data/StatTile.tsx +87 -0
  79. package/bizar-dash/src/web/ui/data/data.css +535 -0
  80. package/bizar-dash/src/web/ui/data/index.ts +31 -0
  81. package/bizar-dash/src/web/ui/feedback/Badge.tsx +49 -0
  82. package/bizar-dash/src/web/ui/feedback/Dialog.tsx +209 -0
  83. package/bizar-dash/src/web/ui/feedback/ProgressBar.tsx +69 -0
  84. package/bizar-dash/src/web/ui/feedback/StatusDot.tsx +50 -0
  85. package/bizar-dash/src/web/ui/feedback/Toast.tsx +200 -0
  86. package/bizar-dash/src/web/ui/feedback/Tooltip.tsx +126 -0
  87. package/bizar-dash/src/web/ui/feedback/feedback.css +314 -0
  88. package/bizar-dash/src/web/ui/feedback/index.ts +43 -0
  89. package/bizar-dash/src/web/ui/index.ts +56 -0
  90. package/bizar-dash/src/web/ui/layout/AppShell.tsx +51 -0
  91. package/bizar-dash/src/web/ui/layout/Breadcrumbs.tsx +97 -0
  92. package/bizar-dash/src/web/ui/layout/Panel.tsx +73 -0
  93. package/bizar-dash/src/web/ui/layout/PanelHeader.tsx +39 -0
  94. package/bizar-dash/src/web/ui/layout/Sidebar.tsx +131 -0
  95. package/bizar-dash/src/web/ui/layout/Tabs.tsx +133 -0
  96. package/bizar-dash/src/web/ui/layout/Topbar.tsx +42 -0
  97. package/bizar-dash/src/web/ui/layout/index.ts +33 -0
  98. package/bizar-dash/src/web/ui/layout/layout.css +413 -0
  99. package/bizar-dash/src/web/ui/navigation/CommandPalette.tsx +199 -0
  100. package/bizar-dash/src/web/ui/navigation/NavGroup.tsx +95 -0
  101. package/bizar-dash/src/web/ui/navigation/NavLink.tsx +93 -0
  102. package/bizar-dash/src/web/ui/navigation/index.ts +17 -0
  103. package/bizar-dash/src/web/ui/navigation/navigation.css +343 -0
  104. package/bizar-dash/src/web/ui/primitives/Box.tsx +91 -0
  105. package/bizar-dash/src/web/ui/primitives/Grid.tsx +49 -0
  106. package/bizar-dash/src/web/ui/primitives/Inline.tsx +55 -0
  107. package/bizar-dash/src/web/ui/primitives/Separator.tsx +46 -0
  108. package/bizar-dash/src/web/ui/primitives/Stack.tsx +54 -0
  109. package/bizar-dash/src/web/ui/primitives/VisuallyHidden.tsx +26 -0
  110. package/bizar-dash/src/web/ui/primitives/index.ts +23 -0
  111. package/bizar-dash/src/web/ui/primitives/primitives.css +183 -0
  112. package/bizar-dash/src/web/ui/styles/globals.css +86 -0
  113. package/bizar-dash/src/web/ui/styles/reset.css +125 -0
  114. package/bizar-dash/src/web/ui/styles/tokens.css +195 -0
  115. package/bizar-dash/src/web/ui/theme/ThemeProvider.tsx +142 -0
  116. package/bizar-dash/src/web/ui/theme/tokens.ts +131 -0
  117. package/bizar-dash/src/web/ui/theme/useTheme.ts +22 -0
  118. package/bizar-dash/src/web/ui/utils/cx.ts +42 -0
  119. package/bizar-dash/src/web/views/Agents.tsx +506 -266
  120. package/bizar-dash/src/web/views/GoalPlanner.tsx +158 -0
  121. package/bizar-dash/src/web/views/Overview.tsx +996 -448
  122. package/bizar-dash/src/web/views/Tasks.tsx +277 -273
  123. package/bizar-dash/tests/communication-log.test.tsx +67 -0
  124. package/bizar-dash/tests/dep-graph.test.tsx +40 -0
  125. package/bizar-dash/tests/event-log.test.tsx +61 -0
  126. package/bizar-dash/tests/goal-input.test.tsx +72 -0
  127. package/bizar-dash/tests/goap-planner.test.ts +68 -0
  128. package/bizar-dash/tests/quality-gates.test.tsx +59 -0
  129. package/bizar-dash/tests/setup.ts +31 -1
  130. package/bizar-dash/tests/ui/controls/Button.test.tsx +50 -0
  131. package/bizar-dash/tests/ui/controls/Checkbox.test.tsx +44 -0
  132. package/bizar-dash/tests/ui/controls/IconButton.test.tsx +37 -0
  133. package/bizar-dash/tests/ui/controls/Kbd.test.tsx +39 -0
  134. package/bizar-dash/tests/ui/controls/NumberInput.test.tsx +56 -0
  135. package/bizar-dash/tests/ui/controls/RadioGroup.test.tsx +58 -0
  136. package/bizar-dash/tests/ui/controls/SearchInput.test.tsx +52 -0
  137. package/bizar-dash/tests/ui/controls/Select.test.tsx +66 -0
  138. package/bizar-dash/tests/ui/controls/Slider.test.tsx +41 -0
  139. package/bizar-dash/tests/ui/controls/TextInput.test.tsx +44 -0
  140. package/bizar-dash/tests/ui/controls/Toggle.test.tsx +39 -0
  141. package/bizar-dash/tests/ui/data/BarChart.test.tsx +55 -0
  142. package/bizar-dash/tests/ui/data/DataTable.test.tsx +112 -0
  143. package/bizar-dash/tests/ui/data/EmptyState.test.tsx +57 -0
  144. package/bizar-dash/tests/ui/data/ErrorState.test.tsx +47 -0
  145. package/bizar-dash/tests/ui/data/KeyValueList.test.tsx +59 -0
  146. package/bizar-dash/tests/ui/data/LoadingState.test.tsx +37 -0
  147. package/bizar-dash/tests/ui/data/Sparkline.test.tsx +56 -0
  148. package/bizar-dash/tests/ui/data/StatTile.test.tsx +69 -0
  149. package/bizar-dash/tests/ui/feedback/Badge.test.tsx +41 -0
  150. package/bizar-dash/tests/ui/feedback/Dialog.test.tsx +99 -0
  151. package/bizar-dash/tests/ui/feedback/ProgressBar.test.tsx +66 -0
  152. package/bizar-dash/tests/ui/feedback/StatusDot.test.tsx +41 -0
  153. package/bizar-dash/tests/ui/feedback/Toast.test.tsx +124 -0
  154. package/bizar-dash/tests/ui/feedback/Tooltip.test.tsx +102 -0
  155. package/bizar-dash/tests/ui/layout/AppShell.test.tsx +50 -0
  156. package/bizar-dash/tests/ui/layout/Breadcrumbs.test.tsx +85 -0
  157. package/bizar-dash/tests/ui/layout/Panel.test.tsx +52 -0
  158. package/bizar-dash/tests/ui/layout/PanelHeader.test.tsx +32 -0
  159. package/bizar-dash/tests/ui/layout/Sidebar.test.tsx +95 -0
  160. package/bizar-dash/tests/ui/layout/Tabs.test.tsx +87 -0
  161. package/bizar-dash/tests/ui/layout/Topbar.test.tsx +41 -0
  162. package/bizar-dash/tests/ui/navigation/CommandPalette.test.tsx +105 -0
  163. package/bizar-dash/tests/ui/navigation/NavGroup.test.tsx +55 -0
  164. package/bizar-dash/tests/ui/navigation/NavLink.test.tsx +61 -0
  165. package/bizar-dash/tests/ui/primitives/Box.test.tsx +49 -0
  166. package/bizar-dash/tests/ui/primitives/Grid.test.tsx +37 -0
  167. package/bizar-dash/tests/ui/primitives/Inline.test.tsx +33 -0
  168. package/bizar-dash/tests/ui/primitives/Separator.test.tsx +34 -0
  169. package/bizar-dash/tests/ui/primitives/Stack.test.tsx +45 -0
  170. package/bizar-dash/tests/ui/primitives/VisuallyHidden.test.tsx +27 -0
  171. package/bizar-dash/tests/views/Agents.test.tsx +359 -0
  172. package/bizar-dash/tests/views/Overview.test.tsx +413 -0
  173. package/bizar-dash/tests/views/Tasks.test.tsx +250 -0
  174. package/bizar-dash/vitest.config.ts +3 -1
  175. package/cli/__tests__/cost-gate.test.mjs +301 -0
  176. package/cli/__tests__/feature-list-bridge.test.mjs +371 -0
  177. package/cli/bin.mjs +38 -0
  178. package/cli/commands/claim.mjs +282 -0
  179. package/cli/commands/cost.mjs +279 -0
  180. package/cli/cost-gate.mjs +501 -0
  181. package/cli/feature-list-bridge.mjs +400 -0
  182. package/cli/memory-constants.mjs +17 -0
  183. package/cli/worker-dispatcher.mjs +259 -0
  184. package/cli/worker-dispatcher.test.mjs +204 -0
  185. package/config/trigger-patterns.json +186 -0
  186. package/package.json +2 -2
  187. package/packages/sdk/package.json +1 -1
  188. package/packages/sdk/src/agent-registry.ts +304 -0
  189. package/packages/sdk/src/consensus/byzantine.ts +587 -0
  190. package/packages/sdk/src/consensus/index.ts +147 -0
  191. package/packages/sdk/src/consensus/queen.ts +173 -0
  192. package/packages/sdk/src/consensus/types.ts +199 -0
  193. package/packages/sdk/src/federation/audit.ts +156 -0
  194. package/packages/sdk/src/federation/budget.ts +269 -0
  195. package/packages/sdk/src/federation/envelope.ts +144 -0
  196. package/packages/sdk/src/federation/hmac.ts +160 -0
  197. package/packages/sdk/src/federation/index.ts +443 -0
  198. package/packages/sdk/src/federation/pii.ts +241 -0
  199. package/packages/sdk/src/federation/policy.ts +112 -0
  200. package/packages/sdk/src/federation/trust.ts +146 -0
  201. package/packages/sdk/src/index.ts +67 -0
  202. package/packages/sdk/src/mcp/server.ts +351 -1
  203. package/packages/sdk/src/router/codemod-intent.ts +125 -0
  204. package/packages/sdk/src/router/index.ts +247 -0
  205. package/packages/sdk/src/router/memory-distillation-shim.mjs +18 -0
  206. package/packages/sdk/src/router/memory-distillation.ts +249 -0
  207. package/packages/sdk/src/router/model-router.ts +235 -0
  208. package/packages/sdk/src/router/q-learning-router.ts +304 -0
  209. package/packages/sdk/src/swarm-topology.ts +279 -0
  210. package/packages/sdk/tests/agent-registry.test.ts +285 -0
  211. package/packages/sdk/tests/consensus.test.ts +376 -0
  212. package/packages/sdk/tests/federation/audit.test.ts +164 -0
  213. package/packages/sdk/tests/federation/budget.test.ts +189 -0
  214. package/packages/sdk/tests/federation/envelope.test.ts +120 -0
  215. package/packages/sdk/tests/federation/hmac.test.ts +194 -0
  216. package/packages/sdk/tests/federation/orchestrator.test.ts +176 -0
  217. package/packages/sdk/tests/federation/pii.test.ts +106 -0
  218. package/packages/sdk/tests/federation/policy.test.ts +140 -0
  219. package/packages/sdk/tests/federation/trust.test.ts +124 -0
  220. package/packages/sdk/tests/mcp-tools.test.ts +204 -0
  221. package/packages/sdk/tests/memory-distillation.test.mjs +186 -0
  222. package/packages/sdk/tests/model-router.test.mjs +108 -0
  223. package/packages/sdk/tests/q-learning-router.test.mjs +100 -0
  224. package/packages/sdk/tests/router-orchestrator.test.mjs +172 -0
  225. package/packages/sdk/tests/router.test.mjs +91 -0
  226. package/packages/sdk/tests/sdk.test.mjs +26 -2
  227. package/packages/sdk/tests/swarm-topology.test.ts +258 -0
  228. package/scripts/bh-full-e2e.mjs +11 -15
  229. package/bizar-dash/dist/assets/MobileChat-BJrqwVDd.js +0 -1
  230. package/bizar-dash/dist/assets/MobileSettings-CEQNJNLJ.js +0 -1
  231. package/bizar-dash/dist/assets/icons-Do5N2jmX.js.map +0 -1
  232. package/bizar-dash/dist/assets/main-IvfQAOfy.js +0 -18
  233. package/bizar-dash/dist/assets/main-IvfQAOfy.js.map +0 -1
  234. package/bizar-dash/dist/assets/main-ietCEg_R.css +0 -1
  235. package/bizar-dash/dist/assets/markdown-tOLaD6nm.js +0 -1
  236. package/bizar-dash/dist/assets/mobile-DYCHcUpq.js +0 -1
  237. package/bizar-dash/dist/assets/mobile-layout-CBHjpwsb.js +0 -2
  238. package/bizar-dash/dist/assets/mobile-layout-CBHjpwsb.js.map +0 -1
  239. package/bizar-dash/dist/assets/react-vendor-Dn4wqh4Z.js +0 -40
  240. package/bizar-dash/dist/assets/react-vendor-Dn4wqh4Z.js.map +0 -1
  241. package/bizar-dash/dist/assets/useSlashCommands-Bd7_FA6U.js +0 -2
  242. package/bizar-dash/dist/assets/useSlashCommands-Bd7_FA6U.js.map +0 -1
  243. package/bizar-dash/dist/assets/vendor-C843201K.js +0 -29
  244. package/bizar-dash/dist/assets/vendor-C843201K.js.map +0 -1
  245. package/packages/sdk/package-lock.json +0 -32
@@ -0,0 +1,311 @@
1
+ /*
2
+ * agents-redesign.css — Layout for the redesigned Agents view (Wave 3).
3
+ *
4
+ * Replaces the legacy `.view-agents / .agent-card / .agent-grid` rules that
5
+ * lived in main.css. Follows the same design constraints as the ui/ library:
6
+ * tokens only, hairline borders, no shadows beyond `--shadow-hairline`, and
7
+ * radii capped at `--radius-md`. The split-pane layout uses a CSS grid that
8
+ * collapses to a single column below 1024px so the detail panel can be
9
+ * dismissed on narrow screens without losing the list.
10
+ */
11
+
12
+ .agents-redesign {
13
+ display: flex;
14
+ flex-direction: column;
15
+ gap: var(--space-4);
16
+ width: 100%;
17
+ min-height: 0;
18
+ }
19
+
20
+ .agents-redesign__header {
21
+ display: flex;
22
+ align-items: center;
23
+ justify-content: space-between;
24
+ gap: var(--space-4);
25
+ flex-wrap: wrap;
26
+ }
27
+
28
+ .agents-redesign__header-text {
29
+ display: flex;
30
+ flex-direction: column;
31
+ gap: var(--space-1);
32
+ min-width: 0;
33
+ }
34
+
35
+ .agents-redesign__title {
36
+ display: flex;
37
+ align-items: center;
38
+ gap: var(--space-2);
39
+ font-size: var(--text-xl);
40
+ font-weight: var(--weight-semibold);
41
+ color: var(--text-primary);
42
+ margin: 0;
43
+ letter-spacing: -0.01em;
44
+ }
45
+
46
+ .agents-redesign__title-count {
47
+ font-family: var(--font-mono);
48
+ font-variant-numeric: tabular-nums;
49
+ color: var(--text-tertiary);
50
+ font-weight: var(--weight-medium);
51
+ font-size: var(--text-md);
52
+ }
53
+
54
+ .agents-redesign__subtitle {
55
+ font-size: var(--text-sm);
56
+ color: var(--text-secondary);
57
+ margin: 0;
58
+ max-width: 640px;
59
+ }
60
+
61
+ .agents-redesign__controls {
62
+ display: flex;
63
+ align-items: center;
64
+ gap: var(--space-3);
65
+ flex-wrap: wrap;
66
+ }
67
+
68
+ .agents-redesign__control {
69
+ min-width: 160px;
70
+ }
71
+
72
+ .agents-redesign__body {
73
+ display: grid;
74
+ grid-template-columns: minmax(0, 1fr) minmax(360px, 420px);
75
+ gap: var(--space-4);
76
+ flex: 1;
77
+ min-height: 0;
78
+ }
79
+
80
+ @media (max-width: 1023px) {
81
+ .agents-redesign__body {
82
+ grid-template-columns: minmax(0, 1fr);
83
+ }
84
+ }
85
+
86
+ /* ─── Roster table wrapper ─── */
87
+
88
+ .agents-roster {
89
+ display: flex;
90
+ flex-direction: column;
91
+ min-height: 0;
92
+ flex: 1;
93
+ }
94
+
95
+ .agents-roster__table {
96
+ flex: 1;
97
+ min-height: 0;
98
+ }
99
+
100
+ .agents-roster__table .bd-data-table {
101
+ height: 100%;
102
+ }
103
+
104
+ .agents-roster__row-selected td {
105
+ background: var(--accent-subtle);
106
+ }
107
+
108
+ .agents-roster__row-selected:hover td {
109
+ background: var(--accent-subtle);
110
+ }
111
+
112
+ /* ─── Status cell ─── */
113
+
114
+ .agents-status-cell {
115
+ display: inline-flex;
116
+ align-items: center;
117
+ gap: var(--space-2);
118
+ }
119
+
120
+ .agents-status-cell__label {
121
+ font-size: var(--text-sm);
122
+ color: var(--text-secondary);
123
+ font-variant-numeric: tabular-nums;
124
+ text-transform: lowercase;
125
+ }
126
+
127
+ .agents-status-cell__label--stuck {
128
+ color: var(--danger);
129
+ font-weight: var(--weight-medium);
130
+ }
131
+
132
+ /* ─── Name cell ─── */
133
+
134
+ .agents-name-cell {
135
+ display: inline-flex;
136
+ align-items: center;
137
+ gap: var(--space-2);
138
+ font-weight: var(--weight-medium);
139
+ color: var(--text-primary);
140
+ }
141
+
142
+ .agents-name-cell__swatch {
143
+ width: 10px;
144
+ height: 10px;
145
+ border-radius: var(--radius-sm);
146
+ border: 1px solid var(--border-subtle);
147
+ flex-shrink: 0;
148
+ }
149
+
150
+ .agents-name-cell__swatch--empty {
151
+ background: transparent;
152
+ }
153
+
154
+ /* ─── Tags cell ─── */
155
+
156
+ .agents-tags-cell {
157
+ font-size: var(--text-sm);
158
+ color: var(--text-secondary);
159
+ display: inline-block;
160
+ max-width: 240px;
161
+ overflow: hidden;
162
+ text-overflow: ellipsis;
163
+ white-space: nowrap;
164
+ vertical-align: middle;
165
+ }
166
+
167
+ /* ─── Category cell — colour swatch on Badge ─── */
168
+
169
+ .agents-category-cell {
170
+ display: inline-flex;
171
+ align-items: center;
172
+ gap: var(--space-2);
173
+ }
174
+
175
+ .agents-category-cell__dot {
176
+ width: 6px;
177
+ height: 6px;
178
+ border-radius: var(--radius-full);
179
+ flex-shrink: 0;
180
+ }
181
+
182
+ /* ─── Detail panel ─── */
183
+
184
+ .agents-detail {
185
+ display: flex;
186
+ flex-direction: column;
187
+ min-height: 0;
188
+ flex: 1;
189
+ }
190
+
191
+ .agents-detail__placeholder {
192
+ display: flex;
193
+ flex-direction: column;
194
+ align-items: center;
195
+ justify-content: center;
196
+ text-align: center;
197
+ padding: var(--space-8);
198
+ gap: var(--space-3);
199
+ color: var(--text-tertiary);
200
+ font-size: var(--text-sm);
201
+ min-height: 240px;
202
+ }
203
+
204
+ .agents-detail__placeholder-icon {
205
+ color: var(--text-tertiary);
206
+ opacity: 0.6;
207
+ }
208
+
209
+ .agents-detail__placeholder-title {
210
+ color: var(--text-secondary);
211
+ font-size: var(--text-md);
212
+ font-weight: var(--weight-medium);
213
+ }
214
+
215
+ .agents-detail__meta {
216
+ padding-top: var(--space-2);
217
+ }
218
+
219
+ .agents-detail__name {
220
+ display: flex;
221
+ align-items: center;
222
+ gap: var(--space-3);
223
+ }
224
+
225
+ .agents-detail__name-swatch {
226
+ width: 14px;
227
+ height: 14px;
228
+ border-radius: var(--radius-sm);
229
+ border: 1px solid var(--border-subtle);
230
+ flex-shrink: 0;
231
+ }
232
+
233
+ .agents-detail__name-swatch--empty {
234
+ background: transparent;
235
+ }
236
+
237
+ .agents-detail__tags {
238
+ display: flex;
239
+ flex-wrap: wrap;
240
+ gap: var(--space-1);
241
+ }
242
+
243
+ .agents-detail__tools {
244
+ display: flex;
245
+ flex-wrap: wrap;
246
+ gap: var(--space-1);
247
+ }
248
+
249
+ .agents-detail__description {
250
+ white-space: pre-wrap;
251
+ font-size: var(--text-sm);
252
+ color: var(--text-primary);
253
+ line-height: var(--leading-snug);
254
+ max-width: 100%;
255
+ word-break: break-word;
256
+ }
257
+
258
+ .agents-detail__error {
259
+ font-family: var(--font-mono);
260
+ font-size: var(--text-sm);
261
+ color: var(--danger);
262
+ background: var(--danger-subtle);
263
+ padding: var(--space-2) var(--space-3);
264
+ border-radius: var(--radius-sm);
265
+ border: 1px solid var(--border-subtle);
266
+ word-break: break-word;
267
+ }
268
+
269
+ .agents-detail__actions {
270
+ display: flex;
271
+ gap: var(--space-2);
272
+ flex-wrap: wrap;
273
+ padding-top: var(--space-2);
274
+ border-top: 1px solid var(--border-subtle);
275
+ }
276
+
277
+ .agents-detail__prompt {
278
+ display: flex;
279
+ flex-direction: column;
280
+ gap: var(--space-2);
281
+ }
282
+
283
+ .agents-detail__prompt-label {
284
+ font-size: var(--text-xs);
285
+ font-weight: var(--weight-medium);
286
+ color: var(--text-secondary);
287
+ text-transform: uppercase;
288
+ letter-spacing: 0.04em;
289
+ }
290
+
291
+ .agents-detail__prompt-body {
292
+ font-family: var(--font-mono);
293
+ font-size: var(--text-sm);
294
+ color: var(--text-primary);
295
+ background: var(--surface-1);
296
+ border: 1px solid var(--border-subtle);
297
+ border-radius: var(--radius-sm);
298
+ padding: var(--space-3);
299
+ max-height: 240px;
300
+ overflow: auto;
301
+ white-space: pre-wrap;
302
+ word-break: break-word;
303
+ line-height: var(--leading-snug);
304
+ }
305
+
306
+ .agents-detail__prompt-empty {
307
+ color: var(--text-tertiary);
308
+ font-style: italic;
309
+ font-family: var(--font-sans);
310
+ font-size: var(--text-sm);
311
+ }
@@ -1,3 +1,5 @@
1
+ @import '../ui/styles/globals.css';
2
+
1
3
  /* ─────────────────────────────────────────────────────────────────────
2
4
  Bizar Dashboard — React + TypeScript + Vite edition (v2.6.0)
3
5
  Norse-pantheon inspired. Polished UI. Inter typography. WCAG AA.
@@ -10138,3 +10140,252 @@ select:focus-visible,
10138
10140
  @keyframes spin {
10139
10141
  to { transform: rotate(360deg); }
10140
10142
  }
10143
+
10144
+ /* ───────────────────────────────────────────────────────────────────────
10145
+ * F-035 (MetaHarness) — Routing Decisions panel.
10146
+ *
10147
+ * 3-tier model-routing transparency panel. Tier colors:
10148
+ * CODEMOD → green ($0 deterministic codemod intent)
10149
+ * TIER1 → blue (cheap / small model)
10150
+ * TIER2 → yellow (mid model)
10151
+ * TIER3 → red (frontier model)
10152
+ * ─────────────────────────────────────────────────────────────────────── */
10153
+
10154
+ .routing-decisions {
10155
+ border: 1px solid var(--border-color, rgba(255, 255, 255, 0.08));
10156
+ border-radius: 8px;
10157
+ background: var(--card-bg, rgba(0, 0, 0, 0.18));
10158
+ overflow: hidden;
10159
+ }
10160
+
10161
+ .routing-decisions-empty {
10162
+ padding: 24px 16px;
10163
+ text-align: center;
10164
+ color: var(--muted-text, #888);
10165
+ }
10166
+
10167
+ .routing-decisions-empty-title {
10168
+ font-size: 1rem;
10169
+ font-weight: 600;
10170
+ margin-bottom: 6px;
10171
+ color: var(--primary-text, #eee);
10172
+ }
10173
+
10174
+ .routing-decisions-empty-hint {
10175
+ font-size: 0.85rem;
10176
+ opacity: 0.85;
10177
+ }
10178
+
10179
+ .routing-decisions-empty code {
10180
+ background: rgba(255, 255, 255, 0.06);
10181
+ padding: 1px 6px;
10182
+ border-radius: 3px;
10183
+ font-family: var(--font-mono, ui-monospace, monospace);
10184
+ }
10185
+
10186
+ .routing-decisions-table {
10187
+ width: 100%;
10188
+ border-collapse: collapse;
10189
+ font-size: 0.85rem;
10190
+ font-family: var(--font-sans, system-ui, sans-serif);
10191
+ }
10192
+
10193
+ .routing-decisions-table thead th {
10194
+ text-align: left;
10195
+ font-weight: 600;
10196
+ color: var(--muted-text, #aaa);
10197
+ text-transform: uppercase;
10198
+ letter-spacing: 0.04em;
10199
+ font-size: 0.7rem;
10200
+ padding: 8px 10px;
10201
+ border-bottom: 1px solid var(--border-color, rgba(255, 255, 255, 0.08));
10202
+ }
10203
+
10204
+ .routing-decisions-table tbody td {
10205
+ padding: 6px 10px;
10206
+ border-bottom: 1px solid rgba(255, 255, 255, 0.04);
10207
+ vertical-align: middle;
10208
+ }
10209
+
10210
+ .routing-row:hover td {
10211
+ background: rgba(255, 255, 255, 0.03);
10212
+ }
10213
+
10214
+ .routing-tier {
10215
+ display: inline-block;
10216
+ padding: 2px 8px;
10217
+ border-radius: 4px;
10218
+ font-weight: 700;
10219
+ font-size: 0.7rem;
10220
+ letter-spacing: 0.04em;
10221
+ color: #fff;
10222
+ text-shadow: 0 0 2px rgba(0, 0, 0, 0.4);
10223
+ }
10224
+
10225
+ .routing-tier-codemod {
10226
+ background: #1f8a3a;
10227
+ color: #d6ffe2;
10228
+ }
10229
+
10230
+ .routing-tier-1 {
10231
+ background: #2962ff;
10232
+ color: #e7f0ff;
10233
+ }
10234
+
10235
+ .routing-tier-2 {
10236
+ background: #d4a017;
10237
+ color: #fff8e0;
10238
+ }
10239
+
10240
+ .routing-tier-3 {
10241
+ background: #c0392b;
10242
+ color: #ffe5e0;
10243
+ }
10244
+
10245
+ .routing-model {
10246
+ font-family: var(--font-mono, ui-monospace, monospace);
10247
+ white-space: nowrap;
10248
+ overflow: hidden;
10249
+ text-overflow: ellipsis;
10250
+ max-width: 220px;
10251
+ }
10252
+
10253
+ .routing-task {
10254
+ white-space: nowrap;
10255
+ overflow: hidden;
10256
+ text-overflow: ellipsis;
10257
+ max-width: 180px;
10258
+ color: var(--muted-text, #aaa);
10259
+ }
10260
+
10261
+ .routing-cost {
10262
+ font-family: var(--font-mono, ui-monospace, monospace);
10263
+ text-align: right;
10264
+ white-space: nowrap;
10265
+ }
10266
+
10267
+ .routing-latency {
10268
+ font-family: var(--font-mono, ui-monospace, monospace);
10269
+ text-align: right;
10270
+ white-space: nowrap;
10271
+ color: var(--muted-text, #aaa);
10272
+ }
10273
+
10274
+ .routing-time {
10275
+ white-space: nowrap;
10276
+ font-family: var(--font-mono, ui-monospace, monospace);
10277
+ font-size: 0.78rem;
10278
+ color: var(--muted-text, #888);
10279
+ }
10280
+
10281
+ .routing-decisions-compact .routing-decisions-table tbody td {
10282
+ padding: 3px 8px;
10283
+ font-size: 0.8rem;
10284
+ }
10285
+
10286
+ /* ─── v6.4.0 — F-036 Goal Planner UI ──────────────────────────────────── */
10287
+ .goal-planner-page {
10288
+ padding: var(--spacing-md, 12px);
10289
+ display: flex;
10290
+ flex-direction: column;
10291
+ gap: var(--spacing-md, 12px);
10292
+ }
10293
+ .goal-planner-header { display: flex; flex-direction: column; gap: 6px; }
10294
+ .goal-planner-title-row { display: flex; align-items: center; gap: 8px; }
10295
+ .goal-planner-title-row h2 { margin: 0; font-size: 1.15rem; }
10296
+ .goal-planner-blurb { color: var(--muted-text, #888); font-size: 0.85rem; margin: 0; }
10297
+ .goal-planner-grid {
10298
+ display: grid;
10299
+ grid-template-columns: repeat(2, minmax(0, 1fr));
10300
+ gap: var(--spacing-md, 12px);
10301
+ }
10302
+ .goal-planner-input-row { grid-column: 1 / -1; }
10303
+ .goal-planner-plan-row { grid-column: 1 / -1; }
10304
+ .goal-planner-panel-row { min-height: 320px; }
10305
+ @media (max-width: 1100px) {
10306
+ .goal-planner-grid { grid-template-columns: 1fr; }
10307
+ }
10308
+
10309
+ .goal-input { display: flex; flex-direction: column; gap: 6px; padding: 12px; border: 1px solid var(--border-soft, #2a2a2a); border-radius: 8px; background: var(--card-bg, rgba(255,255,255,0.02)); }
10310
+ .goal-input-label { display: inline-flex; align-items: center; gap: 6px; font-size: 0.85rem; color: var(--muted-text, #888); }
10311
+ .goal-input-textarea { width: 100%; min-height: 90px; resize: vertical; padding: 8px 10px; border-radius: 6px; border: 1px solid var(--border-soft, #333); background: var(--bg, #111); color: var(--fg, #eee); font-family: var(--font-mono, ui-monospace, monospace); font-size: 0.85rem; }
10312
+ .goal-input-footer { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
10313
+ .goal-input-counter { font-size: 0.75rem; color: var(--muted-text, #888); }
10314
+
10315
+ .plan-visualization { display: flex; flex-direction: column; gap: 8px; padding: 12px; }
10316
+ .plan-viz-header { display: flex; align-items: center; justify-content: space-between; gap: 6px; }
10317
+ .plan-viz-badges { display: inline-flex; align-items: center; gap: 6px; }
10318
+ .plan-viz-goal { font-style: italic; color: var(--muted-text, #888); }
10319
+ .plan-viz-tree { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 4px; }
10320
+ .plan-viz-row { border: 1px solid var(--border-soft, #2a2a2a); border-radius: 6px; background: var(--card-bg, rgba(255,255,255,0.02)); }
10321
+ .plan-viz-row-head { display: grid; grid-template-columns: 18px 110px 1fr 90px 40px; align-items: center; gap: 6px; padding: 6px 10px; width: 100%; background: transparent; border: 0; color: inherit; cursor: pointer; text-align: left; }
10322
+ .plan-viz-chevron { display: inline-flex; align-items: center; }
10323
+ .plan-viz-action { font-family: var(--font-mono, monospace); font-size: 0.7rem; text-transform: uppercase; padding: 2px 6px; border-radius: 4px; background: var(--accent-bg, rgba(139,92,246,0.12)); }
10324
+ .plan-viz-action.is-research { background: rgba(88,166,255,0.16); }
10325
+ .plan-viz-action.is-build, .plan-viz-action.is-implement { background: rgba(63,185,80,0.16); }
10326
+ .plan-viz-action.is-test, .plan-viz-action.is-review { background: rgba(210,153,34,0.16); }
10327
+ .plan-viz-action.is-deploy { background: rgba(248,81,73,0.16); }
10328
+ .plan-viz-title { font-weight: 500; }
10329
+ .plan-viz-agent { font-size: 0.75rem; color: var(--muted-text, #888); }
10330
+ .plan-viz-cost { text-align: right; font-variant-numeric: tabular-nums; font-size: 0.8rem; color: var(--muted-text, #888); }
10331
+ .plan-viz-row-body { padding: 8px 12px 12px 36px; border-top: 1px solid var(--border-soft, #2a2a2a); font-size: 0.85rem; }
10332
+ .plan-viz-deps, .plan-viz-effects { margin-top: 6px; display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
10333
+ .plan-viz-deps ul, .plan-viz-effects ul { list-style: none; padding: 0; margin: 0; display: inline-flex; gap: 6px; }
10334
+ .plan-viz-deps code, .plan-viz-effects code { font-size: 0.75rem; padding: 2px 6px; border-radius: 4px; background: var(--accent-bg, rgba(139,92,246,0.12)); }
10335
+
10336
+ .dep-graph { display: flex; flex-direction: column; gap: 6px; padding: 12px; }
10337
+ .dep-graph-header { display: flex; align-items: center; gap: 6px; }
10338
+ .dep-graph-canvas { height: 360px; border-radius: 6px; overflow: hidden; border: 1px solid var(--border-soft, #2a2a2a); background: var(--bg, #0c0c0c); }
10339
+ .dep-node { background: var(--card-bg, #1c1c1c); color: var(--fg, #eee); border: 1px solid var(--border-soft, #333); border-radius: 6px; padding: 8px 10px; min-width: 160px; font-size: 0.78rem; }
10340
+ .dep-node.is-research { border-left: 3px solid #58a6ff; }
10341
+ .dep-node.is-build, .dep-node.is-implement { border-left: 3px solid #3fb950; }
10342
+ .dep-node.is-test, .dep-node.is-review { border-left: 3px solid #d29922; }
10343
+ .dep-node.is-deploy { border-left: 3px solid #f85149; }
10344
+ .dep-node.is-design { border-left: 3px solid #a371f7; }
10345
+ .dep-node-action { font-family: var(--font-mono, monospace); font-size: 0.65rem; text-transform: uppercase; opacity: 0.7; }
10346
+ .dep-node-label { font-weight: 600; margin-top: 2px; }
10347
+ .dep-node-agent { font-size: 0.7rem; opacity: 0.7; }
10348
+ .dep-handle { width: 6px !important; height: 6px !important; background: var(--accent, #8b5cf6) !important; border: 1px solid #111 !important; }
10349
+
10350
+ .comm-log { display: flex; flex-direction: column; gap: 6px; padding: 12px; }
10351
+ .comm-log-header { display: flex; align-items: center; justify-content: space-between; }
10352
+ .comm-log-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 4px; max-height: 360px; overflow-y: auto; }
10353
+ .comm-log-row { padding: 6px 10px; border-radius: 6px; background: var(--card-bg, rgba(255,255,255,0.02)); border-left: 3px solid var(--info, #58a6ff); }
10354
+ .comm-log-row.is-error { border-left-color: var(--error, #f85149); }
10355
+ .comm-log-row.is-warning, .comm-log-row.is-stuck { border-left-color: var(--warning, #d29922); }
10356
+ .comm-log-row.is-success { border-left-color: var(--success, #3fb950); }
10357
+ .comm-log-row.is-status { border-left-color: var(--accent, #8b5cf6); }
10358
+ .comm-log-row-meta { display: flex; align-items: center; gap: 6px; font-size: 0.7rem; }
10359
+ .comm-log-from, .comm-log-to { font-weight: 600; }
10360
+ .comm-log-time { margin-left: auto; color: var(--muted-text, #888); font-size: 0.7rem; }
10361
+ .comm-log-message { margin-top: 2px; font-size: 0.8rem; }
10362
+ .comm-log-empty { padding: 12px; font-size: 0.8rem; color: var(--muted-text, #888); }
10363
+
10364
+ .event-log { display: flex; flex-direction: column; gap: 6px; padding: 12px; }
10365
+ .event-log-header { display: flex; align-items: center; justify-content: space-between; }
10366
+ .event-log-summary { display: flex; flex-wrap: wrap; gap: 4px; }
10367
+ .event-log-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 2px; max-height: 280px; overflow-y: auto; font-family: var(--font-mono, monospace); font-size: 0.7rem; }
10368
+ .event-log-row { display: grid; grid-template-columns: 80px 160px 1fr; gap: 8px; padding: 2px 8px; border-left: 3px solid var(--info, #58a6ff); }
10369
+ .event-log-row.is-success { border-left-color: var(--success, #3fb950); }
10370
+ .event-log-row.is-error { border-left-color: var(--error, #f85149); }
10371
+ .event-log-row.is-warning { border-left-color: var(--warning, #d29922); }
10372
+ .event-log-row.is-control { opacity: 0.5; }
10373
+ .event-log-time { color: var(--muted-text, #888); }
10374
+ .event-log-type { color: var(--accent, #8b5cf6); }
10375
+ .event-log-preview { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
10376
+ .event-log-empty { padding: 12px; font-size: 0.8rem; color: var(--muted-text, #888); }
10377
+
10378
+ .qg-panel { display: flex; flex-direction: column; gap: 6px; padding: 12px; }
10379
+ .qg-header { display: flex; align-items: center; justify-content: space-between; }
10380
+ .qg-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 4px; }
10381
+ .qg-row { padding: 8px 10px; border-radius: 6px; background: var(--card-bg, rgba(255,255,255,0.02)); border-left: 3px solid var(--error, #f85149); }
10382
+ .qg-row.is-passed { border-left-color: var(--success, #3fb950); }
10383
+ .qg-row.is-warning { border-left-color: var(--warning, #d29922); }
10384
+ .qg-row-head { display: flex; align-items: center; gap: 8px; }
10385
+ .qg-name { font-weight: 600; }
10386
+ .qg-row-body { margin-top: 4px; display: flex; justify-content: space-between; gap: 8px; font-size: 0.8rem; }
10387
+ .qg-detail { color: var(--muted-text, #888); }
10388
+ .qg-threshold { font-variant-numeric: tabular-nums; color: var(--muted-text, #888); }
10389
+ .qg-icon.is-pass { color: var(--success, #3fb950); }
10390
+ .qg-icon.is-warn { color: var(--warning, #d29922); }
10391
+ .qg-icon.is-fail { color: var(--error, #f85149); }