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,22 @@
1
+ /**
2
+ * Gerenciador do lock file (aitk-lock.json).
3
+ * Garante instalações determinísticas com versões resolvidas e checksums.
4
+ */
5
+ import type { LockFile, LockEntry } from '@tarcisiojunior/shared';
6
+ /** Lê o lock file do projeto */
7
+ export declare function readLockFile(dir?: string): LockFile | null;
8
+ /** Salva o lock file */
9
+ export declare function writeLockFile(lockFile: LockFile, dir?: string): void;
10
+ /** Cria um lock file vazio */
11
+ export declare function createLockFile(): LockFile;
12
+ /** Adiciona ou atualiza uma entrada no lock file */
13
+ export declare function addLockEntry(lockFile: LockFile, artifactSlug: string, entry: LockEntry): LockFile;
14
+ /** Remove uma entrada do lock file */
15
+ export declare function removeLockEntry(lockFile: LockFile, artifactSlug: string): LockFile;
16
+ /** Cria uma entrada de lock a partir dos dados de download */
17
+ export declare function createLockEntry(resolvedVersion: string, checksum: string, dependencies?: Record<string, string>): LockEntry;
18
+ /** Verifica se a versão no lock file é a mesma que seria resolvida */
19
+ export declare function isLocked(lockFile: LockFile, artifactSlug: string, version: string): boolean;
20
+ /** Obtém a versão resolvida do lock file */
21
+ export declare function getLockedVersion(lockFile: LockFile, artifactSlug: string): string | null;
22
+ //# sourceMappingURL=lockfile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lockfile.d.ts","sourceRoot":"","sources":["../../src/core/lockfile.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAKlE,gCAAgC;AAChC,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAa1D;AAED,wBAAwB;AACxB,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAGpE;AAED,8BAA8B;AAC9B,wBAAgB,cAAc,IAAI,QAAQ,CAKzC;AAED,oDAAoD;AACpD,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,SAAS,GACf,QAAQ,CAQV;AAED,sCAAsC;AACtC,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,MAAM,GACnB,QAAQ,CAOV;AAED,8DAA8D;AAC9D,wBAAgB,eAAe,CAC7B,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,EAChB,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACxC,SAAS,CAMX;AAED,sEAAsE;AACtE,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAMT;AAED,4CAA4C;AAC5C,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,MAAM,GACnB,MAAM,GAAG,IAAI,CAGf"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Gerenciador do lock file (aitk-lock.json).
3
+ * Garante instalações determinísticas com versões resolvidas e checksums.
4
+ */
5
+ import { readFileSync, writeFileSync, existsSync } from 'node:fs';
6
+ import { join } from 'node:path';
7
+ const LOCK_FILE = 'aitk-lock.json';
8
+ const LOCKFILE_VERSION = 1;
9
+ /** Lê o lock file do projeto */
10
+ export function readLockFile(dir) {
11
+ const filePath = join(dir || process.cwd(), LOCK_FILE);
12
+ if (!existsSync(filePath)) {
13
+ return null;
14
+ }
15
+ try {
16
+ const content = readFileSync(filePath, 'utf-8');
17
+ return JSON.parse(content);
18
+ }
19
+ catch {
20
+ return null;
21
+ }
22
+ }
23
+ /** Salva o lock file */
24
+ export function writeLockFile(lockFile, dir) {
25
+ const filePath = join(dir || process.cwd(), LOCK_FILE);
26
+ writeFileSync(filePath, JSON.stringify(lockFile, null, 2) + '\n');
27
+ }
28
+ /** Cria um lock file vazio */
29
+ export function createLockFile() {
30
+ return {
31
+ lockfileVersion: LOCKFILE_VERSION,
32
+ artifacts: {},
33
+ };
34
+ }
35
+ /** Adiciona ou atualiza uma entrada no lock file */
36
+ export function addLockEntry(lockFile, artifactSlug, entry) {
37
+ return {
38
+ ...lockFile,
39
+ artifacts: {
40
+ ...lockFile.artifacts,
41
+ [artifactSlug]: entry,
42
+ },
43
+ };
44
+ }
45
+ /** Remove uma entrada do lock file */
46
+ export function removeLockEntry(lockFile, artifactSlug) {
47
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
48
+ const { [artifactSlug]: _, ...remaining } = lockFile.artifacts;
49
+ return {
50
+ ...lockFile,
51
+ artifacts: remaining,
52
+ };
53
+ }
54
+ /** Cria uma entrada de lock a partir dos dados de download */
55
+ export function createLockEntry(resolvedVersion, checksum, dependencies = {}) {
56
+ return {
57
+ resolved: resolvedVersion,
58
+ integrity: `sha256-${checksum}`,
59
+ dependencies,
60
+ };
61
+ }
62
+ /** Verifica se a versão no lock file é a mesma que seria resolvida */
63
+ export function isLocked(lockFile, artifactSlug, version) {
64
+ const entry = lockFile.artifacts[artifactSlug];
65
+ if (!entry) {
66
+ return false;
67
+ }
68
+ return entry.resolved === version;
69
+ }
70
+ /** Obtém a versão resolvida do lock file */
71
+ export function getLockedVersion(lockFile, artifactSlug) {
72
+ const entry = lockFile.artifacts[artifactSlug];
73
+ return entry?.resolved || null;
74
+ }
75
+ //# sourceMappingURL=lockfile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lockfile.js","sourceRoot":"","sources":["../../src/core/lockfile.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,SAAS,GAAG,gBAAgB,CAAC;AACnC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B,gCAAgC;AAChC,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;IAEvD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAa,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,wBAAwB;AACxB,MAAM,UAAU,aAAa,CAAC,QAAkB,EAAE,GAAY;IAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;IACvD,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACpE,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,cAAc;IAC5B,OAAO;QACL,eAAe,EAAE,gBAAgB;QACjC,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,YAAY,CAC1B,QAAkB,EAClB,YAAoB,EACpB,KAAgB;IAEhB,OAAO;QACL,GAAG,QAAQ;QACX,SAAS,EAAE;YACT,GAAG,QAAQ,CAAC,SAAS;YACrB,CAAC,YAAY,CAAC,EAAE,KAAK;SACtB;KACF,CAAC;AACJ,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,eAAe,CAC7B,QAAkB,EAClB,YAAoB;IAEpB,6DAA6D;IAC7D,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,GAAG,SAAS,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC;IAC/D,OAAO;QACL,GAAG,QAAQ;QACX,SAAS,EAAE,SAAS;KACrB,CAAC;AACJ,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,eAAe,CAC7B,eAAuB,EACvB,QAAgB,EAChB,eAAuC,EAAE;IAEzC,OAAO;QACL,QAAQ,EAAE,eAAe;QACzB,SAAS,EAAE,UAAU,QAAQ,EAAE;QAC/B,YAAY;KACb,CAAC;AACJ,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,QAAQ,CACtB,QAAkB,EAClB,YAAoB,EACpB,OAAe;IAEf,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC;AACpC,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,gBAAgB,CAC9B,QAAkB,EAClB,YAAoB;IAEpB,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAC/C,OAAO,KAAK,EAAE,QAAQ,IAAI,IAAI,CAAC;AACjC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { ProjectManifest } from '@tarcisiojunior/shared';
2
+ /** Lê o manifesto do projeto (aitk.json) */
3
+ export declare function readManifest(dir?: string): ProjectManifest | null;
4
+ /** Salva o manifesto do projeto */
5
+ export declare function writeManifest(manifest: ProjectManifest, dir?: string): void;
6
+ /** Cria um manifesto padrão */
7
+ export declare function createDefaultManifest(tool?: string): ProjectManifest;
8
+ /** Adiciona um artefato ao manifesto */
9
+ export declare function addArtifactToManifest(manifest: ProjectManifest, artifactSlug: string, versionRange: string, isDev?: boolean): ProjectManifest;
10
+ /** Remove um artefato do manifesto */
11
+ export declare function removeArtifactFromManifest(manifest: ProjectManifest, artifactSlug: string): ProjectManifest;
12
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/core/manifest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAK9D,4CAA4C;AAC5C,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAcjE;AAED,mCAAmC;AACnC,wBAAgB,aAAa,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAG3E;AAED,+BAA+B;AAC/B,wBAAgB,qBAAqB,CAAC,IAAI,GAAE,MAAsB,GAAG,eAAe,CAOnF;AAED,wCAAwC;AACxC,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,eAAe,EACzB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,KAAK,GAAE,OAAe,GACrB,eAAe,CASjB;AAED,sCAAsC;AACtC,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,eAAe,EACzB,YAAY,EAAE,MAAM,GACnB,eAAe,CAUjB"}
@@ -0,0 +1,57 @@
1
+ import { readFileSync, writeFileSync, existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { projectManifestSchema } from '@tarcisiojunior/shared';
4
+ const MANIFEST_FILE = 'aitk.json';
5
+ /** Lê o manifesto do projeto (aitk.json) */
6
+ export function readManifest(dir) {
7
+ const filePath = join(dir || process.cwd(), MANIFEST_FILE);
8
+ if (!existsSync(filePath)) {
9
+ return null;
10
+ }
11
+ try {
12
+ const content = readFileSync(filePath, 'utf-8');
13
+ const data = JSON.parse(content);
14
+ return projectManifestSchema.parse(data);
15
+ }
16
+ catch {
17
+ return null;
18
+ }
19
+ }
20
+ /** Salva o manifesto do projeto */
21
+ export function writeManifest(manifest, dir) {
22
+ const filePath = join(dir || process.cwd(), MANIFEST_FILE);
23
+ writeFileSync(filePath, JSON.stringify(manifest, null, 2) + '\n');
24
+ }
25
+ /** Cria um manifesto padrão */
26
+ export function createDefaultManifest(tool = 'claude-code') {
27
+ return {
28
+ version: '1.0.0',
29
+ tool: tool,
30
+ artifacts: {},
31
+ devArtifacts: {},
32
+ };
33
+ }
34
+ /** Adiciona um artefato ao manifesto */
35
+ export function addArtifactToManifest(manifest, artifactSlug, versionRange, isDev = false) {
36
+ const target = isDev ? 'devArtifacts' : 'artifacts';
37
+ return {
38
+ ...manifest,
39
+ [target]: {
40
+ ...(manifest[target] || {}),
41
+ [artifactSlug]: versionRange,
42
+ },
43
+ };
44
+ }
45
+ /** Remove um artefato do manifesto */
46
+ export function removeArtifactFromManifest(manifest, artifactSlug) {
47
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
48
+ const { [artifactSlug]: _removed, ...artifacts } = manifest.artifacts;
49
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
50
+ const { [artifactSlug]: _removedDev, ...devArtifacts } = manifest.devArtifacts || {};
51
+ return {
52
+ ...manifest,
53
+ artifacts,
54
+ devArtifacts,
55
+ };
56
+ }
57
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/core/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,MAAM,aAAa,GAAG,WAAW,CAAC;AAElC,4CAA4C;AAC5C,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,CAAC;IAE3D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjC,OAAO,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,aAAa,CAAC,QAAyB,EAAE,GAAY;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,CAAC;IAC3D,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACpE,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,qBAAqB,CAAC,OAAe,aAAa;IAChE,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,IAA+B;QACrC,SAAS,EAAE,EAAE;QACb,YAAY,EAAE,EAAE;KACjB,CAAC;AACJ,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,qBAAqB,CACnC,QAAyB,EACzB,YAAoB,EACpB,YAAoB,EACpB,QAAiB,KAAK;IAEtB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC;IACpD,OAAO;QACL,GAAG,QAAQ;QACX,CAAC,MAAM,CAAC,EAAE;YACR,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC3B,CAAC,YAAY,CAAC,EAAE,YAAY;SAC7B;KACF,CAAC;AACJ,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,0BAA0B,CACxC,QAAyB,EACzB,YAAoB;IAEpB,6DAA6D;IAC7D,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC;IACtE,6DAA6D;IAC7D,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,GAAG,YAAY,EAAE,GAAG,QAAQ,CAAC,YAAY,IAAI,EAAE,CAAC;IACrF,OAAO;QACL,GAAG,QAAQ;QACX,SAAS;QACT,YAAY;KACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Resolvedor de versões com suporte a semver ranges.
3
+ * Resolve a melhor versão disponível que satisfaz um range semver.
4
+ */
5
+ import type { ArtifactVersion } from '@tarcisiojunior/shared';
6
+ /** Resultado da resolução de versão */
7
+ export interface ResolvedVersion {
8
+ /** Versão resolvida (ex: "1.2.3") */
9
+ version: string;
10
+ /** Range original solicitado (ex: "^1.0.0") */
11
+ requestedRange: string;
12
+ /** Se é a latest version */
13
+ isLatest: boolean;
14
+ }
15
+ /**
16
+ * Resolve a melhor versão que satisfaz o range semver.
17
+ * Segue as mesmas regras do npm:
18
+ * - "1.0.0" → exata
19
+ * - "^1.0.0" → compatível (>=1.0.0 <2.0.0)
20
+ * - "~1.0.0" → patch (>=1.0.0 <1.1.0)
21
+ * - ">=1.0.0" → maior ou igual
22
+ * - "*" ou "latest" → última versão
23
+ */
24
+ export declare function resolveVersion(versions: ArtifactVersion[], range: string): ResolvedVersion | null;
25
+ /**
26
+ * Verifica se uma versão satisfaz um range semver.
27
+ */
28
+ export declare function satisfiesRange(version: string, range: string): boolean;
29
+ /**
30
+ * Verifica se há uma versão mais recente disponível.
31
+ * Retorna null se já está na última versão, ou a nova versão disponível.
32
+ */
33
+ export declare function checkUpdate(currentVersion: string, versions: ArtifactVersion[], range: string): string | null;
34
+ /**
35
+ * Converte uma versão exata para um range compatível (^).
36
+ * Ex: "1.2.3" → "^1.2.3"
37
+ */
38
+ export declare function toCompatibleRange(version: string): string;
39
+ /**
40
+ * Valida se uma string é uma versão semver válida.
41
+ */
42
+ export declare function isValidVersion(version: string): boolean;
43
+ /**
44
+ * Valida se uma string é um range semver válido.
45
+ */
46
+ export declare function isValidRange(range: string): boolean;
47
+ /**
48
+ * Compara duas versões.
49
+ * Retorna: -1 se a < b, 0 se a === b, 1 se a > b
50
+ */
51
+ export declare function compareVersions(a: string, b: string): -1 | 0 | 1;
52
+ //# sourceMappingURL=resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/core/resolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,uCAAuC;AACvC,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,4BAA4B;IAC5B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,eAAe,EAAE,EAC3B,KAAK,EAAE,MAAM,GACZ,eAAe,GAAG,IAAI,CAwCxB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAMtE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,eAAe,EAAE,EAC3B,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,IAAI,CAaf;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAUnD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAEhE"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Resolvedor de versões com suporte a semver ranges.
3
+ * Resolve a melhor versão disponível que satisfaz um range semver.
4
+ */
5
+ import * as semver from 'semver';
6
+ /**
7
+ * Resolve a melhor versão que satisfaz o range semver.
8
+ * Segue as mesmas regras do npm:
9
+ * - "1.0.0" → exata
10
+ * - "^1.0.0" → compatível (>=1.0.0 <2.0.0)
11
+ * - "~1.0.0" → patch (>=1.0.0 <1.1.0)
12
+ * - ">=1.0.0" → maior ou igual
13
+ * - "*" ou "latest" → última versão
14
+ */
15
+ export function resolveVersion(versions, range) {
16
+ // Filtra versões yanked (retiradas)
17
+ const availableVersions = versions
18
+ .filter((v) => !v.isYanked)
19
+ .map((v) => v.version)
20
+ .filter((v) => semver.valid(v));
21
+ if (availableVersions.length === 0) {
22
+ return null;
23
+ }
24
+ // Ordena em ordem decrescente (mais recente primeiro)
25
+ const sorted = availableVersions.sort((a, b) => semver.rcompare(a, b));
26
+ // Para "latest" e "*", usa apenas versões estáveis (sem prerelease)
27
+ if (range === 'latest' || range === '*') {
28
+ const stableVersions = sorted.filter((v) => !semver.prerelease(v));
29
+ const latestStable = stableVersions.length > 0 ? stableVersions[0] : sorted[0];
30
+ return {
31
+ version: latestStable,
32
+ requestedRange: range,
33
+ isLatest: true,
34
+ };
35
+ }
36
+ // Determina a latest version estável para comparação
37
+ const latestStable = sorted.find((v) => !semver.prerelease(v)) || sorted[0];
38
+ // Tenta resolver como range semver
39
+ const resolved = semver.maxSatisfying(sorted, range);
40
+ if (!resolved) {
41
+ return null;
42
+ }
43
+ return {
44
+ version: resolved,
45
+ requestedRange: range,
46
+ isLatest: resolved === latestStable,
47
+ };
48
+ }
49
+ /**
50
+ * Verifica se uma versão satisfaz um range semver.
51
+ */
52
+ export function satisfiesRange(version, range) {
53
+ if (range === 'latest' || range === '*') {
54
+ return true;
55
+ }
56
+ return semver.satisfies(version, range);
57
+ }
58
+ /**
59
+ * Verifica se há uma versão mais recente disponível.
60
+ * Retorna null se já está na última versão, ou a nova versão disponível.
61
+ */
62
+ export function checkUpdate(currentVersion, versions, range) {
63
+ const resolved = resolveVersion(versions, range);
64
+ if (!resolved) {
65
+ return null;
66
+ }
67
+ // Verifica se a versão resolvida é mais recente que a atual
68
+ if (semver.gt(resolved.version, currentVersion)) {
69
+ return resolved.version;
70
+ }
71
+ return null;
72
+ }
73
+ /**
74
+ * Converte uma versão exata para um range compatível (^).
75
+ * Ex: "1.2.3" → "^1.2.3"
76
+ */
77
+ export function toCompatibleRange(version) {
78
+ if (!semver.valid(version)) {
79
+ return version;
80
+ }
81
+ return `^${version}`;
82
+ }
83
+ /**
84
+ * Valida se uma string é uma versão semver válida.
85
+ */
86
+ export function isValidVersion(version) {
87
+ return semver.valid(version) !== null;
88
+ }
89
+ /**
90
+ * Valida se uma string é um range semver válido.
91
+ */
92
+ export function isValidRange(range) {
93
+ if (!range || range.trim() === '') {
94
+ return false;
95
+ }
96
+ if (range === 'latest' || range === '*') {
97
+ return true;
98
+ }
99
+ return semver.validRange(range) !== null;
100
+ }
101
+ /**
102
+ * Compara duas versões.
103
+ * Retorna: -1 se a < b, 0 se a === b, 1 se a > b
104
+ */
105
+ export function compareVersions(a, b) {
106
+ return semver.compare(a, b);
107
+ }
108
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/core/resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export { ApiClient, createApiClient } from './core/api-client.js';
2
+ export { getConfig, saveConfig, type CliConfig } from './core/config.js';
3
+ export { getAuth, saveAuth, clearAuth, isAuthenticated, requireAuth } from './core/auth.js';
4
+ export { readManifest, writeManifest, createDefaultManifest, addArtifactToManifest, removeArtifactFromManifest, } from './core/manifest.js';
5
+ export { logger } from './utils/logger.js';
6
+ export { BaseInstaller, type InstallResult } from './installers/base-installer.js';
7
+ export { SkillInstaller } from './installers/skill-installer.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EACL,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export { ApiClient, createApiClient } from './core/api-client.js';
2
+ export { getConfig, saveConfig } from './core/config.js';
3
+ export { getAuth, saveAuth, clearAuth, isAuthenticated, requireAuth } from './core/auth.js';
4
+ export { readManifest, writeManifest, createDefaultManifest, addArtifactToManifest, removeArtifactFromManifest, } from './core/manifest.js';
5
+ export { logger } from './utils/logger.js';
6
+ export { BaseInstaller } from './installers/base-installer.js';
7
+ export { SkillInstaller } from './installers/skill-installer.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAkB,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EACL,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAsB,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { ArtifactManifest, ToolTarget } from '@tarcisiojunior/shared';
2
+ /** Resultado de uma instalação */
3
+ export interface InstallResult {
4
+ success: boolean;
5
+ installedPath: string;
6
+ filesInstalled: string[];
7
+ message?: string;
8
+ }
9
+ /** Classe base para instaladores de artefatos */
10
+ export declare abstract class BaseInstaller {
11
+ abstract readonly type: string;
12
+ /** Instala o artefato no projeto */
13
+ abstract install(manifest: ArtifactManifest, extractedPath: string, projectRoot: string, toolTarget: ToolTarget): Promise<InstallResult>;
14
+ /** Remove o artefato do projeto */
15
+ abstract uninstall(manifest: ArtifactManifest, projectRoot: string, toolTarget: ToolTarget): Promise<void>;
16
+ /** Retorna o caminho de instalação */
17
+ abstract getInstallPath(manifest: ArtifactManifest, projectRoot: string, toolTarget: ToolTarget): string;
18
+ }
19
+ //# sourceMappingURL=base-installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-installer.d.ts","sourceRoot":"","sources":["../../src/installers/base-installer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAE3E,kCAAkC;AAClC,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,iDAAiD;AACjD,8BAAsB,aAAa;IACjC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAE/B,oCAAoC;IACpC,QAAQ,CAAC,OAAO,CACd,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,aAAa,CAAC;IAEzB,mCAAmC;IACnC,QAAQ,CAAC,SAAS,CAChB,QAAQ,EAAE,gBAAgB,EAC1B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,IAAI,CAAC;IAEhB,sCAAsC;IACtC,QAAQ,CAAC,cAAc,CACrB,QAAQ,EAAE,gBAAgB,EAC1B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,GACrB,MAAM;CACV"}
@@ -0,0 +1,4 @@
1
+ /** Classe base para instaladores de artefatos */
2
+ export class BaseInstaller {
3
+ }
4
+ //# sourceMappingURL=base-installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-installer.js","sourceRoot":"","sources":["../../src/installers/base-installer.ts"],"names":[],"mappings":"AAUA,iDAAiD;AACjD,MAAM,OAAgB,aAAa;CAwBlC"}
@@ -0,0 +1,10 @@
1
+ import type { ArtifactManifest, ToolTarget } from '@tarcisiojunior/shared';
2
+ import { BaseInstaller, type InstallResult } from './base-installer.js';
3
+ /** Instalador de arquivos de configuracao */
4
+ export declare class ConfigInstaller extends BaseInstaller {
5
+ readonly type = "config";
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=config-installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-installer.d.ts","sourceRoot":"","sources":["../../src/installers/config-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;AAqCxE,6CAA6C;AAC7C,qBAAa,eAAgB,SAAQ,aAAa;IAChD,QAAQ,CAAC,IAAI,YAAY;IAEzB,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;IAoDnB,SAAS,CACb,QAAQ,EAAE,gBAAgB,EAC1B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,IAAI,CAAC;CAsBjB"}
@@ -0,0 +1,108 @@
1
+ import { join, basename } 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
+ /** Verifica se um arquivo e JSON pelo conteudo */
6
+ function isJsonFile(filePath) {
7
+ return filePath.endsWith('.json');
8
+ }
9
+ /** Faz merge profundo de dois objetos JSON */
10
+ function deepMerge(target, source) {
11
+ const result = { ...target };
12
+ for (const key of Object.keys(source)) {
13
+ const targetValue = result[key];
14
+ const sourceValue = source[key];
15
+ // Se ambos sao objetos (nao arrays), faz merge recursivo
16
+ if (targetValue &&
17
+ sourceValue &&
18
+ typeof targetValue === 'object' &&
19
+ typeof sourceValue === 'object' &&
20
+ !Array.isArray(targetValue) &&
21
+ !Array.isArray(sourceValue)) {
22
+ result[key] = deepMerge(targetValue, sourceValue);
23
+ }
24
+ else {
25
+ // Caso contrario, sobrescreve com o valor da fonte
26
+ result[key] = sourceValue;
27
+ }
28
+ }
29
+ return result;
30
+ }
31
+ /** Instalador de arquivos de configuracao */
32
+ export class ConfigInstaller extends BaseInstaller {
33
+ type = 'config';
34
+ getInstallPath(manifest, projectRoot, toolTarget) {
35
+ const toolInfo = TOOL_TARGET_INFO[toolTarget];
36
+ const installConfig = manifest.install[toolTarget];
37
+ if (installConfig?.target) {
38
+ return join(projectRoot, installConfig.target);
39
+ }
40
+ // Caminho padrao: <configDir>/ (diretorio raiz de configuracao da ferramenta)
41
+ return join(projectRoot, toolInfo.configDir);
42
+ }
43
+ async install(manifest, extractedPath, projectRoot, toolTarget) {
44
+ const installPath = this.getInstallPath(manifest, projectRoot, toolTarget);
45
+ // Cria diretorio de destino
46
+ mkdirSync(installPath, { recursive: true });
47
+ const filesInstalled = [];
48
+ const extractedFiles = readdirSync(extractedPath, { recursive: true }).map(String);
49
+ for (const file of extractedFiles) {
50
+ const sourcePath = join(extractedPath, file);
51
+ const destPath = join(installPath, file);
52
+ // Pula diretorios (serao criados automaticamente)
53
+ if (file.endsWith('/')) {
54
+ continue;
55
+ }
56
+ // Para arquivos JSON, faz merge com o arquivo existente
57
+ if (isJsonFile(file) && existsSync(destPath)) {
58
+ try {
59
+ const existingContent = JSON.parse(readFileSync(destPath, 'utf-8'));
60
+ const newContent = JSON.parse(readFileSync(sourcePath, 'utf-8'));
61
+ // Faz merge profundo para preservar configuracoes existentes
62
+ const merged = deepMerge(existingContent, newContent);
63
+ writeFileSync(destPath, JSON.stringify(merged, null, 2) + '\n', 'utf-8');
64
+ filesInstalled.push(file);
65
+ continue;
66
+ }
67
+ catch {
68
+ // Se falhar o parse, copia normalmente (sobrescreve)
69
+ }
70
+ }
71
+ // Para arquivos nao-JSON ou JSON sem conflito, copia diretamente
72
+ const destDir = join(installPath, file.substring(0, file.lastIndexOf('/')));
73
+ if (destDir !== installPath) {
74
+ mkdirSync(destDir, { recursive: true });
75
+ }
76
+ cpSync(sourcePath, destPath);
77
+ filesInstalled.push(file);
78
+ }
79
+ return {
80
+ success: true,
81
+ installedPath: installPath,
82
+ filesInstalled,
83
+ message: `Configuracao instalada em ${installPath}`,
84
+ };
85
+ }
86
+ async uninstall(manifest, projectRoot, toolTarget) {
87
+ const installPath = this.getInstallPath(manifest, projectRoot, toolTarget);
88
+ // Para configs, removemos apenas os arquivos que foram instalados
89
+ // Nao removemos o diretorio inteiro pois pode conter outras configuracoes
90
+ // Se o manifesto especifica arquivos, remove apenas esses
91
+ if (manifest.files && manifest.files.length > 0) {
92
+ for (const file of manifest.files) {
93
+ const filePath = join(installPath, basename(file));
94
+ if (existsSync(filePath)) {
95
+ rmSync(filePath, { force: true });
96
+ }
97
+ }
98
+ }
99
+ else {
100
+ // Sem lista de arquivos, tenta remover um subdiretorio nomeado
101
+ const namedDir = join(installPath, manifest.name);
102
+ if (existsSync(namedDir)) {
103
+ rmSync(namedDir, { recursive: true, force: true });
104
+ }
105
+ }
106
+ }
107
+ }
108
+ //# sourceMappingURL=config-installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-installer.js","sourceRoot":"","sources":["../../src/installers/config-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 hooks (scripts de automacao) */
4
+ export declare class HookInstaller extends BaseInstaller {
5
+ readonly type = "hook";
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=hook-installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-installer.d.ts","sourceRoot":"","sources":["../../src/installers/hook-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,iDAAiD;AACjD,qBAAa,aAAc,SAAQ,aAAa;IAC9C,QAAQ,CAAC,IAAI,UAAU;IAEvB,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 hooks (scripts de automacao) */
6
+ export class HookInstaller extends BaseInstaller {
7
+ type = 'hook';
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 padrao: <configDir>/hooks/<name>/
15
+ return join(projectRoot, toolInfo.configDir, 'hooks', manifest.name);
16
+ }
17
+ async install(manifest, extractedPath, projectRoot, toolTarget) {
18
+ const installPath = this.getInstallPath(manifest, projectRoot, toolTarget);
19
+ // Cria diretorio de destino
20
+ mkdirSync(installPath, { recursive: true });
21
+ // Copia arquivos do hook
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: `Hook instalado 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=hook-installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-installer.js","sourceRoot":"","sources":["../../src/installers/hook-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,iDAAiD;AACjD,MAAM,OAAO,aAAc,SAAQ,aAAa;IACrC,IAAI,GAAG,MAAM,CAAC;IAEvB,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,4CAA4C;QAC5C,OAAO,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvE,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,yBAAyB;QACzB,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,qBAAqB,WAAW,EAAE;SAC5C,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,14 @@
1
+ import type { ArtifactManifest, ToolTarget } from '@tarcisiojunior/shared';
2
+ import { BaseInstaller, type InstallResult } from './base-installer.js';
3
+ /** Instalador de servidores MCP */
4
+ export declare class McpInstaller extends BaseInstaller {
5
+ readonly type = "mcp";
6
+ getInstallPath(manifest: ArtifactManifest, projectRoot: string, toolTarget: ToolTarget): string;
7
+ /** Le a configuracao MCP dos arquivos extraidos */
8
+ private readMcpConfig;
9
+ /** Le o arquivo de configuracoes existente da ferramenta */
10
+ private readToolSettings;
11
+ install(manifest: ArtifactManifest, extractedPath: string, projectRoot: string, toolTarget: ToolTarget): Promise<InstallResult>;
12
+ uninstall(manifest: ArtifactManifest, projectRoot: string, toolTarget: ToolTarget): Promise<void>;
13
+ }
14
+ //# sourceMappingURL=mcp-installer.d.ts.map