0xray 3.1.1 → 3.2.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 (296) hide show
  1. package/.opencode/codex.codex +1 -1
  2. package/.opencode/commands/auto-format.md +3 -3
  3. package/.opencode/commands/auto-summary-capture.md +2 -2
  4. package/.opencode/commands/enforcer-daily-scan.md +3 -3
  5. package/.opencode/commands/framework-compliance-audit.md +4 -4
  6. package/.opencode/commands/interactive-validator.md +2 -2
  7. package/.opencode/commands/job-summary-logger.md +2 -2
  8. package/.opencode/commands/mode-switch.md +1 -1
  9. package/.opencode/commands/model-health-check.md +2 -2
  10. package/.opencode/commands/performance-analysis.md +2 -2
  11. package/.opencode/commands/pre-commit-introspection.md +3 -3
  12. package/.opencode/commands/security-scan.md +3 -3
  13. package/.opencode/commands/sisyphus-validation.md +3 -3
  14. package/.opencode/commands/summary-logger.md +2 -2
  15. package/AGENTS.md +3 -13
  16. package/README.md +3 -3
  17. package/dist/AGENTS.md +3 -13
  18. package/dist/CHANGELOG.md +29 -0
  19. package/dist/README.md +3 -3
  20. package/dist/analytics/consent-manager.js +0 -1
  21. package/dist/analytics/emerging-pattern-detector.js +0 -1
  22. package/dist/analytics/pattern-learning-engine.js +0 -1
  23. package/dist/analytics/pattern-performance-tracker.js +0 -1
  24. package/dist/analytics/predictive-analytics.js +0 -1
  25. package/dist/analytics/prompt-pattern-analyzer.js +0 -1
  26. package/dist/analytics/routing-performance-analyzer.js +0 -1
  27. package/dist/analytics/routing-refiner.js +0 -1
  28. package/dist/analytics/simple-pattern-analyzer.js +0 -1
  29. package/dist/cli/commands/archive-logs.js +0 -1
  30. package/dist/cli/commands/opencode-install.js +13 -0
  31. package/dist/cli/commands/plugin-commands.js +0 -1
  32. package/dist/cli/commands/status.js +11 -13
  33. package/dist/cli/index.js +2 -7
  34. package/dist/core/activity-logger.js +0 -1
  35. package/dist/core/adaptive-kernel.js +0 -1
  36. package/dist/core/boot-orchestrator.js +2 -12
  37. package/dist/core/bridge.mjs +0 -1
  38. package/dist/core/codex-formatter.js +0 -1
  39. package/dist/core/codex-injector.js +0 -1
  40. package/dist/core/config-loader.js +36 -28
  41. package/dist/core/context-loader.js +0 -1
  42. package/dist/core/context-validator.js +0 -1
  43. package/dist/core/features-config.js +37 -1
  44. package/dist/core/kernel-patterns.js +0 -1
  45. package/dist/core/model-router.js +23 -64
  46. package/dist/core/system-prompt-generator.js +0 -1
  47. package/dist/delegation/agent-delegator.js +0 -1
  48. package/dist/delegation/agent-expertise.js +0 -1
  49. package/dist/delegation/analytics/index.js +0 -1
  50. package/dist/delegation/analytics/learning-engine.js +0 -1
  51. package/dist/delegation/analytics/outcome-tracker.js +0 -1
  52. package/dist/delegation/analytics/routing-analytics.js +0 -1
  53. package/dist/delegation/ast-code-parser.js +0 -1
  54. package/dist/delegation/complexity-analyzer.js +0 -1
  55. package/dist/delegation/dependency-graph-builder.js +0 -1
  56. package/dist/delegation/index.js +0 -1
  57. package/dist/delegation/metrics-aggregator.js +0 -1
  58. package/dist/delegation/session-coordinator.js +0 -1
  59. package/dist/delegation/strategy-selector.js +0 -1
  60. package/dist/delegation/voting-coordinator.js +0 -1
  61. package/dist/delegation/voting-types.js +0 -1
  62. package/dist/delegation/weighted-voting-aggregator.js +0 -1
  63. package/dist/enforcement/core/index.js +0 -1
  64. package/dist/enforcement/core/rule-executor.js +0 -1
  65. package/dist/enforcement/core/rule-hierarchy.js +0 -1
  66. package/dist/enforcement/core/rule-registry.js +0 -1
  67. package/dist/enforcement/core/violation-fixer.js +0 -1
  68. package/dist/enforcement/index.js +0 -1
  69. package/dist/enforcement/loaders/agent-triage-loader.js +0 -1
  70. package/dist/enforcement/loaders/agents-md-validation-loader.js +0 -1
  71. package/dist/enforcement/loaders/base-loader.js +0 -1
  72. package/dist/enforcement/loaders/codex-loader.js +0 -1
  73. package/dist/enforcement/loaders/index.js +0 -1
  74. package/dist/enforcement/loaders/loader-orchestrator.js +0 -1
  75. package/dist/enforcement/loaders/processor-loader.js +0 -1
  76. package/dist/enforcement/types.js +0 -1
  77. package/dist/enforcement/validators/architecture-validators.js +0 -1
  78. package/dist/enforcement/validators/base-validator.js +0 -1
  79. package/dist/enforcement/validators/code-quality-validators.js +0 -1
  80. package/dist/enforcement/validators/index.js +0 -1
  81. package/dist/enforcement/validators/security-validators.js +0 -1
  82. package/dist/enforcement/validators/testing-validators.js +0 -1
  83. package/dist/enforcement/validators/validator-registry.js +0 -1
  84. package/dist/governance/codex-policy.service.js +0 -1
  85. package/dist/inference/inference-agent-invoker.js +67 -0
  86. package/dist/inference/inference-applier.js +178 -0
  87. package/dist/inference/inference-cycle.js +51 -827
  88. package/dist/inference/inference-proposal-generator.js +149 -0
  89. package/dist/infrastructure/iac-validator.js +465 -0
  90. package/dist/infrastructure/schemas/cloud-schemas.js +488 -0
  91. package/dist/integrations/base/ExampleIntegration.js +0 -1
  92. package/dist/integrations/base/Integration.js +0 -1
  93. package/dist/integrations/base/index.js +0 -1
  94. package/dist/integrations/base/registry.js +0 -1
  95. package/dist/integrations/base/types.js +0 -1
  96. package/dist/integrations/enforcement-gate.js +3 -3
  97. package/dist/integrations/governance/governance-client.js +0 -1
  98. package/dist/integrations/governance/index.js +11 -19
  99. package/dist/integrations/governance/types.js +0 -1
  100. package/dist/integrations/hermes-agent/__init__.py +4 -0
  101. package/dist/integrations/hermes-agent/bridge.mjs +37 -0
  102. package/dist/integrations/openclaw/api-server.js +0 -1
  103. package/dist/integrations/openclaw/client.js +0 -1
  104. package/dist/integrations/openclaw/config.js +0 -1
  105. package/dist/integrations/openclaw/hooks/xray-hooks.js +0 -1
  106. package/dist/integrations/openclaw/index.js +0 -1
  107. package/dist/integrations/openclaw/types.js +0 -1
  108. package/dist/integrations/plugins/index.js +0 -1
  109. package/dist/integrations/plugins/plugin-integration.js +0 -1
  110. package/dist/integrations/plugins/plugin-registry.js +0 -1
  111. package/dist/mcps/agent-resolver.js +0 -1
  112. package/dist/mcps/architect-tools.server.js +119 -185
  113. package/dist/mcps/auto-format.server.js +56 -74
  114. package/dist/mcps/boot-orchestrator.server.js +67 -85
  115. package/dist/mcps/config/config-loader.js +6 -0
  116. package/dist/mcps/config/plugin-server-registry.js +0 -1
  117. package/dist/mcps/enforcer-tools.server.js +207 -273
  118. package/dist/mcps/estimation.server.js +63 -107
  119. package/dist/mcps/framework-compliance-audit.server.js +52 -81
  120. package/dist/mcps/framework-help.server.js +71 -89
  121. package/dist/mcps/governance.server.js +97 -149
  122. package/dist/mcps/knowledge-skills/api-design.server.js +33 -65
  123. package/dist/mcps/knowledge-skills/architecture-patterns.server.js +33 -65
  124. package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +123 -163
  125. package/dist/mcps/knowledge-skills/code-analyzer.server.js +210 -237
  126. package/dist/mcps/knowledge-skills/code-review.server.js +108 -142
  127. package/dist/mcps/knowledge-skills/content-creator.server.js +203 -225
  128. package/dist/mcps/knowledge-skills/database-design.server.js +116 -150
  129. package/dist/mcps/knowledge-skills/devops-deployment.server.js +123 -157
  130. package/dist/mcps/knowledge-skills/git-workflow.server.js +34 -67
  131. package/dist/mcps/knowledge-skills/growth-strategist.server.js +301 -323
  132. package/dist/mcps/knowledge-skills/log-monitor.server.js +139 -159
  133. package/dist/mcps/knowledge-skills/mobile-development.server.js +170 -200
  134. package/dist/mcps/knowledge-skills/multimodal-looker.server.js +122 -158
  135. package/dist/mcps/knowledge-skills/performance-optimization.server.js +88 -138
  136. package/dist/mcps/knowledge-skills/project-analysis.server.js +131 -218
  137. package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +115 -150
  138. package/dist/mcps/knowledge-skills/security-audit.server.js +16 -143
  139. package/dist/mcps/knowledge-skills/seo-consultant.server.js +20 -213
  140. package/dist/mcps/knowledge-skills/session-management.server.js +13 -90
  141. package/dist/mcps/knowledge-skills/skill-invocation.server.js +43 -421
  142. package/dist/mcps/knowledge-skills/strategist.server.js +10 -55
  143. package/dist/mcps/knowledge-skills/tech-writer.server.js +16 -191
  144. package/dist/mcps/knowledge-skills/testing-best-practices.server.js +18 -191
  145. package/dist/mcps/knowledge-skills/testing-strategy.server.js +18 -156
  146. package/dist/mcps/knowledge-skills/ui-ux-design.server.js +22 -296
  147. package/dist/mcps/lint.server.js +50 -91
  148. package/dist/mcps/model-health-check.server.js +32 -60
  149. package/dist/mcps/orchestrator/aside-context.js +207 -0
  150. package/dist/mcps/orchestrator/handlers/complexity-handler.js +5 -1
  151. package/dist/mcps/orchestrator/handlers/status-handler.js +8 -1
  152. package/dist/mcps/orchestrator/handlers/task-handler.js +5 -0
  153. package/dist/mcps/orchestrator/index.js +5 -0
  154. package/dist/mcps/orchestrator/server.js +63 -8
  155. package/dist/mcps/performance-analysis.server.js +56 -87
  156. package/dist/mcps/processor-pipeline.server.js +68 -99
  157. package/dist/mcps/researcher.server.js +80 -153
  158. package/dist/mcps/security-scan.server.js +56 -70
  159. package/dist/mcps/shared/knowledge-skill-base.js +11 -4
  160. package/dist/mcps/state-manager.server.js +124 -152
  161. package/dist/monitoring/nudge-watchdog.js +0 -1
  162. package/dist/nucleus/default-plugins.js +13 -19
  163. package/dist/nucleus/index.js +0 -1
  164. package/dist/orchestrator/agent-spawn-governor.js +0 -1
  165. package/dist/orchestrator/intelligent-commit-batcher.js +2 -10
  166. package/dist/orchestrator/multi-agent-orchestration-coordinator.js +0 -1
  167. package/dist/orchestrator/orchestrator.js +8 -18
  168. package/dist/orchestrator/self-direction-activation.js +0 -1
  169. package/dist/orchestrator/universal-registry-bridge.js +0 -1
  170. package/dist/performance/performance-budget-enforcer.js +0 -1
  171. package/dist/performance/performance-regression-tester.js +0 -1
  172. package/dist/plugin/plugin-codex-context.js +87 -0
  173. package/dist/plugin/plugin-helpers.js +155 -0
  174. package/dist/plugin/plugin-logger.js +46 -0
  175. package/dist/plugin/plugin-modules.js +144 -0
  176. package/dist/plugin/plugin-quality-gate.js +88 -0
  177. package/dist/plugin/plugin-types.js +1 -0
  178. package/dist/plugin/xray-codex-injection.js +338 -0
  179. package/dist/postprocessor/PostProcessor.js +3 -9
  180. package/dist/postprocessor/analysis/CodeChangeAnalyzer.js +50 -0
  181. package/dist/postprocessor/config/ProcessorConfigLoader.js +16 -0
  182. package/dist/postprocessor/integration.js +194 -0
  183. package/dist/postprocessor/metamorphosis/SelfProposalEngine.js +472 -0
  184. package/dist/postprocessor/metamorphosis/index.js +1 -0
  185. package/dist/postprocessor/redeploy/RetryHandler.js +118 -0
  186. package/dist/postprocessor/services/RegressionAnalysisService.js +0 -1
  187. package/dist/postprocessor/triggers/APITrigger.js +0 -1
  188. package/dist/postprocessor/triggers/WebhookTrigger.js +0 -1
  189. package/dist/processors/implementations/agents-md-validation-processor.js +0 -1
  190. package/dist/processors/implementations/async-pattern-processor.js +0 -1
  191. package/dist/processors/implementations/console-log-guard-processor.js +0 -1
  192. package/dist/processors/implementations/coverage-analysis-processor.js +0 -1
  193. package/dist/processors/implementations/inference-improvement-processor.js +2 -9
  194. package/dist/processors/implementations/log-protection-processor.js +0 -1
  195. package/dist/processors/implementations/nudge-processor.js +0 -1
  196. package/dist/processors/implementations/performance-budget-processor.js +0 -1
  197. package/dist/processors/implementations/postprocessor-chain-validator.js +0 -1
  198. package/dist/processors/implementations/publish-preflight-processor.js +4 -12
  199. package/dist/processors/implementations/session-summary-processor.js +8 -16
  200. package/dist/processors/implementations/spawn-governance-processor.js +0 -1
  201. package/dist/processors/implementations/storytelling-trigger-processor.js +3 -28
  202. package/dist/processors/implementations/test-auto-creation-processor.js +0 -1
  203. package/dist/processors/implementations/typescript-compilation-processor.js +0 -1
  204. package/dist/processors/implementations/version-compliance-processor.js +0 -1
  205. package/dist/processors/processor-interfaces.js +0 -1
  206. package/dist/processors/processor-types.js +0 -1
  207. package/dist/scripts/integration.js +0 -1
  208. package/dist/security/comprehensive-security-audit.js +0 -1
  209. package/dist/security/security-agent-coordinator.js +0 -1
  210. package/dist/security/security-auditor.js +0 -1
  211. package/dist/security/security-hardener.js +0 -1
  212. package/dist/security/security-hardening-system.js +0 -1
  213. package/dist/security/security-headers.js +0 -1
  214. package/dist/security/security-orchestration-layer.js +0 -1
  215. package/dist/services/inference-tuner.js +0 -1
  216. package/dist/session/session-cleanup-manager.js +0 -1
  217. package/dist/session/session-monitor.js +0 -1
  218. package/dist/session/session-state-manager.js +0 -1
  219. package/dist/skills/xray-orchestrator/index.js +0 -1
  220. package/dist/utils/codex-parser.js +0 -1
  221. package/dist/utils/language-detector.js +0 -1
  222. package/dist/utils/shutdown-handler.js +0 -1
  223. package/dist/validation/agent-config-validator.js +280 -0
  224. package/dist/validation/orchestration-flow-validator.js +606 -0
  225. package/package.json +1 -1
  226. package/scripts/node/release.mjs +2 -2
  227. package/scripts/node/setup.cjs +28 -0
  228. package/scripts/node/universal-version-manager.js +1 -1
  229. package/src/mcps/agent-resolver.ts +0 -1
  230. package/src/mcps/architect-tools.server.ts +129 -211
  231. package/src/mcps/auto-format.server.ts +74 -103
  232. package/src/mcps/boot-orchestrator.server.ts +71 -96
  233. package/src/mcps/config/__tests__/config-loader.test.ts +6 -6
  234. package/src/mcps/config/config-loader.ts +7 -0
  235. package/src/mcps/config/plugin-server-registry.ts +0 -1
  236. package/src/mcps/enforcer-tools.server.ts +217 -294
  237. package/src/mcps/estimation.server.ts +62 -122
  238. package/src/mcps/framework-compliance-audit.server.ts +53 -95
  239. package/src/mcps/framework-help.server.ts +74 -96
  240. package/src/mcps/governance.server.ts +97 -162
  241. package/src/mcps/knowledge-skills/api-design.server.ts +33 -72
  242. package/src/mcps/knowledge-skills/architecture-patterns.server.ts +33 -72
  243. package/src/mcps/knowledge-skills/bug-triage-specialist.server.ts +148 -193
  244. package/src/mcps/knowledge-skills/code-analyzer.server.ts +222 -254
  245. package/src/mcps/knowledge-skills/code-review.server.ts +115 -157
  246. package/src/mcps/knowledge-skills/content-creator.server.ts +219 -246
  247. package/src/mcps/knowledge-skills/database-design.server.ts +119 -160
  248. package/src/mcps/knowledge-skills/devops-deployment.server.ts +126 -167
  249. package/src/mcps/knowledge-skills/git-workflow.server.ts +32 -77
  250. package/src/mcps/knowledge-skills/growth-strategist.server.ts +322 -360
  251. package/src/mcps/knowledge-skills/log-monitor.server.ts +68 -95
  252. package/src/mcps/knowledge-skills/mobile-development.server.ts +16 -56
  253. package/src/mcps/knowledge-skills/multimodal-looker.server.ts +13 -59
  254. package/src/mcps/knowledge-skills/performance-optimization.server.ts +13 -74
  255. package/src/mcps/knowledge-skills/project-analysis.server.ts +13 -120
  256. package/src/mcps/knowledge-skills/refactoring-strategies.server.ts +13 -60
  257. package/src/mcps/knowledge-skills/security-audit.server.ts +19 -157
  258. package/src/mcps/knowledge-skills/seo-consultant.server.ts +23 -227
  259. package/src/mcps/knowledge-skills/session-management.server.ts +17 -106
  260. package/src/mcps/knowledge-skills/skill-invocation.server.ts +45 -446
  261. package/src/mcps/knowledge-skills/strategist.server.ts +13 -63
  262. package/src/mcps/knowledge-skills/tech-writer.server.ts +19 -204
  263. package/src/mcps/knowledge-skills/testing-best-practices.server.ts +21 -204
  264. package/src/mcps/knowledge-skills/testing-strategy.server.ts +21 -165
  265. package/src/mcps/knowledge-skills/ui-ux-design.server.ts +25 -342
  266. package/src/mcps/lint.server.ts +52 -105
  267. package/src/mcps/model-health-check.server.ts +34 -70
  268. package/src/mcps/orchestrator/aside-context.ts +245 -0
  269. package/src/mcps/orchestrator/handlers/complexity-handler.ts +9 -3
  270. package/src/mcps/orchestrator/handlers/status-handler.ts +11 -1
  271. package/src/mcps/orchestrator/handlers/task-handler.ts +8 -1
  272. package/src/mcps/orchestrator/index.ts +29 -0
  273. package/src/mcps/orchestrator/server.ts +79 -24
  274. package/src/mcps/orchestrator/types.ts +37 -0
  275. package/src/mcps/performance-analysis.server.ts +59 -102
  276. package/src/mcps/processor-pipeline.server.ts +70 -108
  277. package/src/mcps/researcher.server.ts +87 -175
  278. package/src/mcps/security-scan.server.ts +57 -76
  279. package/src/mcps/shared/knowledge-skill-base.ts +12 -4
  280. package/src/mcps/state-manager.server.ts +129 -169
  281. package/src/opencode/codex.codex +1 -1
  282. package/src/opencode/commands/auto-format.md +3 -3
  283. package/src/opencode/commands/auto-summary-capture.md +2 -2
  284. package/src/opencode/commands/enforcer-daily-scan.md +3 -3
  285. package/src/opencode/commands/framework-compliance-audit.md +4 -4
  286. package/src/opencode/commands/interactive-validator.md +2 -2
  287. package/src/opencode/commands/job-summary-logger.md +2 -2
  288. package/src/opencode/commands/mode-switch.md +1 -1
  289. package/src/opencode/commands/model-health-check.md +2 -2
  290. package/src/opencode/commands/performance-analysis.md +2 -2
  291. package/src/opencode/commands/pre-commit-introspection.md +3 -3
  292. package/src/opencode/commands/security-scan.md +3 -3
  293. package/src/opencode/commands/sisyphus-validation.md +3 -3
  294. package/src/opencode/commands/summary-logger.md +2 -2
  295. package/src/skills/xray-orchestrator/index.ts +0 -1
  296. package/dist/nucleus/orchestrator.js +0 -479
@@ -1,13 +1,10 @@
1
- import { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
1
  import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
4
2
  import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js";
5
3
  import {
6
- CallToolRequestSchema,
7
4
  ErrorCode,
8
- ListToolsRequestSchema,
9
5
  McpError,
10
6
  } from "@modelcontextprotocol/sdk/types.js";
7
+ import { XrayKnowledgeSkillBase } from "../shared/knowledge-skill-base.js";
11
8
  import * as fs from "fs";
12
9
  import { fileURLToPath } from "url";
13
10
  import { randomUUID } from "crypto";
@@ -85,398 +82,55 @@ interface StorytellerArgs {
85
82
  framework?: "three_act_structure" | "hero_journey" | "spiral";
86
83
  }
87
84
 
88
- class SkillInvocationServer {
89
- private server: Server;
85
+ class SkillInvocationServer extends XrayKnowledgeSkillBase {
90
86
 
91
87
  constructor() {
92
- this.server = new Server(
93
- {
94
- name: "xray/skill-invocation", version: "3.1.0",
95
- },
96
- {
97
- capabilities: {
98
- tools: {},
99
- },
100
- },
101
- );
88
+ super("skill-invocation", "3.1.0");
89
+
90
+ this.tools = [
91
+ { name: "list-skills", description: "List all available skills with descriptions", inputSchema: { type: "object", properties: { category: { type: "string", enum: ["all", "core", "registry", "knowledge"], description: "Filter by category" } } } },
92
+ { name: "invoke-skill", description: "Generic skill invocation tool for calling any MCP skill server", inputSchema: { type: "object", properties: { skillName: { type: "string", description: "Name of the skill to invoke (use list-skills to see available)" }, toolName: { type: "string", description: "Name of the tool within the skill to execute" }, args: { type: "object", description: "Arguments to pass to the skill tool" } }, required: ["skillName", "toolName"] } },
93
+ { name: "skill-code-review", description: "Invoke code review skill for comprehensive code analysis", inputSchema: { type: "object", properties: { code: { type: "string", description: "Code to analyze" }, language: { type: "string", description: "Programming language" }, context: { type: "object", description: "Additional context" } }, required: ["code"] } },
94
+ { name: "skill-security-audit", description: "Invoke security audit skill for vulnerability scanning", inputSchema: { type: "object", properties: { files: { type: "array", items: { type: "string" }, description: "Files to audit" }, severity: { type: "string", enum: ["low", "medium", "high", "critical"], description: "Minimum severity level" } }, required: ["files"] } },
95
+ { name: "skill-performance-optimization", description: "Invoke performance optimization skill for bottleneck analysis", inputSchema: { type: "object", properties: { code: { type: "string", description: "Code to analyze" }, language: { type: "string", description: "Programming language" }, metrics: { type: "array", items: { type: "string" }, description: "Performance metrics to analyze" } }, required: ["code"] } },
96
+ { name: "skill-testing-strategy", description: "Invoke testing strategy skill for test planning", inputSchema: { type: "object", properties: { code: { type: "string", description: "Code to analyze for testing" }, existingTests: { type: "array", items: { type: "string" }, description: "Existing test files" }, requirements: { type: "object", description: "Testing requirements and constraints" } }, required: ["code"] } },
97
+ { name: "skill-project-analysis", description: "Invoke project analysis skill for codebase insights", inputSchema: { type: "object", properties: { scope: { type: "string", enum: ["full", "directory", "file"], description: "Analysis scope" }, analysis: { type: "array", items: { type: "string" }, description: "Types of analysis to perform" } } } },
98
+ { name: "skill-database-design", description: "Invoke database design skill for schema design and query optimization", inputSchema: { type: "object", properties: { schema: { type: "string", description: "Database schema or entities" }, databaseType: { type: "string", enum: ["postgresql", "mysql", "mongodb", "dynamodb"], description: "Target database type" } }, required: ["schema"] } },
99
+ { name: "skill-devops-deployment", description: "Invoke DevOps deployment skill for CI/CD and infrastructure", inputSchema: { type: "object", properties: { projectType: { type: "string", description: "Type of project" }, cloudProvider: { type: "string", enum: ["aws", "gcp", "azure"], description: "Target cloud provider" } }, required: ["projectType"] } },
100
+ { name: "skill-api-design", description: "Invoke API design skill for REST/GraphQL endpoints", inputSchema: { type: "object", properties: { resources: { type: "array", items: { type: "string" }, description: "API resources" }, style: { type: "string", enum: ["rest", "graphql"], description: "API style" } }, required: ["resources"] } },
101
+ { name: "skill-ui-ux-design", description: "Invoke UI/UX design skill for component design", inputSchema: { type: "object", properties: { component: { type: "string", description: "Component to design" }, framework: { type: "string", enum: ["react", "vue", "angular", "svelte"], description: "Target framework" } }, required: ["component"] } },
102
+ { name: "skill-documentation-generation", description: "Invoke documentation skill for API docs and README", inputSchema: { type: "object", properties: { type: { type: "string", enum: ["api", "readme", "guide"], description: "Documentation type" }, code: { type: "string", description: "Code to document" } }, required: ["type"] } },
103
+ { name: "skill-storyteller", description: "Invoke storyteller skill for writing reflections, sagas, and journeys", inputSchema: { type: "object", properties: { storyType: { type: "string", enum: ["reflection", "saga", "journey", "narrative"], description: "Type of story to write" }, title: { type: "string", description: "Title for the story" }, context: { type: "object", description: "Context including commits, changes, metadata" }, framework: { type: "string", enum: ["three_act_structure", "hero_journey", "spiral"], description: "Storytelling framework to use" } }, required: ["storyType"] } },
104
+ { name: "install-skill", description: "Install skills from the registry or any git repo", inputSchema: { type: "object", properties: { source: { type: "string", description: "Source name or git URL to install skills from" }, path: { type: "string", description: "Subdirectory in repo containing skills" }, force: { type: "boolean", description: "Reinstall even if already installed" } }, required: ["source"] } },
105
+ { name: "skill-registry-list", description: "List all available skill registry sources", inputSchema: { type: "object", properties: {} } },
106
+ { name: "skill-registry-add", description: "Add a new source to the skills registry", inputSchema: { type: "object", properties: { name: { type: "string", description: "Unique source name" }, url: { type: "string", description: "Repository URL" }, desc: { type: "string", description: "Short description" }, license: { type: "string", description: "License type" } }, required: ["name", "url"] } },
107
+ { name: "skill-registry-remove", description: "Remove a source from the skills registry", inputSchema: { type: "object", properties: { name: { type: "string", description: "Source name to remove" } }, required: ["name"] } },
108
+ ];
109
+
110
+ this.handlers = {
111
+ "list-skills": async (args) => this.handleListSkills(args as ListSkillsArgs),
112
+ "invoke-skill": async (args) => this.handleInvokeSkill(args as InvokeSkillArgs),
113
+ "skill-code-review": async (args) => this.handleSkillCodeReview(args as CodeReviewArgs),
114
+ "skill-security-audit": async (args) => this.handleSkillSecurityAudit(args as SecurityAuditArgs),
115
+ "skill-performance-optimization": async (args) => this.handleSkillPerformanceOptimization(args as PerformanceOptimizationArgs),
116
+ "skill-testing-strategy": async (args) => this.handleSkillTestingStrategy(args as TestingStrategyArgs),
117
+ "skill-project-analysis": async (args) => this.handleSkillProjectAnalysis(args as ProjectAnalysisArgs),
118
+ "skill-database-design": async (args) => this.handleSkillDatabaseDesign(args as DatabaseDesignArgs),
119
+ "skill-devops-deployment": async (args) => this.handleSkillDevopsDeployment(args as DevopsDeploymentArgs),
120
+ "skill-api-design": async (args) => this.handleSkillApiDesign(args as ApiDesignArgs),
121
+ "skill-ui-ux-design": async (args) => this.handleSkillUiUxDesign(args as UiUxDesignArgs),
122
+ "skill-documentation-generation": async (args) => this.handleSkillDocumentationGeneration(args as DocumentationGenerationArgs),
123
+ "skill-storyteller": async (args) => this.handleSkillStoryteller(args as StorytellerArgs),
124
+ "install-skill": async (args) => this.handleInstallSkill(args as { source: string; path?: string; force?: boolean }),
125
+ "skill-registry-list": async () => this.handleSkillRegistryList(),
126
+ "skill-registry-add": async (args) => this.handleSkillRegistryAdd(args as { name: string; url: string; desc?: string; license?: string }),
127
+ "skill-registry-remove": async (args) => this.handleSkillRegistryRemove(args as { name: string }),
128
+ };
102
129
 
103
130
  this.setupToolHandlers();
104
131
  }
105
132
 
106
- private setupToolHandlers() {
107
- // List available tools
108
- this.server.setRequestHandler(ListToolsRequestSchema, async () => {
109
- return {
110
- tools: [
111
- {
112
- name: "list-skills",
113
- description: "List all available skills with descriptions",
114
- inputSchema: {
115
- type: "object",
116
- properties: {
117
- category: {
118
- type: "string",
119
- enum: ["all", "core", "registry", "knowledge"],
120
- description: "Filter by category",
121
- },
122
- },
123
- },
124
- },
125
- {
126
- name: "invoke-skill",
127
- description:
128
- "Generic skill invocation tool for calling any MCP skill server",
129
- inputSchema: {
130
- type: "object",
131
- properties: {
132
- skillName: {
133
- type: "string",
134
- description: "Name of the skill to invoke (use list-skills to see available)",
135
- },
136
- toolName: {
137
- type: "string",
138
- description: "Name of the tool within the skill to execute",
139
- },
140
- args: {
141
- type: "object",
142
- description: "Arguments to pass to the skill tool",
143
- },
144
- },
145
- required: ["skillName", "toolName"],
146
- },
147
- },
148
- {
149
- name: "skill-code-review",
150
- description:
151
- "Invoke code review skill for comprehensive code analysis",
152
- inputSchema: {
153
- type: "object",
154
- properties: {
155
- code: { type: "string", description: "Code to analyze" },
156
- language: {
157
- type: "string",
158
- description: "Programming language",
159
- },
160
- context: { type: "object", description: "Additional context" },
161
- },
162
- required: ["code"],
163
- },
164
- },
165
- {
166
- name: "skill-security-audit",
167
- description:
168
- "Invoke security audit skill for vulnerability scanning",
169
- inputSchema: {
170
- type: "object",
171
- properties: {
172
- files: {
173
- type: "array",
174
- items: { type: "string" },
175
- description: "Files to audit",
176
- },
177
- severity: {
178
- type: "string",
179
- enum: ["low", "medium", "high", "critical"],
180
- description: "Minimum severity level",
181
- },
182
- },
183
- required: ["files"],
184
- },
185
- },
186
- {
187
- name: "skill-performance-optimization",
188
- description:
189
- "Invoke performance optimization skill for bottleneck analysis",
190
- inputSchema: {
191
- type: "object",
192
- properties: {
193
- code: { type: "string", description: "Code to analyze" },
194
- language: {
195
- type: "string",
196
- description: "Programming language",
197
- },
198
- metrics: {
199
- type: "array",
200
- items: { type: "string" },
201
- description: "Performance metrics to analyze",
202
- },
203
- },
204
- required: ["code"],
205
- },
206
- },
207
- {
208
- name: "skill-testing-strategy",
209
- description: "Invoke testing strategy skill for test planning",
210
- inputSchema: {
211
- type: "object",
212
- properties: {
213
- code: {
214
- type: "string",
215
- description: "Code to analyze for testing",
216
- },
217
- existingTests: {
218
- type: "array",
219
- items: { type: "string" },
220
- description: "Existing test files",
221
- },
222
- requirements: {
223
- type: "object",
224
- description: "Testing requirements and constraints",
225
- },
226
- },
227
- required: ["code"],
228
- },
229
- },
230
- {
231
- name: "skill-project-analysis",
232
- description: "Invoke project analysis skill for codebase insights",
233
- inputSchema: {
234
- type: "object",
235
- properties: {
236
- scope: {
237
- type: "string",
238
- enum: ["full", "directory", "file"],
239
- description: "Analysis scope",
240
- },
241
- analysis: {
242
- type: "array",
243
- items: { type: "string" },
244
- description: "Types of analysis to perform",
245
- },
246
- },
247
- },
248
- },
249
- {
250
- name: "skill-database-design",
251
- description:
252
- "Invoke database design skill for schema design and query optimization",
253
- inputSchema: {
254
- type: "object",
255
- properties: {
256
- schema: {
257
- type: "string",
258
- description: "Database schema or entities",
259
- },
260
- databaseType: {
261
- type: "string",
262
- enum: ["postgresql", "mysql", "mongodb", "dynamodb"],
263
- description: "Target database type",
264
- },
265
- },
266
- required: ["schema"],
267
- },
268
- },
269
- {
270
- name: "skill-devops-deployment",
271
- description:
272
- "Invoke DevOps deployment skill for CI/CD and infrastructure",
273
- inputSchema: {
274
- type: "object",
275
- properties: {
276
- projectType: { type: "string", description: "Type of project" },
277
- cloudProvider: {
278
- type: "string",
279
- enum: ["aws", "gcp", "azure"],
280
- description: "Target cloud provider",
281
- },
282
- },
283
- required: ["projectType"],
284
- },
285
- },
286
- {
287
- name: "skill-api-design",
288
- description: "Invoke API design skill for REST/GraphQL endpoints",
289
- inputSchema: {
290
- type: "object",
291
- properties: {
292
- resources: {
293
- type: "array",
294
- items: { type: "string" },
295
- description: "API resources",
296
- },
297
- style: {
298
- type: "string",
299
- enum: ["rest", "graphql"],
300
- description: "API style",
301
- },
302
- },
303
- required: ["resources"],
304
- },
305
- },
306
- {
307
- name: "skill-ui-ux-design",
308
- description: "Invoke UI/UX design skill for component design",
309
- inputSchema: {
310
- type: "object",
311
- properties: {
312
- component: {
313
- type: "string",
314
- description: "Component to design",
315
- },
316
- framework: {
317
- type: "string",
318
- enum: ["react", "vue", "angular", "svelte"],
319
- description: "Target framework",
320
- },
321
- },
322
- required: ["component"],
323
- },
324
- },
325
- {
326
- name: "skill-documentation-generation",
327
- description: "Invoke documentation skill for API docs and README",
328
- inputSchema: {
329
- type: "object",
330
- properties: {
331
- type: {
332
- type: "string",
333
- enum: ["api", "readme", "guide"],
334
- description: "Documentation type",
335
- },
336
- code: { type: "string", description: "Code to document" },
337
- },
338
- required: ["type"],
339
- },
340
- },
341
- {
342
- name: "skill-storyteller",
343
- description:
344
- "Invoke storyteller skill for writing reflections, sagas, and journeys",
345
- inputSchema: {
346
- type: "object",
347
- properties: {
348
- storyType: {
349
- type: "string",
350
- enum: ["reflection", "saga", "journey", "narrative"],
351
- description: "Type of story to write",
352
- },
353
- title: { type: "string", description: "Title for the story" },
354
- context: {
355
- type: "object",
356
- description: "Context including commits, changes, metadata",
357
- },
358
- framework: {
359
- type: "string",
360
- enum: ["three_act_structure", "hero_journey", "spiral"],
361
- description: "Storytelling framework to use",
362
- },
363
- },
364
- required: ["storyType"],
365
- },
366
- },
367
- {
368
- name: "install-skill",
369
- description: "Install skills from the registry or any git repo",
370
- inputSchema: {
371
- type: "object",
372
- properties: {
373
- source: {
374
- type: "string",
375
- description: "Source name or git URL to install skills from",
376
- },
377
- path: {
378
- type: "string",
379
- description: "Subdirectory in repo containing skills",
380
- },
381
- force: {
382
- type: "boolean",
383
- description: "Reinstall even if already installed",
384
- },
385
- },
386
- required: ["source"],
387
- },
388
- },
389
- {
390
- name: "skill-registry-list",
391
- description: "List all available skill registry sources",
392
- inputSchema: {
393
- type: "object",
394
- properties: {},
395
- },
396
- },
397
- {
398
- name: "skill-registry-add",
399
- description: "Add a new source to the skills registry",
400
- inputSchema: {
401
- type: "object",
402
- properties: {
403
- name: { type: "string", description: "Unique source name" },
404
- url: { type: "string", description: "Repository URL" },
405
- desc: { type: "string", description: "Short description" },
406
- license: { type: "string", description: "License type" },
407
- },
408
- required: ["name", "url"],
409
- },
410
- },
411
- {
412
- name: "skill-registry-remove",
413
- description: "Remove a source from the skills registry",
414
- inputSchema: {
415
- type: "object",
416
- properties: {
417
- name: { type: "string", description: "Source name to remove" },
418
- },
419
- required: ["name"],
420
- },
421
- },
422
- ],
423
- };
424
- });
425
-
426
- // Handle tool calls
427
- this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
428
- const { name, arguments: args } = request.params;
429
-
430
- try {
431
- switch (name) {
432
- case "list-skills":
433
- return await this.handleListSkills(args as unknown as ListSkillsArgs);
434
- case "invoke-skill":
435
- return await this.handleInvokeSkill(args as unknown as InvokeSkillArgs);
436
- case "skill-code-review":
437
- return await this.handleSkillCodeReview(args as unknown as CodeReviewArgs);
438
- case "skill-security-audit":
439
- return await this.handleSkillSecurityAudit(args as unknown as SecurityAuditArgs);
440
- case "skill-performance-optimization":
441
- return await this.handleSkillPerformanceOptimization(args as unknown as PerformanceOptimizationArgs);
442
- case "skill-testing-strategy":
443
- return await this.handleSkillTestingStrategy(args as unknown as TestingStrategyArgs);
444
- case "skill-project-analysis":
445
- return await this.handleSkillProjectAnalysis(args as unknown as ProjectAnalysisArgs);
446
- case "skill-database-design":
447
- return await this.handleSkillDatabaseDesign(args as unknown as DatabaseDesignArgs);
448
- case "skill-devops-deployment":
449
- return await this.handleSkillDevopsDeployment(args as unknown as DevopsDeploymentArgs);
450
- case "skill-api-design":
451
- return await this.handleSkillApiDesign(args as unknown as ApiDesignArgs);
452
- case "skill-ui-ux-design":
453
- return await this.handleSkillUiUxDesign(args as unknown as UiUxDesignArgs);
454
- case "skill-documentation-generation":
455
- return await this.handleSkillDocumentationGeneration(args as unknown as DocumentationGenerationArgs);
456
- case "skill-storyteller":
457
- return await this.handleSkillStoryteller(args as unknown as StorytellerArgs);
458
- case "install-skill":
459
- return await this.handleInstallSkill(args as unknown as { source: string; path?: string; force?: boolean });
460
- case "skill-registry-list":
461
- return await this.handleSkillRegistryList();
462
- case "skill-registry-add":
463
- return await this.handleSkillRegistryAdd(args as unknown as { name: string; url: string; desc?: string; license?: string });
464
- case "skill-registry-remove":
465
- return await this.handleSkillRegistryRemove(args as unknown as { name: string });
466
- default:
467
- throw new McpError(
468
- ErrorCode.MethodNotFound,
469
- `Unknown tool: ${name}`,
470
- );
471
- }
472
- } catch (error) {
473
- throw new McpError(
474
- ErrorCode.InternalError,
475
- `Tool execution failed: ${error instanceof Error ? error.message : String(error)}`,
476
- );
477
- }
478
- });
479
- }
133
+ // setupToolHandlers removed — handled by XrayKnowledgeSkillBase via this.tools + this.handlers
480
134
 
481
135
  private skillMetrics: Map<string, { success: number; failure: number; avgDuration: number }> = new Map();
482
136
 
@@ -934,62 +588,7 @@ class SkillInvocationServer {
934
588
  return { content: [{ type: "text", text: output || "Source removed." }] };
935
589
  }
936
590
 
937
- async run(): Promise<void> {
938
- const transport = new StdioServerTransport();
939
- await this.server.connect(transport);
940
-
941
- let parentCheckTimer: ReturnType<typeof setTimeout> | null = null;
942
-
943
- const cleanup = async (signal: string) => {
944
- if (parentCheckTimer !== null) {
945
- clearTimeout(parentCheckTimer);
946
- parentCheckTimer = null;
947
- }
948
-
949
- const timeout = setTimeout(() => {
950
- frameworkLogger.log("mcps/skill-invocation", "shutdown", "error", { message: "Graceful shutdown timeout, forcing exit..." });
951
- process.exit(1);
952
- }, 5000);
953
-
954
- try {
955
- if (this.server && typeof this.server.close === "function") {
956
- await this.server.close();
957
- }
958
- clearTimeout(timeout);
959
- process.exit(0);
960
- } catch (error) {
961
- clearTimeout(timeout);
962
- frameworkLogger.log("mcps/skill-invocation", "shutdown", "error", { message: `Error during server shutdown: ${String(error)}` });
963
- process.exit(1);
964
- }
965
- };
966
-
967
- process.on("SIGINT", () => cleanup("SIGINT"));
968
- process.on("SIGTERM", () => cleanup("SIGTERM"));
969
- process.on("SIGHUP", () => cleanup("SIGHUP"));
970
-
971
- const checkParent = () => {
972
- try {
973
- process.kill(process.ppid, 0);
974
- parentCheckTimer = setTimeout(checkParent, 1000);
975
- } catch (error) {
976
- parentCheckTimer = null;
977
- cleanup("parent-process-death");
978
- }
979
- };
980
-
981
- parentCheckTimer = setTimeout(checkParent, 2000);
982
-
983
- process.on("uncaughtException", (error) => {
984
- frameworkLogger.log("mcps/skill-invocation", "uncaughtException", "error", { message: `Uncaught Exception: ${String(error)}` });
985
- cleanup("uncaughtException");
986
- });
987
-
988
- process.on("unhandledRejection", (reason) => {
989
- frameworkLogger.log("mcps/skill-invocation", "unhandledRejection", "error", { message: `Unhandled Rejection: ${String(reason)}` });
990
- cleanup("unhandledRejection");
991
- });
992
- }
591
+ // run() removed — handled by XrayKnowledgeSkillBase
993
592
 
994
593
  /**
995
594
  * Run as HTTP server using Streamable HTTP transport (for Grok CLI compatibility).
@@ -5,15 +5,10 @@
5
5
  * Provides strategic planning, risk assessment, and technical strategy tools.
6
6
  */
7
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
8
  import * as fs from "fs";
15
9
  import { fileURLToPath } from "url";
16
10
  import { frameworkLogger } from "../../core/framework-logger.js";
11
+ import { XrayKnowledgeSkillBase, type ToolDefinition } from "../shared/knowledge-skill-base.js";
17
12
 
18
13
  interface Tool {
19
14
  name: string;
@@ -37,9 +32,8 @@ interface ArchitectureReviewArgs {
37
32
  requirements?: string[];
38
33
  }
39
34
 
40
- class StrategistServer {
41
- private server: Server;
42
- private tools: Tool[] = [
35
+ class StrategistServer extends XrayKnowledgeSkillBase {
36
+ protected tools: ToolDefinition[] = [
43
37
  {
44
38
  name: "strategic_guidance",
45
39
  description:
@@ -108,58 +102,18 @@ class StrategistServer {
108
102
  ];
109
103
 
110
104
  constructor() {
111
- this.server = new Server(
112
- {
113
- name: "xray/strategist", version: "3.1.0",
114
- },
115
- {
116
- capabilities: {
117
- tools: {},
118
- },
119
- },
120
- );
105
+ super("strategist", "3.1.0");
106
+
107
+ this.handlers = {
108
+ strategic_guidance: async (args) => this.handleStrategicGuidance(args as StrategicGuidanceArgs),
109
+ risk_assessment: async (args) => this.handleRiskAssessment(args as RiskAssessmentArgs),
110
+ architecture_review: async (args) => this.handleArchitectureReview(args as ArchitectureReviewArgs),
111
+ };
121
112
 
122
113
  this.setupToolHandlers();
123
114
  }
124
115
 
125
- private setupToolHandlers() {
126
- this.server.setRequestHandler(ListToolsRequestSchema, async () => {
127
- return {
128
- tools: this.tools.map((tool) => ({
129
- name: tool.name,
130
- description: tool.description,
131
- inputSchema: tool.inputSchema,
132
- })),
133
- };
134
- });
135
-
136
- this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
137
- const { name, arguments: args } = request.params;
138
-
139
- try {
140
- switch (name) {
141
- case "strategic_guidance":
142
- return await this.handleStrategicGuidance(args as unknown as StrategicGuidanceArgs);
143
- case "risk_assessment":
144
- return await this.handleRiskAssessment(args as unknown as RiskAssessmentArgs);
145
- case "architecture_review":
146
- return await this.handleArchitectureReview(args as unknown as ArchitectureReviewArgs);
147
- default:
148
- throw new Error(`Unknown tool: ${name}`);
149
- }
150
- } catch (error) {
151
- return {
152
- content: [
153
- {
154
- type: "text",
155
- text: `Error: ${error instanceof Error ? error.message : String(error)}`,
156
- },
157
- ],
158
- isError: true,
159
- };
160
- }
161
- });
162
- }
116
+ // setupToolHandlers removed — handled by XrayKnowledgeSkillBase via this.tools + this.handlers
163
117
 
164
118
  private async handleStrategicGuidance(args: StrategicGuidanceArgs) {
165
119
  const { context, options = [], criteria = [] } = args;
@@ -251,17 +205,13 @@ class StrategistServer {
251
205
  };
252
206
  }
253
207
 
254
- async start() {
255
- const transport = new StdioServerTransport();
256
- await this.server.connect(transport);
257
- await frameworkLogger.log("mcp-strategist", "server-started", "success");
258
- }
208
+ // run() removed — handled by XrayKnowledgeSkillBase
259
209
  }
260
210
 
261
211
  const entryPoint = fs.realpathSync(process.argv[1] ?? "");
262
212
  if (entryPoint && fileURLToPath(import.meta.url) === entryPoint) {
263
213
  const server = new StrategistServer();
264
- server.start().catch((error) => frameworkLogger.log("mcps/strategist", "run", "error", { error: String(error) }));
214
+ server.run().catch((error) => frameworkLogger.log("mcps/strategist", "run", "error", { error: String(error) }));
265
215
  }
266
216
 
267
217
  export { StrategistServer };