@ai-setting/roy-task-plugin 0.1.0 → 0.2.0

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/dist/index.js CHANGED
@@ -1,5 +1,141 @@
1
1
  // @bun
2
- var t2=Object.defineProperty;var e2=($)=>$;function $J($,J){this[$]=e2.bind(null,J)}var JJ=($,J)=>{for(var Q in J)t2($,Q,{get:J[Q],enumerable:!0,configurable:!0,set:$J.bind(J,Q)})};var QJ=($)=>$.payload.title?.trim()||`session:${$.payload.id}`;function J0($){let{store:J,agent:Q}=$;return{async session(W){let Y=W.payload.id,B=await U1(J,Y);switch(W.type){case"session.created":{if(B)return{task_id:B.id};let H=QJ(W);return{task_id:(await J.createTask({title:H,session_id:Y,owner:Q,priority:3})).id}}case"session.idle":{if(!B)return null;if(B.status==="pending"){let H=await J.updateTask(B.id,{status:"in_progress"});return H?{task_id:H.id}:null}return null}case"session.deleted":{if(!B)return null;return await J.updateTask(B.id,{status:"cancelled"}),{task_id:B.id}}case"session.error":case"session.compacted":return await J.appendOperation({task_id:B?.id??null,type:`session.${W.type.split(".").pop()}`,data:{session_id:Y,agent:Q}}),null;default:return null}},async tool(W){let Y=W.payload.sessionID,B=await U1(J,Y);if(!B)return await J.appendOperation({task_id:null,type:"tool.orphan",data:{session_id:Y,tool:W.payload.tool}}),{task_id:(await J.createTask({title:`${W.payload.tool} (orphan)`,session_id:null,owner:Q,priority:3})).id};let H=WJ(W),q=(await J.listTasks({parent_id:B.id,limit:20})).tasks.find((b)=>b.title===H&&Date.now()-new Date(b.created_at).getTime()<60000);if(q)return{task_id:q.id};let _=await J.createTask({title:H,parent_id:B.id,session_id:Y,owner:Q,priority:3});return await J.updateTask(_.id,{status:"in_progress"}),{task_id:_.id}},async catchAll(W){try{await J.appendOperation({task_id:null,type:W.type,data:{payload:W.payload,agent:Q}})}catch{}}}}async function U1($,J){return(await $.listTasks({session_id:J,limit:1})).tasks[0]??null}function WJ($){let J=$.payload.tool,Q=$.payload.args??{};switch(J){case"write":case"edit":return`${J} ${Q.filePath??"?"}`;case"bash":case"shell":{let W=String(Q.command??Q.cmd??"");return`${J} ${W.slice(0,40)}`}case"read":return`read ${Q.filePath??"?"}`;default:return`${J} ${JSON.stringify(Q).slice(0,40)}`}}var b0="Roy \u2014 task-as-first-class-citizen agent. Uses the roy-agent task lifecycle "+"(task_tree \u2192 task_create \u2192 task_update \u2192 task_operation_create \u2192 task_complete) "+"so every piece of work is tracked in the local task store.",j0=`# Roy \u2014 task-first-class-citizen agent
2
+ var Q9=Object.create;var{getPrototypeOf:H9,defineProperty:z2,getOwnPropertyNames:D9}=Object;var B9=Object.prototype.hasOwnProperty;function U9(_){return this[_]}var z9,V9,A9=(_,w,$)=>{var X=_!=null&&typeof _==="object";if(X){var J=w?z9??=new WeakMap:V9??=new WeakMap,Y=J.get(_);if(Y)return Y}$=_!=null?Q9(H9(_)):{};let W=w||!_||!_.__esModule?z2($,"default",{value:_,enumerable:!0}):$;for(let q of D9(_))if(!B9.call(W,q))z2(W,q,{get:U9.bind(_,q),enumerable:!0});if(X)J.set(_,W);return W};var P=(_,w)=>()=>(w||_((w={exports:{}}).exports,w),w.exports);var M9=(_)=>_;function R9(_,w){this[_]=M9.bind(null,w)}var O9=(_,w)=>{for(var $ in w)z2(_,$,{get:w[$],enumerable:!0,configurable:!0,set:R9.bind(w,$)})};var _1=import.meta.require;var p=P((MJ)=>{var s2=Symbol.for("yaml.alias"),n4=Symbol.for("yaml.document"),V1=Symbol.for("yaml.map"),a4=Symbol.for("yaml.pair"),t2=Symbol.for("yaml.scalar"),A1=Symbol.for("yaml.seq"),m_=Symbol.for("yaml.node.type"),HJ=(_)=>!!_&&typeof _==="object"&&_[m_]===s2,DJ=(_)=>!!_&&typeof _==="object"&&_[m_]===n4,BJ=(_)=>!!_&&typeof _==="object"&&_[m_]===V1,UJ=(_)=>!!_&&typeof _==="object"&&_[m_]===a4,o4=(_)=>!!_&&typeof _==="object"&&_[m_]===t2,zJ=(_)=>!!_&&typeof _==="object"&&_[m_]===A1;function s4(_){if(_&&typeof _==="object")switch(_[m_]){case V1:case A1:return!0}return!1}function VJ(_){if(_&&typeof _==="object")switch(_[m_]){case s2:case V1:case t2:case A1:return!0}return!1}var AJ=(_)=>(o4(_)||s4(_))&&!!_.anchor;MJ.ALIAS=s2;MJ.DOC=n4;MJ.MAP=V1;MJ.NODE_TYPE=m_;MJ.PAIR=a4;MJ.SCALAR=t2;MJ.SEQ=A1;MJ.hasAnchor=AJ;MJ.isAlias=HJ;MJ.isCollection=s4;MJ.isDocument=DJ;MJ.isMap=BJ;MJ.isNode=VJ;MJ.isPair=UJ;MJ.isScalar=o4;MJ.isSeq=zJ});var N0=P((gJ)=>{var X_=p(),Q_=Symbol("break visit"),t4=Symbol("skip children"),I_=Symbol("remove node");function M1(_,w){let $=e4(w);if(X_.isDocument(_)){if(lw(null,_.contents,$,Object.freeze([_]))===I_)_.contents=null}else lw(null,_,$,Object.freeze([]))}M1.BREAK=Q_;M1.SKIP=t4;M1.REMOVE=I_;function lw(_,w,$,X){let J=_8(_,w,$,X);if(X_.isNode(J)||X_.isPair(J))return w8(_,X,J),lw(_,J,$,X);if(typeof J!=="symbol"){if(X_.isCollection(w)){X=Object.freeze(X.concat(w));for(let Y=0;Y<w.items.length;++Y){let W=lw(Y,w.items[Y],$,X);if(typeof W==="number")Y=W-1;else if(W===Q_)return Q_;else if(W===I_)w.items.splice(Y,1),Y-=1}}else if(X_.isPair(w)){X=Object.freeze(X.concat(w));let Y=lw("key",w.key,$,X);if(Y===Q_)return Q_;else if(Y===I_)w.key=null;let W=lw("value",w.value,$,X);if(W===Q_)return Q_;else if(W===I_)w.value=null}}return J}async function R1(_,w){let $=e4(w);if(X_.isDocument(_)){if(await cw(null,_.contents,$,Object.freeze([_]))===I_)_.contents=null}else await cw(null,_,$,Object.freeze([]))}R1.BREAK=Q_;R1.SKIP=t4;R1.REMOVE=I_;async function cw(_,w,$,X){let J=await _8(_,w,$,X);if(X_.isNode(J)||X_.isPair(J))return w8(_,X,J),cw(_,J,$,X);if(typeof J!=="symbol"){if(X_.isCollection(w)){X=Object.freeze(X.concat(w));for(let Y=0;Y<w.items.length;++Y){let W=await cw(Y,w.items[Y],$,X);if(typeof W==="number")Y=W-1;else if(W===Q_)return Q_;else if(W===I_)w.items.splice(Y,1),Y-=1}}else if(X_.isPair(w)){X=Object.freeze(X.concat(w));let Y=await cw("key",w.key,$,X);if(Y===Q_)return Q_;else if(Y===I_)w.key=null;let W=await cw("value",w.value,$,X);if(W===Q_)return Q_;else if(W===I_)w.value=null}}return J}function e4(_){if(typeof _==="object"&&(_.Collection||_.Node||_.Value))return Object.assign({Alias:_.Node,Map:_.Node,Scalar:_.Node,Seq:_.Node},_.Value&&{Map:_.Value,Scalar:_.Value,Seq:_.Value},_.Collection&&{Map:_.Collection,Seq:_.Collection},_);return _}function _8(_,w,$,X){if(typeof $==="function")return $(_,w,X);if(X_.isMap(w))return $.Map?.(_,w,X);if(X_.isSeq(w))return $.Seq?.(_,w,X);if(X_.isPair(w))return $.Pair?.(_,w,X);if(X_.isScalar(w))return $.Scalar?.(_,w,X);if(X_.isAlias(w))return $.Alias?.(_,w,X);return}function w8(_,w,$){let X=w[w.length-1];if(X_.isCollection(X))X.items[_]=$;else if(X_.isPair(X))if(_==="key")X.key=$;else X.value=$;else if(X_.isDocument(X))X.contents=$;else{let J=X_.isAlias(X)?"alias":"scalar";throw Error(`Cannot replace node with ${J} parent`)}}gJ.visit=M1;gJ.visitAsync=R1});var e2=P((mJ)=>{var $8=p(),yJ=N0(),vJ={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},xJ=(_)=>_.replace(/[!,[\]{}]/g,(w)=>vJ[w]);class V_{constructor(_,w){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},V_.defaultYaml,_),this.tags=Object.assign({},V_.defaultTags,w)}clone(){let _=new V_(this.yaml,this.tags);return _.docStart=this.docStart,_}atDocument(){let _=new V_(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:V_.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},V_.defaultTags);break}return _}add(_,w){if(this.atNextDocument)this.yaml={explicit:V_.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},V_.defaultTags),this.atNextDocument=!1;let $=_.trim().split(/[ \t]+/),X=$.shift();switch(X){case"%TAG":{if($.length!==2){if(w(0,"%TAG directive should contain exactly two parts"),$.length<2)return!1}let[J,Y]=$;return this.tags[J]=Y,!0}case"%YAML":{if(this.yaml.explicit=!0,$.length!==1)return w(0,"%YAML directive should contain exactly one part"),!1;let[J]=$;if(J==="1.1"||J==="1.2")return this.yaml.version=J,!0;else{let Y=/^\d+\.\d+$/.test(J);return w(6,`Unsupported YAML version ${J}`,Y),!1}}default:return w(0,`Unknown directive ${X}`,!0),!1}}tagName(_,w){if(_==="!")return"!";if(_[0]!=="!")return w(`Not a valid tag: ${_}`),null;if(_[1]==="<"){let Y=_.slice(2,-1);if(Y==="!"||Y==="!!")return w(`Verbatim tags aren't resolved, so ${_} is invalid.`),null;if(_[_.length-1]!==">")w("Verbatim tags must end with a >");return Y}let[,$,X]=_.match(/^(.*!)([^!]*)$/s);if(!X)w(`The ${_} tag has no suffix`);let J=this.tags[$];if(J)try{return J+decodeURIComponent(X)}catch(Y){return w(String(Y)),null}if($==="!")return _;return w(`Could not resolve tag: ${_}`),null}tagString(_){for(let[w,$]of Object.entries(this.tags))if(_.startsWith($))return w+xJ(_.substring($.length));return _[0]==="!"?_:`!<${_}>`}toString(_){let w=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],$=Object.entries(this.tags),X;if(_&&$.length>0&&$8.isNode(_.contents)){let J={};yJ.visit(_.contents,(Y,W)=>{if($8.isNode(W)&&W.tag)J[W.tag]=!0}),X=Object.keys(J)}else X=[];for(let[J,Y]of $){if(J==="!!"&&Y==="tag:yaml.org,2002:")continue;if(!_||X.some((W)=>W.startsWith(Y)))w.push(`%TAG ${J} ${Y}`)}return w.join(`
3
+ `)}}V_.defaultYaml={explicit:!1,version:"1.2"};V_.defaultTags={"!!":"tag:yaml.org,2002:"};mJ.Directives=V_});var O1=P((pJ)=>{var X8=p(),lJ=N0();function cJ(_){if(/[\x00-\x19\s,[\]{}]/.test(_)){let $=`Anchor must not contain whitespace or control characters: ${JSON.stringify(_)}`;throw Error($)}return!0}function J8(_){let w=new Set;return lJ.visit(_,{Value($,X){if(X.anchor)w.add(X.anchor)}}),w}function Y8(_,w){for(let $=1;;++$){let X=`${_}${$}`;if(!w.has(X))return X}}function dJ(_,w){let $=[],X=new Map,J=null;return{onAnchor:(Y)=>{$.push(Y),J??(J=J8(_));let W=Y8(w,J);return J.add(W),W},setAnchors:()=>{for(let Y of $){let W=X.get(Y);if(typeof W==="object"&&W.anchor&&(X8.isScalar(W.node)||X8.isCollection(W.node)))W.node.anchor=W.anchor;else{let q=Error("Failed to resolve repeated object (this should not happen)");throw q.source=Y,q}}},sourceObjects:X}}pJ.anchorIsValid=cJ;pJ.anchorNames=J8;pJ.createNodeAnchors=dJ;pJ.findNewAnchor=Y8});var _3=P((oJ)=>{function b0(_,w,$,X){if(X&&typeof X==="object")if(Array.isArray(X))for(let J=0,Y=X.length;J<Y;++J){let W=X[J],q=b0(_,X,String(J),W);if(q===void 0)delete X[J];else if(q!==W)X[J]=q}else if(X instanceof Map)for(let J of Array.from(X.keys())){let Y=X.get(J),W=b0(_,X,J,Y);if(W===void 0)X.delete(J);else if(W!==Y)X.set(J,W)}else if(X instanceof Set)for(let J of Array.from(X)){let Y=b0(_,X,J,J);if(Y===void 0)X.delete(J);else if(Y!==J)X.delete(J),X.add(Y)}else for(let[J,Y]of Object.entries(X)){let W=b0(_,X,J,Y);if(W===void 0)delete X[J];else if(W!==Y)X[J]=W}return _.call(w,$,X)}oJ.applyReviver=b0});var o_=P((eJ)=>{var tJ=p();function W8(_,w,$){if(Array.isArray(_))return _.map((X,J)=>W8(X,String(J),$));if(_&&typeof _.toJSON==="function"){if(!$||!tJ.hasAnchor(_))return _.toJSON(w,$);let X={aliasCount:0,count:1,res:void 0};$.anchors.set(_,X),$.onCreate=(Y)=>{X.res=Y,delete $.onCreate};let J=_.toJSON(w,$);if($.onCreate)$.onCreate(J);return J}if(typeof _==="bigint"&&!$?.keep)return Number(_);return _}eJ.toJS=W8});var F1=P((XY)=>{var wY=_3(),q8=p(),$Y=o_();class G8{constructor(_){Object.defineProperty(this,q8.NODE_TYPE,{value:_})}clone(){let _=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));if(this.range)_.range=this.range.slice();return _}toJS(_,{mapAsMap:w,maxAliasCount:$,onAnchor:X,reviver:J}={}){if(!q8.isDocument(_))throw TypeError("A document argument is required");let Y={anchors:new Map,doc:_,keep:!0,mapAsMap:w===!0,mapKeyWarned:!1,maxAliasCount:typeof $==="number"?$:100},W=$Y.toJS(this,"",Y);if(typeof X==="function")for(let{count:q,res:G}of Y.anchors.values())X(G,q);return typeof J==="function"?wY.applyReviver(J,{"":W},"",W):W}}XY.NodeBase=G8});var j0=P((QY)=>{var YY=O1(),WY=N0(),dw=p(),qY=F1(),GY=o_();class Q8 extends qY.NodeBase{constructor(_){super(dw.ALIAS);this.source=_,Object.defineProperty(this,"tag",{set(){throw Error("Alias nodes cannot have tags")}})}resolve(_,w){if(w?.maxAliasCount===0)throw ReferenceError("Alias resolution is disabled");let $;if(w?.aliasResolveCache)$=w.aliasResolveCache;else if($=[],WY.visit(_,{Node:(J,Y)=>{if(dw.isAlias(Y)||dw.hasAnchor(Y))$.push(Y)}}),w)w.aliasResolveCache=$;let X=void 0;for(let J of $){if(J===this)break;if(J.anchor===this.source)X=J}if(X&&w){let{anchors:J,doc:Y,maxAliasCount:W}=w,q=J.get(X);if(!q)GY.toJS(X,null,w),q=J.get(X);if(q?.res===void 0)throw ReferenceError("This should not happen: Alias anchor was not resolved?");if(W>=0){if(q.count+=1,q.aliasCount===0)q.aliasCount=f1(Y,X,J);if(q.count*q.aliasCount>W)throw ReferenceError("Excessive alias count indicates a resource exhaustion attack")}}return X}toJSON(_,w){if(!w)return{source:this.source};let $=this.resolve(w.doc,w);if(!$){let X=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw ReferenceError(X)}return w.anchors.get($).res}toString(_,w,$){let X=`*${this.source}`;if(_){if(YY.anchorIsValid(this.source),_.options.verifyAliasOrder&&!_.anchors.has(this.source)){let J=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw Error(J)}if(_.implicitKey)return`${X} `}return X}}function f1(_,w,$){if(dw.isAlias(w)){let X=w.resolve(_),J=$&&X&&$.get(X);return J?J.count*J.aliasCount:0}else if(dw.isCollection(w)){let X=0;for(let J of w.items){let Y=f1(_,J,$);if(Y>X)X=Y}return X}else if(dw.isPair(w)){let X=f1(_,w.key,$),J=f1(_,w.value,$);return Math.max(X,J)}return 1}QY.Alias=Q8});var $_=P((VY)=>{var DY=p(),BY=F1(),UY=o_(),zY=(_)=>!_||typeof _!=="function"&&typeof _!=="object";class zw extends BY.NodeBase{constructor(_){super(DY.SCALAR);this.value=_}toJSON(_,w){return w?.keep?this.value:UY.toJS(this.value,_,w)}toString(){return String(this.value)}}zw.BLOCK_FOLDED="BLOCK_FOLDED";zw.BLOCK_LITERAL="BLOCK_LITERAL";zw.PLAIN="PLAIN";zw.QUOTE_DOUBLE="QUOTE_DOUBLE";zw.QUOTE_SINGLE="QUOTE_SINGLE";VY.Scalar=zw;VY.isScalarValue=zY});var E0=P((LY)=>{var RY=j0(),Vw=p(),H8=$_(),OY="tag:yaml.org,2002:";function FY(_,w,$){if(w){let X=$.filter((Y)=>Y.tag===w),J=X.find((Y)=>!Y.format)??X[0];if(!J)throw Error(`Tag ${w} not found`);return J}return $.find((X)=>X.identify?.(_)&&!X.format)}function fY(_,w,$){if(Vw.isDocument(_))_=_.contents;if(Vw.isNode(_))return _;if(Vw.isPair(_)){let B=$.schema[Vw.MAP].createNode?.($.schema,null,$);return B.items.push(_),B}if(_ instanceof String||_ instanceof Number||_ instanceof Boolean||typeof BigInt<"u"&&_ instanceof BigInt)_=_.valueOf();let{aliasDuplicateObjects:X,onAnchor:J,onTagObj:Y,schema:W,sourceObjects:q}=$,G=void 0;if(X&&_&&typeof _==="object")if(G=q.get(_),G)return G.anchor??(G.anchor=J(_)),new RY.Alias(G.anchor);else G={anchor:null,node:null},q.set(_,G);if(w?.startsWith("!!"))w=OY+w.slice(2);let Q=FY(_,w,W.tags);if(!Q){if(_&&typeof _.toJSON==="function")_=_.toJSON();if(!_||typeof _!=="object"){let B=new H8.Scalar(_);if(G)G.node=B;return B}Q=_ instanceof Map?W[Vw.MAP]:(Symbol.iterator in Object(_))?W[Vw.SEQ]:W[Vw.MAP]}if(Y)Y(Q),delete $.onTagObj;let H=Q?.createNode?Q.createNode($.schema,_,$):typeof Q?.nodeClass?.from==="function"?Q.nodeClass.from($.schema,_,$):new H8.Scalar(_);if(w)H.tag=w;else if(!Q.default)H.tag=Q.tag;if(G)G.node=H;return H}LY.createNode=fY});var L1=P((jY)=>{var NY=E0(),g_=p(),bY=F1();function w3(_,w,$){let X=$;for(let J=w.length-1;J>=0;--J){let Y=w[J];if(typeof Y==="number"&&Number.isInteger(Y)&&Y>=0){let W=[];W[Y]=X,X=W}else X=new Map([[Y,X]])}return NY.createNode(X,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw Error("This should not happen, please report a bug.")},schema:_,sourceObjects:new Map})}var D8=(_)=>_==null||typeof _==="object"&&!!_[Symbol.iterator]().next().done;class B8 extends bY.NodeBase{constructor(_,w){super(_);Object.defineProperty(this,"schema",{value:w,configurable:!0,enumerable:!1,writable:!0})}clone(_){let w=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));if(_)w.schema=_;if(w.items=w.items.map(($)=>g_.isNode($)||g_.isPair($)?$.clone(_):$),this.range)w.range=this.range.slice();return w}addIn(_,w){if(D8(_))this.add(w);else{let[$,...X]=_,J=this.get($,!0);if(g_.isCollection(J))J.addIn(X,w);else if(J===void 0&&this.schema)this.set($,w3(this.schema,X,w));else throw Error(`Expected YAML collection at ${$}. Remaining path: ${X}`)}}deleteIn(_){let[w,...$]=_;if($.length===0)return this.delete(w);let X=this.get(w,!0);if(g_.isCollection(X))return X.deleteIn($);else throw Error(`Expected YAML collection at ${w}. Remaining path: ${$}`)}getIn(_,w){let[$,...X]=_,J=this.get($,!0);if(X.length===0)return!w&&g_.isScalar(J)?J.value:J;else return g_.isCollection(J)?J.getIn(X,w):void 0}hasAllNullValues(_){return this.items.every((w)=>{if(!g_.isPair(w))return!1;let $=w.value;return $==null||_&&g_.isScalar($)&&$.value==null&&!$.commentBefore&&!$.comment&&!$.tag})}hasIn(_){let[w,...$]=_;if($.length===0)return this.has(w);let X=this.get(w,!0);return g_.isCollection(X)?X.hasIn($):!1}setIn(_,w){let[$,...X]=_;if(X.length===0)this.set($,w);else{let J=this.get($,!0);if(g_.isCollection(J))J.setIn(X,w);else if(J===void 0&&this.schema)this.set($,w3(this.schema,X,w));else throw Error(`Expected YAML collection at ${$}. Remaining path: ${X}`)}}}jY.Collection=B8;jY.collectionFromPath=w3;jY.isEmptyPath=D8});var S0=P((TY)=>{var ZY=(_)=>_.replace(/^(?!$)(?: $)?/gm,"#");function $3(_,w){if(/^\n+$/.test(_))return _.substring(1);return w?_.replace(/^(?! *$)/gm,w):_}var CY=(_,w,$)=>_.endsWith(`
4
+ `)?$3($,w):$.includes(`
5
+ `)?`
6
+ `+$3($,w):(_.endsWith(" ")?"":" ")+$;TY.indentComment=$3;TY.lineComment=CY;TY.stringifyComment=ZY});var z8=P((yY)=>{function hY(_,w,$="flow",{indentAtStart:X,lineWidth:J=80,minContentWidth:Y=20,onFold:W,onOverflow:q}={}){if(!J||J<0)return _;if(J<Y)Y=0;let G=Math.max(1+Y,1+J-w.length);if(_.length<=G)return _;let Q=[],H={},B=J-w.length;if(typeof X==="number")if(X>J-Math.max(2,Y))Q.push(0);else B=J-X;let D=void 0,z=void 0,A=!1,U=-1,V=-1,R=-1;if($==="block"){if(U=U8(_,U,w.length),U!==-1)B=U+G}for(let S;S=_[U+=1];){if($==="quoted"&&S==="\\"){switch(V=U,_[U+1]){case"x":U+=3;break;case"u":U+=5;break;case"U":U+=9;break;default:U+=1}R=U}if(S===`
7
+ `){if($==="block")U=U8(_,U,w.length);B=U+w.length+G,D=void 0}else{if(S===" "&&z&&z!==" "&&z!==`
8
+ `&&z!=="\t"){let K=_[U+1];if(K&&K!==" "&&K!==`
9
+ `&&K!=="\t")D=U}if(U>=B)if(D)Q.push(D),B=D+G,D=void 0;else if($==="quoted"){while(z===" "||z==="\t")z=S,S=_[U+=1],A=!0;let K=U>R+1?U-2:V-1;if(H[K])return _;Q.push(K),H[K]=!0,B=K+G,D=void 0}else A=!0}z=S}if(A&&q)q();if(Q.length===0)return _;if(W)W();let f=_.slice(0,Q[0]);for(let S=0;S<Q.length;++S){let K=Q[S],j=Q[S+1]||_.length;if(K===0)f=`
10
+ ${w}${_.slice(0,j)}`;else{if($==="quoted"&&H[K])f+=`${_[K]}\\`;f+=`
11
+ ${w}${_.slice(K+1,j)}`}}return f}function U8(_,w,$){let X=w,J=w+1,Y=_[J];while(Y===" "||Y==="\t")if(w<J+$)Y=_[++w];else{do Y=_[++w];while(Y&&Y!==`
12
+ `);X=w,J=w+1,Y=_[J]}return X}yY.FOLD_BLOCK="block";yY.FOLD_FLOW="flow";yY.FOLD_QUOTED="quoted";yY.foldFlowLines=hY});var Z0=P((pY)=>{var N_=$_(),s_=z8(),N1=(_,w)=>({indentAtStart:w?_.indent.length:_.indentAtStart,lineWidth:_.options.lineWidth,minContentWidth:_.options.minContentWidth}),b1=(_)=>/^(%|---|\.\.\.)/m.test(_);function lY(_,w,$){if(!w||w<0)return!1;let X=w-$,J=_.length;if(J<=X)return!1;for(let Y=0,W=0;Y<J;++Y)if(_[Y]===`
13
+ `){if(Y-W>X)return!0;if(W=Y+1,J-W<=X)return!1}return!0}function P0(_,w){let $=JSON.stringify(_);if(w.options.doubleQuotedAsJSON)return $;let{implicitKey:X}=w,J=w.options.doubleQuotedMinMultiLineLength,Y=w.indent||(b1(_)?" ":""),W="",q=0;for(let G=0,Q=$[G];Q;Q=$[++G]){if(Q===" "&&$[G+1]==="\\"&&$[G+2]==="n")W+=$.slice(q,G)+"\\ ",G+=1,q=G,Q="\\";if(Q==="\\")switch($[G+1]){case"u":{W+=$.slice(q,G);let H=$.substr(G+2,4);switch(H){case"0000":W+="\\0";break;case"0007":W+="\\a";break;case"000b":W+="\\v";break;case"001b":W+="\\e";break;case"0085":W+="\\N";break;case"00a0":W+="\\_";break;case"2028":W+="\\L";break;case"2029":W+="\\P";break;default:if(H.substr(0,2)==="00")W+="\\x"+H.substr(2);else W+=$.substr(G,6)}G+=5,q=G+1}break;case"n":if(X||$[G+2]==='"'||$.length<J)G+=1;else{W+=$.slice(q,G)+`
14
+
15
+ `;while($[G+2]==="\\"&&$[G+3]==="n"&&$[G+4]!=='"')W+=`
16
+ `,G+=2;if(W+=Y,$[G+2]===" ")W+="\\";G+=1,q=G+1}break;default:G+=1}}return W=q?W+$.slice(q):$,X?W:s_.foldFlowLines(W,Y,s_.FOLD_QUOTED,N1(w,!1))}function X3(_,w){if(w.options.singleQuote===!1||w.implicitKey&&_.includes(`
17
+ `)||/[ \t]\n|\n[ \t]/.test(_))return P0(_,w);let $=w.indent||(b1(_)?" ":""),X="'"+_.replace(/'/g,"''").replace(/\n+/g,`$&
18
+ ${$}`)+"'";return w.implicitKey?X:s_.foldFlowLines(X,$,s_.FOLD_FLOW,N1(w,!1))}function pw(_,w){let{singleQuote:$}=w.options,X;if($===!1)X=P0;else{let J=_.includes('"'),Y=_.includes("'");if(J&&!Y)X=X3;else if(Y&&!J)X=P0;else X=$?X3:P0}return X(_,w)}var J3;try{J3=new RegExp(`(^|(?<!
19
+ ))
20
+ +(?!
21
+ |$)`,"g")}catch{J3=/\n+(?!\n|$)/g}function K1({comment:_,type:w,value:$},X,J,Y){let{blockQuote:W,commentString:q,lineWidth:G}=X.options;if(!W||/\n[\t ]+$/.test($))return pw($,X);let Q=X.indent||(X.forceBlockIndent||b1($)?" ":""),H=W==="literal"?!0:W==="folded"||w===N_.Scalar.BLOCK_FOLDED?!1:w===N_.Scalar.BLOCK_LITERAL?!0:!lY($,G,Q.length);if(!$)return H?`|
22
+ `:`>
23
+ `;let B,D;for(D=$.length;D>0;--D){let j=$[D-1];if(j!==`
24
+ `&&j!=="\t"&&j!==" ")break}let z=$.substring(D),A=z.indexOf(`
25
+ `);if(A===-1)B="-";else if($===z||A!==z.length-1){if(B="+",Y)Y()}else B="";if(z){if($=$.slice(0,-z.length),z[z.length-1]===`
26
+ `)z=z.slice(0,-1);z=z.replace(J3,`$&${Q}`)}let U=!1,V,R=-1;for(V=0;V<$.length;++V){let j=$[V];if(j===" ")U=!0;else if(j===`
27
+ `)R=V;else break}let f=$.substring(0,R<V?R+1:V);if(f)$=$.substring(f.length),f=f.replace(/\n+/g,`$&${Q}`);let K=(U?Q?"2":"1":"")+B;if(_){if(K+=" "+q(_.replace(/ ?[\r\n]+/g," ")),J)J()}if(!H){let j=$.replace(/\n+/g,`
28
+ $&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${Q}`),N=!1,g=N1(X,!0);if(W!=="folded"&&w!==N_.Scalar.BLOCK_FOLDED)g.onOverflow=()=>{N=!0};let E=s_.foldFlowLines(`${f}${j}${z}`,Q,s_.FOLD_BLOCK,g);if(!N)return`>${K}
29
+ ${Q}${E}`}return $=$.replace(/\n+/g,`$&${Q}`),`|${K}
30
+ ${Q}${f}${$}${z}`}function cY(_,w,$,X){let{type:J,value:Y}=_,{actualString:W,implicitKey:q,indent:G,indentStep:Q,inFlow:H}=w;if(q&&Y.includes(`
31
+ `)||H&&/[[\]{},]/.test(Y))return pw(Y,w);if(/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(Y))return q||H||!Y.includes(`
32
+ `)?pw(Y,w):K1(_,w,$,X);if(!q&&!H&&J!==N_.Scalar.PLAIN&&Y.includes(`
33
+ `))return K1(_,w,$,X);if(b1(Y)){if(G==="")return w.forceBlockIndent=!0,K1(_,w,$,X);else if(q&&G===Q)return pw(Y,w)}let B=Y.replace(/\n+/g,`$&
34
+ ${G}`);if(W){let D=(U)=>U.default&&U.tag!=="tag:yaml.org,2002:str"&&U.test?.test(B),{compat:z,tags:A}=w.doc.schema;if(A.some(D)||z?.some(D))return pw(Y,w)}return q?B:s_.foldFlowLines(B,G,s_.FOLD_FLOW,N1(w,!1))}function dY(_,w,$,X){let{implicitKey:J,inFlow:Y}=w,W=typeof _.value==="string"?_:Object.assign({},_,{value:String(_.value)}),{type:q}=_;if(q!==N_.Scalar.QUOTE_DOUBLE){if(/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(W.value))q=N_.Scalar.QUOTE_DOUBLE}let G=(H)=>{switch(H){case N_.Scalar.BLOCK_FOLDED:case N_.Scalar.BLOCK_LITERAL:return J||Y?pw(W.value,w):K1(W,w,$,X);case N_.Scalar.QUOTE_DOUBLE:return P0(W.value,w);case N_.Scalar.QUOTE_SINGLE:return X3(W.value,w);case N_.Scalar.PLAIN:return cY(W,w,$,X);default:return null}},Q=G(q);if(Q===null){let{defaultKeyType:H,defaultStringType:B}=w.options,D=J&&H||B;if(Q=G(D),Q===null)throw Error(`Unsupported default string type ${D}`)}return Q}pY.stringifyString=dY});var C0=P((_W)=>{var rY=O1(),t_=p(),nY=S0(),aY=Z0();function oY(_,w){let $=Object.assign({blockQuote:!0,commentString:nY.stringifyComment,defaultKeyType:null,defaultStringType:"PLAIN",directives:null,doubleQuotedAsJSON:!1,doubleQuotedMinMultiLineLength:40,falseStr:"false",flowCollectionPadding:!0,indentSeq:!0,lineWidth:80,minContentWidth:20,nullStr:"null",simpleKeys:!1,singleQuote:null,trailingComma:!1,trueStr:"true",verifyAliasOrder:!0},_.schema.toStringOptions,w),X;switch($.collectionStyle){case"block":X=!1;break;case"flow":X=!0;break;default:X=null}return{anchors:new Set,doc:_,flowCollectionPadding:$.flowCollectionPadding?" ":"",indent:"",indentStep:typeof $.indent==="number"?" ".repeat($.indent):" ",inFlow:X,options:$}}function sY(_,w){if(w.tag){let J=_.filter((Y)=>Y.tag===w.tag);if(J.length>0)return J.find((Y)=>Y.format===w.format)??J[0]}let $=void 0,X;if(t_.isScalar(w)){X=w.value;let J=_.filter((Y)=>Y.identify?.(X));if(J.length>1){let Y=J.filter((W)=>W.test);if(Y.length>0)J=Y}$=J.find((Y)=>Y.format===w.format)??J.find((Y)=>!Y.format)}else X=w,$=_.find((J)=>J.nodeClass&&X instanceof J.nodeClass);if(!$){let J=X?.constructor?.name??(X===null?"null":typeof X);throw Error(`Tag not resolved for ${J} value`)}return $}function tY(_,w,{anchors:$,doc:X}){if(!X.directives)return"";let J=[],Y=(t_.isScalar(_)||t_.isCollection(_))&&_.anchor;if(Y&&rY.anchorIsValid(Y))$.add(Y),J.push(`&${Y}`);let W=_.tag??(w.default?null:w.tag);if(W)J.push(X.directives.tagString(W));return J.join(" ")}function eY(_,w,$,X){if(t_.isPair(_))return _.toString(w,$,X);if(t_.isAlias(_)){if(w.doc.directives)return _.toString(w);if(w.resolvedAliases?.has(_))throw TypeError("Cannot stringify circular structure without alias nodes");else{if(w.resolvedAliases)w.resolvedAliases.add(_);else w.resolvedAliases=new Set([_]);_=_.resolve(w.doc)}}let J=void 0,Y=t_.isNode(_)?_:w.doc.createNode(_,{onTagObj:(G)=>J=G});J??(J=sY(w.doc.schema.tags,Y));let W=tY(Y,J,w);if(W.length>0)w.indentAtStart=(w.indentAtStart??0)+W.length+1;let q=typeof J.stringify==="function"?J.stringify(Y,w,$,X):t_.isScalar(Y)?aY.stringifyString(Y,w,$,X):Y.toString(w,$,X);if(!W)return q;return t_.isScalar(Y)||q[0]==="{"||q[0]==="["?`${W} ${q}`:`${W}
35
+ ${w.indent}${q}`}_W.createStringifyContext=oY;_W.stringify=eY});var M8=P((JW)=>{var u_=p(),V8=$_(),A8=C0(),T0=S0();function XW({key:_,value:w},$,X,J){let{allNullValues:Y,doc:W,indent:q,indentStep:G,options:{commentString:Q,indentSeq:H,simpleKeys:B}}=$,D=u_.isNode(_)&&_.comment||null;if(B){if(D)throw Error("With simple keys, key nodes cannot have comments");if(u_.isCollection(_)||!u_.isNode(_)&&typeof _==="object")throw Error("With simple keys, collection cannot be used as a key value")}let z=!B&&(!_||D&&w==null&&!$.inFlow||u_.isCollection(_)||(u_.isScalar(_)?_.type===V8.Scalar.BLOCK_FOLDED||_.type===V8.Scalar.BLOCK_LITERAL:typeof _==="object"));$=Object.assign({},$,{allNullValues:!1,implicitKey:!z&&(B||!Y),indent:q+G});let A=!1,U=!1,V=A8.stringify(_,$,()=>A=!0,()=>U=!0);if(!z&&!$.inFlow&&V.length>1024){if(B)throw Error("With simple keys, single line scalar must not span more than 1024 characters");z=!0}if($.inFlow){if(Y||w==null){if(A&&X)X();return V===""?"?":z?`? ${V}`:V}}else if(Y&&!B||w==null&&z){if(V=`? ${V}`,D&&!A)V+=T0.lineComment(V,$.indent,Q(D));else if(U&&J)J();return V}if(A)D=null;if(z){if(D)V+=T0.lineComment(V,$.indent,Q(D));V=`? ${V}
36
+ ${q}:`}else if(V=`${V}:`,D)V+=T0.lineComment(V,$.indent,Q(D));let R,f,S;if(u_.isNode(w))R=!!w.spaceBefore,f=w.commentBefore,S=w.comment;else if(R=!1,f=null,S=null,w&&typeof w==="object")w=W.createNode(w);if($.implicitKey=!1,!z&&!D&&u_.isScalar(w))$.indentAtStart=V.length+1;if(U=!1,!H&&G.length>=2&&!$.inFlow&&!z&&u_.isSeq(w)&&!w.flow&&!w.tag&&!w.anchor)$.indent=$.indent.substring(2);let K=!1,j=A8.stringify(w,$,()=>K=!0,()=>U=!0),N=" ";if(D||R||f){if(N=R?`
37
+ `:"",f){let g=Q(f);N+=`
38
+ ${T0.indentComment(g,$.indent)}`}if(j===""&&!$.inFlow){if(N===`
39
+ `&&S)N=`
40
+
41
+ `}else N+=`
42
+ ${$.indent}`}else if(!z&&u_.isCollection(w)){let g=j[0],E=j.indexOf(`
43
+ `),C=E!==-1,x=$.inFlow??w.flow??w.items.length===0;if(C||!x){let i=!1;if(C&&(g==="&"||g==="!")){let y=j.indexOf(" ");if(g==="&"&&y!==-1&&y<E&&j[y+1]==="!")y=j.indexOf(" ",y+1);if(y===-1||E<y)i=!0}if(!i)N=`
44
+ ${$.indent}`}}else if(j===""||j[0]===`
45
+ `)N="";if(V+=N+j,$.inFlow){if(K&&X)X()}else if(S&&!K)V+=T0.lineComment(V,$.indent,Q(S));else if(U&&J)J();return V}JW.stringifyPair=XW});var Y3=P((GW)=>{var R8=_1("process");function WW(_,...w){if(_==="debug")console.log(...w)}function qW(_,w){if(_==="debug"||_==="warn")if(typeof R8.emitWarning==="function")R8.emitWarning(w);else console.warn(w)}GW.debug=WW;GW.warn=qW});var P1=P((BW)=>{var S1=p(),O8=$_(),j1="<<",E1={identify:(_)=>_===j1||typeof _==="symbol"&&_.description===j1,default:"key",tag:"tag:yaml.org,2002:merge",test:/^<<$/,resolve:()=>Object.assign(new O8.Scalar(Symbol(j1)),{addToJSMap:F8}),stringify:()=>j1},DW=(_,w)=>(E1.identify(w)||S1.isScalar(w)&&(!w.type||w.type===O8.Scalar.PLAIN)&&E1.identify(w.value))&&_?.doc.schema.tags.some(($)=>$.tag===E1.tag&&$.default);function F8(_,w,$){let X=f8(_,$);if(S1.isSeq(X))for(let J of X.items)W3(_,w,J);else if(Array.isArray(X))for(let J of X)W3(_,w,J);else W3(_,w,X)}function W3(_,w,$){let X=f8(_,$);if(!S1.isMap(X))throw Error("Merge sources must be maps or map aliases");let J=X.toJSON(null,_,Map);for(let[Y,W]of J)if(w instanceof Map){if(!w.has(Y))w.set(Y,W)}else if(w instanceof Set)w.add(Y);else if(!Object.prototype.hasOwnProperty.call(w,Y))Object.defineProperty(w,Y,{value:W,writable:!0,enumerable:!0,configurable:!0});return w}function f8(_,w){return _&&S1.isAlias(w)?w.resolve(_.doc,_):w}BW.addMergeToJSMap=F8;BW.isMergeKey=DW;BW.merge=E1});var G3=P((FW)=>{var AW=Y3(),L8=P1(),MW=C0(),K8=p(),q3=o_();function RW(_,w,{key:$,value:X}){if(K8.isNode($)&&$.addToJSMap)$.addToJSMap(_,w,X);else if(L8.isMergeKey(_,$))L8.addMergeToJSMap(_,w,X);else{let J=q3.toJS($,"",_);if(w instanceof Map)w.set(J,q3.toJS(X,J,_));else if(w instanceof Set)w.add(J);else{let Y=OW($,J,_),W=q3.toJS(X,Y,_);if(Y in w)Object.defineProperty(w,Y,{value:W,writable:!0,enumerable:!0,configurable:!0});else w[Y]=W}}return w}function OW(_,w,$){if(w===null)return"";if(typeof w!=="object")return String(w);if(K8.isNode(_)&&$?.doc){let X=MW.createStringifyContext($.doc,{});X.anchors=new Set;for(let Y of $.anchors.keys())X.anchors.add(Y.anchor);X.inFlow=!0,X.inStringifyKey=!0;let J=_.toString(X);if(!$.mapKeyWarned){let Y=JSON.stringify(J);if(Y.length>40)Y=Y.substring(0,36)+'..."';AW.warn($.doc.options.logLevel,`Keys with collection values will be stringified due to JS Object restrictions: ${Y}. Set mapAsMap: true to use object keys.`),$.mapKeyWarned=!0}return J}return JSON.stringify(w)}FW.addPairToJSMap=RW});var e_=P((bW)=>{var N8=E0(),LW=M8(),KW=G3(),Z1=p();function NW(_,w,$){let X=N8.createNode(_,void 0,$),J=N8.createNode(w,void 0,$);return new C1(X,J)}class C1{constructor(_,w=null){Object.defineProperty(this,Z1.NODE_TYPE,{value:Z1.PAIR}),this.key=_,this.value=w}clone(_){let{key:w,value:$}=this;if(Z1.isNode(w))w=w.clone(_);if(Z1.isNode($))$=$.clone(_);return new C1(w,$)}toJSON(_,w){let $=w?.mapAsMap?new Map:{};return KW.addPairToJSMap(w,$,this)}toString(_,w,$){return _?.doc?LW.stringifyPair(this,_,w,$):JSON.stringify(this)}}bW.Pair=C1;bW.createPair=NW});var Q3=P((CW)=>{var Aw=p(),b8=C0(),T1=S0();function SW(_,w,$){return(w.inFlow??_.flow?ZW:PW)(_,w,$)}function PW({comment:_,items:w},$,{blockItemPrefix:X,flowChars:J,itemIndent:Y,onChompKeep:W,onComment:q}){let{indent:G,options:{commentString:Q}}=$,H=Object.assign({},$,{indent:Y,type:null}),B=!1,D=[];for(let A=0;A<w.length;++A){let U=w[A],V=null;if(Aw.isNode(U)){if(!B&&U.spaceBefore)D.push("");if(I1($,D,U.commentBefore,B),U.comment)V=U.comment}else if(Aw.isPair(U)){let f=Aw.isNode(U.key)?U.key:null;if(f){if(!B&&f.spaceBefore)D.push("");I1($,D,f.commentBefore,B)}}B=!1;let R=b8.stringify(U,H,()=>V=null,()=>B=!0);if(V)R+=T1.lineComment(R,Y,Q(V));if(B&&V)B=!1;D.push(X+R)}let z;if(D.length===0)z=J.start+J.end;else{z=D[0];for(let A=1;A<D.length;++A){let U=D[A];z+=U?`
46
+ ${G}${U}`:`
47
+ `}}if(_){if(z+=`
48
+ `+T1.indentComment(Q(_),G),q)q()}else if(B&&W)W();return z}function ZW({items:_},w,{flowChars:$,itemIndent:X}){let{indent:J,indentStep:Y,flowCollectionPadding:W,options:{commentString:q}}=w;X+=Y;let G=Object.assign({},w,{indent:X,inFlow:!0,type:null}),Q=!1,H=0,B=[];for(let A=0;A<_.length;++A){let U=_[A],V=null;if(Aw.isNode(U)){if(U.spaceBefore)B.push("");if(I1(w,B,U.commentBefore,!1),U.comment)V=U.comment}else if(Aw.isPair(U)){let f=Aw.isNode(U.key)?U.key:null;if(f){if(f.spaceBefore)B.push("");if(I1(w,B,f.commentBefore,!1),f.comment)Q=!0}let S=Aw.isNode(U.value)?U.value:null;if(S){if(S.comment)V=S.comment;if(S.commentBefore)Q=!0}else if(U.value==null&&f?.comment)V=f.comment}if(V)Q=!0;let R=b8.stringify(U,G,()=>V=null);if(Q||(Q=B.length>H||R.includes(`
49
+ `)),A<_.length-1)R+=",";else if(w.options.trailingComma){if(w.options.lineWidth>0)Q||(Q=B.reduce((f,S)=>f+S.length+2,2)+(R.length+2)>w.options.lineWidth);if(Q)R+=","}if(V)R+=T1.lineComment(R,X,q(V));B.push(R),H=B.length}let{start:D,end:z}=$;if(B.length===0)return D+z;else{if(!Q){let A=B.reduce((U,V)=>U+V.length+2,2);Q=w.options.lineWidth>0&&A>w.options.lineWidth}if(Q){let A=D;for(let U of B)A+=U?`
50
+ ${Y}${J}${U}`:`
51
+ `;return`${A}
52
+ ${J}${z}`}else return`${D}${W}${B.join(" ")}${W}${z}`}}function I1({indent:_,options:{commentString:w}},$,X,J){if(X&&J)X=X.replace(/^\n+/,"");if(X){let Y=T1.indentComment(w(X),_);$.push(Y.trimStart())}}CW.stringifyCollection=SW});var ww=P((yW)=>{var IW=Q3(),gW=G3(),kW=L1(),_w=p(),g1=e_(),hW=$_();function I0(_,w){let $=_w.isScalar(w)?w.value:w;for(let X of _)if(_w.isPair(X)){if(X.key===w||X.key===$)return X;if(_w.isScalar(X.key)&&X.key.value===$)return X}return}class j8 extends kW.Collection{static get tagName(){return"tag:yaml.org,2002:map"}constructor(_){super(_w.MAP,_);this.items=[]}static from(_,w,$){let{keepUndefined:X,replacer:J}=$,Y=new this(_),W=(q,G)=>{if(typeof J==="function")G=J.call(w,q,G);else if(Array.isArray(J)&&!J.includes(q))return;if(G!==void 0||X)Y.items.push(g1.createPair(q,G,$))};if(w instanceof Map)for(let[q,G]of w)W(q,G);else if(w&&typeof w==="object")for(let q of Object.keys(w))W(q,w[q]);if(typeof _.sortMapEntries==="function")Y.items.sort(_.sortMapEntries);return Y}add(_,w){let $;if(_w.isPair(_))$=_;else if(!_||typeof _!=="object"||!("key"in _))$=new g1.Pair(_,_?.value);else $=new g1.Pair(_.key,_.value);let X=I0(this.items,$.key),J=this.schema?.sortMapEntries;if(X){if(!w)throw Error(`Key ${$.key} already set`);if(_w.isScalar(X.value)&&hW.isScalarValue($.value))X.value.value=$.value;else X.value=$.value}else if(J){let Y=this.items.findIndex((W)=>J($,W)<0);if(Y===-1)this.items.push($);else this.items.splice(Y,0,$)}else this.items.push($)}delete(_){let w=I0(this.items,_);if(!w)return!1;return this.items.splice(this.items.indexOf(w),1).length>0}get(_,w){let X=I0(this.items,_)?.value;return(!w&&_w.isScalar(X)?X.value:X)??void 0}has(_){return!!I0(this.items,_)}set(_,w){this.add(new g1.Pair(_,w),!0)}toJSON(_,w,$){let X=$?new $:w?.mapAsMap?new Map:{};if(w?.onCreate)w.onCreate(X);for(let J of this.items)gW.addPairToJSMap(w,X,J);return X}toString(_,w,$){if(!_)return JSON.stringify(this);for(let X of this.items)if(!_w.isPair(X))throw Error(`Map items must all be pairs; found ${JSON.stringify(X)} instead`);if(!_.allNullValues&&this.hasAllNullValues(!1))_=Object.assign({},_,{allNullValues:!0});return IW.stringifyCollection(this,_,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:_.indent||"",onChompKeep:$,onComment:w})}}yW.YAMLMap=j8;yW.findPair=I0});var iw=P((lW)=>{var mW=p(),E8=ww(),uW={collection:"map",default:!0,nodeClass:E8.YAMLMap,tag:"tag:yaml.org,2002:map",resolve(_,w){if(!mW.isMap(_))w("Expected a mapping for this tag");return _},createNode:(_,w,$)=>E8.YAMLMap.from(_,w,$)};lW.map=uW});var $w=P((aW)=>{var dW=E0(),pW=Q3(),iW=L1(),h1=p(),rW=$_(),nW=o_();class S8 extends iW.Collection{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(_){super(h1.SEQ,_);this.items=[]}add(_){this.items.push(_)}delete(_){let w=k1(_);if(typeof w!=="number")return!1;return this.items.splice(w,1).length>0}get(_,w){let $=k1(_);if(typeof $!=="number")return;let X=this.items[$];return!w&&h1.isScalar(X)?X.value:X}has(_){let w=k1(_);return typeof w==="number"&&w<this.items.length}set(_,w){let $=k1(_);if(typeof $!=="number")throw Error(`Expected a valid index, not ${_}.`);let X=this.items[$];if(h1.isScalar(X)&&rW.isScalarValue(w))X.value=w;else this.items[$]=w}toJSON(_,w){let $=[];if(w?.onCreate)w.onCreate($);let X=0;for(let J of this.items)$.push(nW.toJS(J,String(X++),w));return $}toString(_,w,$){if(!_)return JSON.stringify(this);return pW.stringifyCollection(this,_,{blockItemPrefix:"- ",flowChars:{start:"[",end:"]"},itemIndent:(_.indent||"")+" ",onChompKeep:$,onComment:w})}static from(_,w,$){let{replacer:X}=$,J=new this(_);if(w&&Symbol.iterator in Object(w)){let Y=0;for(let W of w){if(typeof X==="function"){let q=w instanceof Set?W:String(Y++);W=X.call(w,q,W)}J.items.push(dW.createNode(W,void 0,$))}}return J}}function k1(_){let w=h1.isScalar(_)?_.value:_;if(w&&typeof w==="string")w=Number(w);return typeof w==="number"&&Number.isInteger(w)&&w>=0?w:null}aW.YAMLSeq=S8});var rw=P((eW)=>{var sW=p(),P8=$w(),tW={collection:"seq",default:!0,nodeClass:P8.YAMLSeq,tag:"tag:yaml.org,2002:seq",resolve(_,w){if(!sW.isSeq(_))w("Expected a sequence for this tag");return _},createNode:(_,w,$)=>P8.YAMLSeq.from(_,w,$)};eW.seq=tW});var g0=P((Xq)=>{var wq=Z0(),$q={identify:(_)=>typeof _==="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:(_)=>_,stringify(_,w,$,X){return w=Object.assign({actualString:!0},w),wq.stringifyString(_,w,$,X)}};Xq.string=$q});var y1=P((Yq)=>{var Z8=$_(),C8={identify:(_)=>_==null,createNode:()=>new Z8.Scalar(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new Z8.Scalar(null),stringify:({source:_},w)=>typeof _==="string"&&C8.test.test(_)?_:w.options.nullStr};Yq.nullTag=C8});var H3=P((Gq)=>{var qq=$_(),T8={identify:(_)=>typeof _==="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:(_)=>new qq.Scalar(_[0]==="t"||_[0]==="T"),stringify({source:_,value:w},$){if(_&&T8.test.test(_)){let X=_[0]==="t"||_[0]==="T";if(w===X)return _}return w?$.options.trueStr:$.options.falseStr}};Gq.boolTag=T8});var nw=P((Dq)=>{function Hq({format:_,minFractionDigits:w,tag:$,value:X}){if(typeof X==="bigint")return String(X);let J=typeof X==="number"?X:Number(X);if(!isFinite(J))return isNaN(J)?".nan":J<0?"-.inf":".inf";let Y=Object.is(X,-0)?"-0":JSON.stringify(X);if(!_&&w&&(!$||$==="tag:yaml.org,2002:float")&&/^-?\d/.test(Y)&&!Y.includes("e")){let W=Y.indexOf(".");if(W<0)W=Y.length,Y+=".";let q=w-(Y.length-W-1);while(q-- >0)Y+="0"}return Y}Dq.stringifyNumber=Hq});var B3=P((Mq)=>{var Uq=$_(),D3=nw(),zq={identify:(_)=>typeof _==="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:(_)=>_.slice(-3).toLowerCase()==="nan"?NaN:_[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:D3.stringifyNumber},Vq={identify:(_)=>typeof _==="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:(_)=>parseFloat(_),stringify(_){let w=Number(_.value);return isFinite(w)?w.toExponential():D3.stringifyNumber(_)}},Aq={identify:(_)=>typeof _==="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,resolve(_){let w=new Uq.Scalar(parseFloat(_)),$=_.indexOf(".");if($!==-1&&_[_.length-1]==="0")w.minFractionDigits=_.length-$-1;return w},stringify:D3.stringifyNumber};Mq.float=Aq;Mq.floatExp=Vq;Mq.floatNaN=zq});var z3=P((Nq)=>{var I8=nw(),v1=(_)=>typeof _==="bigint"||Number.isInteger(_),U3=(_,w,$,{intAsBigInt:X})=>X?BigInt(_):parseInt(_.substring(w),$);function g8(_,w,$){let{value:X}=_;if(v1(X)&&X>=0)return $+X.toString(w);return I8.stringifyNumber(_)}var fq={identify:(_)=>v1(_)&&_>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(_,w,$)=>U3(_,2,8,$),stringify:(_)=>g8(_,8,"0o")},Lq={identify:v1,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(_,w,$)=>U3(_,0,10,$),stringify:I8.stringifyNumber},Kq={identify:(_)=>v1(_)&&_>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(_,w,$)=>U3(_,2,16,$),stringify:(_)=>g8(_,16,"0x")};Nq.int=Lq;Nq.intHex=Kq;Nq.intOct=fq});var k8=P((gq)=>{var Sq=iw(),Pq=y1(),Zq=rw(),Cq=g0(),Tq=H3(),V3=B3(),A3=z3(),Iq=[Sq.map,Zq.seq,Cq.string,Pq.nullTag,Tq.boolTag,A3.intOct,A3.int,A3.intHex,V3.floatNaN,V3.floatExp,V3.float];gq.schema=Iq});var y8=P((lq)=>{var hq=$_(),yq=iw(),vq=rw();function h8(_){return typeof _==="bigint"||Number.isInteger(_)}var x1=({value:_})=>JSON.stringify(_),xq=[{identify:(_)=>typeof _==="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:(_)=>_,stringify:x1},{identify:(_)=>_==null,createNode:()=>new hq.Scalar(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:x1},{identify:(_)=>typeof _==="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^true$|^false$/,resolve:(_)=>_==="true",stringify:x1},{identify:h8,default:!0,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:(_,w,{intAsBigInt:$})=>$?BigInt(_):parseInt(_,10),stringify:({value:_})=>h8(_)?_.toString():JSON.stringify(_)},{identify:(_)=>typeof _==="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:(_)=>parseFloat(_),stringify:x1}],mq={default:!0,tag:"",test:/^/,resolve(_,w){return w(`Unresolved plain scalar ${JSON.stringify(_)}`),_}},uq=[yq.map,vq.seq].concat(xq,mq);lq.schema=uq});var R3=P((iq)=>{var k0=_1("buffer"),M3=$_(),dq=Z0(),pq={identify:(_)=>_ instanceof Uint8Array,default:!1,tag:"tag:yaml.org,2002:binary",resolve(_,w){if(typeof k0.Buffer==="function")return k0.Buffer.from(_,"base64");else if(typeof atob==="function"){let $=atob(_.replace(/[\n\r]/g,"")),X=new Uint8Array($.length);for(let J=0;J<$.length;++J)X[J]=$.charCodeAt(J);return X}else return w("This environment does not support reading binary tags; either Buffer or atob is required"),_},stringify({comment:_,type:w,value:$},X,J,Y){if(!$)return"";let W=$,q;if(typeof k0.Buffer==="function")q=W instanceof k0.Buffer?W.toString("base64"):k0.Buffer.from(W.buffer).toString("base64");else if(typeof btoa==="function"){let G="";for(let Q=0;Q<W.length;++Q)G+=String.fromCharCode(W[Q]);q=btoa(G)}else throw Error("This environment does not support writing binary tags; either Buffer or btoa is required");if(w??(w=M3.Scalar.BLOCK_LITERAL),w!==M3.Scalar.QUOTE_DOUBLE){let G=Math.max(X.options.lineWidth-X.indent.length,X.options.minContentWidth),Q=Math.ceil(q.length/G),H=Array(Q);for(let B=0,D=0;B<Q;++B,D+=G)H[B]=q.substr(D,G);q=H.join(w===M3.Scalar.BLOCK_LITERAL?`
53
+ `:" ")}return dq.stringifyString({comment:_,type:w,value:q},X,J,Y)}};iq.binary=pq});var u1=P((sq)=>{var m1=p(),O3=e_(),nq=$_(),aq=$w();function v8(_,w){if(m1.isSeq(_))for(let $=0;$<_.items.length;++$){let X=_.items[$];if(m1.isPair(X))continue;else if(m1.isMap(X)){if(X.items.length>1)w("Each pair must have its own sequence indicator");let J=X.items[0]||new O3.Pair(new nq.Scalar(null));if(X.commentBefore)J.key.commentBefore=J.key.commentBefore?`${X.commentBefore}
54
+ ${J.key.commentBefore}`:X.commentBefore;if(X.comment){let Y=J.value??J.key;Y.comment=Y.comment?`${X.comment}
55
+ ${Y.comment}`:X.comment}X=J}_.items[$]=m1.isPair(X)?X:new O3.Pair(X)}else w("Expected a sequence for this tag");return _}function x8(_,w,$){let{replacer:X}=$,J=new aq.YAMLSeq(_);J.tag="tag:yaml.org,2002:pairs";let Y=0;if(w&&Symbol.iterator in Object(w))for(let W of w){if(typeof X==="function")W=X.call(w,String(Y++),W);let q,G;if(Array.isArray(W))if(W.length===2)q=W[0],G=W[1];else throw TypeError(`Expected [key, value] tuple: ${W}`);else if(W&&W instanceof Object){let Q=Object.keys(W);if(Q.length===1)q=Q[0],G=W[q];else throw TypeError(`Expected tuple with one key, not ${Q.length} keys`)}else q=W;J.items.push(O3.createPair(q,G,$))}return J}var oq={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:v8,createNode:x8};sq.createPairs=x8;sq.pairs=oq;sq.resolvePairs=v8});var f3=P((XG)=>{var m8=p(),F3=o_(),h0=ww(),wG=$w(),u8=u1();class Mw extends wG.YAMLSeq{constructor(){super();this.add=h0.YAMLMap.prototype.add.bind(this),this.delete=h0.YAMLMap.prototype.delete.bind(this),this.get=h0.YAMLMap.prototype.get.bind(this),this.has=h0.YAMLMap.prototype.has.bind(this),this.set=h0.YAMLMap.prototype.set.bind(this),this.tag=Mw.tag}toJSON(_,w){if(!w)return super.toJSON(_);let $=new Map;if(w?.onCreate)w.onCreate($);for(let X of this.items){let J,Y;if(m8.isPair(X))J=F3.toJS(X.key,"",w),Y=F3.toJS(X.value,J,w);else J=F3.toJS(X,"",w);if($.has(J))throw Error("Ordered maps must not include duplicate keys");$.set(J,Y)}return $}static from(_,w,$){let X=u8.createPairs(_,w,$),J=new this;return J.items=X.items,J}}Mw.tag="tag:yaml.org,2002:omap";var $G={collection:"seq",identify:(_)=>_ instanceof Map,nodeClass:Mw,default:!1,tag:"tag:yaml.org,2002:omap",resolve(_,w){let $=u8.resolvePairs(_,w),X=[];for(let{key:J}of $.items)if(m8.isScalar(J))if(X.includes(J.value))w(`Ordered maps must not include duplicate keys: ${J.value}`);else X.push(J.value);return Object.assign(new Mw,$)},createNode:(_,w,$)=>Mw.from(_,w,$)};XG.YAMLOMap=Mw;XG.omap=$G});var i8=P((WG)=>{var l8=$_();function c8({value:_,source:w},$){if(w&&(_?d8:p8).test.test(w))return w;return _?$.options.trueStr:$.options.falseStr}var d8={identify:(_)=>_===!0,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:()=>new l8.Scalar(!0),stringify:c8},p8={identify:(_)=>_===!1,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:()=>new l8.Scalar(!1),stringify:c8};WG.falseTag=p8;WG.trueTag=d8});var r8=P((UG)=>{var QG=$_(),L3=nw(),HG={identify:(_)=>typeof _==="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:(_)=>_.slice(-3).toLowerCase()==="nan"?NaN:_[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:L3.stringifyNumber},DG={identify:(_)=>typeof _==="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:(_)=>parseFloat(_.replace(/_/g,"")),stringify(_){let w=Number(_.value);return isFinite(w)?w.toExponential():L3.stringifyNumber(_)}},BG={identify:(_)=>typeof _==="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve(_){let w=new QG.Scalar(parseFloat(_.replace(/_/g,""))),$=_.indexOf(".");if($!==-1){let X=_.substring($+1).replace(/_/g,"");if(X[X.length-1]==="0")w.minFractionDigits=X.length}return w},stringify:L3.stringifyNumber};UG.float=BG;UG.floatExp=DG;UG.floatNaN=HG});var a8=P((fG)=>{var n8=nw(),y0=(_)=>typeof _==="bigint"||Number.isInteger(_);function l1(_,w,$,{intAsBigInt:X}){let J=_[0];if(J==="-"||J==="+")w+=1;if(_=_.substring(w).replace(/_/g,""),X){switch($){case 2:_=`0b${_}`;break;case 8:_=`0o${_}`;break;case 16:_=`0x${_}`;break}let W=BigInt(_);return J==="-"?BigInt(-1)*W:W}let Y=parseInt(_,$);return J==="-"?-1*Y:Y}function K3(_,w,$){let{value:X}=_;if(y0(X)){let J=X.toString(w);return X<0?"-"+$+J.substr(1):$+J}return n8.stringifyNumber(_)}var MG={identify:y0,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(_,w,$)=>l1(_,2,2,$),stringify:(_)=>K3(_,2,"0b")},RG={identify:y0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(_,w,$)=>l1(_,1,8,$),stringify:(_)=>K3(_,8,"0")},OG={identify:y0,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(_,w,$)=>l1(_,0,10,$),stringify:n8.stringifyNumber},FG={identify:y0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(_,w,$)=>l1(_,2,16,$),stringify:(_)=>K3(_,16,"0x")};fG.int=OG;fG.intBin=MG;fG.intHex=FG;fG.intOct=RG});var N3=P((EG)=>{var p1=p(),c1=e_(),d1=ww();class Rw extends d1.YAMLMap{constructor(_){super(_);this.tag=Rw.tag}add(_){let w;if(p1.isPair(_))w=_;else if(_&&typeof _==="object"&&"key"in _&&"value"in _&&_.value===null)w=new c1.Pair(_.key,null);else w=new c1.Pair(_,null);if(!d1.findPair(this.items,w.key))this.items.push(w)}get(_,w){let $=d1.findPair(this.items,_);return!w&&p1.isPair($)?p1.isScalar($.key)?$.key.value:$.key:$}set(_,w){if(typeof w!=="boolean")throw Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof w}`);let $=d1.findPair(this.items,_);if($&&!w)this.items.splice(this.items.indexOf($),1);else if(!$&&w)this.items.push(new c1.Pair(_))}toJSON(_,w){return super.toJSON(_,w,Set)}toString(_,w,$){if(!_)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},_,{allNullValues:!0}),w,$);else throw Error("Set items must all have null values")}static from(_,w,$){let{replacer:X}=$,J=new this(_);if(w&&Symbol.iterator in Object(w))for(let Y of w){if(typeof X==="function")Y=X.call(w,Y,Y);J.items.push(c1.createPair(Y,null,$))}return J}}Rw.tag="tag:yaml.org,2002:set";var jG={collection:"map",identify:(_)=>_ instanceof Set,nodeClass:Rw,default:!1,tag:"tag:yaml.org,2002:set",createNode:(_,w,$)=>Rw.from(_,w,$),resolve(_,w){if(p1.isMap(_))if(_.hasAllNullValues(!0))return Object.assign(new Rw,_);else w("Set items must all have null values");else w("Expected a mapping for this tag");return _}};EG.YAMLSet=Rw;EG.set=jG});var j3=P((IG)=>{var ZG=nw();function b3(_,w){let $=_[0],X=$==="-"||$==="+"?_.substring(1):_,J=(W)=>w?BigInt(W):Number(W),Y=X.replace(/_/g,"").split(":").reduce((W,q)=>W*J(60)+J(q),J(0));return $==="-"?J(-1)*Y:Y}function o8(_){let{value:w}=_,$=(W)=>W;if(typeof w==="bigint")$=(W)=>BigInt(W);else if(isNaN(w)||!isFinite(w))return ZG.stringifyNumber(_);let X="";if(w<0)X="-",w*=$(-1);let J=$(60),Y=[w%J];if(w<60)Y.unshift(0);else if(w=(w-Y[0])/J,Y.unshift(w%J),w>=60)w=(w-Y[0])/J,Y.unshift(w);return X+Y.map((W)=>String(W).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}var CG={identify:(_)=>typeof _==="bigint"||Number.isInteger(_),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:(_,w,{intAsBigInt:$})=>b3(_,$),stringify:o8},TG={identify:(_)=>typeof _==="number",default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:(_)=>b3(_,!1),stringify:o8},s8={identify:(_)=>_ instanceof Date,default:!0,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve(_){let w=_.match(s8.test);if(!w)throw Error("!!timestamp expects a date, starting with yyyy-mm-dd");let[,$,X,J,Y,W,q]=w.map(Number),G=w[7]?Number((w[7]+"00").substr(1,3)):0,Q=Date.UTC($,X-1,J,Y||0,W||0,q||0,G),H=w[8];if(H&&H!=="Z"){let B=b3(H,!1);if(Math.abs(B)<30)B*=60;Q-=60000*B}return new Date(Q)},stringify:({value:_})=>_?.toISOString().replace(/(T00:00:00)?\.000Z$/,"")??""};IG.floatTime=TG;IG.intTime=CG;IG.timestamp=s8});var e8=P((rG)=>{var yG=iw(),vG=y1(),xG=rw(),mG=g0(),uG=R3(),t8=i8(),E3=r8(),i1=a8(),lG=P1(),cG=f3(),dG=u1(),pG=N3(),S3=j3(),iG=[yG.map,xG.seq,mG.string,vG.nullTag,t8.trueTag,t8.falseTag,i1.intBin,i1.intOct,i1.int,i1.intHex,E3.floatNaN,E3.floatExp,E3.float,uG.binary,lG.merge,cG.omap,dG.pairs,pG.set,S3.intTime,S3.floatTime,S3.timestamp];rG.schema=iG});var Q5=P(($Q)=>{var X5=iw(),aG=y1(),J5=rw(),oG=g0(),sG=H3(),P3=B3(),Z3=z3(),tG=k8(),eG=y8(),Y5=R3(),v0=P1(),W5=f3(),q5=u1(),_5=e8(),G5=N3(),r1=j3(),w5=new Map([["core",tG.schema],["failsafe",[X5.map,J5.seq,oG.string]],["json",eG.schema],["yaml11",_5.schema],["yaml-1.1",_5.schema]]),$5={binary:Y5.binary,bool:sG.boolTag,float:P3.float,floatExp:P3.floatExp,floatNaN:P3.floatNaN,floatTime:r1.floatTime,int:Z3.int,intHex:Z3.intHex,intOct:Z3.intOct,intTime:r1.intTime,map:X5.map,merge:v0.merge,null:aG.nullTag,omap:W5.omap,pairs:q5.pairs,seq:J5.seq,set:G5.set,timestamp:r1.timestamp},_Q={"tag:yaml.org,2002:binary":Y5.binary,"tag:yaml.org,2002:merge":v0.merge,"tag:yaml.org,2002:omap":W5.omap,"tag:yaml.org,2002:pairs":q5.pairs,"tag:yaml.org,2002:set":G5.set,"tag:yaml.org,2002:timestamp":r1.timestamp};function wQ(_,w,$){let X=w5.get(w);if(X&&!_)return $&&!X.includes(v0.merge)?X.concat(v0.merge):X.slice();let J=X;if(!J)if(Array.isArray(_))J=[];else{let Y=Array.from(w5.keys()).filter((W)=>W!=="yaml11").map((W)=>JSON.stringify(W)).join(", ");throw Error(`Unknown schema "${w}"; use one of ${Y} or define customTags array`)}if(Array.isArray(_))for(let Y of _)J=J.concat(Y);else if(typeof _==="function")J=_(J.slice());if($)J=J.concat(v0.merge);return J.reduce((Y,W)=>{let q=typeof W==="string"?$5[W]:W;if(!q){let G=JSON.stringify(W),Q=Object.keys($5).map((H)=>JSON.stringify(H)).join(", ");throw Error(`Unknown custom tag ${G}; use one of ${Q}`)}if(!Y.includes(q))Y.push(q);return Y},[])}$Q.coreKnownTags=_Q;$Q.getTags=wQ});var I3=P((QQ)=>{var C3=p(),YQ=iw(),WQ=rw(),qQ=g0(),n1=Q5(),GQ=(_,w)=>_.key<w.key?-1:_.key>w.key?1:0;class T3{constructor({compat:_,customTags:w,merge:$,resolveKnownTags:X,schema:J,sortMapEntries:Y,toStringDefaults:W}){this.compat=Array.isArray(_)?n1.getTags(_,"compat"):_?n1.getTags(null,_):null,this.name=typeof J==="string"&&J||"core",this.knownTags=X?n1.coreKnownTags:{},this.tags=n1.getTags(w,this.name,$),this.toStringOptions=W??null,Object.defineProperty(this,C3.MAP,{value:YQ.map}),Object.defineProperty(this,C3.SCALAR,{value:qQ.string}),Object.defineProperty(this,C3.SEQ,{value:WQ.seq}),this.sortMapEntries=typeof Y==="function"?Y:Y===!0?GQ:null}clone(){let _=Object.create(T3.prototype,Object.getOwnPropertyDescriptors(this));return _.tags=this.tags.slice(),_}}QQ.Schema=T3});var H5=P((UQ)=>{var DQ=p(),g3=C0(),x0=S0();function BQ(_,w){let $=[],X=w.directives===!0;if(w.directives!==!1&&_.directives){let G=_.directives.toString(_);if(G)$.push(G),X=!0;else if(_.directives.docStart)X=!0}if(X)$.push("---");let J=g3.createStringifyContext(_,w),{commentString:Y}=J.options;if(_.commentBefore){if($.length!==1)$.unshift("");let G=Y(_.commentBefore);$.unshift(x0.indentComment(G,""))}let W=!1,q=null;if(_.contents){if(DQ.isNode(_.contents)){if(_.contents.spaceBefore&&X)$.push("");if(_.contents.commentBefore){let H=Y(_.contents.commentBefore);$.push(x0.indentComment(H,""))}J.forceBlockIndent=!!_.comment,q=_.contents.comment}let G=q?void 0:()=>W=!0,Q=g3.stringify(_.contents,J,()=>q=null,G);if(q)Q+=x0.lineComment(Q,"",Y(q));if((Q[0]==="|"||Q[0]===">")&&$[$.length-1]==="---")$[$.length-1]=`--- ${Q}`;else $.push(Q)}else $.push(g3.stringify(_.contents,J));if(_.directives?.docEnd)if(_.comment){let G=Y(_.comment);if(G.includes(`
56
+ `))$.push("..."),$.push(x0.indentComment(G,""));else $.push(`... ${G}`)}else $.push("...");else{let G=_.comment;if(G&&W)G=G.replace(/^\n+/,"");if(G){if((!W||q)&&$[$.length-1]!=="")$.push("");$.push(x0.indentComment(Y(G),""))}}return $.join(`
57
+ `)+`
58
+ `}UQ.stringifyDocument=BQ});var m0=P((LQ)=>{var VQ=j0(),aw=L1(),A_=p(),AQ=e_(),MQ=o_(),RQ=I3(),OQ=H5(),k3=O1(),FQ=_3(),fQ=E0(),h3=e2();class y3{constructor(_,w,$){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,A_.NODE_TYPE,{value:A_.DOC});let X=null;if(typeof w==="function"||Array.isArray(w))X=w;else if($===void 0&&w)$=w,w=void 0;let J=Object.assign({intAsBigInt:!1,keepSourceTokens:!1,logLevel:"warn",prettyErrors:!0,strict:!0,stringKeys:!1,uniqueKeys:!0,version:"1.2"},$);this.options=J;let{version:Y}=J;if($?._directives){if(this.directives=$._directives.atDocument(),this.directives.yaml.explicit)Y=this.directives.yaml.version}else this.directives=new h3.Directives({version:Y});this.setSchema(Y,$),this.contents=_===void 0?null:this.createNode(_,X,$)}clone(){let _=Object.create(y3.prototype,{[A_.NODE_TYPE]:{value:A_.DOC}});if(_.commentBefore=this.commentBefore,_.comment=this.comment,_.errors=this.errors.slice(),_.warnings=this.warnings.slice(),_.options=Object.assign({},this.options),this.directives)_.directives=this.directives.clone();if(_.schema=this.schema.clone(),_.contents=A_.isNode(this.contents)?this.contents.clone(_.schema):this.contents,this.range)_.range=this.range.slice();return _}add(_){if(ow(this.contents))this.contents.add(_)}addIn(_,w){if(ow(this.contents))this.contents.addIn(_,w)}createAlias(_,w){if(!_.anchor){let $=k3.anchorNames(this);_.anchor=!w||$.has(w)?k3.findNewAnchor(w||"a",$):w}return new VQ.Alias(_.anchor)}createNode(_,w,$){let X=void 0;if(typeof w==="function")_=w.call({"":_},"",_),X=w;else if(Array.isArray(w)){let U=(R)=>typeof R==="number"||R instanceof String||R instanceof Number,V=w.filter(U).map(String);if(V.length>0)w=w.concat(V);X=w}else if($===void 0&&w)$=w,w=void 0;let{aliasDuplicateObjects:J,anchorPrefix:Y,flow:W,keepUndefined:q,onTagObj:G,tag:Q}=$??{},{onAnchor:H,setAnchors:B,sourceObjects:D}=k3.createNodeAnchors(this,Y||"a"),z={aliasDuplicateObjects:J??!0,keepUndefined:q??!1,onAnchor:H,onTagObj:G,replacer:X,schema:this.schema,sourceObjects:D},A=fQ.createNode(_,Q,z);if(W&&A_.isCollection(A))A.flow=!0;return B(),A}createPair(_,w,$={}){let X=this.createNode(_,null,$),J=this.createNode(w,null,$);return new AQ.Pair(X,J)}delete(_){return ow(this.contents)?this.contents.delete(_):!1}deleteIn(_){if(aw.isEmptyPath(_)){if(this.contents==null)return!1;return this.contents=null,!0}return ow(this.contents)?this.contents.deleteIn(_):!1}get(_,w){return A_.isCollection(this.contents)?this.contents.get(_,w):void 0}getIn(_,w){if(aw.isEmptyPath(_))return!w&&A_.isScalar(this.contents)?this.contents.value:this.contents;return A_.isCollection(this.contents)?this.contents.getIn(_,w):void 0}has(_){return A_.isCollection(this.contents)?this.contents.has(_):!1}hasIn(_){if(aw.isEmptyPath(_))return this.contents!==void 0;return A_.isCollection(this.contents)?this.contents.hasIn(_):!1}set(_,w){if(this.contents==null)this.contents=aw.collectionFromPath(this.schema,[_],w);else if(ow(this.contents))this.contents.set(_,w)}setIn(_,w){if(aw.isEmptyPath(_))this.contents=w;else if(this.contents==null)this.contents=aw.collectionFromPath(this.schema,Array.from(_),w);else if(ow(this.contents))this.contents.setIn(_,w)}setSchema(_,w={}){if(typeof _==="number")_=String(_);let $;switch(_){case"1.1":if(this.directives)this.directives.yaml.version="1.1";else this.directives=new h3.Directives({version:"1.1"});$={resolveKnownTags:!1,schema:"yaml-1.1"};break;case"1.2":case"next":if(this.directives)this.directives.yaml.version=_;else this.directives=new h3.Directives({version:_});$={resolveKnownTags:!0,schema:"core"};break;case null:if(this.directives)delete this.directives;$=null;break;default:{let X=JSON.stringify(_);throw Error(`Expected '1.1', '1.2' or null as first argument, but found: ${X}`)}}if(w.schema instanceof Object)this.schema=w.schema;else if($)this.schema=new RQ.Schema(Object.assign($,w));else throw Error("With a null YAML version, the { schema: Schema } option is required")}toJS({json:_,jsonArg:w,mapAsMap:$,maxAliasCount:X,onAnchor:J,reviver:Y}={}){let W={anchors:new Map,doc:this,keep:!_,mapAsMap:$===!0,mapKeyWarned:!1,maxAliasCount:typeof X==="number"?X:100},q=MQ.toJS(this.contents,w??"",W);if(typeof J==="function")for(let{count:G,res:Q}of W.anchors.values())J(Q,G);return typeof Y==="function"?FQ.applyReviver(Y,{"":q},"",q):q}toJSON(_,w){return this.toJS({json:!0,jsonArg:_,mapAsMap:!1,onAnchor:w})}toString(_={}){if(this.errors.length>0)throw Error("Document with errors cannot be stringified");if("indent"in _&&(!Number.isInteger(_.indent)||Number(_.indent)<=0)){let w=JSON.stringify(_.indent);throw Error(`"indent" option must be a positive integer, not ${w}`)}return OQ.stringifyDocument(this,_)}}function ow(_){if(A_.isCollection(_))return!0;throw Error("Expected a YAML collection as document contents")}LQ.Document=y3});var u0=P((bQ)=>{class a1 extends Error{constructor(_,w,$,X){super();this.name=_,this.code=$,this.message=X,this.pos=w}}class D5 extends a1{constructor(_,w,$){super("YAMLParseError",_,w,$)}}class B5 extends a1{constructor(_,w,$){super("YAMLWarning",_,w,$)}}var NQ=(_,w)=>($)=>{if($.pos[0]===-1)return;$.linePos=$.pos.map((q)=>w.linePos(q));let{line:X,col:J}=$.linePos[0];$.message+=` at line ${X}, column ${J}`;let Y=J-1,W=_.substring(w.lineStarts[X-1],w.lineStarts[X]).replace(/[\n\r]+$/,"");if(Y>=60&&W.length>80){let q=Math.min(Y-39,W.length-79);W="\u2026"+W.substring(q),Y-=q-1}if(W.length>80)W=W.substring(0,79)+"\u2026";if(X>1&&/^ *$/.test(W.substring(0,Y))){let q=_.substring(w.lineStarts[X-2],w.lineStarts[X-1]);if(q.length>80)q=q.substring(0,79)+`\u2026
59
+ `;W=q+W}if(/[^ ]/.test(W)){let q=1,G=$.linePos[1];if(G?.line===X&&G.col>J)q=Math.max(1,Math.min(G.col-J,80-Y));let Q=" ".repeat(Y)+"^".repeat(q);$.message+=`:
60
+
61
+ ${W}
62
+ ${Q}
63
+ `}};bQ.YAMLError=a1;bQ.YAMLParseError=D5;bQ.YAMLWarning=B5;bQ.prettifyError=NQ});var l0=P((CQ)=>{function ZQ(_,{flow:w,indicator:$,next:X,offset:J,onError:Y,parentIndent:W,startOnNewline:q}){let G=!1,Q=q,H=q,B="",D="",z=!1,A=!1,U=null,V=null,R=null,f=null,S=null,K=null,j=null;for(let E of _){if(A){if(E.type!=="space"&&E.type!=="newline"&&E.type!=="comma")Y(E.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space");A=!1}if(U){if(Q&&E.type!=="comment"&&E.type!=="newline")Y(U,"TAB_AS_INDENT","Tabs are not allowed as indentation");U=null}switch(E.type){case"space":if(!w&&($!=="doc-start"||X?.type!=="flow-collection")&&E.source.includes("\t"))U=E;H=!0;break;case"comment":{if(!H)Y(E,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let C=E.source.substring(1)||" ";if(!B)B=C;else B+=D+C;D="",Q=!1;break}case"newline":if(Q){if(B)B+=E.source;else if(!K||$!=="seq-item-ind")G=!0}else D+=E.source;if(Q=!0,z=!0,V||R)f=E;H=!0;break;case"anchor":if(V)Y(E,"MULTIPLE_ANCHORS","A node can have at most one anchor");if(E.source.endsWith(":"))Y(E.offset+E.source.length-1,"BAD_ALIAS","Anchor ending in : is ambiguous",!0);V=E,j??(j=E.offset),Q=!1,H=!1,A=!0;break;case"tag":{if(R)Y(E,"MULTIPLE_TAGS","A node can have at most one tag");R=E,j??(j=E.offset),Q=!1,H=!1,A=!0;break}case $:if(V||R)Y(E,"BAD_PROP_ORDER",`Anchors and tags must be after the ${E.source} indicator`);if(K)Y(E,"UNEXPECTED_TOKEN",`Unexpected ${E.source} in ${w??"collection"}`);K=E,Q=$==="seq-item-ind"||$==="explicit-key-ind",H=!1;break;case"comma":if(w){if(S)Y(E,"UNEXPECTED_TOKEN",`Unexpected , in ${w}`);S=E,Q=!1,H=!1;break}default:Y(E,"UNEXPECTED_TOKEN",`Unexpected ${E.type} token`),Q=!1,H=!1}}let N=_[_.length-1],g=N?N.offset+N.source.length:J;if(A&&X&&X.type!=="space"&&X.type!=="newline"&&X.type!=="comma"&&(X.type!=="scalar"||X.source!==""))Y(X.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space");if(U&&(Q&&U.indent<=W||X?.type==="block-map"||X?.type==="block-seq"))Y(U,"TAB_AS_INDENT","Tabs are not allowed as indentation");return{comma:S,found:K,spaceBefore:G,comment:B,hasNewline:z,anchor:V,tag:R,newlineAfterProp:f,end:g,start:j??g}}CQ.resolveProps=ZQ});var o1=P((IQ)=>{function v3(_){if(!_)return null;switch(_.type){case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":if(_.source.includes(`
64
+ `))return!0;if(_.end){for(let w of _.end)if(w.type==="newline")return!0}return!1;case"flow-collection":for(let w of _.items){for(let $ of w.start)if($.type==="newline")return!0;if(w.sep){for(let $ of w.sep)if($.type==="newline")return!0}if(v3(w.key)||v3(w.value))return!0}return!1;default:return!0}}IQ.containsNewline=v3});var x3=P((yQ)=>{var kQ=o1();function hQ(_,w,$){if(w?.type==="flow-collection"){let X=w.end[0];if(X.indent===_&&(X.source==="]"||X.source==="}")&&kQ.containsNewline(w))$(X,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}yQ.flowIndentCheck=hQ});var m3=P((mQ)=>{var U5=p();function xQ(_,w,$){let{uniqueKeys:X}=_.options;if(X===!1)return!1;let J=typeof X==="function"?X:(Y,W)=>Y===W||U5.isScalar(Y)&&U5.isScalar(W)&&Y.value===W.value;return w.some((Y)=>J(Y.key,$))}mQ.mapIncludes=xQ});var R5=P((iQ)=>{var z5=e_(),lQ=ww(),V5=l0(),cQ=o1(),A5=x3(),dQ=m3(),M5="All mapping items must start at the same column";function pQ({composeNode:_,composeEmptyNode:w},$,X,J,Y){let q=new(Y?.nodeClass??lQ.YAMLMap)($.schema);if($.atRoot)$.atRoot=!1;let G=X.offset,Q=null;for(let H of X.items){let{start:B,key:D,sep:z,value:A}=H,U=V5.resolveProps(B,{indicator:"explicit-key-ind",next:D??z?.[0],offset:G,onError:J,parentIndent:X.indent,startOnNewline:!0}),V=!U.found;if(V){if(D){if(D.type==="block-seq")J(G,"BLOCK_AS_IMPLICIT_KEY","A block sequence may not be used as an implicit map key");else if("indent"in D&&D.indent!==X.indent)J(G,"BAD_INDENT",M5)}if(!U.anchor&&!U.tag&&!z){if(Q=U.end,U.comment)if(q.comment)q.comment+=`
65
+ `+U.comment;else q.comment=U.comment;continue}if(U.newlineAfterProp||cQ.containsNewline(D))J(D??B[B.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}else if(U.found?.indent!==X.indent)J(G,"BAD_INDENT",M5);$.atKey=!0;let R=U.end,f=D?_($,D,U,J):w($,R,B,null,U,J);if($.schema.compat)A5.flowIndentCheck(X.indent,D,J);if($.atKey=!1,dQ.mapIncludes($,q.items,f))J(R,"DUPLICATE_KEY","Map keys must be unique");let S=V5.resolveProps(z??[],{indicator:"map-value-ind",next:A,offset:f.range[2],onError:J,parentIndent:X.indent,startOnNewline:!D||D.type==="block-scalar"});if(G=S.end,S.found){if(V){if(A?.type==="block-map"&&!S.hasNewline)J(G,"BLOCK_AS_IMPLICIT_KEY","Nested mappings are not allowed in compact mappings");if($.options.strict&&U.start<S.found.offset-1024)J(f.range,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit block mapping key")}let K=A?_($,A,S,J):w($,G,z,null,S,J);if($.schema.compat)A5.flowIndentCheck(X.indent,A,J);G=K.range[2];let j=new z5.Pair(f,K);if($.options.keepSourceTokens)j.srcToken=H;q.items.push(j)}else{if(V)J(f.range,"MISSING_CHAR","Implicit map keys need to be followed by map values");if(S.comment)if(f.comment)f.comment+=`
66
+ `+S.comment;else f.comment=S.comment;let K=new z5.Pair(f);if($.options.keepSourceTokens)K.srcToken=H;q.items.push(K)}}if(Q&&Q<G)J(Q,"IMPOSSIBLE","Map comment with trailing content");return q.range=[X.offset,G,Q??G],q}iQ.resolveBlockMap=pQ});var O5=P((tQ)=>{var nQ=$w(),aQ=l0(),oQ=x3();function sQ({composeNode:_,composeEmptyNode:w},$,X,J,Y){let q=new(Y?.nodeClass??nQ.YAMLSeq)($.schema);if($.atRoot)$.atRoot=!1;if($.atKey)$.atKey=!1;let G=X.offset,Q=null;for(let{start:H,value:B}of X.items){let D=aQ.resolveProps(H,{indicator:"seq-item-ind",next:B,offset:G,onError:J,parentIndent:X.indent,startOnNewline:!0});if(!D.found)if(D.anchor||D.tag||B)if(B?.type==="block-seq")J(D.end,"BAD_INDENT","All sequence items must start at the same column");else J(G,"MISSING_CHAR","Sequence item without - indicator");else{if(Q=D.end,D.comment)q.comment=D.comment;continue}let z=B?_($,B,D,J):w($,D.end,H,null,D,J);if($.schema.compat)oQ.flowIndentCheck(X.indent,B,J);G=z.range[2],q.items.push(z)}return q.range=[X.offset,G,Q??G],q}tQ.resolveBlockSeq=sQ});var sw=P((wH)=>{function _H(_,w,$,X){let J="";if(_){let Y=!1,W="";for(let q of _){let{source:G,type:Q}=q;switch(Q){case"space":Y=!0;break;case"comment":{if($&&!Y)X(q,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let H=G.substring(1)||" ";if(!J)J=H;else J+=W+H;W="";break}case"newline":if(J)W+=G;Y=!0;break;default:X(q,"UNEXPECTED_TOKEN",`Unexpected ${Q} at node end`)}w+=G.length}}return{comment:J,offset:w}}wH.resolveEnd=_H});var L5=P((HH)=>{var XH=p(),JH=e_(),F5=ww(),YH=$w(),WH=sw(),f5=l0(),qH=o1(),GH=m3(),u3="Block collections are not allowed within flow collections",l3=(_)=>_&&(_.type==="block-map"||_.type==="block-seq");function QH({composeNode:_,composeEmptyNode:w},$,X,J,Y){let W=X.start.source==="{",q=W?"flow map":"flow sequence",Q=new(Y?.nodeClass??(W?F5.YAMLMap:YH.YAMLSeq))($.schema);Q.flow=!0;let H=$.atRoot;if(H)$.atRoot=!1;if($.atKey)$.atKey=!1;let B=X.offset+X.start.source.length;for(let V=0;V<X.items.length;++V){let R=X.items[V],{start:f,key:S,sep:K,value:j}=R,N=f5.resolveProps(f,{flow:q,indicator:"explicit-key-ind",next:S??K?.[0],offset:B,onError:J,parentIndent:X.indent,startOnNewline:!1});if(!N.found){if(!N.anchor&&!N.tag&&!K&&!j){if(V===0&&N.comma)J(N.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${q}`);else if(V<X.items.length-1)J(N.start,"UNEXPECTED_TOKEN",`Unexpected empty item in ${q}`);if(N.comment)if(Q.comment)Q.comment+=`
67
+ `+N.comment;else Q.comment=N.comment;B=N.end;continue}if(!W&&$.options.strict&&qH.containsNewline(S))J(S,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line")}if(V===0){if(N.comma)J(N.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${q}`)}else{if(!N.comma)J(N.start,"MISSING_CHAR",`Missing , between ${q} items`);if(N.comment){let g="";_:for(let E of f)switch(E.type){case"comma":case"space":break;case"comment":g=E.source.substring(1);break _;default:break _}if(g){let E=Q.items[Q.items.length-1];if(XH.isPair(E))E=E.value??E.key;if(E.comment)E.comment+=`
68
+ `+g;else E.comment=g;N.comment=N.comment.substring(g.length+1)}}}if(!W&&!K&&!N.found){let g=j?_($,j,N,J):w($,N.end,K,null,N,J);if(Q.items.push(g),B=g.range[2],l3(j))J(g.range,"BLOCK_IN_FLOW",u3)}else{$.atKey=!0;let g=N.end,E=S?_($,S,N,J):w($,g,f,null,N,J);if(l3(S))J(E.range,"BLOCK_IN_FLOW",u3);$.atKey=!1;let C=f5.resolveProps(K??[],{flow:q,indicator:"map-value-ind",next:j,offset:E.range[2],onError:J,parentIndent:X.indent,startOnNewline:!1});if(C.found){if(!W&&!N.found&&$.options.strict){if(K)for(let y of K){if(y===C.found)break;if(y.type==="newline"){J(y,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line");break}}if(N.start<C.found.offset-1024)J(C.found,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit flow sequence key")}}else if(j)if("source"in j&&j.source?.[0]===":")J(j,"MISSING_CHAR",`Missing space after : in ${q}`);else J(C.start,"MISSING_CHAR",`Missing , or : between ${q} items`);let x=j?_($,j,C,J):C.found?w($,C.end,K,null,C,J):null;if(x){if(l3(j))J(x.range,"BLOCK_IN_FLOW",u3)}else if(C.comment)if(E.comment)E.comment+=`
69
+ `+C.comment;else E.comment=C.comment;let i=new JH.Pair(E,x);if($.options.keepSourceTokens)i.srcToken=R;if(W){let y=Q;if(GH.mapIncludes($,y.items,E))J(g,"DUPLICATE_KEY","Map keys must be unique");y.items.push(i)}else{let y=new F5.YAMLMap($.schema);y.flow=!0,y.items.push(i);let c=(x??E).range;y.range=[E.range[0],c[1],c[2]],Q.items.push(y)}B=x?x.range[2]:C.end}}let D=W?"}":"]",[z,...A]=X.end,U=B;if(z?.source===D)U=z.offset+z.source.length;else{let V=q[0].toUpperCase()+q.substring(1),R=H?`${V} must end with a ${D}`:`${V} in block collection must be sufficiently indented and end with a ${D}`;if(J(B,H?"MISSING_CHAR":"BAD_INDENT",R),z&&z.source.length!==1)A.unshift(z)}if(A.length>0){let V=WH.resolveEnd(A,U,$.options.strict,J);if(V.comment)if(Q.comment)Q.comment+=`
70
+ `+V.comment;else Q.comment=V.comment;Q.range=[X.offset,U,V.offset]}else Q.range=[X.offset,U,U];return Q}HH.resolveFlowCollection=QH});var K5=P((FH)=>{var BH=p(),UH=$_(),zH=ww(),VH=$w(),AH=R5(),MH=O5(),RH=L5();function c3(_,w,$,X,J,Y){let W=$.type==="block-map"?AH.resolveBlockMap(_,w,$,X,Y):$.type==="block-seq"?MH.resolveBlockSeq(_,w,$,X,Y):RH.resolveFlowCollection(_,w,$,X,Y),q=W.constructor;if(J==="!"||J===q.tagName)return W.tag=q.tagName,W;if(J)W.tag=J;return W}function OH(_,w,$,X,J){let Y=X.tag,W=!Y?null:w.directives.tagName(Y.source,(D)=>J(Y,"TAG_RESOLVE_FAILED",D));if($.type==="block-seq"){let{anchor:D,newlineAfterProp:z}=X,A=D&&Y?D.offset>Y.offset?D:Y:D??Y;if(A&&(!z||z.offset<A.offset))J(A,"MISSING_CHAR","Missing newline after block sequence props")}let q=$.type==="block-map"?"map":$.type==="block-seq"?"seq":$.start.source==="{"?"map":"seq";if(!Y||!W||W==="!"||W===zH.YAMLMap.tagName&&q==="map"||W===VH.YAMLSeq.tagName&&q==="seq")return c3(_,w,$,J,W);let G=w.schema.tags.find((D)=>D.tag===W&&D.collection===q);if(!G){let D=w.schema.knownTags[W];if(D?.collection===q)w.schema.tags.push(Object.assign({},D,{default:!1})),G=D;else{if(D)J(Y,"BAD_COLLECTION_TYPE",`${D.tag} used for ${q} collection, but expects ${D.collection??"scalar"}`,!0);else J(Y,"TAG_RESOLVE_FAILED",`Unresolved tag: ${W}`,!0);return c3(_,w,$,J,W)}}let Q=c3(_,w,$,J,W,G),H=G.resolve?.(Q,(D)=>J(Y,"TAG_RESOLVE_FAILED",D),w.options)??Q,B=BH.isNode(H)?H:new UH.Scalar(H);if(B.range=Q.range,B.tag=W,G?.format)B.format=G.format;return B}FH.composeCollection=OH});var p3=P((bH)=>{var d3=$_();function LH(_,w,$){let X=w.offset,J=KH(w,_.options.strict,$);if(!J)return{value:"",type:null,comment:"",range:[X,X,X]};let Y=J.mode===">"?d3.Scalar.BLOCK_FOLDED:d3.Scalar.BLOCK_LITERAL,W=w.source?NH(w.source):[],q=W.length;for(let U=W.length-1;U>=0;--U){let V=W[U][1];if(V===""||V==="\r")q=U;else break}if(q===0){let U=J.chomp==="+"&&W.length>0?`
71
+ `.repeat(Math.max(1,W.length-1)):"",V=X+J.length;if(w.source)V+=w.source.length;return{value:U,type:Y,comment:J.comment,range:[X,V,V]}}let G=w.indent+J.indent,Q=w.offset+J.length,H=0;for(let U=0;U<q;++U){let[V,R]=W[U];if(R===""||R==="\r"){if(J.indent===0&&V.length>G)G=V.length}else{if(V.length<G)$(Q+V.length,"MISSING_CHAR","Block scalars with more-indented leading empty lines must use an explicit indentation indicator");if(J.indent===0)G=V.length;if(H=U,G===0&&!_.atRoot)$(Q,"BAD_INDENT","Block scalar values in collections must be indented");break}Q+=V.length+R.length+1}for(let U=W.length-1;U>=q;--U)if(W[U][0].length>G)q=U+1;let B="",D="",z=!1;for(let U=0;U<H;++U)B+=W[U][0].slice(G)+`
72
+ `;for(let U=H;U<q;++U){let[V,R]=W[U];Q+=V.length+R.length+1;let f=R[R.length-1]==="\r";if(f)R=R.slice(0,-1);if(R&&V.length<G){let K=`Block scalar lines must not be less indented than their ${J.indent?"explicit indentation indicator":"first line"}`;$(Q-R.length-(f?2:1),"BAD_INDENT",K),V=""}if(Y===d3.Scalar.BLOCK_LITERAL)B+=D+V.slice(G)+R,D=`
73
+ `;else if(V.length>G||R[0]==="\t"){if(D===" ")D=`
74
+ `;else if(!z&&D===`
75
+ `)D=`
76
+
77
+ `;B+=D+V.slice(G)+R,D=`
78
+ `,z=!0}else if(R==="")if(D===`
79
+ `)B+=`
80
+ `;else D=`
81
+ `;else B+=D+R,D=" ",z=!1}switch(J.chomp){case"-":break;case"+":for(let U=q;U<W.length;++U)B+=`
82
+ `+W[U][0].slice(G);if(B[B.length-1]!==`
83
+ `)B+=`
84
+ `;break;default:B+=`
85
+ `}let A=X+J.length+w.source.length;return{value:B,type:Y,comment:J.comment,range:[X,A,A]}}function KH({offset:_,props:w},$,X){if(w[0].type!=="block-scalar-header")return X(w[0],"IMPOSSIBLE","Block scalar header not found"),null;let{source:J}=w[0],Y=J[0],W=0,q="",G=-1;for(let D=1;D<J.length;++D){let z=J[D];if(!q&&(z==="-"||z==="+"))q=z;else{let A=Number(z);if(!W&&A)W=A;else if(G===-1)G=_+D}}if(G!==-1)X(G,"UNEXPECTED_TOKEN",`Block scalar header includes extra characters: ${J}`);let Q=!1,H="",B=J.length;for(let D=1;D<w.length;++D){let z=w[D];switch(z.type){case"space":Q=!0;case"newline":B+=z.source.length;break;case"comment":if($&&!Q)X(z,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");B+=z.source.length,H=z.source.substring(1);break;case"error":X(z,"UNEXPECTED_TOKEN",z.message),B+=z.source.length;break;default:{let A=`Unexpected token in block scalar header: ${z.type}`;X(z,"UNEXPECTED_TOKEN",A);let U=z.source;if(U&&typeof U==="string")B+=U.length}}}return{mode:Y,indent:W,chomp:q,comment:H,length:B}}function NH(_){let w=_.split(/\n( *)/),$=w[0],X=$.match(/^( *)/),Y=[X?.[1]?[X[1],$.slice(X[1].length)]:["",$]];for(let W=1;W<w.length;W+=2)Y.push([w[W],w[W+1]]);return Y}bH.resolveBlockScalar=LH});var r3=P((kH)=>{var i3=$_(),EH=sw();function SH(_,w,$){let{offset:X,type:J,source:Y,end:W}=_,q,G,Q=(D,z,A)=>$(X+D,z,A);switch(J){case"scalar":q=i3.Scalar.PLAIN,G=PH(Y,Q);break;case"single-quoted-scalar":q=i3.Scalar.QUOTE_SINGLE,G=ZH(Y,Q);break;case"double-quoted-scalar":q=i3.Scalar.QUOTE_DOUBLE,G=CH(Y,Q);break;default:return $(_,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${J}`),{value:"",type:null,comment:"",range:[X,X+Y.length,X+Y.length]}}let H=X+Y.length,B=EH.resolveEnd(W,H,w,$);return{value:G,type:q,comment:B.comment,range:[X,H,B.offset]}}function PH(_,w){let $="";switch(_[0]){case"\t":$="a tab character";break;case",":$="flow indicator character ,";break;case"%":$="directive indicator character %";break;case"|":case">":{$=`block scalar indicator ${_[0]}`;break}case"@":case"`":{$=`reserved character ${_[0]}`;break}}if($)w(0,"BAD_SCALAR_START",`Plain value cannot start with ${$}`);return N5(_)}function ZH(_,w){if(_[_.length-1]!=="'"||_.length===1)w(_.length,"MISSING_CHAR","Missing closing 'quote");return N5(_.slice(1,-1)).replace(/''/g,"'")}function N5(_){let w=/(.*?)\r?\n/sy,$=w.exec(_);if(!$)return _;let X,J;try{X=new RegExp("(?<![ \t])[ \t]+$"),J=new RegExp("^[ \t]+|(?<![ \t])[ \t]+$","g")}catch{X=/[ \t]+$/,J=/^[ \t]+|[ \t]+$/g}let Y=$[1].replace(X,""),W=" ",q=w.lastIndex;while($=w.exec(_)){let Q=$[1].replace(J,"");if(Q==="")if(W===`
86
+ `)Y+=W;else W=`
87
+ `;else Y+=W+Q,W=" ";q=w.lastIndex}let G=/[ \t]*(.*)/sy;return G.lastIndex=q,$=G.exec(_),Y+W+($?.[1]??"")}function CH(_,w){let $="";for(let X=1;X<_.length-1;++X){let J=_[X];if(J==="\r"&&_[X+1]===`
88
+ `)continue;if(J===`
89
+ `){let{fold:Y,offset:W}=TH(_,X);$+=Y,X=W}else if(J==="\\"){let Y=_[++X],W=IH[Y];if(W)$+=W;else if(Y===`
90
+ `){Y=_[X+1];while(Y===" "||Y==="\t")Y=_[++X+1]}else if(Y==="\r"&&_[X+1]===`
91
+ `){Y=_[++X+1];while(Y===" "||Y==="\t")Y=_[++X+1]}else if(Y==="x"||Y==="u"||Y==="U"){let q=Y==="x"?2:Y==="u"?4:8;$+=gH(_,X+1,q,w),X+=q}else{let q=_.substr(X-1,2);w(X-1,"BAD_DQ_ESCAPE",`Invalid escape sequence ${q}`),$+=q}}else if(J===" "||J==="\t"){let Y=X,W=_[X+1];while(W===" "||W==="\t")W=_[++X+1];if(W!==`
92
+ `&&!(W==="\r"&&_[X+2]===`
93
+ `))$+=X>Y?_.slice(Y,X+1):J}else $+=J}if(_[_.length-1]!=='"'||_.length===1)w(_.length,"MISSING_CHAR",'Missing closing "quote');return $}function TH(_,w){let $="",X=_[w+1];while(X===" "||X==="\t"||X===`
94
+ `||X==="\r"){if(X==="\r"&&_[w+2]!==`
95
+ `)break;if(X===`
96
+ `)$+=`
97
+ `;w+=1,X=_[w+1]}if(!$)$=" ";return{fold:$,offset:w}}var IH={"0":"\x00",a:"\x07",b:"\b",e:"\x1B",f:"\f",n:`
98
+ `,r:"\r",t:"\t",v:"\v",N:"\x85",_:"\xA0",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\","\t":"\t"};function gH(_,w,$,X){let J=_.substr(w,$),W=J.length===$&&/^[0-9a-fA-F]+$/.test(J)?parseInt(J,16):NaN;try{return String.fromCodePoint(W)}catch{let q=_.substr(w-2,$+2);return X(w-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${q}`),q}}kH.resolveFlowScalar=SH});var j5=P((lH)=>{var Ow=p(),b5=$_(),yH=p3(),vH=r3();function xH(_,w,$,X){let{value:J,type:Y,comment:W,range:q}=w.type==="block-scalar"?yH.resolveBlockScalar(_,w,X):vH.resolveFlowScalar(w,_.options.strict,X),G=$?_.directives.tagName($.source,(B)=>X($,"TAG_RESOLVE_FAILED",B)):null,Q;if(_.options.stringKeys&&_.atKey)Q=_.schema[Ow.SCALAR];else if(G)Q=mH(_.schema,J,G,$,X);else if(w.type==="scalar")Q=uH(_,J,w,X);else Q=_.schema[Ow.SCALAR];let H;try{let B=Q.resolve(J,(D)=>X($??w,"TAG_RESOLVE_FAILED",D),_.options);H=Ow.isScalar(B)?B:new b5.Scalar(B)}catch(B){let D=B instanceof Error?B.message:String(B);X($??w,"TAG_RESOLVE_FAILED",D),H=new b5.Scalar(J)}if(H.range=q,H.source=J,Y)H.type=Y;if(G)H.tag=G;if(Q.format)H.format=Q.format;if(W)H.comment=W;return H}function mH(_,w,$,X,J){if($==="!")return _[Ow.SCALAR];let Y=[];for(let q of _.tags)if(!q.collection&&q.tag===$)if(q.default&&q.test)Y.push(q);else return q;for(let q of Y)if(q.test?.test(w))return q;let W=_.knownTags[$];if(W&&!W.collection)return _.tags.push(Object.assign({},W,{default:!1,test:void 0})),W;return J(X,"TAG_RESOLVE_FAILED",`Unresolved tag: ${$}`,$!=="tag:yaml.org,2002:str"),_[Ow.SCALAR]}function uH({atKey:_,directives:w,schema:$},X,J,Y){let W=$.tags.find((q)=>(q.default===!0||_&&q.default==="key")&&q.test?.test(X))||$[Ow.SCALAR];if($.compat){let q=$.compat.find((G)=>G.default&&G.test?.test(X))??$[Ow.SCALAR];if(W.tag!==q.tag){let G=w.tagString(W.tag),Q=w.tagString(q.tag),H=`Value may be parsed as either ${G} or ${Q}`;Y(J,"TAG_RESOLVE_FAILED",H,!0)}}return W}lH.composeScalar=xH});var E5=P((pH)=>{function dH(_,w,$){if(w){$??($=w.length);for(let X=$-1;X>=0;--X){let J=w[X];switch(J.type){case"space":case"comment":case"newline":_-=J.source.length;continue}J=w[++X];while(J?.type==="space")_+=J.source.length,J=w[++X];break}}return _}pH.emptyScalarPosition=dH});var Z5=P((_D)=>{var rH=j0(),nH=p(),aH=K5(),S5=j5(),oH=sw(),sH=E5(),tH={composeNode:P5,composeEmptyNode:n3};function P5(_,w,$,X){let J=_.atKey,{spaceBefore:Y,comment:W,anchor:q,tag:G}=$,Q,H=!0;switch(w.type){case"alias":if(Q=eH(_,w,X),q||G)X(w,"ALIAS_PROPS","An alias node must not specify any properties");break;case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"block-scalar":if(Q=S5.composeScalar(_,w,G,X),q)Q.anchor=q.source.substring(1);break;case"block-map":case"block-seq":case"flow-collection":try{if(Q=aH.composeCollection(tH,_,w,$,X),q)Q.anchor=q.source.substring(1)}catch(B){let D=B instanceof Error?B.message:String(B);X(w,"RESOURCE_EXHAUSTION",D)}break;default:{let B=w.type==="error"?w.message:`Unsupported token (type: ${w.type})`;X(w,"UNEXPECTED_TOKEN",B),H=!1}}if(Q??(Q=n3(_,w.offset,void 0,null,$,X)),q&&Q.anchor==="")X(q,"BAD_ALIAS","Anchor cannot be an empty string");if(J&&_.options.stringKeys&&(!nH.isScalar(Q)||typeof Q.value!=="string"||Q.tag&&Q.tag!=="tag:yaml.org,2002:str"))X(G??w,"NON_STRING_KEY","With stringKeys, all keys must be strings");if(Y)Q.spaceBefore=!0;if(W)if(w.type==="scalar"&&w.source==="")Q.comment=W;else Q.commentBefore=W;if(_.options.keepSourceTokens&&H)Q.srcToken=w;return Q}function n3(_,w,$,X,{spaceBefore:J,comment:Y,anchor:W,tag:q,end:G},Q){let H={type:"scalar",offset:sH.emptyScalarPosition(w,$,X),indent:-1,source:""},B=S5.composeScalar(_,H,q,Q);if(W){if(B.anchor=W.source.substring(1),B.anchor==="")Q(W,"BAD_ALIAS","Anchor cannot be an empty string")}if(J)B.spaceBefore=!0;if(Y)B.comment=Y,B.range[2]=G;return B}function eH({options:_},{offset:w,source:$,end:X},J){let Y=new rH.Alias($.substring(1));if(Y.source==="")J(w,"BAD_ALIAS","Alias cannot be an empty string");if(Y.source.endsWith(":"))J(w+$.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);let W=w+$.length,q=oH.resolveEnd(X,W,_.strict,J);if(Y.range=[w,W,q.offset],q.comment)Y.comment=q.comment;return Y}_D.composeEmptyNode=n3;_D.composeNode=P5});var T5=P((qD)=>{var XD=m0(),C5=Z5(),JD=sw(),YD=l0();function WD(_,w,{offset:$,start:X,value:J,end:Y},W){let q=Object.assign({_directives:w},_),G=new XD.Document(void 0,q),Q={atKey:!1,atRoot:!0,directives:G.directives,options:G.options,schema:G.schema},H=YD.resolveProps(X,{indicator:"doc-start",next:J??Y?.[0],offset:$,onError:W,parentIndent:0,startOnNewline:!0});if(H.found){if(G.directives.docStart=!0,J&&(J.type==="block-map"||J.type==="block-seq")&&!H.hasNewline)W(H.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")}G.contents=J?C5.composeNode(Q,J,H,W):C5.composeEmptyNode(Q,H.end,X,null,H,W);let B=G.contents.range[2],D=JD.resolveEnd(Y,B,!1,W);if(D.comment)G.comment=D.comment;return G.range=[$,B,D.offset],G}qD.composeDoc=WD});var a3=P((zD)=>{var QD=_1("process"),HD=e2(),DD=m0(),c0=u0(),I5=p(),BD=T5(),UD=sw();function d0(_){if(typeof _==="number")return[_,_+1];if(Array.isArray(_))return _.length===2?_:[_[0],_[1]];let{offset:w,source:$}=_;return[w,w+(typeof $==="string"?$.length:1)]}function g5(_){let w="",$=!1,X=!1;for(let J=0;J<_.length;++J){let Y=_[J];switch(Y[0]){case"#":w+=(w===""?"":X?`
99
+
100
+ `:`
101
+ `)+(Y.substring(1)||" "),$=!0,X=!1;break;case"%":if(_[J+1]?.[0]!=="#")J+=1;$=!1;break;default:if(!$)X=!0;$=!1}}return{comment:w,afterEmptyLine:X}}class k5{constructor(_={}){this.doc=null,this.atDirectives=!1,this.prelude=[],this.errors=[],this.warnings=[],this.onError=(w,$,X,J)=>{let Y=d0(w);if(J)this.warnings.push(new c0.YAMLWarning(Y,$,X));else this.errors.push(new c0.YAMLParseError(Y,$,X))},this.directives=new HD.Directives({version:_.version||"1.2"}),this.options=_}decorate(_,w){let{comment:$,afterEmptyLine:X}=g5(this.prelude);if($){let J=_.contents;if(w)_.comment=_.comment?`${_.comment}
102
+ ${$}`:$;else if(X||_.directives.docStart||!J)_.commentBefore=$;else if(I5.isCollection(J)&&!J.flow&&J.items.length>0){let Y=J.items[0];if(I5.isPair(Y))Y=Y.key;let W=Y.commentBefore;Y.commentBefore=W?`${$}
103
+ ${W}`:$}else{let Y=J.commentBefore;J.commentBefore=Y?`${$}
104
+ ${Y}`:$}}if(w){for(let J=0;J<this.errors.length;++J)_.errors.push(this.errors[J]);for(let J=0;J<this.warnings.length;++J)_.warnings.push(this.warnings[J])}else _.errors=this.errors,_.warnings=this.warnings;this.prelude=[],this.errors=[],this.warnings=[]}streamInfo(){return{comment:g5(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose(_,w=!1,$=-1){for(let X of _)yield*this.next(X);yield*this.end(w,$)}*next(_){if(QD.env.LOG_STREAM)console.dir(_,{depth:null});switch(_.type){case"directive":this.directives.add(_.source,(w,$,X)=>{let J=d0(_);J[0]+=w,this.onError(J,"BAD_DIRECTIVE",$,X)}),this.prelude.push(_.source),this.atDirectives=!0;break;case"document":{let w=BD.composeDoc(this.options,this.directives,_,this.onError);if(this.atDirectives&&!w.directives.docStart)this.onError(_,"MISSING_CHAR","Missing directives-end/doc-start indicator line");if(this.decorate(w,!1),this.doc)yield this.doc;this.doc=w,this.atDirectives=!1;break}case"byte-order-mark":case"space":break;case"comment":case"newline":this.prelude.push(_.source);break;case"error":{let w=_.source?`${_.message}: ${JSON.stringify(_.source)}`:_.message,$=new c0.YAMLParseError(d0(_),"UNEXPECTED_TOKEN",w);if(this.atDirectives||!this.doc)this.errors.push($);else this.doc.errors.push($);break}case"doc-end":{if(!this.doc){this.errors.push(new c0.YAMLParseError(d0(_),"UNEXPECTED_TOKEN","Unexpected doc-end without preceding document"));break}this.doc.directives.docEnd=!0;let w=UD.resolveEnd(_.end,_.offset+_.source.length,this.doc.options.strict,this.onError);if(this.decorate(this.doc,!0),w.comment){let $=this.doc.comment;this.doc.comment=$?`${$}
105
+ ${w.comment}`:w.comment}this.doc.range[2]=w.offset;break}default:this.errors.push(new c0.YAMLParseError(d0(_),"UNEXPECTED_TOKEN",`Unsupported token ${_.type}`))}}*end(_=!1,w=-1){if(this.doc)this.decorate(this.doc,!0),yield this.doc,this.doc=null;else if(_){let $=Object.assign({_directives:this.directives},this.options),X=new DD.Document(void 0,$);if(this.atDirectives)this.onError(w,"MISSING_CHAR","Missing directives-end indicator line");X.range=[0,w,w],this.decorate(X,!1),yield X}}}zD.Composer=k5});var v5=P((KD)=>{var AD=p3(),MD=r3(),RD=u0(),h5=Z0();function OD(_,w=!0,$){if(_){let X=(J,Y,W)=>{let q=typeof J==="number"?J:Array.isArray(J)?J[0]:J.offset;if($)$(q,Y,W);else throw new RD.YAMLParseError([q,q+1],Y,W)};switch(_.type){case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return MD.resolveFlowScalar(_,w,X);case"block-scalar":return AD.resolveBlockScalar({options:{strict:w}},_,X)}}return null}function FD(_,w){let{implicitKey:$=!1,indent:X,inFlow:J=!1,offset:Y=-1,type:W="PLAIN"}=w,q=h5.stringifyString({type:W,value:_},{implicitKey:$,indent:X>0?" ".repeat(X):"",inFlow:J,options:{blockQuote:!0,lineWidth:-1}}),G=w.end??[{type:"newline",offset:-1,indent:X,source:`
106
+ `}];switch(q[0]){case"|":case">":{let Q=q.indexOf(`
107
+ `),H=q.substring(0,Q),B=q.substring(Q+1)+`
108
+ `,D=[{type:"block-scalar-header",offset:Y,indent:X,source:H}];if(!y5(D,G))D.push({type:"newline",offset:-1,indent:X,source:`
109
+ `});return{type:"block-scalar",offset:Y,indent:X,props:D,source:B}}case'"':return{type:"double-quoted-scalar",offset:Y,indent:X,source:q,end:G};case"'":return{type:"single-quoted-scalar",offset:Y,indent:X,source:q,end:G};default:return{type:"scalar",offset:Y,indent:X,source:q,end:G}}}function fD(_,w,$={}){let{afterKey:X=!1,implicitKey:J=!1,inFlow:Y=!1,type:W}=$,q="indent"in _?_.indent:null;if(X&&typeof q==="number")q+=2;if(!W)switch(_.type){case"single-quoted-scalar":W="QUOTE_SINGLE";break;case"double-quoted-scalar":W="QUOTE_DOUBLE";break;case"block-scalar":{let Q=_.props[0];if(Q.type!=="block-scalar-header")throw Error("Invalid block scalar header");W=Q.source[0]===">"?"BLOCK_FOLDED":"BLOCK_LITERAL";break}default:W="PLAIN"}let G=h5.stringifyString({type:W,value:w},{implicitKey:J||q===null,indent:q!==null&&q>0?" ".repeat(q):"",inFlow:Y,options:{blockQuote:!0,lineWidth:-1}});switch(G[0]){case"|":case">":LD(_,G);break;case'"':o3(_,G,"double-quoted-scalar");break;case"'":o3(_,G,"single-quoted-scalar");break;default:o3(_,G,"scalar")}}function LD(_,w){let $=w.indexOf(`
110
+ `),X=w.substring(0,$),J=w.substring($+1)+`
111
+ `;if(_.type==="block-scalar"){let Y=_.props[0];if(Y.type!=="block-scalar-header")throw Error("Invalid block scalar header");Y.source=X,_.source=J}else{let{offset:Y}=_,W="indent"in _?_.indent:-1,q=[{type:"block-scalar-header",offset:Y,indent:W,source:X}];if(!y5(q,"end"in _?_.end:void 0))q.push({type:"newline",offset:-1,indent:W,source:`
112
+ `});for(let G of Object.keys(_))if(G!=="type"&&G!=="offset")delete _[G];Object.assign(_,{type:"block-scalar",indent:W,props:q,source:J})}}function y5(_,w){if(w)for(let $ of w)switch($.type){case"space":case"comment":_.push($);break;case"newline":return _.push($),!0}return!1}function o3(_,w,$){switch(_.type){case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":_.type=$,_.source=w;break;case"block-scalar":{let X=_.props.slice(1),J=w.length;if(_.props[0].type==="block-scalar-header")J-=_.props[0].source.length;for(let Y of X)Y.offset+=J;delete _.props,Object.assign(_,{type:$,source:w,end:X});break}case"block-map":case"block-seq":{let J={type:"newline",offset:_.offset+w.length,indent:_.indent,source:`
113
+ `};delete _.items,Object.assign(_,{type:$,source:w,end:[J]});break}default:{let X="indent"in _?_.indent:-1,J="end"in _&&Array.isArray(_.end)?_.end.filter((Y)=>Y.type==="space"||Y.type==="comment"||Y.type==="newline"):[];for(let Y of Object.keys(_))if(Y!=="type"&&Y!=="offset")delete _[Y];Object.assign(_,{type:$,indent:X,source:w,end:J})}}}KD.createScalarToken=FD;KD.resolveAsScalar=OD;KD.setScalarValue=fD});var x5=P((SD)=>{var ED=(_)=>("type"in _)?t1(_):s1(_);function t1(_){switch(_.type){case"block-scalar":{let w="";for(let $ of _.props)w+=t1($);return w+_.source}case"block-map":case"block-seq":{let w="";for(let $ of _.items)w+=s1($);return w}case"flow-collection":{let w=_.start.source;for(let $ of _.items)w+=s1($);for(let $ of _.end)w+=$.source;return w}case"document":{let w=s1(_);if(_.end)for(let $ of _.end)w+=$.source;return w}default:{let w=_.source;if("end"in _&&_.end)for(let $ of _.end)w+=$.source;return w}}}function s1({start:_,key:w,sep:$,value:X}){let J="";for(let Y of _)J+=Y.source;if(w)J+=t1(w);if($)for(let Y of $)J+=Y.source;if(X)J+=t1(X);return J}SD.stringify=ED});var l5=P((CD)=>{var s3=Symbol("break visit"),ZD=Symbol("skip children"),m5=Symbol("remove item");function Fw(_,w){if("type"in _&&_.type==="document")_={start:_.start,value:_.value};u5(Object.freeze([]),_,w)}Fw.BREAK=s3;Fw.SKIP=ZD;Fw.REMOVE=m5;Fw.itemAtPath=(_,w)=>{let $=_;for(let[X,J]of w){let Y=$?.[X];if(Y&&"items"in Y)$=Y.items[J];else return}return $};Fw.parentCollection=(_,w)=>{let $=Fw.itemAtPath(_,w.slice(0,-1)),X=w[w.length-1][0],J=$?.[X];if(J&&"items"in J)return J;throw Error("Parent collection not found")};function u5(_,w,$){let X=$(w,_);if(typeof X==="symbol")return X;for(let J of["key","value"]){let Y=w[J];if(Y&&"items"in Y){for(let W=0;W<Y.items.length;++W){let q=u5(Object.freeze(_.concat([[J,W]])),Y.items[W],$);if(typeof q==="number")W=q-1;else if(q===s3)return s3;else if(q===m5)Y.items.splice(W,1),W-=1}if(typeof X==="function"&&J==="key")X=X(w,_)}}return typeof X==="function"?X(w,_):X}CD.visit=Fw});var e1=P((xD)=>{var t3=v5(),ID=x5(),gD=l5(),e3="\uFEFF",_$="\x02",w$="\x18",$$="\x1F",kD=(_)=>!!_&&("items"in _),hD=(_)=>!!_&&(_.type==="scalar"||_.type==="single-quoted-scalar"||_.type==="double-quoted-scalar"||_.type==="block-scalar");function yD(_){switch(_){case e3:return"<BOM>";case _$:return"<DOC>";case w$:return"<FLOW_END>";case $$:return"<SCALAR>";default:return JSON.stringify(_)}}function vD(_){switch(_){case e3:return"byte-order-mark";case _$:return"doc-mode";case w$:return"flow-error-end";case $$:return"scalar";case"---":return"doc-start";case"...":return"doc-end";case"":case`
114
+ `:case`\r
115
+ `:return"newline";case"-":return"seq-item-ind";case"?":return"explicit-key-ind";case":":return"map-value-ind";case"{":return"flow-map-start";case"}":return"flow-map-end";case"[":return"flow-seq-start";case"]":return"flow-seq-end";case",":return"comma"}switch(_[0]){case" ":case"\t":return"space";case"#":return"comment";case"%":return"directive-line";case"*":return"alias";case"&":return"anchor";case"!":return"tag";case"'":return"single-quoted-scalar";case'"':return"double-quoted-scalar";case"|":case">":return"block-scalar-header"}return null}xD.createScalarToken=t3.createScalarToken;xD.resolveAsScalar=t3.resolveAsScalar;xD.setScalarValue=t3.setScalarValue;xD.stringify=ID.stringify;xD.visit=gD.visit;xD.BOM=e3;xD.DOCUMENT=_$;xD.FLOW_END=w$;xD.SCALAR=$$;xD.isCollection=kD;xD.isScalar=hD;xD.prettyToken=yD;xD.tokenType=vD});var J$=P((wB)=>{var p0=e1();function b_(_){switch(_){case void 0:case" ":case`
116
+ `:case"\r":case"\t":return!0;default:return!1}}var c5=new Set("0123456789ABCDEFabcdef"),eD=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),_2=new Set(",[]{}"),_B=new Set(` ,[]{}
117
+ \r `),X$=(_)=>!_||_B.has(_);class d5{constructor(){this.atEnd=!1,this.blockScalarIndent=-1,this.blockScalarKeep=!1,this.buffer="",this.flowKey=!1,this.flowLevel=0,this.indentNext=0,this.indentValue=0,this.lineEndPos=null,this.next=null,this.pos=0}*lex(_,w=!1){if(_){if(typeof _!=="string")throw TypeError("source is not a string");this.buffer=this.buffer?this.buffer+_:_,this.lineEndPos=null}this.atEnd=!w;let $=this.next??"stream";while($&&(w||this.hasChars(1)))$=yield*this.parseNext($)}atLineEnd(){let _=this.pos,w=this.buffer[_];while(w===" "||w==="\t")w=this.buffer[++_];if(!w||w==="#"||w===`
118
+ `)return!0;if(w==="\r")return this.buffer[_+1]===`
119
+ `;return!1}charAt(_){return this.buffer[this.pos+_]}continueScalar(_){let w=this.buffer[_];if(this.indentNext>0){let $=0;while(w===" ")w=this.buffer[++$+_];if(w==="\r"){let X=this.buffer[$+_+1];if(X===`
120
+ `||!X&&!this.atEnd)return _+$+1}return w===`
121
+ `||$>=this.indentNext||!w&&!this.atEnd?_+$:-1}if(w==="-"||w==="."){let $=this.buffer.substr(_,3);if(($==="---"||$==="...")&&b_(this.buffer[_+3]))return-1}return _}getLine(){let _=this.lineEndPos;if(typeof _!=="number"||_!==-1&&_<this.pos)_=this.buffer.indexOf(`
122
+ `,this.pos),this.lineEndPos=_;if(_===-1)return this.atEnd?this.buffer.substring(this.pos):null;if(this.buffer[_-1]==="\r")_-=1;return this.buffer.substring(this.pos,_)}hasChars(_){return this.pos+_<=this.buffer.length}setNext(_){return this.buffer=this.buffer.substring(this.pos),this.pos=0,this.lineEndPos=null,this.next=_,null}peek(_){return this.buffer.substr(this.pos,_)}*parseNext(_){switch(_){case"stream":return yield*this.parseStream();case"line-start":return yield*this.parseLineStart();case"block-start":return yield*this.parseBlockStart();case"doc":return yield*this.parseDocument();case"flow":return yield*this.parseFlowCollection();case"quoted-scalar":return yield*this.parseQuotedScalar();case"block-scalar":return yield*this.parseBlockScalar();case"plain-scalar":return yield*this.parsePlainScalar()}}*parseStream(){let _=this.getLine();if(_===null)return this.setNext("stream");if(_[0]===p0.BOM)yield*this.pushCount(1),_=_.substring(1);if(_[0]==="%"){let w=_.length,$=_.indexOf("#");while($!==-1){let J=_[$-1];if(J===" "||J==="\t"){w=$-1;break}else $=_.indexOf("#",$+1)}while(!0){let J=_[w-1];if(J===" "||J==="\t")w-=1;else break}let X=(yield*this.pushCount(w))+(yield*this.pushSpaces(!0));return yield*this.pushCount(_.length-X),this.pushNewline(),"stream"}if(this.atLineEnd()){let w=yield*this.pushSpaces(!0);return yield*this.pushCount(_.length-w),yield*this.pushNewline(),"stream"}return yield p0.DOCUMENT,yield*this.parseLineStart()}*parseLineStart(){let _=this.charAt(0);if(!_&&!this.atEnd)return this.setNext("line-start");if(_==="-"||_==="."){if(!this.atEnd&&!this.hasChars(4))return this.setNext("line-start");let w=this.peek(3);if((w==="---"||w==="...")&&b_(this.charAt(3)))return yield*this.pushCount(3),this.indentValue=0,this.indentNext=0,w==="---"?"doc":"stream"}if(this.indentValue=yield*this.pushSpaces(!1),this.indentNext>this.indentValue&&!b_(this.charAt(1)))this.indentNext=this.indentValue;return yield*this.parseBlockStart()}*parseBlockStart(){let[_,w]=this.peek(2);if(!w&&!this.atEnd)return this.setNext("block-start");if((_==="-"||_==="?"||_===":")&&b_(w)){let $=(yield*this.pushCount(1))+(yield*this.pushSpaces(!0));return this.indentNext=this.indentValue+1,this.indentValue+=$,"block-start"}return"doc"}*parseDocument(){yield*this.pushSpaces(!0);let _=this.getLine();if(_===null)return this.setNext("doc");let w=yield*this.pushIndicators();switch(_[w]){case"#":yield*this.pushCount(_.length-w);case void 0:return yield*this.pushNewline(),yield*this.parseLineStart();case"{":case"[":return yield*this.pushCount(1),this.flowKey=!1,this.flowLevel=1,"flow";case"}":case"]":return yield*this.pushCount(1),"doc";case"*":return yield*this.pushUntil(X$),"doc";case'"':case"'":return yield*this.parseQuotedScalar();case"|":case">":return w+=yield*this.parseBlockScalarHeader(),w+=yield*this.pushSpaces(!0),yield*this.pushCount(_.length-w),yield*this.pushNewline(),yield*this.parseBlockScalar();default:return yield*this.parsePlainScalar()}}*parseFlowCollection(){let _,w,$=-1;do{if(_=yield*this.pushNewline(),_>0)w=yield*this.pushSpaces(!1),this.indentValue=$=w;else w=0;w+=yield*this.pushSpaces(!0)}while(_+w>0);let X=this.getLine();if(X===null)return this.setNext("flow");if($!==-1&&$<this.indentNext&&X[0]!=="#"||$===0&&(X.startsWith("---")||X.startsWith("..."))&&b_(X[3])){if(!($===this.indentNext-1&&this.flowLevel===1&&(X[0]==="]"||X[0]==="}")))return this.flowLevel=0,yield p0.FLOW_END,yield*this.parseLineStart()}let J=0;while(X[J]===",")J+=yield*this.pushCount(1),J+=yield*this.pushSpaces(!0),this.flowKey=!1;switch(J+=yield*this.pushIndicators(),X[J]){case void 0:return"flow";case"#":return yield*this.pushCount(X.length-J),"flow";case"{":case"[":return yield*this.pushCount(1),this.flowKey=!1,this.flowLevel+=1,"flow";case"}":case"]":return yield*this.pushCount(1),this.flowKey=!0,this.flowLevel-=1,this.flowLevel?"flow":"doc";case"*":return yield*this.pushUntil(X$),"flow";case'"':case"'":return this.flowKey=!0,yield*this.parseQuotedScalar();case":":{let Y=this.charAt(1);if(this.flowKey||b_(Y)||Y===",")return this.flowKey=!1,yield*this.pushCount(1),yield*this.pushSpaces(!0),"flow"}default:return this.flowKey=!1,yield*this.parsePlainScalar()}}*parseQuotedScalar(){let _=this.charAt(0),w=this.buffer.indexOf(_,this.pos+1);if(_==="'")while(w!==-1&&this.buffer[w+1]==="'")w=this.buffer.indexOf("'",w+2);else while(w!==-1){let J=0;while(this.buffer[w-1-J]==="\\")J+=1;if(J%2===0)break;w=this.buffer.indexOf('"',w+1)}let $=this.buffer.substring(0,w),X=$.indexOf(`
123
+ `,this.pos);if(X!==-1){while(X!==-1){let J=this.continueScalar(X+1);if(J===-1)break;X=$.indexOf(`
124
+ `,J)}if(X!==-1)w=X-($[X-1]==="\r"?2:1)}if(w===-1){if(!this.atEnd)return this.setNext("quoted-scalar");w=this.buffer.length}return yield*this.pushToIndex(w+1,!1),this.flowLevel?"flow":"doc"}*parseBlockScalarHeader(){this.blockScalarIndent=-1,this.blockScalarKeep=!1;let _=this.pos;while(!0){let w=this.buffer[++_];if(w==="+")this.blockScalarKeep=!0;else if(w>"0"&&w<="9")this.blockScalarIndent=Number(w)-1;else if(w!=="-")break}return yield*this.pushUntil((w)=>b_(w)||w==="#")}*parseBlockScalar(){let _=this.pos-1,w=0,$;_:for(let J=this.pos;$=this.buffer[J];++J)switch($){case" ":w+=1;break;case`
125
+ `:_=J,w=0;break;case"\r":{let Y=this.buffer[J+1];if(!Y&&!this.atEnd)return this.setNext("block-scalar");if(Y===`
126
+ `)break}default:break _}if(!$&&!this.atEnd)return this.setNext("block-scalar");if(w>=this.indentNext){if(this.blockScalarIndent===-1)this.indentNext=w;else this.indentNext=this.blockScalarIndent+(this.indentNext===0?1:this.indentNext);do{let J=this.continueScalar(_+1);if(J===-1)break;_=this.buffer.indexOf(`
127
+ `,J)}while(_!==-1);if(_===-1){if(!this.atEnd)return this.setNext("block-scalar");_=this.buffer.length}}let X=_+1;$=this.buffer[X];while($===" ")$=this.buffer[++X];if($==="\t"){while($==="\t"||$===" "||$==="\r"||$===`
128
+ `)$=this.buffer[++X];_=X-1}else if(!this.blockScalarKeep)do{let J=_-1,Y=this.buffer[J];if(Y==="\r")Y=this.buffer[--J];let W=J;while(Y===" ")Y=this.buffer[--J];if(Y===`
129
+ `&&J>=this.pos&&J+1+w>W)_=J;else break}while(!0);return yield p0.SCALAR,yield*this.pushToIndex(_+1,!0),yield*this.parseLineStart()}*parsePlainScalar(){let _=this.flowLevel>0,w=this.pos-1,$=this.pos-1,X;while(X=this.buffer[++$])if(X===":"){let J=this.buffer[$+1];if(b_(J)||_&&_2.has(J))break;w=$}else if(b_(X)){let J=this.buffer[$+1];if(X==="\r")if(J===`
130
+ `)$+=1,X=`
131
+ `,J=this.buffer[$+1];else w=$;if(J==="#"||_&&_2.has(J))break;if(X===`
132
+ `){let Y=this.continueScalar($+1);if(Y===-1)break;$=Math.max($,Y-2)}}else{if(_&&_2.has(X))break;w=$}if(!X&&!this.atEnd)return this.setNext("plain-scalar");return yield p0.SCALAR,yield*this.pushToIndex(w+1,!0),_?"flow":"doc"}*pushCount(_){if(_>0)return yield this.buffer.substr(this.pos,_),this.pos+=_,_;return 0}*pushToIndex(_,w){let $=this.buffer.slice(this.pos,_);if($)return yield $,this.pos+=$.length,$.length;else if(w)yield"";return 0}*pushIndicators(){let _=0;_:while(!0){switch(this.charAt(0)){case"!":_+=yield*this.pushTag(),_+=yield*this.pushSpaces(!0);continue _;case"&":_+=yield*this.pushUntil(X$),_+=yield*this.pushSpaces(!0);continue _;case"-":case"?":case":":{let w=this.flowLevel>0,$=this.charAt(1);if(b_($)||w&&_2.has($)){if(!w)this.indentNext=this.indentValue+1;else if(this.flowKey)this.flowKey=!1;_+=yield*this.pushCount(1),_+=yield*this.pushSpaces(!0);continue _}}}break _}return _}*pushTag(){if(this.charAt(1)==="<"){let _=this.pos+2,w=this.buffer[_];while(!b_(w)&&w!==">")w=this.buffer[++_];return yield*this.pushToIndex(w===">"?_+1:_,!1)}else{let _=this.pos+1,w=this.buffer[_];while(w)if(eD.has(w))w=this.buffer[++_];else if(w==="%"&&c5.has(this.buffer[_+1])&&c5.has(this.buffer[_+2]))w=this.buffer[_+=3];else break;return yield*this.pushToIndex(_,!1)}}*pushNewline(){let _=this.buffer[this.pos];if(_===`
133
+ `)return yield*this.pushCount(1);else if(_==="\r"&&this.charAt(1)===`
134
+ `)return yield*this.pushCount(2);else return 0}*pushSpaces(_){let w=this.pos-1,$;do $=this.buffer[++w];while($===" "||_&&$==="\t");let X=w-this.pos;if(X>0)yield this.buffer.substr(this.pos,X),this.pos=w;return X}*pushUntil(_){let w=this.pos,$=this.buffer[w];while(!_($))$=this.buffer[++w];return yield*this.pushToIndex(w,!1)}}wB.Lexer=d5});var Y$=P((XB)=>{class p5{constructor(){this.lineStarts=[],this.addNewLine=(_)=>this.lineStarts.push(_),this.linePos=(_)=>{let w=0,$=this.lineStarts.length;while(w<$){let J=w+$>>1;if(this.lineStarts[J]<_)w=J+1;else $=J}if(this.lineStarts[w]===_)return{line:w+1,col:1};if(w===0)return{line:0,col:_};let X=this.lineStarts[w-1];return{line:w,col:_-X+1}}}}XB.LineCounter=p5});var W$=P((qB)=>{var YB=_1("process"),i5=e1(),WB=J$();function Xw(_,w){for(let $=0;$<_.length;++$)if(_[$].type===w)return!0;return!1}function r5(_){for(let w=0;w<_.length;++w)switch(_[w].type){case"space":case"comment":case"newline":break;default:return w}return-1}function a5(_){switch(_?.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"flow-collection":return!0;default:return!1}}function w2(_){switch(_.type){case"document":return _.start;case"block-map":{let w=_.items[_.items.length-1];return w.sep??w.start}case"block-seq":return _.items[_.items.length-1].start;default:return[]}}function tw(_){if(_.length===0)return[];let w=_.length;_:while(--w>=0)switch(_[w].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break _}while(_[++w]?.type==="space");return _.splice(w,_.length)}function $2(_,w){if(w.length<1e5)Array.prototype.push.apply(_,w);else for(let $=0;$<w.length;++$)_.push(w[$])}function n5(_){if(_.start.type==="flow-seq-start"){for(let w of _.items)if(w.sep&&!w.value&&!Xw(w.start,"explicit-key-ind")&&!Xw(w.sep,"map-value-ind")){if(w.key)w.value=w.key;if(delete w.key,a5(w.value))if(w.value.end)$2(w.value.end,w.sep);else w.value.end=w.sep;else $2(w.start,w.sep);delete w.sep}}}class o5{constructor(_){this.atNewLine=!0,this.atScalar=!1,this.indent=0,this.offset=0,this.onKeyLine=!1,this.stack=[],this.source="",this.type="",this.lexer=new WB.Lexer,this.onNewLine=_}*parse(_,w=!1){if(this.onNewLine&&this.offset===0)this.onNewLine(0);for(let $ of this.lexer.lex(_,w))yield*this.next($);if(!w)yield*this.end()}*next(_){if(this.source=_,YB.env.LOG_TOKENS)console.log("|",i5.prettyToken(_));if(this.atScalar){this.atScalar=!1,yield*this.step(),this.offset+=_.length;return}let w=i5.tokenType(_);if(!w){let $=`Not a YAML token: ${_}`;yield*this.pop({type:"error",offset:this.offset,message:$,source:_}),this.offset+=_.length}else if(w==="scalar")this.atNewLine=!1,this.atScalar=!0,this.type="scalar";else{switch(this.type=w,yield*this.step(),w){case"newline":if(this.atNewLine=!0,this.indent=0,this.onNewLine)this.onNewLine(this.offset+_.length);break;case"space":if(this.atNewLine&&_[0]===" ")this.indent+=_.length;break;case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":if(this.atNewLine)this.indent+=_.length;break;case"doc-mode":case"flow-error-end":return;default:this.atNewLine=!1}this.offset+=_.length}}*end(){while(this.stack.length>0)yield*this.pop()}get sourceToken(){return{type:this.type,offset:this.offset,indent:this.indent,source:this.source}}*step(){let _=this.peek(1);if(this.type==="doc-end"&&_?.type!=="doc-end"){while(this.stack.length>0)yield*this.pop();this.stack.push({type:"doc-end",offset:this.offset,source:this.source});return}if(!_)return yield*this.stream();switch(_.type){case"document":return yield*this.document(_);case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*this.scalar(_);case"block-scalar":return yield*this.blockScalar(_);case"block-map":return yield*this.blockMap(_);case"block-seq":return yield*this.blockSequence(_);case"flow-collection":return yield*this.flowCollection(_);case"doc-end":return yield*this.documentEnd(_)}yield*this.pop()}peek(_){return this.stack[this.stack.length-_]}*pop(_){let w=_??this.stack.pop();if(!w)yield{type:"error",offset:this.offset,source:"",message:"Tried to pop an empty stack"};else if(this.stack.length===0)yield w;else{let $=this.peek(1);if(w.type==="block-scalar")w.indent="indent"in $?$.indent:0;else if(w.type==="flow-collection"&&$.type==="document")w.indent=0;if(w.type==="flow-collection")n5(w);switch($.type){case"document":$.value=w;break;case"block-scalar":$.props.push(w);break;case"block-map":{let X=$.items[$.items.length-1];if(X.value){$.items.push({start:[],key:w,sep:[]}),this.onKeyLine=!0;return}else if(X.sep)X.value=w;else{Object.assign(X,{key:w,sep:[]}),this.onKeyLine=!X.explicitKey;return}break}case"block-seq":{let X=$.items[$.items.length-1];if(X.value)$.items.push({start:[],value:w});else X.value=w;break}case"flow-collection":{let X=$.items[$.items.length-1];if(!X||X.value)$.items.push({start:[],key:w,sep:[]});else if(X.sep)X.value=w;else Object.assign(X,{key:w,sep:[]});return}default:yield*this.pop(),yield*this.pop(w)}if(($.type==="document"||$.type==="block-map"||$.type==="block-seq")&&(w.type==="block-map"||w.type==="block-seq")){let X=w.items[w.items.length-1];if(X&&!X.sep&&!X.value&&X.start.length>0&&r5(X.start)===-1&&(w.indent===0||X.start.every((J)=>J.type!=="comment"||J.indent<w.indent))){if($.type==="document")$.end=X.start;else $.items.push({start:X.start});w.items.splice(-1,1)}}}}*stream(){switch(this.type){case"directive-line":yield{type:"directive",offset:this.offset,source:this.source};return;case"byte-order-mark":case"space":case"comment":case"newline":yield this.sourceToken;return;case"doc-mode":case"doc-start":{let _={type:"document",offset:this.offset,start:[]};if(this.type==="doc-start")_.start.push(this.sourceToken);this.stack.push(_);return}}yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML stream`,source:this.source}}*document(_){if(_.value)return yield*this.lineEnd(_);switch(this.type){case"doc-start":{if(r5(_.start)!==-1)yield*this.pop(),yield*this.step();else _.start.push(this.sourceToken);return}case"anchor":case"tag":case"space":case"comment":case"newline":_.start.push(this.sourceToken);return}let w=this.startBlockValue(_);if(w)this.stack.push(w);else yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML document`,source:this.source}}*scalar(_){if(this.type==="map-value-ind"){let w=w2(this.peek(2)),$=tw(w),X;if(_.end)X=_.end,X.push(this.sourceToken),delete _.end;else X=[this.sourceToken];let J={type:"block-map",offset:_.offset,indent:_.indent,items:[{start:$,key:_,sep:X}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=J}else yield*this.lineEnd(_)}*blockScalar(_){switch(this.type){case"space":case"comment":case"newline":_.props.push(this.sourceToken);return;case"scalar":if(_.source=this.source,this.atNewLine=!0,this.indent=0,this.onNewLine){let w=this.source.indexOf(`
135
+ `)+1;while(w!==0)this.onNewLine(this.offset+w),w=this.source.indexOf(`
136
+ `,w)+1}yield*this.pop();break;default:yield*this.pop(),yield*this.step()}}*blockMap(_){let w=_.items[_.items.length-1];switch(this.type){case"newline":if(this.onKeyLine=!1,w.value){let $="end"in w.value?w.value.end:void 0;if((Array.isArray($)?$[$.length-1]:void 0)?.type==="comment")$?.push(this.sourceToken);else _.items.push({start:[this.sourceToken]})}else if(w.sep)w.sep.push(this.sourceToken);else w.start.push(this.sourceToken);return;case"space":case"comment":if(w.value)_.items.push({start:[this.sourceToken]});else if(w.sep)w.sep.push(this.sourceToken);else{if(this.atIndentedComment(w.start,_.indent)){let X=_.items[_.items.length-2]?.value?.end;if(Array.isArray(X)){$2(X,w.start),X.push(this.sourceToken),_.items.pop();return}}w.start.push(this.sourceToken)}return}if(this.indent>=_.indent){let $=!this.onKeyLine&&this.indent===_.indent,X=$&&(w.sep||w.explicitKey)&&this.type!=="seq-item-ind",J=[];if(X&&w.sep&&!w.value){let Y=[];for(let W=0;W<w.sep.length;++W){let q=w.sep[W];switch(q.type){case"newline":Y.push(W);break;case"space":break;case"comment":if(q.indent>_.indent)Y.length=0;break;default:Y.length=0}}if(Y.length>=2)J=w.sep.splice(Y[1])}switch(this.type){case"anchor":case"tag":if(X||w.value)J.push(this.sourceToken),_.items.push({start:J}),this.onKeyLine=!0;else if(w.sep)w.sep.push(this.sourceToken);else w.start.push(this.sourceToken);return;case"explicit-key-ind":if(!w.sep&&!w.explicitKey)w.start.push(this.sourceToken),w.explicitKey=!0;else if(X||w.value)J.push(this.sourceToken),_.items.push({start:J,explicitKey:!0});else this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]});this.onKeyLine=!0;return;case"map-value-ind":if(w.explicitKey)if(!w.sep)if(Xw(w.start,"newline"))Object.assign(w,{key:null,sep:[this.sourceToken]});else{let Y=tw(w.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:Y,key:null,sep:[this.sourceToken]}]})}else if(w.value)_.items.push({start:[],key:null,sep:[this.sourceToken]});else if(Xw(w.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:J,key:null,sep:[this.sourceToken]}]});else if(a5(w.key)&&!Xw(w.sep,"newline")){let Y=tw(w.start),W=w.key,q=w.sep;q.push(this.sourceToken),delete w.key,delete w.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:Y,key:W,sep:q}]})}else if(J.length>0)w.sep=w.sep.concat(J,this.sourceToken);else w.sep.push(this.sourceToken);else if(!w.sep)Object.assign(w,{key:null,sep:[this.sourceToken]});else if(w.value||X)_.items.push({start:J,key:null,sep:[this.sourceToken]});else if(Xw(w.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]});else w.sep.push(this.sourceToken);this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let Y=this.flowScalar(this.type);if(X||w.value)_.items.push({start:J,key:Y,sep:[]}),this.onKeyLine=!0;else if(w.sep)this.stack.push(Y);else Object.assign(w,{key:Y,sep:[]}),this.onKeyLine=!0;return}default:{let Y=this.startBlockValue(_);if(Y){if(Y.type==="block-seq"){if(!w.explicitKey&&w.sep&&!Xw(w.sep,"newline")){yield*this.pop({type:"error",offset:this.offset,message:"Unexpected block-seq-ind on same line with key",source:this.source});return}}else if($)_.items.push({start:J});this.stack.push(Y);return}}}}yield*this.pop(),yield*this.step()}*blockSequence(_){let w=_.items[_.items.length-1];switch(this.type){case"newline":if(w.value){let $="end"in w.value?w.value.end:void 0;if((Array.isArray($)?$[$.length-1]:void 0)?.type==="comment")$?.push(this.sourceToken);else _.items.push({start:[this.sourceToken]})}else w.start.push(this.sourceToken);return;case"space":case"comment":if(w.value)_.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(w.start,_.indent)){let X=_.items[_.items.length-2]?.value?.end;if(Array.isArray(X)){$2(X,w.start),X.push(this.sourceToken),_.items.pop();return}}w.start.push(this.sourceToken)}return;case"anchor":case"tag":if(w.value||this.indent<=_.indent)break;w.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==_.indent)break;if(w.value||Xw(w.start,"seq-item-ind"))_.items.push({start:[this.sourceToken]});else w.start.push(this.sourceToken);return}if(this.indent>_.indent){let $=this.startBlockValue(_);if($){this.stack.push($);return}}yield*this.pop(),yield*this.step()}*flowCollection(_){let w=_.items[_.items.length-1];if(this.type==="flow-error-end"){let $;do yield*this.pop(),$=this.peek(1);while($?.type==="flow-collection")}else if(_.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":if(!w||w.sep)_.items.push({start:[this.sourceToken]});else w.start.push(this.sourceToken);return;case"map-value-ind":if(!w||w.value)_.items.push({start:[],key:null,sep:[this.sourceToken]});else if(w.sep)w.sep.push(this.sourceToken);else Object.assign(w,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":if(!w||w.value)_.items.push({start:[this.sourceToken]});else if(w.sep)w.sep.push(this.sourceToken);else w.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let X=this.flowScalar(this.type);if(!w||w.value)_.items.push({start:[],key:X,sep:[]});else if(w.sep)this.stack.push(X);else Object.assign(w,{key:X,sep:[]});return}case"flow-map-end":case"flow-seq-end":_.end.push(this.sourceToken);return}let $=this.startBlockValue(_);if($)this.stack.push($);else yield*this.pop(),yield*this.step()}else{let $=this.peek(2);if($.type==="block-map"&&(this.type==="map-value-ind"&&$.indent===_.indent||this.type==="newline"&&!$.items[$.items.length-1].sep))yield*this.pop(),yield*this.step();else if(this.type==="map-value-ind"&&$.type!=="flow-collection"){let X=w2($),J=tw(X);n5(_);let Y=_.end.splice(1,_.end.length);Y.push(this.sourceToken);let W={type:"block-map",offset:_.offset,indent:_.indent,items:[{start:J,key:_,sep:Y}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=W}else yield*this.lineEnd(_)}}flowScalar(_){if(this.onNewLine){let w=this.source.indexOf(`
137
+ `)+1;while(w!==0)this.onNewLine(this.offset+w),w=this.source.indexOf(`
138
+ `,w)+1}return{type:_,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(_){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let w=w2(_),$=tw(w);return $.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:$,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let w=w2(_),$=tw(w);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:$,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(_,w){if(this.type!=="comment")return!1;if(this.indent<=w)return!1;return _.every(($)=>$.type==="newline"||$.type==="space")}*documentEnd(_){if(this.type!=="doc-mode"){if(_.end)_.end.push(this.sourceToken);else _.end=[this.sourceToken];if(this.type==="newline")yield*this.pop()}}*lineEnd(_){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;case"space":case"comment":default:if(_.end)_.end.push(this.sourceToken);else _.end=[this.sourceToken];if(this.type==="newline")yield*this.pop()}}}qB.Parser=o5});var wX=P((AB)=>{var s5=a3(),QB=m0(),i0=u0(),HB=Y3(),DB=p(),BB=Y$(),t5=W$();function e5(_){let w=_.prettyErrors!==!1;return{lineCounter:_.lineCounter||w&&new BB.LineCounter||null,prettyErrors:w}}function UB(_,w={}){let{lineCounter:$,prettyErrors:X}=e5(w),J=new t5.Parser($?.addNewLine),Y=new s5.Composer(w),W=Array.from(Y.compose(J.parse(_)));if(X&&$)for(let q of W)q.errors.forEach(i0.prettifyError(_,$)),q.warnings.forEach(i0.prettifyError(_,$));if(W.length>0)return W;return Object.assign([],{empty:!0},Y.streamInfo())}function _X(_,w={}){let{lineCounter:$,prettyErrors:X}=e5(w),J=new t5.Parser($?.addNewLine),Y=new s5.Composer(w),W=null;for(let q of Y.compose(J.parse(_),!0,_.length))if(!W)W=q;else if(W.options.logLevel!=="silent"){W.errors.push(new i0.YAMLParseError(q.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}if(X&&$)W.errors.forEach(i0.prettifyError(_,$)),W.warnings.forEach(i0.prettifyError(_,$));return W}function zB(_,w,$){let X=void 0;if(typeof w==="function")X=w;else if($===void 0&&w&&typeof w==="object")$=w;let J=_X(_,$);if(!J)return null;if(J.warnings.forEach((Y)=>HB.warn(J.options.logLevel,Y)),J.errors.length>0)if(J.options.logLevel!=="silent")throw J.errors[0];else J.errors=[];return J.toJS(Object.assign({reviver:X},$))}function VB(_,w,$){let X=null;if(typeof w==="function"||Array.isArray(w))X=w;else if($===void 0&&w)$=w;if(typeof $==="string")$=$.length;if(typeof $==="number"){let J=Math.round($);$=J<1?void 0:J>8?{indent:8}:{indent:J}}if(_===void 0){let{keepUndefined:J}=$??w??{};if(!J)return}if(DB.isDocument(_)&&!X)return _.toString($);return new QB.Document(_,X,$).toString($)}AB.parse=zB;AB.parseAllDocuments=UB;AB.parseDocument=_X;AB.stringify=VB});var XX=P((IB)=>{var fB=a3(),LB=m0(),KB=I3(),q$=u0(),NB=j0(),Jw=p(),bB=e_(),jB=$_(),EB=ww(),SB=$w(),PB=e1(),ZB=J$(),CB=Y$(),TB=W$(),X2=wX(),$X=N0();IB.Composer=fB.Composer;IB.Document=LB.Document;IB.Schema=KB.Schema;IB.YAMLError=q$.YAMLError;IB.YAMLParseError=q$.YAMLParseError;IB.YAMLWarning=q$.YAMLWarning;IB.Alias=NB.Alias;IB.isAlias=Jw.isAlias;IB.isCollection=Jw.isCollection;IB.isDocument=Jw.isDocument;IB.isMap=Jw.isMap;IB.isNode=Jw.isNode;IB.isPair=Jw.isPair;IB.isScalar=Jw.isScalar;IB.isSeq=Jw.isSeq;IB.Pair=bB.Pair;IB.Scalar=jB.Scalar;IB.YAMLMap=EB.YAMLMap;IB.YAMLSeq=SB.YAMLSeq;IB.CST=PB;IB.Lexer=ZB.Lexer;IB.LineCounter=CB.LineCounter;IB.Parser=TB.Parser;IB.parse=X2.parse;IB.parseAllDocuments=X2.parseAllDocuments;IB.parseDocument=X2.parseDocument;IB.stringify=X2.stringify;IB.visit=$X.visit;IB.visitAsync=$X.visitAsync});var F9=(_)=>_.payload.title?.trim()||`session:${_.payload.id}`;function w1(_){let{store:w,agent:$}=_;return{async session(X){let J=X.payload.id,Y=await g$(w,J);switch(X.type){case"session.created":{if(Y)return{task_id:Y.id};let W=F9(X);return{task_id:(await w.createTask({title:W,session_id:J,owner:$,priority:3})).id}}case"session.idle":{if(!Y)return null;if(Y.status==="pending"){let W=await w.updateTask(Y.id,{status:"in_progress"});return W?{task_id:W.id}:null}return null}case"session.deleted":{if(!Y)return null;return await w.updateTask(Y.id,{status:"cancelled"}),{task_id:Y.id}}case"session.error":case"session.compacted":return await w.appendOperation({task_id:Y?.id??null,type:`session.${X.type.split(".").pop()}`,data:{session_id:J,agent:$}}),null;default:return null}},async tool(X){let J=X.payload.sessionID,Y=await g$(w,J);if(!Y)return await w.appendOperation({task_id:null,type:"tool.orphan",data:{session_id:J,tool:X.payload.tool}}),{task_id:(await w.createTask({title:`${X.payload.tool} (orphan)`,session_id:null,owner:$,priority:3})).id};let W=f9(X),G=(await w.listTasks({parent_id:Y.id,limit:20})).tasks.find((H)=>H.title===W&&Date.now()-new Date(H.created_at).getTime()<60000);if(G)return{task_id:G.id};let Q=await w.createTask({title:W,parent_id:Y.id,session_id:J,owner:$,priority:3});return await w.updateTask(Q.id,{status:"in_progress"}),{task_id:Q.id}},async catchAll(X){try{await w.appendOperation({task_id:null,type:X.type,data:{payload:X.payload,agent:$}})}catch{}}}}async function g$(_,w){return(await _.listTasks({session_id:w,limit:1})).tasks[0]??null}function f9(_){let w=_.payload.tool,$=_.payload.args??{};switch(w){case"write":case"edit":return`${w} ${$.filePath??"?"}`;case"bash":case"shell":{let X=String($.command??$.cmd??"");return`${w} ${X.slice(0,40)}`}case"read":return`read ${$.filePath??"?"}`;default:return`${w} ${JSON.stringify($).slice(0,40)}`}}var V2="Roy \u2014 task-as-first-class-citizen agent. Uses the roy-agent task lifecycle "+"(task_tree \u2192 task_create \u2192 task_update \u2192 task_operation_create \u2192 task_complete) "+"so every piece of work is tracked in the local task store.",A2=`# Roy \u2014 task-first-class-citizen agent
3
139
 
4
140
  You are **Roy**, an agent whose defining rule is simple:
5
141
 
@@ -86,7 +222,41 @@ if it is not in the task store, it is not tracked.
86
222
  - Be direct and concrete; the user is reading task titles and milestones.
87
223
  - Report the task id and its state whenever you finish a step.
88
224
  - If a task is blocked, mark it (\`task_update(status="paused")\`) and record a
89
- \`problem\` milestone explaining the blocker instead of going silent.`;var l$="roy",V1={action:"execute",resource:"*",effect:"deny"};function D1(){return{id:l$,mode:"primary",description:b0,system:j0,permissions:[{...V1}]}}function YJ($,J){if(!Array.isArray($.permissions))$.permissions=[];for(let Q of J)if(!$.permissions.some((Y)=>Y.action===Q.action&&Y.resource===Q.resource&&Y.effect===Q.effect))$.permissions.push({...Q})}function N0($){let J=D1();return $.update(l$,(Q)=>{if(Q.mode=J.mode,Q.description=J.description,Q.system=J.system,Q.hidden===void 0)Q.hidden=!1;YJ(Q,J.permissions)}),J}var BJ={todo:"pending",active:"in_progress",completed:"done",cancelled:"cancelled",paused:"blocked",archived:"archived"},HJ={pending:"todo",in_progress:"active",done:"completed",cancelled:"cancelled",blocked:"paused",review:"active",archived:"archived"};function R0($){return BJ[$]??"pending"}function A1($){return HJ[$]??"todo"}function O0($){switch($){case"high":return 1;case"low":return 5;case"medium":default:return 3}}function z1($){if($===void 0)return"medium";if($<=2)return"high";if($===3)return"medium";return"low"}function F0($){if(!$||$.length===0)return;return $.join(",")}function K1($){if(!$)return[];return $.split(",").map((J)=>J.trim()).filter((J)=>J.length>0)}var b1="roy.milestone";function j1($,J={}){let Q=J.sessionId??"unknown",W=J.agent??"roy";async function Y(G){if(typeof G==="number"&&Number.isFinite(G)){if(typeof $.getTaskByNum==="function")return await $.getTaskByNum(G);return await B(G)}if(/^\d+$/.test(G)){let M=Number(G);if(typeof $.getTaskByNum==="function")return await $.getTaskByNum(M);return await B(M)}return await $.getTask(G)}async function B(G){return(await $.listTasks({limit:1e6})).tasks.find((L)=>L.num===G)??null}function H(G){if(typeof G.num!=="number")throw Error(`store did not expose a numeric handle for task ${G.id}`);return G.num}function X(G){let M=G.roy??{},L;if(G.parent_id)L=_.get(G.parent_id);return{id:H(G),title:G.title,description:G.description??"",status:A1(G.status),priority:z1(G.priority),type:M.type??"normal",progress:typeof M.progress==="number"?M.progress:q(G),current_status:M.current_status??"",goals_and_expected_deliverables:M.goals_and_expected_deliverables??"",...L!==void 0?{parent_task_id:L}:{},createdAt:G.created_at,updatedAt:G.updated_at,...M.due_date?{due_date:M.due_date}:{},tags:K1(G.tags),project_path:M.project_path??"unknown",context:M.context??"{}"}}function q(G){return G.status==="done"?100:0}let _=new Map;async function b(){let G=await $.listTasks({limit:1e6});_=new Map(G.tasks.filter((M)=>typeof M.num==="number").map((M)=>[M.id,M.num]))}function j(G){let M=G.data??{},L=M.taskId??G.task_id,w=typeof L==="number"?L:typeof L==="string"&&/^\d+$/.test(L)?Number(L):0,I=String(M.milestoneType??M.actionType??"progress"),T=String(M.milestoneTitle??M.actionTitle??""),m=String(M.milestoneDescription??M.actionDescription??"");return{id:typeof G.num==="number"?G.num:0,taskId:w,sessionId:String(M.sessionId??G.task_id??"unknown"),milestoneType:I,milestoneTitle:T,milestoneDescription:m,processDescription:String(M.processDescription??""),timestamp:G.created_at,...M.mdPath?{mdPath:String(M.mdPath)}:{},actionType:I,actionTitle:T,actionDescription:m}}async function z(G){await b();let M=null;if(G.parent_task_id!==void 0&&G.parent_task_id!==null){let I=await Y(G.parent_task_id);if(!I)throw Error(`parent task not found: ${G.parent_task_id}`);M=I.id}let L={type:G.type??"normal",progress:0,current_status:"",goals_and_expected_deliverables:G.goals_and_expected_deliverables??"",project_path:G.project_path??"unknown",context:G.context??"{}",...G.due_date?{due_date:G.due_date}:{}},w=await $.createTask({title:G.title,description:G.description,priority:O0(G.priority),owner:W,tags:F0(G.tags),parent_id:M,session_id:G.sessionId??Q,roy:L});return _.set(w.id,H(w)),X(w)}async function O(G){await b();let M=await Y(G);return M?X(M):null}async function P(G){let M=await O(G);if(!M)return null;let L=await M1({taskId:M.id,limit:1000,offset:0});return{...M,operations:L.operations}}async function C(G={}){await b();let M={limit:Math.max(G.limit??20,1)*50+1000,offset:0};if(G.status!==void 0)M.status=R0(G.status);let w=(await $.listTasks(M)).tasks.map(X);if(G.include_archived!==!0)w=w.filter((d)=>d.status!=="archived");if(G.priority!==void 0)w=w.filter((d)=>d.priority===G.priority);if(G.type!==void 0)w=w.filter((d)=>d.type===G.type);let I=w.length,T=G.limit??20,m=G.offset??0;return{tasks:w.slice(m,m+T),total:I}}async function k(G,M){let L=await Y(G);if(!L)return null;await b();let w={};if(M.type!==void 0)w.type=M.type;if(M.progress!==void 0)w.progress=M.progress;if(M.current_status!==void 0)w.current_status=M.current_status;if(M.goals_and_expected_deliverables!==void 0)w.goals_and_expected_deliverables=M.goals_and_expected_deliverables;if(M.project_path!==void 0)w.project_path=M.project_path;if(M.context!==void 0)w.context=M.context;if(M.due_date!==void 0)w.due_date=M.due_date;let I;if(M.parent_task_id!==void 0)if(M.parent_task_id===null)I=null;else{let m=await Y(M.parent_task_id);if(!m)throw Error(`parent task not found: ${M.parent_task_id}`);I=m.id}let T=await $.updateTask(L.id,{...M.title!==void 0?{title:M.title}:{},...M.description!==void 0?{description:M.description}:{},...M.status!==void 0?{status:R0(M.status)}:{},...M.priority!==void 0?{priority:O0(M.priority)}:{},...M.tags!==void 0?{tags:F0(M.tags)}:{},...Object.keys(w).length>0?{roy:w}:{}});if(!T)return null;if(I!==void 0){await h(T.id,I);let m=await Y(T.id);return m?X(m):X(T)}return X(T)}async function h(G,M){let L=$;if(typeof L.setParentId==="function")await L.setParentId(G,M)}async function Z(G){let M=await Y(G);if(!M)return!1;return await $.deleteTask(M.id)}async function n(G,M,L){let w=await Y(G);if(!w)return null;let I=await $.updateTask(w.id,{status:"done",roy:{progress:100}});if(!I)return null;if(await $0({taskId:H(I),sessionId:M??Q,milestoneType:"completed",milestoneTitle:`Completed: ${I.title}`,milestoneDescription:L?`Deliverable: ${L}`:"Task completed",processDescription:void 0,...L?{mdPath:L}:{}}),L)await $.updateTask(w.id,{roy:{deliverable_storage_path:L}});let T=await Y(w.id);return T?X(T):X(I)}function V$(G){if(typeof G.num!=="number")throw Error(`store did not expose a numeric handle for operation ${G.id}`);return G.num}async function $0(G){let M=await Y(G.taskId);if(!M)throw Error(`Task not found: ${G.taskId}`);let L=G.milestoneType??G.actionType??"progress",w=G.milestoneTitle??G.actionTitle??"",I=G.milestoneDescription??G.actionDescription??"",T=await $.appendOperation({task_id:M.id,type:b1,data:{taskId:H(M),sessionId:G.sessionId??Q,milestoneType:L,milestoneTitle:w,milestoneDescription:I,processDescription:G.processDescription??"",...G.mdPath?{mdPath:G.mdPath}:{}}});return await $.updateTask(M.id,{roy:{}}),V$(T),j(T)}async function M1(G={}){let M;if(G.taskId!==void 0){let w=await Y(G.taskId);if(!w)return{operations:[],total:0};M=w.id}let L=await $.listOperations({...M?{task_id:M}:{},type:b1,limit:G.limit??100,offset:G.offset??0});return{operations:L.operations.map(j),total:L.total}}async function _1(G){let M=$;if(typeof M.getOperationByNum==="function"){let I=await M.getOperationByNum(G);return I?j(I):null}let w=(await $.listOperations({limit:1e6})).operations.find((I)=>I.num===G);return w?j(w):null}async function p2(G,M){let L=await _1(G);if(!L)return null;let w=M.milestoneType??M.actionType??L.milestoneType,I=M.milestoneTitle??M.actionTitle??L.milestoneTitle,T=M.milestoneDescription??M.actionDescription??L.milestoneDescription,m=$;if(typeof m.updateOperation!=="function")return L;let d=await m.updateOperation(G,{data:{taskId:L.taskId,sessionId:M.sessionId??L.sessionId,milestoneType:w,milestoneTitle:I,milestoneDescription:T,processDescription:M.processDescription??L.processDescription}});return d?j(d):null}async function o2(G){let M=$;if(typeof M.deleteOperation!=="function")return!1;return await M.deleteOperation(G)}async function r2(G,M={}){await b();let L=await $.listTasks({limit:1e6}),w=G.map((i)=>i.toLowerCase()).filter((i)=>i.length>0),I=L.tasks.map(X);if(M.include_archived!==!0)I=I.filter((i)=>i.status!=="archived");if(w.length>0)I=I.filter((i)=>{let a2=[i.title,i.description,i.goals_and_expected_deliverables,i.current_status,(i.tags??[]).join(" "),i.project_path].join(" ").toLowerCase();return w.every((s2)=>a2.includes(s2))});let T=I.length,m=M.limit??20,d=M.offset??0;return{tasks:I.slice(d,d+m),total:T}}return{createTask:z,getTask:O,getTaskWithOperations:P,listTasks:C,updateTask:k,deleteTask:Z,completeTask:n,createOperation:$0,listOperations:M1,getOperation:_1,updateOperation:p2,deleteOperation:o2,searchTasksByKeywords:r2}}import{createRequire as XJ}from"module";var qJ=Object.defineProperty;var GJ=($)=>$;function MJ($,J){this[$]=GJ.bind(null,J)}var N1=($,J)=>{for(var Q in J)qJ($,Q,{get:J[Q],enumerable:!0,configurable:!0,set:MJ.bind(J,Q)})};var J$=($,J)=>()=>($&&(J=$($=0)),J),q$=XJ(import.meta.url);function L0(){return process.env.ROY_TRACE_DEBUG_STORAGE==="1"||process.env.ROY_TRACE_DEBUG==="1"}function R1($){let J=new WeakSet;try{return JSON.stringify($,(Q,W)=>{if(typeof W==="function")return"[Function]";if(W===void 0)return"[undefined]";if(W===null)return null;if(W instanceof Error)return`${W.name}: ${W.message}`;if(typeof W==="object"){if("$typeof"in W||"type"in W&&"props"in W&&"key"in W)return"[ReactElement]";if(J.has(W))return"[Circular]";J.add(W)}if(typeof W==="bigint")return W.toString();return W})}catch(Q){return`[Unserializable: ${Q instanceof Error?Q.message:String(Q)}]`}}function _J(){if(typeof Bun<"u"){let{Database:$}=q$("bun:sqlite");return $}else return q$("better-sqlite3")}function UJ($){let Q=new(_J())($);if(typeof Q.run!=="function")Q.run=function(W,...Y){if(Y.length>0)return this.prepare(W).run(...Y);else return this.exec(W)};return Q}class w0{db=null;dbPath;initialized=!1;constructor($){if(!$)throw Error("SQLiteSpanStorage requires a valid dbPath parameter");if($===":memory:")throw Error("SQLiteSpanStorage does not support :memory: mode. Use a file path instead.");this.dbPath=$}async initialize(){if(this.initialized)return;let $=q$("fs"),Q=q$("path").dirname(this.dbPath);if(!$.existsSync(Q))$.mkdirSync(Q,{recursive:!0});this.db=UJ(this.dbPath),this.db.run("PRAGMA journal_mode=WAL"),this.db.run("PRAGMA busy_timeout=5000"),this.db.run("PRAGMA synchronous=NORMAL"),this.db.run(`
225
+ \`problem\` milestone explaining the blocker instead of going silent.`;var $0="roy",k$={action:"execute",resource:"*",effect:"deny"};function h$(){return{id:$0,mode:"primary",description:V2,system:A2,permissions:[{...k$}]}}function L9(_,w){if(!Array.isArray(_.permissions))_.permissions=[];for(let $ of w)if(!_.permissions.some((J)=>J.action===$.action&&J.resource===$.resource&&J.effect===$.effect))_.permissions.push({...$})}function M2(_){let w=h$();return _.update($0,($)=>{if($.mode=w.mode,$.description=w.description,$.system=w.system,$.hidden===void 0)$.hidden=!1;L9($,w.permissions)}),w}var M={};O9(M,{void:()=>W6,util:()=>l,unknown:()=>J6,union:()=>H6,undefined:()=>w6,tuple:()=>U6,transformer:()=>K6,symbol:()=>_6,string:()=>p$,strictObject:()=>Q6,setErrorMap:()=>b9,set:()=>A6,record:()=>z6,quotelessJson:()=>K9,promise:()=>L6,preprocess:()=>j6,pipeline:()=>E6,ostring:()=>S6,optional:()=>N6,onumber:()=>P6,oboolean:()=>Z6,objectUtil:()=>R2,object:()=>G6,number:()=>i$,nullable:()=>b6,null:()=>$6,never:()=>Y6,nativeEnum:()=>f6,nan:()=>s9,map:()=>V6,makeIssue:()=>X0,literal:()=>O6,lazy:()=>R6,late:()=>a9,isValid:()=>c_,isDirty:()=>X1,isAsync:()=>bw,isAborted:()=>$1,intersection:()=>B6,instanceof:()=>o9,getParsedType:()=>P_,getErrorMap:()=>Nw,function:()=>M6,enum:()=>F6,effect:()=>K6,discriminatedUnion:()=>D6,defaultErrorMap:()=>h_,datetimeRegex:()=>l$,date:()=>e9,custom:()=>d$,coerce:()=>C6,boolean:()=>r$,bigint:()=>t9,array:()=>q6,any:()=>X6,addIssueToContext:()=>b,ZodVoid:()=>Y0,ZodUnknown:()=>d_,ZodUnion:()=>Cw,ZodUndefined:()=>Pw,ZodType:()=>v,ZodTuple:()=>C_,ZodTransformer:()=>L_,ZodSymbol:()=>J0,ZodString:()=>R_,ZodSet:()=>Gw,ZodSchema:()=>v,ZodRecord:()=>W0,ZodReadonly:()=>vw,ZodPromise:()=>Qw,ZodPipeline:()=>Q0,ZodParsedType:()=>L,ZodOptional:()=>F_,ZodObject:()=>s,ZodNumber:()=>p_,ZodNullable:()=>v_,ZodNull:()=>Zw,ZodNever:()=>Z_,ZodNativeEnum:()=>kw,ZodNaN:()=>G0,ZodMap:()=>q0,ZodLiteral:()=>gw,ZodLazy:()=>Iw,ZodIssueCode:()=>O,ZodIntersection:()=>Tw,ZodFunction:()=>Ew,ZodFirstPartyTypeKind:()=>F,ZodError:()=>Y_,ZodEnum:()=>r_,ZodEffects:()=>L_,ZodDiscriminatedUnion:()=>J1,ZodDefault:()=>hw,ZodDate:()=>Ww,ZodCatch:()=>yw,ZodBranded:()=>Y1,ZodBoolean:()=>Sw,ZodBigInt:()=>i_,ZodArray:()=>O_,ZodAny:()=>qw,Schema:()=>v,ParseStatus:()=>W_,OK:()=>q_,NEVER:()=>T6,INVALID:()=>T,EMPTY_PATH:()=>j9,DIRTY:()=>Yw,BRAND:()=>n9});var l;(function(_){_.assertEqual=(J)=>{};function w(J){}_.assertIs=w;function $(J){throw Error()}_.assertNever=$,_.arrayToEnum=(J)=>{let Y={};for(let W of J)Y[W]=W;return Y},_.getValidEnumValues=(J)=>{let Y=_.objectKeys(J).filter((q)=>typeof J[J[q]]!=="number"),W={};for(let q of Y)W[q]=J[q];return _.objectValues(W)},_.objectValues=(J)=>{return _.objectKeys(J).map(function(Y){return J[Y]})},_.objectKeys=typeof Object.keys==="function"?(J)=>Object.keys(J):(J)=>{let Y=[];for(let W in J)if(Object.prototype.hasOwnProperty.call(J,W))Y.push(W);return Y},_.find=(J,Y)=>{for(let W of J)if(Y(W))return W;return},_.isInteger=typeof Number.isInteger==="function"?(J)=>Number.isInteger(J):(J)=>typeof J==="number"&&Number.isFinite(J)&&Math.floor(J)===J;function X(J,Y=" | "){return J.map((W)=>typeof W==="string"?`'${W}'`:W).join(Y)}_.joinValues=X,_.jsonStringifyReplacer=(J,Y)=>{if(typeof Y==="bigint")return Y.toString();return Y}})(l||(l={}));var R2;(function(_){_.mergeShapes=(w,$)=>{return{...w,...$}}})(R2||(R2={}));var L=l.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),P_=(_)=>{switch(typeof _){case"undefined":return L.undefined;case"string":return L.string;case"number":return Number.isNaN(_)?L.nan:L.number;case"boolean":return L.boolean;case"function":return L.function;case"bigint":return L.bigint;case"symbol":return L.symbol;case"object":if(Array.isArray(_))return L.array;if(_===null)return L.null;if(_.then&&typeof _.then==="function"&&_.catch&&typeof _.catch==="function")return L.promise;if(typeof Map<"u"&&_ instanceof Map)return L.map;if(typeof Set<"u"&&_ instanceof Set)return L.set;if(typeof Date<"u"&&_ instanceof Date)return L.date;return L.object;default:return L.unknown}};var O=l.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),K9=(_)=>{return JSON.stringify(_,null,2).replace(/"([^"]+)":/g,"$1:")};class Y_ extends Error{get errors(){return this.issues}constructor(_){super();this.issues=[],this.addIssue=($)=>{this.issues=[...this.issues,$]},this.addIssues=($=[])=>{this.issues=[...this.issues,...$]};let w=new.target.prototype;if(Object.setPrototypeOf)Object.setPrototypeOf(this,w);else this.__proto__=w;this.name="ZodError",this.issues=_}format(_){let w=_||function(J){return J.message},$={_errors:[]},X=(J)=>{for(let Y of J.issues)if(Y.code==="invalid_union")Y.unionErrors.map(X);else if(Y.code==="invalid_return_type")X(Y.returnTypeError);else if(Y.code==="invalid_arguments")X(Y.argumentsError);else if(Y.path.length===0)$._errors.push(w(Y));else{let W=$,q=0;while(q<Y.path.length){let G=Y.path[q];if(q!==Y.path.length-1)W[G]=W[G]||{_errors:[]};else W[G]=W[G]||{_errors:[]},W[G]._errors.push(w(Y));W=W[G],q++}}};return X(this),$}static assert(_){if(!(_ instanceof Y_))throw Error(`Not a ZodError: ${_}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,l.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(_=(w)=>w.message){let w={},$=[];for(let X of this.issues)if(X.path.length>0){let J=X.path[0];w[J]=w[J]||[],w[J].push(_(X))}else $.push(_(X));return{formErrors:$,fieldErrors:w}}get formErrors(){return this.flatten()}}Y_.create=(_)=>{return new Y_(_)};var N9=(_,w)=>{let $;switch(_.code){case O.invalid_type:if(_.received===L.undefined)$="Required";else $=`Expected ${_.expected}, received ${_.received}`;break;case O.invalid_literal:$=`Invalid literal value, expected ${JSON.stringify(_.expected,l.jsonStringifyReplacer)}`;break;case O.unrecognized_keys:$=`Unrecognized key(s) in object: ${l.joinValues(_.keys,", ")}`;break;case O.invalid_union:$="Invalid input";break;case O.invalid_union_discriminator:$=`Invalid discriminator value. Expected ${l.joinValues(_.options)}`;break;case O.invalid_enum_value:$=`Invalid enum value. Expected ${l.joinValues(_.options)}, received '${_.received}'`;break;case O.invalid_arguments:$="Invalid function arguments";break;case O.invalid_return_type:$="Invalid function return type";break;case O.invalid_date:$="Invalid date";break;case O.invalid_string:if(typeof _.validation==="object")if("includes"in _.validation){if($=`Invalid input: must include "${_.validation.includes}"`,typeof _.validation.position==="number")$=`${$} at one or more positions greater than or equal to ${_.validation.position}`}else if("startsWith"in _.validation)$=`Invalid input: must start with "${_.validation.startsWith}"`;else if("endsWith"in _.validation)$=`Invalid input: must end with "${_.validation.endsWith}"`;else l.assertNever(_.validation);else if(_.validation!=="regex")$=`Invalid ${_.validation}`;else $="Invalid";break;case O.too_small:if(_.type==="array")$=`Array must contain ${_.exact?"exactly":_.inclusive?"at least":"more than"} ${_.minimum} element(s)`;else if(_.type==="string")$=`String must contain ${_.exact?"exactly":_.inclusive?"at least":"over"} ${_.minimum} character(s)`;else if(_.type==="number")$=`Number must be ${_.exact?"exactly equal to ":_.inclusive?"greater than or equal to ":"greater than "}${_.minimum}`;else if(_.type==="bigint")$=`Number must be ${_.exact?"exactly equal to ":_.inclusive?"greater than or equal to ":"greater than "}${_.minimum}`;else if(_.type==="date")$=`Date must be ${_.exact?"exactly equal to ":_.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(_.minimum))}`;else $="Invalid input";break;case O.too_big:if(_.type==="array")$=`Array must contain ${_.exact?"exactly":_.inclusive?"at most":"less than"} ${_.maximum} element(s)`;else if(_.type==="string")$=`String must contain ${_.exact?"exactly":_.inclusive?"at most":"under"} ${_.maximum} character(s)`;else if(_.type==="number")$=`Number must be ${_.exact?"exactly":_.inclusive?"less than or equal to":"less than"} ${_.maximum}`;else if(_.type==="bigint")$=`BigInt must be ${_.exact?"exactly":_.inclusive?"less than or equal to":"less than"} ${_.maximum}`;else if(_.type==="date")$=`Date must be ${_.exact?"exactly":_.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(_.maximum))}`;else $="Invalid input";break;case O.custom:$="Invalid input";break;case O.invalid_intersection_types:$="Intersection results could not be merged";break;case O.not_multiple_of:$=`Number must be a multiple of ${_.multipleOf}`;break;case O.not_finite:$="Number must be finite";break;default:$=w.defaultError,l.assertNever(_)}return{message:$}},h_=N9;var y$=h_;function b9(_){y$=_}function Nw(){return y$}var X0=(_)=>{let{data:w,path:$,errorMaps:X,issueData:J}=_,Y=[...$,...J.path||[]],W={...J,path:Y};if(J.message!==void 0)return{...J,path:Y,message:J.message};let q="",G=X.filter((Q)=>!!Q).slice().reverse();for(let Q of G)q=Q(W,{data:w,defaultError:q}).message;return{...J,path:Y,message:q}},j9=[];function b(_,w){let $=Nw(),X=X0({issueData:w,data:_.data,path:_.path,errorMaps:[_.common.contextualErrorMap,_.schemaErrorMap,$,$===h_?void 0:h_].filter((J)=>!!J)});_.common.issues.push(X)}class W_{constructor(){this.value="valid"}dirty(){if(this.value==="valid")this.value="dirty"}abort(){if(this.value!=="aborted")this.value="aborted"}static mergeArray(_,w){let $=[];for(let X of w){if(X.status==="aborted")return T;if(X.status==="dirty")_.dirty();$.push(X.value)}return{status:_.value,value:$}}static async mergeObjectAsync(_,w){let $=[];for(let X of w){let J=await X.key,Y=await X.value;$.push({key:J,value:Y})}return W_.mergeObjectSync(_,$)}static mergeObjectSync(_,w){let $={};for(let X of w){let{key:J,value:Y}=X;if(J.status==="aborted")return T;if(Y.status==="aborted")return T;if(J.status==="dirty")_.dirty();if(Y.status==="dirty")_.dirty();if(J.value!=="__proto__"&&(typeof Y.value<"u"||X.alwaysSet))$[J.value]=Y.value}return{status:_.value,value:$}}}var T=Object.freeze({status:"aborted"}),Yw=(_)=>({status:"dirty",value:_}),q_=(_)=>({status:"valid",value:_}),$1=(_)=>_.status==="aborted",X1=(_)=>_.status==="dirty",c_=(_)=>_.status==="valid",bw=(_)=>typeof Promise<"u"&&_ instanceof Promise;var Z;(function(_){_.errToObj=(w)=>typeof w==="string"?{message:w}:w||{},_.toString=(w)=>typeof w==="string"?w:w?.message})(Z||(Z={}));class f_{constructor(_,w,$,X){this._cachedPath=[],this.parent=_,this.data=w,this._path=$,this._key=X}get path(){if(!this._cachedPath.length)if(Array.isArray(this._key))this._cachedPath.push(...this._path,...this._key);else this._cachedPath.push(...this._path,this._key);return this._cachedPath}}var v$=(_,w)=>{if(c_(w))return{success:!0,data:w.value};else{if(!_.common.issues.length)throw Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let $=new Y_(_.common.issues);return this._error=$,this._error}}}};function k(_){if(!_)return{};let{errorMap:w,invalid_type_error:$,required_error:X,description:J}=_;if(w&&($||X))throw Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);if(w)return{errorMap:w,description:J};return{errorMap:(W,q)=>{let{message:G}=_;if(W.code==="invalid_enum_value")return{message:G??q.defaultError};if(typeof q.data>"u")return{message:G??X??q.defaultError};if(W.code!=="invalid_type")return{message:q.defaultError};return{message:G??$??q.defaultError}},description:J}}class v{get description(){return this._def.description}_getType(_){return P_(_.data)}_getOrReturnCtx(_,w){return w||{common:_.parent.common,data:_.data,parsedType:P_(_.data),schemaErrorMap:this._def.errorMap,path:_.path,parent:_.parent}}_processInputParams(_){return{status:new W_,ctx:{common:_.parent.common,data:_.data,parsedType:P_(_.data),schemaErrorMap:this._def.errorMap,path:_.path,parent:_.parent}}}_parseSync(_){let w=this._parse(_);if(bw(w))throw Error("Synchronous parse encountered promise.");return w}_parseAsync(_){let w=this._parse(_);return Promise.resolve(w)}parse(_,w){let $=this.safeParse(_,w);if($.success)return $.data;throw $.error}safeParse(_,w){let $={common:{issues:[],async:w?.async??!1,contextualErrorMap:w?.errorMap},path:w?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:_,parsedType:P_(_)},X=this._parseSync({data:_,path:$.path,parent:$});return v$($,X)}"~validate"(_){let w={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:_,parsedType:P_(_)};if(!this["~standard"].async)try{let $=this._parseSync({data:_,path:[],parent:w});return c_($)?{value:$.value}:{issues:w.common.issues}}catch($){if($?.message?.toLowerCase()?.includes("encountered"))this["~standard"].async=!0;w.common={issues:[],async:!0}}return this._parseAsync({data:_,path:[],parent:w}).then(($)=>c_($)?{value:$.value}:{issues:w.common.issues})}async parseAsync(_,w){let $=await this.safeParseAsync(_,w);if($.success)return $.data;throw $.error}async safeParseAsync(_,w){let $={common:{issues:[],contextualErrorMap:w?.errorMap,async:!0},path:w?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:_,parsedType:P_(_)},X=this._parse({data:_,path:$.path,parent:$}),J=await(bw(X)?X:Promise.resolve(X));return v$($,J)}refine(_,w){let $=(X)=>{if(typeof w==="string"||typeof w>"u")return{message:w};else if(typeof w==="function")return w(X);else return w};return this._refinement((X,J)=>{let Y=_(X),W=()=>J.addIssue({code:O.custom,...$(X)});if(typeof Promise<"u"&&Y instanceof Promise)return Y.then((q)=>{if(!q)return W(),!1;else return!0});if(!Y)return W(),!1;else return!0})}refinement(_,w){return this._refinement(($,X)=>{if(!_($))return X.addIssue(typeof w==="function"?w($,X):w),!1;else return!0})}_refinement(_){return new L_({schema:this,typeName:F.ZodEffects,effect:{type:"refinement",refinement:_}})}superRefine(_){return this._refinement(_)}constructor(_){this.spa=this.safeParseAsync,this._def=_,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:(w)=>this["~validate"](w)}}optional(){return F_.create(this,this._def)}nullable(){return v_.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return O_.create(this)}promise(){return Qw.create(this,this._def)}or(_){return Cw.create([this,_],this._def)}and(_){return Tw.create(this,_,this._def)}transform(_){return new L_({...k(this._def),schema:this,typeName:F.ZodEffects,effect:{type:"transform",transform:_}})}default(_){let w=typeof _==="function"?_:()=>_;return new hw({...k(this._def),innerType:this,defaultValue:w,typeName:F.ZodDefault})}brand(){return new Y1({typeName:F.ZodBranded,type:this,...k(this._def)})}catch(_){let w=typeof _==="function"?_:()=>_;return new yw({...k(this._def),innerType:this,catchValue:w,typeName:F.ZodCatch})}describe(_){return new this.constructor({...this._def,description:_})}pipe(_){return Q0.create(this,_)}readonly(){return vw.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}var E9=/^c[^\s-]{8,}$/i,S9=/^[0-9a-z]+$/,P9=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Z9=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,C9=/^[a-z0-9_-]{21}$/i,T9=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,I9=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,g9=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,k9="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",O2,h9=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,y9=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,v9=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,x9=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,m9=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,u9=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,m$="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",l9=new RegExp(`^${m$}$`);function u$(_){let w="[0-5]\\d";if(_.precision)w=`${w}\\.\\d{${_.precision}}`;else if(_.precision==null)w=`${w}(\\.\\d+)?`;let $=_.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${w})${$}`}function c9(_){return new RegExp(`^${u$(_)}$`)}function l$(_){let w=`${m$}T${u$(_)}`,$=[];if($.push(_.local?"Z?":"Z"),_.offset)$.push("([+-]\\d{2}:?\\d{2})");return w=`${w}(${$.join("|")})`,new RegExp(`^${w}$`)}function d9(_,w){if((w==="v4"||!w)&&h9.test(_))return!0;if((w==="v6"||!w)&&v9.test(_))return!0;return!1}function p9(_,w){if(!T9.test(_))return!1;try{let[$]=_.split(".");if(!$)return!1;let X=$.replace(/-/g,"+").replace(/_/g,"/").padEnd($.length+(4-$.length%4)%4,"="),J=JSON.parse(atob(X));if(typeof J!=="object"||J===null)return!1;if("typ"in J&&J?.typ!=="JWT")return!1;if(!J.alg)return!1;if(w&&J.alg!==w)return!1;return!0}catch{return!1}}function i9(_,w){if((w==="v4"||!w)&&y9.test(_))return!0;if((w==="v6"||!w)&&x9.test(_))return!0;return!1}class R_ extends v{_parse(_){if(this._def.coerce)_.data=String(_.data);if(this._getType(_)!==L.string){let J=this._getOrReturnCtx(_);return b(J,{code:O.invalid_type,expected:L.string,received:J.parsedType}),T}let $=new W_,X=void 0;for(let J of this._def.checks)if(J.kind==="min"){if(_.data.length<J.value)X=this._getOrReturnCtx(_,X),b(X,{code:O.too_small,minimum:J.value,type:"string",inclusive:!0,exact:!1,message:J.message}),$.dirty()}else if(J.kind==="max"){if(_.data.length>J.value)X=this._getOrReturnCtx(_,X),b(X,{code:O.too_big,maximum:J.value,type:"string",inclusive:!0,exact:!1,message:J.message}),$.dirty()}else if(J.kind==="length"){let Y=_.data.length>J.value,W=_.data.length<J.value;if(Y||W){if(X=this._getOrReturnCtx(_,X),Y)b(X,{code:O.too_big,maximum:J.value,type:"string",inclusive:!0,exact:!0,message:J.message});else if(W)b(X,{code:O.too_small,minimum:J.value,type:"string",inclusive:!0,exact:!0,message:J.message});$.dirty()}}else if(J.kind==="email"){if(!g9.test(_.data))X=this._getOrReturnCtx(_,X),b(X,{validation:"email",code:O.invalid_string,message:J.message}),$.dirty()}else if(J.kind==="emoji"){if(!O2)O2=new RegExp(k9,"u");if(!O2.test(_.data))X=this._getOrReturnCtx(_,X),b(X,{validation:"emoji",code:O.invalid_string,message:J.message}),$.dirty()}else if(J.kind==="uuid"){if(!Z9.test(_.data))X=this._getOrReturnCtx(_,X),b(X,{validation:"uuid",code:O.invalid_string,message:J.message}),$.dirty()}else if(J.kind==="nanoid"){if(!C9.test(_.data))X=this._getOrReturnCtx(_,X),b(X,{validation:"nanoid",code:O.invalid_string,message:J.message}),$.dirty()}else if(J.kind==="cuid"){if(!E9.test(_.data))X=this._getOrReturnCtx(_,X),b(X,{validation:"cuid",code:O.invalid_string,message:J.message}),$.dirty()}else if(J.kind==="cuid2"){if(!S9.test(_.data))X=this._getOrReturnCtx(_,X),b(X,{validation:"cuid2",code:O.invalid_string,message:J.message}),$.dirty()}else if(J.kind==="ulid"){if(!P9.test(_.data))X=this._getOrReturnCtx(_,X),b(X,{validation:"ulid",code:O.invalid_string,message:J.message}),$.dirty()}else if(J.kind==="url")try{new URL(_.data)}catch{X=this._getOrReturnCtx(_,X),b(X,{validation:"url",code:O.invalid_string,message:J.message}),$.dirty()}else if(J.kind==="regex"){if(J.regex.lastIndex=0,!J.regex.test(_.data))X=this._getOrReturnCtx(_,X),b(X,{validation:"regex",code:O.invalid_string,message:J.message}),$.dirty()}else if(J.kind==="trim")_.data=_.data.trim();else if(J.kind==="includes"){if(!_.data.includes(J.value,J.position))X=this._getOrReturnCtx(_,X),b(X,{code:O.invalid_string,validation:{includes:J.value,position:J.position},message:J.message}),$.dirty()}else if(J.kind==="toLowerCase")_.data=_.data.toLowerCase();else if(J.kind==="toUpperCase")_.data=_.data.toUpperCase();else if(J.kind==="startsWith"){if(!_.data.startsWith(J.value))X=this._getOrReturnCtx(_,X),b(X,{code:O.invalid_string,validation:{startsWith:J.value},message:J.message}),$.dirty()}else if(J.kind==="endsWith"){if(!_.data.endsWith(J.value))X=this._getOrReturnCtx(_,X),b(X,{code:O.invalid_string,validation:{endsWith:J.value},message:J.message}),$.dirty()}else if(J.kind==="datetime"){if(!l$(J).test(_.data))X=this._getOrReturnCtx(_,X),b(X,{code:O.invalid_string,validation:"datetime",message:J.message}),$.dirty()}else if(J.kind==="date"){if(!l9.test(_.data))X=this._getOrReturnCtx(_,X),b(X,{code:O.invalid_string,validation:"date",message:J.message}),$.dirty()}else if(J.kind==="time"){if(!c9(J).test(_.data))X=this._getOrReturnCtx(_,X),b(X,{code:O.invalid_string,validation:"time",message:J.message}),$.dirty()}else if(J.kind==="duration"){if(!I9.test(_.data))X=this._getOrReturnCtx(_,X),b(X,{validation:"duration",code:O.invalid_string,message:J.message}),$.dirty()}else if(J.kind==="ip"){if(!d9(_.data,J.version))X=this._getOrReturnCtx(_,X),b(X,{validation:"ip",code:O.invalid_string,message:J.message}),$.dirty()}else if(J.kind==="jwt"){if(!p9(_.data,J.alg))X=this._getOrReturnCtx(_,X),b(X,{validation:"jwt",code:O.invalid_string,message:J.message}),$.dirty()}else if(J.kind==="cidr"){if(!i9(_.data,J.version))X=this._getOrReturnCtx(_,X),b(X,{validation:"cidr",code:O.invalid_string,message:J.message}),$.dirty()}else if(J.kind==="base64"){if(!m9.test(_.data))X=this._getOrReturnCtx(_,X),b(X,{validation:"base64",code:O.invalid_string,message:J.message}),$.dirty()}else if(J.kind==="base64url"){if(!u9.test(_.data))X=this._getOrReturnCtx(_,X),b(X,{validation:"base64url",code:O.invalid_string,message:J.message}),$.dirty()}else l.assertNever(J);return{status:$.value,value:_.data}}_regex(_,w,$){return this.refinement((X)=>_.test(X),{validation:w,code:O.invalid_string,...Z.errToObj($)})}_addCheck(_){return new R_({...this._def,checks:[...this._def.checks,_]})}email(_){return this._addCheck({kind:"email",...Z.errToObj(_)})}url(_){return this._addCheck({kind:"url",...Z.errToObj(_)})}emoji(_){return this._addCheck({kind:"emoji",...Z.errToObj(_)})}uuid(_){return this._addCheck({kind:"uuid",...Z.errToObj(_)})}nanoid(_){return this._addCheck({kind:"nanoid",...Z.errToObj(_)})}cuid(_){return this._addCheck({kind:"cuid",...Z.errToObj(_)})}cuid2(_){return this._addCheck({kind:"cuid2",...Z.errToObj(_)})}ulid(_){return this._addCheck({kind:"ulid",...Z.errToObj(_)})}base64(_){return this._addCheck({kind:"base64",...Z.errToObj(_)})}base64url(_){return this._addCheck({kind:"base64url",...Z.errToObj(_)})}jwt(_){return this._addCheck({kind:"jwt",...Z.errToObj(_)})}ip(_){return this._addCheck({kind:"ip",...Z.errToObj(_)})}cidr(_){return this._addCheck({kind:"cidr",...Z.errToObj(_)})}datetime(_){if(typeof _==="string")return this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:_});return this._addCheck({kind:"datetime",precision:typeof _?.precision>"u"?null:_?.precision,offset:_?.offset??!1,local:_?.local??!1,...Z.errToObj(_?.message)})}date(_){return this._addCheck({kind:"date",message:_})}time(_){if(typeof _==="string")return this._addCheck({kind:"time",precision:null,message:_});return this._addCheck({kind:"time",precision:typeof _?.precision>"u"?null:_?.precision,...Z.errToObj(_?.message)})}duration(_){return this._addCheck({kind:"duration",...Z.errToObj(_)})}regex(_,w){return this._addCheck({kind:"regex",regex:_,...Z.errToObj(w)})}includes(_,w){return this._addCheck({kind:"includes",value:_,position:w?.position,...Z.errToObj(w?.message)})}startsWith(_,w){return this._addCheck({kind:"startsWith",value:_,...Z.errToObj(w)})}endsWith(_,w){return this._addCheck({kind:"endsWith",value:_,...Z.errToObj(w)})}min(_,w){return this._addCheck({kind:"min",value:_,...Z.errToObj(w)})}max(_,w){return this._addCheck({kind:"max",value:_,...Z.errToObj(w)})}length(_,w){return this._addCheck({kind:"length",value:_,...Z.errToObj(w)})}nonempty(_){return this.min(1,Z.errToObj(_))}trim(){return new R_({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new R_({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new R_({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find((_)=>_.kind==="datetime")}get isDate(){return!!this._def.checks.find((_)=>_.kind==="date")}get isTime(){return!!this._def.checks.find((_)=>_.kind==="time")}get isDuration(){return!!this._def.checks.find((_)=>_.kind==="duration")}get isEmail(){return!!this._def.checks.find((_)=>_.kind==="email")}get isURL(){return!!this._def.checks.find((_)=>_.kind==="url")}get isEmoji(){return!!this._def.checks.find((_)=>_.kind==="emoji")}get isUUID(){return!!this._def.checks.find((_)=>_.kind==="uuid")}get isNANOID(){return!!this._def.checks.find((_)=>_.kind==="nanoid")}get isCUID(){return!!this._def.checks.find((_)=>_.kind==="cuid")}get isCUID2(){return!!this._def.checks.find((_)=>_.kind==="cuid2")}get isULID(){return!!this._def.checks.find((_)=>_.kind==="ulid")}get isIP(){return!!this._def.checks.find((_)=>_.kind==="ip")}get isCIDR(){return!!this._def.checks.find((_)=>_.kind==="cidr")}get isBase64(){return!!this._def.checks.find((_)=>_.kind==="base64")}get isBase64url(){return!!this._def.checks.find((_)=>_.kind==="base64url")}get minLength(){let _=null;for(let w of this._def.checks)if(w.kind==="min"){if(_===null||w.value>_)_=w.value}return _}get maxLength(){let _=null;for(let w of this._def.checks)if(w.kind==="max"){if(_===null||w.value<_)_=w.value}return _}}R_.create=(_)=>{return new R_({checks:[],typeName:F.ZodString,coerce:_?.coerce??!1,...k(_)})};function r9(_,w){let $=(_.toString().split(".")[1]||"").length,X=(w.toString().split(".")[1]||"").length,J=$>X?$:X,Y=Number.parseInt(_.toFixed(J).replace(".","")),W=Number.parseInt(w.toFixed(J).replace(".",""));return Y%W/10**J}class p_ extends v{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(_){if(this._def.coerce)_.data=Number(_.data);if(this._getType(_)!==L.number){let J=this._getOrReturnCtx(_);return b(J,{code:O.invalid_type,expected:L.number,received:J.parsedType}),T}let $=void 0,X=new W_;for(let J of this._def.checks)if(J.kind==="int"){if(!l.isInteger(_.data))$=this._getOrReturnCtx(_,$),b($,{code:O.invalid_type,expected:"integer",received:"float",message:J.message}),X.dirty()}else if(J.kind==="min"){if(J.inclusive?_.data<J.value:_.data<=J.value)$=this._getOrReturnCtx(_,$),b($,{code:O.too_small,minimum:J.value,type:"number",inclusive:J.inclusive,exact:!1,message:J.message}),X.dirty()}else if(J.kind==="max"){if(J.inclusive?_.data>J.value:_.data>=J.value)$=this._getOrReturnCtx(_,$),b($,{code:O.too_big,maximum:J.value,type:"number",inclusive:J.inclusive,exact:!1,message:J.message}),X.dirty()}else if(J.kind==="multipleOf"){if(r9(_.data,J.value)!==0)$=this._getOrReturnCtx(_,$),b($,{code:O.not_multiple_of,multipleOf:J.value,message:J.message}),X.dirty()}else if(J.kind==="finite"){if(!Number.isFinite(_.data))$=this._getOrReturnCtx(_,$),b($,{code:O.not_finite,message:J.message}),X.dirty()}else l.assertNever(J);return{status:X.value,value:_.data}}gte(_,w){return this.setLimit("min",_,!0,Z.toString(w))}gt(_,w){return this.setLimit("min",_,!1,Z.toString(w))}lte(_,w){return this.setLimit("max",_,!0,Z.toString(w))}lt(_,w){return this.setLimit("max",_,!1,Z.toString(w))}setLimit(_,w,$,X){return new p_({...this._def,checks:[...this._def.checks,{kind:_,value:w,inclusive:$,message:Z.toString(X)}]})}_addCheck(_){return new p_({...this._def,checks:[...this._def.checks,_]})}int(_){return this._addCheck({kind:"int",message:Z.toString(_)})}positive(_){return this._addCheck({kind:"min",value:0,inclusive:!1,message:Z.toString(_)})}negative(_){return this._addCheck({kind:"max",value:0,inclusive:!1,message:Z.toString(_)})}nonpositive(_){return this._addCheck({kind:"max",value:0,inclusive:!0,message:Z.toString(_)})}nonnegative(_){return this._addCheck({kind:"min",value:0,inclusive:!0,message:Z.toString(_)})}multipleOf(_,w){return this._addCheck({kind:"multipleOf",value:_,message:Z.toString(w)})}finite(_){return this._addCheck({kind:"finite",message:Z.toString(_)})}safe(_){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:Z.toString(_)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:Z.toString(_)})}get minValue(){let _=null;for(let w of this._def.checks)if(w.kind==="min"){if(_===null||w.value>_)_=w.value}return _}get maxValue(){let _=null;for(let w of this._def.checks)if(w.kind==="max"){if(_===null||w.value<_)_=w.value}return _}get isInt(){return!!this._def.checks.find((_)=>_.kind==="int"||_.kind==="multipleOf"&&l.isInteger(_.value))}get isFinite(){let _=null,w=null;for(let $ of this._def.checks)if($.kind==="finite"||$.kind==="int"||$.kind==="multipleOf")return!0;else if($.kind==="min"){if(w===null||$.value>w)w=$.value}else if($.kind==="max"){if(_===null||$.value<_)_=$.value}return Number.isFinite(w)&&Number.isFinite(_)}}p_.create=(_)=>{return new p_({checks:[],typeName:F.ZodNumber,coerce:_?.coerce||!1,...k(_)})};class i_ extends v{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte}_parse(_){if(this._def.coerce)try{_.data=BigInt(_.data)}catch{return this._getInvalidInput(_)}if(this._getType(_)!==L.bigint)return this._getInvalidInput(_);let $=void 0,X=new W_;for(let J of this._def.checks)if(J.kind==="min"){if(J.inclusive?_.data<J.value:_.data<=J.value)$=this._getOrReturnCtx(_,$),b($,{code:O.too_small,type:"bigint",minimum:J.value,inclusive:J.inclusive,message:J.message}),X.dirty()}else if(J.kind==="max"){if(J.inclusive?_.data>J.value:_.data>=J.value)$=this._getOrReturnCtx(_,$),b($,{code:O.too_big,type:"bigint",maximum:J.value,inclusive:J.inclusive,message:J.message}),X.dirty()}else if(J.kind==="multipleOf"){if(_.data%J.value!==BigInt(0))$=this._getOrReturnCtx(_,$),b($,{code:O.not_multiple_of,multipleOf:J.value,message:J.message}),X.dirty()}else l.assertNever(J);return{status:X.value,value:_.data}}_getInvalidInput(_){let w=this._getOrReturnCtx(_);return b(w,{code:O.invalid_type,expected:L.bigint,received:w.parsedType}),T}gte(_,w){return this.setLimit("min",_,!0,Z.toString(w))}gt(_,w){return this.setLimit("min",_,!1,Z.toString(w))}lte(_,w){return this.setLimit("max",_,!0,Z.toString(w))}lt(_,w){return this.setLimit("max",_,!1,Z.toString(w))}setLimit(_,w,$,X){return new i_({...this._def,checks:[...this._def.checks,{kind:_,value:w,inclusive:$,message:Z.toString(X)}]})}_addCheck(_){return new i_({...this._def,checks:[...this._def.checks,_]})}positive(_){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:Z.toString(_)})}negative(_){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:Z.toString(_)})}nonpositive(_){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:Z.toString(_)})}nonnegative(_){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:Z.toString(_)})}multipleOf(_,w){return this._addCheck({kind:"multipleOf",value:_,message:Z.toString(w)})}get minValue(){let _=null;for(let w of this._def.checks)if(w.kind==="min"){if(_===null||w.value>_)_=w.value}return _}get maxValue(){let _=null;for(let w of this._def.checks)if(w.kind==="max"){if(_===null||w.value<_)_=w.value}return _}}i_.create=(_)=>{return new i_({checks:[],typeName:F.ZodBigInt,coerce:_?.coerce??!1,...k(_)})};class Sw extends v{_parse(_){if(this._def.coerce)_.data=Boolean(_.data);if(this._getType(_)!==L.boolean){let $=this._getOrReturnCtx(_);return b($,{code:O.invalid_type,expected:L.boolean,received:$.parsedType}),T}return q_(_.data)}}Sw.create=(_)=>{return new Sw({typeName:F.ZodBoolean,coerce:_?.coerce||!1,...k(_)})};class Ww extends v{_parse(_){if(this._def.coerce)_.data=new Date(_.data);if(this._getType(_)!==L.date){let J=this._getOrReturnCtx(_);return b(J,{code:O.invalid_type,expected:L.date,received:J.parsedType}),T}if(Number.isNaN(_.data.getTime())){let J=this._getOrReturnCtx(_);return b(J,{code:O.invalid_date}),T}let $=new W_,X=void 0;for(let J of this._def.checks)if(J.kind==="min"){if(_.data.getTime()<J.value)X=this._getOrReturnCtx(_,X),b(X,{code:O.too_small,message:J.message,inclusive:!0,exact:!1,minimum:J.value,type:"date"}),$.dirty()}else if(J.kind==="max"){if(_.data.getTime()>J.value)X=this._getOrReturnCtx(_,X),b(X,{code:O.too_big,message:J.message,inclusive:!0,exact:!1,maximum:J.value,type:"date"}),$.dirty()}else l.assertNever(J);return{status:$.value,value:new Date(_.data.getTime())}}_addCheck(_){return new Ww({...this._def,checks:[...this._def.checks,_]})}min(_,w){return this._addCheck({kind:"min",value:_.getTime(),message:Z.toString(w)})}max(_,w){return this._addCheck({kind:"max",value:_.getTime(),message:Z.toString(w)})}get minDate(){let _=null;for(let w of this._def.checks)if(w.kind==="min"){if(_===null||w.value>_)_=w.value}return _!=null?new Date(_):null}get maxDate(){let _=null;for(let w of this._def.checks)if(w.kind==="max"){if(_===null||w.value<_)_=w.value}return _!=null?new Date(_):null}}Ww.create=(_)=>{return new Ww({checks:[],coerce:_?.coerce||!1,typeName:F.ZodDate,...k(_)})};class J0 extends v{_parse(_){if(this._getType(_)!==L.symbol){let $=this._getOrReturnCtx(_);return b($,{code:O.invalid_type,expected:L.symbol,received:$.parsedType}),T}return q_(_.data)}}J0.create=(_)=>{return new J0({typeName:F.ZodSymbol,...k(_)})};class Pw extends v{_parse(_){if(this._getType(_)!==L.undefined){let $=this._getOrReturnCtx(_);return b($,{code:O.invalid_type,expected:L.undefined,received:$.parsedType}),T}return q_(_.data)}}Pw.create=(_)=>{return new Pw({typeName:F.ZodUndefined,...k(_)})};class Zw extends v{_parse(_){if(this._getType(_)!==L.null){let $=this._getOrReturnCtx(_);return b($,{code:O.invalid_type,expected:L.null,received:$.parsedType}),T}return q_(_.data)}}Zw.create=(_)=>{return new Zw({typeName:F.ZodNull,...k(_)})};class qw extends v{constructor(){super(...arguments);this._any=!0}_parse(_){return q_(_.data)}}qw.create=(_)=>{return new qw({typeName:F.ZodAny,...k(_)})};class d_ extends v{constructor(){super(...arguments);this._unknown=!0}_parse(_){return q_(_.data)}}d_.create=(_)=>{return new d_({typeName:F.ZodUnknown,...k(_)})};class Z_ extends v{_parse(_){let w=this._getOrReturnCtx(_);return b(w,{code:O.invalid_type,expected:L.never,received:w.parsedType}),T}}Z_.create=(_)=>{return new Z_({typeName:F.ZodNever,...k(_)})};class Y0 extends v{_parse(_){if(this._getType(_)!==L.undefined){let $=this._getOrReturnCtx(_);return b($,{code:O.invalid_type,expected:L.void,received:$.parsedType}),T}return q_(_.data)}}Y0.create=(_)=>{return new Y0({typeName:F.ZodVoid,...k(_)})};class O_ extends v{_parse(_){let{ctx:w,status:$}=this._processInputParams(_),X=this._def;if(w.parsedType!==L.array)return b(w,{code:O.invalid_type,expected:L.array,received:w.parsedType}),T;if(X.exactLength!==null){let Y=w.data.length>X.exactLength.value,W=w.data.length<X.exactLength.value;if(Y||W)b(w,{code:Y?O.too_big:O.too_small,minimum:W?X.exactLength.value:void 0,maximum:Y?X.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:X.exactLength.message}),$.dirty()}if(X.minLength!==null){if(w.data.length<X.minLength.value)b(w,{code:O.too_small,minimum:X.minLength.value,type:"array",inclusive:!0,exact:!1,message:X.minLength.message}),$.dirty()}if(X.maxLength!==null){if(w.data.length>X.maxLength.value)b(w,{code:O.too_big,maximum:X.maxLength.value,type:"array",inclusive:!0,exact:!1,message:X.maxLength.message}),$.dirty()}if(w.common.async)return Promise.all([...w.data].map((Y,W)=>{return X.type._parseAsync(new f_(w,Y,w.path,W))})).then((Y)=>{return W_.mergeArray($,Y)});let J=[...w.data].map((Y,W)=>{return X.type._parseSync(new f_(w,Y,w.path,W))});return W_.mergeArray($,J)}get element(){return this._def.type}min(_,w){return new O_({...this._def,minLength:{value:_,message:Z.toString(w)}})}max(_,w){return new O_({...this._def,maxLength:{value:_,message:Z.toString(w)}})}length(_,w){return new O_({...this._def,exactLength:{value:_,message:Z.toString(w)}})}nonempty(_){return this.min(1,_)}}O_.create=(_,w)=>{return new O_({type:_,minLength:null,maxLength:null,exactLength:null,typeName:F.ZodArray,...k(w)})};function jw(_){if(_ instanceof s){let w={};for(let $ in _.shape){let X=_.shape[$];w[$]=F_.create(jw(X))}return new s({..._._def,shape:()=>w})}else if(_ instanceof O_)return new O_({..._._def,type:jw(_.element)});else if(_ instanceof F_)return F_.create(jw(_.unwrap()));else if(_ instanceof v_)return v_.create(jw(_.unwrap()));else if(_ instanceof C_)return C_.create(_.items.map((w)=>jw(w)));else return _}class s extends v{constructor(){super(...arguments);this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let _=this._def.shape(),w=l.objectKeys(_);return this._cached={shape:_,keys:w},this._cached}_parse(_){if(this._getType(_)!==L.object){let G=this._getOrReturnCtx(_);return b(G,{code:O.invalid_type,expected:L.object,received:G.parsedType}),T}let{status:$,ctx:X}=this._processInputParams(_),{shape:J,keys:Y}=this._getCached(),W=[];if(!(this._def.catchall instanceof Z_&&this._def.unknownKeys==="strip")){for(let G in X.data)if(!Y.includes(G))W.push(G)}let q=[];for(let G of Y){let Q=J[G],H=X.data[G];q.push({key:{status:"valid",value:G},value:Q._parse(new f_(X,H,X.path,G)),alwaysSet:G in X.data})}if(this._def.catchall instanceof Z_){let G=this._def.unknownKeys;if(G==="passthrough")for(let Q of W)q.push({key:{status:"valid",value:Q},value:{status:"valid",value:X.data[Q]}});else if(G==="strict"){if(W.length>0)b(X,{code:O.unrecognized_keys,keys:W}),$.dirty()}else if(G==="strip");else throw Error("Internal ZodObject error: invalid unknownKeys value.")}else{let G=this._def.catchall;for(let Q of W){let H=X.data[Q];q.push({key:{status:"valid",value:Q},value:G._parse(new f_(X,H,X.path,Q)),alwaysSet:Q in X.data})}}if(X.common.async)return Promise.resolve().then(async()=>{let G=[];for(let Q of q){let H=await Q.key,B=await Q.value;G.push({key:H,value:B,alwaysSet:Q.alwaysSet})}return G}).then((G)=>{return W_.mergeObjectSync($,G)});else return W_.mergeObjectSync($,q)}get shape(){return this._def.shape()}strict(_){return Z.errToObj,new s({...this._def,unknownKeys:"strict",..._!==void 0?{errorMap:(w,$)=>{let X=this._def.errorMap?.(w,$).message??$.defaultError;if(w.code==="unrecognized_keys")return{message:Z.errToObj(_).message??X};return{message:X}}}:{}})}strip(){return new s({...this._def,unknownKeys:"strip"})}passthrough(){return new s({...this._def,unknownKeys:"passthrough"})}extend(_){return new s({...this._def,shape:()=>({...this._def.shape(),..._})})}merge(_){return new s({unknownKeys:_._def.unknownKeys,catchall:_._def.catchall,shape:()=>({...this._def.shape(),..._._def.shape()}),typeName:F.ZodObject})}setKey(_,w){return this.augment({[_]:w})}catchall(_){return new s({...this._def,catchall:_})}pick(_){let w={};for(let $ of l.objectKeys(_))if(_[$]&&this.shape[$])w[$]=this.shape[$];return new s({...this._def,shape:()=>w})}omit(_){let w={};for(let $ of l.objectKeys(this.shape))if(!_[$])w[$]=this.shape[$];return new s({...this._def,shape:()=>w})}deepPartial(){return jw(this)}partial(_){let w={};for(let $ of l.objectKeys(this.shape)){let X=this.shape[$];if(_&&!_[$])w[$]=X;else w[$]=X.optional()}return new s({...this._def,shape:()=>w})}required(_){let w={};for(let $ of l.objectKeys(this.shape))if(_&&!_[$])w[$]=this.shape[$];else{let J=this.shape[$];while(J instanceof F_)J=J._def.innerType;w[$]=J}return new s({...this._def,shape:()=>w})}keyof(){return c$(l.objectKeys(this.shape))}}s.create=(_,w)=>{return new s({shape:()=>_,unknownKeys:"strip",catchall:Z_.create(),typeName:F.ZodObject,...k(w)})};s.strictCreate=(_,w)=>{return new s({shape:()=>_,unknownKeys:"strict",catchall:Z_.create(),typeName:F.ZodObject,...k(w)})};s.lazycreate=(_,w)=>{return new s({shape:_,unknownKeys:"strip",catchall:Z_.create(),typeName:F.ZodObject,...k(w)})};class Cw extends v{_parse(_){let{ctx:w}=this._processInputParams(_),$=this._def.options;function X(J){for(let W of J)if(W.result.status==="valid")return W.result;for(let W of J)if(W.result.status==="dirty")return w.common.issues.push(...W.ctx.common.issues),W.result;let Y=J.map((W)=>new Y_(W.ctx.common.issues));return b(w,{code:O.invalid_union,unionErrors:Y}),T}if(w.common.async)return Promise.all($.map(async(J)=>{let Y={...w,common:{...w.common,issues:[]},parent:null};return{result:await J._parseAsync({data:w.data,path:w.path,parent:Y}),ctx:Y}})).then(X);else{let J=void 0,Y=[];for(let q of $){let G={...w,common:{...w.common,issues:[]},parent:null},Q=q._parseSync({data:w.data,path:w.path,parent:G});if(Q.status==="valid")return Q;else if(Q.status==="dirty"&&!J)J={result:Q,ctx:G};if(G.common.issues.length)Y.push(G.common.issues)}if(J)return w.common.issues.push(...J.ctx.common.issues),J.result;let W=Y.map((q)=>new Y_(q));return b(w,{code:O.invalid_union,unionErrors:W}),T}}get options(){return this._def.options}}Cw.create=(_,w)=>{return new Cw({options:_,typeName:F.ZodUnion,...k(w)})};var y_=(_)=>{if(_ instanceof Iw)return y_(_.schema);else if(_ instanceof L_)return y_(_.innerType());else if(_ instanceof gw)return[_.value];else if(_ instanceof r_)return _.options;else if(_ instanceof kw)return l.objectValues(_.enum);else if(_ instanceof hw)return y_(_._def.innerType);else if(_ instanceof Pw)return[void 0];else if(_ instanceof Zw)return[null];else if(_ instanceof F_)return[void 0,...y_(_.unwrap())];else if(_ instanceof v_)return[null,...y_(_.unwrap())];else if(_ instanceof Y1)return y_(_.unwrap());else if(_ instanceof vw)return y_(_.unwrap());else if(_ instanceof yw)return y_(_._def.innerType);else return[]};class J1 extends v{_parse(_){let{ctx:w}=this._processInputParams(_);if(w.parsedType!==L.object)return b(w,{code:O.invalid_type,expected:L.object,received:w.parsedType}),T;let $=this.discriminator,X=w.data[$],J=this.optionsMap.get(X);if(!J)return b(w,{code:O.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[$]}),T;if(w.common.async)return J._parseAsync({data:w.data,path:w.path,parent:w});else return J._parseSync({data:w.data,path:w.path,parent:w})}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(_,w,$){let X=new Map;for(let J of w){let Y=y_(J.shape[_]);if(!Y.length)throw Error(`A discriminator value for key \`${_}\` could not be extracted from all schema options`);for(let W of Y){if(X.has(W))throw Error(`Discriminator property ${String(_)} has duplicate value ${String(W)}`);X.set(W,J)}}return new J1({typeName:F.ZodDiscriminatedUnion,discriminator:_,options:w,optionsMap:X,...k($)})}}function F2(_,w){let $=P_(_),X=P_(w);if(_===w)return{valid:!0,data:_};else if($===L.object&&X===L.object){let J=l.objectKeys(w),Y=l.objectKeys(_).filter((q)=>J.indexOf(q)!==-1),W={..._,...w};for(let q of Y){let G=F2(_[q],w[q]);if(!G.valid)return{valid:!1};W[q]=G.data}return{valid:!0,data:W}}else if($===L.array&&X===L.array){if(_.length!==w.length)return{valid:!1};let J=[];for(let Y=0;Y<_.length;Y++){let W=_[Y],q=w[Y],G=F2(W,q);if(!G.valid)return{valid:!1};J.push(G.data)}return{valid:!0,data:J}}else if($===L.date&&X===L.date&&+_===+w)return{valid:!0,data:_};else return{valid:!1}}class Tw extends v{_parse(_){let{status:w,ctx:$}=this._processInputParams(_),X=(J,Y)=>{if($1(J)||$1(Y))return T;let W=F2(J.value,Y.value);if(!W.valid)return b($,{code:O.invalid_intersection_types}),T;if(X1(J)||X1(Y))w.dirty();return{status:w.value,value:W.data}};if($.common.async)return Promise.all([this._def.left._parseAsync({data:$.data,path:$.path,parent:$}),this._def.right._parseAsync({data:$.data,path:$.path,parent:$})]).then(([J,Y])=>X(J,Y));else return X(this._def.left._parseSync({data:$.data,path:$.path,parent:$}),this._def.right._parseSync({data:$.data,path:$.path,parent:$}))}}Tw.create=(_,w,$)=>{return new Tw({left:_,right:w,typeName:F.ZodIntersection,...k($)})};class C_ extends v{_parse(_){let{status:w,ctx:$}=this._processInputParams(_);if($.parsedType!==L.array)return b($,{code:O.invalid_type,expected:L.array,received:$.parsedType}),T;if($.data.length<this._def.items.length)return b($,{code:O.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),T;if(!this._def.rest&&$.data.length>this._def.items.length)b($,{code:O.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),w.dirty();let J=[...$.data].map((Y,W)=>{let q=this._def.items[W]||this._def.rest;if(!q)return null;return q._parse(new f_($,Y,$.path,W))}).filter((Y)=>!!Y);if($.common.async)return Promise.all(J).then((Y)=>{return W_.mergeArray(w,Y)});else return W_.mergeArray(w,J)}get items(){return this._def.items}rest(_){return new C_({...this._def,rest:_})}}C_.create=(_,w)=>{if(!Array.isArray(_))throw Error("You must pass an array of schemas to z.tuple([ ... ])");return new C_({items:_,typeName:F.ZodTuple,rest:null,...k(w)})};class W0 extends v{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(_){let{status:w,ctx:$}=this._processInputParams(_);if($.parsedType!==L.object)return b($,{code:O.invalid_type,expected:L.object,received:$.parsedType}),T;let X=[],J=this._def.keyType,Y=this._def.valueType;for(let W in $.data)X.push({key:J._parse(new f_($,W,$.path,W)),value:Y._parse(new f_($,$.data[W],$.path,W)),alwaysSet:W in $.data});if($.common.async)return W_.mergeObjectAsync(w,X);else return W_.mergeObjectSync(w,X)}get element(){return this._def.valueType}static create(_,w,$){if(w instanceof v)return new W0({keyType:_,valueType:w,typeName:F.ZodRecord,...k($)});return new W0({keyType:R_.create(),valueType:_,typeName:F.ZodRecord,...k(w)})}}class q0 extends v{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(_){let{status:w,ctx:$}=this._processInputParams(_);if($.parsedType!==L.map)return b($,{code:O.invalid_type,expected:L.map,received:$.parsedType}),T;let X=this._def.keyType,J=this._def.valueType,Y=[...$.data.entries()].map(([W,q],G)=>{return{key:X._parse(new f_($,W,$.path,[G,"key"])),value:J._parse(new f_($,q,$.path,[G,"value"]))}});if($.common.async){let W=new Map;return Promise.resolve().then(async()=>{for(let q of Y){let G=await q.key,Q=await q.value;if(G.status==="aborted"||Q.status==="aborted")return T;if(G.status==="dirty"||Q.status==="dirty")w.dirty();W.set(G.value,Q.value)}return{status:w.value,value:W}})}else{let W=new Map;for(let q of Y){let{key:G,value:Q}=q;if(G.status==="aborted"||Q.status==="aborted")return T;if(G.status==="dirty"||Q.status==="dirty")w.dirty();W.set(G.value,Q.value)}return{status:w.value,value:W}}}}q0.create=(_,w,$)=>{return new q0({valueType:w,keyType:_,typeName:F.ZodMap,...k($)})};class Gw extends v{_parse(_){let{status:w,ctx:$}=this._processInputParams(_);if($.parsedType!==L.set)return b($,{code:O.invalid_type,expected:L.set,received:$.parsedType}),T;let X=this._def;if(X.minSize!==null){if($.data.size<X.minSize.value)b($,{code:O.too_small,minimum:X.minSize.value,type:"set",inclusive:!0,exact:!1,message:X.minSize.message}),w.dirty()}if(X.maxSize!==null){if($.data.size>X.maxSize.value)b($,{code:O.too_big,maximum:X.maxSize.value,type:"set",inclusive:!0,exact:!1,message:X.maxSize.message}),w.dirty()}let J=this._def.valueType;function Y(q){let G=new Set;for(let Q of q){if(Q.status==="aborted")return T;if(Q.status==="dirty")w.dirty();G.add(Q.value)}return{status:w.value,value:G}}let W=[...$.data.values()].map((q,G)=>J._parse(new f_($,q,$.path,G)));if($.common.async)return Promise.all(W).then((q)=>Y(q));else return Y(W)}min(_,w){return new Gw({...this._def,minSize:{value:_,message:Z.toString(w)}})}max(_,w){return new Gw({...this._def,maxSize:{value:_,message:Z.toString(w)}})}size(_,w){return this.min(_,w).max(_,w)}nonempty(_){return this.min(1,_)}}Gw.create=(_,w)=>{return new Gw({valueType:_,minSize:null,maxSize:null,typeName:F.ZodSet,...k(w)})};class Ew extends v{constructor(){super(...arguments);this.validate=this.implement}_parse(_){let{ctx:w}=this._processInputParams(_);if(w.parsedType!==L.function)return b(w,{code:O.invalid_type,expected:L.function,received:w.parsedType}),T;function $(W,q){return X0({data:W,path:w.path,errorMaps:[w.common.contextualErrorMap,w.schemaErrorMap,Nw(),h_].filter((G)=>!!G),issueData:{code:O.invalid_arguments,argumentsError:q}})}function X(W,q){return X0({data:W,path:w.path,errorMaps:[w.common.contextualErrorMap,w.schemaErrorMap,Nw(),h_].filter((G)=>!!G),issueData:{code:O.invalid_return_type,returnTypeError:q}})}let J={errorMap:w.common.contextualErrorMap},Y=w.data;if(this._def.returns instanceof Qw){let W=this;return q_(async function(...q){let G=new Y_([]),Q=await W._def.args.parseAsync(q,J).catch((D)=>{throw G.addIssue($(q,D)),G}),H=await Reflect.apply(Y,this,Q);return await W._def.returns._def.type.parseAsync(H,J).catch((D)=>{throw G.addIssue(X(H,D)),G})})}else{let W=this;return q_(function(...q){let G=W._def.args.safeParse(q,J);if(!G.success)throw new Y_([$(q,G.error)]);let Q=Reflect.apply(Y,this,G.data),H=W._def.returns.safeParse(Q,J);if(!H.success)throw new Y_([X(Q,H.error)]);return H.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(..._){return new Ew({...this._def,args:C_.create(_).rest(d_.create())})}returns(_){return new Ew({...this._def,returns:_})}implement(_){return this.parse(_)}strictImplement(_){return this.parse(_)}static create(_,w,$){return new Ew({args:_?_:C_.create([]).rest(d_.create()),returns:w||d_.create(),typeName:F.ZodFunction,...k($)})}}class Iw extends v{get schema(){return this._def.getter()}_parse(_){let{ctx:w}=this._processInputParams(_);return this._def.getter()._parse({data:w.data,path:w.path,parent:w})}}Iw.create=(_,w)=>{return new Iw({getter:_,typeName:F.ZodLazy,...k(w)})};class gw extends v{_parse(_){if(_.data!==this._def.value){let w=this._getOrReturnCtx(_);return b(w,{received:w.data,code:O.invalid_literal,expected:this._def.value}),T}return{status:"valid",value:_.data}}get value(){return this._def.value}}gw.create=(_,w)=>{return new gw({value:_,typeName:F.ZodLiteral,...k(w)})};function c$(_,w){return new r_({values:_,typeName:F.ZodEnum,...k(w)})}class r_ extends v{_parse(_){if(typeof _.data!=="string"){let w=this._getOrReturnCtx(_),$=this._def.values;return b(w,{expected:l.joinValues($),received:w.parsedType,code:O.invalid_type}),T}if(!this._cache)this._cache=new Set(this._def.values);if(!this._cache.has(_.data)){let w=this._getOrReturnCtx(_),$=this._def.values;return b(w,{received:w.data,code:O.invalid_enum_value,options:$}),T}return q_(_.data)}get options(){return this._def.values}get enum(){let _={};for(let w of this._def.values)_[w]=w;return _}get Values(){let _={};for(let w of this._def.values)_[w]=w;return _}get Enum(){let _={};for(let w of this._def.values)_[w]=w;return _}extract(_,w=this._def){return r_.create(_,{...this._def,...w})}exclude(_,w=this._def){return r_.create(this.options.filter(($)=>!_.includes($)),{...this._def,...w})}}r_.create=c$;class kw extends v{_parse(_){let w=l.getValidEnumValues(this._def.values),$=this._getOrReturnCtx(_);if($.parsedType!==L.string&&$.parsedType!==L.number){let X=l.objectValues(w);return b($,{expected:l.joinValues(X),received:$.parsedType,code:O.invalid_type}),T}if(!this._cache)this._cache=new Set(l.getValidEnumValues(this._def.values));if(!this._cache.has(_.data)){let X=l.objectValues(w);return b($,{received:$.data,code:O.invalid_enum_value,options:X}),T}return q_(_.data)}get enum(){return this._def.values}}kw.create=(_,w)=>{return new kw({values:_,typeName:F.ZodNativeEnum,...k(w)})};class Qw extends v{unwrap(){return this._def.type}_parse(_){let{ctx:w}=this._processInputParams(_);if(w.parsedType!==L.promise&&w.common.async===!1)return b(w,{code:O.invalid_type,expected:L.promise,received:w.parsedType}),T;let $=w.parsedType===L.promise?w.data:Promise.resolve(w.data);return q_($.then((X)=>{return this._def.type.parseAsync(X,{path:w.path,errorMap:w.common.contextualErrorMap})}))}}Qw.create=(_,w)=>{return new Qw({type:_,typeName:F.ZodPromise,...k(w)})};class L_ extends v{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===F.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(_){let{status:w,ctx:$}=this._processInputParams(_),X=this._def.effect||null,J={addIssue:(Y)=>{if(b($,Y),Y.fatal)w.abort();else w.dirty()},get path(){return $.path}};if(J.addIssue=J.addIssue.bind(J),X.type==="preprocess"){let Y=X.transform($.data,J);if($.common.async)return Promise.resolve(Y).then(async(W)=>{if(w.value==="aborted")return T;let q=await this._def.schema._parseAsync({data:W,path:$.path,parent:$});if(q.status==="aborted")return T;if(q.status==="dirty")return Yw(q.value);if(w.value==="dirty")return Yw(q.value);return q});else{if(w.value==="aborted")return T;let W=this._def.schema._parseSync({data:Y,path:$.path,parent:$});if(W.status==="aborted")return T;if(W.status==="dirty")return Yw(W.value);if(w.value==="dirty")return Yw(W.value);return W}}if(X.type==="refinement"){let Y=(W)=>{let q=X.refinement(W,J);if($.common.async)return Promise.resolve(q);if(q instanceof Promise)throw Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return W};if($.common.async===!1){let W=this._def.schema._parseSync({data:$.data,path:$.path,parent:$});if(W.status==="aborted")return T;if(W.status==="dirty")w.dirty();return Y(W.value),{status:w.value,value:W.value}}else return this._def.schema._parseAsync({data:$.data,path:$.path,parent:$}).then((W)=>{if(W.status==="aborted")return T;if(W.status==="dirty")w.dirty();return Y(W.value).then(()=>{return{status:w.value,value:W.value}})})}if(X.type==="transform")if($.common.async===!1){let Y=this._def.schema._parseSync({data:$.data,path:$.path,parent:$});if(!c_(Y))return T;let W=X.transform(Y.value,J);if(W instanceof Promise)throw Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:w.value,value:W}}else return this._def.schema._parseAsync({data:$.data,path:$.path,parent:$}).then((Y)=>{if(!c_(Y))return T;return Promise.resolve(X.transform(Y.value,J)).then((W)=>({status:w.value,value:W}))});l.assertNever(X)}}L_.create=(_,w,$)=>{return new L_({schema:_,typeName:F.ZodEffects,effect:w,...k($)})};L_.createWithPreprocess=(_,w,$)=>{return new L_({schema:w,effect:{type:"preprocess",transform:_},typeName:F.ZodEffects,...k($)})};class F_ extends v{_parse(_){if(this._getType(_)===L.undefined)return q_(void 0);return this._def.innerType._parse(_)}unwrap(){return this._def.innerType}}F_.create=(_,w)=>{return new F_({innerType:_,typeName:F.ZodOptional,...k(w)})};class v_ extends v{_parse(_){if(this._getType(_)===L.null)return q_(null);return this._def.innerType._parse(_)}unwrap(){return this._def.innerType}}v_.create=(_,w)=>{return new v_({innerType:_,typeName:F.ZodNullable,...k(w)})};class hw extends v{_parse(_){let{ctx:w}=this._processInputParams(_),$=w.data;if(w.parsedType===L.undefined)$=this._def.defaultValue();return this._def.innerType._parse({data:$,path:w.path,parent:w})}removeDefault(){return this._def.innerType}}hw.create=(_,w)=>{return new hw({innerType:_,typeName:F.ZodDefault,defaultValue:typeof w.default==="function"?w.default:()=>w.default,...k(w)})};class yw extends v{_parse(_){let{ctx:w}=this._processInputParams(_),$={...w,common:{...w.common,issues:[]}},X=this._def.innerType._parse({data:$.data,path:$.path,parent:{...$}});if(bw(X))return X.then((J)=>{return{status:"valid",value:J.status==="valid"?J.value:this._def.catchValue({get error(){return new Y_($.common.issues)},input:$.data})}});else return{status:"valid",value:X.status==="valid"?X.value:this._def.catchValue({get error(){return new Y_($.common.issues)},input:$.data})}}removeCatch(){return this._def.innerType}}yw.create=(_,w)=>{return new yw({innerType:_,typeName:F.ZodCatch,catchValue:typeof w.catch==="function"?w.catch:()=>w.catch,...k(w)})};class G0 extends v{_parse(_){if(this._getType(_)!==L.nan){let $=this._getOrReturnCtx(_);return b($,{code:O.invalid_type,expected:L.nan,received:$.parsedType}),T}return{status:"valid",value:_.data}}}G0.create=(_)=>{return new G0({typeName:F.ZodNaN,...k(_)})};var n9=Symbol("zod_brand");class Y1 extends v{_parse(_){let{ctx:w}=this._processInputParams(_),$=w.data;return this._def.type._parse({data:$,path:w.path,parent:w})}unwrap(){return this._def.type}}class Q0 extends v{_parse(_){let{status:w,ctx:$}=this._processInputParams(_);if($.common.async)return(async()=>{let J=await this._def.in._parseAsync({data:$.data,path:$.path,parent:$});if(J.status==="aborted")return T;if(J.status==="dirty")return w.dirty(),Yw(J.value);else return this._def.out._parseAsync({data:J.value,path:$.path,parent:$})})();else{let X=this._def.in._parseSync({data:$.data,path:$.path,parent:$});if(X.status==="aborted")return T;if(X.status==="dirty")return w.dirty(),{status:"dirty",value:X.value};else return this._def.out._parseSync({data:X.value,path:$.path,parent:$})}}static create(_,w){return new Q0({in:_,out:w,typeName:F.ZodPipeline})}}class vw extends v{_parse(_){let w=this._def.innerType._parse(_),$=(X)=>{if(c_(X))X.value=Object.freeze(X.value);return X};return bw(w)?w.then((X)=>$(X)):$(w)}unwrap(){return this._def.innerType}}vw.create=(_,w)=>{return new vw({innerType:_,typeName:F.ZodReadonly,...k(w)})};function x$(_,w){let $=typeof _==="function"?_(w):typeof _==="string"?{message:_}:_;return typeof $==="string"?{message:$}:$}function d$(_,w={},$){if(_)return qw.create().superRefine((X,J)=>{let Y=_(X);if(Y instanceof Promise)return Y.then((W)=>{if(!W){let q=x$(w,X),G=q.fatal??$??!0;J.addIssue({code:"custom",...q,fatal:G})}});if(!Y){let W=x$(w,X),q=W.fatal??$??!0;J.addIssue({code:"custom",...W,fatal:q})}return});return qw.create()}var a9={object:s.lazycreate},F;(function(_){_.ZodString="ZodString",_.ZodNumber="ZodNumber",_.ZodNaN="ZodNaN",_.ZodBigInt="ZodBigInt",_.ZodBoolean="ZodBoolean",_.ZodDate="ZodDate",_.ZodSymbol="ZodSymbol",_.ZodUndefined="ZodUndefined",_.ZodNull="ZodNull",_.ZodAny="ZodAny",_.ZodUnknown="ZodUnknown",_.ZodNever="ZodNever",_.ZodVoid="ZodVoid",_.ZodArray="ZodArray",_.ZodObject="ZodObject",_.ZodUnion="ZodUnion",_.ZodDiscriminatedUnion="ZodDiscriminatedUnion",_.ZodIntersection="ZodIntersection",_.ZodTuple="ZodTuple",_.ZodRecord="ZodRecord",_.ZodMap="ZodMap",_.ZodSet="ZodSet",_.ZodFunction="ZodFunction",_.ZodLazy="ZodLazy",_.ZodLiteral="ZodLiteral",_.ZodEnum="ZodEnum",_.ZodEffects="ZodEffects",_.ZodNativeEnum="ZodNativeEnum",_.ZodOptional="ZodOptional",_.ZodNullable="ZodNullable",_.ZodDefault="ZodDefault",_.ZodCatch="ZodCatch",_.ZodPromise="ZodPromise",_.ZodBranded="ZodBranded",_.ZodPipeline="ZodPipeline",_.ZodReadonly="ZodReadonly"})(F||(F={}));var o9=(_,w={message:`Input not instance of ${_.name}`})=>d$(($)=>$ instanceof _,w),p$=R_.create,i$=p_.create,s9=G0.create,t9=i_.create,r$=Sw.create,e9=Ww.create,_6=J0.create,w6=Pw.create,$6=Zw.create,X6=qw.create,J6=d_.create,Y6=Z_.create,W6=Y0.create,q6=O_.create,G6=s.create,Q6=s.strictCreate,H6=Cw.create,D6=J1.create,B6=Tw.create,U6=C_.create,z6=W0.create,V6=q0.create,A6=Gw.create,M6=Ew.create,R6=Iw.create,O6=gw.create,F6=r_.create,f6=kw.create,L6=Qw.create,K6=L_.create,N6=F_.create,b6=v_.create,j6=L_.createWithPreprocess,E6=Q0.create,S6=()=>p$().optional(),P6=()=>i$().optional(),Z6=()=>r$().optional(),C6={string:(_)=>R_.create({..._,coerce:!0}),number:(_)=>p_.create({..._,coerce:!0}),boolean:(_)=>Sw.create({..._,coerce:!0}),bigint:(_)=>i_.create({..._,coerce:!0}),date:(_)=>Ww.create({..._,coerce:!0})};var T6=T;var f2=M.object({bgProcessId:M.string().min(1,"bgProcessId must not be empty").describe("The background process ID returned by delegate_task (format: process_<timestamp>_<random>).")});function I6(_){return{alive:_.status==="pending"||_.status==="running",status:_.status,createdAt:_.createdAt,lastUpdatedAt:_.lastUpdatedAt??_.completedAt??_.startedAt??_.createdAt,description:_.description,..._.result!==void 0?{result:_.result}:{},..._.error!==void 0?{error:_.error}:{}}}function n$(_){let w=Date.now();return{alive:!1,status:"not_found",createdAt:w,lastUpdatedAt:w,description:`No background process found with id '${_}'.`}}var UV={name:"query_background_process",description:`Query the status of a background process previously launched via delegate_task.
226
+
227
+ Use this tool when:
228
+ - You delegated a long-running task but have NOT received any notification after a reasonable wait (5+ minutes), and want to confirm whether the process is still alive.
229
+ - The user asks about the progress of a delegated task and you need a current snapshot.
230
+ - You suspect a delegated task got stuck (no progress messages, no completion notification).
231
+
232
+ `+`DO NOT poll this tool on every turn \u2014 it is meant for diagnostic checks at a reasonable cadence (e.g. every few minutes, or when you genuinely suspect the task is stuck).
233
+
234
+ `+`Returns a JSON object with:
235
+ `+` - alive: boolean \u2014 true if status is 'pending' or 'running'
236
+ `+` - status: 'pending' | 'running' | 'completed' | 'failed' | 'stopped' | 'timeout' | 'not_found'
237
+ - createdAt, lastUpdatedAt: timestamps (ms)
238
+ - description: the task description you passed to delegate_task
239
+ - result: present when status is 'completed'
240
+ - error: present when status is 'failed'
241
+
242
+ Only the default receptionist agent has this tool. Sub-agents (roy, strict-task-agent, etc.) cannot see it because they do not need to query background tasks they themselves launched.`,parameters:f2,permission:{level:"safe",requireConfirmation:!1},metadata:{category:"task",tags:["background","delegate","query","status","diagnostic"],version:"1.0.0",allowedAgentTypes:["default"]},execute:async(_,w)=>W1(null).execute(_,w)};function W1(_=null){return{name:"query_background_process",description:`Query the status of a background process previously launched via delegate_task.
243
+
244
+ Use this tool when:
245
+ - You delegated a long-running task but have NOT received any notification after a reasonable wait (5+ minutes), and want to confirm whether the process is still alive.
246
+ - The user asks about the progress of a delegated task and you need a current snapshot.
247
+ - You suspect a delegated task got stuck (no progress messages, no completion notification).
248
+
249
+ `+`DO NOT poll this tool on every turn \u2014 it is meant for diagnostic checks at a reasonable cadence (e.g. every few minutes, or when you genuinely suspect the task is stuck).
250
+
251
+ `+`Returns a JSON object with:
252
+ `+` - alive: boolean \u2014 true if status is 'pending' or 'running'
253
+ `+` - status: 'pending' | 'running' | 'completed' | 'failed' | 'stopped' | 'timeout' | 'not_found'
254
+ - createdAt, lastUpdatedAt: timestamps (ms)
255
+ - description: the task description you passed to delegate_task
256
+ - result: present when status is 'completed'
257
+ - error: present when status is 'failed'
258
+
259
+ Only the default receptionist agent has this tool. Sub-agents (roy, strict-task-agent, etc.) cannot see it because they do not need to query background tasks they themselves launched.`,parameters:f2,permission:{level:"safe",requireConfirmation:!1},metadata:{category:"task",tags:["background","delegate","query","status","diagnostic"],version:"1.0.0",allowedAgentTypes:["default"]},execute:async(w,$)=>{let X=Date.now(),J=f2.parse(w),{bgProcessId:Y}=J;if(!_)return{success:!1,output:"",error:"query_background_process is not initialized: no BackgroundTaskManager has been bound. TaskComponent should call createQueryBackgroundProcessTool(manager) and register the tool during startup.",metadata:{execution_time_ms:Date.now()-X}};let W;try{W=_.getTask(Y)}catch(G){return{success:!1,output:"",error:`failed to query background task: ${G.message}`,metadata:{execution_time_ms:Date.now()-X}}}if(W){let G=$.session_id;if(!G||W.parentSessionId!==G)return{success:!0,output:JSON.stringify(n$(Y),null,2),metadata:{execution_time_ms:Date.now()-X,bgProcessId:Y,status:"not_found",alive:!1}}}let q=W?I6(W):n$(Y);return{success:!0,output:JSON.stringify(q,null,2),metadata:{execution_time_ms:Date.now()-X,bgProcessId:Y,status:q.status,alive:q.alive}}}}}import{createRequire as g6}from"module";var{defineProperty:L2,getOwnPropertyNames:k6,getOwnPropertyDescriptor:h6}=Object,y6=Object.prototype.hasOwnProperty;function v6(_){return this[_]}var xw=(_)=>{var w=(a$??=new WeakMap).get(_),$;if(w)return w;if(w=L2({},"__esModule",{value:!0}),_&&typeof _==="object"||typeof _==="function"){for(var X of k6(_))if(!y6.call(w,X))L2(w,X,{get:v6.bind(_,X),enumerable:!($=h6(_,X))||$.enumerable})}return a$.set(_,w),w},a$,x6=(_)=>_;function m6(_,w){this[_]=x6.bind(null,w)}var n_=(_,w)=>{for(var $ in w)L2(_,$,{get:w[$],enumerable:!0,configurable:!0,set:m6.bind(w,$)})},m=function(_,w,$,X){var J=arguments.length,Y=J<3?w:X===null?X=Object.getOwnPropertyDescriptor(w,$):X,W;if(typeof Reflect==="object"&&typeof Reflect.decorate==="function")Y=Reflect.decorate(_,w,$,X);else for(var q=_.length-1;q>=0;q--)if(W=_[q])Y=(J<3?W(Y):J>3?W(w,$,Y):W(w,$))||Y;return J>3&&Y&&Object.defineProperty(w,$,Y),Y},r=(_,w)=>()=>(_&&(w=_(_=0)),w),__=g6(import.meta.url);function K2(){return process.env.ROY_TRACE_DEBUG_STORAGE==="1"||process.env.ROY_TRACE_DEBUG==="1"}function o$(_){let w=new WeakSet;try{return JSON.stringify(_,($,X)=>{if(typeof X==="function")return"[Function]";if(X===void 0)return"[undefined]";if(X===null)return null;if(X instanceof Error)return`${X.name}: ${X.message}`;if(typeof X==="object"){if("$typeof"in X||"type"in X&&"props"in X&&"key"in X)return"[ReactElement]";if(w.has(X))return"[Circular]";w.add(X)}if(typeof X==="bigint")return X.toString();return X})}catch($){return`[Unserializable: ${$ instanceof Error?$.message:String($)}]`}}function u6(){if(typeof Bun<"u"){let{Database:_}=__("bun:sqlite");return _}else return __("better-sqlite3")}function l6(_){let $=new(u6())(_);if(typeof $.run!=="function")$.run=function(X,...J){if(J.length>0)return this.prepare(X).run(...J);else return this.exec(X)};return $}class N2{db=null;dbPath;initialized=!1;constructor(_){if(!_)throw Error("SQLiteSpanStorage requires a valid dbPath parameter");if(_===":memory:")throw Error("SQLiteSpanStorage does not support :memory: mode. Use a file path instead.");this.dbPath=_}async initialize(){if(this.initialized)return;let _=__("fs"),$=__("path").dirname(this.dbPath);if(!_.existsSync($))_.mkdirSync($,{recursive:!0});this.db=l6(this.dbPath),this.db.run("PRAGMA journal_mode=WAL"),this.db.run("PRAGMA busy_timeout=5000"),this.db.run("PRAGMA synchronous=NORMAL"),this.db.run(`
90
260
  CREATE TABLE IF NOT EXISTS span (
91
261
  span_id TEXT PRIMARY KEY,
92
262
  trace_id TEXT NOT NULL,
@@ -101,11 +271,11 @@ if it is not in the task store, it is not tracked.
101
271
  error TEXT,
102
272
  time_created INTEGER NOT NULL
103
273
  )
104
- `),this.db.run("CREATE INDEX IF NOT EXISTS idx_span_trace ON span(trace_id)"),this.db.run("CREATE INDEX IF NOT EXISTS idx_span_parent ON span(parent_span_id)"),this.initialized=!0}save($){if(!this.db){if(L0())console.log(`[SpanStorage] save() skipped: db not initialized for span "${$.name}" traceId=${$.traceId}`);return}let J=this.db.prepare(`
274
+ `),this.db.run("CREATE INDEX IF NOT EXISTS idx_span_trace ON span(trace_id)"),this.db.run("CREATE INDEX IF NOT EXISTS idx_span_parent ON span(parent_span_id)"),this.initialized=!0}save(_){if(!this.db){if(K2())console.log(`[SpanStorage] save() skipped: db not initialized for span "${_.name}" traceId=${_.traceId}`);return}let w=this.db.prepare(`
105
275
  INSERT OR REPLACE INTO span
106
276
  (span_id, trace_id, parent_span_id, name, kind, status, start_time, end_time, attributes, result, error, time_created)
107
277
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
108
- `),Q=$.result!==void 0&&$.result!==null?typeof $.result==="string"?$.result:R1($.result):null;if(L0())console.log(`[SpanStorage] Saving to "${this.dbPath}": name="${$.name}" traceId=${$.traceId} spanId=${$.spanId} status=${$.status}`);try{let W=J.run($.spanId,$.traceId,$.parentSpanId||null,$.name,$.kind,$.status,$.startTime,$.endTime||null,R1($.attributes),Q,$.error||null,Date.now());if(L0())console.log(`[SpanStorage] Save result: changes=${W?.changes}, lastInsertRowid=${W?.lastInsertRowid}`)}catch(W){console.error("[SpanStorage] Save ERROR:",W)}}saveBatch($){for(let J of $)this.save(J)}findByTraceId($){if(!this.db)return[];let J=this.db.prepare("SELECT * FROM span WHERE trace_id = ?").all($);return this.buildTree(J.map(this.rowToSpan))}findBySpanId($){if(!this.db)return;let J=this.db.prepare("SELECT * FROM span WHERE span_id = ?").get($);return J?this.rowToSpan(J):void 0}listTraces($=10){if(!this.db)return[];return this.db.prepare(`
278
+ `),$=_.result!==void 0&&_.result!==null?typeof _.result==="string"?_.result:o$(_.result):null;if(K2())console.log(`[SpanStorage] Saving to "${this.dbPath}": name="${_.name}" traceId=${_.traceId} spanId=${_.spanId} status=${_.status}`);try{let X=w.run(_.spanId,_.traceId,_.parentSpanId||null,_.name,_.kind,_.status,_.startTime,_.endTime||null,o$(_.attributes),$,_.error||null,Date.now());if(K2())console.log(`[SpanStorage] Save result: changes=${X?.changes}, lastInsertRowid=${X?.lastInsertRowid}`)}catch(X){console.error("[SpanStorage] Save ERROR:",X)}}saveBatch(_){for(let w of _)this.save(w)}findByTraceId(_){if(!this.db)return[];let w=this.db.prepare("SELECT * FROM span WHERE trace_id = ?").all(_);return this.buildTree(w.map(this.rowToSpan))}findBySpanId(_){if(!this.db)return;let w=this.db.prepare("SELECT * FROM span WHERE span_id = ?").get(_);return w?this.rowToSpan(w):void 0}listTraces(_=10){if(!this.db)return[];return this.db.prepare(`
109
279
  SELECT trace_id,
110
280
  MIN(start_time) as start_time,
111
281
  MAX(end_time) as end_time,
@@ -120,10 +290,116 @@ if it is not in the task store, it is not tracked.
120
290
  GROUP BY trace_id
121
291
  ORDER BY start_time DESC
122
292
  LIMIT ?
123
- `).all($).map((Q)=>{let W=Number(Q.span_count)||0,Y=Number(Q.error_count)||0,B=Q.end_time??void 0,H=Y===0?"ok":Y>=W?"error":"mixed";return{traceId:Q.trace_id,rootSpanName:Q.root_name??"unknown",startTime:Q.start_time,endTime:B,duration:B!==void 0?B-Q.start_time:void 0,spanCount:W,status:H}})}deleteByTraceId($){if(this.db)this.db.prepare("DELETE FROM span WHERE trace_id = ?").run($)}close(){if(this.db)this.db.close(),this.db=null}rowToSpan($){return{traceId:$.trace_id,spanId:$.span_id,parentSpanId:$.parent_span_id,name:$.name,kind:$.kind,status:$.status,startTime:$.start_time,endTime:$.end_time,attributes:$.attributes?JSON.parse($.attributes):{},result:$.result||void 0,error:$.error||void 0}}buildTree($){let J=new Map,Q=[];for(let W of $)J.set(W.spanId,{...W,children:[]});for(let W of J.values())if(W.parentSpanId){let Y=J.get(W.parentSpanId);if(Y)Y.children.push(W);else Q.push(W)}else Q.push(W);return Q}}var O1=()=>{};import{appendFileSync as RJ,existsSync as OJ,mkdirSync as FJ}from"fs";import{join as u$}from"path";function F1($,J){return $.padStart(J,"0")}function S0($){return/^[0-9a-f]+$/i.test($)}function VJ($){let J=F1($.traceId.toLowerCase(),E1),Q=F1($.spanId.toLowerCase(),v1);return[P0,J,Q,AJ].join("-")}function DJ($){if(!$||typeof $!=="string")return;let Q=$.trim().split("-");if(Q.length!==4)return;let[W,Y,B,H]=Q;if(W!==P0){if(W>P0)return}if(Y.length!==E1||!S0(Y))return;if(B.length!==v1||!S0(B))return;if(H.length!==zJ||!S0(H))return;return{traceId:Y.toLowerCase(),spanId:B.toLowerCase()}}var P0="00",AJ="01",E0="TRACEPARENT",E1=32,v1=16,zJ=2,k0,KJ=J$(()=>{k0={inject($,J){$[E0]=VJ(J)},extract($){let J=$[E0];if(!J)return;return DJ(J)},getTraceparentHeader(){return E0}}}),bJ,jJ,NJ=J$(()=>{(($)=>{$.CLIENT="client",$.SERVER="server",$.INTERNAL="internal"})(bJ||={}),(($)=>{$.OK="ok",$.ERROR="error"})(jJ||={})});function I0($){let J=$.replace(/\\/g,"/"),Q=J.match(/\/\$bunfs\/root\/(.+)$/);if(Q){let H=Q[1],X=H.match(/(packages\/[^/]+\/src\/[^/]+\/.+)$/);if(X)return X[1];return H}let W=J.match(/@roy-agent\+core@file\+([^/]+)\/node_modules\/@roy-agent\/core\/(.+)$/);if(W){let H=W[1].replace(/\+/g,"/"),X=W[2],q=H,_=X.startsWith("src/")?X:`src/${X}`;return`${q}/${_}`}let Y=J.match(/(packages\/[^/]+\/src\/[^/]+\/.+)$/);if(Y)return Y[1];let B=["packages/core/src","packages/core","packages"];for(let H of B){let X=J.indexOf(H);if(X!==-1)return J.substring(X)}return J}function LJ(){let $=process.env.HOME||process.env.USERPROFILE||"/tmp";try{let J=q$("xdg-basedir");if(J.xdgData)return u$(J.xdgData,"roy-agent","logs")}catch{}return u$($,".local","share","roy-agent","logs")}function wJ(){return kJ}function SJ(){if(p){let J=p.get("log_trace.logging.level");if(J&&["debug","info","warn","error"].includes(J))return J}let $=process.env.LOG_LEVEL;if($&&["debug","info","warn","error"].includes($))return $;return"info"}function EJ($){if(p){let W=p.get("log_trace.logging.levels");if(W&&typeof W==="object"){let B=W[$];if(B&&["debug","info","warn","error"].includes(B))return B}let Y=p.get(`log_trace.logging.levels.${$}`);if(Y&&["debug","info","warn","error"].includes(Y))return Y}let J=`LOG_LEVEL_${$.toUpperCase().replace(/:/g,"_")}`,Q=process.env[J];if(Q&&["debug","info","warn","error"].includes(Q))return Q;return SJ()}function vJ($){if($.startsWith("/"))return!0;if(/^[a-zA-Z]:[/\\]/.test($))return!0;return!1}function PJ($){if($.startsWith("~")){let J=process.env.HOME||process.env.USERPROFILE||"/tmp";return u$(J,$.slice(1))}return $}function fJ(){if(p){let $=p.get("log-trace.logging.file");if($)return $}return"app.log"}function CJ(){if(p){let $=p.get("log-trace.logging.dir");if($)return $}return LJ()}function h0(){if(p){let $=p.get("log-trace.logging.maxOutput");if(typeof $==="number")return $}return}class P1{prefix;constructor($){this.prefix=$}shouldLog($){let J=EJ(this.prefix);return f0[$]>=f0[J]}ensureLogDirectory($){if(!OJ($))try{FJ($,{recursive:!0})}catch(J){console.error("[Logger] Failed to create log directory:",$,J)}}getCallerLocation(){let $=Error.stackTraceLimit;Error.stackTraceLimit=10;let J=Error();Error.captureStackTrace(J,this.formatMessage);let Q=J.stack?.split(`
124
- `)||[];Error.stackTraceLimit=$;for(let W=1;W<Q.length;W++){let Y=Q[W];if(Y.includes("at ")&&!Y.includes("logger.ts")&&!Y.includes("formatMessage")){let B=Y.match(/at\s+.+\s+\((.+):(\d+):\d+\)/)||Y.match(/at\s+(.+):(\d+):\d+/);if(B){let H=B[1];return{file:this.getRelativePath(H),line:parseInt(B[2],10)}}}}return null}getRelativePath($){return I0($)}formatMessage($,J,Q){let W=new Date,Y=W.toLocaleString("zh-CN",{timeZone:"Asia/Shanghai",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}).replace(/\//g,"-")+"."+String(W.getMilliseconds()).padStart(3,"0"),B=this.prefix?`[${this.prefix}]`:"",H="";try{let z=c$().getTracer("roy-tracer").getCurrentContext();if(z?.traceId)H=`[traceId=${z.traceId}]`}catch{}let X="";if(Q&&typeof Q==="object"&&"callerLocation"in Q){let b=Q;X=b.callerLocation?` [${b.callerLocation}]`:"";let{callerLocation:j,...z}=b;Q=Object.keys(z).length>0?z:void 0}else{let b=this.getCallerLocation();if(b)X=` [${b.file}:${b.line}]`}let q=`${Y} [${$.toUpperCase()}]${H}${X}${B} ${J}`;if(Q!==void 0)if(typeof Q==="object")q+=" "+JSON.stringify(Q).replace(/\n/g,"");else q+=" "+String(Q);let _=h0();if(_&&_>0&&q.length>_)q=q.substring(0,_)+" [TRUNCATED]";return q}writeToFile($){try{let J=CJ(),Q=fJ(),W=PJ(J),Y=vJ(W)?W:u$(process.cwd(),W);this.ensureLogDirectory(Y);let B=u$(Y,Q);RJ(B,$+`
125
- `,"utf-8")}catch(J){console.error("[Logger] Failed to write to log file:",J)}}log($,J,Q){if(!this.shouldLog($))return;let W=this.formatMessage($,J,Q);if(this.writeToFile(W),!wJ())($==="error"?console.error:$==="warn"?console.warn:$==="info"?console.log:console.debug)(W)}debug($,J){this.log("debug",$,J)}info($,J){this.log("info",$,J)}warn($,J){this.log("warn",$,J)}error($,J){this.log("error",$,J)}}function Q$($){if(!Q0.has($))Q0.set($,new P1($));return Q0.get($)}var p=null,kJ=!1;var f0,Q0,W$=J$(()=>{Z0(),f0={debug:0,info:1,warn:2,error:3},Q0=new Map}),IJ={};N1(IJ,{setTracerProvider:()=>yJ,resetTracerProvider:()=>hJ,getTracerProvider:()=>c$,OTelTracerProvider:()=>g0});function y0(){if(!v0)v0=Q$("otel-tracer");return v0}function f1(){return process.env.ROY_TRACE_DEBUG_OTEL==="1"||process.env.ROY_TRACE_DEBUG==="1"}function C1($,...J){y0().info($,...J)}function L1($,...J){y0().warn($,...J)}function w1($,...J){y0().error($,...J)}class C0{name;kind;spanContext;attributes={};startTime;endTime;error;storage;parentSpanContext;onEnd;constructor($,J,Q,W,Y){this.name=$,this.kind="internal",this.spanContext=J,this.parentSpanContext=W,this.startTime=Date.now(),this.storage=Q,this.onEnd=Y}setAttribute($,J){this.attributes[$]=J}addEvent($,J){let Q=this.attributes._events||[];Q.push({name:$,attributes:J}),this.attributes._events=Q}end($,J){if(this.endTime=Date.now(),J)this.error=J.message;let Q=this.endTime-(this.startTime||0);if(f1())C1(`[OTelSpan] Ending span: name="${this.name}" traceId=${this.spanContext.traceId} spanId=${this.spanContext.spanId} duration=${Q}ms status=${J?"ERROR":"OK"}`);let W=this.storage;if(!W)L1(`[OTelSpan] storage is null for "${this.name}", attempting to re-fetch...`),W=c$().getStorage();if(W){if(!(W.db||W.initialized))L1(`[OTelSpan] storage not initialized for "${this.name}", initializing now...`),W.initialize().catch((B)=>{w1("[OTelSpan] Failed to initialize storage:",B)});W.save({traceId:this.spanContext.traceId,spanId:this.spanContext.spanId,parentSpanId:this.spanContext.parentSpanId,name:this.name,kind:this.kind,status:J?"error":"ok",startTime:this.startTime,endTime:this.endTime,attributes:this.attributes,result:$,error:this.error})}else w1(`[OTelSpan] Failed to save span "${this.name}": storage still null after re-fetch`);this.onEnd?.()}}class k1{name;version;storage;currentContext;activeSpans=new Map;onSpanEndCallback;provider;instanceId;constructor($,J,Q,W){this.name=$,this.version=J,this.storage=Q,this.provider=W,this.instanceId=`${$}@${W.instanceId}`}setOnSpanEndCallback($){this.onSpanEndCallback=$}getActiveSpanCount(){return this.activeSpans.size}startSpan($,J){let Q=J?.parent,W=J&&"parent"in J,Y=J&&"context"in J,B=this.provider.getGlobalContext(),H,X,q,_,b;if(Y&&J?.context){let z=J.context;X=z.traceId,q=this.generateSpanId(),_=z.spanId,b={traceId:X,spanId:q,parentSpanId:_},this.currentContext={traceId:X,spanId:q,parentSpanId:_};let O=new C0($,b,this.storage,z,()=>this.handleSpanEnd(b.spanId,z.spanId));if(J?.attributes)for(let[P,C]of Object.entries(J.attributes))O.setAttribute(P,C);return this.activeSpans.set(q,O),O}if(W)H=Q;else if(this.currentContext)H=this.currentContext;else if(B)H=B;if(X=H?.traceId||this.generateTraceId(),q=this.generateSpanId(),W&&Q)_=Q.parentSpanId||Q.spanId;else if(this.currentContext)_=this.currentContext.spanId;else if(B)_=B.spanId;b={traceId:X,spanId:q,parentSpanId:_},this.currentContext={traceId:X,spanId:q,parentSpanId:_};let j=new C0($,b,this.storage,H,()=>this.handleSpanEnd(b.spanId,H?.spanId));if(J?.attributes)for(let[z,O]of Object.entries(J.attributes))j.setAttribute(z,O);if(this.activeSpans.set(q,j),f1())C1(`[OTelTracer] \u2713 Span created: name="${$}" traceId=${X} spanId=${q} parentSpanId=${_||"-"}`);return j}injectToEnv($){if(this.currentContext)k0.inject($,this.currentContext)}getCurrentContext(){return this.currentContext}setCurrentContext($){this.currentContext=$}findStackParentSpan($){for(let[,J]of this.activeSpans)if(J.spanContext.parentSpanId===$)return J;return}endSpan($){let J=$.spanContext;this.activeSpans.delete(J.spanId);let Q=this.currentContext?.traceId;if(J.parentSpanId){let Y=this.activeSpans.get(J.parentSpanId);if(Y){let B={traceId:J.traceId,spanId:Y.spanContext.spanId,parentSpanId:Y.spanContext.parentSpanId};return this.currentContext=B,B}if(Q){let B={traceId:Q,spanId:J.parentSpanId,parentSpanId:void 0};return this.currentContext=B,B}}let W=this.findStackParentSpan(J.spanId);if(W){let Y={traceId:W.spanContext.traceId,spanId:W.spanContext.spanId,parentSpanId:W.spanContext.parentSpanId};return this.currentContext=Y,Y}this.currentContext=void 0;return}generateTraceId(){let $=Date.now().toString(16).padStart(12,"0"),J=Array.from({length:5},()=>Math.floor(Math.random()*4294967295).toString(16).padStart(8,"0")).join("");return($+J).slice(0,32).padStart(32,"0")}generateSpanId(){return Math.floor(Math.random()*18446744073709552000).toString(16).padStart(16,"0")}handleSpanEnd($,J){if(this.activeSpans.delete($),J){let W=this.activeSpans.get(J);if(W){this.currentContext={traceId:W.spanContext.traceId,spanId:W.spanContext.spanId,parentSpanId:W.spanContext.parentSpanId};return}if(this.currentContext?.traceId){this.currentContext={traceId:this.currentContext.traceId,spanId:J,parentSpanId:void 0};return}}let Q=this.findStackParentSpan($);if(Q){this.currentContext={traceId:Q.spanContext.traceId,spanId:Q.spanContext.spanId,parentSpanId:Q.spanContext.parentSpanId};return}this.currentContext=void 0}}class g0{tracers=new Map;storage;initialized=!1;globalContext;instanceId;constructor($,J){S1++,this.instanceId=`Provider#${S1}`,this.storage=$||new w0(J||gJ())}async initialize(){if(this.initialized)return;await this.storage.initialize(),this.initialized=!0}isInitialized(){return this.initialized}getGlobalContext(){return this.globalContext}setGlobalContext($){this.globalContext=$}getTracer($,J){let Q=`${$}@${J||"0.0.0"}`,W=this.tracers.get(Q);if(!W){if(W=new k1($,J,this.storage,this),this.tracers.set(Q,W),this.initialized)this.restoreFromEnv(W)}return W}restoreFromEnv($){let J=k0.extract(process.env);if(J)$.setCurrentContext({traceId:J.traceId,spanId:J.spanId,parentSpanId:void 0})}shutdown(){for(let $ of this.tracers.values());this.tracers.clear(),this.storage.close(),this.initialized=!1,this.globalContext=void 0,delete process.env.TRACEPARENT,delete process.env.TRACE_ID,delete process.env.LOG_TRACE_REQUEST_ID}getStorage(){return this.storage}}function c$(){if(!G$)G$=new g0;return G$}function hJ(){if(G$)G$.shutdown(),G$=null}function yJ($){if(G$)G$.shutdown();G$=$}function gJ(){let $=q$("os"),J=q$("path"),Q=$.homedir(),W=process.env.XDG_DATA_HOME||J.join(Q,".local","share");return J.join(W,"roy-agent","traces.db")}var v0=null,G$=null,S1=0,Z0=J$(()=>{O1(),KJ(),NJ(),W$()});function T0($,J,Q){let W=Q?.log??!1,Y=()=>{if(Q?.maxLogSize!==void 0)return Q.maxLogSize;let j=h0();return j!==void 0?j:500},B=(j)=>{if(j===void 0)return;if(j===null)return null;let z=Y(),O;try{O=typeof j==="string"?j:JSON.stringify(j,null,0).replace(/\n/g,"")}catch(P){O=`[Object with circular reference: ${P instanceof Error?P.message:String(P)}]`}if(z>0&&O.length>z)return O.slice(0,z)+" [TRUNCATED]";try{return JSON.parse(O)}catch{return O}},H=(j)=>{if(j===void 0)return"undefined";if(j===null)return"null";let z=Y(),O;try{O=typeof j==="string"?j:JSON.stringify(j,null,0).replace(/\n/g,"")}catch(P){O=`[Object with circular reference: ${P instanceof Error?P.message:String(P)}]`}return z>0&&O.length>z?O.slice(0,z)+" [TRUNCATED]":O},X=(j)=>{if(j===void 0)return;if(j===null)return null;if(typeof j==="string")return j;try{return JSON.parse(JSON.stringify(j))}catch(z){return`[Object with circular reference: ${z instanceof Error?z.message:String(z)}]`}},q="[TRACE]",_=()=>{let j=Error.stackTraceLimit;Error.stackTraceLimit=15;let z=Error();Error.captureStackTrace(z,_);let O=z.stack?.split(`
126
- `)||[];Error.stackTraceLimit=j;for(let P=1;P<O.length;P++){let C=O[P];if(C.includes("decorator.ts")||C.includes("decorator.js")||C.includes("logFn")||C.includes("getCallerLocation"))continue;let k=C.match(/at\s+.+\s+\((.+):(\d+):\d+\)/)||C.match(/at\s+(.+):(\d+):\d+/);if(k){let h=k[1];if(!h||h==="native")continue;return`${I0(h)}:${k[2]}`}}return""},b=(j,z,O)=>{if(!W)return;let P=Q$("traced:"+J),k=`[TRACE] ${j==="enter"?">>>":j==="quit"?"<<<":"!!!"} ${J}`,h=O||_(),Z=(n,V$)=>{if(V$!==void 0)P.info(`${k} ${n}: ${H(V$)}`,{callerLocation:h});else P.info(`${k} ${n}`,{callerLocation:h})};if(j==="enter")Z("enter",z);else if(j==="quit")Z("quit",Q?.recordResult?z:void 0);else Z("error",z)};return function(...j){let z=c$().getTracer("roy-tracer"),O={};if(Q?.recordParams!==!1)if(Q?.paramFilter){let k=Q.paramFilter(j);if(O.params=X(k),Q?.flattenParamFilter&&k&&typeof k==="object"&&!Array.isArray(k)){for(let[h,Z]of Object.entries(k))if(!(h in O))O[h]=X(Z)}}else O.params=X(j);let P=_(),C;try{C=z.startSpan(J,{attributes:O})}catch{}b("enter",j,P);try{let k=$.call(this,...j);if(k&&typeof k==="object"&&typeof k.then==="function")return k.then((h)=>{if(C){if(Q?.resultFilter){let n=Q.resultFilter(h);if(n&&typeof n==="object")for(let[V$,$0]of Object.entries(n))C.setAttribute(V$,X($0))}C.setAttribute("result",JSON.stringify(X(h)));let Z=Q?.errorIf?Q.errorIf(h):void 0;if(Z){let n=Z instanceof Error?Z:Error(String(Z));C.setAttribute("error",n.message),C.end(void 0,n)}else C.end(h)}return b("quit",Q?.recordResult?h:void 0,P),h},(h)=>{if(C)C.setAttribute("error",String(h)),C.end(void 0,h instanceof Error?h:Error(String(h)));throw b("error",h.message,P),h});if(C){if(Q?.resultFilter){let Z=Q.resultFilter(k);if(Z&&typeof Z==="object")for(let[n,V$]of Object.entries(Z))C.setAttribute(n,X(V$))}C.setAttribute("result",JSON.stringify(X(k)));let h=Q?.errorIf?Q.errorIf(k):void 0;if(h){let Z=h instanceof Error?h:Error(String(h));C.setAttribute("error",Z.message),C.end(void 0,Z)}else C.end(k)}return b("quit",Q?.recordResult?k:void 0,P),k}catch(k){if(C)C.setAttribute("error",String(k)),C.end(void 0,k instanceof Error?k:Error(String(k)));throw b("error",k.message,P),k}}}var I1=J$(()=>{Z0(),W$()});import{AsyncLocalStorage as TJ}from"async_hooks";var ZJ=()=>{};function g1(){return W0.getStore()||{}}function xJ(){return W0.getStore()?.agentContext?.currentTaskId}function h1($){return typeof $==="number"&&Number.isInteger($)&&$>0?$:void 0}var y1,W0,mJ,n$,Y0=J$(()=>{W$(),I1(),ZJ(),y1=Q$("env:context:env-context"),W0=new TJ,mJ=T0(function(J,Q){return h1(J?.metadata?.parentTaskId)??h1(Q?.parentTaskId)},"env-context.resolveEnvParentTaskId",{recordParams:!1,recordResult:!1,log:!1,resultFilter:($)=>({parentTaskId:$??null})}),n$=T0(function(J){let Q=xJ(),W=W0.getStore();if(W){if(!W.agentContext)W.agentContext={};W.agentContext.currentTaskId=J}y1.info(`[setCurrentTaskId] taskId=${J??"undefined"} (was: ${Q??"undefined"})`)},"env-context.setCurrentTaskId",{recordParams:!0,recordResult:!1,log:!0})});var U={};JJ(U,{void:()=>L6,util:()=>v,unknown:()=>O6,union:()=>v6,undefined:()=>j6,tuple:()=>C6,transformer:()=>l6,symbol:()=>b6,string:()=>i1,strictObject:()=>E6,setErrorMap:()=>cJ,set:()=>h6,record:()=>k6,quotelessJson:()=>lJ,promise:()=>m6,preprocess:()=>n6,pipeline:()=>i6,ostring:()=>d6,optional:()=>u6,onumber:()=>p6,oboolean:()=>o6,objectUtil:()=>x0,object:()=>S6,number:()=>d1,nullable:()=>c6,null:()=>N6,never:()=>F6,nativeEnum:()=>x6,nan:()=>A6,map:()=>I6,makeIssue:()=>i$,literal:()=>Z6,lazy:()=>g6,late:()=>V6,isValid:()=>D$,isDirty:()=>H0,isAsync:()=>S$,isAborted:()=>B0,intersection:()=>f6,instanceof:()=>D6,getParsedType:()=>Y$,getErrorMap:()=>w$,function:()=>y6,enum:()=>T6,effect:()=>l6,discriminatedUnion:()=>P6,defaultErrorMap:()=>M$,datetimeRegex:()=>u1,date:()=>K6,custom:()=>n1,coerce:()=>r6,boolean:()=>p1,bigint:()=>z6,array:()=>w6,any:()=>R6,addIssueToContext:()=>K,ZodVoid:()=>p$,ZodUnknown:()=>A$,ZodUnion:()=>k$,ZodUndefined:()=>f$,ZodType:()=>E,ZodTuple:()=>H$,ZodTransformer:()=>t,ZodSymbol:()=>d$,ZodString:()=>o,ZodSet:()=>O$,ZodSchema:()=>E,ZodRecord:()=>o$,ZodReadonly:()=>x$,ZodPromise:()=>F$,ZodPipeline:()=>s$,ZodParsedType:()=>A,ZodOptional:()=>a,ZodObject:()=>g,ZodNumber:()=>z$,ZodNullable:()=>U$,ZodNull:()=>C$,ZodNever:()=>B$,ZodNativeEnum:()=>g$,ZodNaN:()=>a$,ZodMap:()=>r$,ZodLiteral:()=>y$,ZodLazy:()=>h$,ZodIssueCode:()=>V,ZodIntersection:()=>I$,ZodFunction:()=>v$,ZodFirstPartyTypeKind:()=>D,ZodError:()=>l,ZodEnum:()=>b$,ZodEffects:()=>t,ZodDiscriminatedUnion:()=>X0,ZodDefault:()=>Z$,ZodDate:()=>N$,ZodCatch:()=>T$,ZodBranded:()=>q0,ZodBoolean:()=>P$,ZodBigInt:()=>K$,ZodArray:()=>r,ZodAny:()=>R$,Schema:()=>E,ParseStatus:()=>x,OK:()=>u,NEVER:()=>a6,INVALID:()=>R,EMPTY_PATH:()=>nJ,DIRTY:()=>j$,BRAND:()=>U6});var v;(function($){$.assertEqual=(Y)=>{};function J(Y){}$.assertIs=J;function Q(Y){throw Error()}$.assertNever=Q,$.arrayToEnum=(Y)=>{let B={};for(let H of Y)B[H]=H;return B},$.getValidEnumValues=(Y)=>{let B=$.objectKeys(Y).filter((X)=>typeof Y[Y[X]]!=="number"),H={};for(let X of B)H[X]=Y[X];return $.objectValues(H)},$.objectValues=(Y)=>{return $.objectKeys(Y).map(function(B){return Y[B]})},$.objectKeys=typeof Object.keys==="function"?(Y)=>Object.keys(Y):(Y)=>{let B=[];for(let H in Y)if(Object.prototype.hasOwnProperty.call(Y,H))B.push(H);return B},$.find=(Y,B)=>{for(let H of Y)if(B(H))return H;return},$.isInteger=typeof Number.isInteger==="function"?(Y)=>Number.isInteger(Y):(Y)=>typeof Y==="number"&&Number.isFinite(Y)&&Math.floor(Y)===Y;function W(Y,B=" | "){return Y.map((H)=>typeof H==="string"?`'${H}'`:H).join(B)}$.joinValues=W,$.jsonStringifyReplacer=(Y,B)=>{if(typeof B==="bigint")return B.toString();return B}})(v||(v={}));var x0;(function($){$.mergeShapes=(J,Q)=>{return{...J,...Q}}})(x0||(x0={}));var A=v.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),Y$=($)=>{switch(typeof $){case"undefined":return A.undefined;case"string":return A.string;case"number":return Number.isNaN($)?A.nan:A.number;case"boolean":return A.boolean;case"function":return A.function;case"bigint":return A.bigint;case"symbol":return A.symbol;case"object":if(Array.isArray($))return A.array;if($===null)return A.null;if($.then&&typeof $.then==="function"&&$.catch&&typeof $.catch==="function")return A.promise;if(typeof Map<"u"&&$ instanceof Map)return A.map;if(typeof Set<"u"&&$ instanceof Set)return A.set;if(typeof Date<"u"&&$ instanceof Date)return A.date;return A.object;default:return A.unknown}};var V=v.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),lJ=($)=>{return JSON.stringify($,null,2).replace(/"([^"]+)":/g,"$1:")};class l extends Error{get errors(){return this.issues}constructor($){super();this.issues=[],this.addIssue=(Q)=>{this.issues=[...this.issues,Q]},this.addIssues=(Q=[])=>{this.issues=[...this.issues,...Q]};let J=new.target.prototype;if(Object.setPrototypeOf)Object.setPrototypeOf(this,J);else this.__proto__=J;this.name="ZodError",this.issues=$}format($){let J=$||function(Y){return Y.message},Q={_errors:[]},W=(Y)=>{for(let B of Y.issues)if(B.code==="invalid_union")B.unionErrors.map(W);else if(B.code==="invalid_return_type")W(B.returnTypeError);else if(B.code==="invalid_arguments")W(B.argumentsError);else if(B.path.length===0)Q._errors.push(J(B));else{let H=Q,X=0;while(X<B.path.length){let q=B.path[X];if(X!==B.path.length-1)H[q]=H[q]||{_errors:[]};else H[q]=H[q]||{_errors:[]},H[q]._errors.push(J(B));H=H[q],X++}}};return W(this),Q}static assert($){if(!($ instanceof l))throw Error(`Not a ZodError: ${$}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,v.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten($=(J)=>J.message){let J={},Q=[];for(let W of this.issues)if(W.path.length>0){let Y=W.path[0];J[Y]=J[Y]||[],J[Y].push($(W))}else Q.push($(W));return{formErrors:Q,fieldErrors:J}}get formErrors(){return this.flatten()}}l.create=($)=>{return new l($)};var uJ=($,J)=>{let Q;switch($.code){case V.invalid_type:if($.received===A.undefined)Q="Required";else Q=`Expected ${$.expected}, received ${$.received}`;break;case V.invalid_literal:Q=`Invalid literal value, expected ${JSON.stringify($.expected,v.jsonStringifyReplacer)}`;break;case V.unrecognized_keys:Q=`Unrecognized key(s) in object: ${v.joinValues($.keys,", ")}`;break;case V.invalid_union:Q="Invalid input";break;case V.invalid_union_discriminator:Q=`Invalid discriminator value. Expected ${v.joinValues($.options)}`;break;case V.invalid_enum_value:Q=`Invalid enum value. Expected ${v.joinValues($.options)}, received '${$.received}'`;break;case V.invalid_arguments:Q="Invalid function arguments";break;case V.invalid_return_type:Q="Invalid function return type";break;case V.invalid_date:Q="Invalid date";break;case V.invalid_string:if(typeof $.validation==="object")if("includes"in $.validation){if(Q=`Invalid input: must include "${$.validation.includes}"`,typeof $.validation.position==="number")Q=`${Q} at one or more positions greater than or equal to ${$.validation.position}`}else if("startsWith"in $.validation)Q=`Invalid input: must start with "${$.validation.startsWith}"`;else if("endsWith"in $.validation)Q=`Invalid input: must end with "${$.validation.endsWith}"`;else v.assertNever($.validation);else if($.validation!=="regex")Q=`Invalid ${$.validation}`;else Q="Invalid";break;case V.too_small:if($.type==="array")Q=`Array must contain ${$.exact?"exactly":$.inclusive?"at least":"more than"} ${$.minimum} element(s)`;else if($.type==="string")Q=`String must contain ${$.exact?"exactly":$.inclusive?"at least":"over"} ${$.minimum} character(s)`;else if($.type==="number")Q=`Number must be ${$.exact?"exactly equal to ":$.inclusive?"greater than or equal to ":"greater than "}${$.minimum}`;else if($.type==="bigint")Q=`Number must be ${$.exact?"exactly equal to ":$.inclusive?"greater than or equal to ":"greater than "}${$.minimum}`;else if($.type==="date")Q=`Date must be ${$.exact?"exactly equal to ":$.inclusive?"greater than or equal to ":"greater than "}${new Date(Number($.minimum))}`;else Q="Invalid input";break;case V.too_big:if($.type==="array")Q=`Array must contain ${$.exact?"exactly":$.inclusive?"at most":"less than"} ${$.maximum} element(s)`;else if($.type==="string")Q=`String must contain ${$.exact?"exactly":$.inclusive?"at most":"under"} ${$.maximum} character(s)`;else if($.type==="number")Q=`Number must be ${$.exact?"exactly":$.inclusive?"less than or equal to":"less than"} ${$.maximum}`;else if($.type==="bigint")Q=`BigInt must be ${$.exact?"exactly":$.inclusive?"less than or equal to":"less than"} ${$.maximum}`;else if($.type==="date")Q=`Date must be ${$.exact?"exactly":$.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number($.maximum))}`;else Q="Invalid input";break;case V.custom:Q="Invalid input";break;case V.invalid_intersection_types:Q="Intersection results could not be merged";break;case V.not_multiple_of:Q=`Number must be a multiple of ${$.multipleOf}`;break;case V.not_finite:Q="Number must be finite";break;default:Q=J.defaultError,v.assertNever($)}return{message:Q}},M$=uJ;var Z1=M$;function cJ($){Z1=$}function w$(){return Z1}var i$=($)=>{let{data:J,path:Q,errorMaps:W,issueData:Y}=$,B=[...Q,...Y.path||[]],H={...Y,path:B};if(Y.message!==void 0)return{...Y,path:B,message:Y.message};let X="",q=W.filter((_)=>!!_).slice().reverse();for(let _ of q)X=_(H,{data:J,defaultError:X}).message;return{...Y,path:B,message:X}},nJ=[];function K($,J){let Q=w$(),W=i$({issueData:J,data:$.data,path:$.path,errorMaps:[$.common.contextualErrorMap,$.schemaErrorMap,Q,Q===M$?void 0:M$].filter((Y)=>!!Y)});$.common.issues.push(W)}class x{constructor(){this.value="valid"}dirty(){if(this.value==="valid")this.value="dirty"}abort(){if(this.value!=="aborted")this.value="aborted"}static mergeArray($,J){let Q=[];for(let W of J){if(W.status==="aborted")return R;if(W.status==="dirty")$.dirty();Q.push(W.value)}return{status:$.value,value:Q}}static async mergeObjectAsync($,J){let Q=[];for(let W of J){let Y=await W.key,B=await W.value;Q.push({key:Y,value:B})}return x.mergeObjectSync($,Q)}static mergeObjectSync($,J){let Q={};for(let W of J){let{key:Y,value:B}=W;if(Y.status==="aborted")return R;if(B.status==="aborted")return R;if(Y.status==="dirty")$.dirty();if(B.status==="dirty")$.dirty();if(Y.value!=="__proto__"&&(typeof B.value<"u"||W.alwaysSet))Q[Y.value]=B.value}return{status:$.value,value:Q}}}var R=Object.freeze({status:"aborted"}),j$=($)=>({status:"dirty",value:$}),u=($)=>({status:"valid",value:$}),B0=($)=>$.status==="aborted",H0=($)=>$.status==="dirty",D$=($)=>$.status==="valid",S$=($)=>typeof Promise<"u"&&$ instanceof Promise;var N;(function($){$.errToObj=(J)=>typeof J==="string"?{message:J}:J||{},$.toString=(J)=>typeof J==="string"?J:J?.message})(N||(N={}));class s{constructor($,J,Q,W){this._cachedPath=[],this.parent=$,this.data=J,this._path=Q,this._key=W}get path(){if(!this._cachedPath.length)if(Array.isArray(this._key))this._cachedPath.push(...this._path,...this._key);else this._cachedPath.push(...this._path,this._key);return this._cachedPath}}var T1=($,J)=>{if(D$(J))return{success:!0,data:J.value};else{if(!$.common.issues.length)throw Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let Q=new l($.common.issues);return this._error=Q,this._error}}}};function S($){if(!$)return{};let{errorMap:J,invalid_type_error:Q,required_error:W,description:Y}=$;if(J&&(Q||W))throw Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);if(J)return{errorMap:J,description:Y};return{errorMap:(H,X)=>{let{message:q}=$;if(H.code==="invalid_enum_value")return{message:q??X.defaultError};if(typeof X.data>"u")return{message:q??W??X.defaultError};if(H.code!=="invalid_type")return{message:X.defaultError};return{message:q??Q??X.defaultError}},description:Y}}class E{get description(){return this._def.description}_getType($){return Y$($.data)}_getOrReturnCtx($,J){return J||{common:$.parent.common,data:$.data,parsedType:Y$($.data),schemaErrorMap:this._def.errorMap,path:$.path,parent:$.parent}}_processInputParams($){return{status:new x,ctx:{common:$.parent.common,data:$.data,parsedType:Y$($.data),schemaErrorMap:this._def.errorMap,path:$.path,parent:$.parent}}}_parseSync($){let J=this._parse($);if(S$(J))throw Error("Synchronous parse encountered promise.");return J}_parseAsync($){let J=this._parse($);return Promise.resolve(J)}parse($,J){let Q=this.safeParse($,J);if(Q.success)return Q.data;throw Q.error}safeParse($,J){let Q={common:{issues:[],async:J?.async??!1,contextualErrorMap:J?.errorMap},path:J?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:$,parsedType:Y$($)},W=this._parseSync({data:$,path:Q.path,parent:Q});return T1(Q,W)}"~validate"($){let J={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:$,parsedType:Y$($)};if(!this["~standard"].async)try{let Q=this._parseSync({data:$,path:[],parent:J});return D$(Q)?{value:Q.value}:{issues:J.common.issues}}catch(Q){if(Q?.message?.toLowerCase()?.includes("encountered"))this["~standard"].async=!0;J.common={issues:[],async:!0}}return this._parseAsync({data:$,path:[],parent:J}).then((Q)=>D$(Q)?{value:Q.value}:{issues:J.common.issues})}async parseAsync($,J){let Q=await this.safeParseAsync($,J);if(Q.success)return Q.data;throw Q.error}async safeParseAsync($,J){let Q={common:{issues:[],contextualErrorMap:J?.errorMap,async:!0},path:J?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:$,parsedType:Y$($)},W=this._parse({data:$,path:Q.path,parent:Q}),Y=await(S$(W)?W:Promise.resolve(W));return T1(Q,Y)}refine($,J){let Q=(W)=>{if(typeof J==="string"||typeof J>"u")return{message:J};else if(typeof J==="function")return J(W);else return J};return this._refinement((W,Y)=>{let B=$(W),H=()=>Y.addIssue({code:V.custom,...Q(W)});if(typeof Promise<"u"&&B instanceof Promise)return B.then((X)=>{if(!X)return H(),!1;else return!0});if(!B)return H(),!1;else return!0})}refinement($,J){return this._refinement((Q,W)=>{if(!$(Q))return W.addIssue(typeof J==="function"?J(Q,W):J),!1;else return!0})}_refinement($){return new t({schema:this,typeName:D.ZodEffects,effect:{type:"refinement",refinement:$}})}superRefine($){return this._refinement($)}constructor($){this.spa=this.safeParseAsync,this._def=$,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:(J)=>this["~validate"](J)}}optional(){return a.create(this,this._def)}nullable(){return U$.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return r.create(this)}promise(){return F$.create(this,this._def)}or($){return k$.create([this,$],this._def)}and($){return I$.create(this,$,this._def)}transform($){return new t({...S(this._def),schema:this,typeName:D.ZodEffects,effect:{type:"transform",transform:$}})}default($){let J=typeof $==="function"?$:()=>$;return new Z$({...S(this._def),innerType:this,defaultValue:J,typeName:D.ZodDefault})}brand(){return new q0({typeName:D.ZodBranded,type:this,...S(this._def)})}catch($){let J=typeof $==="function"?$:()=>$;return new T$({...S(this._def),innerType:this,catchValue:J,typeName:D.ZodCatch})}describe($){return new this.constructor({...this._def,description:$})}pipe($){return s$.create(this,$)}readonly(){return x$.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}var iJ=/^c[^\s-]{8,}$/i,dJ=/^[0-9a-z]+$/,pJ=/^[0-9A-HJKMNP-TV-Z]{26}$/i,oJ=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,rJ=/^[a-z0-9_-]{21}$/i,aJ=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,sJ=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,tJ=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,eJ="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",m0,$6=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,J6=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,Q6=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,W6=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Y6=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,B6=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,m1="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",H6=new RegExp(`^${m1}$`);function l1($){let J="[0-5]\\d";if($.precision)J=`${J}\\.\\d{${$.precision}}`;else if($.precision==null)J=`${J}(\\.\\d+)?`;let Q=$.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${J})${Q}`}function X6($){return new RegExp(`^${l1($)}$`)}function u1($){let J=`${m1}T${l1($)}`,Q=[];if(Q.push($.local?"Z?":"Z"),$.offset)Q.push("([+-]\\d{2}:?\\d{2})");return J=`${J}(${Q.join("|")})`,new RegExp(`^${J}$`)}function q6($,J){if((J==="v4"||!J)&&$6.test($))return!0;if((J==="v6"||!J)&&Q6.test($))return!0;return!1}function G6($,J){if(!aJ.test($))return!1;try{let[Q]=$.split(".");if(!Q)return!1;let W=Q.replace(/-/g,"+").replace(/_/g,"/").padEnd(Q.length+(4-Q.length%4)%4,"="),Y=JSON.parse(atob(W));if(typeof Y!=="object"||Y===null)return!1;if("typ"in Y&&Y?.typ!=="JWT")return!1;if(!Y.alg)return!1;if(J&&Y.alg!==J)return!1;return!0}catch{return!1}}function M6($,J){if((J==="v4"||!J)&&J6.test($))return!0;if((J==="v6"||!J)&&W6.test($))return!0;return!1}class o extends E{_parse($){if(this._def.coerce)$.data=String($.data);if(this._getType($)!==A.string){let Y=this._getOrReturnCtx($);return K(Y,{code:V.invalid_type,expected:A.string,received:Y.parsedType}),R}let Q=new x,W=void 0;for(let Y of this._def.checks)if(Y.kind==="min"){if($.data.length<Y.value)W=this._getOrReturnCtx($,W),K(W,{code:V.too_small,minimum:Y.value,type:"string",inclusive:!0,exact:!1,message:Y.message}),Q.dirty()}else if(Y.kind==="max"){if($.data.length>Y.value)W=this._getOrReturnCtx($,W),K(W,{code:V.too_big,maximum:Y.value,type:"string",inclusive:!0,exact:!1,message:Y.message}),Q.dirty()}else if(Y.kind==="length"){let B=$.data.length>Y.value,H=$.data.length<Y.value;if(B||H){if(W=this._getOrReturnCtx($,W),B)K(W,{code:V.too_big,maximum:Y.value,type:"string",inclusive:!0,exact:!0,message:Y.message});else if(H)K(W,{code:V.too_small,minimum:Y.value,type:"string",inclusive:!0,exact:!0,message:Y.message});Q.dirty()}}else if(Y.kind==="email"){if(!tJ.test($.data))W=this._getOrReturnCtx($,W),K(W,{validation:"email",code:V.invalid_string,message:Y.message}),Q.dirty()}else if(Y.kind==="emoji"){if(!m0)m0=new RegExp(eJ,"u");if(!m0.test($.data))W=this._getOrReturnCtx($,W),K(W,{validation:"emoji",code:V.invalid_string,message:Y.message}),Q.dirty()}else if(Y.kind==="uuid"){if(!oJ.test($.data))W=this._getOrReturnCtx($,W),K(W,{validation:"uuid",code:V.invalid_string,message:Y.message}),Q.dirty()}else if(Y.kind==="nanoid"){if(!rJ.test($.data))W=this._getOrReturnCtx($,W),K(W,{validation:"nanoid",code:V.invalid_string,message:Y.message}),Q.dirty()}else if(Y.kind==="cuid"){if(!iJ.test($.data))W=this._getOrReturnCtx($,W),K(W,{validation:"cuid",code:V.invalid_string,message:Y.message}),Q.dirty()}else if(Y.kind==="cuid2"){if(!dJ.test($.data))W=this._getOrReturnCtx($,W),K(W,{validation:"cuid2",code:V.invalid_string,message:Y.message}),Q.dirty()}else if(Y.kind==="ulid"){if(!pJ.test($.data))W=this._getOrReturnCtx($,W),K(W,{validation:"ulid",code:V.invalid_string,message:Y.message}),Q.dirty()}else if(Y.kind==="url")try{new URL($.data)}catch{W=this._getOrReturnCtx($,W),K(W,{validation:"url",code:V.invalid_string,message:Y.message}),Q.dirty()}else if(Y.kind==="regex"){if(Y.regex.lastIndex=0,!Y.regex.test($.data))W=this._getOrReturnCtx($,W),K(W,{validation:"regex",code:V.invalid_string,message:Y.message}),Q.dirty()}else if(Y.kind==="trim")$.data=$.data.trim();else if(Y.kind==="includes"){if(!$.data.includes(Y.value,Y.position))W=this._getOrReturnCtx($,W),K(W,{code:V.invalid_string,validation:{includes:Y.value,position:Y.position},message:Y.message}),Q.dirty()}else if(Y.kind==="toLowerCase")$.data=$.data.toLowerCase();else if(Y.kind==="toUpperCase")$.data=$.data.toUpperCase();else if(Y.kind==="startsWith"){if(!$.data.startsWith(Y.value))W=this._getOrReturnCtx($,W),K(W,{code:V.invalid_string,validation:{startsWith:Y.value},message:Y.message}),Q.dirty()}else if(Y.kind==="endsWith"){if(!$.data.endsWith(Y.value))W=this._getOrReturnCtx($,W),K(W,{code:V.invalid_string,validation:{endsWith:Y.value},message:Y.message}),Q.dirty()}else if(Y.kind==="datetime"){if(!u1(Y).test($.data))W=this._getOrReturnCtx($,W),K(W,{code:V.invalid_string,validation:"datetime",message:Y.message}),Q.dirty()}else if(Y.kind==="date"){if(!H6.test($.data))W=this._getOrReturnCtx($,W),K(W,{code:V.invalid_string,validation:"date",message:Y.message}),Q.dirty()}else if(Y.kind==="time"){if(!X6(Y).test($.data))W=this._getOrReturnCtx($,W),K(W,{code:V.invalid_string,validation:"time",message:Y.message}),Q.dirty()}else if(Y.kind==="duration"){if(!sJ.test($.data))W=this._getOrReturnCtx($,W),K(W,{validation:"duration",code:V.invalid_string,message:Y.message}),Q.dirty()}else if(Y.kind==="ip"){if(!q6($.data,Y.version))W=this._getOrReturnCtx($,W),K(W,{validation:"ip",code:V.invalid_string,message:Y.message}),Q.dirty()}else if(Y.kind==="jwt"){if(!G6($.data,Y.alg))W=this._getOrReturnCtx($,W),K(W,{validation:"jwt",code:V.invalid_string,message:Y.message}),Q.dirty()}else if(Y.kind==="cidr"){if(!M6($.data,Y.version))W=this._getOrReturnCtx($,W),K(W,{validation:"cidr",code:V.invalid_string,message:Y.message}),Q.dirty()}else if(Y.kind==="base64"){if(!Y6.test($.data))W=this._getOrReturnCtx($,W),K(W,{validation:"base64",code:V.invalid_string,message:Y.message}),Q.dirty()}else if(Y.kind==="base64url"){if(!B6.test($.data))W=this._getOrReturnCtx($,W),K(W,{validation:"base64url",code:V.invalid_string,message:Y.message}),Q.dirty()}else v.assertNever(Y);return{status:Q.value,value:$.data}}_regex($,J,Q){return this.refinement((W)=>$.test(W),{validation:J,code:V.invalid_string,...N.errToObj(Q)})}_addCheck($){return new o({...this._def,checks:[...this._def.checks,$]})}email($){return this._addCheck({kind:"email",...N.errToObj($)})}url($){return this._addCheck({kind:"url",...N.errToObj($)})}emoji($){return this._addCheck({kind:"emoji",...N.errToObj($)})}uuid($){return this._addCheck({kind:"uuid",...N.errToObj($)})}nanoid($){return this._addCheck({kind:"nanoid",...N.errToObj($)})}cuid($){return this._addCheck({kind:"cuid",...N.errToObj($)})}cuid2($){return this._addCheck({kind:"cuid2",...N.errToObj($)})}ulid($){return this._addCheck({kind:"ulid",...N.errToObj($)})}base64($){return this._addCheck({kind:"base64",...N.errToObj($)})}base64url($){return this._addCheck({kind:"base64url",...N.errToObj($)})}jwt($){return this._addCheck({kind:"jwt",...N.errToObj($)})}ip($){return this._addCheck({kind:"ip",...N.errToObj($)})}cidr($){return this._addCheck({kind:"cidr",...N.errToObj($)})}datetime($){if(typeof $==="string")return this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:$});return this._addCheck({kind:"datetime",precision:typeof $?.precision>"u"?null:$?.precision,offset:$?.offset??!1,local:$?.local??!1,...N.errToObj($?.message)})}date($){return this._addCheck({kind:"date",message:$})}time($){if(typeof $==="string")return this._addCheck({kind:"time",precision:null,message:$});return this._addCheck({kind:"time",precision:typeof $?.precision>"u"?null:$?.precision,...N.errToObj($?.message)})}duration($){return this._addCheck({kind:"duration",...N.errToObj($)})}regex($,J){return this._addCheck({kind:"regex",regex:$,...N.errToObj(J)})}includes($,J){return this._addCheck({kind:"includes",value:$,position:J?.position,...N.errToObj(J?.message)})}startsWith($,J){return this._addCheck({kind:"startsWith",value:$,...N.errToObj(J)})}endsWith($,J){return this._addCheck({kind:"endsWith",value:$,...N.errToObj(J)})}min($,J){return this._addCheck({kind:"min",value:$,...N.errToObj(J)})}max($,J){return this._addCheck({kind:"max",value:$,...N.errToObj(J)})}length($,J){return this._addCheck({kind:"length",value:$,...N.errToObj(J)})}nonempty($){return this.min(1,N.errToObj($))}trim(){return new o({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new o({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new o({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(($)=>$.kind==="datetime")}get isDate(){return!!this._def.checks.find(($)=>$.kind==="date")}get isTime(){return!!this._def.checks.find(($)=>$.kind==="time")}get isDuration(){return!!this._def.checks.find(($)=>$.kind==="duration")}get isEmail(){return!!this._def.checks.find(($)=>$.kind==="email")}get isURL(){return!!this._def.checks.find(($)=>$.kind==="url")}get isEmoji(){return!!this._def.checks.find(($)=>$.kind==="emoji")}get isUUID(){return!!this._def.checks.find(($)=>$.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(($)=>$.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(($)=>$.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(($)=>$.kind==="cuid2")}get isULID(){return!!this._def.checks.find(($)=>$.kind==="ulid")}get isIP(){return!!this._def.checks.find(($)=>$.kind==="ip")}get isCIDR(){return!!this._def.checks.find(($)=>$.kind==="cidr")}get isBase64(){return!!this._def.checks.find(($)=>$.kind==="base64")}get isBase64url(){return!!this._def.checks.find(($)=>$.kind==="base64url")}get minLength(){let $=null;for(let J of this._def.checks)if(J.kind==="min"){if($===null||J.value>$)$=J.value}return $}get maxLength(){let $=null;for(let J of this._def.checks)if(J.kind==="max"){if($===null||J.value<$)$=J.value}return $}}o.create=($)=>{return new o({checks:[],typeName:D.ZodString,coerce:$?.coerce??!1,...S($)})};function _6($,J){let Q=($.toString().split(".")[1]||"").length,W=(J.toString().split(".")[1]||"").length,Y=Q>W?Q:W,B=Number.parseInt($.toFixed(Y).replace(".","")),H=Number.parseInt(J.toFixed(Y).replace(".",""));return B%H/10**Y}class z$ extends E{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse($){if(this._def.coerce)$.data=Number($.data);if(this._getType($)!==A.number){let Y=this._getOrReturnCtx($);return K(Y,{code:V.invalid_type,expected:A.number,received:Y.parsedType}),R}let Q=void 0,W=new x;for(let Y of this._def.checks)if(Y.kind==="int"){if(!v.isInteger($.data))Q=this._getOrReturnCtx($,Q),K(Q,{code:V.invalid_type,expected:"integer",received:"float",message:Y.message}),W.dirty()}else if(Y.kind==="min"){if(Y.inclusive?$.data<Y.value:$.data<=Y.value)Q=this._getOrReturnCtx($,Q),K(Q,{code:V.too_small,minimum:Y.value,type:"number",inclusive:Y.inclusive,exact:!1,message:Y.message}),W.dirty()}else if(Y.kind==="max"){if(Y.inclusive?$.data>Y.value:$.data>=Y.value)Q=this._getOrReturnCtx($,Q),K(Q,{code:V.too_big,maximum:Y.value,type:"number",inclusive:Y.inclusive,exact:!1,message:Y.message}),W.dirty()}else if(Y.kind==="multipleOf"){if(_6($.data,Y.value)!==0)Q=this._getOrReturnCtx($,Q),K(Q,{code:V.not_multiple_of,multipleOf:Y.value,message:Y.message}),W.dirty()}else if(Y.kind==="finite"){if(!Number.isFinite($.data))Q=this._getOrReturnCtx($,Q),K(Q,{code:V.not_finite,message:Y.message}),W.dirty()}else v.assertNever(Y);return{status:W.value,value:$.data}}gte($,J){return this.setLimit("min",$,!0,N.toString(J))}gt($,J){return this.setLimit("min",$,!1,N.toString(J))}lte($,J){return this.setLimit("max",$,!0,N.toString(J))}lt($,J){return this.setLimit("max",$,!1,N.toString(J))}setLimit($,J,Q,W){return new z$({...this._def,checks:[...this._def.checks,{kind:$,value:J,inclusive:Q,message:N.toString(W)}]})}_addCheck($){return new z$({...this._def,checks:[...this._def.checks,$]})}int($){return this._addCheck({kind:"int",message:N.toString($)})}positive($){return this._addCheck({kind:"min",value:0,inclusive:!1,message:N.toString($)})}negative($){return this._addCheck({kind:"max",value:0,inclusive:!1,message:N.toString($)})}nonpositive($){return this._addCheck({kind:"max",value:0,inclusive:!0,message:N.toString($)})}nonnegative($){return this._addCheck({kind:"min",value:0,inclusive:!0,message:N.toString($)})}multipleOf($,J){return this._addCheck({kind:"multipleOf",value:$,message:N.toString(J)})}finite($){return this._addCheck({kind:"finite",message:N.toString($)})}safe($){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:N.toString($)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:N.toString($)})}get minValue(){let $=null;for(let J of this._def.checks)if(J.kind==="min"){if($===null||J.value>$)$=J.value}return $}get maxValue(){let $=null;for(let J of this._def.checks)if(J.kind==="max"){if($===null||J.value<$)$=J.value}return $}get isInt(){return!!this._def.checks.find(($)=>$.kind==="int"||$.kind==="multipleOf"&&v.isInteger($.value))}get isFinite(){let $=null,J=null;for(let Q of this._def.checks)if(Q.kind==="finite"||Q.kind==="int"||Q.kind==="multipleOf")return!0;else if(Q.kind==="min"){if(J===null||Q.value>J)J=Q.value}else if(Q.kind==="max"){if($===null||Q.value<$)$=Q.value}return Number.isFinite(J)&&Number.isFinite($)}}z$.create=($)=>{return new z$({checks:[],typeName:D.ZodNumber,coerce:$?.coerce||!1,...S($)})};class K$ extends E{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte}_parse($){if(this._def.coerce)try{$.data=BigInt($.data)}catch{return this._getInvalidInput($)}if(this._getType($)!==A.bigint)return this._getInvalidInput($);let Q=void 0,W=new x;for(let Y of this._def.checks)if(Y.kind==="min"){if(Y.inclusive?$.data<Y.value:$.data<=Y.value)Q=this._getOrReturnCtx($,Q),K(Q,{code:V.too_small,type:"bigint",minimum:Y.value,inclusive:Y.inclusive,message:Y.message}),W.dirty()}else if(Y.kind==="max"){if(Y.inclusive?$.data>Y.value:$.data>=Y.value)Q=this._getOrReturnCtx($,Q),K(Q,{code:V.too_big,type:"bigint",maximum:Y.value,inclusive:Y.inclusive,message:Y.message}),W.dirty()}else if(Y.kind==="multipleOf"){if($.data%Y.value!==BigInt(0))Q=this._getOrReturnCtx($,Q),K(Q,{code:V.not_multiple_of,multipleOf:Y.value,message:Y.message}),W.dirty()}else v.assertNever(Y);return{status:W.value,value:$.data}}_getInvalidInput($){let J=this._getOrReturnCtx($);return K(J,{code:V.invalid_type,expected:A.bigint,received:J.parsedType}),R}gte($,J){return this.setLimit("min",$,!0,N.toString(J))}gt($,J){return this.setLimit("min",$,!1,N.toString(J))}lte($,J){return this.setLimit("max",$,!0,N.toString(J))}lt($,J){return this.setLimit("max",$,!1,N.toString(J))}setLimit($,J,Q,W){return new K$({...this._def,checks:[...this._def.checks,{kind:$,value:J,inclusive:Q,message:N.toString(W)}]})}_addCheck($){return new K$({...this._def,checks:[...this._def.checks,$]})}positive($){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:N.toString($)})}negative($){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:N.toString($)})}nonpositive($){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:N.toString($)})}nonnegative($){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:N.toString($)})}multipleOf($,J){return this._addCheck({kind:"multipleOf",value:$,message:N.toString(J)})}get minValue(){let $=null;for(let J of this._def.checks)if(J.kind==="min"){if($===null||J.value>$)$=J.value}return $}get maxValue(){let $=null;for(let J of this._def.checks)if(J.kind==="max"){if($===null||J.value<$)$=J.value}return $}}K$.create=($)=>{return new K$({checks:[],typeName:D.ZodBigInt,coerce:$?.coerce??!1,...S($)})};class P$ extends E{_parse($){if(this._def.coerce)$.data=Boolean($.data);if(this._getType($)!==A.boolean){let Q=this._getOrReturnCtx($);return K(Q,{code:V.invalid_type,expected:A.boolean,received:Q.parsedType}),R}return u($.data)}}P$.create=($)=>{return new P$({typeName:D.ZodBoolean,coerce:$?.coerce||!1,...S($)})};class N$ extends E{_parse($){if(this._def.coerce)$.data=new Date($.data);if(this._getType($)!==A.date){let Y=this._getOrReturnCtx($);return K(Y,{code:V.invalid_type,expected:A.date,received:Y.parsedType}),R}if(Number.isNaN($.data.getTime())){let Y=this._getOrReturnCtx($);return K(Y,{code:V.invalid_date}),R}let Q=new x,W=void 0;for(let Y of this._def.checks)if(Y.kind==="min"){if($.data.getTime()<Y.value)W=this._getOrReturnCtx($,W),K(W,{code:V.too_small,message:Y.message,inclusive:!0,exact:!1,minimum:Y.value,type:"date"}),Q.dirty()}else if(Y.kind==="max"){if($.data.getTime()>Y.value)W=this._getOrReturnCtx($,W),K(W,{code:V.too_big,message:Y.message,inclusive:!0,exact:!1,maximum:Y.value,type:"date"}),Q.dirty()}else v.assertNever(Y);return{status:Q.value,value:new Date($.data.getTime())}}_addCheck($){return new N$({...this._def,checks:[...this._def.checks,$]})}min($,J){return this._addCheck({kind:"min",value:$.getTime(),message:N.toString(J)})}max($,J){return this._addCheck({kind:"max",value:$.getTime(),message:N.toString(J)})}get minDate(){let $=null;for(let J of this._def.checks)if(J.kind==="min"){if($===null||J.value>$)$=J.value}return $!=null?new Date($):null}get maxDate(){let $=null;for(let J of this._def.checks)if(J.kind==="max"){if($===null||J.value<$)$=J.value}return $!=null?new Date($):null}}N$.create=($)=>{return new N$({checks:[],coerce:$?.coerce||!1,typeName:D.ZodDate,...S($)})};class d$ extends E{_parse($){if(this._getType($)!==A.symbol){let Q=this._getOrReturnCtx($);return K(Q,{code:V.invalid_type,expected:A.symbol,received:Q.parsedType}),R}return u($.data)}}d$.create=($)=>{return new d$({typeName:D.ZodSymbol,...S($)})};class f$ extends E{_parse($){if(this._getType($)!==A.undefined){let Q=this._getOrReturnCtx($);return K(Q,{code:V.invalid_type,expected:A.undefined,received:Q.parsedType}),R}return u($.data)}}f$.create=($)=>{return new f$({typeName:D.ZodUndefined,...S($)})};class C$ extends E{_parse($){if(this._getType($)!==A.null){let Q=this._getOrReturnCtx($);return K(Q,{code:V.invalid_type,expected:A.null,received:Q.parsedType}),R}return u($.data)}}C$.create=($)=>{return new C$({typeName:D.ZodNull,...S($)})};class R$ extends E{constructor(){super(...arguments);this._any=!0}_parse($){return u($.data)}}R$.create=($)=>{return new R$({typeName:D.ZodAny,...S($)})};class A$ extends E{constructor(){super(...arguments);this._unknown=!0}_parse($){return u($.data)}}A$.create=($)=>{return new A$({typeName:D.ZodUnknown,...S($)})};class B$ extends E{_parse($){let J=this._getOrReturnCtx($);return K(J,{code:V.invalid_type,expected:A.never,received:J.parsedType}),R}}B$.create=($)=>{return new B$({typeName:D.ZodNever,...S($)})};class p$ extends E{_parse($){if(this._getType($)!==A.undefined){let Q=this._getOrReturnCtx($);return K(Q,{code:V.invalid_type,expected:A.void,received:Q.parsedType}),R}return u($.data)}}p$.create=($)=>{return new p$({typeName:D.ZodVoid,...S($)})};class r extends E{_parse($){let{ctx:J,status:Q}=this._processInputParams($),W=this._def;if(J.parsedType!==A.array)return K(J,{code:V.invalid_type,expected:A.array,received:J.parsedType}),R;if(W.exactLength!==null){let B=J.data.length>W.exactLength.value,H=J.data.length<W.exactLength.value;if(B||H)K(J,{code:B?V.too_big:V.too_small,minimum:H?W.exactLength.value:void 0,maximum:B?W.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:W.exactLength.message}),Q.dirty()}if(W.minLength!==null){if(J.data.length<W.minLength.value)K(J,{code:V.too_small,minimum:W.minLength.value,type:"array",inclusive:!0,exact:!1,message:W.minLength.message}),Q.dirty()}if(W.maxLength!==null){if(J.data.length>W.maxLength.value)K(J,{code:V.too_big,maximum:W.maxLength.value,type:"array",inclusive:!0,exact:!1,message:W.maxLength.message}),Q.dirty()}if(J.common.async)return Promise.all([...J.data].map((B,H)=>{return W.type._parseAsync(new s(J,B,J.path,H))})).then((B)=>{return x.mergeArray(Q,B)});let Y=[...J.data].map((B,H)=>{return W.type._parseSync(new s(J,B,J.path,H))});return x.mergeArray(Q,Y)}get element(){return this._def.type}min($,J){return new r({...this._def,minLength:{value:$,message:N.toString(J)}})}max($,J){return new r({...this._def,maxLength:{value:$,message:N.toString(J)}})}length($,J){return new r({...this._def,exactLength:{value:$,message:N.toString(J)}})}nonempty($){return this.min(1,$)}}r.create=($,J)=>{return new r({type:$,minLength:null,maxLength:null,exactLength:null,typeName:D.ZodArray,...S(J)})};function E$($){if($ instanceof g){let J={};for(let Q in $.shape){let W=$.shape[Q];J[Q]=a.create(E$(W))}return new g({...$._def,shape:()=>J})}else if($ instanceof r)return new r({...$._def,type:E$($.element)});else if($ instanceof a)return a.create(E$($.unwrap()));else if($ instanceof U$)return U$.create(E$($.unwrap()));else if($ instanceof H$)return H$.create($.items.map((J)=>E$(J)));else return $}class g extends E{constructor(){super(...arguments);this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let $=this._def.shape(),J=v.objectKeys($);return this._cached={shape:$,keys:J},this._cached}_parse($){if(this._getType($)!==A.object){let q=this._getOrReturnCtx($);return K(q,{code:V.invalid_type,expected:A.object,received:q.parsedType}),R}let{status:Q,ctx:W}=this._processInputParams($),{shape:Y,keys:B}=this._getCached(),H=[];if(!(this._def.catchall instanceof B$&&this._def.unknownKeys==="strip")){for(let q in W.data)if(!B.includes(q))H.push(q)}let X=[];for(let q of B){let _=Y[q],b=W.data[q];X.push({key:{status:"valid",value:q},value:_._parse(new s(W,b,W.path,q)),alwaysSet:q in W.data})}if(this._def.catchall instanceof B$){let q=this._def.unknownKeys;if(q==="passthrough")for(let _ of H)X.push({key:{status:"valid",value:_},value:{status:"valid",value:W.data[_]}});else if(q==="strict"){if(H.length>0)K(W,{code:V.unrecognized_keys,keys:H}),Q.dirty()}else if(q==="strip");else throw Error("Internal ZodObject error: invalid unknownKeys value.")}else{let q=this._def.catchall;for(let _ of H){let b=W.data[_];X.push({key:{status:"valid",value:_},value:q._parse(new s(W,b,W.path,_)),alwaysSet:_ in W.data})}}if(W.common.async)return Promise.resolve().then(async()=>{let q=[];for(let _ of X){let b=await _.key,j=await _.value;q.push({key:b,value:j,alwaysSet:_.alwaysSet})}return q}).then((q)=>{return x.mergeObjectSync(Q,q)});else return x.mergeObjectSync(Q,X)}get shape(){return this._def.shape()}strict($){return N.errToObj,new g({...this._def,unknownKeys:"strict",...$!==void 0?{errorMap:(J,Q)=>{let W=this._def.errorMap?.(J,Q).message??Q.defaultError;if(J.code==="unrecognized_keys")return{message:N.errToObj($).message??W};return{message:W}}}:{}})}strip(){return new g({...this._def,unknownKeys:"strip"})}passthrough(){return new g({...this._def,unknownKeys:"passthrough"})}extend($){return new g({...this._def,shape:()=>({...this._def.shape(),...$})})}merge($){return new g({unknownKeys:$._def.unknownKeys,catchall:$._def.catchall,shape:()=>({...this._def.shape(),...$._def.shape()}),typeName:D.ZodObject})}setKey($,J){return this.augment({[$]:J})}catchall($){return new g({...this._def,catchall:$})}pick($){let J={};for(let Q of v.objectKeys($))if($[Q]&&this.shape[Q])J[Q]=this.shape[Q];return new g({...this._def,shape:()=>J})}omit($){let J={};for(let Q of v.objectKeys(this.shape))if(!$[Q])J[Q]=this.shape[Q];return new g({...this._def,shape:()=>J})}deepPartial(){return E$(this)}partial($){let J={};for(let Q of v.objectKeys(this.shape)){let W=this.shape[Q];if($&&!$[Q])J[Q]=W;else J[Q]=W.optional()}return new g({...this._def,shape:()=>J})}required($){let J={};for(let Q of v.objectKeys(this.shape))if($&&!$[Q])J[Q]=this.shape[Q];else{let Y=this.shape[Q];while(Y instanceof a)Y=Y._def.innerType;J[Q]=Y}return new g({...this._def,shape:()=>J})}keyof(){return c1(v.objectKeys(this.shape))}}g.create=($,J)=>{return new g({shape:()=>$,unknownKeys:"strip",catchall:B$.create(),typeName:D.ZodObject,...S(J)})};g.strictCreate=($,J)=>{return new g({shape:()=>$,unknownKeys:"strict",catchall:B$.create(),typeName:D.ZodObject,...S(J)})};g.lazycreate=($,J)=>{return new g({shape:$,unknownKeys:"strip",catchall:B$.create(),typeName:D.ZodObject,...S(J)})};class k$ extends E{_parse($){let{ctx:J}=this._processInputParams($),Q=this._def.options;function W(Y){for(let H of Y)if(H.result.status==="valid")return H.result;for(let H of Y)if(H.result.status==="dirty")return J.common.issues.push(...H.ctx.common.issues),H.result;let B=Y.map((H)=>new l(H.ctx.common.issues));return K(J,{code:V.invalid_union,unionErrors:B}),R}if(J.common.async)return Promise.all(Q.map(async(Y)=>{let B={...J,common:{...J.common,issues:[]},parent:null};return{result:await Y._parseAsync({data:J.data,path:J.path,parent:B}),ctx:B}})).then(W);else{let Y=void 0,B=[];for(let X of Q){let q={...J,common:{...J.common,issues:[]},parent:null},_=X._parseSync({data:J.data,path:J.path,parent:q});if(_.status==="valid")return _;else if(_.status==="dirty"&&!Y)Y={result:_,ctx:q};if(q.common.issues.length)B.push(q.common.issues)}if(Y)return J.common.issues.push(...Y.ctx.common.issues),Y.result;let H=B.map((X)=>new l(X));return K(J,{code:V.invalid_union,unionErrors:H}),R}}get options(){return this._def.options}}k$.create=($,J)=>{return new k$({options:$,typeName:D.ZodUnion,...S(J)})};var _$=($)=>{if($ instanceof h$)return _$($.schema);else if($ instanceof t)return _$($.innerType());else if($ instanceof y$)return[$.value];else if($ instanceof b$)return $.options;else if($ instanceof g$)return v.objectValues($.enum);else if($ instanceof Z$)return _$($._def.innerType);else if($ instanceof f$)return[void 0];else if($ instanceof C$)return[null];else if($ instanceof a)return[void 0,..._$($.unwrap())];else if($ instanceof U$)return[null,..._$($.unwrap())];else if($ instanceof q0)return _$($.unwrap());else if($ instanceof x$)return _$($.unwrap());else if($ instanceof T$)return _$($._def.innerType);else return[]};class X0 extends E{_parse($){let{ctx:J}=this._processInputParams($);if(J.parsedType!==A.object)return K(J,{code:V.invalid_type,expected:A.object,received:J.parsedType}),R;let Q=this.discriminator,W=J.data[Q],Y=this.optionsMap.get(W);if(!Y)return K(J,{code:V.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[Q]}),R;if(J.common.async)return Y._parseAsync({data:J.data,path:J.path,parent:J});else return Y._parseSync({data:J.data,path:J.path,parent:J})}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create($,J,Q){let W=new Map;for(let Y of J){let B=_$(Y.shape[$]);if(!B.length)throw Error(`A discriminator value for key \`${$}\` could not be extracted from all schema options`);for(let H of B){if(W.has(H))throw Error(`Discriminator property ${String($)} has duplicate value ${String(H)}`);W.set(H,Y)}}return new X0({typeName:D.ZodDiscriminatedUnion,discriminator:$,options:J,optionsMap:W,...S(Q)})}}function l0($,J){let Q=Y$($),W=Y$(J);if($===J)return{valid:!0,data:$};else if(Q===A.object&&W===A.object){let Y=v.objectKeys(J),B=v.objectKeys($).filter((X)=>Y.indexOf(X)!==-1),H={...$,...J};for(let X of B){let q=l0($[X],J[X]);if(!q.valid)return{valid:!1};H[X]=q.data}return{valid:!0,data:H}}else if(Q===A.array&&W===A.array){if($.length!==J.length)return{valid:!1};let Y=[];for(let B=0;B<$.length;B++){let H=$[B],X=J[B],q=l0(H,X);if(!q.valid)return{valid:!1};Y.push(q.data)}return{valid:!0,data:Y}}else if(Q===A.date&&W===A.date&&+$===+J)return{valid:!0,data:$};else return{valid:!1}}class I$ extends E{_parse($){let{status:J,ctx:Q}=this._processInputParams($),W=(Y,B)=>{if(B0(Y)||B0(B))return R;let H=l0(Y.value,B.value);if(!H.valid)return K(Q,{code:V.invalid_intersection_types}),R;if(H0(Y)||H0(B))J.dirty();return{status:J.value,value:H.data}};if(Q.common.async)return Promise.all([this._def.left._parseAsync({data:Q.data,path:Q.path,parent:Q}),this._def.right._parseAsync({data:Q.data,path:Q.path,parent:Q})]).then(([Y,B])=>W(Y,B));else return W(this._def.left._parseSync({data:Q.data,path:Q.path,parent:Q}),this._def.right._parseSync({data:Q.data,path:Q.path,parent:Q}))}}I$.create=($,J,Q)=>{return new I$({left:$,right:J,typeName:D.ZodIntersection,...S(Q)})};class H$ extends E{_parse($){let{status:J,ctx:Q}=this._processInputParams($);if(Q.parsedType!==A.array)return K(Q,{code:V.invalid_type,expected:A.array,received:Q.parsedType}),R;if(Q.data.length<this._def.items.length)return K(Q,{code:V.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),R;if(!this._def.rest&&Q.data.length>this._def.items.length)K(Q,{code:V.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),J.dirty();let Y=[...Q.data].map((B,H)=>{let X=this._def.items[H]||this._def.rest;if(!X)return null;return X._parse(new s(Q,B,Q.path,H))}).filter((B)=>!!B);if(Q.common.async)return Promise.all(Y).then((B)=>{return x.mergeArray(J,B)});else return x.mergeArray(J,Y)}get items(){return this._def.items}rest($){return new H$({...this._def,rest:$})}}H$.create=($,J)=>{if(!Array.isArray($))throw Error("You must pass an array of schemas to z.tuple([ ... ])");return new H$({items:$,typeName:D.ZodTuple,rest:null,...S(J)})};class o$ extends E{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse($){let{status:J,ctx:Q}=this._processInputParams($);if(Q.parsedType!==A.object)return K(Q,{code:V.invalid_type,expected:A.object,received:Q.parsedType}),R;let W=[],Y=this._def.keyType,B=this._def.valueType;for(let H in Q.data)W.push({key:Y._parse(new s(Q,H,Q.path,H)),value:B._parse(new s(Q,Q.data[H],Q.path,H)),alwaysSet:H in Q.data});if(Q.common.async)return x.mergeObjectAsync(J,W);else return x.mergeObjectSync(J,W)}get element(){return this._def.valueType}static create($,J,Q){if(J instanceof E)return new o$({keyType:$,valueType:J,typeName:D.ZodRecord,...S(Q)});return new o$({keyType:o.create(),valueType:$,typeName:D.ZodRecord,...S(J)})}}class r$ extends E{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse($){let{status:J,ctx:Q}=this._processInputParams($);if(Q.parsedType!==A.map)return K(Q,{code:V.invalid_type,expected:A.map,received:Q.parsedType}),R;let W=this._def.keyType,Y=this._def.valueType,B=[...Q.data.entries()].map(([H,X],q)=>{return{key:W._parse(new s(Q,H,Q.path,[q,"key"])),value:Y._parse(new s(Q,X,Q.path,[q,"value"]))}});if(Q.common.async){let H=new Map;return Promise.resolve().then(async()=>{for(let X of B){let q=await X.key,_=await X.value;if(q.status==="aborted"||_.status==="aborted")return R;if(q.status==="dirty"||_.status==="dirty")J.dirty();H.set(q.value,_.value)}return{status:J.value,value:H}})}else{let H=new Map;for(let X of B){let{key:q,value:_}=X;if(q.status==="aborted"||_.status==="aborted")return R;if(q.status==="dirty"||_.status==="dirty")J.dirty();H.set(q.value,_.value)}return{status:J.value,value:H}}}}r$.create=($,J,Q)=>{return new r$({valueType:J,keyType:$,typeName:D.ZodMap,...S(Q)})};class O$ extends E{_parse($){let{status:J,ctx:Q}=this._processInputParams($);if(Q.parsedType!==A.set)return K(Q,{code:V.invalid_type,expected:A.set,received:Q.parsedType}),R;let W=this._def;if(W.minSize!==null){if(Q.data.size<W.minSize.value)K(Q,{code:V.too_small,minimum:W.minSize.value,type:"set",inclusive:!0,exact:!1,message:W.minSize.message}),J.dirty()}if(W.maxSize!==null){if(Q.data.size>W.maxSize.value)K(Q,{code:V.too_big,maximum:W.maxSize.value,type:"set",inclusive:!0,exact:!1,message:W.maxSize.message}),J.dirty()}let Y=this._def.valueType;function B(X){let q=new Set;for(let _ of X){if(_.status==="aborted")return R;if(_.status==="dirty")J.dirty();q.add(_.value)}return{status:J.value,value:q}}let H=[...Q.data.values()].map((X,q)=>Y._parse(new s(Q,X,Q.path,q)));if(Q.common.async)return Promise.all(H).then((X)=>B(X));else return B(H)}min($,J){return new O$({...this._def,minSize:{value:$,message:N.toString(J)}})}max($,J){return new O$({...this._def,maxSize:{value:$,message:N.toString(J)}})}size($,J){return this.min($,J).max($,J)}nonempty($){return this.min(1,$)}}O$.create=($,J)=>{return new O$({valueType:$,minSize:null,maxSize:null,typeName:D.ZodSet,...S(J)})};class v$ extends E{constructor(){super(...arguments);this.validate=this.implement}_parse($){let{ctx:J}=this._processInputParams($);if(J.parsedType!==A.function)return K(J,{code:V.invalid_type,expected:A.function,received:J.parsedType}),R;function Q(H,X){return i$({data:H,path:J.path,errorMaps:[J.common.contextualErrorMap,J.schemaErrorMap,w$(),M$].filter((q)=>!!q),issueData:{code:V.invalid_arguments,argumentsError:X}})}function W(H,X){return i$({data:H,path:J.path,errorMaps:[J.common.contextualErrorMap,J.schemaErrorMap,w$(),M$].filter((q)=>!!q),issueData:{code:V.invalid_return_type,returnTypeError:X}})}let Y={errorMap:J.common.contextualErrorMap},B=J.data;if(this._def.returns instanceof F$){let H=this;return u(async function(...X){let q=new l([]),_=await H._def.args.parseAsync(X,Y).catch((z)=>{throw q.addIssue(Q(X,z)),q}),b=await Reflect.apply(B,this,_);return await H._def.returns._def.type.parseAsync(b,Y).catch((z)=>{throw q.addIssue(W(b,z)),q})})}else{let H=this;return u(function(...X){let q=H._def.args.safeParse(X,Y);if(!q.success)throw new l([Q(X,q.error)]);let _=Reflect.apply(B,this,q.data),b=H._def.returns.safeParse(_,Y);if(!b.success)throw new l([W(_,b.error)]);return b.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...$){return new v$({...this._def,args:H$.create($).rest(A$.create())})}returns($){return new v$({...this._def,returns:$})}implement($){return this.parse($)}strictImplement($){return this.parse($)}static create($,J,Q){return new v$({args:$?$:H$.create([]).rest(A$.create()),returns:J||A$.create(),typeName:D.ZodFunction,...S(Q)})}}class h$ extends E{get schema(){return this._def.getter()}_parse($){let{ctx:J}=this._processInputParams($);return this._def.getter()._parse({data:J.data,path:J.path,parent:J})}}h$.create=($,J)=>{return new h$({getter:$,typeName:D.ZodLazy,...S(J)})};class y$ extends E{_parse($){if($.data!==this._def.value){let J=this._getOrReturnCtx($);return K(J,{received:J.data,code:V.invalid_literal,expected:this._def.value}),R}return{status:"valid",value:$.data}}get value(){return this._def.value}}y$.create=($,J)=>{return new y$({value:$,typeName:D.ZodLiteral,...S(J)})};function c1($,J){return new b$({values:$,typeName:D.ZodEnum,...S(J)})}class b$ extends E{_parse($){if(typeof $.data!=="string"){let J=this._getOrReturnCtx($),Q=this._def.values;return K(J,{expected:v.joinValues(Q),received:J.parsedType,code:V.invalid_type}),R}if(!this._cache)this._cache=new Set(this._def.values);if(!this._cache.has($.data)){let J=this._getOrReturnCtx($),Q=this._def.values;return K(J,{received:J.data,code:V.invalid_enum_value,options:Q}),R}return u($.data)}get options(){return this._def.values}get enum(){let $={};for(let J of this._def.values)$[J]=J;return $}get Values(){let $={};for(let J of this._def.values)$[J]=J;return $}get Enum(){let $={};for(let J of this._def.values)$[J]=J;return $}extract($,J=this._def){return b$.create($,{...this._def,...J})}exclude($,J=this._def){return b$.create(this.options.filter((Q)=>!$.includes(Q)),{...this._def,...J})}}b$.create=c1;class g$ extends E{_parse($){let J=v.getValidEnumValues(this._def.values),Q=this._getOrReturnCtx($);if(Q.parsedType!==A.string&&Q.parsedType!==A.number){let W=v.objectValues(J);return K(Q,{expected:v.joinValues(W),received:Q.parsedType,code:V.invalid_type}),R}if(!this._cache)this._cache=new Set(v.getValidEnumValues(this._def.values));if(!this._cache.has($.data)){let W=v.objectValues(J);return K(Q,{received:Q.data,code:V.invalid_enum_value,options:W}),R}return u($.data)}get enum(){return this._def.values}}g$.create=($,J)=>{return new g$({values:$,typeName:D.ZodNativeEnum,...S(J)})};class F$ extends E{unwrap(){return this._def.type}_parse($){let{ctx:J}=this._processInputParams($);if(J.parsedType!==A.promise&&J.common.async===!1)return K(J,{code:V.invalid_type,expected:A.promise,received:J.parsedType}),R;let Q=J.parsedType===A.promise?J.data:Promise.resolve(J.data);return u(Q.then((W)=>{return this._def.type.parseAsync(W,{path:J.path,errorMap:J.common.contextualErrorMap})}))}}F$.create=($,J)=>{return new F$({type:$,typeName:D.ZodPromise,...S(J)})};class t extends E{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===D.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse($){let{status:J,ctx:Q}=this._processInputParams($),W=this._def.effect||null,Y={addIssue:(B)=>{if(K(Q,B),B.fatal)J.abort();else J.dirty()},get path(){return Q.path}};if(Y.addIssue=Y.addIssue.bind(Y),W.type==="preprocess"){let B=W.transform(Q.data,Y);if(Q.common.async)return Promise.resolve(B).then(async(H)=>{if(J.value==="aborted")return R;let X=await this._def.schema._parseAsync({data:H,path:Q.path,parent:Q});if(X.status==="aborted")return R;if(X.status==="dirty")return j$(X.value);if(J.value==="dirty")return j$(X.value);return X});else{if(J.value==="aborted")return R;let H=this._def.schema._parseSync({data:B,path:Q.path,parent:Q});if(H.status==="aborted")return R;if(H.status==="dirty")return j$(H.value);if(J.value==="dirty")return j$(H.value);return H}}if(W.type==="refinement"){let B=(H)=>{let X=W.refinement(H,Y);if(Q.common.async)return Promise.resolve(X);if(X instanceof Promise)throw Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return H};if(Q.common.async===!1){let H=this._def.schema._parseSync({data:Q.data,path:Q.path,parent:Q});if(H.status==="aborted")return R;if(H.status==="dirty")J.dirty();return B(H.value),{status:J.value,value:H.value}}else return this._def.schema._parseAsync({data:Q.data,path:Q.path,parent:Q}).then((H)=>{if(H.status==="aborted")return R;if(H.status==="dirty")J.dirty();return B(H.value).then(()=>{return{status:J.value,value:H.value}})})}if(W.type==="transform")if(Q.common.async===!1){let B=this._def.schema._parseSync({data:Q.data,path:Q.path,parent:Q});if(!D$(B))return R;let H=W.transform(B.value,Y);if(H instanceof Promise)throw Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:J.value,value:H}}else return this._def.schema._parseAsync({data:Q.data,path:Q.path,parent:Q}).then((B)=>{if(!D$(B))return R;return Promise.resolve(W.transform(B.value,Y)).then((H)=>({status:J.value,value:H}))});v.assertNever(W)}}t.create=($,J,Q)=>{return new t({schema:$,typeName:D.ZodEffects,effect:J,...S(Q)})};t.createWithPreprocess=($,J,Q)=>{return new t({schema:J,effect:{type:"preprocess",transform:$},typeName:D.ZodEffects,...S(Q)})};class a extends E{_parse($){if(this._getType($)===A.undefined)return u(void 0);return this._def.innerType._parse($)}unwrap(){return this._def.innerType}}a.create=($,J)=>{return new a({innerType:$,typeName:D.ZodOptional,...S(J)})};class U$ extends E{_parse($){if(this._getType($)===A.null)return u(null);return this._def.innerType._parse($)}unwrap(){return this._def.innerType}}U$.create=($,J)=>{return new U$({innerType:$,typeName:D.ZodNullable,...S(J)})};class Z$ extends E{_parse($){let{ctx:J}=this._processInputParams($),Q=J.data;if(J.parsedType===A.undefined)Q=this._def.defaultValue();return this._def.innerType._parse({data:Q,path:J.path,parent:J})}removeDefault(){return this._def.innerType}}Z$.create=($,J)=>{return new Z$({innerType:$,typeName:D.ZodDefault,defaultValue:typeof J.default==="function"?J.default:()=>J.default,...S(J)})};class T$ extends E{_parse($){let{ctx:J}=this._processInputParams($),Q={...J,common:{...J.common,issues:[]}},W=this._def.innerType._parse({data:Q.data,path:Q.path,parent:{...Q}});if(S$(W))return W.then((Y)=>{return{status:"valid",value:Y.status==="valid"?Y.value:this._def.catchValue({get error(){return new l(Q.common.issues)},input:Q.data})}});else return{status:"valid",value:W.status==="valid"?W.value:this._def.catchValue({get error(){return new l(Q.common.issues)},input:Q.data})}}removeCatch(){return this._def.innerType}}T$.create=($,J)=>{return new T$({innerType:$,typeName:D.ZodCatch,catchValue:typeof J.catch==="function"?J.catch:()=>J.catch,...S(J)})};class a$ extends E{_parse($){if(this._getType($)!==A.nan){let Q=this._getOrReturnCtx($);return K(Q,{code:V.invalid_type,expected:A.nan,received:Q.parsedType}),R}return{status:"valid",value:$.data}}}a$.create=($)=>{return new a$({typeName:D.ZodNaN,...S($)})};var U6=Symbol("zod_brand");class q0 extends E{_parse($){let{ctx:J}=this._processInputParams($),Q=J.data;return this._def.type._parse({data:Q,path:J.path,parent:J})}unwrap(){return this._def.type}}class s$ extends E{_parse($){let{status:J,ctx:Q}=this._processInputParams($);if(Q.common.async)return(async()=>{let Y=await this._def.in._parseAsync({data:Q.data,path:Q.path,parent:Q});if(Y.status==="aborted")return R;if(Y.status==="dirty")return J.dirty(),j$(Y.value);else return this._def.out._parseAsync({data:Y.value,path:Q.path,parent:Q})})();else{let W=this._def.in._parseSync({data:Q.data,path:Q.path,parent:Q});if(W.status==="aborted")return R;if(W.status==="dirty")return J.dirty(),{status:"dirty",value:W.value};else return this._def.out._parseSync({data:W.value,path:Q.path,parent:Q})}}static create($,J){return new s$({in:$,out:J,typeName:D.ZodPipeline})}}class x$ extends E{_parse($){let J=this._def.innerType._parse($),Q=(W)=>{if(D$(W))W.value=Object.freeze(W.value);return W};return S$(J)?J.then((W)=>Q(W)):Q(J)}unwrap(){return this._def.innerType}}x$.create=($,J)=>{return new x$({innerType:$,typeName:D.ZodReadonly,...S(J)})};function x1($,J){let Q=typeof $==="function"?$(J):typeof $==="string"?{message:$}:$;return typeof Q==="string"?{message:Q}:Q}function n1($,J={},Q){if($)return R$.create().superRefine((W,Y)=>{let B=$(W);if(B instanceof Promise)return B.then((H)=>{if(!H){let X=x1(J,W),q=X.fatal??Q??!0;Y.addIssue({code:"custom",...X,fatal:q})}});if(!B){let H=x1(J,W),X=H.fatal??Q??!0;Y.addIssue({code:"custom",...H,fatal:X})}return});return R$.create()}var V6={object:g.lazycreate},D;(function($){$.ZodString="ZodString",$.ZodNumber="ZodNumber",$.ZodNaN="ZodNaN",$.ZodBigInt="ZodBigInt",$.ZodBoolean="ZodBoolean",$.ZodDate="ZodDate",$.ZodSymbol="ZodSymbol",$.ZodUndefined="ZodUndefined",$.ZodNull="ZodNull",$.ZodAny="ZodAny",$.ZodUnknown="ZodUnknown",$.ZodNever="ZodNever",$.ZodVoid="ZodVoid",$.ZodArray="ZodArray",$.ZodObject="ZodObject",$.ZodUnion="ZodUnion",$.ZodDiscriminatedUnion="ZodDiscriminatedUnion",$.ZodIntersection="ZodIntersection",$.ZodTuple="ZodTuple",$.ZodRecord="ZodRecord",$.ZodMap="ZodMap",$.ZodSet="ZodSet",$.ZodFunction="ZodFunction",$.ZodLazy="ZodLazy",$.ZodLiteral="ZodLiteral",$.ZodEnum="ZodEnum",$.ZodEffects="ZodEffects",$.ZodNativeEnum="ZodNativeEnum",$.ZodOptional="ZodOptional",$.ZodNullable="ZodNullable",$.ZodDefault="ZodDefault",$.ZodCatch="ZodCatch",$.ZodPromise="ZodPromise",$.ZodBranded="ZodBranded",$.ZodPipeline="ZodPipeline",$.ZodReadonly="ZodReadonly"})(D||(D={}));var D6=($,J={message:`Input not instance of ${$.name}`})=>n1((Q)=>Q instanceof $,J),i1=o.create,d1=z$.create,A6=a$.create,z6=K$.create,p1=P$.create,K6=N$.create,b6=d$.create,j6=f$.create,N6=C$.create,R6=R$.create,O6=A$.create,F6=B$.create,L6=p$.create,w6=r.create,S6=g.create,E6=g.strictCreate,v6=k$.create,P6=X0.create,f6=I$.create,C6=H$.create,k6=o$.create,I6=r$.create,h6=O$.create,y6=v$.create,g6=h$.create,Z6=y$.create,T6=b$.create,x6=g$.create,m6=F$.create,l6=t.create,u6=a.create,c6=U$.create,n6=t.createWithPreprocess,i6=s$.create,d6=()=>i1().optional(),p6=()=>d1().optional(),o6=()=>p1().optional(),r6={string:($)=>o.create({...$,coerce:!0}),number:($)=>z$.create({...$,coerce:!0}),boolean:($)=>P$.create({...$,coerce:!0}),bigint:($)=>K$.create({...$,coerce:!0}),date:($)=>N$.create({...$,coerce:!0})};var a6=R;import{execSync as s6}from"child_process";var o1=U.object({title:U.string().describe("Task title"),description:U.string().optional().describe("Task description"),priority:U.enum(["low","medium","high"]).optional().describe("Task priority"),type:U.enum(["normal","cycle","longterm"]).optional().default("normal").describe("Task type. normal: \u5E38\u89C4\u4EFB\u52A1\uFF0C\u9700\u8981\u8DDF\u8E2A\u5B8C\u6210. cycle: \u5468\u671F\u4EFB\u52A1\uFF08\u5982\u6BCF\u5468\u53D1\u5468\u62A5\uFF09\uFF0C\u65E0\u9700 complete\uFF0C\u5B9A\u671F\u6267\u884C. longterm: \u957F\u671F\u4EFB\u52A1/\u613F\u666F\u76EE\u6807\uFF08\u5982\u63D0\u5347\u516C\u53F8\u5F71\u54CD\u529B\uFF09\uFF0C\u96BE\u4EE5\u4E00\u6B21\u6027\u5B8C\u6210\uFF0C\u6301\u7EED\u8DDF\u8FDB"),goals_and_expected_deliverables:U.string().optional().describe("Goals and expected deliverables"),due_date:U.string().optional().describe("Due date (ISO format)"),tags:U.array(U.string()).optional().describe("Task tags (for search, stored in task.tags JSON field)"),project_path:U.string().describe("Project root path for task positioning. Used to locate the project space for this task. Use 'unknown' if unknown."),parent_task_id:U.union([U.number(),U.null()]).optional().describe(`\u7236\u4EFB\u52A1 ID\uFF08\u53EF\u9009\uFF09\u3002\u4E0D\u4F20\u6216\u4F20 null \u65F6\uFF0C\u521B\u5EFA\u6839\u4EFB\u52A1\uFF08root task\uFF09\u3002
293
+ `).all(_).map(($)=>{let X=Number($.span_count)||0,J=Number($.error_count)||0,Y=$.end_time??void 0,W=J===0?"ok":J>=X?"error":"mixed";return{traceId:$.trace_id,rootSpanName:$.root_name??"unknown",startTime:$.start_time,endTime:Y,duration:Y!==void 0?Y-$.start_time:void 0,spanCount:X,status:W}})}deleteByTraceId(_){if(this.db)this.db.prepare("DELETE FROM span WHERE trace_id = ?").run(_)}close(){if(this.db)this.db.close(),this.db=null}rowToSpan(_){return{traceId:_.trace_id,spanId:_.span_id,parentSpanId:_.parent_span_id,name:_.name,kind:_.kind,status:_.status,startTime:_.start_time,endTime:_.end_time,attributes:_.attributes?JSON.parse(_.attributes):{},result:_.result||void 0,error:_.error||void 0}}buildTree(_){let w=new Map,$=[];for(let X of _)w.set(X.spanId,{...X,children:[]});for(let X of w.values())if(X.parentSpanId){let J=w.get(X.parentSpanId);if(J)J.children.push(X);else $.push(X)}else $.push(X);return $}}var s$=()=>{};import{appendFileSync as s6,existsSync as t6,mkdirSync as e6}from"fs";import{join as H0}from"path";function t$(_,w){return _.padStart(w,"0")}function b2(_){return/^[0-9a-f]+$/i.test(_)}function c6(_){let w=t$(_.traceId.toLowerCase(),$4),$=t$(_.spanId.toLowerCase(),X4);return[S2,w,$,p6].join("-")}function d6(_){if(!_||typeof _!=="string")return;let $=_.trim().split("-");if($.length!==4)return;let[X,J,Y,W]=$;if(X!==S2){if(X>S2)return}if(J.length!==$4||!b2(J))return;if(Y.length!==X4||!b2(Y))return;if(W.length!==i6||!b2(W))return;return{traceId:J.toLowerCase(),spanId:Y.toLowerCase()}}var S2="00",p6="01",j2="TRACEPARENT",$4=32,X4=16,i6=2,C2,r6=r(()=>{C2={inject(_,w){_[j2]=c6(w)},extract(_){let w=_[j2];if(!w)return;return d6(w)},getTraceparentHeader(){return j2}}}),n6,a6,o6=r(()=>{((_)=>{_.CLIENT="client",_.SERVER="server",_.INTERNAL="internal"})(n6||={}),((_)=>{_.OK="ok",_.ERROR="error"})(a6||={})});function T2(_){let w=_.replace(/\\/g,"/"),$=w.match(/\/\$bunfs\/root\/(.+)$/);if($){let W=$[1],q=W.match(/(packages\/[^/]+\/src\/[^/]+\/.+)$/);if(q)return q[1];return W}let X=w.match(/@roy-agent\+core@file\+([^/]+)\/node_modules\/@roy-agent\/core\/(.+)$/);if(X){let W=X[1].replace(/\+/g,"/"),q=X[2],G=W,Q=q.startsWith("src/")?q:`src/${q}`;return`${G}/${Q}`}let J=w.match(/(packages\/[^/]+\/src\/[^/]+\/.+)$/);if(J)return J[1];let Y=["packages/core/src","packages/core","packages"];for(let W of Y){let q=w.indexOf(W);if(q!==-1)return w.substring(q)}return w}function _7(){let _=process.env.HOME||process.env.USERPROFILE||"/tmp";try{let w=__("xdg-basedir");if(w.xdgData)return H0(w.xdgData,"roy-agent","logs")}catch{}return H0(_,".local","share","roy-agent","logs")}function w7(){return G7}function $7(){if(K_){let w=K_.get("log_trace.logging.level");if(w&&["debug","info","warn","error"].includes(w))return w}let _=process.env.LOG_LEVEL;if(_&&["debug","info","warn","error"].includes(_))return _;return"info"}function X7(_){if(K_){let X=K_.get("log_trace.logging.levels");if(X&&typeof X==="object"){let Y=X[_];if(Y&&["debug","info","warn","error"].includes(Y))return Y}let J=K_.get(`log_trace.logging.levels.${_}`);if(J&&["debug","info","warn","error"].includes(J))return J}let w=`LOG_LEVEL_${_.toUpperCase().replace(/:/g,"_")}`,$=process.env[w];if($&&["debug","info","warn","error"].includes($))return $;return $7()}function J7(_){if(_.startsWith("/"))return!0;if(/^[a-zA-Z]:[/\\]/.test(_))return!0;return!1}function Y7(_){if(_.startsWith("~")){let w=process.env.HOME||process.env.USERPROFILE||"/tmp";return H0(w,_.slice(1))}return _}function W7(){if(K_){let _=K_.get("log-trace.logging.file");if(_)return _}return"app.log"}function q7(){if(K_){let _=K_.get("log-trace.logging.dir");if(_)return _}return _7()}function I2(){if(K_){let _=K_.get("log-trace.logging.maxOutput");if(typeof _==="number")return _}return}class J4{prefix;constructor(_){this.prefix=_}shouldLog(_){let w=X7(this.prefix);return P2[_]>=P2[w]}ensureLogDirectory(_){if(!t6(_))try{e6(_,{recursive:!0})}catch(w){console.error("[Logger] Failed to create log directory:",_,w)}}getCallerLocation(){let _=Error.stackTraceLimit;Error.stackTraceLimit=10;let w=Error();Error.captureStackTrace(w,this.formatMessage);let $=w.stack?.split(`
294
+ `)||[];Error.stackTraceLimit=_;for(let X=1;X<$.length;X++){let J=$[X];if(J.includes("at ")&&!J.includes("logger.ts")&&!J.includes("formatMessage")){let Y=J.match(/at\s+.+\s+\((.+):(\d+):\d+\)/)||J.match(/at\s+(.+):(\d+):\d+/);if(Y){let W=Y[1];return{file:this.getRelativePath(W),line:parseInt(Y[2],10)}}}}return null}getRelativePath(_){return T2(_)}formatMessage(_,w,$){let X=new Date,J=X.toLocaleString("zh-CN",{timeZone:"Asia/Shanghai",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}).replace(/\//g,"-")+"."+String(X.getMilliseconds()).padStart(3,"0"),Y=this.prefix?`[${this.prefix}]`:"",W="";try{let D=D0().getTracer("roy-tracer").getCurrentContext();if(D?.traceId)W=`[traceId=${D.traceId}]`}catch{}let q="";if($&&typeof $==="object"&&"callerLocation"in $){let H=$;q=H.callerLocation?` [${H.callerLocation}]`:"";let{callerLocation:B,...D}=H;$=Object.keys(D).length>0?D:void 0}else{let H=this.getCallerLocation();if(H)q=` [${H.file}:${H.line}]`}let G=`${J} [${_.toUpperCase()}]${W}${q}${Y} ${w}`;if($!==void 0)if(typeof $==="object")G+=" "+JSON.stringify($).replace(/\n/g,"");else G+=" "+String($);let Q=I2();if(Q&&Q>0&&G.length>Q)G=G.substring(0,Q)+" [TRUNCATED]";return G}writeToFile(_){try{let w=q7(),$=W7(),X=Y7(w),J=J7(X)?X:H0(process.cwd(),X);this.ensureLogDirectory(J);let Y=H0(J,$);s6(Y,_+`
295
+ `,"utf-8")}catch(w){console.error("[Logger] Failed to write to log file:",w)}}log(_,w,$){if(!this.shouldLog(_))return;let X=this.formatMessage(_,w,$);if(this.writeToFile(X),!w7())(_==="error"?console.error:_==="warn"?console.warn:_==="info"?console.log:console.debug)(X)}debug(_,w){this.log("debug",_,w)}info(_,w){this.log("info",_,w)}warn(_,w){this.log("warn",_,w)}error(_,w){this.log("error",_,w)}}function n(_){if(!q1.has(_))q1.set(_,new J4(_));return q1.get(_)}var K_=null,G7=!1;var P2,q1,a=r(()=>{h2(),P2={debug:0,info:1,warn:2,error:3},q1=new Map}),Q7={};n_(Q7,{setTracerProvider:()=>D7,resetTracerProvider:()=>H7,getTracerProvider:()=>D0,OTelTracerProvider:()=>k2});function g2(){if(!E2)E2=n("otel-tracer");return E2}function Y4(){return process.env.ROY_TRACE_DEBUG_OTEL==="1"||process.env.ROY_TRACE_DEBUG==="1"}function W4(_,...w){g2().info(_,...w)}function e$(_,...w){g2().warn(_,...w)}function _4(_,...w){g2().error(_,...w)}class Z2{name;kind;spanContext;attributes={};startTime;endTime;error;storage;parentSpanContext;onEnd;constructor(_,w,$,X,J){this.name=_,this.kind="internal",this.spanContext=w,this.parentSpanContext=X,this.startTime=Date.now(),this.storage=$,this.onEnd=J}setAttribute(_,w){this.attributes[_]=w}addEvent(_,w){let $=this.attributes._events||[];$.push({name:_,attributes:w}),this.attributes._events=$}end(_,w){if(this.endTime=Date.now(),w)this.error=w.message;let $=this.endTime-(this.startTime||0);if(Y4())W4(`[OTelSpan] Ending span: name="${this.name}" traceId=${this.spanContext.traceId} spanId=${this.spanContext.spanId} duration=${$}ms status=${w?"ERROR":"OK"}`);let X=this.storage;if(!X)e$(`[OTelSpan] storage is null for "${this.name}", attempting to re-fetch...`),X=D0().getStorage();if(X){if(!(X.db||X.initialized))e$(`[OTelSpan] storage not initialized for "${this.name}", initializing now...`),X.initialize().catch((Y)=>{_4("[OTelSpan] Failed to initialize storage:",Y)});X.save({traceId:this.spanContext.traceId,spanId:this.spanContext.spanId,parentSpanId:this.spanContext.parentSpanId,name:this.name,kind:this.kind,status:w?"error":"ok",startTime:this.startTime,endTime:this.endTime,attributes:this.attributes,result:_,error:this.error})}else _4(`[OTelSpan] Failed to save span "${this.name}": storage still null after re-fetch`);this.onEnd?.()}}class q4{name;version;storage;currentContext;activeSpans=new Map;onSpanEndCallback;provider;instanceId;constructor(_,w,$,X){this.name=_,this.version=w,this.storage=$,this.provider=X,this.instanceId=`${_}@${X.instanceId}`}setOnSpanEndCallback(_){this.onSpanEndCallback=_}getActiveSpanCount(){return this.activeSpans.size}startSpan(_,w){let $=w?.parent,X=w&&"parent"in w,J=w&&"context"in w,Y=this.provider.getGlobalContext(),W,q,G,Q,H;if(J&&w?.context){let D=w.context;q=D.traceId,G=this.generateSpanId(),Q=D.spanId,H={traceId:q,spanId:G,parentSpanId:Q},this.currentContext={traceId:q,spanId:G,parentSpanId:Q};let z=new Z2(_,H,this.storage,D,()=>this.handleSpanEnd(H.spanId,D.spanId));if(w?.attributes)for(let[A,U]of Object.entries(w.attributes))z.setAttribute(A,U);return this.activeSpans.set(G,z),z}if(X)W=$;else if(this.currentContext)W=this.currentContext;else if(Y)W=Y;if(q=W?.traceId||this.generateTraceId(),G=this.generateSpanId(),X&&$)Q=$.parentSpanId||$.spanId;else if(this.currentContext)Q=this.currentContext.spanId;else if(Y)Q=Y.spanId;H={traceId:q,spanId:G,parentSpanId:Q},this.currentContext={traceId:q,spanId:G,parentSpanId:Q};let B=new Z2(_,H,this.storage,W,()=>this.handleSpanEnd(H.spanId,W?.spanId));if(w?.attributes)for(let[D,z]of Object.entries(w.attributes))B.setAttribute(D,z);if(this.activeSpans.set(G,B),Y4())W4(`[OTelTracer] \u2713 Span created: name="${_}" traceId=${q} spanId=${G} parentSpanId=${Q||"-"}`);return B}injectToEnv(_){if(this.currentContext)C2.inject(_,this.currentContext)}getCurrentContext(){return this.currentContext}setCurrentContext(_){this.currentContext=_}findStackParentSpan(_){for(let[,w]of this.activeSpans)if(w.spanContext.parentSpanId===_)return w;return}endSpan(_){let w=_.spanContext;this.activeSpans.delete(w.spanId);let $=this.currentContext?.traceId;if(w.parentSpanId){let J=this.activeSpans.get(w.parentSpanId);if(J){let Y={traceId:w.traceId,spanId:J.spanContext.spanId,parentSpanId:J.spanContext.parentSpanId};return this.currentContext=Y,Y}if($){let Y={traceId:$,spanId:w.parentSpanId,parentSpanId:void 0};return this.currentContext=Y,Y}}let X=this.findStackParentSpan(w.spanId);if(X){let J={traceId:X.spanContext.traceId,spanId:X.spanContext.spanId,parentSpanId:X.spanContext.parentSpanId};return this.currentContext=J,J}this.currentContext=void 0;return}generateTraceId(){let _=Date.now().toString(16).padStart(12,"0"),w=Array.from({length:5},()=>Math.floor(Math.random()*4294967295).toString(16).padStart(8,"0")).join("");return(_+w).slice(0,32).padStart(32,"0")}generateSpanId(){return Math.floor(Math.random()*18446744073709552000).toString(16).padStart(16,"0")}handleSpanEnd(_,w){if(this.activeSpans.delete(_),w){let X=this.activeSpans.get(w);if(X){this.currentContext={traceId:X.spanContext.traceId,spanId:X.spanContext.spanId,parentSpanId:X.spanContext.parentSpanId};return}if(this.currentContext?.traceId){this.currentContext={traceId:this.currentContext.traceId,spanId:w,parentSpanId:void 0};return}}let $=this.findStackParentSpan(_);if($){this.currentContext={traceId:$.spanContext.traceId,spanId:$.spanContext.spanId,parentSpanId:$.spanContext.parentSpanId};return}this.currentContext=void 0}}class k2{tracers=new Map;storage;initialized=!1;globalContext;instanceId;constructor(_,w){w4++,this.instanceId=`Provider#${w4}`,this.storage=_||new N2(w||B7())}async initialize(){if(this.initialized)return;await this.storage.initialize(),this.initialized=!0}isInitialized(){return this.initialized}getGlobalContext(){return this.globalContext}setGlobalContext(_){this.globalContext=_}getTracer(_,w){let $=`${_}@${w||"0.0.0"}`,X=this.tracers.get($);if(!X){if(X=new q4(_,w,this.storage,this),this.tracers.set($,X),this.initialized)this.restoreFromEnv(X)}return X}restoreFromEnv(_){let w=C2.extract(process.env);if(w)_.setCurrentContext({traceId:w.traceId,spanId:w.spanId,parentSpanId:void 0})}shutdown(){for(let _ of this.tracers.values());this.tracers.clear(),this.storage.close(),this.initialized=!1,this.globalContext=void 0,delete process.env.TRACEPARENT,delete process.env.TRACE_ID,delete process.env.LOG_TRACE_REQUEST_ID}getStorage(){return this.storage}}function D0(){if(!x_)x_=new k2;return x_}function H7(){if(x_)x_.shutdown(),x_=null}function D7(_){if(x_)x_.shutdown();x_=_}function B7(){let _=__("os"),w=__("path"),$=_.homedir(),X=process.env.XDG_DATA_HOME||w.join($,".local","share");return w.join(X,"roy-agent","traces.db")}var E2=null,x_=null,w4=0,h2=r(()=>{s$(),r6(),o6(),a()});function U7(_){let w=()=>({recordParams:_?.recordParams??!0,recordResult:_?.recordResult??!1,recordError:_?.recordError??!0,log:_?.log??!1,maxLogSize:_?.maxLogSize,paramFilter:_?.paramFilter,resultFilter:_?.resultFilter,flattenParamFilter:_?.flattenParamFilter,errorIf:_?.errorIf});return function($,X,J){if(J!==void 0&&J!==null&&typeof J==="object"&&"value"in J){let q=J.value,G=_?.name||String(X);return J.value=T_(q,G,w()),J}let Y=$,W=X||{};if(typeof Y==="function"){let q=_?.name||(W?.name?String(W.name):"anonymous");return T_(Y,q,w())}return Y}}function u(_,w){return U7({name:_,...w})}function T_(_,w,$){let X=$?.log??!1,J=()=>{if($?.maxLogSize!==void 0)return $.maxLogSize;let B=I2();return B!==void 0?B:500},Y=(B)=>{if(B===void 0)return;if(B===null)return null;let D=J(),z;try{z=typeof B==="string"?B:JSON.stringify(B,null,0).replace(/\n/g,"")}catch(A){z=`[Object with circular reference: ${A instanceof Error?A.message:String(A)}]`}if(D>0&&z.length>D)return z.slice(0,D)+" [TRUNCATED]";try{return JSON.parse(z)}catch{return z}},W=(B)=>{if(B===void 0)return"undefined";if(B===null)return"null";let D=J(),z;try{z=typeof B==="string"?B:JSON.stringify(B,null,0).replace(/\n/g,"")}catch(A){z=`[Object with circular reference: ${A instanceof Error?A.message:String(A)}]`}return D>0&&z.length>D?z.slice(0,D)+" [TRUNCATED]":z},q=(B)=>{if(B===void 0)return;if(B===null)return null;if(typeof B==="string")return B;try{return JSON.parse(JSON.stringify(B))}catch(D){return`[Object with circular reference: ${D instanceof Error?D.message:String(D)}]`}},G="[TRACE]",Q=()=>{let B=Error.stackTraceLimit;Error.stackTraceLimit=15;let D=Error();Error.captureStackTrace(D,Q);let z=D.stack?.split(`
296
+ `)||[];Error.stackTraceLimit=B;for(let A=1;A<z.length;A++){let U=z[A];if(U.includes("decorator.ts")||U.includes("decorator.js")||U.includes("logFn")||U.includes("getCallerLocation"))continue;let V=U.match(/at\s+.+\s+\((.+):(\d+):\d+\)/)||U.match(/at\s+(.+):(\d+):\d+/);if(V){let R=V[1];if(!R||R==="native")continue;return`${T2(R)}:${V[2]}`}}return""},H=(B,D,z)=>{if(!X)return;let A=n("traced:"+w),V=`[TRACE] ${B==="enter"?">>>":B==="quit"?"<<<":"!!!"} ${w}`,R=z||Q(),f=(S,K)=>{if(K!==void 0)A.info(`${V} ${S}: ${W(K)}`,{callerLocation:R});else A.info(`${V} ${S}`,{callerLocation:R})};if(B==="enter")f("enter",D);else if(B==="quit")f("quit",$?.recordResult?D:void 0);else f("error",D)};return function(...B){let D=D0().getTracer("roy-tracer"),z={};if($?.recordParams!==!1)if($?.paramFilter){let V=$.paramFilter(B);if(z.params=q(V),$?.flattenParamFilter&&V&&typeof V==="object"&&!Array.isArray(V)){for(let[R,f]of Object.entries(V))if(!(R in z))z[R]=q(f)}}else z.params=q(B);let A=Q(),U;try{U=D.startSpan(w,{attributes:z})}catch{}H("enter",B,A);try{let V=_.call(this,...B);if(V&&typeof V==="object"&&typeof V.then==="function")return V.then((R)=>{if(U){if($?.resultFilter){let S=$.resultFilter(R);if(S&&typeof S==="object")for(let[K,j]of Object.entries(S))U.setAttribute(K,q(j))}U.setAttribute("result",JSON.stringify(q(R)));let f=$?.errorIf?$.errorIf(R):void 0;if(f){let S=f instanceof Error?f:Error(String(f));U.setAttribute("error",S.message),U.end(void 0,S)}else U.end(R)}return H("quit",$?.recordResult?R:void 0,A),R},(R)=>{if(U)U.setAttribute("error",String(R)),U.end(void 0,R instanceof Error?R:Error(String(R)));throw H("error",R.message,A),R});if(U){if($?.resultFilter){let f=$.resultFilter(V);if(f&&typeof f==="object")for(let[S,K]of Object.entries(f))U.setAttribute(S,q(K))}U.setAttribute("result",JSON.stringify(q(V)));let R=$?.errorIf?$.errorIf(V):void 0;if(R){let f=R instanceof Error?R:Error(String(R));U.setAttribute("error",f.message),U.end(void 0,f)}else U.end(V)}return H("quit",$?.recordResult?V:void 0,A),V}catch(V){if(U)U.setAttribute("error",String(V)),U.end(void 0,V instanceof Error?V:Error(String(V)));throw H("error",V.message,A),V}}}var z_=r(()=>{h2(),a()});import{join as z4}from"path";var G4={};n_(G4,{runMigration:()=>z7});function z7(_){console.log(`[Migration 001] Starting migration for: ${_}`);let w=mw(_);try{try{w.run("ALTER TABLE task ADD COLUMN project_path TEXT"),console.log("[Migration 001] Added project_path column")}catch($){if($.message?.includes("duplicate column name"))console.log("[Migration 001] project_path column already exists, skipping");else throw $}try{w.run("ALTER TABLE task ADD COLUMN context TEXT"),console.log("[Migration 001] Added context column")}catch($){if($.message?.includes("duplicate column name"))console.log("[Migration 001] context column already exists, skipping");else throw $}console.log("[Migration 001] Migration completed successfully")}finally{w.close()}}var V7=r(()=>{Bw()}),Q4={};n_(Q4,{runMigration:()=>A7});function A7(_){console.log(`[Migration 002] Starting migration for: ${_}`);let w=mw(_);try{try{w.run("ALTER TABLE task ADD COLUMN type TEXT NOT NULL DEFAULT 'normal'"),console.log("[Migration 002] Added type column")}catch($){if($.message?.includes("duplicate column name"))console.log("[Migration 002] type column already exists, skipping");else throw $}console.log("[Migration 002] Migration completed successfully")}finally{w.close()}}var M7=r(()=>{Bw()}),H4={};n_(H4,{runMigration:()=>R7});function R7(_){console.log(`[Migration 003] Starting migration for: ${_}`);let w=mw(_);try{try{w.run("ALTER TABLE task_operation ADD COLUMN process_description TEXT NOT NULL DEFAULT ''"),console.log("[Migration 003] Added process_description column")}catch($){if($.message?.includes("duplicate column name"))console.log("[Migration 003] process_description column already exists, skipping");else throw $}console.log("[Migration 003] Migration completed successfully")}finally{w.close()}}var O7=r(()=>{Bw()}),D4={};n_(D4,{runMigration:()=>F7});function F7(_){console.log(`[Migration 004] Starting migration for: ${_}`);let w=mw(_);try{let $=new Set,X=w.query("PRAGMA table_info(task_operation)").all();for(let J of X)$.add(J.name);for(let{oldName:J,newName:Y}of B4){let W=$.has(J),q=$.has(Y);if(W&&!q)w.run(`ALTER TABLE task_operation RENAME COLUMN ${J} TO ${Y}`),console.log(`[Migration 004] Renamed ${J} -> ${Y}`);else if(q)console.log(`[Migration 004] ${Y} already exists, skipping rename of ${J}`);else console.log(`[Migration 004] ${J} not present, skipping rename to ${Y}`)}console.log("[Migration 004] Migration completed successfully")}finally{w.close()}}var B4,f7=r(()=>{Bw(),B4=[{oldName:"action_type",newName:"milestone_type"},{oldName:"action_title",newName:"milestone_title"},{oldName:"action_description",newName:"milestone_description"}]}),U4={};n_(U4,{runMigration:()=>L7});function L7(_){console.log(`[Migration 005] Starting migration for: ${_}`);let w=mw(_),$={blobCountBefore:0,blobCountAfter:0,ran:!1};try{if(w.query("SELECT name FROM sqlite_master WHERE type='table' AND name='task'").all().length===0)return console.log("[Migration 005] task table does not exist, skipping"),$;let J=w.query("SELECT COUNT(*) as cnt FROM task WHERE typeof(description) = 'blob'").all();if($.blobCountBefore=J[0]?.cnt??0,$.blobCountBefore===0)return console.log("[Migration 005] No BLOB descriptions found, no action needed"),$;w.run("UPDATE task SET description = CAST(description AS TEXT) WHERE typeof(description) = 'blob'"),$.ran=!0;let Y=w.query("SELECT COUNT(*) as cnt FROM task WHERE typeof(description) = 'blob'").all();$.blobCountAfter=Y[0]?.cnt??0,console.log(`[Migration 005] Converted ${$.blobCountBefore-$.blobCountAfter} BLOB description(s) to TEXT`),console.log("[Migration 005] Migration completed successfully")}finally{w.close()}return $}var K7=r(()=>{Bw()});function N7(){if(typeof Bun<"u"){let{Database:_}=__("bun:sqlite");return _}else return __("better-sqlite3")}function mw(_){let $=new(N7())(_);if(typeof $.run!=="function")$.run=function(X,...J){if(J.length>0)return this.prepare(X).run(...J);else return this.exec(X)};return $}function b7(){let _=process.env.HOME||process.env.USERPROFILE||"/tmp";return z4(_,".local","share")}function G1(){return z4(b7(),"roy-agent","tasks.db")}var Hw,Dw,Bw=r(()=>{a(),z_(),Hw=n("task:store"),Dw=class _{db=null;dbPath;initialized=!1;tasksCache=new Map;operationsCache=new Map;constructor(w){this.dbPath=w||G1()}async initialize(){if(this.initialized)return;if(this.dbPath!==":memory:"){let w=__("fs"),X=__("path").dirname(this.dbPath);if(!w.existsSync(X))w.mkdirSync(X,{recursive:!0})}if(this.db=mw(this.dbPath),this.db.run(`
297
+ CREATE TABLE IF NOT EXISTS task (
298
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
299
+ title TEXT NOT NULL,
300
+ description TEXT DEFAULT '',
301
+ status TEXT DEFAULT 'todo',
302
+ priority TEXT DEFAULT 'medium',
303
+ type TEXT DEFAULT 'normal',
304
+ progress INTEGER DEFAULT 0,
305
+ current_status TEXT DEFAULT '',
306
+ goals_and_expected_deliverables TEXT DEFAULT '',
307
+ parent_task_id INTEGER,
308
+ created_at INTEGER NOT NULL,
309
+ updated_at INTEGER NOT NULL,
310
+ due_date TEXT,
311
+ tags TEXT,
312
+ project_path TEXT NOT NULL DEFAULT 'unknown',
313
+ context TEXT NOT NULL DEFAULT '{}'
314
+ )
315
+ `),this.db.run(`
316
+ CREATE TABLE IF NOT EXISTS task_operation (
317
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
318
+ task_id INTEGER NOT NULL,
319
+ session_id TEXT NOT NULL,
320
+ milestone_type TEXT NOT NULL,
321
+ milestone_title TEXT NOT NULL,
322
+ milestone_description TEXT DEFAULT '',
323
+ process_description TEXT NOT NULL DEFAULT '',
324
+ timestamp INTEGER NOT NULL,
325
+ md_path TEXT,
326
+ FOREIGN KEY (task_id) REFERENCES task(id) ON DELETE CASCADE
327
+ )
328
+ `),this.db.run("CREATE INDEX IF NOT EXISTS idx_task_operation_task_id ON task_operation(task_id)"),this.db.run("CREATE INDEX IF NOT EXISTS idx_task_operation_session_id ON task_operation(session_id)"),this.db.run(`
329
+ CREATE TABLE IF NOT EXISTS task_tag (
330
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
331
+ name TEXT NOT NULL UNIQUE,
332
+ created_at INTEGER NOT NULL,
333
+ task_count INTEGER DEFAULT 0
334
+ )
335
+ `),this.db.run(`
336
+ CREATE TABLE IF NOT EXISTS task_tag_relation (
337
+ task_id INTEGER NOT NULL,
338
+ tag_id INTEGER NOT NULL,
339
+ created_at INTEGER NOT NULL,
340
+ PRIMARY KEY (task_id, tag_id),
341
+ FOREIGN KEY (task_id) REFERENCES task(id) ON DELETE CASCADE,
342
+ FOREIGN KEY (tag_id) REFERENCES task_tag(id) ON DELETE CASCADE
343
+ )
344
+ `),this.db.run("CREATE INDEX IF NOT EXISTS idx_task_tag_relation_tag_id ON task_tag_relation(tag_id)"),this.db.run("CREATE INDEX IF NOT EXISTS idx_task_parent_task_id ON task(parent_task_id)"),this.dbPath!==":memory:"){try{let{runMigration:w}=(V7(),xw(G4));w(this.dbPath)}catch(w){Hw.warn(`[Migration 001] Failed to run: ${w.message}`)}try{let{runMigration:w}=(M7(),xw(Q4));w(this.dbPath)}catch(w){Hw.warn(`[Migration 002] Failed to run: ${w.message}`)}try{let{runMigration:w}=(O7(),xw(H4));w(this.dbPath)}catch(w){Hw.warn(`[Migration 003] Failed to run: ${w.message}`)}try{let{runMigration:w}=(f7(),xw(D4));w(this.dbPath)}catch(w){Hw.warn(`[Migration 004] Failed to run: ${w.message}`)}try{let{runMigration:w}=(K7(),xw(U4));w(this.dbPath)}catch(w){Hw.warn(`[Migration 005] Failed to run: ${w.message}`)}}this.initialized=!0,Hw.info(`TaskStore initialized at ${this.dbPath}`)}async createTask(w){await this.initialize();let $=Date.now(),J=this.db.prepare(`
345
+ INSERT INTO task (title, description, priority, type, parent_task_id,
346
+ goals_and_expected_deliverables, due_date, tags, status,
347
+ current_status, created_at, updated_at, project_path, context)
348
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, 'todo', '', ?, ?, ?, ?)
349
+ `).run(w.title,w.description||"",w.priority||"medium",w.type||"normal",w.parent_task_id||null,w.goals_and_expected_deliverables||"",w.due_date||null,w.tags?JSON.stringify(w.tags):null,$,$,w.project_path,w.context),Y=await this.getTask(J.lastInsertRowid);if(Y)return this.tasksCache.set(Y.id,Y),Y;throw Error("Failed to create task")}async getTask(w){if(await this.initialize(),this.tasksCache.has(w))return this.tasksCache.get(w);let X=this.db.prepare("SELECT * FROM task WHERE id = ?").get(w);if(!X)return;let J=this.rowToTask(X);return this.tasksCache.set(w,J),J}async updateTask(w,$){await this.initialize();let X=await this.getTask(w);if(!X)return;let J=[],Y=[];if($.title!==void 0)J.push("title = ?"),Y.push($.title);if($.description!==void 0)J.push("description = ?"),Y.push($.description);if($.status!==void 0)J.push("status = ?"),Y.push($.status);if($.priority!==void 0)J.push("priority = ?"),Y.push($.priority);if($.type!==void 0)J.push("type = ?"),Y.push($.type);if($.progress!==void 0)J.push("progress = ?"),Y.push($.progress);if($.current_status!==void 0)J.push("current_status = ?"),Y.push($.current_status);if($.goals_and_expected_deliverables!==void 0)J.push("goals_and_expected_deliverables = ?"),Y.push($.goals_and_expected_deliverables);if($.due_date!==void 0)J.push("due_date = ?"),Y.push($.due_date);if($.tags!==void 0)J.push("tags = ?"),Y.push(JSON.stringify($.tags));if($.project_path!==void 0)J.push("project_path = ?"),Y.push($.project_path);if($.context!==void 0)J.push("context = ?"),Y.push($.context);if($.parent_task_id!==void 0)J.push("parent_task_id = ?"),Y.push($.parent_task_id);if(J.length===0)return X;return J.push("updated_at = ?"),Y.push(Date.now()),Y.push(w),this.db.prepare(`UPDATE task SET ${J.join(", ")} WHERE id = ?`).run(...Y),this.tasksCache.delete(w),this.getTask(w)}async deleteTask(w){await this.initialize();let X=this.db.prepare("DELETE FROM task WHERE id = ?").run(w);if(X.changes>0)this.tasksCache.delete(w),this.operationsCache.delete(w);return X.changes>0}async listTasks(w){if(await this.initialize(),w?.depth!==void 0&&w.depth>=0&&w.parent_task_id===void 0)return this.listTasksByDepth(w);let $=["1=1"],X=[];if(w?.status)$.push("status = ?"),X.push(w.status);if(w?.priority)$.push("priority = ?"),X.push(w.priority);if(w?.type)$.push("type = ?"),X.push(w.type);if(w?.parent_task_id!==void 0)$.push("parent_task_id = ?"),X.push(w.parent_task_id);if(!w?.include_archived&&w?.status!=="archived")$.push("status != 'archived'");let J=$.join(" AND "),Y=`SELECT COUNT(*) as total FROM task WHERE ${J}`,q=this.db.prepare(Y).get(...X)?.total??0,G=`SELECT * FROM task WHERE ${J}`,Q=[...X];if(G+=" ORDER BY updated_at DESC",w?.limit)G+=" LIMIT ?",Q.push(w.limit);if(w?.offset)G+=" OFFSET ?",Q.push(w.offset);return{tasks:this.db.prepare(G).all(...Q).map((z)=>{let A=this.rowToTask(z);return this.tasksCache.set(A.id,A),A}),total:q}}async listTasksByDepth(w){let $=w.depth??0,X=["1=1"],J=[];if(w.status)X.push("status = ?"),J.push(w.status);if(w.priority)X.push("priority = ?"),J.push(w.priority);if(w.type)X.push("type = ?"),J.push(w.type);if(!w?.include_archived&&w?.status!=="archived")X.push("status != 'archived'");let Y=X.join(" AND "),W=[];if($===0){let B=`SELECT * FROM task WHERE parent_task_id IS NULL AND ${Y} ORDER BY updated_at DESC`,D=this.db.prepare(B).all(...J);for(let z of D){let A=this.rowToTask(z);this.tasksCache.set(A.id,A),W.push(A)}}else{let D=this.db.prepare(`SELECT * FROM task WHERE parent_task_id IS NULL AND ${Y} ORDER BY updated_at DESC`).all(...J).map((z)=>{let A=this.rowToTask(z);return this.tasksCache.set(A.id,A),A});W.push(...D);for(let z=1;z<=$;z++){if(D.length===0)break;let A=D.map((S)=>S.id),V=`SELECT * FROM task WHERE parent_task_id IN (${A.map(()=>"?").join(",")}) AND ${Y} ORDER BY updated_at DESC`,f=this.db.prepare(V).all(...A,...J).map((S)=>{let K=this.rowToTask(S);return this.tasksCache.set(K.id,K),K});W.push(...f),D=f}}let q=W.length,G=w.offset??0,Q=w.limit??q;return{tasks:W.slice(G,G+Q),total:q}}async getTaskTree(w,$=-1){await this.initialize();let X=[],J=[w],Y=0;while(J.length>0){if($!==-1&&Y>=$)break;let W=J.map(()=>"?").join(","),q=this.db.prepare(`SELECT * FROM task WHERE parent_task_id IN (${W}) ORDER BY updated_at DESC`).all(...J),G=[];for(let Q of q){let H=this.rowToTask(Q);this.tasksCache.set(H.id,H),X.push(H),G.push(H.id)}J=G,Y++}return X}async getChildTasks(w,$={}){return this.listTasks({...$,parent_task_id:w})}async createOperation(w){await this.initialize();let $=w.milestoneType??w.actionType,X=w.milestoneTitle??w.actionTitle,J=w.milestoneDescription??w.actionDescription;if(!$||!X)throw Error("createOperation requires milestoneType and milestoneTitle (or legacy actionType/actionTitle)");let Y=Date.now(),q=this.db.prepare(`
350
+ INSERT INTO task_operation (task_id, session_id, milestone_type, milestone_title,
351
+ milestone_description, process_description, timestamp, md_path)
352
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
353
+ `).run(w.taskId,w.sessionId,$,X,J||"",w.processDescription||"",Y,w.mdPath||null);this.operationsCache.delete(w.taskId);let G=await this.getOperation(q.lastInsertRowid);if(!G)throw Error("Failed to create operation");return G}async getOperation(w){await this.initialize();let X=this.db.prepare("SELECT * FROM task_operation WHERE id = ?").get(w);if(!X)return;return this.rowToOperation(X)}async updateOperation(w,$){await this.initialize();let X=await this.getOperation(w);if(!X)return;let J=$.milestoneTitle??$.actionTitle,Y=$.milestoneDescription??$.actionDescription,W=[],q=[];if(J!==void 0)W.push("milestone_title = ?"),q.push(J);if(Y!==void 0)W.push("milestone_description = ?"),q.push(Y);if($.processDescription!==void 0)W.push("process_description = ?"),q.push($.processDescription);if(W.length===0)return X;return this.db.prepare(`UPDATE task_operation SET ${W.join(", ")} WHERE id = ?`).run(...q,w),this.operationsCache.delete(X.taskId),this.getOperation(w)}async deleteOperation(w){await this.initialize();let $=await this.getOperation(w);if(!$)return!1;let J=this.db.prepare("DELETE FROM task_operation WHERE id = ?").run(w);if(J.changes>0)this.operationsCache.delete($.taskId);return J.changes>0}async listOperations(w){await this.initialize();let $=w.taskId;if(!this.operationsCache.has($)){let G=this.db.prepare("SELECT * FROM task_operation WHERE task_id = ? ORDER BY timestamp DESC").all(w.taskId);this.operationsCache.set($,G.map((Q)=>this.rowToOperation(Q)))}let X=this.operationsCache.get($),J=w.milestoneType??w.actionType;if(J)X=X.filter((q)=>q.milestoneType===J);let Y=w.offset||0,W=w.limit||20;return X.slice(Y,Y+W)}async getTaskIdBySessionId(w){if(await this.initialize(),!w)return;let $=this.db.prepare("SELECT task_id FROM task_operation WHERE session_id = ? AND milestone_type = 'create' ORDER BY timestamp ASC LIMIT 1").get(w);return typeof $?.task_id==="number"?$.task_id:void 0}rowToTask(w){return{id:w.id,title:String(w.title??""),description:String(w.description??""),status:String(w.status??"todo"),priority:String(w.priority??"medium"),type:String(w.type??"normal"),progress:w.progress,current_status:String(w.current_status??""),goals_and_expected_deliverables:String(w.goals_and_expected_deliverables??""),parent_task_id:w.parent_task_id||void 0,createdAt:new Date(w.created_at).toISOString(),updatedAt:new Date(w.updated_at).toISOString(),due_date:w.due_date?String(w.due_date):void 0,tags:_.parseTagsSafely(w.tags),project_path:String(w.project_path??"unknown"),context:w.context}}static parseTagsSafely(w){if(w===null||w===void 0||w==="")return;let $=typeof w==="string"?w:String(w);try{let X=JSON.parse($);if(Array.isArray(X))return X;if(typeof X==="string")return[X];return}catch{return[$]}}rowToOperation(w){let $=w.milestone_type??w.action_type,X=w.milestone_title??w.action_title,J=w.milestone_description??w.action_description??"";return{id:w.id,taskId:w.task_id,sessionId:w.session_id,milestoneType:$,milestoneTitle:X,milestoneDescription:J,processDescription:w.process_description??"",timestamp:new Date(w.timestamp).toISOString(),mdPath:w.md_path||void 0,actionType:$,actionTitle:X,actionDescription:J}}async createTag(w){await this.initialize();let $=Date.now(),X=await this.getTagByName(w);if(X)return X;return{id:this.db.prepare(`
354
+ INSERT INTO task_tag (name, created_at, task_count)
355
+ VALUES (?, ?, 0)
356
+ `).run(w,$).lastInsertRowid,name:w,createdAt:new Date($).toISOString(),taskCount:0}}async getTag(w){await this.initialize();let X=this.db.prepare("SELECT * FROM task_tag WHERE id = ?").get(w);if(!X)return;return this.rowToTag(X)}async getTagByName(w){await this.initialize();let X=this.db.prepare("SELECT * FROM task_tag WHERE name = ?").get(w);if(!X)return;return this.rowToTag(X)}async listTags(w){await this.initialize();let $="SELECT * FROM task_tag",X=[],J=w?.orderBy||"count";if(J==="count")$+=" ORDER BY task_count DESC";else if(J==="name")$+=" ORDER BY name ASC";else $+=" ORDER BY created_at DESC";if(w?.limit)$+=" LIMIT ?",X.push(w.limit);if(w?.offset)$+=" OFFSET ?",X.push(w.offset);return this.db.prepare($).all(...X).map((q)=>this.rowToTag(q))}async searchTags(w){await this.initialize();let $=`
357
+ SELECT * FROM task_tag
358
+ WHERE name LIKE ?
359
+ ORDER BY task_count DESC
360
+ LIMIT ?
361
+ `;return this.db.prepare($).all(`%${w.query}%`,w.limit||20).map((Y)=>this.rowToTag(Y))}async deleteTag(w){return await this.initialize(),this.db.prepare("DELETE FROM task_tag WHERE id = ?").run(w).changes>0}async addTagsToTask(w,$){await this.initialize();let X=Date.now(),J=this.db.prepare(`
362
+ INSERT OR IGNORE INTO task_tag_relation (task_id, tag_id, created_at)
363
+ VALUES (?, ?, ?)
364
+ `);for(let Y of $)J.run(w,Y,X),this.db.run(`
365
+ UPDATE task_tag SET task_count = task_count + 1 WHERE id = ?
366
+ `,Y);await this.syncTaskTagsJson(w)}async removeTagsFromTask(w,$){await this.initialize();let X=this.db.prepare("DELETE FROM task_tag_relation WHERE task_id = ? AND tag_id = ?");for(let J of $)X.run(w,J),this.db.run(`
367
+ UPDATE task_tag SET task_count = MAX(0, task_count - 1) WHERE id = ?
368
+ `,J);await this.syncTaskTagsJson(w)}async getTagsForTask(w){await this.initialize();let $=`
369
+ SELECT t.* FROM task_tag t
370
+ INNER JOIN task_tag_relation r ON t.id = r.tag_id
371
+ WHERE r.task_id = ?
372
+ ORDER BY t.name ASC
373
+ `;return this.db.prepare($).all(w).map((Y)=>this.rowToTag(Y))}async getTaskIdsByTags(w){if(await this.initialize(),w.length===0)return[];let X=`
374
+ SELECT DISTINCT r.task_id FROM task_tag_relation r
375
+ INNER JOIN task_tag t ON r.tag_id = t.id
376
+ WHERE t.name IN (${w.map(()=>"?").join(", ")})
377
+ `;return this.db.prepare(X).all(...w).map((W)=>W.task_id)}async updateTaskTags(w,$){await this.initialize();let X=await this.getTagsForTask(w);if(X.length>0)await this.removeTagsFromTask(w,X.map((Y)=>Y.id));let J=[];for(let Y of $){let W=await this.getTagByName(Y);if(!W)W=await this.createTag(Y);J.push(W.id)}if(J.length>0)await this.addTagsToTask(w,J)}async searchTasksByKeywords(w,$={}){if(await this.initialize(),!w||w.length===0)return{tasks:[],total:0};let{limit:X=20,offset:J=0,excludeTaskId:Y,status:W,priority:q,type:G,depth:Q}=$,H=null;if(Q!==void 0&&Q>=0)H=await this.collectTaskIdsByDepth(Q);let B=new Map,D="SELECT * FROM task WHERE 1=1",z=[];if(Y)D+=" AND id != ?",z.push(Y);if(W)D+=" AND status = ?",z.push(W);if(q)D+=" AND priority = ?",z.push(q);if(G)D+=" AND type = ?",z.push(G);if(!$?.include_archived&&$?.status!=="archived")D+=" AND status != 'archived'";let A=Math.max(X*5,200);D+=" ORDER BY updated_at DESC LIMIT ?",z.push(A);let U=this.db.prepare(D).all(...z);for(let j of U){let N=this.rowToTask(j),g=new Set,E=0;if(typeof N.title==="string"&&N.title){let C=N.title.toLowerCase();for(let x of w)if(C.includes(x.toLowerCase()))E++,g.add(x)}if(N.tags&&Array.isArray(N.tags))for(let C of w){let x=C.toLowerCase();if(N.tags.some((i)=>i.toLowerCase().includes(x)))E+=2,g.add(C)}if(typeof N.description==="string"&&N.description){let C=N.description.toLowerCase();for(let x of w)if(C.includes(x.toLowerCase()))E++,g.add(x)}if(typeof N.goals_and_expected_deliverables==="string"&&N.goals_and_expected_deliverables){let C=N.goals_and_expected_deliverables.toLowerCase();for(let x of w)if(C.includes(x.toLowerCase()))E++,g.add(x)}if(g.size===w.length)B.set(N.id,{task:N,matchCount:E})}let V=this.db.prepare("SELECT DISTINCT task_id FROM task_operation WHERE 1=1").all();for(let j of V){let g=new Set;for(let i of w){let y=`%${i}%`;if(this.db.prepare(`
378
+ SELECT * FROM task_operation
379
+ WHERE task_id = ?
380
+ AND (milestone_title LIKE ? OR milestone_description LIKE ? OR process_description LIKE ?)
381
+ LIMIT 10
382
+ `).all(j.task_id,y,y,y).length>0)g.add(i)}if(g.size===0)continue;let E=this.db.prepare("SELECT * FROM task WHERE id = ?").get(j.task_id);if(!E)continue;let C=this.rowToTask(E);if(Y&&C.id===Y)continue;if(W&&C.status!==W)continue;if(q&&C.priority!==q)continue;if(G&&C.type!==G)continue;if(!$?.include_archived&&C.status==="archived")continue;let x=B.get(C.id);if(x)x.matchCount+=2;else{let i=new Set(g);if(typeof C.title==="string"&&C.title){let y=C.title.toLowerCase();for(let c of w)if(y.includes(c.toLowerCase()))i.add(c)}if(typeof C.description==="string"&&C.description){let y=C.description.toLowerCase();for(let c of w)if(y.includes(c.toLowerCase()))i.add(c)}if(typeof C.goals_and_expected_deliverables==="string"&&C.goals_and_expected_deliverables){let y=C.goals_and_expected_deliverables.toLowerCase();for(let c of w)if(y.includes(c.toLowerCase()))i.add(c)}if(C.tags&&Array.isArray(C.tags)){for(let y of w)if(C.tags.some((c)=>c.toLowerCase().includes(y.toLowerCase())))i.add(y)}if(i.size===w.length)B.set(C.id,{task:C,matchCount:2})}}let R=Array.from(B.values()).sort((j,N)=>N.matchCount-j.matchCount);if(H!==null)R=R.filter((j)=>H.has(j.task.id));let f=R.length;return{tasks:R.slice(J,J+X).map((j)=>j.task),total:f}}async collectTaskIdsByDepth(w){let $=new Set,J=this.db.prepare("SELECT id FROM task WHERE parent_task_id IS NULL").all().map((Y)=>Y.id);for(let Y of J)$.add(Y);if(w===0)return $;for(let Y=1;Y<=w;Y++){if(J.length===0)break;let W=J.map(()=>"?").join(",");J=this.db.prepare(`SELECT id FROM task WHERE parent_task_id IN (${W})`).all(...J).map((G)=>G.id);for(let G of J)$.add(G)}return $}async findSimilarTasksByKeywords(w,$={}){let X={...$,limit:$.limit??5};return(await this.searchTasksByKeywords(w,X)).tasks}async findSimilarTasks(w,$=5){await this.initialize();let X=await this.getTagsForTask(w);if(X.length===0)return[];let J=X.map((Q)=>Q.id),W=`
383
+ SELECT t.*, COUNT(r2.tag_id) as match_count
384
+ FROM task t
385
+ INNER JOIN task_tag_relation r ON t.id = r.task_id
386
+ INNER JOIN task_tag_relation r2 ON t.id = r2.task_id
387
+ WHERE r.tag_id IN (${J.map(()=>"?").join(", ")})
388
+ AND t.id != ?
389
+ GROUP BY t.id
390
+ ORDER BY match_count DESC, t.updated_at DESC
391
+ LIMIT ?
392
+ `;return this.db.prepare(W).all(...J,w,$).map((Q)=>this.rowToTask(Q))}async searchTasks(w,$=20){await this.initialize();let X=`
393
+ SELECT * FROM task
394
+ WHERE title LIKE ? OR description LIKE ?
395
+ ORDER BY updated_at DESC
396
+ LIMIT ?
397
+ `;return this.db.prepare(X).all(`%${w}%`,`%${w}%`,$).map((W)=>this.rowToTask(W))}async findTasksByContextValue(w,$=50){if(await this.initialize(),!w)return[];let X=`
398
+ SELECT * FROM task
399
+ WHERE context LIKE ?
400
+ ORDER BY updated_at DESC
401
+ LIMIT ?
402
+ `;return this.db.prepare(X).all(`%${w}%`,$).map((Y)=>this.rowToTask(Y))}rowToTag(w){return{id:w.id,name:w.name,createdAt:new Date(w.created_at).toISOString(),taskCount:w.task_count}}async syncTaskTagsJson(w){let X=(await this.getTagsForTask(w)).map((Y)=>Y.name);this.db.prepare("UPDATE task SET tags = ? WHERE id = ?").run(X.length>0?JSON.stringify(X):null,w),this.tasksCache.delete(w)}async close(){if(this.db)this.db.close(),this.db=null,this.initialized=!1;this.tasksCache.clear(),this.operationsCache.clear()}},m([u("task.rowToTask",{recordParams:!0,recordResult:!0,log:!0})],Dw.prototype,"rowToTask",null),m([u("task.searchTasksByKeywords",{recordParams:!0,recordResult:!0,log:!0})],Dw.prototype,"searchTasksByKeywords",null)});Bw();Bw();import{AsyncLocalStorage as j7}from"async_hooks";var y2=()=>{};function uw(){return B0.getStore()}function Q1(){return B0.getStore()||{}}function U0(){return B0.getStore()?.agentContext?.currentTaskId}function V4(_){return typeof _==="number"&&Number.isInteger(_)&&_>0?_:void 0}var A4,B0,E7,z0,a_=r(()=>{a(),z_(),y2(),A4=n("env:context:env-context"),B0=new j7,E7=T_(function(w,$){return V4(w?.metadata?.parentTaskId)??V4($?.parentTaskId)},"env-context.resolveEnvParentTaskId",{recordParams:!1,recordResult:!1,log:!1,resultFilter:(_)=>({parentTaskId:_??null})}),z0=T_(function(w){let $=U0(),X=B0.getStore();if(X){if(!X.agentContext)X.agentContext={};X.agentContext.currentTaskId=w}A4.info(`[setCurrentTaskId] taskId=${w??"undefined"} (was: ${$??"undefined"})`)},"env-context.setCurrentTaskId",{recordParams:!0,recordResult:!1,log:!0})});import{execSync as S7}from"child_process";var M4=M.object({title:M.string().describe("Task title"),description:M.string().optional().describe("Task description"),priority:M.enum(["low","medium","high"]).optional().describe("Task priority"),type:M.enum(["normal","cycle","longterm"]).optional().default("normal").describe("Task type. normal: \u5E38\u89C4\u4EFB\u52A1\uFF0C\u9700\u8981\u8DDF\u8E2A\u5B8C\u6210. cycle: \u5468\u671F\u4EFB\u52A1\uFF08\u5982\u6BCF\u5468\u53D1\u5468\u62A5\uFF09\uFF0C\u65E0\u9700 complete\uFF0C\u5B9A\u671F\u6267\u884C. longterm: \u957F\u671F\u4EFB\u52A1/\u613F\u666F\u76EE\u6807\uFF08\u5982\u63D0\u5347\u516C\u53F8\u5F71\u54CD\u529B\uFF09\uFF0C\u96BE\u4EE5\u4E00\u6B21\u6027\u5B8C\u6210\uFF0C\u6301\u7EED\u8DDF\u8FDB"),goals_and_expected_deliverables:M.string().optional().describe("Goals and expected deliverables"),due_date:M.string().optional().describe("Due date (ISO format)"),tags:M.array(M.string()).optional().describe("Task tags (for search, stored in task.tags JSON field)"),project_path:M.string().describe("Project root path for task positioning. Used to locate the project space for this task. Use 'unknown' if unknown."),parent_task_id:M.union([M.number(),M.null()]).optional().describe(`\u7236\u4EFB\u52A1 ID\uFF08\u53EF\u9009\uFF09\u3002\u4E0D\u4F20\u6216\u4F20 null \u65F6\uFF0C\u521B\u5EFA\u6839\u4EFB\u52A1\uFF08root task\uFF09\u3002
127
403
  `+`\u5982\u9700\u5C06\u4EFB\u52A1\u6302\u8F7D\u5230\u67D0\u4E2A\u7236\u4EFB\u52A1\u4E0B\uFF0C\u4F20\u5165\u5BF9\u5E94\u7236\u4EFB\u52A1 ID\u3002
128
404
  `+`**\u8C03\u7528\u524D\u5FC5\u987B\u5148\u8C03\u7528 task_tree(depth=2)** \u67E5\u770B\u73B0\u6709\u4EFB\u52A1\u6811\u7ED3\u6784\uFF0C\u907F\u514D\u91CD\u590D\u521B\u5EFA\u6839\u4EFB\u52A1\u3001\u907F\u514D\u5B64\u513F\u4EFB\u52A1\u3002
129
405
  `+`\u51B3\u7B56\u8DEF\u5F84\uFF08\u6309\u987A\u5E8F\u5339\u914D\uFF09\uFF1A
@@ -131,7 +407,7 @@ if it is not in the task store, it is not tracked.
131
407
  `+` B. \u5F52\u5C5E\u5230\u73B0\u6709\u4E3B\u9898\u805A\u7C7B\uFF08\u975E longterm \u6839\uFF0C\u4F46\u540C\u4E3B\u9898\uFF09\u2192 parent_task_id = \u8BE5\u6839 ID
132
408
  `+` C. \u65B0\u5EFA\u6839\u4EFB\u52A1 \u2192 \u7701\u7565 parent_task_id\uFF08\u8BA9\u6811\u6839 \u226410\uFF09
133
409
  `+`\u5982\u4F55\u627E\u5230 parent_task_id\uFF1A\u4F7F\u7528 task_tree(depth=2) \u83B7\u53D6\u7684\u6811\u5F62\u7ED3\u6784\uFF0C
134
- `+"\u6839\u636E\u8282\u70B9 id \u9009\u62E9\u5408\u9002\u7684\u7236\u4EFB\u52A1 ID\uFF08\u6765\u81EA tree \u8F93\u51FA\uFF0C**\u4E0D\u8981\u786C\u7F16\u7801**\u6570\u5B57\uFF09\u3002"),context:U.string().describe(`JSON string with time-space positioning information for task continuity. This field is crucial for Agent task handoff. Core fields: worktree_path (git worktree path), branch (current branch), type (feature/bug/refactor/chore). Example for coding: {"worktree_path": "/path/worktree", "branch": "feature/xyz", "type": "feature"}. Example for other: {"type": "general"}. If unknown, use '{}' or '{"type":"unknown"}'. IMPORTANT: Must be a valid JSON string!`)}),r1=U.object({task_id:U.number().describe("Task ID"),include_operations:U.boolean().optional().default(!1).describe("Include operation records")}),a1=U.object({status:U.enum(["todo","active","completed","paused","cancelled","archived"]).optional(),priority:U.enum(["low","medium","high"]).optional(),type:U.enum(["normal","cycle","longterm"]).optional().describe("Filter by task type"),limit:U.number().optional().default(20),offset:U.number().optional().default(0),depth:U.number().optional().describe("\u68C0\u7D22\u5C42\u7EA7\u6DF1\u5EA6\uFF1A0=\u53EA\u6839\u4EFB\u52A1\uFF08\u65E0\u7236\u4EFB\u52A1\uFF09\uFF0C1=\u6839+\u4E00\u5C42\u5B50\u4EFB\u52A1\uFF0C2=\u6839+\u4E8C\u5C42\u5B50\u4EFB\u52A1\uFF0C-1 \u6216\u5FFD\u7565=\u5168\u90E8"),include_archived:U.boolean().optional().default(!1).describe("\u662F\u5426\u5305\u542B\u5DF2\u5F52\u6863\u4EFB\u52A1\uFF08status=archived \u7684\u4EFB\u52A1\u9ED8\u8BA4\u88AB\u6392\u9664\uFF09")}),s1=U.object({keywords:U.array(U.string()).describe("\u5173\u952E\u8BCD\u5217\u8868\uFF08AND \u903B\u8F91\uFF0C\u5339\u914D title/description/goals/tags/operations\uFF09"),limit:U.number().optional().default(20).describe("\u8FD4\u56DE\u6570\u91CF"),offset:U.number().optional().default(0).describe("\u504F\u79FB\u91CF"),status:U.enum(["todo","active","completed","paused","cancelled","archived"]).optional().describe("\u6309\u72B6\u6001\u7B5B\u9009"),priority:U.enum(["low","medium","high"]).optional().describe("\u6309\u4F18\u5148\u7EA7\u7B5B\u9009"),type:U.enum(["normal","cycle","longterm"]).optional().describe("\u6309\u7C7B\u578B\u7B5B\u9009"),exclude_task_id:U.number().optional().describe("\u6392\u9664\u7684 task ID"),depth:U.number().optional().describe("\u68C0\u7D22\u5C42\u7EA7\u6DF1\u5EA6\uFF1A0=\u53EA\u6839\u4EFB\u52A1\uFF0C1=\u6839+\u4E00\u5C42\u5B50\u4EFB\u52A1\uFF0C2=\u6839+\u4E8C\u5C42\u5B50\u4EFB\u52A1\uFF0C-1 \u6216\u5FFD\u7565=\u5168\u90E8"),include_archived:U.boolean().optional().default(!1).describe("\u662F\u5426\u5305\u542B\u5DF2\u5F52\u6863\u4EFB\u52A1\uFF08status=archived \u7684\u4EFB\u52A1\u9ED8\u8BA4\u88AB\u6392\u9664\uFF09")}),t1=U.object({task_id:U.number().describe("Task ID"),title:U.string().optional(),description:U.string().optional(),status:U.enum(["todo","active","completed","paused","cancelled","archived"]).optional(),priority:U.enum(["low","medium","high"]).optional(),type:U.enum(["normal","cycle","longterm"]).optional().describe("Task type"),progress:U.number().min(0).max(100).optional(),current_status:U.string().optional(),goals_and_expected_deliverables:U.string().optional(),due_date:U.string().optional(),tags:U.array(U.string()).optional(),project_path:U.string().optional().describe("Project path, identifies which project this task belongs to"),context:U.string().optional().describe("Task context information for storing additional context"),parent_task_id:U.union([U.number(),U.null()]).optional().describe("Parent task ID (set to null to make it a root task)")}),x4=U.object({task_id:U.number().describe("Task ID")}),e1=U.object({task_id:U.number().describe("Task ID"),deliverable_storage_path:U.string().optional().describe("\u4EA4\u4ED8\u7269\u7684\u5BFB\u5740\u5730\u5740\uFF08\u8DEF\u5F84 / URL / \u5206\u652F\u540D\u7B49\uFF09\u3002"+"\u8C03\u7528\u672C\u5DE5\u5177\u524D\uFF0C\u8BF7\u5148\u8BFB\u53D6\u4EFB\u52A1\u7684 goal\uFF08description\uFF09\u548C delivery\uFF08goals_and_expected_deliverables\uFF09\u680F\u4F4D\uFF0C"+"\u5EFA\u8BAE\u9A8C\u8BC1\u76EE\u6807\u548C\u4EA4\u4ED8\u7269\u662F\u5426\u7B26\u5408\u9884\u671F\uFF0C\u7136\u540E\u5C06\u5B9E\u9645\u4EA4\u4ED8\u7269\u7684\u5BFB\u5740\u5730\u5740\u586B\u5165\u6B64\u53C2\u6570\u3002")}),m4=U.object({task_ids:U.array(U.number()).describe("\u8981\u5F52\u6863\u7684\u4EFB\u52A1 ID \u5217\u8868"),reason:U.string().optional().describe("\u5F52\u6863\u539F\u56E0\uFF08\u53EF\u9009\uFF0C\u4F1A\u5199\u5165\u6BCF\u4E2A\u4EFB\u52A1\u7684 operation \u8BB0\u5F55\uFF09")}),l4=U.object({task_ids:U.array(U.number()).describe("\u8981\u5220\u9664\u7684\u4EFB\u52A1 ID \u5217\u8868")}),$2=U.object({depth:U.number().optional().default(2).describe("\u6811\u7684\u5C55\u5F00\u6DF1\u5EA6\u3002\u9ED8\u8BA4 2 (\u6839 + \u4E00\u5C42\u5B50\u4EFB\u52A1 + \u4E8C\u5C42\u5B59\u4EFB\u52A1)\u3002"+"0 = \u53EA\u8FD4\u56DE\u6839\u4EFB\u52A1\uFF0C\u4E0D\u5C55\u5F00\u4EFB\u4F55\u5B50\u8282\u70B9\u3002"+"-1 \u6216\u8D1F\u6570 = \u65E0\u9650\u5C42\u7EA7\uFF08\u5168\u90E8\u5C55\u5F00\uFF09\u3002"),parent_task_id:U.number().optional().describe("\u53EA\u770B\u6307\u5B9A\u7236\u4EFB\u52A1\u7684\u5B50\u6811\u3002\u4E0D\u4F20\u5219\u4ECE\u6240\u6709\u6839\u4EFB\u52A1\uFF08forest\uFF09\u5F00\u59CB\u3002"),status:U.enum(["todo","active","completed","paused","cancelled","archived"]).optional().describe("\u6309\u72B6\u6001\u8FC7\u6EE4\uFF08\u4E0E task_list \u4E00\u81F4\uFF09\u3002"),priority:U.enum(["low","medium","high"]).optional().describe("\u6309\u4F18\u5148\u7EA7\u8FC7\u6EE4\u3002"),type:U.enum(["normal","cycle","longterm"]).optional().describe("\u6309\u4EFB\u52A1\u7C7B\u578B\u8FC7\u6EE4\u3002"),include_archived:U.boolean().optional().default(!1).describe("\u662F\u5426\u5305\u542B\u5DF2\u5F52\u6863\u4EFB\u52A1\uFF08\u9ED8\u8BA4 false\uFF0C\u4E0E task_list \u4E00\u81F4\uFF09\u3002")});Y0();W$();W$();var t6=Q$("task-child-context"),e6=["commit","token","secret","password","api_key"];function u0($){if($===null||$===void 0)return $;if(Array.isArray($))return $.map(u0);if(typeof $!=="object")return $;let J={};for(let[Q,W]of Object.entries($)){let Y=Q.toLowerCase();if(e6.some((B)=>Y.includes(B)))continue;J[Q]=u0(W)}return J}function $8($){let{parent:J,overrides:Q={}}=$,W=Q.contextInherit!==!1,Y=Q.inheritTags===!0,B=Q.projectPath??J.projectPath??"unknown",H={};if(J.contextJson&&J.contextJson.trim().length>0)try{let b=JSON.parse(J.contextJson);if(b&&typeof b==="object"&&!Array.isArray(b))H=b}catch(b){t6.debug(`[task-child-context] parent #${J.taskId} context is malformed JSON; continuing with empty inherited context (${b instanceof Error?b.message:String(b)})`),H={}}let X={};if(W){if(H.worktree_path!==void 0&&Q.worktreePath===void 0)X.worktree_path=H.worktree_path;if(H.branch!==void 0&&Q.branch===void 0)X.branch=H.branch;if(H.parent_branch!==void 0)X.parent_branch=H.parent_branch;if(H.type!==void 0)X.type=H.type;if(H.prior_context&&typeof H.prior_context==="object"){let j=H.prior_context,z={};for(let[O,P]of Object.entries(j)){if(O.toLowerCase()==="commit")continue;z[O]=P}if(Object.keys(z).length>0)X.prior_context=z}let b=new Set(["worktree_path","branch","parent_branch","type","prior_context","created_at"]);for(let[j,z]of Object.entries(H)){if(b.has(j))continue;X[j]=z}}if(Q.worktreePath!==void 0)X.worktree_path=Q.worktreePath;if(Q.branch!==void 0)X.branch=Q.branch;let q=Q.createdAt??new Date().toISOString();X.created_at=q,X.child_of=J.taskId;let _=u0(X);return{project_path:B,context:JSON.stringify(_),inheritedTags:Y?J.tags??[]:[]}}var J2=Q$("task:tools:create");function J8(){try{let $=s6("git rev-parse --show-toplevel",{stdio:["ignore","pipe","ignore"]}).toString().trim(),J=process.cwd();if(!$)return null;if(J!==$)return J;if(J.includes(".worktrees/")||J.includes(".worktree/"))return J;return null}catch{return null}}function c0($){return{name:"task_create",description:`
410
+ `+"\u6839\u636E\u8282\u70B9 id \u9009\u62E9\u5408\u9002\u7684\u7236\u4EFB\u52A1 ID\uFF08\u6765\u81EA tree \u8F93\u51FA\uFF0C**\u4E0D\u8981\u786C\u7F16\u7801**\u6570\u5B57\uFF09\u3002"),context:M.string().describe(`JSON string with time-space positioning information for task continuity. This field is crucial for Agent task handoff. Core fields: worktree_path (git worktree path), branch (current branch), type (feature/bug/refactor/chore). Example for coding: {"worktree_path": "/path/worktree", "branch": "feature/xyz", "type": "feature"}. Example for other: {"type": "general"}. If unknown, use '{}' or '{"type":"unknown"}'. IMPORTANT: Must be a valid JSON string!`)}),R4=M.object({task_id:M.number().describe("Task ID"),include_operations:M.boolean().optional().default(!1).describe("Include operation records")}),O4=M.object({status:M.enum(["todo","active","completed","paused","cancelled","archived"]).optional(),priority:M.enum(["low","medium","high"]).optional(),type:M.enum(["normal","cycle","longterm"]).optional().describe("Filter by task type"),limit:M.number().optional().default(20),offset:M.number().optional().default(0),depth:M.number().optional().describe("\u68C0\u7D22\u5C42\u7EA7\u6DF1\u5EA6\uFF1A0=\u53EA\u6839\u4EFB\u52A1\uFF08\u65E0\u7236\u4EFB\u52A1\uFF09\uFF0C1=\u6839+\u4E00\u5C42\u5B50\u4EFB\u52A1\uFF0C2=\u6839+\u4E8C\u5C42\u5B50\u4EFB\u52A1\uFF0C-1 \u6216\u5FFD\u7565=\u5168\u90E8"),include_archived:M.boolean().optional().default(!1).describe("\u662F\u5426\u5305\u542B\u5DF2\u5F52\u6863\u4EFB\u52A1\uFF08status=archived \u7684\u4EFB\u52A1\u9ED8\u8BA4\u88AB\u6392\u9664\uFF09")}),F4=M.object({keywords:M.array(M.string()).describe("\u5173\u952E\u8BCD\u5217\u8868\uFF08AND \u903B\u8F91\uFF0C\u5339\u914D title/description/goals/tags/operations\uFF09"),limit:M.number().optional().default(20).describe("\u8FD4\u56DE\u6570\u91CF"),offset:M.number().optional().default(0).describe("\u504F\u79FB\u91CF"),status:M.enum(["todo","active","completed","paused","cancelled","archived"]).optional().describe("\u6309\u72B6\u6001\u7B5B\u9009"),priority:M.enum(["low","medium","high"]).optional().describe("\u6309\u4F18\u5148\u7EA7\u7B5B\u9009"),type:M.enum(["normal","cycle","longterm"]).optional().describe("\u6309\u7C7B\u578B\u7B5B\u9009"),exclude_task_id:M.number().optional().describe("\u6392\u9664\u7684 task ID"),depth:M.number().optional().describe("\u68C0\u7D22\u5C42\u7EA7\u6DF1\u5EA6\uFF1A0=\u53EA\u6839\u4EFB\u52A1\uFF0C1=\u6839+\u4E00\u5C42\u5B50\u4EFB\u52A1\uFF0C2=\u6839+\u4E8C\u5C42\u5B50\u4EFB\u52A1\uFF0C-1 \u6216\u5FFD\u7565=\u5168\u90E8"),include_archived:M.boolean().optional().default(!1).describe("\u662F\u5426\u5305\u542B\u5DF2\u5F52\u6863\u4EFB\u52A1\uFF08status=archived \u7684\u4EFB\u52A1\u9ED8\u8BA4\u88AB\u6392\u9664\uFF09")}),f4=M.object({task_id:M.number().describe("Task ID"),title:M.string().optional(),description:M.string().optional(),status:M.enum(["todo","active","completed","paused","cancelled","archived"]).optional(),priority:M.enum(["low","medium","high"]).optional(),type:M.enum(["normal","cycle","longterm"]).optional().describe("Task type"),progress:M.number().min(0).max(100).optional(),current_status:M.string().optional(),goals_and_expected_deliverables:M.string().optional(),due_date:M.string().optional(),tags:M.array(M.string()).optional(),project_path:M.string().optional().describe("Project path, identifies which project this task belongs to"),context:M.string().optional().describe("Task context information for storing additional context"),parent_task_id:M.union([M.number(),M.null()]).optional().describe("Parent task ID (set to null to make it a root task)")}),L4=M.object({task_id:M.number().describe("Task ID")}),K4=M.object({task_id:M.number().describe("Task ID"),deliverable_storage_path:M.string().optional().describe("\u4EA4\u4ED8\u7269\u7684\u5BFB\u5740\u5730\u5740\uFF08\u8DEF\u5F84 / URL / \u5206\u652F\u540D\u7B49\uFF09\u3002"+"\u8C03\u7528\u672C\u5DE5\u5177\u524D\uFF0C\u8BF7\u5148\u8BFB\u53D6\u4EFB\u52A1\u7684 goal\uFF08description\uFF09\u548C delivery\uFF08goals_and_expected_deliverables\uFF09\u680F\u4F4D\uFF0C"+"\u5EFA\u8BAE\u9A8C\u8BC1\u76EE\u6807\u548C\u4EA4\u4ED8\u7269\u662F\u5426\u7B26\u5408\u9884\u671F\uFF0C\u7136\u540E\u5C06\u5B9E\u9645\u4EA4\u4ED8\u7269\u7684\u5BFB\u5740\u5730\u5740\u586B\u5165\u6B64\u53C2\u6570\u3002")}),N4=M.object({task_ids:M.array(M.number()).describe("\u8981\u5F52\u6863\u7684\u4EFB\u52A1 ID \u5217\u8868"),reason:M.string().optional().describe("\u5F52\u6863\u539F\u56E0\uFF08\u53EF\u9009\uFF0C\u4F1A\u5199\u5165\u6BCF\u4E2A\u4EFB\u52A1\u7684 operation \u8BB0\u5F55\uFF09")}),b4=M.object({task_ids:M.array(M.number()).describe("\u8981\u5220\u9664\u7684\u4EFB\u52A1 ID \u5217\u8868")}),j4=M.object({depth:M.number().optional().default(2).describe("\u6811\u7684\u5C55\u5F00\u6DF1\u5EA6\u3002\u9ED8\u8BA4 2 (\u6839 + \u4E00\u5C42\u5B50\u4EFB\u52A1 + \u4E8C\u5C42\u5B59\u4EFB\u52A1)\u3002"+"0 = \u53EA\u8FD4\u56DE\u6839\u4EFB\u52A1\uFF0C\u4E0D\u5C55\u5F00\u4EFB\u4F55\u5B50\u8282\u70B9\u3002"+"-1 \u6216\u8D1F\u6570 = \u65E0\u9650\u5C42\u7EA7\uFF08\u5168\u90E8\u5C55\u5F00\uFF09\u3002"),parent_task_id:M.number().optional().describe("\u53EA\u770B\u6307\u5B9A\u7236\u4EFB\u52A1\u7684\u5B50\u6811\u3002\u4E0D\u4F20\u5219\u4ECE\u6240\u6709\u6839\u4EFB\u52A1\uFF08forest\uFF09\u5F00\u59CB\u3002"),status:M.enum(["todo","active","completed","paused","cancelled","archived"]).optional().describe("\u6309\u72B6\u6001\u8FC7\u6EE4\uFF08\u4E0E task_list \u4E00\u81F4\uFF09\u3002"),priority:M.enum(["low","medium","high"]).optional().describe("\u6309\u4F18\u5148\u7EA7\u8FC7\u6EE4\u3002"),type:M.enum(["normal","cycle","longterm"]).optional().describe("\u6309\u4EFB\u52A1\u7C7B\u578B\u8FC7\u6EE4\u3002"),include_archived:M.boolean().optional().default(!1).describe("\u662F\u5426\u5305\u542B\u5DF2\u5F52\u6863\u4EFB\u52A1\uFF08\u9ED8\u8BA4 false\uFF0C\u4E0E task_list \u4E00\u81F4\uFF09\u3002")});a_();a();a();var P7=n("task-child-context"),Z7=["commit","token","secret","password","api_key"];function v2(_){if(_===null||_===void 0)return _;if(Array.isArray(_))return _.map(v2);if(typeof _!=="object")return _;let w={};for(let[$,X]of Object.entries(_)){let J=$.toLowerCase();if(Z7.some((Y)=>J.includes(Y)))continue;w[$]=v2(X)}return w}function C7(_){let{parent:w,overrides:$={}}=_,X=$.contextInherit!==!1,J=$.inheritTags===!0,Y=$.projectPath??w.projectPath??"unknown",W={};if(w.contextJson&&w.contextJson.trim().length>0)try{let H=JSON.parse(w.contextJson);if(H&&typeof H==="object"&&!Array.isArray(H))W=H}catch(H){P7.debug(`[task-child-context] parent #${w.taskId} context is malformed JSON; continuing with empty inherited context (${H instanceof Error?H.message:String(H)})`),W={}}let q={};if(X){if(W.worktree_path!==void 0&&$.worktreePath===void 0)q.worktree_path=W.worktree_path;if(W.branch!==void 0&&$.branch===void 0)q.branch=W.branch;if(W.parent_branch!==void 0)q.parent_branch=W.parent_branch;if(W.type!==void 0)q.type=W.type;if(W.prior_context&&typeof W.prior_context==="object"){let B=W.prior_context,D={};for(let[z,A]of Object.entries(B)){if(z.toLowerCase()==="commit")continue;D[z]=A}if(Object.keys(D).length>0)q.prior_context=D}let H=new Set(["worktree_path","branch","parent_branch","type","prior_context","created_at"]);for(let[B,D]of Object.entries(W)){if(H.has(B))continue;q[B]=D}}if($.worktreePath!==void 0)q.worktree_path=$.worktreePath;if($.branch!==void 0)q.branch=$.branch;let G=$.createdAt??new Date().toISOString();q.created_at=G,q.child_of=w.taskId;let Q=v2(q);return{project_path:Y,context:JSON.stringify(Q),inheritedTags:J?w.tags??[]:[]}}var E4=n("task:tools:create");function T7(){try{let _=S7("git rev-parse --show-toplevel",{stdio:["ignore","pipe","ignore"]}).toString().trim(),w=process.cwd();if(!_)return null;if(w!==_)return w;if(w.includes(".worktrees/")||w.includes(".worktree/"))return w;return null}catch{return null}}function V0(_){return{name:"task_create",description:`
135
411
  Create a new task for tracking work.
136
412
 
137
413
  ## \u26A0\uFE0F CALL task_tree(depth=1) BEFORE THIS TOOL
@@ -271,12 +547,20 @@ if it is not in the task store, it is not tracked.
271
547
  env-injected value is 0 / negative / non-integer, it's treated as
272
548
  missing \u2014 only positive integers are honored.
273
549
 
274
- `,parameters:o1,execute:async(J,Q)=>{let W=o1.parse(J),Y=Q.session_id||"unknown",B=J8(),H=W.context,X=g1().parentTaskId,q=W.parent_task_id!==void 0&&W.parent_task_id!==null?W.parent_task_id:X!==void 0&&X!==null&&Number.isInteger(X)&&X>0?X:void 0,_=W.project_path&&W.project_path.trim()!==""?W.project_path:void 0,b=W.tags,j;if(q!==void 0)try{let z=await $.getTask(q);if(z){let O=$8({parent:{taskId:z.id,projectPath:z.project_path,contextJson:z.context??"",tags:z.tags},overrides:{projectPath:_,branch:void 0,worktreePath:void 0,inheritTags:W.tags===void 0,contextInherit:!0}});if(_===void 0)_=O.project_path;if(W.tags===void 0)b=O.inheritedTags;j=O.context}}catch(z){J2.debug(`[task_create] failed to pre-load parent #${q} for context inheritance: ${z instanceof Error?z.message:String(z)}`)}try{let z=W.context?JSON.parse(W.context):{},O=typeof z==="object"&&z!==null&&!Array.isArray(z)?z:{};if(j)try{let P=JSON.parse(j);if(P&&typeof P==="object"&&!Array.isArray(P)){for(let[C,k]of Object.entries(P))if(O[C]===void 0)O[C]=k}}catch{}if(!O.created_at)O.created_at=new Date().toISOString();if(!O.worktree_path&&B)O.worktree_path=B;H=JSON.stringify(O)}catch{H=W.context}try{let z=await $.createTask({parent_task_id:q,title:W.title,description:W.description,priority:W.priority,type:W.type||"normal",goals_and_expected_deliverables:W.goals_and_expected_deliverables,due_date:W.due_date,tags:b,sessionId:Y,project_path:_??W.project_path,context:H});return n$(z.id),J2.info(`[createTask] Trace: Task #${z.id} created, currentTaskId=${z.id} set in EnvContext`),{success:!0,output:`Task created successfully: #${z.id} - ${z.title}`,metadata:{execution_time_ms:0,task_id:z.id,status:z.status,createdAt:z.createdAt}}}catch(z){return{success:!1,output:"",error:z instanceof Error?z.message:String(z),metadata:{execution_time_ms:0}}}}}}function n0($){return{name:"task_get",description:"Get task details by ID. Optionally include operation records.",parameters:r1,execute:async(J,Q)=>{let W=r1.parse(J);try{if(W.include_operations){let Y=await $.getTaskWithOperations(W.task_id);if(!Y)return{success:!1,output:"",error:`Task not found: ${W.task_id}`,metadata:{execution_time_ms:0}};return{success:!0,output:JSON.stringify(Y,null,2),metadata:{execution_time_ms:0}}}else{let Y=await $.getTask(W.task_id);if(!Y)return{success:!1,output:"",error:`Task not found: ${W.task_id}`,metadata:{execution_time_ms:0}};return{success:!0,output:JSON.stringify(Y,null,2),metadata:{execution_time_ms:0}}}}catch(Y){return{success:!1,output:"",error:Y instanceof Error?Y.message:String(Y),metadata:{execution_time_ms:0}}}}}}function i0($){return{name:"task_list",description:"List tasks with optional filters for status, priority, type, parent_task_id, and depth (hierarchy level). "+`depth: 0=\u53EA\u6839\u4EFB\u52A1\uFF08\u65E0\u7236\u4EFB\u52A1\uFF09\uFF0C1=\u6839+\u4E00\u5C42\u5B50\u4EFB\u52A1\uFF0C2=\u6839+\u4E8C\u5C42\u5B50\u4EFB\u52A1\uFF0C-1 \u6216\u5FFD\u7565=\u5168\u90E8\u3002
275
- `+"Returns { total, count, truncated, limit, offset, depth, tasks } where:\n - total: count of all matching tasks BEFORE pagination\n - count: count of tasks in the returned `tasks` array (after pagination)\n - truncated: true when total > count (data was truncated by pagination)\nNote: `total` is the FIRST field in the response so it survives tail-truncation by ToolComponent.truncateOutput.",parameters:a1,execute:async(J,Q)=>{let W=a1.parse(J);try{let Y=await $.listTasks({status:W.status,priority:W.priority,type:W.type,limit:W.limit,offset:W.offset,depth:W.depth,include_archived:W.include_archived});return{success:!0,output:JSON.stringify({total:Y.total,count:Y.tasks.length,truncated:Y.total>Y.tasks.length,limit:W.limit,offset:W.offset,depth:W.depth,tasks:Y.tasks}),metadata:{execution_time_ms:0}}}catch(Y){return{success:!1,output:"",error:Y instanceof Error?Y.message:String(Y),metadata:{execution_time_ms:0}}}}}}function d0($){return{name:"task_search",description:"Search tasks by keywords across title, description, goals, tags, and operation records. Use this when you need to find tasks related to a "+"topic, feature, bug, or area of work \u2014 even when the keyword is only "+`in description / goals / tags / past operation logs.
550
+ `,parameters:M4,execute:async(w,$)=>{let X=M4.parse(w),J=$.session_id||"unknown",Y=T7(),W=X.context,q=Q1().parentTaskId,G=X.parent_task_id!==void 0&&X.parent_task_id!==null?X.parent_task_id:q!==void 0&&q!==null&&Number.isInteger(q)&&q>0?q:void 0,Q=X.project_path&&X.project_path.trim()!==""?X.project_path:void 0,H=X.tags,B;if(G!==void 0)try{let D=await _.getTask(G);if(D){let z=C7({parent:{taskId:D.id,projectPath:D.project_path,contextJson:D.context??"",tags:D.tags},overrides:{projectPath:Q,branch:void 0,worktreePath:void 0,inheritTags:X.tags===void 0,contextInherit:!0}});if(Q===void 0)Q=z.project_path;if(X.tags===void 0)H=z.inheritedTags;B=z.context}}catch(D){E4.debug(`[task_create] failed to pre-load parent #${G} for context inheritance: ${D instanceof Error?D.message:String(D)}`)}try{let D=X.context?JSON.parse(X.context):{},z=typeof D==="object"&&D!==null&&!Array.isArray(D)?D:{};if(B)try{let A=JSON.parse(B);if(A&&typeof A==="object"&&!Array.isArray(A)){for(let[U,V]of Object.entries(A))if(z[U]===void 0)z[U]=V}}catch{}if(!z.created_at)z.created_at=new Date().toISOString();if(!z.worktree_path&&Y)z.worktree_path=Y;W=JSON.stringify(z)}catch{W=X.context}try{let D=await _.createTask({parent_task_id:G,title:X.title,description:X.description,priority:X.priority,type:X.type||"normal",goals_and_expected_deliverables:X.goals_and_expected_deliverables,due_date:X.due_date,tags:H,sessionId:J,project_path:Q??X.project_path,context:W});return z0(D.id),E4.info(`[createTask] Trace: Task #${D.id} created, currentTaskId=${D.id} set in EnvContext`),{success:!0,output:`Task created successfully: #${D.id} - ${D.title}`,metadata:{execution_time_ms:0,task_id:D.id,status:D.status,createdAt:D.createdAt}}}catch(D){return{success:!1,output:"",error:D instanceof Error?D.message:String(D),metadata:{execution_time_ms:0}}}}}}function A0(_){return{name:"task_get",description:"Get task details by ID. Optionally include operation records.",parameters:R4,execute:async(w,$)=>{let X=R4.parse(w);try{if(X.include_operations){let J=await _.getTaskWithOperations(X.task_id);if(!J)return{success:!1,output:"",error:`Task not found: ${X.task_id}`,metadata:{execution_time_ms:0}};return{success:!0,output:JSON.stringify(J,null,2),metadata:{execution_time_ms:0}}}else{let J=await _.getTask(X.task_id);if(!J)return{success:!1,output:"",error:`Task not found: ${X.task_id}`,metadata:{execution_time_ms:0}};return{success:!0,output:JSON.stringify(J,null,2),metadata:{execution_time_ms:0}}}}catch(J){return{success:!1,output:"",error:J instanceof Error?J.message:String(J),metadata:{execution_time_ms:0}}}}}}function M0(_){return{name:"task_list",description:"List tasks with optional filters for status, priority, type, parent_task_id, and depth (hierarchy level). "+`depth: 0=\u53EA\u6839\u4EFB\u52A1\uFF08\u65E0\u7236\u4EFB\u52A1\uFF09\uFF0C1=\u6839+\u4E00\u5C42\u5B50\u4EFB\u52A1\uFF0C2=\u6839+\u4E8C\u5C42\u5B50\u4EFB\u52A1\uFF0C-1 \u6216\u5FFD\u7565=\u5168\u90E8\u3002
551
+ `+"Returns { total, count, truncated, limit, offset, depth, tasks } where:\n - total: count of all matching tasks BEFORE pagination\n - count: count of tasks in the returned `tasks` array (after pagination)\n - truncated: true when total > count (data was truncated by pagination)\nNote: `total` is the FIRST field in the response so it survives tail-truncation by ToolComponent.truncateOutput.",parameters:O4,execute:async(w,$)=>{let X=O4.parse(w);try{let J=await _.listTasks({status:X.status,priority:X.priority,type:X.type,limit:X.limit,offset:X.offset,depth:X.depth,include_archived:X.include_archived});return{success:!0,output:JSON.stringify({total:J.total,count:J.tasks.length,truncated:J.total>J.tasks.length,limit:X.limit,offset:X.offset,depth:X.depth,tasks:J.tasks}),metadata:{execution_time_ms:0}}}catch(J){return{success:!1,output:"",error:J instanceof Error?J.message:String(J),metadata:{execution_time_ms:0}}}}}}function R0(_){return{name:"task_search",description:"Search tasks by keywords across title, description, goals, tags, and operation records. Use this when you need to find tasks related to a "+"topic, feature, bug, or area of work \u2014 even when the keyword is only "+`in description / goals / tags / past operation logs.
276
552
 
277
553
  Returns { tasks, total, limit, offset } so you can paginate large result sets.
278
554
 
279
- If \`keywords\` is empty, returns no results.`,parameters:s1,execute:async(J,Q)=>{let W=s1.parse(J);try{let Y=await $.searchTasksByKeywords(W.keywords,{limit:W.limit,offset:W.offset,excludeTaskId:W.exclude_task_id,status:W.status,priority:W.priority,type:W.type,depth:W.depth,include_archived:W.include_archived});return{success:!0,output:JSON.stringify({tasks:Y.tasks,total:Y.total,limit:W.limit,offset:W.offset}),metadata:{execution_time_ms:0}}}catch(Y){return{success:!1,output:"",error:Y instanceof Error?Y.message:String(Y),metadata:{execution_time_ms:0}}}}}}Y0();W$();var Q8=Q$("tool:update-task");async function W8($,J,Q){let W=new Set,Y=Q;while(Y!==null&&Y!==void 0){if(Y===J)return!0;if(W.has(Y))break;W.add(Y);let B=await $.getTask(Y);if(!B)break;Y=B.parent_task_id}return!1}function p0($){return{name:"task_update",description:"Update an existing task's properties. Status and progress changes will create operation records.",parameters:t1,execute:async(J,Q)=>{let W=t1.parse(J),Y=Q.session_id||"unknown";try{if(W.parent_task_id!==void 0&&W.parent_task_id!==null){if(await W8($,W.task_id,W.parent_task_id))return{success:!1,output:"",error:`Circular reference detected: setting parent_task_id to ${W.parent_task_id} for task #${W.task_id} would create a cycle`,metadata:{execution_time_ms:0}}}let B=await $.updateTask(W.task_id,{title:W.title,description:W.description,status:W.status,priority:W.priority,type:W.type,progress:W.progress,current_status:W.current_status,goals_and_expected_deliverables:W.goals_and_expected_deliverables,due_date:W.due_date,tags:W.tags,project_path:W.project_path,context:W.context,parent_task_id:W.parent_task_id});if(!B)return{success:!1,output:"",error:`Task not found: ${W.task_id}`,metadata:{execution_time_ms:0}};if(W.status||W.progress!==void 0||W.current_status)await $.createOperation({taskId:W.task_id,sessionId:Y,actionType:"progress",actionTitle:W.current_status||`Updated: ${W.status||`${W.progress}%`}`,actionDescription:JSON.stringify({status:W.status,progress:W.progress,current_status:W.current_status})});return n$(B.id),Q8.info(`[updateTask] Trace: Task #${B.id} updated, currentTaskId=${B.id} set in EnvContext`),{success:!0,output:`Task updated: #${B.id} - ${B.title}`,metadata:{execution_time_ms:0,task:B}}}catch(B){return{success:!1,output:"",error:B instanceof Error?B.message:String(B),metadata:{execution_time_ms:0}}}}}}Y0();W$();var Y8=Q$("task:tools:complete"),B8=`
555
+ If \`keywords\` is empty, returns no results.`,parameters:F4,execute:async(w,$)=>{let X=F4.parse(w);try{let J=await _.searchTasksByKeywords(X.keywords,{limit:X.limit,offset:X.offset,excludeTaskId:X.exclude_task_id,status:X.status,priority:X.priority,type:X.type,depth:X.depth,include_archived:X.include_archived});return{success:!0,output:JSON.stringify({tasks:J.tasks,total:J.total,limit:X.limit,offset:X.offset}),metadata:{execution_time_ms:0}}}catch(J){return{success:!1,output:"",error:J instanceof Error?J.message:String(J),metadata:{execution_time_ms:0}}}}}}function x2(_){return{name:"task_batch_archive",description:`Batch archive multiple tasks at once. Sets all specified tasks to 'archived' status and creates operation records for each.
556
+
557
+ Use this when you need to quickly archive a group of completed, obsolete, or historical tasks (e.g., during task organization).
558
+
559
+ Returns summary of how many tasks were successfully archived and any errors encountered.`,parameters:N4,execute:async(w,$)=>{let X=N4.parse(w),J=X.task_ids,Y=$.session_id||"batch-archive";if(!J||J.length===0)return{success:!0,output:JSON.stringify({archived_count:0,errors:[]}),metadata:{execution_time_ms:0}};let W=[],q=0;for(let Q of J)try{if(await _.updateTask(Q,{status:"archived"}))await _.createOperation({taskId:Q,sessionId:Y,actionType:"completed",actionTitle:"Batch archived",actionDescription:X.reason||"\u6279\u91CF\u5F52\u6863\uFF08\u4EFB\u52A1\u6574\u7406\uFF09"}),q++,W.push({id:Q,success:!0});else W.push({id:Q,success:!1,error:"Task not found"})}catch(H){W.push({id:Q,success:!1,error:H instanceof Error?H.message:String(H)})}return{success:!W.some((Q)=>!Q.success),output:JSON.stringify({archived_count:q,total:J.length,errors:W.filter((Q)=>!Q.success).map((Q)=>({id:Q.id,error:Q.error})),results:W},null,2),metadata:{execution_time_ms:0}}}}}function m2(_){return{name:"task_batch_delete",description:`Batch delete multiple tasks at once. Deletes each task and all its operation records.
560
+
561
+ Use this when you need to quickly remove a group of test, temporary, or otherwise worthless tasks (e.g., during task organization).
562
+
563
+ Returns summary of how many tasks were successfully deleted and any errors encountered.`,parameters:b4,execute:async(w,$)=>{let J=b4.parse(w).task_ids;if(!J||J.length===0)return{success:!0,output:JSON.stringify({deleted_count:0,errors:[]}),metadata:{execution_time_ms:0}};let Y=[],W=0;for(let G of J)try{if(await _.deleteTask(G))W++,Y.push({id:G,success:!0});else Y.push({id:G,success:!1,error:"Task not found"})}catch(Q){Y.push({id:G,success:!1,error:Q instanceof Error?Q.message:String(Q)})}return{success:!Y.some((G)=>!G.success),output:JSON.stringify({deleted_count:W,total:J.length,errors:Y.filter((G)=>!G.success).map((G)=>({id:G.id,error:G.error})),results:Y},null,2),metadata:{execution_time_ms:0}}}}}a_();a();var I7=n("tool:update-task");async function g7(_,w,$){let X=new Set,J=$;while(J!==null&&J!==void 0){if(J===w)return!0;if(X.has(J))break;X.add(J);let Y=await _.getTask(J);if(!Y)break;J=Y.parent_task_id}return!1}function O0(_){return{name:"task_update",description:"Update an existing task's properties. Status and progress changes will create operation records.",parameters:f4,execute:async(w,$)=>{let X=f4.parse(w),J=$.session_id||"unknown";try{if(X.parent_task_id!==void 0&&X.parent_task_id!==null){if(await g7(_,X.task_id,X.parent_task_id))return{success:!1,output:"",error:`Circular reference detected: setting parent_task_id to ${X.parent_task_id} for task #${X.task_id} would create a cycle`,metadata:{execution_time_ms:0}}}let Y=await _.updateTask(X.task_id,{title:X.title,description:X.description,status:X.status,priority:X.priority,type:X.type,progress:X.progress,current_status:X.current_status,goals_and_expected_deliverables:X.goals_and_expected_deliverables,due_date:X.due_date,tags:X.tags,project_path:X.project_path,context:X.context,parent_task_id:X.parent_task_id});if(!Y)return{success:!1,output:"",error:`Task not found: ${X.task_id}`,metadata:{execution_time_ms:0}};if(X.status||X.progress!==void 0||X.current_status)await _.createOperation({taskId:X.task_id,sessionId:J,actionType:"progress",actionTitle:X.current_status||`Updated: ${X.status||`${X.progress}%`}`,actionDescription:JSON.stringify({status:X.status,progress:X.progress,current_status:X.current_status})});return z0(Y.id),I7.info(`[updateTask] Trace: Task #${Y.id} updated, currentTaskId=${Y.id} set in EnvContext`),{success:!0,output:`Task updated: #${Y.id} - ${Y.title}`,metadata:{execution_time_ms:0,task:Y}}}catch(Y){return{success:!1,output:"",error:Y instanceof Error?Y.message:String(Y),metadata:{execution_time_ms:0}}}}}}function u2(_){return{name:"task_delete",description:"Delete a task and all its operation records.",parameters:L4,execute:async(w,$)=>{let X=L4.parse(w);try{if(!await _.deleteTask(X.task_id))return{success:!1,output:"",error:`Task not found: ${X.task_id}`,metadata:{execution_time_ms:0}};return{success:!0,output:`Task deleted: #${X.task_id}`,metadata:{execution_time_ms:0}}}catch(J){return{success:!1,output:"",error:J instanceof Error?J.message:String(J),metadata:{execution_time_ms:0}}}}}}a_();a();var k7=n("task:tools:complete"),h7=`
280
564
  Mark a task as completed (progress=100, status=completed). Creates an operation record.
281
565
 
282
566
  **Before calling this tool**, you MUST:
@@ -300,24 +584,1966 @@ The \`deliverable_storage_path\` will be persisted to the task's \`context.deliv
300
584
  - Marks the task as 100% complete; use \`task_update\` to record partial progress first if needed.
301
585
 
302
586
  **Backward compatibility**: \`deliverable_storage_path\` is optional. Existing callers that omit it continue to work as before.
303
- `.trim();function o0($){return{name:"task_complete",description:B8,parameters:e1,execute:async(J,Q)=>{let W=e1.parse(J),Y=Q.session_id||"unknown";try{let B=await $.getTask(W.task_id);if(!B)return{success:!1,output:"",error:`Task not found: ${W.task_id}`,metadata:{execution_time_ms:0}};if(B.type==="cycle")return{success:!1,output:"",error:`Cannot complete a cycle-type task (id: ${W.task_id}). Cycle tasks are periodic (e.g., weekly reports) and should not be marked as completed. Use task_update to reset progress instead.`,metadata:{execution_time_ms:0}};let H=await $.completeTask(W.task_id,Y,W.deliverable_storage_path);if(!H)return{success:!1,output:"",error:`Task not found: ${W.task_id}`,metadata:{execution_time_ms:0}};return n$(void 0),Y8.info(`[completeTask] Trace: Task #${W.task_id} completed, deliverable=${W.deliverable_storage_path||"(none)"}, currentTaskId cleared from EnvContext`),{success:!0,output:W.deliverable_storage_path?`Task completed: #${H.id} - ${H.title}
304
- Deliverable (context + operation): ${W.deliverable_storage_path}`:`Task completed: #${H.id} - ${H.title}
305
- Deliverable: (no path provided)`,metadata:{execution_time_ms:0,task:H}}}catch(B){return{success:!1,output:"",error:B instanceof Error?B.message:String(B),metadata:{execution_time_ms:0}}}}}}function Q2($,J){if($.updatedAt<J.updatedAt)return 1;if($.updatedAt>J.updatedAt)return-1;if($.id<J.id)return 1;if($.id>J.id)return-1;return 0}function W2($,J){if(J<0)return $;if(J===0)return $.map((Q)=>({...Q,children:[]}));return $.map((Q)=>({...Q,children:W2(Q.children,J-1)}))}function Y2($){let J=0;for(let Q of $)J+=1+Y2(Q.children);return J}function H8($){let J=new Map,Q=new Map,W=[];for(let Y of $)J.set(Y.id,{id:Y.id,title:Y.title,status:Y.status,type:Y.type,priority:Y.priority,progress:Y.progress,children:[]});for(let Y of $){let B=Y.parent_task_id;if(B!==void 0&&B!==null&&J.has(B)){let H=Q.get(B)||[];H.push(Y),Q.set(B,H)}else W.push(Y)}for(let[Y,B]of Q.entries()){let H=J.get(Y);B.sort(Q2),H.children=B.map((X)=>J.get(X.id))}return W.sort(Q2),W.map((Y)=>J.get(Y.id))}function r0($){return{name:"task_tree",description:"View the task tree (forest) with optional filters. Use this BEFORE task_create to decide whether to create a root task (omit parent_task_id) or attach to an existing parent. "+"depth: 0=\u53EA\u6839\u4EFB\u52A1, 1=\u6839+\u4E00\u5C42\u5B50\u4EFB\u52A1, 2=\u6839+\u4E8C\u5C42\u5B50\u4EFB\u52A1 (default), "+"-1 or omitted as -1=\u65E0\u9650\u5C42\u7EA7. "+`Returns { total, truncated, depth, parent_task_id, nodes } where:
587
+ `.trim();function F0(_){return{name:"task_complete",description:h7,parameters:K4,execute:async(w,$)=>{let X=K4.parse(w),J=$.session_id||"unknown";try{let Y=await _.getTask(X.task_id);if(!Y)return{success:!1,output:"",error:`Task not found: ${X.task_id}`,metadata:{execution_time_ms:0}};if(Y.type==="cycle")return{success:!1,output:"",error:`Cannot complete a cycle-type task (id: ${X.task_id}). Cycle tasks are periodic (e.g., weekly reports) and should not be marked as completed. Use task_update to reset progress instead.`,metadata:{execution_time_ms:0}};let W=await _.completeTask(X.task_id,J,X.deliverable_storage_path);if(!W)return{success:!1,output:"",error:`Task not found: ${X.task_id}`,metadata:{execution_time_ms:0}};return z0(void 0),k7.info(`[completeTask] Trace: Task #${X.task_id} completed, deliverable=${X.deliverable_storage_path||"(none)"}, currentTaskId cleared from EnvContext`),{success:!0,output:X.deliverable_storage_path?`Task completed: #${W.id} - ${W.title}
588
+ Deliverable (context + operation): ${X.deliverable_storage_path}`:`Task completed: #${W.id} - ${W.title}
589
+ Deliverable: (no path provided)`,metadata:{execution_time_ms:0,task:W}}}catch(Y){return{success:!1,output:"",error:Y instanceof Error?Y.message:String(Y),metadata:{execution_time_ms:0}}}}}}function S4(_,w){if(_.updatedAt<w.updatedAt)return 1;if(_.updatedAt>w.updatedAt)return-1;if(_.id<w.id)return 1;if(_.id>w.id)return-1;return 0}function P4(_,w){if(w<0)return _;if(w===0)return _.map(($)=>({...$,children:[]}));return _.map(($)=>({...$,children:P4($.children,w-1)}))}function Z4(_){let w=0;for(let $ of _)w+=1+Z4($.children);return w}function y7(_){let w=new Map,$=new Map,X=[];for(let J of _)w.set(J.id,{id:J.id,title:J.title,status:J.status,type:J.type,priority:J.priority,progress:J.progress,children:[]});for(let J of _){let Y=J.parent_task_id;if(Y!==void 0&&Y!==null&&w.has(Y)){let W=$.get(Y)||[];W.push(J),$.set(Y,W)}else X.push(J)}for(let[J,Y]of $.entries()){let W=w.get(J);Y.sort(S4),W.children=Y.map((q)=>w.get(q.id))}return X.sort(S4),X.map((J)=>w.get(J.id))}function f0(_){return{name:"task_tree",description:"View the task tree (forest) with optional filters. Use this BEFORE task_create to decide whether to create a root task (omit parent_task_id) or attach to an existing parent. "+"depth: 0=\u53EA\u6839\u4EFB\u52A1, 1=\u6839+\u4E00\u5C42\u5B50\u4EFB\u52A1, 2=\u6839+\u4E8C\u5C42\u5B50\u4EFB\u52A1 (default), "+"-1 or omitted as -1=\u65E0\u9650\u5C42\u7EA7. "+`Returns { total, truncated, depth, parent_task_id, nodes } where:
306
590
  - total: count of ALL tasks in the returned tree (incl. descendants)
307
591
  - truncated: always false for now (no pagination cap on tree)
308
592
  - depth: the resolved depth value
309
593
  - parent_task_id: the root's id, or null for forest mode
310
594
  - nodes: TaskNode[] with { id, title, status, type, priority, progress, children }
311
- Note: \`total\` is the FIRST field in the response so it survives tail-truncation by ToolComponent.truncateOutput.`,parameters:$2,execute:async(J,Q)=>{let W=$2.parse(J);try{let Y=[],B=W.parent_task_id??null;if(W.parent_task_id!==void 0&&W.parent_task_id!==null){let q=await $.getTask(W.parent_task_id);if(!q)Y=[];else{let _=await $.getTaskTree(W.parent_task_id,W.depth===-1?-1:Math.max(0,W.depth-1));Y=[q,..._]}}else Y=(await $.listTasks({status:W.status,priority:W.priority,type:W.type,include_archived:W.include_archived,limit:9999,offset:0})).tasks;if(W.parent_task_id!==void 0&&W.parent_task_id!==null){if(W.status)Y=Y.filter((q)=>q.status===W.status);if(W.priority)Y=Y.filter((q)=>q.priority===W.priority);if(W.type)Y=Y.filter((q)=>q.type===W.type);if(!W.include_archived)Y=Y.filter((q)=>q.status!=="archived")}let H=H8(Y);if(W.parent_task_id===void 0||W.parent_task_id===null)H=W2(H,W.depth);let X=Y2(H);return{success:!0,output:JSON.stringify({total:X,truncated:!1,depth:W.depth,parent_task_id:B,nodes:H}),metadata:{execution_time_ms:0}}}catch(Y){return{success:!1,output:"",error:Y instanceof Error?Y.message:String(Y),metadata:{execution_time_ms:0}}}}}}var G0=U.enum(["create","progress","milestone","problem","solution","decision","review","completed","workflow_extracted"]),a0=100,s0=150,M0=5000,X8=1,_0=200,X2=U.string().min(a0,{message:`process_description \u592A\u77ED\uFF08\u5C11\u4E8E ${a0} \u5B57\u7B26\uFF09\uFF0C\u65E0\u6CD5\u8868\u8FBE\u8FC7\u7A0B\u6982\u8981\uFF1B\u5982\u65E0\u8FC7\u7A0B\u4FE1\u606F\u8BF7\u7701\u7565\u8BE5\u5B57\u6BB5\uFF0C\u7EC6\u8282\u8BF7\u56DE\u67E5 sessionId\u3002`}).max(s0,{message:`process_description \u592A\u957F\uFF08\u8D85\u8FC7 ${s0} \u5B57\u7B26\uFF09\uFF0C\u4F1A\u9000\u5316\u4E3A\u65E5\u5FD7\u7EC6\u8282\uFF1B\u64CD\u4F5C\u8BB0\u5F55\u53EA\u627F\u62C5 milestone \u6982\u8981\uFF0C\u5B8C\u6574\u7EC6\u8282\u8BF7\u901A\u8FC7 sessionId \u56DE\u67E5 session\u3002`}).describe("\u8FC7\u7A0B\u6982\u8981\uFF08process_description\uFF09\uFF1A\u91C7\u53D6\u7684\u7B56\u7565 + \u5DE5\u5177\u6B65\u9AA4\u6982\u8981\uFF1B"+`\u4E25\u683C\u63A7\u5236 ${a0}-${s0} \u5B57\u7B26\u3002`+"\u64CD\u4F5C\u8BB0\u5F55\u662F\u8282\u70B9\u9636\u6BB5 milestone \u6458\u8981\uFF0C\u5B8C\u6574\u8FC7\u7A0B\u901A\u8FC7 sessionId \u56DE\u67E5 session\uFF1B"+"milestone_description \u624D\u662F\u8FBE\u6210\u7684\u72B6\u6001/\u7ED3\u679C\u63CF\u8FF0\u3002"),q2=U.string().min(X8,{message:"milestone_title \u4E0D\u80FD\u4E3A\u7A7A"}).max(_0,{message:`milestone_title \u8D85\u8FC7 ${_0} \u5B57\u7B26\uFF0C\u5EFA\u8BAE\u7CBE\u7B80\uFF08\u4E00\u884C\u6807\u9898\u5373\u53EF\uFF09\u3002`}).describe("\u91CC\u7A0B\u7891\u6807\u9898\uFF08milestone_title\uFF09\uFF1A\u8FBE\u6210\u7684\u91CC\u7A0B\u7891/\u72B6\u6001\u7684\u4E00\u53E5\u8BDD\u6807\u9898\uFF1B"+"\u5FC5\u586B\uFF0C1-200 \u5B57\u7B26\u3002"),G2=U.string().max(M0,{message:`milestone_description \u8D85\u8FC7 ${M0} \u5B57\u7B26\uFF1B\u5982\u9700\u66F4\u8BE6\u7EC6\u7684\u8FC7\u7A0B\uFF0C\u8BF7\u6539\u7528 process_description\u3002`}).optional().describe("\u72B6\u6001/\u7ED3\u679C\u63CF\u8FF0\uFF08milestone_description\uFF09\uFF1A\u8FBE\u6210\u7684\u72B6\u6001\u6216\u7ED3\u679C\u63CF\u8FF0\uFF1B"+"\u53EF\u957F\u53EF\u77ED\uFF1B\u8FC7\u7A0B\u6982\u8981\u5E94\u653E\u5728 process_description\uFF0C\u4E0D\u8981\u4E0E\u672C\u5B57\u6BB5\u91CD\u590D\u3002"),q8=U.object({task_id:U.number().describe("Task ID"),milestone_type:G0.optional(),milestone_title:q2.optional(),milestone_description:G2,process_description:X2.optional(),action_type:G0.optional(),action_title:U.string().min(1).max(_0).optional(),action_description:U.string().max(M0).optional(),md_path:U.string().optional().describe("Path to detailed markdown documentation")}),B2=q8.transform(($)=>{let J=[],Q=$.milestone_type,W=$.milestone_title,Y=$.milestone_description;if(!Q&&$.action_type)Q=$.action_type,J.push("action_type");if(!W&&$.action_title)W=$.action_title,J.push("action_title");if(Y===void 0&&$.action_description!==void 0)Y=$.action_description,J.push("action_description");return{task_id:$.task_id,milestone_type:Q,milestone_title:W,milestone_description:Y,process_description:$.process_description,md_path:$.md_path,_deprecated_fields_used:J}}),Q9=U.object({operation_id:U.number().describe("Operation ID")}),H2=U.object({task_id:U.number().describe("Task ID"),milestone_type:G0.optional(),action_type:G0.optional(),limit:U.number().optional().default(20),offset:U.number().optional().default(0)}).transform(($)=>{let J=[],Q=$.milestone_type;if(!Q&&$.action_type)Q=$.action_type,J.push("action_type");return{task_id:$.task_id,milestone_type:Q,limit:$.limit,offset:$.offset,_deprecated_fields_used:J}}),G8=U.object({operation_id:U.number().describe("Operation ID"),milestone_title:q2.optional(),milestone_description:G2,process_description:X2.optional(),action_title:U.string().min(1).max(_0).optional(),action_description:U.string().max(M0).optional()}),W9=G8.transform(($)=>{let J=[],Q=$.milestone_title,W=$.milestone_description;if(!Q&&$.action_title)Q=$.action_title,J.push("action_title");if(W===void 0&&$.action_description!==void 0)W=$.action_description,J.push("action_description");return{operation_id:$.operation_id,milestone_title:Q,milestone_description:W,process_description:$.process_description,_deprecated_fields_used:J}}),Y9=U.object({operation_id:U.number().describe("Operation ID")});function M8($){return`Invalid parameters: ${$.issues.map((Q)=>`${Q.path.join(".")||"<root>"}: ${Q.message}`).join("; ")}`}function _8($){if(!$.milestone_type)return{ok:!1,error:"milestone_type is required (or action_type for backward compatibility). Use one of: create, progress, milestone, problem, solution, decision, review, completed, workflow_extracted."};if(!$.milestone_title)return{ok:!1,error:"milestone_title is required (or action_title for backward compatibility)."};return{ok:!0,milestoneType:$.milestone_type,milestoneTitle:$.milestone_title}}function t0($){return{name:"task_operation_create",description:"Create an operation record for a task. Tracks milestones (state/result) and process (strategy + tool steps). Dual-dimension schema: milestone_type/title/description captures WHAT milestone was reached; process_description (100-150 chars) captures HOW. Legacy action_* fields are accepted as deprecated aliases.",parameters:B2,execute:async(J,Q)=>{let W;try{W=B2.parse(J)}catch(H){if(H instanceof l)return{success:!1,output:"",error:M8(H),metadata:{execution_time_ms:0}};throw H}let Y=_8(W);if(!Y.ok)return{success:!1,output:"",error:Y.error,metadata:{execution_time_ms:0}};let B=Q.session_id||"unknown";try{let H=await $.createOperation({taskId:W.task_id,sessionId:B,milestoneType:Y.milestoneType,milestoneTitle:Y.milestoneTitle,milestoneDescription:W.milestone_description,processDescription:W.process_description,mdPath:W.md_path}),X=`Operation created: #${H.id} for task #${H.taskId} [milestone=${H.milestoneType}] ${H.milestoneTitle}`,q=[];if(W._deprecated_fields_used.length>0)q.push(`\u26A0\uFE0F DEPRECATION NOTICE: \u4F60\u4F7F\u7528\u4E86\u65E7\u7684 action_* \u5B57\u6BB5 (${W._deprecated_fields_used.join(", ")})\uFF0C\u5DF2\u81EA\u52A8\u6620\u5C04\u5230 milestone_* \u5B57\u6BB5\u3002`+"\u8BF7\u5C3D\u5FEB\u8FC1\u79FB\u5230 milestone_type / milestone_title / milestone_description \u4E3B\u5B57\u6BB5\u3002");if(q.length>0)X+=`
595
+ Note: \`total\` is the FIRST field in the response so it survives tail-truncation by ToolComponent.truncateOutput.`,parameters:j4,execute:async(w,$)=>{let X=j4.parse(w);try{let J=[],Y=X.parent_task_id??null;if(X.parent_task_id!==void 0&&X.parent_task_id!==null){let G=await _.getTask(X.parent_task_id);if(!G)J=[];else{let Q=await _.getTaskTree(X.parent_task_id,X.depth===-1?-1:Math.max(0,X.depth-1));J=[G,...Q]}}else J=(await _.listTasks({status:X.status,priority:X.priority,type:X.type,include_archived:X.include_archived,limit:9999,offset:0})).tasks;if(X.parent_task_id!==void 0&&X.parent_task_id!==null){if(X.status)J=J.filter((G)=>G.status===X.status);if(X.priority)J=J.filter((G)=>G.priority===X.priority);if(X.type)J=J.filter((G)=>G.type===X.type);if(!X.include_archived)J=J.filter((G)=>G.status!=="archived")}let W=y7(J);if(X.parent_task_id===void 0||X.parent_task_id===null)W=P4(W,X.depth);let q=Z4(W);return{success:!0,output:JSON.stringify({total:q,truncated:!1,depth:X.depth,parent_task_id:Y,nodes:W}),metadata:{execution_time_ms:0}}}catch(J){return{success:!1,output:"",error:J instanceof Error?J.message:String(J),metadata:{execution_time_ms:0}}}}}}var H1=M.enum(["create","progress","milestone","problem","solution","decision","review","completed","workflow_extracted"]),l2=100,c2=150,D1=5000,v7=1,B1=200,h4=M.string().min(l2,{message:`process_description \u592A\u77ED\uFF08\u5C11\u4E8E ${l2} \u5B57\u7B26\uFF09\uFF0C\u65E0\u6CD5\u8868\u8FBE\u8FC7\u7A0B\u6982\u8981\uFF1B\u5982\u65E0\u8FC7\u7A0B\u4FE1\u606F\u8BF7\u7701\u7565\u8BE5\u5B57\u6BB5\uFF0C\u7EC6\u8282\u8BF7\u56DE\u67E5 sessionId\u3002`}).max(c2,{message:`process_description \u592A\u957F\uFF08\u8D85\u8FC7 ${c2} \u5B57\u7B26\uFF09\uFF0C\u4F1A\u9000\u5316\u4E3A\u65E5\u5FD7\u7EC6\u8282\uFF1B\u64CD\u4F5C\u8BB0\u5F55\u53EA\u627F\u62C5 milestone \u6982\u8981\uFF0C\u5B8C\u6574\u7EC6\u8282\u8BF7\u901A\u8FC7 sessionId \u56DE\u67E5 session\u3002`}).describe("\u8FC7\u7A0B\u6982\u8981\uFF08process_description\uFF09\uFF1A\u91C7\u53D6\u7684\u7B56\u7565 + \u5DE5\u5177\u6B65\u9AA4\u6982\u8981\uFF1B"+`\u4E25\u683C\u63A7\u5236 ${l2}-${c2} \u5B57\u7B26\u3002`+"\u64CD\u4F5C\u8BB0\u5F55\u662F\u8282\u70B9\u9636\u6BB5 milestone \u6458\u8981\uFF0C\u5B8C\u6574\u8FC7\u7A0B\u901A\u8FC7 sessionId \u56DE\u67E5 session\uFF1B"+"milestone_description \u624D\u662F\u8FBE\u6210\u7684\u72B6\u6001/\u7ED3\u679C\u63CF\u8FF0\u3002"),y4=M.string().min(v7,{message:"milestone_title \u4E0D\u80FD\u4E3A\u7A7A"}).max(B1,{message:`milestone_title \u8D85\u8FC7 ${B1} \u5B57\u7B26\uFF0C\u5EFA\u8BAE\u7CBE\u7B80\uFF08\u4E00\u884C\u6807\u9898\u5373\u53EF\uFF09\u3002`}).describe("\u91CC\u7A0B\u7891\u6807\u9898\uFF08milestone_title\uFF09\uFF1A\u8FBE\u6210\u7684\u91CC\u7A0B\u7891/\u72B6\u6001\u7684\u4E00\u53E5\u8BDD\u6807\u9898\uFF1B"+"\u5FC5\u586B\uFF0C1-200 \u5B57\u7B26\u3002"),v4=M.string().max(D1,{message:`milestone_description \u8D85\u8FC7 ${D1} \u5B57\u7B26\uFF1B\u5982\u9700\u66F4\u8BE6\u7EC6\u7684\u8FC7\u7A0B\uFF0C\u8BF7\u6539\u7528 process_description\u3002`}).optional().describe("\u72B6\u6001/\u7ED3\u679C\u63CF\u8FF0\uFF08milestone_description\uFF09\uFF1A\u8FBE\u6210\u7684\u72B6\u6001\u6216\u7ED3\u679C\u63CF\u8FF0\uFF1B"+"\u53EF\u957F\u53EF\u77ED\uFF1B\u8FC7\u7A0B\u6982\u8981\u5E94\u653E\u5728 process_description\uFF0C\u4E0D\u8981\u4E0E\u672C\u5B57\u6BB5\u91CD\u590D\u3002"),x7=M.object({task_id:M.number().describe("Task ID"),milestone_type:H1.optional(),milestone_title:y4.optional(),milestone_description:v4,process_description:h4.optional(),action_type:H1.optional(),action_title:M.string().min(1).max(B1).optional(),action_description:M.string().max(D1).optional(),md_path:M.string().optional().describe("Path to detailed markdown documentation")}),C4=x7.transform((_)=>{let w=[],$=_.milestone_type,X=_.milestone_title,J=_.milestone_description;if(!$&&_.action_type)$=_.action_type,w.push("action_type");if(!X&&_.action_title)X=_.action_title,w.push("action_title");if(J===void 0&&_.action_description!==void 0)J=_.action_description,w.push("action_description");return{task_id:_.task_id,milestone_type:$,milestone_title:X,milestone_description:J,process_description:_.process_description,md_path:_.md_path,_deprecated_fields_used:w}}),T4=M.object({operation_id:M.number().describe("Operation ID")}),I4=M.object({task_id:M.number().describe("Task ID"),milestone_type:H1.optional(),action_type:H1.optional(),limit:M.number().optional().default(20),offset:M.number().optional().default(0)}).transform((_)=>{let w=[],$=_.milestone_type;if(!$&&_.action_type)$=_.action_type,w.push("action_type");return{task_id:_.task_id,milestone_type:$,limit:_.limit,offset:_.offset,_deprecated_fields_used:w}}),m7=M.object({operation_id:M.number().describe("Operation ID"),milestone_title:y4.optional(),milestone_description:v4,process_description:h4.optional(),action_title:M.string().min(1).max(B1).optional(),action_description:M.string().max(D1).optional()}),g4=m7.transform((_)=>{let w=[],$=_.milestone_title,X=_.milestone_description;if(!$&&_.action_title)$=_.action_title,w.push("action_title");if(X===void 0&&_.action_description!==void 0)X=_.action_description,w.push("action_description");return{operation_id:_.operation_id,milestone_title:$,milestone_description:X,process_description:_.process_description,_deprecated_fields_used:w}}),k4=M.object({operation_id:M.number().describe("Operation ID")});function u7(_){return`Invalid parameters: ${_.issues.map(($)=>`${$.path.join(".")||"<root>"}: ${$.message}`).join("; ")}`}function l7(_){if(!_.milestone_type)return{ok:!1,error:"milestone_type is required (or action_type for backward compatibility). Use one of: create, progress, milestone, problem, solution, decision, review, completed, workflow_extracted."};if(!_.milestone_title)return{ok:!1,error:"milestone_title is required (or action_title for backward compatibility)."};return{ok:!0,milestoneType:_.milestone_type,milestoneTitle:_.milestone_title}}function L0(_){return{name:"task_operation_create",description:"Create an operation record for a task. Tracks milestones (state/result) and process (strategy + tool steps). Dual-dimension schema: milestone_type/title/description captures WHAT milestone was reached; process_description (100-150 chars) captures HOW. Legacy action_* fields are accepted as deprecated aliases.",parameters:C4,execute:async(w,$)=>{let X;try{X=C4.parse(w)}catch(W){if(W instanceof Y_)return{success:!1,output:"",error:u7(W),metadata:{execution_time_ms:0}};throw W}let J=l7(X);if(!J.ok)return{success:!1,output:"",error:J.error,metadata:{execution_time_ms:0}};let Y=$.session_id||"unknown";try{let W=await _.createOperation({taskId:X.task_id,sessionId:Y,milestoneType:J.milestoneType,milestoneTitle:J.milestoneTitle,milestoneDescription:X.milestone_description,processDescription:X.process_description,mdPath:X.md_path}),q=`Operation created: #${W.id} for task #${W.taskId} [milestone=${W.milestoneType}] ${W.milestoneTitle}`,G=[];if(X._deprecated_fields_used.length>0)G.push(`\u26A0\uFE0F DEPRECATION NOTICE: \u4F60\u4F7F\u7528\u4E86\u65E7\u7684 action_* \u5B57\u6BB5 (${X._deprecated_fields_used.join(", ")})\uFF0C\u5DF2\u81EA\u52A8\u6620\u5C04\u5230 milestone_* \u5B57\u6BB5\u3002`+"\u8BF7\u5C3D\u5FEB\u8FC1\u79FB\u5230 milestone_type / milestone_title / milestone_description \u4E3B\u5B57\u6BB5\u3002");if(G.length>0)q+=`
596
+
597
+ `+G.join(`
598
+ `);return{success:!0,output:q,metadata:{execution_time_ms:0,operation_id:W.id,task_id:W.taskId,session_id:W.sessionId,deprecated_fields_used:X._deprecated_fields_used}}}catch(W){return{success:!1,output:"",error:W instanceof Error?W.message:String(W),metadata:{execution_time_ms:0}}}}}}function d2(_){return{name:"task_operation_get",description:"Get a single operation record by ID.",parameters:T4,execute:async(w,$)=>{let X=T4.parse(w);try{let J=await _.getOperation(X.operation_id);if(!J)return{success:!1,output:"",error:`Operation not found: ${X.operation_id}`,metadata:{execution_time_ms:0}};return{success:!0,output:JSON.stringify(J,null,2),metadata:{execution_time_ms:0}}}catch(J){return{success:!1,output:"",error:J instanceof Error?J.message:String(J),metadata:{execution_time_ms:0}}}}}}function K0(_){return{name:"task_operation_list",description:"List operation records for a task with optional filters. Use milestone_type (canonical) or action_type (deprecated, auto-mapped).",parameters:I4,execute:async(w,$)=>{let X=I4.parse(w);try{let J=await _.listOperations({taskId:X.task_id,milestoneType:X.milestone_type,limit:X.limit,offset:X.offset}),Y=JSON.stringify({operations:J,count:J.length});if(X._deprecated_fields_used.length>0)Y=`\u26A0\uFE0F DEPRECATION NOTICE: \u4F60\u4F7F\u7528\u4E86\u65E7\u7684 action_type \u5B57\u6BB5\uFF0C\u5DF2\u81EA\u52A8\u6620\u5C04\u5230 milestone_type\u3002
599
+
600
+ `+Y;return{success:!0,output:Y,metadata:{execution_time_ms:0,deprecated_fields_used:X._deprecated_fields_used}}}catch(J){return{success:!1,output:"",error:J instanceof Error?J.message:String(J),metadata:{execution_time_ms:0}}}}}}function c7(_){return`Invalid parameters: ${_.issues.map(($)=>`${$.path.join(".")||"<root>"}: ${$.message}`).join("; ")}`}function p2(_){return{name:"task_operation_update",description:"Update an operation record. Use milestone_title / milestone_description (canonical) or action_title / action_description (deprecated, auto-mapped). process_description captures the process (100-150 chars).",parameters:g4,execute:async(w,$)=>{let X;try{X=g4.parse(w)}catch(J){if(J instanceof Y_)return{success:!1,output:"",error:c7(J),metadata:{execution_time_ms:0}};throw J}try{let J=await _.updateOperation(X.operation_id,{milestoneTitle:X.milestone_title,milestoneDescription:X.milestone_description,processDescription:X.process_description});if(!J)return{success:!1,output:"",error:`Operation not found: ${X.operation_id}`,metadata:{execution_time_ms:0}};let Y=`Operation updated: #${J.id}`;if(X._deprecated_fields_used.length>0)Y+=`
601
+
602
+ \u26A0\uFE0F DEPRECATION NOTICE: \u4F60\u4F7F\u7528\u4E86\u65E7\u7684 action_* \u5B57\u6BB5 (${X._deprecated_fields_used.join(", ")})\uFF0C\u5DF2\u81EA\u52A8\u6620\u5C04\u5230 milestone_* \u5B57\u6BB5\u3002`+"\u8BF7\u5C3D\u5FEB\u8FC1\u79FB\u5230 milestone_* \u5B57\u6BB5\u3002";return{success:!0,output:Y,metadata:{execution_time_ms:0,operation:J,deprecated_fields_used:X._deprecated_fields_used}}}catch(J){return{success:!1,output:"",error:J instanceof Error?J.message:String(J),metadata:{execution_time_ms:0}}}}}}function i2(_){return{name:"task_operation_delete",description:"Delete an operation record.",parameters:k4,execute:async(w,$)=>{let X=k4.parse(w);try{if(!await _.deleteOperation(X.operation_id))return{success:!1,output:"",error:`Operation not found: ${X.operation_id}`,metadata:{execution_time_ms:0}};return{success:!0,output:`Operation deleted: #${X.operation_id}`,metadata:{execution_time_ms:0}}}catch(J){return{success:!1,output:"",error:J instanceof Error?J.message:String(J),metadata:{execution_time_ms:0}}}}}}var Uw={CREATED:"task.created",UPDATED:"task.updated",COMPLETED:"task.completed",DELETED:"task.deleted",OPERATION_ADDED:"task.operation_added",DELEGATED:"task.delegated"};import{AsyncLocalStorage as d7}from"async_hooks";a();var U1=n("process-tree-killer");function u4(){return __("child_process")}var x4;function p7(_,w,$){if(x4)return x4(_,w,$);return u4().spawn(_,w,$)}var m4;function i7(_,w,$){if(m4)return m4(_,w,$);let X=u4();if(typeof X.spawnSync!=="function")return;return X.spawnSync(_,w,$)}var r7;function n7(){return r7??process.platform}function a7(_){try{return process.kill(_,0),!0}catch(w){if(w.code==="ESRCH")return!1;return!0}}function o7(_){try{let w=i7("tasklist",["/fi",`PID eq ${_}`,"/nh"],{stdio:["ignore","pipe","ignore"],windowsHide:!0,timeout:3000});if(!w)return!0;return w.stdout.toString().includes(String(_))}catch{return!0}}function s7(_){return new Promise((w)=>setTimeout(w,_))}async function t7(_,w){if(!Number.isInteger(_)||_<=0)throw Error(`Invalid PID: ${_} (must be a positive integer)`);let $=n7(),X=w?.signal??"SIGKILL",J=w?.retry??3,Y=w?.retryDelayMs??500;U1.info(`[bg-process:kill-begin] pid=${_} signal=${X} retry=${J} delayMs=${Y}`);for(let W=1;W<=J;W++){let q=$==="win32"?e7(_):_J(_,X,$);if(await s7(Y),!($==="win32"?o7(_):a7(_)))return U1.info(`[bg-process:kill-done] pid=${_} attempts=${W} stillAlive=false`),{pid:_,platform:$,signal:q.signal,success:!0,attempts:W,stillAlive:!1};if(W<J)U1.warn(`[bg-process:kill-retry] pid=${_} attempt=${W}/${J}`)}return U1.error(`[bg-process:kill-failed] pid=${_} attempts=${J} stillAlive=true`),{pid:_,platform:$,signal:$==="win32"?"taskkill /f /t":X,success:!1,attempts:J,stillAlive:!0}}function e7(_){try{return p7("taskkill",["/pid",String(_),"/f","/t"],{stdio:"ignore",windowsHide:!0}),{pid:_,platform:"win32",signal:"taskkill /f /t",success:!0}}catch{return{pid:_,platform:"win32",signal:"taskkill /f /t",success:!1}}}function _J(_,w,$){try{return process.kill(-_,w),{pid:_,platform:$,signal:w,success:!0}}catch(X){let J=X.code;if(J==="ESRCH"||J==="EPERM")return{pid:_,platform:$,signal:w,success:!0};return{pid:_,platform:$,signal:w,success:!1}}}a();var r2=n("task:process-registry");class n2{pids=new Set;register(_){if(!Number.isInteger(_)||_<=0)return;this.pids.add(_)}unregister(_){if(!Number.isInteger(_))return;this.pids.delete(_)}size(){return this.pids.size}async killAll(){if(this.pids.size===0)return;let _=Array.from(this.pids);r2.info(`[bg-process:killAll-begin] count=${_.length} pids=[${_.join(",")}]`);for(let w of _)try{let $=await t7(w,{retry:3,retryDelayMs:500});if($.stillAlive)r2.error(`\u8FDB\u7A0B PID ${w} \u7ECF\u8FC7 ${$.attempts} \u6B21\u91CD\u8BD5\u540E\u4ECD\u672A\u6740\u6B7B\uFF01\u4FDD\u7559 PID \u4F9B\u540E\u7EED forceStopAll \u91CD\u8BD5\u3002`);else this.pids.delete(w)}catch{}r2.info(`[bg-process:killAll-done] remaining=${this.pids.size}`)}}var wJ=new d7;function l4(_,w){return wJ.run(_,w)}import{randomUUID as $J}from"crypto";z_();function XJ(){if(typeof Bun<"u"){let{Database:_}=__("bun:sqlite");return _}else return __("better-sqlite3")}function JJ(_){let $=new(XJ())(_);if(typeof $.run!=="function")$.run=function(X,...J){if(J.length>0)return this.prepare(X).run(...J);else return this.exec(X)};return $}class a2{db;insertStmt;getByIdStmt;recentStmt;constructor(_){this.db=JJ(_.dbPath);try{this.db.exec("PRAGMA journal_mode=WAL"),this.db.exec("PRAGMA synchronous=NORMAL"),this.db.exec("PRAGMA busy_timeout=5000")}catch{}this.db.exec(`CREATE TABLE IF NOT EXISTS event_store (
603
+ event_id TEXT PRIMARY KEY,
604
+ es_type TEXT NOT NULL,
605
+ sender_id TEXT NOT NULL,
606
+ text TEXT,
607
+ metadata TEXT NOT NULL,
608
+ raw_event TEXT,
609
+ created_at INTEGER NOT NULL
610
+ );`),this.db.exec(`CREATE INDEX IF NOT EXISTS idx_es_sender_time
611
+ ON event_store (es_type, sender_id, created_at DESC);`),this.insertStmt=this.db.prepare(`INSERT INTO event_store (event_id, es_type, sender_id, text, metadata, raw_event, created_at)
612
+ VALUES (?, ?, ?, ?, ?, ?, ?)`),this.getByIdStmt=this.db.prepare(`SELECT event_id, es_type, sender_id, text, metadata, raw_event, created_at
613
+ FROM event_store WHERE event_id = ?`),this.recentStmt=this.db.prepare(`SELECT event_id, es_type, sender_id, text, metadata, raw_event, created_at
614
+ FROM event_store
615
+ WHERE es_type = ? AND sender_id = ?
616
+ ORDER BY created_at DESC
617
+ LIMIT ?`)}async insertTriggerEvent(_,w){let $=`evt_${Date.now()}_${$J()}`,X=Date.now(),J=JSON.stringify(_.metadata??{}),Y=_.rawEvent===void 0?null:YJ(_.rawEvent);return this.insertStmt.run($,w,_.senderId,_.text??null,J,Y,X),$}async getEventById(_){let w=this.getByIdStmt.get(_);if(!w)return null;return c4(w)}async getRecentEvents(_,w,$){return this.recentStmt.all(_,w,$).map((J)=>c4(J))}close(){this.db.close()}}m([u("event_store.insert_trigger",{recordParams:!0,recordResult:!0})],a2.prototype,"insertTriggerEvent",null);m([u("event_store.query_by_id",{recordParams:!0,recordResult:!1})],a2.prototype,"getEventById",null);function c4(_){let w;try{w=_.metadata?JSON.parse(_.metadata):{}}catch{w={}}let $;if(_.raw_event)try{$=JSON.parse(_.raw_event)}catch{$=null}else $=null;return{eventId:_.event_id,esType:_.es_type,senderId:_.sender_id,text:_.text??null,metadata:w,rawEvent:$,createdAt:typeof _.created_at==="bigint"?Number(_.created_at):_.created_at}}function YJ(_){let w=new WeakSet;try{return JSON.stringify(_,($,X)=>{if(typeof X==="function")return"[Function]";if(X===void 0)return"[undefined]";if(X===null)return null;if(X instanceof Error)return`${X.name}: ${X.message}`;if(typeof X==="object"){if(w.has(X))return"[Circular]";w.add(X)}if(typeof X==="bigint")return X.toString();return X})}catch{return"{}"}}var WJ=null;function d4(){return WJ}var w_={BEFORE_CREATE:"task:before.create",AFTER_CREATE:"task:after.create",BEFORE_UPDATE:"task:before.update",AFTER_UPDATE:"task:after.update",BEFORE_DELETE:"task:before.delete",AFTER_DELETE:"task:after.delete",AFTER_COMPLETE:"task:after.complete",DELEGATE_BEFORE:"task:delegate:before",DELEGATE_AFTER:"task:delegate:after",OPERATION_BEFORE_CREATE:"task:operation:before.create",OPERATION_AFTER_CREATE:"task:operation:after.create"};var o2={default:`\u4F60\u662F {{agent_name}} \u63A5\u5F85\u667A\u80FD\u4F53\uFF08Receptionist Agent\uFF09\u2014\u2014 {{agent_name}} \u7CFB\u7EDF\u7684\u667A\u80FD\u5165\u53E3\u3002
618
+
619
+ ## \u26A0\uFE0F \u91CD\u8981\u6F84\u6E05\uFF1A\u5173\u4E8E\u672C prompt \u4E2D\u7684\u5DE5\u5177\u5F15\u7528
620
+
621
+ > **\u672C prompt \u4E2D\u90E8\u5206\u6BB5\u843D\uFF08\u5982 \`delegate_task(...)\` \u8C03\u7528\u6A21\u677F\u3001\u884C\u4E3A\u89C4\u5219 6 \u91CC\u7684\u5F15\u7528\uFF09\u662F**\u4F60\u8F6C\u4EA4\u7ED9 sub-agent\uFF08\u901A\u5E38\u662F \`roy\`\uFF09\u7684\u793A\u4F8B\u6307\u4EE4**\uFF0C\u4E0D\u4EE3\u8868\u4F60\u81EA\u5DF1\u80FD\u76F4\u63A5\u8C03\u7528\u5176\u4E2D\u63D0\u5230\u7684\u6240\u6709\u5DE5\u5177**\u3002
622
+ >
623
+ > \u5177\u4F53\u6765\u8BF4\uFF1A
624
+ > - \`delegate_task(...)\` \u8C03\u7528\u91CC\u7684 prompt \u6A21\u677F\u4E2D\u53EF\u80FD\u63D0\u5230 \`task_create\` / \`task_update\` / \`task_operation_create\` / \`task_complete\` \u7B49\u5DE5\u5177 \u2014\u2014 \u8FD9\u4E9B\u662F**\u6307\u793A\u5B50 agent \u7528\u7684**\uFF0C\u4E0D\u662F\u4F60\u81EA\u5DF1\u7684\u5DE5\u5177\uFF08\u4F60\u5DF2\u88AB \`deniedTools\` \u7981\u7528\uFF09\u3002
625
+ > - \u4F60**\u81EA\u5DF1**\u771F\u6B63\u53EF\u7528\u7684\u5DE5\u5177\uFF0C**\u4E25\u683C\u4EE5\u4E0B\u65B9"## \u4F60\u7684\u5DE5\u5177"\u533A\u5757\u4E2D\u7684\u5DE5\u5177\u8868\u4E3A\u51C6**\u3002
626
+ >
627
+ > \u5982\u679C\u4F60\u8BFB\u5230 prompt \u91CC\u6709\u5DE5\u5177\u540D\u4F46\u4E0B\u65B9\u5DE5\u5177\u8868\u91CC\u6CA1\u6709\u8BE5\u5DE5\u5177 \u2014\u2014 **\u4E0D\u8981\u5C1D\u8BD5\u8C03\u7528**\uFF0C\u90A3\u662F\u7ED9\u5B50 agent \u7684\u793A\u4F8B\u3002
628
+
629
+ ## \u5DE5\u4F5C\u76EE\u5F55
630
+
631
+ **workspace_dir**: {{workspace_dir}}
632
+
633
+ ## \u4F60\u7684\u8EAB\u4EFD
634
+
635
+ - **\u540D\u79F0**: {{agent_name}}\uFF08\u63A5\u5F85\u5458\uFF09
636
+ - **\u89D2\u8272**: \u5165\u53E3 AI \u52A9\u624B\uFF0C\u5206\u6790\u7528\u6237\u8BF7\u6C42\u5E76\u5C06\u5176\u59D4\u6258\u7ED9\u5408\u9002\u7684\u5B50\u667A\u80FD\u4F53\u6267\u884C
637
+ - **\u4E2A\u6027**: \u53CB\u597D\u3001\u5584\u4E8E\u5206\u6790\u3001\u9AD8\u6548\u3001\u7B80\u6D01
638
+
639
+ ## \u6838\u5FC3\u4F7F\u547D
640
+
641
+ \u4F60\u662F {{agent_name}} \u7CFB\u7EDF\u7684**\u524D\u95E8**\u3002\u4F60\u7684\u5DE5\u4F5C\u53EA\u6709\uFF1A
642
+
643
+ 1. **\u503E\u542C** \u7528\u6237\u7684\u8BF7\u6C42
644
+ 2. **\u5206\u6790** \u9700\u8981\u505A\u4EC0\u4E48
645
+ 3. **\u59D4\u6258** \u5DE5\u4F5C\u7ED9\u5408\u9002\u7684\u5B50\u667A\u80FD\u4F53
646
+
647
+ \u4F60**\u4E0D**\u81EA\u5DF1\u89E3\u51B3\u95EE\u9898\u3002\u590D\u6742\u5DE5\u4F5C\u5FC5\u987B\u59D4\u6258\u7ED9\u5B50\u667A\u80FD\u4F53\u3002
648
+
649
+ ## \u4F60\u7684\u5DE5\u5177
650
+
651
+ \u4F60\u6709\u4E00\u7EC4\u4EFB\u52A1\u67E5\u8BE2\u5DE5\u5177\u548C\u4E09\u4E2A\u6267\u884C\u5DE5\u5177\u53EF\u7528\uFF1A
652
+
653
+ | \u5DE5\u5177 | \u7C7B\u522B | \u63CF\u8FF0 |
654
+ |------|------|------|
655
+ | \`task_search\` | **\u67E5\u8BE2** | \u5173\u952E\u8BCD\u641C\u7D22\u4EFB\u52A1\uFF08\u5339\u914D title/description/goals/tags/operations\uFF09\uFF0C\u5E26\u5206\u9875\u548C relevance \u6392\u5E8F |
656
+ | \`task_get\` | **\u67E5\u8BE2** | \u83B7\u53D6\u5355\u4E2A\u4EFB\u52A1\u8BE6\u60C5\uFF08\u542B operations\uFF09 |
657
+ | \`task_list\` | **\u67E5\u8BE2** | \u6309 status/priority/type/depth \u5217\u51FA\u4EFB\u52A1\uFF0C\u652F\u6301\u5206\u9875 |
658
+ | \`task_operation_list\` | **\u67E5\u8BE2** | \u67E5\u770B\u4EFB\u52A1\u7684\u64CD\u4F5C\u8BB0\u5F55 |
659
+ | \`delegate_task\` | **\u6267\u884C** | \u59D4\u6258\u590D\u6742/\u591A\u6B65\u9AA4\u4EFB\u52A1\u7ED9\u5B50\u667A\u80FD\u4F53\u6267\u884C\uFF08\u540E\u53F0\u6A21\u5F0F\uFF0C\u7ACB\u5373\u8FD4\u56DE\uFF09 |
660
+ | \`query_background_process\` | **\u6267\u884C** | \u67E5\u8BE2\u7531 \`delegate_task\` \u542F\u52A8\u7684\u540E\u53F0\u8FDB\u7A0B\u5F53\u524D\u72B6\u6001\uFF08\u4EC5 default agent \u53EF\u89C1\uFF09 |
661
+ | \`bash\` | **\u6267\u884C** | \u4EC5\u7528\u4E8E\u6267\u884C\u4E00\u884C\u7B80\u5355\u7684 shell \u547D\u4EE4 |
662
+
663
+ ### \u67E5\u8BE2\u5DE5\u5177\uFF08\u53EF\u76F4\u63A5\u4F7F\u7528\uFF09
664
+
665
+ \u4EE5\u4E0B\u4EFB\u52A1\u67E5\u8BE2\u5DE5\u5177 **\u4E0D\u9700\u8981\u59D4\u6258**\uFF0C\u53EF\u4EE5\u76F4\u63A5\u8C03\u7528\uFF1A
666
+ - \`task_search(keywords=["\u5173\u952E\u8BCD"], limit=10)\` \u2014 \u641C\u7D22\u76F8\u5173\u4EFB\u52A1
667
+ - \`task_get(task_id=123)\` \u2014 \u67E5\u770B\u4EFB\u52A1\u8BE6\u60C5
668
+ - \`task_list(status="active")\` \u2014 \u5217\u51FA\u4EFB\u52A1
669
+ - \`task_operation_list(task_id=123)\` \u2014 \u67E5\u770B\u64CD\u4F5C\u8BB0\u5F55
670
+
671
+ > \u2705 \u7528\u6237\u8BE2\u95EE\u4EFB\u52A1\u72B6\u6001\u3001\u641C\u7D22\u5DF2\u6709\u4EFB\u52A1\u3001\u67E5\u770B\u4EFB\u52A1\u8BE6\u60C5\u65F6\uFF0C**\u76F4\u63A5\u4F7F\u7528\u67E5\u8BE2\u5DE5\u5177**\uFF0C\u65E0\u9700\u59D4\u6258\u3002
672
+
673
+ ### \u6267\u884C\u5DE5\u5177\u4F7F\u7528\u89C4\u5219
674
+
675
+ **\`delegate_task\`** \u2014 \u8FD9\u662F\u4F60\u7684**\u4E3B\u8981\u6267\u884C\u5DE5\u5177**\u3002\u7528\u4E8E\u4E00\u5207\u590D\u6742\u3001\u591A\u6B65\u9AA4\u3001\u9700\u8981\u8BFB\u6587\u4EF6\u3001\u8FD0\u884C\u547D\u4EE4\u3001\u4EE3\u7801\u5206\u6790\u3001\u641C\u7D22\u3001\u5B9E\u73B0\u529F\u80FD\u7B49\u573A\u666F\u3002**\u5F53\u4E0D\u786E\u5B9A\u7528\u54EA\u4E2A\u65F6\uFF0C\u9009 \`delegate_task\`\u3002**
676
+
677
+ > **similar_task_ids \u662F\u5FC5\u586B\u53C2\u6570**\uFF1A\u6BCF\u6B21\u8C03\u7528 \`delegate_task\` \u524D\uFF0C\u5FC5\u987B\u5148\u4F7F\u7528 \`task_search\` \u641C\u7D22\u4E0E\u5F53\u524D\u4EFB\u52A1\u76F8\u4F3C\u7684\u5386\u53F2\u4EFB\u52A1\uFF0C\u5C06\u627E\u5230\u7684\u76F8\u4F3C\u4EFB\u52A1 ID \u586B\u5165 \`similar_task_ids\` \u53C2\u6570\uFF08\u6700\u591A 3 \u4E2A\uFF09\u3002\u5982\u679C\u6CA1\u6709\u627E\u5230\u76F8\u4F3C\u4EFB\u52A1\uFF0C\u4F20\u5165\u7A7A\u6570\u7EC4 \`similar_task_ids=[]\`\u3002
678
+ >
679
+ > **Reuse Candidates auto-injected \u2014 three legal paths (Task #2395)**: even if you pass \`similar_task_ids=[]\`, \`delegate_task\` automatically injects the most recent TaskCreationRegistry entries into the sub-agent prompt as candidates. The injected section shows each candidate's **parent / children / subtree summary / project / branch / worktree** so the sub-agent can judge which path fits. Before creating any new task, the sub-agent **must** call \`task_get\` on the relevant candidate and pick exactly one of three paths:
680
+ >
681
+ > - **Path A \u2014 Continuation (reopen existing task).** The new work is the SAME logical task as a candidate (or its parent). Use \`task_update(task_id=<id>, { status: "active" })\` and append description/goals. Do **not** create a new id.
682
+ > - **Path B \u2014 Child task (independent sub-delivery under the same feature).** The new work is a sibling-style item \u2014 an independent bug fix, optimization, parallel delivery, or independent acceptance criterion that clearly belongs under an existing feature/parent. Use \`task_create(parent_task_id=<candidate_id>, title="<distinguishing title>", ...)\`. \`task_create\` will auto-merge the parent's safe context (project_path, worktree_path, branch, parent_branch) and strip sensitive keys (commits, tokens, secrets). Always pair with a \`task_operation_create\` (milestone_type=\`milestone\`) so the audit trail shows *why* this was a child rather than a reopen.
683
+ > - **Path C \u2014 New root (unrelated work).** The new work is unrelated to any candidate. Create a brand-new root task without \`parent_task_id\` \u2014 but only when no existing longterm / topic cluster fits. Root count should stay \u2264 ~10 to keep the tree readable.
684
+ >
685
+ > Candidates are **suggestions**, not mandatory merges. Empty reuse is a valid outcome. Whichever path the sub-agent picks, it **must** call \`task_operation_create\` to record why the path was chosen (\`decision\` for A, \`milestone\` for B, \`create\` for C).
686
+
687
+ **\`bash\`** \u2014 \u7528\u4E8E\u6267\u884C**\u7B80\u5355\u7684\u4E00\u6B21\u6027 shell \u547D\u4EE4**\uFF081-2 \u884C\u80FD\u5B8C\u6210\u7684\u67E5\u8BE2\uFF09\u3002\u5178\u578B\u573A\u666F\uFF1A
688
+ - **\u6587\u4EF6\u6D4F\u89C8 / \u8BFB\u53D6**\uFF1A\`ls -la\`\u3001\`cat file.txt\`\u3001\`head -n 20 file.txt\`\u3001\`tail -n 50 log.txt\`\u3001\`grep "pattern" file.txt\`\u3001\`find . -name "*.ts"\`
689
+ - **\u72B6\u6001\u67E5\u8BE2**\uFF1A\`pwd\`\u3001\`date\`\u3001\`whoami\`\u3001\`which node\`\u3001\`git status\`\u3001\`git log -5\`\u3001\`git diff\`
690
+ - **\u7B80\u5355\u6D4B\u8BD5 / \u5DE5\u5177\u8C03\u7528**\uFF1A\`echo "hello"\`\u3001\`node --version\`\u3001\`bun --version\`
691
+ - **\u8C03\u7528\u4E00\u884C \`roy-agent\` \u67E5\u8BE2\u547D\u4EE4**\uFF08\u5982 \`bun packages/cli/dist/bin/roy-agent.js tasks list\`\u3001\`roy-agent workflow list\`\u3001\`roy-agent workflow tag list\`\u3001\`roy-agent workflow search --keyword xxx\`\uFF09
692
+ - **\u4F8B\u5916\uFF1A\u521B\u5EFA/\u6CE8\u518C workflow \u7981\u6B62\u7528 bash \u624B\u64B8**\uFF0C\u5FC5\u987B\u59D4\u6258\u7ED9 \`workflow-creator\`\uFF08\u89C1\u4E0B\u6587"Workflow \u521B\u5EFA\u59D4\u6258\u6307\u5357"\uFF09
693
+
694
+ **\`bash\` \u9002\u5408 vs \u9700\u8981\u59D4\u6258\u7684\u8FB9\u754C\uFF1A**
695
+ - \u2705 \`ls -la\`\u3001\`cat file.txt\`\u3001\`grep "TODO" src/*.ts\`\u3001\`git status\`\u3001\`find . -name "*.ts"\` \u2014 **\u76F4\u63A5\u7528 \`bash\` \u6267\u884C**
696
+ - \u274C "\u5B9E\u73B0 XXX \u529F\u80FD"\u3001"\u91CD\u6784 XXX \u6A21\u5757"\u3001"\u4FEE\u590D XXX bug"\u3001"\u8C03\u7814 XXX \u6280\u672F"\u3001"\u5F00\u53D1 XXX feature" \u2014 **\u5FC5\u987B\u7528 \`delegate_task\` \u59D4\u6258**
697
+ - \u26A0\uFE0F \u590D\u6742\u591A\u6B65\u3001\u8DE8\u6587\u4EF6\u3001\u9700\u8981\u89C4\u5212/\u5206\u6790/\u51B3\u7B56\u7684\u5DE5\u4F5C \u2014 **\u5FC5\u987B\u7528 \`delegate_task\` \u59D4\u6258**
698
+
699
+ ## \u4F55\u65F6\u59D4\u6258
700
+
701
+ **\u6838\u5FC3\u539F\u5219**\uFF1A\u53EA\u6709**\u590D\u6742\u7684\u3001\u591A\u6B65\u64CD\u4F5C**\u624D\u80FD\u5B8C\u6210\u7684\u4EFB\u52A1\u6216\u7528\u6237 query \u624D\u59D4\u6258\u3002
702
+
703
+ ### \u2705 \u9700\u8981\u59D4\u6258\uFF08\u4F7F\u7528 \`delegate_task\`\uFF09
704
+
705
+ - **\u5B9E\u73B0\u529F\u80FD** \u2014 \u5982"\u5B9E\u73B0\u4E00\u4E2A\u52A0\u6CD5\u51FD\u6570"\u3001"\u6DFB\u52A0\u7528\u6237\u767B\u5F55\u529F\u80FD"\u3001"\u5F00\u53D1 XXX \u6A21\u5757"
706
+ - **\u91CD\u6784 / \u4F18\u5316** \u2014 \u5982"\u91CD\u6784 XXX \u6A21\u5757"\u3001"\u4F18\u5316 XXX \u6027\u80FD"\u3001"\u6539\u8FDB XXX \u67B6\u6784"
707
+ - **\u4FEE\u590D Bug** \u2014 \u5982"\u4FEE\u590D\u767B\u5F55\u5931\u8D25\u7684 bug"\u3001"\u6392\u67E5 XXX \u62A5\u9519"
708
+ - **\u8C03\u7814\u7C7B\u4EFB\u52A1** \u2014 \u9700\u8981\u4EE3\u7801\u5206\u6790\u3001\u7F51\u7EDC\u641C\u7D22\u3001\u6280\u672F\u8C03\u7814\u3001\u6570\u636E\u6536\u96C6
709
+ - **\u591A\u6B65\u5B9E\u65BD** \u2014 \u9700\u8981\u89C4\u5212\u3001\u8BFB+\u5206\u6790+\u5199\u3001\u8DE8\u6587\u4EF6\u64CD\u4F5C\u7684\u5DE5\u4F5C
710
+ - **\u4E0D\u660E\u786E\u7684\u4EFB\u52A1** \u2014 \u9700\u8981\u63A2\u7D22\u624D\u80FD\u660E\u786E\u65B9\u5411\u3001\u8303\u56F4\u8F83\u5927\u7684\u8BF7\u6C42
711
+ - **\u590D\u6742\u67E5\u8BE2** \u2014 \u6D89\u53CA\u63A8\u7406\u3001\u89C4\u5212\u3001\u51B3\u7B56\u7684\u8BF7\u6C42
712
+
713
+ ### \u274C \u4E0D\u9700\u8981\u59D4\u6258\uFF08\u76F4\u63A5\u7528 \`bash\` \u6216\u76F4\u63A5\u56DE\u590D\uFF09
714
+
715
+ - **\u5355\u4E2A\u7B80\u5355 bash \u547D\u4EE4** \u2014 \u5982 \`ls\`\u3001\`pwd\`\u3001\`date\`\u3001\`whoami\`\u3001\`echo hello\`
716
+ - **\u51E0\u4E2A\u7B80\u5355\u547D\u4EE4\u5C31\u80FD\u5B8C\u6210\u7684\u67E5\u8BE2** \u2014 \u5982 \`ls -la\`\u3001\`cat file.txt\`\u3001\`head -n 20 file.txt\`\u3001\`grep "pattern" file.txt\`\u3001\`git status\`\u3001\`git log -5\`\u3001\`find . -name "*.ts"\`
717
+ - **\u4E00\u6B21\u6027\u95EE\u7B54** \u2014 \u4F60\u51ED\u81EA\u8EAB\u77E5\u8BC6\u5C31\u80FD\u56DE\u7B54\u7684\u7B80\u5355\u95EE\u9898
718
+ - **\u95EE\u5019 / \u95F2\u804A** \u2014 "\u4F60\u597D"\u3001"\u8C22\u8C22"\u7B49
719
+
720
+ > \uD83D\uDCA1 **\u5224\u5B9A\u65B9\u6CD5**\uFF1A\u5982\u679C\u7528\u6237\u7684\u8BF7\u6C42\u80FD\u7528 **1-2 \u884C\u7B80\u5355 shell \u547D\u4EE4**\u76F4\u63A5\u5B8C\u6210\uFF08\u5982 \`ls -la\`\u3001\`cat file.txt\`\u3001\`git status\`\uFF09\uFF0C\u5C31**\u76F4\u63A5\u7528 \`bash\` \u6267\u884C**\uFF0C\u65E0\u9700\u59D4\u6258\u3002\u53EA\u6709\u9700\u8981\u89C4\u5212\u3001\u8C03\u7814\u3001\u7F16\u7801\u3001\u91CD\u6784\u3001Bug \u4FEE\u590D\u3001\u5B9E\u73B0\u529F\u80FD\u7B49**\u590D\u6742\u591A\u6B65\u64CD\u4F5C**\u65F6\u624D\u59D4\u6258\u3002
721
+
722
+
723
+ > \uD83D\uDCA1 **\u4E0E"\u4F55\u65F6\u59D4\u6258"\u7684\u5173\u7CFB**\uFF1A\u672C\u89C4\u5219\u662F**\u54CD\u5E94\u89C4\u5219**\uFF08\u88AB\u5DE5\u5177\u8981\u6C42\u65F6\u7ACB\u5373\u59D4\u6258\uFF09\uFF0C"\u4F55\u65F6\u59D4\u6258"\u662F**\u9884\u5224\u89C4\u5219**\uFF08\u6839\u636E\u7528\u6237\u8BF7\u6C42\u5224\u65AD\u662F\u5426\u59D4\u6258\uFF09\u3002\u4E24\u8005\u4E92\u8865\uFF0C\u5171\u540C\u6784\u6210\u5B8C\u6574\u7684\u59D4\u6258\u7B56\u7565\u3002
724
+
725
+ ## \u5B50\u667A\u80FD\u4F53\u9009\u62E9\u7B56\u7565
726
+
727
+ **\u6838\u5FC3\u94C1\u5F8B**\uFF1A\u9009\u4E86\u67D0\u4E2A subagent \u540E\uFF0C\u5FC5\u987B**\u9075\u5FAA\u8BE5 subagent \u7684\u5DE5\u4F5C\u6A21\u5F0F**\u2014\u2014\u628A\u4EFB\u52A1\u7528\u5B83\u7684 prompt \u6A21\u677F\u3001\u5DE5\u5177\u96C6\u548C\u51B3\u7B56\u8DEF\u5F84\u8868\u8FBE\uFF0C**\u4E0D\u80FD\u7528\u81EA\u5DF1\u7684\u65B9\u5F0F\u786C\u585E**\u3002
728
+
729
+ > \uD83D\uDCA1 **\u5178\u578B\u4F8B\u5B50**\uFF1A\u9009 \`workflow-runner\` \u65F6\uFF0Cprompt \u5FC5\u987B**\u660E\u786E\u6307\u5B9A workflow \u540D**\uFF08\u8BA9 sub-agent \u76F4\u63A5 \`workflow_run\`\uFF09**\u6216**\u8BA9 sub-agent **\u5148 \`workflow_search\` / \`workflow_list\` / \`workflow_get\` \u81EA\u884C\u9009\u5B9A**\u2014\u2014\u4E0D\u8981\u8BA9 sub-agent \u66FF\u4F60\u505A\u4E0D\u5C5E\u4E8E\u5B83\u7684\u51B3\u7B56\uFF08\u5982 \`workflow_creat\`\uFF09\u3002
730
+
731
+ \u4F60\u6709\u591A\u7C7B\u5B50\u667A\u80FD\u4F53\u3002**\u9ED8\u8BA4\u9996\u6B21\u59D4\u6258\u4F7F\u7528 \`roy\`**\u3002**\u8C03\u7528 workflow \u89E3\u51B3\u7684\u4EFB\u52A1\uFF0C\u59D4\u6258\u7ED9 \`workflow-runner\`**\uFF08\u517C\u5BB9\u8BED\u6CD5\uFF1A\`strict-task-agent\` / \`code-review\` / \`bench-agent-host\` / \`workspace-analyzer\` / \`test-workflow-agent\` \u7B49\u65E7\u540D\u4ECD\u53EF\u7528\uFF0C\u4F1A\u88AB\u81EA\u52A8\u91CD\u5199\uFF09\u3002
732
+
733
+ ### \uD83E\uDD47 \u9996\u9009\uFF1A\`roy\`\uFF08\u9996\u6B21\u59D4\u6258\u9ED8\u8BA4\uFF09
734
+ \u5168\u529F\u80FD\u7684 {{agent_name}} AI \u52A9\u624B\uFF0C\u62E5\u6709\u6240\u6709\u5DE5\u5177\u548C\u6280\u80FD\uFF0C\u63D0\u793A\u8BCD\u4E2D\u5185\u7F6E\u4E86 **\u4EFB\u52A1\u4F5C\u4E3A\u4E00\u7B49\u516C\u6C11** \u539F\u5219\u3002\u9075\u5FAA\u7ED3\u6784\u5316\u4EFB\u52A1\u751F\u547D\u5468\u671F\uFF08\u521B\u5EFA\u2192\u8DDF\u8E2A\u2192\u5B8C\u6210\uFF09\uFF0C\u540C\u65F6\u4FDD\u6301\u7075\u6D3B\u6027\u3002
735
+ - \u2705 \u901A\u7528\u95EE\u9898\u89E3\u51B3
736
+ - \u2705 \u4EE3\u7801\u63A2\u7D22\u3001\u9605\u8BFB\u548C\u5206\u6790
737
+ - \u2705 \u521B\u9020\u6027/\u63A2\u7D22\u6027\u5DE5\u4F5C\uFF0C\u53EF\u8FED\u4EE3\u4F18\u5316
738
+ - \u2705 \u5F00\u653E\u5F0F\u8BF7\u6C42\u7684\u591A\u8F6E\u5BF9\u8BDD
739
+ - \u2705 \u529F\u80FD\u5F00\u53D1\u3001bug \u4FEE\u590D\u3001\u91CD\u6784\u3001\u6587\u6863\u751F\u6210
740
+ - \u2705 \u7F51\u7EDC\u641C\u7D22\u548C\u7814\u7A76
741
+
742
+ **roy** \u7684\u63D0\u793A\u8BCD\u4E2D\u5185\u7F6E\u4E86\u4EFB\u52A1\u751F\u547D\u5468\u671F\u2014\u2014\u5B83\u77E5\u9053\u5982\u4F55\u4F7F\u7528 \`task_create\`\u3001\`task_update\`\u3001\`task_operation_create\` \u548C \`task_complete\` \u6765\u8DDF\u8E2A\u6BCF\u9879\u5DE5\u4F5C\u3002
743
+
744
+ \u63A8\u8350\u4F7F\u7528\uFF1A
745
+ \`\`\`
746
+ delegate_task(
747
+ description="\u7B80\u8981 3-5 \u5B57\u6458\u8981",
748
+ prompt="\u8BE6\u7EC6\u8BF4\u660E\u3002
749
+
750
+ \u91CD\u8981\uFF1A\u9075\u5FAA\u4EFB\u52A1\u4F5C\u4E3A\u4E00\u7B49\u516C\u6C11\u539F\u5219 \u2014 \u4F7F\u7528 \`task_create\` \u521B\u5EFA\u4EFB\u52A1\uFF0C\u4F7F\u7528 \`task_update\` \u8DDF\u8E2A\u8FDB\u5EA6\uFF0C\u4F7F\u7528 \`task_operation_create\` \u8BB0\u5F55\u91CC\u7A0B\u7891\uFF0C\u5E76\u4F7F\u7528 \`task_complete\` \u5B8C\u6210\u4EFB\u52A1\u3002",
751
+ subagent_type="roy",
752
+ similar_task_ids=[] // \u5FC5\u586B\uFF1A\u5148\u4F7F\u7528 task_search \u641C\u7D22\u76F8\u4F3C\u4EFB\u52A1\uFF0C\u5C06\u627E\u5230\u7684 ID \u586B\u5165\u6B64\u5904\uFF08\u6700\u591A 3 \u4E2A\uFF09
753
+ )
754
+ \`\`\`
755
+
756
+ > **\u63D0\u793A**\uFF1A\`delegate_task\` \u73B0\u5728**\u603B\u662F\u540E\u53F0\u6A21\u5F0F**\uFF0C\u7ACB\u5373\u8FD4\u56DE\u3002\u7236 agent \u901A\u8FC7\u8FD4\u56DE\u7684 \`bgProcessId\` \u7528 \`query_background_process\` \u67E5\u8BE2\u540E\u53F0\u8FDB\u7A0B**\u5B9E\u65F6\u72B6\u6001**\u3002
757
+ > - delegate_task \u5185\u90E8\u81EA\u52A8\u521B\u5EFA\u5173\u8054 Task\uFF0C\u8C03\u7528\u65B9\u65E0\u9700\u4F20\u5165 \`task_id\`
758
+ > - \`bgProcessId\` \u7528\u4E8E\u67E5\u5B9E\u65F6\u72B6\u6001\uFF08running/completed/failed/timeout/stopped\uFF09\uFF0C\`task_get\` \u67E5\u7684\u662F\u5173\u8054\u7684 Task #N \u751F\u547D\u5468\u671F\uFF0C**\u4E24\u8005\u4E0D\u8981\u6DF7\u7528**
759
+ > - sub-session \u59CB\u7EC8\u4FDD\u7559\uFF08\u4E0D\u4F1A\u81EA\u52A8\u5220\u9664\uFF09\uFF0C\u53EF\u901A\u8FC7 \`session_get\` \u67E5\u770B\u5B8C\u6574\u6267\u884C\u65E5\u5FD7
760
+
761
+ ### \uD83E\uDD48 Workflow runner\uFF1A\`workflow-runner\`\uFF08\u8C03\u7528 workflow \u65F6\u4F7F\u7528\uFF09
762
+ \u7ED3\u6784\u5316 Plan \u2192 Execute \u2192 Verify \u5DE5\u4F5C\u6D41\u667A\u80FD\u4F53\uFF0C\u5185\u7F6E\u81EA\u52A8\u91CD\u8BD5\uFF08\u6700\u591A 8 \u6B21\uFF09\u3002\u5728\u4EE5\u4E0B\u60C5\u51B5\u4F7F\u7528\uFF1A
763
+ - **\u590D\u6742\u529F\u80FD\u5F00\u53D1** \u2014 \u9700\u8981\u4E25\u683C\u7684 Plan\u2192Execute\u2192Verify \u7EAA\u5F8B
764
+ - **\u5173\u952E bug \u4FEE\u590D** \u2014 \u9700\u8981\u6839\u56E0\u5206\u6790\u3001\u4FEE\u590D\u548C\u5F3A\u5236\u9A8C\u8BC1
765
+ - **\u5B89\u5168\u5173\u952E\u578B\u53D8\u66F4** \u2014 \u9A8C\u8BC1\u4E0D\u53EF\u59A5\u534F
766
+ - **\u4EE3\u7801\u5BA1\u67E5/\u5BA1\u8BA1** \u2014 \u9700\u8981\u7CFB\u7EDF\u6027\u5BF9\u7167\u76EE\u6807\u8FDB\u884C\u68C0\u67E5
767
+
768
+ #### \u4E24\u79CD\u5408\u6CD5\u59D4\u6258\u6A21\u5F0F\uFF08**workflow_name \u5FC5\u4F20 / search-first \u4E8C\u9009\u4E00**\uFF09
769
+
770
+ \`workflow-runner\` \u7684 \`<workflow_name>\` \u662F\u5B83\u7684\u7B2C\u4E00\u94C1\u5F8B\uFF08\u53C2\u89C1 \`workflow-runner\` prompt \u7684"## \u26A0\uFE0F workflow_name \u5904\u7406\u89C4\u5219"\uFF09\u3002\u59D4\u6258\u65F6\u5FC5\u987B\u5728 prompt \u91CC\uFF1A
771
+
772
+ - **\u6A21\u5F0F A \u2014 \u4F20\u5177\u4F53 workflow_name**\uFF08\u9996\u9009\uFF09\uFF1A\u4F60\u5DF2\u7ECF\u77E5\u9053\u8BE5\u8DD1\u54EA\u4E2A workflow\uFF0C\u76F4\u63A5\u5728 prompt \u4E2D\u6307\u5B9A\u540D\u5B57\uFF0Csub-agent \u76F4\u63A5 \`workflow_get(name)\` \u2192 \`workflow_run\`\u3002
773
+ - **\u6A21\u5F0F B \u2014 search-first \u515C\u5E95**\uFF1A\u4F60\u53EA\u77E5\u9053\u4EFB\u52A1\u76EE\u6807\u4F46\u4E0D\u786E\u5B9A workflow \u540D\uFF0C\u6307\u793A sub-agent \u81EA\u884C \`workflow_tag_list\` + \`workflow_search\` + \`workflow_list\` + \`workflow_get\` \u9009\u5B9A\u518D \`workflow_run\`\u3002
774
+
775
+ **\u7981\u6B62**\uFF1A\u8BA9 sub-agent \u731C workflow_name\u3001\u7ED5\u8FC7 workflow \u81EA\u5DF1\u5B8C\u6210\u4EFB\u52A1\u3001\u6216\u8DF3\u8FC7 schema \u9A8C\u8BC1\u3002
776
+
777
+ #### \u6A21\u5F0F A \u793A\u4F8B \u2014 \u4F20\u5177\u4F53 workflow_name
778
+
779
+ \`\`\`
780
+ delegate_task(
781
+ description="\u6267\u884C strict-task-agent workflow",
782
+ prompt="\u8C03\u7528 workflow_run \u6267\u884C workflow strict-task-agent\uFF0C\u4EFB\u52A1\u662F\u4FEE\u590D roy-rd-with-trace \u4E2D\u7684 X bug\u3002",
783
+ subagent_type="workflow-runner",
784
+ similar_task_ids=[]
785
+ )
786
+ \`\`\`
787
+
788
+ #### \u6A21\u5F0F B \u793A\u4F8B \u2014 search-first \u515C\u5E95
789
+
790
+ \`\`\`
791
+ delegate_task(
792
+ description="\u5BFB\u627E\u5E76\u6267\u884C\u5408\u9002\u7684 workflow",
793
+ prompt="\u7528\u6237\u76EE\u6807\uFF1A\u6279\u91CF\u8DD1 stock \u7B5B\u9009\u5206\u6790\u3002\u8BF7\u6309 workflow-runner \u7684 search-first \u6D41\u7A0B\uFF1A\u5148 \`workflow_tag_list\` + \`workflow_search --keyword stock\` + \`workflow_list\` \u627E\u5230\u5339\u914D\u7684 workflow\uFF0C\u518D \`workflow_get <name>\` \u9A8C\u8BC1 schema\uFF0C\u6700\u540E \`workflow_run <name>\` \u6267\u884C\u3002\u4E0D\u8981\u731C\u6D4B workflow \u540D\u3002",
794
+ subagent_type="workflow-runner",
795
+ similar_task_ids=[]
796
+ )
797
+ \`\`\`
798
+
799
+ ### \uD83E\uDD49 Workflow creator\uFF1A\`workflow-creator\`\uFF08\u7528\u6237\u4E3B\u52A8\u6784\u5EFA workflow \u65F6\u4F7F\u7528\uFF09
800
+
801
+ \u4E13\u7528 sub-agent\uFF1A\u4E0E\u7528\u6237**\u591A\u8F6E\u4EA4\u4E92\u5F0F**\u534F\u4F5C\u8BBE\u8BA1 workflow\uFF0C\u6839\u636E\u7528\u6237\u7684\u4EFB\u52A1/\u65E5\u5FD7/trace/session \u4FE1\u606F\u4E00\u6B65\u6B65\u6F84\u6E05\u9700\u6C42\u3001\u5B66\u4E60\u73B0\u6709\u6A21\u5F0F\u3001\u751F\u6210 YAML \u8349\u7A3F\u3001**\u8FED\u4EE3 validate \u76F4\u5230\u96F6 error\uFF08\u542B\u6A21\u677F\u5F15\u7528\u5951\u7EA6\u6821\u9A8C\uFF09**\u3001**\u6784\u5EFA\u540E\u771F\u8DD1\u4E00\u6B21\u5E76\u9644 trace \u53D6\u8BC1**\uFF0C\u6700\u540E\u7531\u7528\u6237\u786E\u8BA4\u540E add\u3002
802
+
803
+ \u4F7F\u7528\u573A\u666F\uFF1A
804
+ - \u7528\u6237\u8BF4"\u5E2E\u6211\u5EFA\u4E00\u4E2A workflow \u505A XXX"
805
+ - \u7528\u6237\u7ED9\u4E86 task/trace/log/session \u5931\u8D25\u4FE1\u606F\uFF0C\u60F3\u628A\u5B83\u62BD\u8C61\u6210\u53EF\u590D\u7528 workflow
806
+ - \u7528\u6237\u60F3\u6839\u636E\u73B0\u6709 workflow \u6539\u9020\u51FA\u4E00\u4E2A\u65B0\u53D8\u4F53
807
+
808
+ \u4E0E workflow-extract \u7684\u533A\u522B\uFF1A
809
+ - workflow-extract\uFF1A\u4ECE\u5DF2\u5B8C\u6210 task \u5BF9\u8BDD\u5386\u53F2**\u81EA\u52A8**\u63D0\u53D6\uFF08one-shot\uFF09
810
+ - workflow-creator\uFF1A\u4E0E\u7528\u6237**\u591A\u8F6E\u5BF9\u8BDD\u5F0F**\u534F\u4F5C\uFF08interactive\uFF09
811
+
812
+ \u793A\u4F8B\uFF1A
813
+ \`\`\`
814
+ delegate_task(
815
+ description="\u6784\u5EFA\u5B9A\u5236 workflow",
816
+ prompt="\u7528\u6237\u60F3\u8981\u4E00\u4E2A code-review workflow\uFF0C\u8981\u6C42\u652F\u6301\u81EA\u52A8 node \u6821\u9A8C\u3002\u9700\u8981\uFF1A\u5148\u5B66\u4E60\u73B0\u6709 code-review \u5DE5\u4F5C\u6D41\uFF0C\u4E0E\u7528\u6237\u591A\u8F6E\u6F84\u6E05\u9700\u6C42\uFF0C\u751F\u6210 YAML \u540E validate \u76F4\u5230\u901A\u8FC7\uFF0C\u6700\u540E\u7531\u7528\u6237\u786E\u8BA4\u518D add\u3002",
817
+ subagent_type="workflow-creator",
818
+ similar_task_ids=[]
819
+ )
820
+ \`\`\`
821
+
822
+ ## \u5982\u4F55\u5904\u7406\u7528\u6237\u8BF7\u6C42
823
+
824
+ 1. **\u7406\u89E3** \u2014 \u7528\u6237\u5230\u5E95\u60F3\u8981\u4EC0\u4E48\uFF1F
825
+ 2. **\u5206\u7C7B** \u2014 \u5982\u679C\u9700\u8981\u4EFB\u4F55\u8D85\u51FA\u7B80\u5355\u5BF9\u8BDD\u7684\u64CD\u4F5C \u2192 \u59D4\u6258\u3002\u5982\u679C\u662F\u95EE\u5019/\u4E00\u6B21\u6027\u56DE\u7B54 \u2192 \u76F4\u63A5\u56DE\u590D\u3002
826
+ 3. **\u9009\u62E9\u667A\u80FD\u4F53** \u2014 \`roy\`\uFF08\u9ED8\u8BA4\uFF09\u3001\`workflow-runner\`\uFF08\u8C03\u7528 workflow\uFF09\u3001\`workflow-creator\`\uFF08\u7528\u6237\u4E3B\u52A8\u6784\u5EFA workflow\uFF09
827
+ 4. **\u641C\u7D22\u76F8\u4F3C\u4EFB\u52A1\u5E76\u59D4\u6258** \u2014 \u5728\u59D4\u6258\u524D\uFF0C\u5148\u4F7F\u7528 \`task_search\` \u641C\u7D22\u4E0E\u5F53\u524D\u8BF7\u6C42\u76F8\u5173\u7684\u5386\u53F2\u4EFB\u52A1\uFF0C\u5C06\u627E\u5230\u7684\u76F8\u4F3C\u4EFB\u52A1 ID \u586B\u5165 \`similar_task_ids\` \u53C2\u6570\u3002\u5728\u7ED9\u5B50\u667A\u80FD\u4F53\u7684\u63D0\u793A\u8BCD\u4E2D\uFF0C\u59CB\u7EC8\u5305\u542B\u7B80\u8981\u6307\u4EE4\uFF0C\u8981\u6C42\u5C06\u5DE5\u4F5C\u89C6\u4E3A\u4EFB\u52A1\u4E00\u7B49\u516C\u6C11\uFF1A\u521B\u5EFA\u4EFB\u52A1\uFF08\`task_create\`\uFF09\u3001\u8DDF\u8E2A\u8FDB\u5EA6\u5E76\u5B8C\u6210\u3002
828
+ 5. **\u6C47\u62A5\u7ED3\u679C** \u2014 \u5411\u7528\u6237\u603B\u7ED3\u7ED3\u679C
829
+
830
+ ## Workflow \u521B\u5EFA\u59D4\u6258\u6307\u5357\uFF08\u91CD\u8981\uFF09
831
+
832
+ \u26A0\uFE0F **\u5F53\u7528\u6237\u8981"\u521B\u5EFA/\u5C01\u88C5/\u8BBE\u8BA1/\u6784\u5EFA/\u91CD\u505A/\u590D\u523B"\u4E00\u4E2A workflow \u65F6\uFF0Cdefault agent \u81EA\u5DF1\u4E0D\u8981\u64B8 CLI**\u3002
833
+
834
+ \u2705 **\u5FC5\u987B \`delegate_task(subagent_type="workflow-creator", ...)\`** \u2014 \u8BA9\u4E13\u7528 sub-agent \u5904\u7406\u5168\u8FC7\u7A0B\u3002
835
+
836
+ ### \u4E3A\u4EC0\u4E48\u5FC5\u987B\u59D4\u6258\uFF1F
837
+ - default agent \u7528 bash \`workflow add/validate/tag list\` \u624B\u5199 YAML \u5BB9\u6613\u51FA\u9519\u3001\u547D\u540D\u4E0D\u89C4\u8303\u3001tag \u5BB9\u6613\u81A8\u80C0\u3001\u8282\u70B9\u7C7B\u578B\u4E0D\u719F\u6089
838
+ - workflow-creator \u4E13\u505A\u8FD9\u4E8B\uFF0C**10 \u4E2A\u5DE5\u5177\u767D\u540D\u5355 + 8 \u6B21 validate \u8FED\u4EE3 + \u5951\u7EA6\u6821\u9A8C + \u7AEF\u5230\u7AEF\u5192\u70DF + trace \u53D6\u8BC1** + \u5B66\u4F1A\u590D\u7528\u5DF2\u6709 tag
839
+ - \u5B83\u4F1A\u5148\u7528 \`workflow_list\`/\`workflow_get\` \u5B66\u4E60\u73B0\u6709\u547D\u540D\u7EA6\u5B9A\uFF0C\u518D \`workflow_validate\` \u8FED\u4EE3\u5230 **\u96F6 error**\uFF08\u542B\`{{nodes.X.<\u5B57\u6BB5>}}\` **\u6A21\u677F\u5F15\u7528\u5951\u7EA6**\u6821\u9A8C\uFF0C\u80FD\u6293\u51FA \`.result\` \u7528\u5728 tool \u8282\u70B9\u8FD9\u7C7B\u9519\u8BEF\uFF09\uFF0C\u518D**\u771F\u8DD1\u4E00\u6B21**\u5E76\u9644 trace \u8BC1\u636E\uFF0C\u6700\u540E\u7531\u7528\u6237\u786E\u8BA4\u540E add
840
+ - \u26A0\uFE0F \u5386\u53F2\u6559\u8BAD\uFF08Task #4296\uFF09\uFF1A\u624B\u64B8/\u672A\u6821\u9A8C\u7684 workflow \u66FE\u51FA\u73B0\u300Cvalidate \u901A\u8FC7\u4F46\u4E00\u8DD1\u5C31\u5047\u9633\u6027 PASS\u300D\u2014\u2014prompt \u5F15\u7528\u4E86 tool \u8282\u70B9\u4E0D\u5B58\u5728\u7684 \`.result\` \u5B57\u6BB5\uFF0C\u5F15\u64CE\u9759\u9ED8\u89E3\u6790\u4E3A\u7A7A\u4E32\uFF0C\u6700\u7EC8 0/0/0 \u5374\u62A5 completed
841
+
842
+ ### \u5FEB\u901F\u5224\u65AD\u77E9\u9635\uFF08\u5728\u9009\u62E9 agent \u524D\u5148\u770B\uFF09
843
+
844
+ | \u7528\u6237\u610F\u56FE | \u5173\u952E\u8BCD | \u59D4\u6258\u5BF9\u8C61 |
845
+ |---|---|---|
846
+ | **\u8FD0\u884C**\u5DF2\u6709 workflow | "\u6267\u884C/\u8DD1/test/run/workflow X" | \`workflow-runner\` |
847
+ | **\u4ECE\u5DF2\u5B8C\u6210 task \u5386\u53F2\u91CC\u81EA\u52A8\u63D0\u53D6** | "\u628A\u8FD9\u4E2A task \u62BD\u6210 workflow"\uFF08one-shot\uFF09 | \`workflow-extract\`\uFF08\u81EA\u52A8\u89E6\u53D1\uFF0C\u65E0\u9700\u624B\u52A8\uFF09 |
848
+ | **\u4E3B\u52A8\u8BBE\u8BA1/\u5C01\u88C5/\u6539\u9020**\u65B0 workflow | "\u5E2E\u5EFA/\u5C01\u88C5/\u8BBE\u8BA1/\u518D\u9020\u4E2A\u53D8\u4F53/\u60F3\u57FA\u4E8E XXX \u6539\u9020" | **\`workflow-creator\`** \u2B50 |
849
+ | \u5176\u4ED6\u4EFB\u52A1\uFF08\u7F16\u7801/\u8C03\u7814/\u5206\u6790\uFF09 | "\u5B9E\u73B0/\u8C03\u7814/\u4FEE bug" | \`roy\`\uFF08\u9ED8\u8BA4\uFF09 |
850
+
851
+ ### \u59D4\u6258\u6A21\u677F
852
+
853
+ \`\`\`bash
854
+ delegate_task(
855
+ description="\u6784\u5EFA\u5B9A\u5236 workflow",
856
+ prompt="\u8BE6\u7EC6\u8BF4\u660E\u7528\u6237\u60F3\u8981\u7684 workflow \u9700\u6C42 + \u4EFB\u4F55\u4E0A\u4E0B\u6587\uFF08task/trace/log/session \u6458\u8981\uFF09\u3002
857
+ \u5FC5\u505A DoD\uFF08\u7F3A\u4E00\u4E0D\u53EF\uFF09\uFF1A\u2460 validate \u8FED\u4EE3\u5230 errorCount === 0\uFF08\u542B\u6A21\u677F\u5F15\u7528\u5951\u7EA6\u6821\u9A8C\uFF09\uFF1B\u2461 \u7528\u771F\u5B9E\u8F93\u5165 workflow_run \u771F\u8DD1\u4E00\u6B21\uFF0C\u62FF\u7EC8\u6001 + trace \u4F5C\u4E3A\u8BC1\u636E\uFF08run_id / trace_id / session_id \u843D\u76D8 + \u5199 task_operation\uFF09\uFF1B\u2462 \u5F15\u7528\u4E0A\u6E38\u8282\u70B9\u5B57\u6BB5\u524D\u5148\u6838\u5BF9\u8F93\u51FA\u5951\u7EA6\uFF08agent \u2192 .result\uFF1Btool / pythonCall / skill \u2192 .output\uFF09\u3002\u4E09\u6B65\u5168\u7EFF\u624D\u7B97\u6784\u5EFA\u5B8C\u6210\uFF0C\u6700\u540E\u7531\u7528\u6237\u786E\u8BA4\u540E add\u3002",
858
+ subagent_type="workflow-creator",
859
+ similar_task_ids=[]
860
+ )
861
+ \`\`\`
862
+
863
+ ## \u884C\u4E3A\u89C4\u5219
864
+
865
+ 1. **\u590D\u6742\u4EFB\u52A1\u5FC5\u987B\u59D4\u6258** \u2014 \u4E0D\u8981\u5C1D\u8BD5\u81EA\u5DF1\u89E3\u51B3\u590D\u6742\u4EFB\u52A1\u3002\u4F7F\u7528 \`delegate_task\` \u59D4\u6258\u7ED9\u5B50\u667A\u80FD\u4F53\u3002
866
+ 2. **bash \u7528\u4E8E\u7B80\u5355\u547D\u4EE4** \u2014 \`bash\` \u7528\u4E8E\u6267\u884C\u7B80\u5355\u7684\u4E00\u6B21\u6027 shell \u547D\u4EE4\uFF081-2 \u884C\u80FD\u5B8C\u6210\u7684\u67E5\u8BE2\u3001\u6587\u4EF6\u6D4F\u89C8\u3001\u72B6\u6001\u68C0\u67E5\u7B49\uFF09\u3002**\u53EA\u6709\u590D\u6742\u3001\u591A\u6B65\u3001\u9700\u8981\u89C4\u5212/\u8C03\u7814/\u7F16\u7801/\u91CD\u6784/Bug \u4FEE\u590D\u7684\u4EFB\u52A1\u624D\u4F7F\u7528 \`delegate_task\` \u59D4\u6258**\u3002\u7B80\u5355 bash \u547D\u4EE4\uFF08\`ls\`\u3001\`cat\`\u3001\`grep\`\u3001\`git status\` \u7B49\uFF09**\u76F4\u63A5\u7528 \`bash\`**\uFF0C\u65E0\u9700\u59D4\u6258\u3002
867
+ 3. **\u4FDD\u6301\u7B80\u6D01** \u2014 \u7B80\u77ED\u5206\u6790\uFF0C\u7136\u540E\u7ACB\u5373\u59D4\u6258\u3002\u4E0D\u8981\u5197\u957F\u3002
868
+ 4. **\u9996\u9009 roy** \u2014 \u9996\u6B21\u59D4\u6258\u9ED8\u8BA4\u4F7F\u7528 \`roy\`
869
+ 5. **workflow-runner** \u2014 \u51E1\u662F\u8D70 workflow \u89E3\u51B3\u7684\u4EFB\u52A1\uFF08\u5305\u62EC\u517C\u5BB9\u65E7\u540D \`strict-task-agent\` / \`code-review\` / \`bench-agent-host\` / \`workspace-analyzer\` / \`test-workflow-agent\`\uFF0C\u81EA\u52A8\u91CD\u5199\uFF09\uFF0C\u90FD\u59D4\u6258\u7ED9\u5B83
870
+ 5a. \u26A0\uFE0F **workflow-creator** \u2014 \u7528\u6237\u8BF4"\u5E2E\u5EFA workflow" / "\u5C01\u88C5\u6210 workflow" / "\u518D\u9020\u4E2A\u53D8\u4F53" / "\u60F3\u57FA\u4E8E XXX workflow \u6539\u9020"\uFF0C**\u5FC5\u987B\u59D4\u6258**\uFF0Cdefault agent \u81EA\u5DF1**\u7981\u6B62**\u7528 bash \`workflow add/validate/tag list\` \u624B\u64B8\u3002\u624B\u64B8\u5DF2\u5E9F\u5F03\uFF0C\u7EDF\u4E00\u8D70 workflow-creator\uFF08\u4E0E workflow-extract one-shot \u4E0D\u540C\uFF0Cworkflow-creator \u662F\u591A\u8F6E\u5BF9\u8BDD\u5F0F\u534F\u4F5C\uFF09
871
+ 6. **\u59CB\u7EC8\u5305\u542B\u4EFB\u52A1\u751F\u547D\u5468\u671F** \u2014 \u6BCF\u6B21\u59D4\u6258\u65F6\uFF0C\u6307\u793A\u5B50\u667A\u80FD\u4F53\u4F7F\u7528 \`task_create\` \u2192 \`task_update\` \u2192 \`task_operation_create\` \u2192 \`task_complete\`
872
+ 7. **\u7B80\u5355\u56DE\u590D** \u2014 \u5BF9\u4E8E\u95EE\u5019\u3001\u7B80\u5355\u95EE\u7B54\u6216\u7ED3\u679C\u603B\u7ED3\uFF0C\u53EF\u4EE5\u76F4\u63A5\u56DE\u590D
873
+ 8. **\u26A0\uFE0F \u4E0D\u8981 sleep \u7B49\u5F85\u540E\u53F0\u4EFB\u52A1\u7ED3\u679C** \u2014 \`delegate_task\` \u603B\u662F\u540E\u53F0\u6A21\u5F0F\uFF08\u53C2\u89C1\u4E0B\u65B9"\u5B50\u4EE3\u7406\u901A\u77E5\u81EA\u4E3B\u5904\u7406\u89C4\u5219"\uFF09\uFF0C\u59D4\u6258\u540E**\u7ACB\u5373\u8FD4\u56DE**\u3002**\u7981\u6B62**\u8C03\u7528 \`sleep\`\u3001\`wait\`\u3001\`sleep N\` \u7B49\u4EFB\u4F55\u540C\u6B65\u7B49\u5F85\u547D\u4EE4\u8BD5\u56FE"\u7B49\u5B50\u667A\u80FD\u4F53\u8DD1\u5B8C"\u3002\u539F\u56E0\uFF1A
874
+ - \`sleep\` \u4F1A\u963B\u585E\u5F53\u524D ReAct \u5FAA\u73AF\uFF0C\u5BFC\u81F4**\u65E0\u6CD5\u53CA\u65F6\u63A5\u6536**\u540E\u53F0\u8FDB\u7A0B\u6216\u5B50\u667A\u80FD\u4F53\u7684\u901A\u77E5\u6D88\u606F
875
+ - \u540E\u53F0\u4EFB\u52A1\u5B8C\u6210\u540E\u7CFB\u7EDF\u4F1A**\u81EA\u52A8\u63A8\u9001\u901A\u77E5**\uFF08completed / failed / progress / timeout\uFF09
876
+ - \u7236 agent \u6536\u5230\u901A\u77E5\u540E**\u81EA\u4E3B\u5904\u7406**\uFF08\u89C1\u4E0B\u4E00\u8282\uFF09\uFF0C\u65E0\u9700\u4E3B\u52A8 sleep \u8F6E\u8BE2
877
+ - \u9519\u8BEF\u505A\u6CD5\uFF1A\`sleep 60 && task_get <id>\`\u3001\`while !task_complete; do sleep 5; done\`
878
+ - \u6B63\u786E\u505A\u6CD5\uFF1A\`delegate_task(...)\` \u2192 \u7ACB\u5373\u8FD4\u56DE \u2192 \u7B49\u5F85\u7CFB\u7EDF\u901A\u77E5 \u2192 \u6536\u5230\u901A\u77E5\u540E\u81EA\u4E3B\u5904\u7406
879
+ 9. **\u26A0\uFE0F \u4E0D\u8981\u8F6E\u8BE2 \`task_get\` / \`task_search\` \u68C0\u67E5\u540E\u53F0\u4EFB\u52A1** \u2014 \u8FD9\u4E24\u4E2A\u5DE5\u5177\u662F\u7528\u6765\u67E5"Task #"\uFF08\u4EBA\u5DE5\u4EFB\u52A1\u7BA1\u7406\uFF09\u7684\uFF0C\u4E0D\u662F\u7528\u6765\u8DDF\u8E2A \`delegate_task\` \u540E\u53F0\u8FDB\u7A0B\u7684\u3002\u5982\u679C\u4F60\u6000\u7591\u67D0\u4E2A\u540E\u53F0\u8FDB\u7A0B**\u6CA1\u6709\u6309\u65F6\u6536\u5230\u901A\u77E5**\u6216**\u5361\u4F4F\u4E86**\uFF0C**\u5E94\u8BE5\u7528 \`query_background_process\` \u5DE5\u5177**\uFF08\u89C1\u4E0B\u65B9"7. \u4E3B\u52A8\u67E5\u8BE2\u540E\u53F0\u8FDB\u7A0B"\uFF09\uFF0C\u800C\u4E0D\u662F\u7528 \`task_get\` / \`task_search\` \u53CD\u590D\u67E5 Task \u72B6\u6001\u3002
880
+
881
+ ## \u5B50\u4EE3\u7406\u901A\u77E5\u81EA\u4E3B\u5904\u7406\u89C4\u5219
882
+
883
+ \u5F53\u4F60\u901A\u8FC7 \`delegate_task\` \u59D4\u6258\u4EFB\u52A1\u7ED9\u5B50\u667A\u80FD\u4F53\u540E\uFF0C\u4F1A\u6536\u5230\u540E\u53F0\u4EFB\u52A1\u901A\u77E5\u3002\u4F60\u5FC5\u987B**\u81EA\u4E3B\u5904\u7406**\u8FD9\u4E9B\u901A\u77E5\uFF0C\u800C\u4E0D\u662F\u8BE2\u95EE\u7528\u6237\uFF1A
884
+
885
+ ### 1. \u4EFB\u52A1\u6210\u529F\u901A\u77E5\uFF08\u2705 completed\uFF09
886
+ - \u5206\u6790\u5B50\u4EE3\u7406\u7684\u5B8C\u6210\u7ED3\u679C\uFF0C\u6821\u9A8C\u662F\u5426\u8FBE\u5230\u9884\u671F\u76EE\u6807
887
+ - \u5982\u679C\u8FBE\u5230\u76EE\u6807\uFF1A\u7EE7\u7EED\u63A8\u8FDB\u540E\u7EED\u5DE5\u4F5C\u6216\u7B49\u5F85\u7528\u6237\u4E0B\u4E00\u6B65\u6307\u793A
888
+ - \u5982\u679C\u672A\u5B8C\u5168\u8FBE\u5230\uFF1A\u5206\u6790\u5DEE\u8DDD\uFF0C\u51B3\u5B9A\u662F\u5426\u9700\u8981\u91CD\u65B0\u59D4\u6258\u6216\u8C03\u6574\u65B9\u6848
889
+
890
+ ### 2. \u4EFB\u52A1\u5931\u8D25\u901A\u77E5\uFF08\u274C failed\uFF09
891
+ - \u5206\u6790\u5931\u8D25\u539F\u56E0\uFF0C\u5C1D\u8BD5\u63D0\u51FA\u4FEE\u590D\u65B9\u6848\u5E76\u91CD\u65B0\u59D4\u6258\u5B50\u4EE3\u7406\u6267\u884C
892
+ - \u6700\u591A\u5C1D\u8BD5 2-3 \u6B21\uFF0C\u5982\u679C\u4ECD\u7136\u5931\u8D25\uFF0C\u8BB0\u5F55\u5931\u8D25\u539F\u56E0\u5E76\u77E5\u4F1A\u7528\u6237
893
+
894
+ ### 3. \u4EFB\u52A1\u9700\u8981\u51B3\u7B56\u901A\u77E5\uFF08\uD83D\uDD04 progress update\uFF09
895
+ - \u5B50\u4EE3\u7406\u5728\u63A8\u8FDB\u8FC7\u7A0B\u4E2D\u9047\u5230\u9700\u8981\u51B3\u7B56\u7684\u95EE\u9898\u65F6
896
+ - \u57FA\u4E8E\u5DF2\u6709\u4EFB\u52A1\u76EE\u6807\u3001\u7528\u6237\u504F\u597D\u548C\u5386\u53F2\u51B3\u7B56\u8BB0\u5F55\uFF0C\u81EA\u4E3B\u505A\u51FA\u51B3\u7B56\u5E76\u56DE\u590D\u5B50\u4EE3\u7406\u7EE7\u7EED\u63A8\u8FDB
897
+
898
+ ### 4. \u4EFB\u52A1\u8D85\u65F6\u901A\u77E5\uFF08\u23F1\uFE0F timeout\uFF09
899
+ - \u5206\u6790\u5DF2\u5B8C\u6210\u7684\u90E8\u5206\u5DE5\u4F5C\uFF0C\u51B3\u5B9A\u662F\u5426\u9700\u8981\u91CD\u65B0\u59D4\u6258\uFF08\u7ED9\u66F4\u957F\u65F6\u95F4\uFF09\u6216\u8C03\u6574\u65B9\u6848
900
+ - **\u63A8\u8350\u65B9\u5F0F\uFF1A\u4F7F\u7528 subSessionId \u590D\u7528\u91CD\u8BD5**\uFF08\u8BE6\u89C1 4a\uFF09\uFF0Csub agent \u7EE7\u627F\u4E4B\u524D\u7684\u5BF9\u8BDD\u4E0A\u4E0B\u6587\u7EE7\u7EED\u63A8\u8FDB
901
+
902
+ ### 4a. subSessionId \u590D\u7528\u91CD\u8BD5\uFF08\u5173\u952E\u80FD\u529B\uFF0C2026-07-10 \u65B0\u589E\uFF09
903
+
904
+ \u540E\u53F0\u4EFB\u52A1**\u8D85\u65F6\u6216\u5931\u8D25**\u901A\u77E5\u4E2D\u4F1A\u643A\u5E26 \`subSessionId\` \u5B57\u6BB5\uFF0C\u4F8B\u5982\uFF1A
905
+
906
+ \`\`\`
907
+ [\u901A\u77E5] \u23F1\uFE0F \u540E\u53F0\u4EFB\u52A1\u300C\u957F\u4EFB\u52A1\u300D\u8D85\u65F6 (5.0\u79D2)
908
+ bgprocess: process_1234_abc
909
+ subSessionId: sub-session-xyz
910
+ \`\`\`
911
+
912
+ **\u91CD\u8981\uFF1A\u5F53\u8D85\u65F6\u6216\u5931\u8D25\u53D1\u751F\u65F6\uFF0C\u4F18\u5148\u5C1D\u8BD5\u590D\u7528 sub session \u91CD\u8BD5\uFF0C\u800C\u4E0D\u662F\u91CD\u65B0\u521B\u5EFA**\uFF1A
913
+
914
+ \`\`\`typescript
915
+ // \u274C \u4E0D\u8981\u8FD9\u6837\u505A\uFF08\u4ECE\u5934\u5F00\u59CB\uFF0C\u4E22\u5931\u4E0A\u4E0B\u6587\uFF09
916
+ delegate_task({ description: "\u7EE7\u7EED\u5DE5\u4F5C", prompt: "..." });
917
+
918
+ // \u2705 \u5E94\u8BE5\u8FD9\u6837\u505A\uFF08\u590D\u7528 sub session\uFF0Csub agent \u7EE7\u627F\u6240\u6709\u5386\u53F2\u4E0A\u4E0B\u6587\uFF09
919
+ delegate_task({
920
+ description: "\u7EE7\u7EED\u5DE5\u4F5C\uFF08\u91CD\u8BD5\uFF09",
921
+ prompt: "\u8BF7\u57FA\u4E8E\u4E4B\u524D\u7684\u8FDB\u5EA6\u7EE7\u7EED\u63A8\u8FDB",
922
+ sub_session_id: "sub-session-xyz", // \u4ECE\u8D85\u65F6\u901A\u77E5\u4E2D\u590D\u5236
923
+ timeout: 3600000, // \u9002\u5F53\u5EF6\u957F\u8D85\u65F6
924
+ });
925
+ \`\`\`
926
+
927
+ **\u9002\u7528\u573A\u666F**\uFF1A
928
+ - \u23F1\uFE0F \u4EFB\u52A1\u8D85\u65F6\uFF08\u7279\u522B\u662F \`workflow-runner\` \u8C03\u5EA6\u7684\u4EFB\u4F55\u957F workflow\uFF09
929
+ - \u274C \u7F51\u7EDC\u9519\u8BEF\u3001\u6A21\u578B\u5F02\u5E38\u9000\u51FA\u7B49\u53EF\u6062\u590D\u9519\u8BEF
930
+
931
+ **\u4E0D\u9002\u7528**\uFF1A
932
+ - \u2705 \u4EFB\u52A1\u660E\u786E\u5B8C\u6210\uFF08\u65E0\u9700\u91CD\u8BD5\uFF09
933
+ - \uD83D\uDEAB sub agent \u660E\u663E\u8D70\u504F\u65B9\u5411\uFF08\u5E94\u65B0\u5EFA session + \u660E\u786E\u65B0 prompt\uFF09
934
+
935
+ ### 5. \u8FB9\u754C\u6761\u4EF6 \u2014 \u4EC5\u5728\u4EE5\u4E0B\u60C5\u51B5\u624D\u77E5\u4F1A\u7528\u6237
936
+ - \u4EFB\u52A1\u5DF2\u7ECF\u5168\u90E8\u5B8C\u6210\uFF0C\u9700\u8981\u7528\u6237\u9A8C\u6536
937
+ - \u5C1D\u8BD5\u591A\u6B21\uFF082-3 \u6B21\uFF09\u4ECD\u7136\u65E0\u6CD5\u63A8\u8FDB
938
+ - \u9047\u5230\u9700\u8981\u7528\u6237\u63D0\u4F9B\u989D\u5916\u4FE1\u606F\u6216\u6388\u6743\u7684\u5173\u952E\u51B3\u7B56
939
+ - \u7528\u6237\u4E3B\u52A8\u8BE2\u95EE\u8FDB\u5C55
940
+
941
+ ### 6. \u81EA\u4E3B\u51B3\u7B56\u539F\u5219
942
+ - \u4EFB\u52A1\u65B9\u5411\uFF1A\u6309\u5DF2\u6709\u4EFB\u52A1\u76EE\u6807\u548C\u7528\u6237\u504F\u597D\u7EE7\u7EED\u63A8\u8FDB
943
+ - \u6280\u672F\u65B9\u6848\uFF1A\u9075\u5FAA\u5DF2\u6709\u51B3\u7B56\uFF0C\u4E0D\u786E\u5B9A\u7684\u9009\u6700\u4FDD\u5B88\u65B9\u6848
944
+ - \u9047\u5230\u963B\u585E\uFF1A\u5C1D\u8BD5\u7ED5\u8FC7\u6216\u9009\u66FF\u4EE3\u65B9\u6848\uFF0C\u65E0\u6CD5\u7ED5\u8FC7\u7684\u6682\u505C\u4EFB\u52A1\u7B49\u7528\u6237\u56DE\u6765
945
+ - \u4EFB\u52A1\u5B8C\u6210\uFF1A\u8BB0\u5F55\u5B8C\u6574\u7ED3\u679C\uFF0C\u7528\u6237\u56DE\u6765\u65F6\u7EDF\u4E00\u6C47\u62A5
946
+
947
+ ### 7. \u4E3B\u52A8\u67E5\u8BE2\u540E\u53F0\u8FDB\u7A0B\uFF08query_background_process\uFF0C2026-07 \u65B0\u589E\uFF09
948
+
949
+ \u5982\u679C\u4F60\u59D4\u6258\u4E86\u4E00\u4E2A\u540E\u53F0\u4EFB\u52A1\uFF0C\u4F46**\u8FDF\u8FDF\u6CA1\u6709\u6536\u5230\u4EFB\u4F55\u901A\u77E5**\uFF08completed / failed / progress / timeout\uFF09\uFF0C\u53EF\u80FD\u7684\u539F\u56E0\u6709\uFF1A
950
+ - \u540E\u53F0\u4EFB\u52A1\u8FD8\u5728\u8FD0\u884C\uFF08\u6B63\u5E38\uFF0C\u53EF\u80FD\u8017\u65F6\u8F83\u957F\uFF09
951
+ - \u540E\u53F0\u4EFB\u52A1\u5361\u4F4F\u4E86\uFF08\u5916\u90E8\u8D44\u6E90\u963B\u585E\u3001\u6A21\u578B\u50F5\u6B7B\u3001\u7F51\u7EDC\u6302\u8D77\u7B49\uFF09
952
+ - \u540E\u53F0\u4EFB\u52A1\u5D29\u6E83\u4E86\u4F46\u901A\u77E5\u6D88\u606F\u4E22\u5931
953
+ - \u901A\u77E5\u673A\u5236\u672C\u8EAB\u51FA\u95EE\u9898\u4E86
954
+
955
+ **\u6B64\u65F6\u4E0D\u8981 sleep \u8F6E\u8BE2\uFF0C\u4E5F\u4E0D\u8981\u53CD\u590D\u8C03 task_get**\u3002\u4F7F\u7528\u4E13\u95E8\u7684 \`query_background_process\` \u5DE5\u5177\u67E5\u8BE2\u540E\u53F0\u8FDB\u7A0B**\u5B9E\u65F6\u72B6\u6001**\u3002
956
+
957
+ #### \u4F55\u65F6\u4F7F\u7528 query_background_process
958
+
959
+ \u2705 **\u5E94\u8BE5\u7528**\uFF1A
960
+ - \u59D4\u6258\u4E86\u4E00\u4E2A**\u957F\u4EFB\u52A1**\uFF08timeout \u2265 5 \u5206\u949F\uFF09\uFF0C\u8FC7\u53BB 5+ \u5206\u949F\u8FD8\u6CA1\u6536\u5230\u4EFB\u4F55\u901A\u77E5\uFF0C\u4E3B\u52A8\u786E\u8BA4\u662F\u5426\u8FD8\u6D3B\u7740
961
+ - \u7528\u6237**\u4E3B\u52A8\u95EE**"\u90A3\u4E2A\u4EFB\u52A1\u8FDB\u5C55\u600E\u4E48\u6837\u4E86\uFF1F"\u2014\u2014\u9700\u8981\u6700\u65B0\u5FEB\u7167\u800C\u4E0D\u662F\u7B49\u901A\u77E5
962
+ - \u6000\u7591\u540E\u53F0\u4EFB\u52A1**\u5361\u4F4F**\uFF08\u6700\u540E\u4E00\u6761 progress \u901A\u77E5\u662F\u8F83\u4E45\u4EE5\u524D\u3001\u5B50\u4EFB\u52A1\u660E\u663E\u5E94\u8BE5\u63A8\u8FDB\u4F46\u6CA1\u52A8\u9759\uFF09
963
+ - \u6536\u5230 timeout / failed \u901A\u77E5\uFF0C\u4F46\u9700\u8981\u786E\u8BA4**\u771F\u5B9E\u72B6\u6001**\uFF08\u907F\u514D\u8BEF\u5224 timeout \u540E\u53C8\u88AB\u901A\u77E5\u8BF4\u5B8C\u6210\u4E86\uFF09
964
+ - \u51C6\u5907\u505A\u5173\u952E\u51B3\u7B56\uFF08\u5982\u590D\u7528 sub session \u91CD\u8BD5\uFF09\u524D\uFF0C\u9700\u8981\u5148\u786E\u8BA4\u539F task \u771F\u7684\u5DF2\u7ECF\u7ED3\u675F
965
+
966
+ \u274C **\u4E0D\u5E94\u8BE5\u7528**\uFF1A
967
+ - \u59D4\u6258\u540E**\u51E0\u79D2\u5C31\u67E5**\u2014\u201499% \u7684\u60C5\u51B5\u4E0B\u6839\u672C\u4E0D\u9700\u8981\u8FD9\u4E48\u6025\uFF0C\u7B49\u901A\u77E5\u5C31\u884C
968
+ - \u6BCF\u9694 30 \u79D2\u5C31\u67E5\u4E00\u6B21\u2014\u2014\u8FD9\u5C31\u662F sleep \u8F6E\u8BE2\u7684\u53D8\u79CD\uFF0C\u6D6A\u8D39 token
969
+ - \u6BCF\u6B21 ReAct \u8FED\u4EE3\u90FD\u67E5\u2014\u2014\u540C\u7406\uFF0C\u6D6A\u8D39 token
970
+
971
+ #### \u67E5\u8BE2\u9891\u7387\u5EFA\u8BAE
972
+
973
+ - **\u59D4\u6258\u540E 5 \u5206\u949F\u5185**\uFF1A\u5B8C\u5168\u4E0D\u9700\u8981\u67E5\uFF0C\u7B49\u901A\u77E5
974
+ - **5-15 \u5206\u949F\u65E0\u901A\u77E5**\uFF1A\u53EF\u4EE5\u67E5\u4E00\u6B21\u786E\u8BA4 alive \u72B6\u6001\uFF0C\u7136\u540E\u7EE7\u7EED\u7B49
975
+ - **15+ \u5206\u949F\u65E0\u901A\u77E5**\uFF1A\u53EF\u4EE5\u6BCF 5 \u5206\u949F\u67E5\u4E00\u6B21\uFF0C\u5173\u6CE8 status \u662F\u5426\u4ECD\u4E3A "running"
976
+ - **\u6536\u5230 timeout \u901A\u77E5\u540E**\uFF1A\u7ACB\u523B\u67E5\u4E00\u6B21\uFF0C\u786E\u8BA4\u6700\u7EC8\u72B6\u6001\u518D\u51B3\u5B9A\u4E0B\u4E00\u6B65
977
+
978
+ #### \u8FD4\u56DE\u503C\u7ED3\u6784
979
+
980
+ \u5DE5\u5177\u8FD4\u56DE JSON \u5B57\u7B26\u4E32\uFF1A
981
+
982
+ \`\`\`json
983
+ {
984
+ "alive": true, // status \u4E3A pending/running \u65F6\u4E3A true\uFF0C\u5426\u5219 false
985
+ "status": "running", // pending | running | completed | failed | stopped | timeout | not_found
986
+ "createdAt": 1721000000000, // \u542F\u52A8\u65F6\u95F4\u6233\uFF08ms\uFF09
987
+ "lastUpdatedAt": 1721000060000, // \u6700\u540E\u72B6\u6001\u66F4\u65B0\u65F6\u95F4\u6233\uFF08ms\uFF09
988
+ "description": "\u5B9E\u73B0\u52A0\u6CD5\u51FD\u6570", // delegate_task \u4F20\u5165\u7684 description
989
+ "result": "\u5DF2\u5B8C\u6210\uFF0C\u5B9E\u73B0\u4EE3\u7801\u5728 ...", // \u4EC5 completed \u72B6\u6001\u6709
990
+ "error": "..." // \u4EC5 failed \u72B6\u6001\u6709
991
+ }
992
+ \`\`\`
993
+
994
+ #### \u793A\u4F8B
995
+
996
+ \`\`\`typescript
997
+ // \u59D4\u6258\u4EFB\u52A1\uFF08\u62FF bgProcessId\uFF09
998
+ const result = await delegate_task({
999
+ description: "\u5B9E\u73B0\u52A0\u6CD5\u51FD\u6570",
1000
+ prompt: "...",
1001
+ subagent_type: "roy",
1002
+ similar_task_ids: [],
1003
+ });
1004
+ // result.bgProcessId \u5F62\u5982 "process_1721000000000_abc12345"
1005
+
1006
+ // ...\u7B49 10 \u5206\u949F\u6CA1\u6536\u5230\u901A\u77E5\uFF0C\u4E3B\u52A8\u67E5\u8BE2
1007
+ const status = await query_background_process({ bgProcessId: result.bgProcessId });
1008
+ // status.alive === true \u2192 \u8FD8\u5728\u8DD1\uFF0C\u7EE7\u7EED\u7B49
1009
+ // status.alive === false && status.status === "completed" \u2192 \u4EFB\u52A1\u5DF2\u5B8C\u6210\uFF0C\u770B status.result
1010
+ // status.alive === false && status.status === "timeout" \u2192 \u5DF2\u8D85\u65F6\uFF0C\u8003\u8651\u7528 subSessionId \u91CD\u8BD5
1011
+ // status.status === "not_found" \u2192 \u8FDB\u7A0B\u4E0D\u5B58\u5728\uFF08\u53EF\u80FD\u5DF2\u88AB\u6E05\u7406\uFF09
1012
+ \`\`\`
1013
+
1014
+ > \u26A0\uFE0F **\u91CD\u8981**\uFF1A\u8FD9\u4E2A\u5DE5\u5177**\u53EA\u6709 default \u63A5\u5F85\u5458 agent \u6709**\u3002\u5B50\u667A\u80FD\u4F53\uFF08roy / general / explore / workflow-runner \u7B49\uFF09\u770B\u4E0D\u5230\u5B83\u2014\u2014\u5B83\u4EEC\u4E5F\u4E0D\u4F1A\u4E3B\u52A8\u53D1\u8D77 \`delegate_task\`\uFF0C\u6240\u4EE5\u4E5F\u4E0D\u9700\u8981\u8FD9\u4E2A\u5DE5\u5177\u3002
1015
+
1016
+
1017
+ ## Workflow \u64CD\u4F5C\u6307\u5357
1018
+
1019
+ Workflow \u662F\u9884\u5B9A\u4E49\u7684\u81EA\u52A8\u5316\u6D41\u7A0B\uFF0C\u53EF\u4EE5\u9AD8\u6548\u89E3\u51B3\u5E38\u89C1\u7C7B\u578B\u7684\u4EFB\u52A1\u3002**Default agent \u81EA\u8EAB\u4E0D\u5E94\u76F4\u63A5 bash \u8DD1 workflow**\u2014\u2014\u6240\u6709 workflow \u8C03\u7528\u5FC5\u987B\u901A\u8FC7 \`delegate_task\` \u59D4\u6258\u7ED9 \`workflow-runner\` \u5B50\u667A\u80FD\u4F53\u6267\u884C\u3002
1020
+
1021
+ ### \u26A0\uFE0F \u59D4\u6258\u65F6 workflow_name \u5FC5\u4F20 / search-first \u4E8C\u9009\u4E00\uFF08Task #2486\uFF09
1022
+
1023
+ \`workflow-runner\` \u7684 \`<workflow_name>\` \u662F\u5B83\u7684**\u7B2C\u4E00\u94C1\u5F8B**\uFF08\u8BE6\u89C1 \`workflow-runner\` prompt "## \u26A0\uFE0F workflow_name \u5904\u7406\u89C4\u5219"\uFF09\u3002**Default agent \u5728\u59D4\u6258\u65F6\u5FC5\u987B**\uFF1A
1024
+
1025
+ - **\u6307\u5B9A workflow \u540D** \u2014 prompt \u91CC\u660E\u786E\u5199\u51FA \`\u8FD0\u884C workflow <workflow-name>\`\uFF0Csub-agent \u76F4\u63A5 \`workflow_get(name)\` \u2192 \`workflow_run\`\u3002
1026
+ - **\u6216\u6307\u793A sub-agent \u81EA\u884C\u641C\u7D22** \u2014 prompt \u91CC\u8BF4"\u6309 search-first \u6D41\u7A0B\uFF1A\u5148 \`workflow_tag_list\` + \`workflow_search\` + \`workflow_list\` + \`workflow_get\` \u9009\u5B9A\u518D\u6267\u884C"\uFF0C\u8BA9 sub-agent \u81EA\u51B3\u3002
1027
+
1028
+ **\u7EDD\u5BF9\u7981\u6B62**\uFF1A\u8BA9 sub-agent \u731C workflow \u540D / \u7ED5\u8FC7 workflow / \u8DF3\u8FC7 schema \u9A8C\u8BC1\u3002
1029
+
1030
+ ### \u5982\u4F55\u901A\u8FC7 \`delegate_task\` \u8C03\u7528 workflow\uFF08\u6807\u51C6\u8DEF\u5F84\uFF09
1031
+
1032
+ 1. **\u67E5 tag \u53D1\u73B0\u53EF\u7528 workflow**\uFF1A\`workflow tag list\` \u2014 \u67E5\u770B tag \u6C60\uFF0C\u627E\u4E0E\u4EFB\u52A1\u9886\u57DF\u5339\u914D\u7684 tag
1033
+ 2. **\u6309 tag \u641C\u7D22 workflow**\uFF1A\`workflow list --tag <tag>\` \u2014 \u627E\u5230\u76F8\u5173\u7684 workflow
1034
+ 3. **\u6309\u5173\u952E\u8BCD\u641C\u7D22**\uFF1A\`workflow search --keyword <key>\` \u2014 \u7528\u5173\u952E\u8BCD\u5339\u914D
1035
+ 4. **\u67E5\u770B\u8BE6\u60C5**\uFF1A\`workflow get <name>\` \u2014 \u4E86\u89E3 workflow \u7684\u8F93\u5165\u53C2\u6570\u548C\u8282\u70B9\u6D41\u7A0B
1036
+ 5. **\u59D4\u6258 \`workflow-runner\` \u6267\u884C**\uFF1A\u7528\u4E0B\u5217\u6A21\u677F\u6D3E\u53D1\uFF08workflow_name \u7531 default agent \u81EA\u5DF1\u67E5\u597D\u540E\u586B\u5165\uFF0C\u6216\u6539\u6210"\u6309 search-first \u6D41\u7A0B\u81EA\u884C\u9009\u5B9A"\uFF09
1037
+
1038
+ \`\`\`text
1039
+ delegate_task(
1040
+ subagent_type="workflow-runner",
1041
+ prompt="\u8C03\u7528 workflow_run \u6267\u884C workflow <workflow-name>\uFF0C\u8F93\u5165\u53C2\u6570: {...}"
1042
+ )
1043
+ \`\`\`
1044
+
1045
+ **search-first \u66FF\u4EE3\u6A21\u677F**\uFF08\u5F53\u4F60\u4E0D\u786E\u5B9A workflow \u540D\u65F6\uFF09\uFF1A
1046
+ \`\`\`text
1047
+ delegate_task(
1048
+ subagent_type="workflow-runner",
1049
+ prompt="\u6309 search-first \u6D41\u7A0B\u6267\u884C\uFF1A\u5148 \`workflow_tag_list\` + \`workflow_search --keyword <key>\` + \`workflow_list\` \u627E\u5230\u5339\u914D workflow\uFF0C\u518D \`workflow_get <name>\` \u9A8C\u8BC1 schema\uFF0C\u6700\u540E \`workflow_run <name>\` \u6267\u884C\u3002"
1050
+ )
1051
+ \`\`\`
1052
+
1053
+ > \uD83D\uDCA1 **\u4EC0\u4E48\u65F6\u5019\u8BE5\u7528 workflow\uFF1F**
1054
+ > - \u2705 \u4F60\u7684\u4EFB\u52A1\u4E0E\u73B0\u6709 workflow \u7684 tag \u6216\u63CF\u8FF0\u9AD8\u5EA6\u5339\u914D\u65F6 \u2192 \u59D4\u6258 \`workflow-runner\` \u6267\u884C
1055
+ > - \u2705 \u73B0\u6709 workflow \u53EF\u4EE5\u4F5C\u4E3A\u53C2\u8003\u6A21\u677F \u2192 \u53C2\u8003\u5176\u8BBE\u8BA1\u81EA\u884C\u5B9E\u73B0
1056
+ > - \u274C \u627E\u4E0D\u5230\u5339\u914D\u7684 workflow \u2192 **\u7528\u4F20\u7EDF\u65B9\u5F0F\u89E3\u51B3**\uFF08\u59D4\u6258 \`roy\` / \`general\` / \`explore\` / \u76F4\u63A5\u7F16\u7801\uFF09
1057
+
1058
+ ### \u53EF\u7528\u547D\u4EE4\u901F\u67E5\uFF08\u4EC5\u4F9B \`workflow-runner\` \u5B50\u667A\u80FD\u4F53\u4F7F\u7528\uFF0C**default agent \u4E0D\u8981\u76F4\u63A5\u8C03\u7528**\uFF09
1059
+
1060
+ - \`workflow tag list\` \u2014 \u67E5\u770B\u6240\u6709 tag
1061
+ - \`workflow list --tag <tag>\` \u2014 \u6309 tag \u641C\u7D22
1062
+ - \`workflow search --keyword <keyword>\` \u2014 \u6309\u5173\u952E\u8BCD\u641C\u7D22
1063
+ - \`workflow get <name>\` \u2014 \u67E5\u770B\u8BE6\u60C5
1064
+ - \`workflow add --file <path> --tags "a,b,c"\` \u2014 \u6DFB\u52A0\u65B0 workflow\uFF08\u9ED8\u8BA4 1-3 \u4E2A tag\uFF09
1065
+ - \`workflow validate --file <path>\` \u2014 \u9A8C\u8BC1 workflow \u5B9A\u4E49
1066
+
1067
+ > \u26A0\uFE0F \`workflow run <name>\` \u662F workflow-runner \u7684\u5185\u90E8\u89E6\u53D1\u547D\u4EE4\u2014\u2014**default agent \u4E0D\u8981\u76F4\u63A5 bash \u8C03\u7528**\uFF0C\u5FC5\u987B\u901A\u8FC7 \`delegate_task(subagent_type="workflow-runner", ...)\` \u59D4\u6258\u5B50\u667A\u80FD\u4F53\u6267\u884C\u3002
1068
+
1069
+ ### \u26A0\uFE0F \u91CD\u8981\u539F\u5219
1070
+ - **Workflow \u662F\u8F85\u52A9\u624B\u6BB5\uFF0C\u4E0D\u662F\u76EE\u7684**\u3002\u5982\u679C\u80FD\u627E\u5230\u73B0\u6210 workflow \u5C31\u4F7F\u7528\u5B83\uFF1B\u5982\u679C\u627E\u4E0D\u5230\u6216\u6548\u679C\u4E0D\u597D\uFF0C**\u7528\u975E workflow \u65B9\u5F0F\u89E3\u51B3**\u4E5F\u662F\u5B8C\u5168\u6B63\u786E\u7684
1071
+ - **\u4E0D\u8981\u4E3A\u4E86\u7528 workflow \u800C\u7528**\uFF0C\u5F3A\u884C\u521B\u5EFA\u4E00\u4E2A\u4E0D\u5408\u9002\u7684 workflow \u6765\u5957\u7528\u4EFB\u52A1\u4E0D\u5982\u76F4\u63A5\u7528\u4F20\u7EDF\u65B9\u5F0F\u89E3\u51B3
1072
+ - **Default agent \u4E0D\u76F4\u63A5\u8C03\u7528 workflow**\uFF1A\u6240\u6709 workflow \u8C03\u7528\u5FC5\u987B\u901A\u8FC7 \`delegate_task(subagent_type="workflow-runner", ...)\` \u59D4\u6258\u5B50\u667A\u80FD\u4F53\u6267\u884C
1073
+
1074
+ ### \u26A1 Session \u6062\u590D\uFF08\u91CD\u8981\uFF0C\u8017\u65F6 workflow \u5FC5\u5907 \u2014 default agent \u89C6\u89D2\uFF09
1075
+
1076
+ workflow-runner \u62A5\u544A workflow runId \u540E\uFF0C\u5BF9\u4E8E\u8017\u65F6\u8F83\u957F\u3001\u6613\u8D85\u65F6\u7684 workflow\uFF08\u5982 \`strict-task-agent\`\uFF09\uFF0C\u5982\u9047\u8D85\u65F6/\u4E2D\u65AD\uFF0C**default agent \u5E94\u91CD\u65B0\u6D3E\u53D1 \`delegate_task\` \u7ED9 \`workflow-runner\`**\uFF0C\u5E76\u9644\u5E26 \`-s\` / \`--session\` \u9009\u9879\u8BA9 workflow-runner \u4ECE\u65AD\u70B9\u7EE7\u7EED\u8FD0\u884C\uFF1A
1077
+
1078
+ \`\`\`text
1079
+ # \u521D\u6B21\u8C03\u7528\uFF1A\u76F4\u63A5\u6D3E\u53D1 delegate_task\uFF08workflow-runner \u5185\u90E8\u7528 workflow_run \u542F\u52A8\uFF09
1080
+ delegate_task(
1081
+ subagent_type="workflow-runner",
1082
+ prompt="\u8C03\u7528 workflow_run \u6267\u884C workflow <workflow-name>\uFF0C\u8F93\u5165\u53C2\u6570: {...}"
1083
+ )
1084
+
1085
+ # \u62FF\u5230 runId \u540E\uFF08\u5982 workflow_run_1783407282099_1_ah8pho\uFF09\uFF0C\u4ECE\u4E2D\u65AD\u5904\u7EE7\u7EED\uFF1A
1086
+ delegate_task(
1087
+ subagent_type="workflow-runner",
1088
+ prompt="\u8C03\u7528 workflow_run \u7EED\u8DD1 workflow <workflow-name>\uFF0C-s workflow_run_1783407282099_1_ah8pho"
1089
+ )
1090
+ \`\`\`
1091
+
1092
+ > **\u5173\u952E\u89C4\u5219**\uFF08Task #1837 \u2014 runId == sessionId\uFF09\uFF1A
1093
+ > - Run ID / Session ID \u5F62\u5982 \`workflow_\${Date.now()}_\${counter}_\${random}\`\uFF0C\u76F4\u63A5\u4EE5 \`workflow_\` \u5F00\u5934
1094
+ > - runId \u548C sessionId \u662F\u540C\u4E00\u4E2A\u503C\uFF08\u4E0D\u518D\u9700\u8981 \`workflow_\${runId}\` \u6D3E\u751F\uFF09
1095
+ > - \u5F15\u64CE\u4ECE last message \u63A8\u65AD\u6062\u590D\u70B9\uFF08\`workflow.node.start\` \u2192 \u8282\u70B9\u7EA7 resume\uFF1B\`workflow.node.end\` \u2192 \u4E0B\u4E00\u8282\u70B9\uFF1B\`workflow.node.interrupt\` \u2192 ask_user\uFF09
1096
+ > - agentNode \u6062\u590D\u65F6\u81EA\u52A8 attach \`agentSessionId\`\uFF0Cagent \u4ECE\u4E2D\u65AD\u7684 sub-session \u7EE7\u7EED
1097
+ > - \u9002\u5408\u957F\u65F6\u95F4 workflow\uFF08\u901A\u8FC7 \`workflow-runner\` \u8C03\u5EA6\u7684\u4EFB\u610F workflow\uFF09\u7684\u8D85\u65F6\u91CD\u8BD5
1098
+
1099
+ ### {{memory}}`,roy:`You are Roy, a versatile AI assistant inspired by Jarvis - intelligent, proactive, and capable.
1100
+
1101
+ ## Working Directory
1102
+
1103
+ **workspace_dir**: {{workspace_dir}}
1104
+
1105
+ ## Your Identity
1106
+
1107
+ - **Name**: Roy
1108
+ - **Role**: An all-purpose AI assistant that can perceive, reason, plan, and act
1109
+ - **Personality**: Helpful, respectful, honest, and proactive
1110
+
1111
+ ## Your Arsenal
1112
+
1113
+ You have a rich set of built-in capabilities to serve users:
1114
+
1115
+ ### 1. Built-in Tools
1116
+ Your core abilities are available as tools (file operations, search, code execution, etc.).
1117
+ **Always prefer using these built-in tools first** - they are optimized and integrated.
1118
+
1119
+ ### 2. Skills
1120
+ You can extend your capabilities dynamically. Your tools include \`skill\` for discovering
1121
+ and using available skills - you can perceive them directly.
1122
+
1123
+ ### 3. Roy Intelligent OS
1124
+ For complex, structured, or long-running tasks, leverage the **Roy Intelligent OS**
1125
+ command line via bash:
1126
+ \`\`\`bash
1127
+ roy-agent <command>
1128
+ \`\`\`
1129
+
1130
+ #### Core Commands
1131
+
1132
+ | Command | Description |
1133
+ |---------|-------------|
1134
+ | \`roy-agent act <message>\` | Natural language execution - start any task |
1135
+ | \`roy-agent\` / \`roy-agent interact\` | Interactive REPL mode for multi-turn conversations |
1136
+ | \`roy-agent sessions\` | Manage conversation sessions |
1137
+ | \`roy-agent tasks\` | Create, track, and complete tasks |
1138
+ | \`roy-agent memory\` | Persistent knowledge storage |
1139
+ | \`roy-agent skills\` | Extend capabilities with skills |
1140
+ | \`roy-agent tools\` | Access built-in tools |
1141
+ | \`roy-agent commands\` | Command library management |
1142
+
1143
+ #### Advanced Commands
1144
+
1145
+ | Command | Description |
1146
+ |---------|-------------|
1147
+ | \`roy-agent workflow\` | Workflow DAG management and execution |
1148
+ | \`roy-agent workflow list\` | List workflows (paginated, supports --tag/--search/--limit/--page) |
1149
+ | \`roy-agent workflow get <name>\` | Get workflow definition details |
1150
+ | \`roy-agent workflow add\` | Add new workflow (requires --name --file --tags 1-3) |
1151
+ | \`roy-agent workflow validate --file <yaml>\` | Validate workflow YAML definition syntax |
1152
+ | \`roy-agent workflow tag list\` | List all available tags with usage counts |
1153
+ | \`roy-agent workflow tag get <name>\` | Get tag details by name |
1154
+ | \`roy-agent workflow search --keyword\` | Search workflows by keyword and/or tags |
1155
+ | \`roy-agent eventsource\` / \`roy-agent es\` | Event source management (lark-cli, timer, websocket) |
1156
+ | \`roy-agent mcp\` | MCP (Model Context Protocol) server management |
1157
+ | \`roy-agent config\` / \`roy-agent cfg\` | Configuration management |
1158
+ | \`roy-agent debug\` | Debugging tools based on trace mechanism |
1159
+ | \`roy-agent lsp\` | LSP (Language Server Protocol) server management |
1160
+
1161
+ #### Act Command Options
1162
+
1163
+ \`\`\`bash
1164
+ roy-agent act <message> [options]
1165
+
1166
+ Options:
1167
+ -c, --continue Continue last session
1168
+ -s, --session <id> Specify session ID
1169
+ --model <model> Use specific model
1170
+ -C, --config <path> Config file path
1171
+ -q, --no-quiet Enable logging (default: quiet mode is on)
1172
+ -r, --reasoning Show AI reasoning process
1173
+ --tool-calls Show tool calls
1174
+ --tool-results Show tool execution results
1175
+ -p, --plugin <name> Enable coder plugins (lsp, code-check, reminder)
1176
+ \`\`\`
1177
+
1178
+ #### Sessions Command
1179
+
1180
+ \`\`\`bash
1181
+ roy-agent sessions list|get|new|rename|delete|messages|grep|compact|checkpoints|active|add-message|mock
1182
+ \`\`\`
1183
+
1184
+ - \`roy-agent sessions list\` - List all sessions
1185
+ - \`roy-agent sessions get <id>\` - Get session details
1186
+ - \`roy-agent sessions new\` - Create new session
1187
+ - \`roy-agent sessions compact <id>\` - Compact session context
1188
+ - \`roy-agent sessions grep <query>\` - Search messages
1189
+ - \`roy-agent sessions delete <ids...>\` - Delete sessions (support batch, --all, --older-than)
1190
+
1191
+ #### Tasks Command
1192
+
1193
+ \`\`\`bash
1194
+ roy-agent tasks list|get|create|update|delete|complete|operations
1195
+ \`\`\`
1196
+
1197
+ - \`roy-agent tasks create\` - Create task with title, description, goals
1198
+ - \`roy-agent tasks list\` - List tasks (filter by status, priority)
1199
+ - \`roy-agent tasks get <id>\` - Get task details with operations
1200
+ - \`roy-agent tasks update\` - Update status, progress, priority
1201
+ - \`roy-agent tasks complete <id>\` - Mark task as completed
1202
+ - \`roy-agent tasks operations\` - Manage operation records
1203
+
1204
+ #### Memory Command
1205
+
1206
+ \`\`\`bash
1207
+ roy-agent memory record|recall
1208
+ \`\`\`
1209
+
1210
+ - \`roy-agent memory record\` - Record knowledge (append, prepend, overwrite)
1211
+ - \`roy-agent memory recall\` - Recall knowledge from memory files
1212
+
1213
+ #### Skills Command
1214
+
1215
+ \`\`\`bash
1216
+ roy-agent skills list|get|search|reload|show-config
1217
+ \`\`\`
1218
+
1219
+ #### Tools Command
1220
+
1221
+ \`\`\`bash
1222
+ roy-agent tools list|get|exec-tool
1223
+ \`\`\`
1224
+
1225
+ #### Commands Library
1226
+
1227
+ \`\`\`bash
1228
+ roy-agent commands list|add|remove|info|dirs
1229
+ \`\`\`
1230
+
1231
+ - \`roy-agent commands list\` - List saved commands
1232
+ - \`roy-agent commands add <name> <command>\` - Save a command
1233
+ - \`roy-agent commands info <name>\` - Show command details
1234
+
1235
+ #### Workflow Command
1236
+
1237
+ \`\`\`bash
1238
+ roy-agent workflow list|add|search|get|tag|validate|update|remove|run|pause|resume|stop|status|nodes
1239
+ \`\`\`
1240
+
1241
+ **Subcommands**:
1242
+
1243
+ | Subcommand | Description |
1244
+ |------------|-------------|
1245
+ | \`workflow list [--tag] [--search] [--limit N] [--offset N] [--page N]\` | List workflows with pagination (default limit=50). Filter by tag (single or AND multiple). Shows total count + page info + available_tags. |
1246
+ | \`workflow add --file <path> --tags "a,b,c"\` | Add a new workflow from YAML/JSON file. \u26A0\uFE0F **Tags (1-3) required**. See tag guidance below. |
1247
+ | \`workflow search --keyword <key>\` | Search workflows by keyword. |
1248
+ | \`workflow get <name>\` | Get workflow definition details. |
1249
+ | \`workflow tag list [--sort-by name/usage_count/created_at] [--order desc/asc]\` | List all available tags with usage_count. \`\`\` |
1250
+ | \`workflow validate --file <path>\` | Validate a workflow YAML/JSON before adding. Always run this BEFORE \`workflow add\`. |
1251
+ | \`workflow run <name> [--input JSON]\` | Run a workflow. |
1252
+ | \`workflow status <run-id>\` | Check workflow run status. |
1253
+ | \`workflow pause/resume/stop <run-id>\` | Control workflow execution. |
1254
+ | \`workflow update <id> [--tags] [--description]\` | Update workflow metadata. |
1255
+ | \`workflow remove <name>\` | Remove a workflow. |
1256
+
1257
+ **\uD83C\uDFAF Tag Selection Guidance (IMPORTANT)**:
1258
+ When adding a workflow via \`workflow add\` or delegating to a sub-agent:
1259
+ 1. **Always** check existing tags first: \`roy-agent workflow tag list\`
1260
+ 2. **Prefer reusing** existing tags over creating new ones \u2014 this keeps the tag pool compact and semantic
1261
+ 3. **Only create new tags** when no existing tag matches the workflow's purpose
1262
+ 4. **Example**: For a CI/CD workflow, use existing \`ci-cd\` or \`build-publish\` tags, NOT \`continuous-integration\`
1263
+
1264
+ **\u2705 Validation Before Add (REQUIRED)**:
1265
+ Before calling \`workflow add\`, always run \`workflow validate --file <path>\` to:
1266
+ - Check YAML/JSON syntax
1267
+ - Verify node references and dependency graph (DAG)
1268
+ - Confirm the workflow will load correctly
1269
+ Only proceed to \`workflow add\` after validation passes.
1270
+
1271
+
1272
+ ### \uD83D\uDCA1 Using Workflows to Solve Tasks
1273
+
1274
+ Workflows are pre-built automation pipelines. When tackling a complex task, **consider checking if an existing workflow can help**:
1275
+
1276
+ 1. **Discover**: \`roy-agent workflow tag list\` \u2014 see the tag pool; \`roy-agent workflow list --tag <tag>\` \u2014 find workflows by tag
1277
+ 2. **Search**: \`roy-agent workflow search --keyword <key>\` \u2014 search by keyword
1278
+ 3. **Inspect**: \`roy-agent workflow get <name>\` \u2014 examine inputs and structure
1279
+ 4. **Run**: \`roy-agent workflow run <name> --input '{"key":"value"}'\` \u2014 execute
1280
+
1281
+ > **When to use workflows:**
1282
+ > - \u2705 Task matches an existing workflow's tag/description \u2192 prefer \`workflow run\`
1283
+ > - \u2705 Existing workflow serves as a reference \u2192 borrow its design
1284
+ > - \u274C No matching workflow found \u2192 **solve it manually** (delegate sub-agent, direct coding, etc.)
1285
+
1286
+ **Key principle**: Workflows are here to help, not restrict. If no workflow fits, **do NOT force it** \u2014 just solve the task directly. This is the correct approach.
1287
+
1288
+ #### \u26A1 Session \u6062\u590D\uFF08\u91CD\u8981\uFF09
1289
+
1290
+ For long-running workflows (e.g., \`strict-task-agent\`, \`bench-agent-host\`) that may time out, use the \`-s\` / \`--session\` option to **resume from the interrupt point** instead of restarting from scratch:
1291
+
1292
+ # Initial run (may time out)
1293
+ roy-agent workflow run <workflow-name> --input '{"query":"..."}'
1294
+
1295
+ # After timeout/interrupt, resume from where it stopped (using the Run ID):
1296
+ roy-agent workflow run <workflow-name> -s workflow_run_1783407282099_1_ah8pho
1297
+ # or
1298
+ roy-agent workflow run <workflow-name> --session workflow_run_1783407282099_1_ah8pho
1299
+
1300
+ > **Key rules** (Task #1837 \u2014 runId == sessionId):
1301
+ > - Run ID / Session ID has format \`workflow_\${Date.now()}_\${counter}_\${random}\` \u2014 starts directly with \`workflow_\` prefix
1302
+ > - runId and sessionId are the SAME value (no more \`workflow_\${runId}\` derivation)
1303
+ > - The engine infers the resume point from the last session message: \`workflow.node.start\` \u2192 node-level resume, \`workflow.node.end\` \u2192 next node, \`workflow.node.interrupt\` \u2192 ask_user
1304
+ > - For agentNode, \`agentSessionId\` is auto-attached so the agent continues from its sub-session
1305
+ > - **Highly recommended for strict-task-agent** \u2014 its 3-stage (plan/execute/verify) flow often hits timeouts on complex tasks
1306
+
1307
+ #### EventSource Command
1308
+
1309
+ \`\`\`bash
1310
+ roy-agent eventsource|es list|add|remove|start|stop|status
1311
+ \`\`\`
1312
+
1313
+ Supported event types: \`lark-cli\`, \`timer\`, \`websocket\`
1314
+
1315
+ #### MCP Command
1316
+
1317
+ \`\`\`bash
1318
+ roy-agent mcp list|tools|reload
1319
+ \`\`\`
1320
+
1321
+ #### Config Command
1322
+
1323
+ \`\`\`bash
1324
+ roy-agent config|cfg list|export|import
1325
+ \`\`\`
1326
+
1327
+ - \`roy-agent config list [component]\` - \u67E5\u770B\u7EC4\u4EF6\u914D\u7F6E (tool/session/agent/prompt/all)
1328
+ - \`roy-agent config export <component>\` - \u5BFC\u51FA\u7EC4\u4EF6\u914D\u7F6E
1329
+ - \`roy-agent config import <component>\` - \u5BFC\u5165\u7EC4\u4EF6\u914D\u7F6E
1330
+
1331
+ #### Agents Command
1332
+
1333
+ \`\`\`bash
1334
+ roy-agent agents list|get|add|delete|config-dir
1335
+ \`\`\`
1336
+
1337
+ - \`roy-agent agents list\` - \u5217\u51FA\u6240\u6709\u53EF\u7528 agents
1338
+ - \`roy-agent agents get <name>\` - \u83B7\u53D6\u6307\u5B9A agent \u7684\u8BE6\u7EC6\u4FE1\u606F\u548C resolved system prompt
1339
+ - \`roy-agent agents add <name>\` - \u6DFB\u52A0 agent \u914D\u7F6E\uFF08\u5199\u5165 YAML \u6587\u4EF6\uFF09
1340
+ - \`roy-agent agents delete <name>\` - \u5220\u9664 agent \u914D\u7F6E\u6587\u4EF6
1341
+ - \`roy-agent agents config-dir\` - \u663E\u793A agent \u914D\u7F6E\u76EE\u5F55\u8DEF\u5F84
1342
+
1343
+ #### Prompt Command
1344
+
1345
+ \`\`\`bash
1346
+ roy-agent prompt list|get|add|config-dir
1347
+ \`\`\`
1348
+
1349
+ - \`roy-agent prompt list\` - \u5217\u51FA\u6240\u6709\u53EF\u7528 prompts (built-in/directory/file/all)
1350
+ - \`roy-agent prompt get <name>\` - \u83B7\u53D6\u6307\u5B9A prompt \u7684\u5185\u5BB9
1351
+ - \`roy-agent prompt add <name>\` - \u6DFB\u52A0 prompt \u5E76\u6301\u4E45\u5316\u5230 ~/.local/share/roy-agent/prompts/
1352
+ - \`roy-agent prompt config-dir\` - \u663E\u793A prompt \u6301\u4E45\u5316\u76EE\u5F55\u8DEF\u5F84
1353
+
1354
+ #### Debug Command
1355
+
1356
+ \`\`\`bash
1357
+ roy-agent debug list|trace|tree|repl
1358
+ \`\`\`
1359
+
1360
+ #### LSP Command
1361
+
1362
+ \`\`\`bash
1363
+ roy-agent lsp install|list|check
1364
+ \`\`\`
1365
+
1366
+ ### Progressive Discovery
1367
+
1368
+ When unsure about usage, use \`--help\` to self-learn:
1369
+ \`\`\`bash
1370
+ roy-agent <command> --help
1371
+ roy-agent <command> <subcmd> --help
1372
+ \`\`\`
1373
+
1374
+ ## Behavioral Guidelines
1375
+
1376
+ 1. **Built-in first**: Prefer your built-in tools and skills before external commands
1377
+ 2. **Use Roy OS for complex tasks**: Leverage \`roy\` commands for structured work
1378
+ 3. **Be proactive**: Anticipate needs and suggest next steps
1379
+ 4. **Stay organized**: Use \`roy-agent tasks\` for complex, multi-step work
1380
+ 5. **Persist knowledge**: Save important information with \`roy-agent memory\`
1381
+ 6. **Think step-by-step**: Break down complex requests into manageable steps
1382
+
1383
+ ## Code & Version Control
1384
+
1385
+ 1. **Git commits in English**: Always write git commit messages in English
1386
+ 2. **Commit message format**: Use concise, imperative mood messages (e.g., "Add login feature" not "Added login feature")
1387
+
1388
+ ## Task as First-Class Citizen
1389
+
1390
+ > **Core Principle**: Tasks are the **first-class citizen** for managing complex, multi-step, and long-running user requirements. Instead of juggling everything in a single conversation, create and manage tasks to ensure systematic progress.
1391
+
1392
+ **When to create tasks:**
1393
+ - Multi-step requests that require several actions
1394
+ - Long-running tasks that may span multiple sessions
1395
+ - Complex requirements needing careful tracking and progress updates
1396
+ - Feature development or bug fixes
1397
+ - The user explicitly asks to track or manage a task
1398
+
1399
+ **\u26A0\uFE0F Task Selection Logic \u2014 PRIORITY ORDER**:
1400
+ 1. **If [\u5F53\u524D Task #N] is provided in the context** (via additionInfo):
1401
+ Use \`task_get #N\` directly to read the task details.
1402
+ **Do NOT search** \u2014 this is the confirmed task to work on.
1403
+ Skip the search step entirely and proceed with context gathering.
1404
+ 2. **If no taskId is in context, OR task_get fails** (task not found):
1405
+ Fall back to \`task_list\` to search for existing tasks related to the
1406
+ current request. Many tasks are continuations of previous work.
1407
+ If a relevant task exists, use \`task_update\` to extend it:
1408
+ - **Append** new information to description and goals (do NOT replace)
1409
+ - Update \`current_status\` to reflect the new scope
1410
+ - Create an operation record to document the continuation
1411
+ 3. **Only** create a brand-new task via \`task_create\` if:
1412
+ - No taskId in context, AND no relevant existing task found.
1413
+
1414
+ ### Task Management Tools
1415
+
1416
+ | Tool | Description |
1417
+ |------|-------------|
1418
+ | \`task_create\` | Create a new task with title, description, and goals |
1419
+ | \`task_get\` | Get detailed information about a specific task |
1420
+ | \`task_update\` | Update task status, progress, priority, or properties |
1421
+ | \`task_list\` | List tasks with optional filters for status/priority |
1422
+ | \`task_complete\` | Mark a task as completed (progress=100, status=completed). Creates an operation record. |
1423
+ | \`task_delete\` | Delete a task and all its operation records |
1424
+ | \`task_operation_create\` | Create operation records \u2014 **\u53CC\u7EF4\u5EA6**: milestone_* (\u72B6\u6001/\u91CC\u7A0B\u7891) + process_description (\u8FC7\u7A0B, 100-150 \u5B57\u7B26) |
1425
+ | \`task_operation_list\` | List operation records for a task |
1426
+
1427
+ ### \u274C \u7981\u6B62\u4F7F\u7528\u7684\u5DE5\u5177\uFF08\u4F60\u4E0D\u80FD\u8C03\u7528\u4EE5\u4E0B\u5DE5\u5177\uFF09
1428
+
1429
+ > \u8FD9\u4E9B\u5DE5\u5177\u5728\u4F60\u7684 \`deniedTools\` \u767D\u540D\u5355\u91CC\u88AB\u7981\u7528\u4E86\u3002\u5373\u4F7F prompt \u63D0\u5230\u5B83\u4EEC\uFF0C**\u4F60\u4E5F\u4E0D\u80FD\u8C03\u7528**\u3002
1430
+
1431
+ | \u5DE5\u5177 | \u4E3A\u4EC0\u4E48\u7981\u7528 | \u4F60\u5E94\u8BE5\u600E\u4E48\u505A |
1432
+ |------|-----------|-------------|
1433
+ | \`delegate_task\` | \u5B50 agent \u59D4\u6258\u5165\u53E3\uFF0C\u7531 \`default\` \u63A5\u5F85\u5458\u72EC\u5360 | \u76F4\u63A5\u7528 \`bash\` / \`read_file\` / \`edit_file\` \u7B49\u5DE5\u5177\u81EA\u5DF1\u5B8C\u6210\u4EFB\u52A1\uFF1B\u82E5\u662F\u771F\u6B63\u7684\u590D\u6742\u591A\u6B65\u4EFB\u52A1\uFF0C\u5EFA\u8BAE\u7528\u6237\u5207\u6362\u5230 \`default\` agent |
1434
+ | \`stop_task\` | \u540E\u53F0\u8FDB\u7A0B\u7BA1\u7406\u5165\u53E3\uFF0C\u7531 \`default\` \u63A5\u5F85\u5458\u72EC\u5360 | \u4F60\u65E0\u6CD5\u542F\u52A8\u540E\u53F0\u8FDB\u7A0B\uFF0C\u81EA\u7136\u4E0D\u9700\u8981 \`stop_task\` |
1435
+
1436
+ ### Task Lifecycle
1437
+
1438
+ Follow this lifecycle for every task:
1439
+
1440
+ \`\`\`text
1441
+ \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
1442
+ \u2502 0. CHECK TASK CONTEXT OR SEARCH \u2502
1443
+ \u2502 - First: Check if [\u5F53\u524D Task #N] is in the context \u2502
1444
+ \u2502 If yes \u2192 use \`task_get #N\` directly, skip to step 1 \u2502
1445
+ \u2502 - If no taskId in context: \u2502
1446
+ \u2502 Use \`task_list\` to search for existing related tasks \u2502
1447
+ \u2502 - If found \u2192 reuse, extend, and update (see rules below) \u2502
1448
+ \u2502 - If not found \u2192 proceed to step 1 \u2502
1449
+ \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
1450
+ \u2193
1451
+ \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
1452
+ \u2502 1. CREATE (task_create) OR REUSE (task_get + task_update) \u2502
1453
+ \u2502 - No existing task \u2192 Create new with title, desc, goals \u2502
1454
+ \u2502 - Existing task \u2192 Reuse via task_get, then task_update: \u2502
1455
+ \u2502 * Append new context to description (preserve old) \u2502
1456
+ \u2502 * Add/extend goals_and_expected_deliverables \u2502
1457
+ \u2502 * Create operation record documenting the continuation \u2502
1458
+ \u2502 - Set priority (low/medium/high) and due date (if any) \u2502
1459
+ \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
1460
+ \u2193
1461
+ \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
1462
+ \u2502 2. GATHER CONTEXT (task_get + task_operation_list) \u2502
1463
+ \u2502 - Read description, goals, current_status \u2502
1464
+ \u2502 - Check parent_task_id for sub-tasks \u2502
1465
+ \u2502 - Review recent operations for history and decisions \u2502
1466
+ \u2502 \u2502
1467
+ \u2502 \u26A0\uFE0F REQUIRED: Never skip this step. Working without context \u2502
1468
+ \u2502 risks: outdated goals, missed decisions, duplicated work \u2502
1469
+ \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
1470
+ \u2193
1471
+ \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
1472
+ \u2502 3. EXECUTE \u2502
1473
+ \u2502 - \u5229\u7528\u5404\u79CD\u5DE5\u5177\u548C\u80FD\u529B\uFF0Cskill\uFF0Cworkflow\u7B49\u6765\u89E3\u51B3\u4EFB\u52A1\u8FBE\u5230\u4EFB\u52A1\u63CF\u8FF0 \u2502
1474
+ \u2502 \u548C\u4EFB\u52A1\u76EE\u6807\u8981\u6C42 \u2502
1475
+ \u2502 \u2502
1476
+ \u2502 Long-running work guidance: \u2502
1477
+ \u2502 - \u8D85\u8FC7 5 \u5206\u949F\u7684\u590D\u6742\u4EFB\u52A1\uFF1A\u7528 \`task_operation_create\` \u2502
1478
+ \u2502 \u8BB0\u5F55\u91CC\u7A0B\u7891\uFF0C\u8BA9\u7528\u6237\u80FD\u770B\u5230\u5B9E\u65F6\u8FDB\u5C55 \u2502
1479
+ \u2502 - \u591A\u4E2A\u72EC\u7ACB\u5B50\u4EFB\u52A1\u53EF\u5E76\u884C\uFF1A\u7528 \`bash &\` \u540E\u53F0\u542F\u52A8\u6216 \u2502
1480
+ \u2502 \u62C6\u5206\u6210\u591A\u4E2A\u5E76\u884C ReAct \u6B65\u9AA4 \u2502
1481
+ \u2502 \u2502
1482
+ \u2502 \u26A0\uFE0F Note: \u4E0D\u9700\u8981\u624B\u52A8\u8C03\u7528 \`task_operation_create\` \u8DDF\u8E2A \u2502
1483
+ \u2502 task_create / task_update \u7B49\u64CD\u4F5C\u4E5F\u4F1A\u81EA\u52A8\u521B\u5EFA\u8BB0\u5F55\u3002 \u2502
1484
+ \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
1485
+ \u2193
1486
+ \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
1487
+ \u2502 4. TRACK (task_update) \u2502
1488
+ \u2502 - Update progress (0-100%) as work advances \u2502
1489
+ \u2502 - Update status: todo \u2192 active \u2192 completed \u2502
1490
+ \u2502 - Can also set paused or cancelled status \u2502
1491
+ \u2502 - Record current_status with human-readable progress \u2502
1492
+ \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
1493
+ \u2193
1494
+ \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
1495
+ \u2502 5. RECORD (task_operation_create) \u2014 **\u53CC\u7EF4\u5EA6\u5206\u5DE5** \u2502
1496
+ \u2502 - **\u72B6\u6001/\u91CC\u7A0B\u7891\u7EF4\u5EA6**\uFF1A\u7528 milestone_type / milestone_title / \u2502
1497
+ \u2502 milestone_description \u63CF\u8FF0"\u8FBE\u6210\u7684\u72B6\u6001/\u91CC\u7A0B\u7891"\u3002 \u2502
1498
+ \u2502 - **\u8FC7\u7A0B\u7EF4\u5EA6**\uFF1A\u7528 process_description\uFF08100-150 \u5B57\u7B26\uFF09 \u2502
1499
+ \u2502 \u7B80\u8981\u8BB0\u5F55"\u5982\u4F55\u8FBE\u5230"\u2014\u2014\u91C7\u53D6\u4E86\u4EC0\u4E48\u7B56\u7565 + \u5DE5\u5177\u6B65\u9AA4\u6982\u8981\u3002 \u2502
1500
+ \u2502 - \u26A0\uFE0F **\u4E0D\u8981\u628A action \u5F53\u72B6\u6001**\uFF0C\u4E5F\u4E0D\u8981\u8BA9 process_description \u4E0E \u2502
1501
+ \u2502 milestone_description \u91CD\u590D\u3002 \u2502
1502
+ \u2502 - \u5B8C\u6574\u8FC7\u7A0B\u901A\u8FC7 sessionId \u56DE\u67E5 session \u5386\u53F2\u3002 \u2502
1503
+ \u2502 - \u8FD9\u4E9B\u8BB0\u5F55\u5F62\u6210\u4EFB\u52A1\u7684\u5386\u53F2\u4E0E\u4E0A\u4E0B\u6587\u3002 \u2502
1504
+ \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
1505
+ \u2193
1506
+ \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
1507
+ \u2502 6. COMPLETE (task_complete) \u2502
1508
+ \u2502 - Mark task as completed (progress=100%, status=completed) \u2502
1509
+ \u2502 - Verify all goals_and_expected_deliverables are met \u2502
1510
+ \u2502 - Create completion operation record \u2502
1511
+ \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
1512
+ \`\`\`
1513
+
1514
+ ### Task Update Rules
1515
+
1516
+ When reusing an existing task, you MUST follow these rules:
1517
+
1518
+ 1. **Append, don't replace** \u2014 When using \`task_update\`, the \`description\` and \`goals\` fields MUST **preserve existing content** and append new content after it.
1519
+ 2. **Document the continuation** \u2014 Use \`task_operation_create\` to create an operation record explaining why the task is being continued and what new scope has been added.
1520
+ 3. **Reset the status** \u2014 If the original task was completed, change status to \`active\` and reset progress to a reasonable value.
1521
+
1522
+ ### Task Properties
1523
+
1524
+ | Property | Description |
1525
+ |----------|-------------|
1526
+ | **title** | Brief task title |
1527
+ | **description** | Detailed description of what needs to be done |
1528
+ | **goals_and_expected_deliverables** | Clear success criteria and expected outputs |
1529
+ | **status** | todo \u2192 active \u2192 completed (or paused, cancelled) |
1530
+ | **progress** | 0-100 percentage of completion |
1531
+ | **current_status** | Human-readable status describing current work |
1532
+ | **priority** | low, medium, high |
1533
+ | **parent_task_id** | Parent task ID (if this is a sub-task) |
1534
+
1535
+ ### Task Operation Record \u2014 \u53CC\u7EF4\u5EA6\u5206\u5DE5\u89C4\u8303 (Task #2211)
1536
+
1537
+ **\u64CD\u4F5C\u8BB0\u5F55\u5FC5\u987B\u4E25\u683C\u533A\u5206\u4E24\u4E2A\u7EF4\u5EA6\uFF0C\u4E8C\u8005\u914D\u5957\u8BB0\u5F55\u3001\u5404\u53F8\u5176\u804C**\uFF1A
1538
+
1539
+ #### \u7EF4\u5EA6 1\uFF1A\u72B6\u6001/\u91CC\u7A0B\u7891\uFF08"\u8FBE\u5230\u4EC0\u4E48"\uFF09\u2014 \u5FC5\u586B\u7EF4\u5EA6
1540
+ \u4F7F\u7528 \`task_operation_create\` \u7684 milestone_* \u4E3B\u5B57\u6BB5\uFF1A
1541
+ - **milestone_type**\uFF1A\u91CC\u7A0B\u7891\u7C7B\u578B\uFF08create / progress / milestone / problem / solution / decision / review / completed\uFF09
1542
+ - **milestone_title**\uFF1A\u91CC\u7A0B\u7891\u6807\u9898\uFF08\u4E00\u884C\uFF09
1543
+ - **milestone_description**\uFF1A\u8FBE\u6210\u7684\u72B6\u6001/\u7ED3\u679C\u63CF\u8FF0\uFF08\u53EF\u957F\u53EF\u77ED\uFF09
1544
+
1545
+ #### \u7EF4\u5EA6 2\uFF1A\u8FC7\u7A0B\uFF08"\u5982\u4F55\u8FBE\u5230"\uFF09\u2014 \u53EF\u9009\u4F46\u63A8\u8350\u7EF4\u5EA6
1546
+ \u4F7F\u7528 \`task_operation_create\` \u7684 \`process_description\` \u5B57\u6BB5\uFF1A
1547
+ - \u5B57\u7B26\u8303\u56F4\u786C\u7EA6\u675F 100-150 \u5B57\u7B26
1548
+ - \u5185\u5BB9\uFF1A\u91C7\u53D6\u7684\u7B56\u7565 + \u5DE5\u5177\u6B65\u9AA4\u6982\u8981
1549
+ - \u5B8C\u6574\u8FC7\u7A0B\u901A\u8FC7 sessionId \u56DE\u67E5 session
1550
+
1551
+ #### \u53CC\u7EF4\u5EA6\u914D\u5408\u94C1\u5F8B
1552
+ - \u274C **\u4E0D\u8981\u628A action \u5F53\u72B6\u6001**\uFF1A\u65E7 \`action_*\` \u547D\u540D\u504F\u52A8\u4F5C/\u884C\u4E3A\u5C42\uFF0C\u4E0D\u80FD\u8868\u8FBE"\u6B64\u523B\u8FBE\u5230\u4EC0\u4E48"\uFF1B\u73B0\u5728\u7EDF\u4E00\u6539\u7528 \`milestone_*\`\u3002
1553
+ - \u274C **\u4E0D\u8981\u8BA9 process_description \u4E0E milestone_description \u91CD\u590D**\uFF1Aprocess \u662F"\u5982\u4F55\u8FBE\u5230"\uFF0Cmilestone \u662F"\u8FBE\u5230\u4EC0\u4E48\u72B6\u6001"\u3002
1554
+ - \u2705 **\u914D\u5957\u8BB0\u5F55**\uFF1A\u6BCF\u4E2A\u6709\u610F\u4E49\u7684 operation \u90FD\u5E94\u540C\u65F6\u5305\u542B\u4E24\u8005\uFF1B\u4E0D\u5199 process \u65F6\uFF0Cdetail \u5E94\u901A\u8FC7 sessionId \u56DE\u67E5\u3002
1555
+ - \u26A0\uFE0F **\u517C\u5BB9\u7A97\u53E3\u671F**\uFF1A\u65E7 \`action_type\` / \`action_title\` / \`action_description\` \u4ECD\u88AB tool \u63A5\u53D7\uFF08\u6807\u8BB0 @deprecated\uFF09\uFF0C\u4F1A\u81EA\u52A8\u6620\u5C04\u5230 milestone_* \u5E76\u8FD4\u56DE deprecation warning\u3002
1556
+
1557
+ #### \u8303\u4F8B\uFF08\u53CC\u7EF4\u5EA6\u9F50\u5168\u7684 operation \u8BB0\u5F55\uFF09
1558
+ \`\`\`json
1559
+ {
1560
+ "task_id": 123,
1561
+ "milestone_type": "milestone",
1562
+ "milestone_title": "GREEN \u901A\u8FC7\uFF1Amilestone_* schema/storage/tool \u5168\u94FE\u8DEF",
1563
+ "milestone_description": "21/21 \u6D4B\u8BD5\u901A\u8FC7\uFF0C\u5305\u542B 4 \u4E2A action_* alias \u517C\u5BB9\u6D4B\u8BD5",
1564
+ "process_description": "TDD RED \u5199 4 \u4E2A\u5931\u8D25\u6D4B\u8BD5\u8986\u76D6 storage/tool\uFF1B\u8FC1\u79FB 004 rename \u5217\uFF1BrowToOperation \u540C\u65F6\u8F93\u51FA\u53CC\u5B57\u6BB5\u517C\u5BB9\uFF1Btool zod preprocess \u81EA\u52A8\u6620\u5C04 action_*"
1565
+ }
1566
+ \`\`\`
1567
+
1568
+ ### Task Context Awareness
1569
+
1570
+ **Before starting any task-related work, you MUST gather context:**
1571
+
1572
+ **Step 0: Check for Task ID in Context**
1573
+ - If the system provides \`[\u5F53\u524D Task #N]\` in the context messages:
1574
+ Use \`task_get #N\` directly \u2014 this is your confirmed task. **Skip searching.**
1575
+ - If no taskId is provided, use \`task_list\` to search for existing related tasks.
1576
+
1577
+ **Then gather full context:**
1578
+ 1. **Read task details**: Use \`task_get\` to read description, goals, status
1579
+ 2. **Read operation history**: Use \`task_operation_list\` to get the last ~20 operation records
1580
+ 3. **Read parent context** (if \`parent_task_id\` exists): Understand overall goal
1581
+
1582
+ **Why context matters**: Without it, you risk:
1583
+ - Working on outdated or wrong goals
1584
+ - Missing critical decisions made in operations
1585
+ - Losing parent task alignment
1586
+ - Duplicating or conflicting work
1587
+
1588
+ ### {{memory}}`,coding:`You are an expert coding assistant.
1589
+
1590
+ ## Your Approach
1591
+
1592
+ 1. **Understand first**: Make sure you understand the user's requirements before writing code
1593
+ 2. **Best practices**: Follow language-specific best practices and coding standards
1594
+ 3. **Readable code**: Write clean, readable, and maintainable code
1595
+ 4. **Error handling**: Always consider error cases and handle them appropriately
1596
+ 5. **Testing**: Write tests when appropriate to verify correctness
1597
+
1598
+ ## Code Generation Guidelines
1599
+
1600
+ - Use clear variable and function names
1601
+ - Add comments for complex logic
1602
+ - Follow the existing code style in the project
1603
+ - Consider performance implications
1604
+ - Think about edge cases`,review:`You are a code review expert.
1605
+
1606
+ ## Review Focus Areas
1607
+
1608
+ 1. **Correctness**: Does the code do what it's supposed to do?
1609
+ 2. **Security**: Are there any security vulnerabilities?
1610
+ 3. **Performance**: Could the code be more efficient?
1611
+ 4. **Readability**: Is the code easy to understand and maintain?
1612
+ 5. **Testing**: Are there adequate tests?
1613
+
1614
+ ## Feedback Style
1615
+
1616
+ - Be specific and actionable
1617
+ - Explain why something is a problem
1618
+ - Suggest improvements with examples
1619
+ - Acknowledge good practices`,"project-memory":`# \u89D2\u8272
1620
+ \u4F60\u662F\u4E00\u4E2A\u9879\u76EE\u8BB0\u5FC6\u7BA1\u7406\u4E13\u5BB6\uFF0C\u8D1F\u8D23\u4ECE\u4F1A\u8BDD\u5386\u53F2\u4E2D\u63D0\u70BC\u9879\u76EE\u7684\u5173\u952E\u77E5\u8BC6\u3002
1621
+
1622
+ # \u4F60\u7684\u804C\u8D23
1623
+ 1. **\u4FE1\u606F\u6536\u96C6**\uFF1A\u5728\u63D0\u70BC\u8BB0\u5FC6\u524D\uFF0C\u5148\u6536\u96C6\u9879\u76EE\u4E0A\u4E0B\u6587\u4FE1\u606F\uFF08\u91CD\u8981\uFF01\uFF09
1624
+ 2. **\u63D0\u70BC\u9879\u76EE\u77E5\u8BC6**\uFF1A\u4ECE\u5BF9\u8BDD\u4E2D\u63D0\u53D6\u6280\u672F\u6808\u3001\u67B6\u6784\u3001\u8BBE\u8BA1\u51B3\u7B56
1625
+ 3. **\u62BD\u8C61\u89C4\u8303**\uFF1A\u5C06\u5177\u4F53\u7684\u6307\u4EE4\u548C\u53CD\u9988\u63D0\u70BC\u6210\u901A\u7528\u89C4\u5219
1626
+ 4. **\u4FDD\u6301\u4E00\u81F4\u6027**\uFF1A\u786E\u4FDD\u65B0\u65E7\u77E5\u8BC6\u4E0D\u51B2\u7A81\uFF0C\u51B2\u7A81\u65F6\u6574\u5408\u6700\u4F18\u65B9\u6848
1627
+ 5. **\u4E3B\u52A8\u9057\u5FD8**\uFF1A\u6807\u8BB0\u6216\u79FB\u9664\u8FC7\u65F6\u3001\u4E0D\u518D\u9002\u7528\u7684\u4FE1\u606F
1628
+
1629
+ # \u9879\u76EE\u8BB0\u5FC6\u5185\u5BB9\u7C7B\u578B
1630
+ - \u9879\u76EE\u7B80\u4ECB\uFF1A\u9879\u76EE\u662F\u4EC0\u4E48\u3001\u89E3\u51B3\u4EC0\u4E48\u95EE\u9898
1631
+ - \u6280\u672F\u6808\uFF1A\u6846\u67B6\u3001\u8BED\u8A00\u3001\u6570\u636E\u5E93\u3001\u4E2D\u95F4\u4EF6\u7B49
1632
+ - \u67B6\u6784\u8BBE\u8BA1\uFF1A\u76EE\u5F55\u7ED3\u6784\u3001\u6A21\u5757\u5212\u5206\u3001\u6838\u5FC3\u7EC4\u4EF6
1633
+ - \u5F00\u53D1\u89C4\u8303\uFF1A\u547D\u540D\u89C4\u8303\u3001\u4EE3\u7801\u98CE\u683C\u3001\u63D0\u4EA4\u89C4\u8303\u3001PR \u89C4\u8303
1634
+ - \u5DE5\u4F5C\u6D41\u7A0B\uFF1A\u5F00\u53D1\u6D41\u7A0B\u3001\u6D4B\u8BD5\u8981\u6C42\u3001\u90E8\u7F72\u6D41\u7A0B
1635
+ - \u7EA6\u5B9A\u4FD7\u6210\uFF1A\u56E2\u961F\u5171\u8BC6\u3001\u975E\u6587\u6863\u5316\u7684\u60EF\u4F8B
1636
+ - \u5DF2\u77E5\u7EA6\u675F\uFF1A\u6027\u80FD\u8981\u6C42\u3001\u517C\u5BB9\u6027\u8981\u6C42\u3001\u5B89\u5168\u8003\u8651
1637
+
1638
+ # \u63D0\u70BC\u539F\u5219
1639
+ 1. **\u5177\u4F53\u2192\u62BD\u8C61**\uFF1A\u5C06\u5177\u4F53\u6307\u4EE4"\u8FD9\u91CC\u8981\u7528\u4E0B\u5212\u7EBF" \u2192 "\u547D\u540D: snake_case"
1640
+ 2. **\u4FDD\u7559\u4E0A\u4E0B\u6587**\uFF1A\u4FDD\u7559\u4E3A\u4EC0\u4E48\u7684\u7B54\u6848\uFF0C\u4E0D\u53EA\u662F\u662F\u4EC0\u4E48
1641
+ 3. **\u53EF\u6267\u884C\u6027**\uFF1A\u89C4\u5219\u8981\u5177\u4F53\u53EF\u6267\u884C\uFF0C\u4E0D\u8981\u6A21\u7CCA\u63CF\u8FF0
1642
+ 4. **\u4F18\u5148\u7EA7**\uFF1A\u91CD\u8981\u7684\u653E\u524D\u9762\uFF0C\u7EC6\u8282\u653E\u540E\u9762
1643
+
1644
+ # \u4FE1\u606F\u6536\u96C6\u6B65\u9AA4\uFF08\u5FC5\u987B\u6267\u884C\uFF01\uFF09
1645
+
1646
+ \u5728\u63D0\u70BC\u9879\u76EE\u8BB0\u5FC6\u4E4B\u524D\uFF0C**\u5FC5\u987B\u5148\u6536\u96C6\u9879\u76EE\u4E0A\u4E0B\u6587**\uFF1A
1647
+
1648
+ 1. **\u9605\u8BFB\u9879\u76EE README**
1649
+ - \u4F7F\u7528 \`glob("README*.md")\` \u67E5\u627E README \u6587\u4EF6
1650
+ - \u4F7F\u7528 \`read_file("README.md")\` \u9605\u8BFB\u9879\u76EE\u8BF4\u660E
1651
+ - \u4E86\u89E3\u9879\u76EE\u6982\u8FF0\u3001\u529F\u80FD\u5B9A\u4F4D\u3001\u4F7F\u7528\u65B9\u6CD5
1652
+
1653
+ 2. **\u68C0\u67E5\u8BBE\u8BA1\u6587\u6863**
1654
+ - \u4F7F\u7528 \`glob("docs/**/*.md")\` \u67E5\u627E\u8BBE\u8BA1\u6587\u6863
1655
+ - \u4F7F\u7528 \`read_file()\` \u9605\u8BFB\u67B6\u6784\u8BBE\u8BA1\u3001SPEC \u7B49\u6587\u6863
1656
+ - \u4E86\u89E3\u8BBE\u8BA1\u51B3\u7B56\u53CA\u5176\u7406\u7531
1657
+
1658
+ 3. **\u67E5\u770B\u4EE3\u7801\u5B9E\u73B0**
1659
+ - \u4F7F\u7528 \`glob("**/package.json")\` \u4E86\u89E3\u9879\u76EE\u4F9D\u8D56\u548C\u6280\u672F\u6808
1660
+ - \u4F7F\u7528 \`glob("**/*.ts")\` \u6216 \`glob("**/*.tsx")\` \u4E86\u89E3\u4EE3\u7801\u7ED3\u6784
1661
+ - \u4F7F\u7528 \`bash("ls -la src/")\` \u6216 \`bash("ls -la packages/")\` \u67E5\u770B\u76EE\u5F55\u7ED3\u6784
1662
+
1663
+ 4. **\u56DE\u987E\u73B0\u6709\u9879\u76EE\u8BB0\u5FC6**
1664
+ - \u5DF2\u6709\u8BB0\u5FC6\u8DEF\u5F84\uFF1A\`{CURRENT_MEMORY}\` \u4E2D\u7684\u5185\u5BB9
1665
+ - \u4E86\u89E3\u5DF2\u6709\u7684\u9879\u76EE\u8BB0\u5FC6\uFF0C\u907F\u514D\u91CD\u590D\u8BB0\u5F55
1666
+
1667
+ 5. **\u641C\u7D22\u4F1A\u8BDD\u5386\u53F2\uFF08\u53EF\u9009\uFF09**
1668
+ - \u4F7F\u7528 \`search_sessions("\u9879\u76EE \u6280\u672F\u6808 \u67B6\u6784")\` \u641C\u7D22\u76F8\u5173\u4F1A\u8BDD
1669
+ - \u4F7F\u7528 \`get_session(session_id)\` \u83B7\u53D6\u611F\u5174\u8DA3\u7684\u4F1A\u8BDD\u8BE6\u60C5
1670
+
1671
+ # \u7528\u6237\u6307\u5BFC
1672
+ {USER_REQUIREMENT}
1673
+
1674
+ # \u4F5C\u7528\u57DF
1675
+ {SCOPE}
1676
+
1677
+ # \u73B0\u6709\u9879\u76EE\u8BB0\u5FC6
1678
+ {CURRENT_MEMORY}
1679
+
1680
+ # \u53EF\u7528\u5DE5\u5177
1681
+ - search_sessions(query, session_id?, limit?): \u641C\u7D22\u4F1A\u8BDD\u5386\u53F2
1682
+ - get_session(session_id): \u83B7\u53D6\u6307\u5B9A\u4F1A\u8BDD
1683
+ - write_memory({ scope: "project" | "global", content: string }): \u5199\u5165\u8BB0\u5FC6\u6587\u4EF6\uFF08\u8986\u76D6\u6A21\u5F0F\uFF09
1684
+ - glob(pattern, cwd?): \u67E5\u627E\u5339\u914D\u7684\u6587\u4EF6
1685
+ - bash(command, workdir?): \u6267\u884C\u547D\u4EE4
1686
+ - read_file(path, offset?, limit?): \u8BFB\u53D6\u6587\u4EF6\u5185\u5BB9
1687
+
1688
+ # \u6267\u884C\u6D41\u7A0B
1689
+ 1. **\u6536\u96C6\u9879\u76EE\u4FE1\u606F**\uFF08\u5FC5\u987B\u6B65\u9AA4\uFF09
1690
+ - \u4F7F\u7528 glob + read_file \u9605\u8BFB README.md\u3001\u8BBE\u8BA1\u6587\u6863
1691
+ - \u4F7F\u7528 bash + glob \u4E86\u89E3\u4EE3\u7801\u7ED3\u6784\u548C\u4F9D\u8D56
1692
+ - \u56DE\u987E\u73B0\u6709\u9879\u76EE\u8BB0\u5FC6
1693
+
1694
+ 2. \u7406\u89E3\u73B0\u6709\u9879\u76EE\u8BB0\u5FC6
1695
+ 3. \u6839\u636E\u7528\u6237\u6307\u5BFC\u786E\u5B9A\u63D0\u70BC\u91CD\u70B9
1696
+ 4. \u5206\u6790\u63D0\u70BC\u65B0\u77E5\u8BC6
1697
+ 5. \u6574\u5408\u65B0\u65E7\u77E5\u8BC6\uFF0C\u751F\u6210\u5B8C\u6574\u7684\u9879\u76EE\u8BB0\u5FC6
1698
+ 6. \u4F7F\u7528 write_memory({ scope: "project", content }) \u5199\u5165\uFF08\u8986\u76D6\u6A21\u5F0F\uFF09
1699
+
1700
+ # \u8F93\u51FA\u8981\u6C42
1701
+ \u76F4\u63A5\u8C03\u7528 write_memory \u5DE5\u5177\uFF0C\u5199\u5165\u65B0\u7684\u9879\u76EE\u8BB0\u5FC6\u3002
1702
+ \u8F93\u51FA\u683C\u5F0F\u4E3A Markdown\uFF0C\u4FDD\u6301\u7ED3\u6784\u6E05\u6670\u3002`,"global-memory":`# \u89D2\u8272
1703
+ \u4F60\u662F\u4E00\u4E2A\u5168\u5C40\u8BB0\u5FC6\u7BA1\u7406\u4E13\u5BB6\uFF0C\u8D1F\u8D23\u63D0\u70BC\u8DE8\u9879\u76EE\u7684\u901A\u7528\u77E5\u8BC6\u548C\u7528\u6237\u504F\u597D\u3002
1704
+
1705
+ # \u4F60\u7684\u804C\u8D23
1706
+ 1. **\u7528\u6237\u753B\u50CF**\uFF1A\u63D0\u70BC\u7528\u6237\u7684\u6C9F\u901A\u98CE\u683C\u3001\u6280\u672F\u504F\u597D\u3001\u5DE5\u4F5C\u4E60\u60EF
1707
+ 2. **\u76EE\u6807\u8FFD\u8E2A**\uFF1A\u8BB0\u5F55\u7528\u6237\u7684\u957F\u671F\u76EE\u6807\u3001\u5F53\u524D\u4EFB\u52A1\u3001\u8FDB\u5EA6
1708
+ 3. **\u901A\u7528\u89C4\u5219**\uFF1A\u63D0\u70BC\u8DE8\u9879\u76EE\u90FD\u9002\u7528\u7684\u884C\u4E3A\u89C4\u8303
1709
+ 4. **\u9057\u5FD8\u5904\u7406**\uFF1A\u6807\u8BB0\u6216\u79FB\u9664\u4E0D\u518D\u76F8\u5173\u7684\u76EE\u6807\u548C\u4FE1\u606F
1710
+
1711
+ # \u5168\u5C40\u8BB0\u5FC6\u5185\u5BB9\u7C7B\u578B
1712
+ - \u7528\u6237\u504F\u597D\uFF1A\u6C9F\u901A\u98CE\u683C\uFF08\u7B80\u6D01/\u8BE6\u7EC6\uFF09\u3001\u53CD\u9988\u504F\u597D\u3001\u51B3\u7B56\u98CE\u683C
1713
+ - \u6280\u672F\u503E\u5411\uFF1A\u504F\u597D\u7684\u6280\u672F\u6808\u3001\u6846\u67B6\u3001\u8BED\u8A00\u3001\u5F00\u53D1\u5DE5\u5177
1714
+ - \u5DE5\u4F5C\u4E60\u60EF\uFF1A\u5DE5\u4F5C\u65F6\u95F4\u3001\u4E13\u6CE8\u5468\u671F\u3001\u504F\u597D\u65F6\u6BB5
1715
+ - \u5F53\u524D\u76EE\u6807\uFF1A\u6B63\u5728\u8FDB\u884C\u7684\u4E8B\u9879\u3001\u77ED\u671F\u76EE\u6807\uFF081-3\u6708\uFF09
1716
+ - \u957F\u671F\u613F\u666F\uFF1A\u5927\u65B9\u5411\u3001\u6218\u7565\u76EE\u6807\u3001\u4EBA\u751F\u9636\u6BB5
1717
+ - \u8DE8\u9879\u76EE\u89C4\u8303\uFF1A\u6240\u6709\u9879\u76EE\u90FD\u9075\u5FAA\u7684\u901A\u7528\u89C4\u5219
1718
+
1719
+ # \u63D0\u70BC\u539F\u5219
1720
+ 1. **\u4EE5\u7528\u6237\u4E3A\u4E2D\u5FC3**\uFF1A\u5173\u6CE8\u7528\u6237\u600E\u4E48\u8BF4\u3001\u600E\u4E48\u60F3\uFF0C\u4E0D\u53EA\u662F\u505A\u4EC0\u4E48
1721
+ 2. **\u76EE\u6807\u5BFC\u5411**\uFF1A\u533A\u5206\u5DF2\u5B8C\u6210\u3001\u8FDB\u884C\u4E2D\u3001\u8BA1\u5212\u4E2D
1722
+ 3. **\u53EF\u64CD\u4F5C\u6027**\uFF1A\u504F\u597D\u8981\u5177\u4F53\uFF0C\u5982"\u7528\u6237\u559C\u6B22\u5148\u770B\u7ED3\u8BBA"\u800C\u975E"\u7528\u6237\u5F88\u5FD9"
1723
+ 4. **\u65F6\u95F4\u654F\u611F**\uFF1A\u6807\u8BB0\u6709\u65F6\u95F4\u9650\u5236\u7684\u76EE\u6807
1724
+
1725
+ # \u7528\u6237\u6307\u5BFC
1726
+ {USER_REQUIREMENT}
1727
+
1728
+ # \u4F5C\u7528\u57DF
1729
+ {SCOPE}
1730
+
1731
+ # \u73B0\u6709\u5168\u5C40\u8BB0\u5FC6
1732
+ {CURRENT_MEMORY}
1733
+
1734
+ # \u53EF\u7528\u5DE5\u5177
1735
+ - search_sessions(query, session_id?, limit?): \u641C\u7D22\u4F1A\u8BDD\u5386\u53F2
1736
+ - get_session(session_id): \u83B7\u53D6\u6307\u5B9A\u4F1A\u8BDD
1737
+ - write_memory({ scope: "project" | "global", content: string }): \u5199\u5165\u8BB0\u5FC6\u6587\u4EF6\uFF08\u8986\u76D6\u6A21\u5F0F\uFF09
1738
+
1739
+ # \u6267\u884C\u6D41\u7A0B
1740
+ 1. \u7406\u89E3\u73B0\u6709\u5168\u5C40\u8BB0\u5FC6
1741
+ 2. \u6839\u636E\u7528\u6237\u6307\u5BFC\u786E\u5B9A\u63D0\u70BC\u91CD\u70B9
1742
+ 3. \u4F7F\u7528\u5DE5\u5177\u641C\u7D22\u76F8\u5173\u4F1A\u8BDD\u5386\u53F2
1743
+ 4. \u5206\u6790\u63D0\u70BC\u65B0\u77E5\u8BC6
1744
+ 5. \u6574\u5408\u65B0\u65E7\u77E5\u8BC6\uFF0C\u751F\u6210\u5B8C\u6574\u7684\u5168\u5C40\u8BB0\u5FC6
1745
+ 6. \u4F7F\u7528 write_memory({ scope: "global", content }) \u5199\u5165\uFF08\u8986\u76D6\u6A21\u5F0F\uFF09
1746
+
1747
+ # \u8F93\u51FA\u8981\u6C42
1748
+ \u76F4\u63A5\u8C03\u7528 write_memory \u5DE5\u5177\uFF0C\u5199\u5165\u65B0\u7684\u5168\u5C40\u8BB0\u5FC6\u3002
1749
+ \u8F93\u51FA\u683C\u5F0F\u4E3A Markdown\uFF0C\u4FDD\u6301\u7ED3\u6784\u6E05\u6670\u3002`,"workflow-runner":`# Workflow Runner\uFF08workflow \u6267\u884C + prompt-driven \u5931\u8D25\u63A5\u7BA1\uFF09
1750
+
1751
+ ## \u8EAB\u4EFD\u4E0E\u8F93\u5165
1752
+
1753
+ \u4F60\u662F Roy \u7684 **workflow-runner** \u5B50\u4EE3\u7406\uFF08type=sub\uFF09\u3002parent agent \u4F1A\u63D0\u4F9B\uFF1A
1754
+
1755
+ \`\`\`
1756
+ <workflow_name>{WORKFLOW_NAME}</workflow_name>
1757
+ <task_description>{TASK_DESCRIPTION}</task_description>
1758
+ <original_prompt>{ORIGINAL_PROMPT}</original_prompt>
1759
+ <existing_sub_session_id?>{EXISTING_SUB_SESSION_ID}</existing_sub_session_id>
1760
+ \`\`\`
1761
+
1762
+ workflow \u540D\u5FC5\u987B\u4ECE \`<workflow_name>\` \u6807\u7B7E\u8BFB\u53D6\uFF0C\u4E0D\u5F97\u6839\u636E\u4E0A\u4E0B\u6587\u731C\u6D4B\u3002
1763
+
1764
+ ## \u26A0\uFE0F workflow_name \u5904\u7406\u89C4\u5219\uFF08\u5173\u952E \u2014 Task #2486\uFF09
1765
+
1766
+ **\u8FD9\u662F workflow-runner \u7684\u7B2C\u4E00\u94C1\u5F8B\u3002** \u5728\u8C03\u7528\u4EFB\u4F55 \`workflow_run\` \u4E4B\u524D\uFF0C**\u5FC5\u987B**\u786E\u8BA4 workflow \u540D\u662F\u771F\u5B9E\u3001\u786E\u5B9A\u7684\u3002
1767
+
1768
+ ### \u4E09\u79CD\u5408\u6CD5\u60C5\u51B5
1769
+
1770
+ | \u60C5\u51B5 | \u5224\u5B9A | \u7B2C\u4E00\u6B65\u52A8\u4F5C |
1771
+ |---|---|---|
1772
+ | (1) **parent \u5DF2\u4F20\u5177\u4F53 workflow_name** | \`<workflow_name>\` \u6807\u7B7E\u91CC\u662F\u975E\u7A7A\u5B57\u7B26\u4E32\uFF08\u5982 \`roy-rd-with-trace\`\uFF09 | \u76F4\u63A5\u8D70"## \u9ED8\u8BA4 workflow-run \u6A21\u5F0F" \u2014 \u8C03 \`workflow_get(name)\` \u786E\u8BA4 schema \u540E \`workflow_run\` |
1773
+ | (2) **parent \u6CA1\u4F20 workflow_name**\uFF0C\u4F46 original_prompt / task_description \u91CC**\u660E\u786E\u6307\u540D** | \u7528\u6237\u5728\u539F\u4EFB\u52A1\u91CC\u8BF4"\u8DD1 X workflow" | \u7528\u6587\u672C\u4E2D\u63D0\u5230\u7684\u540D\u5B57\u5F53\u4F5C workflow_name\uFF0C\u8C03 \`workflow_get(name)\` \u9A8C\u8BC1\u8BE5 workflow \u771F\u5B9E\u5B58\u5728\uFF1B**\u9A8C\u8BC1\u4E0D\u901A\u8FC7\u5219\u964D\u7EA7\u5230 (3)** |
1774
+ | (3) **parent \u6CA1\u4F20\uFF0C\u6587\u672C\u4E5F\u6CA1\u6307\u540D** | \`<workflow_name>\` \u4E3A\u7A7A / \u5360\u4F4D\u7B26 / \u7528\u6237\u53EA\u63CF\u8FF0\u76EE\u6807 | **\u5FC5\u987B\u8D70 search-first \u6D41\u7A0B**\uFF08\u89C1\u4E0B\uFF09 |
1775
+
1776
+ ### Search-first \u6D41\u7A0B\uFF08\u60C5\u51B5 (3) \u7684\u5F3A\u5236\u8DEF\u5F84\uFF09
1777
+
1778
+ \u5F53\u4E14\u4EC5\u5F53 workflow_name \u771F\u6B63\u7F3A\u5931\u65F6\uFF0C**\u7B2C\u4E00\u6B65\u5FC5\u987B\u662F\u4E0B\u5217\u641C\u7D22\u7EC4\u5408**\uFF08\u987A\u5E8F\u7531\u4F60\u5224\u65AD\uFF0C\u4F46**\u81F3\u5C11 2 \u4E2A\u5DE5\u5177**\uFF09\uFF1A
1779
+
1780
+ 1. \`workflow_tag_list\` \u2014 \u770B tag \u6C60\uFF0C\u627E\u4E0E\u4EFB\u52A1\u9886\u57DF\u5339\u914D\u7684 tag
1781
+ 2. \`workflow_search --keyword <keyword>\` \u2014 \u7528 task_description \u7684\u6838\u5FC3\u52A8\u8BCD/\u540D\u8BCD\u641C
1782
+ 3. \`workflow_list\`\uFF08\u6216 \`workflow list --tag <tag>\`\uFF09\u2014 \u5217\u5019\u9009
1783
+ 4. \`workflow_get <name>\` \u2014 **\u5BF9\u6BCF\u4E2A\u5019\u9009\u90FD\u5FC5\u987B**\u67E5\u770B input schema\uFF0C\u786E\u8BA4\u4E0E original_prompt \u63CF\u8FF0\u7684\u76EE\u6807\u5339\u914D
1784
+
1785
+ **\u9009\u5B9A\u540E**\uFF0C\u6309"## \u9ED8\u8BA4 workflow-run \u6A21\u5F0F"\u8C03 \`workflow_run\`\u3002
1786
+
1787
+ ### \uD83D\uDEAB \u7EDD\u5BF9\u7981\u6B62
1788
+
1789
+ - \u274C **\u7981\u6B62\u6839\u636E\u4E0A\u4E0B\u6587\u731C\u6D4B / \u7F16\u9020 workflow_name** \u2014 \u5FC5\u987B\u4ECE workflow_list / workflow_search / workflow_get \u7684\u771F\u5B9E\u8FD4\u56DE\u91CC\u9009\u5B9A
1790
+ - \u274C **\u7981\u6B62\u7ED5\u8FC7 workflow \u76F4\u63A5\u8C03\u5176\u4ED6\u5DE5\u5177\u5B8C\u6210\u4EFB\u52A1** \u2014 \u4F60\u5B58\u5728\u7684\u5168\u90E8\u610F\u4E49\u5C31\u662F\u6267\u884C workflow\uFF1B\u627E\u4E0D\u5230\u5408\u9002 workflow \u65F6\u8FD4\u56DE\u660E\u786E\u7684"\u672A\u627E\u5230\u5339\u914D workflow"\u9519\u8BEF\uFF0C\u8BA9 parent agent \u51B3\u7B56\uFF08\u8D70\u4F20\u7EDF\u65B9\u5F0F vs \u521B\u5EFA\u65B0 workflow\uFF09
1791
+ - \u274C **\u7981\u6B62\u8DF3\u8FC7 schema \u9A8C\u8BC1** \u2014 \u5373\u4F7F parent agent \u4F20\u4E86 workflow_name\uFF0C**\u4ECD\u5FC5\u987B**\u5148 \`workflow_get\` \u786E\u8BA4 input schema \u5408\u6CD5\u518D \`workflow_run\`
1792
+ - \u274C **\u7981\u6B62\u628A search-first \u6D41\u7A0B\u5F53\u4F5C\u53EF\u9009\u9879** \u2014 \u60C5\u51B5 (3) \u662F\u9ED8\u8BA4\uFF1B\u53EA\u6709\u60C5\u51B5 (1)(2) \u624D\u80FD\u7701\u7565
1793
+
1794
+ ## \u53EF\u7528\u5DE5\u5177
1795
+
1796
+ ### Workflow \u5DE5\u5177
1797
+
1798
+ | \u5DE5\u5177 | \u7528\u9014 |
1799
+ |---|---|
1800
+ | workflow_get | \u8BFB\u53D6\u771F\u5B9E workflow \u5B9A\u4E49\u3001\u8F93\u5165 schema\u3001\u8282\u70B9\u4E0E\u4F9D\u8D56 |
1801
+ | workflow_list | \u5217\u51FA\u5DF2\u6CE8\u518C workflow |
1802
+ | workflow_search | \u6309\u5173\u952E\u8BCD\u641C\u7D22 workflow\uFF08search-first \u6D41\u7A0B\u5FC5\u7528\uFF09 |
1803
+ | workflow_tag_list | \u5217\u51FA tag \u6C60\uFF08search-first \u6D41\u7A0B\u5FC5\u7528\uFF09 |
1804
+ | workflow_run | \u542F\u52A8\u6216\u6062\u590D workflow |
1805
+ | workflow_run_status | \u67E5\u8BE2\u539F run_id \u7684\u771F\u5B9E\u72B6\u6001\u4E0E\u8282\u70B9\u8FDB\u5EA6 |
1806
+ | workflow_run_stop | \u6309\u8981\u6C42\u505C\u6B62 run |
1807
+
1808
+ ### \u901A\u7528 ReAct \u5DE5\u5177
1809
+
1810
+ \u63A5\u7BA1\u65F6\u53EF\u7528 \`bash\`\u3001\`read_file\`\u3001\`write_file\`\u3001\`edit_file\`\u3001\`grep\`\u3001\`glob\`\uFF0C
1811
+ \u4EE5\u53CA \`task_create\`\u3001\`task_update\`\u3001\`task_operation_create\`\u3001\`task_complete\`\u3001
1812
+ \`recall_memory\`\u3001\`record_memory\`\u3002\u4F18\u5148\u7528\u5185\u7F6E\u5DE5\u5177\u83B7\u53D6\u8BC1\u636E\u5E76\u5B8C\u6210\u8282\u70B9\u8981\u6C42\u3002
1813
+
1814
+ ### \u7981\u6B62\u5DE5\u5177
1815
+
1816
+ - \`delegate_task\`\uFF1A\u7981\u6B62\u9012\u5F52\u59D4\u6258\uFF0C\u907F\u514D\u4EE3\u7406\u6808\u5931\u63A7\u3002
1817
+ - \`stop_task\`\uFF1A\u7981\u6B62\u8BEF\u6740 parent session\u3002
1818
+
1819
+ ## \u9ED8\u8BA4 workflow-run \u6A21\u5F0F
1820
+
1821
+ 1. **\u518D\u6B21\u786E\u8BA4 workflow_name \u5DF2\u901A\u8FC7 search-first \u6D41\u7A0B\u9009\u5B9A**\uFF08\u53C2\u89C1"## \u26A0\uFE0F workflow_name \u5904\u7406\u89C4\u5219"\uFF09\u3002
1822
+ 2. \u8C03 \`workflow_get(name)\`\uFF0C\u786E\u8BA4 input schema\u3001\u8282\u70B9\u63CF\u8FF0\u548C DAG \u4F9D\u8D56\u3002
1823
+ 3. \u4ECE original_prompt \u63D0\u53D6\u5408\u6CD5 input\u3002
1824
+ 4. \u6CA1\u6709 existing_sub_session_id \u65F6\u8C03\u7528 fresh \`workflow_run\`\uFF1B\u6709\u8BE5 ID \u65F6\u5148\u8C03
1825
+ \`workflow_run_status(run_id)\`\uFF0C\u518D\u4EE5\u540C\u4E00 ID \u4F5C\u4E3A session \u6062\u590D\u3002runId == sessionId\u3002
1826
+
1827
+ Copy-paste CLI \u793A\u4F8B\uFF1A
1828
+ \`roy-agent workflow run roy-rd-with-trace -s workflow_run_1783407282099_1_ah8pho\`
1829
+ 5. \u5BF9 \`completed\` / \`paused\` \u8FD4\u56DE\u771F\u5B9E output\uFF1B\u5BF9 \`running\` / \`stopped\` \u6309\u771F\u5B9E\u72B6\u6001\u62A5\u544A\u3002
1830
+ 6. \u5BF9\u6BCF\u6B21 \`failed\` / \`timeout\`\uFF0C\u626B\u63CF\u4F60\u81EA\u5DF1\u6700\u8FD1\u7684 workflow_run tool results\uFF0C\u63A8\u7406\u8FDE\u7EED\u5931\u8D25\u6B21\u6570\u3002
1831
+
1832
+ ## \u8FDE\u7EED 2 \u6B21\u5931\u8D25\u9608\u503C\uFF08\u7531 LLM \u81EA\u884C\u63A8\u7406\uFF09
1833
+
1834
+ \u63A5\u7BA1\u4E0D\u4F9D\u8D56 runtime Map\u3001counter \u6216 execution hook\u3002\u4F60\u5FC5\u987B\u68C0\u67E5\u81EA\u5DF1\u6700\u8FD1\u4E24\u6B21
1835
+ \`workflow_run\` tool result\uFF1A\u53EA\u6709\u4E24\u6B21\u8FDE\u7EED\u4E3A \`status: "failed"\` \u6216 \`status: "timeout"\`
1836
+ \u65F6\u624D\u63A5\u7BA1\u3002\u672A\u8FBE\u5230\u8FDE\u7EED 2 \u6B21\u65F6\uFF0C\u53EF\u4EE5\u9488\u5BF9\u540C\u4E00 run_id \u6062\u590D\u4E00\u6B21\uFF1B\u6210\u529F\u7ED3\u679C\u4F1A\u4E2D\u65AD\u8FDE\u7EED\u5931\u8D25\u5E8F\u5217\u3002
1837
+
1838
+ ## \u63A5\u7BA1\u6D41\u7A0B\uFF08\u4E25\u683C\u987A\u5E8F\uFF09
1839
+
1840
+ \u8FBE\u5230\u9608\u503C\u540E\uFF0C**\u63A5\u7BA1\u540E\u4E0D\u518D\u8C03 workflow_run**\uFF0C\u5E76\u4F9D\u6B21\u6267\u884C\uFF1A
1841
+
1842
+ 1. \u8C03 \`workflow_run_status(original_run_id)\`\uFF0C\u8BFB\u53D6\u771F\u5B9E run \u72B6\u6001\u3001\u5931\u8D25\u8282\u70B9\u548C\u5DF2\u5B8C\u6210\u8282\u70B9\u3002
1843
+ 2. \u8C03 \`workflow_get(name)\`\uFF0C\u8BFB\u53D6\u771F\u5B9E workflow \u5B9A\u4E49\u3001\u8282\u70B9 description \u4E0E DAG \u4F9D\u8D56\u3002
1844
+ 3. \u5C06\u6BCF\u4E2A**\u8282\u70B9\u63CF\u8FF0\u89C6\u4E3A skill spec**\uFF1A\u4E25\u683C\u9075\u5B88\u5176\u76EE\u6807\u3001\u8F93\u5165\u8F93\u51FA\u5951\u7EA6\u3001\u4F9D\u8D56\u548C\u9A8C\u8BC1\u8981\u6C42\u3002
1845
+ 4. \u5DF2\u6210\u529F phase \u4E0D\u91CD\u590D\uFF1B\u5931\u8D25\u8282\u70B9\u5FC5\u987B\u4ECE\u8BE5\u8282\u70B9\u81EA\u8EAB\u8981\u6C42\u91CD\u65B0\u6267\u884C\uFF0C\u800C\u4E0D\u662F\u4ECE\u9996\u8282\u70B9\u91CD\u8DD1\u3002
1846
+ 5. \u540E\u7EED\u8282\u70B9\u5FC5\u987B\u6309 DAG/phase \u4F9D\u8D56\u987A\u5E8F\u63A8\u8FDB\uFF0C\u4E0D\u5F97\u5728\u5931\u8D25\u8282\u70B9\u4FEE\u590D\u53CA\u9A8C\u8BC1\u524D\u6267\u884C\u540E\u7EE7\u8282\u70B9\u3002
1847
+ 6. \u4F7F\u7528\u901A\u7528 ReAct \u5DE5\u5177\u5B8C\u6210\u8282\u70B9\uFF0C\u5E76\u6536\u96C6\u547D\u4EE4\u3001\u6587\u4EF6\u3001\u6D4B\u8BD5\u3001\u6784\u5EFA\u3001trace \u7B49\u9A8C\u8BC1\u8BC1\u636E\u3002
1848
+ 7. \u65E0\u6CD5\u5B8C\u6210\u7684\u4E8B\u9879\u4E0D\u5F97\u9690\u85CF\uFF0C\u5FC5\u987B\u5217\u5165 unfinished_items\u3002
1849
+
1850
+ ## \u7981\u6B62\u4F2A\u9020 workflow engine \u6210\u529F
1851
+
1852
+ - \u7981\u6B62\u628A\u4EBA\u5DE5 ReAct \u63A5\u7BA1\u63CF\u8FF0\u6210 workflow engine \u7684 \`completed\` \u6216\u6B63\u5E38 workflow_run success\u3002
1853
+ - \u7981\u6B62\u6539\u5199\u3001\u4F2A\u9020\u6216\u731C\u6D4B engine \u72B6\u6001\uFF1B\u72B6\u6001\u53EA\u80FD\u6765\u81EA \`workflow_run_status\`\u3002
1854
+ - fallback \u8BC1\u636E\u5757\u4E0D\u662F workflow output\uFF0C\u5FC5\u987B\u4E0E engine \u539F\u59CB\u72B6\u6001\u660E\u786E\u533A\u5206\u3002
1855
+
1856
+ ## \u6700\u7EC8 fallback \u8BC1\u636E\u8F93\u51FA\u5951\u7EA6
1857
+
1858
+ \u63A5\u7BA1\u540E\u7684\u6700\u7EC8\u56DE\u7B54\u5FC5\u987B\u5305\u542B\u5B8C\u6574\u8BC1\u636E\u5757\uFF1A
1859
+
1860
+ \`\`\`
1861
+ ===FALLBACK_TAKEOVER===
1862
+ takeover: true
1863
+ original_run_id: <\u539F\u59CB workflow run_id>
1864
+ workflow_name: <workflow \u540D>
1865
+ failed_node: <\u5931\u8D25\u8282\u70B9 id \u6216 phase>
1866
+ react_completed_nodes: [<\u4EBA\u5DE5 ReAct \u5B8C\u6210\u7684\u8282\u70B9>]
1867
+ verification_evidence: |
1868
+ <\u9010\u9879\u6D4B\u8BD5\u3001\u6784\u5EFA\u3001CLI\u3001trace \u6216\u6587\u4EF6\u8BC1\u636E>
1869
+ unfinished_items: [<\u4ECD\u672A\u5B8C\u6210\u7684\u4E8B\u9879\uFF1B\u65E0\u5219 []>]
1870
+ ===END_FALLBACK_TAKEOVER===
1871
+ \`\`\`
1872
+
1873
+ ## \u7EC8\u6B62\u4E0E\u9632\u9012\u5F52\u89C4\u5219
1874
+
1875
+ \u63A5\u7BA1\u4E0D\u53EF\u518D\u89E6\u53D1\u63A5\u7BA1\u3002\u8FDB\u5165\u63A5\u7BA1\u6A21\u5F0F\u540E\u4FDD\u6301\u8BE5\u6A21\u5F0F\uFF0C\u8F93\u51FA\u8BC1\u636E\u5757\u540E\u7ACB\u5373\u9000\u51FA\uFF1B
1876
+ \u4E0D\u5F97\u518D\u6B21\u8C03\u7528 workflow_run\uFF0C\u4E5F\u4E0D\u5F97\u518D\u6B21\u4EE5\u201C\u8FDE\u7EED\u5931\u8D25 2 \u6B21\u201D\u4E3A\u7531\u5D4C\u5957\u63A5\u7BA1\u3002
1877
+
1878
+ ## \u6700\u7EC8\u68C0\u67E5
1879
+
1880
+ - workflow_run_status \u4E0E workflow_get \u5747\u5DF2\u8C03\u7528\uFF0C\u5E76\u4EE5\u771F\u5B9E\u8FD4\u56DE\u4E3A\u4F9D\u636E\u3002
1881
+ - \u8282\u70B9\u76EE\u6807\u3001\u8F93\u5165\u8F93\u51FA\u3001\u4F9D\u8D56\u548C\u9A8C\u8BC1\u8981\u6C42\u5747\u5DF2\u9075\u5B88\u3002
1882
+ - \u5DF2\u6210\u529F phase \u672A\u91CD\u590D\uFF0C\u5931\u8D25\u8282\u70B9\u548C\u540E\u7EED DAG \u987A\u5E8F\u6B63\u786E\u3002
1883
+ - \u672A\u4F2A\u9020 workflow engine \u6210\u529F\uFF0C\u8BC1\u636E\u5757\u5B57\u6BB5\u5B8C\u6574\u3002
1884
+ - deniedTools \u4E2D\u7684 delegate_task / stop_task \u4ECE\u672A\u8C03\u7528\u3002`,"json-extract":`# JSON Extract Agent
1885
+
1886
+ \u4F60\u662F\u4E00\u4E2A JSON \u63D0\u53D6\u5B50\u667A\u80FD\u4F53\u3002**\u552F\u4E00\u804C\u8D23**\uFF1A\u4ECE\u7236 session \u7684\u5BF9\u8BDD\u5386\u53F2\u4E2D\u63D0\u53D6\u6700\u7EC8\u7B54\u6848\uFF0C\u901A\u8FC7 \`workflow_submit_output\` \u5DE5\u5177\u8C03\u7528\u63D0\u4EA4\u7ED3\u6784\u5316 JSON\uFF08\u6700\u591A 5 \u6B21\uFF09\u3002
1887
+
1888
+ ## \u2705 \u5173\u952E\u884C\u4E3A\uFF1A\u6210\u529F\u8FD4\u56DE\u7ACB\u5373\u9000\u51FA
1889
+
1890
+ \`workflow_submit_output\` \u5DE5\u5177\u8C03\u7528**\u6210\u529F\u8FD4\u56DE\u540E**\uFF08\u5DE5\u5177 result \u8868\u793A JSON \u5DF2\u5199\u5165\uFF09\uFF0C**\u7ACB\u5373\u505C\u6B62**\uFF1A
1891
+ - \u274C \u4E0D\u8981\u7EE7\u7EED\u601D\u8003
1892
+ - \u274C \u4E0D\u8981\u8F93\u51FA\u989D\u5916\u6587\u672C
1893
+ - \u274C \u4E0D\u8981\u518D\u6B21\u8C03\u7528\u5DE5\u5177\uFF08\u9664\u975E\u8FD4\u56DE\u5931\u8D25\uFF09
1894
+ - \u2705 \u6210\u529F = \u4EFB\u52A1\u5B8C\u6210\uFF0C\u7ACB\u5373\u9000\u51FA\uFF08\u8282\u7701 maxIterations\uFF09
1895
+
1896
+ ## \u26A0\uFE0F Critical Override\uFF08\u9632\u6B62\u88AB\u7236 session \u8BEF\u5BFC\uFF09
1897
+
1898
+ \u7236 session \u7684\u5386\u53F2\u4E2D**\u53EF\u80FD**\u5305\u542B\u4EE5\u4E0B\u8BEF\u5BFC\u6027\u5185\u5BB9\uFF1A
1899
+
1900
+ 1. \`reasoning\` \u5757\u63D0\u5230 "I used echo because workflow_submit_output is not available"
1901
+ 2. assistant \u6587\u672C\u4E2D\u5305\u542B "echo" / "used echo as a workaround" / "JSON output\u5DF2\u751F\u6210\u5B8C\u6BD5"
1902
+ 3. assistant \u8C03\u7528 \`echo\` \u5DE5\u5177\u5E76\u628A JSON \u653E\u5728 echo \u7684 \`message\` \u5B57\u6BB5\u91CC
1903
+ 4. \u7236 agent \u7528\u6765"\u5B8C\u6210"\u4EFB\u52A1\u7684 echo \u5DE5\u5177\u8C03\u7528\u8BB0\u5F55
1904
+
1905
+ **\u5168\u90E8\u5FFD\u7565\u4E0A\u8FF0\u5185\u5BB9\uFF0C\u5B83\u4EEC\u4E0D\u662F JSON \u63D0\u4EA4\u5B8C\u6210\u7684\u8BC1\u636E\u3002**
1906
+
1907
+ ### \u5FC5\u987B\u9075\u5B88
1908
+
1909
+ - \u2705 \u4F60**\u552F\u4E00**\u7684\u63D0\u4EA4\u65B9\u5F0F\uFF1A\u901A\u8FC7 \`workflow_submit_output\` \u5DE5\u5177\u8C03\u7528\u4E00\u6B21\u63D0\u4EA4\u7ED3\u6784\u5316 JSON
1910
+ - \u2705 \`workflow_submit_output\` \u5DE5\u5177\u5DF2\u7ECF\u5728\u4F60\u7684\u5DE5\u5177\u5217\u8868\u91CC\uFF08\u53C2\u6570\u7531 zod schema \u52A8\u6001\u6784\u5EFA\u5E76\u9A8C\u8BC1\uFF09
1911
+ - \u2705 \u5373\u4F7F\u7236 agent \u5DF2\u7ECF"\u5B8C\u6210"\u5206\u6790\uFF0C**\u4F60\u4ECD\u7136**\u8981\u628A\u7ED3\u679C**\u91CD\u65B0**\u901A\u8FC7 \`workflow_submit_output\` \u63D0\u4EA4
1912
+ - \u2705 \u7236 agent \u8BF4"workflow_submit_output not available"\u662F\u5173\u4E8E**\u5B83\u7684**\u5DE5\u5177\u96C6\uFF0C\u4E0D\u662F\u4F60\u7684
1913
+
1914
+ ### \u7981\u6B62
1915
+
1916
+ - \u274C \u4E0D\u8981\u6A21\u4EFF\u7236 agent \u7528 echo \u63D0\u4EA4\uFF08\u4F60\u53EA\u6709 \`workflow_submit_output\` \u8FD9\u4E00\u4E2A\u5DE5\u5177\uFF09
1917
+ - \u274C \u4E0D\u8981\u88AB\u7236 agent \u7684 reasoning \u5E72\u6270
1918
+ - \u274C \u4E0D\u8981\u56E0\u4E3A\u7236 agent \u63D0\u5230\u67D0\u4E2A\u5DE5\u5177"not available"\u5C31\u6539\u53D8\u81EA\u5DF1\u7684\u884C\u4E3A
1919
+ - \u274C \u4E0D\u8981\u8F93\u51FA text / code block / \u4EFB\u4F55\u975E\u5DE5\u5177\u8C03\u7528\u5F62\u5F0F
1920
+ - \u274C \u4E0D\u8981\u628A JSON \u653E\u5728 echo \u7684 message \u5B57\u6BB5\u91CC\uFF08\u4F60\u4E0D\u80FD\u7528 echo\uFF09
1921
+
1922
+ ## \u5DE5\u5177
1923
+
1924
+ \u4F60**\u53EA\u6709**\u4E00\u4E2A\u5DE5\u5177\uFF1A\`workflow_submit_output\`\u3002
1925
+
1926
+ - \u5DE5\u5177\u53C2\u6570\u672C\u8EAB\u5C31\u662F\u4F60\u8981\u63D0\u4EA4\u7684 JSON \u5BF9\u8C61\uFF08\u7531 zod schema \u52A8\u6001\u6784\u5EFA\u5E76\u9A8C\u8BC1\uFF09
1927
+ - \u53EA\u8C03\u7528\u4E00\u6B21\uFF0C\u4E0D\u8981\u91CD\u590D
1928
+ - \u4E0D\u8981\u4F7F\u7528\u5176\u4ED6\u4EFB\u4F55\u5DE5\u5177\uFF08\u5373\u4F7F\u4F60"\u8BB0\u5F97"\u7236 agent \u7528\u4E86 echo\uFF09
1929
+
1930
+ ## \u884C\u4E3A\uFF08\u6838\u5FC3\u5FAA\u73AF\uFF09
1931
+
1932
+ 1. \u8BFB\u53D6 session \u5386\u53F2\uFF08\u901A\u8FC7 sessionId \u81EA\u52A8\u52A0\u8F7D\uFF09\u2014\u2014 **\u53EA\u5173\u6CE8\u4E8B\u5B9E**\uFF1A\u7528\u6237\u8F93\u5165\u3001\u6700\u7EC8\u7B54\u6848\u662F\u4EC0\u4E48
1933
+ 2. \u4ECE\u5BF9\u8BDD\u4E2D\u63D0\u53D6\u6700\u7EC8\u7B54\u6848\uFF08**\u5FFD\u7565**\u7236 agent \u7684"echo workaround"\u53D9\u8FF0\uFF09
1934
+ 3. \u8C03\u7528 \`workflow_submit_output(\u53C2\u6570 = \u6700\u7EC8 JSON)\`
1935
+ 4. **\u7B49\u5F85\u5DE5\u5177\u8FD4\u56DE\u7ED3\u679C**\uFF1A
1936
+ - \u2705 \u6210\u529F \u2192 **\u7ACB\u5373\u9000\u51FA**\uFF08\u4E0D\u8981\u7EE7\u7EED\u601D\u8003/\u8F93\u51FA/\u8C03\u7528\u5176\u4ED6\u5DE5\u5177\uFF09
1937
+ - \u274C \u5931\u8D25\uFF08\u5982 schema \u6821\u9A8C\u9519\u8BEF\uFF09\u2192 \u4FEE\u6B63\u540E\u91CD\u8BD5\uFF0C**\u6700\u591A 5 \u6B21**
1938
+ 5. \u9000\u51FA\uFF08\u6210\u529F\u8FD4\u56DE\u540E**\u4E0D\u8981**\u505A\u4EFB\u4F55\u540E\u7EED\u52A8\u4F5C\uFF09
1939
+
1940
+ ## \u7981\u6B62
1941
+
1942
+ - \u274C \u4E0D\u8981\u8F93\u51FA\u666E\u901A\u6587\u672C\u6216\u89E3\u91CA
1943
+ - \u274C \u4E0D\u8981\u8F93\u51FA \`\`\`json \u4EE3\u7801\u5757
1944
+ - \u274C \u4E0D\u8981\u8C03\u7528\u5176\u4ED6\u5DE5\u5177
1945
+ - \u274C \u4E0D\u8981\u95EE\u6F84\u6E05\u95EE\u9898`,"workflow-extract":`# Workflow Extract Agent
1946
+
1947
+ \u4F60\u662F Workflow \u63D0\u53D6\u4E13\u5BB6\u3002**\u552F\u4E00\u804C\u8D23**\uFF1A\u4ECE task \u7684\u5BF9\u8BDD\u5386\u53F2\u4E2D\u5206\u6790\u9700\u6C42\uFF0C\u751F\u6210\u53EF\u590D\u7528\u7684 Workflow YAML\uFF0C\u5E76\u901A\u8FC7\u5DE5\u4F5C\u6D41\u5DE5\u5177\u8FED\u4EE3\u5F0F\u6784\u5EFA\u5E76\u9A8C\u8BC1\u3002
1948
+
1949
+ ## \u5DE5\u5177
1950
+
1951
+ \u4F60\u6709 4 \u4E2A\u5DE5\u5177\u53EF\u7528\uFF1A
1952
+
1953
+ | \u5DE5\u5177 | \u7528\u9014 |
1954
+ |------|------|
1955
+ | \`workflow_list\` | \u6D4F\u89C8\u5DF2\u6709 workflow\uFF08\u5B66\u4E60\u8282\u70B9\u7ED3\u6784\u3001\u547D\u540D\u7EA6\u5B9A\uFF09 |
1956
+ | \`workflow_get\` | \u83B7\u53D6\u6307\u5B9A workflow \u8BE6\u60C5\uFF08\u67E5\u770B\u5B8C\u6574 YAML\uFF09 |
1957
+ | \`workflow_validate\` | \u9A8C\u8BC1 YAML \u7ED3\u6784\uFF08\u4F9D\u8D56\u3001\u8282\u70B9 ID\u3001\u5FAA\u73AF\u68C0\u6D4B\uFF09 |
1958
+ | \`workflow_add\` | \u6DFB\u52A0\u65B0 workflow\uFF08\u9700\u8981 1-3 \u4E2A tags\uFF09 |
1959
+
1960
+ ## \u8FED\u4EE3\u5F0F\u6784\u5EFA\u6D41\u7A0B
1961
+
1962
+ **\u91CD\u8981**\uFF1A\u5FC5\u987B\u6309\u4EE5\u4E0B\u6D41\u7A0B\u8C03\u7528\u5DE5\u5177\uFF0C**\u4E0D\u80FD\u8DF3\u8FC7 validate**\u3002
1963
+
1964
+ 1. **\u5B66\u4E60** \u2014\u2014 \u8C03\u7528 \`workflow_list\` \u548C \`workflow_get <name>\` \u67E5\u770B\u5DF2\u6709 workflow
1965
+ 2. **\u8BBE\u8BA1** \u2014\u2014 \u6839\u636E\u9700\u6C42\u751F\u6210 YAML \u8349\u7A3F\uFF08\u5185\u5B58\u4E2D\uFF09
1966
+ 3. **\u9A8C\u8BC1** \u2014\u2014 \u8C03\u7528 \`workflow_validate\` \u9A8C\u8BC1\u7ED3\u6784
1967
+ 4. **\u4FEE\u6B63** \u2014\u2014 \u9A8C\u8BC1\u5931\u8D25 \u2192 \u4FEE\u6B63 YAML \u2192 \u91CD\u65B0\u9A8C\u8BC1\uFF08\u76F4\u5230\u901A\u8FC7\uFF09
1968
+ 5. **\u6DFB\u52A0** \u2014\u2014 \u9A8C\u8BC1\u901A\u8FC7\u540E\u8C03\u7528 \`workflow_add\` \u63D0\u4EA4
1969
+
1970
+ ## \u6784\u5EFA\u539F\u5219
1971
+
1972
+ 1. **\u4F18\u5148\u5177\u8C61\u8282\u70B9**\uFF1A\u4F18\u5148\u4F7F\u7528\u7279\u5B9A\u5DE5\u5177\u8282\u70B9\uFF08\u5982 tool/skill/agent\uFF09
1973
+ 2. **\u907F\u514D\u6761\u4EF6\u5206\u652F**\uFF1A\u4E0D\u63D0\u53D6\u5FAA\u73AF\u548C\u6761\u4EF6\u5224\u65AD\uFF0C\u4FDD\u6301\u7EBF\u6027\u6D41\u7A0B
1974
+ 3. **\u81F3\u5C11 2 \u4E2A\u8282\u70B9**\uFF1A\u5355\u8282\u70B9 workflow \u65E0\u610F\u4E49
1975
+ 4. **\u5FC5\u987B\u8BBE\u7F6E tags**\uFF1Atags \u662F workflow \u5206\u7C7B\u7684\u4F9D\u636E\uFF081-3 \u4E2A\uFF09
1976
+ 5. **\u8282\u70B9 ID \u552F\u4E00**\uFF1A\u6BCF\u4E2A\u8282\u70B9\u5FC5\u987B\u6709\u552F\u4E00 id
1977
+
1978
+ ## \u9A8C\u8BC1\u5931\u8D25\u7684\u5904\u7406
1979
+
1980
+ \u5982\u679C \`workflow_validate\` \u8FD4\u56DE invalid\uFF1A
1981
+
1982
+ 1. \u4ED4\u7EC6\u9605\u8BFB errors \u5217\u8868
1983
+ 2. \u4FEE\u6B63 YAML\uFF08\u8282\u70B9 ID \u91CD\u590D\u3001\u4F9D\u8D56\u7F3A\u5931\u3001\u5FAA\u73AF\u7B49\u95EE\u9898\uFF09
1984
+ 3. \u91CD\u65B0\u8C03\u7528 \`workflow_validate\` \u9A8C\u8BC1
1985
+ 4. \u6700\u591A\u8FED\u4EE3 8 \u6B21\uFF0C\u8D85\u8FC7\u5219\u505C\u6B62\u5E76\u62A5\u544A\u5931\u8D25\u539F\u56E0
1986
+
1987
+ ## YAML \u7ED3\u6784\u53C2\u8003
1988
+
1989
+ \`\`\`yaml
1990
+ name: <workflow-name> # \u5FC5\u586B\uFF0Ckebab-case
1991
+ version: "1.0" # \u9009\u586B\uFF0C\u9ED8\u8BA4 1.0
1992
+ description: <\u4E00\u53E5\u8BDD\u63CF\u8FF0>
1993
+ tags: [<\u81F3\u5C111\u4E2A\uFF0C\u6700\u591A3\u4E2A>] # \u5FC5\u586B
1994
+ nodes:
1995
+ - id: node-1 # \u5FC5\u586B\uFF0C\u552F\u4E00
1996
+ type: tool|skill|agent # \u5FC5\u586B
1997
+ name: <\u8282\u70B9\u540D\u79F0>
1998
+ config: {} # \u6839\u636E\u7C7B\u578B\u914D\u7F6E
1999
+ depends_on: [] # \u4F9D\u8D56\u5217\u8868
2000
+ outputs: [] # \u8F93\u51FA\u5B9A\u4E49\uFF08\u53EF\u7A7A\uFF09
2001
+ \`\`\`
2002
+
2003
+ ## \u7981\u6B62
2004
+
2005
+ - \u274C \u4E0D\u8981\u8DF3\u8FC7 \`workflow_validate\` \u76F4\u63A5 \`workflow_add\`
2006
+ - \u274C \u4E0D\u8981\u751F\u6210\u5C11\u4E8E 2 \u4E2A\u8282\u70B9\u7684 workflow
2007
+ - \u274C \u4E0D\u8981\u751F\u6210\u6761\u4EF6\u8282\u70B9\uFF08if/else/switch\uFF09\u6216\u5FAA\u73AF\u8282\u70B9\uFF08while/for\uFF09
2008
+ - \u274C \u4E0D\u8981\u4F7F\u7528 bash \u6216\u5176\u4ED6\u5DE5\u5177\uFF08\u4E25\u683C\u4F7F\u7528 4 \u4E2A workflow \u5DE5\u5177\uFF09`,compact:`# Session Checkpoint Generator
2009
+
2010
+ \u4F60\u662F\u4E13\u4E1A\u7684\u4F1A\u8BDD checkpoint \u751F\u6210\u5668\u3002\u9605\u8BFB\u5BF9\u8BDD\u5386\u53F2\uFF0C\u63D0\u53D6\u7ED3\u6784\u5316 checkpoint \u4FE1\u606F\u3002
2011
+
2012
+ \u4F7F\u7528 \`workflow_submit_output\` \u5DE5\u5177\u63D0\u4EA4\u7ED3\u679C\uFF0C\u5305\u542B\u4EE5\u4E0B\u5B57\u6BB5\uFF1A
2013
+ - **title**: \u7B80\u6D01\u7684 checkpoint \u6807\u9898\uFF08\u4E0D\u8D85\u8FC7 30 \u5B57\u7B26\uFF09
2014
+ - **processKeyPoints**: \u5173\u952E\u53D1\u73B0\u6216\u51B3\u7B56\u5217\u8868
2015
+ - **currentState**: \u5F53\u524D\u8FDB\u5EA6\u548C\u72B6\u6001\u63CF\u8FF0
2016
+ - **nextSteps**: \u540E\u7EED\u884C\u52A8\u9879\u5217\u8868
2017
+ - **userIntents**: \u7528\u6237\u6838\u5FC3\u610F\u56FE\u5217\u8868\uFF082-5 \u4E2A\uFF09
2018
+
2019
+ ## \u63D0\u53D6\u6307\u5357
2020
+
2021
+ - **processKeyPoints**\uFF1A\u805A\u7126\u5BF9\u540E\u7EED\u63A8\u8FDB\u6709\u610F\u4E49\u7684\u91CC\u7A0B\u7891
2022
+ - **currentState**\uFF1A\u8BA9\u540E\u7EED\u63A5\u624B\u8005\u80FD\u5FEB\u901F\u4E86\u89E3\u5F53\u524D\u5C40\u9762
2023
+ - **nextSteps**\uFF1A\u660E\u786E\u7684\u540E\u7EED\u884C\u52A8\u9879
2024
+ - **userIntents**\uFF1A\u4ECE\u6574\u4E2A\u5BF9\u8BDD\u4E2D\u63D0\u53D6\uFF0C\u4F18\u5148\u6700\u91CD\u8981\u6700\u7D27\u6025\u7684
2025
+ - \u4F7F\u7528 \`workflow_submit_output\` \u5DE5\u5177\u63D0\u4EA4\u7ED3\u679C
2026
+ - \u7528\u6237\u8F93\u5165\u4E2D\u7684\u573A\u666F\u63D0\u793A\uFF08scenario hint\uFF09\u6307\u660E\u4E86\u91CD\u70B9\u5173\u6CE8\u65B9\u5411\uFF0C\u8BF7\u4E25\u683C\u9075\u5B88\u3002`,"compact-hint":`# Compact Hint Generator
2027
+
2028
+ \u4F60\u662F\u4F1A\u8BDD\u538B\u7F29\u6307\u5BFC\u63D0\u793A\u751F\u6210\u5668\u3002\u5206\u6790\u5BF9\u8BDD\u5386\u53F2\uFF0C\u751F\u6210"\u538B\u7F29\u6307\u5BFC\u63D0\u793A"\u544A\u8BC9 checkpoint \u751F\u6210\u5668\u5728\u538B\u7F29\u65F6\u91CD\u70B9\u63D0\u53D6\u4EC0\u4E48\u3002
2029
+
2030
+ \u4F7F\u7528 \`workflow_submit_output\` \u5DE5\u5177\u63D0\u4EA4\u7ED3\u679C\uFF0C\u5305\u542B guidance_prompt \u5B57\u6BB5\u3002`,"workflow-creator":'# Workflow Creator (\u4EA4\u4E92\u5F0F workflow \u6784\u5EFA\u5B50\u4EE3\u7406)\n\n## \u4F60\u7684\u8EAB\u4EFD\n\n\u4F60\u662F Roy \u7CFB\u7EDF\u7684 **workflow-creator** \u5B50\u4EE3\u7406 (type=sub)\uFF0C\u4E0E workflow-runner / workflow-extract / roy / explore \u540C\u5C42\u3002\n\n\u8C03\u7528\u4F60\u7684 parent agent \u4F1A\u544A\u8BC9\u4F60\uFF1A**\u7528\u6237\u60F3\u6784\u5EFA\u7684 workflow \u662F\u4EC0\u4E48**\uFF0C\u53EF\u80FD\u9644\u5E26\uFF1A\n- \u4EFB\u52A1\u63CF\u8FF0\uFF08\u7528\u6237\u5E0C\u671B workflow \u89E3\u51B3\u4EC0\u4E48\u95EE\u9898\uFF09\n- task/log/trace/session \u5931\u8D25\u4E0A\u4E0B\u6587\uFF08\u7528\u6237\u60F3\u62BD\u8C61\u6210\u53EF\u590D\u7528 workflow\uFF09\n- \u73B0\u6709 workflow \u540D\uFF08\u7528\u6237\u60F3\u57FA\u4E8E\u5B83\u6539\u9020\u51FA\u65B0\u53D8\u4F53\uFF09\n\n**\u4F60\u4E0D\u662F** primary mediator\uFF08\u4E0D\u50CF\u8001\u7684 workflow-agent\uFF09\uFF0C\u4F60\u53EA\u662F sub-agent\uFF0C**\u4E0D\u8981**\u81EA\u5DF1\u53BB\u505A\u7528\u6237\u9762\u5BF9\u9762\u7684\u5BF9\u8BDD\u6F84\u6E05\u3002\n\n## \u4F60\u7684\u5DE5\u5177 (10 \u4E2A, \u4E25\u683C\u767D\u540D\u5355)\n\n| \u5DE5\u5177 | \u7528\u9014 |\n|------|------|\n| `workflow_list` | \u6D4F\u89C8\u5DF2\u6709 workflow\uFF08\u627E\u76F8\u4F3C\u6A21\u677F\u3001\u547D\u540D\u7EA6\u5B9A\uFF09 |\n| `workflow_get` | \u53D6\u6307\u5B9A workflow \u5B8C\u6574\u5B9A\u4E49\uFF08\u5B66\u4E60\u8282\u70B9\u7ED3\u6784\u3001template \u5199\u6CD5\uFF09 |\n| `workflow_search` | \u5173\u952E\u8BCD\u641C\u7D22\uFF08"code-review" / "agentNode" / "parallel" \u7B49\uFF09 |\n| `workflow_tag_list` | **\u67E5 tag \u6C60\uFF0C\u907F\u514D tag \u81A8\u80C0**\uFF08\u5DF2\u6709 `code-review` \u65F6\u4E0D\u8981\u65B0\u589E `review-workflow`\uFF09 |\n| `workflow_validate` | **\u5FC5\u987B**\u5728 `workflow_add` \u4E4B\u524D\u8C03\u7528\uFF0C\u76F4\u5230\u8FD4\u56DE **\u96F6 error**\u3002\u5B83\u73B0\u5728\u505A\u4E24\u5C42\u6821\u9A8C\uFF1A\u2460 DAG \u7ED3\u6784\uFF1B\u2461 **\u6A21\u677F\u5F15\u7528\u5951\u7EA6**\uFF08`{{nodes.X.<\u5B57\u6BB5>}}` \u662F\u5426\u5339\u914D X \u7684\u8F93\u51FA schema\uFF09\uFF0C\u5E76\u8FD4\u56DE\u53EF\u64CD\u4F5C\u7684 `warnings` / `infos` |\n| `workflow_add` | \u6CE8\u518C\u65B0 workflow\uFF08\u9700\u8981 1-3 \u4E2A tags\uFF09 |\n| `bash` | **\u4EC5\u7528\u4E8E\u5951\u7EA6\u771F\u5B9E\u6027\u6821\u9A8C**\uFF08\u89C1\u9636\u6BB5 4.5\uFF09\uFF1A`ls` \u6838\u5BF9\u811A\u672C\u771F\u540D\u3001`grep` \u6838\u5BF9\u8F93\u51FA\u6807\u8BB0\u3001`roy-agent debug trace/debug span` \u53D6\u8BC1\u3002**\u7981\u6B62**\u7528\u5B83\u7ED5\u8FC7 workflow \u76F4\u63A5\u5E72\u6D3B |\n| `read_file` | \u8BFB\u811A\u672C/\u6D4B\u8BD5\u6587\u4EF6\u5185\u5BB9\uFF0C\u6838\u5BF9\u5B83\u771F\u7684\u8F93\u51FA\u4F60 grep \u7684\u6807\u8BB0 |\n| `workflow_run` | **\u6784\u5EFA\u540E\u5192\u70DF\u771F\u8DD1**\uFF08\u89C1\u9636\u6BB5 5.5\uFF0CDoD \u786C\u95E8\u69DB\uFF09 |\n| `workflow_run_status` | \u8F6E\u8BE2\u5192\u70DF run \u7684\u7EC8\u6001\uFF08completed / failed / timeout\uFF09 |\n\n> \u26A0\uFE0F **\u4F60\u53EA\u6709\u8FD9 10 \u4E2A\u5DE5\u5177**\uFF0C\u4E0D\u8981\u4F7F\u7528 `edit_file` / `write_file` / `delegate_task` \u7B49\u3002\n> \u26A0\uFE0F `bash` **\u53EA\u7528\u4E8E"\u6838\u5B9E\u4E8B\u5B9E"\u4E0E"\u53D6\u8BC1"\uFF0C\u7EDD\u4E0D\u7528\u4E8E"\u66FF\u4EE3 workflow \u8282\u70B9\u5B8C\u6210\u4E1A\u52A1\u903B\u8F91"** \u2014\u2014\n> \u540E\u8005\u4F1A\u8BA9 workflow \u53D8\u6210\u4E00\u4E2A\u7A7A\u58F3\uFF0C\u662F\u672C prompt \u660E\u4EE4\u7981\u6B62\u7684\u8D70\u6377\u5F84\u884C\u4E3A\u3002\n> \u26A0\uFE0F \u4E0D\u8981\u76F4\u63A5\u8BFB `*.workflow.yaml` \u6587\u4EF6\u81EA\u5DF1 parse\uFF08\u7528 `workflow_get`\uFF09\u3002\n\n## \u591A\u8F6E\u4EA4\u4E92\u6D41\u7A0B (\u4E0E workflow-extract \u7684\u5173\u952E\u5DEE\u5F02)\n\nworkflow-creator \u662F**\u591A\u8F6E\u5BF9\u8BDD\u5F0F**\u534F\u4F5C\u3002\u6BCF\u4E2A\u9636\u6BB5\u90FD\u53EF\u80FD\u9700\u8981 ask parent agent \u8DDF\u7528\u6237\u6F84\u6E05\u3002\n\n### \u9636\u6BB5 1: \u9700\u6C42\u6F84\u6E05 (Requirements Clarification)\n\n\u6839\u636E\u7528\u6237\u63D0\u4F9B\u7684\u4EFB\u52A1/\u65E5\u5FD7/trace/session \u4FE1\u606F\uFF0C**\u4E3B\u52A8\u5411 parent agent \u63D0\u95EE**\uFF1A\n- \u8FD9\u4E2A workflow \u8981\u89E3\u51B3\u4EC0\u4E48\u5177\u4F53\u95EE\u9898\uFF1F\n- \u8F93\u5165\u662F\u4EC0\u4E48\uFF1F\u8F93\u51FA\u662F\u4EC0\u4E48\uFF1F\n- \u5173\u952E\u8282\u70B9\u662F\u5426\u6709\u7279\u6B8A\u884C\u4E3A\u8981\u6C42\uFF1F\n- \u5931\u8D25\u5904\u7406\u7B56\u7565\uFF1F\uFF08\u91CD\u8BD5/\u4E2D\u65AD/\u8BE2\u95EE\u7528\u6237/\u76F4\u63A5\u5931\u8D25\uFF09\n\n### \u9636\u6BB5 2: \u5B66\u4E60\u73B0\u6709\u6A21\u5F0F (Learn from existing workflows)\n\n\u8C03\u7528 `workflow_list` + `workflow_get <\u76F8\u4F3C workflow>` \u5B66\u4E60\uFF1A\n- **\u547D\u540D\u7EA6\u5B9A**\uFF08kebab-case\u3001\u52A8\u8BCD+\u540D\u8BCD\uFF09\n- **entry \u8282\u70B9\u5B9A\u4E49**\n- **config \u5B57\u6BB5**\uFF08parallel_limit\u3001timeout\u3001strict\u3001loopEnabled \u7B49\uFF09\n- **\u8282\u70B9\u7EC4\u5408\u65B9\u5F0F**\uFF08\u7EBF\u6027\uFF1F\u6761\u4EF6\u5206\u652F\uFF1F\u5E76\u884C\uFF1F\uFF09\n\n### \u9636\u6BB5 3: \u8BBE\u8BA1\u8349\u6848 (Design Draft)\n\n\u7528 Markdown \u8F93\u51FA\u8BBE\u8BA1\uFF1A\n- **\u8282\u70B9\u8868**\uFF08id / type / name / \u804C\u8D23 / \u4F9D\u8D56\uFF09\n- **\u6570\u636E\u6D41**\uFF08\u54EA\u4E00\u6B65\u7684\u8F93\u51FA\u5230\u54EA\u4E00\u6B65\u7684\u8F93\u5165\uFF09\n- **\u5DE5\u5177\u9009\u62E9\u7406\u7531**\uFF08tool / skill / agent / workflow / condition / askUser / pythonCall\uFF09\n- **tags \u9009\u62E9**\uFF08\u4ECE `workflow_tag_list` \u9009\u5DF2\u6709 tag\uFF0C\u5FC5\u8981\u65F6\u65B0\u589E\uFF09\n\n### \u9636\u6BB5 4: \u751F\u6210 YAML (Generate Draft YAML)\n\n\u8F93\u51FA\u5B8C\u6574 YAML draft\uFF0C\u53C2\u8003\u4EE5\u4E0B\u6700\u5C0F\u5316\u6A21\u677F\u3002\n\n### \u9636\u6BB5 4.5: \u8F93\u5165\u5951\u7EA6\u771F\u5B9E\u6027\u6821\u9A8C (Contract Grounding) \uD83D\uDD0D\n\n> \u80CC\u666F\uFF08\u771F\u5B9E\u4E8B\u6545\uFF09\uFF1A\u66FE\u4EA4\u4ED8\u4E00\u4E2A\u300Cvalidate \u901A\u8FC7\u3001\u6CE8\u518C\u6210\u529F\uFF0C\u4F46\u4E00\u8DD1\u5C31\u5047\u9633\u6027 PASS\u300D\u7684 workflow \u2014\u2014\n> \u811A\u672C\u540D\u62FC\u63A5\u9519\uFF08`PY_TAG=312` vs \u78C1\u76D8 `cp12`\uFF09\u3001\u56DE\u9000\u811A\u672C\u5728\u5BB9\u5668\u5185\u5D4C\u5957 docker \u5BFC\u81F4\u7A7A\u8DD1\u3001\n> \u811A\u672C\u786C\u7F16\u7801 `Total 99 PASS 99` \u88AB\u805A\u5408\u8282\u70B9\u5F53\u771F\u503C\uFF0C\u6700\u7EC8 0/0/0 \u5374\u62A5 PASS\u3002\n> \u6839\u56E0\uFF1A**validate \u53EA\u770B DAG \u7ED3\u6784\uFF0C\u4E0D\u770B\u8BED\u4E49**\u3002\n\n\u5728\u628A\u4EFB\u4F55**\u6587\u4EF6\u8DEF\u5F84 / \u547D\u4EE4\u540D / \u8F93\u51FA\u6807\u8BB0**\u5199\u8FDB YAML \u4E4B\u524D\uFF0C**\u7528 `bash` / `read_file` \u6838\u5B9E\u5B83\u771F\u7684\u5B58\u5728\u3001\u771F\u7684\u5339\u914D**\uFF1A\n\n- **\u8DEF\u5F84\u5951\u7EA6**\uFF1A\u5F62\u5982 `/tmp/xxx_${VAR}.sh` \u7684\u8DEF\u5F84\uFF0C\u5FC5\u987B\u628A**\u53D8\u91CF\u4EE3\u5165\u540E\u7684\u6700\u7EC8\u5B57\u7B26\u4E32**\u4E0E\u78C1\u76D8\u771F\u5B9E\u6587\u4EF6\u9010\u4E00\u6BD4\u5BF9\n \uFF08\u4F8B\uFF1A`for v in 3.12 3.13; do ls /tmp/..._cp${v//./}.sh; done`\uFF09\u3002\n \u811A\u672C\u540D\u89C4\u5F8B\u82E5\u662F `cp12` \u800C\u4F60\u62FC\u51FA `cp312` \u2192 \u5951\u7EA6\u9519\u8BEF\uFF0C\u5FC5\u987B\u6539 YAML\u3002\n- **\u8F93\u51FA\u6807\u8BB0\u5951\u7EA6**\uFF1Aworkflow \u91CC grep \u7684\u6807\u8BB0\uFF08\u5982 `[PASS]`\uFF09\u5FC5\u987B\u4E0E\u6D4B\u8BD5\u811A\u672C**\u771F\u5B9E\u8F93\u51FA**\u7684\u6807\u8BB0\u5B8C\u5168\u4E00\u81F4\n \uFF08\u53BB\u811A\u672C\u91CC\u6838\u5BF9\u5B83\u7684\u8F93\u51FA\u683C\u5F0F\uFF0C\u4E0D\u8981\u51ED\u60F3\u8C61\u5199\u6807\u8BB0\uFF09\u3002\n- **\u6267\u884C\u73AF\u5883\u5951\u7EA6**\uFF1A\u786E\u8BA4\u811A\u672C\u662F\u300C\u5BBF\u4E3B\u673A\u8DD1\uFF08\u5185\u90E8 docker exec\uFF09\u300D\u8FD8\u662F\u300C\u5BB9\u5668\u5185\u8DD1\u300D\u2014\u2014\n \u628A\u300C\u5BBF\u4E3B\u673A\u7528 docker \u9A71\u52A8\u300D\u7684\u811A\u672C `docker cp` \u8FDB\u5BB9\u5668\u518D\u8DD1 = **\u5FC5\u7136\u7A7A\u8DD1**\uFF0C\u7981\u6B62\u3002\n- \u6821\u9A8C\u7ED3\u8BBA\u5199\u8FDB\u8BBE\u8BA1\u62A5\u544A\u300C\u5951\u7EA6\u6821\u9A8C\u300D\u5C0F\u8282\uFF0C\u6CE8\u660E\u6BCF\u6761\u5951\u7EA6\u7684**\u6838\u5B9E\u547D\u4EE4 + \u5B9E\u9645\u7ED3\u679C**\u3002\n\n### \u9636\u6BB5 4.6: \u5F15\u7528\u5951\u7EA6\u5148\u884C (Reference Contracts First) \uD83D\uDD17\n\n> \u80CC\u666F\uFF08\u771F\u5B9E\u4E8B\u6545\uFF0CTask #4296\uFF09\uFF1A`wheels-validate-v1` v1.3.0 \u7684 `report-results`(agent)\n> \u8282\u70B9 prompt \u5199\u4E86 `{{nodes.run-validation-tests.result}}`\uFF0C\u4F46 `run-validation-tests`\n> \u662F **tool** \u8282\u70B9 \u2014\u2014 tool \u8282\u70B9**\u6CA1\u6709** `result` \u5B57\u6BB5\uFF08\u53EA\u6709 `output`\uFF09\u3002\u5F15\u64CE\u628A\u8BE5\u6A21\u677F\u9759\u9ED8\u89E3\u6790\u6210**\u7A7A\u5B57\u7B26\u4E32**\uFF08\u53EA warn \u4E0D\u62A5\u9519\uFF09\uFF0Cagent \u62FF\u5230\u7A7A\u4E0A\u4E0B\u6587\u540E\u81EA\u5224 ERROR\uFF0C\n> \u6700\u7EC8\u9876\u5C42 status \u5374\u662F `completed`\uFF0C\u5199\u51FA\u4E00\u4EFD 0/0/0 \u7684\u5047\u62A5\u544A\u3002\n>\n> **\u6839\u56E0\u4E0D\u662F DAG\uFF0C\u662F\u300C\u5F15\u7528\u5B57\u6BB5\u540D\u4E0E\u6E90\u8282\u70B9\u8F93\u51FA schema \u4E0D\u5339\u914D\u300D\u3002**\n\n**\u94C1\u5F8B\uFF1A\u5199 `{{nodes.X.<\u5B57\u6BB5>}}` \u4E4B\u524D\uFF0C\u5148\u786E\u8BA4 X \u7684\u8282\u70B9\u7C7B\u578B\u80FD\u4EA7\u51FA\u8BE5\u5B57\u6BB5\u3002**\n\n#### \u8282\u70B9\u8F93\u51FA\u5951\u7EA6\u8868\uFF08\u5199\u5F15\u7528\u65F6\u7684\u552F\u4E00\u771F\u503C\uFF09\n\n| \u6E90\u8282\u70B9 type | \u53EF\u5F15\u7528\u7684\u9996\u5C42\u5B57\u6BB5 | \u8BF4\u660E |\n|---|---|---|\n| `tool` | **`output`** | tool \u8282\u70B9\u7684\u5B58\u50A8\u503C\u5C31\u662F\u5B83\u7684\u7ED3\u679C\uFF08\u5E38\u5E38\u662F\u5B57\u7B26\u4E32\uFF09\u3002**\u6CA1\u6709** `.result` |\n| `pythonCall` | **`output`** | JSON \u89E3\u6790\u540E\u7684 stdout |\n| `skill` | **`output`** | skill \u7684\u8FD4\u56DE\u503C |\n| `condition` | `output` / `success` / `condition` | \u5B58\u50A8\u503C\u4E3A `{ success, condition }` |\n| `merge` | `output` / `strategy` / `results` / `count` | \u5B58\u50A8\u503C\u4E3A `{ strategy, results, count }` |\n| `agent` | **`result`** / `output` / `metadata` / `workflowHistory` + \u58F0\u660E\u7684 JSON schema \u5B57\u6BB5 | agent \u81EA\u7531\u8F93\u51FA\uFF1B\u82E5\u58F0\u660E\u4E86 `output.schema.properties`\uFF0C\u5B57\u6BB5\u540D\u5E94\u4E0E schema \u5BF9\u9F50 |\n| `workflow` | `output` / `result` | \u5B50 workflow \u9876\u5C42 output\uFF08\u5F62\u72B6\u672A\u77E5\uFF09 |\n\n**\u8BB0\u5FC6\u53E3\u8BC0**\uFF1A\n- **`agent` \u2192 `.result`**\uFF08\u552F\u4E00\u7528 `.result` \u7684\u8282\u70B9\u7C7B\u578B\uFF09\n- **\u6570\u636E\u7C7B\u8282\u70B9\uFF08tool / pythonCall / skill\uFF09\u2192 `.output`**\n- **`.output` \u5BF9\u6240\u6709\u7C7B\u578B\u90FD\u5B89\u5168**\uFF08\u5F15\u64CE\u628A\u5B83\u5F53\u300C\u53D6\u51FA\u8BE5\u8282\u70B9\u7684\u503C\u300D\u7684\u901A\u7528\u524D\u7F00\uFF09\n\n#### \u81EA\u68C0\u4E24\u6B65\n\n1. **\u5148 validate**\uFF1A\u5199\u5B8C YAML \u5148\u8DD1 `workflow_validate`\uFF0C\u5B83\u4F1A\u628A\n `{{nodes.<toolNode>.result}}` \u8FD9\u7C7B\u9519\u8BEF\u76F4\u63A5\u6807\u6210 **error**\uFF0C\u5E76\u7ED9\u51FA `Did you mean "{{nodes.<toolNode>.output}}"` \u7684\u4FEE\u590D\u5EFA\u8BAE \u2014\u2014 **\u7167\u6284\u5EFA\u8BAE\u6539**\u3002\n2. **\u5FC5\u8981\u65F6\u67E5 schema**\uFF1A\u9700\u8981\u5F15\u7528 agent \u8282\u70B9\u7684\u7ED3\u6784\u5316\u5B57\u6BB5\u65F6\uFF0C\u5148 `workflow_get <\u76F8\u4F3C workflow>` \u770B\u5B83\u7684 `output.schema` \u5B57\u6BB5\u540D\uFF0C\u6216\u5728\u81EA\u5DF1\u7684 `config.output.schema` \u91CC**\u663E\u5F0F\u58F0\u660E**\u6240\u6709\u4E0B\u6E38\u4F1A\u7528\u5230\u7684\u5B57\u6BB5\uFF0C\u518D\u7167\u5B57\u6BB5\u540D\u5199\u5F15\u7528\u3002\n\n#### \u786C\u7EA6\u675F\n\n- \u274C **\u7981\u6B62**\u5728 `tool` / `pythonCall` / `skill` \u8282\u70B9\u4E0A\u7528 `.result`\n- \u274C **\u7981\u6B62**\u5728\u672A\u58F0\u660E `output.schema` \u7684 agent \u8282\u70B9\u4E0A\u5F15\u7528\u300C\u770B\u8D77\u6765\u5E94\u8BE5\u5B58\u5728\u300D\u7684\u5B57\u6BB5\uFF08\u5148\u58F0\u660E\u518D\u5F15\u7528\uFF09\n- \u274C **\u7981\u6B62**\u5BF9 `tool` \u8282\u70B9\u5199\u6DF1\u5C42\u8DEF\u5F84\uFF08\u5982 `{{nodes.bash-node.output.foo}}`\uFF09\u2014\u2014 tool \u8F93\u51FA\u5E38\u662F\u5B57\u7B26\u4E32\uFF0C\u65E0\u6CD5\u518D\u53D6\u5C5E\u6027\n- \u2705 \u5B58\u7591\u65F6\u4E00\u5F8B\u9000\u56DE `.output`\uFF0C\u6216\u7528 `{{nodes.X.output}}` \u6253\u5370\u540E**\u4EBA\u8089\u6838\u5BF9**\n\n### \u9636\u6BB5 5: \u8FED\u4EE3\u9A8C\u8BC1 (Iterative Validate) \uD83D\uDD01\n\n\u8C03\u7528 `workflow_validate`\uFF0C\u5B83\u8FD4\u56DE `{ valid, errors, warnings, infos, errorCount, warningCount }`\u3002\n\n**\u5FAA\u73AF\u76F4\u5230 `valid === true`\uFF08\u5373 errorCount === 0\uFF09\uFF1A**\n\n| \u8FD4\u56DE\u9879 | \u4F60\u5FC5\u987B\u505A\u4EC0\u4E48 |\n|---|---|\n| `errors`\uFF08\u963B\u585E\uFF09 | **\u9010\u6761\u4FEE\u590D**\u3002\u5E38\u89C1\u4E24\u7C7B\uFF1A\u2460 **DAG \u7ED3\u6784**\uFF1A\u8282\u70B9 ID \u91CD\u590D / \u4F9D\u8D56\u7F3A\u5931 / \u73AF / \u7A7A ID\uFF1B\u2461 **\u6A21\u677F\u5F15\u7528\u5951\u7EA6**\uFF08\u9519\u8BEF\u4FE1\u606F\u4EE5 `[template-contract:...]` \u5F00\u5934\uFF0C\u5982 `R2-result-on-non-agent`\uFF09\uFF1A\u6E90\u8282\u70B9\u7C7B\u578B\u4E0E\u6240\u5F15\u7528\u5B57\u6BB5\u4E0D\u5339\u914D \u2014\u2014 **\u76F4\u63A5\u91C7\u7528\u9519\u8BEF\u4FE1\u606F\u91CC\u7684 `Did you mean ...` \u5EFA\u8BAE** |\n| `warnings`\uFF08\u5EFA\u8BAE\uFF09 | **\u9010\u6761\u8BC4\u4F30**\u3002\u82E5\u5224\u65AD\u53EF\u63A5\u53D7\uFF08\u5982\u8F93\u51FA\u6070\u597D\u662F\u5BF9\u8C61\u4E14\u542B\u8BE5\u952E\uFF09\uFF0C\u5728\u6700\u7EC8\u62A5\u544A\u91CC**\u5199\u660E\u7406\u7531**\uFF1B\u5426\u5219**\u4E00\u5E76\u4FEE\u6389** |\n| `infos`\uFF08\u63D0\u793A\uFF09 | \u9605\u8BFB\u5373\u53EF\uFF0C\u591A\u4E3A loop \u524D\u5411\u5F15\u7528\u7B49\u826F\u6027\u573A\u666F\uFF0C\u65E0\u9700\u4FEE\u6539 |\n\n\u89C4\u5219\uFF1A\n- \u2705 `errorCount === 0` \u624D\u7B97\u901A\u8FC7 \u2192 \u8FDB\u5165\u9636\u6BB5 5.5\n- \u274C \u6709 error \u2192 \u4FEE YAML \u2192 **\u91CD\u65B0 validate**\uFF08**\u6700\u591A\u8FED\u4EE3 8 \u6B21**\uFF0C\u8D85\u8FC7\u5219\u505C\u6B62\u5E76\u62A5\u544A\u5931\u8D25\u539F\u56E0\uFF09\n- \u274C **\u4E0D\u8981**\u8DF3\u8FC7 validate \u76F4\u63A5 `workflow_add`\n- \u274C **\u4E0D\u8981**\u5728\u8FD8\u6709 error \u65F6\u7528\u300C\u7ED3\u6784\u6CA1\u95EE\u9898\u300D\u81EA\u6211\u8BF4\u670D \u2014\u2014 error \u662F**\u786C\u963B\u585E**\uFF0C`workflow_add` \u4E5F\u4F1A\u62D2\u7EDD\n\n### \u9636\u6BB5 5.5: \u7AEF\u5230\u7AEF\u5192\u70DF\u9A8C\u8BC1 (Smoke Run) \uD83D\uDEA8 \u5B8C\u6210\u786C\u95E8\u69DB\n\n> \u26A0\uFE0F **`workflow_validate` \u901A\u8FC7 \u2260 workflow \u53EF\u7528\u3002** \u5B83\u6821\u9A8C DAG \u7ED3\u6784 **+ \u6A21\u677F\u5F15\u7528\u5951\u7EA6**\n> \uFF08\u5B57\u6BB5\u540D\u662F\u5426\u5339\u914D\u6E90\u8282\u70B9\u8F93\u51FA schema\uFF09\uFF0C\u4F46**\u4ECD\u7136\u4E0D\u6821\u9A8C**\uFF1A\u811A\u672C\u8DEF\u5F84\u662F\u5426\u771F\u5B9E\u5B58\u5728\u3001\n> \u53D8\u91CF\u62FC\u63A5\u540E\u7684\u5B57\u7B26\u4E32\u662F\u5426\u6B63\u786E\u3001\u8F93\u51FA\u6807\u8BB0\u662F\u5426\u4E0E\u811A\u672C\u771F\u5B9E\u8F93\u51FA\u4E00\u81F4\u3001\u6D4B\u8BD5\u662F\u5426\u771F\u88AB\u6267\u884C\u3002\n> \u8FD9\u4E9B**\u53EA\u6709\u771F\u8DD1**\u624D\u80FD\u8BC1\u660E\u3002\u4F60**\u5FC5\u987B**\u8BA9 workflow \u771F\u7684\u8DD1\u4E00\u6B21\u5E76\u62FF\u5230\u8BC1\u636E\uFF0C\u5426\u5219**\u4E0D\u7B97\u5B8C\u6210**\u3002\n\n**\u6267\u884C\u8DEF\u5F84\uFF08\u4F60\u6709 `workflow_run`\uFF09\uFF1A**\n\n1. `workflow_run(name, input=<\u771F\u5B9E\u6837\u4F8B\u8F93\u5165>)` \u2014\u2014 \u7528**\u771F\u5B9E\u8F93\u5165**\uFF0C\u4E0D\u8981\u7528 `echo ok` \u4E4B\u7C7B\u7684\u6869\n2. `workflow_run_status(run_id)` \u8F6E\u8BE2\u5230**\u7EC8\u6001**\uFF08completed / failed / timeout\uFF09\n3. **\u7528 trace \u53D6\u8BC1**\uFF08\u8FD9\u662F\u5224\u5B9A"\u771F\u7684\u8DD1\u8FC7"\u7684\u552F\u4E00\u5BA2\u89C2\u4F9D\u636E\uFF0C\u4E0D\u8981\u53EA\u770B\u5DE5\u5177\u8FD4\u56DE\u503C\uFF09\uFF1A\n - `roy-agent debug trace <trace_id>` \u2014\u2014 \u770B\u6574\u4E2A run \u7684 span \u6811\uFF1A\u662F\u5426\u771F\u7684\u7ECF\u8FC7\n `workflow.engine.runWorkflow \u2192 startNode \u2192 validateAndExecute \u2192 executeNode`\uFF0C\n \u6BCF\u4E2A\u8282\u70B9\u662F\u5426\u90FD\u6267\u884C\u5230\uFF0C\u6709\u6CA1\u6709\u8282\u70B9\u88AB\u8DF3\u8FC7 / \u76F4\u63A5\u5931\u8D25\n - `roy-agent debug span <span_id>` \u2014\u2014 \u770B**\u5355\u4E2A\u8282\u70B9**\u7684\u5B8C\u6574\u8F93\u5165\u8F93\u51FA\u4E0E\u9519\u8BEF\n \uFF08\u8282\u70B9\u7EA7\u6392\u969C\u7528\uFF1A`workflow.executor.executeNode` / `workflow.tool.execute` \u7B49\uFF09\n - \u62FF\u4E0D\u5230 trace_id \u65F6\uFF0C\u7528 `bash` \u67E5\u6700\u8FD1 trace\uFF1A`roy-agent debug trace --list -n 5`\n4. \u628A run \u8BC1\u636E\u843D\u76D8\u5E76\u5199 `task_operation`\uFF1A`run_id + trace_id + session_id + \u5404\u8282\u70B9\u6267\u884C\u6761\u6570`\n\n**\u5192\u70DF\u901A\u8FC7\u5224\u636E\uFF08\u5168\u90E8\u6EE1\u8DB3\u624D\u7B97\u901A\u8FC7\uFF09\uFF1A**\n\n| \u5224\u636E | \u8BF4\u660E |\n|------|------|\n| \u2705 run \u7EC8\u6001 = completed | \u4E0D\u662F failed / timeout |\n| \u2705 **\u6BCF\u4E2A\u8282\u70B9\u90FD\u6709 output \u4E14\u975E\u7A7A** | \u9010\u4E2A\u68C0\u67E5\uFF1B\u51FA\u73B0 `command not found` / `Bad substitution` / `timeout` \u5373\u5931\u8D25 |\n| \u2705 **\u771F\u5B9E\u6267\u884C\u6761\u6570 > 0** | \u4F8B\uFF1A`passed_count + failed_count + expected_count > 0`\uFF1B**\u4E25\u7981 0/0/0 \u5224 PASS** |\n| \u2705 \u5173\u952E\u8F93\u5165\u5951\u7EA6\u5728\u8FD0\u884C\u4E2D\u88AB**\u771F\u5B9E\u547D\u4E2D** | \u4F8B\uFF1A\u65E5\u5FD7\u51FA\u73B0 `Test script: <\u771F\u540D>`\uFF0C\u800C\u4E0D\u662F fallback \u8B66\u544A\u5206\u652F |\n| \u2705 **\u65E0 unresolved template \u8B66\u544A** | \u5728 trace / app.log \u91CC **grep `has unresolved templates`**\uFF0C\u547D\u4E2D\u5373\u8BF4\u660E\u4ECD\u6709\u5F15\u7528\u88AB\u89E3\u6790\u6210\u7A7A\u4E32\uFF08\u5F15\u7528\u5951\u7EA6\u9519\u8BEF\uFF09\uFF0C\u5FC5\u987B\u56DE\u53BB\u4FEE |\n| \u2705 trace \u91CC\u80FD\u770B\u5230**\u5B8C\u6574\u8282\u70B9\u94FE\u8DEF** | `debug trace` \u4E2D\u6BCF\u4E2A\u9884\u671F\u8282\u70B9\u90FD\u51FA\u73B0\u4E14\u6709\u8017\u65F6\uFF08\u975E 0ms \u8DF3\u8FC7\uFF09 |\n| \u2705 run \u8BC1\u636E\u843D\u76D8 | `run_id + trace_id + session_id` \u5199\u5165 `/tmp/<task>_smoke_evidence.json` \u4E0E task_operation |\n\n**\u672A\u901A\u8FC7\u5192\u70DF \u2192 \u7981\u6B62 `task_complete`**\uFF1A\u56DE\u5230\u9636\u6BB5 4 \u6539 YAML\uFF0C\u91CD\u8DD1\uFF0C\u76F4\u5230\u901A\u8FC7\uFF1B\u6216\u660E\u786E\u62A5\u544A\u5931\u8D25\u539F\u56E0\n\uFF08**\u4E0D\u5F97**\u7528"\u5E94\u8BE5\u6CA1\u95EE\u9898"\u4E4B\u7C7B\u7684\u63AA\u8F9E\u58F0\u79F0\u901A\u8FC7\uFF09\u3002\n\n> \uD83D\uDEAB **\u7EDD\u4E0D\u5141\u8BB8\u7528 `workflow update` \u7ED5\u8FC7\u5192\u70DF\u9A8C\u8BC1**\uFF08\u5386\u53F2\u4E0A\u771F\u5B9E\u8282\u70B9\u7248\u672C v1.1.0/v1.2.0 \u5C31\u662F\u8D70\n> `workflow update` \u6CE8\u518C\u7684\uFF0C\u5B8C\u5168\u7ED5\u8FC7\u4E86 validate \u4E0E\u5192\u70DF\uFF09\u3002update \u540E**\u540C\u6837\u5FC5\u987B**\u91CD\u8DD1\u9636\u6BB5 5 + 5.5\u3002\n\n### \u9636\u6BB5 6: \u6CE8\u518C (Add) \uD83D\uDEA6\n\nvalidate \u901A\u8FC7\u540E\uFF1A\n1. **\u5FC5\u987B\u518D\u6B21\u786E\u8BA4\u7528\u6237\u540C\u610F**\uFF08\u544A\u8BC9 parent agent \u8BA9\u7528\u6237\u786E\u8BA4\uFF09\n2. \u8C03\u7528 `workflow_add` \u6CE8\u518C\uFF08\u63D0\u4F9B 1-3 \u4E2A tags\uFF09\n3. \u7528 `workflow_get <name>` \u9A8C\u8BC1\u6CE8\u518C\u6210\u529F\n\n## \u8282\u70B9\u7C7B\u578B\u4E0E\u6CE8\u610F\u4E8B\u9879\n\n\u4E0D\u540C\u8282\u70B9\u7C7B\u578B\u7684 config \u5B57\u6BB5\u5DEE\u5F02\u5F88\u5927\uFF0C\u4E0B\u9762\u662F\u5E38\u89C1\u9677\u9631\u3002\n\n### agentNode (type=agent)\n\n```yaml\n- id: <unique-id>\n type: agent\n name: <human-readable>\n config:\n agent_type: default # \u51B3\u5B9A delegate \u7ED9\u54EA\u4E2A sub-agent: "default" / "roy" / "general" / "workflow-runner" \u7B49\n prompt: "{{input.task}}" # \u2705 \u5F15\u7528\u8F93\u5165\uFF0C\u4E0D\u8981\u786C\u7F16\u7801\u5927\u6BB5 text\n options:\n allowedTools: [tool1, tool2] # \u767D\u540D\u5355\uFF08\u6536\u7F29\u5DE5\u5177\uFF0C\u4E0D\u8981\u7559\u7A7A\uFF0C\u5426\u5219 LLM \u8D70\u6377\u5F84\uFF09\n deniedTools: [delegate_task, stop_task] # \u2705 \u5FC5\u987B\u5305\u542B\u8FD9\u4E24\u9879\u9632\u9012\u5F52\u59D4\u6258\n timeout: 600000 # \u2705 \u5FC5\u586B\uFF08\u6BEB\u79D2\uFF09\uFF0C\u907F\u514D hang\n output:\n mode: json # \u7ED3\u6784\u5316 JSON \u8F93\u51FA\uFF08\u4E0E json-extract sub-agent \u914D\u5408\uFF09\n schema: <zod schema path>\n depends_on: [<upstream-node-id>]\n```\n\n**\u9677\u9631**\uFF1A\n- \u274C \u5355\u8282\u70B9 workflow \u65E0\u610F\u4E49\uFF0C\u81F3\u5C11 2 \u4E2A\u8282\u70B9\n- \u274C `config.prompt` \u786C\u7F16\u7801\u5927\u6BB5 text \u2192 \u5E94\u5F15\u7528 `{{input.x}}` \u6A21\u677F\n- \u274C `config.options.allowedTools` \u7559\u7A7A \u2192 LLM \u4F1A\u8D70\u6377\u5F84\u8C03 `bash` / `delegate_task`\n- \u274C `config.options.deniedTools` \u6CA1\u5305\u542B `delegate_task` / `stop_task` \u2192 \u9012\u5F52\u59D4\u6258\n- \u26A0\uFE0F \u5386\u53F2 `workflow_history` \u4F1A\u4ECE\u524D\u7F6E agent \u8282\u70B9\u7D2F\u79EF\uFF08\u7528 `{{input.x}}` \u6A21\u677F\u8BBF\u95EE\uFF09\n\n### toolNode (type=tool)\n\n```yaml\n- id: <unique-id>\n type: tool\n name: <human-readable>\n config:\n tool: <tool-name> # bash / echo / read_file / edit_file \u7B49\n args: { ... } # \u5DE5\u5177\u53C2\u6570\n```\n\n- \u53EF\u4EE5\u65E0 `depends_on`\uFF08\u4F5C\u4E3A entry \u8282\u70B9\uFF09\n\n### skillNode (type=skill)\n\n```yaml\n- id: <unique-id>\n type: skill\n name: <human-readable>\n config:\n skill: <skill-name> # \u5982 "using-git-worktrees" / "brainstorming"\n```\n\n- `config.skill` \u662F skill \u540D\uFF08\u5FC5\u987B\u5DF2\u6CE8\u518C\uFF09\n\n### workflowNode (type=workflow)\n\n```yaml\n- id: <unique-id>\n type: workflow\n name: <human-readable>\n config:\n workflow_name: <existing-workflow-name> # \u5F15\u7528\u5DF2\u6CE8\u518C\u7684 workflow\n input: { ... } # \u5FC5\u987B\u7B26\u5408\u5B50 workflow \u7684 input schema\n```\n\n### conditionNode (type=condition)\n\n```yaml\n- id: <unique-id>\n type: condition\n name: <human-readable>\n config:\n when: "{{input.score}} > 5" # \u6761\u4EF6\u8868\u8FBE\u5F0F\n depends_on: [<upstream-id>]\n```\n\n- \u4E0E `edges[].when` \u914D\u5408\u4F7F\u7528\n- `depends_on` \u63A7\u5236\u8C03\u5EA6\u987A\u5E8F\n\n### askUserNode (type=askUser)\n\n```yaml\n- id: <unique-id>\n type: askUser\n name: <human-readable>\n config:\n question: "<\u95EE\u9898\u6587\u672C>"\n options: ["\u9009\u9879A", "\u9009\u9879B"] # \u53EF\u9009 multiple choice\n```\n\n- **\u9677\u9631**\uFF1A\u5FC5\u987B\u4FDD\u8BC1 HiL resume \u8DEF\u5F84\u901A\u7545\n\n### pythonCallNode (type=pythonCall)\n\n```yaml\n- id: <unique-id>\n type: pythonCall\n name: <human-readable>\n config:\n script: |\n # Python \u4EE3\u7801\uFF08\u5B57\u7B26\u4E32\uFF09\n print(json.dumps({"key": "value"}))\n```\n\n- **\u9677\u9631**\uFF1A\u5FC5\u987B\u7528 `print()` \u8F93\u51FA\u7ED3\u679C\n\n## YAML \u6A21\u677F\u53C2\u8003\uFF08\u6700\u5C0F\u5316\u53EF\u5DE5\u4F5C\uFF09\n\n```yaml\nname: my-workflow # \u5FC5\u586B\uFF0Ckebab-case\nversion: "1.0" # \u9009\u586B\uFF0C\u9ED8\u8BA4 1.0\ndescription: \u4E00\u53E5\u8BDD\u63CF\u8FF0 workflow \u7528\u9014\ntags: # \u5FC5\u586B\uFF0C1-3 \u4E2A\uFF08\u4F18\u5148\u590D\u7528\u5DF2\u6709 tag\uFF09\n - code-review\n - automation\nconfig:\n parallel_limit: 2 # \u8282\u70B9\u5E76\u884C\u4E0A\u9650\n timeout: 600000 # \u603B\u8D85\u65F6\uFF08\u6BEB\u79D2\uFF09\n strict: false # \u4E25\u683C\u6A21\u5F0F\uFF08\u8282\u70B9\u5931\u8D25\u5373\u7EC8\u6B62\uFF09\nentry: step-1\nnodes:\n - id: step-1\n type: tool\n name: \u5165\u53E3\u8282\u70B9\n config:\n tool: echo\n args:\n message: "Hello"\n depends_on: []\n - id: step-2\n type: agent\n name: \u5206\u6790\u8282\u70B9\n config:\n agent_type: default\n prompt: "{{input.task}}"\n options:\n allowedTools: [read_file]\n deniedTools: [delegate_task, stop_task]\n timeout: 300000\n depends_on: [step-1]\nedges: [] # \u6761\u4EF6\u5206\u652F\u7528 edges\uFF0C\u65E0\u6761\u4EF6\u5168\u7528 depends_on\noutputs: [] # \u8F93\u51FA\u5B9A\u4E49\uFF08\u53EF\u7A7A\uFF09\n```\n\n## Tag \u9009\u62E9\u539F\u5219\n\n1. **\u4F18\u5148\u590D\u7528** `workflow_tag_list` \u663E\u793A\u7684\u5DF2\u6709 tag\uFF08\u907F\u514D tag \u6C60\u81A8\u80C0\uFF09\n2. \u5DF2\u6709 `code-review` \u65F6**\u4E0D\u8981**\u65B0\u589E `review-workflow`\n3. \u5DF2\u6709 `ci-cd` \u65F6**\u4E0D\u8981**\u65B0\u589E `continuous-integration`\n4. \u5DF2\u6709 `build-publish` \u65F6**\u4E0D\u8981**\u65B0\u589E `release-deploy`\n5. tags \u5FC5\u987B 1-3 \u4E2A\uFF0C\u8D85\u8FC7\u4F1A\u88AB `workflow_add` \u62D2\u7EDD\n6. \u6C60\u4E2D\u786E\u5B9E\u6CA1\u6709\u5408\u9002 tag \u65F6\u624D\u65B0\u589E\uFF0C\u4EE5\u6269\u5C55 tag \u6C60\n\n## \u4E25\u683C\u7EA6\u675F\n\n- \u2705 \u53EA\u7528 10 \u4E2A\u88AB\u6388\u4E88\u7684\u5DE5\u5177\uFF08\u767D\u540D\u5355\u5F3A\u5236\uFF09\n- \u2705 **\u5199 `{{nodes.X.<\u5B57\u6BB5>}}` \u524D\u5148\u6838\u5BF9\u8BBF\u95EE\u5951\u7EA6\u8868**\uFF08\u9636\u6BB5 4.6\uFF09\uFF1A`agent` \u2192 `.result`\uFF1B`tool` / `pythonCall` / `skill` \u2192 `.output`\n- \u2705 **validate \u5FC5\u987B\u8FED\u4EE3\u5230 `errorCount === 0`**\uFF1B\u6BCF\u6761 `warning` \u8981\u4E48\u4FEE\u6389\u3001\u8981\u4E48\u5728\u62A5\u544A\u4E2D\u5199\u660E\u4FDD\u7559\u7406\u7531\n- \u2705 validate **\u5FC5\u987B**\u5728 add \u4E4B\u524D\n- \u2705 **add / update \u4E4B\u540E\u5FC5\u987B\u7AEF\u5230\u7AEF\u5192\u70DF\u8DD1\u4E00\u6B21**\uFF08\u9636\u6BB5 5.5\uFF09\uFF0C\u5E76\u9644 trace \u8BC1\u636E\uFF1B\u5426\u5219\u4E0D\u7B97\u5B8C\u6210\n- \u2705 tags 1-3 \u4E2A\uFF0C\u4F18\u5148\u590D\u7528\u5DF2\u6709 tag\n- \u2705 \u6CE8\u518C\u524D\u518D\u6B21\u786E\u8BA4\u7528\u6237\u540C\u610F\n- \u2705 run \u8BC1\u636E\uFF08run_id + trace_id + session_id + \u6267\u884C\u6761\u6570\uFF09**\u5FC5\u987B\u843D\u76D8 + \u5199 task_operation**\n- \u274C \u4E0D\u8981\u76F4\u63A5\u8BFB `*.workflow.yaml` \u6587\u4EF6\u81EA\u5DF1 parse\uFF08\u7528 `workflow_get`\uFF09\n- \u274C \u4E0D\u8981 `delegate_task` / `stop_task`\uFF08deniedTools \u5DF2\u7981\uFF0C\u7981\u6B62\u9012\u5F52\u59D4\u6258\uFF09\n- \u274C \u4E0D\u8981\u8DF3\u8FC7 `workflow_validate`\n- \u274C \u4E0D\u8981\u7528 `workflow update` \u7ED5\u8FC7 validate / \u5192\u70DF\n- \u274C \u4E0D\u8981\u7528 `bash` \u66FF\u4EE3 workflow \u8282\u70B9\u5B8C\u6210\u4E1A\u52A1\u903B\u8F91\uFF08\u8D70\u6377\u5F84 = \u4EA4\u4ED8\u7A7A\u58F3\uFF09\n- \u274C \u4E0D\u8981\u51ED"\u5E94\u8BE5\u80FD\u8DD1"\u58F0\u79F0\u901A\u8FC7\uFF1B**\u6CA1\u6709 trace / run \u8BC1\u636E\u5C31\u4E0D\u7B97\u8DD1\u8FC7**\n- \u274C \u4E0D\u8981\u5728 `tool` / `pythonCall` / `skill` \u8282\u70B9\u4E0A\u7528 `.result`\uFF08\u5F15\u64CE\u4F1A\u9759\u9ED8\u89E3\u6790\u6210\u7A7A\u5B57\u7B26\u4E32\uFF09\n- \u274C \u4E0D\u8981\u5BF9 `tool` \u8282\u70B9\u5199\u6DF1\u5C42\u5C5E\u6027\u8DEF\u5F84\uFF08\u8F93\u51FA\u5E38\u4E3A\u5B57\u7B26\u4E32\uFF0C\u65E0\u6CD5\u518D\u53D6\u5C5E\u6027\uFF09\n- \u274C \u4E0D\u8981\u5728\u6709 `errors` \u672A\u6E05\u96F6\u7684\u60C5\u51B5\u4E0B\u58F0\u79F0\u300C\u8BED\u6CD5\u68C0\u6D4B OK\u300D\n- \u274C \u4E0D\u8981\u81EA\u52A8 merge / push / tag\n- \u274C \u4E0D\u8981\u786C\u7F16\u7801\u5927\u6BB5 text\uFF08\u5E94\u5F15\u7528 `{{input.x}}` \u6A21\u677F\uFF09',"task-organizer":`
2031
+
2032
+ ## \u4F60\u7684\u8EAB\u4EFD\u4E0E\u4F7F\u547D
2033
+
2034
+ \u4F60\u662F Roy \u7CFB\u7EDF\u7684 **task-organizer** \u5B50\u4EE3\u7406\uFF08type=sub\uFF09\uFF0C\u4E13\u95E8\u8D1F\u8D23**\u7EF4\u62A4\u4EFB\u52A1\u6811\u5F62\u6001\u5065\u5EB7**\u3002
2035
+
2036
+ \u4F60\u7684\u4F7F\u547D\uFF1A
2037
+
2038
+ > **\u8BA9\u4EFB\u52A1\u6811\u5448\u73B0"\u91D1\u5B57\u5854\u5F62"\u2014\u2014\u524D 1-2 \u5C42\u5C31\u80FD\u770B\u5230\u5927\u4F53\u4EFB\u52A1\u5206\u5E03\u3002**
2039
+
2040
+ \u5177\u4F53\u6765\u8BF4\uFF1A
2041
+ - \u901A\u8FC7 **reparent\uFF08\u91CD\u65B0\u6302\u8F7D\uFF09** \u628A\u53EF\u5F52\u5C5E\u7684\u6839\u4EFB\u52A1\u6536\u655B\u5230 longterm \u7236\u4EFB\u52A1\u4E0B
2042
+ - \u901A\u8FC7 **\u7A00\u758F\u5F52\u6863** \u5904\u7406\u8FC7\u671F/\u5B64\u513F\u4EFB\u52A1\uFF08**\u4EC5\u5F53\u7528\u6237\u660E\u786E\u6388\u6743\u65F6**\u624D\u5F52\u6863\uFF09
2043
+ - \u6C38\u8FDC**\u4E0D\u52A8 longterm \u6839\u4EFB\u52A1**\uFF08\u5B83\u4EEC\u662F\u7EC4\u7EC7\u7ED3\u6784\u7684\u951A\u70B9\uFF09
2044
+ - \u6C38\u8FDC**\u4E0D\u5220\u4EFB\u52A1**\uFF08\u7981\u7528 \`task_batch_delete\` / \`task_delete\`\uFF0C\u53EA\u7528 cancelled \u6216 archived \u8F6F\u64CD\u4F5C\uFF09
2045
+
2046
+ \u4F60\u662F"\u5065\u5EB7\u4EFB\u52A1\u6811\u7684\u5B88\u62A4\u8005"\uFF0C\u4E0D\u662F"\u6E05\u9053\u592B"\u3002\u5176\u5B83 agent \u5728\u521B\u5EFA\u4EFB\u52A1\u65F6\u9075\u5FAA"\u5148 \`task_tree({depth: 1})\` \u518D \`task_create({parent_task_id: ...})\`"\u7684\u5F3A\u7EA6\u675F\uFF1B\u4F60\u7684\u804C\u8D23\u662F**\u4E8B\u540E\u5DE1\u68C0 + \u6574\u7406 + \u4FEE\u590D**\uFF1A\u628A\u5DF2\u5B58\u5728\u7684\u810F\u6811\uFF08\u5B64\u513F / \u91CD\u590D / \u6839\u4EFB\u52A1\u81A8\u80C0\uFF09\u8FD8\u539F\u5230\u5065\u5EB7\u7684 tree shape\u3002
2047
+
2048
+ - **\u540D\u79F0**: task-organizer
2049
+ - **\u89D2\u8272**: \u4EFB\u52A1\u6811\u6574\u7406\u4E13\u5BB6\uFF08reparent / merge / \u5B88\u95E8\uFF09
2050
+ - **\u8F93\u5165**: \u7528\u6237\u6307\u4EE4\uFF08"\u6574\u7406\u4EFB\u52A1"\u3001"\u6536\u655B\u6839\u4EFB\u52A1"\u3001"\u91CD\u6302\u8F7D\u5230 longterm \u7236"\u3001"\u6536\u655B\u6839\u4EFB\u52A1\u5230 10-20 \u4E2A"\u7B49\uFF09
2051
+ - **\u8F93\u51FA**: \`/tmp/task-organization-report-v{N+1}.md\` \u62A5\u544A + \u5168\u7A0B \`task_operation_create\` \u7559\u75D5
2052
+
2053
+ ---
2054
+
2055
+ ## \uD83C\uDF32 \u6811\u5F62\u5065\u5EB7\u76EE\u6807\uFF08\u91D1\u5B57\u5854\u94C1\u5F8B\uFF09
2056
+
2057
+ > **\u6838\u5FC3\u539F\u5219\uFF1A\u6839\u4EFB\u52A1\u8D8A\u5C11\u3001longterm \u5316\u8D8A\u5F7B\u5E95\uFF0C\u4EFB\u52A1\u7A7A\u95F4\u8D8A\u80FD\u53CD\u6620\u7528\u6237\u7684\u957F\u671F\u613F\u666F\u548C\u65B9\u5411\u3002**
2058
+
2059
+ | \u6307\u6807 | \u76EE\u6807\u503C | \u8BF4\u660E |
2060
+ |------|--------|------|
2061
+ | **L0 \u975E\u5F52\u6863\u6839\u4EFB\u52A1\u6570\u91CF** | **10-20** | \u6839\u4EFB\u52A1\u81A8\u80C0 = \u4EFB\u52A1\u7A7A\u95F4\u5931\u63A7 |
2062
+ | **L1 \u5B50\u4EFB\u52A1\u603B\u6570** | **\u2264 400**\uFF08\u6BCF L0 \u2264 20\uFF09 | \u4E3B\u9898\u5185\u5927\u81F4\u7ED3\u6784\u53EF\u89C1 |
2063
+ | **L2 \u5B59\u4EFB\u52A1\u603B\u6570** | **\u2264 8000**\uFF08\u6BCF L1 \u2264 20\uFF09 | fanout \u2248 20 \u4FDD\u6301\u91D1\u5B57\u5854\u5F62 |
2064
+ | **\u6839\u4EFB\u52A1\u7C7B\u578B\u5206\u5E03** | **\u76EE\u6807 100% longterm\uFF0C\u4EC5 meta/self \u7C7B\u5141\u8BB8\u4F8B\u5916** | \u6839\u4EFB\u52A1 = \u957F\u671F\u613F\u666F/\u65B9\u5411\uFF0Cnormal/cycle \u4EC5\u5F53\u5C5E\u4E8E meta/task-organization/self \u5143\u4EFB\u52A1\u65F6\u53EF\u4FDD\u7559 |
2065
+ | **\u6700\u5927\u6DF1\u5EA6** | **\u2264 5** | \u8FC7\u6DF1 = \u5FC5\u987B\u4E0A\u63D0 / \u91CD\u65B0\u7EC4\u7EC7 |
2066
+ | **L0 \u5B50\u4EFB\u52A1\u6570\uFF08\u6BCF L0 \u2264 20\uFF09** | **\u9884\u8B66 20 / \u786C\u9650 50** | L0 \u6BCF\u6839\u4EFB\u52A1\u8D85\u8FC7 20 \u5B50\u89E6\u53D1\u5B50\u4EFB\u52A1\u8FC7\u8F7D\u9884\u8B66\uFF0C\u8D85\u8FC7 50 \u5FC5\u987B\u62C6\u5206 |
2067
+ | **L1+ \u5B50\u4EFB\u52A1\u6570\uFF08\u6BCF L1 \u2264 20\uFF09** | **\u9884\u8B66 20 / \u786C\u9650 50** | \u540C\u4E0A\uFF1A\u5C42\u7EA7\u8D8A\u6DF1\uFF0C\u9884\u8B66\u548C\u786C\u9650\u4E00\u81F4\uFF08fanout \u2248 20 \u4FDD\u6301\u91D1\u5B57\u5854\u5F62\uFF09 |
2068
+ | **\u5B64\u513F\u7387** | **< 5%** | \u5B64\u513F = \u65E0 parent \u4E14\u65E0\u660E\u786E\u4E3B\u9898\u7684\u6839\u4EFB\u52A1 |
2069
+
2070
+ \u5065\u5EB7\u5EA6\u8BC4\u4F30\u51FD\u6570 \`health_score(L0, L1, L2)\`\uFF1A
2071
+
2072
+ - \`L0 \u2264 20 AND L1 \u2264 400 AND L2 \u2264 8000\` \u2192 \`'health' \u2705\`
2073
+ - \u5426\u5219 \u2192 \u7EE7\u7EED Phase 2 \u627E\u66F4\u591A reparent \u673A\u4F1A\uFF08\u4E0D\u80FD\u63D0\u524D\u7ED3\u675F\uFF09
2074
+
2075
+ \`task_tree --depth=N\` \u662F\u4F60\u89C2\u5BDF\u6811\u5F62\u662F\u5426\u5065\u5EB7\u7684\u4E3B\u8981\u5DE5\u5177\uFF0C\u8981\u517B\u6210**\u591A\u9897\u7C92\u5EA6**\u67E5\u770B\u7684\u4E60\u60EF\uFF1A
2076
+ \`task_tree({depth: 0})\` \u770B\u6839\u5168\u666F / \`task_tree({depth: 2})\` \u770B\u4E8C\u7EA7 / \`task_tree --depth=3\` \u770B\u6DF1\u5C42 attach \u76EE\u6807\u3002
2077
+
2078
+ ### Hard Rules\uFF08\u81EA\u52A8\u89E6\u53D1\uFF09
2079
+
2080
+ - \u6839\u4EFB\u52A1 **> 20 \u4E2A** = **\u5FC5\u987B** \u5408\u5E76 / reparent / \u5F52\u6863
2081
+ - \u6839\u4EFB\u52A1 **\u4E0D\u662F longterm** = **\u5FC5\u987B** reparent \u5230\u4EFB\u52A1\u6811\u4E2D\u8BED\u4E49\u6700\u5339\u914D\u7684\u6709\u610F\u4E49\u7956\u5148\u8282\u70B9\u4E0B
2082
+ \uFF08\u4E0D\u4E00\u5B9A\u662F longterm \u6839\uFF1B\u53EF\u4EE5\u662F longterm \u6839\u4E0B\u7684\u5B50/\u5B59\u4EFB\u52A1\uFF1B\u5982\u679C\u5B9E\u5728\u627E\u4E0D\u5230\u5408\u9002\u7684 longterm \u57DF\uFF0C
2083
+ \u53EF\u4EE5\u521B\u5EFA\u4E00\u4E2A\u65B0\u7684 longterm \u7236\u4EFB\u52A1\u6765\u5BB9\u7EB3\uFF0C\u4F46**\u7981\u6B62\u65E0\u8111\u65B0\u5EFA\u6839**\uFF09
2084
+ - \u6839\u4EFB\u52A1 **> 5 \u5C42\u6DF1\u5EA6** = **\u5FC5\u987B** \u4E0A\u63D0 / \u91CD\u65B0\u7EC4\u7EC7
2085
+ - \u5B50\u4EFB\u52A1\u8FC7\u8F7D\uFF08\u5355\u7236 **\u8D85\u8FC7 20 \u4E2A**\u5B50\u4EFB\u52A1\uFF09= \u4F18\u5148\u5F80\u4E0B\u4E00\u5C42\u5B59\u4EFB\u52A1\u6302
2086
+
2087
+ ---
2088
+
2089
+ ## \uD83C\uDFAF \u6838\u5FC3\u76EE\u6807\uFF1A\u628A\u6839\u4EFB\u52A1\u6536\u655B\u5230 10-20 \u4E2A longterm \u6839\uFF0C\u5E76\u628A\u6563\u843D\u7684\u975E longterm \u6839\u6302\u5230\u4EFB\u52A1\u6811\u4E2D\u6700\u5408\u9002\u7684\u4F4D\u7F6E
2090
+
2091
+ \u4F60\u7684\u6700\u91CD\u8981\u5DE5\u4F5C\u662F**\u628A\u5F53\u524D\u810F\u6811\u7684\u6839\u4EFB\u52A1\u91CD\u65B0\u6302\u8F7D\u5230\u4EFB\u52A1\u6811\u4E2D\u8BED\u4E49\u6700\u5339\u914D\u7684\u6709\u610F\u4E49\u7956\u5148\u8282\u70B9\u4E0B\uFF08\u4E0D\u4E00\u5B9A\u662F longterm \u6839\uFF09**\uFF0C\u4F7F\u5F97\uFF1A
2092
+
2093
+ \`\`\`
2094
+ \uD83C\uDF33 \u5065\u5EB7\u7684 Roy \u4EFB\u52A1\u6811\uFF08\u91D1\u5B57\u5854\u5F62\uFF09
2095
+ \u251C\u2500\u2500 [Longterm] A \u65B9\u5411\uFF08\u6839 #100, \u2264 20 \u5B50\uFF09
2096
+ \u2502 \u251C\u2500\u2500 normal \u5B50\u4EFB\u52A1 #101
2097
+ \u2502 \u251C\u2500\u2500 normal \u5B50\u4EFB\u52A1 #102
2098
+ \u2502 \u2514\u2500\u2500 cycle \u5B50\u4EFB\u52A1 #103
2099
+ \u251C\u2500\u2500 [Longterm] B \u65B9\u5411\uFF08\u6839 #200\uFF09
2100
+ \u2502 \u251C\u2500\u2500 normal \u5B50\u4EFB\u52A1 #201
2101
+ \u2502 \u2514\u2500\u2500 ...
2102
+ \u251C\u2500\u2500 [Longterm] C \u65B9\u5411\uFF08\u6839 #300\uFF09
2103
+ ...
2104
+ \u2514\u2500\u2500 [Longterm] T \u65B9\u5411\uFF08\u6839 #900\uFF09 \u2190 10-20 \u4E2A longterm \u6839
2105
+ \`\`\`
2106
+
2107
+ > \u6CE8\u610F\uFF1A\u6563\u843D\u4EFB\u52A1\u7684\u6302\u8F7D\u76EE\u6807**\u4E0D\u4E00\u5B9A\u662F longterm \u6839**\uFF0C\u53EF\u4EE5\u662F longterm \u6839\u4E0B\u4EFB\u610F\u6DF1\u5EA6\u7684\u5B50/\u5B59\u4EFB\u52A1
2108
+ > \uFF08\u6CBF\u6811\u627E\u8BED\u4E49\u6700\u5339\u914D\u8282\u70B9\uFF0C"\u6302\u5F97\u6DF1\u4F46\u8BED\u4E49\u5339\u914D"\u662F\u5408\u6CD5\u7B56\u7565\uFF09\u3002
2109
+
2110
+ ---
2111
+
2112
+ ## \uD83D\uDEE0 \u4F60\u7684\u5DE5\u5177\uFF08\u767D\u540D\u5355\uFF09
2113
+
2114
+ **\u53EA\u80FD\u4F7F\u7528\u4EE5\u4E0B\u5DE5\u5177**\uFF0C\u6CA1\u6709 bash / edit_file / \u5199\u6587\u4EF6\u7684\u80FD\u529B\uFF1A
2115
+
2116
+ | \u7C7B\u522B | \u5DE5\u5177 |
2117
+ |------|------|
2118
+ | **\u53EA\u8BFB** | \`task_tree\`, \`task_list\`, \`task_get\`, \`task_search\`, \`task_operation_list\`, \`task_operation_get\`, \`read_file\`\uFF08\u4EC5\u8C03\u7814\uFF09 |
2119
+ | **\u4FEE\u6539**\uFF08\u7ED3\u6784\uFF09 | \`task_update\`\uFF08\u6539 \`type\` / \`parent_task_id\` / \`status\` / \`tags\` / \`context\`\uFF09|
2120
+ | **\u521B\u5EFA** | \`task_create\`, \`task_operation_create\` |
2121
+ | **\u26D4 \u9ED8\u8BA4\u7981\u6B62** | \`task_batch_archive\`, \`task_batch_delete\`, \`task_delete\`, \`task_complete\`\uFF08\u4EC5\u5728\u7528\u6237\u672C\u8F6E\u660E\u786E\u6388\u6743\u65F6\u624D\u7528\uFF09 |
2122
+
2123
+ \u94C1\u5F8B\uFF1A**\u9ED8\u8BA4 0 \u5220 + 0 \u5F52\u6863**\u3002\u672C\u8F6E\u82E5\u7528\u6237\u672A\u660E\u793A\uFF0C\u7EDD\u4E0D\u8C03\u7528 \`task_batch_archive\` / \`task_batch_delete\` / \`task_delete\`\u3002
2124
+
2125
+ > \u26A0\uFE0F **\u6CA1\u6709 bash \u5DE5\u5177** \u2014 \u4F60\u65E0\u6CD5\u6267\u884C shell \u547D\u4EE4\u3002\u6240\u6709\u5DE5\u4F5C\u90FD\u53EA\u80FD\u901A\u8FC7\u4EFB\u52A1\u7BA1\u7406\u5DE5\u5177\u5B8C\u6210\u3002
2126
+
2127
+ ---
2128
+
2129
+ ## \uD83D\uDCCB \u6574\u7406\u5DE5\u4F5C\u6D41\uFF08Phase 0 \u2192 Phase 4\uFF09
2130
+
2131
+ ### self-task \u6A21\u677F\uFF08Phase 0 \u4E4B\u524D\u5FC5\u5EFA\uFF09\u2B50\u5173\u952E
2132
+
2133
+ \u6BCF\u6B21\u63A5\u5230\u4EFB\u52A1\u6574\u7406\u8BF7\u6C42\uFF0C**\u7B2C\u4E00\u6B65**\u5C31\u662F\u5EFA\u4E00\u4E2A self-task \u8DDF\u8E2A\u672C\u6B21\u5DE5\u4F5C\uFF08\u94C1\u5F8B \u246B\uFF09\u3002\u6A21\u677F\uFF1A
2134
+
2135
+ \`\`\`bash
2136
+ # 1. \u5EFA tracking task
2137
+ SELF_TASK_ID=$(task_create \\
2138
+ title="[\u4EFB\u52A1\u6574\u7406] v{N+1} \u2014 Task #<TODO>", \\
2139
+ description="\u627F\u63A5\u5386\u53F2 #4088 / #4089 / #4090 \u4E09\u8F6E\u4EFB\u52A1\u6574\u7406\u5B9E\u6218\uFF0C\u628A\u6839\u4EFB\u52A1\u6536\u655B\u5230 \u226420\u3002
2140
+ \u672C\u6B21\u76EE\u6807\uFF1A\u4ECE\u8D77\u70B9\u6839\u6570\u6536\u655B\u5230 10-20 \u4E2A longterm \u6839\uFF0Creparent \u975E longterm \u6839\uFF0C
2141
+ \u5168\u7A0B 0 \u5220 + 0 \u5F52\u6863\u9ED8\u8BA4\u3002", \\
2142
+ status="active", \\
2143
+ priority="medium", \\
2144
+ parent_task_id=<\u5F53\u524D\u627F\u63A5\u7684 longterm \u7236\u4EFB\u52A1 ID \u6216\u4E0A\u4E00\u8F6E self-task> \\
2145
+ )
2146
+
2147
+ # 2. \u62FF\u5230 ID \u540E \u2192 \u5199\u7B2C\u4E00\u4E2A progress \u7559\u75D5
2148
+ task_operation_create( \\
2149
+ task_id=$SELF_TASK_ID, \\
2150
+ milestone_type="progress", \\
2151
+ milestone_title="\u5EFA\u7ACB self-task \u8DDF\u8E2A (Task #$SELF_TASK_ID)", \\
2152
+ milestone_description="\u4EFB\u52A1\u6574\u7406\u5F00\u59CB\uFF0C\u5EFA\u7ACB self-task \u8DDF\u8E2A\u672C\u6B21 reparent/upgrade \u64CD\u4F5C\u94FE", \\
2153
+ process_description="\u901A\u8FC7 task_create \u5EFA tracking task + task_operation_create \u7559\u75D5\u8D77\u6B65 100-150 \u5B57\u7B26" \\
2154
+ )
2155
+
2156
+ # 3. \u81EA\u6B64\u6240\u6709 reparent / \u5347\u7EA7 type \u64CD\u4F5C\u90FD\u5FC5\u987B task_update \u5173\u8054\u5230 $SELF_TASK_ID
2157
+ \`\`\`
2158
+
2159
+ > **Task ID \u901A\u5E38\u5F62\u5982 #4091 / #4093 / #4095 ...**\uFF08\u9012\u589E\uFF09\uFF0C
2160
+ > \u62FF\u5230\u540E\u7ACB\u523B\u8BB0\u5230 working memory\uFF0C\u540E\u7EED\u6BCF\u4E2A\u64CD\u4F5C task_update / task_operation_create
2161
+ > \u90FD\u586B task_id=$SELF_TASK_ID\uFF0C\u5F62\u6210\u53EF\u56DE\u6EAF\u7684"\u4EFB\u52A1\u6574\u7406\u5DE5\u4F5C\u94FE"\u3002
2162
+
2163
+ > \u26A0\uFE0F \u8DF3\u8FC7 self-task \u521B\u5EFA\u76F4\u63A5\u8FDB Phase 0 = \u8FDD\u53CD\u94C1\u5F8B \u246B\uFF0C\u5FC5\u987B\u7ACB\u5373\u505C\u6B62\u5E76\u5411\u4E3B\u4EE3\u7406\u62A5\u544A\u3002
2164
+
2165
+ ---
2166
+
2167
+ ### Phase 0 \u2014 \u57FA\u51C6\u5EFA\u7ACB\uFF08longterm \u951A\u70B9\u6E05\u5355\uFF09\u2B50\u5173\u952E
2168
+
2169
+ **\u76EE\u6807**\uFF1A\u62FF\u5230\u6240\u6709 longterm \u6839\u4EFB\u52A1\uFF0C\u4F5C\u4E3A reparent \u951A\u70B9\u3002
2170
+
2171
+ \`\`\`bash
2172
+ # 1. \u62FF\u6240\u6709 longterm \u6839\u4EFB\u52A1\uFF08\u4E0D\u9650 status\uFF09
2173
+ task_list({ type: "longterm", limit: 100 })
2174
+
2175
+ # 2. \u770B\u6BCF\u4E2A longterm \u7684\u5B50\u6811\u7ED3\u6784
2176
+ for lr in longterm_roots:
2177
+ task_tree({ parent_task_id: lr.id, depth: 2 })
2178
+
2179
+ # 3. \u8F93\u51FA\u951A\u70B9\u6E05\u5355
2180
+ \u951A\u70B9\u6E05\u5355 = [
2181
+ { id: 2066, title: "[Longterm] TongAgent \u751F\u6001", \u5F53\u524D\u5B50\u4EFB\u52A1\u6570: N, \u5DF2\u8986\u76D6\u4E3B\u9898: [...] },
2182
+ { id: 2859, title: "[Longterm] roy-agent \u4E3B\u7EBF\u7814\u53D1", ... },
2183
+ ...
2184
+ ]
2185
+ \`\`\`
2186
+
2187
+ **\u8981\u70B9**\uFF1A
2188
+ - longterm \u6C38\u8FDC\u4FDD\u7559\u4E3A\u6839\uFF08\u94C1\u5F8B \u2462\uFF09
2189
+ - \u4E0D\u521B\u5EFA\u65B0 longterm\uFF0C\u9664\u975E\u6EE1\u8DB3"\u5468\u671F/\u957F\u671F\u901A\u7528\u80FD\u529B/\u957F\u671F\u7814\u7A76"\u5224\u65AD\uFF08\u89C1 Phase 2 \u8DEF\u5F84 b\uFF09
2190
+ - \u951A\u70B9\u6E05\u5355\u662F\u540E\u7EED\u6BCF\u6B21 reparent \u51B3\u7B56\u7684"\u5B57\u5178"
2191
+
2192
+ **\u951A\u70B9\u4F18\u5148\u7EA7\uFF08\u91CD\u8981\uFF0C\u907F\u514D\u6302\u9519\uFF09**\uFF1A
2193
+
2194
+ > **active longterm > todo longterm >> completed longterm**
2195
+ > completed longterm \u4EC5\u4F5C\u5386\u53F2\u53C2\u8003\uFF0C\u4E0D\u76F4\u63A5\u7528\u4F5C reparent \u951A\u70B9\uFF1B\u5426\u5219\u4F1A\u628A active normal \u8BEF\u6302\u5230\u5DF2\u5B8C\u6210 longterm \u6839\u4E0B\u3002
2196
+ > \u4F8B\uFF1A\u770B\u5230 \`task_list({type:"longterm", status:"active"})\` \u8FD4\u56DE\u4E00\u5806 completed longterm \u65F6\uFF0C\u5148\u6309 status \u8FC7\u6EE4\u518D\u7528\u3002
2197
+
2198
+ ### Phase 1 \u2014 \u73B0\u72B6\u76D8\u70B9
2199
+
2200
+ \`\`\`bash
2201
+ # 1. \u62FF\u6240\u6709\u6839\u4EFB\u52A1
2202
+ task_tree({ depth: 0 })
2203
+
2204
+ # 2. \u5206\u7C7B\uFF08status \xD7 type \u77E9\u9635\uFF09
2205
+ \u5206\u7C7B = {
2206
+ 'active_longterm': [...],
2207
+ 'active_normal': [...],
2208
+ 'todo_longterm': [...],
2209
+ 'todo_normal': [...],
2210
+ 'completed_longterm': [...],
2211
+ 'completed_normal': [...],
2212
+ ...
2213
+ }
2214
+
2215
+ # 3. \u8F93\u51FA\u5F53\u524D L0 / L1 / L2 \u6570\u91CF + \u5065\u5EB7\u5EA6
2216
+ \`\`\`
2217
+
2218
+ ### Phase 2 \u2014 4 \u8DEF\u5F84\u5206\u7C7B\u51B3\u7B56\u6811\uFF08\u6838\u5FC3\u7B97\u6CD5\uFF09
2219
+
2220
+ \u5BF9\u6BCF\u4E2A**\u975E longterm \u6839\u4EFB\u52A1**\uFF08normal / cycle\uFF09\uFF0C\u6309\u4EE5\u4E0B\u51B3\u7B56\u6811\u5206\u7C7B\uFF1A
2221
+
2222
+ \`\`\`
2223
+ \u5BF9\u6BCF\u4E2A\u6839\u4EFB\u52A1 rt\uFF1A
2224
+ \u2502
2225
+ \u251C\u2500 rt.type == 'longterm'\uFF1F
2226
+ \u2502 \u2514\u2500 YES \u2192 \uD83D\uDEAB \u8DF3\u8FC7\uFF08\u6C38\u8FDC\u4FDD\u7559\u4E3A\u6839\uFF09
2227
+ \u2502
2228
+ \u251C\u2500 rt.type == 'cycle'\uFF1F
2229
+ \u2502 \u2514\u2500 YES \u2192 \u5927\u6982\u7387\u4FDD\u7559\u4E3A\u6839\uFF08\u9664\u975E\u660E\u786E\u65E0\u610F\u4E49\uFF09
2230
+ \u2502
2231
+ \u2514\u2500 rt.type == 'normal'\uFF1F
2232
+ \u2502
2233
+ \u251C\u2500 (a) \u4E3B\u9898\u81EA\u5FAA\u73AF / \u5143\u4EFB\u52A1 / \u8DE8\u9879\u76EE\uFF1F
2234
+ \u2502 \u68C0\u67E5\uFF1Atags \u542B ["meta","task-organization","system","self"]
2235
+ \u2502 \u6216 description \u662F"\u4EFB\u52A1\u6574\u7406/\u7CFB\u7EDF\u7EF4\u62A4"\u6027\u8D28
2236
+ \u2502 \u6216 project_path \u4E3A null / 'unknown'
2237
+ \u2502 \u2514\u2500 YES \u2192 \u4FDD\u6301\u4E3A\u6839\uFF08\u8DEF\u5F84 a\uFF0C**\u4EC5\u9002\u7528\u4E8E meta/self \u7C7B\u5143\u4EFB\u52A1**\uFF0C\u4E0E 1819 "100% longterm \u4EC5 meta/self \u4F8B\u5916" \u76EE\u6807\u517C\u5BB9\uFF09
2238
+ \u2502
2239
+ \u251C\u2500 (b) \u5468\u671F\u6027 / \u957F\u671F\u901A\u7528\u80FD\u529B / \u957F\u671F\u7814\u7A76\u4E3B\u9898\uFF1F
2240
+ \u2502 \u68C0\u67E5\uFF1Atitle \u542B"\u5468\u62A5/\u65E5\u62A5/\u6708\u62A5/\u5B9A\u671F/\u5DE1\u68C0/\u80FD\u529B/\u613F\u666F/\u8C03\u7814/\u7814\u7A76"
2241
+ \u2502 \u6216\u5F53\u524D\u662F cycle/longterm \u7C7B\u578B\u7528\u6237\u671F\u671B\u7684"\u65E0\u660E\u786E\u7EC8\u70B9"\u4EFB\u52A1
2242
+ \u2502 \u2514\u2500 YES \u2192 task_update({ type: "longterm" }) \u5347\u7EA7\u7C7B\u578B\uFF0C\u4FDD\u6301\u4E3A\u6839\uFF08\u8DEF\u5F84 b\uFF09
2243
+ \u2502
2244
+ \u251C\u2500 (c) \u4E0E\u67D0\u4E2A longterm \u7236\u5F3A\u5173\u8054\uFF1F
2245
+ \u2502 \u68C0\u67E5\uFF1Atitle / description / tags / project_path \u4E2D\u542B\u5F3A\u5173\u952E\u8BCD
2246
+ \u2502 \u2514\u2500 YES \u2192 task_update({ parent_task_id: longterm_id })
2247
+ \u2502 reparent \u5230 longterm \u6839\uFF08\u8DEF\u5F84 c\uFF0C\u91CD\u65B0\u6302\u8F7D normal \u2192 longterm \u7236\uFF09
2248
+ \u2502
2249
+ \u2514\u2500 (d) \u4E0E\u67D0\u4E2A\u5177\u4F53\u5B50\u4EFB\u52A1\u4E3B\u9898\u5F3A\u76F8\u5173\uFF1F
2250
+ \u68C0\u67E5\uFF1A\u80FD\u627E\u5230\u4E00\u4E2A longterm \u5B50\u5B59\u8282\u70B9\uFF08depth \u2264 3\uFF09\uFF0C\u5176\u4E3B\u9898\u4E0E rt \u5B8C\u5168\u91CD\u5408
2251
+ \u2514\u2500 YES \u2192 task_update({ parent_task_id: specific_child_id })
2252
+ reparent \u5230\u8BE5\u5177\u4F53\u5B50\u8282\u70B9\uFF08\u8DEF\u5F84 d\uFF0C\u591A\u8DF3 reparent\uFF09
2253
+
2254
+ \u2514\u2500 NO \u2192 \u26A0\uFE0F \u9ED8\u8BA4\u8DEF\u5F84\uFF1A(a) \u4FDD\u6301\u4E3A\u6839\uFF08**\u4EC5\u9002\u7528\u4E8E meta/self \u7C7B\u5143\u4EFB\u52A1**\uFF1B\u975E meta/self \u5E94\u7EE7\u7EED\u641C\u7D22\u8DEF\u5F84 c/d \u800C\u975E\u9ED8\u8BA4\u505C\u7559 a\uFF09
2255
+ \`\`\`
2256
+
2257
+ **\u51B3\u7B56\u4F9D\u636E\u5F3A\u5EA6**\uFF1A
2258
+
2259
+ - \uD83D\uDFE2 **\u5F3A**\uFF1Atitle **\u660E\u793A** longterm \u5173\u952E\u8BCD / project_path **\u7B49\u4E8E** longterm \u7684 project \u8DEF\u5F84
2260
+ - \uD83D\uDFE1 **\u4E2D**\uFF1Atags \u542B longterm \u4E3B\u9898\u8BCD / description \u63D0\u53CA"\u53C2\u8003 #XXXX longterm \u7236"
2261
+ - \uD83D\uDD34 **\u5F31**\uFF1A\u63CF\u8FF0\u6709\u76F8\u5173\u5173\u952E\u8BCD\u4F46\u4E0D\u662F\u660E\u793A
2262
+
2263
+ **\u89C4\u5219**\uFF1A\uD83D\uDFE2 \u5F3A \u2192 \u76F4\u63A5 reparent\uFF08\u8DEF\u5F84 c\uFF09/ \uD83D\uDFE1 \u4E2D + \u8DE8 2 \u9879 \u2192 \u53EF reparent\uFF08\u8DEF\u5F84 c/d\uFF09\uFF0C\`task_operation_create\` \u5FC5\u987B\u8BE6\u7EC6 / \uD83D\uDD34 \u5F31 \u2192 \u4FDD\u6301\u4E3A\u6839\uFF08\u627E\u4E0D\u5230\u5408\u9002\u7236\u5B81\u53EF\u4E0D reparent\uFF09\u3002
2264
+
2265
+ ### Phase 3 \u2014 \u5065\u5EB7\u5EA6\u8BC4\u4F30
2266
+
2267
+ \u6267\u884C\u5B8C\u6240\u6709 reparent \u540E\uFF0C\u91CD\u65B0\u8BC4\u4F30 L0 / L1 / L2 \u4E0E \`health_score\`\u3002\u82E5 \`new_health != 'health'\`\uFF1A
2268
+ - \u7EE7\u7EED Phase 2 \u627E\u66F4\u591A reparent \u673A\u4F1A\uFF08**\u66F4\u6FC0\u8FDB\u4F46\u4ECD\u4FDD\u5B88**\uFF09
2269
+ - \u76F4\u5230 \`health == 'health'\` \u6216\u8017\u5C3D\u6240\u6709 \uD83D\uDFE2/\uD83D\uDFE1 \u51B3\u7B56
2270
+
2271
+ ### Phase 4 \u2014 \u6267\u884C + \u7559\u75D5
2272
+
2273
+ \u6BCF\u6B21 reparent / \u5347\u7EA7 type \u65F6\uFF0C\u5FC5\u987B\u914D\u5957\uFF1A
2274
+
2275
+ \`\`\`bash
2276
+ task_update({ task_id: X, parent_task_id: Y }) # \u6216 task_update({ task_id: X, type: "longterm" })
2277
+
2278
+ task_operation_create({
2279
+ task_id: X, # \u88AB reparent \u7684\u4EFB\u52A1
2280
+ milestone_type: "decision",
2281
+ milestone_title: "Reparent #X \u2192 #Y (reason: ...)"
2282
+ })
2283
+ \`\`\`
2284
+
2285
+ **\u62A5\u544A\u8F93\u51FA**\uFF1A\u5199\u5230 \`/tmp/task-organization-report-v{N+1}.md\`\uFF0C\u542B 8 \u8282\uFF1A
2286
+ 1. \u8D77\u70B9\u5206\u6790\uFF08Phase 1\uFF09/ 2. \u951A\u70B9\u6E05\u5355\uFF08Phase 0\uFF09/ 3. 4 \u8DEF\u5F84\u5206\u7C7B\uFF08Phase 2\uFF09/ 4. \u6574\u7406\u540E\u7EC8\u6001 / 5. \u64CD\u4F5C\u6E05\u5355\uFF08Phase 4\uFF09/ 6. \u5065\u5EB7\u5EA6\u8BC4\u4F30\uFF08Phase 3\uFF09/ 7. \u7D2F\u8BA1\u5386\u53F2\u5BF9\u6BD4 / 8. \u7559\u75D5
2287
+
2288
+ ---
2289
+
2290
+ ## \uD83D\uDEA8 \u94C1\u5F8B\uFF08\u4E0D\u53EF\u8FDD\u53CD\uFF09
2291
+
2292
+ | # | \u94C1\u5F8B |
2293
+ |---|------|
2294
+ | \u2460 | **0 \u5220\u4EFB\u52A1**\uFF08\u4E0D\u8C03\u7528 \`task_batch_delete\` / \`task_delete\`\uFF09|
2295
+ | \u2461 | **0 \u5F52\u6863\u9ED8\u8BA4**\uFF08\u4E0D\u8C03\u7528 \`task_batch_archive\`\uFF0C\u9664\u975E\u7528\u6237\u672C\u8F6E\u660E\u786E\u6388\u6743\uFF09|
2296
+ | \u2462 | **longterm \u6C38\u8FDC\u4FDD\u7559\u4E3A\u6839**\uFF08\u4E0D\u4FEE\u6539 longterm \u8BED\u4E49\uFF0C\u4E0D reparent longterm\uFF09|
2297
+ | \u2463 | **active \u53EA\u6539 parent \u4E0D\u6539 status**\uFF08\u53EF reparent\uFF0C\u4F46 status \u6C38\u8FDC\u4FDD\u7559 active\uFF09|
2298
+ | \u2464 | **0 \u78B0 paused / cancelled \u4EFB\u52A1**\uFF08\u9664\u975E\u7528\u6237\u660E\u786E\u6307\u793A\uFF09|
2299
+ | \u2465 | **\u627E\u4E0D\u5230\u5408\u9002\u7236\u5B81\u53EF\u4E0D reparent**\uFF08\u4FDD\u5B88 > \u6FC0\u8FDB\uFF09|
2300
+ | \u2466 | **\u6BCF\u4E2A reparent \u90FD\u8981 \`task_operation_create\` \u7559\u75D5** |
2301
+ | \u2467 | **\u4E0D\u521B\u5EFA\u65B0 longterm \u9664\u975E\u4E3B\u9898\u771F\u6B63\u957F\u671F** |
2302
+ | \u2468 | **\u672C\u8F6E\u4E0D\u8FD4\u5DE5**\uFF08\u4E0A\u4E00\u8F6E\u5DF2 reparent \u7684\uFF0C\u672C\u8F6E\u4E0D\u52A8\uFF09|
2303
+ | \u2469 | **\u4E0D\u5199\u4EE3\u7801\u5230 roy-agent \u4ED3\u5E93**\uFF08task-organizer \u662F prompt agent\uFF09|
2304
+ | \u246A | **\u6BCF\u4E2A\u51B3\u7B56 100% \u53EF\u89E3\u91CA** |
2305
+ | \u246B | **Phase 0 \u4E4B\u524D\u5148\u5EFA\u7ACB self-task \u8DDF\u8E2A**\uFF08\u89C1\u4E0B\u65B9 self-task \u6A21\u677F\uFF09 |
2306
+
2307
+ > \u26A0\uFE0F \u89E6\u53D1\u4EFB\u4F55\u4E00\u6761 \u2192 \u7ACB\u5373\u505C\u6B62\u5E76\u5411\u4E3B\u4EE3\u7406\u62A5\u544A\u3002
2308
+
2309
+ ---
2310
+
2311
+ ## \uD83D\uDEA8 \u7981\u6B62\u64CD\u4F5C
2312
+
2313
+ - \u274C **\u4E0D\u8981**\u65E0\u8111\u65B0\u5EFA\u6839\u4EFB\u52A1\uFF08\u5FC5\u987B\u786E\u8BA4\u81F3\u5C11 2-3 \u4E2A\u975E longterm \u6839\u660E\u663E\u540C\u4E3B\u9898\u624D\u5EFA\uFF09
2314
+ - \u274C **\u4E0D\u8981**\u4FEE\u6539 longterm \u6839\u4EFB\u52A1\u7684\u8BED\u4E49\uFF08title / description / goals / type\uFF09
2315
+ - \u274C **\u4E0D\u8981**\u628A\u4E0D\u540C longterm \u57DF\u7684\u6839 attach \u5230\u9519\u8BEF\u6839
2316
+ - \u274C **\u4E0D\u8981**\u6279\u91CF\u64CD\u4F5C\u524D\u4E0D dry-run
2317
+ - \u274C **\u4E0D\u8981**\u5728\u6CA1\u6709 \`task_operation_create\` \u8BB0\u5F55\u7684\u60C5\u51B5\u4E0B\u505A\u6279\u91CF\u52A8\u4F5C
2318
+ - \u274C **\u4E0D\u8981**\u9ED8\u8BA4\u8C03\u7528 \`task_batch_archive\`\uFF08\u94C1\u5F8B \u2461\uFF09
2319
+
2320
+ ---
2321
+
2322
+ ## \u7C7B\u578B\u4FEE\u6B63\u6307\u5357
2323
+
2324
+ \u5982\u679C\u53D1\u73B0\u4EFB\u52A1\u7684 \`type\` \u4E0E\u5B9E\u9645\u60C5\u51B5\u4E0D\u7B26\uFF0C\u7528 \`task_update({ type: ... })\` \u4FEE\u6B63\uFF1A
2325
+
2326
+ | \u73B0\u72B6 | \u5E94\u6539\u4E3A | \u5224\u65AD\u4F9D\u636E |
2327
+ |------|--------|----------|
2328
+ | \`normal\` \u4F46\u5185\u5BB9\u660E\u663E\u662F\u5468\u671F\u6027\u7684 | \u2192 \`cycle\` | \u6807\u9898\u542B"\u5468\u62A5/\u65E5\u62A5/\u6708\u62A5/\u5B9A\u671F/\u6BCF\u65E5/\u6BCF\u5468/\u5DE1\u68C0/\u5907\u4EFD" |
2329
+ | \`normal\` \u4F46\u63CF\u8FF0\u62BD\u8C61\u65E0\u660E\u786E\u5B8C\u6210\u6761\u4EF6 | \u2192 \`longterm\` | \u613F\u666F\u7C7B\u63CF\u8FF0\uFF0C\u65E0\u6CD5\u4E00\u6B21\u5B8C\u6210 |
2330
+ | \`cycle\` \u4F46\u53EA\u662F\u666E\u901A\u4EFB\u52A1 | \u2192 \`normal\` | \u6CA1\u6709\u5468\u671F\u6027\u7279\u5F81 |
2331
+
2332
+ ---
2333
+
2334
+ ## \u5173\u952E\u53CC\u7EF4\u5EA6\u8BB0\u5F55\uFF08\u6BCF\u6B21 reparent \u5FC5\u586B\uFF09
2335
+
2336
+ \u6BCF\u6B21 reparent / \u5347\u7EA7 type \u5FC5\u987B\u7528 \`task_operation_create\` \u7559\u4E0B\u53CC\u7EF4\u5EA6\u8BB0\u5F55\uFF1A
2337
+
2338
+ - **milestone_type**: \`decision\`\uFF08"\u4E3A\u4EC0\u4E48\u6302\u8FD9\u91CC"\uFF09\u6216 \`milestone\`\uFF08"\u8FBE\u6210\u4E86\u4EC0\u4E48"\uFF09
2339
+ - **milestone_title**: \u4E00\u53E5\u8BDD\u6807\u9898\uFF08\u5982 "Reparent #X \u2192 #Y\uFF08longterm \u951A\u70B9\uFF09"\uFF09
2340
+ - **milestone_description**: \u8BE6\u7EC6\u63CF\u8FF0\uFF08\u51B3\u7B56\u4F9D\u636E\u3001\u5F3A\u5EA6\u3001\u9879\u76EE\u8DEF\u5F84\uFF09
2341
+ - **process_description**: 100-150 \u5B57\u7B26\u7B80\u8981\u8FC7\u7A0B
2342
+
2343
+ ---
2344
+
2345
+ ## \u7EC8\u6B62\u4E0E\u62A5\u544A
2346
+
2347
+ \u6574\u7406\u5B8C\u6210\u540E\u8F93\u51FA\u62A5\u544A\u5230 \`/tmp/task-organization-report-v{N+1}.md\`\uFF0C\u7136\u540E\u4E00\u53E5\u8BDD\u603B\u7ED3\uFF1A
2348
+
2349
+ > \u2705 \u4EFB\u52A1\u6811\u6574\u7406\u5B8C\u6210\u3002\u6839\u4EFB\u52A1\u4ECE N \u6536\u655B\u5230 M\uFF08\u76EE\u6807 10-20\uFF09\uFF0C\u5176\u4E2D longterm \u5360\u6BD4\u4ECE X% \u63D0\u5347\u5230 100%\uFF0Creparent/merge \u5171 K \u9879\uFF080 \u5220 + 0 \u5F52\u6863\u9ED8\u8BA4\uFF09\u3002\u8BE6\u89C1 operations\u3002
2350
+
2351
+ \u5982\u679C\u6CA1\u6709\u4EFB\u4F55\u6539\u52A8\uFF1A
2352
+
2353
+ > \u2705 \u4EFB\u52A1\u6811\u5F62\u6001\u826F\u597D\uFF08root=N, depth=X, non_longterm_root=0, health_score=health\uFF09\u3002\u65E0\u9700\u64CD\u4F5C\u3002
2354
+ `},$A=o2["workflow-extract"];import p4 from"os";import U_ from"path";var z1="roy-agent";function qJ(){let _=p4.homedir();try{let w=__("xdg-basedir");return{config:w.xdgConfig||U_.join(_,".config"),state:w.xdgState||U_.join(_,".local","state"),data:w.xdgData||U_.join(_,".local","share"),cache:w.xdgCache||U_.join(_,".cache")}}catch{return{config:U_.join(_,".config"),state:U_.join(_,".local","state"),data:U_.join(_,".local","share"),cache:U_.join(_,".cache")}}}function GJ(){let _=p4.homedir(),w=qJ();return{home:_,config:U_.join(w.config,z1),state:U_.join(w.state,z1),data:U_.join(w.data,z1),cache:U_.join(w.cache,z1)}}class i4{_paths;get paths(){if(!this._paths)this._paths=GJ();return this._paths}getPath(_){return this.paths[_]}getComponentPath(_,w){return U_.join(this.paths[_],w)}reset(){this._paths=void 0}}var QJ=new i4;function r4(_){return QJ.getPath(_)}import*as QU from"fs/promises";import*as HU from"fs";import{join as ew}from"path";var Q$=A9(XX(),1);a();z_();var t=n("agent:registry"),G$=M.object({name:M.string(),type:M.enum(["primary","sub","workflow"]),workflow:M.string().optional(),entryAgent:M.string().optional(),description:M.string().optional(),systemPromptRef:M.string().optional(),systemPrompt:M.string().optional(),model:M.string().optional(),maxIterations:M.number().optional(),maxErrorRetries:M.number().optional(),allowedTools:M.array(M.string()).optional(),deniedTools:M.array(M.string()).optional(),toolTimeout:M.number().optional(),toolRetries:M.number().optional(),doomLoopThreshold:M.number().optional(),filterHistory:M.boolean().optional()}).refine((_)=>_.type!=="workflow"||_.workflow&&_.workflow.length>0,{message:"workflow is required when type is 'workflow'"});class M_{agents=new Map;configDir;configComponent;promptComponent;resolvePromptComponent;fs;fsPromises;constructor(_){this.configComponent=_.configComponent,this.promptComponent=_.promptComponent??null,this.resolvePromptComponent=_.resolvePromptComponent,this.fs=_.fs||HU,this.fsPromises=_.fsPromises||QU;let w=this.configComponent?.get?.("agent.configDir");if(w&&typeof w==="string"&&w.length>0)this.configDir=w;else if(_.baseDir)this.configDir=ew(_.baseDir,"agents");else this.configDir=ew(r4("data"),"agents");t.debug(`[AgentRegistry] Config dir: ${this.configDir}`)}getConfigDir(){return this.configDir}hasAgent(_){return this.agents.has(_)}get(_){return this.agents.get(_)}list(){return Array.from(this.agents.values())}listAgentsByType(_){return this.list().filter((w)=>w.type===_)}register(_){if(!_.name)throw Error("Agent name is required");let w=G$.safeParse(_);if(!w.success)throw Error(`Invalid agent config for "${_.name}": ${w.error.issues.map(($)=>$.message).join("; ")}`);this.agents.set(_.name,{..._}),t.info(`[AgentRegistry] Registered agent: ${_.name}`,{type:_.type})}unregister(_){let w=this.agents.delete(_);if(w)t.info(`[AgentRegistry] Unregistered agent: ${_}`);return w}clear(){this.agents.clear(),t.info("[AgentRegistry] Cleared all agents")}async getSystemPrompt(_){let w=this.agents.get(_);if(!w)return;let $=this.getActivePromptComponent();if(w.systemPromptRef)try{if($?.getPrompt){let J=await $.getPrompt(w.systemPromptRef,{},{agentType:w.type});if(J)return t.debug(`[AgentRegistry] Resolved systemPromptRef via getPrompt: ${w.systemPromptRef}`),J}let X=$?.get?.(w.systemPromptRef);if(X)return t.debug(`[AgentRegistry] Resolved systemPromptRef via get: ${w.systemPromptRef}`),X;if(w.systemPrompt)return t.debug("[AgentRegistry] systemPromptRef not found, falling back to inline"),w.systemPrompt;return}catch(X){return t.warn(`[AgentRegistry] Failed to resolve systemPromptRef: ${w.systemPromptRef}`,{error:X}),w.systemPrompt}return w.systemPrompt}getActivePromptComponent(){return this.resolvePromptComponent?.()??this.promptComponent}getInlineSystemPrompt(_){let w=this.agents.get(_);if(!w)return;return w.systemPrompt}getWorkflowName(_){let w=this.agents.get(_);if(!w||w.type!=="workflow")return;return w.workflow}getEntryAgent(_){let w=this.agents.get(_);if(!w||w.type!=="workflow")return;return w.entryAgent}registerWorkflowRunner(){if(this.agents.has("workflow-runner"))return;let w={name:"workflow-runner",type:"sub",description:"Workflow runner \u2014 \u63A5\u53D7\u5E26 workflow_name\uFF08\u5FC5\u586B\uFF09\u7684\u59D4\u6258\uFF0C\u6216\u6307\u793A\u5176\u6309 search-first \u6D41\u7A0B\u81EA\u884C\u9009\u5B9A\uFF08workflow_tag_list + workflow_search + workflow_list + workflow_get\uFF09\uFF0C\u7136\u540E\u901A\u8FC7 workflow_run \u6267\u884C workflow\uFF1B\u652F\u6301 session resume \u548C stop\uFF1B\u5931\u8D25\u63A5\u7BA1\u7531 prompt \u63A8\u7406\u89E6\u53D1 (Task #2251)\u3002**\u8C03\u7528\u65B9\u5FC5\u987B\u5728 prompt \u4E2D\u660E\u786E\u6307\u5B9A workflow \u540D\uFF0C\u6216\u6307\u793A sub-agent \u81EA\u884C\u641C\u7D22\u9009\u62E9\uFF1B\u7981\u6B62\u76F2\u731C/\u7ED5\u8FC7/\u8DF3\u8FC7 schema \u9A8C\u8BC1** (Task #2486)\u3002",systemPromptRef:"workflow-runner",deniedTools:["delegate_task","stop_task"],maxIterations:30};this.agents.set("workflow-runner",w)}registerTaskOrganizer(){if(this.agents.has("task-organizer"))return;let w={name:"task-organizer",type:"sub",description:"\u4EFB\u52A1\u6811\u6574\u7406\u5B50\u667A\u80FD\u4F53 \u2014 \u628A\u975E longterm \u7C7B\u578B\u7684\u6839\u4EFB\u52A1\u91CD\u65B0\u6302\u8F7D\u5230 longterm \u7236\u4EFB\u52A1\u4E0B\uFF0C\u6839\u4EFB\u52A1\u6536\u655B\u5230 10-20 \u4E2A\uFF1B\u7EF4\u62A4\u4EFB\u52A1\u6811\u5F62\u6001\u5065\u5EB7\uFF08re-parent / merge / archive / delete\uFF09\u3002Task #2348\u3002",systemPromptRef:"task-organizer",allowedTools:["task_create","task_get","task_list","task_update","task_delete","task_complete","task_tree","task_search","task_batch_archive","task_batch_delete","task_operation_create","task_operation_get","task_operation_list","task_operation_update","task_operation_delete"],deniedTools:["delegate_task","stop_task"],maxIterations:30};this.agents.set("task-organizer",w)}registerJsonExtractAgent(){if(this.agents.has("json-extract"))return;let w={name:"json-extract",type:"sub",description:"JSON \u63D0\u53D6\u5B50\u667A\u80FD\u4F53 \u2014 \u4ECE\u5BF9\u8BDD\u5386\u53F2\u4E2D\u63D0\u53D6\u7ED3\u6784\u5316 JSON\uFF0C\u901A\u8FC7 workflow_submit_output \u5DE5\u5177\u63D0\u4EA4",systemPromptRef:"json-extract",allowedTools:["workflow_submit_output"],deniedTools:[],maxIterations:5,filterHistory:!1};this.agents.set("json-extract",w)}registerWorkflowExtractAgent(){if(this.agents.has("workflow-extract"))return;let w={name:"workflow-extract",type:"sub",description:"Workflow \u63D0\u53D6\u5B50\u667A\u80FD\u4F53 \u2014 \u4ECE\u7236 task \u7684\u5BF9\u8BDD\u5386\u53F2\u4E2D\u5206\u6790\u9700\u6C42\uFF0C\u8FED\u4EE3\u5F0F\u751F\u6210\u5E76\u9A8C\u8BC1 Workflow YAML",systemPromptRef:"workflow-extract",allowedTools:["workflow_get","workflow_list","workflow_add","workflow_validate"],deniedTools:[],maxIterations:10,filterHistory:!1};this.agents.set("workflow-extract",w)}registerWorkflowCreator(){if(this.agents.has("workflow-creator"))return;let w={name:"workflow-creator",type:"sub",description:"Workflow \u6784\u5EFA\u5B50\u667A\u80FD\u4F53 \u2014 \u4E0E\u7528\u6237\u591A\u8F6E\u4EA4\u4E92\u5F0F\u534F\u4F5C\u8BBE\u8BA1\u3001\u9A8C\u8BC1\u5E76\u6CE8\u518C workflow",systemPromptRef:"workflow-creator",allowedTools:["workflow_list","workflow_get","workflow_search","workflow_tag_list","workflow_validate","workflow_add","bash","read_file","workflow_run","workflow_run_status"],deniedTools:["delegate_task","stop_task"],maxIterations:60};this.agents.set("workflow-creator",w)}registerCompactAgent(){if(this.agents.has("compact"))return;let w={name:"compact",type:"sub",description:"\u538B\u7F29\u5B50\u667A\u80FD\u4F53 \u2014 \u4ECE\u7236 session \u7684\u5386\u53F2\u6D88\u606F\u4E2D\u63D0\u53D6\u7ED3\u6784\u5316 checkpoint JSON",systemPromptRef:"compact",allowedTools:["workflow_submit_output"],deniedTools:[],maxIterations:3,filterHistory:!1};this.agents.set("compact",w)}registerCompactHintAgent(){if(this.agents.has("compact-hint"))return;let w={name:"compact-hint",type:"sub",description:"\u538B\u7F29\u63D0\u793A\u5B50\u667A\u80FD\u4F53 \u2014 \u5206\u6790\u7236 session \u5386\u53F2\uFF0C\u751F\u6210\u573A\u666F\u5316\u538B\u7F29\u6307\u5BFC\u63D0\u793A",systemPromptRef:"compact-hint",allowedTools:["workflow_submit_output"],deniedTools:[],maxIterations:3,filterHistory:!1};this.agents.set("compact-hint",w)}registerRoyAgent(){if(this.agents.has("roy"))return;let w={name:"roy",type:"sub",description:"Roy \u2014 versatile AI assistant inspired by Jarvis. Built-in general-purpose subagent for coding, research, planning, and complex multi-step tasks. Always available without `agent add roy`.",systemPromptRef:"roy",deniedTools:["delegate_task","stop_task"]};this.agents.set("roy",w)}async load(){try{return await this.loadFromDirectory(this.configDir)}catch(_){return t.warn(`[AgentRegistry] Failed to load agents: ${_}`),0}}async loadFromDirectory(_){let w=0;try{if(!this.fs.existsSync(_))return t.debug(`[AgentRegistry] Config directory does not exist: ${_}`),0;let $=await this.fsPromises.readdir(_,{withFileTypes:!0});for(let X of $){let J=ew(_,X.name);if(X.isDirectory())continue;if(!DU(X.name))continue;try{let Y=await this.fsPromises.readFile(J,"utf-8"),W=this.parseAgentConfig(Y,J);if(W)this.agents.set(W.name,W),t.info(`[AgentRegistry] Loaded agent: ${W.name} from ${X.name}`),w++}catch(Y){t.warn(`[AgentRegistry] Failed to load agent from ${X.name}: ${Y}`)}}t.info(`[AgentRegistry] Loaded ${w} agents from ${_}`)}catch($){t.warn(`[AgentRegistry] Error reading config directory: ${$}`)}return w}parseAgentConfig(_,w){try{let $=Q$.default.parse(_),X=G$.safeParse($);if(!X.success)return t.warn(`[AgentRegistry] Invalid agent config: ${w}`,{errors:X.error.errors}),null;return X.data}catch($){return t.error(`[AgentRegistry] Failed to parse agent config: ${w}`,{error:$}),null}}async saveAgent(_){try{let w=G$.safeParse(_);if(!w.success)return t.error(`[AgentRegistry] Invalid agent config for "${_.name}": ${w.error.message}`),!1;await this.ensureConfigDir();let $=this.agentToYaml(_),X=ew(this.configDir,`${_.name}.yaml`);return await this.fsPromises.writeFile(X,$,"utf-8"),this.agents.set(_.name,_),t.info(`[AgentRegistry] Saved agent: ${_.name} to ${X}`),!0}catch(w){return t.error(`[AgentRegistry] Failed to save agent: ${_.name}`,{error:w}),!1}}async ensureConfigDir(){if(!this.fs.existsSync(this.configDir))await this.fsPromises.mkdir(this.configDir,{recursive:!0}),t.debug(`[AgentRegistry] Created config directory: ${this.configDir}`)}agentToYaml(_){let w={name:_.name,type:_.type,..._.description!==void 0?{description:_.description}:{},..._.systemPromptRef!==void 0?{systemPromptRef:_.systemPromptRef}:{},..._.systemPrompt!==void 0?{systemPrompt:_.systemPrompt}:{},..._.model!==void 0?{model:_.model}:{},..._.maxIterations!==void 0?{maxIterations:_.maxIterations}:{},..._.maxErrorRetries!==void 0?{maxErrorRetries:_.maxErrorRetries}:{},..._.allowedTools!==void 0?{allowedTools:_.allowedTools}:{},..._.deniedTools!==void 0?{deniedTools:_.deniedTools}:{},..._.toolTimeout!==void 0?{toolTimeout:_.toolTimeout}:{},..._.toolRetries!==void 0?{toolRetries:_.toolRetries}:{},..._.doomLoopThreshold!==void 0?{doomLoopThreshold:_.doomLoopThreshold}:{},..._.filterHistory!==void 0?{filterHistory:_.filterHistory}:{},..._.workflow!==void 0?{workflow:_.workflow}:{},..._.entryAgent!==void 0?{entryAgent:_.entryAgent}:{}};return Q$.default.stringify(w).trimEnd()+`
2355
+ `}async deleteAgent(_){if(!this.agents.get(_))return t.warn(`[AgentRegistry] Agent not found: ${_}`),!1;try{let $=ew(this.configDir,`${_}.yaml`);if(this.fs.existsSync($))await this.fsPromises.unlink($),t.info(`[AgentRegistry] Deleted agent file: ${$}`);return this.agents.delete(_),!0}catch($){return t.error(`[AgentRegistry] Failed to delete agent: ${_}`,{error:$}),!1}}exportAgents(_={}){let w=this.list();if(_.format==="json")return w;return w}exportAgentsAsJson(){return JSON.stringify(this.list(),null,2)}size(){return this.agents.size}configDirExists(){return this.fs.existsSync(this.configDir)}getAgentFilePath(_){return ew(this.configDir,`${_}.yaml`)}}m([u("agent.registry.register",{recordParams:!0,recordResult:!0,log:!0})],M_.prototype,"register",null);m([u("agent.registry.unregister",{recordParams:!0,recordResult:!0,log:!0})],M_.prototype,"unregister",null);m([u("agent.registry.clear",{recordParams:!1,recordResult:!0,log:!0})],M_.prototype,"clear",null);m([u("agent.registry.getSystemPrompt",{recordParams:!0,recordResult:!0,log:!0})],M_.prototype,"getSystemPrompt",null);m([u("agent.registry.getWorkflowName",{recordParams:!0,recordResult:!0})],M_.prototype,"getWorkflowName",null);m([u("agent.registry.getEntryAgent",{recordParams:!0,recordResult:!0})],M_.prototype,"getEntryAgent",null);m([u("agent.registry.registerWorkflowRunner",{recordParams:!1,recordResult:!0,log:!0})],M_.prototype,"registerWorkflowRunner",null);m([u("agent.registry.registerTaskOrganizer",{recordParams:!1,recordResult:!0,log:!0})],M_.prototype,"registerTaskOrganizer",null);m([u("agent.registry.registerWorkflowCreator",{recordParams:!1,recordResult:!0,log:!0})],M_.prototype,"registerWorkflowCreator",null);m([u("agent.registry.load",{recordParams:!1,recordResult:!0,log:!0})],M_.prototype,"load",null);m([u("agent.registry.loadFromDirectory",{recordParams:!0,recordResult:!0,log:!0})],M_.prototype,"loadFromDirectory",null);function DU(_){return _.endsWith(".yaml")||_.endsWith(".yml")}var H$=`You are a subagent created by the main agent to handle a specific task.
2356
+
2357
+ ## Your Role
2358
+ - You were created to handle: {task_description}
2359
+ - Complete this task. That's your entire purpose.
2360
+ - You are NOT the main agent. Don't try to be.
2361
+
2362
+ ## Rules
2363
+ 1. **Stay focused** - Do your assigned task, nothing else
2364
+ 2. **Complete the task** - Your final message will be automatically reported to the main agent
2365
+ 3. **Don't initiate** - No heartbeats, no proactive actions, no side quests
2366
+ 4. **Be ephemeral** - You may be terminated after task completion. That's fine.
2367
+ 5. **No nested delegation** - Do NOT use delegate_task or stop_task tools. Complete the task yourself.
2368
+
2369
+ ## Execution
2370
+ - Use the available tools to complete the task
2371
+ - If you need more information, ask the main agent through the result
2372
+ - Return a clear summary of what you did and the results`;import{AsyncLocalStorage as BU}from"async_hooks";var UU=new BU;function D$(_,w){return UU.run(_,w)}var J2=r(()=>{a_(),y2()});class Y2{_hooks=new Map;componentName;componentVersion;defaultPriority;constructor(_={}){this.componentName=_.componentName??"unknown",this.componentVersion=_.componentVersion??"0.0.0",this.defaultPriority=_.defaultPriority??0}register(_,w){this.getOrCreateHooks(_).push(w)}registerMany(_,w){this.getOrCreateHooks(_).push(...w)}unregister(_,w){let $=this._hooks.get(_);if(!$)return!1;let X=$.findIndex((J)=>J.name===w);if(X===-1)return!1;return $.splice(X,1),!0}unregisterAll(_){this._hooks.delete(_)}async execute(_,w,$={}){let X=this._hooks.get(_),J=process.env.ROY_HOOK_DEBUG==="1";if(J)console.error(`[DEBUG hook-manager.execute] hookPoint=${_}, hooksCount=${X?.length??0}`);if(!X||X.length===0){if(J)console.error(`[DEBUG hook-manager.execute] \u2192 EARLY RETURN (no hooks registered for ${_})`);return}let Y=uw();if(J){if(console.error(`[DEBUG hook-manager.execute] envContext=${Y?"present":"absent"}`),Y)console.error(`[DEBUG hook-manager.execute] envContext.pluginEnabled=${JSON.stringify(Y.pluginEnabled)}`),console.error(`[DEBUG hook-manager.execute] envContext.sourceId=${Y.sourceId}`)}if(Y){if($.envContext=Y,!$.pluginEnabled&&Y.pluginEnabled)$.pluginEnabled=Y.pluginEnabled}let W=this.sortHooks(X),q=this.createContext(_,w,$,"before"),G=$.pluginEnabled||{};if(J){console.error(`[DEBUG hook-manager.execute] final pluginEnabled=${JSON.stringify(G)}`),console.error(`[DEBUG hook-manager.execute] sortedHooks=${W.length}:`);for(let Q of W)console.error(`[DEBUG hook-manager.execute] - name=${Q.name} pluginName=${Q.pluginName} sourceId=${Q.sourceId}`)}for(let Q of W){if(Q.pluginName&&Q.sourceId){let H=`${Q.sourceId}:${Q.pluginName}`,B=G[H];if(J)console.error(`[DEBUG hook-manager.execute] hook ${Q.name} (${H}) enabled=${B}`);if(B!==!0){if(J)console.error(`[DEBUG hook-manager.execute] \u2192 SKIPPED (pluginEnabled[${H}] !== true, got ${JSON.stringify(B)})`);continue}}else if(J)console.error(`[DEBUG hook-manager.execute] hook ${Q.name} has no pluginName/sourceId, ALWAYS EXECUTED`);if(J)console.error(`[DEBUG hook-manager.execute] \u2192 EXECUTING hook ${Q.name}`);await this.safeExecute(Q,q)}}async executeAndCollect(_,w,$={}){let X=this._hooks.get(_);if(!X||X.length===0)return[];let J=this.sortHooks(X),Y=this.createContext(_,w,$,"before"),W=[];for(let q of J){let G=await this.safeExecuteAndReturn(q,Y);if(G!==void 0)W.push(G)}return W}count(_){return this._hooks.get(_)?.length??0}clear(){this._hooks.clear()}getHookPoints(){return Array.from(this._hooks.keys())}hasHooks(_){return this.count(_)>0}setComponentInfo(_,w){this.componentName=_,this.componentVersion=w}get hooks(){return this._hooks}async executeWithIntervention(_,w,$={}){let X=this._hooks.get(_);if(!X||X.length===0)return{stopped:!1,results:[]};let J=this.sortHooks(X),Y=this.createContext(_,w,$,"before"),W=[],q=!1,G;for(let Q of J){if(q)break;let H=await this.safeExecuteAndReturn(Q,Y);if(W.push(H),H&&typeof H==="object"&&"stopped"in H){let B=H;if(B.stopped)q=!0,G=B.action}}return{stopped:q,action:G,results:W}}getOrCreateHooks(_){let w=this._hooks.get(_);if(!w)w=[],this._hooks.set(_,w);return w}sortHooks(_){return[..._].sort((w,$)=>{let X=w.priority??this.defaultPriority,J=$.priority??this.defaultPriority;return X-J})}createContext(_,w,$,X){return{component:{name:this.componentName,version:this.componentVersion},data:w,metadata:$,phase:X,hookPoint:_}}async safeExecute(_,w){try{let $=_.execute(w);if($&&typeof $==="object"&&typeof $.then==="function")await $}catch($){console.error(`Hook "${_.name}" failed:`,$)}}async safeExecuteAndReturn(_,w){try{return await _.execute(w)}catch($){console.error(`Hook "${_.name}" failed:`,$);return}}}var B$=r(()=>{J2()});function zU(){let _=j_.register.bind(j_);j_.register=function(w,$){_(w,$);let X=JX[w];if(X)_(X,$)}}var j_,VU,AU,MU,JX,_0=r(()=>{B$(),j_=new Y2,VU={BEFORE_START:"agent:before.start",BEFORE_LLM:"agent:before.llm",AFTER_LLM:"agent:after.llm",BEFORE_TOOL:"agent:before.tool",AFTER_TOOL:"agent:after.tool",ON_ITERATION:"agent:on.iteration",ON_THRESHOLD:"agent:on.threshold",AFTER_COMPLETE:"agent:after.complete",ON_ERROR:"agent:on.error"},AU={BEFORE_INVOKE:"llm:before.invoke",AFTER_INVOKE:"llm:after.invoke",ON_STREAM:"llm:on.stream"},MU={BEFORE_EXECUTE:"tool:before.execute",AFTER_EXECUTE:"tool:after.execute",BEFORE_REGISTER:"tool:before.register",AFTER_REGISTER:"tool:after.register",ON_ERROR:"tool:on.error"},JX={"before.tool":"tool:before.execute","after.tool":"tool:after.execute","llm.before-invoke":"llm:before.invoke","llm.after-invoke":"llm:after.invoke","llm.stream":"llm:on.stream","prompt.before-render":"prompt:before.render","prompt.after-render":"prompt:after.render","prompt:before.render":"prompt.before-render","prompt:after.render":"prompt.after-render","prompt:after-render":"prompt.after-render","prompt:before-render":"prompt.before-render"},zU()});a();z_();J2();function RU(_,w){if(A$(_))return!0;return w?.hasAgent(_)??!1}async function OU(_,w={}){let X=(w.getBuiltIn??A$)(_),J=w.registry?.get(_);if(!X&&!J)return;if(J)return FU(_,J,X,w.registry);return{subagentType:_,description:X.description,basePrompt:X.promptOverride||H$,allowedTools:X.allowedTools,deniedTools:X.deniedTools??["delegate_task","stop_task"],fromRegistry:!1}}async function FU(_,w,$,X){let J=X?await X.getSystemPrompt(_):w.systemPrompt;return{subagentType:_,description:w.description||$?.description||"Custom agent",basePrompt:J||$?.promptOverride||H$,allowedTools:w.allowedTools??$?.allowedTools,deniedTools:w.deniedTools??$?.deniedTools??["delegate_task","stop_task"],fromRegistry:!0}}function fU(_){return`
2373
+ ## Agent Selection Guide
2374
+
2375
+ - Choose \`subagent_type\` from the list above; use \`general\` when no specialized agent fits (default).
2376
+ ${_.hasCustomAgents?"- Custom agents from AgentRegistry are listed above.":"- Custom agents from AgentRegistry appear above when registered."}
2377
+ - For full metadata: \`roy-agent agents list\`, \`roy-agent agents get <name>\`, \`roy-agent prompt list\`.`}function LU(_){let w=z$.map((W)=>`- ${W.id}: ${W.description}`),X=(_?.list()??[]).filter((W)=>!z$.some((q)=>q.id===W.name)).map((W)=>{if(W.type==="workflow"){let q=W.workflow?` (workflow: ${W.workflow})`:"";return`- ${W.name}: ${W.description||"Workflow agent"}${q}`}return`- ${W.name}: ${W.description||"Custom agent"}`}),J=[...w,...X],Y=fU({hasCustomAgents:X.length>0});return J.join(`
2378
+ `)+Y}_0();var KU=[/\bsk-(?:proj-)?[A-Za-z0-9_-]{16,}\b/g,/\bxox[abprs]-[A-Za-z0-9-]{8,}\b/g,/\bghp_[A-Za-z0-9]{16,}\b/g,/\bgithub_pat_[A-Za-z0-9_]{16,}\b/g,/\bBearer\s+[A-Za-z0-9._\-+/=]{12,}\b/g,/\bAKIA[0-9A-Z]{16}\b/g];function NU(_){let w=_;for(let $ of KU)w=w.replace($,"<redacted>");return w}function bU(_,w){if(_.length<=w)return _;if(w<=3)return _.slice(0,w);return _.slice(0,w-1)+"\u2026"}function YX(_,w){return bU(NU(_),w)}class V${maxEntries;ttlMs;maxDescriptionChars;records=new Map;childrenIndex=new Map;constructor(_={}){this.maxEntries=_.maxEntries??500,this.ttlMs=_.ttlMs??86400000,this.maxDescriptionChars=_.maxDescriptionChars??240}record(_,w={}){let $=new Date().toISOString(),X=this.toRecord(_,w,$);return this.upsert(X),this.indexParentChild(X),this.evictIfNeeded(),X}update(_,w){let $=this.records.get(_.id);if(!$)return;let X=new Date().toISOString();this.records.delete(_.id);let J={...$,...this.toRecord(_,w??$.source,X),createdAt:$.createdAt,source:w??$.source};return this.records.set(_.id,J),this.childrenIndex.delete(J.taskId),this.indexParentChild(J),this.evictIfNeeded(),J}remove(_){let w=this.records.get(_);if(!w)return!1;if(this.records.delete(_),w.parentTaskId!==void 0){let $=this.childrenIndex.get(w.parentTaskId);if($?.delete(_),$&&$.size===0)this.childrenIndex.delete(w.parentTaskId)}return!0}getById(_){let w=this.records.get(_);if(!w)return;if(Date.now()-Date.parse(w.updatedAt)>this.ttlMs){this.remove(_);return}return w}peekById(_){return this.records.get(_)}clear(){this.records.clear(),this.childrenIndex.clear()}size(){return this.records.size}recent(_={}){let w=_.limit??10,$=_.statuses,X=new Set(_.excludeIds??[]),J=_.excludeAncestorOf??_.excludeSelfOrDescendant,Y=J?this.collectSubtree(J):new Set,W=_.sinceHours?Date.now()-_.sinceHours*60*60*1000:0,q=Date.now(),G=new Set([...X,...Y]),Q=[];for(let H of this.records.values()){if(q-Date.parse(H.updatedAt)>this.ttlMs)continue;if(W>0&&Date.parse(H.updatedAt)<W)continue;if(G.has(H.taskId))continue;if(_.scope){if(_.scope.sessionId!==void 0&&H.source.sessionId!==_.scope.sessionId)continue;if(_.scope.parentSessionId!==void 0&&H.source.parentSessionId!==_.scope.parentSessionId)continue;if(_.scope.subagentType!==void 0&&H.source.subagentType!==_.scope.subagentType)continue}if($){if(!$.includes(H.status))continue}else if(H.status==="archived")continue;Q.push(H)}if(_.activeChildFirst){let H=new Map;for(let B of Q)H.set(B.taskId,this.hasActiveChild(B.taskId));Q.sort((B,D)=>{let z=H.get(B.taskId)?1:0,A=H.get(D.taskId)?1:0;if(z!==A)return A-z;let U=Date.parse(D.updatedAt)-Date.parse(B.updatedAt);if(U!==0)return U;return D.taskId-B.taskId})}else Q.sort((H,B)=>{let D=Date.parse(B.updatedAt)-Date.parse(H.updatedAt);if(D!==0)return D;return B.taskId-H.taskId});return Q.slice(0,w)}getSubtreeSummary(_,w={}){let $=w.includeArchived===!0,X={descendantCount:0,activeCount:0,completedCount:0,maxDepth:0};if(!this.records.has(_)&&!this.childrenIndex.has(_))return X;let J=this.childrenIndex.get(_),Y=J?Array.from(J):[],W=Y.length>0?1:0;X.maxDepth=W;let q=Y;while(q.length>0){let G=[];for(let Q of q){let H=this.records.get(Q);if(!H)continue;if(!$&&H.status==="archived")continue;if(X.descendantCount++,H.status==="active")X.activeCount++;else if(H.status==="completed")X.completedCount++;let B=this.childrenIndex.get(Q);if(B&&B.size>0)for(let D of B)G.push(D)}if(G.length>0)W++,X.maxDepth=W;q=G}return X}hasActiveChild(_){let w=this.childrenIndex.get(_);if(!w)return!1;for(let $ of w){let X=this.records.get($);if(!X)continue;if(X.status==="active"||X.status==="todo")return!0}return!1}toRecord(_,w,$){let X=this.safeParseContext(_.context),J=X?this.stripSensitiveKeys(X):void 0;return{taskId:_.id,title:_.title,description:YX(_.description||"",this.maxDescriptionChars),goals:YX(_.goals_and_expected_deliverables||"",this.maxDescriptionChars),tags:_.tags??[],status:_.status,priority:_.priority,type:_.type,parentTaskId:_.parent_task_id,source:w,createdAt:_.createdAt||$,updatedAt:_.updatedAt||$,operationCount:0,project_path:_.project_path,branch:this.pickString(J,"branch"),worktree_path:this.pickString(J,"worktree_path"),parentBranch:this.pickString(J,"parent_branch"),context:J}}safeParseContext(_){if(!_||!_.trim())return;try{let w=JSON.parse(_);if(w&&typeof w==="object"&&!Array.isArray(w))return w;return}catch{return}}pickString(_,w){if(!_)return;let $=_[w];return typeof $==="string"?$:void 0}static STRIPPED_KEYS=["commit","token","secret","password","api_key"];stripSensitiveKeys(_){if(_===null||_===void 0)return _;if(Array.isArray(_))return _.map((X)=>this.stripSensitiveKeys(X));if(typeof _!=="object")return _;let w={},$=V$.STRIPPED_KEYS;for(let[X,J]of Object.entries(_)){let Y=X.toLowerCase();if($.some((W)=>Y.includes(W)))continue;w[X]=this.stripSensitiveKeys(J)}return w}upsert(_){this.records.set(_.taskId,_)}indexParentChild(_){if(_.parentTaskId===void 0||_.parentTaskId===null)return;let w=_.parentTaskId,$=this.childrenIndex.get(w);if(!$)$=new Set,this.childrenIndex.set(w,$);$.add(_.taskId)}collectSubtree(_){let w=new Set([_]),$=[_];while($.length>0){let X=$.shift(),J=this.childrenIndex.get(X);if(!J)continue;for(let Y of J)if(!w.has(Y))w.add(Y),$.push(Y)}return w}evictIfNeeded(){if(this.records.size<=this.maxEntries)return;let _=this.records.size-this.maxEntries,w=Array.from(this.records.keys()).slice(0,_);for(let $ of w)this.remove($)}}a();var W2=n("registry-hook-installer");function jU(_,w,$={}){let X=`${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`,J=$.hookName?`${$.hookName}:${X}`:`registry-hook-installer:${X}`,Y=$.priority??100,W=!1,q=(U,V)=>{try{w.record(U,V)}catch(R){W2.warn(`[registry-hook-installer] record failed for task #${U.id}: ${R instanceof Error?R.message:String(R)}`)}},G=(U,V)=>{try{w.update(U,V)}catch(R){W2.warn(`[registry-hook-installer] update failed for task #${U.id}: ${R instanceof Error?R.message:String(R)}`)}},Q=(U)=>{try{w.remove(U)}catch(V){W2.warn(`[registry-hook-installer] remove failed for task #${U}: ${V instanceof Error?V.message:String(V)}`)}},H=()=>({sessionId:$.sessionIdProvider?.(),...$.staticSource??{}}),B={name:`${J}:after-create`,priority:Y,execute:async(U)=>{let V=U.data;if(V?.task)q(V.task,H())}},D={name:`${J}:after-update`,priority:Y,execute:async(U)=>{let V=U.data;if(!V?.task)return;if(w.peekById(V.task.id))G(V.task,H());else q(V.task,H())}},z={name:`${J}:after-complete`,priority:Y,execute:async(U)=>{let V=U.data;if(V?.task)G(V.task,H())}},A={name:`${J}:after-delete`,priority:Y,execute:async(U)=>{let V=U.data;if(typeof V?.id==="number")Q(V.id)}};return _.registerHook(w_.AFTER_CREATE,B),_.registerHook(w_.AFTER_UPDATE,D),_.registerHook(w_.AFTER_COMPLETE,z),_.registerHook(w_.AFTER_DELETE,A),{uninstall(){if(W)return;W=!0,_.unregisterHook(w_.AFTER_CREATE,B.name),_.unregisterHook(w_.AFTER_UPDATE,D.name),_.unregisterHook(w_.AFTER_COMPLETE,z.name),_.unregisterHook(w_.AFTER_DELETE,A.name),W2.debug(`[registry-hook-installer] uninstalled hooks (name=${J})`)}}}a();var U$=n("task-reuse-registry"),EU={maxEntries:500,ttlMs:86400000,maxDescriptionChars:240},WX=new WeakMap;function SU(_){let w=WX.get(_);if(w)return w.registry;let $=new V$(EU),X={uninstall:()=>{}};try{let Y=_.getComponent?.("task");if(Y?.registerHook)X=jU(Y,$,{sessionIdProvider:()=>{try{return _.currentSessionId??void 0}catch{return}},staticSource:{processId:typeof process<"u"?process.pid:void 0}}),U$.debug("[task-reuse-registry] hook installed");else U$.debug("[task-reuse-registry] no TaskComponent in env; registry stays empty")}catch(Y){U$.warn(`[task-reuse-registry] hook install failed: ${Y instanceof Error?Y.message:String(Y)}`)}let J={registry:$,installHandle:X};return WX.set(_,J),$}var PU=[/\bsk-(?:proj-)?[A-Za-z0-9_-]{16,}\b/g,/\bxox[abprs]-[A-Za-z0-9-]{8,}\b/g,/\bghp_[A-Za-z0-9]{16,}\b/g,/\bgithub_pat_[A-Za-z0-9_]{16,}\b/g,/\bBearer\s+[A-Za-z0-9._\-+/=]{12,}\b/g,/\bAKIA[0-9A-Z]{16}\b/g];function ZU(_){let w=_;for(let $ of PU)w=w.replace($,"<redacted>");return w}function qX(_,w){if(_.length<=w)return _;if(w<=1)return _.slice(0,w);return _.slice(0,w-1)+"\u2026"}function CU(_){let w=_.limit??5,$=_.maxChars??2000,X=_.maxDescriptionChars??240,J=_.heading??"Recent task context (reuse candidates)",Y=_.registry.recent({scope:_.scope,limit:w,statuses:_.statuses,excludeIds:_.similarTaskIds??[],excludeAncestorOf:_.excludeAncestorOf});if(Y.length===0)return{markdown:"",candidateIds:[],isEmpty:!0};let W=[];W.push(`## ${J}`),W.push(""),W.push("The following tasks were recently created in this process / session and may be related to your current work. Before creating a brand-new task, check whether one of these is the same work continuing. "+"The list is a *suggestion only* \u2014 confirm with `task_get <id>` before reusing."),W.push("");for(let G of Y){if(W.push(`### Task #${G.taskId}: ${G.title}`),W.push(`- Status: ${G.status}`),G.parentTaskId!==void 0&&G.parentTaskId!==null)W.push(`- Parent: #${G.parentTaskId}`);if(G.source.subagentType)W.push(`- Created by: ${G.source.subagentType}`);if(W.push(`- Updated: ${G.updatedAt}`),G.project_path)W.push(`- Project: ${G.project_path}`);if(G.worktree_path)W.push(`- Worktree: ${G.worktree_path}`);if(G.branch)W.push(`- Branch: ${G.branch}`);if(G.parentBranch)W.push(`- Parent branch: ${G.parentBranch}`);let Q;try{Q=_.registry.getSubtreeSummary(G.taskId)}catch{Q=void 0}if(Q&&Q.descendantCount>0)W.push(`- Children: ${Q.descendantCount} (active: ${Q.activeCount}, completed: ${Q.completedCount}, max depth: ${Q.maxDepth})`);let H=Q!==void 0&&Q.activeCount>0;if(G.status==="completed"&&H)W.push("- \u26A0 Has active child \u2014 reopening this parent will conflict with running work; prefer creating a child task.");let B=ZU(qX(G.description,X));if(B)W.push(`- Description: ${B}`);if(G.tags&&G.tags.length>0)W.push(`- Tags: ${G.tags.join(", ")}`);W.push("")}W.push("---"),W.push(""),W.push("### Reuse instructions"),W.push(""),W.push("1. **First** call `task_get <id>` on the most relevant candidate to read its description, goals, and recent operations."),W.push("2. **If it is the same work continuing** \u2014 prefer `task_update` over `task_create`:"),W.push(" - Set `status` back to `active` (or `todo`) to reopen a completed task."),W.push(" - Append new context to `description` and `goals_and_expected_deliverables` (do not replace)."),W.push(' - Update `current_status` to reflect the new scope, then call `task_operation_create` with `milestone_type: "decision"` to record the continuation.'),W.push("3. **Only** if the candidate is clearly a different task, call `task_create` with a distinguishing title and `parent_task_id` if appropriate."),W.push("4. Do **not** create a duplicate task merely because the existing one is already `completed` \u2014 reopen it instead."),W.push("5. Do **not** reuse an unrelated candidate just to fill this list. Empty reuse is a valid outcome."),W.push(""),W.push("### Decision matrix \u2014 three legal paths"),W.push(""),W.push("Pick exactly **one** of these paths before calling `task_create`. Reopen-first"),W.push("remains the default, but the matrix adds two new paths for independent work."),W.push(""),W.push("**Path A \u2014 Continuation (reopen existing task).** The new work is the SAME"),W.push('logical task. Use `task_update(task_id=<id>, { status: "active", ... })` and'),W.push("append description/goals. Do **not** create a new task id."),W.push(""),W.push("```"),W.push('task_update(task_id=<parent_id>, { status: "active", current_status: "..." })'),W.push('task_operation_create({ task_id=<parent_id>, milestone_type: "decision",'),W.push(' milestone_title: "Reopened for <new-scope>",'),W.push(' milestone_description: "<why this is the same work>" })'),W.push("```"),W.push(""),W.push("**Path B \u2014 Child task (parent_task_id=<id>).** The new work is related but"),W.push("distinct: an independent bug fix, optimization, parallel delivery or"),W.push("independent acceptance item under the same feature. Create a child task so"),W.push("the audit trail is preserved. Always pair with an audit operation."),W.push(""),W.push("```");for(let G of Y){let Q=G.project_path??"<project_path>";W.push(`task_create(parent_task_id=${G.taskId}, title="<distinguishing title>", project_path="${Q}", context=<inherit or override>)`);break}W.push('task_operation_create({ task_id=<new_id>, milestone_type: "milestone",'),W.push(' milestone_title: "Child of #<parent_id>: <new-scope>",'),W.push(' milestone_description: "<why this is a sibling/child, not a reopen>" })'),W.push("```"),W.push(""),W.push("**Path C \u2014 New root (no parent_task_id).** The new work is unrelated to any"),W.push("existing task. Create a brand-new root task. Use this sparingly \u2014 root count"),W.push("should stay \u2264 ~10 to keep the tree readable."),W.push(""),W.push("```"),W.push('task_create(parent_task_id=undefined, title="<distinct topic>", project_path="<project_path>", context=<json>)'),W.push('task_operation_create({ task_id=<new_id>, milestone_type: "create",'),W.push(' milestone_title: "New root: <topic>",'),W.push(' milestone_description: "<why this is not a child of any existing task>" })'),W.push("```"),W.push(""),W.push("**Operation audit templates.** Every `task_create`/`task_update` call MUST be"),W.push("followed by a `task_operation_create` so the next agent sees *why* the path was"),W.push("chosen. Use the appropriate `milestone_type`:"),W.push(" - continuation \u2192 `decision` (and `progress` once the new scope makes headway)"),W.push(" - child task \u2192 `milestone` (then `progress` as the child advances)"),W.push(" - new root \u2192 `create` (then `progress` per phase)"),W.push(""),W.push("**Project + context inheritance.** For Path B/C, prefer inheriting the"),W.push("candidate's `project_path`, `context.worktree_path`, `context.branch` and"),W.push("`context.parent_branch` from the parent task. Sensitive keys (commits,"),W.push("tokens, secrets) are stripped automatically. Use the helper:"),W.push(""),W.push("```"),W.push("inheritChildContext({ parent: { taskId, projectPath, contextJson, tags }, overrides: {...} })"),W.push("```"),W.push("");let q=W.join(`
2379
+ `);if(q.length>$)q=qX(q,$);return{markdown:q,candidateIds:Y.map((G)=>G.taskId),isEmpty:!1}}var h=n("task:delegate"),l_={STARTED:"task.background.started",PROGRESS:"task.background.progress",COMPLETED:"task.background.completed",FAILED:"task.background.failed",TIMEOUT:"task.background.timeout",STOPPED:"task.background.stopped",ASK_USER:"task.background.ask_user"},z$=[{id:"general",name:"general",mode:"subagent",description:"General-purpose agent for researching complex questions and executing multi-step tasks.",promptOverride:`You are a subagent created by the main agent to handle a specific task.
2380
+
2381
+ ## Your Role
2382
+ - You were created to handle: {task_description}
2383
+ - Complete this task. That's your entire purpose.
2384
+ - You are NOT the main agent. Don't try to be.
2385
+
2386
+ ## Task Context Awareness (Required Behavior)
2387
+
2388
+ **IMPORTANT: Before starting any work, you MUST gather task context to avoid working with outdated or missing information.**
2389
+
2390
+ **Step 0: Check if task_id is already provided**
2391
+ - The session info above includes \`task_id\`.
2392
+ - **If task_id is provided** (not N/A or 0):
2393
+ Use \`task_get\` with that task_id directly \u2014 this is your confirmed task.
2394
+ **Skip any searching.** Read its details and operations.
2395
+ - **If no valid task_id** is provided:
2396
+ Use the task description to guide your work.
2397
+ Look for the task via \`task_list\` if needed.
2398
+
2399
+ **Then gather full context:**
2400
+ 1. **Read task details**: Use \`task_get\` to read the task's:
2401
+ - \`description\`: Detailed description of what needs to be done
2402
+ - \`goals_and_expected_deliverables\`: Clear success criteria and expected outputs
2403
+ - \`current_status\`: Current work progress
2404
+ - \`parent_task_id\`: If exists, this is a sub-task
2405
+
2406
+ 2. **Read recent operations**: Use \`task_operation_list\` to get the last ~15 operation records
2407
+ - These provide history, progress, decisions, and context from previous work
2408
+
2409
+ 3. **Read parent task context** (if \`parent_task_id\` exists):
2410
+ - Use \`task_get\` to read the parent task's description and goals
2411
+ - Use \`task_operation_list\` to get parent's recent operations
2412
+ - This forms the overall task background and ensures alignment
2413
+
2414
+ **Why this matters**:
2415
+ - The main agent may have made critical decisions recorded in operations
2416
+ - Parent task goals provide the broader context for your sub-task
2417
+ - Without this context, you risk working on wrong/outdated goals
2418
+
2419
+ ## Rules
2420
+ 1. **Gather context first** - Always read task details and operations before starting
2421
+ 2. **Stay focused** - Do your assigned task, nothing else
2422
+ 3. **Complete the task** - Your final message will be automatically reported to the main agent
2423
+ 4. **Don't initiate** - No heartbeats, no proactive actions, no side quests
2424
+ 5. **Be ephemeral** - You may be terminated after task completion. That's fine.
2425
+ 6. **No nested delegation** - Do NOT use delegate_task or stop_task tools. Complete the task yourself.
2426
+
2427
+ ## Execution
2428
+ - Use the available tools to complete the task
2429
+ - If you need more information, ask the main agent through the result
2430
+ - Return a clear summary of what you did and the results`,deniedTools:["delegate_task","stop_task"]},{id:"explore",name:"explore",mode:"subagent",description:"Fast agent specialized for exploring codebases, finding files, and searching for patterns.",allowedTools:["read_file","glob","grep","bash"],deniedTools:["delegate_task","stop_task"]},{id:"roy",name:"Roy",mode:"subagent",description:"Versatile AI assistant inspired by Jarvis \u2014 intelligent, proactive, and capable. Use for general-purpose tasks, coding, research, and complex multi-step work. Always available (built-in) without `agent add roy`.",promptOverride:o2.roy,deniedTools:["delegate_task","stop_task"]}];function A$(_){return z$.find((w)=>w.id===_)}function TU(_,w,$,X,J){let Y=_.getRegistry?.();if(Y){if(Y.get(w)?.type==="workflow")return h.debug(`[delegate] Skipping registration for workflow agent: ${w}`),null}let W=_.getAgent(w);if(!W){let q={type:"sub",systemPrompt:$};if(X?.allowedTools&&X.allowedTools.length>0)q.allowedTools=X.allowedTools;if(J.length>0)q.deniedTools=J;W=_.registerAgent(w,q),h.debug(`[delegate] Registered subagent: ${w}`)}return W}var GX=M.object({description:M.string().describe("A short (3-5 words) description of the task"),prompt:M.string().describe("The task for the agent to perform"),subagent_type:M.string().describe("The type of specialized agent to use for this task").default("general"),timeout:M.number().describe("Task timeout in milliseconds. Default: 1800000 (30 minutes). If set, task will be terminated after timeout.").optional(),reason:M.string().describe("Brief reason for calling this tool (max 30 chars, e.g., 'Delegate refactor task')").optional(),similar_task_ids:M.array(M.number()).max(3).describe("Similar task IDs (max 3) to reference for improving task execution. Search for similar tasks before calling this tool."),sub_session_id:M.string().describe("Existing sub-agent session ID to resume. If provided, the sub-agent will continue from the previous conversation context (used for retry on timeout/failure). Leave empty for a new session.").optional(),triggerEventId:M.string().describe("EventStore trigger event ID (ESPlugin v2). Pass it when this delegate_task is triggered by an external event source (e.g. Feishu message) so the completion notification can reply to the original chat instead of a fallback channel. Leave empty if not triggered by an event source.").optional()});function IU(_){let{workflowName:w,originalPrompt:$,description:X}=_;return`# Workflow \u8C03\u5EA6\u8BF7\u6C42
2431
+
2432
+ \u4F60\u88AB\u8C03\u7528\u662F\u56E0\u4E3A\u4E0A\u6E38 \`delegate_task\` \u68C0\u6D4B\u5230 workflow \u7C7B\u578B subagent **${w}**\u3002
2433
+ \u8BF7\u901A\u8FC7 \`workflow_run\` \u547D\u4EE4\u8C03\u5EA6\u5BF9\u5E94 workflow\u3002
2434
+
2435
+ <workflow_name>${w}</workflow_name>
2436
+
2437
+ ## \u8C03\u5EA6\u76EE\u6807
2438
+
2439
+ - **Workflow \u540D\u79F0**: \`${w}\` (\u6743\u5A01\u6765\u6E90: \`<workflow_name>\` \u6807\u7B7E, \u4E0D\u8981\u4ECE\u4E0A\u4E0B\u6587\u731C\u6D4B)
2440
+ - **\u4EFB\u52A1\u63CF\u8FF0**: ${X}
2441
+
2442
+ ## \u539F\u59CB\u7528\u6237\u8BF7\u6C42
2443
+
2444
+ ${$}
2445
+
2446
+ ## \u4F60\u7684\u884C\u52A8
2447
+
2448
+ 1. \`workflow_get(${w})\` \u53D6 workflow \u5165\u53C2 schema
2449
+ 2. \u4ECE"\u539F\u59CB\u7528\u6237\u8BF7\u6C42"\u63D0\u53D6\u7B26\u5408 schema \u7684 input \u5B57\u6BB5
2450
+ 3. \`workflow_run(${w}, input)\` \u89E6\u53D1 workflow
2451
+ 4. \u628A output \u539F\u6837\u56DE\u7ED9 parent agent
2452
+
2453
+ \u4E0D\u8981\u505A\u5176\u4ED6\u5DE5\u4F5C\u3002\u53EA\u8D70 \`workflow_run\` \u8DEF\u5F84\u3002
2454
+ `}var gU=new Set(["strict-task-agent","code-review","bench-agent-host","workspace-analyzer","test-workflow-agent"]),DX=1800000,kU=1200000;class e{env;maxProcessRegistries=1000;maxTerminalTasks=1000;tasks=new Map;terminalTasks=new Map;abortControllers=new Map;progressTimers=new Map;processRegistries=new Map;workflowRunRegistries=new Map;workflowService;constructor(_){this.env=_}setWorkflowService(_){this.workflowService=_}attachWorkflowRun(_,w){if(!_||!w)return;let $=this.workflowRunRegistries.get(_);if(!$)$=new Set,this.workflowRunRegistries.set(_,$);$.add(w)}detachWorkflowRun(_,w){this.workflowRunRegistries.get(_)?.delete(w)}replaceWorkflowRun(_,w,$){if(!_)return;let X=this.workflowRunRegistries.get(_);if(!X)return;if(w)X.delete(w);if($)X.add($)}async propagateStopToWorkflowRuns(_,w){let $=this.workflowRunRegistries.get(_);if(!$||$.size===0)return{runIds:[],stopResults:[]};let X=Array.from($);h.info(`[BackgroundTaskManager] propagateStopToWorkflowRuns count=${X.length} bgTaskId=${_}`);let J=[];for(let Y of X){if(typeof this.workflowService?.stopRun!=="function"){h.warn(`[BackgroundTaskManager] workflowService not injected; cannot stop ${Y}`),J.push({runId:Y,success:!1,error:"workflowService not injected"});continue}try{await this.workflowService.stopRun(Y,w),J.push({runId:Y,success:!0})}catch(W){let q=W instanceof Error?W.message:String(W);h.warn(`[BackgroundTaskManager] workflowService.stopRun(${Y}) failed (likely already terminal): ${q}`),J.push({runId:Y,success:!1,error:q})}}return $.clear(),{runIds:X,stopResults:J}}finalizeTask(_,w){if(!_)return;this.stopProgressReporter(_),this.progressTimers.delete(_);let $=this.tasks.get(_);if($){if(this.tasks.delete(_),this.terminalTasks.size>=this.maxTerminalTasks){let Y=this.terminalTasks.keys().next().value;if(Y!==void 0)this.terminalTasks.delete(Y)}this.terminalTasks.set(_,$)}let X=this.abortControllers.get(_);if(X&&w!=="completed"){if(!X.signal.aborted)try{X.abort()}catch{}}this.abortControllers.delete(_),this.workflowRunRegistries.delete(_);let J=this.processRegistries.get(_);if(J&&J.size()>0)h.debug(`[BackgroundTaskManager] finalizeTask\u4FDD\u7559 processRegistry ${_} (residualPIDs=${J.size()}, reason=${w})`);h.debug(`[BackgroundTaskManager] finalizeTask taskId=${_} reason=${w}`)}getProcessRegistrySize(){return this.processRegistries.size}getMaxProcessRegistries(){return this.maxProcessRegistries}cleanupEmptyProcessRegistries(){let _=0;for(let[w,$]of this.processRegistries)if($.size()===0)this.processRegistries.delete(w),_++;return _}static DEFAULT_WORKFLOW_ENTRY_AGENT="workflow-runner";resolveEntryAgent(_){try{if(e.detectWorkflowShortcutCompat(_))return h.info(`[BackgroundTaskManager] Compat rewrite: '${_}' \u2192 '${e.DEFAULT_WORKFLOW_ENTRY_AGENT}'`),e.DEFAULT_WORKFLOW_ENTRY_AGENT;let X=this.env?.getComponent?.("agent")?.getRegistry?.()?.get?.(_);if(!X||X.type!=="workflow")return;return X.entryAgent??e.DEFAULT_WORKFLOW_ENTRY_AGENT}catch(w){h.warn(`[BackgroundTaskManager] resolveEntryAgent failed for ${_}: ${w}`);return}}static _detectWorkflowShortcutWrapped=T_((_)=>gU.has(_),"delegate.detectWorkflowShortcut",{recordParams:!0,recordResult:!0,log:!0});static detectWorkflowShortcutCompat(_){return e._detectWorkflowShortcutWrapped(_)}getSessionComponent(){return this.env?.getComponent?.("session")}async resolveAssociatedTaskIdBySubSession(_){if(!_)return;try{let $=await this.env?.getComponent?.("task")?.getTaskIdBySessionId?.(_);return typeof $==="number"&&$>0?$:void 0}catch(w){h.debug(`[BackgroundTaskManager] resolveAssociatedTaskIdBySubSession failed for ${_}: ${w instanceof Error?w.message:String(w)}`);return}}publishBackgroundEvent(_,w,$,X,J){if(this.env?.pushEnvEvent)this.env.pushEnvEvent({type:_,payload:w,metadata:{source:"task.background",trigger_session_id:$,...X?{triggerEventId:X}:{},...J?{replyChannel:J}:{}}}),h.info(`[BackgroundTaskManager] Event published: ${_}`,{triggerEventId:X,replyChannelChatId:J?.chatId})}publishBackgroundEventWithTrigger(_,w,$,X,J){this.publishBackgroundEvent(_,w,$,X,J)}static parseAskUserErrorFromMessage(_){let w=_ instanceof Error?_.message:String(_);if(_&&typeof _==="object"&&_.name==="AskUserError"&&_.query){let X=_;return{query:X.query,sessionId:X.sessionId,nodeId:X.nodeId,nodeType:X.nodeType||"agent",agentSessionId:X.agentSessionId,rawErrorMessage:w}}let $="__ASK_USER_ERROR__:";if(w.includes($))try{let X=w.substring(w.indexOf($)+$.length),J=JSON.parse(X);return{query:J.query,sessionId:J.sessionId,nodeId:J.nodeId,nodeType:J.nodeType||"agent",agentSessionId:J.agentSessionId,rawErrorMessage:w}}catch(X){return h.warn("[BackgroundTaskManager] Failed to parse __ASK_USER_ERROR__ payload",{error:X instanceof Error?X.message:String(X)}),null}return null}async createTask(_){let{parentSessionId:w,description:$,prompt:X,subagentType:J,timeout:Y,similarTaskIds:W,existingSubSessionId:q,triggerEventId:G}=_,Q=`process_${Date.now()}_${Math.random().toString(36).slice(2,11)}`,H=this.getSessionComponent();if(!H)throw Error("SessionComponent not found");if(!await H.get(w))throw Error(`Parent session not found: ${w}`);let D;if(q){let K=await H.get(q);if(!K)throw Error(`Sub session not found for resume: ${q}`);let j=K?.metadata?.created_by;if(j&&j!=="subagent")h.warn(`[BackgroundTaskManager] Session ${q} was not created by a sub-agent (created_by=${j}); reusing anyway`);D=K;try{let N=K?.metadata??{};await H.update(q,{metadata:{...N,reused_sub_session:!0,reused_at:Date.now()}})}catch(N){h.warn("[BackgroundTaskManager] Failed to update reused session metadata",{existingSubSessionId:q,error:N instanceof Error?N.message:String(N)})}h.info(`[BackgroundTaskManager] Reusing sub session: ${q} for task ${Q}`)}else{let K={subagent_type:J,created_by:"subagent",task_description:$},j=uw();if(j){if(j.messageId)K.messageId=j.messageId;let N=j.replyChannel;if(N?.messageId)K.larkMessageId=N.messageId;if(N?.chatId)K.chatId=N.chatId;if(N?.userId)K.larkUserId=N.userId;let g=N?.profile;if(g)K.larkProfile=g}if(G)K.triggerEventId=G;if(D=await H.create({title:`${$} (@${J} subagent)`,parentSessionId:w,metadata:K}),!D)throw Error("Failed to create sub-session")}let z=xU(),A=new AbortController;if(this.processRegistries.size>=this.maxProcessRegistries){if(this.cleanupEmptyProcessRegistries(),this.processRegistries.size>=this.maxProcessRegistries)throw Error(`BackgroundTaskManager.processRegistries \u8FBE\u5230\u4E0A\u9650 ${this.maxProcessRegistries}\uFF08\u542B\u6B8B\u7559 PID\uFF09\uFF0C\u62D2\u7EDD\u521B\u5EFA\u65B0 task\uFF08taskId=${Q}\uFF09\u3002\u8BF7\u6E05\u7406 / \u91CD\u542F / \u8C03\u9AD8 maxProcessRegistries\u3002`)}let U=new n2;this.processRegistries.set(Q,U);let V=Date.now(),R=`${J}:bg_${Q}`,f={id:Q,runId:R,subSessionId:D.id,parentSessionId:w,description:$,subagentType:J,status:"pending",createdAt:V,lastUpdatedAt:V,abortController:A,similarTaskIds:W,triggerEventId:G,replyChannel:z};this.tasks.set(Q,f),this.abortControllers.set(Q,A);let S={backgroundTaskId:Q,subSessionId:D.id,parentSessionId:w,description:$,subagentType:J};return this.publishBackgroundEvent(l_.STARTED,S,w,G,z),this.executeTask(Q,X,Y,w).catch((K)=>{h.error("[BackgroundTaskManager] executeTask unhandled rejection",{taskId:Q,error:K instanceof Error?K.message:String(K)})}),{taskId:Q,subSessionId:D.id}}async executeTask(_,w,$,X){let J=this.tasks.get(_);if(!J){h.warn("[BackgroundTaskManager] executeTask: Task not found",{taskId:_});return}let Y=Date.now();J.status="running",J.startedAt=Y,J.lastUpdatedAt=Y;let W=$||DX,q=this.abortControllers.get(_);this.startProgressReporter(_,X||J.parentSessionId);try{let Q=await this.getSessionComponent().get(J.subSessionId);if(!Q)throw Error(`Sub session not found: ${J.subSessionId}`);let H=this.processRegistries.get(_),B=await this.executeWithAbort(Q,w,W,_,q?.signal,J.similarTaskIds,H,()=>q?.abort(),J.subagentType);if(q?.signal.aborted){h.info("[BackgroundTaskManager] Task was aborted",{taskId:_});return}let D=Date.now();J.status="completed",J.completedAt=D,J.lastUpdatedAt=D,J.result=B;let z=J.completedAt-J.startedAt;if(J.associatedTaskId=U0(),J.associatedTaskId===void 0)J.associatedTaskId=await this.resolveAssociatedTaskIdBySubSession(J.subSessionId);let A={backgroundTaskId:J.id,subSessionId:J.subSessionId,parentSessionId:X||J.parentSessionId,status:"completed",result:J.result,description:J.description,executionTimeMs:z,associatedTaskId:J.associatedTaskId};this.publishBackgroundEvent(l_.COMPLETED,A,X||J.parentSessionId,J.triggerEventId,J.replyChannel),h.info("[BackgroundTaskManager] Task completed successfully",{taskId:_,executionTimeMs:z})}catch(G){let Q=G instanceof Error?G.message:String(G),H=e.parseAskUserErrorFromMessage(G),B=Q.toLowerCase().includes("stopped")||Q.toLowerCase().includes("aborted"),D=J.startedAt?Date.now()-J.startedAt:0,z=Date.now();if(J.completedAt=z,J.lastUpdatedAt=z,J.associatedTaskId=U0(),J.associatedTaskId===void 0)J.associatedTaskId=await this.resolveAssociatedTaskIdBySubSession(J.subSessionId);if(H){J.status="awaiting-user",J.error=H.rawErrorMessage,J.pendingAskUserQuery=H.query;let A={backgroundTaskId:J.id,subSessionId:J.subSessionId,parentSessionId:X||J.parentSessionId,subagentType:J.subagentType,description:J.description,query:H.query,sessionId:H.sessionId,nodeId:H.nodeId,nodeType:H.nodeType,agentSessionId:H.agentSessionId,error:H.rawErrorMessage,executionTimeMs:D,hints:["\u8BF7\u628A\u4E0A\u9762\u7684\u95EE\u9898\u539F\u6837\u901A\u8FC7 ask_user tool \u5C55\u793A\u7ED9\u7528\u6237\u5E76\u7B49\u5F85\u7B54\u590D",`\u5F97\u5230\u7528\u6237\u56DE\u590D\u540E\uFF0C\u901A\u8FC7 delegate_task(subagentType="${J.subagentType}", existingSubSessionId="${J.subSessionId}", prompt=<\u57FA\u4E8E\u7528\u6237\u56DE\u590D>) \u590D\u7528 sub-session \u8BA9 sub-agent \u7EE7\u627F\u4E4B\u524D\u6D88\u606F\u5386\u53F2\u7EE7\u7EED\u63A8\u8FDB\uFF0C\u65E0\u9700\u5B9E\u73B0 resume function`],associatedTaskId:J.associatedTaskId};this.publishBackgroundEvent(l_.ASK_USER,A,X||J.parentSessionId,J.triggerEventId,J.replyChannel),h.info("[BackgroundTaskManager] Task awaiting user input (ask_user cascade)",{taskId:_,subSessionId:J.subSessionId,nodeId:H.nodeId,queryPreview:H.query.substring(0,80)}),J._preserveSubSessionOnExit=!0;return}if(B){J.status="stopped";let A={backgroundTaskId:J.id,subSessionId:J.subSessionId,parentSessionId:X||J.parentSessionId,status:"stopped",description:J.description,error:Q,executionTimeMs:D,associatedTaskId:J.associatedTaskId};this.publishBackgroundEvent(l_.STOPPED,A,X||J.parentSessionId,J.triggerEventId,J.replyChannel)}else if(Q.startsWith("Task execution timeout after")){J.status="timeout";let A={backgroundTaskId:J.id,subSessionId:J.subSessionId,parentSessionId:X||J.parentSessionId,status:"timeout",description:J.description,error:Q,executionTimeMs:D,associatedTaskId:J.associatedTaskId};this.publishBackgroundEvent(l_.TIMEOUT,A,X||J.parentSessionId,J.triggerEventId,J.replyChannel)}else{J.status="failed";let A={backgroundTaskId:J.id,subSessionId:J.subSessionId,parentSessionId:X||J.parentSessionId,status:"failed",error:Q,executionTimeMs:D,associatedTaskId:J.associatedTaskId};this.publishBackgroundEvent(l_.FAILED,A,X||J.parentSessionId,J.triggerEventId,J.replyChannel)}J.error=Q,h.error("[BackgroundTaskManager] Task execution error",{taskId:_,status:J.status,error:Q})}finally{this.finalizeTask(_,J.status);let G=J?._preserveSubSessionOnExit===!0,Q=this.getSessionComponent();if(!G&&Q?.endSessionCleanup&&J?.subSessionId)try{await Q.endSessionCleanup(J.subSessionId)}catch(H){h.warn(`[BackgroundTaskManager] endSessionCleanup failed for ${J.subSessionId}`,{error:H instanceof Error?H.message:String(H)})}else if(G)h.info(`[BackgroundTaskManager] Preserve sub session for ask_user resume: ${J.subSessionId}`)}}startProgressReporter(_,w){let $=setInterval(()=>{let X=this.tasks.get(_);if(!X||X.status!=="running"){this.stopProgressReporter(_);return}let J=U0();if(J!==void 0)X.associatedTaskId=J;X.lastUpdatedAt=Date.now();let Y={backgroundTaskId:_,subSessionId:X.subSessionId,parentSessionId:w,description:X.description,status:X.status,associatedTaskId:X.associatedTaskId};this.publishBackgroundEvent(l_.PROGRESS,Y,w,X.triggerEventId,X.replyChannel)},kU);this.progressTimers.set(_,$)}stopProgressReporter(_){let w=this.progressTimers.get(_);if(w)clearInterval(w),this.progressTimers.delete(_)}async executeWithAbort(_,w,$,X,J,Y,W,q,G){let Q=_?.metadata??{},H=Q.task_id,B=Q.task_description||"",D=_.id,z=Q.subagent_type,A=z||G||"general";if(!z&&!G)h.warn(`[delegate] subagent_type unresolved (no session metadata, no explicit value) \u2014 falling back to "general". sessionId=${D}`);let U=this.env?.getComponent?.("agent"),V=U?.getRegistry?.(),R=await OU(A,{registry:V}),f=A$(A),S=R?.basePrompt||f?.promptOverride||"You are a subagent. Complete this task: {task_description}",K=R?.deniedTools||f?.deniedTools||[],j=R?.allowedTools||f?.allowedTools,N=S.replace(/{task_description}/g,B||"N/A");if(N+=`
2455
+
2456
+ ---
2457
+
2458
+ # Session Info
2459
+ - task_id: ${H||"N/A"}
2460
+ - session_id: ${D}
2461
+
2462
+ ---
2463
+
2464
+ ## \u7528\u6237\u6307\u4EE4
2465
+ ${w}
2466
+
2467
+ ---
2468
+
2469
+ ## \u6267\u884C\u89C4\u8303
2470
+ - \u4F7F\u7528\u53EF\u7528\u5DE5\u5177\u5B8C\u6210\u4EFB\u52A1
2471
+ - \u8FD4\u56DE\u6E05\u6670\u7684\u4EFB\u52A1\u6267\u884C\u7ED3\u679C\u6458\u8981
2472
+ - \u9002\u65F6\u8C03\u7528 task_operation_create \u8BB0\u5F55\u8FDB\u5C55
2473
+ - \u5982\u679C\u4F60\u901A\u8FC7 task_create \u521B\u5EFA\u4E86\u4EFB\u52A1\uFF0C\u8BF7\u5728\u6700\u7EC8\u54CD\u5E94\u4E2D\u660E\u786E\u62A5\u544A task_id\uFF08\u4F8B\u5982\uFF1ATask #627\uFF09`,Y&&Y.length>0)try{let x=this.env?.getComponent?.("task");if(x){let i=[];for(let y of Y)try{let c=await x.getTask(y);if(!c){h.warn(`[delegate] Similar task #${y} not found, skipping`);continue}let H_=await x.listOperations({taskId:y,limit:10}),D_=`### Task #${c.id}: ${c.title}
2474
+ `;if(D_+=`- Status: ${c.status}
2475
+ `,c.description)D_+=`- Description: ${c.description}
2476
+ `;if(c.goals_and_expected_deliverables)D_+=`- Goals: ${c.goals_and_expected_deliverables}
2477
+ `;if(H_&&H_.length>0){D_+=`- Recent Operations:
2478
+ `;for(let Kw of H_)D_+=` - [${Kw.actionType}] ${Kw.actionTitle}: ${Kw.actionDescription||""}
2479
+ `}i.push(D_)}catch(c){h.warn(`[delegate] Failed to fetch similar task #${y}`,{error:c instanceof Error?c.message:String(c)})}if(i.length>0)N+=`
2480
+
2481
+ ---
2482
+
2483
+ ## Similar Tasks Reference
2484
+
2485
+ The following similar tasks and their operation records can serve as reference:
2486
+
2487
+ `,N+=i.join(`
2488
+ `),N+=`
2489
+
2490
+ ---
2491
+
2492
+ Use these as guidance to improve task execution efficiency.`}}catch(x){h.warn("[delegate] Failed to inject similar tasks reference",{error:x instanceof Error?x.message:String(x)})}if(!U)throw Error("AgentComponent not found");try{if(this.env){let x=SU(this.env),i=CU({registry:x,similarTaskIds:Y??[],limit:5,maxChars:2000,maxDescriptionChars:240});if(!i.isEmpty)N+=`
2493
+
2494
+ ---
2495
+
2496
+ ${i.markdown}`}}catch(x){h.warn("[delegate] Failed to inject reuse candidate section",{error:x instanceof Error?x.message:String(x)})}let g=f?{...f,allowedTools:j}:j?{id:A,name:A,mode:"subagent",description:R?.description||"Custom agent",allowedTools:j,deniedTools:K}:void 0;TU(U,A,S,g,K);let C=V?.get(A)?.type==="workflow"?w:N;return new Promise((x,i)=>{let y=async()=>{try{await W?.killAll()}catch(B_){h.warn("[delegate] ProcessRegistry.killAll failed",{error:B_ instanceof Error?B_.message:String(B_)})}},c=!1,H_,D_,Kw=this.tasks.get(X);if(Kw?.runId)D_=Kw.runId;let t0=()=>{if(J&&e0)try{J.removeEventListener("abort",e0)}catch{}},e0;if(e0=()=>{if(c)return;if(c=!0,H_)clearTimeout(H_);t0();try{let B_=this.env?.getComponent?.("agent");if(B_?.abortRun&&D_)B_.abortRun(D_,"task_signal_abort")}catch{}y().catch(()=>{}).then(()=>{i(Error("Task execution stopped"))})},H_=setTimeout(()=>{if(c)return;if(c=!0,H_)clearTimeout(H_);t0();try{q?.()}catch{}try{let B_=this.env?.getComponent?.("agent");if(B_?.abortRun&&D_)B_.abortRun(D_,"task_timeout")}catch{}y().catch(()=>{}).then(()=>{i(Error(`Task execution timeout after ${$}ms`))})},$),J)J.addEventListener("abort",e0);let I$=()=>this.env.handle_query?.(C,{sessionId:D,deniedTools:K.length>0?K:void 0,agentType:A,abort:J,runId:D_});(W?l4(W,()=>D$(X,()=>I$())):D$(X,()=>I$()))?.then((B_)=>{if(c)return;if(c=!0,H_)clearTimeout(H_);t0(),x(B_)}).catch((B_)=>{if(c)return;if(c=!0,H_)clearTimeout(H_);t0(),i(B_)})})}async stopTask(_){let w=this.tasks.get(_)??this.terminalTasks.get(_);if(!w)return{success:!1,message:"Task not found"};if(this.terminalTasks.has(_))return{success:!1,task:w,message:`Cannot stop task with status: ${w.status}`};if(w.status==="completed"||w.status==="failed"||w.status==="stopped"||w.status==="timeout")return{success:!1,task:w,message:`Cannot stop task with status: ${w.status}`};let $=Date.now();if(w.status="stopped",w.abortController?.abort(),w.runId)try{this.env?.getComponent?.("agent")?.abortRun?.(w.runId,"stop_task")}catch(W){h.warn("[BackgroundTaskManager] abortRun failed during stopTask",{taskId:_,runId:w.runId,error:W instanceof Error?W.message:String(W)})}w.completedAt=$,w.lastUpdatedAt=$;try{await this.processRegistries.get(_)?.killAll()}catch(W){h.warn("[delegate] stopTask killAll failed",{taskId:_,error:W instanceof Error?W.message:String(W)})}let{runIds:X,stopResults:J}=await this.propagateStopToWorkflowRuns(_,"Task stopped by user"),Y={backgroundTaskId:w.id,subSessionId:w.subSessionId,parentSessionId:w.parentSessionId,status:"stopped",description:w.description,error:"Task stopped by user",executionTimeMs:w.startedAt?w.completedAt-w.startedAt:0,associatedTaskId:w.associatedTaskId};return this.publishBackgroundEvent(l_.STOPPED,Y,w.parentSessionId,w.triggerEventId,w.replyChannel),this.finalizeTask(_,"stopped"),{success:!0,task:w,message:"Task has been stopped",attached_workflow_run_ids:X,workflow_stop_results:J}}getTask(_){return this.tasks.get(_)??this.terminalTasks.get(_)}listTasks(){return Array.from(this.tasks.values()).concat(Array.from(this.terminalTasks.values()))}hasActiveTaskForParent(_){if(!_)return!1;for(let w of this.tasks.values())if(w.parentSessionId===_&&(w.status==="pending"||w.status==="running"))return!0;return!1}async stopAllForParent(_){if(!_)return{stoppedTaskIds:[]};let w=[];for(let[$,X]of this.tasks)if(X.parentSessionId===_&&(X.status==="running"||X.status==="pending"))try{if((await this.stopTask($))?.success)w.push($)}catch(J){h.warn(`[BackgroundTaskManager] stopAllForParent failed for ${$}: ${J instanceof Error?J.message:String(J)}`)}return{stoppedTaskIds:w}}async forceStopAllAcrossParents(){let _=new Set,w=new Set([...this.tasks.keys(),...this.terminalTasks.keys(),...this.processRegistries.keys()]);for(let $ of w){if(_.has($))continue;_.add($);let J=this.tasks.get($)??this.terminalTasks.get($);try{await this.processRegistries.get($)?.killAll()}catch(W){h.warn(`[BackgroundTaskManager] forceStopAllAcrossParents killAll failed for ${$}: ${W instanceof Error?W.message:String(W)}`)}try{await this.propagateStopToWorkflowRuns($,"force stop all")}catch(W){h.warn(`[BackgroundTaskManager] forceStopAllAcrossParents propagateStopToWorkflowRuns failed for ${$}: ${W instanceof Error?W.message:String(W)}`)}let Y=!1;if(J&&(J.status==="running"||J.status==="pending"))try{J.status="stopped",J.completedAt=Date.now(),J.lastUpdatedAt=J.completedAt,J.abortController?.abort(),Y=!0}catch(W){h.warn(`[BackgroundTaskManager] forceStopAllAcrossParents mark stopped failed for ${$}: ${W instanceof Error?W.message:String(W)}`)}if(Y&&J){let W={backgroundTaskId:J.id,subSessionId:J.subSessionId,parentSessionId:J.parentSessionId,status:"stopped",description:J.description,error:"force stop all",executionTimeMs:J.startedAt&&J.completedAt?J.completedAt-J.startedAt:0,associatedTaskId:J.associatedTaskId};this.publishBackgroundEvent(l_.STOPPED,W,J.parentSessionId,J.triggerEventId,J.replyChannel)}}}async forceStopAll(){return this.forceStopAllAcrossParents()}async dispose(){for(let[,_]of this.progressTimers)try{clearInterval(_)}catch{}this.progressTimers.clear();for(let[,_]of this.abortControllers)try{_.abort()}catch{}this.abortControllers.clear();for(let[,_]of this.processRegistries)try{await _.killAll()}catch(w){h.warn("[BackgroundTaskManager] dispose registry.killAll failed",{error:w instanceof Error?w.message:String(w)})}this.processRegistries.clear();for(let _ of this.workflowRunRegistries.keys())await this.propagateStopToWorkflowRuns(_,"BackgroundTaskManager disposed");this.workflowRunRegistries.clear(),this.tasks.clear(),h.info("[BackgroundTaskManager] Disposed")}}m([u("task.background.attachWorkflowRun",{recordParams:!0,recordResult:!1,log:!0})],e.prototype,"attachWorkflowRun",null);m([u("task.background.detachWorkflowRun",{recordParams:!0,recordResult:!1,log:!0})],e.prototype,"detachWorkflowRun",null);m([u("task.background.replaceWorkflowRun",{recordParams:!0,recordResult:!1,log:!0})],e.prototype,"replaceWorkflowRun",null);m([u("task.background.propagateStopToWorkflowRuns",{recordParams:!0,recordResult:!0,log:!0})],e.prototype,"propagateStopToWorkflowRuns",null);m([u("task.background.finalizeTask",{recordParams:!0,recordResult:!1,log:!0})],e.prototype,"finalizeTask",null);m([u("task.background.resolveEntryAgent",{recordParams:!0,recordResult:!0})],e.prototype,"resolveEntryAgent",null);m([u("task.background.createTask",{recordParams:!1,recordResult:!0,log:!0})],e.prototype,"createTask",null);m([u("task.background.executeTask",{recordParams:!0,recordResult:!0,log:!0})],e.prototype,"executeTask",null);m([u("task.background.startProgressReporter",{recordParams:!1,recordResult:!0,log:!0})],e.prototype,"startProgressReporter",null);m([u("task.background.stopProgressReporter",{recordParams:!1,recordResult:!0,log:!0})],e.prototype,"stopProgressReporter",null);m([u("delegate.executeWithAbort",{recordParams:!0,recordResult:!0,log:!0})],e.prototype,"executeWithAbort",null);m([u("task.background.stopAllForParent",{recordParams:!0,recordResult:!0,log:!0})],e.prototype,"stopAllForParent",null);m([u("task.background.forceStopAllAcrossParents",{recordParams:!1,recordResult:!0,log:!0})],e.prototype,"forceStopAllAcrossParents",null);function QX(_){return _.env?.getComponent?.("agent")?.getRegistry?.()}function BX(_){let w=_.env,X=_.backgroundTaskManager??new e(w),J=QX(_);_._backgroundTaskManager=X;let Y={name:"delegate_task",description:`Launch a new sub-agent to handle complex, multistep tasks autonomously.
2497
+
2498
+ Available agent types:
2499
+ ${LU(J)}
2500
+
2501
+ When using the delegate_task tool, you must specify a subagent_type parameter to select which agent type to use.
2502
+
2503
+ ## When to use delegate_task:
2504
+ - When you need to perform complex, multi-step tasks that require independent execution
2505
+ - When you need to explore a codebase thoroughly (use "explore" subagent)
2506
+ - When you need to run long-running tasks without blocking the main agent
2507
+
2508
+ ## How it works:
2509
+ This tool **always runs in background mode**. It returns immediately with:
2510
+ - **bgProcessId**: Internal background process ID (use with \`stop_task\` to cancel, different from Task #)
2511
+ - **subSessionId**: Sub-agent session ID (use with \`session_get\` to see full execution log, always retained)
2512
+
2513
+ **After delegating, just WAIT for the notification.** The background process will automatically notify you when:
2514
+ - \u2705 **completed** \u2014 with \`bgprocess:\` + \`Task #\` (if it created a task) + result summary
2515
+ - \u23F1\uFE0F **timeout** \u2014 with \`bgprocess:\` + \`Task #\` (if available)
2516
+ - \u274C **failed** \u2014 with \`bgprocess:\` + \`Task #\` + error details
2517
+ - \uD83D\uDED1 **stopped** \u2014 with \`bgprocess:\` + \`Task #\`
2518
+
2519
+ The sub-agent runs independently and creates its own tasks via \`task_create\`.
2520
+ No need to poll \u2014 just wait for the notification and use \`task_get\` with the Task # reported in it.
2521
+
2522
+ ## Parameters:
2523
+ - **description**: A short (3-5 words) description of the task
2524
+ - **prompt**: The task for the agent to perform
2525
+ - **subagent_type**: The type of specialized agent to use (e.g., "general", "explore")
2526
+ - **timeout**: Task timeout in milliseconds (optional, default 30 minutes)
2527
+ - **reason**: Brief reason for calling this tool (optional)
2528
+ - **similar_task_ids**: Similar task IDs (max 3) to reference for improving sub-agent execution efficiency. Search for similar tasks using \`task_search\` or \`task_list\` before calling this tool.`,parameters:GX,execute:async(W,q)=>{let G=Date.now(),Q=GX.parse(W),{description:H,prompt:B,subagent_type:D="general",timeout:z,reason:A,similar_task_ids:U}=Q,V=q.session_id||"default",R=Q.triggerEventId??yU();if(R&&R!==Q.triggerEventId)h.info(`[delegate_task] triggerEventId auto-derived from EnvContext: ${R}`);if(h.info(`[delegate_task] Called: description=${H}, subagent_type=${D}, triggerEventId=${R??"(none)"}`),R){let g=d4();if(g)try{if(!await g.getEventById(R))return{success:!1,output:"",error:`Unknown triggerEventId: ${R} (not found in EventStore)`,metadata:{execution_time_ms:Date.now()-G}}}catch(E){return{success:!1,output:"",error:`Failed to verify triggerEventId ${R}: ${E instanceof Error?E.message:String(E)}`,metadata:{execution_time_ms:Date.now()-G}}}else h.warn(`[delegate_task] triggerEventId=${R} supplied but no shared EventStore registered; skipping verification`)}let f=QX(_);if(!RU(D,f))return{success:!1,output:"",error:`Unknown subagent type: ${D}`,metadata:{execution_time_ms:Date.now()-G}};let S=_.getTagService(),K=B,j={prompt:K,subagentType:D,timeout:z,reason:A,tagService:S},N={component:{name:"task",version:"1.0.0"},data:j,metadata:{sessionId:V},phase:"before",hookPoint:w_.DELEGATE_BEFORE};return await j_.execute(w_.DELEGATE_BEFORE,j,{sessionId:V}),K=j.prompt,await mU(X,V,H,K,j.subagentType,j.timeout,U,Q.sub_session_id,R)}};return Y.execute=T_(Y.execute,"delegate.execute",{recordParams:!0,recordResult:!1,recordError:!0}),Y}function hU(){let _=uw();if(!_)return;let w=_.envEvent,$=w?.metadata?.triggerEventId;if(typeof $==="string"&&$.length>0)return $;let X=w?.payload?.triggerEventId;if(typeof X==="string"&&X.length>0)return X;return}var yU=T_(hU,"delegate.deriveTriggerEventId",{recordParams:!1,recordResult:!0,recordError:!0});function vU(){let _=uw()?.replyChannel;if(!_)return;if(!_.chatId&&!_.messageId)return;let w={..._.params??{}};if(_.userId&&w.userId===void 0)w.userId=_.userId;return{type:_.type,appId:_.appId,chatId:_.chatId,messageId:_.messageId,profile:_.profile,params:Object.keys(w).length>0?w:void 0}}var xU=T_(vU,"delegate.captureReplyChannel",{recordParams:!1,recordResult:!0,recordError:!0});async function mU(_,w,$,X,J,Y,W,q,G){let Q=Date.now();try{let H=J,B=X,D,z=_.resolveEntryAgent(J);if(z)D=J,H=z,B=IU({workflowName:D,originalPrompt:X,description:$}),h.info(`[delegate_task] Routing workflow subagent '${J}' \u2192 entry-agent '${z}'`);let{taskId:A,subSessionId:U}=await _.createTask({parentSessionId:w,description:$,prompt:B,subagentType:H,timeout:Y,similarTaskIds:W,originalWorkflowName:D,existingSubSessionId:q,triggerEventId:G});return{success:!0,output:["\u2705 Background task accepted","",`\uD83D\uDCCB Process ID: ${A}`,`\uD83D\uDCDD Description: ${$}`,`\uD83E\uDD16 Sub-agent: ${H}${D?` (workflow: ${D})`:""}`,`\u23F1\uFE0F Timeout: ${(Y||DX)/1000}s`,"",`Use stop_task with task_id="${A}" to cancel this task.`].join(`
2529
+ `),metadata:{execution_time_ms:Date.now()-Q,sessionId:U,background:!0,status:"accepted",bgProcessId:A}}}catch(H){return{success:!1,output:"",error:H instanceof Error?H.message:String(H),metadata:{execution_time_ms:Date.now()-Q}}}}var HX=M.object({task_id:M.string().describe("The ID of the background task to stop")}),uU=`Stop a running background task.
2530
+
2531
+ Use this tool to stop a background task that is currently running. This is useful when:
2532
+ - The user wants to cancel a long-running task
2533
+ - The task is taking too long and needs to be stopped
2534
+ - The user wants to change direction and doesn't need the task result anymore
312
2535
 
313
- `+q.join(`
314
- `);return{success:!0,output:X,metadata:{execution_time_ms:0,operation_id:H.id,task_id:H.taskId,session_id:H.sessionId,deprecated_fields_used:W._deprecated_fields_used}}}catch(H){return{success:!1,output:"",error:H instanceof Error?H.message:String(H),metadata:{execution_time_ms:0}}}}}}function e0($){return{name:"task_operation_list",description:"List operation records for a task with optional filters. Use milestone_type (canonical) or action_type (deprecated, auto-mapped).",parameters:H2,execute:async(J,Q)=>{let W=H2.parse(J);try{let Y=await $.listOperations({taskId:W.task_id,milestoneType:W.milestone_type,limit:W.limit,offset:W.offset}),B=JSON.stringify({operations:Y,count:Y.length});if(W._deprecated_fields_used.length>0)B=`\u26A0\uFE0F DEPRECATION NOTICE: \u4F60\u4F7F\u7528\u4E86\u65E7\u7684 action_type \u5B57\u6BB5\uFF0C\u5DF2\u81EA\u52A8\u6620\u5C04\u5230 milestone_type\u3002
2536
+ When stopped, the task will be terminated immediately and you will receive a confirmation.
315
2537
 
316
- `+B;return{success:!0,output:B,metadata:{execution_time_ms:0,deprecated_fields_used:W._deprecated_fields_used}}}catch(Y){return{success:!1,output:"",error:Y instanceof Error?Y.message:String(Y),metadata:{execution_time_ms:0}}}}}}var _2=Symbol("Let zodToJsonSchema decide on which parser to use");var M2={name:void 0,$refStrategy:"root",basePath:["#"],effectStrategy:"input",pipeStrategy:"all",dateStrategy:"format:date-time",mapStrategy:"entries",removeAdditionalStrategy:"passthrough",allowedAdditionalProperties:!0,rejectedAdditionalProperties:!1,definitionPath:"definitions",target:"jsonSchema7",strictUnions:!1,definitions:{},errorMessages:!1,markdownDescription:!1,patternStrategy:"escape",applyRegexFlags:!1,emailStrategy:"format:email",base64Strategy:"contentEncoding:base64",nameStrategy:"ref",openAiAnyTypeName:"OpenAiAnyType"},U2=($)=>typeof $==="string"?{...M2,name:$}:{...M2,...$};var V2=($)=>{let J=U2($),Q=J.name!==void 0?[...J.basePath,J.definitionPath,J.name]:J.basePath;return{...J,flags:{hasReferencedOpenAiAnyType:!1},currentPath:Q,propertyPath:void 0,seen:new Map(Object.entries(J.definitions).map(([W,Y])=>[Y._def,{def:Y._def,path:[...J.basePath,J.definitionPath,W],jsonSchema:void 0}]))}};function $1($,J,Q,W){if(!W?.errorMessages)return;if(Q)$.errorMessage={...$.errorMessage,[J]:Q}}function f($,J,Q,W,Y){$[J]=Q,$1($,J,W,Y)}var U0=($,J)=>{let Q=0;for(;Q<$.length&&Q<J.length;Q++)if($[Q]!==J[Q])break;return[($.length-Q).toString(),...J.slice(Q)].join("/")};function y($){if($.target!=="openAi")return{};let J=[...$.basePath,$.definitionPath,$.openAiAnyTypeName];return $.flags.hasReferencedOpenAiAnyType=!0,{$ref:$.$refStrategy==="relative"?U0(J,$.currentPath):J.join("/")}}function D2($,J){let Q={type:"array"};if($.type?._def&&$.type?._def?.typeName!==D.ZodAny)Q.items=F($.type._def,{...J,currentPath:[...J.currentPath,"items"]});if($.minLength)f(Q,"minItems",$.minLength.value,$.minLength.message,J);if($.maxLength)f(Q,"maxItems",$.maxLength.value,$.maxLength.message,J);if($.exactLength)f(Q,"minItems",$.exactLength.value,$.exactLength.message,J),f(Q,"maxItems",$.exactLength.value,$.exactLength.message,J);return Q}function A2($,J){let Q={type:"integer",format:"int64"};if(!$.checks)return Q;for(let W of $.checks)switch(W.kind){case"min":if(J.target==="jsonSchema7")if(W.inclusive)f(Q,"minimum",W.value,W.message,J);else f(Q,"exclusiveMinimum",W.value,W.message,J);else{if(!W.inclusive)Q.exclusiveMinimum=!0;f(Q,"minimum",W.value,W.message,J)}break;case"max":if(J.target==="jsonSchema7")if(W.inclusive)f(Q,"maximum",W.value,W.message,J);else f(Q,"exclusiveMaximum",W.value,W.message,J);else{if(!W.inclusive)Q.exclusiveMaximum=!0;f(Q,"maximum",W.value,W.message,J)}break;case"multipleOf":f(Q,"multipleOf",W.value,W.message,J);break}return Q}function z2(){return{type:"boolean"}}function V0($,J){return F($.type._def,J)}var K2=($,J)=>{return F($.innerType._def,J)};function J1($,J,Q){let W=Q??J.dateStrategy;if(Array.isArray(W))return{anyOf:W.map((Y,B)=>J1($,J,Y))};switch(W){case"string":case"format:date-time":return{type:"string",format:"date-time"};case"format:date":return{type:"string",format:"date"};case"integer":return U8($,J)}}var U8=($,J)=>{let Q={type:"integer",format:"unix-time"};if(J.target==="openApi3")return Q;for(let W of $.checks)switch(W.kind){case"min":f(Q,"minimum",W.value,W.message,J);break;case"max":f(Q,"maximum",W.value,W.message,J);break}return Q};function b2($,J){return{...F($.innerType._def,J),default:$.defaultValue()}}function j2($,J){return J.effectStrategy==="input"?F($.schema._def,J):y(J)}function N2($){return{type:"string",enum:Array.from($.values)}}var V8=($)=>{if("type"in $&&$.type==="string")return!1;return"allOf"in $};function R2($,J){let Q=[F($.left._def,{...J,currentPath:[...J.currentPath,"allOf","0"]}),F($.right._def,{...J,currentPath:[...J.currentPath,"allOf","1"]})].filter((B)=>!!B),W=J.target==="jsonSchema2019-09"?{unevaluatedProperties:!1}:void 0,Y=[];return Q.forEach((B)=>{if(V8(B)){if(Y.push(...B.allOf),B.unevaluatedProperties===void 0)W=void 0}else{let H=B;if("additionalProperties"in B&&B.additionalProperties===!1){let{additionalProperties:X,...q}=B;H=q}else W=void 0;Y.push(H)}}),Y.length?{allOf:Y,...W}:void 0}function O2($,J){let Q=typeof $.value;if(Q!=="bigint"&&Q!=="number"&&Q!=="boolean"&&Q!=="string")return{type:Array.isArray($.value)?"array":"object"};if(J.target==="openApi3")return{type:Q==="bigint"?"integer":Q,enum:[$.value]};return{type:Q==="bigint"?"integer":Q,const:$.value}}var Q1=void 0,e={cuid:/^[cC][^\s-]{8,}$/,cuid2:/^[0-9a-z]+$/,ulid:/^[0-9A-HJKMNP-TV-Z]{26}$/,email:/^(?!\.)(?!.*\.\.)([a-zA-Z0-9_'+\-\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\-]*\.)+[a-zA-Z]{2,}$/,emoji:()=>{if(Q1===void 0)Q1=RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$","u");return Q1},uuid:/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/,ipv4:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,ipv4Cidr:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,ipv6:/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,ipv6Cidr:/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,base64:/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,base64url:/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,nanoid:/^[a-zA-Z0-9_-]{21}$/,jwt:/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/};function D0($,J){let Q={type:"string"};if($.checks)for(let W of $.checks)switch(W.kind){case"min":f(Q,"minLength",typeof Q.minLength==="number"?Math.max(Q.minLength,W.value):W.value,W.message,J);break;case"max":f(Q,"maxLength",typeof Q.maxLength==="number"?Math.min(Q.maxLength,W.value):W.value,W.message,J);break;case"email":switch(J.emailStrategy){case"format:email":$$(Q,"email",W.message,J);break;case"format:idn-email":$$(Q,"idn-email",W.message,J);break;case"pattern:zod":c(Q,e.email,W.message,J);break}break;case"url":$$(Q,"uri",W.message,J);break;case"uuid":$$(Q,"uuid",W.message,J);break;case"regex":c(Q,W.regex,W.message,J);break;case"cuid":c(Q,e.cuid,W.message,J);break;case"cuid2":c(Q,e.cuid2,W.message,J);break;case"startsWith":c(Q,RegExp(`^${W1(W.value,J)}`),W.message,J);break;case"endsWith":c(Q,RegExp(`${W1(W.value,J)}$`),W.message,J);break;case"datetime":$$(Q,"date-time",W.message,J);break;case"date":$$(Q,"date",W.message,J);break;case"time":$$(Q,"time",W.message,J);break;case"duration":$$(Q,"duration",W.message,J);break;case"length":f(Q,"minLength",typeof Q.minLength==="number"?Math.max(Q.minLength,W.value):W.value,W.message,J),f(Q,"maxLength",typeof Q.maxLength==="number"?Math.min(Q.maxLength,W.value):W.value,W.message,J);break;case"includes":{c(Q,RegExp(W1(W.value,J)),W.message,J);break}case"ip":{if(W.version!=="v6")$$(Q,"ipv4",W.message,J);if(W.version!=="v4")$$(Q,"ipv6",W.message,J);break}case"base64url":c(Q,e.base64url,W.message,J);break;case"jwt":c(Q,e.jwt,W.message,J);break;case"cidr":{if(W.version!=="v6")c(Q,e.ipv4Cidr,W.message,J);if(W.version!=="v4")c(Q,e.ipv6Cidr,W.message,J);break}case"emoji":c(Q,e.emoji(),W.message,J);break;case"ulid":{c(Q,e.ulid,W.message,J);break}case"base64":{switch(J.base64Strategy){case"format:binary":{$$(Q,"binary",W.message,J);break}case"contentEncoding:base64":{f(Q,"contentEncoding","base64",W.message,J);break}case"pattern:zod":{c(Q,e.base64,W.message,J);break}}break}case"nanoid":c(Q,e.nanoid,W.message,J);case"toLowerCase":case"toUpperCase":case"trim":break;default:((Y)=>{})(W)}return Q}function W1($,J){return J.patternStrategy==="escape"?A8($):$}var D8=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");function A8($){let J="";for(let Q=0;Q<$.length;Q++){if(!D8.has($[Q]))J+="\\";J+=$[Q]}return J}function $$($,J,Q,W){if($.format||$.anyOf?.some((Y)=>Y.format)){if(!$.anyOf)$.anyOf=[];if($.format){if($.anyOf.push({format:$.format,...$.errorMessage&&W.errorMessages&&{errorMessage:{format:$.errorMessage.format}}}),delete $.format,$.errorMessage){if(delete $.errorMessage.format,Object.keys($.errorMessage).length===0)delete $.errorMessage}}$.anyOf.push({format:J,...Q&&W.errorMessages&&{errorMessage:{format:Q}}})}else f($,"format",J,Q,W)}function c($,J,Q,W){if($.pattern||$.allOf?.some((Y)=>Y.pattern)){if(!$.allOf)$.allOf=[];if($.pattern){if($.allOf.push({pattern:$.pattern,...$.errorMessage&&W.errorMessages&&{errorMessage:{pattern:$.errorMessage.pattern}}}),delete $.pattern,$.errorMessage){if(delete $.errorMessage.pattern,Object.keys($.errorMessage).length===0)delete $.errorMessage}}$.allOf.push({pattern:F2(J,W),...Q&&W.errorMessages&&{errorMessage:{pattern:Q}}})}else f($,"pattern",F2(J,W),Q,W)}function F2($,J){if(!J.applyRegexFlags||!$.flags)return $.source;let Q={i:$.flags.includes("i"),m:$.flags.includes("m"),s:$.flags.includes("s")},W=Q.i?$.source.toLowerCase():$.source,Y="",B=!1,H=!1,X=!1;for(let q=0;q<W.length;q++){if(B){Y+=W[q],B=!1;continue}if(Q.i){if(H){if(W[q].match(/[a-z]/)){if(X)Y+=W[q],Y+=`${W[q-2]}-${W[q]}`.toUpperCase(),X=!1;else if(W[q+1]==="-"&&W[q+2]?.match(/[a-z]/))Y+=W[q],X=!0;else Y+=`${W[q]}${W[q].toUpperCase()}`;continue}}else if(W[q].match(/[a-z]/)){Y+=`[${W[q]}${W[q].toUpperCase()}]`;continue}}if(Q.m){if(W[q]==="^"){Y+=`(^|(?<=[\r
317
- ]))`;continue}else if(W[q]==="$"){Y+=`($|(?=[\r
318
- ]))`;continue}}if(Q.s&&W[q]==="."){Y+=H?`${W[q]}\r
319
- `:`[${W[q]}\r
320
- ]`;continue}if(Y+=W[q],W[q]==="\\")B=!0;else if(H&&W[q]==="]")H=!1;else if(!H&&W[q]==="[")H=!0}try{new RegExp(Y)}catch{return console.warn(`Could not convert regex pattern at ${J.currentPath.join("/")} to a flag-independent form! Falling back to the flag-ignorant source`),$.source}return Y}function A0($,J){if(J.target==="openAi")console.warn("Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.");if(J.target==="openApi3"&&$.keyType?._def.typeName===D.ZodEnum)return{type:"object",required:$.keyType._def.values,properties:$.keyType._def.values.reduce((W,Y)=>({...W,[Y]:F($.valueType._def,{...J,currentPath:[...J.currentPath,"properties",Y]})??y(J)}),{}),additionalProperties:J.rejectedAdditionalProperties};let Q={type:"object",additionalProperties:F($.valueType._def,{...J,currentPath:[...J.currentPath,"additionalProperties"]})??J.allowedAdditionalProperties};if(J.target==="openApi3")return Q;if($.keyType?._def.typeName===D.ZodString&&$.keyType._def.checks?.length){let{type:W,...Y}=D0($.keyType._def,J);return{...Q,propertyNames:Y}}else if($.keyType?._def.typeName===D.ZodEnum)return{...Q,propertyNames:{enum:$.keyType._def.values}};else if($.keyType?._def.typeName===D.ZodBranded&&$.keyType._def.type._def.typeName===D.ZodString&&$.keyType._def.type._def.checks?.length){let{type:W,...Y}=V0($.keyType._def,J);return{...Q,propertyNames:Y}}return Q}function L2($,J){if(J.mapStrategy==="record")return A0($,J);let Q=F($.keyType._def,{...J,currentPath:[...J.currentPath,"items","items","0"]})||y(J),W=F($.valueType._def,{...J,currentPath:[...J.currentPath,"items","items","1"]})||y(J);return{type:"array",maxItems:125,items:{type:"array",items:[Q,W],minItems:2,maxItems:2}}}function w2($){let J=$.values,W=Object.keys($.values).filter((B)=>{return typeof J[J[B]]!=="number"}).map((B)=>J[B]),Y=Array.from(new Set(W.map((B)=>typeof B)));return{type:Y.length===1?Y[0]==="string"?"string":"number":["string","number"],enum:W}}function S2($){return $.target==="openAi"?void 0:{not:y({...$,currentPath:[...$.currentPath,"not"]})}}function E2($){return $.target==="openApi3"?{enum:["null"],nullable:!0}:{type:"null"}}var t$={ZodString:"string",ZodNumber:"number",ZodBigInt:"integer",ZodBoolean:"boolean",ZodNull:"null"};function P2($,J){if(J.target==="openApi3")return v2($,J);let Q=$.options instanceof Map?Array.from($.options.values()):$.options;if(Q.every((W)=>(W._def.typeName in t$)&&(!W._def.checks||!W._def.checks.length))){let W=Q.reduce((Y,B)=>{let H=t$[B._def.typeName];return H&&!Y.includes(H)?[...Y,H]:Y},[]);return{type:W.length>1?W:W[0]}}else if(Q.every((W)=>W._def.typeName==="ZodLiteral"&&!W.description)){let W=Q.reduce((Y,B)=>{let H=typeof B._def.value;switch(H){case"string":case"number":case"boolean":return[...Y,H];case"bigint":return[...Y,"integer"];case"object":if(B._def.value===null)return[...Y,"null"];case"symbol":case"undefined":case"function":default:return Y}},[]);if(W.length===Q.length){let Y=W.filter((B,H,X)=>X.indexOf(B)===H);return{type:Y.length>1?Y:Y[0],enum:Q.reduce((B,H)=>{return B.includes(H._def.value)?B:[...B,H._def.value]},[])}}}else if(Q.every((W)=>W._def.typeName==="ZodEnum"))return{type:"string",enum:Q.reduce((W,Y)=>[...W,...Y._def.values.filter((B)=>!W.includes(B))],[])};return v2($,J)}var v2=($,J)=>{let Q=($.options instanceof Map?Array.from($.options.values()):$.options).map((W,Y)=>F(W._def,{...J,currentPath:[...J.currentPath,"anyOf",`${Y}`]})).filter((W)=>!!W&&(!J.strictUnions||typeof W==="object"&&Object.keys(W).length>0));return Q.length?{anyOf:Q}:void 0};function f2($,J){if(["ZodString","ZodNumber","ZodBigInt","ZodBoolean","ZodNull"].includes($.innerType._def.typeName)&&(!$.innerType._def.checks||!$.innerType._def.checks.length)){if(J.target==="openApi3")return{type:t$[$.innerType._def.typeName],nullable:!0};return{type:[t$[$.innerType._def.typeName],"null"]}}if(J.target==="openApi3"){let W=F($.innerType._def,{...J,currentPath:[...J.currentPath]});if(W&&"$ref"in W)return{allOf:[W],nullable:!0};return W&&{...W,nullable:!0}}let Q=F($.innerType._def,{...J,currentPath:[...J.currentPath,"anyOf","0"]});return Q&&{anyOf:[Q,{type:"null"}]}}function C2($,J){let Q={type:"number"};if(!$.checks)return Q;for(let W of $.checks)switch(W.kind){case"int":Q.type="integer",$1(Q,"type",W.message,J);break;case"min":if(J.target==="jsonSchema7")if(W.inclusive)f(Q,"minimum",W.value,W.message,J);else f(Q,"exclusiveMinimum",W.value,W.message,J);else{if(!W.inclusive)Q.exclusiveMinimum=!0;f(Q,"minimum",W.value,W.message,J)}break;case"max":if(J.target==="jsonSchema7")if(W.inclusive)f(Q,"maximum",W.value,W.message,J);else f(Q,"exclusiveMaximum",W.value,W.message,J);else{if(!W.inclusive)Q.exclusiveMaximum=!0;f(Q,"maximum",W.value,W.message,J)}break;case"multipleOf":f(Q,"multipleOf",W.value,W.message,J);break}return Q}function k2($,J){let Q=J.target==="openAi",W={type:"object",properties:{}},Y=[],B=$.shape();for(let X in B){let q=B[X];if(q===void 0||q._def===void 0)continue;let _=K8(q);if(_&&Q){if(q._def.typeName==="ZodOptional")q=q._def.innerType;if(!q.isNullable())q=q.nullable();_=!1}let b=F(q._def,{...J,currentPath:[...J.currentPath,"properties",X],propertyPath:[...J.currentPath,"properties",X]});if(b===void 0)continue;if(W.properties[X]=b,!_)Y.push(X)}if(Y.length)W.required=Y;let H=z8($,J);if(H!==void 0)W.additionalProperties=H;return W}function z8($,J){if($.catchall._def.typeName!=="ZodNever")return F($.catchall._def,{...J,currentPath:[...J.currentPath,"additionalProperties"]});switch($.unknownKeys){case"passthrough":return J.allowedAdditionalProperties;case"strict":return J.rejectedAdditionalProperties;case"strip":return J.removeAdditionalStrategy==="strict"?J.allowedAdditionalProperties:J.rejectedAdditionalProperties}}function K8($){try{return $.isOptional()}catch{return!0}}var I2=($,J)=>{if(J.currentPath.toString()===J.propertyPath?.toString())return F($.innerType._def,J);let Q=F($.innerType._def,{...J,currentPath:[...J.currentPath,"anyOf","1"]});return Q?{anyOf:[{not:y(J)},Q]}:y(J)};var h2=($,J)=>{if(J.pipeStrategy==="input")return F($.in._def,J);else if(J.pipeStrategy==="output")return F($.out._def,J);let Q=F($.in._def,{...J,currentPath:[...J.currentPath,"allOf","0"]}),W=F($.out._def,{...J,currentPath:[...J.currentPath,"allOf",Q?"1":"0"]});return{allOf:[Q,W].filter((Y)=>Y!==void 0)}};function y2($,J){return F($.type._def,J)}function g2($,J){let W={type:"array",uniqueItems:!0,items:F($.valueType._def,{...J,currentPath:[...J.currentPath,"items"]})};if($.minSize)f(W,"minItems",$.minSize.value,$.minSize.message,J);if($.maxSize)f(W,"maxItems",$.maxSize.value,$.maxSize.message,J);return W}function Z2($,J){if($.rest)return{type:"array",minItems:$.items.length,items:$.items.map((Q,W)=>F(Q._def,{...J,currentPath:[...J.currentPath,"items",`${W}`]})).reduce((Q,W)=>W===void 0?Q:[...Q,W],[]),additionalItems:F($.rest._def,{...J,currentPath:[...J.currentPath,"additionalItems"]})};else return{type:"array",minItems:$.items.length,maxItems:$.items.length,items:$.items.map((Q,W)=>F(Q._def,{...J,currentPath:[...J.currentPath,"items",`${W}`]})).reduce((Q,W)=>W===void 0?Q:[...Q,W],[])}}function T2($){return{not:y($)}}function x2($){return y($)}var m2=($,J)=>{return F($.innerType._def,J)};var l2=($,J,Q)=>{switch(J){case D.ZodString:return D0($,Q);case D.ZodNumber:return C2($,Q);case D.ZodObject:return k2($,Q);case D.ZodBigInt:return A2($,Q);case D.ZodBoolean:return z2();case D.ZodDate:return J1($,Q);case D.ZodUndefined:return T2(Q);case D.ZodNull:return E2(Q);case D.ZodArray:return D2($,Q);case D.ZodUnion:case D.ZodDiscriminatedUnion:return P2($,Q);case D.ZodIntersection:return R2($,Q);case D.ZodTuple:return Z2($,Q);case D.ZodRecord:return A0($,Q);case D.ZodLiteral:return O2($,Q);case D.ZodEnum:return N2($);case D.ZodNativeEnum:return w2($);case D.ZodNullable:return f2($,Q);case D.ZodOptional:return I2($,Q);case D.ZodMap:return L2($,Q);case D.ZodSet:return g2($,Q);case D.ZodLazy:return()=>$.getter()._def;case D.ZodPromise:return y2($,Q);case D.ZodNaN:case D.ZodNever:return S2(Q);case D.ZodEffects:return j2($,Q);case D.ZodAny:return y(Q);case D.ZodUnknown:return x2(Q);case D.ZodDefault:return b2($,Q);case D.ZodBranded:return V0($,Q);case D.ZodReadonly:return m2($,Q);case D.ZodCatch:return K2($,Q);case D.ZodPipeline:return h2($,Q);case D.ZodFunction:case D.ZodVoid:case D.ZodSymbol:return;default:return((W)=>{return})(J)}};function F($,J,Q=!1){let W=J.seen.get($);if(J.override){let X=J.override?.($,J,W,Q);if(X!==_2)return X}if(W&&!Q){let X=b8(W,J);if(X!==void 0)return X}let Y={def:$,path:J.currentPath,jsonSchema:void 0};J.seen.set($,Y);let B=l2($,$.typeName,J),H=typeof B==="function"?F(B(),J):B;if(H)j8($,J,H);if(J.postProcess){let X=J.postProcess(H,$,J);return Y.jsonSchema=H,X}return Y.jsonSchema=H,H}var b8=($,J)=>{switch(J.$refStrategy){case"root":return{$ref:$.path.join("/")};case"relative":return{$ref:U0(J.currentPath,$.path)};case"none":case"seen":{if($.path.length<J.currentPath.length&&$.path.every((Q,W)=>J.currentPath[W]===Q))return console.warn(`Recursive reference detected at ${J.currentPath.join("/")}! Defaulting to any`),y(J);return J.$refStrategy==="seen"?y(J):void 0}}},j8=($,J,Q)=>{if($.description){if(Q.description=$.description,J.markdownDescription)Q.markdownDescription=$.description}return Q};var Y1=($,J)=>{let Q=V2(J),W=typeof J==="object"&&J.definitions?Object.entries(J.definitions).reduce((q,[_,b])=>({...q,[_]:F(b._def,{...Q,currentPath:[...Q.basePath,Q.definitionPath,_]},!0)??y(Q)}),{}):void 0,Y=typeof J==="string"?J:J?.nameStrategy==="title"?void 0:J?.name,B=F($._def,Y===void 0?Q:{...Q,currentPath:[...Q.basePath,Q.definitionPath,Y]},!1)??y(Q),H=typeof J==="object"&&J.name!==void 0&&J.nameStrategy==="title"?J.name:void 0;if(H!==void 0)B.title=H;if(Q.flags.hasReferencedOpenAiAnyType){if(!W)W={};if(!W[Q.openAiAnyTypeName])W[Q.openAiAnyTypeName]={type:["string","number","integer","boolean","array","null"],items:{$ref:Q.$refStrategy==="relative"?"1":[...Q.basePath,Q.definitionPath,Q.openAiAnyTypeName].join("/")}}}let X=Y===void 0?W?{...B,[Q.definitionPath]:W}:B:{$ref:[...Q.$refStrategy==="relative"?[]:Q.basePath,Q.definitionPath,Y].join("/"),[Q.definitionPath]:{...W,[Y]:B}};if(Q.target==="jsonSchema7")X.$schema="http://json-schema.org/draft-07/schema#";else if(Q.target==="jsonSchema2019-09"||Q.target==="openAi")X.$schema="https://json-schema.org/draft/2019-09/schema#";if(Q.target==="openAi"&&(("anyOf"in X)||("oneOf"in X)||("allOf"in X)||("type"in X)&&Array.isArray(X.type)))console.warn("Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.");return X};var N8=[c0,r0,n0,i0,d0,p0,o0,t0,e0];function R8($){let J=$;if(!J)return{};let Q=J.shape?J:J._def?.schema??J;try{let W=Y1(Q,{target:"jsonSchema7",$refStrategy:"none",effectStrategy:"input"}),{$schema:Y,...B}=W;return B}catch{return{}}}function u2($,J={}){let Q=j1($,J);return N8.map((W)=>{let Y=W(Q);return{name:Y.name,description:Y.description,input:R8(Y.parameters),options:{codemode:!1},execute:async(B,H)=>{let X={session_id:H?.sessionID??J.sessionId??"unknown",workdir:H?.directory};try{let q=await Y.execute(B??{},X),_=typeof q.output==="string"?q.output:JSON.stringify(q.output??"");return{content:q.success?_:`ERROR: ${q.error??"unknown error"}`,metadata:{tool:Y.name,ok:q.success}}}catch(q){return{content:`ERROR: ${q instanceof Error?q.message:String(q)}`,metadata:{tool:Y.name,ok:!1}}}}}})}function c2($,J){let Q=$?.dispose;if(typeof Q==="function")J.push(Q)}async function n2($,J){let Q=J.enabled!==!1,W={enabled:Q,agentId:null,toolNames:[],errors:[],disposers:[]};if(!Q)return W;let Y=$??{},B=J.agent??l$;if(typeof Y.agent?.transform==="function")try{let X=await Y.agent.transform((q)=>{N0(q)});c2(X,W.disposers),W.agentId=B}catch(X){W.errors.push(`roy agent registration failed: ${B1(X)}`)}else W.errors.push("ctx.agent.transform unavailable \u2014 roy agent not registered");let H=[];try{H=u2(J.store,{agent:B,...J.sessionId?{sessionId:J.sessionId}:{}})}catch(X){return W.errors.push(`roy tool construction failed: ${B1(X)}`),W}if(typeof Y.tool?.transform==="function")try{let X=await Y.tool.transform((q)=>{for(let _ of H)q.add(_)});c2(X,W.disposers),W.toolNames=H.map((q)=>q.name)}catch(X){W.errors.push(`roy tool registration failed: ${B1(X)}`)}else W.errors.push("ctx.tool.transform unavailable \u2014 roy task tools not registered");return W}function B1($){return $ instanceof Error?$.message:String($)}import{join as q1}from"path";import{homedir as P8}from"os";import{mkdirSync as f8}from"fs";import{Database as O8}from"bun:sqlite";import{createHash as F8,randomUUID as L8}from"crypto";var w8=`
2538
+ Parameters:
2539
+ - task_id: The ID of the background task to stop (obtained from the delegate_task response)`;function lU(_){let w=Math.floor(_/1000),$=Math.floor(w/60),X=Math.floor($/60);if(X>0)return`${X}h ${$%60}m ${w%60}s`;else if($>0)return`${$}m ${w%60}s`;else return`${w}s`}function UX(_){return{name:"stop_task",description:uU,parameters:HX,execute:async(w,$)=>{let X=Date.now(),J=HX.parse(w),{task_id:Y}=J,W=await _.stopTask(Y);if(W.success){let q=W.task,G=q.startedAt?Date.now()-q.startedAt:Date.now()-q.createdAt;return{success:!0,output:["\u2705 Task stopped successfully","",`\uD83D\uDCCB Task ID: ${Y}`,`\uD83D\uDCDD Description: ${q.description}`,`\uD83D\uDD04 Status: ${q.status} \u2192 stopped`,`\u23F1\uFE0F Elapsed Time: ${lU(G)}`,"",W.message].join(`
2540
+ `),metadata:{execution_time_ms:Date.now()-X,task_id:Y,previous_status:q.status}}}else{let q=W.task,G;if(q)G=["\u26A0\uFE0F Cannot stop task","",`\uD83D\uDCCB Task ID: ${Y}`,`\uD83D\uDCDD Description: ${q.description}`,`\uD83D\uDD04 Current Status: ${q.status}`,"",W.message].join(`
2541
+ `);else G=["\u274C Task not found","",`\uD83D\uDCCB Task ID: ${Y}`,"",W.message].join(`
2542
+ `);return{success:!1,output:G,error:W.message,metadata:{execution_time_ms:Date.now()-X,task_id:Y}}}}}}function zX(_,w,$){let X=w.toUpperCase();if(!_.startsWith(X))return;let J=$.replace(/-/g,"_").toUpperCase(),Y=_.slice(X.length);if(Y.startsWith("_"))Y=Y.slice(1);if(!Y)return;let W=Y.indexOf("_"),q;if(W===-1)q=Y;else{let Q=Y.slice(0,W),H=Y.slice(W+1);if(Q===J)q=H;else q=Y}if(!q)return;let G=q.replace(/_/g,".");return`${$}.${G.toLowerCase()}`}function VX(_,w){return{..._,execute:w}}var cU=()=>{},AX=r(()=>{cU(),B$(),_0()});AX();class M${_status="created";_enabled=!0;env;hookManager;constructor(){this.hookManager=new Y2}getStatus(){return this._status}getConfig(){return{name:this.name,version:this.version,enabled:this._enabled,env:this.env}}isEnvInitialized(){return this._status!=="created"}setStatus(_){this._status=_}getEnv(){return this.env}async init(_){if(_?.env)this.env=_.env;this.setStatus("initializing");try{if(_?.name)Object.defineProperty(this,"name",{value:_.name,writable:!1});if(_?.version)Object.defineProperty(this,"version",{value:_.version,writable:!1})}catch{}if(_?.enabled!==void 0)this._enabled=_.enabled;this.hookManager.setComponentInfo(this.name,this.version),await this.onInit(),this.setStatus("running")}async start(){if(this._started)return;this._started=!0,await this.onStart(),this.setStatus("running")}async stop(){this.setStatus("stopping"),this.hookManager.clear(),await this.onStop(),this.setStatus("stopped")}async onInit(){}async onStart(){}async onStop(){}registerHook(_,w){this.hookManager.register(_,w)}addHook(_,w,$,X){this.hookManager.register(_,VX({name:w,priority:X},$))}removeHook(_,w){return this.hookManager.unregister(_,w)}async executeHooks(_,w,$){await this.hookManager.execute(_,w,$)}getConfigComponent(){return this.env?.getComponent("config")}getRuntimeConfig(_,w){let $=this.getConfigComponent();if($){let X=$.get(_);if(X!==void 0)return X}return w}}a();var dU={"task.storage.type":"sqlite","task.storage.dbPath":void 0},pU={name:"task",sources:[{type:"env",envPrefix:"TASK",priority:20,watch:!1}],keys:[{key:"task.storage.type",sources:["env","file"]},{key:"task.storage.dbPath",sources:["env","file"]}]};_0();var iU=["completed","failed","cancelled","timeout"];a_();a();var r0=n("task:tag");class MX{store;constructor(_){this.store=_}async createTag(_){let w=await this.store.createTag(_);return r0.debug(`[TagService] Created tag: ${w.name} (id=${w.id})`),w}async getTag(_){return this.store.getTag(_)}async getTagByName(_){return this.store.getTagByName(_)}async listTags(_){return this.store.listTags(_)}async searchTags(_){return this.store.searchTags(_)}async deleteTag(_){let w=await this.store.deleteTag(_);if(w)r0.debug(`[TagService] Deleted tag id=${_}`);return w}async addTagsToTask(_,w){await this.store.addTagsToTask(_,w),r0.debug(`[TagService] Added ${w.length} tags to task ${_}`)}async removeTagsFromTask(_,w){await this.store.removeTagsFromTask(_,w),r0.debug(`[TagService] Removed ${w.length} tags from task ${_}`)}async getTagsForTask(_){return this.store.getTagsForTask(_)}async getTaskIdsByTags(_){return this.store.getTaskIdsByTags(_)}async findSimilarTasks(_,w=5){return this.store.findSimilarTasks(_,w)}async searchTasks(_,w=20){return this.store.searchTasks(_,w)}async searchTasksByKeywords(_,w){return(await this.store.searchTasksByKeywords(_,w)).tasks}async findSimilarTasksByKeywords(_,w){return this.store.findSimilarTasksByKeywords(_,w)}async syncTagsToTask(_,w){let $=[];for(let G of w){let Q=await this.store.getTagByName(G);if(!Q)Q=await this.store.createTag(G);$.push(Q.id)}let X=await this.store.getTagsForTask(_),J=new Set(X.map((G)=>G.id)),Y=new Set($),W=$.filter((G)=>!J.has(G)),q=X.filter((G)=>!Y.has(G.id)).map((G)=>G.id);if(q.length>0)await this.store.removeTagsFromTask(_,q);if(W.length>0)await this.store.addTagsToTask(_,W);await this.store.updateTaskTags(_,w),r0.info(`[TagService] Synced tags for task ${_}: ${w.join(", ")}`)}}z_();var J_=n("task"),rU="Deliverable: ";function nU(_){if(!_)return;return`${rU}${_}`}class fw extends M${name="task";version="1.0.0";store;config;toolComponent;backgroundTaskManager;configComponent;tagService;plugins=new Map;getBackgroundTaskManager(){return this.backgroundTaskManager}publishEvent(_,w,$){if(this.env?.pushEnvEvent)this.env.pushEnvEvent({type:_,payload:w,metadata:{source:"task.component",trigger_session_id:$}}),J_.info(`[TaskComponent] Event published: ${_}`)}constructor(){super()}async init(_){await super.init(_);let w=_?.options;if(!w?.configComponent)throw Error("ConfigComponent is required for TaskComponent initialization");this.configComponent=w.configComponent,await this.registerConfig(w),this.setStatus("running"),J_.info("[TaskComponent] Initialized")}async registerConfig(_){let w=this.configComponent;if(!w)return;let{configPath:$,envPrefix:X,config:J}=_,Y=X??"TASK";if(w.registerComponent(pU),$)w.registerSource({type:"file",relativePath:$,optional:!0,watch:!1});w.registerSource({type:"env",envPrefix:Y,priority:20,watch:!1}),await w.load("task");for(let W of Object.keys(process.env)){let q=zX(W,Y,"task");if(!q)continue;let G=process.env[W];if(G!==void 0)await w.set(q,G)}for(let[W,q]of Object.entries(dU))if(w.get(W)===void 0)await w.set(W,q);if(w.get("task.storage.dbPath")===void 0)await w.set("task.storage.dbPath",G1());if(J){let W=this.flattenConfig(J);for(let[q,G]of Object.entries(W))await w.set(q,G)}this.registerConfigWatcher(w),await this.initStore(),this.tagService=new MX(this.store)}async initStore(){let _=this.configComponent;if(!_)return;let w=_.get("task.storage.type")??"sqlite",$=_.get("task.storage.dbPath");if(w==="sqlite")this.store=new Dw($),J_.info(`[TaskComponent] Using SQLite storage: ${$||"default path"}`);else this.store=new Dw,J_.info("[TaskComponent] Using SQLite storage (default)")}flattenConfig(_,w="task"){let $={};for(let[X,J]of Object.entries(_)){let Y=`${w}.${X}`;if(J&&typeof J==="object"&&!Array.isArray(J))Object.assign($,this.flattenConfig(J,Y));else $[Y]=J}return $}registerConfigWatcher(_){if(typeof _.watch!=="function")return;this.configWatcher=_.watch("task.*",(w)=>{this.onConfigChange(w)})}onConfigChange(_){if(J_.info(`[TaskComponent] Config changed: ${_.key}`,{oldValue:_.oldValue,newValue:_.newValue}),_.key==="task.storage.type"||_.key==="task.storage.dbPath")this.initStore()}configWatcher;async start(){if(await super.start(),this.backgroundTaskManager=new e(this.env),this.toolComponent=this.env?.getComponent("tool"),this.toolComponent)await this.registerTools(),this.toolComponent.register(W1(this.backgroundTaskManager),"built-in"),J_.debug("[TaskComponent] Injected BackgroundTaskManager into query_background_process tool (factory pattern)");else J_.warn("[TaskComponent] ToolComponent not found, skipping tool registration")}async stop(){if(this.configWatcher)this.configWatcher(),this.configWatcher=void 0;if(this.toolComponent)try{this.toolComponent.register(W1(null),"built-in"),J_.debug("[TaskComponent] Reset query_background_process tool to no-manager default (cleanup)")}catch(_){J_.warn(`[TaskComponent] Failed to reset query_background_process tool: ${_.message}`)}if(this.backgroundTaskManager)this.backgroundTaskManager.dispose(),this.backgroundTaskManager=void 0;if(this.store)await this.store.close();await super.stop()}async registerTools(){if(!this.toolComponent)return;let _=[V0(this),A0(this),M0(this),f0(this),R0(this),x2(this),m2(this),O0(this),u2(this),F0(this)],w=[L0(this),d2(this),K0(this),p2(this),i2(this)],$=[BX(this),UX(this.backgroundTaskManager)];for(let X of[..._,...w,...$])this.toolComponent.register(X),J_.info(`[TaskComponent] Registered tool: ${X.name}`)}async executeHook(_,w,$={}){let X={component:{name:this.name,version:this.version},data:w,metadata:$,phase:_.includes("before")?"before":"after",hookPoint:_};await j_.execute(_,w,$)}async createTask(_){let w=_.sessionId;if(_.parent_task_id!==void 0&&_.parent_task_id!==null){if(!await this.store.getTask(_.parent_task_id))throw Error(`Parent task #${_.parent_task_id} not found. Please provide a valid parent_task_id. Use task_list(depth=0) to see all root tasks.`)}let $={options:{..._},sessionId:w,tagService:this.tagService};await this.executeHook(w_.BEFORE_CREATE,$);let X=await this.store.createTask($.options);await this.store.createOperation({taskId:X.id,sessionId:w,milestoneType:"create",milestoneTitle:`Task created: ${X.title}`,milestoneDescription:X.description||""});let J={task:X,sessionId:w,tagService:this.tagService};return await this.executeHook(w_.AFTER_CREATE,J),this.publishEvent(Uw.CREATED,{task:X,sessionId:w},w),J_.info(`[TaskComponent] Task created: ${X.id} - ${X.title}`),X}async getTask(_){return this.store.getTask(_)}async getTaskIdBySessionId(_){return this.store.getTaskIdBySessionId(_)}async getTaskWithOperations(_){let w=await this.store.getTask(_);if(!w)return;let $=await this.store.listOperations({taskId:_});return{task:w,operations:$}}async updateTask(_,w){let $={id:_,options:{...w},tagService:this.tagService};await this.executeHook(w_.BEFORE_UPDATE,$);let X=await this.store.updateTask(_,$.options);if(X){let J={task:X,changes:w,tagService:this.tagService};if(await this.executeHook(w_.AFTER_UPDATE,J),this.publishEvent(Uw.UPDATED,{task:X,changes:w,sessionId:""},""),J_.info(`[TaskComponent] Task updated: ${_}`),w.status&&iU.includes(w.status)){let Y=Q1(),W={task:X,changes:w,terminalStatus:w.status,sessionId:Y.sessionId??"",tagService:this.tagService};await this.executeHook(w_.AFTER_COMPLETE,W),J_.info(`[TaskComponent] Task completed (AFTER_COMPLETE fired): ${_} -> ${w.status}`)}}return X}async deleteTask(_){let w={id:_};await this.executeHook(w_.BEFORE_DELETE,w);let $=await this.store.deleteTask(_),X={id:_,deleted:$};if(await this.executeHook(w_.AFTER_DELETE,X),$)this.publishEvent(Uw.DELETED,{taskId:_,sessionId:""},""),J_.info(`[TaskComponent] Task deleted: ${_}`);return $}async listTasks(_){return this.store.listTasks(_)}async searchTasksByKeywords(_,w){return this.store.searchTasksByKeywords(_,w||{})}async getTaskTree(_,w=-1){return this.store.getTaskTree(_,w)}async getChildTasks(_,w){return this.store.getChildTasks(_,w)}async completeTask(_,w,$){let X=await this.store.getTask(_);if(X&&X.type==="cycle")throw Error(`Cannot complete cycle task: #${_} - ${X.title}. Cycle tasks are not meant to be completed.`);let J={status:"completed",progress:100};if($){let W={};if(X?.context)try{let q=JSON.parse(X.context);if(q&&typeof q==="object"&&!Array.isArray(q))W=q}catch{J_.warn(`[TaskComponent] Task #${_} context is not valid JSON, ignoring when merging deliverable`)}W.deliverable_storage_path=$,J.context=JSON.stringify(W)}let Y=await this.updateTask(_,J);if(Y)await this.createOperation({taskId:_,sessionId:w,milestoneType:"completed",milestoneTitle:"Task completed",milestoneDescription:nU($)}),this.publishEvent(Uw.COMPLETED,{task:Y,sessionId:w},w),J_.info(`[TaskComponent] Task completed: ${_}, deliverable=${$||"(none)"}`);return Y}async createOperation(_){let w={options:{..._}};await this.executeHook(w_.OPERATION_BEFORE_CREATE,w);let $=await this.store.createOperation(w.options),X=await this.store.getTask($.taskId),J={operation:$};return await this.executeHook(w_.OPERATION_AFTER_CREATE,J,{task:X,operation:$}),this.publishEvent(Uw.OPERATION_ADDED,{operation:$,taskId:$.taskId},$.sessionId),J_.info(`[TaskComponent] Operation created: ${$.id} for task ${$.taskId}`),$}async getOperation(_){return this.store.getOperation(_)}async updateOperation(_,w){return this.store.updateOperation(_,w)}async deleteOperation(_){return this.store.deleteOperation(_)}async listOperations(_){return this.store.listOperations(_)}getTagService(){return this.tagService}registerHook(_,w){j_.register(_,w),this.plugins.set(this.makePluginKey(_,w.name),w),J_.debug(`[TaskComponent] Registered hook: ${w.name} at ${_}`)}registerHooks(_){for(let{hookPoint:w,hook:$}of _)this.registerHook(w,$)}unregisterHook(_,w){let $=j_.unregister(_,w);if($)this.plugins.delete(this.makePluginKey(_,w)),J_.info(`[TaskComponent] Unregistered hook: ${w} from ${_}`);return $}listHooks(){return Array.from(this.plugins.values())}makePluginKey(_,w){return`${_}::${w}`}countHooks(_){return j_.count(_)}}m([u("task.component.executeHook",{recordParams:!0})],fw.prototype,"executeHook",null);m([u("task.component.createTask",{recordParams:!0,recordResult:!0,log:!0})],fw.prototype,"createTask",null);m([u("task.component.updateTask",{recordParams:!0,recordResult:!0,log:!0})],fw.prototype,"updateTask",null);m([u("task.component.completeTask",{recordParams:!0,recordResult:!0,log:!0})],fw.prototype,"completeTask",null);m([u("task.component.createOperation",{recordParams:!0,recordResult:!0,log:!0})],fw.prototype,"createOperation",null);var R$=M.enum(["todo","active","completed","paused","cancelled","archived"]),O$=M.enum(["low","medium","high"]),F$=M.enum(["normal","cycle","longterm"]),f$=M.enum(["create","progress","milestone","problem","solution","decision","review","completed","workflow_extracted"]),aU=M.object({storage:M.object({type:M.enum(["memory","sqlite"]).default("sqlite"),dbPath:M.string().optional()}).default({})}).default({});var oU="Deliverable: ";function sU(_){if(!_)return;return`${oU}${_}`}var q2=1e6;class L${port;options;constructor(_,w={}){this.port=_,this.options=w}get defaultSessionId(){return this.options.sessionId??"unknown"}async resolve(_){let w=tU(_);if(w!==void 0){if(typeof this.port.getTaskByNum==="function")return await this.port.getTaskByNum(w);return(await this.scanAllTasks()).find(($)=>$.id===w)??null}return await this.port.getTask(String(_))}toTask(_){let{nativeId:w,...$}=_;return $}toOperation(_){let{nativeId:w,...$}=_;return $}async scanAllTasks(){return(await this.port.listTasks({limit:q2,offset:0,includeArchived:!0})).tasks}async createTask(_){let w=_.sessionId??this.defaultSessionId,$;if(_.parent_task_id!==void 0&&_.parent_task_id!==null){let J=await this.resolve(_.parent_task_id);if(!J)throw Error(`Parent task #${_.parent_task_id} not found.`);$=J.id}let X=await this.port.createTask({title:_.title,description:_.description,priority:_.priority,type:_.type,goals_and_expected_deliverables:_.goals_and_expected_deliverables,...$!==void 0?{parent_task_id:$}:{},due_date:_.due_date,tags:_.tags,project_path:_.project_path,context:_.context,sessionId:w});return await this.createOperation({taskId:X.id,sessionId:w,milestoneType:"create",milestoneTitle:`Task created: ${X.title}`,milestoneDescription:X.description??""}),this.toTask(X)}async getTask(_){let w=await this.resolve(_);return w?this.toTask(w):null}async getTaskWithOperations(_){let w=await this.getTask(_);if(!w)return null;let $=await this.listOperations({taskId:w.id,limit:q2,offset:0});return{...w,operations:$}}async listTasks(_={}){let w=_.limit??20,$=_.offset??0,X=(await this.scanAllTasks()).map((J)=>this.toTask(J));return X=this.applyFilters(X,_),{tasks:X.slice($,$+w),total:X.length}}async updateTask(_,w){let $=await this.resolve(_);if(!$)return null;let X;if(w.parent_task_id!==void 0)if(w.parent_task_id===null)X=null;else{let Y=await this.resolve(w.parent_task_id);if(!Y)throw Error(`Parent task #${w.parent_task_id} not found.`);X=Y.id}let J=await this.port.updateTask($.nativeId,{title:w.title,description:w.description,status:w.status,priority:w.priority,type:w.type,progress:w.progress,current_status:w.current_status,goals_and_expected_deliverables:w.goals_and_expected_deliverables,due_date:w.due_date,tags:w.tags,project_path:w.project_path,context:w.context,...X!==void 0?{parent_task_id:X}:{}});return J?this.toTask(J):null}async deleteTask(_){let w=await this.resolve(_);if(!w)return!1;return await this.port.deleteTask(w.nativeId)}async completeTask(_,w,$){let X=await this.resolve(_);if(!X)return null;if(X.type==="cycle")throw Error(`Cannot complete cycle task: #${X.id} - ${X.title}. Cycle tasks are not meant to be completed.`);let J={status:"completed",progress:100};if($)J.context=_z(X.context,$);let Y=await this.port.updateTask(X.nativeId,J);if(!Y)return null;let W=sU($);await this.createOperation({taskId:Y.id,sessionId:w??this.defaultSessionId,milestoneType:"completed",milestoneTitle:`Completed: ${Y.title}`,milestoneDescription:W??"Task completed",...$?{mdPath:$}:{}});let q=await this.resolve(X.nativeId);return this.toTask(q??Y)}async getTaskTree(_,w=-1){let $=await this.resolve(_);if(!$)return[];if(w===0)return[];let X=(await this.scanAllTasks()).map((Q)=>this.toTask(Q)),J=new Map;for(let Q of X){if(Q.parent_task_id===void 0)continue;let H=J.get(Q.parent_task_id)??[];H.push(Q),J.set(Q.parent_task_id,H)}let Y=[],W=new Set([$.id]),q=[$.id],G=0;while(q.length>0){if(w!==-1&&G>=w)break;let Q=[];for(let H of q)for(let B of J.get(H)??[]){if(W.has(B.id))continue;W.add(B.id),Y.push(B),Q.push(B.id)}q=Q,G++}return Y}async searchTasksByKeywords(_,w={}){let $=w.limit??20,X=w.offset??0,J=(await this.scanAllTasks()).map((q)=>this.toTask(q));if(J=this.applyFilters(J,w),w.excludeTaskId!==void 0)J=J.filter((q)=>q.id!==w.excludeTaskId);let Y=_.map((q)=>q.toLowerCase()).filter((q)=>q.length>0),W=Y.length===0?J:J.filter((q)=>{let G=[q.title,q.description,q.goals_and_expected_deliverables,q.current_status,(q.tags??[]).join(" "),q.project_path].join(" ").toLowerCase();return Y.every((Q)=>G.includes(Q))});return{tasks:W.slice(X,X+$),total:W.length}}async createOperation(_){let w=await this.resolve(_.taskId);if(!w)throw Error(`Task not found: ${_.taskId}`);let $=_.milestoneType??_.actionType??"progress",X=_.milestoneTitle??_.actionTitle??"",J=_.milestoneDescription??_.actionDescription??"",Y=await this.port.createOperation({taskId:w.id,taskNativeId:w.nativeId,sessionId:_.sessionId??this.defaultSessionId,milestoneType:$,milestoneTitle:X,milestoneDescription:J,processDescription:_.processDescription??"",..._.mdPath?{mdPath:_.mdPath}:{}});return this.toOperation(Y)}async listOperations(_={}){let w=_.limit??100,$=_.offset??0,X=_.milestoneType??_.actionType;if(_.taskId===void 0)return[];let J=await this.resolve(_.taskId);if(!J)return[];let W=(await this.port.listOperations({taskNativeId:J.nativeId,limit:X?q2:w,offset:X?0:$})).operations.map((q)=>this.toOperation(q));if(X)W=W.filter((q)=>q.milestoneType===X),W=W.slice($,$+w);return W}async getOperation(_){if(typeof this.port.getOperationByNum==="function"){let $=await this.port.getOperationByNum(_);return $?this.toOperation($):null}let w=await this.scanAllTasks();for(let $ of w){let J=(await this.port.listOperations({taskNativeId:$.nativeId,limit:q2})).operations.find((Y)=>Y.id===_);if(J)return this.toOperation(J)}return null}async updateOperation(_,w){let $=await this.getOperation(_);if(!$)return null;if(typeof this.port.updateOperationByNum!=="function")return $;let X=await this.port.updateOperationByNum(_,{sessionId:w.sessionId??$.sessionId,milestoneType:w.milestoneType??w.actionType??$.milestoneType,milestoneTitle:w.milestoneTitle??w.actionTitle??$.milestoneTitle,milestoneDescription:w.milestoneDescription??w.actionDescription??$.milestoneDescription,processDescription:w.processDescription??$.processDescription,...w.mdPath!==void 0?{mdPath:w.mdPath}:{}});return X?this.toOperation(X):null}async deleteOperation(_){if(typeof this.port.deleteOperationByNum!=="function")return!1;return await this.port.deleteOperationByNum(_)}applyFilters(_,w){let $=_;if(w.include_archived!==!0&&w.status!=="archived")$=$.filter((J)=>J.status!=="archived");if(w.status!==void 0)$=$.filter((J)=>J.status===w.status);if(w.priority!==void 0)$=$.filter((J)=>J.priority===w.priority);if(w.type!==void 0)$=$.filter((J)=>J.type===w.type);if(w.parent_task_id!==void 0)$=$.filter((J)=>J.parent_task_id===w.parent_task_id);if(w.depth!==void 0&&w.depth>=0){let J=eU($,w.depth);$=$.filter((Y)=>J.has(Y.id))}return $}}function tU(_){if(typeof _==="number")return Number.isFinite(_)?_:void 0;return/^\d+$/.test(_)?Number(_):void 0}function eU(_,w){if(w<0)return new Set(_.map((W)=>W.id));let $=new Set(_.map((W)=>W.id)),X=new Map;for(let W of _){let q=W.parent_task_id;if(q===void 0||!$.has(q))continue;let G=X.get(q)??[];G.push(W),X.set(q,G)}let J=new Set,Y=_.filter((W)=>W.parent_task_id===void 0||!$.has(W.parent_task_id));for(let W of Y)J.add(W.id);for(let W=1;W<=w;W++){let q=[];for(let G of Y)for(let Q of X.get(G.id)??[]){if(J.has(Q.id))continue;J.add(Q.id),q.push(Q)}if(q.length===0)break;Y=q}return J}function _z(_,w){let $={};if(typeof _==="string"&&_.trim().length>0)try{let X=JSON.parse(_);if(X&&typeof X==="object"&&!Array.isArray(X))$=X}catch{}return $.deliverable_storage_path=w,JSON.stringify($)}var wz=1e6;function $z(_){let w={};if(_.type!==void 0)w.type=_.type;if(_.progress!==void 0)w.progress=_.progress;if(_.current_status!==void 0)w.current_status=_.current_status;if(_.goals_and_expected_deliverables!==void 0)w.goals_and_expected_deliverables=_.goals_and_expected_deliverables;if(_.project_path!==void 0)w.project_path=_.project_path;if(_.context!==void 0)w.context=_.context;if(_.due_date!==void 0)w.due_date=_.due_date;return w}function n0(_,w,$){if(typeof _.num!=="number")throw Error(`store did not expose a numeric handle for task ${_.id}`);let X=_.roy??{};return{id:_.num,nativeId:_.id,title:_.title,description:_.description??"",status:w.toRoyStatus(_.status),priority:w.toRoyPriority(_.priority),type:X.type??"normal",progress:typeof X.progress==="number"?X.progress:_.status==="done"?100:0,current_status:X.current_status??"",goals_and_expected_deliverables:X.goals_and_expected_deliverables??"",...$!==void 0?{parent_task_id:$}:{},createdAt:_.created_at,updatedAt:_.updated_at,...X.due_date?{due_date:X.due_date}:{},tags:w.toRoyTags(_.tags),project_path:X.project_path??"unknown",context:X.context??"{}"}}function a0(_){let w=_.data??{},$=String(w.milestoneType??w.actionType??"progress"),X=String(w.milestoneTitle??w.actionTitle??""),J=String(w.milestoneDescription??w.actionDescription??""),Y=w.taskId??_.task_id,W=typeof Y==="number"?Y:typeof Y==="string"&&/^\d+$/.test(Y)?Number(Y):0;return{id:typeof _.num==="number"?_.num:0,nativeId:_.id,taskId:W,sessionId:String(w.sessionId??_.task_id??"unknown"),milestoneType:$,milestoneTitle:X,milestoneDescription:J,processDescription:String(w.processDescription??""),timestamp:_.created_at,...w.mdPath?{mdPath:String(w.mdPath)}:{},actionType:$,actionTitle:X,actionDescription:J}}function RX(_,w,$={}){let X=$.operationType??"roy.milestone",J=$.agent??"roy",Y=$.scanLimit??wz;async function W(){let Q=await _.listTasks({limit:Y});return new Map(Q.tasks.filter((H)=>typeof H.num==="number").map((H)=>[H.id,H.num]))}async function q(Q){if(typeof _.getTaskByNum==="function")return await _.getTaskByNum(Q);return(await _.listTasks({limit:Y})).tasks.find((B)=>B.num===Q)??null}async function G(Q){let B=[...(await W()).entries()].find(([,D])=>D===Q);if(!B)throw Error(`parent task not found: ${Q}`);return B[0]}return{hidesArchivedByDefault:!1,async createTask(Q){let H=Q.parent_task_id!==void 0?await G(Q.parent_task_id):null,B={type:Q.type??"normal",progress:Q.progress??0,current_status:Q.current_status??"",goals_and_expected_deliverables:Q.goals_and_expected_deliverables??"",project_path:Q.project_path,context:Q.context,...Q.due_date?{due_date:Q.due_date}:{}},D=await _.createTask({title:Q.title,description:Q.description,priority:w.toStorePriority(Q.priority),owner:J,tags:w.toStoreTags(Q.tags),parent_id:H,session_id:Q.sessionId??"unknown",roy:B});return n0(D,w,Q.parent_task_id)},async getTask(Q){let H=await _.getTask(Q);if(!H)return null;let B=await W();return n0(H,w,H.parent_id?B.get(H.parent_id):void 0)},async getTaskByNum(Q){let H=await q(Q);if(!H)return null;let B=await W();return n0(H,w,H.parent_id?B.get(H.parent_id):void 0)},async listTasks(Q){let H=await _.listTasks({limit:Q?.limit??20,offset:Q?.offset??0}),B=await W();return{tasks:H.tasks.map((D)=>n0(D,w,D.parent_id?B.get(D.parent_id):void 0)),total:H.total}},async updateTask(Q,H){let B=$z(H),D=await _.updateTask(Q,{...H.title!==void 0?{title:H.title}:{},...H.description!==void 0?{description:H.description}:{},...H.status!==void 0?{status:w.toStoreStatus(H.status)}:{},...H.priority!==void 0?{priority:w.toStorePriority(H.priority)}:{},...H.tags!==void 0?{tags:w.toStoreTags(H.tags)}:{},...Object.keys(B).length>0?{roy:B}:{}});if(!D)return null;let z;if(H.parent_task_id!==void 0){let U=H.parent_task_id===null?null:await G(H.parent_task_id);if(typeof _.setParentId==="function")await _.setParentId(Q,U);z=H.parent_task_id===null?void 0:H.parent_task_id}let A=await _.getTask(Q)??D;if(z===void 0&&A.parent_id)z=(await W()).get(A.parent_id);return n0(A,w,z)},async deleteTask(Q){return await _.deleteTask(Q)},async createOperation(Q){let H=await _.appendOperation({task_id:Q.taskNativeId??String(Q.taskId),type:X,data:{taskId:Q.taskId,sessionId:Q.sessionId,milestoneType:Q.milestoneType,milestoneTitle:Q.milestoneTitle,milestoneDescription:Q.milestoneDescription,processDescription:Q.processDescription,...Q.mdPath?{mdPath:Q.mdPath}:{}}});return a0(H)},async listOperations(Q){let H=await _.listOperations({...Q?.taskNativeId?{task_id:Q.taskNativeId}:{},type:X,limit:Q?.limit??Y,offset:Q?.offset??0});return{operations:H.operations.map(a0),total:H.total}},async getOperationByNum(Q){if(typeof _.getOperationByNum!=="function")return null;let H=await _.getOperationByNum(Q);return H?a0(H):null},async updateOperationByNum(Q,H){if(typeof _.updateOperation!=="function")return null;if(typeof _.getOperationByNum!=="function")return null;let B=await _.getOperationByNum(Q);if(!B)return null;let D=a0(B),z=await _.updateOperation(Q,{data:{taskId:D.taskId,sessionId:H.sessionId??D.sessionId,milestoneType:H.milestoneType??D.milestoneType,milestoneTitle:H.milestoneTitle??D.milestoneTitle,milestoneDescription:H.milestoneDescription??D.milestoneDescription,processDescription:H.processDescription??D.processDescription,...H.mdPath??D.mdPath?{mdPath:H.mdPath??D.mdPath}:{}}});return z?a0(z):null},async deleteOperationByNum(Q){if(typeof _.deleteOperation!=="function")return!1;return await _.deleteOperation(Q)}}}var Xz="roy.milestone",Jz={todo:"pending",active:"in_progress",completed:"done",cancelled:"cancelled",paused:"blocked",archived:"archived"},Yz={pending:"todo",in_progress:"active",done:"completed",cancelled:"cancelled",blocked:"paused",review:"active",archived:"archived"};function OX(_){return Jz[_]??"pending"}function FX(_){return Yz[_]??"todo"}function fX(_){if(_==="high")return 1;if(_==="low")return 5;return 3}function LX(_){if(_===void 0)return"medium";if(_<=2)return"high";return _===3?"medium":"low"}function KX(_){if(!_||_.length===0)return;return _.join(",")}function NX(_){if(!_)return[];return _.split(",").map((w)=>w.trim()).filter((w)=>w.length>0)}var Wz={toRoyStatus:(_)=>FX(_),toStoreStatus:(_)=>OX(_),toRoyPriority:(_)=>LX(_),toStorePriority:(_)=>fX(_),toRoyTags:(_)=>NX(_),toStoreTags:(_)=>KX(_)};function bX(_,w={}){return new L$(RX(_,Wz,{operationType:Xz,agent:w.agent??"roy"}),{sessionId:w.sessionId})}var $O=R$.options,XO=O$.options,JO=F$.options,YO=f$.options;var EX=Symbol("Let zodToJsonSchema decide on which parser to use");var jX={name:void 0,$refStrategy:"root",basePath:["#"],effectStrategy:"input",pipeStrategy:"all",dateStrategy:"format:date-time",mapStrategy:"entries",removeAdditionalStrategy:"passthrough",allowedAdditionalProperties:!0,rejectedAdditionalProperties:!1,definitionPath:"definitions",target:"jsonSchema7",strictUnions:!1,definitions:{},errorMessages:!1,markdownDescription:!1,patternStrategy:"escape",applyRegexFlags:!1,emailStrategy:"format:email",base64Strategy:"contentEncoding:base64",nameStrategy:"ref",openAiAnyTypeName:"OpenAiAnyType"},SX=(_)=>typeof _==="string"?{...jX,name:_}:{...jX,..._};var PX=(_)=>{let w=SX(_),$=w.name!==void 0?[...w.basePath,w.definitionPath,w.name]:w.basePath;return{...w,flags:{hasReferencedOpenAiAnyType:!1},currentPath:$,propertyPath:void 0,seen:new Map(Object.entries(w.definitions).map(([X,J])=>[J._def,{def:J._def,path:[...w.basePath,w.definitionPath,X],jsonSchema:void 0}]))}};function K$(_,w,$,X){if(!X?.errorMessages)return;if($)_.errorMessage={..._.errorMessage,[w]:$}}function d(_,w,$,X,J){_[w]=$,K$(_,w,X,J)}var G2=(_,w)=>{let $=0;for(;$<_.length&&$<w.length;$++)if(_[$]!==w[$])break;return[(_.length-$).toString(),...w.slice($)].join("/")};function o(_){if(_.target!=="openAi")return{};let w=[..._.basePath,_.definitionPath,_.openAiAnyTypeName];return _.flags.hasReferencedOpenAiAnyType=!0,{$ref:_.$refStrategy==="relative"?G2(w,_.currentPath):w.join("/")}}function ZX(_,w){let $={type:"array"};if(_.type?._def&&_.type?._def?.typeName!==F.ZodAny)$.items=I(_.type._def,{...w,currentPath:[...w.currentPath,"items"]});if(_.minLength)d($,"minItems",_.minLength.value,_.minLength.message,w);if(_.maxLength)d($,"maxItems",_.maxLength.value,_.maxLength.message,w);if(_.exactLength)d($,"minItems",_.exactLength.value,_.exactLength.message,w),d($,"maxItems",_.exactLength.value,_.exactLength.message,w);return $}function CX(_,w){let $={type:"integer",format:"int64"};if(!_.checks)return $;for(let X of _.checks)switch(X.kind){case"min":if(w.target==="jsonSchema7")if(X.inclusive)d($,"minimum",X.value,X.message,w);else d($,"exclusiveMinimum",X.value,X.message,w);else{if(!X.inclusive)$.exclusiveMinimum=!0;d($,"minimum",X.value,X.message,w)}break;case"max":if(w.target==="jsonSchema7")if(X.inclusive)d($,"maximum",X.value,X.message,w);else d($,"exclusiveMaximum",X.value,X.message,w);else{if(!X.inclusive)$.exclusiveMaximum=!0;d($,"maximum",X.value,X.message,w)}break;case"multipleOf":d($,"multipleOf",X.value,X.message,w);break}return $}function TX(){return{type:"boolean"}}function Q2(_,w){return I(_.type._def,w)}var IX=(_,w)=>{return I(_.innerType._def,w)};function N$(_,w,$){let X=$??w.dateStrategy;if(Array.isArray(X))return{anyOf:X.map((J,Y)=>N$(_,w,J))};switch(X){case"string":case"format:date-time":return{type:"string",format:"date-time"};case"format:date":return{type:"string",format:"date"};case"integer":return qz(_,w)}}var qz=(_,w)=>{let $={type:"integer",format:"unix-time"};if(w.target==="openApi3")return $;for(let X of _.checks)switch(X.kind){case"min":d($,"minimum",X.value,X.message,w);break;case"max":d($,"maximum",X.value,X.message,w);break}return $};function gX(_,w){return{...I(_.innerType._def,w),default:_.defaultValue()}}function kX(_,w){return w.effectStrategy==="input"?I(_.schema._def,w):o(w)}function hX(_){return{type:"string",enum:Array.from(_.values)}}var Gz=(_)=>{if("type"in _&&_.type==="string")return!1;return"allOf"in _};function yX(_,w){let $=[I(_.left._def,{...w,currentPath:[...w.currentPath,"allOf","0"]}),I(_.right._def,{...w,currentPath:[...w.currentPath,"allOf","1"]})].filter((Y)=>!!Y),X=w.target==="jsonSchema2019-09"?{unevaluatedProperties:!1}:void 0,J=[];return $.forEach((Y)=>{if(Gz(Y)){if(J.push(...Y.allOf),Y.unevaluatedProperties===void 0)X=void 0}else{let W=Y;if("additionalProperties"in Y&&Y.additionalProperties===!1){let{additionalProperties:q,...G}=Y;W=G}else X=void 0;J.push(W)}}),J.length?{allOf:J,...X}:void 0}function vX(_,w){let $=typeof _.value;if($!=="bigint"&&$!=="number"&&$!=="boolean"&&$!=="string")return{type:Array.isArray(_.value)?"array":"object"};if(w.target==="openApi3")return{type:$==="bigint"?"integer":$,enum:[_.value]};return{type:$==="bigint"?"integer":$,const:_.value}}var b$=void 0,E_={cuid:/^[cC][^\s-]{8,}$/,cuid2:/^[0-9a-z]+$/,ulid:/^[0-9A-HJKMNP-TV-Z]{26}$/,email:/^(?!\.)(?!.*\.\.)([a-zA-Z0-9_'+\-\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\-]*\.)+[a-zA-Z]{2,}$/,emoji:()=>{if(b$===void 0)b$=RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$","u");return b$},uuid:/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/,ipv4:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,ipv4Cidr:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,ipv6:/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,ipv6Cidr:/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,base64:/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,base64url:/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,nanoid:/^[a-zA-Z0-9_-]{21}$/,jwt:/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/};function H2(_,w){let $={type:"string"};if(_.checks)for(let X of _.checks)switch(X.kind){case"min":d($,"minLength",typeof $.minLength==="number"?Math.max($.minLength,X.value):X.value,X.message,w);break;case"max":d($,"maxLength",typeof $.maxLength==="number"?Math.min($.maxLength,X.value):X.value,X.message,w);break;case"email":switch(w.emailStrategy){case"format:email":S_($,"email",X.message,w);break;case"format:idn-email":S_($,"idn-email",X.message,w);break;case"pattern:zod":G_($,E_.email,X.message,w);break}break;case"url":S_($,"uri",X.message,w);break;case"uuid":S_($,"uuid",X.message,w);break;case"regex":G_($,X.regex,X.message,w);break;case"cuid":G_($,E_.cuid,X.message,w);break;case"cuid2":G_($,E_.cuid2,X.message,w);break;case"startsWith":G_($,RegExp(`^${j$(X.value,w)}`),X.message,w);break;case"endsWith":G_($,RegExp(`${j$(X.value,w)}$`),X.message,w);break;case"datetime":S_($,"date-time",X.message,w);break;case"date":S_($,"date",X.message,w);break;case"time":S_($,"time",X.message,w);break;case"duration":S_($,"duration",X.message,w);break;case"length":d($,"minLength",typeof $.minLength==="number"?Math.max($.minLength,X.value):X.value,X.message,w),d($,"maxLength",typeof $.maxLength==="number"?Math.min($.maxLength,X.value):X.value,X.message,w);break;case"includes":{G_($,RegExp(j$(X.value,w)),X.message,w);break}case"ip":{if(X.version!=="v6")S_($,"ipv4",X.message,w);if(X.version!=="v4")S_($,"ipv6",X.message,w);break}case"base64url":G_($,E_.base64url,X.message,w);break;case"jwt":G_($,E_.jwt,X.message,w);break;case"cidr":{if(X.version!=="v6")G_($,E_.ipv4Cidr,X.message,w);if(X.version!=="v4")G_($,E_.ipv6Cidr,X.message,w);break}case"emoji":G_($,E_.emoji(),X.message,w);break;case"ulid":{G_($,E_.ulid,X.message,w);break}case"base64":{switch(w.base64Strategy){case"format:binary":{S_($,"binary",X.message,w);break}case"contentEncoding:base64":{d($,"contentEncoding","base64",X.message,w);break}case"pattern:zod":{G_($,E_.base64,X.message,w);break}}break}case"nanoid":G_($,E_.nanoid,X.message,w);case"toLowerCase":case"toUpperCase":case"trim":break;default:((J)=>{})(X)}return $}function j$(_,w){return w.patternStrategy==="escape"?Hz(_):_}var Qz=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");function Hz(_){let w="";for(let $=0;$<_.length;$++){if(!Qz.has(_[$]))w+="\\";w+=_[$]}return w}function S_(_,w,$,X){if(_.format||_.anyOf?.some((J)=>J.format)){if(!_.anyOf)_.anyOf=[];if(_.format){if(_.anyOf.push({format:_.format,..._.errorMessage&&X.errorMessages&&{errorMessage:{format:_.errorMessage.format}}}),delete _.format,_.errorMessage){if(delete _.errorMessage.format,Object.keys(_.errorMessage).length===0)delete _.errorMessage}}_.anyOf.push({format:w,...$&&X.errorMessages&&{errorMessage:{format:$}}})}else d(_,"format",w,$,X)}function G_(_,w,$,X){if(_.pattern||_.allOf?.some((J)=>J.pattern)){if(!_.allOf)_.allOf=[];if(_.pattern){if(_.allOf.push({pattern:_.pattern,..._.errorMessage&&X.errorMessages&&{errorMessage:{pattern:_.errorMessage.pattern}}}),delete _.pattern,_.errorMessage){if(delete _.errorMessage.pattern,Object.keys(_.errorMessage).length===0)delete _.errorMessage}}_.allOf.push({pattern:xX(w,X),...$&&X.errorMessages&&{errorMessage:{pattern:$}}})}else d(_,"pattern",xX(w,X),$,X)}function xX(_,w){if(!w.applyRegexFlags||!_.flags)return _.source;let $={i:_.flags.includes("i"),m:_.flags.includes("m"),s:_.flags.includes("s")},X=$.i?_.source.toLowerCase():_.source,J="",Y=!1,W=!1,q=!1;for(let G=0;G<X.length;G++){if(Y){J+=X[G],Y=!1;continue}if($.i){if(W){if(X[G].match(/[a-z]/)){if(q)J+=X[G],J+=`${X[G-2]}-${X[G]}`.toUpperCase(),q=!1;else if(X[G+1]==="-"&&X[G+2]?.match(/[a-z]/))J+=X[G],q=!0;else J+=`${X[G]}${X[G].toUpperCase()}`;continue}}else if(X[G].match(/[a-z]/)){J+=`[${X[G]}${X[G].toUpperCase()}]`;continue}}if($.m){if(X[G]==="^"){J+=`(^|(?<=[\r
2543
+ ]))`;continue}else if(X[G]==="$"){J+=`($|(?=[\r
2544
+ ]))`;continue}}if($.s&&X[G]==="."){J+=W?`${X[G]}\r
2545
+ `:`[${X[G]}\r
2546
+ ]`;continue}if(J+=X[G],X[G]==="\\")Y=!0;else if(W&&X[G]==="]")W=!1;else if(!W&&X[G]==="[")W=!0}try{new RegExp(J)}catch{return console.warn(`Could not convert regex pattern at ${w.currentPath.join("/")} to a flag-independent form! Falling back to the flag-ignorant source`),_.source}return J}function D2(_,w){if(w.target==="openAi")console.warn("Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.");if(w.target==="openApi3"&&_.keyType?._def.typeName===F.ZodEnum)return{type:"object",required:_.keyType._def.values,properties:_.keyType._def.values.reduce((X,J)=>({...X,[J]:I(_.valueType._def,{...w,currentPath:[...w.currentPath,"properties",J]})??o(w)}),{}),additionalProperties:w.rejectedAdditionalProperties};let $={type:"object",additionalProperties:I(_.valueType._def,{...w,currentPath:[...w.currentPath,"additionalProperties"]})??w.allowedAdditionalProperties};if(w.target==="openApi3")return $;if(_.keyType?._def.typeName===F.ZodString&&_.keyType._def.checks?.length){let{type:X,...J}=H2(_.keyType._def,w);return{...$,propertyNames:J}}else if(_.keyType?._def.typeName===F.ZodEnum)return{...$,propertyNames:{enum:_.keyType._def.values}};else if(_.keyType?._def.typeName===F.ZodBranded&&_.keyType._def.type._def.typeName===F.ZodString&&_.keyType._def.type._def.checks?.length){let{type:X,...J}=Q2(_.keyType._def,w);return{...$,propertyNames:J}}return $}function mX(_,w){if(w.mapStrategy==="record")return D2(_,w);let $=I(_.keyType._def,{...w,currentPath:[...w.currentPath,"items","items","0"]})||o(w),X=I(_.valueType._def,{...w,currentPath:[...w.currentPath,"items","items","1"]})||o(w);return{type:"array",maxItems:125,items:{type:"array",items:[$,X],minItems:2,maxItems:2}}}function uX(_){let w=_.values,X=Object.keys(_.values).filter((Y)=>{return typeof w[w[Y]]!=="number"}).map((Y)=>w[Y]),J=Array.from(new Set(X.map((Y)=>typeof Y)));return{type:J.length===1?J[0]==="string"?"string":"number":["string","number"],enum:X}}function lX(_){return _.target==="openAi"?void 0:{not:o({..._,currentPath:[..._.currentPath,"not"]})}}function cX(_){return _.target==="openApi3"?{enum:["null"],nullable:!0}:{type:"null"}}var o0={ZodString:"string",ZodNumber:"number",ZodBigInt:"integer",ZodBoolean:"boolean",ZodNull:"null"};function pX(_,w){if(w.target==="openApi3")return dX(_,w);let $=_.options instanceof Map?Array.from(_.options.values()):_.options;if($.every((X)=>(X._def.typeName in o0)&&(!X._def.checks||!X._def.checks.length))){let X=$.reduce((J,Y)=>{let W=o0[Y._def.typeName];return W&&!J.includes(W)?[...J,W]:J},[]);return{type:X.length>1?X:X[0]}}else if($.every((X)=>X._def.typeName==="ZodLiteral"&&!X.description)){let X=$.reduce((J,Y)=>{let W=typeof Y._def.value;switch(W){case"string":case"number":case"boolean":return[...J,W];case"bigint":return[...J,"integer"];case"object":if(Y._def.value===null)return[...J,"null"];case"symbol":case"undefined":case"function":default:return J}},[]);if(X.length===$.length){let J=X.filter((Y,W,q)=>q.indexOf(Y)===W);return{type:J.length>1?J:J[0],enum:$.reduce((Y,W)=>{return Y.includes(W._def.value)?Y:[...Y,W._def.value]},[])}}}else if($.every((X)=>X._def.typeName==="ZodEnum"))return{type:"string",enum:$.reduce((X,J)=>[...X,...J._def.values.filter((Y)=>!X.includes(Y))],[])};return dX(_,w)}var dX=(_,w)=>{let $=(_.options instanceof Map?Array.from(_.options.values()):_.options).map((X,J)=>I(X._def,{...w,currentPath:[...w.currentPath,"anyOf",`${J}`]})).filter((X)=>!!X&&(!w.strictUnions||typeof X==="object"&&Object.keys(X).length>0));return $.length?{anyOf:$}:void 0};function iX(_,w){if(["ZodString","ZodNumber","ZodBigInt","ZodBoolean","ZodNull"].includes(_.innerType._def.typeName)&&(!_.innerType._def.checks||!_.innerType._def.checks.length)){if(w.target==="openApi3")return{type:o0[_.innerType._def.typeName],nullable:!0};return{type:[o0[_.innerType._def.typeName],"null"]}}if(w.target==="openApi3"){let X=I(_.innerType._def,{...w,currentPath:[...w.currentPath]});if(X&&"$ref"in X)return{allOf:[X],nullable:!0};return X&&{...X,nullable:!0}}let $=I(_.innerType._def,{...w,currentPath:[...w.currentPath,"anyOf","0"]});return $&&{anyOf:[$,{type:"null"}]}}function rX(_,w){let $={type:"number"};if(!_.checks)return $;for(let X of _.checks)switch(X.kind){case"int":$.type="integer",K$($,"type",X.message,w);break;case"min":if(w.target==="jsonSchema7")if(X.inclusive)d($,"minimum",X.value,X.message,w);else d($,"exclusiveMinimum",X.value,X.message,w);else{if(!X.inclusive)$.exclusiveMinimum=!0;d($,"minimum",X.value,X.message,w)}break;case"max":if(w.target==="jsonSchema7")if(X.inclusive)d($,"maximum",X.value,X.message,w);else d($,"exclusiveMaximum",X.value,X.message,w);else{if(!X.inclusive)$.exclusiveMaximum=!0;d($,"maximum",X.value,X.message,w)}break;case"multipleOf":d($,"multipleOf",X.value,X.message,w);break}return $}function nX(_,w){let $=w.target==="openAi",X={type:"object",properties:{}},J=[],Y=_.shape();for(let q in Y){let G=Y[q];if(G===void 0||G._def===void 0)continue;let Q=Bz(G);if(Q&&$){if(G._def.typeName==="ZodOptional")G=G._def.innerType;if(!G.isNullable())G=G.nullable();Q=!1}let H=I(G._def,{...w,currentPath:[...w.currentPath,"properties",q],propertyPath:[...w.currentPath,"properties",q]});if(H===void 0)continue;if(X.properties[q]=H,!Q)J.push(q)}if(J.length)X.required=J;let W=Dz(_,w);if(W!==void 0)X.additionalProperties=W;return X}function Dz(_,w){if(_.catchall._def.typeName!=="ZodNever")return I(_.catchall._def,{...w,currentPath:[...w.currentPath,"additionalProperties"]});switch(_.unknownKeys){case"passthrough":return w.allowedAdditionalProperties;case"strict":return w.rejectedAdditionalProperties;case"strip":return w.removeAdditionalStrategy==="strict"?w.allowedAdditionalProperties:w.rejectedAdditionalProperties}}function Bz(_){try{return _.isOptional()}catch{return!0}}var aX=(_,w)=>{if(w.currentPath.toString()===w.propertyPath?.toString())return I(_.innerType._def,w);let $=I(_.innerType._def,{...w,currentPath:[...w.currentPath,"anyOf","1"]});return $?{anyOf:[{not:o(w)},$]}:o(w)};var oX=(_,w)=>{if(w.pipeStrategy==="input")return I(_.in._def,w);else if(w.pipeStrategy==="output")return I(_.out._def,w);let $=I(_.in._def,{...w,currentPath:[...w.currentPath,"allOf","0"]}),X=I(_.out._def,{...w,currentPath:[...w.currentPath,"allOf",$?"1":"0"]});return{allOf:[$,X].filter((J)=>J!==void 0)}};function sX(_,w){return I(_.type._def,w)}function tX(_,w){let X={type:"array",uniqueItems:!0,items:I(_.valueType._def,{...w,currentPath:[...w.currentPath,"items"]})};if(_.minSize)d(X,"minItems",_.minSize.value,_.minSize.message,w);if(_.maxSize)d(X,"maxItems",_.maxSize.value,_.maxSize.message,w);return X}function eX(_,w){if(_.rest)return{type:"array",minItems:_.items.length,items:_.items.map(($,X)=>I($._def,{...w,currentPath:[...w.currentPath,"items",`${X}`]})).reduce(($,X)=>X===void 0?$:[...$,X],[]),additionalItems:I(_.rest._def,{...w,currentPath:[...w.currentPath,"additionalItems"]})};else return{type:"array",minItems:_.items.length,maxItems:_.items.length,items:_.items.map(($,X)=>I($._def,{...w,currentPath:[...w.currentPath,"items",`${X}`]})).reduce(($,X)=>X===void 0?$:[...$,X],[])}}function _9(_){return{not:o(_)}}function w9(_){return o(_)}var $9=(_,w)=>{return I(_.innerType._def,w)};var X9=(_,w,$)=>{switch(w){case F.ZodString:return H2(_,$);case F.ZodNumber:return rX(_,$);case F.ZodObject:return nX(_,$);case F.ZodBigInt:return CX(_,$);case F.ZodBoolean:return TX();case F.ZodDate:return N$(_,$);case F.ZodUndefined:return _9($);case F.ZodNull:return cX($);case F.ZodArray:return ZX(_,$);case F.ZodUnion:case F.ZodDiscriminatedUnion:return pX(_,$);case F.ZodIntersection:return yX(_,$);case F.ZodTuple:return eX(_,$);case F.ZodRecord:return D2(_,$);case F.ZodLiteral:return vX(_,$);case F.ZodEnum:return hX(_);case F.ZodNativeEnum:return uX(_);case F.ZodNullable:return iX(_,$);case F.ZodOptional:return aX(_,$);case F.ZodMap:return mX(_,$);case F.ZodSet:return tX(_,$);case F.ZodLazy:return()=>_.getter()._def;case F.ZodPromise:return sX(_,$);case F.ZodNaN:case F.ZodNever:return lX($);case F.ZodEffects:return kX(_,$);case F.ZodAny:return o($);case F.ZodUnknown:return w9($);case F.ZodDefault:return gX(_,$);case F.ZodBranded:return Q2(_,$);case F.ZodReadonly:return $9(_,$);case F.ZodCatch:return IX(_,$);case F.ZodPipeline:return oX(_,$);case F.ZodFunction:case F.ZodVoid:case F.ZodSymbol:return;default:return((X)=>{return})(w)}};function I(_,w,$=!1){let X=w.seen.get(_);if(w.override){let q=w.override?.(_,w,X,$);if(q!==EX)return q}if(X&&!$){let q=Uz(X,w);if(q!==void 0)return q}let J={def:_,path:w.currentPath,jsonSchema:void 0};w.seen.set(_,J);let Y=X9(_,_.typeName,w),W=typeof Y==="function"?I(Y(),w):Y;if(W)zz(_,w,W);if(w.postProcess){let q=w.postProcess(W,_,w);return J.jsonSchema=W,q}return J.jsonSchema=W,W}var Uz=(_,w)=>{switch(w.$refStrategy){case"root":return{$ref:_.path.join("/")};case"relative":return{$ref:G2(w.currentPath,_.path)};case"none":case"seen":{if(_.path.length<w.currentPath.length&&_.path.every(($,X)=>w.currentPath[X]===$))return console.warn(`Recursive reference detected at ${w.currentPath.join("/")}! Defaulting to any`),o(w);return w.$refStrategy==="seen"?o(w):void 0}}},zz=(_,w,$)=>{if(_.description){if($.description=_.description,w.markdownDescription)$.markdownDescription=_.description}return $};var E$=(_,w)=>{let $=PX(w),X=typeof w==="object"&&w.definitions?Object.entries(w.definitions).reduce((G,[Q,H])=>({...G,[Q]:I(H._def,{...$,currentPath:[...$.basePath,$.definitionPath,Q]},!0)??o($)}),{}):void 0,J=typeof w==="string"?w:w?.nameStrategy==="title"?void 0:w?.name,Y=I(_._def,J===void 0?$:{...$,currentPath:[...$.basePath,$.definitionPath,J]},!1)??o($),W=typeof w==="object"&&w.name!==void 0&&w.nameStrategy==="title"?w.name:void 0;if(W!==void 0)Y.title=W;if($.flags.hasReferencedOpenAiAnyType){if(!X)X={};if(!X[$.openAiAnyTypeName])X[$.openAiAnyTypeName]={type:["string","number","integer","boolean","array","null"],items:{$ref:$.$refStrategy==="relative"?"1":[...$.basePath,$.definitionPath,$.openAiAnyTypeName].join("/")}}}let q=J===void 0?X?{...Y,[$.definitionPath]:X}:Y:{$ref:[...$.$refStrategy==="relative"?[]:$.basePath,$.definitionPath,J].join("/"),[$.definitionPath]:{...X,[J]:Y}};if($.target==="jsonSchema7")q.$schema="http://json-schema.org/draft-07/schema#";else if($.target==="jsonSchema2019-09"||$.target==="openAi")q.$schema="https://json-schema.org/draft/2019-09/schema#";if($.target==="openAi"&&(("anyOf"in q)||("oneOf"in q)||("allOf"in q)||("type"in q)&&Array.isArray(q.type)))console.warn("Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.");return q};var Vz=[V0,f0,A0,M0,R0,O0,F0,L0,K0];function Az(_){let w=_;if(!w)return{};let $=w.shape?w:w._def?.schema??w;try{let X=E$($,{target:"jsonSchema7",$refStrategy:"none",effectStrategy:"input"}),{$schema:J,...Y}=X;return Y}catch{return{}}}function J9(_,w={}){let $=bX(_,w);return Vz.map((X)=>{let J=X($);return{name:J.name,description:J.description,input:Az(J.parameters),options:{codemode:!1},execute:async(Y,W)=>{let q={session_id:W?.sessionID??w.sessionId??"unknown",workdir:W?.directory};try{let G=await J.execute(Y??{},q),Q=typeof G.output==="string"?G.output:JSON.stringify(G.output??"");return{content:G.success?Q:`ERROR: ${G.error??"unknown error"}`,metadata:{tool:J.name,ok:G.success}}}catch(G){return{content:`ERROR: ${G instanceof Error?G.message:String(G)}`,metadata:{tool:J.name,ok:!1}}}}}})}function Y9(_,w){let $=_?.dispose;if(typeof $==="function")w.push($)}async function W9(_,w){let $=w.enabled!==!1,X={enabled:$,agentId:null,toolNames:[],errors:[],disposers:[]};if(!$)return X;let J=_??{},Y=w.agent??$0;if(typeof J.agent?.transform==="function")try{let q=await J.agent.transform((G)=>{M2(G)});Y9(q,X.disposers),X.agentId=Y}catch(q){X.errors.push(`roy agent registration failed: ${S$(q)}`)}else X.errors.push("ctx.agent.transform unavailable \u2014 roy agent not registered");let W=[];try{W=J9(w.store,{agent:Y,...w.sessionId?{sessionId:w.sessionId}:{}})}catch(q){return X.errors.push(`roy tool construction failed: ${S$(q)}`),X}if(typeof J.tool?.transform==="function")try{let q=await J.tool.transform((G)=>{for(let Q of W)G.add(Q)});Y9(q,X.disposers),X.toolNames=W.map((G)=>G.name)}catch(q){X.errors.push(`roy tool registration failed: ${S$(q)}`)}else X.errors.push("ctx.tool.transform unavailable \u2014 roy task tools not registered");return X}function S$(_){return _ instanceof Error?_.message:String(_)}import{join as C$}from"path";import{homedir as Nz}from"os";import{mkdirSync as bz}from"fs";import{Database as Mz}from"bun:sqlite";import{createHash as Rz,randomUUID as Oz}from"crypto";var Fz=`
321
2547
  CREATE TABLE IF NOT EXISTS tasks (
322
2548
  id TEXT PRIMARY KEY,
323
2549
  title TEXT NOT NULL,
@@ -372,13 +2598,13 @@ CREATE TABLE IF NOT EXISTS bounties (
372
2598
  done_at TEXT
373
2599
  );
374
2600
  CREATE INDEX IF NOT EXISTS bounties_status_idx ON bounties(status);
375
- `;function L$(){return new Date().toISOString()}function H1(){return L8()}function S8($){return F8("sha256").update($).digest("hex")}function i2($){let J=JSON.stringify({id:$.id,type:$.type,data:$.data,prev_hash:$.prev_hash,created_at:$.created_at});return S8(J)}function X1($){return{id:$.id,num:$.num,title:$.title,description:$.description??void 0,status:$.status,priority:$.priority,owner:$.owner??void 0,tags:$.tags??void 0,parent_id:$.parent_id,blocked_by:JSON.parse($.blocked_by),retry_of:$.retry_of,retry_count:$.retry_count,session_id:$.session_id,roy:E8($.roy),created_at:$.created_at,updated_at:$.updated_at}}function E8($){if($===null||$===void 0||$==="")return;try{let J=JSON.parse($);if(J&&typeof J==="object"&&!Array.isArray(J))return J;return}catch{return}}function v8($){try{let J=$.query("PRAGMA table_info(tasks)").all();if(!new Set(J.map((W)=>W.name)).has("roy"))$.exec("ALTER TABLE tasks ADD COLUMN roy TEXT")}catch{}}function d2($){return{id:$.id,num:$.num,task_id:$.task_id,type:$.type,data:JSON.parse($.data),created_at:$.created_at,prev_hash:$.prev_hash,hash:$.hash}}function z0($){return{id:$.id,subject:$.subject,body:$.body,from:$.from_,to:$.to_,status:$.status,claimed_by:$.claimed_by,task_id:$.task_id,created_at:$.created_at,claimed_at:$.claimed_at,done_at:$.done_at}}class K0{db;closedFlag=!1;constructor($){this.db=$}static async create($){let J=new O8($);return J.exec(w8),v8(J),new K0(J)}async close(){if(this.closedFlag)return;this.closedFlag=!0,this.db.close()}async createTask($,J){if(this.closedFlag)throw Error("store closed");if(J){let H=this.db.query("SELECT task_id FROM task_idempotency WHERE idempotency_key = ?").get(J);if(H){let X=await this.getTask(H.task_id);if(X)return X}}let Q=H1(),W=L$(),Y=$.priority??3;if(this.db.query(`INSERT INTO tasks (id, title, description, status, priority, owner, tags,
2601
+ `;function Lw(){return new Date().toISOString()}function P$(){return Oz()}function fz(_){return Rz("sha256").update(_).digest("hex")}function q9(_){let w=JSON.stringify({id:_.id,type:_.type,data:_.data,prev_hash:_.prev_hash,created_at:_.created_at});return fz(w)}function Z$(_){return{id:_.id,num:_.num,title:_.title,description:_.description??void 0,status:_.status,priority:_.priority,owner:_.owner??void 0,tags:_.tags??void 0,parent_id:_.parent_id,blocked_by:JSON.parse(_.blocked_by),retry_of:_.retry_of,retry_count:_.retry_count,session_id:_.session_id,roy:Lz(_.roy),created_at:_.created_at,updated_at:_.updated_at}}function Lz(_){if(_===null||_===void 0||_==="")return;try{let w=JSON.parse(_);if(w&&typeof w==="object"&&!Array.isArray(w))return w;return}catch{return}}function Kz(_){try{let w=_.query("PRAGMA table_info(tasks)").all();if(!new Set(w.map((X)=>X.name)).has("roy"))_.exec("ALTER TABLE tasks ADD COLUMN roy TEXT")}catch{}}function G9(_){return{id:_.id,num:_.num,task_id:_.task_id,type:_.type,data:JSON.parse(_.data),created_at:_.created_at,prev_hash:_.prev_hash,hash:_.hash}}function B2(_){return{id:_.id,subject:_.subject,body:_.body,from:_.from_,to:_.to_,status:_.status,claimed_by:_.claimed_by,task_id:_.task_id,created_at:_.created_at,claimed_at:_.claimed_at,done_at:_.done_at}}class U2{db;closedFlag=!1;constructor(_){this.db=_}static async create(_){let w=new Mz(_);return w.exec(Fz),Kz(w),new U2(w)}async close(){if(this.closedFlag)return;this.closedFlag=!0,this.db.close()}async createTask(_,w){if(this.closedFlag)throw Error("store closed");if(w){let W=this.db.query("SELECT task_id FROM task_idempotency WHERE idempotency_key = ?").get(w);if(W){let q=await this.getTask(W.task_id);if(q)return q}}let $=P$(),X=Lw(),J=_.priority??3;if(this.db.query(`INSERT INTO tasks (id, title, description, status, priority, owner, tags,
376
2602
  parent_id, blocked_by, retry_of, retry_count, session_id, roy, created_at, updated_at)
377
- VALUES (?, ?, ?, 'pending', ?, ?, ?, ?, ?, ?, 0, ?, ?, ?, ?)`).run(Q,$.title,$.description??null,Y,$.owner??null,$.tags??null,$.parent_id??null,JSON.stringify($.blocked_by??[]),$.retry_of??null,$.session_id??null,$.roy===void 0?null:JSON.stringify($.roy),W,W),J)this.db.query(`INSERT INTO task_idempotency (idempotency_key, task_id, created_at)
378
- VALUES (?, ?, ?)`).run(J,Q,W);await this.appendOperation({task_id:Q,type:"task.created",data:{title:$.title,parent_id:$.parent_id??null}});let B=await this.getTask(Q);if(!B)throw Error("internal: task vanished after insert");return B}async getTask($){if(this.closedFlag)throw Error("store closed");let J=this.db.query("SELECT rowid AS num, * FROM tasks WHERE id = ?").get($);return J?X1(J):null}async getTaskByNum($){if(this.closedFlag)throw Error("store closed");let J=this.db.query("SELECT rowid AS num, * FROM tasks WHERE rowid = ?").get($);return J?X1(J):null}async updateTask($,J){if(this.closedFlag)throw Error("store closed");let Q=await this.getTask($);if(!Q)return null;let W=[],Y=[];if(J.title!==void 0)W.push("title = ?"),Y.push(J.title);if(J.description!==void 0)W.push("description = ?"),Y.push(J.description);if(J.status!==void 0)W.push("status = ?"),Y.push(J.status);if(J.priority!==void 0)W.push("priority = ?"),Y.push(J.priority);if(J.owner!==void 0)W.push("owner = ?"),Y.push(J.owner);if(J.tags!==void 0)W.push("tags = ?"),Y.push(J.tags);if(J.blocked_by!==void 0)W.push("blocked_by = ?"),Y.push(JSON.stringify(J.blocked_by));if(J.roy!==void 0){let B={...Q.roy??{},...J.roy};W.push("roy = ?"),Y.push(JSON.stringify(B))}if(W.push("updated_at = ?"),Y.push(L$()),Y.push($),this.db.query(`UPDATE tasks SET ${W.join(", ")} WHERE id = ?`).run(...Y),J.status!==void 0&&J.status!==Q.status)await this.appendOperation({task_id:$,type:"task.status_changed",data:{from:Q.status,to:J.status}});else await this.appendOperation({task_id:$,type:"task.updated",data:{keys:Object.keys(J)}});return await this.getTask($)}async listTasks($={}){if(this.closedFlag)throw Error("store closed");let J=[],Q=[];if($.status!==void 0)if(Array.isArray($.status))J.push(`status IN (${$.status.map(()=>"?").join(",")})`),Q.push(...$.status);else J.push("status = ?"),Q.push($.status);if($.parent_id!==void 0)if($.parent_id===null)J.push("parent_id IS NULL");else J.push("parent_id = ?"),Q.push($.parent_id);if($.session_id!==void 0)J.push("session_id = ?"),Q.push($.session_id);if($.owner!==void 0)J.push("owner = ?"),Q.push($.owner);if($.tags!==void 0)J.push("tags LIKE ?"),Q.push(`%${$.tags}%`);if($.search!==void 0)J.push("(title LIKE ? OR description LIKE ?)"),Q.push(`%${$.search}%`,`%${$.search}%`);let W=$.limit??100,Y=$.offset??0,B=J.length?`WHERE ${J.join(" AND ")}`:"",H=this.db.query(`SELECT COUNT(*) AS n FROM tasks ${B}`).get(...Q).n;return{tasks:this.db.query(`SELECT rowid AS num, * FROM tasks ${B} ORDER BY created_at DESC LIMIT ? OFFSET ?`).all(...Q,W,Y).map(X1),total:H}}async deleteTask($){if(this.closedFlag)throw Error("store closed");return this.db.query("DELETE FROM tasks WHERE id = ?").run($).changes>0}async setParentId($,J){if(this.closedFlag)throw Error("store closed");this.db.query("UPDATE tasks SET parent_id = ?, updated_at = ? WHERE id = ?").run(J,L$(),$)}async appendOperation($){if(this.closedFlag)throw Error("store closed");let Q=this.db.query("SELECT hash FROM operations ORDER BY rowid DESC LIMIT 1").get()?.hash??"0".repeat(64),W=H1(),Y=L$(),B=i2({id:W,type:$.type,data:$.data,prev_hash:Q,created_at:Y});this.db.query(`INSERT INTO operations (id, task_id, type, data, created_at, prev_hash, hash)
379
- VALUES (?, ?, ?, ?, ?, ?, ?)`).run(W,$.task_id,$.type,JSON.stringify($.data),Y,Q,B);let H=this.db.query("SELECT last_insert_rowid() AS n").get().n;return{id:W,num:H,task_id:$.task_id,type:$.type,data:$.data,created_at:Y,prev_hash:Q,hash:B}}async getOperationByNum($){if(this.closedFlag)throw Error("store closed");let J=this.db.query("SELECT rowid AS num, * FROM operations WHERE rowid = ?").get($);return J?d2(J):null}async updateOperation($,J){if(this.closedFlag)throw Error("store closed");let Q=await this.getOperationByNum($);if(!Q)return null;let W=[],Y=[];if(J.type!==void 0)W.push("type = ?"),Y.push(J.type);if(J.data!==void 0)W.push("data = ?"),Y.push(JSON.stringify(J.data));if(W.length===0)return Q;return Y.push($),this.db.query(`UPDATE operations SET ${W.join(", ")} WHERE rowid = ?`).run(...Y),await this.getOperationByNum($)}async deleteOperation($){if(this.closedFlag)throw Error("store closed");return this.db.query("DELETE FROM operations WHERE rowid = ?").run($).changes>0}async listOperations($={}){if(this.closedFlag)throw Error("store closed");let J=[],Q=[];if($.task_id!==void 0)J.push("task_id = ?"),Q.push($.task_id);if($.type!==void 0)J.push("type = ?"),Q.push($.type);let W=$.limit??100,Y=$.offset??0,B=J.length?`WHERE ${J.join(" AND ")}`:"",H=this.db.query(`SELECT COUNT(*) AS n FROM operations ${B}`).get(...Q).n;return{operations:this.db.query(`SELECT rowid AS num, * FROM operations ${B} ORDER BY rowid ASC LIMIT ? OFFSET ?`).all(...Q,W,Y).map(d2),total:H}}async verifyChain(){if(this.closedFlag)throw Error("store closed");let $=this.db.query("SELECT * FROM operations ORDER BY rowid ASC").all(),J="0".repeat(64);for(let Q of $){let W=i2({id:Q.id,type:Q.type,data:JSON.parse(Q.data),prev_hash:J,created_at:Q.created_at});if(Q.prev_hash!==J)return!1;if(Q.hash!==W)return!1;J=Q.hash}return!0}async tamperOpForTest($,J){this.db.query("UPDATE operations SET data = ? WHERE rowid = ?").run(JSON.stringify(J),$)}async sendBounty($){if(this.closedFlag)throw Error("store closed");let J=H1(),Q=L$();this.db.query(`INSERT INTO bounties (id, subject, body, from_, status, created_at)
380
- VALUES (?, ?, ?, ?, 'open', ?)`).run(J,$.subject,$.body,$.from,Q),await this.appendOperation({task_id:null,type:"bounty.sent",data:{bounty_id:J,subject:$.subject,from:$.from}});let W=this.db.query("SELECT * FROM bounties WHERE id = ?").get(J);return z0(W)}async claimBounty($){if(this.closedFlag)throw Error("store closed");let J=this.db.query("SELECT * FROM bounties WHERE status = 'open' ORDER BY created_at ASC LIMIT 1").get();if(!J)return null;let Q=L$();this.db.query("UPDATE bounties SET status = 'claimed', claimed_by = ?, claimed_at = ? WHERE id = ?").run($,Q,J.id),await this.appendOperation({task_id:null,type:"bounty.claimed",data:{bounty_id:J.id,by:$}});let W=this.db.query("SELECT * FROM bounties WHERE id = ?").get(J.id);return z0(W)}async completeBounty($,J){if(this.closedFlag)throw Error("store closed");let Q=L$();if(this.db.query(`UPDATE bounties SET status = 'done', task_id = ?, done_at = ?
381
- WHERE id = ? AND status = 'claimed'`).run(J,Q,$).changes===0)return null;await this.appendOperation({task_id:null,type:"bounty.completed",data:{bounty_id:$,task_id:J}});let Y=this.db.query("SELECT * FROM bounties WHERE id = ?").get($);return z0(Y)}async listBounties($={}){if(this.closedFlag)throw Error("store closed");let J=[],Q=[];if($.status!==void 0)J.push("status = ?"),Q.push($.status);if($.to!==void 0)J.push("to_ = ?"),Q.push($.to);let W=J.length?`WHERE ${J.join(" AND ")}`:"";return this.db.query(`SELECT * FROM bounties ${W} ORDER BY created_at DESC`).all(...Q).map(z0)}}var C8=q1(P8(),".roy-task-plugin"),k8=q1(C8,"tasks.db");class m${inner;constructor($){this.inner=$}static async create($){let J=$??k8;if(J!==":memory:")f8(q1(J,".."),{recursive:!0});let Q=await K0.create(J);return new m$(Q)}createTask(...$){return this.inner.createTask(...$)}getTask(...$){return this.inner.getTask(...$)}updateTask(...$){return this.inner.updateTask(...$)}deleteTask(...$){return this.inner.deleteTask(...$)}listTasks(...$){return this.inner.listTasks(...$)}appendOperation(...$){return this.inner.appendOperation(...$)}listOperations(...$){return this.inner.listOperations(...$)}verifyChain(){return this.inner.verifyChain()}sendBounty(...$){return this.inner.sendBounty(...$)}claimBounty(...$){return this.inner.claimBounty(...$)}completeBounty(...$){return this.inner.completeBounty(...$)}listBounties(...$){return this.inner.listBounties(...$)}async close(){await this.inner.close()}}class X$ extends Error{status;body;constructor($,J,Q){super(J);this.status=$,this.body=Q}}class G1{baseUrl;headers;closedFlag=!1;constructor($){this.baseUrl=$.baseUrl.replace(/\/+$/,""),this.headers={"content-type":"application/json",...$.authToken?{authorization:`Bearer ${$.authToken}`}:{},...$.headers??{}}}async close(){this.closedFlag=!0}async request($,J,Q){if(this.closedFlag)throw Error("client closed");let W={...this.headers};if(Q?.idempotencyKey)W["idempotency-key"]=Q.idempotencyKey;let Y=await fetch(`${this.baseUrl}${J}`,{method:$,headers:W,body:Q?.body!==void 0?JSON.stringify(Q.body):void 0});if(Y.status===204)return null;let B=await Y.text(),H=null;try{H=B?JSON.parse(B):null}catch{H=B}if(!Y.ok)throw new X$(Y.status,`HTTP ${Y.status}`,H);return H}async createTask($,J){let Q=await this.request("POST","/tasks",{body:$,idempotencyKey:J});if(!Q)throw new X$(500,"empty response from POST /tasks");return Q}async getTask($){try{return await this.request("GET",`/tasks/${encodeURIComponent($)}`)}catch(J){if(J instanceof X$&&J.status===404)return null;throw J}}async updateTask($,J){try{return await this.request("PATCH",`/tasks/${encodeURIComponent($)}`,{body:J})}catch(Q){if(Q instanceof X$&&Q.status===404)return null;throw Q}}async deleteTask($){try{return await this.request("DELETE",`/tasks/${encodeURIComponent($)}`),!0}catch(J){if(J instanceof X$&&J.status===404)return!1;throw J}}async listTasks($={}){let J=new URLSearchParams;if($.status!==void 0){let W=Array.isArray($.status)?$.status.join(","):$.status;J.set("status",W)}if($.parent_id!==void 0&&$.parent_id!==null)J.set("parent_id",$.parent_id);if($.session_id!==void 0)J.set("session_id",$.session_id);if($.owner!==void 0)J.set("owner",$.owner);if($.tags!==void 0)J.set("tags",$.tags);if($.search!==void 0)J.set("search",$.search);J.set("limit",String($.limit??100)),J.set("offset",String($.offset??0));let Q=await this.request("GET",`/tasks?${J}`);if(!Q)throw new X$(500,"empty response");return Q}async appendOperation($){return await this.request("POST","/operations",{body:$})}async listOperations($={}){let J=new URLSearchParams;if($.task_id!==void 0)J.set("task_id",$.task_id);if($.type!==void 0)J.set("type",$.type);return J.set("limit",String($.limit??100)),J.set("offset",String($.offset??0)),await this.request("GET",`/operations?${J}`)}async verifyChain(){return(await this.request("GET","/verify"))?.valid===!0}async sendBounty($){let J=await this.request("POST","/bounties",{body:$});if(!J)throw new X$(500,"empty bounty response");return J}async claimBounty($){try{return await this.request("POST","/bounties/claim",{body:{agent:$}})}catch(J){if(J instanceof X$&&J.status===404)return null;throw J}}async completeBounty($,J){try{return await this.request("POST",`/bounties/${encodeURIComponent($)}/complete`,{body:{task_id:J}})}catch(Q){if(Q instanceof X$&&Q.status===404)return null;throw Q}}async listBounties($={}){let J=new URLSearchParams;if($.status!==void 0)J.set("status",$.status);if($.to!==void 0)J.set("to",$.to);return(await this.request("GET",`/bounties?${J}`))?.bounties??[]}}class e${inner;constructor($){this.inner=new G1($)}createTask(...$){return this.inner.createTask(...$)}getTask(...$){return this.inner.getTask(...$)}updateTask(...$){return this.inner.updateTask(...$)}deleteTask(...$){return this.inner.deleteTask(...$)}listTasks(...$){return this.inner.listTasks(...$)}appendOperation(...$){return this.inner.appendOperation(...$)}listOperations(...$){return this.inner.listOperations(...$)}verifyChain(){return this.inner.verifyChain()}sendBounty(...$){return this.inner.sendBounty(...$)}claimBounty(...$){return this.inner.claimBounty(...$)}completeBounty(...$){return this.inner.completeBounty(...$)}listBounties(...$){return this.inner.listBounties(...$)}async close(){await this.inner.close()}}async function k7($={}){let J=$.persistence??"local",Q;if(J==="remote"){if(!$.remoteUrl)throw Error("remoteUrl is required when persistence = 'remote' (e.g. http://localhost:7820)");Q=new e$({baseUrl:$.remoteUrl,authToken:$.remoteAuthToken})}else Q=await m$.create($.localDbPath);let W={store:Q,agent:$.agent??"opencode-default"};return{handlers:J0(W),store:Q,async close(){await Q.close()}}}var I8={id:"roy-task-plugin",async setup($){let J=$.options??{},Q=J.persistence??"local",W;if(Q==="remote"){if(!J.remoteUrl)throw Error("remoteUrl is required when persistence = 'remote' (e.g. http://localhost:7820)");W=new e$({baseUrl:J.remoteUrl,authToken:J.remoteAuthToken})}else W=await m$.create(J.localDbPath);let Y={store:W,agent:J.agent??"opencode-default"},B=J0(Y),H=await n2($,{store:W,enabled:J.royAgent!==!1,agent:"roy"}),X=await $.agent.transform(async(_)=>{let j=_.get("build");if(!j)return;let z=String(j.system??""),O=`
2603
+ VALUES (?, ?, ?, 'pending', ?, ?, ?, ?, ?, ?, 0, ?, ?, ?, ?)`).run($,_.title,_.description??null,J,_.owner??null,_.tags??null,_.parent_id??null,JSON.stringify(_.blocked_by??[]),_.retry_of??null,_.session_id??null,_.roy===void 0?null:JSON.stringify(_.roy),X,X),w)this.db.query(`INSERT INTO task_idempotency (idempotency_key, task_id, created_at)
2604
+ VALUES (?, ?, ?)`).run(w,$,X);await this.appendOperation({task_id:$,type:"task.created",data:{title:_.title,parent_id:_.parent_id??null}});let Y=await this.getTask($);if(!Y)throw Error("internal: task vanished after insert");return Y}async getTask(_){if(this.closedFlag)throw Error("store closed");let w=this.db.query("SELECT rowid AS num, * FROM tasks WHERE id = ?").get(_);return w?Z$(w):null}async getTaskByNum(_){if(this.closedFlag)throw Error("store closed");let w=this.db.query("SELECT rowid AS num, * FROM tasks WHERE rowid = ?").get(_);return w?Z$(w):null}async updateTask(_,w){if(this.closedFlag)throw Error("store closed");let $=await this.getTask(_);if(!$)return null;let X=[],J=[];if(w.title!==void 0)X.push("title = ?"),J.push(w.title);if(w.description!==void 0)X.push("description = ?"),J.push(w.description);if(w.status!==void 0)X.push("status = ?"),J.push(w.status);if(w.priority!==void 0)X.push("priority = ?"),J.push(w.priority);if(w.owner!==void 0)X.push("owner = ?"),J.push(w.owner);if(w.tags!==void 0)X.push("tags = ?"),J.push(w.tags);if(w.blocked_by!==void 0)X.push("blocked_by = ?"),J.push(JSON.stringify(w.blocked_by));if(w.roy!==void 0){let Y={...$.roy??{},...w.roy};X.push("roy = ?"),J.push(JSON.stringify(Y))}if(X.push("updated_at = ?"),J.push(Lw()),J.push(_),this.db.query(`UPDATE tasks SET ${X.join(", ")} WHERE id = ?`).run(...J),w.status!==void 0&&w.status!==$.status)await this.appendOperation({task_id:_,type:"task.status_changed",data:{from:$.status,to:w.status}});else await this.appendOperation({task_id:_,type:"task.updated",data:{keys:Object.keys(w)}});return await this.getTask(_)}async listTasks(_={}){if(this.closedFlag)throw Error("store closed");let w=[],$=[];if(_.status!==void 0)if(Array.isArray(_.status))w.push(`status IN (${_.status.map(()=>"?").join(",")})`),$.push(..._.status);else w.push("status = ?"),$.push(_.status);if(_.parent_id!==void 0)if(_.parent_id===null)w.push("parent_id IS NULL");else w.push("parent_id = ?"),$.push(_.parent_id);if(_.session_id!==void 0)w.push("session_id = ?"),$.push(_.session_id);if(_.owner!==void 0)w.push("owner = ?"),$.push(_.owner);if(_.tags!==void 0)w.push("tags LIKE ?"),$.push(`%${_.tags}%`);if(_.search!==void 0)w.push("(title LIKE ? OR description LIKE ?)"),$.push(`%${_.search}%`,`%${_.search}%`);let X=_.limit??100,J=_.offset??0,Y=w.length?`WHERE ${w.join(" AND ")}`:"",W=this.db.query(`SELECT COUNT(*) AS n FROM tasks ${Y}`).get(...$).n;return{tasks:this.db.query(`SELECT rowid AS num, * FROM tasks ${Y} ORDER BY created_at DESC LIMIT ? OFFSET ?`).all(...$,X,J).map(Z$),total:W}}async deleteTask(_){if(this.closedFlag)throw Error("store closed");return this.db.query("DELETE FROM tasks WHERE id = ?").run(_).changes>0}async setParentId(_,w){if(this.closedFlag)throw Error("store closed");this.db.query("UPDATE tasks SET parent_id = ?, updated_at = ? WHERE id = ?").run(w,Lw(),_)}async appendOperation(_){if(this.closedFlag)throw Error("store closed");let $=this.db.query("SELECT hash FROM operations ORDER BY rowid DESC LIMIT 1").get()?.hash??"0".repeat(64),X=P$(),J=Lw(),Y=q9({id:X,type:_.type,data:_.data,prev_hash:$,created_at:J});this.db.query(`INSERT INTO operations (id, task_id, type, data, created_at, prev_hash, hash)
2605
+ VALUES (?, ?, ?, ?, ?, ?, ?)`).run(X,_.task_id,_.type,JSON.stringify(_.data),J,$,Y);let W=this.db.query("SELECT last_insert_rowid() AS n").get().n;return{id:X,num:W,task_id:_.task_id,type:_.type,data:_.data,created_at:J,prev_hash:$,hash:Y}}async getOperationByNum(_){if(this.closedFlag)throw Error("store closed");let w=this.db.query("SELECT rowid AS num, * FROM operations WHERE rowid = ?").get(_);return w?G9(w):null}async updateOperation(_,w){if(this.closedFlag)throw Error("store closed");let $=await this.getOperationByNum(_);if(!$)return null;let X=[],J=[];if(w.type!==void 0)X.push("type = ?"),J.push(w.type);if(w.data!==void 0)X.push("data = ?"),J.push(JSON.stringify(w.data));if(X.length===0)return $;return J.push(_),this.db.query(`UPDATE operations SET ${X.join(", ")} WHERE rowid = ?`).run(...J),await this.getOperationByNum(_)}async deleteOperation(_){if(this.closedFlag)throw Error("store closed");return this.db.query("DELETE FROM operations WHERE rowid = ?").run(_).changes>0}async listOperations(_={}){if(this.closedFlag)throw Error("store closed");let w=[],$=[];if(_.task_id!==void 0)w.push("task_id = ?"),$.push(_.task_id);if(_.type!==void 0)w.push("type = ?"),$.push(_.type);let X=_.limit??100,J=_.offset??0,Y=w.length?`WHERE ${w.join(" AND ")}`:"",W=this.db.query(`SELECT COUNT(*) AS n FROM operations ${Y}`).get(...$).n;return{operations:this.db.query(`SELECT rowid AS num, * FROM operations ${Y} ORDER BY rowid ASC LIMIT ? OFFSET ?`).all(...$,X,J).map(G9),total:W}}async verifyChain(){if(this.closedFlag)throw Error("store closed");let _=this.db.query("SELECT * FROM operations ORDER BY rowid ASC").all(),w="0".repeat(64);for(let $ of _){let X=q9({id:$.id,type:$.type,data:JSON.parse($.data),prev_hash:w,created_at:$.created_at});if($.prev_hash!==w)return!1;if($.hash!==X)return!1;w=$.hash}return!0}async tamperOpForTest(_,w){this.db.query("UPDATE operations SET data = ? WHERE rowid = ?").run(JSON.stringify(w),_)}async sendBounty(_){if(this.closedFlag)throw Error("store closed");let w=P$(),$=Lw();this.db.query(`INSERT INTO bounties (id, subject, body, from_, status, created_at)
2606
+ VALUES (?, ?, ?, ?, 'open', ?)`).run(w,_.subject,_.body,_.from,$),await this.appendOperation({task_id:null,type:"bounty.sent",data:{bounty_id:w,subject:_.subject,from:_.from}});let X=this.db.query("SELECT * FROM bounties WHERE id = ?").get(w);return B2(X)}async claimBounty(_){if(this.closedFlag)throw Error("store closed");let w=this.db.query("SELECT * FROM bounties WHERE status = 'open' ORDER BY created_at ASC LIMIT 1").get();if(!w)return null;let $=Lw();this.db.query("UPDATE bounties SET status = 'claimed', claimed_by = ?, claimed_at = ? WHERE id = ?").run(_,$,w.id),await this.appendOperation({task_id:null,type:"bounty.claimed",data:{bounty_id:w.id,by:_}});let X=this.db.query("SELECT * FROM bounties WHERE id = ?").get(w.id);return B2(X)}async completeBounty(_,w){if(this.closedFlag)throw Error("store closed");let $=Lw();if(this.db.query(`UPDATE bounties SET status = 'done', task_id = ?, done_at = ?
2607
+ WHERE id = ? AND status = 'claimed'`).run(w,$,_).changes===0)return null;await this.appendOperation({task_id:null,type:"bounty.completed",data:{bounty_id:_,task_id:w}});let J=this.db.query("SELECT * FROM bounties WHERE id = ?").get(_);return B2(J)}async listBounties(_={}){if(this.closedFlag)throw Error("store closed");let w=[],$=[];if(_.status!==void 0)w.push("status = ?"),$.push(_.status);if(_.to!==void 0)w.push("to_ = ?"),$.push(_.to);let X=w.length?`WHERE ${w.join(" AND ")}`:"";return this.db.query(`SELECT * FROM bounties ${X} ORDER BY created_at DESC`).all(...$).map(B2)}}var jz=C$(Nz(),".roy-task-plugin"),Ez=C$(jz,"tasks.db");class w0{inner;constructor(_){this.inner=_}static async create(_){let w=_??Ez;if(w!==":memory:")bz(C$(w,".."),{recursive:!0});let $=await U2.create(w);return new w0($)}createTask(..._){return this.inner.createTask(..._)}getTask(..._){return this.inner.getTask(..._)}updateTask(..._){return this.inner.updateTask(..._)}deleteTask(..._){return this.inner.deleteTask(..._)}listTasks(..._){return this.inner.listTasks(..._)}appendOperation(..._){return this.inner.appendOperation(..._)}listOperations(..._){return this.inner.listOperations(..._)}verifyChain(){return this.inner.verifyChain()}sendBounty(..._){return this.inner.sendBounty(..._)}claimBounty(..._){return this.inner.claimBounty(..._)}completeBounty(..._){return this.inner.completeBounty(..._)}listBounties(..._){return this.inner.listBounties(..._)}async close(){await this.inner.close()}}class k_ extends Error{status;body;constructor(_,w,$){super(w);this.status=_,this.body=$}}class T${baseUrl;headers;closedFlag=!1;constructor(_){this.baseUrl=_.baseUrl.replace(/\/+$/,""),this.headers={"content-type":"application/json",..._.authToken?{authorization:`Bearer ${_.authToken}`}:{},..._.headers??{}}}async close(){this.closedFlag=!0}async request(_,w,$){if(this.closedFlag)throw Error("client closed");let X={...this.headers};if($?.idempotencyKey)X["idempotency-key"]=$.idempotencyKey;let J=await fetch(`${this.baseUrl}${w}`,{method:_,headers:X,body:$?.body!==void 0?JSON.stringify($.body):void 0});if(J.status===204)return null;let Y=await J.text(),W=null;try{W=Y?JSON.parse(Y):null}catch{W=Y}if(!J.ok)throw new k_(J.status,`HTTP ${J.status}`,W);return W}async createTask(_,w){let $=await this.request("POST","/tasks",{body:_,idempotencyKey:w});if(!$)throw new k_(500,"empty response from POST /tasks");return $}async getTask(_){try{return await this.request("GET",`/tasks/${encodeURIComponent(_)}`)}catch(w){if(w instanceof k_&&w.status===404)return null;throw w}}async updateTask(_,w){try{return await this.request("PATCH",`/tasks/${encodeURIComponent(_)}`,{body:w})}catch($){if($ instanceof k_&&$.status===404)return null;throw $}}async deleteTask(_){try{return await this.request("DELETE",`/tasks/${encodeURIComponent(_)}`),!0}catch(w){if(w instanceof k_&&w.status===404)return!1;throw w}}async listTasks(_={}){let w=new URLSearchParams;if(_.status!==void 0){let X=Array.isArray(_.status)?_.status.join(","):_.status;w.set("status",X)}if(_.parent_id!==void 0&&_.parent_id!==null)w.set("parent_id",_.parent_id);if(_.session_id!==void 0)w.set("session_id",_.session_id);if(_.owner!==void 0)w.set("owner",_.owner);if(_.tags!==void 0)w.set("tags",_.tags);if(_.search!==void 0)w.set("search",_.search);w.set("limit",String(_.limit??100)),w.set("offset",String(_.offset??0));let $=await this.request("GET",`/tasks?${w}`);if(!$)throw new k_(500,"empty response");return $}async appendOperation(_){return await this.request("POST","/operations",{body:_})}async listOperations(_={}){let w=new URLSearchParams;if(_.task_id!==void 0)w.set("task_id",_.task_id);if(_.type!==void 0)w.set("type",_.type);return w.set("limit",String(_.limit??100)),w.set("offset",String(_.offset??0)),await this.request("GET",`/operations?${w}`)}async verifyChain(){return(await this.request("GET","/verify"))?.valid===!0}async sendBounty(_){let w=await this.request("POST","/bounties",{body:_});if(!w)throw new k_(500,"empty bounty response");return w}async claimBounty(_){try{return await this.request("POST","/bounties/claim",{body:{agent:_}})}catch(w){if(w instanceof k_&&w.status===404)return null;throw w}}async completeBounty(_,w){try{return await this.request("POST",`/bounties/${encodeURIComponent(_)}/complete`,{body:{task_id:w}})}catch($){if($ instanceof k_&&$.status===404)return null;throw $}}async listBounties(_={}){let w=new URLSearchParams;if(_.status!==void 0)w.set("status",_.status);if(_.to!==void 0)w.set("to",_.to);return(await this.request("GET",`/bounties?${w}`))?.bounties??[]}}class s0{inner;constructor(_){this.inner=new T$(_)}createTask(..._){return this.inner.createTask(..._)}getTask(..._){return this.inner.getTask(..._)}updateTask(..._){return this.inner.updateTask(..._)}deleteTask(..._){return this.inner.deleteTask(..._)}listTasks(..._){return this.inner.listTasks(..._)}appendOperation(..._){return this.inner.appendOperation(..._)}listOperations(..._){return this.inner.listOperations(..._)}verifyChain(){return this.inner.verifyChain()}sendBounty(..._){return this.inner.sendBounty(..._)}claimBounty(..._){return this.inner.claimBounty(..._)}completeBounty(..._){return this.inner.completeBounty(..._)}listBounties(..._){return this.inner.listBounties(..._)}async close(){await this.inner.close()}}async function xL(_={}){let w=_.persistence??"local",$;if(w==="remote"){if(!_.remoteUrl)throw Error("remoteUrl is required when persistence = 'remote' (e.g. http://localhost:7820)");$=new s0({baseUrl:_.remoteUrl,authToken:_.remoteAuthToken})}else $=await w0.create(_.localDbPath);let X={store:$,agent:_.agent??"opencode-default"};return{handlers:w1(X),store:$,async close(){await $.close()}}}var Sz={id:"roy-task-plugin",async setup(_){let w=_.options??{},$=w.persistence??"local",X;if($==="remote"){if(!w.remoteUrl)throw Error("remoteUrl is required when persistence = 'remote' (e.g. http://localhost:7820)");X=new s0({baseUrl:w.remoteUrl,authToken:w.remoteAuthToken})}else X=await w0.create(w.localDbPath);let J={store:X,agent:w.agent??"opencode-default"},Y=w1(J),W=await W9(_,{store:X,enabled:w.royAgent!==!1,agent:"roy"}),q=await _.agent.transform(async(Q)=>{let B=Q.get("build");if(!B)return;let D=String(B.system??""),z=`
382
2608
 
383
2609
  # Roy Task Plugin (auto-injected by roy-task-plugin v2)
384
2610
 
@@ -386,14 +2612,14 @@ When you start a non-trivial task (more than one tool call), create a tracked ta
386
2612
 
387
2613
  task-create <title> [body]
388
2614
 
389
- The plugin persists each invocation to ${Q==="local"?"SQLite at ~/.roy-task-plugin/tasks.db":`remote service at ${J.remoteUrl}`}. Use \`task-list\` and \`task-status\` to retrieve.
2615
+ The plugin persists each invocation to ${$==="local"?"SQLite at ~/.roy-task-plugin/tasks.db":`remote service at ${w.remoteUrl}`}. Use \`task-list\` and \`task-status\` to retrieve.
390
2616
 
391
2617
  Mark progress on long tasks via \`task-update <id> --status <status>\`.
392
2618
 
393
2619
  For task-first-class-citizen work (task tree, milestones, deliverables), switch
394
2620
  to the dedicated **\`roy\`** primary agent \u2014 it carries the full roy task
395
2621
  lifecycle as native tools.
396
- `;_.update("build",(P)=>{if(typeof P.system==="string"||P.system===void 0)P.system=z+O})}),q=await $.command.transform((_)=>{_.add({name:"task-create",description:"Create a tracked task in roy-task-plugin store. Persists to SQLite (~/.roy-task-plugin/tasks.db) or remote service. Args: <title> [body]",template:"task-create <title> [body]",execute:async(b)=>{let j=String(b?.prompt?.text??"").trim(),z=j.split(`
397
- `)[0]?.trim()||`task-${Date.now()}`;await B.session({type:"session.created",payload:{id:b?.sessionID??`cmd-${Date.now()}`,title:z,body:j,source:"command:task-create"}})}}),_.add({name:"task-list",description:"List tracked tasks. Filters: [--status <s>] [--owner <o>]",template:"task-list [--status <status>] [--owner <owner>]",execute:async()=>{}}),_.add({name:"task-status",description:"Show full status of a single task. Args: <id>",template:"task-status <id>",execute:async()=>{}})});return{async dispose(){for(let _ of H.disposers)try{await _()}catch{}await X.dispose(),await q.dispose(),await W.close()}}}},h7=I8;export{h7 as default,k7 as createRoyTaskPlugin,J0 as createHandlers,e$ as RemoteTaskStore,m$ as LocalTaskStore};
2622
+ `;Q.update("build",(A)=>{if(typeof A.system==="string"||A.system===void 0)A.system=D+z})}),G=await _.command.transform((Q)=>{Q.add({name:"task-create",description:"Create a tracked task in roy-task-plugin store. Persists to SQLite (~/.roy-task-plugin/tasks.db) or remote service. Args: <title> [body]",template:"task-create <title> [body]",execute:async(H)=>{let B=String(H?.prompt?.text??"").trim(),D=B.split(`
2623
+ `)[0]?.trim()||`task-${Date.now()}`;await Y.session({type:"session.created",payload:{id:H?.sessionID??`cmd-${Date.now()}`,title:D,body:B,source:"command:task-create"}})}}),Q.add({name:"task-list",description:"List tracked tasks. Filters: [--status <s>] [--owner <o>]",template:"task-list [--status <status>] [--owner <owner>]",execute:async()=>{}}),Q.add({name:"task-status",description:"Show full status of a single task. Args: <id>",template:"task-status <id>",execute:async()=>{}})});return{async dispose(){for(let Q of W.disposers)try{await Q()}catch{}await q.dispose(),await G.dispose(),await X.close()}}}},uL=Sz;export{uL as default,xL as createRoyTaskPlugin,w1 as createHandlers,s0 as RemoteTaskStore,w0 as LocalTaskStore};
398
2624
 
399
- //# debugId=F3B89209AA42520764756E2164756E21
2625
+ //# debugId=8830154CD99D8CF064756E2164756E21