0xray 3.0.14 → 3.1.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 (95) hide show
  1. package/.opencode/hooks/post-commit +1 -1
  2. package/.opencode/init.sh +4 -4
  3. package/AGENTS.md +2 -2
  4. package/dist/AGENTS.md +2 -2
  5. package/dist/CHANGELOG.md +9 -0
  6. package/dist/benchmark/performance-benchmark.js +4 -2
  7. package/dist/cli/commands/hermes-install.js +4 -4
  8. package/dist/cli/commands/mcp-install.js +1 -1
  9. package/dist/cli/commands/openclaw-install.js +1 -1
  10. package/dist/cli/commands/plugin-commands.js +2 -2
  11. package/dist/cli/commands/publish-agent.js +5 -5
  12. package/dist/cli/commands/skill-install.js +1 -1
  13. package/dist/cli/commands/status.js +3 -3
  14. package/dist/cli/commands/storyteller.js +1 -1
  15. package/dist/cli/index.js +6 -6
  16. package/dist/cli/server.js +4 -4
  17. package/dist/core/boot-orchestrator.js +24 -24
  18. package/dist/core/bridge.mjs +22 -22
  19. package/dist/core/codex-formatter.js +2 -2
  20. package/dist/core/codex-injector.js +5 -5
  21. package/dist/core/config-loader.js +4 -2
  22. package/dist/core/config-paths.js +14 -14
  23. package/dist/core/context-loader.js +8 -5
  24. package/dist/core/index.js +1 -1
  25. package/dist/core/orchestrator.js +1 -1
  26. package/dist/core/system-prompt-generator.js +2 -2
  27. package/dist/core/xray-activation.js +42 -40
  28. package/dist/delegation/agent-delegator.js +2 -2
  29. package/dist/enforcement/enforcer-tools.js +2 -2
  30. package/dist/enforcement/loaders/codex-loader.js +2 -2
  31. package/dist/governance/llm-governance-provider.js +210 -0
  32. package/dist/index.js +8 -6
  33. package/dist/inference/deploy-verifier.js +1 -1
  34. package/dist/inference/inference-cycle.js +7 -7
  35. package/dist/integrations/hermes-agent/__init__.py +72 -72
  36. package/dist/integrations/hermes-agent/after-install.md +14 -14
  37. package/dist/integrations/hermes-agent/bridge.mjs +24 -24
  38. package/dist/integrations/hermes-agent/plugin.yaml +5 -5
  39. package/dist/integrations/hermes-agent/schemas.py +12 -12
  40. package/dist/integrations/hermes-agent/test_plugin.py +117 -117
  41. package/dist/integrations/hermes-agent/tools.py +25 -25
  42. package/dist/integrations/plugins/plugin-registry.js +2 -2
  43. package/dist/mcps/config/server-config-registry.js +10 -10
  44. package/dist/mcps/connection/mcp-connection.js +1 -1
  45. package/dist/mcps/framework-help.server.js +6 -6
  46. package/dist/mcps/knowledge-skills/code-review.server.js +12 -37
  47. package/dist/mcps/knowledge-skills/security-audit.server.js +12 -42
  48. package/dist/mcps/knowledge-skills/ui-ux-design.server.js +2 -2
  49. package/dist/mcps/lint.server.js +2 -2
  50. package/dist/mcps/mcp-client.js +5 -5
  51. package/dist/mcps/orchestrator/server.js +2 -2
  52. package/dist/mcps/researcher.server.js +12 -37
  53. package/dist/mcps/simulation/server-simulations.js +3 -3
  54. package/dist/orchestrator/enhanced-multi-agent-orchestrator.js +2 -2
  55. package/dist/orchestrator/intelligent-commit-batcher.js +3 -3
  56. package/dist/orchestrator/multi-agent-orchestration-coordinator.js +9 -9
  57. package/dist/orchestrator/orchestrator.js +10 -8
  58. package/dist/orchestrator/universal-registry-bridge.js +3 -3
  59. package/dist/plugin/xray-codex-injection.js +21 -21
  60. package/dist/postprocessor/PostProcessor.js +5 -5
  61. package/dist/postprocessor/services/RegressionAnalysisService.js +2 -2
  62. package/dist/postprocessor/triggers/GitHookTrigger.js +14 -14
  63. package/dist/processors/implementations/agents-md-validation-processor.js +2 -2
  64. package/dist/processors/implementations/inference-improvement-processor.js +1 -1
  65. package/dist/processors/implementations/log-protection-processor.js +2 -2
  66. package/dist/processors/implementations/publish-preflight-processor.js +3 -3
  67. package/dist/processors/implementations/regression-testing-processor.js +2 -2
  68. package/dist/processors/implementations/session-summary-processor.js +1 -1
  69. package/dist/processors/implementations/storytelling-trigger-processor.js +1 -1
  70. package/dist/reporting/report-formatter.js +1 -1
  71. package/dist/scripts/activate-kernel-pipeline.js +2 -2
  72. package/dist/services/inference-tuner.js +2 -2
  73. package/dist/skills/hermes-agent/SKILL.md +42 -42
  74. package/dist/skills/storyteller/SKILL.md +1 -1
  75. package/dist/state/index.js +2 -1
  76. package/dist/state/state-manager.js +3 -3
  77. package/dist/utils/token-manager.js +1 -1
  78. package/dist/validation/estimation-validator.js +1 -1
  79. package/package.json +1 -1
  80. package/scripts/node/pre-publish-guard.js +13 -9
  81. package/scripts/node/universal-version-manager.js +2 -2
  82. package/src/mcps/config/__tests__/server-config-registry.test.ts +12 -12
  83. package/src/mcps/config/server-config-registry.ts +10 -10
  84. package/src/mcps/connection/mcp-connection.ts +1 -1
  85. package/src/mcps/framework-help.server.ts +6 -6
  86. package/src/mcps/knowledge-skills/code-review.server.ts +19 -34
  87. package/src/mcps/knowledge-skills/security-audit.server.ts +19 -38
  88. package/src/mcps/knowledge-skills/ui-ux-design.server.ts +2 -2
  89. package/src/mcps/lint.server.ts +2 -2
  90. package/src/mcps/mcp-client.ts +5 -5
  91. package/src/mcps/orchestrator/server.ts +2 -2
  92. package/src/mcps/researcher.server.ts +19 -34
  93. package/src/mcps/simulation/server-simulations.ts +3 -3
  94. package/src/skills/hermes-agent/SKILL.md +42 -42
  95. package/src/skills/storyteller/SKILL.md +1 -1
@@ -51,7 +51,7 @@ class XrayLintServer {
51
51
  this.setupToolHandlers();
52
52
  void frameworkLogger.log(
53
53
  "lint.server",
54
- "-strray-lint-mcp-server-initialized-",
54
+ "-xray-lint-mcp-server-initialized-",
55
55
  "info",
56
56
  { message: "0xRay Lint MCP Server initialized" },
57
57
  );
@@ -467,7 +467,7 @@ ${checkResults.details.map((d) => `• ${d}`).join("\n")}
467
467
  await this.server.connect(transport);
468
468
  await frameworkLogger.log(
469
469
  "lint.server",
470
- "-strray-lint-mcp-server-started-",
470
+ "-xray-lint-mcp-server-started-",
471
471
  "info",
472
472
  { message: "0xRay Lint MCP Server started" },
473
473
  );
@@ -153,7 +153,7 @@ export class MCPClient extends EventEmitter {
153
153
  * Pure MCP mode — simulation and generic fallbacks are disabled.
154
154
  */
155
155
  private get isPureMcpMode(): boolean {
156
- return process.env.STRRAY_FORCE_MCP_GOVERNANCE === 'true';
156
+ return process.env.XRAY_FORCE_MCP_GOVERNANCE === 'true';
157
157
  }
158
158
 
159
159
  /**
@@ -344,17 +344,17 @@ export class MCPClient extends EventEmitter {
344
344
  ],
345
345
  'framework-help': [
346
346
  {
347
- name: 'strray_get_capabilities',
347
+ name: 'xray_get_capabilities',
348
348
  description: 'Get 0xRay framework capabilities',
349
349
  inputSchema: { type: 'object', properties: {} },
350
350
  },
351
351
  {
352
- name: 'strray_get_commands',
352
+ name: 'xray_get_commands',
353
353
  description: 'Get available 0xRay commands',
354
354
  inputSchema: { type: 'object', properties: {} },
355
355
  },
356
356
  {
357
- name: 'strray_explain_capability',
357
+ name: 'xray_explain_capability',
358
358
  description: 'Explain a specific capability',
359
359
  inputSchema: {
360
360
  type: 'object',
@@ -470,7 +470,7 @@ export class MCPClient extends EventEmitter {
470
470
  if (this.isPureMcpMode) {
471
471
  throw new Error(
472
472
  `[PURE MCP] No real response for ${serverName}/${toolName}. ` +
473
- `All fallbacks are disabled when STRRAY_FORCE_MCP_GOVERNANCE=true.`
473
+ `All fallbacks are disabled when XRAY_FORCE_MCP_GOVERNANCE=true.`
474
474
  );
475
475
  }
476
476
 
@@ -12,7 +12,7 @@ import {
12
12
  ListToolsRequestSchema,
13
13
  } from '@modelcontextprotocol/sdk/types.js';
14
14
  import { frameworkLogger } from '../../core/framework-logger.js';
15
- import { StringRayStateManager } from '../../state/state-manager.js';
15
+ import { XrayStateManager } from '../../state/state-manager.js';
16
16
  import { MultiAgentOrchestrationCoordinator } from '../../orchestrator/multi-agent-orchestration-coordinator.js';
17
17
 
18
18
  import { TaskHandler } from './handlers/task-handler.js';
@@ -45,7 +45,7 @@ export class OrchestratorServer {
45
45
 
46
46
  constructor() {
47
47
  // Initialize actual coordinator
48
- const stateManager = new StringRayStateManager();
48
+ const stateManager = new XrayStateManager();
49
49
  this.coordinator = new MultiAgentOrchestrationCoordinator(stateManager);
50
50
 
51
51
  // Initialize handlers
@@ -18,6 +18,7 @@ import {
18
18
  import * as fs from "fs";
19
19
  import * as path from "path";
20
20
  import { frameworkLogger } from "../core/framework-logger.js";
21
+ import { tryLLMGovernance } from "../governance/llm-governance-provider.js";
21
22
 
22
23
  interface SearchResult {
23
24
  file: string;
@@ -482,47 +483,31 @@ class XrayLibrarianServer {
482
483
  */
483
484
  async analyzeProposal(args: AnalyzeProposalArgs): Promise<CallToolResult> {
484
485
  const { proposalTitle = "", proposalDescription = "", evidence = [], proposalType = "" } = args || {};
485
- const text = `${proposalTitle} ${proposalDescription} ${(evidence || []).join(" ")}`.toLowerCase();
486
-
487
- let decision: "approve" | "reject" | "abstain" = "approve";
488
- let confidence = 0.80;
489
- let reasoning = "From a project-wide analysis perspective, the proposal aligns with observed recurring patterns and has supporting evidence in the corpus.";
490
-
491
- if (text.includes("aml") || text.includes("kyc") || text.includes("anti-money")) {
492
- decision = "approve";
493
- confidence = 0.86;
494
- reasoning = "AML/KYC compliance integration is a recurring pattern across financial services codebases. The corpus shows that automated transaction monitoring reduces regulatory incident frequency by approximately 60% when properly integrated with sanction list APIs.";
495
- } else if (text.includes("psd2") || text.includes("strong customer authentication") || text.includes("payment initiation")) {
496
- decision = "approve";
497
- confidence = 0.88;
498
- reasoning = "PSD2 SCA patterns are well-established in the corpus across multiple implementations. The Berlin Group standards provide a reliable reference architecture, and existing integrations show consistent compliance with EBA regulatory technical standards.";
499
- } else if (text.includes("gdpr") || text.includes("right to erasure") || text.includes("data protection")) {
500
- decision = "approve";
501
- confidence = 0.91;
502
- reasoning = "GDPR data erasure pipeline patterns appear in approximately 35% of enterprise codebases in the corpus. The most successful implementations use the saga pattern with compensating transactions for cross-system consistency.";
503
- } else if (text.includes("extract method")) {
504
- decision = "approve";
505
- confidence = 0.89;
506
- reasoning = "The Extract Method pattern is a core refactoring technique that improves modularity; the corpus shows consistent positive outcomes when applied to repeated logic across many sessions.";
507
- } else if (text.includes("test coverage")) {
508
- decision = "approve";
509
- confidence = 0.94;
510
- reasoning = "Test coverage expansion is one of the highest-leverage improvements for long-term project health, directly reducing regression incidents across 100+ sessions in the historical data.";
511
- } else if (text.includes("technical debt")) {
512
- decision = "approve";
513
- confidence = 0.85;
514
- reasoning = "Systematic technical debt reduction is strongly supported by historical data showing fewer critical violations and faster feature delivery in low-debt modules.";
515
- }
516
486
 
517
- if (proposalType === "fix" && !text.includes("pattern") && !text.includes("recurring")) {
518
- confidence = Math.max(0.68, confidence - 0.10);
487
+ const vote = await tryLLMGovernance(
488
+ "researcher",
489
+ proposalTitle || "",
490
+ proposalDescription || "",
491
+ evidence || [],
492
+ proposalType || "",
493
+ );
494
+
495
+ if (!vote) {
496
+ return {
497
+ content: [
498
+ {
499
+ type: "text",
500
+ text: "DECISION: abstain\nCONFIDENCE: 0.50\nREASONING: No LLM governance provider configured. Set XRAY_GOVERNANCE_LLM_ENABLED=true + XRAY_LLM_ENDPOINT, or install Hermes and run: hermes auth add xai-oauth --no-browser",
501
+ },
502
+ ],
503
+ };
519
504
  }
520
505
 
521
506
  return {
522
507
  content: [
523
508
  {
524
509
  type: "text",
525
- text: `DECISION: ${decision}\nCONFIDENCE: ${confidence.toFixed(2)}\nREASONING: ${reasoning}`,
510
+ text: `DECISION: ${vote.decision}\nCONFIDENCE: ${vote.confidence.toFixed(2)}\nREASONING: ${vote.reasoning}`,
526
511
  },
527
512
  ],
528
513
  };
@@ -86,7 +86,7 @@ export const researcherSimulations: Record<string, SimulatorFunction> = {
86
86
  * Framework Help server simulations
87
87
  */
88
88
  export const frameworkHelpSimulations: Record<string, SimulatorFunction> = {
89
- strray_get_capabilities: (): MCPToolResult => ({
89
+ xray_get_capabilities: (): MCPToolResult => ({
90
90
  content: [
91
91
  {
92
92
  type: 'text',
@@ -118,7 +118,7 @@ export const frameworkHelpSimulations: Record<string, SimulatorFunction> = {
118
118
  ],
119
119
  }),
120
120
 
121
- strray_get_commands: (): MCPToolResult => ({
121
+ xray_get_commands: (): MCPToolResult => ({
122
122
  content: [
123
123
  {
124
124
  type: 'text',
@@ -146,7 +146,7 @@ framework-reporting-system - Generate comprehensive framework reports
146
146
  ],
147
147
  }),
148
148
 
149
- strray_explain_capability: (): MCPToolResult => ({
149
+ xray_explain_capability: (): MCPToolResult => ({
150
150
  content: [
151
151
  {
152
152
  type: 'text',
@@ -1,21 +1,21 @@
1
1
  ---
2
2
  name: hermes-agent
3
- description: Manage StringRay framework from Hermes Agent via the native strray-hermes plugin. Covers the 4 plugin tools (validate, codex_check, health, hooks), lifecycle hooks, slash commands, bridge architecture, and CLI fallback.
3
+ description: Manage 0xRay framework from Hermes Agent via the native xray-hermes plugin. Covers the 4 plugin tools (validate, codex_check, health, hooks), lifecycle hooks, slash commands, bridge architecture, and CLI fallback.
4
4
  version: 2.1.0
5
- author: StringRay AI
5
+ author: 0xRay AI
6
6
  metadata:
7
7
  hermes:
8
- tags: [StringRay, Plugin, Validation, Codex, GitHooks, Bridge]
8
+ tags: [0xRay, Plugin, Validation, Codex, GitHooks, Bridge]
9
9
  related_skills: []
10
10
  ---
11
11
 
12
- # StringRay Hermes Plugin (strray-hermes)
12
+ # 0xRay Hermes Plugin (xray-hermes)
13
13
 
14
- Native Hermes plugin providing StringRay framework integration — quality gates, codex enforcement, git hooks, and full pre/post processing pipeline. Runs via a Node.js bridge to compiled framework components.
14
+ Native Hermes plugin providing 0xRay framework integration — quality gates, codex enforcement, git hooks, and full pre/post processing pipeline. Runs via a Node.js bridge to compiled framework components.
15
15
 
16
16
  ## When to Use
17
17
 
18
- - User asks about StringRay health, validation, or codex checks
18
+ - User asks about 0xRay health, validation, or codex checks
19
19
  - User wants to install/manage git hooks for automated enforcement
20
20
  - User asks about the plugin's tools, hooks, or slash commands
21
21
  - User asks about bridge errors or framework not loading
@@ -24,11 +24,11 @@ Native Hermes plugin providing StringRay framework integration — quality gates
24
24
  ## Plugin Architecture
25
25
 
26
26
  ```
27
- ~/.hermes/plugins/strray-hermes/
27
+ ~/.hermes/plugins/xray-hermes/
28
28
  ├── __init__.py # Plugin registration, hooks, slash commands
29
29
  ├── tools.py # 4 tool handlers (validate, codex_check, health, hooks)
30
30
  ├── schemas.py # JSON schemas the LLM sees
31
- ├── bridge.mjs # Node.js bridge to compiled StringRay framework
31
+ ├── bridge.mjs # Node.js bridge to compiled 0xRay framework
32
32
  ├── plugin.yaml # Plugin metadata (name, version, tools, hooks)
33
33
  ├── types.py # TypeScript-equivalent type definitions
34
34
  ├── after-install.md # Post-install instructions
@@ -43,17 +43,17 @@ Native Hermes plugin providing StringRay framework integration — quality gates
43
43
 
44
44
  **Fallback:** When bridge is unavailable, tools fall back to `npx 0xray` CLI commands.
45
45
 
46
- **Config path resolution:** `STRRAY_CONFIG_DIR/` > `.strray/` > `.opencode/strray/` > built-in defaults.
46
+ **Config path resolution:** `XRAY_CONFIG_DIR/` > `.xray/` > `.opencode/xray/` > built-in defaults.
47
47
 
48
48
  ## 4 Tools
49
49
 
50
- ### strray_validate
50
+ ### xray_validate
51
51
 
52
52
  Run pre-commit validation on files. Uses bridge quality gate + processor pipeline, falls back to CLI.
53
53
 
54
54
  ```
55
- strray_validate(files=["src/my-module.ts"], operation="commit")
56
- strray_validate(files=["src/auth.ts", "src/auth.test.ts"], operation="modify")
55
+ xray_validate(files=["src/my-module.ts"], operation="commit")
56
+ xray_validate(files=["src/auth.ts", "src/auth.test.ts"], operation="modify")
57
57
  ```
58
58
 
59
59
  Parameters:
@@ -62,13 +62,13 @@ Parameters:
62
62
 
63
63
  Returns: pass/fail with per-file results and violations.
64
64
 
65
- ### strray_codex_check
65
+ ### xray_codex_check
66
66
 
67
67
  Validate code against the 60-term Universal Development Codex. Checks error-handling, type-safety, performance, security, architecture.
68
68
 
69
69
  ```
70
- strray_codex_check(code="const x: any = foo()", operation="create")
71
- strray_codex_check(code=snippet, operation="modify", focus_areas=["security", "error-handling"])
70
+ xray_codex_check(code="const x: any = foo()", operation="create")
71
+ xray_codex_check(code=snippet, operation="modify", focus_areas=["security", "error-handling"])
72
72
  ```
73
73
 
74
74
  Parameters:
@@ -78,25 +78,25 @@ Parameters:
78
78
 
79
79
  Returns: violations list with actionable remediation.
80
80
 
81
- ### strray_health
81
+ ### xray_health
82
82
 
83
83
  Framework health check. Returns version, loaded components, project root.
84
84
 
85
85
  ```
86
- strray_health()
86
+ xray_health()
87
87
  ```
88
88
 
89
89
  Returns: framework status, version, component availability, node version.
90
90
 
91
- ### strray_hooks
91
+ ### xray_hooks
92
92
 
93
- Manage StringRay git hooks (install, uninstall, list, status).
93
+ Manage 0xRay git hooks (install, uninstall, list, status).
94
94
 
95
95
  ```
96
- strray_hooks(action="install")
97
- strray_hooks(action="status")
98
- strray_hooks(action="list")
99
- strray_hooks(action="uninstall", hooks=["pre-commit"])
96
+ xray_hooks(action="install")
97
+ xray_hooks(action="status")
98
+ xray_hooks(action="list")
99
+ xray_hooks(action="uninstall", hooks=["pre-commit"])
100
100
  ```
101
101
 
102
102
  Parameters:
@@ -122,7 +122,7 @@ Fires before ANY tool executes:
122
122
  1. Tracks session stats
123
123
  2. Logs tool-start event to `logs/framework/plugin-tool-events.log`
124
124
  3. For code-producing tools (write_file, patch, execute_code, write, edit): runs quality gate + pre-processors via bridge
125
- 4. For other tools: nudges when a StringRay MCP alternative exists (e.g., grep → search_codebase, eslint → strray_lint)
125
+ 4. For other tools: nudges when a 0xRay MCP alternative exists (e.g., grep → search_codebase, eslint → xray_lint)
126
126
 
127
127
  ### post_tool_call
128
128
 
@@ -137,16 +137,16 @@ Fires when a new session starts. Resets stats and logs to disk. Registration is
137
137
  ## Slash Command
138
138
 
139
139
  ```
140
- /strray status — Plugin and framework health (calls bridge)
141
- /strray stats — Session pipeline statistics
142
- /strray help — Show available commands
140
+ /xray status — Plugin and framework health (calls bridge)
141
+ /xray stats — Session pipeline statistics
142
+ /xray help — Show available commands
143
143
  /sr status — Alias
144
144
  ```
145
145
 
146
146
  ## Session Stats (tracked automatically)
147
147
 
148
- The plugin tracks per-session counters visible via `/strray stats`:
149
- - total_tool_calls, code_operations, strray_mcp_calls, native_tool_calls
148
+ The plugin tracks per-session counters visible via `/xray stats`:
149
+ - total_tool_calls, code_operations, xray_mcp_calls, native_tool_calls
150
150
  - quality_gate_runs, quality_gate_blocks
151
151
  - pre_processor_runs, post_processor_runs
152
152
  - bridge_calls, bridge_errors
@@ -164,13 +164,13 @@ All logs go to `logs/framework/` in the project root:
164
164
 
165
165
  | User Says | Tool / Command |
166
166
  |----------|---------------|
167
- | "Is StringRay working?" | `strray_health()` or `/strray status` |
168
- | "Check these files before I commit" | `strray_validate(files=[...], operation="commit")` |
169
- | "Is this code codex compliant?" | `strray_codex_check(code=..., operation="create")` |
170
- | "Set up git hooks" | `strray_hooks(action="install")` |
171
- | "What hooks are installed?" | `strray_hooks(action="status")` |
172
- | "Show session stats" | `/strray stats` |
173
- | "Why is the bridge failing?" | Check `strray_health()` → if `framework: "not_loaded"`, verify `dist/` symlink |
167
+ | "Is 0xRay working?" | `xray_health()` or `/xray status` |
168
+ | "Check these files before I commit" | `xray_validate(files=[...], operation="commit")` |
169
+ | "Is this code codex compliant?" | `xray_codex_check(code=..., operation="create")` |
170
+ | "Set up git hooks" | `xray_hooks(action="install")` |
171
+ | "What hooks are installed?" | `xray_hooks(action="status")` |
172
+ | "Show session stats" | `/xray stats` |
173
+ | "Why is the bridge failing?" | Check `xray_health()` → if `framework: "not_loaded"`, verify `dist/` symlink |
174
174
 
175
175
  ## Bridge Commands (internal)
176
176
 
@@ -188,8 +188,8 @@ These are called by the Python tools via `bridge.mjs`, not directly by the LLM:
188
188
 
189
189
  Bridge can be invoked directly for debugging:
190
190
  ```bash
191
- echo '{"command":"health"}' | node ~/.hermes/plugins/strray-hermes/bridge.mjs
192
- node ~/.hermes/plugins/strray-hermes/bridge.mjs health --cwd /path/to/project
191
+ echo '{"command":"health"}' | node ~/.hermes/plugins/xray-hermes/bridge.mjs
192
+ node ~/.hermes/plugins/xray-hermes/bridge.mjs health --cwd /path/to/project
193
193
  ```
194
194
 
195
195
  ## Relationship to MCP Servers
@@ -198,15 +198,15 @@ The plugin and MCP servers are complementary:
198
198
  - **Plugin tools** = offline-first, always available, lightweight (validate, codex check, health, hooks)
199
199
  - **MCP servers** = deeper analysis requiring running Node.js (lint, security scan, architecture assessment, orchestration, codebase search)
200
200
 
201
- The plugin's pre_tool_call hook nudges when an MCP alternative exists (e.g., "use mcp_strray_lint_lint instead of raw eslint"). This is advisory, not blocking.
201
+ The plugin's pre_tool_call hook nudges when an MCP alternative exists (e.g., "use mcp_xray_lint_lint instead of raw eslint"). This is advisory, not blocking.
202
202
 
203
203
  ## Pitfalls
204
204
 
205
205
  - Plugin requires restart after install/edit: Hermes loads plugins once at session start.
206
206
  - Bridge needs `dist/` symlink: The bridge loads compiled `.js` from `dist/` → `node_modules/0xray/dist/`. If the symlink breaks, bridge returns `framework: "not_loaded"`.
207
- - `strray_codex_check` without `code` param returns health, not a codex check. Pass `code` for actual validation.
207
+ - `xray_codex_check` without `code` param returns health, not a codex check. Pass `code` for actual validation.
208
208
  - CLI fallback requires `npx 0xray` in PATH. If bridge fails and CLI isn't available, tools return errors.
209
209
  - Quality gate blocks are logged but NOT enforced (advisory). The tool returns violations; the agent decides what to do.
210
- - Git hooks use symlinks from `.git/hooks/` → `hooks/`. If the `hooks/` directory doesn't exist in the project, `strray_hooks(action="install")` skips those hooks.
211
- - Project root detection walks up from CWD looking for `node_modules/0xray`, `.opencode/strray/features.json`, or `package.json`. Override with `STRRAY_PROJECT_ROOT` env var.
210
+ - Git hooks use symlinks from `.git/hooks/` → `hooks/`. If the `hooks/` directory doesn't exist in the project, `xray_hooks(action="install")` skips those hooks.
211
+ - Project root detection walks up from CWD looking for `node_modules/0xray`, `.opencode/xray/features.json`, or `package.json`. Override with `XRAY_PROJECT_ROOT` env var.
212
212
  - `logs/framework/` is created automatically. Never breaks the agent if permissions fail.
@@ -96,7 +96,7 @@ codex_terms: [5, 7, 32] # Related Codex term numbers
96
96
  ```markdown
97
97
  ## What Next?
98
98
 
99
- - Related Codex terms: [codex.json](../../.opencode/strray/codex.json)
99
+ - Related Codex terms: [codex.json](../../.opencode/xray/codex.json)
100
100
  - Next story to write: [suggestion]
101
101
  ```
102
102