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,1638 @@
1
+ /**
2
+ * xray Documentation Generation MCP Server
3
+ *
4
+ * Knowledge skill for automated documentation creation, API docs generation,
5
+ * code documentation maintenance, and technical writing assistance
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
+ type CallToolResult,
14
+ } from "@modelcontextprotocol/sdk/types.js";
15
+ import * as fs from "fs";
16
+ import * as path from "path";
17
+ import { createGracefulShutdown } from "../../utils/shutdown-handler.js";
18
+
19
+ interface DocumentationAnalysis {
20
+ completeness: number; // 0-100
21
+ quality: number; // 0-100
22
+ coverage: Record<string, number>; // coverage by documentation type
23
+ issues: DocumentationIssue[];
24
+ recommendations: string[];
25
+ }
26
+
27
+ interface DocumentationIssue {
28
+ type: "missing" | "incomplete" | "outdated" | "inconsistent" | "poor-quality";
29
+ severity: "low" | "medium" | "high" | "critical";
30
+ file?: string;
31
+ element?: string;
32
+ description: string;
33
+ suggestion: string;
34
+ }
35
+
36
+ interface APIDocumentation {
37
+ endpoints: APIEndpoint[];
38
+ schemas: APISchema[];
39
+ examples: APIExample[];
40
+ authentication: AuthDocumentation;
41
+ errorCodes: ErrorCode[];
42
+ }
43
+
44
+ interface APIEndpoint {
45
+ path: string;
46
+ method: string;
47
+ summary: string;
48
+ description: string;
49
+ parameters: APIParameter[];
50
+ responses: APIResponse[];
51
+ tags: string[];
52
+ }
53
+
54
+ interface APIParameter {
55
+ name: string;
56
+ type: string;
57
+ required: boolean;
58
+ description: string;
59
+ example?: unknown;
60
+ }
61
+
62
+ interface APIResponse {
63
+ statusCode: number;
64
+ description: string;
65
+ schema?: APISchema;
66
+ example?: unknown;
67
+ }
68
+
69
+ interface APISchema {
70
+ name: string;
71
+ type: string;
72
+ properties: Record<string, SchemaProperty>;
73
+ required?: string[];
74
+ }
75
+
76
+ interface SchemaProperty {
77
+ type: string;
78
+ description: string;
79
+ example?: unknown;
80
+ required?: boolean;
81
+ }
82
+
83
+ interface APIExample {
84
+ title: string;
85
+ request: {
86
+ method: string;
87
+ path: string;
88
+ headers?: Record<string, string>;
89
+ body?: unknown;
90
+ };
91
+ response: {
92
+ statusCode: number;
93
+ headers?: Record<string, string>;
94
+ body?: unknown;
95
+ };
96
+ }
97
+
98
+ interface AuthDocumentation {
99
+ type: "bearer" | "basic" | "oauth2" | "api-key";
100
+ description: string;
101
+ parameters: APIParameter[];
102
+ examples: AuthExample[];
103
+ }
104
+
105
+ interface AuthExample {
106
+ title: string;
107
+ headers: Record<string, string>;
108
+ description: string;
109
+ }
110
+
111
+ interface ErrorCode {
112
+ code: string;
113
+ message: string;
114
+ description: string;
115
+ resolution: string;
116
+ }
117
+
118
+ interface AnalyzeDocumentationArgs {
119
+ docsPath: string;
120
+ codePath?: string;
121
+ docTypes?: string[];
122
+ }
123
+
124
+ interface GenerateAPIDocsArgs {
125
+ codePath: string;
126
+ framework: string;
127
+ format?: string;
128
+ includeExamples?: boolean;
129
+ }
130
+
131
+ interface GenerateCodeDocumentationArgs {
132
+ codePath: string;
133
+ language: string;
134
+ style?: string;
135
+ includePrivate?: boolean;
136
+ }
137
+
138
+ interface GenerateReadmeArgs {
139
+ projectPath: string;
140
+ projectType: string;
141
+ includeSections?: string[];
142
+ existingReadme?: string;
143
+ }
144
+
145
+ interface CodeDocumentationAnalysis {
146
+ filesProcessed: number;
147
+ totalFunctions: number;
148
+ functionsDocumented: number;
149
+ totalClasses: number;
150
+ classesDocumented: number;
151
+ coverage: number;
152
+ }
153
+
154
+ interface ProjectStructureAnalysis {
155
+ name?: string;
156
+ description?: string;
157
+ languages: string[];
158
+ dependencies: string[];
159
+ entryPoints: string[];
160
+ structure: Record<string, unknown>;
161
+ }
162
+
163
+ class StringRayDocumentationGenerationServer {
164
+ private server: Server;
165
+
166
+ constructor() {
167
+ this.server = new Server(
168
+ {
169
+ name: "documentation-generation", version: "1.22.67",
170
+ },
171
+ {
172
+ capabilities: {
173
+ tools: {},
174
+ },
175
+ },
176
+ );
177
+
178
+ this.setupToolHandlers();
179
+ // Server initialization - removed unnecessary startup logging
180
+ }
181
+
182
+ private setupToolHandlers() {
183
+ this.server.setRequestHandler(ListToolsRequestSchema, async () => {
184
+ return {
185
+ tools: [
186
+ {
187
+ name: "analyze_documentation",
188
+ description:
189
+ "Analyze existing documentation for completeness, quality, and gaps",
190
+ inputSchema: {
191
+ type: "object",
192
+ properties: {
193
+ docsPath: {
194
+ type: "string",
195
+ description: "Path to documentation directory or files",
196
+ },
197
+ codePath: {
198
+ type: "string",
199
+ description: "Path to corresponding code for comparison",
200
+ },
201
+ docTypes: {
202
+ type: "array",
203
+ items: {
204
+ type: "string",
205
+ enum: [
206
+ "readme",
207
+ "api",
208
+ "code",
209
+ "architecture",
210
+ "deployment",
211
+ "user-guide",
212
+ ],
213
+ },
214
+ description: "Types of documentation to analyze",
215
+ },
216
+ },
217
+ required: ["docsPath"],
218
+ },
219
+ },
220
+ {
221
+ name: "generate_api_docs",
222
+ description:
223
+ "Generate comprehensive API documentation from code analysis",
224
+ inputSchema: {
225
+ type: "object",
226
+ properties: {
227
+ codePath: {
228
+ type: "string",
229
+ description: "Path to API code files",
230
+ },
231
+ framework: {
232
+ type: "string",
233
+ enum: [
234
+ "express",
235
+ "fastify",
236
+ "koa",
237
+ "nestjs",
238
+ "spring",
239
+ "django",
240
+ "flask",
241
+ "fastapi",
242
+ ],
243
+ description: "API framework being used",
244
+ },
245
+ format: {
246
+ type: "string",
247
+ enum: ["openapi", "markdown", "html", "postman"],
248
+ description: "Output documentation format",
249
+ default: "openapi",
250
+ },
251
+ includeExamples: {
252
+ type: "boolean",
253
+ description: "Include request/response examples",
254
+ default: true,
255
+ },
256
+ },
257
+ required: ["codePath", "framework"],
258
+ },
259
+ },
260
+ {
261
+ name: "generate_code_documentation",
262
+ description:
263
+ "Generate inline code documentation and improve existing docs",
264
+ inputSchema: {
265
+ type: "object",
266
+ properties: {
267
+ codePath: {
268
+ type: "string",
269
+ description: "Path to code files to document",
270
+ },
271
+ language: {
272
+ type: "string",
273
+ enum: [
274
+ "typescript",
275
+ "javascript",
276
+ "python",
277
+ "java",
278
+ "csharp",
279
+ "go",
280
+ "rust",
281
+ ],
282
+ description: "Programming language",
283
+ },
284
+ style: {
285
+ type: "string",
286
+ enum: ["jsdoc", "docstring", "xml", "markdown"],
287
+ description: "Documentation comment style",
288
+ default: "jsdoc",
289
+ },
290
+ includePrivate: {
291
+ type: "boolean",
292
+ description: "Include documentation for private members",
293
+ default: false,
294
+ },
295
+ },
296
+ required: ["codePath", "language"],
297
+ },
298
+ },
299
+ {
300
+ name: "generate_readme",
301
+ description: "Generate or improve project README documentation",
302
+ inputSchema: {
303
+ type: "object",
304
+ properties: {
305
+ projectPath: {
306
+ type: "string",
307
+ description: "Path to project root directory",
308
+ },
309
+ projectType: {
310
+ type: "string",
311
+ enum: ["library", "application", "api", "cli", "framework"],
312
+ description: "Type of project",
313
+ },
314
+ includeSections: {
315
+ type: "array",
316
+ items: { type: "string" },
317
+ description: "Specific sections to include",
318
+ default: [
319
+ "installation",
320
+ "usage",
321
+ "api",
322
+ "contributing",
323
+ "license",
324
+ ],
325
+ },
326
+ existingReadme: {
327
+ type: "string",
328
+ description: "Path to existing README to improve",
329
+ },
330
+ },
331
+ required: ["projectPath", "projectType"],
332
+ },
333
+ },
334
+ ],
335
+ };
336
+ });
337
+
338
+ this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
339
+ const { name, arguments: args } = request.params;
340
+
341
+ switch (name) {
342
+ case "analyze_documentation":
343
+ return await this.analyzeDocumentation(args as unknown as AnalyzeDocumentationArgs) as CallToolResult;
344
+ case "generate_api_docs":
345
+ return await this.generateAPIDocs(args as unknown as GenerateAPIDocsArgs) as CallToolResult;
346
+ case "generate_code_documentation":
347
+ return await this.generateCodeDocumentation(args as unknown as GenerateCodeDocumentationArgs) as CallToolResult;
348
+ case "generate_readme":
349
+ return await this.generateReadme(args as unknown as GenerateReadmeArgs) as CallToolResult;
350
+ default:
351
+ throw new Error(`Unknown tool: ${name}`);
352
+ }
353
+ });
354
+ }
355
+
356
+ private async analyzeDocumentation(args: AnalyzeDocumentationArgs) {
357
+ const { docsPath, codePath, docTypes = ["readme", "api", "code"] } = args;
358
+
359
+ try {
360
+ const analysis = await this.performDocumentationAnalysis(
361
+ docsPath,
362
+ codePath,
363
+ docTypes,
364
+ );
365
+
366
+ return {
367
+ content: [
368
+ {
369
+ type: "text",
370
+ text:
371
+ `Documentation Analysis Report:\n\n` +
372
+ `📊 OVERALL SCORES\n` +
373
+ `Completeness: ${analysis.completeness}/100\n` +
374
+ `Quality: ${analysis.quality}/100\n\n` +
375
+ `📈 COVERAGE BY TYPE\n${Object.entries(analysis.coverage)
376
+ .map(([type, score]) => `${type}: ${score}%`)
377
+ .join("\n")}\n\n` +
378
+ `🚨 ISSUES FOUND: ${analysis.issues.length}\n${analysis.issues
379
+ .slice(0, 5)
380
+ .map(
381
+ (issue) =>
382
+ `${this.getSeverityIcon(issue.severity)} ${issue.type.toUpperCase()}: ${issue.description}`,
383
+ )
384
+ .join("\n")}\n\n` +
385
+ `💡 RECOMMENDATIONS\n${analysis.recommendations.map((rec, i) => `${i + 1}. ${rec}`).join("\n")}`,
386
+ },
387
+ ],
388
+ data: analysis,
389
+ };
390
+ } catch (error) {
391
+ return {
392
+ content: [
393
+ {
394
+ type: "text",
395
+ text: `Error analyzing documentation: ${error instanceof Error ? error.message : String(error)}`,
396
+ },
397
+ ],
398
+ };
399
+ }
400
+ }
401
+
402
+ private async generateAPIDocs(args: GenerateAPIDocsArgs) {
403
+ const {
404
+ codePath,
405
+ framework,
406
+ format = "openapi",
407
+ includeExamples = true,
408
+ } = args;
409
+
410
+ try {
411
+ const apiDocs = await this.analyzeAPICode(codePath, framework);
412
+
413
+ let output = "";
414
+ switch (format) {
415
+ case "openapi":
416
+ output = this.generateOpenAPISpec(apiDocs, includeExamples);
417
+ break;
418
+ case "markdown":
419
+ output = this.generateMarkdownAPIDocs(apiDocs, includeExamples);
420
+ break;
421
+ case "html":
422
+ output = this.generateHTMLAPIDocs(apiDocs, includeExamples);
423
+ break;
424
+ case "postman":
425
+ output = this.generatePostmanCollection(apiDocs, includeExamples);
426
+ break;
427
+ default:
428
+ output = this.generateOpenAPISpec(apiDocs, includeExamples);
429
+ }
430
+
431
+ return {
432
+ content: [
433
+ {
434
+ type: "text",
435
+ text:
436
+ `API Documentation Generated (${format.toUpperCase()}):\n\n` +
437
+ `📊 API ANALYSIS\n` +
438
+ `Endpoints: ${apiDocs.endpoints.length}\n` +
439
+ `Schemas: ${apiDocs.schemas.length}\n` +
440
+ `Examples: ${apiDocs.examples.length}\n` +
441
+ `Error Codes: ${apiDocs.errorCodes.length}\n\n` +
442
+ `🔐 AUTHENTICATION: ${apiDocs.authentication.type.toUpperCase()}\n` +
443
+ `${apiDocs.authentication.description}\n\n` +
444
+ `${format === "markdown" ? output.substring(0, 2000) + (output.length > 2000 ? "\n\n... (truncated)" : "") : "Full documentation generated successfully."}`,
445
+ },
446
+ ],
447
+ fullDocumentation: output,
448
+ data: apiDocs,
449
+ };
450
+ } catch (error) {
451
+ return {
452
+ content: [
453
+ {
454
+ type: "text",
455
+ text: `Error generating API documentation: ${error instanceof Error ? error.message : String(error)}`,
456
+ },
457
+ ],
458
+ };
459
+ }
460
+ }
461
+
462
+ private async generateCodeDocumentation(args: GenerateCodeDocumentationArgs) {
463
+ const {
464
+ codePath,
465
+ language,
466
+ style = "jsdoc",
467
+ includePrivate = false,
468
+ } = args;
469
+
470
+ try {
471
+ const documentation = await this.analyzeCodeForDocumentation(
472
+ codePath,
473
+ language,
474
+ includePrivate,
475
+ );
476
+ const generatedDocs = this.generateDocumentationComments(
477
+ documentation,
478
+ style,
479
+ );
480
+
481
+ return {
482
+ content: [
483
+ {
484
+ type: "text",
485
+ text:
486
+ `Code Documentation Analysis:\n\n` +
487
+ `📊 ANALYSIS RESULTS\n` +
488
+ `Files Processed: ${documentation.filesProcessed}\n` +
489
+ `Functions Documented: ${documentation.functionsDocumented}/${documentation.totalFunctions}\n` +
490
+ `Classes Documented: ${documentation.classesDocumented}/${documentation.totalClasses}\n` +
491
+ `Coverage: ${documentation.coverage}%\n\n` +
492
+ `📝 GENERATED DOCUMENTATION\n` +
493
+ `Style: ${style.toUpperCase()}\n` +
494
+ `Comments Added: ${generatedDocs.length}\n\n` +
495
+ `💡 SAMPLE GENERATED DOCS\n${generatedDocs
496
+ .slice(0, 3)
497
+ .map((doc) => `\`\`\`${language}\n${doc}\n\`\`\``)
498
+ .join("\n\n")}`,
499
+ },
500
+ ],
501
+ documentationUpdates: generatedDocs,
502
+ data: documentation,
503
+ };
504
+ } catch (error) {
505
+ return {
506
+ content: [
507
+ {
508
+ type: "text",
509
+ text: `Error generating code documentation: ${error instanceof Error ? error.message : String(error)}`,
510
+ },
511
+ ],
512
+ };
513
+ }
514
+ }
515
+
516
+ private async generateReadme(args: GenerateReadmeArgs) {
517
+ const {
518
+ projectPath,
519
+ projectType,
520
+ includeSections = [
521
+ "installation",
522
+ "usage",
523
+ "api",
524
+ "contributing",
525
+ "license",
526
+ ],
527
+ existingReadme,
528
+ } = args;
529
+
530
+ try {
531
+ const projectAnalysis = await this.analyzeProjectStructure(
532
+ projectPath,
533
+ projectType,
534
+ );
535
+ const readmeContent = this.generateReadmeContent(
536
+ projectAnalysis,
537
+ includeSections,
538
+ existingReadme,
539
+ );
540
+
541
+ return {
542
+ content: [
543
+ {
544
+ type: "text",
545
+ text:
546
+ `README Generation Complete:\n\n` +
547
+ `📋 PROJECT ANALYSIS\n` +
548
+ `Type: ${projectType.toUpperCase()}\n` +
549
+ `Languages: ${projectAnalysis.languages.join(", ")}\n` +
550
+ `Dependencies: ${projectAnalysis.dependencies.length}\n` +
551
+ `Entry Points: ${projectAnalysis.entryPoints.length}\n\n` +
552
+ `📝 README STRUCTURE\n` +
553
+ `Sections: ${includeSections.join(", ")}\n` +
554
+ `Length: ${readmeContent.length} characters\n\n` +
555
+ `📖 GENERATED README\n${readmeContent.substring(0, 1000)}${readmeContent.length > 1000 ? "\n\n... (truncated - see full content)" : ""}`,
556
+ },
557
+ ],
558
+ fullReadme: readmeContent,
559
+ data: projectAnalysis,
560
+ };
561
+ } catch (error) {
562
+ return {
563
+ content: [
564
+ {
565
+ type: "text",
566
+ text: `Error generating README: ${error instanceof Error ? error.message : String(error)}`,
567
+ },
568
+ ],
569
+ };
570
+ }
571
+ }
572
+
573
+ private async performDocumentationAnalysis(
574
+ docsPath: string,
575
+ codePath: string | undefined,
576
+ docTypes: string[],
577
+ ): Promise<DocumentationAnalysis> {
578
+ const analysis: DocumentationAnalysis = {
579
+ completeness: 0,
580
+ quality: 0,
581
+ coverage: {},
582
+ issues: [],
583
+ recommendations: [],
584
+ };
585
+
586
+ // Analyze existing documentation
587
+ for (const docType of docTypes) {
588
+ analysis.coverage[docType] = await this.analyzeDocTypeCoverage(
589
+ docsPath,
590
+ docType,
591
+ );
592
+ }
593
+
594
+ // Compare with code if provided
595
+ if (codePath) {
596
+ analysis.issues = await this.compareDocsWithCode(
597
+ docsPath,
598
+ codePath,
599
+ docTypes,
600
+ );
601
+ }
602
+
603
+ // Check documentation quality
604
+ analysis.issues.push(...(await this.analyzeDocumentationQuality(docsPath)));
605
+
606
+ // Calculate scores
607
+ analysis.completeness = this.calculateCompletenessScore(analysis.coverage);
608
+ analysis.quality = this.calculateQualityScore(analysis.issues);
609
+
610
+ // Generate recommendations
611
+ analysis.recommendations =
612
+ this.generateDocumentationRecommendations(analysis);
613
+
614
+ return analysis;
615
+ }
616
+
617
+ private async analyzeDocTypeCoverage(
618
+ docsPath: string,
619
+ docType: string,
620
+ ): Promise<number> {
621
+ let coverage = 0;
622
+
623
+ try {
624
+ const files = fs.readdirSync(docsPath, { recursive: true });
625
+
626
+ switch (docType) {
627
+ case "readme":
628
+ coverage = files.some(
629
+ (f) => typeof f === "string" && f.toLowerCase().includes("readme"),
630
+ )
631
+ ? 100
632
+ : 0;
633
+ break;
634
+ case "api":
635
+ coverage = files.some(
636
+ (f) =>
637
+ typeof f === "string" &&
638
+ (f.includes("api") ||
639
+ f.includes("swagger") ||
640
+ f.includes("openapi")),
641
+ )
642
+ ? 100
643
+ : 0;
644
+ break;
645
+ case "code":
646
+ coverage = files.some(
647
+ (f) => typeof f === "string" && f.includes("code"),
648
+ )
649
+ ? 100
650
+ : 0;
651
+ break;
652
+ case "architecture":
653
+ coverage = files.some(
654
+ (f) =>
655
+ typeof f === "string" &&
656
+ (f.includes("arch") || f.includes("design")),
657
+ )
658
+ ? 100
659
+ : 0;
660
+ break;
661
+ case "deployment":
662
+ coverage = files.some(
663
+ (f) => typeof f === "string" && f.includes("deploy"),
664
+ )
665
+ ? 100
666
+ : 0;
667
+ break;
668
+ case "user-guide":
669
+ coverage = files.some(
670
+ (f) =>
671
+ typeof f === "string" &&
672
+ (f.includes("guide") || f.includes("tutorial")),
673
+ )
674
+ ? 100
675
+ : 0;
676
+ break;
677
+ }
678
+ } catch {
679
+ coverage = 0;
680
+ }
681
+
682
+ return coverage;
683
+ }
684
+
685
+ private async compareDocsWithCode(
686
+ docsPath: string,
687
+ codePath: string,
688
+ docTypes: string[],
689
+ ): Promise<DocumentationIssue[]> {
690
+ const issues: DocumentationIssue[] = [];
691
+
692
+ // Check for missing API documentation
693
+ if (docTypes.includes("api")) {
694
+ // This would analyze code for exported functions/classes and check if they're documented
695
+ issues.push({
696
+ type: "missing",
697
+ severity: "medium",
698
+ description: "API documentation not found for exported functions",
699
+ suggestion: "Generate API documentation for all public exports",
700
+ });
701
+ }
702
+
703
+ // Check for README completeness
704
+ if (docTypes.includes("readme")) {
705
+ issues.push({
706
+ type: "incomplete",
707
+ severity: "low",
708
+ description: "README missing usage examples",
709
+ suggestion: "Add practical usage examples to README",
710
+ });
711
+ }
712
+
713
+ return issues;
714
+ }
715
+
716
+ private async analyzeDocumentationQuality(
717
+ docsPath: string,
718
+ ): Promise<DocumentationIssue[]> {
719
+ const issues: DocumentationIssue[] = [];
720
+
721
+ try {
722
+ const files = fs.readdirSync(docsPath, { recursive: true });
723
+
724
+ for (const file of files) {
725
+ if (
726
+ typeof file === "string" &&
727
+ (file.endsWith(".md") || file.endsWith(".txt"))
728
+ ) {
729
+ try {
730
+ const content = fs.readFileSync(path.join(docsPath, file), "utf-8");
731
+
732
+ // Check for outdated information
733
+ if (content.includes("TODO") || content.includes("FIXME")) {
734
+ issues.push({
735
+ type: "incomplete",
736
+ severity: "low",
737
+ file,
738
+ description: "Documentation contains TODO/FIXME comments",
739
+ suggestion: "Address pending documentation tasks",
740
+ });
741
+ }
742
+
743
+ // Check for broken links (simplified)
744
+ const links = content.match(/\[([^\]]+)\]\(([^)]+)\)/g);
745
+ if (links && links.some((link) => link.includes("http"))) {
746
+ issues.push({
747
+ type: "inconsistent",
748
+ severity: "low",
749
+ file,
750
+ description: "External links should be validated",
751
+ suggestion: "Verify all external links are accessible",
752
+ });
753
+ }
754
+ } catch {
755
+ // Skip files that can't be read
756
+ }
757
+ }
758
+ }
759
+ } catch {
760
+ // Skip directories that can't be read
761
+ }
762
+
763
+ return issues;
764
+ }
765
+
766
+ private calculateCompletenessScore(coverage: Record<string, number>): number {
767
+ const values = Object.values(coverage);
768
+ return values.length > 0
769
+ ? Math.round(values.reduce((sum, val) => sum + val, 0) / values.length)
770
+ : 0;
771
+ }
772
+
773
+ private calculateQualityScore(issues: DocumentationIssue[]): number {
774
+ let score = 100;
775
+
776
+ issues.forEach((issue) => {
777
+ switch (issue.severity) {
778
+ case "critical":
779
+ score -= 15;
780
+ break;
781
+ case "high":
782
+ score -= 10;
783
+ break;
784
+ case "medium":
785
+ score -= 5;
786
+ break;
787
+ case "low":
788
+ score -= 2;
789
+ break;
790
+ }
791
+ });
792
+
793
+ return Math.max(0, score);
794
+ }
795
+
796
+ private generateDocumentationRecommendations(
797
+ analysis: DocumentationAnalysis,
798
+ ): string[] {
799
+ const recommendations: string[] = [];
800
+
801
+ if (analysis.completeness < 70) {
802
+ recommendations.push(
803
+ "Improve documentation completeness - cover all major functionality",
804
+ );
805
+ }
806
+
807
+ if (analysis.quality < 80) {
808
+ recommendations.push(
809
+ "Enhance documentation quality - ensure clarity and accuracy",
810
+ );
811
+ }
812
+
813
+ const lowCoverage = Object.entries(analysis.coverage).filter(
814
+ ([_, score]) => score < 50,
815
+ );
816
+ if (lowCoverage.length > 0) {
817
+ recommendations.push(
818
+ `Add documentation for: ${lowCoverage.map(([type]) => type).join(", ")}`,
819
+ );
820
+ }
821
+
822
+ recommendations.push(
823
+ "Set up automated documentation validation in CI/CD pipeline",
824
+ );
825
+ recommendations.push(
826
+ "Establish documentation review process for all changes",
827
+ );
828
+
829
+ return recommendations;
830
+ }
831
+
832
+ private async analyzeAPICode(
833
+ codePath: string,
834
+ framework: string,
835
+ ): Promise<APIDocumentation> {
836
+ const apiDocs: APIDocumentation = {
837
+ endpoints: [],
838
+ schemas: [],
839
+ examples: [],
840
+ authentication: {
841
+ type: "bearer",
842
+ description: "Bearer token authentication",
843
+ parameters: [],
844
+ examples: [],
845
+ },
846
+ errorCodes: [],
847
+ };
848
+
849
+ // Simplified API analysis - in production would be more sophisticated
850
+ try {
851
+ const files = fs.readdirSync(codePath, { recursive: true });
852
+
853
+ for (const file of files) {
854
+ if (
855
+ typeof file === "string" &&
856
+ (file.endsWith(".ts") || file.endsWith(".js"))
857
+ ) {
858
+ try {
859
+ const content = fs.readFileSync(path.join(codePath, file), "utf-8");
860
+
861
+ // Extract route definitions based on framework
862
+ const routes = this.extractRoutes(content, framework);
863
+ apiDocs.endpoints.push(...routes);
864
+
865
+ // Extract schemas/types
866
+ const schemas = this.extractSchemas(content, framework);
867
+ apiDocs.schemas.push(...schemas);
868
+ } catch {
869
+ // Skip files that can't be read
870
+ }
871
+ }
872
+ }
873
+ } catch {
874
+ // Skip directories that can't be read
875
+ }
876
+
877
+ // Generate examples
878
+ apiDocs.examples = this.generateAPIExamples(apiDocs.endpoints);
879
+
880
+ // Generate error codes
881
+ apiDocs.errorCodes = this.generateErrorCodes();
882
+
883
+ return apiDocs;
884
+ }
885
+
886
+ private extractRoutes(content: string, framework: string): APIEndpoint[] {
887
+ const endpoints: APIEndpoint[] = [];
888
+
889
+ // Simplified route extraction - would be framework-specific in production
890
+ const routePatterns = {
891
+ express:
892
+ /(?:app|router)\.(get|post|put|delete|patch)\s*\(\s*['"]([^'"]+)['"]/g,
893
+ fastify:
894
+ /(?:fastify|app)\.(get|post|put|delete|patch)\s*\(\s*['"]([^'"]+)['"]/g,
895
+ nestjs: /@(Get|Post|Put|Delete|Patch)\s*\(\s*['"]([^'"]+)['"]\s*\)/g,
896
+ };
897
+
898
+ const pattern = routePatterns[framework as keyof typeof routePatterns];
899
+ if (pattern) {
900
+ let match;
901
+ while ((match = pattern.exec(content)) !== null) {
902
+ const [, method, path] = match;
903
+
904
+ if (method && path) {
905
+ endpoints.push({
906
+ path,
907
+ method: method.toUpperCase(),
908
+ summary: `API endpoint`,
909
+ description: `API endpoint for ${path}`,
910
+ parameters: [],
911
+ responses: [
912
+ {
913
+ statusCode: 200,
914
+ description: "Success response",
915
+ },
916
+ {
917
+ statusCode: 400,
918
+ description: "Bad request",
919
+ },
920
+ {
921
+ statusCode: 500,
922
+ description: "Internal server error",
923
+ },
924
+ ],
925
+ tags: ["API"],
926
+ });
927
+ }
928
+ }
929
+ }
930
+
931
+ return endpoints;
932
+ }
933
+
934
+ private extractSchemas(content: string, framework: string): APISchema[] {
935
+ const schemas: APISchema[] = [];
936
+
937
+ // Extract TypeScript interfaces/classes
938
+ const interfaceMatches = content.match(/interface\s+(\w+)\s*{([^}]*)}/g);
939
+ if (interfaceMatches) {
940
+ interfaceMatches.forEach((match) => {
941
+ const [, name, properties] =
942
+ match.match(/interface\s+(\w+)\s*{([^}]*)}/) || [];
943
+
944
+ if (name && properties) {
945
+ const schema: APISchema = {
946
+ name,
947
+ type: "object",
948
+ properties: {},
949
+ };
950
+
951
+ // Parse properties (simplified)
952
+ const propMatches = properties.match(/(\w+):\s*([^;]+)/g);
953
+ if (propMatches) {
954
+ propMatches.forEach((prop) => {
955
+ const [, propName, propType] =
956
+ prop.match(/(\w+):\s*([^;]+)/) || [];
957
+ if (propName && propType) {
958
+ schema.properties[propName] = {
959
+ type: this.mapTypeScriptType(propType.trim()),
960
+ description: `${propName} field`,
961
+ };
962
+ }
963
+ });
964
+ }
965
+
966
+ schemas.push(schema);
967
+ }
968
+ });
969
+ }
970
+
971
+ return schemas;
972
+ }
973
+
974
+ private mapTypeScriptType(tsType: string): string {
975
+ const typeMap: Record<string, string> = {
976
+ string: "string",
977
+ number: "number",
978
+ boolean: "boolean",
979
+ "string[]": "array",
980
+ "number[]": "array",
981
+ "boolean[]": "array",
982
+ Date: "string",
983
+ any: "object",
984
+ };
985
+
986
+ return typeMap[tsType] || "string";
987
+ }
988
+
989
+ private generateAPIExamples(endpoints: APIEndpoint[]): APIExample[] {
990
+ return endpoints.slice(0, 3).map((endpoint) => ({
991
+ title: `${endpoint.method} ${endpoint.path}`,
992
+ request: {
993
+ method: endpoint.method,
994
+ path: endpoint.path,
995
+ headers: {
996
+ "Content-Type": "application/json",
997
+ Authorization: "Bearer <token>",
998
+ },
999
+ },
1000
+ response: {
1001
+ statusCode: 200,
1002
+ headers: {
1003
+ "Content-Type": "application/json",
1004
+ },
1005
+ body: { success: true, data: {} },
1006
+ },
1007
+ }));
1008
+ }
1009
+
1010
+ private generateErrorCodes(): ErrorCode[] {
1011
+ return [
1012
+ {
1013
+ code: "VALIDATION_ERROR",
1014
+ message: "Input validation failed",
1015
+ description:
1016
+ "The provided input does not meet the required validation criteria",
1017
+ resolution:
1018
+ "Check the input parameters and ensure they match the expected format",
1019
+ },
1020
+ {
1021
+ code: "UNAUTHORIZED",
1022
+ message: "Authentication required",
1023
+ description: "Access to this resource requires authentication",
1024
+ resolution: "Provide valid authentication credentials",
1025
+ },
1026
+ {
1027
+ code: "FORBIDDEN",
1028
+ message: "Access denied",
1029
+ description: "You do not have permission to access this resource",
1030
+ resolution: "Contact administrator for access permissions",
1031
+ },
1032
+ {
1033
+ code: "NOT_FOUND",
1034
+ message: "Resource not found",
1035
+ description: "The requested resource could not be found",
1036
+ resolution: "Verify the resource identifier and try again",
1037
+ },
1038
+ {
1039
+ code: "INTERNAL_ERROR",
1040
+ message: "Internal server error",
1041
+ description: "An unexpected error occurred on the server",
1042
+ resolution:
1043
+ "Try again later or contact support if the problem persists",
1044
+ },
1045
+ ];
1046
+ }
1047
+
1048
+ private generateOpenAPISpec(
1049
+ apiDocs: APIDocumentation,
1050
+ includeExamples: boolean,
1051
+ ): string {
1052
+ const spec = {
1053
+ openapi: "3.0.0",
1054
+ info: {
1055
+ title: "API Documentation",
1056
+ version: "1.22.67",
1057
+ description: "Generated API documentation",
1058
+ },
1059
+ servers: [
1060
+ {
1061
+ url: "https://api.example.com/v1",
1062
+ },
1063
+ ],
1064
+ security: [
1065
+ {
1066
+ bearerAuth: [],
1067
+ },
1068
+ ],
1069
+ components: {
1070
+ securitySchemes: {
1071
+ bearerAuth: {
1072
+ type: "http",
1073
+ scheme: "bearer",
1074
+ },
1075
+ },
1076
+ schemas: apiDocs.schemas.reduce(
1077
+ (acc, schema) => {
1078
+ acc[schema.name] = {
1079
+ type: schema.type,
1080
+ properties: schema.properties,
1081
+ required: schema.required,
1082
+ };
1083
+ return acc;
1084
+ },
1085
+ {} as Record<string, Record<string, unknown>>,
1086
+ ),
1087
+ },
1088
+ paths: apiDocs.endpoints.reduce(
1089
+ (acc, endpoint) => {
1090
+ const pathKey = endpoint.path.replace(/:(\w+)/g, "{$1}");
1091
+ if (!acc[pathKey]) acc[pathKey] = {};
1092
+
1093
+ acc[pathKey][endpoint.method.toLowerCase()] = {
1094
+ summary: endpoint.summary,
1095
+ description: endpoint.description,
1096
+ parameters: endpoint.parameters.map((param) => ({
1097
+ name: param.name,
1098
+ in: "path",
1099
+ required: param.required,
1100
+ schema: { type: param.type },
1101
+ description: param.description,
1102
+ })),
1103
+ responses: endpoint.responses.reduce(
1104
+ (resAcc, response) => {
1105
+ resAcc[response.statusCode] = {
1106
+ description: response.description,
1107
+ content: {
1108
+ "application/json": {
1109
+ schema: response.schema
1110
+ ? {
1111
+ $ref: `#/components/schemas/${response.schema.name}`,
1112
+ }
1113
+ : {},
1114
+ },
1115
+ },
1116
+ };
1117
+ return resAcc;
1118
+ },
1119
+ {} as Record<string, unknown>,
1120
+ ),
1121
+ tags: endpoint.tags,
1122
+ };
1123
+
1124
+ return acc;
1125
+ },
1126
+ {} as Record<string, Record<string, unknown>>,
1127
+ ),
1128
+ };
1129
+
1130
+ return JSON.stringify(spec, null, 2);
1131
+ }
1132
+
1133
+ private generateMarkdownAPIDocs(
1134
+ apiDocs: APIDocumentation,
1135
+ includeExamples: boolean,
1136
+ ): string {
1137
+ let markdown = `# API Documentation\n\n`;
1138
+
1139
+ markdown += `## Authentication\n\n`;
1140
+ markdown += `${apiDocs.authentication.description}\n\n`;
1141
+
1142
+ if (includeExamples && apiDocs.authentication.examples.length > 0) {
1143
+ markdown += `### Authentication Examples\n\n`;
1144
+ apiDocs.authentication.examples.forEach((example) => {
1145
+ markdown += `#### ${example.title}\n\n`;
1146
+ markdown += `\`\`\`\n`;
1147
+ Object.entries(example.headers).forEach(([key, value]) => {
1148
+ markdown += `${key}: ${value}\n`;
1149
+ });
1150
+ markdown += `\`\`\`\n\n`;
1151
+ markdown += `${example.description}\n\n`;
1152
+ });
1153
+ }
1154
+
1155
+ markdown += `## Endpoints\n\n`;
1156
+ apiDocs.endpoints.forEach((endpoint) => {
1157
+ markdown += `### ${endpoint.method} ${endpoint.path}\n\n`;
1158
+ markdown += `${endpoint.description}\n\n`;
1159
+
1160
+ if (endpoint.parameters.length > 0) {
1161
+ markdown += `**Parameters:**\n\n`;
1162
+ endpoint.parameters.forEach((param) => {
1163
+ markdown += `- \`${param.name}\` (${param.type})`;
1164
+ if (param.required) markdown += " **required**";
1165
+ markdown += ` - ${param.description}\n`;
1166
+ });
1167
+ markdown += `\n`;
1168
+ }
1169
+
1170
+ markdown += `**Responses:**\n\n`;
1171
+ endpoint.responses.forEach((response) => {
1172
+ markdown += `- \`${response.statusCode}\`: ${response.description}\n`;
1173
+ });
1174
+ markdown += `\n`;
1175
+ });
1176
+
1177
+ if (apiDocs.errorCodes.length > 0) {
1178
+ markdown += `## Error Codes\n\n`;
1179
+ apiDocs.errorCodes.forEach((error) => {
1180
+ markdown += `### ${error.code}\n\n`;
1181
+ markdown += `**Message:** ${error.message}\n\n`;
1182
+ markdown += `**Description:** ${error.description}\n\n`;
1183
+ markdown += `**Resolution:** ${error.resolution}\n\n`;
1184
+ });
1185
+ }
1186
+
1187
+ return markdown;
1188
+ }
1189
+
1190
+ private generateHTMLAPIDocs(
1191
+ apiDocs: APIDocumentation,
1192
+ includeExamples: boolean,
1193
+ ): string {
1194
+ return `<html><body><h1>API Documentation</h1><p>Generated documentation</p></body></html>`;
1195
+ }
1196
+
1197
+ private generatePostmanCollection(
1198
+ apiDocs: APIDocumentation,
1199
+ includeExamples: boolean,
1200
+ ): string {
1201
+ const collection = {
1202
+ info: {
1203
+ name: "API Collection",
1204
+ schema:
1205
+ "https://schema.getpostman.com/json/collection/v1.1.1/collection.json",
1206
+ },
1207
+ item: apiDocs.endpoints.map((endpoint) => ({
1208
+ name: `${endpoint.method} ${endpoint.path}`,
1209
+ request: {
1210
+ method: endpoint.method,
1211
+ header: [
1212
+ {
1213
+ key: "Content-Type",
1214
+ value: "application/json",
1215
+ },
1216
+ ],
1217
+ url: {
1218
+ raw: `{{baseUrl}}${endpoint.path}`,
1219
+ host: ["{{baseUrl}}"],
1220
+ path: endpoint.path.split("/").filter((p) => p),
1221
+ },
1222
+ },
1223
+ })),
1224
+ };
1225
+
1226
+ return JSON.stringify(collection, null, 2);
1227
+ }
1228
+
1229
+ private async analyzeCodeForDocumentation(
1230
+ codePath: string,
1231
+ language: string,
1232
+ includePrivate: boolean,
1233
+ ): Promise<CodeDocumentationAnalysis> {
1234
+ const analysis: CodeDocumentationAnalysis = {
1235
+ filesProcessed: 0,
1236
+ totalFunctions: 0,
1237
+ functionsDocumented: 0,
1238
+ totalClasses: 0,
1239
+ classesDocumented: 0,
1240
+ coverage: 0,
1241
+ };
1242
+
1243
+ try {
1244
+ const files = fs.readdirSync(codePath, { recursive: true });
1245
+
1246
+ for (const file of files) {
1247
+ if (
1248
+ typeof file === "string" &&
1249
+ ((language === "typescript" && file.endsWith(".ts")) ||
1250
+ (language === "javascript" && file.endsWith(".js")) ||
1251
+ (language === "python" && file.endsWith(".py")))
1252
+ ) {
1253
+ try {
1254
+ const content = fs.readFileSync(path.join(codePath, file), "utf-8");
1255
+ analysis.filesProcessed++;
1256
+
1257
+ // Analyze functions
1258
+ const functions = this.extractFunctions(content, language);
1259
+ analysis.totalFunctions += functions.length;
1260
+ analysis.functionsDocumented += functions.filter((f) =>
1261
+ this.hasDocumentation(f, content, language),
1262
+ ).length;
1263
+
1264
+ // Analyze classes
1265
+ const classes = this.extractClasses(content, language);
1266
+ analysis.totalClasses += classes.length;
1267
+ analysis.classesDocumented += classes.filter((c) =>
1268
+ this.hasDocumentation(c, content, language),
1269
+ ).length;
1270
+ } catch {
1271
+ // Skip files that can't be read
1272
+ }
1273
+ }
1274
+ }
1275
+ } catch {
1276
+ // Skip directories that can't be read
1277
+ }
1278
+
1279
+ // Calculate coverage
1280
+ const totalDocumentable = analysis.totalFunctions + analysis.totalClasses;
1281
+ const documented =
1282
+ analysis.functionsDocumented + analysis.classesDocumented;
1283
+ analysis.coverage =
1284
+ totalDocumentable > 0
1285
+ ? Math.round((documented / totalDocumentable) * 100)
1286
+ : 0;
1287
+
1288
+ return analysis;
1289
+ }
1290
+
1291
+ private extractFunctions(content: string, language: string): string[] {
1292
+ const functions: string[] = [];
1293
+
1294
+ switch (language) {
1295
+ case "typescript":
1296
+ case "javascript":
1297
+ // Match function declarations and arrow functions
1298
+ const jsFunctions = content.match(
1299
+ /(?:function\s+(\w+)|const\s+(\w+)\s*=\s*(?:\([^)]*\)\s*=>|function\s*\([^)]*\)))/g,
1300
+ );
1301
+ if (jsFunctions) {
1302
+ functions.push(
1303
+ ...jsFunctions.map((f) =>
1304
+ f
1305
+ .replace(/^(?:function\s+|const\s+|=\s*)/, "")
1306
+ .replace(/\s*=.*$/, ""),
1307
+ ),
1308
+ );
1309
+ }
1310
+ break;
1311
+ case "python":
1312
+ // Match function definitions
1313
+ const pyFunctions = content.match(/def\s+(\w+)/g);
1314
+ if (pyFunctions) {
1315
+ functions.push(...pyFunctions.map((f) => f.replace("def ", "")));
1316
+ }
1317
+ break;
1318
+ }
1319
+
1320
+ return functions;
1321
+ }
1322
+
1323
+ private extractClasses(content: string, language: string): string[] {
1324
+ const classes: string[] = [];
1325
+
1326
+ switch (language) {
1327
+ case "typescript":
1328
+ case "javascript":
1329
+ const jsClasses = content.match(/class\s+(\w+)/g);
1330
+ if (jsClasses) {
1331
+ classes.push(...jsClasses.map((c) => c.replace("class ", "")));
1332
+ }
1333
+ break;
1334
+ case "python":
1335
+ const pyClasses = content.match(/class\s+(\w+)/g);
1336
+ if (pyClasses) {
1337
+ classes.push(...pyClasses.map((c) => c.replace("class ", "")));
1338
+ }
1339
+ break;
1340
+ }
1341
+
1342
+ return classes;
1343
+ }
1344
+
1345
+ private hasDocumentation(
1346
+ element: string,
1347
+ content: string,
1348
+ language: string,
1349
+ ): boolean {
1350
+ // Check if there's documentation before the element
1351
+ const elementIndex = content.indexOf(element);
1352
+ if (elementIndex === -1) return false;
1353
+
1354
+ // Look for documentation comments before the element
1355
+ const beforeElement = content.substring(0, elementIndex);
1356
+ const lines = beforeElement.split("\n");
1357
+ let consecutiveCommentLines = 0;
1358
+
1359
+ for (let i = lines.length - 1; i >= 0; i--) {
1360
+ const line = lines[i];
1361
+ if (!line) continue;
1362
+ const trimmedLine = line.trim();
1363
+
1364
+ if (language === "python" && trimmedLine.startsWith('"""')) {
1365
+ return true;
1366
+ }
1367
+
1368
+ if (
1369
+ (language === "typescript" || language === "javascript") &&
1370
+ (trimmedLine.startsWith("/**") ||
1371
+ trimmedLine.startsWith("*") ||
1372
+ trimmedLine.startsWith("*/") ||
1373
+ trimmedLine.startsWith("//") ||
1374
+ trimmedLine.match(/\/\*\*/))
1375
+ ) {
1376
+ consecutiveCommentLines++;
1377
+ if (consecutiveCommentLines >= 2) return true;
1378
+ } else if (trimmedLine === "") {
1379
+ continue; // Skip empty lines
1380
+ } else {
1381
+ break; // Stop if we hit non-comment, non-empty line
1382
+ }
1383
+ }
1384
+
1385
+ return false;
1386
+ }
1387
+
1388
+ private generateDocumentationComments(
1389
+ documentation: CodeDocumentationAnalysis,
1390
+ style: string,
1391
+ ): string[] {
1392
+ const comments: string[] = [];
1393
+
1394
+ // This would generate actual documentation comments based on code analysis
1395
+ // For now, return sample comments
1396
+ comments.push(`/**
1397
+ * Sample function documentation
1398
+ * @param {string} param1 - First parameter
1399
+ * @param {number} param2 - Second parameter
1400
+ * @returns {boolean} Result of operation
1401
+ */`);
1402
+
1403
+ comments.push(`/**
1404
+ * Sample class documentation
1405
+ * @class
1406
+ * @description Represents a sample class
1407
+ */`);
1408
+
1409
+ return comments;
1410
+ }
1411
+
1412
+ private async analyzeProjectStructure(
1413
+ projectPath: string,
1414
+ projectType: string,
1415
+ ): Promise<ProjectStructureAnalysis> {
1416
+ const analysis: ProjectStructureAnalysis = {
1417
+ languages: [] as string[],
1418
+ dependencies: [] as string[],
1419
+ entryPoints: [] as string[],
1420
+ structure: {} as Record<string, unknown>,
1421
+ };
1422
+
1423
+ try {
1424
+ // Analyze package.json if it exists
1425
+ const packagePath = path.join(projectPath, "package.json");
1426
+ if (fs.existsSync(packagePath)) {
1427
+ const packageJson = JSON.parse(fs.readFileSync(packagePath, "utf-8"));
1428
+ analysis.dependencies = Object.keys(packageJson.dependencies || {});
1429
+ analysis.entryPoints = [packageJson.main || "index.js"];
1430
+ }
1431
+
1432
+ // Analyze languages used
1433
+ const files = fs.readdirSync(projectPath, { recursive: true });
1434
+ const extensions = new Set<string>();
1435
+
1436
+ files.forEach((file) => {
1437
+ if (typeof file === "string") {
1438
+ const ext = path.extname(file);
1439
+ if (ext) extensions.add(ext);
1440
+ }
1441
+ });
1442
+
1443
+ const langMap: Record<string, string> = {
1444
+ ".ts": "TypeScript",
1445
+ ".tsx": "TypeScript",
1446
+ ".js": "JavaScript",
1447
+ ".jsx": "JavaScript",
1448
+ ".py": "Python",
1449
+ ".java": "Java",
1450
+ ".go": "Go",
1451
+ ".rs": "Rust",
1452
+ };
1453
+
1454
+ analysis.languages = Array.from(extensions).map(
1455
+ (ext) => langMap[ext] || ext.substring(1),
1456
+ );
1457
+ } catch {
1458
+ // Use defaults if analysis fails
1459
+ }
1460
+
1461
+ return analysis;
1462
+ }
1463
+
1464
+ private generateReadmeContent(
1465
+ projectAnalysis: ProjectStructureAnalysis,
1466
+ includeSections: string[],
1467
+ existingReadme?: string,
1468
+ ): string {
1469
+ let content = "";
1470
+
1471
+ // Title
1472
+ content += `# ${projectAnalysis.name || "Project Name"}\n\n`;
1473
+
1474
+ // Description
1475
+ content += `${projectAnalysis.description || "A software project."}\n\n`;
1476
+
1477
+ // Badges (if applicable)
1478
+ if (projectAnalysis.languages.includes("TypeScript")) {
1479
+ content += `[![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)\n`;
1480
+ }
1481
+ content += "\n";
1482
+
1483
+ // Table of Contents
1484
+ if (includeSections.length > 3) {
1485
+ content += "## Table of Contents\n\n";
1486
+ includeSections.forEach((section) => {
1487
+ content += `- [${section.charAt(0).toUpperCase() + section.slice(1)}](#${section})\n`;
1488
+ });
1489
+ content += "\n";
1490
+ }
1491
+
1492
+ // Generate each requested section
1493
+ includeSections.forEach((section) => {
1494
+ switch (section) {
1495
+ case "installation":
1496
+ content += this.generateInstallationSection(projectAnalysis);
1497
+ break;
1498
+ case "usage":
1499
+ content += this.generateUsageSection(projectAnalysis);
1500
+ break;
1501
+ case "api":
1502
+ content += this.generateAPISection(projectAnalysis);
1503
+ break;
1504
+ case "contributing":
1505
+ content += this.generateContributingSection();
1506
+ break;
1507
+ case "license":
1508
+ content += this.generateLicenseSection();
1509
+ break;
1510
+ }
1511
+ });
1512
+
1513
+ return content;
1514
+ }
1515
+
1516
+ private generateInstallationSection(projectAnalysis: ProjectStructureAnalysis): string {
1517
+ let content = "## Installation\n\n";
1518
+
1519
+ if (
1520
+ projectAnalysis.languages.includes("JavaScript") ||
1521
+ projectAnalysis.languages.includes("TypeScript")
1522
+ ) {
1523
+ content += "```bash\n";
1524
+ content += "# Clone the repository\n";
1525
+ content += "git clone <repository-url>\n";
1526
+ content += "cd <project-directory>\n\n";
1527
+ content += "# Install dependencies\n";
1528
+ content += "npm install\n";
1529
+ content += "# or\n";
1530
+ content += "yarn install\n";
1531
+ content += "```\n\n";
1532
+ }
1533
+
1534
+ if (projectAnalysis.languages.includes("Python")) {
1535
+ content += "```bash\n";
1536
+ content += "# Install with pip\n";
1537
+ content += "pip install <package-name>\n\n";
1538
+ content += "# Or install from source\n";
1539
+ content += "git clone <repository-url>\n";
1540
+ content += "cd <project-directory>\n";
1541
+ content += "pip install -e .\n";
1542
+ content += "```\n\n";
1543
+ }
1544
+
1545
+ return content;
1546
+ }
1547
+
1548
+ private generateUsageSection(projectAnalysis: ProjectStructureAnalysis): string {
1549
+ let content = "## Usage\n\n";
1550
+
1551
+ content += "```javascript\n";
1552
+ content += "// Basic usage example\n";
1553
+ content += "const result = await performOperation();\n";
1554
+ content += "console.log(result);\n";
1555
+ content += "```\n\n";
1556
+
1557
+ content += "### Advanced Usage\n\n";
1558
+ content +=
1559
+ "For more advanced features, see the [API documentation](./docs/api.md).\n\n";
1560
+
1561
+ return content;
1562
+ }
1563
+
1564
+ private generateAPISection(projectAnalysis: ProjectStructureAnalysis): string {
1565
+ let content = "## API\n\n";
1566
+
1567
+ content += "### Core Functions\n\n";
1568
+ content += "- `performOperation()` - Performs the main operation\n";
1569
+ content += "- `configure(options)` - Configures the library\n";
1570
+ content += "- `validateInput(input)` - Validates input data\n\n";
1571
+
1572
+ content +=
1573
+ "For detailed API documentation, see [API Reference](./docs/api.md).\n\n";
1574
+
1575
+ return content;
1576
+ }
1577
+
1578
+ private generateContributingSection(): string {
1579
+ let content = "## Contributing\n\n";
1580
+
1581
+ content +=
1582
+ "We welcome contributions! Please see our [Contributing Guide](./CONTRIBUTING.md) for details.\n\n";
1583
+
1584
+ content += "### Development Setup\n\n";
1585
+ content += "```bash\n";
1586
+ content += "git clone <repository-url>\n";
1587
+ content += "cd <project-directory>\n";
1588
+ content += "npm install\n";
1589
+ content += "npm run dev\n";
1590
+ content += "```\n\n";
1591
+
1592
+ content += "### Testing\n\n";
1593
+ content += "```bash\n";
1594
+ content += "npm test\n";
1595
+ content += "npm run test:coverage\n";
1596
+ content += "```\n\n";
1597
+
1598
+ return content;
1599
+ }
1600
+
1601
+ private generateLicenseSection(): string {
1602
+ let content = "## License\n\n";
1603
+
1604
+ content +=
1605
+ "This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n";
1606
+
1607
+ return content;
1608
+ }
1609
+
1610
+ private getSeverityIcon(severity: string): string {
1611
+ const icons = {
1612
+ critical: "🚨",
1613
+ high: "🔴",
1614
+ medium: "🟡",
1615
+ low: "🟢",
1616
+ };
1617
+ return icons[severity as keyof typeof icons] || "❓";
1618
+ }
1619
+
1620
+ async run(): Promise<void> {
1621
+ const transport = new StdioServerTransport();
1622
+ await this.server.connect(transport);
1623
+
1624
+ // Use centralized shutdown handler
1625
+ createGracefulShutdown({
1626
+ serverName: "tech-writer.server",
1627
+ server: this.server,
1628
+ });
1629
+ }
1630
+ }
1631
+
1632
+ // Run the server if this file is executed directly
1633
+ if (import.meta.url === `file://${process.argv[1]}`) {
1634
+ const server = new StringRayDocumentationGenerationServer();
1635
+ server.run().catch(() => {});
1636
+ }
1637
+
1638
+ export { StringRayDocumentationGenerationServer };