@polderlabs/bizar 5.5.1 → 5.5.2

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 (49) hide show
  1. package/bizar-dash/dist/assets/{EnvVarsSection-BUQnyVQD.js → EnvVarsSection-DoIzqrlb.js} +3 -3
  2. package/bizar-dash/dist/assets/{EnvVarsSection-BUQnyVQD.js.map → EnvVarsSection-DoIzqrlb.js.map} +1 -1
  3. package/bizar-dash/dist/assets/{MobileChat-8FupFgTv.js → MobileChat-CoUCUsbr.js} +1 -1
  4. package/bizar-dash/dist/assets/{MobileChat-8FupFgTv.js.map → MobileChat-CoUCUsbr.js.map} +1 -1
  5. package/bizar-dash/dist/assets/MobileSettings-BeO04g52.js +1 -0
  6. package/bizar-dash/dist/assets/{MobileSettings-BkXtglA6.js.map → MobileSettings-BeO04g52.js.map} +1 -1
  7. package/bizar-dash/dist/assets/{Toast-CUwkLRms.js → Toast-D9nv5N6m.js} +1 -1
  8. package/bizar-dash/dist/assets/{Toast-CUwkLRms.js.map → Toast-D9nv5N6m.js.map} +1 -1
  9. package/bizar-dash/dist/assets/{icons-COpQr35l.js → icons-Btipv2pp.js} +65 -70
  10. package/bizar-dash/dist/assets/icons-Btipv2pp.js.map +1 -0
  11. package/bizar-dash/dist/assets/main-DHXPuddY.js +18 -0
  12. package/bizar-dash/dist/assets/main-DHXPuddY.js.map +1 -0
  13. package/bizar-dash/dist/assets/{main-Bz_zWFCw.css → main-UG4jKK-F.css} +1 -1
  14. package/bizar-dash/dist/assets/mobile-H5KH9cTL.js +1 -0
  15. package/bizar-dash/dist/assets/{mobile-B7dAkmYd.js.map → mobile-H5KH9cTL.js.map} +1 -1
  16. package/bizar-dash/dist/assets/{mobile-layout-ClC6Qa42.js → mobile-layout-BqHxVb6_.js} +2 -2
  17. package/bizar-dash/dist/assets/{mobile-layout-ClC6Qa42.js.map → mobile-layout-BqHxVb6_.js.map} +1 -1
  18. package/bizar-dash/dist/assets/{useSlashCommands-B3MZ1JXa.js → useSlashCommands-C24-O1e7.js} +2 -2
  19. package/bizar-dash/dist/assets/{useSlashCommands-B3MZ1JXa.js.map → useSlashCommands-C24-O1e7.js.map} +1 -1
  20. package/bizar-dash/dist/index.html +7 -7
  21. package/bizar-dash/dist/mobile.html +3 -3
  22. package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  23. package/bizar-dash/src/server/memory-store.mjs +74 -28
  24. package/bizar-dash/src/server/routes/memory.mjs +91 -38
  25. package/bizar-dash/src/web/App.tsx +36 -43
  26. package/bizar-dash/src/web/components/SettingsNav.tsx +92 -0
  27. package/bizar-dash/src/web/components/Sidebar.tsx +26 -7
  28. package/bizar-dash/src/web/components/Topbar.tsx +11 -48
  29. package/bizar-dash/src/web/styles/main.css +18 -3
  30. package/bizar-dash/src/web/styles/settings.css +115 -3
  31. package/bizar-dash/src/web/views/Settings.tsx +184 -205
  32. package/bizar-dash/src/web/views/memory/ConfigPanel.tsx +4 -4
  33. package/bizar-dash/tests/memory-namespace.test.mjs +2 -2
  34. package/bizar-dash/tests/memory-status-root.test.mjs +144 -0
  35. package/bizar-dash/tests/memory-store.test.mjs +5 -4
  36. package/bizar-dash/tests/memory-vault-config-endpoint.test.mjs +173 -0
  37. package/bizar-dash/tests/settings-layout.test.tsx +129 -0
  38. package/bizar-dash/tests/settings-mode-wiring.test.tsx +151 -0
  39. package/bizar-dash/tests/settings-nav.test.tsx +127 -0
  40. package/bizar-dash/tests/views/Memory.test.tsx +40 -1
  41. package/bizar-dash/tests/views/topbar.test.tsx +35 -50
  42. package/cli/memory.mjs +1 -1
  43. package/package.json +1 -1
  44. package/bizar-dash/dist/assets/MobileSettings-BkXtglA6.js +0 -1
  45. package/bizar-dash/dist/assets/icons-COpQr35l.js.map +0 -1
  46. package/bizar-dash/dist/assets/main-gqVwliHz.js +0 -18
  47. package/bizar-dash/dist/assets/main-gqVwliHz.js.map +0 -1
  48. package/bizar-dash/dist/assets/mobile-B7dAkmYd.js +0 -1
  49. package/bizar-dash/tests/views/Settings.test.tsx +0 -160
@@ -1 +0,0 @@
1
- import{M as r}from"./mobile-layout-ClC6Qa42.js";import{b as e,j as o,r as n}from"./react-vendor-Dn4wqh4Z.js";import"./icons-COpQr35l.js";const t=document.getElementById("root");if(!t)throw new Error("Root element #root not found");e(t).render(o.jsx(n.StrictMode,{children:o.jsx(r,{})}));
@@ -1,160 +0,0 @@
1
- /**
2
- * tests/views/Settings.test.tsx
3
- *
4
- * v6.x — Settings view tests. Each section is rendered as its own page.
5
- * The SettingsView component accepts a `section` prop and renders only
6
- * that section's body.
7
- */
8
- import { describe, it, expect, vi, beforeEach } from 'vitest';
9
- import { render, screen, waitFor } from '@testing-library/react';
10
- import userEvent from '@testing-library/user-event';
11
- import React from 'react';
12
- import { ModalProvider } from '../../src/web/components/Modal';
13
- import { ToastProvider } from '../../src/web/components/Toast';
14
- import { SettingsView } from '../../src/web/views/Settings';
15
- import type { Settings, Snapshot } from '../../src/web/lib/types';
16
-
17
- const baseSettings: Settings = {
18
- theme: {
19
- mode: 'dark',
20
- accent: '#8b5cf6',
21
- success: '#3fb950',
22
- warning: '#f0883e',
23
- error: '#f85149',
24
- info: '#58a6ff',
25
- fontFamily: 'Inter',
26
- fontSize: 14,
27
- compactMode: false,
28
- animations: true,
29
- },
30
- ui: {
31
- layout: 'sidebar',
32
- showHeader: true,
33
- showStatusBar: true,
34
- defaultTab: 'overview',
35
- },
36
- defaultAgent: 'odin',
37
- defaultModel: '',
38
- notifications: {
39
- onAgentComplete: true,
40
- onPlanApproval: true,
41
- },
42
- dashboard: { autoLaunchWeb: false },
43
- service: { enabled: false, autostart: false },
44
- about: { version: '6.0.0', homepage: 'https://github.com/DrB0rk/BizarHarness', license: 'MIT' },
45
- agents: { maxParallel: 4, stuckThresholdMs: 60000, autoRestart: true },
46
- personalization: {
47
- displayName: '',
48
- role: '',
49
- team: '',
50
- aboutMe: '',
51
- preferences: '',
52
- },
53
- workflow: {
54
- artifactsEnabled: true,
55
- agentsDecideAutonomously: false,
56
- chatAutonomous: false,
57
- },
58
- };
59
-
60
- const baseSnapshot = {
61
- overview: {
62
- counts: { agents: 0, plans: 0, projects: 0, sessions: 0 },
63
- recentActivity: [],
64
- versions: { node: 'v20', platform: 'linux', projectRoot: '/p', bizarRoot: '/b' },
65
- generatedAt: new Date().toISOString(),
66
- },
67
- agents: [],
68
- artifacts: [],
69
- projects: [],
70
- activeProject: null,
71
- config: { path: '', data: {}, raw: '', exists: false },
72
- settings: { path: '', data: baseSettings, exists: true },
73
- tasks: [],
74
- mods: [],
75
- schedules: [],
76
- providers: [],
77
- mcps: [],
78
- } as unknown as Snapshot;
79
-
80
- const SettingsHarness = ({ section }: { section: string }) => (
81
- <ToastProvider>
82
- <ModalProvider>
83
- <SettingsView
84
- snapshot={baseSnapshot}
85
- settings={baseSettings}
86
- activeTab={`settings-${section}`}
87
- setActiveTab={vi.fn()}
88
- refreshSnapshot={vi.fn(async () => {})}
89
- section={section}
90
- />
91
- </ModalProvider>
92
- </ToastProvider>
93
- );
94
-
95
- describe('SettingsView — v6.x per-section rendering', () => {
96
- beforeEach(() => {
97
- vi.clearAllMocks();
98
- });
99
-
100
- it('renders the Theme section when section="theme"', async () => {
101
- render(<SettingsHarness section="theme" />);
102
- await waitFor(() => {
103
- // The page <h2> heading reflects the section label. Inner section
104
- // components may also contain headings (e.g. "Accent") so use
105
- // getAllByRole + check the first h2.
106
- const headings = screen.getAllByRole('heading', { name: /theme/i });
107
- expect(headings.length).toBeGreaterThan(0);
108
- // The first h2 is the page title.
109
- expect(headings[0].tagName).toBe('H2');
110
- });
111
- });
112
-
113
- it('renders the General section when section="general"', async () => {
114
- render(<SettingsHarness section="general" />);
115
- await waitFor(() => {
116
- const headings = screen.getAllByRole('heading', { name: /general/i });
117
- expect(headings.length).toBeGreaterThan(0);
118
- expect(headings[0].tagName).toBe('H2');
119
- });
120
- });
121
-
122
- it('falls back to Theme when an unknown section id is passed', async () => {
123
- // Force the default fallback path
124
- const { rerender } = render(<SettingsHarness section="does-not-exist" />);
125
- rerender(<SettingsHarness section="theme" />);
126
- await waitFor(() => {
127
- const headings = screen.getAllByRole('heading', { name: /theme/i });
128
- expect(headings.length).toBeGreaterThan(0);
129
- expect(headings[0].tagName).toBe('H2');
130
- });
131
- });
132
-
133
- it('renders the Save / Reload / Reset action buttons', async () => {
134
- render(<SettingsHarness section="theme" />);
135
- await waitFor(() => {
136
- expect(screen.getByRole('button', { name: /save/i })).toBeInTheDocument();
137
- expect(screen.getByRole('button', { name: /reload/i })).toBeInTheDocument();
138
- expect(screen.getByRole('button', { name: /reset all settings/i })).toBeInTheDocument();
139
- });
140
- });
141
-
142
- it('Save button starts disabled (no dirty changes)', async () => {
143
- render(<SettingsHarness section="theme" />);
144
- await waitFor(() => {
145
- const save = screen.getByRole('button', { name: /save/i });
146
- expect(save).toBeDisabled();
147
- });
148
- });
149
-
150
- it('renders the section description in the subtitle', async () => {
151
- render(<SettingsHarness section="network" />);
152
- await waitFor(() => {
153
- // The page subtitle is a <p className="view-subtitle"> containing
154
- // the section description. Multiple Tailscale mentions may appear
155
- // (subtitle + inner sections), so just check the subtitle paragraph.
156
- const subtitle = document.querySelector('.view-subtitle');
157
- expect(subtitle?.textContent?.toLowerCase()).toContain('tailscale');
158
- });
159
- });
160
- });