From 8d798e050bbd9dabf80bb2578b8fa98393853a1b Mon Sep 17 00:00:00 2001 From: 4gray Date: Mon, 21 Sep 2026 03:45:46 +0200 Subject: [PATCH] fix(agents): keep import tokens outside URI scheme matches --- docs/development/agent-workflow.md | 2 +- tools/skills/agent-guidance-markdown.mjs | 2 +- tools/skills/validate-agent-guidance.test.mjs | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/development/agent-workflow.md b/docs/development/agent-workflow.md index 32de7cd5b..301e3118e 100644 --- a/docs/development/agent-workflow.md +++ b/docs/development/agent-workflow.md @@ -71,7 +71,7 @@ HTML video, audio, source and track `src` assets and video posters use the same existence checks as images. Entity decoding uses full HTML text/attribute rules, including references whose semicolon may be omitted. Inline guidance imports are rejected after punctuation as well as whitespace. -At-signs inside external URIs (including opaque schemes such as mailto) are excluded +At-signs inside external URIs (including explicit opaque autolinks such as mailto) are excluded per HTML text node, preserving adjacent imports. A colon directly before an import does not make that import a URI. A closing bracket followed by punctuation and an at-sign terminates a bare URL exclusion. diff --git a/tools/skills/agent-guidance-markdown.mjs b/tools/skills/agent-guidance-markdown.mjs index ff3a34754..133a28b52 100644 --- a/tools/skills/agent-guidance-markdown.mjs +++ b/tools/skills/agent-guidance-markdown.mjs @@ -147,7 +147,7 @@ export function guidanceProse(markdown) { return ' '; if (node.nodeName === '#text') return node.value.replace( - /(?:\b[a-z][a-z\d+.-]*:(?![@\s])|\/\/)[^\s]*?(?=[)\]}>][.,;:!?]*@|\s|$)/giu, + /(?:(?][.,;:!?]*@|\s|$)/giu, ' ' ); const content = (node.childNodes ?? []).map(text).join(''); diff --git a/tools/skills/validate-agent-guidance.test.mjs b/tools/skills/validate-agent-guidance.test.mjs index a463cebbe..d49b97bb3 100644 --- a/tools/skills/validate-agent-guidance.test.mjs +++ b/tools/skills/validate-agent-guidance.test.mjs @@ -1507,7 +1507,6 @@ for (const boundary of [').', '];', '}']) { for (const uri of [ '', - 'mailto:user@example.com?subject=@docs/guide.md', '', ]) { test(`opaque URI is not a guidance import: ${uri}`, async (t) => {