vibecodingmachine-core 2026.2.20-438 → 2026.2.26-1739
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/README.md +240 -0
- package/package.json +10 -2
- package/src/agents/Agent.js +300 -0
- package/src/agents/AgentAdditionService.js +311 -0
- package/src/agents/AgentCheckService.js +690 -0
- package/src/agents/AgentInstallationService.js +140 -0
- package/src/agents/AgentSetupService.js +467 -0
- package/src/agents/AgentStatus.js +183 -0
- package/src/agents/AgentVerificationService.js +634 -0
- package/src/agents/ConfigurationSchemaValidator.js +543 -0
- package/src/agents/EnvironmentConfigurationManager.js +602 -0
- package/src/agents/InstallationErrorHandler.js +372 -0
- package/src/agents/InstallationLog.js +363 -0
- package/src/agents/InstallationMethod.js +510 -0
- package/src/agents/InstallationOrchestrator.js +352 -0
- package/src/agents/InstallationProgressReporter.js +372 -0
- package/src/agents/InstallationRetryManager.js +322 -0
- package/src/agents/InstallationType.js +254 -0
- package/src/agents/OperationTypes.js +310 -0
- package/src/agents/PerformanceMetricsCollector.js +493 -0
- package/src/agents/SecurityValidationService.js +534 -0
- package/src/agents/VerificationTest.js +354 -0
- package/src/agents/VerificationType.js +226 -0
- package/src/agents/WindowsPermissionHandler.js +518 -0
- package/src/agents/config/AgentConfigManager.js +393 -0
- package/src/agents/config/AgentDefaultsRegistry.js +373 -0
- package/src/agents/config/ConfigValidator.js +281 -0
- package/src/agents/discovery/AgentDiscoveryService.js +707 -0
- package/src/agents/logging/AgentLogger.js +511 -0
- package/src/agents/status/AgentStatusManager.js +481 -0
- package/src/agents/storage/FileManager.js +454 -0
- package/src/agents/verification/AgentCommunicationTester.js +474 -0
- package/src/agents/verification/BaseVerifier.js +430 -0
- package/src/agents/verification/CommandVerifier.js +480 -0
- package/src/agents/verification/FileOperationVerifier.js +453 -0
- package/src/agents/verification/ResultAnalyzer.js +707 -0
- package/src/agents/verification/TestRequirementManager.js +495 -0
- package/src/agents/verification/VerificationRunner.js +433 -0
- package/src/agents/windows/BaseWindowsInstaller.js +441 -0
- package/src/agents/windows/ChocolateyInstaller.js +509 -0
- package/src/agents/windows/DirectInstaller.js +443 -0
- package/src/agents/windows/InstallerFactory.js +391 -0
- package/src/agents/windows/NpmInstaller.js +505 -0
- package/src/agents/windows/PowerShellInstaller.js +458 -0
- package/src/agents/windows/WinGetInstaller.js +390 -0
- package/src/analysis/analysis-reporter.js +132 -0
- package/src/analysis/boundary-detector.js +712 -0
- package/src/analysis/categorizer.js +340 -0
- package/src/analysis/codebase-scanner.js +384 -0
- package/src/analysis/line-counter.js +513 -0
- package/src/analysis/priority-calculator.js +679 -0
- package/src/analysis/report/analysis-report.js +250 -0
- package/src/analysis/report/package-analyzer.js +278 -0
- package/src/analysis/report/recommendation-generator.js +382 -0
- package/src/analysis/report/statistics-generator.js +515 -0
- package/src/analysis/reports/analysis-report-model.js +101 -0
- package/src/analysis/reports/recommendation-generator.js +283 -0
- package/src/analysis/reports/report-generators.js +191 -0
- package/src/analysis/reports/statistics-calculator.js +231 -0
- package/src/analysis/reports/trend-analyzer.js +219 -0
- package/src/analysis/strategy-generator.js +814 -0
- package/src/auto-mode/AutoModeBusinessLogic.js +836 -0
- package/src/config/refactoring-config.js +307 -0
- package/src/health-tracking/json-storage.js +38 -2
- package/src/ide-integration/applescript-manager-core.js +233 -0
- package/src/ide-integration/applescript-manager.cjs +357 -28
- package/src/ide-integration/applescript-manager.js +89 -3599
- package/src/ide-integration/cdp-manager.js +306 -0
- package/src/ide-integration/claude-code-cli-manager.cjs +1 -1
- package/src/ide-integration/continuation-handler.js +337 -0
- package/src/ide-integration/ide-status-checker.js +292 -0
- package/src/ide-integration/macos-ide-manager.js +627 -0
- package/src/ide-integration/macos-text-sender.js +528 -0
- package/src/ide-integration/response-reader.js +548 -0
- package/src/ide-integration/windows-automation-manager.js +121 -0
- package/src/ide-integration/windows-ide-manager.js +373 -0
- package/src/index.cjs +25 -3
- package/src/index.js +15 -1
- package/src/llm/direct-llm-manager.cjs +90 -2
- package/src/models/compliance-report.js +538 -0
- package/src/models/file-analysis.js +681 -0
- package/src/models/refactoring-plan.js +770 -0
- package/src/monitoring/alert-system.js +834 -0
- package/src/monitoring/compliance-progress-tracker.js +437 -0
- package/src/monitoring/continuous-scan-notifications.js +661 -0
- package/src/monitoring/continuous-scanner.js +279 -0
- package/src/monitoring/file-monitor/file-analyzer.js +262 -0
- package/src/monitoring/file-monitor/file-monitor.js +237 -0
- package/src/monitoring/file-monitor/watcher.js +194 -0
- package/src/monitoring/file-monitor.js +17 -0
- package/src/monitoring/notification-manager.js +437 -0
- package/src/monitoring/scanner-core.js +368 -0
- package/src/monitoring/scanner-events.js +214 -0
- package/src/monitoring/violation-notification-system.js +515 -0
- package/src/refactoring/boundaries/cohesion-analyzer.js +316 -0
- package/src/refactoring/boundaries/extraction-result.js +285 -0
- package/src/refactoring/boundaries/extraction-strategies.js +392 -0
- package/src/refactoring/boundaries/module-boundary.js +209 -0
- package/src/refactoring/boundary/boundary-detector.js +741 -0
- package/src/refactoring/boundary/boundary-types.js +405 -0
- package/src/refactoring/boundary/extraction-strategies.js +554 -0
- package/src/refactoring/boundary-extraction-result.js +77 -0
- package/src/refactoring/boundary-extraction-strategies.js +330 -0
- package/src/refactoring/boundary-extractor.js +384 -0
- package/src/refactoring/boundary-types.js +46 -0
- package/src/refactoring/circular/circular-dependency.js +88 -0
- package/src/refactoring/circular/cycle-detection.js +147 -0
- package/src/refactoring/circular/dependency-node.js +82 -0
- package/src/refactoring/circular/dependency-result.js +107 -0
- package/src/refactoring/circular/dependency-types.js +58 -0
- package/src/refactoring/circular/graph-builder.js +213 -0
- package/src/refactoring/circular/resolution-strategy.js +72 -0
- package/src/refactoring/circular/strategy-generator.js +229 -0
- package/src/refactoring/circular-dependency-resolver-original.js +809 -0
- package/src/refactoring/circular-dependency-resolver.js +200 -0
- package/src/refactoring/code-mover.js +761 -0
- package/src/refactoring/file-splitter.js +696 -0
- package/src/refactoring/functionality-validator.js +816 -0
- package/src/refactoring/import-manager.js +774 -0
- package/src/refactoring/module-boundary.js +107 -0
- package/src/refactoring/refactoring-executor.js +672 -0
- package/src/refactoring/refactoring-rollback.js +614 -0
- package/src/refactoring/test-validator.js +631 -0
- package/src/requirement-management/default-requirement-manager.js +321 -0
- package/src/requirement-management/requirement-file-parser.js +159 -0
- package/src/requirement-management/requirement-sequencer.js +221 -0
- package/src/rui/commands/AgentCommandParser.js +600 -0
- package/src/rui/commands/AgentCommands.js +487 -0
- package/src/rui/commands/AgentResponseFormatter.js +832 -0
- package/src/scripts/verify-full-compliance.js +269 -0
- package/src/sync/sync-engine-core.js +1 -0
- package/src/sync/sync-engine-remote-handlers.js +135 -0
- package/src/task-generation/automated-task-generator.js +351 -0
- package/src/task-generation/prioritizer.js +287 -0
- package/src/task-generation/task-list-updater.js +215 -0
- package/src/task-generation/task-management-integration.js +480 -0
- package/src/task-generation/task-manager-integration.js +270 -0
- package/src/task-generation/violation-task-generator.js +474 -0
- package/src/task-management/continuous-scan-integration.js +342 -0
- package/src/timeout-management/index.js +12 -3
- package/src/timeout-management/response-time-tracker.js +167 -0
- package/src/timeout-management/timeout-calculator.js +159 -0
- package/src/timeout-management/timeout-config-manager.js +172 -0
- package/src/utils/ast-analyzer.js +417 -0
- package/src/utils/current-requirement-manager.js +276 -0
- package/src/utils/current-requirement-operations.js +472 -0
- package/src/utils/dependency-mapper.js +456 -0
- package/src/utils/download-with-progress.js +4 -2
- package/src/utils/electron-update-checker.js +4 -1
- package/src/utils/file-size-analyzer.js +272 -0
- package/src/utils/import-updater.js +280 -0
- package/src/utils/refactoring-tools.js +512 -0
- package/src/utils/report-generator.js +569 -0
- package/src/utils/reports/report-analysis.js +218 -0
- package/src/utils/reports/report-types.js +55 -0
- package/src/utils/reports/summary-generators.js +102 -0
- package/src/utils/requirement-file-management.js +157 -0
- package/src/utils/requirement-helpers/requirement-file-ops.js +392 -0
- package/src/utils/requirement-helpers/requirement-mover.js +414 -0
- package/src/utils/requirement-helpers/requirement-parser.js +326 -0
- package/src/utils/requirement-helpers/requirement-status.js +320 -0
- package/src/utils/requirement-helpers-new.js +55 -0
- package/src/utils/requirement-helpers-refactored.js +367 -0
- package/src/utils/requirement-helpers.js +291 -1191
- package/src/utils/requirement-movement-operations.js +450 -0
- package/src/utils/requirement-movement.js +312 -0
- package/src/utils/requirement-parsing-helpers.js +56 -0
- package/src/utils/requirement-statistics.js +200 -0
- package/src/utils/requirement-text-utils.js +58 -0
- package/src/utils/rollback/rollback-handlers.js +125 -0
- package/src/utils/rollback/rollback-operation.js +63 -0
- package/src/utils/rollback/rollback-recorder.js +166 -0
- package/src/utils/rollback/rollback-state-manager.js +175 -0
- package/src/utils/rollback/rollback-types.js +33 -0
- package/src/utils/rollback/rollback-utils.js +110 -0
- package/src/utils/rollback-manager-original.js +569 -0
- package/src/utils/rollback-manager.js +202 -0
- package/src/utils/smoke-test-cli.js +362 -0
- package/src/utils/smoke-test-gui.js +351 -0
- package/src/utils/smoke-test-orchestrator.js +321 -0
- package/src/utils/smoke-test-runner.js +60 -0
- package/src/utils/smoke-test-web.js +347 -0
- package/src/utils/specification-helpers.js +39 -13
- package/src/utils/specification-migration.js +97 -0
- package/src/utils/test-runner.js +579 -0
- package/src/utils/validation-framework.js +518 -0
- package/src/validation/compliance-analyzer.js +197 -0
- package/src/validation/compliance-report-generator.js +343 -0
- package/src/validation/compliance-reporter.js +711 -0
- package/src/validation/compliance-rules.js +127 -0
- package/src/validation/constitution-validator-new.js +196 -0
- package/src/validation/constitution-validator.js +17 -0
- package/src/validation/file-validators.js +170 -0
- package/src/validation/line-limit/file-analyzer.js +201 -0
- package/src/validation/line-limit/line-limit-validator.js +208 -0
- package/src/validation/line-limit/validation-result.js +144 -0
- package/src/validation/line-limit-core.js +225 -0
- package/src/validation/line-limit-reporter.js +134 -0
- package/src/validation/line-limit-result.js +125 -0
- package/src/validation/line-limit-validator.js +41 -0
- package/src/validation/metrics-calculator.js +660 -0
- package/src/sync/sync-engine-backup.js +0 -559
|
@@ -1784,9 +1784,32 @@ class AppleScriptManager {
|
|
|
1784
1784
|
key code 53
|
|
1785
1785
|
delay 0.5
|
|
1786
1786
|
|
|
1787
|
-
--
|
|
1787
|
+
-- Try multiple approaches to focus Cascade chat input
|
|
1788
|
+
-- Approach 1: Cmd+Shift+L (original)
|
|
1788
1789
|
keystroke "l" using {command down, shift down}
|
|
1789
|
-
delay
|
|
1790
|
+
delay 1.0
|
|
1791
|
+
|
|
1792
|
+
-- Approach 2: Cmd+L (alternative)
|
|
1793
|
+
keystroke "l" using {command down}
|
|
1794
|
+
delay 1.0
|
|
1795
|
+
|
|
1796
|
+
-- Approach 3: Click on chat area
|
|
1797
|
+
try
|
|
1798
|
+
set textAreas to text areas of window 1
|
|
1799
|
+
if (count of textAreas) > 0 then
|
|
1800
|
+
click first text area
|
|
1801
|
+
delay 0.5
|
|
1802
|
+
end if
|
|
1803
|
+
on error
|
|
1804
|
+
-- Continue if click fails
|
|
1805
|
+
end try
|
|
1806
|
+
|
|
1807
|
+
-- Approach 4: Tab navigation to find chat input
|
|
1808
|
+
repeat 5 times
|
|
1809
|
+
key code 48 -- Tab key
|
|
1810
|
+
delay 0.2
|
|
1811
|
+
end repeat
|
|
1812
|
+
delay 0.5
|
|
1790
1813
|
|
|
1791
1814
|
-- Clear any auto-inserted context (e.g. @terminal:zsh)
|
|
1792
1815
|
keystroke "a" using {command down}
|
|
@@ -1949,36 +1972,24 @@ class AppleScriptManager {
|
|
|
1949
1972
|
};
|
|
1950
1973
|
}
|
|
1951
1974
|
|
|
1952
|
-
//
|
|
1953
|
-
// The AppleScript has
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
child.unref();
|
|
1965
|
-
this.logger.log(t('auto.direct.ide.sent.applescript', { ide: ideName }));
|
|
1966
|
-
return {
|
|
1967
|
-
success: true,
|
|
1968
|
-
method: 'applescript',
|
|
1969
|
-
message: `Message sent to ${ideName}: ${text}`,
|
|
1970
|
-
note: 'AppleScript running detached; message will appear in Cascade in ~3s'
|
|
1971
|
-
};
|
|
1972
|
-
}
|
|
1973
|
-
|
|
1974
|
-
execSync(`osascript -e '${appleScript}'`, { stdio: 'pipe' });
|
|
1975
|
-
|
|
1975
|
+
// All IDEs: spawn detached so vcm exits before keystrokes fire.
|
|
1976
|
+
// The AppleScript has appropriate delays to let processes settle.
|
|
1977
|
+
const tempFile = join(tmpdir(), `${ide}_script_${Date.now()}.scpt`);
|
|
1978
|
+
writeFileSync(tempFile, appleScript, 'utf8');
|
|
1979
|
+
const child = spawn('osascript', [tempFile], {
|
|
1980
|
+
detached: true,
|
|
1981
|
+
stdio: 'ignore',
|
|
1982
|
+
});
|
|
1983
|
+
child.on('exit', () => {
|
|
1984
|
+
try { unlinkSync(tempFile); } catch (_) {}
|
|
1985
|
+
});
|
|
1986
|
+
child.unref();
|
|
1976
1987
|
this.logger.log(t('auto.direct.ide.sent.applescript', { ide: ideName }));
|
|
1977
1988
|
return {
|
|
1978
1989
|
success: true,
|
|
1979
1990
|
method: 'applescript',
|
|
1980
1991
|
message: `Message sent to ${ideName}: ${text}`,
|
|
1981
|
-
note: '
|
|
1992
|
+
note: 'AppleScript running detached; message will appear in IDE in ~3s'
|
|
1982
1993
|
};
|
|
1983
1994
|
|
|
1984
1995
|
} catch (error) {
|
|
@@ -2896,6 +2907,324 @@ class AppleScriptManager {
|
|
|
2896
2907
|
};
|
|
2897
2908
|
}
|
|
2898
2909
|
}
|
|
2910
|
+
|
|
2911
|
+
/**
|
|
2912
|
+
* Check for continuation prompts using AppleScript UI queries
|
|
2913
|
+
* @param {string} ide - The IDE name
|
|
2914
|
+
* @returns {Promise<Object>} Result with continuation detected and button info
|
|
2915
|
+
*/
|
|
2916
|
+
async checkForContinuation(ide) {
|
|
2917
|
+
try {
|
|
2918
|
+
if (this.platform === 'darwin') {
|
|
2919
|
+
return await this.checkForContinuationMacOS(ide);
|
|
2920
|
+
} else if (this.platform === 'win32' && this.windowsManager) {
|
|
2921
|
+
return await this.checkForContinuationWindows(ide);
|
|
2922
|
+
} else {
|
|
2923
|
+
return { continuationDetected: false, error: 'Unsupported platform' };
|
|
2924
|
+
}
|
|
2925
|
+
} catch (error) {
|
|
2926
|
+
this.logger.error(`Error checking for continuation in ${ide}:`, error);
|
|
2927
|
+
return { continuationDetected: false, error: error.message };
|
|
2928
|
+
}
|
|
2929
|
+
}
|
|
2930
|
+
|
|
2931
|
+
/**
|
|
2932
|
+
* Check for continuation prompts on macOS using AppleScript
|
|
2933
|
+
* @param {string} ide - The IDE name
|
|
2934
|
+
* @returns {Promise<Object>} Result with continuation detected and button info
|
|
2935
|
+
*/
|
|
2936
|
+
async checkForContinuationMacOS(ide) {
|
|
2937
|
+
try {
|
|
2938
|
+
const script = `
|
|
2939
|
+
tell application "System Events"
|
|
2940
|
+
try
|
|
2941
|
+
set frontApp to first application process whose frontmost is true
|
|
2942
|
+
set appName to name of frontApp
|
|
2943
|
+
|
|
2944
|
+
-- Look for continuation buttons
|
|
2945
|
+
set continuationButtons to {}
|
|
2946
|
+
set buttonNames to {"Continue", "Proceed", "Next", "Continue Generation", "Keep Going"}
|
|
2947
|
+
|
|
2948
|
+
repeat with buttonName in buttonNames
|
|
2949
|
+
try
|
|
2950
|
+
set foundButtons to (buttons of frontApp whose name contains buttonName)
|
|
2951
|
+
repeat with aButton in foundButtons
|
|
2952
|
+
if exists aButton then
|
|
2953
|
+
set end of continuationButtons to {name:aButton, visible:true}
|
|
2954
|
+
end if
|
|
2955
|
+
end repeat
|
|
2956
|
+
end try
|
|
2957
|
+
end repeat
|
|
2958
|
+
|
|
2959
|
+
-- Look for continuation text in UI elements
|
|
2960
|
+
set continuationTexts to {}
|
|
2961
|
+
set textElements to (static texts of frontApp)
|
|
2962
|
+
repeat with textElement in textElements
|
|
2963
|
+
try
|
|
2964
|
+
set elementText to name of textElement
|
|
2965
|
+
if elementText contains "Continue" or elementText contains "Proceed" or elementText contains "Keep Going" then
|
|
2966
|
+
set end of continuationTexts to {text:elementText, visible:true}
|
|
2967
|
+
end if
|
|
2968
|
+
end try
|
|
2969
|
+
end repeat
|
|
2970
|
+
|
|
2971
|
+
return {buttons:continuationButtons, texts:continuationTexts}
|
|
2972
|
+
on error errMsg
|
|
2973
|
+
return {error:errMsg}
|
|
2974
|
+
end try
|
|
2975
|
+
end tell
|
|
2976
|
+
`;
|
|
2977
|
+
|
|
2978
|
+
const result = execSync(`osascript -e '${script}'`, {
|
|
2979
|
+
encoding: 'utf8',
|
|
2980
|
+
timeout: 10000
|
|
2981
|
+
});
|
|
2982
|
+
|
|
2983
|
+
// Parse the result (simplified parsing)
|
|
2984
|
+
const continuationDetected = result.includes('Continue') || result.includes('Proceed');
|
|
2985
|
+
|
|
2986
|
+
return {
|
|
2987
|
+
continuationDetected,
|
|
2988
|
+
buttons: continuationDetected ? [{ text: 'Continue button detected' }] : [],
|
|
2989
|
+
texts: continuationDetected ? [{ text: 'Continuation prompt detected' }] : [],
|
|
2990
|
+
rawResult: result
|
|
2991
|
+
};
|
|
2992
|
+
} catch (error) {
|
|
2993
|
+
return { continuationDetected: false, error: error.message };
|
|
2994
|
+
}
|
|
2995
|
+
}
|
|
2996
|
+
|
|
2997
|
+
/**
|
|
2998
|
+
* Check for continuation prompts on Windows using UI automation
|
|
2999
|
+
* @param {string} ide - The IDE name
|
|
3000
|
+
* @returns {Promise<Object>} Result with continuation detected and button info
|
|
3001
|
+
*/
|
|
3002
|
+
async checkForContinuationWindows(ide) {
|
|
3003
|
+
try {
|
|
3004
|
+
// Use Windows automation manager to check for continuation buttons
|
|
3005
|
+
const result = await this.windowsManager.checkForContinuationButtons(ide);
|
|
3006
|
+
return result || { continuationDetected: false, buttons: [], texts: [] };
|
|
3007
|
+
} catch (error) {
|
|
3008
|
+
return { continuationDetected: false, error: error.message };
|
|
3009
|
+
}
|
|
3010
|
+
}
|
|
3011
|
+
|
|
3012
|
+
/**
|
|
3013
|
+
* Click a continuation button if found
|
|
3014
|
+
* @param {string} ide - The IDE name
|
|
3015
|
+
* @returns {Promise<Object>} Result of the operation
|
|
3016
|
+
*/
|
|
3017
|
+
async clickContinuationButton(ide) {
|
|
3018
|
+
try {
|
|
3019
|
+
if (this.platform === 'darwin') {
|
|
3020
|
+
return await this.clickContinuationButtonMacOS(ide);
|
|
3021
|
+
} else if (this.platform === 'win32' && this.windowsManager) {
|
|
3022
|
+
return await this.clickContinuationButtonWindows(ide);
|
|
3023
|
+
} else {
|
|
3024
|
+
return { success: false, error: 'Unsupported platform' };
|
|
3025
|
+
}
|
|
3026
|
+
} catch (error) {
|
|
3027
|
+
this.logger.error(`Error clicking continuation button in ${ide}:`, error);
|
|
3028
|
+
return { success: false, error: error.message };
|
|
3029
|
+
}
|
|
3030
|
+
}
|
|
3031
|
+
|
|
3032
|
+
/**
|
|
3033
|
+
* Click continuation button on macOS using AppleScript
|
|
3034
|
+
* @param {string} ide - The IDE name
|
|
3035
|
+
* @returns {Promise<Object>} Result of the operation
|
|
3036
|
+
*/
|
|
3037
|
+
async clickContinuationButtonMacOS(ide) {
|
|
3038
|
+
try {
|
|
3039
|
+
const script = `
|
|
3040
|
+
tell application "System Events"
|
|
3041
|
+
try
|
|
3042
|
+
set frontApp to first application process whose frontmost is true
|
|
3043
|
+
set appName to name of frontApp
|
|
3044
|
+
|
|
3045
|
+
-- Look for and click continuation buttons
|
|
3046
|
+
set buttonNames to {"Continue", "Proceed", "Next", "Continue Generation", "Keep Going"}
|
|
3047
|
+
|
|
3048
|
+
repeat with buttonName in buttonNames
|
|
3049
|
+
try
|
|
3050
|
+
set foundButtons to (buttons of frontApp whose name contains buttonName)
|
|
3051
|
+
repeat with aButton in foundButtons
|
|
3052
|
+
if exists aButton then
|
|
3053
|
+
click aButton
|
|
3054
|
+
return {success:true, clicked:true, button:buttonName}
|
|
3055
|
+
end if
|
|
3056
|
+
end repeat
|
|
3057
|
+
end try
|
|
3058
|
+
end repeat
|
|
3059
|
+
|
|
3060
|
+
return {success:false, clicked:false, message:"No continuation button found"}
|
|
3061
|
+
on error errMsg
|
|
3062
|
+
return {success:false, error:errMsg}
|
|
3063
|
+
end try
|
|
3064
|
+
end tell
|
|
3065
|
+
`;
|
|
3066
|
+
|
|
3067
|
+
const result = execSync(`osascript -e '${script}'`, {
|
|
3068
|
+
encoding: 'utf8',
|
|
3069
|
+
timeout: 10000
|
|
3070
|
+
});
|
|
3071
|
+
|
|
3072
|
+
return {
|
|
3073
|
+
success: result.includes('success:true'),
|
|
3074
|
+
clicked: result.includes('clicked:true'),
|
|
3075
|
+
rawResult: result
|
|
3076
|
+
};
|
|
3077
|
+
} catch (error) {
|
|
3078
|
+
return { success: false, clicked: false, error: error.message };
|
|
3079
|
+
}
|
|
3080
|
+
}
|
|
3081
|
+
|
|
3082
|
+
/**
|
|
3083
|
+
* Click continuation button on Windows using UI automation
|
|
3084
|
+
* @param {string} ide - The IDE name
|
|
3085
|
+
* @returns {Promise<Object>} Result of the operation
|
|
3086
|
+
*/
|
|
3087
|
+
async clickContinuationButtonWindows(ide) {
|
|
3088
|
+
try {
|
|
3089
|
+
// Use Windows automation manager to click continuation buttons
|
|
3090
|
+
const result = await this.windowsManager.clickContinuationButton(ide);
|
|
3091
|
+
return result || { success: false, clicked: false, message: 'No result' };
|
|
3092
|
+
} catch (error) {
|
|
3093
|
+
return { success: false, clicked: false, error: error.message };
|
|
3094
|
+
}
|
|
3095
|
+
}
|
|
3096
|
+
/**
|
|
3097
|
+
* Detect continuation prompts using AppleScript UI queries
|
|
3098
|
+
* @returns {Promise<boolean>} True if continuation prompt detected
|
|
3099
|
+
*/
|
|
3100
|
+
async detectContinuationPrompt() {
|
|
3101
|
+
try {
|
|
3102
|
+
const continuationVariations = ['Continue', 'Proceed', 'Next', 'Keep Going', 'Resume'];
|
|
3103
|
+
|
|
3104
|
+
for (const variation of continuationVariations) {
|
|
3105
|
+
try {
|
|
3106
|
+
const script = this.getContinuationButtonScript(variation);
|
|
3107
|
+
const result = execSync(`osascript -e '${script.replace(/'/g, "'\\\\''")}'`, {
|
|
3108
|
+
encoding: 'utf8',
|
|
3109
|
+
timeout: 5000,
|
|
3110
|
+
stdio: 'pipe'
|
|
3111
|
+
}).trim();
|
|
3112
|
+
|
|
3113
|
+
if (result && result.toLowerCase().includes('found')) {
|
|
3114
|
+
return true;
|
|
3115
|
+
}
|
|
3116
|
+
} catch (error) {
|
|
3117
|
+
// Continue with next variation
|
|
3118
|
+
}
|
|
3119
|
+
}
|
|
3120
|
+
|
|
3121
|
+
return false;
|
|
3122
|
+
} catch (error) {
|
|
3123
|
+
console.error('Error detecting continuation prompt:', error);
|
|
3124
|
+
return false;
|
|
3125
|
+
}
|
|
3126
|
+
}
|
|
3127
|
+
|
|
3128
|
+
/**
|
|
3129
|
+
* Click detected continuation button using AppleScript
|
|
3130
|
+
* @returns {Promise<boolean>} True if button clicked successfully
|
|
3131
|
+
*/
|
|
3132
|
+
async clickContinuationButton() {
|
|
3133
|
+
try {
|
|
3134
|
+
const continuationVariations = ['Continue', 'Proceed', 'Next', 'Keep Going', 'Resume'];
|
|
3135
|
+
|
|
3136
|
+
for (const variation of continuationVariations) {
|
|
3137
|
+
try {
|
|
3138
|
+
const script = this.getClickButtonScript(variation);
|
|
3139
|
+
const result = execSync(`osascript -e '${script.replace(/'/g, "'\\\\''")}'`, {
|
|
3140
|
+
encoding: 'utf8',
|
|
3141
|
+
timeout: 5000,
|
|
3142
|
+
stdio: 'pipe'
|
|
3143
|
+
}).trim();
|
|
3144
|
+
|
|
3145
|
+
if (result && result.toLowerCase().includes('clicked')) {
|
|
3146
|
+
return true;
|
|
3147
|
+
}
|
|
3148
|
+
} catch (error) {
|
|
3149
|
+
// Continue with next variation
|
|
3150
|
+
}
|
|
3151
|
+
}
|
|
3152
|
+
|
|
3153
|
+
return false;
|
|
3154
|
+
} catch (error) {
|
|
3155
|
+
console.error('Error clicking continuation button:', error);
|
|
3156
|
+
return false;
|
|
3157
|
+
}
|
|
3158
|
+
}
|
|
3159
|
+
|
|
3160
|
+
/**
|
|
3161
|
+
* Generate AppleScript for detecting continuation buttons
|
|
3162
|
+
* @param {string} buttonText - Text to search for (Continue, Proceed, etc.)
|
|
3163
|
+
* @returns {string} AppleScript code
|
|
3164
|
+
*/
|
|
3165
|
+
getContinuationButtonScript(buttonText) {
|
|
3166
|
+
return `
|
|
3167
|
+
tell application "System Events"
|
|
3168
|
+
set foundButton to false
|
|
3169
|
+
repeat with proc in (every process)
|
|
3170
|
+
try
|
|
3171
|
+
repeat with w in (every window of proc)
|
|
3172
|
+
try
|
|
3173
|
+
repeat with btn in (every button of w)
|
|
3174
|
+
try
|
|
3175
|
+
set btnTitle to title of btn as string
|
|
3176
|
+
if btnTitle contains "${buttonText}" then
|
|
3177
|
+
set foundButton to true
|
|
3178
|
+
exit repeat
|
|
3179
|
+
end if
|
|
3180
|
+
end try
|
|
3181
|
+
end repeat
|
|
3182
|
+
if foundButton then exit repeat
|
|
3183
|
+
end try
|
|
3184
|
+
end repeat
|
|
3185
|
+
if foundButton then exit repeat
|
|
3186
|
+
end try
|
|
3187
|
+
end repeat
|
|
3188
|
+
|
|
3189
|
+
if foundButton then
|
|
3190
|
+
return "${buttonText} button found"
|
|
3191
|
+
else
|
|
3192
|
+
return "${buttonText} button not found"
|
|
3193
|
+
end if
|
|
3194
|
+
end tell
|
|
3195
|
+
`;
|
|
3196
|
+
}
|
|
3197
|
+
|
|
3198
|
+
/**
|
|
3199
|
+
* Generate AppleScript for clicking continuation buttons
|
|
3200
|
+
* @param {string} buttonText - Text to search for (Continue, Proceed, etc.)
|
|
3201
|
+
* @returns {string} AppleScript code
|
|
3202
|
+
*/
|
|
3203
|
+
getClickButtonScript(buttonText) {
|
|
3204
|
+
return `
|
|
3205
|
+
tell application "System Events"
|
|
3206
|
+
repeat with proc in (every process)
|
|
3207
|
+
try
|
|
3208
|
+
repeat with w in (every window of proc)
|
|
3209
|
+
try
|
|
3210
|
+
repeat with btn in (every button of w)
|
|
3211
|
+
try
|
|
3212
|
+
set btnTitle to title of btn as string
|
|
3213
|
+
if btnTitle contains "${buttonText}" then
|
|
3214
|
+
click btn
|
|
3215
|
+
return "${buttonText} button clicked"
|
|
3216
|
+
end if
|
|
3217
|
+
end try
|
|
3218
|
+
end repeat
|
|
3219
|
+
end try
|
|
3220
|
+
end repeat
|
|
3221
|
+
end try
|
|
3222
|
+
end repeat
|
|
3223
|
+
|
|
3224
|
+
return "${buttonText} button not found"
|
|
3225
|
+
end tell
|
|
3226
|
+
`;
|
|
3227
|
+
}
|
|
2899
3228
|
}
|
|
2900
3229
|
|
|
2901
|
-
module.exports =
|
|
3230
|
+
module.exports = AppleScriptManager;
|