0xray 2.1.2 → 2.1.4

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 (250) hide show
  1. package/.opencode/codex.codex +1 -1
  2. package/.opencode/commands/dependency-audit.md +3 -3
  3. package/.opencode/enforcer-config.json +2 -2
  4. package/AGENTS.md +2 -1
  5. package/README.md +12 -11
  6. package/dist/AGENTS.md +2 -1
  7. package/dist/CHANGELOG.md +38 -0
  8. package/dist/README.md +12 -11
  9. package/dist/agents/code-reviewer.js +1 -1
  10. package/dist/analytics/routing-refiner.js +1 -1
  11. package/dist/cli/index.js +11 -1
  12. package/dist/cli/server.js +3 -3
  13. package/dist/core/activity-logger.d.ts +2 -2
  14. package/dist/core/activity-logger.js +4 -4
  15. package/dist/core/boot-orchestrator.d.ts +1 -1
  16. package/dist/core/boot-orchestrator.js +13 -28
  17. package/dist/core/bridge.mjs +3 -3
  18. package/dist/core/codex-formatter.js +2 -2
  19. package/dist/core/codex-injector.d.ts +0 -1
  20. package/dist/core/codex-injector.js +2 -3
  21. package/dist/core/config-loader.d.ts +1 -1
  22. package/dist/core/config-loader.js +1 -1
  23. package/dist/core/config-paths.d.ts +0 -2
  24. package/dist/core/config-paths.js +7 -8
  25. package/dist/core/context-loader.d.ts +1 -1
  26. package/dist/core/context-loader.js +1 -1
  27. package/dist/core/errors.d.ts +3 -0
  28. package/dist/core/errors.js +10 -0
  29. package/dist/core/features-config.js +1 -1
  30. package/dist/core/framework-logger.d.ts +3 -3
  31. package/dist/core/framework-logger.js +17 -9
  32. package/dist/core/index.d.ts +2 -2
  33. package/dist/core/index.js +4 -2
  34. package/dist/core/logging-config.d.ts +2 -1
  35. package/dist/core/logging-config.js +7 -7
  36. package/dist/enforcement/loaders/codex-loader.js +1 -1
  37. package/dist/execution/opencode-cli-invoker.js +5 -5
  38. package/dist/governance/governance-service.js +1 -1
  39. package/dist/index.d.ts +3 -3
  40. package/dist/index.js +3 -3
  41. package/dist/inference/inference-cycle.d.ts +1 -1
  42. package/dist/inference/inference-cycle.js +10 -10
  43. package/dist/integrations/base/Integration.js +1 -1
  44. package/dist/integrations/base/registry.js +19 -19
  45. package/dist/integrations/grok/grok-cli.js +17 -17
  46. package/dist/integrations/grok/hooks/pre-tool-use.js +1 -1
  47. package/dist/integrations/hermes-agent/bridge.mjs +1 -1
  48. package/dist/integrations/openclaw/api-server.d.ts +0 -1
  49. package/dist/integrations/openclaw/api-server.js +7 -10
  50. package/dist/integrations/openclaw/client.d.ts +0 -1
  51. package/dist/integrations/openclaw/client.js +22 -24
  52. package/dist/integrations/openclaw/hooks/xray-hooks.d.ts +0 -1
  53. package/dist/integrations/openclaw/hooks/xray-hooks.js +17 -18
  54. package/dist/integrations/plugins/plugin-registry.js +5 -5
  55. package/dist/mcps/architect-tools.server.d.ts +2 -4
  56. package/dist/mcps/architect-tools.server.js +112 -195
  57. package/dist/mcps/auto-format.server.d.ts +2 -4
  58. package/dist/mcps/auto-format.server.js +49 -95
  59. package/dist/mcps/boot-orchestrator.server.d.ts +2 -4
  60. package/dist/mcps/boot-orchestrator.server.js +73 -105
  61. package/dist/mcps/config/server-config-registry.js +3 -3
  62. package/dist/mcps/enforcer-tools.server.d.ts +2 -4
  63. package/dist/mcps/enforcer-tools.server.js +202 -285
  64. package/dist/mcps/estimation.server.d.ts +2 -4
  65. package/dist/mcps/estimation.server.js +63 -107
  66. package/dist/mcps/framework-compliance-audit.server.d.ts +2 -4
  67. package/dist/mcps/framework-compliance-audit.server.js +53 -82
  68. package/dist/mcps/framework-help.server.d.ts +2 -4
  69. package/dist/mcps/framework-help.server.js +63 -101
  70. package/dist/mcps/governance.server.js +2 -2
  71. package/dist/mcps/knowledge-skills/api-design.server.d.ts +2 -4
  72. package/dist/mcps/knowledge-skills/api-design.server.js +35 -67
  73. package/dist/mcps/knowledge-skills/architecture-patterns.server.d.ts +2 -10
  74. package/dist/mcps/knowledge-skills/architecture-patterns.server.js +35 -74
  75. package/dist/mcps/knowledge-skills/bug-triage-specialist.server.d.ts +2 -4
  76. package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +143 -162
  77. package/dist/mcps/knowledge-skills/code-analyzer.server.d.ts +3 -4
  78. package/dist/mcps/knowledge-skills/code-analyzer.server.js +20 -45
  79. package/dist/mcps/knowledge-skills/code-review.server.d.ts +2 -4
  80. package/dist/mcps/knowledge-skills/code-review.server.js +109 -143
  81. package/dist/mcps/knowledge-skills/content-creator.server.d.ts +2 -4
  82. package/dist/mcps/knowledge-skills/content-creator.server.js +205 -226
  83. package/dist/mcps/knowledge-skills/database-design.server.d.ts +2 -4
  84. package/dist/mcps/knowledge-skills/database-design.server.js +117 -151
  85. package/dist/mcps/knowledge-skills/devops-deployment.server.d.ts +2 -4
  86. package/dist/mcps/knowledge-skills/devops-deployment.server.js +71 -160
  87. package/dist/mcps/knowledge-skills/git-workflow.server.d.ts +2 -4
  88. package/dist/mcps/knowledge-skills/git-workflow.server.js +36 -68
  89. package/dist/mcps/knowledge-skills/growth-strategist.server.d.ts +2 -4
  90. package/dist/mcps/knowledge-skills/growth-strategist.server.js +303 -324
  91. package/dist/mcps/knowledge-skills/log-monitor.server.d.ts +2 -4
  92. package/dist/mcps/knowledge-skills/log-monitor.server.js +141 -160
  93. package/dist/mcps/knowledge-skills/mobile-development.server.d.ts +2 -4
  94. package/dist/mcps/knowledge-skills/mobile-development.server.js +92 -209
  95. package/dist/mcps/knowledge-skills/multimodal-looker.server.d.ts +2 -4
  96. package/dist/mcps/knowledge-skills/multimodal-looker.server.js +123 -159
  97. package/dist/mcps/knowledge-skills/performance-optimization.server.d.ts +2 -5
  98. package/dist/mcps/knowledge-skills/performance-optimization.server.js +155 -296
  99. package/dist/mcps/knowledge-skills/project-analysis.server.d.ts +2 -4
  100. package/dist/mcps/knowledge-skills/project-analysis.server.js +75 -226
  101. package/dist/mcps/knowledge-skills/refactoring-strategies.server.d.ts +2 -4
  102. package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +63 -156
  103. package/dist/mcps/knowledge-skills/security-audit.server.d.ts +2 -4
  104. package/dist/mcps/knowledge-skills/security-audit.server.js +102 -136
  105. package/dist/mcps/knowledge-skills/seo-consultant.server.d.ts +2 -4
  106. package/dist/mcps/knowledge-skills/seo-consultant.server.js +80 -203
  107. package/dist/mcps/knowledge-skills/session-management.server.d.ts +2 -4
  108. package/dist/mcps/knowledge-skills/session-management.server.js +50 -203
  109. package/dist/mcps/knowledge-skills/skill-invocation.server.d.ts +2 -4
  110. package/dist/mcps/knowledge-skills/skill-invocation.server.js +168 -347
  111. package/dist/mcps/knowledge-skills/strategist.server.d.ts +2 -11
  112. package/dist/mcps/knowledge-skills/strategist.server.js +72 -122
  113. package/dist/mcps/knowledge-skills/tech-writer.server.d.ts +2 -4
  114. package/dist/mcps/knowledge-skills/tech-writer.server.js +87 -300
  115. package/dist/mcps/knowledge-skills/testing-best-practices.server.d.ts +2 -4
  116. package/dist/mcps/knowledge-skills/testing-best-practices.server.js +147 -182
  117. package/dist/mcps/knowledge-skills/testing-strategy.server.d.ts +2 -4
  118. package/dist/mcps/knowledge-skills/testing-strategy.server.js +78 -153
  119. package/dist/mcps/knowledge-skills/ui-ux-design.server.d.ts +2 -5
  120. package/dist/mcps/knowledge-skills/ui-ux-design.server.js +90 -399
  121. package/dist/mcps/lint.server.d.ts +2 -4
  122. package/dist/mcps/lint.server.js +51 -92
  123. package/dist/mcps/mcp-client.js +2 -2
  124. package/dist/mcps/model-health-check.server.d.ts +2 -4
  125. package/dist/mcps/model-health-check.server.js +32 -60
  126. package/dist/mcps/performance-analysis.server.d.ts +2 -4
  127. package/dist/mcps/performance-analysis.server.js +57 -88
  128. package/dist/mcps/processor-pipeline.server.d.ts +2 -4
  129. package/dist/mcps/processor-pipeline.server.js +69 -100
  130. package/dist/mcps/registry.json +1 -1
  131. package/dist/mcps/researcher.server.d.ts +3 -5
  132. package/dist/mcps/researcher.server.js +81 -154
  133. package/dist/mcps/security-scan.server.d.ts +2 -4
  134. package/dist/mcps/security-scan.server.js +54 -96
  135. package/dist/mcps/shared/knowledge-skill-base.d.ts +14 -0
  136. package/dist/mcps/shared/knowledge-skill-base.js +45 -0
  137. package/dist/{security → mcps/shared}/security-scanner.js +1 -1
  138. package/dist/mcps/state-manager.server.d.ts +2 -4
  139. package/dist/mcps/state-manager.server.js +115 -160
  140. package/dist/orchestrator/orchestrator.d.ts +1 -1
  141. package/dist/orchestrator/orchestrator.js +1 -1
  142. package/dist/orchestrator/universal-registry-bridge.js +1 -1
  143. package/dist/plugin/xray-codex-injection.d.ts +1 -1
  144. package/dist/plugin/xray-codex-injection.js +1 -1
  145. package/dist/postprocessor/PostProcessor.d.ts +4 -44
  146. package/dist/postprocessor/PostProcessor.js +39 -553
  147. package/dist/postprocessor/analysis/CodeChangeAnalyzer.d.ts +11 -0
  148. package/dist/postprocessor/analysis/CodeChangeAnalyzer.js +50 -0
  149. package/dist/postprocessor/compliance/ArchitecturalComplianceChecker.d.ts +11 -0
  150. package/dist/postprocessor/compliance/ArchitecturalComplianceChecker.js +356 -0
  151. package/dist/postprocessor/config/ProcessorConfigLoader.d.ts +44 -0
  152. package/dist/postprocessor/config/ProcessorConfigLoader.js +21 -0
  153. package/dist/postprocessor/reporting/PostProcessorReporter.d.ts +19 -0
  154. package/dist/postprocessor/reporting/PostProcessorReporter.js +96 -0
  155. package/dist/postprocessor/triggers/GitHookTrigger.js +11 -11
  156. package/dist/processors/implementations/refactoring-logging-processor-wrapper.d.ts +32 -0
  157. package/dist/processors/implementations/refactoring-logging-processor-wrapper.js +95 -1
  158. package/dist/processors/processor-manager.js +346 -314
  159. package/dist/reporting/report-formatter.js +1 -1
  160. package/dist/security/security-hardener.d.ts +69 -2
  161. package/dist/security/security-hardener.js +129 -1
  162. package/dist/skills/registry.json +1 -1
  163. package/dist/state/index.d.ts +3 -5
  164. package/dist/state/index.js +1 -7
  165. package/dist/state/state-manager.d.ts +1 -1
  166. package/dist/state/state-manager.js +2 -3
  167. package/package.json +13 -10
  168. package/scripts/node/universal-version-manager.js +11 -11
  169. package/src/mcps/architect-tools.server.ts +112 -215
  170. package/src/mcps/auto-format.server.ts +50 -110
  171. package/src/mcps/boot-orchestrator.server.ts +75 -121
  172. package/src/mcps/config/__tests__/server-config-registry.test.ts +21 -12
  173. package/src/mcps/config/server-config-registry.ts +3 -3
  174. package/src/mcps/enforcer-tools.server.ts +212 -310
  175. package/src/mcps/estimation.server.ts +62 -122
  176. package/src/mcps/framework-compliance-audit.server.ts +52 -97
  177. package/src/mcps/framework-help.server.ts +64 -114
  178. package/src/mcps/governance.server.ts +2 -2
  179. package/src/mcps/knowledge-skills/api-design.server.ts +32 -77
  180. package/src/mcps/knowledge-skills/architecture-patterns.server.ts +31 -87
  181. package/src/mcps/knowledge-skills/bug-triage-specialist.server.ts +165 -193
  182. package/src/mcps/knowledge-skills/code-analyzer.server.ts +20 -55
  183. package/src/mcps/knowledge-skills/code-review.server.ts +114 -161
  184. package/src/mcps/knowledge-skills/content-creator.server.ts +218 -255
  185. package/src/mcps/knowledge-skills/database-design.server.ts +118 -165
  186. package/src/mcps/knowledge-skills/devops-deployment.server.ts +67 -172
  187. package/src/mcps/knowledge-skills/git-workflow.server.ts +32 -77
  188. package/src/mcps/knowledge-skills/growth-strategist.server.ts +324 -361
  189. package/src/mcps/knowledge-skills/log-monitor.server.ts +160 -187
  190. package/src/mcps/knowledge-skills/mobile-development.server.ts +89 -223
  191. package/src/mcps/knowledge-skills/multimodal-looker.server.ts +128 -175
  192. package/src/mcps/knowledge-skills/performance-optimization.server.ts +156 -329
  193. package/src/mcps/knowledge-skills/project-analysis.server.ts +72 -248
  194. package/src/mcps/knowledge-skills/refactoring-strategies.server.ts +59 -171
  195. package/src/mcps/knowledge-skills/security-audit.server.ts +104 -151
  196. package/src/mcps/knowledge-skills/seo-consultant.server.ts +80 -220
  197. package/src/mcps/knowledge-skills/session-management.server.ts +51 -232
  198. package/src/mcps/knowledge-skills/skill-invocation.server.ts +165 -372
  199. package/src/mcps/knowledge-skills/strategist.server.ts +72 -143
  200. package/src/mcps/knowledge-skills/tech-writer.server.ts +85 -350
  201. package/src/mcps/knowledge-skills/testing-best-practices.server.ts +146 -195
  202. package/src/mcps/knowledge-skills/testing-strategy.server.ts +75 -161
  203. package/src/mcps/knowledge-skills/ui-ux-design.server.ts +93 -487
  204. package/src/mcps/lint.server.ts +53 -107
  205. package/src/mcps/mcp-client.ts +2 -2
  206. package/src/mcps/model-health-check.server.ts +34 -71
  207. package/src/mcps/performance-analysis.server.ts +60 -104
  208. package/src/mcps/processor-pipeline.server.ts +72 -110
  209. package/src/mcps/registry.json +1 -1
  210. package/src/mcps/researcher.server.ts +88 -177
  211. package/src/mcps/security-scan.server.ts +55 -104
  212. package/src/mcps/shared/knowledge-skill-base.ts +62 -0
  213. package/src/mcps/shared/prompt-security-validator.ts +199 -0
  214. package/src/mcps/shared/security-scanner.ts +599 -0
  215. package/src/mcps/state-manager.server.ts +117 -175
  216. package/src/opencode/codex.codex +1 -1
  217. package/src/opencode/commands/dependency-audit.md +3 -3
  218. package/src/opencode/enforcer-config.json +2 -2
  219. package/src/skills/registry.json +1 -1
  220. package/xray/codex.json +1 -1
  221. package/xray/config.json +1 -1
  222. package/xray/features.json +1 -1
  223. package/xray/integrations.json +3 -3
  224. package/dist/integrations/hermes-agent/__pycache__/__init__.cpython-313.pyc +0 -0
  225. package/dist/integrations/hermes-agent/__pycache__/conftest.cpython-313-pytest-9.0.2.pyc +0 -0
  226. package/dist/integrations/hermes-agent/__pycache__/schemas.cpython-313.pyc +0 -0
  227. package/dist/integrations/hermes-agent/__pycache__/test_plugin.cpython-313-pytest-9.0.2.pyc +0 -0
  228. package/dist/integrations/hermes-agent/__pycache__/test_plugin.cpython-313.pyc +0 -0
  229. package/dist/integrations/hermes-agent/__pycache__/tools.cpython-313.pyc +0 -0
  230. package/dist/integrations/hermes-agent/conftest.py +0 -14
  231. package/dist/integrations/hermes-agent/test_plugin.py +0 -1103
  232. package/dist/processors/implementations/refactoring-logging-processor.d.ts +0 -31
  233. package/dist/processors/implementations/refactoring-logging-processor.js +0 -96
  234. package/dist/processors/implementations/session-capture-processor.d.ts +0 -14
  235. package/dist/processors/implementations/session-capture-processor.js +0 -37
  236. package/dist/scripts/activate-kernel-pipeline.d.ts +0 -7
  237. package/dist/scripts/activate-kernel-pipeline.js +0 -101
  238. package/dist/security/index.d.ts +0 -13
  239. package/dist/security/index.js +0 -13
  240. package/dist/security/security-agent-coordinator.d.ts +0 -72
  241. package/dist/security/security-agent-coordinator.js +0 -204
  242. package/dist/security/security-auditor.d.ts +0 -56
  243. package/dist/security/security-auditor.js +0 -584
  244. package/dist/security/security-hardening-system.d.ts +0 -239
  245. package/dist/security/security-hardening-system.js +0 -727
  246. package/dist/security/security-orchestration-layer.d.ts +0 -119
  247. package/dist/security/security-orchestration-layer.js +0 -496
  248. /package/dist/{security → mcps/shared}/prompt-security-validator.d.ts +0 -0
  249. /package/dist/{security → mcps/shared}/prompt-security-validator.js +0 -0
  250. /package/dist/{security → mcps/shared}/security-scanner.d.ts +0 -0
@@ -93,7 +93,7 @@ export class IntegrationRegistry extends EventEmitter {
93
93
  name,
94
94
  version: integration.version,
95
95
  });
96
- frameworkLogger.log("integration-registry", `Registered integration: ${name} v${integration.version}`, "info", { name, version: integration.version }, this.jobId).catch(() => { });
96
+ frameworkLogger.log("integration-registry", `Registered integration: ${name} v${integration.version}`, "info", { name, version: integration.version });
97
97
  }
98
98
  /**
99
99
  * Unregister an integration from the registry
@@ -109,12 +109,12 @@ export class IntegrationRegistry extends EventEmitter {
109
109
  // If loaded, unload first
110
110
  if (this.loadedIntegrations.has(name)) {
111
111
  this.unload(name).catch((error) => {
112
- frameworkLogger.log("integration-registry", `Error unloading integration '${name}' during unregister: ${error}`, "error", { name, error: String(error) }, this.jobId).catch(() => { });
112
+ frameworkLogger.log("integration-registry", `Error unloading integration '${name}' during unregister: ${error}`, "error", { name, error: String(error) });
113
113
  });
114
114
  }
115
115
  this.registeredIntegrations.delete(name);
116
116
  this.emitEvent("integration-unregistered", { name });
117
- frameworkLogger.log("integration-registry", `Unregistered integration: ${name}`, "info", { name }, this.jobId).catch(() => { });
117
+ frameworkLogger.log("integration-registry", `Unregistered integration: ${name}`, "info", { name });
118
118
  }
119
119
  // ==========================================================================
120
120
  // Accessor Methods
@@ -184,7 +184,7 @@ export class IntegrationRegistry extends EventEmitter {
184
184
  async load(name, config) {
185
185
  // Check if already loaded
186
186
  if (this.loadedIntegrations.has(name)) {
187
- frameworkLogger.log("integration-registry", `Integration '${name}' already loaded`, "warning", { name }, this.jobId).catch(() => { });
187
+ frameworkLogger.log("integration-registry", `Integration '${name}' already loaded`, "warning", { name });
188
188
  return;
189
189
  }
190
190
  const integration = this.registeredIntegrations.get(name);
@@ -211,7 +211,7 @@ export class IntegrationRegistry extends EventEmitter {
211
211
  name,
212
212
  version: integration.version,
213
213
  });
214
- frameworkLogger.log("integration-registry", `Loaded integration: ${name}`, "success", { name, version: integration.version }, this.jobId).catch(() => { });
214
+ frameworkLogger.log("integration-registry", `Loaded integration: ${name}`, "success", { name, version: integration.version });
215
215
  }
216
216
  catch (error) {
217
217
  const errorMessage = error instanceof Error ? error.message : String(error);
@@ -239,7 +239,7 @@ export class IntegrationRegistry extends EventEmitter {
239
239
  // Remove from loaded map
240
240
  this.loadedIntegrations.delete(name);
241
241
  this.emitEvent("integration-unloaded", { name });
242
- frameworkLogger.log("integration-registry", `Unloaded integration: ${name}`, "success", { name }, this.jobId).catch(() => { });
242
+ frameworkLogger.log("integration-registry", `Unloaded integration: ${name}`, "success", { name });
243
243
  }
244
244
  catch (error) {
245
245
  const errorMessage = error instanceof Error ? error.message : String(error);
@@ -250,7 +250,7 @@ export class IntegrationRegistry extends EventEmitter {
250
250
  error: errorMessage,
251
251
  phase: "unload",
252
252
  }, error instanceof Error ? error : undefined);
253
- frameworkLogger.log("integration-registry", `Error unloading integration '${name}': ${errorMessage}`, "error", { name, error: errorMessage }, this.jobId).catch(() => { });
253
+ frameworkLogger.log("integration-registry", `Error unloading integration '${name}': ${errorMessage}`, "error", { name, error: errorMessage });
254
254
  }
255
255
  }
256
256
  /**
@@ -261,14 +261,14 @@ export class IntegrationRegistry extends EventEmitter {
261
261
  async loadAll(config) {
262
262
  const entries = Object.entries(config.integrations);
263
263
  const enabledEntries = entries.filter(([, entry]) => entry.enabled);
264
- frameworkLogger.log("integration-registry", `Loading ${enabledEntries.length} enabled integrations...`, "info", { total: entries.length, enabled: enabledEntries.length }, this.jobId).catch(() => { });
264
+ frameworkLogger.log("integration-registry", `Loading ${enabledEntries.length} enabled integrations...`, "info", { total: entries.length, enabled: enabledEntries.length });
265
265
  const results = [];
266
266
  // Load all enabled integrations
267
267
  for (const [name, entry] of enabledEntries) {
268
268
  try {
269
269
  // Check if registered
270
270
  if (!this.registeredIntegrations.has(name)) {
271
- frameworkLogger.log("integration-registry", `Skipping '${name}': not registered`, "warning", { name }, this.jobId).catch(() => { });
271
+ frameworkLogger.log("integration-registry", `Skipping '${name}': not registered`, "warning", { name });
272
272
  results.push({ name, success: false, error: "Not registered" });
273
273
  continue;
274
274
  }
@@ -282,7 +282,7 @@ export class IntegrationRegistry extends EventEmitter {
282
282
  catch (error) {
283
283
  const errorMessage = error instanceof Error ? error.message : String(error);
284
284
  results.push({ name, success: false, error: errorMessage });
285
- frameworkLogger.log("integration-registry", `Failed to load integration '${name}': ${errorMessage}`, "error", { name, error: errorMessage }, this.jobId).catch(() => { });
285
+ frameworkLogger.log("integration-registry", `Failed to load integration '${name}': ${errorMessage}`, "error", { name, error: errorMessage });
286
286
  }
287
287
  }
288
288
  this.emitEvent("load-complete", {
@@ -293,14 +293,14 @@ export class IntegrationRegistry extends EventEmitter {
293
293
  });
294
294
  const succeeded = results.filter((r) => r.success).length;
295
295
  const failed = results.filter((r) => !r.success).length;
296
- frameworkLogger.log("integration-registry", `Load complete: ${succeeded} succeeded, ${failed} failed`, failed > 0 ? "warning" : "success", { succeeded, failed }, this.jobId).catch(() => { });
296
+ frameworkLogger.log("integration-registry", `Load complete: ${succeeded} succeeded, ${failed} failed`, failed > 0 ? "warning" : "success", { succeeded, failed });
297
297
  }
298
298
  /**
299
299
  * Unload all loaded integrations
300
300
  */
301
301
  async unloadAll() {
302
302
  const loadedNames = Array.from(this.loadedIntegrations.keys());
303
- frameworkLogger.log("integration-registry", `Unloading ${loadedNames.length} integrations...`, "info", { count: loadedNames.length }, this.jobId).catch(() => { });
303
+ frameworkLogger.log("integration-registry", `Unloading ${loadedNames.length} integrations...`, "info", { count: loadedNames.length });
304
304
  const results = [];
305
305
  // Unload all loaded integrations
306
306
  for (const name of loadedNames) {
@@ -321,7 +321,7 @@ export class IntegrationRegistry extends EventEmitter {
321
321
  });
322
322
  const succeeded = results.filter((r) => r.success).length;
323
323
  const failed = results.filter((r) => !r.success).length;
324
- frameworkLogger.log("integration-registry", `Unload complete: ${succeeded} succeeded, ${failed} failed`, failed > 0 ? "warning" : "success", { succeeded, failed }, this.jobId).catch(() => { });
324
+ frameworkLogger.log("integration-registry", `Unload complete: ${succeeded} succeeded, ${failed} failed`, failed > 0 ? "warning" : "success", { succeeded, failed });
325
325
  }
326
326
  // ==========================================================================
327
327
  // Health and Stats Methods
@@ -427,7 +427,7 @@ export class IntegrationRegistry extends EventEmitter {
427
427
  this.registeredIntegrations.delete(name);
428
428
  }
429
429
  }
430
- frameworkLogger.log("integration-registry", "Cleared non-loaded integrations", "info", { cleared: names.length - this.loadedIntegrations.size }, this.jobId).catch(() => { });
430
+ frameworkLogger.log("integration-registry", "Cleared non-loaded integrations", "info", { cleared: names.length - this.loadedIntegrations.size });
431
431
  }
432
432
  /**
433
433
  * Get registry statistics
@@ -494,7 +494,7 @@ export async function discoverIntegrations(integrationsPath) {
494
494
  const path = await import("path");
495
495
  // Check if directory exists
496
496
  if (!fs.existsSync(integrationsPath)) {
497
- frameworkLogger.log("integration-registry", `Integrations directory not found: ${integrationsPath}`, "warning", { path: integrationsPath }).catch(() => { });
497
+ frameworkLogger.log("integration-registry", `Integrations directory not found: ${integrationsPath}`, "warning", { path: integrationsPath });
498
498
  return discovered;
499
499
  }
500
500
  // Read directory contents
@@ -533,18 +533,18 @@ export async function discoverIntegrations(integrationsPath) {
533
533
  path: indexPath,
534
534
  module,
535
535
  });
536
- frameworkLogger.log("integration-registry", `Discovered integration: ${name}`, "info", { name, path: indexPath }).catch(() => { });
536
+ frameworkLogger.log("integration-registry", `Discovered integration: ${name}`, "info", { name, path: indexPath });
537
537
  }
538
538
  catch (error) {
539
539
  const errorMessage = error instanceof Error ? error.message : String(error);
540
- frameworkLogger.log("integration-registry", `Failed to load integration from ${indexPath}: ${errorMessage}`, "warning", { path: indexPath, error: errorMessage }).catch(() => { });
540
+ frameworkLogger.log("integration-registry", `Failed to load integration from ${indexPath}: ${errorMessage}`, "warning", { path: indexPath, error: errorMessage });
541
541
  }
542
542
  }
543
543
  }
544
544
  }
545
545
  catch (error) {
546
546
  const errorMessage = error instanceof Error ? error.message : String(error);
547
- frameworkLogger.log("integration-registry", `Error during integration discovery: ${errorMessage}`, "error", { error: errorMessage }).catch(() => { });
547
+ frameworkLogger.log("integration-registry", `Error during integration discovery: ${errorMessage}`, "error", { error: errorMessage });
548
548
  }
549
549
  return discovered;
550
550
  }
@@ -595,7 +595,7 @@ export async function autoRegisterIntegrations(registry, integrationsPath) {
595
595
  catch (error) {
596
596
  // Skip integrations that fail to register (already registered, etc.)
597
597
  const errorMessage = error instanceof Error ? error.message : String(error);
598
- frameworkLogger.log("integration-registry", `Failed to register integration '${d.name}': ${errorMessage}`, "warning", { name: d.name, error: errorMessage }).catch(() => { });
598
+ frameworkLogger.log("integration-registry", `Failed to register integration '${d.name}': ${errorMessage}`, "warning", { name: d.name, error: errorMessage });
599
599
  }
600
600
  }
601
601
  return registered;
@@ -31,50 +31,50 @@ export async function installForGrokCLI(options = {}) {
31
31
  ];
32
32
  let sourceDir = possibleSources.find(p => fs.existsSync(p));
33
33
  if (!sourceDir) {
34
- console.error('[Grok] Could not locate the 0xray Grok plugin inside the package.');
34
+ frameworkLogger.log('grok-cli', 'Could not locate the 0xray Grok plugin inside the package.', 'error', {});
35
35
  return;
36
36
  }
37
37
  if (options.dryRun) {
38
- console.log(`[Grok] Dry run: Would copy plugin from ${sourceDir} → ${targetPluginDir}`);
38
+ frameworkLogger.log('grok-cli', `Dry run: Would copy plugin from ${sourceDir} → ${targetPluginDir}`, 'info', {});
39
39
  return;
40
40
  }
41
41
  try {
42
42
  if (fs.existsSync(targetPluginDir) && !options.force) {
43
- console.log('[Grok] 0xray Grok plugin is already installed.');
44
- console.log('Use --force to reinstall.');
43
+ frameworkLogger.log('grok-cli', '0xray Grok plugin is already installed.', 'info', {});
44
+ frameworkLogger.log('grok-cli', 'Use --force to reinstall.', 'info', {});
45
45
  return;
46
46
  }
47
47
  fs.cpSync(sourceDir, targetPluginDir, { recursive: true, force: true });
48
48
  frameworkLogger.log('grok-integration', 'plugin-copied', 'info', { destination: targetPluginDir });
49
- console.log(`\x1b[32m✓ Copied Grok plugin to ${targetPluginDir}\x1b[0m`);
49
+ frameworkLogger.log('grok-cli', `Copied Grok plugin to ${targetPluginDir}`, 'info', {});
50
50
  // Attempt auto-trust (best effort)
51
51
  try {
52
52
  execSync(`grok plugins trust "${targetPluginDir}"`, { stdio: 'ignore' });
53
- console.log('\x1b[32m✓ Auto-trusted the 0xray plugin with Grok CLI\x1b[0m');
53
+ frameworkLogger.log('grok-cli', 'Auto-trusted the 0xray plugin with Grok CLI', 'info', {});
54
54
  }
55
55
  catch {
56
- console.log('\nPlease run this command to fully trust the plugin:');
57
- console.log(` grok plugins trust "${targetPluginDir}"`);
56
+ frameworkLogger.log('grok-cli', 'Please run this command to fully trust the plugin:', 'info', {});
57
+ frameworkLogger.log('grok-cli', ` grok plugins trust "${targetPluginDir}"`, 'info', {});
58
58
  }
59
59
  // Register MCP servers via grok mcp add (most reliable mechanism)
60
60
  const govMcpPath = path.resolve(__dirname, '..', '..', '..', 'dist/mcps/governance.server.js');
61
61
  const skillsMcpPath = path.resolve(__dirname, '..', '..', '..', 'dist/mcps/knowledge-skills/skill-invocation.server.js');
62
62
  try {
63
- execSync(`grok mcp add xray-governance --command node --args "${govMcpPath}" --env "STRRAY_FORCE_MCP_GOVERNANCE=true" --env "STRRAY_ROOT=${process.cwd()}"`, { stdio: 'pipe' });
64
- execSync(`grok mcp add xray-skills --command node --args "${skillsMcpPath}" --env "STRRAY_ROOT=${process.cwd()}"`, { stdio: 'pipe' });
65
- console.log('\x1b[32m✓ Registered xray MCP servers with Grok CLI\x1b[0m');
63
+ execSync(`grok mcp add xray-governance --command node --args "${govMcpPath}" --env "XRAY_FORCE_MCP_GOVERNANCE=true" --env "XRAY_ROOT=${process.cwd()}"`, { stdio: 'pipe' });
64
+ execSync(`grok mcp add xray-skills --command node --args "${skillsMcpPath}" --env "XRAY_ROOT=${process.cwd()}"`, { stdio: 'pipe' });
65
+ frameworkLogger.log('grok-cli', 'Registered xray MCP servers with Grok CLI', 'info', {});
66
66
  }
67
67
  catch {
68
- console.log('\nCould not auto-register MCP servers. Run manually:');
69
- console.log(` grok mcp add xray-governance --command node --args "${govMcpPath}"`);
70
- console.log(` grok mcp add xray-skills --command node --args "${skillsMcpPath}"`);
68
+ frameworkLogger.log('grok-cli', 'Could not auto-register MCP servers. Run manually:', 'info', {});
69
+ frameworkLogger.log('grok-cli', ` grok mcp add xray-governance --command node --args "${govMcpPath}"`, 'info', {});
70
+ frameworkLogger.log('grok-cli', ` grok mcp add xray-skills --command node --args "${skillsMcpPath}"`, 'info', {});
71
71
  }
72
- console.log('\n✅ 0xRay is now installed as a first-class Grok CLI plugin!');
73
- console.log('Restart Grok or run `grok` to load the new hooks and MCP servers.');
72
+ frameworkLogger.log('grok-cli', '0xRay is now installed as a first-class Grok CLI plugin!', 'info', {});
73
+ frameworkLogger.log('grok-cli', 'Restart Grok or run `grok` to load the new hooks and MCP servers.', 'info', {});
74
74
  }
75
75
  catch (err) {
76
76
  frameworkLogger.log('grok-integration', 'install-error', 'error', { error: err.message });
77
- console.error('Failed to install Grok plugin:', err.message);
77
+ frameworkLogger.log('grok-cli', 'Failed to install Grok plugin:', 'error', { error: err.message });
78
78
  }
79
79
  frameworkLogger.log('grok-integration', 'install-complete', 'info', {});
80
80
  }
@@ -16,7 +16,7 @@ function findGovernanceCore() {
16
16
  const here = path.dirname(new URL(import.meta.url).pathname);
17
17
 
18
18
  // Priority: explicit dev root
19
- const devRoot = process.env.STRRAY_ROOT;
19
+ const devRoot = ;
20
20
  if (devRoot) {
21
21
  const devCandidate = path.resolve(devRoot, 'dist/governance/governance-core.js');
22
22
  if (fs.existsSync(devCandidate)) return devCandidate;
@@ -53,7 +53,7 @@ let frameworkLoadAttempted = false;
53
53
 
54
54
  // ── Project root detection ───────────────────────────────────
55
55
  function findProjectRoot() {
56
- const envHome = process.env.STRRAY_HOME;
56
+ const envHome = process.env.XRAY_HOME;
57
57
  if (envHome && existsSync(join(envHome, "package.json"))) return envHome;
58
58
 
59
59
  const candidates = [
@@ -28,7 +28,6 @@ export declare class XrayAPIServer {
28
28
  private apiKey;
29
29
  private stats;
30
30
  private responseTimes;
31
- private logger;
32
31
  constructor(config: XrayAPIServerConfig);
33
32
  /**
34
33
  * Set the agent invoker
@@ -7,6 +7,7 @@
7
7
  * @version 1.0.0
8
8
  * @since 2026-03-14
9
9
  */
10
+ import { frameworkLogger } from '../../core/framework-logger.js';
10
11
  import * as crypto from 'crypto';
11
12
  import * as http from 'http';
12
13
  /**
@@ -26,7 +27,6 @@ export class XrayAPIServer {
26
27
  errors: 0,
27
28
  };
28
29
  responseTimes = [];
29
- logger;
30
30
  constructor(config) {
31
31
  this.config = {
32
32
  port: config.port || 18431,
@@ -38,7 +38,6 @@ export class XrayAPIServer {
38
38
  maxRequests: 100,
39
39
  },
40
40
  };
41
- this.logger = console;
42
41
  }
43
42
  /**
44
43
  * Set the agent invoker
@@ -51,7 +50,7 @@ export class XrayAPIServer {
51
50
  */
52
51
  async start() {
53
52
  if (this.server) {
54
- this.logger.warn('[XrayAPIServer] Server already running');
53
+ frameworkLogger.log('openclaw-api-server', 'Server already running', 'warning', {});
55
54
  return;
56
55
  }
57
56
  return new Promise((resolve, reject) => {
@@ -59,13 +58,13 @@ export class XrayAPIServer {
59
58
  this.handleRequest(req, res);
60
59
  });
61
60
  this.server.on('error', (error) => {
62
- this.logger.error('[XrayAPIServer] Server error:', error);
61
+ frameworkLogger.log('openclaw-api-server', 'Server error:', 'error', { error });
63
62
  this.stats.errors++;
64
63
  reject(error);
65
64
  });
66
65
  this.server.listen(this.config.port, this.config.host, () => {
67
66
  this.stats.startedAt = Date.now();
68
- this.logger.info(`[XrayAPIServer] Listening on http://${this.config.host}:${this.config.port}`);
67
+ frameworkLogger.log('openclaw-api-server', `Listening on http://${this.config.host}:${this.config.port}`, 'info', {});
69
68
  resolve();
70
69
  });
71
70
  });
@@ -77,7 +76,7 @@ export class XrayAPIServer {
77
76
  return new Promise((resolve) => {
78
77
  if (this.server) {
79
78
  this.server.close(() => {
80
- this.logger.info('[XrayAPIServer] Server stopped');
79
+ frameworkLogger.log('openclaw-api-server', 'Server stopped', 'info', {});
81
80
  this.server = null;
82
81
  resolve();
83
82
  });
@@ -123,9 +122,7 @@ export class XrayAPIServer {
123
122
  // to prevent cross-origin attacks where a malicious site could make
124
123
  // authenticated requests using the API key from a victim's browser.
125
124
  if (this.config.apiKey) {
126
- this.logger.warn('[XrayAPIServer] Security: API key is set with CORS enabled. ' +
127
- 'Restricting Access-Control-Allow-Origin to localhost only. ' +
128
- 'Configure explicit allowed origins if cross-origin access is needed.');
125
+ frameworkLogger.log('openclaw-api-server', 'Security: API key is set with CORS enabled. Restricting Access-Control-Allow-Origin to localhost only. Configure explicit allowed origins if cross-origin access is needed.', 'warning', {});
129
126
  const origin = req.headers.origin;
130
127
  if (origin && ['http://localhost', 'http://127.0.0.1', 'http://localhost:3000',
131
128
  'http://127.0.0.1:3000', 'http://localhost:5173', 'http://127.0.0.1:5173'].includes(origin)) {
@@ -203,7 +200,7 @@ export class XrayAPIServer {
203
200
  }
204
201
  }
205
202
  catch (error) {
206
- this.logger.error(`[XrayAPIServer] Error handling request:`, error);
203
+ frameworkLogger.log('openclaw-api-server', 'Error handling request:', 'error', { error });
207
204
  this.stats.errors++;
208
205
  const errorMessage = error instanceof Error ? error.message : 'Internal server error';
209
206
  this.sendResponse(res, 500, { error: errorMessage });
@@ -22,7 +22,6 @@ export declare class OpenClawClient {
22
22
  private reconnectTimeout;
23
23
  private pingInterval;
24
24
  private stats;
25
- private logger;
26
25
  constructor(config: OpenClawClientConfig);
27
26
  /**
28
27
  * Connect to OpenClaw Gateway
@@ -7,6 +7,7 @@
7
7
  * @version 1.0.0
8
8
  * @since 2026-03-14
9
9
  */
10
+ import { frameworkLogger } from '../../core/framework-logger.js';
10
11
  import { WebSocket } from 'ws';
11
12
  import * as crypto from 'crypto';
12
13
  import { isOpenClawResponse, isOpenClawEvent, OpenClawTimeoutError, OpenClawConnectionError, } from './types.js';
@@ -32,7 +33,6 @@ export class OpenClawClient {
32
33
  reconnects: 0,
33
34
  errors: 0,
34
35
  };
35
- logger;
36
36
  constructor(config) {
37
37
  this.config = {
38
38
  gatewayUrl: config.gatewayUrl || 'ws://127.0.0.1:18789',
@@ -45,8 +45,6 @@ export class OpenClawClient {
45
45
  pingInterval: config.pingInterval ?? 30000,
46
46
  requestTimeout: config.requestTimeout ?? 30000,
47
47
  };
48
- // Use console but can be replaced with proper logger
49
- this.logger = console;
50
48
  }
51
49
  /**
52
50
  * Connect to OpenClaw Gateway
@@ -56,7 +54,7 @@ export class OpenClawClient {
56
54
  _handshakeTimeout = null;
57
55
  async connect() {
58
56
  if (this.state === 'connected' || this.state === 'authenticating') {
59
- this.logger.warn('[OpenClawClient] Already connected or connecting');
57
+ frameworkLogger.log('openclaw-client', 'Already connected or connecting', 'warning', {});
60
58
  return;
61
59
  }
62
60
  this.setState('connecting');
@@ -71,7 +69,7 @@ export class OpenClawClient {
71
69
  try {
72
70
  this.ws = new WebSocket(this.config.gatewayUrl);
73
71
  this.ws.on('open', () => {
74
- this.logger.info('[OpenClawClient] WebSocket connected, waiting for challenge...');
72
+ frameworkLogger.log('openclaw-client', 'WebSocket connected, waiting for challenge...', 'info', {});
75
73
  this.handshakeResolve = resolve;
76
74
  this.handshakeReject = reject;
77
75
  });
@@ -80,21 +78,21 @@ export class OpenClawClient {
80
78
  this.handleMessage(message);
81
79
  });
82
80
  this.ws.on('close', (code, reason) => {
83
- this.logger.info(`[OpenClawClient] Connection closed: ${code} ${String(reason)}`);
81
+ frameworkLogger.log('openclaw-client', `Connection closed: ${code} ${String(reason)}`, 'info', {});
84
82
  this.handleDisconnect(Number(code), String(reason));
85
83
  });
86
84
  this.ws.on('error', (error) => {
87
- this.logger.error('[OpenClawClient] WebSocket error:', error instanceof Error ? error.message : String(error));
85
+ frameworkLogger.log('openclaw-client', 'WebSocket error:', 'error', { error: error instanceof Error ? error.message : String(error) });
88
86
  this.stats.errors++;
89
87
  if (this.state === 'connecting') {
90
88
  reject(new OpenClawConnectionError(`Failed to connect to ${this.config.gatewayUrl}: ${error instanceof Error ? error.message : String(error)}`, error instanceof Error ? error : undefined));
91
89
  }
92
90
  });
93
91
  this.ws.on('ping', () => {
94
- this.logger.debug('[OpenClawClient] Received ping');
92
+ frameworkLogger.log('openclaw-client', 'Received ping', 'debug', {});
95
93
  });
96
94
  this.ws.on('pong', () => {
97
- this.logger.debug('[OpenClawClient] Received pong');
95
+ frameworkLogger.log('openclaw-client', 'Received pong', 'debug', {});
98
96
  });
99
97
  }
100
98
  catch (error) {
@@ -107,7 +105,7 @@ export class OpenClawClient {
107
105
  * Disconnect from OpenClaw Gateway
108
106
  */
109
107
  disconnect() {
110
- this.logger.info('[OpenClawClient] Disconnecting...');
108
+ frameworkLogger.log('openclaw-client', 'Disconnecting...', 'info', {});
111
109
  if (this._handshakeTimeout) {
112
110
  clearTimeout(this._handshakeTimeout);
113
111
  this._handshakeTimeout = null;
@@ -150,7 +148,7 @@ export class OpenClawClient {
150
148
  method,
151
149
  params,
152
150
  };
153
- this.logger.debug(`[OpenClawClient] Sending request: ${method} (${id})`);
151
+ frameworkLogger.log('openclaw-client', `Sending request: ${method} (${id})`, 'debug', {});
154
152
  this.stats.requestsSent++;
155
153
  return new Promise((resolve, reject) => {
156
154
  // Set timeout
@@ -286,13 +284,13 @@ export class OpenClawClient {
286
284
  this.setState('authorized');
287
285
  this.startPingInterval();
288
286
  if (this.handshakeResolve) {
289
- this.logger.info('[OpenClawClient] Handshake complete (connect response ok)');
287
+ frameworkLogger.log('openclaw-client', 'Handshake complete (connect response ok)', 'info', {});
290
288
  this.handshakeResolve();
291
289
  this.handshakeResolve = null;
292
290
  this.handshakeReject = null;
293
291
  }
294
292
  }).catch((error) => {
295
- this.logger.error('[OpenClawClient] Handshake failed:', error);
293
+ frameworkLogger.log('openclaw-client', 'Handshake failed:', 'error', { error });
296
294
  this.setState('error');
297
295
  if (this.handshakeReject) {
298
296
  this.handshakeReject(error);
@@ -315,11 +313,11 @@ export class OpenClawClient {
315
313
  this.handleEvent(frame);
316
314
  }
317
315
  else {
318
- this.logger.warn('[OpenClawClient] Unknown frame type:', frame);
316
+ frameworkLogger.log('openclaw-client', 'Unknown frame type:', 'warning', { frame });
319
317
  }
320
318
  }
321
319
  catch (error) {
322
- this.logger.error('[OpenClawClient] Failed to parse message:', error);
320
+ frameworkLogger.log('openclaw-client', 'Failed to parse message:', 'error', { error });
323
321
  this.stats.errors++;
324
322
  }
325
323
  }
@@ -340,17 +338,17 @@ export class OpenClawClient {
340
338
  }
341
339
  }
342
340
  else {
343
- this.logger.warn('[OpenClawClient] Received response for unknown request:', frame.id);
341
+ frameworkLogger.log('openclaw-client', 'Received response for unknown request:', 'warning', { requestId: frame.id });
344
342
  }
345
343
  }
346
344
  /**
347
345
  * Handle event frame
348
346
  */
349
347
  handleEvent(frame) {
350
- this.logger.debug('[OpenClawClient] Event:', frame.event);
348
+ frameworkLogger.log('openclaw-client', 'Event:', 'debug', { event: frame.event });
351
349
  // Handle specific events
352
350
  if (frame.event === 'connect.challenge') {
353
- this.logger.info('[OpenClawClient] Received challenge, sending handshake...');
351
+ frameworkLogger.log('openclaw-client', 'Received challenge, sending handshake...', 'info', {});
354
352
  this.sendHandshake();
355
353
  return;
356
354
  }
@@ -375,7 +373,7 @@ export class OpenClawClient {
375
373
  listener(frame.data);
376
374
  }
377
375
  catch (error) {
378
- this.logger.error('[OpenClawClient] Event listener error:', error);
376
+ frameworkLogger.log('openclaw-client', 'Event listener error:', 'error', { error });
379
377
  }
380
378
  }
381
379
  }
@@ -387,7 +385,7 @@ export class OpenClawClient {
387
385
  listener(frame.event, frame.data);
388
386
  }
389
387
  catch (error) {
390
- this.logger.error('[OpenClawClient] All-event listener error:', error);
388
+ frameworkLogger.log('openclaw-client', 'All-event listener error:', 'error', { error });
391
389
  }
392
390
  }
393
391
  }
@@ -422,12 +420,12 @@ export class OpenClawClient {
422
420
  const delay = this.config.reconnectDelay * Math.pow(2, this.reconnectAttempts - 1);
423
421
  const maxDelay = 30000;
424
422
  const actualDelay = Math.min(delay, maxDelay);
425
- this.logger.info(`[OpenClawClient] Scheduling reconnect attempt ${this.reconnectAttempts}/${this.config.reconnectAttempts} in ${actualDelay}ms`);
423
+ frameworkLogger.log('openclaw-client', `Scheduling reconnect attempt ${this.reconnectAttempts}/${this.config.reconnectAttempts} in ${actualDelay}ms`, 'info', {});
426
424
  this.setState('reconnecting');
427
425
  this.reconnectTimeout = setTimeout(() => {
428
426
  this.reconnectTimeout = null;
429
427
  this.connect().catch((error) => {
430
- this.logger.error('[OpenClawClient] Reconnection failed:', error);
428
+ frameworkLogger.log('openclaw-client', 'Reconnection failed:', 'error', { error });
431
429
  });
432
430
  }, actualDelay);
433
431
  }
@@ -448,14 +446,14 @@ export class OpenClawClient {
448
446
  const previousState = this.state;
449
447
  this.state = newState;
450
448
  if (previousState !== newState) {
451
- this.logger.info(`[OpenClawClient] State: ${previousState} → ${newState}`);
449
+ frameworkLogger.log('openclaw-client', `State: ${previousState} → ${newState}`, 'info', {});
452
450
  // Notify state listeners
453
451
  for (const listener of this.stateListeners) {
454
452
  try {
455
453
  listener(newState, previousState);
456
454
  }
457
455
  catch (error) {
458
- this.logger.error('[OpenClawClient] State listener error:', error);
456
+ frameworkLogger.log('openclaw-client', 'State listener error:', 'error', { error });
459
457
  }
460
458
  }
461
459
  }
@@ -46,7 +46,6 @@ export declare class OpenClawHooksManager {
46
46
  private initialized;
47
47
  private toolBeforeCallbacks;
48
48
  private toolAfterCallbacks;
49
- private logger;
50
49
  private eventQueue;
51
50
  private maxQueueSize;
52
51
  private isFlushing;