snow-flow 4.6.7 → 4.6.9
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/dist/cli.js
CHANGED
|
@@ -73,6 +73,67 @@ program
|
|
|
73
73
|
(0, auth_js_1.registerAuthCommands)(program);
|
|
74
74
|
// Register session inspection commands
|
|
75
75
|
(0, session_js_1.registerSessionCommands)(program);
|
|
76
|
+
// Claude Code version management - ensure 1.0.95 is installed
|
|
77
|
+
async function ensureClaudeCodeVersion() {
|
|
78
|
+
try {
|
|
79
|
+
cliLogger.info('🔧 Checking Claude Code version compatibility...');
|
|
80
|
+
// Check if Claude Code is installed and get version
|
|
81
|
+
const { execSync } = await Promise.resolve().then(() => __importStar(require('child_process')));
|
|
82
|
+
const checkVersionResult = execSync('claude --version 2>/dev/null || echo "not_installed"', {
|
|
83
|
+
encoding: 'utf8',
|
|
84
|
+
timeout: 10000
|
|
85
|
+
}).trim();
|
|
86
|
+
const currentVersion = checkVersionResult.includes('not_installed') ? null :
|
|
87
|
+
checkVersionResult.match(/(\d+\.\d+\.\d+)/)?.[1];
|
|
88
|
+
cliLogger.info(`🔍 Current Claude Code version: ${currentVersion || 'not installed'}`);
|
|
89
|
+
// Target version that works correctly
|
|
90
|
+
const targetVersion = '1.0.95';
|
|
91
|
+
if (currentVersion !== targetVersion) {
|
|
92
|
+
cliLogger.info(`⚠️ Version mismatch detected. Installing Claude Code ${targetVersion}...`);
|
|
93
|
+
cliLogger.info('📥 This prevents bugs in newer versions that cause hanging operations');
|
|
94
|
+
try {
|
|
95
|
+
// Install the specific version
|
|
96
|
+
cliLogger.info('🔄 Running: npm install -g @anthropic-ai/claude-code@1.0.95');
|
|
97
|
+
execSync('npm install -g @anthropic-ai/claude-code@1.0.95', {
|
|
98
|
+
stdio: 'inherit',
|
|
99
|
+
timeout: 120000 // 2 minutes timeout
|
|
100
|
+
});
|
|
101
|
+
// Verify installation
|
|
102
|
+
const verifyResult = execSync('claude --version', {
|
|
103
|
+
encoding: 'utf8',
|
|
104
|
+
timeout: 10000
|
|
105
|
+
}).trim();
|
|
106
|
+
const installedVersion = verifyResult.match(/(\d+\.\d+\.\d+)/)?.[1];
|
|
107
|
+
if (installedVersion === targetVersion) {
|
|
108
|
+
cliLogger.info(`✅ Claude Code ${targetVersion} installed successfully!`);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
cliLogger.warn(`⚠️ Installation completed but version verification shows: ${installedVersion}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch (installError) {
|
|
115
|
+
cliLogger.error('❌ Failed to install Claude Code 1.0.95');
|
|
116
|
+
cliLogger.error('Please install manually: npm install -g @anthropic-ai/claude-code@1.0.95');
|
|
117
|
+
throw new Error(`Claude Code installation failed: ${installError.message}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
cliLogger.info(`✅ Claude Code ${targetVersion} is already installed`);
|
|
122
|
+
}
|
|
123
|
+
cliLogger.info('🚀 Claude Code version check completed successfully');
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
cliLogger.error('❌ Claude Code version check failed:', error.message);
|
|
127
|
+
// Provide fallback guidance
|
|
128
|
+
cliLogger.info('');
|
|
129
|
+
cliLogger.info('🔧 Manual installation instructions:');
|
|
130
|
+
cliLogger.info(' npm install -g @anthropic-ai/claude-code@1.0.95');
|
|
131
|
+
cliLogger.info('');
|
|
132
|
+
cliLogger.info('⚠️ Note: Version 1.0.95 is required to avoid hanging operations in swarm mode');
|
|
133
|
+
// Don't fail completely, but warn user
|
|
134
|
+
cliLogger.warn('⚠️ Continuing with potentially incompatible Claude Code version');
|
|
135
|
+
}
|
|
136
|
+
}
|
|
76
137
|
// Flow deprecation handler - check for flow-related commands
|
|
77
138
|
function checkFlowDeprecation(command, objective) {
|
|
78
139
|
const flowKeywords = ['flow', 'create-flow', 'xml-flow', 'flow-designer'];
|
|
@@ -156,6 +217,8 @@ program
|
|
|
156
217
|
.action(async (objective, options) => {
|
|
157
218
|
// Check for flow deprecation first
|
|
158
219
|
checkFlowDeprecation('swarm', objective);
|
|
220
|
+
// Ensure Claude Code version 1.0.95 is installed before proceeding
|
|
221
|
+
await ensureClaudeCodeVersion();
|
|
159
222
|
// Set debug levels based on options
|
|
160
223
|
if (options.debugAll) {
|
|
161
224
|
process.env.DEBUG = '*';
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced Script Executor
|
|
3
|
+
* Captures ALL output from ServiceNow background scripts
|
|
4
|
+
* Consolidates multiple execution methods into one reliable tool
|
|
5
|
+
*/
|
|
6
|
+
import { ServiceNowClient } from './servicenow-client.js';
|
|
7
|
+
interface ScriptExecutionResult {
|
|
8
|
+
success: boolean;
|
|
9
|
+
output: string[];
|
|
10
|
+
errors: string[];
|
|
11
|
+
logs: {
|
|
12
|
+
print: string[];
|
|
13
|
+
info: string[];
|
|
14
|
+
warn: string[];
|
|
15
|
+
error: string[];
|
|
16
|
+
debug: string[];
|
|
17
|
+
};
|
|
18
|
+
executionTime: number;
|
|
19
|
+
executionId: string;
|
|
20
|
+
scriptResult?: any;
|
|
21
|
+
error?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare class EnhancedScriptExecutor {
|
|
24
|
+
private client;
|
|
25
|
+
private logger;
|
|
26
|
+
constructor(client: ServiceNowClient);
|
|
27
|
+
/**
|
|
28
|
+
* Execute script and capture ALL output including gs.print, gs.info, etc.
|
|
29
|
+
*/
|
|
30
|
+
executeWithFullOutput(script: string, description?: string): Promise<ScriptExecutionResult>;
|
|
31
|
+
}
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=enhanced-script-executor.d.ts.map
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Enhanced Script Executor
|
|
4
|
+
* Captures ALL output from ServiceNow background scripts
|
|
5
|
+
* Consolidates multiple execution methods into one reliable tool
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.EnhancedScriptExecutor = void 0;
|
|
9
|
+
const logger_js_1 = require("./logger.js");
|
|
10
|
+
class EnhancedScriptExecutor {
|
|
11
|
+
constructor(client) {
|
|
12
|
+
this.client = client;
|
|
13
|
+
this.logger = new logger_js_1.Logger('EnhancedScriptExecutor');
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Execute script and capture ALL output including gs.print, gs.info, etc.
|
|
17
|
+
*/
|
|
18
|
+
async executeWithFullOutput(script, description) {
|
|
19
|
+
const startTime = Date.now();
|
|
20
|
+
const executionId = `snow_exec_${Date.now()}_${Math.random().toString(36).substring(7)}`;
|
|
21
|
+
this.logger.info(`Executing script with full output capture - ID: ${executionId}`);
|
|
22
|
+
try {
|
|
23
|
+
// Create enhanced wrapper script that captures EVERYTHING
|
|
24
|
+
const enhancedScript = `
|
|
25
|
+
// Enhanced output capture system
|
|
26
|
+
var snowFlowOutput = {
|
|
27
|
+
print: [],
|
|
28
|
+
info: [],
|
|
29
|
+
warn: [],
|
|
30
|
+
error: [],
|
|
31
|
+
debug: [],
|
|
32
|
+
general: [],
|
|
33
|
+
scriptResult: null,
|
|
34
|
+
executionId: '${executionId}',
|
|
35
|
+
startTime: new GlideDateTime().getValue()
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
// Store original functions
|
|
39
|
+
var origPrint = gs.print;
|
|
40
|
+
var origInfo = gs.info;
|
|
41
|
+
var origWarn = gs.warn;
|
|
42
|
+
var origError = gs.error;
|
|
43
|
+
var origDebug = gs.debug;
|
|
44
|
+
|
|
45
|
+
// Override gs functions to capture output
|
|
46
|
+
gs.print = function(message) {
|
|
47
|
+
snowFlowOutput.print.push(String(message));
|
|
48
|
+
snowFlowOutput.general.push('[PRINT] ' + String(message));
|
|
49
|
+
return origPrint.call(this, message);
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
gs.info = function(message) {
|
|
53
|
+
snowFlowOutput.info.push(String(message));
|
|
54
|
+
snowFlowOutput.general.push('[INFO] ' + String(message));
|
|
55
|
+
return origInfo.call(this, message);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
gs.warn = function(message) {
|
|
59
|
+
snowFlowOutput.warn.push(String(message));
|
|
60
|
+
snowFlowOutput.general.push('[WARN] ' + String(message));
|
|
61
|
+
return origWarn.call(this, message);
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
gs.error = function(message) {
|
|
65
|
+
snowFlowOutput.error.push(String(message));
|
|
66
|
+
snowFlowOutput.general.push('[ERROR] ' + String(message));
|
|
67
|
+
return origError.call(this, message);
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
gs.debug = function(message) {
|
|
71
|
+
snowFlowOutput.debug.push(String(message));
|
|
72
|
+
snowFlowOutput.general.push('[DEBUG] ' + String(message));
|
|
73
|
+
return origDebug.call(this, message);
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
// Execute user script and capture result
|
|
77
|
+
try {
|
|
78
|
+
gs.info('=== SCRIPT EXECUTION START ===');
|
|
79
|
+
|
|
80
|
+
// User's script executed here
|
|
81
|
+
var userScriptResult = (function() {
|
|
82
|
+
${script}
|
|
83
|
+
})();
|
|
84
|
+
|
|
85
|
+
snowFlowOutput.scriptResult = userScriptResult;
|
|
86
|
+
gs.info('=== SCRIPT EXECUTION SUCCESS ===');
|
|
87
|
+
|
|
88
|
+
} catch(userError) {
|
|
89
|
+
gs.error('=== SCRIPT EXECUTION ERROR ===');
|
|
90
|
+
gs.error('Error: ' + userError.toString());
|
|
91
|
+
if (userError.stack) {
|
|
92
|
+
gs.error('Stack: ' + userError.stack);
|
|
93
|
+
}
|
|
94
|
+
snowFlowOutput.scriptResult = { error: userError.toString(), stack: userError.stack };
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Restore original functions
|
|
98
|
+
gs.print = origPrint;
|
|
99
|
+
gs.info = origInfo;
|
|
100
|
+
gs.warn = origWarn;
|
|
101
|
+
gs.error = origError;
|
|
102
|
+
gs.debug = origDebug;
|
|
103
|
+
|
|
104
|
+
// Store output in sys_properties for retrieval
|
|
105
|
+
var outputJson = JSON.stringify(snowFlowOutput);
|
|
106
|
+
gs.setProperty('snow_flow.script_output.' + snowFlowOutput.executionId, outputJson);
|
|
107
|
+
|
|
108
|
+
// Final summary
|
|
109
|
+
gs.info('Snow-Flow: Script execution complete, output stored in sys_properties');
|
|
110
|
+
gs.info('Snow-Flow: Execution ID = ' + snowFlowOutput.executionId);
|
|
111
|
+
gs.info('Snow-Flow: Total output lines = ' + snowFlowOutput.general.length);
|
|
112
|
+
`;
|
|
113
|
+
// Execute the enhanced script
|
|
114
|
+
const executeResponse = await this.client.executeScript(enhancedScript);
|
|
115
|
+
if (!executeResponse.success) {
|
|
116
|
+
throw new Error(`Script execution failed: ${executeResponse.error}`);
|
|
117
|
+
}
|
|
118
|
+
// Wait a bit for execution to complete
|
|
119
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
120
|
+
// Retrieve the captured output from sys_properties
|
|
121
|
+
const outputProperty = `snow_flow.script_output.${executionId}`;
|
|
122
|
+
const outputResponse = await this.client.getProperty(outputProperty);
|
|
123
|
+
let capturedOutput = {
|
|
124
|
+
print: [],
|
|
125
|
+
info: [],
|
|
126
|
+
warn: [],
|
|
127
|
+
error: [],
|
|
128
|
+
debug: [],
|
|
129
|
+
general: [],
|
|
130
|
+
scriptResult: null
|
|
131
|
+
};
|
|
132
|
+
if (outputResponse.success && outputResponse.value) {
|
|
133
|
+
try {
|
|
134
|
+
capturedOutput = JSON.parse(outputResponse.value);
|
|
135
|
+
}
|
|
136
|
+
catch (parseError) {
|
|
137
|
+
this.logger.warn('Failed to parse captured output, using basic result');
|
|
138
|
+
}
|
|
139
|
+
// Clean up the property
|
|
140
|
+
await this.client.deleteProperty(outputProperty);
|
|
141
|
+
}
|
|
142
|
+
const executionTime = Date.now() - startTime;
|
|
143
|
+
const result = {
|
|
144
|
+
success: true,
|
|
145
|
+
output: capturedOutput.general || [],
|
|
146
|
+
errors: capturedOutput.error || [],
|
|
147
|
+
logs: {
|
|
148
|
+
print: capturedOutput.print || [],
|
|
149
|
+
info: capturedOutput.info || [],
|
|
150
|
+
warn: capturedOutput.warn || [],
|
|
151
|
+
error: capturedOutput.error || [],
|
|
152
|
+
debug: capturedOutput.debug || []
|
|
153
|
+
},
|
|
154
|
+
executionTime,
|
|
155
|
+
executionId,
|
|
156
|
+
scriptResult: capturedOutput.scriptResult
|
|
157
|
+
};
|
|
158
|
+
this.logger.info(`Script execution completed with ${result.output.length} output lines`);
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
const executionTime = Date.now() - startTime;
|
|
163
|
+
this.logger.error(`Script execution failed: ${error.message}`);
|
|
164
|
+
return {
|
|
165
|
+
success: false,
|
|
166
|
+
output: [],
|
|
167
|
+
errors: [error.message],
|
|
168
|
+
logs: {
|
|
169
|
+
print: [],
|
|
170
|
+
info: [],
|
|
171
|
+
warn: [],
|
|
172
|
+
error: [error.message],
|
|
173
|
+
debug: []
|
|
174
|
+
},
|
|
175
|
+
executionTime,
|
|
176
|
+
executionId,
|
|
177
|
+
error: error.message
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
exports.EnhancedScriptExecutor = EnhancedScriptExecutor;
|
|
183
|
+
//# sourceMappingURL=enhanced-script-executor.js.map
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Script Executor
|
|
3
|
+
* Single reliable tool to replace all script execution methods
|
|
4
|
+
* Captures COMPLETE output from ServiceNow scripts
|
|
5
|
+
*/
|
|
6
|
+
import { ServiceNowClient } from './servicenow-client.js';
|
|
7
|
+
export interface UnifiedScriptResult {
|
|
8
|
+
success: boolean;
|
|
9
|
+
output: string[];
|
|
10
|
+
scriptResult: any;
|
|
11
|
+
executionId: string;
|
|
12
|
+
executionTime: number;
|
|
13
|
+
logs: {
|
|
14
|
+
print: string[];
|
|
15
|
+
info: string[];
|
|
16
|
+
warn: string[];
|
|
17
|
+
error: string[];
|
|
18
|
+
};
|
|
19
|
+
summary: string;
|
|
20
|
+
error?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare class UnifiedScriptExecutor {
|
|
23
|
+
private client;
|
|
24
|
+
private logger;
|
|
25
|
+
constructor(client: ServiceNowClient);
|
|
26
|
+
/**
|
|
27
|
+
* Execute script with complete output capture
|
|
28
|
+
* Replaces: snow_execute_script_with_output, snow_execute_script_sync, snow_execute_background_script
|
|
29
|
+
*/
|
|
30
|
+
executeScript(script: string, description?: string): Promise<UnifiedScriptResult>;
|
|
31
|
+
}
|
|
32
|
+
export declare function createUnifiedScriptTool(): {
|
|
33
|
+
name: string;
|
|
34
|
+
description: string;
|
|
35
|
+
inputSchema: {
|
|
36
|
+
type: string;
|
|
37
|
+
properties: {
|
|
38
|
+
script: {
|
|
39
|
+
type: string;
|
|
40
|
+
description: string;
|
|
41
|
+
};
|
|
42
|
+
description: {
|
|
43
|
+
type: string;
|
|
44
|
+
description: string;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
required: string[];
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=unified-script-executor.d.ts.map
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Unified Script Executor
|
|
4
|
+
* Single reliable tool to replace all script execution methods
|
|
5
|
+
* Captures COMPLETE output from ServiceNow scripts
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.UnifiedScriptExecutor = void 0;
|
|
9
|
+
exports.createUnifiedScriptTool = createUnifiedScriptTool;
|
|
10
|
+
const logger_js_1 = require("./logger.js");
|
|
11
|
+
class UnifiedScriptExecutor {
|
|
12
|
+
constructor(client) {
|
|
13
|
+
this.client = client;
|
|
14
|
+
this.logger = new logger_js_1.Logger('UnifiedScriptExecutor');
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Execute script with complete output capture
|
|
18
|
+
* Replaces: snow_execute_script_with_output, snow_execute_script_sync, snow_execute_background_script
|
|
19
|
+
*/
|
|
20
|
+
async executeScript(script, description) {
|
|
21
|
+
const startTime = Date.now();
|
|
22
|
+
const executionId = `unified_${Date.now()}_${Math.random().toString(36).substring(7)}`;
|
|
23
|
+
this.logger.info(`Executing script with unified capture - ID: ${executionId}`);
|
|
24
|
+
try {
|
|
25
|
+
// Enhanced script that captures EVERYTHING
|
|
26
|
+
const captureScript = `
|
|
27
|
+
// Snow-Flow Enhanced Output Capture System
|
|
28
|
+
var snowFlowCapture = {
|
|
29
|
+
print: [],
|
|
30
|
+
info: [],
|
|
31
|
+
warn: [],
|
|
32
|
+
error: [],
|
|
33
|
+
output: [],
|
|
34
|
+
scriptResult: null,
|
|
35
|
+
executionId: '${executionId}',
|
|
36
|
+
success: true,
|
|
37
|
+
startTime: new GlideDateTime().getDisplayValue()
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
// Store original gs methods
|
|
41
|
+
var origPrint = gs.print;
|
|
42
|
+
var origInfo = gs.info;
|
|
43
|
+
var origWarn = gs.warn;
|
|
44
|
+
var origError = gs.error;
|
|
45
|
+
|
|
46
|
+
// Enhanced capture functions
|
|
47
|
+
gs.print = function(msg) {
|
|
48
|
+
var message = String(msg);
|
|
49
|
+
snowFlowCapture.print.push(message);
|
|
50
|
+
snowFlowCapture.output.push('[PRINT] ' + message);
|
|
51
|
+
return origPrint(msg);
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
gs.info = function(msg) {
|
|
55
|
+
var message = String(msg);
|
|
56
|
+
snowFlowCapture.info.push(message);
|
|
57
|
+
snowFlowCapture.output.push('[INFO] ' + message);
|
|
58
|
+
return origInfo(msg);
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
gs.warn = function(msg) {
|
|
62
|
+
var message = String(msg);
|
|
63
|
+
snowFlowCapture.warn.push(message);
|
|
64
|
+
snowFlowCapture.output.push('[WARN] ' + message);
|
|
65
|
+
return origWarn(msg);
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
gs.error = function(msg) {
|
|
69
|
+
var message = String(msg);
|
|
70
|
+
snowFlowCapture.error.push(message);
|
|
71
|
+
snowFlowCapture.output.push('[ERROR] ' + message);
|
|
72
|
+
return origError(msg);
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
// Execute user script
|
|
76
|
+
try {
|
|
77
|
+
gs.info('=== SNOW-FLOW UNIFIED EXECUTION START ===');
|
|
78
|
+
|
|
79
|
+
var result = (function() {
|
|
80
|
+
${script}
|
|
81
|
+
})();
|
|
82
|
+
|
|
83
|
+
snowFlowCapture.scriptResult = result;
|
|
84
|
+
gs.info('=== SNOW-FLOW EXECUTION SUCCESS ===');
|
|
85
|
+
gs.info('Script Result: ' + (typeof result === 'object' ? JSON.stringify(result) : String(result)));
|
|
86
|
+
|
|
87
|
+
} catch(scriptError) {
|
|
88
|
+
snowFlowCapture.success = false;
|
|
89
|
+
gs.error('=== SNOW-FLOW EXECUTION ERROR ===');
|
|
90
|
+
gs.error('Error: ' + scriptError.toString());
|
|
91
|
+
snowFlowCapture.scriptResult = { error: scriptError.toString() };
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Restore original functions
|
|
95
|
+
gs.print = origPrint;
|
|
96
|
+
gs.info = origInfo;
|
|
97
|
+
gs.warn = origWarn;
|
|
98
|
+
gs.error = origError;
|
|
99
|
+
|
|
100
|
+
// Store result in temporary property
|
|
101
|
+
gs.setProperty('snow_flow.unified_output.' + snowFlowCapture.executionId, JSON.stringify(snowFlowCapture));
|
|
102
|
+
|
|
103
|
+
gs.info('Snow-Flow: Unified execution complete, ID = ' + snowFlowCapture.executionId);
|
|
104
|
+
`;
|
|
105
|
+
// Execute the script
|
|
106
|
+
const executeResponse = await this.client.executeScript(captureScript);
|
|
107
|
+
if (!executeResponse.success) {
|
|
108
|
+
throw new Error(`Script execution failed: ${executeResponse.error}`);
|
|
109
|
+
}
|
|
110
|
+
// Wait for completion
|
|
111
|
+
await new Promise(resolve => setTimeout(resolve, 3000));
|
|
112
|
+
// Retrieve captured output
|
|
113
|
+
const outputProperty = `snow_flow.unified_output.${executionId}`;
|
|
114
|
+
const outputResponse = await this.client.getProperty(outputProperty);
|
|
115
|
+
let capturedData = {
|
|
116
|
+
print: [],
|
|
117
|
+
info: [],
|
|
118
|
+
warn: [],
|
|
119
|
+
error: [],
|
|
120
|
+
output: [],
|
|
121
|
+
scriptResult: null,
|
|
122
|
+
success: false
|
|
123
|
+
};
|
|
124
|
+
if (outputResponse.success && outputResponse.value) {
|
|
125
|
+
try {
|
|
126
|
+
capturedData = JSON.parse(outputResponse.value);
|
|
127
|
+
// Clean up
|
|
128
|
+
await this.client.deleteProperty(outputProperty);
|
|
129
|
+
}
|
|
130
|
+
catch (parseError) {
|
|
131
|
+
this.logger.warn('Parse error:', parseError);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const executionTime = Date.now() - startTime;
|
|
135
|
+
return {
|
|
136
|
+
success: capturedData.success,
|
|
137
|
+
output: capturedData.output || [],
|
|
138
|
+
scriptResult: capturedData.scriptResult,
|
|
139
|
+
executionId,
|
|
140
|
+
executionTime,
|
|
141
|
+
logs: {
|
|
142
|
+
print: capturedData.print || [],
|
|
143
|
+
info: capturedData.info || [],
|
|
144
|
+
warn: capturedData.warn || [],
|
|
145
|
+
error: capturedData.error || []
|
|
146
|
+
},
|
|
147
|
+
summary: `✅ Execution complete: ${capturedData.output?.length || 0} output lines, ${capturedData.error?.length || 0} errors`,
|
|
148
|
+
error: capturedData.success ? undefined : 'Script execution failed'
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
const executionTime = Date.now() - startTime;
|
|
153
|
+
return {
|
|
154
|
+
success: false,
|
|
155
|
+
output: [],
|
|
156
|
+
scriptResult: null,
|
|
157
|
+
executionId,
|
|
158
|
+
executionTime,
|
|
159
|
+
logs: { print: [], info: [], warn: [], error: [error.message] },
|
|
160
|
+
summary: `❌ Execution failed: ${error.message}`,
|
|
161
|
+
error: error.message
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
exports.UnifiedScriptExecutor = UnifiedScriptExecutor;
|
|
167
|
+
// Export as MCP tool helper
|
|
168
|
+
function createUnifiedScriptTool() {
|
|
169
|
+
return {
|
|
170
|
+
name: 'snow_execute_script_unified',
|
|
171
|
+
description: '🚀 UNIFIED: Execute script with complete output capture (replaces all other script tools). ⚠️ ES5 ONLY!',
|
|
172
|
+
inputSchema: {
|
|
173
|
+
type: 'object',
|
|
174
|
+
properties: {
|
|
175
|
+
script: { type: 'string', description: '🚨 ES5 ONLY! JavaScript code (var, function(){}, string concatenation)' },
|
|
176
|
+
description: { type: 'string', description: 'What this script does' }
|
|
177
|
+
},
|
|
178
|
+
required: ['script']
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=unified-script-executor.js.map
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "snow-flow",
|
|
3
|
-
"version": "4.6.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "4.6.9",
|
|
4
|
+
"description": "ENHANCED SCRIPT OUTPUT CAPTURE - v4.6.9 adds UnifiedScriptExecutor to capture complete script output including gs.print, gs.info, gs.warn, gs.error and script results. Solves the 'not getting actual output' problem with comprehensive output capture system.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "commonjs",
|
|
7
7
|
"bin": {
|