@contentrain/mcp 1.8.1 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -2
- package/dist/{annotations-BFJbfSKe.mjs → annotations-D3tlsF38.mjs} +77 -20
- package/dist/annotations-D3tlsF38.mjs.map +1 -0
- package/dist/{apply-manager-BRmB27H5.mjs → apply-manager-BnPbPXFG.mjs} +1 -1
- package/dist/{apply-manager-BRmB27H5.mjs.map → apply-manager-BnPbPXFG.mjs.map} +1 -1
- package/dist/{astro-parser-B-nLl0zE.mjs → astro-parser-BVoGjA6M.mjs} +3 -3
- package/dist/{astro-parser-B-nLl0zE.mjs.map → astro-parser-BVoGjA6M.mjs.map} +1 -1
- package/dist/availability-sWWRz2W0.mjs +53 -0
- package/dist/availability-sWWRz2W0.mjs.map +1 -0
- package/dist/{branch-lifecycle-7dQoF22r.d.mts → branch-lifecycle-AwBJIheA.d.mts} +1 -1
- package/dist/{branch-lifecycle-7dQoF22r.d.mts.map → branch-lifecycle-AwBJIheA.d.mts.map} +1 -1
- package/dist/{compiler-k4yttlzM.mjs → compiler-BZXAN4Ir.mjs} +2 -2
- package/dist/{compiler-k4yttlzM.mjs.map → compiler-BZXAN4Ir.mjs.map} +1 -1
- package/dist/{compiler-sfc.cjs-D0d_OicF.mjs → compiler-sfc.cjs-tFlmtjrJ.mjs} +2 -2
- package/dist/{compiler-sfc.cjs-D0d_OicF.mjs.map → compiler-sfc.cjs-tFlmtjrJ.mjs.map} +1 -1
- package/dist/{content-manager-DqDLSNQ-.d.mts → content-manager-DcmNwvmq.d.mts} +2 -2
- package/dist/{content-manager-DqDLSNQ-.d.mts.map → content-manager-DcmNwvmq.d.mts.map} +1 -1
- package/dist/core/apply-manager.mjs +1 -1
- package/dist/core/config.d.mts +1 -1
- package/dist/core/content-manager.d.mts +1 -1
- package/dist/core/context.d.mts +1 -1
- package/dist/core/contracts/index.d.mts +2 -2
- package/dist/core/doctor.mjs +2 -2
- package/dist/core/graph-builder.mjs +2 -2
- package/dist/core/model-manager.d.mts +1 -1
- package/dist/core/ops/index.d.mts +2 -2
- package/dist/core/overlay-reader.d.mts +1 -1
- package/dist/core/overlay-reader.mjs +1 -1
- package/dist/core/scan-config.mjs +1 -1
- package/dist/core/scanner.mjs +3 -3
- package/dist/core/validator/index.d.mts +1 -1
- package/dist/core/validator/index.mjs +1 -1
- package/dist/{detect-eWS6lvoH.mjs → detect-wVSI9VuY.mjs} +1 -1
- package/dist/{detect-eWS6lvoH.mjs.map → detect-wVSI9VuY.mjs.map} +1 -1
- package/dist/{doctor-qiUKCy9b.mjs → doctor-BTToHt0y.mjs} +2 -2
- package/dist/{doctor-qiUKCy9b.mjs.map → doctor-BTToHt0y.mjs.map} +1 -1
- package/dist/git/branch-lifecycle.d.mts +1 -1
- package/dist/git/transaction.d.mts +1 -1
- package/dist/{graph-builder-DXv2JEp-.mjs → graph-builder-CRUX_8mA.mjs} +2 -2
- package/dist/{graph-builder-DXv2JEp-.mjs.map → graph-builder-CRUX_8mA.mjs.map} +1 -1
- package/dist/index-DDX-qYNw.d.mts +2 -0
- package/dist/index.mjs +10 -10
- package/dist/{node-DN9hZeil.mjs → node-wC-z3NoZ.mjs} +1 -1
- package/dist/{node-DN9hZeil.mjs.map → node-wC-z3NoZ.mjs.map} +1 -1
- package/dist/{overlay-reader-CUs9jgqk.mjs → overlay-reader-BOb105gS.mjs} +1 -1
- package/dist/{overlay-reader-CUs9jgqk.mjs.map → overlay-reader-BOb105gS.mjs.map} +1 -1
- package/dist/{paths-C3xNyc7z.mjs → paths-BU6E-oDs.mjs} +1 -1
- package/dist/{paths-C3xNyc7z.mjs.map → paths-BU6E-oDs.mjs.map} +1 -1
- package/dist/providers/github/index.d.mts +1 -1
- package/dist/providers/github/index.mjs +1 -1
- package/dist/providers/gitlab/index.d.mts +1 -1
- package/dist/providers/gitlab/index.mjs +1 -1
- package/dist/providers/local/index.d.mts +2 -2
- package/dist/providers/local/index.d.mts.map +1 -1
- package/dist/{scan-config-jC6XmiqF.mjs → scan-config-BGUflS8t.mjs} +1 -1
- package/dist/{scan-config-jC6XmiqF.mjs.map → scan-config-BGUflS8t.mjs.map} +1 -1
- package/dist/{scanner-DKMwc03k.mjs → scanner-VOwrKLGC.mjs} +6 -6
- package/dist/{scanner-DKMwc03k.mjs.map → scanner-VOwrKLGC.mjs.map} +1 -1
- package/dist/server/http/index.d.mts +11 -1
- package/dist/server/http/index.d.mts.map +1 -1
- package/dist/server/http/index.mjs +20 -12
- package/dist/server/http/index.mjs.map +1 -1
- package/dist/{server-CXZFrEyu.mjs → server-DtabGAY6.mjs} +177 -18
- package/dist/server-DtabGAY6.mjs.map +1 -0
- package/dist/{server-DZBcZWhE.d.mts → server-vA1tM7DA.d.mts} +25 -10
- package/dist/server-vA1tM7DA.d.mts.map +1 -0
- package/dist/server.d.mts +2 -2
- package/dist/server.mjs +11 -11
- package/dist/{source-map-generator-BWDva49I.mjs → source-map-generator-BIEiz3If.mjs} +1 -1
- package/dist/{source-map-generator-BWDva49I.mjs.map → source-map-generator-BIEiz3If.mjs.map} +1 -1
- package/dist/{svelte-parser-Dr9mmZuk.mjs → svelte-parser-Bll-1SK0.mjs} +3 -3
- package/dist/{svelte-parser-Dr9mmZuk.mjs.map → svelte-parser-Bll-1SK0.mjs.map} +1 -1
- package/dist/templates/index.mjs +1 -1
- package/dist/{templates-VrLVqfe5.mjs → templates-D6EllixQ.mjs} +1 -1
- package/dist/{templates-VrLVqfe5.mjs.map → templates-D6EllixQ.mjs.map} +1 -1
- package/dist/tools/annotations.d.mts +3 -0
- package/dist/tools/annotations.d.mts.map +1 -1
- package/dist/tools/annotations.mjs +1 -1
- package/dist/tools/availability.d.mts +39 -0
- package/dist/tools/availability.d.mts.map +1 -0
- package/dist/tools/availability.mjs +2 -0
- package/dist/{tsx-parser-CQc6nr-o.mjs → tsx-parser-B_aI_C2r.mjs} +1 -1
- package/dist/{tsx-parser-CQc6nr-o.mjs.map → tsx-parser-B_aI_C2r.mjs.map} +1 -1
- package/dist/tsx-parser-ChduVwKJ.mjs +2 -0
- package/dist/util/detect.mjs +1 -1
- package/dist/{validator-Z3DGNWQ6.mjs → validator-8vaPxSba.mjs} +1 -1
- package/dist/{validator-Z3DGNWQ6.mjs.map → validator-8vaPxSba.mjs.map} +1 -1
- package/dist/{vue-parser-COgjArqv.mjs → vue-parser-COig4Y1a.mjs} +3 -3
- package/dist/{vue-parser-COgjArqv.mjs.map → vue-parser-COig4Y1a.mjs.map} +1 -1
- package/package.json +11 -5
- package/dist/annotations-BFJbfSKe.mjs.map +0 -1
- package/dist/index-D0wQJSgs.d.mts +0 -2
- package/dist/server-CXZFrEyu.mjs.map +0 -1
- package/dist/server-DZBcZWhE.d.mts.map +0 -1
- package/dist/tsx-parser-BOMZE_yQ.mjs +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"astro-parser-B-nLl0zE.mjs","names":[],"sources":["../src/core/ast-scanner/astro-parser.ts"],"sourcesContent":["// ─── Astro Parser for Scanner v2 ───\n// Parses .astro files using @astrojs/compiler.\n// Extracts ALL strings with structural context metadata.\n// Scanner does NOT classify — agent does. When in doubt, INCLUDE.\n\nimport type { ExtractedString } from './types.js'\n\n// ─── Lazy-loaded @astrojs/compiler ───\n\n// Astro AST node types from @astrojs/compiler\ninterface AstroBaseNode {\n type: string\n position?: {\n start: { line: number; column: number; offset: number }\n end?: { line: number; column: number; offset: number }\n }\n}\n\ninterface AstroRoot extends AstroBaseNode {\n type: 'root'\n children: AstroNode[]\n}\n\ninterface AstroElement extends AstroBaseNode {\n type: 'element'\n name: string\n attributes: AstroAttribute[]\n children: AstroNode[]\n}\n\ninterface AstroComponent extends AstroBaseNode {\n type: 'component'\n name: string\n attributes: AstroAttribute[]\n children: AstroNode[]\n}\n\ninterface AstroCustomElement extends AstroBaseNode {\n type: 'custom-element'\n name: string\n attributes: AstroAttribute[]\n children: AstroNode[]\n}\n\ninterface AstroFragment extends AstroBaseNode {\n type: 'fragment'\n children: AstroNode[]\n}\n\ninterface AstroText extends AstroBaseNode {\n type: 'text'\n value: string\n}\n\ninterface AstroExpression extends AstroBaseNode {\n type: 'expression'\n children: AstroNode[]\n}\n\ninterface AstroFrontmatter extends AstroBaseNode {\n type: 'frontmatter'\n value: string\n}\n\ninterface AstroComment extends AstroBaseNode {\n type: 'comment'\n value: string\n}\n\ninterface AstroDoctype extends AstroBaseNode {\n type: 'doctype'\n}\n\ninterface AstroAttribute {\n name: string\n type: 'attribute' | 'expression' | 'spread' | 'shorthand' | 'template-literal'\n kind: string\n value: string\n raw?: string\n position?: {\n start: { line: number; column: number; offset: number }\n end?: { line: number; column: number; offset: number }\n }\n}\n\ntype AstroNode =\n | AstroRoot\n | AstroElement\n | AstroComponent\n | AstroCustomElement\n | AstroFragment\n | AstroText\n | AstroExpression\n | AstroFrontmatter\n | AstroComment\n | AstroDoctype\n | AstroBaseNode\n\ninterface AstroParseResult {\n ast: AstroRoot\n}\n\ninterface AstroCompiler {\n parse: (source: string, options?: { position?: boolean }) => Promise<AstroParseResult>\n}\n\nlet _compiler: AstroCompiler | null = null\n\nasync function loadCompiler(): Promise<AstroCompiler> {\n if (_compiler) return _compiler\n try {\n const mod = await import('@astrojs/compiler')\n _compiler = mod as unknown as AstroCompiler\n return _compiler\n } catch {\n throw new Error(\n '@astrojs/compiler is required to parse .astro files. '\n + 'Install it with: pnpm add -D @astrojs/compiler',\n )\n }\n}\n\n// ─── tsx-parser delegation ───\n\ntype TsxParserFn = (content: string, fileName: string) => ExtractedString[]\n\nlet _tsxParser: TsxParserFn | null = null\n\nasync function loadTsxParser(): Promise<TsxParserFn | null> {\n if (_tsxParser) return _tsxParser\n try {\n const mod = await import('./tsx-parser.js')\n _tsxParser = mod.parseTsx\n return _tsxParser\n } catch {\n return null\n }\n}\n\n// ─── Constants ───\n\nconst SURROUNDING_MAX = 120\n\n/** Attributes whose values are CSS, not content */\nconst CSS_ATTRIBUTES = new Set(['class', 'style', 'className'])\n\n/** Event/code attribute prefixes — skip these */\nconst CODE_ATTRIBUTE_PREFIXES = ['on', 'set:', 'define:', 'is:']\n\n// ─── Helpers ───\n\nfunction getSurroundingByLine(content: string, line: number): string {\n const lines = content.split('\\n')\n const idx = line - 1\n const start = Math.max(0, idx - 1)\n const end = Math.min(lines.length - 1, idx + 1)\n\n const parts: string[] = []\n for (let i = start; i <= end; i++) {\n const l = lines[i]\n if (l !== undefined) {\n parts.push(l)\n }\n }\n\n const joined = parts.join('\\n')\n if (joined.length > SURROUNDING_MAX) {\n return joined.slice(0, SURROUNDING_MAX)\n }\n return joined\n}\n\nfunction _getLineAndColumn(content: string, offset: number): { line: number; column: number } {\n let line = 1\n let lastNewline = -1\n\n for (let i = 0; i < offset && i < content.length; i++) {\n if (content[i] === '\\n') {\n line++\n lastNewline = i\n }\n }\n\n return { line, column: offset - lastNewline }\n}\n\n// ─── Template AST Walker ───\n\nfunction walkAstroTemplate(\n node: AstroNode,\n content: string,\n results: ExtractedString[],\n parentTag: string = '',\n): void {\n const nodeType = node.type\n\n switch (nodeType) {\n case 'root': {\n const root = node as AstroRoot\n for (const child of root.children) {\n walkAstroTemplate(child, content, results, parentTag)\n }\n break\n }\n\n case 'text': {\n const textNode = node as AstroText\n const trimmed = textNode.value.trim()\n if (trimmed.length > 0 && /\\S/.test(trimmed)) {\n const line = textNode.position?.start.line ?? 1\n const column = textNode.position?.start.column ?? 1\n results.push({\n value: trimmed,\n line,\n column,\n context: 'template_text',\n scope: 'template',\n parent: parentTag,\n surrounding: getSurroundingByLine(content, line),\n })\n }\n break\n }\n\n case 'element':\n case 'component':\n case 'custom-element': {\n const el = node as AstroElement | AstroComponent | AstroCustomElement\n const tag = el.name\n\n // Process attributes\n for (const attr of el.attributes) {\n processAttribute(attr, tag, content, results)\n }\n\n // Recurse into children\n for (const child of el.children) {\n walkAstroTemplate(child, content, results, tag)\n }\n break\n }\n\n case 'fragment': {\n const fragment = node as AstroFragment\n for (const child of fragment.children) {\n walkAstroTemplate(child, content, results, parentTag)\n }\n break\n }\n\n case 'expression': {\n // JSX expressions like {variable} — code, skip\n // (The agent decides if embedded strings in expressions matter)\n break\n }\n\n case 'frontmatter':\n case 'comment':\n case 'doctype': {\n // Frontmatter is handled separately via tsx-parser delegation\n // Comments and doctype are skipped\n break\n }\n\n default: {\n // For unknown node types, try to walk children\n const unknownNode = node as AstroBaseNode & { children?: AstroNode[] }\n if (unknownNode.children) {\n for (const child of unknownNode.children) {\n walkAstroTemplate(child, content, results, parentTag)\n }\n }\n break\n }\n }\n}\n\nfunction processAttribute(\n attr: AstroAttribute,\n parentTag: string,\n content: string,\n results: ExtractedString[],\n): void {\n const attrName = attr.name\n\n // Skip expression attributes (dynamic bindings) and spread attributes\n if (attr.type === 'expression' || attr.type === 'spread' || attr.type === 'shorthand') return\n\n // Skip code-related attributes (event handlers, directives)\n for (const prefix of CODE_ATTRIBUTE_PREFIXES) {\n if (attrName.startsWith(prefix)) return\n }\n\n // Skip boolean attributes (no value)\n const attrValue = attr.value\n if (!attrValue || (typeof attrValue === 'string' && attrValue.trim().length === 0)) return\n\n const line = attr.position?.start.line ?? 1\n const column = attr.position?.start.column ?? 1\n\n // CSS attributes get css_class context\n if (CSS_ATTRIBUTES.has(attrName)) {\n results.push({\n value: attrValue,\n line,\n column,\n context: 'css_class',\n scope: 'template',\n parent: parentTag,\n parentProperty: attrName,\n surrounding: getSurroundingByLine(content, line),\n })\n return\n }\n\n results.push({\n value: attrValue,\n line,\n column,\n context: 'template_attribute',\n scope: 'template',\n parent: parentTag,\n parentProperty: attrName,\n surrounding: getSurroundingByLine(content, line),\n })\n}\n\n// ─── Frontmatter Parsing ───\n\nfunction findFrontmatter(ast: AstroRoot): AstroFrontmatter | null {\n for (const child of ast.children) {\n if (child.type === 'frontmatter') {\n return child as AstroFrontmatter\n }\n }\n return null\n}\n\n// ─── Main Export ───\n\nexport async function parseAstro(content: string, fileName: string): Promise<ExtractedString[]> {\n const compiler = await loadCompiler()\n const results: ExtractedString[] = []\n\n let parseResult: AstroParseResult\n try {\n parseResult = await compiler.parse(content, { position: true })\n } catch {\n // If Astro parsing fails, return empty — malformed files shouldn't block scanning\n return []\n }\n\n const ast = parseResult.ast\n\n // ─── Frontmatter → tsx-parser ───\n const frontmatter = findFrontmatter(ast)\n if (frontmatter && frontmatter.value.trim().length > 0) {\n const tsxParser = await loadTsxParser()\n if (tsxParser) {\n const frontmatterContent = frontmatter.value\n // Frontmatter starts after the opening ---\n const frontmatterLine = frontmatter.position?.start.line ?? 1\n // The content starts on the line after ---\n const contentStartLine = frontmatterLine + 1\n\n // Astro frontmatter is always TypeScript — resolve filename accordingly\n const resolvedFileName = fileName.replace(/\\.astro$/, '.ts')\n const scriptResults = tsxParser(frontmatterContent, resolvedFileName)\n for (const r of scriptResults) {\n results.push({\n ...r,\n line: r.line + contentStartLine - 1,\n scope: 'script',\n })\n }\n }\n }\n\n // ─── Template (everything outside frontmatter) ───\n walkAstroTemplate(ast, content, results)\n\n return results\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"astro-parser-BVoGjA6M.mjs","names":[],"sources":["../src/core/ast-scanner/astro-parser.ts"],"sourcesContent":["// ─── Astro Parser for Scanner v2 ───\n// Parses .astro files using @astrojs/compiler.\n// Extracts ALL strings with structural context metadata.\n// Scanner does NOT classify — agent does. When in doubt, INCLUDE.\n\nimport type { ExtractedString } from './types.js'\n\n// ─── Lazy-loaded @astrojs/compiler ───\n\n// Astro AST node types from @astrojs/compiler\ninterface AstroBaseNode {\n type: string\n position?: {\n start: { line: number; column: number; offset: number }\n end?: { line: number; column: number; offset: number }\n }\n}\n\ninterface AstroRoot extends AstroBaseNode {\n type: 'root'\n children: AstroNode[]\n}\n\ninterface AstroElement extends AstroBaseNode {\n type: 'element'\n name: string\n attributes: AstroAttribute[]\n children: AstroNode[]\n}\n\ninterface AstroComponent extends AstroBaseNode {\n type: 'component'\n name: string\n attributes: AstroAttribute[]\n children: AstroNode[]\n}\n\ninterface AstroCustomElement extends AstroBaseNode {\n type: 'custom-element'\n name: string\n attributes: AstroAttribute[]\n children: AstroNode[]\n}\n\ninterface AstroFragment extends AstroBaseNode {\n type: 'fragment'\n children: AstroNode[]\n}\n\ninterface AstroText extends AstroBaseNode {\n type: 'text'\n value: string\n}\n\ninterface AstroExpression extends AstroBaseNode {\n type: 'expression'\n children: AstroNode[]\n}\n\ninterface AstroFrontmatter extends AstroBaseNode {\n type: 'frontmatter'\n value: string\n}\n\ninterface AstroComment extends AstroBaseNode {\n type: 'comment'\n value: string\n}\n\ninterface AstroDoctype extends AstroBaseNode {\n type: 'doctype'\n}\n\ninterface AstroAttribute {\n name: string\n type: 'attribute' | 'expression' | 'spread' | 'shorthand' | 'template-literal'\n kind: string\n value: string\n raw?: string\n position?: {\n start: { line: number; column: number; offset: number }\n end?: { line: number; column: number; offset: number }\n }\n}\n\ntype AstroNode =\n | AstroRoot\n | AstroElement\n | AstroComponent\n | AstroCustomElement\n | AstroFragment\n | AstroText\n | AstroExpression\n | AstroFrontmatter\n | AstroComment\n | AstroDoctype\n | AstroBaseNode\n\ninterface AstroParseResult {\n ast: AstroRoot\n}\n\ninterface AstroCompiler {\n parse: (source: string, options?: { position?: boolean }) => Promise<AstroParseResult>\n}\n\nlet _compiler: AstroCompiler | null = null\n\nasync function loadCompiler(): Promise<AstroCompiler> {\n if (_compiler) return _compiler\n try {\n const mod = await import('@astrojs/compiler')\n _compiler = mod as unknown as AstroCompiler\n return _compiler\n } catch {\n throw new Error(\n '@astrojs/compiler is required to parse .astro files. '\n + 'Install it with: pnpm add -D @astrojs/compiler',\n )\n }\n}\n\n// ─── tsx-parser delegation ───\n\ntype TsxParserFn = (content: string, fileName: string) => ExtractedString[]\n\nlet _tsxParser: TsxParserFn | null = null\n\nasync function loadTsxParser(): Promise<TsxParserFn | null> {\n if (_tsxParser) return _tsxParser\n try {\n const mod = await import('./tsx-parser.js')\n _tsxParser = mod.parseTsx\n return _tsxParser\n } catch {\n return null\n }\n}\n\n// ─── Constants ───\n\nconst SURROUNDING_MAX = 120\n\n/** Attributes whose values are CSS, not content */\nconst CSS_ATTRIBUTES = new Set(['class', 'style', 'className'])\n\n/** Event/code attribute prefixes — skip these */\nconst CODE_ATTRIBUTE_PREFIXES = ['on', 'set:', 'define:', 'is:']\n\n// ─── Helpers ───\n\nfunction getSurroundingByLine(content: string, line: number): string {\n const lines = content.split('\\n')\n const idx = line - 1\n const start = Math.max(0, idx - 1)\n const end = Math.min(lines.length - 1, idx + 1)\n\n const parts: string[] = []\n for (let i = start; i <= end; i++) {\n const l = lines[i]\n if (l !== undefined) {\n parts.push(l)\n }\n }\n\n const joined = parts.join('\\n')\n if (joined.length > SURROUNDING_MAX) {\n return joined.slice(0, SURROUNDING_MAX)\n }\n return joined\n}\n\nfunction _getLineAndColumn(content: string, offset: number): { line: number; column: number } {\n let line = 1\n let lastNewline = -1\n\n for (let i = 0; i < offset && i < content.length; i++) {\n if (content[i] === '\\n') {\n line++\n lastNewline = i\n }\n }\n\n return { line, column: offset - lastNewline }\n}\n\n// ─── Template AST Walker ───\n\nfunction walkAstroTemplate(\n node: AstroNode,\n content: string,\n results: ExtractedString[],\n parentTag: string = '',\n): void {\n const nodeType = node.type\n\n switch (nodeType) {\n case 'root': {\n const root = node as AstroRoot\n for (const child of root.children) {\n walkAstroTemplate(child, content, results, parentTag)\n }\n break\n }\n\n case 'text': {\n const textNode = node as AstroText\n const trimmed = textNode.value.trim()\n if (trimmed.length > 0 && /\\S/.test(trimmed)) {\n const line = textNode.position?.start.line ?? 1\n const column = textNode.position?.start.column ?? 1\n results.push({\n value: trimmed,\n line,\n column,\n context: 'template_text',\n scope: 'template',\n parent: parentTag,\n surrounding: getSurroundingByLine(content, line),\n })\n }\n break\n }\n\n case 'element':\n case 'component':\n case 'custom-element': {\n const el = node as AstroElement | AstroComponent | AstroCustomElement\n const tag = el.name\n\n // Process attributes\n for (const attr of el.attributes) {\n processAttribute(attr, tag, content, results)\n }\n\n // Recurse into children\n for (const child of el.children) {\n walkAstroTemplate(child, content, results, tag)\n }\n break\n }\n\n case 'fragment': {\n const fragment = node as AstroFragment\n for (const child of fragment.children) {\n walkAstroTemplate(child, content, results, parentTag)\n }\n break\n }\n\n case 'expression': {\n // JSX expressions like {variable} — code, skip\n // (The agent decides if embedded strings in expressions matter)\n break\n }\n\n case 'frontmatter':\n case 'comment':\n case 'doctype': {\n // Frontmatter is handled separately via tsx-parser delegation\n // Comments and doctype are skipped\n break\n }\n\n default: {\n // For unknown node types, try to walk children\n const unknownNode = node as AstroBaseNode & { children?: AstroNode[] }\n if (unknownNode.children) {\n for (const child of unknownNode.children) {\n walkAstroTemplate(child, content, results, parentTag)\n }\n }\n break\n }\n }\n}\n\nfunction processAttribute(\n attr: AstroAttribute,\n parentTag: string,\n content: string,\n results: ExtractedString[],\n): void {\n const attrName = attr.name\n\n // Skip expression attributes (dynamic bindings) and spread attributes\n if (attr.type === 'expression' || attr.type === 'spread' || attr.type === 'shorthand') return\n\n // Skip code-related attributes (event handlers, directives)\n for (const prefix of CODE_ATTRIBUTE_PREFIXES) {\n if (attrName.startsWith(prefix)) return\n }\n\n // Skip boolean attributes (no value)\n const attrValue = attr.value\n if (!attrValue || (typeof attrValue === 'string' && attrValue.trim().length === 0)) return\n\n const line = attr.position?.start.line ?? 1\n const column = attr.position?.start.column ?? 1\n\n // CSS attributes get css_class context\n if (CSS_ATTRIBUTES.has(attrName)) {\n results.push({\n value: attrValue,\n line,\n column,\n context: 'css_class',\n scope: 'template',\n parent: parentTag,\n parentProperty: attrName,\n surrounding: getSurroundingByLine(content, line),\n })\n return\n }\n\n results.push({\n value: attrValue,\n line,\n column,\n context: 'template_attribute',\n scope: 'template',\n parent: parentTag,\n parentProperty: attrName,\n surrounding: getSurroundingByLine(content, line),\n })\n}\n\n// ─── Frontmatter Parsing ───\n\nfunction findFrontmatter(ast: AstroRoot): AstroFrontmatter | null {\n for (const child of ast.children) {\n if (child.type === 'frontmatter') {\n return child as AstroFrontmatter\n }\n }\n return null\n}\n\n// ─── Main Export ───\n\nexport async function parseAstro(content: string, fileName: string): Promise<ExtractedString[]> {\n const compiler = await loadCompiler()\n const results: ExtractedString[] = []\n\n let parseResult: AstroParseResult\n try {\n parseResult = await compiler.parse(content, { position: true })\n } catch {\n // If Astro parsing fails, return empty — malformed files shouldn't block scanning\n return []\n }\n\n const ast = parseResult.ast\n\n // ─── Frontmatter → tsx-parser ───\n const frontmatter = findFrontmatter(ast)\n if (frontmatter && frontmatter.value.trim().length > 0) {\n const tsxParser = await loadTsxParser()\n if (tsxParser) {\n const frontmatterContent = frontmatter.value\n // Frontmatter starts after the opening ---\n const frontmatterLine = frontmatter.position?.start.line ?? 1\n // The content starts on the line after ---\n const contentStartLine = frontmatterLine + 1\n\n // Astro frontmatter is always TypeScript — resolve filename accordingly\n const resolvedFileName = fileName.replace(/\\.astro$/, '.ts')\n const scriptResults = tsxParser(frontmatterContent, resolvedFileName)\n for (const r of scriptResults) {\n results.push({\n ...r,\n line: r.line + contentStartLine - 1,\n scope: 'script',\n })\n }\n }\n }\n\n // ─── Template (everything outside frontmatter) ───\n walkAstroTemplate(ast, content, results)\n\n return results\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
//#region src/tools/availability.ts
|
|
2
|
+
const TOOL_REQUIREMENTS = {
|
|
3
|
+
contentrain_init: { projectRoot: true },
|
|
4
|
+
contentrain_scaffold: { projectRoot: true },
|
|
5
|
+
contentrain_doctor: { projectRoot: true },
|
|
6
|
+
contentrain_bulk: { projectRoot: true },
|
|
7
|
+
contentrain_submit: {
|
|
8
|
+
projectRoot: true,
|
|
9
|
+
capabilities: ["localWorktree", "pushRemote"]
|
|
10
|
+
},
|
|
11
|
+
contentrain_merge: {
|
|
12
|
+
projectRoot: true,
|
|
13
|
+
capabilities: ["localWorktree"]
|
|
14
|
+
},
|
|
15
|
+
contentrain_branch_list: {
|
|
16
|
+
projectRoot: true,
|
|
17
|
+
capabilities: ["localWorktree"]
|
|
18
|
+
},
|
|
19
|
+
contentrain_branch_delete: {
|
|
20
|
+
projectRoot: true,
|
|
21
|
+
capabilities: ["localWorktree"]
|
|
22
|
+
},
|
|
23
|
+
contentrain_scan: {
|
|
24
|
+
projectRoot: true,
|
|
25
|
+
capabilities: ["astScan"]
|
|
26
|
+
},
|
|
27
|
+
contentrain_apply: {
|
|
28
|
+
projectRoot: true,
|
|
29
|
+
capabilities: ["sourceRead"]
|
|
30
|
+
},
|
|
31
|
+
contentrain_media_list: { media: true },
|
|
32
|
+
contentrain_media_get: { media: true },
|
|
33
|
+
contentrain_media_ingest: { media: true },
|
|
34
|
+
contentrain_media_update: { media: true },
|
|
35
|
+
contentrain_media_delete: { media: true }
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Whether a tool can ever succeed for this provider + projectRoot pair.
|
|
39
|
+
* Used by `createServer` to filter registration; also exported for
|
|
40
|
+
* embedders (e.g. Studio) that want to reason about the effective tool
|
|
41
|
+
* surface without spinning up a server.
|
|
42
|
+
*/
|
|
43
|
+
function isToolAvailable(name, provider, projectRoot) {
|
|
44
|
+
const req = TOOL_REQUIREMENTS[name];
|
|
45
|
+
if (!req) return true;
|
|
46
|
+
if (req.projectRoot && !projectRoot) return false;
|
|
47
|
+
if (req.media && !provider.media) return false;
|
|
48
|
+
return (req.capabilities ?? []).every((cap) => provider.capabilities[cap]);
|
|
49
|
+
}
|
|
50
|
+
//#endregion
|
|
51
|
+
export { isToolAvailable as n, TOOL_REQUIREMENTS as t };
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=availability-sWWRz2W0.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"availability-sWWRz2W0.mjs","names":[],"sources":["../src/tools/availability.ts"],"sourcesContent":["import type { ProviderCapabilities } from '@contentrain/types'\n\n/**\n * Declarative availability requirements for capability-gated tools.\n *\n * This is the single source of truth `createServer` uses to decide which\n * tools to register for a given provider + projectRoot combination. Tools\n * absent from this map are always available. The requirements mirror the\n * call-time guards inside each tool handler (`capabilityError`) — those\n * guards remain as defense in depth, but a client talking to a remote\n * provider no longer sees tools that could never succeed in `tools/list`.\n *\n * `contentrain_validate` is intentionally NOT listed: read-only validate\n * works over any provider; only `fix: true` needs a local worktree and\n * keeps its call-time guard.\n */\nexport interface ToolRequirements {\n /** Tool needs a local project root on disk (worktree git transactions, IDE config, AST scans). */\n projectRoot?: boolean\n /** Provider capability flags that must all be `true`. */\n capabilities?: readonly (keyof ProviderCapabilities)[]\n /** Tool needs the provider's optional media facet (`RepoProvider.media`). */\n media?: boolean\n}\n\nexport const TOOL_REQUIREMENTS: Readonly<Record<string, ToolRequirements>> = {\n contentrain_init: { projectRoot: true },\n contentrain_scaffold: { projectRoot: true },\n contentrain_doctor: { projectRoot: true },\n contentrain_bulk: { projectRoot: true },\n contentrain_submit: { projectRoot: true, capabilities: ['localWorktree', 'pushRemote'] },\n contentrain_merge: { projectRoot: true, capabilities: ['localWorktree'] },\n contentrain_branch_list: { projectRoot: true, capabilities: ['localWorktree'] },\n contentrain_branch_delete: { projectRoot: true, capabilities: ['localWorktree'] },\n contentrain_scan: { projectRoot: true, capabilities: ['astScan'] },\n // Registration requires the extract path (sourceRead); reuse mode\n // additionally needs sourceWrite, which stays a call-time check because\n // it depends on the `mode` input.\n contentrain_apply: { projectRoot: true, capabilities: ['sourceRead'] },\n // Media tools exist only where the provider exposes a media stack\n // (Studio MCP Cloud). Local and plain remote providers never list them.\n contentrain_media_list: { media: true },\n contentrain_media_get: { media: true },\n contentrain_media_ingest: { media: true },\n contentrain_media_update: { media: true },\n contentrain_media_delete: { media: true },\n}\n\n/**\n * Whether a tool can ever succeed for this provider + projectRoot pair.\n * Used by `createServer` to filter registration; also exported for\n * embedders (e.g. Studio) that want to reason about the effective tool\n * surface without spinning up a server.\n */\nexport function isToolAvailable(\n name: string,\n provider: { capabilities: ProviderCapabilities, media?: unknown },\n projectRoot: string | undefined,\n): boolean {\n const req = TOOL_REQUIREMENTS[name]\n if (!req) return true\n if (req.projectRoot && !projectRoot) return false\n if (req.media && !provider.media) return false\n return (req.capabilities ?? []).every(cap => provider.capabilities[cap])\n}\n"],"mappings":";AAyBA,MAAa,oBAAgE;CAC3E,kBAAkB,EAAE,aAAa,MAAM;CACvC,sBAAsB,EAAE,aAAa,MAAM;CAC3C,oBAAoB,EAAE,aAAa,MAAM;CACzC,kBAAkB,EAAE,aAAa,MAAM;CACvC,oBAAoB;EAAE,aAAa;EAAM,cAAc,CAAC,iBAAiB,aAAa;EAAE;CACxF,mBAAmB;EAAE,aAAa;EAAM,cAAc,CAAC,gBAAgB;EAAE;CACzE,yBAAyB;EAAE,aAAa;EAAM,cAAc,CAAC,gBAAgB;EAAE;CAC/E,2BAA2B;EAAE,aAAa;EAAM,cAAc,CAAC,gBAAgB;EAAE;CACjF,kBAAkB;EAAE,aAAa;EAAM,cAAc,CAAC,UAAU;EAAE;CAIlE,mBAAmB;EAAE,aAAa;EAAM,cAAc,CAAC,aAAa;EAAE;CAGtE,wBAAwB,EAAE,OAAO,MAAM;CACvC,uBAAuB,EAAE,OAAO,MAAM;CACtC,0BAA0B,EAAE,OAAO,MAAM;CACzC,0BAA0B,EAAE,OAAO,MAAM;CACzC,0BAA0B,EAAE,OAAO,MAAM;CAC1C;;;;;;;AAQD,SAAgB,gBACd,MACA,UACA,aACS;CACT,MAAM,MAAM,kBAAkB;AAC9B,KAAI,CAAC,IAAK,QAAO;AACjB,KAAI,IAAI,eAAe,CAAC,YAAa,QAAO;AAC5C,KAAI,IAAI,SAAS,CAAC,SAAS,MAAO,QAAO;AACzC,SAAQ,IAAI,gBAAgB,EAAE,EAAE,OAAM,QAAO,SAAS,aAAa,KAAK"}
|
|
@@ -138,4 +138,4 @@ declare function pruneMergedRemoteBranches(projectRoot: string, opts?: {
|
|
|
138
138
|
}): Promise<RemotePruneResult>;
|
|
139
139
|
//#endregion
|
|
140
140
|
export { RemoteDeleteResult as a, checkBranchHealth as c, deleteRemoteBranch as d, isRefMerged as f, RemoteBranchList as i, classifyMergedBranches as l, pruneMergedRemoteBranches as m, BranchHealthCheck as n, RemotePruneResult as o, listRemoteCrBranches as p, CleanupResult as r, branchDiff as s, BranchDiffResult as t, cleanupMergedBranches as u };
|
|
141
|
-
//# sourceMappingURL=branch-lifecycle-
|
|
141
|
+
//# sourceMappingURL=branch-lifecycle-AwBJIheA.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branch-lifecycle-
|
|
1
|
+
{"version":3,"file":"branch-lifecycle-AwBJIheA.d.mts","names":[],"sources":["../src/git/branch-lifecycle.ts"],"mappings":";;;;UAIiB,aAAA;EACf,OAAA;EACA,SAAA;EACA,eAAA;AAAA;AAAA,UAGe,iBAAA;EACf,KAAA;EACA,MAAA;EACA,QAAA;EACA,OAAA;EACA,OAAA;EACA,OAAA;AAAA;;;;;iBAOoB,qBAAA,CAAsB,WAAA,WAAsB,OAAA,CAAQ,aAAA;;;;;;iBAoEpD,iBAAA,CAAkB,WAAA,WAAsB,OAAA,CAAQ,iBAAA;AAAA,UAkDrD,gBAAA;;EAEf,MAAA;EAxH0C;EA0H1C,IAAA;EA1HwE;EA4HxE,IAAA;EA5HqF;EA8HrF,KAAA;EA1DqC;EA4DrC,YAAA;AAAA;;;;;;AAVF;;;;;;;;iBA0BsB,UAAA,CACpB,WAAA,UACA,IAAA;EAAQ,MAAA;EAAgB,IAAA;AAAA,IACvB,OAAA,CAAQ,gBAAA;;;;;;iBA0FW,WAAA,CACpB,GAAA,EAAK,SAAA,EACL,GAAA,UACA,IAAA,UACA,IAAA;EAAS,gBAAA;AAAA,IACR,OAAA;;;;AALH;;;;;;;;;;;iBAiCsB,sBAAA,CACpB,WAAA,UACA,QAAA,YACA,IAAA,WACA,IAAA;EAAS,iBAAA;AAAA,IACR,OAAA,CAAQ,GAAA;AAAA,UA4EM,kBAAA;EACf,OAAA;EA7EQ;EA+ER,OAAA;EAlFA;EAoFA,OAAA;AAAA;;;;;;AALF;;;iBAgBsB,kBAAA,CACpB,WAAA,UACA,MAAA,UACA,IAAA;EAAS,MAAA,GAAS,iBAAA;EAA0B,SAAA;AAAA,IAC3C,OAAA,CAAQ,kBAAA;AAAA,UAuBM,gBAAA;EACf,MAAA;EACA,QAAA;IAAY,IAAA;IAAc,GAAA;EAAA;EAzBjB;EA2BT,KAAA;AAAA;;;;;;iBAQoB,oBAAA,CACpB,WAAA,UACA,IAAA;EAAS,SAAA;AAAA,IACR,OAAA,CAAQ,gBAAA;AAAA,UAoBM,iBAAA;EA1DY;EA4D3B,OAAA;EACA,IAAA;EACA,MAAA;EACA,OAAA;AAAA;;;;;;;;iBAYoB,yBAAA,CACpB,WAAA,UACA,IAAA;EAAS,MAAA,GAAS,iBAAA;EAA0B,GAAA;EAAc,MAAA;EAAkB,SAAA;AAAA,IAC3E,OAAA,CAAQ,iBAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as __exportAll, t as __commonJSMin } from "./chunk-BEJ448es.mjs";
|
|
2
|
-
import { t as require_source_map_generator } from "./source-map-generator-
|
|
2
|
+
import { t as require_source_map_generator } from "./source-map-generator-BIEiz3If.mjs";
|
|
3
3
|
import { createRequire } from "module";
|
|
4
4
|
//#region ../../node_modules/.pnpm/svelte@4.2.20/node_modules/svelte/src/compiler/Stats.js
|
|
5
5
|
const now = () => performance.now();
|
|
@@ -44506,4 +44506,4 @@ async function preprocess(source, preprocessor, options) {
|
|
|
44506
44506
|
//#endregion
|
|
44507
44507
|
export { VERSION, compile, parse, preprocess, walk };
|
|
44508
44508
|
|
|
44509
|
-
//# sourceMappingURL=compiler-
|
|
44509
|
+
//# sourceMappingURL=compiler-BZXAN4Ir.mjs.map
|