zentao-api 0.7.1 → 0.7.2
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.
|
@@ -30,4 +30,4 @@ ${yD(Q.latex)}
|
|
|
30
30
|
$$`;case"affine:image":{let $=WB(B.options,D,"image");if(!$)return"";return`})`}case"affine:zui-image":{let $=rB(B.options,D),X=g(F(Q.caption),B.options,D);return $?`})`:""}case"affine:attachment":{let $=z(F(Q.name,"Attachment"),B,D),X=WB(B.options,D,"attachment"),Y=`**${$}**`,J=X?`[${Y}](${N(X)})`:Y,H=z(Q.caption,B,D);return`${J} (${oB(Q.size)}${H?`, ${H}`:""})`}case"affine:database":return z2(D,B);case"affine:zui-table":return P2(D,B);case"affine:zui-holder":return w(E(D),B);case"affine:zui-expand":return w(E(D),B);case"affine:embed-zui-whiteboard":{let $=k(Q.sceneImage,"image");if($)return`})`;return Q.sceneData?"[Whiteboard]":"[Empty Whiteboard]"}case"affine:embed-zui-custom":return Z2(D,B);case"affine:embed-zui-html":{let $=F(Q.html);return $?`${xD($)}html
|
|
31
31
|
${$}
|
|
32
32
|
${xD($)}`:""}case"affine:embed-zui-iframe":{let $=N(Q.src);return $?`[${$}](${$})`:""}case"affine:embed-zui-component":{let $=z(Q.name,B,D);return $?`[Component: ${$}]`:""}case"affine:embed-linked-doc":{let $=F(Q.pageId);if(!$)return"";let X=B.options.resolveDocTitle?.($)??"untitled",Y=z(X,B,D),J=KD(B.options,{pageId:$,params:A(Q.params),title:X},D);return J?`[${Y}](${N(J)})`:Y}case"affine:embed-synced-doc":{let $=E(D);if($.length)return w($,B);let X=F(Q.pageId);if(!X)return"";let Y=B.options.resolveDocTitle?.(X)??X,J=z(Y,B,D),H=KD(B.options,{pageId:X,params:A(Q.params),title:Y},D);return H?`[${J}](${N(H)})`:J}default:return V2.has(D.flavour)?S2(D,B):M2(D,B)}}function w(D,B){let W=[];for(let Q=0;Q<D.length;Q+=1){let $=D[Q];if(!$)continue;if($.flavour==="affine:list"){let X=F(A($.props).type,"bulleted"),Y=[$];while(Q+1<D.length){let J=D[Q+1];if(J?.flavour!=="affine:list"||F(A(J.props).type,"bulleted")!==X)break;Y.push(J),Q+=1}W.push(F2(Y,B))}else W.push(T2($,B))}return WD(W)}function $W(D,B={}){let W=nB(D);lB(W.blocks,B);let Q={options:B},$=B.includeTitle===!1?"":g(aB(W),B,W.root),X=w(W.blocks,Q),Y=WD([$?`# ${$}`:"",X]);return Y?`${Y}
|
|
33
|
-
`:""}var g2=52428800,YW={".avif":"image/avif",".csv":"text/csv",".gif":"image/gif",".htm":"text/html",".html":"text/html",".jpeg":"image/jpeg",".jpg":"image/jpeg",".json":"application/json",".md":"text/markdown",".pdf":"application/pdf",".png":"image/png",".svg":"image/svg+xml",".txt":"text/plain",".webp":"image/webp",".zip":"application/zip"};function XW(D){return import(D)}function $B(D){return typeof Blob<"u"&&D instanceof Blob}function N2(D){return _(D)&&typeof D.path==="string"}function w2(D){return _(D)&&Object.prototype.hasOwnProperty.call(D,"data")&&typeof D.filename==="string"}function JW(D){let B=D.toLowerCase(),W=B.lastIndexOf(".");return W>=0?YW[B.slice(W)]??"application/octet-stream":"application/octet-stream"}function y2(D){let B=D.split(";",1)[0]?.trim().toLowerCase();return Object.entries(YW).find(([,Q])=>Q===B)?.[0]??".bin"}function x2(D){if(D===void 0)return g2;if(!Number.isFinite(D)||D<1)throw new G("E_INVALID_PARAM",{param:"maxUploadBytes",value:String(D)});return Math.floor(D)}function jD(D,B){if(D>B)throw new G("E_UPLOAD_FILE_TOO_LARGE",{size:D,limit:B})}function XB(D,B,W){let $=(D?.trim()||B.trim()).split(/[\\/]/).at(-1)?.trim()??"";if(!$)throw new G("E_INVALID_UPLOAD_SOURCE",{field:W});return $}function h2(D){return _(D)&&typeof D.code==="string"?D.code:void 0}function HW(D){let B=new Uint8Array(D.buffer,D.byteOffset,D.byteLength),W=new Uint8Array(B.byteLength);return W.set(B),W}function f2(D,B,W){if($B(D))return D.type===B?D:new Blob([D],{type:B});if(D instanceof ArrayBuffer)return new Blob([D],{type:B});if(ArrayBuffer.isView(D))return new Blob([HW(D)],{type:B});throw new G("E_INVALID_UPLOAD_SOURCE",{field:W})}async function b2(D,B,W){if(!u())throw new G("E_UPLOAD_PATH_UNSUPPORTED");let Q=typeof D==="string"?D:D.path,$=typeof D==="string"?void 0:D.filename,X=typeof D==="string"?void 0:D.contentType,[Y,J]=await Promise.all([XW("node:fs/promises"),XW("node:path")]),H;try{H=await Y.stat(Q)}catch(I){if(h2(I)==="ENOENT")throw new G("E_UPLOAD_FILE_NOT_FOUND",{path:Q},I);throw new G("E_UPLOAD_FILE_READ_FAILED",{path:Q},I)}if(!H.isFile())throw new G("E_INVALID_UPLOAD_SOURCE",{field:B},{path:Q});jD(H.size,W);let L=XB($,J.basename(Q),B),C=X?.trim()||JW(L),K=globalThis.Bun;if(K?.file){let I=K.file(Q);return jD(I.size,W),{blob:(Boolean(X?.trim())||!I.type)&&I.type!==C?new Blob([I],{type:C}):I,filename:L}}try{let I=await Y.readFile(Q);return jD(I.byteLength,W),{blob:new Blob([HW(I)],{type:C}),filename:L}}catch(I){throw new G("E_UPLOAD_FILE_READ_FAILED",{path:Q},I)}}async function k2(D,B,W){if(typeof D==="string"||N2(D))return b2(D,B,W);if($B(D)){jD(D.size,W);let Q=D.type||"application/octet-stream",$=typeof D.name==="string"?D.name:`${B}${y2(Q)}`,X=XB($,`${B}.bin`,B);return{blob:D.type===Q?D:new Blob([D],{type:Q}),filename:X}}if(w2(D)){let Q=XB(D.filename,B,B),$=D.contentType?.trim()||($B(D.data)?D.data.type:"")||JW(Q),X=f2(D.data,$,B);return jD(X.size,W),{blob:X,filename:Q}}throw new G("E_INVALID_UPLOAD_SOURCE",{field:B})}function v2(D){if(!_(D))return!1;if(D.format==="binary")return!0;return D.type==="array"&&_(D.items)&&D.items.format==="binary"}function LW(D,B,W){if(W===void 0)return;if(Array.isArray(W)){for(let Q of W)LW(D,B,Q);return}if(W===null){D.append(B,"");return}D.append(B,typeof W==="object"?JSON.stringify(W):String(W))}async function d2(D,B){let W=new FormData,Q=_(D.action.requestBody?.schema.properties)?D.action.requestBody.schema.properties:{};for(let[$,X]of Object.entries(D.data??{})){if(!v2(Q[$])){LW(W,$,X);continue}let Y=Array.isArray(X)?X:[X];if(Y.length===0)throw new G("E_INVALID_UPLOAD_SOURCE",{field:$});for(let J of Y){let H=await k2(J,$,B);W.append($,H.blob,H.filename)}}return W}async function GW(D,B={}){let W=D.action.requestBody?.mediaType??"application/json";if(W==="multipart/form-data")return{body:await d2(D,x2(B.maxUploadBytes)),bodyType:"raw"};if(W==="application/x-www-form-urlencoded")return{body:D.data,bodyType:"form"};return{body:D.data}}function m2(D){let B=D.split("/");if(B.length>2||!B[0])throw new G("E_INVALID_REQUEST_NAME");let[W,Q]=B;if(!Q?.length)return{moduleName:W,actionName:"list"};if(Number.isInteger(Number(Q)))return{moduleName:W,actionName:"get",id:Number(Q)};return{moduleName:W,actionName:Q}}function c2(D){let B=D;if(typeof B==="string")try{B=JSON.parse(B)}catch{return new Set}if(B&&typeof B==="object"&&!Array.isArray(B))return new Set(Object.keys(B));return new Set}async function u2(D,B,W,Q,$){let X=B.requestBody?.schema?.properties,Y=D.actions.find((C)=>C.type==="get"&&C.path===B.path);if(!X||!Y)return W;let J=(await CW(`${D.name}/${Y.name}`,W,{client:Q.client,timeout:Q.timeout,insecure:Q.insecure,throwOnFail:!0},$)).data;if(!_(J))return W;let H=c2(W.data),L={...W};for(let C of Object.keys(X))if(!(Object.prototype.hasOwnProperty.call(W,C)||H.has(C))&&Object.prototype.hasOwnProperty.call(J,C))L[C]=J[C];return L}function p2(D){if(typeof D==="string")return D;if(D===void 0)return;try{return JSON.stringify(D)}catch{return String(D)}}function i2(D){for(let B of["code","errorCode","errno"]){let W=D[B];if(typeof W==="string"||typeof W==="number")return W}return}function s2(D){return Boolean(D.convert||D.filter&&D.filter.length>0||D.search&&D.search.length>0||D.sort||D.limit||D.pick&&D.pick.length>0)}function n2(D,B){if(Array.isArray(D)){if(!s2(B))return D;if(D.every(_))return p(D,{convert:B.convert,filter:B.filter,search:B.search,searchFields:B.searchFields,sort:B.sort,limit:B.limit,pick:B.pick});let W=Number(B.limit);return Number.isFinite(W)&&W>=0?D.slice(0,Math.floor(W)):D}if(_(D)&&(B.convertSingle||B.pick&&B.pick.length>0))return p(D,{convert:B.convertSingle,pick:B.pick});return D}function l2(D,B,W){if(!B||typeof B!=="object"||Array.isArray(B))return{status:"success",data:B};let Q=B,$=Q.status==="fail"?"fail":"success",X=n2(ND(D.action,Q,D.params,W),W),Y=Q.message,J=iB(D.action,Q,D.params,W),H={status:$,message:p2(Y),data:X,pager:J?{total:Number(J.recTotal),page:Number(J.pageID),recPerPage:Number(J.recPerPage)}:void 0};if(Y!==void 0&&typeof Y!=="string")H.rawMessage=Y;let L=i2(Q);if(L!==void 0)H.apiCode=L;if($==="fail")H.raw=Q;return H}async function VD(D,B={},W={}){return CW(D,B,W)}async function CW(D,B,W,Q){let $=f(),X=W.client??$.client;if(!X)throw new G("E_NO_GLOBAL_CLIENT");let{moduleName:Y,actionName:J,id:H}=m2(D),L=c(Y);if(!L)throw new G("E_INVALID_MODULE",{module:Y});let C=B.recPerPage??W.recPerPage??$.recPerPage,K={...B,...H!==void 0?{id:H}:{},...C!==void 0?{recPerPage:C}:{}},I=b(Y,J);if(!I)throw new G("E_INVALID_ACTION",{module:Y,action:J});if(Q===void 0)if(!W.forceRefreshConfig&&$.version!==void 0)Q=$.version;else try{Q=(await X.getZentaoConfig({forceRefresh:W.forceRefreshConfig,timeout:W.timeout??$.timeout,insecure:W.insecure??$.insecure})).version}catch(v){if(!(W.skipVersionCheckOnConfigError??$.skipVersionCheckOnConfigError)||!AD(v))throw v;Q=null}if(Q!==null&&!$D(y(Q),I.minVersion))throw new G("E_UNSUPPORTED_ZENTAO_VERSION",{action:`${L.name}/${I.name}`,version:Q,minVersion:I.minVersion.join(", ")},{action:`${L.name}/${I.name}`,version:Q,minVersion:I.minVersion});let U=I.type==="update"&&(W.autoFill??$.autoFill)?await u2(L,I,K,{...W,client:X},Q):K,q=pB(L,J,U);if(q.action.beforeRequest)Object.assign(q,await q.action.beforeRequest(q));let j={...await GW(q,{maxUploadBytes:W.maxUploadBytes}),timeout:W.timeout??$.timeout,insecure:W.insecure??$.insecure},O=q.action.request?await q.action.request({request:q,...j,client:X,options:W}):await X.request(q.path,{method:String(q.action.method).toUpperCase(),query:q.query,...j});if(W.raw)return O;let M={...W,limit:W.limit??$.limit},S=l2(q,O,M);if(S.status==="fail"&&(W.throwOnFail??$.throwOnFail))throw new G("E_API_FAILED",{message:S.message??""},S);return S}var h=async({request:D,body:B,bodyType:W,client:Q,timeout:$,insecure:X})=>{let Y=await Q.request(D.path,{method:D.action.method.toUpperCase(),query:D.query,body:B,bodyType:W,timeout:$,insecure:X,responseType:"response"}),J=await Y.text();try{return JSON.parse(J)}catch{return{status:"fail",message:`Invalid JSON response from ${D.module}/${D.action.name}.`,httpStatus:Y.status,responseText:J}}};function YB(){t({name:"db",display:"数据库",actions:[{name:"query",minVersion:["22.7","biz13.7","max8.7","ipd5.7"],display:"执行 SQL 查询",description:"返回查询结果行及分页;使用 raw: true 可获取原始响应中的 SQL、列信息和执行耗时。",type:"list",method:"post",path:"/db/query",resultType:"list",resultGetter:"rows",pagerGetter:{pageID:"page",recPerPage:"limit",recTotal:"total"},request:h,requestBody:{required:!0,schema:{type:"object",required:["sql"],properties:{sql:{type:"string",description:"SQL 查询语句"},page:{type:"integer",description:"页码,默认 1"},limit:{type:"integer",description:"每页记录数,默认 100"}}},example:{sql:"select * from zt_config",page:4,limit:3}}},{name:"tables",minVersion:["22.7","biz13.7","max8.7","ipd5.7"],display:"获取数据库表列表",type:"list",method:"get",path:"/db/tables",resultType:"list",resultGetter:"tables",request:h},{name:"table",minVersion:["22.7","biz13.7","max8.7","ipd5.7"],display:"获取数据库表结构",description:"meta 返回表信息、主键和列定义;sql 返回包含表信息、dialect 和建表 SQL 的对象。",type:"get",method:"get",path:"/db/tables/{table}",pathParams:{table:"数据库表名,例如 zt_config"},params:[{name:"type",type:"string",description:"表结构返回格式",defaultValue:"meta",options:[{value:"meta",label:"元数据"},{value:"sql",label:"建表 SQL"}]}],resultType:"object",resultGetter:(Q)=>_(Q)?Q.table??Q:Q,request:h}]});let D=["biz13.7","max8.7","ipd5.7"],B={type:"string",description:"知识类型,省略或空字符串表示不限;text/file 不可与非空 objectType 同时使用。",options:[{value:"object",label:"对象知识"},{value:"text",label:"文本知识"},{value:"file",label:"文件知识"}]},W={type:"string",description:"来源对象类型;单独指定时按 type=object 筛选,每次只接受一个编码。",options:[{value:"story",label:"需求"},{value:"task",label:"任务"},{value:"case",label:"测试用例"},{value:"bug",label:"Bug"},{value:"plan",label:"产品计划"},{value:"release",label:"发布"},{value:"feedback",label:"反馈"},{value:"ticket",label:"工单"},{value:"doc",label:"文档(含接口文档)"},{value:"issue",label:"问题"},{value:"risk",label:"风险"},{value:"opportunity",label:"机会"},{value:"practice",label:"最佳实践"},{value:"component",label:"组件"}]};t([{name:"knowledgelib",display:"知识库",description:"需部署商业知识库扩展,仅返回已发布且当前用户可访问的知识库。",actions:[]},{name:"knowledge",display:"知识",description:"需部署商业知识库扩展,支持浏览知识、向量搜索、正文关键词搜索和读取已保存正文。",actions:[]}]),m("knowledgelib",{name:"list",minVersion:D,display:"获取知识库列表",type:"list",method:"get",path:"/ai/knowledgelibs",resultType:"list",resultGetter:"data",pagerGetter:"pager",request:h,params:[{name:"type",type:"string",description:"库类型,省略或空字符串时合并两类可见库",options:[{value:"my",label:"我的知识库"},{value:"team",label:"组织知识库"}]},{name:"keyword",type:"string",description:"知识库名称或描述关键词,首尾空白会被移除"},{name:"pageID",type:"number",defaultValue:1,description:"页码,从 1 开始的正整数"},{name:"recPerPage",type:"number",defaultValue:20,description:"每页条数,范围 1~100"}]}),m("knowledge",[{name:"list",minVersion:D,display:"获取知识库内知识列表",description:"返回当前用户可见的知识条目,按本地 ID 降序排列;不支持标题关键词查询。",type:"list",method:"get",path:"/ai/knowledgelibs/{libID}/knowledges",pathParams:{libID:"本地知识库 ID,正整数"},resultType:"list",resultGetter:"data",pagerGetter:"pager",request:h,params:[{name:"type",...B},{name:"objectType",...W},{name:"pageID",type:"number",defaultValue:1,description:"页码,从 1 开始的正整数"},{name:"recPerPage",type:"number",defaultValue:20,description:"每页条数,范围 1~100"}]},{name:"embeddingsSearch",minVersion:D,display:"多知识库向量搜索",description:"仅检索已有索引,需 ai.searchknowledgelib 权限。按匹配度降序返回片段,不分页;用 knowledgeID 获取完整正文,chunkID 仅标识片段。",type:"list",method:"post",path:"/ai/knowledges/embeddingssearch",resultType:"list",resultGetter:"data",request:h,requestBody:{required:!0,mediaType:"application/json",schema:{type:"object",required:["keyword","libIDs"],example:{keyword:"如何处理接口请求超时",libIDs:[12,18],minSimilarity:0.7,limit:5},properties:{keyword:{type:"string",minLength:1,description:"搜索问题或关键词,去除首尾空白后不能为空"},libIDs:{type:"array",minItems:1,items:{type:"integer",minimum:1},description:"本地知识库 ID 的非空正整数数组,例如 [12,18];不接受字符串元素,重复 ID 自动去重"},type:B,objectType:W,minSimilarity:{type:"number",minimum:0,maximum:1,defaultValue:0.5,description:"最小匹配度,范围 [0,1]"},limit:{type:"integer",minimum:1,maximum:100,defaultValue:5,description:"整次多库搜索最多返回的片段数,范围 1~100"}}}}},{name:"search",minVersion:D,display:"多知识库正文关键词搜索",description:"需 ai.searchknowledgelib 权限,仅按字面文本匹配已保存的 content,标题不参与,不依赖向量索引。返回完整正文及 contentType,每条知识只返回一次,按知识 ID 降序分页。",type:"list",method:"post",path:"/ai/knowledges/search",resultType:"list",resultGetter:"data",pagerGetter:"pager",request:h,requestBody:{required:!0,mediaType:"application/json",schema:{type:"object",required:["keywords","libIDs"],example:{keywords:["登录","超时"],libIDs:[12,18],matchMode:"any",pageID:1,recPerPage:20},properties:{keywords:{type:"array",minItems:1,items:{type:"string",minLength:1},description:"非空关键词数组,每项去除首尾空白后为 1~200 个 Unicode 字符,去重后最多 20 项;%、_ 和反斜杠按普通字符匹配"},libIDs:{type:"array",minItems:1,items:{type:"integer",minimum:1},description:"本地知识库 ID 的非空正整数数组,例如 [12,18];不接受字符串元素,重复 ID 自动去重"},matchMode:{type:"string",defaultValue:"any",description:"正文关键词匹配方式;仅省略时使用 any,空字符串和 null 无效",options:[{value:"any",label:"包含任一关键词"},{value:"all",label:"同一条正文包含全部关键词"}]},type:B,objectType:W,pageID:{type:"integer",minimum:1,defaultValue:1,description:"页码,从 1 开始的正整数"},recPerPage:{type:"integer",minimum:1,maximum:100,defaultValue:20,description:"每页条数,范围 1~100"}}}}},{name:"get",minVersion:D,display:"获取知识详细内容",description:"返回已保存的完整正文及来源信息,不触发文件提取、知识同步或索引更新。按 contentType 解释正文,尚未保存正文时 content 可为空。",type:"get",method:"get",path:"/ai/knowledges/{knowledgeID}",pathParams:{knowledgeID:"本地知识条目 ID,正整数;不可使用 chunkID 或来源对象 objectID"},resultType:"object",resultGetter:"data",request:h}]);for(let[Q,$]of[["product","create"],["product","update"],["feedback","close"]])P(Q,$,{request:h});for(let Q of["create","update"])P("product",Q,($)=>{let X=$.requestBody.schema.properties;return X.desc.type="string",delete X.desc.items,$});P("execution","create",(Q)=>{let $=Q.requestBody.schema?.required;if(Array.isArray($)&&!$.includes("products"))$.push("products");return Q}),P("story","update",(Q)=>{let $=Q.requestBody.schema?.properties;if($&&!$.plan)$.plan={type:"integer",description:"所属计划",format:"int32"};if($&&$.category)$.category={type:"string",description:"类别"};return Q}),["story","requirement","epic"].forEach((Q)=>{["create","change"].forEach(($)=>{P(Q,$,(X)=>{let Y=X.requestBody.schema;if(Y.properties.reviewer??={type:"array",items:{type:"string"}},Y.properties.reviewer.description="评审人员,如果无需评审则不传",Y.required)Y.required=Y.required.filter((J)=>J!=="reviewer");return X.beforeRequest=async({data:J={}})=>{if(Array.isArray(J.reviewer)&&J.reviewer.some((L)=>typeof L==="string"&&L.trim()!==""))J.status="reviewing";else J.needNotReview="1";return{data:J}},X})})}),P("feedback","close",{beforeRequest:async(Q)=>{let $={...Q.data},X={...Q.query};if(Object.hasOwn($,"confirmClose"))X.confirmClose=$.confirmClose,delete $.confirmClose;return{data:$,query:X}}}),P("bug","confirm",{request:async({request:Q,body:$,bodyType:X,client:Y,timeout:J,insecure:H,options:L})=>{let C={...$},I=["status","assignedTo","type","pri","deadline","mailto"].filter((U)=>C[U]===void 0);if(I.length){let q=(await VD("bug/get",{id:Q.id},{client:Y,timeout:J,insecure:H,throwOnFail:!0,forceRefreshConfig:L.forceRefreshConfig,skipVersionCheckOnConfigError:L.skipVersionCheckOnConfigError})).data;if(!_(q)||I.some((V)=>q[V]===void 0))throw new G("E_API_FAILED",{message:"Bug details are incomplete; confirmation was not sent."});for(let V of I)C[V]=V==="mailto"&&typeof q[V]==="string"?q[V].split(",").filter(Boolean):q[V]}if(typeof C.status!=="string"||!C.status.trim())throw new G("E_INVALID_PARAM",{param:"status",value:String(C.status)});if(C.assignedTo==="closed")throw new G("E_INVALID_PARAM",{param:"assignedTo",value:"closed"});return h({request:Q,body:C,bodyType:X,client:Y,timeout:J,insecure:H,options:L})}}),[["product","create"],["product","update"],["execution","create"],["execution","update"]].forEach(([Q,$])=>{P(Q,$,(X)=>{let Y=X.requestBody.schema?.properties;if(Y.acl&&Y.acl.defaultValue===void 0)Y.acl.defaultValue="open";return X})}),P("execution","create",(Q)=>{let $=Q.requestBody.schema?.properties;if($){if(!$.milestone)$.milestone={type:"integer",description:"是否里程碑(0 否| 1 是)",format:"int32"}}return Q}),["create","update"].forEach((Q)=>{P("task",Q,($)=>{let X=$.requestBody?.schema?.properties;if(X&&!X.parent)X.parent={type:"integer",description:"父任务",format:"int32"};return $})}),P("file","create",(Q)=>{if(Q.requestBody){Q.requestBody.mediaType="multipart/form-data";let $=Q.requestBody.schema?.properties;if($?.file)$.file.format="binary"}return Q}),P("doc","get",(Q)=>{let $=Q.resultGetter;return Q.resultGetter=(X,Y,J={})=>{let H=$?ND({...Q,resultGetter:$},X,Y,J):X.doc??X;if(!_(H))return H;let L=J.pick,C=!L?.length,K=C||L.includes("content"),I=C||L.includes("rawContent");if(!K&&!I)return H;let U=H.content;try{if(I&&(H.rawContent===void 0||H.rawContent===""))H.rawContent=U;if(K&&H.contentType==="doc"){let q=$W(U);H.content=q}}catch{}return H},Q}),m("story",{name:"getGrades",minVersion:["22.5","biz13.5","max8.5","ipd5.5"],display:"获取需求层级选项",type:"list",method:"get",path:"/storygrades",resultType:"list",resultGetter:"grades"}),P("story","create",(Q)=>{let $=Q.requestBody.schema?.properties;if($&&!$.grade)$.grade={type:"integer",description:"需求层级,可用的需求层级可以通过 story-getGrades 操作获取"};return Q}),["create","update"].forEach((Q)=>{P("task",Q,($)=>{let X=$.requestBody.schema?.properties;if(X&&!X.type)X.type={type:"string",description:"任务类型(枚举:design 设计 | devel 开发 | request 需求 | test 测试 | study 研究 | discuss 讨论 | ui 界面 | affair 事务 | misc 其他)"};return $})})}var qW={user:{id:"用户编号",company:"所属公司",type:"用户类型",dept:"部门",account:"用户名",password:"密码",role:"职位",realname:"姓名",superior:"直属上级",pinyin:"姓名拼音",nickname:"昵称",commiter:"源代码帐号",avatar:"用户头像",birthday:"生日",gender:"性别",email:"邮箱",skype:"Skype",qq:"QQ",mobile:"手机",phone:"电话",weixin:"微信",dingding:"钉钉",slack:"Slack",whatsapp:"WhatsApp",address:"通讯地址",zipcode:"邮编",nature:"性格特征",analysis:"影响分析",strategy:"应对策略",join:"入职日期",visits:"访问次数",visions:"界面类型",ip:"最后IP",last:"最后登录",fails:"失败次数",locked:"锁住日期",feedback:"是否反馈用户",ranzhi:"ZDOO帐号",ldap:"LDAP账号",score:"积分",scoreLevel:"积分等级",resetToken:"重置密码令牌",resetExpired:"重置令牌过期时间",clientStatus:"登录状态",clientLang:"客户端语言",jira:"是否Jira导入用户",deleted:"(已删除)"},program:{id:"编号",project:"项目",isTpl:"是否模板",charter:"所属立项",model:"项目管理方式",type:"类型",category:"项目集类型",lifetime:"项目周期",budget:"预算",budgetUnit:"预算单位",attribute:"阶段类型",percent:"工作量占比",milestone:"里程碑",output:"输出",auth:"权限控制",storyType:"关联需求概念",parent:"父项目集",path:"路径",grade:"层级",name:"项目集名称",code:"项目代号",hasProduct:"是否关联产品",workflowGroup:"项目流程",begin:"计划开始",end:"计划完成",firstEnd:"启动时的计划完成日期",realBegan:"实际开始",realEnd:"实际完成",days:"可用工作日",schedule:"日程安排",status:"状态",subStatus:"子状态",pri:"优先级",desc:"项目集描述",version:"版本",parentVersion:"父版本",planDuration:"计划周期天数",realDuration:"实际周期天数",progress:"项目进度",estimate:"预计",left:"剩余工时",consumed:"消耗工时",teamCount:"总人数",market:"目标市场",openedBy:"创建者",openedDate:"创建时间",openedVersion:"创建版本",lastEditedBy:"最后编辑人",lastEditedDate:"最后编辑日期",closedBy:"由谁关闭",closedDate:"关闭日期",closedReason:"关闭原因",canceledBy:"由谁取消",canceledDate:"取消日期",suspendedDate:"暂停日期",PO:"项目负责人",PM:"负责人",QD:"测试负责人",RD:"发布负责人",team:"团队",acl:"访问控制",whitelist:"白名单",tplAcl:"模板访问控制",tplWhiteList:"模板白名单",order:"排序",stageBy:"阶段类型",displayCards:"每列最大卡片数",fluidBoard:"列宽度",multiple:"启用迭代",parallel:"是否允许并行",enabled:"是否启用阶段",linkType:"关联类型",taskDateLimit:"任务时间限制",colWidth:"列宽",minColWidth:"最小列宽",maxColWidth:"最大列宽",coverExecutionPriv:"执行权限控制",vision:"界面",frozen:"冻结状态",deleted:"已删除"},product:{id:"编号",program:"所属项目集",name:"产品名称",code:"产品代号",shadow:"是否影子产品",bind:"是否独立产品",line:"产品线",type:"产品类型",status:"状态",subStatus:"子状态",desc:"产品描述",PO:"产品负责人",QD:"测试负责人",RD:"发布负责人",feedback:"反馈负责人",ticket:"工单负责人",workflowGroup:"产品流程",acl:"访问控制",groups:"权限组",whitelist:"白名单",reviewer:"评审人",PMT:"规划负责人",draftEpics:"草稿业务需求",activeEpics:"激活业务需求",changingEpics:"变更中业务需求",reviewingEpics:"评审中业务需求",finishedEpics:"已完成业务需求",closedEpics:"已关闭业务需求",totalEpics:"业务需求数",draftRequirements:"草稿用户需求",activeRequirements:"激活用户需求",changingRequirements:"变更中用户需求",reviewingRequirements:"评审中用户需求",finishedRequirements:"已完成用户需求",closedRequirements:"已关闭用户需求",totalRequirements:"用户需求数",draftStories:"草稿软件需求",activeStories:"激活软件需求",changingStories:"变更中软件需求",reviewingStories:"评审中软件需求",finishedStories:"已完成软件需求",closedStories:"已关闭软件需求",totalStories:"软件需求数",unresolvedBugs:"未解决Bug",closedBugs:"关闭Bug",fixedBugs:"已修复Bug",totalBugs:"Bug总数",plans:"计划数",releases:"发布数",createdBy:"由谁创建",createdDate:"创建日期",createdVersion:"创建版本",closedDate:"关闭日期",order:"排序",vision:"所属界面",lineName:"产品线名称",programName:"项目集名称",programPM:"项目集负责人",finishClosedStories:"已关闭完成需求",launchedStories:"已立项需求",developingStories:"研发中需求",projects:"关联项目数",executions:"关联执行数",coverage:"覆盖率",latestRelease:"最新发布",latestReleaseDate:"最新发布时间",productLine:"产品线",testCaseCoverage:"用例覆盖率",epicCompleteRate:"史诗完成率",requirementCompleteRate:"用户需求完成率",storyCompleteRate:"用户故事完成率",bugFixedRate:"修复率",deleted:"已删除"},project:{id:"项目ID",project:"所属项目",isTpl:"是否模板",charter:"所属立项",model:"项目管理方式",type:"项目类型",category:"项目类型",lifetime:"项目周期",budget:"预算",budgetUnit:"(单位:)",attribute:"阶段类型",percent:"工作量占比",milestone:"里程碑",output:"输出",auth:"权限控制",storyType:"关联需求概念",parent:"所属项目集",path:"路径",grade:"层级",name:"项目名称",code:"项目代号",hasProduct:"是否关联产品",workflowGroup:"项目流程",begin:"计划开始",end:"计划完成",firstEnd:"启动时的计划完成日期",realBegan:"实际开始日期",realEnd:"实际完成日期",days:"可用工作日",schedule:"日程安排",status:"状态",subStatus:"子状态",pri:"优先级",desc:"项目描述",version:"版本",parentVersion:"父版本",planDuration:"计划周期天数",realDuration:"实际周期天数",progress:"进度",estimate:"预计",left:"剩余工时",consumed:"消耗工时",teamCount:"人数",market:"目标市场",openedBy:"由谁创建",openedDate:"创建日期",openedVersion:"创建版本",lastEditedBy:"最后编辑人",lastEditedDate:"最后编辑日期",closedBy:"由谁关闭",closedDate:"关闭日期",closedReason:"关闭原因",canceledBy:"由谁取消",canceledDate:"取消日期",suspendedDate:"暂停日期",PO:"项目负责人",PM:"负责人",QD:"测试负责人",RD:"发布负责人",team:"团队",acl:"访问控制",whitelist:"项目白名单",tplAcl:"模板访问控制",tplWhiteList:"模板白名单",order:"排序",stageBy:"阶段类型",displayCards:"每列最大卡片数",fluidBoard:"列宽度",multiple:"启用迭代",parallel:"是否允许并行",enabled:"是否启用阶段",linkType:"关联类型",taskDateLimit:"任务时间限制",colWidth:"列宽",minColWidth:"最小列宽",maxColWidth:"最大列宽",coverExecutionPriv:"执行权限控制",vision:"界面",frozen:"冻结状态",teamMembers:"团队成员",leftTasks:"剩余任务",statusTitle:"状态标题",consume:"消耗",surplus:"剩余",invested:"已投入",PMAvatar:"负责人头像",PMUserID:"负责人用户ID",storyCount:"需求条目数",storyPoints:"需求规模",executionCount:"执行数",from:"来源",actions:"操作",deliverable:"交付物",deleted:"已删除"},execution:{id:"迭代编号",project:"所属项目",isTpl:"是否模板",charter:"所属立项",model:"项目管理方式",type:"迭代类型",category:"项目类型",lifetime:"项目周期",budget:"预算",budgetUnit:"(单位:)",attribute:"阶段类型",percent:"工作量占比",milestone:"里程碑",output:"输出",auth:"权限控制",storyType:"关联需求概念",parent:"所属项目",path:"路径",grade:"层级",name:"迭代名称",code:"迭代代号",hasProduct:"是否关联产品",workflowGroup:"项目流程",begin:"计划开始",end:"计划完成",firstEnd:"启动时的计划完成日期",realBegan:"实际开始日期",realEnd:"实际完成日期",days:"可用工作日",schedule:"日程安排",status:"迭代状态",subStatus:"子状态",pri:"优先级",desc:"迭代描述",version:"版本",parentVersion:"父版本",planDuration:"计划周期天数",realDuration:"实际周期天数",progress:"进度",estimate:"预计",left:"剩余",consumed:"消耗",teamCount:"人数",market:"目标市场",openedBy:"由谁创建",openedDate:"创建日期",openedVersion:"创建版本",lastEditedBy:"最后编辑人",lastEditedDate:"最后编辑日期",closedBy:"由谁关闭",closedDate:"关闭日期",closedReason:"关闭原因",canceledBy:"由谁取消",canceledDate:"取消日期",suspendedDate:"暂停日期",PO:"产品负责人",PM:"迭代负责人",QD:"测试负责人",RD:"发布负责人",team:"团队成员",acl:"访问控制",whitelist:"白名单",tplAcl:"模板访问控制",tplWhiteList:"模板白名单",order:"迭代排序",stageBy:"阶段类型",displayCards:"每列最大卡片数",fluidBoard:"列宽度",multiple:"启用迭代",parallel:"是否允许并行",enabled:"是否启用阶段",linkType:"关联类型",taskDateLimit:"任务时间限制",colWidth:"列宽",minColWidth:"最小列宽",maxColWidth:"最大列宽",coverExecutionPriv:"执行权限控制",vision:"界面",frozen:"冻结状态",projectName:"所属项目",projectModel:"项目管理方式",productName:"产品名称",product:"相关产品",productID:"产品ID",delay:"延期",totalEstimate:"预计",totalConsumed:"消耗",totalLeft:"剩余",burns:"燃尽图",deleted:"已删除"},productplan:{id:"编号",product:"所属产品",branch:"平台/分支",parent:"父计划",title:"计划名称",status:"状态",desc:"描述",begin:"开始日期",end:"结束日期",finishedDate:"完成时间",closedDate:"关闭时间",order:"排序",closedReason:"关闭原因",createdBy:"由谁创建",createdDate:"创建时间",deleted:"已删除"},story:{id:"编号",parent:"父需求",isParent:"是父需求",root:"顶级需求ID",path:"路径",grade:"需求层级",product:"所属产品",branch:"平台/分支",module:"所属模块",plan:"所属计划",source:"来源",sourceNote:"来源备注",fromBug:"来源Bug",feedback:"相关反馈",title:"软件需求名称",keywords:"关键词",type:"需求类型",category:"类别",pri:"优先级",estimate:"预计工时",status:"当前状态",subStatus:"子状态",color:"标题颜色",stage:"所处阶段",stagedBy:"设置阶段者",mailto:"抄送给",lib:"所属需求库",fromStory:"来源需求",fromVersion:"来源版本",openedBy:"由谁创建",openedDate:"创建日期",assignedTo:"指派给",assignedDate:"指派日期",approvedDate:"评审日期",lastEditedBy:"最后修改",lastEditedDate:"最后修改日期",changedBy:"由谁变更",changedDate:"变更时间",reviewedBy:"已评审人",reviewedDate:"评审时间",releasedDate:"发布日期",closedBy:"由谁关闭",closedDate:"关闭日期",closedReason:"关闭原因",activatedDate:"激活日期",toBug:"转Bug",linkStories:"相关需求",linkRequirements:"相关用户需求",docs:"关联文档",twins:"孪生需求",duplicateStory:"重复需求",version:"版本号",parentVersion:"父需求版本",demandVersion:"需求池需求版本",storyChanged:"需求已变更",feedbackBy:"反馈者",notifyEmail:"通知邮箱",BSA:"BSA等级",duration:"管理周期",demand:"需求池需求",submitedBy:"提交评审人",roadmap:"所属路标",URChanged:"用需变更",unlinkReason:"移除原因",retractedReason:"撤销原因",retractedBy:"由谁撤回",retractedDate:"撤回日期",verifiedDate:"验收时间",vision:"所属界面",frozen:"冻结状态",deleted:"已删除"},epic:{id:"编号",parent:"父需求",isParent:"是父需求",root:"顶级需求ID",path:"路径",grade:"需求层级",product:"所属产品",branch:"平台/分支",module:"所属模块",plan:"所属计划",source:"来源",sourceNote:"来源备注",fromBug:"来源Bug",feedback:"相关反馈",title:"业务需求名称",keywords:"关键词",type:"需求类型",category:"类别",pri:"优先级",estimate:"预计工时",status:"当前状态",subStatus:"子状态",color:"标题颜色",stage:"所处阶段",stagedBy:"设置阶段者",mailto:"抄送给",lib:"所属需求库",fromStory:"来源需求",fromVersion:"来源版本",openedBy:"由谁创建",openedDate:"创建日期",assignedTo:"指派给",assignedDate:"指派日期",approvedDate:"评审日期",lastEditedBy:"最后修改",lastEditedDate:"最后修改日期",changedBy:"由谁变更",changedDate:"变更时间",reviewedBy:"已评审人",reviewedDate:"评审时间",releasedDate:"发布日期",closedBy:"由谁关闭",closedDate:"关闭日期",closedReason:"关闭原因",activatedDate:"激活日期",toBug:"转Bug",linkStories:"相关需求",linkRequirements:"相关用户需求",docs:"关联文档",twins:"孪生需求",duplicateStory:"重复需求",version:"版本号",parentVersion:"父需求版本",demandVersion:"需求池需求版本",storyChanged:"需求已变更",feedbackBy:"反馈者",notifyEmail:"通知邮箱",BSA:"BSA等级",duration:"管理周期",demand:"需求池需求",submitedBy:"提交评审人",roadmap:"所属路标",URChanged:"用需变更",unlinkReason:"移除原因",retractedReason:"撤销原因",retractedBy:"由谁撤回",retractedDate:"撤回日期",verifiedDate:"验收时间",vision:"所属界面",frozen:"冻结状态",deleted:"已删除"},requirement:{id:"编号",parent:"父需求",isParent:"是父需求",root:"顶级需求ID",path:"路径",grade:"需求层级",product:"所属产品",branch:"平台/分支",module:"所属模块",plan:"所属计划",source:"来源",sourceNote:"来源备注",fromBug:"来源Bug",feedback:"相关反馈",title:"用户需求名称",keywords:"关键词",type:"需求类型",category:"类别",pri:"优先级",estimate:"预计工时",status:"当前状态",subStatus:"子状态",color:"标题颜色",stage:"所处阶段",stagedBy:"设置阶段者",mailto:"抄送给",lib:"所属需求库",fromStory:"来源需求",fromVersion:"来源版本",openedBy:"由谁创建",openedDate:"创建日期",assignedTo:"指派给",assignedDate:"指派日期",approvedDate:"评审日期",lastEditedBy:"最后修改",lastEditedDate:"最后修改日期",changedBy:"由谁变更",changedDate:"变更时间",reviewedBy:"已评审人",reviewedDate:"评审时间",releasedDate:"发布日期",closedBy:"由谁关闭",closedDate:"关闭日期",closedReason:"关闭原因",activatedDate:"激活日期",toBug:"转Bug",linkStories:"相关需求",linkRequirements:"相关用户需求",docs:"关联文档",twins:"孪生需求",duplicateStory:"重复需求",version:"版本号",parentVersion:"父需求版本",demandVersion:"需求池需求版本",storyChanged:"需求已变更",feedbackBy:"反馈者",notifyEmail:"通知邮箱",BSA:"BSA等级",duration:"管理周期",demand:"需求池需求",submitedBy:"提交评审人",roadmap:"所属路标",URChanged:"用需变更",unlinkReason:"移除原因",retractedReason:"撤销原因",retractedBy:"由谁撤回",retractedDate:"撤回日期",verifiedDate:"验收时间",vision:"所属界面",frozen:"冻结状态",deleted:"已删除"},bug:{id:"Bug编号",project:"所属项目",product:"所属产品",injection:"注入环节",identify:"发现环节",branch:"平台/分支",module:"所属模块",execution:"所属执行",plan:"所属计划",story:"相关需求",storyVersion:"软件需求版本",task:"相关任务",toTask:"转任务",toStory:"转软件需求",title:"Bug标题",keywords:"关键词",severity:"严重程度",pri:"优先级",type:"Bug类型",os:"操作系统",browser:"浏览器",hardware:"硬件",found:"发现环境",steps:"重现步骤",status:"Bug状态",subStatus:"子状态",color:"标题颜色",confirmed:"是否确认",activatedCount:"激活次数",activatedDate:"激活时间",feedbackBy:"反馈者",notifyEmail:"通知邮箱",mailto:"抄送给",openedBy:"由谁创建",openedDate:"创建日期",openedBuild:"影响版本",assignedTo:"指派给",assignedDate:"指派日期",deadline:"截止日期",resolvedBy:"解决者",resolution:"解决方案",resolvedBuild:"解决版本",resolvedDate:"解决日期",closedBy:"由谁关闭",closedDate:"关闭日期",duplicateBug:"重复Bug",relatedBug:"相关Bug",case:"来源用例",caseVersion:"用例版本",feedback:"相关反馈",result:"结果",repo:"所属版本库",mr:"合并请求",entry:"代码路径",lines:"代码行",v1:"版本1",v2:"版本2",repoType:"版本库类型",issueKey:"Sonarqube问题键值",testtask:"测试单",lastEditedBy:"最后修改者",lastEditedDate:"修改日期",deleted:"已删除"},testcase:{id:"用例编号",project:"所属项目",product:"所属产品",execution:"所属迭代",branch:"平台/分支",lib:"所属库",module:"所属模块",path:"路径",story:"相关软件需求",storyVersion:"软件需求版本",title:"用例名称",precondition:"前置条件",keywords:"关键词",pri:"优先级",type:"用例类型",auto:"自动化测试用例",frame:"自动化测试框架",stage:"适用环节",howRun:"测试方式",script:"自动化脚本",scriptedBy:"脚本由谁创建",scriptedDate:"脚本创建日期",scriptStatus:"脚本状态",scriptLocation:"脚本地址",status:"用例状态",subStatus:"子状态",color:"标题颜色",frequency:"使用频率",order:"排序",openedBy:"由谁创建",openedDate:"创建日期",reviewedBy:"由谁评审",reviewedDate:"评审时间",lastEditedBy:"最后修改者",lastEditedDate:"修改日期",version:"用例版本",linkCase:"相关用例",fromBug:"来源Bug",fromCaseID:"用例来源ID",fromCaseVersion:"用例来源版本",lastRunner:"执行人",lastRunDate:"执行时间",lastRunResult:"结果",scene:"所属场景",sort:"排序",deleted:"已删除"},task:{id:"编号",project:"所属项目",parent:"父任务",isParent:"是父任务",isTpl:"是模板",path:"路径",execution:"所属执行",module:"所属模块",design:"相关设计",story:"相关软件需求",storyVersion:"软件需求版本",designVersion:"设计版本",fromBug:"来源Bug",feedback:"相关反馈",fromIssue:"来源问题",docs:"关联文档",docVersions:"文档版本",name:"任务名称",type:"任务类型",mode:"任务模式",pri:"优先级",estimate:"最初预计",consumed:"总计消耗",left:"预计剩余",deadline:"截止日期",status:"任务状态",subStatus:"子状态",color:"标题颜色",mailto:"抄送给",keywords:"关键词",desc:"任务描述",version:"版本",openedBy:"由谁创建",openedDate:"创建日期",assignedTo:"指派给",assignedDate:"指派日期",estStarted:"预计开始",realStarted:"实际开始",finishedBy:"由谁完成",finishedDate:"实际完成",finishedList:"完成者列表",canceledBy:"由谁取消",canceledDate:"取消时间",closedBy:"由谁关闭",closedDate:"关闭时间",planDuration:"计划持续天数",realDuration:"实际持续天数",closedReason:"关闭原因",lastEditedBy:"最后修改",lastEditedDate:"最后修改日期",activatedDate:"激活日期",order:"排序",repo:"所属代码库",mr:"合并请求",entry:"代码路径",lines:"代码行",v1:"版本1",v2:"版本2",vision:"所属界面",deleted:"已删除"},issue:{id:"编号",resolvedBy:"解决者",project:"所属项目",execution:"所属执行",title:"问题名称",desc:"描述",pri:"优先级",severity:"严重程度",type:"类型",activity:"活动列表",deadline:"计划解决日期",resolution:"解决方式",resolutionComment:"解决方案",objectID:"关联对象",resolvedDate:"实际解决日期",status:"结果",owner:"提出人",lib:"问题库",from:"来源",version:"版本号",createdBy:"由谁创建",createdDate:"创建日期",editedBy:"由谁编辑",editedDate:"编辑日期",activateBy:"由谁激活",activateDate:"激活日期",closedBy:"由谁关闭",closedDate:"关闭日期",assignedTo:"指派给",assignedBy:"由谁指派",assignedDate:"指派时间",approvedDate:"审批日期",relatedObject:"关联对象",risk:"关联风险",files:"附件",sourceName:"来源名称",deleted:"已删除"},risk:{id:"ID",project:"所属项目",execution:"所属执行",name:"风险名称",source:"来源",category:"类型",strategy:"策略",status:"状态",impact:"影响程度",probability:"发生概率",rate:"风险系数",pri:"优先级",identifiedDate:"识别日期",prevention:"应对措施",remedy:"响应措施",plannedClosedDate:"计划关闭日期",actualClosedDate:"实际关闭日期",lib:"风险库",from:"来源",version:"版本号",createdBy:"由谁创建",createdDate:"创建日期",editedBy:"由谁编辑",editedDate:"编辑日期",resolution:"解决措施",resolvedBy:"解决者",activateBy:"由谁激活",activateDate:"激活日期",assignedTo:"指派给",assignedDate:"指派日期",closedBy:"由谁关闭",closedDate:"关闭日期",cancelBy:"由谁取消",cancelDate:"取消日期",cancelReason:"取消原因",hangupBy:"由谁挂起",hangupDate:"挂起日期",trackedBy:"由谁跟踪",trackedDate:"跟踪日期",approvedDate:"审批日期",relatedObject:"关联对象",issues:"关联问题",files:"附件",deleted:"已删除"},meeting:{id:"ID",project:"所属项目",execution:"所属执行",name:"会议名称",type:"会议类型",begin:"开始时间",end:"结束时间",dept:"所属部门",mode:"会议模式",host:"主持人",participant:"参会人员",date:"会议日期",room:"会议室",minutes:"会议记录",minutedBy:"由谁记录",minutedDate:"记录日期",objectType:"关联类型",objectID:"关联对象",createdBy:"由谁创建",createdDate:"创建日期",editedBy:"由谁编辑",editedDate:"编辑日期",participantName:"参会人员姓名",files:"附件",objectName:"关联对象名称",deleted:"已删除"},feedback:{id:"编号",product:"所属产品",module:"所属模块",title:"反馈名称",type:"类型",solution:"处理方案",desc:"描述",pri:"优先级",status:"状态",subStatus:"子状态",prevStatus:"之前状态",public:"公开",notify:"通知",notifyEmail:"通知邮箱",source:"来源公司",likes:"点赞人",result:"转化结果",faq:"FAQ",openedBy:"创建者",openedDate:"创建时间",reviewedBy:"由谁评审",reviewedDate:"评审时间",processedBy:"由谁处理",processedDate:"处理时间",closedBy:"由谁关闭",closedDate:"关闭时间",closedReason:"关闭原因",editedBy:"最后处理人",editedDate:"最后操作时间",assignedTo:"指派给",prevAssignedTo:"之前指派人",assignedDate:"指派时间",activatedBy:"由谁激活",activatedDate:"激活时间",feedbackBy:"反馈者",repeatFeedback:"重复反馈",mailto:"抄送给",keywords:"关键词",deleted:"已删除"},ticket:{id:"工单编号",product:"所属产品",module:"所属模块",title:"工单名称",type:"类型",desc:"描述",openedBuild:"影响版本",feedback:"由反馈转化",assignedTo:"指派给",assignedDate:"指派日期",realStarted:"实际开始",startedBy:"由谁开始",startedDate:"开始时间",deadline:"截止日期",pri:"优先级",estimate:"最初预计",left:"预计剩余",status:"状态",openedBy:"由谁创建",openedDate:"创建时间",activatedCount:"激活次数",activatedBy:"由谁激活",activatedDate:"激活时间",closedBy:"关闭者",closedDate:"关闭时间",closedReason:"关闭原因",finishedBy:"完成者",finishedDate:"完成时间",resolvedBy:"解决者",resolvedDate:"解决时间",resolution:"解决方案",editedBy:"由谁编辑",editedDate:"最后修改时间",keywords:"关键字",repeatTicket:"重复工单",mailto:"抄送给",deleted:"已删除"},system:{id:"编号",name:"应用名称",product:"所属产品",integrated:"集成应用",latestRelease:"最新版本号",latestDate:"最新发布日期",children:"包含应用",status:"状态",desc:"描述",createdBy:"由谁创建",createdDate:"创建日期",editedBy:"由谁编辑",editedDate:"编辑日期",deleted:"已删除"},build:{id:"ID",project:"所属项目",product:"所属产品",branch:"平台/分支",execution:"所属迭代",builds:"包含构建",name:"名称",system:"所属应用",scmPath:"源代码地址",filePath:"下载地址",date:"打包日期",stories:"完成的软件需求",bugs:"解决的Bug",artifactRepoID:"制品库",builder:"构建者",desc:"描述",createdBy:"由谁创建",createdDate:"创建时间",deleted:"已删除"},testtask:{id:"编号",project:"所属项目",product:"所属产品",name:"测试单名称",execution:"所属执行",build:"提测构建",joint:"是否联调测试单",type:"测试类型",owner:"负责人",pri:"优先级",begin:"开始日期",end:"结束日期",realBegan:"实际开始日期",realFinishedDate:"实际完成日期",mailto:"抄送给",desc:"描述",report:"测试总结",status:"当前状态",testreport:"相关测试报告",auto:"自动化",subStatus:"子状态",createdBy:"由谁创建",createdDate:"创建时间",members:"参与人",deleted:"已删除"},release:{id:"ID",project:"所属项目",product:"所属产品",branch:"平台/分支",shadow:"影子构建",build:"构建",name:"应用版本号",system:"应用",releases:"包含应用",marker:"里程碑",date:"计划发布日期",releasedDate:"实际发布日期",stories:"完成的软件需求",bugs:"解决的Bug",leftBugs:"遗留的Bug",desc:"描述",mailto:"抄送给",notify:"发送通知",status:"发布状态",subStatus:"子状态",createdBy:"由谁创建",createdDate:"创建时间",deleted:"已删除"},file:{id:"编号",pathname:"路径",title:"标题",extension:"文件类型",size:"大小",objectType:"对象类型",objectID:"对象ID",gid:"全局标识",addedBy:"由谁添加",addedDate:"添加时间",downloads:"下载次数",extra:"备注",deleted:"已删除"},workflow:{id:"编号",group:"流程分组",parent:"父工作流",child:"子工作流",type:"类型",navigator:"所属导航",app:"所属应用",position:"位置",module:"工作流代号",table:"工作流表",name:"工作流名",icon:"图标",titleField:"标题字段",contentField:"内容字段",flowchart:"流程图",js:"JS",css:"CSS",order:"顺序",buildin:"内置",role:"角色",belong:"从属于",administrator:"白名单",desc:"描述",version:"版本",status:"状态",approval:"审批",createdBy:"由谁创建",createdDate:"创建时间",editedBy:"由谁编辑",editedDate:"编辑时间",vision:"所属界面"},doc:{id:"ID",project:"所属项目",product:"所属产品",execution:"所属执行",lib:"所属库",template:"模板",templateType:"模板类型",templateDesc:"模板描述",objects:"所属对象",chapterType:"章节类型",cycle:"周期",cycleConfig:"周期设置",module:"所属父级",reportModule:"报表模块",title:"文档标题",keywords:"关键字",type:"文档类型",status:"文档状态",parent:"所属父级",path:"路径",grade:"层级",order:"排序",views:"浏览次数",assetLib:"资产库",assetLibType:"资产库类型",from:"来源文档",fromVersion:"来源版本",draft:"草稿",collects:"被收藏量",weeklyDate:"周报日期",addedBy:"创建者",addedDate:"创建日期",assignedTo:"指派给",assignedDate:"指派日期",approvedDate:"审批日期",editedBy:"修改者",editedDate:"修改日期",editingDate:"正在修改者和时间",editedList:"文档编辑者",mailto:"抄送给",acl:"权限",isDeliverable:"是否为交付物",groups:"分组",users:"用户",readGroups:"只读分组",readUsers:"只读用户",version:"版本号",builtIn:"内置",frozen:"冻结状态",vision:"所属界面",collector:"收藏者",releasedDate:"发布日期",releasedBy:"由谁发布",files:"附件",digest:"文档摘要",html:"文档正文(HTML格式)",content:"文档正文(Markdown格式)",rawContent:"原始内容(JSON格式)",contentType:"文档格式",contentVersion:"内容版本",moduleName:"模块名称",executionName:"执行名称",productName:"产品名称",privs:"权限",editors:"编辑者",readable:"可阅读",editable:"可编辑",deleted:"已删除"},todo:{id:"编号",account:"由谁创建",date:"日期",begin:"开始",end:"结束",feedback:"相关反馈",type:"类型",cycle:"周期",objectID:"关联编号",pri:"优先级",name:"待办名称",desc:"描述",status:"状态",private:"私人事务",config:"配置",assignedTo:"指派给",assignedBy:"由谁指派",assignedDate:"指派日期",finishedBy:"由谁完成",finishedDate:"完成时间",closedBy:"由谁关闭",closedDate:"关闭时间",vision:"所属界面",deleted:"已删除"},my:{name:"名称",code:"代号",pri:"优先级",hours:"工时/天",todo:"我的待办",calendar:"日程",work:"待处理",contribute:"贡献",task:"我的任务",bug:"我的Bug",story:"我的软件需求",epic:"我的业务需求",requirement:"我的用户需求",doc:"我的文档",project:"我的项目",execution:"我的执行",issue:"我的问题",risk:"我的风险",reviewissue:"我的评审问题",profile:"我的档案",dynamic:"我的动态",team:"团队",audit:"审批",score:"我的积分",preference:"个性化设置",projects:"所属项目",executions:"所属执行",assignedToMe:"指派给我",programLink:"项目集默认着陆页",productLink:"产品默认着陆页",projectLink:"项目默认着陆页",executionLink:"执行默认着陆页",docLink:"文档默认着陆页",devopsLink:"DevOps视图着陆页",devopsspaceLink:"DevOps空间着陆页",title:"评审标题",status:"状态",type:"评审对象",product:"所属产品",reviewer:"审批人",opinion:"审批意见",result:"评审结果",openedBy:"提交人",time:"提交时间",reviewTime:"评审时间"}};function c(D,B={}){let W=B.version===void 0?void 0:y(B.version),Q=l().get(D.toLowerCase());if(!W||!Q)return Q;let $=Q.actions.filter((X)=>$D(W,X.minVersion));return $.length?Object.freeze({...Q,actions:Object.freeze($)}):void 0}function b(D,B,W){let Q=c(D,W);if(!Q)return;let $=B==="ls"?"list":B;return Q.actions.find((X)=>String(X.name).toLowerCase()===$.toLowerCase())}function QD(D,B,W){let{roles:Q}=W??{},$=[],X=b(D,B,W);if(!X)return[];if(X.pathParams&&(!Q||Q.includes("path")))Object.entries(X.pathParams).forEach(([J,H])=>{if(typeof H==="string")H={description:H};$.push({name:J,role:"path",required:!0,...H})});if(X.params&&(!Q||Q.includes("query")))$.push(...X.params.map((J)=>({...J,role:"query"})));let Y=X.requestBody?.schema;if(Y&&(!Q||Q.includes("body")))if(Y.type==="object"){let J=new Set(Y.required?Y.required.map((H)=>H.toLowerCase()):[]);Object.entries(Y.properties).forEach(([H,L])=>{let C=L.type;$.push({...L,name:H,role:"body",required:L.required??J.has(H.toLowerCase()),type:C==="integer"?"number":C??"string"})})}else $.push({name:"data",role:"body",required:!0,type:Y.type});return $}function hD(D={}){let B=D.version===void 0?void 0:y(D.version);return DD().filter((W)=>!B||W.actions.some((Q)=>$D(B,Q.minVersion))).map((W)=>W.name)}function fD(D,B){return c(D,B)!==void 0}function bD(D){return qW[D]??{}}function JB(D){if(Array.isArray(D))return D.filter((B)=>typeof B!=="function").map((B)=>JB(B));if(D&&typeof D==="object"){let B={};for(let[W,Q]of Object.entries(D))if(typeof Q!=="function")B[W]=JB(Q);return B}return D}function kD(D={}){let B=D.raw??!1,W=D.jsonSafe??!0,Q={};return l().forEach(($)=>{let X=B?$:{...$,actions:$.actions.map((Y)=>{let{requestBody:J,...H}=Y;return{...H,...J?.mediaType?{bodyMediaType:J.mediaType}:{},bodyParams:J?QD($.name,Y.name,{roles:["body"]}):[]}})};Q[$.name]=W?JB(X):X}),Q}cB(YB);YB();var HB="2026-09-30T11:35:46.717Z",LB="0.7.1";var GB=globalThis;GB.ZentaoAPI=vD;if(GB.window)GB.window.ZentaoAPI=vD;})();
|
|
33
|
+
`:""}var g2=52428800,YW={".avif":"image/avif",".csv":"text/csv",".gif":"image/gif",".htm":"text/html",".html":"text/html",".jpeg":"image/jpeg",".jpg":"image/jpeg",".json":"application/json",".md":"text/markdown",".pdf":"application/pdf",".png":"image/png",".svg":"image/svg+xml",".txt":"text/plain",".webp":"image/webp",".zip":"application/zip"};function XW(D){return import(D)}function $B(D){return typeof Blob<"u"&&D instanceof Blob}function N2(D){return _(D)&&typeof D.path==="string"}function w2(D){return _(D)&&Object.prototype.hasOwnProperty.call(D,"data")&&typeof D.filename==="string"}function JW(D){let B=D.toLowerCase(),W=B.lastIndexOf(".");return W>=0?YW[B.slice(W)]??"application/octet-stream":"application/octet-stream"}function y2(D){let B=D.split(";",1)[0]?.trim().toLowerCase();return Object.entries(YW).find(([,Q])=>Q===B)?.[0]??".bin"}function x2(D){if(D===void 0)return g2;if(!Number.isFinite(D)||D<1)throw new G("E_INVALID_PARAM",{param:"maxUploadBytes",value:String(D)});return Math.floor(D)}function jD(D,B){if(D>B)throw new G("E_UPLOAD_FILE_TOO_LARGE",{size:D,limit:B})}function XB(D,B,W){let $=(D?.trim()||B.trim()).split(/[\\/]/).at(-1)?.trim()??"";if(!$)throw new G("E_INVALID_UPLOAD_SOURCE",{field:W});return $}function h2(D){return _(D)&&typeof D.code==="string"?D.code:void 0}function HW(D){let B=new Uint8Array(D.buffer,D.byteOffset,D.byteLength),W=new Uint8Array(B.byteLength);return W.set(B),W}function f2(D,B,W){if($B(D))return D.type===B?D:new Blob([D],{type:B});if(D instanceof ArrayBuffer)return new Blob([D],{type:B});if(ArrayBuffer.isView(D))return new Blob([HW(D)],{type:B});throw new G("E_INVALID_UPLOAD_SOURCE",{field:W})}async function b2(D,B,W){if(!u())throw new G("E_UPLOAD_PATH_UNSUPPORTED");let Q=typeof D==="string"?D:D.path,$=typeof D==="string"?void 0:D.filename,X=typeof D==="string"?void 0:D.contentType,[Y,J]=await Promise.all([XW("node:fs/promises"),XW("node:path")]),H;try{H=await Y.stat(Q)}catch(I){if(h2(I)==="ENOENT")throw new G("E_UPLOAD_FILE_NOT_FOUND",{path:Q},I);throw new G("E_UPLOAD_FILE_READ_FAILED",{path:Q},I)}if(!H.isFile())throw new G("E_INVALID_UPLOAD_SOURCE",{field:B},{path:Q});jD(H.size,W);let L=XB($,J.basename(Q),B),C=X?.trim()||JW(L),K=globalThis.Bun;if(K?.file){let I=K.file(Q);return jD(I.size,W),{blob:(Boolean(X?.trim())||!I.type)&&I.type!==C?new Blob([I],{type:C}):I,filename:L}}try{let I=await Y.readFile(Q);return jD(I.byteLength,W),{blob:new Blob([HW(I)],{type:C}),filename:L}}catch(I){throw new G("E_UPLOAD_FILE_READ_FAILED",{path:Q},I)}}async function k2(D,B,W){if(typeof D==="string"||N2(D))return b2(D,B,W);if($B(D)){jD(D.size,W);let Q=D.type||"application/octet-stream",$=typeof D.name==="string"?D.name:`${B}${y2(Q)}`,X=XB($,`${B}.bin`,B);return{blob:D.type===Q?D:new Blob([D],{type:Q}),filename:X}}if(w2(D)){let Q=XB(D.filename,B,B),$=D.contentType?.trim()||($B(D.data)?D.data.type:"")||JW(Q),X=f2(D.data,$,B);return jD(X.size,W),{blob:X,filename:Q}}throw new G("E_INVALID_UPLOAD_SOURCE",{field:B})}function v2(D){if(!_(D))return!1;if(D.format==="binary")return!0;return D.type==="array"&&_(D.items)&&D.items.format==="binary"}function LW(D,B,W){if(W===void 0)return;if(Array.isArray(W)){for(let Q of W)LW(D,B,Q);return}if(W===null){D.append(B,"");return}D.append(B,typeof W==="object"?JSON.stringify(W):String(W))}async function d2(D,B){let W=new FormData,Q=_(D.action.requestBody?.schema.properties)?D.action.requestBody.schema.properties:{};for(let[$,X]of Object.entries(D.data??{})){if(!v2(Q[$])){LW(W,$,X);continue}let Y=Array.isArray(X)?X:[X];if(Y.length===0)throw new G("E_INVALID_UPLOAD_SOURCE",{field:$});for(let J of Y){let H=await k2(J,$,B);W.append($,H.blob,H.filename)}}return W}async function GW(D,B={}){let W=D.action.requestBody?.mediaType??"application/json";if(W==="multipart/form-data")return{body:await d2(D,x2(B.maxUploadBytes)),bodyType:"raw"};if(W==="application/x-www-form-urlencoded")return{body:D.data,bodyType:"form"};return{body:D.data}}function m2(D){let B=D.split("/");if(B.length>2||!B[0])throw new G("E_INVALID_REQUEST_NAME");let[W,Q]=B;if(!Q?.length)return{moduleName:W,actionName:"list"};if(Number.isInteger(Number(Q)))return{moduleName:W,actionName:"get",id:Number(Q)};return{moduleName:W,actionName:Q}}function c2(D){let B=D;if(typeof B==="string")try{B=JSON.parse(B)}catch{return new Set}if(B&&typeof B==="object"&&!Array.isArray(B))return new Set(Object.keys(B));return new Set}async function u2(D,B,W,Q,$){let X=B.requestBody?.schema?.properties,Y=D.actions.find((C)=>C.type==="get"&&C.path===B.path);if(!X||!Y)return W;let J=(await CW(`${D.name}/${Y.name}`,W,{client:Q.client,timeout:Q.timeout,insecure:Q.insecure,throwOnFail:!0},$)).data;if(!_(J))return W;let H=c2(W.data),L={...W};for(let C of Object.keys(X))if(!(Object.prototype.hasOwnProperty.call(W,C)||H.has(C))&&Object.prototype.hasOwnProperty.call(J,C))L[C]=J[C];return L}function p2(D){if(typeof D==="string")return D;if(D===void 0)return;try{return JSON.stringify(D)}catch{return String(D)}}function i2(D){for(let B of["code","errorCode","errno"]){let W=D[B];if(typeof W==="string"||typeof W==="number")return W}return}function s2(D){return Boolean(D.convert||D.filter&&D.filter.length>0||D.search&&D.search.length>0||D.sort||D.limit||D.pick&&D.pick.length>0)}function n2(D,B){if(Array.isArray(D)){if(!s2(B))return D;if(D.every(_))return p(D,{convert:B.convert,filter:B.filter,search:B.search,searchFields:B.searchFields,sort:B.sort,limit:B.limit,pick:B.pick});let W=Number(B.limit);return Number.isFinite(W)&&W>=0?D.slice(0,Math.floor(W)):D}if(_(D)&&(B.convertSingle||B.pick&&B.pick.length>0))return p(D,{convert:B.convertSingle,pick:B.pick});return D}function l2(D,B,W){if(!B||typeof B!=="object"||Array.isArray(B))return{status:"success",data:B};let Q=B,$=Q.status==="fail"?"fail":"success",X=n2(ND(D.action,Q,D.params,W),W),Y=Q.message,J=iB(D.action,Q,D.params,W),H={status:$,message:p2(Y),data:X,pager:J?{total:Number(J.recTotal),page:Number(J.pageID),recPerPage:Number(J.recPerPage)}:void 0};if(Y!==void 0&&typeof Y!=="string")H.rawMessage=Y;let L=i2(Q);if(L!==void 0)H.apiCode=L;if($==="fail")H.raw=Q;return H}async function VD(D,B={},W={}){return CW(D,B,W)}async function CW(D,B,W,Q){let $=f(),X=W.client??$.client;if(!X)throw new G("E_NO_GLOBAL_CLIENT");let{moduleName:Y,actionName:J,id:H}=m2(D),L=c(Y);if(!L)throw new G("E_INVALID_MODULE",{module:Y});let C=B.recPerPage??W.recPerPage??$.recPerPage,K={...B,...H!==void 0?{id:H}:{},...C!==void 0?{recPerPage:C}:{}},I=b(Y,J);if(!I)throw new G("E_INVALID_ACTION",{module:Y,action:J});if(Q===void 0)if(!W.forceRefreshConfig&&$.version!==void 0)Q=$.version;else try{Q=(await X.getZentaoConfig({forceRefresh:W.forceRefreshConfig,timeout:W.timeout??$.timeout,insecure:W.insecure??$.insecure})).version}catch(v){if(!(W.skipVersionCheckOnConfigError??$.skipVersionCheckOnConfigError)||!AD(v))throw v;Q=null}if(Q!==null&&!$D(y(Q),I.minVersion))throw new G("E_UNSUPPORTED_ZENTAO_VERSION",{action:`${L.name}/${I.name}`,version:Q,minVersion:I.minVersion.join(", ")},{action:`${L.name}/${I.name}`,version:Q,minVersion:I.minVersion});let U=I.type==="update"&&(W.autoFill??$.autoFill)?await u2(L,I,K,{...W,client:X},Q):K,q=pB(L,J,U);if(q.action.beforeRequest)Object.assign(q,await q.action.beforeRequest(q));let j={...await GW(q,{maxUploadBytes:W.maxUploadBytes}),timeout:W.timeout??$.timeout,insecure:W.insecure??$.insecure},O=q.action.request?await q.action.request({request:q,...j,client:X,options:W}):await X.request(q.path,{method:String(q.action.method).toUpperCase(),query:q.query,...j});if(W.raw)return O;let M={...W,limit:W.limit??$.limit},S=l2(q,O,M);if(S.status==="fail"&&(W.throwOnFail??$.throwOnFail))throw new G("E_API_FAILED",{message:S.message??""},S);return S}var h=async({request:D,body:B,bodyType:W,client:Q,timeout:$,insecure:X})=>{let Y=await Q.request(D.path,{method:D.action.method.toUpperCase(),query:D.query,body:B,bodyType:W,timeout:$,insecure:X,responseType:"response"}),J=await Y.text();try{return JSON.parse(J)}catch{return{status:"fail",message:`Invalid JSON response from ${D.module}/${D.action.name}.`,httpStatus:Y.status,responseText:J}}};function YB(){t({name:"db",display:"数据库",actions:[{name:"query",minVersion:["22.7","biz13.7","max8.7","ipd5.7"],display:"执行 SQL 查询",description:"返回查询结果行及分页;使用 raw: true 可获取原始响应中的 SQL、列信息和执行耗时。",type:"list",method:"post",path:"/db/query",resultType:"list",resultGetter:"rows",pagerGetter:{pageID:"page",recPerPage:"limit",recTotal:"total"},request:h,requestBody:{required:!0,schema:{type:"object",required:["sql"],properties:{sql:{type:"string",description:"SQL 查询语句"},page:{type:"integer",description:"页码,默认 1"},limit:{type:"integer",description:"每页记录数,默认 100"}}},example:{sql:"select * from zt_config",page:4,limit:3}}},{name:"tables",minVersion:["22.7","biz13.7","max8.7","ipd5.7"],display:"获取数据库表列表",type:"list",method:"get",path:"/db/tables",resultType:"list",resultGetter:"tables",request:h},{name:"table",minVersion:["22.7","biz13.7","max8.7","ipd5.7"],display:"获取数据库表结构",description:"meta 返回表信息、主键和列定义;sql 返回包含表信息、dialect 和建表 SQL 的对象。",type:"get",method:"get",path:"/db/tables/{table}",pathParams:{table:"数据库表名,例如 zt_config"},params:[{name:"type",type:"string",description:"表结构返回格式",defaultValue:"meta",options:[{value:"meta",label:"元数据"},{value:"sql",label:"建表 SQL"}]}],resultType:"object",resultGetter:(Q)=>_(Q)?Q.table??Q:Q,request:h}]});let D=["biz13.7","max8.7","ipd5.7"],B={type:"string",description:"知识类型,省略或空字符串表示不限;text/file 不可与非空 objectType 同时使用。",options:[{value:"object",label:"对象知识"},{value:"text",label:"文本知识"},{value:"file",label:"文件知识"}]},W={type:"string",description:"来源对象类型;单独指定时按 type=object 筛选,每次只接受一个编码。",options:[{value:"story",label:"需求"},{value:"task",label:"任务"},{value:"case",label:"测试用例"},{value:"bug",label:"Bug"},{value:"plan",label:"产品计划"},{value:"release",label:"发布"},{value:"feedback",label:"反馈"},{value:"ticket",label:"工单"},{value:"doc",label:"文档(含接口文档)"},{value:"issue",label:"问题"},{value:"risk",label:"风险"},{value:"opportunity",label:"机会"},{value:"practice",label:"最佳实践"},{value:"component",label:"组件"}]};t([{name:"knowledgelib",display:"知识库",description:"需部署商业知识库扩展,仅返回已发布且当前用户可访问的知识库。",actions:[]},{name:"knowledge",display:"知识",description:"需部署商业知识库扩展,支持浏览知识、向量搜索、标题或正文关键词搜索和读取已保存正文。",actions:[]}]),m("knowledgelib",{name:"list",minVersion:D,display:"获取知识库列表",type:"list",method:"get",path:"/ai/knowledgelibs",resultType:"list",resultGetter:"data",pagerGetter:"pager",request:h,params:[{name:"type",type:"string",description:"库类型,省略或空字符串时合并两类可见库",options:[{value:"my",label:"我的知识库"},{value:"team",label:"组织知识库"}]},{name:"keyword",type:"string",description:"知识库名称或描述关键词,首尾空白会被移除"},{name:"pageID",type:"number",defaultValue:1,description:"页码,从 1 开始的正整数"},{name:"recPerPage",type:"number",defaultValue:20,description:"每页条数,范围 1~100"}]}),m("knowledge",[{name:"list",minVersion:D,display:"获取知识库内知识列表",description:"返回当前用户可见的知识条目,按本地 ID 降序排列;不支持标题关键词查询。",type:"list",method:"get",path:"/ai/knowledgelibs/{libID}/knowledges",pathParams:{libID:"本地知识库 ID,正整数"},resultType:"list",resultGetter:"data",pagerGetter:"pager",request:h,params:[{name:"type",...B},{name:"objectType",...W},{name:"pageID",type:"number",defaultValue:1,description:"页码,从 1 开始的正整数"},{name:"recPerPage",type:"number",defaultValue:20,description:"每页条数,范围 1~100"}]},{name:"embeddingsSearch",minVersion:D,display:"多知识库向量搜索",description:"仅检索已有索引,需 ai.searchknowledgelib 权限。按匹配度降序返回片段,不分页;用 knowledgeID 获取完整正文,chunkID 仅标识片段。",type:"list",method:"post",path:"/ai/knowledges/embeddingssearch",resultType:"list",resultGetter:"data",request:h,requestBody:{required:!0,mediaType:"application/json",schema:{type:"object",required:["keyword","libIDs"],example:{keyword:"如何处理接口请求超时",libIDs:[12,18],minSimilarity:0.7,limit:5},properties:{keyword:{type:"string",minLength:1,description:"搜索问题或关键词,去除首尾空白后不能为空"},libIDs:{type:"array",minItems:1,items:{type:"integer",minimum:1},description:"本地知识库 ID 的非空正整数数组,例如 [12,18];不接受字符串元素,重复 ID 自动去重"},type:B,objectType:W,minSimilarity:{type:"number",minimum:0,maximum:1,defaultValue:0.5,description:"最小匹配度,范围 [0,1]"},limit:{type:"integer",minimum:1,maximum:100,defaultValue:5,description:"整次多库搜索最多返回的片段数,范围 1~100"}}}}},{name:"search",minVersion:D,display:"多知识库关键词搜索",description:"需 ai.searchknowledgelib 权限,按字面文本匹配 title 或已保存的 content,不依赖向量索引。标题与正文分别匹配,单个关键词不能跨字段拼接。返回完整正文及 contentType,正文为空或 null 时返回空字符串;每条知识只返回一次,按知识 ID 降序分页。",type:"list",method:"post",path:"/ai/knowledges/search",resultType:"list",resultGetter:"data",pagerGetter:"pager",request:h,requestBody:{required:!0,mediaType:"application/json",schema:{type:"object",required:["keywords","libIDs"],example:{keywords:["登录","超时"],libIDs:[12,18],matchMode:"any",pageID:1,recPerPage:20},properties:{keywords:{type:"array",minItems:1,items:{type:"string",minLength:1},description:"非空关键词数组,每项去除首尾空白后为 1~200 个 Unicode 字符,去重后最多 20 项;%、_ 和反斜杠按普通字符匹配"},libIDs:{type:"array",minItems:1,items:{type:"integer",minimum:1},description:"本地知识库 ID 的非空正整数数组,例如 [12,18];不接受字符串元素,重复 ID 自动去重"},matchMode:{type:"string",defaultValue:"any",description:"any 表示任一关键词出现在标题或正文中;all 表示同一条知识的每个关键词均出现在标题或正文之一,可分别命中两个字段。仅省略时使用 any,空字符串和 null 无效",options:[{value:"any",label:"任一关键词匹配标题或正文"},{value:"all",label:"全部关键词匹配同一条知识"}]},type:B,objectType:W,pageID:{type:"integer",minimum:1,defaultValue:1,description:"页码,从 1 开始的正整数"},recPerPage:{type:"integer",minimum:1,maximum:100,defaultValue:20,description:"每页条数,范围 1~100"}}}}},{name:"get",minVersion:D,display:"获取知识详细内容",description:"返回已保存的完整正文及来源信息,不触发文件提取、知识同步或索引更新。按 contentType 解释正文,尚未保存正文时 content 可为空。",type:"get",method:"get",path:"/ai/knowledges/{knowledgeID}",pathParams:{knowledgeID:"本地知识条目 ID,正整数;不可使用 chunkID 或来源对象 objectID"},resultType:"object",resultGetter:"data",request:h}]);for(let[Q,$]of[["product","create"],["product","update"],["feedback","close"]])P(Q,$,{request:h});for(let Q of["create","update"])P("product",Q,($)=>{let X=$.requestBody.schema.properties;return X.desc.type="string",delete X.desc.items,$});P("execution","create",(Q)=>{let $=Q.requestBody.schema?.required;if(Array.isArray($)&&!$.includes("products"))$.push("products");return Q}),P("story","update",(Q)=>{let $=Q.requestBody.schema?.properties;if($&&!$.plan)$.plan={type:"integer",description:"所属计划",format:"int32"};if($&&$.category)$.category={type:"string",description:"类别"};return Q}),["story","requirement","epic"].forEach((Q)=>{["create","change"].forEach(($)=>{P(Q,$,(X)=>{let Y=X.requestBody.schema;if(Y.properties.reviewer??={type:"array",items:{type:"string"}},Y.properties.reviewer.description="评审人员,如果无需评审则不传",Y.required)Y.required=Y.required.filter((J)=>J!=="reviewer");return X.beforeRequest=async({data:J={}})=>{if(Array.isArray(J.reviewer)&&J.reviewer.some((L)=>typeof L==="string"&&L.trim()!==""))J.status="reviewing";else J.needNotReview="1";return{data:J}},X})})}),P("feedback","close",{beforeRequest:async(Q)=>{let $={...Q.data},X={...Q.query};if(Object.hasOwn($,"confirmClose"))X.confirmClose=$.confirmClose,delete $.confirmClose;return{data:$,query:X}}}),P("bug","confirm",{request:async({request:Q,body:$,bodyType:X,client:Y,timeout:J,insecure:H,options:L})=>{let C={...$},I=["status","assignedTo","type","pri","deadline","mailto"].filter((U)=>C[U]===void 0);if(I.length){let q=(await VD("bug/get",{id:Q.id},{client:Y,timeout:J,insecure:H,throwOnFail:!0,forceRefreshConfig:L.forceRefreshConfig,skipVersionCheckOnConfigError:L.skipVersionCheckOnConfigError})).data;if(!_(q)||I.some((V)=>q[V]===void 0))throw new G("E_API_FAILED",{message:"Bug details are incomplete; confirmation was not sent."});for(let V of I)C[V]=V==="mailto"&&typeof q[V]==="string"?q[V].split(",").filter(Boolean):q[V]}if(typeof C.status!=="string"||!C.status.trim())throw new G("E_INVALID_PARAM",{param:"status",value:String(C.status)});if(C.assignedTo==="closed")throw new G("E_INVALID_PARAM",{param:"assignedTo",value:"closed"});return h({request:Q,body:C,bodyType:X,client:Y,timeout:J,insecure:H,options:L})}}),[["product","create"],["product","update"],["execution","create"],["execution","update"]].forEach(([Q,$])=>{P(Q,$,(X)=>{let Y=X.requestBody.schema?.properties;if(Y.acl&&Y.acl.defaultValue===void 0)Y.acl.defaultValue="open";return X})}),P("execution","create",(Q)=>{let $=Q.requestBody.schema?.properties;if($){if(!$.milestone)$.milestone={type:"integer",description:"是否里程碑(0 否| 1 是)",format:"int32"}}return Q}),["create","update"].forEach((Q)=>{P("task",Q,($)=>{let X=$.requestBody?.schema?.properties;if(X&&!X.parent)X.parent={type:"integer",description:"父任务",format:"int32"};return $})}),P("file","create",(Q)=>{if(Q.requestBody){Q.requestBody.mediaType="multipart/form-data";let $=Q.requestBody.schema?.properties;if($?.file)$.file.format="binary"}return Q}),P("doc","get",(Q)=>{let $=Q.resultGetter;return Q.resultGetter=(X,Y,J={})=>{let H=$?ND({...Q,resultGetter:$},X,Y,J):X.doc??X;if(!_(H))return H;let L=J.pick,C=!L?.length,K=C||L.includes("content"),I=C||L.includes("rawContent");if(!K&&!I)return H;let U=H.content;try{if(I&&(H.rawContent===void 0||H.rawContent===""))H.rawContent=U;if(K&&H.contentType==="doc"){let q=$W(U);H.content=q}}catch{}return H},Q}),m("story",{name:"getGrades",minVersion:["22.5","biz13.5","max8.5","ipd5.5"],display:"获取需求层级选项",type:"list",method:"get",path:"/storygrades",resultType:"list",resultGetter:"grades"}),P("story","create",(Q)=>{let $=Q.requestBody.schema?.properties;if($&&!$.grade)$.grade={type:"integer",description:"需求层级,可用的需求层级可以通过 story-getGrades 操作获取"};return Q}),["create","update"].forEach((Q)=>{P("task",Q,($)=>{let X=$.requestBody.schema?.properties;if(X&&!X.type)X.type={type:"string",description:"任务类型(枚举:design 设计 | devel 开发 | request 需求 | test 测试 | study 研究 | discuss 讨论 | ui 界面 | affair 事务 | misc 其他)"};return $})})}var qW={user:{id:"用户编号",company:"所属公司",type:"用户类型",dept:"部门",account:"用户名",password:"密码",role:"职位",realname:"姓名",superior:"直属上级",pinyin:"姓名拼音",nickname:"昵称",commiter:"源代码帐号",avatar:"用户头像",birthday:"生日",gender:"性别",email:"邮箱",skype:"Skype",qq:"QQ",mobile:"手机",phone:"电话",weixin:"微信",dingding:"钉钉",slack:"Slack",whatsapp:"WhatsApp",address:"通讯地址",zipcode:"邮编",nature:"性格特征",analysis:"影响分析",strategy:"应对策略",join:"入职日期",visits:"访问次数",visions:"界面类型",ip:"最后IP",last:"最后登录",fails:"失败次数",locked:"锁住日期",feedback:"是否反馈用户",ranzhi:"ZDOO帐号",ldap:"LDAP账号",score:"积分",scoreLevel:"积分等级",resetToken:"重置密码令牌",resetExpired:"重置令牌过期时间",clientStatus:"登录状态",clientLang:"客户端语言",jira:"是否Jira导入用户",deleted:"(已删除)"},program:{id:"编号",project:"项目",isTpl:"是否模板",charter:"所属立项",model:"项目管理方式",type:"类型",category:"项目集类型",lifetime:"项目周期",budget:"预算",budgetUnit:"预算单位",attribute:"阶段类型",percent:"工作量占比",milestone:"里程碑",output:"输出",auth:"权限控制",storyType:"关联需求概念",parent:"父项目集",path:"路径",grade:"层级",name:"项目集名称",code:"项目代号",hasProduct:"是否关联产品",workflowGroup:"项目流程",begin:"计划开始",end:"计划完成",firstEnd:"启动时的计划完成日期",realBegan:"实际开始",realEnd:"实际完成",days:"可用工作日",schedule:"日程安排",status:"状态",subStatus:"子状态",pri:"优先级",desc:"项目集描述",version:"版本",parentVersion:"父版本",planDuration:"计划周期天数",realDuration:"实际周期天数",progress:"项目进度",estimate:"预计",left:"剩余工时",consumed:"消耗工时",teamCount:"总人数",market:"目标市场",openedBy:"创建者",openedDate:"创建时间",openedVersion:"创建版本",lastEditedBy:"最后编辑人",lastEditedDate:"最后编辑日期",closedBy:"由谁关闭",closedDate:"关闭日期",closedReason:"关闭原因",canceledBy:"由谁取消",canceledDate:"取消日期",suspendedDate:"暂停日期",PO:"项目负责人",PM:"负责人",QD:"测试负责人",RD:"发布负责人",team:"团队",acl:"访问控制",whitelist:"白名单",tplAcl:"模板访问控制",tplWhiteList:"模板白名单",order:"排序",stageBy:"阶段类型",displayCards:"每列最大卡片数",fluidBoard:"列宽度",multiple:"启用迭代",parallel:"是否允许并行",enabled:"是否启用阶段",linkType:"关联类型",taskDateLimit:"任务时间限制",colWidth:"列宽",minColWidth:"最小列宽",maxColWidth:"最大列宽",coverExecutionPriv:"执行权限控制",vision:"界面",frozen:"冻结状态",deleted:"已删除"},product:{id:"编号",program:"所属项目集",name:"产品名称",code:"产品代号",shadow:"是否影子产品",bind:"是否独立产品",line:"产品线",type:"产品类型",status:"状态",subStatus:"子状态",desc:"产品描述",PO:"产品负责人",QD:"测试负责人",RD:"发布负责人",feedback:"反馈负责人",ticket:"工单负责人",workflowGroup:"产品流程",acl:"访问控制",groups:"权限组",whitelist:"白名单",reviewer:"评审人",PMT:"规划负责人",draftEpics:"草稿业务需求",activeEpics:"激活业务需求",changingEpics:"变更中业务需求",reviewingEpics:"评审中业务需求",finishedEpics:"已完成业务需求",closedEpics:"已关闭业务需求",totalEpics:"业务需求数",draftRequirements:"草稿用户需求",activeRequirements:"激活用户需求",changingRequirements:"变更中用户需求",reviewingRequirements:"评审中用户需求",finishedRequirements:"已完成用户需求",closedRequirements:"已关闭用户需求",totalRequirements:"用户需求数",draftStories:"草稿软件需求",activeStories:"激活软件需求",changingStories:"变更中软件需求",reviewingStories:"评审中软件需求",finishedStories:"已完成软件需求",closedStories:"已关闭软件需求",totalStories:"软件需求数",unresolvedBugs:"未解决Bug",closedBugs:"关闭Bug",fixedBugs:"已修复Bug",totalBugs:"Bug总数",plans:"计划数",releases:"发布数",createdBy:"由谁创建",createdDate:"创建日期",createdVersion:"创建版本",closedDate:"关闭日期",order:"排序",vision:"所属界面",lineName:"产品线名称",programName:"项目集名称",programPM:"项目集负责人",finishClosedStories:"已关闭完成需求",launchedStories:"已立项需求",developingStories:"研发中需求",projects:"关联项目数",executions:"关联执行数",coverage:"覆盖率",latestRelease:"最新发布",latestReleaseDate:"最新发布时间",productLine:"产品线",testCaseCoverage:"用例覆盖率",epicCompleteRate:"史诗完成率",requirementCompleteRate:"用户需求完成率",storyCompleteRate:"用户故事完成率",bugFixedRate:"修复率",deleted:"已删除"},project:{id:"项目ID",project:"所属项目",isTpl:"是否模板",charter:"所属立项",model:"项目管理方式",type:"项目类型",category:"项目类型",lifetime:"项目周期",budget:"预算",budgetUnit:"(单位:)",attribute:"阶段类型",percent:"工作量占比",milestone:"里程碑",output:"输出",auth:"权限控制",storyType:"关联需求概念",parent:"所属项目集",path:"路径",grade:"层级",name:"项目名称",code:"项目代号",hasProduct:"是否关联产品",workflowGroup:"项目流程",begin:"计划开始",end:"计划完成",firstEnd:"启动时的计划完成日期",realBegan:"实际开始日期",realEnd:"实际完成日期",days:"可用工作日",schedule:"日程安排",status:"状态",subStatus:"子状态",pri:"优先级",desc:"项目描述",version:"版本",parentVersion:"父版本",planDuration:"计划周期天数",realDuration:"实际周期天数",progress:"进度",estimate:"预计",left:"剩余工时",consumed:"消耗工时",teamCount:"人数",market:"目标市场",openedBy:"由谁创建",openedDate:"创建日期",openedVersion:"创建版本",lastEditedBy:"最后编辑人",lastEditedDate:"最后编辑日期",closedBy:"由谁关闭",closedDate:"关闭日期",closedReason:"关闭原因",canceledBy:"由谁取消",canceledDate:"取消日期",suspendedDate:"暂停日期",PO:"项目负责人",PM:"负责人",QD:"测试负责人",RD:"发布负责人",team:"团队",acl:"访问控制",whitelist:"项目白名单",tplAcl:"模板访问控制",tplWhiteList:"模板白名单",order:"排序",stageBy:"阶段类型",displayCards:"每列最大卡片数",fluidBoard:"列宽度",multiple:"启用迭代",parallel:"是否允许并行",enabled:"是否启用阶段",linkType:"关联类型",taskDateLimit:"任务时间限制",colWidth:"列宽",minColWidth:"最小列宽",maxColWidth:"最大列宽",coverExecutionPriv:"执行权限控制",vision:"界面",frozen:"冻结状态",teamMembers:"团队成员",leftTasks:"剩余任务",statusTitle:"状态标题",consume:"消耗",surplus:"剩余",invested:"已投入",PMAvatar:"负责人头像",PMUserID:"负责人用户ID",storyCount:"需求条目数",storyPoints:"需求规模",executionCount:"执行数",from:"来源",actions:"操作",deliverable:"交付物",deleted:"已删除"},execution:{id:"迭代编号",project:"所属项目",isTpl:"是否模板",charter:"所属立项",model:"项目管理方式",type:"迭代类型",category:"项目类型",lifetime:"项目周期",budget:"预算",budgetUnit:"(单位:)",attribute:"阶段类型",percent:"工作量占比",milestone:"里程碑",output:"输出",auth:"权限控制",storyType:"关联需求概念",parent:"所属项目",path:"路径",grade:"层级",name:"迭代名称",code:"迭代代号",hasProduct:"是否关联产品",workflowGroup:"项目流程",begin:"计划开始",end:"计划完成",firstEnd:"启动时的计划完成日期",realBegan:"实际开始日期",realEnd:"实际完成日期",days:"可用工作日",schedule:"日程安排",status:"迭代状态",subStatus:"子状态",pri:"优先级",desc:"迭代描述",version:"版本",parentVersion:"父版本",planDuration:"计划周期天数",realDuration:"实际周期天数",progress:"进度",estimate:"预计",left:"剩余",consumed:"消耗",teamCount:"人数",market:"目标市场",openedBy:"由谁创建",openedDate:"创建日期",openedVersion:"创建版本",lastEditedBy:"最后编辑人",lastEditedDate:"最后编辑日期",closedBy:"由谁关闭",closedDate:"关闭日期",closedReason:"关闭原因",canceledBy:"由谁取消",canceledDate:"取消日期",suspendedDate:"暂停日期",PO:"产品负责人",PM:"迭代负责人",QD:"测试负责人",RD:"发布负责人",team:"团队成员",acl:"访问控制",whitelist:"白名单",tplAcl:"模板访问控制",tplWhiteList:"模板白名单",order:"迭代排序",stageBy:"阶段类型",displayCards:"每列最大卡片数",fluidBoard:"列宽度",multiple:"启用迭代",parallel:"是否允许并行",enabled:"是否启用阶段",linkType:"关联类型",taskDateLimit:"任务时间限制",colWidth:"列宽",minColWidth:"最小列宽",maxColWidth:"最大列宽",coverExecutionPriv:"执行权限控制",vision:"界面",frozen:"冻结状态",projectName:"所属项目",projectModel:"项目管理方式",productName:"产品名称",product:"相关产品",productID:"产品ID",delay:"延期",totalEstimate:"预计",totalConsumed:"消耗",totalLeft:"剩余",burns:"燃尽图",deleted:"已删除"},productplan:{id:"编号",product:"所属产品",branch:"平台/分支",parent:"父计划",title:"计划名称",status:"状态",desc:"描述",begin:"开始日期",end:"结束日期",finishedDate:"完成时间",closedDate:"关闭时间",order:"排序",closedReason:"关闭原因",createdBy:"由谁创建",createdDate:"创建时间",deleted:"已删除"},story:{id:"编号",parent:"父需求",isParent:"是父需求",root:"顶级需求ID",path:"路径",grade:"需求层级",product:"所属产品",branch:"平台/分支",module:"所属模块",plan:"所属计划",source:"来源",sourceNote:"来源备注",fromBug:"来源Bug",feedback:"相关反馈",title:"软件需求名称",keywords:"关键词",type:"需求类型",category:"类别",pri:"优先级",estimate:"预计工时",status:"当前状态",subStatus:"子状态",color:"标题颜色",stage:"所处阶段",stagedBy:"设置阶段者",mailto:"抄送给",lib:"所属需求库",fromStory:"来源需求",fromVersion:"来源版本",openedBy:"由谁创建",openedDate:"创建日期",assignedTo:"指派给",assignedDate:"指派日期",approvedDate:"评审日期",lastEditedBy:"最后修改",lastEditedDate:"最后修改日期",changedBy:"由谁变更",changedDate:"变更时间",reviewedBy:"已评审人",reviewedDate:"评审时间",releasedDate:"发布日期",closedBy:"由谁关闭",closedDate:"关闭日期",closedReason:"关闭原因",activatedDate:"激活日期",toBug:"转Bug",linkStories:"相关需求",linkRequirements:"相关用户需求",docs:"关联文档",twins:"孪生需求",duplicateStory:"重复需求",version:"版本号",parentVersion:"父需求版本",demandVersion:"需求池需求版本",storyChanged:"需求已变更",feedbackBy:"反馈者",notifyEmail:"通知邮箱",BSA:"BSA等级",duration:"管理周期",demand:"需求池需求",submitedBy:"提交评审人",roadmap:"所属路标",URChanged:"用需变更",unlinkReason:"移除原因",retractedReason:"撤销原因",retractedBy:"由谁撤回",retractedDate:"撤回日期",verifiedDate:"验收时间",vision:"所属界面",frozen:"冻结状态",deleted:"已删除"},epic:{id:"编号",parent:"父需求",isParent:"是父需求",root:"顶级需求ID",path:"路径",grade:"需求层级",product:"所属产品",branch:"平台/分支",module:"所属模块",plan:"所属计划",source:"来源",sourceNote:"来源备注",fromBug:"来源Bug",feedback:"相关反馈",title:"业务需求名称",keywords:"关键词",type:"需求类型",category:"类别",pri:"优先级",estimate:"预计工时",status:"当前状态",subStatus:"子状态",color:"标题颜色",stage:"所处阶段",stagedBy:"设置阶段者",mailto:"抄送给",lib:"所属需求库",fromStory:"来源需求",fromVersion:"来源版本",openedBy:"由谁创建",openedDate:"创建日期",assignedTo:"指派给",assignedDate:"指派日期",approvedDate:"评审日期",lastEditedBy:"最后修改",lastEditedDate:"最后修改日期",changedBy:"由谁变更",changedDate:"变更时间",reviewedBy:"已评审人",reviewedDate:"评审时间",releasedDate:"发布日期",closedBy:"由谁关闭",closedDate:"关闭日期",closedReason:"关闭原因",activatedDate:"激活日期",toBug:"转Bug",linkStories:"相关需求",linkRequirements:"相关用户需求",docs:"关联文档",twins:"孪生需求",duplicateStory:"重复需求",version:"版本号",parentVersion:"父需求版本",demandVersion:"需求池需求版本",storyChanged:"需求已变更",feedbackBy:"反馈者",notifyEmail:"通知邮箱",BSA:"BSA等级",duration:"管理周期",demand:"需求池需求",submitedBy:"提交评审人",roadmap:"所属路标",URChanged:"用需变更",unlinkReason:"移除原因",retractedReason:"撤销原因",retractedBy:"由谁撤回",retractedDate:"撤回日期",verifiedDate:"验收时间",vision:"所属界面",frozen:"冻结状态",deleted:"已删除"},requirement:{id:"编号",parent:"父需求",isParent:"是父需求",root:"顶级需求ID",path:"路径",grade:"需求层级",product:"所属产品",branch:"平台/分支",module:"所属模块",plan:"所属计划",source:"来源",sourceNote:"来源备注",fromBug:"来源Bug",feedback:"相关反馈",title:"用户需求名称",keywords:"关键词",type:"需求类型",category:"类别",pri:"优先级",estimate:"预计工时",status:"当前状态",subStatus:"子状态",color:"标题颜色",stage:"所处阶段",stagedBy:"设置阶段者",mailto:"抄送给",lib:"所属需求库",fromStory:"来源需求",fromVersion:"来源版本",openedBy:"由谁创建",openedDate:"创建日期",assignedTo:"指派给",assignedDate:"指派日期",approvedDate:"评审日期",lastEditedBy:"最后修改",lastEditedDate:"最后修改日期",changedBy:"由谁变更",changedDate:"变更时间",reviewedBy:"已评审人",reviewedDate:"评审时间",releasedDate:"发布日期",closedBy:"由谁关闭",closedDate:"关闭日期",closedReason:"关闭原因",activatedDate:"激活日期",toBug:"转Bug",linkStories:"相关需求",linkRequirements:"相关用户需求",docs:"关联文档",twins:"孪生需求",duplicateStory:"重复需求",version:"版本号",parentVersion:"父需求版本",demandVersion:"需求池需求版本",storyChanged:"需求已变更",feedbackBy:"反馈者",notifyEmail:"通知邮箱",BSA:"BSA等级",duration:"管理周期",demand:"需求池需求",submitedBy:"提交评审人",roadmap:"所属路标",URChanged:"用需变更",unlinkReason:"移除原因",retractedReason:"撤销原因",retractedBy:"由谁撤回",retractedDate:"撤回日期",verifiedDate:"验收时间",vision:"所属界面",frozen:"冻结状态",deleted:"已删除"},bug:{id:"Bug编号",project:"所属项目",product:"所属产品",injection:"注入环节",identify:"发现环节",branch:"平台/分支",module:"所属模块",execution:"所属执行",plan:"所属计划",story:"相关需求",storyVersion:"软件需求版本",task:"相关任务",toTask:"转任务",toStory:"转软件需求",title:"Bug标题",keywords:"关键词",severity:"严重程度",pri:"优先级",type:"Bug类型",os:"操作系统",browser:"浏览器",hardware:"硬件",found:"发现环境",steps:"重现步骤",status:"Bug状态",subStatus:"子状态",color:"标题颜色",confirmed:"是否确认",activatedCount:"激活次数",activatedDate:"激活时间",feedbackBy:"反馈者",notifyEmail:"通知邮箱",mailto:"抄送给",openedBy:"由谁创建",openedDate:"创建日期",openedBuild:"影响版本",assignedTo:"指派给",assignedDate:"指派日期",deadline:"截止日期",resolvedBy:"解决者",resolution:"解决方案",resolvedBuild:"解决版本",resolvedDate:"解决日期",closedBy:"由谁关闭",closedDate:"关闭日期",duplicateBug:"重复Bug",relatedBug:"相关Bug",case:"来源用例",caseVersion:"用例版本",feedback:"相关反馈",result:"结果",repo:"所属版本库",mr:"合并请求",entry:"代码路径",lines:"代码行",v1:"版本1",v2:"版本2",repoType:"版本库类型",issueKey:"Sonarqube问题键值",testtask:"测试单",lastEditedBy:"最后修改者",lastEditedDate:"修改日期",deleted:"已删除"},testcase:{id:"用例编号",project:"所属项目",product:"所属产品",execution:"所属迭代",branch:"平台/分支",lib:"所属库",module:"所属模块",path:"路径",story:"相关软件需求",storyVersion:"软件需求版本",title:"用例名称",precondition:"前置条件",keywords:"关键词",pri:"优先级",type:"用例类型",auto:"自动化测试用例",frame:"自动化测试框架",stage:"适用环节",howRun:"测试方式",script:"自动化脚本",scriptedBy:"脚本由谁创建",scriptedDate:"脚本创建日期",scriptStatus:"脚本状态",scriptLocation:"脚本地址",status:"用例状态",subStatus:"子状态",color:"标题颜色",frequency:"使用频率",order:"排序",openedBy:"由谁创建",openedDate:"创建日期",reviewedBy:"由谁评审",reviewedDate:"评审时间",lastEditedBy:"最后修改者",lastEditedDate:"修改日期",version:"用例版本",linkCase:"相关用例",fromBug:"来源Bug",fromCaseID:"用例来源ID",fromCaseVersion:"用例来源版本",lastRunner:"执行人",lastRunDate:"执行时间",lastRunResult:"结果",scene:"所属场景",sort:"排序",deleted:"已删除"},task:{id:"编号",project:"所属项目",parent:"父任务",isParent:"是父任务",isTpl:"是模板",path:"路径",execution:"所属执行",module:"所属模块",design:"相关设计",story:"相关软件需求",storyVersion:"软件需求版本",designVersion:"设计版本",fromBug:"来源Bug",feedback:"相关反馈",fromIssue:"来源问题",docs:"关联文档",docVersions:"文档版本",name:"任务名称",type:"任务类型",mode:"任务模式",pri:"优先级",estimate:"最初预计",consumed:"总计消耗",left:"预计剩余",deadline:"截止日期",status:"任务状态",subStatus:"子状态",color:"标题颜色",mailto:"抄送给",keywords:"关键词",desc:"任务描述",version:"版本",openedBy:"由谁创建",openedDate:"创建日期",assignedTo:"指派给",assignedDate:"指派日期",estStarted:"预计开始",realStarted:"实际开始",finishedBy:"由谁完成",finishedDate:"实际完成",finishedList:"完成者列表",canceledBy:"由谁取消",canceledDate:"取消时间",closedBy:"由谁关闭",closedDate:"关闭时间",planDuration:"计划持续天数",realDuration:"实际持续天数",closedReason:"关闭原因",lastEditedBy:"最后修改",lastEditedDate:"最后修改日期",activatedDate:"激活日期",order:"排序",repo:"所属代码库",mr:"合并请求",entry:"代码路径",lines:"代码行",v1:"版本1",v2:"版本2",vision:"所属界面",deleted:"已删除"},issue:{id:"编号",resolvedBy:"解决者",project:"所属项目",execution:"所属执行",title:"问题名称",desc:"描述",pri:"优先级",severity:"严重程度",type:"类型",activity:"活动列表",deadline:"计划解决日期",resolution:"解决方式",resolutionComment:"解决方案",objectID:"关联对象",resolvedDate:"实际解决日期",status:"结果",owner:"提出人",lib:"问题库",from:"来源",version:"版本号",createdBy:"由谁创建",createdDate:"创建日期",editedBy:"由谁编辑",editedDate:"编辑日期",activateBy:"由谁激活",activateDate:"激活日期",closedBy:"由谁关闭",closedDate:"关闭日期",assignedTo:"指派给",assignedBy:"由谁指派",assignedDate:"指派时间",approvedDate:"审批日期",relatedObject:"关联对象",risk:"关联风险",files:"附件",sourceName:"来源名称",deleted:"已删除"},risk:{id:"ID",project:"所属项目",execution:"所属执行",name:"风险名称",source:"来源",category:"类型",strategy:"策略",status:"状态",impact:"影响程度",probability:"发生概率",rate:"风险系数",pri:"优先级",identifiedDate:"识别日期",prevention:"应对措施",remedy:"响应措施",plannedClosedDate:"计划关闭日期",actualClosedDate:"实际关闭日期",lib:"风险库",from:"来源",version:"版本号",createdBy:"由谁创建",createdDate:"创建日期",editedBy:"由谁编辑",editedDate:"编辑日期",resolution:"解决措施",resolvedBy:"解决者",activateBy:"由谁激活",activateDate:"激活日期",assignedTo:"指派给",assignedDate:"指派日期",closedBy:"由谁关闭",closedDate:"关闭日期",cancelBy:"由谁取消",cancelDate:"取消日期",cancelReason:"取消原因",hangupBy:"由谁挂起",hangupDate:"挂起日期",trackedBy:"由谁跟踪",trackedDate:"跟踪日期",approvedDate:"审批日期",relatedObject:"关联对象",issues:"关联问题",files:"附件",deleted:"已删除"},meeting:{id:"ID",project:"所属项目",execution:"所属执行",name:"会议名称",type:"会议类型",begin:"开始时间",end:"结束时间",dept:"所属部门",mode:"会议模式",host:"主持人",participant:"参会人员",date:"会议日期",room:"会议室",minutes:"会议记录",minutedBy:"由谁记录",minutedDate:"记录日期",objectType:"关联类型",objectID:"关联对象",createdBy:"由谁创建",createdDate:"创建日期",editedBy:"由谁编辑",editedDate:"编辑日期",participantName:"参会人员姓名",files:"附件",objectName:"关联对象名称",deleted:"已删除"},feedback:{id:"编号",product:"所属产品",module:"所属模块",title:"反馈名称",type:"类型",solution:"处理方案",desc:"描述",pri:"优先级",status:"状态",subStatus:"子状态",prevStatus:"之前状态",public:"公开",notify:"通知",notifyEmail:"通知邮箱",source:"来源公司",likes:"点赞人",result:"转化结果",faq:"FAQ",openedBy:"创建者",openedDate:"创建时间",reviewedBy:"由谁评审",reviewedDate:"评审时间",processedBy:"由谁处理",processedDate:"处理时间",closedBy:"由谁关闭",closedDate:"关闭时间",closedReason:"关闭原因",editedBy:"最后处理人",editedDate:"最后操作时间",assignedTo:"指派给",prevAssignedTo:"之前指派人",assignedDate:"指派时间",activatedBy:"由谁激活",activatedDate:"激活时间",feedbackBy:"反馈者",repeatFeedback:"重复反馈",mailto:"抄送给",keywords:"关键词",deleted:"已删除"},ticket:{id:"工单编号",product:"所属产品",module:"所属模块",title:"工单名称",type:"类型",desc:"描述",openedBuild:"影响版本",feedback:"由反馈转化",assignedTo:"指派给",assignedDate:"指派日期",realStarted:"实际开始",startedBy:"由谁开始",startedDate:"开始时间",deadline:"截止日期",pri:"优先级",estimate:"最初预计",left:"预计剩余",status:"状态",openedBy:"由谁创建",openedDate:"创建时间",activatedCount:"激活次数",activatedBy:"由谁激活",activatedDate:"激活时间",closedBy:"关闭者",closedDate:"关闭时间",closedReason:"关闭原因",finishedBy:"完成者",finishedDate:"完成时间",resolvedBy:"解决者",resolvedDate:"解决时间",resolution:"解决方案",editedBy:"由谁编辑",editedDate:"最后修改时间",keywords:"关键字",repeatTicket:"重复工单",mailto:"抄送给",deleted:"已删除"},system:{id:"编号",name:"应用名称",product:"所属产品",integrated:"集成应用",latestRelease:"最新版本号",latestDate:"最新发布日期",children:"包含应用",status:"状态",desc:"描述",createdBy:"由谁创建",createdDate:"创建日期",editedBy:"由谁编辑",editedDate:"编辑日期",deleted:"已删除"},build:{id:"ID",project:"所属项目",product:"所属产品",branch:"平台/分支",execution:"所属迭代",builds:"包含构建",name:"名称",system:"所属应用",scmPath:"源代码地址",filePath:"下载地址",date:"打包日期",stories:"完成的软件需求",bugs:"解决的Bug",artifactRepoID:"制品库",builder:"构建者",desc:"描述",createdBy:"由谁创建",createdDate:"创建时间",deleted:"已删除"},testtask:{id:"编号",project:"所属项目",product:"所属产品",name:"测试单名称",execution:"所属执行",build:"提测构建",joint:"是否联调测试单",type:"测试类型",owner:"负责人",pri:"优先级",begin:"开始日期",end:"结束日期",realBegan:"实际开始日期",realFinishedDate:"实际完成日期",mailto:"抄送给",desc:"描述",report:"测试总结",status:"当前状态",testreport:"相关测试报告",auto:"自动化",subStatus:"子状态",createdBy:"由谁创建",createdDate:"创建时间",members:"参与人",deleted:"已删除"},release:{id:"ID",project:"所属项目",product:"所属产品",branch:"平台/分支",shadow:"影子构建",build:"构建",name:"应用版本号",system:"应用",releases:"包含应用",marker:"里程碑",date:"计划发布日期",releasedDate:"实际发布日期",stories:"完成的软件需求",bugs:"解决的Bug",leftBugs:"遗留的Bug",desc:"描述",mailto:"抄送给",notify:"发送通知",status:"发布状态",subStatus:"子状态",createdBy:"由谁创建",createdDate:"创建时间",deleted:"已删除"},file:{id:"编号",pathname:"路径",title:"标题",extension:"文件类型",size:"大小",objectType:"对象类型",objectID:"对象ID",gid:"全局标识",addedBy:"由谁添加",addedDate:"添加时间",downloads:"下载次数",extra:"备注",deleted:"已删除"},workflow:{id:"编号",group:"流程分组",parent:"父工作流",child:"子工作流",type:"类型",navigator:"所属导航",app:"所属应用",position:"位置",module:"工作流代号",table:"工作流表",name:"工作流名",icon:"图标",titleField:"标题字段",contentField:"内容字段",flowchart:"流程图",js:"JS",css:"CSS",order:"顺序",buildin:"内置",role:"角色",belong:"从属于",administrator:"白名单",desc:"描述",version:"版本",status:"状态",approval:"审批",createdBy:"由谁创建",createdDate:"创建时间",editedBy:"由谁编辑",editedDate:"编辑时间",vision:"所属界面"},doc:{id:"ID",project:"所属项目",product:"所属产品",execution:"所属执行",lib:"所属库",template:"模板",templateType:"模板类型",templateDesc:"模板描述",objects:"所属对象",chapterType:"章节类型",cycle:"周期",cycleConfig:"周期设置",module:"所属父级",reportModule:"报表模块",title:"文档标题",keywords:"关键字",type:"文档类型",status:"文档状态",parent:"所属父级",path:"路径",grade:"层级",order:"排序",views:"浏览次数",assetLib:"资产库",assetLibType:"资产库类型",from:"来源文档",fromVersion:"来源版本",draft:"草稿",collects:"被收藏量",weeklyDate:"周报日期",addedBy:"创建者",addedDate:"创建日期",assignedTo:"指派给",assignedDate:"指派日期",approvedDate:"审批日期",editedBy:"修改者",editedDate:"修改日期",editingDate:"正在修改者和时间",editedList:"文档编辑者",mailto:"抄送给",acl:"权限",isDeliverable:"是否为交付物",groups:"分组",users:"用户",readGroups:"只读分组",readUsers:"只读用户",version:"版本号",builtIn:"内置",frozen:"冻结状态",vision:"所属界面",collector:"收藏者",releasedDate:"发布日期",releasedBy:"由谁发布",files:"附件",digest:"文档摘要",html:"文档正文(HTML格式)",content:"文档正文(Markdown格式)",rawContent:"原始内容(JSON格式)",contentType:"文档格式",contentVersion:"内容版本",moduleName:"模块名称",executionName:"执行名称",productName:"产品名称",privs:"权限",editors:"编辑者",readable:"可阅读",editable:"可编辑",deleted:"已删除"},todo:{id:"编号",account:"由谁创建",date:"日期",begin:"开始",end:"结束",feedback:"相关反馈",type:"类型",cycle:"周期",objectID:"关联编号",pri:"优先级",name:"待办名称",desc:"描述",status:"状态",private:"私人事务",config:"配置",assignedTo:"指派给",assignedBy:"由谁指派",assignedDate:"指派日期",finishedBy:"由谁完成",finishedDate:"完成时间",closedBy:"由谁关闭",closedDate:"关闭时间",vision:"所属界面",deleted:"已删除"},my:{name:"名称",code:"代号",pri:"优先级",hours:"工时/天",todo:"我的待办",calendar:"日程",work:"待处理",contribute:"贡献",task:"我的任务",bug:"我的Bug",story:"我的软件需求",epic:"我的业务需求",requirement:"我的用户需求",doc:"我的文档",project:"我的项目",execution:"我的执行",issue:"我的问题",risk:"我的风险",reviewissue:"我的评审问题",profile:"我的档案",dynamic:"我的动态",team:"团队",audit:"审批",score:"我的积分",preference:"个性化设置",projects:"所属项目",executions:"所属执行",assignedToMe:"指派给我",programLink:"项目集默认着陆页",productLink:"产品默认着陆页",projectLink:"项目默认着陆页",executionLink:"执行默认着陆页",docLink:"文档默认着陆页",devopsLink:"DevOps视图着陆页",devopsspaceLink:"DevOps空间着陆页",title:"评审标题",status:"状态",type:"评审对象",product:"所属产品",reviewer:"审批人",opinion:"审批意见",result:"评审结果",openedBy:"提交人",time:"提交时间",reviewTime:"评审时间"}};function c(D,B={}){let W=B.version===void 0?void 0:y(B.version),Q=l().get(D.toLowerCase());if(!W||!Q)return Q;let $=Q.actions.filter((X)=>$D(W,X.minVersion));return $.length?Object.freeze({...Q,actions:Object.freeze($)}):void 0}function b(D,B,W){let Q=c(D,W);if(!Q)return;let $=B==="ls"?"list":B;return Q.actions.find((X)=>String(X.name).toLowerCase()===$.toLowerCase())}function QD(D,B,W){let{roles:Q}=W??{},$=[],X=b(D,B,W);if(!X)return[];if(X.pathParams&&(!Q||Q.includes("path")))Object.entries(X.pathParams).forEach(([J,H])=>{if(typeof H==="string")H={description:H};$.push({name:J,role:"path",required:!0,...H})});if(X.params&&(!Q||Q.includes("query")))$.push(...X.params.map((J)=>({...J,role:"query"})));let Y=X.requestBody?.schema;if(Y&&(!Q||Q.includes("body")))if(Y.type==="object"){let J=new Set(Y.required?Y.required.map((H)=>H.toLowerCase()):[]);Object.entries(Y.properties).forEach(([H,L])=>{let C=L.type;$.push({...L,name:H,role:"body",required:L.required??J.has(H.toLowerCase()),type:C==="integer"?"number":C??"string"})})}else $.push({name:"data",role:"body",required:!0,type:Y.type});return $}function hD(D={}){let B=D.version===void 0?void 0:y(D.version);return DD().filter((W)=>!B||W.actions.some((Q)=>$D(B,Q.minVersion))).map((W)=>W.name)}function fD(D,B){return c(D,B)!==void 0}function bD(D){return qW[D]??{}}function JB(D){if(Array.isArray(D))return D.filter((B)=>typeof B!=="function").map((B)=>JB(B));if(D&&typeof D==="object"){let B={};for(let[W,Q]of Object.entries(D))if(typeof Q!=="function")B[W]=JB(Q);return B}return D}function kD(D={}){let B=D.raw??!1,W=D.jsonSafe??!0,Q={};return l().forEach(($)=>{let X=B?$:{...$,actions:$.actions.map((Y)=>{let{requestBody:J,...H}=Y;return{...H,...J?.mediaType?{bodyMediaType:J.mediaType}:{},bodyParams:J?QD($.name,Y.name,{roles:["body"]}):[]}})};Q[$.name]=W?JB(X):X}),Q}cB(YB);YB();var HB="2026-10-01T13:30:03.485Z",LB="0.7.2";var GB=globalThis;GB.ZentaoAPI=vD;if(GB.window)GB.window.ZentaoAPI=vD;})();
|
package/dist/modules/override.js
CHANGED
|
@@ -189,7 +189,7 @@ export function applyBuiltinOverrides() {
|
|
|
189
189
|
{
|
|
190
190
|
name: 'knowledge',
|
|
191
191
|
display: '知识',
|
|
192
|
-
description: '
|
|
192
|
+
description: '需部署商业知识库扩展,支持浏览知识、向量搜索、标题或正文关键词搜索和读取已保存正文。',
|
|
193
193
|
actions: [],
|
|
194
194
|
},
|
|
195
195
|
]);
|
|
@@ -274,8 +274,8 @@ export function applyBuiltinOverrides() {
|
|
|
274
274
|
{
|
|
275
275
|
name: 'search',
|
|
276
276
|
minVersion: knowledgeMinVersion,
|
|
277
|
-
display: '
|
|
278
|
-
description: '需 ai.searchknowledgelib
|
|
277
|
+
display: '多知识库关键词搜索',
|
|
278
|
+
description: '需 ai.searchknowledgelib 权限,按字面文本匹配 title 或已保存的 content,不依赖向量索引。标题与正文分别匹配,单个关键词不能跨字段拼接。返回完整正文及 contentType,正文为空或 null 时返回空字符串;每条知识只返回一次,按知识 ID 降序分页。',
|
|
279
279
|
type: 'list',
|
|
280
280
|
method: 'post',
|
|
281
281
|
path: '/ai/knowledges/search',
|
|
@@ -306,8 +306,8 @@ export function applyBuiltinOverrides() {
|
|
|
306
306
|
matchMode: {
|
|
307
307
|
type: 'string',
|
|
308
308
|
defaultValue: 'any',
|
|
309
|
-
description: '
|
|
310
|
-
options: [{ value: 'any', label: '
|
|
309
|
+
description: 'any 表示任一关键词出现在标题或正文中;all 表示同一条知识的每个关键词均出现在标题或正文之一,可分别命中两个字段。仅省略时使用 any,空字符串和 null 无效',
|
|
310
|
+
options: [{ value: 'any', label: '任一关键词匹配标题或正文' }, { value: 'all', label: '全部关键词匹配同一条知识' }],
|
|
311
311
|
},
|
|
312
312
|
type: knowledgeType,
|
|
313
313
|
objectType: knowledgeObjectType,
|
package/dist/version.js
CHANGED