0xray 2.1.2 → 2.1.3

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 +26 -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
@@ -268,4 +268,4 @@ export class XrayContextLoader {
268
268
  */
269
269
  export const xrayContextLoader = XrayContextLoader.getInstance();
270
270
  // Backward compat alias
271
- export { xrayContextLoader as strRayContextLoader, XrayContextLoader as StringRayContextLoader };
271
+ export { xrayContextLoader as strRayContextLoader };
@@ -0,0 +1,3 @@
1
+ export declare function logAndReturn<T = never>(logger: any, component: string, message: string, error: unknown, returnValue: T): T;
2
+ export declare function logWarning(logger: any, component: string, message: string, details?: Record<string, unknown>): void;
3
+ export declare function logInfo(logger: any, component: string, message: string, details?: Record<string, unknown>): void;
@@ -0,0 +1,10 @@
1
+ export function logAndReturn(logger, component, message, error, returnValue) {
2
+ logger.log(component, message, "error", { error: error instanceof Error ? error.message : String(error) }).catch(() => { });
3
+ return returnValue;
4
+ }
5
+ export function logWarning(logger, component, message, details) {
6
+ logger.log(component, message, "warning", details).catch(() => { });
7
+ }
8
+ export function logInfo(logger, component, message, details) {
9
+ logger.log(component, message, "info", details).catch(() => { });
10
+ }
@@ -286,7 +286,7 @@ export class FeaturesConfigLoader {
286
286
  */
287
287
  getDefaultConfig() {
288
288
  return {
289
- version: "2.0.1",
289
+ version: "2.1.1",
290
290
  description: "0xRay Framework - Unified Feature Configuration",
291
291
  token_optimization: {
292
292
  enabled: true,
@@ -43,7 +43,7 @@ export declare class JobContext {
43
43
  * Log job completion with diagnostic info
44
44
  * Enhanced with outcome and complexity accuracy tracking
45
45
  */
46
- complete(success?: boolean, details?: any): Promise<void>;
46
+ complete(success?: boolean, details?: Record<string, unknown>): Promise<void>;
47
47
  }
48
48
  export interface FrameworkLogEntry {
49
49
  timestamp: number;
@@ -56,7 +56,7 @@ export interface FrameworkLogEntry {
56
56
  traceId?: string;
57
57
  spanId?: string;
58
58
  parentSpanId?: string;
59
- details?: any;
59
+ details?: Record<string, unknown>;
60
60
  }
61
61
  export declare class FrameworkUsageLogger {
62
62
  private logs;
@@ -66,7 +66,7 @@ export declare class FrameworkUsageLogger {
66
66
  private flushing;
67
67
  private readonly FLUSH_INTERVAL_MS;
68
68
  private readonly MAX_BUFFER_SIZE;
69
- log(component: string, action: string, status: LogStatus, details?: any, sessionId?: string, jobId?: string): Promise<void>;
69
+ log(component: string, action: string, status: LogStatus, details?: Record<string, unknown>, sessionId?: string, jobId?: string): Promise<void>;
70
70
  private bufferEntry;
71
71
  private flushBuffer;
72
72
  getRecentLogs(count?: number): FrameworkLogEntry[];
@@ -75,21 +75,21 @@ export function withJobContext(operation, jobId) {
75
75
  if (result instanceof Promise) {
76
76
  return result.finally(async () => {
77
77
  // Auto-complete job on operation finish
78
- await jobContext.complete(true).catch(() => { });
78
+ await jobContext.complete(true);
79
79
  // Restore original context
80
80
  currentJobContext = originalContext;
81
81
  });
82
82
  }
83
83
  else {
84
84
  // Sync operation - complete immediately
85
- jobContext.complete(true).catch(() => { });
85
+ jobContext.complete(true);
86
86
  currentJobContext = originalContext;
87
87
  return Promise.resolve(result);
88
88
  }
89
89
  }
90
90
  catch (error) {
91
91
  // Error occurred - complete job with failure
92
- jobContext.complete(false, { error: String(error) }).catch(() => { });
92
+ jobContext.complete(false, { error: String(error) });
93
93
  currentJobContext = originalContext;
94
94
  throw error;
95
95
  }
@@ -204,7 +204,7 @@ export class FrameworkUsageLogger {
204
204
  ...(currentTraceId && { traceId: currentTraceId }),
205
205
  ...(currentSpanId && { spanId: currentSpanId }),
206
206
  ...(currentParentSpanId && { parentSpanId: currentParentSpanId }),
207
- details,
207
+ ...(details !== undefined && { details }),
208
208
  };
209
209
  this.logs.push(entry);
210
210
  if (this.logs.length > this.maxLogs) {
@@ -212,7 +212,7 @@ export class FrameworkUsageLogger {
212
212
  }
213
213
  this.bufferEntry(entry);
214
214
  }
215
- bufferEntry(entry) {
215
+ async bufferEntry(entry) {
216
216
  const jobIdPart = entry.jobId ? `[${entry.jobId}] ` : "";
217
217
  const tracePart = entry.traceId ? `[${entry.traceId}.${entry.spanId}] ` : "";
218
218
  const detailsPart = entry.details
@@ -226,7 +226,7 @@ export class FrameworkUsageLogger {
226
226
  const line = `${new Date(entry.timestamp).toISOString()} ${jobIdPart}${tracePart}[${entry.component}] ${entry.action} - ${entry.status.toUpperCase()}${detailsPart}\n`;
227
227
  this.buffer.push(line);
228
228
  if (this.buffer.length >= this.MAX_BUFFER_SIZE) {
229
- this.flushBuffer();
229
+ await this.flushBuffer();
230
230
  return;
231
231
  }
232
232
  if (!this.flushTimer) {
@@ -247,17 +247,21 @@ export class FrameworkUsageLogger {
247
247
  const data = toWrite.join("");
248
248
  try {
249
249
  const cwd = process.cwd();
250
- if (!cwd)
250
+ if (!cwd) {
251
+ this.flushing = false;
251
252
  return;
253
+ }
252
254
  const logDir = join(cwd, "logs", "framework");
253
255
  const logFile = join(logDir, "activity.log");
254
256
  if (!existsSync(logDir)) {
255
257
  mkdirSync(logDir, { recursive: true });
256
258
  }
257
- await fs.appendFile(logFile, data).catch(() => { });
258
- this.flushing = false;
259
+ await fs.appendFile(logFile, data);
259
260
  }
260
261
  catch {
262
+ // flush failure is non-fatal
263
+ }
264
+ finally {
261
265
  this.flushing = false;
262
266
  }
263
267
  }
@@ -273,3 +277,7 @@ export class FrameworkUsageLogger {
273
277
  }
274
278
  }
275
279
  export const frameworkLogger = new FrameworkUsageLogger();
280
+ // Startup self-test: verify logger works
281
+ if (typeof process !== "undefined" && process.env?.NODE_ENV !== "test") {
282
+ frameworkLogger.log("system", "logger initialized", "info").catch(() => { });
283
+ }
@@ -1,5 +1,5 @@
1
1
  export { KernelOrchestrator } from "./orchestrator.js";
2
- export { defaultXrayConfig, defaultXrayConfig as defaultStringRayConfig } from "./xray-activation.js";
3
- export { getConfigDir, resolveConfigPath, resolveStateDir, resolveProfilesDir, resolveCodexPath, resolveLogDir, resetConfigDirCache, STRRAY_CONFIG_DIR_ENV, } from "./config-paths.js";
2
+ export { defaultXrayConfig } from "./xray-activation.js";
3
+ export { getConfigDir, resolveConfigPath, resolveStateDir, resolveProfilesDir, resolveCodexPath, resolveLogDir, resetConfigDirCache, XRAY_CONFIG_DIR_ENV, } from "./config-paths.js";
4
4
  export { formatCodexPrompt, formatMinimalCodexPrompt, getCodexConfig, findCodexPath, loadCodex, BUILTIN_CODEX, } from "./codex-formatter.js";
5
5
  export type { CodexTerm, CodexConfig, FormatOptions, FormatResult, } from "./codex-formatter.js";
@@ -1,6 +1,8 @@
1
1
  export { KernelOrchestrator } from "./orchestrator.js";
2
- export { defaultXrayConfig, defaultXrayConfig as defaultStringRayConfig } from "./xray-activation.js"; // consumer runtime compat from prior StringRay releases (1-line min per Scope Rule)
2
+ export { defaultXrayConfig } from "./xray-activation.js";
3
3
  // Decoupled config path resolution (Layer 1)
4
- export { getConfigDir, resolveConfigPath, resolveStateDir, resolveProfilesDir, resolveCodexPath, resolveLogDir, resetConfigDirCache, STRRAY_CONFIG_DIR_ENV, } from "./config-paths.js";
4
+ export { getConfigDir, resolveConfigPath, resolveStateDir, resolveProfilesDir, resolveCodexPath, resolveLogDir, resetConfigDirCache, XRAY_CONFIG_DIR_ENV,
5
+ // STRRAY_CONFIG_DIR_ENV (legacy export for compat shims)
6
+ } from "./config-paths.js";
5
7
  // Standalone codex formatter (Layer 2)
6
8
  export { formatCodexPrompt, formatMinimalCodexPrompt, getCodexConfig, findCodexPath, loadCodex, BUILTIN_CODEX, } from "./codex-formatter.js";
@@ -1,3 +1,4 @@
1
+ import type { LogStatus } from "./framework-logger.js";
1
2
  export interface LoggingConfig {
2
3
  enabled: boolean;
3
4
  level: "debug" | "info" | "warn" | "error";
@@ -7,4 +8,4 @@ export interface LoggingConfig {
7
8
  export declare function getLoggingConfig(): LoggingConfig;
8
9
  export declare function setLoggingConfig(config: Partial<LoggingConfig>): void;
9
10
  export declare function isLoggingEnabled(): boolean;
10
- export declare function shouldLog(level: string): boolean;
11
+ export declare function shouldLog(level: LogStatus): boolean;
@@ -1,9 +1,9 @@
1
1
  // Default logging configuration
2
2
  const defaultLoggingConfig = {
3
- enabled: process.env.STRRAY_LOGGING_ENABLED !== "false", // Default true, can be disabled
4
- level: process.env.STRRAY_LOG_LEVEL || "info",
3
+ enabled: (process.env.XRAY_LOGGING_ENABLED) !== "false", // Default true, can be disabled
4
+ level: (process.env.XRAY_LOG_LEVEL) || "info",
5
5
  destinations: ["console", "file"],
6
- performanceMode: process.env.STRRAY_PERFORMANCE_MODE === "true",
6
+ performanceMode: (process.env.XRAY_PERFORMANCE_MODE) === "true",
7
7
  };
8
8
  // Available log levels in priority order (higher index = more verbose)
9
9
  const LOG_LEVELS = ["debug", "info", "warn", "error"];
@@ -32,12 +32,12 @@ export function shouldLog(level) {
32
32
  return messageLevelIndex >= currentLevelIndex;
33
33
  }
34
34
  // Environment variable configuration
35
- if (process.env.STRRAY_LOGGING_ENABLED === "false") {
35
+ if ((process.env.XRAY_LOGGING_ENABLED) === "false") {
36
36
  setLoggingConfig({ enabled: false });
37
37
  }
38
- if (process.env.STRRAY_LOG_LEVEL) {
39
- setLoggingConfig({ level: process.env.STRRAY_LOG_LEVEL });
38
+ if (process.env.XRAY_LOG_LEVEL) {
39
+ setLoggingConfig({ level: (process.env.XRAY_LOG_LEVEL) });
40
40
  }
41
- if (process.env.STRRAY_PERFORMANCE_MODE === "true") {
41
+ if ((process.env.XRAY_PERFORMANCE_MODE) === "true") {
42
42
  setLoggingConfig({ performanceMode: true });
43
43
  }
@@ -36,7 +36,7 @@ export class CodexLoader extends BaseLoader {
36
36
  const candidates = resolveCodexPath();
37
37
  const found = candidates.find((p) => existsSync(p));
38
38
  // Fallback to primary path even if not found yet
39
- return found ?? candidates[0] ?? this.resolvePath(".opencode/xray/codex.json");
39
+ return found ?? candidates[0] ?? this.resolvePath("xray/codex.json");
40
40
  }
41
41
  /**
42
42
  * Check if codex.json exists.
@@ -17,7 +17,7 @@ import { getConfigDir } from "../core/config-paths.js";
17
17
  let opencodeAvailable = null;
18
18
  export async function invokeViaOpencode(agentName, prompt, projectRoot = process.cwd()) {
19
19
  // In pure MCP mode we must never reach here
20
- if (process.env.STRRAY_FORCE_MCP_GOVERNANCE === "true") {
20
+ if ((process.env.XRAY_FORCE_MCP_GOVERNANCE) === "true") {
21
21
  throw new Error(`[PURE MCP] invokeViaOpencode called for "${agentName}" — this path is forbidden.`);
22
22
  }
23
23
  // GATE: Centralized spawn gate — blocks all agent spawning by default
@@ -79,7 +79,7 @@ export async function invokeViaOpencode(agentName, prompt, projectRoot = process
79
79
  settled = true;
80
80
  child.kill("SIGKILL");
81
81
  if (trackingId) {
82
- agentSpawnGovernor.failSpawn(trackingId, new Error(`opencode ${agentName} timed out`)).catch(() => { });
82
+ agentSpawnGovernor.failSpawn(trackingId, new Error(`opencode ${agentName} timed out`)).catch((err) => frameworkLogger.log("opencode-cli-invoker", "spawn-governor-error", "error", { error: String(err) }));
83
83
  }
84
84
  reject(new Error(`opencode ${agentName} timed out`));
85
85
  }
@@ -103,7 +103,7 @@ export async function invokeViaOpencode(agentName, prompt, projectRoot = process
103
103
  settled = true;
104
104
  if (code === 0 && stdout.trim()) {
105
105
  if (trackingId) {
106
- await agentSpawnGovernor.completeSpawn(trackingId, true).catch(() => { });
106
+ await agentSpawnGovernor.completeSpawn(trackingId, true).catch((err) => frameworkLogger.log("opencode-cli-invoker", "spawn-governor-error", "error", { error: String(err) }));
107
107
  }
108
108
  frameworkLogger.log("inference-cycle", "opencode-spawn-success", "info", { agentName, trackingId });
109
109
  const textResponse = extractTextFromNdjson(stdout.trim());
@@ -117,7 +117,7 @@ export async function invokeViaOpencode(agentName, prompt, projectRoot = process
117
117
  else {
118
118
  const error = new Error(`${agentName} exited ${code}`);
119
119
  if (trackingId) {
120
- await agentSpawnGovernor.failSpawn(trackingId, error).catch(() => { });
120
+ await agentSpawnGovernor.failSpawn(trackingId, error).catch((err) => frameworkLogger.log("opencode-cli-invoker", "spawn-governor-error", "error", { error: String(err) }));
121
121
  }
122
122
  frameworkLogger.log("inference-cycle", "opencode-spawn-failed", "error", { agentName, trackingId, code });
123
123
  reject(error);
@@ -128,7 +128,7 @@ export async function invokeViaOpencode(agentName, prompt, projectRoot = process
128
128
  if (!settled) {
129
129
  settled = true;
130
130
  if (trackingId) {
131
- await agentSpawnGovernor.failSpawn(trackingId, err).catch(() => { });
131
+ await agentSpawnGovernor.failSpawn(trackingId, err).catch((e) => frameworkLogger.log("opencode-cli-invoker", "spawn-governor-error", "error", { error: String(e) }));
132
132
  }
133
133
  frameworkLogger.log("inference-cycle", "opencode-spawn-error", "error", { agentName, trackingId, error: err.message });
134
134
  reject(err);
@@ -39,7 +39,7 @@ export class GovernanceService {
39
39
  */
40
40
  async govern(request) {
41
41
  const { proposals, context, options } = request;
42
- const requireExternal = options?.requireExternalDynamo ?? true;
42
+ const requireExternal = options?.requireExternalDynamo ?? !process.env.XRAY_LOCAL_MODE;
43
43
  const timeoutMs = options?.timeoutMs ?? 90000;
44
44
  const maxAbstentionThreshold = options?.maxAbstentionThreshold ?? 1.0;
45
45
  frameworkLogger.log('governance-service', 'govern-start', 'info', {
package/dist/index.d.ts CHANGED
@@ -4,13 +4,13 @@
4
4
  * This is the main entry point for the 0xRay framework.
5
5
  * It exports the core initialization function and key components.
6
6
  */
7
- export { XrayOrchestrator, XrayOrchestrator as StringRayOrchestrator } from "./orchestrator/orchestrator.js";
8
- export { XrayStateManager, XrayStateManager as StringRayStateManager } from "./state/index.js";
7
+ export { XrayOrchestrator } from "./orchestrator/orchestrator.js";
8
+ export { XrayStateManager } from "./state/index.js";
9
9
  export { AgentDelegator } from "./delegation/index.js";
10
10
  export { frameworkLogger } from "./core/framework-logger.js";
11
11
  export { BUILTIN_CODEX } from "./core/codex-formatter.js";
12
12
  import { defaultXrayConfig } from "./core/index.js";
13
- export { defaultXrayConfig, defaultXrayConfig as defaultStringRayConfig };
13
+ export { defaultXrayConfig };
14
14
  export { OpenClawIntegration, initializeOpenClawIntegration, getOpenClawIntegration, shutdownOpenClawIntegration } from "./integrations/openclaw/index.js";
15
15
  export type { OpenClawIntegrationConfig } from "./integrations/openclaw/types.js";
16
16
  export declare function initializeXray(config?: {}): {
package/dist/index.js CHANGED
@@ -4,13 +4,13 @@
4
4
  * This is the main entry point for the 0xRay framework.
5
5
  * It exports the core initialization function and key components.
6
6
  */
7
- export { XrayOrchestrator, XrayOrchestrator as StringRayOrchestrator } from "./orchestrator/orchestrator.js";
8
- export { XrayStateManager, XrayStateManager as StringRayStateManager } from "./state/index.js";
7
+ export { XrayOrchestrator } from "./orchestrator/orchestrator.js";
8
+ export { XrayStateManager } from "./state/index.js";
9
9
  export { AgentDelegator } from "./delegation/index.js";
10
10
  export { frameworkLogger } from "./core/framework-logger.js";
11
11
  export { BUILTIN_CODEX } from "./core/codex-formatter.js";
12
12
  import { defaultXrayConfig } from "./core/index.js";
13
- export { defaultXrayConfig, defaultXrayConfig as defaultStringRayConfig };
13
+ export { defaultXrayConfig };
14
14
  export { OpenClawIntegration, initializeOpenClawIntegration, getOpenClawIntegration, shutdownOpenClawIntegration } from "./integrations/openclaw/index.js";
15
15
  // Main initialization function
16
16
  export function initializeXray(config = {}) {
@@ -75,7 +75,7 @@ export declare class InferenceCycle {
75
75
  private governProposalsInternal;
76
76
  /**
77
77
  * Pure individual knowledge-skill MCP path for governance.
78
- * Used when STRRAY_FORCE_MCP_GOVERNANCE=true.
78
+ * Used when XRAY_FORCE_MCP_GOVERNANCE=true.
79
79
  * Each proposal is evaluated directly by the relevant skill servers using analyze_proposal.
80
80
  */
81
81
  private governProposalsWithIndividualSkills;
@@ -328,7 +328,7 @@ export class InferenceCycle {
328
328
  try {
329
329
  let agentName = p.type === "refactor" ? "refactorer" : "code-reviewer";
330
330
  // In pure MCP mode, use real skill server names so the orchestrator dispatches to actual MCP tools
331
- if (process.env.STRRAY_FORCE_MCP_GOVERNANCE === 'true') {
331
+ if ((process.env.XRAY_FORCE_MCP_GOVERNANCE) === 'true') {
332
332
  agentName = p.type === "refactor" ? "refactoring-strategies" : "code-review";
333
333
  }
334
334
  await this.invokeAgentInternal(agentName, prompt);
@@ -353,11 +353,11 @@ export class InferenceCycle {
353
353
  ``,
354
354
  `1. Read the relevant source files`,
355
355
  `2. Add the missing guard, validation, or edge case handling`,
356
- `3. If this is a codex rule, add the term to .opencode/xray/codex.json`,
356
+ `3. If this is a codex rule, add the term to xray/codex.json`,
357
357
  `4. Make minimal, surgical changes`,
358
358
  ].join("\n");
359
359
  try {
360
- const agentName = process.env.STRRAY_FORCE_MCP_GOVERNANCE === 'true'
360
+ const agentName = (process.env.XRAY_FORCE_MCP_GOVERNANCE) === 'true'
361
361
  ? "code-review"
362
362
  : "code-reviewer";
363
363
  await this.invokeAgentInternal(agentName, prompt);
@@ -388,7 +388,7 @@ export class InferenceCycle {
388
388
  `3. Implement it if straightforward, otherwise describe the design`,
389
389
  ].join("\n");
390
390
  try {
391
- const agentName = process.env.STRRAY_FORCE_MCP_GOVERNANCE === 'true'
391
+ const agentName = (process.env.XRAY_FORCE_MCP_GOVERNANCE) === 'true'
392
392
  ? "architecture-patterns"
393
393
  : "architect";
394
394
  await this.invokeAgentInternal(agentName, prompt);
@@ -455,7 +455,7 @@ Respond with EXACTLY one of:
455
455
  async governProposals(proposals) {
456
456
  // Primary path: Use the first-class Governance MCP (real skill servers + required Dynamo)
457
457
  // This is the clean, centralized path (governance.server.ts + GovernanceService)
458
- const useGovernanceMcp = process.env.STRRAY_FORCE_MCP_GOVERNANCE === 'true' ||
458
+ const useGovernanceMcp = (process.env.XRAY_FORCE_MCP_GOVERNANCE) === 'true' ||
459
459
  this.isGovernanceMcpPreferred();
460
460
  if (useGovernanceMcp) {
461
461
  try {
@@ -488,7 +488,7 @@ Respond with EXACTLY one of:
488
488
  error: err instanceof Error ? err.message : String(err),
489
489
  });
490
490
  // In forced pure MCP mode we must not silently fall back
491
- if (process.env.STRRAY_FORCE_MCP_GOVERNANCE === 'true') {
491
+ if (process.env.XRAY_FORCE_MCP_GOVERNANCE === 'true') {
492
492
  throw err;
493
493
  }
494
494
  // In normal mode, fall back to legacy path with deprecation warning.
@@ -552,7 +552,7 @@ Respond with EXACTLY one of:
552
552
  */
553
553
  async governProposalsInternal(proposals) {
554
554
  // Defensive: if pure MCP mode is forced, use individual skill servers only
555
- if (process.env.STRRAY_FORCE_MCP_GOVERNANCE === 'true') {
555
+ if ((process.env.XRAY_FORCE_MCP_GOVERNANCE) === 'true') {
556
556
  return this.governProposalsWithIndividualSkills(proposals);
557
557
  }
558
558
  const coordinator = this.getCoordinator();
@@ -633,7 +633,7 @@ Respond with EXACTLY one of:
633
633
  }
634
634
  /**
635
635
  * Pure individual knowledge-skill MCP path for governance.
636
- * Used when STRRAY_FORCE_MCP_GOVERNANCE=true.
636
+ * Used when XRAY_FORCE_MCP_GOVERNANCE=true.
637
637
  * Each proposal is evaluated directly by the relevant skill servers using analyze_proposal.
638
638
  */
639
639
  async governProposalsWithIndividualSkills(proposals) {
@@ -801,7 +801,7 @@ Respond with EXACTLY one of:
801
801
  responseText = JSON.stringify(result);
802
802
  }
803
803
  // In pure MCP governance mode, trust the orchestrator response (it now does real work)
804
- const isPureMcp = process.env.STRRAY_FORCE_MCP_GOVERNANCE === 'true';
804
+ const isPureMcp = (process.env.XRAY_FORCE_MCP_GOVERNANCE) === 'true';
805
805
  const hasRealContent = /PROPOSAL:\s*\d+/i.test(responseText) ||
806
806
  /DECISION:\s*(approve|reject|abstain)/i.test(responseText) ||
807
807
  /Agent Outputs \(real MCP responses\):/i.test(responseText);
@@ -830,7 +830,7 @@ Respond with EXACTLY one of:
830
830
  return this.agentInvoker(agentName, prompt);
831
831
  }
832
832
  // Only fall back to OpenCode if not in forced pure MCP mode
833
- if (process.env.STRRAY_FORCE_MCP_GOVERNANCE === 'true') {
833
+ if ((process.env.XRAY_FORCE_MCP_GOVERNANCE) === 'true') {
834
834
  throw new Error(`[PURE MCP] Orchestrator returned no usable response for agent "${agentName}" and OpenCode fallback is disabled`);
835
835
  }
836
836
  return this.invokeViaOpencode(agentName, prompt);
@@ -315,7 +315,7 @@ export class BaseIntegration extends EventEmitter {
315
315
  version: this.version,
316
316
  status: this._status,
317
317
  jobId: this.jobId,
318
- }, this.jobId);
318
+ }, undefined, this.jobId);
319
319
  }
320
320
  catch {
321
321
  // Silent fail - logging should never break application
@@ -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;