Files
nmon/web/package.json
Vibe Coder f31fb3712a
Some checks failed
ci / lint (push) Successful in 4m19s
ci / openapi (push) Successful in 29s
ci / postgres (push) Successful in 4m55s
ci / test (push) Failing after 19m48s
Add settings forms, first-install wizard, webhook presets, help and poll tools
Make nmon easier to install and run without editing YAML by hand:

- Settings: point-and-click forms over config.yaml (GET/PUT
  /api/v1/settings/form); the YAML editor moves to /settings/yaml.
- First install: with no sign-in configured nmon starts in install
  mode, serves only the setup wizard (sign-in, basics, devices,
  alerting) and closes it for good once sign-in is saved. A
  self-signed certificate is generated when no TLS source is given.
  poller.interval becomes a config setting.
- Reverse proxies: opt-in --http-listen plain-HTTP listener beside
  HTTPS; sign-in stays required.
- Webhooks: Generic, Teams Adaptive Card, Slack and Discord presets,
  template preview and test send.
- Help: the operations, coverage and profile docs served at /help.
- Polling: per-device "Poll now", a dry-run test poll returning an
  SNMP trace, and time-limited in-memory SNMP debug recording, in the
  UI and as `nmon device poll`.
- Ansible: deploys into install mode when no sign-in is set, and no
  longer overwrites the config.yaml the wizard wrote.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017TuKgyKve2XLFtrrXWMi2w
2026-10-25 06:31:12 +00:00

56 lines
1.5 KiB
JSON

{
"name": "nmon-web",
"private": true,
"version": "0.0.0",
"type": "module",
"engines": {
"node": ">=22.12.0"
},
"scripts": {
"dev": "vite",
"gen:api": "node scripts/gen-api.mjs",
"build": "tsc --noEmit && vite build",
"preview": "vite preview",
"lint": "eslint . --max-warnings 0",
"test": "vitest run",
"e2e": "npm run build && playwright test -c e2e/mock.config.ts",
"e2e:live": "playwright test -c e2e/live.config.ts",
"fixtures": "node e2e/fixtures/generate.ts"
},
"dependencies": {
"@radix-ui/react-slot": "1.3.3",
"@radix-ui/react-tooltip": "1.2.16",
"@tanstack/react-query": "5.104.1",
"@tanstack/react-router": "1.170.41",
"class-variance-authority": "0.7.1",
"clsx": "2.1.1",
"lucide-react": "1.52.0",
"openapi-fetch": "0.17.0",
"react": "19.3.0",
"react-dom": "19.3.0",
"react-markdown": "10.1.0",
"remark-gfm": "4.0.1",
"tailwind-merge": "3.7.0",
"uplot": "1.6.32"
},
"devDependencies": {
"@eslint/js": "10.0.1",
"@playwright/test": "1.63.0",
"@tailwindcss/vite": "4.3.3",
"@types/node": "25.9.9",
"@types/react": "19.3.0",
"@types/react-dom": "19.3.0",
"@vitejs/plugin-react": "6.1.1",
"eslint": "10.12.0",
"eslint-plugin-react-hooks": "7.1.1",
"globals": "17.13.0",
"openapi-typescript": "7.13.0",
"tailwindcss": "4.3.3",
"tw-animate-css": "1.4.0",
"typescript": "5.9.3",
"typescript-eslint": "8.71.0",
"vite": "8.3.2",
"vitest": "5.0.3"
}
}