@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.
- package/bizar-dash/dist/assets/{EnvVarsSection-BUQnyVQD.js → EnvVarsSection-DoIzqrlb.js} +3 -3
- package/bizar-dash/dist/assets/{EnvVarsSection-BUQnyVQD.js.map → EnvVarsSection-DoIzqrlb.js.map} +1 -1
- package/bizar-dash/dist/assets/{MobileChat-8FupFgTv.js → MobileChat-CoUCUsbr.js} +1 -1
- package/bizar-dash/dist/assets/{MobileChat-8FupFgTv.js.map → MobileChat-CoUCUsbr.js.map} +1 -1
- package/bizar-dash/dist/assets/MobileSettings-BeO04g52.js +1 -0
- package/bizar-dash/dist/assets/{MobileSettings-BkXtglA6.js.map → MobileSettings-BeO04g52.js.map} +1 -1
- package/bizar-dash/dist/assets/{Toast-CUwkLRms.js → Toast-D9nv5N6m.js} +1 -1
- package/bizar-dash/dist/assets/{Toast-CUwkLRms.js.map → Toast-D9nv5N6m.js.map} +1 -1
- package/bizar-dash/dist/assets/{icons-COpQr35l.js → icons-Btipv2pp.js} +65 -70
- package/bizar-dash/dist/assets/icons-Btipv2pp.js.map +1 -0
- package/bizar-dash/dist/assets/main-DHXPuddY.js +18 -0
- package/bizar-dash/dist/assets/main-DHXPuddY.js.map +1 -0
- package/bizar-dash/dist/assets/{main-Bz_zWFCw.css → main-UG4jKK-F.css} +1 -1
- package/bizar-dash/dist/assets/mobile-H5KH9cTL.js +1 -0
- package/bizar-dash/dist/assets/{mobile-B7dAkmYd.js.map → mobile-H5KH9cTL.js.map} +1 -1
- package/bizar-dash/dist/assets/{mobile-layout-ClC6Qa42.js → mobile-layout-BqHxVb6_.js} +2 -2
- package/bizar-dash/dist/assets/{mobile-layout-ClC6Qa42.js.map → mobile-layout-BqHxVb6_.js.map} +1 -1
- package/bizar-dash/dist/assets/{useSlashCommands-B3MZ1JXa.js → useSlashCommands-C24-O1e7.js} +2 -2
- package/bizar-dash/dist/assets/{useSlashCommands-B3MZ1JXa.js.map → useSlashCommands-C24-O1e7.js.map} +1 -1
- package/bizar-dash/dist/index.html +7 -7
- package/bizar-dash/dist/mobile.html +3 -3
- package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
- package/bizar-dash/src/server/memory-store.mjs +74 -28
- package/bizar-dash/src/server/routes/memory.mjs +91 -38
- package/bizar-dash/src/web/App.tsx +36 -43
- package/bizar-dash/src/web/components/SettingsNav.tsx +92 -0
- package/bizar-dash/src/web/components/Sidebar.tsx +26 -7
- package/bizar-dash/src/web/components/Topbar.tsx +11 -48
- package/bizar-dash/src/web/styles/main.css +18 -3
- package/bizar-dash/src/web/styles/settings.css +115 -3
- package/bizar-dash/src/web/views/Settings.tsx +184 -205
- package/bizar-dash/src/web/views/memory/ConfigPanel.tsx +4 -4
- package/bizar-dash/tests/memory-namespace.test.mjs +2 -2
- package/bizar-dash/tests/memory-status-root.test.mjs +144 -0
- package/bizar-dash/tests/memory-store.test.mjs +5 -4
- package/bizar-dash/tests/memory-vault-config-endpoint.test.mjs +173 -0
- package/bizar-dash/tests/settings-layout.test.tsx +129 -0
- package/bizar-dash/tests/settings-mode-wiring.test.tsx +151 -0
- package/bizar-dash/tests/settings-nav.test.tsx +127 -0
- package/bizar-dash/tests/views/Memory.test.tsx +40 -1
- package/bizar-dash/tests/views/topbar.test.tsx +35 -50
- package/cli/memory.mjs +1 -1
- package/package.json +1 -1
- package/bizar-dash/dist/assets/MobileSettings-BkXtglA6.js +0 -1
- package/bizar-dash/dist/assets/icons-COpQr35l.js.map +0 -1
- package/bizar-dash/dist/assets/main-gqVwliHz.js +0 -18
- package/bizar-dash/dist/assets/main-gqVwliHz.js.map +0 -1
- package/bizar-dash/dist/assets/mobile-B7dAkmYd.js +0 -1
- 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
|
-
});
|