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.
- package/package.json +1 -1
- package/src/auth/access-denied.html +119 -119
- package/src/auth/shared-auth-storage.js +267 -267
- package/src/autonomous-mode/feature-implementer.cjs +70 -70
- package/src/autonomous-mode/feature-implementer.js +425 -425
- package/src/beta-request.js +160 -160
- package/src/chat-management/chat-manager.cjs +71 -71
- package/src/chat-management/chat-manager.js +342 -342
- package/src/compliance/compliance-prompt.js +183 -183
- package/src/ide-integration/aider-cli-manager.cjs +850 -850
- package/src/ide-integration/applescript-manager.cjs +3215 -3215
- package/src/ide-integration/applescript-utils.js +314 -314
- package/src/ide-integration/cdp-manager.cjs +221 -221
- package/src/ide-integration/claude-code-cli-manager.cjs +456 -456
- package/src/ide-integration/cline-cli-manager.cjs +2252 -2252
- package/src/ide-integration/continue-cli-manager.js +431 -431
- package/src/ide-integration/provider-manager.cjs +595 -595
- package/src/ide-integration/quota-detector.cjs +399 -399
- package/src/ide-integration/windows-automation-manager.js +532 -4
- package/src/ide-integration/windows-ide-manager.js +12 -3
- package/src/index.cjs +142 -142
- package/src/llm/direct-llm-manager.cjs +1299 -1299
- package/src/localization/index.js +147 -147
- package/src/quota-management/index.js +108 -108
- package/src/requirement-numbering.js +164 -164
- package/src/sync/aws-setup.js +445 -445
- package/src/ui/ButtonComponents.js +247 -247
- package/src/ui/ChatInterface.js +499 -499
- package/src/ui/StateManager.js +259 -259
- package/src/utils/audit-logger.cjs +116 -116
- package/src/utils/config-helpers.cjs +94 -94
- package/src/utils/config-helpers.js +94 -94
- package/src/utils/env-helpers.js +54 -54
- package/src/utils/error-reporter.js +117 -117
- package/src/utils/gcloud-auth.cjs +394 -394
- package/src/utils/git-branch-manager.js +278 -278
- package/src/utils/logger.cjs +193 -193
- package/src/utils/logger.js +191 -191
- package/src/utils/repo-helpers.cjs +120 -120
- package/src/utils/repo-helpers.js +120 -120
- package/src/utils/update-checker.js +246 -246
- package/src/utils/version-checker.js +170 -170
|
@@ -1,183 +1,183 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Compliance Prompt Utility
|
|
3
|
-
*
|
|
4
|
-
* Handles prompting users for terms and privacy acceptance
|
|
5
|
-
* across CLI and Electron interfaces
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
const ComplianceManager = require('./compliance-manager')
|
|
9
|
-
|
|
10
|
-
class CompliancePrompt {
|
|
11
|
-
constructor() {
|
|
12
|
-
this.complianceManager = new ComplianceManager()
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Check and prompt for compliance if needed
|
|
17
|
-
* Returns true if compliant, false if user declined
|
|
18
|
-
*/
|
|
19
|
-
async checkAndPrompt(userId, interfaceType = 'cli') {
|
|
20
|
-
try {
|
|
21
|
-
const status = await this.complianceManager.checkComplianceStatus(userId)
|
|
22
|
-
|
|
23
|
-
if (!status.needsAcknowledgment) {
|
|
24
|
-
return true
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// Prompt based on interface
|
|
28
|
-
if (interfaceType === 'cli') {
|
|
29
|
-
return await this.promptCLI(userId, status)
|
|
30
|
-
} else if (interfaceType === 'electron') {
|
|
31
|
-
return await this.promptElectron(userId, status)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
return false
|
|
35
|
-
} catch (error) {
|
|
36
|
-
console.error('Error checking compliance:', error)
|
|
37
|
-
return false
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* CLI prompt for compliance
|
|
43
|
-
*/
|
|
44
|
-
async promptCLI(userId, status) {
|
|
45
|
-
const chalk = require('chalk')
|
|
46
|
-
|
|
47
|
-
// Dynamically require inquirer (only available in CLI context)
|
|
48
|
-
let inquirer
|
|
49
|
-
try {
|
|
50
|
-
inquirer = require('inquirer')
|
|
51
|
-
} catch (error) {
|
|
52
|
-
throw new Error('inquirer module not available - CLI prompting not supported in this context')
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
console.log(chalk.cyan('\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'))
|
|
56
|
-
console.log(chalk.cyan.bold(' 📋 Terms & Privacy Acknowledgment Required'))
|
|
57
|
-
console.log(chalk.cyan('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'))
|
|
58
|
-
|
|
59
|
-
console.log(chalk.white('Before continuing, please review and accept:\n'))
|
|
60
|
-
|
|
61
|
-
const questions = []
|
|
62
|
-
|
|
63
|
-
if (status.requiredActions.includes('terms')) {
|
|
64
|
-
const terms = await this.complianceManager.getTermsOfService()
|
|
65
|
-
|
|
66
|
-
console.log(chalk.yellow('📄 Terms of Service'))
|
|
67
|
-
console.log(chalk.gray('─'.repeat(70)))
|
|
68
|
-
console.log(this.formatForCLI(terms.content))
|
|
69
|
-
console.log(chalk.gray('─'.repeat(70)))
|
|
70
|
-
console.log(chalk.gray(`Version ${terms.version} | Effective: ${terms.effectiveDate}\n`))
|
|
71
|
-
|
|
72
|
-
questions.push({
|
|
73
|
-
type: 'confirm',
|
|
74
|
-
name: 'acceptTerms',
|
|
75
|
-
message: 'Do you accept the Terms of Service?',
|
|
76
|
-
default: false
|
|
77
|
-
})
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
if (status.requiredActions.includes('privacy')) {
|
|
81
|
-
const privacy = await this.complianceManager.getPrivacyPolicy()
|
|
82
|
-
|
|
83
|
-
console.log(chalk.yellow('🔒 Privacy Policy'))
|
|
84
|
-
console.log(chalk.gray('─'.repeat(70)))
|
|
85
|
-
console.log(this.formatForCLI(privacy.content))
|
|
86
|
-
console.log(chalk.gray('─'.repeat(70)))
|
|
87
|
-
console.log(chalk.gray(`Version ${privacy.version} | Effective: ${privacy.effectiveDate}\n`))
|
|
88
|
-
|
|
89
|
-
questions.push({
|
|
90
|
-
type: 'confirm',
|
|
91
|
-
name: 'acceptPrivacy',
|
|
92
|
-
message: 'Do you accept the Privacy Policy?',
|
|
93
|
-
default: false
|
|
94
|
-
})
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
const answers = await inquirer.prompt(questions)
|
|
98
|
-
|
|
99
|
-
// Check if user accepted all required items
|
|
100
|
-
const allAccepted =
|
|
101
|
-
(!status.requiredActions.includes('terms') || answers.acceptTerms) &&
|
|
102
|
-
(!status.requiredActions.includes('privacy') || answers.acceptPrivacy)
|
|
103
|
-
|
|
104
|
-
if (!allAccepted) {
|
|
105
|
-
console.log(chalk.red('\n❌ You must accept the Terms and Privacy Policy to use VibeCodingMachine.\n'))
|
|
106
|
-
return false
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// Record acceptance
|
|
110
|
-
await this.complianceManager.recordAcknowledgment(userId, {
|
|
111
|
-
terms: answers.acceptTerms || undefined,
|
|
112
|
-
privacy: answers.acceptPrivacy || undefined
|
|
113
|
-
})
|
|
114
|
-
|
|
115
|
-
console.log(chalk.green('\n✅ Thank you! Your acceptance has been recorded.\n'))
|
|
116
|
-
return true
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Electron prompt for compliance (returns HTML dialog)
|
|
121
|
-
*/
|
|
122
|
-
async promptElectron(userId, status) {
|
|
123
|
-
// For Electron, we'll return the data needed to show a dialog
|
|
124
|
-
// The actual dialog will be handled by the Electron renderer
|
|
125
|
-
const data = {
|
|
126
|
-
needsTerms: status.requiredActions.includes('terms'),
|
|
127
|
-
needsPrivacy: status.requiredActions.includes('privacy')
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
if (data.needsTerms) {
|
|
131
|
-
data.terms = await this.complianceManager.getTermsOfService()
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
if (data.needsPrivacy) {
|
|
135
|
-
data.privacy = await this.complianceManager.getPrivacyPolicy()
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
return data
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* Record acceptance from Electron
|
|
143
|
-
*/
|
|
144
|
-
async recordElectronAcceptance(userId, acceptTerms, acceptPrivacy) {
|
|
145
|
-
await this.complianceManager.recordAcknowledgment(userId, {
|
|
146
|
-
terms: acceptTerms,
|
|
147
|
-
privacy: acceptPrivacy
|
|
148
|
-
})
|
|
149
|
-
return true
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* Format markdown content for CLI display
|
|
154
|
-
*/
|
|
155
|
-
formatForCLI(content) {
|
|
156
|
-
// Simple markdown formatting for terminal
|
|
157
|
-
return content
|
|
158
|
-
.split('\n')
|
|
159
|
-
.map(line => {
|
|
160
|
-
// Headers
|
|
161
|
-
if (line.startsWith('# ')) {
|
|
162
|
-
return ' ' + line.substring(2).toUpperCase()
|
|
163
|
-
}
|
|
164
|
-
if (line.startsWith('## ')) {
|
|
165
|
-
return ' ' + line.substring(3)
|
|
166
|
-
}
|
|
167
|
-
// Bold
|
|
168
|
-
line = line.replace(/\*\*(.*?)\*\*/g, '$1')
|
|
169
|
-
// Lists
|
|
170
|
-
if (line.startsWith('- ')) {
|
|
171
|
-
return ' • ' + line.substring(2)
|
|
172
|
-
}
|
|
173
|
-
if (/^\d+\./.test(line)) {
|
|
174
|
-
return ' ' + line
|
|
175
|
-
}
|
|
176
|
-
// Regular text
|
|
177
|
-
return line ? ' ' + line : ''
|
|
178
|
-
})
|
|
179
|
-
.join('\n')
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
module.exports = CompliancePrompt
|
|
1
|
+
/**
|
|
2
|
+
* Compliance Prompt Utility
|
|
3
|
+
*
|
|
4
|
+
* Handles prompting users for terms and privacy acceptance
|
|
5
|
+
* across CLI and Electron interfaces
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const ComplianceManager = require('./compliance-manager')
|
|
9
|
+
|
|
10
|
+
class CompliancePrompt {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.complianceManager = new ComplianceManager()
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Check and prompt for compliance if needed
|
|
17
|
+
* Returns true if compliant, false if user declined
|
|
18
|
+
*/
|
|
19
|
+
async checkAndPrompt(userId, interfaceType = 'cli') {
|
|
20
|
+
try {
|
|
21
|
+
const status = await this.complianceManager.checkComplianceStatus(userId)
|
|
22
|
+
|
|
23
|
+
if (!status.needsAcknowledgment) {
|
|
24
|
+
return true
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Prompt based on interface
|
|
28
|
+
if (interfaceType === 'cli') {
|
|
29
|
+
return await this.promptCLI(userId, status)
|
|
30
|
+
} else if (interfaceType === 'electron') {
|
|
31
|
+
return await this.promptElectron(userId, status)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return false
|
|
35
|
+
} catch (error) {
|
|
36
|
+
console.error('Error checking compliance:', error)
|
|
37
|
+
return false
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* CLI prompt for compliance
|
|
43
|
+
*/
|
|
44
|
+
async promptCLI(userId, status) {
|
|
45
|
+
const chalk = require('chalk')
|
|
46
|
+
|
|
47
|
+
// Dynamically require inquirer (only available in CLI context)
|
|
48
|
+
let inquirer
|
|
49
|
+
try {
|
|
50
|
+
inquirer = require('inquirer')
|
|
51
|
+
} catch (error) {
|
|
52
|
+
throw new Error('inquirer module not available - CLI prompting not supported in this context')
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
console.log(chalk.cyan('\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'))
|
|
56
|
+
console.log(chalk.cyan.bold(' 📋 Terms & Privacy Acknowledgment Required'))
|
|
57
|
+
console.log(chalk.cyan('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'))
|
|
58
|
+
|
|
59
|
+
console.log(chalk.white('Before continuing, please review and accept:\n'))
|
|
60
|
+
|
|
61
|
+
const questions = []
|
|
62
|
+
|
|
63
|
+
if (status.requiredActions.includes('terms')) {
|
|
64
|
+
const terms = await this.complianceManager.getTermsOfService()
|
|
65
|
+
|
|
66
|
+
console.log(chalk.yellow('📄 Terms of Service'))
|
|
67
|
+
console.log(chalk.gray('─'.repeat(70)))
|
|
68
|
+
console.log(this.formatForCLI(terms.content))
|
|
69
|
+
console.log(chalk.gray('─'.repeat(70)))
|
|
70
|
+
console.log(chalk.gray(`Version ${terms.version} | Effective: ${terms.effectiveDate}\n`))
|
|
71
|
+
|
|
72
|
+
questions.push({
|
|
73
|
+
type: 'confirm',
|
|
74
|
+
name: 'acceptTerms',
|
|
75
|
+
message: 'Do you accept the Terms of Service?',
|
|
76
|
+
default: false
|
|
77
|
+
})
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (status.requiredActions.includes('privacy')) {
|
|
81
|
+
const privacy = await this.complianceManager.getPrivacyPolicy()
|
|
82
|
+
|
|
83
|
+
console.log(chalk.yellow('🔒 Privacy Policy'))
|
|
84
|
+
console.log(chalk.gray('─'.repeat(70)))
|
|
85
|
+
console.log(this.formatForCLI(privacy.content))
|
|
86
|
+
console.log(chalk.gray('─'.repeat(70)))
|
|
87
|
+
console.log(chalk.gray(`Version ${privacy.version} | Effective: ${privacy.effectiveDate}\n`))
|
|
88
|
+
|
|
89
|
+
questions.push({
|
|
90
|
+
type: 'confirm',
|
|
91
|
+
name: 'acceptPrivacy',
|
|
92
|
+
message: 'Do you accept the Privacy Policy?',
|
|
93
|
+
default: false
|
|
94
|
+
})
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const answers = await inquirer.prompt(questions)
|
|
98
|
+
|
|
99
|
+
// Check if user accepted all required items
|
|
100
|
+
const allAccepted =
|
|
101
|
+
(!status.requiredActions.includes('terms') || answers.acceptTerms) &&
|
|
102
|
+
(!status.requiredActions.includes('privacy') || answers.acceptPrivacy)
|
|
103
|
+
|
|
104
|
+
if (!allAccepted) {
|
|
105
|
+
console.log(chalk.red('\n❌ You must accept the Terms and Privacy Policy to use VibeCodingMachine.\n'))
|
|
106
|
+
return false
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Record acceptance
|
|
110
|
+
await this.complianceManager.recordAcknowledgment(userId, {
|
|
111
|
+
terms: answers.acceptTerms || undefined,
|
|
112
|
+
privacy: answers.acceptPrivacy || undefined
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
console.log(chalk.green('\n✅ Thank you! Your acceptance has been recorded.\n'))
|
|
116
|
+
return true
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Electron prompt for compliance (returns HTML dialog)
|
|
121
|
+
*/
|
|
122
|
+
async promptElectron(userId, status) {
|
|
123
|
+
// For Electron, we'll return the data needed to show a dialog
|
|
124
|
+
// The actual dialog will be handled by the Electron renderer
|
|
125
|
+
const data = {
|
|
126
|
+
needsTerms: status.requiredActions.includes('terms'),
|
|
127
|
+
needsPrivacy: status.requiredActions.includes('privacy')
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (data.needsTerms) {
|
|
131
|
+
data.terms = await this.complianceManager.getTermsOfService()
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (data.needsPrivacy) {
|
|
135
|
+
data.privacy = await this.complianceManager.getPrivacyPolicy()
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return data
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Record acceptance from Electron
|
|
143
|
+
*/
|
|
144
|
+
async recordElectronAcceptance(userId, acceptTerms, acceptPrivacy) {
|
|
145
|
+
await this.complianceManager.recordAcknowledgment(userId, {
|
|
146
|
+
terms: acceptTerms,
|
|
147
|
+
privacy: acceptPrivacy
|
|
148
|
+
})
|
|
149
|
+
return true
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Format markdown content for CLI display
|
|
154
|
+
*/
|
|
155
|
+
formatForCLI(content) {
|
|
156
|
+
// Simple markdown formatting for terminal
|
|
157
|
+
return content
|
|
158
|
+
.split('\n')
|
|
159
|
+
.map(line => {
|
|
160
|
+
// Headers
|
|
161
|
+
if (line.startsWith('# ')) {
|
|
162
|
+
return ' ' + line.substring(2).toUpperCase()
|
|
163
|
+
}
|
|
164
|
+
if (line.startsWith('## ')) {
|
|
165
|
+
return ' ' + line.substring(3)
|
|
166
|
+
}
|
|
167
|
+
// Bold
|
|
168
|
+
line = line.replace(/\*\*(.*?)\*\*/g, '$1')
|
|
169
|
+
// Lists
|
|
170
|
+
if (line.startsWith('- ')) {
|
|
171
|
+
return ' • ' + line.substring(2)
|
|
172
|
+
}
|
|
173
|
+
if (/^\d+\./.test(line)) {
|
|
174
|
+
return ' ' + line
|
|
175
|
+
}
|
|
176
|
+
// Regular text
|
|
177
|
+
return line ? ' ' + line : ''
|
|
178
|
+
})
|
|
179
|
+
.join('\n')
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
module.exports = CompliancePrompt
|