@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.
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codebakers/cli",
3
- "version": "3.3.8",
3
+ "version": "3.3.10",
4
4
  "description": "CodeBakers CLI - Production patterns for AI-assisted development",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
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