0xray 2.0.0

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 (739) hide show
  1. package/.opencode/agents/api-design.yml +31 -0
  2. package/.opencode/agents/architect.yml +15 -0
  3. package/.opencode/agents/architecture-patterns.yml +14 -0
  4. package/.opencode/agents/auto-format.yml +14 -0
  5. package/.opencode/agents/backend-engineer.yml +12 -0
  6. package/.opencode/agents/boot-orchestrator.yml +14 -0
  7. package/.opencode/agents/bug-triage-specialist.yml +15 -0
  8. package/.opencode/agents/code-analyzer.yml +12 -0
  9. package/.opencode/agents/code-reviewer.yml +14 -0
  10. package/.opencode/agents/content-creator.yml +12 -0
  11. package/.opencode/agents/database-engineer.yml +12 -0
  12. package/.opencode/agents/devops-engineer.yml +12 -0
  13. package/.opencode/agents/framework-compliance-audit.yml +14 -0
  14. package/.opencode/agents/frontend-engineer.yml +12 -0
  15. package/.opencode/agents/frontend-ui-ux-engineer.yml +12 -0
  16. package/.opencode/agents/git-workflow.yml +15 -0
  17. package/.opencode/agents/growth-strategist.yml +12 -0
  18. package/.opencode/agents/hermes-agent.yml +12 -0
  19. package/.opencode/agents/inference-improve.yml +12 -0
  20. package/.opencode/agents/lint.yml +14 -0
  21. package/.opencode/agents/log-monitor.yml +12 -0
  22. package/.opencode/agents/mobile-developer.yml +12 -0
  23. package/.opencode/agents/model-health-check.yml +12 -0
  24. package/.opencode/agents/multimodal-looker.yml +12 -0
  25. package/.opencode/agents/performance-analysis.yml +12 -0
  26. package/.opencode/agents/performance-engineer.yml +12 -0
  27. package/.opencode/agents/performance-optimization.yml +12 -0
  28. package/.opencode/agents/processor-pipeline.yml +14 -0
  29. package/.opencode/agents/project-analysis.yml +12 -0
  30. package/.opencode/agents/refactorer.yml +12 -0
  31. package/.opencode/agents/researcher.yml +12 -0
  32. package/.opencode/agents/security-auditor.yml +12 -0
  33. package/.opencode/agents/security-scan.yml +12 -0
  34. package/.opencode/agents/seo-consultant.yml +12 -0
  35. package/.opencode/agents/session-management.yml +12 -0
  36. package/.opencode/agents/state-manager.yml +12 -0
  37. package/.opencode/agents/storyteller.yml +12 -0
  38. package/.opencode/agents/strategist.yml +12 -0
  39. package/.opencode/agents/tech-writer.yml +12 -0
  40. package/.opencode/agents/testing-best-practices.yml +12 -0
  41. package/.opencode/agents/testing-lead.yml +12 -0
  42. package/.opencode/agents/ui-ux-design.yml +12 -0
  43. package/.opencode/codex.codex +8 -0
  44. package/.opencode/commands/auto-format.md +99 -0
  45. package/.opencode/commands/auto-summary-capture.md +90 -0
  46. package/.opencode/commands/dependency-audit.md +184 -0
  47. package/.opencode/commands/enforcer-daily-scan.md +137 -0
  48. package/.opencode/commands/framework-compliance-audit.md +205 -0
  49. package/.opencode/commands/interactive-validator.md +75 -0
  50. package/.opencode/commands/job-summary-logger.md +68 -0
  51. package/.opencode/commands/lint.md +11 -0
  52. package/.opencode/commands/mode-switch.md +95 -0
  53. package/.opencode/commands/model-health-check.md +186 -0
  54. package/.opencode/commands/performance-analysis.md +144 -0
  55. package/.opencode/commands/pre-commit-introspection.md +185 -0
  56. package/.opencode/commands/pre-commit-introspection.sh +133 -0
  57. package/.opencode/commands/security-scan.md +157 -0
  58. package/.opencode/commands/sisyphus-validation.md +128 -0
  59. package/.opencode/commands/summary-logger.md +83 -0
  60. package/.opencode/enforcer-config.json +285 -0
  61. package/.opencode/hooks/hook-metrics.json +380 -0
  62. package/.opencode/hooks/post-commit +114 -0
  63. package/.opencode/hooks/post-push +34 -0
  64. package/.opencode/init.sh +151 -0
  65. package/.opencode/skills/api-design/SKILL.md +37 -0
  66. package/.opencode/skills/architect-tools/SKILL.md +37 -0
  67. package/.opencode/skills/architecture-patterns/SKILL.md +37 -0
  68. package/.opencode/skills/auto-format/SKILL.md +37 -0
  69. package/.opencode/skills/backend-engineer/SKILL.md +49 -0
  70. package/.opencode/skills/boot-orchestrator/SKILL.md +37 -0
  71. package/.opencode/skills/bug-triage/SKILL.md +43 -0
  72. package/.opencode/skills/code-analyzer/SKILL.md +45 -0
  73. package/.opencode/skills/code-review/SKILL.md +52 -0
  74. package/.opencode/skills/content-creator/SKILL.md +38 -0
  75. package/.opencode/skills/database-engineer/SKILL.md +46 -0
  76. package/.opencode/skills/devops-engineer/SKILL.md +49 -0
  77. package/.opencode/skills/enforcer/SKILL.md +37 -0
  78. package/.opencode/skills/framework-compliance-audit/SKILL.md +37 -0
  79. package/.opencode/skills/frontend-engineer/SKILL.md +49 -0
  80. package/.opencode/skills/frontend-ui-ux-engineer/SKILL.md +41 -0
  81. package/.opencode/skills/git-workflow/SKILL.md +37 -0
  82. package/.opencode/skills/growth-strategist/SKILL.md +48 -0
  83. package/.opencode/skills/hermes-agent/SKILL.md +212 -0
  84. package/.opencode/skills/inference-improve/SKILL.md +97 -0
  85. package/.opencode/skills/lint/SKILL.md +37 -0
  86. package/.opencode/skills/log-monitor/SKILL.md +44 -0
  87. package/.opencode/skills/mobile-developer/SKILL.md +42 -0
  88. package/.opencode/skills/model-health-check/SKILL.md +37 -0
  89. package/.opencode/skills/multimodal-looker/SKILL.md +45 -0
  90. package/.opencode/skills/orchestrator/SKILL.md +37 -0
  91. package/.opencode/skills/performance-analysis/SKILL.md +37 -0
  92. package/.opencode/skills/performance-engineer/SKILL.md +41 -0
  93. package/.opencode/skills/performance-optimization/SKILL.md +37 -0
  94. package/.opencode/skills/processor-pipeline/SKILL.md +37 -0
  95. package/.opencode/skills/project-analysis/SKILL.md +42 -0
  96. package/.opencode/skills/refactoring-strategies/SKILL.md +37 -0
  97. package/.opencode/skills/registry.json +66 -0
  98. package/.opencode/skills/researcher/SKILL.md +37 -0
  99. package/.opencode/skills/security-audit/SKILL.md +47 -0
  100. package/.opencode/skills/security-scan/SKILL.md +37 -0
  101. package/.opencode/skills/seo-consultant/SKILL.md +43 -0
  102. package/.opencode/skills/session-management/SKILL.md +36 -0
  103. package/.opencode/skills/state-manager/SKILL.md +37 -0
  104. package/.opencode/skills/storyteller/SKILL.md +130 -0
  105. package/.opencode/skills/strategist/SKILL.md +32 -0
  106. package/.opencode/skills/tech-writer/SKILL.md +37 -0
  107. package/.opencode/skills/testing-best-practices/SKILL.md +37 -0
  108. package/.opencode/skills/testing-strategy/SKILL.md +43 -0
  109. package/.opencode/skills/ui-ux-design/SKILL.md +603 -0
  110. package/.opencode/workflows/post-deployment-audit.yml +123 -0
  111. package/AGENTS.md +110 -0
  112. package/LICENSE +21 -0
  113. package/README.md +131 -0
  114. package/dist/AGENTS.md +110 -0
  115. package/dist/CHANGELOG.md +2182 -0
  116. package/dist/LICENSE +21 -0
  117. package/dist/README.md +131 -0
  118. package/dist/agents/architect.js +56 -0
  119. package/dist/agents/backend-engineer.js +81 -0
  120. package/dist/agents/bug-triage-specialist.js +74 -0
  121. package/dist/agents/code-analyzer.js +150 -0
  122. package/dist/agents/code-reviewer.js +69 -0
  123. package/dist/agents/content-creator.js +72 -0
  124. package/dist/agents/database-engineer.js +76 -0
  125. package/dist/agents/devops-engineer.js +84 -0
  126. package/dist/agents/frontend-engineer.js +78 -0
  127. package/dist/agents/frontend-ui-ux-engineer.js +64 -0
  128. package/dist/agents/growth-strategist.js +111 -0
  129. package/dist/agents/index.js +45 -0
  130. package/dist/agents/librarian-agents-updater.js +333 -0
  131. package/dist/agents/log-monitor.js +109 -0
  132. package/dist/agents/mobile-developer.js +102 -0
  133. package/dist/agents/multimodal-looker.js +93 -0
  134. package/dist/agents/performance-engineer.js +86 -0
  135. package/dist/agents/refactorer.js +80 -0
  136. package/dist/agents/registry.js +340 -0
  137. package/dist/agents/researcher.js +83 -0
  138. package/dist/agents/security-auditor.js +158 -0
  139. package/dist/agents/seo-consultant.js +53 -0
  140. package/dist/agents/strategist.js +47 -0
  141. package/dist/agents/tech-writer.js +84 -0
  142. package/dist/agents/testing-lead.js +95 -0
  143. package/dist/agents/types.js +1 -0
  144. package/dist/analytics/consent-manager.js +258 -0
  145. package/dist/analytics/emerging-pattern-detector.js +260 -0
  146. package/dist/analytics/pattern-learning-engine.js +278 -0
  147. package/dist/analytics/pattern-performance-tracker.js +336 -0
  148. package/dist/analytics/predictive-analytics.js +248 -0
  149. package/dist/analytics/prompt-pattern-analyzer.js +371 -0
  150. package/dist/analytics/routing-performance-analyzer.js +356 -0
  151. package/dist/analytics/routing-refiner.js +380 -0
  152. package/dist/analytics/simple-pattern-analyzer.js +297 -0
  153. package/dist/architect/architect-tools.js +437 -0
  154. package/dist/architect/architectural-integrity.js +78 -0
  155. package/dist/benchmark/performance-benchmark.js +372 -0
  156. package/dist/cli/commands/analytics-disable.js +72 -0
  157. package/dist/cli/commands/analytics-enable-action.js +82 -0
  158. package/dist/cli/commands/analytics-preview.js +106 -0
  159. package/dist/cli/commands/analytics-status.js +68 -0
  160. package/dist/cli/commands/antigravity-status.js +106 -0
  161. package/dist/cli/commands/archive-logs.js +161 -0
  162. package/dist/cli/commands/credible-init.js +82 -0
  163. package/dist/cli/commands/grok-install.js +16 -0
  164. package/dist/cli/commands/hermes-install.js +66 -0
  165. package/dist/cli/commands/mcp-install.js +253 -0
  166. package/dist/cli/commands/openclaw-install.js +44 -0
  167. package/dist/cli/commands/opencode-install.js +99 -0
  168. package/dist/cli/commands/plugin-commands.js +246 -0
  169. package/dist/cli/commands/publish-agent.js +184 -0
  170. package/dist/cli/commands/security-audit.js +219 -0
  171. package/dist/cli/commands/skill-install.js +481 -0
  172. package/dist/cli/commands/status.js +196 -0
  173. package/dist/cli/commands/storyteller.js +230 -0
  174. package/dist/cli/index.js +986 -0
  175. package/dist/cli/server.js +147 -0
  176. package/dist/config/default-agents.js +16 -0
  177. package/dist/core/activity-logger.js +260 -0
  178. package/dist/core/adaptive-kernel.js +192 -0
  179. package/dist/core/agent-spawn-gate.js +120 -0
  180. package/dist/core/boot-orchestrator.js +812 -0
  181. package/dist/core/bridge.mjs +945 -0
  182. package/dist/core/codex-formatter.js +220 -0
  183. package/dist/core/codex-injector.js +424 -0
  184. package/dist/core/config-loader.js +148 -0
  185. package/dist/core/config-paths.js +162 -0
  186. package/dist/core/context-loader.js +269 -0
  187. package/dist/core/context-validator.js +212 -0
  188. package/dist/core/features-config.js +457 -0
  189. package/dist/core/framework-logger.js +275 -0
  190. package/dist/core/index.js +6 -0
  191. package/dist/core/kernel-patterns.js +302 -0
  192. package/dist/core/logging-config.js +43 -0
  193. package/dist/core/model-router.js +175 -0
  194. package/dist/core/orchestrator.js +408 -0
  195. package/dist/core/system-prompt-generator.js +265 -0
  196. package/dist/core/trace-context.js +33 -0
  197. package/dist/core/xray-activation.js +134 -0
  198. package/dist/delegation/agent-delegator.js +769 -0
  199. package/dist/delegation/agent-expertise.js +156 -0
  200. package/dist/delegation/analytics/index.js +12 -0
  201. package/dist/delegation/analytics/learning-engine.js +277 -0
  202. package/dist/delegation/analytics/outcome-tracker.js +279 -0
  203. package/dist/delegation/analytics/routing-analytics.js +193 -0
  204. package/dist/delegation/ast-code-parser.js +878 -0
  205. package/dist/delegation/codebase-context-analyzer.js +1040 -0
  206. package/dist/delegation/complexity-analyzer.js +282 -0
  207. package/dist/delegation/complexity-core.js +219 -0
  208. package/dist/delegation/config/types.js +6 -0
  209. package/dist/delegation/dependency-graph-builder.js +409 -0
  210. package/dist/delegation/index.js +20 -0
  211. package/dist/delegation/metrics-aggregator.js +335 -0
  212. package/dist/delegation/session-coordinator.js +352 -0
  213. package/dist/delegation/strategy-selector.js +108 -0
  214. package/dist/delegation/voting-coordinator.js +375 -0
  215. package/dist/delegation/voting-types.js +10 -0
  216. package/dist/delegation/weighted-voting-aggregator.js +194 -0
  217. package/dist/enforcement/core/index.js +19 -0
  218. package/dist/enforcement/core/rule-executor.js +365 -0
  219. package/dist/enforcement/core/rule-hierarchy.js +259 -0
  220. package/dist/enforcement/core/rule-registry.js +240 -0
  221. package/dist/enforcement/core/violation-fixer.js +651 -0
  222. package/dist/enforcement/enforcer-tools.js +909 -0
  223. package/dist/enforcement/index.js +41 -0
  224. package/dist/enforcement/loaders/agent-triage-loader.js +222 -0
  225. package/dist/enforcement/loaders/agents-md-validation-loader.js +252 -0
  226. package/dist/enforcement/loaders/base-loader.js +86 -0
  227. package/dist/enforcement/loaders/codex-loader.js +396 -0
  228. package/dist/enforcement/loaders/index.js +40 -0
  229. package/dist/enforcement/loaders/loader-orchestrator.js +168 -0
  230. package/dist/enforcement/loaders/processor-loader.js +113 -0
  231. package/dist/enforcement/rule-enforcer.js +298 -0
  232. package/dist/enforcement/test-auto-healing.js +325 -0
  233. package/dist/enforcement/types.js +30 -0
  234. package/dist/enforcement/validators/architecture-validators.js +600 -0
  235. package/dist/enforcement/validators/base-validator.js +108 -0
  236. package/dist/enforcement/validators/code-quality-validators.js +336 -0
  237. package/dist/enforcement/validators/index.js +21 -0
  238. package/dist/enforcement/validators/security-validators.js +220 -0
  239. package/dist/enforcement/validators/testing-validators.js +253 -0
  240. package/dist/enforcement/validators/validator-registry.js +150 -0
  241. package/dist/execution/opencode-cli-invoker.js +173 -0
  242. package/dist/execution/proposal-applier.js +254 -0
  243. package/dist/governance/codex-policy.service.js +167 -0
  244. package/dist/governance/governance-core.js +152 -0
  245. package/dist/governance/governance-service.js +274 -0
  246. package/dist/governance/governance-types.js +6 -0
  247. package/dist/index.js +24 -0
  248. package/dist/inference/deploy-verifier.js +161 -0
  249. package/dist/inference/index.js +5 -0
  250. package/dist/inference/inference-accumulator.js +126 -0
  251. package/dist/inference/inference-cycle.js +1168 -0
  252. package/dist/inference/semantic-patterns.js +310 -0
  253. package/dist/inference/session-capture.js +308 -0
  254. package/dist/integrations/base/ExampleIntegration.js +181 -0
  255. package/dist/integrations/base/Integration.js +395 -0
  256. package/dist/integrations/base/README.md +446 -0
  257. package/dist/integrations/base/index.js +16 -0
  258. package/dist/integrations/base/registry.js +606 -0
  259. package/dist/integrations/base/types.js +118 -0
  260. package/dist/integrations/governance/governance-client.js +316 -0
  261. package/dist/integrations/governance/index.js +373 -0
  262. package/dist/integrations/governance/types.js +97 -0
  263. package/dist/integrations/grok/grok-cli.js +83 -0
  264. package/dist/integrations/grok/hooks/pre-tool-use.js +134 -0
  265. package/dist/integrations/grok/plugin/0xray/.mcp.json +15 -0
  266. package/dist/integrations/grok/plugin/0xray/hooks/hooks.json +30 -0
  267. package/dist/integrations/hermes-agent/__init__.py +718 -0
  268. package/dist/integrations/hermes-agent/after-install.md +71 -0
  269. package/dist/integrations/hermes-agent/bridge.mjs +861 -0
  270. package/dist/integrations/hermes-agent/conftest.py +14 -0
  271. package/dist/integrations/hermes-agent/plugin.yaml +12 -0
  272. package/dist/integrations/hermes-agent/schemas.py +100 -0
  273. package/dist/integrations/hermes-agent/test_plugin.py +1100 -0
  274. package/dist/integrations/hermes-agent/tools.py +253 -0
  275. package/dist/integrations/openclaw/README.md +134 -0
  276. package/dist/integrations/openclaw/api-server.js +389 -0
  277. package/dist/integrations/openclaw/client.js +492 -0
  278. package/dist/integrations/openclaw/config.js +374 -0
  279. package/dist/integrations/openclaw/hooks/strray-hooks.js +280 -0
  280. package/dist/integrations/openclaw/index.js +351 -0
  281. package/dist/integrations/openclaw/types.js +153 -0
  282. package/dist/integrations/plugins/index.js +10 -0
  283. package/dist/integrations/plugins/plugin-integration.js +606 -0
  284. package/dist/integrations/plugins/plugin-registry.js +580 -0
  285. package/dist/mcps/agent-resolver.js +106 -0
  286. package/dist/mcps/architect-tools.server.js +277 -0
  287. package/dist/mcps/auto-format.server.js +413 -0
  288. package/dist/mcps/boot-orchestrator.server.js +853 -0
  289. package/dist/mcps/config/config-loader.js +103 -0
  290. package/dist/mcps/config/config-validator.js +101 -0
  291. package/dist/mcps/config/index.js +30 -0
  292. package/dist/mcps/config/plugin-server-registry.js +223 -0
  293. package/dist/mcps/config/server-config-registry.js +348 -0
  294. package/dist/mcps/connection/connection-manager.js +79 -0
  295. package/dist/mcps/connection/connection-pool.js +164 -0
  296. package/dist/mcps/connection/mcp-connection.js +233 -0
  297. package/dist/mcps/connection/process-spawner.js +34 -0
  298. package/dist/mcps/enforcer-tools.server.js +778 -0
  299. package/dist/mcps/estimation.server.js +192 -0
  300. package/dist/mcps/framework-compliance-audit.server.js +500 -0
  301. package/dist/mcps/framework-help.server.js +400 -0
  302. package/dist/mcps/governance.server.js +464 -0
  303. package/dist/mcps/in-process-skill-registry.js +48 -0
  304. package/dist/mcps/knowledge-skills/api-design.server.js +123 -0
  305. package/dist/mcps/knowledge-skills/architecture-patterns.server.js +113 -0
  306. package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +474 -0
  307. package/dist/mcps/knowledge-skills/code-analyzer.server.js +605 -0
  308. package/dist/mcps/knowledge-skills/code-review.server.js +847 -0
  309. package/dist/mcps/knowledge-skills/content-creator.server.js +256 -0
  310. package/dist/mcps/knowledge-skills/database-design.server.js +822 -0
  311. package/dist/mcps/knowledge-skills/devops-deployment.server.js +1180 -0
  312. package/dist/mcps/knowledge-skills/git-workflow.server.js +115 -0
  313. package/dist/mcps/knowledge-skills/growth-strategist.server.js +361 -0
  314. package/dist/mcps/knowledge-skills/log-monitor.server.js +451 -0
  315. package/dist/mcps/knowledge-skills/mobile-development.server.js +525 -0
  316. package/dist/mcps/knowledge-skills/multimodal-looker.server.js +1063 -0
  317. package/dist/mcps/knowledge-skills/performance-optimization.server.js +1587 -0
  318. package/dist/mcps/knowledge-skills/project-analysis.server.js +811 -0
  319. package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +796 -0
  320. package/dist/mcps/knowledge-skills/security-audit.server.js +846 -0
  321. package/dist/mcps/knowledge-skills/seo-consultant.server.js +937 -0
  322. package/dist/mcps/knowledge-skills/session-management.server.js +470 -0
  323. package/dist/mcps/knowledge-skills/skill-invocation.server.js +729 -0
  324. package/dist/mcps/knowledge-skills/strategist.server.js +217 -0
  325. package/dist/mcps/knowledge-skills/tech-writer.server.js +1191 -0
  326. package/dist/mcps/knowledge-skills/testing-best-practices.server.js +866 -0
  327. package/dist/mcps/knowledge-skills/testing-strategy.server.js +827 -0
  328. package/dist/mcps/knowledge-skills/ui-ux-design.server.js +1538 -0
  329. package/dist/mcps/lint.server.js +381 -0
  330. package/dist/mcps/mcp-client.js +574 -0
  331. package/dist/mcps/model-health-check.server.js +228 -0
  332. package/dist/mcps/orchestrator/config/agent-capabilities.js +87 -0
  333. package/dist/mcps/orchestrator/execution/execution-planner.js +279 -0
  334. package/dist/mcps/orchestrator/handlers/complexity-handler.js +94 -0
  335. package/dist/mcps/orchestrator/handlers/status-handler.js +232 -0
  336. package/dist/mcps/orchestrator/handlers/task-handler.js +197 -0
  337. package/dist/mcps/orchestrator/server.js +305 -0
  338. package/dist/mcps/orchestrator/types.js +6 -0
  339. package/dist/mcps/orchestrator.server.js +19 -0
  340. package/dist/mcps/performance-analysis.server.js +519 -0
  341. package/dist/mcps/processor-pipeline.server.js +561 -0
  342. package/dist/mcps/protocol/protocol-constants.js +46 -0
  343. package/dist/mcps/registry.json +110 -0
  344. package/dist/mcps/researcher.server.js +504 -0
  345. package/dist/mcps/security-scan.server.js +531 -0
  346. package/dist/mcps/simulation/index.js +12 -0
  347. package/dist/mcps/simulation/server-simulations.js +219 -0
  348. package/dist/mcps/simulation/simulation-engine.js +96 -0
  349. package/dist/mcps/state-manager.server.js +637 -0
  350. package/dist/mcps/tools/index.js +14 -0
  351. package/dist/mcps/tools/tool-cache.js +112 -0
  352. package/dist/mcps/tools/tool-discovery.js +65 -0
  353. package/dist/mcps/tools/tool-executor.js +75 -0
  354. package/dist/mcps/tools/tool-registry.js +67 -0
  355. package/dist/mcps/types/index.js +15 -0
  356. package/dist/mcps/types/json-rpc.types.js +7 -0
  357. package/dist/mcps/types/mcp.types.js +7 -0
  358. package/dist/metrics/agent-metrics.js +574 -0
  359. package/dist/metrics/index.js +6 -0
  360. package/dist/monitoring/advanced-profiler.js +232 -0
  361. package/dist/monitoring/memory-monitor.js +315 -0
  362. package/dist/monitoring/nudge-watchdog.js +356 -0
  363. package/dist/monitoring/test-auto-generation-monitor.js +157 -0
  364. package/dist/orchestrator/agent-spawn-governor.js +559 -0
  365. package/dist/orchestrator/enhanced-multi-agent-orchestrator.js +399 -0
  366. package/dist/orchestrator/intelligent-commit-batcher.js +353 -0
  367. package/dist/orchestrator/multi-agent-orchestration-coordinator.js +456 -0
  368. package/dist/orchestrator/orchestrator.js +657 -0
  369. package/dist/orchestrator/self-direction-activation.js +245 -0
  370. package/dist/orchestrator/universal-librarian-consultation.js +216 -0
  371. package/dist/orchestrator/universal-registry-bridge.js +247 -0
  372. package/dist/performance/performance-budget-enforcer.js +434 -0
  373. package/dist/performance/performance-regression-tester.js +342 -0
  374. package/dist/plugin/xray-codex-injection.js +857 -0
  375. package/dist/postprocessor/PostProcessor.js +1048 -0
  376. package/dist/postprocessor/analysis/FailureAnalysisEngine.js +245 -0
  377. package/dist/postprocessor/autofix/AutoFixEngine.js +254 -0
  378. package/dist/postprocessor/autofix/FixValidator.js +56 -0
  379. package/dist/postprocessor/config.js +65 -0
  380. package/dist/postprocessor/escalation/EscalationEngine.js +492 -0
  381. package/dist/postprocessor/monitoring/MonitoringEngine.js +125 -0
  382. package/dist/postprocessor/redeploy/RedeployCoordinator.js +342 -0
  383. package/dist/postprocessor/services/RegressionAnalysisService.js +131 -0
  384. package/dist/postprocessor/success/SuccessHandler.js +134 -0
  385. package/dist/postprocessor/triggers/APITrigger.js +115 -0
  386. package/dist/postprocessor/triggers/GitHookTrigger.js +551 -0
  387. package/dist/postprocessor/triggers/WebhookTrigger.js +211 -0
  388. package/dist/postprocessor/types.js +4 -0
  389. package/dist/processors/doc-write-guard.js +46 -0
  390. package/dist/processors/implementations/agents-md-validation-processor.js +286 -0
  391. package/dist/processors/implementations/async-pattern-processor.js +158 -0
  392. package/dist/processors/implementations/codex-compliance-processor.js +57 -0
  393. package/dist/processors/implementations/commit-batcher-processor.js +71 -0
  394. package/dist/processors/implementations/console-log-guard-processor.js +163 -0
  395. package/dist/processors/implementations/coverage-analysis-processor.js +138 -0
  396. package/dist/processors/implementations/error-boundary-processor.js +44 -0
  397. package/dist/processors/implementations/inference-improvement-processor.js +270 -0
  398. package/dist/processors/implementations/log-protection-processor.js +118 -0
  399. package/dist/processors/implementations/nudge-processor.js +130 -0
  400. package/dist/processors/implementations/performance-budget-processor.js +217 -0
  401. package/dist/processors/implementations/postprocessor-chain-validator.js +149 -0
  402. package/dist/processors/implementations/pre-validate-processor.js +18 -0
  403. package/dist/processors/implementations/publish-preflight-processor.js +249 -0
  404. package/dist/processors/implementations/refactoring-logging-processor-wrapper.js +33 -0
  405. package/dist/processors/implementations/refactoring-logging-processor.js +96 -0
  406. package/dist/processors/implementations/regression-testing-processor.js +59 -0
  407. package/dist/processors/implementations/session-capture-processor.js +37 -0
  408. package/dist/processors/implementations/session-summary-processor.js +130 -0
  409. package/dist/processors/implementations/spawn-governance-processor.js +219 -0
  410. package/dist/processors/implementations/state-validation-processor.js +15 -0
  411. package/dist/processors/implementations/storytelling-trigger-processor.js +589 -0
  412. package/dist/processors/implementations/test-auto-creation-processor.js +484 -0
  413. package/dist/processors/implementations/test-execution-processor.js +132 -0
  414. package/dist/processors/implementations/typescript-compilation-processor.js +87 -0
  415. package/dist/processors/implementations/version-compliance-processor.js +350 -0
  416. package/dist/processors/processor-interfaces.js +126 -0
  417. package/dist/processors/processor-manager.js +826 -0
  418. package/dist/processors/processor-types.js +12 -0
  419. package/dist/public/about.html +228 -0
  420. package/dist/public/enterprise.html +27 -0
  421. package/dist/public/features.html +102 -0
  422. package/dist/public/index.html +145 -0
  423. package/dist/reporting/framework-reporting-system.js +187 -0
  424. package/dist/reporting/log-parser.js +281 -0
  425. package/dist/reporting/metrics.js +202 -0
  426. package/dist/reporting/report-formatter.js +146 -0
  427. package/dist/reporting/types.js +1 -0
  428. package/dist/scripts/activate-kernel-pipeline.js +101 -0
  429. package/dist/scripts/integration.js +234 -0
  430. package/dist/scripts/pre-command +26 -0
  431. package/dist/scripts/pre-command.mjs +358 -0
  432. package/dist/security/comprehensive-security-audit.js +1005 -0
  433. package/dist/security/index.js +13 -0
  434. package/dist/security/prompt-security-validator.js +148 -0
  435. package/dist/security/security-agent-coordinator.js +204 -0
  436. package/dist/security/security-auditor.js +584 -0
  437. package/dist/security/security-hardener.js +170 -0
  438. package/dist/security/security-hardening-system.js +727 -0
  439. package/dist/security/security-headers.js +118 -0
  440. package/dist/security/security-orchestration-layer.js +496 -0
  441. package/dist/security/security-scanner.js +429 -0
  442. package/dist/services/inference-tuner.js +301 -0
  443. package/dist/session/index.js +3 -0
  444. package/dist/session/session-cleanup-manager.js +366 -0
  445. package/dist/session/session-monitor.js +503 -0
  446. package/dist/session/session-state-manager.js +522 -0
  447. package/dist/skills/api-design/SKILL.md +37 -0
  448. package/dist/skills/architect-tools/SKILL.md +37 -0
  449. package/dist/skills/architecture-patterns/SKILL.md +37 -0
  450. package/dist/skills/auto-format/SKILL.md +37 -0
  451. package/dist/skills/backend-engineer/SKILL.md +49 -0
  452. package/dist/skills/boot-orchestrator/SKILL.md +37 -0
  453. package/dist/skills/bug-triage/SKILL.md +43 -0
  454. package/dist/skills/code-analyzer/SKILL.md +45 -0
  455. package/dist/skills/code-review/SKILL.md +52 -0
  456. package/dist/skills/content-creator/SKILL.md +38 -0
  457. package/dist/skills/database-engineer/SKILL.md +46 -0
  458. package/dist/skills/devops-engineer/SKILL.md +49 -0
  459. package/dist/skills/enforcer/SKILL.md +37 -0
  460. package/dist/skills/framework-compliance-audit/SKILL.md +37 -0
  461. package/dist/skills/frontend-engineer/SKILL.md +49 -0
  462. package/dist/skills/frontend-ui-ux-engineer/SKILL.md +41 -0
  463. package/dist/skills/git-workflow/SKILL.md +37 -0
  464. package/dist/skills/growth-strategist/SKILL.md +48 -0
  465. package/dist/skills/hermes-agent/SKILL.md +212 -0
  466. package/dist/skills/inference-improve/SKILL.md +97 -0
  467. package/dist/skills/lint/SKILL.md +37 -0
  468. package/dist/skills/log-monitor/SKILL.md +44 -0
  469. package/dist/skills/mobile-developer/SKILL.md +42 -0
  470. package/dist/skills/model-health-check/SKILL.md +37 -0
  471. package/dist/skills/multimodal-looker/SKILL.md +45 -0
  472. package/dist/skills/orchestrator/SKILL.md +37 -0
  473. package/dist/skills/performance-analysis/SKILL.md +37 -0
  474. package/dist/skills/performance-engineer/SKILL.md +41 -0
  475. package/dist/skills/performance-optimization/SKILL.md +37 -0
  476. package/dist/skills/processor-pipeline/SKILL.md +37 -0
  477. package/dist/skills/project-analysis/SKILL.md +42 -0
  478. package/dist/skills/refactoring-strategies/SKILL.md +37 -0
  479. package/dist/skills/registry.json +66 -0
  480. package/dist/skills/researcher/SKILL.md +37 -0
  481. package/dist/skills/security-audit/SKILL.md +48 -0
  482. package/dist/skills/security-scan/SKILL.md +37 -0
  483. package/dist/skills/seo-consultant/SKILL.md +43 -0
  484. package/dist/skills/session-management/SKILL.md +36 -0
  485. package/dist/skills/state-manager/SKILL.md +37 -0
  486. package/dist/skills/storyteller/SKILL.md +130 -0
  487. package/dist/skills/strategist/SKILL.md +32 -0
  488. package/dist/skills/tech-writer/SKILL.md +37 -0
  489. package/dist/skills/testing-best-practices/SKILL.md +37 -0
  490. package/dist/skills/testing-strategy/SKILL.md +43 -0
  491. package/dist/skills/ui-ux-design/SKILL.md +603 -0
  492. package/dist/state/context-providers.js +1 -0
  493. package/dist/state/index.js +7 -0
  494. package/dist/state/state-manager.js +208 -0
  495. package/dist/state/state-types.js +1 -0
  496. package/dist/testing/memory-regression-suite.js +258 -0
  497. package/dist/utils/batch-operations.js +292 -0
  498. package/dist/utils/codex-parser.js +445 -0
  499. package/dist/utils/command-runner.js +96 -0
  500. package/dist/utils/import-resolver.js +189 -0
  501. package/dist/utils/language-detector.js +383 -0
  502. package/dist/utils/path-resolver.js +112 -0
  503. package/dist/utils/shutdown-handler.js +75 -0
  504. package/dist/utils/test-template-generator.js +178 -0
  505. package/dist/utils/token-manager.js +163 -0
  506. package/dist/validation/estimation-validator.js +241 -0
  507. package/dist/validation/report-content-validator.js +218 -0
  508. package/opencode.json +153 -0
  509. package/package.json +170 -0
  510. package/scripts/helpers/resolve-config-path.cjs +57 -0
  511. package/scripts/helpers/resolve-config-path.mjs +73 -0
  512. package/scripts/hooks/pre-command +26 -0
  513. package/scripts/hooks/pre-command.mjs +358 -0
  514. package/scripts/hooks/run-hook.js +570 -0
  515. package/scripts/mjs/test-consumer-readiness.mjs +273 -0
  516. package/scripts/mjs/test-mcp-functionality.mjs +507 -0
  517. package/scripts/mjs/validate-mcp-connectivity.cjs +75 -0
  518. package/scripts/mjs/validate-postinstall-config.mjs +308 -0
  519. package/scripts/node/auto-reflection-generator.mjs +496 -0
  520. package/scripts/node/basic-security-audit.cjs +338 -0
  521. package/scripts/node/ci-cd-auto-fix.cjs +263 -0
  522. package/scripts/node/ci-report-generator.mjs +227 -0
  523. package/scripts/node/enforce-agents-md.mjs +420 -0
  524. package/scripts/node/enforce-version-compliance.sh +22 -0
  525. package/scripts/node/enforce-version-compliance.ts +126 -0
  526. package/scripts/node/github-actions-monitor.cjs +23 -0
  527. package/scripts/node/govern-reflection.mjs +160 -0
  528. package/scripts/node/postinstall.cjs +78 -0
  529. package/scripts/node/pre-publish-guard.js +267 -0
  530. package/scripts/node/prepare-consumer.cjs +143 -0
  531. package/scripts/node/reflection-processor.cjs +213 -0
  532. package/scripts/node/reflection-validate.sh +194 -0
  533. package/scripts/node/release-tweet.mjs +39 -0
  534. package/scripts/node/release.js +159 -0
  535. package/scripts/node/release.mjs +213 -0
  536. package/scripts/node/setup-dev.cjs +83 -0
  537. package/scripts/node/setup.cjs +214 -0
  538. package/scripts/node/sync-versions.mjs +140 -0
  539. package/scripts/node/universal-version-manager.js +1025 -0
  540. package/scripts/node/validate-external-processes.js +265 -0
  541. package/scripts/node/validate-mcp-connectivity.js +258 -0
  542. package/scripts/node/version-manager.mjs +524 -0
  543. package/scripts/validate-stringray-comprehensive.js +636 -0
  544. package/src/integrations/grok/plugin/0xray/.mcp.json +15 -0
  545. package/src/integrations/grok/plugin/0xray/hooks/hooks.json +30 -0
  546. package/src/mcps/agent-resolver.ts +168 -0
  547. package/src/mcps/architect-tools.server.ts +343 -0
  548. package/src/mcps/auto-format.server.ts +529 -0
  549. package/src/mcps/boot-orchestrator.server.ts +1082 -0
  550. package/src/mcps/config/__tests__/config-loader.test.ts +338 -0
  551. package/src/mcps/config/__tests__/config-validator.test.ts +646 -0
  552. package/src/mcps/config/__tests__/server-config-registry.test.ts +257 -0
  553. package/src/mcps/config/config-loader.ts +127 -0
  554. package/src/mcps/config/config-validator.ts +127 -0
  555. package/src/mcps/config/index.ts +32 -0
  556. package/src/mcps/config/plugin-server-registry.ts +335 -0
  557. package/src/mcps/config/server-config-registry.ts +395 -0
  558. package/src/mcps/connection/connection-manager.ts +91 -0
  559. package/src/mcps/connection/connection-pool.ts +216 -0
  560. package/src/mcps/connection/mcp-connection.ts +327 -0
  561. package/src/mcps/connection/process-spawner.ts +47 -0
  562. package/src/mcps/enforcer-tools.server.ts +1106 -0
  563. package/src/mcps/estimation.server.ts +229 -0
  564. package/src/mcps/framework-compliance-audit.server.ts +635 -0
  565. package/src/mcps/framework-help.server.ts +467 -0
  566. package/src/mcps/governance.server.ts +551 -0
  567. package/src/mcps/in-process-skill-registry.ts +79 -0
  568. package/src/mcps/knowledge-skills/api-design.server.test.ts +41 -0
  569. package/src/mcps/knowledge-skills/api-design.server.ts +160 -0
  570. package/src/mcps/knowledge-skills/architecture-patterns.server.ts +152 -0
  571. package/src/mcps/knowledge-skills/bug-triage-specialist.server.ts +624 -0
  572. package/src/mcps/knowledge-skills/code-analyzer.server.test.ts +129 -0
  573. package/src/mcps/knowledge-skills/code-analyzer.server.ts +591 -0
  574. package/src/mcps/knowledge-skills/code-review.server.ts +1132 -0
  575. package/src/mcps/knowledge-skills/content-creator.server.ts +300 -0
  576. package/src/mcps/knowledge-skills/database-design.server.ts +1200 -0
  577. package/src/mcps/knowledge-skills/devops-deployment.server.ts +1622 -0
  578. package/src/mcps/knowledge-skills/git-workflow.server.ts +152 -0
  579. package/src/mcps/knowledge-skills/growth-strategist.server.ts +413 -0
  580. package/src/mcps/knowledge-skills/log-monitor.server.ts +619 -0
  581. package/src/mcps/knowledge-skills/mobile-development.server.ts +672 -0
  582. package/src/mcps/knowledge-skills/multimodal-looker.server.ts +1500 -0
  583. package/src/mcps/knowledge-skills/performance-optimization.server.ts +2065 -0
  584. package/src/mcps/knowledge-skills/project-analysis.server.ts +1111 -0
  585. package/src/mcps/knowledge-skills/refactoring-strategies.server.ts +1092 -0
  586. package/src/mcps/knowledge-skills/security-audit.server.test.ts +112 -0
  587. package/src/mcps/knowledge-skills/security-audit.server.ts +1193 -0
  588. package/src/mcps/knowledge-skills/seo-consultant.server.ts +1160 -0
  589. package/src/mcps/knowledge-skills/session-management.server.ts +576 -0
  590. package/src/mcps/knowledge-skills/skill-invocation.server.ts +941 -0
  591. package/src/mcps/knowledge-skills/strategist.server.ts +267 -0
  592. package/src/mcps/knowledge-skills/tech-writer.server.ts +1638 -0
  593. package/src/mcps/knowledge-skills/testing-best-practices.server.test.ts +136 -0
  594. package/src/mcps/knowledge-skills/testing-best-practices.server.ts +1232 -0
  595. package/src/mcps/knowledge-skills/testing-strategy.server.test.ts +100 -0
  596. package/src/mcps/knowledge-skills/testing-strategy.server.ts +1172 -0
  597. package/src/mcps/knowledge-skills/ui-ux-design.server.ts +2076 -0
  598. package/src/mcps/lint.server.ts +483 -0
  599. package/src/mcps/mcp-client.ts +706 -0
  600. package/src/mcps/model-health-check.server.ts +292 -0
  601. package/src/mcps/orchestrator/config/agent-capabilities.ts +108 -0
  602. package/src/mcps/orchestrator/execution/execution-planner.ts +353 -0
  603. package/src/mcps/orchestrator/handlers/complexity-handler.ts +125 -0
  604. package/src/mcps/orchestrator/handlers/status-handler.ts +295 -0
  605. package/src/mcps/orchestrator/handlers/task-handler.ts +268 -0
  606. package/src/mcps/orchestrator/server.ts +388 -0
  607. package/src/mcps/orchestrator/types.ts +81 -0
  608. package/src/mcps/orchestrator.server.ts +34 -0
  609. package/src/mcps/performance-analysis.server.ts +715 -0
  610. package/src/mcps/processor-pipeline.server.ts +778 -0
  611. package/src/mcps/protocol/protocol-constants.ts +51 -0
  612. package/src/mcps/registry.json +110 -0
  613. package/src/mcps/researcher.server.ts +595 -0
  614. package/src/mcps/security-scan.server.ts +651 -0
  615. package/src/mcps/simulation/__tests__/simulation-engine.test.ts +275 -0
  616. package/src/mcps/simulation/index.ts +23 -0
  617. package/src/mcps/simulation/server-simulations.ts +241 -0
  618. package/src/mcps/simulation/simulation-engine.ts +126 -0
  619. package/src/mcps/state-manager.server.ts +777 -0
  620. package/src/mcps/tools/__tests__/tool-cache.test.ts +205 -0
  621. package/src/mcps/tools/__tests__/tool-discovery.test.ts +189 -0
  622. package/src/mcps/tools/__tests__/tool-executor.test.ts +215 -0
  623. package/src/mcps/tools/__tests__/tool-registry.test.ts +230 -0
  624. package/src/mcps/tools/index.ts +15 -0
  625. package/src/mcps/tools/tool-cache.ts +145 -0
  626. package/src/mcps/tools/tool-discovery.ts +83 -0
  627. package/src/mcps/tools/tool-executor.ts +106 -0
  628. package/src/mcps/tools/tool-registry.ts +78 -0
  629. package/src/mcps/types/__tests__/types.test.ts +341 -0
  630. package/src/mcps/types/index.ts +17 -0
  631. package/src/mcps/types/json-rpc.types.ts +38 -0
  632. package/src/mcps/types/mcp.types.ts +115 -0
  633. package/src/opencode/agents/api-design.yml +31 -0
  634. package/src/opencode/agents/architect.yml +15 -0
  635. package/src/opencode/agents/architecture-patterns.yml +14 -0
  636. package/src/opencode/agents/auto-format.yml +14 -0
  637. package/src/opencode/agents/backend-engineer.yml +12 -0
  638. package/src/opencode/agents/boot-orchestrator.yml +14 -0
  639. package/src/opencode/agents/bug-triage-specialist.yml +15 -0
  640. package/src/opencode/agents/code-analyzer.yml +12 -0
  641. package/src/opencode/agents/code-reviewer.yml +14 -0
  642. package/src/opencode/agents/content-creator.yml +12 -0
  643. package/src/opencode/agents/database-engineer.yml +12 -0
  644. package/src/opencode/agents/devops-engineer.yml +12 -0
  645. package/src/opencode/agents/framework-compliance-audit.yml +14 -0
  646. package/src/opencode/agents/frontend-engineer.yml +12 -0
  647. package/src/opencode/agents/frontend-ui-ux-engineer.yml +12 -0
  648. package/src/opencode/agents/git-workflow.yml +15 -0
  649. package/src/opencode/agents/growth-strategist.yml +12 -0
  650. package/src/opencode/agents/hermes-agent.yml +12 -0
  651. package/src/opencode/agents/inference-improve.yml +12 -0
  652. package/src/opencode/agents/lint.yml +14 -0
  653. package/src/opencode/agents/log-monitor.yml +12 -0
  654. package/src/opencode/agents/mobile-developer.yml +12 -0
  655. package/src/opencode/agents/model-health-check.yml +12 -0
  656. package/src/opencode/agents/multimodal-looker.yml +12 -0
  657. package/src/opencode/agents/performance-analysis.yml +12 -0
  658. package/src/opencode/agents/performance-engineer.yml +12 -0
  659. package/src/opencode/agents/performance-optimization.yml +12 -0
  660. package/src/opencode/agents/processor-pipeline.yml +14 -0
  661. package/src/opencode/agents/project-analysis.yml +12 -0
  662. package/src/opencode/agents/refactorer.yml +12 -0
  663. package/src/opencode/agents/researcher.yml +12 -0
  664. package/src/opencode/agents/security-auditor.yml +12 -0
  665. package/src/opencode/agents/security-scan.yml +12 -0
  666. package/src/opencode/agents/seo-consultant.yml +12 -0
  667. package/src/opencode/agents/session-management.yml +12 -0
  668. package/src/opencode/agents/state-manager.yml +12 -0
  669. package/src/opencode/agents/storyteller.yml +12 -0
  670. package/src/opencode/agents/strategist.yml +12 -0
  671. package/src/opencode/agents/tech-writer.yml +12 -0
  672. package/src/opencode/agents/testing-best-practices.yml +12 -0
  673. package/src/opencode/agents/testing-lead.yml +12 -0
  674. package/src/opencode/agents/ui-ux-design.yml +12 -0
  675. package/src/opencode/codex.codex +8 -0
  676. package/src/opencode/commands/auto-format.md +99 -0
  677. package/src/opencode/commands/auto-summary-capture.md +90 -0
  678. package/src/opencode/commands/dependency-audit.md +184 -0
  679. package/src/opencode/commands/enforcer-daily-scan.md +137 -0
  680. package/src/opencode/commands/framework-compliance-audit.md +205 -0
  681. package/src/opencode/commands/interactive-validator.md +75 -0
  682. package/src/opencode/commands/job-summary-logger.md +68 -0
  683. package/src/opencode/commands/lint.md +11 -0
  684. package/src/opencode/commands/mode-switch.md +95 -0
  685. package/src/opencode/commands/model-health-check.md +186 -0
  686. package/src/opencode/commands/performance-analysis.md +144 -0
  687. package/src/opencode/commands/pre-commit-introspection.md +185 -0
  688. package/src/opencode/commands/pre-commit-introspection.sh +133 -0
  689. package/src/opencode/commands/security-scan.md +157 -0
  690. package/src/opencode/commands/sisyphus-validation.md +128 -0
  691. package/src/opencode/commands/summary-logger.md +83 -0
  692. package/src/opencode/enforcer-config.json +285 -0
  693. package/src/opencode/openclaw/config.json +25 -0
  694. package/src/opencode/workflows/post-deployment-audit.yml +123 -0
  695. package/src/skills/api-design/SKILL.md +37 -0
  696. package/src/skills/architect-tools/SKILL.md +37 -0
  697. package/src/skills/architecture-patterns/SKILL.md +37 -0
  698. package/src/skills/auto-format/SKILL.md +37 -0
  699. package/src/skills/backend-engineer/SKILL.md +49 -0
  700. package/src/skills/boot-orchestrator/SKILL.md +37 -0
  701. package/src/skills/bug-triage/SKILL.md +43 -0
  702. package/src/skills/code-analyzer/SKILL.md +45 -0
  703. package/src/skills/code-review/SKILL.md +52 -0
  704. package/src/skills/content-creator/SKILL.md +38 -0
  705. package/src/skills/database-engineer/SKILL.md +46 -0
  706. package/src/skills/devops-engineer/SKILL.md +49 -0
  707. package/src/skills/enforcer/SKILL.md +37 -0
  708. package/src/skills/framework-compliance-audit/SKILL.md +37 -0
  709. package/src/skills/frontend-engineer/SKILL.md +49 -0
  710. package/src/skills/frontend-ui-ux-engineer/SKILL.md +41 -0
  711. package/src/skills/git-workflow/SKILL.md +37 -0
  712. package/src/skills/growth-strategist/SKILL.md +48 -0
  713. package/src/skills/hermes-agent/SKILL.md +212 -0
  714. package/src/skills/inference-improve/SKILL.md +97 -0
  715. package/src/skills/lint/SKILL.md +37 -0
  716. package/src/skills/log-monitor/SKILL.md +44 -0
  717. package/src/skills/mobile-developer/SKILL.md +42 -0
  718. package/src/skills/model-health-check/SKILL.md +37 -0
  719. package/src/skills/multimodal-looker/SKILL.md +45 -0
  720. package/src/skills/orchestrator/SKILL.md +37 -0
  721. package/src/skills/performance-analysis/SKILL.md +37 -0
  722. package/src/skills/performance-engineer/SKILL.md +41 -0
  723. package/src/skills/performance-optimization/SKILL.md +37 -0
  724. package/src/skills/processor-pipeline/SKILL.md +37 -0
  725. package/src/skills/project-analysis/SKILL.md +42 -0
  726. package/src/skills/refactoring-strategies/SKILL.md +37 -0
  727. package/src/skills/registry.json +66 -0
  728. package/src/skills/researcher/SKILL.md +37 -0
  729. package/src/skills/security-audit/SKILL.md +48 -0
  730. package/src/skills/security-scan/SKILL.md +37 -0
  731. package/src/skills/seo-consultant/SKILL.md +43 -0
  732. package/src/skills/session-management/SKILL.md +36 -0
  733. package/src/skills/state-manager/SKILL.md +37 -0
  734. package/src/skills/storyteller/SKILL.md +130 -0
  735. package/src/skills/strategist/SKILL.md +32 -0
  736. package/src/skills/tech-writer/SKILL.md +37 -0
  737. package/src/skills/testing-best-practices/SKILL.md +37 -0
  738. package/src/skills/testing-strategy/SKILL.md +43 -0
  739. package/src/skills/ui-ux-design/SKILL.md +603 -0
@@ -0,0 +1,1200 @@
1
+ /**
2
+ * xray Database Design MCP Server
3
+ *
4
+ * Knowledge skill for database architecture, schema optimization,
5
+ * query performance analysis, and data modeling best practices
6
+ */
7
+
8
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
9
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
10
+ import {
11
+ CallToolRequestSchema,
12
+ ListToolsRequestSchema,
13
+ } from "@modelcontextprotocol/sdk/types.js";
14
+ import * as fs from "fs";
15
+ import * as path from "path";
16
+ import { frameworkLogger } from "../../core/framework-logger.js";
17
+ import { createGracefulShutdown } from "../../utils/shutdown-handler.js";
18
+
19
+ interface DatabaseSchema {
20
+ tables: TableSchema[];
21
+ relationships: Relationship[];
22
+ indexes: IndexRecommendation[];
23
+ constraints: ConstraintAnalysis[];
24
+ }
25
+
26
+ interface TableSchema {
27
+ name: string;
28
+ columns: ColumnSchema[];
29
+ primaryKey: string[];
30
+ estimatedRows: number;
31
+ accessPatterns: string[];
32
+ }
33
+
34
+ interface ColumnSchema {
35
+ name: string;
36
+ type: string;
37
+ nullable: boolean;
38
+ defaultValue?: string;
39
+ constraints?: string[];
40
+ usage: "primary" | "foreign" | "data" | "computed";
41
+ }
42
+
43
+ interface Relationship {
44
+ fromTable: string;
45
+ toTable: string;
46
+ fromColumn: string;
47
+ toColumn: string;
48
+ type: "one-to-one" | "one-to-many" | "many-to-many";
49
+ cardinality: string;
50
+ }
51
+
52
+ interface IndexRecommendation {
53
+ table: string;
54
+ columns: string[];
55
+ type: "btree" | "hash" | "gin" | "gist" | "spgist" | "brin" | "bitmap";
56
+ reason: string;
57
+ impact: "high" | "medium" | "low";
58
+ }
59
+
60
+ interface ConstraintAnalysis {
61
+ table: string;
62
+ column: string;
63
+ constraintType: "check" | "unique" | "foreign-key" | "not-null";
64
+ recommendation: string;
65
+ severity: "info" | "warning" | "error";
66
+ }
67
+
68
+ interface QueryAnalysis {
69
+ query: string;
70
+ tables: string[];
71
+ operations: string[];
72
+ estimatedCost: number;
73
+ recommendations: string[];
74
+ optimizationOpportunities: string[];
75
+ }
76
+
77
+ interface SchemaIssue {
78
+ table: string;
79
+ column: string | null;
80
+ description: string;
81
+ severity: "info" | "warning" | "error";
82
+ }
83
+
84
+ interface SchemaAnalysis {
85
+ normalizationLevel: number;
86
+ indexingStrategy: string;
87
+ relationshipComplexity: string;
88
+ performanceConsiderations: string[];
89
+ indexes: IndexRecommendation[];
90
+ }
91
+
92
+ interface ModelValidation {
93
+ issues: string[];
94
+ score: number;
95
+ }
96
+
97
+ interface EntityRelationship {
98
+ from: string;
99
+ to: string;
100
+ type: "one-to-one" | "one-to-many" | "many-to-many";
101
+ }
102
+
103
+ interface SchemaComparison {
104
+ addTables: string[];
105
+ dropTables: string[];
106
+ addColumns: string[];
107
+ modifyColumns: string[];
108
+ dropColumns: string[];
109
+ addIndexes: string[];
110
+ dropIndexes: string[];
111
+ hasDataLoss: boolean;
112
+ }
113
+
114
+ class StringRayDatabaseDesignServer {
115
+ private server: Server;
116
+
117
+ constructor() {
118
+ this.server = new Server(
119
+ {
120
+ name: "database-design", version: "1.22.67",
121
+ },
122
+ {
123
+ capabilities: {
124
+ tools: {},
125
+ },
126
+ },
127
+ );
128
+
129
+ this.setupToolHandlers();
130
+ // Server initialization - removed unnecessary startup logging
131
+ }
132
+
133
+ private setupToolHandlers() {
134
+ this.server.setRequestHandler(ListToolsRequestSchema, async () => {
135
+ return {
136
+ tools: [
137
+ {
138
+ name: "analyze_schema",
139
+ description:
140
+ "Analyze database schema for optimization opportunities and best practices",
141
+ inputSchema: {
142
+ type: "object",
143
+ properties: {
144
+ schemaFile: {
145
+ type: "string",
146
+ description:
147
+ "Path to schema definition file (SQL, migration, or ORM model)",
148
+ },
149
+ databaseType: {
150
+ type: "string",
151
+ enum: ["postgresql", "mysql", "sqlite", "mongodb", "redis"],
152
+ description: "Database type for specific optimizations",
153
+ },
154
+ includeIndexes: {
155
+ type: "boolean",
156
+ description: "Include index recommendations in analysis",
157
+ default: true,
158
+ },
159
+ },
160
+ required: ["schemaFile"],
161
+ },
162
+ },
163
+ {
164
+ name: "optimize_query",
165
+ description:
166
+ "Analyze and optimize SQL queries for better performance",
167
+ inputSchema: {
168
+ type: "object",
169
+ properties: {
170
+ query: {
171
+ type: "string",
172
+ description: "SQL query to analyze and optimize",
173
+ },
174
+ schemaContext: {
175
+ type: "string",
176
+ description:
177
+ "Schema context or file path for better analysis",
178
+ },
179
+ databaseType: {
180
+ type: "string",
181
+ enum: ["postgresql", "mysql", "sqlite"],
182
+ description: "Database type for query optimization",
183
+ },
184
+ },
185
+ required: ["query"],
186
+ },
187
+ },
188
+ {
189
+ name: "design_data_model",
190
+ description: "Design optimal data model for given requirements",
191
+ inputSchema: {
192
+ type: "object",
193
+ properties: {
194
+ requirements: {
195
+ type: "string",
196
+ description: "Business requirements and data access patterns",
197
+ },
198
+ entities: {
199
+ type: "array",
200
+ items: { type: "string" },
201
+ description: "List of main entities/business objects",
202
+ },
203
+ relationships: {
204
+ type: "array",
205
+ items: {
206
+ type: "object",
207
+ properties: {
208
+ from: { type: "string" },
209
+ to: { type: "string" },
210
+ type: {
211
+ type: "string",
212
+ enum: ["one-to-one", "one-to-many", "many-to-many"],
213
+ },
214
+ },
215
+ },
216
+ description: "Entity relationships",
217
+ },
218
+ databaseType: {
219
+ type: "string",
220
+ enum: ["postgresql", "mysql", "mongodb", "redis"],
221
+ description: "Target database type",
222
+ },
223
+ },
224
+ required: ["requirements", "entities"],
225
+ },
226
+ },
227
+ {
228
+ name: "migrate_schema",
229
+ description: "Generate migration scripts for schema changes",
230
+ inputSchema: {
231
+ type: "object",
232
+ properties: {
233
+ currentSchema: {
234
+ type: "string",
235
+ description: "Current schema definition",
236
+ },
237
+ targetSchema: {
238
+ type: "string",
239
+ description: "Target schema definition",
240
+ },
241
+ databaseType: {
242
+ type: "string",
243
+ enum: ["postgresql", "mysql", "sqlite"],
244
+ description: "Database type for migration",
245
+ },
246
+ safeMode: {
247
+ type: "boolean",
248
+ description: "Generate rollback scripts and safety checks",
249
+ default: true,
250
+ },
251
+ },
252
+ required: ["currentSchema", "targetSchema"],
253
+ },
254
+ },
255
+ ],
256
+ };
257
+ });
258
+
259
+ this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
260
+ const { name, arguments: args } = request.params;
261
+
262
+ switch (name) {
263
+ case "analyze_schema":
264
+ return await this.analyzeSchema(args);
265
+ case "optimize_query":
266
+ return await this.optimizeQuery(args);
267
+ case "design_data_model":
268
+ return await this.designDataModel(args);
269
+ case "migrate_schema":
270
+ return await this.migrateSchema(args);
271
+ default:
272
+ throw new Error(`Unknown tool: ${name}`);
273
+ }
274
+ });
275
+ }
276
+
277
+ private async analyzeSchema(args: Record<string, unknown> | undefined) {
278
+ const {
279
+ schemaFile,
280
+ databaseType = "postgresql",
281
+ includeIndexes = true,
282
+ } = args as { schemaFile: string; databaseType?: string; includeIndexes?: boolean };
283
+
284
+ try {
285
+ if (!fs.existsSync(schemaFile)) {
286
+ throw new Error(`Schema file not found: ${schemaFile}`);
287
+ }
288
+
289
+ const content = fs.readFileSync(schemaFile, "utf-8");
290
+ const extension = path.extname(schemaFile).toLowerCase();
291
+
292
+ const schema = this.parseSchema(content, extension, databaseType);
293
+ const analysis = this.analyzeSchemaDesign(schema, databaseType);
294
+
295
+ if (includeIndexes) {
296
+ analysis.indexes = this.generateIndexRecommendations(
297
+ schema,
298
+ databaseType,
299
+ );
300
+ }
301
+
302
+ const issues = this.identifySchemaIssues(schema, databaseType);
303
+ const recommendations = this.generateSchemaRecommendations(
304
+ issues,
305
+ schema,
306
+ databaseType,
307
+ );
308
+
309
+ return {
310
+ content: [
311
+ {
312
+ type: "text",
313
+ text:
314
+ `Database Schema Analysis for ${schemaFile}:\n\n` +
315
+ `📊 SCHEMA OVERVIEW\n` +
316
+ `Database Type: ${databaseType.toUpperCase()}\n` +
317
+ `Tables: ${schema.tables.length}\n` +
318
+ `Relationships: ${schema.relationships.length}\n` +
319
+ `Constraints: ${schema.constraints.length}\n` +
320
+ (includeIndexes
321
+ ? `Index Recommendations: ${analysis.indexes.length}\n\n`
322
+ : "\n") +
323
+ `🔍 KEY FINDINGS\n${issues
324
+ .slice(0, 5)
325
+ .map(
326
+ (issue) =>
327
+ `${this.getIssueSeverityIcon(issue.severity)} ${issue.table ? `${issue.table}.` : ""}${issue.column || "Schema"}: ${issue.description}`,
328
+ )
329
+ .join("\n")}\n\n` +
330
+ `💡 OPTIMIZATION RECOMMENDATIONS\n${recommendations
331
+ .slice(0, 5)
332
+ .map((rec, i) => `${i + 1}. ${rec}`)
333
+ .join("\n")}\n\n` +
334
+ `📈 PERFORMANCE METRICS\n` +
335
+ `Normalization Score: ${this.calculateNormalizationScore(schema)}/100\n` +
336
+ `Indexing Coverage: ${this.calculateIndexingCoverage(analysis.indexes, schema)}%\n` +
337
+ `Relationship Complexity: ${this.assessRelationshipComplexity(schema.relationships)}`,
338
+ },
339
+ ],
340
+ data: { schema, analysis, issues, recommendations },
341
+ };
342
+ } catch (error) {
343
+ return {
344
+ content: [
345
+ {
346
+ type: "text",
347
+ text: `Error analyzing schema: ${error instanceof Error ? error.message : String(error)}`,
348
+ },
349
+ ],
350
+ };
351
+ }
352
+ }
353
+
354
+ private async optimizeQuery(args: Record<string, unknown> | undefined) {
355
+ const { query, schemaContext, databaseType = "postgresql" } = args as { query: string; schemaContext?: string; databaseType?: string };
356
+
357
+ try {
358
+ const analysis = this.analyzeQuery(query, databaseType);
359
+
360
+ // Load schema context if provided
361
+ let schema: DatabaseSchema | null = null;
362
+ if (schemaContext) {
363
+ try {
364
+ if (fs.existsSync(schemaContext)) {
365
+ const schemaContent = fs.readFileSync(schemaContext, "utf-8");
366
+ const extension = path.extname(schemaContext).toLowerCase();
367
+ schema = this.parseSchema(schemaContent, extension, databaseType);
368
+ }
369
+ } catch (e) {
370
+ // Schema context loading failed, continue without it
371
+ }
372
+ }
373
+
374
+ const optimizations = this.generateQueryOptimizations(
375
+ analysis,
376
+ schema,
377
+ databaseType,
378
+ );
379
+ const performanceScore = this.calculateQueryPerformanceScore(
380
+ analysis,
381
+ optimizations,
382
+ );
383
+
384
+ return {
385
+ content: [
386
+ {
387
+ type: "text",
388
+ text:
389
+ `Query Optimization Analysis:\n\n` +
390
+ `🔍 QUERY ANALYSIS\n` +
391
+ `Database: ${databaseType.toUpperCase()}\n` +
392
+ `Tables Involved: ${analysis.tables.join(", ") || "None identified"}\n` +
393
+ `Operations: ${analysis.operations.join(", ") || "None identified"}\n` +
394
+ `Estimated Cost: ${analysis.estimatedCost}\n\n` +
395
+ `📊 PERFORMANCE SCORE: ${performanceScore}/100\n\n` +
396
+ `⚡ OPTIMIZATION OPPORTUNITIES\n${optimizations
397
+ .slice(0, 5)
398
+ .map((opt, i) => `${i + 1}. ${opt}`)
399
+ .join("\n")}\n\n` +
400
+ `🔧 RECOMMENDED IMPROVEMENTS\n${analysis.recommendations
401
+ .slice(0, 3)
402
+ .map((rec, i) => `${i + 1}. ${rec}`)
403
+ .join("\n")}`,
404
+ },
405
+ ],
406
+ data: { analysis, optimizations, performanceScore },
407
+ };
408
+ } catch (error) {
409
+ return {
410
+ content: [
411
+ {
412
+ type: "text",
413
+ text: `Error optimizing query: ${error instanceof Error ? error.message : String(error)}`,
414
+ },
415
+ ],
416
+ };
417
+ }
418
+ }
419
+
420
+ private async designDataModel(args: Record<string, unknown> | undefined) {
421
+ const {
422
+ requirements,
423
+ entities,
424
+ relationships = [],
425
+ databaseType = "postgresql",
426
+ } = args as { requirements: string; entities: string[]; relationships?: EntityRelationship[]; databaseType?: string };
427
+
428
+ try {
429
+ const model = this.generateDataModel(
430
+ requirements,
431
+ entities,
432
+ relationships,
433
+ databaseType,
434
+ );
435
+ const validation = this.validateDataModel(model, databaseType);
436
+ const recommendations = this.generateModelRecommendations(
437
+ model,
438
+ validation,
439
+ );
440
+
441
+ return {
442
+ content: [
443
+ {
444
+ type: "text",
445
+ text:
446
+ `Data Model Design for ${databaseType.toUpperCase()}:\n\n` +
447
+ `📋 REQUIREMENTS SUMMARY\n${requirements.substring(0, 200)}${requirements.length > 200 ? "..." : ""}\n\n` +
448
+ `🏗️ PROPOSED DATA MODEL\n` +
449
+ `Entities: ${model.tables.length}\n` +
450
+ `Relationships: ${model.relationships.length}\n` +
451
+ `Indexes: ${model.indexes.length}\n\n` +
452
+ `📊 TABLES\n${model.tables
453
+ .map(
454
+ (table) =>
455
+ `• ${table.name} (${table.columns.length} columns, ~${table.estimatedRows} rows)`,
456
+ )
457
+ .join("\n")}\n\n` +
458
+ `🔗 RELATIONSHIPS\n${model.relationships
459
+ .map(
460
+ (rel) => `• ${rel.fromTable} → ${rel.toTable} (${rel.type})`,
461
+ )
462
+ .join("\n")}\n\n` +
463
+ `💡 DESIGN RECOMMENDATIONS\n${recommendations
464
+ .slice(0, 5)
465
+ .map((rec, i) => `${i + 1}. ${rec}`)
466
+ .join("\n")}`,
467
+ },
468
+ ],
469
+ data: { model, validation, recommendations },
470
+ };
471
+ } catch (error) {
472
+ return {
473
+ content: [
474
+ {
475
+ type: "text",
476
+ text: `Error designing data model: ${error instanceof Error ? error.message : String(error)}`,
477
+ },
478
+ ],
479
+ };
480
+ }
481
+ }
482
+
483
+ private async migrateSchema(args: Record<string, unknown> | undefined) {
484
+ const {
485
+ currentSchema,
486
+ targetSchema,
487
+ databaseType = "postgresql",
488
+ safeMode = true,
489
+ } = args as { currentSchema: string; targetSchema: string; databaseType?: string; safeMode?: boolean };
490
+
491
+ try {
492
+ const current = this.parseSchemaString(currentSchema, databaseType);
493
+ const target = this.parseSchemaString(targetSchema, databaseType);
494
+
495
+ const changes = this.compareSchemas(current, target);
496
+ const migrationScript = this.generateMigrationScript(
497
+ changes,
498
+ databaseType,
499
+ safeMode,
500
+ );
501
+ const rollbackScript = safeMode
502
+ ? this.generateRollbackScript(changes, databaseType)
503
+ : null;
504
+
505
+ return {
506
+ content: [
507
+ {
508
+ type: "text",
509
+ text:
510
+ `Schema Migration Script (${databaseType.toUpperCase()}):\n\n` +
511
+ `📊 CHANGES DETECTED\n` +
512
+ `Tables to Add: ${changes.addTables.length}\n` +
513
+ `Tables to Drop: ${changes.dropTables.length}\n` +
514
+ `Columns to Add: ${changes.addColumns.length}\n` +
515
+ `Columns to Modify: ${changes.modifyColumns.length}\n` +
516
+ `Indexes to Add: ${changes.addIndexes.length}\n\n` +
517
+ `🔄 MIGRATION SCRIPT\n\`\`\`sql\n${migrationScript}\n\`\`\`\n\n` +
518
+ (rollbackScript
519
+ ? `↩️ ROLLBACK SCRIPT\n\`\`\`sql\n${rollbackScript}\n\`\`\`\n\n`
520
+ : "") +
521
+ `⚠️ SAFETY NOTES\n` +
522
+ `• Always backup data before running migrations\n` +
523
+ `• Test migrations on staging environment first\n` +
524
+ `• Review generated scripts carefully\n` +
525
+ (changes.hasDataLoss
526
+ ? `• ⚠️ This migration may result in data loss!\n`
527
+ : ""),
528
+ },
529
+ ],
530
+ data: {
531
+ changes,
532
+ migrationScript,
533
+ rollbackScript,
534
+ hasDataLoss: changes.hasDataLoss,
535
+ },
536
+ };
537
+ } catch (error) {
538
+ return {
539
+ content: [
540
+ {
541
+ type: "text",
542
+ text: `Error generating migration: ${error instanceof Error ? error.message : String(error)}`,
543
+ },
544
+ ],
545
+ };
546
+ }
547
+ }
548
+
549
+ private parseSchema(
550
+ content: string,
551
+ extension: string,
552
+ databaseType: string,
553
+ ): DatabaseSchema {
554
+ // Simplified schema parsing - in production this would be more sophisticated
555
+ const tables: TableSchema[] = [];
556
+ const relationships: Relationship[] = [];
557
+
558
+ if (extension === ".sql") {
559
+ // Parse SQL CREATE TABLE statements
560
+ const createTableRegex = /CREATE\s+TABLE\s+(\w+)\s*\(([\s\S]*?)\);/gi;
561
+ let match;
562
+
563
+ while ((match = createTableRegex.exec(content)) !== null) {
564
+ const tableName = match[1];
565
+ const tableContent = match[2];
566
+
567
+ if (!tableName || !tableContent) continue;
568
+
569
+ const columns = this.parseTableColumns(tableContent, databaseType);
570
+ const primaryKey = this.extractPrimaryKey(tableContent);
571
+
572
+ tables.push({
573
+ name: tableName,
574
+ columns,
575
+ primaryKey,
576
+ estimatedRows: 1000, // Default estimate
577
+ accessPatterns: [],
578
+ });
579
+ }
580
+
581
+ // Extract foreign keys for relationships
582
+ relationships.push(...this.extractRelationships(content, databaseType));
583
+ }
584
+
585
+ return {
586
+ tables,
587
+ relationships,
588
+ indexes: [],
589
+ constraints: [],
590
+ };
591
+ }
592
+
593
+ private parseSchemaString(
594
+ schemaString: string,
595
+ databaseType: string,
596
+ ): DatabaseSchema {
597
+ return this.parseSchema(schemaString, ".sql", databaseType);
598
+ }
599
+
600
+ private parseTableColumns(
601
+ tableContent: string,
602
+ databaseType: string,
603
+ ): ColumnSchema[] {
604
+ const columns: ColumnSchema[] = [];
605
+ const columnRegex =
606
+ /(\w+)\s+([A-Z]+(?:\([^)]*\))?)(?:\s+(NOT\s+NULL|NULL|PRIMARY\s+KEY|UNIQUE|REFERENCES\s+\w+\([^)]*\)))*/gi;
607
+
608
+ let match;
609
+ while ((match = columnRegex.exec(tableContent)) !== null) {
610
+ const [, name, type, constraints] = match;
611
+
612
+ if (name && type) {
613
+ columns.push({
614
+ name,
615
+ type,
616
+ nullable: !constraints || !constraints.includes("NOT NULL"),
617
+ constraints: constraints
618
+ ? constraints.split(/\s+/).filter((c) => c)
619
+ : [],
620
+ usage:
621
+ constraints && constraints.includes("PRIMARY KEY")
622
+ ? "primary"
623
+ : constraints && constraints.includes("REFERENCES")
624
+ ? "foreign"
625
+ : "data",
626
+ });
627
+ }
628
+ }
629
+
630
+ return columns;
631
+ }
632
+
633
+ private extractPrimaryKey(tableContent: string): string[] {
634
+ const pkRegex = /PRIMARY\s+KEY\s*\(([^)]+)\)/i;
635
+ const match = pkRegex.exec(tableContent);
636
+ return match && match[1]
637
+ ? match[1].split(",").map((col) => col.trim())
638
+ : [];
639
+ }
640
+
641
+ private extractRelationships(
642
+ content: string,
643
+ databaseType: string,
644
+ ): Relationship[] {
645
+ const relationships: Relationship[] = [];
646
+ const fkRegex =
647
+ /FOREIGN\s+KEY\s*\(([^)]+)\)\s*REFERENCES\s+(\w+)\s*\(([^)]+)\)/gi;
648
+
649
+ let match;
650
+ while ((match = fkRegex.exec(content)) !== null) {
651
+ const [, fromCol, toTable, toCol] = match;
652
+
653
+ if (fromCol && toTable && toCol) {
654
+ relationships.push({
655
+ fromTable: "", // Would need table context
656
+ toTable,
657
+ fromColumn: fromCol,
658
+ toColumn: toCol,
659
+ type: "one-to-many", // Default assumption
660
+ cardinality: "1:N",
661
+ });
662
+ }
663
+ }
664
+
665
+ return relationships;
666
+ }
667
+
668
+ private analyzeSchemaDesign(
669
+ schema: DatabaseSchema,
670
+ databaseType: string,
671
+ ): SchemaAnalysis {
672
+ return {
673
+ normalizationLevel: this.assessNormalization(schema),
674
+ indexingStrategy: this.evaluateIndexing(schema),
675
+ relationshipComplexity: this.assessRelationshipComplexity(
676
+ schema.relationships,
677
+ ),
678
+ performanceConsiderations: this.identifyPerformanceIssues(
679
+ schema,
680
+ databaseType,
681
+ ),
682
+ indexes: [],
683
+ };
684
+ }
685
+
686
+ private assessNormalization(schema: DatabaseSchema): number {
687
+ // Simplified normalization assessment
688
+ let score = 100;
689
+
690
+ // Check for repeating groups (denormalization)
691
+ schema.tables.forEach((table) => {
692
+ const dataColumns = table.columns.filter((col) => col.usage === "data");
693
+ if (dataColumns.length > 15) {
694
+ score -= 20; // Too many columns in one table
695
+ }
696
+ });
697
+
698
+ return Math.max(0, score);
699
+ }
700
+
701
+ private evaluateIndexing(schema: DatabaseSchema): string {
702
+ const tablesWithIndexes = schema.tables.filter((table) =>
703
+ table.columns.some(
704
+ (col) => col.usage === "primary" || col.usage === "foreign",
705
+ ),
706
+ ).length;
707
+
708
+ const indexCoverage = (tablesWithIndexes / schema.tables.length) * 100;
709
+ return `${indexCoverage.toFixed(1)}% of tables have indexed relationships`;
710
+ }
711
+
712
+ private assessRelationshipComplexity(relationships: Relationship[]): string {
713
+ const complexity = relationships.length;
714
+ if (complexity < 5) return "Simple";
715
+ if (complexity < 15) return "Moderate";
716
+ return "Complex - Consider denormalization or CQRS";
717
+ }
718
+
719
+ private identifyPerformanceIssues(
720
+ schema: DatabaseSchema,
721
+ databaseType: string,
722
+ ): string[] {
723
+ const issues: string[] = [];
724
+
725
+ schema.tables.forEach((table) => {
726
+ if (table.columns.length > 50) {
727
+ issues.push(
728
+ `${table.name} has ${table.columns.length} columns - consider vertical partitioning`,
729
+ );
730
+ }
731
+
732
+ const textColumns = table.columns.filter(
733
+ (col) =>
734
+ col.type.toLowerCase().includes("text") ||
735
+ col.type.toLowerCase().includes("varchar"),
736
+ );
737
+
738
+ if (textColumns.length > 5) {
739
+ issues.push(
740
+ `${table.name} has ${textColumns.length} text columns - monitor for performance`,
741
+ );
742
+ }
743
+ });
744
+
745
+ return issues;
746
+ }
747
+
748
+ private generateIndexRecommendations(
749
+ schema: DatabaseSchema,
750
+ databaseType: string,
751
+ ): IndexRecommendation[] {
752
+ const recommendations: IndexRecommendation[] = [];
753
+
754
+ schema.relationships.forEach((rel) => {
755
+ recommendations.push({
756
+ table: rel.fromTable,
757
+ columns: [rel.fromColumn],
758
+ type: "btree",
759
+ reason: `Foreign key relationship to ${rel.toTable}`,
760
+ impact: "high",
761
+ });
762
+ });
763
+
764
+ // Add recommendations for common query patterns
765
+ schema.tables.forEach((table) => {
766
+ const indexedColumns = table.columns.filter(
767
+ (col) => col.usage === "primary" || col.usage === "foreign",
768
+ );
769
+
770
+ // Recommend composite indexes for common patterns
771
+ if (indexedColumns.length > 1) {
772
+ recommendations.push({
773
+ table: table.name,
774
+ columns: indexedColumns.map((col) => col.name),
775
+ type: "btree",
776
+ reason: "Composite index for primary/foreign key queries",
777
+ impact: "medium",
778
+ });
779
+ }
780
+ });
781
+
782
+ return recommendations;
783
+ }
784
+
785
+ private identifySchemaIssues(
786
+ schema: DatabaseSchema,
787
+ databaseType: string,
788
+ ): SchemaIssue[] {
789
+ const issues: SchemaIssue[] = [];
790
+
791
+ schema.tables.forEach((table) => {
792
+ // Check for missing primary keys
793
+ if (table.primaryKey.length === 0) {
794
+ issues.push({
795
+ table: table.name,
796
+ column: null,
797
+ description: "Table missing primary key",
798
+ severity: "error",
799
+ });
800
+ }
801
+
802
+ // Check for nullable foreign keys
803
+ table.columns.forEach((col) => {
804
+ if (col.usage === "foreign" && col.nullable) {
805
+ issues.push({
806
+ table: table.name,
807
+ column: col.name,
808
+ description: "Foreign key column allows NULL values",
809
+ severity: "warning",
810
+ });
811
+ }
812
+ });
813
+
814
+ // Check for tables with too many columns
815
+ if (table.columns.length > 30) {
816
+ issues.push({
817
+ table: table.name,
818
+ column: null,
819
+ description: `Table has ${table.columns.length} columns - consider normalization`,
820
+ severity: "info",
821
+ });
822
+ }
823
+ });
824
+
825
+ return issues;
826
+ }
827
+
828
+ private generateSchemaRecommendations(
829
+ issues: SchemaIssue[],
830
+ schema: DatabaseSchema,
831
+ databaseType: string,
832
+ ): string[] {
833
+ const recommendations: string[] = [];
834
+
835
+ const errorCount = issues.filter((i) => i.severity === "error").length;
836
+ const warningCount = issues.filter((i) => i.severity === "warning").length;
837
+
838
+ if (errorCount > 0) {
839
+ recommendations.push(
840
+ `Fix ${errorCount} critical schema issues before deployment`,
841
+ );
842
+ }
843
+
844
+ if (warningCount > 0) {
845
+ recommendations.push(
846
+ `Address ${warningCount} schema warnings for better performance`,
847
+ );
848
+ }
849
+
850
+ if (schema.tables.length > 20) {
851
+ recommendations.push(
852
+ "Consider microservices architecture for large schemas",
853
+ );
854
+ }
855
+
856
+ const relationshipCount = schema.relationships.length;
857
+ if (relationshipCount > 10) {
858
+ recommendations.push(
859
+ "Review complex relationships - consider denormalization for read-heavy workloads",
860
+ );
861
+ }
862
+
863
+ return recommendations;
864
+ }
865
+
866
+ private calculateNormalizationScore(schema: DatabaseSchema): number {
867
+ return this.assessNormalization(schema);
868
+ }
869
+
870
+ private calculateIndexingCoverage(
871
+ indexes: IndexRecommendation[],
872
+ schema: DatabaseSchema,
873
+ ): number {
874
+ const tablesWithIndexes = new Set(indexes.map((idx) => idx.table)).size;
875
+ return Math.round((tablesWithIndexes / schema.tables.length) * 100);
876
+ }
877
+
878
+ private analyzeQuery(query: string, databaseType: string): QueryAnalysis {
879
+ const analysis: QueryAnalysis = {
880
+ query,
881
+ tables: [],
882
+ operations: [],
883
+ estimatedCost: 0,
884
+ recommendations: [],
885
+ optimizationOpportunities: [],
886
+ };
887
+
888
+ // Extract tables
889
+ const tableRegex =
890
+ /(?:FROM|JOIN|UPDATE|INSERT\s+INTO|DELETE\s+FROM)\s+(\w+)/gi;
891
+ let match;
892
+ while ((match = tableRegex.exec(query)) !== null) {
893
+ if (match[1] && !analysis.tables.includes(match[1])) {
894
+ analysis.tables.push(match[1]);
895
+ }
896
+ }
897
+
898
+ // Identify operations
899
+ if (query.toUpperCase().includes("SELECT"))
900
+ analysis.operations.push("SELECT");
901
+ if (query.toUpperCase().includes("INSERT"))
902
+ analysis.operations.push("INSERT");
903
+ if (query.toUpperCase().includes("UPDATE"))
904
+ analysis.operations.push("UPDATE");
905
+ if (query.toUpperCase().includes("DELETE"))
906
+ analysis.operations.push("DELETE");
907
+
908
+ // Check for common issues
909
+ if (query.toUpperCase().includes("SELECT *")) {
910
+ analysis.recommendations.push(
911
+ "Avoid SELECT * - specify required columns",
912
+ );
913
+ analysis.optimizationOpportunities.push("Column selection optimization");
914
+ }
915
+
916
+ if (
917
+ query.toUpperCase().includes("WHERE") &&
918
+ !query.toUpperCase().includes("INDEX")
919
+ ) {
920
+ analysis.recommendations.push(
921
+ "Consider adding indexes for WHERE clause columns",
922
+ );
923
+ analysis.optimizationOpportunities.push("Index optimization");
924
+ }
925
+
926
+ // Estimate cost (simplified)
927
+ analysis.estimatedCost = query.length * 0.1 + analysis.tables.length * 10;
928
+
929
+ return analysis;
930
+ }
931
+
932
+ private generateQueryOptimizations(
933
+ analysis: QueryAnalysis,
934
+ schema: DatabaseSchema | null,
935
+ databaseType: string,
936
+ ): string[] {
937
+ const optimizations: string[] = [];
938
+
939
+ if (analysis.query.toUpperCase().includes("SELECT *")) {
940
+ optimizations.push(
941
+ "Replace SELECT * with specific column names to reduce data transfer",
942
+ );
943
+ }
944
+
945
+ if (analysis.operations.includes("SELECT") && analysis.tables.length > 3) {
946
+ optimizations.push(
947
+ "Consider breaking complex joins into smaller queries or use denormalized views",
948
+ );
949
+ }
950
+
951
+ if (
952
+ analysis.query.toUpperCase().match(/WHERE\s+.*\s+LIKE\s+['"]%.*%['"]/)
953
+ ) {
954
+ optimizations.push(
955
+ "LIKE queries with leading wildcards cannot use indexes - consider full-text search",
956
+ );
957
+ }
958
+
959
+ if (schema) {
960
+ // Schema-aware optimizations would go here
961
+ optimizations.push(
962
+ "Consider query result caching for frequently accessed data",
963
+ );
964
+ }
965
+
966
+ return optimizations;
967
+ }
968
+
969
+ private calculateQueryPerformanceScore(
970
+ analysis: QueryAnalysis,
971
+ optimizations: string[],
972
+ ): number {
973
+ let score = 100;
974
+
975
+ // Deduct for each optimization opportunity
976
+ score -= optimizations.length * 10;
977
+
978
+ // Deduct for complex operations
979
+ if (analysis.operations.length > 2) score -= 10;
980
+ if (analysis.tables.length > 4) score -= 15;
981
+
982
+ return Math.max(0, Math.min(100, score));
983
+ }
984
+
985
+ private generateDataModel(
986
+ requirements: string,
987
+ entities: string[],
988
+ relationships: EntityRelationship[],
989
+ databaseType: string,
990
+ ): DatabaseSchema {
991
+ const tables: TableSchema[] = entities.map((entity) => ({
992
+ name: this.toTableName(entity),
993
+ columns: [
994
+ {
995
+ name: "id",
996
+ type: databaseType === "postgresql" ? "SERIAL" : "INT AUTO_INCREMENT",
997
+ nullable: false,
998
+ constraints: ["PRIMARY KEY"],
999
+ usage: "primary",
1000
+ },
1001
+ {
1002
+ name: "created_at",
1003
+ type: "TIMESTAMP",
1004
+ nullable: false,
1005
+ defaultValue: "CURRENT_TIMESTAMP",
1006
+ constraints: [],
1007
+ usage: "data",
1008
+ },
1009
+ {
1010
+ name: "updated_at",
1011
+ type: "TIMESTAMP",
1012
+ nullable: false,
1013
+ defaultValue: "CURRENT_TIMESTAMP",
1014
+ constraints: [],
1015
+ usage: "data",
1016
+ },
1017
+ ],
1018
+ primaryKey: ["id"],
1019
+ estimatedRows: 1000,
1020
+ accessPatterns: ["CRUD operations"],
1021
+ }));
1022
+
1023
+ const schemaRelationships: Relationship[] = relationships.map((rel) => ({
1024
+ fromTable: this.toTableName(rel.from),
1025
+ toTable: this.toTableName(rel.to),
1026
+ fromColumn: "id",
1027
+ toColumn: `${this.toTableName(rel.from)}_id`,
1028
+ type: rel.type,
1029
+ cardinality:
1030
+ rel.type === "one-to-one"
1031
+ ? "1:1"
1032
+ : rel.type === "one-to-many"
1033
+ ? "1:N"
1034
+ : "N:M",
1035
+ }));
1036
+
1037
+ return {
1038
+ tables,
1039
+ relationships: schemaRelationships,
1040
+ indexes: [],
1041
+ constraints: [],
1042
+ };
1043
+ }
1044
+
1045
+ private validateDataModel(model: DatabaseSchema, databaseType: string): ModelValidation {
1046
+ const validation = {
1047
+ issues: [] as string[],
1048
+ score: 100,
1049
+ };
1050
+
1051
+ // Check for naming conventions
1052
+ model.tables.forEach((table) => {
1053
+ if (!/^[a-z][a-z0-9_]*$/.test(table.name)) {
1054
+ validation.issues.push(
1055
+ `${table.name} does not follow naming conventions`,
1056
+ );
1057
+ validation.score -= 5;
1058
+ }
1059
+ });
1060
+
1061
+ return validation;
1062
+ }
1063
+
1064
+ private generateModelRecommendations(
1065
+ model: DatabaseSchema,
1066
+ validation: ModelValidation,
1067
+ ): string[] {
1068
+ const recommendations: string[] = [];
1069
+
1070
+ if (model.tables.length > 10) {
1071
+ recommendations.push(
1072
+ "Consider microservices architecture for large data models",
1073
+ );
1074
+ }
1075
+
1076
+ if (model.relationships.length > model.tables.length) {
1077
+ recommendations.push(
1078
+ "Review relationship complexity - consider denormalization",
1079
+ );
1080
+ }
1081
+
1082
+ recommendations.push("Add appropriate indexes based on query patterns");
1083
+ recommendations.push("Implement proper constraints and validations");
1084
+ recommendations.push("Document data retention and archival policies");
1085
+
1086
+ return recommendations;
1087
+ }
1088
+
1089
+ private compareSchemas(current: DatabaseSchema, target: DatabaseSchema): SchemaComparison {
1090
+ const changes = {
1091
+ addTables: [] as string[],
1092
+ dropTables: [] as string[],
1093
+ addColumns: [] as string[],
1094
+ modifyColumns: [] as string[],
1095
+ dropColumns: [] as string[],
1096
+ addIndexes: [] as string[],
1097
+ dropIndexes: [] as string[],
1098
+ hasDataLoss: false,
1099
+ };
1100
+
1101
+ // Compare tables
1102
+ const currentTableNames = new Set(current.tables.map((t) => t.name));
1103
+ const targetTableNames = new Set(target.tables.map((t) => t.name));
1104
+
1105
+ changes.addTables = [...targetTableNames].filter(
1106
+ (name) => !currentTableNames.has(name),
1107
+ );
1108
+ changes.dropTables = [...currentTableNames].filter(
1109
+ (name) => !targetTableNames.has(name),
1110
+ );
1111
+
1112
+ // Data loss check
1113
+ changes.hasDataLoss = changes.dropTables.length > 0;
1114
+
1115
+ return changes;
1116
+ }
1117
+
1118
+ private generateMigrationScript(
1119
+ changes: SchemaComparison,
1120
+ databaseType: string,
1121
+ safeMode: boolean,
1122
+ ): string {
1123
+ let script = `-- Migration generated at ${new Date().toISOString()}\n\n`;
1124
+
1125
+ if (safeMode) {
1126
+ script += `-- Safety checks\n`;
1127
+ script += `DO $$\nBEGIN\n`;
1128
+ script += ` -- Add your safety checks here\n`;
1129
+ script += `END\n$$;\n\n`;
1130
+ }
1131
+
1132
+ // Add tables
1133
+ changes.addTables.forEach((tableName: string) => {
1134
+ script += `-- Add table ${tableName}\n`;
1135
+ script += `CREATE TABLE ${tableName} (\n`;
1136
+ script += ` id SERIAL PRIMARY KEY,\n`;
1137
+ script += ` created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n`;
1138
+ script += ` updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n`;
1139
+ script += `);\n\n`;
1140
+ });
1141
+
1142
+ // Drop tables (with safety)
1143
+ if (changes.dropTables.length > 0 && safeMode) {
1144
+ script += `-- WARNING: Dropping tables with data loss potential\n`;
1145
+ changes.dropTables.forEach((tableName: string) => {
1146
+ script += `-- DROP TABLE ${tableName}; -- Uncomment only if data loss is acceptable\n`;
1147
+ });
1148
+ script += `\n`;
1149
+ }
1150
+
1151
+ return script;
1152
+ }
1153
+
1154
+ private generateRollbackScript(changes: SchemaComparison, databaseType: string): string {
1155
+ let script = `-- Rollback script generated at ${new Date().toISOString()}\n\n`;
1156
+
1157
+ // Rollback logic would reverse the changes
1158
+ changes.addTables.forEach((tableName: string) => {
1159
+ script += `-- Rollback: Drop table ${tableName}\n`;
1160
+ script += `-- DROP TABLE IF EXISTS ${tableName};\n\n`;
1161
+ });
1162
+
1163
+ return script;
1164
+ }
1165
+
1166
+ private toTableName(entity: string): string {
1167
+ return entity
1168
+ .toLowerCase()
1169
+ .replace(/\s+/g, "_")
1170
+ .replace(/[^a-z0-9_]/g, "");
1171
+ }
1172
+
1173
+ private getIssueSeverityIcon(severity: string): string {
1174
+ const icons = {
1175
+ error: "🚨",
1176
+ warning: "⚠️",
1177
+ info: "ℹ️",
1178
+ };
1179
+ return icons[severity as keyof typeof icons] || "❓";
1180
+ }
1181
+
1182
+ async run(): Promise<void> {
1183
+ const transport = new StdioServerTransport();
1184
+ await this.server.connect(transport);
1185
+
1186
+ // Use centralized shutdown handler
1187
+ createGracefulShutdown({
1188
+ serverName: "database-design.server",
1189
+ server: this.server,
1190
+ });
1191
+ }
1192
+ }
1193
+
1194
+ // Run the server if this file is executed directly
1195
+ if (import.meta.url === `file://${process.argv[1]}`) {
1196
+ const server = new StringRayDatabaseDesignServer();
1197
+ server.run().catch(() => {});
1198
+ }
1199
+
1200
+ export { StringRayDatabaseDesignServer };