@appkit/llamacpp-cli 1.0.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/.versionrc.json +16 -0
- package/CHANGELOG.md +10 -0
- package/README.md +474 -0
- package/bin/llamacpp +26 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +196 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/delete.d.ts +2 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +104 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/list.d.ts +2 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +37 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/logs.d.ts +8 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +57 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/ps.d.ts +2 -0
- package/dist/commands/ps.d.ts.map +1 -0
- package/dist/commands/ps.js +72 -0
- package/dist/commands/ps.js.map +1 -0
- package/dist/commands/pull.d.ts +6 -0
- package/dist/commands/pull.d.ts.map +1 -0
- package/dist/commands/pull.js +36 -0
- package/dist/commands/pull.js.map +1 -0
- package/dist/commands/rm.d.ts +2 -0
- package/dist/commands/rm.d.ts.map +1 -0
- package/dist/commands/rm.js +134 -0
- package/dist/commands/rm.js.map +1 -0
- package/dist/commands/run.d.ts +2 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +198 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/search.d.ts +7 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +93 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/show.d.ts +6 -0
- package/dist/commands/show.d.ts.map +1 -0
- package/dist/commands/show.js +196 -0
- package/dist/commands/show.js.map +1 -0
- package/dist/commands/start.d.ts +9 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +150 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/stop.d.ts +2 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +39 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/lib/config-generator.d.ts +30 -0
- package/dist/lib/config-generator.d.ts.map +1 -0
- package/dist/lib/config-generator.js +125 -0
- package/dist/lib/config-generator.js.map +1 -0
- package/dist/lib/launchctl-manager.d.ts +55 -0
- package/dist/lib/launchctl-manager.d.ts.map +1 -0
- package/dist/lib/launchctl-manager.js +227 -0
- package/dist/lib/launchctl-manager.js.map +1 -0
- package/dist/lib/model-downloader.d.ts +44 -0
- package/dist/lib/model-downloader.d.ts.map +1 -0
- package/dist/lib/model-downloader.js +248 -0
- package/dist/lib/model-downloader.js.map +1 -0
- package/dist/lib/model-scanner.d.ts +31 -0
- package/dist/lib/model-scanner.d.ts.map +1 -0
- package/dist/lib/model-scanner.js +145 -0
- package/dist/lib/model-scanner.js.map +1 -0
- package/dist/lib/model-search.d.ts +29 -0
- package/dist/lib/model-search.d.ts.map +1 -0
- package/dist/lib/model-search.js +131 -0
- package/dist/lib/model-search.js.map +1 -0
- package/dist/lib/port-manager.d.ts +26 -0
- package/dist/lib/port-manager.d.ts.map +1 -0
- package/dist/lib/port-manager.js +75 -0
- package/dist/lib/port-manager.js.map +1 -0
- package/dist/lib/state-manager.d.ts +59 -0
- package/dist/lib/state-manager.d.ts.map +1 -0
- package/dist/lib/state-manager.js +178 -0
- package/dist/lib/state-manager.js.map +1 -0
- package/dist/lib/status-checker.d.ts +28 -0
- package/dist/lib/status-checker.d.ts.map +1 -0
- package/dist/lib/status-checker.js +99 -0
- package/dist/lib/status-checker.js.map +1 -0
- package/dist/types/global-config.d.ts +16 -0
- package/dist/types/global-config.d.ts.map +1 -0
- package/dist/types/global-config.js +18 -0
- package/dist/types/global-config.js.map +1 -0
- package/dist/types/model-info.d.ts +9 -0
- package/dist/types/model-info.d.ts.map +1 -0
- package/dist/types/model-info.js +3 -0
- package/dist/types/model-info.js.map +1 -0
- package/dist/types/server-config.d.ts +27 -0
- package/dist/types/server-config.d.ts.map +1 -0
- package/dist/types/server-config.js +15 -0
- package/dist/types/server-config.js.map +1 -0
- package/dist/utils/file-utils.d.ts +49 -0
- package/dist/utils/file-utils.d.ts.map +1 -0
- package/dist/utils/file-utils.js +144 -0
- package/dist/utils/file-utils.js.map +1 -0
- package/dist/utils/format-utils.d.ts +29 -0
- package/dist/utils/format-utils.d.ts.map +1 -0
- package/dist/utils/format-utils.js +82 -0
- package/dist/utils/format-utils.js.map +1 -0
- package/dist/utils/process-utils.d.ts +27 -0
- package/dist/utils/process-utils.d.ts.map +1 -0
- package/dist/utils/process-utils.js +66 -0
- package/dist/utils/process-utils.js.map +1 -0
- package/package.json +56 -0
- package/src/cli.ts +195 -0
- package/src/commands/delete.ts +74 -0
- package/src/commands/list.ts +37 -0
- package/src/commands/logs.ts +61 -0
- package/src/commands/ps.ts +79 -0
- package/src/commands/pull.ts +40 -0
- package/src/commands/rm.ts +114 -0
- package/src/commands/run.ts +209 -0
- package/src/commands/search.ts +107 -0
- package/src/commands/show.ts +207 -0
- package/src/commands/start.ts +140 -0
- package/src/commands/stop.ts +39 -0
- package/src/lib/config-generator.ts +119 -0
- package/src/lib/launchctl-manager.ts +209 -0
- package/src/lib/model-downloader.ts +259 -0
- package/src/lib/model-scanner.ts +125 -0
- package/src/lib/model-search.ts +114 -0
- package/src/lib/port-manager.ts +80 -0
- package/src/lib/state-manager.ts +177 -0
- package/src/lib/status-checker.ts +113 -0
- package/src/types/global-config.ts +26 -0
- package/src/types/model-info.ts +8 -0
- package/src/types/server-config.ts +42 -0
- package/src/utils/file-utils.ts +106 -0
- package/src/utils/format-utils.ts +80 -0
- package/src/utils/process-utils.ts +60 -0
- package/tsconfig.json +20 -0
package/dist/cli.js
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const list_1 = require("./commands/list");
|
|
10
|
+
const ps_1 = require("./commands/ps");
|
|
11
|
+
const start_1 = require("./commands/start");
|
|
12
|
+
const run_1 = require("./commands/run");
|
|
13
|
+
const stop_1 = require("./commands/stop");
|
|
14
|
+
const delete_1 = require("./commands/delete");
|
|
15
|
+
const pull_1 = require("./commands/pull");
|
|
16
|
+
const rm_1 = require("./commands/rm");
|
|
17
|
+
const logs_1 = require("./commands/logs");
|
|
18
|
+
const search_1 = require("./commands/search");
|
|
19
|
+
const show_1 = require("./commands/show");
|
|
20
|
+
const program = new commander_1.Command();
|
|
21
|
+
program
|
|
22
|
+
.name('llamacpp')
|
|
23
|
+
.description('CLI tool to manage local llama.cpp servers on macOS')
|
|
24
|
+
.version('1.0.0');
|
|
25
|
+
// List models
|
|
26
|
+
program
|
|
27
|
+
.command('ls')
|
|
28
|
+
.description('List available GGUF models in ~/models')
|
|
29
|
+
.action(async () => {
|
|
30
|
+
try {
|
|
31
|
+
await (0, list_1.listCommand)();
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
console.error(chalk_1.default.red('❌ Error:'), error.message);
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
// List running servers
|
|
39
|
+
program
|
|
40
|
+
.command('ps')
|
|
41
|
+
.description('List all servers with status')
|
|
42
|
+
.action(async () => {
|
|
43
|
+
try {
|
|
44
|
+
await (0, ps_1.psCommand)();
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
console.error(chalk_1.default.red('❌ Error:'), error.message);
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
// Search for models
|
|
52
|
+
program
|
|
53
|
+
.command('search')
|
|
54
|
+
.description('Search Hugging Face for GGUF models')
|
|
55
|
+
.argument('<query>', 'Search query (e.g., "llama 3b" or "qwen")')
|
|
56
|
+
.option('-l, --limit <number>', 'Max results to show (default: 20)', parseInt)
|
|
57
|
+
.option('--files [number]', 'Show available files for result number (e.g., --files 1)', (val) => {
|
|
58
|
+
return val ? parseInt(val) : true;
|
|
59
|
+
})
|
|
60
|
+
.action(async (query, options) => {
|
|
61
|
+
try {
|
|
62
|
+
await (0, search_1.searchCommand)(query, options);
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
console.error(chalk_1.default.red('❌ Error:'), error.message);
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
// Show model details
|
|
70
|
+
program
|
|
71
|
+
.command('show')
|
|
72
|
+
.description('Show details about a model or file')
|
|
73
|
+
.argument('<identifier>', 'HuggingFace repo/file (e.g., owner/repo or owner/repo/file.gguf)')
|
|
74
|
+
.option('-f, --file <filename>', 'Specific GGUF file to show details for')
|
|
75
|
+
.action(async (identifier, options) => {
|
|
76
|
+
try {
|
|
77
|
+
await (0, show_1.showCommand)(identifier, options);
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
console.error(chalk_1.default.red('❌ Error:'), error.message);
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
// Download a model
|
|
85
|
+
program
|
|
86
|
+
.command('pull')
|
|
87
|
+
.description('Download a GGUF model from Hugging Face')
|
|
88
|
+
.argument('<identifier>', 'HuggingFace repo/file (e.g., owner/repo/file.gguf or owner/repo)')
|
|
89
|
+
.option('-f, --file <filename>', 'Specific GGUF file (alternative to path in identifier)')
|
|
90
|
+
.action(async (identifier, options) => {
|
|
91
|
+
try {
|
|
92
|
+
await (0, pull_1.pullCommand)(identifier, options);
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
console.error(chalk_1.default.red('❌ Error:'), error.message);
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
// Delete a model
|
|
100
|
+
program
|
|
101
|
+
.command('rm')
|
|
102
|
+
.description('Delete a model file (and any associated servers)')
|
|
103
|
+
.argument('<model>', 'Model filename or partial name')
|
|
104
|
+
.action(async (model) => {
|
|
105
|
+
try {
|
|
106
|
+
await (0, rm_1.rmCommand)(model);
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
console.error(chalk_1.default.red('❌ Error:'), error.message);
|
|
110
|
+
process.exit(1);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
// Server management commands
|
|
114
|
+
const server = program
|
|
115
|
+
.command('server')
|
|
116
|
+
.description('Manage llama-server instances');
|
|
117
|
+
// Start a server
|
|
118
|
+
server
|
|
119
|
+
.command('start')
|
|
120
|
+
.description('Start a llama-server instance')
|
|
121
|
+
.argument('<model>', 'Model filename or path')
|
|
122
|
+
.option('-p, --port <number>', 'Port number (default: auto-assign)', parseInt)
|
|
123
|
+
.option('-t, --threads <number>', 'Thread count (default: auto)', parseInt)
|
|
124
|
+
.option('-c, --ctx-size <number>', 'Context size (default: auto)', parseInt)
|
|
125
|
+
.option('-g, --gpu-layers <number>', 'GPU layers (default: 60)', parseInt)
|
|
126
|
+
.action(async (model, options) => {
|
|
127
|
+
try {
|
|
128
|
+
await (0, start_1.startCommand)(model, options);
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
console.error(chalk_1.default.red('❌ Error:'), error.message);
|
|
132
|
+
process.exit(1);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
// Run interactive chat with a model
|
|
136
|
+
server
|
|
137
|
+
.command('run')
|
|
138
|
+
.description('Run an interactive chat session with a model')
|
|
139
|
+
.argument('<model>', 'Model identifier: port (9000), server ID (llama-3-2-3b), partial name, or model filename')
|
|
140
|
+
.action(async (model) => {
|
|
141
|
+
try {
|
|
142
|
+
await (0, run_1.runCommand)(model);
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
console.error(chalk_1.default.red('❌ Error:'), error.message);
|
|
146
|
+
process.exit(1);
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
// Stop a server
|
|
150
|
+
server
|
|
151
|
+
.command('stop')
|
|
152
|
+
.description('Stop a running server')
|
|
153
|
+
.argument('<identifier>', 'Server identifier: port (9000), server ID (llama-3-2-3b), or partial model name')
|
|
154
|
+
.action(async (identifier) => {
|
|
155
|
+
try {
|
|
156
|
+
await (0, stop_1.stopCommand)(identifier);
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
console.error(chalk_1.default.red('❌ Error:'), error.message);
|
|
160
|
+
process.exit(1);
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
// Delete a server
|
|
164
|
+
server
|
|
165
|
+
.command('rm')
|
|
166
|
+
.description('Remove a server configuration and launchctl service (preserves model file)')
|
|
167
|
+
.argument('<identifier>', 'Server identifier: port (9000), server ID (llama-3-2-3b), or partial model name')
|
|
168
|
+
.action(async (identifier) => {
|
|
169
|
+
try {
|
|
170
|
+
await (0, delete_1.deleteCommand)(identifier);
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
console.error(chalk_1.default.red('❌ Error:'), error.message);
|
|
174
|
+
process.exit(1);
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
// View logs
|
|
178
|
+
server
|
|
179
|
+
.command('logs')
|
|
180
|
+
.description('View server logs')
|
|
181
|
+
.argument('<identifier>', 'Server identifier: port (9000), server ID (llama-3-2-3b), or partial model name')
|
|
182
|
+
.option('-f, --follow', 'Follow log output in real-time')
|
|
183
|
+
.option('-n, --lines <number>', 'Number of lines to show (default: 50)', parseInt)
|
|
184
|
+
.option('--errors', 'Show stderr instead of stdout')
|
|
185
|
+
.action(async (identifier, options) => {
|
|
186
|
+
try {
|
|
187
|
+
await (0, logs_1.logsCommand)(identifier, options);
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
console.error(chalk_1.default.red('❌ Error:'), error.message);
|
|
191
|
+
process.exit(1);
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
// Parse arguments
|
|
195
|
+
program.parse();
|
|
196
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"AAKA,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDrE"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.deleteCommand = deleteCommand;
|
|
40
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
41
|
+
const readline = __importStar(require("readline"));
|
|
42
|
+
const state_manager_1 = require("../lib/state-manager");
|
|
43
|
+
const launchctl_manager_1 = require("../lib/launchctl-manager");
|
|
44
|
+
async function deleteCommand(identifier) {
|
|
45
|
+
// Find server
|
|
46
|
+
const server = await state_manager_1.stateManager.findServer(identifier);
|
|
47
|
+
if (!server) {
|
|
48
|
+
throw new Error(`Server not found: ${identifier}\n\nUse: llamacpp ps`);
|
|
49
|
+
}
|
|
50
|
+
// Confirm deletion
|
|
51
|
+
console.log(chalk_1.default.yellow(`⚠️ Delete server configuration for ${server.modelName}?`));
|
|
52
|
+
console.log(chalk_1.default.dim(' This will remove the launchd service but keep the model file.'));
|
|
53
|
+
console.log();
|
|
54
|
+
const confirmed = await confirmDeletion();
|
|
55
|
+
if (!confirmed) {
|
|
56
|
+
console.log(chalk_1.default.dim('Cancelled'));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
console.log();
|
|
60
|
+
console.log(chalk_1.default.blue(`🗑️ Deleting server ${server.modelName}...`));
|
|
61
|
+
// Stop server if running
|
|
62
|
+
if (server.status === 'running') {
|
|
63
|
+
console.log(chalk_1.default.dim('Stopping server...'));
|
|
64
|
+
try {
|
|
65
|
+
await launchctl_manager_1.launchctlManager.stopService(server.label);
|
|
66
|
+
await launchctl_manager_1.launchctlManager.waitForServiceStop(server.label, 5000);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
console.log(chalk_1.default.yellow('⚠️ Failed to stop server gracefully'));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Unload service
|
|
73
|
+
console.log(chalk_1.default.dim('Unloading launchctl service...'));
|
|
74
|
+
await launchctl_manager_1.launchctlManager.unloadService(server.plistPath);
|
|
75
|
+
// Delete plist
|
|
76
|
+
console.log(chalk_1.default.dim('Deleting plist file...'));
|
|
77
|
+
await launchctl_manager_1.launchctlManager.deletePlist(server.plistPath);
|
|
78
|
+
// Delete server config
|
|
79
|
+
console.log(chalk_1.default.dim('Deleting server configuration...'));
|
|
80
|
+
await state_manager_1.stateManager.deleteServerConfig(server.id);
|
|
81
|
+
// Success
|
|
82
|
+
console.log();
|
|
83
|
+
console.log(chalk_1.default.green('✅ Server deleted'));
|
|
84
|
+
console.log(chalk_1.default.dim(` Plist removed: ${server.plistPath}`));
|
|
85
|
+
console.log(chalk_1.default.dim(` Config removed`));
|
|
86
|
+
console.log();
|
|
87
|
+
console.log(chalk_1.default.dim(` Model file preserved at: ${server.modelPath}`));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Prompt user for confirmation
|
|
91
|
+
*/
|
|
92
|
+
function confirmDeletion() {
|
|
93
|
+
return new Promise((resolve) => {
|
|
94
|
+
const rl = readline.createInterface({
|
|
95
|
+
input: process.stdin,
|
|
96
|
+
output: process.stdout,
|
|
97
|
+
});
|
|
98
|
+
rl.question(chalk_1.default.yellow(" Type 'yes' to confirm: "), (answer) => {
|
|
99
|
+
rl.close();
|
|
100
|
+
resolve(answer.toLowerCase() === 'yes');
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAMA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA8BjD"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.listCommand = listCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const cli_table3_1 = __importDefault(require("cli-table3"));
|
|
9
|
+
const model_scanner_1 = require("../lib/model-scanner");
|
|
10
|
+
const format_utils_1 = require("../utils/format-utils");
|
|
11
|
+
const file_utils_1 = require("../utils/file-utils");
|
|
12
|
+
async function listCommand() {
|
|
13
|
+
const modelsDir = (0, file_utils_1.getModelsDir)();
|
|
14
|
+
console.log(chalk_1.default.blue(`📦 Available models in ${modelsDir}\n`));
|
|
15
|
+
const models = await model_scanner_1.modelScanner.scanModels();
|
|
16
|
+
if (models.length === 0) {
|
|
17
|
+
console.log(chalk_1.default.yellow('No GGUF models found.'));
|
|
18
|
+
console.log(chalk_1.default.dim(`\nDownload models with: llamacpp pull <repo> --file <filename>`));
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const table = new cli_table3_1.default({
|
|
22
|
+
head: ['MODEL', 'SIZE', 'MODIFIED'],
|
|
23
|
+
colWidths: [50, 12, 15],
|
|
24
|
+
});
|
|
25
|
+
for (const model of models) {
|
|
26
|
+
table.push([
|
|
27
|
+
model.filename,
|
|
28
|
+
model.sizeFormatted,
|
|
29
|
+
(0, format_utils_1.formatDateShort)(model.modified),
|
|
30
|
+
]);
|
|
31
|
+
}
|
|
32
|
+
console.log(table.toString());
|
|
33
|
+
const totalSize = models.reduce((sum, m) => sum + m.size, 0);
|
|
34
|
+
console.log(chalk_1.default.dim(`\nTotal: ${models.length} models (${(0, format_utils_1.formatBytes)(totalSize)})`));
|
|
35
|
+
console.log(chalk_1.default.dim(`\nStart a server: llamacpp start <model-filename>`));
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":";;;;;AAMA,kCA8BC;AApCD,kDAA0B;AAC1B,4DAA+B;AAC/B,wDAAoD;AACpD,wDAAqE;AACrE,oDAAmD;AAE5C,KAAK,UAAU,WAAW;IAC/B,MAAM,SAAS,GAAG,IAAA,yBAAY,GAAE,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0BAA0B,SAAS,IAAI,CAAC,CAAC,CAAC;IAEjE,MAAM,MAAM,GAAG,MAAM,4BAAY,CAAC,UAAU,EAAE,CAAC;IAE/C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC,CAAC;QACzF,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,oBAAK,CAAC;QACtB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC;QACnC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;KACxB,CAAC,CAAC;IAEH,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,CAAC,QAAQ;YACd,KAAK,CAAC,aAAa;YACnB,IAAA,8BAAe,EAAC,KAAK,CAAC,QAAQ,CAAC;SAChC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE9B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,MAAM,YAAY,IAAA,0BAAW,EAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAMA,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDzF"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.logsCommand = logsCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const child_process_1 = require("child_process");
|
|
9
|
+
const state_manager_1 = require("../lib/state-manager");
|
|
10
|
+
const file_utils_1 = require("../utils/file-utils");
|
|
11
|
+
const process_utils_1 = require("../utils/process-utils");
|
|
12
|
+
async function logsCommand(identifier, options) {
|
|
13
|
+
// Find server
|
|
14
|
+
const server = await state_manager_1.stateManager.findServer(identifier);
|
|
15
|
+
if (!server) {
|
|
16
|
+
throw new Error(`Server not found: ${identifier}\n\nUse: llamacpp ps`);
|
|
17
|
+
}
|
|
18
|
+
// Determine log file
|
|
19
|
+
const logPath = options.errors ? server.stderrPath : server.stdoutPath;
|
|
20
|
+
const logType = options.errors ? 'errors' : 'logs';
|
|
21
|
+
// Check if log file exists
|
|
22
|
+
if (!(await (0, file_utils_1.fileExists)(logPath))) {
|
|
23
|
+
console.log(chalk_1.default.yellow(`⚠️ No ${logType} found for ${server.modelName}`));
|
|
24
|
+
console.log(chalk_1.default.dim(` Log file does not exist: ${logPath}`));
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
console.log(chalk_1.default.blue(`📋 ${options.errors ? 'Errors' : 'Logs'} for ${server.modelName}`));
|
|
28
|
+
console.log(chalk_1.default.dim(` ${logPath}\n`));
|
|
29
|
+
if (options.follow) {
|
|
30
|
+
// Follow logs in real-time
|
|
31
|
+
const tail = (0, child_process_1.spawn)('tail', ['-f', logPath], {
|
|
32
|
+
stdio: 'inherit',
|
|
33
|
+
});
|
|
34
|
+
// Handle Ctrl+C gracefully
|
|
35
|
+
process.on('SIGINT', () => {
|
|
36
|
+
tail.kill();
|
|
37
|
+
console.log();
|
|
38
|
+
process.exit(0);
|
|
39
|
+
});
|
|
40
|
+
// Wait for tail to exit
|
|
41
|
+
tail.on('exit', () => {
|
|
42
|
+
process.exit(0);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
// Show last N lines
|
|
47
|
+
const lines = options.lines || 50;
|
|
48
|
+
try {
|
|
49
|
+
const output = await (0, process_utils_1.execCommand)(`tail -n ${lines} "${logPath}"`);
|
|
50
|
+
console.log(output);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
throw new Error(`Failed to read logs: ${error.message}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":";;;;;AAYA,kCAgDC;AA5DD,kDAA0B;AAC1B,iDAAsC;AACtC,wDAAoD;AACpD,oDAAiD;AACjD,0DAAqD;AAQ9C,KAAK,UAAU,WAAW,CAAC,UAAkB,EAAE,OAAoB;IACxE,cAAc;IACd,MAAM,MAAM,GAAG,MAAM,4BAAY,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACzD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,qBAAqB,UAAU,sBAAsB,CAAC,CAAC;IACzE,CAAC;IAED,qBAAqB;IACrB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;IACvE,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAEnD,2BAA2B;IAC3B,IAAI,CAAC,CAAC,MAAM,IAAA,uBAAU,EAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,UAAU,OAAO,cAAc,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,+BAA+B,OAAO,EAAE,CAAC,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,QAAQ,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC5F,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,MAAM,OAAO,IAAI,CAAC,CAAC,CAAC;IAE1C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,2BAA2B;QAC3B,MAAM,IAAI,GAAG,IAAA,qBAAK,EAAC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;YAC1C,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,2BAA2B;QAC3B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACxB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,wBAAwB;QACxB,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,oBAAoB;QACpB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAA,2BAAW,EAAC,WAAW,KAAK,KAAK,OAAO,GAAG,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,wBAAyB,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ps.d.ts","sourceRoot":"","sources":["../../src/commands/ps.ts"],"names":[],"mappings":"AAMA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAwE/C"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.psCommand = psCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const cli_table3_1 = __importDefault(require("cli-table3"));
|
|
9
|
+
const state_manager_1 = require("../lib/state-manager");
|
|
10
|
+
const status_checker_1 = require("../lib/status-checker");
|
|
11
|
+
const format_utils_1 = require("../utils/format-utils");
|
|
12
|
+
async function psCommand() {
|
|
13
|
+
const servers = await state_manager_1.stateManager.getAllServers();
|
|
14
|
+
if (servers.length === 0) {
|
|
15
|
+
console.log(chalk_1.default.yellow('No servers configured.'));
|
|
16
|
+
console.log(chalk_1.default.dim('\nStart a server: llamacpp server start <model-filename>'));
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
// Update all server statuses
|
|
20
|
+
console.log(chalk_1.default.dim('Checking server statuses...\n'));
|
|
21
|
+
const updated = await status_checker_1.statusChecker.updateAllServerStatuses();
|
|
22
|
+
const table = new cli_table3_1.default({
|
|
23
|
+
head: ['SERVER ID', 'MODEL', 'PORT', 'STATUS', 'PID', 'UPTIME'],
|
|
24
|
+
});
|
|
25
|
+
let runningCount = 0;
|
|
26
|
+
let stoppedCount = 0;
|
|
27
|
+
let crashedCount = 0;
|
|
28
|
+
for (const server of updated) {
|
|
29
|
+
let statusText;
|
|
30
|
+
let statusColor;
|
|
31
|
+
switch (server.status) {
|
|
32
|
+
case 'running':
|
|
33
|
+
statusText = '✅ RUNNING';
|
|
34
|
+
statusColor = chalk_1.default.green;
|
|
35
|
+
runningCount++;
|
|
36
|
+
break;
|
|
37
|
+
case 'crashed':
|
|
38
|
+
statusText = '❌ CRASHED';
|
|
39
|
+
statusColor = chalk_1.default.red;
|
|
40
|
+
crashedCount++;
|
|
41
|
+
break;
|
|
42
|
+
default:
|
|
43
|
+
statusText = '⚠️ STOPPED';
|
|
44
|
+
statusColor = chalk_1.default.yellow;
|
|
45
|
+
stoppedCount++;
|
|
46
|
+
}
|
|
47
|
+
const uptime = server.status === 'running' && server.lastStarted
|
|
48
|
+
? (0, format_utils_1.formatUptime)(server.lastStarted)
|
|
49
|
+
: '-';
|
|
50
|
+
table.push([
|
|
51
|
+
server.id,
|
|
52
|
+
server.modelName,
|
|
53
|
+
server.port.toString(),
|
|
54
|
+
statusColor(statusText),
|
|
55
|
+
server.pid?.toString() || '-',
|
|
56
|
+
uptime,
|
|
57
|
+
]);
|
|
58
|
+
}
|
|
59
|
+
console.log(table.toString());
|
|
60
|
+
const summary = [
|
|
61
|
+
chalk_1.default.green(`${runningCount} running`),
|
|
62
|
+
chalk_1.default.yellow(`${stoppedCount} stopped`),
|
|
63
|
+
];
|
|
64
|
+
if (crashedCount > 0) {
|
|
65
|
+
summary.push(chalk_1.default.red(`${crashedCount} crashed`));
|
|
66
|
+
}
|
|
67
|
+
console.log(chalk_1.default.dim(`\nTotal: ${servers.length} servers (${summary.join(', ')})`));
|
|
68
|
+
if (crashedCount > 0) {
|
|
69
|
+
console.log(chalk_1.default.red('\n⚠️ Some servers have crashed. Check logs with: llamacpp server logs <id> --errors'));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=ps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ps.js","sourceRoot":"","sources":["../../src/commands/ps.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAGA,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCzF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.pullCommand = pullCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const model_downloader_1 = require("../lib/model-downloader");
|
|
9
|
+
async function pullCommand(identifier, options) {
|
|
10
|
+
// Parse repository identifier
|
|
11
|
+
const parsed = model_downloader_1.modelDownloader.parseHFIdentifier(identifier);
|
|
12
|
+
// Determine filename - from --file flag or from identifier path
|
|
13
|
+
let filename = options.file || parsed.file;
|
|
14
|
+
if (!filename) {
|
|
15
|
+
throw new Error('Please specify a file to download:\n\n' +
|
|
16
|
+
'Option 1: llamacpp pull owner/repo/filename.gguf\n' +
|
|
17
|
+
'Option 2: llamacpp pull owner/repo --file filename.gguf');
|
|
18
|
+
}
|
|
19
|
+
// Ensure filename ends with .gguf
|
|
20
|
+
if (!filename.toLowerCase().endsWith('.gguf')) {
|
|
21
|
+
filename += '.gguf';
|
|
22
|
+
}
|
|
23
|
+
// Download the model
|
|
24
|
+
try {
|
|
25
|
+
const modelPath = await model_downloader_1.modelDownloader.downloadModel(parsed.repo, filename);
|
|
26
|
+
console.log();
|
|
27
|
+
console.log(chalk_1.default.dim(`Start server: llamacpp start ${filename}`));
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
if (error.message.includes('interrupted')) {
|
|
31
|
+
console.log(chalk_1.default.dim('\nDownload was interrupted. Run the same command again to retry.'));
|
|
32
|
+
}
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=pull.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":";;;;;AAOA,kCAgCC;AAvCD,kDAA0B;AAC1B,8DAA0D;AAMnD,KAAK,UAAU,WAAW,CAAC,UAAkB,EAAE,OAAoB;IACxE,8BAA8B;IAC9B,MAAM,MAAM,GAAG,kCAAe,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAE7D,gEAAgE;IAChE,IAAI,QAAQ,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;IAE3C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,wCAAwC;YACxC,oDAAoD;YACpD,yDAAyD,CAC1D,CAAC;IACJ,CAAC;IAED,kCAAkC;IAClC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9C,QAAQ,IAAI,OAAO,CAAC;IACtB,CAAC;IAED,qBAAqB;IACrB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,kCAAe,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAE7E,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC,CAAC;QAC7F,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rm.d.ts","sourceRoot":"","sources":["../../src/commands/rm.ts"],"names":[],"mappings":"AAOA,wBAAsB,SAAS,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyFtE"}
|