@annals/agent-mesh 0.16.2 → 0.16.3

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 (2) hide show
  1. package/dist/index.js +22 -10
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -3152,7 +3152,7 @@ function registerChatCommand(program2) {
3152
3152
  }
3153
3153
 
3154
3154
  // src/commands/skills.ts
3155
- import { readFile as readFile4, writeFile as writeFile3, readdir as readdir2, mkdir as mkdir2, rm } from "fs/promises";
3155
+ import { readFile as readFile4, writeFile as writeFile3, readdir as readdir2, mkdir as mkdir2, rm, symlink, unlink } from "fs/promises";
3156
3156
  import { join as join8, resolve, relative as relative4 } from "path";
3157
3157
 
3158
3158
  // src/utils/skill-parser.ts
@@ -3469,15 +3469,22 @@ function skillApiPath(authorLogin, slug) {
3469
3469
  }
3470
3470
  async function resolveSkillsRootAsync(pathArg) {
3471
3471
  const projectRoot = pathArg ? resolve(pathArg) : process.cwd();
3472
- const claudeDir = join8(projectRoot, ".claude", "skills");
3473
- if (await pathExists(claudeDir)) {
3474
- return { projectRoot, skillsDir: claudeDir, convention: "claude" };
3472
+ const skillsDir = join8(projectRoot, ".agents", "skills");
3473
+ const claudeSkillsDir = join8(projectRoot, ".claude", "skills");
3474
+ return { projectRoot, skillsDir, claudeSkillsDir };
3475
+ }
3476
+ async function ensureClaudeSymlink(claudeSkillsDir, slug) {
3477
+ await mkdir2(claudeSkillsDir, { recursive: true });
3478
+ const linkPath = join8(claudeSkillsDir, slug);
3479
+ try {
3480
+ await unlink(linkPath);
3481
+ } catch {
3475
3482
  }
3476
- const agentsDir = join8(projectRoot, ".agents", "skills");
3477
- if (await pathExists(agentsDir)) {
3478
- return { projectRoot, skillsDir: agentsDir, convention: "agents" };
3483
+ try {
3484
+ await rm(linkPath, { recursive: true, force: true });
3485
+ } catch {
3479
3486
  }
3480
- return { projectRoot, skillsDir: claudeDir, convention: "claude" };
3487
+ await symlink(`../../.agents/skills/${slug}`, linkPath);
3481
3488
  }
3482
3489
  async function collectPackFiles(dir, manifest) {
3483
3490
  const results = [];
@@ -3839,7 +3846,7 @@ function registerSkillsCommand(program2) {
3839
3846
  skills.command("install <ref> [path]").description("Install a skill from agents.hot (use author/slug format)").option("--force", "Overwrite if already installed").action(async (ref, pathArg, opts) => {
3840
3847
  try {
3841
3848
  const { authorLogin, slug } = parseSkillRef(ref);
3842
- const { skillsDir } = await resolveSkillsRootAsync(pathArg);
3849
+ const { skillsDir, claudeSkillsDir } = await resolveSkillsRootAsync(pathArg);
3843
3850
  const targetDir = join8(skillsDir, slug);
3844
3851
  if (await pathExists(targetDir)) {
3845
3852
  if (!opts.force) {
@@ -3850,6 +3857,7 @@ function registerSkillsCommand(program2) {
3850
3857
  slog.info(`Installing ${authorLogin}/${slug}...`);
3851
3858
  const client = createClient();
3852
3859
  const result = await downloadAndInstallSkill(client, authorLogin, slug, skillsDir);
3860
+ await ensureClaudeSymlink(claudeSkillsDir, slug);
3853
3861
  slog.success(`Installed ${result.name} (${result.files_count} files)`);
3854
3862
  outputJson({
3855
3863
  success: true,
@@ -3949,12 +3957,16 @@ function registerSkillsCommand(program2) {
3949
3957
  });
3950
3958
  skills.command("remove <slug> [path]").description("Remove a locally installed skill").action(async (slug, pathArg) => {
3951
3959
  try {
3952
- const { skillsDir } = await resolveSkillsRootAsync(pathArg);
3960
+ const { skillsDir, claudeSkillsDir } = await resolveSkillsRootAsync(pathArg);
3953
3961
  const targetDir = join8(skillsDir, slug);
3954
3962
  if (!await pathExists(targetDir)) {
3955
3963
  outputError("not_installed", `Skill "${slug}" is not installed at ${targetDir}`);
3956
3964
  }
3957
3965
  await rm(targetDir, { recursive: true, force: true });
3966
+ try {
3967
+ await unlink(join8(claudeSkillsDir, slug));
3968
+ } catch {
3969
+ }
3958
3970
  slog.success(`Removed skill: ${slug}`);
3959
3971
  outputJson({ success: true, removed: slug, path: targetDir });
3960
3972
  } catch (err) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@annals/agent-mesh",
3
- "version": "0.16.2",
3
+ "version": "0.16.3",
4
4
  "description": "CLI bridge connecting local AI agents to the Agents.Hot platform",
5
5
  "type": "module",
6
6
  "bin": {