snow-flow 8.37.27 → 8.38.1

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 (43) hide show
  1. package/.snow-code/agent/deployment-specialist.md +346 -0
  2. package/.snow-code/agent/orchestrator.md +286 -0
  3. package/.snow-code/agent/risk-assessor.md +454 -0
  4. package/.snow-code/agent/solution-architect.md +582 -0
  5. package/.snow-code/agent/validator.md +503 -0
  6. package/.snow-code/opencode.json +49 -0
  7. package/README.md +16 -0
  8. package/dist/cli.d.ts.map +1 -1
  9. package/dist/cli.js +104 -266
  10. package/dist/cli.js.map +1 -1
  11. package/dist/utils/config-cache.js +6 -6
  12. package/dist/utils/config-cache.js.map +1 -1
  13. package/dist/utils/sync-mcp-configs.d.ts +7 -5
  14. package/dist/utils/sync-mcp-configs.d.ts.map +1 -1
  15. package/dist/utils/sync-mcp-configs.js +19 -74
  16. package/dist/utils/sync-mcp-configs.js.map +1 -1
  17. package/package.json +2 -3
  18. package/scripts/check-binary-updates.js +0 -169
  19. package/scripts/check-npm-version.js +0 -92
  20. package/scripts/classify-all-tools.ts +0 -446
  21. package/scripts/classify-edge-cases.ts +0 -275
  22. package/scripts/classify-operations-tools.sh +0 -96
  23. package/scripts/cleanup-mcp-servers.js +0 -115
  24. package/scripts/diagnose-mcp.js +0 -299
  25. package/scripts/generate-mcp-config.js +0 -45
  26. package/scripts/mcp-server-manager.sh +0 -320
  27. package/scripts/postinstall.js +0 -75
  28. package/scripts/reset-mcp-servers.js +0 -266
  29. package/scripts/safe-mcp-cleanup.js +0 -151
  30. package/scripts/setup-mcp.js +0 -106
  31. package/scripts/start-mcp-proper.js +0 -76
  32. package/scripts/start-snowcode.sh +0 -123
  33. package/scripts/start-sysprops-mcp.js +0 -43
  34. package/scripts/sync-snow-code-version.js +0 -74
  35. package/scripts/test-auth-flow.js +0 -172
  36. package/scripts/test-auth-location-fix.js +0 -84
  37. package/scripts/test-mcp-manual.js +0 -140
  38. package/scripts/test-todowrite-timeout.js +0 -108
  39. package/scripts/update-dependencies.js +0 -90
  40. package/scripts/update-mcp-config.js +0 -96
  41. package/scripts/update-snow-code.js +0 -146
  42. package/scripts/verify-snowcode-fork.sh +0 -141
  43. package/templates/snow-code-package.json +0 -3
@@ -1,12 +1,14 @@
1
1
  "use strict";
2
2
  /**
3
3
  * Sync MCP Configuration Files
4
- * Ensures .claude/mcp-config.json is always in sync with .mcp.json
4
+ * Ensures .snow-code/config.json is in sync with .mcp.json
5
5
  *
6
6
  * This is critical for enterprise MCP server availability because:
7
7
  * - snow-code auth login updates .mcp.json
8
- * - But Claude Code reads .claude/mcp-config.json
8
+ * - snow-code reads .snow-code/config.json or .mcp.json
9
9
  * - Without sync, enterprise server won't be available in swarm command
10
+ *
11
+ * Note: .claude/ directory is no longer used - snow-code is the only supported client
10
12
  */
11
13
  var __importDefault = (this && this.__importDefault) || function (mod) {
12
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -20,9 +22,9 @@ const path_1 = __importDefault(require("path"));
20
22
  const logger_js_1 = require("./logger.js");
21
23
  const logger = new logger_js_1.Logger('mcp-config-sync');
22
24
  /**
23
- * Sync .mcp.json to .claude/mcp-config.json
25
+ * Sync .mcp.json to .snow-code/config.json
24
26
  *
25
- * This ensures Claude Code always sees the same MCP servers as configured in .mcp.json
27
+ * This ensures snow-code always sees the same MCP servers as configured in .mcp.json
26
28
  * Particularly important for enterprise server configuration during auth flow
27
29
  *
28
30
  * @param projectRoot - Project root directory (defaults to current working directory)
@@ -30,7 +32,6 @@ const logger = new logger_js_1.Logger('mcp-config-sync');
30
32
  async function syncMcpConfigs(projectRoot = process.cwd()) {
31
33
  try {
32
34
  const mcpJsonPath = path_1.default.join(projectRoot, '.mcp.json');
33
- const claudeMcpConfigPath = path_1.default.join(projectRoot, '.claude', 'mcp-config.json');
34
35
  // Check if .mcp.json exists
35
36
  if (!(0, fs_1.existsSync)(mcpJsonPath)) {
36
37
  logger.debug('.mcp.json does not exist, skipping sync');
@@ -39,70 +40,17 @@ async function syncMcpConfigs(projectRoot = process.cwd()) {
39
40
  // Read .mcp.json
40
41
  const mcpJsonContent = await promises_1.default.readFile(mcpJsonPath, 'utf-8');
41
42
  const mcpConfig = JSON.parse(mcpJsonContent);
42
- // Ensure .claude directory exists
43
- const claudeDir = path_1.default.dirname(claudeMcpConfigPath);
44
- if (!(0, fs_1.existsSync)(claudeDir)) {
45
- await promises_1.default.mkdir(claudeDir, { recursive: true });
46
- logger.info(`Created .claude directory: ${claudeDir}`);
47
- }
48
- // Convert .mcp.json format to .claude/mcp-config.json format
49
- // .mcp.json uses { mcp: { ... } } (snow-code format)
50
- // .claude/mcp-config.json uses { mcpServers: { ... } } (Claude Code format)
51
- const claudeConfig = {
52
- mcpServers: {}
53
- };
54
- // Copy all servers from .mcp.json to claude config
55
- // Support both old (mcpServers) and new (mcp) format for backwards compatibility
43
+ // Get servers from .mcp.json (support both formats)
56
44
  const servers = mcpConfig.mcp || mcpConfig.mcpServers || {};
57
- if (servers) {
58
- for (const [serverName, serverConfig] of Object.entries(servers)) {
59
- const config = serverConfig;
60
- // Convert to Claude Code format
61
- // Claude Code expects: command, args, env (or environment)
62
- // New format uses: type, command (array), environment
63
- if (config.type === 'local') {
64
- // New format: command is an array like ["node", "/path/to/server.js"]
65
- const command = Array.isArray(config.command) ? config.command : [config.command];
66
- claudeConfig.mcpServers[serverName] = {
67
- command: command[0], // "node"
68
- args: command.slice(1), // ["/path/to/server.js"]
69
- env: config.environment || config.env || {},
70
- ...(config.enabled !== undefined && { enabled: config.enabled })
71
- };
72
- }
73
- else if (config.type === 'remote') {
74
- // Remote servers (SSE)
75
- claudeConfig.mcpServers[serverName] = {
76
- url: config.url,
77
- env: config.environment || config.env || {},
78
- ...(config.enabled !== undefined && { enabled: config.enabled })
79
- };
80
- }
81
- else {
82
- // Fallback - copy as-is but ensure env key exists
83
- // Remove description and _comment fields
84
- const { description, _comment, ...cleanConfig } = config;
85
- claudeConfig.mcpServers[serverName] = {
86
- ...cleanConfig,
87
- env: config.environment || config.env || {}
88
- };
89
- }
90
- }
91
- }
92
- // Write to .claude/mcp-config.json
93
- await promises_1.default.writeFile(claudeMcpConfigPath, JSON.stringify(claudeConfig, null, 2), 'utf-8');
94
- logger.info(`✅ Synced .mcp.json → .claude/mcp-config.json`);
95
- // 🔥 ALSO sync to .snow-code/config.json and .snow-code/snow-code.json
96
- // These are used by snow-code CLI for MCP server discovery
45
+ // Sync to .snow-code/config.json (snow-code reads this)
97
46
  const snowCodeDir = path_1.default.join(projectRoot, '.snow-code');
98
47
  const snowCodeConfigPath = path_1.default.join(snowCodeDir, 'config.json');
99
- const snowCodeJsonPath = path_1.default.join(snowCodeDir, 'snow-code.json');
100
48
  // Ensure .snow-code directory exists
101
49
  if (!(0, fs_1.existsSync)(snowCodeDir)) {
102
50
  await promises_1.default.mkdir(snowCodeDir, { recursive: true });
103
51
  logger.info(`Created .snow-code directory: ${snowCodeDir}`);
104
52
  }
105
- // Create snow-code format config (uses 'mcp' key, not 'mcpServers')
53
+ // Create snow-code format config (uses 'mcp' key)
106
54
  const snowCodeConfig = {
107
55
  "$schema": "https://opencode.ai/config.json",
108
56
  mcp: {}
@@ -111,14 +59,11 @@ async function syncMcpConfigs(projectRoot = process.cwd()) {
111
59
  for (const [serverName, serverConfig] of Object.entries(servers)) {
112
60
  snowCodeConfig.mcp[serverName] = serverConfig;
113
61
  }
114
- // Write to both .snow-code/config.json and .snow-code/snow-code.json
62
+ // Write to .snow-code/config.json
115
63
  await promises_1.default.writeFile(snowCodeConfigPath, JSON.stringify(snowCodeConfig, null, 2), 'utf-8');
116
- await promises_1.default.writeFile(snowCodeJsonPath, JSON.stringify(snowCodeConfig, null, 2), 'utf-8');
117
64
  logger.info(`✅ Synced .mcp.json → .snow-code/config.json`);
118
- logger.info(`✅ Synced .mcp.json → .snow-code/snow-code.json`);
119
- logger.debug(`Synced ${Object.keys(claudeConfig.mcpServers).length} MCP servers`);
120
65
  // Log which servers are enabled
121
- const enabledServers = Object.entries(claudeConfig.mcpServers)
66
+ const enabledServers = Object.entries(servers)
122
67
  .filter(([_, config]) => config.enabled !== false)
123
68
  .map(([name]) => name);
124
69
  if (enabledServers.length > 0) {
@@ -131,7 +76,7 @@ async function syncMcpConfigs(projectRoot = process.cwd()) {
131
76
  }
132
77
  }
133
78
  /**
134
- * Ensure .claude/mcp-config.json exists and is synced with .mcp.json
79
+ * Ensure .snow-code/config.json exists and is synced with .mcp.json
135
80
  * This is a convenience wrapper that creates the file if it doesn't exist
136
81
  *
137
82
  * @param projectRoot - Project root directory (defaults to current working directory)
@@ -142,14 +87,14 @@ async function ensureMcpConfigSync(projectRoot = process.cwd()) {
142
87
  }
143
88
  catch (error) {
144
89
  // If sync fails, try to create a minimal config
145
- const claudeMcpConfigPath = path_1.default.join(projectRoot, '.claude', 'mcp-config.json');
146
- if (!(0, fs_1.existsSync)(claudeMcpConfigPath)) {
147
- logger.warn('Creating minimal .claude/mcp-config.json');
148
- const claudeDir = path_1.default.dirname(claudeMcpConfigPath);
149
- if (!(0, fs_1.existsSync)(claudeDir)) {
150
- await promises_1.default.mkdir(claudeDir, { recursive: true });
90
+ const snowCodeConfigPath = path_1.default.join(projectRoot, '.snow-code', 'config.json');
91
+ if (!(0, fs_1.existsSync)(snowCodeConfigPath)) {
92
+ logger.warn('Creating minimal .snow-code/config.json');
93
+ const snowCodeDir = path_1.default.dirname(snowCodeConfigPath);
94
+ if (!(0, fs_1.existsSync)(snowCodeDir)) {
95
+ await promises_1.default.mkdir(snowCodeDir, { recursive: true });
151
96
  }
152
- await promises_1.default.writeFile(claudeMcpConfigPath, JSON.stringify({ mcpServers: {} }, null, 2), 'utf-8');
97
+ await promises_1.default.writeFile(snowCodeConfigPath, JSON.stringify({ "$schema": "https://opencode.ai/config.json", mcp: {} }, null, 2), 'utf-8');
153
98
  }
154
99
  }
155
100
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sync-mcp-configs.js","sourceRoot":"","sources":["../../src/utils/sync-mcp-configs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync-mcp-configs.js","sourceRoot":"","sources":["../../src/utils/sync-mcp-configs.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "snow-flow",
3
- "version": "8.37.27",
3
+ "version": "8.38.1",
4
4
  "description": "ServiceNow development with SnowCode - 75+ LLM providers (Claude, GPT, Gemini, Llama, Mistral, DeepSeek, Groq, Ollama) • 395 Optimized Tools • 2 MCP Servers • Multi-agent orchestration • Use ANY AI coding assistant (ML tools moved to Enterprise)",
5
5
  "main": "dist/index.js",
6
6
  "type": "commonjs",
@@ -11,11 +11,10 @@
11
11
  "files": [
12
12
  "dist/",
13
13
  "bin/",
14
- "scripts/",
15
- "templates/",
16
14
  "patches/",
17
15
  ".env.example",
18
16
  ".mcp.json.template",
17
+ ".snow-code/",
19
18
  "snow-code-config.example.json",
20
19
  "themes/",
21
20
  "README.md",
@@ -1,169 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * Check for and install updated snow-code binary packages
5
- * Runs at runtime to ensure users always have the latest binaries
6
- */
7
-
8
- const { execSync } = require('child_process');
9
- const fs = require('fs');
10
- const path = require('path');
11
-
12
- const BINARY_PACKAGES = [
13
- '@groeimetai/snow-code-darwin-arm64',
14
- '@groeimetai/snow-code-darwin-x64',
15
- '@groeimetai/snow-code-linux-arm64',
16
- '@groeimetai/snow-code-linux-x64',
17
- '@groeimetai/snow-code-windows-x64'
18
- ];
19
-
20
- async function getLatestVersionFromNPM(packageName) {
21
- try {
22
- const version = execSync(`npm view ${packageName} version 2>/dev/null`, {
23
- encoding: 'utf8',
24
- stdio: ['pipe', 'pipe', 'ignore'] // Suppress stderr
25
- }).trim();
26
- return version || null;
27
- } catch (error) {
28
- return null;
29
- }
30
- }
31
-
32
- async function getInstalledVersion(packageName) {
33
- try {
34
- const packageJsonPath = path.join(__dirname, '..', 'node_modules', packageName, 'package.json');
35
- if (!fs.existsSync(packageJsonPath)) {
36
- return null;
37
- }
38
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
39
- return packageJson.version;
40
- } catch (error) {
41
- return null;
42
- }
43
- }
44
-
45
- async function checkBinaryUpdates(options = {}) {
46
- const { silent = false, autoUpdate = false } = options;
47
-
48
- if (!silent) {
49
- console.log('🔍 Checking for snow-code binary updates...\n');
50
- }
51
-
52
- const updates = [];
53
- const errors = [];
54
-
55
- for (const packageName of BINARY_PACKAGES) {
56
- try {
57
- const [latest, installed] = await Promise.all([
58
- getLatestVersionFromNPM(packageName),
59
- getInstalledVersion(packageName)
60
- ]);
61
-
62
- if (!latest) {
63
- if (!silent) {
64
- console.log(`⚠️ ${packageName}: Not available on npm`);
65
- }
66
- continue;
67
- }
68
-
69
- if (!installed) {
70
- if (!silent) {
71
- console.log(`📦 ${packageName}: Not installed (latest: ${latest})`);
72
- }
73
- updates.push({ package: packageName, from: null, to: latest });
74
- continue;
75
- }
76
-
77
- if (installed !== latest) {
78
- if (!silent) {
79
- console.log(`🔄 ${packageName}: ${installed} → ${latest}`);
80
- }
81
- updates.push({ package: packageName, from: installed, to: latest });
82
- } else {
83
- if (!silent) {
84
- console.log(`✅ ${packageName}: ${installed} (up to date)`);
85
- }
86
- }
87
- } catch (error) {
88
- errors.push({ package: packageName, error: error.message });
89
- if (!silent) {
90
- console.log(`❌ ${packageName}: Error checking version`);
91
- }
92
- }
93
- }
94
-
95
- console.log('');
96
-
97
- if (updates.length === 0) {
98
- if (!silent) {
99
- console.log('✨ All binaries are up to date!\n');
100
- }
101
- return { updates: [], errors, updated: false };
102
- }
103
-
104
- if (!silent) {
105
- console.log(`📥 Found ${updates.length} update(s) available\n`);
106
- }
107
-
108
- if (autoUpdate) {
109
- if (!silent) {
110
- console.log('⚡ Auto-updating binaries...\n');
111
- }
112
-
113
- for (const { package: packageName, to } of updates) {
114
- try {
115
- if (!silent) {
116
- console.log(` Installing ${packageName}@${to}...`);
117
- }
118
- execSync(`npm install --no-save --prefer-offline ${packageName}@${to}`, {
119
- encoding: 'utf8',
120
- stdio: silent ? 'ignore' : 'inherit'
121
- });
122
- } catch (error) {
123
- errors.push({ package: packageName, error: error.message });
124
- if (!silent) {
125
- console.log(` ❌ Failed to install ${packageName}`);
126
- }
127
- }
128
- }
129
-
130
- if (!silent) {
131
- console.log('\n✅ Binary updates completed!\n');
132
- }
133
- return { updates, errors, updated: true };
134
- }
135
-
136
- // If not auto-updating, show instructions
137
- if (!silent) {
138
- console.log('To update binaries, run:\n');
139
- console.log(' npm run update-binaries\n');
140
- console.log('Or manually:');
141
- for (const { package: packageName, to } of updates) {
142
- console.log(` npm install ${packageName}@${to}`);
143
- }
144
- console.log('');
145
- }
146
-
147
- return { updates, errors, updated: false };
148
- }
149
-
150
- // CLI interface
151
- if (require.main === module) {
152
- const args = process.argv.slice(2);
153
- const silent = args.includes('--silent') || args.includes('-s');
154
- const autoUpdate = args.includes('--auto-update') || args.includes('-u');
155
-
156
- checkBinaryUpdates({ silent, autoUpdate })
157
- .then(result => {
158
- if (result.errors.length > 0 && !silent) {
159
- console.log(`⚠️ ${result.errors.length} error(s) occurred during check`);
160
- }
161
- process.exit(0);
162
- })
163
- .catch(error => {
164
- console.error('❌ Failed to check binary updates:', error.message);
165
- process.exit(1);
166
- });
167
- }
168
-
169
- module.exports = { checkBinaryUpdates };
@@ -1,92 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * Check if current package version already exists on npm
5
- * If it does, automatically bump to next available version
6
- */
7
-
8
- const { execSync } = require('child_process');
9
- const fs = require('fs');
10
- const path = require('path');
11
-
12
- function getCurrentVersion() {
13
- const packageJsonPath = path.join(__dirname, '..', 'package.json');
14
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
15
- return packageJson.version;
16
- }
17
-
18
- function getPublishedVersions() {
19
- try {
20
- const versionsJson = execSync('npm view snow-flow versions --json', {
21
- encoding: 'utf8',
22
- stdio: ['pipe', 'pipe', 'pipe']
23
- });
24
- return JSON.parse(versionsJson);
25
- } catch (error) {
26
- // Package might not exist yet
27
- return [];
28
- }
29
- }
30
-
31
- function bumpVersion(type = 'patch') {
32
- console.log(`🔄 Bumping ${type} version...`);
33
- execSync(`npm version ${type} --no-git-tag-version`, {
34
- stdio: 'inherit',
35
- cwd: path.join(__dirname, '..')
36
- });
37
- return getCurrentVersion();
38
- }
39
-
40
- function updateVersionFile(version) {
41
- const versionFilePath = path.join(__dirname, '..', 'src', 'version.ts');
42
- const versionContent = `// Auto-generated by npm version command
43
- export const VERSION = '${version}';
44
- `;
45
- fs.writeFileSync(versionFilePath, versionContent, 'utf-8');
46
- console.log(`✅ Updated version.ts to ${version}`);
47
- }
48
-
49
- async function main() {
50
- const currentVersion = getCurrentVersion();
51
- const publishedVersions = getPublishedVersions();
52
-
53
- console.log(`📦 Current version: ${currentVersion}`);
54
- console.log(`📚 Checking npm registry...`);
55
-
56
- if (publishedVersions.includes(currentVersion)) {
57
- console.log(`⚠️ Version ${currentVersion} already exists on npm!`);
58
- console.log(`🔄 Auto-bumping to next patch version...`);
59
-
60
- const newVersion = bumpVersion('patch');
61
- updateVersionFile(newVersion);
62
-
63
- console.log(`✅ Bumped to version ${newVersion}`);
64
- console.log(`📝 Committing version bump...`);
65
-
66
- try {
67
- execSync('git add package.json src/version.ts', {
68
- cwd: path.join(__dirname, '..')
69
- });
70
- execSync(`git commit -m "chore: Auto-bump version to ${newVersion} (${currentVersion} already published)"`, {
71
- cwd: path.join(__dirname, '..'),
72
- stdio: 'inherit'
73
- });
74
- console.log(`✅ Version bump committed`);
75
- } catch (err) {
76
- console.log(`⚠️ Git commit failed (might already be committed)`);
77
- }
78
- } else {
79
- console.log(`✅ Version ${currentVersion} is available for publishing`);
80
- }
81
-
82
- process.exit(0);
83
- }
84
-
85
- if (require.main === module) {
86
- main().catch(error => {
87
- console.error('❌ Error:', error.message);
88
- process.exit(1);
89
- });
90
- }
91
-
92
- module.exports = { getCurrentVersion, getPublishedVersions };