/** * 域引擎共享工具 — 切片/页绑定/产物路径/工程结构派生/上游加载等纯派生 helper。 * * 职责边界: * - 负责:切片承接 REQ 与页级原型解析、产物 scope 路径派生、研讨记录路径、用户 artifact contract 扩展、 * 上游产物内容加载、项目工程结构派生、原型素材/需求文档扫描 * - 不负责:域差异 scope、调 AI、写文件、跑门禁 * * 被谁调用:VerificationService、任务证据策略、gate executor/validator、审查与 doctor * 调用谁:node:fs、node:path、gray-matter、gate/scope_resolver、core/git_utils、shared/glob_path */ import type { DomainContract } from "../core/types.js"; import { type ProjectMapOverrideValue } from "./project_map.js"; export declare const PAGE_BINDING_RE: RegExp; /** 解析「对应原型页面」字段为 {端}/{slug} token 列表: * 先剥离 markdown 行内标记(加粗、行内代码)+ 括号注释(中/英文,说明性内容非 token), * 再按 PAGE_BINDING_SEP 分隔,避免把括号内逗号当边界或让 Markdown 标记污染 token。 * XVAL-SLC-PAGE check 与 resolveSlicePrototypePages 共用,避免双源漂移。 */ export declare function parsePageBindings(pageValue: string): string[]; export declare function resolveSlicePrototypePages(sliceId: string, projectRoot: string, overrides?: Record): string[]; /** 解析本切片承接的需求 REQ 列表(build/code 注入,让 AI 对照产码)。 * 读 slice_plan 定位 ### {sliceId} 块,块内用共享提取器读取 REQ-*(含语义段,去重)。 * 与 resolveSlicePrototypePages 同款拆块(content.split(/^###\s+(SLC-\S+)/m))。 * 注:SLICE-REQ-COVERAGE check(design-gate)查"每 REQ 有切片承接"——本 helper 反向查"本切片承接哪些 REQ", * 解析逻辑同源(块内 REQ 文本)。未来若 check 查"切片 REQ 绑定"须共用本 helper,避免双源漂移 * ([[slice-prototype-binding-parsing]] 同源解析陷阱)。 */ export declare function resolveSliceReqs(sliceId: string, projectRoot: string, overrides?: Record): string[]; /** * 解析 artifact 写盘 scope 的允许目录(产物主路径 + companion 路径,查 project_map override)。 * glob path_pattern(含 ** 通配符,如多端原型说明路径)取首个 * 前的固定前缀目录; * override 后变单路径 → 取 dirname。greenfield 无 override 时使用 contract 默认目录。 */ export declare function resolveArtifactScopePaths(artifact: { kind: string; path_pattern: string; companion_files?: string[]; }, overrides?: Record): string[]; /** * 计算研讨记录文件路径(全中文语义):docs/研讨记录/{域中文}/{产物中文}-研讨记录.md * 产物中文名从 path_pattern 文件名派生(去 .md + 去编号前缀如 "01-"),与产物本身中文命名一致。 */ export declare function deliberationRecordPath(domain: string, artifact: { kind?: string; path_pattern: string; }, overrides?: Record): string; /** 合并内置 contract + 用户 artifact produces(4 engine contract getter 用)。无用户 artifact 时返回原 contract。 */ export declare function getExtendedContract(base: DomainContract, projectRoot: string): DomainContract; /** * 项目工程结构单元(deriveProjectStructure 返回)—— 多工程治理的单一真相源。 * kind: frontend-end(前端端,独立部署) / backend(后端服务) / shared(共享库,不独立部署,被各端 build 依赖)。 */ export interface ProjectEndpoint { id?: string; dir: string; kind: "frontend-end" | "backend" | "shared"; deployable: boolean; release_unit: boolean; source: "intent" | "design_doc"; } type ProjectKind = ProjectEndpoint["kind"]; type ProjectDeclaration = { id?: string; dir: string; kind?: ProjectKind; deployable?: boolean; release_unit?: boolean; tech_stack?: { lang?: string; framework?: string; }; }; /** * 派生项目工程结构(多工程治理单一真相源):intent projects 显式声明优先;greenfield 从 design_doc 第6.3节 端模块(带 kind)+ 第6.2节 后端派生。 * 所有多工程治理(scope/门禁/部署)用此,避免各处分散判定不一致(治本门禁只认 intent 盲点 + 部署无工程感知 + .gitignore 门禁盲点)。 */ export declare function deriveProjectStructure(projectRoot: string, config: { projects?: ProjectDeclaration[]; } | undefined, designDocPath?: string): ProjectEndpoint[]; /** * 从 design_doc 的服务端/核心运行时章节解析后端工程目录。 * 匹配「后端工程目录」后的反引号目录(如 `backend/` `server/`);读不到或不合法时返回 null,不猜项目布局。 */ export declare function parseBackendDir(designDocAbsPath: string): string | null; /** * 从 design_doc 第6.3节 端模块清单表格派生前端端+共享库工程(带 kind,多工程治理单一真相源核心)。 * FE-shared → shared(库,deployable=false,不独立部署,被各端 build 依赖);FE-*(非 shared)→ frontend-end(独立部署)。 * 鲁棒:表头定位「端 ID」+「项目目录」两列(列顺序变化也解析)。子目录路径支持(frontend/admin-portal,全栈前端集中一子目录)。 * 纯后端(无端模块表头)/文件不存在 → []。 */ export declare function parseEndpointsFromDesignContent(content: string): ProjectEndpoint[]; /** 文件系统适配器:读取 design_doc 后委托纯内容解析器。 */ export declare function parseEndpointsFromDesignDoc(designDocAbsPath: string): ProjectEndpoint[]; /** parseEndpointsFromDesignDoc 的目录列表视图(向后兼容:返回 frontend-end + shared 的 dir[])。 */ export declare function parseEndpointProjectDirs(designDocAbsPath: string): string[]; /** * 从 requirement_analysis 第9节 端清单派生端模块草案(id + kind + 第9节 端名/技术栈参考)。 * 第9节 表格列:端 ID / 端名称 / 形态 / 技术栈 / 职责 / 本期交付(**无 dir 列**——dir 须用户研讨,非派生)。 * 鲁棒:用「端清单」文本锚点 + 表头含「端 ID」定位(第9节 编号会漂移 ## 9 / ## 10,不用行号);区别于 第6.3节(第6.3节 表头含「项目目录」)。 * 纯后端或文件不存在时返回空数组。宿主据此形成模块草案,用户确认后由 apply_projects 写入。 */ export interface RequirementEndpoint { id: string; kind: "frontend-end" | "shared"; name?: string; tech_stack_raw?: string; } export declare function parseEndpointsFromRequirementDoc(reqAbsPath: string): RequirementEndpoint[]; /** * 多端 code 产物的内容摘要(verify/doctor 防漂移用)。 * code 产物分布在多个源码根;摘要必须覆盖工作树真实内容,不能使用忽略未提交修改的 HEAD。 * exclude(intent.scan_exclude)同步排除:被排除路径(参考原型包/vendored 等)内容变更不改变摘要。 */ export declare function aggregateMultiSrcHash(projectRoot: string, exclude?: string[]): Promise; export {};