diff --git a/src/commands/skill/skill.test.ts b/src/commands/skill/skill.test.ts index 0f074a3..b9cfecb 100644 --- a/src/commands/skill/skill.test.ts +++ b/src/commands/skill/skill.test.ts @@ -1,5 +1,5 @@ import { mkdir, readFile, rm, stat } from 'node:fs/promises' -import { tmpdir } from 'node:os' +import { homedir, tmpdir } from 'node:os' import { join } from 'node:path' import { captureConsole, createTestProgram } from '@doist/cli-core/testing' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' @@ -102,6 +102,15 @@ describe('installer paths', () => { } }) +describe('Pi installer paths', () => { + it('installs global skills under the Pi agent directory', () => { + const expectedPath = join(homedir(), '.pi', 'agent', 'skills', 'comms-cli', 'SKILL.md') + + expect(skillInstallers.pi.getInstallPath({})).toBe(expectedPath) + expect(skillInstallers.pi.getInstallPath({ local: false })).toBe(expectedPath) + }) +}) + describe('installer operations', () => { let testDir: string const originalCwd = process.cwd() diff --git a/src/lib/skills/create-installer.ts b/src/lib/skills/create-installer.ts index 20017db..24a5807 100644 --- a/src/lib/skills/create-installer.ts +++ b/src/lib/skills/create-installer.ts @@ -9,12 +9,14 @@ interface InstallerConfig { name: string description: string dirName: string + globalDirName?: string } export function createInstaller(config: InstallerConfig): SkillInstaller { function getInstallPath(options: { local?: boolean }): string { const base = options.local ? process.cwd() : homedir() - return join(base, config.dirName, 'skills', SKILL_NAME, 'SKILL.md') + const dirName = options.local ? config.dirName : (config.globalDirName ?? config.dirName) + return join(base, dirName, 'skills', SKILL_NAME, 'SKILL.md') } return { diff --git a/src/lib/skills/index.ts b/src/lib/skills/index.ts index b9670f7..a4ba138 100644 --- a/src/lib/skills/index.ts +++ b/src/lib/skills/index.ts @@ -26,6 +26,7 @@ export const skillInstallers: Record = { name: 'pi', description: 'Pi skill for Comms CLI', dirName: '.pi', + globalDirName: '.pi/agent', }), universal: createInstaller({ name: 'universal',