@iamramo/zanat-cli 0.3.0 → 0.4.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/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +8 -24
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +12 -15
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +8 -9
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +8 -24
- package/dist/commands/remove.js.map +1 -1
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +10 -16
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +7 -10
- package/dist/commands/sync.js.map +1 -1
- package/dist/utils/logger.d.ts +17 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +28 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/validation.d.ts +4 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +21 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,UAAU,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,UAAU,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CAa/D,CAAC"}
|
package/dist/commands/add.js
CHANGED
|
@@ -1,32 +1,16 @@
|
|
|
1
|
-
import { installSkill
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
1
|
+
import { installSkill } from '@iamramo/zanat-core';
|
|
2
|
+
import { logger } from '../utils/logger.js';
|
|
3
|
+
import { validateSkillArg, ensureHubExists } from '../utils/validation.js';
|
|
4
4
|
export const addCommand = async (skillArg) => {
|
|
5
|
-
|
|
5
|
+
logger.info(`Adding skill: ${skillArg}...`);
|
|
6
6
|
try {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
console.error(chalk.red('Hub not found. Run `zanat init` first.'));
|
|
10
|
-
process.exit(1);
|
|
11
|
-
}
|
|
12
|
-
const result = SkillArgSchema.safeParse(skillArg);
|
|
13
|
-
if (!result.success) {
|
|
14
|
-
const errorMessage = result.error.issues[0]?.message ?? 'Invalid skill format';
|
|
15
|
-
console.error(chalk.red(errorMessage));
|
|
16
|
-
console.error(chalk.gray('Example: mycompany/hello-world'));
|
|
17
|
-
process.exit(1);
|
|
18
|
-
}
|
|
19
|
-
const { source, skillName } = result.data;
|
|
7
|
+
await ensureHubExists();
|
|
8
|
+
const { source, skillName } = validateSkillArg(skillArg);
|
|
20
9
|
await installSkill(source, skillName);
|
|
21
|
-
|
|
10
|
+
logger.success(`Added zanat.${source}.${skillName}`);
|
|
22
11
|
}
|
|
23
12
|
catch (error) {
|
|
24
|
-
|
|
25
|
-
console.error(chalk.red('Failed to add:'), error.message);
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
console.error(chalk.red('Failed to add:'), error);
|
|
29
|
-
}
|
|
13
|
+
logger.error('Failed to add', error);
|
|
30
14
|
process.exit(1);
|
|
31
15
|
}
|
|
32
16
|
};
|
package/dist/commands/add.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE3E,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,QAAgB,EAAiB,EAAE;IAClE,MAAM,CAAC,IAAI,CAAC,iBAAiB,QAAQ,KAAK,CAAC,CAAC;IAE5C,IAAI,CAAC;QACH,MAAM,eAAe,EAAE,CAAC;QACxB,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACzD,MAAM,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAEtC,MAAM,CAAC,OAAO,CAAC,eAAe,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,IAAI,CAkDhD,CAAC"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { ZANAT_DIR, HUB_DIR, AGENTS_DIR, saveConfig, cloneHub, isHubCloned, } from '@iamramo/zanat-core';
|
|
2
2
|
import { input } from '@inquirer/prompts';
|
|
3
3
|
import fs from 'fs-extra';
|
|
4
|
-
import
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
5
|
export const initCommand = async () => {
|
|
6
|
-
|
|
6
|
+
logger.info('Initializing Zanat...\n');
|
|
7
7
|
try {
|
|
8
8
|
const hubUrl = await input({
|
|
9
9
|
message: 'Hub repository URL:',
|
|
@@ -13,9 +13,9 @@ export const initCommand = async () => {
|
|
|
13
13
|
message: 'Hub branch:',
|
|
14
14
|
default: 'main',
|
|
15
15
|
});
|
|
16
|
-
|
|
16
|
+
logger.info('\nSetting up directories...');
|
|
17
17
|
await fs.ensureDir(ZANAT_DIR);
|
|
18
|
-
|
|
18
|
+
logger.success(`Created ${ZANAT_DIR}`);
|
|
19
19
|
const config = {
|
|
20
20
|
hubUrl,
|
|
21
21
|
hubBranch,
|
|
@@ -23,27 +23,24 @@ export const initCommand = async () => {
|
|
|
23
23
|
await fs.ensureDir(AGENTS_DIR);
|
|
24
24
|
const hubExists = await isHubCloned();
|
|
25
25
|
if (!hubExists) {
|
|
26
|
-
|
|
26
|
+
logger.info('Cloning hub repository...');
|
|
27
27
|
const actualBranch = await cloneHub(hubUrl, hubBranch);
|
|
28
28
|
if (actualBranch !== hubBranch) {
|
|
29
29
|
config.hubBranch = actualBranch;
|
|
30
|
-
|
|
30
|
+
logger.warning(`Branch '${hubBranch}' not found, using '${actualBranch}' instead`);
|
|
31
31
|
}
|
|
32
|
-
|
|
32
|
+
logger.success(`Cloned hub to ${HUB_DIR}`);
|
|
33
33
|
}
|
|
34
34
|
else {
|
|
35
|
-
|
|
35
|
+
logger.warning('Hub already exists, skipping clone');
|
|
36
36
|
}
|
|
37
37
|
await saveConfig(config);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
console.log(chalk.gray(` zanat sync - Update skills from hub`));
|
|
42
|
-
console.log(chalk.gray(` zanat search - Find available skills`));
|
|
43
|
-
console.log(chalk.gray(` zanat add - Add a skill`));
|
|
38
|
+
logger.success(`Created config`);
|
|
39
|
+
logger.success('\n✨ Zanat initialized successfully!');
|
|
40
|
+
logger.dim(`\nNext steps:\n zanat sync - Update skills from hub\n zanat search - Find available skills\n zanat add - Add a skill`);
|
|
44
41
|
}
|
|
45
42
|
catch (error) {
|
|
46
|
-
|
|
43
|
+
logger.error('Failed to initialize', error);
|
|
47
44
|
process.exit(1);
|
|
48
45
|
}
|
|
49
46
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,OAAO,EACP,UAAU,EACV,UAAU,EACV,QAAQ,EACR,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,OAAO,EACP,UAAU,EACV,UAAU,EACV,QAAQ,EACR,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,IAAmB,EAAE;IACnD,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC;YACzB,OAAO,EAAE,qBAAqB;YAC9B,OAAO,EAAE,0CAA0C;SACpD,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC;YAC5B,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAE3C,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC9B,MAAM,CAAC,OAAO,CAAC,WAAW,SAAS,EAAE,CAAC,CAAC;QAEvC,MAAM,MAAM,GAAG;YACb,MAAM;YACN,SAAS;SACV,CAAC;QAEF,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAE/B,MAAM,SAAS,GAAG,MAAM,WAAW,EAAE,CAAC;QACtC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YACzC,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACvD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC/B,MAAM,CAAC,SAAS,GAAG,YAAY,CAAC;gBAChC,MAAM,CAAC,OAAO,CAAC,WAAW,SAAS,uBAAuB,YAAY,WAAW,CAAC,CAAC;YACrF,CAAC;YACD,MAAM,CAAC,OAAO,CAAC,iBAAiB,OAAO,EAAE,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAEjC,MAAM,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;QACtD,MAAM,CAAC,GAAG,CACR,6IAA6I,CAC9I,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,IAAI,CAqBhD,CAAC"}
|
package/dist/commands/list.js
CHANGED
|
@@ -1,23 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getAddedSkills } from '@iamramo/zanat-core';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
|
+
import { logger } from '../utils/logger.js';
|
|
3
4
|
export const listCommand = async () => {
|
|
4
|
-
console.log(chalk.blue('Added skills:'));
|
|
5
|
-
console.log();
|
|
6
5
|
try {
|
|
7
|
-
const skills = await
|
|
6
|
+
const skills = await getAddedSkills();
|
|
8
7
|
if (skills.length === 0) {
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
logger.dim('No skills added.');
|
|
9
|
+
logger.dim('Run `zanat search` to find skills or `zanat add <skill>` to add one.');
|
|
11
10
|
return;
|
|
12
11
|
}
|
|
12
|
+
logger.info('Added skills:\n');
|
|
13
13
|
skills.forEach((skill) => {
|
|
14
14
|
console.log(chalk.green('•'), skill);
|
|
15
15
|
});
|
|
16
|
-
|
|
17
|
-
console.log(chalk.gray(`Total: ${skills.length} skill${skills.length === 1 ? '' : 's'}`));
|
|
16
|
+
logger.dim(`\nTotal: ${skills.length} skill${skills.length === 1 ? '' : 's'}`);
|
|
18
17
|
}
|
|
19
18
|
catch (error) {
|
|
20
|
-
|
|
19
|
+
logger.error('Failed to list skills', error);
|
|
21
20
|
process.exit(1);
|
|
22
21
|
}
|
|
23
22
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,IAAmB,EAAE;IACnD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;QAEtC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;YACnF,OAAO;QACT,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAE/B,MAAM,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,EAAE;YAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACjF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,aAAa,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,aAAa,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CAalE,CAAC"}
|
package/dist/commands/remove.js
CHANGED
|
@@ -1,32 +1,16 @@
|
|
|
1
|
-
import { removeSkill
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
1
|
+
import { removeSkill } from '@iamramo/zanat-core';
|
|
2
|
+
import { logger } from '../utils/logger.js';
|
|
3
|
+
import { validateSkillArg, ensureHubExists } from '../utils/validation.js';
|
|
4
4
|
export const removeCommand = async (skillArg) => {
|
|
5
|
-
|
|
5
|
+
logger.info(`Removing skill: ${skillArg}...`);
|
|
6
6
|
try {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
console.error(chalk.red('Hub not found. Run `zanat init` first.'));
|
|
10
|
-
process.exit(1);
|
|
11
|
-
}
|
|
12
|
-
const result = SkillArgSchema.safeParse(skillArg);
|
|
13
|
-
if (!result.success) {
|
|
14
|
-
const errorMessage = result.error.issues[0]?.message ?? 'Invalid skill format';
|
|
15
|
-
console.error(chalk.red(errorMessage));
|
|
16
|
-
console.error(chalk.gray('Example: mycompany/hello-world'));
|
|
17
|
-
process.exit(1);
|
|
18
|
-
}
|
|
19
|
-
const { source, skillName } = result.data;
|
|
7
|
+
await ensureHubExists();
|
|
8
|
+
const { source, skillName } = validateSkillArg(skillArg);
|
|
20
9
|
await removeSkill(source, skillName);
|
|
21
|
-
|
|
10
|
+
logger.success(`Removed zanat.${source}.${skillName}`);
|
|
22
11
|
}
|
|
23
12
|
catch (error) {
|
|
24
|
-
|
|
25
|
-
console.error(chalk.red('Failed to remove:'), error.message);
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
console.error(chalk.red('Failed to remove:'), error);
|
|
29
|
-
}
|
|
13
|
+
logger.error('Failed to remove', error);
|
|
30
14
|
process.exit(1);
|
|
31
15
|
}
|
|
32
16
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE3E,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,QAAgB,EAAiB,EAAE;IACrE,MAAM,CAAC,IAAI,CAAC,mBAAmB,QAAQ,KAAK,CAAC,CAAC;IAE9C,IAAI,CAAC;QACH,MAAM,eAAe,EAAE,CAAC;QACxB,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACzD,MAAM,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAErC,MAAM,CAAC,OAAO,CAAC,iBAAiB,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,aAAa,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CA6BhE,CAAC"}
|
package/dist/commands/search.js
CHANGED
|
@@ -1,35 +1,29 @@
|
|
|
1
|
-
import { searchSkills
|
|
1
|
+
import { searchSkills } from '@iamramo/zanat-core';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
|
+
import { logger } from '../utils/logger.js';
|
|
4
|
+
import { ensureHubExists } from '../utils/validation.js';
|
|
3
5
|
export const searchCommand = async (query) => {
|
|
4
6
|
try {
|
|
5
|
-
|
|
6
|
-
if (!hubExists) {
|
|
7
|
-
console.error(chalk.red('Hub not found. Run `zanat init` first.'));
|
|
8
|
-
process.exit(1);
|
|
9
|
-
}
|
|
7
|
+
await ensureHubExists();
|
|
10
8
|
if (query) {
|
|
11
|
-
|
|
9
|
+
logger.info(`Searching for: "${query}"...\n`);
|
|
12
10
|
}
|
|
13
11
|
else {
|
|
14
|
-
|
|
12
|
+
logger.info('Available skills:\n');
|
|
15
13
|
}
|
|
16
|
-
console.log();
|
|
17
14
|
const results = await searchSkills(query);
|
|
18
15
|
if (results.length === 0) {
|
|
19
|
-
|
|
16
|
+
logger.dim('No skills found.');
|
|
20
17
|
return;
|
|
21
18
|
}
|
|
22
19
|
results.forEach((skill) => {
|
|
23
20
|
console.log(chalk.green('•'), `${skill.source}/${skill.name}`);
|
|
24
|
-
|
|
25
|
-
console.log();
|
|
21
|
+
logger.dim(` ${skill.description}\n`);
|
|
26
22
|
});
|
|
27
|
-
|
|
28
|
-
console.log();
|
|
29
|
-
console.log(chalk.gray('Add a skill with: zanat add <source>/<skill-name>'));
|
|
23
|
+
logger.dim(`Found ${results.length} skill${results.length === 1 ? '' : 's'}\nAdd a skill with: zanat add <source>/<skill-name>`);
|
|
30
24
|
}
|
|
31
25
|
catch (error) {
|
|
32
|
-
|
|
26
|
+
logger.error('Failed to search', error);
|
|
33
27
|
process.exit(1);
|
|
34
28
|
}
|
|
35
29
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,KAAc,EAAiB,EAAE;IACnE,IAAI,CAAC;QACH,MAAM,eAAe,EAAE,CAAC;QAExB,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,CAAC,mBAAmB,KAAK,QAAQ,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC;QAE1C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/D,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,CACR,SAAS,OAAO,CAAC,MAAM,SAAS,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,qDAAqD,CACrH,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,IAAI,CAkBhD,CAAC"}
|
package/dist/commands/sync.js
CHANGED
|
@@ -1,23 +1,20 @@
|
|
|
1
|
-
import { pullHub,
|
|
2
|
-
import
|
|
1
|
+
import { pullHub, saveConfig, loadConfig } from '@iamramo/zanat-core';
|
|
2
|
+
import { logger } from '../utils/logger.js';
|
|
3
|
+
import { ensureHubExists } from '../utils/validation.js';
|
|
3
4
|
export const syncCommand = async () => {
|
|
4
|
-
|
|
5
|
+
logger.info('Syncing with hub...');
|
|
5
6
|
try {
|
|
6
|
-
|
|
7
|
-
if (!hubExists) {
|
|
8
|
-
console.error(chalk.red('Hub not found. Run `zanat init` first.'));
|
|
9
|
-
process.exit(1);
|
|
10
|
-
}
|
|
7
|
+
await ensureHubExists();
|
|
11
8
|
await pullHub();
|
|
12
9
|
const config = await loadConfig();
|
|
13
10
|
if (config) {
|
|
14
11
|
config.lastSync = new Date().toISOString();
|
|
15
12
|
await saveConfig(config);
|
|
16
13
|
}
|
|
17
|
-
|
|
14
|
+
logger.success('Hub synced successfully');
|
|
18
15
|
}
|
|
19
16
|
catch (error) {
|
|
20
|
-
|
|
17
|
+
logger.error('Failed to sync', error);
|
|
21
18
|
process.exit(1);
|
|
22
19
|
}
|
|
23
20
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,IAAmB,EAAE;IACnD,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAEnC,IAAI,CAAC;QACH,MAAM,eAAe,EAAE,CAAC;QACxB,MAAM,OAAO,EAAE,CAAC;QAEhB,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;QAClC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC3C,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface Logger {
|
|
2
|
+
info(message: string): void;
|
|
3
|
+
success(message: string): void;
|
|
4
|
+
warning(message: string): void;
|
|
5
|
+
error(message: string, error?: unknown): void;
|
|
6
|
+
dim(message: string): void;
|
|
7
|
+
}
|
|
8
|
+
declare class ConsoleLogger implements Logger {
|
|
9
|
+
info(message: string): void;
|
|
10
|
+
success(message: string): void;
|
|
11
|
+
warning(message: string): void;
|
|
12
|
+
error(message: string, error?: unknown): void;
|
|
13
|
+
dim(message: string): void;
|
|
14
|
+
}
|
|
15
|
+
export declare const logger: ConsoleLogger;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9C,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,cAAM,aAAc,YAAW,MAAM;IACnC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI;IAU7C,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAG3B;AAED,eAAO,MAAM,MAAM,eAAsB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
class ConsoleLogger {
|
|
3
|
+
info(message) {
|
|
4
|
+
console.log(chalk.blue(message));
|
|
5
|
+
}
|
|
6
|
+
success(message) {
|
|
7
|
+
console.log(chalk.green(`✓ ${message}`));
|
|
8
|
+
}
|
|
9
|
+
warning(message) {
|
|
10
|
+
console.log(chalk.yellow(`⚠ ${message}`));
|
|
11
|
+
}
|
|
12
|
+
error(message, error) {
|
|
13
|
+
if (error instanceof Error) {
|
|
14
|
+
console.error(chalk.red(`✗ ${message}`), error.message);
|
|
15
|
+
}
|
|
16
|
+
else if (error !== undefined) {
|
|
17
|
+
console.error(chalk.red(`✗ ${message}`), error);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
console.error(chalk.red(`✗ ${message}`));
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
dim(message) {
|
|
24
|
+
console.log(chalk.gray(message));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export const logger = new ConsoleLogger();
|
|
28
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,MAAM,aAAa;IACjB,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,KAAe;QACpC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1D,CAAC;aAAM,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,GAAG,CAAC,OAAe;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACnC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGxE,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,KAAG,QASnD,CAAC;AAEF,eAAO,MAAM,eAAe,QAAa,OAAO,CAAC,IAAI,CAMpD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { isHubCloned } from '@iamramo/zanat-core';
|
|
2
|
+
import { SkillArgSchema } from '../schemas/skill-arg.js';
|
|
3
|
+
import { logger } from './logger.js';
|
|
4
|
+
export const validateSkillArg = (skillArg) => {
|
|
5
|
+
const result = SkillArgSchema.safeParse(skillArg);
|
|
6
|
+
if (!result.success) {
|
|
7
|
+
const errorMessage = result.error.issues[0]?.message ?? 'Invalid skill format';
|
|
8
|
+
logger.error(errorMessage);
|
|
9
|
+
logger.dim('Example: mycompany/hello-world');
|
|
10
|
+
process.exit(1);
|
|
11
|
+
}
|
|
12
|
+
return result.data;
|
|
13
|
+
};
|
|
14
|
+
export const ensureHubExists = async () => {
|
|
15
|
+
const hubExists = await isHubCloned();
|
|
16
|
+
if (!hubExists) {
|
|
17
|
+
logger.error('Hub not found. Run `zanat init` first.');
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAiB,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAY,EAAE;IAC7D,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,sBAAsB,CAAC;QAC/E,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,IAAmB,EAAE;IACvD,MAAM,SAAS,GAAG,MAAM,WAAW,EAAE,CAAC;IACtC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iamramo/zanat-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "CLI for zanat - a skill hub for AI agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/cli.js",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"typecheck": "tsc --noEmit"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@iamramo/zanat-core": "^0.
|
|
30
|
+
"@iamramo/zanat-core": "^0.4.0",
|
|
31
31
|
"@inquirer/prompts": "^8.3.2",
|
|
32
32
|
"chalk": "^5.6.2",
|
|
33
33
|
"commander": "^14.0.3",
|