From b1becfc3415ab7f2f7ed974ccfcbeea4aec40871 Mon Sep 17 00:00:00 2001 From: Gujiassh Date: Thu, 19 Mar 2026 11:52:26 +0900 Subject: [PATCH] fix: preserve article casing in prefixed skill references Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus --- scripts/lib/utils.js | 5 ++++- tests/lib/utils.test.js | 5 ++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/scripts/lib/utils.js b/scripts/lib/utils.js index ba741dd7d..f136c7e47 100644 --- a/scripts/lib/utils.js +++ b/scripts/lib/utils.js @@ -331,7 +331,10 @@ export function prefixSkillReferences(content, prefix, skillNames) { result = result.replace(new RegExp(`\\/(?=${escapeRegex(name)}(?:[^a-zA-Z0-9_-]|$))`, 'g'), `/${prefix}`); // Replace `the skillname skill` references - result = result.replace(new RegExp(`the ${escapeRegex(name)} skill`, 'gi'), `the ${prefixed} skill`); + result = result.replace( + new RegExp(`(the) ${escapeRegex(name)} skill`, 'gi'), + (_, article) => `${article} ${prefixed} skill` + ); } return result; diff --git a/tests/lib/utils.test.js b/tests/lib/utils.test.js index 5af8cbe99..6e4ed3faa 100644 --- a/tests/lib/utils.test.js +++ b/tests/lib/utils.test.js @@ -677,7 +677,7 @@ describe('prefixSkillReferences', () => { const result = prefixSkillReferences('Run /audit then /polish. The audit skill is great.', 'i-', ['audit', 'polish']); expect(result).toContain('/i-audit'); expect(result).toContain('/i-polish'); - expect(result).toContain('the i-audit skill'); + expect(result).toContain('The i-audit skill'); }); test('should not partially match longer skill names', () => { @@ -687,8 +687,7 @@ describe('prefixSkillReferences', () => { test('should handle case-insensitive "the X skill" matching', () => { const result = prefixSkillReferences('The audit skill is useful.', 'i-', ['audit']); - // The regex replaces case-insensitively, so "The" becomes "the" in the replacement - expect(result).toBe('the i-audit skill is useful.'); + expect(result).toBe('The i-audit skill is useful.'); }); test('should return content unchanged with empty prefix', () => {