vibecodingmachine-core 2026.3.9-907 → 2026.3.10-1547

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 (42) hide show
  1. package/package.json +1 -1
  2. package/src/auth/access-denied.html +119 -119
  3. package/src/auth/shared-auth-storage.js +267 -267
  4. package/src/autonomous-mode/feature-implementer.cjs +70 -70
  5. package/src/autonomous-mode/feature-implementer.js +425 -425
  6. package/src/beta-request.js +160 -160
  7. package/src/chat-management/chat-manager.cjs +71 -71
  8. package/src/chat-management/chat-manager.js +342 -342
  9. package/src/compliance/compliance-prompt.js +183 -183
  10. package/src/ide-integration/aider-cli-manager.cjs +850 -850
  11. package/src/ide-integration/applescript-manager.cjs +3215 -3215
  12. package/src/ide-integration/applescript-utils.js +314 -314
  13. package/src/ide-integration/cdp-manager.cjs +221 -221
  14. package/src/ide-integration/claude-code-cli-manager.cjs +456 -456
  15. package/src/ide-integration/cline-cli-manager.cjs +2252 -2252
  16. package/src/ide-integration/continue-cli-manager.js +431 -431
  17. package/src/ide-integration/provider-manager.cjs +595 -595
  18. package/src/ide-integration/quota-detector.cjs +399 -399
  19. package/src/ide-integration/windows-automation-manager.js +532 -4
  20. package/src/ide-integration/windows-ide-manager.js +12 -3
  21. package/src/index.cjs +142 -142
  22. package/src/llm/direct-llm-manager.cjs +1299 -1299
  23. package/src/localization/index.js +147 -147
  24. package/src/quota-management/index.js +108 -108
  25. package/src/requirement-numbering.js +164 -164
  26. package/src/sync/aws-setup.js +445 -445
  27. package/src/ui/ButtonComponents.js +247 -247
  28. package/src/ui/ChatInterface.js +499 -499
  29. package/src/ui/StateManager.js +259 -259
  30. package/src/utils/audit-logger.cjs +116 -116
  31. package/src/utils/config-helpers.cjs +94 -94
  32. package/src/utils/config-helpers.js +94 -94
  33. package/src/utils/env-helpers.js +54 -54
  34. package/src/utils/error-reporter.js +117 -117
  35. package/src/utils/gcloud-auth.cjs +394 -394
  36. package/src/utils/git-branch-manager.js +278 -278
  37. package/src/utils/logger.cjs +193 -193
  38. package/src/utils/logger.js +191 -191
  39. package/src/utils/repo-helpers.cjs +120 -120
  40. package/src/utils/repo-helpers.js +120 -120
  41. package/src/utils/update-checker.js +246 -246
  42. package/src/utils/version-checker.js +170 -170
@@ -1,164 +1,164 @@
1
- const fs = require('fs-extra');
2
- const path = require('path');
3
-
4
- /**
5
- * Get metadata file path for storing requirement counter
6
- * @param {string} repoPath - Path to repository
7
- * @returns {string} Path to metadata file
8
- */
9
- function getMetadataPath(repoPath) {
10
- return path.join(repoPath, '.vibecodingmachine', 'requirement-metadata.json');
11
- }
12
-
13
- /**
14
- * Get the next requirement number for this repository
15
- * @param {string} repoPath - Path to repository
16
- * @returns {Promise<number>} Next requirement number
17
- */
18
- async function getNextRequirementNumber(repoPath) {
19
- const metadataPath = getMetadataPath(repoPath);
20
-
21
- try {
22
- await fs.ensureFile(metadataPath);
23
- const metadata = await fs.readJson(metadataPath).catch(() => ({ lastRequirementNumber: 0 }));
24
-
25
- const nextNumber = (metadata.lastRequirementNumber || 0) + 1;
26
-
27
- // Save the incremented number
28
- metadata.lastRequirementNumber = nextNumber;
29
- await fs.writeJson(metadataPath, metadata, { spaces: 2 });
30
-
31
- return nextNumber;
32
- } catch (error) {
33
- // Default to 1 if there's any error
34
- console.error('Error getting next requirement number:', error.message);
35
- return 1;
36
- }
37
- }
38
-
39
- /**
40
- * Set the last requirement number (used during initialization)
41
- * @param {string} repoPath - Path to repository
42
- * @param {number} lastNumber - Last requirement number
43
- */
44
- async function setLastRequirementNumber(repoPath, lastNumber) {
45
- const metadataPath = getMetadataPath(repoPath);
46
-
47
- await fs.ensureFile(metadataPath);
48
- const metadata = await fs.readJson(metadataPath).catch(() => ({}));
49
- metadata.lastRequirementNumber = lastNumber;
50
- await fs.writeJson(metadataPath, metadata, { spaces: 2 });
51
- }
52
-
53
- /**
54
- * Extract requirement number from requirement title
55
- * @param {string} title - Requirement title
56
- * @returns {number|null} Requirement number or null if not found
57
- */
58
- function extractRequirementNumber(title) {
59
- const match = title.match(/^R(\d+):/);
60
- return match ? parseInt(match[1], 10) : null;
61
- }
62
-
63
- /**
64
- * Number all existing requirements in a requirements file
65
- * @param {string} reqPath - Path to requirements file
66
- * @param {string} repoPath - Path to repository
67
- * @returns {Promise<number>} Number of requirements numbered
68
- */
69
- async function numberAllRequirements(reqPath, repoPath) {
70
- if (!await fs.pathExists(reqPath)) {
71
- return 0;
72
- }
73
-
74
- const content = await fs.readFile(reqPath, 'utf8');
75
- const lines = content.split('\n');
76
- const newLines = [];
77
-
78
- let requirementCount = 0;
79
- let maxExistingNumber = 0;
80
-
81
- // First pass: collect existing numbers and count requirements
82
- for (const line of lines) {
83
- if (line.trim().startsWith('###')) {
84
- const title = line.trim().substring(3).trim();
85
- const existingNumber = extractRequirementNumber(title);
86
-
87
- if (existingNumber) {
88
- maxExistingNumber = Math.max(maxExistingNumber, existingNumber);
89
- } else {
90
- // This requirement needs numbering
91
- requirementCount++;
92
- }
93
- }
94
- }
95
-
96
- // Start numbering from max existing + 1
97
- let currentNumber = maxExistingNumber + 1;
98
- let numbered = 0;
99
-
100
- // Second pass: add numbers to requirements that don't have them
101
- for (const line of lines) {
102
- if (line.trim().startsWith('###')) {
103
- const title = line.trim().substring(3).trim();
104
- const existingNumber = extractRequirementNumber(title);
105
-
106
- if (!existingNumber) {
107
- // Add number to this requirement
108
- newLines.push(`### R${currentNumber}: ${title}`);
109
- currentNumber++;
110
- numbered++;
111
- } else {
112
- // Keep existing numbered requirement as-is
113
- newLines.push(line);
114
- }
115
- } else {
116
- newLines.push(line);
117
- }
118
- }
119
-
120
- // Save the updated file
121
- await fs.writeFile(reqPath, newLines.join('\n'));
122
-
123
- // Update metadata with the highest number used
124
- await setLastRequirementNumber(repoPath, currentNumber - 1);
125
-
126
- return numbered;
127
- }
128
-
129
- /**
130
- * Create a git branch name from requirement number and title
131
- * @param {number} reqNumber - Requirement number
132
- * @param {string} title - Requirement title
133
- * @returns {string} Branch name (e.g., "R1_email_system")
134
- */
135
- function createBranchName(reqNumber, title) {
136
- // Remove requirement number from title if present
137
- let cleanTitle = title.replace(/^R\d+:\s*/, '').trim();
138
-
139
- // Take first few words (up to 3-4 words, max 30 chars)
140
- const words = cleanTitle.split(/\s+/);
141
- let branchSuffix = '';
142
-
143
- for (const word of words) {
144
- const candidate = branchSuffix ? `${branchSuffix}_${word}` : word;
145
- if (candidate.length > 30) break;
146
- branchSuffix = candidate;
147
- }
148
-
149
- // Clean up branch suffix: lowercase, remove special chars
150
- branchSuffix = branchSuffix
151
- .toLowerCase()
152
- .replace(/[^a-z0-9]+/g, '_')
153
- .replace(/^_+|_+$/g, '');
154
-
155
- return branchSuffix ? `R${reqNumber}_${branchSuffix}` : `R${reqNumber}`;
156
- }
157
-
158
- module.exports = {
159
- getNextRequirementNumber,
160
- setLastRequirementNumber,
161
- extractRequirementNumber,
162
- numberAllRequirements,
163
- createBranchName
164
- };
1
+ const fs = require('fs-extra');
2
+ const path = require('path');
3
+
4
+ /**
5
+ * Get metadata file path for storing requirement counter
6
+ * @param {string} repoPath - Path to repository
7
+ * @returns {string} Path to metadata file
8
+ */
9
+ function getMetadataPath(repoPath) {
10
+ return path.join(repoPath, '.vibecodingmachine', 'requirement-metadata.json');
11
+ }
12
+
13
+ /**
14
+ * Get the next requirement number for this repository
15
+ * @param {string} repoPath - Path to repository
16
+ * @returns {Promise<number>} Next requirement number
17
+ */
18
+ async function getNextRequirementNumber(repoPath) {
19
+ const metadataPath = getMetadataPath(repoPath);
20
+
21
+ try {
22
+ await fs.ensureFile(metadataPath);
23
+ const metadata = await fs.readJson(metadataPath).catch(() => ({ lastRequirementNumber: 0 }));
24
+
25
+ const nextNumber = (metadata.lastRequirementNumber || 0) + 1;
26
+
27
+ // Save the incremented number
28
+ metadata.lastRequirementNumber = nextNumber;
29
+ await fs.writeJson(metadataPath, metadata, { spaces: 2 });
30
+
31
+ return nextNumber;
32
+ } catch (error) {
33
+ // Default to 1 if there's any error
34
+ console.error('Error getting next requirement number:', error.message);
35
+ return 1;
36
+ }
37
+ }
38
+
39
+ /**
40
+ * Set the last requirement number (used during initialization)
41
+ * @param {string} repoPath - Path to repository
42
+ * @param {number} lastNumber - Last requirement number
43
+ */
44
+ async function setLastRequirementNumber(repoPath, lastNumber) {
45
+ const metadataPath = getMetadataPath(repoPath);
46
+
47
+ await fs.ensureFile(metadataPath);
48
+ const metadata = await fs.readJson(metadataPath).catch(() => ({}));
49
+ metadata.lastRequirementNumber = lastNumber;
50
+ await fs.writeJson(metadataPath, metadata, { spaces: 2 });
51
+ }
52
+
53
+ /**
54
+ * Extract requirement number from requirement title
55
+ * @param {string} title - Requirement title
56
+ * @returns {number|null} Requirement number or null if not found
57
+ */
58
+ function extractRequirementNumber(title) {
59
+ const match = title.match(/^R(\d+):/);
60
+ return match ? parseInt(match[1], 10) : null;
61
+ }
62
+
63
+ /**
64
+ * Number all existing requirements in a requirements file
65
+ * @param {string} reqPath - Path to requirements file
66
+ * @param {string} repoPath - Path to repository
67
+ * @returns {Promise<number>} Number of requirements numbered
68
+ */
69
+ async function numberAllRequirements(reqPath, repoPath) {
70
+ if (!await fs.pathExists(reqPath)) {
71
+ return 0;
72
+ }
73
+
74
+ const content = await fs.readFile(reqPath, 'utf8');
75
+ const lines = content.split('\n');
76
+ const newLines = [];
77
+
78
+ let requirementCount = 0;
79
+ let maxExistingNumber = 0;
80
+
81
+ // First pass: collect existing numbers and count requirements
82
+ for (const line of lines) {
83
+ if (line.trim().startsWith('###')) {
84
+ const title = line.trim().substring(3).trim();
85
+ const existingNumber = extractRequirementNumber(title);
86
+
87
+ if (existingNumber) {
88
+ maxExistingNumber = Math.max(maxExistingNumber, existingNumber);
89
+ } else {
90
+ // This requirement needs numbering
91
+ requirementCount++;
92
+ }
93
+ }
94
+ }
95
+
96
+ // Start numbering from max existing + 1
97
+ let currentNumber = maxExistingNumber + 1;
98
+ let numbered = 0;
99
+
100
+ // Second pass: add numbers to requirements that don't have them
101
+ for (const line of lines) {
102
+ if (line.trim().startsWith('###')) {
103
+ const title = line.trim().substring(3).trim();
104
+ const existingNumber = extractRequirementNumber(title);
105
+
106
+ if (!existingNumber) {
107
+ // Add number to this requirement
108
+ newLines.push(`### R${currentNumber}: ${title}`);
109
+ currentNumber++;
110
+ numbered++;
111
+ } else {
112
+ // Keep existing numbered requirement as-is
113
+ newLines.push(line);
114
+ }
115
+ } else {
116
+ newLines.push(line);
117
+ }
118
+ }
119
+
120
+ // Save the updated file
121
+ await fs.writeFile(reqPath, newLines.join('\n'));
122
+
123
+ // Update metadata with the highest number used
124
+ await setLastRequirementNumber(repoPath, currentNumber - 1);
125
+
126
+ return numbered;
127
+ }
128
+
129
+ /**
130
+ * Create a git branch name from requirement number and title
131
+ * @param {number} reqNumber - Requirement number
132
+ * @param {string} title - Requirement title
133
+ * @returns {string} Branch name (e.g., "R1_email_system")
134
+ */
135
+ function createBranchName(reqNumber, title) {
136
+ // Remove requirement number from title if present
137
+ let cleanTitle = title.replace(/^R\d+:\s*/, '').trim();
138
+
139
+ // Take first few words (up to 3-4 words, max 30 chars)
140
+ const words = cleanTitle.split(/\s+/);
141
+ let branchSuffix = '';
142
+
143
+ for (const word of words) {
144
+ const candidate = branchSuffix ? `${branchSuffix}_${word}` : word;
145
+ if (candidate.length > 30) break;
146
+ branchSuffix = candidate;
147
+ }
148
+
149
+ // Clean up branch suffix: lowercase, remove special chars
150
+ branchSuffix = branchSuffix
151
+ .toLowerCase()
152
+ .replace(/[^a-z0-9]+/g, '_')
153
+ .replace(/^_+|_+$/g, '');
154
+
155
+ return branchSuffix ? `R${reqNumber}_${branchSuffix}` : `R${reqNumber}`;
156
+ }
157
+
158
+ module.exports = {
159
+ getNextRequirementNumber,
160
+ setLastRequirementNumber,
161
+ extractRequirementNumber,
162
+ numberAllRequirements,
163
+ createBranchName
164
+ };