@claude-flow/cli 3.0.0-alpha.81 → 3.0.0-alpha.83

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 (67) hide show
  1. package/dist/src/commands/claims.d.ts.map +1 -1
  2. package/dist/src/commands/claims.js +92 -7
  3. package/dist/src/commands/claims.js.map +1 -1
  4. package/dist/src/commands/embeddings.d.ts.map +1 -1
  5. package/dist/src/commands/embeddings.js +99 -5
  6. package/dist/src/commands/embeddings.js.map +1 -1
  7. package/dist/src/commands/index.d.ts.map +1 -1
  8. package/dist/src/commands/index.js +2 -0
  9. package/dist/src/commands/index.js.map +1 -1
  10. package/dist/src/commands/neural.d.ts.map +1 -1
  11. package/dist/src/commands/neural.js +68 -16
  12. package/dist/src/commands/neural.js.map +1 -1
  13. package/dist/src/commands/performance.d.ts.map +1 -1
  14. package/dist/src/commands/performance.js +155 -9
  15. package/dist/src/commands/performance.js.map +1 -1
  16. package/dist/src/commands/security.d.ts.map +1 -1
  17. package/dist/src/commands/security.js +199 -31
  18. package/dist/src/commands/security.js.map +1 -1
  19. package/dist/src/commands/update.d.ts +8 -0
  20. package/dist/src/commands/update.d.ts.map +1 -0
  21. package/dist/src/commands/update.js +276 -0
  22. package/dist/src/commands/update.js.map +1 -0
  23. package/dist/src/index.d.ts +5 -0
  24. package/dist/src/index.d.ts.map +1 -1
  25. package/dist/src/index.js +28 -0
  26. package/dist/src/index.js.map +1 -1
  27. package/dist/src/transfer/storage/gcs.d.ts +82 -0
  28. package/dist/src/transfer/storage/gcs.d.ts.map +1 -0
  29. package/dist/src/transfer/storage/gcs.js +230 -0
  30. package/dist/src/transfer/storage/gcs.js.map +1 -0
  31. package/dist/src/transfer/storage/index.d.ts +6 -0
  32. package/dist/src/transfer/storage/index.d.ts.map +1 -0
  33. package/dist/src/transfer/storage/index.js +6 -0
  34. package/dist/src/transfer/storage/index.js.map +1 -0
  35. package/dist/src/transfer/store/discovery.d.ts +9 -9
  36. package/dist/src/transfer/store/discovery.d.ts.map +1 -1
  37. package/dist/src/transfer/store/discovery.js +197 -91
  38. package/dist/src/transfer/store/discovery.js.map +1 -1
  39. package/dist/src/transfer/store/download.d.ts +6 -6
  40. package/dist/src/transfer/store/download.d.ts.map +1 -1
  41. package/dist/src/transfer/store/download.js +104 -65
  42. package/dist/src/transfer/store/download.js.map +1 -1
  43. package/dist/src/transfer/store/publish.d.ts.map +1 -1
  44. package/dist/src/transfer/store/publish.js +57 -25
  45. package/dist/src/transfer/store/publish.js.map +1 -1
  46. package/dist/src/update/checker.d.ts +34 -0
  47. package/dist/src/update/checker.d.ts.map +1 -0
  48. package/dist/src/update/checker.js +190 -0
  49. package/dist/src/update/checker.js.map +1 -0
  50. package/dist/src/update/executor.d.ts +32 -0
  51. package/dist/src/update/executor.d.ts.map +1 -0
  52. package/dist/src/update/executor.js +181 -0
  53. package/dist/src/update/executor.js.map +1 -0
  54. package/dist/src/update/index.d.ts +33 -0
  55. package/dist/src/update/index.d.ts.map +1 -0
  56. package/dist/src/update/index.js +64 -0
  57. package/dist/src/update/index.js.map +1 -0
  58. package/dist/src/update/rate-limiter.d.ts +20 -0
  59. package/dist/src/update/rate-limiter.d.ts.map +1 -0
  60. package/dist/src/update/rate-limiter.js +96 -0
  61. package/dist/src/update/rate-limiter.js.map +1 -0
  62. package/dist/src/update/validator.d.ts +17 -0
  63. package/dist/src/update/validator.d.ts.map +1 -0
  64. package/dist/src/update/validator.js +123 -0
  65. package/dist/src/update/validator.js.map +1 -0
  66. package/dist/tsconfig.tsbuildinfo +1 -1
  67. package/package.json +1 -1
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Update checker for @claude-flow packages
3
+ * Queries npm registry and compares versions
4
+ */
5
+ import * as semver from 'semver';
6
+ import { shouldCheckForUpdates, recordCheck, getCachedVersions } from './rate-limiter.js';
7
+ const DEFAULT_CONFIG = {
8
+ enabled: true,
9
+ checkIntervalHours: 24,
10
+ autoUpdate: {
11
+ patch: true,
12
+ minor: false,
13
+ major: false,
14
+ },
15
+ priority: {
16
+ '@claude-flow/security': 'critical',
17
+ '@claude-flow/cli': 'high',
18
+ '@claude-flow/embeddings': 'normal',
19
+ '@claude-flow/integration': 'normal',
20
+ '@claude-flow/testing': 'low',
21
+ },
22
+ exclude: [],
23
+ };
24
+ // Packages to check for updates
25
+ const CLAUDE_FLOW_PACKAGES = [
26
+ '@claude-flow/cli',
27
+ '@claude-flow/embeddings',
28
+ '@claude-flow/security',
29
+ '@claude-flow/integration',
30
+ '@claude-flow/testing',
31
+ ];
32
+ async function fetchPackageInfo(packageName) {
33
+ try {
34
+ const response = await fetch(`https://registry.npmjs.org/${encodeURIComponent(packageName)}`, {
35
+ headers: { Accept: 'application/json' },
36
+ signal: AbortSignal.timeout(5000),
37
+ });
38
+ if (!response.ok) {
39
+ return null;
40
+ }
41
+ return (await response.json());
42
+ }
43
+ catch {
44
+ return null;
45
+ }
46
+ }
47
+ function getUpdateType(current, latest) {
48
+ if (!semver.valid(current) || !semver.valid(latest)) {
49
+ return 'none';
50
+ }
51
+ if (semver.eq(current, latest)) {
52
+ return 'none';
53
+ }
54
+ if (semver.major(latest) > semver.major(current)) {
55
+ return 'major';
56
+ }
57
+ if (semver.minor(latest) > semver.minor(current)) {
58
+ return 'minor';
59
+ }
60
+ if (semver.patch(latest) > semver.patch(current)) {
61
+ return 'patch';
62
+ }
63
+ return 'none';
64
+ }
65
+ function shouldAutoUpdate(updateType, priority, config) {
66
+ if (updateType === 'none')
67
+ return false;
68
+ // Critical security packages always auto-update patches
69
+ if (priority === 'critical' && updateType === 'patch') {
70
+ return true;
71
+ }
72
+ // Check config
73
+ if (updateType === 'major')
74
+ return config.autoUpdate.major;
75
+ if (updateType === 'minor')
76
+ return config.autoUpdate.minor;
77
+ if (updateType === 'patch')
78
+ return config.autoUpdate.patch;
79
+ return false;
80
+ }
81
+ export function getInstalledVersion(packageName) {
82
+ try {
83
+ // Try to find the package in node_modules
84
+ const possiblePaths = [
85
+ `${packageName}/package.json`,
86
+ `../../node_modules/${packageName}/package.json`,
87
+ `../../../node_modules/${packageName}/package.json`,
88
+ ];
89
+ for (const modulePath of possiblePaths) {
90
+ try {
91
+ // Use dynamic import with require for package.json
92
+ const resolved = require.resolve(modulePath, { paths: [process.cwd()] });
93
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
94
+ const pkg = require(resolved);
95
+ return pkg.version;
96
+ }
97
+ catch {
98
+ continue;
99
+ }
100
+ }
101
+ return null;
102
+ }
103
+ catch {
104
+ return null;
105
+ }
106
+ }
107
+ export async function checkForUpdates(config = DEFAULT_CONFIG) {
108
+ // Check rate limit
109
+ const rateCheck = shouldCheckForUpdates(config.checkIntervalHours);
110
+ if (!rateCheck.allowed) {
111
+ // Return cached results if available
112
+ const cached = getCachedVersions();
113
+ if (Object.keys(cached).length > 0) {
114
+ return {
115
+ results: [],
116
+ skipped: true,
117
+ reason: rateCheck.reason,
118
+ };
119
+ }
120
+ return { results: [], skipped: true, reason: rateCheck.reason };
121
+ }
122
+ const results = [];
123
+ const versionCache = {};
124
+ // Check each package
125
+ const packagesToCheck = CLAUDE_FLOW_PACKAGES.filter((pkg) => !config.exclude.includes(pkg));
126
+ // Sort by priority (critical first)
127
+ const priorityOrder = { critical: 0, high: 1, normal: 2, low: 3 };
128
+ packagesToCheck.sort((a, b) => {
129
+ const pa = config.priority[a] || 'normal';
130
+ const pb = config.priority[b] || 'normal';
131
+ return priorityOrder[pa] - priorityOrder[pb];
132
+ });
133
+ await Promise.all(packagesToCheck.map(async (packageName) => {
134
+ const currentVersion = getInstalledVersion(packageName);
135
+ if (!currentVersion) {
136
+ // Package not installed, skip
137
+ return;
138
+ }
139
+ const info = await fetchPackageInfo(packageName);
140
+ if (!info) {
141
+ return;
142
+ }
143
+ const latestVersion = info['dist-tags']?.latest;
144
+ if (!latestVersion) {
145
+ return;
146
+ }
147
+ versionCache[packageName] = latestVersion;
148
+ const updateType = getUpdateType(currentVersion, latestVersion);
149
+ const priority = config.priority[packageName] || 'normal';
150
+ results.push({
151
+ package: packageName,
152
+ currentVersion,
153
+ latestVersion,
154
+ updateType,
155
+ priority,
156
+ shouldAutoUpdate: shouldAutoUpdate(updateType, priority, config),
157
+ });
158
+ }));
159
+ // Record this check
160
+ recordCheck(versionCache);
161
+ // Filter to only updates available
162
+ const updates = results.filter((r) => r.updateType !== 'none');
163
+ return { results: updates, skipped: false };
164
+ }
165
+ export async function checkSinglePackage(packageName, config = DEFAULT_CONFIG) {
166
+ const currentVersion = getInstalledVersion(packageName);
167
+ if (!currentVersion) {
168
+ return null;
169
+ }
170
+ const info = await fetchPackageInfo(packageName);
171
+ if (!info) {
172
+ return null;
173
+ }
174
+ const latestVersion = info['dist-tags']?.latest;
175
+ if (!latestVersion) {
176
+ return null;
177
+ }
178
+ const updateType = getUpdateType(currentVersion, latestVersion);
179
+ const priority = config.priority[packageName] || 'normal';
180
+ return {
181
+ package: packageName,
182
+ currentVersion,
183
+ latestVersion,
184
+ updateType,
185
+ priority,
186
+ shouldAutoUpdate: shouldAutoUpdate(updateType, priority, config),
187
+ };
188
+ }
189
+ export { DEFAULT_CONFIG };
190
+ //# sourceMappingURL=checker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checker.js","sourceRoot":"","sources":["../../../src/update/checker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Update executor - performs actual package updates
3
+ * Includes rollback capability
4
+ */
5
+ import { UpdateCheckResult } from './checker.js';
6
+ import { ValidationResult } from './validator.js';
7
+ export interface UpdateHistoryEntry {
8
+ timestamp: string;
9
+ package: string;
10
+ fromVersion: string;
11
+ toVersion: string;
12
+ success: boolean;
13
+ error?: string;
14
+ rollbackAvailable: boolean;
15
+ }
16
+ export interface UpdateExecutionResult {
17
+ success: boolean;
18
+ package: string;
19
+ version: string;
20
+ error?: string;
21
+ validation: ValidationResult;
22
+ }
23
+ export declare function loadHistory(): UpdateHistoryEntry[];
24
+ export declare function executeUpdate(update: UpdateCheckResult, installedPackages: Record<string, string>, dryRun?: boolean): Promise<UpdateExecutionResult>;
25
+ export declare function executeMultipleUpdates(updates: UpdateCheckResult[], installedPackages: Record<string, string>, dryRun?: boolean): Promise<UpdateExecutionResult[]>;
26
+ export declare function rollbackUpdate(packageName?: string): Promise<{
27
+ success: boolean;
28
+ message: string;
29
+ }>;
30
+ export declare function getUpdateHistory(limit?: number): UpdateHistoryEntry[];
31
+ export declare function clearHistory(): void;
32
+ //# sourceMappingURL=executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/update/executor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAkB,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElE,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,gBAAgB,CAAC;CAC9B;AAYD,wBAAgB,WAAW,IAAI,kBAAkB,EAAE,CAUlD;AAeD,wBAAsB,aAAa,CACjC,MAAM,EAAE,iBAAiB,EACzB,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,MAAM,UAAQ,GACb,OAAO,CAAC,qBAAqB,CAAC,CA4EhC;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,iBAAiB,EAAE,EAC5B,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,MAAM,UAAQ,GACb,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAoBlC;AAED,wBAAsB,cAAc,CAClC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAsDhD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,SAAK,GAAG,kBAAkB,EAAE,CAGjE;AAED,wBAAgB,YAAY,IAAI,IAAI,CAInC"}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Update executor - performs actual package updates
3
+ * Includes rollback capability
4
+ */
5
+ import { execSync } from 'child_process';
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ import * as os from 'os';
9
+ import { validateUpdate } from './validator.js';
10
+ const HISTORY_FILE = path.join(os.homedir(), '.claude-flow', 'update-history.json');
11
+ const MAX_HISTORY_ENTRIES = 100;
12
+ function ensureDir() {
13
+ const dir = path.dirname(HISTORY_FILE);
14
+ if (!fs.existsSync(dir)) {
15
+ fs.mkdirSync(dir, { recursive: true });
16
+ }
17
+ }
18
+ export function loadHistory() {
19
+ try {
20
+ if (fs.existsSync(HISTORY_FILE)) {
21
+ const content = fs.readFileSync(HISTORY_FILE, 'utf-8');
22
+ return JSON.parse(content);
23
+ }
24
+ }
25
+ catch {
26
+ // Corrupted file
27
+ }
28
+ return [];
29
+ }
30
+ function saveHistory(history) {
31
+ ensureDir();
32
+ // Keep only last N entries
33
+ const trimmed = history.slice(-MAX_HISTORY_ENTRIES);
34
+ fs.writeFileSync(HISTORY_FILE, JSON.stringify(trimmed, null, 2));
35
+ }
36
+ function recordUpdate(entry) {
37
+ const history = loadHistory();
38
+ history.push(entry);
39
+ saveHistory(history);
40
+ }
41
+ export async function executeUpdate(update, installedPackages, dryRun = false) {
42
+ // Validate first
43
+ const validation = validateUpdate(update.package, update.currentVersion, update.latestVersion, installedPackages);
44
+ if (!validation.valid) {
45
+ return {
46
+ success: false,
47
+ package: update.package,
48
+ version: update.latestVersion,
49
+ error: `Validation failed: ${validation.incompatibilities.join(', ')}`,
50
+ validation,
51
+ };
52
+ }
53
+ if (dryRun) {
54
+ return {
55
+ success: true,
56
+ package: update.package,
57
+ version: update.latestVersion,
58
+ validation,
59
+ };
60
+ }
61
+ try {
62
+ // Execute npm install
63
+ const installCmd = `npm install ${update.package}@${update.latestVersion} --save-exact`;
64
+ execSync(installCmd, {
65
+ encoding: 'utf-8',
66
+ stdio: 'pipe',
67
+ timeout: 60000, // 1 minute timeout
68
+ });
69
+ // Record successful update
70
+ recordUpdate({
71
+ timestamp: new Date().toISOString(),
72
+ package: update.package,
73
+ fromVersion: update.currentVersion,
74
+ toVersion: update.latestVersion,
75
+ success: true,
76
+ rollbackAvailable: true,
77
+ });
78
+ return {
79
+ success: true,
80
+ package: update.package,
81
+ version: update.latestVersion,
82
+ validation,
83
+ };
84
+ }
85
+ catch (error) {
86
+ const err = error;
87
+ // Record failed update
88
+ recordUpdate({
89
+ timestamp: new Date().toISOString(),
90
+ package: update.package,
91
+ fromVersion: update.currentVersion,
92
+ toVersion: update.latestVersion,
93
+ success: false,
94
+ error: err.message,
95
+ rollbackAvailable: false,
96
+ });
97
+ return {
98
+ success: false,
99
+ package: update.package,
100
+ version: update.latestVersion,
101
+ error: err.message,
102
+ validation,
103
+ };
104
+ }
105
+ }
106
+ export async function executeMultipleUpdates(updates, installedPackages, dryRun = false) {
107
+ const results = [];
108
+ // Execute updates sequentially to avoid conflicts
109
+ for (const update of updates) {
110
+ const result = await executeUpdate(update, installedPackages, dryRun);
111
+ results.push(result);
112
+ // Update installed packages for next validation
113
+ if (result.success) {
114
+ installedPackages[update.package] = update.latestVersion;
115
+ }
116
+ // Stop on critical failures
117
+ if (!result.success && update.priority === 'critical') {
118
+ break;
119
+ }
120
+ }
121
+ return results;
122
+ }
123
+ export async function rollbackUpdate(packageName) {
124
+ const history = loadHistory();
125
+ if (history.length === 0) {
126
+ return { success: false, message: 'No update history available' };
127
+ }
128
+ // Find the last successful update for this package (or any if not specified)
129
+ const lastUpdate = packageName
130
+ ? history
131
+ .reverse()
132
+ .find((h) => h.package === packageName && h.success && h.rollbackAvailable)
133
+ : history.reverse().find((h) => h.success && h.rollbackAvailable);
134
+ if (!lastUpdate) {
135
+ return {
136
+ success: false,
137
+ message: packageName
138
+ ? `No rollback available for ${packageName}`
139
+ : 'No rollback available',
140
+ };
141
+ }
142
+ try {
143
+ // Install the previous version
144
+ const installCmd = `npm install ${lastUpdate.package}@${lastUpdate.fromVersion} --save-exact`;
145
+ execSync(installCmd, {
146
+ encoding: 'utf-8',
147
+ stdio: 'pipe',
148
+ timeout: 60000,
149
+ });
150
+ // Record the rollback
151
+ recordUpdate({
152
+ timestamp: new Date().toISOString(),
153
+ package: lastUpdate.package,
154
+ fromVersion: lastUpdate.toVersion,
155
+ toVersion: lastUpdate.fromVersion,
156
+ success: true,
157
+ rollbackAvailable: false, // Can't rollback a rollback
158
+ });
159
+ return {
160
+ success: true,
161
+ message: `Rolled back ${lastUpdate.package} from ${lastUpdate.toVersion} to ${lastUpdate.fromVersion}`,
162
+ };
163
+ }
164
+ catch (error) {
165
+ const err = error;
166
+ return {
167
+ success: false,
168
+ message: `Rollback failed: ${err.message}`,
169
+ };
170
+ }
171
+ }
172
+ export function getUpdateHistory(limit = 20) {
173
+ const history = loadHistory();
174
+ return history.slice(-limit).reverse();
175
+ }
176
+ export function clearHistory() {
177
+ if (fs.existsSync(HISTORY_FILE)) {
178
+ fs.unlinkSync(HISTORY_FILE);
179
+ }
180
+ }
181
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/update/executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Auto-update system for @claude-flow packages
3
+ *
4
+ * Features:
5
+ * - Rate-limited update checks (24h default)
6
+ * - Automatic patch updates for security packages
7
+ * - Compatibility validation before updates
8
+ * - Rollback capability
9
+ * - Update history logging
10
+ */
11
+ export { checkForUpdates, checkSinglePackage, getInstalledVersion, DEFAULT_CONFIG, } from './checker.js';
12
+ export type { UpdateCheckResult, UpdateConfig } from './checker.js';
13
+ export { shouldCheckForUpdates, recordCheck, getCachedVersions, clearCache, loadState, } from './rate-limiter.js';
14
+ export type { RateLimitState } from './rate-limiter.js';
15
+ export { validateUpdate, validateBulkUpdate } from './validator.js';
16
+ export type { ValidationResult } from './validator.js';
17
+ export { executeUpdate, executeMultipleUpdates, rollbackUpdate, getUpdateHistory, clearHistory, loadHistory, } from './executor.js';
18
+ export type { UpdateHistoryEntry, UpdateExecutionResult } from './executor.js';
19
+ import type { UpdateCheckResult } from './checker.js';
20
+ /**
21
+ * Run auto-update check on startup
22
+ * This is the main entry point for the auto-update system
23
+ */
24
+ export declare function runStartupUpdateCheck(options: {
25
+ verbose?: boolean;
26
+ autoUpdate?: boolean;
27
+ }): Promise<{
28
+ checked: boolean;
29
+ updatesAvailable: UpdateCheckResult[];
30
+ updatesApplied: string[];
31
+ skippedReason?: string;
32
+ }>;
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/update/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEpE,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,iBAAiB,EACjB,UAAU,EACV,SAAS,GACV,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAI/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAItD;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,GAAG,OAAO,CAAC;IACV,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;IACtC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC,CAkDD"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Auto-update system for @claude-flow packages
3
+ *
4
+ * Features:
5
+ * - Rate-limited update checks (24h default)
6
+ * - Automatic patch updates for security packages
7
+ * - Compatibility validation before updates
8
+ * - Rollback capability
9
+ * - Update history logging
10
+ */
11
+ export { checkForUpdates, checkSinglePackage, getInstalledVersion, DEFAULT_CONFIG, } from './checker.js';
12
+ export { shouldCheckForUpdates, recordCheck, getCachedVersions, clearCache, loadState, } from './rate-limiter.js';
13
+ export { validateUpdate, validateBulkUpdate } from './validator.js';
14
+ export { executeUpdate, executeMultipleUpdates, rollbackUpdate, getUpdateHistory, clearHistory, loadHistory, } from './executor.js';
15
+ // Re-export a convenience function for startup
16
+ import { checkForUpdates, DEFAULT_CONFIG } from './checker.js';
17
+ import { executeMultipleUpdates } from './executor.js';
18
+ import { getInstalledVersion } from './checker.js';
19
+ /**
20
+ * Run auto-update check on startup
21
+ * This is the main entry point for the auto-update system
22
+ */
23
+ export async function runStartupUpdateCheck(options) {
24
+ const result = {
25
+ checked: false,
26
+ updatesAvailable: [],
27
+ updatesApplied: [],
28
+ skippedReason: undefined,
29
+ };
30
+ try {
31
+ const { results, skipped, reason } = await checkForUpdates(DEFAULT_CONFIG);
32
+ if (skipped) {
33
+ result.skippedReason = reason;
34
+ return result;
35
+ }
36
+ result.checked = true;
37
+ result.updatesAvailable = results;
38
+ // Auto-update if enabled
39
+ if (options.autoUpdate !== false) {
40
+ const autoUpdateable = results.filter((r) => r.shouldAutoUpdate);
41
+ if (autoUpdateable.length > 0) {
42
+ // Get current installed packages
43
+ const installedPackages = {};
44
+ for (const update of autoUpdateable) {
45
+ const version = getInstalledVersion(update.package);
46
+ if (version) {
47
+ installedPackages[update.package] = version;
48
+ }
49
+ }
50
+ // Execute updates
51
+ const updateResults = await executeMultipleUpdates(autoUpdateable, installedPackages);
52
+ result.updatesApplied = updateResults
53
+ .filter((r) => r.success)
54
+ .map((r) => `${r.package}@${r.version}`);
55
+ }
56
+ }
57
+ return result;
58
+ }
59
+ catch {
60
+ // Silently fail on startup - don't block CLI usage
61
+ return result;
62
+ }
63
+ }
64
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/update/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,GACf,MAAM,cAAc,CAAC;AAItB,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,iBAAiB,EACjB,UAAU,EACV,SAAS,GACV,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAIpE,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,WAAW,GACZ,MAAM,eAAe,CAAC;AAIvB,+CAA+C;AAC/C,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAG3C;IAMC,MAAM,MAAM,GAAG;QACb,OAAO,EAAE,KAAK;QACd,gBAAgB,EAAE,EAAyB;QAC3C,cAAc,EAAE,EAAc;QAC9B,aAAa,EAAE,SAA+B;KAC/C,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC,cAAc,CAAC,CAAC;QAE3E,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC;YAC9B,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,MAAM,CAAC,gBAAgB,GAAG,OAAO,CAAC;QAElC,yBAAyB;QACzB,IAAI,OAAO,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;YACjC,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;YAEjE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,iCAAiC;gBACjC,MAAM,iBAAiB,GAA2B,EAAE,CAAC;gBACrD,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;oBACpC,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBACpD,IAAI,OAAO,EAAE,CAAC;wBACZ,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;oBAC9C,CAAC;gBACH,CAAC;gBAED,kBAAkB;gBAClB,MAAM,aAAa,GAAG,MAAM,sBAAsB,CAChD,cAAc,EACd,iBAAiB,CAClB,CAAC;gBAEF,MAAM,CAAC,cAAc,GAAG,aAAa;qBAClC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;qBACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,mDAAmD;QACnD,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Rate limiter for update checks
3
+ * Prevents excessive npm registry queries
4
+ */
5
+ export interface RateLimitState {
6
+ lastCheck: string;
7
+ checksToday: number;
8
+ date: string;
9
+ packageVersions: Record<string, string>;
10
+ }
11
+ export declare function loadState(): RateLimitState;
12
+ export declare function saveState(state: RateLimitState): void;
13
+ export declare function shouldCheckForUpdates(intervalHours?: number): {
14
+ allowed: boolean;
15
+ reason?: string;
16
+ };
17
+ export declare function recordCheck(packageVersions: Record<string, string>): void;
18
+ export declare function getCachedVersions(): Record<string, string>;
19
+ export declare function clearCache(): void;
20
+ //# sourceMappingURL=rate-limiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../../src/update/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAsBD,wBAAgB,SAAS,IAAI,cAAc,CAmB1C;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAGrD;AAED,wBAAgB,qBAAqB,CACnC,aAAa,GAAE,MAA+B,GAC7C;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAuCvC;AAED,wBAAgB,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAMzE;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE1D;AAED,wBAAgB,UAAU,IAAI,IAAI,CAIjC"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Rate limiter for update checks
3
+ * Prevents excessive npm registry queries
4
+ */
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ import * as os from 'os';
8
+ const STATE_FILE = path.join(os.homedir(), '.claude-flow', 'update-state.json');
9
+ const DEFAULT_INTERVAL_HOURS = 24;
10
+ const MAX_CHECKS_PER_DAY = 10;
11
+ function ensureDir() {
12
+ const dir = path.dirname(STATE_FILE);
13
+ if (!fs.existsSync(dir)) {
14
+ fs.mkdirSync(dir, { recursive: true });
15
+ }
16
+ }
17
+ function getDefaultState() {
18
+ return {
19
+ lastCheck: '',
20
+ checksToday: 0,
21
+ date: new Date().toISOString().split('T')[0],
22
+ packageVersions: {},
23
+ };
24
+ }
25
+ export function loadState() {
26
+ try {
27
+ if (fs.existsSync(STATE_FILE)) {
28
+ const content = fs.readFileSync(STATE_FILE, 'utf-8');
29
+ const state = JSON.parse(content);
30
+ // Reset counter if new day
31
+ const today = new Date().toISOString().split('T')[0];
32
+ if (state.date !== today) {
33
+ state.date = today;
34
+ state.checksToday = 0;
35
+ }
36
+ return state;
37
+ }
38
+ }
39
+ catch {
40
+ // Corrupted file, reset
41
+ }
42
+ return getDefaultState();
43
+ }
44
+ export function saveState(state) {
45
+ ensureDir();
46
+ fs.writeFileSync(STATE_FILE, JSON.stringify(state, null, 2));
47
+ }
48
+ export function shouldCheckForUpdates(intervalHours = DEFAULT_INTERVAL_HOURS) {
49
+ // Skip in CI environments
50
+ if (process.env.CI === 'true' || process.env.CONTINUOUS_INTEGRATION === 'true') {
51
+ return { allowed: false, reason: 'CI environment detected' };
52
+ }
53
+ // Skip if explicitly disabled
54
+ if (process.env.CLAUDE_FLOW_AUTO_UPDATE === 'false') {
55
+ return { allowed: false, reason: 'Auto-update disabled via environment' };
56
+ }
57
+ // Force update if requested
58
+ if (process.env.CLAUDE_FLOW_FORCE_UPDATE === 'true') {
59
+ return { allowed: true };
60
+ }
61
+ const state = loadState();
62
+ // Check daily limit
63
+ if (state.checksToday >= MAX_CHECKS_PER_DAY) {
64
+ return { allowed: false, reason: `Daily check limit (${MAX_CHECKS_PER_DAY}) reached` };
65
+ }
66
+ // Check time interval
67
+ if (state.lastCheck) {
68
+ const lastCheckTime = new Date(state.lastCheck).getTime();
69
+ const now = Date.now();
70
+ const hoursSinceLastCheck = (now - lastCheckTime) / (1000 * 60 * 60);
71
+ if (hoursSinceLastCheck < intervalHours) {
72
+ const nextCheck = Math.ceil(intervalHours - hoursSinceLastCheck);
73
+ return {
74
+ allowed: false,
75
+ reason: `Last check was ${Math.floor(hoursSinceLastCheck)}h ago (next check in ~${nextCheck}h)`
76
+ };
77
+ }
78
+ }
79
+ return { allowed: true };
80
+ }
81
+ export function recordCheck(packageVersions) {
82
+ const state = loadState();
83
+ state.lastCheck = new Date().toISOString();
84
+ state.checksToday += 1;
85
+ state.packageVersions = { ...state.packageVersions, ...packageVersions };
86
+ saveState(state);
87
+ }
88
+ export function getCachedVersions() {
89
+ return loadState().packageVersions;
90
+ }
91
+ export function clearCache() {
92
+ if (fs.existsSync(STATE_FILE)) {
93
+ fs.unlinkSync(STATE_FILE);
94
+ }
95
+ }
96
+ //# sourceMappingURL=rate-limiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../../src/update/rate-limiter.ts"],"names":[],"mappings":"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"}