15 lines
2.3 KiB
JavaScript
15 lines
2.3 KiB
JavaScript
/** Run only inside the Wiki container via auth-cli.cjs run. API-only editorial update. */
|
|
import {readFile,writeFile} from 'node:fs/promises';
|
|
const base='http://127.0.0.1:3000',id='8eb8c76500580f7a4b56ba3c',dir='/tmp/prompt-layout-studio';
|
|
const layouts=JSON.parse(await readFile(dir+'/catalog.json','utf8'));
|
|
const stateFile='/tmp/prompt-layout-studio-state.json';let state;try{state=JSON.parse(await readFile(stateFile,'utf8'))}catch{state={designs:{}}}
|
|
for(const l of layouts){if(state.designs[l.id])continue;const r=await fetch(base+'/api/studio/designs',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({layoutId:l.id,name:l.id+' · 初始排版',parameters:{}})});if(!r.ok)throw Error('Design save failed: '+r.status);state.designs[l.id]=(await r.json()).design;await writeFile(stateFile,JSON.stringify(state),{mode:0o600});}
|
|
let markdown=await readFile(dir+'/tutorial.md','utf8');
|
|
markdown=markdown.replace('{{LAYOUTS}}',layouts.map(l=>`- **[${l.id} · ${l.name}](/studio/layouts/${l.id})** · [已保存初始效果](${state.designs[l.id].url}) · [构件文档](${l.tutorialUrl}) · [API 参数](/studio/api/layouts/${l.id}?agent_mode=True)`).join('\n'));
|
|
const response=await fetch(base+'/api/notes/'+id);if(!response.ok)throw Error('Router unavailable');const {entry}=await response.json();
|
|
try{await readFile('/tmp/prompt-layout-router-before.json')}catch{await writeFile('/tmp/prompt-layout-router-before.json',JSON.stringify(entry),{mode:0o600})}
|
|
const tags=await fetch(base+'/api/tags').then(r=>r.json()),selected=tags.filter(t=>entry.categories.includes(t.name)||(entry.systemTags||[]).some(s=>s.id===t.id)).map(t=>t.id);
|
|
const result=await fetch(base+'/api/notes/'+id,{method:'PUT',headers:{'Content-Type':'application/json'},body:JSON.stringify({title:'27 套排版 · Studio 参数 API 与保存教程',description:'27 个原图对应效果页,按 T/I/D 构件调整参数;API 渲染、保存独立 ID 与再次编辑,和 Wiki 共用数据库。',markdown,tags:selected,assets:entry.assets,coverAssetId:entry.coverAssetId,revision:entry.revision})});
|
|
if(!result.ok)throw Error('Router update failed: '+result.status);
|
|
console.log(JSON.stringify({routerUpdated:true,studioPages:layouts.length,savedDesigns:Object.keys(state.designs).length,contentExported:false}));
|