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.
- package/LICENSE +15 -0
- package/README.md +107 -0
- package/dist/app.d.ts +247 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +4971 -0
- package/dist/app.js.map +1 -0
- package/dist/buildInfo.d.ts +5 -0
- package/dist/buildInfo.d.ts.map +1 -0
- package/dist/buildInfo.js +2 -0
- package/dist/buildInfo.js.map +1 -0
- package/dist/caffeinate.d.ts +72 -0
- package/dist/caffeinate.d.ts.map +1 -0
- package/dist/caffeinate.js +258 -0
- package/dist/caffeinate.js.map +1 -0
- package/dist/claudePath.d.ts +10 -0
- package/dist/claudePath.d.ts.map +1 -0
- package/dist/claudePath.js +34 -0
- package/dist/claudePath.js.map +1 -0
- package/dist/clipboard.d.ts +44 -0
- package/dist/clipboard.d.ts.map +1 -0
- package/dist/clipboard.js +442 -0
- package/dist/clipboard.js.map +1 -0
- package/dist/config.d.ts +211 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +933 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.d.ts +50 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +81 -0
- package/dist/constants.js.map +1 -0
- package/dist/contextBuilder.d.ts +38 -0
- package/dist/contextBuilder.d.ts.map +1 -0
- package/dist/contextBuilder.js +113 -0
- package/dist/contextBuilder.js.map +1 -0
- package/dist/dependencyDetector.d.ts +57 -0
- package/dist/dependencyDetector.d.ts.map +1 -0
- package/dist/dependencyDetector.js +505 -0
- package/dist/dependencyDetector.js.map +1 -0
- package/dist/executor.d.ts +83 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +583 -0
- package/dist/executor.js.map +1 -0
- package/dist/git.d.ts +85 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +283 -0
- package/dist/git.js.map +1 -0
- package/dist/imageManager.d.ts +161 -0
- package/dist/imageManager.d.ts.map +1 -0
- package/dist/imageManager.js +674 -0
- package/dist/imageManager.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +437 -0
- package/dist/index.js.map +1 -0
- package/dist/input-visual-test.d.ts +9 -0
- package/dist/input-visual-test.d.ts.map +1 -0
- package/dist/input-visual-test.js +108 -0
- package/dist/input-visual-test.js.map +1 -0
- package/dist/inputBox.d.ts +228 -0
- package/dist/inputBox.d.ts.map +1 -0
- package/dist/inputBox.js +966 -0
- package/dist/inputBox.js.map +1 -0
- package/dist/logger.d.ts +136 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +347 -0
- package/dist/logger.js.map +1 -0
- package/dist/orchestrator.d.ts +149 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +821 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/planner.d.ts +86 -0
- package/dist/planner.d.ts.map +1 -0
- package/dist/planner.js +830 -0
- package/dist/planner.js.map +1 -0
- package/dist/pty-test-runner.d.ts +87 -0
- package/dist/pty-test-runner.d.ts.map +1 -0
- package/dist/pty-test-runner.js +721 -0
- package/dist/pty-test-runner.js.map +1 -0
- package/dist/screen.d.ts +44 -0
- package/dist/screen.d.ts.map +1 -0
- package/dist/screen.js +152 -0
- package/dist/screen.js.map +1 -0
- package/dist/taskQueue.d.ts +70 -0
- package/dist/taskQueue.d.ts.map +1 -0
- package/dist/taskQueue.js +282 -0
- package/dist/taskQueue.js.map +1 -0
- package/dist/tui-test-harness.d.ts +216 -0
- package/dist/tui-test-harness.d.ts.map +1 -0
- package/dist/tui-test-harness.js +527 -0
- package/dist/tui-test-harness.js.map +1 -0
- package/dist/types.d.ts +257 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +46 -0
- package/dist/types.js.map +1 -0
- package/dist/ui-visual-test.d.ts +15 -0
- package/dist/ui-visual-test.d.ts.map +1 -0
- package/dist/ui-visual-test.js +141 -0
- package/dist/ui-visual-test.js.map +1 -0
- package/dist/ui.d.ts +272 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +1531 -0
- package/dist/ui.js.map +1 -0
- package/dist/validator.d.ts +53 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +491 -0
- package/dist/validator.js.map +1 -0
- package/dist/versionCheck.d.ts +63 -0
- package/dist/versionCheck.d.ts.map +1 -0
- package/dist/versionCheck.js +261 -0
- package/dist/versionCheck.js.map +1 -0
- 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"}
|