@famgia/omnify-ai-guides 2.0.15

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.
Files changed (91) hide show
  1. package/README.md +105 -0
  2. package/dist/chunk-RCTEXK7C.js +549 -0
  3. package/dist/chunk-RCTEXK7C.js.map +1 -0
  4. package/dist/config/rules.yaml +524 -0
  5. package/dist/index.cjs +587 -0
  6. package/dist/index.cjs.map +1 -0
  7. package/dist/index.d.cts +55 -0
  8. package/dist/index.d.ts +55 -0
  9. package/dist/index.js +26 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/knowledge/agents/architect.md.stub +150 -0
  12. package/dist/knowledge/agents/developer.md.stub +190 -0
  13. package/dist/knowledge/agents/reviewer.md.stub +134 -0
  14. package/dist/knowledge/agents/tester.md.stub +196 -0
  15. package/dist/knowledge/checklists/backend.md.stub +112 -0
  16. package/dist/knowledge/checklists/react.md.stub +108 -0
  17. package/dist/knowledge/claude-rules/laravel-controllers.md.stub +57 -0
  18. package/dist/knowledge/claude-rules/laravel-migrations.md.stub +47 -0
  19. package/dist/knowledge/claude-rules/laravel-tests.md.stub +52 -0
  20. package/dist/knowledge/claude-rules/naming.md.stub +369 -0
  21. package/dist/knowledge/claude-rules/performance.md.stub +256 -0
  22. package/dist/knowledge/claude-rules/php-standards.md.stub +305 -0
  23. package/dist/knowledge/claude-rules/react-components.md.stub +67 -0
  24. package/dist/knowledge/claude-rules/schema-yaml.md.stub +83 -0
  25. package/dist/knowledge/claude-rules/security.md.stub +164 -0
  26. package/dist/knowledge/cursor-rules/antd-deprecations.mdc.stub +62 -0
  27. package/dist/knowledge/cursor-rules/basemodel-readonly.mdc.stub +66 -0
  28. package/dist/knowledge/cursor-rules/baserequest-readonly.mdc.stub +74 -0
  29. package/dist/knowledge/cursor-rules/baseresource-readonly.mdc.stub +78 -0
  30. package/dist/knowledge/cursor-rules/laravel-controller.mdc.stub +421 -0
  31. package/dist/knowledge/cursor-rules/laravel-request.mdc.stub +112 -0
  32. package/dist/knowledge/cursor-rules/laravel-resource.mdc.stub +73 -0
  33. package/dist/knowledge/cursor-rules/laravel-review.mdc.stub +69 -0
  34. package/dist/knowledge/cursor-rules/laravel-testing.mdc.stub +138 -0
  35. package/dist/knowledge/cursor-rules/laravel.mdc.stub +138 -0
  36. package/dist/knowledge/cursor-rules/migrations-workflow.mdc.stub +224 -0
  37. package/dist/knowledge/cursor-rules/model-editable.mdc.stub +120 -0
  38. package/dist/knowledge/cursor-rules/omnify-migrations.mdc.stub +109 -0
  39. package/dist/knowledge/cursor-rules/omnify-schema.mdc.stub +358 -0
  40. package/dist/knowledge/cursor-rules/omnify.mdc.stub +58 -0
  41. package/dist/knowledge/cursor-rules/react-design.mdc.stub +693 -0
  42. package/dist/knowledge/cursor-rules/react-form.mdc.stub +292 -0
  43. package/dist/knowledge/cursor-rules/react-services.mdc.stub +304 -0
  44. package/dist/knowledge/cursor-rules/react.mdc.stub +336 -0
  45. package/dist/knowledge/cursor-rules/request-editable.mdc.stub +111 -0
  46. package/dist/knowledge/cursor-rules/resource-editable.mdc.stub +125 -0
  47. package/dist/knowledge/cursor-rules/schema-create.mdc.stub +440 -0
  48. package/dist/knowledge/cursor-rules/validation-rules.mdc.stub +181 -0
  49. package/dist/knowledge/laravel/README.md.stub +59 -0
  50. package/dist/knowledge/laravel/architecture.md.stub +424 -0
  51. package/dist/knowledge/laravel/authentication.md.stub +588 -0
  52. package/dist/knowledge/laravel/controller.md.stub +484 -0
  53. package/dist/knowledge/laravel/datetime.md.stub +334 -0
  54. package/dist/knowledge/laravel/migrations-team.md.stub +376 -0
  55. package/dist/knowledge/laravel/openapi.md.stub +449 -0
  56. package/dist/knowledge/laravel/request.md.stub +450 -0
  57. package/dist/knowledge/laravel/resource.md.stub +516 -0
  58. package/dist/knowledge/laravel/service.md.stub +503 -0
  59. package/dist/knowledge/laravel/testing.md.stub +1504 -0
  60. package/dist/knowledge/omnify/antdesign-guide.md.stub +401 -0
  61. package/dist/knowledge/omnify/config-guide.md.stub +405 -0
  62. package/dist/knowledge/omnify/japan-guide.md.stub +186 -0
  63. package/dist/knowledge/omnify/laravel-guide.md.stub +61 -0
  64. package/dist/knowledge/omnify/partial-schema-guide.md.stub +353 -0
  65. package/dist/knowledge/omnify/react-form-guide.md.stub +225 -0
  66. package/dist/knowledge/omnify/schema-guide.md.stub +144 -0
  67. package/dist/knowledge/omnify/typescript-guide.md.stub +337 -0
  68. package/dist/knowledge/react/README.md.stub +221 -0
  69. package/dist/knowledge/react/antd-guide.md +528 -0
  70. package/dist/knowledge/react/antd-guide.md.stub +528 -0
  71. package/dist/knowledge/react/checklist.md.stub +108 -0
  72. package/dist/knowledge/react/datetime-guide.md.stub +137 -0
  73. package/dist/knowledge/react/design-philosophy.md.stub +363 -0
  74. package/dist/knowledge/react/i18n-guide.md.stub +211 -0
  75. package/dist/knowledge/react/laravel-integration.md.stub +181 -0
  76. package/dist/knowledge/react/service-pattern.md.stub +180 -0
  77. package/dist/knowledge/react/tanstack-query.md.stub +339 -0
  78. package/dist/knowledge/react/types-guide.md +669 -0
  79. package/dist/knowledge/react/types-guide.md.stub +669 -0
  80. package/dist/knowledge/workflows/bug-fix.md.stub +201 -0
  81. package/dist/knowledge/workflows/code-review.md.stub +164 -0
  82. package/dist/knowledge/workflows/new-feature.md.stub +327 -0
  83. package/dist/plugin-M95GyBll.d.cts +191 -0
  84. package/dist/plugin-M95GyBll.d.ts +191 -0
  85. package/dist/plugin.cjs +573 -0
  86. package/dist/plugin.cjs.map +1 -0
  87. package/dist/plugin.d.cts +2 -0
  88. package/dist/plugin.d.ts +2 -0
  89. package/dist/plugin.js +15 -0
  90. package/dist/plugin.js.map +1 -0
  91. package/package.json +53 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/plugin.ts","../src/generator.ts","../src/adapters/cursor.ts","../src/adapters/claude.ts","../src/adapters/antigravity.ts","../src/adapters/index.ts"],"sourcesContent":["/**\n * AI Guides Plugin for Omnify\n *\n * Generates AI guides for Cursor, Claude, and Antigravity\n */\n\nimport { readFileSync } from 'node:fs';\nimport type { OmnifyPlugin, GeneratorContext, GeneratorOutput } from '@famgia/omnify-types';\nimport { generateAIGuides, getAvailableCategories } from './generator.js';\nimport type { GuideCategory } from './adapters/types.js';\n\n/**\n * Gets the plugin version from package.json\n */\nfunction getPluginVersion(): string {\n try {\n const pkgPath = new URL('../package.json', import.meta.url);\n const pkgContent = readFileSync(pkgPath, 'utf-8');\n const pkg = JSON.parse(pkgContent) as { version: string };\n return pkg.version;\n } catch {\n return '0.0.0';\n }\n}\n\n/**\n * AI Guides plugin options\n */\nexport interface AIGuidesPluginOptions {\n /**\n * Categories to generate\n * @default ['omnify', 'laravel', 'react'] (all)\n */\n categories?: GuideCategory[];\n\n /**\n * Base path for Laravel files\n * @default 'app'\n */\n laravelBasePath?: string;\n\n /**\n * Base path for TypeScript/React files\n * @default 'resources/ts'\n */\n typescriptBasePath?: string;\n\n /**\n * Adapters to use\n * @default ['cursor', 'claude', 'antigravity'] (all)\n */\n adapters?: ('cursor' | 'claude' | 'antigravity')[];\n}\n\n/**\n * Create AI Guides plugin\n */\nexport default function aiGuidesPlugin(options: AIGuidesPluginOptions = {}): OmnifyPlugin {\n const resolvedOptions = {\n categories: options.categories ?? getAvailableCategories(),\n laravelBasePath: options.laravelBasePath ?? 'app',\n typescriptBasePath: options.typescriptBasePath ?? 'resources/ts',\n adapters: options.adapters,\n };\n\n return {\n name: '@famgia/omnify-ai-guides',\n version: getPluginVersion(),\n\n generators: [\n {\n name: 'ai-guides',\n description: 'Generate AI assistant guides (Cursor, Claude, Antigravity)',\n\n generate: async (ctx: GeneratorContext): Promise<GeneratorOutput[]> => {\n const result = generateAIGuides(ctx.cwd, {\n categories: resolvedOptions.categories,\n adapters: resolvedOptions.adapters,\n placeholders: {\n LARAVEL_BASE: resolvedOptions.laravelBasePath,\n LARAVEL_ROOT: '',\n TYPESCRIPT_BASE: resolvedOptions.typescriptBasePath,\n },\n });\n\n // Log summary\n const claudeCount = result.counts['claude'] || 0;\n const cursorCount = result.counts['cursor'] || 0;\n const antigravityCount = result.counts['antigravity'] || 0;\n\n const parts: string[] = [];\n if (claudeCount > 0) parts.push(`${claudeCount} Claude`);\n if (cursorCount > 0) parts.push(`${cursorCount} Cursor`);\n if (antigravityCount > 0) parts.push(`${antigravityCount} Antigravity`);\n\n ctx.logger.info(`Generated ${parts.join(', ')} files`);\n\n if (result.errors?.length) {\n for (const error of result.errors) {\n ctx.logger.warn(error);\n }\n }\n\n // Return empty outputs (files are written directly)\n return [];\n },\n },\n ],\n };\n}\n\nexport { generateAIGuides, shouldGenerateAIGuides, getAvailableAdapters, getAvailableCategories } from './generator.js';\nexport type { AIGuidesOptions, AIGuidesResult, GuideCategory } from './adapters/types.js';\n","/**\n * AI Guides Generator\n *\n * Generates AI guides from knowledge base with category filtering\n */\n\nimport { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync } from 'node:fs';\nimport { resolve, dirname, join, basename } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { parse as parseYaml } from 'yaml';\nimport { getAdapters } from './adapters/index.js';\nimport type { AIGuidesResult, AIGuidesOptions, RulesConfig, GuideCategory } from './adapters/types.js';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * Get knowledge directory path\n */\nfunction getKnowledgeDir(): string {\n const possiblePaths = [\n // Dev: running in src\n resolve(__dirname, 'knowledge'),\n // Dist: running from dist/\n resolve(__dirname, '../knowledge'),\n // Installed package: in node_modules\n resolve(__dirname, '../../knowledge'),\n ];\n\n for (const path of possiblePaths) {\n if (existsSync(path)) {\n return path;\n }\n }\n\n throw new Error(`AI guides knowledge directory not found. Tried: ${possiblePaths.join(', ')}`);\n}\n\n/**\n * Get config directory path\n */\nfunction getConfigDir(): string {\n const possiblePaths = [\n // Dev: running in src\n resolve(__dirname, 'config'),\n // Dist: running from dist/\n resolve(__dirname, '../config'),\n // Installed package: in node_modules\n resolve(__dirname, '../../config'),\n ];\n\n for (const path of possiblePaths) {\n if (existsSync(path)) {\n return path;\n }\n }\n\n throw new Error(`AI guides config directory not found. Tried: ${possiblePaths.join(', ')}`);\n}\n\n/**\n * Load rules config\n */\nfunction loadRulesConfig(): RulesConfig {\n const configDir = getConfigDir();\n const rulesPath = join(configDir, 'rules.yaml');\n\n if (!existsSync(rulesPath)) {\n throw new Error(`Rules config not found: ${rulesPath}`);\n }\n\n const content = readFileSync(rulesPath, 'utf-8');\n return parseYaml(content) as RulesConfig;\n}\n\n/**\n * Load knowledge file\n */\nfunction loadKnowledgeFile(source: string): string {\n const knowledgeDir = getKnowledgeDir();\n const filePath = join(knowledgeDir, source);\n\n if (!existsSync(filePath)) {\n throw new Error(`Knowledge file not found: ${filePath}`);\n }\n\n return readFileSync(filePath, 'utf-8');\n}\n\n/**\n * Replace placeholders in content\n */\nfunction replacePlaceholders(content: string, placeholders: Record<string, string>): string {\n let result = content;\n for (const [key, value] of Object.entries(placeholders)) {\n result = result.replace(new RegExp(`\\\\{\\\\{${key}\\\\}\\\\}`, 'g'), value);\n }\n return result;\n}\n\n/**\n * Write file (auto-create directory)\n */\nfunction writeOutputFile(filePath: string, content: string, dryRun: boolean): void {\n if (dryRun) {\n console.log(`[DRY RUN] Would write: ${filePath}`);\n return;\n }\n\n const dir = dirname(filePath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n writeFileSync(filePath, content);\n}\n\n/**\n * Check if a rule matches the specified categories\n */\nfunction matchesCategory(ruleCategory: string, categories?: GuideCategory[]): boolean {\n if (!categories || categories.length === 0) {\n return true; // No filter = all categories\n }\n\n // Extract category from rule.category (e.g., \"guides/laravel\" -> \"laravel\")\n const parts = ruleCategory.split('/');\n const category = parts[parts.length - 1] as GuideCategory;\n\n return categories.includes(category);\n}\n\n/**\n * Check if a source file matches the specified categories\n */\nfunction sourceMatchesCategory(source: string, categories?: GuideCategory[]): boolean {\n if (!categories || categories.length === 0) {\n return true; // No filter = all categories\n }\n\n // Extract category from source path (e.g., \"cursor-rules/laravel.mdc.stub\" -> \"laravel\")\n const filename = basename(source).toLowerCase();\n\n for (const category of categories) {\n if (filename.startsWith(category)) {\n return true;\n }\n // Also check folder name\n if (source.includes(`/${category}/`) || source.startsWith(`${category}/`)) {\n return true;\n }\n }\n\n // Special handling for react-* files\n if (categories.includes('react')) {\n if (filename.startsWith('react') || filename.includes('antd')) {\n return true;\n }\n }\n\n // Special handling for omnify/schema files\n if (categories.includes('omnify')) {\n if (\n filename.startsWith('omnify') ||\n filename.startsWith('schema') ||\n filename.startsWith('validation') ||\n filename.includes('migration')\n ) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Generate AI Guides\n */\nexport function generateAIGuides(rootDir: string, options: AIGuidesOptions = {}): AIGuidesResult {\n const config = loadRulesConfig();\n const adapters = getAdapters(options.adapters);\n const dryRun = options.dryRun ?? false;\n const categories = options.categories;\n\n // Merge placeholders\n const placeholders = {\n ...config.placeholders,\n ...options.placeholders,\n };\n\n const result: AIGuidesResult = {\n counts: {},\n files: [],\n };\n\n // Initialize adapter counts\n for (const adapter of adapters) {\n result.counts[adapter.name] = 0;\n }\n\n // Process guides with category filter\n for (const rule of config.guides) {\n // Skip if doesn't match category filter\n if (!matchesCategory(rule.category, categories)) {\n continue;\n }\n\n try {\n const content = loadKnowledgeFile(rule.source);\n\n for (const adapter of adapters) {\n if (!adapter.isEnabled(rule)) {\n continue;\n }\n\n const transformed = adapter.transform(content, rule, placeholders);\n const outputPath = adapter.getOutputPath(rule);\n const fullPath = resolve(rootDir, adapter.outputDir, outputPath);\n\n writeOutputFile(fullPath, transformed, dryRun);\n result.files.push(fullPath);\n result.counts[adapter.name] = (result.counts[adapter.name] ?? 0) + 1;\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n result.errors = result.errors ?? [];\n result.errors.push(`Error processing ${rule.id}: ${message}`);\n }\n }\n\n // Process Cursor Rules (direct copy with frontmatter)\n const cursorAdapter = adapters.find((a) => a.name === 'cursor');\n if (cursorAdapter && config.cursorRules) {\n for (const rule of config.cursorRules) {\n // Skip if doesn't match category filter\n if (!sourceMatchesCategory(rule.source, categories)) {\n continue;\n }\n\n try {\n const content = loadKnowledgeFile(rule.source);\n const transformed = replacePlaceholders(content, placeholders);\n const filename = basename(rule.source).replace('.mdc.stub', '.mdc').replace('.md.stub', '.md');\n const fullPath = resolve(rootDir, cursorAdapter.outputDir, filename);\n\n writeOutputFile(fullPath, transformed, dryRun);\n result.files.push(fullPath);\n result.counts[cursorAdapter.name] = (result.counts[cursorAdapter.name] ?? 0) + 1;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n result.errors = result.errors ?? [];\n result.errors.push(`Error processing cursor rule ${rule.source}: ${message}`);\n }\n }\n }\n\n // Process Claude Rules (strip frontmatter)\n const claudeAdapter = adapters.find((a) => a.name === 'claude');\n if (claudeAdapter && config.claudeRules) {\n for (const rule of config.claudeRules) {\n // Skip if doesn't match category filter\n if (!sourceMatchesCategory(rule.source, categories)) {\n continue;\n }\n\n try {\n const content = loadKnowledgeFile(rule.source);\n const strippedContent = stripFrontmatter(content);\n const transformed = replacePlaceholders(strippedContent, placeholders);\n const filename = basename(rule.source)\n .replace('.mdc.stub', '.mdc')\n .replace('.md.stub', '.md')\n .replace('.mdc', '.md');\n const fullPath = resolve(rootDir, '.claude/rules/omnify', filename);\n\n writeOutputFile(fullPath, transformed, dryRun);\n result.files.push(fullPath);\n result.counts[claudeAdapter.name] = (result.counts[claudeAdapter.name] ?? 0) + 1;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n result.errors = result.errors ?? [];\n result.errors.push(`Error processing claude rule ${rule.source}: ${message}`);\n }\n }\n }\n\n // Process Antigravity Rules\n const antigravityAdapterInstance = adapters.find((a) => a.name === 'antigravity');\n if (antigravityAdapterInstance && config.antigravityRules) {\n for (const rule of config.antigravityRules) {\n // Skip if doesn't match category filter\n if (!sourceMatchesCategory(rule.source, categories)) {\n continue;\n }\n\n try {\n const content = loadKnowledgeFile(rule.source);\n const transformed = transformForAntigravity(content, rule, placeholders);\n const filename = basename(rule.source)\n .replace('.mdc.stub', '.mdc')\n .replace('.md.stub', '.md')\n .replace('.mdc', '.md');\n const fullPath = resolve(rootDir, antigravityAdapterInstance.outputDir, filename);\n\n writeOutputFile(fullPath, transformed, dryRun);\n result.files.push(fullPath);\n result.counts[antigravityAdapterInstance.name] = (result.counts[antigravityAdapterInstance.name] ?? 0) + 1;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n result.errors = result.errors ?? [];\n result.errors.push(`Error processing antigravity rule ${rule.source}: ${message}`);\n }\n }\n }\n\n return result;\n}\n\n/**\n * Transform for Antigravity format\n */\nfunction transformForAntigravity(\n content: string,\n rule: { source: string; priority?: string; tags?: string[] },\n placeholders: Record<string, string>\n): string {\n let transformed = replacePlaceholders(content, placeholders);\n\n if (transformed.startsWith('---')) {\n const endIndex = transformed.indexOf('---', 3);\n if (endIndex !== -1) {\n const existingFrontmatter = transformed.substring(3, endIndex).trim();\n const bodyContent = transformed.substring(endIndex + 3).trim();\n\n const id = basename(rule.source)\n .replace('.mdc.stub', '')\n .replace('.md.stub', '')\n .replace('.mdc', '')\n .replace('.md', '');\n const description = extractYamlValue(existingFrontmatter, 'description') || id;\n const globs = extractYamlArray(existingFrontmatter, 'globs');\n const priority = rule.priority || 'medium';\n const tags = rule.tags || [];\n\n const lines: string[] = [`id: ${id}`, `description: \"${description}\"`, `priority: ${priority}`];\n\n if (globs.length > 0) {\n lines.push('globs:');\n for (const glob of globs) {\n lines.push(` - \"${glob}\"`);\n }\n }\n\n if (tags.length > 0) {\n lines.push('tags:');\n for (const tag of tags) {\n lines.push(` - ${tag}`);\n }\n }\n\n return `---\\n${lines.join('\\n')}\\n---\\n\\n${bodyContent}`;\n }\n }\n\n return transformed;\n}\n\n/**\n * Extract YAML value\n */\nfunction extractYamlValue(yaml: string, key: string): string | undefined {\n const match = yaml.match(new RegExp(`${key}:\\\\s*[\"']?([^\"'\\\\n]+)[\"']?`));\n return match?.[1]?.trim();\n}\n\n/**\n * Extract YAML array\n */\nfunction extractYamlArray(yaml: string, key: string): string[] {\n const match = yaml.match(new RegExp(`${key}:\\\\s*\\\\[([^\\\\]]+)\\\\]`));\n if (match?.[1]) {\n return match[1].split(',').map((g) => g.trim().replace(/[\"']/g, ''));\n }\n return [];\n}\n\n/**\n * Strip frontmatter (for Claude Code)\n */\nfunction stripFrontmatter(content: string): string {\n if (!content.startsWith('---')) {\n return content;\n }\n\n const endIndex = content.indexOf('---', 3);\n if (endIndex === -1) {\n return content;\n }\n\n return content.substring(endIndex + 3).trim();\n}\n\n/**\n * Check if AI guides need to be generated\n */\nexport function shouldGenerateAIGuides(rootDir: string): boolean {\n const claudeDir = resolve(rootDir, '.claude/omnify/guides');\n const cursorDir = resolve(rootDir, '.cursor/rules/omnify');\n\n if (!existsSync(claudeDir) || !existsSync(cursorDir)) {\n return true;\n }\n\n try {\n const claudeFiles = readdirSync(claudeDir, { recursive: true });\n const cursorFiles = readdirSync(cursorDir);\n\n return claudeFiles.length === 0 || cursorFiles.length === 0;\n } catch {\n return true;\n }\n}\n\n/**\n * Get available adapter names\n */\nexport function getAvailableAdapters(): string[] {\n return getAdapters().map((a) => a.name);\n}\n\n/**\n * Get available categories\n */\nexport function getAvailableCategories(): GuideCategory[] {\n return ['omnify', 'laravel', 'react'];\n}\n","/**\n * Cursor AI Adapter\n *\n * Generates .mdc rule files with frontmatter for Cursor editor\n */\n\nimport type { AIAdapter, GuideRule, CursorTargetConfig } from './types.js';\n\n/**\n * Replace placeholders in content\n */\nfunction replacePlaceholders(content: string, placeholders: Record<string, string>): string {\n let result = content;\n for (const [key, value] of Object.entries(placeholders)) {\n result = result.replace(new RegExp(`\\\\{\\\\{${key}\\\\}\\\\}`, 'g'), value);\n }\n return result;\n}\n\n/**\n * Cursor adapter\n */\nexport const cursorAdapter: AIAdapter = {\n name: 'cursor',\n outputDir: '.cursor/rules/omnify',\n\n transform(content: string, rule: GuideRule, placeholders: Record<string, string>): string {\n const target = rule.targets.cursor as CursorTargetConfig | undefined;\n\n // Replace placeholders in content\n let transformedContent = replacePlaceholders(content, placeholders);\n\n // If already has frontmatter, return as-is (cursor-rules/)\n if (transformedContent.startsWith('---')) {\n return transformedContent;\n }\n\n // Add frontmatter\n const description = target?.description || '';\n const globs = target?.globs || [];\n const alwaysApply = target?.alwaysApply ?? false;\n\n const frontmatter = `---\ndescription: \"${description}\"\nglobs: ${JSON.stringify(globs)}\nalwaysApply: ${alwaysApply}\n---\n\n`;\n\n return frontmatter + transformedContent;\n },\n\n getFilename(rule: GuideRule): string {\n const target = rule.targets.cursor as CursorTargetConfig | undefined;\n if (target?.filename) {\n return target.filename;\n }\n return `${rule.id}.mdc`;\n },\n\n isEnabled(rule: GuideRule): boolean {\n const target = rule.targets.cursor;\n return target?.enabled ?? false;\n },\n\n getOutputPath(rule: GuideRule): string {\n const filename = this.getFilename(rule);\n // Cursor uses flat structure (ignores category)\n return filename;\n },\n};\n\nexport default cursorAdapter;\n","/**\n * Claude AI Adapter\n *\n * Generates .md guide files for Claude Code\n */\n\nimport type { AIAdapter, GuideRule, ClaudeTargetConfig } from './types.js';\n\n/**\n * Replace placeholders in content\n */\nfunction replacePlaceholders(content: string, placeholders: Record<string, string>): string {\n let result = content;\n for (const [key, value] of Object.entries(placeholders)) {\n result = result.replace(new RegExp(`\\\\{\\\\{${key}\\\\}\\\\}`, 'g'), value);\n }\n return result;\n}\n\n/**\n * Claude adapter\n */\nexport const claudeAdapter: AIAdapter = {\n name: 'claude',\n outputDir: '.claude/omnify',\n\n transform(content: string, _rule: GuideRule, placeholders: Record<string, string>): string {\n // Claude uses plain markdown, just replace placeholders\n return replacePlaceholders(content, placeholders);\n },\n\n getFilename(rule: GuideRule): string {\n const target = rule.targets.claude as ClaudeTargetConfig | undefined;\n if (target?.filename) {\n return target.filename;\n }\n return `${rule.id}.md`;\n },\n\n isEnabled(rule: GuideRule): boolean {\n const target = rule.targets.claude;\n return target?.enabled ?? false;\n },\n\n getOutputPath(rule: GuideRule): string {\n const target = rule.targets.claude as ClaudeTargetConfig | undefined;\n const filename = this.getFilename(rule);\n const subdir = target?.subdir || rule.category;\n\n if (subdir) {\n return `${subdir}/${filename}`;\n }\n return filename;\n },\n};\n\nexport default claudeAdapter;\n","/**\n * Antigravity AI Adapter\n *\n * Generates .md rule files with YAML frontmatter for Antigravity AI\n */\n\nimport type { AIAdapter, GuideRule, AITargetConfig } from './types.js';\n\n/**\n * Antigravity-specific target config\n */\nexport interface AntigravityTargetConfig extends AITargetConfig {\n /** Description */\n description?: string;\n /** Glob patterns */\n globs?: string[];\n /** Priority (high, medium, low) */\n priority?: 'high' | 'medium' | 'low';\n /** Tags */\n tags?: string[];\n}\n\n/**\n * Replace placeholders in content\n */\nfunction replacePlaceholders(content: string, placeholders: Record<string, string>): string {\n let result = content;\n for (const [key, value] of Object.entries(placeholders)) {\n result = result.replace(new RegExp(`\\\\{\\\\{${key}\\\\}\\\\}`, 'g'), value);\n }\n return result;\n}\n\n/**\n * Antigravity adapter\n * Official docs: https://antigravity.im/documentation\n * Rules location: .agent/rules/\n */\nexport const antigravityAdapter: AIAdapter = {\n name: 'antigravity',\n outputDir: '.agent/rules/omnify',\n\n transform(content: string, rule: GuideRule, placeholders: Record<string, string>): string {\n const target = rule.targets.antigravity as AntigravityTargetConfig | undefined;\n\n // Replace placeholders in content\n let transformedContent = replacePlaceholders(content, placeholders);\n\n // If already has frontmatter, convert it\n if (transformedContent.startsWith('---')) {\n const endIndex = transformedContent.indexOf('---', 3);\n if (endIndex !== -1) {\n const existingFrontmatter = transformedContent.substring(3, endIndex).trim();\n const bodyContent = transformedContent.substring(endIndex + 3).trim();\n\n const antigravityFrontmatter = buildAntigravityFrontmatter(rule, target, existingFrontmatter);\n return `---\\n${antigravityFrontmatter}---\\n\\n${bodyContent}`;\n }\n }\n\n // Add frontmatter\n const frontmatter = buildAntigravityFrontmatter(rule, target);\n return `---\\n${frontmatter}---\\n\\n${transformedContent}`;\n },\n\n getFilename(rule: GuideRule): string {\n const target = rule.targets.antigravity as AntigravityTargetConfig | undefined;\n if (target?.filename) {\n return target.filename;\n }\n return `${rule.id}.md`;\n },\n\n isEnabled(rule: GuideRule): boolean {\n const target = rule.targets.antigravity;\n return target?.enabled ?? false;\n },\n\n getOutputPath(rule: GuideRule): string {\n const filename = this.getFilename(rule);\n // Antigravity uses flat structure (ignores category)\n return filename;\n },\n};\n\n/**\n * Build Antigravity-format frontmatter\n */\nfunction buildAntigravityFrontmatter(\n rule: GuideRule,\n target?: AntigravityTargetConfig,\n existingFrontmatter?: string\n): string {\n const lines: string[] = [];\n\n // ID\n lines.push(`id: ${rule.id}`);\n\n // Description\n const description = target?.description || extractDescription(existingFrontmatter) || rule.id;\n lines.push(`description: \"${description}\"`);\n\n // Priority\n const priority = target?.priority || 'medium';\n lines.push(`priority: ${priority}`);\n\n // Globs\n const globs = target?.globs || extractGlobs(existingFrontmatter) || [];\n if (globs.length > 0) {\n lines.push(`globs:`);\n for (const glob of globs) {\n lines.push(` - \"${glob}\"`);\n }\n }\n\n // Tags\n const tags = target?.tags || inferTags(rule);\n if (tags.length > 0) {\n lines.push(`tags:`);\n for (const tag of tags) {\n lines.push(` - ${tag}`);\n }\n }\n\n return lines.join('\\n') + '\\n';\n}\n\n/**\n * Extract description from existing frontmatter\n */\nfunction extractDescription(frontmatter?: string): string | undefined {\n if (!frontmatter) return undefined;\n const match = frontmatter.match(/description:\\s*[\"']?([^\"'\\n]+)[\"']?/);\n return match?.[1];\n}\n\n/**\n * Extract globs from existing frontmatter\n */\nfunction extractGlobs(frontmatter?: string): string[] {\n if (!frontmatter) return [];\n const match = frontmatter.match(/globs:\\s*\\[([^\\]]+)\\]/);\n if (match?.[1]) {\n return match[1].split(',').map((g) => g.trim().replace(/[\"']/g, ''));\n }\n return [];\n}\n\n/**\n * Infer tags from rule\n */\nfunction inferTags(rule: GuideRule): string[] {\n const tags: string[] = [];\n\n // Generate tags from category\n if (rule.category) {\n const parts = rule.category.split('/');\n tags.push(...parts.filter((p) => p !== 'guides'));\n }\n\n // Generate tags from ID\n if (rule.id.includes('laravel')) tags.push('laravel');\n if (rule.id.includes('react')) tags.push('react');\n if (rule.id.includes('schema')) tags.push('schema');\n if (rule.id.includes('omnify')) tags.push('omnify');\n\n // Remove duplicates\n return [...new Set(tags)];\n}\n\nexport default antigravityAdapter;\n","/**\n * AI Adapters\n *\n * Export all AI model adapters\n */\n\nexport * from './types.js';\nexport { cursorAdapter } from './cursor.js';\nexport { claudeAdapter } from './claude.js';\nexport { antigravityAdapter, type AntigravityTargetConfig } from './antigravity.js';\n\nimport { cursorAdapter } from './cursor.js';\nimport { claudeAdapter } from './claude.js';\nimport { antigravityAdapter } from './antigravity.js';\nimport type { AIAdapter } from './types.js';\n\n/**\n * All available adapters\n */\nexport const allAdapters: AIAdapter[] = [cursorAdapter, claudeAdapter, antigravityAdapter];\n\n/**\n * Get adapter by name\n */\nexport function getAdapter(name: string): AIAdapter | undefined {\n return allAdapters.find((a) => a.name === name);\n}\n\n/**\n * Get adapters by names\n */\nexport function getAdapters(names?: string[]): AIAdapter[] {\n if (!names || names.length === 0) {\n return allAdapters;\n }\n return allAdapters.filter((a) => names.includes(a.name));\n}\n"],"mappings":"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","names":["readFileSync","replacePlaceholders","replacePlaceholders","replacePlaceholders","cursorAdapter","claudeAdapter","readFileSync"]}
@@ -0,0 +1,524 @@
1
+ # AI Guides Configuration
2
+ # 各ガイドのメタデータとAIターゲット別の設定
3
+
4
+ version: "1.0"
5
+
6
+ # プレースホルダー (実行時に置換)
7
+ placeholders:
8
+ LARAVEL_BASE: "app"
9
+ LARAVEL_ROOT: ""
10
+ TYPESCRIPT_BASE: "resources/ts"
11
+
12
+ # ガイド定義
13
+ guides:
14
+ # ============================================================
15
+ # Omnify Guides
16
+ # ============================================================
17
+ - id: schema-guide
18
+ source: omnify/schema-guide.md.stub
19
+ category: guides/omnify
20
+ targets:
21
+ claude:
22
+ enabled: true
23
+ filename: schema-guide.md
24
+ cursor:
25
+ enabled: false # cursor-rules/omnify-schema.mdcを使用
26
+ antigravity:
27
+ enabled: true
28
+ description: "Omnify schema YAML syntax and examples"
29
+ priority: high
30
+ tags: [omnify, schema]
31
+
32
+ - id: partial-schema-guide
33
+ source: omnify/partial-schema-guide.md.stub
34
+ category: guides/omnify
35
+ targets:
36
+ claude:
37
+ enabled: true
38
+ filename: partial-schema-guide.md
39
+ cursor:
40
+ enabled: false
41
+ antigravity:
42
+ enabled: true
43
+ description: "Partial schema guide for package extensions"
44
+ priority: high
45
+ tags: [omnify, schema, partial, package]
46
+
47
+ - id: config-guide
48
+ source: omnify/config-guide.md.stub
49
+ category: guides/omnify
50
+ targets:
51
+ claude:
52
+ enabled: true
53
+ filename: config-guide.md
54
+ cursor:
55
+ enabled: false
56
+ antigravity:
57
+ enabled: true
58
+ description: "Omnify configuration options"
59
+ priority: medium
60
+ tags: [omnify, config]
61
+
62
+ - id: typescript-guide
63
+ source: omnify/typescript-guide.md.stub
64
+ category: guides/omnify
65
+ targets:
66
+ claude:
67
+ enabled: true
68
+ filename: typescript-guide.md
69
+ cursor:
70
+ enabled: false
71
+
72
+ - id: laravel-guide
73
+ source: omnify/laravel-guide.md.stub
74
+ category: guides/omnify
75
+ targets:
76
+ claude:
77
+ enabled: true
78
+ filename: laravel-guide.md
79
+ cursor:
80
+ enabled: false
81
+
82
+ - id: antdesign-guide
83
+ source: omnify/antdesign-guide.md.stub
84
+ category: guides/omnify
85
+ targets:
86
+ claude:
87
+ enabled: true
88
+ filename: antdesign-guide.md
89
+ cursor:
90
+ enabled: false
91
+
92
+ - id: react-form-guide
93
+ source: omnify/react-form-guide.md.stub
94
+ category: guides/omnify
95
+ targets:
96
+ claude:
97
+ enabled: true
98
+ filename: react-form-guide.md
99
+ cursor:
100
+ enabled: false
101
+
102
+ - id: japan-guide
103
+ source: omnify/japan-guide.md.stub
104
+ category: guides/omnify
105
+ targets:
106
+ claude:
107
+ enabled: true
108
+ filename: japan-guide.md
109
+ cursor:
110
+ enabled: false
111
+
112
+ # ============================================================
113
+ # Laravel Guides
114
+ # ============================================================
115
+ - id: laravel-architecture
116
+ source: laravel/architecture.md.stub
117
+ category: guides/laravel
118
+ targets:
119
+ claude:
120
+ enabled: true
121
+ filename: architecture.md
122
+ cursor:
123
+ enabled: false
124
+
125
+ - id: laravel-authentication
126
+ source: laravel/authentication.md.stub
127
+ category: guides/laravel
128
+ targets:
129
+ claude:
130
+ enabled: true
131
+ filename: authentication.md
132
+ cursor:
133
+ enabled: false
134
+
135
+ - id: laravel-controller
136
+ source: laravel/controller.md.stub
137
+ category: guides/laravel
138
+ targets:
139
+ claude:
140
+ enabled: true
141
+ filename: controller.md
142
+ cursor:
143
+ enabled: false
144
+
145
+ - id: laravel-datetime
146
+ source: laravel/datetime.md.stub
147
+ category: guides/laravel
148
+ targets:
149
+ claude:
150
+ enabled: true
151
+ filename: datetime.md
152
+ cursor:
153
+ enabled: false
154
+
155
+ - id: laravel-migrations-team
156
+ source: laravel/migrations-team.md.stub
157
+ category: guides/laravel
158
+ targets:
159
+ claude:
160
+ enabled: true
161
+ filename: migrations-team.md
162
+ cursor:
163
+ enabled: false
164
+
165
+ - id: laravel-openapi
166
+ source: laravel/openapi.md.stub
167
+ category: guides/laravel
168
+ targets:
169
+ claude:
170
+ enabled: true
171
+ filename: openapi.md
172
+ cursor:
173
+ enabled: false
174
+
175
+ - id: laravel-request
176
+ source: laravel/request.md.stub
177
+ category: guides/laravel
178
+ targets:
179
+ claude:
180
+ enabled: true
181
+ filename: request.md
182
+ cursor:
183
+ enabled: false
184
+
185
+ - id: laravel-resource
186
+ source: laravel/resource.md.stub
187
+ category: guides/laravel
188
+ targets:
189
+ claude:
190
+ enabled: true
191
+ filename: resource.md
192
+ cursor:
193
+ enabled: false
194
+
195
+ - id: laravel-service
196
+ source: laravel/service.md.stub
197
+ category: guides/laravel
198
+ targets:
199
+ claude:
200
+ enabled: true
201
+ filename: service.md
202
+ cursor:
203
+ enabled: false
204
+
205
+ - id: laravel-testing
206
+ source: laravel/testing.md.stub
207
+ category: guides/laravel
208
+ targets:
209
+ claude:
210
+ enabled: true
211
+ filename: testing.md
212
+ cursor:
213
+ enabled: false
214
+
215
+ # ============================================================
216
+ # React Guides
217
+ # ============================================================
218
+ - id: react-antd-guide
219
+ source: react/antd-guide.md.stub
220
+ category: guides/react
221
+ targets:
222
+ claude:
223
+ enabled: true
224
+ filename: antd-guide.md
225
+ cursor:
226
+ enabled: false
227
+
228
+ - id: react-checklist
229
+ source: react/checklist.md.stub
230
+ category: guides/react
231
+ targets:
232
+ claude:
233
+ enabled: true
234
+ filename: checklist.md
235
+ cursor:
236
+ enabled: false
237
+
238
+ - id: react-datetime-guide
239
+ source: react/datetime-guide.md.stub
240
+ category: guides/react
241
+ targets:
242
+ claude:
243
+ enabled: true
244
+ filename: datetime-guide.md
245
+ cursor:
246
+ enabled: false
247
+
248
+ - id: react-design-philosophy
249
+ source: react/design-philosophy.md.stub
250
+ category: guides/react
251
+ targets:
252
+ claude:
253
+ enabled: true
254
+ filename: design-philosophy.md
255
+ cursor:
256
+ enabled: false
257
+
258
+ - id: react-i18n-guide
259
+ source: react/i18n-guide.md.stub
260
+ category: guides/react
261
+ targets:
262
+ claude:
263
+ enabled: true
264
+ filename: i18n-guide.md
265
+ cursor:
266
+ enabled: false
267
+
268
+ - id: react-laravel-integration
269
+ source: react/laravel-integration.md.stub
270
+ category: guides/react
271
+ targets:
272
+ claude:
273
+ enabled: true
274
+ filename: laravel-integration.md
275
+ cursor:
276
+ enabled: false
277
+
278
+ - id: react-service-pattern
279
+ source: react/service-pattern.md.stub
280
+ category: guides/react
281
+ targets:
282
+ claude:
283
+ enabled: true
284
+ filename: service-pattern.md
285
+ cursor:
286
+ enabled: false
287
+
288
+ - id: react-tanstack-query
289
+ source: react/tanstack-query.md.stub
290
+ category: guides/react
291
+ targets:
292
+ claude:
293
+ enabled: true
294
+ filename: tanstack-query.md
295
+ cursor:
296
+ enabled: false
297
+
298
+ - id: react-types-guide
299
+ source: react/types-guide.md.stub
300
+ category: guides/react
301
+ targets:
302
+ claude:
303
+ enabled: true
304
+ filename: types-guide.md
305
+ cursor:
306
+ enabled: false
307
+
308
+ # ============================================================
309
+ # Workflows
310
+ # ============================================================
311
+ - id: workflow-bug-fix
312
+ source: workflows/bug-fix.md.stub
313
+ category: workflows
314
+ targets:
315
+ claude:
316
+ enabled: true
317
+ filename: bug-fix.md
318
+ cursor:
319
+ enabled: false
320
+
321
+ - id: workflow-code-review
322
+ source: workflows/code-review.md.stub
323
+ category: workflows
324
+ targets:
325
+ claude:
326
+ enabled: true
327
+ filename: code-review.md
328
+ cursor:
329
+ enabled: false
330
+
331
+ - id: workflow-new-feature
332
+ source: workflows/new-feature.md.stub
333
+ category: workflows
334
+ targets:
335
+ claude:
336
+ enabled: true
337
+ filename: new-feature.md
338
+ cursor:
339
+ enabled: false
340
+
341
+ # ============================================================
342
+ # Agents
343
+ # ============================================================
344
+ - id: agent-architect
345
+ source: agents/architect.md.stub
346
+ category: agents
347
+ targets:
348
+ claude:
349
+ enabled: true
350
+ filename: architect.md
351
+ cursor:
352
+ enabled: false
353
+
354
+ - id: agent-developer
355
+ source: agents/developer.md.stub
356
+ category: agents
357
+ targets:
358
+ claude:
359
+ enabled: true
360
+ filename: developer.md
361
+ cursor:
362
+ enabled: false
363
+
364
+ - id: agent-reviewer
365
+ source: agents/reviewer.md.stub
366
+ category: agents
367
+ targets:
368
+ claude:
369
+ enabled: true
370
+ filename: reviewer.md
371
+ cursor:
372
+ enabled: false
373
+
374
+ - id: agent-tester
375
+ source: agents/tester.md.stub
376
+ category: agents
377
+ targets:
378
+ claude:
379
+ enabled: true
380
+ filename: tester.md
381
+ cursor:
382
+ enabled: false
383
+
384
+ # ============================================================
385
+ # Checklists
386
+ # ============================================================
387
+ - id: checklist-backend
388
+ source: checklists/backend.md.stub
389
+ category: checklists
390
+ targets:
391
+ claude:
392
+ enabled: true
393
+ filename: backend.md
394
+ cursor:
395
+ enabled: false
396
+
397
+ - id: checklist-react
398
+ source: checklists/react.md.stub
399
+ category: checklists
400
+ targets:
401
+ claude:
402
+ enabled: true
403
+ filename: react.md
404
+ cursor:
405
+ enabled: false
406
+
407
+ # ============================================================
408
+ # Cursor Rules (既にfrontmatter付きのファイル)
409
+ # これらはcursor-rules/から直接コピー
410
+ # ============================================================
411
+ cursorRules:
412
+ - source: cursor-rules/omnify-schema.mdc.stub
413
+ - source: cursor-rules/omnify.mdc.stub
414
+ - source: cursor-rules/omnify-migrations.mdc.stub
415
+ - source: cursor-rules/schema-create.mdc.stub
416
+ - source: cursor-rules/migrations-workflow.mdc.stub
417
+ - source: cursor-rules/laravel.mdc.stub
418
+ - source: cursor-rules/laravel-controller.mdc.stub
419
+ - source: cursor-rules/laravel-request.mdc.stub
420
+ - source: cursor-rules/laravel-resource.mdc.stub
421
+ - source: cursor-rules/laravel-review.mdc.stub
422
+ - source: cursor-rules/laravel-testing.mdc.stub
423
+ - source: cursor-rules/model-editable.mdc.stub
424
+ - source: cursor-rules/request-editable.mdc.stub
425
+ - source: cursor-rules/resource-editable.mdc.stub
426
+ - source: cursor-rules/basemodel-readonly.mdc.stub
427
+ - source: cursor-rules/baserequest-readonly.mdc.stub
428
+ - source: cursor-rules/baseresource-readonly.mdc.stub
429
+ - source: cursor-rules/validation-rules.mdc.stub
430
+ - source: cursor-rules/react.mdc.stub
431
+ - source: cursor-rules/react-design.mdc.stub
432
+ - source: cursor-rules/react-form.mdc.stub
433
+ - source: cursor-rules/react-services.mdc.stub
434
+ - source: cursor-rules/antd-deprecations.mdc.stub
435
+
436
+ # ============================================================
437
+ # Claude Rules (既にmarkdown形式)
438
+ # これらはclaude-rules/から.claude/rules/omnify/へコピー
439
+ # ============================================================
440
+ claudeRules:
441
+ - source: claude-rules/laravel-controllers.md.stub
442
+ - source: claude-rules/laravel-migrations.md.stub
443
+ - source: claude-rules/laravel-tests.md.stub
444
+ - source: claude-rules/naming.md.stub
445
+ - source: claude-rules/performance.md.stub
446
+ - source: claude-rules/php-standards.md.stub
447
+ - source: claude-rules/react-components.md.stub
448
+ - source: claude-rules/schema-yaml.md.stub
449
+ - source: claude-rules/security.md.stub
450
+
451
+ # ============================================================
452
+ # Antigravity Rules
453
+ # cursor-rulesをベースに変換して.antigravity/rules/omnify/へ出力
454
+ # ============================================================
455
+ antigravityRules:
456
+ - source: cursor-rules/omnify-schema.mdc.stub
457
+ priority: high
458
+ tags: [omnify, schema]
459
+ - source: cursor-rules/omnify.mdc.stub
460
+ priority: high
461
+ tags: [omnify]
462
+ - source: cursor-rules/omnify-migrations.mdc.stub
463
+ priority: high
464
+ tags: [omnify, migrations]
465
+ - source: cursor-rules/schema-create.mdc.stub
466
+ priority: high
467
+ tags: [schema, workflow]
468
+ - source: cursor-rules/migrations-workflow.mdc.stub
469
+ priority: medium
470
+ tags: [migrations, workflow]
471
+ - source: cursor-rules/laravel.mdc.stub
472
+ priority: medium
473
+ tags: [laravel]
474
+ - source: cursor-rules/laravel-controller.mdc.stub
475
+ priority: medium
476
+ tags: [laravel, controller]
477
+ - source: cursor-rules/laravel-request.mdc.stub
478
+ priority: medium
479
+ tags: [laravel, request]
480
+ - source: cursor-rules/laravel-resource.mdc.stub
481
+ priority: medium
482
+ tags: [laravel, resource]
483
+ - source: cursor-rules/laravel-review.mdc.stub
484
+ priority: low
485
+ tags: [laravel, review]
486
+ - source: cursor-rules/laravel-testing.mdc.stub
487
+ priority: medium
488
+ tags: [laravel, testing]
489
+ - source: cursor-rules/model-editable.mdc.stub
490
+ priority: medium
491
+ tags: [laravel, model]
492
+ - source: cursor-rules/request-editable.mdc.stub
493
+ priority: medium
494
+ tags: [laravel, request]
495
+ - source: cursor-rules/resource-editable.mdc.stub
496
+ priority: medium
497
+ tags: [laravel, resource]
498
+ - source: cursor-rules/basemodel-readonly.mdc.stub
499
+ priority: low
500
+ tags: [laravel, model, readonly]
501
+ - source: cursor-rules/baserequest-readonly.mdc.stub
502
+ priority: low
503
+ tags: [laravel, request, readonly]
504
+ - source: cursor-rules/baseresource-readonly.mdc.stub
505
+ priority: low
506
+ tags: [laravel, resource, readonly]
507
+ - source: cursor-rules/validation-rules.mdc.stub
508
+ priority: medium
509
+ tags: [laravel, validation]
510
+ - source: cursor-rules/react.mdc.stub
511
+ priority: medium
512
+ tags: [react]
513
+ - source: cursor-rules/react-design.mdc.stub
514
+ priority: medium
515
+ tags: [react, design]
516
+ - source: cursor-rules/react-form.mdc.stub
517
+ priority: medium
518
+ tags: [react, form]
519
+ - source: cursor-rules/react-services.mdc.stub
520
+ priority: medium
521
+ tags: [react, services]
522
+ - source: cursor-rules/antd-deprecations.mdc.stub
523
+ priority: high
524
+ tags: [react, antd, deprecations]