@mediaproc/cli 0.5.2 ā 0.7.0
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 +202 -1297
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +21 -12
- package/dist/cli.js.map +1 -1
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +1 -0
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/batch.d.ts +3 -0
- package/dist/commands/batch.d.ts.map +1 -0
- package/dist/commands/batch.js +269 -0
- package/dist/commands/batch.js.map +1 -0
- package/dist/commands/benchmark.d.ts +3 -0
- package/dist/commands/benchmark.d.ts.map +1 -0
- package/dist/commands/benchmark.js +124 -0
- package/dist/commands/benchmark.js.map +1 -0
- package/dist/commands/compare.d.ts +3 -0
- package/dist/commands/compare.d.ts.map +1 -0
- package/dist/commands/compare.js +102 -0
- package/dist/commands/compare.js.map +1 -0
- package/dist/commands/detect.d.ts +6 -0
- package/dist/commands/detect.d.ts.map +1 -0
- package/dist/commands/detect.js +90 -0
- package/dist/commands/detect.js.map +1 -0
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +222 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/history.d.ts +15 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +215 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/remove.js +1 -1
- package/dist/commands/remove.js.map +1 -1
- package/dist/commands/search.d.ts +3 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +193 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/stats.d.ts +3 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +155 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/template.d.ts +3 -0
- package/dist/commands/template.d.ts.map +1 -0
- package/dist/commands/template.js +184 -0
- package/dist/commands/template.js.map +1 -0
- package/dist/commands/watch.d.ts +3 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +106 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/commands/workspace.d.ts +3 -0
- package/dist/commands/workspace.d.ts.map +1 -0
- package/dist/commands/workspace.js +201 -0
- package/dist/commands/workspace.js.map +1 -0
- package/dist/utils/branding.d.ts +11 -0
- package/dist/utils/branding.d.ts.map +1 -0
- package/dist/utils/branding.js +59 -0
- package/dist/utils/branding.js.map +1 -0
- package/package.json +2 -2
- package/dist/commands/convert.d.ts +0 -7
- package/dist/commands/convert.d.ts.map +0 -1
- package/dist/commands/convert.js +0 -96
- package/dist/commands/convert.js.map +0 -1
- package/dist/commands/info.d.ts +0 -7
- package/dist/commands/info.d.ts.map +0 -1
- package/dist/commands/info.js +0 -117
- package/dist/commands/info.js.map +0 -1
- package/dist/commands/optimize.d.ts +0 -7
- package/dist/commands/optimize.d.ts.map +0 -1
- package/dist/commands/optimize.js +0 -196
- package/dist/commands/optimize.js.map +0 -1
- package/dist/commands/run.d.ts +0 -3
- package/dist/commands/run.d.ts.map +0 -1
- package/dist/commands/run.js +0 -16
- package/dist/commands/run.js.map +0 -1
- package/dist/commands/validate.d.ts +0 -3
- package/dist/commands/validate.d.ts.map +0 -1
- package/dist/commands/validate.js +0 -16
- package/dist/commands/validate.js.map +0 -1
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import { showBranding } from '../utils/branding';
|
|
5
|
+
import * as os from 'os';
|
|
6
|
+
const HISTORY_FILE = path.join(os.homedir(), '.mediaproc', 'history.json');
|
|
7
|
+
const MAX_HISTORY_ENTRIES = 1000;
|
|
8
|
+
export const historyCommand = new Command()
|
|
9
|
+
.name('history')
|
|
10
|
+
.description('Show command history and replay previous commands')
|
|
11
|
+
.option('-n, --limit <number>', 'Number of entries to show', '20')
|
|
12
|
+
.option('--clear', 'Clear history')
|
|
13
|
+
.option('--export <file>', 'Export history as shell script')
|
|
14
|
+
.option('--json', 'Output as JSON')
|
|
15
|
+
.action(async (options) => {
|
|
16
|
+
if (options.clear) {
|
|
17
|
+
clearHistory();
|
|
18
|
+
console.log('ā History cleared');
|
|
19
|
+
showBranding();
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (options.export) {
|
|
23
|
+
exportHistory(options.export);
|
|
24
|
+
console.log(`ā History exported to ${options.export}`);
|
|
25
|
+
showBranding();
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const history = loadHistory();
|
|
29
|
+
const limit = parseInt(options.limit);
|
|
30
|
+
if (history.length === 0) {
|
|
31
|
+
console.log('\nš No command history yet');
|
|
32
|
+
showBranding();
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (options.json) {
|
|
36
|
+
console.log(JSON.stringify(history.slice(-limit), null, 2));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
displayHistory(history, limit);
|
|
40
|
+
});
|
|
41
|
+
// Add replay subcommand
|
|
42
|
+
historyCommand
|
|
43
|
+
.command('replay')
|
|
44
|
+
.description('Replay a command from history')
|
|
45
|
+
.argument('<id>', 'History entry ID')
|
|
46
|
+
.action(async (id) => {
|
|
47
|
+
const history = loadHistory();
|
|
48
|
+
const entryId = parseInt(id);
|
|
49
|
+
const entry = history.find(e => e.id === entryId);
|
|
50
|
+
if (!entry) {
|
|
51
|
+
console.log(`\nā No history entry found with ID ${id}\n`);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
console.log(`\nš Replaying command ${id}:`);
|
|
55
|
+
console.log(` ${entry.command} ${entry.args.join(' ')}\n`);
|
|
56
|
+
// In a real implementation, this would actually execute the command
|
|
57
|
+
console.log('ā ļø Note: Command replay requires full implementation');
|
|
58
|
+
console.log(` Run manually: mediaproc ${entry.command} ${entry.args.join(' ')}`);
|
|
59
|
+
showBranding();
|
|
60
|
+
});
|
|
61
|
+
// Add search subcommand
|
|
62
|
+
historyCommand
|
|
63
|
+
.command('search')
|
|
64
|
+
.description('Search command history')
|
|
65
|
+
.argument('<query>', 'Search query')
|
|
66
|
+
.action(async (query) => {
|
|
67
|
+
const history = loadHistory();
|
|
68
|
+
const queryLower = query.toLowerCase();
|
|
69
|
+
const matches = history.filter(entry => {
|
|
70
|
+
const searchText = `${entry.command} ${entry.args.join(' ')}`.toLowerCase();
|
|
71
|
+
return searchText.includes(queryLower);
|
|
72
|
+
});
|
|
73
|
+
if (matches.length === 0) {
|
|
74
|
+
console.log(`\nā No commands found matching "${query}"\n`);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
console.log(`\nš Found ${matches.length} matching commands:\n`);
|
|
78
|
+
displayHistory(matches, matches.length);
|
|
79
|
+
showBranding();
|
|
80
|
+
});
|
|
81
|
+
// Add stats subcommand
|
|
82
|
+
historyCommand
|
|
83
|
+
.command('stats')
|
|
84
|
+
.description('Show history statistics')
|
|
85
|
+
.action(async () => {
|
|
86
|
+
const history = loadHistory();
|
|
87
|
+
if (history.length === 0) {
|
|
88
|
+
console.log('\nš No history data available\n');
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const commandCounts = {};
|
|
92
|
+
const successCount = history.filter(e => e.success).length;
|
|
93
|
+
const failCount = history.length - successCount;
|
|
94
|
+
history.forEach(entry => {
|
|
95
|
+
commandCounts[entry.command] = (commandCounts[entry.command] || 0) + 1;
|
|
96
|
+
});
|
|
97
|
+
const sortedCommands = Object.entries(commandCounts)
|
|
98
|
+
.sort((a, b) => b[1] - a[1])
|
|
99
|
+
.slice(0, 10);
|
|
100
|
+
console.log('\nš History Statistics\n');
|
|
101
|
+
console.log('ā'.repeat(50));
|
|
102
|
+
console.log(`\nTotal commands: ${history.length}`);
|
|
103
|
+
console.log(`Success rate: ${((successCount / history.length) * 100).toFixed(1)}%`);
|
|
104
|
+
console.log(`Successful: ${successCount}`);
|
|
105
|
+
console.log(`Failed: ${failCount}`);
|
|
106
|
+
console.log('\nš Most used commands:\n');
|
|
107
|
+
sortedCommands.forEach(([command, count], index) => {
|
|
108
|
+
const bar = 'ā'.repeat(Math.ceil((count / sortedCommands[0][1]) * 20));
|
|
109
|
+
console.log(`${index + 1}. ${command.padEnd(15)} ${bar} ${count}`);
|
|
110
|
+
});
|
|
111
|
+
// Calculate average duration if available
|
|
112
|
+
const withDuration = history.filter(e => e.duration !== undefined);
|
|
113
|
+
if (withDuration.length > 0) {
|
|
114
|
+
const avgDuration = withDuration.reduce((sum, e) => sum + (e.duration || 0), 0) / withDuration.length;
|
|
115
|
+
console.log(`\nā±ļø Average duration: ${(avgDuration / 1000).toFixed(2)}s`);
|
|
116
|
+
}
|
|
117
|
+
console.log('\n' + 'ā'.repeat(50));
|
|
118
|
+
showBranding();
|
|
119
|
+
});
|
|
120
|
+
function loadHistory() {
|
|
121
|
+
try {
|
|
122
|
+
ensureHistoryDirectory();
|
|
123
|
+
if (!fs.existsSync(HISTORY_FILE)) {
|
|
124
|
+
return [];
|
|
125
|
+
}
|
|
126
|
+
const data = fs.readFileSync(HISTORY_FILE, 'utf-8');
|
|
127
|
+
return JSON.parse(data);
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
console.error('Error loading history:', error);
|
|
131
|
+
return [];
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
export function getHistory() {
|
|
135
|
+
return loadHistory();
|
|
136
|
+
}
|
|
137
|
+
export function saveHistoryEntry(entry) {
|
|
138
|
+
try {
|
|
139
|
+
ensureHistoryDirectory();
|
|
140
|
+
const history = loadHistory();
|
|
141
|
+
const newEntry = {
|
|
142
|
+
...entry,
|
|
143
|
+
id: history.length > 0 ? Math.max(...history.map(e => e.id)) + 1 : 1,
|
|
144
|
+
timestamp: Date.now()
|
|
145
|
+
};
|
|
146
|
+
history.push(newEntry);
|
|
147
|
+
// Keep only last MAX_HISTORY_ENTRIES
|
|
148
|
+
const trimmedHistory = history.slice(-MAX_HISTORY_ENTRIES);
|
|
149
|
+
fs.writeFileSync(HISTORY_FILE, JSON.stringify(trimmedHistory, null, 2));
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
// Silently fail - history is not critical
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
function clearHistory() {
|
|
156
|
+
try {
|
|
157
|
+
if (fs.existsSync(HISTORY_FILE)) {
|
|
158
|
+
fs.unlinkSync(HISTORY_FILE);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
console.error('Error clearing history:', error);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function exportHistory(filename) {
|
|
166
|
+
const history = loadHistory();
|
|
167
|
+
const script = history
|
|
168
|
+
.map(entry => `# ${new Date(entry.timestamp).toLocaleString()}`)
|
|
169
|
+
.map((comment, index) => `${comment}\nmediaproc ${history[index].command} ${history[index].args.join(' ')}`)
|
|
170
|
+
.join('\n\n');
|
|
171
|
+
fs.writeFileSync(filename, `#!/bin/bash\n\n${script}\n`);
|
|
172
|
+
fs.chmodSync(filename, '755');
|
|
173
|
+
}
|
|
174
|
+
function displayHistory(history, limit) {
|
|
175
|
+
console.log('\nš Command History\n');
|
|
176
|
+
console.log('ā'.repeat(70));
|
|
177
|
+
const entries = history.slice(-limit).reverse();
|
|
178
|
+
entries.forEach(entry => {
|
|
179
|
+
const status = entry.success ? '\x1b[32mā\x1b[0m' : '\x1b[31mā\x1b[0m';
|
|
180
|
+
const time = formatTimestamp(entry.timestamp);
|
|
181
|
+
const duration = entry.duration ? `(${(entry.duration / 1000).toFixed(2)}s)` : '';
|
|
182
|
+
console.log(`\n${status} \x1b[36m#${entry.id}\x1b[0m ${time} ${duration}`);
|
|
183
|
+
console.log(` mediaproc ${entry.command} ${entry.args.join(' ')}`);
|
|
184
|
+
console.log(` \x1b[90mDirectory: ${entry.cwd}\x1b[0m`);
|
|
185
|
+
});
|
|
186
|
+
console.log('\n' + 'ā'.repeat(70));
|
|
187
|
+
console.log(`\nShowing last ${Math.min(limit, history.length)} of ${history.length} commands`);
|
|
188
|
+
console.log('\nš” Commands:');
|
|
189
|
+
console.log(' mediaproc history replay <id> - Replay a command');
|
|
190
|
+
console.log(' mediaproc history search <q> - Search history');
|
|
191
|
+
console.log(' mediaproc history stats - Show statistics');
|
|
192
|
+
console.log(' mediaproc history --export <f> - Export as script\n');
|
|
193
|
+
}
|
|
194
|
+
function formatTimestamp(timestamp) {
|
|
195
|
+
const now = Date.now();
|
|
196
|
+
const diff = now - timestamp;
|
|
197
|
+
const seconds = Math.floor(diff / 1000);
|
|
198
|
+
const minutes = Math.floor(seconds / 60);
|
|
199
|
+
const hours = Math.floor(minutes / 60);
|
|
200
|
+
const days = Math.floor(hours / 24);
|
|
201
|
+
if (days > 0)
|
|
202
|
+
return `${days}d ago`;
|
|
203
|
+
if (hours > 0)
|
|
204
|
+
return `${hours}h ago`;
|
|
205
|
+
if (minutes > 0)
|
|
206
|
+
return `${minutes}m ago`;
|
|
207
|
+
return `${seconds}s ago`;
|
|
208
|
+
}
|
|
209
|
+
function ensureHistoryDirectory() {
|
|
210
|
+
const dir = path.dirname(HISTORY_FILE);
|
|
211
|
+
if (!fs.existsSync(dir)) {
|
|
212
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/remove.js
CHANGED
|
@@ -28,7 +28,7 @@ async function isPluginGlobal(pluginName) {
|
|
|
28
28
|
export function removeCommand(program, pluginManager) {
|
|
29
29
|
program
|
|
30
30
|
.command('remove <plugin>')
|
|
31
|
-
.
|
|
31
|
+
.aliases(['uninstall', 'rm'])
|
|
32
32
|
.description('Uninstall a mediaproc plugin')
|
|
33
33
|
.option('-g, --global', 'Force global uninstall')
|
|
34
34
|
.option('-l, --local', 'Force local uninstall')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAG9B;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,UAAkB;IAC9C,IAAI,CAAC;QACH,kBAAkB;QAClB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE;YAC7E,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,aAAa,SA8DtB,CAAC"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { showBranding } from '../utils/branding';
|
|
3
|
+
export const searchCommand = new Command()
|
|
4
|
+
.name('search')
|
|
5
|
+
.description('Search for commands across all installed plugins')
|
|
6
|
+
.argument('<query>', 'Search query')
|
|
7
|
+
.option('-p, --plugin <name>', 'Search in specific plugin only')
|
|
8
|
+
.option('-l, --limit <number>', 'Limit number of results', '10')
|
|
9
|
+
.option('--json', 'Output results as JSON')
|
|
10
|
+
.action(async (query, options) => {
|
|
11
|
+
try {
|
|
12
|
+
const results = await searchCommands(query, options.plugin);
|
|
13
|
+
const limit = parseInt(options.limit);
|
|
14
|
+
if (results.length === 0) {
|
|
15
|
+
console.log(`\nā No commands found matching "${query}"\n`);
|
|
16
|
+
console.log('š” Tips:');
|
|
17
|
+
console.log(' ⢠Try different keywords (e.g., "resize", "convert", "compress")');
|
|
18
|
+
console.log(' ⢠Check installed plugins: \x1b[36mmediaproc list\x1b[0m');
|
|
19
|
+
console.log(' ⢠Install more plugins: \x1b[36mmediaproc add <plugin>\x1b[0m');
|
|
20
|
+
console.log(' ⢠View all available commands: \x1b[36mmediaproc <plugin> --help\x1b[0m');
|
|
21
|
+
showBranding();
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (options.json) {
|
|
25
|
+
console.log(JSON.stringify(results.slice(0, limit), null, 2));
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// Display results in a nice table format
|
|
29
|
+
console.log(`\nš Found ${results.length} command${results.length > 1 ? 's' : ''} matching "${query}"\n`);
|
|
30
|
+
console.log('ā' + 'ā'.repeat(78) + 'ā');
|
|
31
|
+
results.slice(0, limit).forEach((result, index) => {
|
|
32
|
+
const number = `${index + 1}.`.padEnd(3);
|
|
33
|
+
const pluginCmd = `${result.plugin} ${result.command}`;
|
|
34
|
+
const category = result.category ? ` [${result.category}]` : '';
|
|
35
|
+
console.log(`ā ${number} \x1b[1m\x1b[36m${pluginCmd}\x1b[0m${category}`);
|
|
36
|
+
console.log(`ā ${result.description}`);
|
|
37
|
+
console.log(`ā \x1b[90mUsage: mediaproc ${result.plugin} ${result.command} [options]\x1b[0m`);
|
|
38
|
+
if (index < Math.min(limit, results.length) - 1) {
|
|
39
|
+
console.log('ā' + ' '.repeat(78) + 'ā');
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
console.log('ā' + 'ā'.repeat(78) + 'ā');
|
|
43
|
+
if (results.length > limit) {
|
|
44
|
+
console.log(`\nš Showing top ${limit} results (${results.length} total)`);
|
|
45
|
+
console.log(` Use \x1b[36m--limit ${results.length}\x1b[0m to see all results`);
|
|
46
|
+
}
|
|
47
|
+
console.log(`\nš” Get detailed help: \x1b[36mmediaproc <plugin> <command> --help\x1b[0m`);
|
|
48
|
+
showBranding();
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
console.error(`\nā Search failed: ${error instanceof Error ? error.message : 'Unknown error'}\n`);
|
|
52
|
+
showBranding();
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
async function searchCommands(query, specificPlugin) {
|
|
57
|
+
const results = [];
|
|
58
|
+
const queryLower = query.toLowerCase();
|
|
59
|
+
const queryWords = queryLower.split(/\s+/).filter(w => w.length > 0);
|
|
60
|
+
// Get command database (static for now, will be dynamic with real plugins later)
|
|
61
|
+
const commandDatabase = getCommandDatabase();
|
|
62
|
+
// Search through all plugins and commands
|
|
63
|
+
for (const [plugin, commands] of Object.entries(commandDatabase)) {
|
|
64
|
+
if (specificPlugin && plugin !== specificPlugin) {
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
for (const [command, info] of Object.entries(commands)) {
|
|
68
|
+
const score = calculateRelevanceScore(queryLower, queryWords, plugin, command, info.description, info.category);
|
|
69
|
+
if (score > 0) {
|
|
70
|
+
results.push({
|
|
71
|
+
plugin,
|
|
72
|
+
command,
|
|
73
|
+
description: info.description,
|
|
74
|
+
category: info.category,
|
|
75
|
+
score
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Sort by relevance score (highest first)
|
|
81
|
+
results.sort((a, b) => b.score - a.score);
|
|
82
|
+
return results;
|
|
83
|
+
}
|
|
84
|
+
function calculateRelevanceScore(query, queryWords, plugin, command, description, category) {
|
|
85
|
+
let score = 0;
|
|
86
|
+
const searchText = `${plugin} ${command} ${description} ${category || ''}`.toLowerCase();
|
|
87
|
+
const commandLower = command.toLowerCase();
|
|
88
|
+
const descriptionLower = description.toLowerCase();
|
|
89
|
+
// Exact match in command name (highest priority)
|
|
90
|
+
if (commandLower === query) {
|
|
91
|
+
score += 100;
|
|
92
|
+
}
|
|
93
|
+
// Command starts with query
|
|
94
|
+
if (commandLower.startsWith(query)) {
|
|
95
|
+
score += 50;
|
|
96
|
+
}
|
|
97
|
+
// Command contains query
|
|
98
|
+
if (commandLower.includes(query)) {
|
|
99
|
+
score += 30;
|
|
100
|
+
}
|
|
101
|
+
// Description contains exact query
|
|
102
|
+
if (descriptionLower.includes(query)) {
|
|
103
|
+
score += 25;
|
|
104
|
+
}
|
|
105
|
+
// All query words present in searchable text
|
|
106
|
+
if (queryWords.every(word => searchText.includes(word))) {
|
|
107
|
+
score += 20;
|
|
108
|
+
}
|
|
109
|
+
// Individual word matches (with decreasing importance)
|
|
110
|
+
queryWords.forEach((word, index) => {
|
|
111
|
+
const wordWeight = 10 / (index + 1); // First word more important
|
|
112
|
+
if (commandLower.includes(word)) {
|
|
113
|
+
score += wordWeight * 2;
|
|
114
|
+
}
|
|
115
|
+
if (descriptionLower.includes(word)) {
|
|
116
|
+
score += wordWeight;
|
|
117
|
+
}
|
|
118
|
+
if (plugin.toLowerCase().includes(word)) {
|
|
119
|
+
score += wordWeight * 1.5;
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
return score;
|
|
123
|
+
}
|
|
124
|
+
function getCommandDatabase() {
|
|
125
|
+
// This is a comprehensive static database. In production, this should be loaded from installed plugins
|
|
126
|
+
return {
|
|
127
|
+
image: {
|
|
128
|
+
// Transform Commands
|
|
129
|
+
resize: { description: 'Resize images to specified dimensions', category: 'Transform' },
|
|
130
|
+
crop: { description: 'Crop images to specified area', category: 'Transform' },
|
|
131
|
+
rotate: { description: 'Rotate images by degrees', category: 'Transform' },
|
|
132
|
+
flip: { description: 'Flip images horizontally or vertically', category: 'Transform' },
|
|
133
|
+
trim: { description: 'Trim edges of images automatically', category: 'Transform' },
|
|
134
|
+
extend: { description: 'Extend image canvas with background', category: 'Transform' },
|
|
135
|
+
extract: { description: 'Extract region from images', category: 'Transform' },
|
|
136
|
+
// Format Commands
|
|
137
|
+
convert: { description: 'Convert images between formats (JPG, PNG, WebP, AVIF)', category: 'Format' },
|
|
138
|
+
compress: { description: 'Compress images with quality control', category: 'Format' },
|
|
139
|
+
optimize: { description: 'Optimize images for web delivery', category: 'Format' },
|
|
140
|
+
// Effect Commands
|
|
141
|
+
blur: { description: 'Apply gaussian blur effect to images', category: 'Effects' },
|
|
142
|
+
sharpen: { description: 'Sharpen images for clarity', category: 'Effects' },
|
|
143
|
+
grayscale: { description: 'Convert images to grayscale/black and white', category: 'Effects' },
|
|
144
|
+
tint: { description: 'Apply color tint overlay to images', category: 'Effects' },
|
|
145
|
+
negate: { description: 'Invert/negate image colors', category: 'Effects' },
|
|
146
|
+
normalize: { description: 'Normalize image levels and contrast', category: 'Effects' },
|
|
147
|
+
median: { description: 'Apply median filter for noise reduction', category: 'Effects' },
|
|
148
|
+
// Adjustment Commands
|
|
149
|
+
brightness: { description: 'Adjust image brightness levels', category: 'Adjustments' },
|
|
150
|
+
contrast: { description: 'Adjust image contrast', category: 'Adjustments' },
|
|
151
|
+
saturation: { description: 'Adjust color saturation intensity', category: 'Adjustments' },
|
|
152
|
+
hue: { description: 'Adjust color hue/tone', category: 'Adjustments' },
|
|
153
|
+
gamma: { description: 'Apply gamma correction to images', category: 'Adjustments' },
|
|
154
|
+
modulate: { description: 'Modulate brightness, saturation, and hue together', category: 'Adjustments' },
|
|
155
|
+
// Composition Commands
|
|
156
|
+
watermark: { description: 'Add text or image watermarks', category: 'Composition' },
|
|
157
|
+
thumbnail: { description: 'Generate thumbnails with smart cropping', category: 'Composition' },
|
|
158
|
+
border: { description: 'Add decorative borders to images', category: 'Composition' },
|
|
159
|
+
composite: { description: 'Composite/layer multiple images together', category: 'Composition' },
|
|
160
|
+
overlay: { description: 'Overlay images on top of each other with blending', category: 'Composition' },
|
|
161
|
+
mask: { description: 'Apply alpha mask to images', category: 'Composition' },
|
|
162
|
+
flatten: { description: 'Flatten transparent image layers', category: 'Composition' },
|
|
163
|
+
// Advanced Commands
|
|
164
|
+
convolve: { description: 'Apply custom convolution kernel filter', category: 'Advanced' },
|
|
165
|
+
recomb: { description: 'Recombine and remix color channels', category: 'Advanced' },
|
|
166
|
+
metadata: { description: 'View or edit image EXIF metadata', category: 'Advanced' },
|
|
167
|
+
histogram: { description: 'Generate image histogram data', category: 'Advanced' },
|
|
168
|
+
stats: { description: 'Get detailed image statistics', category: 'Advanced' },
|
|
169
|
+
},
|
|
170
|
+
video: {
|
|
171
|
+
compress: { description: 'Compress video files with quality presets', category: 'Processing' },
|
|
172
|
+
transcode: { description: 'Convert video to different codec/format (H.264, H.265, VP9)', category: 'Processing' },
|
|
173
|
+
trim: { description: 'Trim/cut video by time range or duration', category: 'Editing' },
|
|
174
|
+
resize: { description: 'Resize video dimensions and resolution', category: 'Transform' },
|
|
175
|
+
merge: { description: 'Merge/concatenate multiple video files', category: 'Editing' },
|
|
176
|
+
extract: { description: 'Extract audio track or video frames', category: 'Extraction' },
|
|
177
|
+
subtitle: { description: 'Add or extract video subtitles', category: 'Editing' },
|
|
178
|
+
thumbnail: { description: 'Generate video thumbnail at timestamp', category: 'Extraction' },
|
|
179
|
+
metadata: { description: 'View or edit video metadata', category: 'Info' },
|
|
180
|
+
},
|
|
181
|
+
audio: {
|
|
182
|
+
convert: { description: 'Convert audio between formats (MP3, AAC, WAV, FLAC)', category: 'Processing' },
|
|
183
|
+
normalize: { description: 'Normalize audio volume levels', category: 'Processing' },
|
|
184
|
+
trim: { description: 'Trim audio by time range', category: 'Editing' },
|
|
185
|
+
merge: { description: 'Merge multiple audio files into one', category: 'Editing' },
|
|
186
|
+
extract: { description: 'Extract audio from video files', category: 'Extraction' },
|
|
187
|
+
fade: { description: 'Apply fade in/out effects', category: 'Effects' },
|
|
188
|
+
volume: { description: 'Adjust audio volume levels', category: 'Adjustments' },
|
|
189
|
+
metadata: { description: 'View or edit audio metadata/tags', category: 'Info' },
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,eAAO,MAAM,YAAY,SA0BrB,CAAC"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import * as os from 'os';
|
|
5
|
+
import { getHistory } from './history.js';
|
|
6
|
+
const STATS_FILE = path.join(os.homedir(), '.mediaproc', 'stats.json');
|
|
7
|
+
export const statsCommand = new Command()
|
|
8
|
+
.name('stats')
|
|
9
|
+
.description('Show MediaProc usage statistics')
|
|
10
|
+
.option('-p, --plugin <name>', 'Show stats for specific plugin')
|
|
11
|
+
.option('--period <days>', 'Time period in days', '30')
|
|
12
|
+
.option('--reset', 'Reset all statistics')
|
|
13
|
+
.option('--json', 'Output as JSON')
|
|
14
|
+
.action(async (options) => {
|
|
15
|
+
if (options.reset) {
|
|
16
|
+
resetStats();
|
|
17
|
+
console.log('\nā Statistics reset\n');
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const stats = calculateStats(parseInt(options.period));
|
|
21
|
+
if (options.json) {
|
|
22
|
+
console.log(JSON.stringify(stats, null, 2));
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (options.plugin) {
|
|
26
|
+
displayPluginStats(options.plugin, stats);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
displayOverallStats(stats, parseInt(options.period));
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
function calculateStats(days) {
|
|
33
|
+
const history = getHistory();
|
|
34
|
+
const cutoff = Date.now() - (days * 24 * 60 * 60 * 1000);
|
|
35
|
+
const recentHistory = history.filter(entry => entry.timestamp >= cutoff);
|
|
36
|
+
const pluginUsage = {};
|
|
37
|
+
const commandUsage = {};
|
|
38
|
+
let totalTime = 0;
|
|
39
|
+
let successCount = 0;
|
|
40
|
+
recentHistory.forEach(entry => {
|
|
41
|
+
const plugin = entry.command.split(' ')[0];
|
|
42
|
+
pluginUsage[plugin] = (pluginUsage[plugin] || 0) + 1;
|
|
43
|
+
commandUsage[entry.command] = (commandUsage[entry.command] || 0) + 1;
|
|
44
|
+
if (entry.duration) {
|
|
45
|
+
totalTime += entry.duration;
|
|
46
|
+
}
|
|
47
|
+
if (entry.success) {
|
|
48
|
+
successCount++;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
return {
|
|
52
|
+
totalFiles: recentHistory.length,
|
|
53
|
+
totalTime,
|
|
54
|
+
storageSaved: 0, // Would need to track this separately
|
|
55
|
+
pluginUsage,
|
|
56
|
+
commandUsage,
|
|
57
|
+
successRate: recentHistory.length > 0 ? (successCount / recentHistory.length) * 100 : 0,
|
|
58
|
+
lastUpdated: Date.now()
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function displayOverallStats(stats, days) {
|
|
62
|
+
console.log('\nš MediaProc Statistics\n');
|
|
63
|
+
console.log('ā'.repeat(60));
|
|
64
|
+
console.log(`\nPeriod: Last ${days} days\n`);
|
|
65
|
+
console.log('š Overview:');
|
|
66
|
+
console.log(` Total files processed: ${stats.totalFiles.toLocaleString()}`);
|
|
67
|
+
console.log(` Success rate: ${stats.successRate.toFixed(1)}%`);
|
|
68
|
+
console.log(` Total processing time: ${formatDuration(stats.totalTime)}`);
|
|
69
|
+
if (stats.totalFiles > 0) {
|
|
70
|
+
console.log(` Average per file: ${formatDuration(stats.totalTime / stats.totalFiles)}`);
|
|
71
|
+
}
|
|
72
|
+
if (stats.storageSaved > 0) {
|
|
73
|
+
console.log(` Storage saved: ${formatBytes(stats.storageSaved)}`);
|
|
74
|
+
}
|
|
75
|
+
// Plugin usage
|
|
76
|
+
const topPlugins = Object.entries(stats.pluginUsage)
|
|
77
|
+
.sort((a, b) => b[1] - a[1])
|
|
78
|
+
.slice(0, 5);
|
|
79
|
+
if (topPlugins.length > 0) {
|
|
80
|
+
console.log('\nš Most Used Plugins:\n');
|
|
81
|
+
topPlugins.forEach(([plugin, count], index) => {
|
|
82
|
+
const percentage = (count / stats.totalFiles) * 100;
|
|
83
|
+
const bar = 'ā'.repeat(Math.ceil(percentage / 5));
|
|
84
|
+
console.log(`${index + 1}. ${plugin.padEnd(15)} ${bar} ${count} (${percentage.toFixed(1)}%)`);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
// Command usage
|
|
88
|
+
const topCommands = Object.entries(stats.commandUsage)
|
|
89
|
+
.sort((a, b) => b[1] - a[1])
|
|
90
|
+
.slice(0, 5);
|
|
91
|
+
if (topCommands.length > 0) {
|
|
92
|
+
console.log('\nā” Most Used Commands:\n');
|
|
93
|
+
topCommands.forEach(([command, count], index) => {
|
|
94
|
+
console.log(`${index + 1}. ${command.padEnd(25)} ${count} uses`);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
console.log('\n' + 'ā'.repeat(60));
|
|
98
|
+
console.log('\nš” Commands:');
|
|
99
|
+
console.log(' mediaproc stats --plugin <name> - Plugin-specific stats');
|
|
100
|
+
console.log(' mediaproc stats --period <days> - Change time period');
|
|
101
|
+
console.log(' mediaproc stats --reset - Reset statistics\n');
|
|
102
|
+
}
|
|
103
|
+
function displayPluginStats(plugin, stats) {
|
|
104
|
+
const pluginCount = stats.pluginUsage[plugin] || 0;
|
|
105
|
+
if (pluginCount === 0) {
|
|
106
|
+
console.log(`\nā No usage data for plugin "${plugin}"\n`);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
console.log(`\nš ${plugin.charAt(0).toUpperCase() + plugin.slice(1)} Plugin Statistics\n`);
|
|
110
|
+
console.log('ā'.repeat(60));
|
|
111
|
+
console.log(`\nTotal uses: ${pluginCount}`);
|
|
112
|
+
console.log(`Percentage of total: ${((pluginCount / stats.totalFiles) * 100).toFixed(1)}%`);
|
|
113
|
+
// Commands for this plugin
|
|
114
|
+
const pluginCommands = Object.entries(stats.commandUsage)
|
|
115
|
+
.filter(([cmd]) => cmd.startsWith(plugin))
|
|
116
|
+
.sort((a, b) => b[1] - a[1]);
|
|
117
|
+
if (pluginCommands.length > 0) {
|
|
118
|
+
console.log('\nā” Command Usage:\n');
|
|
119
|
+
pluginCommands.forEach(([command, count], index) => {
|
|
120
|
+
const commandName = command.replace(`${plugin} `, '');
|
|
121
|
+
const percentage = (count / pluginCount) * 100;
|
|
122
|
+
console.log(`${index + 1}. ${commandName.padEnd(20)} ${count} (${percentage.toFixed(1)}%)`);
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
console.log('\n' + 'ā'.repeat(60) + '\n');
|
|
126
|
+
}
|
|
127
|
+
function resetStats() {
|
|
128
|
+
try {
|
|
129
|
+
if (fs.existsSync(STATS_FILE)) {
|
|
130
|
+
fs.unlinkSync(STATS_FILE);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
console.error('Error resetting stats:', error);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function formatDuration(ms) {
|
|
138
|
+
if (ms < 1000)
|
|
139
|
+
return `${ms}ms`;
|
|
140
|
+
if (ms < 60000)
|
|
141
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
142
|
+
if (ms < 3600000)
|
|
143
|
+
return `${(ms / 60000).toFixed(1)}m`;
|
|
144
|
+
return `${(ms / 3600000).toFixed(1)}h`;
|
|
145
|
+
}
|
|
146
|
+
function formatBytes(bytes) {
|
|
147
|
+
if (bytes < 1024)
|
|
148
|
+
return `${bytes}B`;
|
|
149
|
+
if (bytes < 1024 * 1024)
|
|
150
|
+
return `${(bytes / 1024).toFixed(1)}KB`;
|
|
151
|
+
if (bytes < 1024 * 1024 * 1024)
|
|
152
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
|
|
153
|
+
return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)}GB`;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=stats.js.map
|