maistro 1.0.390

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 (111) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +107 -0
  3. package/dist/app.d.ts +247 -0
  4. package/dist/app.d.ts.map +1 -0
  5. package/dist/app.js +4971 -0
  6. package/dist/app.js.map +1 -0
  7. package/dist/buildInfo.d.ts +5 -0
  8. package/dist/buildInfo.d.ts.map +1 -0
  9. package/dist/buildInfo.js +2 -0
  10. package/dist/buildInfo.js.map +1 -0
  11. package/dist/caffeinate.d.ts +72 -0
  12. package/dist/caffeinate.d.ts.map +1 -0
  13. package/dist/caffeinate.js +258 -0
  14. package/dist/caffeinate.js.map +1 -0
  15. package/dist/claudePath.d.ts +10 -0
  16. package/dist/claudePath.d.ts.map +1 -0
  17. package/dist/claudePath.js +34 -0
  18. package/dist/claudePath.js.map +1 -0
  19. package/dist/clipboard.d.ts +44 -0
  20. package/dist/clipboard.d.ts.map +1 -0
  21. package/dist/clipboard.js +442 -0
  22. package/dist/clipboard.js.map +1 -0
  23. package/dist/config.d.ts +211 -0
  24. package/dist/config.d.ts.map +1 -0
  25. package/dist/config.js +933 -0
  26. package/dist/config.js.map +1 -0
  27. package/dist/constants.d.ts +50 -0
  28. package/dist/constants.d.ts.map +1 -0
  29. package/dist/constants.js +81 -0
  30. package/dist/constants.js.map +1 -0
  31. package/dist/contextBuilder.d.ts +38 -0
  32. package/dist/contextBuilder.d.ts.map +1 -0
  33. package/dist/contextBuilder.js +113 -0
  34. package/dist/contextBuilder.js.map +1 -0
  35. package/dist/dependencyDetector.d.ts +57 -0
  36. package/dist/dependencyDetector.d.ts.map +1 -0
  37. package/dist/dependencyDetector.js +505 -0
  38. package/dist/dependencyDetector.js.map +1 -0
  39. package/dist/executor.d.ts +83 -0
  40. package/dist/executor.d.ts.map +1 -0
  41. package/dist/executor.js +583 -0
  42. package/dist/executor.js.map +1 -0
  43. package/dist/git.d.ts +85 -0
  44. package/dist/git.d.ts.map +1 -0
  45. package/dist/git.js +283 -0
  46. package/dist/git.js.map +1 -0
  47. package/dist/imageManager.d.ts +161 -0
  48. package/dist/imageManager.d.ts.map +1 -0
  49. package/dist/imageManager.js +674 -0
  50. package/dist/imageManager.js.map +1 -0
  51. package/dist/index.d.ts +3 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +437 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/input-visual-test.d.ts +9 -0
  56. package/dist/input-visual-test.d.ts.map +1 -0
  57. package/dist/input-visual-test.js +108 -0
  58. package/dist/input-visual-test.js.map +1 -0
  59. package/dist/inputBox.d.ts +228 -0
  60. package/dist/inputBox.d.ts.map +1 -0
  61. package/dist/inputBox.js +966 -0
  62. package/dist/inputBox.js.map +1 -0
  63. package/dist/logger.d.ts +136 -0
  64. package/dist/logger.d.ts.map +1 -0
  65. package/dist/logger.js +347 -0
  66. package/dist/logger.js.map +1 -0
  67. package/dist/orchestrator.d.ts +149 -0
  68. package/dist/orchestrator.d.ts.map +1 -0
  69. package/dist/orchestrator.js +821 -0
  70. package/dist/orchestrator.js.map +1 -0
  71. package/dist/planner.d.ts +86 -0
  72. package/dist/planner.d.ts.map +1 -0
  73. package/dist/planner.js +830 -0
  74. package/dist/planner.js.map +1 -0
  75. package/dist/pty-test-runner.d.ts +87 -0
  76. package/dist/pty-test-runner.d.ts.map +1 -0
  77. package/dist/pty-test-runner.js +721 -0
  78. package/dist/pty-test-runner.js.map +1 -0
  79. package/dist/screen.d.ts +44 -0
  80. package/dist/screen.d.ts.map +1 -0
  81. package/dist/screen.js +152 -0
  82. package/dist/screen.js.map +1 -0
  83. package/dist/taskQueue.d.ts +70 -0
  84. package/dist/taskQueue.d.ts.map +1 -0
  85. package/dist/taskQueue.js +282 -0
  86. package/dist/taskQueue.js.map +1 -0
  87. package/dist/tui-test-harness.d.ts +216 -0
  88. package/dist/tui-test-harness.d.ts.map +1 -0
  89. package/dist/tui-test-harness.js +527 -0
  90. package/dist/tui-test-harness.js.map +1 -0
  91. package/dist/types.d.ts +257 -0
  92. package/dist/types.d.ts.map +1 -0
  93. package/dist/types.js +46 -0
  94. package/dist/types.js.map +1 -0
  95. package/dist/ui-visual-test.d.ts +15 -0
  96. package/dist/ui-visual-test.d.ts.map +1 -0
  97. package/dist/ui-visual-test.js +141 -0
  98. package/dist/ui-visual-test.js.map +1 -0
  99. package/dist/ui.d.ts +272 -0
  100. package/dist/ui.d.ts.map +1 -0
  101. package/dist/ui.js +1531 -0
  102. package/dist/ui.js.map +1 -0
  103. package/dist/validator.d.ts +53 -0
  104. package/dist/validator.d.ts.map +1 -0
  105. package/dist/validator.js +491 -0
  106. package/dist/validator.js.map +1 -0
  107. package/dist/versionCheck.d.ts +63 -0
  108. package/dist/versionCheck.d.ts.map +1 -0
  109. package/dist/versionCheck.js +261 -0
  110. package/dist/versionCheck.js.map +1 -0
  111. package/package.json +62 -0
@@ -0,0 +1,258 @@
1
+ import { spawn, execSync } from 'node:child_process';
2
+ import { platform } from 'node:os';
3
+ import { getPreventSleep } from './config.js';
4
+ import { getLogger } from './logger.js';
5
+ /**
6
+ * Detect the best available method for preventing sleep on the current platform
7
+ */
8
+ function detectSleepPreventionMethod(currentPlatform) {
9
+ if (currentPlatform === 'darwin') {
10
+ return 'caffeinate';
11
+ }
12
+ if (currentPlatform === 'linux') {
13
+ // Check if systemd-inhibit is available
14
+ try {
15
+ execSync('which systemd-inhibit', { stdio: 'ignore' });
16
+ return 'systemd-inhibit';
17
+ }
18
+ catch {
19
+ // systemd-inhibit not available
20
+ return 'none';
21
+ }
22
+ }
23
+ if (currentPlatform === 'win32') {
24
+ // Windows always has powercfg available
25
+ return 'windows-powercfg';
26
+ }
27
+ return 'none';
28
+ }
29
+ /**
30
+ * Manages sleep prevention across different platforms.
31
+ * - macOS: Uses `caffeinate -i` to prevent idle sleep
32
+ * - Linux: Uses `systemd-inhibit` if available
33
+ * - Windows: Uses `powercfg /change` to disable sleep temporarily
34
+ */
35
+ class SleepPreventionManager {
36
+ process = null;
37
+ currentPlatform;
38
+ method;
39
+ windowsOriginalSettings = null;
40
+ constructor() {
41
+ const p = platform();
42
+ this.currentPlatform = (p === 'darwin' || p === 'linux' || p === 'win32') ? p : 'other';
43
+ this.method = detectSleepPreventionMethod(this.currentPlatform);
44
+ }
45
+ /**
46
+ * Check if sleep prevention is available on this platform
47
+ */
48
+ isAvailable() {
49
+ return this.method !== 'none';
50
+ }
51
+ /**
52
+ * Get the method being used for sleep prevention
53
+ */
54
+ getMethod() {
55
+ return this.method;
56
+ }
57
+ /**
58
+ * Check if sleep prevention is currently active
59
+ */
60
+ isRunning() {
61
+ if (this.method === 'windows-powercfg') {
62
+ // Windows uses settings, not a process
63
+ return this.windowsOriginalSettings !== null;
64
+ }
65
+ return this.process !== null && !this.process.killed;
66
+ }
67
+ /**
68
+ * Start sleep prevention.
69
+ * Returns true if started successfully or if already running.
70
+ */
71
+ start() {
72
+ // Check if setting is enabled
73
+ if (!getPreventSleep()) {
74
+ return false;
75
+ }
76
+ // Check if method is available
77
+ if (this.method === 'none') {
78
+ return false;
79
+ }
80
+ // Already running
81
+ if (this.isRunning()) {
82
+ return true;
83
+ }
84
+ try {
85
+ switch (this.method) {
86
+ case 'caffeinate':
87
+ return this.startCaffeinate();
88
+ case 'systemd-inhibit':
89
+ return this.startSystemdInhibit();
90
+ case 'windows-powercfg':
91
+ return this.startWindowsPowercfg();
92
+ default:
93
+ return false;
94
+ }
95
+ }
96
+ catch (error) {
97
+ getLogger()?.error('Failed to start sleep prevention', {
98
+ method: this.method,
99
+ error: error instanceof Error ? error.message : String(error),
100
+ });
101
+ return false;
102
+ }
103
+ }
104
+ startCaffeinate() {
105
+ // -i: Create an assertion to prevent idle sleep
106
+ // This allows the display to sleep but prevents system sleep
107
+ this.process = spawn('caffeinate', ['-i'], {
108
+ detached: false,
109
+ stdio: 'ignore',
110
+ });
111
+ this.setupProcessHandlers('caffeinate');
112
+ getLogger()?.info('Started caffeinate to prevent system sleep');
113
+ return true;
114
+ }
115
+ startSystemdInhibit() {
116
+ // systemd-inhibit --what=idle --who=maistro --why="Task execution" --mode=block sleep infinity
117
+ // This prevents idle sleep while the process is running
118
+ this.process = spawn('systemd-inhibit', [
119
+ '--what=idle',
120
+ '--who=maistro',
121
+ '--why=Task execution in progress',
122
+ '--mode=block',
123
+ 'sleep', 'infinity'
124
+ ], {
125
+ detached: false,
126
+ stdio: 'ignore',
127
+ });
128
+ this.setupProcessHandlers('systemd-inhibit');
129
+ getLogger()?.info('Started systemd-inhibit to prevent system sleep');
130
+ return true;
131
+ }
132
+ startWindowsPowercfg() {
133
+ try {
134
+ // Save current settings and disable sleep
135
+ // Note: This affects system settings, so we need to restore them on stop
136
+ // Using a long timeout (0 = never) for AC power
137
+ execSync('powercfg /change standby-timeout-ac 0', { stdio: 'ignore' });
138
+ execSync('powercfg /change hibernate-timeout-ac 0', { stdio: 'ignore' });
139
+ // Store that we made changes (we can't easily query original settings)
140
+ this.windowsOriginalSettings = { standby: 'modified', hibernate: 'modified' };
141
+ getLogger()?.info('Disabled Windows sleep via powercfg');
142
+ return true;
143
+ }
144
+ catch (error) {
145
+ getLogger()?.error('Failed to modify Windows power settings', {
146
+ error: error instanceof Error ? error.message : String(error),
147
+ });
148
+ return false;
149
+ }
150
+ }
151
+ setupProcessHandlers(methodName) {
152
+ if (!this.process)
153
+ return;
154
+ this.process.on('error', (err) => {
155
+ getLogger()?.error(`${methodName} process error`, { error: err.message });
156
+ this.process = null;
157
+ });
158
+ this.process.on('exit', () => {
159
+ this.process = null;
160
+ });
161
+ }
162
+ /**
163
+ * Stop sleep prevention, allowing system to sleep normally.
164
+ */
165
+ stop() {
166
+ if (this.method === 'windows-powercfg') {
167
+ this.stopWindowsPowercfg();
168
+ return;
169
+ }
170
+ if (!this.process) {
171
+ return;
172
+ }
173
+ try {
174
+ // Send SIGTERM for graceful shutdown
175
+ this.process.kill('SIGTERM');
176
+ getLogger()?.info('Stopped sleep prevention', { method: this.method });
177
+ }
178
+ catch (error) {
179
+ getLogger()?.error('Failed to stop sleep prevention', {
180
+ method: this.method,
181
+ error: error instanceof Error ? error.message : String(error),
182
+ });
183
+ }
184
+ finally {
185
+ this.process = null;
186
+ }
187
+ }
188
+ stopWindowsPowercfg() {
189
+ if (!this.windowsOriginalSettings) {
190
+ return;
191
+ }
192
+ try {
193
+ // Restore reasonable defaults (30 minutes for standby, 60 for hibernate)
194
+ // Note: We can't easily restore the exact original settings
195
+ execSync('powercfg /change standby-timeout-ac 30', { stdio: 'ignore' });
196
+ execSync('powercfg /change hibernate-timeout-ac 60', { stdio: 'ignore' });
197
+ getLogger()?.info('Restored Windows power settings');
198
+ }
199
+ catch (error) {
200
+ getLogger()?.error('Failed to restore Windows power settings', {
201
+ error: error instanceof Error ? error.message : String(error),
202
+ });
203
+ }
204
+ finally {
205
+ this.windowsOriginalSettings = null;
206
+ }
207
+ }
208
+ }
209
+ // Singleton instance
210
+ let manager = null;
211
+ /**
212
+ * Get the sleep prevention manager singleton
213
+ * @deprecated Use getSleepPreventionManager instead
214
+ */
215
+ export function getCaffeinateManager() {
216
+ if (!manager) {
217
+ manager = new SleepPreventionManager();
218
+ }
219
+ return manager;
220
+ }
221
+ /**
222
+ * Get the sleep prevention manager singleton
223
+ */
224
+ export function getSleepPreventionManager() {
225
+ return getCaffeinateManager();
226
+ }
227
+ /**
228
+ * Start sleep prevention if enabled in settings
229
+ * Works on macOS (caffeinate), Linux (systemd-inhibit), and Windows (powercfg)
230
+ */
231
+ export function startCaffeinate() {
232
+ return getCaffeinateManager().start();
233
+ }
234
+ /**
235
+ * Stop sleep prevention
236
+ */
237
+ export function stopCaffeinate() {
238
+ getCaffeinateManager().stop();
239
+ }
240
+ /**
241
+ * Check if sleep prevention is currently active
242
+ */
243
+ export function isCaffeinateRunning() {
244
+ return getCaffeinateManager().isRunning();
245
+ }
246
+ /**
247
+ * Check if sleep prevention is available on this platform
248
+ */
249
+ export function isCaffeinateAvailable() {
250
+ return getCaffeinateManager().isAvailable();
251
+ }
252
+ /**
253
+ * Get the sleep prevention method being used
254
+ */
255
+ export function getSleepPreventionMethod() {
256
+ return getCaffeinateManager().getMethod();
257
+ }
258
+ //# sourceMappingURL=caffeinate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caffeinate.js","sourceRoot":"","sources":["../src/caffeinate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Find the Claude Code CLI executable path.
3
+ * Checks common locations before falling back to PATH.
4
+ */
5
+ export declare function findClaudePath(): string;
6
+ /**
7
+ * Get the Claude Code CLI path (cached).
8
+ */
9
+ export declare function getClaudePath(): string;
10
+ //# sourceMappingURL=claudePath.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claudePath.d.ts","sourceRoot":"","sources":["../src/claudePath.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAgBvC;AAKD;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAKtC"}
@@ -0,0 +1,34 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ /**
5
+ * Find the Claude Code CLI executable path.
6
+ * Checks common locations before falling back to PATH.
7
+ */
8
+ export function findClaudePath() {
9
+ const locations = [
10
+ join(homedir(), '.claude', 'local', 'claude'),
11
+ 'claude', // Fall back to PATH
12
+ ];
13
+ for (const location of locations) {
14
+ if (location === 'claude') {
15
+ return location; // Will try PATH
16
+ }
17
+ if (existsSync(location)) {
18
+ return location;
19
+ }
20
+ }
21
+ return 'claude'; // Default to PATH
22
+ }
23
+ // Cache the claude path for performance
24
+ let cachedClaudePath = null;
25
+ /**
26
+ * Get the Claude Code CLI path (cached).
27
+ */
28
+ export function getClaudePath() {
29
+ if (!cachedClaudePath) {
30
+ cachedClaudePath = findClaudePath();
31
+ }
32
+ return cachedClaudePath;
33
+ }
34
+ //# sourceMappingURL=claudePath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claudePath.js","sourceRoot":"","sources":["../src/claudePath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,SAAS,GAAG;QAChB,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC;QAC7C,QAAQ,EAAE,oBAAoB;KAC/B,CAAC;IAEF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO,QAAQ,CAAC,CAAC,gBAAgB;QACnC,CAAC;QACD,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,CAAC,kBAAkB;AACrC,CAAC;AAED,wCAAwC;AACxC,IAAI,gBAAgB,GAAkB,IAAI,CAAC;AAE3C;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,gBAAgB,GAAG,cAAc,EAAE,CAAC;IACtC,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Clipboard utilities for accessing system clipboard data.
3
+ *
4
+ * This module provides cross-platform clipboard image access.
5
+ * - macOS: Uses osascript/AppleScript
6
+ * - Linux: Uses xclip if available
7
+ * - Windows: Uses PowerShell Get-Clipboard
8
+ */
9
+ /**
10
+ * Result of clipboard image check/retrieval
11
+ */
12
+ export interface ClipboardImageResult {
13
+ hasImage: boolean;
14
+ tempFilePath?: string;
15
+ error?: string;
16
+ format?: 'png' | 'tiff' | 'gif' | 'jpeg';
17
+ size?: number;
18
+ }
19
+ /**
20
+ * Check if clipboard image access is supported on the current platform
21
+ */
22
+ export declare function isClipboardImageSupported(): boolean;
23
+ /**
24
+ * Check if the system clipboard contains an image
25
+ * Cross-platform: macOS, Linux (with xclip), Windows
26
+ */
27
+ export declare function hasClipboardImage(): boolean;
28
+ /**
29
+ * Get the image format from clipboard
30
+ * Cross-platform: macOS, Linux (with xclip), Windows
31
+ */
32
+ export declare function getClipboardImageFormat(): 'png' | 'tiff' | 'gif' | 'jpeg' | null;
33
+ /**
34
+ * Save clipboard image to a temporary file
35
+ * Cross-platform: macOS, Linux (with xclip), Windows
36
+ *
37
+ * @returns ClipboardImageResult with tempFilePath if successful
38
+ */
39
+ export declare function saveClipboardImage(): Promise<ClipboardImageResult>;
40
+ /**
41
+ * Clean up a temporary clipboard image file
42
+ */
43
+ export declare function cleanupTempImage(tempFilePath: string): void;
44
+ //# sourceMappingURL=clipboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../src/clipboard.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAkCD;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAMnD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAiB3C;AA4DD;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,CAkBhF;AAkDD;;;;;GAKG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAuCxE;AAmMD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAQ3D"}