Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions packages/cli/src/__tests__/lib/EnvironmentSelector.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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"]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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",
);
});

Expand Down
19 changes: 15 additions & 4 deletions packages/cli/src/__tests__/util/env.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand All @@ -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", () => {
Expand Down Expand Up @@ -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",
Expand All @@ -84,6 +85,7 @@ describe("Environment Utilities", () => {
"cline",
"devin",
"pi",
"muse",
]),
);
});
Expand All @@ -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));
});

Expand Down Expand Up @@ -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();
});
Expand Down Expand Up @@ -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", () => {
Expand Down Expand Up @@ -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);
});
});

Expand Down
3 changes: 2 additions & 1 deletion packages/cli/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ export type EnvironmentCode =
| "junie"
| "cline"
| "devin"
| "pi";
| "pi"
| "muse";

export const DEFAULT_DOCS_DIR = "docs/ai";

Expand Down
6 changes: 6 additions & 0 deletions packages/cli/src/util/env.ts
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,12 @@ export const ENVIRONMENT_DEFINITIONS: Record<EnvironmentCode, EnvironmentDefinit
skillPath: ".pi/skills",
globalSkillPath: ".pi/agent/skills",
},
muse: {
code: "muse",
name: "Muse Code",
skillPath: ".agents/skills",
globalSkillPath: ".config/muse/skills",
},
};

export const ALL_ENVIRONMENT_CODES: EnvironmentCode[] = Object.keys(
Expand Down
1 change: 1 addition & 0 deletions web/content/docs/11-configuration-file.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ List of AI coding tools to generate configuration files for. Valid values:
| `cline` | Cline |
| `devin` | Devin |
| `pi` | Pi |
| `muse` | Muse Code |

```json
"environments": ["cursor", "claude"]
Expand Down
Loading