@customize-agent/server 4.59.0 → 4.59.1

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.
Files changed (51) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +15 -15
  3. package/.next/prerender-manifest.json +3 -3
  4. package/.next/server/chunks/5547.js +23 -23
  5. package/.next/server/chunks/6321.js +1 -1
  6. package/.next/server/chunks/8204.js +1 -1
  7. package/.next/server/middleware-build-manifest.js +1 -1
  8. package/.next/server/pages/404.html +1 -1
  9. package/.next/server/pages/500.html +1 -1
  10. package/.next/server/pages/api/documents/generate/preview.js +1 -1
  11. package/.next/server/pages/api/documents/generate.js +1 -1
  12. package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/confirm.js +1 -1
  13. package/.next/server/pages/api/documents/generated/[id]/repair.js +1 -1
  14. package/.next/server/pages/api/skills/[id].js +1 -1
  15. package/.next/server/pages/api/skills/validate.js +1 -1
  16. package/.next/server/pages/api/skills.js +1 -1
  17. package/.next/server/pages/canvas/[id].html +1 -1
  18. package/.next/server/pages/canvas.html +1 -1
  19. package/.next/server/pages/documents.html +1 -1
  20. package/.next/server/pages/guide.html +1 -1
  21. package/.next/server/pages/index.html +1 -1
  22. package/.next/server/pages/knowledge/file-detail.html +1 -1
  23. package/.next/server/pages/knowledge/files.html +1 -1
  24. package/.next/server/pages/knowledge/manage.html +1 -1
  25. package/.next/server/pages/knowledge.html +1 -1
  26. package/.next/server/pages/models.html +1 -1
  27. package/.next/server/pages/overview.html +1 -1
  28. package/.next/server/pages/prompt.html +1 -1
  29. package/.next/server/pages/settings.html +1 -1
  30. package/.next/server/pages/skills.html +1 -1
  31. package/.next/server/pages/system/logs.html +1 -1
  32. package/.next/server/pages-manifest.json +33 -33
  33. package/.next/static/{Z8psgNSpy4sSg2lIho8Uw → 4xQDkixSretJDM503EzIq}/_buildManifest.js +1 -1
  34. package/.next/static/chunks/{289-136ebb30e0f6723a.js → 289-0cccd8131332e041.js} +3 -3
  35. package/.next/static/chunks/{426-90638907336adcb8.js → 426-22c4cedb04b0d45d.js} +1 -1
  36. package/.next/static/chunks/530-6f3f5848c6f702ae.js +1 -0
  37. package/.next/static/chunks/pages/{_app-74fce107cacfaee7.js → _app-ebb535779b63fd5d.js} +15 -15
  38. package/.next/static/chunks/pages/canvas/[id]-515edd3e72acaf82.js +1 -0
  39. package/.next/static/chunks/pages/knowledge-09dde24cdce1b195.js +1 -0
  40. package/.next/static/chunks/pages/prompt-6a224562d194cb45.js +1 -0
  41. package/.next/static/chunks/pages/system/logs-70790bee46e5a08d.js +1 -0
  42. package/.next/static/css/85c434f8fd3a17ae.css +1 -0
  43. package/package.json +1 -1
  44. package/scripts/half-built-scan.mjs +150 -0
  45. package/.next/static/chunks/530-1b18bb11570dc44a.js +0 -1
  46. package/.next/static/chunks/pages/canvas/[id]-9f4e9f49e512418b.js +0 -1
  47. package/.next/static/chunks/pages/knowledge-ca8ad5501faed486.js +0 -1
  48. package/.next/static/chunks/pages/prompt-dd9a9f9105216e2b.js +0 -1
  49. package/.next/static/chunks/pages/system/logs-9deb1217739490af.js +0 -1
  50. package/.next/static/css/0e46e39b61e4e262.css +0 -1
  51. /package/.next/static/{Z8psgNSpy4sSg2lIho8Uw → 4xQDkixSretJDM503EzIq}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><link rel="preload" href="/_next/static/css/0e46e39b61e4e262.css" as="style"/><link rel="stylesheet" href="/_next/static/css/0e46e39b61e4e262.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-6224d37324e372cb.js" defer=""></script><script src="/_next/static/chunks/framework-4b565b3ddc94cdac.js" defer=""></script><script src="/_next/static/chunks/main-0c91f573696223ca.js" defer=""></script><script src="/_next/static/chunks/pages/_app-74fce107cacfaee7.js" defer=""></script><script src="/_next/static/chunks/pages/_error-282257fbdcc167b4.js" defer=""></script><script src="/_next/static/Z8psgNSpy4sSg2lIho8Uw/_buildManifest.js" defer=""></script><script src="/_next/static/Z8psgNSpy4sSg2lIho8Uw/_ssgManifest.js" defer=""></script></head><body><div id="__next"><script>((e,i,s,u,m,a,l,h)=>{let d=document.documentElement,w=["light","dark"];function p(n){(Array.isArray(e)?e:[e]).forEach(y=>{let k=y==="class",S=k&&a?m.map(f=>a[f]||f):m;k?(d.classList.remove(...S),d.classList.add(a&&a[n]?a[n]:n)):d.setAttribute(y,n)}),R(n)}function R(n){h&&w.includes(n)&&(d.style.colorScheme=n)}function c(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(u)p(u);else try{let n=localStorage.getItem(i)||s,y=l&&n==="system"?c():n;p(y)}catch(n){}})("class","theme","system",null,["light","dark"],null,true,true)</script><div class="css-1pi45l5 ant-app css-var-_R_16_"><aside class="sidebar sidebarCollapsedSelf"><div class="sidebarLogoRow"><a class="min-w-0 flex-1" href="/overview"><div class="sidebarLogo"><div class="w-8 h-8 rounded-lg bg-black dark:bg-white flex items-center justify-center shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon text-white dark:text-black"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg></div><div class="sidebarLogoTitle"><span class="logoGradient">Customize Agent</span></div></div></a></div><nav class="sidebarNav mt-2"><a href="/overview"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-dashboard"><rect width="7" height="9" x="3" y="3" rx="1"></rect><rect width="7" height="5" x="14" y="3" rx="1"></rect><rect width="7" height="9" x="14" y="12" rx="1"></rect><rect width="7" height="5" x="3" y="16" rx="1"></rect></svg><span class="sidebarLabel">总览</span></div></a><a href="/knowledge"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-database"><ellipse cx="12" cy="5" rx="9" ry="3"></ellipse><path d="M3 5V19A9 3 0 0 0 21 19V5"></path><path d="M3 12A9 3 0 0 0 21 12"></path></svg><span class="sidebarLabel">知识库</span></div></a><a href="/models"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-cpu"><rect width="16" height="16" x="4" y="4" rx="2"></rect><rect width="6" height="6" x="9" y="9" rx="1"></rect><path d="M15 2v2"></path><path d="M15 20v2"></path><path d="M2 15h2"></path><path d="M2 9h2"></path><path d="M20 15h2"></path><path d="M20 9h2"></path><path d="M9 2v2"></path><path d="M9 20v2"></path></svg><span class="sidebarLabel">模型配置</span></div></a><a href="/prompt"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg><span class="sidebarLabel">提示词管理</span></div></a><a href="/skills"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg><span class="sidebarLabel">技能库</span></div></a><a href="/canvas"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-network"><rect x="16" y="16" width="6" height="6" rx="1"></rect><rect x="2" y="16" width="6" height="6" rx="1"></rect><rect x="9" y="2" width="6" height="6" rx="1"></rect><path d="M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3"></path><path d="M12 12V8"></path></svg><span class="sidebarLabel">生成画布</span></div></a><a href="/guide"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book-open"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"></path><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"></path></svg><span class="sidebarLabel">指引</span></div></a><a href="/settings"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg><span class="sidebarLabel">设置</span></div></a></nav></aside><div class="mainContent"><header class="topbar"><div class="flex-1"></div><span class="ant-badge css-1pi45l5 css-var-_R_16_"><button type="button" class="ant-btn css-1pi45l5 css-var-_R_16_ ant-btn-default ant-btn-color-default ant-btn-variant-outlined topbarBtn"><span class="ant-btn-icon"><span role="img" aria-label="clock-circle" class="anticon anticon-clock-circle"><svg viewBox="64 64 896 896" focusable="false" data-icon="clock-circle" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"></path><path d="M686.7 638.6L544.1 535.5V288c0-4.4-3.6-8-8-8H488c-4.4 0-8 3.6-8 8v275.4c0 2.6 1.2 5 3.3 6.5l165.4 120.6c3.6 2.6 8.6 1.8 11.2-1.7l28.6-39c2.6-3.7 1.8-8.7-1.8-11.2z"></path></svg></span></span><span>后台任务</span></button></span><button class="topbarBtn"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg><span>深色</span></button><button class="topbarBtn"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-languages"><path d="m5 8 6 6"></path><path d="m4 14 6-6 2-3"></path><path d="M2 5h12"></path><path d="M7 2h1"></path><path d="m22 22-5-10-5 10"></path><path d="M14 18h6"></path></svg><span>English</span></button></header><main class="mainInner"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></main></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"Z8psgNSpy4sSg2lIho8Uw","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><link rel="preload" href="/_next/static/css/85c434f8fd3a17ae.css" as="style"/><link rel="stylesheet" href="/_next/static/css/85c434f8fd3a17ae.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-6224d37324e372cb.js" defer=""></script><script src="/_next/static/chunks/framework-4b565b3ddc94cdac.js" defer=""></script><script src="/_next/static/chunks/main-0c91f573696223ca.js" defer=""></script><script src="/_next/static/chunks/pages/_app-ebb535779b63fd5d.js" defer=""></script><script src="/_next/static/chunks/pages/_error-282257fbdcc167b4.js" defer=""></script><script src="/_next/static/4xQDkixSretJDM503EzIq/_buildManifest.js" defer=""></script><script src="/_next/static/4xQDkixSretJDM503EzIq/_ssgManifest.js" defer=""></script></head><body><div id="__next"><script>((e,i,s,u,m,a,l,h)=>{let d=document.documentElement,w=["light","dark"];function p(n){(Array.isArray(e)?e:[e]).forEach(y=>{let k=y==="class",S=k&&a?m.map(f=>a[f]||f):m;k?(d.classList.remove(...S),d.classList.add(a&&a[n]?a[n]:n)):d.setAttribute(y,n)}),R(n)}function R(n){h&&w.includes(n)&&(d.style.colorScheme=n)}function c(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(u)p(u);else try{let n=localStorage.getItem(i)||s,y=l&&n==="system"?c():n;p(y)}catch(n){}})("class","theme","system",null,["light","dark"],null,true,true)</script><div class="css-1pi45l5 ant-app css-var-_R_16_"><aside class="sidebar sidebarCollapsedSelf"><div class="sidebarLogoRow"><a class="min-w-0 flex-1" href="/overview"><div class="sidebarLogo"><div class="w-8 h-8 rounded-lg bg-black dark:bg-white flex items-center justify-center shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon text-white dark:text-black"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg></div><div class="sidebarLogoTitle"><span class="logoGradient">Customize Agent</span></div></div></a></div><nav class="sidebarNav mt-2"><a href="/overview"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-dashboard"><rect width="7" height="9" x="3" y="3" rx="1"></rect><rect width="7" height="5" x="14" y="3" rx="1"></rect><rect width="7" height="9" x="14" y="12" rx="1"></rect><rect width="7" height="5" x="3" y="16" rx="1"></rect></svg><span class="sidebarLabel">总览</span></div></a><a href="/knowledge"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-database"><ellipse cx="12" cy="5" rx="9" ry="3"></ellipse><path d="M3 5V19A9 3 0 0 0 21 19V5"></path><path d="M3 12A9 3 0 0 0 21 12"></path></svg><span class="sidebarLabel">知识库</span></div></a><a href="/models"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-cpu"><rect width="16" height="16" x="4" y="4" rx="2"></rect><rect width="6" height="6" x="9" y="9" rx="1"></rect><path d="M15 2v2"></path><path d="M15 20v2"></path><path d="M2 15h2"></path><path d="M2 9h2"></path><path d="M20 15h2"></path><path d="M20 9h2"></path><path d="M9 2v2"></path><path d="M9 20v2"></path></svg><span class="sidebarLabel">模型配置</span></div></a><a href="/prompt"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg><span class="sidebarLabel">提示词管理</span></div></a><a href="/skills"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg><span class="sidebarLabel">技能库</span></div></a><a href="/canvas"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-network"><rect x="16" y="16" width="6" height="6" rx="1"></rect><rect x="2" y="16" width="6" height="6" rx="1"></rect><rect x="9" y="2" width="6" height="6" rx="1"></rect><path d="M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3"></path><path d="M12 12V8"></path></svg><span class="sidebarLabel">生成画布</span></div></a><a href="/guide"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book-open"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"></path><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"></path></svg><span class="sidebarLabel">指引</span></div></a><a href="/settings"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg><span class="sidebarLabel">设置</span></div></a></nav></aside><div class="mainContent"><header class="topbar"><div class="flex-1"></div><span class="ant-badge css-1pi45l5 css-var-_R_16_"><button type="button" class="ant-btn css-1pi45l5 css-var-_R_16_ ant-btn-default ant-btn-color-default ant-btn-variant-outlined topbarBtn"><span class="ant-btn-icon"><span role="img" aria-label="clock-circle" class="anticon anticon-clock-circle"><svg viewBox="64 64 896 896" focusable="false" data-icon="clock-circle" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"></path><path d="M686.7 638.6L544.1 535.5V288c0-4.4-3.6-8-8-8H488c-4.4 0-8 3.6-8 8v275.4c0 2.6 1.2 5 3.3 6.5l165.4 120.6c3.6 2.6 8.6 1.8 11.2-1.7l28.6-39c2.6-3.7 1.8-8.7-1.8-11.2z"></path></svg></span></span><span>后台任务</span></button></span><button class="topbarBtn"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg><span>深色</span></button><button class="topbarBtn"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-languages"><path d="m5 8 6 6"></path><path d="m4 14 6-6 2-3"></path><path d="M2 5h12"></path><path d="M7 2h1"></path><path d="m22 22-5-10-5 10"></path><path d="M14 18h6"></path></svg><span>English</span></button></header><main class="mainInner"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></main></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"4xQDkixSretJDM503EzIq","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
@@ -1,2 +1,2 @@
1
1
  "use strict";(()=>{var a={};a.id=8202,a.ids=[8202],a.modules={191:(a,b,c)=>{c.d(b,{cW:()=>q,hH:()=>r,mG:()=>u,wF:()=>p});var d=c(29021),e=c.n(d),f=c(21820),g=c.n(f),h=c(33873),i=c.n(h),j=c(55511),k=c.n(j);let l=i().join(g().homedir(),".customize-agent","logs"),m=i().join(l,"errors.jsonl"),n="errors-";function o(){try{return e().readdirSync(l).filter(a=>a.startsWith(n)&&a.endsWith(".jsonl")).sort().reverse()}catch{return[]}}function p(a){let{message:b,stack:c}=function(a){if(a instanceof Error)return{message:a.message,stack:a.stack};if("string"==typeof a)return{message:a};try{return{message:JSON.stringify(a)}}catch{return{message:String(a)}}}(a.error),d={id:`err_${Date.now()}_${k().randomBytes(4).toString("hex")}`,level:a.level||"error",source:a.source,functionName:a.functionName,message:b,stack:c,request:a.req?{method:a.req.method,url:a.req.url,query:a.req.query}:void 0,meta:a.meta,createdAt:Date.now()};try{e().mkdirSync(l,{recursive:!0}),function(){try{if(e().statSync(m).size<=2097152)return;e().renameSync(m,i().join(l,`${n}${Date.now()}.jsonl`)),function(){for(let a of o().slice(20))try{e().rmSync(i().join(l,a),{force:!0})}catch{}}()}catch{}}(),e().appendFileSync(m,`${JSON.stringify(d)}
2
- `)}catch(a){console.error("[errorLogService] failed to write error log",a)}return d}function q(a=200){let b=[m,...o().map(a=>i().join(l,a))],c=[];for(let d of b){if(c.length>=a)break;for(let b of(function(a){try{return e().readFileSync(a,"utf8").split("\n").filter(Boolean).flatMap(a=>{try{return[JSON.parse(a)]}catch{return[]}})}catch{return[]}})(d).reverse())if(c.push(b),c.length>=a)break}return c}function r(){let a=0;if(e().existsSync(m))try{e().rmSync(m,{force:!0}),a++}catch{}for(let b of o())try{e().rmSync(i().join(l,b),{force:!0}),a++}catch{}return a}let s=!1;function t(a,b,c,d=20){let e=0,f=0;return g=>{try{b(g);let h=Date.now();h-e>6e4&&(e=h,f=0),f<d&&(f+=1,c(a,g))}catch{}}}function u(){s||(s=!0,process.on("uncaughtException",t("uncaughtException",a=>p({source:"process",functionName:"uncaughtException",error:a}),(a,b)=>console.error(`[process] ${a}`,b))),process.on("unhandledRejection",t("unhandledRejection",a=>p({source:"process",functionName:"unhandledRejection",error:a}),(a,b)=>console.error(`[process] ${a}`,b))))}},15751:a=>{a.exports=require("xlsx")},16006:(a,b,c)=>{c.d(b,{j:()=>e});var d=c(191);function e(a,b){return async function(c,e){try{await b(c,e)}catch(g){let f=(0,d.wF)({source:a,functionName:b.name||"anonymous",error:g,req:c});console.error(`[${a}]`,f.id,g),e.headersSent||e.status(500).json({error:g instanceof Error?g.message:"Internal server error",requestId:f.id})}}}(0,d.mG)()},16698:a=>{a.exports=require("node:async_hooks")},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},28183:a=>{a.exports=require("@napi-rs/canvas")},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},55511:a=>{a.exports=require("crypto")},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},83823:(a,b,c)=>{c.r(b),c.d(b,{config:()=>r,default:()=>q,handler:()=>t});var d={};c.r(d),c.d(d,{default:()=>n});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(16006),j=c(78403),k=c(38032),l=c(70610);async function m(a,b){if("POST"!==a.method)return b.status(405).json({error:"Method not allowed"});let{promptIds:c,requirement:d,title:e,projectName:f,materialRoot:g,projectRoot:h}=a.body;if(!h)return b.status(400).json({error:"projectRoot required"});try{let a=(0,k.iA)({promptIds:c??[],requirement:d,projectRoot:h,title:e,projectName:f}),i=(0,j.ZRt)(h,(0,k.TQ)(a),[...(0,l.Z0)(c??[],{projectRoot:h}).map(a=>a.content),d||""].filter(Boolean).join("\n\n"),g?{materialRoot:g}:{});if(i.ambiguous||!i.locked||0===i.selectedFiles.length)return b.status(422).json({error:`结构预览失败:资料范围未锁定:${i.reason}`,issues:[{level:"error",message:`资料范围未锁定:${i.reason}`,missing:[]}],missing:[]});return b.status(200).json({title:a.title,documentType:a.documentType,chapterCount:a.chapters.length,chapters:a.chapters.map(a=>({title:a.title,sections:a.sections??[]})),derivation:a.derivation,materialScope:{root:i.selectedRoots[0],fileCount:i.selectedFiles.length,reason:i.reason}})}catch(c){let a=(0,k.MW)(c);return b.status(422).json({error:`结构预览失败:${a[0]?.message||"文档规格派生失败"}`,issues:a,missing:a[0]?.missing??[]})}}let n=(0,i.j)("api/documents/generate/preview",m);var o=c(68970),p=c(50296);let q=(0,h.M)(d,"default"),r=(0,h.M)(d,"config"),s=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/documents/generate/preview",pathname:"/api/documents/generate/preview",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function t(a,b,c){let d=await s.prepare(a,b,{srcPage:"/api/documents/generate/preview"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,o.getTracer)(),e=d.getActiveScopeSpan(),j=s.instrumentationOnRequestError.bind(s),k=async e=>s.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:s.isDev,page:"/api/documents/generate/preview",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(p.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:o.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(s.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,299,1001,2434,5547],()=>b(b.s=83823));module.exports=c})();
2
+ `)}catch(a){console.error("[errorLogService] failed to write error log",a)}return d}function q(a=200){let b=[m,...o().map(a=>i().join(l,a))],c=[];for(let d of b){if(c.length>=a)break;for(let b of(function(a){try{return e().readFileSync(a,"utf8").split("\n").filter(Boolean).flatMap(a=>{try{return[JSON.parse(a)]}catch{return[]}})}catch{return[]}})(d).reverse())if(c.push(b),c.length>=a)break}return c}function r(){let a=0;if(e().existsSync(m))try{e().rmSync(m,{force:!0}),a++}catch{}for(let b of o())try{e().rmSync(i().join(l,b),{force:!0}),a++}catch{}return a}let s=!1;function t(a,b,c,d=20){let e=0,f=0;return g=>{try{b(g);let h=Date.now();h-e>6e4&&(e=h,f=0),f<d&&(f+=1,c(a,g))}catch{}}}function u(){s||(s=!0,process.on("uncaughtException",t("uncaughtException",a=>p({source:"process",functionName:"uncaughtException",error:a}),(a,b)=>console.error(`[process] ${a}`,b))),process.on("unhandledRejection",t("unhandledRejection",a=>p({source:"process",functionName:"unhandledRejection",error:a}),(a,b)=>console.error(`[process] ${a}`,b))))}},15751:a=>{a.exports=require("xlsx")},16006:(a,b,c)=>{c.d(b,{j:()=>e});var d=c(191);function e(a,b){return async function(c,e){try{await b(c,e)}catch(g){let f=(0,d.wF)({source:a,functionName:b.name||"anonymous",error:g,req:c});console.error(`[${a}]`,f.id,g),e.headersSent||e.status(500).json({error:g instanceof Error?g.message:"Internal server error",requestId:f.id})}}}(0,d.mG)()},16698:a=>{a.exports=require("node:async_hooks")},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},28183:a=>{a.exports=require("@napi-rs/canvas")},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},55511:a=>{a.exports=require("crypto")},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},83823:(a,b,c)=>{c.r(b),c.d(b,{config:()=>r,default:()=>q,handler:()=>t});var d={};c.r(d),c.d(d,{default:()=>n});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(16006),j=c(74281),k=c(38032),l=c(70610);async function m(a,b){if("POST"!==a.method)return b.status(405).json({error:"Method not allowed"});let{promptIds:c,requirement:d,title:e,projectName:f,materialRoot:g,projectRoot:h}=a.body;if(!h)return b.status(400).json({error:"projectRoot required"});try{let a=(0,k.iA)({promptIds:c??[],requirement:d,projectRoot:h,title:e,projectName:f}),i=(0,j.ZRt)(h,(0,k.TQ)(a),[...(0,l.Z0)(c??[],{projectRoot:h}).map(a=>a.content),d||""].filter(Boolean).join("\n\n"),g?{materialRoot:g}:{});if(i.ambiguous||!i.locked||0===i.selectedFiles.length)return b.status(422).json({error:`结构预览失败:资料范围未锁定:${i.reason}`,issues:[{level:"error",message:`资料范围未锁定:${i.reason}`,missing:[]}],missing:[]});return b.status(200).json({title:a.title,documentType:a.documentType,chapterCount:a.chapters.length,chapters:a.chapters.map(a=>({title:a.title,sections:a.sections??[]})),derivation:a.derivation,materialScope:{root:i.selectedRoots[0],fileCount:i.selectedFiles.length,reason:i.reason}})}catch(c){let a=(0,k.MW)(c);return b.status(422).json({error:`结构预览失败:${a[0]?.message||"文档规格派生失败"}`,issues:a,missing:a[0]?.missing??[]})}}let n=(0,i.j)("api/documents/generate/preview",m);var o=c(68970),p=c(50296);let q=(0,h.M)(d,"default"),r=(0,h.M)(d,"config"),s=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/documents/generate/preview",pathname:"/api/documents/generate/preview",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function t(a,b,c){let d=await s.prepare(a,b,{srcPage:"/api/documents/generate/preview"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,o.getTracer)(),e=d.getActiveScopeSpan(),j=s.instrumentationOnRequestError.bind(s),k=async e=>s.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:s.isDev,page:"/api/documents/generate/preview",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(p.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:o.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(s.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,299,1001,2434,5547],()=>b(b.s=83823));module.exports=c})();
@@ -1,2 +1,2 @@
1
1
  "use strict";(()=>{var a={};a.id=6011,a.ids=[6011],a.modules={191:(a,b,c)=>{c.d(b,{cW:()=>q,hH:()=>r,mG:()=>u,wF:()=>p});var d=c(29021),e=c.n(d),f=c(21820),g=c.n(f),h=c(33873),i=c.n(h),j=c(55511),k=c.n(j);let l=i().join(g().homedir(),".customize-agent","logs"),m=i().join(l,"errors.jsonl"),n="errors-";function o(){try{return e().readdirSync(l).filter(a=>a.startsWith(n)&&a.endsWith(".jsonl")).sort().reverse()}catch{return[]}}function p(a){let{message:b,stack:c}=function(a){if(a instanceof Error)return{message:a.message,stack:a.stack};if("string"==typeof a)return{message:a};try{return{message:JSON.stringify(a)}}catch{return{message:String(a)}}}(a.error),d={id:`err_${Date.now()}_${k().randomBytes(4).toString("hex")}`,level:a.level||"error",source:a.source,functionName:a.functionName,message:b,stack:c,request:a.req?{method:a.req.method,url:a.req.url,query:a.req.query}:void 0,meta:a.meta,createdAt:Date.now()};try{e().mkdirSync(l,{recursive:!0}),function(){try{if(e().statSync(m).size<=2097152)return;e().renameSync(m,i().join(l,`${n}${Date.now()}.jsonl`)),function(){for(let a of o().slice(20))try{e().rmSync(i().join(l,a),{force:!0})}catch{}}()}catch{}}(),e().appendFileSync(m,`${JSON.stringify(d)}
2
- `)}catch(a){console.error("[errorLogService] failed to write error log",a)}return d}function q(a=200){let b=[m,...o().map(a=>i().join(l,a))],c=[];for(let d of b){if(c.length>=a)break;for(let b of(function(a){try{return e().readFileSync(a,"utf8").split("\n").filter(Boolean).flatMap(a=>{try{return[JSON.parse(a)]}catch{return[]}})}catch{return[]}})(d).reverse())if(c.push(b),c.length>=a)break}return c}function r(){let a=0;if(e().existsSync(m))try{e().rmSync(m,{force:!0}),a++}catch{}for(let b of o())try{e().rmSync(i().join(l,b),{force:!0}),a++}catch{}return a}let s=!1;function t(a,b,c,d=20){let e=0,f=0;return g=>{try{b(g);let h=Date.now();h-e>6e4&&(e=h,f=0),f<d&&(f+=1,c(a,g))}catch{}}}function u(){s||(s=!0,process.on("uncaughtException",t("uncaughtException",a=>p({source:"process",functionName:"uncaughtException",error:a}),(a,b)=>console.error(`[process] ${a}`,b))),process.on("unhandledRejection",t("unhandledRejection",a=>p({source:"process",functionName:"unhandledRejection",error:a}),(a,b)=>console.error(`[process] ${a}`,b))))}},13684:(a,b,c)=>{c.r(b),c.d(b,{config:()=>u,default:()=>t,handler:()=>w});var d={};c.r(d),c.d(d,{default:()=>q});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(48661),j=c(16006),k=c(78403),l=c(76760),m=c(2773),n=c(38032),o=c(70610);async function p(a,b){if("POST"!==a.method)return b.status(405).json({error:"Method not allowed"});let{promptIds:c,requirement:d,title:e,projectName:f,materialRoot:g,maxEvidencePerChapter:h,projectRoot:j,resumeDocumentId:p}=a.body;if(!j)return b.status(400).json({error:"projectRoot required"});let q=function(a){try{return{spec:(0,n.iA)(a),promptTexts:(0,o.Z0)(a.promptIds,{projectRoot:a.projectRoot}).map(a=>a.content)}}catch(a){return{issues:(0,n.MW)(a)}}}({promptIds:c??[],requirement:d,projectRoot:j,title:e,projectName:f});if("issues"in q){let a=q.issues??(0,n.MW)(Error("文档规格派生失败"));return b.status(422).json({error:`生成前检查未通过:${a[0]?.message||"文档规格派生失败"}`,issues:a,missing:a[0]?.missing??[]})}let{spec:r,promptTexts:s}=q,t=function(a,b,c,d,e){let f=[...c,d||""].filter(Boolean).join("\n\n");return(0,k.ZRt)(a,(0,n.TQ)(b),f,e?{materialRoot:e}:{})}(j,r,s,d,g);if(t.ambiguous||!t.locked||0===t.selectedFiles.length)return b.status(422).json({error:`生成前检查未通过:资料范围未锁定:${t.reason}`,issues:[{level:"error",message:`资料范围未锁定:${t.reason}`,missing:[]}]});let u=function(a){if(0===a.length)return[];let b=[],c=new Map,d=new Map;for(let b of a){let{kind:a}=(0,m.O)(b);c.set(a,(c.get(a)??0)+1);let e=d.get(a)??[];e.length<3&&e.push(l.basename(b)),d.set(a,e)}let e=a=>{let b=c.get(a)??0;return b>0?`${b} 份(${(d.get(a)??[]).join("、")}${b>3?" 等":""})`:"**缺失**"},f=`招标 ${e("tender_document")}|清单 ${e("bill_of_quantities")}|图纸 ${e("drawing")}|补疑 ${e("addendum")}`;for(let a of[{kind:"tender_document",label:"招标文件",hint:"缺招标文件则编制规格、评审要求与响应锚点无从提取,要求实体响应(权重 0.30)无判定对象"},{kind:"bill_of_quantities",label:"工程量清单",hint:"缺清单则工程量/规格/资源计划类权威值全部不可推导,蓝图不可用"},{kind:"drawing",label:"图纸/设计资料",hint:"缺图纸则施工方法、专业接口与构造做法无依据,针对性章无法成稿"}].filter(a=>(c.get(a.kind)??0)===0))b.push({level:"error",message:`资料不齐备:未识别到${a.label}。${a.hint}。请补充后重新索引再生成。(当前资料构成:${f})`});return(c.get("addendum")??0)===0&&b.push({level:"warning",message:`未识别到补疑/答疑澄清资料(若本项目确无答疑可忽略)。当前资料构成:${f}`}),b}(t.selectedFiles),v=u.filter(a=>"error"===a.level);if(v.length>0)return b.status(422).json({error:`生成前检查未通过:${v[0].message}`,issues:[...v,...u.filter(a=>"warning"===a.level)]});let w=(0,i.YL)({promptIds:c??[],requirement:d,title:r.title,materialRoot:t.selectedRoots[0],maxEvidencePerChapter:h,resumeDocumentId:p},j);b.status(202).json({...w,documentSpec:{id:r.id,title:r.title,documentType:r.documentType,chapterCount:r.chapters.length},derivation:r.derivation,materialScope:{root:t.selectedRoots[0],fileCount:t.selectedFiles.length,reason:t.reason},warnings:u})}let q=(0,j.j)("api/documents/generate",p);var r=c(68970),s=c(50296);let t=(0,h.M)(d,"default"),u=(0,h.M)(d,"config"),v=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/documents/generate",pathname:"/api/documents/generate",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function w(a,b,c){let d=await v.prepare(a,b,{srcPage:"/api/documents/generate"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,r.getTracer)(),e=d.getActiveScopeSpan(),j=v.instrumentationOnRequestError.bind(v),k=async e=>v.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:v.isDev,page:"/api/documents/generate",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==s.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(s.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:r.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(v.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},15751:a=>{a.exports=require("xlsx")},16006:(a,b,c)=>{c.d(b,{j:()=>e});var d=c(191);function e(a,b){return async function(c,e){try{await b(c,e)}catch(g){let f=(0,d.wF)({source:a,functionName:b.name||"anonymous",error:g,req:c});console.error(`[${a}]`,f.id,g),e.headersSent||e.status(500).json({error:g instanceof Error?g.message:"Internal server error",requestId:f.id})}}}(0,d.mG)()},16698:a=>{a.exports=require("node:async_hooks")},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},28183:a=>{a.exports=require("@napi-rs/canvas")},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},55511:a=>{a.exports=require("crypto")},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,299,1001,2434,5547],()=>b(b.s=13684));module.exports=c})();
2
+ `)}catch(a){console.error("[errorLogService] failed to write error log",a)}return d}function q(a=200){let b=[m,...o().map(a=>i().join(l,a))],c=[];for(let d of b){if(c.length>=a)break;for(let b of(function(a){try{return e().readFileSync(a,"utf8").split("\n").filter(Boolean).flatMap(a=>{try{return[JSON.parse(a)]}catch{return[]}})}catch{return[]}})(d).reverse())if(c.push(b),c.length>=a)break}return c}function r(){let a=0;if(e().existsSync(m))try{e().rmSync(m,{force:!0}),a++}catch{}for(let b of o())try{e().rmSync(i().join(l,b),{force:!0}),a++}catch{}return a}let s=!1;function t(a,b,c,d=20){let e=0,f=0;return g=>{try{b(g);let h=Date.now();h-e>6e4&&(e=h,f=0),f<d&&(f+=1,c(a,g))}catch{}}}function u(){s||(s=!0,process.on("uncaughtException",t("uncaughtException",a=>p({source:"process",functionName:"uncaughtException",error:a}),(a,b)=>console.error(`[process] ${a}`,b))),process.on("unhandledRejection",t("unhandledRejection",a=>p({source:"process",functionName:"unhandledRejection",error:a}),(a,b)=>console.error(`[process] ${a}`,b))))}},13684:(a,b,c)=>{c.r(b),c.d(b,{config:()=>u,default:()=>t,handler:()=>w});var d={};c.r(d),c.d(d,{default:()=>q});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(48661),j=c(16006),k=c(74281),l=c(76760),m=c(2773),n=c(38032),o=c(70610);async function p(a,b){if("POST"!==a.method)return b.status(405).json({error:"Method not allowed"});let{promptIds:c,requirement:d,title:e,projectName:f,materialRoot:g,maxEvidencePerChapter:h,projectRoot:j,resumeDocumentId:p}=a.body;if(!j)return b.status(400).json({error:"projectRoot required"});let q=function(a){try{return{spec:(0,n.iA)(a),promptTexts:(0,o.Z0)(a.promptIds,{projectRoot:a.projectRoot}).map(a=>a.content)}}catch(a){return{issues:(0,n.MW)(a)}}}({promptIds:c??[],requirement:d,projectRoot:j,title:e,projectName:f});if("issues"in q){let a=q.issues??(0,n.MW)(Error("文档规格派生失败"));return b.status(422).json({error:`生成前检查未通过:${a[0]?.message||"文档规格派生失败"}`,issues:a,missing:a[0]?.missing??[]})}let{spec:r,promptTexts:s}=q,t=function(a,b,c,d,e){let f=[...c,d||""].filter(Boolean).join("\n\n");return(0,k.ZRt)(a,(0,n.TQ)(b),f,e?{materialRoot:e}:{})}(j,r,s,d,g);if(t.ambiguous||!t.locked||0===t.selectedFiles.length)return b.status(422).json({error:`生成前检查未通过:资料范围未锁定:${t.reason}`,issues:[{level:"error",message:`资料范围未锁定:${t.reason}`,missing:[]}]});let u=function(a){if(0===a.length)return[];let b=[],c=new Map,d=new Map;for(let b of a){let{kind:a}=(0,m.O)(b);c.set(a,(c.get(a)??0)+1);let e=d.get(a)??[];e.length<3&&e.push(l.basename(b)),d.set(a,e)}let e=a=>{let b=c.get(a)??0;return b>0?`${b} 份(${(d.get(a)??[]).join("、")}${b>3?" 等":""})`:"**缺失**"},f=`招标 ${e("tender_document")}|清单 ${e("bill_of_quantities")}|图纸 ${e("drawing")}|补疑 ${e("addendum")}`;for(let a of[{kind:"tender_document",label:"招标文件",hint:"缺招标文件则编制规格、评审要求与响应锚点无从提取,要求实体响应(权重 0.30)无判定对象"},{kind:"bill_of_quantities",label:"工程量清单",hint:"缺清单则工程量/规格/资源计划类权威值全部不可推导,蓝图不可用"},{kind:"drawing",label:"图纸/设计资料",hint:"缺图纸则施工方法、专业接口与构造做法无依据,针对性章无法成稿"}].filter(a=>(c.get(a.kind)??0)===0))b.push({level:"error",message:`资料不齐备:未识别到${a.label}。${a.hint}。请补充后重新索引再生成。(当前资料构成:${f})`});return(c.get("addendum")??0)===0&&b.push({level:"warning",message:`未识别到补疑/答疑澄清资料(若本项目确无答疑可忽略)。当前资料构成:${f}`}),b}(t.selectedFiles),v=u.filter(a=>"error"===a.level);if(v.length>0)return b.status(422).json({error:`生成前检查未通过:${v[0].message}`,issues:[...v,...u.filter(a=>"warning"===a.level)]});let w=(0,i.YL)({promptIds:c??[],requirement:d,title:r.title,materialRoot:t.selectedRoots[0],maxEvidencePerChapter:h,resumeDocumentId:p},j);b.status(202).json({...w,documentSpec:{id:r.id,title:r.title,documentType:r.documentType,chapterCount:r.chapters.length},derivation:r.derivation,materialScope:{root:t.selectedRoots[0],fileCount:t.selectedFiles.length,reason:t.reason},warnings:u})}let q=(0,j.j)("api/documents/generate",p);var r=c(68970),s=c(50296);let t=(0,h.M)(d,"default"),u=(0,h.M)(d,"config"),v=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/documents/generate",pathname:"/api/documents/generate",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function w(a,b,c){let d=await v.prepare(a,b,{srcPage:"/api/documents/generate"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,r.getTracer)(),e=d.getActiveScopeSpan(),j=v.instrumentationOnRequestError.bind(v),k=async e=>v.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:v.isDev,page:"/api/documents/generate",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==s.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(s.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:r.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(v.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},15751:a=>{a.exports=require("xlsx")},16006:(a,b,c)=>{c.d(b,{j:()=>e});var d=c(191);function e(a,b){return async function(c,e){try{await b(c,e)}catch(g){let f=(0,d.wF)({source:a,functionName:b.name||"anonymous",error:g,req:c});console.error(`[${a}]`,f.id,g),e.headersSent||e.status(500).json({error:g instanceof Error?g.message:"Internal server error",requestId:f.id})}}}(0,d.mG)()},16698:a=>{a.exports=require("node:async_hooks")},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},28183:a=>{a.exports=require("@napi-rs/canvas")},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},55511:a=>{a.exports=require("crypto")},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,299,1001,2434,5547],()=>b(b.s=13684));module.exports=c})();
@@ -1 +1 @@
1
- "use strict";(()=>{var a={};a.id=6542,a.ids=[6542],a.modules={15751:a=>{a.exports=require("xlsx")},16698:a=>{a.exports=require("node:async_hooks")},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},28183:a=>{a.exports=require("@napi-rs/canvas")},29021:a=>{a.exports=require("fs")},31800:(a,b,c)=>{c.r(b),c.d(b,{config:()=>t,default:()=>s,handler:()=>v});var d={};c.r(d),c.d(d,{default:()=>p});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(76760),j=c(16006),k=c(48661),l=c(22328),m=c(68023),n=c(77416);async function o(a,b){let c;if("POST"!==a.method)return b.status(405).json({error:"Method not allowed"});let d=a.query.id,e=a.query.rid,f=a.body;if(!(0,k.getGeneratedDocument)(d,f.projectRoot))return b.status(404).json({error:"Document not found"});let g=i.join((0,k.Gl)(f.projectRoot),"drafts"),h=(0,l.oy)(d,g).find(a=>a.id===e);if(!h)return b.status(404).json({error:"Repair request not found"});let j=f.acceptedNodeId||h.targetNodeId;if(!j)return b.status(409).json({error:"尚未确认定位:@文档 入口必须先给定位方案、用户确认后才能动手(11.4:定位错会改错地方,且会被记录成成功)",candidates:h.localization?.candidates??[]});let o={...h,targetNodeId:j,localization:{method:h.localization?.method??"node-mention",candidates:h.localization?.candidates??[],accepted:j}},p=!h.targetNodeId;try{(0,l.WJ)({request:o,context:(0,l.Fv)({documentId:d,projectRoot:f.projectRoot}),documentEntry:p})}catch(a){return b.status(409).json({error:`定位已漂移,未执行(不得照旧打到已不存在的落点):${a instanceof Error?a.message:String(a)}`,request:o})}try{c=await (0,m.de)((0,l.Q6)({request:o,documentId:d,projectRoot:f.projectRoot}))}catch(c){let a={...o,outcome:"unfixable",notExecutedReason:`执行侧故障,事务未能运行:${c instanceof Error?c.message:String(c)}`};return(0,l.rN)(d,a,g),b.status(500).json({request:a,attribution:(0,l.xv)(a),notExecutedReason:a.notExecutedReason})}(0,l.rN)(d,c,g);let q=(0,l.WW)(d,g);b.status(200).json({request:c,outcome:c.outcome,attribution:(0,l.xv)(c),notExecutedReason:c.notExecutedReason,feedback:{attributionCounts:q.attributionCounts,blindSpots:q.blindSpots.map(a=>({requestId:a.requestId,nodeId:a.nodeId,userMessage:a.userMessage})),stubbornNodes:q.stubbornNodes,constraintSuggestions:q.constraintSuggestions,writingConstraintsReminder:(0,n.Hz)(q.constraintSuggestions)}})}let p=(0,j.j)("api/documents/generated/[id]/repair/[rid]/confirm",o);var q=c(68970),r=c(50296);let s=(0,h.M)(d,"default"),t=(0,h.M)(d,"config"),u=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/documents/generated/[id]/repair/[rid]/confirm",pathname:"/api/documents/generated/[id]/repair/[rid]/confirm",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function v(a,b,c){let d=await u.prepare(a,b,{srcPage:"/api/documents/generated/[id]/repair/[rid]/confirm"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,q.getTracer)(),e=d.getActiveScopeSpan(),j=u.instrumentationOnRequestError.bind(u),k=async e=>u.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:u.isDev,page:"/api/documents/generated/[id]/repair/[rid]/confirm",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==r.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(r.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:q.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(u.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},55511:a=>{a.exports=require("crypto")},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../../../../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,299,1001,2434,5547,6087],()=>b(b.s=31800));module.exports=c})();
1
+ "use strict";(()=>{var a={};a.id=6542,a.ids=[6542],a.modules={15751:a=>{a.exports=require("xlsx")},16698:a=>{a.exports=require("node:async_hooks")},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},28183:a=>{a.exports=require("@napi-rs/canvas")},29021:a=>{a.exports=require("fs")},31800:(a,b,c)=>{c.r(b),c.d(b,{config:()=>u,default:()=>t,handler:()=>w});var d={};c.r(d),c.d(d,{default:()=>q});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(76760),j=c(16006),k=c(48661),l=c(48479),m=c(22328),n=c(68023),o=c(77416);async function p(a,b){let c;if("POST"!==a.method)return b.status(405).json({error:"Method not allowed"});let d=a.query.id,e=a.query.rid,f=a.body,g=(0,k.getGeneratedDocument)(d,f.projectRoot);if(!g)return b.status(404).json({error:"Document not found"});let h=i.join((0,k.Gl)(f.projectRoot),"drafts"),j=(0,m.oy)(d,h).find(a=>a.id===e);if(!j)return b.status(404).json({error:"Repair request not found"});let p=f.acceptedNodeId||j.targetNodeId;if(!p)return b.status(409).json({error:"尚未确认定位:@文档 入口必须先给定位方案、用户确认后才能动手(11.4:定位错会改错地方,且会被记录成成功)",candidates:j.localization?.candidates??[]});let q={...j,targetNodeId:p,localization:{method:j.localization?.method??"node-mention",candidates:j.localization?.candidates??[],accepted:p}},r=!j.targetNodeId;try{(0,m.WJ)({request:q,context:(0,m.Fv)({documentId:d,projectRoot:f.projectRoot}),documentEntry:r})}catch(a){return b.status(409).json({error:`定位已漂移,未执行(不得照旧打到已不存在的落点):${a instanceof Error?a.message:String(a)}`,request:q})}try{c=await (0,n.de)((0,m.Q6)({request:q,documentId:d,projectRoot:f.projectRoot}))}catch(c){let a={...q,outcome:"unfixable",notExecutedReason:`执行侧故障,事务未能运行:${c instanceof Error?c.message:String(c)}`};return(0,m.rN)(d,a,h),b.status(500).json({request:a,attribution:(0,m.xv)(a),notExecutedReason:a.notExecutedReason})}(0,m.rN)(d,c,h);let s=(0,m.WW)(d,h),t={documentId:d},u=(a,b,d)=>{(0,l.Wl)(t,{batch:"finalize.pipeline",baseDir:(0,k.Gl)(g.projectRoot),id:`${a}.${c.id}`,type:a,title:b,status:"rolled-back"===c.outcome?"repairing":"completed",metrics:{requestId:c.id,outcome:String(c.outcome??"unknown"),...d}})};u("repair.impact",`修复影响面:${c.impact?.class??"未记录"}`,{class:c.impact?.class??"未记录",affectedNodes:c.impact?.affectedNodeIds?.length??0}),u("repair.transaction",`变更事务:${c.outcome}`,{...c.patch?{hasPatch:!0}:{},...c.notExecutedReason?{notExecutedReason:c.notExecutedReason.slice(0,120)}:{}}),u("repair.recheck",`复检:归因 ${Object.keys(s.attributionCounts??{}).length} 类`,{blindSpots:s.blindSpots.length,stubbornNodes:s.stubbornNodes.length}),b.status(200).json({request:c,outcome:c.outcome,attribution:(0,m.xv)(c),notExecutedReason:c.notExecutedReason,feedback:{attributionCounts:s.attributionCounts,blindSpots:s.blindSpots.map(a=>({requestId:a.requestId,nodeId:a.nodeId,userMessage:a.userMessage})),stubbornNodes:s.stubbornNodes,constraintSuggestions:s.constraintSuggestions,writingConstraintsReminder:(0,o.Hz)(s.constraintSuggestions)}})}let q=(0,j.j)("api/documents/generated/[id]/repair/[rid]/confirm",p);var r=c(68970),s=c(50296);let t=(0,h.M)(d,"default"),u=(0,h.M)(d,"config"),v=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/documents/generated/[id]/repair/[rid]/confirm",pathname:"/api/documents/generated/[id]/repair/[rid]/confirm",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function w(a,b,c){let d=await v.prepare(a,b,{srcPage:"/api/documents/generated/[id]/repair/[rid]/confirm"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,r.getTracer)(),e=d.getActiveScopeSpan(),j=v.instrumentationOnRequestError.bind(v),k=async e=>v.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:v.isDev,page:"/api/documents/generated/[id]/repair/[rid]/confirm",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==s.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(s.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:r.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(v.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},55511:a=>{a.exports=require("crypto")},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../../../../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,299,1001,2434,5547,6087],()=>b(b.s=31800));module.exports=c})();
@@ -1 +1 @@
1
- "use strict";(()=>{var a={};a.id=7171,a.ids=[7171],a.modules={15751:a=>{a.exports=require("xlsx")},16698:a=>{a.exports=require("node:async_hooks")},17372:(a,b,c)=>{c.r(b),c.d(b,{config:()=>r,default:()=>q,handler:()=>t});var d={};c.r(d),c.d(d,{default:()=>n});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(76760),j=c(16006),k=c(48661),l=c(22328);async function m(a,b){let c,d;if("POST"!==a.method)return b.status(405).json({error:"Method not allowed"});let e=a.query.id,f=a.body,g=f.projectRoot,h=(0,k.getGeneratedDocument)(e,g);if(!h)return b.status(404).json({error:"Document not found"});let j=String(f.userMessage||"");if(!j.trim())return b.status(400).json({error:"userMessage required"});if(f.patch&&(!f.patch.anchor||"string"!=typeof f.patch.replacement))return b.status(400).json({error:"patch 需要 anchor(逐字锚点)与 replacement(字符串)"});if(!f.targetNodeId)try{let a=(0,l.Fv)({documentId:e,projectRoot:g??h.projectRoot}),b=(0,l.mm)({context:a,userMessage:j});c={method:b.method,candidates:b.candidates},0===b.candidates.length&&(d="用户原话里没有能在正文中逐字命中的片段,故候选为空:定位到此为止(不猜)。请让用户引用要改的原文(用引号括起来),或改用 @节点 入口指定节点。")}catch(a){c={method:"literal-search",candidates:[]},d=`归档上下文不可用,未能计算定位候选:${a instanceof Error?a.message:String(a)}`}let m={id:`repair-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,source:f.source||"user",targetNodeId:f.targetNodeId||void 0,userMessage:j,patch:f.patch,localization:c,impact:{affectedNodeIds:[],reason:"",class:"local"}};(0,l.rN)(e,m,i.join((0,k.Gl)(g),"drafts"));let n=!m.targetNodeId;b.status(202).json({request:m,needsLocalization:n,localizationNote:d,next:n?"POST .../repair/[rid]/confirm(先确认定位,再动手)":"POST .../repair/[rid]/confirm(执行变更事务)",attribution:(0,l.xv)(m)})}let n=(0,j.j)("api/documents/generated/[id]/repair",m);var o=c(68970),p=c(50296);let q=(0,h.M)(d,"default"),r=(0,h.M)(d,"config"),s=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/documents/generated/[id]/repair",pathname:"/api/documents/generated/[id]/repair",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function t(a,b,c){let d=await s.prepare(a,b,{srcPage:"/api/documents/generated/[id]/repair"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,o.getTracer)(),e=d.getActiveScopeSpan(),j=s.instrumentationOnRequestError.bind(s),k=async e=>s.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:s.isDev,page:"/api/documents/generated/[id]/repair",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==p.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(p.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:o.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(s.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},28183:a=>{a.exports=require("@napi-rs/canvas")},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},55511:a=>{a.exports=require("crypto")},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,299,1001,2434,5547,6087],()=>b(b.s=17372));module.exports=c})();
1
+ "use strict";(()=>{var a={};a.id=7171,a.ids=[7171],a.modules={15751:a=>{a.exports=require("xlsx")},16698:a=>{a.exports=require("node:async_hooks")},17372:(a,b,c)=>{c.r(b),c.d(b,{config:()=>s,default:()=>r,handler:()=>u});var d={};c.r(d),c.d(d,{default:()=>o});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(76760),j=c(16006),k=c(48661),l=c(22328),m=c(48479);async function n(a,b){let c,d;if("POST"!==a.method)return b.status(405).json({error:"Method not allowed"});let e=a.query.id,f=a.body,g=f.projectRoot,h=(0,k.getGeneratedDocument)(e,g);if(!h)return b.status(404).json({error:"Document not found"});let j=String(f.userMessage||"");if(!j.trim())return b.status(400).json({error:"userMessage required"});if(f.patch&&(!f.patch.anchor||"string"!=typeof f.patch.replacement))return b.status(400).json({error:"patch 需要 anchor(逐字锚点)与 replacement(字符串)"});if(!f.targetNodeId)try{let a=(0,l.Fv)({documentId:e,projectRoot:g??h.projectRoot}),b=(0,l.mm)({context:a,userMessage:j});c={method:b.method,candidates:b.candidates},0===b.candidates.length&&(d="用户原话里没有能在正文中逐字命中的片段,故候选为空:定位到此为止(不猜)。请让用户引用要改的原文(用引号括起来),或改用 @节点 入口指定节点。")}catch(a){c={method:"literal-search",candidates:[]},d=`归档上下文不可用,未能计算定位候选:${a instanceof Error?a.message:String(a)}`}let n={id:`repair-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,source:f.source||"user",targetNodeId:f.targetNodeId||void 0,userMessage:j,patch:f.patch,localization:c,impact:{affectedNodeIds:[],reason:"",class:"local"}};(0,l.rN)(e,n,i.join((0,k.Gl)(g),"drafts"));let o={documentId:e},p=(0,k.Gl)(g);(0,m.Wl)(o,{batch:"finalize.pipeline",baseDir:p,id:`repair.request.${n.id}`,type:"repair.request",title:`修复请求:${n.targetNodeId?"指定节点":"需定位"}`,status:"completed",metrics:{requestId:n.id,targetNodeId:n.targetNodeId??"(未指定,需定位)",messageChars:j.length,attribution:(0,l.xv)(n)}}),n.localization&&(0,m.Wl)(o,{batch:"finalize.pipeline",baseDir:p,id:`repair.localize.${n.id}`,type:"repair.localize",title:`修复定位:${n.localization.method}(候选 ${n.localization.candidates.length})`,status:"completed",metrics:{method:n.localization.method,candidates:n.localization.candidates.length,...d?{note:d.slice(0,120)}:{}}});let q=!n.targetNodeId;b.status(202).json({request:n,needsLocalization:q,localizationNote:d,next:q?"POST .../repair/[rid]/confirm(先确认定位,再动手)":"POST .../repair/[rid]/confirm(执行变更事务)",attribution:(0,l.xv)(n)})}let o=(0,j.j)("api/documents/generated/[id]/repair",n);var p=c(68970),q=c(50296);let r=(0,h.M)(d,"default"),s=(0,h.M)(d,"config"),t=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/documents/generated/[id]/repair",pathname:"/api/documents/generated/[id]/repair",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function u(a,b,c){let d=await t.prepare(a,b,{srcPage:"/api/documents/generated/[id]/repair"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,p.getTracer)(),e=d.getActiveScopeSpan(),j=t.instrumentationOnRequestError.bind(t),k=async e=>t.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:t.isDev,page:"/api/documents/generated/[id]/repair",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==q.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(q.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:p.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(t.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},28183:a=>{a.exports=require("@napi-rs/canvas")},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},55511:a=>{a.exports=require("crypto")},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,299,1001,2434,5547,6087],()=>b(b.s=17372));module.exports=c})();
@@ -1 +1 @@
1
- "use strict";(()=>{var a={};a.id=4313,a.ids=[4313],a.modules={15751:a=>{a.exports=require("xlsx")},16698:a=>{a.exports=require("node:async_hooks")},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},24393:(a,b,c)=>{c.r(b),c.d(b,{config:()=>q,default:()=>p,handler:()=>s});var d={};c.r(d),c.d(d,{default:()=>m});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(32374),j=c(45304),k=c(89759),l=c(74974);function m(a,b){try{let c=function(a){let b=a.id;return"string"==typeof b?b:Array.isArray(b)?b[0]??"":""}(a.query);if(!c)return b.status(400).json({error:"id required"});if((0,i.LB)(c)){let d="DELETE"===a.method?"delete":"edit";return b.status(403).json({error:(0,l.builtInDeniedMessage)(c,d)})}if("PUT"===a.method){let d=(0,l.readBodyId)(a.body);if(void 0!==d&&d!==c)return b.status(400).json({error:`请求体里的技能 id「${d}」与路径 id「${c}」不一致(文件名即 id,不一致会让读取定位到别的技能)`});if((0,l.isReservedSkillId)(c))return b.status(400).json({error:`技能 id「${c}」是保留段(被 /api/skills/${c} 路由占用),不可作为技能 id`});if(!(0,j.mf)(c))return b.status(404).json({error:`技能「${c}」不在技能库中(本接口只编辑已落盘的用户技能,不隐式新建;新建走 POST /api/skills)`});let e=(0,l.retiredFieldIssues)(a.body);if(e.length>0)return b.status(400).json({error:"技能含已退休字段,未落盘",errors:e,warnings:[]});let f=(0,l.normalizeSkillForWrite)(a.body,c),g=(0,k.Yb)(f);if(!g.ok)return b.status(400).json({error:"技能未通过校验,未落盘",errors:g.errors,warnings:g.warnings});let h=(0,l.persistSkill)(f);if(!h.ok)return b.status(400).json({error:"技能落盘被拒",errors:h.errors});return b.status(200).json({skill:(0,l.withBuiltInFlag)(f),skills:(0,l.listSkillCollection)().skills,warnings:g.warnings})}if("DELETE"===a.method){if(!(0,j.O$)(c))return b.status(404).json({error:`技能「${c}」没有对应落盘记录(内置技能不落盘,用户技能删除后才会有此提示)`});return b.status(200).json({success:!0,skills:(0,l.listSkillCollection)().skills})}return(0,l.respondMethodNotAllowed)(b)}catch(a){return console.error("[api] skills/[id]",a),b.status(500).json({error:a instanceof Error?a.message:"Internal server error"})}}var n=c(68970),o=c(50296);let p=(0,h.M)(d,"default"),q=(0,h.M)(d,"config"),r=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/skills/[id]",pathname:"/api/skills/[id]",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function s(a,b,c){let d=await r.prepare(a,b,{srcPage:"/api/skills/[id]"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,n.getTracer)(),e=d.getActiveScopeSpan(),j=r.instrumentationOnRequestError.bind(r),k=async e=>r.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:r.isDev,page:"/api/skills/[id]",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==o.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(o.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:n.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(r.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},28183:a=>{a.exports=require("@napi-rs/canvas")},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},73024:a=>{a.exports=require("node:fs")},74974:(a,b,c)=>{c.r(b),c.d(b,{builtInDeniedMessage:()=>l,default:()=>v,isReservedSkillId:()=>k,listSkillCollection:()=>o,normalizeSkillForWrite:()=>s,persistSkill:()=>u,readBodyId:()=>r,respondMethodNotAllowed:()=>m,retiredFieldIssues:()=>t,skillEditorOptions:()=>p,withBuiltInFlag:()=>n});var d=c(32374),e=c(13424),f=c(45304),g=c(89759);let h=[{value:"processCard",label:"工艺卡",note:"按名称多选(引用存在性由服务端校验)"},{value:"processChain",label:"工序链",note:"单选,取值为工程类型(如 building/municipal)"},{value:"workflowRules",label:"工程规则资产",note:"单选,取自已登记资产清单"},{value:"standard",label:"规范标准",note:"规范号是自由文本(本仓无注册表可对,校验器不假装校验)"}],i=[{value:"detector",label:"内置检测器(确定性)",note:"进硬门禁;硬门禁归属由检测器注册表声明,技能不得覆写"},{value:"threshold",label:"参数化阈值(确定性)",note:"进硬门禁;阈值与方向由登记表单源"},{value:"llmChecklist",label:"LLM 检查清单(非确定性)",note:"只做提示与评分,不进硬门禁(\xa76.5 硬规则 2)"}],j=["validate"];function k(a){return j.includes(a)}function l(a,b){return`「${a}」是内置技能:F.3 规定内置技能不随用户落盘(随应用版本升级),\xa717.3 / 附录 E 明确 builtIn 禁改禁删,故禁止${"edit"===b?"编辑":"delete"===b?"删除":"用内置 id 新建"}。请换一个 id 新建用户技能。`}function m(a){a.status(405).json({error:"Method not allowed"})}function n(a){return{...a,builtIn:"builtin"===a.source,displayName:(0,e.zg)(a)}}function o(){let{skills:a,invalid:b}=(0,f.LU)();return{skills:a.map(n),invalid:b}}function p(){return{contractVersion:e.SV,chapterDomains:e.ii.map(a=>({value:a,label:e.aq[a],note:e.tv[a]})),projectTypes:e.Av.map(a=>({value:a,label:e.zK[a]})),factSources:e.C3.map(a=>({value:a.id,label:a.label})),processCards:[...d.pw.values()].map(a=>({value:a.id,label:a.name})),workflowRules:e.sK.map(a=>({value:a,label:e.XC[a]})),thresholds:e.pI.map(a=>({value:a,label:e.n3[a].label,note:`${e.n3[a].unit} \xb7 方向 ${"min"===e.n3[a].direction?"越大越严(下限)":"越小越严(上限)"} \xb7 ${e.n3[a].source}`})),detectors:(0,g.zC)(),knowledgeKinds:[...h],acceptanceKinds:[...i],isolationRules:e.TF,absentCarriers:e.uZ}}function q(a){if(!("object"!=typeof a||null===a||Array.isArray(a)))return a}function r(a){let b=q(a),c=b?.id;return"string"==typeof c&&c.trim().length>0?c:void 0}function s(a,b){let c=q(a)??{};return{id:b,version:"number"==typeof c.version?c.version:e.SV,source:"user",enabled:!1!==c.enabled,match:c.match,requires:c.requires,structure:c.structure,forbidden:c.forbidden,knowledge:c.knowledge,acceptance:c.acceptance,...void 0!==c.examples?{examples:c.examples}:{},...void 0!==c.outputTitle?{outputTitle:c.outputTitle}:{},...void 0!==c.chapterChecklist?{chapterChecklist:c.chapterChecklist}:{}}}function t(a){let b=q(a);if(!b)return[];let c=[];return void 0!==b.promptBindings&&c.push({code:"prompt-binding-retired",path:"promptBindings",message:g.PW}),void 0!==b.templateIds&&c.push({code:"template-ids-retired",path:"templateIds",message:g.OE}),c}function u(a){return(0,f.T$)({v:f.t1,id:a.id,enabled:!1!==a.enabled,skill:{...a,enabled:!1!==a.enabled}})}function v(a,b){try{if("GET"===a.method){let{skills:a,invalid:c}=o();return b.status(200).json({skills:a,options:p(),invalid:c})}if("POST"===a.method){let c=r(a.body);if(!c)return b.status(400).json({error:"技能 id 必填(小写字母/数字/连字符,以字母开头)"});if(k(c))return b.status(400).json({error:`技能 id「${c}」是保留段(/api/skills/${c} 已被路由占用,建得出但改不了),请换一个 id`});if((0,d.LB)(c))return b.status(403).json({error:l(c,"create")});let e=t(a.body);if(e.length>0)return b.status(400).json({error:"技能含已退休字段,未落盘",errors:e,warnings:[]});let f=s(a.body,c),h=(0,g.Yb)(f);if(!h.ok)return b.status(400).json({error:"技能未通过校验,未落盘",errors:h.errors,warnings:h.warnings});let i=u(f);if(!i.ok)return b.status(i.errors.some(a=>"builtin-skill-not-persistable"===a.code||"overrides-not-applicable"===a.code)?403:400).json({error:"技能落盘被拒",errors:i.errors});return b.status(200).json({skill:n(f),skills:o().skills,warnings:h.warnings})}return m(b)}catch(a){return console.error("[api] skills",a),b.status(500).json({error:a instanceof Error?a.message:"Internal server error"})}}},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,299,1001,2434,5547],()=>b(b.s=24393));module.exports=c})();
1
+ "use strict";(()=>{var a={};a.id=4313,a.ids=[4313],a.modules={15751:a=>{a.exports=require("xlsx")},16698:a=>{a.exports=require("node:async_hooks")},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},24393:(a,b,c)=>{c.r(b),c.d(b,{config:()=>q,default:()=>p,handler:()=>s});var d={};c.r(d),c.d(d,{default:()=>m});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(32374),j=c(45304),k=c(89759),l=c(74974);function m(a,b){try{let c=function(a){let b=a.id;return"string"==typeof b?b:Array.isArray(b)?b[0]??"":""}(a.query);if(!c)return b.status(400).json({error:"id required"});if((0,i.LB)(c)){let d="DELETE"===a.method?"delete":"edit";return b.status(403).json({error:(0,l.builtInDeniedMessage)(c,d)})}if("PUT"===a.method){let d=(0,l.readBodyId)(a.body);if(void 0!==d&&d!==c)return b.status(400).json({error:`请求体里的技能 id「${d}」与路径 id「${c}」不一致(文件名即 id,不一致会让读取定位到别的技能)`});if((0,l.isReservedSkillId)(c))return b.status(400).json({error:`技能 id「${c}」是保留段(被 /api/skills/${c} 路由占用),不可作为技能 id`});if(!(0,j.readStoredSkillRecord)(c))return b.status(404).json({error:`技能「${c}」不在技能库中(本接口只编辑已落盘的用户技能,不隐式新建;新建走 POST /api/skills)`});let e=(0,l.retiredFieldIssues)(a.body);if(e.length>0)return b.status(400).json({error:"技能含已退休字段,未落盘",errors:e,warnings:[]});let f=(0,l.normalizeSkillForWrite)(a.body,c),g=(0,k.Yb)(f);if(!g.ok)return b.status(400).json({error:"技能未通过校验,未落盘",errors:g.errors,warnings:g.warnings});let h=(0,l.persistSkill)(f);if(!h.ok)return b.status(400).json({error:"技能落盘被拒",errors:h.errors});return b.status(200).json({skill:(0,l.withBuiltInFlag)(f),skills:(0,l.listSkillCollection)().skills,warnings:g.warnings})}if("DELETE"===a.method){if(!(0,j.removeStoredSkillRecord)(c))return b.status(404).json({error:`技能「${c}」没有对应落盘记录(内置技能不落盘,用户技能删除后才会有此提示)`});return b.status(200).json({success:!0,skills:(0,l.listSkillCollection)().skills})}return(0,l.respondMethodNotAllowed)(b)}catch(a){return console.error("[api] skills/[id]",a),b.status(500).json({error:a instanceof Error?a.message:"Internal server error"})}}var n=c(68970),o=c(50296);let p=(0,h.M)(d,"default"),q=(0,h.M)(d,"config"),r=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/skills/[id]",pathname:"/api/skills/[id]",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function s(a,b,c){let d=await r.prepare(a,b,{srcPage:"/api/skills/[id]"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,n.getTracer)(),e=d.getActiveScopeSpan(),j=r.instrumentationOnRequestError.bind(r),k=async e=>r.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:r.isDev,page:"/api/skills/[id]",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==o.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(o.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:n.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(r.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},28183:a=>{a.exports=require("@napi-rs/canvas")},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},73024:a=>{a.exports=require("node:fs")},74974:(a,b,c)=>{c.r(b),c.d(b,{builtInDeniedMessage:()=>l,default:()=>v,isReservedSkillId:()=>k,listSkillCollection:()=>o,normalizeSkillForWrite:()=>s,persistSkill:()=>u,readBodyId:()=>r,respondMethodNotAllowed:()=>m,retiredFieldIssues:()=>t,skillEditorOptions:()=>p,withBuiltInFlag:()=>n});var d=c(32374),e=c(13424),f=c(45304),g=c(89759);let h=[{value:"processCard",label:"工艺卡",note:"按名称多选(引用存在性由服务端校验)"},{value:"processChain",label:"工序链",note:"单选,取值为工程类型(如 building/municipal)"},{value:"workflowRules",label:"工程规则资产",note:"单选,取自已登记资产清单"},{value:"standard",label:"规范标准",note:"规范号是自由文本(本仓无注册表可对,校验器不假装校验)"}],i=[{value:"detector",label:"内置检测器(确定性)",note:"进硬门禁;硬门禁归属由检测器注册表声明,技能不得覆写"},{value:"threshold",label:"参数化阈值(确定性)",note:"进硬门禁;阈值与方向由登记表单源"},{value:"llmChecklist",label:"LLM 检查清单(非确定性)",note:"只做提示与评分,不进硬门禁(\xa76.5 硬规则 2)"}],j=["validate"];function k(a){return j.includes(a)}function l(a,b){return`「${a}」是内置技能:F.3 规定内置技能不随用户落盘(随应用版本升级),\xa717.3 / 附录 E 明确 builtIn 禁改禁删,故禁止${"edit"===b?"编辑":"delete"===b?"删除":"用内置 id 新建"}。请换一个 id 新建用户技能。`}function m(a){a.status(405).json({error:"Method not allowed"})}function n(a){return{...a,builtIn:"builtin"===a.source,displayName:(0,e.zg)(a)}}function o(){let{skills:a,invalid:b}=(0,f.loadSkillStore)();return{skills:a.map(n),invalid:b}}function p(){return{contractVersion:e.SV,chapterDomains:e.ii.map(a=>({value:a,label:e.aq[a],note:e.tv[a]})),projectTypes:e.Av.map(a=>({value:a,label:e.zK[a]})),factSources:e.C3.map(a=>({value:a.id,label:a.label})),processCards:[...d.pw.values()].map(a=>({value:a.id,label:a.name})),workflowRules:e.sK.map(a=>({value:a,label:e.XC[a]})),thresholds:e.pI.map(a=>({value:a,label:e.n3[a].label,note:`${e.n3[a].unit} \xb7 方向 ${"min"===e.n3[a].direction?"越大越严(下限)":"越小越严(上限)"} \xb7 ${e.n3[a].source}`})),detectors:(0,g.zC)(),knowledgeKinds:[...h],acceptanceKinds:[...i],isolationRules:e.TF,absentCarriers:e.uZ}}function q(a){if(!("object"!=typeof a||null===a||Array.isArray(a)))return a}function r(a){let b=q(a),c=b?.id;return"string"==typeof c&&c.trim().length>0?c:void 0}function s(a,b){let c=q(a)??{};return{id:b,version:"number"==typeof c.version?c.version:e.SV,source:"user",enabled:!1!==c.enabled,match:c.match,requires:c.requires,structure:c.structure,forbidden:c.forbidden,knowledge:c.knowledge,acceptance:c.acceptance,...void 0!==c.examples?{examples:c.examples}:{},...void 0!==c.outputTitle?{outputTitle:c.outputTitle}:{},...void 0!==c.chapterChecklist?{chapterChecklist:c.chapterChecklist}:{}}}function t(a){let b=q(a);if(!b)return[];let c=[];return void 0!==b.promptBindings&&c.push({code:"prompt-binding-retired",path:"promptBindings",message:g.PW}),void 0!==b.templateIds&&c.push({code:"template-ids-retired",path:"templateIds",message:g.OE}),c}function u(a){return(0,f.writeStoredSkillRecord)({v:f.SKILL_STORE_VERSION,id:a.id,enabled:!1!==a.enabled,skill:{...a,enabled:!1!==a.enabled}})}function v(a,b){try{if("GET"===a.method){let{skills:a,invalid:c}=o();return b.status(200).json({skills:a,options:p(),invalid:c})}if("POST"===a.method){let c=r(a.body);if(!c)return b.status(400).json({error:"技能 id 必填(小写字母/数字/连字符,以字母开头)"});if(k(c))return b.status(400).json({error:`技能 id「${c}」是保留段(/api/skills/${c} 已被路由占用,建得出但改不了),请换一个 id`});if((0,d.LB)(c))return b.status(403).json({error:l(c,"create")});let e=t(a.body);if(e.length>0)return b.status(400).json({error:"技能含已退休字段,未落盘",errors:e,warnings:[]});let f=s(a.body,c),h=(0,g.Yb)(f);if(!h.ok)return b.status(400).json({error:"技能未通过校验,未落盘",errors:h.errors,warnings:h.warnings});let i=u(f);if(!i.ok)return b.status(i.errors.some(a=>"builtin-skill-not-persistable"===a.code||"overrides-not-applicable"===a.code)?403:400).json({error:"技能落盘被拒",errors:i.errors});return b.status(200).json({skill:n(f),skills:o().skills,warnings:h.warnings})}return m(b)}catch(a){return console.error("[api] skills",a),b.status(500).json({error:a instanceof Error?a.message:"Internal server error"})}}},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,299,1001,2434,5547],()=>b(b.s=24393));module.exports=c})();
@@ -1 +1 @@
1
- "use strict";(()=>{var a={};a.id=8330,a.ids=[8330],a.modules={15751:a=>{a.exports=require("xlsx")},16698:a=>{a.exports=require("node:async_hooks")},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},28183:a=>{a.exports=require("@napi-rs/canvas")},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},47893:(a,b,c)=>{c.r(b),c.d(b,{config:()=>o,default:()=>n,handler:()=>q});var d={};c.r(d),c.d(d,{default:()=>k});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(89759),j=c(74974);function k(a,b){try{if("POST"!==a.method)return(0,j.respondMethodNotAllowed)(b);let c=a.body;if("object"!=typeof c||null===c||Array.isArray(c))return b.status(400).json({error:"请求体须为一个技能对象(JSON)"});let d=(0,i.Yb)(c);return b.status(200).json({ok:d.ok,errors:d.errors,warnings:d.warnings})}catch(a){return console.error("[api] skills/validate",a),b.status(500).json({error:a instanceof Error?a.message:"Internal server error"})}}var l=c(68970),m=c(50296);let n=(0,h.M)(d,"default"),o=(0,h.M)(d,"config"),p=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/skills/validate",pathname:"/api/skills/validate",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function q(a,b,c){let d=await p.prepare(a,b,{srcPage:"/api/skills/validate"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,l.getTracer)(),e=d.getActiveScopeSpan(),j=p.instrumentationOnRequestError.bind(p),k=async e=>p.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:p.isDev,page:"/api/skills/validate",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==m.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(m.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:l.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(p.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},48161:a=>{a.exports=require("node:os")},73024:a=>{a.exports=require("node:fs")},74974:(a,b,c)=>{c.r(b),c.d(b,{builtInDeniedMessage:()=>l,default:()=>v,isReservedSkillId:()=>k,listSkillCollection:()=>o,normalizeSkillForWrite:()=>s,persistSkill:()=>u,readBodyId:()=>r,respondMethodNotAllowed:()=>m,retiredFieldIssues:()=>t,skillEditorOptions:()=>p,withBuiltInFlag:()=>n});var d=c(32374),e=c(13424),f=c(45304),g=c(89759);let h=[{value:"processCard",label:"工艺卡",note:"按名称多选(引用存在性由服务端校验)"},{value:"processChain",label:"工序链",note:"单选,取值为工程类型(如 building/municipal)"},{value:"workflowRules",label:"工程规则资产",note:"单选,取自已登记资产清单"},{value:"standard",label:"规范标准",note:"规范号是自由文本(本仓无注册表可对,校验器不假装校验)"}],i=[{value:"detector",label:"内置检测器(确定性)",note:"进硬门禁;硬门禁归属由检测器注册表声明,技能不得覆写"},{value:"threshold",label:"参数化阈值(确定性)",note:"进硬门禁;阈值与方向由登记表单源"},{value:"llmChecklist",label:"LLM 检查清单(非确定性)",note:"只做提示与评分,不进硬门禁(\xa76.5 硬规则 2)"}],j=["validate"];function k(a){return j.includes(a)}function l(a,b){return`「${a}」是内置技能:F.3 规定内置技能不随用户落盘(随应用版本升级),\xa717.3 / 附录 E 明确 builtIn 禁改禁删,故禁止${"edit"===b?"编辑":"delete"===b?"删除":"用内置 id 新建"}。请换一个 id 新建用户技能。`}function m(a){a.status(405).json({error:"Method not allowed"})}function n(a){return{...a,builtIn:"builtin"===a.source,displayName:(0,e.zg)(a)}}function o(){let{skills:a,invalid:b}=(0,f.LU)();return{skills:a.map(n),invalid:b}}function p(){return{contractVersion:e.SV,chapterDomains:e.ii.map(a=>({value:a,label:e.aq[a],note:e.tv[a]})),projectTypes:e.Av.map(a=>({value:a,label:e.zK[a]})),factSources:e.C3.map(a=>({value:a.id,label:a.label})),processCards:[...d.pw.values()].map(a=>({value:a.id,label:a.name})),workflowRules:e.sK.map(a=>({value:a,label:e.XC[a]})),thresholds:e.pI.map(a=>({value:a,label:e.n3[a].label,note:`${e.n3[a].unit} \xb7 方向 ${"min"===e.n3[a].direction?"越大越严(下限)":"越小越严(上限)"} \xb7 ${e.n3[a].source}`})),detectors:(0,g.zC)(),knowledgeKinds:[...h],acceptanceKinds:[...i],isolationRules:e.TF,absentCarriers:e.uZ}}function q(a){if(!("object"!=typeof a||null===a||Array.isArray(a)))return a}function r(a){let b=q(a),c=b?.id;return"string"==typeof c&&c.trim().length>0?c:void 0}function s(a,b){let c=q(a)??{};return{id:b,version:"number"==typeof c.version?c.version:e.SV,source:"user",enabled:!1!==c.enabled,match:c.match,requires:c.requires,structure:c.structure,forbidden:c.forbidden,knowledge:c.knowledge,acceptance:c.acceptance,...void 0!==c.examples?{examples:c.examples}:{},...void 0!==c.outputTitle?{outputTitle:c.outputTitle}:{},...void 0!==c.chapterChecklist?{chapterChecklist:c.chapterChecklist}:{}}}function t(a){let b=q(a);if(!b)return[];let c=[];return void 0!==b.promptBindings&&c.push({code:"prompt-binding-retired",path:"promptBindings",message:g.PW}),void 0!==b.templateIds&&c.push({code:"template-ids-retired",path:"templateIds",message:g.OE}),c}function u(a){return(0,f.T$)({v:f.t1,id:a.id,enabled:!1!==a.enabled,skill:{...a,enabled:!1!==a.enabled}})}function v(a,b){try{if("GET"===a.method){let{skills:a,invalid:c}=o();return b.status(200).json({skills:a,options:p(),invalid:c})}if("POST"===a.method){let c=r(a.body);if(!c)return b.status(400).json({error:"技能 id 必填(小写字母/数字/连字符,以字母开头)"});if(k(c))return b.status(400).json({error:`技能 id「${c}」是保留段(/api/skills/${c} 已被路由占用,建得出但改不了),请换一个 id`});if((0,d.LB)(c))return b.status(403).json({error:l(c,"create")});let e=t(a.body);if(e.length>0)return b.status(400).json({error:"技能含已退休字段,未落盘",errors:e,warnings:[]});let f=s(a.body,c),h=(0,g.Yb)(f);if(!h.ok)return b.status(400).json({error:"技能未通过校验,未落盘",errors:h.errors,warnings:h.warnings});let i=u(f);if(!i.ok)return b.status(i.errors.some(a=>"builtin-skill-not-persistable"===a.code||"overrides-not-applicable"===a.code)?403:400).json({error:"技能落盘被拒",errors:i.errors});return b.status(200).json({skill:n(f),skills:o().skills,warnings:h.warnings})}return m(b)}catch(a){return console.error("[api] skills",a),b.status(500).json({error:a instanceof Error?a.message:"Internal server error"})}}},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,299,1001,2434,5547],()=>b(b.s=47893));module.exports=c})();
1
+ "use strict";(()=>{var a={};a.id=8330,a.ids=[8330],a.modules={15751:a=>{a.exports=require("xlsx")},16698:a=>{a.exports=require("node:async_hooks")},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},28183:a=>{a.exports=require("@napi-rs/canvas")},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},47893:(a,b,c)=>{c.r(b),c.d(b,{config:()=>o,default:()=>n,handler:()=>q});var d={};c.r(d),c.d(d,{default:()=>k});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(89759),j=c(74974);function k(a,b){try{if("POST"!==a.method)return(0,j.respondMethodNotAllowed)(b);let c=a.body;if("object"!=typeof c||null===c||Array.isArray(c))return b.status(400).json({error:"请求体须为一个技能对象(JSON)"});let d=(0,i.Yb)(c);return b.status(200).json({ok:d.ok,errors:d.errors,warnings:d.warnings})}catch(a){return console.error("[api] skills/validate",a),b.status(500).json({error:a instanceof Error?a.message:"Internal server error"})}}var l=c(68970),m=c(50296);let n=(0,h.M)(d,"default"),o=(0,h.M)(d,"config"),p=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/skills/validate",pathname:"/api/skills/validate",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function q(a,b,c){let d=await p.prepare(a,b,{srcPage:"/api/skills/validate"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,l.getTracer)(),e=d.getActiveScopeSpan(),j=p.instrumentationOnRequestError.bind(p),k=async e=>p.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:p.isDev,page:"/api/skills/validate",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==m.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(m.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:l.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(p.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},48161:a=>{a.exports=require("node:os")},73024:a=>{a.exports=require("node:fs")},74974:(a,b,c)=>{c.r(b),c.d(b,{builtInDeniedMessage:()=>l,default:()=>v,isReservedSkillId:()=>k,listSkillCollection:()=>o,normalizeSkillForWrite:()=>s,persistSkill:()=>u,readBodyId:()=>r,respondMethodNotAllowed:()=>m,retiredFieldIssues:()=>t,skillEditorOptions:()=>p,withBuiltInFlag:()=>n});var d=c(32374),e=c(13424),f=c(45304),g=c(89759);let h=[{value:"processCard",label:"工艺卡",note:"按名称多选(引用存在性由服务端校验)"},{value:"processChain",label:"工序链",note:"单选,取值为工程类型(如 building/municipal)"},{value:"workflowRules",label:"工程规则资产",note:"单选,取自已登记资产清单"},{value:"standard",label:"规范标准",note:"规范号是自由文本(本仓无注册表可对,校验器不假装校验)"}],i=[{value:"detector",label:"内置检测器(确定性)",note:"进硬门禁;硬门禁归属由检测器注册表声明,技能不得覆写"},{value:"threshold",label:"参数化阈值(确定性)",note:"进硬门禁;阈值与方向由登记表单源"},{value:"llmChecklist",label:"LLM 检查清单(非确定性)",note:"只做提示与评分,不进硬门禁(\xa76.5 硬规则 2)"}],j=["validate"];function k(a){return j.includes(a)}function l(a,b){return`「${a}」是内置技能:F.3 规定内置技能不随用户落盘(随应用版本升级),\xa717.3 / 附录 E 明确 builtIn 禁改禁删,故禁止${"edit"===b?"编辑":"delete"===b?"删除":"用内置 id 新建"}。请换一个 id 新建用户技能。`}function m(a){a.status(405).json({error:"Method not allowed"})}function n(a){return{...a,builtIn:"builtin"===a.source,displayName:(0,e.zg)(a)}}function o(){let{skills:a,invalid:b}=(0,f.loadSkillStore)();return{skills:a.map(n),invalid:b}}function p(){return{contractVersion:e.SV,chapterDomains:e.ii.map(a=>({value:a,label:e.aq[a],note:e.tv[a]})),projectTypes:e.Av.map(a=>({value:a,label:e.zK[a]})),factSources:e.C3.map(a=>({value:a.id,label:a.label})),processCards:[...d.pw.values()].map(a=>({value:a.id,label:a.name})),workflowRules:e.sK.map(a=>({value:a,label:e.XC[a]})),thresholds:e.pI.map(a=>({value:a,label:e.n3[a].label,note:`${e.n3[a].unit} \xb7 方向 ${"min"===e.n3[a].direction?"越大越严(下限)":"越小越严(上限)"} \xb7 ${e.n3[a].source}`})),detectors:(0,g.zC)(),knowledgeKinds:[...h],acceptanceKinds:[...i],isolationRules:e.TF,absentCarriers:e.uZ}}function q(a){if(!("object"!=typeof a||null===a||Array.isArray(a)))return a}function r(a){let b=q(a),c=b?.id;return"string"==typeof c&&c.trim().length>0?c:void 0}function s(a,b){let c=q(a)??{};return{id:b,version:"number"==typeof c.version?c.version:e.SV,source:"user",enabled:!1!==c.enabled,match:c.match,requires:c.requires,structure:c.structure,forbidden:c.forbidden,knowledge:c.knowledge,acceptance:c.acceptance,...void 0!==c.examples?{examples:c.examples}:{},...void 0!==c.outputTitle?{outputTitle:c.outputTitle}:{},...void 0!==c.chapterChecklist?{chapterChecklist:c.chapterChecklist}:{}}}function t(a){let b=q(a);if(!b)return[];let c=[];return void 0!==b.promptBindings&&c.push({code:"prompt-binding-retired",path:"promptBindings",message:g.PW}),void 0!==b.templateIds&&c.push({code:"template-ids-retired",path:"templateIds",message:g.OE}),c}function u(a){return(0,f.writeStoredSkillRecord)({v:f.SKILL_STORE_VERSION,id:a.id,enabled:!1!==a.enabled,skill:{...a,enabled:!1!==a.enabled}})}function v(a,b){try{if("GET"===a.method){let{skills:a,invalid:c}=o();return b.status(200).json({skills:a,options:p(),invalid:c})}if("POST"===a.method){let c=r(a.body);if(!c)return b.status(400).json({error:"技能 id 必填(小写字母/数字/连字符,以字母开头)"});if(k(c))return b.status(400).json({error:`技能 id「${c}」是保留段(/api/skills/${c} 已被路由占用,建得出但改不了),请换一个 id`});if((0,d.LB)(c))return b.status(403).json({error:l(c,"create")});let e=t(a.body);if(e.length>0)return b.status(400).json({error:"技能含已退休字段,未落盘",errors:e,warnings:[]});let f=s(a.body,c),h=(0,g.Yb)(f);if(!h.ok)return b.status(400).json({error:"技能未通过校验,未落盘",errors:h.errors,warnings:h.warnings});let i=u(f);if(!i.ok)return b.status(i.errors.some(a=>"builtin-skill-not-persistable"===a.code||"overrides-not-applicable"===a.code)?403:400).json({error:"技能落盘被拒",errors:i.errors});return b.status(200).json({skill:n(f),skills:o().skills,warnings:h.warnings})}return m(b)}catch(a){return console.error("[api] skills",a),b.status(500).json({error:a instanceof Error?a.message:"Internal server error"})}}},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,299,1001,2434,5547],()=>b(b.s=47893));module.exports=c})();
@@ -1 +1 @@
1
- "use strict";(()=>{var a={};a.id=9349,a.ids=[9349],a.modules={15751:a=>{a.exports=require("xlsx")},16698:a=>{a.exports=require("node:async_hooks")},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},28183:a=>{a.exports=require("@napi-rs/canvas")},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},73024:a=>{a.exports=require("node:fs")},74974:(a,b,c)=>{c.r(b),c.d(b,{builtInDeniedMessage:()=>l,default:()=>v,isReservedSkillId:()=>k,listSkillCollection:()=>o,normalizeSkillForWrite:()=>s,persistSkill:()=>u,readBodyId:()=>r,respondMethodNotAllowed:()=>m,retiredFieldIssues:()=>t,skillEditorOptions:()=>p,withBuiltInFlag:()=>n});var d=c(32374),e=c(13424),f=c(45304),g=c(89759);let h=[{value:"processCard",label:"工艺卡",note:"按名称多选(引用存在性由服务端校验)"},{value:"processChain",label:"工序链",note:"单选,取值为工程类型(如 building/municipal)"},{value:"workflowRules",label:"工程规则资产",note:"单选,取自已登记资产清单"},{value:"standard",label:"规范标准",note:"规范号是自由文本(本仓无注册表可对,校验器不假装校验)"}],i=[{value:"detector",label:"内置检测器(确定性)",note:"进硬门禁;硬门禁归属由检测器注册表声明,技能不得覆写"},{value:"threshold",label:"参数化阈值(确定性)",note:"进硬门禁;阈值与方向由登记表单源"},{value:"llmChecklist",label:"LLM 检查清单(非确定性)",note:"只做提示与评分,不进硬门禁(\xa76.5 硬规则 2)"}],j=["validate"];function k(a){return j.includes(a)}function l(a,b){return`「${a}」是内置技能:F.3 规定内置技能不随用户落盘(随应用版本升级),\xa717.3 / 附录 E 明确 builtIn 禁改禁删,故禁止${"edit"===b?"编辑":"delete"===b?"删除":"用内置 id 新建"}。请换一个 id 新建用户技能。`}function m(a){a.status(405).json({error:"Method not allowed"})}function n(a){return{...a,builtIn:"builtin"===a.source,displayName:(0,e.zg)(a)}}function o(){let{skills:a,invalid:b}=(0,f.LU)();return{skills:a.map(n),invalid:b}}function p(){return{contractVersion:e.SV,chapterDomains:e.ii.map(a=>({value:a,label:e.aq[a],note:e.tv[a]})),projectTypes:e.Av.map(a=>({value:a,label:e.zK[a]})),factSources:e.C3.map(a=>({value:a.id,label:a.label})),processCards:[...d.pw.values()].map(a=>({value:a.id,label:a.name})),workflowRules:e.sK.map(a=>({value:a,label:e.XC[a]})),thresholds:e.pI.map(a=>({value:a,label:e.n3[a].label,note:`${e.n3[a].unit} \xb7 方向 ${"min"===e.n3[a].direction?"越大越严(下限)":"越小越严(上限)"} \xb7 ${e.n3[a].source}`})),detectors:(0,g.zC)(),knowledgeKinds:[...h],acceptanceKinds:[...i],isolationRules:e.TF,absentCarriers:e.uZ}}function q(a){if(!("object"!=typeof a||null===a||Array.isArray(a)))return a}function r(a){let b=q(a),c=b?.id;return"string"==typeof c&&c.trim().length>0?c:void 0}function s(a,b){let c=q(a)??{};return{id:b,version:"number"==typeof c.version?c.version:e.SV,source:"user",enabled:!1!==c.enabled,match:c.match,requires:c.requires,structure:c.structure,forbidden:c.forbidden,knowledge:c.knowledge,acceptance:c.acceptance,...void 0!==c.examples?{examples:c.examples}:{},...void 0!==c.outputTitle?{outputTitle:c.outputTitle}:{},...void 0!==c.chapterChecklist?{chapterChecklist:c.chapterChecklist}:{}}}function t(a){let b=q(a);if(!b)return[];let c=[];return void 0!==b.promptBindings&&c.push({code:"prompt-binding-retired",path:"promptBindings",message:g.PW}),void 0!==b.templateIds&&c.push({code:"template-ids-retired",path:"templateIds",message:g.OE}),c}function u(a){return(0,f.T$)({v:f.t1,id:a.id,enabled:!1!==a.enabled,skill:{...a,enabled:!1!==a.enabled}})}function v(a,b){try{if("GET"===a.method){let{skills:a,invalid:c}=o();return b.status(200).json({skills:a,options:p(),invalid:c})}if("POST"===a.method){let c=r(a.body);if(!c)return b.status(400).json({error:"技能 id 必填(小写字母/数字/连字符,以字母开头)"});if(k(c))return b.status(400).json({error:`技能 id「${c}」是保留段(/api/skills/${c} 已被路由占用,建得出但改不了),请换一个 id`});if((0,d.LB)(c))return b.status(403).json({error:l(c,"create")});let e=t(a.body);if(e.length>0)return b.status(400).json({error:"技能含已退休字段,未落盘",errors:e,warnings:[]});let f=s(a.body,c),h=(0,g.Yb)(f);if(!h.ok)return b.status(400).json({error:"技能未通过校验,未落盘",errors:h.errors,warnings:h.warnings});let i=u(f);if(!i.ok)return b.status(i.errors.some(a=>"builtin-skill-not-persistable"===a.code||"overrides-not-applicable"===a.code)?403:400).json({error:"技能落盘被拒",errors:i.errors});return b.status(200).json({skill:n(f),skills:o().skills,warnings:h.warnings})}return m(b)}catch(a){return console.error("[api] skills",a),b.status(500).json({error:a instanceof Error?a.message:"Internal server error"})}}},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},90487:(a,b,c)=>{c.r(b),c.d(b,{config:()=>l,default:()=>k,handler:()=>n});var d=c(11400),e=c(50029),f=c(71086),g=c(38513),h=c(74974),i=c(68970),j=c(50296);let k=(0,g.M)(h,"default"),l=(0,g.M)(h,"config"),m=new f.PagesAPIRouteModule({definition:{kind:e.A.PAGES_API,page:"/api/skills",pathname:"/api/skills",bundlePath:"",filename:""},userland:h,distDir:".next",relativeProjectDir:""});async function n(a,b,c){let e=await m.prepare(a,b,{srcPage:"/api/skills"});if(!e){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:k}=e;try{let c=a.method||"GET",d=(0,i.getTracer)(),e=d.getActiveScopeSpan(),l=m.instrumentationOnRequestError.bind(m),n=async e=>m.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:m.isDev,page:"/api/skills",internalRevalidate:null==k?void 0:k.revalidate,onError:(...b)=>l(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==j.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await n(e):await d.withPropagatedContext(a.headers,()=>d.trace(j.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:i.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},n))}catch(a){if(m.isDev)throw a;(0,d.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,299,1001,2434,5547],()=>b(b.s=90487));module.exports=c})();
1
+ "use strict";(()=>{var a={};a.id=9349,a.ids=[9349],a.modules={15751:a=>{a.exports=require("xlsx")},16698:a=>{a.exports=require("node:async_hooks")},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},28183:a=>{a.exports=require("@napi-rs/canvas")},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},73024:a=>{a.exports=require("node:fs")},74974:(a,b,c)=>{c.r(b),c.d(b,{builtInDeniedMessage:()=>l,default:()=>v,isReservedSkillId:()=>k,listSkillCollection:()=>o,normalizeSkillForWrite:()=>s,persistSkill:()=>u,readBodyId:()=>r,respondMethodNotAllowed:()=>m,retiredFieldIssues:()=>t,skillEditorOptions:()=>p,withBuiltInFlag:()=>n});var d=c(32374),e=c(13424),f=c(45304),g=c(89759);let h=[{value:"processCard",label:"工艺卡",note:"按名称多选(引用存在性由服务端校验)"},{value:"processChain",label:"工序链",note:"单选,取值为工程类型(如 building/municipal)"},{value:"workflowRules",label:"工程规则资产",note:"单选,取自已登记资产清单"},{value:"standard",label:"规范标准",note:"规范号是自由文本(本仓无注册表可对,校验器不假装校验)"}],i=[{value:"detector",label:"内置检测器(确定性)",note:"进硬门禁;硬门禁归属由检测器注册表声明,技能不得覆写"},{value:"threshold",label:"参数化阈值(确定性)",note:"进硬门禁;阈值与方向由登记表单源"},{value:"llmChecklist",label:"LLM 检查清单(非确定性)",note:"只做提示与评分,不进硬门禁(\xa76.5 硬规则 2)"}],j=["validate"];function k(a){return j.includes(a)}function l(a,b){return`「${a}」是内置技能:F.3 规定内置技能不随用户落盘(随应用版本升级),\xa717.3 / 附录 E 明确 builtIn 禁改禁删,故禁止${"edit"===b?"编辑":"delete"===b?"删除":"用内置 id 新建"}。请换一个 id 新建用户技能。`}function m(a){a.status(405).json({error:"Method not allowed"})}function n(a){return{...a,builtIn:"builtin"===a.source,displayName:(0,e.zg)(a)}}function o(){let{skills:a,invalid:b}=(0,f.loadSkillStore)();return{skills:a.map(n),invalid:b}}function p(){return{contractVersion:e.SV,chapterDomains:e.ii.map(a=>({value:a,label:e.aq[a],note:e.tv[a]})),projectTypes:e.Av.map(a=>({value:a,label:e.zK[a]})),factSources:e.C3.map(a=>({value:a.id,label:a.label})),processCards:[...d.pw.values()].map(a=>({value:a.id,label:a.name})),workflowRules:e.sK.map(a=>({value:a,label:e.XC[a]})),thresholds:e.pI.map(a=>({value:a,label:e.n3[a].label,note:`${e.n3[a].unit} \xb7 方向 ${"min"===e.n3[a].direction?"越大越严(下限)":"越小越严(上限)"} \xb7 ${e.n3[a].source}`})),detectors:(0,g.zC)(),knowledgeKinds:[...h],acceptanceKinds:[...i],isolationRules:e.TF,absentCarriers:e.uZ}}function q(a){if(!("object"!=typeof a||null===a||Array.isArray(a)))return a}function r(a){let b=q(a),c=b?.id;return"string"==typeof c&&c.trim().length>0?c:void 0}function s(a,b){let c=q(a)??{};return{id:b,version:"number"==typeof c.version?c.version:e.SV,source:"user",enabled:!1!==c.enabled,match:c.match,requires:c.requires,structure:c.structure,forbidden:c.forbidden,knowledge:c.knowledge,acceptance:c.acceptance,...void 0!==c.examples?{examples:c.examples}:{},...void 0!==c.outputTitle?{outputTitle:c.outputTitle}:{},...void 0!==c.chapterChecklist?{chapterChecklist:c.chapterChecklist}:{}}}function t(a){let b=q(a);if(!b)return[];let c=[];return void 0!==b.promptBindings&&c.push({code:"prompt-binding-retired",path:"promptBindings",message:g.PW}),void 0!==b.templateIds&&c.push({code:"template-ids-retired",path:"templateIds",message:g.OE}),c}function u(a){return(0,f.writeStoredSkillRecord)({v:f.SKILL_STORE_VERSION,id:a.id,enabled:!1!==a.enabled,skill:{...a,enabled:!1!==a.enabled}})}function v(a,b){try{if("GET"===a.method){let{skills:a,invalid:c}=o();return b.status(200).json({skills:a,options:p(),invalid:c})}if("POST"===a.method){let c=r(a.body);if(!c)return b.status(400).json({error:"技能 id 必填(小写字母/数字/连字符,以字母开头)"});if(k(c))return b.status(400).json({error:`技能 id「${c}」是保留段(/api/skills/${c} 已被路由占用,建得出但改不了),请换一个 id`});if((0,d.LB)(c))return b.status(403).json({error:l(c,"create")});let e=t(a.body);if(e.length>0)return b.status(400).json({error:"技能含已退休字段,未落盘",errors:e,warnings:[]});let f=s(a.body,c),h=(0,g.Yb)(f);if(!h.ok)return b.status(400).json({error:"技能未通过校验,未落盘",errors:h.errors,warnings:h.warnings});let i=u(f);if(!i.ok)return b.status(i.errors.some(a=>"builtin-skill-not-persistable"===a.code||"overrides-not-applicable"===a.code)?403:400).json({error:"技能落盘被拒",errors:i.errors});return b.status(200).json({skill:n(f),skills:o().skills,warnings:h.warnings})}return m(b)}catch(a){return console.error("[api] skills",a),b.status(500).json({error:a instanceof Error?a.message:"Internal server error"})}}},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},90487:(a,b,c)=>{c.r(b),c.d(b,{config:()=>l,default:()=>k,handler:()=>n});var d=c(11400),e=c(50029),f=c(71086),g=c(38513),h=c(74974),i=c(68970),j=c(50296);let k=(0,g.M)(h,"default"),l=(0,g.M)(h,"config"),m=new f.PagesAPIRouteModule({definition:{kind:e.A.PAGES_API,page:"/api/skills",pathname:"/api/skills",bundlePath:"",filename:""},userland:h,distDir:".next",relativeProjectDir:""});async function n(a,b,c){let e=await m.prepare(a,b,{srcPage:"/api/skills"});if(!e){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:k}=e;try{let c=a.method||"GET",d=(0,i.getTracer)(),e=d.getActiveScopeSpan(),l=m.instrumentationOnRequestError.bind(m),n=async e=>m.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:m.isDev,page:"/api/skills",internalRevalidate:null==k?void 0:k.revalidate,onError:(...b)=>l(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==j.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await n(e):await d.withPropagatedContext(a.headers,()=>d.trace(j.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:i.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},n))}catch(a){if(m.isDev)throw a;(0,d.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,299,1001,2434,5547],()=>b(b.s=90487));module.exports=c})();
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" data-next-head=""/><link rel="preload" href="/_next/static/css/0e46e39b61e4e262.css" as="style"/><link rel="stylesheet" href="/_next/static/css/0e46e39b61e4e262.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-6224d37324e372cb.js" defer=""></script><script src="/_next/static/chunks/framework-4b565b3ddc94cdac.js" defer=""></script><script src="/_next/static/chunks/main-0c91f573696223ca.js" defer=""></script><script src="/_next/static/chunks/pages/_app-74fce107cacfaee7.js" defer=""></script><script src="/_next/static/chunks/310-6c678cb70e4ba2d6.js" defer=""></script><script src="/_next/static/chunks/700-5d29b0475311f590.js" defer=""></script><script src="/_next/static/chunks/914-292edce0ba2a212d.js" defer=""></script><script src="/_next/static/chunks/174-1bc48f295d7dd075.js" defer=""></script><script src="/_next/static/chunks/569-2bfdde9e402af5b2.js" defer=""></script><script src="/_next/static/chunks/243-03eba51d5d737e98.js" defer=""></script><script src="/_next/static/chunks/506-93f730bc149d0dce.js" defer=""></script><script src="/_next/static/chunks/709-a7c652953ccd3b4b.js" defer=""></script><script src="/_next/static/chunks/530-1b18bb11570dc44a.js" defer=""></script><script src="/_next/static/chunks/pages/canvas/%5Bid%5D-9f4e9f49e512418b.js" defer=""></script><script src="/_next/static/Z8psgNSpy4sSg2lIho8Uw/_buildManifest.js" defer=""></script><script src="/_next/static/Z8psgNSpy4sSg2lIho8Uw/_ssgManifest.js" defer=""></script></head><body><div id="__next"><script>((e,i,s,u,m,a,l,h)=>{let d=document.documentElement,w=["light","dark"];function p(n){(Array.isArray(e)?e:[e]).forEach(y=>{let k=y==="class",S=k&&a?m.map(f=>a[f]||f):m;k?(d.classList.remove(...S),d.classList.add(a&&a[n]?a[n]:n)):d.setAttribute(y,n)}),R(n)}function R(n){h&&w.includes(n)&&(d.style.colorScheme=n)}function c(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(u)p(u);else try{let n=localStorage.getItem(i)||s,y=l&&n==="system"?c():n;p(y)}catch(n){}})("class","theme","system",null,["light","dark"],null,true,true)</script><div class="css-1pi45l5 ant-app css-var-_R_16_"><aside class="sidebar sidebarCollapsedSelf"><div class="sidebarLogoRow"><a class="min-w-0 flex-1" href="/overview"><div class="sidebarLogo"><div class="w-8 h-8 rounded-lg bg-black dark:bg-white flex items-center justify-center shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon text-white dark:text-black"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg></div><div class="sidebarLogoTitle"><span class="logoGradient">Customize Agent</span></div></div></a></div><nav class="sidebarNav mt-2"><a href="/overview"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-dashboard"><rect width="7" height="9" x="3" y="3" rx="1"></rect><rect width="7" height="5" x="14" y="3" rx="1"></rect><rect width="7" height="9" x="14" y="12" rx="1"></rect><rect width="7" height="5" x="3" y="16" rx="1"></rect></svg><span class="sidebarLabel">总览</span></div></a><a href="/knowledge"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-database"><ellipse cx="12" cy="5" rx="9" ry="3"></ellipse><path d="M3 5V19A9 3 0 0 0 21 19V5"></path><path d="M3 12A9 3 0 0 0 21 12"></path></svg><span class="sidebarLabel">知识库</span></div></a><a href="/models"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-cpu"><rect width="16" height="16" x="4" y="4" rx="2"></rect><rect width="6" height="6" x="9" y="9" rx="1"></rect><path d="M15 2v2"></path><path d="M15 20v2"></path><path d="M2 15h2"></path><path d="M2 9h2"></path><path d="M20 15h2"></path><path d="M20 9h2"></path><path d="M9 2v2"></path><path d="M9 20v2"></path></svg><span class="sidebarLabel">模型配置</span></div></a><a href="/prompt"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg><span class="sidebarLabel">提示词管理</span></div></a><a href="/skills"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg><span class="sidebarLabel">技能库</span></div></a><a href="/canvas"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-network"><rect x="16" y="16" width="6" height="6" rx="1"></rect><rect x="2" y="16" width="6" height="6" rx="1"></rect><rect x="9" y="2" width="6" height="6" rx="1"></rect><path d="M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3"></path><path d="M12 12V8"></path></svg><span class="sidebarLabel">生成画布</span></div></a><a href="/guide"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book-open"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"></path><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"></path></svg><span class="sidebarLabel">指引</span></div></a><a href="/settings"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg><span class="sidebarLabel">设置</span></div></a></nav></aside><div class="mainContent"><header class="topbar"><div class="flex-1"></div><span class="ant-badge css-1pi45l5 css-var-_R_16_"><button type="button" class="ant-btn css-1pi45l5 css-var-_R_16_ ant-btn-default ant-btn-color-default ant-btn-variant-outlined topbarBtn"><span class="ant-btn-icon"><span role="img" aria-label="clock-circle" class="anticon anticon-clock-circle"><svg viewBox="64 64 896 896" focusable="false" data-icon="clock-circle" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"></path><path d="M686.7 638.6L544.1 535.5V288c0-4.4-3.6-8-8-8H488c-4.4 0-8 3.6-8 8v275.4c0 2.6 1.2 5 3.3 6.5l165.4 120.6c3.6 2.6 8.6 1.8 11.2-1.7l28.6-39c2.6-3.7 1.8-8.7-1.8-11.2z"></path></svg></span></span><span>后台任务</span></button></span><button class="topbarBtn"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg><span>深色</span></button><button class="topbarBtn"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-languages"><path d="m5 8 6 6"></path><path d="m4 14 6-6 2-3"></path><path d="M2 5h12"></path><path d="M7 2h1"></path><path d="m22 22-5-10-5 10"></path><path d="M14 18h6"></path></svg><span>English</span></button></header><main class="mainInner mainInnerCanvas"><div class="appShellPlaceholder"><div class="ant-spin ant-spin-spinning ant-spin-section css-1pi45l5 css-var-_R_16_" style="margin:48px" aria-live="polite" aria-busy="true"><span class="ant-spin-dot-holder"><span class="ant-spin-dot ant-spin-dot-spin"><i class="ant-spin-dot-item"></i><i class="ant-spin-dot-item"></i><i class="ant-spin-dot-item"></i><i class="ant-spin-dot-item"></i></span></span></div></div></main></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/canvas/[id]","query":{},"buildId":"Z8psgNSpy4sSg2lIho8Uw","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" data-next-head=""/><link rel="preload" href="/_next/static/css/85c434f8fd3a17ae.css" as="style"/><link rel="stylesheet" href="/_next/static/css/85c434f8fd3a17ae.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-6224d37324e372cb.js" defer=""></script><script src="/_next/static/chunks/framework-4b565b3ddc94cdac.js" defer=""></script><script src="/_next/static/chunks/main-0c91f573696223ca.js" defer=""></script><script src="/_next/static/chunks/pages/_app-ebb535779b63fd5d.js" defer=""></script><script src="/_next/static/chunks/310-6c678cb70e4ba2d6.js" defer=""></script><script src="/_next/static/chunks/700-5d29b0475311f590.js" defer=""></script><script src="/_next/static/chunks/914-292edce0ba2a212d.js" defer=""></script><script src="/_next/static/chunks/174-1bc48f295d7dd075.js" defer=""></script><script src="/_next/static/chunks/569-2bfdde9e402af5b2.js" defer=""></script><script src="/_next/static/chunks/243-03eba51d5d737e98.js" defer=""></script><script src="/_next/static/chunks/506-93f730bc149d0dce.js" defer=""></script><script src="/_next/static/chunks/709-a7c652953ccd3b4b.js" defer=""></script><script src="/_next/static/chunks/530-6f3f5848c6f702ae.js" defer=""></script><script src="/_next/static/chunks/pages/canvas/%5Bid%5D-515edd3e72acaf82.js" defer=""></script><script src="/_next/static/4xQDkixSretJDM503EzIq/_buildManifest.js" defer=""></script><script src="/_next/static/4xQDkixSretJDM503EzIq/_ssgManifest.js" defer=""></script></head><body><div id="__next"><script>((e,i,s,u,m,a,l,h)=>{let d=document.documentElement,w=["light","dark"];function p(n){(Array.isArray(e)?e:[e]).forEach(y=>{let k=y==="class",S=k&&a?m.map(f=>a[f]||f):m;k?(d.classList.remove(...S),d.classList.add(a&&a[n]?a[n]:n)):d.setAttribute(y,n)}),R(n)}function R(n){h&&w.includes(n)&&(d.style.colorScheme=n)}function c(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(u)p(u);else try{let n=localStorage.getItem(i)||s,y=l&&n==="system"?c():n;p(y)}catch(n){}})("class","theme","system",null,["light","dark"],null,true,true)</script><div class="css-1pi45l5 ant-app css-var-_R_16_"><aside class="sidebar sidebarCollapsedSelf"><div class="sidebarLogoRow"><a class="min-w-0 flex-1" href="/overview"><div class="sidebarLogo"><div class="w-8 h-8 rounded-lg bg-black dark:bg-white flex items-center justify-center shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon text-white dark:text-black"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg></div><div class="sidebarLogoTitle"><span class="logoGradient">Customize Agent</span></div></div></a></div><nav class="sidebarNav mt-2"><a href="/overview"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-dashboard"><rect width="7" height="9" x="3" y="3" rx="1"></rect><rect width="7" height="5" x="14" y="3" rx="1"></rect><rect width="7" height="9" x="14" y="12" rx="1"></rect><rect width="7" height="5" x="3" y="16" rx="1"></rect></svg><span class="sidebarLabel">总览</span></div></a><a href="/knowledge"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-database"><ellipse cx="12" cy="5" rx="9" ry="3"></ellipse><path d="M3 5V19A9 3 0 0 0 21 19V5"></path><path d="M3 12A9 3 0 0 0 21 12"></path></svg><span class="sidebarLabel">知识库</span></div></a><a href="/models"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-cpu"><rect width="16" height="16" x="4" y="4" rx="2"></rect><rect width="6" height="6" x="9" y="9" rx="1"></rect><path d="M15 2v2"></path><path d="M15 20v2"></path><path d="M2 15h2"></path><path d="M2 9h2"></path><path d="M20 15h2"></path><path d="M20 9h2"></path><path d="M9 2v2"></path><path d="M9 20v2"></path></svg><span class="sidebarLabel">模型配置</span></div></a><a href="/prompt"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg><span class="sidebarLabel">提示词管理</span></div></a><a href="/skills"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg><span class="sidebarLabel">技能库</span></div></a><a href="/canvas"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-network"><rect x="16" y="16" width="6" height="6" rx="1"></rect><rect x="2" y="16" width="6" height="6" rx="1"></rect><rect x="9" y="2" width="6" height="6" rx="1"></rect><path d="M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3"></path><path d="M12 12V8"></path></svg><span class="sidebarLabel">生成画布</span></div></a><a href="/guide"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book-open"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"></path><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"></path></svg><span class="sidebarLabel">指引</span></div></a><a href="/settings"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg><span class="sidebarLabel">设置</span></div></a></nav></aside><div class="mainContent"><header class="topbar"><div class="flex-1"></div><span class="ant-badge css-1pi45l5 css-var-_R_16_"><button type="button" class="ant-btn css-1pi45l5 css-var-_R_16_ ant-btn-default ant-btn-color-default ant-btn-variant-outlined topbarBtn"><span class="ant-btn-icon"><span role="img" aria-label="clock-circle" class="anticon anticon-clock-circle"><svg viewBox="64 64 896 896" focusable="false" data-icon="clock-circle" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"></path><path d="M686.7 638.6L544.1 535.5V288c0-4.4-3.6-8-8-8H488c-4.4 0-8 3.6-8 8v275.4c0 2.6 1.2 5 3.3 6.5l165.4 120.6c3.6 2.6 8.6 1.8 11.2-1.7l28.6-39c2.6-3.7 1.8-8.7-1.8-11.2z"></path></svg></span></span><span>后台任务</span></button></span><button class="topbarBtn"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg><span>深色</span></button><button class="topbarBtn"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-languages"><path d="m5 8 6 6"></path><path d="m4 14 6-6 2-3"></path><path d="M2 5h12"></path><path d="M7 2h1"></path><path d="m22 22-5-10-5 10"></path><path d="M14 18h6"></path></svg><span>English</span></button></header><main class="mainInner mainInnerCanvas"><div class="appShellPlaceholder"><div class="ant-spin ant-spin-spinning ant-spin-section css-1pi45l5 css-var-_R_16_" style="margin:48px" aria-live="polite" aria-busy="true"><span class="ant-spin-dot-holder"><span class="ant-spin-dot ant-spin-dot-spin"><i class="ant-spin-dot-item"></i><i class="ant-spin-dot-item"></i><i class="ant-spin-dot-item"></i><i class="ant-spin-dot-item"></i></span></span></div></div></main></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/canvas/[id]","query":{},"buildId":"4xQDkixSretJDM503EzIq","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" data-next-head=""/><title data-next-head="">生成画布</title><link rel="preload" href="/_next/static/css/0e46e39b61e4e262.css" as="style"/><link rel="stylesheet" href="/_next/static/css/0e46e39b61e4e262.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-6224d37324e372cb.js" defer=""></script><script src="/_next/static/chunks/framework-4b565b3ddc94cdac.js" defer=""></script><script src="/_next/static/chunks/main-0c91f573696223ca.js" defer=""></script><script src="/_next/static/chunks/pages/_app-74fce107cacfaee7.js" defer=""></script><script src="/_next/static/chunks/310-6c678cb70e4ba2d6.js" defer=""></script><script src="/_next/static/chunks/700-5d29b0475311f590.js" defer=""></script><script src="/_next/static/chunks/174-1bc48f295d7dd075.js" defer=""></script><script src="/_next/static/chunks/243-03eba51d5d737e98.js" defer=""></script><script src="/_next/static/chunks/530-1b18bb11570dc44a.js" defer=""></script><script src="/_next/static/chunks/pages/canvas-323d44fe56d685a7.js" defer=""></script><script src="/_next/static/Z8psgNSpy4sSg2lIho8Uw/_buildManifest.js" defer=""></script><script src="/_next/static/Z8psgNSpy4sSg2lIho8Uw/_ssgManifest.js" defer=""></script></head><body><div id="__next"><script>((e,i,s,u,m,a,l,h)=>{let d=document.documentElement,w=["light","dark"];function p(n){(Array.isArray(e)?e:[e]).forEach(y=>{let k=y==="class",S=k&&a?m.map(f=>a[f]||f):m;k?(d.classList.remove(...S),d.classList.add(a&&a[n]?a[n]:n)):d.setAttribute(y,n)}),R(n)}function R(n){h&&w.includes(n)&&(d.style.colorScheme=n)}function c(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(u)p(u);else try{let n=localStorage.getItem(i)||s,y=l&&n==="system"?c():n;p(y)}catch(n){}})("class","theme","system",null,["light","dark"],null,true,true)</script><div class="css-1pi45l5 ant-app css-var-_R_16_"><aside class="sidebar sidebarCollapsedSelf"><div class="sidebarLogoRow"><a class="min-w-0 flex-1" href="/overview"><div class="sidebarLogo"><div class="w-8 h-8 rounded-lg bg-black dark:bg-white flex items-center justify-center shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon text-white dark:text-black"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg></div><div class="sidebarLogoTitle"><span class="logoGradient">Customize Agent</span></div></div></a></div><nav class="sidebarNav mt-2"><a href="/overview"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-dashboard"><rect width="7" height="9" x="3" y="3" rx="1"></rect><rect width="7" height="5" x="14" y="3" rx="1"></rect><rect width="7" height="9" x="14" y="12" rx="1"></rect><rect width="7" height="5" x="3" y="16" rx="1"></rect></svg><span class="sidebarLabel">总览</span></div></a><a href="/knowledge"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-database"><ellipse cx="12" cy="5" rx="9" ry="3"></ellipse><path d="M3 5V19A9 3 0 0 0 21 19V5"></path><path d="M3 12A9 3 0 0 0 21 12"></path></svg><span class="sidebarLabel">知识库</span></div></a><a href="/models"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-cpu"><rect width="16" height="16" x="4" y="4" rx="2"></rect><rect width="6" height="6" x="9" y="9" rx="1"></rect><path d="M15 2v2"></path><path d="M15 20v2"></path><path d="M2 15h2"></path><path d="M2 9h2"></path><path d="M20 15h2"></path><path d="M20 9h2"></path><path d="M9 2v2"></path><path d="M9 20v2"></path></svg><span class="sidebarLabel">模型配置</span></div></a><a href="/prompt"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg><span class="sidebarLabel">提示词管理</span></div></a><a href="/skills"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg><span class="sidebarLabel">技能库</span></div></a><a href="/canvas"><div class="sidebarItem sidebarItemActive"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-network"><rect x="16" y="16" width="6" height="6" rx="1"></rect><rect x="2" y="16" width="6" height="6" rx="1"></rect><rect x="9" y="2" width="6" height="6" rx="1"></rect><path d="M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3"></path><path d="M12 12V8"></path></svg><span class="sidebarLabel">生成画布</span></div></a><a href="/guide"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book-open"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"></path><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"></path></svg><span class="sidebarLabel">指引</span></div></a><a href="/settings"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg><span class="sidebarLabel">设置</span></div></a></nav></aside><div class="mainContent"><header class="topbar"><div class="flex-1"></div><span class="ant-badge css-1pi45l5 css-var-_R_16_"><button type="button" class="ant-btn css-1pi45l5 css-var-_R_16_ ant-btn-default ant-btn-color-default ant-btn-variant-outlined topbarBtn"><span class="ant-btn-icon"><span role="img" aria-label="clock-circle" class="anticon anticon-clock-circle"><svg viewBox="64 64 896 896" focusable="false" data-icon="clock-circle" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"></path><path d="M686.7 638.6L544.1 535.5V288c0-4.4-3.6-8-8-8H488c-4.4 0-8 3.6-8 8v275.4c0 2.6 1.2 5 3.3 6.5l165.4 120.6c3.6 2.6 8.6 1.8 11.2-1.7l28.6-39c2.6-3.7 1.8-8.7-1.8-11.2z"></path></svg></span></span><span>后台任务</span></button></span><button class="topbarBtn"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg><span>深色</span></button><button class="topbarBtn"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-languages"><path d="m5 8 6 6"></path><path d="m4 14 6-6 2-3"></path><path d="M2 5h12"></path><path d="M7 2h1"></path><path d="m22 22-5-10-5 10"></path><path d="M14 18h6"></path></svg><span>English</span></button></header><main class="mainInner mainInnerCanvas"><div class="canvasRoot"><div class="canvasStage" style="background-image:radial-gradient(var(--canvasGridDot) 1px, transparent 1px);background-size:24px 24px;background-position:0px 0px;cursor:grab"><div style="position:absolute;inset:0;display:grid;place-items:center;pointer-events:none"><div style="text-align:center;max-width:420px"><div style="font-size:15px;margin-bottom:6px">新画布</div><div style="font-size:12px;color:var(--colorTextSecondary);line-height:1.7">还没有节点日志——节点日志是唯一真相源,这里不造占位节点。<br/>用下方的「+」选择提示词与项目,写下要求后点「生成」,节点会随日志追加而出现。</div></div></div></div><div class="canvasRecordsBall" style="position:absolute;z-index:3;right:24px;bottom:96px"><div class="canvasRecordsBallBtn" role="button" tabindex="0" aria-label="生成记录(0)" style="width:44px;height:44px"><span role="img" aria-label="history" class="anticon anticon-history"><svg viewBox="64 64 896 896" focusable="false" data-icon="history" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M536.1 273H488c-4.4 0-8 3.6-8 8v275.3c0 2.6 1.2 5 3.3 6.5l165.3 120.7c3.6 2.6 8.6 1.9 11.2-1.7l28.6-39c2.7-3.7 1.9-8.7-1.7-11.2L544.1 528.5V281c0-4.4-3.6-8-8-8zm219.8 75.2l156.8 38.3c5 1.2 9.9-2.6 9.9-7.7l.8-161.5c0-6.7-7.7-10.5-12.9-6.3L752.9 334.1a8 8 0 003 14.1zm167.7 301.1l-56.7-19.5a8 8 0 00-10.1 4.8c-1.9 5.1-3.9 10.1-6 15.1-17.8 42.1-43.3 80-75.9 112.5a353 353 0 01-112.5 75.9 352.18 352.18 0 01-137.7 27.8c-47.8 0-94.1-9.3-137.7-27.8a353 353 0 01-112.5-75.9c-32.5-32.5-58-70.4-75.9-112.5A353.44 353.44 0 01171 512c0-47.8 9.3-94.2 27.8-137.8 17.8-42.1 43.3-80 75.9-112.5a353 353 0 01112.5-75.9C430.6 167.3 477 158 524.8 158s94.1 9.3 137.7 27.8A353 353 0 01775 261.7c10.2 10.3 19.8 21 28.6 32.3l59.8-46.8C784.7 146.6 662.2 81.9 524.6 82 285 82.1 92.6 276.7 95 516.4 97.4 751.9 288.9 942 524.8 942c185.5 0 343.5-117.6 403.7-282.3 1.5-4.2-.7-8.9-4.9-10.4z"></path></svg></span><span class="canvasRecordsBallBadge isZero">0</span></div></div><div class="canvasInputBar"><div class="ant-space css-1pi45l5 ant-space-horizontal ant-space-align-center css-var-_R_16_" style="flex-wrap:wrap;column-gap:6px;row-gap:6px;margin-bottom:6px"><div class="ant-space-item"><span class="ant-typography ant-typography-secondary css-1pi45l5 css-var-_R_16_" style="font-size:12px">点选一个节点后可 @ 提及它</span></div></div><div class="ant-space css-1pi45l5 ant-space-horizontal ant-space-align-center css-var-_R_16_" style="flex-wrap:wrap;column-gap:10px;row-gap:10px;margin-bottom:8px"><div class="ant-space-item"><button type="button" class="ant-btn css-1pi45l5 css-var-_R_16_ ant-btn-primary ant-btn-color-primary ant-btn-variant-solid ant-btn-sm"><span class="ant-btn-icon"><span role="img" aria-label="plus" class="anticon anticon-plus"><svg viewBox="64 64 896 896" focusable="false" data-icon="plus" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8z"></path><path d="M192 474h672q8 0 8 8v60q0 8-8 8H160q-8 0-8-8v-60q0-8 8-8z"></path></svg></span></span><span>提示词 / 项目</span></button></div></div><div class="ant-space-compact css-1pi45l5" style="width:100%"><textarea placeholder="描述你的需求;可用上面的 @ 提及把节点带进正文(Enter 发送,Shift+Enter 换行)" class="ant-input css-1pi45l5 ant-input-outlined css-var-_R_16_ ant-input-css-var ant-input-compact-item ant-input-compact-first-item"></textarea><button type="button" class="ant-btn css-1pi45l5 css-var-_R_16_ ant-btn-primary ant-btn-color-primary ant-btn-variant-solid ant-btn-compact-item ant-btn-compact-last-item" disabled=""><span class="ant-btn-icon"><span role="img" aria-label="send" class="anticon anticon-send"><svg viewBox="64 64 896 896" focusable="false" data-icon="send" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M931.4 498.9L94.9 79.5c-3.4-1.7-7.3-2.1-11-1.2a15.99 15.99 0 00-11.7 19.3l86.2 352.2c1.3 5.3 5.2 9.6 10.4 11.3l147.7 50.7-147.6 50.7c-5.2 1.8-9.1 6-10.3 11.3L72.2 926.5c-.9 3.7-.5 7.6 1.2 10.9 3.9 7.9 13.5 11.1 21.5 7.2l836.5-417c3.1-1.5 5.6-4.1 7.2-7.1 3.9-8 .7-17.6-7.2-21.6zM170.8 826.3l50.3-205.6 295.2-101.3c2.3-.8 4.2-2.6 5-5 1.4-4.2-.8-8.7-5-10.2L221.1 403 171 198.2l628 314.9-628.2 313.2z"></path></svg></span></span><span>生成</span></button></div></div></div></main></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/canvas","query":{},"buildId":"Z8psgNSpy4sSg2lIho8Uw","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" data-next-head=""/><title data-next-head="">生成画布</title><link rel="preload" href="/_next/static/css/85c434f8fd3a17ae.css" as="style"/><link rel="stylesheet" href="/_next/static/css/85c434f8fd3a17ae.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-6224d37324e372cb.js" defer=""></script><script src="/_next/static/chunks/framework-4b565b3ddc94cdac.js" defer=""></script><script src="/_next/static/chunks/main-0c91f573696223ca.js" defer=""></script><script src="/_next/static/chunks/pages/_app-ebb535779b63fd5d.js" defer=""></script><script src="/_next/static/chunks/310-6c678cb70e4ba2d6.js" defer=""></script><script src="/_next/static/chunks/700-5d29b0475311f590.js" defer=""></script><script src="/_next/static/chunks/174-1bc48f295d7dd075.js" defer=""></script><script src="/_next/static/chunks/243-03eba51d5d737e98.js" defer=""></script><script src="/_next/static/chunks/530-6f3f5848c6f702ae.js" defer=""></script><script src="/_next/static/chunks/pages/canvas-323d44fe56d685a7.js" defer=""></script><script src="/_next/static/4xQDkixSretJDM503EzIq/_buildManifest.js" defer=""></script><script src="/_next/static/4xQDkixSretJDM503EzIq/_ssgManifest.js" defer=""></script></head><body><div id="__next"><script>((e,i,s,u,m,a,l,h)=>{let d=document.documentElement,w=["light","dark"];function p(n){(Array.isArray(e)?e:[e]).forEach(y=>{let k=y==="class",S=k&&a?m.map(f=>a[f]||f):m;k?(d.classList.remove(...S),d.classList.add(a&&a[n]?a[n]:n)):d.setAttribute(y,n)}),R(n)}function R(n){h&&w.includes(n)&&(d.style.colorScheme=n)}function c(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(u)p(u);else try{let n=localStorage.getItem(i)||s,y=l&&n==="system"?c():n;p(y)}catch(n){}})("class","theme","system",null,["light","dark"],null,true,true)</script><div class="css-1pi45l5 ant-app css-var-_R_16_"><aside class="sidebar sidebarCollapsedSelf"><div class="sidebarLogoRow"><a class="min-w-0 flex-1" href="/overview"><div class="sidebarLogo"><div class="w-8 h-8 rounded-lg bg-black dark:bg-white flex items-center justify-center shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon text-white dark:text-black"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg></div><div class="sidebarLogoTitle"><span class="logoGradient">Customize Agent</span></div></div></a></div><nav class="sidebarNav mt-2"><a href="/overview"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-dashboard"><rect width="7" height="9" x="3" y="3" rx="1"></rect><rect width="7" height="5" x="14" y="3" rx="1"></rect><rect width="7" height="9" x="14" y="12" rx="1"></rect><rect width="7" height="5" x="3" y="16" rx="1"></rect></svg><span class="sidebarLabel">总览</span></div></a><a href="/knowledge"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-database"><ellipse cx="12" cy="5" rx="9" ry="3"></ellipse><path d="M3 5V19A9 3 0 0 0 21 19V5"></path><path d="M3 12A9 3 0 0 0 21 12"></path></svg><span class="sidebarLabel">知识库</span></div></a><a href="/models"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-cpu"><rect width="16" height="16" x="4" y="4" rx="2"></rect><rect width="6" height="6" x="9" y="9" rx="1"></rect><path d="M15 2v2"></path><path d="M15 20v2"></path><path d="M2 15h2"></path><path d="M2 9h2"></path><path d="M20 15h2"></path><path d="M20 9h2"></path><path d="M9 2v2"></path><path d="M9 20v2"></path></svg><span class="sidebarLabel">模型配置</span></div></a><a href="/prompt"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg><span class="sidebarLabel">提示词管理</span></div></a><a href="/skills"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg><span class="sidebarLabel">技能库</span></div></a><a href="/canvas"><div class="sidebarItem sidebarItemActive"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-network"><rect x="16" y="16" width="6" height="6" rx="1"></rect><rect x="2" y="16" width="6" height="6" rx="1"></rect><rect x="9" y="2" width="6" height="6" rx="1"></rect><path d="M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3"></path><path d="M12 12V8"></path></svg><span class="sidebarLabel">生成画布</span></div></a><a href="/guide"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book-open"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"></path><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"></path></svg><span class="sidebarLabel">指引</span></div></a><a href="/settings"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg><span class="sidebarLabel">设置</span></div></a></nav></aside><div class="mainContent"><header class="topbar"><div class="flex-1"></div><span class="ant-badge css-1pi45l5 css-var-_R_16_"><button type="button" class="ant-btn css-1pi45l5 css-var-_R_16_ ant-btn-default ant-btn-color-default ant-btn-variant-outlined topbarBtn"><span class="ant-btn-icon"><span role="img" aria-label="clock-circle" class="anticon anticon-clock-circle"><svg viewBox="64 64 896 896" focusable="false" data-icon="clock-circle" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"></path><path d="M686.7 638.6L544.1 535.5V288c0-4.4-3.6-8-8-8H488c-4.4 0-8 3.6-8 8v275.4c0 2.6 1.2 5 3.3 6.5l165.4 120.6c3.6 2.6 8.6 1.8 11.2-1.7l28.6-39c2.6-3.7 1.8-8.7-1.8-11.2z"></path></svg></span></span><span>后台任务</span></button></span><button class="topbarBtn"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg><span>深色</span></button><button class="topbarBtn"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-languages"><path d="m5 8 6 6"></path><path d="m4 14 6-6 2-3"></path><path d="M2 5h12"></path><path d="M7 2h1"></path><path d="m22 22-5-10-5 10"></path><path d="M14 18h6"></path></svg><span>English</span></button></header><main class="mainInner mainInnerCanvas"><div class="canvasRoot"><div class="canvasStage" style="background-image:radial-gradient(var(--canvasGridDot) 1px, transparent 1px);background-size:24px 24px;background-position:0px 0px;cursor:grab"><div style="position:absolute;inset:0;display:grid;place-items:center;pointer-events:none"><div style="text-align:center;max-width:420px"><div style="font-size:15px;margin-bottom:6px">新画布</div><div style="font-size:12px;color:var(--colorTextSecondary);line-height:1.7">还没有节点日志——节点日志是唯一真相源,这里不造占位节点。<br/>用下方的「+」选择提示词与项目,写下要求后点「生成」,节点会随日志追加而出现。</div></div></div></div><div class="canvasRecordsBall" style="position:absolute;z-index:3;right:24px;bottom:96px"><div class="canvasRecordsBallBtn" role="button" tabindex="0" aria-label="生成记录(0)" style="width:44px;height:44px"><span role="img" aria-label="history" class="anticon anticon-history"><svg viewBox="64 64 896 896" focusable="false" data-icon="history" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M536.1 273H488c-4.4 0-8 3.6-8 8v275.3c0 2.6 1.2 5 3.3 6.5l165.3 120.7c3.6 2.6 8.6 1.9 11.2-1.7l28.6-39c2.7-3.7 1.9-8.7-1.7-11.2L544.1 528.5V281c0-4.4-3.6-8-8-8zm219.8 75.2l156.8 38.3c5 1.2 9.9-2.6 9.9-7.7l.8-161.5c0-6.7-7.7-10.5-12.9-6.3L752.9 334.1a8 8 0 003 14.1zm167.7 301.1l-56.7-19.5a8 8 0 00-10.1 4.8c-1.9 5.1-3.9 10.1-6 15.1-17.8 42.1-43.3 80-75.9 112.5a353 353 0 01-112.5 75.9 352.18 352.18 0 01-137.7 27.8c-47.8 0-94.1-9.3-137.7-27.8a353 353 0 01-112.5-75.9c-32.5-32.5-58-70.4-75.9-112.5A353.44 353.44 0 01171 512c0-47.8 9.3-94.2 27.8-137.8 17.8-42.1 43.3-80 75.9-112.5a353 353 0 01112.5-75.9C430.6 167.3 477 158 524.8 158s94.1 9.3 137.7 27.8A353 353 0 01775 261.7c10.2 10.3 19.8 21 28.6 32.3l59.8-46.8C784.7 146.6 662.2 81.9 524.6 82 285 82.1 92.6 276.7 95 516.4 97.4 751.9 288.9 942 524.8 942c185.5 0 343.5-117.6 403.7-282.3 1.5-4.2-.7-8.9-4.9-10.4z"></path></svg></span><span class="canvasRecordsBallBadge isZero">0</span></div></div><div class="canvasInputBar"><div class="ant-space css-1pi45l5 ant-space-horizontal ant-space-align-center css-var-_R_16_" style="flex-wrap:wrap;column-gap:6px;row-gap:6px;margin-bottom:6px"><div class="ant-space-item"><span class="ant-typography ant-typography-secondary css-1pi45l5 css-var-_R_16_" style="font-size:12px">点选一个节点后可 @ 提及它</span></div></div><div class="ant-space css-1pi45l5 ant-space-horizontal ant-space-align-center css-var-_R_16_" style="flex-wrap:wrap;column-gap:10px;row-gap:10px;margin-bottom:8px"><div class="ant-space-item"><button type="button" class="ant-btn css-1pi45l5 css-var-_R_16_ ant-btn-primary ant-btn-color-primary ant-btn-variant-solid ant-btn-sm"><span class="ant-btn-icon"><span role="img" aria-label="plus" class="anticon anticon-plus"><svg viewBox="64 64 896 896" focusable="false" data-icon="plus" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8z"></path><path d="M192 474h672q8 0 8 8v60q0 8-8 8H160q-8 0-8-8v-60q0-8 8-8z"></path></svg></span></span><span>提示词 / 项目</span></button></div></div><div class="ant-space-compact css-1pi45l5" style="width:100%"><textarea placeholder="描述你的需求;可用上面的 @ 提及把节点带进正文(Enter 发送,Shift+Enter 换行)" class="ant-input css-1pi45l5 ant-input-outlined css-var-_R_16_ ant-input-css-var ant-input-compact-item ant-input-compact-first-item"></textarea><button type="button" class="ant-btn css-1pi45l5 css-var-_R_16_ ant-btn-primary ant-btn-color-primary ant-btn-variant-solid ant-btn-compact-item ant-btn-compact-last-item" disabled=""><span class="ant-btn-icon"><span role="img" aria-label="send" class="anticon anticon-send"><svg viewBox="64 64 896 896" focusable="false" data-icon="send" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M931.4 498.9L94.9 79.5c-3.4-1.7-7.3-2.1-11-1.2a15.99 15.99 0 00-11.7 19.3l86.2 352.2c1.3 5.3 5.2 9.6 10.4 11.3l147.7 50.7-147.6 50.7c-5.2 1.8-9.1 6-10.3 11.3L72.2 926.5c-.9 3.7-.5 7.6 1.2 10.9 3.9 7.9 13.5 11.1 21.5 7.2l836.5-417c3.1-1.5 5.6-4.1 7.2-7.1 3.9-8 .7-17.6-7.2-21.6zM170.8 826.3l50.3-205.6 295.2-101.3c2.3-.8 4.2-2.6 5-5 1.4-4.2-.8-8.7-5-10.2L221.1 403 171 198.2l628 314.9-628.2 313.2z"></path></svg></span></span><span>生成</span></button></div></div></div></main></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/canvas","query":{},"buildId":"4xQDkixSretJDM503EzIq","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>