@annals/agent-mesh 0.16.1 → 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 +23 -8
  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,12 +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 agentsDir = join8(projectRoot, ".agents", "skills");
3473
- if (await pathExists(agentsDir)) {
3474
- return { projectRoot, skillsDir: agentsDir, convention: "agents" };
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 {
3482
+ }
3483
+ try {
3484
+ await rm(linkPath, { recursive: true, force: true });
3485
+ } catch {
3475
3486
  }
3476
- const claudeDir = join8(projectRoot, ".claude", "skills");
3477
- return { projectRoot, skillsDir: claudeDir, convention: "claude" };
3487
+ await symlink(`../../.agents/skills/${slug}`, linkPath);
3478
3488
  }
3479
3489
  async function collectPackFiles(dir, manifest) {
3480
3490
  const results = [];
@@ -3836,7 +3846,7 @@ function registerSkillsCommand(program2) {
3836
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) => {
3837
3847
  try {
3838
3848
  const { authorLogin, slug } = parseSkillRef(ref);
3839
- const { skillsDir } = await resolveSkillsRootAsync(pathArg);
3849
+ const { skillsDir, claudeSkillsDir } = await resolveSkillsRootAsync(pathArg);
3840
3850
  const targetDir = join8(skillsDir, slug);
3841
3851
  if (await pathExists(targetDir)) {
3842
3852
  if (!opts.force) {
@@ -3847,6 +3857,7 @@ function registerSkillsCommand(program2) {
3847
3857
  slog.info(`Installing ${authorLogin}/${slug}...`);
3848
3858
  const client = createClient();
3849
3859
  const result = await downloadAndInstallSkill(client, authorLogin, slug, skillsDir);
3860
+ await ensureClaudeSymlink(claudeSkillsDir, slug);
3850
3861
  slog.success(`Installed ${result.name} (${result.files_count} files)`);
3851
3862
  outputJson({
3852
3863
  success: true,
@@ -3946,12 +3957,16 @@ function registerSkillsCommand(program2) {
3946
3957
  });
3947
3958
  skills.command("remove <slug> [path]").description("Remove a locally installed skill").action(async (slug, pathArg) => {
3948
3959
  try {
3949
- const { skillsDir } = await resolveSkillsRootAsync(pathArg);
3960
+ const { skillsDir, claudeSkillsDir } = await resolveSkillsRootAsync(pathArg);
3950
3961
  const targetDir = join8(skillsDir, slug);
3951
3962
  if (!await pathExists(targetDir)) {
3952
3963
  outputError("not_installed", `Skill "${slug}" is not installed at ${targetDir}`);
3953
3964
  }
3954
3965
  await rm(targetDir, { recursive: true, force: true });
3966
+ try {
3967
+ await unlink(join8(claudeSkillsDir, slug));
3968
+ } catch {
3969
+ }
3955
3970
  slog.success(`Removed skill: ${slug}`);
3956
3971
  outputJson({ success: true, removed: slug, path: targetDir });
3957
3972
  } catch (err) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@annals/agent-mesh",
3
- "version": "0.16.1",
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": {