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,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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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 @@
|
|
|
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
|