mirror of
https://github.com/anand34577/ferrum.git
synced 2026-09-12 05:48:58 +00:00
22c1dd382c
- User-scoped API keys (Profile > API Keys) for 3rd-party REST API access
and MCP clients, each locked to one scope at creation, with expiry,
revocation, and last-used tracking.
- A hand-rolled MCP (Model Context Protocol) server exposing the fleet
(connections, nodes, guests, storage, pools, alerts, cluster status) as
read tools plus one admin-gated power-action tool, so Claude Code/Desktop
or any other MCP client can query and operate the fleet directly.
- Both the REST API and MCP are off by default and toggleable instance-wide
from Settings > API & MCP, enforced live on every request.
- Admin-managed AI providers (any OpenAI-chat-completions-compatible
endpoint) backing the AI Assistant's tool-calling loop, replacing the
single hardcoded provider.
- A built-in, zero-config, no-API-key local provider backed by Needle 2
(internal/needle) for fully offline tool-calling, wired in as a one-click
preset. Requires the operator to separately download the Needle 2 binary
and point FERRUM_NEEDLE_BIN at it -- Ferrum never fetches executable
content from the network itself; see README "Built-in LLM (Needle 2)".
- System settings (CORS allow-list, instance-wide toggles) moved to the
admin Settings UI; environment variables are now scoped to true
bootstrap-level config only (listen address, TLS, DB connection, secret,
optional Needle binary path).
- Fixed: node Journal tab 502'ing with "unexpected end of JSON input" on an
empty response, and separately with a decode error on PVE versions that
return a bare-string journal line instead of the documented {n,t} object.
- Fixed: bottom content padding disappearing on every page except the AI
Assistant (an unconditional h-full on the content wrapper let overflowing
content bleed through where the padding should render).
- Fixed: Profile page felt cramped despite a wide viewport (stray max-w-2xl
cap not present on the equivalent Settings page).
- Test coverage added for the previously-untested MCP package and the new
Needle adapter (20 new Go tests), plus a regression test for the journal
decode fix.
69 lines
1.9 KiB
JSON
69 lines
1.9 KiB
JSON
{
|
|
"name": "ferrum-web",
|
|
"private": true,
|
|
"version": "0.0.0",
|
|
"type": "module",
|
|
"license": "MIT",
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "https://github.com/anand34577/ferrum"
|
|
},
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "tsc -b && vite build",
|
|
"lint": "oxlint",
|
|
"preview": "vite preview",
|
|
"test": "vitest run"
|
|
},
|
|
"dependencies": {
|
|
"@novnc/novnc": "^1.5.0",
|
|
"@radix-ui/react-checkbox": "^1.3.11",
|
|
"@radix-ui/react-dialog": "^1.1.23",
|
|
"@radix-ui/react-dropdown-menu": "^2.1.24",
|
|
"@radix-ui/react-select": "^2.3.7",
|
|
"@radix-ui/react-switch": "^1.3.7",
|
|
"@radix-ui/react-tabs": "^1.1.21",
|
|
"@radix-ui/react-tooltip": "^1.2.16",
|
|
"@tailwindcss/vite": "^4.3.3",
|
|
"@tanstack/react-query": "^5.102.7",
|
|
"@tanstack/react-table": "^8.21.3",
|
|
"@xterm/addon-fit": "^0.11.0",
|
|
"@xterm/xterm": "^6.0.0",
|
|
"@xyflow/react": "^12.11.5",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"cmdk": "^1.1.1",
|
|
"framer-motion": "^13.1.1",
|
|
"html-to-image": "^1.11.13",
|
|
"katex": "^0.18.5",
|
|
"lucide-react": "^1.34.0",
|
|
"react": "^19.2.8",
|
|
"react-dom": "^19.2.8",
|
|
"react-grid-layout": "^2.2.4",
|
|
"react-markdown": "^10.1.0",
|
|
"react-router-dom": "^7.18.2",
|
|
"recharts": "^3.10.1",
|
|
"rehype-katex": "^7.0.1",
|
|
"remark-gfm": "^4.0.1",
|
|
"remark-math": "^6.0.0",
|
|
"sonner": "^2.0.8",
|
|
"tailwind-merge": "^3.6.0",
|
|
"tailwindcss": "^4.3.3",
|
|
"tw-animate-css": "^1.4.0"
|
|
},
|
|
"devDependencies": {
|
|
"@testing-library/jest-dom": "^7.0.1",
|
|
"@testing-library/react": "^16.3.2",
|
|
"@testing-library/user-event": "^14.6.6",
|
|
"@types/node": "^24.13.3",
|
|
"@types/react": "^19.2.18",
|
|
"@types/react-dom": "^19.2.4",
|
|
"@vitejs/plugin-react": "^6.1.0",
|
|
"jsdom": "^30.0.1",
|
|
"oxlint": "^1.79.0",
|
|
"typescript": "~6.0.2",
|
|
"vite": "^8.2.2",
|
|
"vitest": "^4.1.11"
|
|
}
|
|
}
|