@codebakers/cli 3.3.8 → 3.3.10
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/mcp/server.js +38 -0
- package/package.json +1 -1
- package/src/mcp/server.ts +79 -0
package/dist/mcp/server.js
CHANGED
|
@@ -75,6 +75,44 @@ class CodeBakersServer {
|
|
|
75
75
|
this.checkAndAutoUpdate().catch(() => {
|
|
76
76
|
// Silently ignore errors - don't interrupt user
|
|
77
77
|
});
|
|
78
|
+
// Check for CLI version updates (non-blocking)
|
|
79
|
+
this.checkCliVersion().catch(() => {
|
|
80
|
+
// Silently ignore errors
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Check if a newer CLI version is available and notify user
|
|
85
|
+
*/
|
|
86
|
+
async checkCliVersion() {
|
|
87
|
+
try {
|
|
88
|
+
const currentVersion = (0, api_js_1.getCliVersion)();
|
|
89
|
+
// Fetch latest version from npm
|
|
90
|
+
const response = await fetch('https://registry.npmjs.org/@codebakers/cli/latest', {
|
|
91
|
+
headers: { 'Accept': 'application/json' },
|
|
92
|
+
});
|
|
93
|
+
if (!response.ok)
|
|
94
|
+
return;
|
|
95
|
+
const data = await response.json();
|
|
96
|
+
const latestVersion = data.version;
|
|
97
|
+
if (latestVersion && latestVersion !== currentVersion) {
|
|
98
|
+
// Compare versions (simple comparison - assumes semver)
|
|
99
|
+
const current = currentVersion.split('.').map(Number);
|
|
100
|
+
const latest = latestVersion.split('.').map(Number);
|
|
101
|
+
const isNewer = latest[0] > current[0] ||
|
|
102
|
+
(latest[0] === current[0] && latest[1] > current[1]) ||
|
|
103
|
+
(latest[0] === current[0] && latest[1] === current[1] && latest[2] > current[2]);
|
|
104
|
+
if (isNewer) {
|
|
105
|
+
console.error(`\n╔════════════════════════════════════════════════════════════╗`);
|
|
106
|
+
console.error(`║ 🆕 CodeBakers CLI Update Available: v${currentVersion} → v${latestVersion.padEnd(10)}║`);
|
|
107
|
+
console.error(`║ ║`);
|
|
108
|
+
console.error(`║ Restart Cursor/Claude Code to get the latest features! ║`);
|
|
109
|
+
console.error(`╚════════════════════════════════════════════════════════════╝\n`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// Silently ignore - don't interrupt user experience
|
|
115
|
+
}
|
|
78
116
|
}
|
|
79
117
|
/**
|
|
80
118
|
* Get authorization headers for API requests
|
package/package.json
CHANGED
package/src/mcp/server.ts
CHANGED
|
@@ -65,6 +65,9 @@ class CodeBakersServer {
|
|
|
65
65
|
private authMode: 'apiKey' | 'trial' | 'none';
|
|
66
66
|
private autoUpdateChecked = false;
|
|
67
67
|
private autoUpdateInProgress = false;
|
|
68
|
+
private pendingUpdate: { current: string; latest: string } | null = null;
|
|
69
|
+
private lastUpdateCheck = 0;
|
|
70
|
+
private updateCheckInterval = 60 * 60 * 1000; // Check every hour
|
|
68
71
|
|
|
69
72
|
constructor() {
|
|
70
73
|
this.apiKey = getApiKey();
|
|
@@ -90,6 +93,79 @@ class CodeBakersServer {
|
|
|
90
93
|
this.checkAndAutoUpdate().catch(() => {
|
|
91
94
|
// Silently ignore errors - don't interrupt user
|
|
92
95
|
});
|
|
96
|
+
|
|
97
|
+
// Check for CLI version updates (non-blocking)
|
|
98
|
+
this.checkCliVersion().catch(() => {
|
|
99
|
+
// Silently ignore errors
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
// Start periodic update checks (every hour)
|
|
103
|
+
setInterval(() => {
|
|
104
|
+
this.checkCliVersion().catch(() => {});
|
|
105
|
+
}, this.updateCheckInterval);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Get update notice if a newer version is available
|
|
110
|
+
*/
|
|
111
|
+
private getUpdateNotice(): string {
|
|
112
|
+
if (this.pendingUpdate) {
|
|
113
|
+
return `\n\n---\n🆕 **CodeBakers Update Available:** v${this.pendingUpdate.current} → v${this.pendingUpdate.latest}\nRestart Cursor/Claude Code to get new features!`;
|
|
114
|
+
}
|
|
115
|
+
return '';
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Check if a newer CLI version is available and notify user
|
|
120
|
+
*/
|
|
121
|
+
private async checkCliVersion(): Promise<void> {
|
|
122
|
+
try {
|
|
123
|
+
// Rate limit checks
|
|
124
|
+
const now = Date.now();
|
|
125
|
+
if (now - this.lastUpdateCheck < 5 * 60 * 1000) return; // Min 5 minutes between checks
|
|
126
|
+
this.lastUpdateCheck = now;
|
|
127
|
+
|
|
128
|
+
const currentVersion = getCliVersion();
|
|
129
|
+
|
|
130
|
+
// Fetch latest version from npm
|
|
131
|
+
const response = await fetch('https://registry.npmjs.org/@codebakers/cli/latest', {
|
|
132
|
+
headers: { 'Accept': 'application/json' },
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
if (!response.ok) return;
|
|
136
|
+
|
|
137
|
+
const data = await response.json();
|
|
138
|
+
const latestVersion = data.version;
|
|
139
|
+
|
|
140
|
+
if (latestVersion && latestVersion !== currentVersion) {
|
|
141
|
+
// Compare versions (simple comparison - assumes semver)
|
|
142
|
+
const current = currentVersion.split('.').map(Number);
|
|
143
|
+
const latest = latestVersion.split('.').map(Number);
|
|
144
|
+
|
|
145
|
+
const isNewer = latest[0] > current[0] ||
|
|
146
|
+
(latest[0] === current[0] && latest[1] > current[1]) ||
|
|
147
|
+
(latest[0] === current[0] && latest[1] === current[1] && latest[2] > current[2]);
|
|
148
|
+
|
|
149
|
+
if (isNewer) {
|
|
150
|
+
// Store pending update for inclusion in tool responses
|
|
151
|
+
this.pendingUpdate = { current: currentVersion, latest: latestVersion };
|
|
152
|
+
|
|
153
|
+
// Also log to stderr for immediate visibility
|
|
154
|
+
console.error(`\n╔════════════════════════════════════════════════════════════╗`);
|
|
155
|
+
console.error(`║ 🆕 CodeBakers CLI Update Available: v${currentVersion} → v${latestVersion.padEnd(10)}║`);
|
|
156
|
+
console.error(`║ ║`);
|
|
157
|
+
console.error(`║ Restart Cursor/Claude Code to get the latest features! ║`);
|
|
158
|
+
console.error(`╚════════════════════════════════════════════════════════════╝\n`);
|
|
159
|
+
} else {
|
|
160
|
+
// No update available
|
|
161
|
+
this.pendingUpdate = null;
|
|
162
|
+
}
|
|
163
|
+
} else {
|
|
164
|
+
this.pendingUpdate = null;
|
|
165
|
+
}
|
|
166
|
+
} catch {
|
|
167
|
+
// Silently ignore - don't interrupt user experience
|
|
168
|
+
}
|
|
93
169
|
}
|
|
94
170
|
|
|
95
171
|
/**
|
|
@@ -6984,6 +7060,9 @@ ${events.includes('call-started') ? ` case 'call-started':
|
|
|
6984
7060
|
response += `Could not read guardian state. Run \`guardian_analyze\` to rebuild.\n`;
|
|
6985
7061
|
}
|
|
6986
7062
|
|
|
7063
|
+
// Add update notice if available
|
|
7064
|
+
response += this.getUpdateNotice();
|
|
7065
|
+
|
|
6987
7066
|
return { content: [{ type: 'text' as const, text: response }] };
|
|
6988
7067
|
}
|
|
6989
7068
|
|