@tankpkg/cli 0.4.2
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/LICENSE +21 -0
- package/dist/bin/tank.d.ts +2 -0
- package/dist/bin/tank.js +279 -0
- package/dist/bin/tank.js.map +1 -0
- package/dist/commands/audit.d.ts +5 -0
- package/dist/commands/audit.js +185 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/doctor.d.ts +5 -0
- package/dist/commands/doctor.js +164 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/info.d.ts +5 -0
- package/dist/commands/info.js +102 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.js +92 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/install.d.ts +39 -0
- package/dist/commands/install.js +550 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/link.d.ts +5 -0
- package/dist/commands/link.js +79 -0
- package/dist/commands/link.js.map +1 -0
- package/dist/commands/login.d.ts +14 -0
- package/dist/commands/login.js +87 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +9 -0
- package/dist/commands/logout.js +20 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/permissions.d.ts +4 -0
- package/dist/commands/permissions.js +199 -0
- package/dist/commands/permissions.js.map +1 -0
- package/dist/commands/publish.d.ts +25 -0
- package/dist/commands/publish.js +166 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/remove.d.ts +7 -0
- package/dist/commands/remove.js +163 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/search.d.ts +5 -0
- package/dist/commands/search.js +67 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/unlink.d.ts +5 -0
- package/dist/commands/unlink.js +42 -0
- package/dist/commands/unlink.js.map +1 -0
- package/dist/commands/update.d.ts +8 -0
- package/dist/commands/update.js +337 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/upgrade.d.ts +6 -0
- package/dist/commands/upgrade.js +100 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/commands/verify.d.ts +22 -0
- package/dist/commands/verify.js +63 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/commands/whoami.d.ts +4 -0
- package/dist/commands/whoami.js +57 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/agents.d.ts +19 -0
- package/dist/lib/agents.js +84 -0
- package/dist/lib/agents.js.map +1 -0
- package/dist/lib/api-client.d.ts +14 -0
- package/dist/lib/api-client.js +63 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/config.d.ts +29 -0
- package/dist/lib/config.js +66 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/debug-logger.d.ts +9 -0
- package/dist/lib/debug-logger.js +77 -0
- package/dist/lib/debug-logger.js.map +1 -0
- package/dist/lib/frontmatter.d.ts +11 -0
- package/dist/lib/frontmatter.js +89 -0
- package/dist/lib/frontmatter.js.map +1 -0
- package/dist/lib/linker.d.ts +45 -0
- package/dist/lib/linker.js +137 -0
- package/dist/lib/linker.js.map +1 -0
- package/dist/lib/links.d.ts +20 -0
- package/dist/lib/links.js +105 -0
- package/dist/lib/links.js.map +1 -0
- package/dist/lib/lockfile.d.ts +24 -0
- package/dist/lib/lockfile.js +135 -0
- package/dist/lib/lockfile.js.map +1 -0
- package/dist/lib/logger.d.ts +6 -0
- package/dist/lib/logger.js +8 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/packer.d.ts +21 -0
- package/dist/lib/packer.js +210 -0
- package/dist/lib/packer.js.map +1 -0
- package/dist/lib/upgrade-check.d.ts +1 -0
- package/dist/lib/upgrade-check.js +52 -0
- package/dist/lib/upgrade-check.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.js +4 -0
- package/dist/version.js.map +1 -0
- package/package.json +40 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import crypto from 'node:crypto';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import { VERSION, USER_AGENT } from '../version.js';
|
|
7
|
+
function resolveCurrentBinary() {
|
|
8
|
+
try {
|
|
9
|
+
return fs.realpathSync(process.argv[1]);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return process.execPath;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export async function upgradeCommand(opts) {
|
|
16
|
+
const currentBinaryPath = resolveCurrentBinary();
|
|
17
|
+
if (currentBinaryPath.includes('/Cellar/') || currentBinaryPath.includes('/homebrew/')) {
|
|
18
|
+
console.log(chalk.yellow('Tank was installed via Homebrew. Run `brew upgrade tank` instead.'));
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
let targetVersion;
|
|
22
|
+
if (opts?.version) {
|
|
23
|
+
targetVersion = opts.version;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
const res = await fetch('https://api.github.com/repos/tankpkg/tank/releases/latest', {
|
|
27
|
+
headers: { 'User-Agent': USER_AGENT },
|
|
28
|
+
});
|
|
29
|
+
if (!res.ok) {
|
|
30
|
+
throw new Error(`Failed to fetch latest release: ${res.status} ${res.statusText}`);
|
|
31
|
+
}
|
|
32
|
+
const data = (await res.json());
|
|
33
|
+
targetVersion = data.tag_name.replace(/^v/, '');
|
|
34
|
+
}
|
|
35
|
+
if (targetVersion === VERSION && !opts?.force) {
|
|
36
|
+
console.log(chalk.green(`✓ Already on latest version: ${VERSION}`));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const platform = process.platform === 'darwin' ? 'darwin' : 'linux';
|
|
40
|
+
const arch = process.arch === 'arm64' ? 'arm64' : 'x64';
|
|
41
|
+
const binaryName = `tank-${platform}-${arch}`;
|
|
42
|
+
if (opts?.dryRun) {
|
|
43
|
+
console.log(`Would upgrade tank ${VERSION} → ${targetVersion}`);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
console.log(chalk.cyan(`Upgrading tank ${VERSION} → ${targetVersion}...`));
|
|
47
|
+
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'tank-upgrade-'));
|
|
48
|
+
try {
|
|
49
|
+
const binaryUrl = `https://github.com/tankpkg/tank/releases/download/v${targetVersion}/${binaryName}`;
|
|
50
|
+
const tmpBin = path.join(tmpDir, binaryName);
|
|
51
|
+
const binRes = await fetch(binaryUrl, {
|
|
52
|
+
headers: { 'User-Agent': USER_AGENT },
|
|
53
|
+
});
|
|
54
|
+
if (!binRes.ok) {
|
|
55
|
+
throw new Error(`Failed to download binary: ${binRes.status} ${binRes.statusText}`);
|
|
56
|
+
}
|
|
57
|
+
if (!binRes.body) {
|
|
58
|
+
throw new Error('Empty response body when downloading binary');
|
|
59
|
+
}
|
|
60
|
+
const binBuffer = Buffer.from(await binRes.arrayBuffer());
|
|
61
|
+
fs.writeFileSync(tmpBin, binBuffer);
|
|
62
|
+
const sumsUrl = `https://github.com/tankpkg/tank/releases/download/v${targetVersion}/SHA256SUMS`;
|
|
63
|
+
const sumsRes = await fetch(sumsUrl, {
|
|
64
|
+
headers: { 'User-Agent': USER_AGENT },
|
|
65
|
+
});
|
|
66
|
+
if (!sumsRes.ok) {
|
|
67
|
+
throw new Error(`Failed to download SHA256SUMS: ${sumsRes.status} ${sumsRes.statusText}`);
|
|
68
|
+
}
|
|
69
|
+
const sumsText = await sumsRes.text();
|
|
70
|
+
let expectedHash;
|
|
71
|
+
for (const line of sumsText.split('\n')) {
|
|
72
|
+
const trimmed = line.trim();
|
|
73
|
+
if (!trimmed)
|
|
74
|
+
continue;
|
|
75
|
+
const parts = trimmed.split(/\s+/);
|
|
76
|
+
if (parts.length >= 2 && parts[1] === binaryName) {
|
|
77
|
+
expectedHash = parts[0];
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (!expectedHash) {
|
|
82
|
+
throw new Error(`No checksum found for ${binaryName} in SHA256SUMS`);
|
|
83
|
+
}
|
|
84
|
+
const fileBuffer = fs.readFileSync(tmpBin);
|
|
85
|
+
const actualHash = crypto.createHash('sha256').update(fileBuffer).digest('hex');
|
|
86
|
+
if (actualHash !== expectedHash) {
|
|
87
|
+
console.log(chalk.red('Checksum mismatch. Aborting for security.'));
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
fs.chmodSync(tmpBin, 0o755);
|
|
91
|
+
fs.copyFileSync(tmpBin, currentBinaryPath);
|
|
92
|
+
fs.chmodSync(currentBinaryPath, 0o755);
|
|
93
|
+
console.log(chalk.green(`✓ Upgraded tank ${VERSION} → ${targetVersion}`));
|
|
94
|
+
console.log(chalk.gray(`Release notes: https://github.com/tankpkg/tank/releases/tag/v${targetVersion}`));
|
|
95
|
+
}
|
|
96
|
+
finally {
|
|
97
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=upgrade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface VerifyOptions {
|
|
2
|
+
directory?: string;
|
|
3
|
+
}
|
|
4
|
+
export interface VerifyResult {
|
|
5
|
+
valid: boolean;
|
|
6
|
+
mismatches: Array<{
|
|
7
|
+
key: string;
|
|
8
|
+
expected: string;
|
|
9
|
+
actual: string | null;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Verify that installed skills match the lockfile.
|
|
14
|
+
*
|
|
15
|
+
* For each entry in skills.lock:
|
|
16
|
+
* 1. Parse the skill name from the lock key
|
|
17
|
+
* 2. Check that the skill directory exists in .tank/skills/
|
|
18
|
+
* 3. Check that the directory is not empty
|
|
19
|
+
*
|
|
20
|
+
* Throws on failure (exit code 1). Prints success message on pass.
|
|
21
|
+
*/
|
|
22
|
+
export declare function verifyCommand(options?: VerifyOptions): Promise<void>;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { readLockfile } from '../lib/lockfile.js';
|
|
4
|
+
import { logger } from '../lib/logger.js';
|
|
5
|
+
/**
|
|
6
|
+
* Verify that installed skills match the lockfile.
|
|
7
|
+
*
|
|
8
|
+
* For each entry in skills.lock:
|
|
9
|
+
* 1. Parse the skill name from the lock key
|
|
10
|
+
* 2. Check that the skill directory exists in .tank/skills/
|
|
11
|
+
* 3. Check that the directory is not empty
|
|
12
|
+
*
|
|
13
|
+
* Throws on failure (exit code 1). Prints success message on pass.
|
|
14
|
+
*/
|
|
15
|
+
export async function verifyCommand(options) {
|
|
16
|
+
const directory = options?.directory ?? process.cwd();
|
|
17
|
+
const lock = readLockfile(directory);
|
|
18
|
+
if (!lock) {
|
|
19
|
+
throw new Error(`No skills.lock found in ${directory}. Run: tank install`);
|
|
20
|
+
}
|
|
21
|
+
const entries = Object.entries(lock.skills);
|
|
22
|
+
if (entries.length === 0) {
|
|
23
|
+
logger.success('No skills to verify (lockfile is empty)');
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const issues = [];
|
|
27
|
+
for (const [key] of entries) {
|
|
28
|
+
const skillName = parseLockKey(key);
|
|
29
|
+
const skillDir = getExtractDir(directory, skillName);
|
|
30
|
+
if (!fs.existsSync(skillDir)) {
|
|
31
|
+
issues.push(`${key}: directory missing at ${skillDir}`);
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
// Check directory is not empty
|
|
35
|
+
const contents = fs.readdirSync(skillDir);
|
|
36
|
+
if (contents.length === 0) {
|
|
37
|
+
issues.push(`${key}: directory exists but is empty`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (issues.length > 0) {
|
|
41
|
+
for (const issue of issues) {
|
|
42
|
+
logger.error(issue);
|
|
43
|
+
}
|
|
44
|
+
throw new Error(`Verification failed: ${issues.length} issue${issues.length === 1 ? '' : 's'} found`);
|
|
45
|
+
}
|
|
46
|
+
const count = entries.length;
|
|
47
|
+
logger.success(`All ${count} skill${count === 1 ? '' : 's'} verified`);
|
|
48
|
+
}
|
|
49
|
+
function parseLockKey(key) {
|
|
50
|
+
const lastAt = key.lastIndexOf('@');
|
|
51
|
+
if (lastAt <= 0) {
|
|
52
|
+
throw new Error(`Invalid lockfile key: ${key}`);
|
|
53
|
+
}
|
|
54
|
+
return key.slice(0, lastAt);
|
|
55
|
+
}
|
|
56
|
+
function getExtractDir(projectDir, skillName) {
|
|
57
|
+
if (skillName.startsWith('@')) {
|
|
58
|
+
const [scope, name] = skillName.split('/');
|
|
59
|
+
return path.join(projectDir, '.tank', 'skills', scope, name);
|
|
60
|
+
}
|
|
61
|
+
return path.join(projectDir, '.tank', 'skills', skillName);
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { getConfig } from '../lib/config.js';
|
|
2
|
+
import { logger } from '../lib/logger.js';
|
|
3
|
+
import { USER_AGENT } from '../version.js';
|
|
4
|
+
export async function whoamiCommand(options = {}) {
|
|
5
|
+
const { configDir } = options;
|
|
6
|
+
const config = getConfig(configDir);
|
|
7
|
+
if (!config.token) {
|
|
8
|
+
logger.warn('Not logged in. Run: tank login');
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
const res = await fetch(`${config.registry}/api/v1/auth/whoami`, {
|
|
13
|
+
method: 'GET',
|
|
14
|
+
headers: {
|
|
15
|
+
'Authorization': `Bearer ${config.token}`,
|
|
16
|
+
'User-Agent': USER_AGENT,
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
if (res.status === 401) {
|
|
20
|
+
logger.error('Token is invalid or expired. Run: tank login');
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
if (!res.ok) {
|
|
24
|
+
if (config.user) {
|
|
25
|
+
printUserInfo(config.user);
|
|
26
|
+
logger.warn('Could not verify token with server. Run: tank login');
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
logger.error('Could not verify token. Server returned an error. Run: tank login');
|
|
30
|
+
}
|
|
31
|
+
process.exitCode = 1;
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (config.user) {
|
|
35
|
+
printUserInfo(config.user);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
logger.info('Logged in (token verified).');
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
if (config.user) {
|
|
43
|
+
logger.info(`Logged in as: ${config.user.name ?? 'unknown'} (offline)`);
|
|
44
|
+
logger.info(`Email: ${config.user.email ?? 'unknown'}`);
|
|
45
|
+
logger.warn('Could not reach server to verify token. Run: tank login');
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
logger.error('Could not verify token. Check your network connection.');
|
|
49
|
+
}
|
|
50
|
+
process.exitCode = 1;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function printUserInfo(user) {
|
|
54
|
+
logger.info(`Logged in as: ${user.name ?? 'unknown'}`);
|
|
55
|
+
logger.info(`Email: ${user.email ?? 'unknown'}`);
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=whoami.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAM3C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAyB,EAAE;IAC7D,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC9B,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAEpC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,QAAQ,qBAAqB,EAAE;YAC/D,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE;gBAC3C,YAAY,EAAE,UAAU;aACvB;SACF,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAChB,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YACrE,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC;YACpF,CAAC;YACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS,YAAY,CAAC,CAAC;YACxE,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAAqC;IAC1D,MAAM,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC;IACvD,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC,CAAC;AACnD,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { VERSION } from './version.js';
|
|
2
|
+
export { logger } from './lib/logger.js';
|
|
3
|
+
export { getConfig, setConfig, getConfigPath, getConfigDir } from './lib/config.js';
|
|
4
|
+
export type { TankConfig } from './lib/config.js';
|
|
5
|
+
export { ApiClient, createApiClient } from './lib/api-client.js';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { VERSION } from './version.js';
|
|
2
|
+
export { logger } from './lib/logger.js';
|
|
3
|
+
export { getConfig, setConfig, getConfigPath, getConfigDir } from './lib/config.js';
|
|
4
|
+
export { ApiClient, createApiClient } from './lib/api-client.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpF,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface AgentInfo {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
skillsDir: string;
|
|
5
|
+
}
|
|
6
|
+
interface AgentDefinition {
|
|
7
|
+
id: string;
|
|
8
|
+
name: string;
|
|
9
|
+
skillsDir: (homedir: string) => string;
|
|
10
|
+
configDir: (homedir: string) => string;
|
|
11
|
+
}
|
|
12
|
+
export declare const SUPPORTED_AGENTS: AgentDefinition[];
|
|
13
|
+
export declare function getSupportedAgents(homedir?: string): AgentInfo[];
|
|
14
|
+
export declare function detectInstalledAgents(homedir?: string): AgentInfo[];
|
|
15
|
+
export declare function getAgentSkillDir(agentId: string, homedir?: string): string | null;
|
|
16
|
+
export declare function getSymlinkName(skillName: string): string;
|
|
17
|
+
export declare function getGlobalSkillsDir(homedir?: string): string;
|
|
18
|
+
export declare function getGlobalAgentSkillsDir(homedir?: string): string;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
const resolveHomedir = (homedir) => homedir ?? os.homedir();
|
|
5
|
+
export const SUPPORTED_AGENTS = [
|
|
6
|
+
{
|
|
7
|
+
id: 'claude',
|
|
8
|
+
name: 'Claude Code',
|
|
9
|
+
skillsDir: (homedir) => path.join(homedir, '.claude', 'skills'),
|
|
10
|
+
configDir: (homedir) => path.join(homedir, '.claude'),
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
id: 'opencode',
|
|
14
|
+
name: 'OpenCode',
|
|
15
|
+
skillsDir: (homedir) => path.join(homedir, '.config', 'opencode', 'skills'),
|
|
16
|
+
configDir: (homedir) => path.join(homedir, '.config', 'opencode'),
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
id: 'cursor',
|
|
20
|
+
name: 'Cursor',
|
|
21
|
+
skillsDir: (homedir) => path.join(homedir, '.cursor', 'skills'),
|
|
22
|
+
configDir: (homedir) => path.join(homedir, '.cursor'),
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: 'codex',
|
|
26
|
+
name: 'Codex',
|
|
27
|
+
skillsDir: (homedir) => path.join(homedir, '.codex', 'skills'),
|
|
28
|
+
configDir: (homedir) => path.join(homedir, '.codex'),
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
id: 'openclaw',
|
|
32
|
+
name: 'OpenClaw',
|
|
33
|
+
skillsDir: (homedir) => path.join(homedir, '.openclaw', 'skills'),
|
|
34
|
+
configDir: (homedir) => path.join(homedir, '.openclaw'),
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
id: 'universal',
|
|
38
|
+
name: 'Universal',
|
|
39
|
+
skillsDir: (homedir) => path.join(homedir, '.agents', 'skills'),
|
|
40
|
+
configDir: (homedir) => path.join(homedir, '.agents'),
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
export function getSupportedAgents(homedir) {
|
|
44
|
+
const resolved = resolveHomedir(homedir);
|
|
45
|
+
return SUPPORTED_AGENTS.map((agent) => ({
|
|
46
|
+
id: agent.id,
|
|
47
|
+
name: agent.name,
|
|
48
|
+
skillsDir: agent.skillsDir(resolved),
|
|
49
|
+
}));
|
|
50
|
+
}
|
|
51
|
+
export function detectInstalledAgents(homedir) {
|
|
52
|
+
const resolved = resolveHomedir(homedir);
|
|
53
|
+
return SUPPORTED_AGENTS.filter((agent) => fs.existsSync(agent.configDir(resolved))).map((agent) => ({
|
|
54
|
+
id: agent.id,
|
|
55
|
+
name: agent.name,
|
|
56
|
+
skillsDir: agent.skillsDir(resolved),
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
export function getAgentSkillDir(agentId, homedir) {
|
|
60
|
+
const resolved = resolveHomedir(homedir);
|
|
61
|
+
const agent = SUPPORTED_AGENTS.find((entry) => entry.id === agentId);
|
|
62
|
+
if (!agent) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
return agent.skillsDir(resolved);
|
|
66
|
+
}
|
|
67
|
+
export function getSymlinkName(skillName) {
|
|
68
|
+
const match = skillName.match(/^@([^/]+)\/(.+)$/);
|
|
69
|
+
if (!match) {
|
|
70
|
+
return skillName;
|
|
71
|
+
}
|
|
72
|
+
const [, scope, name] = match;
|
|
73
|
+
if (scope.length === 0 || name.length === 0) {
|
|
74
|
+
return skillName;
|
|
75
|
+
}
|
|
76
|
+
return `${scope}--${name}`;
|
|
77
|
+
}
|
|
78
|
+
export function getGlobalSkillsDir(homedir) {
|
|
79
|
+
return path.join(resolveHomedir(homedir), '.tank', 'skills');
|
|
80
|
+
}
|
|
81
|
+
export function getGlobalAgentSkillsDir(homedir) {
|
|
82
|
+
return path.join(resolveHomedir(homedir), '.tank', 'agent-skills');
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/lib/agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type TankConfig } from './config.js';
|
|
2
|
+
export declare class ApiClient {
|
|
3
|
+
private baseUrl;
|
|
4
|
+
private token?;
|
|
5
|
+
constructor(config: TankConfig);
|
|
6
|
+
private headers;
|
|
7
|
+
get(path: string): Promise<Response>;
|
|
8
|
+
post(path: string, body: unknown): Promise<Response>;
|
|
9
|
+
put(path: string, body: unknown): Promise<Response>;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Factory: reads config and returns an ApiClient instance.
|
|
13
|
+
*/
|
|
14
|
+
export declare function createApiClient(configDir?: string): ApiClient;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { getConfig } from './config.js';
|
|
2
|
+
import { httpLog } from './debug-logger.js';
|
|
3
|
+
import { USER_AGENT } from '../version.js';
|
|
4
|
+
export class ApiClient {
|
|
5
|
+
baseUrl;
|
|
6
|
+
token;
|
|
7
|
+
constructor(config) {
|
|
8
|
+
this.baseUrl = config.registry;
|
|
9
|
+
this.token = config.token;
|
|
10
|
+
}
|
|
11
|
+
headers(hasBody) {
|
|
12
|
+
const h = {
|
|
13
|
+
'User-Agent': USER_AGENT,
|
|
14
|
+
};
|
|
15
|
+
if (this.token) {
|
|
16
|
+
h['Authorization'] = `Bearer ${this.token}`;
|
|
17
|
+
}
|
|
18
|
+
if (hasBody) {
|
|
19
|
+
h['Content-Type'] = 'application/json';
|
|
20
|
+
}
|
|
21
|
+
return h;
|
|
22
|
+
}
|
|
23
|
+
async get(path) {
|
|
24
|
+
const url = `${this.baseUrl}${path}`;
|
|
25
|
+
httpLog.info({ method: 'GET', url }, 'Request');
|
|
26
|
+
const res = await fetch(url, {
|
|
27
|
+
method: 'GET',
|
|
28
|
+
headers: this.headers(false),
|
|
29
|
+
});
|
|
30
|
+
httpLog.info({ method: 'GET', url, status: res.status, ok: res.ok }, 'Response');
|
|
31
|
+
return res;
|
|
32
|
+
}
|
|
33
|
+
async post(path, body) {
|
|
34
|
+
const url = `${this.baseUrl}${path}`;
|
|
35
|
+
httpLog.info({ method: 'POST', url, bodyKeys: body && typeof body === 'object' ? Object.keys(body) : undefined }, 'Request');
|
|
36
|
+
const res = await fetch(url, {
|
|
37
|
+
method: 'POST',
|
|
38
|
+
headers: this.headers(true),
|
|
39
|
+
body: JSON.stringify(body),
|
|
40
|
+
});
|
|
41
|
+
httpLog.info({ method: 'POST', url, status: res.status, ok: res.ok }, 'Response');
|
|
42
|
+
return res;
|
|
43
|
+
}
|
|
44
|
+
async put(path, body) {
|
|
45
|
+
const url = `${this.baseUrl}${path}`;
|
|
46
|
+
httpLog.info({ method: 'PUT', url, bodyKeys: body && typeof body === 'object' ? Object.keys(body) : undefined }, 'Request');
|
|
47
|
+
const res = await fetch(url, {
|
|
48
|
+
method: 'PUT',
|
|
49
|
+
headers: this.headers(true),
|
|
50
|
+
body: JSON.stringify(body),
|
|
51
|
+
});
|
|
52
|
+
httpLog.info({ method: 'PUT', url, status: res.status, ok: res.ok }, 'Response');
|
|
53
|
+
return res;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Factory: reads config and returns an ApiClient instance.
|
|
58
|
+
*/
|
|
59
|
+
export function createApiClient(configDir) {
|
|
60
|
+
const config = getConfig(configDir);
|
|
61
|
+
return new ApiClient(config);
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=api-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface TankConfig {
|
|
2
|
+
token?: string;
|
|
3
|
+
user?: {
|
|
4
|
+
name: string;
|
|
5
|
+
email: string;
|
|
6
|
+
};
|
|
7
|
+
registry: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Get the path to the tank config directory.
|
|
11
|
+
* Override with configDir parameter for testing.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getConfigDir(configDir?: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Get the path to the tank config file.
|
|
16
|
+
* Override with configDir parameter for testing.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getConfigPath(configDir?: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Read the tank config file. Returns defaults if file doesn't exist.
|
|
21
|
+
* Override configDir for testing (avoids writing to real ~/.tank/).
|
|
22
|
+
*/
|
|
23
|
+
export declare function getConfig(configDir?: string): TankConfig;
|
|
24
|
+
/**
|
|
25
|
+
* Write config to disk. Merges with existing config.
|
|
26
|
+
* Creates ~/.tank/ directory if it doesn't exist.
|
|
27
|
+
* Sets file permissions to 0600 (owner read/write only) on Unix.
|
|
28
|
+
*/
|
|
29
|
+
export declare function setConfig(partial: Partial<TankConfig>, configDir?: string): void;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
const DEFAULT_CONFIG = {
|
|
5
|
+
registry: 'https://tankpkg.dev',
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Get the path to the tank config directory.
|
|
9
|
+
* Override with configDir parameter for testing.
|
|
10
|
+
*/
|
|
11
|
+
export function getConfigDir(configDir) {
|
|
12
|
+
return configDir ?? path.join(os.homedir(), '.tank');
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Get the path to the tank config file.
|
|
16
|
+
* Override with configDir parameter for testing.
|
|
17
|
+
*/
|
|
18
|
+
export function getConfigPath(configDir) {
|
|
19
|
+
return path.join(getConfigDir(configDir), 'config.json');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Read the tank config file. Returns defaults if file doesn't exist.
|
|
23
|
+
* Override configDir for testing (avoids writing to real ~/.tank/).
|
|
24
|
+
*/
|
|
25
|
+
export function getConfig(configDir) {
|
|
26
|
+
const configPath = getConfigPath(configDir);
|
|
27
|
+
try {
|
|
28
|
+
const raw = fs.readFileSync(configPath, 'utf-8');
|
|
29
|
+
const parsed = JSON.parse(raw);
|
|
30
|
+
const merged = { ...DEFAULT_CONFIG, ...parsed };
|
|
31
|
+
const envToken = process.env.TANK_TOKEN?.trim();
|
|
32
|
+
if (envToken) {
|
|
33
|
+
merged.token = envToken;
|
|
34
|
+
}
|
|
35
|
+
return merged;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
const envToken = process.env.TANK_TOKEN?.trim();
|
|
39
|
+
return {
|
|
40
|
+
...DEFAULT_CONFIG,
|
|
41
|
+
...(envToken ? { token: envToken } : {}),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Write config to disk. Merges with existing config.
|
|
47
|
+
* Creates ~/.tank/ directory if it doesn't exist.
|
|
48
|
+
* Sets file permissions to 0600 (owner read/write only) on Unix.
|
|
49
|
+
*/
|
|
50
|
+
export function setConfig(partial, configDir) {
|
|
51
|
+
const dir = getConfigDir(configDir);
|
|
52
|
+
const configPath = getConfigPath(configDir);
|
|
53
|
+
// Create directory with 0700 permissions if it doesn't exist
|
|
54
|
+
if (!fs.existsSync(dir)) {
|
|
55
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
56
|
+
}
|
|
57
|
+
// Merge with existing config
|
|
58
|
+
const existing = getConfig(configDir);
|
|
59
|
+
const merged = { ...existing, ...partial };
|
|
60
|
+
// Write config file
|
|
61
|
+
fs.writeFileSync(configPath, JSON.stringify(merged, null, 2) + '\n', {
|
|
62
|
+
encoding: 'utf-8',
|
|
63
|
+
mode: 0o600,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAQzB,MAAM,cAAc,GAAe;IACjC,QAAQ,EAAE,qBAAqB;CAChC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,SAAkB;IAC7C,OAAO,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,SAAkB;IAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,CAAC;AAC3D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,SAAkB;IAC1C,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IAE5C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAwB,CAAC;QACtD,MAAM,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;QAChD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;QAC1B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;QAChD,OAAO;YACL,GAAG,cAAc;YACjB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzC,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CACvB,OAA4B,EAC5B,SAAkB;IAElB,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IAE5C,6DAA6D;IAC7D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,6BAA6B;IAC7B,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;IAE3C,oBAAoB;IACpB,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;QACnE,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import pino from 'pino';
|
|
2
|
+
export declare const debugLog: pino.Logger<never, boolean>;
|
|
3
|
+
export declare const httpLog: pino.Logger<never, boolean>;
|
|
4
|
+
export declare const authFlowLog: pino.Logger<never, boolean>;
|
|
5
|
+
/**
|
|
6
|
+
* Flush pending logs before process exit.
|
|
7
|
+
* Call this at the end of CLI commands to ensure logs are delivered.
|
|
8
|
+
*/
|
|
9
|
+
export declare function flushLogs(): Promise<void>;
|