chore: establish YCode replication baseline and TODO

This commit is contained in:
xiaohan.yuan committed 2026-10-17 02:43:49 +08:00
commit 6dc59f89ba
1118 files changed
+196002

No files matched your search

+34
View File
@@ -0,0 +1,34 @@
/** Recover only pinned, already exported REA artifacts. --write creates module-private assets. */
import fs from 'node:fs'
import crypto from 'node:crypto'
import { parse } from '@babel/parser'
import postcss from 'postcss'
const hash = value => crypto.createHash('sha256').update(value).digest('hex')
const runtime = JSON.parse(fs.readFileSync('.tmp/rea-runtime-scripts.json','utf8'))
const selected = JSON.parse(fs.readFileSync('.tmp/rea-skills-market-selected-20261016.json','utf8'))
const manifest = { version:'5.8.2', rootSha256:'035254bc76310ea46317433e4840602094543ef323d2d5c5aff7c131729de918', evidence:[runtime.evidence_id,selected.evidence_id], sources:[], bodies:[], adaptations:['React singleton and JSX runtime are local.', 'CardFrame source body is unchanged; local record data, avatar fallback, tooltip and checkbox are explicit host adapters.', 'CSS declarations are unchanged with a capability-center selector scope; skill-market topbar ancestry is adapted to the shared portal header.'] }
function source(name,expected){const found=selected.normalized_result.files.find(f=>f.path.endsWith(name))??runtime.items.find(f=>f.file_path.endsWith(name))?.source.artifact;if(!found||hash(found.text)!==expected||found.sha256!==expected)throw Error('Pinned REA SHA mismatch '+name);manifest.sources.push({name,sha256:expected});return found.text}
const market=source('skills-market-Cwf-NvXV.js','f1434cadabf5ed3762f00fc2a356bc7418b0b4aab27db62dc9fbbe5add6f6dfb')
const detail=source('standalone-skill-detail-modal-Bi5X8CZ4.js','ee7de2a7123f94110aa01258d3d6b3fcc3ce48f2ec5fd8f91cb3367c817a0f01')
function body(text,name){let found;function visit(n){if(!n||typeof n!=='object')return;if(n.type==='FunctionDeclaration'&&n.id?.name===name)found=n;for(const [key,v]of Object.entries(n)){if(key==='loc'||key==='comments')continue;if(Array.isArray(v))v.forEach(visit);else if(v&&typeof v==='object')visit(v)}}visit(parse(text,{sourceType:'module'}).program);if(!found)throw Error('Missing source '+name);const value=text.slice(found.start,found.end);manifest.bodies.push({name,start:found.start,end:found.end,sha256:hash(value)});return value.replace(/\(0,[A-Za-z_$][\w$]*\.(jsx|jsxs)\)/g,' JSX.$1')}
const iconNames=['CardMoreIcon','PlusIcon','TrashIcon','FolderIcon','CloseIcon','UseSkillIcon','DocIcon','BasicInfoIcon']
let js="import * as React from 'react';import * as JSX from 'react/jsx-runtime';\n"
js+=iconNames.map(name=>body(detail,name)).join('\n')
js+=`\nconst V=()=>key=>key,We=value=>typeof value==='string'?value:'',G=JSX;let HostAvatar,HostTooltip,HostCheckbox;export function setSkillPrimitives({Avatar,Tooltip,Checkbox}){HostAvatar=Avatar;HostTooltip=Tooltip;HostCheckbox=Checkbox}const Ye=props=>JSX.jsx(HostAvatar,props),E=props=>JSX.jsx(HostTooltip,props),CardBatchCheckbox=props=>JSX.jsx(HostCheckbox,props);const Rr=()=>null,Er=()=>null,mr=()=>null;const renderSkillCardStatIcon=()=>null,Ze=value=>String(value),ki={};\n`
js+=body(market,'CardFrame')+'\nexport {CardFrame,'+iconNames.join(',')+'};\n'
const declarations=`import type {ComponentType,ReactNode} from 'react';\nexport const CardFrame:ComponentType<{title:string;description:string;installed?:boolean;installedListMode?:boolean;disabled?:boolean;batchMode?:boolean;selected?:boolean;onToggleSelect?():void;onOpen?():void;actions?:ReactNode;className?:string}>;\n${iconNames.map(name=>`export const ${name}:ComponentType;`).join('\n')}\nexport function setSkillPrimitives(value:{Avatar:ComponentType<any>;Tooltip:ComponentType<any>;Checkbox:ComponentType<any>}):void;\n`
const cssManifest=JSON.parse(fs.readFileSync('.tmp/rea-css-recovered/manifest.json','utf8'))
manifest.evidence.push(cssManifest.sourceEvidenceId)
function css(name,expected){let text;const entry=selected.normalized_result.files.find(f=>f.path.endsWith(name));if(entry)text=entry.text;else{text=fs.readFileSync('.tmp/rea-css-recovered/'+name,'utf8');if(cssManifest.files.find(f=>f.file===name)?.sha256!==expected)throw Error('CSS manifest mismatch')}if(hash(text)!==expected)throw Error('CSS SHA mismatch '+name);manifest.sources.push({name,sha256:expected});return postcss.parse(text)}
function scope(tree){tree.walkRules(rule=>{if(rule.parent.type==='atrule'&&/keyframes$/.test(rule.parent.name))return;rule.selector=rule.selectors.map(s=>':where(.yc-capability-center) '+s.replace(/^\.skill-market (?=\.(?:ec-|sm-topbar|sm-installed-topbar|workbuddy-topbar))/,'')).join(',')});return tree.toString()}
const marketCss=css('skills-market-d_hn_qWB.css','935d55effde68d03b2fbc2529ec94b19a6cd7210d9bc79febd6d115b115f60b6')
const detailCss=css('standalone-skill-detail-modal-fe_BFVdd.css','7967df52bacb7594f934b32d8d5fb24854dbc8c47d0217d4677c7d7da0655f49')
const common=css('src-Bh3YZ35H.css','88dbdc1cd3f59d0e8b75824512a465a2be714bc7af481d790fe3a9484f85e01a')
common.nodes=common.nodes.filter(n=>n.type==='rule'&&/\.wb-(switch|dropdown|input|button|popover)(?:[\s.:#[_-]|$)/.test(n.selector)||n.type==='atrule'&&/keyframes$/.test(n.name)&&/^wb-(?:switch|popover)/.test(n.params))
const upload=css('contexts-BkjwYSZT.css','50cbd673f7f35fc7f966bdddc6c9f5677fdfe944cb904888d214619fca259380')
upload.nodes=upload.nodes.filter(n=>n.type==='rule'&&/\.skill-upload/.test(n.selector)||n.type==='atrule'&&/keyframes$/.test(n.name)&&/^skill-(?:modal|upload)/.test(n.params))
const outputs=[['src/renderer/src/capabilities/skills-source.mjs',js],['src/renderer/src/capabilities/skills-source.d.mts',declarations],['src/renderer/src/capabilities/skills-source.css','/* Pinned REA declarations. Generated by scripts/test-skills-reference.mjs --write. */\n'+[common,marketCss,detailCss,upload].map(scope).join('\n')+'\n']]
manifest.outputs=outputs.map(([file,text])=>({file,sha256:hash(text),bytes:Buffer.byteLength(text)}))
outputs.push(['src/renderer/src/capabilities/skills-source-manifest.json',JSON.stringify(manifest,null,2)+'\n'])
for(const[file,text]of outputs){if(process.argv.includes('--write'))fs.writeFileSync(file,text);else if(!fs.existsSync(file)||fs.readFileSync(file,'utf8')!==text)throw Error('Recovered output changed '+file)}
console.log(JSON.stringify({result:'PASS',sources:manifest.sources.length,bodies:manifest.bodies.length,outputs:outputs.length,mode:process.argv.includes('--write')?'recover':'verify'}))