fix(modules): access 解析器支持 JSON 注册表(守望 registry.json)+ 认知链022 + 守望 default_branch 纠正登记
耳耳蛋反馈 pickup 不认注册编号 → 检查确认守望同样未对接 → 解析器双格式化(JSON 对象遍历 + HDLP 编号行提取) 守望实测 PER-MM-ARCH-001→yaoyan、曜识→yaoshi;胖头鱼 PTS-VA-001-EED 回归通过
This commit is contained in:
parent
8ec27ec00f
commit
cf3e106ec9
4 changed files with 89 additions and 9 deletions
|
|
@ -34,7 +34,7 @@
|
|||
"guanghu-nodes/MM-GZ-001/contributions",
|
||||
"guanghu-nodes/MM-GZ-001/personas"
|
||||
],
|
||||
"persona_registry": "CA-PERSONA-REGISTRY.hdlp",
|
||||
"persona_registry": "CA-PERSONA-REGISTRY.hdlp 或 guanghu-nodes/<节点>/personas/registry.json(HDLP文本或JSON均支持)",
|
||||
"persona_aliases": {
|
||||
"eererdan": [
|
||||
"耳耳蛋",
|
||||
|
|
@ -44,6 +44,15 @@
|
|||
"jianying": [
|
||||
"鉴影",
|
||||
"ICE-GL-CA001"
|
||||
],
|
||||
"yaoyan": [
|
||||
"曜砚",
|
||||
"PER-MM-ARCH-001"
|
||||
],
|
||||
"yaoshi": [
|
||||
"曜识",
|
||||
"TCS-YAO-SENSE-0001∞",
|
||||
"TCS-GL-1000∞"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -174,14 +174,31 @@ async function registryAliases(){
|
|||
const r=await fj("/api/v1/repos/"+CFG.repo+"/contents/"+regPath.split("/").map(encodeURIComponent).join("/")+"?ref="+encodeURIComponent(CFG.default_branch));
|
||||
if(r.status===200&&r.data&&r.data.content){
|
||||
const txt=Buffer.from(r.data.content,"base64").toString("utf8");
|
||||
for(const sec of txt.split(/^## /m).slice(1)){
|
||||
let canon=null;
|
||||
for(const [a,c] of Object.entries(map)){if(a&&sec.includes(a)){canon=c;break;}}
|
||||
if(!canon)continue;
|
||||
for(const ln of sec.split("\n")){
|
||||
let m=ln.match(/编号[::]\s*([^\s((]+)/);if(m)map[m[1].toLowerCase()]=canon;
|
||||
m=ln.match(/现用\s*([A-Z][A-Z0-9-]+)/);if(m)map[m[1].toLowerCase()]=canon;
|
||||
m=ln.match(/独立编号体系[::]\s*(\S+)/);if(m)map[m[1].toLowerCase()]=canon;
|
||||
let parsedAsJson=false;
|
||||
try{
|
||||
const j=JSON.parse(txt);parsedAsJson=true;
|
||||
const findCanon=(o)=>{for(const [a,c] of Object.entries(map)){if(a&&((o.name||"").toLowerCase()===a||(o.id||"").toLowerCase()===a))return c;}return null;};
|
||||
(function walk(o){
|
||||
if(Array.isArray(o)){o.forEach(walk);return;}
|
||||
if(o&&typeof o==="object"){
|
||||
if(typeof o.name==="string"&&typeof o.id==="string"){
|
||||
const canon=findCanon(o);
|
||||
if(canon){map[o.id.toLowerCase()]=canon;map[o.name.toLowerCase()]=canon;(o.aliases||[]).forEach(x=>{if(typeof x==="string")map[x.toLowerCase()]=canon;});}
|
||||
}
|
||||
Object.values(o).forEach(walk);
|
||||
}
|
||||
})(j);
|
||||
}catch(e){}
|
||||
if(!parsedAsJson){
|
||||
for(const sec of txt.split(/^## /m).slice(1)){
|
||||
let canon=null;
|
||||
for(const [a,c] of Object.entries(map)){if(a&&sec.includes(a)){canon=c;break;}}
|
||||
if(!canon)continue;
|
||||
for(const ln of sec.split("\n")){
|
||||
let m=ln.match(/编号[::]\s*([^\s((]+)/);if(m)map[m[1].toLowerCase()]=canon;
|
||||
m=ln.match(/现用\s*([A-Z][A-Z0-9-]+)/);if(m)map[m[1].toLowerCase()]=canon;
|
||||
m=ln.match(/独立编号体系[::]\s*(\S+)/);if(m)map[m[1].toLowerCase()]=canon;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue