- Add intelligent-router.sh hook for automatic agent routing - Add AUTO-TRIGGER-SUMMARY.md documentation - Add FINAL-INTEGRATION-SUMMARY.md documentation - Complete Prometheus integration (6 commands + 4 tools) - Complete Dexto integration (12 commands + 5 tools) - Enhanced Ralph with access to all agents - Fix /clawd command (removed disable-model-invocation) - Update hooks.json to v5 with intelligent routing - 291 total skills now available - All 21 commands with automatic routing 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
171 lines
6.1 KiB
JavaScript
171 lines
6.1 KiB
JavaScript
import tseslint from '@typescript-eslint/eslint-plugin';
|
|
import tsParser from '@typescript-eslint/parser';
|
|
import js from '@eslint/js';
|
|
import prettier from 'eslint-config-prettier';
|
|
import requireZodDescribe from './eslint-rules/require-zod-describe.js';
|
|
import noOptionalLoggerInConstructor from './eslint-rules/no-optional-logger-in-constructor.js';
|
|
|
|
export default [
|
|
// Base config for all files
|
|
js.configs.recommended,
|
|
{
|
|
linterOptions: {
|
|
reportUnusedDisableDirectives: 'warn',
|
|
},
|
|
},
|
|
|
|
// TypeScript specific config (general rules)
|
|
{
|
|
files: ['**/*.ts'],
|
|
languageOptions: {
|
|
parser: tsParser,
|
|
ecmaVersion: 2022,
|
|
sourceType: 'module',
|
|
globals: {
|
|
console: 'readonly',
|
|
process: 'readonly',
|
|
setTimeout: 'readonly',
|
|
clearTimeout: 'readonly',
|
|
global: 'readonly',
|
|
require: 'readonly',
|
|
__dirname: 'readonly',
|
|
module: 'readonly',
|
|
document: 'readonly',
|
|
window: 'readonly',
|
|
HTMLElement: 'readonly',
|
|
HTMLAnchorElement: 'readonly',
|
|
HTMLImageElement: 'readonly',
|
|
Element: 'readonly',
|
|
Node: 'readonly',
|
|
clearInterval: 'readonly',
|
|
setInterval: 'readonly',
|
|
Buffer: 'readonly',
|
|
URL: 'readonly',
|
|
AbortController: 'readonly',
|
|
AbortSignal: 'readonly',
|
|
structuredClone: 'readonly',
|
|
NodeJS: 'readonly',
|
|
CustomEvent: 'readonly',
|
|
localStorage: 'readonly',
|
|
FileReader: 'readonly',
|
|
fetch: 'readonly',
|
|
URLSearchParams: 'readonly',
|
|
RequestInfo: 'readonly',
|
|
Response: 'readonly',
|
|
RequestInit: 'readonly',
|
|
// Browser Speech Synthesis API globals used in webui
|
|
SpeechSynthesisUtterance: 'readonly',
|
|
SpeechSynthesisVoice: 'readonly',
|
|
},
|
|
},
|
|
plugins: {
|
|
'@typescript-eslint': tseslint,
|
|
},
|
|
rules: {
|
|
'no-console': 'off',
|
|
'no-unused-vars': 'off',
|
|
'@typescript-eslint/explicit-module-boundary-types': 'off',
|
|
'@typescript-eslint/no-explicit-any': 'off',
|
|
'@typescript-eslint/no-unused-vars': [
|
|
'warn',
|
|
{
|
|
argsIgnorePattern: '^_',
|
|
varsIgnorePattern: '^_',
|
|
caughtErrorsIgnorePattern: '^_',
|
|
},
|
|
],
|
|
'no-dupe-class-members': 'off', // Allow TypeScript method overloading
|
|
'no-redeclare': 'off', // Disable base rule - replaced by @typescript-eslint/no-redeclare
|
|
'@typescript-eslint/no-redeclare': 'error', // TS-aware: allows overloads, catches real redeclarations
|
|
'no-restricted-syntax': [
|
|
'error',
|
|
{
|
|
selector:
|
|
'TSTypeReference > TSTypeQuery > Identifier[name="z"] ~ TSQualifiedName > Identifier[name="infer"]',
|
|
message:
|
|
'Use z.output instead of z.infer for better type inference with Zod schemas. z.output includes transformations while z.infer may miss them.',
|
|
},
|
|
{
|
|
selector:
|
|
'TSTypeReference[typeName.type="TSQualifiedName"][typeName.left.name="z"][typeName.right.name="infer"]',
|
|
message:
|
|
'Use z.output instead of z.infer for better type inference with Zod schemas. z.output includes transformations while z.infer may miss them.',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
|
|
// Zod .describe() enforcement for API route files only
|
|
{
|
|
files: ['**/server/src/**/*.ts', '**/api/routes/**/*.ts'],
|
|
plugins: {
|
|
'dexto-custom': {
|
|
rules: {
|
|
'require-zod-describe': requireZodDescribe,
|
|
},
|
|
},
|
|
},
|
|
rules: {
|
|
// Enforce .describe() on Zod schemas for OpenAPI documentation
|
|
// Only applies to API route files where OpenAPI docs are generated
|
|
'dexto-custom/require-zod-describe': [
|
|
'error',
|
|
{
|
|
exemptSchemaNames: [
|
|
// Add schema names here that should be exempt from requiring .describe()
|
|
// Example: 'TestMockSchema', 'InternalConfigSchema'
|
|
],
|
|
},
|
|
],
|
|
},
|
|
},
|
|
|
|
// Prevent optional logger parameters in class constructors
|
|
{
|
|
files: ['packages/core/src/**/*.ts'],
|
|
plugins: {
|
|
'dexto-custom': {
|
|
rules: {
|
|
'no-optional-logger-in-constructor': noOptionalLoggerInConstructor,
|
|
},
|
|
},
|
|
},
|
|
rules: {
|
|
// Enforce required logger parameters in class constructors
|
|
// Logger is a critical dependency that should always be provided
|
|
'dexto-custom/no-optional-logger-in-constructor': 'error',
|
|
},
|
|
},
|
|
|
|
// Ignore patterns (keep existing ignores)
|
|
{
|
|
ignores: [
|
|
'node_modules/**',
|
|
'**/dist/**',
|
|
'.cursor/**',
|
|
'public/**',
|
|
// Use the package-local ESLint config for Web UI instead of root config
|
|
'packages/webui/**',
|
|
'**/build/**',
|
|
'**/coverage/**',
|
|
'test-temp/**',
|
|
'**/*.min.js',
|
|
'**/generated/**',
|
|
'docs/.docusaurus/**',
|
|
'scripts/dev.js',
|
|
'scripts/dev-status.js',
|
|
'packages/cli/src/web/client/script.js',
|
|
'packages/webui/tailwind.config.js',
|
|
'**/.venv/**',
|
|
'**/venv/**',
|
|
'**/env/**',
|
|
'**/__pycache__/**',
|
|
'**/*.pyc',
|
|
'**/*.pyo',
|
|
'**/*.pyd',
|
|
],
|
|
},
|
|
|
|
prettier,
|
|
];
|