@iamramo/zanat-cli 0.8.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +30 -12
  2. package/dist/cli.js +2 -3
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/add.d.ts.map +1 -1
  5. package/dist/commands/add.js +17 -13
  6. package/dist/commands/add.js.map +1 -1
  7. package/dist/commands/init.d.ts.map +1 -1
  8. package/dist/commands/init.js +39 -52
  9. package/dist/commands/init.js.map +1 -1
  10. package/dist/commands/list.d.ts.map +1 -1
  11. package/dist/commands/list.js +17 -14
  12. package/dist/commands/list.js.map +1 -1
  13. package/dist/commands/remove.d.ts.map +1 -1
  14. package/dist/commands/remove.js +16 -8
  15. package/dist/commands/remove.js.map +1 -1
  16. package/dist/commands/search.d.ts.map +1 -1
  17. package/dist/commands/search.js +14 -30
  18. package/dist/commands/search.js.map +1 -1
  19. package/dist/commands/status.d.ts.map +1 -1
  20. package/dist/commands/status.js +35 -52
  21. package/dist/commands/status.js.map +1 -1
  22. package/dist/commands/sync.d.ts.map +1 -1
  23. package/dist/commands/sync.js +9 -11
  24. package/dist/commands/sync.js.map +1 -1
  25. package/dist/commands/update.d.ts +1 -5
  26. package/dist/commands/update.d.ts.map +1 -1
  27. package/dist/commands/update.js +28 -42
  28. package/dist/commands/update.js.map +1 -1
  29. package/dist/utils/validation.d.ts +0 -2
  30. package/dist/utils/validation.d.ts.map +1 -1
  31. package/dist/utils/validation.js +4 -15
  32. package/dist/utils/validation.js.map +1 -1
  33. package/package.json +2 -2
  34. package/dist/schemas/index.d.ts +0 -5
  35. package/dist/schemas/index.d.ts.map +0 -1
  36. package/dist/schemas/index.js +0 -5
  37. package/dist/schemas/index.js.map +0 -1
  38. package/dist/schemas/skill-arg.d.ts +0 -10
  39. package/dist/schemas/skill-arg.d.ts.map +0 -1
  40. package/dist/schemas/skill-arg.js +0 -22
  41. package/dist/schemas/skill-arg.js.map +0 -1
package/README.md CHANGED
@@ -10,14 +10,16 @@ npm install -g @iamramo/zanat-cli
10
10
 
11
11
  ## Commands
12
12
 
13
- | Command | Description | Usage |
14
- | -------- | ----------------------------------------------------------- | ---------------------------------- |
15
- | `init` | Initialize zanat configuration and clone the hub repository | `zanat init` |
16
- | `sync` | Pull the latest changes from the hub repository | `zanat sync` |
17
- | `search` | Search for available skills in the hub | `zanat search [query]` |
18
- | `add` | Add a skill to your local skills | `zanat add <namespace.skill-name>` |
19
- | `rm` | Remove a skill from your local skills | `zanat rm <namespace.skill-name>` |
20
- | `list` | List all added skills | `zanat list` |
13
+ | Command | Description | Usage |
14
+ | -------- | ----------------------------------------------------------- | ---------------------- |
15
+ | `init` | Initialize zanat configuration and clone the hub repository | `zanat init` |
16
+ | `sync` | Pull the latest changes from the hub repository | `zanat sync` |
17
+ | `search` | Search for available skills in the hub | `zanat search [query]` |
18
+ | `add` | Add a skill to your local skills | `zanat add <skill>` |
19
+ | `rm` | Remove a skill from your local skills | `zanat rm <skill>` |
20
+ | `list` | List all added skills | `zanat list` |
21
+ | `update` | Update skill(s) from hub | `zanat update [skill]` |
22
+ | `status` | Show hub and skills status | `zanat status` |
21
23
 
22
24
  ## Getting Started
23
25
 
@@ -47,15 +49,31 @@ npm install -g @iamramo/zanat-cli
47
49
  zanat add company.team.code-review
48
50
  ```
49
51
 
50
- 4. **Remove a skill:**
52
+ 4. **List added skills:**
51
53
 
52
54
  ```bash
53
- zanat rm yurchi.code-review
55
+ zanat list
54
56
  ```
55
57
 
56
- 5. **List added skills:**
58
+ 5. **Update skills:**
59
+
57
60
  ```bash
58
- zanat list
61
+ # Update a specific skill
62
+ zanat update yurchi.code-review
63
+
64
+ # Update all skills
65
+ zanat update
66
+ ```
67
+
68
+ 6. **Check status:**
69
+
70
+ ```bash
71
+ zanat status
72
+ ```
73
+
74
+ 7. **Remove a skill:**
75
+ ```bash
76
+ zanat rm yurchi.code-review
59
77
  ```
60
78
 
61
79
  ## Configuration
package/dist/cli.js CHANGED
@@ -1,4 +1,4 @@
1
- import { createProgram } from '@iamramo/zanat-core';
1
+ import { Command } from '@iamramo/zanat-core';
2
2
  import packageJson from '../package.json' with { type: 'json' };
3
3
  import { initCommand } from './commands/init.js';
4
4
  import { syncCommand } from './commands/sync.js';
@@ -8,7 +8,7 @@ import { updateCommand } from './commands/update.js';
8
8
  import { listCommand } from './commands/list.js';
9
9
  import { searchCommand } from './commands/search.js';
10
10
  import { statusCommand } from './commands/status.js';
11
- const program = createProgram();
11
+ const program = Command.create();
12
12
  program.name('zanat').description('A skill hub for AI agents').version(packageJson.version);
13
13
  program.helpCommand(false);
14
14
  program
@@ -27,7 +27,6 @@ program
27
27
  program
28
28
  .command('update [skill]')
29
29
  .description('Update skill(s) from hub (updates all if no skill specified)')
30
- .option('-y, --yes', 'Skip confirmation prompt when updating all skills')
31
30
  .action(updateCommand);
32
31
  program.command('list').description('List added skills').action(listCommand);
33
32
  program.command('search [query]').description('Search for skills in the hub').action(searchCommand);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;AAChC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC5F,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAE3B,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAExF,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,wEAAwE,CAAC;KACrF,MAAM,CAAC,UAAU,CAAC,CAAC;AAEtB,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,2EAA2E,CAAC;KACxF,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,8DAA8D,CAAC;KAC3E,MAAM,CAAC,WAAW,EAAE,mDAAmD,CAAC;KACxE,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAE7E,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AAEpG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AAE1F,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;AACjC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC5F,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAE3B,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAExF,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,wEAAwE,CAAC;KACrF,MAAM,CAAC,UAAU,CAAC,CAAC;AAEtB,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,2EAA2E,CAAC;KACxF,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,8DAA8D,CAAC;KAC3E,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAE7E,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AAEpG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AAE1F,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,UAAU,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CA8B/D,CAAC"}
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,UAAU,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CAqC/D,CAAC"}
@@ -1,29 +1,33 @@
1
- import { addSkill, updateSkill, skillExists, logger, confirm, } from '@iamramo/zanat-core';
2
- import { validateSkillArg, ensureHubExists } from '../utils/validation.js';
1
+ import { Log, Prompt, LockFile, Skill, Path } from '@iamramo/zanat-core';
2
+ import { ensureHubExists } from '../utils/validation.js';
3
3
  export const addCommand = async (skillArg) => {
4
- logger.info(`Adding skill: ${skillArg}...`);
5
4
  try {
6
5
  await ensureHubExists();
7
- const { namespace, skillName } = validateSkillArg(skillArg);
8
- const exists = await skillExists(namespace, skillName);
6
+ Log.blue(`Adding skill: ${skillArg}...`);
7
+ const { namespace, skillName } = Path.toSkillParts(skillArg);
8
+ const fullSkillName = Path.getFullSkillName(namespace, skillName);
9
+ const exists = await LockFile.find(fullSkillName);
9
10
  if (exists) {
10
- const shouldUpdate = await confirm({
11
+ const shouldUpdate = await Prompt.confirm({
11
12
  message: `Skill ${skillArg} is already added. Update from hub?`,
12
13
  default: true,
13
14
  });
14
15
  if (!shouldUpdate) {
15
- logger.info('Cancelled');
16
+ Log.blue('Cancelled');
16
17
  return;
17
18
  }
18
- await updateSkill(namespace, skillName);
19
- logger.success(`Updated ${skillArg}`);
19
+ await Skill.update(namespace, skillName);
20
+ Log.green(`Updated ${skillArg}`, { prefix: '✓' });
20
21
  return;
21
22
  }
22
- await addSkill(namespace, skillName);
23
- logger.success(`Added ${skillArg}`);
23
+ const sourcePath = await Path.getSkillHubDir(namespace, skillName);
24
+ const targetPath = Path.getSkillTargetDir(fullSkillName);
25
+ const skillFile = Path.getSkillFile(sourcePath);
26
+ await Skill.add(namespace, skillName, skillFile, targetPath);
27
+ Log.green(`Added ${skillArg}`);
24
28
  }
25
- catch (error) {
26
- logger.error('Failed to add', error);
29
+ catch {
30
+ Log.red('Failed to add', { prefix: '✗' });
27
31
  process.exit(1);
28
32
  }
29
33
  };
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,WAAW,EACX,WAAW,EACX,MAAM,EACN,OAAO,GACR,MAAM,qBAAqB,CAAC;AAC7B,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,SAAS,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACvD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC;gBACjC,OAAO,EAAE,SAAS,QAAQ,qCAAqC;gBAC/D,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,MAAM,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,CAAC,WAAW,QAAQ,EAAE,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACrC,MAAM,CAAC,OAAO,CAAC,SAAS,QAAQ,EAAE,CAAC,CAAC;IACtC,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
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,QAAgB,EAAiB,EAAE;IAClE,IAAI,CAAC;QACH,MAAM,eAAe,EAAE,CAAC;QAExB,GAAG,CAAC,IAAI,CAAC,iBAAiB,QAAQ,KAAK,CAAC,CAAC;QAEzC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC7D,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAElE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAElD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;gBACxC,OAAO,EAAE,SAAS,QAAQ,qCAAqC;gBAC/D,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACtB,OAAO;YACT,CAAC;YAED,MAAM,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACzC,GAAG,CAAC,KAAK,CAAC,WAAW,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACnE,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAEhD,MAAM,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAC7D,GAAG,CAAC,KAAK,CAAC,SAAS,QAAQ,EAAE,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1C,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":"AAgBA,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,IAAI,CA0FhD,CAAC"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,IAAI,CA+EhD,CAAC"}
@@ -1,76 +1,63 @@
1
- import { ZANAT_DIR, AGENTS_DIR, CONFIG_FILE, getHubDir, saveConfig, cloneHub, isHubCloned, getHubStatus, loadConfig, logger, input, confirm, } from '@iamramo/zanat-core';
2
- import fs from 'fs-extra';
1
+ import { Path, Config, Fs, Git, Log, Format, Prompt } from '@iamramo/zanat-core';
3
2
  export const initCommand = async () => {
4
- logger.info('Initializing Zanat...');
5
- logger.blank();
3
+ Log.blue('Initializing Zanat...');
4
+ Log.blank();
6
5
  try {
7
- const hubExists = await isHubCloned();
8
- if (hubExists) {
9
- const status = await getHubStatus();
10
- const config = await loadConfig();
11
- logger.info('Zanat is already initialized.');
12
- logger.blank();
13
- if (status.remoteUrl) {
14
- console.log(`Repository: ${status.remoteUrl}`);
15
- }
16
- if (status.branch) {
17
- console.log(`Branch: ${status.branch}`);
18
- }
19
- logger.blank();
20
- const shouldReinitialize = await confirm({
6
+ const existingConfig = await Config.get().catch(() => undefined);
7
+ if (existingConfig) {
8
+ Log.blue('Zanat is already initialized.');
9
+ Log.blank();
10
+ Log.blue(`Repository: ${existingConfig.hubUrl}`);
11
+ Log.blue(`Branch: ${existingConfig.hubBranch}`);
12
+ Log.blank();
13
+ const shouldReinitialize = await Prompt.confirm({
21
14
  message: 'Reinitialize? Your hub directory will be replaced but added skills stay safe.',
22
15
  default: false,
23
16
  });
24
17
  if (!shouldReinitialize) {
25
- logger.blank();
26
- logger.info('Keeping existing setup.');
18
+ Log.blank();
19
+ Log.blue('Keeping existing setup.');
27
20
  return;
28
21
  }
29
- logger.blank();
30
- logger.info('Removing existing hub...');
31
- const existingHubDir = await getHubDir();
32
- await fs.remove(existingHubDir);
33
- logger.success('Removed existing hub');
34
- logger.blank();
22
+ Log.blank();
23
+ Log.blue('Removing existing hub...');
24
+ await Fs.remove(existingConfig.hubDir);
25
+ Log.green('Removed existing hub', { prefix: '✓' });
26
+ Log.blank();
35
27
  }
36
- const hubUrl = await input({
28
+ const hubUrl = await Prompt.input({
37
29
  message: 'Hub repository URL:',
38
- default: 'https://github.com/iamramo/zanat-hub.git',
30
+ required: true,
39
31
  });
40
- const hubBranch = await input({
32
+ const hubBranch = await Prompt.input({
41
33
  message: 'Hub branch:',
42
34
  default: 'main',
43
35
  });
44
- const hubDir = await input({
36
+ const hubDir = await Prompt.input({
45
37
  message: 'Hub directory path:',
46
- default: `${ZANAT_DIR}/hub`,
38
+ default: `${Path.ZANAT_DIR}/hub`,
47
39
  });
48
- logger.blank();
49
- logger.info('Setting up directories...');
50
- await fs.ensureDir(ZANAT_DIR);
51
- logger.success(`Created ${ZANAT_DIR}`);
52
- const config = {
40
+ Log.blank();
41
+ Log.blue('Setting up directories...');
42
+ await Fs.ensureDir(Path.ZANAT_DIR);
43
+ Log.green(`Created ${Path.ZANAT_DIR}`, { prefix: '✓' });
44
+ await Fs.ensureDir(Path.AGENTS_DIR);
45
+ Log.blank();
46
+ Log.blue('Cloning hub repository...');
47
+ await Git.clone(hubUrl, hubBranch, hubDir);
48
+ Log.green(`Cloned hub from branch ${hubBranch} to "${hubDir}"`, { prefix: '✓' });
49
+ await Fs.writeFile(Path.CONFIG_FILE, Format.json({
53
50
  hubUrl,
54
51
  hubBranch,
55
52
  hubDir,
56
53
  lastSync: new Date().toISOString(),
57
- };
58
- await fs.ensureDir(AGENTS_DIR);
59
- logger.blank();
60
- logger.info('Cloning hub repository...');
61
- const actualBranch = await cloneHub(hubUrl, hubBranch, hubDir);
62
- if (actualBranch !== hubBranch) {
63
- config.hubBranch = actualBranch;
64
- logger.warning(`Branch '${hubBranch}' not found, using '${actualBranch}' instead`);
65
- }
66
- logger.success(`Cloned hub to ${hubDir}`);
67
- await saveConfig(config);
68
- logger.success(`Created config.json in ${CONFIG_FILE}`);
69
- logger.blank();
70
- logger.success('Zanat initialized successfully!');
54
+ }));
55
+ Log.green(`Created config.json in ${Path.CONFIG_FILE}`, { prefix: '✓' });
56
+ Log.blank();
57
+ Log.green('Zanat initialized successfully!', { prefix: '✓' });
71
58
  }
72
- catch (error) {
73
- logger.error('Failed to initialize', error);
59
+ catch {
60
+ Log.red('Failed to initialize', { prefix: '✗' });
74
61
  process.exit(1);
75
62
  }
76
63
  };
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,UAAU,EACV,WAAW,EACX,SAAS,EACT,UAAU,EACV,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,UAAU,EACV,MAAM,EACN,KAAK,EACL,OAAO,GACR,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,IAAmB,EAAE;IACnD,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACrC,MAAM,CAAC,KAAK,EAAE,CAAC;IAEf,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,WAAW,EAAE,CAAC;QAEtC,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;YAElC,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAC7C,MAAM,CAAC,KAAK,EAAE,CAAC;YAEf,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;YACjD,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1C,CAAC;YAED,MAAM,CAAC,KAAK,EAAE,CAAC;YAEf,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC;gBACvC,OAAO,EAAE,+EAA+E;gBACxF,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;YAEH,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACxB,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;gBACvC,OAAO;YACT,CAAC;YAED,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACxC,MAAM,cAAc,GAAG,MAAM,SAAS,EAAE,CAAC;YACzC,MAAM,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAChC,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;YACvC,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;QAED,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,MAAM,GAAG,MAAM,KAAK,CAAC;YACzB,OAAO,EAAE,qBAAqB;YAC9B,OAAO,EAAE,GAAG,SAAS,MAAM;SAC5B,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAEzC,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;YACT,MAAM;YACN,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACnC,CAAC;QAEF,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAE/B,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACzC,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAC/D,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,CAAC,SAAS,GAAG,YAAY,CAAC;YAChC,MAAM,CAAC,OAAO,CAAC,WAAW,SAAS,uBAAuB,YAAY,WAAW,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,iBAAiB,MAAM,EAAE,CAAC,CAAC;QAE1C,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,MAAM,CAAC,OAAO,CAAC,0BAA0B,WAAW,EAAE,CAAC,CAAC;QAExD,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;IACpD,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
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAEjF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,IAAmB,EAAE;IACnD,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAClC,GAAG,CAAC,KAAK,EAAE,CAAC;IAEZ,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAEjE,IAAI,cAAc,EAAE,CAAC;YACnB,GAAG,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAC1C,GAAG,CAAC,KAAK,EAAE,CAAC;YAEZ,GAAG,CAAC,IAAI,CAAC,eAAe,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;YACjD,GAAG,CAAC,IAAI,CAAC,WAAW,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC;YAEhD,GAAG,CAAC,KAAK,EAAE,CAAC;YAEZ,MAAM,kBAAkB,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;gBAC9C,OAAO,EAAE,+EAA+E;gBACxF,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;YAEH,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACxB,GAAG,CAAC,KAAK,EAAE,CAAC;gBACZ,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;gBACpC,OAAO;YACT,CAAC;YAED,GAAG,CAAC,KAAK,EAAE,CAAC;YACZ,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACrC,MAAM,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACvC,GAAG,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACnD,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;YAChC,OAAO,EAAE,qBAAqB;YAC9B,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;YACnC,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;YAChC,OAAO,EAAE,qBAAqB;YAC9B,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,MAAM;SACjC,CAAC,CAAC;QAEH,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAEtC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnC,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAExD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEpC,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACtC,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAC3C,GAAG,CAAC,KAAK,CAAC,0BAA0B,SAAS,QAAQ,MAAM,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAEjF,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,WAAW,EAChB,MAAM,CAAC,IAAI,CAAC;YACV,MAAM;YACN,SAAS;YACT,MAAM;YACN,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACnC,CAAC,CACH,CAAC;QACF,GAAG,CAAC,KAAK,CAAC,0BAA0B,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAEzE,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,GAAG,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,CAAC,GAAG,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACjD,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":"AAIA,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,IAAI,CAyBhD,CAAC"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,IAAI,CA6BhD,CAAC"}
@@ -1,25 +1,28 @@
1
- import { getAddedSkills, logger } from '@iamramo/zanat-core';
2
- import chalk from 'chalk';
1
+ import { LockFile, Display, Log } from '@iamramo/zanat-core';
3
2
  import { ensureHubExists } from '../utils/validation.js';
4
3
  export const listCommand = async () => {
5
4
  try {
6
5
  await ensureHubExists();
7
- const skills = await getAddedSkills();
8
- if (skills.length === 0) {
9
- logger.dim('No skills added.');
10
- logger.dim('Run `zanat search` to find skills or `zanat add <skill>` to add one.');
6
+ const skills = await LockFile.findAll();
7
+ const skillNames = Object.keys(skills);
8
+ if (skillNames.length === 0) {
9
+ Log.gray('No skills added.');
10
+ Log.gray('Run `zanat search` to find skills or `zanat add <skill>` to add one.');
11
11
  return;
12
12
  }
13
- logger.info('Added skills:');
14
- logger.blank();
15
- skills.forEach((skill) => {
16
- console.log(chalk.green('•'), skill);
13
+ Log.blue('Added skills:');
14
+ Log.blank();
15
+ skillNames.forEach((skillName) => {
16
+ const skill = skills[skillName];
17
+ Log.green(`${skillName} ${Display.getDisplayVersion(skill?.version ?? 'latest')}`, {
18
+ prefix: '•',
19
+ });
17
20
  });
18
- logger.blank();
19
- logger.dim(`Total: ${skills.length} skill${skills.length === 1 ? '' : 's'}`);
21
+ Log.blank();
22
+ Log.gray(`Total: ${skillNames.length} skill${skillNames.length === 1 ? '' : 's'}`);
20
23
  }
21
- catch (error) {
22
- logger.error('Failed to list skills', error);
24
+ catch {
25
+ Log.red('Failed to list skills', { prefix: '✗' });
23
26
  process.exit(1);
24
27
  }
25
28
  };
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,IAAmB,EAAE;IACnD,IAAI,CAAC;QACH,MAAM,eAAe,EAAE,CAAC;QAExB,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,eAAe,CAAC,CAAC;QAC7B,MAAM,CAAC,KAAK,EAAE,CAAC;QAEf,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,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/E,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
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,IAAmB,EAAE;IACnD,IAAI,CAAC;QACH,MAAM,eAAe,EAAE,CAAC;QAExB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEvC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;YACjF,OAAO;QACT,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC1B,GAAG,CAAC,KAAK,EAAE,CAAC;QAEZ,UAAU,CAAC,OAAO,CAAC,CAAC,SAAiB,EAAE,EAAE;YACvC,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;YAChC,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,IAAI,OAAO,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,IAAI,QAAQ,CAAC,EAAE,EAAE;gBACjF,MAAM,EAAE,GAAG;aACZ,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,GAAG,CAAC,IAAI,CAAC,UAAU,UAAU,CAAC,MAAM,SAAS,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACrF,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,CAAC,GAAG,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAClD,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":"AAGA,eAAO,MAAM,aAAa,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CAalE,CAAC"}
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,CAuBlE,CAAC"}
@@ -1,15 +1,23 @@
1
- import { removeSkill, logger } from '@iamramo/zanat-core';
2
- import { validateSkillArg, ensureHubExists } from '../utils/validation.js';
1
+ import { Skill, Fs, Path, Log } from '@iamramo/zanat-core';
2
+ import path from 'node:path';
3
+ import { ensureHubExists } from '../utils/validation.js';
3
4
  export const removeCommand = async (skillArg) => {
4
- logger.info(`Removing skill: ${skillArg}...`);
5
5
  try {
6
6
  await ensureHubExists();
7
- const { namespace, skillName } = validateSkillArg(skillArg);
8
- await removeSkill(namespace, skillName);
9
- logger.success(`Removed ${skillArg}`);
7
+ Log.blue(`Removing skill: ${skillArg}...`);
8
+ const { namespace, skillName } = Path.toSkillParts(skillArg);
9
+ const fullSkillName = Path.getFullSkillName(namespace, skillName);
10
+ const skillPath = path.join(Path.AGENTS_SKILLS_DIR, fullSkillName);
11
+ const exists = await Fs.exists(skillPath);
12
+ if (!exists) {
13
+ Log.red('Skill not found.', { prefix: '✗' });
14
+ return;
15
+ }
16
+ await Skill.remove(skillPath);
17
+ Log.green(`Removed ${skillArg}`, { prefix: '✓' });
10
18
  }
11
- catch (error) {
12
- logger.error('Failed to remove', error);
19
+ catch {
20
+ Log.red('Failed to remove', { prefix: '✗' });
13
21
  process.exit(1);
14
22
  }
15
23
  };
@@ -1 +1 @@
1
- {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC1D,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,SAAS,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC5D,MAAM,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAExC,MAAM,CAAC,OAAO,CAAC,WAAW,QAAQ,EAAE,CAAC,CAAC;IACxC,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
+ {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,QAAgB,EAAiB,EAAE;IACrE,IAAI,CAAC;QACH,MAAM,eAAe,EAAE,CAAC;QAExB,GAAG,CAAC,IAAI,CAAC,mBAAmB,QAAQ,KAAK,CAAC,CAAC;QAE3C,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC7D,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAClE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;QAEnE,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,GAAG,CAAC,GAAG,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,MAAM,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAE9B,GAAG,CAAC,KAAK,CAAC,WAAW,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,CAAC,GAAG,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7C,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":"AAgBA,eAAO,MAAM,aAAa,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAgChE,CAAC"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CA4BhE,CAAC"}
@@ -1,43 +1,27 @@
1
- import { searchSkills, logger } from '@iamramo/zanat-core';
2
- import chalk from 'chalk';
1
+ import { Skill, Log, Display } from '@iamramo/zanat-core';
3
2
  import { ensureHubExists } from '../utils/validation.js';
4
- const ELLIPSIS = '...';
5
- const truncateDescription = (description, maxLength = 256) => {
6
- if (description.length <= maxLength)
7
- return description;
8
- const lastSpace = description.lastIndexOf(' ', maxLength - ELLIPSIS.length);
9
- if (lastSpace === -1) {
10
- return description.slice(0, maxLength - ELLIPSIS.length) + ELLIPSIS;
11
- }
12
- return description.slice(0, lastSpace) + ELLIPSIS;
13
- };
14
3
  export const searchCommand = async (query) => {
15
4
  try {
16
5
  await ensureHubExists();
17
- if (query) {
18
- logger.info(`Searching for: "${query}"...`);
19
- }
20
- else {
21
- logger.info('Available skills:');
22
- }
23
- logger.blank();
24
- const results = await searchSkills(query);
6
+ query ? Log.blue(`Searching for: "${query}"...`) : Log.blue('Available skills:');
7
+ Log.blank();
8
+ const results = query ? await Skill.search(query) : await Skill.findAll();
25
9
  if (results.length === 0) {
26
- logger.dim('No skills found.');
10
+ Log.gray('No skills found.');
27
11
  return;
28
12
  }
29
13
  results.forEach((skill) => {
30
- console.log(chalk.green('•'), skill.fullName);
31
- const truncatedDesc = truncateDescription(skill.description);
32
- logger.dim(` ${truncatedDesc}`);
33
- logger.blank();
14
+ Log.green(skill.fullName, { prefix: '•' });
15
+ const truncatedDesc = Display.truncate(skill.description);
16
+ Log.gray(truncatedDesc, { spacing: 2 });
17
+ Log.blank();
34
18
  });
35
- logger.dim(`Found ${results.length} skill${results.length === 1 ? '' : 's'}`);
36
- logger.blank();
37
- logger.dim('Add a skill with: zanat add <namespace.skill-name>');
19
+ Log.gray(`Found ${results.length} skill(s)`);
20
+ Log.blank();
21
+ Log.gray('Add a skill with: zanat add <skill>');
38
22
  }
39
- catch (error) {
40
- logger.error('Failed to search', error);
23
+ catch {
24
+ Log.red('Failed to search', { prefix: '✗' });
41
25
  process.exit(1);
42
26
  }
43
27
  };
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,QAAQ,GAAG,KAAK,CAAC;AAEvB,MAAM,mBAAmB,GAAG,CAAC,WAAmB,EAAE,SAAS,GAAG,GAAG,EAAU,EAAE;IAC3E,IAAI,WAAW,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO,WAAW,CAAC;IAExD,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5E,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;IACtE,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC;AACpD,CAAC,CAAC;AAEF,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,MAAM,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,CAAC;QAEf,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,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC9C,MAAM,aAAa,GAAG,mBAAmB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC7D,MAAM,CAAC,GAAG,CAAC,KAAK,aAAa,EAAE,CAAC,CAAC;YACjC,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,MAAM,SAAS,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9E,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IACnE,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
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC1D,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,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACjF,GAAG,CAAC,KAAK,EAAE,CAAC;QAEZ,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;QAE1E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACxB,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC3C,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC1D,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;YACxC,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,WAAW,CAAC,CAAC;QAC7C,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,GAAG,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,CAAC,GAAG,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,aAAa,QAAa,OAAO,CAAC,IAAI,CAiDlD,CAAC"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,QAAa,OAAO,CAAC,IAAI,CA+ClD,CAAC"}
@@ -1,63 +1,46 @@
1
- import { getHubStatus, getAddedSkills, loadConfig, logger } from '@iamramo/zanat-core';
2
- import chalk from 'chalk';
3
- const formatLastSync = (lastSync) => {
4
- if (!lastSync)
5
- return 'Never';
6
- const last = new Date(lastSync);
7
- const now = new Date();
8
- const diffMs = now.getTime() - last.getTime();
9
- const diffMins = Math.floor(diffMs / 60000);
10
- const diffHours = Math.floor(diffMs / 3600000);
11
- const diffDays = Math.floor(diffMs / 86400000);
12
- if (diffMins < 1)
13
- return 'Just now';
14
- if (diffMins < 60)
15
- return `${diffMins} minute${diffMins === 1 ? '' : 's'} ago`;
16
- if (diffHours < 24)
17
- return `${diffHours} hour${diffHours === 1 ? '' : 's'} ago`;
18
- if (diffDays < 7)
19
- return `${diffDays} day${diffDays === 1 ? '' : 's'} ago`;
20
- return last.toLocaleDateString();
21
- };
1
+ import { Fs, Git, LockFile, Display, Config, Log } from '@iamramo/zanat-core';
2
+ import { ensureHubExists } from '../utils/validation.js';
22
3
  export const statusCommand = async () => {
23
4
  try {
24
- const hubStatus = await getHubStatus();
25
- const skills = await getAddedSkills();
26
- const config = await loadConfig();
27
- logger.info('Hub Status:');
28
- logger.blank();
29
- if (!hubStatus.initialized) {
30
- logger.dim('Not initialized');
31
- logger.dim('Run `zanat init` to set up');
32
- return;
33
- }
34
- console.log(chalk.green('•'), 'Initialized:', chalk.bold('yes'));
35
- if (hubStatus.remoteUrl) {
36
- console.log(chalk.green('•'), 'Repository:', chalk.bold(hubStatus.remoteUrl));
37
- }
38
- if (hubStatus.branch) {
39
- console.log(chalk.green('•'), 'Branch:', chalk.bold(hubStatus.branch));
40
- }
41
- console.log(chalk.green('•'), 'Last sync:', chalk.bold(formatLastSync(config?.lastSync)));
42
- if (hubStatus.behind > 0) {
43
- logger.warning(`Behind: ${hubStatus.behind} commit${hubStatus.behind === 1 ? '' : 's'}`);
5
+ await ensureHubExists();
6
+ const skills = await LockFile.findAll();
7
+ const skillNames = Object.keys(skills);
8
+ const config = await Config.get();
9
+ Log.blue('Hub Status:');
10
+ Log.blank();
11
+ Log.green(`Initialized: ${Log.bold('yes')}`, { prefix: '•', spacing: 2 });
12
+ Log.green(`Repository: ${Log.bold(config.hubUrl)}`, { prefix: '•', spacing: 2 });
13
+ Log.green(`Branch: ${Log.bold(config.hubBranch)}`, { prefix: '•', spacing: 2 });
14
+ Log.green(`Last sync: ${Log.bold(Display.timeAgo(config?.lastSync))}`, {
15
+ prefix: '•',
16
+ spacing: 2,
17
+ });
18
+ const behind = await Git.behind(config.hubDir, config.hubBranch);
19
+ if (behind > 0) {
20
+ Log.yellow(`Behind: ${behind} commit(s)`, { prefix: '•', spacing: 2 });
44
21
  }
45
22
  else {
46
- console.log(chalk.green('•'), 'Behind: 0 commits (up-to-date)');
23
+ Log.green(`Behind: ${Log.bold('up-to-date')}`, { prefix: '•', spacing: 2 });
47
24
  }
48
- logger.blank();
49
- logger.info('Skills:');
50
- logger.blank();
51
- console.log(chalk.green('•'), 'Added:', chalk.bold(skills.length.toString()));
52
- if (skills.length > 0) {
53
- skills.forEach((skill) => {
54
- console.log(' ', chalk.dim(''), skill);
25
+ Log.blank();
26
+ Log.blue('Skills:');
27
+ Log.blank();
28
+ if (skillNames.length > 0) {
29
+ skillNames.forEach((skillName) => {
30
+ const skill = skills[skillName];
31
+ Log.green(`${skillName} ${Display.getDisplayVersion(skill?.version ?? 'latest')}`, {
32
+ prefix: '•',
33
+ spacing: 2,
34
+ });
55
35
  });
56
36
  }
57
- logger.blank();
37
+ else {
38
+ Log.gray('No skills added.', { spacing: 2 });
39
+ }
40
+ Log.blank();
58
41
  }
59
- catch (error) {
60
- logger.error('Failed to get status', error);
42
+ catch {
43
+ Log.red('Failed to get status', { prefix: '✗' });
61
44
  process.exit(1);
62
45
  }
63
46
  };
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,IAAI,CAkBhD,CAAC"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,IAAI,CAiBhD,CAAC"}
@@ -1,19 +1,17 @@
1
- import { pullHub, saveConfig, loadConfig, logger } from '@iamramo/zanat-core';
1
+ import { Git, Config, Log } from '@iamramo/zanat-core';
2
2
  import { ensureHubExists } from '../utils/validation.js';
3
3
  export const syncCommand = async () => {
4
- logger.info('Syncing with hub...');
5
4
  try {
6
5
  await ensureHubExists();
7
- await pullHub();
8
- const config = await loadConfig();
9
- if (config) {
10
- config.lastSync = new Date().toISOString();
11
- await saveConfig(config);
12
- }
13
- logger.success('Hub synced successfully');
6
+ Log.blue('Syncing with hub...');
7
+ const config = await Config.get();
8
+ await Git.pull(config.hubDir);
9
+ config.lastSync = new Date().toISOString();
10
+ await Config.update(config);
11
+ Log.green('Hub synced successfully', { prefix: '✓' });
14
12
  }
15
- catch (error) {
16
- logger.error('Failed to sync', error);
13
+ catch {
14
+ Log.red('Failed to sync', { prefix: '✗' });
17
15
  process.exit(1);
18
16
  }
19
17
  };
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC9E,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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,IAAmB,EAAE;IACnD,IAAI,CAAC;QACH,MAAM,eAAe,EAAE,CAAC;QAExB,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAEhC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;QAClC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE9B,MAAM,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE5B,GAAG,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC"}
@@ -1,6 +1,2 @@
1
- interface UpdateOptions {
2
- yes?: boolean;
3
- }
4
- export declare const updateCommand: (skillArg: string | undefined, options: UpdateOptions) => Promise<void>;
5
- export {};
1
+ export declare const updateCommand: (skillArg: string | undefined) => Promise<void>;
6
2
  //# sourceMappingURL=update.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AASA,UAAU,aAAa;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,eAAO,MAAM,aAAa,GACxB,UAAU,MAAM,GAAG,SAAS,EAC5B,SAAS,aAAa,KACrB,OAAO,CAAC,IAAI,CAqDd,CAAC"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,GAAU,UAAU,MAAM,GAAG,SAAS,KAAG,OAAO,CAAC,IAAI,CAwC9E,CAAC"}
@@ -1,51 +1,37 @@
1
- import { updateSkill, updateAllSkills, getAddedSkills, logger, confirm, } from '@iamramo/zanat-core';
2
- import { validateSkillArg, ensureHubExists } from '../utils/validation.js';
3
- export const updateCommand = async (skillArg, options) => {
1
+ import { Log, Prompt, LockFile, Path, Skill } from '@iamramo/zanat-core';
2
+ import { ensureHubExists } from '../utils/validation.js';
3
+ export const updateCommand = async (skillArg) => {
4
4
  try {
5
5
  await ensureHubExists();
6
+ // Update one skill
6
7
  if (skillArg) {
7
- // Update specific skill
8
- logger.info(`Updating skill: ${skillArg}...`);
9
- const { namespace, skillName } = validateSkillArg(skillArg);
10
- await updateSkill(namespace, skillName);
11
- logger.success(`Updated ${skillArg}`);
8
+ const { namespace, skillName } = Path.toSkillParts(skillArg);
9
+ Log.blue(`Updating skill: ${skillArg}...`);
10
+ await Skill.update(namespace, skillName);
11
+ Log.green(`Updated ${skillArg}`, { prefix: '✓' });
12
+ return;
12
13
  }
13
- else {
14
- // Update all skills
15
- const addedSkills = await getAddedSkills();
16
- if (addedSkills.length === 0) {
17
- logger.info('No skills to update');
18
- return;
19
- }
20
- if (!options.yes) {
21
- const shouldUpdate = await confirm({
22
- message: `This will update ${addedSkills.length} skill(s). Continue?`,
23
- default: true,
24
- });
25
- if (!shouldUpdate) {
26
- logger.info('Update cancelled');
27
- return;
28
- }
29
- }
30
- logger.info(`Updating ${addedSkills.length} skill(s)...`);
31
- const { updated, failed } = await updateAllSkills();
32
- if (updated.length > 0) {
33
- logger.success(`Updated ${updated.length} skill(s)`);
34
- for (const skill of updated) {
35
- logger.success(` ✓ ${skill}`);
36
- }
37
- }
38
- if (failed.length > 0) {
39
- logger.error(`Failed to update ${failed.length} skill(s)`);
40
- for (const { skill, error } of failed) {
41
- logger.error(` ✗ ${skill}: ${error}`);
42
- }
43
- process.exit(1);
44
- }
14
+ // Update all skill
15
+ const skills = await LockFile.findAll();
16
+ const addedSkills = Object.keys(skills);
17
+ if (addedSkills.length === 0) {
18
+ Log.blue('No skills to update');
19
+ return;
45
20
  }
21
+ const shouldUpdate = await Prompt.confirm({
22
+ message: `This will update ${addedSkills.length} skill(s). Continue?`,
23
+ default: true,
24
+ });
25
+ if (!shouldUpdate) {
26
+ Log.blue('Update cancelled');
27
+ return;
28
+ }
29
+ Log.blue(`Updating ${addedSkills.length} skill(s)...`);
30
+ await Skill.updateAll();
31
+ Log.green('Updated all skills', { prefix: '✓' });
46
32
  }
47
- catch (error) {
48
- logger.error('Failed to update', error);
33
+ catch {
34
+ Log.red('Failed to update', { prefix: '✗' });
49
35
  process.exit(1);
50
36
  }
51
37
  };
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,eAAe,EACf,cAAc,EACd,MAAM,EACN,OAAO,GACR,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAM3E,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAChC,QAA4B,EAC5B,OAAsB,EACP,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,eAAe,EAAE,CAAC;QAExB,IAAI,QAAQ,EAAE,CAAC;YACb,wBAAwB;YACxB,MAAM,CAAC,IAAI,CAAC,mBAAmB,QAAQ,KAAK,CAAC,CAAC;YAC9C,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC5D,MAAM,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,CAAC,WAAW,QAAQ,EAAE,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,oBAAoB;YACpB,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;YAE3C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBACnC,OAAO;YACT,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;gBACjB,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC;oBACjC,OAAO,EAAE,oBAAoB,WAAW,CAAC,MAAM,sBAAsB;oBACrE,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;gBAEH,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;oBAChC,OAAO;gBACT,CAAC;YACH,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,YAAY,WAAW,CAAC,MAAM,cAAc,CAAC,CAAC;YAC1D,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;YAEpD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,CAAC,OAAO,CAAC,WAAW,OAAO,CAAC,MAAM,WAAW,CAAC,CAAC;gBACrD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC5B,MAAM,CAAC,OAAO,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,CAAC,KAAK,CAAC,oBAAoB,MAAM,CAAC,MAAM,WAAW,CAAC,CAAC;gBAC3D,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,CAAC;oBACtC,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC;gBACzC,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,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
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,QAA4B,EAAiB,EAAE;IACjF,IAAI,CAAC;QACH,MAAM,eAAe,EAAE,CAAC;QAExB,mBAAmB;QACnB,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAE7D,GAAG,CAAC,IAAI,CAAC,mBAAmB,QAAQ,KAAK,CAAC,CAAC;YAC3C,MAAM,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACzC,GAAG,CAAC,KAAK,CAAC,WAAW,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QAED,mBAAmB;QACnB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAExC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;YACxC,OAAO,EAAE,oBAAoB,WAAW,CAAC,MAAM,sBAAsB;YACrE,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,YAAY,WAAW,CAAC,MAAM,cAAc,CAAC,CAAC;QACvD,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;QACxB,GAAG,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,CAAC,GAAG,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC"}
@@ -1,4 +1,2 @@
1
- import { type SkillArg } from '../schemas/skill-arg.js';
2
- export declare const validateSkillArg: (skillArg: string) => SkillArg;
3
1
  export declare const ensureHubExists: () => Promise<void>;
4
2
  //# sourceMappingURL=validation.d.ts.map
@@ -1 +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;AAExE,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,KAAG,QASnD,CAAC;AAEF,eAAO,MAAM,eAAe,QAAa,OAAO,CAAC,IAAI,CAMpD,CAAC"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,QAAa,OAAO,CAAC,IAAI,CAMpD,CAAC"}
@@ -1,19 +1,8 @@
1
- import { isHubCloned, logger } from '@iamramo/zanat-core';
2
- import { SkillArgSchema } from '../schemas/skill-arg.js';
3
- export const validateSkillArg = (skillArg) => {
4
- const result = SkillArgSchema.safeParse(skillArg);
5
- if (!result.success) {
6
- const errorMessage = result.error.issues[0]?.message ?? 'Invalid skill format';
7
- logger.error(errorMessage);
8
- logger.dim('Example: mycompany.hello-world or mycompany.team.hello-world');
9
- process.exit(1);
10
- }
11
- return result.data;
12
- };
1
+ import { Config, Log } from '@iamramo/zanat-core';
13
2
  export const ensureHubExists = async () => {
14
- const hubExists = await isHubCloned();
15
- if (!hubExists) {
16
- logger.error('Hub not found. Run `zanat init` first.');
3
+ const config = await Config.get().catch(() => undefined);
4
+ if (!config) {
5
+ Log.red('Hub not found. Run `zanat init` first.', { prefix: '✗' });
17
6
  process.exit(1);
18
7
  }
19
8
  };
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAiB,MAAM,yBAAyB,CAAC;AAExE,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,8DAA8D,CAAC,CAAC;QAC3E,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"}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,IAAmB,EAAE;IACvD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACzD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,GAAG,CAAC,GAAG,CAAC,wCAAwC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACnE,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.8.0",
3
+ "version": "0.10.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.8.0"
30
+ "@iamramo/zanat-core": "^0.10.0"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@types/node": "^25.5.0",
@@ -1,5 +0,0 @@
1
- export { SourceNameSchema, type SourceName } from './source-name.js';
2
- export { SkillNameSchema, type SkillName } from './skill-name.js';
3
- export { SkillArgSchema, type SkillArg } from './skill-arg.js';
4
- export * from './common.js';
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/D,cAAc,aAAa,CAAC"}
@@ -1,5 +0,0 @@
1
- export { SourceNameSchema } from './source-name.js';
2
- export { SkillNameSchema } from './skill-name.js';
3
- export { SkillArgSchema } from './skill-arg.js';
4
- export * from './common.js';
5
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAmB,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAkB,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAiB,MAAM,gBAAgB,CAAC;AAC/D,cAAc,aAAa,CAAC"}
@@ -1,10 +0,0 @@
1
- import { z } from 'zod';
2
- export declare const SkillArgSchema: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<{
3
- namespace: string[];
4
- skillName: string | undefined;
5
- }, string>>, z.ZodObject<{
6
- namespace: z.ZodArray<z.ZodString>;
7
- skillName: z.ZodString;
8
- }, z.core.$strip>>;
9
- export type SkillArg = z.infer<typeof SkillArgSchema>;
10
- //# sourceMappingURL=skill-arg.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill-arg.d.ts","sourceRoot":"","sources":["../../src/schemas/skill-arg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,cAAc;;;;;;kBAqBxB,CAAC;AAEJ,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC"}
@@ -1,22 +0,0 @@
1
- import { z } from 'zod';
2
- import { SegmentNameSchema } from './segment-name.js';
3
- export const SkillArgSchema = z
4
- .string()
5
- .transform((val, ctx) => {
6
- const parts = val.split('.');
7
- if (parts.length < 2) {
8
- ctx.addIssue({
9
- code: z.ZodIssueCode.custom,
10
- message: 'Invalid format. Use: namespace.skill-name or namespace.subnamespace.skill-name (e.g., mycompany.hello-world or mycompany.team.hello-world)',
11
- });
12
- return z.NEVER;
13
- }
14
- const skillName = parts[parts.length - 1];
15
- const namespace = parts.slice(0, -1);
16
- return { namespace, skillName };
17
- })
18
- .pipe(z.object({
19
- namespace: z.array(SegmentNameSchema).min(1),
20
- skillName: SegmentNameSchema,
21
- }));
22
- //# sourceMappingURL=skill-arg.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill-arg.js","sourceRoot":"","sources":["../../src/schemas/skill-arg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,MAAM,EAAE;KACR,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IACtB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EACL,4IAA4I;SAC/I,CAAC,CAAC;QACH,OAAO,CAAC,CAAC,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAClC,CAAC,CAAC;KACD,IAAI,CACH,CAAC,CAAC,MAAM,CAAC;IACP,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,SAAS,EAAE,iBAAiB;CAC7B,CAAC,CACH,CAAC"}