@longzai-intelligence-docs/core 0.0.14 → 0.0.16

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/dist/index.d.ts CHANGED
@@ -420,6 +420,12 @@ type IndexLinkPatternInput = {
420
420
  * 目标 slug 两捕获组。产出的模式非全局,`extractIndexRefs` 消费时自建全局
421
421
  * 实例,避免模块级正则共享 lastIndex 状态
422
422
  *
423
+ * @remarks
424
+ * 链接文本宽容契约——文本段为平衡方括号组或普通字符,容忍一层嵌套的
425
+ * 平衡方括号,标题携带记号如 `[0.0.22]` 的登记行天然可解析,转义不做
426
+ * 强制要求,存量内容零改动。未配对方括号按字面字符消费与既有行为一致,
427
+ * 二层及以上嵌套不属宽容面仍按缺行报出,无括号路径逐字节行为不变。宽容
428
+ * 处理经用户 2026-10-14 终裁确立,判例归 ADR 0126 修订注
423
429
  * @param input - 方言形态源入参
424
430
  * @returns 索引链接匹配模式
425
431
  */
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import"./rolldown-runtime-BqT_7tdF.js";import{createRequire as e}from"node:module";import*as t from"node:path";import{pathToFileURL as n}from"node:url";import*as r from"zod";const i=`[a-z]+(?:-[a-z]+)*`,a=/^[a-z]+(?:-[a-z]+)*$/,o=`[a-z0-9]+(?:-[a-z0-9]+)*`,s=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,c=`[a-z][a-z0-9-]*`,l=/^[a-z][a-z0-9-]*$/,u=[`forbid`,`allow`];function d(e){return{name:e.name,description:e.description,arguments:e.arguments,options:e.options,schema:e.schema,action:async(t,n)=>{await e.action(e.schema.parse(t),n)}}}function f(e){if(!l.test(e.name))throw Error(`插件名须为 kebab-case(小写字母开头,仅小写字母/数字/连字符):${e.name}`);if(e.version.trim()===``)throw Error(`插件 ${e.name} 的 version 不得为空`);if(e.commands.length===0)throw Error(`插件 ${e.name} 须至少声明一个命令工厂`);return e}function p(e){let t={},n=[];for(let r of e){let e=r.provides??{};for(let[i,a]of Object.entries(e))i in t?n.push(`服务「${i}」被重复提供(${i} 已在册,${r.name} 重复声明)`):t[i]=a}for(let r of e){let e=r.consumes??[];for(let i of e)i in t||n.push(`插件「${r.name}」消费的服务「${i}」无提供方(在册服务:${Object.keys(t).join(`、`)||`无`})`)}return{services:t,errors:n}}function m(e,t){let n={};for(let r of e.consumes??[])n[r]=t[r];return n}async function h(e,t){for(let n of e){let e=n[t];e!==void 0&&await e()}}function g(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)r.target.trim()===``&&t.push(`豁免条目 target 不得为空`),r.reason.trim()===``&&t.push(`豁免条目「${r.target}」reason 不得为空`),r.issue.trim()===``&&t.push(`豁免条目「${r.target}」issue 收编指针不得为空`),n.has(r.target)&&t.push(`豁免条目「${r.target}」重复登记`),n.add(r.target);return t}function _(e,t){let n=g(t);if(n.length>0)throw Error(`豁免条目形状非法,拒绝判定:${n.join(`;`)}`);let r=new Set(e),i=[],a=[],o=/* @__PURE__ */ new Set;for(let e of t)r.has(e.target)?(i.push(e),o.add(e.target)):a.push(e);return{suppressed:i,active:e.filter(e=>!o.has(e)),stale:a}}function v(e){return/\d/.test(e)}function y(e){let t=/^\d+[-._ ](.+)\.[^.]+$/.exec(e);return t===null?null:t[1]??``}function b(e){return e.toLowerCase().replace(/[\s_]+/g,`-`).replace(/[^a-z0-9-]/g,``).replace(/-+/g,`-`).replace(/^-|-$/g,``)}function x(e,t){return t===`forbid`&&v(e)}const S=`- `,C=` — `,w=` - `,T=`./`;function E(e){return e.numberSource===void 0?RegExp(`\\[([^\\]\\n]+)\\]\\((?:\\.\\/)?(${e.slugSource})\\.md\\)`):RegExp(`\\[[^\\]\\n]*\\]\\((?:\\.\\/)?(${e.numberSource})-(${e.slugSource})\\.md\\)`)}function D(e,t){let n=e[t];if(n===void 0)throw Error(`索引链接捕获组 ${t} 未命中——模式内部口径错误`);return n}function O(e,t){let n=/* @__PURE__ */ new Map;for(let r of e.matchAll(new RegExp(t.source,`g`)))n.set(D(r,1),D(r,2));return n}function k(e){return`- [${e.number===void 0?e.title:`${e.number}${C}${e.title}`}](${e.number===void 0?e.target:`./${e.target}`})${e.summary===void 0?``:` - ${e.summary}`}`}var A=class extends Error{entry;constructor(e,t){super(`外部插件「${e}」装载失败:${t}`),this.name=`PluginLoadError`,this.entry=e}};const j=r.object({name:r.string().regex(l,`name 须为 kebab-case 非空字符串`),version:r.string().min(1,`version 须为非空字符串`),commands:r.custom(e=>Array.isArray(e)&&e.length>0&&e.every(e=>typeof e==`function`),`commands 须为非空的命令工厂函数数组`),provides:r.custom(e=>typeof e==`object`&&!!e&&!Array.isArray(e),`provides 存在时须为对象(服务名 → API 对象)`).optional(),consumes:r.array(r.string()).optional(),hooks:r.custom(e=>typeof e==`object`&&!!e&&Object.values(e).every(e=>e===void 0||typeof e==`function`),`hooks 存在时须为对象且各钩子为函数`).optional(),configSchema:r.custom(e=>typeof e==`object`&&!!e&&`parse`in e,`configSchema 存在时须为具备 parse 方法的 zod schema`).optional()});function M(r,i){let a=e(t.join(i,`package.json`));return r.startsWith(`./`)||r.startsWith(`../`)?n(t.resolve(i,r)).href:n(a.resolve(r)).href}function N(e){return typeof e==`object`&&!!e&&`default`in e}async function P(e,t){let n=await import(M(e,t)).catch(t=>{throw new A(e,`模块不可达(${t instanceof Error?t.message:String(t)})`)}),r=N(n)?n.default:n,i=j.safeParse(r);if(!i.success)throw new A(e,i.error.issues.map(e=>e.message).join(`;`));return i.data}const F=r.strictObject({name:r.string().regex(l,`name 须为 kebab-case 非空字符串`),status:r.enum([`登记中`,`已发布`]),holdingRepo:r.string().min(1,`holdingRepo 须为非空字符串(自持仓仓名)`),entryPackage:r.string().min(1).optional(),version:r.string().min(1).optional(),compatibleRange:r.string().min(1).optional(),docs:r.string().min(1).optional(),summary:r.string().min(1,`summary 须为非空一句话职能`)}).refine(e=>e.status!==`已发布`||e.entryPackage!==void 0,{error:`已发布条目必须携带 entryPackage`,path:[`entryPackage`]}).refine(e=>e.status!==`已发布`||e.version!==void 0,{error:`已发布条目必须携带 version`,path:[`version`]}),I=r.strictObject({category:r.string().regex(l,`category 须为 kebab-case 非空字符串`),names:r.array(r.string().regex(l,`文档名须为 kebab-case 非空字符串`)).min(1,`names 须为非空数组`)}).refine(e=>new Set(e.names).size===e.names.length,{error:`names 不得重复`,path:[`names`]}),L=r.strictObject({artifact:r.string().min(1,`artifact 须为非空产物路径或形态描述`),mechanism:r.string().min(1,`mechanism 须为非空生成机制描述`),handEdit:r.enum([`禁手编`,`可手编`]),marker:r.string().min(1).optional()}),R=r.strictObject({path:r.string().min(1,`path 须为非空仓内相对路径`)}),z=r.strictObject({path:r.string().min(1,`path 须为非空仓内相对路径`)}),B=r.strictObject({path:r.string().min(1,`path 须为非空仓内相对路径`),contains:r.string().min(1,`contains 须为非空标记子串`)}),V=r.strictObject({repo:r.string().min(1,`repo 须为非空探针目标仓名`),requires:r.array(R).min(1).optional(),ifPresent:r.array(z).min(1).optional(),markerIn:r.array(B).min(1).optional()}).refine(e=>e.requires!==void 0||e.ifPresent!==void 0||e.markerIn!==void 0,{error:`探针至少须声明 requires / ifPresent / markerIn 之一`,path:[`requires`]}),H=r.strictObject({name:r.string().regex(l,`name 须为 kebab-case 非空字符串`),summary:r.string().min(1,`summary 须为非空一句话职能`),status:r.enum([`登记中`,`已确认`]),truthSource:r.strictObject({repo:r.string().min(1,`repo 须为非空真源仓或仓族描述`),path:r.string().min(1,`path 须为非空真源路径`)}),renders:r.array(L).min(1).optional(),distribution:r.string().min(1).optional(),consumers:r.array(r.string().min(1)).min(1,`consumers 须为非空消费面清单`),probes:r.array(V).min(1).optional(),notes:r.string().min(1).optional()});function U(e){let t=F.safeParse(e);if(!t.success)throw Error(`插件登记条目非法:${t.error.issues.map(e=>`${e.path.join(`.`)||`(root)`}——${e.message}`).join(`;`)}`);return t.data}function W(e){let t=I.safeParse(e);if(!t.success)throw Error(`文档目录条目非法:${t.error.issues.map(e=>`${e.path.join(`.`)||`(root)`}——${e.message}`).join(`;`)}`);return t.data}function G(e){let t=H.safeParse(e);if(!t.success)throw Error(`真源登记条目非法:${t.error.issues.map(e=>`${e.path.join(`.`)||`(root)`}——${e.message}`).join(`;`)}`);return t.data}const K=`longzai-intelligence-docs-registry`,q=`LZI_DOCS_REGISTRY_ROOT`,J=`registry`,Y=r.object({id:r.string(),name:r.string().min(1,`分类名称不能为空`),slug:r.string().min(1,`分类标识不能为空`),description:r.string().nullable(),parentId:r.string().nullable(),sortOrder:r.number().int().min(0),createdAt:r.string(),updatedAt:r.string()}),X=r.object({id:r.string(),docId:r.string(),version:r.string().min(1,`版本号不能为空`),content:r.string(),createdAt:r.string(),updatedAt:r.string()});export{J as DOCS_REGISTRY_DECLARATION_DIR,K as DOCS_REGISTRY_REPO_NAME,q as DOCS_REGISTRY_ROOT_ENV_KEY,I as DocCategoryEntrySchema,Y as DocCategorySchema,X as DocVersionSchema,l as IDENTIFIER_KEBAB_PATTERN,c as IDENTIFIER_KEBAB_SOURCE,S as INDEX_LIST_PREFIX,w as INDEX_SUMMARY_SEPARATOR,T as INDEX_TARGET_PREFIX,C as INDEX_TEXT_DASH,s as NUMBERED_SLUG_PATTERN,o as NUMBERED_SLUG_SOURCE,F as PluginEntrySchema,A as PluginLoadError,a as SEMANTIC_SLUG_PATTERN,i as SEMANTIC_SLUG_SOURCE,u as SLUG_DIGIT_POLICIES,H as TruthSourceEntrySchema,E as buildIndexLinkPattern,p as buildServiceRegistry,v as containsDigit,W as defineDocCategory,f as definePlugin,U as definePluginEntry,G as defineTruthSourceEntry,_ as evaluateWaivers,O as extractIndexRefs,y as extractSlugSegment,P as loadExternalPlugin,d as pluginCommand,k as renderIndexListLine,m as resolveConsumedServices,h as runPipelineHooks,b as titleToKebabSlug,g as validateWaiverEntries,x as violatesSlugDigitPolicy};
1
+ import"./rolldown-runtime-BqT_7tdF.js";import{createRequire as e}from"node:module";import*as t from"node:path";import{pathToFileURL as n}from"node:url";import*as r from"zod";const i=`[a-z]+(?:-[a-z]+)*`,a=/^[a-z]+(?:-[a-z]+)*$/,o=`[a-z0-9]+(?:-[a-z0-9]+)*`,s=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,c=`[a-z][a-z0-9-]*`,l=/^[a-z][a-z0-9-]*$/,u=[`forbid`,`allow`];function d(e){return{name:e.name,description:e.description,arguments:e.arguments,options:e.options,schema:e.schema,action:async(t,n)=>{await e.action(e.schema.parse(t),n)}}}function f(e){if(!l.test(e.name))throw Error(`插件名须为 kebab-case(小写字母开头,仅小写字母/数字/连字符):${e.name}`);if(e.version.trim()===``)throw Error(`插件 ${e.name} 的 version 不得为空`);if(e.commands.length===0)throw Error(`插件 ${e.name} 须至少声明一个命令工厂`);return e}function p(e){let t={},n=[];for(let r of e){let e=r.provides??{};for(let[i,a]of Object.entries(e))i in t?n.push(`服务「${i}」被重复提供(${i} 已在册,${r.name} 重复声明)`):t[i]=a}for(let r of e){let e=r.consumes??[];for(let i of e)i in t||n.push(`插件「${r.name}」消费的服务「${i}」无提供方(在册服务:${Object.keys(t).join(`、`)||`无`})`)}return{services:t,errors:n}}function m(e,t){let n={};for(let r of e.consumes??[])n[r]=t[r];return n}async function h(e,t){for(let n of e){let e=n[t];e!==void 0&&await e()}}function g(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)r.target.trim()===``&&t.push(`豁免条目 target 不得为空`),r.reason.trim()===``&&t.push(`豁免条目「${r.target}」reason 不得为空`),r.issue.trim()===``&&t.push(`豁免条目「${r.target}」issue 收编指针不得为空`),n.has(r.target)&&t.push(`豁免条目「${r.target}」重复登记`),n.add(r.target);return t}function _(e,t){let n=g(t);if(n.length>0)throw Error(`豁免条目形状非法,拒绝判定:${n.join(`;`)}`);let r=new Set(e),i=[],a=[],o=/* @__PURE__ */ new Set;for(let e of t)r.has(e.target)?(i.push(e),o.add(e.target)):a.push(e);return{suppressed:i,active:e.filter(e=>!o.has(e)),stale:a}}function v(e){return/\d/.test(e)}function y(e){let t=/^\d+[-._ ](.+)\.[^.]+$/.exec(e);return t===null?null:t[1]??``}function b(e){return e.toLowerCase().replace(/[\s_]+/g,`-`).replace(/[^a-z0-9-]/g,``).replace(/-+/g,`-`).replace(/^-|-$/g,``)}function x(e,t){return t===`forbid`&&v(e)}const S=`- `,C=` — `,w=` - `,T=`./`;function E(e){let t=`(?:\\[[^\\]\\n]*\\]|[^\\]\\n])`;return e.numberSource===void 0?RegExp(`\\[(${t}+)\\]\\((?:\\.\\/)?(${e.slugSource})\\.md\\)`):RegExp(`\\[${t}*\\]\\((?:\\.\\/)?(${e.numberSource})-(${e.slugSource})\\.md\\)`)}function D(e,t){let n=e[t];if(n===void 0)throw Error(`索引链接捕获组 ${t} 未命中——模式内部口径错误`);return n}function O(e,t){let n=/* @__PURE__ */ new Map;for(let r of e.matchAll(new RegExp(t.source,`g`)))n.set(D(r,1),D(r,2));return n}function k(e){return`- [${e.number===void 0?e.title:`${e.number}${C}${e.title}`}](${e.number===void 0?e.target:`./${e.target}`})${e.summary===void 0?``:` - ${e.summary}`}`}var A=class extends Error{entry;constructor(e,t){super(`外部插件「${e}」装载失败:${t}`),this.name=`PluginLoadError`,this.entry=e}};const j=r.object({name:r.string().regex(l,`name 须为 kebab-case 非空字符串`),version:r.string().min(1,`version 须为非空字符串`),commands:r.custom(e=>Array.isArray(e)&&e.length>0&&e.every(e=>typeof e==`function`),`commands 须为非空的命令工厂函数数组`),provides:r.custom(e=>typeof e==`object`&&!!e&&!Array.isArray(e),`provides 存在时须为对象(服务名 → API 对象)`).optional(),consumes:r.array(r.string()).optional(),hooks:r.custom(e=>typeof e==`object`&&!!e&&Object.values(e).every(e=>e===void 0||typeof e==`function`),`hooks 存在时须为对象且各钩子为函数`).optional(),configSchema:r.custom(e=>typeof e==`object`&&!!e&&`parse`in e,`configSchema 存在时须为具备 parse 方法的 zod schema`).optional()});function M(r,i){let a=e(t.join(i,`package.json`));return r.startsWith(`./`)||r.startsWith(`../`)?n(t.resolve(i,r)).href:n(a.resolve(r)).href}function N(e){return typeof e==`object`&&!!e&&`default`in e}async function P(e,t){let n=await import(M(e,t)).catch(t=>{throw new A(e,`模块不可达(${t instanceof Error?t.message:String(t)})`)}),r=N(n)?n.default:n,i=j.safeParse(r);if(!i.success)throw new A(e,i.error.issues.map(e=>e.message).join(`;`));return i.data}const F=r.strictObject({name:r.string().regex(l,`name 须为 kebab-case 非空字符串`),status:r.enum([`登记中`,`已发布`]),holdingRepo:r.string().min(1,`holdingRepo 须为非空字符串(自持仓仓名)`),entryPackage:r.string().min(1).optional(),version:r.string().min(1).optional(),compatibleRange:r.string().min(1).optional(),docs:r.string().min(1).optional(),summary:r.string().min(1,`summary 须为非空一句话职能`)}).refine(e=>e.status!==`已发布`||e.entryPackage!==void 0,{error:`已发布条目必须携带 entryPackage`,path:[`entryPackage`]}).refine(e=>e.status!==`已发布`||e.version!==void 0,{error:`已发布条目必须携带 version`,path:[`version`]}),I=r.strictObject({category:r.string().regex(l,`category 须为 kebab-case 非空字符串`),names:r.array(r.string().regex(l,`文档名须为 kebab-case 非空字符串`)).min(1,`names 须为非空数组`)}).refine(e=>new Set(e.names).size===e.names.length,{error:`names 不得重复`,path:[`names`]}),L=r.strictObject({artifact:r.string().min(1,`artifact 须为非空产物路径或形态描述`),mechanism:r.string().min(1,`mechanism 须为非空生成机制描述`),handEdit:r.enum([`禁手编`,`可手编`]),marker:r.string().min(1).optional()}),R=r.strictObject({path:r.string().min(1,`path 须为非空仓内相对路径`)}),z=r.strictObject({path:r.string().min(1,`path 须为非空仓内相对路径`)}),B=r.strictObject({path:r.string().min(1,`path 须为非空仓内相对路径`),contains:r.string().min(1,`contains 须为非空标记子串`)}),V=r.strictObject({repo:r.string().min(1,`repo 须为非空探针目标仓名`),requires:r.array(R).min(1).optional(),ifPresent:r.array(z).min(1).optional(),markerIn:r.array(B).min(1).optional()}).refine(e=>e.requires!==void 0||e.ifPresent!==void 0||e.markerIn!==void 0,{error:`探针至少须声明 requires / ifPresent / markerIn 之一`,path:[`requires`]}),H=r.strictObject({name:r.string().regex(l,`name 须为 kebab-case 非空字符串`),summary:r.string().min(1,`summary 须为非空一句话职能`),status:r.enum([`登记中`,`已确认`]),truthSource:r.strictObject({repo:r.string().min(1,`repo 须为非空真源仓或仓族描述`),path:r.string().min(1,`path 须为非空真源路径`)}),renders:r.array(L).min(1).optional(),distribution:r.string().min(1).optional(),consumers:r.array(r.string().min(1)).min(1,`consumers 须为非空消费面清单`),probes:r.array(V).min(1).optional(),notes:r.string().min(1).optional()});function U(e){let t=F.safeParse(e);if(!t.success)throw Error(`插件登记条目非法:${t.error.issues.map(e=>`${e.path.join(`.`)||`(root)`}——${e.message}`).join(`;`)}`);return t.data}function W(e){let t=I.safeParse(e);if(!t.success)throw Error(`文档目录条目非法:${t.error.issues.map(e=>`${e.path.join(`.`)||`(root)`}——${e.message}`).join(`;`)}`);return t.data}function G(e){let t=H.safeParse(e);if(!t.success)throw Error(`真源登记条目非法:${t.error.issues.map(e=>`${e.path.join(`.`)||`(root)`}——${e.message}`).join(`;`)}`);return t.data}const K=`longzai-intelligence-docs-registry`,q=`LZI_DOCS_REGISTRY_ROOT`,J=`registry`,Y=r.object({id:r.string(),name:r.string().min(1,`分类名称不能为空`),slug:r.string().min(1,`分类标识不能为空`),description:r.string().nullable(),parentId:r.string().nullable(),sortOrder:r.number().int().min(0),createdAt:r.string(),updatedAt:r.string()}),X=r.object({id:r.string(),docId:r.string(),version:r.string().min(1,`版本号不能为空`),content:r.string(),createdAt:r.string(),updatedAt:r.string()});export{J as DOCS_REGISTRY_DECLARATION_DIR,K as DOCS_REGISTRY_REPO_NAME,q as DOCS_REGISTRY_ROOT_ENV_KEY,I as DocCategoryEntrySchema,Y as DocCategorySchema,X as DocVersionSchema,l as IDENTIFIER_KEBAB_PATTERN,c as IDENTIFIER_KEBAB_SOURCE,S as INDEX_LIST_PREFIX,w as INDEX_SUMMARY_SEPARATOR,T as INDEX_TARGET_PREFIX,C as INDEX_TEXT_DASH,s as NUMBERED_SLUG_PATTERN,o as NUMBERED_SLUG_SOURCE,F as PluginEntrySchema,A as PluginLoadError,a as SEMANTIC_SLUG_PATTERN,i as SEMANTIC_SLUG_SOURCE,u as SLUG_DIGIT_POLICIES,H as TruthSourceEntrySchema,E as buildIndexLinkPattern,p as buildServiceRegistry,v as containsDigit,W as defineDocCategory,f as definePlugin,U as definePluginEntry,G as defineTruthSourceEntry,_ as evaluateWaivers,O as extractIndexRefs,y as extractSlugSegment,P as loadExternalPlugin,d as pluginCommand,k as renderIndexListLine,m as resolveConsumedServices,h as runPipelineHooks,b as titleToKebabSlug,g as validateWaiverEntries,x as violatesSlugDigitPolicy};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@longzai-intelligence-docs/core",
3
- "version": "0.0.14",
3
+ "version": "0.0.16",
4
4
  "description": "Longzai Intelligence Docs 核心类型与插件契约",
5
5
  "keywords": [
6
6
  "longzai-intelligence",