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 @@
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"}