diff --git a/CHANGELOG.md b/CHANGELOG.md index aab8a47..b77a6ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,14 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm --- +## [0.9.3] — 2026-04-08 + +### Changed + +- Renamed bundled rule `oh-my-opencode.yaml` → `oh-my-openagent.yaml` to reflect the upstream package rename; tool identifier, labels, source paths, and target config filename updated throughout + +--- + ## [0.9.2] — 2026-03-25 ### Added @@ -19,7 +27,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ### Changed -- `oh-my-opencode.yaml` now uses `mode: single-select` to prevent accidental installation of multiple conflicting provider configs +- `oh-my-opencode.yaml` now uses `mode: single-select` to prevent accidental installation of multiple conflicting provider configs (now renamed to `oh-my-openagent.yaml`) --- diff --git a/README.md b/README.md index e640cd0..58e0631 100644 --- a/README.md +++ b/README.md @@ -220,10 +220,10 @@ Control how users can select items from this rule: - **`single-select`** — User can select only one profile from this rule at a time. UI shows radio buttons `(•)` / `( )`. Useful when alternatives are mutually exclusive (e.g., multiple config files targeting the same destination). -**Example:** `oh-my-opencode.yaml` has 3 file mappings all targeting `oh-my-opencode.json`. Setting `mode: single-select` ensures only one alternative config gets installed: +**Example:** `oh-my-openagent.yaml` has 3 file mappings all targeting `oh-my-openagent.json`. Setting `mode: single-select` ensures only one alternative config gets installed: ```yaml -tool: oh-my-opencode +tool: oh-my-openagent label: OpenCode Config home: ~/.config/opencode enabled: true @@ -231,16 +231,16 @@ mode: single-select # Only allow ONE of the three files mappings: - type: file - source: oh-my-opencode/config.openai.json - target: oh-my-opencode.json + source: oh-my-openagent/config.openai.json + target: oh-my-openagent.json - type: file - source: oh-my-opencode/config.claude.json - target: oh-my-opencode.json + source: oh-my-openagent/config.claude.json + target: oh-my-openagent.json - type: file - source: oh-my-opencode/config.copilot.json - target: oh-my-opencode.json + source: oh-my-openagent/config.copilot.json + target: oh-my-openagent.json ``` ### Mapping Types diff --git a/package.json b/package.json index 0180c8b..41e6ebd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "saddle-cli", - "version": "0.9.2", + "version": "0.9.3", "description": "CLI that syncs AI coding tool configs (Claude, Codex, Copilot, Cursor, Gemini, OpenCode) across machines via symlinks", "author": "ndizazzo", "license": "MIT", @@ -19,6 +19,7 @@ "copilot", "gemini", "opencode", + "oh-my-openagent", "symlinks" ], "files": [ diff --git a/rules/oh-my-openagent.yaml b/rules/oh-my-openagent.yaml new file mode 100644 index 0000000..ce77e3e --- /dev/null +++ b/rules/oh-my-openagent.yaml @@ -0,0 +1,16 @@ +tool: oh-my-openagent +label: Oh My Openagent +home: ~/.config/opencode +enabled: true +mode: single-select + +mappings: + - type: file + source: oh-my-openagent/oh-my-openagent.json.claude + target: oh-my-openagent.json + - type: file + source: oh-my-openagent/oh-my-openagent.json.openai + target: oh-my-openagent.json + - type: file + source: oh-my-openagent/oh-my-openagent.json.copilot + target: oh-my-openagent.json diff --git a/rules/oh-my-opencode.yaml b/rules/oh-my-opencode.yaml deleted file mode 100644 index 93e3d1a..0000000 --- a/rules/oh-my-opencode.yaml +++ /dev/null @@ -1,17 +0,0 @@ -tool: oh-my-opencode -label: Oh My Opencode -binary: "" -home: ~/.config/opencode -enabled: true -mode: single-select - -mappings: - - type: file - source: oh-my-opencode/oh-my-opencode.json.openai - target: oh-my-opencode.json - - type: file - source: oh-my-opencode/oh-my-opencode.json.claude - target: oh-my-opencode.json - - type: file - source: oh-my-opencode/oh-my-opencode.json.copilot - target: oh-my-opencode.json diff --git a/tests/install-core.test.js b/tests/install-core.test.js index f1fd0ee..96938e6 100644 --- a/tests/install-core.test.js +++ b/tests/install-core.test.js @@ -80,20 +80,20 @@ before(() => { path.join(testRulesDir, "delta.yaml"), [ "tool: delta", - "label: Oh My Opencode", + "label: Oh My Openagent", `home: ${homeDelta}`, "enabled: true", "mode: single-select", "mappings:", " - type: file", - " source: oh-my-opencode/oh-my-opencode.json.openai", - " target: oh-my-opencode.json", + " source: oh-my-openagent/oh-my-openagent.json.openai", + " target: oh-my-openagent.json", " - type: file", - " source: oh-my-opencode/oh-my-opencode.json.claude", - " target: oh-my-opencode.json", + " source: oh-my-openagent/oh-my-openagent.json.claude", + " target: oh-my-openagent.json", " - type: file", - " source: oh-my-opencode/oh-my-opencode.json.copilot", - " target: oh-my-opencode.json", + " source: oh-my-openagent/oh-my-openagent.json.copilot", + " target: oh-my-openagent.json", ].join("\n"), ); @@ -559,21 +559,21 @@ describe("discoverProfiles", () => { }); it("keeps file labels distinct when one tool exposes multiple file mappings", () => { - mkfile(path.join(repoRoot, "oh-my-opencode", "oh-my-opencode.json.openai"), "{}"); - mkfile(path.join(repoRoot, "oh-my-opencode", "oh-my-opencode.json.claude"), "{}"); - mkfile(path.join(repoRoot, "oh-my-opencode", "oh-my-opencode.json.copilot"), "{}"); + mkfile(path.join(repoRoot, "oh-my-openagent", "oh-my-openagent.json.openai"), "{}"); + mkfile(path.join(repoRoot, "oh-my-openagent", "oh-my-openagent.json.claude"), "{}"); + mkfile(path.join(repoRoot, "oh-my-openagent", "oh-my-openagent.json.copilot"), "{}"); const profiles = core.discoverProfiles(repoRoot, { alpha: false, beta: false, gamma: false, delta: true }); const deltaProfiles = profiles.filter((p) => p.tool === "delta"); assert.deepStrictEqual(deltaProfiles.map((profile) => profile.label).sort(), [ - "oh-my-opencode.json.claude", - "oh-my-opencode.json.copilot", - "oh-my-opencode.json.openai", + "oh-my-openagent.json.claude", + "oh-my-openagent.json.copilot", + "oh-my-openagent.json.openai", ]); assert.ok( deltaProfiles.every( - (profile) => profile.description === `Links to ${path.join(homeDelta, "oh-my-opencode.json")}`, + (profile) => profile.description === `Links to ${path.join(homeDelta, "oh-my-openagent.json")}`, ), ); }); @@ -656,8 +656,8 @@ describe("discoverProfiles", () => { }); it("profiles inherit single-select mode from their rule", () => { - mkfile(path.join(repoRoot, "oh-my-opencode", "oh-my-opencode.json.openai"), "{}"); - mkfile(path.join(repoRoot, "oh-my-opencode", "oh-my-opencode.json.claude"), "{}"); + mkfile(path.join(repoRoot, "oh-my-openagent", "oh-my-openagent.json.openai"), "{}"); + mkfile(path.join(repoRoot, "oh-my-openagent", "oh-my-openagent.json.claude"), "{}"); const profiles = core.discoverProfiles(repoRoot, { alpha: false, beta: false, gamma: false, delta: true }); const deltaProfiles = profiles.filter((p) => p.tool === "delta"); assert.ok(deltaProfiles.length > 0, "should have delta profiles");