@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.
Files changed (136) hide show
  1. package/.versionrc.json +16 -0
  2. package/CHANGELOG.md +10 -0
  3. package/README.md +474 -0
  4. package/bin/llamacpp +26 -0
  5. package/dist/cli.d.ts +3 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +196 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/commands/delete.d.ts +2 -0
  10. package/dist/commands/delete.d.ts.map +1 -0
  11. package/dist/commands/delete.js +104 -0
  12. package/dist/commands/delete.js.map +1 -0
  13. package/dist/commands/list.d.ts +2 -0
  14. package/dist/commands/list.d.ts.map +1 -0
  15. package/dist/commands/list.js +37 -0
  16. package/dist/commands/list.js.map +1 -0
  17. package/dist/commands/logs.d.ts +8 -0
  18. package/dist/commands/logs.d.ts.map +1 -0
  19. package/dist/commands/logs.js +57 -0
  20. package/dist/commands/logs.js.map +1 -0
  21. package/dist/commands/ps.d.ts +2 -0
  22. package/dist/commands/ps.d.ts.map +1 -0
  23. package/dist/commands/ps.js +72 -0
  24. package/dist/commands/ps.js.map +1 -0
  25. package/dist/commands/pull.d.ts +6 -0
  26. package/dist/commands/pull.d.ts.map +1 -0
  27. package/dist/commands/pull.js +36 -0
  28. package/dist/commands/pull.js.map +1 -0
  29. package/dist/commands/rm.d.ts +2 -0
  30. package/dist/commands/rm.d.ts.map +1 -0
  31. package/dist/commands/rm.js +134 -0
  32. package/dist/commands/rm.js.map +1 -0
  33. package/dist/commands/run.d.ts +2 -0
  34. package/dist/commands/run.d.ts.map +1 -0
  35. package/dist/commands/run.js +198 -0
  36. package/dist/commands/run.js.map +1 -0
  37. package/dist/commands/search.d.ts +7 -0
  38. package/dist/commands/search.d.ts.map +1 -0
  39. package/dist/commands/search.js +93 -0
  40. package/dist/commands/search.js.map +1 -0
  41. package/dist/commands/show.d.ts +6 -0
  42. package/dist/commands/show.d.ts.map +1 -0
  43. package/dist/commands/show.js +196 -0
  44. package/dist/commands/show.js.map +1 -0
  45. package/dist/commands/start.d.ts +9 -0
  46. package/dist/commands/start.d.ts.map +1 -0
  47. package/dist/commands/start.js +150 -0
  48. package/dist/commands/start.js.map +1 -0
  49. package/dist/commands/stop.d.ts +2 -0
  50. package/dist/commands/stop.d.ts.map +1 -0
  51. package/dist/commands/stop.js +39 -0
  52. package/dist/commands/stop.js.map +1 -0
  53. package/dist/lib/config-generator.d.ts +30 -0
  54. package/dist/lib/config-generator.d.ts.map +1 -0
  55. package/dist/lib/config-generator.js +125 -0
  56. package/dist/lib/config-generator.js.map +1 -0
  57. package/dist/lib/launchctl-manager.d.ts +55 -0
  58. package/dist/lib/launchctl-manager.d.ts.map +1 -0
  59. package/dist/lib/launchctl-manager.js +227 -0
  60. package/dist/lib/launchctl-manager.js.map +1 -0
  61. package/dist/lib/model-downloader.d.ts +44 -0
  62. package/dist/lib/model-downloader.d.ts.map +1 -0
  63. package/dist/lib/model-downloader.js +248 -0
  64. package/dist/lib/model-downloader.js.map +1 -0
  65. package/dist/lib/model-scanner.d.ts +31 -0
  66. package/dist/lib/model-scanner.d.ts.map +1 -0
  67. package/dist/lib/model-scanner.js +145 -0
  68. package/dist/lib/model-scanner.js.map +1 -0
  69. package/dist/lib/model-search.d.ts +29 -0
  70. package/dist/lib/model-search.d.ts.map +1 -0
  71. package/dist/lib/model-search.js +131 -0
  72. package/dist/lib/model-search.js.map +1 -0
  73. package/dist/lib/port-manager.d.ts +26 -0
  74. package/dist/lib/port-manager.d.ts.map +1 -0
  75. package/dist/lib/port-manager.js +75 -0
  76. package/dist/lib/port-manager.js.map +1 -0
  77. package/dist/lib/state-manager.d.ts +59 -0
  78. package/dist/lib/state-manager.d.ts.map +1 -0
  79. package/dist/lib/state-manager.js +178 -0
  80. package/dist/lib/state-manager.js.map +1 -0
  81. package/dist/lib/status-checker.d.ts +28 -0
  82. package/dist/lib/status-checker.d.ts.map +1 -0
  83. package/dist/lib/status-checker.js +99 -0
  84. package/dist/lib/status-checker.js.map +1 -0
  85. package/dist/types/global-config.d.ts +16 -0
  86. package/dist/types/global-config.d.ts.map +1 -0
  87. package/dist/types/global-config.js +18 -0
  88. package/dist/types/global-config.js.map +1 -0
  89. package/dist/types/model-info.d.ts +9 -0
  90. package/dist/types/model-info.d.ts.map +1 -0
  91. package/dist/types/model-info.js +3 -0
  92. package/dist/types/model-info.js.map +1 -0
  93. package/dist/types/server-config.d.ts +27 -0
  94. package/dist/types/server-config.d.ts.map +1 -0
  95. package/dist/types/server-config.js +15 -0
  96. package/dist/types/server-config.js.map +1 -0
  97. package/dist/utils/file-utils.d.ts +49 -0
  98. package/dist/utils/file-utils.d.ts.map +1 -0
  99. package/dist/utils/file-utils.js +144 -0
  100. package/dist/utils/file-utils.js.map +1 -0
  101. package/dist/utils/format-utils.d.ts +29 -0
  102. package/dist/utils/format-utils.d.ts.map +1 -0
  103. package/dist/utils/format-utils.js +82 -0
  104. package/dist/utils/format-utils.js.map +1 -0
  105. package/dist/utils/process-utils.d.ts +27 -0
  106. package/dist/utils/process-utils.d.ts.map +1 -0
  107. package/dist/utils/process-utils.js +66 -0
  108. package/dist/utils/process-utils.js.map +1 -0
  109. package/package.json +56 -0
  110. package/src/cli.ts +195 -0
  111. package/src/commands/delete.ts +74 -0
  112. package/src/commands/list.ts +37 -0
  113. package/src/commands/logs.ts +61 -0
  114. package/src/commands/ps.ts +79 -0
  115. package/src/commands/pull.ts +40 -0
  116. package/src/commands/rm.ts +114 -0
  117. package/src/commands/run.ts +209 -0
  118. package/src/commands/search.ts +107 -0
  119. package/src/commands/show.ts +207 -0
  120. package/src/commands/start.ts +140 -0
  121. package/src/commands/stop.ts +39 -0
  122. package/src/lib/config-generator.ts +119 -0
  123. package/src/lib/launchctl-manager.ts +209 -0
  124. package/src/lib/model-downloader.ts +259 -0
  125. package/src/lib/model-scanner.ts +125 -0
  126. package/src/lib/model-search.ts +114 -0
  127. package/src/lib/port-manager.ts +80 -0
  128. package/src/lib/state-manager.ts +177 -0
  129. package/src/lib/status-checker.ts +113 -0
  130. package/src/types/global-config.ts +26 -0
  131. package/src/types/model-info.ts +8 -0
  132. package/src/types/server-config.ts +42 -0
  133. package/src/utils/file-utils.ts +106 -0
  134. package/src/utils/format-utils.ts +80 -0
  135. package/src/utils/process-utils.ts +60 -0
  136. 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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function deleteCommand(identifier: string): Promise<void>;
2
+ //# sourceMappingURL=delete.d.ts.map
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,sCAmDC;AAxDD,kDAA0B;AAC1B,mDAAqC;AACrC,wDAAoD;AACpD,gEAA4D;AAErD,KAAK,UAAU,aAAa,CAAC,UAAkB;IACpD,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,mBAAmB;IACnB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,uCAAuC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC,CAAC;IAC3F,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,SAAS,GAAG,MAAM,eAAe,EAAE,CAAC;IAC1C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;QACpC,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wBAAwB,MAAM,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC;IAEvE,yBAAyB;IACzB,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,oCAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,oCAAgB,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC;IACzD,MAAM,oCAAgB,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEvD,eAAe;IACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACjD,MAAM,oCAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAErD,uBAAuB;IACvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAC3D,MAAM,4BAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAEjD,UAAU;IACV,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,+BAA+B,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,SAAS,eAAe;IACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;YAClC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,EAAE,CAAC,QAAQ,CAAC,eAAK,CAAC,MAAM,CAAC,4BAA4B,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE;YACjE,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function listCommand(): Promise<void>;
2
+ //# sourceMappingURL=list.d.ts.map
@@ -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,8 @@
1
+ interface LogsOptions {
2
+ follow?: boolean;
3
+ lines?: number;
4
+ errors?: boolean;
5
+ }
6
+ export declare function logsCommand(identifier: string, options: LogsOptions): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=logs.d.ts.map
@@ -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,2 @@
1
+ export declare function psCommand(): Promise<void>;
2
+ //# sourceMappingURL=ps.d.ts.map
@@ -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,6 @@
1
+ interface PullOptions {
2
+ file?: string;
3
+ }
4
+ export declare function pullCommand(identifier: string, options: PullOptions): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=pull.d.ts.map
@@ -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,2 @@
1
+ export declare function rmCommand(modelIdentifier: string): Promise<void>;
2
+ //# sourceMappingURL=rm.d.ts.map
@@ -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"}