aitk-cli 0.2.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 (118) hide show
  1. package/README.md +147 -0
  2. package/dist/bin/aitk.d.ts +3 -0
  3. package/dist/bin/aitk.d.ts.map +1 -0
  4. package/dist/bin/aitk.js +108 -0
  5. package/dist/bin/aitk.js.map +1 -0
  6. package/dist/commands/completions.d.ts +3 -0
  7. package/dist/commands/completions.d.ts.map +1 -0
  8. package/dist/commands/completions.js +244 -0
  9. package/dist/commands/completions.js.map +1 -0
  10. package/dist/commands/config.d.ts +3 -0
  11. package/dist/commands/config.d.ts.map +1 -0
  12. package/dist/commands/config.js +108 -0
  13. package/dist/commands/config.js.map +1 -0
  14. package/dist/commands/init.d.ts +3 -0
  15. package/dist/commands/init.d.ts.map +1 -0
  16. package/dist/commands/init.js +232 -0
  17. package/dist/commands/init.js.map +1 -0
  18. package/dist/commands/install.d.ts +3 -0
  19. package/dist/commands/install.d.ts.map +1 -0
  20. package/dist/commands/install.js +250 -0
  21. package/dist/commands/install.js.map +1 -0
  22. package/dist/commands/list.d.ts +3 -0
  23. package/dist/commands/list.d.ts.map +1 -0
  24. package/dist/commands/list.js +78 -0
  25. package/dist/commands/list.js.map +1 -0
  26. package/dist/commands/login.d.ts +3 -0
  27. package/dist/commands/login.d.ts.map +1 -0
  28. package/dist/commands/login.js +362 -0
  29. package/dist/commands/login.js.map +1 -0
  30. package/dist/commands/logout.d.ts +3 -0
  31. package/dist/commands/logout.d.ts.map +1 -0
  32. package/dist/commands/logout.js +10 -0
  33. package/dist/commands/logout.js.map +1 -0
  34. package/dist/commands/publish.d.ts +3 -0
  35. package/dist/commands/publish.d.ts.map +1 -0
  36. package/dist/commands/publish.js +245 -0
  37. package/dist/commands/publish.js.map +1 -0
  38. package/dist/commands/remove.d.ts +3 -0
  39. package/dist/commands/remove.d.ts.map +1 -0
  40. package/dist/commands/remove.js +150 -0
  41. package/dist/commands/remove.js.map +1 -0
  42. package/dist/commands/search.d.ts +3 -0
  43. package/dist/commands/search.d.ts.map +1 -0
  44. package/dist/commands/search.js +77 -0
  45. package/dist/commands/search.js.map +1 -0
  46. package/dist/commands/status.d.ts +3 -0
  47. package/dist/commands/status.d.ts.map +1 -0
  48. package/dist/commands/status.js +177 -0
  49. package/dist/commands/status.js.map +1 -0
  50. package/dist/commands/sync.d.ts +3 -0
  51. package/dist/commands/sync.d.ts.map +1 -0
  52. package/dist/commands/sync.js +178 -0
  53. package/dist/commands/sync.js.map +1 -0
  54. package/dist/commands/team.d.ts +3 -0
  55. package/dist/commands/team.d.ts.map +1 -0
  56. package/dist/commands/team.js +236 -0
  57. package/dist/commands/team.js.map +1 -0
  58. package/dist/commands/update.d.ts +3 -0
  59. package/dist/commands/update.d.ts.map +1 -0
  60. package/dist/commands/update.js +311 -0
  61. package/dist/commands/update.js.map +1 -0
  62. package/dist/core/api-client.d.ts +44 -0
  63. package/dist/core/api-client.d.ts.map +1 -0
  64. package/dist/core/api-client.js +111 -0
  65. package/dist/core/api-client.js.map +1 -0
  66. package/dist/core/auth.d.ts +12 -0
  67. package/dist/core/auth.d.ts.map +1 -0
  68. package/dist/core/auth.js +48 -0
  69. package/dist/core/auth.js.map +1 -0
  70. package/dist/core/config.d.ts +13 -0
  71. package/dist/core/config.d.ts.map +1 -0
  72. package/dist/core/config.js +42 -0
  73. package/dist/core/config.js.map +1 -0
  74. package/dist/core/lockfile.d.ts +22 -0
  75. package/dist/core/lockfile.d.ts.map +1 -0
  76. package/dist/core/lockfile.js +75 -0
  77. package/dist/core/lockfile.js.map +1 -0
  78. package/dist/core/manifest.d.ts +12 -0
  79. package/dist/core/manifest.d.ts.map +1 -0
  80. package/dist/core/manifest.js +57 -0
  81. package/dist/core/manifest.js.map +1 -0
  82. package/dist/core/resolver.d.ts +52 -0
  83. package/dist/core/resolver.d.ts.map +1 -0
  84. package/dist/core/resolver.js +108 -0
  85. package/dist/core/resolver.js.map +1 -0
  86. package/dist/index.d.ts +8 -0
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +8 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/installers/base-installer.d.ts +19 -0
  91. package/dist/installers/base-installer.d.ts.map +1 -0
  92. package/dist/installers/base-installer.js +4 -0
  93. package/dist/installers/base-installer.js.map +1 -0
  94. package/dist/installers/config-installer.d.ts +10 -0
  95. package/dist/installers/config-installer.d.ts.map +1 -0
  96. package/dist/installers/config-installer.js +108 -0
  97. package/dist/installers/config-installer.js.map +1 -0
  98. package/dist/installers/hook-installer.d.ts +10 -0
  99. package/dist/installers/hook-installer.d.ts.map +1 -0
  100. package/dist/installers/hook-installer.js +41 -0
  101. package/dist/installers/hook-installer.js.map +1 -0
  102. package/dist/installers/mcp-installer.d.ts +14 -0
  103. package/dist/installers/mcp-installer.d.ts.map +1 -0
  104. package/dist/installers/mcp-installer.js +152 -0
  105. package/dist/installers/mcp-installer.js.map +1 -0
  106. package/dist/installers/skill-installer.d.ts +10 -0
  107. package/dist/installers/skill-installer.d.ts.map +1 -0
  108. package/dist/installers/skill-installer.js +41 -0
  109. package/dist/installers/skill-installer.js.map +1 -0
  110. package/dist/installers/template-installer.d.ts +16 -0
  111. package/dist/installers/template-installer.d.ts.map +1 -0
  112. package/dist/installers/template-installer.js +123 -0
  113. package/dist/installers/template-installer.js.map +1 -0
  114. package/dist/utils/logger.d.ts +66 -0
  115. package/dist/utils/logger.d.ts.map +1 -0
  116. package/dist/utils/logger.js +211 -0
  117. package/dist/utils/logger.js.map +1 -0
  118. package/package.json +81 -0
@@ -0,0 +1,232 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
5
+ import { join, basename } from 'node:path';
6
+ import { TOOL_TARGET_INFO } from '@tarcisiojunior/shared';
7
+ import { createApiClient } from '../core/api-client.js';
8
+ import { readManifest, writeManifest, createDefaultManifest } from '../core/manifest.js';
9
+ import { SkillInstaller } from '../installers/skill-installer.js';
10
+ import { McpInstaller } from '../installers/mcp-installer.js';
11
+ import { ConfigInstaller } from '../installers/config-installer.js';
12
+ import { HookInstaller } from '../installers/hook-installer.js';
13
+ import { TemplateInstaller } from '../installers/template-installer.js';
14
+ import { logger } from '../utils/logger.js';
15
+ import { tmpdir } from 'node:os';
16
+ import { execSync } from 'node:child_process';
17
+ import { rmSync } from 'node:fs';
18
+ /** Retorna o instalador adequado para o tipo do artefato */
19
+ function getInstaller(type) {
20
+ const installers = {
21
+ skill: new SkillInstaller(),
22
+ mcp: new McpInstaller(),
23
+ config: new ConfigInstaller(),
24
+ hook: new HookInstaller(),
25
+ template: new TemplateInstaller(),
26
+ };
27
+ return installers[type] || new SkillInstaller();
28
+ }
29
+ /** Limpa arquivos temporários */
30
+ function cleanup(...paths) {
31
+ for (const p of paths) {
32
+ try {
33
+ if (existsSync(p)) {
34
+ rmSync(p, { recursive: true, force: true });
35
+ }
36
+ }
37
+ catch {
38
+ // Ignora erros de limpeza
39
+ }
40
+ }
41
+ }
42
+ /** Detecta automaticamente a ferramenta de AI no diretório */
43
+ function detectTool(projectRoot) {
44
+ // Verifica por diretórios de configuração conhecidos
45
+ const detectionOrder = [
46
+ { dir: '.claude', tool: 'claude-code' },
47
+ { dir: '.opencode', tool: 'opencode' },
48
+ { dir: '.gemini', tool: 'gemini-cli' },
49
+ { dir: '.cursor', tool: 'cursor' },
50
+ { dir: '.aider', tool: 'aider' },
51
+ { dir: '.github/copilot', tool: 'copilot-cli' },
52
+ ];
53
+ for (const { dir, tool } of detectionOrder) {
54
+ if (existsSync(join(projectRoot, dir))) {
55
+ return tool;
56
+ }
57
+ }
58
+ return 'claude-code';
59
+ }
60
+ export const initCommand = new Command('init')
61
+ .description('Inicializar projeto ou aplicar um template')
62
+ .argument('[template]', 'Template para aplicar (scope/nome[@versão])')
63
+ .option('--tool <tool>', 'Ferramenta alvo (auto-detectado se não especificado)')
64
+ .option('--force', 'Sobrescrever manifesto existente')
65
+ .action(async (templateArg, options) => {
66
+ const projectRoot = process.cwd();
67
+ const projectName = basename(projectRoot);
68
+ // Verificar se já existe manifesto
69
+ const existing = readManifest();
70
+ if (existing && !options?.force && !templateArg) {
71
+ logger.blank();
72
+ logger.warn('Projeto já inicializado (aitk.json encontrado)');
73
+ logger.print(chalk.gray(' Use --force para reinicializar'));
74
+ logger.blank();
75
+ return;
76
+ }
77
+ // Detectar ou usar ferramenta especificada
78
+ const tool = (options?.tool || detectTool(projectRoot));
79
+ const toolInfo = TOOL_TARGET_INFO[tool];
80
+ logger.blank();
81
+ // ── Modo 1: Inicialização simples (sem template) ──────────────────
82
+ if (!templateArg) {
83
+ const spinner = ora({
84
+ text: ' Inicializando projeto...',
85
+ color: 'cyan',
86
+ }).start();
87
+ // Criar manifesto
88
+ const manifest = createDefaultManifest(tool);
89
+ writeManifest(manifest);
90
+ // Criar diretório de configuração da ferramenta
91
+ const configDir = join(projectRoot, toolInfo.configDir);
92
+ if (!existsSync(configDir)) {
93
+ mkdirSync(configDir, { recursive: true });
94
+ }
95
+ spinner.succeed(' Projeto inicializado');
96
+ // Exibir resultado
97
+ logger.blank();
98
+ const box = logger.box([
99
+ chalk.green.bold('Projeto inicializado!'),
100
+ '',
101
+ `${chalk.gray('Projeto:')} ${chalk.white.bold(projectName)}`,
102
+ `${chalk.gray('Ferramenta:')} ${chalk.cyan(toolInfo.label)}`,
103
+ `${chalk.gray('Config dir:')} ${chalk.gray(toolInfo.configDir + '/')}`,
104
+ `${chalk.gray('Manifesto:')} ${chalk.gray('aitk.json')}`,
105
+ '',
106
+ chalk.gray('Próximos passos:'),
107
+ ` ${chalk.gray('$')} ${chalk.cyan('aitk search')} ${chalk.white('"memory"')} ${chalk.gray('# Buscar artefatos')}`,
108
+ ` ${chalk.gray('$')} ${chalk.cyan('aitk install')} ${chalk.white('scope/nome')} ${chalk.gray('# Instalar artefato')}`,
109
+ ` ${chalk.gray('$')} ${chalk.cyan('aitk list')} ${chalk.gray('# Ver instalados')}`,
110
+ ]);
111
+ logger.print(box);
112
+ logger.blank();
113
+ return;
114
+ }
115
+ // ── Modo 2: Inicialização com template ────────────────────────────
116
+ const match = templateArg.match(/^([^/]+)\/([^@]+)(?:@(.+))?$/);
117
+ if (!match) {
118
+ logger.error('Formato de template inválido. Use: scope/nome[@versão]');
119
+ logger.print(chalk.gray(` Exemplo: ${chalk.cyan('aitk init official/starter-kit')}`));
120
+ logger.blank();
121
+ return;
122
+ }
123
+ const [, scope, name, requestedVersion] = match;
124
+ const fullName = `${scope}/${name}`;
125
+ logger.print(` ${chalk.white.bold('Inicializando com template')} ${chalk.cyan.bold(fullName)}`);
126
+ logger.print(chalk.gray(` Ferramenta alvo: ${toolInfo.label}`));
127
+ logger.blank();
128
+ const tmpFiles = [];
129
+ try {
130
+ // Passo 1: Resolver template
131
+ const spinner1 = ora({
132
+ text: ` ${chalk.gray('[1/4]')} Resolvendo template...`,
133
+ color: 'cyan',
134
+ }).start();
135
+ const client = createApiClient();
136
+ const artifactResponse = await client.getArtifact(scope, name);
137
+ const artifactData = artifactResponse.data;
138
+ if (artifactData.type !== 'template') {
139
+ spinner1.warn(` ${chalk.gray('[1/4]')} ${chalk.yellow(`"${fullName}" não é um template (tipo: ${artifactData.type})`)}`);
140
+ logger.print(chalk.gray(' Dica: Use "aitk install" para artefatos individuais.'));
141
+ logger.blank();
142
+ return;
143
+ }
144
+ const resolvedVersion = requestedVersion || artifactData.latestVersion || '';
145
+ if (!resolvedVersion) {
146
+ spinner1.fail(` ${chalk.gray('[1/4]')} Template sem versão disponível`);
147
+ logger.blank();
148
+ return;
149
+ }
150
+ spinner1.succeed(` ${chalk.gray('[1/4]')} Template encontrado: ${chalk.green(`v${resolvedVersion}`)}`);
151
+ // Passo 2: Baixar template
152
+ const spinner2 = ora({
153
+ text: ` ${chalk.gray('[2/4]')} Baixando template...`,
154
+ color: 'cyan',
155
+ }).start();
156
+ const { buffer } = await client.downloadVersion(scope, name, resolvedVersion);
157
+ const tmpDir = join(tmpdir(), `aitk-init-${Date.now()}`);
158
+ mkdirSync(tmpDir, { recursive: true });
159
+ tmpFiles.push(tmpDir);
160
+ const tarballPath = join(tmpDir, `${scope}-${name}-${resolvedVersion}.tgz`);
161
+ writeFileSync(tarballPath, Buffer.from(buffer));
162
+ // Extrair
163
+ const extractDir = join(tmpdir(), `aitk-init-extract-${Date.now()}`);
164
+ mkdirSync(extractDir, { recursive: true });
165
+ tmpFiles.push(extractDir);
166
+ execSync(`tar -xzf "${tarballPath}" -C "${extractDir}"`, { stdio: 'pipe' });
167
+ spinner2.succeed(` ${chalk.gray('[2/4]')} Template baixado`);
168
+ // Passo 3: Instalar artefatos do template
169
+ const spinner3 = ora({
170
+ text: ` ${chalk.gray('[3/4]')} Instalando artefatos do template...`,
171
+ color: 'cyan',
172
+ }).start();
173
+ const installer = getInstaller('template');
174
+ const installManifest = {
175
+ name: artifactData.name,
176
+ scope: artifactData.scope,
177
+ version: resolvedVersion,
178
+ type: 'template',
179
+ description: artifactData.description,
180
+ keywords: artifactData.keywords,
181
+ categories: artifactData.categories,
182
+ license: artifactData.license,
183
+ repository: artifactData.repository,
184
+ toolTargets: artifactData.toolTargets,
185
+ files: [],
186
+ install: {},
187
+ };
188
+ const result = await installer.install(installManifest, extractDir, projectRoot, tool);
189
+ if (result.success) {
190
+ spinner3.succeed(` ${chalk.gray('[3/4]')} ${chalk.green(`${result.filesInstalled.length} arquivo(s) instalado(s)`)}`);
191
+ }
192
+ else {
193
+ spinner3.warn(` ${chalk.gray('[3/4]')} Template instalado parcialmente`);
194
+ }
195
+ // Passo 4: Criar/atualizar manifesto
196
+ const spinner4 = ora({
197
+ text: ` ${chalk.gray('[4/4]')} Criando manifesto do projeto...`,
198
+ color: 'cyan',
199
+ }).start();
200
+ const manifest = existing || createDefaultManifest(tool);
201
+ writeManifest(manifest);
202
+ spinner4.succeed(` ${chalk.gray('[4/4]')} Manifesto criado`);
203
+ // Mensagem de sucesso
204
+ logger.blank();
205
+ const box = logger.box([
206
+ chalk.green.bold('Projeto inicializado com template!'),
207
+ '',
208
+ `${chalk.gray('Template:')} ${chalk.cyan.bold(fullName)}@${resolvedVersion}`,
209
+ `${chalk.gray('Projeto:')} ${chalk.white.bold(projectName)}`,
210
+ `${chalk.gray('Ferramenta:')} ${chalk.cyan(toolInfo.label)}`,
211
+ `${chalk.gray('Arquivos:')} ${chalk.white(String(result.filesInstalled.length))} instalados`,
212
+ '',
213
+ ...(result.message ? [chalk.gray(result.message), ''] : []),
214
+ chalk.gray('Próximos passos:'),
215
+ ` ${chalk.gray('$')} ${chalk.cyan('aitk list')} ${chalk.gray('# Ver artefatos instalados')}`,
216
+ ` ${chalk.gray('$')} ${chalk.cyan('aitk sync')} ${chalk.gray('# Sincronizar com registry')}`,
217
+ ]);
218
+ logger.print(box);
219
+ logger.blank();
220
+ }
221
+ catch (error) {
222
+ logger.blank();
223
+ logger.error('Erro ao inicializar com template');
224
+ logger.error(error instanceof Error ? error.message : 'Erro desconhecido');
225
+ logger.blank();
226
+ process.exitCode = 1;
227
+ }
228
+ finally {
229
+ cleanup(...tmpFiles);
230
+ }
231
+ });
232
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const installCommand: Command;
3
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0FpC,eAAO,MAAM,cAAc,SAwOvB,CAAC"}
@@ -0,0 +1,250 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { writeFileSync, existsSync, mkdirSync, rmSync } from 'node:fs';
5
+ import { join } from 'node:path';
6
+ import { tmpdir } from 'node:os';
7
+ import { execSync } from 'node:child_process';
8
+ import { createApiClient } from '../core/api-client.js';
9
+ import { readManifest, writeManifest, createDefaultManifest, addArtifactToManifest, } from '../core/manifest.js';
10
+ import { SkillInstaller } from '../installers/skill-installer.js';
11
+ import { McpInstaller } from '../installers/mcp-installer.js';
12
+ import { ConfigInstaller } from '../installers/config-installer.js';
13
+ import { HookInstaller } from '../installers/hook-installer.js';
14
+ import { TemplateInstaller } from '../installers/template-installer.js';
15
+ import { logger } from '../utils/logger.js';
16
+ /** Parseia o argumento no formato scope/name[@version] */
17
+ function parseArtifactArg(artifact) {
18
+ const match = artifact.match(/^([^/]+)\/([^@]+)(?:@(.+))?$/);
19
+ if (!match)
20
+ return null;
21
+ const [, scope, name, version] = match;
22
+ return { scope, name, version };
23
+ }
24
+ /** Retorna o instalador adequado para o tipo do artefato */
25
+ function getInstaller(type) {
26
+ // Mapa de instaladores por tipo de artefato
27
+ const installers = {
28
+ skill: new SkillInstaller(),
29
+ mcp: new McpInstaller(),
30
+ config: new ConfigInstaller(),
31
+ hook: new HookInstaller(),
32
+ template: new TemplateInstaller(),
33
+ };
34
+ const installer = installers[type];
35
+ if (!installer) {
36
+ throw new Error(`Tipo de artefato "${type}" ainda não possui instalador.\n` +
37
+ `Tipos suportados: ${Object.keys(installers).join(', ')}`);
38
+ }
39
+ return installer;
40
+ }
41
+ /** Formata bytes para exibição legível */
42
+ function formatBytes(bytes) {
43
+ if (bytes < 1024)
44
+ return `${bytes} B`;
45
+ if (bytes < 1024 * 1024)
46
+ return `${(bytes / 1024).toFixed(1)} KB`;
47
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
48
+ }
49
+ /** Extrai um tarball para um diretório temporário */
50
+ function extractTarball(tarballPath) {
51
+ const extractDir = join(tmpdir(), `aitk-install-${Date.now()}`);
52
+ mkdirSync(extractDir, { recursive: true });
53
+ execSync(`tar -xzf "${tarballPath}" -C "${extractDir}"`, {
54
+ stdio: 'pipe',
55
+ });
56
+ return extractDir;
57
+ }
58
+ /** Limpa arquivos temporários */
59
+ function cleanup(...paths) {
60
+ for (const p of paths) {
61
+ try {
62
+ if (existsSync(p)) {
63
+ rmSync(p, { recursive: true, force: true });
64
+ }
65
+ }
66
+ catch {
67
+ // Ignora erros de limpeza
68
+ }
69
+ }
70
+ }
71
+ export const installCommand = new Command('install')
72
+ .description('Instalar um artefato')
73
+ .argument('<artifact>', 'Artefato no formato scope/nome[@versao]')
74
+ .option('--save-dev', 'Salvar como dependencia de desenvolvimento')
75
+ .option('--tool <tool>', 'Ferramenta alvo (padrao: claude-code)')
76
+ .action(async (artifact, options) => {
77
+ // Parsear scope/name@version
78
+ const parsed = parseArtifactArg(artifact);
79
+ if (!parsed) {
80
+ logger.blank();
81
+ logger.error('Formato invalido. Use: scope/nome[@versao]');
82
+ logger.print(chalk.gray(` Exemplo: ${chalk.cyan('aitk install official/code-review@1.0.0')}`));
83
+ logger.blank();
84
+ return;
85
+ }
86
+ const { scope, name, version: requestedVersion } = parsed;
87
+ const tool = (options.tool || 'claude-code');
88
+ const fullName = `${scope}/${name}`;
89
+ const versionTag = requestedVersion || 'latest';
90
+ logger.blank();
91
+ logger.print(` ${chalk.white.bold('Instalando')} ${chalk.cyan.bold(fullName)}${chalk.gray(`@${versionTag}`)}`);
92
+ logger.print(chalk.gray(` Ferramenta alvo: ${tool}`));
93
+ logger.blank();
94
+ const totalSteps = 5;
95
+ const tmpFiles = [];
96
+ try {
97
+ // ── Passo 1: Buscar artefato e resolver versão ────────────────
98
+ const spinner1 = ora({
99
+ text: `${logger.stepIndicator(1, totalSteps)} Resolvendo versao...`,
100
+ color: 'cyan',
101
+ }).start();
102
+ const client = createApiClient();
103
+ // Busca detalhes do artefato
104
+ const artifactResponse = await client.getArtifact(scope, name);
105
+ const artifactData = artifactResponse.data;
106
+ // Resolve a versão (latest ou específica)
107
+ let resolvedVersion;
108
+ if (requestedVersion) {
109
+ // Versão específica solicitada — verifica se existe
110
+ const versionsResponse = await client.getVersions(scope, name);
111
+ const found = versionsResponse.data.find((v) => v.version === requestedVersion);
112
+ if (!found) {
113
+ spinner1.fail(`${logger.stepIndicator(1, totalSteps)} Versão ${chalk.red(requestedVersion)} não encontrada`);
114
+ logger.blank();
115
+ // Lista versões disponíveis para ajudar o usuário
116
+ if (versionsResponse.data.length > 0) {
117
+ logger.print(chalk.gray(' Versões disponíveis:'));
118
+ for (const v of versionsResponse.data.slice(0, 5)) {
119
+ logger.print(` ${chalk.cyan(v.version)} ${chalk.gray(`(${new Date(v.publishedAt).toLocaleDateString('pt-BR')})`)}`);
120
+ }
121
+ }
122
+ logger.blank();
123
+ return;
124
+ }
125
+ resolvedVersion = requestedVersion;
126
+ }
127
+ else {
128
+ // Usa a versão latest do artefato
129
+ if (!artifactData.latestVersion) {
130
+ spinner1.fail(`${logger.stepIndicator(1, totalSteps)} Artefato não possui nenhuma versão publicada`);
131
+ logger.blank();
132
+ return;
133
+ }
134
+ resolvedVersion = artifactData.latestVersion;
135
+ }
136
+ spinner1.succeed(`${logger.stepIndicator(1, totalSteps)} Versão resolvida: ${chalk.green.bold(`v${resolvedVersion}`)} ${chalk.gray(`(${artifactData.type})`)}`);
137
+ // ── Passo 2: Baixar artefato ──────────────────────────────────
138
+ const spinner2 = ora({
139
+ text: `${logger.stepIndicator(2, totalSteps)} Baixando artefato...`,
140
+ color: 'cyan',
141
+ }).start();
142
+ const { buffer, size } = await client.downloadVersion(scope, name, resolvedVersion);
143
+ // Salva o tarball em diretório temporário
144
+ const tmpDir = join(tmpdir(), `aitk-dl-${Date.now()}`);
145
+ mkdirSync(tmpDir, { recursive: true });
146
+ tmpFiles.push(tmpDir);
147
+ const tarballPath = join(tmpDir, `${scope}-${name}-${resolvedVersion}.tgz`);
148
+ writeFileSync(tarballPath, Buffer.from(buffer));
149
+ spinner2.succeed(`${logger.stepIndicator(2, totalSteps)} Download completo ${chalk.gray(`(${formatBytes(size)})`)}`);
150
+ // ── Passo 3: Extrair e instalar arquivos ──────────────────────
151
+ const spinner3 = ora({
152
+ text: `${logger.stepIndicator(3, totalSteps)} Instalando arquivos...`,
153
+ color: 'cyan',
154
+ }).start();
155
+ // Extrai o tarball
156
+ const extractDir = extractTarball(tarballPath);
157
+ tmpFiles.push(extractDir);
158
+ // Obtém o instalador adequado para o tipo
159
+ const installer = getInstaller(artifactData.type);
160
+ // Monta o manifesto necessário para o instalador
161
+ const installManifest = {
162
+ name: artifactData.name,
163
+ scope: artifactData.scope,
164
+ version: resolvedVersion,
165
+ type: artifactData.type,
166
+ description: artifactData.description,
167
+ keywords: artifactData.keywords,
168
+ categories: artifactData.categories,
169
+ license: artifactData.license,
170
+ repository: artifactData.repository,
171
+ toolTargets: artifactData.toolTargets,
172
+ files: [],
173
+ install: {},
174
+ };
175
+ // Executa a instalação
176
+ const projectRoot = process.cwd();
177
+ const result = await installer.install(installManifest, extractDir, projectRoot, tool);
178
+ if (!result.success) {
179
+ spinner3.fail(`${logger.stepIndicator(3, totalSteps)} Falha na instalação`);
180
+ if (result.message) {
181
+ logger.error(result.message);
182
+ }
183
+ logger.blank();
184
+ return;
185
+ }
186
+ spinner3.succeed(`${logger.stepIndicator(3, totalSteps)} Arquivos instalados em ${chalk.gray(result.installedPath)}`);
187
+ // ── Passo 4: Atualizar manifesto do projeto ───────────────────
188
+ const spinner4 = ora({
189
+ text: `${logger.stepIndicator(4, totalSteps)} Atualizando aitk.json...`,
190
+ color: 'cyan',
191
+ }).start();
192
+ // Lê ou cria o manifesto do projeto
193
+ let projectManifest = readManifest();
194
+ if (!projectManifest) {
195
+ projectManifest = createDefaultManifest(tool);
196
+ }
197
+ // Adiciona o artefato ao manifesto
198
+ const artifactSlug = `${scope}/${name}`;
199
+ const versionRange = `^${resolvedVersion}`;
200
+ projectManifest = addArtifactToManifest(projectManifest, artifactSlug, versionRange, options.saveDev || false);
201
+ // Salva o manifesto atualizado
202
+ writeManifest(projectManifest);
203
+ spinner4.succeed(`${logger.stepIndicator(4, totalSteps)} Manifesto atualizado ${chalk.gray(`(${options.saveDev ? 'devArtifacts' : 'artifacts'})`)}`);
204
+ // ── Passo 5: Verificação final ────────────────────────────────
205
+ const spinner5 = ora({
206
+ text: `${logger.stepIndicator(5, totalSteps)} Verificando instalação...`,
207
+ color: 'cyan',
208
+ }).start();
209
+ // Verifica se os arquivos foram instalados corretamente
210
+ if (existsSync(result.installedPath)) {
211
+ spinner5.succeed(`${logger.stepIndicator(5, totalSteps)} Instalação verificada`);
212
+ }
213
+ else {
214
+ spinner5.warn(`${logger.stepIndicator(5, totalSteps)} Diretório de instalação não encontrado`);
215
+ }
216
+ // ── Árvore de arquivos instalados ─────────────────────────────
217
+ logger.blank();
218
+ const treeFiles = result.filesInstalled.length > 0
219
+ ? result.filesInstalled
220
+ : ['(nenhum arquivo listado)'];
221
+ const tree = logger.fileTree(treeFiles, ` ${chalk.gray('Arquivos instalados:')}`);
222
+ logger.print(' ' + tree.split('\n').join('\n '));
223
+ // ── Mensagem de sucesso ───────────────────────────────────────
224
+ logger.blank();
225
+ const successBox = logger.box([
226
+ chalk.green.bold('Instalação concluída!'),
227
+ '',
228
+ `${chalk.gray('Artefato:')} ${chalk.cyan.bold(fullName)}@${resolvedVersion}`,
229
+ `${chalk.gray('Tipo:')} ${logger.typeBadge(artifactData.type)}`,
230
+ `${chalk.gray('Ferramenta:')} ${chalk.white(tool)}`,
231
+ `${chalk.gray('Local:')} ${chalk.gray(result.installedPath)}`,
232
+ '',
233
+ chalk.gray(`Use ${chalk.cyan('aitk list')} para ver artefatos instalados.`),
234
+ ]);
235
+ logger.print(successBox);
236
+ logger.blank();
237
+ }
238
+ catch (error) {
239
+ logger.blank();
240
+ logger.error('Erro ao instalar artefato');
241
+ logger.error(error instanceof Error ? error.message : 'Erro desconhecido');
242
+ logger.blank();
243
+ process.exitCode = 1;
244
+ }
245
+ finally {
246
+ // Limpa arquivos temporários
247
+ cleanup(...tmpFiles);
248
+ }
249
+ });
250
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const listCommand: Command;
3
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,WAAW,SAqFpB,CAAC"}
@@ -0,0 +1,78 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { readManifest } from '../core/manifest.js';
4
+ import { logger } from '../utils/logger.js';
5
+ export const listCommand = new Command('list')
6
+ .alias('ls')
7
+ .description('Listar artefatos instalados no projeto')
8
+ .action(async () => {
9
+ try {
10
+ const manifest = readManifest();
11
+ if (!manifest) {
12
+ logger.blank();
13
+ logger.warn('Nenhum aitk.json encontrado neste diretorio.');
14
+ logger.blank();
15
+ logger.print(chalk.gray(` Execute ${chalk.cyan('aitk install <artefato>')} para comecar.`));
16
+ logger.blank();
17
+ return;
18
+ }
19
+ const artifacts = Object.entries(manifest.artifacts);
20
+ const devArtifacts = Object.entries(manifest.devArtifacts || {});
21
+ const totalCount = artifacts.length + devArtifacts.length;
22
+ if (totalCount === 0) {
23
+ logger.blank();
24
+ logger.warn('Nenhum artefato instalado.');
25
+ logger.print(chalk.gray(`\n Execute ${chalk.cyan('aitk install <artefato>')} para comecar.`));
26
+ logger.blank();
27
+ return;
28
+ }
29
+ logger.blank();
30
+ logger.print(` ${chalk.white.bold('Artefatos instalados')} ${chalk.gray(`(${totalCount})`)}`);
31
+ logger.print(chalk.gray(` Ferramenta: ${manifest.tool}`));
32
+ logger.blank();
33
+ // Combinar todos os artefatos para a tabela
34
+ const allEntries = [
35
+ ...artifacts.map(([name, version]) => ({ name, version, isDev: false })),
36
+ ...devArtifacts.map(([name, version]) => ({ name, version, isDev: true })),
37
+ ];
38
+ // Calcular larguras
39
+ const nameWidth = Math.max(12, ...allEntries.map((e) => e.name.length));
40
+ const versionWidth = 12;
41
+ const tipoWidth = 8;
42
+ // Renderizar tabela
43
+ const tableOutput = logger.table({
44
+ columns: [
45
+ { header: 'Artefato', width: nameWidth },
46
+ { header: 'Versao', width: versionWidth },
47
+ { header: 'Tipo', width: tipoWidth },
48
+ ],
49
+ rows: allEntries.map((entry) => {
50
+ // Inferir tipo a partir do nome (se disponivel)
51
+ const typeLabel = entry.isDev
52
+ ? chalk.yellow('dev')
53
+ : chalk.green('prod');
54
+ return [
55
+ chalk.cyan.bold(entry.name),
56
+ chalk.white(entry.version),
57
+ typeLabel,
58
+ ];
59
+ }),
60
+ });
61
+ logger.print(tableOutput);
62
+ // Sumario
63
+ logger.blank();
64
+ const parts = [];
65
+ if (artifacts.length > 0) {
66
+ parts.push(chalk.green(`${artifacts.length} producao`));
67
+ }
68
+ if (devArtifacts.length > 0) {
69
+ parts.push(chalk.yellow(`${devArtifacts.length} desenvolvimento`));
70
+ }
71
+ logger.print(` ${chalk.gray('Total:')} ${parts.join(chalk.gray(' | '))}`);
72
+ logger.blank();
73
+ }
74
+ catch (error) {
75
+ logger.error(error instanceof Error ? error.message : 'Erro desconhecido');
76
+ }
77
+ });
78
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const loginCommand: Command;
3
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkapC,eAAO,MAAM,YAAY,SAWrB,CAAC"}