snow-flow 8.37.24 → 8.37.26
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/auth.d.ts.map +1 -1
- package/dist/cli/auth.js +10 -73
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +7 -11
- package/dist/cli.js.map +1 -1
- package/dist/mcp/enterprise-proxy/credentials.d.ts +1 -0
- package/dist/mcp/enterprise-proxy/credentials.d.ts.map +1 -1
- package/dist/mcp/enterprise-proxy/credentials.js +66 -39
- package/dist/mcp/enterprise-proxy/credentials.js.map +1 -1
- package/dist/mcp/enterprise-proxy/server.js +17 -8
- package/dist/mcp/enterprise-proxy/server.js.map +1 -1
- package/dist/utils/auto-update-snow-code.d.ts +28 -9
- package/dist/utils/auto-update-snow-code.d.ts.map +1 -1
- package/dist/utils/auto-update-snow-code.js +195 -176
- package/dist/utils/auto-update-snow-code.js.map +1 -1
- package/dist/utils/config-cache.d.ts +50 -0
- package/dist/utils/config-cache.d.ts.map +1 -0
- package/dist/utils/config-cache.js +153 -0
- package/dist/utils/config-cache.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/mcp/enterprise-proxy/credentials.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAaH,
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/mcp/enterprise-proxy/credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,16 +43,25 @@ const SNOW_INSTANCE_URL = process.env.SNOW_INSTANCE_URL || '';
|
|
|
43
43
|
const SNOW_USERNAME = process.env.SNOW_USERNAME || '';
|
|
44
44
|
const SNOW_PASSWORD = process.env.SNOW_PASSWORD || '';
|
|
45
45
|
// Jira credentials (optional)
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
// Support both naming conventions:
|
|
47
|
+
// - JIRA_* (manual config / .env.example)
|
|
48
|
+
// - ATLASSIAN_* + JIRA_HOST (snow-code auth login)
|
|
49
|
+
const JIRA_BASE_URL = process.env.JIRA_BASE_URL || process.env.JIRA_HOST || '';
|
|
50
|
+
const JIRA_EMAIL = process.env.JIRA_EMAIL || process.env.ATLASSIAN_EMAIL || '';
|
|
51
|
+
const JIRA_API_TOKEN = process.env.JIRA_API_TOKEN || process.env.ATLASSIAN_API_TOKEN || '';
|
|
49
52
|
// Azure DevOps credentials (optional)
|
|
50
|
-
|
|
51
|
-
|
|
53
|
+
// Support both naming conventions:
|
|
54
|
+
// - AZDO_* (manual config / .env.example)
|
|
55
|
+
// - AZURE_* (snow-code auth login)
|
|
56
|
+
const AZDO_ORG_URL = process.env.AZDO_ORG_URL || process.env.AZURE_ORG || '';
|
|
57
|
+
const AZDO_PAT = process.env.AZDO_PAT || process.env.AZURE_PAT || '';
|
|
52
58
|
// Confluence credentials (optional)
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
59
|
+
// Support both naming conventions:
|
|
60
|
+
// - CONFLUENCE_* (manual config / .env.example)
|
|
61
|
+
// - ATLASSIAN_* + CONFLUENCE_HOST (snow-code auth login)
|
|
62
|
+
const CONFLUENCE_BASE_URL = process.env.CONFLUENCE_BASE_URL || process.env.CONFLUENCE_HOST || '';
|
|
63
|
+
const CONFLUENCE_EMAIL = process.env.CONFLUENCE_EMAIL || process.env.ATLASSIAN_EMAIL || '';
|
|
64
|
+
const CONFLUENCE_API_TOKEN = process.env.CONFLUENCE_API_TOKEN || process.env.ATLASSIAN_API_TOKEN || '';
|
|
56
65
|
class EnterpriseProxyServer {
|
|
57
66
|
constructor() {
|
|
58
67
|
this.availableTools = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/mcp/enterprise-proxy/server.ts"],"names":[],"mappings":";;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;;;;;AAEH,wEAAmE;AACnE,wEAAiF;AACjF,iEAI4C;AAC5C,kDAA6C;AAE7C,2CAA2C;AAC3C,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC;AACjE,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,6BAA6B;AAE9F,yBAAyB;AACzB,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC;AAC9D,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC;AACtD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC;AAEtD,8BAA8B;AAC9B,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/mcp/enterprise-proxy/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Automatic Snow-Code Update Utility
|
|
3
3
|
* Ensures users always have the LATEST version of @groeimetai/snow-code and platform binaries
|
|
4
|
-
*
|
|
4
|
+
*
|
|
5
|
+
* OPTIMIZED FOR FAST STARTUP:
|
|
6
|
+
* - Caches version checks (1 hour TTL)
|
|
7
|
+
* - Fully async operations (no blocking)
|
|
8
|
+
* - Skips checks if recently verified
|
|
9
|
+
* - Background updates don't block swarm startup
|
|
5
10
|
*/
|
|
6
11
|
export interface UpdateResult {
|
|
7
12
|
success: boolean;
|
|
@@ -9,19 +14,33 @@ export interface UpdateResult {
|
|
|
9
14
|
mainPackageVersion: string | null;
|
|
10
15
|
binaryPackagesUpdated: number;
|
|
11
16
|
errors: string[];
|
|
17
|
+
skipped?: boolean;
|
|
18
|
+
fromCache?: boolean;
|
|
12
19
|
}
|
|
13
20
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
21
|
+
* Quick check if update is needed using cache
|
|
22
|
+
* Returns immediately if cache is valid
|
|
23
|
+
*/
|
|
24
|
+
export declare function checkForUpdatesWithCache(): Promise<{
|
|
25
|
+
updateAvailable: boolean;
|
|
26
|
+
currentVersion: string | null;
|
|
27
|
+
latestVersion: string | null;
|
|
28
|
+
fromCache: boolean;
|
|
29
|
+
}>;
|
|
30
|
+
/**
|
|
31
|
+
* FAST auto-update function optimized for swarm startup
|
|
32
|
+
* - Returns immediately if cache is valid and no update needed
|
|
33
|
+
* - Triggers background update if needed (non-blocking)
|
|
34
|
+
* - Never blocks the main thread
|
|
20
35
|
*/
|
|
21
36
|
export declare function autoUpdateSnowCode(targetDir?: string, verbose?: boolean): Promise<UpdateResult>;
|
|
22
37
|
/**
|
|
23
|
-
*
|
|
24
|
-
|
|
38
|
+
* Force clear the version cache (useful for debugging or manual refresh)
|
|
39
|
+
*/
|
|
40
|
+
export declare function clearVersionCache(): void;
|
|
41
|
+
/**
|
|
42
|
+
* Legacy function for backwards compatibility
|
|
43
|
+
* @deprecated Use checkForUpdatesWithCache() instead
|
|
25
44
|
*/
|
|
26
45
|
export declare function checkForUpdates(): Promise<{
|
|
27
46
|
updateAvailable: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-update-snow-code.d.ts","sourceRoot":"","sources":["../../src/utils/auto-update-snow-code.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"auto-update-snow-code.d.ts","sourceRoot":"","sources":["../../src/utils/auto-update-snow-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAeH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAoJD;;;GAGG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC;IACxD,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC,CAqCD;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,UAAQ,GACd,OAAO,CAAC,YAAY,CAAC,CA2DvB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAUxC;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC;IAC/C,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC,CAOD"}
|
|
@@ -2,16 +2,31 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Automatic Snow-Code Update Utility
|
|
4
4
|
* Ensures users always have the LATEST version of @groeimetai/snow-code and platform binaries
|
|
5
|
-
*
|
|
5
|
+
*
|
|
6
|
+
* OPTIMIZED FOR FAST STARTUP:
|
|
7
|
+
* - Caches version checks (1 hour TTL)
|
|
8
|
+
* - Fully async operations (no blocking)
|
|
9
|
+
* - Skips checks if recently verified
|
|
10
|
+
* - Background updates don't block swarm startup
|
|
6
11
|
*/
|
|
12
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
13
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
14
|
+
};
|
|
7
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.checkForUpdatesWithCache = checkForUpdatesWithCache;
|
|
8
17
|
exports.autoUpdateSnowCode = autoUpdateSnowCode;
|
|
18
|
+
exports.clearVersionCache = clearVersionCache;
|
|
9
19
|
exports.checkForUpdates = checkForUpdates;
|
|
10
20
|
const child_process_1 = require("child_process");
|
|
11
21
|
const fs_1 = require("fs");
|
|
12
22
|
const path_1 = require("path");
|
|
23
|
+
const os_1 = __importDefault(require("os"));
|
|
13
24
|
const logger_js_1 = require("./logger.js");
|
|
14
25
|
const logger = new logger_js_1.Logger('auto-update');
|
|
26
|
+
// Cache settings
|
|
27
|
+
const CACHE_DIR = (0, path_1.join)(os_1.default.homedir(), '.snow-flow', 'cache');
|
|
28
|
+
const VERSION_CACHE_FILE = (0, path_1.join)(CACHE_DIR, 'version-cache.json');
|
|
29
|
+
const CACHE_TTL_MS = 60 * 60 * 1000; // 1 hour
|
|
15
30
|
/**
|
|
16
31
|
* Platform-specific binary packages that need to be updated
|
|
17
32
|
*/
|
|
@@ -23,23 +38,82 @@ const BINARY_PACKAGES = [
|
|
|
23
38
|
'@groeimetai/snow-code-windows-x64'
|
|
24
39
|
];
|
|
25
40
|
/**
|
|
26
|
-
*
|
|
41
|
+
* Ensure cache directory exists
|
|
42
|
+
*/
|
|
43
|
+
function ensureCacheDir() {
|
|
44
|
+
if (!(0, fs_1.existsSync)(CACHE_DIR)) {
|
|
45
|
+
(0, fs_1.mkdirSync)(CACHE_DIR, { recursive: true });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Read version cache from disk
|
|
27
50
|
*/
|
|
28
|
-
|
|
51
|
+
function readVersionCache() {
|
|
29
52
|
try {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
return version || null;
|
|
53
|
+
if ((0, fs_1.existsSync)(VERSION_CACHE_FILE)) {
|
|
54
|
+
const data = (0, fs_1.readFileSync)(VERSION_CACHE_FILE, 'utf8');
|
|
55
|
+
return JSON.parse(data);
|
|
56
|
+
}
|
|
35
57
|
}
|
|
36
58
|
catch (error) {
|
|
37
|
-
logger.debug(
|
|
38
|
-
return null;
|
|
59
|
+
logger.debug('Could not read version cache:', error);
|
|
39
60
|
}
|
|
61
|
+
return null;
|
|
40
62
|
}
|
|
41
63
|
/**
|
|
42
|
-
*
|
|
64
|
+
* Write version cache to disk
|
|
65
|
+
*/
|
|
66
|
+
function writeVersionCache(cache) {
|
|
67
|
+
try {
|
|
68
|
+
ensureCacheDir();
|
|
69
|
+
(0, fs_1.writeFileSync)(VERSION_CACHE_FILE, JSON.stringify(cache, null, 2));
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
logger.debug('Could not write version cache:', error);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Check if cache is still valid (within TTL)
|
|
77
|
+
*/
|
|
78
|
+
function isCacheValid(cache) {
|
|
79
|
+
if (!cache)
|
|
80
|
+
return false;
|
|
81
|
+
const age = Date.now() - cache.lastCheck;
|
|
82
|
+
return age < CACHE_TTL_MS;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get the latest version of a package from npm registry (ASYNC - non-blocking)
|
|
86
|
+
*/
|
|
87
|
+
async function getLatestVersionAsync(packageName) {
|
|
88
|
+
return new Promise((resolve) => {
|
|
89
|
+
const npmProcess = (0, child_process_1.spawn)('npm', ['view', packageName, 'version'], {
|
|
90
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
91
|
+
shell: true
|
|
92
|
+
});
|
|
93
|
+
let version = '';
|
|
94
|
+
npmProcess.stdout?.on('data', (data) => {
|
|
95
|
+
version += data.toString();
|
|
96
|
+
});
|
|
97
|
+
npmProcess.on('close', (code) => {
|
|
98
|
+
if (code === 0 && version.trim()) {
|
|
99
|
+
resolve(version.trim());
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
resolve(null);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
npmProcess.on('error', () => {
|
|
106
|
+
resolve(null);
|
|
107
|
+
});
|
|
108
|
+
// Timeout after 5 seconds
|
|
109
|
+
setTimeout(() => {
|
|
110
|
+
npmProcess.kill();
|
|
111
|
+
resolve(null);
|
|
112
|
+
}, 5000);
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get currently installed version of a package (sync but fast - just reads local file)
|
|
43
117
|
*/
|
|
44
118
|
function getInstalledVersion(packageName, targetDir) {
|
|
45
119
|
try {
|
|
@@ -48,7 +122,7 @@ function getInstalledVersion(packageName, targetDir) {
|
|
|
48
122
|
if (!(0, fs_1.existsSync)(packageJsonPath)) {
|
|
49
123
|
return null;
|
|
50
124
|
}
|
|
51
|
-
const packageJson =
|
|
125
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf8'));
|
|
52
126
|
return packageJson.version;
|
|
53
127
|
}
|
|
54
128
|
catch (error) {
|
|
@@ -56,199 +130,144 @@ function getInstalledVersion(packageName, targetDir) {
|
|
|
56
130
|
}
|
|
57
131
|
}
|
|
58
132
|
/**
|
|
59
|
-
*
|
|
60
|
-
* Installs both globally (for CLI usage) and locally (as dependency)
|
|
133
|
+
* Run npm install in background (ASYNC - non-blocking)
|
|
61
134
|
*/
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
result.version = latestVersion;
|
|
80
|
-
// Update GLOBAL installation (used by snow-flow CLI commands)
|
|
81
|
-
if (verbose)
|
|
82
|
-
logger.info(`Updating global ${packageName} to v${latestVersion}...`);
|
|
83
|
-
try {
|
|
84
|
-
(0, child_process_1.execSync)(`npm install -g ${packageName}@latest`, {
|
|
85
|
-
stdio: verbose ? 'inherit' : 'ignore',
|
|
86
|
-
encoding: 'utf8'
|
|
87
|
-
});
|
|
88
|
-
result.globalUpdated = true;
|
|
89
|
-
if (verbose)
|
|
90
|
-
logger.info('✓ Global installation updated');
|
|
91
|
-
}
|
|
92
|
-
catch (globalErr) {
|
|
93
|
-
logger.debug('Global update failed (non-critical):', globalErr);
|
|
94
|
-
// Continue even if global update fails
|
|
95
|
-
}
|
|
96
|
-
// Update LOCAL installation (as project dependency)
|
|
97
|
-
if (verbose)
|
|
98
|
-
logger.info(`Updating local ${packageName} to v${latestVersion}...`);
|
|
99
|
-
try {
|
|
100
|
-
const cwd = targetDir || process.cwd();
|
|
101
|
-
(0, child_process_1.execSync)(`npm install ${packageName}@latest`, {
|
|
102
|
-
stdio: verbose ? 'inherit' : 'ignore',
|
|
103
|
-
cwd,
|
|
104
|
-
encoding: 'utf8'
|
|
105
|
-
});
|
|
106
|
-
result.localUpdated = true;
|
|
107
|
-
if (verbose)
|
|
108
|
-
logger.info('✓ Local installation updated');
|
|
109
|
-
}
|
|
110
|
-
catch (localErr) {
|
|
111
|
-
logger.debug('Local update failed (non-critical):', localErr);
|
|
112
|
-
// Continue even if local update fails
|
|
113
|
-
}
|
|
114
|
-
result.success = result.globalUpdated || result.localUpdated;
|
|
115
|
-
return result;
|
|
116
|
-
}
|
|
117
|
-
catch (error) {
|
|
118
|
-
logger.error('Failed to update main package:', error);
|
|
119
|
-
return result;
|
|
120
|
-
}
|
|
135
|
+
function runNpmInstallAsync(packageName, global, targetDir) {
|
|
136
|
+
return new Promise((resolve) => {
|
|
137
|
+
const args = global
|
|
138
|
+
? ['install', '-g', `${packageName}@latest`, '--silent', '--no-audit', '--no-fund']
|
|
139
|
+
: ['install', `${packageName}@latest`, '--silent', '--no-audit', '--no-fund'];
|
|
140
|
+
const npmProcess = (0, child_process_1.spawn)('npm', args, {
|
|
141
|
+
stdio: 'ignore',
|
|
142
|
+
shell: true,
|
|
143
|
+
cwd: global ? undefined : (targetDir || process.cwd()),
|
|
144
|
+
detached: true // Run independently of parent
|
|
145
|
+
});
|
|
146
|
+
// Don't wait for completion - let it run in background
|
|
147
|
+
npmProcess.unref();
|
|
148
|
+
// Resolve immediately - update happens in background
|
|
149
|
+
resolve(true);
|
|
150
|
+
});
|
|
121
151
|
}
|
|
122
152
|
/**
|
|
123
|
-
*
|
|
124
|
-
*
|
|
153
|
+
* Quick check if update is needed using cache
|
|
154
|
+
* Returns immediately if cache is valid
|
|
125
155
|
*/
|
|
126
|
-
async function
|
|
127
|
-
const
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
const packagesToUpdate = [
|
|
139
|
-
currentPlatformPackage,
|
|
140
|
-
...BINARY_PACKAGES.filter(pkg => pkg !== currentPlatformPackage)
|
|
141
|
-
];
|
|
142
|
-
for (const packageName of packagesToUpdate) {
|
|
143
|
-
try {
|
|
144
|
-
const latestVersion = await getLatestVersion(packageName);
|
|
145
|
-
if (!latestVersion) {
|
|
146
|
-
if (verbose)
|
|
147
|
-
logger.debug(`Skipping ${packageName} (not available)`);
|
|
148
|
-
continue;
|
|
149
|
-
}
|
|
150
|
-
const installedVersion = getInstalledVersion(packageName, targetDir);
|
|
151
|
-
// Only update if not installed or version differs
|
|
152
|
-
if (!installedVersion || installedVersion !== latestVersion) {
|
|
153
|
-
if (verbose) {
|
|
154
|
-
logger.info(`Updating ${packageName} to v${latestVersion}...`);
|
|
155
|
-
}
|
|
156
|
-
const cwd = targetDir || process.cwd();
|
|
157
|
-
(0, child_process_1.execSync)(`npm install --no-save --prefer-offline ${packageName}@${latestVersion}`, {
|
|
158
|
-
stdio: verbose ? 'inherit' : 'ignore',
|
|
159
|
-
cwd,
|
|
160
|
-
encoding: 'utf8'
|
|
161
|
-
});
|
|
162
|
-
result.updated++;
|
|
163
|
-
if (verbose)
|
|
164
|
-
logger.info(`✓ ${packageName} updated`);
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
167
|
-
if (verbose)
|
|
168
|
-
logger.debug(`✓ ${packageName} already up-to-date (v${installedVersion})`);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
catch (error) {
|
|
172
|
-
const errorMsg = `Failed to update ${packageName}: ${error instanceof Error ? error.message : 'unknown error'}`;
|
|
173
|
-
result.errors.push(errorMsg);
|
|
174
|
-
logger.debug(errorMsg);
|
|
175
|
-
}
|
|
156
|
+
async function checkForUpdatesWithCache() {
|
|
157
|
+
const packageName = '@groeimetai/snow-code';
|
|
158
|
+
// Check cache first
|
|
159
|
+
const cache = readVersionCache();
|
|
160
|
+
if (isCacheValid(cache)) {
|
|
161
|
+
logger.debug('Using cached version info (age: ' + Math.round((Date.now() - cache.lastCheck) / 1000) + 's)');
|
|
162
|
+
return {
|
|
163
|
+
updateAvailable: cache.updateAvailable,
|
|
164
|
+
currentVersion: cache.installedVersion,
|
|
165
|
+
latestVersion: cache.latestVersion,
|
|
166
|
+
fromCache: true
|
|
167
|
+
};
|
|
176
168
|
}
|
|
177
|
-
|
|
169
|
+
// Cache miss or expired - check npm (async)
|
|
170
|
+
const currentVersion = getInstalledVersion(packageName);
|
|
171
|
+
const latestVersion = await getLatestVersionAsync(packageName);
|
|
172
|
+
const updateAvailable = currentVersion !== null &&
|
|
173
|
+
latestVersion !== null &&
|
|
174
|
+
currentVersion !== latestVersion;
|
|
175
|
+
// Update cache
|
|
176
|
+
writeVersionCache({
|
|
177
|
+
lastCheck: Date.now(),
|
|
178
|
+
latestVersion,
|
|
179
|
+
installedVersion: currentVersion,
|
|
180
|
+
updateAvailable
|
|
181
|
+
});
|
|
182
|
+
return {
|
|
183
|
+
updateAvailable,
|
|
184
|
+
currentVersion,
|
|
185
|
+
latestVersion,
|
|
186
|
+
fromCache: false
|
|
187
|
+
};
|
|
178
188
|
}
|
|
179
189
|
/**
|
|
180
|
-
*
|
|
181
|
-
*
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
* @param verbose - Show detailed progress messages
|
|
185
|
-
* @returns UpdateResult with detailed status
|
|
190
|
+
* FAST auto-update function optimized for swarm startup
|
|
191
|
+
* - Returns immediately if cache is valid and no update needed
|
|
192
|
+
* - Triggers background update if needed (non-blocking)
|
|
193
|
+
* - Never blocks the main thread
|
|
186
194
|
*/
|
|
187
195
|
async function autoUpdateSnowCode(targetDir, verbose = false) {
|
|
188
|
-
const startTime = Date.now();
|
|
189
|
-
if (verbose) {
|
|
190
|
-
logger.info('🔄 Checking for snow-code updates...');
|
|
191
|
-
}
|
|
192
196
|
const result = {
|
|
193
|
-
success:
|
|
197
|
+
success: true,
|
|
194
198
|
mainPackageUpdated: false,
|
|
195
199
|
mainPackageVersion: null,
|
|
196
200
|
binaryPackagesUpdated: 0,
|
|
197
|
-
errors: []
|
|
201
|
+
errors: [],
|
|
202
|
+
skipped: false,
|
|
203
|
+
fromCache: false
|
|
198
204
|
};
|
|
199
205
|
try {
|
|
200
|
-
//
|
|
201
|
-
const
|
|
202
|
-
result.
|
|
203
|
-
result.
|
|
204
|
-
if (!
|
|
205
|
-
|
|
206
|
+
// Quick cache check
|
|
207
|
+
const versionInfo = await checkForUpdatesWithCache();
|
|
208
|
+
result.mainPackageVersion = versionInfo.latestVersion;
|
|
209
|
+
result.fromCache = versionInfo.fromCache;
|
|
210
|
+
if (!versionInfo.updateAvailable) {
|
|
211
|
+
// No update needed - return immediately
|
|
212
|
+
if (verbose) {
|
|
213
|
+
logger.debug(`✓ snow-code is up-to-date (v${versionInfo.currentVersion})${versionInfo.fromCache ? ' [cached]' : ''}`);
|
|
214
|
+
}
|
|
215
|
+
result.skipped = true;
|
|
216
|
+
return result;
|
|
206
217
|
}
|
|
207
|
-
// Update
|
|
208
|
-
const binaryUpdate = await updateBinaryPackages(targetDir, verbose);
|
|
209
|
-
result.binaryPackagesUpdated = binaryUpdate.updated;
|
|
210
|
-
result.errors.push(...binaryUpdate.errors);
|
|
211
|
-
// Overall success if at least main package updated
|
|
212
|
-
result.success = mainUpdate.success;
|
|
213
|
-
const duration = ((Date.now() - startTime) / 1000).toFixed(1);
|
|
218
|
+
// Update available - trigger background install (non-blocking)
|
|
214
219
|
if (verbose) {
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
220
|
+
logger.info(`🔄 Updating snow-code v${versionInfo.currentVersion} → v${versionInfo.latestVersion} (background)...`);
|
|
221
|
+
}
|
|
222
|
+
// Fire and forget - these run in background
|
|
223
|
+
runNpmInstallAsync('@groeimetai/snow-code', true, targetDir);
|
|
224
|
+
runNpmInstallAsync('@groeimetai/snow-code', false, targetDir);
|
|
225
|
+
// Update current platform binary only (not all platforms)
|
|
226
|
+
const platform = process.platform;
|
|
227
|
+
const arch = process.arch;
|
|
228
|
+
const currentPlatformPackage = `@groeimetai/snow-code-${platform}-${arch}`;
|
|
229
|
+
if (BINARY_PACKAGES.includes(currentPlatformPackage)) {
|
|
230
|
+
runNpmInstallAsync(currentPlatformPackage, false, targetDir);
|
|
231
|
+
result.binaryPackagesUpdated = 1;
|
|
232
|
+
}
|
|
233
|
+
result.mainPackageUpdated = true;
|
|
234
|
+
if (verbose) {
|
|
235
|
+
logger.info('✓ Update started in background (non-blocking)');
|
|
230
236
|
}
|
|
231
237
|
return result;
|
|
232
238
|
}
|
|
233
239
|
catch (error) {
|
|
234
|
-
const errorMsg = `
|
|
240
|
+
const errorMsg = `Update check failed: ${error instanceof Error ? error.message : 'unknown error'}`;
|
|
235
241
|
result.errors.push(errorMsg);
|
|
236
|
-
logger.
|
|
242
|
+
logger.debug(errorMsg);
|
|
237
243
|
return result;
|
|
238
244
|
}
|
|
239
245
|
}
|
|
240
246
|
/**
|
|
241
|
-
*
|
|
242
|
-
|
|
247
|
+
* Force clear the version cache (useful for debugging or manual refresh)
|
|
248
|
+
*/
|
|
249
|
+
function clearVersionCache() {
|
|
250
|
+
try {
|
|
251
|
+
if ((0, fs_1.existsSync)(VERSION_CACHE_FILE)) {
|
|
252
|
+
const { unlinkSync } = require('fs');
|
|
253
|
+
unlinkSync(VERSION_CACHE_FILE);
|
|
254
|
+
logger.debug('Version cache cleared');
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
logger.debug('Could not clear version cache:', error);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Legacy function for backwards compatibility
|
|
263
|
+
* @deprecated Use checkForUpdatesWithCache() instead
|
|
243
264
|
*/
|
|
244
265
|
async function checkForUpdates() {
|
|
245
|
-
const
|
|
246
|
-
const currentVersion = getInstalledVersion(packageName);
|
|
247
|
-
const latestVersion = await getLatestVersion(packageName);
|
|
266
|
+
const result = await checkForUpdatesWithCache();
|
|
248
267
|
return {
|
|
249
|
-
updateAvailable:
|
|
250
|
-
currentVersion,
|
|
251
|
-
latestVersion
|
|
268
|
+
updateAvailable: result.updateAvailable,
|
|
269
|
+
currentVersion: result.currentVersion,
|
|
270
|
+
latestVersion: result.latestVersion
|
|
252
271
|
};
|
|
253
272
|
}
|
|
254
273
|
//# sourceMappingURL=auto-update-snow-code.js.map
|