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.
- package/README.md +147 -0
- package/dist/bin/aitk.d.ts +3 -0
- package/dist/bin/aitk.d.ts.map +1 -0
- package/dist/bin/aitk.js +108 -0
- package/dist/bin/aitk.js.map +1 -0
- package/dist/commands/completions.d.ts +3 -0
- package/dist/commands/completions.d.ts.map +1 -0
- package/dist/commands/completions.js +244 -0
- package/dist/commands/completions.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +108 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +232 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/install.d.ts +3 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +250 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +78 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/login.d.ts +3 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +362 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +3 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +10 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/publish.d.ts +3 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +245 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/remove.d.ts +3 -0
- package/dist/commands/remove.d.ts.map +1 -0
- package/dist/commands/remove.js +150 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/search.d.ts +3 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +77 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +177 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/sync.d.ts +3 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +178 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/team.d.ts +3 -0
- package/dist/commands/team.d.ts.map +1 -0
- package/dist/commands/team.js +236 -0
- package/dist/commands/team.js.map +1 -0
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +311 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/core/api-client.d.ts +44 -0
- package/dist/core/api-client.d.ts.map +1 -0
- package/dist/core/api-client.js +111 -0
- package/dist/core/api-client.js.map +1 -0
- package/dist/core/auth.d.ts +12 -0
- package/dist/core/auth.d.ts.map +1 -0
- package/dist/core/auth.js +48 -0
- package/dist/core/auth.js.map +1 -0
- package/dist/core/config.d.ts +13 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +42 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/lockfile.d.ts +22 -0
- package/dist/core/lockfile.d.ts.map +1 -0
- package/dist/core/lockfile.js +75 -0
- package/dist/core/lockfile.js.map +1 -0
- package/dist/core/manifest.d.ts +12 -0
- package/dist/core/manifest.d.ts.map +1 -0
- package/dist/core/manifest.js +57 -0
- package/dist/core/manifest.js.map +1 -0
- package/dist/core/resolver.d.ts +52 -0
- package/dist/core/resolver.d.ts.map +1 -0
- package/dist/core/resolver.js +108 -0
- package/dist/core/resolver.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/installers/base-installer.d.ts +19 -0
- package/dist/installers/base-installer.d.ts.map +1 -0
- package/dist/installers/base-installer.js +4 -0
- package/dist/installers/base-installer.js.map +1 -0
- package/dist/installers/config-installer.d.ts +10 -0
- package/dist/installers/config-installer.d.ts.map +1 -0
- package/dist/installers/config-installer.js +108 -0
- package/dist/installers/config-installer.js.map +1 -0
- package/dist/installers/hook-installer.d.ts +10 -0
- package/dist/installers/hook-installer.d.ts.map +1 -0
- package/dist/installers/hook-installer.js +41 -0
- package/dist/installers/hook-installer.js.map +1 -0
- package/dist/installers/mcp-installer.d.ts +14 -0
- package/dist/installers/mcp-installer.d.ts.map +1 -0
- package/dist/installers/mcp-installer.js +152 -0
- package/dist/installers/mcp-installer.js.map +1 -0
- package/dist/installers/skill-installer.d.ts +10 -0
- package/dist/installers/skill-installer.d.ts.map +1 -0
- package/dist/installers/skill-installer.js +41 -0
- package/dist/installers/skill-installer.js.map +1 -0
- package/dist/installers/template-installer.d.ts +16 -0
- package/dist/installers/template-installer.d.ts.map +1 -0
- package/dist/installers/template-installer.js +123 -0
- package/dist/installers/template-installer.js.map +1 -0
- package/dist/utils/logger.d.ts +66 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +211 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-installer.d.ts","sourceRoot":"","sources":["../../src/installers/mcp-installer.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAE3E,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AA+BxE,mCAAmC;AACnC,qBAAa,YAAa,SAAQ,aAAa;IAC7C,QAAQ,CAAC,IAAI,SAAS;IAEtB,cAAc,CAAC,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM;IAY/F,mDAAmD;IACnD,OAAO,CAAC,aAAa;IAyBrB,4DAA4D;IAC5D,OAAO,CAAC,gBAAgB;IAalB,OAAO,CACX,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,aAAa,CAAC;IAoEnB,SAAS,CACb,QAAQ,EAAE,gBAAgB,EAC1B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,IAAI,CAAC;CAsCjB"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, cpSync, rmSync, } from 'node:fs';
|
|
3
|
+
import { TOOL_TARGET_INFO } from '@tarcisiojunior/shared';
|
|
4
|
+
import { BaseInstaller } from './base-installer.js';
|
|
5
|
+
/** Retorna o nome do arquivo de configuracoes por ferramenta */
|
|
6
|
+
function getSettingsFilename(toolTarget) {
|
|
7
|
+
// Cada ferramenta pode ter seu proprio arquivo de configuracao
|
|
8
|
+
const settingsMap = {
|
|
9
|
+
'claude-code': 'settings.json',
|
|
10
|
+
opencode: 'settings.json',
|
|
11
|
+
'gemini-cli': 'settings.json',
|
|
12
|
+
'copilot-cli': 'settings.json',
|
|
13
|
+
aider: 'settings.json',
|
|
14
|
+
cursor: 'settings.json',
|
|
15
|
+
};
|
|
16
|
+
return settingsMap[toolTarget];
|
|
17
|
+
}
|
|
18
|
+
/** Instalador de servidores MCP */
|
|
19
|
+
export class McpInstaller extends BaseInstaller {
|
|
20
|
+
type = 'mcp';
|
|
21
|
+
getInstallPath(manifest, projectRoot, toolTarget) {
|
|
22
|
+
const toolInfo = TOOL_TARGET_INFO[toolTarget];
|
|
23
|
+
const installConfig = manifest.install[toolTarget];
|
|
24
|
+
if (installConfig?.target) {
|
|
25
|
+
return join(projectRoot, installConfig.target);
|
|
26
|
+
}
|
|
27
|
+
// Caminho padrao: <configDir>/settings.json (onde o MCP sera registrado)
|
|
28
|
+
return join(projectRoot, toolInfo.configDir, getSettingsFilename(toolTarget));
|
|
29
|
+
}
|
|
30
|
+
/** Le a configuracao MCP dos arquivos extraidos */
|
|
31
|
+
readMcpConfig(extractedPath) {
|
|
32
|
+
// Procura por config.json ou mcp.json nos arquivos extraidos
|
|
33
|
+
const possibleFiles = ['config.json', 'mcp.json', 'mcp-config.json'];
|
|
34
|
+
for (const filename of possibleFiles) {
|
|
35
|
+
const configPath = join(extractedPath, filename);
|
|
36
|
+
if (existsSync(configPath)) {
|
|
37
|
+
try {
|
|
38
|
+
const content = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
39
|
+
// Suporta formato { "mcpServers": { ... } } ou diretamente { "server-name": { ... } }
|
|
40
|
+
if (content.mcpServers) {
|
|
41
|
+
return content.mcpServers;
|
|
42
|
+
}
|
|
43
|
+
return content;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// Ignora arquivos com JSON invalido
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
/** Le o arquivo de configuracoes existente da ferramenta */
|
|
53
|
+
readToolSettings(settingsPath) {
|
|
54
|
+
if (existsSync(settingsPath)) {
|
|
55
|
+
try {
|
|
56
|
+
return JSON.parse(readFileSync(settingsPath, 'utf-8'));
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// Arquivo corrompido, inicia do zero
|
|
60
|
+
return {};
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return {};
|
|
64
|
+
}
|
|
65
|
+
async install(manifest, extractedPath, projectRoot, toolTarget) {
|
|
66
|
+
const toolInfo = TOOL_TARGET_INFO[toolTarget];
|
|
67
|
+
const settingsPath = this.getInstallPath(manifest, projectRoot, toolTarget);
|
|
68
|
+
const configDir = join(projectRoot, toolInfo.configDir);
|
|
69
|
+
// Cria diretorio de configuracao se nao existir
|
|
70
|
+
mkdirSync(configDir, { recursive: true });
|
|
71
|
+
// Le a configuracao MCP do artefato extraido
|
|
72
|
+
const mcpConfig = this.readMcpConfig(extractedPath);
|
|
73
|
+
if (!mcpConfig) {
|
|
74
|
+
return {
|
|
75
|
+
success: false,
|
|
76
|
+
installedPath: settingsPath,
|
|
77
|
+
filesInstalled: [],
|
|
78
|
+
message: 'Nenhum arquivo de configuracao MCP encontrado (config.json, mcp.json ou mcp-config.json)',
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
// Diretorio para armazenar arquivos auxiliares do MCP (scripts, etc.)
|
|
82
|
+
const mcpAssetsDir = join(configDir, 'mcp', manifest.name);
|
|
83
|
+
mkdirSync(mcpAssetsDir, { recursive: true });
|
|
84
|
+
// Copia todos os arquivos extraidos (exceto configs) para o diretorio de assets
|
|
85
|
+
const configFiles = ['config.json', 'mcp.json', 'mcp-config.json'];
|
|
86
|
+
const extractedFiles = readdirSync(extractedPath, { recursive: true }).map(String);
|
|
87
|
+
for (const file of extractedFiles) {
|
|
88
|
+
if (!configFiles.includes(file)) {
|
|
89
|
+
cpSync(join(extractedPath, file), join(mcpAssetsDir, file), { recursive: true });
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Le as configuracoes existentes da ferramenta
|
|
93
|
+
const settings = this.readToolSettings(settingsPath);
|
|
94
|
+
// Inicializa mcpServers se nao existir
|
|
95
|
+
if (!settings.mcpServers) {
|
|
96
|
+
settings.mcpServers = {};
|
|
97
|
+
}
|
|
98
|
+
// Faz merge das configuracoes MCP no arquivo de settings
|
|
99
|
+
const serverNames = [];
|
|
100
|
+
for (const [serverName, serverConfig] of Object.entries(mcpConfig)) {
|
|
101
|
+
settings.mcpServers[serverName] = serverConfig;
|
|
102
|
+
serverNames.push(serverName);
|
|
103
|
+
}
|
|
104
|
+
// Salva o arquivo de configuracoes atualizado
|
|
105
|
+
writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
|
|
106
|
+
// Lista todos os arquivos envolvidos na instalacao
|
|
107
|
+
const filesInstalled = [
|
|
108
|
+
getSettingsFilename(toolTarget),
|
|
109
|
+
...readdirSync(mcpAssetsDir, { recursive: true })
|
|
110
|
+
.map(String)
|
|
111
|
+
.filter((f) => !f.startsWith('.')),
|
|
112
|
+
];
|
|
113
|
+
return {
|
|
114
|
+
success: true,
|
|
115
|
+
installedPath: configDir,
|
|
116
|
+
filesInstalled,
|
|
117
|
+
message: `MCP server(s) registrado(s): ${serverNames.join(', ')}`,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
async uninstall(manifest, projectRoot, toolTarget) {
|
|
121
|
+
const toolInfo = TOOL_TARGET_INFO[toolTarget];
|
|
122
|
+
const settingsPath = this.getInstallPath(manifest, projectRoot, toolTarget);
|
|
123
|
+
const mcpAssetsDir = join(projectRoot, toolInfo.configDir, 'mcp', manifest.name);
|
|
124
|
+
// Remove diretorio de assets do MCP
|
|
125
|
+
if (existsSync(mcpAssetsDir)) {
|
|
126
|
+
rmSync(mcpAssetsDir, { recursive: true, force: true });
|
|
127
|
+
}
|
|
128
|
+
// Remove entradas do mcpServers no arquivo de settings
|
|
129
|
+
if (existsSync(settingsPath)) {
|
|
130
|
+
try {
|
|
131
|
+
const settings = JSON.parse(readFileSync(settingsPath, 'utf-8'));
|
|
132
|
+
if (settings.mcpServers) {
|
|
133
|
+
// Le config original para saber quais servidores remover
|
|
134
|
+
// Usa o nome do manifesto como prefixo/identificador
|
|
135
|
+
const keysToRemove = Object.keys(settings.mcpServers).filter((key) => key === manifest.name || key.startsWith(`${manifest.name}-`));
|
|
136
|
+
for (const key of keysToRemove) {
|
|
137
|
+
delete settings.mcpServers[key];
|
|
138
|
+
}
|
|
139
|
+
// Remove mcpServers se ficou vazio
|
|
140
|
+
if (Object.keys(settings.mcpServers).length === 0) {
|
|
141
|
+
delete settings.mcpServers;
|
|
142
|
+
}
|
|
143
|
+
writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// Ignora erros ao manipular o arquivo de settings
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=mcp-installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-installer.js","sourceRoot":"","sources":["../../src/installers/mcp-installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ArtifactManifest, ToolTarget } from '@tarcisiojunior/shared';
|
|
2
|
+
import { BaseInstaller, type InstallResult } from './base-installer.js';
|
|
3
|
+
/** Instalador de skills (SKILL.md) */
|
|
4
|
+
export declare class SkillInstaller extends BaseInstaller {
|
|
5
|
+
readonly type = "skill";
|
|
6
|
+
getInstallPath(manifest: ArtifactManifest, projectRoot: string, toolTarget: ToolTarget): string;
|
|
7
|
+
install(manifest: ArtifactManifest, extractedPath: string, projectRoot: string, toolTarget: ToolTarget): Promise<InstallResult>;
|
|
8
|
+
uninstall(manifest: ArtifactManifest, projectRoot: string, toolTarget: ToolTarget): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=skill-installer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-installer.d.ts","sourceRoot":"","sources":["../../src/installers/skill-installer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAE3E,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAExE,sCAAsC;AACtC,qBAAa,cAAe,SAAQ,aAAa;IAC/C,QAAQ,CAAC,IAAI,WAAW;IAExB,cAAc,CAAC,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM;IAYzF,OAAO,CACX,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,aAAa,CAAC;IAsBnB,SAAS,CACb,QAAQ,EAAE,gBAAgB,EAC1B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,IAAI,CAAC;CAOjB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { cpSync, rmSync, existsSync, mkdirSync, readdirSync } from 'node:fs';
|
|
3
|
+
import { TOOL_TARGET_INFO } from '@tarcisiojunior/shared';
|
|
4
|
+
import { BaseInstaller } from './base-installer.js';
|
|
5
|
+
/** Instalador de skills (SKILL.md) */
|
|
6
|
+
export class SkillInstaller extends BaseInstaller {
|
|
7
|
+
type = 'skill';
|
|
8
|
+
getInstallPath(manifest, projectRoot, toolTarget) {
|
|
9
|
+
const toolInfo = TOOL_TARGET_INFO[toolTarget];
|
|
10
|
+
const installConfig = manifest.install[toolTarget];
|
|
11
|
+
if (installConfig?.target) {
|
|
12
|
+
return join(projectRoot, installConfig.target);
|
|
13
|
+
}
|
|
14
|
+
// Caminho padrão: .claude/skills/<name>/
|
|
15
|
+
return join(projectRoot, toolInfo.configDir, 'skills', manifest.name);
|
|
16
|
+
}
|
|
17
|
+
async install(manifest, extractedPath, projectRoot, toolTarget) {
|
|
18
|
+
const installPath = this.getInstallPath(manifest, projectRoot, toolTarget);
|
|
19
|
+
// Cria diretório de destino
|
|
20
|
+
mkdirSync(installPath, { recursive: true });
|
|
21
|
+
// Copia arquivos
|
|
22
|
+
cpSync(extractedPath, installPath, { recursive: true });
|
|
23
|
+
// Lista arquivos instalados
|
|
24
|
+
const filesInstalled = readdirSync(installPath, { recursive: true })
|
|
25
|
+
.map(String)
|
|
26
|
+
.filter((f) => !f.startsWith('.'));
|
|
27
|
+
return {
|
|
28
|
+
success: true,
|
|
29
|
+
installedPath: installPath,
|
|
30
|
+
filesInstalled,
|
|
31
|
+
message: `Skill instalada em ${installPath}`,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
async uninstall(manifest, projectRoot, toolTarget) {
|
|
35
|
+
const installPath = this.getInstallPath(manifest, projectRoot, toolTarget);
|
|
36
|
+
if (existsSync(installPath)) {
|
|
37
|
+
rmSync(installPath, { recursive: true, force: true });
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=skill-installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-installer.js","sourceRoot":"","sources":["../../src/installers/skill-installer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAsB,MAAM,qBAAqB,CAAC;AAExE,sCAAsC;AACtC,MAAM,OAAO,cAAe,SAAQ,aAAa;IACtC,IAAI,GAAG,OAAO,CAAC;IAExB,cAAc,CAAC,QAA0B,EAAE,WAAmB,EAAE,UAAsB;QACpF,MAAM,QAAQ,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAEnD,IAAI,aAAa,EAAE,MAAM,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;QAED,yCAAyC;QACzC,OAAO,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,OAAO,CACX,QAA0B,EAC1B,aAAqB,EACrB,WAAmB,EACnB,UAAsB;QAEtB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QAE3E,4BAA4B;QAC5B,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5C,iBAAiB;QACjB,MAAM,CAAC,aAAa,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAExD,4BAA4B;QAC5B,MAAM,cAAc,GAAG,WAAW,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;aACjE,GAAG,CAAC,MAAM,CAAC;aACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAErC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,WAAW;YAC1B,cAAc;YACd,OAAO,EAAE,sBAAsB,WAAW,EAAE;SAC7C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CACb,QAA0B,EAC1B,WAAmB,EACnB,UAAsB;QAEtB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QAE3E,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ArtifactManifest, ToolTarget } from '@tarcisiojunior/shared';
|
|
2
|
+
import { BaseInstaller, type InstallResult } from './base-installer.js';
|
|
3
|
+
/**
|
|
4
|
+
* Instalador de templates.
|
|
5
|
+
* Um template é um pacote que contém múltiplos artefatos (skills, MCPs, configs, hooks)
|
|
6
|
+
* organizados em subdiretórios. O template.json define a estrutura.
|
|
7
|
+
*/
|
|
8
|
+
export declare class TemplateInstaller extends BaseInstaller {
|
|
9
|
+
readonly type = "template";
|
|
10
|
+
/** Mapa de instaladores por tipo */
|
|
11
|
+
private getSubInstaller;
|
|
12
|
+
getInstallPath(manifest: ArtifactManifest, projectRoot: string, _toolTarget: ToolTarget): string;
|
|
13
|
+
install(manifest: ArtifactManifest, extractedPath: string, projectRoot: string, toolTarget: ToolTarget): Promise<InstallResult>;
|
|
14
|
+
uninstall(manifest: ArtifactManifest, projectRoot: string, toolTarget: ToolTarget): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=template-installer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-installer.d.ts","sourceRoot":"","sources":["../../src/installers/template-installer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AA0BxE;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,QAAQ,CAAC,IAAI,cAAc;IAE3B,oCAAoC;IACpC,OAAO,CAAC,eAAe;IAUvB,cAAc,CAAC,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,GAAG,MAAM;IAK1F,OAAO,CACX,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,aAAa,CAAC;IA4FnB,SAAS,CACb,QAAQ,EAAE,gBAAgB,EAC1B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,IAAI,CAAC;CAuBjB"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { readFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
3
|
+
import { BaseInstaller } from './base-installer.js';
|
|
4
|
+
import { SkillInstaller } from './skill-installer.js';
|
|
5
|
+
import { McpInstaller } from './mcp-installer.js';
|
|
6
|
+
import { ConfigInstaller } from './config-installer.js';
|
|
7
|
+
import { HookInstaller } from './hook-installer.js';
|
|
8
|
+
/**
|
|
9
|
+
* Instalador de templates.
|
|
10
|
+
* Um template é um pacote que contém múltiplos artefatos (skills, MCPs, configs, hooks)
|
|
11
|
+
* organizados em subdiretórios. O template.json define a estrutura.
|
|
12
|
+
*/
|
|
13
|
+
export class TemplateInstaller extends BaseInstaller {
|
|
14
|
+
type = 'template';
|
|
15
|
+
/** Mapa de instaladores por tipo */
|
|
16
|
+
getSubInstaller(type) {
|
|
17
|
+
const installers = {
|
|
18
|
+
skill: new SkillInstaller(),
|
|
19
|
+
mcp: new McpInstaller(),
|
|
20
|
+
config: new ConfigInstaller(),
|
|
21
|
+
hook: new HookInstaller(),
|
|
22
|
+
};
|
|
23
|
+
return installers[type] || new SkillInstaller();
|
|
24
|
+
}
|
|
25
|
+
getInstallPath(manifest, projectRoot, _toolTarget) {
|
|
26
|
+
// Templates não têm um único caminho — instalam em múltiplos locais
|
|
27
|
+
return projectRoot;
|
|
28
|
+
}
|
|
29
|
+
async install(manifest, extractedPath, projectRoot, toolTarget) {
|
|
30
|
+
const allInstalled = [];
|
|
31
|
+
const installPaths = [];
|
|
32
|
+
// Tentar ler template.json do pacote extraído
|
|
33
|
+
const templateConfigPath = join(extractedPath, 'template.json');
|
|
34
|
+
let templateConfig = null;
|
|
35
|
+
if (existsSync(templateConfigPath)) {
|
|
36
|
+
try {
|
|
37
|
+
const raw = readFileSync(templateConfigPath, 'utf-8');
|
|
38
|
+
templateConfig = JSON.parse(raw);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// Se falhar, tenta instalar cada subdiretório como skill
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (templateConfig?.entries && templateConfig.entries.length > 0) {
|
|
45
|
+
// Instalação guiada pelo template.json
|
|
46
|
+
for (const entry of templateConfig.entries) {
|
|
47
|
+
const entryPath = join(extractedPath, entry.path);
|
|
48
|
+
if (!existsSync(entryPath)) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
const subInstaller = this.getSubInstaller(entry.type);
|
|
52
|
+
const subManifest = {
|
|
53
|
+
...manifest,
|
|
54
|
+
name: entry.name,
|
|
55
|
+
type: entry.type,
|
|
56
|
+
description: entry.description || manifest.description,
|
|
57
|
+
};
|
|
58
|
+
const result = await subInstaller.install(subManifest, entryPath, projectRoot, toolTarget);
|
|
59
|
+
if (result.success) {
|
|
60
|
+
allInstalled.push(...result.filesInstalled);
|
|
61
|
+
installPaths.push(result.installedPath);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
// Fallback: tenta detectar artefatos por convenção de diretórios
|
|
67
|
+
const conventionDirs = {
|
|
68
|
+
skills: 'skill',
|
|
69
|
+
hooks: 'hook',
|
|
70
|
+
configs: 'config',
|
|
71
|
+
mcp: 'mcp',
|
|
72
|
+
};
|
|
73
|
+
for (const [dir, type] of Object.entries(conventionDirs)) {
|
|
74
|
+
const dirPath = join(extractedPath, dir);
|
|
75
|
+
if (!existsSync(dirPath))
|
|
76
|
+
continue;
|
|
77
|
+
const subInstaller = this.getSubInstaller(type);
|
|
78
|
+
const subManifest = {
|
|
79
|
+
...manifest,
|
|
80
|
+
type: type,
|
|
81
|
+
};
|
|
82
|
+
const result = await subInstaller.install(subManifest, dirPath, projectRoot, toolTarget);
|
|
83
|
+
if (result.success) {
|
|
84
|
+
allInstalled.push(...result.filesInstalled);
|
|
85
|
+
installPaths.push(result.installedPath);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Criar diretório base do projeto se não existir
|
|
90
|
+
mkdirSync(projectRoot, { recursive: true });
|
|
91
|
+
return {
|
|
92
|
+
success: allInstalled.length > 0,
|
|
93
|
+
installedPath: installPaths.join(', '),
|
|
94
|
+
filesInstalled: allInstalled,
|
|
95
|
+
message: templateConfig?.postInstallHints
|
|
96
|
+
? `Dicas pós-instalação:\n${templateConfig.postInstallHints.map(h => ` • ${h}`).join('\n')}`
|
|
97
|
+
: `Template instalado com ${allInstalled.length} arquivo(s)`,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
async uninstall(manifest, projectRoot, toolTarget) {
|
|
101
|
+
// Templates instalam múltiplos artefatos — desinstala cada um
|
|
102
|
+
const templateConfigPath = join(projectRoot, '.aitk-templates', manifest.name, 'template.json');
|
|
103
|
+
if (existsSync(templateConfigPath)) {
|
|
104
|
+
try {
|
|
105
|
+
const raw = readFileSync(templateConfigPath, 'utf-8');
|
|
106
|
+
const config = JSON.parse(raw);
|
|
107
|
+
for (const entry of config.entries) {
|
|
108
|
+
const subInstaller = this.getSubInstaller(entry.type);
|
|
109
|
+
const subManifest = {
|
|
110
|
+
...manifest,
|
|
111
|
+
name: entry.name,
|
|
112
|
+
type: entry.type,
|
|
113
|
+
};
|
|
114
|
+
await subInstaller.uninstall(subManifest, projectRoot, toolTarget);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
// Ignora erros de parsing
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=template-installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-installer.js","sourceRoot":"","sources":["../../src/installers/template-installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Desenha uma caixa com borda ao redor de linhas de texto.
|
|
3
|
+
* Suporta texto colorido (calcula largura sem codigos ANSI).
|
|
4
|
+
*/
|
|
5
|
+
declare function box(lines: string[], padding?: number): string;
|
|
6
|
+
/**
|
|
7
|
+
* Desenha uma linha divisoria horizontal.
|
|
8
|
+
* Utiliza o caractere tee para separar secoes dentro de uma caixa.
|
|
9
|
+
*/
|
|
10
|
+
declare function divider(width: number): string;
|
|
11
|
+
/** Retorna o texto colorido conforme o tipo do artefato */
|
|
12
|
+
declare function colorByType(type: string, text: string): string;
|
|
13
|
+
/** Badge com fundo colorido por tipo */
|
|
14
|
+
declare function typeBadge(type: string): string;
|
|
15
|
+
/** Badge de downloads */
|
|
16
|
+
declare function downloadsBadge(count: number): string;
|
|
17
|
+
/** Cria indicador de passo numerado: [1/4] */
|
|
18
|
+
declare function stepIndicator(current: number, total: number): string;
|
|
19
|
+
/** Linha de separacao simples */
|
|
20
|
+
declare function separator(): void;
|
|
21
|
+
interface TableColumn {
|
|
22
|
+
header: string;
|
|
23
|
+
width: number;
|
|
24
|
+
align?: 'left' | 'right' | 'center';
|
|
25
|
+
}
|
|
26
|
+
interface TableOptions {
|
|
27
|
+
columns: TableColumn[];
|
|
28
|
+
rows: string[][];
|
|
29
|
+
}
|
|
30
|
+
/** Renderiza uma tabela formatada com box drawing */
|
|
31
|
+
declare function table({ columns, rows }: TableOptions): string;
|
|
32
|
+
/** Renderiza uma arvore de arquivos no estilo tree */
|
|
33
|
+
declare function fileTree(files: string[], title?: string): string;
|
|
34
|
+
/** Utilitarios de log formatado para o CLI */
|
|
35
|
+
export declare const logger: {
|
|
36
|
+
info: (message: string) => void;
|
|
37
|
+
success: (message: string) => void;
|
|
38
|
+
warn: (message: string) => void;
|
|
39
|
+
error: (message: string) => void;
|
|
40
|
+
debug: (message: string) => void;
|
|
41
|
+
print: (message: string) => void;
|
|
42
|
+
blank: () => void;
|
|
43
|
+
banner: () => void;
|
|
44
|
+
box: typeof box;
|
|
45
|
+
divider: typeof divider;
|
|
46
|
+
table: typeof table;
|
|
47
|
+
separator: typeof separator;
|
|
48
|
+
fileTree: typeof fileTree;
|
|
49
|
+
stepIndicator: typeof stepIndicator;
|
|
50
|
+
colorByType: typeof colorByType;
|
|
51
|
+
typeBadge: typeof typeBadge;
|
|
52
|
+
downloadsBadge: typeof downloadsBadge;
|
|
53
|
+
PREFIX: string;
|
|
54
|
+
BOX: {
|
|
55
|
+
readonly topLeft: "╭";
|
|
56
|
+
readonly topRight: "╮";
|
|
57
|
+
readonly bottomLeft: "╰";
|
|
58
|
+
readonly bottomRight: "╯";
|
|
59
|
+
readonly horizontal: "─";
|
|
60
|
+
readonly vertical: "│";
|
|
61
|
+
readonly teeLeft: "├";
|
|
62
|
+
readonly teeRight: "┤";
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
export {};
|
|
66
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AA2CA;;;GAGG;AACH,iBAAS,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,SAAI,GAAG,MAAM,CAcjD;AAED;;;GAGG;AACH,iBAAS,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtC;AAWD,2DAA2D;AAC3D,iBAAS,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,wCAAwC;AACxC,iBAAS,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASvC;AAED,yBAAyB;AACzB,iBAAS,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ7C;AAID,8CAA8C;AAC9C,iBAAS,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,iCAAiC;AACjC,iBAAS,SAAS,IAAI,IAAI,CAEzB;AAID,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;CACrC;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;CAClB;AAED,qDAAqD;AACrD,iBAAS,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,YAAY,GAAG,MAAM,CAmDtD;AAID,sDAAsD;AACtD,iBAAS,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAczD;AAID,8CAA8C;AAC9C,eAAO,MAAM,MAAM;oBAED,MAAM;uBAIH,MAAM;oBAIT,MAAM;qBAIL,MAAM;qBAIN,MAAM;qBAON,MAAM;;;;;;;;;;;;;;;;;;;;;;;CA8BxB,CAAC"}
|