gemkit-cli 0.2.3 → 0.3.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 +141 -7
- package/dist/commands/agent/index.d.ts +9 -0
- package/dist/commands/agent/index.js +1329 -0
- package/dist/commands/cache/index.d.ts +5 -0
- package/dist/commands/cache/index.js +43 -0
- package/dist/commands/catalog/index.d.ts +2 -0
- package/dist/commands/catalog/index.js +57 -0
- package/dist/commands/config/index.d.ts +7 -0
- package/dist/commands/config/index.js +122 -0
- package/dist/commands/convert/index.d.ts +8 -0
- package/dist/commands/convert/index.js +391 -0
- package/dist/commands/doctor/index.d.ts +2 -0
- package/dist/commands/doctor/index.js +243 -0
- package/dist/commands/extension/index.d.ts +5 -0
- package/dist/commands/extension/index.js +52 -0
- package/dist/commands/index.d.ts +5 -0
- package/dist/commands/index.js +37 -0
- package/dist/commands/init/index.d.ts +6 -0
- package/dist/commands/init/index.js +345 -0
- package/dist/commands/new/index.d.ts +5 -0
- package/dist/commands/new/index.js +49 -0
- package/dist/commands/office/index.d.ts +5 -0
- package/dist/commands/office/index.js +283 -0
- package/dist/commands/paste/index.d.ts +10 -0
- package/dist/commands/paste/index.js +533 -0
- package/dist/commands/plan/index.d.ts +8 -0
- package/dist/commands/plan/index.js +247 -0
- package/dist/commands/session/index.d.ts +8 -0
- package/dist/commands/session/index.js +289 -0
- package/dist/commands/tokens/index.d.ts +6 -0
- package/dist/commands/tokens/index.js +148 -0
- package/dist/commands/update/index.d.ts +26 -0
- package/dist/commands/update/index.js +199 -0
- package/dist/commands/versions/index.d.ts +5 -0
- package/dist/commands/versions/index.js +39 -0
- package/dist/domains/agent/index.d.ts +8 -0
- package/dist/domains/agent/index.js +8 -0
- package/dist/domains/agent/mappings.d.ts +32 -0
- package/dist/domains/agent/mappings.js +164 -0
- package/dist/domains/agent/profile.d.ts +26 -0
- package/dist/domains/agent/profile.js +225 -0
- package/dist/domains/agent/pty-context.d.ts +11 -0
- package/dist/domains/agent/pty-context.js +83 -0
- package/dist/domains/agent/pty-providers.d.ts +18 -0
- package/dist/domains/agent/pty-providers.js +66 -0
- package/dist/domains/agent/pty-session.d.ts +33 -0
- package/dist/domains/agent/pty-session.js +82 -0
- package/dist/domains/agent/pty-types.d.ts +127 -0
- package/dist/domains/agent/pty-types.js +4 -0
- package/dist/domains/agent/search.d.ts +45 -0
- package/dist/domains/agent/search.js +614 -0
- package/dist/domains/agent/types.d.ts +78 -0
- package/dist/domains/agent/types.js +5 -0
- package/dist/domains/agent-office/documents-scanner.d.ts +9 -0
- package/dist/domains/agent-office/documents-scanner.js +143 -0
- package/dist/domains/agent-office/event-emitter.d.ts +43 -0
- package/dist/domains/agent-office/event-emitter.js +86 -0
- package/dist/domains/agent-office/file-watcher.d.ts +40 -0
- package/dist/domains/agent-office/file-watcher.js +173 -0
- package/dist/domains/agent-office/icons.d.ts +11 -0
- package/dist/domains/agent-office/icons.js +36 -0
- package/dist/domains/agent-office/index.d.ts +12 -0
- package/dist/domains/agent-office/index.js +20 -0
- package/dist/domains/agent-office/renderer/web/assets.d.ts +11 -0
- package/dist/domains/agent-office/renderer/web/assets.js +3419 -0
- package/dist/domains/agent-office/renderer/web/server.d.ts +42 -0
- package/dist/domains/agent-office/renderer/web/server.js +228 -0
- package/dist/domains/agent-office/renderer/web.d.ts +30 -0
- package/dist/domains/agent-office/renderer/web.js +111 -0
- package/dist/domains/agent-office/session-bridge.d.ts +23 -0
- package/dist/domains/agent-office/session-bridge.js +171 -0
- package/dist/domains/agent-office/state-machine.d.ts +5 -0
- package/dist/domains/agent-office/state-machine.js +82 -0
- package/dist/domains/agent-office/types.d.ts +91 -0
- package/dist/domains/agent-office/types.js +4 -0
- package/dist/domains/cache/index.d.ts +1 -0
- package/dist/domains/cache/index.js +1 -0
- package/dist/domains/cache/manager.d.ts +22 -0
- package/dist/domains/cache/manager.js +84 -0
- package/dist/domains/config/index.d.ts +5 -0
- package/dist/domains/config/index.js +5 -0
- package/dist/domains/config/manager.d.ts +24 -0
- package/dist/domains/config/manager.js +85 -0
- package/dist/domains/config/schema.d.ts +17 -0
- package/dist/domains/config/schema.js +96 -0
- package/dist/domains/convert/converter.d.ts +78 -0
- package/dist/domains/convert/converter.js +471 -0
- package/dist/domains/convert/index.d.ts +5 -0
- package/dist/domains/convert/index.js +5 -0
- package/dist/domains/convert/types.d.ts +88 -0
- package/dist/domains/convert/types.js +18 -0
- package/dist/domains/github/download.d.ts +12 -0
- package/dist/domains/github/download.js +51 -0
- package/dist/domains/github/index.d.ts +2 -0
- package/dist/domains/github/index.js +2 -0
- package/dist/domains/github/releases.d.ts +16 -0
- package/dist/domains/github/releases.js +68 -0
- package/dist/domains/installation/conflict.d.ts +13 -0
- package/dist/domains/installation/conflict.js +38 -0
- package/dist/domains/installation/file-sync.d.ts +16 -0
- package/dist/domains/installation/file-sync.js +77 -0
- package/dist/domains/installation/index.d.ts +3 -0
- package/dist/domains/installation/index.js +3 -0
- package/dist/domains/installation/metadata.d.ts +20 -0
- package/dist/domains/installation/metadata.js +52 -0
- package/dist/domains/plan/index.d.ts +2 -0
- package/dist/domains/plan/index.js +2 -0
- package/dist/domains/plan/resolver.d.ts +24 -0
- package/dist/domains/plan/resolver.js +164 -0
- package/dist/domains/plan/types.d.ts +13 -0
- package/dist/domains/plan/types.js +4 -0
- package/dist/domains/session/env.d.ts +51 -0
- package/dist/domains/session/env.js +118 -0
- package/dist/domains/session/index.d.ts +8 -0
- package/dist/domains/session/index.js +8 -0
- package/dist/domains/session/manager.d.ts +56 -0
- package/dist/domains/session/manager.js +205 -0
- package/dist/domains/session/paths.d.ts +6 -0
- package/dist/domains/session/paths.js +6 -0
- package/dist/domains/session/types.d.ts +121 -0
- package/dist/domains/session/types.js +5 -0
- package/dist/domains/session/writer.d.ts +82 -0
- package/dist/domains/session/writer.js +431 -0
- package/dist/domains/tokens/index.d.ts +5 -0
- package/dist/domains/tokens/index.js +5 -0
- package/dist/domains/tokens/pricing.d.ts +38 -0
- package/dist/domains/tokens/pricing.js +129 -0
- package/dist/domains/tokens/scanner.d.ts +42 -0
- package/dist/domains/tokens/scanner.js +168 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +87 -58
- package/dist/services/aipty.d.ts +76 -0
- package/dist/services/aipty.js +276 -0
- package/dist/services/archive.d.ts +22 -0
- package/dist/services/archive.js +53 -0
- package/dist/services/auto-update.d.ts +26 -0
- package/dist/services/auto-update.js +117 -0
- package/dist/services/hash.d.ts +36 -0
- package/dist/services/hash.js +63 -0
- package/dist/services/logger.d.ts +28 -0
- package/dist/services/logger.js +102 -0
- package/dist/services/music.d.ts +67 -0
- package/dist/services/music.js +290 -0
- package/dist/services/npm.d.ts +22 -0
- package/dist/services/npm.js +65 -0
- package/dist/services/pty-client.d.ts +66 -0
- package/dist/services/pty-client.js +154 -0
- package/dist/services/pty-server.d.ts +102 -0
- package/dist/services/pty-server.js +613 -0
- package/dist/types/index.d.ts +155 -0
- package/dist/types/index.js +4 -0
- package/dist/utils/colors.d.ts +43 -0
- package/dist/utils/colors.js +98 -0
- package/dist/utils/errors.d.ts +24 -0
- package/dist/utils/errors.js +56 -0
- package/dist/utils/paths.d.ts +46 -0
- package/dist/utils/paths.js +89 -0
- package/dist/utils/platform.d.ts +11 -0
- package/dist/utils/platform.js +31 -0
- package/package.json +55 -54
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { existsSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { spawn } from 'child_process';
|
|
4
|
+
import ora from 'ora';
|
|
5
|
+
import { getLocalGeminiDir, getAgentsDir, getExtensionsDir } from '../../utils/paths.js';
|
|
6
|
+
import { loadMetadata } from '../../domains/installation/metadata.js';
|
|
7
|
+
import { brand, pc } from '../../utils/colors.js';
|
|
8
|
+
/**
|
|
9
|
+
* Check if spawn-agent extension is installed in Gemini CLI
|
|
10
|
+
* by running: gemini extensions list
|
|
11
|
+
*/
|
|
12
|
+
async function checkSpawnAgentInstalled() {
|
|
13
|
+
return new Promise((resolve) => {
|
|
14
|
+
const child = spawn('gemini', ['extensions', 'list'], {
|
|
15
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
16
|
+
shell: process.platform === 'win32'
|
|
17
|
+
});
|
|
18
|
+
let stdout = '';
|
|
19
|
+
let stderr = '';
|
|
20
|
+
let resolved = false;
|
|
21
|
+
// Timeout after 20 seconds (gemini CLI can be slow)
|
|
22
|
+
const timeout = setTimeout(() => {
|
|
23
|
+
if (!resolved) {
|
|
24
|
+
resolved = true;
|
|
25
|
+
child.kill();
|
|
26
|
+
resolve({
|
|
27
|
+
installed: false,
|
|
28
|
+
error: 'Check timed out'
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}, 20000);
|
|
32
|
+
child.stdout?.on('data', (data) => {
|
|
33
|
+
stdout += data.toString();
|
|
34
|
+
});
|
|
35
|
+
child.stderr?.on('data', (data) => {
|
|
36
|
+
stderr += data.toString();
|
|
37
|
+
});
|
|
38
|
+
child.on('close', (code) => {
|
|
39
|
+
if (!resolved) {
|
|
40
|
+
resolved = true;
|
|
41
|
+
clearTimeout(timeout);
|
|
42
|
+
if (code === 0) {
|
|
43
|
+
// Check if spawn-agent appears in the output
|
|
44
|
+
const isInstalled = stdout.toLowerCase().includes('spawn-agent');
|
|
45
|
+
resolve({ installed: isInstalled });
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
resolve({
|
|
49
|
+
installed: false,
|
|
50
|
+
error: stderr || 'Failed to check extensions'
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
child.on('error', (err) => {
|
|
56
|
+
if (!resolved) {
|
|
57
|
+
resolved = true;
|
|
58
|
+
clearTimeout(timeout);
|
|
59
|
+
resolve({
|
|
60
|
+
installed: false,
|
|
61
|
+
error: `Gemini CLI not available: ${err.message}`
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Check if Gemini CLI is available
|
|
69
|
+
*/
|
|
70
|
+
async function checkGeminiCli() {
|
|
71
|
+
return new Promise((resolve) => {
|
|
72
|
+
const child = spawn('gemini', ['--version'], {
|
|
73
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
74
|
+
shell: process.platform === 'win32'
|
|
75
|
+
});
|
|
76
|
+
let stdout = '';
|
|
77
|
+
let resolved = false;
|
|
78
|
+
// Timeout after 15 seconds (gemini CLI can be slow to start)
|
|
79
|
+
const timeout = setTimeout(() => {
|
|
80
|
+
if (!resolved) {
|
|
81
|
+
resolved = true;
|
|
82
|
+
child.kill();
|
|
83
|
+
resolve({ available: false, error: 'Timed out' });
|
|
84
|
+
}
|
|
85
|
+
}, 15000);
|
|
86
|
+
child.stdout?.on('data', (data) => {
|
|
87
|
+
stdout += data.toString();
|
|
88
|
+
});
|
|
89
|
+
child.on('close', (code) => {
|
|
90
|
+
if (!resolved) {
|
|
91
|
+
resolved = true;
|
|
92
|
+
clearTimeout(timeout);
|
|
93
|
+
if (code === 0) {
|
|
94
|
+
const version = stdout.trim().split('\n')[0] || 'unknown';
|
|
95
|
+
resolve({ available: true, version });
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
resolve({ available: false, error: 'Command failed' });
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
child.on('error', (err) => {
|
|
103
|
+
if (!resolved) {
|
|
104
|
+
resolved = true;
|
|
105
|
+
clearTimeout(timeout);
|
|
106
|
+
resolve({ available: false, error: err.message });
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
export function registerDoctorCommand(cli) {
|
|
112
|
+
cli
|
|
113
|
+
.command('doctor', 'Check installation health')
|
|
114
|
+
.option('--fix', 'Attempt to fix issues')
|
|
115
|
+
.action(async (options) => {
|
|
116
|
+
console.log();
|
|
117
|
+
console.log(pc.bold(brand.geminiPurple('GemKit Health Check')));
|
|
118
|
+
console.log();
|
|
119
|
+
let issues = 0;
|
|
120
|
+
let warnings = 0;
|
|
121
|
+
// Results storage for display after all checks
|
|
122
|
+
const results = [];
|
|
123
|
+
// Check Node.js version (sync - instant)
|
|
124
|
+
const nodeVersion = process.version;
|
|
125
|
+
const major = parseInt(nodeVersion.slice(1).split('.')[0], 10);
|
|
126
|
+
if (major >= 18) {
|
|
127
|
+
results.push({ icon: brand.success('✓'), message: `Node.js ${nodeVersion}` });
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
results.push({ icon: brand.error('✗'), message: `Node.js ${nodeVersion} ${brand.error('(requires >= 18)')}` });
|
|
131
|
+
issues++;
|
|
132
|
+
}
|
|
133
|
+
// Check Gemini CLI (async - with spinner)
|
|
134
|
+
const geminiSpinner = ora({
|
|
135
|
+
text: 'Checking Gemini CLI...',
|
|
136
|
+
color: 'magenta'
|
|
137
|
+
}).start();
|
|
138
|
+
const geminiCheck = await checkGeminiCli();
|
|
139
|
+
geminiSpinner.stop();
|
|
140
|
+
if (geminiCheck.available) {
|
|
141
|
+
results.push({ icon: brand.success('✓'), message: `Gemini CLI ${brand.dim(`(${geminiCheck.version})`)}` });
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
results.push({ icon: brand.error('✗'), message: `Gemini CLI not found ${brand.dim(`(${geminiCheck.error})`)}` });
|
|
145
|
+
issues++;
|
|
146
|
+
}
|
|
147
|
+
// Check .gemini directory (sync)
|
|
148
|
+
const geminiDir = getLocalGeminiDir();
|
|
149
|
+
if (existsSync(geminiDir)) {
|
|
150
|
+
results.push({ icon: brand.success('✓'), message: '.gemini directory exists' });
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
results.push({ icon: brand.error('✗'), message: '.gemini directory missing' });
|
|
154
|
+
issues++;
|
|
155
|
+
}
|
|
156
|
+
// Check agents directory (sync)
|
|
157
|
+
const agentsDir = getAgentsDir();
|
|
158
|
+
if (existsSync(agentsDir)) {
|
|
159
|
+
results.push({ icon: brand.success('✓'), message: 'Agents directory exists' });
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
results.push({ icon: brand.warn('○'), message: 'Agents directory missing' });
|
|
163
|
+
warnings++;
|
|
164
|
+
}
|
|
165
|
+
// Check extensions directory (sync)
|
|
166
|
+
const extensionsDir = getExtensionsDir();
|
|
167
|
+
if (existsSync(extensionsDir)) {
|
|
168
|
+
results.push({ icon: brand.success('✓'), message: 'Extensions directory exists' });
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
results.push({ icon: brand.warn('○'), message: 'Extensions directory missing' });
|
|
172
|
+
warnings++;
|
|
173
|
+
}
|
|
174
|
+
// Check spawn-agent extension directory exists locally (sync)
|
|
175
|
+
const spawnAgentDir = join(extensionsDir, 'spawn-agent');
|
|
176
|
+
if (existsSync(spawnAgentDir)) {
|
|
177
|
+
results.push({ icon: brand.success('✓'), message: 'spawn-agent extension files present' });
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
results.push({ icon: brand.warn('○'), message: 'spawn-agent extension files missing' });
|
|
181
|
+
warnings++;
|
|
182
|
+
}
|
|
183
|
+
// Check spawn-agent extension is installed in Gemini CLI (async - with spinner)
|
|
184
|
+
if (geminiCheck.available) {
|
|
185
|
+
const extensionSpinner = ora({
|
|
186
|
+
text: 'Checking spawn-agent extension...',
|
|
187
|
+
color: 'magenta'
|
|
188
|
+
}).start();
|
|
189
|
+
const spawnAgentCheck = await checkSpawnAgentInstalled();
|
|
190
|
+
extensionSpinner.stop();
|
|
191
|
+
if (spawnAgentCheck.installed) {
|
|
192
|
+
results.push({ icon: brand.success('✓'), message: 'spawn-agent extension installed in Gemini' });
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
results.push({
|
|
196
|
+
icon: brand.error('✗'),
|
|
197
|
+
message: 'spawn-agent extension NOT installed in Gemini',
|
|
198
|
+
hint: spawnAgentCheck.error
|
|
199
|
+
? `${spawnAgentCheck.error}\n Run: gemini extensions install .gemini/extensions/spawn-agent`
|
|
200
|
+
: 'Run: gemini extensions install .gemini/extensions/spawn-agent'
|
|
201
|
+
});
|
|
202
|
+
issues++;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// Check metadata (sync)
|
|
206
|
+
const metadata = loadMetadata();
|
|
207
|
+
if (metadata) {
|
|
208
|
+
results.push({ icon: brand.success('✓'), message: `Installation metadata ${brand.primary(`(v${metadata.version})`)}` });
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
results.push({ icon: brand.warn('○'), message: 'Installation metadata missing' });
|
|
212
|
+
warnings++;
|
|
213
|
+
}
|
|
214
|
+
// Display all results
|
|
215
|
+
for (const result of results) {
|
|
216
|
+
console.log(` ${result.icon} ${result.message}`);
|
|
217
|
+
if (result.hint) {
|
|
218
|
+
for (const line of result.hint.split('\n')) {
|
|
219
|
+
console.log(` ${brand.dim(line)}`);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
// Summary
|
|
224
|
+
console.log();
|
|
225
|
+
if (issues === 0 && warnings === 0) {
|
|
226
|
+
console.log(brand.success('All checks passed!'));
|
|
227
|
+
}
|
|
228
|
+
else if (issues === 0) {
|
|
229
|
+
console.log(brand.success(`All critical checks passed! ${brand.dim(`(${warnings} warning${warnings > 1 ? 's' : ''})`)}`));
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
console.log(brand.error(`${issues} issue(s) found.`));
|
|
233
|
+
if (warnings > 0) {
|
|
234
|
+
console.log(brand.warn(`${warnings} warning(s).`));
|
|
235
|
+
}
|
|
236
|
+
console.log();
|
|
237
|
+
console.log('To fix issues:');
|
|
238
|
+
console.log(` ${brand.dim('1.')} Run ${brand.primary('gk init')} to install GemKit`);
|
|
239
|
+
console.log(` ${brand.dim('2.')} Run ${brand.primary('gemini extensions install .gemini/extensions/spawn-agent')} to install extension`);
|
|
240
|
+
}
|
|
241
|
+
console.log();
|
|
242
|
+
});
|
|
243
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extension command - Manage GemKit extensions
|
|
3
|
+
*/
|
|
4
|
+
import { existsSync, readdirSync } from 'fs';
|
|
5
|
+
import { getExtensionsDir } from '../../utils/paths.js';
|
|
6
|
+
import { logger } from '../../services/logger.js';
|
|
7
|
+
import { brand, pc } from '../../utils/colors.js';
|
|
8
|
+
export function registerExtensionCommand(cli) {
|
|
9
|
+
const extension = cli.command('extension <subcommand>', 'Extension management').alias('ext');
|
|
10
|
+
// Subcommands
|
|
11
|
+
extension.example('gk extension list # List installed extensions');
|
|
12
|
+
extension.action(async (subcommand) => {
|
|
13
|
+
const sub = subcommand || 'list';
|
|
14
|
+
switch (sub) {
|
|
15
|
+
case 'list':
|
|
16
|
+
await handleList();
|
|
17
|
+
break;
|
|
18
|
+
default:
|
|
19
|
+
console.log();
|
|
20
|
+
logger.error(`Unknown subcommand: ${sub}`);
|
|
21
|
+
console.log();
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
async function handleList() {
|
|
27
|
+
const extDir = getExtensionsDir();
|
|
28
|
+
if (!existsSync(extDir)) {
|
|
29
|
+
console.log();
|
|
30
|
+
logger.info('No extensions directory found.');
|
|
31
|
+
console.log();
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const extensions = readdirSync(extDir, { withFileTypes: true })
|
|
35
|
+
.filter(d => d.isDirectory())
|
|
36
|
+
.map(d => d.name);
|
|
37
|
+
if (extensions.length === 0) {
|
|
38
|
+
console.log();
|
|
39
|
+
logger.info('No extensions installed.');
|
|
40
|
+
console.log();
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
console.log();
|
|
44
|
+
console.log(pc.bold(brand.geminiPurple('Installed Extensions')));
|
|
45
|
+
console.log();
|
|
46
|
+
for (const e of extensions) {
|
|
47
|
+
console.log(` ${brand.success('✓')} ${brand.primary(e)}`);
|
|
48
|
+
}
|
|
49
|
+
console.log();
|
|
50
|
+
console.log(brand.dim(` Total: ${extensions.length} extensions`));
|
|
51
|
+
console.log();
|
|
52
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command registry for GemKit CLI
|
|
3
|
+
*/
|
|
4
|
+
import { registerInitCommand } from './init/index.js';
|
|
5
|
+
import { registerUpdateCommand } from './update/index.js';
|
|
6
|
+
import { registerVersionsCommand } from './versions/index.js';
|
|
7
|
+
import { registerDoctorCommand } from './doctor/index.js';
|
|
8
|
+
import { registerConfigCommand } from './config/index.js';
|
|
9
|
+
import { registerCacheCommand } from './cache/index.js';
|
|
10
|
+
import { registerNewCommand } from './new/index.js';
|
|
11
|
+
import { registerAgentCommand } from './agent/index.js';
|
|
12
|
+
import { registerSessionCommand } from './session/index.js';
|
|
13
|
+
import { registerPlanCommand } from './plan/index.js';
|
|
14
|
+
import { registerTokensCommand } from './tokens/index.js';
|
|
15
|
+
import { registerExtensionCommand } from './extension/index.js';
|
|
16
|
+
import { registerCatalogCommand } from './catalog/index.js';
|
|
17
|
+
import { registerPasteCommand } from './paste/index.js';
|
|
18
|
+
import { registerConvertCommand } from './convert/index.js';
|
|
19
|
+
import { registerOfficeCommand } from './office/index.js';
|
|
20
|
+
export function registerCommands(cli) {
|
|
21
|
+
registerInitCommand(cli);
|
|
22
|
+
registerUpdateCommand(cli);
|
|
23
|
+
registerVersionsCommand(cli);
|
|
24
|
+
registerDoctorCommand(cli);
|
|
25
|
+
registerConfigCommand(cli);
|
|
26
|
+
registerCacheCommand(cli);
|
|
27
|
+
registerNewCommand(cli);
|
|
28
|
+
registerAgentCommand(cli);
|
|
29
|
+
registerSessionCommand(cli);
|
|
30
|
+
registerPlanCommand(cli);
|
|
31
|
+
registerTokensCommand(cli);
|
|
32
|
+
registerExtensionCommand(cli);
|
|
33
|
+
registerCatalogCommand(cli);
|
|
34
|
+
registerPasteCommand(cli);
|
|
35
|
+
registerConvertCommand(cli);
|
|
36
|
+
registerOfficeCommand(cli);
|
|
37
|
+
}
|