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.
- package/.opencode/codex.codex +1 -1
- package/.opencode/commands/dependency-audit.md +3 -3
- package/.opencode/enforcer-config.json +2 -2
- package/AGENTS.md +2 -1
- package/README.md +12 -11
- package/dist/AGENTS.md +2 -1
- package/dist/CHANGELOG.md +38 -0
- package/dist/README.md +12 -11
- package/dist/agents/code-reviewer.js +1 -1
- package/dist/analytics/routing-refiner.js +1 -1
- package/dist/cli/index.js +11 -1
- package/dist/cli/server.js +3 -3
- package/dist/core/activity-logger.d.ts +2 -2
- package/dist/core/activity-logger.js +4 -4
- package/dist/core/boot-orchestrator.d.ts +1 -1
- package/dist/core/boot-orchestrator.js +13 -28
- package/dist/core/bridge.mjs +3 -3
- package/dist/core/codex-formatter.js +2 -2
- package/dist/core/codex-injector.d.ts +0 -1
- package/dist/core/codex-injector.js +2 -3
- package/dist/core/config-loader.d.ts +1 -1
- package/dist/core/config-loader.js +1 -1
- package/dist/core/config-paths.d.ts +0 -2
- package/dist/core/config-paths.js +7 -8
- package/dist/core/context-loader.d.ts +1 -1
- package/dist/core/context-loader.js +1 -1
- package/dist/core/errors.d.ts +3 -0
- package/dist/core/errors.js +10 -0
- package/dist/core/features-config.js +1 -1
- package/dist/core/framework-logger.d.ts +3 -3
- package/dist/core/framework-logger.js +17 -9
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.js +4 -2
- package/dist/core/logging-config.d.ts +2 -1
- package/dist/core/logging-config.js +7 -7
- package/dist/enforcement/loaders/codex-loader.js +1 -1
- package/dist/execution/opencode-cli-invoker.js +5 -5
- package/dist/governance/governance-service.js +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/dist/inference/inference-cycle.d.ts +1 -1
- package/dist/inference/inference-cycle.js +10 -10
- package/dist/integrations/base/Integration.js +1 -1
- package/dist/integrations/base/registry.js +19 -19
- package/dist/integrations/grok/grok-cli.js +17 -17
- package/dist/integrations/grok/hooks/pre-tool-use.js +1 -1
- package/dist/integrations/hermes-agent/bridge.mjs +1 -1
- package/dist/integrations/openclaw/api-server.d.ts +0 -1
- package/dist/integrations/openclaw/api-server.js +7 -10
- package/dist/integrations/openclaw/client.d.ts +0 -1
- package/dist/integrations/openclaw/client.js +22 -24
- package/dist/integrations/openclaw/hooks/xray-hooks.d.ts +0 -1
- package/dist/integrations/openclaw/hooks/xray-hooks.js +17 -18
- package/dist/integrations/plugins/plugin-registry.js +5 -5
- package/dist/mcps/architect-tools.server.d.ts +2 -4
- package/dist/mcps/architect-tools.server.js +112 -195
- package/dist/mcps/auto-format.server.d.ts +2 -4
- package/dist/mcps/auto-format.server.js +49 -95
- package/dist/mcps/boot-orchestrator.server.d.ts +2 -4
- package/dist/mcps/boot-orchestrator.server.js +73 -105
- package/dist/mcps/config/server-config-registry.js +3 -3
- package/dist/mcps/enforcer-tools.server.d.ts +2 -4
- package/dist/mcps/enforcer-tools.server.js +202 -285
- package/dist/mcps/estimation.server.d.ts +2 -4
- package/dist/mcps/estimation.server.js +63 -107
- package/dist/mcps/framework-compliance-audit.server.d.ts +2 -4
- package/dist/mcps/framework-compliance-audit.server.js +53 -82
- package/dist/mcps/framework-help.server.d.ts +2 -4
- package/dist/mcps/framework-help.server.js +63 -101
- package/dist/mcps/governance.server.js +2 -2
- package/dist/mcps/knowledge-skills/api-design.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/api-design.server.js +35 -67
- package/dist/mcps/knowledge-skills/architecture-patterns.server.d.ts +2 -10
- package/dist/mcps/knowledge-skills/architecture-patterns.server.js +35 -74
- package/dist/mcps/knowledge-skills/bug-triage-specialist.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +143 -162
- package/dist/mcps/knowledge-skills/code-analyzer.server.d.ts +3 -4
- package/dist/mcps/knowledge-skills/code-analyzer.server.js +20 -45
- package/dist/mcps/knowledge-skills/code-review.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/code-review.server.js +109 -143
- package/dist/mcps/knowledge-skills/content-creator.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/content-creator.server.js +205 -226
- package/dist/mcps/knowledge-skills/database-design.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/database-design.server.js +117 -151
- package/dist/mcps/knowledge-skills/devops-deployment.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/devops-deployment.server.js +71 -160
- package/dist/mcps/knowledge-skills/git-workflow.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/git-workflow.server.js +36 -68
- package/dist/mcps/knowledge-skills/growth-strategist.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/growth-strategist.server.js +303 -324
- package/dist/mcps/knowledge-skills/log-monitor.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/log-monitor.server.js +141 -160
- package/dist/mcps/knowledge-skills/mobile-development.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/mobile-development.server.js +92 -209
- package/dist/mcps/knowledge-skills/multimodal-looker.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/multimodal-looker.server.js +123 -159
- package/dist/mcps/knowledge-skills/performance-optimization.server.d.ts +2 -5
- package/dist/mcps/knowledge-skills/performance-optimization.server.js +155 -296
- package/dist/mcps/knowledge-skills/project-analysis.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/project-analysis.server.js +75 -226
- package/dist/mcps/knowledge-skills/refactoring-strategies.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +63 -156
- package/dist/mcps/knowledge-skills/security-audit.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/security-audit.server.js +102 -136
- package/dist/mcps/knowledge-skills/seo-consultant.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/seo-consultant.server.js +80 -203
- package/dist/mcps/knowledge-skills/session-management.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/session-management.server.js +50 -203
- package/dist/mcps/knowledge-skills/skill-invocation.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/skill-invocation.server.js +168 -347
- package/dist/mcps/knowledge-skills/strategist.server.d.ts +2 -11
- package/dist/mcps/knowledge-skills/strategist.server.js +72 -122
- package/dist/mcps/knowledge-skills/tech-writer.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/tech-writer.server.js +87 -300
- package/dist/mcps/knowledge-skills/testing-best-practices.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/testing-best-practices.server.js +147 -182
- package/dist/mcps/knowledge-skills/testing-strategy.server.d.ts +2 -4
- package/dist/mcps/knowledge-skills/testing-strategy.server.js +78 -153
- package/dist/mcps/knowledge-skills/ui-ux-design.server.d.ts +2 -5
- package/dist/mcps/knowledge-skills/ui-ux-design.server.js +90 -399
- package/dist/mcps/lint.server.d.ts +2 -4
- package/dist/mcps/lint.server.js +51 -92
- package/dist/mcps/mcp-client.js +2 -2
- package/dist/mcps/model-health-check.server.d.ts +2 -4
- package/dist/mcps/model-health-check.server.js +32 -60
- package/dist/mcps/performance-analysis.server.d.ts +2 -4
- package/dist/mcps/performance-analysis.server.js +57 -88
- package/dist/mcps/processor-pipeline.server.d.ts +2 -4
- package/dist/mcps/processor-pipeline.server.js +69 -100
- package/dist/mcps/registry.json +1 -1
- package/dist/mcps/researcher.server.d.ts +3 -5
- package/dist/mcps/researcher.server.js +81 -154
- package/dist/mcps/security-scan.server.d.ts +2 -4
- package/dist/mcps/security-scan.server.js +54 -96
- package/dist/mcps/shared/knowledge-skill-base.d.ts +14 -0
- package/dist/mcps/shared/knowledge-skill-base.js +45 -0
- package/dist/{security → mcps/shared}/security-scanner.js +1 -1
- package/dist/mcps/state-manager.server.d.ts +2 -4
- package/dist/mcps/state-manager.server.js +115 -160
- package/dist/orchestrator/orchestrator.d.ts +1 -1
- package/dist/orchestrator/orchestrator.js +1 -1
- package/dist/orchestrator/universal-registry-bridge.js +1 -1
- package/dist/plugin/xray-codex-injection.d.ts +1 -1
- package/dist/plugin/xray-codex-injection.js +1 -1
- package/dist/postprocessor/PostProcessor.d.ts +4 -44
- package/dist/postprocessor/PostProcessor.js +39 -553
- package/dist/postprocessor/analysis/CodeChangeAnalyzer.d.ts +11 -0
- package/dist/postprocessor/analysis/CodeChangeAnalyzer.js +50 -0
- package/dist/postprocessor/compliance/ArchitecturalComplianceChecker.d.ts +11 -0
- package/dist/postprocessor/compliance/ArchitecturalComplianceChecker.js +356 -0
- package/dist/postprocessor/config/ProcessorConfigLoader.d.ts +44 -0
- package/dist/postprocessor/config/ProcessorConfigLoader.js +21 -0
- package/dist/postprocessor/reporting/PostProcessorReporter.d.ts +19 -0
- package/dist/postprocessor/reporting/PostProcessorReporter.js +96 -0
- package/dist/postprocessor/triggers/GitHookTrigger.js +11 -11
- package/dist/processors/implementations/refactoring-logging-processor-wrapper.d.ts +32 -0
- package/dist/processors/implementations/refactoring-logging-processor-wrapper.js +95 -1
- package/dist/processors/processor-manager.js +346 -314
- package/dist/reporting/report-formatter.js +1 -1
- package/dist/security/security-hardener.d.ts +69 -2
- package/dist/security/security-hardener.js +129 -1
- package/dist/skills/registry.json +1 -1
- package/dist/state/index.d.ts +3 -5
- package/dist/state/index.js +1 -7
- package/dist/state/state-manager.d.ts +1 -1
- package/dist/state/state-manager.js +2 -3
- package/package.json +13 -10
- package/scripts/node/universal-version-manager.js +11 -11
- package/src/mcps/architect-tools.server.ts +112 -215
- package/src/mcps/auto-format.server.ts +50 -110
- package/src/mcps/boot-orchestrator.server.ts +75 -121
- package/src/mcps/config/__tests__/server-config-registry.test.ts +21 -12
- package/src/mcps/config/server-config-registry.ts +3 -3
- package/src/mcps/enforcer-tools.server.ts +212 -310
- package/src/mcps/estimation.server.ts +62 -122
- package/src/mcps/framework-compliance-audit.server.ts +52 -97
- package/src/mcps/framework-help.server.ts +64 -114
- package/src/mcps/governance.server.ts +2 -2
- package/src/mcps/knowledge-skills/api-design.server.ts +32 -77
- package/src/mcps/knowledge-skills/architecture-patterns.server.ts +31 -87
- package/src/mcps/knowledge-skills/bug-triage-specialist.server.ts +165 -193
- package/src/mcps/knowledge-skills/code-analyzer.server.ts +20 -55
- package/src/mcps/knowledge-skills/code-review.server.ts +114 -161
- package/src/mcps/knowledge-skills/content-creator.server.ts +218 -255
- package/src/mcps/knowledge-skills/database-design.server.ts +118 -165
- package/src/mcps/knowledge-skills/devops-deployment.server.ts +67 -172
- package/src/mcps/knowledge-skills/git-workflow.server.ts +32 -77
- package/src/mcps/knowledge-skills/growth-strategist.server.ts +324 -361
- package/src/mcps/knowledge-skills/log-monitor.server.ts +160 -187
- package/src/mcps/knowledge-skills/mobile-development.server.ts +89 -223
- package/src/mcps/knowledge-skills/multimodal-looker.server.ts +128 -175
- package/src/mcps/knowledge-skills/performance-optimization.server.ts +156 -329
- package/src/mcps/knowledge-skills/project-analysis.server.ts +72 -248
- package/src/mcps/knowledge-skills/refactoring-strategies.server.ts +59 -171
- package/src/mcps/knowledge-skills/security-audit.server.ts +104 -151
- package/src/mcps/knowledge-skills/seo-consultant.server.ts +80 -220
- package/src/mcps/knowledge-skills/session-management.server.ts +51 -232
- package/src/mcps/knowledge-skills/skill-invocation.server.ts +165 -372
- package/src/mcps/knowledge-skills/strategist.server.ts +72 -143
- package/src/mcps/knowledge-skills/tech-writer.server.ts +85 -350
- package/src/mcps/knowledge-skills/testing-best-practices.server.ts +146 -195
- package/src/mcps/knowledge-skills/testing-strategy.server.ts +75 -161
- package/src/mcps/knowledge-skills/ui-ux-design.server.ts +93 -487
- package/src/mcps/lint.server.ts +53 -107
- package/src/mcps/mcp-client.ts +2 -2
- package/src/mcps/model-health-check.server.ts +34 -71
- package/src/mcps/performance-analysis.server.ts +60 -104
- package/src/mcps/processor-pipeline.server.ts +72 -110
- package/src/mcps/registry.json +1 -1
- package/src/mcps/researcher.server.ts +88 -177
- package/src/mcps/security-scan.server.ts +55 -104
- package/src/mcps/shared/knowledge-skill-base.ts +62 -0
- package/src/mcps/shared/prompt-security-validator.ts +199 -0
- package/src/mcps/shared/security-scanner.ts +599 -0
- package/src/mcps/state-manager.server.ts +117 -175
- package/src/opencode/codex.codex +1 -1
- package/src/opencode/commands/dependency-audit.md +3 -3
- package/src/opencode/enforcer-config.json +2 -2
- package/src/skills/registry.json +1 -1
- package/xray/codex.json +1 -1
- package/xray/config.json +1 -1
- package/xray/features.json +1 -1
- package/xray/integrations.json +3 -3
- package/dist/integrations/hermes-agent/__pycache__/__init__.cpython-313.pyc +0 -0
- package/dist/integrations/hermes-agent/__pycache__/conftest.cpython-313-pytest-9.0.2.pyc +0 -0
- package/dist/integrations/hermes-agent/__pycache__/schemas.cpython-313.pyc +0 -0
- package/dist/integrations/hermes-agent/__pycache__/test_plugin.cpython-313-pytest-9.0.2.pyc +0 -0
- package/dist/integrations/hermes-agent/__pycache__/test_plugin.cpython-313.pyc +0 -0
- package/dist/integrations/hermes-agent/__pycache__/tools.cpython-313.pyc +0 -0
- package/dist/integrations/hermes-agent/conftest.py +0 -14
- package/dist/integrations/hermes-agent/test_plugin.py +0 -1103
- package/dist/processors/implementations/refactoring-logging-processor.d.ts +0 -31
- package/dist/processors/implementations/refactoring-logging-processor.js +0 -96
- package/dist/processors/implementations/session-capture-processor.d.ts +0 -14
- package/dist/processors/implementations/session-capture-processor.js +0 -37
- package/dist/scripts/activate-kernel-pipeline.d.ts +0 -7
- package/dist/scripts/activate-kernel-pipeline.js +0 -101
- package/dist/security/index.d.ts +0 -13
- package/dist/security/index.js +0 -13
- package/dist/security/security-agent-coordinator.d.ts +0 -72
- package/dist/security/security-agent-coordinator.js +0 -204
- package/dist/security/security-auditor.d.ts +0 -56
- package/dist/security/security-auditor.js +0 -584
- package/dist/security/security-hardening-system.d.ts +0 -239
- package/dist/security/security-hardening-system.js +0 -727
- package/dist/security/security-orchestration-layer.d.ts +0 -119
- package/dist/security/security-orchestration-layer.js +0 -496
- /package/dist/{security → mcps/shared}/prompt-security-validator.d.ts +0 -0
- /package/dist/{security → mcps/shared}/prompt-security-validator.js +0 -0
- /package/dist/{security → mcps/shared}/security-scanner.d.ts +0 -0
|
@@ -21,7 +21,7 @@ import { join, resolve } from "path";
|
|
|
21
21
|
/** Environment variable name for custom config root */
|
|
22
22
|
export const XRAY_CONFIG_DIR_ENV = "XRAY_CONFIG_DIR";
|
|
23
23
|
/** Legacy env var name (backward compat) */
|
|
24
|
-
|
|
24
|
+
// STRRAY_CONFIG_DIR_ENV kept for legacy consumer compat (see bridge and tests)
|
|
25
25
|
/** Resolved config directories, cached per projectRoot */
|
|
26
26
|
const _resolvedConfigDirs = new Map();
|
|
27
27
|
/**
|
|
@@ -33,7 +33,7 @@ export function getConfigDir(projectRoot) {
|
|
|
33
33
|
const cached = _resolvedConfigDirs.get(root);
|
|
34
34
|
if (cached)
|
|
35
35
|
return cached;
|
|
36
|
-
const envDir = process.env[XRAY_CONFIG_DIR_ENV]
|
|
36
|
+
const envDir = process.env[XRAY_CONFIG_DIR_ENV];
|
|
37
37
|
// Priority candidates
|
|
38
38
|
const candidates = [];
|
|
39
39
|
if (envDir) {
|
|
@@ -64,13 +64,13 @@ export function getConfigDir(projectRoot) {
|
|
|
64
64
|
*/
|
|
65
65
|
export function resolveConfigPath(relativePath, projectRoot) {
|
|
66
66
|
const root = projectRoot || process.cwd();
|
|
67
|
-
const envDir = process.env[XRAY_CONFIG_DIR_ENV]
|
|
67
|
+
const envDir = process.env[XRAY_CONFIG_DIR_ENV];
|
|
68
68
|
const candidates = [];
|
|
69
69
|
if (envDir) {
|
|
70
70
|
candidates.push(resolve(root, envDir, relativePath));
|
|
71
71
|
}
|
|
72
72
|
candidates.push(join(root, ".xray", relativePath));
|
|
73
|
-
candidates.push(join(root, "
|
|
73
|
+
candidates.push(join(root, "xray", relativePath));
|
|
74
74
|
for (const candidate of candidates) {
|
|
75
75
|
if (existsSync(candidate)) {
|
|
76
76
|
return candidate;
|
|
@@ -86,7 +86,7 @@ export function resolveConfigPath(relativePath, projectRoot) {
|
|
|
86
86
|
*/
|
|
87
87
|
export function resolveStateDir(projectRoot) {
|
|
88
88
|
const root = projectRoot || process.cwd();
|
|
89
|
-
const envDir = process.env[XRAY_CONFIG_DIR_ENV]
|
|
89
|
+
const envDir = process.env[XRAY_CONFIG_DIR_ENV];
|
|
90
90
|
const candidates = [];
|
|
91
91
|
if (envDir) {
|
|
92
92
|
candidates.push(join(root, envDir, "state"));
|
|
@@ -113,7 +113,7 @@ export function resolveStateFilePath(projectRoot) {
|
|
|
113
113
|
*/
|
|
114
114
|
export function resolveProfilesDir(projectRoot) {
|
|
115
115
|
const root = projectRoot || process.cwd();
|
|
116
|
-
const envDir = process.env[XRAY_CONFIG_DIR_ENV]
|
|
116
|
+
const envDir = process.env[XRAY_CONFIG_DIR_ENV];
|
|
117
117
|
const candidates = [];
|
|
118
118
|
if (envDir) {
|
|
119
119
|
candidates.push(join(root, envDir, "profiles"));
|
|
@@ -133,14 +133,13 @@ export function resolveProfilesDir(projectRoot) {
|
|
|
133
133
|
*/
|
|
134
134
|
export function resolveCodexPath(projectRoot) {
|
|
135
135
|
const root = projectRoot || process.cwd();
|
|
136
|
-
const envDir = process.env[XRAY_CONFIG_DIR_ENV]
|
|
136
|
+
const envDir = process.env[XRAY_CONFIG_DIR_ENV];
|
|
137
137
|
const candidates = [];
|
|
138
138
|
if (envDir) {
|
|
139
139
|
candidates.push(join(root, envDir, "codex.json"));
|
|
140
140
|
}
|
|
141
141
|
candidates.push(join(root, ".xray", "codex.json"));
|
|
142
142
|
candidates.push(join(root, "xray", "codex.json"));
|
|
143
|
-
candidates.push(join(root, ".opencode", "xray", "codex.json"));
|
|
144
143
|
// Additional fallback locations (for standalone usage)
|
|
145
144
|
candidates.push(join(root, "codex.json"));
|
|
146
145
|
candidates.push(join(root, "src", "codex.json"));
|
|
@@ -119,4 +119,4 @@ export declare class XrayContextLoader {
|
|
|
119
119
|
* Export singleton instance
|
|
120
120
|
*/
|
|
121
121
|
export declare const xrayContextLoader: XrayContextLoader;
|
|
122
|
-
export { xrayContextLoader as strRayContextLoader
|
|
122
|
+
export { xrayContextLoader as strRayContextLoader };
|
|
@@ -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
|
|
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
|
+
}
|
|
@@ -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?:
|
|
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?:
|
|
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?:
|
|
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)
|
|
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)
|
|
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) })
|
|
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)
|
|
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
|
+
}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { KernelOrchestrator } from "./orchestrator.js";
|
|
2
|
-
export { defaultXrayConfig
|
|
3
|
-
export { getConfigDir, resolveConfigPath, resolveStateDir, resolveProfilesDir, resolveCodexPath, resolveLogDir, resetConfigDirCache,
|
|
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";
|
package/dist/core/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export { KernelOrchestrator } from "./orchestrator.js";
|
|
2
|
-
export { defaultXrayConfig
|
|
2
|
+
export { defaultXrayConfig } from "./xray-activation.js";
|
|
3
3
|
// Decoupled config path resolution (Layer 1)
|
|
4
|
-
export { getConfigDir, resolveConfigPath, resolveStateDir, resolveProfilesDir, resolveCodexPath, resolveLogDir, resetConfigDirCache,
|
|
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:
|
|
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.
|
|
4
|
-
level: process.env.
|
|
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.
|
|
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.
|
|
35
|
+
if ((process.env.XRAY_LOGGING_ENABLED) === "false") {
|
|
36
36
|
setLoggingConfig({ enabled: false });
|
|
37
37
|
}
|
|
38
|
-
if (process.env.
|
|
39
|
-
setLoggingConfig({ level: process.env.
|
|
38
|
+
if (process.env.XRAY_LOG_LEVEL) {
|
|
39
|
+
setLoggingConfig({ level: (process.env.XRAY_LOG_LEVEL) });
|
|
40
40
|
}
|
|
41
|
-
if (process.env.
|
|
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("
|
|
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.
|
|
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 ??
|
|
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
|
|
8
|
-
export { XrayStateManager
|
|
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
|
|
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
|
|
8
|
-
export { XrayStateManager
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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.
|
|
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.
|
|
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
|