diff --git a/src/resources/extensions/ask-user-questions.js b/src/resources/extensions/ask-user-questions.js index 5756baf44..5f42783be 100644 --- a/src/resources/extensions/ask-user-questions.js +++ b/src/resources/extensions/ask-user-questions.js @@ -231,6 +231,14 @@ export default function AskUserQuestions(pi) { ], parameters: AskUserQuestionsParams, async execute(_toolCallId, params, signal, _onUpdate, ctx) { + // ── Autonomous mode gate ───────────────────────────────────────────── + const { gateAskUserQuestions } = await import( + "./sf/bootstrap/ask-gate.js" + ); + const gate = gateAskUserQuestions(params); + if (!gate.allow) { + return { content: [{ type: "text", text: gate.reason }] }; + } // ── Per-turn dedup: return cached result for identical question sets ── const sig = questionSignature(params.questions); const cached = turnCache.get(sig); diff --git a/src/resources/extensions/sf/skills/frontmatter.js b/src/resources/extensions/sf/skills/frontmatter.js index 7b7db12f2..14e88dae2 100644 --- a/src/resources/extensions/sf/skills/frontmatter.js +++ b/src/resources/extensions/sf/skills/frontmatter.js @@ -7,8 +7,7 @@ * * Consumer: skill loader, auto-skill creation, and permission gating. */ - -const FRONTMATTER_RE = /^---\s*\n([\s\S]*?)\n---\s*\n/; +import { splitFrontmatter } from "../../shared/frontmatter.js"; /** * Parse YAML frontmatter from skill markdown content. @@ -17,13 +16,9 @@ const FRONTMATTER_RE = /^---\s*\n([\s\S]*?)\n---\s*\n/; */ export function parseSkillFrontmatter(content) { if (!content) return null; - const match = content.match(FRONTMATTER_RE); - if (!match) return null; - - const yamlText = match[1]; - const body = content.slice(match[0].length); - - const frontmatter = parseYaml(yamlText); + const [fmLines, body] = splitFrontmatter(content); + if (!fmLines) return null; + const frontmatter = parseYaml(fmLines.join("\n")); return { frontmatter, body }; }