@customize-agent/server 4.0.31 → 4.0.33

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 (94) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +34 -46
  3. package/.next/package.json +1 -0
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/routes-manifest.json +0 -6
  6. package/.next/server/chunks/1928.js +1 -1
  7. package/.next/server/chunks/1936.js +1 -1
  8. package/.next/server/chunks/3298.js +101 -0
  9. package/.next/server/chunks/8204.js +1 -1
  10. package/.next/server/middleware-build-manifest.js +1 -1
  11. package/.next/server/pages/404.html +1 -1
  12. package/.next/server/pages/500.html +1 -1
  13. package/.next/server/pages/api/assets/generated/preview.js +1 -1
  14. package/.next/server/pages/api/assets/generated/preview.js.nft.json +1 -1
  15. package/.next/server/pages/api/assets/generated.js +1 -1
  16. package/.next/server/pages/api/assets/generated.js.nft.json +1 -1
  17. package/.next/server/pages/api/documents/chapter/regenerate.js +1 -1
  18. package/.next/server/pages/api/documents/chapter/regenerate.js.nft.json +1 -1
  19. package/.next/server/pages/api/documents/export.js +1 -1
  20. package/.next/server/pages/api/documents/export.js.nft.json +1 -1
  21. package/.next/server/pages/api/documents/generate.js +2 -2
  22. package/.next/server/pages/api/documents/generate.js.nft.json +1 -1
  23. package/.next/server/pages/api/documents/generated/[id].js +1 -1
  24. package/.next/server/pages/api/documents/generated/[id].js.nft.json +1 -1
  25. package/.next/server/pages/api/documents/generated.js +1 -1
  26. package/.next/server/pages/api/documents/generated.js.nft.json +1 -1
  27. package/.next/server/pages/api/documents/roles.js +1 -1
  28. package/.next/server/pages/api/documents/templates.js +1 -1
  29. package/.next/server/pages/api/documents/templates.js.nft.json +1 -1
  30. package/.next/server/pages/api/kb/files.js +1 -1
  31. package/.next/server/pages/api/prompt.js +1 -1
  32. package/.next/server/pages/asset-library.html +1 -1
  33. package/.next/server/pages/context/long-term.html +1 -1
  34. package/.next/server/pages/context/short-term.html +1 -1
  35. package/.next/server/pages/document-roles.html +1 -1
  36. package/.next/server/pages/documents.html +1 -1
  37. package/.next/server/pages/guide.html +1 -1
  38. package/.next/server/pages/index.html +1 -1
  39. package/.next/server/pages/knowledge/file-detail.html +1 -1
  40. package/.next/server/pages/knowledge/files.html +1 -1
  41. package/.next/server/pages/knowledge/manage.html +1 -1
  42. package/.next/server/pages/knowledge/search.html +1 -1
  43. package/.next/server/pages/knowledge.html +1 -1
  44. package/.next/server/pages/models.html +1 -1
  45. package/.next/server/pages/overview.html +1 -1
  46. package/.next/server/pages/prompt.html +1 -1
  47. package/.next/server/pages/settings.html +1 -1
  48. package/.next/server/pages/system/logs.html +1 -1
  49. package/.next/server/pages-manifest.json +22 -24
  50. package/.next/static/chunks/289-30e7c55f49a896b7.js +38 -0
  51. package/.next/static/chunks/455-97ad88d6604f54b7.js +6 -0
  52. package/.next/static/chunks/496-4fb9a063790e65ff.js +1 -0
  53. package/.next/static/chunks/53-d534407b1397d66a.js +1 -0
  54. package/.next/static/chunks/647-d5e08fda405f7059.js +1 -0
  55. package/.next/static/chunks/694-2d545cfbb9779f2c.js +1 -0
  56. package/.next/static/chunks/795-d8fb7a0420512701.js +1 -0
  57. package/.next/static/chunks/861-91cbdd34b8e23151.js +1 -0
  58. package/.next/static/chunks/pages/{_app-8abe93a007ab30a7.js → _app-2df1181f6609ae11.js} +2 -2
  59. package/.next/static/chunks/pages/context/{long-term-2e6a30a8f879df47.js → long-term-6b9a9683a4d6ea86.js} +1 -1
  60. package/.next/static/chunks/pages/context/{short-term-730211234fa3add6.js → short-term-6078efae6e3a905c.js} +1 -1
  61. package/.next/static/chunks/pages/document-roles-cb222be93cfd561d.js +1 -0
  62. package/.next/static/chunks/pages/documents-fc1a4fdb681f49a2.js +1 -0
  63. package/.next/static/chunks/pages/guide-7d15d3d3ddb0205e.js +1 -0
  64. package/.next/static/chunks/pages/{index-591c5acdff8d0690.js → index-a2a24e9602e7ea52.js} +1 -1
  65. package/.next/static/chunks/pages/knowledge/{file-detail-0a5e267f77f4e8b3.js → file-detail-97c77dfaf472a4b6.js} +1 -1
  66. package/.next/static/chunks/pages/knowledge/files-75a33100a1b3b5b5.js +1 -0
  67. package/.next/static/chunks/pages/models-d5e80645dc4a61b1.js +1 -0
  68. package/.next/static/chunks/pages/{overview-8d8ba5a1c0aa39ea.js → overview-1260176045ed5f7a.js} +1 -1
  69. package/.next/static/chunks/pages/prompt-9b869fbe3463020d.js +1 -0
  70. package/.next/static/chunks/pages/system/{logs-f4e222140dc7b30c.js → logs-3826fa44a76b12fc.js} +1 -1
  71. package/.next/static/trRaWc1ebFq78iuTpvU9H/_buildManifest.js +1 -0
  72. package/package.json +13 -13
  73. package/.next/server/chunks/3445.js +0 -76
  74. package/.next/server/pages/api/documents/specs.js +0 -1
  75. package/.next/server/pages/api/documents/specs.js.nft.json +0 -1
  76. package/.next/server/pages/document-specs.html +0 -1
  77. package/.next/server/pages/document-specs.js.nft.json +0 -1
  78. package/.next/static/0HB7cANSrxY1wLaf736r0/_buildManifest.js +0 -1
  79. package/.next/static/chunks/130-c1e5c14958fcba2b.js +0 -1
  80. package/.next/static/chunks/131-e2f0164f12b82496.js +0 -1
  81. package/.next/static/chunks/265-32ec272a49cfacef.js +0 -1
  82. package/.next/static/chunks/289-6bf8af72114aefd5.js +0 -38
  83. package/.next/static/chunks/455-e04e99d9e242de44.js +0 -6
  84. package/.next/static/chunks/512-12bd409cebeca05b.js +0 -1
  85. package/.next/static/chunks/698-5f16390243596219.js +0 -1
  86. package/.next/static/chunks/795-67a87e03d67ed908.js +0 -1
  87. package/.next/static/chunks/pages/document-roles-4293f5fae599ff83.js +0 -1
  88. package/.next/static/chunks/pages/document-specs-0fa19a0e348efc80.js +0 -1
  89. package/.next/static/chunks/pages/documents-3b87f1bf389b2f18.js +0 -1
  90. package/.next/static/chunks/pages/guide-74f0f7f42bc211b0.js +0 -1
  91. package/.next/static/chunks/pages/knowledge/files-4b0132dd66e57085.js +0 -1
  92. package/.next/static/chunks/pages/models-b5f68c4c70257495.js +0 -1
  93. package/.next/static/chunks/pages/prompt-3468fb841f4c5c8c.js +0 -1
  94. /package/.next/static/{0HB7cANSrxY1wLaf736r0 → trRaWc1ebFq78iuTpvU9H}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[46],{22708:(e,l,s)=>{"use strict";s.r(l),s.d(l,{default:()=>U});var o=s(65321),a=s(97109),r=s(79059),i=s(17807),t=s(88762),n=s(68787),c=s(85114),d=s(2256),m=s(38770),h=s(33442),p=s(26171),x=s(11702),y=s(85493),v=s(57271),u=s(7576),j=s(48318),g=s(34052),A=s(63455),f=s(56985),b=s(54746),S=s(29071),w=s(59188),z=s(4216),k=s(13114),C=s(99650),B=s(58209),I=s(76981),T=s(61825),K=s(6578);let P=[{label:"OpenAI 兼容",value:"openai"},{label:"Anthropic",value:"anthropic"},{label:"Google",value:"google"},{label:"Ollama",value:"ollama"},{label:"OpenRouter",value:"openrouter"}],E=[{key:"reader",labelKey:"models.tierReader",descKey:"models.tierReaderDesc"},{key:"reasoning",labelKey:"models.tierReasoning",descKey:"models.tierReasoningDesc"},{key:"action",labelKey:"models.tierAction",descKey:"models.tierActionDesc"}],N=[{key:"imageGeneration",label:"图片生成"},{key:"imageUnderstanding",label:"图片理解"},{key:"fileUnderstanding",label:"文件理解"},{key:"audio",label:"音频能力"},{key:"video",label:"视频能力"}];function U(){let e=(0,r.Vr)(),{message:l}=i.A.useApp(),[s,U]=(0,a.useState)(!0),[_,O]=(0,a.useState)([]),[R,F]=(0,a.useState)(null),[H,D]=(0,a.useState)({provider:"transformers-local",model:"BAAI/bge-small-zh-v1.5",dimensions:512}),[W,M]=(0,a.useState)(!1),[G,L]=(0,a.useState)(!1),[X,Z]=(0,a.useState)(null),[V,q]=(0,a.useState)(null),[J,Q]=(0,a.useState)({}),[Y,$]=(0,a.useState)(!1),[ee,el]=(0,a.useState)(!1),[es,eo]=(0,a.useState)(""),[ea,er]=(0,a.useState)(""),[ei,et]=(0,a.useState)(""),[en,ec]=(0,a.useState)(""),[ed,em]=(0,a.useState)("openai"),[eh,ep]=(0,a.useState)(!1),[ex,ey]=(0,a.useState)({}),[ev,eu]=(0,a.useState)(!1),ej=async()=>{U(!0);try{let[e,l,s]=await Promise.all([(0,K.Z3)().catch(()=>[]),(0,K.zr)().catch(()=>null),(0,K.II)().catch(()=>({provider:"transformers-local",model:"BAAI/bge-small-zh-v1.5",dimensions:512}))]);O(e),F(l),D(s)}catch(s){l.error(e("common.error"))}finally{U(!1)}};(0,a.useEffect)(()=>{ej()},[]);let eg=async e=>{el(!0),eo(e.name),er(e.name),et(""),ec(e.baseUrl||""),em(e.protocol||e.detectedProtocol||"openai"),ey(e.capabilities||{});try{let l=await (0,K.Bh)(e.name);et(l.apiKey?"••••••••":""),ec(l.baseUrl||""),ey(l.capabilities||{})}catch(e){}$(!0)},eA=async()=>{if(ea.trim()){eu(!0);try{let s=ee&&ei.includes("•")?void 0:ei||void 0;await (0,K._m)(ea.trim(),{oldName:ee?es:void 0,apiKey:s,baseUrl:en||void 0,protocol:ed,directEndpoint:eh,capabilities:ex}),$(!1),await ej(),l.success(e("common.success"))}catch(s){l.error(e("common.error"))}finally{eu(!1)}}},ef=async s=>{try{await (0,K.h1)(s),await ej(),l.success(e("common.success"))}catch(s){l.error(e("common.error"))}},eb=async s=>{q(s);try{let o=await (0,K.bZ)(s);Q(e=>({...e,[s]:o.success})),l[o.success?"success":"error"](o.success?e("models.connected"):e("models.connectionFailed"))}catch(e){Q(e=>({...e,[s]:!1}))}finally{q(null)}},eS=async(s,o)=>{if(!R)return;let a={...R},r=a[s];if(!o){r.active="",F(a);try{await (0,K.aP)(a)}catch(s){l.error(e("common.error"))}return}let[i,t]=o.includes(":")?o.split(":"):[o,o];r.active=t,r.list.some(e=>e.name===t&&e.provider===i)||r.list.push({name:t,provider:i}),F(a);try{await (0,K.aP)(a)}catch(s){l.error(e("common.error"))}},ew=async()=>{M(!0);try{let s=await (0,K.dd)(H);D(s),Z(null),l.success(e("common.success"))}catch(s){l.error(e("common.error"))}finally{M(!1)}},ez=async()=>{L(!0);try{let s=await (0,K.u6)();Z(s.success),l[s.success?"success":"error"](s.message||(s.success?e("models.connected"):e("models.connectionFailed")))}catch(e){Z(!1)}finally{L(!1)}};return s?(0,o.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,o.jsx)(t.A,{active:!0,title:!0,paragraph:{rows:1}}),(0,o.jsx)(n.A,{size:"small",children:(0,o.jsx)(t.A,{active:!0,paragraph:{rows:6}})}),(0,o.jsx)(n.A,{size:"small",children:(0,o.jsx)(t.A,{active:!0,paragraph:{rows:4}})}),(0,o.jsx)(n.A,{size:"small",children:(0,o.jsx)(t.A,{active:!0,paragraph:{rows:3}})})]}):(0,o.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",flexWrap:"wrap",gap:12},children:[(0,o.jsxs)("div",{children:[(0,o.jsx)("h1",{className:"pageTitle",children:e("models.title")}),(0,o.jsx)("p",{className:"pageDesc",children:e("models.description")})]}),(0,o.jsx)(c.Ay,{type:"primary",icon:(0,o.jsx)(b.A,{}),onClick:()=>{el(!1),eo(""),er(""),et(""),ec(""),em("openai"),ep(!1),ey({}),$(!0)},children:e("models.addModel")})]}),(0,o.jsx)(n.A,{size:"small",title:"".concat(e("models.modelList")," (").concat(_.length,")"),children:0===_.length?(0,o.jsx)("span",{style:{color:"var(--colorTextSecondary)",fontSize:12},children:e("models.noProviders")}):(0,o.jsx)(d.A,{gutter:[12,12],children:_.map((l,s)=>(0,o.jsx)(m.A,{xs:24,sm:12,lg:8,xl:6,children:(0,o.jsxs)(n.A,{size:"small",hoverable:!0,style:{height:"100%"},children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:8,marginBottom:8,minWidth:0},children:[(0,o.jsxs)("div",{style:{minWidth:0,flex:1},children:[(0,o.jsx)("div",{style:{fontWeight:600,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:l.name}),(0,o.jsxs)("div",{style:{fontSize:12,color:"var(--colorTextSecondary)"},children:[(0,o.jsx)(S.A,{})," ",l.protocol||l.detectedProtocol||"openai"]})]}),(0,o.jsxs)(h.A,{size:2,children:[(0,o.jsx)(c.Ay,{size:"small",loading:V===l.name,onClick:()=>{eb(l.name)},icon:!0===J[l.name]?(0,o.jsx)(w.A,{style:{color:"var(--colorOk)"}}):!1===J[l.name]?(0,o.jsx)(z.A,{style:{color:"var(--colorDanger)"}}):(0,o.jsx)(k.A,{})}),(0,o.jsx)(c.Ay,{size:"small",icon:(0,o.jsx)(C.A,{}),onClick:()=>{eg(l)}}),(0,o.jsx)(p.A,{title:e("models.deleteProviderConfirm"),onConfirm:()=>{ef(l.name)},children:(0,o.jsx)(c.Ay,{size:"small",danger:!0,icon:(0,o.jsx)(B.A,{})})})]})]}),(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[(0,o.jsxs)("span",{style:{fontSize:12,color:"var(--colorTextSecondary)"},children:[(0,o.jsx)(I.A,{})," ",l.hasApiKey?"••••••••":"—"]}),l.baseUrl&&(0,o.jsxs)("span",{style:{fontSize:12,color:"var(--colorTextSecondary)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:l.baseUrl,children:[(0,o.jsx)(T.A,{})," ",l.baseUrl]}),(0,o.jsx)(h.A,{size:4,wrap:!0,children:N.filter(e=>{var s;return null==(s=l.capabilities)?void 0:s[e.key]}).map(e=>(0,o.jsx)(x.A,{color:"purple",style:{margin:0,fontSize:10,lineHeight:"16px"},children:e.label},e.key))})]})]})},l.name))})}),(0,o.jsxs)(n.A,{size:"small",title:e("models.embeddingConfig"),children:[(0,o.jsx)(y.A,{type:"info",showIcon:!0,message:e("models.embeddingHint"),style:{marginBottom:16}}),(0,o.jsxs)(d.A,{gutter:[12,12],children:[(0,o.jsxs)(m.A,{xs:24,sm:8,children:[(0,o.jsx)("div",{style:{fontSize:12,marginBottom:4,color:"var(--colorTextSecondary)"},children:e("models.embeddingProvider")}),(0,o.jsx)(v.A,{value:H.provider,style:{width:"100%"},options:[{label:"本地语义模型(推荐)",value:"transformers-local"},{label:"外部 Embedding(高级)",value:"openai-compatible"}],onChange:e=>D(l=>({...l,provider:e,model:"transformers-local"===e?l.model||"BAAI/bge-small-zh-v1.5":l.model,dimensions:"transformers-local"===e?512:l.dimensions||1024}))})]}),"openai-compatible"===H.provider&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(m.A,{xs:24,sm:8,children:[(0,o.jsx)("div",{style:{fontSize:12,marginBottom:4,color:"var(--colorTextSecondary)"},children:"Base URL"}),(0,o.jsx)(u.A,{value:H.baseUrl,onChange:e=>D(l=>({...l,baseUrl:e.target.value})),placeholder:"http://localhost:11434/v1"})]}),(0,o.jsxs)(m.A,{xs:24,sm:8,children:[(0,o.jsx)("div",{style:{fontSize:12,marginBottom:4,color:"var(--colorTextSecondary)"},children:e("models.model")}),(0,o.jsx)(u.A,{value:H.model,onChange:e=>D(l=>({...l,model:e.target.value})),placeholder:"bge-m3"})]}),(0,o.jsxs)(m.A,{xs:24,sm:8,children:[(0,o.jsx)("div",{style:{fontSize:12,marginBottom:4,color:"var(--colorTextSecondary)"},children:e("models.apiKey")}),(0,o.jsx)(u.A.Password,{value:H.apiKey,onFocus:()=>{var e;(null==(e=H.apiKey)?void 0:e.includes("•"))&&D(e=>({...e,apiKey:""}))},onChange:e=>D(l=>({...l,apiKey:e.target.value})),placeholder:e("models.optional")}),H.hasApiKey&&(0,o.jsx)("div",{style:{fontSize:11,color:"var(--colorTextSecondary)",marginTop:4},children:e("models.embeddingApiKeyHint")})]})]}),"transformers-local"===H.provider&&(0,o.jsxs)(m.A,{xs:24,sm:8,children:[(0,o.jsx)("div",{style:{fontSize:12,marginBottom:4,color:"var(--colorTextSecondary)"},children:e("models.model")}),(0,o.jsx)(u.A,{value:H.model,onChange:e=>D(l=>({...l,model:e.target.value})),placeholder:"BAAI/bge-small-zh-v1.5"})]}),(0,o.jsxs)(m.A,{xs:24,sm:8,children:[(0,o.jsx)("div",{style:{fontSize:12,marginBottom:4,color:"var(--colorTextSecondary)"},children:e("models.dimensions")}),(0,o.jsx)(j.A,{style:{width:"100%"},min:1,value:H.dimensions,onChange:e=>D(l=>({...l,dimensions:Number(e||("transformers-local"===l.provider?512:1024))}))})]}),(0,o.jsxs)(m.A,{xs:24,sm:8,children:[(0,o.jsx)("div",{style:{fontSize:12,marginBottom:4,color:"var(--colorTextSecondary)"},children:e("models.status")}),(0,o.jsxs)(h.A,{children:[(0,o.jsx)(x.A,{color:"blue",children:"transformers-local"===H.provider?"本地语义模型":e("models.openAICompatible")}),!0===X&&(0,o.jsx)(x.A,{color:"success",children:e("models.connected")}),!1===X&&(0,o.jsx)(x.A,{color:"error",children:e("models.connectionFailed")})]})]})]}),(0,o.jsxs)(h.A,{style:{marginTop:16},children:[(0,o.jsx)(c.Ay,{type:"primary",loading:W,onClick:()=>{ew()},children:e("models.saveEmbedding")}),(0,o.jsx)(c.Ay,{loading:G,onClick:()=>{ez()},children:e("models.testEmbedding")})]})]}),R&&(0,o.jsx)(n.A,{size:"small",title:e("models.modelTiers"),children:(0,o.jsx)(d.A,{gutter:[12,12],children:E.map(l=>{let{key:s,labelKey:a,descKey:r}=l,i=R[s],t=i.list.map(e=>({label:"".concat(e.provider," / ").concat(e.name),value:"".concat(e.provider,":").concat(e.name)})),c=_.filter(e=>!i.list.some(l=>l.provider===e.name)).map(e=>({label:e.name,value:"".concat(e.name,":").concat(e.name)})),d=i.active?i.list.find(e=>e.name===i.active):null;return(0,o.jsx)(m.A,{xs:24,lg:8,children:(0,o.jsxs)(n.A,{size:"small",title:(0,o.jsx)("span",{style:{fontSize:14},children:e(a)}),style:{height:"100%"},children:[(0,o.jsx)("div",{style:{fontSize:12,color:"var(--colorTextSecondary)",marginBottom:8,lineHeight:1.5},children:e(r)}),(0,o.jsx)(v.A,{value:i.active?"".concat((null==d?void 0:d.provider)||"",":").concat(i.active):void 0,onChange:e=>{eS(s,e)},allowClear:!0,placeholder:e("models.selectModelPlaceholder"),style:{width:"100%"},options:[...t,...c]}),d&&(()=>{let e=_.find(e=>e.name===d.provider);return(0,o.jsxs)("div",{style:{marginTop:12,padding:"8px 12px",background:"var(--colorBgElevated)",borderRadius:6,border:"1px solid var(--colorBorderSecondary)",display:"flex",alignItems:"center",gap:8},children:[(0,o.jsx)(k.A,{style:{color:"var(--colorAccent)",fontSize:14,flexShrink:0}}),(0,o.jsx)("span",{style:{fontSize:12,fontWeight:500,flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:d.provider}),(null==e?void 0:e.capabilities)&&N.filter(l=>e.capabilities[l.key]).length>0&&(0,o.jsx)(h.A,{size:4,wrap:!0,style:{flexShrink:0},children:N.filter(l=>e.capabilities[l.key]).slice(0,2).map(e=>(0,o.jsx)(x.A,{color:"purple",style:{margin:0,fontSize:10,lineHeight:"16px"},children:e.label},e.key))}),(0,o.jsx)(x.A,{color:"blue",style:{margin:0,fontSize:10,lineHeight:"18px",flexShrink:0},children:"激活"})]})})()]})},s)})})}),(0,o.jsx)(g.A,{title:ee?e("models.editModel"):e("models.addModel"),open:Y,onClose:()=>$(!1),width:800,maskClosable:!1,style:{borderRadius:"12px 0 0 12px"},styles:{body:{padding:"16px 24px"},header:{borderRadius:"12px 0 0 0",borderBottom:"1px solid var(--colorBorderSecondary)"}},extra:(0,o.jsx)(c.Ay,{type:"primary",loading:ev,onClick:()=>{eA()},children:e("common.save")}),children:(0,o.jsxs)(A.A,{layout:"vertical",children:[(0,o.jsx)(A.A.Item,{label:e("models.modelName"),children:(0,o.jsx)(u.A,{value:ea,onChange:e=>er(e.target.value),placeholder:e("models.modelNamePlaceholder")})}),(0,o.jsx)(A.A.Item,{label:e("models.apiKey"),help:ee?e("models.apiKeyEditHint"):void 0,children:(0,o.jsx)(u.A.Password,{value:ei,onFocus:()=>{ee&&ei.includes("•")&&et("")},onChange:e=>et(e.target.value),placeholder:ee?e("models.apiKeyEditPlaceholder"):"sk-..."})}),(0,o.jsx)(A.A.Item,{label:e("models.baseUrl"),children:(0,o.jsx)(u.A,{value:en,onChange:e=>ec(e.target.value),placeholder:"https://api.openai.com/v1"})}),(0,o.jsx)(A.A.Item,{label:e("models.protocol"),children:(0,o.jsx)(v.A,{value:ed,onChange:em,options:P})}),(0,o.jsx)(A.A.Item,{label:"直连端点",children:(0,o.jsx)(f.A,{checked:eh,onChange:e=>ep(e.target.checked),children:"Base URL 是完整接口地址"})}),(0,o.jsx)(A.A.Item,{label:"多模态能力",children:(0,o.jsx)(f.A.Group,{value:N.filter(e=>ex[e.key]).map(e=>e.key),options:N.map(e=>({label:e.label,value:e.key})),onChange:e=>ey(Object.fromEntries(N.map(l=>[l.key,e.includes(l.key)])))})})]})})]})}},77305:(e,l,s)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/models",function(){return s(22708)}])}},e=>{e.O(0,[433,787,576,195,985,455,938,647,636,593,792],()=>e(e.s=77305)),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[449],{53139:(_,e,n)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/overview",function(){return n(27795)}])}},_=>{_.O(0,[433,787,131,795,636,593,792],()=>_(_.s=53139)),_N_E=_.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[449],{53139:(_,e,n)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/overview",function(){return n(27795)}])}},_=>{_.O(0,[433,787,694,795,636,593,792],()=>_(_.s=53139)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[26],{27549:(e,t,r)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/prompt",function(){return r(34508)}])},34508:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>K});var o=r(65321),l=r(97109),i=r(79059),n=r(17807),s=r(33442),a=r(11702),c=r(56985),d=r(85114),p=r(26171),h=r(68787),m=r(88762),u=r(7576),x=r(57271),y=r(49292),f=r(55122),g=r(84253),j=r(34052),v=r(42700),w=r(54746),S=r(99650),A=r(81668),b=r(58209),C=r(26631),k=r(29606),z=r(96091),T=r(30486),N=r(46082),F=r(42758),I=r(24810),O=r(7492);async function B(){let e=await fetch("/api/prompt");if(!e.ok)throw Error("Failed");return e.json()}async function E(e,t,r){let o=await fetch("/api/prompt",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:e,content:t,name:r})});if(!o.ok)throw Error("Failed");return o.json()}async function R(e){let t=await fetch("/api/prompt",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"create",projectRoot:e,content:"# CUSTOMIZE\n"})});if(!t.ok)throw Error("Failed");return t.json()}async function P(e,t){let r=await fetch("/api/prompt",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"createCustom",name:e,content:t})});if(!r.ok)throw Error("Failed");return r.json()}async function W(e){let t=await fetch("/api/prompt",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"select",selectedIds:e})});if(!t.ok)throw Error("Failed");return t.json()}async function D(e){let t=await fetch("/api/prompt",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"import",...e&&"object"==typeof e?e:{prompts:[]}})});if(!t.ok)throw Error(await t.text());return t.json()}async function H(){return J("",!1,60)}async function _(e){let t=await fetch("/api/kb/files/detail?relativePath=".concat(encodeURIComponent(e)));if(!t.ok)throw Error("Failed");return((await t.json()).chunks||[]).map(e=>e.content||"").filter(Boolean).join("\n\n").slice(0,12e3)}async function J(e){let t=!(arguments.length>1)||void 0===arguments[1]||arguments[1],r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:30,o=new URLSearchParams({limit:String(r)});e.trim()&&o.set("q",e.trim()),t||o.set("includeContent","0");let l=await fetch("/api/kb/files/search?".concat(o));return l.ok&&(await l.json()).files||[]}async function L(e){let t=await fetch("/api/prompt/chat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok){let e=await t.text();try{let t=JSON.parse(e);throw Error(t.error||t.message||e||"AI 对话失败")}catch(t){throw Error(e||"AI 对话失败")}}return t.json()}function M(e,t){let r=new Blob([JSON.stringify(t,null,2)],{type:"application/json;charset=utf-8"}),o=URL.createObjectURL(r),l=document.createElement("a");l.href=o,l.download=e,l.click(),URL.revokeObjectURL(o)}function U(e){return e.id.startsWith("custom:")}function $(e){return U(e)?"custom":e.isCurrent?"current":"project"}function G(e,t,r){return e?"customize-agent:prompt-chat:".concat(e.id,":").concat(e.customizePath||e.projectName):"customize-agent:prompt-chat:draft:".concat(r||t||"new")}function X(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:220,r=e.hasFile&&e.content?e.content.replace(/^#.*$/gm,"").replace(/\n{3,}/g,"\n\n").trim():"";return r.length>t?"".concat(r.slice(0,t),"..."):r}function Y(e){let t=Date.parse(e);return Number.isNaN(t)?"-":new Date(t).toLocaleString()}function Z(e){return{type:"customize-agent.prompts",version:1,exportedAt:new Date().toISOString(),prompts:e.map(e=>({name:e.projectName,content:e.content||"",selected:e.selected,source:$(e)}))}}function q(e){let t=e.match(/(^|\s)@([^\s@]*)$/);return t?t[2]:null}function K(){let e=(0,i.Vr)(),{message:t}=n.A.useApp(),[r,K]=(0,l.useState)(!0),[V,Q]=(0,l.useState)([]),[ee,et]=(0,l.useState)(!1),[er,eo]=(0,l.useState)(null),[el,ei]=(0,l.useState)(""),[en,es]=(0,l.useState)(""),[ea,ec]=(0,l.useState)(!1),[ed,ep]=(0,l.useState)(!1),[eh,em]=(0,l.useState)("custom"),[eu,ex]=(0,l.useState)("all"),[ey,ef]=(0,l.useState)("mtime"),[eg,ej]=(0,l.useState)("list"),[ev,ew]=(0,l.useState)(""),[eS,eA]=(0,l.useState)(null),[eb,eC]=(0,l.useState)([]),[ek,ez]=(0,l.useState)(!1),[eT,eN]=(0,l.useState)([]),[eF,eI]=(0,l.useState)(""),[eO,eB]=(0,l.useState)(""),[eE,eR]=(0,l.useState)(!1),[eP,eW]=(0,l.useState)([]),[eD,eH]=(0,l.useState)([]),[e_,eJ]=(0,l.useState)([]),[eL,eM]=(0,l.useState)(!1),[eU,e$]=(0,l.useState)(!1),[eG,eX]=(0,l.useState)(!1),eY=(0,l.useRef)(null),eZ=(0,l.useRef)(null),eq=q(eO),eK=async()=>{K(!0);try{Q(await B())}catch(r){t.error(e("common.error"))}finally{K(!1)}};(0,l.useEffect)(()=>{eK()},[]),(0,l.useEffect)(()=>{let e=window.localStorage.getItem("customize-agent:prompt-view-mode");("list"===e||"card"===e)&&ej(e)},[]),(0,l.useEffect)(()=>{window.localStorage.setItem("customize-agent:prompt-view-mode",eg)},[eg]),(0,l.useEffect)(()=>{let e=eZ.current;e&&e.scrollTo({top:e.scrollHeight,behavior:"smooth"}),eF&&window.localStorage.setItem(eF,JSON.stringify(eT.slice(-30)))},[eT,eE,eF]),(0,l.useEffect)(()=>{!ee||eP.length>0||eL||(eM(!0),H().then(eW).catch(()=>void 0).finally(()=>eM(!1)))},[ee,eP.length,eL]),(0,l.useEffect)(()=>{let e=null==eq?void 0:eq.trim();if(!ee||!e){eH([]),e$(!1);return}let t=!1;e$(!0);let r=window.setTimeout(()=>{J(e).then(e=>{t||eH(e)}).catch(()=>{t||eH([])}).finally(()=>{t||e$(!1)})},250);return()=>{t=!0,window.clearTimeout(r)}},[ee,eq]);let eV=V.find(e=>e.isCurrent),eQ=V.filter(U),e0={all:V.length,custom:V.filter(e=>"custom"===$(e)).length,current:V.filter(e=>"current"===$(e)).length,project:V.filter(e=>"project"===$(e)).length,selected:V.filter(e=>e.selected).length,unselected:V.filter(e=>!e.selected).length,hasFile:V.filter(e=>e.hasFile).length,missingFile:V.filter(e=>!e.hasFile).length},e1=V.filter(e=>{var t;let r=$(e);return("all"===eh||r===eh)&&("selected"!==eu||!!e.selected)&&("unselected"!==eu||!e.selected)&&("hasFile"!==eu||!!e.hasFile)&&("missingFile"!==eu||!e.hasFile)&&(!ev.trim()||(t=ev.trim(),!!"".concat(e.projectName,"\n").concat(e.projectRoot||"","\n").concat(e.customizePath||"","\n").concat(e.content||"").toLowerCase().includes(t.toLowerCase())))}).sort((e,t)=>"name"===ey?e.projectName.localeCompare(t.projectName):"source"===ey?["custom","current","project"].indexOf($(e))-["custom","current","project"].indexOf($(t)):"selected"===ey&&Number(t.selected)-Number(e.selected)||Date.parse(t.mtime||"")-Date.parse(e.mtime||"")),e2=e1.find(e=>e.id===eS)||e1[0]||null,e8=eb.filter(e=>e1.some(t=>t.id===e)),e4=(null==eq?void 0:eq.trim())?eD:eP,e6=(e,t,r)=>{let o=G(e,t,r);eI(o),eN(function(e){try{let t=JSON.parse(window.localStorage.getItem(e)||"[]");return Array.isArray(t)?t.filter(e=>("user"===e.role||"assistant"===e.role)&&"string"==typeof e.content).slice(-30):[]}catch(e){return[]}}(o)),eB(""),eR(!1),eJ([]),eX(!1)},e7=r=>{if(null==r?void 0:r.projectRoot)return void R(r.projectRoot).then(()=>{t.success(e("common.success")),eK()}).catch(()=>t.error(e("common.error")));let o="new:".concat(Date.now());eo(null),ep(!0),es(""),ei(""),e6(null,"new",o),et(!0)},e3=async()=>{if(!en.trim())return void t.error("请输入名称");ec(!0);try{if(er)await E(er.customizePath,el,U(er)?en.trim():void 0),t.success(e("common.success"));else{let r=await P(en.trim(),el||"# ".concat(en.trim(),"\n"));!function(e,t){if(!e||!t||e===t)return;let r=window.localStorage.getItem(e);r&&!window.localStorage.getItem(t)&&window.localStorage.setItem(t,r)}(eF,G({id:r.id,projectId:r.id,projectName:en.trim(),customizePath:r.id,content:el,mtime:"",hasFile:!0,isCurrent:!1,selected:!1,source:"custom"},en.trim())),t.success(e("common.success"))}et(!1),await eK()}catch(r){t.error(e("common.error"))}finally{ec(!1)}},e5=async e=>{let t=Array.from(new Set([...e_,...eP.filter(t=>e.includes("@".concat(t.relativePath))).map(e=>e.relativePath)])).slice(0,3),r=[];for(let e of t){let t=await _(e);t&&r.push({relativePath:e,content:t})}return r},e9=async()=>{let e=eO.trim();if(!e||eE)return;let r=[...eT,{role:"user",content:e}];eN(r),eB(""),eX(!1),eR(!0);try{let t=await e5(e),o=await L({name:en||(null==er?void 0:er.projectName)||"未命名提示词",content:el,message:e,history:eT,references:t});eN([...r,{role:"assistant",content:o.content||"AI 未返回内容"}])}catch(e){t.error(e instanceof Error?e.message:"AI 对话失败,请检查模型配置"),eN(r)}finally{eR(!1)}},te=async(r,o)=>{let l=o?Array.from(new Set([...V.filter(e=>e.selected).map(e=>e.id),r.id])):V.filter(e=>e.selected&&e.id!==r.id).map(e=>e.id);try{await W(l),Q(e=>e.map(e=>({...e,selected:l.includes(e.id)})))}catch(r){t.error(e("common.error"))}},tt=async r=>{let o=V.filter(e=>e.selected).map(e=>e.id),l=r?Array.from(new Set([...o,...e8])):o.filter(e=>!e8.includes(e));try{await W(l),Q(e=>e.map(e=>({...e,selected:l.includes(e.id)}))),eC([]),t.success(e("common.success"))}catch(r){t.error(e("common.error"))}},tr=async r=>{try{if(!(await fetch("/api/prompt",{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:r.projectId,filePath:r.customizePath})})).ok)throw Error("Failed");t.success(e("common.success")),eC(e=>e.filter(e=>e!==r.id)),await eK()}catch(r){t.error(e("common.error"))}},to=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"custom",r="checked"===e?V.filter(e=>e8.includes(e.id)):"filtered"===e?e1:eQ;M("customize-prompts-".concat(new Date().toISOString().slice(0,10),".json"),Z(r)),t.success("已导出 ".concat(r.length," 条提示词"))},tl=async e=>{if(e){ez(!0);try{let r=await e.text(),o=JSON.parse(r),l=await D(o);t.success("已导入 ".concat(l.imported," 条提示词")),await eK()}catch(e){t.error("导入失败,请确认 JSON 文件格式正确")}finally{ez(!1),eY.current&&(eY.current.value="")}}},ti=e=>{let t=$(e);return(0,o.jsxs)(s.A,{size:4,wrap:!0,children:[(0,o.jsx)(a.A,{color:"custom"===t?"cyan":"current"===t?"green":"project"===t?"blue":"default",style:{margin:0},children:"custom"===t?"我的提示词":"current"===t?"当前项目":"project"===t?"其他项目":"全部"}),e.selected&&(0,o.jsx)(a.A,{color:"purple",style:{margin:0},children:"已选中"}),!e.hasFile&&(0,o.jsx)(a.A,{style:{margin:0},children:"无文件"})]})},tn=e=>(0,o.jsxs)(s.A,{size:6,children:[e.hasFile&&(0,o.jsx)(c.A,{checked:e.selected,onChange:t=>{te(e,t.target.checked)},children:"选中"}),!e.hasFile&&e.projectRoot&&(0,o.jsx)(d.Ay,{size:"small",icon:(0,o.jsx)(w.A,{}),onClick:()=>e7(e),children:"创建"}),e.hasFile&&(0,o.jsx)(d.Ay,{size:"small",icon:(0,o.jsx)(S.A,{}),onClick:()=>{eo(e),ep(!1),es(e.projectName),ei(e.content||""),e6(e,e.projectName),et(!0)},children:"编辑"}),e.hasFile&&(0,o.jsx)(d.Ay,{size:"small",icon:(0,o.jsx)(A.A,{}),onClick:()=>{var r;return r=e,void(M("customize-prompt-".concat(r.projectName.trim().replace(/[\\/:*?"<>|]/g,"-").slice(0,80)||"untitled","-").concat(new Date().toISOString().slice(0,10),".json"),Z([r])),t.success("已导出 1 条提示词"))},children:"导出"}),(0,o.jsx)(p.A,{title:U(e)?"删除自定义提示词?":"删除项目记录及文件?",onConfirm:()=>{tr(e)},children:(0,o.jsx)(d.Ay,{size:"small",danger:!0,icon:(0,o.jsx)(b.A,{})})})]});return r?(0,o.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,o.jsx)(m.A,{active:!0,title:!0,paragraph:{rows:1}}),(0,o.jsx)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(300px, 1fr))",gap:12},children:Array.from({length:4}).map((e,t)=>(0,o.jsx)(h.A,{size:"small",children:(0,o.jsx)(m.A,{active:!0,paragraph:{rows:4}})},t))})]}):(0,o.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",flexWrap:"wrap",gap:12},children:[(0,o.jsxs)("div",{children:[(0,o.jsx)("h1",{className:"pageTitle",children:e("nav.promptManagement")}),(0,o.jsx)("p",{className:"pageDesc",children:e("prompt.description")})]}),(0,o.jsxs)(s.A,{wrap:!0,children:[eV&&(0,o.jsxs)(a.A,{color:"green",style:{lineHeight:"22px"},children:[(0,o.jsx)(k.A,{})," ",eV.projectRoot]}),(0,o.jsx)("input",{ref:eY,type:"file",accept:"application/json,.json",style:{display:"none"},onChange:e=>{var t;tl(null==(t=e.target.files)?void 0:t[0])}}),(0,o.jsx)(d.Ay,{icon:(0,o.jsx)(z.A,{}),loading:ek,onClick:()=>{var e;return null==(e=eY.current)?void 0:e.click()},children:"导入"}),(0,o.jsx)(d.Ay,{icon:(0,o.jsx)(A.A,{}),disabled:0===e1.length,onClick:()=>to("filtered"),children:"导出筛选"}),(0,o.jsx)(d.Ay,{type:"primary",icon:(0,o.jsx)(w.A,{}),onClick:()=>e7(),children:"创建提示词"})]})]}),(0,o.jsxs)(h.A,{size:"small",styles:{body:{display:"flex",gap:10,flexWrap:"wrap",alignItems:"center"}},children:[(0,o.jsx)(u.A,{prefix:(0,o.jsx)(T.A,{}),allowClear:!0,placeholder:"搜索名称、内容、路径...",value:ev,onChange:e=>ew(e.target.value),style:{width:280}}),(0,o.jsx)(x.A,{value:eh,onChange:em,style:{width:150},options:[{label:"全部 (".concat(e0.all,")"),value:"all"},{label:"我的提示词 (".concat(e0.custom,")"),value:"custom"},{label:"当前项目 (".concat(e0.current,")"),value:"current"},{label:"其他项目 (".concat(e0.project,")"),value:"project"}]}),(0,o.jsx)(x.A,{value:eu,onChange:ex,style:{width:130},options:[{label:"全部状态",value:"all"},{label:"已选中 (".concat(e0.selected,")"),value:"selected"},{label:"未选中 (".concat(e0.unselected,")"),value:"unselected"},{label:"有文件 (".concat(e0.hasFile,")"),value:"hasFile"},{label:"无文件 (".concat(e0.missingFile,")"),value:"missingFile"}]}),(0,o.jsx)(x.A,{value:ey,onChange:ef,style:{width:140},options:[{label:"最近修改优先",value:"mtime"},{label:"名称 A-Z",value:"name"},{label:"来源优先",value:"source"},{label:"已选中优先",value:"selected"}]}),(0,o.jsx)(y.A,{value:eg,onChange:e=>ej(e),options:[{label:(0,o.jsx)(N.A,{}),value:"list"},{label:(0,o.jsx)(F.A,{}),value:"card"}]}),(0,o.jsx)("div",{style:{flex:1}}),(0,o.jsxs)("span",{style:{color:"var(--colorTextSecondary)",fontSize:13},children:["已显示 ",e1.length," / ",V.length]})]}),(0,o.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"260px minmax(0, 1fr)",gap:14,alignItems:"start"},children:[(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:14},children:[(0,o.jsxs)(h.A,{size:"small",title:"分组导航",styles:{body:{padding:8}},children:[[["all","全部",e0.all],["custom","我的提示词",e0.custom],["current","当前项目",e0.current],["project","其他项目",e0.project]].map(e=>{let[t,r,l]=e;return(0,o.jsxs)("button",{onClick:()=>em(t),style:{width:"100%",border:"none",background:eh===t?"var(--colorFillSecondary)":"transparent",color:"var(--colorText)",padding:"9px 10px",borderRadius:8,display:"flex",justifyContent:"space-between",cursor:"pointer",fontWeight:eh===t?700:400},children:[(0,o.jsx)("span",{children:r}),(0,o.jsx)("span",{children:l})]},t)}),(0,o.jsx)(f.A,{style:{margin:"8px 0"}}),[["selected","已选中",e0.selected],["unselected","未选中",e0.unselected]].map(e=>{let[t,r,l]=e;return(0,o.jsxs)("button",{onClick:()=>ex(eu===t?"all":t),style:{width:"100%",border:"none",background:eu===t?"var(--colorFillSecondary)":"transparent",color:"var(--colorText)",padding:"9px 10px",borderRadius:8,display:"flex",justifyContent:"space-between",cursor:"pointer",fontWeight:eu===t?700:400},children:[(0,o.jsx)("span",{children:r}),(0,o.jsx)("span",{children:l})]},t)})]}),(0,o.jsx)(h.A,{size:"small",title:"详情预览",styles:{body:{height:300,display:"flex",flexDirection:"column",gap:10,overflow:"hidden"}},children:e2?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,minWidth:0},children:[(0,o.jsx)(C.A,{style:{color:"var(--colorAccent)",flexShrink:0}}),(0,o.jsx)("strong",{style:{minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e2.projectName})]}),(0,o.jsx)("div",{style:{minWidth:0,overflow:"hidden"},children:ti(e2)}),(0,o.jsxs)("div",{style:{color:"var(--colorTextSecondary)",fontSize:12,lineHeight:1.7,minWidth:0},children:[(0,o.jsxs)("div",{children:["更新时间:",Y(e2.mtime)]}),(0,o.jsxs)("div",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:["文件路径:",e2.customizePath||"-"]}),(0,o.jsxs)("div",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:["项目路径:",e2.projectRoot||"-"]})]}),(0,o.jsx)("div",{style:{flex:1,minHeight:0,padding:10,borderRadius:8,background:"var(--colorFillAlter)",color:"var(--colorTextSecondary)",fontSize:12,lineHeight:1.7,overflow:"auto",whiteSpace:"pre-wrap",overflowWrap:"anywhere",wordBreak:"break-word"},children:X(e2,800)||"暂无内容预览"}),(0,o.jsx)("div",{children:tn(e2)})]}):(0,o.jsx)(g.A,{image:g.A.PRESENTED_IMAGE_SIMPLE,description:"请选择一个提示词"})})]}),(0,o.jsxs)("div",{style:{minWidth:0},children:[e8.length>0&&(0,o.jsxs)(h.A,{size:"small",style:{marginBottom:12},styles:{body:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"}},children:[(0,o.jsxs)("span",{style:{fontWeight:600},children:["已选择 ",e8.length," 项"]}),(0,o.jsx)(d.Ay,{size:"small",onClick:()=>{tt(!0)},children:"批量选中"}),(0,o.jsx)(d.Ay,{size:"small",onClick:()=>{tt(!1)},children:"取消选中"}),(0,o.jsx)(d.Ay,{size:"small",icon:(0,o.jsx)(A.A,{}),onClick:()=>to("checked"),children:"导出选中"}),(0,o.jsx)(d.Ay,{size:"small",onClick:()=>eC([]),children:"清空选择"})]}),0===e1.length?(0,o.jsx)(h.A,{children:(0,o.jsx)(g.A,{description:ev||"all"!==eu?"没有找到匹配的提示词,请尝试更换关键词或清空筛选条件":"当前分组没有提示词"})}):"list"===eg?(0,o.jsx)(s.A,{direction:"vertical",size:10,style:{width:"100%"},children:e1.map(e=>{let t=X(e,180),r=(null==e2?void 0:e2.id)===e.id;return(0,o.jsxs)("div",{onClick:()=>eA(e.id),style:{display:"grid",gridTemplateColumns:"28px minmax(0, 1fr) auto",gap:12,alignItems:"center",padding:14,border:"1px solid ".concat(r?"var(--colorAccent)":"var(--colorBorderSecondary)"),borderRadius:12,background:r?"var(--colorFillSecondary)":"var(--colorBgContainer)",cursor:"pointer",transition:"all .2s ease"},children:[(0,o.jsx)(c.A,{checked:eb.includes(e.id),onClick:e=>e.stopPropagation(),onChange:t=>eC(r=>t.target.checked?Array.from(new Set([...r,e.id])):r.filter(t=>t!==e.id))}),(0,o.jsxs)("div",{style:{minWidth:0},children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:6},children:[(0,o.jsx)(C.A,{style:{color:e.isCurrent?"var(--colorOk)":"var(--colorAccent)"}}),(0,o.jsx)("span",{style:{fontWeight:700,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.projectName}),ti(e)]}),(0,o.jsxs)("div",{style:{color:"var(--colorTextSecondary)",fontSize:12,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",marginBottom:6*!!t},children:[(0,o.jsx)(k.A,{style:{marginRight:4}}),e.projectRoot||e.customizePath||"本地提示词"," \xb7 ",Y(e.mtime)]}),t&&(0,o.jsx)("div",{style:{color:"var(--colorTextSecondary)",fontSize:12,lineHeight:1.6,display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical",overflow:"hidden",whiteSpace:"pre-wrap"},children:t})]}),(0,o.jsx)("div",{onClick:e=>e.stopPropagation(),children:tn(e)})]},e.id)})}):(0,o.jsx)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(280px, 1fr))",gap:12},children:e1.map(e=>{let t=X(e,180),r=(null==e2?void 0:e2.id)===e.id;return(0,o.jsxs)(h.A,{size:"small",hoverable:!0,onClick:()=>eA(e.id),style:{borderColor:r?"var(--colorAccent)":void 0},styles:{body:{display:"flex",flexDirection:"column",minHeight:210}},children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:8},children:[(0,o.jsx)(c.A,{checked:eb.includes(e.id),onClick:e=>e.stopPropagation(),onChange:t=>eC(r=>t.target.checked?Array.from(new Set([...r,e.id])):r.filter(t=>t!==e.id))}),(0,o.jsx)(C.A,{style:{color:e.isCurrent?"var(--colorOk)":"var(--colorAccent)"}}),(0,o.jsx)("span",{style:{fontWeight:700,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",flex:1},children:e.projectName})]}),(0,o.jsx)("div",{style:{marginBottom:8},children:ti(e)}),(0,o.jsxs)("div",{style:{color:"var(--colorTextSecondary)",fontSize:12,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",marginBottom:8},children:[(0,o.jsx)(k.A,{style:{marginRight:4}}),e.projectRoot||e.customizePath||"本地提示词"]}),(0,o.jsx)("div",{style:{padding:10,background:"var(--colorFillAlter)",borderRadius:8,color:"var(--colorTextSecondary)",fontSize:12,lineHeight:1.6,minHeight:72,maxHeight:72,overflow:"hidden",whiteSpace:"pre-wrap"},children:t||"暂无内容预览"}),(0,o.jsxs)("div",{style:{marginTop:"auto",paddingTop:10,borderTop:"1px solid var(--colorBorderSecondary)",display:"flex",justifyContent:"space-between",alignItems:"center"},onClick:e=>e.stopPropagation(),children:[(0,o.jsx)("span",{style:{color:"var(--colorTextSecondary)",fontSize:12},children:Y(e.mtime)}),tn(e)]})]},e.id)})})]})]}),(0,o.jsxs)(j.A,{title:ed?"创建提示词":er&&U(er)?"编辑我的提示词 — ".concat(en||er.projectName):"编辑项目提示词 — ".concat((null==er?void 0:er.projectName)||""),open:ee,onClose:()=>et(!1),width:980,maskClosable:!1,style:{borderRadius:"12px 0 0 12px"},styles:{body:{padding:"16px 24px",display:"grid",gridTemplateRows:"minmax(320px, 1fr) 420px",gap:14,height:"100%"},header:{borderRadius:"12px 0 0 0",borderBottom:"1px solid var(--colorBorderSecondary)"}},extra:(0,o.jsxs)(s.A,{children:[(0,o.jsx)(d.Ay,{onClick:()=>et(!1),children:e("common.cancel")}),(0,o.jsx)(d.Ay,{type:"primary",loading:ea,onClick:()=>{e3()},children:e("common.save")})]}),children:[(0,o.jsxs)("div",{style:{minHeight:0,display:"flex",flexDirection:"column"},children:[(0,o.jsx)("div",{style:{marginBottom:12},children:ed||er&&U(er)?(0,o.jsxs)(s.A,{direction:"vertical",size:6,style:{width:"100%"},children:[(0,o.jsx)(u.A,{placeholder:"提示词名称",value:en,onChange:e=>es(e.target.value),style:{maxWidth:520}}),!ed&&(0,o.jsx)("div",{style:{fontSize:12,color:"var(--colorTextSecondary)"},children:null==er?void 0:er.customizePath})]}):(0,o.jsx)("div",{style:{fontSize:12,color:"var(--colorTextSecondary)"},children:null==er?void 0:er.customizePath})}),(0,o.jsx)(u.A.TextArea,{value:el,onChange:e=>ei(e.target.value),style:{flex:1,minHeight:280,fontFamily:"SF Mono, Monaco, Consolas, monospace",fontSize:13,resize:"none"}})]}),(0,o.jsxs)("div",{style:{minHeight:0,border:"1px solid var(--colorBorderSecondary)",borderRadius:10,background:"var(--colorBgContainer)",display:"flex",flexDirection:"column",overflow:"hidden",boxShadow:"0 8px 24px rgba(15, 23, 42, 0.06)"},children:[(0,o.jsxs)("div",{style:{padding:"10px 12px",borderBottom:"1px solid var(--colorBorderSecondary)",display:"flex",alignItems:"center",justifyContent:"space-between",gap:8},children:[(0,o.jsxs)(s.A,{size:6,children:[(0,o.jsx)(I.A,{style:{color:"var(--colorAccent)"}}),(0,o.jsx)("span",{style:{fontWeight:600},children:"AI 提示词助手"})]}),(0,o.jsxs)(s.A,{size:6,children:[eT.length>0&&(0,o.jsx)(d.Ay,{size:"small",onClick:()=>eN([]),children:"清空历史"}),eE?(0,o.jsx)(a.A,{color:"processing",style:{margin:0},children:"生成中"}):(0,o.jsx)(a.A,{color:"blue",style:{margin:0},children:"可对话优化"})]})]}),(0,o.jsx)("div",{ref:eZ,style:{flex:1,minHeight:0,overflowY:"auto",padding:14,background:"var(--colorFillAlter)"},children:0!==eT.length||eE?(0,o.jsxs)(s.A,{direction:"vertical",size:12,style:{width:"100%"},children:[eT.map((e,r)=>{let l="user"===e.role;return(0,o.jsx)("div",{style:{display:"flex",justifyContent:l?"flex-end":"flex-start"},children:(0,o.jsxs)("div",{style:{maxWidth:"78%",padding:"10px 12px",borderRadius:12,background:l?"var(--colorFillSecondary)":"var(--colorBgContainer)",color:"var(--colorText)",border:"1px solid var(--colorBorderSecondary)",whiteSpace:"pre-wrap",lineHeight:1.7,fontSize:13,transition:"all .2s ease"},children:[e.content,!l&&(0,o.jsx)("div",{style:{display:"flex",justifyContent:"flex-end",marginTop:8},children:(0,o.jsx)(d.Ay,{size:"small",type:"primary",onClick:()=>{ei(e.content),t.success("已应用到编辑内容,请确认后保存")},children:"应用"})})]})},"".concat(e.role,"-").concat(r))}),eE&&(0,o.jsx)("div",{style:{display:"flex",justifyContent:"flex-start"},children:(0,o.jsxs)("div",{style:{padding:"10px 12px",borderRadius:12,background:"var(--colorBgContainer)",border:"1px solid var(--colorBorderSecondary)",color:"var(--colorTextSecondary)",fontSize:13},children:[(0,o.jsx)(v.A,{size:"small",style:{marginRight:8}}),"AI 正在分析并生成内容..."]})})]}):(0,o.jsx)(g.A,{image:g.A.PRESENTED_IMAGE_SIMPLE,description:"输入 @ 召回知识库文件,再描述你的优化目标"})}),(0,o.jsx)(f.A,{style:{margin:0}}),(0,o.jsxs)("div",{style:{padding:12},children:[e_.length>0&&(0,o.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:4,marginBottom:8},children:e_.map(e=>(0,o.jsxs)(a.A,{closable:!0,onClose:()=>eJ(t=>t.filter(t=>t!==e)),style:{margin:0,maxWidth:360,overflow:"hidden",textOverflow:"ellipsis"},children:["@",e]},e))}),eG&&(0,o.jsxs)("div",{style:{maxHeight:260,overflowY:"auto",marginBottom:8,border:"1px solid var(--colorBorderSecondary)",borderRadius:12,background:"var(--colorBgElevated, var(--colorBgContainer))",boxShadow:"0 16px 40px rgba(15, 23, 42, 0.14)"},children:[(0,o.jsxs)("div",{style:{position:"sticky",top:0,zIndex:1,padding:"10px 12px",borderBottom:"1px solid var(--colorBorderSecondary)",background:"var(--colorBgElevated, var(--colorBgContainer))",display:"flex",justifyContent:"space-between",gap:12,alignItems:"center"},children:[(0,o.jsxs)("div",{children:[(0,o.jsx)("div",{style:{color:"var(--colorText)",fontSize:13,fontWeight:700},children:"召回知识库文件"}),(0,o.jsx)("div",{style:{color:"var(--colorTextSecondary)",fontSize:11},children:"支持文件名与知识库内容检索,最多召回 3 个文件"})]}),(0,o.jsx)(a.A,{color:eq?"blue":"default",style:{margin:0,maxWidth:240,overflow:"hidden",textOverflow:"ellipsis"},children:eq?"@".concat(eq):"输入 @关键词"})]}),eL?(0,o.jsxs)("div",{style:{padding:14,color:"var(--colorTextSecondary)",fontSize:12},children:[(0,o.jsx)(v.A,{size:"small",style:{marginRight:8}}),"正在加载知识库文件..."]}):0===eP.length?(0,o.jsx)("div",{style:{padding:14,color:"var(--colorTextSecondary)",fontSize:12},children:"暂无可召回的知识库文件"}):0===e4.length?(0,o.jsx)("div",{style:{padding:14,color:"var(--colorTextSecondary)",fontSize:12},children:eU?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(v.A,{size:"small",style:{marginRight:8}}),"正在检索知识库内容..."]}):"没有匹配的知识库文件,请换个关键词"}):(0,o.jsxs)(o.Fragment,{children:[eU&&(0,o.jsxs)("div",{style:{padding:"8px 12px",color:"var(--colorTextSecondary)",fontSize:12,borderBottom:"1px solid var(--colorBorderSecondary)"},children:[(0,o.jsx)(v.A,{size:"small",style:{marginRight:8}}),"正在继续检索内容匹配..."]}),e4.slice(0,30).map(e=>(0,o.jsxs)("div",{onMouseDown:t=>{var r;t.preventDefault(),r=e.relativePath,eJ(e=>e.includes(r)?e:[...e,r]),eB(e=>e.replace(/(^|\s)@([^\s@]*)$/,"$1@".concat(r," "))),eX(!1)},style:{padding:"10px 12px",cursor:"pointer",borderBottom:"1px solid var(--colorBorderSecondary)",fontSize:12,display:"grid",gridTemplateColumns:"22px minmax(0, 1fr) auto",gap:10,alignItems:"center"},children:[(0,o.jsx)("div",{style:{width:22,height:22,borderRadius:7,background:"var(--colorFillSecondary)",display:"flex",alignItems:"center",justifyContent:"center"},children:(0,o.jsx)(C.A,{style:{color:"var(--colorAccent)"}})}),(0,o.jsxs)("div",{style:{minWidth:0},children:[(0,o.jsx)("div",{style:{color:"var(--colorText)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontWeight:700},children:e.relativePath}),(0,o.jsxs)("div",{style:{color:"var(--colorTextSecondary)",fontSize:11,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:[e.category||"未分类"," \xb7 ",e.format||"未知格式","number"==typeof e.score?" \xb7 score ".concat(e.score.toFixed(2)):""]})]}),(0,o.jsxs)(s.A,{size:4,children:[(0,o.jsx)(a.A,{color:"content"===e.matchedBy?"purple":"disk"===e.matchedBy?"orange":"blue",style:{margin:0},children:"content"===e.matchedBy?"内容匹配":"disk"===e.matchedBy?"磁盘文件":"文件匹配"}),(0,o.jsx)(a.A,{style:{margin:0},children:e.status})]})]},e.relativePath))]})]}),(0,o.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"flex-end"},children:[(0,o.jsx)(u.A.TextArea,{value:eO,onChange:e=>{let t=e.target.value;eB(t),eX(null!==q(t))},onFocus:()=>eX(null!==q(eO)),onPressEnter:e=>{e.shiftKey||(e.preventDefault(),e9())},disabled:eE,placeholder:"输入 @ 召回知识库文件,再描述优化目标...",autoSize:{minRows:2,maxRows:5},style:{fontSize:13,lineHeight:1.6}}),(0,o.jsx)(d.Ay,{type:"primary",icon:(0,o.jsx)(O.A,{}),loading:eE,disabled:!eO.trim(),onClick:()=>{e9()},children:"发送"})]})]})]})]})]})}}},e=>{e.O(0,[433,787,576,195,985,525,636,593,792],()=>e(e.s=27549)),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[979],{14995:(e,t)=>{"use strict";t.A={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M909.1 209.3l-56.4 44.1C775.8 155.1 656.2 92 521.9 92 290 92 102.3 279.5 102 511.5 101.7 743.7 289.8 932 521.9 932c181.3 0 335.8-115 394.6-276.1 1.5-4.2-.7-8.9-4.9-10.3l-56.7-19.5a8 8 0 00-10.1 4.8c-1.8 5-3.8 10-5.9 14.9-17.3 41-42.1 77.8-73.7 109.4A344.77 344.77 0 01655.9 829c-42.3 17.9-87.4 27-133.8 27-46.5 0-91.5-9.1-133.8-27A341.5 341.5 0 01279 755.2a342.16 342.16 0 01-73.7-109.4c-17.9-42.4-27-87.4-27-133.9s9.1-91.5 27-133.9c17.3-41 42.1-77.8 73.7-109.4 31.6-31.6 68.4-56.4 109.3-73.8 42.3-17.9 87.4-27 133.8-27 46.5 0 91.5 9.1 133.8 27a341.5 341.5 0 01109.3 73.8c9.9 9.9 19.2 20.4 27.8 31.4l-60.2 47a8 8 0 003 14.1l175.6 43c5 1.2 9.9-2.6 9.9-7.7l.8-180.9c-.1-6.6-7.8-10.3-13-6.2z"}}]},name:"reload",theme:"outlined"}},39214:(e,t,r)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/system/logs",function(){return r(91698)}])},91698:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>k});var a=r(65321),s=r(97109),i=r(35292),n=r(9137),l=r(11702),o=r(88762),c=r(33442),d=r(85114),h=r(26171),p=r(85493),g=r(7576),u=r(21289),x=r(84253),f=r(99811),y=r(58209),m=r(96651),w=r(60470),j=r(79059),v=r(6578);let{Text:A,Paragraph:b}=i.A;function k(){let e=(0,j.Vr)(),[t,r]=(0,s.useState)([]),[i,k]=(0,s.useState)(!0),[S,z]=(0,s.useState)(""),[I,C]=(0,s.useState)(!1),N=async()=>{k(!0);try{r((await (0,v.oH)(500)).logs)}catch(e){n.Ay.error(e instanceof Error?e.message:"加载日志失败")}finally{k(!1)}};(0,s.useEffect)(()=>{N()},[]);let B=(0,s.useMemo)(()=>{let e=S.trim().toLowerCase();return e?t.filter(t=>[t.id,t.level,t.source,t.functionName,t.message,t.stack].filter(Boolean).some(t=>String(t).toLowerCase().includes(e))):t},[S,t]),O=[{title:"序号",key:"index",width:70,render:(e,t,r)=>r+1},{title:"时间",dataIndex:"createdAt",width:170,render:e=>new Date(e).toLocaleString()},{title:"级别",dataIndex:"level",width:80,render:e=>(0,a.jsx)(l.A,{color:"error"===e?"error":"warn"===e?"warning":"blue",style:{margin:0},children:e})},{title:"来源",dataIndex:"source",width:200,render:e=>(0,a.jsx)(A,{code:!0,style:{fontSize:12},children:e})},{title:"函数",dataIndex:"functionName",width:160,render:e=>e?(0,a.jsx)(A,{code:!0,style:{fontSize:12},children:e}):(0,a.jsx)(A,{type:"secondary",children:"-"})},{title:"错误信息",dataIndex:"message",render:e=>(0,a.jsx)(b,{style:{maxWidth:480,overflowWrap:"anywhere",wordBreak:"break-all",marginBottom:0,fontSize:12},ellipsis:{rows:2,expandable:!0,symbol:"展开"},children:e})},{title:"Request ID",dataIndex:"id",width:200,render:e=>(0,a.jsx)(A,{copyable:!0,code:!0,style:{fontSize:12},children:e.slice(0,8)})}];return i&&0===t.length?(0,a.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,a.jsx)(o.A,{active:!0,title:!0,paragraph:{rows:1}}),(0,a.jsx)(o.A,{active:!0,paragraph:{rows:12}})]}):(0,a.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,a.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",flexWrap:"wrap",gap:12},children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h1",{className:"pageTitle",children:e("nav.systemLogs")}),(0,a.jsx)("p",{className:"pageDesc",children:"查看 API 异常、模型健康检查失败、PDF 降级等运行时问题。"})]}),(0,a.jsxs)(c.A,{children:[(0,a.jsx)(d.Ay,{icon:(0,a.jsx)(f.A,{}),loading:i,onClick:()=>void N(),children:"刷新"}),(0,a.jsx)(h.A,{title:"确认清空所有错误日志?",onConfirm:()=>{(async()=>{await (0,v.hH)(),n.Ay.success("已清空"),await N()})()},children:(0,a.jsx)(d.Ay,{danger:!0,icon:(0,a.jsx)(y.A,{}),children:"清空日志"})})]})]}),(0,a.jsx)(p.A,{type:"info",showIcon:!0,message:(0,a.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[(0,a.jsx)("span",{children:"日志保存在本机 ~/.customize-agent/logs/errors.jsonl,最多读取最近 500 条。"}),(0,a.jsx)(d.Ay,{type:"link",size:"small",icon:I?(0,a.jsx)(m.A,{}):(0,a.jsx)(w.A,{}),onClick:()=>C(!I),style:{padding:"0 4px"},children:I?"收起":"展开"})]}),description:I?"系统自动记录未捕获的异常、API 错误、模型健康检查失败等运行时问题。日志文件超过 2MB 会自动轮转。":void 0}),(0,a.jsx)(g.A.Search,{allowClear:!0,placeholder:"搜索 requestId / source / function / message / stack",value:S,onChange:e=>z(e.target.value),style:{maxWidth:480}}),(0,a.jsx)(u.A,{rowKey:"id",loading:i,dataSource:B,columns:O,size:"middle",locale:{emptyText:(0,a.jsx)(x.A,{description:"暂无错误日志"})},pagination:{pageSize:20,showSizeChanger:!0,showTotal:e=>"共 ".concat(e," 条")},expandable:{expandedRowRender:e=>(0,a.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:8,padding:"8px 0"},children:[e.request&&(0,a.jsxs)("div",{children:[(0,a.jsx)(A,{strong:!0,style:{fontSize:12,marginBottom:4,display:"block"},children:"Request"}),(0,a.jsx)("pre",{style:{whiteSpace:"pre-wrap",wordBreak:"break-all",margin:0,padding:10,background:"var(--colorFillAlter)",borderRadius:8,fontSize:12,lineHeight:1.5},children:JSON.stringify(e.request,null,2)})]}),void 0!==e.meta&&(0,a.jsxs)("div",{children:[(0,a.jsx)(A,{strong:!0,style:{fontSize:12,marginBottom:4,display:"block"},children:"Meta"}),(0,a.jsx)("pre",{style:{whiteSpace:"pre-wrap",wordBreak:"break-all",margin:0,padding:10,background:"var(--colorFillAlter)",borderRadius:8,fontSize:12,lineHeight:1.5},children:JSON.stringify(e.meta,null,2)})]}),e.stack&&(0,a.jsxs)("div",{children:[(0,a.jsx)(A,{strong:!0,style:{fontSize:12,marginBottom:4,display:"block"},children:"Stack"}),(0,a.jsx)("pre",{style:{whiteSpace:"pre-wrap",wordBreak:"break-all",margin:0,padding:10,background:"var(--colorFillAlter)",borderRadius:8,fontSize:12,lineHeight:1.5,maxHeight:300,overflow:"auto"},children:e.stack})]})]})}})]})}},92123:(e,t)=>{"use strict";t.A={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z"}}]},name:"up",theme:"outlined"}},96651:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var a=r(97109),s=r(92123),i=r(88483);function n(){return(n=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var a in r)Object.prototype.hasOwnProperty.call(r,a)&&(e[a]=r[a])}return e}).apply(this,arguments)}let l=a.forwardRef((e,t)=>a.createElement(i.A,n({},e,{ref:t,icon:s.A})))},99811:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var a=r(97109),s=r(14995),i=r(88483);function n(){return(n=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var a in r)Object.prototype.hasOwnProperty.call(r,a)&&(e[a]=r[a])}return e}).apply(this,arguments)}let l=a.forwardRef((e,t)=>a.createElement(i.A,n({},e,{ref:t,icon:s.A})))}},e=>{e.O(0,[433,576,195,985,150,289,512,636,593,792],()=>e(e.s=39214)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[979],{14995:(e,t)=>{"use strict";t.A={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M909.1 209.3l-56.4 44.1C775.8 155.1 656.2 92 521.9 92 290 92 102.3 279.5 102 511.5 101.7 743.7 289.8 932 521.9 932c181.3 0 335.8-115 394.6-276.1 1.5-4.2-.7-8.9-4.9-10.3l-56.7-19.5a8 8 0 00-10.1 4.8c-1.8 5-3.8 10-5.9 14.9-17.3 41-42.1 77.8-73.7 109.4A344.77 344.77 0 01655.9 829c-42.3 17.9-87.4 27-133.8 27-46.5 0-91.5-9.1-133.8-27A341.5 341.5 0 01279 755.2a342.16 342.16 0 01-73.7-109.4c-17.9-42.4-27-87.4-27-133.9s9.1-91.5 27-133.9c17.3-41 42.1-77.8 73.7-109.4 31.6-31.6 68.4-56.4 109.3-73.8 42.3-17.9 87.4-27 133.8-27 46.5 0 91.5 9.1 133.8 27a341.5 341.5 0 01109.3 73.8c9.9 9.9 19.2 20.4 27.8 31.4l-60.2 47a8 8 0 003 14.1l175.6 43c5 1.2 9.9-2.6 9.9-7.7l.8-180.9c-.1-6.6-7.8-10.3-13-6.2z"}}]},name:"reload",theme:"outlined"}},39214:(e,t,r)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/system/logs",function(){return r(91698)}])},91698:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>k});var a=r(65321),s=r(97109),i=r(35292),n=r(9137),l=r(11702),o=r(88762),c=r(33442),d=r(85114),h=r(26171),p=r(85493),g=r(7576),u=r(21289),x=r(84253),f=r(99811),y=r(58209),m=r(96651),w=r(60470),j=r(79059),v=r(6578);let{Text:A,Paragraph:b}=i.A;function k(){let e=(0,j.Vr)(),[t,r]=(0,s.useState)([]),[i,k]=(0,s.useState)(!0),[S,z]=(0,s.useState)(""),[I,C]=(0,s.useState)(!1),N=async()=>{k(!0);try{r((await (0,v.oH)(500)).logs)}catch(e){n.Ay.error(e instanceof Error?e.message:"加载日志失败")}finally{k(!1)}};(0,s.useEffect)(()=>{N()},[]);let B=(0,s.useMemo)(()=>{let e=S.trim().toLowerCase();return e?t.filter(t=>[t.id,t.level,t.source,t.functionName,t.message,t.stack].filter(Boolean).some(t=>String(t).toLowerCase().includes(e))):t},[S,t]),O=[{title:"序号",key:"index",width:70,render:(e,t,r)=>r+1},{title:"时间",dataIndex:"createdAt",width:170,render:e=>new Date(e).toLocaleString()},{title:"级别",dataIndex:"level",width:80,render:e=>(0,a.jsx)(l.A,{color:"error"===e?"error":"warn"===e?"warning":"blue",style:{margin:0},children:e})},{title:"来源",dataIndex:"source",width:200,render:e=>(0,a.jsx)(A,{code:!0,style:{fontSize:12},children:e})},{title:"函数",dataIndex:"functionName",width:160,render:e=>e?(0,a.jsx)(A,{code:!0,style:{fontSize:12},children:e}):(0,a.jsx)(A,{type:"secondary",children:"-"})},{title:"错误信息",dataIndex:"message",render:e=>(0,a.jsx)(b,{style:{maxWidth:480,overflowWrap:"anywhere",wordBreak:"break-all",marginBottom:0,fontSize:12},ellipsis:{rows:2,expandable:!0,symbol:"展开"},children:e})},{title:"Request ID",dataIndex:"id",width:200,render:e=>(0,a.jsx)(A,{copyable:!0,code:!0,style:{fontSize:12},children:e.slice(0,8)})}];return i&&0===t.length?(0,a.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,a.jsx)(o.A,{active:!0,title:!0,paragraph:{rows:1}}),(0,a.jsx)(o.A,{active:!0,paragraph:{rows:12}})]}):(0,a.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,a.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",flexWrap:"wrap",gap:12},children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h1",{className:"pageTitle",children:e("nav.systemLogs")}),(0,a.jsx)("p",{className:"pageDesc",children:"查看 API 异常、模型健康检查失败、PDF 降级等运行时问题。"})]}),(0,a.jsxs)(c.A,{children:[(0,a.jsx)(d.Ay,{icon:(0,a.jsx)(f.A,{}),loading:i,onClick:()=>void N(),children:"刷新"}),(0,a.jsx)(h.A,{title:"确认清空所有错误日志?",onConfirm:()=>{(async()=>{await (0,v.hH)(),n.Ay.success("已清空"),await N()})()},children:(0,a.jsx)(d.Ay,{danger:!0,icon:(0,a.jsx)(y.A,{}),children:"清空日志"})})]})]}),(0,a.jsx)(p.A,{type:"info",showIcon:!0,message:(0,a.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[(0,a.jsx)("span",{children:"日志保存在本机 ~/.customize-agent/logs/errors.jsonl,最多读取最近 500 条。"}),(0,a.jsx)(d.Ay,{type:"link",size:"small",icon:I?(0,a.jsx)(m.A,{}):(0,a.jsx)(w.A,{}),onClick:()=>C(!I),style:{padding:"0 4px"},children:I?"收起":"展开"})]}),description:I?"系统自动记录未捕获的异常、API 错误、模型健康检查失败等运行时问题。日志文件超过 2MB 会自动轮转。":void 0}),(0,a.jsx)(g.A.Search,{allowClear:!0,placeholder:"搜索 requestId / source / function / message / stack",value:S,onChange:e=>z(e.target.value),style:{maxWidth:480}}),(0,a.jsx)(u.A,{rowKey:"id",loading:i,dataSource:B,columns:O,size:"middle",locale:{emptyText:(0,a.jsx)(x.A,{description:"暂无错误日志"})},pagination:{pageSize:20,showSizeChanger:!0,showTotal:e=>"共 ".concat(e," 条")},expandable:{expandedRowRender:e=>(0,a.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:8,padding:"8px 0"},children:[e.request&&(0,a.jsxs)("div",{children:[(0,a.jsx)(A,{strong:!0,style:{fontSize:12,marginBottom:4,display:"block"},children:"Request"}),(0,a.jsx)("pre",{style:{whiteSpace:"pre-wrap",wordBreak:"break-all",margin:0,padding:10,background:"var(--colorFillAlter)",borderRadius:8,fontSize:12,lineHeight:1.5},children:JSON.stringify(e.request,null,2)})]}),void 0!==e.meta&&(0,a.jsxs)("div",{children:[(0,a.jsx)(A,{strong:!0,style:{fontSize:12,marginBottom:4,display:"block"},children:"Meta"}),(0,a.jsx)("pre",{style:{whiteSpace:"pre-wrap",wordBreak:"break-all",margin:0,padding:10,background:"var(--colorFillAlter)",borderRadius:8,fontSize:12,lineHeight:1.5},children:JSON.stringify(e.meta,null,2)})]}),e.stack&&(0,a.jsxs)("div",{children:[(0,a.jsx)(A,{strong:!0,style:{fontSize:12,marginBottom:4,display:"block"},children:"Stack"}),(0,a.jsx)("pre",{style:{whiteSpace:"pre-wrap",wordBreak:"break-all",margin:0,padding:10,background:"var(--colorFillAlter)",borderRadius:8,fontSize:12,lineHeight:1.5,maxHeight:300,overflow:"auto"},children:e.stack})]})]})}})]})}},92123:(e,t)=>{"use strict";t.A={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z"}}]},name:"up",theme:"outlined"}},96651:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var a=r(97109),s=r(92123),i=r(88483);function n(){return(n=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var a in r)Object.prototype.hasOwnProperty.call(r,a)&&(e[a]=r[a])}return e}).apply(this,arguments)}let l=a.forwardRef((e,t)=>a.createElement(i.A,n({},e,{ref:t,icon:s.A})))},99811:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var a=r(97109),s=r(14995),i=r(88483);function n(){return(n=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var a in r)Object.prototype.hasOwnProperty.call(r,a)&&(e[a]=r[a])}return e}).apply(this,arguments)}let l=a.forwardRef((e,t)=>a.createElement(i.A,n({},e,{ref:t,icon:s.A})))}},e=>{e.O(0,[433,576,195,985,150,289,861,636,593,792],()=>e(e.s=39214)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ self.__BUILD_MANIFEST=function(s,e,t,c,a,n,d,i,r,u,o,k,b,f,g,h,l,j,m){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:0,errorRate:1e-4,numBits:0,numHashes:b,bitArray:[]},__routerFilterDynamic:{numItems:r,errorRate:1e-4,numBits:r,numHashes:b,bitArray:[]},"/":[s,e,f,g,"static/chunks/pages/index-a2a24e9602e7ea52.js"],"/_error":["static/chunks/pages/_error-282257fbdcc167b4.js"],"/asset-library":[s,e,n,"static/chunks/749-83476f9bcd014a5a.js","static/chunks/pages/asset-library-e9ddfe1cbaac42d9.js"],"/context/long-term":[s,e,t,c,a,n,d,i,h,"static/chunks/pages/context/long-term-6b9a9683a4d6ea86.js"],"/context/short-term":[s,e,t,c,a,n,d,i,h,"static/chunks/pages/context/short-term-6078efae6e3a905c.js"],"/document-roles":[s,e,t,c,i,"static/chunks/496-4fb9a063790e65ff.js","static/chunks/pages/document-roles-cb222be93cfd561d.js"],"/documents":[s,e,t,c,i,u,l,"static/chunks/53-d534407b1397d66a.js","static/chunks/pages/documents-fc1a4fdb681f49a2.js"],"/guide":[s,e,l,"static/chunks/20-00147a779147a5a4.js","static/chunks/pages/guide-7d15d3d3ddb0205e.js"],"/knowledge":["static/chunks/pages/knowledge-905248d8dcb15453.js"],"/knowledge/file-detail":[s,e,t,a,n,d,u,j,o,"static/chunks/pages/knowledge/file-detail-97c77dfaf472a4b6.js"],"/knowledge/files":[s,e,t,a,n,d,o,"static/chunks/pages/knowledge/files-75a33100a1b3b5b5.js"],"/knowledge/manage":[s,e,u,"static/chunks/788-7f7359a830e3f4fd.js","static/chunks/pages/knowledge/manage-25eb1a993b155450.js"],"/knowledge/search":[s,e,t,u,m,o,"static/chunks/pages/knowledge/search-afb423fc22eb623b.js"],"/models":[s,e,t,c,a,i,m,"static/chunks/647-d5e08fda405f7059.js","static/chunks/pages/models-d5e80645dc4a61b1.js"],"/overview":[s,e,f,g,"static/chunks/pages/overview-1260176045ed5f7a.js"],"/prompt":[s,e,t,c,a,"static/chunks/525-5d947137d894f5fe.js","static/chunks/pages/prompt-9b869fbe3463020d.js"],"/settings":[s,e,"static/chunks/pages/settings-fa9d6a56898ba678.js"],"/system/logs":[s,t,c,a,n,d,j,"static/chunks/pages/system/logs-3826fa44a76b12fc.js"],sortedPages:["/","/_app","/_error","/asset-library","/context/long-term","/context/short-term","/document-roles","/documents","/guide","/knowledge","/knowledge/file-detail","/knowledge/files","/knowledge/manage","/knowledge/search","/models","/overview","/prompt","/settings","/system/logs"]}}("static/chunks/433-233659be69169c19.js","static/chunks/787-c18af810af3433f6.js","static/chunks/576-6699fed6c88502fe.js","static/chunks/195-2c0168eacab722d2.js","static/chunks/985-4b4a3ed36ada16eb.js","static/chunks/150-134099bf526e9292.js","static/chunks/289-30e7c55f49a896b7.js","static/chunks/455-97ad88d6604f54b7.js",0,"static/chunks/506-93f730bc149d0dce.js","static/css/09be1fdeab8595ab.css",1e-4,NaN,"static/chunks/694-2d545cfbb9779f2c.js","static/chunks/795-d8fb7a0420512701.js","static/chunks/932-2f195f4200ce9378.js","static/chunks/412-b9c854c6a76db67d.js","static/chunks/861-91cbdd34b8e23151.js","static/chunks/938-45efd516bb130bd5.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
package/package.json CHANGED
@@ -1,10 +1,17 @@
1
1
  {
2
2
  "name": "@customize-agent/server",
3
- "version": "4.0.31",
3
+ "version": "4.0.33",
4
4
  "description": "Customize Agent Web 管理控制台",
5
5
  "exports": {
6
6
  "./package.json": "./package.json"
7
7
  },
8
+ "scripts": {
9
+ "dev": "next dev -p 17321",
10
+ "build": "node -e \"require('fs').rmSync('.next', { recursive: true, force: true, maxRetries: 5, retryDelay: 200 })\" && next build && node scripts/verify-next-static.js && node -e \"require('fs').rmSync('.next/cache', { recursive: true, force: true, maxRetries: 5, retryDelay: 200 })\"",
11
+ "prestart": "node scripts/verify-next-static.js",
12
+ "start": "next start -p 17321",
13
+ "lint": "eslint src/"
14
+ },
8
15
  "files": [
9
16
  ".next/BUILD_ID",
10
17
  ".next/app-build-manifest.json",
@@ -32,6 +39,9 @@
32
39
  "dependencies": {
33
40
  "@ant-design/icons": "^6.3.2",
34
41
  "@napi-rs/canvas": "^0.1.82",
42
+ "@customize-agent/knowledge": "workspace:^",
43
+ "@customize-agent/llm": "workspace:^",
44
+ "@customize-agent/runtime": "workspace:^",
35
45
  "antd": "^6.5.0",
36
46
  "better-sqlite3": "^12.10.0",
37
47
  "formidable": "^3.5.4",
@@ -48,10 +58,7 @@
48
58
  "react-dom": "19.2.7",
49
59
  "tesseract.js": "^7.0.0",
50
60
  "typescript": "^6.0.3",
51
- "xlsx": "^0.18.5",
52
- "@customize-agent/knowledge": "^4.0.12",
53
- "@customize-agent/llm": "^3.0.6",
54
- "@customize-agent/runtime": "^3.0.8"
61
+ "xlsx": "^0.18.5"
55
62
  },
56
63
  "devDependencies": {
57
64
  "@tailwindcss/postcss": "^4.3.2",
@@ -63,12 +70,5 @@
63
70
  "postcss": "^8.4.49",
64
71
  "sass": "^1.101.0",
65
72
  "tailwindcss": "^4.3.2"
66
- },
67
- "scripts": {
68
- "dev": "next dev -p 17321",
69
- "build": "node -e \"require('fs').rmSync('.next', { recursive: true, force: true, maxRetries: 5, retryDelay: 200 })\" && next build && node scripts/verify-next-static.js && node -e \"require('fs').rmSync('.next/cache', { recursive: true, force: true, maxRetries: 5, retryDelay: 200 })\"",
70
- "prestart": "node scripts/verify-next-static.js",
71
- "start": "next start -p 17321",
72
- "lint": "eslint src/"
73
73
  }
74
- }
74
+ }
@@ -1,76 +0,0 @@
1
- "use strict";exports.id=3445,exports.ids=[3445],exports.modules={2323:(a,b,c)=>{c.d(b,{I:()=>f});var d=c(96770);let e=null;function f(){return e||(e=new d.ConfigStore),e}},23328:(a,b,c)=>{c.d(b,{Qh:()=>l,VS:()=>p,Yy:()=>o,aY:()=>n});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021);let j=null;function k(){return g.join(h.homedir(),".customize-agent")}function l(){return j||(j=new d.MultiProjectManager(k())),j}function m(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))&&(b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function n(){let a=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(a&&i.existsSync(a)&&!m(a))return g.resolve(a);let b=function(){let a=g.join(k(),"projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!m(a))}finally{b.close()}}();return b.length>0?b[0]:process.env.INIT_CWD&&!m(process.env.INIT_CWD)?process.env.INIT_CWD:g.resolve(process.cwd(),"../..")}function o(a,b={}){let c=new Map;for(let b of function(a){let b=g.join(h.homedir(),".customize-agent","projects",(0,d.computeProjectId)(g.resolve(a)),"kb.db");if(!i.existsSync(b))return[];let c=new d.IndexStateStore(b);try{return c.listRecords().map(a=>({...a,matchedBy:"metadata"}))}finally{c.close()}}(a))c.set(b.relativePath,b);for(let b of function(a){let b=g.join(a,"knowledgeBase");if(!i.existsSync(b))return[];let c=[],d=a=>{for(let e of i.readdirSync(a,{withFileTypes:!0})){let f=g.join(a,e.name);if(e.isDirectory()){d(f);continue}if(e.name.endsWith(".source.txt"))continue;let h=i.statSync(f),j=g.relative(b,f).split(g.sep).join("/");c.push({relativePath:j,category:j.includes("表格数据/")?"spreadsheet":j.includes("图片素材/")?"image":j.includes("图纸文件/")?"cad":j.includes("文档资料/")?"document":"other",format:g.extname(j).slice(1).toLowerCase()||"text",contentHash:"",fileSize:h.size,mtime:h.mtimeMs,chunkCount:0,collectionName:"",indexedAt:0,lastVerifiedAt:0,status:"disk",matchedBy:"disk"})}};return d(b),c}(a)){let a=c.get(b.relativePath);c.set(b.relativePath,a?{...a,fileSize:b.fileSize,mtime:b.mtime,matchedBy:"metadata"}:b)}return Array.from(c.values()).filter(a=>!b.category||a.category===b.category).sort((a,b)=>b.mtime-a.mtime||a.relativePath.localeCompare(b.relativePath,"zh-CN"))}async function p(a,b={}){let c=(b.query||"").trim(),d=Math.max(1,Math.min(500,b.limit??50)),e=new Map,f=o(a,{category:b.category});for(let a of f)(!c||`${a.relativePath}
2
- ${a.category}
3
- ${a.format}
4
- ${a.status}`.toLowerCase().includes(c.toLowerCase()))&&e.set(a.relativePath,{...a,matchedBy:c?"path":a.matchedBy});if(c&&!1!==b.includeContent)try{for(let b of(await l().search(a,c,{limit:Math.max(20,d)})).results){let a=b.filePath,c=e.get(a)||f.find(b=>b.relativePath===a);e.set(a,{...c||{relativePath:a,category:"content",format:"knowledge",fileSize:0,mtime:0,chunkCount:0,indexedAt:0,lastVerifiedAt:0,status:"active"},matchedBy:"content",score:b.score})}}catch{}let g=Array.from(e.values()).sort((a,b)=>{let c=a=>"content"===a.matchedBy?3:"path"===a.matchedBy?2:+("metadata"===a.matchedBy);return c(b)-c(a)||(b.score??0)-(a.score??0)||b.mtime-a.mtime||a.relativePath.localeCompare(b.relativePath,"zh-CN")});return{files:g.slice(0,d),total:g.length}}},57367:(a,b,c)=>{c.d(b,{Co:()=>A,EK:()=>C,ER:()=>D,_q:()=>x,py:()=>B,uD:()=>y,ug:()=>z});var d=c(73024),e=c(48161),f=c(76760);let g=[{id:"required_fact",name:"必需事实",description:"检查指定事实字段是否存在。",builtIn:!0,defaultLevel:"warning",evaluator:{subject:"fact",operator:"exists"}},{id:"required_chapter",name:"必需章节",description:"检查指定章节是否存在。",builtIn:!0,defaultLevel:"error",evaluator:{subject:"chapter",operator:"exists"}},{id:"required_file_role",name:"必需文件角色",description:"检查项目角色配置是否绑定指定文件角色。",builtIn:!0,defaultLevel:"error",evaluator:{subject:"file_role",operator:"exists"}},{id:"required_prompt_role",name:"必需提示词角色",description:"检查项目角色配置是否绑定指定提示词角色。",builtIn:!0,defaultLevel:"warning",evaluator:{subject:"prompt_role",operator:"exists"}},{id:"source_required",name:"事实必须有来源",description:"检查结构化事实是否都有资料来源。",builtIn:!0,defaultLevel:"warning",evaluator:{subject:"source",operator:"all_have_source"}},{id:"forbidden_text",name:"禁止出现文本",description:"检查全文是否出现禁用文本。",builtIn:!0,defaultLevel:"error",evaluator:{subject:"document",operator:"not_contains"}},{id:"min_chapter_length",name:"章节最低字数",description:"检查指定章节是否达到最低字数。",builtIn:!0,defaultLevel:"warning",evaluator:{subject:"chapter",operator:"min_length"}},{id:"table_required",name:"必须有表格",description:"检查文档是否包含结构化表格。",builtIn:!0,defaultLevel:"warning",evaluator:{subject:"table",operator:"min_count",min:1}}],h=new Map(g.map(a=>[a.id,a])),i=["document","chapter","fact","file_role","prompt_role","table","image","source"],j=["exists","contains","not_contains","regex_match","regex_not_match","min_count","min_length","all_have_source","image_caption_required","table_explanation_required"];function k(){let a=f.join(e.homedir(),".customize-agent");return d.mkdirSync(a,{recursive:!0}),a}function l(){return f.join(k(),"document-specs.json")}function m(){return f.join(k(),"document-gate-types.json")}function n(a){return(a||`spec-${Date.now()}`).replace(/[^a-zA-Z0-9_-]/gu,"-").slice(0,80)}function o(a,b=""){return String(a||b).trim().slice(0,500)}function p(a=[]){return[...new Set(a.filter(Boolean))]}function q(a,b){let c=a||b||{subject:"document",operator:"contains"},d=i.includes(c.subject)?c.subject:"document",e=j.includes(c.operator)?c.operator:"contains",f=Number(c.min);return{subject:d,operator:e,target:o(c.target),value:o(c.value),min:Number.isFinite(f)&&f>0?f:void 0}}function r(a){let b=n(a.id||a.name||`gate-type-${Date.now()}`);if(h.has(b))throw Error("不能覆盖系统内置门禁类型");return{id:b,name:o(a.name,"自定义门禁类型"),description:o(a.description),builtIn:!1,defaultLevel:"warning"===a.defaultLevel||"info"===a.defaultLevel?a.defaultLevel:"error",evaluator:q(a.evaluator)}}function s(a){return{id:n(a.id),name:a.name||"未命名规范包",description:a.description||"",factFields:Array.isArray(a.factFields)?a.factFields.filter(a=>a.name).map(a=>({id:n(a.id),name:a.name,type:"auto",required:!!a.required,sourceRoleIds:p(Array.isArray(a.sourceRoleIds)?a.sourceRoleIds:[]),extractionHint:a.extractionHint||"",validationHint:a.validationHint||""})):[],chapterMode:"fixed"===a.chapterMode?"fixed":"dynamic",chapterRules:Array.isArray(a.chapterRules)?a.chapterRules.filter(a=>a.title).map((a,b)=>({id:n(a.id),title:a.title,required:!!a.required,order:Number.isFinite(a.order)?a.order:b,minWords:Number.isFinite(a.minWords)?a.minWords:0,requiredFactIds:p(Array.isArray(a.requiredFactIds)?a.requiredFactIds:[]),requiredFileRoleIds:p(Array.isArray(a.requiredFileRoleIds)?a.requiredFileRoleIds:[]),requiredPromptRoleIds:p(Array.isArray(a.requiredPromptRoleIds)?a.requiredPromptRoleIds:[]),generationHint:a.generationHint||""})):[],dynamicChapterRule:{source:["file_outline","file_role","fact_group","table_rows"].includes(a.dynamicChapterRule?.source)?a.dynamicChapterRule.source:"ai_plan",sourceRoleIds:p(Array.isArray(a.dynamicChapterRule?.sourceRoleIds)?a.dynamicChapterRule.sourceRoleIds:[]),minChapters:Number.isFinite(a.dynamicChapterRule?.minChapters)?a.dynamicChapterRule.minChapters:void 0,maxChapters:Number.isFinite(a.dynamicChapterRule?.maxChapters)?a.dynamicChapterRule.maxChapters:void 0,titleStrategy:["source_title","field_value","template"].includes(a.dynamicChapterRule?.titleStrategy||"")?a.dynamicChapterRule?.titleStrategy:"ai_summary",titleTemplate:a.dynamicChapterRule?.titleTemplate||"",minWordsPerChapter:Number.isFinite(a.dynamicChapterRule?.minWordsPerChapter)?a.dynamicChapterRule.minWordsPerChapter:void 0,requiredFactIds:p(Array.isArray(a.dynamicChapterRule?.requiredFactIds)?a.dynamicChapterRule.requiredFactIds:[]),requiredFileRoleIds:p(Array.isArray(a.dynamicChapterRule?.requiredFileRoleIds)?a.dynamicChapterRule.requiredFileRoleIds:[]),requiredPromptRoleIds:p(Array.isArray(a.dynamicChapterRule?.requiredPromptRoleIds)?a.dynamicChapterRule.requiredPromptRoleIds:[]),generationHint:a.dynamicChapterRule?.generationHint||""},gateRules:Array.isArray(a.gateRules)?a.gateRules.filter(a=>a.name).map(a=>{var b;let c=n(a.type||a.name||"custom_gate");return{id:n(a.id),name:a.name,type:c,level:"warning"===a.level||"info"===a.level?a.level:"error",target:a.target||"",value:a.value||"",evaluator:q((b={...a,type:c}).evaluator,h.get(b.type)?.evaluator)}}):[],wordTemplatePath:a.wordTemplatePath||"",builtIn:!!a.builtIn}}function t(){try{let a=l();if(!d.existsSync(a))return[];return JSON.parse(d.readFileSync(a,"utf-8")).map(s)}catch{return[]}}function u(a){d.writeFileSync(l(),JSON.stringify(a.map(s),null,2),"utf-8")}function v(){try{let a=m();if(!d.existsSync(a))return[];return JSON.parse(d.readFileSync(a,"utf-8")).map(r)}catch{return[]}}function w(a){d.writeFileSync(m(),JSON.stringify(a.map(r),null,2),"utf-8")}function x(){return[...new Map([...g,...v()].map(a=>[a.id,a])).values()]}function y(a){let b=r(a),c=v().filter(a=>a.id!==b.id);return c.push(b),w(c),b}function z(a){if(h.has(a))throw Error("系统内置门禁类型不可删除");w(v().filter(b=>b.id!==a))}function A(){return[...new Map(t().map(a=>[a.id,a])).values()]}function B(a){if(a)return t().find(b=>b.id===a)}function C(a){let b=s(a),c=t().filter(a=>a.id!==b.id);return c.push(b),u(c),b}function D(a){u(t().filter(b=>b.id!==a))}},73445:(a,b,c)=>{c.d(b,{Bh:()=>x,OX:()=>at,R1:()=>au,bV:()=>A,h0:()=>z,jG:()=>v,xm:()=>y});var d=c(73024),e=c(76760),f=c(15751),g=c(48161),h=c(95393),i=c(96770),j=c(23328),k=c(99842),l=c(2323),m=c(89952),n=c(57367);let o=[];function p(){let a=e.join(g.homedir(),".customize-agent");return d.mkdirSync(a,{recursive:!0}),a}function q(){return e.join(p(),"document-templates.json")}function r(a){return{...a,id:a.id.replace(/[^a-zA-Z0-9_-]/gu,"-").slice(0,80)||`template-${Date.now()}`,name:a.name||"未命名模板",description:a.description||"",category:a.category||"自定义",outputTitle:a.outputTitle||a.name||"业务文档",projectRoleConfigId:a.projectRoleConfigId||void 0,documentSpecId:a.documentSpecId||void 0,chapters:Array.isArray(a.chapters)&&a.chapters.length>0?a.chapters.map((a,b)=>({id:(a.id||`chapter-${b+1}`).replace(/[^a-zA-Z0-9_-]/gu,"-").slice(0,80),title:a.title||`第 ${b+1} 章`,purpose:a.purpose||"",queries:Array.isArray(a.queries)?a.queries.filter(Boolean):[],requiredFacts:Array.isArray(a.requiredFacts)?a.requiredFacts.filter(Boolean):[],sections:Array.isArray(a.sections)?a.sections.filter(Boolean):[],tableSections:Array.isArray(a.tableSections)?a.tableSections.filter(Boolean):[],tableRequirements:Array.isArray(a.tableRequirements)?a.tableRequirements.filter(Boolean):[],pinnedEvidenceFilePaths:Array.isArray(a.pinnedEvidenceFilePaths)?a.pinnedEvidenceFilePaths.filter(Boolean):[]})):a.documentSpecId?[]:[{id:"document",title:a.outputTitle||a.name||"业务文档",purpose:a.description||"",queries:[],requiredFacts:[]}],exportSettings:a.exportSettings,generationSettings:a.generationSettings,promptIds:Array.isArray(a.promptIds)?a.promptIds.filter(Boolean):[],boundFilePaths:Array.isArray(a.boundFilePaths)?a.boundFilePaths.filter(Boolean):[],promptBindings:Array.isArray(a.promptBindings)?a.promptBindings.filter(a=>a.promptId&&a.roleId):Array.isArray(a.promptIds)?a.promptIds.filter(Boolean).map(a=>({promptId:a,roleId:"chapter_generation"})):[],fileBindings:Array.isArray(a.fileBindings)?a.fileBindings.filter(a=>a.filePath&&a.roleId):Array.isArray(a.boundFilePaths)?a.boundFilePaths.filter(Boolean).map(a=>({filePath:a,roleId:"project_fact"})):[],builtIn:!1}}function s(){try{let a=q();if(!d.existsSync(a))return[];return JSON.parse(d.readFileSync(a,"utf-8")).map(r)}catch{return[]}}function t(a){d.writeFileSync(q(),JSON.stringify(a.map(r),null,2),"utf-8")}function u(a=[]){let b;if(0===a.length)return[];let c=[];try{let a=JSON.parse(d.readFileSync(e.join(p(),"prompts.json"),"utf-8"));b=Array.isArray(a.customPrompts)?a.customPrompts:[]}catch{b=[]}for(let f of a){let a=f.promptId;if(a.startsWith("custom:")){let d=b.find(b=>b.id===a);d&&c.push({id:a,roleId:f.roleId,name:d.name,content:d.content});continue}if(a.startsWith("file:")){let b=a.slice(5);d.existsSync(b)&&c.push({id:a,roleId:f.roleId,name:e.basename(e.dirname(b))||b,content:d.readFileSync(b,"utf-8")})}}return c}function v(){return[...o,...s()]}function w(a){return v().find(b=>b.id===a)}function x(a){let b=r(a);if(o.some(a=>a.id===b.id))throw Error("Built-in template cannot be overwritten");let c=s().filter(a=>a.id!==b.id);return c.push(b),t(c),b}async function y(a,b=(0,j.aY)()){let c=w(a),d=[];if(!c)return{issues:[{level:"error",message:"文档模板不存在或已删除"}],fileDiagnostics:[],promptDiagnostics:[],spec:void 0,config:void 0};let f=(0,m.XB)("prompt"),g=(0,m.XB)("file"),h=c.projectRoleConfigId?(0,m.Mu)(c.projectRoleConfigId):void 0;c.projectRoleConfigId||d.push({level:"error",message:"模板未绑定项目角色配置"}),c.projectRoleConfigId&&!h&&d.push({level:"error",message:"项目角色配置不存在或已删除"});let i=ac(c),k=ad(c);0===i.length&&d.push({level:"warning",message:"模板未绑定提示词角色,生成会缺少说明提示词约束"}),0===k.length&&d.push({level:"error",message:"模板未绑定知识库文件角色"});let l=c.documentSpecId?(0,n.py)(c.documentSpecId):void 0;c.documentSpecId&&!l&&d.push({level:"error",message:"文档规范包不存在或已删除"}),c.documentSpecId||d.push({level:"error",message:"模板未绑定文档规范包"}),l?.chapterMode==="fixed"&&0===l.chapterRules.filter(a=>a.required).length&&d.push({level:"warning",message:"固定章节模式未配置必需章节规则"}),l?.chapterMode==="dynamic"&&l.dynamicChapterRule.maxChapters&&l.dynamicChapterRule.minChapters&&l.dynamicChapterRule.maxChapters<l.dynamicChapterRule.minChapters&&d.push({level:"error",message:"动态章节规则的最多章节不能小于最少章节"});let o=e.resolve(b),p=await (0,j.Qh)().getProject(o);c.builtIn&&await p.incrementalIndex();let q=new Map((0,j.Yy)(o).map(a=>[a.relativePath,a])),r=k.map(a=>{let b=g.find(b=>b.id===a.roleId),c=q.get(a.filePath);return b||d.push({level:"error",message:`文件角色不存在:${a.roleId}`}),c||d.push({level:"error",message:`知识库文件不存在:${a.filePath}`}),c&&("disk"===c.status||0===c.indexedAt)&&d.push({level:"warning",message:`知识库文件存在但尚未完成索引:${a.filePath}`}),c?.status==="error"&&d.push({level:"warning",message:`知识库文件索引失败:${a.filePath}${c.errorMessage?`,${c.errorMessage}`:""}`}),c&&0===c.chunkCount&&d.push({level:"warning",message:`知识库文件暂无可检索内容切片:${a.filePath}`}),{...a,roleName:b?.name,exists:!!c,indexed:!!(c&&c.indexedAt>0&&"disk"!==c.status),chunkCount:c?.chunkCount??0,vectorReady:!!(c&&c.chunkCount>0)}}),s=u(i),t=i.map(a=>{let b=f.find(b=>b.id===a.roleId),c=s.find(b=>b.id===a.promptId);return b||d.push({level:"error",message:`提示词角色不存在:${a.roleId}`}),c||d.push({level:"error",message:`提示词不存在:${a.promptId}`}),c&&!c.content.trim()&&d.push({level:"warning",message:`提示词为空:${c.name}`}),{...a,roleName:b?.name,promptTitle:c?.name,exists:!!c,contentLength:c?.content.length??0}});return{templateId:a,projectRoleConfigId:c.projectRoleConfigId,documentSpecId:c.documentSpecId,fileDiagnostics:r,promptDiagnostics:t,spec:l?{id:l.id,name:l.name,factFields:l.factFields.length,gateRules:l.gateRules.length}:void 0,issues:d}}function z(a){if(o.some(b=>b.id===a))throw Error("Built-in template cannot be deleted");t(s().filter(b=>b.id!==a))}function A(a){let b=w(a);if(!b)throw Error("Document template not found");let c=r({...b,id:`${b.id}-copy-${Date.now()}`,name:`${b.name} Copy`,builtIn:!1}),d=s();return d.push(c),t(d),c}let B=/\b(?:TDbPipe|TDbPipeValve|TDbPipeFitting|TDbWellh|AcDb\w+|Dwg\w+|Polyline|Hatch|Layer|BlockReference)\b/giu,C=/[\w\u4e00-\u9fa5()()\-—_+\s]+\.(?:pdf|dwg|docx?|xlsx?|xls|csv|png|jpe?g|webp)\b/giu;function D(a,b=0){let c="drawing"===a.processingType||a.roleId?.includes("drawing")?"图纸资料":"table"===a.processingType||a.roleId?.includes("bill")?"清单资料":"rule"===a.processingType||a.roleId?.includes("tender")?"招标资料":"项目资料";return`${c}片段${b+1}${a.sectionTitle?`(${a.sectionTitle.replace(C,"").slice(0,40)})`:""}`}function E(a){return[...a].filter(a=>{let b=a.charCodeAt(0);return 9===b||10===b||13===b||b>=32}).join("").replace(B,"").replace(C,"").replace(/\b(?:Model|Layout\d*|Entity|Handle|ObjectId|ByLayer|Continuous)\b/giu,"").replace(/[\t ]{2,}/gu," ").replace(/\n{3,}/gu,"\n\n").trim()}function F(a,b){let c=new Set;return a.map(a=>({...a,content:function(a,b){let c=e.extname(a).toLowerCase(),d=E(b);return d.length>20?d.slice(0,4e3):[".pdf",".doc",".docx",".xls",".xlsx",".png",".jpg",".jpeg",".webp",".dwg"].includes(c)?`该资料为${c.replace(".","").toUpperCase()}格式附件,仅作为内部事实提取依据;正式正文不得引用文件名。`:d.slice(0,4e3)}(a.filePath,a.content)})).sort((a,b)=>b.score-a.score).filter(a=>{let b=`${a.filePath}:${a.content.slice(0,100)}`;return!c.has(b)&&(c.add(b),!0)}).slice(0,b)}function G(a,b,c,f,g){let h=e.isAbsolute(a)?a:d.existsSync(e.join(g,"knowledgeBase",a))?e.join(g,"knowledgeBase",a):e.join(g,a);if(!d.existsSync(h)||d.statSync(h).isDirectory())return[];let i=e.extname(h).toLowerCase();return(([".pdf",".doc",".docx",".xls",".xlsx",".png",".jpg",".jpeg",".webp"].includes(i)?`资料文件:${e.basename(a)},文件类型:${i}。`:d.readFileSync(h,"utf-8")).match(/[\s\S]{1,1800}/gu)||[]).slice(0,12).map((d,e)=>({chapterId:f,filePath:a,score:1,content:d,roleId:b,processingType:c,sectionTitle:`文件片段 ${e+1}`,source:"bound-file-direct"}))}function H(a,b=0){return`- ${D(a,b)}:${E(a.content).replace(/\s+/gu," ").slice(0,260)}`}function I(a,b){let c=b.slice(0,16),d=new Map;for(let c of b){let b=function(a,b){let c=e.extname(a).toLowerCase();return"drawing"===b||/地图|图纸|map/iu.test(a)?"map":[".png",".jpg",".jpeg",".webp"].includes(c)?"image":"table"===b?"table":[".xls",".xlsx",".csv"].includes(c)?"spreadsheet":[".pdf",".doc",".docx"].includes(c)?"document":c&&![".md",".txt"].includes(c)?"attachment":"text"}(c.filePath,c.processingType),f=d.get(c.filePath)||{filePath:c.filePath,kind:b,roleId:c.roleId,processingType:c.processingType,score:c.score,semanticTitle:function(a,b){let c=e.basename(a).replace(/\.[^.]+$/u,"");return"map"===b?c.replace(/^地图图纸-/u,"").replace(/-完整地图图纸$/u,"完整地图图纸"):"image"===b?c.replace(/-/gu," "):"spreadsheet"===b?`${c}(结构化表格)`:"document"===b?`${c}(文档附件)`:c}(c.filePath,b),contentUse:"map"===b?"作为地图/图纸证据,用于说明空间关系、区域划分、点位、路线或专业布置。":"image"===b?"作为图片证据,用于视觉说明、参考图或章节配图。":"spreadsheet"===b||"table"===b?"作为表格/数据证据,用于字段对比、清单、数量和结构化结论。":"document"===b?"作为 PDF/Word 文档证据,用于提取规范、事实、说明、约束和附件来源。":"attachment"===b?"作为附件证据,用于提供补充来源、文件级约束或可追溯引用。":"作为文本证据,用于事实抽取、章节论据和来源引用。",relatedFacts:[],relatedChapters:[],snippets:[]};f.score=Math.max(f.score,c.score),f.relatedFacts=[...new Set([...f.relatedFacts,...function(a,b){let c=`${a.filePath}
5
- ${a.content}`;return[...new Set([...b?.requiredFacts||[],"表格数据","规范要求","项目事实","附件资料","图纸资料","图片资料"].filter(b=>L(a,b)||c.includes(b)))]}(c,a)])],f.relatedChapters=[...new Set([...f.relatedChapters,a.title])];let g=c.content.replace(/\s+/gu," ").slice(0,320);g&&f.snippets.length<3&&!f.snippets.includes(g)&&f.snippets.push(g),d.set(c.filePath,f)}let f=[...d.values()].sort((a,b)=>b.score-a.score),g={map:[],image:[],table:[],document:[],spreadsheet:[],text:[],attachment:[]};for(let a of f)g[a.kind].push(a);let h=[`内部资料包:文本片段 ${c.length} 条、结构化资料 ${f.length} 个。`,`资料类型分布:文本 ${g.text.length}、文档 ${g.document.length}、表格/清单 ${g.spreadsheet.length+g.table.length}、图片 ${g.image.length}、图纸 ${g.map.length}、其他 ${g.attachment.length}。`,"正文必须只写资料中的工程事实、参数、数量、做法和控制措施,不得出现文件名、来源清单或后台证据描述。"].filter(Boolean).join("\n");return{chapterId:a.id,textEvidence:c,resources:f,byKind:g,summary:h}}function J(a){let b=a.resources.slice(0,20).map((a,b)=>[`- 资料:${D(a,b)}`,` 资料类型:${a.kind}`,` 正文用途:${a.contentUse}`,a.relatedFacts.length?` 可用事实方向:${a.relatedFacts.join("、")}`:"",a.snippets.length?` 可用内容:${a.snippets.map(E).filter(Boolean).join(" / ")}`:""].filter(Boolean).join("\n")).join("\n"),c=a.textEvidence.map((a,b)=>`${D(a,b)}
6
- 类型:${a.processingType||"reference"}
7
- 章节/片段:${a.sectionTitle?.replace(C,"")||"资料片段"}
8
- 内容:${E(a.content).replace(/\s+/gu," ").slice(0,900)}`).join("\n\n---\n\n");return[a.summary,b?`结构化资料:
9
- ${b}`:"",c?`文本/附件片段:
10
- ${c}`:""].filter(Boolean).join("\n\n")}function K(a,b,c=[]){if(!b)return a.chapters;if("fixed"===b.chapterMode)return b.chapterRules.length>0?[...b.chapterRules].sort((a,b)=>a.order-b.order).map(b=>{let c=a.chapters.find(a=>a.id===b.id||a.title===b.title);return{id:b.id,title:b.title,purpose:b.generationHint||c?.purpose||b.title,requiredFacts:b.requiredFactIds||c?.requiredFacts||[],sections:c?.sections||[],queries:[b.title,b.generationHint||"",...b.requiredFactIds||[],...c?.sections||[]].filter(Boolean),pinnedEvidenceFilePaths:c?.pinnedEvidenceFilePaths||[]}}):a.chapters;let d=b.dynamicChapterRule,f=Math.max(1,Math.min(20,d.minChapters||3)),g=Math.max(f,Math.min(30,d.maxChapters||Math.max(f,8))),h=new Set([...d.sourceRoleIds||[],...d.requiredFileRoleIds||[]]),i=c.filter(a=>0===h.size||a.roleId&&h.has(a.roleId)).filter((a,b,c)=>c.findIndex(b=>`${b.filePath}:${b.sectionTitle||""}`==`${a.filePath}:${a.sectionTitle||""}`)===b).slice(0,g).map((a,b)=>{let c=function(a,b,c){let d=(a.sectionTitle||e.basename(a.filePath).replace(/\.[^.]+$/u,"")||`资料片段 ${b+1}`).replace(/\s+/gu," ").slice(0,60);return c?c.replaceAll("{{index}}",String(b+1)).replaceAll("{{sourceTitle}}",d):d}(a,b,d.titleTemplate);return{id:`dynamic-${b+1}`,title:c,purpose:d.generationHint||`根据 ${a.filePath} 动态生成章节`,requiredFacts:d.requiredFactIds||[],queries:[c,a.filePath,a.sectionTitle||"",d.generationHint||""].filter(Boolean),pinnedEvidenceFilePaths:[a.filePath]}});if(i.length>=f)return i;let j=a.chapters.length>0?a.chapters.map(a=>a.title):["背景与目标","资料分析","结论与建议"];for(;i.length<f;){let a=i.length,b=j[a]||`动态章节 ${a+1}`;i.push({id:`dynamic-${a+1}`,title:b,purpose:d.generationHint||b,requiredFacts:d.requiredFactIds||[],queries:[b,d.generationHint||"",(d.sourceRoleIds||[]).filter(Boolean).join(" ")].filter(Boolean),pinnedEvidenceFilePaths:[]})}return i}function L(a,b){let c=`${a.filePath}
11
- ${a.content}`;return(function(a){let b=a.replace(/要求|计划|目标|标准|内容|信息|事实|依据|参数|范围|要点/gu,"");return[a,b].filter(Boolean)})(b).some(a=>c.includes(a))}function M(a,b){let c=K(a,b,[]).flatMap(a=>a.requiredFacts).map(a=>({id:a,name:a,required:!0,sourceRoleIds:[],extractionHint:""})),d=b?.factFields.map(a=>({id:a.id,name:a.name,required:a.required,sourceRoleIds:a.sourceRoleIds||[],extractionHint:a.extractionHint||""}))||[],e=new Map;for(let a of[...c,...d])e.set(a.id,{...e.get(a.id)||a,...a,required:a.required||e.get(a.id)?.required||!1});return[...e.values()]}function N(a,b){return(!b.sourceRoleIds?.length||!!(a.roleId&&b.sourceRoleIds.includes(a.roleId)))&&L(a,b.name)}function O(a){return a.toLowerCase()}function P(a,b){return(a||b).replace(/[^a-zA-Z0-9\u4e00-\u9fa5_-]/gu,"-").slice(0,80)||b}function Q(a){return"string"==typeof a?a:null==a?"":Array.isArray(a)?a.map(a=>Q(a)).filter(Boolean).join(";"):"object"==typeof a?Object.entries(a).map(([a,b])=>`${a}:${Q(b)}`).filter(Boolean).join(";"):String(a)}function R(a){return Array.isArray(a)?a.filter(a=>!!a&&"object"==typeof a&&!Array.isArray(a)):a&&"object"==typeof a?Object.values(a).filter(a=>!!a&&"object"==typeof a&&!Array.isArray(a)):[]}function S(a){return Array.isArray(a)?a.map(a=>Q(a).trim()).filter(Boolean):"string"==typeof a?a.split(/[;;\n]/u).map(a=>a.trim()).filter(Boolean):[]}function T(a){return!!a&&(null!=a.chapters&&!Array.isArray(a.chapters)||null!=a.facts&&!Array.isArray(a.facts))}async function U(a,b){let c=b.slice(0,36).map(a=>`文件:${a.filePath}
12
- 片段:${a.sectionTitle||""}
13
- 内容:${a.content.slice(0,1200)}`).join("\n\n---\n\n"),d=a.promptTexts.join("\n\n")||"请读取绑定文件角色,抽取可用于文档生成的结构化信息。",e=`你正在执行一个“文件角色 \xd7 提示词角色”的读取节点。
14
- 节点类型:${a.outputType}
15
- 文件角色:${a.fileRoleName}(${a.fileRoleId})
16
- 要求:严格按该节点绑定的提示词读取该文件角色的内容,不要读取其他角色。
17
-
18
- 请返回 JSON,字段包括 chapters、facts、outputRequirements、forbidImageInsertion、warnings。chapters 只提取当前模板和规范包需要的正式章节;requirements 只保留可合并写入正文的核心要求,避免无依据地拆成过细子节点。facts 中计量单位保持原文含义,必要时使用导出友好的正式写法。
19
-
20
- 绑定文件片段:
21
- ${c}`,f=[],g=c.trim()?await ai(d,e):void 0;if(T(g)){f.push(`${a.fileRoleName} 结构化读取返回格式异常,已尝试修复 JSON schema。`);let b=await ai("你是 JSON schema 修复器。只根据输入 JSON 重新整理字段类型,不新增事实,不改写事实含义。",`请把下面 JSON 修复为严格结构:{"chapters":[],"facts":[],"outputRequirements":[],"warnings":[],"forbidImageInsertion":false}。chapters 和 facts 必须是数组;如果原值是对象,请转为数组;如果无法转换,使用空数组。只返回 JSON。
22
-
23
- 原始 JSON:
24
- ${JSON.stringify(g).slice(0,12e3)}`);b&&!T(b)?g=b:f.push(`${a.fileRoleName} 结构化读取修复失败,已降级使用证据片段生成。`)}let h=R(g?.chapters),i=R(g?.facts),j=[];h.forEach((a,b)=>{let c="string"==typeof a.title?a.title.trim():"";c&&j.push({id:P(c,`chapter-${b+1}`),title:c,order:b,sourceRequirement:a.sourceRequirement||c,requiredContents:S(a.requiredContents),writingRules:S(a.writingRules),evidenceNeeds:S(a.evidenceNeeds),minWords:Math.max(800,Math.min(3500,Number(a.minWords)||1200)),requirements:R(a.requirements).map((a,d)=>({id:P(`${c}-${a.title||d+1}`,`req-${b+1}-${d+1}`),title:a.title||`要求 ${d+1}`,requirementText:a.requirementText||a.title||"",requiredContents:S(a.requiredContents),writingRules:S(a.writingRules),evidenceNeeds:S(a.evidenceNeeds),preferredSourceRoleIds:S(a.preferredSourceRoleIds)}))})});let k=[];return i.forEach(c=>{let d="string"==typeof c.key?c.key.trim():"";d&&null!=c.value&&k.push({key:d,value:E(Q(c.value)),sourceFile:c.sourceFile||b.find(a=>a.filePath)?.filePath||"",roleId:a.fileRoleId,processingType:a.processingType,relatedChapterHints:S(c.relatedChapterHints)})}),(0===j.length||0===k.length)&&f.push(`${a.fileRoleName} 部分结构化结果不足,已补充使用证据片段兜底。`),{node:a,evidence:b,chapters:j.length>0?j:function(a,b){if("template_requirements"!==a.outputType)return[];let c=[],d=new Set;for(let a of b){for(let b of a.content.split(/\r?\n/u).map(a=>a.trim()).filter(Boolean)){if(!/^(?:第[一二三四五六七八九十百千万\d]+[章节]|[一二三四五六七八九十]+、|\d+(?:\.\d+)*[、..])/.test(b))continue;let e=b.replace(/^\d+(?:\.\d+)*[、..]\s*/u,"").slice(0,80);if(!(e.length<4||d.has(e)||/资料来源|证据来源|校验结果|缺失项|知识库/u.test(e))&&(d.add(e),c.push({id:P(e,`chapter-${c.length+1}`),title:e,order:c.length,sourceRequirement:a.content.replace(/\s+/gu," ").slice(0,500),requiredContents:[],writingRules:[],evidenceNeeds:[],minWords:1200,requirements:[]}),c.length>=18))break}if(c.length>=18)break}return c}(a,b),facts:k.length>0?k:b.slice(0,20).map((b,c)=>({key:`${a.fileRoleName}事实${c+1}`,value:b.content.replace(/\s+/gu," ").slice(0,360),sourceFile:b.filePath,roleId:a.fileRoleId,processingType:a.processingType,relatedChapterHints:b.sectionTitle?[b.sectionTitle]:[]})).filter(a=>a.value.length>20),outputRequirements:S(g?.outputRequirements),warnings:[...f,...S(g?.warnings)],forbidImageInsertion:g?.forbidImageInsertion??"drawing_facts"===a.outputType}}function V(a,b,c){let d=[b.title,...b.requiredFacts||[],...c?.requiredContents||[],...c?.evidenceNeeds||[],...c?.requirements.flatMap(a=>[a.title,...a.requiredContents,...a.evidenceNeeds])||[]].filter(Boolean);return a.flatMap(a=>a.facts.map(b=>({artifact:a,fact:b}))).filter(({fact:a})=>{let b=`${a.key}
25
- ${Q(a.value)}
26
- ${a.relatedChapterHints.join("\n")}`;return 0===d.length||d.some(c=>b.includes(c)||c.includes(a.key))}).slice(0,80)}function W(a,b){return a.some(a=>a.forbidImageInsertion||"drawing_facts"===a.node.outputType)}function X(a,b){return b?a.replace(/^!\[[^\]]*(?:图纸|drawing|cad|地图|平面|剖面|立面)[^\]]*\]\([^)]*\)\s*$/gimu,"").replace(/\n{3,}/gu,"\n\n"):a}let Y=/.*(?:知识库证据|文件角色|提示词角色|文档规范包|规范包|事实字段|资料未提供|未检索到|待确认事项|证据来源|来源清单|校验结果).*(?:\n|$)/gu,Z=/^\s*(?:#{1,6}\s*)?(?:PDF\s*第\s*\d+\s*页|rule\b|文件[::]|片段[::]|来源[::]).*$/gimu,$=/^\s*(?:[│┃┆┊┌┐└┘├┤┬┴┼─━╭╮╰╯]|[↓↑→←⇒⇨➡])+\s*$/gmu;function _(a){return a.replace(/\b(m|㎡)\s*2\b/giu,"平方米").replace(/\bm\s*[²2]\b/giu,"平方米").replace(/\b(m|㎥)\s*3\b/giu,"立方米").replace(/\bm\s*[³3]\b/giu,"立方米").replace(/\bmm2\b/giu,"平方毫米").replace(/\bcm2\b/giu,"平方厘米").replace(/\bkm2\b/giu,"平方千米").replace(/\s*×\s*/gu,"\xd7").replace(/\s*≤\s*/gu,"≤").replace(/\s*≥\s*/gu,"≥").replace(/\s*±\s*/gu,"\xb1").replace(Y,"").replace(Z,"").replace($,"").replace(C,"").replace(B,"").replace(/第\s*\d+\s*页\s*\/\s*共\s*\d+\s*页/gu,"").replace(/\n{3,}/gu,"\n\n").trim()}let aa="你正在生成可直接交付的正式业务文档,不是分析报告、证据报告或系统调试报告。\n不得把“知识库、检索、文件角色、提示词角色、规范包、事实字段、动态章节、缺失项、校验结果、资料未提供、未检索到”等后台流程话术写入正文。\n文档结构、禁用标题、必需章节、事实取舍和行业表达必须优先遵循用户绑定的提示词角色、项目角色配置和文档规范包;通用生成链路不得擅自发明业务规则。\n资料信息应内化为正式正文表达;除非规范包或用户要求来源追溯章节,否则不要单列系统证据清单。\n表格、标题和公式必须使用 Markdown/导出友好的写法,避免 ASCII 流程图和容易导致导出异常的符号组合。\n语言应正式、专业、克制,适合直接导出交付。";async function ab(a){if(0===a.issues.length)return{markdown:a.markdown,stage:void 0};let b=a.template.chapters.map(a=>[`- ${a.title}`,a.sections?.length?` 二级小节:${a.sections.join("、")}`:"",a.tableSections?.length?` 表格小节:${a.tableSections.join("、")}`:"",a.tableRequirements?.length?` 表格内容要求:${a.tableRequirements.join(";")}`:""].filter(Boolean).join("\n")).join("\n"),c=await ah(["你是文档质量补写和纠偏专家。必须严格按照模板、章节计划、规范包、提示词角色和已提供资料补齐内容,禁止编造。",a.forbidDrawingImages?"图片/图纸类资料只作为文本事实来源,禁止插入图片或 Markdown 图片语法。":"","保持 Markdown 标题层级;直接返回修复后的完整 Markdown。","必须保留模板配置的章节和二级小节;配置要求使用表格的小节,应由已提供资料和正文内容归纳生成正式 Markdown 表格,不得输出证据摘录表。",a.promptTexts].filter(Boolean).join("\n\n"),[`模板:${a.template.name}`,a.requirement?`用户要求:${a.requirement}`:"",`需要修复的问题:
27
- ${a.issues.map(a=>`- ${a}`).join("\n")}`,b?`模板配置结构要求:
28
- ${b}`:"",`章节计划:
29
- ${a.plan.map(a=>`- ${a.title}:${a.requiredContents.join("、")};要求=${a.sourceRequirement.slice(0,200)}`).join("\n")}`,"角色节点产物摘要:",a.artifacts.map(a=>{let b=a.chapters.slice(0,18).map(a=>`- ${a.title}:${a.requiredContents.join("、")||a.sourceRequirement.slice(0,120)}`).join("\n"),c=a.facts.slice(0,30).map(a=>`- ${a.key}:${Q(a.value).slice(0,220)}(来源:${a.sourceFile},角色:${a.roleId})`).join("\n");return[`## ${a.node.fileRoleName} / ${a.node.outputType}`,b?`章节/要求:
30
- ${b}`:"",c?`事实:
31
- ${c}`:"",a.outputRequirements.length?`输出要求:${a.outputRequirements.join(";")}`:""].filter(Boolean).join("\n")}).join("\n\n"),"待修复 Markdown:",a.markdown].filter(Boolean).join("\n\n"));return c&&!(c.length<.85*a.markdown.length)&&c.includes("#")?{markdown:_(X(c,a.forbidDrawingImages)),stage:{type:"llm_review",roleId:"quality-repair",status:"success",message:`已按角色节点和章节计划完成质量补写,修复 ${a.issues.length} 项`}}:{markdown:a.markdown,stage:{type:"llm_review",roleId:"quality-repair",status:"fallback",message:`质量补写未返回有效结果:${a.issues.slice(0,5).join(";")}`}}}function ac(a){if(a.projectRoleConfigId){let b=(0,m.Mu)(a.projectRoleConfigId),c=(0,m.XB)("prompt");if(b)return[...b.promptRoles].sort((a,b)=>a.order-b.order).map(a=>c.find(b=>b.id===a.roleId)).filter(a=>!!a).flatMap(a=>(a.resourceIds?.length?a.resourceIds:a.resourceId?[a.resourceId]:[]).map(b=>({promptId:b,roleId:a.id})))}return a.promptBindings?.length?a.promptBindings:(a.promptIds??[]).map(a=>({promptId:a,roleId:"chapter_generation"}))}function ad(a){if(a.projectRoleConfigId){let b=(0,m.Mu)(a.projectRoleConfigId),c=(0,m.XB)("file");if(b)return[...b.fileRoles].sort((a,b)=>a.order-b.order).map(a=>c.find(b=>b.id===a.roleId)).filter(a=>!!a).flatMap(a=>(a.resourceIds?.length?a.resourceIds:a.resourceId?[a.resourceId]:[]).map(b=>({filePath:b,roleId:a.id})))}return a.fileBindings?.length?a.fileBindings:(a.boundFilePaths??[]).map(a=>({filePath:a,roleId:"project_fact"}))}function ae(a,b){let c=new Map((0,m.XB)("prompt").map(a=>[a.id,a.executionType||"reference"]));return u(a).filter(a=>b.includes(c.get(a.roleId)||"reference")).map(a=>`## [${a.roleId}] ${a.name}
32
- ${a.content}`).join("\n\n")}function af(a,b){let c=(0,i.resolveProtocol)(a,b);return"anthropic"===c?"anthropic":"google"===c?"google":"ollama"===c?"ollama":"openrouter"===c?"openrouter":"openai"}function ag(){let a=(0,l.I)().load(),b=a.models.reasoning.active||a.models.action.active||a.models.reader.active,c=[...a.models.reasoning.list,...a.models.action.list,...a.models.reader.list].find(a=>a.name===b);if(!c)return;let d=a.providers[c.provider];if(d)return{model:c,provider:d}}async function ah(a,b,c=!1){try{let d=ag();if(!d)return;let{model:e,provider:f}=d,g=(0,h.createProvider)(af(e.provider,f),{baseUrl:f.baseUrl,apiKey:f.apiKey,modelName:e.name,directEndpoint:f.directEndpoint});return(await g.chat([{role:"system",content:c?`${a}
33
- 只返回 JSON,不要返回 markdown。`:a},{role:"user",content:b}],{temperature:.3*!c})).content.trim()}catch{return}}async function ai(a,b){let c=await ah(a,b,!0);if(c)try{let a=c.replace(/^```json\s*/u,"").replace(/^```\s*/u,"").replace(/```$/u,"").trim();return JSON.parse(a)}catch{return}}async function aj(a,b){let c=ag();if(!c?.provider.capabilities?.fileUnderstanding&&!c?.provider.capabilities?.imageUnderstanding)return{notes:[],stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"当前模型未开启文件理解/图片理解能力"}};let f=(0,h.createProvider)(af(c.model.provider,c.provider),{baseUrl:c.provider.baseUrl,apiKey:c.provider.apiKey,modelName:c.model.name,directEndpoint:c.provider.directEndpoint});if(!f.understandFiles)return{notes:[],stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"当前 Provider 未实现文件理解接口"}};let g=[...new Set(b.map(a=>a.filePath).filter(a=>/\.(png|jpe?g|webp|pdf|docx|xlsx)$/iu.test(a)))].slice(0,6).map(b=>{let c=e.join(a,"knowledgeBase",b);return d.existsSync(c)?{name:e.basename(b),mimeType:function(a){let b=e.extname(a).toLowerCase();return".png"===b?"image/png":".jpg"===b||".jpeg"===b?"image/jpeg":".webp"===b?"image/webp":".pdf"===b?"application/pdf":".docx"===b?"application/vnd.openxmlformats-officedocument.wordprocessingml.document":".xlsx"===b?"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"application/octet-stream"}(b),data:d.readFileSync(c)}:void 0}).filter(Boolean);if(0===g.length)return{notes:[],stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"没有可发送给多模态模型的参考文件"}};try{let a=(await f.understandFiles(g,"请阅读这些参考图片/文件,提炼可用于文档生成和审查的事实、视觉要点、地图信息和封面设计建议。请用中文要点输出。",{maxTokens:1200})).content.trim();return{notes:a?[a]:[],stage:{type:"file_understanding",roleId:"multimodal-files",status:a?"success":"fallback",message:a?`已理解 ${g.length} 个多模态参考文件`:"多模态模型未返回有效文件理解结果"}}}catch{return{notes:[],stage:{type:"file_understanding",roleId:"multimodal-files",status:"fallback",message:"文件理解调用失败,继续使用本地解析内容"}}}}async function ak(a,b,c,d){let e=[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"LLM JSON 抽取未启用或无可用模型"}],f=a.slice(0,24).map(a=>`文件:${a.filePath}
34
- 角色:${a.roleId||""}
35
- 处理:${a.processingType||""}
36
- 内容:${a.content.slice(0,1200)}`).join("\n\n---\n\n");if(!f.trim())return{facts:[],stages:e};let g=M(c,d),h=g.map(a=>`- id=${a.id} name=${a.name} type=auto required=${a.required} sourceRoleIds=${a.sourceRoleIds.join(",")||"不限"} hint=${a.extractionHint||"无"}`).join("\n"),i=await ai(b||"你是文档事实抽取器。",`请严格按下面的动态事实 schema 从资料中抽取事实。只抽取资料明确支持的内容;如果字段限定 sourceRoleIds,必须优先来自对应文件角色;事实取舍和冲突处理遵循规范包字段说明、文件角色和提示词角色配置。
37
- 返回 {"facts":[{"fieldId":"...","fieldName":"...","key":"...","value":"...","sourceFile":"...","roleId":"...","processingType":"project_fact","confidence":0.8}]}。
38
-
39
- 动态事实 schema:
40
- ${h}
41
-
42
- 资料:
43
- ${f}`);return i?.facts?.length?{facts:i.facts.filter(a=>a.key&&a.value).map(a=>{let b=g.find(b=>b.id===a.fieldId||b.name===a.fieldName||b.name===a.key);return{key:b?.name||a.key,fieldId:b?.id||a.fieldId,fieldName:b?.name||a.fieldName,value:Q(a.value),sourceFile:a.sourceFile||"",roleId:a.roleId||"llm",processingType:a.processingType,confidence:a.confidence??.8,sourceRef:{filePath:a.sourceFile||"",roleId:a.roleId||"llm",processingType:a.processingType}}}),stages:[{type:"fact_extraction",roleId:"llm-json",status:"success",message:`LLM 按动态 schema 抽取 ${i.facts.length} 条事实`}]}:{facts:[],stages:e}}function al(a){return/出现禁用文本|资料未提供|导出|临时|无效|占位|生成未完成|低于目标页数|兜底|章节生成失败|大模型未能|重新生成|缺少配置小节|缺少必要的正式表格|正文缺少章节标题/iu.test(a.message)}function am(a,b){return`${a.name}:${b}`}async function an(a,b,c,d,e,f,g,h="",i={}){let j=J(I(b,c));if(!j.trim()&&!h.trim())return;let k=["你是专业项目文档生成专家,必须严格使用已提供的内部资料生成正式文档章节。",aa,"准确性优先级:章节计划/示范文本节点产物 > 规范包事实字段 > 角色节点结构化事实 > 知识库证据 > 项目上下文/历史记忆。内部优先级只用于判断事实,不得写入正文。","项目上下文/历史记忆只能作为用户偏好、历史纠偏和连续性参考;不得覆盖、替代或改写知识库证据中的事实。",i.forbidDrawingImages?"图片/图纸类资料只作为文本事实依据;禁止插入图片或 Markdown 图片语法。":"","不要编造资料;可以基于证据做合理归纳;输出 Markdown;不要输出代码块。",e].filter(Boolean).join("\n\n"),l=[`文档模板:${a.name}`,`章节标题:${b.title}`,`章节目的:${b.purpose}`,b.sections?.length?`本章必须包含以下二级小节:
44
- ${b.sections.map(a=>`- ${a}`).join("\n")}`:"",g?`用户要求:${g}`:"",f?`项目上下文/历史记忆(仅作偏好、历史纠偏和连续性参考;如与知识库证据冲突,以知识库证据为准):
45
- ${f}`:"",h||"",d.length?`需要特别补足的事实:${d.join("、")}`:"","请生成一个专业、充实、可直接导出的正式文档章节,要求:","- 保留章节标题,并按模板配置的小节生成二级小节;不要无依据地新增或拆分过细小节;",b.tableSections?.length?`- 本章以下小节适合使用正式工程表格辅助表达:${b.tableSections.join("、")};表格必须由正文归纳形成,禁止直接粘贴证据摘录。`:"","- 表格只用于工程概况、施工部署、重点难点、资源配置、质量安全控制、验收移交等适合结构化表达的位置;表格前后必须有说明,不能整节只有表格。","- 必须使用模板节点提取的章节要求和输出规范;","- 必须结合项目事实、表格数据、技术规范等内部资料;","- 对同一对象的事实应综合表达,优先写入准确的数量、单位、规格、参数、做法和标准;","- 存在事实冲突时,按规范包、文件角色、提示词角色和用户要求指定的优先级处理;","- 默认不要引用原始文件名,不写解析器内部对象名;","- 将资料要点自然融入正文,不单列系统证据或来源章节;","- 小节层级保持适度,除非规范包或提示词要求,不要输出中间分析产物标题;","- 组织关系、流程、职责、资源配置、风险控制等适合表格表达的内容可使用 Markdown 表格;",`- 内容不少于 ${i.minWords||1e3} 字,避免空泛口号。`,"",j?"内部资料:":"",j].filter(Boolean).join("\n"),m=await ah(k,l);if(m&&!(m.length<120))return _(X(m.startsWith("## ")?m:`## ${b.title}
46
-
47
- ${m}`,!!i.forbidDrawingImages))}async function ao(a){let b=J(I({id:"review",title:"全文审查",purpose:"审查全文证据和资源关系",queries:[],requiredFacts:[]},a.evidence)),c=a.spec?[`规范包:${a.spec.name}`,`事实字段:${a.spec.factFields.map(a=>`${a.name}${a.required?"(必需)":""}`).join("、")}`,"dynamic"===a.spec.chapterMode?`章节规则:动态章节|来源=${a.spec.dynamicChapterRule.source}|标题=${a.spec.dynamicChapterRule.titleStrategy||"ai_summary"}|${a.spec.dynamicChapterRule.generationHint||"由资料自动规划"}`:`章节规则:${a.spec.chapterRules.map(a=>`${a.title}${a.minWords?`≥${a.minWords}字`:""}`).join("、")}`,`门禁规则:${a.spec.gateRules.map(a=>`${a.name}:${a.type}`).join("、")}`].join("\n"):"未绑定文档规范包。",d=await ah(["你是文档质量审查与优化专家。你要基于模板、规范包、提示词角色和内部资料对初稿进行二次审查和优化,使其成为正式业务文档。",aa,"准确性优先级:文档规范包/模板要求 > 已绑定或人工确认的知识库证据 > 自动检索知识库证据 > 项目上下文/历史记忆。内部优先级只用于判断事实,不得写入正文。","项目上下文/历史记忆只能用于风格偏好、历史纠偏和连续性检查;如果与知识库证据冲突,必须以知识库证据为准。","必须保持 Markdown 输出;保留已有正式标题层级和表格;不得保留或新增证据来源、资料来源、缺失项、校验结果等后台信息。","图片/图纸类资料默认只作为文本事实依据,除非用户明确要求插图,否则不要插入图片或 Markdown 图片语法;不得引用 PDF/DWG/Excel 文件名。","重点检查:正式章节完整性、资料事实内化使用、参数数字准确性、冲突事实是否按配置优先级处理、解析器内部对象名清理、表格呈现、表达专业性、导出友好性。","除非规范包或提示词明确要求,删除中间分析产物标题和后台流程说明。",a.promptTexts].filter(Boolean).join("\n\n"),[`模板:${a.template.name}`,a.requirement?`用户要求:${a.requirement}`:"",a.projectContext?`项目上下文/历史记忆(仅作偏好、历史纠偏和连续性参考;如与知识库证据冲突,以知识库证据为准):
48
- ${a.projectContext}`:"",c,"","知识库证据摘要:",b,"","待审查初稿:",a.markdown,"","请直接返回优化后的完整正式 Markdown,不要附加解释。"].filter(Boolean).join("\n"));return d&&!(d.length<.7*a.markdown.length)&&d.includes("#")?{markdown:_(d),stage:{type:"llm_review",roleId:"llm-review",status:"success",message:"已完成 LLM 二次审查与优化"}}:{markdown:a.markdown,stage:{type:"llm_review",roleId:"llm-review",status:"skipped",message:"无可用模型或审查结果不可用,保留生成初稿"}}}function ap(a){return a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}function aq(a,b){let c=[];for(let d of b.chapters){let b=function(a,b){let c=RegExp(`(^##\\s+${ap(b)}\\s*$)([\\s\\S]*?)(?=\\n##\\s+|(?![\\s\\S]))`,"mu").exec(a);if(c&&void 0!==c.index)return{start:c.index,end:c.index+c[0].length,heading:c[1]||`## ${b}`,body:c[2]||""}}(a,d.title);if(!b){c.push({level:"error",message:`${d.title} 正文缺少章节标题`,suggestion:"请重新生成,确保模板章节完整输出。"});continue}let e=b.heading+b.body,f=(d.sections||[]).filter(a=>!(function(a){let b=a.replace(/^\s*\d+(?:\.\d+)+\s+/u,"").trim();return RegExp(`^###\\s+(?:${ap(a)}|(?:\\d+(?:\\.\\d+)+\\s+)?${ap(b)})\\s*$`,"mu")})(a).test(e));f.length>0&&c.push({level:"error",message:`${d.title} 正文缺少配置小节:${f.join("、")}`,suggestion:"请重新生成或检查审查阶段是否删除了二级小节。"}),d.tableSections?.length&&!/\|[^\n]+\|\s*\n\s*\|\s*:?-{3,}:?\s*\|/u.test(e)&&c.push({level:"error",message:`${d.title} 缺少必要的正式表格`,suggestion:"请按模板 tableSections/tableRequirements 在对应小节补充正式 Markdown 表格。"})}return c}function ar(a){let b=a.chapters.map(a=>_(a.content)).filter(Boolean).join("\n\n"),c=a.chapters.flatMap((a,b)=>{let c=a.sections||[];return[`${b+1}. ${a.title}`,...c.map((a,c)=>` ${/^\s*\d+(?:\.\d+)+\s+/.test(a)?a:`${b+1}.${c+1} ${a}`}`)]});return _(['<div class="document-cover">',`# ${a.title}`,"","</div>","",'<div class="page-break"></div>',"","## 目录","",...c,"",'<div class="page-break"></div>',"",b].join("\n"))}function as(a){if(a?.aborted)throw Error("用户中止")}async function at(a){as(a.signal);let b=w(a.templateId);if(!b)throw Error("Document template not found");let c=e.resolve(a.projectRoot||(0,j.aY)());if(!c)throw Error("No knowledge base project found");let g=(0,j.Qh)(),h=Math.max(5,Math.min(30,a.maxEvidencePerChapter??12)),i=ac(b),l=ad(b),o=(0,n.py)(b.documentSpecId),p=ae(i,["chapter_generation","formatting","reference"]),q=ae(i,["fact_extraction","reference"]),r=ae(i,["validation","llm_review","formatting","reference"]),s=a=>[a,e.isAbsolute(a)?e.relative(c,a):e.join(c,a)],t=new Set(l.flatMap(a=>s(a.filePath))),v=(0,m.XB)("file"),x=new Map(l.flatMap(a=>s(a.filePath).map(b=>[b,a.roleId]))),y=new Map(l.flatMap(a=>s(a.filePath).map(b=>[b,v.find(b=>b.id===a.roleId)?.processingType||"reference"]))),z=await g.getProject(c);await z.incrementalIndex(),as(a.signal);let A=[],D=[],H=[],I=[],J=[],R=function(a,b){let c=(0,m.XB)("file"),d=(0,m.XB)("prompt"),e=u(b),f=ad(a),g=new Map;for(let a of f)g.set(a.roleId,[...g.get(a.roleId)||[],a.filePath]);let h=c.filter(a=>g.has(a.id)),i=d.filter(a=>e.some(b=>b.roleId===a.id));return h.map((a,b)=>{let c=i.map(b=>{let c=e.filter(a=>a.roleId===b.id).map(a=>a.content);return{promptRole:b,texts:c,score:function(a,b,c){let d=O(`${a} ${c.join(" ")}`),e=0;for(let a of(/fact|抽取|读取|提取|理解|reference/u.test(d)&&(e+=5),/chapter_generation|章节生成|正文生成/u.test(d)&&(e+=1),[b.id,b.name,b.processingType||""].filter(Boolean)))d.includes(O(a))&&(e+=4);return/示范文本|招标文件|章节|目录|输出要求/u.test(`${b.name} ${c.join(" ")}`)&&/示范文本|章节|目录|输出要求|编制要求/u.test(d)&&(e+=6),/清单|工程量/u.test(`${b.name} ${c.join(" ")}`)&&/清单|工程量|项目特征/u.test(d)&&(e+=6),/图纸|drawing|cad/u.test(`${b.name} ${c.join(" ")}`)&&/图纸|drawing|cad|文本|标注/u.test(d)&&(e+=6),e}(b.id,a,c)}}).sort((a,b)=>b.score-a.score),d=c.filter(a=>a.score>=5).slice(0,2),f=c[b]||c[0],h=d.length>0?d:f?[f]:[],j=h.map(a=>a.promptRole.id),k=h.flatMap(a=>a.texts);return{id:`node-${a.id}`,fileRoleId:a.id,fileRoleName:a.name,filePaths:g.get(a.id)||[],processingType:a.processingType,promptRoleIds:j,promptTexts:k,outputType:function(a,b=[]){let c=O(`${a.id} ${a.name} ${a.processingType||""} ${b.join(" ")}`);return/示范文本|招标文件|章节|目录|输出要求|编制要求|template|tender/u.test(c)?"template_requirements":/清单|工程量|bill|boq|quantity/u.test(c)?"bill_facts":/图纸|drawing|cad|设计图|图纸解析/u.test(c)?"drawing_facts":/规范|标准|spec|technical/u.test(c)?"technical_facts":/项目|工程概况|事实|fact/u.test(c)?"project_facts":"reference_facts"}(a,k)}})}(b,i),S=[];for(let b of R){as(a.signal);let d=function(a,b,c){let d=[];for(let e of b.filePaths){let f=a.getFileDetail(e);if(f){d.push(...f.chunks.slice(0,120).map(a=>({chapterId:b.id,filePath:f.file.relativePath,score:1,content:a.content,roleId:b.fileRoleId,processingType:b.processingType,sectionTitle:a.sectionTitle,source:"role-node"})));continue}d.push(...G(e,b.fileRoleId,b.processingType,b.id,c))}return F(d,120)}(z,b,c);D.push(...d);let e=await U(b,d);S.push(e),J.push({type:"file_understanding",roleId:b.fileRoleId,promptId:b.promptRoleIds[0],status:d.length>0?"success":"fallback",message:`${b.fileRoleName} 节点已按绑定提示词读取,产出章节 ${e.chapters.length} 个、事实 ${e.facts.length} 条`}),a.onProgress?.([...J])}let T=function(a){let b=a.filter(a=>"template_requirements"===a.node.outputType).flatMap(a=>a.chapters),c=new Map;for(let a of b.sort((a,b)=>a.order-b.order))c.has(a.title)||c.set(a.title,a);return[...c.values()]}(S),Y=[b.name,b.outputTitle,a.requirement,o?.dynamicChapterRule?.generationHint,...o?.dynamicChapterRule?.sourceRoleIds||[]].filter(Boolean).join(" "),Z=o?.chapterMode==="dynamic"&&0===T.length?(await g.search(c,Y||b.name,{scope:"project",limit:20,weights:{keyword:.45,vector:.35,rewrite:.65,hybridBonus:.1}})).results.map(a=>({chapterId:"dynamic-planning",filePath:a.filePath,score:a.score,content:a.content,roleId:x.get(a.filePath),processingType:y.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})):[],$=o?.chapterMode==="dynamic"&&T.length>0?T.map((a,b)=>({id:P(a.id,`dynamic-${b+1}`),title:a.title,purpose:[a.sourceRequirement,...a.writingRules].filter(Boolean).join("\n").slice(0,1200),requiredFacts:[...new Set([...a.requiredContents,...a.evidenceNeeds])],queries:[...new Set([a.title,...a.requiredContents,...a.evidenceNeeds,...a.requirements.flatMap(a=>[a.title,a.requirementText,...a.evidenceNeeds])].filter(Boolean))],pinnedEvidenceFilePaths:[]})):K(b,o,Z),aa=[b.name,b.outputTitle,a.requirement,...$.flatMap(a=>[a.title,a.purpose])].filter(Boolean).join(" "),af=(0,k.Hh)(aa,8,c),ag=af.length>0?af.map((a,b)=>`${b+1}. [${a.type}/${a.importance}] ${a.content}${a.source?`(来源:${a.source})`:""}`).join("\n"):"",ah={type:"context_recall",roleId:"project-memory",status:af.length>0?"success":"skipped",message:af.length>0?`已注入 ${af.length} 条短期/长期上下文`:"未召回可用项目上下文"};for(let d of(J.push({type:"role_binding",roleId:b.projectRoleConfigId||"none",status:"success",message:`已绑定 ${l.length} 个文件角色、${i.length} 个提示词角色`}),J.push(ah),a.onProgress?.([...J]),$)){as(a.signal);try{let e=[],f=function(a,b){return b.find(b=>b.id===a.id||b.title===a.title)}(d,T),j=f?[f.title,...f.requiredContents,...f.evidenceNeeds,...f.requirements.flatMap(a=>[a.title,a.requirementText,...a.requiredContents,...a.evidenceNeeds])].filter(Boolean):[];for(let a of[...new Set([...d.queries.length>0?d.queries:[b.name,b.outputTitle,d.title],...j])]){let b=await g.search(c,a,{scope:"project",limit:Math.max(h,t.size>0?30:h),weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}});e.push(...b.results.filter(a=>0===t.size||t.has(a.filePath)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:x.get(a.filePath),processingType:y.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})))}let k=new Set(d.pinnedEvidenceFilePaths||[]),l=V(S,d,f);for(let a of(e.push(...l.flatMap(({artifact:a})=>a.evidence.slice(0,8).map(a=>({...a,chapterId:d.id,source:"role-node"})))),new Set([...k]))){let b=k.has(a),f=z.getFileDetail(a);if(!f){e.push(...G(a,x.get(a),y.get(a),d.id,c).map(a=>({...a,source:b?"pinned-evidence":a.source})));continue}e.push(...f.chunks.slice(0,Math.max(h,20)).map(a=>({chapterId:d.id,filePath:f.file.relativePath,score:1,content:a.content,roleId:x.get(f.file.relativePath),processingType:y.get(f.file.relativePath),sectionTitle:a.sectionTitle,source:b?"pinned-evidence":"bound-file"})))}let m=F(e,h);D.push(...m);let n=d.requiredFacts.filter(a=>!m.some(b=>L(b,a)));for(let a of(0===m.length&&H.push(`${d.title}:未检索到明确资料依据`),n))H.push(`${d.title}:${a} 未检索到明确依据`);J.some(a=>"knowledge_retrieval"===a.type)||(J.push({type:"knowledge_retrieval",roleId:"knowledge-base",status:D.length>0?"success":"fallback",message:`已检索/绑定 ${D.length} 条证据`}),a.onProgress?.([...J])),as(a.signal);let q=W(S,b),r=function(a,b,c){let d=V(a,b,c),e=c?[`章节来源要求:${c.sourceRequirement}`,c.requiredContents.length?`必须包含:${c.requiredContents.join("、")}`:"",c.writingRules.length?`写作规范:${c.writingRules.join("、")}`:"",c.evidenceNeeds.length?`需要证据:${c.evidenceNeeds.join("、")}`:"",c.requirements.length?`要求项:
49
- ${c.requirements.map(a=>`- ${a.title}:${a.requirementText||a.requiredContents.join("、")}`).join("\n")}`:""].filter(Boolean).join("\n"):"",f=new Map;for(let{artifact:a,fact:b}of d){let c=`${a.node.fileRoleName}(${a.node.outputType})`;f.set(c,[...f.get(c)||[],`- ${b.key}:${E(Q(b.value))}`])}let g=[...f.entries()].map(([a,b])=>`### ${a}
50
- ${b.slice(0,18).map(a=>a.replace(C,"").replace(B,"")).join("\n")}`).join("\n\n");return[e?`【本章章节计划】
51
- ${e}`:"",g?`【角色节点结构化产物】
52
- ${g}`:""].filter(Boolean).join("\n\n")}(S,d,f),s=o?.chapterRules.find(a=>a.id===d.id||a.title===d.title),u=f?.minWords||s?.minWords||o?.dynamicChapterRule.minWordsPerChapter||1200,v=await Promise.race([an(b,d,m,n,p,ag,a.requirement,r,{forbidDrawingImages:q,minWords:u}),new Promise(a=>setTimeout(()=>a(null),12e4))]);as(a.signal);let w=v||function(a,b,c,d){let e=(b.sections||[]).flatMap(a=>[`### ${a}`,"","本节应结合招标文件、工程量清单、图纸资料和现场组织要求进行正式展开,重点说明施工组织安排、实施方法、质量安全控制、责任分工和检查验收闭环。","","因当前大模型未能返回稳定章节内容,本节仅保留正式写作骨架,系统不会把原始资料片段、文件名或后台证据表直接写入正文。建议重新生成或补充模型能力后再导出正式文件。",""]);return _([`## ${b.title}`,"","本章内容需要依据已绑定资料进一步生成正式正文。为避免错误资料、文件名页或原始证据片段进入正式文件,当前仅保留章节结构和写作方向。","",...e].filter(Boolean).join("\n"))}(b.id,d,0,0);I.push({type:"chapter_generation",roleId:"chapter_generation",promptId:i.find(a=>"chapter_generation"===a.roleId)?.promptId,status:v?"success":"fallback",message:v?`${d.title} 已由大模型生成`:`${d.title} 使用本地专业兜底生成`}),A.push({id:d.id,title:d.title,content:w,evidence:m,missingFacts:n,sections:d.sections||[]})}catch(b){if(a.signal?.aborted)throw b;console.error(`[gen] chapter ${d.title} failed:`,b),I.push({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${d.title} 生成失败`})}J.some(a=>"chapter_generation"===a.type&&a.message===I[I.length-1]?.message)||J.push(I[I.length-1]),a.onProgress?.([...J])}as(a.signal);let ai={stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"文件理解跳过"},notes:[]};try{ai=await aj(c,D)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fileUnderstanding failed:",b)}for(let b of(as(a.signal),ai.notes))D.push({chapterId:"multimodal-file-understanding",filePath:"多模态模型文件理解结果",score:1,content:b,roleId:"multimodal-files",processingType:"reference",source:"multimodal"});let ap=function(a,b,c){let d={};for(let e of M(a,c)){let a=b.find(a=>N(a,e));a&&(d[e.name]=`${a.content.replace(/\s+/gu," ").slice(0,180)}(来源:${a.filePath},角色:${a.roleId||"未标注"})`)}return d}(b,D,o);for(let a of S)for(let b of a.facts)ap[b.key]=`${Q(b.value)}(来源:${b.sourceFile},角色:${b.roleId})`;let at=function(a,b,c){let d=M(b,c).map(a=>({field:a,pattern:function(a){let b=a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");return RegExp(`${b}[::\\s]+([^\\n,。;;]+)`,"u")}(a.name)})),e=[];for(let b of a)for(let{field:a,pattern:c}of d){if(!N(b,a))continue;let d=b.content.match(c)||[void 0,b.content.replace(/\s+/gu," ").slice(0,220)],f=d?.[1]?.trim();f&&!e.some(b=>b.fieldId===a.id&&b.value===f)&&e.push({key:a.name,fieldId:a.id,fieldName:a.name,value:f.slice(0,300),sourceFile:b.filePath,roleId:b.roleId||"unknown",processingType:b.processingType,confidence:b.score,sourceRef:{filePath:b.filePath,roleId:b.roleId||"unknown",processingType:b.processingType,sectionTitle:b.sectionTitle}})}return e}(D,b,o),au={facts:[],stages:[]};try{au=await ak(D,q,b,o)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fact extraction failed:",b)}as(a.signal);let av=[...S.flatMap(a=>a.facts.map(a=>({key:a.key,value:Q(a.value),sourceFile:a.sourceFile,roleId:a.roleId,confidence:.9}))),...at,...au.facts];for(let a of(J.some(a=>a.type===ai.stage.type)||J.push(ai.stage),au.stages))J.some(b=>b.type===a.type)||J.push(a);a.onProgress?.([...J]);let aw=function(a){let b=[],c=new Set;for(let g of a.filter(a=>"table"===a.processingType)){if(c.has(g.filePath))continue;c.add(g.filePath);let a=(0,j.aY)(),h=e.isAbsolute(g.filePath)?g.filePath:d.existsSync(e.join(a,"knowledgeBase",g.filePath))?e.join(a,"knowledgeBase",g.filePath):e.join(a,g.filePath),i=e.extname(g.filePath).toLowerCase();if(d.existsSync(h)&&[".xlsx",".xls",".csv"].includes(i))try{let a=f.readFile(h,{cellDates:!0,sheetStubs:!1});for(let c of a.SheetNames){let d=a.Sheets[c],e=f.utils.sheet_to_json(d,{header:1,raw:!1,defval:""}).map(a=>a.map(a=>String(a).trim())).filter(a=>a.some(Boolean));if(e.length<2)continue;let h=e.findIndex(a=>a.filter(Boolean).length>=2);if(h<0)continue;let i=e[h].filter(Boolean),j=e.slice(h+1).map(a=>a.slice(0,i.length)).filter(a=>a.some(Boolean));0!==j.length&&b.push({tableType:g.roleId||"table",sheet:c,headers:i,rows:j.slice(0,200),sourceFile:g.filePath,sourceRange:d["!ref"]})}continue}catch{}let k=g.content.split("\n").map(a=>a.trim()).filter(Boolean).filter(a=>a.includes("|")||a.includes(" ")||a.includes(","));if(k.length<2)continue;let l=k[0].includes("|")?"|":k[0].includes(" ")?" ":",",m=k.map(a=>a.split(l).map(a=>a.trim()).filter(Boolean)).filter(a=>a.length>1);m.length<2||b.push({tableType:g.roleId||"table",headers:m[0],rows:m.slice(1,80),sourceFile:g.filePath,sourceRange:g.sectionTitle})}return b}(D),ax=D.filter(a=>"pinned-evidence"===a.source).length,ay=D.filter(a=>"pinned-evidence"!==a.source&&"bound-file"!==a.source).length,az={type:"reference",roleId:"quality-enhancement",status:D.length>0?"success":"skipped",message:`增强贡献:知识库证据 ${D.length} 条,人工确认/固定证据 ${ax} 条,项目上下文 ${af.length} 条,自动检索证据 ${ay} 条`};for(let b of(J.push(az),a.onProgress?.([...J]),av))ap[b.key]=`${Q(b.value)}(来源:${b.sourceFile},角色:${b.roleId})`;let aA=new Map;for(let a of D)aA.set(a.filePath,(aA.get(a.filePath)??0)+1);let aB=[...aA.entries()].sort((a,b)=>b[1]-a[1]).map(([a,b])=>({filePath:a,count:b})),aC=function(a,b=[],c=[],d){let e=b=>a.filter(a=>b.some(b=>a.key.includes(b))),f=b=>a.filter(a=>a.processingType===b||a.roleId.includes(b));return{project:a,schedule:e(["工期","开工","竣工","节点"]),quality:e(["质量"]),safety:e(["安全"]),resources:e(["劳动力","材料","机械","设备"]),tables:b,drawings:f("drawing"),rules:f("rule"),specifications:f("specification"),schemaFacts:function(a,b){let c={};for(let d of b?.factFields||[])c[d.id]=a.filter(a=>a.fieldId===d.id||a.key===d.name||a.fieldName===d.name);return c}(a,d),missing:[...new Set(c)],conflicts:function(a,b){let c=b?.factFields.map(a=>a.name)||[...new Set(a.map(a=>a.key))],d=[];for(let b of c){let c=a.filter(a=>a.key===b||a.fieldName===b),e=new Map;for(let a of c){let b=Q(a.value).replace(/\s+/gu,"").replace(/[,。,.;;::]/gu,"").toLowerCase();b&&e.set(b,[...e.get(b)||[],a])}if(e.size>1){let a=[...e.values()].map(a=>`${a[0].value}(${a.map(a=>a.sourceFile).join("、")})`).join(" vs ");d.push(`事实冲突:${b} 存在多个来源值:${a}`)}}return d}(a,d)}}(av,aw,H,o),aD=function(a,b=[],c){let d=[],e=[];for(let b of a)0===b.evidence.length&&d.push(`${b.title} 未检索到资料证据`),b.content.length<80&&d.push(`${b.title} 内容较短,建议人工补充或重新生成`);c&&a.length<c.chapters.length&&e.push(`章节生成不完整:已生成 ${a.length}/${c.chapters.length} 章`),c&&0===ad(c).length&&e.push("模板未绑定任何知识库文件"),c&&0===ac(c).length&&e.push("模板未绑定任何提示词");let f=new Set(b.map(a=>a.roleId));for(let a of["project_fact","rule"])c?.fileBindings?.some(b=>b.roleId===a)&&!f.has(a)&&d.push(`${a} 角色未抽取到结构化事实`);return{passed:0===e.length,warnings:d,errors:e}}(A,av,b),aE=function(a,b,c){let d=[...a.errors.map(a=>({level:"error",message:a,suggestion:"请补充配置或资料后重新生成。"})),...a.warnings.map(a=>({level:"warning",message:a,suggestion:"建议人工确认或补充对应资料。"}))];return c.some(a=>a.content.includes("资料未提供"))&&d.push({level:"warning",message:"存在资料未提供章节",suggestion:"请检查项目角色配置中的文件绑定和顺序。"}),b.conflicts.length>0&&d.push(...b.conflicts.map(a=>({level:"error",message:a}))),d}(aD,aC,A),aF=I.filter(a=>"chapter_generation"===a.type&&"fallback"===a.status).length,aG=I.filter(a=>"chapter_generation"===a.type&&"failed"===a.status).length;aF>0&&aE.push({level:"error",message:`章节生成存在兜底:${aF} 章`,suggestion:"请检查模型调用、提示词长度或证据负载后重新生成。"}),aG>0&&aE.push({level:"error",message:`章节生成失败:${aG} 章`,suggestion:"请检查模型调用或资料配置后重新生成。"});let aH=aE.filter(a=>"error"===a.level&&al(a)).length,aI=[{type:"role_binding",roleId:b.projectRoleConfigId||"none",status:l.length>0?"success":"fallback",message:`已绑定 ${l.length} 个文件角色、${i.length} 个提示词角色`},ah,{type:"knowledge_retrieval",roleId:"knowledge-base",status:D.length>0?"success":"fallback",message:`已检索/绑定 ${D.length} 条证据`},az,ai.stage,...au.stages,...I,{type:"validation",roleId:"document-workflow",status:aH>0?"failed":"success",message:`阻断 ${aH},错误 ${aD.errors.length},警告 ${aD.warnings.length}`},{type:"formatting",roleId:"document-workflow",status:"success",message:"已生成正式排版 Markdown"},{type:"export_ready",roleId:"document-workflow",status:aH>0?"failed":"success",message:aH>0?"导出门禁存在阻断项":"已准备好导出 Markdown/HTML/DOCX/PDF"}],aJ={templateId:b.id,templateName:b.name,title:b.outputTitle,requirement:a.requirement||"",exportSettings:b.exportSettings,generationSettings:b.generationSettings,facts:ap,structuredFacts:av,factsModel:aC,chapters:A,sources:aB,missingItems:[...new Set(H)],validation:aD,validationIssues:aE,executionStages:aI,exportGate:{passed:!0,blockingIssues:[],checklist:[]},assets:[],generatedAt:Date.now()},aK=ar(aJ);as(a.signal);let aL=await ao({template:b,spec:o,markdown:aK,evidence:D,promptTexts:r||p,projectContext:ag,requirement:a.requirement});as(a.signal);let aM=W(S,b),aN=X(aL.markdown===aK?ar({...aJ,validationIssues:aE,exportGate:aJ.exportGate,executionStages:aI}):aL.markdown,aM),aO=aq(aN,b).map(a=>a.message),aP=[...function(a,b,c,d,e){let f=[];for(let b of c)for(let c of(a.includes(b.title)||f.push(`缺少动态章节:${b.title}`),b.requiredContents.slice(0,12)))c&&!a.includes(c)&&f.push(`${b.title} 未覆盖必写内容:${c}`);for(let a of b){let b=c.find(b=>b.title===a.title),d=b?.minWords||1e3;a.content.length<d&&f.push(`${a.title} 内容深度不足:${a.content.length}/${d}`)}for(let b of d){let c=b.facts.slice(0,5).map(a=>Q(a.value).slice(0,24)).filter(a=>a.length>=6);c.length>0&&!c.some(b=>a.includes(b))&&f.push(`未体现 ${b.node.fileRoleName} 的关键读取结果`)}return e&&/!\[[^\]]*\]\([^)]*\)/iu.test(a)&&f.push("正文包含不应插入的图片"),/\b(?:m\s*[²2]|m\s*[³3]|mm2|cm2|km2)\b/iu.test(a)&&f.push("正文包含导出不友好的计量单位写法"),[...new Set(f)].slice(0,40)}(aN,A,T,S,aM),...aO],aQ=await ab({markdown:aN,template:b,plan:T,artifacts:S,promptTexts:p,requirement:a.requirement,issues:aP,forbidDrawingImages:aM});as(a.signal);let aR=aQ.stage?[...aI,aL.stage,aQ.stage]:[...aI,aL.stage],aS=_(X(aQ.markdown,aM));(aE=function(a,b,c,d,e,f,g){if(!a)return b;let h=[...b],i=[...c.project,...c.schedule,...c.quality,...c.safety,...c.resources,...Object.values(c.schemaFacts).flat()],j=new Set([...i.map(a=>a.key),...i.map(a=>a.fieldName).filter(Boolean),...c.tables.flatMap(a=>[...a.headers,...a.rows.flat()])]),k=new Set(d.map(a=>a.title));for(let b of a.factFields.filter(a=>a.required)){let a=c.schemaFacts[b.id]||[],e=d.some(a=>!a.missingFacts.includes(b.name)&&a.evidence.some(a=>N(a,b))),f=!b.sourceRoleIds?.length||a.some(a=>b.sourceRoleIds?.includes(a.roleId))||d.some(a=>a.evidence.some(a=>N(a,b)));0!==a.length||j.has(b.name)||e||h.push({level:"warning",message:`必需事实缺失:${b.name}`,suggestion:b.extractionHint||"请补充资料或调整事实字段配置。"}),f||h.push({level:"warning",message:`必需事实来源角色不匹配:${b.name}`,suggestion:`请确认该事实来自角色:${b.sourceRoleIds?.join("、")}`})}if("fixed"===a.chapterMode)for(let b of a.chapterRules.filter(a=>a.required)){k.has(b.title)||h.push({level:"error",message:`必需章节缺失:${b.title}`,suggestion:"请在模板或规范包章节规则中补齐章节。"});let a=d.find(a=>a.title===b.title);a&&b.minWords&&a.content.length<b.minWords&&h.push({level:"warning",message:`章节内容低于最低字数:${b.title}`,suggestion:`建议不少于 ${b.minWords} 字。`})}else{let b=a.dynamicChapterRule;if(b.minChapters&&d.length<b.minChapters&&h.push({level:"warning",message:`动态章节数量低于最少章节:${d.length}/${b.minChapters}`,suggestion:"请补充资料或降低最少章节数。"}),b.maxChapters&&d.length>b.maxChapters&&h.push({level:"warning",message:`动态章节数量超过最多章节:${d.length}/${b.maxChapters}`,suggestion:"请收紧来源文件角色或降低召回范围。"}),b.minWordsPerChapter)for(let a of d)a.content.length<b.minWordsPerChapter&&h.push({level:"warning",message:`动态章节内容低于最低字数:${a.title}`,suggestion:`建议不少于 ${b.minWordsPerChapter} 字。`})}let l=e.split(/\n{2,}/u).filter(a=>/\|.+\|/u.test(a)&&/\n\s*\|?\s*:?-{3,}:?/u.test(a)),m=[...e.matchAll(/!\[([^\]]*)\]\(([^)]+)\)/gu)].map(a=>({alt:a[1]||"",url:a[2]||"",index:a.index??0}));for(let b of a.gateRules){let a=b.level,n=b.evaluator?b.evaluator:"required_fact"===b.type?{subject:"fact",operator:"exists",target:b.target}:"required_chapter"===b.type?{subject:"chapter",operator:"exists",target:b.target}:"required_file_role"===b.type?{subject:"file_role",operator:"exists",target:b.target}:"required_prompt_role"===b.type?{subject:"prompt_role",operator:"exists",target:b.target}:"source_required"===b.type?{subject:"source",operator:"all_have_source"}:"forbidden_text"===b.type?{subject:"document",operator:"not_contains",value:b.value}:"min_chapter_length"===b.type?{subject:"chapter",operator:"min_length",target:b.target,min:Number(b.value)||void 0}:"table_required"===b.type?{subject:"table",operator:"min_count",min:1}:{subject:"document",operator:"contains",value:b.value||b.target},o=n.target||b.target||"",p=n.value||b.value||o,q=n.min||Number(b.value)||1,r=d.find(a=>a.title===o),s="chapter"===n.subject&&r?r.content:e,t=p?function(a){try{return RegExp(a,"iu")}catch{return}}(p):void 0;"fact"===n.subject&&"exists"===n.operator&&o&&!j.has(o)&&h.push({level:a,message:am(b,`缺少事实 ${o}`)}),"chapter"===n.subject&&"exists"===n.operator&&o&&!k.has(o)&&h.push({level:a,message:am(b,`缺少章节 ${o}`)}),"file_role"===n.subject&&"exists"===n.operator&&o&&!f.some(a=>a.roleId===o)&&h.push({level:a,message:am(b,`缺少文件角色 ${o}`)}),"prompt_role"===n.subject&&"exists"===n.operator&&o&&!g.some(a=>a.roleId===o)&&h.push({level:a,message:am(b,`缺少提示词角色 ${o}`)}),"document"===n.subject&&"contains"===n.operator&&p&&!e.includes(p)&&h.push({level:a,message:am(b,`全文必须包含 ${p}`)}),"document"===n.subject&&"not_contains"===n.operator&&p&&e.includes(p)&&h.push({level:a,message:am(b,`出现禁用文本 ${p}`)}),"document"!==n.subject&&"chapter"!==n.subject||"regex_match"!==n.operator||!p||t&&t.test(s)||h.push({level:a,message:am(b,`未匹配正则 ${p}`)}),("document"===n.subject||"chapter"===n.subject)&&"regex_not_match"===n.operator&&t?.test(s)&&h.push({level:a,message:am(b,`匹配到禁止正则 ${p}`)}),"chapter"===n.subject&&"contains"===n.operator&&o&&p&&(!r||!r.content.includes(p))&&h.push({level:a,message:am(b,`章节 ${o} 必须包含 ${p}`)}),"chapter"===n.subject&&"not_contains"===n.operator&&r?.content.includes(p)&&h.push({level:a,message:am(b,`章节 ${o} 出现禁用文本 ${p}`)}),"chapter"===n.subject&&"min_length"===n.operator&&o&&(!r||r.content.length<q)&&h.push({level:a,message:am(b,`章节 ${o} 低于 ${q} 字`)}),"table"===n.subject&&"min_count"===n.operator&&c.tables.length+l.length<q&&h.push({level:a,message:am(b,`表格数量少于 ${q}`)}),"table"===n.subject&&"table_explanation_required"===n.operator&&l.some(a=>e.indexOf(a)>=0&&e.slice(e.indexOf(a)+a.length,e.indexOf(a)+a.length+120).trim().length<10)&&h.push({level:a,message:am(b,"存在缺少说明文字的表格")}),"image"===n.subject&&"min_count"===n.operator&&m.length<q&&h.push({level:a,message:am(b,`图片数量少于 ${q}`)}),"image"===n.subject&&"image_caption_required"===n.operator&&m.some(a=>!a.alt&&e.slice(a.index+a.url.length,a.index+a.url.length+120).trim().length<10)&&h.push({level:a,message:am(b,"存在缺少说明文字的图片")}),"source"===n.subject&&"all_have_source"===n.operator&&i.some(a=>!a.sourceFile)&&h.push({level:a,message:am(b,"存在无来源事实")}),"source"===n.subject&&"min_count"===n.operator&&new Set(i.map(a=>a.sourceFile).filter(Boolean)).size<q&&h.push({level:a,message:am(b,`来源数量少于 ${q}`)})}return h}(o,[...aE,...aP.map(a=>({level:"warning",message:a}))],aC,A,aS,l,i)).push(...function(a,b){let c=a?.targetPages;if(!c?.min&&!c?.target&&!c?.max)return[];let d=b.replace(/<[^>]+>/gu,"").replace(/\s+/gu,"").length,e=Number(String(a&&"typography"in a&&a.typography?.bodySize||"").replace(/[^\d.]/gu,""))||14,f=Number(String(a&&"typography"in a&&a.typography?.lineHeight||"").replace(/[^\d.]/gu,""))||22,g=Math.ceil(d/(e>=14&&f>=22?620:800)),h=c.min||c.target,i=c.max||c.target,j=[];return h&&g<h&&j.push({level:"error",message:`正文篇幅低于目标页数:预计约 ${g} 页,目标不少于 ${h} 页`,suggestion:"请重新生成或增加章节正文深度后再导出正式文件。"}),i&&g>i+4&&j.push({level:"warning",message:`正文篇幅可能超过目标页数:预计约 ${g} 页,目标不超过 ${i} 页`,suggestion:"建议检查是否存在重复段落或过度展开。"}),j}(b.generationSettings||b.exportSettings,aS)),aE.push(...aq(aS,b));let aT=function(a,b,c){let d=[{key:"no_errors",label:"无阻断级校验错误",passed:!a.some(a=>"error"===a.level&&al(a))},{key:"project_facts",label:"项目基础事实齐全",passed:b.project.length>0},{key:"source_traceability",label:"事实具备来源追踪",passed:[...b.project,...b.schedule,...b.quality,...b.safety].every(a=>!!a.sourceFile)},{key:"chapter_evidence",label:"章节均具备证据",passed:c.every(a=>a.evidence.length>0)},{key:"no_missing_content",label:"无资料未提供章节",passed:c.every(a=>!a.content.includes("资料未提供"))}],e=a.filter(a=>"error"===a.level&&al(a));return{passed:0===e.length&&d.every(a=>a.passed),blockingIssues:e,checklist:d}}(aE,aC,A),aU=aT.blockingIssues.length,aV=aR.map(a=>"validation"===a.type?{...a,status:aU>0?"failed":"success",message:`阻断 ${aU},问题 ${aE.length}`}:"export_ready"===a.type?{...a,status:aT.passed?"success":"failed",message:aT.passed?"已准备好导出 Markdown/HTML/DOCX/PDF":"导出门禁存在阻断项"}:a);return{...aJ,validationIssues:aE,exportGate:aT,executionStages:aV,markdown:aS}}async function au(a){let b=w(a.templateId);if(!b)throw Error("Document template not found");let c=b.chapters.find(b=>b.id===a.chapterId);if(!c)throw Error("Document chapter not found");let d=a.projectRoot||(0,j.aY)();if(!d)throw Error("No knowledge base project found");let e=(0,j.Qh)(),f=Math.max(5,Math.min(30,a.maxEvidencePerChapter??12)),g=[];for(let a of c.queries){let b=await e.search(d,a,{scope:"project",limit:f,weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}});g.push(...b.results.map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,sectionTitle:a.sectionTitle,source:a.source})))}let h=F(g,f),i=a.currentMarkdown?a.currentMarkdown.slice(0,4e3):"",k=new Set(a.existingFacts??[]),l=c.requiredFacts.filter(a=>!k.has(a)&&!h.some(b=>L(b,a))),m=[`## ${c.title}`,"",a.requirement?`> 生成要求:${a.requirement}`:"",i?`> 当前文档上下文摘要:${i.replace(/\s+/gu," ").slice(0,800)}`:"",h.length>0?`本章根据知识库资料围绕“${c.purpose}”重新整理,并与当前文档上下文保持一致。`:"建议补充更多资料后复核。","",h.length>0?"### 资料依据":"",...h.map(H),"",l.length>0?"### 待确认事项":"",...l.map(a=>`- ${a}:建议人工复核或补充更明确资料。`)].filter(Boolean).join("\n");return{id:c.id,title:c.title,content:m,evidence:h,missingFacts:l}}},89952:(a,b,c)=>{c.d(b,{DZ:()=>q,FV:()=>p,Mu:()=>r,NR:()=>s,XB:()=>n,dg:()=>o,dw:()=>t});var d=c(73024),e=c(48161),f=c(76760);function g(){let a=f.join(e.homedir(),".customize-agent");return d.mkdirSync(a,{recursive:!0}),f.join(a,"document-roles.json")}function h(a){return(a||`item-${Date.now()}`).replace(/[^a-zA-Z0-9_-]/gu,"-").slice(0,80)}function i(a=[]){let b=new Set;return a.filter(a=>!(!a.roleId||b.has(a.roleId))&&(b.add(a.roleId),!0))}function j(a){var b,c;let d="prompt"===a.type?"prompt":"file";return{id:h(a.id),name:a.name||"未命名角色",description:a.description||"",type:d,resourceId:a.resourceId||a.resourceIds?.[0]||void 0,resourceIds:function(a=[]){return[...new Set(a.filter(Boolean))]}(Array.isArray(a.resourceIds)&&a.resourceIds.length>0?a.resourceIds:a.resourceId?[a.resourceId]:[]),executionType:"prompt"===d?"fact_extraction"===(b=a.executionType)||"chapter_generation"===b||"llm_review"===b||"validation"===b||"formatting"===b||"reference"===b?b:"reference":void 0,processingType:"file"===d?"rule"===(c=a.processingType)||"project_fact"===c||"table"===c||"drawing"===c||"specification"===c||"reference"===c?c:"reference":void 0}}function k(a){return{id:h(a.id),name:a.name||"未命名配置",description:a.description||"",builtIn:!!a.builtIn,fileRoles:i(Array.isArray(a.fileRoles)?a.fileRoles.filter(a=>a.roleId).map((a,b)=>({roleId:a.roleId,order:Number.isFinite(a.order)?a.order:b})):[]),promptRoles:i(Array.isArray(a.promptRoles)?a.promptRoles.filter(a=>a.roleId).map((a,b)=>({roleId:a.roleId,order:Number.isFinite(a.order)?a.order:b})):[])}}function l(){try{let a=g();if(!d.existsSync(a))return{roles:[],configs:[]};let b=JSON.parse(d.readFileSync(a,"utf-8"));if(Array.isArray(b))return{roles:b.map(j),configs:[]};return{roles:Array.isArray(b.roles)?b.roles.map(j):[],configs:Array.isArray(b.configs)?b.configs.map(k):[]}}catch{return{roles:[],configs:[]}}}function m(a){d.writeFileSync(g(),JSON.stringify({roles:a.roles.map(j),configs:a.configs.map(k)},null,2),"utf-8")}function n(a){let b=l().roles;return a?b.filter(b=>b.type===a):b}function o(a){let b=j(a),c=l();return c.roles=c.roles.filter(a=>a.id!==b.id||a.type!==b.type),c.roles.push(b),m(c),b}function p(a,b){let c=l();c.roles=c.roles.filter(c=>c.id!==b||c.type!==a),c.configs=c.configs.map(a=>({...a,fileRoles:a.fileRoles.filter(a=>a.roleId!==b),promptRoles:a.promptRoles.filter(a=>a.roleId!==b)})),m(c)}function q(){return l().configs}function r(a){return l().configs.find(b=>b.id===a)}function s(a){let b={...k(a),builtIn:!1},c=l();return c.configs=c.configs.filter(a=>a.id!==b.id),c.configs.push(b),m(c),b}function t(a){let b=l();b.configs=b.configs.filter(b=>b.id!==a),m(b)}},99842:(a,b,c)=>{c.d(b,{E:()=>t,Hh:()=>n,PH:()=>u,dg:()=>l,h0:()=>p,i3:()=>o,jk:()=>q,p:()=>s,pJ:()=>m});var d=c(87550),e=c.n(d),f=c(33873),g=c(21820),h=c(29021);let i={project_fact:"项目知识",user_preference:"用户偏好",feedback:"历史纠偏",pattern:"解决方案"};function j(){let a=f.join(g.homedir(),".customize-agent","memory.db");return h.existsSync(a)?new(e())(a,{readonly:!0}):null}function k(a){let b=Number(a.access_count??0);return{id:String(a.id),title:String(a.content||"").slice(0,80),content:String(a.content||""),type:String(a.type||"project_fact"),importance:b>=5?"high":b>=2?"medium":"low",tags:[i[String(a.type)]||String(a.type)],source:String(a.context||"").slice(0,100),created_at:new Date(String(a.created_at)).getTime(),updated_at:new Date(String(a.updated_at)).getTime()}}function l(a){let b=j();if(!b)return[];try{let c="SELECT * FROM memories WHERE access_count >= 2",d=[];return a&&(c+=" AND (content LIKE ? OR context LIKE ?)",d.push(`%${a}%`,`%${a}%`)),c+=" ORDER BY access_count DESC, updated_at DESC LIMIT 200",b.prepare(c).all(...d).map(k)}finally{b.close()}}function m(a){let b=j();if(!b)return[];try{let c="SELECT * FROM memories WHERE access_count < 2",d=[];return a&&(c+=" AND (content LIKE ? OR context LIKE ?)",d.push(`%${a}%`,`%${a}%`)),c+=" ORDER BY updated_at DESC LIMIT 200",b.prepare(c).all(...d).map(k)}finally{b.close()}}function n(a,b=8,c){let d=j();if(!d)return[];try{let e=a.split(/[\s,,。;;::、/\\|]+/u).map(a=>a.trim()).filter(a=>a.length>=2).slice(0,8),g=c?`%Project: ${f.resolve(c)}%`:void 0;if(0===e.length)return(g?d.prepare("SELECT * FROM memories WHERE context LIKE ? ORDER BY access_count DESC, updated_at DESC LIMIT ?").all(g,b):d.prepare("SELECT * FROM memories ORDER BY access_count DESC, updated_at DESC LIMIT ?").all(b)).map(k);let h=e.map(()=>"(content LIKE ? OR context LIKE ?)").join(" OR "),i=e.flatMap(a=>[`%${a}%`,`%${a}%`]);return(g?d.prepare(`
53
- SELECT * FROM memories
54
- WHERE context LIKE ? AND (${h})
55
- ORDER BY access_count DESC, updated_at DESC
56
- LIMIT ?
57
- `).all(g,...i,b):d.prepare(`
58
- SELECT * FROM memories
59
- WHERE ${h}
60
- ORDER BY access_count DESC, updated_at DESC
61
- LIMIT ?
62
- `).all(...i,b)).map(k)}finally{d.close()}}function o(a,b,c=""){let d=b.replace(/\s+/gu," ").trim();if(!d)return null;let i=f.join(g.homedir(),".customize-agent","memory.db");h.mkdirSync(f.dirname(i),{recursive:!0});let j=new(e())(i);try{j.exec(`
63
- CREATE TABLE IF NOT EXISTS memories (
64
- id TEXT PRIMARY KEY,
65
- type TEXT NOT NULL CHECK(type IN ('project_fact', 'user_preference', 'feedback', 'pattern')),
66
- content TEXT NOT NULL,
67
- context TEXT NOT NULL DEFAULT '',
68
- access_count INTEGER NOT NULL DEFAULT 0,
69
- created_at TEXT NOT NULL DEFAULT (datetime('now')),
70
- updated_at TEXT NOT NULL DEFAULT (datetime('now'))
71
- );
72
- `);let b=function(a){let b=0x811c9dc5;for(let c=0;c<a.length;c++)b^=a.charCodeAt(c),b=Math.imul(b,0x1000193);return(b>>>0).toString(16).padStart(8,"0")}(`${c}
73
- ${d.slice(0,200)}`);return j.prepare(`
74
- INSERT INTO memories (id, type, content, context) VALUES (?, ?, ?, ?)
75
- ON CONFLICT(id) DO UPDATE SET access_count = access_count + 1, updated_at = datetime('now'), context = ?
76
- `).run(b,a,d,c,c),b}finally{j.close()}}function p(a){let b=f.join(g.homedir(),".customize-agent","memory.db");if(!h.existsSync(b))return!1;let c=new(e())(b);try{return c.prepare("DELETE FROM memories WHERE id = ?").run(a).changes>0}finally{c.close()}}function q(a,b){let c=f.join(g.homedir(),".customize-agent","memory.db");if(!h.existsSync(c))return!1;let d=new(e())(c);try{return d.prepare("UPDATE memories SET content = ?, context = ?, updated_at = datetime('now') WHERE id = ?").run(b.content,b.context||"",a).changes>0}finally{d.close()}}function r(a){return"long_term"===a?"access_count >= 2":"access_count < 2"}function s(a){let b=j();if(!b)return{count:0,totalBytes:0};try{let c=b.prepare(`SELECT COUNT(*) as count, COALESCE(SUM(LENGTH(content) + LENGTH(context)), 0) as totalBytes FROM memories WHERE ${r(a)}`).get();return{count:Number(c.count??0),totalBytes:Number(c.totalBytes??0)}}finally{b.close()}}function t(a){let b=f.join(g.homedir(),".customize-agent","memory.db");if(!h.existsSync(b))return 0;let c=new(e())(b);try{let b=c.prepare(`SELECT rowid FROM memories WHERE ${r(a)}`).all();return c.transaction(()=>{c.prepare(`DELETE FROM memories WHERE ${r(a)}`).run()})(),b.length}finally{c.close()}}function u(a){let b=f.join(g.homedir(),".customize-agent","memory.db");if(!h.existsSync(b))return{changed:0,beforeBytes:0,afterBytes:0};let c=new(e())(b);try{let b=c.prepare(`SELECT id, content, context FROM memories WHERE ${r(a)}`).all(),d=0,e=0,f=0,g=a=>{let b=String(a||"").replace(/\s+/gu," ").trim();return b.length>1200?`${b.slice(0,1e3)} … ${b.slice(-160)}`:b},h=c.prepare("UPDATE memories SET content = ?, context = ?, updated_at = datetime('now') WHERE id = ?");return c.transaction(()=>{for(let a of b){e+=Buffer.byteLength(`${a.content}${a.context}`);let b=g(a.content),c=g(a.context);f+=Buffer.byteLength(`${b}${c}`),(b!==a.content||c!==a.context)&&(h.run(b,c,a.id),d++)}})(),{changed:d,beforeBytes:e,afterBytes:f}}finally{c.close()}}}};
@@ -1 +0,0 @@
1
- "use strict";(()=>{var a={};a.id=1282,a.ids=[1282],a.modules={48161:a=>{a.exports=require("node:os")},57367:(a,b,c)=>{c.d(b,{Co:()=>A,EK:()=>C,ER:()=>D,_q:()=>x,py:()=>B,uD:()=>y,ug:()=>z});var d=c(73024),e=c(48161),f=c(76760);let g=[{id:"required_fact",name:"必需事实",description:"检查指定事实字段是否存在。",builtIn:!0,defaultLevel:"warning",evaluator:{subject:"fact",operator:"exists"}},{id:"required_chapter",name:"必需章节",description:"检查指定章节是否存在。",builtIn:!0,defaultLevel:"error",evaluator:{subject:"chapter",operator:"exists"}},{id:"required_file_role",name:"必需文件角色",description:"检查项目角色配置是否绑定指定文件角色。",builtIn:!0,defaultLevel:"error",evaluator:{subject:"file_role",operator:"exists"}},{id:"required_prompt_role",name:"必需提示词角色",description:"检查项目角色配置是否绑定指定提示词角色。",builtIn:!0,defaultLevel:"warning",evaluator:{subject:"prompt_role",operator:"exists"}},{id:"source_required",name:"事实必须有来源",description:"检查结构化事实是否都有资料来源。",builtIn:!0,defaultLevel:"warning",evaluator:{subject:"source",operator:"all_have_source"}},{id:"forbidden_text",name:"禁止出现文本",description:"检查全文是否出现禁用文本。",builtIn:!0,defaultLevel:"error",evaluator:{subject:"document",operator:"not_contains"}},{id:"min_chapter_length",name:"章节最低字数",description:"检查指定章节是否达到最低字数。",builtIn:!0,defaultLevel:"warning",evaluator:{subject:"chapter",operator:"min_length"}},{id:"table_required",name:"必须有表格",description:"检查文档是否包含结构化表格。",builtIn:!0,defaultLevel:"warning",evaluator:{subject:"table",operator:"min_count",min:1}}],h=new Map(g.map(a=>[a.id,a])),i=["document","chapter","fact","file_role","prompt_role","table","image","source"],j=["exists","contains","not_contains","regex_match","regex_not_match","min_count","min_length","all_have_source","image_caption_required","table_explanation_required"];function k(){let a=f.join(e.homedir(),".customize-agent");return d.mkdirSync(a,{recursive:!0}),a}function l(){return f.join(k(),"document-specs.json")}function m(){return f.join(k(),"document-gate-types.json")}function n(a){return(a||`spec-${Date.now()}`).replace(/[^a-zA-Z0-9_-]/gu,"-").slice(0,80)}function o(a,b=""){return String(a||b).trim().slice(0,500)}function p(a=[]){return[...new Set(a.filter(Boolean))]}function q(a,b){let c=a||b||{subject:"document",operator:"contains"},d=i.includes(c.subject)?c.subject:"document",e=j.includes(c.operator)?c.operator:"contains",f=Number(c.min);return{subject:d,operator:e,target:o(c.target),value:o(c.value),min:Number.isFinite(f)&&f>0?f:void 0}}function r(a){let b=n(a.id||a.name||`gate-type-${Date.now()}`);if(h.has(b))throw Error("不能覆盖系统内置门禁类型");return{id:b,name:o(a.name,"自定义门禁类型"),description:o(a.description),builtIn:!1,defaultLevel:"warning"===a.defaultLevel||"info"===a.defaultLevel?a.defaultLevel:"error",evaluator:q(a.evaluator)}}function s(a){return{id:n(a.id),name:a.name||"未命名规范包",description:a.description||"",factFields:Array.isArray(a.factFields)?a.factFields.filter(a=>a.name).map(a=>({id:n(a.id),name:a.name,type:"auto",required:!!a.required,sourceRoleIds:p(Array.isArray(a.sourceRoleIds)?a.sourceRoleIds:[]),extractionHint:a.extractionHint||"",validationHint:a.validationHint||""})):[],chapterMode:"fixed"===a.chapterMode?"fixed":"dynamic",chapterRules:Array.isArray(a.chapterRules)?a.chapterRules.filter(a=>a.title).map((a,b)=>({id:n(a.id),title:a.title,required:!!a.required,order:Number.isFinite(a.order)?a.order:b,minWords:Number.isFinite(a.minWords)?a.minWords:0,requiredFactIds:p(Array.isArray(a.requiredFactIds)?a.requiredFactIds:[]),requiredFileRoleIds:p(Array.isArray(a.requiredFileRoleIds)?a.requiredFileRoleIds:[]),requiredPromptRoleIds:p(Array.isArray(a.requiredPromptRoleIds)?a.requiredPromptRoleIds:[]),generationHint:a.generationHint||""})):[],dynamicChapterRule:{source:["file_outline","file_role","fact_group","table_rows"].includes(a.dynamicChapterRule?.source)?a.dynamicChapterRule.source:"ai_plan",sourceRoleIds:p(Array.isArray(a.dynamicChapterRule?.sourceRoleIds)?a.dynamicChapterRule.sourceRoleIds:[]),minChapters:Number.isFinite(a.dynamicChapterRule?.minChapters)?a.dynamicChapterRule.minChapters:void 0,maxChapters:Number.isFinite(a.dynamicChapterRule?.maxChapters)?a.dynamicChapterRule.maxChapters:void 0,titleStrategy:["source_title","field_value","template"].includes(a.dynamicChapterRule?.titleStrategy||"")?a.dynamicChapterRule?.titleStrategy:"ai_summary",titleTemplate:a.dynamicChapterRule?.titleTemplate||"",minWordsPerChapter:Number.isFinite(a.dynamicChapterRule?.minWordsPerChapter)?a.dynamicChapterRule.minWordsPerChapter:void 0,requiredFactIds:p(Array.isArray(a.dynamicChapterRule?.requiredFactIds)?a.dynamicChapterRule.requiredFactIds:[]),requiredFileRoleIds:p(Array.isArray(a.dynamicChapterRule?.requiredFileRoleIds)?a.dynamicChapterRule.requiredFileRoleIds:[]),requiredPromptRoleIds:p(Array.isArray(a.dynamicChapterRule?.requiredPromptRoleIds)?a.dynamicChapterRule.requiredPromptRoleIds:[]),generationHint:a.dynamicChapterRule?.generationHint||""},gateRules:Array.isArray(a.gateRules)?a.gateRules.filter(a=>a.name).map(a=>{var b;let c=n(a.type||a.name||"custom_gate");return{id:n(a.id),name:a.name,type:c,level:"warning"===a.level||"info"===a.level?a.level:"error",target:a.target||"",value:a.value||"",evaluator:q((b={...a,type:c}).evaluator,h.get(b.type)?.evaluator)}}):[],wordTemplatePath:a.wordTemplatePath||"",builtIn:!!a.builtIn}}function t(){try{let a=l();if(!d.existsSync(a))return[];return JSON.parse(d.readFileSync(a,"utf-8")).map(s)}catch{return[]}}function u(a){d.writeFileSync(l(),JSON.stringify(a.map(s),null,2),"utf-8")}function v(){try{let a=m();if(!d.existsSync(a))return[];return JSON.parse(d.readFileSync(a,"utf-8")).map(r)}catch{return[]}}function w(a){d.writeFileSync(m(),JSON.stringify(a.map(r),null,2),"utf-8")}function x(){return[...new Map([...g,...v()].map(a=>[a.id,a])).values()]}function y(a){let b=r(a),c=v().filter(a=>a.id!==b.id);return c.push(b),w(c),b}function z(a){if(h.has(a))throw Error("系统内置门禁类型不可删除");w(v().filter(b=>b.id!==a))}function A(){return[...new Map(t().map(a=>[a.id,a])).values()]}function B(a){if(a)return t().find(b=>b.id===a)}function C(a){let b=s(a),c=t().filter(a=>a.id!==b.id);return c.push(b),u(c),b}function D(a){u(t().filter(b=>b.id!==a))}},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")},81296:(a,b,c)=>{c.r(b),c.d(b,{config:()=>n,default:()=>m,handler:()=>p});var d={};c.r(d),c.d(d,{default:()=>j});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(57367);function j(a,b){try{let c=String(a.query.mode||"spec");if("GET"===a.method)return b.status(200).json({specs:(0,i.Co)(),gateTypes:(0,i._q)()});if("POST"===a.method||"PUT"===a.method){if("gate-type"===c){let c=a.body;if(!c?.id||!c.name)return b.status(400).json({error:"gate type id and name required"});return b.status(200).json({gateType:(0,i.uD)(c),gateTypes:(0,i._q)(),specs:(0,i.Co)()})}let d=a.body;if(!d?.id||!d.name)return b.status(400).json({error:"spec id and name required"});return b.status(200).json({spec:(0,i.EK)(d),specs:(0,i.Co)(),gateTypes:(0,i._q)()})}if("DELETE"===a.method){let d=String(a.query.id||"");if(!d)return b.status(400).json({error:"id required"});if("gate-type"===c)return(0,i.ug)(d),b.status(200).json({success:!0,specs:(0,i.Co)(),gateTypes:(0,i._q)()});return(0,i.ER)(d),b.status(200).json({success:!0,specs:(0,i.Co)(),gateTypes:(0,i._q)()})}return b.status(405).json({error:"Method not allowed"})}catch(a){console.error("[api] documents/specs",a),b.status(500).json({error:a instanceof Error?a.message:"Internal server error"})}}var k=c(68970),l=c(50296);let m=(0,h.M)(d,"default"),n=(0,h.M)(d,"config"),o=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/documents/specs",pathname:"/api/documents/specs",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function p(a,b,c){let d=await o.prepare(a,b,{srcPage:"/api/documents/specs"});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,k.getTracer)(),e=d.getActiveScopeSpan(),j=o.instrumentationOnRequestError.bind(o),m=async e=>o.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:o.isDev,page:"/api/documents/specs",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")!==l.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 m(e):await d.withPropagatedContext(a.headers,()=>d.trace(l.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:k.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},m))}catch(a){if(o.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705],()=>b(b.s=81296));module.exports=c})();
@@ -1 +0,0 @@
1
- {"version":1,"files":["../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/client/components/app-router-headers.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/compiled/bytes/index.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/compiled/bytes/package.json","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/compiled/next-server/pages-api.runtime.prod.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/compiled/raw-body/index.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/compiled/raw-body/package.json","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/lib/client-and-server-references.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/lib/constants.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/lib/interop-default.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/lib/is-error.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/lib/semver-noop.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/server/app-render/async-local-storage.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/server/app-render/work-async-storage.external.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/server/lib/cache-handlers/default.external.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/server/lib/lru-cache.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/server/lib/trace/constants.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/server/lib/trace/tracer.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/server/load-manifest.external.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/server/response-cache/types.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/shared/lib/deep-freeze.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/shared/lib/invariant-error.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/shared/lib/is-plain-object.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/shared/lib/is-thenable.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/dist/shared/lib/server-reference-info.js","../../../../../../../node_modules/.pnpm/next@15.5.19_react-dom@19.2.7_react@19.2.7__react@19.2.7_sass@1.101.0/node_modules/next/package.json","../../../../../node_modules/next","../../../../../package.json","../../../../package.json","../../../chunks/9705.js","../../../webpack-api-runtime.js"]}