learning_ai_common_plat/eslint.config.js
saravanakumardb1 2565714c52 feat(local-llm): add Mission Control dashboard v1
Next.js 16 dashboard for monitoring and managing the local LLM stack.
Runs on port 3100 with dark theme using ByteLyst design tokens.

API routes:
- GET/POST /api/ollama — model list, running status, load/unload/generate
- GET /api/whisper — binary discovery, GGML model inventory
- GET /api/system — chip info, RAM/disk usage, brew package versions

Dashboard UI:
- Top stats row: Ollama status, model count, Whisper status, RAM usage
- Ollama models panel with load/unload actions, LOADED badge, details
- System panel with progress bars for RAM and disk
- Whisper.cpp panel with binary list and model inventory
- Brew packages panel with version tracking
- Basic prompt modal with Cmd+Enter shortcut
- Auto-refresh every 15 seconds

Also excludes __LOCAL_LLMs/ from root ESLint config (dashboard has its
own config and uses browser globals not available in Node.js context).

Tech: Next.js 16, React 19, TailwindCSS v4, Lucide icons, TypeScript
2026-02-19 13:02:48 -08:00

81 lines
2.1 KiB
JavaScript

import js from '@eslint/js';
import tseslint from '@typescript-eslint/eslint-plugin';
import tsparser from '@typescript-eslint/parser';
export default [
{
ignores: [
'dist/**',
'node_modules/**',
'coverage/**',
'*.config.js',
'*.config.ts',
'**/dist/**',
'__LOCAL_LLMs/**',
],
},
js.configs.recommended,
{
files: ['**/*.ts', '**/*.tsx'],
languageOptions: {
parser: tsparser,
parserOptions: {
ecmaVersion: 2022,
sourceType: 'module',
// project: true, // Disabled for now
},
globals: {
process: 'readonly',
Buffer: 'readonly',
__dirname: 'readonly',
__filename: 'readonly',
Headers: 'readonly',
TextEncoder: 'readonly',
TextDecoder: 'readonly',
RequestInit: 'readonly',
HeadersInit: 'readonly',
Response: 'readonly',
Request: 'readonly',
fetch: 'readonly',
console: 'readonly',
performance: 'readonly',
AbortSignal: 'readonly',
expect: 'readonly',
describe: 'readonly',
it: 'readonly',
test: 'readonly',
beforeEach: 'readonly',
afterEach: 'readonly',
beforeAll: 'readonly',
afterAll: 'readonly',
crypto: 'readonly',
localStorage: 'readonly',
sessionStorage: 'readonly',
ReactNode: 'readonly',
React: 'readonly',
JSX: 'readonly',
},
},
plugins: {
'@typescript-eslint': tseslint,
},
rules: {
// TypeScript specific rules
'@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-explicit-any': 'warn',
// General rules
'no-console': 'warn',
'no-debugger': 'error',
'prefer-const': 'error',
'no-var': 'error',
'no-unused-vars': 'off', // Use TypeScript version
// Import rules - disabled for now
// 'sort-imports': ['error', { ignoreDeclarationSort: true }],
},
},
];