@customize-agent/server 4.60.31 → 4.60.32
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.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +32 -29
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.json +1 -1
- package/.next/server/chunks/1243.js +1 -1
- package/.next/server/chunks/1936.js +8 -8
- package/.next/server/chunks/2328.js +1 -1
- package/.next/server/chunks/6822.js +1 -1
- package/.next/server/chunks/{4722.js → 7848.js} +13 -13
- package/.next/server/chunks/8204.js +1 -1
- package/.next/server/chunks/9666.js +51 -50
- package/.next/server/instrumentation.js +1 -1
- package/.next/server/instrumentation.js.nft.json +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/api/config/embedding/healthCheck.js +2 -1
- package/.next/server/pages/api/config/embedding.js +2 -1
- package/.next/server/pages/api/config/healthCheck.js +2 -1
- package/.next/server/pages/api/config/models.js +2 -1
- package/.next/server/pages/api/config/providers/[provider].js +2 -1
- package/.next/server/pages/api/config/providers.js +2 -1
- package/.next/server/pages/api/config/reset.js +3 -0
- package/.next/server/pages/api/config/reset.js.nft.json +1 -0
- package/.next/server/pages/api/config/web-access.js +2 -1
- package/.next/server/pages/api/documents/export.js +1 -1
- package/.next/server/pages/api/documents/generate/preview.js +1 -1
- package/.next/server/pages/api/documents/generate.js +1 -1
- package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/confirm.js +1 -1
- package/.next/server/pages/api/health.js +1 -1
- package/.next/server/pages/api/kb/features.js +2 -1
- package/.next/server/pages/api/prompt/chat.js +3 -2
- package/.next/server/pages/api/system/reset.js +1 -1
- package/.next/server/pages/canvas/[id].html +1 -1
- package/.next/server/pages/canvas.html +1 -1
- package/.next/server/pages/documents.html +1 -1
- package/.next/server/pages/guide.html +1 -1
- package/.next/server/pages/index.html +1 -1
- package/.next/server/pages/jobs.html +1 -1
- package/.next/server/pages/knowledge/file-detail.html +1 -1
- package/.next/server/pages/knowledge/files.html +1 -1
- package/.next/server/pages/knowledge/manage.html +1 -1
- package/.next/server/pages/knowledge/source-preview.html +1 -1
- package/.next/server/pages/knowledge.html +1 -1
- package/.next/server/pages/models.html +1 -1
- package/.next/server/pages/overview.html +1 -1
- package/.next/server/pages/prompt.html +1 -1
- package/.next/server/pages/settings.html +1 -1
- package/.next/server/pages/skills/[id]/edit.html +1 -1
- package/.next/server/pages/skills/[id]/edit.js.nft.json +1 -1
- package/.next/server/pages/skills/[id].html +1 -1
- package/.next/server/pages/skills/[id].js.nft.json +1 -1
- package/.next/server/pages/skills/new.html +1 -1
- package/.next/server/pages/skills/new.js.nft.json +1 -1
- package/.next/server/pages/skills.html +1 -1
- package/.next/server/pages/system/logs.html +1 -1
- package/.next/server/pages-manifest.json +37 -36
- package/.next/static/279fd5e41d98af82751903f8ea0267af84a75c794a35915a6e294777024190f8/_buildManifest.js +1 -0
- package/.next/static/chunks/1141-d420a7685bc3623c.js +1 -0
- package/.next/static/chunks/2864-b040f2bffa08c139.js +6 -0
- package/.next/static/chunks/3456-70bb03a39473f693.js +1 -0
- package/.next/static/chunks/3980-73841c40d55ddfa1.js +1 -0
- package/.next/static/chunks/4337-a670a1a94ab505d9.js +1 -0
- package/.next/static/chunks/6506-ac0ba7338cc84b7d.js +1 -0
- package/.next/static/chunks/6748-07b0b05bf03c72f0.js +1 -0
- package/.next/static/chunks/9937-e4b2deadd24e3962.js +1 -0
- package/.next/static/chunks/pages/{_app-73e5b40b24a7fe7d.js → _app-646f249ed0cc363f.js} +13 -13
- package/.next/static/chunks/pages/canvas/{[id]-45da860b862e0743.js → [id]-18865f1b7e3a4696.js} +1 -1
- package/.next/static/chunks/pages/canvas-47a86f1679c159af.js +1 -0
- package/.next/static/chunks/pages/knowledge/file-detail-3d1ffd43f4f0e47b.js +1 -0
- package/.next/static/chunks/pages/knowledge/{source-preview-40ff4936b832787e.js → source-preview-24936b9a746ed07f.js} +1 -1
- package/.next/static/chunks/pages/models-e679c45d71631078.js +1 -0
- package/.next/static/chunks/pages/skills/[id]/{edit-35892def57c4975f.js → edit-99e616d5019e80b1.js} +1 -1
- package/.next/static/chunks/pages/skills/[id]-71f696be252bbf0d.js +1 -0
- package/.next/static/chunks/pages/skills/{new-a279e6ca2f7aded7.js → new-00886ea4c676f927.js} +1 -1
- package/.next/static/css/808682ca3875966b.css +1 -0
- package/messages/en-US.json +11 -0
- package/messages/zh-CN.json +11 -0
- package/package.json +3 -3
- package/scripts/brand-moon-fit.cjs +0 -47
- package/scripts/generate-brand-assets.cjs +0 -41
- package/scripts/half-built-scan.allow.json +16 -6
- package/scripts/half-built-scan.baseline.json +2 -17
- package/scripts/half-built-scan.mjs +1 -84
- package/.next/server/chunks/6021.js +0 -1
- package/.next/static/0fdab21c22b65a3042c22ee4ac8e49fbfd22e365df64d5e9b709ccb05aecf02e/_buildManifest.js +0 -1
- package/.next/static/chunks/2378-c6d25abe02815666.js +0 -1
- package/.next/static/chunks/2864-67ba808c5092c2f9.js +0 -6
- package/.next/static/chunks/3456-8b609f8475ae5030.js +0 -1
- package/.next/static/chunks/5046-abead1022185a99a.js +0 -1
- package/.next/static/chunks/5257-915621e439b56580.js +0 -1
- package/.next/static/chunks/6505-012e90937e1e8dae.js +0 -1
- package/.next/static/chunks/6748-04b5429330e1451e.js +0 -1
- package/.next/static/chunks/7955-3a7ee8cda4f857b9.js +0 -1
- package/.next/static/chunks/pages/canvas-a15773d02c97b7a6.js +0 -1
- package/.next/static/chunks/pages/knowledge/file-detail-5859f0c25af34ffe.js +0 -1
- package/.next/static/chunks/pages/models-0aaff5bfadc7b62f.js +0 -1
- package/.next/static/chunks/pages/skills/[id]-19c352e150e05c27.js +0 -1
- package/.next/static/css/837ac5def44e2eba.css +0 -1
- package/scripts/capture-baseline.mjs +0 -353
- /package/.next/static/{0fdab21c22b65a3042c22ee4ac8e49fbfd22e365df64d5e9b709ccb05aecf02e → 279fd5e41d98af82751903f8ea0267af84a75c794a35915a6e294777024190f8}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";exports.id=2328,exports.ids=[2328],exports.modules={22328:(a,b,c)=>{c.d(b,{I4:()=>r,Q6:()=>q,WW:()=>t,oO:()=>p,oy:()=>n,rN:()=>m,xv:()=>o});var d=c(73024),e=c(76760),f=c(70949),g=c(
|
|
1
|
+
"use strict";exports.id=2328,exports.ids=[2328],exports.modules={22328:(a,b,c)=>{c.d(b,{I4:()=>r,Q6:()=>q,WW:()=>t,oO:()=>p,oy:()=>n,rN:()=>m,xv:()=>o});var d=c(73024),e=c(76760),f=c(70949),g=c(77416),h=c(44533),i=c(58543),j=c(68023);class k extends Error{constructor(a,b,c){super(a),this.file=b,this.cause=c,this.name="RepairStoreError"}}function l(a,b){return e.join(b,`${a}.repairs.jsonl`)}function m(a,b,c){let f=l(a,c),g={v:1,t:Date.now(),request:b};try{d.mkdirSync(e.dirname(f),{recursive:!0}),d.appendFileSync(f,`${JSON.stringify(g)}
|
|
2
2
|
`)}catch(b){throw new k(`修复请求落盘失败(节点/修复日志是唯一真相源,不得静默丢):${a}`,f,b)}}function n(a,b){let c,e=l(a,b);try{c=d.readFileSync(e,"utf8")}catch{return[]}let f=new Map;for(let a of c.split("\n"))if(a.trim())try{let b=JSON.parse(a);if(b?.v!==1||!b.request?.id)continue;f.set(b.request.id,b.request)}catch{continue}return[...f.values()].sort((a,b)=>a.id.localeCompare(b.id))}function o(a){return a.targetNodeId||a.localization?.accepted?a.transaction?(0,j.Ui)(a.transaction.recheck.before,a.transaction.recheck.after)||a.transaction.recheck.after.contractQuality?.requestedChangeVerified!==!0?"unclassified":/资料|证据|材料|知识库/u.test(a.impact?.reason||"")?"material-insufficient":(0,j.Un)(a.transaction.recheck.before,a.transaction.recheck.after)?"unclassified":"writing-capacity":a.execution&&!a.execution.available?"rerun-with-feedback"===a.execution.action?"detector-unwired":/不在本文档节点表内/u.test(a.execution.unavailableReason||"")?"unclassified":"detector-unwired":"unclassified":(a.localization?.candidates?.length??0)===0?"detector-missing":"detector-unwired"}class p extends Error{constructor(){super("该历史文档没有冻结合同和统一文档模型,不能按新体系自动补写;历史正文与报告仍可读取"),this.code="NATIVE_REPAIR_CONTRACT_REQUIRED",this.name="NativeRepairContractRequiredError"}}function q(a){let b=(0,f.getGeneratedDocument)(a.documentId,a.projectRoot);if(!b)throw Error("待修订文档不存在");if(!(0,i.Jd)(b))throw new p;return(0,i.fC)({request:a.request,documentId:a.documentId,projectRoot:a.projectRoot??b.projectRoot??(0,h.aY)()})}function r(a){let b=[];for(let c of a.matchAll(/[「『“"《【]([^」』”"》】]{2,})[」』”"》】]/gu))b.push(c[1].trim());for(let c of a.matchAll(/[0-9A-Za-z一-龥][0-9A-Za-z一-龥0-9.-]{2,}/gu))b.push(c[0].trim());return[...new Set(b.filter(a=>a.length>=4))]}function s(a){let{request:b,at:c}=a,d=b.transaction?.recheck,e={at:c,requestId:b.id,nodeId:b.targetNodeId,nodeKind:b.transaction?.nodeKind,action:b.transaction?.action,actionSource:b.transaction?.actionSource,userMessage:b.userMessage,localization:{method:b.localization?.method,candidateCount:b.localization?.candidates?.length??0,acceptedNodeId:b.localization?.accepted},changes:(b.transaction?.changes||[]).map(a=>({nodeId:a.nodeId,beforeChars:a.beforeChars,afterChars:a.afterChars})),outcome:b.outcome||"unfixable",attribution:o(b),impactClass:b.impact?.class,notExecutedReason:b.notExecutedReason};if(d){let a=(0,j.Ui)(d.before,d.after)??("fixed"!==b.outcome&&"partial"!==b.outcome||(0,j.Un)(d.before,d.after)?void 0:"回执未证明请求修改已核验且同合同复验未退步");a&&(e.notExecutedReason=[e.notExecutedReason,`历史修复结果无法按当前固定合同验证:${a};原始 outcome 仅为历史记录,观察计数不代表七维验收。`].filter(Boolean).join(" ")),e.netEffect={blocking:[d.before.blocking,d.after.blocking],entityPlacement:[d.before.entityPlacement,d.after.entityPlacement],chars:[d.before.chars,d.after.chars]}}return e}function t(a,b){return(0,g.ZS)((function(a,b){let c,e=l(a,b);try{c=d.readFileSync(e,"utf8")}catch{return[]}let f=new Map;for(let a of c.split("\n"))if(a.trim())try{let b=JSON.parse(a);if(b?.v!==1||!b.request?.id)continue;f.set(b.request.id,{at:b.t,request:b.request})}catch{continue}return[...f.values()].sort((a,b)=>a.at-b.at||a.request.id.localeCompare(b.request.id))})(a,b).map(s))}},58543:(a,b,c)=>{c.d(b,{fC:()=>J,Du:()=>I,pA:()=>L,Jd:()=>G});var d=c(73024),e=c.n(d),f=c(77598),g=c(32460),h=c(70949),i=c(7942),j=c(35091),k=c(31698),l=c(61197),m=c(94173),n=c(19444),o=c(80408),p=c(12866),q=c(22157),r=c(59948),s=c(30839),t=c(72275),u=c(34680),v=c(96241),w=c(43800),x=c(41791),y=c(62065),z=c(51326),A=c(7661),B=c(51750),C=c(48479),D=c(6361);let E=a=>(0,f.createHash)("sha256").update(JSON.stringify(a)).digest("hex"),F=a=>Object.fromEntries(Object.entries(a.tasks).map(([a,b])=>[a,b.current.output]));function G(a){return!!(a.nativeRevision||a.reviewMetadata?.contractQuality||a.draft?.reviewMetadata?.contractQuality)}function H(a,b){if(!a.runId||!a.draft||["generating","queued"].includes(a.status))throw Error("结构化修复需要已经停止写入的文档运行及完整草稿资产");let c=(0,h.Gl)(b),d=(b,d)=>{let g=e().readFileSync((0,i.HM)(c,b,a.runId));if(d&&(0,f.createHash)("sha256").update(g).digest("hex")!==d)throw Error("结构化修订资产哈希不一致");return JSON.parse(g.toString("utf8"))},g=d("author-resume-state.json");(0,j.oH)(g.contract),(0,k.oG)(b,g.projectModel);let p=g.writerContext.sharedConstructionPlan;if(!p)throw Error("当前结构化文档缺少同版共享施工计划,不能恢复来源适用性校验");(0,l.wB)(p,g.contract,g.projectModel),(0,m.tD)(g.projectModel,g.contract.sections.map(a=>(0,l.G6)(p,g.projectModel,a.id))),(0,n.R)(g.projectModel,c,a.runId),(0,n.u)(g.projectModel,c,a.runId);let q=d(a.nativeRevision?.modelFile??"document-model-final.json",a.nativeRevision?.modelSha256),A=(0,u.Zk)();(0,o.cv)(A,g.contract,g.projectModel,{restore:q}),(0,j.qK)(A,g.contract);let B=a.nativeRevision?.accountingFile??"author-accounting-final.json";(a.nativeRevision?.accountingFile||e().existsSync((0,i.HM)(c,B,a.runId)))&&(0,r.zh)(A,d(B,a.nativeRevision?.accountingSha256)),(0,s.C)({directory:c,runId:a.runId,contractId:g.contract.id,diagnostics:A});let C={};(0,z.ST)(C),(0,z.er)(A,C);let D=(0,z.c9)(A),G=D.models.active,H=G&&D.models.list.find(a=>a.name===G.name&&a.provider===G.provider),I={origin:"current-user-selection-at-repair-start",active:G,selected:H?{provider:H.provider,name:H.name,thinking:H.thinking??"follow-task"}:null,configurationFingerprint:(0,z.Q6)(C)},J=(0,v.rZ)({generatedDir:c,projectRoot:b,documentId:a.id}),K=b=>(0,o.BO)(g.contract,b,a.title,a.draft.chapters,J.renderer),L=K(q);if((a.editedMarkdown??a.markdown)!==L.markdown||a.draft.markdown!==L.markdown)throw Error("当前正文已脱离统一模型;须先重建并复验,不能通过字符串修复覆盖原结构化资产");let M=a.nativeRevision?d(a.nativeRevision.qualityFile,a.nativeRevision.qualitySha256):a.reviewMetadata?.contractQuality??a.draft.reviewMetadata?.contractQuality;if(!M||M.version!==t.Ly||M.contractId!==g.contract.id||M.projectSnapshotId!==g.projectModel.snapshotId||M.documentHash!==(0,t.Sl)(L.chapters,L.markdown)||M.authorModelHash!==(0,t.Np)(F(q))||E(M.score)!==E((0,j._n)(g.contract,M.findings)))throw Error("当前七维回执与统一模型不一致,需要完整复验");if(!g.writerContext.resumeContext)throw Error("缺少写作及机械终检的冻结上下文,不能空跑后宣称修复通过");let N=function(a){let b=new w.h(a.signal);return{global:{input:{...a,signal:b.signal},preparationWork:b,emitProgress:()=>void 0,withProgressHeartbeat:async a=>a(),...void 0!==a.nodeLogBaseDir?{nodeLogBaseDir:a.nodeLogBaseDir}:{},chapterDrafts:[],checkpointChapterOrderIds:[]},prepare:{},understanding:{},planning:{},blueprint:{},chapterLoop:{}}}({});return(0,x.k)(N,g.writerContext.resumeContext),{base:g,model:q,quality:M,diagnostics:A,render:K,rendered:L,mechanical:a=>(0,y.u)({documentContract:g.contract,generationDiagnostics:A,projectMaterialSummary:N.prepare.projectMaterialSummary,bidComposition:N.understanding.bidComposition,hazardBindings:N.understanding.hazardResolution?.bindings},K(a),a),figures:J,directory:c,modelSelection:I}}function I(a,b,c){return Object.entries(H(a,b).model.tasks).flatMap(([a,b])=>{let d=c.filter(a=>b.current.markdown.includes(a));if(!d.length)return[];let e=b.current.markdown.indexOf(d[0]);return[{nodeId:a,score:d.reduce((a,b)=>a+b.length,0),excerpt:b.current.markdown.slice(Math.max(0,e-20),e+d[0].length+20)}]}).sort((a,b)=>b.score-a.score||a.nodeId.localeCompare(b.nodeId)).slice(0,5)}function J(a){let b,c,d=(0,h.CX)(a.documentId,a.projectRoot);if(!d)throw Error("待修复文档不存在");let e=H(d,a.projectRoot),j=E(d),k=`repair-${(0,f.randomUUID)()}`;(0,g.yY)(e.diagnostics,{generatedDir:e.directory,runId:k,contract:e.base.contract}),(0,i.tv)(e.directory,"repair-inputs.json",{repairRunId:k,originRunId:d.runId,documentId:d.id,request:a.request,modelSelection:e.modelSelection,originalRecordHash:j,contractId:e.base.contract.id,projectSnapshotId:e.base.projectModel.snapshotId,firstCandidateHashes:e.model.c0TaskHashes},k);let l=function(a,b,c){if(a.base.contract.sections.some(a=>a.id===c))return[c];let d=a.base.contract.chapters.find(a=>a.id===c||(0,C.Ts)(a.id)===c);if(d)return d.sectionIds;let e=(0,B.g0)(b.id,a.directory).find(a=>a.id===c),f=e?.metrics?.taskId;if("string"==typeof f&&a.base.contract.sections.some(a=>a.id===f))return[f];throw Error("目标节点没有固定作者任务身份,不能猜测修改范围")}(e,d,a.request.targetNodeId),m=(a,b,c)=>({blocking:e.mechanical(a).filter(a=>"error"===a.level||"blocker"===a.severity).length+b.score.blocking.length+(0,t.ie)(b).length,entityPlacement:Object.values(a.tasks).reduce((a,b)=>a+b.current.output.factBindings.length,0),chars:e.render(a).markdown.length,contractQuality:{contractId:b.contractId,unresolvedCount:b.findings.filter(a=>"met"!==a.status).length,requestedChangeVerified:c,findings:b.findings.map(({criterionId:a,status:b})=>({criterionId:a,status:b}))},judges:{mode:"full",executed:b.findings.filter(a=>"unmeasured"!==a.status).map(a=>a.criterionId),degraded:b.findings.filter(a=>"unmeasured"===a.status).map(a=>a.criterionId),missing:[],unavailableInputs:[]}});return{request:a.request,execution:{nodeKind:"writing-block",action:a.request.patch?"targeted-patch":"rerun-with-feedback",actionSource:a.request.patch?"explicit-patch":"default",available:!0,reason:"通过固定任务的统一模型执行,在全文累计轻修预算内复验后提交"},snapshot:async()=>{let a=E({model:e.model,quality:e.quality});return(0,i.tv)(e.directory,`native-snapshot-${a}.json`,{model:e.model,quality:e.quality},d.runId),`native:${a}`},apply:async()=>(0,s.e)({directory:e.directory,runId:d.runId,contractId:e.base.contract.id,diagnostics:e.diagnostics},async()=>{let c=a.request.patch;if(c){if(c.append||c.endText)throw Error("结构化定点修改须使用单一单元的逐字锚点;跨单元区间或追加须由作者提交完整结构化任务");let d=l.flatMap(a=>e.model.tasks[a]?.current.output.units.flatMap(b=>"paragraph"===b.kind&&b.text.includes(c.anchor)?[{taskId:a,unitId:b.id}]:"table"===b.kind?b.rows.flatMap(d=>b.columns.filter(a=>d.cells[a.key].includes(c.anchor)).map(c=>({taskId:a,unitId:b.id,rowId:d.id,columnKey:c.key}))):[])??[]);if(1!==d.length)throw Error("锚点必须唯一定位一个实际段落或表格字段,不能修改多个对象");let f=d[0];b=function(a){let{change:b}=a,c=a.model.tasks[b.taskId];if(!c||c.current.contentHash!==b.expectedContentHash)throw Error("待修改的任务不存在或内容已变更,原定位不能继续执行");if(!b.anchor.trim()||!b.reason.trim())throw Error("结构化修改须有逐字锚点和明确原因");let d=structuredClone(c.current.output),e=d.units.find(a=>a.id===b.unitId);if(!e)throw Error("目标单元不属于已定位的作者任务");let f=a=>{let c=a.indexOf(b.anchor);if(c<0||a.indexOf(b.anchor,c+b.anchor.length)>=0)throw Error("逐字锚点不存在或不唯一,不能模糊匹配修改");return a.slice(0,c)+b.replacement+a.slice(c+b.anchor.length)};if("paragraph"===e.kind){if(void 0!==b.rowId||void 0!==b.columnKey)throw Error("段落修改不能携带表格记录定位");e.text=f(e.text)}else if("table"===e.kind){let a=e.rows.find(a=>a.id===b.rowId);if(!a||!b.columnKey||!e.columns.some(a=>a.key===b.columnKey))throw Error("表格修改须明确定位真实记录与字段");a.cells[b.columnKey]=f(a.cells[b.columnKey])}else throw Error("流程图修改须提交完整节点与边的结构化事务,不能把图件字符串替换当成关系修改");let g=(0,u.Zk)();(0,o.cv)(g,a.contract,a.project,{restore:a.model});let h=(0,o.wI)(g,b.taskId,d,b.reason),i=a.contract.sections.find(a=>a.id===b.taskId).chapterId,j=a.contract.criteria.filter(a=>a.applicable&&(!a.chapterId||a.chapterId===i)).map(a=>a.id);return{...h,affectedCriterionIds:j}}({contract:e.base.contract,project:e.base.projectModel,model:e.model,change:{...f,expectedContentHash:e.model.tasks[f.taskId].current.contentHash,anchor:c.anchor,replacement:c.replacement,reason:a.request.userMessage}}).model}else{if(1!==l.length)throw Error("自然语言轻修须先定位一个固定作者任务;不能以整章重写替代局部修正");let c=e.base.contract.sections.find(a=>a.id===l[0]),f=e.model.tasks[c.id]?.current;if(!f)throw Error("本任务没有完整首候选,须继续生成,不能作为轻修处理");try{await (0,D.X4)({chapterId:c.chapterId,blockTitle:c.title,contractScoped:!0,maxAuthorSubmissions:1,maxTokens:Math.max(6e3,Math.ceil(1.8*f.markdown.length)),diagnostics:e.diagnostics,system:`你是专业文档作者智能体。按用户已定位的局部问题轻修,不改变其他信息单元、事实来源和方案决定。
|
|
3
3
|
${e.base.writerContext.promptTexts}`,prompt:`用户原话:${a.request.userMessage}
|
|
4
4
|
当前固定任务:${JSON.stringify(c)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=6822,exports.ids=[6822],exports.modules={46822:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{q:()=>q});var e=c(8732),f=c(82015),g=c(42583),h=c(60056),i=c(79270),j=c(9328),k=c.n(j),l=c(54318),m=c(51329),n=c(60790),o=c(22488),p=a([m]);m=(p.then?(await p)():p)[0];let{Text:r}=h.o5;function q({mode:a,skillId:b}){let{message:c}=h.qw.useApp(),d=(0,g.useRouter)(),[j]=h.lV.useForm(),p=(0,n.G)(),[q,s]=(0,f.useState)(!1),[t,u]=(0,f.useState)([]),v=(0,f.useMemo)(()=>"edit"===a&&b?p.skills.find(a=>a.id===b):void 0,[a,b,p.skills]),w="edit"===a&&!b,x="edit"===a&&!p.loading&&!p.failed&&!v&&void 0!==p.options,[y,z]=(0,f.useState)(!1),A=async()=>{let a;if(!p.options)return;try{a=await j.validateFields()}catch{return}let b=(0,o.RW)(a,p.options.contractVersion,v?.examples);s(!0),u([]);try{let e=await (0,o.SS)("/api/skills/validate",{method:"POST",headers:o.eT,body:JSON.stringify(b)});if(!e.ok){c.error(`校验请求失败:${e.message}`),u(e.issues);return}if(!e.data.ok){u(e.data.errors),c.error(`校验未通过:${e.data.errors.length} 处问题,请核对技能字段和工艺卡引用。`);return}let f=v?await (0,o.SS)(`/api/skills/${encodeURIComponent(v.id)}`,{method:"PUT",headers:o.eT,body:JSON.stringify(b)}):await (0,o.SS)("/api/skills",{method:"POST",headers:o.eT,body:JSON.stringify(b)});if(!f.ok){u(f.issues),c.error(`保存失败:${f.message}`);return}f.data.warnings?.length&&c.warning(`已保存,但有 ${f.data.warnings.length} 条提示:${f.data.warnings.map(a=>a.message).join(";")}`),c.success("已保存"),await d.push(`/skills/${encodeURIComponent(f.data.skill?.id??a.id)}`)}finally{s(!1)}};return w||p.loading?(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(h.EA,{active:!0,title:!0,paragraph:{rows:2}}),(0,e.jsx)(h.EA,{active:!0,paragraph:{rows:12}})]}):p.failed?(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(l.k,{backHref:"/skills",backLabel:"返回技能库",title:"create"===a?"新建技能":"编辑技能"}),(0,e.jsx)(h.Fc,{type:"error",showIcon:!0,message:"技能库读取失败",description:`${p.failed};这不是"技能不存在",请核对服务端状态后重试。`})]}):x?(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(l.k,{backHref:"/skills",backLabel:"返回技能库",title:"编辑技能"}),(0,e.jsx)(h.Sv,{description:`技能库里没有「${b}」这条技能(可能已被删除或改名)`,children:(0,e.jsx)(k(),{href:"/skills",children:(0,e.jsx)(h.$n,{type:"primary",children:"返回技能库"})})})]}):p.options?v?.builtIn?(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(l.k,{backHref:"/skills",backLabel:"返回技能库",title:`编辑技能 \xb7 ${v.displayName}`,description:"内置技能随应用版本更新,不能在这里修改。",extra:(0,e.jsx)(k(),{href:`/skills/${encodeURIComponent(v.id)}`,children:(0,e.jsx)(h.$n,{icon:(0,e.jsx)(i.EditOutlined,{}),children:"查看预览"})})}),(0,e.jsx)(h.Fc,{type:"info",showIcon:!0,message:"内置技能",description:o.F}),(0,e.jsx)("div",{children:(0,e.jsx)(k(),{href:"/skills/new",children:(0,e.jsx)(h.$n,{type:"primary",children:"新建用户技能"})})})]}):(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(l.k,{backHref:"/skills",backLabel:"返回技能库",title:v?`编辑技能 \xb7 ${v.displayName}`:"新建技能",description:v?"改动会在保存前做一次字段与工艺卡引用校验,通过后写入技能文件。":"技能提供专业主题、资料需求、工艺知识和写作核对提示;保存前同样会做引用校验。",extra:(0,e.jsxs)(e.Fragment,{children:[v?(0,e.jsx)(k(),{href:`/skills/${encodeURIComponent(v.id)}`,children:(0,e.jsx)(h.$n,{children:"放弃改动并返回预览"})}):(0,e.jsx)(k(),{href:"/skills",children:(0,e.jsx)(h.$n,{children:"取消"})}),(0,e.jsxs)(h.$x,{size:4,children:[(0,e.jsx)(r,{type:"secondary",className:"text-xs",children:"保存后自动进入预览"}),(0,e.jsx)(h.$n,{type:"primary",icon:(0,e.jsx)(i.SaveOutlined,{}),loading:q,onClick:()=>{A()},children:"保存"})]})]})}),v?.examples&&(0,e.jsx)(h.Fc,{type:"info",showIcon:!0,message:"该技能带表达示例",description:"示例供理解专业表达,不能作为本项目事实;本编辑器不修改示例,保存时原样保留。"}),t.length>0&&(0,e.jsx)(h.Fc,{type:"error",showIcon:!0,message:`校验未通过:${t.length} 处`,description:(0,e.jsx)("div",{className:"text-xs",children:t.map((a,b)=>(0,e.jsxs)("div",{children:[(0,e.jsx)(r,{code:!0,children:a.path||"(root)"})," ",a.message]},`${a.path??"root"}-${b}`))})}),(0,e.jsx)(m.D,{form:j,options:p.options,idLocked:!!v})]}):null}d()}catch(a){d(a)}})},51329:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{D:()=>k});var e=c(8732),f=c(60056),g=c(79270),h=c(94487),i=c(35365),j=a([h]);h=(j.then?(await j)():j)[0];let{Text:l}=f.o5;function k({form:a,options:b,idLocked:c}){let d=(0,h.Vr)(),j=b.chapterDomains.map(a=>({value:a.value,label:a.label,title:a.note})),k=b.projectTypes.map(a=>({value:a.value,label:a.label})),m=b.factSources.map(a=>({value:a.value,label:a.label})),n=b.processCards.map(a=>({value:a.value,label:a.label}));return(0,e.jsxs)(f.lV,{form:a,layout:"vertical",children:[(0,e.jsxs)("div",{className:"grid grid-cols-1 xl:grid-cols-2 gap-4 items-start",children:[(0,e.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,e.jsxs)(i.PZ,{title:"基本信息",description:"技能的身份与启停;ID 是落盘文件名,新建后不再改。",children:[(0,e.jsx)(f.lV.Item,{name:"id",label:"技能 ID",rules:[{required:!0,message:"技能 ID 必填"}],extra:"使用小写字母、数字和连字符,以字母开头。",children:(0,e.jsx)(f.pd,{disabled:c,placeholder:"例如 c02-major-content-building"})}),(0,e.jsx)(f.lV.Item,{name:"enabled",label:"启用",valuePropName:"checked",extra:"停用后本条技能不参与本次生成的技能匹配。",className:"!mb-0",children:(0,e.jsx)(f.dO,{checkedChildren:"启用",unCheckedChildren:"停用"})})]}),(0,e.jsxs)(i.PZ,{title:"匹配条件",description:"决定这条技能在什么章域、什么工程类型、什么样的章节标题下被选用。",children:[(0,e.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-x-4",children:[(0,e.jsx)(f.lV.Item,{name:["match","chapterDomain"],label:"章域",rules:[{required:!0,message:"章域必选"}],extra:"本章所属的专业内容范围。",children:(0,e.jsx)(f.l6,{options:j,placeholder:"选择本章所属的内容域"})}),(0,e.jsx)(f.lV.Item,{name:["match","projectTypes"],label:"适用工程类型",extra:"留空表示不限定工程类型。",children:(0,e.jsx)(f.l6,{mode:"multiple",allowClear:!0,options:k,placeholder:"全类型"})})]}),(0,e.jsx)(f.lV.Item,{name:["match","sectionKeywords"],label:"小节标题关键词",extra:"用于匹配相关小节标题,可输入多个关键词。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","," "],placeholder:"输入后回车,例如:主要施工 / 分部分项"})}),(0,e.jsx)(f.lV.Item,{name:["match","sectionRegex"],label:"小节标题匹配表达式(可选)",extra:"填写正则表达式文本;复杂或不安全的表达式会被校验拒绝。",className:"!mb-0",children:(0,e.jsx)(f.pd,{placeholder:"例如 交通导改|导行|管线保护"})})]}),(0,e.jsx)(i.PZ,{title:"禁写项",description:"这条技能明确要求避免的内容或表达;没有就留空。",children:(0,e.jsx)(f.lV.Item,{name:"forbidden",extra:"填错一条会挡住真实存在的内容,宁可留空。",className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],placeholder:"输入后回车,例如:管道闭水试验"})})}),(0,e.jsx)(i.PZ,{title:"相关专业主题",description:"本条技能提供的专业内容主题;主题下的小标签写这一主题要覆盖的工序、条件、控制点或验收要求。",children:(0,e.jsx)(f.lV.List,{name:"structure",children:(a,{add:b,remove:c})=>(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[a.map(({key:a,name:b,...d})=>(0,e.jsxs)(i.jT,{onRemove:()=>c(b),columns:"md:grid-cols-[minmax(0,1fr)_minmax(0,1fr)]",children:[(0,e.jsx)(f.lV.Item,{...d,name:[b,"title"],rules:[{required:!0,message:"专业主题标题必填"}],className:"!mb-0",children:(0,e.jsx)(f.pd,{placeholder:"专业主题标题"})}),(0,e.jsx)(f.lV.Item,{...d,name:[b,"required"],extra:"按实际对象选用",className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"tags",className:"w-full",placeholder:"工序、适用条件、控制要点或验收要求"})})]},a)),(0,e.jsxs)(f.$n,{type:"dashed",block:!0,icon:(0,e.jsx)(g.PlusOutlined,{}),onClick:()=>b({required:[]}),children:[d("common.add"),"专业主题"]})]})})})]}),(0,e.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,e.jsx)(i.PZ,{title:"所需项目资料",description:"本条技能要求本次任务先查证的项目事实(事实键来自服务端闭集);标为必需而查不到时会被上游拦下。",children:(0,e.jsx)(f.lV.List,{name:"requires",children:(a,{add:b,remove:c})=>(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[a.map(({key:a,name:b,...d})=>(0,e.jsxs)(i.jT,{onRemove:()=>c(b),columns:"md:grid-cols-[minmax(0,2fr)_minmax(0,1fr)_auto]",children:[(0,e.jsx)(f.lV.Item,{...d,name:[b,"key"],rules:[{required:!0,message:"事实键必填"}],className:"!mb-0",children:(0,e.jsx)(f.pd,{placeholder:"事实键,如 boq.divisions"})}),(0,e.jsx)(f.lV.Item,{...d,name:[b,"source"],rules:[{required:!0,message:"来源必选"}],className:"!mb-0",children:(0,e.jsx)(f.l6,{options:m,placeholder:"事实来源"})}),(0,e.jsx)(f.lV.Item,{...d,name:[b,"required"],valuePropName:"checked",className:"!mb-0",children:(0,e.jsx)(f.dO,{checkedChildren:"必需",unCheckedChildren:"可选"})})]},a)),(0,e.jsxs)(f.$n,{type:"dashed",block:!0,icon:(0,e.jsx)(g.PlusOutlined,{}),onClick:()=>b({source:"boq",required:!1}),children:[d("common.add"),"事实需求"]})]})})}),(0,e.jsxs)(i.PZ,{title:"文档业务提示",description:"给本次规划的建议:文档名称、本章职责与资料检索提示。实际章节职责由本次规划确定,专业主题在上面的卡片里单独填写。",children:[(0,e.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-x-4",children:[(0,e.jsx)(f.lV.Item,{name:"outputTitle",label:"文档名称建议",extra:"提供文档名称建议,实际名称由本次生成配置确定。",children:(0,e.jsx)(f.pd,{placeholder:"留空 = 本技能不对文档名称表态"})}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","purpose"],label:"章级内容提示",extra:"说明本章关注的专业内容。",children:(0,e.jsx)(f.pd,{placeholder:"例如:说明本工程的安全管理目标与危大工程清单"})})]}),(0,e.jsxs)("div",{className:"mt-1 mb-3 border-t border-[var(--colorBorderSecondary)] pt-3",children:[(0,e.jsx)(l,{strong:!0,className:"text-sm",children:"章级清单"}),(0,e.jsx)(l,{type:"secondary",className:"text-xs ml-2",children:"章级候选内容与资料检索提示;实际职责由本次规划确定。"})]}),(0,e.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-x-4",children:[(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","queries"],label:"资料检索词",extra:"帮助定位相关资料。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],className:"w-full",placeholder:"回车添加"})}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","requiredFacts"],label:"待核事实提示",extra:"提示应查证的项目事实。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],className:"w-full",placeholder:"回车添加"})}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","tableSections"],label:"成表内容建议",extra:"提示适合用表格表达的内容。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],className:"w-full",placeholder:"回车添加"})}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","tableRequirements"],label:"表格表达提示",extra:"提示表格列项与表达方式。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],className:"w-full",placeholder:"回车添加"})})]}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","pinnedEvidenceFilePaths"],label:"相关证据文件",extra:"填写需要关注的文件名;实际读取范围和来源资格仍由本次任务核对。",className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],placeholder:"回车添加文件名"})}),(b.absentCarriers?.length??0)>0&&(0,e.jsxs)("div",{className:"mt-4 rounded-xl border border-[var(--borderColor)] bg-[var(--colorFillAlter)] px-4 py-3",children:[(0,e.jsx)("div",{className:"text-xs font-semibold mb-1",children:"不在这里配置的事项"}),(0,e.jsx)("div",{className:"text-xs text-[var(--colorTextSecondary)]",children:b.absentCarriers.map(a=>(0,e.jsxs)("div",{children:[a.label,":","formatting"===a.id?"排版要求由招标资料与导出设置管理,技能编辑器提供专业内容。":a.note]},a.id))})]})]}),(0,e.jsx)(i.PZ,{title:"可加载工艺知识",description:"选用后,这些工艺卡会作为专业参考进入本次写作;引用是否存在由保存前的校验核对。",children:(0,e.jsx)(f.lV.List,{name:"knowledge",children:(a,{add:b,remove:c})=>(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[a.map(({key:a,name:b,...d})=>(0,e.jsxs)(i.jT,{onRemove:()=>c(b),columns:"md:grid-cols-[minmax(0,1fr)]",children:[(0,e.jsx)(f.lV.Item,{...d,name:[b,"ids"],rules:[{required:!0,type:"array",min:1,message:"请选择实际工艺卡"}],className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"multiple",showSearch:!0,optionFilterProp:"label",options:n,placeholder:"按工艺卡名称搜索"})}),(0,e.jsx)(f.lV.Item,{...d,name:[b,"note"],className:"!mb-0 mt-2",children:(0,e.jsx)(f.pd,{placeholder:"适用条件说明(可选):什么情况下加载这些工艺卡"})})]},a)),(0,e.jsxs)(f.$n,{type:"dashed",block:!0,icon:(0,e.jsx)(g.PlusOutlined,{}),onClick:()=>b({kind:"processCard",ids:[]}),children:[d("common.add"),"工艺知识"]})]})})}),(0,e.jsx)(i.PZ,{title:"专业写作核对提示",description:"写清适用对象、方法和检验注意。提示供作者按具体任务选用,不构成评分、字数或参数数量要求。",children:(0,e.jsx)(f.lV.List,{name:"acceptance",children:(a,{add:b,remove:c})=>(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[a.map(({key:a,name:b,...d})=>(0,e.jsx)(i.jT,{onRemove:()=>c(b),columns:"md:grid-cols-[minmax(0,1fr)]",children:(0,e.jsx)(f.lV.Item,{...d,name:[b,"checklistItems"],rules:[{required:!0,type:"array",min:1,message:"请输入专业注意事项"}],className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"tags",className:"w-full",placeholder:"例如:保留实际检验对象、触发条件和转序要求"})})},a)),(0,e.jsxs)(f.$n,{type:"dashed",block:!0,icon:(0,e.jsx)(g.PlusOutlined,{}),onClick:()=>b({kind:"llmChecklist",checklistItems:[]}),children:[d("common.add"),"专业提示"]})]})})})]})]}),(0,e.jsx)("div",{className:"mt-4",children:(0,e.jsx)(i.PZ,{title:"资料与采用边界",description:"以下边界由软件统一执行,技能不能扩大或豁免。",children:(0,e.jsx)("div",{className:"flex flex-col gap-2",children:b.isolationRules.map(a=>(0,e.jsxs)("div",{className:"flex flex-col sm:flex-row sm:items-baseline gap-1 sm:gap-2",children:[(0,e.jsx)(l,{className:"text-sm shrink-0",children:a.label}),(0,e.jsx)(l,{type:"secondary",className:"text-xs",children:a.note})]},a.id))})})})]})}d()}catch(a){d(a)}})}};
|
|
1
|
+
"use strict";exports.id=6822,exports.ids=[6822],exports.modules={22488:(a,b,c)=>{c.d(b,{F:()=>f,Ie:()=>j,Oz:()=>h,RW:()=>m,SS:()=>e,eT:()=>d,m6:()=>i});let d={"Content-Type":"application/json"};async function e(a,b){try{let c,d=await fetch(a,b),e=await d.text();try{c=e?JSON.parse(e):void 0}catch{c=void 0}if(!d.ok){let a=c??{};return{ok:!1,status:d.status,message:a.error??`HTTP ${d.status}`,issues:Array.isArray(a.errors)?a.errors:[]}}return{ok:!0,data:c}}catch(a){return{ok:!1,status:0,message:a instanceof Error?a.message:"网络请求失败",issues:[]}}}let f="内置技能只读,随应用版本更新。可新建用户技能进行配置。";function g(a){return[...new Set((a??[]).map(a=>a.trim()).filter(a=>a.length>0))]}function h(a){return"string"==typeof a?a:a.phrase}function i(a){return{id:a.id,enabled:a.enabled,match:{chapterDomain:a.match.chapterDomain,projectTypes:[...a.match.projectTypes],sectionKeywords:[...a.match.sectionKeywords],...a.match.sectionRegex?{sectionRegex:a.match.sectionRegex}:{}},requires:a.requires.map(a=>({...a})),structure:a.structure.map(a=>({title:a.title,required:[...a.required??[]]})),forbidden:a.forbidden.map(h),knowledge:a.knowledge.map(a=>({kind:a.kind,...a.ids?{ids:[...a.ids]}:{},...a.note?{note:a.note}:{}})),acceptance:a.acceptance.map(a=>({kind:"llmChecklist",checklistItems:[...a.items]})),...void 0!==a.outputTitle?{outputTitle:a.outputTitle}:{},...a.chapterChecklist?{chapterChecklist:{...a.chapterChecklist,...a.chapterChecklist.sections?{sections:[...a.chapterChecklist.sections]}:{}}}:{}}}function j(){return{id:`skill-${Date.now()}`,enabled:!0,match:{projectTypes:[],sectionKeywords:[]},requires:[{source:"boq",required:!1}],structure:[{}],forbidden:[],knowledge:[],acceptance:[{kind:"llmChecklist",checklistItems:[]}]}}function k(a){return(a.ids??[]).length>0}function l(a){return(a.checklistItems??[]).length>0}function m(a,b,c){let d={chapterDomain:a.match?.chapterDomain,projectTypes:[...a.match?.projectTypes??[]],sectionKeywords:g(a.match?.sectionKeywords),...a.match?.sectionRegex?.trim()?{sectionRegex:a.match.sectionRegex.trim()}:{}},e=(a.requires??[]).filter(a=>(a.key??"").trim().length>0).map(a=>({key:(a.key??"").trim(),source:a.source,required:!0===a.required})),f=(a.structure??[]).filter(a=>(a.title??"").trim().length>0).map(a=>({title:(a.title??"").trim(),required:g(a.required)})),h=(a.knowledge??[]).filter(k).map(a=>({kind:"processCard",ids:g(a.ids),...a.note?.trim()?{note:a.note.trim()}:{}})),i=(a.acceptance??[]).filter(l).map(a=>({kind:"llmChecklist",items:g(a.checklistItems),nonDeterministic:!0}));return{id:a.id.trim(),version:b,source:"user",enabled:!1!==a.enabled,match:d,requires:e,structure:f,forbidden:g(a.forbidden),knowledge:h,acceptance:i,...function(a){let b=a.outputTitle?.trim()??"",c=a.chapterChecklist,d={sections:g(c?.sections),queries:g(c?.queries),requiredFacts:g(c?.requiredFacts),tableSections:g(c?.tableSections),tableRequirements:g(c?.tableRequirements),pinnedEvidenceFilePaths:g(c?.pinnedEvidenceFilePaths)},e=!!c?.purpose?.trim()||Object.values(d).some(a=>a.length>0);return{...b?{outputTitle:b}:{},...e?{chapterChecklist:{...c?.purpose?.trim()?{purpose:c.purpose.trim()}:{},...Object.fromEntries(Object.entries(d).filter(([,a])=>a.length>0))}}:{}}}(a),...c?{examples:c}:{}}}},35365:(a,b,c)=>{c.d(b,{PZ:()=>h,RU:()=>i,jT:()=>k,n$:()=>j});var d=c(8732),e=c(60056),f=c(79270);let{Text:g}=e.o5;function h({title:a,description:b,hint:c,className:f,children:g}){return(0,d.jsxs)(e.Zp,{className:`rounded-2xl border-[var(--borderColor)] ${f??""}`,title:(0,d.jsx)("span",{className:"font-semibold",children:a}),extra:c?(0,d.jsx)("span",{className:"text-xs text-[var(--colorTextTertiary)]",children:c}):null,children:[b&&(0,d.jsx)("p",{className:"text-xs text-[var(--colorTextSecondary)] mb-4 mt-0 leading-relaxed",children:b}),g]})}function i({label:a,children:b,empty:c}){let e=null==b||!1===b;return(0,d.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-[132px_minmax(0,1fr)] gap-x-4 gap-y-1 py-2 border-b border-[var(--colorBorderSecondary)] last:border-0",children:[(0,d.jsx)("div",{className:"text-xs text-[var(--colorTextTertiary)] sm:pt-1",children:a}),(0,d.jsx)("div",{className:"min-w-0 text-sm leading-6",children:e?(0,d.jsx)(g,{type:"secondary",className:"text-xs",children:c??"未声明"}):b})]})}function j({items:a,empty:b}){return 0===a.length?(0,d.jsx)(g,{type:"secondary",className:"text-xs",children:b??"未声明"}):(0,d.jsx)("div",{className:"tagWrap flex flex-wrap gap-1 min-w-0",children:a.map((a,b)=>(0,d.jsx)("span",{className:"min-w-0",children:a},b))})}function k({children:a,columns:b="md:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]",onRemove:c,removeLabel:g="删除这一行"}){return(0,d.jsxs)("div",{className:"flex items-start gap-3 rounded-xl border border-[var(--borderColor)] bg-[var(--colorFillAlter)] px-4 py-3 transition-colors hover:bg-[var(--colorBgHover)]",children:[(0,d.jsx)("div",{className:`min-w-0 flex-1 grid grid-cols-1 ${b} gap-x-3 gap-y-1 items-start`,children:a}),(0,d.jsx)(e.$x,{size:0,className:"self-center",children:(0,d.jsx)(e.$n,{type:"text",danger:!0,size:"small",icon:(0,d.jsx)(f.DeleteOutlined,{}),"aria-label":g,title:g,onClick:c})})]})}},46822:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{q:()=>q});var e=c(8732),f=c(82015),g=c(42583),h=c(60056),i=c(79270),j=c(9328),k=c.n(j),l=c(54318),m=c(51329),n=c(60790),o=c(22488),p=a([m]);m=(p.then?(await p)():p)[0];let{Text:r}=h.o5;function q({mode:a,skillId:b}){let{message:c}=h.qw.useApp(),d=(0,g.useRouter)(),[j]=h.lV.useForm(),p=(0,n.G)(),[q,s]=(0,f.useState)(!1),[t,u]=(0,f.useState)([]),v=(0,f.useMemo)(()=>"edit"===a&&b?p.skills.find(a=>a.id===b):void 0,[a,b,p.skills]),w="edit"===a&&!b,x="edit"===a&&!p.loading&&!p.failed&&!v&&void 0!==p.options,[y,z]=(0,f.useState)(!1),A=async()=>{let a;if(!p.options)return;try{a=await j.validateFields()}catch{return}let b=(0,o.RW)(a,p.options.contractVersion,v?.examples);s(!0),u([]);try{let e=await (0,o.SS)("/api/skills/validate",{method:"POST",headers:o.eT,body:JSON.stringify(b)});if(!e.ok){c.error(`校验请求失败:${e.message}`),u(e.issues);return}if(!e.data.ok){u(e.data.errors),c.error(`校验未通过:${e.data.errors.length} 处问题,请核对技能字段和工艺卡引用。`);return}let f=v?await (0,o.SS)(`/api/skills/${encodeURIComponent(v.id)}`,{method:"PUT",headers:o.eT,body:JSON.stringify(b)}):await (0,o.SS)("/api/skills",{method:"POST",headers:o.eT,body:JSON.stringify(b)});if(!f.ok){u(f.issues),c.error(`保存失败:${f.message}`);return}f.data.warnings?.length&&c.warning(`已保存,但有 ${f.data.warnings.length} 条提示:${f.data.warnings.map(a=>a.message).join(";")}`),c.success("已保存"),await d.push(`/skills/${encodeURIComponent(f.data.skill?.id??a.id)}`)}finally{s(!1)}};return w||p.loading?(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(h.EA,{active:!0,title:!0,paragraph:{rows:2}}),(0,e.jsx)(h.EA,{active:!0,paragraph:{rows:12}})]}):p.failed?(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(l.k,{backHref:"/skills",backLabel:"返回技能库",title:"create"===a?"新建技能":"编辑技能"}),(0,e.jsx)(h.Fc,{type:"error",showIcon:!0,message:"技能库读取失败",description:`${p.failed};这不是"技能不存在",请核对服务端状态后重试。`})]}):x?(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(l.k,{backHref:"/skills",backLabel:"返回技能库",title:"编辑技能"}),(0,e.jsx)(h.Sv,{description:`技能库里没有「${b}」这条技能(可能已被删除或改名)`,children:(0,e.jsx)(k(),{href:"/skills",children:(0,e.jsx)(h.$n,{type:"primary",children:"返回技能库"})})})]}):p.options?v?.builtIn?(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(l.k,{backHref:"/skills",backLabel:"返回技能库",title:`编辑技能 \xb7 ${v.displayName}`,description:"内置技能随应用版本更新,不能在这里修改。",extra:(0,e.jsx)(k(),{href:`/skills/${encodeURIComponent(v.id)}`,children:(0,e.jsx)(h.$n,{icon:(0,e.jsx)(i.EditOutlined,{}),children:"查看预览"})})}),(0,e.jsx)(h.Fc,{type:"info",showIcon:!0,message:"内置技能",description:o.F}),(0,e.jsx)("div",{children:(0,e.jsx)(k(),{href:"/skills/new",children:(0,e.jsx)(h.$n,{type:"primary",children:"新建用户技能"})})})]}):(0,e.jsxs)("div",{className:"space-y-5 animateFadeIn",children:[(0,e.jsx)(l.k,{backHref:"/skills",backLabel:"返回技能库",title:v?`编辑技能 \xb7 ${v.displayName}`:"新建技能",description:v?"改动会在保存前做一次字段与工艺卡引用校验,通过后写入技能文件。":"技能提供专业主题、资料需求、工艺知识和写作核对提示;保存前同样会做引用校验。",extra:(0,e.jsxs)(e.Fragment,{children:[v?(0,e.jsx)(k(),{href:`/skills/${encodeURIComponent(v.id)}`,children:(0,e.jsx)(h.$n,{children:"放弃改动并返回预览"})}):(0,e.jsx)(k(),{href:"/skills",children:(0,e.jsx)(h.$n,{children:"取消"})}),(0,e.jsxs)(h.$x,{size:4,children:[(0,e.jsx)(r,{type:"secondary",className:"text-xs",children:"保存后自动进入预览"}),(0,e.jsx)(h.$n,{type:"primary",icon:(0,e.jsx)(i.SaveOutlined,{}),loading:q,onClick:()=>{A()},children:"保存"})]})]})}),v?.examples&&(0,e.jsx)(h.Fc,{type:"info",showIcon:!0,message:"该技能带表达示例",description:"示例供理解专业表达,不能作为本项目事实;本编辑器不修改示例,保存时原样保留。"}),t.length>0&&(0,e.jsx)(h.Fc,{type:"error",showIcon:!0,message:`校验未通过:${t.length} 处`,description:(0,e.jsx)("div",{className:"text-xs",children:t.map((a,b)=>(0,e.jsxs)("div",{children:[(0,e.jsx)(r,{code:!0,children:a.path||"(root)"})," ",a.message]},`${a.path??"root"}-${b}`))})}),(0,e.jsx)(m.D,{form:j,options:p.options,idLocked:!!v})]}):null}d()}catch(a){d(a)}})},51329:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{D:()=>k});var e=c(8732),f=c(60056),g=c(79270),h=c(94487),i=c(35365),j=a([h]);h=(j.then?(await j)():j)[0];let{Text:l}=f.o5;function k({form:a,options:b,idLocked:c}){let d=(0,h.Vr)(),j=b.chapterDomains.map(a=>({value:a.value,label:a.label,title:a.note})),k=b.projectTypes.map(a=>({value:a.value,label:a.label})),m=b.factSources.map(a=>({value:a.value,label:a.label})),n=b.processCards.map(a=>({value:a.value,label:a.label}));return(0,e.jsxs)(f.lV,{form:a,layout:"vertical",children:[(0,e.jsxs)("div",{className:"grid grid-cols-1 xl:grid-cols-2 gap-4 items-start",children:[(0,e.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,e.jsxs)(i.PZ,{title:"基本信息",description:"技能的身份与启停;ID 是落盘文件名,新建后不再改。",children:[(0,e.jsx)(f.lV.Item,{name:"id",label:"技能 ID",rules:[{required:!0,message:"技能 ID 必填"}],extra:"使用小写字母、数字和连字符,以字母开头。",children:(0,e.jsx)(f.pd,{disabled:c,placeholder:"例如 c02-major-content-building"})}),(0,e.jsx)(f.lV.Item,{name:"enabled",label:"启用",valuePropName:"checked",extra:"停用后本条技能不参与本次生成的技能匹配。",className:"!mb-0",children:(0,e.jsx)(f.dO,{checkedChildren:"启用",unCheckedChildren:"停用"})})]}),(0,e.jsxs)(i.PZ,{title:"匹配条件",description:"决定这条技能在什么章域、什么工程类型、什么样的章节标题下被选用。",children:[(0,e.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-x-4",children:[(0,e.jsx)(f.lV.Item,{name:["match","chapterDomain"],label:"章域",rules:[{required:!0,message:"章域必选"}],extra:"本章所属的专业内容范围。",children:(0,e.jsx)(f.l6,{options:j,placeholder:"选择本章所属的内容域"})}),(0,e.jsx)(f.lV.Item,{name:["match","projectTypes"],label:"适用工程类型",extra:"留空表示不限定工程类型。",children:(0,e.jsx)(f.l6,{mode:"multiple",allowClear:!0,options:k,placeholder:"全类型"})})]}),(0,e.jsx)(f.lV.Item,{name:["match","sectionKeywords"],label:"小节标题关键词",extra:"用于匹配相关小节标题,可输入多个关键词。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","," "],placeholder:"输入后回车,例如:主要施工 / 分部分项"})}),(0,e.jsx)(f.lV.Item,{name:["match","sectionRegex"],label:"小节标题匹配表达式(可选)",extra:"填写正则表达式文本;复杂或不安全的表达式会被校验拒绝。",className:"!mb-0",children:(0,e.jsx)(f.pd,{placeholder:"例如 交通导改|导行|管线保护"})})]}),(0,e.jsx)(i.PZ,{title:"禁写项",description:"这条技能明确要求避免的内容或表达;没有就留空。",children:(0,e.jsx)(f.lV.Item,{name:"forbidden",extra:"填错一条会挡住真实存在的内容,宁可留空。",className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],placeholder:"输入后回车,例如:管道闭水试验"})})}),(0,e.jsx)(i.PZ,{title:"相关专业主题",description:"本条技能提供的专业内容主题;主题下的小标签写这一主题要覆盖的工序、条件、控制点或验收要求。",children:(0,e.jsx)(f.lV.List,{name:"structure",children:(a,{add:b,remove:c})=>(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[a.map(({key:a,name:b,...d})=>(0,e.jsxs)(i.jT,{onRemove:()=>c(b),columns:"md:grid-cols-[minmax(0,1fr)_minmax(0,1fr)]",children:[(0,e.jsx)(f.lV.Item,{...d,name:[b,"title"],rules:[{required:!0,message:"专业主题标题必填"}],className:"!mb-0",children:(0,e.jsx)(f.pd,{placeholder:"专业主题标题"})}),(0,e.jsx)(f.lV.Item,{...d,name:[b,"required"],extra:"按实际对象选用",className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"tags",className:"w-full",placeholder:"工序、适用条件、控制要点或验收要求"})})]},a)),(0,e.jsxs)(f.$n,{type:"dashed",block:!0,icon:(0,e.jsx)(g.PlusOutlined,{}),onClick:()=>b({required:[]}),children:[d("common.add"),"专业主题"]})]})})})]}),(0,e.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,e.jsx)(i.PZ,{title:"所需项目资料",description:"本条技能要求本次任务先查证的项目事实(事实键来自服务端闭集);标为必需而查不到时会被上游拦下。",children:(0,e.jsx)(f.lV.List,{name:"requires",children:(a,{add:b,remove:c})=>(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[a.map(({key:a,name:b,...d})=>(0,e.jsxs)(i.jT,{onRemove:()=>c(b),columns:"md:grid-cols-[minmax(0,2fr)_minmax(0,1fr)_auto]",children:[(0,e.jsx)(f.lV.Item,{...d,name:[b,"key"],rules:[{required:!0,message:"事实键必填"}],className:"!mb-0",children:(0,e.jsx)(f.pd,{placeholder:"事实键,如 boq.divisions"})}),(0,e.jsx)(f.lV.Item,{...d,name:[b,"source"],rules:[{required:!0,message:"来源必选"}],className:"!mb-0",children:(0,e.jsx)(f.l6,{options:m,placeholder:"事实来源"})}),(0,e.jsx)(f.lV.Item,{...d,name:[b,"required"],valuePropName:"checked",className:"!mb-0",children:(0,e.jsx)(f.dO,{checkedChildren:"必需",unCheckedChildren:"可选"})})]},a)),(0,e.jsxs)(f.$n,{type:"dashed",block:!0,icon:(0,e.jsx)(g.PlusOutlined,{}),onClick:()=>b({source:"boq",required:!1}),children:[d("common.add"),"事实需求"]})]})})}),(0,e.jsxs)(i.PZ,{title:"文档业务提示",description:"给本次规划的建议:文档名称、本章职责与资料检索提示。实际章节职责由本次规划确定,专业主题在上面的卡片里单独填写。",children:[(0,e.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-x-4",children:[(0,e.jsx)(f.lV.Item,{name:"outputTitle",label:"文档名称建议",extra:"提供文档名称建议,实际名称由本次生成配置确定。",children:(0,e.jsx)(f.pd,{placeholder:"留空 = 本技能不对文档名称表态"})}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","purpose"],label:"章级内容提示",extra:"说明本章关注的专业内容。",children:(0,e.jsx)(f.pd,{placeholder:"例如:说明本工程的安全管理目标与危大工程清单"})})]}),(0,e.jsxs)("div",{className:"mt-1 mb-3 border-t border-[var(--colorBorderSecondary)] pt-3",children:[(0,e.jsx)(l,{strong:!0,className:"text-sm",children:"章级清单"}),(0,e.jsx)(l,{type:"secondary",className:"text-xs ml-2",children:"章级候选内容与资料检索提示;实际职责由本次规划确定。"})]}),(0,e.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-x-4",children:[(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","queries"],label:"资料检索词",extra:"帮助定位相关资料。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],className:"w-full",placeholder:"回车添加"})}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","requiredFacts"],label:"待核事实提示",extra:"提示应查证的项目事实。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],className:"w-full",placeholder:"回车添加"})}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","tableSections"],label:"成表内容建议",extra:"提示适合用表格表达的内容。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],className:"w-full",placeholder:"回车添加"})}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","tableRequirements"],label:"表格表达提示",extra:"提示表格列项与表达方式。",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],className:"w-full",placeholder:"回车添加"})})]}),(0,e.jsx)(f.lV.Item,{name:["chapterChecklist","pinnedEvidenceFilePaths"],label:"相关证据文件",extra:"填写需要关注的文件名;实际读取范围和来源资格仍由本次任务核对。",className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"tags",tokenSeparators:[",",","],placeholder:"回车添加文件名"})}),(b.absentCarriers?.length??0)>0&&(0,e.jsxs)("div",{className:"mt-4 rounded-xl border border-[var(--borderColor)] bg-[var(--colorFillAlter)] px-4 py-3",children:[(0,e.jsx)("div",{className:"text-xs font-semibold mb-1",children:"不在这里配置的事项"}),(0,e.jsx)("div",{className:"text-xs text-[var(--colorTextSecondary)]",children:b.absentCarriers.map(a=>(0,e.jsxs)("div",{children:[a.label,":","formatting"===a.id?"排版要求由招标资料与导出设置管理,技能编辑器提供专业内容。":a.note]},a.id))})]})]}),(0,e.jsx)(i.PZ,{title:"可加载工艺知识",description:"选用后,这些工艺卡会作为专业参考进入本次写作;引用是否存在由保存前的校验核对。",children:(0,e.jsx)(f.lV.List,{name:"knowledge",children:(a,{add:b,remove:c})=>(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[a.map(({key:a,name:b,...d})=>(0,e.jsxs)(i.jT,{onRemove:()=>c(b),columns:"md:grid-cols-[minmax(0,1fr)]",children:[(0,e.jsx)(f.lV.Item,{...d,name:[b,"ids"],rules:[{required:!0,type:"array",min:1,message:"请选择实际工艺卡"}],className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"multiple",showSearch:!0,optionFilterProp:"label",options:n,placeholder:"按工艺卡名称搜索"})}),(0,e.jsx)(f.lV.Item,{...d,name:[b,"note"],className:"!mb-0 mt-2",children:(0,e.jsx)(f.pd,{placeholder:"适用条件说明(可选):什么情况下加载这些工艺卡"})})]},a)),(0,e.jsxs)(f.$n,{type:"dashed",block:!0,icon:(0,e.jsx)(g.PlusOutlined,{}),onClick:()=>b({kind:"processCard",ids:[]}),children:[d("common.add"),"工艺知识"]})]})})}),(0,e.jsx)(i.PZ,{title:"专业写作核对提示",description:"写清适用对象、方法和检验注意。提示供作者按具体任务选用,不构成评分、字数或参数数量要求。",children:(0,e.jsx)(f.lV.List,{name:"acceptance",children:(a,{add:b,remove:c})=>(0,e.jsxs)("div",{className:"flex flex-col gap-2",children:[a.map(({key:a,name:b,...d})=>(0,e.jsx)(i.jT,{onRemove:()=>c(b),columns:"md:grid-cols-[minmax(0,1fr)]",children:(0,e.jsx)(f.lV.Item,{...d,name:[b,"checklistItems"],rules:[{required:!0,type:"array",min:1,message:"请输入专业注意事项"}],className:"!mb-0",children:(0,e.jsx)(f.l6,{mode:"tags",className:"w-full",placeholder:"例如:保留实际检验对象、触发条件和转序要求"})})},a)),(0,e.jsxs)(f.$n,{type:"dashed",block:!0,icon:(0,e.jsx)(g.PlusOutlined,{}),onClick:()=>b({kind:"llmChecklist",checklistItems:[]}),children:[d("common.add"),"专业提示"]})]})})})]})]}),(0,e.jsx)("div",{className:"mt-4",children:(0,e.jsx)(i.PZ,{title:"资料与采用边界",description:"以下边界由软件统一执行,技能不能扩大或豁免。",children:(0,e.jsx)("div",{className:"flex flex-col gap-2",children:b.isolationRules.map(a=>(0,e.jsxs)("div",{className:"flex flex-col sm:flex-row sm:items-baseline gap-1 sm:gap-2",children:[(0,e.jsx)(l,{className:"text-sm shrink-0",children:a.label}),(0,e.jsx)(l,{type:"secondary",className:"text-xs",children:a.note})]},a.id))})})})]})}d()}catch(a){d(a)}})},54318:(a,b,c)=>{c.d(b,{k:()=>h});var d=c(8732),e=c(9328),f=c.n(e),g=c(68329);function h({backHref:a,backLabel:b,title:c,description:e,extra:h}){return(0,d.jsx)("div",{className:"mb-6 bg-[var(--colorBgContainer)] rounded-2xl overflow-hidden border border-[var(--borderColor)] p-6",children:(0,d.jsxs)("div",{className:"flex flex-col md:flex-row md:items-end justify-between gap-4 md:gap-6",children:[(0,d.jsxs)("div",{className:"flex items-center gap-3 min-w-0",children:[(0,d.jsxs)(f(),{href:a,prefetch:!1,className:"detailBack",children:[(0,d.jsx)(g.nkM,{size:16,strokeWidth:2,"aria-hidden":!0}),(0,d.jsx)("span",{children:b})]}),(0,d.jsxs)("div",{className:"min-w-0 space-y-1",children:[(0,d.jsx)("h1",{className:"text-2xl font-bold text-[var(--colorText)] m-0 truncate",children:c}),e?(0,d.jsx)("p",{className:"text-sm text-[var(--colorTextSecondary)] m-0 break-all",children:e}):null]})]}),h?(0,d.jsx)("div",{className:"shrink-0 flex items-center gap-2",children:h}):null]})})}},60790:(a,b,c)=>{c.d(b,{G:()=>f});var d=c(82015),e=c(22488);function f(){let[a,b]=(0,d.useState)([]),[c,f]=(0,d.useState)(),[g,h]=(0,d.useState)([]),[i,j]=(0,d.useState)(!0),[k,l]=(0,d.useState)("");return{skills:a,options:c,invalid:g,loading:i,failed:k,reload:(0,d.useCallback)(async()=>{j(!0);let a=await (0,e.SS)("/api/skills");a.ok?(b(a.data.skills),f(a.data.options),h(a.data.invalid??[]),l("")):l(a.message),j(!1)},[]),applySkills:b}}}};
|