fix: strip parentheses from file paths generated by llm

This commit is contained in:
David Hill 2025-12-16 11:50:23 +00:00
parent 2e21c62320
commit 6c1a1a77b7
4 changed files with 18 additions and 6 deletions

View file

@ -5,7 +5,7 @@
"": {
"dependencies": {
"@octokit/rest": "^22.0.1",
"@opencode-ai/plugin": "0.0.0-dev-202512160508",
"@opencode-ai/plugin": "1.0.162",
},
},
},
@ -34,9 +34,9 @@
"@octokit/types": ["@octokit/types@16.0.0", "", { "dependencies": { "@octokit/openapi-types": "^27.0.0" } }, "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg=="],
"@opencode-ai/plugin": ["@opencode-ai/plugin@0.0.0-dev-202512160508", "", { "dependencies": { "@opencode-ai/sdk": "0.0.0-dev-202512160508", "zod": "4.1.8" } }, "sha512-GLnvMQhEWRHG9E84FyyQKPKi54bGUkytXPfZYjwNy9W6djw8zAW/kpeYPrdIJHPdTHk4OjIHEwoB1SXZzGaLFQ=="],
"@opencode-ai/plugin": ["@opencode-ai/plugin@1.0.162", "", { "dependencies": { "@opencode-ai/sdk": "1.0.162", "zod": "4.1.8" } }, "sha512-tiJw7SCfSlG/3tY2O0J2UT06OLuazOzsv1zYlFbLxLy/EVedtW0pzxYalO20a4e//vInvOXFkhd2jLyB5vNEVA=="],
"@opencode-ai/sdk": ["@opencode-ai/sdk@0.0.0-dev-202512160508", "", {}, "sha512-ICpZ1bX528yQKqYGGyUJQMu3RY0F1pQ6RCoTJ4ESLiYmcXUY1EldgIidiwPA+A/zpEXLu2lPwPZ1LYn/bX6aFA=="],
"@opencode-ai/sdk": ["@opencode-ai/sdk@1.0.162", "", {}, "sha512-+XqRErBUt9eb1m3i/7WkZc/QCKCCjTaGV3MvhLhs/CUwbUn767D/ugzcG/i2ec8j/4nQmjJbjPDRmrQfvF1Qjw=="],
"before-after-hook": ["before-after-hook@4.0.0", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="],

View file

@ -1,6 +1,6 @@
{
"dependencies": {
"@octokit/rest": "^22.0.1",
"@opencode-ai/plugin": "0.0.0-dev-202512160508"
"@opencode-ai/plugin": "1.0.162"
}
}

View file

@ -7,6 +7,12 @@ function strip(text: string): string {
return match ? match[2] : text
}
function removeParensAroundFileRefs(text: string): string {
// Remove parentheses around inline code that looks like a file reference
// Matches: (`path/to/file.ext`) or (`path/to/file.ext:1-10`) or (`file.ext:42`)
return text.replace(/\(\s*(`[^`]+\.[a-zA-Z0-9]+(?::\d+(?:-\d+)?)?`)\s*\)/g, "$1")
}
export function Markdown(
props: ComponentProps<"div"> & {
text: string
@ -17,7 +23,7 @@ export function Markdown(
const [local, others] = splitProps(props, ["text", "class", "classList"])
const marked = useMarked()
const [html] = createResource(
() => strip(local.text),
() => removeParensAroundFileRefs(strip(local.text)),
async (markdown) => {
return marked.parse(markdown)
},

View file

@ -29,7 +29,7 @@ interface Props {
}
export function ContentMarkdown(props: Props) {
const [html] = createResource(
() => strip(props.text),
() => removeParensAroundFileRefs(strip(props.text)),
async (markdown) => {
return markedWithShiki.parse(markdown)
},
@ -65,3 +65,9 @@ function strip(text: string): string {
const match = text.match(wrappedRe)
return match ? match[2] : text
}
function removeParensAroundFileRefs(text: string): string {
// Remove parentheses around inline code that looks like a file reference
// Matches: (`path/to/file.ext`) or (`path/to/file.ext:1-10`) or (`file.ext:42`)
return text.replace(/\(\s*(`[^`]+\.[a-zA-Z0-9]+(?::\d+(?:-\d+)?)?`)\s*\)/g, "$1")
}