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.
Files changed (202) hide show
  1. package/README.md +240 -0
  2. package/package.json +10 -2
  3. package/src/agents/Agent.js +300 -0
  4. package/src/agents/AgentAdditionService.js +311 -0
  5. package/src/agents/AgentCheckService.js +690 -0
  6. package/src/agents/AgentInstallationService.js +140 -0
  7. package/src/agents/AgentSetupService.js +467 -0
  8. package/src/agents/AgentStatus.js +183 -0
  9. package/src/agents/AgentVerificationService.js +634 -0
  10. package/src/agents/ConfigurationSchemaValidator.js +543 -0
  11. package/src/agents/EnvironmentConfigurationManager.js +602 -0
  12. package/src/agents/InstallationErrorHandler.js +372 -0
  13. package/src/agents/InstallationLog.js +363 -0
  14. package/src/agents/InstallationMethod.js +510 -0
  15. package/src/agents/InstallationOrchestrator.js +352 -0
  16. package/src/agents/InstallationProgressReporter.js +372 -0
  17. package/src/agents/InstallationRetryManager.js +322 -0
  18. package/src/agents/InstallationType.js +254 -0
  19. package/src/agents/OperationTypes.js +310 -0
  20. package/src/agents/PerformanceMetricsCollector.js +493 -0
  21. package/src/agents/SecurityValidationService.js +534 -0
  22. package/src/agents/VerificationTest.js +354 -0
  23. package/src/agents/VerificationType.js +226 -0
  24. package/src/agents/WindowsPermissionHandler.js +518 -0
  25. package/src/agents/config/AgentConfigManager.js +393 -0
  26. package/src/agents/config/AgentDefaultsRegistry.js +373 -0
  27. package/src/agents/config/ConfigValidator.js +281 -0
  28. package/src/agents/discovery/AgentDiscoveryService.js +707 -0
  29. package/src/agents/logging/AgentLogger.js +511 -0
  30. package/src/agents/status/AgentStatusManager.js +481 -0
  31. package/src/agents/storage/FileManager.js +454 -0
  32. package/src/agents/verification/AgentCommunicationTester.js +474 -0
  33. package/src/agents/verification/BaseVerifier.js +430 -0
  34. package/src/agents/verification/CommandVerifier.js +480 -0
  35. package/src/agents/verification/FileOperationVerifier.js +453 -0
  36. package/src/agents/verification/ResultAnalyzer.js +707 -0
  37. package/src/agents/verification/TestRequirementManager.js +495 -0
  38. package/src/agents/verification/VerificationRunner.js +433 -0
  39. package/src/agents/windows/BaseWindowsInstaller.js +441 -0
  40. package/src/agents/windows/ChocolateyInstaller.js +509 -0
  41. package/src/agents/windows/DirectInstaller.js +443 -0
  42. package/src/agents/windows/InstallerFactory.js +391 -0
  43. package/src/agents/windows/NpmInstaller.js +505 -0
  44. package/src/agents/windows/PowerShellInstaller.js +458 -0
  45. package/src/agents/windows/WinGetInstaller.js +390 -0
  46. package/src/analysis/analysis-reporter.js +132 -0
  47. package/src/analysis/boundary-detector.js +712 -0
  48. package/src/analysis/categorizer.js +340 -0
  49. package/src/analysis/codebase-scanner.js +384 -0
  50. package/src/analysis/line-counter.js +513 -0
  51. package/src/analysis/priority-calculator.js +679 -0
  52. package/src/analysis/report/analysis-report.js +250 -0
  53. package/src/analysis/report/package-analyzer.js +278 -0
  54. package/src/analysis/report/recommendation-generator.js +382 -0
  55. package/src/analysis/report/statistics-generator.js +515 -0
  56. package/src/analysis/reports/analysis-report-model.js +101 -0
  57. package/src/analysis/reports/recommendation-generator.js +283 -0
  58. package/src/analysis/reports/report-generators.js +191 -0
  59. package/src/analysis/reports/statistics-calculator.js +231 -0
  60. package/src/analysis/reports/trend-analyzer.js +219 -0
  61. package/src/analysis/strategy-generator.js +814 -0
  62. package/src/auto-mode/AutoModeBusinessLogic.js +836 -0
  63. package/src/config/refactoring-config.js +307 -0
  64. package/src/health-tracking/json-storage.js +38 -2
  65. package/src/ide-integration/applescript-manager-core.js +233 -0
  66. package/src/ide-integration/applescript-manager.cjs +357 -28
  67. package/src/ide-integration/applescript-manager.js +89 -3599
  68. package/src/ide-integration/cdp-manager.js +306 -0
  69. package/src/ide-integration/claude-code-cli-manager.cjs +1 -1
  70. package/src/ide-integration/continuation-handler.js +337 -0
  71. package/src/ide-integration/ide-status-checker.js +292 -0
  72. package/src/ide-integration/macos-ide-manager.js +627 -0
  73. package/src/ide-integration/macos-text-sender.js +528 -0
  74. package/src/ide-integration/response-reader.js +548 -0
  75. package/src/ide-integration/windows-automation-manager.js +121 -0
  76. package/src/ide-integration/windows-ide-manager.js +373 -0
  77. package/src/index.cjs +25 -3
  78. package/src/index.js +15 -1
  79. package/src/llm/direct-llm-manager.cjs +90 -2
  80. package/src/models/compliance-report.js +538 -0
  81. package/src/models/file-analysis.js +681 -0
  82. package/src/models/refactoring-plan.js +770 -0
  83. package/src/monitoring/alert-system.js +834 -0
  84. package/src/monitoring/compliance-progress-tracker.js +437 -0
  85. package/src/monitoring/continuous-scan-notifications.js +661 -0
  86. package/src/monitoring/continuous-scanner.js +279 -0
  87. package/src/monitoring/file-monitor/file-analyzer.js +262 -0
  88. package/src/monitoring/file-monitor/file-monitor.js +237 -0
  89. package/src/monitoring/file-monitor/watcher.js +194 -0
  90. package/src/monitoring/file-monitor.js +17 -0
  91. package/src/monitoring/notification-manager.js +437 -0
  92. package/src/monitoring/scanner-core.js +368 -0
  93. package/src/monitoring/scanner-events.js +214 -0
  94. package/src/monitoring/violation-notification-system.js +515 -0
  95. package/src/refactoring/boundaries/cohesion-analyzer.js +316 -0
  96. package/src/refactoring/boundaries/extraction-result.js +285 -0
  97. package/src/refactoring/boundaries/extraction-strategies.js +392 -0
  98. package/src/refactoring/boundaries/module-boundary.js +209 -0
  99. package/src/refactoring/boundary/boundary-detector.js +741 -0
  100. package/src/refactoring/boundary/boundary-types.js +405 -0
  101. package/src/refactoring/boundary/extraction-strategies.js +554 -0
  102. package/src/refactoring/boundary-extraction-result.js +77 -0
  103. package/src/refactoring/boundary-extraction-strategies.js +330 -0
  104. package/src/refactoring/boundary-extractor.js +384 -0
  105. package/src/refactoring/boundary-types.js +46 -0
  106. package/src/refactoring/circular/circular-dependency.js +88 -0
  107. package/src/refactoring/circular/cycle-detection.js +147 -0
  108. package/src/refactoring/circular/dependency-node.js +82 -0
  109. package/src/refactoring/circular/dependency-result.js +107 -0
  110. package/src/refactoring/circular/dependency-types.js +58 -0
  111. package/src/refactoring/circular/graph-builder.js +213 -0
  112. package/src/refactoring/circular/resolution-strategy.js +72 -0
  113. package/src/refactoring/circular/strategy-generator.js +229 -0
  114. package/src/refactoring/circular-dependency-resolver-original.js +809 -0
  115. package/src/refactoring/circular-dependency-resolver.js +200 -0
  116. package/src/refactoring/code-mover.js +761 -0
  117. package/src/refactoring/file-splitter.js +696 -0
  118. package/src/refactoring/functionality-validator.js +816 -0
  119. package/src/refactoring/import-manager.js +774 -0
  120. package/src/refactoring/module-boundary.js +107 -0
  121. package/src/refactoring/refactoring-executor.js +672 -0
  122. package/src/refactoring/refactoring-rollback.js +614 -0
  123. package/src/refactoring/test-validator.js +631 -0
  124. package/src/requirement-management/default-requirement-manager.js +321 -0
  125. package/src/requirement-management/requirement-file-parser.js +159 -0
  126. package/src/requirement-management/requirement-sequencer.js +221 -0
  127. package/src/rui/commands/AgentCommandParser.js +600 -0
  128. package/src/rui/commands/AgentCommands.js +487 -0
  129. package/src/rui/commands/AgentResponseFormatter.js +832 -0
  130. package/src/scripts/verify-full-compliance.js +269 -0
  131. package/src/sync/sync-engine-core.js +1 -0
  132. package/src/sync/sync-engine-remote-handlers.js +135 -0
  133. package/src/task-generation/automated-task-generator.js +351 -0
  134. package/src/task-generation/prioritizer.js +287 -0
  135. package/src/task-generation/task-list-updater.js +215 -0
  136. package/src/task-generation/task-management-integration.js +480 -0
  137. package/src/task-generation/task-manager-integration.js +270 -0
  138. package/src/task-generation/violation-task-generator.js +474 -0
  139. package/src/task-management/continuous-scan-integration.js +342 -0
  140. package/src/timeout-management/index.js +12 -3
  141. package/src/timeout-management/response-time-tracker.js +167 -0
  142. package/src/timeout-management/timeout-calculator.js +159 -0
  143. package/src/timeout-management/timeout-config-manager.js +172 -0
  144. package/src/utils/ast-analyzer.js +417 -0
  145. package/src/utils/current-requirement-manager.js +276 -0
  146. package/src/utils/current-requirement-operations.js +472 -0
  147. package/src/utils/dependency-mapper.js +456 -0
  148. package/src/utils/download-with-progress.js +4 -2
  149. package/src/utils/electron-update-checker.js +4 -1
  150. package/src/utils/file-size-analyzer.js +272 -0
  151. package/src/utils/import-updater.js +280 -0
  152. package/src/utils/refactoring-tools.js +512 -0
  153. package/src/utils/report-generator.js +569 -0
  154. package/src/utils/reports/report-analysis.js +218 -0
  155. package/src/utils/reports/report-types.js +55 -0
  156. package/src/utils/reports/summary-generators.js +102 -0
  157. package/src/utils/requirement-file-management.js +157 -0
  158. package/src/utils/requirement-helpers/requirement-file-ops.js +392 -0
  159. package/src/utils/requirement-helpers/requirement-mover.js +414 -0
  160. package/src/utils/requirement-helpers/requirement-parser.js +326 -0
  161. package/src/utils/requirement-helpers/requirement-status.js +320 -0
  162. package/src/utils/requirement-helpers-new.js +55 -0
  163. package/src/utils/requirement-helpers-refactored.js +367 -0
  164. package/src/utils/requirement-helpers.js +291 -1191
  165. package/src/utils/requirement-movement-operations.js +450 -0
  166. package/src/utils/requirement-movement.js +312 -0
  167. package/src/utils/requirement-parsing-helpers.js +56 -0
  168. package/src/utils/requirement-statistics.js +200 -0
  169. package/src/utils/requirement-text-utils.js +58 -0
  170. package/src/utils/rollback/rollback-handlers.js +125 -0
  171. package/src/utils/rollback/rollback-operation.js +63 -0
  172. package/src/utils/rollback/rollback-recorder.js +166 -0
  173. package/src/utils/rollback/rollback-state-manager.js +175 -0
  174. package/src/utils/rollback/rollback-types.js +33 -0
  175. package/src/utils/rollback/rollback-utils.js +110 -0
  176. package/src/utils/rollback-manager-original.js +569 -0
  177. package/src/utils/rollback-manager.js +202 -0
  178. package/src/utils/smoke-test-cli.js +362 -0
  179. package/src/utils/smoke-test-gui.js +351 -0
  180. package/src/utils/smoke-test-orchestrator.js +321 -0
  181. package/src/utils/smoke-test-runner.js +60 -0
  182. package/src/utils/smoke-test-web.js +347 -0
  183. package/src/utils/specification-helpers.js +39 -13
  184. package/src/utils/specification-migration.js +97 -0
  185. package/src/utils/test-runner.js +579 -0
  186. package/src/utils/validation-framework.js +518 -0
  187. package/src/validation/compliance-analyzer.js +197 -0
  188. package/src/validation/compliance-report-generator.js +343 -0
  189. package/src/validation/compliance-reporter.js +711 -0
  190. package/src/validation/compliance-rules.js +127 -0
  191. package/src/validation/constitution-validator-new.js +196 -0
  192. package/src/validation/constitution-validator.js +17 -0
  193. package/src/validation/file-validators.js +170 -0
  194. package/src/validation/line-limit/file-analyzer.js +201 -0
  195. package/src/validation/line-limit/line-limit-validator.js +208 -0
  196. package/src/validation/line-limit/validation-result.js +144 -0
  197. package/src/validation/line-limit-core.js +225 -0
  198. package/src/validation/line-limit-reporter.js +134 -0
  199. package/src/validation/line-limit-result.js +125 -0
  200. package/src/validation/line-limit-validator.js +41 -0
  201. package/src/validation/metrics-calculator.js +660 -0
  202. 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
- -- Cmd+Shift+L: focus Cascade chat input
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 2.0
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
- // Windsurf: spawn detached so vcm exits before keystrokes fire.
1953
- // The AppleScript has a leading `delay 3` to let the terminal go idle first.
1954
- if (ide === 'windsurf') {
1955
- const tempFile = join(tmpdir(), `windsurf_script_${Date.now()}.scpt`);
1956
- writeFileSync(tempFile, appleScript, 'utf8');
1957
- const child = spawn('osascript', [tempFile], {
1958
- detached: true,
1959
- stdio: 'ignore',
1960
- });
1961
- child.on('exit', () => {
1962
- try { unlinkSync(tempFile); } catch (_) {}
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: 'Message sent via AppleScript automation'
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 = { AppleScriptManager };
3230
+ module.exports = AppleScriptManager;