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
@@ -4,15 +4,10 @@
4
4
  * Comprehensive ESLint validation and automated code quality checking
5
5
  */
6
6
 
7
- import { Server } from "@modelcontextprotocol/sdk/server/index.js";
8
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
9
- import {
10
- CallToolRequestSchema,
11
- ListToolsRequestSchema,
12
- } from "@modelcontextprotocol/sdk/types.js";
13
7
  import { execFileSync } from "child_process";
14
8
  import fs from "fs";
15
9
  import { frameworkLogger } from "../core/framework-logger.js";
10
+ import { XrayKnowledgeSkillBase } from "./shared/knowledge-skill-base.js";
16
11
 
17
12
  interface LintArgs {
18
13
  files?: string[];
@@ -33,20 +28,63 @@ interface LintResults {
33
28
  details: string[];
34
29
  }
35
30
 
36
- class XrayLintServer {
37
- private server: Server;
38
-
31
+ class XrayLintServer extends XrayKnowledgeSkillBase {
39
32
  constructor() {
40
- this.server = new Server(
33
+ super("lint", "3.1.0");
34
+
35
+ this.tools = [
41
36
  {
42
- name: "lint", version: "3.1.0",
37
+ name: "lint",
38
+ description:
39
+ "Comprehensive ESLint validation and automated code quality checking",
40
+ inputSchema: {
41
+ type: "object",
42
+ properties: {
43
+ files: {
44
+ type: "array",
45
+ items: { type: "string" },
46
+ description:
47
+ "Specific files to lint (optional - lints all if empty)",
48
+ },
49
+ fix: {
50
+ type: "boolean",
51
+ default: false,
52
+ description:
53
+ "Automatically fix linting issues where possible",
54
+ },
55
+ strict: {
56
+ type: "boolean",
57
+ default: false,
58
+ description: "Use strict linting rules",
59
+ },
60
+ },
61
+ },
43
62
  },
44
63
  {
45
- capabilities: {
46
- tools: {},
64
+ name: "lint-check",
65
+ description: "Check code quality without making changes",
66
+ inputSchema: {
67
+ type: "object",
68
+ properties: {
69
+ files: {
70
+ type: "array",
71
+ items: { type: "string" },
72
+ description: "Files to check",
73
+ },
74
+ rules: {
75
+ type: "array",
76
+ items: { type: "string" },
77
+ description: "Specific ESLint rules to check",
78
+ },
79
+ },
47
80
  },
48
81
  },
49
- );
82
+ ];
83
+
84
+ this.handlers = {
85
+ "lint": async (args) => this.handleLint(args as LintArgs),
86
+ "lint-check": async (args) => this.handleLintCheck(args as LintCheckArgs),
87
+ };
50
88
 
51
89
  this.setupToolHandlers();
52
90
  void frameworkLogger.log(
@@ -57,87 +95,6 @@ class XrayLintServer {
57
95
  );
58
96
  }
59
97
 
60
- private setupToolHandlers() {
61
- // List available tools
62
- this.server.setRequestHandler(ListToolsRequestSchema, async () => {
63
- return {
64
- tools: [
65
- {
66
- name: "lint",
67
- description:
68
- "Comprehensive ESLint validation and automated code quality checking",
69
- inputSchema: {
70
- type: "object",
71
- properties: {
72
- files: {
73
- type: "array",
74
- items: { type: "string" },
75
- description:
76
- "Specific files to lint (optional - lints all if empty)",
77
- },
78
- fix: {
79
- type: "boolean",
80
- default: false,
81
- description:
82
- "Automatically fix linting issues where possible",
83
- },
84
- strict: {
85
- type: "boolean",
86
- default: false,
87
- description: "Use strict linting rules",
88
- },
89
- },
90
- },
91
- },
92
- {
93
- name: "lint-check",
94
- description: "Check code quality without making changes",
95
- inputSchema: {
96
- type: "object",
97
- properties: {
98
- files: {
99
- type: "array",
100
- items: { type: "string" },
101
- description: "Files to check",
102
- },
103
- rules: {
104
- type: "array",
105
- items: { type: "string" },
106
- description: "Specific ESLint rules to check",
107
- },
108
- },
109
- },
110
- },
111
- ],
112
- };
113
- });
114
-
115
- // Handle tool calls
116
- this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
117
- const { name, arguments: args } = request.params;
118
-
119
- try {
120
- switch (name) {
121
- case "lint":
122
- return await this.handleLint(args as unknown as LintArgs);
123
- case "lint-check":
124
- return await this.handleLintCheck(args as unknown as LintCheckArgs);
125
- default:
126
- throw new Error(`Unknown tool: ${name}`);
127
- }
128
- } catch (error) {
129
- return {
130
- content: [
131
- {
132
- type: "text",
133
- text: `❌ Tool execution failed: ${error instanceof Error ? error.message : String(error)}`,
134
- },
135
- ],
136
- };
137
- }
138
- });
139
- }
140
-
141
98
  private async handleLint(args: LintArgs) {
142
99
  const files = args.files || [];
143
100
  const fix = args.fix || false;
@@ -462,16 +419,6 @@ ${checkResults.details.map((d) => `• ${d}`).join("\n")}
462
419
  - Fixed: ${results.issues.fixed}`;
463
420
  }
464
421
 
465
- async run() {
466
- const transport = new StdioServerTransport();
467
- await this.server.connect(transport);
468
- await frameworkLogger.log(
469
- "lint.server",
470
- "-xray-lint-mcp-server-started-",
471
- "info",
472
- { message: "0xRay Lint MCP Server started" },
473
- );
474
- }
475
422
  }
476
423
 
477
424
  // Start the server if run directly
@@ -4,16 +4,11 @@
4
4
  * Advanced model compatibility validation and dynamic health assessment
5
5
  */
6
6
 
7
- import { Server } from "@modelcontextprotocol/sdk/server/index.js";
8
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
9
7
  import { modelRouter } from "../core/model-router.js";
10
- import {
11
- CallToolRequestSchema,
12
- ListToolsRequestSchema,
13
- } from "@modelcontextprotocol/sdk/types.js";
14
8
  import { execSync } from "child_process";
15
9
  import fs from "fs";
16
10
  import { frameworkLogger } from "../core/framework-logger.js";
11
+ import { XrayKnowledgeSkillBase } from "./shared/knowledge-skill-base.js";
17
12
 
18
13
  interface ModelHealthCheckArgs {
19
14
  models?: string[];
@@ -36,73 +31,47 @@ interface ModelHealthReportData {
36
31
  summary: { total: number; healthy: number; issues: number };
37
32
  }
38
33
 
39
- class XrayModelHealthCheckServer {
40
- private server: Server;
41
-
34
+ class XrayModelHealthCheckServer extends XrayKnowledgeSkillBase {
42
35
  constructor() {
43
- this.server = new Server(
44
- {
45
- name: "model-health-check", version: "3.1.0",
46
- },
36
+ super("model-health-check", "3.1.0");
37
+
38
+ this.tools = [
47
39
  {
48
- capabilities: {
49
- tools: {},
40
+ name: "model-health-check",
41
+ description:
42
+ "Advanced model compatibility validation and dynamic health assessment",
43
+ inputSchema: {
44
+ type: "object",
45
+ properties: {
46
+ models: {
47
+ type: "array",
48
+ items: { type: "string" },
49
+ description:
50
+ "Specific models to check (optional - checks all configured if empty)",
51
+ },
52
+ compatibility: {
53
+ type: "boolean",
54
+ default: true,
55
+ description: "Include compatibility matrix in results",
56
+ },
57
+ performance: {
58
+ type: "boolean",
59
+ default: true,
60
+ description: "Include performance metrics in results",
61
+ },
62
+ },
50
63
  },
51
64
  },
52
- );
65
+ ];
66
+
67
+ this.handlers = {
68
+ "model-health-check": async (args) => this.handleModelHealthCheck((args || {}) as ModelHealthCheckArgs),
69
+ };
53
70
 
54
71
  this.setupToolHandlers();
55
72
  frameworkLogger.log("mcps/model-health-check", "initialize", "info");
56
73
  }
57
74
 
58
- private setupToolHandlers() {
59
- // List available tools
60
- this.server.setRequestHandler(ListToolsRequestSchema, async () => {
61
- return {
62
- tools: [
63
- {
64
- name: "model-health-check",
65
- description:
66
- "Advanced model compatibility validation and dynamic health assessment",
67
- inputSchema: {
68
- type: "object",
69
- properties: {
70
- models: {
71
- type: "array",
72
- items: { type: "string" },
73
- description:
74
- "Specific models to check (optional - checks all configured if empty)",
75
- },
76
- compatibility: {
77
- type: "boolean",
78
- default: true,
79
- description: "Include compatibility matrix in results",
80
- },
81
- performance: {
82
- type: "boolean",
83
- default: true,
84
- description: "Include performance metrics in results",
85
- },
86
- },
87
- },
88
- },
89
- ],
90
- };
91
- });
92
-
93
- // Handle tool calls
94
- this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
95
- const { name, arguments: args } = request.params;
96
-
97
- switch (name) {
98
- case "model-health-check":
99
- return await this.handleModelHealthCheck((args || {}) as unknown as ModelHealthCheckArgs);
100
- default:
101
- throw new Error(`Unknown tool: ${name}`);
102
- }
103
- });
104
- }
105
-
106
75
  private async handleModelHealthCheck(args: ModelHealthCheckArgs) {
107
76
  const models = args.models || [modelRouter.getValidatedModel()];
108
77
  const includeCompatibility = args.compatibility !== false;
@@ -276,17 +245,12 @@ class XrayModelHealthCheckServer {
276
245
  return report;
277
246
  }
278
247
 
279
- public async start() {
280
- const transport = new StdioServerTransport();
281
- await this.server.connect(transport);
282
- frameworkLogger.log("mcps/model-health-check", "start", "info");
283
- }
284
248
  }
285
249
 
286
250
  // Start the server if this file is run directly
287
251
  if (import.meta.url === `file://${fs.realpathSync(process.argv[1]!)}`) {
288
252
  const server = new XrayModelHealthCheckServer();
289
- server.start().catch((error) => frameworkLogger.log("mcps/model-health-check", "run", "error", { error: String(error) }));
253
+ server.run().catch((error) => frameworkLogger.log("mcps/model-health-check", "run", "error", { error: String(error) }));
290
254
  }
291
255
 
292
256
  export default XrayModelHealthCheckServer;
@@ -0,0 +1,245 @@
1
+ /**
2
+ * AsideContext — bounded subcontext for depth, continuity, and layered exploration
3
+ *
4
+ * Enables the orchestrator to spawn sub-investigations that inherit session context,
5
+ * accumulate structured observations from v3 subsystems (governance, orchestration,
6
+ * complexity analysis), and feed results back into the governance loop.
7
+ */
8
+
9
+ import { frameworkLogger } from "../../core/framework-logger.js";
10
+ import type {
11
+ AsideContextOptions,
12
+ AsideObservation,
13
+ AsideResult,
14
+ ActiveAside,
15
+ } from "./types.js";
16
+ import type { InferenceCycleResult } from "../../inference/inference-cycle.js";
17
+ import type { OrchestrationResult, ComplexityAnalysis } from "./types.js";
18
+
19
+ let asideCounter = 0;
20
+ const activeAsides = new Map<string, ActiveAside>();
21
+
22
+ export function getActiveAsideCount(): number {
23
+ return activeAsides.size;
24
+ }
25
+
26
+ export function getActiveAsideIds(): string[] {
27
+ return Array.from(activeAsides.keys());
28
+ }
29
+
30
+ export function getAsideState(asideId: string): ActiveAside | undefined {
31
+ return activeAsides.get(asideId);
32
+ }
33
+
34
+ export function addObservations(
35
+ asideId: string,
36
+ observations: AsideObservation[],
37
+ ): boolean {
38
+ const aside = activeAsides.get(asideId);
39
+ if (!aside) return false;
40
+ aside.observations.push(...observations);
41
+ return true;
42
+ }
43
+
44
+ export function extractGovernanceObservations(
45
+ result: InferenceCycleResult,
46
+ ): AsideObservation[] {
47
+ const obs: AsideObservation[] = [];
48
+ obs.push({
49
+ key: "governanceCycleId",
50
+ value: result.cycleId,
51
+ source: "inference/inference-cycle.ts",
52
+ });
53
+ obs.push({
54
+ key: "governanceVoteCount",
55
+ value: String(result.votes.length),
56
+ source: "inference/inference-cycle.ts",
57
+ });
58
+ const approved = result.votes.filter((v) => v.decision === "approve").length;
59
+ const rejected = result.votes.filter((v) => v.decision === "reject").length;
60
+ obs.push({
61
+ key: "governanceApprovedCount",
62
+ value: String(approved),
63
+ source: "inference/inference-cycle.ts",
64
+ });
65
+ obs.push({
66
+ key: "governanceRejectedCount",
67
+ value: String(rejected),
68
+ source: "inference/inference-cycle.ts",
69
+ });
70
+ if (result.corpusSummary) {
71
+ obs.push({
72
+ key: "corpusSessionCount",
73
+ value: String(result.corpusSummary.sessions),
74
+ source: "inference/inference-cycle.ts",
75
+ });
76
+ obs.push({
77
+ key: "corpusPatternCount",
78
+ value: String(result.corpusSummary.recurringPatterns),
79
+ source: "inference/inference-cycle.ts",
80
+ });
81
+ }
82
+ return obs;
83
+ }
84
+
85
+ export function extractOrchestrationObservations(
86
+ result: OrchestrationResult,
87
+ ): AsideObservation[] {
88
+ const obs: AsideObservation[] = [];
89
+ obs.push({
90
+ key: "orchestrationSuccess",
91
+ value: String(result.success),
92
+ source: "mcps/orchestrator/types.ts",
93
+ });
94
+ obs.push({
95
+ key: "tasksCompleted",
96
+ value: String(result.completedTasks),
97
+ source: "mcps/orchestrator/types.ts",
98
+ });
99
+ obs.push({
100
+ key: "tasksFailed",
101
+ value: String(result.failedTasks),
102
+ source: "mcps/orchestrator/types.ts",
103
+ });
104
+ obs.push({
105
+ key: "orchestrationDuration",
106
+ value: `${result.duration}ms`,
107
+ source: "mcps/orchestrator/types.ts",
108
+ });
109
+ for (const b of result.bottlenecks) {
110
+ obs.push({
111
+ key: "bottleneck",
112
+ value: b.substring(0, 200),
113
+ source: "mcps/orchestrator/types.ts",
114
+ });
115
+ }
116
+ for (const r of result.recommendations) {
117
+ obs.push({
118
+ key: "recommendation",
119
+ value: r.substring(0, 200),
120
+ source: "mcps/orchestrator/types.ts",
121
+ });
122
+ }
123
+ return obs;
124
+ }
125
+
126
+ export function extractComplexityObservations(
127
+ analysis: ComplexityAnalysis,
128
+ ): AsideObservation[] {
129
+ const obs: AsideObservation[] = [];
130
+ obs.push({
131
+ key: "complexityScore",
132
+ value: String(analysis.overallComplexity),
133
+ source: "mcps/orchestrator/execution/execution-planner.ts",
134
+ });
135
+ obs.push({
136
+ key: "recommendedStrategy",
137
+ value: analysis.recommendedStrategy,
138
+ source: "mcps/orchestrator/execution/execution-planner.ts",
139
+ });
140
+ obs.push({
141
+ key: "parallelPotential",
142
+ value: String(analysis.parallelPotential),
143
+ source: "mcps/orchestrator/execution/execution-planner.ts",
144
+ });
145
+ obs.push({
146
+ key: "estimatedDuration",
147
+ value: `${analysis.estimatedDuration}ms`,
148
+ source: "mcps/orchestrator/execution/execution-planner.ts",
149
+ });
150
+ for (const tc of analysis.taskComplexity) {
151
+ obs.push({
152
+ key: `taskComplexity`,
153
+ value: `${tc.complexity} (${tc.category})`,
154
+ source: "mcps/orchestrator/execution/execution-planner.ts",
155
+ });
156
+ }
157
+ return obs;
158
+ }
159
+
160
+ export async function spawnAside(
161
+ options: AsideContextOptions,
162
+ ): Promise<AsideResult> {
163
+ const asideId = options.parentAsideId
164
+ ? `${options.parentAsideId}.aside-${++asideCounter}`
165
+ : `aside-${++asideCounter}-${Date.now()}`;
166
+ const startTime = Date.now();
167
+
168
+ const aside: ActiveAside = {
169
+ asideId,
170
+ description: options.description,
171
+ startedAt: startTime,
172
+ observations: [],
173
+ ...(options.inheritedContext !== undefined ? { inheritedContext: options.inheritedContext } : {}),
174
+ ...(options.parentAsideId !== undefined ? { parentAsideId: options.parentAsideId } : {}),
175
+ ...(options.sessionId !== undefined ? { sessionId: options.sessionId } : {}),
176
+ ...(options.priorVerdictContext !== undefined ? { priorVerdictContext: options.priorVerdictContext } : {}),
177
+ };
178
+
179
+ activeAsides.set(asideId, aside);
180
+
181
+ frameworkLogger.log("aside-context", "aside-spawn", "info", {
182
+ asideId,
183
+ description: options.description,
184
+ sessionId: options.sessionId,
185
+ parentAsideId: options.parentAsideId,
186
+ activeAsideCount: activeAsides.size,
187
+ });
188
+
189
+ if (options.priorVerdictContext) {
190
+ const decision = options.priorVerdictContext["decision"];
191
+ if (decision) {
192
+ aside.observations.push({
193
+ key: "governanceDecision",
194
+ value: String(decision),
195
+ source: "priorVerdictContext",
196
+ });
197
+ }
198
+ }
199
+
200
+ const duration = Date.now() - startTime;
201
+
202
+ const result: AsideResult = {
203
+ asideId,
204
+ description: options.description,
205
+ success: true,
206
+ duration,
207
+ observations: aside.observations,
208
+ ...(options.priorVerdictContext !== undefined ? { priorVerdictContext: options.priorVerdictContext } : {}),
209
+ };
210
+
211
+ frameworkLogger.log("aside-context", "aside-complete", "info", {
212
+ asideId,
213
+ duration,
214
+ observationCount: aside.observations.length,
215
+ activeAsideCount: activeAsides.size,
216
+ });
217
+
218
+ return result;
219
+ }
220
+
221
+ export function closeAside(asideId: string): boolean {
222
+ const aside = activeAsides.get(asideId);
223
+ if (!aside) return false;
224
+ activeAsides.delete(asideId);
225
+ frameworkLogger.log("aside-context", "aside-closed", "info", {
226
+ asideId,
227
+ duration: Date.now() - aside.startedAt,
228
+ remainingActive: activeAsides.size,
229
+ });
230
+ return true;
231
+ }
232
+
233
+ export function closeAllAsides(): number {
234
+ const count = activeAsides.size;
235
+ activeAsides.clear();
236
+ frameworkLogger.log("aside-context", "aside-close-all", "info", {
237
+ closedCount: count,
238
+ });
239
+ return count;
240
+ }
241
+
242
+ export function resetAsideContext(): void {
243
+ activeAsides.clear();
244
+ asideCounter = 0;
245
+ }
@@ -6,6 +6,7 @@
6
6
 
7
7
  import { frameworkLogger } from '../../../core/framework-logger.js';
8
8
  import { getExecutionPlanner } from '../execution/execution-planner.js';
9
+ import { addObservations, extractComplexityObservations } from '../aside-context.js';
9
10
  import type { OrchestrationTask, ComplexityAnalysis } from '../types.js';
10
11
 
11
12
  /**
@@ -18,9 +19,10 @@ export class ComplexityHandler {
18
19
  /**
19
20
  * Handle analyze-complexity request
20
21
  */
21
- async handleAnalyzeComplexity(args: {
22
- tasks: OrchestrationTask[];
23
- }): Promise<{ content: Array<{ type: string; text: string }> }> {
22
+ async handleAnalyzeComplexity(
23
+ args: { tasks: OrchestrationTask[] },
24
+ asideId?: string,
25
+ ): Promise<{ content: Array<{ type: string; text: string }> }> {
24
26
  const { tasks = [] } = args;
25
27
 
26
28
  await frameworkLogger.log(
@@ -34,6 +36,10 @@ export class ComplexityHandler {
34
36
  const analysis = await this.planner.analyzeTaskComplexity(tasks);
35
37
  const recommendations = this.generateRecommendations(analysis);
36
38
 
39
+ if (asideId) {
40
+ addObservations(asideId, extractComplexityObservations(analysis));
41
+ }
42
+
37
43
  return {
38
44
  content: [
39
45
  {
@@ -18,6 +18,8 @@ interface HistoryItem {
18
18
  interface StatusHandlerDeps {
19
19
  activeTasks: Map<string, unknown>;
20
20
  taskHistory: HistoryItem[];
21
+ asideCount?: number;
22
+ asideIds?: string[];
21
23
  }
22
24
 
23
25
  /**
@@ -68,7 +70,15 @@ export class StatusHandler {
68
70
  status = this.getOverallStatus(deps);
69
71
  }
70
72
 
71
- const response = this.formatStatusResponse(status, detailed);
73
+ let response = this.formatStatusResponse(status, detailed);
74
+
75
+ if (detailed && deps.asideCount !== undefined) {
76
+ response += `\n\n**Active Aside Contexts:**`;
77
+ response += `\n• Count: ${deps.asideCount}`;
78
+ if (deps.asideIds && deps.asideIds.length > 0) {
79
+ response += `\n• IDs: ${deps.asideIds.join(', ')}`;
80
+ }
81
+ }
72
82
 
73
83
  return { content: [{ type: 'text', text: response }] };
74
84
  } catch (error) {
@@ -7,11 +7,13 @@
7
7
  import { frameworkLogger } from '../../../core/framework-logger.js';
8
8
  import { getExecutionPlanner } from '../execution/execution-planner.js';
9
9
  import { mcpClientManager } from '../../../mcps/mcp-client.js';
10
- import type { OrchestrationResult, OrchestrationTask, TaskExecutionResult } from '../types.js';
10
+ import { addObservations, extractOrchestrationObservations } from '../aside-context.js';
11
+ import type { OrchestrationResult, OrchestrationTask } from '../types.js';
11
12
 
12
13
  export interface TaskHandlerDeps {
13
14
  taskHistory: OrchestrationHistoryItem[];
14
15
  activeTasks: Map<string, unknown>;
16
+ asideId?: string;
15
17
  }
16
18
 
17
19
  interface OrchestrationHistoryItem {
@@ -88,6 +90,11 @@ export class TaskHandler {
88
90
  orchestrationResult.agentOutputs = results.agentOutputs;
89
91
  }
90
92
 
93
+ // Push observations into aside context if active
94
+ if (deps.asideId) {
95
+ addObservations(deps.asideId, extractOrchestrationObservations(orchestrationResult));
96
+ }
97
+
91
98
  // Store in history
92
99
  deps.taskHistory.push({
93
100
  sessionId,
@@ -0,0 +1,29 @@
1
+ export { OrchestratorServer, createOrchestratorServer } from './server.js';
2
+ export { TaskHandler } from './handlers/task-handler.js';
3
+ export { ComplexityHandler } from './handlers/complexity-handler.js';
4
+ export { StatusHandler } from './handlers/status-handler.js';
5
+ export {
6
+ spawnAside,
7
+ closeAside,
8
+ closeAllAsides,
9
+ addObservations,
10
+ getActiveAsideCount,
11
+ getActiveAsideIds,
12
+ getAsideState,
13
+ resetAsideContext,
14
+ extractGovernanceObservations,
15
+ extractOrchestrationObservations,
16
+ extractComplexityObservations,
17
+ } from './aside-context.js';
18
+ export type {
19
+ AsideContextOptions,
20
+ AsideObservation,
21
+ AsideResult,
22
+ ActiveAside,
23
+ OrchestrationTask,
24
+ OrchestrationResult,
25
+ OrchestrationStatus,
26
+ ComplexityAnalysis,
27
+ TaskExecutionResult,
28
+ ExecutionPlan,
29
+ } from './types.js';