diff --git a/packages/cli/src/__tests__/lib/EnvironmentSelector.test.ts b/packages/cli/src/__tests__/lib/EnvironmentSelector.test.ts index 57f1617e6..437266613 100644 --- a/packages/cli/src/__tests__/lib/EnvironmentSelector.test.ts +++ b/packages/cli/src/__tests__/lib/EnvironmentSelector.test.ts @@ -172,6 +172,19 @@ describe("EnvironmentSelector", () => { expect(getMcpConfigPath("pi")).toBeUndefined(); }); + it("includes Muse Code with project and global skill paths", () => { + expect(isValidEnvironmentCode("muse")).toBe(true); + expect(getEnvironment("muse")).toMatchObject({ + code: "muse", + name: "Muse Code", + skillPath: ".agents/skills", + globalSkillPath: ".config/muse/skills", + }); + expect(getSkillPath("muse")).toBe(".agents/skills"); + expect(getGlobalSkillPath("muse")).toBe(".config/muse/skills"); + expect(getMcpConfigPath("muse")).toBeUndefined(); + }); + it("should create choices from all environments", async () => { const environments = getAllEnvironments(); mockCheckbox.mockResolvedValue(["cursor", "claude"]); diff --git a/packages/cli/src/__tests__/services/skill/skill.service.test.ts b/packages/cli/src/__tests__/services/skill/skill.service.test.ts index 72a73af2b..2756f0c13 100644 --- a/packages/cli/src/__tests__/services/skill/skill.service.test.ts +++ b/packages/cli/src/__tests__/services/skill/skill.service.test.ts @@ -725,7 +725,7 @@ describe("SkillService", () => { } as any); await expect(skillManager.addSkill(mockRegistryId, mockSkillName)).rejects.toThrow( - "Supported: cursor, claude, github, gemini, grok, codex, kilocode, amp, opencode, roo, antigravity, antigravity-cli, junie, cline, devin, pi", + "Supported: cursor, claude, github, gemini, grok, codex, kilocode, amp, opencode, roo, antigravity, antigravity-cli, junie, cline, devin, pi, muse", ); }); diff --git a/packages/cli/src/__tests__/util/env.test.ts b/packages/cli/src/__tests__/util/env.test.ts index 81700307a..66715ed89 100644 --- a/packages/cli/src/__tests__/util/env.test.ts +++ b/packages/cli/src/__tests__/util/env.test.ts @@ -19,7 +19,7 @@ import { EnvironmentCode } from "../../types.js"; describe("Environment Utilities", () => { describe("ENVIRONMENT_DEFINITIONS", () => { it("should contain all all environment definitions", () => { - expect(Object.keys(ENVIRONMENT_DEFINITIONS)).toHaveLength(16); + expect(Object.keys(ENVIRONMENT_DEFINITIONS)).toHaveLength(17); expect(ENVIRONMENT_DEFINITIONS).toHaveProperty("cursor"); expect(ENVIRONMENT_DEFINITIONS).toHaveProperty("claude"); expect(ENVIRONMENT_DEFINITIONS).toHaveProperty("github"); @@ -36,6 +36,7 @@ describe("Environment Utilities", () => { expect(ENVIRONMENT_DEFINITIONS).toHaveProperty("cline"); expect(ENVIRONMENT_DEFINITIONS).toHaveProperty("devin"); expect(ENVIRONMENT_DEFINITIONS).toHaveProperty("pi"); + expect(ENVIRONMENT_DEFINITIONS).toHaveProperty("muse"); }); it("should have correct structure for cursor environment", () => { @@ -66,7 +67,7 @@ describe("Environment Utilities", () => { describe("ALL_ENVIRONMENT_CODES", () => { it("should contain all all environment codes", () => { - expect(ALL_ENVIRONMENT_CODES).toHaveLength(16); + expect(ALL_ENVIRONMENT_CODES).toHaveLength(17); expect(ALL_ENVIRONMENT_CODES).toEqual( expect.arrayContaining([ "cursor", @@ -84,6 +85,7 @@ describe("Environment Utilities", () => { "cline", "devin", "pi", + "muse", ]), ); }); @@ -97,7 +99,7 @@ describe("Environment Utilities", () => { describe("getAllEnvironments", () => { it("should return all environment definitions", () => { const environments = getAllEnvironments(); - expect(environments).toHaveLength(16); + expect(environments).toHaveLength(17); expect(environments).toEqual(Object.values(ENVIRONMENT_DEFINITIONS)); }); @@ -280,6 +282,10 @@ describe("Environment Utilities", () => { expect(getSkillPath("pi")).toBe(".pi/skills"); }); + it("should return skill path for muse", () => { + expect(getSkillPath("muse")).toBe(".agents/skills"); + }); + it("should return undefined for invalid environment code", () => { expect(getSkillPath("invalid" as EnvironmentCode)).toBeUndefined(); }); @@ -325,6 +331,10 @@ describe("Environment Utilities", () => { it("should return global skill path for pi", () => { expect(getGlobalSkillPath("pi")).toBe(".pi/agent/skills"); }); + + it("should return global skill path for muse", () => { + expect(getGlobalSkillPath("muse")).toBe(".config/muse/skills"); + }); }); describe("getSkillCapableEnvironments", () => { @@ -405,7 +415,8 @@ describe("Environment Utilities", () => { expect(envCodes).toContain("cline"); expect(envCodes).toContain("devin"); expect(envCodes).toContain("pi"); - expect(skillEnvs).toHaveLength(16); + expect(envCodes).toContain("muse"); + expect(skillEnvs).toHaveLength(17); }); }); diff --git a/packages/cli/src/types.ts b/packages/cli/src/types.ts index 88ffee469..2c461f0c2 100644 --- a/packages/cli/src/types.ts +++ b/packages/cli/src/types.ts @@ -34,7 +34,8 @@ export type EnvironmentCode = | "junie" | "cline" | "devin" - | "pi"; + | "pi" + | "muse"; export const DEFAULT_DOCS_DIR = "docs/ai"; diff --git a/packages/cli/src/util/env.ts b/packages/cli/src/util/env.ts index f18f91c4d..e649201e6 100644 --- a/packages/cli/src/util/env.ts +++ b/packages/cli/src/util/env.ts @@ -109,6 +109,12 @@ export const ENVIRONMENT_DEFINITIONS: Record