vibecodingmachine-core 1.0.2 → 2025.11.2-7.1302

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 (49) hide show
  1. package/.babelrc +13 -13
  2. package/README.md +28 -28
  3. package/__tests__/applescript-manager-claude-fix.test.js +286 -286
  4. package/__tests__/requirement-2-auto-start-looping.test.js +69 -69
  5. package/__tests__/requirement-3-auto-start-looping.test.js +69 -69
  6. package/__tests__/requirement-4-auto-start-looping.test.js +69 -69
  7. package/__tests__/requirement-6-auto-start-looping.test.js +73 -73
  8. package/__tests__/requirement-7-status-tracking.test.js +332 -332
  9. package/jest.config.js +18 -18
  10. package/jest.setup.js +12 -12
  11. package/package.json +48 -48
  12. package/src/auth/access-denied.html +119 -119
  13. package/src/auth/shared-auth-storage.js +230 -230
  14. package/src/autonomous-mode/feature-implementer.cjs +70 -70
  15. package/src/autonomous-mode/feature-implementer.js +425 -425
  16. package/src/chat-management/chat-manager.cjs +71 -71
  17. package/src/chat-management/chat-manager.js +342 -342
  18. package/src/ide-integration/__tests__/applescript-manager-thread-closure.test.js +227 -227
  19. package/src/ide-integration/aider-cli-manager.cjs +850 -850
  20. package/src/ide-integration/applescript-manager.cjs +1088 -1088
  21. package/src/ide-integration/applescript-manager.js +2802 -2802
  22. package/src/ide-integration/applescript-utils.js +306 -306
  23. package/src/ide-integration/cdp-manager.cjs +221 -221
  24. package/src/ide-integration/cdp-manager.js +321 -321
  25. package/src/ide-integration/claude-code-cli-manager.cjs +301 -301
  26. package/src/ide-integration/cline-cli-manager.cjs +2252 -2252
  27. package/src/ide-integration/continue-cli-manager.js +431 -431
  28. package/src/ide-integration/provider-manager.cjs +354 -354
  29. package/src/ide-integration/quota-detector.cjs +34 -34
  30. package/src/ide-integration/quota-detector.js +349 -349
  31. package/src/ide-integration/windows-automation-manager.js +262 -262
  32. package/src/index.cjs +47 -43
  33. package/src/index.js +17 -17
  34. package/src/llm/direct-llm-manager.cjs +609 -609
  35. package/src/ui/ButtonComponents.js +247 -247
  36. package/src/ui/ChatInterface.js +499 -499
  37. package/src/ui/StateManager.js +259 -259
  38. package/src/utils/audit-logger.cjs +116 -116
  39. package/src/utils/config-helpers.cjs +94 -94
  40. package/src/utils/config-helpers.js +94 -94
  41. package/src/utils/electron-update-checker.js +113 -85
  42. package/src/utils/gcloud-auth.cjs +394 -394
  43. package/src/utils/logger.cjs +193 -193
  44. package/src/utils/logger.js +191 -191
  45. package/src/utils/repo-helpers.cjs +120 -120
  46. package/src/utils/repo-helpers.js +120 -120
  47. package/src/utils/requirement-helpers.js +432 -432
  48. package/src/utils/update-checker.js +227 -167
  49. package/src/utils/version-checker.js +169 -0
@@ -1,259 +1,259 @@
1
- /**
2
- * Shared State Manager
3
- * Manages state synchronization between electron app and VSCode extension
4
- */
5
-
6
- class StateManager {
7
- constructor() {
8
- this.state = {
9
- autonomousMode: false,
10
- isPaused: false,
11
- isStopped: false,
12
- isCheckingQuota: false,
13
- isOpeningIde: false,
14
- currentIde: 'vscode', // Default IDE
15
- featureProgress: 0,
16
- currentFeature: null,
17
- status: 'Ready to chat',
18
- messages: [],
19
- tabs: [],
20
- activeTabId: null
21
- };
22
-
23
- this.listeners = new Set();
24
- this.storageKey = 'vibecodingmachine-shared-state';
25
- }
26
-
27
- // Get current state
28
- getState() {
29
- return { ...this.state };
30
- }
31
-
32
- // Update state and notify listeners
33
- setState(updates) {
34
- const oldState = { ...this.state };
35
- this.state = { ...this.state, ...updates };
36
-
37
- // Save to localStorage for persistence
38
- this.saveToStorage();
39
-
40
- // Notify all listeners
41
- this.listeners.forEach(listener => {
42
- try {
43
- listener(this.state, oldState);
44
- } catch (error) {
45
- console.error('State listener error:', error);
46
- }
47
- });
48
- }
49
-
50
- // Subscribe to state changes
51
- subscribe(listener) {
52
- this.listeners.add(listener);
53
-
54
- // Return unsubscribe function
55
- return () => {
56
- this.listeners.delete(listener);
57
- };
58
- }
59
-
60
- // Save state to localStorage
61
- saveToStorage() {
62
- try {
63
- localStorage.setItem(this.storageKey, JSON.stringify(this.state));
64
- } catch (error) {
65
- console.error('Failed to save state to storage:', error);
66
- }
67
- }
68
-
69
- // Load state from localStorage
70
- loadFromStorage() {
71
- try {
72
- const saved = localStorage.getItem(this.storageKey);
73
- if (saved) {
74
- const parsed = JSON.parse(saved);
75
- this.setState(parsed);
76
- }
77
- } catch (error) {
78
- console.error('Failed to load state from storage:', error);
79
- }
80
- }
81
-
82
- // Autonomous mode actions
83
- startAutonomousMode(ide) {
84
- this.setState({
85
- autonomousMode: true,
86
- isPaused: false,
87
- isStopped: false,
88
- currentIde: ide,
89
- status: 'Starting autonomous mode...',
90
- featureProgress: 0
91
- });
92
- }
93
-
94
- stopAutonomousMode() {
95
- this.setState({
96
- autonomousMode: false,
97
- isPaused: false,
98
- isStopped: true,
99
- status: 'Autonomous mode stopped',
100
- featureProgress: 0,
101
- currentFeature: null
102
- });
103
- }
104
-
105
- pauseAutonomousMode() {
106
- this.setState({
107
- isPaused: true,
108
- status: 'Autonomous mode paused'
109
- });
110
- }
111
-
112
- resumeAutonomousMode() {
113
- this.setState({
114
- isPaused: false,
115
- status: 'Autonomous mode resumed'
116
- });
117
- }
118
-
119
- togglePause() {
120
- if (this.state.isPaused) {
121
- this.resumeAutonomousMode();
122
- } else {
123
- this.pauseAutonomousMode();
124
- }
125
- }
126
-
127
- // Quota checking
128
- startQuotaCheck() {
129
- this.setState({
130
- isCheckingQuota: true,
131
- status: 'Checking quota...'
132
- });
133
- }
134
-
135
- finishQuotaCheck(result) {
136
- this.setState({
137
- isCheckingQuota: false,
138
- status: result.success ? 'Quota check completed' : 'Quota check failed'
139
- });
140
- }
141
-
142
- // IDE opening
143
- startOpeningIde() {
144
- this.setState({
145
- isOpeningIde: true,
146
- status: 'Opening IDE...'
147
- });
148
- }
149
-
150
- finishOpeningIde(result) {
151
- this.setState({
152
- isOpeningIde: false,
153
- status: result.success ? 'IDE opened successfully' : 'Failed to open IDE'
154
- });
155
- }
156
-
157
- // Feature progress
158
- updateFeatureProgress(progress, feature = null) {
159
- this.setState({
160
- featureProgress: progress,
161
- currentFeature: feature,
162
- status: `Autonomous mode progress: ${progress}%`
163
- });
164
- }
165
-
166
- // Message management
167
- addMessage(role, text) {
168
- const message = {
169
- id: Date.now(),
170
- role,
171
- text,
172
- timestamp: new Date().toISOString()
173
- };
174
-
175
- this.setState({
176
- messages: [...this.state.messages, message]
177
- });
178
- }
179
-
180
- clearMessages() {
181
- this.setState({
182
- messages: []
183
- });
184
- }
185
-
186
- // Tab management
187
- setTabs(tabs) {
188
- this.setState({
189
- tabs,
190
- activeTabId: tabs.length > 0 ? tabs[0].id : null
191
- });
192
- }
193
-
194
- setActiveTab(tabId) {
195
- this.setState({
196
- activeTabId: tabId
197
- });
198
- }
199
-
200
- // Status updates
201
- updateStatus(status) {
202
- this.setState({
203
- status
204
- });
205
- }
206
-
207
- // Reset state
208
- reset() {
209
- this.setState({
210
- autonomousMode: false,
211
- isPaused: false,
212
- isStopped: false,
213
- isCheckingQuota: false,
214
- isOpeningIde: false,
215
- currentIde: 'vscode', // Default IDE
216
- featureProgress: 0,
217
- currentFeature: null,
218
- status: 'Ready to chat',
219
- messages: [],
220
- tabs: [],
221
- activeTabId: null
222
- });
223
- }
224
-
225
- // Get specific state values
226
- isAutonomousMode() {
227
- return this.state.autonomousMode;
228
- }
229
-
230
- isPaused() {
231
- return this.state.isPaused;
232
- }
233
-
234
- isStopped() {
235
- return this.state.isStopped;
236
- }
237
-
238
- getCurrentIde() {
239
- return this.state.currentIde;
240
- }
241
-
242
- getStatus() {
243
- return this.state.status;
244
- }
245
-
246
- getProgress() {
247
- return this.state.featureProgress;
248
- }
249
- }
250
-
251
- // Create singleton instance
252
- const stateManager = new StateManager();
253
-
254
- // Load initial state from storage
255
- if (typeof window !== 'undefined') {
256
- stateManager.loadFromStorage();
257
- }
258
-
259
- export { StateManager, stateManager };
1
+ /**
2
+ * Shared State Manager
3
+ * Manages state synchronization between electron app and VSCode extension
4
+ */
5
+
6
+ class StateManager {
7
+ constructor() {
8
+ this.state = {
9
+ autonomousMode: false,
10
+ isPaused: false,
11
+ isStopped: false,
12
+ isCheckingQuota: false,
13
+ isOpeningIde: false,
14
+ currentIde: 'vscode', // Default IDE
15
+ featureProgress: 0,
16
+ currentFeature: null,
17
+ status: 'Ready to chat',
18
+ messages: [],
19
+ tabs: [],
20
+ activeTabId: null
21
+ };
22
+
23
+ this.listeners = new Set();
24
+ this.storageKey = 'vibecodingmachine-shared-state';
25
+ }
26
+
27
+ // Get current state
28
+ getState() {
29
+ return { ...this.state };
30
+ }
31
+
32
+ // Update state and notify listeners
33
+ setState(updates) {
34
+ const oldState = { ...this.state };
35
+ this.state = { ...this.state, ...updates };
36
+
37
+ // Save to localStorage for persistence
38
+ this.saveToStorage();
39
+
40
+ // Notify all listeners
41
+ this.listeners.forEach(listener => {
42
+ try {
43
+ listener(this.state, oldState);
44
+ } catch (error) {
45
+ console.error('State listener error:', error);
46
+ }
47
+ });
48
+ }
49
+
50
+ // Subscribe to state changes
51
+ subscribe(listener) {
52
+ this.listeners.add(listener);
53
+
54
+ // Return unsubscribe function
55
+ return () => {
56
+ this.listeners.delete(listener);
57
+ };
58
+ }
59
+
60
+ // Save state to localStorage
61
+ saveToStorage() {
62
+ try {
63
+ localStorage.setItem(this.storageKey, JSON.stringify(this.state));
64
+ } catch (error) {
65
+ console.error('Failed to save state to storage:', error);
66
+ }
67
+ }
68
+
69
+ // Load state from localStorage
70
+ loadFromStorage() {
71
+ try {
72
+ const saved = localStorage.getItem(this.storageKey);
73
+ if (saved) {
74
+ const parsed = JSON.parse(saved);
75
+ this.setState(parsed);
76
+ }
77
+ } catch (error) {
78
+ console.error('Failed to load state from storage:', error);
79
+ }
80
+ }
81
+
82
+ // Autonomous mode actions
83
+ startAutonomousMode(ide) {
84
+ this.setState({
85
+ autonomousMode: true,
86
+ isPaused: false,
87
+ isStopped: false,
88
+ currentIde: ide,
89
+ status: 'Starting autonomous mode...',
90
+ featureProgress: 0
91
+ });
92
+ }
93
+
94
+ stopAutonomousMode() {
95
+ this.setState({
96
+ autonomousMode: false,
97
+ isPaused: false,
98
+ isStopped: true,
99
+ status: 'Autonomous mode stopped',
100
+ featureProgress: 0,
101
+ currentFeature: null
102
+ });
103
+ }
104
+
105
+ pauseAutonomousMode() {
106
+ this.setState({
107
+ isPaused: true,
108
+ status: 'Autonomous mode paused'
109
+ });
110
+ }
111
+
112
+ resumeAutonomousMode() {
113
+ this.setState({
114
+ isPaused: false,
115
+ status: 'Autonomous mode resumed'
116
+ });
117
+ }
118
+
119
+ togglePause() {
120
+ if (this.state.isPaused) {
121
+ this.resumeAutonomousMode();
122
+ } else {
123
+ this.pauseAutonomousMode();
124
+ }
125
+ }
126
+
127
+ // Quota checking
128
+ startQuotaCheck() {
129
+ this.setState({
130
+ isCheckingQuota: true,
131
+ status: 'Checking quota...'
132
+ });
133
+ }
134
+
135
+ finishQuotaCheck(result) {
136
+ this.setState({
137
+ isCheckingQuota: false,
138
+ status: result.success ? 'Quota check completed' : 'Quota check failed'
139
+ });
140
+ }
141
+
142
+ // IDE opening
143
+ startOpeningIde() {
144
+ this.setState({
145
+ isOpeningIde: true,
146
+ status: 'Opening IDE...'
147
+ });
148
+ }
149
+
150
+ finishOpeningIde(result) {
151
+ this.setState({
152
+ isOpeningIde: false,
153
+ status: result.success ? 'IDE opened successfully' : 'Failed to open IDE'
154
+ });
155
+ }
156
+
157
+ // Feature progress
158
+ updateFeatureProgress(progress, feature = null) {
159
+ this.setState({
160
+ featureProgress: progress,
161
+ currentFeature: feature,
162
+ status: `Autonomous mode progress: ${progress}%`
163
+ });
164
+ }
165
+
166
+ // Message management
167
+ addMessage(role, text) {
168
+ const message = {
169
+ id: Date.now(),
170
+ role,
171
+ text,
172
+ timestamp: new Date().toISOString()
173
+ };
174
+
175
+ this.setState({
176
+ messages: [...this.state.messages, message]
177
+ });
178
+ }
179
+
180
+ clearMessages() {
181
+ this.setState({
182
+ messages: []
183
+ });
184
+ }
185
+
186
+ // Tab management
187
+ setTabs(tabs) {
188
+ this.setState({
189
+ tabs,
190
+ activeTabId: tabs.length > 0 ? tabs[0].id : null
191
+ });
192
+ }
193
+
194
+ setActiveTab(tabId) {
195
+ this.setState({
196
+ activeTabId: tabId
197
+ });
198
+ }
199
+
200
+ // Status updates
201
+ updateStatus(status) {
202
+ this.setState({
203
+ status
204
+ });
205
+ }
206
+
207
+ // Reset state
208
+ reset() {
209
+ this.setState({
210
+ autonomousMode: false,
211
+ isPaused: false,
212
+ isStopped: false,
213
+ isCheckingQuota: false,
214
+ isOpeningIde: false,
215
+ currentIde: 'vscode', // Default IDE
216
+ featureProgress: 0,
217
+ currentFeature: null,
218
+ status: 'Ready to chat',
219
+ messages: [],
220
+ tabs: [],
221
+ activeTabId: null
222
+ });
223
+ }
224
+
225
+ // Get specific state values
226
+ isAutonomousMode() {
227
+ return this.state.autonomousMode;
228
+ }
229
+
230
+ isPaused() {
231
+ return this.state.isPaused;
232
+ }
233
+
234
+ isStopped() {
235
+ return this.state.isStopped;
236
+ }
237
+
238
+ getCurrentIde() {
239
+ return this.state.currentIde;
240
+ }
241
+
242
+ getStatus() {
243
+ return this.state.status;
244
+ }
245
+
246
+ getProgress() {
247
+ return this.state.featureProgress;
248
+ }
249
+ }
250
+
251
+ // Create singleton instance
252
+ const stateManager = new StateManager();
253
+
254
+ // Load initial state from storage
255
+ if (typeof window !== 'undefined') {
256
+ stateManager.loadFromStorage();
257
+ }
258
+
259
+ export { StateManager, stateManager };