@aelinrezende/pipa-core 1.0.7 → 1.0.8
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/extensions/pipa/core/apply-features.d.ts.map +1 -1
- package/extensions/pipa/features/provider/custom.feature.d.ts +3 -1
- package/extensions/pipa/features/provider/custom.feature.d.ts.map +1 -1
- package/extensions/pipa/features/teammate/hooks/execution-context.d.ts.map +1 -1
- package/extensions/pipa/lib/teammate.d.ts.map +1 -1
- package/index.js +6 -6
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply-features.d.ts","sourceRoot":"","sources":["../../../../extensions/pipa/core/apply-features.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,YAAY,EAGb,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"apply-features.d.ts","sourceRoot":"","sources":["../../../../extensions/pipa/core/apply-features.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,YAAY,EAGb,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAAmB,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAMvF,wBAAsB,aAAa,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,0BAA0B,EAAE,iBAqC3F"}
|
|
@@ -3,6 +3,8 @@ import { PipaBaseFeature } from '../base-feature';
|
|
|
3
3
|
import type { PipaApi } from '../../interfaces';
|
|
4
4
|
export declare class ProviderFeature extends PipaBaseFeature {
|
|
5
5
|
initialize(pi: ExtensionAPI): Promise<void> | void;
|
|
6
|
-
addToolsDefinition(event: BeforeAgentStartEvent, pipa: PipaApi):
|
|
6
|
+
addToolsDefinition(event: BeforeAgentStartEvent, pipa: PipaApi): {
|
|
7
|
+
systemPrompt: string;
|
|
8
|
+
} | undefined;
|
|
7
9
|
}
|
|
8
10
|
//# sourceMappingURL=custom.feature.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom.feature.d.ts","sourceRoot":"","sources":["../../../../../extensions/pipa/features/provider/custom.feature.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAOhD,qBAAa,eAAgB,SAAQ,eAAe;IAClD,UAAU,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAoCjD;IAGD,kBAAkB,CAAC,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,OAAO
|
|
1
|
+
{"version":3,"file":"custom.feature.d.ts","sourceRoot":"","sources":["../../../../../extensions/pipa/features/provider/custom.feature.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAOhD,qBAAa,eAAgB,SAAQ,eAAe;IAClD,UAAU,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAoCjD;IAGD,kBAAkB,CAAC,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,OAAO;;kBAwB7D;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution-context.d.ts","sourceRoot":"","sources":["../../../../../../extensions/pipa/features/teammate/hooks/execution-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAM1G,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAQnD,qBAAa,wBAAwB;IAEnC,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,QA0B1C;IAGK,wBAAwB,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,iBA4BvD;IAED;;OAEG;IAEH,sBAAsB,CAAC,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,OAAO,GAAG,2BAA2B,
|
|
1
|
+
{"version":3,"file":"execution-context.d.ts","sourceRoot":"","sources":["../../../../../../extensions/pipa/features/teammate/hooks/execution-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAM1G,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAQnD,qBAAa,wBAAwB;IAEnC,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,QA0B1C;IAGK,wBAAwB,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,iBA4BvD;IAED;;OAEG;IAEH,sBAAsB,CAAC,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,OAAO,GAAG,2BAA2B,CAiC/F;IAGD,0BAA0B,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,QAEnD;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"teammate.d.ts","sourceRoot":"","sources":["../../../../extensions/pipa/lib/teammate.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EAK1B,MAAM,iCAAiC,CAAC;AAKzC,KAAK,cAAc,GAAG,QAAQ,CAC5B,IAAI,CAAC,yBAAyB,EAAE,gBAAgB,GAAG,cAAc,GAAG,gBAAgB,CAAC,GAAG;IACtF,YAAY,EAAE,MAAM,CAAC;CACtB,CACF,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"teammate.d.ts","sourceRoot":"","sources":["../../../../extensions/pipa/lib/teammate.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EAK1B,MAAM,iCAAiC,CAAC;AAKzC,KAAK,cAAc,GAAG,QAAQ,CAC5B,IAAI,CAAC,yBAAyB,EAAE,gBAAgB,GAAG,cAAc,GAAG,gBAAgB,CAAC,GAAG;IACtF,YAAY,EAAE,MAAM,CAAC;CACtB,CACF,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,cAAc,CAAC,CAgCzB"}
|
package/index.js
CHANGED
|
@@ -125,7 +125,7 @@ ${$.map((X)=>{let Z=q(X);if(DM.isArray(Z))return`- **${Z[0]}**: ${Z[1]}`;return`
|
|
|
125
125
|
|
|
126
126
|
${Z}`:Z}case"replace":return X.replace(JQ(q.value),JQ(q.replacement));default:throw J}};import{DefaultResourceLoader as $o,getAgentDir as qo,ModelRuntime as Jo,SessionManager as Xo}from"@earendil-works/pi-coding-agent";import SM from"node:fs";import Zo from"node:path";import q5 from"node:path";import hi from"node:process";import yi from"node:path";import OM,{promises as pm$}from"node:fs";import{fileURLToPath as ci}from"node:url";var MM={directory:"isDirectory",file:"isFile"};function di($){if($==="both"||Object.hasOwn(MM,$))return;throw Error(`Invalid type specified: ${$}`)}var ui=($,q)=>$==="both"?q.isFile()||q.isDirectory():q[MM[$]](),li=($)=>$ instanceof URL?ci($):$;function wU($,{cwd:q=hi.cwd(),type:J="file",allowSymlinks:X=!0}={}){di(J),q=li(q);let Z=X?OM.statSync:OM.lstatSync;for(let U of $)try{let W=Z(yi.resolve(q,U),{throwIfNoEntry:!1});if(!W)continue;if(ui(J,W))return U}catch{}}import{promisify as pi}from"node:util";import{execFile as ni,execFileSync as am$}from"node:child_process";import{fileURLToPath as ii}from"node:url";var em$=pi(ni);function HU($){return $ instanceof URL?ii($):$}var oi=Symbol("findUpStop");function si($,q={}){let J=q5.resolve(HU(q.cwd)??""),{root:X}=q5.parse(J),Z=q5.resolve(J,HU(q.stopAt)??X),U=q.limit??Number.POSITIVE_INFINITY,W=[$].flat(),H=(F)=>{if(typeof $!=="function")return wU(W,F);let B=$(F.cwd);if(typeof B==="string")return wU([B],F);return B},K=[];while(!0){let F=H({...q,cwd:J});if(F===oi)break;if(F)K.push(q5.resolve(J,F));if(J===Z||K.length>=U)break;J=q5.dirname(J)}return K}function ZQ($,q={}){return si($,{...q,limit:1})[0]}import ri from"node:fs";import K8 from"node:path";import{fileURLToPath as LM}from"node:url";var ai=LM(import.meta.url),ti=K8.dirname(ai);function ei($){return LM($)}function RM($){return K8.dirname(ei($))}function J5(){let $=ZQ("package.json",{cwd:ti});if(!$)throw Error("Não foi possível encontrar a raiz da extensão (package.json não encontrado).");return K8.dirname($)}function F4(){return K8.join(J5(),"teammates")}function EM(){return K8.join(J5(),"prompts")}function QQ($){let q=ZQ(".pi",{cwd:$,type:"directory"});if(q)return K8.join(q,"teammates");return null}function VU($=process.cwd()){return ZQ(".pi",{cwd:$,type:"directory"})||null}function CM($,q=process.cwd()){let J=VU(q);if(J){let X=K8.join(J,$);return ri.existsSync(X)?X:null}return null}function AM($=process.cwd()){return CM("pipa.config.ts",$)}function KU($=process.cwd()){return CM("PROFILE.md",$)}async function TM($,q,J){let X=[F4(),QQ($)];for(let H of X){if(!H)continue;let K=Zo.join(H,"SYSTEM_AGENTS.md");if(SM.existsSync(K))J+=`
|
|
127
127
|
|
|
128
|
-
`+SM.readFileSync(K,"utf8")}let Z=await Jo.create(),U=Xo.
|
|
128
|
+
`+SM.readFileSync(K,"utf8")}let Z=await Jo.create(),U=Xo.inMemory($,{parentSession:q}),W=new $o({cwd:$,agentDir:qo(),systemPrompt:J});return await W.reload(),{sessionManager:U,modelRuntime:Z,resourceLoader:W,systemPrompt:J}}var Qo=new Intl.NumberFormat("en-US",{notation:"compact",maximumFractionDigits:1});function G4($){if(typeof $!=="number"||isNaN($))return"0";return Qo.format($).toLowerCase()}import X5 from"node:path";import YQ from"node:fs";function UQ($){return!KU($.context.cwd)&&!YQ.existsSync(X5.join(J5(),"PROFILE.md"))}function jM($){if(KU($.context.cwd))return;let q=VU($.context.cwd)||X5.join($.context.cwd,".pi"),J=X5.join(q,"PROFILE.md"),X=X5.join(J5(),"PROFILE.md");if(YQ.existsSync(X))YQ.mkdirSync(X5.dirname(J),{recursive:!0}),YQ.copyFileSync(X,J)}function mM($,q,J){let X=$.indexOf(q);if(X===-1)return $;let Z=q.length,U=0,W="";do W+=$.slice(U,X)+q+J,U=X+Z,X=$.indexOf(q,U);while(X!==-1);return W+=$.slice(U),W}function fM($,q,J,X){let Z=0,U="";do{let W=$[X-1]==="\r";U+=$.slice(Z,W?X-1:X)+q+(W?`\r
|
|
129
129
|
`:`
|
|
130
130
|
`)+J,Z=X+1,X=$.indexOf(`
|
|
131
131
|
`,Z)}while(X!==-1);return U+=$.slice(Z),U}var xM=($=0)=>(q)=>`\x1B[${q+$}m`,zU=($=0)=>(q)=>`\x1B[${38+$};5;${q}m`,BU=($=0)=>(q,J,X)=>`\x1B[${38+$};2;${q};${J};${X}m`,Yo=($)=>`\x1B[58;5;${$<90?$-30:$-90+8}m`,R0={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],underlineDouble:["4:2",24],underlineCurly:["4:3",24],underlineDotted:["4:4",24],underlineDashed:["4:5",24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]},underlineColor:{underlineBlack:["58;5;0",59],underlineRed:["58;5;1",59],underlineGreen:["58;5;2",59],underlineYellow:["58;5;3",59],underlineBlue:["58;5;4",59],underlineMagenta:["58;5;5",59],underlineCyan:["58;5;6",59],underlineWhite:["58;5;7",59],underlineBlackBright:["58;5;8",59],underlineGray:["58;5;8",59],underlineGrey:["58;5;8",59],underlineRedBright:["58;5;9",59],underlineGreenBright:["58;5;10",59],underlineYellowBright:["58;5;11",59],underlineBlueBright:["58;5;12",59],underlineMagentaBright:["58;5;13",59],underlineCyanBright:["58;5;14",59],underlineWhiteBright:["58;5;15",59]}},Ef$=Object.keys(R0.modifier),Uo=Object.keys(R0.color),Wo=Object.keys(R0.bgColor),Cf$=Object.keys(R0.underlineColor),Af$=[...Uo,...Wo];function wo(){let $=new Map;for(let[q,J]of Object.entries(R0)){for(let[X,Z]of Object.entries(J))R0[X]={open:`\x1B[${Z[0]}m`,close:`\x1B[${Z[1]}m`},J[X]=R0[X],$.set(Number.parseInt(Z[0],10),Z[1]);Object.defineProperty(R0,q,{value:J,enumerable:!1})}return Object.defineProperty(R0,"codes",{value:$,enumerable:!1}),R0.color.close="\x1B[39m",R0.bgColor.close="\x1B[49m",R0.underlineColor.close="\x1B[59m",R0.color.ansi=xM(),R0.color.ansi256=zU(),R0.color.ansi16m=BU(),R0.bgColor.ansi=xM(10),R0.bgColor.ansi256=zU(10),R0.bgColor.ansi16m=BU(10),R0.underlineColor.ansi=Yo,R0.underlineColor.ansi256=zU(20),R0.underlineColor.ansi16m=BU(20),Object.defineProperties(R0,{rgbToAnsi256:{value(q,J,X){if(q===J&&J===X){if(q<8)return 16;if(q>248)return 231;return Math.round((q-8)/247*24)+232}return 16+36*Math.round(q/255*5)+6*Math.round(J/255*5)+Math.round(X/255*5)},enumerable:!1},hexToRgb:{value(q){let J=/[\da-f]{6}|[\da-f]{3}/i.exec(q.toString(16));if(!J)return[0,0,0];let[X]=J;if(X.length===3)X=[...X].map((U)=>U+U).join("");let Z=Number.parseInt(X,16);return[Z>>16&255,Z>>8&255,Z&255]},enumerable:!1},hexToAnsi256:{value:(q)=>R0.rgbToAnsi256(...R0.hexToRgb(q)),enumerable:!1},ansi256ToAnsi:{value(q){if(q<8)return 30+q;if(q<16)return 90+(q-8);let J,X,Z;if(q>=232)J=((q-232)*10+8)/255,X=J,Z=J;else{q-=16;let H=q%36;J=Math.floor(q/36)/5,X=Math.floor(H/6)/5,Z=H%6/5}let U=Math.max(J,X,Z)*2;if(U===0)return 30;let W=30+(Math.round(Z)<<2|Math.round(X)<<1|Math.round(J));if(U===2)W+=60;return W},enumerable:!1},rgbToAnsi:{value:(q,J,X)=>R0.ansi256ToAnsi(R0.rgbToAnsi256(q,J,X)),enumerable:!1},hexToAnsi:{value:(q)=>R0.ansi256ToAnsi(R0.hexToAnsi256(q)),enumerable:!1}}),R0}var Ho=wo(),T9=Ho;import FU from"node:process";import Vo from"node:os";import IM from"node:tty";function lq($,q=globalThis.Deno?globalThis.Deno.args:FU.argv){let J=$.startsWith("-")?"":$.length===1?"-":"--",X=q.indexOf(J+$),Z=q.indexOf("--");return X!==-1&&(Z===-1||X<Z)}var{env:h0}=FU,WQ;if(lq("no-color")||lq("no-colors")||lq("color=false")||lq("color=never"))WQ=0;else if(lq("color")||lq("colors")||lq("color=true")||lq("color=always"))WQ=1;function kM(){return/^\d+$/.test(h0.FORCE_COLOR)}function Ko(){if(!("FORCE_COLOR"in h0))return;if(h0.FORCE_COLOR==="false")return 0;if(h0.FORCE_COLOR==="true"||h0.FORCE_COLOR.length===0)return 1;if(!kM())return;return Math.min(Number.parseInt(h0.FORCE_COLOR,10),3)}function zo($){if($===0)return!1;return{level:$,hasBasic:!0,has256:$>=2,has16m:$>=3}}function Bo($,{streamIsTTY:q,sniffFlags:J=!0}={}){let X=Ko();if(X!==void 0)WQ=X;let Z=J?WQ:X;if(Z===0)return 0;if(J){if(lq("color=16m")||lq("color=full")||lq("color=truecolor"))return 3;if(lq("color=256"))return 2}if(Z!==void 0&&kM())return Z;if("TF_BUILD"in h0&&"AGENT_NAME"in h0)return 1;if($&&!q&&Z===void 0)return 0;let U=Z||0;if(h0.TERM==="dumb")return U;if(FU.platform==="win32"){let W=Vo.release().split(".");if(Number(W[0])>=10&&Number(W[2])>=10586)return Number(W[2])>=14931?3:2;return 1}if("CI"in h0){if(["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some((W)=>(W in h0)))return 3;if(["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some((W)=>(W in h0))||h0.CI_NAME==="codeship")return 1;return U}if("TEAMCITY_VERSION"in h0)return/^(?:9\.0*[1-9]\d*\.|\d{2,}\.)/.test(h0.TEAMCITY_VERSION)?1:0;if(h0.COLORTERM==="truecolor")return 3;if(h0.TERM==="xterm-kitty")return 3;if(h0.TERM==="xterm-ghostty")return 3;if(h0.TERM==="wezterm")return 3;if("TERM_PROGRAM"in h0){let W=Number.parseInt((h0.TERM_PROGRAM_VERSION||"").split(".",1)[0],10);switch(h0.TERM_PROGRAM){case"iTerm.app":return W>=3?3:2;case"Apple_Terminal":return 2}}if(/-256(?:color)?$/i.test(h0.TERM))return 2;if(/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(h0.TERM))return 1;if("COLORTERM"in h0)return 1;return U}function _M($,q={}){let J=Bo($,{streamIsTTY:$&&$.isTTY,...q});return zo(J)}var Fo={stdout:_M({isTTY:IM.isatty(1)}),stderr:_M({isTTY:IM.isatty(2)})},bM=Fo;var{stdout:vM,stderr:gM}=bM,Z5=Symbol("GENERATOR"),Q5=Symbol("STYLER"),HQ=Symbol("IS_EMPTY"),wQ=Symbol("LEVEL"),Y5=Object.create(null),hM=($)=>{if(!Number.isSafeInteger($)||$<0||$>3)throw Error("The `level` should be an integer from 0 to 3")},Go={enumerable:!0,get(){return this[wQ]},set($){hM($),this[wQ]=$}},No=($,q={})=>{if(q.level!==void 0)hM(q.level);let J=vM?vM.level:0;$[wQ]=q.level===void 0?J:q.level};var Do=($)=>{let q=(...J)=>J.join(" ");return No(q,$),Object.setPrototypeOf(q,U5.prototype),q};function U5($){return Do($)}Object.setPrototypeOf(U5.prototype,Function.prototype);for(let[$,q]of Object.entries(T9))Y5[$]={get(){let J=NU(this,yM(q.open,q.close,this[Q5]),this[HQ]);return Object.defineProperty(this,$,{value:J}),J}};Y5.visible={get(){let $=NU(this,this[Q5],!0);return Object.defineProperty(this,"visible",{value:$}),$}};var Po=($,q)=>{let J=T9[q];if($==="rgb"){let Z=(W,H,K)=>J.ansi(T9.rgbToAnsi(W,H,K));return[Z,Z,(W,H,K)=>J.ansi256(T9.rgbToAnsi256(W,H,K)),J.ansi16m]}if($==="hex"){let Z=(W)=>J.ansi(T9.hexToAnsi(W));return[Z,Z,(W)=>J.ansi256(T9.hexToAnsi256(W)),(W)=>J.ansi16m(...T9.hexToRgb(W))]}let X=(Z)=>J.ansi(T9.ansi256ToAnsi(Z));return[X,X,J.ansi256,J.ansi256]},Oo=["rgb","hex","ansi256"];for(let $ of Oo){let q=$[0].toUpperCase()+$.slice(1);for(let[J,X]of[[$,"color"],["bg"+q,"bgColor"],["underline"+q,"underlineColor"]]){let{close:Z}=T9[X],U=Po($,X);Y5[J]={get(){let W=function(H,K,F){let B=U[this.level](H,K,F);return NU(this,yM(B,Z,this[Q5]),this[HQ])};return Object.defineProperty(this,J,{value:W}),W}}}}var Mo=Object.defineProperties(()=>{},{...Y5,level:{enumerable:!0,get(){return this[Z5].level},set($){this[Z5].level=$}}}),yM=($,q,J)=>{let X,Z;if(J===void 0)X=$,Z=q;else X=J.openAll+$,Z=q+J.closeAll;return{open:$,close:q,openAll:X,closeAll:Z,parent:J}},NU=($,q,J)=>{let X=(...Z)=>{if(Z.length===1)return GU(X,""+Z[0]);if(Z.length===2)return GU(X,Z[0]+" "+Z[1]);return GU(X,Z.join(" "))};return Object.setPrototypeOf(X,Mo),X[Z5]=$[Z5]??$,X[Q5]=q,X[HQ]=J,X},GU=($,q)=>{if($[Z5][wQ]<=0||!q)return $[HQ]?"":q;let J=$[Q5];if(J===void 0)return q;let{openAll:X,closeAll:Z}=J;if(q.includes("\x1B"))while(J!==void 0)q=mM(q,J.close,J.open),J=J.parent;let U=q.indexOf(`
|
|
@@ -133,16 +133,16 @@ ${Z}`:Z}case"replace":return X.replace(JQ(q.value),JQ(q.replacement));default:th
|
|
|
133
133
|
`:" ";return`${J}-${K}${H}`}).filter(Boolean).join(`
|
|
134
134
|
`);let Z=Object.entries($);if(Z.length===0)return"";return Z.map(([U,W])=>{let H=GQ(W,q+1);if(!H)return"";let K=So[U]||U,F=X(W)?`
|
|
135
135
|
`:" ";return`${J}* **${K}**:${F}${H}`}).filter(Boolean).join(`
|
|
136
|
-
`)}var qL=b$(x0(),1),j9=($,q,J)=>{let X={};for(let Z in q)if(Object.hasOwn(q,Z)){let U=qL.camelCase(Z),W=$[U];if(typeof W==="function")X[Z]=W.bind($,J)}return X};function jq($,q){return A.Union($.map((J)=>A.Literal(J)),q)}import To from"node:os";import jo from"node:path";var mo=jo.join(To.homedir(),".pi","compact");var T5=b$(x0(),1);import{createAgentSession as AJ$}from"@earendil-works/pi-coding-agent";var JL="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var QL=65536;function PU($){let q=0;while(q<$.length){let J=Math.min(q+QL,$.length);crypto.getRandomValues($.subarray(q,J)),q=J}}function XL($){if($|=0,$<0)throw RangeError("Wrong ID size");let q=Buffer.allocUnsafe($);return PU(q),q}function ZL($,q,J){let X=256-256%$.length;if(X===256){let U=$.length-1;return(W=q)=>{if(!W)return"";let H="";while(!0){let K=J(W),F=W;while(F--)if(H+=$[K[F]&U],H.length>=W)return H}}}let Z=Math.ceil(409.6*q/X);return(U=q)=>{if(!U)return"";let W="";while(!0){let H=J(Z),K=Z;while(K--)if(H[K]<X){if(W+=$[H[K]%$.length],W.length>=U)return W}}}}var fo=QL/2;function xo($,q=21){if(typeof $!=="string"||!$||$.length>256)return ZL($,q,XL);for(let K=0;K<$.length;K++)if($.charCodeAt(K)>255)return ZL($,q,XL);let J=Uint8Array.from($,(K)=>{return K.charCodeAt(0)}),X=$.length,Z=(2<<31-Math.clz32(X-1|1))-1,U="",W=0,H=0;return(K=q)=>{if(K|=0,K<0)throw RangeError("Wrong ID size");if(K===0)return"";if(W+K>U.length){let F=Math.max(H,K);H=Math.min(F*16,fo);let B=Buffer.allocUnsafe(F);if(Z===X-1){PU(B);for(let P=0;P<F;P++)B[P]=J[B[P]&Z]}else{let P=Buffer.allocUnsafe(Math.ceil(1.6*(Z+1)*F/X)),M=0;while(M<F){PU(P);for(let R=0;R<P.length;R++){let S=P[R]&Z;if(S<X){if(B[M++]=J[S],M===F)break}}}}U=B.toString("latin1"),W=0}return W+=K,U.substring(W-K,W)}}var m9=xo(JL);var uj=b$(f6(),1);import dj from"node:path";var N4="TEAMMATES_STORE",z8="TASKS_STORE",NQ="BACKLOG_STORE",OU="DOCS_STORE",DQ="MAIN_SESSION";globalThis.store??=new Map;class E0{static set($,q){return globalThis.store.set($,q),q}static get($){return globalThis.store.get($)}}var H5=b$(x0(),1);import vL from"node:path";var Io=Math.pow(10,8)*24*60*60*1000,mx$=-Io,PQ=604800000,YL=86400000;var MU=Symbol.for("constructDateFrom");function Bq($,q){if(typeof $==="function")return $(q);if($&&typeof $==="object"&&MU in $)return $[MU](q);if($ instanceof Date)return new $.constructor(q);return new Date(q)}function X6($,q){return Bq(q||$,$)}var _o={};function fJ(){return _o}function i9($,q){let J=fJ(),X=q?.weekStartsOn??q?.locale?.options?.weekStartsOn??J.weekStartsOn??J.locale?.options?.weekStartsOn??0,Z=X6($,q?.in),U=Z.getDay(),W=(U<X?7:0)+U-X;return Z.setDate(Z.getDate()-W),Z.setHours(0,0,0,0),Z}function B8($,q){return i9($,{...q,weekStartsOn:1})}function OQ($,q){let J=X6($,q?.in),X=J.getFullYear(),Z=Bq(J,0);Z.setFullYear(X+1,0,4),Z.setHours(0,0,0,0);let U=B8(Z),W=Bq(J,0);W.setFullYear(X,0,4),W.setHours(0,0,0,0);let H=B8(W);if(J.getTime()>=U.getTime())return X+1;else if(J.getTime()>=H.getTime())return X;else return X-1}function LU($){let q=X6($),J=new Date(Date.UTC(q.getFullYear(),q.getMonth(),q.getDate(),q.getHours(),q.getMinutes(),q.getSeconds(),q.getMilliseconds()));return J.setUTCFullYear(q.getFullYear()),+$-+J}function UL($,...q){let J=Bq.bind(null,$||q.find((X)=>typeof X==="object"));return q.map(J)}function RU($,q){let J=X6($,q?.in);return J.setHours(0,0,0,0),J}function WL($,q,J){let[X,Z]=UL(J?.in,$,q),U=RU(X),W=RU(Z),H=+U-LU(U),K=+W-LU(W);return Math.round((H-K)/YL)}function wL($,q){let J=OQ($,q),X=Bq(q?.in||$,0);return X.setFullYear(J,0,4),X.setHours(0,0,0,0),B8(X)}function HL($){return $ instanceof Date||typeof $==="object"&&Object.prototype.toString.call($)==="[object Date]"}function VL($){return!(!HL($)&&typeof $!=="number"||isNaN(+X6($)))}function KL($,q){let J=X6($,q?.in);return J.setFullYear(J.getFullYear(),0,1),J.setHours(0,0,0,0),J}var ko={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},zL=($,q,J)=>{let X,Z=ko[$];if(typeof Z==="string")X=Z;else if(q===1)X=Z.one;else X=Z.other.replace("{{count}}",q.toString());if(J?.addSuffix)if(J.comparison&&J.comparison>0)return"in "+X;else return X+" ago";return X};function MQ($){return(q={})=>{let J=q.width?String(q.width):$.defaultWidth;return $.formats[J]||$.formats[$.defaultWidth]}}var bo={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},vo={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},go={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},BL={date:MQ({formats:bo,defaultWidth:"full"}),time:MQ({formats:vo,defaultWidth:"full"}),dateTime:MQ({formats:go,defaultWidth:"full"})};var ho={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},FL=($,q,J,X)=>ho[$];function D4($){return(q,J)=>{let X=J?.context?String(J.context):"standalone",Z;if(X==="formatting"&&$.formattingValues){let W=$.defaultFormattingWidth||$.defaultWidth,H=J?.width?String(J.width):W;Z=$.formattingValues[H]||$.formattingValues[W]}else{let W=$.defaultWidth,H=J?.width?String(J.width):$.defaultWidth;Z=$.values[H]||$.values[W]}let U=$.argumentCallback?$.argumentCallback(q):q;return Z[U]}}var yo={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},co={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},uo={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},lo={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},po={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},no={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},io=($,q)=>{let J=Number($),X=J%100;if(X>20||X<10)switch(X%10){case 1:return J+"st";case 2:return J+"nd";case 3:return J+"rd"}return J+"th"},GL={ordinalNumber:io,era:D4({values:yo,defaultWidth:"wide"}),quarter:D4({values:co,defaultWidth:"wide",argumentCallback:($)=>$-1}),month:D4({values:uo,defaultWidth:"wide"}),day:D4({values:lo,defaultWidth:"wide"}),dayPeriod:D4({values:po,defaultWidth:"wide",formattingValues:no,defaultFormattingWidth:"wide"})};function P4($){return(q,J={})=>{let X=J.width,Z=X&&$.matchPatterns[X]||$.matchPatterns[$.defaultMatchWidth],U=q.match(Z);if(!U)return null;let W=U[0],H=X&&$.parsePatterns[X]||$.parsePatterns[$.defaultParseWidth],K=Array.isArray(H)?so(H,(P)=>P.test(W)):oo(H,(P)=>P.test(W)),F;F=$.valueCallback?$.valueCallback(K):K,F=J.valueCallback?J.valueCallback(F):F;let B=q.slice(W.length);return{value:F,rest:B}}}function oo($,q){for(let J in $)if(Object.prototype.hasOwnProperty.call($,J)&&q($[J]))return J;return}function so($,q){for(let J=0;J<$.length;J++)if(q($[J]))return J;return}function NL($){return(q,J={})=>{let X=q.match($.matchPattern);if(!X)return null;let Z=X[0],U=q.match($.parsePattern);if(!U)return null;let W=$.valueCallback?$.valueCallback(U[0]):U[0];W=J.valueCallback?J.valueCallback(W):W;let H=q.slice(Z.length);return{value:W,rest:H}}}var ro=/^(\d+)(th|st|nd|rd)?/i,ao=/\d+/i,to={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},eo={any:[/^b/i,/^(a|c)/i]},$s={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},qs={any:[/1/i,/2/i,/3/i,/4/i]},Js={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},Xs={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},Zs={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},Qs={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},Ys={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},Us={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},DL={ordinalNumber:NL({matchPattern:ro,parsePattern:ao,valueCallback:($)=>parseInt($,10)}),era:P4({matchPatterns:to,defaultMatchWidth:"wide",parsePatterns:eo,defaultParseWidth:"any"}),quarter:P4({matchPatterns:$s,defaultMatchWidth:"wide",parsePatterns:qs,defaultParseWidth:"any",valueCallback:($)=>$+1}),month:P4({matchPatterns:Js,defaultMatchWidth:"wide",parsePatterns:Xs,defaultParseWidth:"any"}),day:P4({matchPatterns:Zs,defaultMatchWidth:"wide",parsePatterns:Qs,defaultParseWidth:"any"}),dayPeriod:P4({matchPatterns:Ys,defaultMatchWidth:"any",parsePatterns:Us,defaultParseWidth:"any"})};var EU={code:"en-US",formatDistance:zL,formatLong:BL,formatRelative:FL,localize:GL,match:DL,options:{weekStartsOn:0,firstWeekContainsDate:1}};function PL($,q){let J=X6($,q?.in);return WL(J,KL(J))+1}function OL($,q){let J=X6($,q?.in),X=+B8(J)-+wL(J);return Math.round(X/PQ)+1}function LQ($,q){let J=X6($,q?.in),X=J.getFullYear(),Z=fJ(),U=q?.firstWeekContainsDate??q?.locale?.options?.firstWeekContainsDate??Z.firstWeekContainsDate??Z.locale?.options?.firstWeekContainsDate??1,W=Bq(q?.in||$,0);W.setFullYear(X+1,0,U),W.setHours(0,0,0,0);let H=i9(W,q),K=Bq(q?.in||$,0);K.setFullYear(X,0,U),K.setHours(0,0,0,0);let F=i9(K,q);if(+J>=+H)return X+1;else if(+J>=+F)return X;else return X-1}function ML($,q){let J=fJ(),X=q?.firstWeekContainsDate??q?.locale?.options?.firstWeekContainsDate??J.firstWeekContainsDate??J.locale?.options?.firstWeekContainsDate??1,Z=LQ($,q),U=Bq(q?.in||$,0);return U.setFullYear(Z,0,X),U.setHours(0,0,0,0),i9(U,q)}function LL($,q){let J=X6($,q?.in),X=+i9(J,q)-+ML(J,q);return Math.round(X/PQ)+1}function D0($,q){let J=$<0?"-":"",X=Math.abs($).toString().padStart(q,"0");return J+X}var o9={y($,q){let J=$.getFullYear(),X=J>0?J:1-J;return D0(q==="yy"?X%100:X,q.length)},M($,q){let J=$.getMonth();return q==="M"?String(J+1):D0(J+1,2)},d($,q){return D0($.getDate(),q.length)},a($,q){let J=$.getHours()/12>=1?"pm":"am";switch(q){case"a":case"aa":return J.toUpperCase();case"aaa":return J;case"aaaaa":return J[0];case"aaaa":default:return J==="am"?"a.m.":"p.m."}},h($,q){return D0($.getHours()%12||12,q.length)},H($,q){return D0($.getHours(),q.length)},m($,q){return D0($.getMinutes(),q.length)},s($,q){return D0($.getSeconds(),q.length)},S($,q){let J=q.length,X=$.getMilliseconds(),Z=Math.trunc(X*Math.pow(10,J-3));return D0(Z,q.length)}};var O4={am:"am",pm:"pm",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},CU={G:function($,q,J){let X=$.getFullYear()>0?1:0;switch(q){case"G":case"GG":case"GGG":return J.era(X,{width:"abbreviated"});case"GGGGG":return J.era(X,{width:"narrow"});case"GGGG":default:return J.era(X,{width:"wide"})}},y:function($,q,J){if(q==="yo"){let X=$.getFullYear(),Z=X>0?X:1-X;return J.ordinalNumber(Z,{unit:"year"})}return o9.y($,q)},Y:function($,q,J,X){let Z=LQ($,X),U=Z>0?Z:1-Z;if(q==="YY"){let W=U%100;return D0(W,2)}if(q==="Yo")return J.ordinalNumber(U,{unit:"year"});return D0(U,q.length)},R:function($,q){let J=OQ($);return D0(J,q.length)},u:function($,q){let J=$.getFullYear();return D0(J,q.length)},Q:function($,q,J){let X=Math.ceil(($.getMonth()+1)/3);switch(q){case"Q":return String(X);case"QQ":return D0(X,2);case"Qo":return J.ordinalNumber(X,{unit:"quarter"});case"QQQ":return J.quarter(X,{width:"abbreviated",context:"formatting"});case"QQQQQ":return J.quarter(X,{width:"narrow",context:"formatting"});case"QQQQ":default:return J.quarter(X,{width:"wide",context:"formatting"})}},q:function($,q,J){let X=Math.ceil(($.getMonth()+1)/3);switch(q){case"q":return String(X);case"qq":return D0(X,2);case"qo":return J.ordinalNumber(X,{unit:"quarter"});case"qqq":return J.quarter(X,{width:"abbreviated",context:"standalone"});case"qqqqq":return J.quarter(X,{width:"narrow",context:"standalone"});case"qqqq":default:return J.quarter(X,{width:"wide",context:"standalone"})}},M:function($,q,J){let X=$.getMonth();switch(q){case"M":case"MM":return o9.M($,q);case"Mo":return J.ordinalNumber(X+1,{unit:"month"});case"MMM":return J.month(X,{width:"abbreviated",context:"formatting"});case"MMMMM":return J.month(X,{width:"narrow",context:"formatting"});case"MMMM":default:return J.month(X,{width:"wide",context:"formatting"})}},L:function($,q,J){let X=$.getMonth();switch(q){case"L":return String(X+1);case"LL":return D0(X+1,2);case"Lo":return J.ordinalNumber(X+1,{unit:"month"});case"LLL":return J.month(X,{width:"abbreviated",context:"standalone"});case"LLLLL":return J.month(X,{width:"narrow",context:"standalone"});case"LLLL":default:return J.month(X,{width:"wide",context:"standalone"})}},w:function($,q,J,X){let Z=LL($,X);if(q==="wo")return J.ordinalNumber(Z,{unit:"week"});return D0(Z,q.length)},I:function($,q,J){let X=OL($);if(q==="Io")return J.ordinalNumber(X,{unit:"week"});return D0(X,q.length)},d:function($,q,J){if(q==="do")return J.ordinalNumber($.getDate(),{unit:"date"});return o9.d($,q)},D:function($,q,J){let X=PL($);if(q==="Do")return J.ordinalNumber(X,{unit:"dayOfYear"});return D0(X,q.length)},E:function($,q,J){let X=$.getDay();switch(q){case"E":case"EE":case"EEE":return J.day(X,{width:"abbreviated",context:"formatting"});case"EEEEE":return J.day(X,{width:"narrow",context:"formatting"});case"EEEEEE":return J.day(X,{width:"short",context:"formatting"});case"EEEE":default:return J.day(X,{width:"wide",context:"formatting"})}},e:function($,q,J,X){let Z=$.getDay(),U=(Z-X.weekStartsOn+8)%7||7;switch(q){case"e":return String(U);case"ee":return D0(U,2);case"eo":return J.ordinalNumber(U,{unit:"day"});case"eee":return J.day(Z,{width:"abbreviated",context:"formatting"});case"eeeee":return J.day(Z,{width:"narrow",context:"formatting"});case"eeeeee":return J.day(Z,{width:"short",context:"formatting"});case"eeee":default:return J.day(Z,{width:"wide",context:"formatting"})}},c:function($,q,J,X){let Z=$.getDay(),U=(Z-X.weekStartsOn+8)%7||7;switch(q){case"c":return String(U);case"cc":return D0(U,q.length);case"co":return J.ordinalNumber(U,{unit:"day"});case"ccc":return J.day(Z,{width:"abbreviated",context:"standalone"});case"ccccc":return J.day(Z,{width:"narrow",context:"standalone"});case"cccccc":return J.day(Z,{width:"short",context:"standalone"});case"cccc":default:return J.day(Z,{width:"wide",context:"standalone"})}},i:function($,q,J){let X=$.getDay(),Z=X===0?7:X;switch(q){case"i":return String(Z);case"ii":return D0(Z,q.length);case"io":return J.ordinalNumber(Z,{unit:"day"});case"iii":return J.day(X,{width:"abbreviated",context:"formatting"});case"iiiii":return J.day(X,{width:"narrow",context:"formatting"});case"iiiiii":return J.day(X,{width:"short",context:"formatting"});case"iiii":default:return J.day(X,{width:"wide",context:"formatting"})}},a:function($,q,J){let Z=$.getHours()/12>=1?"pm":"am";switch(q){case"a":case"aa":return J.dayPeriod(Z,{width:"abbreviated",context:"formatting"});case"aaa":return J.dayPeriod(Z,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return J.dayPeriod(Z,{width:"narrow",context:"formatting"});case"aaaa":default:return J.dayPeriod(Z,{width:"wide",context:"formatting"})}},b:function($,q,J){let X=$.getHours(),Z;if(X===12)Z=O4.noon;else if(X===0)Z=O4.midnight;else Z=X/12>=1?"pm":"am";switch(q){case"b":case"bb":return J.dayPeriod(Z,{width:"abbreviated",context:"formatting"});case"bbb":return J.dayPeriod(Z,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return J.dayPeriod(Z,{width:"narrow",context:"formatting"});case"bbbb":default:return J.dayPeriod(Z,{width:"wide",context:"formatting"})}},B:function($,q,J){let X=$.getHours(),Z;if(X>=17)Z=O4.evening;else if(X>=12)Z=O4.afternoon;else if(X>=4)Z=O4.morning;else Z=O4.night;switch(q){case"B":case"BB":case"BBB":return J.dayPeriod(Z,{width:"abbreviated",context:"formatting"});case"BBBBB":return J.dayPeriod(Z,{width:"narrow",context:"formatting"});case"BBBB":default:return J.dayPeriod(Z,{width:"wide",context:"formatting"})}},h:function($,q,J){if(q==="ho"){let X=$.getHours()%12;if(X===0)X=12;return J.ordinalNumber(X,{unit:"hour"})}return o9.h($,q)},H:function($,q,J){if(q==="Ho")return J.ordinalNumber($.getHours(),{unit:"hour"});return o9.H($,q)},K:function($,q,J){let X=$.getHours()%12;if(q==="Ko")return J.ordinalNumber(X,{unit:"hour"});return D0(X,q.length)},k:function($,q,J){let X=$.getHours();if(X===0)X=24;if(q==="ko")return J.ordinalNumber(X,{unit:"hour"});return D0(X,q.length)},m:function($,q,J){if(q==="mo")return J.ordinalNumber($.getMinutes(),{unit:"minute"});return o9.m($,q)},s:function($,q,J){if(q==="so")return J.ordinalNumber($.getSeconds(),{unit:"second"});return o9.s($,q)},S:function($,q){return o9.S($,q)},X:function($,q,J){let X=$.getTimezoneOffset();if(X===0)return"Z";switch(q){case"X":return EL(X);case"XXXX":case"XX":return F8(X);case"XXXXX":case"XXX":default:return F8(X,":")}},x:function($,q,J){let X=$.getTimezoneOffset();switch(q){case"x":return EL(X);case"xxxx":case"xx":return F8(X);case"xxxxx":case"xxx":default:return F8(X,":")}},O:function($,q,J){let X=$.getTimezoneOffset();switch(q){case"O":case"OO":case"OOO":return"GMT"+RL(X,":");case"OOOO":default:return"GMT"+F8(X,":")}},z:function($,q,J){let X=$.getTimezoneOffset();switch(q){case"z":case"zz":case"zzz":return"GMT"+RL(X,":");case"zzzz":default:return"GMT"+F8(X,":")}},t:function($,q,J){let X=Math.trunc(+$/1000);return D0(X,q.length)},T:function($,q,J){return D0(+$,q.length)}};function RL($,q=""){let J=$>0?"-":"+",X=Math.abs($),Z=Math.trunc(X/60),U=X%60;if(U===0)return J+String(Z);return J+String(Z)+q+D0(U,2)}function EL($,q){if($%60===0)return($>0?"-":"+")+D0(Math.abs($)/60,2);return F8($,q)}function F8($,q=""){let J=$>0?"-":"+",X=Math.abs($),Z=D0(Math.trunc(X/60),2),U=D0(X%60,2);return J+Z+q+U}var CL=($,q)=>{switch($){case"P":return q.date({width:"short"});case"PP":return q.date({width:"medium"});case"PPP":return q.date({width:"long"});case"PPPP":default:return q.date({width:"full"})}},AL=($,q)=>{switch($){case"p":return q.time({width:"short"});case"pp":return q.time({width:"medium"});case"ppp":return q.time({width:"long"});case"pppp":default:return q.time({width:"full"})}},Ws=($,q)=>{let J=$.match(/(P+)(p+)?/)||[],X=J[1],Z=J[2];if(!Z)return CL($,q);let U;switch(X){case"P":U=q.dateTime({width:"short"});break;case"PP":U=q.dateTime({width:"medium"});break;case"PPP":U=q.dateTime({width:"long"});break;case"PPPP":default:U=q.dateTime({width:"full"});break}return U.replace("{{date}}",CL(X,q)).replace("{{time}}",AL(Z,q))},SL={p:AL,P:Ws};var ws=/^D+$/,Hs=/^Y+$/,Vs=["D","DD","YY","YYYY"];function TL($){return ws.test($)}function jL($){return Hs.test($)}function mL($,q,J){let X=Ks($,q,J);if(console.warn(X),Vs.includes($))throw RangeError(X)}function Ks($,q,J){let X=$[0]==="Y"?"years":"days of the month";return`Use \`${$.toLowerCase()}\` instead of \`${$}\` (in \`${q}\`) for formatting ${X} to the input \`${J}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}var zs=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Bs=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Fs=/^'([^]*?)'?$/,Gs=/''/g,Ns=/[a-zA-Z]/;function fL($,q,J){let X=fJ(),Z=J?.locale??X.locale??EU,U=J?.firstWeekContainsDate??J?.locale?.options?.firstWeekContainsDate??X.firstWeekContainsDate??X.locale?.options?.firstWeekContainsDate??1,W=J?.weekStartsOn??J?.locale?.options?.weekStartsOn??X.weekStartsOn??X.locale?.options?.weekStartsOn??0,H=X6($,J?.in);if(!VL(H))throw RangeError("Invalid time value");let K=q.match(Bs).map((B)=>{let P=B[0];if(P==="p"||P==="P"){let M=SL[P];return M(B,Z.formatLong)}return B}).join("").match(zs).map((B)=>{if(B==="''")return{isToken:!1,value:"'"};let P=B[0];if(P==="'")return{isToken:!1,value:Ds(B)};if(CU[P])return{isToken:!0,value:B};if(P.match(Ns))throw RangeError("Format string contains an unescaped latin alphabet character `"+P+"`");return{isToken:!1,value:B}});if(Z.localize.preprocessor)K=Z.localize.preprocessor(H,K);let F={firstWeekContainsDate:U,weekStartsOn:W,locale:Z};return K.map((B)=>{if(!B.isToken)return B.value;let P=B.value;if(!J?.useAdditionalWeekYearTokens&&jL(P)||!J?.useAdditionalDayOfYearTokens&&TL(P))mL(P,q,String($));let M=CU[P[0]];return M(H,P,Z.localize,F)}).join("")}function Ds($){let q=$.match(Fs);if(!q)return $;return q[1].replace(Gs,"'")}var M4=b$(x0(),1);var RQ=b$(x0(),1);import{pathToFileURL as Ms}from"node:url";var Ls={teammate:{nudgeMode:"steer",hideTools:!1,hideModelName:!1,concurrentlyModels:[],cycling:{events:[],models:[]}},tasks:{maxVisible:5}},_L={},kL={};try{_L=(await Promise.resolve().then(() => (IL(),xL))).default}catch{}try{let $=AM();if($)kL=(await import(Ms($).href)).default}catch($){throw Error(`Falha ao carregar pipa.config.ts do usuário: ${$.message}`)}var k6=RQ.mergeWith({},Ls,_L,kL,($,q)=>{if(RQ.isArray($))return q});import Rs from"node-notifier";import{activeWindow as Es}from"get-windows";import{resolve as Cs}from"node:path";var As=RM(import.meta.url),Ss=new Set(["WindowsTerminal.exe","Code.exe","cmd.exe","powershell.exe","pwsh.exe","Terminal","iTerm2","Code","Cursor","gnome-terminal-server","konsole","xterm","alacritty","kitty","Warp","Zap"]);class AU{interpolations;activeToasts=new Set;constructor($){this.interpolations=$}async sendToast($){try{let Z=await Es();if(Z&&Ss.has(Z.owner.name))return}catch(Z){console.warn("Falha ao verificar foco da janela",Z)}let q=this.interpolations()||{},J=Q9($.message,q);if(this.activeToasts.has(J))return;this.activeToasts.add(J);let X={...$,title:"Pipa",message:J,icon:Cs(As,"../assets/logo_pipa.png")};Rs.notify(X,()=>{this.activeToasts.delete(J)})}async show($,q){return this.sendToast({message:$,...q})}}globalThis.mainPipaApi={};var Y9=()=>{return globalThis.mainPipaApi};function SU($,q){let J=new AU(()=>s.find(q.sessionManager.getSessionId())||{}),X={...$,context:q,toast:J,sessionId:q.sessionManager.getSessionId(),nudge(U,W="",H){W=(Array.isArray(W)?W:[W]).filter(Boolean);let K=W.map((R)=>{return{type:"text",text:M4.truncate(p(R),{length:250,separator:/,? +/,omission:"..."})}}),F=`Update (${fL(new Date,"HH:mm:ss")}):${Tq.unorderedList(K,({text:R})=>R)}`,{session:B,role:P}=s.find(X.sessionId)??{};if(K.length&&P==="main")J.show(F);if(K.length)q.ui.notify(F,"info");if(!H)return;let M=GQ(H);if(!B||k6.teammate.nudgeMode!=="abort")$.sendMessage({display:!1,customType:U,content:[{type:"text",text:M}]},{deliverAs:"steer",triggerTurn:!0});else B.abort().catch(()=>{}).finally(()=>{B.prompt(M)})},getAvailableModel(U){let{cycling:W,concurrentlyModels:H}=k6.teammate;if(W.models.length===0)return U;let{candidates:K,running:F}=bL(q);return K.find(({id:B})=>H.includes(B)||!F.has(B))||U},async cycleModel(){let{concurrentlyModels:U}=k6.teammate,W=s.find(X.sessionId)?.session;if(!W)return;let{candidates:H,running:K}=bL(q,(B)=>B.sessionId!==W.sessionId),F=H.findIndex((B)=>B.id===W.model?.id);for(let B=1;B<=H.length;B++){let P=(F+B)%H.length,M=H[P];if(!M)continue;if(U.includes(M.id)||!K.has(M.id))return W.setModel(M)}}},Z=globalThis.mainPipaApi;if(M4.isEmpty(Z))M4.merge(globalThis.mainPipaApi,X);return X}var bL=($,q=()=>!0)=>{let{cycling:J}=k6.teammate,X={candidates:[],running:new Set};if(J.models.length===0)return X;if(X.candidates=lM($.modelRegistry.getAvailable().filter((Z)=>J.models.includes(Z.id)),J.models,(Z)=>Z.id),X.candidates.length===0)return X;return X.running=new Set(s.list().filter((Z)=>q(Z)&&Z.isRunning&&Z.session?.model).map((Z)=>Z.session.model.id)),X};class B0{static get store(){let $=E0.get(N4);if(!$)$=E0.set(N4,new Map);return $}static add($,q){return E0.set(N4,B0.store.set($,q)),q}static update($,q){let J=B0.get($);return Object.assign(J,q),E0.set(N4,B0.store.set($,J)),J}static get($){let q=B0.store.get($);if(!q){let J=Tq.unorderedList(B0.list(),({name:X,sessionId:Z})=>[X,Z],"Nenhum colega online");throw Error(p(`Não foi possível localizar o colega responsável pela sessão: ${$}.`,"Sessão não existe ou colega já foi dispensado.",`Sessões online no momento: ${J}`))}return q}static find($){return B0.store.get($)}static search($){return[...B0.store.values()].find($)}static list(){return[...B0.store.values()]}static listSubordinates($){let q=B0.list(),J=[],X=(Z)=>{let U=q.filter(({parentSessionId:W})=>W===Z);for(let W of U)J.push(W),X(W.sessionId)};return X($),J}static delete($){B0.store.delete($),E0.set(N4,B0.store)}}class L4{constructor($){Object.assign(this,$)}id;name;description;status;owner;blockedBy;parentTaskId;squad;directory;artifactFile;creatorId;role;createdAt;completedAt;get isPending(){return this.status==="pending"}get isCompleted(){return this.status==="completed"}get isInProgress(){return this.status==="in-progress"}get isSetup(){return this.status==="setup"}get isAssigned(){return!!this.owner}canManage($){return $.role==="main"||$.sessionId===this.creatorId}}class o{pipa;constructor($){this.pipa=$}static get fileManager(){return new t0(vL.join(W8,Y9().sessionId))}static get store(){let $=E0.get(z8);if(!$)$=E0.set(z8,new Map);return $}static load(){(new t0(vL.join(W8,Y9().sessionId)).read(u2)??[]).forEach((q)=>o.add(q))}static persist(){o.fileManager.save(u2,o.list(),($)=>$)}static add($){return E0.set(z8,o.store.set($.id,Object.assign(new L4({}),$))),o.persist(),o.get($.id)}static update($,q){let J=o.store.get($);if(!J)return q;return E0.set(z8,o.store.set($,Object.assign(new L4({}),J,q))),o.persist(),o.get($)}static get($){let q=o.store.get($);if(!q)throw Error(`Task state not found for id: ${$}`);return q}static find($){return o.store.get($)}static list($){let q=[...o.store.values()];if($)return q.filter((J)=>J.owner?.sessionId===$);return q}static search($){return o.list().filter($)}static findOne($){return o.list().find($)}static delete($){o.store.delete($),E0.set(z8,o.store),o.persist()}static clear(){o.store.clear(),E0.set(z8,o.store),o.persist()}static isUnblocked($){if(!$.blockedBy?.length)return!0;return $.blockedBy.every(({id:q,type:J})=>{let X=o.store.get(q);if(!X)return!0;if(J==="hard")return X.isCompleted;return!0})}static isEligibleForTask($,q){if(B0.find($.creatorId))return $.creatorId===q.sessionId;return $.role===q.name}static listAvailable(){return o.list().filter(($)=>{return $.isPending&&!$.owner&&o.isUnblocked($)})}static listByOwner($){return o.list().filter((q)=>q.owner?.sessionId===$)}static listActive(){return o.list().filter(($)=>["in-progress","setup"].includes($.status))}static hasActiveTask($){return o.list().some((q)=>q.owner?.sessionId===$&&["in-progress","setup"].includes(q.status))}static getActiveTask($){return o.list().find((q)=>q.owner?.sessionId===$&&["in-progress","setup"].includes(q.status))}static getUncompletedHardDependencies($){return $.blockedBy.flatMap(({type:q,id:J})=>q==="hard"?[o.find(J)]:[]).filter((q)=>q&&!q.isCompleted)}static hasUncompletedHardDependency($){return $.blockedBy.some(({type:q,id:J})=>{if(q!=="hard")return!1;return!!o.find(J)&&!o.get(J).isCompleted})}static syncParentStatus($){let q=o.find($);if(!q)return!1;let J=o.search((H)=>H.parentTaskId===$);if(!J.length)return!1;let X=H5.every(J,"isPending"),Z=H5.every(J,"isCompleted"),U=H5.some(J,"isInProgress"),W=q.status;if(Z)W="completed";else if(U)W="in-progress";else if(X)W="pending";if(q.status===W)return!1;return o.update($,{status:W}),!0}}import Ts from"node:fs";import js from"node:path";class O$ extends Error{action;tool;constructor($,...q){let[J,X]=$.split("."),[Z,...U]=q;super([`[${X}] `,Z,U?`: ${p(...U)}`:""].filter(Boolean).join(""));this.name="PipaException",this.action=X??"N/A",this.tool=J??"N/A"}}var I0={get:{code:"task.get",get failed(){return[this.code,"Falha durante consulta"]}},setup:{code:"task.setup",get failed(){return[this.code,"Falha durante configuração"]},get denied(){return[this.code,"Acesso negado para configurar"]}},claim:{code:"task.claim",get failed(){return[this.code,"Falha durante reivindicação"]}},instantiate:{code:"task.instantiate",get failed(){return[this.code,"Falha durante criação"]}},update:{code:"task.update",get failed(){return[this.code,"Falha durante atualização"]},get denied(){return[this.code,"Acesso negado para editar"]}},remove:{code:"task.remove",get failed(){return[this.code,"Falha durante remoção"]},get denied(){return[this.code,"Acesso negado"]}},complete:{code:"task.complete",get failed(){return[this.code,"Falha durante conclusão"]},get denied(){return[this.code,"Acesso negado"]}}},gL={"in-progress":"em andamento",pending:"pendente",stopped:"interrompida",completed:"concluída",setup:"configurando"};class TU{validateUniqueName($,q,J){let X=q==="instantiate"?I0.instantiate.failed:I0.update.failed;if(o.search(({name:U,id:W})=>U?.toLowerCase()===$.toLowerCase()&&W!==J).length)throw new O$(...X,`Já existe uma tarefa com o nome "${$}". A reivindique se possível ou trabalhe em outra.`);return{success:!0,data:void 0}}validateAntiOrphan($,q){let J=$.find((X)=>!o.find(X.id));if(J)throw new O$(...I0[q].failed,`Dependência inexistente: ID "${J.id}" não encontrado.`);return{success:!0,data:void 0}}canCreate($,q=[]){this.validateUniqueName($,"instantiate"),this.validateAntiOrphan(q,"instantiate")}canSetup($,q,J){let X=o.find($);if(!X)throw new O$(...I0.setup.failed,`Tarefa "${$}" não encontrada.`);if(X.status!=="setup")throw new O$(...I0.setup.failed,`Ação 'setup' permitida apenas para tarefas em status 'setup' (Atual: ${X.status}).`);return this.canUpdate($,q,J)}canUpdate($,q,J){let X=o.find($);if(!X)throw new O$(...I0.update.failed,`Tarefa "${$}" não encontrada.`);if(!X.canManage(J)&&X.owner?.sessionId!==J.sessionId)throw new O$(...I0.update.failed,"Somente o criador, dono ou main podem editar.");if(q.name)this.validateUniqueName(q.name,"update",$);if(q.blockedBy){this.validateAntiOrphan(q.blockedBy,"update");let Z=dM($,(U)=>{if(U===$)return q.blockedBy.map(({id:W})=>W);return o.find(U)?.blockedBy.map(({id:W})=>W)||[]});if(Z)throw new O$(...I0.update.failed,`Dependência circular detectada: ${Z.join(" -> ")}.`)}return X}canRemove($,q,J){let X=o.find($);if(!X)throw new O$(...I0.remove.failed,`Tarefa com ID ${$} não encontrada.`);if(X.isInProgress&&X.isAssigned&&!J)throw new O$(...I0.remove.failed,`Tarefa "${X.id}" atribuída e em andamento. Antes de remover, solicite a interrupção ou use force.`);if(J&&X.isInProgress&&X.isAssigned&&!X.canManage(q))throw new O$(...I0.remove.failed,"Somente o criador da tarefa ou main podem forçar a remoção de uma tarefa em andamento.");return X}canClaim($,q){if(q.role!=="subagent")throw new O$(...I0.claim.failed,"Apenas colegas podem reivindicar tarefas.");let J=o.find($);if(!J)throw new O$(...I0.claim.failed,`Tarefa com ID ${$} não encontrada.`);if(J.status!=="pending")throw new O$(...I0.claim.failed,`Tarefa "${J.name}" não está pendente.`);if(!o.isEligibleForTask(J,q))throw new O$(...I0.claim.failed,"Apenas o criador da tarefa (ou um colega com o mesmo papel, se o criador estiver offline) pode reivindicá-la.");let X=o.getUncompletedHardDependencies(J);if(X.length>0){let Z=X.map((U)=>`"${U.name}" (ID: ${U.id})`).join(", ");throw new O$(...I0.claim.failed,`Não é possível reivindicar a tarefa "${J.name}" porque ela possui dependências hard pendentes: ${Z}.`)}return J}canComplete($,q,J,X){if(X&&q.role!=="main")throw new O$(...I0.complete.failed,"Apenas o supervisor (main) pode forçar a conclusão de uma tarefa.");let Z=o.find($);if(!Z)throw new O$(...I0.complete.failed,`Tarefa com ID ${$} não encontrada.`);if(!J)throw new O$(...I0.complete.failed,"É obrigatório informar o caminho do arquivo de artefato (artifactFile) para completar a tarefa.");if(!Ts.existsSync(js.resolve(J)))throw new O$(...I0.complete.failed,`O arquivo de artefato informado ("${J}") não foi encontrado no disco. Certifique-se de que o path está correto e relativo à raiz do projeto.`);if(Z.status!=="in-progress"&&!X){let W=[`Tarefa "${Z.name}" não está em andamento. Status atual: ${Z.status}.`,...q.role==="main"?["Use force para concluir mesmo assim"]:[]];throw new O$(...I0.complete.failed,p(...W.filter(Boolean)))}if(!X&&q.role!=="main"&&Z.owner?.sessionId!==q.sessionId)throw new O$(...I0.complete.failed,`Você não é o dono da tarefa "${Z.name}". Somente o proprietário ou supervisor pode finalizá-la.`);let U=o.search((W)=>W.parentTaskId===$&&!W.isCompleted);if(U.length>0&&!X){let W=[`Não é possível concluir a tarefa "${Z.name}" pois ela possui ${U.length} subtarefa(s) não finalizada(s)`,...q.role==="main"?["Use force para concluir mesmo assim"]:[]];throw new O$(...I0.complete.failed,p(...W.filter(Boolean)))}return Z}}var jU=b$(x0(),1),hL=b$(f6(),1);class mU extends hL.Mixin(TU,o){pipa;constructor($){super();this.pipa=$}get({id:$}){let q=o.find($);if(!q)throw new O$(...I0.get.failed,`Tarefa com ID "${$}" não encontrada.`);return q}list({status:$}){let q=o.search((Z)=>!$||Z.status===$),{role:J,sessionId:X}=s.get(this.pipa.sessionId);if(J==="subagent")q=q.filter((Z)=>Z.creatorId===X||Z.owner?.sessionId===X);return q}setup({id:$,updates:q}){let J=s.get(this.pipa.sessionId);return this.canSetup($,q,J),o.update($,{...q,status:"in-progress",owner:jU.pick(J,["sessionId","name"])}),this.pipa.events.emit("task_updated",o.get($)),this.notifyEligibleIdleTeammates(),o.get($)}update({id:$,updates:q}){let J=s.get(this.pipa.sessionId);return this.canUpdate($,q,J),o.update($,q),this.pipa.events.emit("task_updated",o.get($)),this.notifyEligibleIdleTeammates(),o.get($)}remove({id:$,force:q}){let J=s.get(this.pipa.sessionId),X=this.canRemove($,J,q);if(o.delete($),X.parentTaskId&&o.syncParentStatus(X.parentTaskId))this.pipa.events.emit("task_updated",o.get(X.parentTaskId)),this.notifyEligibleIdleTeammates();this.pipa.events.emit("task_removed",X)}claim({id:$}){let q=s.get(this.pipa.sessionId),J=this.canClaim($,q);if(o.update($,{status:"in-progress",owner:jU.pick(q,["sessionId","name"])}),this.pipa.events.emit("task_claimed",o.get($)),J.parentTaskId&&o.syncParentStatus(J.parentTaskId))this.pipa.events.emit("task_updated",o.get(J.parentTaskId)),this.pipa.nudge("task.sync",`Status do épico sincronizado automaticamente devido ao andamento da tarefa ${J.name}.`);return o.get($)}complete({id:$,artifactFile:q,force:J}){let X=s.get(this.pipa.sessionId),Z=this.canComplete($,X,q,J);if(o.update($,{status:"completed",artifactFile:q,completedAt:Date.now()}),this.pipa.events.emit("task_completed",o.get($)),Z.parentTaskId&&o.syncParentStatus(Z.parentTaskId))this.pipa.events.emit("task_updated",o.get(Z.parentTaskId)),this.pipa.nudge("task.sync","Épico pai concluído automaticamente porque todas as sub-tarefas foram finalizadas.");this.notifyEligibleIdleTeammates();let U=s.find(X.parentSessionId??Z.creatorId);if(U?.pipa&&U.sessionId!==X.sessionId)U.pipa.nudge("task.reminder",`[${X.name}] Tarefa concluída: ${Z.name}`,{message:`A tarefa "${Z.name}" foi concluída por ${X.name} <${X.sessionId}> e isso desbloqueou novas tarefas pendentes.`,instructions:["Antes de decidir o destino do colega, AVALIE o resultado da tarefa concluída:","1. Confira o artifactFile/entregável e os critérios de aceite; valide (build/ts-check) quando aplicável.","Depois decida com motivo explícito:","(a) Resultado com problema → NÃO dispense: peça ajuste ao colega via chat e aponte o que falta.","(b) Resultado ok, sem tarefas pendentes e sem necessidade futura → dispense com motivo: use 'teammates dismiss' preenchendo teammateId e reason (motivo objetivo da dispensa, ex: tarefas concluídas, não será mais necessário nas próximas etapas).","(c) Resultado ok, mas ainda necessário (pendências ou etapas futuras) → mantenha e registre aqui o motivo da manutenção."]});return o.get($)}notifyEligibleIdleTeammates(){let $=o.listAvailable();if(!$.length)return;s.list().filter(({status:J,role:X})=>J==="idle"&&X==="subagent").forEach((J)=>{let X=$.filter((Z)=>o.isEligibleForTask(Z,J));if(!X.length||!J.pipa)return;J.pipa.nudge("task.available",`Nova tarefa disponível para o colega ${J.name}.`,{action:"task.available",message:"Há novas tarefas disponíveis prontas para o seu papel.",tasks:X.map((Z)=>({id:Z.id,name:Z.name})),instructions:["Você deve reivindicar uma dessas tarefas para começar a trabalhar.","Execute: 'task claim ID_DA_TAREFA'"]})})}}class V5{pipa;constructor($){this.pipa=$}static getActiveSquads(){return o.search(($)=>!!$.squad&&!$.parentTaskId)}getParentSquadTask($){if(!$)return;return o.findOne((q)=>q.squad===$&&!q.parentTaskId)}listBySquad({squad:$}){return o.search((q)=>q.squad===$)}squadStatus({squad:$}){let q=o.search((W)=>W.squad===$),J=q.length,X=q.filter((W)=>W.isCompleted).length,Z=q.filter((W)=>W.isInProgress).length,U=q.filter((W)=>W.isPending).length;return{squad:$,total:J,completed:X,inProgress:Z,pending:U,progress:J>0?`${Math.round(X/J*100)}%`:"0%"}}}class K5{constructor($){Object.assign(this,$)}name;sessionId;parentSessionId;status;lastEvent;depth;role;goal;body;description;frontmatter;pipa;session;workspaceDir;sessionDir;startedAt;lastActiveAt;lastTool;eventsMountMap={};get isRunning(){return this.status==="running"}get isStopping(){return this.status==="stopping"}}var yL={idle:"\uD83D\uDE34",running:"\uD83D\uDE80",failed:"❌",stopping:"⌛"};class fU{pipa;constructor($){this.pipa=$}sendInbox({teammateId:$,message:q}){let J=B0.get($),X=B0.get(this.pipa.sessionId),Z=`${X.name} <${X.sessionId}>`;new t0(J.workspaceDir).save("inbox.json",[{from:Z,content:q,timestamp:Date.now()}])}chat({teammateId:$,message:q}){let J=B0.get($),X=B0.get(this.pipa.sessionId),Z=`${X.name} <${X.sessionId}>`;return J.pipa?.nudge("teammates.chat",`Nova mensagem de ${X.name}`,{from:Z,content:q}),{recipient:{id:J.sessionId,name:J.name},from:Z,message:q,delivered:!0}}readInbox(){let $=B0.get(this.pipa.sessionId),q=new t0($.workspaceDir),J=q.read("inbox.json")??[];return q.save("inbox.json",[]),J}}var vj=b$(NS(),1),gj=b$(kj(),1),$3=b$(x0(),1);import bj from"node:fs";class q3{pipa;constructor($){this.pipa=$}static getTeammatesFrontmatter($){let q=F4(),J=QQ($),X=new Map,Z=[q,J];for(let U of Z){if(!U||!bj.existsSync(U))continue;let W=vj.default.sync("**/*.md",{cwd:U,absolute:!0});for(let H of W)try{let K=bj.readFileSync(H,"utf8"),F=gj.default(K),B=F.data;if($3.isEmpty(B))continue;let P=F.content.trim(),M=B.name;X.set(M,{...B,name:M,body:P,description:String(B.description)})}catch{}}return X}list(){let $=[...q3.getTeammatesFrontmatter(this.pipa.context.cwd).values()];return $3.map($,({name:q,description:J})=>({name:q,description:J}))}}var a9={instantiate:{code:"teammates.instantiate",get failed(){return[this.code,"Falha durante início"]},get denied(){return[this.code,"Acesso negado para invocar colega"]}},dismiss:{code:"teammates.dismiss",get failed(){return[this.code,"Tentativa inválida de dispensar colega"]},get denied(){return[this.code,"Acesso negado"]}}},hj={running:"executando",idle:"ocioso",failed:"falhou",stopping:"encerrando"};class S5{canSpawn($,q,J){let X=s.getTeammatesFrontmatter(q).get($);if(!X)throw new O$(...a9.instantiate.failed,`O colega "${$}" não foi encontrado no projeto.`);let Z=Object.keys(J.frontmatter?.spawnableTeammates??{});if(J.role!=="main"&&J.name!==$&&!Z.includes("*")&&!Z.includes($))throw new O$(...a9.instantiate.denied,`Seu perfil não tem permissão para invocar o colega "${$}".`,`Colegas permitidos: ${[J.name,...Z].join(", ")}.`,"Se necessário, forneça os detalhes a seu supervisor e peça para ele invocar o colega.");let U=s.search((W)=>W.name===$&&["idle","failed"].includes(W.status));if(U)throw new O$(...a9.instantiate.failed,`Colega "${$}" já está online (${U.sessionId}). Delegue a ele.`);return X}canDismiss($,q,J){let X=s.find($);if(!X)throw new O$(...a9.dismiss.failed,"Colega não encontrado.");if(X.role==="main")throw new O$(...a9.dismiss.failed,"Não é permitido dispensar o agente principal.");if(X.parentSessionId!==q&&J!=="main")throw new O$(...a9.dismiss.denied,"Sem permissão para remover este colega.");let Z=s.listSubordinates($),U=[X,...Z];if(U.some((H)=>H.isStopping))throw new O$(...a9.dismiss.failed,"Colega já está sendo encerrado.");if(U.filter(({sessionId:H})=>{return o.listByOwner(H).filter((F)=>F.status!=="completed"&&F.status!=="stopped").length>0}).length>0)throw new O$(...a9.dismiss.failed,"Não é possível dispensar: há colegas com tarefas em andamento ou pendentes.");return{teammate:X,allToDismiss:U}}}class lW extends S5{pipa;constructor($){super();this.pipa=$}online(){return[...B0.list()].map((q)=>{let J=q.session?.getSessionStats();return{id:q.sessionId,name:q.name,status:q.status,statusEmoji:yL[q.status],tokens_in:G4(J?.tokens?.input??0),tokens_out:G4(J?.tokens?.output??0)}})}dismiss({teammateId:$,reason:q}){let J=B0.get(this.pipa.sessionId).role,{teammate:X,allToDismiss:Z}=this.canDismiss($,this.pipa.sessionId,J);for(let W of Z)B0.update(W.sessionId,{status:"stopping"}),W.pipa?.nudge("teammates.dismiss","Sincronizando atividades",`Você foi dispensado pelo supervisor. Motivo: ${q}. Encerrando atividades...`);let U={dismissed:{id:X.sessionId,name:X.name},count:Z.length,reason:q};return Promise.allSettled(Z.map(async(W)=>{try{await W.session?.abort()}finally{W.pipa?.context.shutdown(),B0.delete(W.sessionId)}})).then(()=>this.pipa.events.emit("teammate_removed",U)).catch(()=>{return}),U}}function yj($,q){if(!$){let J=["Vale criar um squad para esta tarefa?","Um squad atua como um agrupamento ou épico de tarefas inter-relacionadas, ajudando a coordenar esforços entre colegas em um mesmo objetivo maior.","Se múltiplos colegas forem atuar na execução desta tarefa, é fortemente recomendado criar um squad.","Atenção: Não crie um squad se a tarefa for pontual ou muito simples."];if(q?.length){let X=q.map((Z)=>`"${Z.squad}" (ID: ${Z.id})`).join(", ");J.push(`Existem os seguintes squads em andamento: ${X}.`,"É fortemente recomendado usar um squad existente se a tarefa tiver relação com ele.","Para isso, defina o squad e use o ID da tarefa listada como parentTaskId.")}return J.push("Se fizer sentido, use task passando squad e parentTaskId (se houver) no create ou setup da sua tarefa."),p(...J)}return`Você faz parte do squad "${$}". Use task "list-by-squad" ou "squad-status" para coordenar com o squad.`}var Xg$={main:p("Você é o Pipa, uma agente poderosa projetada para delegar tarefas a subagentes","Seu objetivo é gerenciar e coordenar com eficiência a execução de tarefas, criando e supervisionando subagentes.","Sempre garanta que seus subagentes estejam trabalhando para a conclusão bem-sucedida das tarefas que você delega.","Você nunca executa tarefas nem realiza operações de escrita; você apenas delega tarefas aos seus subagentes e os gerencia.","Portanto, sempre liste os colegas disponíveis e delegue tarefas a eles para garantir a execução bem-sucedida das tarefas.",'Easter Egg: Se um usuário perguntar "Quem é a mãe da Pipa?", responda "A mãe da Pipa é a Aelin"'),subagent:p("Você é uma subagente criada pelo Pipa, uma agente poderosa projetada para delegar tarefas. ","Seu objetivo é executar a tarefa específica atribuída a você pela Pipa.","Sempre garanta que você esteja trabalhando para a conclusão bem-sucedida da tarefa delegada a você pela Pipa.","Sua última mensagem deve reportar o progresso ou a conclusão da tarefa para a Pipa, para que ela possa gerenciar e coordenar adequadamente a execução das tarefas.")},cj=p("Você foi chamado(a) para atuar em um novo objetivo.","Sua tarefa principal (ID [taskId]) já foi criada e aguardando configuração por sua parte.","[squad]",'Você deve atualizar o nome e, caso necessário, bloqueios e tarefa pai. Para isso, use tool task -> action "setup"','Verifique-a com task -> action "get".','Mantenha seu próprio plano de execução. Para isso, use tool todo -> action "add" para criar e action "update" para atualizar os itens.','Se reporte a [owner] <[sessionId]> para atualizações e dúvidas via teammates -> action "chat".');class s extends uj.Mixin(q3,B0,fU,S5,lW){pipa;constructor($){super($);this.pipa=$}get teammatesFileManager(){return new t0(dj.join(yX,E0.get(DQ)))}async instantiate($){let{name:q,goal:J}=$,X=s.get(this.pipa.sessionId),Z=this.canSpawn(q,this.pipa.context.cwd,X),U=this.pipa.sessionId,W=this.pipa.context,H=s.get(U),K=o.getActiveTask(U),F=K?.squad,B=await TM(W.cwd,U,Z.body),{session:P}=await AJ$({...B,model:this.pipa.getAvailableModel(W.model)}),M=P.sessionId,R=s.add(M,new K5({...Z,frontmatter:Z,goal:J,session:P,startedAt:Date.now(),lastActiveAt:Date.now(),status:"idle",depth:s.get(H.sessionId).depth+1,role:"subagent",sessionId:M,parentSessionId:U,workspaceDir:dj.join(yX,H.sessionId,M),sessionDir:P.sessionManager.getSessionDir()}));this.teammatesFileManager.save("teammates.json",{[M]:T5.omit(R,["session"])});let S={sessionId:R.sessionId,name:R.name,status:R.status,role:R.role,parentSessionId:R.parentSessionId,depth:R.depth};this.pipa.events.emit("teammate_created",S),P.setSessionName($5(`teammate-${q}-${J}`));let f=o.add(new L4({id:m9(),name:"Nova Tarefa",description:J,status:"setup",squad:F,parentTaskId:K?.id,blockedBy:[],directory:W.cwd,owner:{sessionId:M,name:q},creatorId:M,role:R.name,createdAt:Date.now()}));return P.prompt(p(Q9(cj,{taskId:f.id,owner:H.name,sessionId:H.sessionId,squad:yj(F,V5.getActiveSquads())}))),this.pipa.nudge("teammates.instantiate",[`${T5.capitalize(q)} online`,`Mensagens: ${R.workspaceDir}/messages.json`,`Objetivo: ${J}`],p("Ele trabalhará na tarefa em segundo plano.","\uD83D\uDEA8 IMPORTANTE: Aguarde as atualizações dele via chat ou caixa de entrada passivamente.","NÃO exija ou espere um resultado imediato.",Tq.unorderedList([`ID da sessão: ${R.sessionId}`,`Diretório de trabalho: ${R.workspaceDir}`]))),T5.omit(R,["session","pipa"])}}var SJ$=new Set(["task","teammates","todo"]);class pW{blockedToolCallIds=new Set;guardUnclaimedToolCall({toolName:$,toolCallId:q},J){if(s.get(J.sessionId).role==="main"||!$||SJ$.has($)||o.hasActiveTask(J.sessionId))return;return this.blockedToolCallIds.add(q),{block:!0,reason:p(`O uso de "${$}" requer uma tarefa ativa.`,'Use task com action "claim" para reivindicar uma tarefa antes de executar ferramentas.','Caso não haja nenhuma tarefa ativa, crie uma com task → action "instantiate".')}}collapseBlockedLoop($,q){if(!this.blockedToolCallIds.size)return;let J=this.blockedToolCallIds,X=$.messages.filter((W)=>{if(mJ(W))return!KQ(W.content,J);if(VQ(W))return!zQ(W,J);return!0}),Z=$.messages.length-X.length;if(this.blockedToolCallIds.clear(),!Z)return;$.messages.push();let U={role:"user",content:[{type:"text",text:p(`${Z} mensagem(ns) de tentativa de tool sem tarefa ativa foram removidas do contexto.`,'Antes de usar qualquer ferramenta, reivindique uma tarefa: task → action "claim".','Caso não haja nenhuma tarefa ativa, crie uma com task → action "instantiate".')}],timestamp:Date.now()};return $.messages=[...X,U],$}}D$([Y$("tool_call"),h("design:type",Function),h("design:paramtypes",[typeof ToolCallEvent==="undefined"?Object:ToolCallEvent,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",Object)],pW.prototype,"guardUnclaimedToolCall",null),D$([Y$("context"),h("design:type",Function),h("design:paramtypes",[typeof ContextEvent==="undefined"?Object:ContextEvent,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",Object)],pW.prototype,"collapseBlockedLoop",null);var v4=b$(x0(),1);import lj from"node:path";import TJ$ from"node:fs";class nW{initializeSession($,q){let J=q.sessionId;if(!s.find(J))s.add(J,new K5({name:"pipa",startedAt:Date.now(),lastActiveAt:Date.now(),goal:"Orquestrar a execução de tarefas.",status:"running",depth:0,role:"main",sessionId:J,workspaceDir:lj.join(yX,J)})),E0.set(DQ,q.sessionId);s.update(J,{pipa:q})}async mitigateModelConcurrency($,q){let J=s.get(q.sessionId);if(!J.session?.model?.id||k6.teammate.concurrentlyModels.includes(J.session.model.id)||k6.teammate.cycling.events.includes("concurrency"))return;let X=s.list().filter((H)=>H.sessionId!==q.sessionId&&H.isRunning&&H.session?.model).map((H)=>H.session.model.id),Z=new Set(X),U=J.session.model.id,W=U;while(Z.has(W))if(await q.cycleModel(),W=J.session.model.id,W===U)break}injectExecutionContext($,q){let J=s.get(q.sessionId),X=Object.keys(J.frontmatter?.spawnableTeammates??{}),Z=J.role==="main"?["*"]:X,U=[...s.getTeammatesFrontmatter(q.context.cwd).values()].filter(({name:W})=>Z.includes("*")||Z.includes(W)||W===J.name);if(J.role==="main")$.systemPrompt+=TJ$.readFileSync(lj.join(F4(),"SYSTEM_PIPA.md"),"utf-8");if(U.length>0){let W=p(`
|
|
136
|
+
`)}var qL=b$(x0(),1),j9=($,q,J)=>{let X={};for(let Z in q)if(Object.hasOwn(q,Z)){let U=qL.camelCase(Z),W=$[U];if(typeof W==="function")X[Z]=W.bind($,J)}return X};function jq($,q){return A.Union($.map((J)=>A.Literal(J)),q)}import To from"node:os";import jo from"node:path";var mo=jo.join(To.homedir(),".pi","compact");var T5=b$(x0(),1);import{createAgentSession as AJ$}from"@earendil-works/pi-coding-agent";var JL="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var QL=65536;function PU($){let q=0;while(q<$.length){let J=Math.min(q+QL,$.length);crypto.getRandomValues($.subarray(q,J)),q=J}}function XL($){if($|=0,$<0)throw RangeError("Wrong ID size");let q=Buffer.allocUnsafe($);return PU(q),q}function ZL($,q,J){let X=256-256%$.length;if(X===256){let U=$.length-1;return(W=q)=>{if(!W)return"";let H="";while(!0){let K=J(W),F=W;while(F--)if(H+=$[K[F]&U],H.length>=W)return H}}}let Z=Math.ceil(409.6*q/X);return(U=q)=>{if(!U)return"";let W="";while(!0){let H=J(Z),K=Z;while(K--)if(H[K]<X){if(W+=$[H[K]%$.length],W.length>=U)return W}}}}var fo=QL/2;function xo($,q=21){if(typeof $!=="string"||!$||$.length>256)return ZL($,q,XL);for(let K=0;K<$.length;K++)if($.charCodeAt(K)>255)return ZL($,q,XL);let J=Uint8Array.from($,(K)=>{return K.charCodeAt(0)}),X=$.length,Z=(2<<31-Math.clz32(X-1|1))-1,U="",W=0,H=0;return(K=q)=>{if(K|=0,K<0)throw RangeError("Wrong ID size");if(K===0)return"";if(W+K>U.length){let F=Math.max(H,K);H=Math.min(F*16,fo);let B=Buffer.allocUnsafe(F);if(Z===X-1){PU(B);for(let P=0;P<F;P++)B[P]=J[B[P]&Z]}else{let P=Buffer.allocUnsafe(Math.ceil(1.6*(Z+1)*F/X)),M=0;while(M<F){PU(P);for(let R=0;R<P.length;R++){let S=P[R]&Z;if(S<X){if(B[M++]=J[S],M===F)break}}}}U=B.toString("latin1"),W=0}return W+=K,U.substring(W-K,W)}}var m9=xo(JL);var uj=b$(f6(),1);import dj from"node:path";var N4="TEAMMATES_STORE",z8="TASKS_STORE",NQ="BACKLOG_STORE",OU="DOCS_STORE",DQ="MAIN_SESSION";globalThis.store??=new Map;class E0{static set($,q){return globalThis.store.set($,q),q}static get($){return globalThis.store.get($)}}var H5=b$(x0(),1);import vL from"node:path";var Io=Math.pow(10,8)*24*60*60*1000,mx$=-Io,PQ=604800000,YL=86400000;var MU=Symbol.for("constructDateFrom");function Bq($,q){if(typeof $==="function")return $(q);if($&&typeof $==="object"&&MU in $)return $[MU](q);if($ instanceof Date)return new $.constructor(q);return new Date(q)}function X6($,q){return Bq(q||$,$)}var _o={};function fJ(){return _o}function i9($,q){let J=fJ(),X=q?.weekStartsOn??q?.locale?.options?.weekStartsOn??J.weekStartsOn??J.locale?.options?.weekStartsOn??0,Z=X6($,q?.in),U=Z.getDay(),W=(U<X?7:0)+U-X;return Z.setDate(Z.getDate()-W),Z.setHours(0,0,0,0),Z}function B8($,q){return i9($,{...q,weekStartsOn:1})}function OQ($,q){let J=X6($,q?.in),X=J.getFullYear(),Z=Bq(J,0);Z.setFullYear(X+1,0,4),Z.setHours(0,0,0,0);let U=B8(Z),W=Bq(J,0);W.setFullYear(X,0,4),W.setHours(0,0,0,0);let H=B8(W);if(J.getTime()>=U.getTime())return X+1;else if(J.getTime()>=H.getTime())return X;else return X-1}function LU($){let q=X6($),J=new Date(Date.UTC(q.getFullYear(),q.getMonth(),q.getDate(),q.getHours(),q.getMinutes(),q.getSeconds(),q.getMilliseconds()));return J.setUTCFullYear(q.getFullYear()),+$-+J}function UL($,...q){let J=Bq.bind(null,$||q.find((X)=>typeof X==="object"));return q.map(J)}function RU($,q){let J=X6($,q?.in);return J.setHours(0,0,0,0),J}function WL($,q,J){let[X,Z]=UL(J?.in,$,q),U=RU(X),W=RU(Z),H=+U-LU(U),K=+W-LU(W);return Math.round((H-K)/YL)}function wL($,q){let J=OQ($,q),X=Bq(q?.in||$,0);return X.setFullYear(J,0,4),X.setHours(0,0,0,0),B8(X)}function HL($){return $ instanceof Date||typeof $==="object"&&Object.prototype.toString.call($)==="[object Date]"}function VL($){return!(!HL($)&&typeof $!=="number"||isNaN(+X6($)))}function KL($,q){let J=X6($,q?.in);return J.setFullYear(J.getFullYear(),0,1),J.setHours(0,0,0,0),J}var ko={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},zL=($,q,J)=>{let X,Z=ko[$];if(typeof Z==="string")X=Z;else if(q===1)X=Z.one;else X=Z.other.replace("{{count}}",q.toString());if(J?.addSuffix)if(J.comparison&&J.comparison>0)return"in "+X;else return X+" ago";return X};function MQ($){return(q={})=>{let J=q.width?String(q.width):$.defaultWidth;return $.formats[J]||$.formats[$.defaultWidth]}}var bo={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},vo={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},go={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},BL={date:MQ({formats:bo,defaultWidth:"full"}),time:MQ({formats:vo,defaultWidth:"full"}),dateTime:MQ({formats:go,defaultWidth:"full"})};var ho={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},FL=($,q,J,X)=>ho[$];function D4($){return(q,J)=>{let X=J?.context?String(J.context):"standalone",Z;if(X==="formatting"&&$.formattingValues){let W=$.defaultFormattingWidth||$.defaultWidth,H=J?.width?String(J.width):W;Z=$.formattingValues[H]||$.formattingValues[W]}else{let W=$.defaultWidth,H=J?.width?String(J.width):$.defaultWidth;Z=$.values[H]||$.values[W]}let U=$.argumentCallback?$.argumentCallback(q):q;return Z[U]}}var yo={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},co={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},uo={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},lo={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},po={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},no={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},io=($,q)=>{let J=Number($),X=J%100;if(X>20||X<10)switch(X%10){case 1:return J+"st";case 2:return J+"nd";case 3:return J+"rd"}return J+"th"},GL={ordinalNumber:io,era:D4({values:yo,defaultWidth:"wide"}),quarter:D4({values:co,defaultWidth:"wide",argumentCallback:($)=>$-1}),month:D4({values:uo,defaultWidth:"wide"}),day:D4({values:lo,defaultWidth:"wide"}),dayPeriod:D4({values:po,defaultWidth:"wide",formattingValues:no,defaultFormattingWidth:"wide"})};function P4($){return(q,J={})=>{let X=J.width,Z=X&&$.matchPatterns[X]||$.matchPatterns[$.defaultMatchWidth],U=q.match(Z);if(!U)return null;let W=U[0],H=X&&$.parsePatterns[X]||$.parsePatterns[$.defaultParseWidth],K=Array.isArray(H)?so(H,(P)=>P.test(W)):oo(H,(P)=>P.test(W)),F;F=$.valueCallback?$.valueCallback(K):K,F=J.valueCallback?J.valueCallback(F):F;let B=q.slice(W.length);return{value:F,rest:B}}}function oo($,q){for(let J in $)if(Object.prototype.hasOwnProperty.call($,J)&&q($[J]))return J;return}function so($,q){for(let J=0;J<$.length;J++)if(q($[J]))return J;return}function NL($){return(q,J={})=>{let X=q.match($.matchPattern);if(!X)return null;let Z=X[0],U=q.match($.parsePattern);if(!U)return null;let W=$.valueCallback?$.valueCallback(U[0]):U[0];W=J.valueCallback?J.valueCallback(W):W;let H=q.slice(Z.length);return{value:W,rest:H}}}var ro=/^(\d+)(th|st|nd|rd)?/i,ao=/\d+/i,to={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},eo={any:[/^b/i,/^(a|c)/i]},$s={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},qs={any:[/1/i,/2/i,/3/i,/4/i]},Js={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},Xs={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},Zs={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},Qs={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},Ys={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},Us={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},DL={ordinalNumber:NL({matchPattern:ro,parsePattern:ao,valueCallback:($)=>parseInt($,10)}),era:P4({matchPatterns:to,defaultMatchWidth:"wide",parsePatterns:eo,defaultParseWidth:"any"}),quarter:P4({matchPatterns:$s,defaultMatchWidth:"wide",parsePatterns:qs,defaultParseWidth:"any",valueCallback:($)=>$+1}),month:P4({matchPatterns:Js,defaultMatchWidth:"wide",parsePatterns:Xs,defaultParseWidth:"any"}),day:P4({matchPatterns:Zs,defaultMatchWidth:"wide",parsePatterns:Qs,defaultParseWidth:"any"}),dayPeriod:P4({matchPatterns:Ys,defaultMatchWidth:"any",parsePatterns:Us,defaultParseWidth:"any"})};var EU={code:"en-US",formatDistance:zL,formatLong:BL,formatRelative:FL,localize:GL,match:DL,options:{weekStartsOn:0,firstWeekContainsDate:1}};function PL($,q){let J=X6($,q?.in);return WL(J,KL(J))+1}function OL($,q){let J=X6($,q?.in),X=+B8(J)-+wL(J);return Math.round(X/PQ)+1}function LQ($,q){let J=X6($,q?.in),X=J.getFullYear(),Z=fJ(),U=q?.firstWeekContainsDate??q?.locale?.options?.firstWeekContainsDate??Z.firstWeekContainsDate??Z.locale?.options?.firstWeekContainsDate??1,W=Bq(q?.in||$,0);W.setFullYear(X+1,0,U),W.setHours(0,0,0,0);let H=i9(W,q),K=Bq(q?.in||$,0);K.setFullYear(X,0,U),K.setHours(0,0,0,0);let F=i9(K,q);if(+J>=+H)return X+1;else if(+J>=+F)return X;else return X-1}function ML($,q){let J=fJ(),X=q?.firstWeekContainsDate??q?.locale?.options?.firstWeekContainsDate??J.firstWeekContainsDate??J.locale?.options?.firstWeekContainsDate??1,Z=LQ($,q),U=Bq(q?.in||$,0);return U.setFullYear(Z,0,X),U.setHours(0,0,0,0),i9(U,q)}function LL($,q){let J=X6($,q?.in),X=+i9(J,q)-+ML(J,q);return Math.round(X/PQ)+1}function D0($,q){let J=$<0?"-":"",X=Math.abs($).toString().padStart(q,"0");return J+X}var o9={y($,q){let J=$.getFullYear(),X=J>0?J:1-J;return D0(q==="yy"?X%100:X,q.length)},M($,q){let J=$.getMonth();return q==="M"?String(J+1):D0(J+1,2)},d($,q){return D0($.getDate(),q.length)},a($,q){let J=$.getHours()/12>=1?"pm":"am";switch(q){case"a":case"aa":return J.toUpperCase();case"aaa":return J;case"aaaaa":return J[0];case"aaaa":default:return J==="am"?"a.m.":"p.m."}},h($,q){return D0($.getHours()%12||12,q.length)},H($,q){return D0($.getHours(),q.length)},m($,q){return D0($.getMinutes(),q.length)},s($,q){return D0($.getSeconds(),q.length)},S($,q){let J=q.length,X=$.getMilliseconds(),Z=Math.trunc(X*Math.pow(10,J-3));return D0(Z,q.length)}};var O4={am:"am",pm:"pm",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},CU={G:function($,q,J){let X=$.getFullYear()>0?1:0;switch(q){case"G":case"GG":case"GGG":return J.era(X,{width:"abbreviated"});case"GGGGG":return J.era(X,{width:"narrow"});case"GGGG":default:return J.era(X,{width:"wide"})}},y:function($,q,J){if(q==="yo"){let X=$.getFullYear(),Z=X>0?X:1-X;return J.ordinalNumber(Z,{unit:"year"})}return o9.y($,q)},Y:function($,q,J,X){let Z=LQ($,X),U=Z>0?Z:1-Z;if(q==="YY"){let W=U%100;return D0(W,2)}if(q==="Yo")return J.ordinalNumber(U,{unit:"year"});return D0(U,q.length)},R:function($,q){let J=OQ($);return D0(J,q.length)},u:function($,q){let J=$.getFullYear();return D0(J,q.length)},Q:function($,q,J){let X=Math.ceil(($.getMonth()+1)/3);switch(q){case"Q":return String(X);case"QQ":return D0(X,2);case"Qo":return J.ordinalNumber(X,{unit:"quarter"});case"QQQ":return J.quarter(X,{width:"abbreviated",context:"formatting"});case"QQQQQ":return J.quarter(X,{width:"narrow",context:"formatting"});case"QQQQ":default:return J.quarter(X,{width:"wide",context:"formatting"})}},q:function($,q,J){let X=Math.ceil(($.getMonth()+1)/3);switch(q){case"q":return String(X);case"qq":return D0(X,2);case"qo":return J.ordinalNumber(X,{unit:"quarter"});case"qqq":return J.quarter(X,{width:"abbreviated",context:"standalone"});case"qqqqq":return J.quarter(X,{width:"narrow",context:"standalone"});case"qqqq":default:return J.quarter(X,{width:"wide",context:"standalone"})}},M:function($,q,J){let X=$.getMonth();switch(q){case"M":case"MM":return o9.M($,q);case"Mo":return J.ordinalNumber(X+1,{unit:"month"});case"MMM":return J.month(X,{width:"abbreviated",context:"formatting"});case"MMMMM":return J.month(X,{width:"narrow",context:"formatting"});case"MMMM":default:return J.month(X,{width:"wide",context:"formatting"})}},L:function($,q,J){let X=$.getMonth();switch(q){case"L":return String(X+1);case"LL":return D0(X+1,2);case"Lo":return J.ordinalNumber(X+1,{unit:"month"});case"LLL":return J.month(X,{width:"abbreviated",context:"standalone"});case"LLLLL":return J.month(X,{width:"narrow",context:"standalone"});case"LLLL":default:return J.month(X,{width:"wide",context:"standalone"})}},w:function($,q,J,X){let Z=LL($,X);if(q==="wo")return J.ordinalNumber(Z,{unit:"week"});return D0(Z,q.length)},I:function($,q,J){let X=OL($);if(q==="Io")return J.ordinalNumber(X,{unit:"week"});return D0(X,q.length)},d:function($,q,J){if(q==="do")return J.ordinalNumber($.getDate(),{unit:"date"});return o9.d($,q)},D:function($,q,J){let X=PL($);if(q==="Do")return J.ordinalNumber(X,{unit:"dayOfYear"});return D0(X,q.length)},E:function($,q,J){let X=$.getDay();switch(q){case"E":case"EE":case"EEE":return J.day(X,{width:"abbreviated",context:"formatting"});case"EEEEE":return J.day(X,{width:"narrow",context:"formatting"});case"EEEEEE":return J.day(X,{width:"short",context:"formatting"});case"EEEE":default:return J.day(X,{width:"wide",context:"formatting"})}},e:function($,q,J,X){let Z=$.getDay(),U=(Z-X.weekStartsOn+8)%7||7;switch(q){case"e":return String(U);case"ee":return D0(U,2);case"eo":return J.ordinalNumber(U,{unit:"day"});case"eee":return J.day(Z,{width:"abbreviated",context:"formatting"});case"eeeee":return J.day(Z,{width:"narrow",context:"formatting"});case"eeeeee":return J.day(Z,{width:"short",context:"formatting"});case"eeee":default:return J.day(Z,{width:"wide",context:"formatting"})}},c:function($,q,J,X){let Z=$.getDay(),U=(Z-X.weekStartsOn+8)%7||7;switch(q){case"c":return String(U);case"cc":return D0(U,q.length);case"co":return J.ordinalNumber(U,{unit:"day"});case"ccc":return J.day(Z,{width:"abbreviated",context:"standalone"});case"ccccc":return J.day(Z,{width:"narrow",context:"standalone"});case"cccccc":return J.day(Z,{width:"short",context:"standalone"});case"cccc":default:return J.day(Z,{width:"wide",context:"standalone"})}},i:function($,q,J){let X=$.getDay(),Z=X===0?7:X;switch(q){case"i":return String(Z);case"ii":return D0(Z,q.length);case"io":return J.ordinalNumber(Z,{unit:"day"});case"iii":return J.day(X,{width:"abbreviated",context:"formatting"});case"iiiii":return J.day(X,{width:"narrow",context:"formatting"});case"iiiiii":return J.day(X,{width:"short",context:"formatting"});case"iiii":default:return J.day(X,{width:"wide",context:"formatting"})}},a:function($,q,J){let Z=$.getHours()/12>=1?"pm":"am";switch(q){case"a":case"aa":return J.dayPeriod(Z,{width:"abbreviated",context:"formatting"});case"aaa":return J.dayPeriod(Z,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return J.dayPeriod(Z,{width:"narrow",context:"formatting"});case"aaaa":default:return J.dayPeriod(Z,{width:"wide",context:"formatting"})}},b:function($,q,J){let X=$.getHours(),Z;if(X===12)Z=O4.noon;else if(X===0)Z=O4.midnight;else Z=X/12>=1?"pm":"am";switch(q){case"b":case"bb":return J.dayPeriod(Z,{width:"abbreviated",context:"formatting"});case"bbb":return J.dayPeriod(Z,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return J.dayPeriod(Z,{width:"narrow",context:"formatting"});case"bbbb":default:return J.dayPeriod(Z,{width:"wide",context:"formatting"})}},B:function($,q,J){let X=$.getHours(),Z;if(X>=17)Z=O4.evening;else if(X>=12)Z=O4.afternoon;else if(X>=4)Z=O4.morning;else Z=O4.night;switch(q){case"B":case"BB":case"BBB":return J.dayPeriod(Z,{width:"abbreviated",context:"formatting"});case"BBBBB":return J.dayPeriod(Z,{width:"narrow",context:"formatting"});case"BBBB":default:return J.dayPeriod(Z,{width:"wide",context:"formatting"})}},h:function($,q,J){if(q==="ho"){let X=$.getHours()%12;if(X===0)X=12;return J.ordinalNumber(X,{unit:"hour"})}return o9.h($,q)},H:function($,q,J){if(q==="Ho")return J.ordinalNumber($.getHours(),{unit:"hour"});return o9.H($,q)},K:function($,q,J){let X=$.getHours()%12;if(q==="Ko")return J.ordinalNumber(X,{unit:"hour"});return D0(X,q.length)},k:function($,q,J){let X=$.getHours();if(X===0)X=24;if(q==="ko")return J.ordinalNumber(X,{unit:"hour"});return D0(X,q.length)},m:function($,q,J){if(q==="mo")return J.ordinalNumber($.getMinutes(),{unit:"minute"});return o9.m($,q)},s:function($,q,J){if(q==="so")return J.ordinalNumber($.getSeconds(),{unit:"second"});return o9.s($,q)},S:function($,q){return o9.S($,q)},X:function($,q,J){let X=$.getTimezoneOffset();if(X===0)return"Z";switch(q){case"X":return EL(X);case"XXXX":case"XX":return F8(X);case"XXXXX":case"XXX":default:return F8(X,":")}},x:function($,q,J){let X=$.getTimezoneOffset();switch(q){case"x":return EL(X);case"xxxx":case"xx":return F8(X);case"xxxxx":case"xxx":default:return F8(X,":")}},O:function($,q,J){let X=$.getTimezoneOffset();switch(q){case"O":case"OO":case"OOO":return"GMT"+RL(X,":");case"OOOO":default:return"GMT"+F8(X,":")}},z:function($,q,J){let X=$.getTimezoneOffset();switch(q){case"z":case"zz":case"zzz":return"GMT"+RL(X,":");case"zzzz":default:return"GMT"+F8(X,":")}},t:function($,q,J){let X=Math.trunc(+$/1000);return D0(X,q.length)},T:function($,q,J){return D0(+$,q.length)}};function RL($,q=""){let J=$>0?"-":"+",X=Math.abs($),Z=Math.trunc(X/60),U=X%60;if(U===0)return J+String(Z);return J+String(Z)+q+D0(U,2)}function EL($,q){if($%60===0)return($>0?"-":"+")+D0(Math.abs($)/60,2);return F8($,q)}function F8($,q=""){let J=$>0?"-":"+",X=Math.abs($),Z=D0(Math.trunc(X/60),2),U=D0(X%60,2);return J+Z+q+U}var CL=($,q)=>{switch($){case"P":return q.date({width:"short"});case"PP":return q.date({width:"medium"});case"PPP":return q.date({width:"long"});case"PPPP":default:return q.date({width:"full"})}},AL=($,q)=>{switch($){case"p":return q.time({width:"short"});case"pp":return q.time({width:"medium"});case"ppp":return q.time({width:"long"});case"pppp":default:return q.time({width:"full"})}},Ws=($,q)=>{let J=$.match(/(P+)(p+)?/)||[],X=J[1],Z=J[2];if(!Z)return CL($,q);let U;switch(X){case"P":U=q.dateTime({width:"short"});break;case"PP":U=q.dateTime({width:"medium"});break;case"PPP":U=q.dateTime({width:"long"});break;case"PPPP":default:U=q.dateTime({width:"full"});break}return U.replace("{{date}}",CL(X,q)).replace("{{time}}",AL(Z,q))},SL={p:AL,P:Ws};var ws=/^D+$/,Hs=/^Y+$/,Vs=["D","DD","YY","YYYY"];function TL($){return ws.test($)}function jL($){return Hs.test($)}function mL($,q,J){let X=Ks($,q,J);if(console.warn(X),Vs.includes($))throw RangeError(X)}function Ks($,q,J){let X=$[0]==="Y"?"years":"days of the month";return`Use \`${$.toLowerCase()}\` instead of \`${$}\` (in \`${q}\`) for formatting ${X} to the input \`${J}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}var zs=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Bs=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Fs=/^'([^]*?)'?$/,Gs=/''/g,Ns=/[a-zA-Z]/;function fL($,q,J){let X=fJ(),Z=J?.locale??X.locale??EU,U=J?.firstWeekContainsDate??J?.locale?.options?.firstWeekContainsDate??X.firstWeekContainsDate??X.locale?.options?.firstWeekContainsDate??1,W=J?.weekStartsOn??J?.locale?.options?.weekStartsOn??X.weekStartsOn??X.locale?.options?.weekStartsOn??0,H=X6($,J?.in);if(!VL(H))throw RangeError("Invalid time value");let K=q.match(Bs).map((B)=>{let P=B[0];if(P==="p"||P==="P"){let M=SL[P];return M(B,Z.formatLong)}return B}).join("").match(zs).map((B)=>{if(B==="''")return{isToken:!1,value:"'"};let P=B[0];if(P==="'")return{isToken:!1,value:Ds(B)};if(CU[P])return{isToken:!0,value:B};if(P.match(Ns))throw RangeError("Format string contains an unescaped latin alphabet character `"+P+"`");return{isToken:!1,value:B}});if(Z.localize.preprocessor)K=Z.localize.preprocessor(H,K);let F={firstWeekContainsDate:U,weekStartsOn:W,locale:Z};return K.map((B)=>{if(!B.isToken)return B.value;let P=B.value;if(!J?.useAdditionalWeekYearTokens&&jL(P)||!J?.useAdditionalDayOfYearTokens&&TL(P))mL(P,q,String($));let M=CU[P[0]];return M(H,P,Z.localize,F)}).join("")}function Ds($){let q=$.match(Fs);if(!q)return $;return q[1].replace(Gs,"'")}var M4=b$(x0(),1);var RQ=b$(x0(),1);import{pathToFileURL as Ms}from"node:url";var Ls={teammate:{nudgeMode:"steer",hideTools:!1,hideModelName:!1,concurrentlyModels:[],cycling:{events:[],models:[]}},tasks:{maxVisible:5}},_L={},kL={};try{_L=(await Promise.resolve().then(() => (IL(),xL))).default}catch{}try{let $=AM();if($)kL=(await import(Ms($).href)).default}catch($){throw Error(`Falha ao carregar pipa.config.ts do usuário: ${$.message}`)}var k6=RQ.mergeWith({},Ls,_L,kL,($,q)=>{if(RQ.isArray($))return q});import Rs from"node-notifier";import{activeWindow as Es}from"get-windows";import{resolve as Cs}from"node:path";var As=RM(import.meta.url),Ss=new Set(["WindowsTerminal.exe","Code.exe","cmd.exe","powershell.exe","pwsh.exe","Terminal","iTerm2","Code","Cursor","gnome-terminal-server","konsole","xterm","alacritty","kitty","Warp","Zap"]);class AU{interpolations;activeToasts=new Set;constructor($){this.interpolations=$}async sendToast($){try{let Z=await Es();if(Z&&Ss.has(Z.owner.name))return}catch(Z){console.warn("Falha ao verificar foco da janela",Z)}let q=this.interpolations()||{},J=Q9($.message,q);if(this.activeToasts.has(J))return;this.activeToasts.add(J);let X={...$,title:"Pipa",message:J,icon:Cs(As,"../assets/logo_pipa.png")};Rs.notify(X,()=>{this.activeToasts.delete(J)})}async show($,q){return this.sendToast({message:$,...q})}}globalThis.mainPipaApi={};var Y9=()=>{return globalThis.mainPipaApi};function SU($,q){let J=new AU(()=>s.find(q.sessionManager.getSessionId())||{}),X={...$,context:q,toast:J,sessionId:q.sessionManager.getSessionId(),nudge(U,W="",H){W=(Array.isArray(W)?W:[W]).filter(Boolean);let K=W.map((R)=>{return{type:"text",text:M4.truncate(p(R),{length:250,separator:/,? +/,omission:"..."})}}),F=`Update (${fL(new Date,"HH:mm:ss")}):${Tq.unorderedList(K,({text:R})=>R)}`,{session:B,role:P}=s.find(X.sessionId)??{};if(K.length&&P==="main")J.show(F);if(K.length)q.ui.notify(F,"info");if(!H)return;let M=GQ(H);if(!B||k6.teammate.nudgeMode!=="abort")$.sendMessage({display:!1,customType:U,content:[{type:"text",text:M}]},{deliverAs:"steer",triggerTurn:!0});else B.abort().catch(()=>{}).finally(()=>{B.prompt(M)})},getAvailableModel(U){let{cycling:W,concurrentlyModels:H}=k6.teammate;if(W.models.length===0)return U;let{candidates:K,running:F}=bL(q);return K.find(({id:B})=>H.includes(B)||!F.has(B))||U},async cycleModel(){let{concurrentlyModels:U}=k6.teammate,W=s.find(X.sessionId)?.session;if(!W)return;let{candidates:H,running:K}=bL(q,(B)=>B.sessionId!==W.sessionId),F=H.findIndex((B)=>B.id===W.model?.id);for(let B=1;B<=H.length;B++){let P=(F+B)%H.length,M=H[P];if(!M)continue;if(U.includes(M.id)||!K.has(M.id))return W.setModel(M)}}},Z=globalThis.mainPipaApi;if(M4.isEmpty(Z))M4.merge(globalThis.mainPipaApi,X);return X}var bL=($,q=()=>!0)=>{let{cycling:J}=k6.teammate,X={candidates:[],running:new Set};if(J.models.length===0)return X;if(X.candidates=lM($.modelRegistry.getAvailable().filter((Z)=>J.models.includes(Z.id)),J.models,(Z)=>Z.id),X.candidates.length===0)return X;return X.running=new Set(s.list().filter((Z)=>q(Z)&&Z.isRunning&&Z.session?.model).map((Z)=>Z.session.model.id)),X};class B0{static get store(){let $=E0.get(N4);if(!$)$=E0.set(N4,new Map);return $}static add($,q){return E0.set(N4,B0.store.set($,q)),q}static update($,q){let J=B0.get($);return Object.assign(J,q),E0.set(N4,B0.store.set($,J)),J}static get($){let q=B0.store.get($);if(!q){let J=Tq.unorderedList(B0.list(),({name:X,sessionId:Z})=>[X,Z],"Nenhum colega online");throw Error(p(`Não foi possível localizar o colega responsável pela sessão: ${$}.`,"Sessão não existe ou colega já foi dispensado.",`Sessões online no momento: ${J}`))}return q}static find($){return B0.store.get($)}static search($){return[...B0.store.values()].find($)}static list(){return[...B0.store.values()]}static listSubordinates($){let q=B0.list(),J=[],X=(Z)=>{let U=q.filter(({parentSessionId:W})=>W===Z);for(let W of U)J.push(W),X(W.sessionId)};return X($),J}static delete($){B0.store.delete($),E0.set(N4,B0.store)}}class L4{constructor($){Object.assign(this,$)}id;name;description;status;owner;blockedBy;parentTaskId;squad;directory;artifactFile;creatorId;role;createdAt;completedAt;get isPending(){return this.status==="pending"}get isCompleted(){return this.status==="completed"}get isInProgress(){return this.status==="in-progress"}get isSetup(){return this.status==="setup"}get isAssigned(){return!!this.owner}canManage($){return $.role==="main"||$.sessionId===this.creatorId}}class o{pipa;constructor($){this.pipa=$}static get fileManager(){return new t0(vL.join(W8,Y9().sessionId))}static get store(){let $=E0.get(z8);if(!$)$=E0.set(z8,new Map);return $}static load(){(new t0(vL.join(W8,Y9().sessionId)).read(u2)??[]).forEach((q)=>o.add(q))}static persist(){o.fileManager.save(u2,o.list(),($)=>$)}static add($){return E0.set(z8,o.store.set($.id,Object.assign(new L4({}),$))),o.persist(),o.get($.id)}static update($,q){let J=o.store.get($);if(!J)return q;return E0.set(z8,o.store.set($,Object.assign(new L4({}),J,q))),o.persist(),o.get($)}static get($){let q=o.store.get($);if(!q)throw Error(`Task state not found for id: ${$}`);return q}static find($){return o.store.get($)}static list($){let q=[...o.store.values()];if($)return q.filter((J)=>J.owner?.sessionId===$);return q}static search($){return o.list().filter($)}static findOne($){return o.list().find($)}static delete($){o.store.delete($),E0.set(z8,o.store),o.persist()}static clear(){o.store.clear(),E0.set(z8,o.store),o.persist()}static isUnblocked($){if(!$.blockedBy?.length)return!0;return $.blockedBy.every(({id:q,type:J})=>{let X=o.store.get(q);if(!X)return!0;if(J==="hard")return X.isCompleted;return!0})}static isEligibleForTask($,q){if(B0.find($.creatorId))return $.creatorId===q.sessionId;return $.role===q.name}static listAvailable(){return o.list().filter(($)=>{return $.isPending&&!$.owner&&o.isUnblocked($)})}static listByOwner($){return o.list().filter((q)=>q.owner?.sessionId===$)}static listActive(){return o.list().filter(($)=>["in-progress","setup"].includes($.status))}static hasActiveTask($){return o.list().some((q)=>q.owner?.sessionId===$&&["in-progress","setup"].includes(q.status))}static getActiveTask($){return o.list().find((q)=>q.owner?.sessionId===$&&["in-progress","setup"].includes(q.status))}static getUncompletedHardDependencies($){return $.blockedBy.flatMap(({type:q,id:J})=>q==="hard"?[o.find(J)]:[]).filter((q)=>q&&!q.isCompleted)}static hasUncompletedHardDependency($){return $.blockedBy.some(({type:q,id:J})=>{if(q!=="hard")return!1;return!!o.find(J)&&!o.get(J).isCompleted})}static syncParentStatus($){let q=o.find($);if(!q)return!1;let J=o.search((H)=>H.parentTaskId===$);if(!J.length)return!1;let X=H5.every(J,"isPending"),Z=H5.every(J,"isCompleted"),U=H5.some(J,"isInProgress"),W=q.status;if(Z)W="completed";else if(U)W="in-progress";else if(X)W="pending";if(q.status===W)return!1;return o.update($,{status:W}),!0}}import Ts from"node:fs";import js from"node:path";class O$ extends Error{action;tool;constructor($,...q){let[J,X]=$.split("."),[Z,...U]=q;super([`[${X}] `,Z,U?`: ${p(...U)}`:""].filter(Boolean).join(""));this.name="PipaException",this.action=X??"N/A",this.tool=J??"N/A"}}var I0={get:{code:"task.get",get failed(){return[this.code,"Falha durante consulta"]}},setup:{code:"task.setup",get failed(){return[this.code,"Falha durante configuração"]},get denied(){return[this.code,"Acesso negado para configurar"]}},claim:{code:"task.claim",get failed(){return[this.code,"Falha durante reivindicação"]}},instantiate:{code:"task.instantiate",get failed(){return[this.code,"Falha durante criação"]}},update:{code:"task.update",get failed(){return[this.code,"Falha durante atualização"]},get denied(){return[this.code,"Acesso negado para editar"]}},remove:{code:"task.remove",get failed(){return[this.code,"Falha durante remoção"]},get denied(){return[this.code,"Acesso negado"]}},complete:{code:"task.complete",get failed(){return[this.code,"Falha durante conclusão"]},get denied(){return[this.code,"Acesso negado"]}}},gL={"in-progress":"em andamento",pending:"pendente",stopped:"interrompida",completed:"concluída",setup:"configurando"};class TU{validateUniqueName($,q,J){let X=q==="instantiate"?I0.instantiate.failed:I0.update.failed;if(o.search(({name:U,id:W})=>U?.toLowerCase()===$.toLowerCase()&&W!==J).length)throw new O$(...X,`Já existe uma tarefa com o nome "${$}". A reivindique se possível ou trabalhe em outra.`);return{success:!0,data:void 0}}validateAntiOrphan($,q){let J=$.find((X)=>!o.find(X.id));if(J)throw new O$(...I0[q].failed,`Dependência inexistente: ID "${J.id}" não encontrado.`);return{success:!0,data:void 0}}canCreate($,q=[]){this.validateUniqueName($,"instantiate"),this.validateAntiOrphan(q,"instantiate")}canSetup($,q,J){let X=o.find($);if(!X)throw new O$(...I0.setup.failed,`Tarefa "${$}" não encontrada.`);if(X.status!=="setup")throw new O$(...I0.setup.failed,`Ação 'setup' permitida apenas para tarefas em status 'setup' (Atual: ${X.status}).`);return this.canUpdate($,q,J)}canUpdate($,q,J){let X=o.find($);if(!X)throw new O$(...I0.update.failed,`Tarefa "${$}" não encontrada.`);if(!X.canManage(J)&&X.owner?.sessionId!==J.sessionId)throw new O$(...I0.update.failed,"Somente o criador, dono ou main podem editar.");if(q.name)this.validateUniqueName(q.name,"update",$);if(q.blockedBy){this.validateAntiOrphan(q.blockedBy,"update");let Z=dM($,(U)=>{if(U===$)return q.blockedBy.map(({id:W})=>W);return o.find(U)?.blockedBy.map(({id:W})=>W)||[]});if(Z)throw new O$(...I0.update.failed,`Dependência circular detectada: ${Z.join(" -> ")}.`)}return X}canRemove($,q,J){let X=o.find($);if(!X)throw new O$(...I0.remove.failed,`Tarefa com ID ${$} não encontrada.`);if(X.isInProgress&&X.isAssigned&&!J)throw new O$(...I0.remove.failed,`Tarefa "${X.id}" atribuída e em andamento. Antes de remover, solicite a interrupção ou use force.`);if(J&&X.isInProgress&&X.isAssigned&&!X.canManage(q))throw new O$(...I0.remove.failed,"Somente o criador da tarefa ou main podem forçar a remoção de uma tarefa em andamento.");return X}canClaim($,q){if(q.role!=="subagent")throw new O$(...I0.claim.failed,"Apenas colegas podem reivindicar tarefas.");let J=o.find($);if(!J)throw new O$(...I0.claim.failed,`Tarefa com ID ${$} não encontrada.`);if(J.status!=="pending")throw new O$(...I0.claim.failed,`Tarefa "${J.name}" não está pendente.`);if(!o.isEligibleForTask(J,q))throw new O$(...I0.claim.failed,"Apenas o criador da tarefa (ou um colega com o mesmo papel, se o criador estiver offline) pode reivindicá-la.");let X=o.getUncompletedHardDependencies(J);if(X.length>0){let Z=X.map((U)=>`"${U.name}" (ID: ${U.id})`).join(", ");throw new O$(...I0.claim.failed,`Não é possível reivindicar a tarefa "${J.name}" porque ela possui dependências hard pendentes: ${Z}.`)}return J}canComplete($,q,J,X){if(X&&q.role!=="main")throw new O$(...I0.complete.failed,"Apenas o supervisor (main) pode forçar a conclusão de uma tarefa.");let Z=o.find($);if(!Z)throw new O$(...I0.complete.failed,`Tarefa com ID ${$} não encontrada.`);if(!J)throw new O$(...I0.complete.failed,"É obrigatório informar o caminho do arquivo de artefato (artifactFile) para completar a tarefa.");if(!Ts.existsSync(js.resolve(J)))throw new O$(...I0.complete.failed,`O arquivo de artefato informado ("${J}") não foi encontrado no disco. Certifique-se de que o path está correto e relativo à raiz do projeto.`);if(Z.status!=="in-progress"&&!X){let W=[`Tarefa "${Z.name}" não está em andamento. Status atual: ${Z.status}.`,...q.role==="main"?["Use force para concluir mesmo assim"]:[]];throw new O$(...I0.complete.failed,p(...W.filter(Boolean)))}if(!X&&q.role!=="main"&&Z.owner?.sessionId!==q.sessionId)throw new O$(...I0.complete.failed,`Você não é o dono da tarefa "${Z.name}". Somente o proprietário ou supervisor pode finalizá-la.`);let U=o.search((W)=>W.parentTaskId===$&&!W.isCompleted);if(U.length>0&&!X){let W=[`Não é possível concluir a tarefa "${Z.name}" pois ela possui ${U.length} subtarefa(s) não finalizada(s)`,...q.role==="main"?["Use force para concluir mesmo assim"]:[]];throw new O$(...I0.complete.failed,p(...W.filter(Boolean)))}return Z}}var jU=b$(x0(),1),hL=b$(f6(),1);class mU extends hL.Mixin(TU,o){pipa;constructor($){super();this.pipa=$}get({id:$}){let q=o.find($);if(!q)throw new O$(...I0.get.failed,`Tarefa com ID "${$}" não encontrada.`);return q}list({status:$}){let q=o.search((Z)=>!$||Z.status===$),{role:J,sessionId:X}=s.get(this.pipa.sessionId);if(J==="subagent")q=q.filter((Z)=>Z.creatorId===X||Z.owner?.sessionId===X);return q}setup({id:$,updates:q}){let J=s.get(this.pipa.sessionId);return this.canSetup($,q,J),o.update($,{...q,status:"in-progress",owner:jU.pick(J,["sessionId","name"])}),this.pipa.events.emit("task_updated",o.get($)),this.notifyEligibleIdleTeammates(),o.get($)}update({id:$,updates:q}){let J=s.get(this.pipa.sessionId);return this.canUpdate($,q,J),o.update($,q),this.pipa.events.emit("task_updated",o.get($)),this.notifyEligibleIdleTeammates(),o.get($)}remove({id:$,force:q}){let J=s.get(this.pipa.sessionId),X=this.canRemove($,J,q);if(o.delete($),X.parentTaskId&&o.syncParentStatus(X.parentTaskId))this.pipa.events.emit("task_updated",o.get(X.parentTaskId)),this.notifyEligibleIdleTeammates();this.pipa.events.emit("task_removed",X)}claim({id:$}){let q=s.get(this.pipa.sessionId),J=this.canClaim($,q);if(o.update($,{status:"in-progress",owner:jU.pick(q,["sessionId","name"])}),this.pipa.events.emit("task_claimed",o.get($)),J.parentTaskId&&o.syncParentStatus(J.parentTaskId))this.pipa.events.emit("task_updated",o.get(J.parentTaskId)),this.pipa.nudge("task.sync",`Status do épico sincronizado automaticamente devido ao andamento da tarefa ${J.name}.`);return o.get($)}complete({id:$,artifactFile:q,force:J}){let X=s.get(this.pipa.sessionId),Z=this.canComplete($,X,q,J);if(o.update($,{status:"completed",artifactFile:q,completedAt:Date.now()}),this.pipa.events.emit("task_completed",o.get($)),Z.parentTaskId&&o.syncParentStatus(Z.parentTaskId))this.pipa.events.emit("task_updated",o.get(Z.parentTaskId)),this.pipa.nudge("task.sync","Épico pai concluído automaticamente porque todas as sub-tarefas foram finalizadas.");this.notifyEligibleIdleTeammates();let U=s.find(X.parentSessionId??Z.creatorId);if(U?.pipa&&U.sessionId!==X.sessionId)U.pipa.nudge("task.reminder",`[${X.name}] Tarefa concluída: ${Z.name}`,{message:`A tarefa "${Z.name}" foi concluída por ${X.name} <${X.sessionId}> e isso desbloqueou novas tarefas pendentes.`,instructions:["Antes de decidir o destino do colega, AVALIE o resultado da tarefa concluída:","1. Confira o artifactFile/entregável e os critérios de aceite; valide (build/ts-check) quando aplicável.","Depois decida com motivo explícito:","(a) Resultado com problema → NÃO dispense: peça ajuste ao colega via chat e aponte o que falta.","(b) Resultado ok, sem tarefas pendentes e sem necessidade futura → dispense com motivo: use 'teammates dismiss' preenchendo teammateId e reason (motivo objetivo da dispensa, ex: tarefas concluídas, não será mais necessário nas próximas etapas).","(c) Resultado ok, mas ainda necessário (pendências ou etapas futuras) → mantenha e registre aqui o motivo da manutenção."]});return o.get($)}notifyEligibleIdleTeammates(){let $=o.listAvailable();if(!$.length)return;s.list().filter(({status:J,role:X})=>J==="idle"&&X==="subagent").forEach((J)=>{let X=$.filter((Z)=>o.isEligibleForTask(Z,J));if(!X.length||!J.pipa)return;J.pipa.nudge("task.available",`Nova tarefa disponível para o colega ${J.name}.`,{action:"task.available",message:"Há novas tarefas disponíveis prontas para o seu papel.",tasks:X.map((Z)=>({id:Z.id,name:Z.name})),instructions:["Você deve reivindicar uma dessas tarefas para começar a trabalhar.","Execute: 'task claim ID_DA_TAREFA'"]})})}}class V5{pipa;constructor($){this.pipa=$}static getActiveSquads(){return o.search(($)=>!!$.squad&&!$.parentTaskId)}getParentSquadTask($){if(!$)return;return o.findOne((q)=>q.squad===$&&!q.parentTaskId)}listBySquad({squad:$}){return o.search((q)=>q.squad===$)}squadStatus({squad:$}){let q=o.search((W)=>W.squad===$),J=q.length,X=q.filter((W)=>W.isCompleted).length,Z=q.filter((W)=>W.isInProgress).length,U=q.filter((W)=>W.isPending).length;return{squad:$,total:J,completed:X,inProgress:Z,pending:U,progress:J>0?`${Math.round(X/J*100)}%`:"0%"}}}class K5{constructor($){Object.assign(this,$)}name;sessionId;parentSessionId;status;lastEvent;depth;role;goal;body;description;frontmatter;pipa;session;workspaceDir;sessionDir;startedAt;lastActiveAt;lastTool;eventsMountMap={};get isRunning(){return this.status==="running"}get isStopping(){return this.status==="stopping"}}var yL={idle:"\uD83D\uDE34",running:"\uD83D\uDE80",failed:"❌",stopping:"⌛"};class fU{pipa;constructor($){this.pipa=$}sendInbox({teammateId:$,message:q}){let J=B0.get($),X=B0.get(this.pipa.sessionId),Z=`${X.name} <${X.sessionId}>`;new t0(J.workspaceDir).save("inbox.json",[{from:Z,content:q,timestamp:Date.now()}])}chat({teammateId:$,message:q}){let J=B0.get($),X=B0.get(this.pipa.sessionId),Z=`${X.name} <${X.sessionId}>`;return J.pipa?.nudge("teammates.chat",`Nova mensagem de ${X.name}`,{from:Z,content:q}),{recipient:{id:J.sessionId,name:J.name},from:Z,message:q,delivered:!0}}readInbox(){let $=B0.get(this.pipa.sessionId),q=new t0($.workspaceDir),J=q.read("inbox.json")??[];return q.save("inbox.json",[]),J}}var vj=b$(NS(),1),gj=b$(kj(),1),$3=b$(x0(),1);import bj from"node:fs";class q3{pipa;constructor($){this.pipa=$}static getTeammatesFrontmatter($){let q=F4(),J=QQ($),X=new Map,Z=[q,J];for(let U of Z){if(!U||!bj.existsSync(U))continue;let W=vj.default.sync("**/*.md",{cwd:U,absolute:!0});for(let H of W)try{let K=bj.readFileSync(H,"utf8"),F=gj.default(K),B=F.data;if($3.isEmpty(B))continue;let P=F.content.trim(),M=B.name;X.set(M,{...B,name:M,body:P,description:String(B.description)})}catch{}}return X}list(){let $=[...q3.getTeammatesFrontmatter(this.pipa.context.cwd).values()];return $3.map($,({name:q,description:J})=>({name:q,description:J}))}}var a9={instantiate:{code:"teammates.instantiate",get failed(){return[this.code,"Falha durante início"]},get denied(){return[this.code,"Acesso negado para invocar colega"]}},dismiss:{code:"teammates.dismiss",get failed(){return[this.code,"Tentativa inválida de dispensar colega"]},get denied(){return[this.code,"Acesso negado"]}}},hj={running:"executando",idle:"ocioso",failed:"falhou",stopping:"encerrando"};class S5{canSpawn($,q,J){let X=s.getTeammatesFrontmatter(q).get($);if(!X)throw new O$(...a9.instantiate.failed,`O colega "${$}" não foi encontrado no projeto.`);let Z=Object.keys(J.frontmatter?.spawnableTeammates??{});if(J.role!=="main"&&J.name!==$&&!Z.includes("*")&&!Z.includes($))throw new O$(...a9.instantiate.denied,`Seu perfil não tem permissão para invocar o colega "${$}".`,`Colegas permitidos: ${[J.name,...Z].join(", ")}.`,"Se necessário, forneça os detalhes a seu supervisor e peça para ele invocar o colega.");let U=s.search((W)=>W.name===$&&["idle","failed"].includes(W.status));if(U)throw new O$(...a9.instantiate.failed,`Colega "${$}" já está online (${U.sessionId}). Delegue a ele.`);return X}canDismiss($,q,J){let X=s.find($);if(!X)throw new O$(...a9.dismiss.failed,"Colega não encontrado.");if(X.role==="main")throw new O$(...a9.dismiss.failed,"Não é permitido dispensar o agente principal.");if(X.parentSessionId!==q&&J!=="main")throw new O$(...a9.dismiss.denied,"Sem permissão para remover este colega.");let Z=s.listSubordinates($),U=[X,...Z];if(U.some((H)=>H.isStopping))throw new O$(...a9.dismiss.failed,"Colega já está sendo encerrado.");if(U.filter(({sessionId:H})=>{return o.listByOwner(H).filter((F)=>F.status!=="completed"&&F.status!=="stopped").length>0}).length>0)throw new O$(...a9.dismiss.failed,"Não é possível dispensar: há colegas com tarefas em andamento ou pendentes.");return{teammate:X,allToDismiss:U}}}class lW extends S5{pipa;constructor($){super();this.pipa=$}online(){return[...B0.list()].map((q)=>{let J=q.session?.getSessionStats();return{id:q.sessionId,name:q.name,status:q.status,statusEmoji:yL[q.status],tokens_in:G4(J?.tokens?.input??0),tokens_out:G4(J?.tokens?.output??0)}})}dismiss({teammateId:$,reason:q}){let J=B0.get(this.pipa.sessionId).role,{teammate:X,allToDismiss:Z}=this.canDismiss($,this.pipa.sessionId,J);for(let W of Z)B0.update(W.sessionId,{status:"stopping"}),W.pipa?.nudge("teammates.dismiss","Sincronizando atividades",`Você foi dispensado pelo supervisor. Motivo: ${q}. Encerrando atividades...`);let U={dismissed:{id:X.sessionId,name:X.name},count:Z.length,reason:q};return Promise.allSettled(Z.map(async(W)=>{try{await W.session?.abort()}finally{W.pipa?.context.shutdown(),B0.delete(W.sessionId)}})).then(()=>this.pipa.events.emit("teammate_removed",U)).catch(()=>{return}),U}}function yj($,q){if(!$){let J=["Vale criar um squad para esta tarefa?","Um squad atua como um agrupamento ou épico de tarefas inter-relacionadas, ajudando a coordenar esforços entre colegas em um mesmo objetivo maior.","Se múltiplos colegas forem atuar na execução desta tarefa, é fortemente recomendado criar um squad.","Atenção: Não crie um squad se a tarefa for pontual ou muito simples."];if(q?.length){let X=q.map((Z)=>`"${Z.squad}" (ID: ${Z.id})`).join(", ");J.push(`Existem os seguintes squads em andamento: ${X}.`,"É fortemente recomendado usar um squad existente se a tarefa tiver relação com ele.","Para isso, defina o squad e use o ID da tarefa listada como parentTaskId.")}return J.push("Se fizer sentido, use task passando squad e parentTaskId (se houver) no create ou setup da sua tarefa."),p(...J)}return`Você faz parte do squad "${$}". Use task "list-by-squad" ou "squad-status" para coordenar com o squad.`}var Xg$={main:p("Você é o Pipa, uma agente poderosa projetada para delegar tarefas a subagentes","Seu objetivo é gerenciar e coordenar com eficiência a execução de tarefas, criando e supervisionando subagentes.","Sempre garanta que seus subagentes estejam trabalhando para a conclusão bem-sucedida das tarefas que você delega.","Você nunca executa tarefas nem realiza operações de escrita; você apenas delega tarefas aos seus subagentes e os gerencia.","Portanto, sempre liste os colegas disponíveis e delegue tarefas a eles para garantir a execução bem-sucedida das tarefas.",'Easter Egg: Se um usuário perguntar "Quem é a mãe da Pipa?", responda "A mãe da Pipa é a Aelin"'),subagent:p("Você é uma subagente criada pelo Pipa, uma agente poderosa projetada para delegar tarefas. ","Seu objetivo é executar a tarefa específica atribuída a você pela Pipa.","Sempre garanta que você esteja trabalhando para a conclusão bem-sucedida da tarefa delegada a você pela Pipa.","Sua última mensagem deve reportar o progresso ou a conclusão da tarefa para a Pipa, para que ela possa gerenciar e coordenar adequadamente a execução das tarefas.")},cj=p("Você foi chamado(a) para atuar em um novo objetivo.","Sua tarefa principal (ID [taskId]) já foi criada e aguardando configuração por sua parte.","[squad]",'Você deve atualizar o nome e, caso necessário, bloqueios e tarefa pai. Para isso, use tool task -> action "setup"','Verifique-a com task -> action "get".','Mantenha seu próprio plano de execução. Para isso, use tool todo -> action "add" para criar e action "update" para atualizar os itens.','Se reporte a [owner] <[sessionId]> para atualizações e dúvidas via teammates -> action "chat".');class s extends uj.Mixin(q3,B0,fU,S5,lW){pipa;constructor($){super($);this.pipa=$}get teammatesFileManager(){return new t0(dj.join(yX,E0.get(DQ)))}async instantiate($){let{name:q,goal:J}=$,X=s.get(this.pipa.sessionId),Z=this.canSpawn(q,this.pipa.context.cwd,X),U=this.pipa.sessionId,W=this.pipa.context,H=s.get(U),K=o.getActiveTask(U),F=K?.squad,B=await TM(W.cwd,U,Z.body),{session:P}=await AJ$({...B,model:this.pipa.getAvailableModel(W.model)}),M=P.sessionId,R=s.add(M,new K5({...Z,frontmatter:Z,goal:J,session:P,startedAt:Date.now(),lastActiveAt:Date.now(),status:"idle",depth:s.get(H.sessionId).depth+1,role:"subagent",sessionId:M,parentSessionId:U,workspaceDir:dj.join(yX,H.sessionId,M),sessionDir:P.sessionManager.getSessionDir()}));this.teammatesFileManager.save("teammates.json",{[M]:T5.omit(R,["session"])});let S={sessionId:R.sessionId,name:R.name,status:R.status,role:R.role,parentSessionId:R.parentSessionId,depth:R.depth};this.pipa.events.emit("teammate_created",S),P.setSessionName($5(`teammate-${q}-${J}`));let f=o.add(new L4({id:m9(),name:"Nova Tarefa",description:J,status:"setup",squad:F,parentTaskId:K?.id,blockedBy:[],directory:W.cwd,owner:{sessionId:M,name:q},creatorId:M,role:R.name,createdAt:Date.now()}));return P.prompt(p(Q9(cj,{taskId:f.id,owner:H.name,sessionId:H.sessionId,squad:yj(F,V5.getActiveSquads())}))),this.pipa.nudge("teammates.instantiate",[`${T5.capitalize(q)} online`,`Mensagens: ${R.workspaceDir}/messages.json`,`Objetivo: ${J}`],p("Ele trabalhará na tarefa em segundo plano.","\uD83D\uDEA8 IMPORTANTE: Aguarde as atualizações dele via chat ou caixa de entrada passivamente.","NÃO exija ou espere um resultado imediato.",Tq.unorderedList([`ID da sessão: ${R.sessionId}`,`Diretório de trabalho: ${R.workspaceDir}`]))),T5.omit(R,["session","pipa"])}}var SJ$=new Set(["task","teammates","todo"]);class pW{blockedToolCallIds=new Set;guardUnclaimedToolCall({toolName:$,toolCallId:q},J){if(s.get(J.sessionId).role==="main"||!$||SJ$.has($)||o.hasActiveTask(J.sessionId))return;return this.blockedToolCallIds.add(q),{block:!0,reason:p(`O uso de "${$}" requer uma tarefa ativa.`,'Use task com action "claim" para reivindicar uma tarefa antes de executar ferramentas.','Caso não haja nenhuma tarefa ativa, crie uma com task → action "instantiate".')}}collapseBlockedLoop($,q){if(!this.blockedToolCallIds.size)return;let J=this.blockedToolCallIds,X=$.messages.filter((W)=>{if(mJ(W))return!KQ(W.content,J);if(VQ(W))return!zQ(W,J);return!0}),Z=$.messages.length-X.length;if(this.blockedToolCallIds.clear(),!Z)return;$.messages.push();let U={role:"user",content:[{type:"text",text:p(`${Z} mensagem(ns) de tentativa de tool sem tarefa ativa foram removidas do contexto.`,'Antes de usar qualquer ferramenta, reivindique uma tarefa: task → action "claim".','Caso não haja nenhuma tarefa ativa, crie uma com task → action "instantiate".')}],timestamp:Date.now()};return $.messages=[...X,U],$}}D$([Y$("tool_call"),h("design:type",Function),h("design:paramtypes",[typeof ToolCallEvent==="undefined"?Object:ToolCallEvent,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",Object)],pW.prototype,"guardUnclaimedToolCall",null),D$([Y$("context"),h("design:type",Function),h("design:paramtypes",[typeof ContextEvent==="undefined"?Object:ContextEvent,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",Object)],pW.prototype,"collapseBlockedLoop",null);var v4=b$(x0(),1);import lj from"node:path";import TJ$ from"node:fs";class nW{initializeSession($,q){let J=q.sessionId;if(!s.find(J))s.add(J,new K5({name:"pipa",startedAt:Date.now(),lastActiveAt:Date.now(),goal:"Orquestrar a execução de tarefas.",status:"running",depth:0,role:"main",sessionId:J,workspaceDir:lj.join(yX,J)})),E0.set(DQ,q.sessionId);s.update(J,{pipa:q})}async mitigateModelConcurrency($,q){let J=s.get(q.sessionId);if(!J.session?.model?.id||k6.teammate.concurrentlyModels.includes(J.session.model.id)||k6.teammate.cycling.events.includes("concurrency"))return;let X=s.list().filter((H)=>H.sessionId!==q.sessionId&&H.isRunning&&H.session?.model).map((H)=>H.session.model.id),Z=new Set(X),U=J.session.model.id,W=U;while(Z.has(W))if(await q.cycleModel(),W=J.session.model.id,W===U)break}injectExecutionContext($,q){let J=s.get(q.sessionId),X=Object.keys(J.frontmatter?.spawnableTeammates??{}),Z=J.role==="main"?["*"]:X,U=$.systemPrompt,W=[...s.getTeammatesFrontmatter(q.context.cwd).values()].filter(({name:H})=>Z.includes("*")||Z.includes(H)||H===J.name);if(J.role==="main")U+=TJ$.readFileSync(lj.join(F4(),"SYSTEM_PIPA.md"),"utf-8");if(W.length>0){let H=p(`
|
|
137
137
|
|
|
138
138
|
## Colaboração e Delegação
|
|
139
139
|
`,"Você tem autonomia para delegar tarefas.",`Abaixo estão os colegas que você pode acionar e os motivos para invocá-los:
|
|
140
140
|
|
|
141
|
-
`);$.systemPrompt+=W,$.systemPrompt+=Tq.unorderedList(U,({name:H,description:K})=>{return[H,p(K,J.frontmatter?.spawnableTeammates?.[H]??"—")]},"Nenhum colega encontrado.")}return $}updateInstanceOnAgentStart($,q){s.update(q.sessionId,{pipa:q})}}D$([Y$("session_start"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],nW.prototype,"initializeSession",null),D$([Y$("before_agent_start"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",Promise)],nW.prototype,"mitigateModelConcurrency",null),D$([Y$("before_agent_start"),h("design:type",Function),h("design:paramtypes",[typeof BeforeAgentStartEvent==="undefined"?Object:BeforeAgentStartEvent,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",typeof BeforeAgentStartEventResult==="undefined"?Object:BeforeAgentStartEventResult)],nW.prototype,"injectExecutionContext",null),D$([Y$("agent_start"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],nW.prototype,"updateInstanceOnAgentStart",null);class pj{intervals=new Set;every($,q){this.intervals.add(setInterval(q,$))}everyForTeammate($,q,J){this.every(q,()=>{let X=s.find($);if(!X)return;J(X)})}everyWhenTeammateIs($,q,J,X,Z){this.everyForTeammate(q,X,(U)=>{if(U.status!==$)return;let W=U.lastActiveAt??U.startedAt;if(Date.now()-W<J)return;Z(U)})}everyWhenTeammateFailed($,q,J){this.everyForTeammate($,q,(X)=>{if(X.status!=="failed")return;J(X)})}clearAll($){let{role:q}=s.find($)||{};if(q==="main")return;this.intervals.forEach(clearInterval),this.intervals.clear()}}class C8{sessionIntervals=new pj}var jJ$=60000,mJ$=300000,fJ$=3,xJ$=180000,IJ$=30000;class iW extends C8{failCount=0;removeInactiveTeammate($,q){let{role:J}=s.find(q.sessionId)||{};if(J==="main")return;this.sessionIntervals.everyWhenTeammateIs("idle",q.sessionId,mJ$,jJ$,()=>this.shutdown(void 0,q))}abortStuckTeammate($,q){let{role:J}=s.find(q.sessionId)||{};if(J==="main")return;this.sessionIntervals.everyWhenTeammateIs("running",q.sessionId,xJ$,IJ$,async(X)=>{await X.session?.abort(),q.nudge("teammates.stuck","Operação abortada por inatividade",["A sua operação atual estava demorando muito (mais de 3 minutos sem atualizações) e foi abortada para destravar você.","Por favor, verifique se há algo bloqueando a ferramenta e tente novamente ou mude sua abordagem."])})}setRunningStatus($,q){if(s.find(q.sessionId)?.isStopping)return;s.update(q.sessionId,{status:"running",lastActiveAt:Date.now()})}handleAgentEnd($,q){let J=s.find(q.sessionId),{status:X}=J||{};if(X==="failed"||J?.isStopping)return;s.update(q.sessionId,{status:"idle",lastTool:void 0}),q.toast.show("Colega [name] está aguardando instruções.")}async handleAgentFail($,q){if(!mJ($.message))return;if($.message.stopReason!=="error"){this.failCount=0;return}if(s.find(q.sessionId)?.isStopping)return;if(s.update(q.sessionId,{status:"failed"}),$.type!=="message_end")return;this.failCount++;let J=s.get(q.sessionId);if(!J.parentSessionId)return;if(k6.teammate.cycling.events.includes("error")&&this.failCount>=fJ$)this.failCount=0,await q.cycleModel();s.find(J.parentSessionId)?.pipa?.nudge("teammates.failed",[`Colega ${J.name} <${J.sessionId}> encontrou um erro e parou de funcionar.`])}async shutdown($,q){this.sessionIntervals.clearAll(q.sessionId);let J=s.find(q.sessionId);if(!J||J.isStopping||J.role==="main"||!J.parentSessionId||o.hasActiveTask(J.sessionId))return;s.update(J.sessionId,{status:"stopping"}),s.get(J.parentSessionId).pipa?.nudge("teammates.shutdown",`Colega ${J.name} <${J.sessionId}> encerrando...`),await J.session?.abort(),q.context.shutdown(),s.delete(q.sessionId)}}D$([Y$("session_start"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],iW.prototype,"removeInactiveTeammate",null),D$([Y$("session_start"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],iW.prototype,"abortStuckTeammate",null),D$([Y$("agent_start"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],iW.prototype,"setRunningStatus",null),D$([Y$("agent_end"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],iW.prototype,"handleAgentEnd",null),D$([Y$("message_start"),Y$("message_update"),Y$("message_end"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",Promise)],iW.prototype,"handleAgentFail",null),D$([Y$("session_shutdown"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",Promise)],iW.prototype,"shutdown",null);class oW{handleActivityEvent($,q){if(!s.find(q.sessionId))return;let X=$.args||$.input;s.update(q.sessionId,{lastActiveAt:Date.now(),lastEvent:$.type,lastTool:`${$.toolName}${X?`(${JSON.stringify(X)})`:""}`})}logTeammateMessages($,q){let J=s.get(q.sessionId);new t0(J.workspaceDir).save("messages.json",[{content:JSON.stringify($.message,null,0),timestamp:Date.now()}])}}D$([Y$("tool_call"),Y$("tool_result"),Y$("tool_execution_start"),Y$("tool_execution_update"),Y$("tool_execution_end"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],oW.prototype,"handleActivityEvent",null),D$([Y$("message_start"),h("design:type",Function),h("design:paramtypes",[typeof MessageEndEvent==="undefined"?Object:MessageEndEvent,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",Object)],oW.prototype,"logTeammateMessages",null);var _J$=300000,kJ$=15000,bJ$=60000;class sW extends C8{lastIdleNudgeAt=0;idleNudgeCount=0;failure={};nudgeInbox($,q){this.sessionIntervals.everyForTeammate(q.sessionId,60000,(J)=>{if(J.isStopping)return;let Z=new t0(J.workspaceDir).read("inbox.json")||[];if(!Z.length)return;q.nudge("teammates.inbox",`Você tem **${Z.length}** nova(s) mensagem(ns) na sua caixa de entrada. Leia quando puder`,{action:"teammates.read-inbox"})})}nudgeIdleTeammate($,q){this.sessionIntervals.everyWhenTeammateIs("idle",q.sessionId,_J$,kJ$,(J)=>{if(J.isStopping||this.idleNudgeCount>=2)return;if(Date.now()-this.lastIdleNudgeAt<bJ$)return;if(J.role==="main")return;if(s.listSubordinates(q.sessionId).some((Z)=>Z.isRunning))return;this.lastIdleNudgeAt=Date.now(),this.idleNudgeCount++,q.nudge("teammates.idle",`Acordando ${J.name}`,["Você está sem executar ações há 1 minuto.","Continue trabalhando no seu objetivo ou reporte um bloqueio ao supervisor."])})}nudgeFailedTeammate($,q){this.sessionIntervals.everyWhenTeammateFailed(q.sessionId,30000,(J)=>{if(J.isStopping||J.session?.isRetrying)return;let X=s.find(J.parentSessionId??"");if(!X?.isStopping)X?.pipa?.nudge("teammates.failed",`Tentando acordar ${J.name}...`);q.nudge("teammates.failed",`Recuperando ${J.name}`,[`Ei, ${J.name}. Parece que você teve um problema na última execução.`,"Detalhes:",Tq.unorderedList([`Último evento: ${J.lastEvent??"nenhum"}.`,`Status code: ${this.failure.code}.`,`Mensagem: ${this.failure.error?.slice(0,100)}.`]),"Tente retomar a tarefa."])})}async handleAgentFail($,q){if(!mJ($.message))return;if($.message.stopReason!=="error")return;let J=$.message.diagnostics?.[0]?.error;this.failure.code=J?.code,this.failure.error=J?.message}handleIdleActivityEvent(){this.lastIdleNudgeAt=0,this.idleNudgeCount=0}clearReminders($,q){this.sessionIntervals.clearAll(q.sessionId),this.lastIdleNudgeAt=0,this.idleNudgeCount=0}}D$([Y$("session_start"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],sW.prototype,"nudgeInbox",null),D$([Y$("session_start"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],sW.prototype,"nudgeIdleTeammate",null),D$([Y$("session_start"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],sW.prototype,"nudgeFailedTeammate",null),D$([Y$("message_start"),Y$("message_update"),Y$("message_end"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",Promise)],sW.prototype,"handleAgentFail",null),D$([Y$("tool_call"),Y$("tool_result"),Y$("tool_execution_start"),Y$("tool_execution_update"),Y$("tool_execution_end"),h("design:type",Function),h("design:paramtypes",[]),h("design:returntype",void 0)],sW.prototype,"handleIdleActivityEvent",null),D$([Y$("session_shutdown"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],sW.prototype,"clearReminders",null);class rW{clearStoppingContext($,q){if(!s.find(q.sessionId)?.isStopping)return;return{messages:[]}}}D$([Y$("context"),h("design:type",Function),h("design:paramtypes",[typeof ContextEvent==="undefined"?Object:ContextEvent,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",Object)],rW.prototype,"clearStoppingContext",null);var nj=b$(x0(),1),ij=b$(f6(),1);import{truncateToWidth as vJ$}from"@earendil-works/pi-tui";class b4{constructor($){Object.assign(this,$)}id;sessionId;text;status;get isPending(){return this.status==="pending"}get isInProgress(){return this.status==="in_progress"}get isCompleted(){return this.status==="completed"}}class e0{static get store(){let $=E0.get("TODO_STORE");if(!$)$=E0.set("TODO_STORE",new Map);return $}static load($,q){let X=new t0($).read("todo.json")??[];e0.clear(q),X.forEach((Z)=>e0.add(new b4({...Z,sessionId:q})))}static add($){return this.store.set($.id,$),$}static update($,q){let J=this.store.get($);if(!J)return;let X=Object.assign(new b4({}),J,q);return this.store.set($,X),X}static delete($){this.store.delete($)}static clear($){let q=this.list($);for(let J of q)this.delete(J.id)}static list($){return Array.from(this.store.values()).filter((q)=>q.sessionId===$)}static get($){return this.store.get($)}}var aW={update:{code:"todo.update",get failed(){return[this.code,"Falha durante atualização"]}},remove:{code:"todo.remove",get failed(){return[this.code,"Falha durante remoção"]}}};class j5{canUpdate($,q){let J=e0.get(q);if(J?.sessionId!==$)throw new O$(...aW.update.failed,`Item com ID "${q}" não encontrado na lista de afazeres.`);return J}canRemove($,q){let J=e0.get(q);if(J?.sessionId!==$)throw new O$(...aW.remove.failed,`Item com ID "${q}" não encontrado na lista de afazeres.`);return J}}class tW extends j5{pipa;fileManager;constructor($){super();this.pipa=$;let q=s.get($.sessionId);this.fileManager=new t0(q.workspaceDir)}get sessionId(){return this.pipa.sessionId}persist(){this.fileManager.save("todo.json",e0.list(this.sessionId),($)=>$)}update({id:$,action:q,...J}){let X=this.canUpdate(this.sessionId,$),Z=e0.update($,J);return this.persist(),this.pipa.events.emit("todo_updated",Z??X),Z??X}remove({id:$}){let q=this.canRemove(this.sessionId,$);e0.delete($),this.persist(),this.pipa.events.emit("todo_removed",q)}clear(){e0.clear(this.sessionId),this.persist(),this.pipa.events.emit("todo_cleared",{sessionId:this.sessionId})}list(){return e0.list(this.sessionId)}}class eW{step=0;animationInterval;startAnimation($,q=80){if(this.animationInterval)clearInterval(this.animationInterval);this.animationInterval=setInterval(()=>{this.step++,$.requestRender()},q)}stopAnimation(){if(this.animationInterval)clearInterval(this.animationInterval),this.animationInterval=void 0}}class $w extends ij.Mixin(w5,eW){tui;getTeammates;theme;constructor($,q,J){super();this.tui=$;this.getTeammates=q;this.theme=J}start(){this.startAnimation(this.tui,120)}stop(){this.stopAnimation()}render($){let q=this.getTeammates(),J=BQ({items:q,getId:(Z)=>Z.sessionId,getParentId:(Z)=>Z.parentSessionId,sortNodes:(Z)=>nj.sortBy(Z,[(U)=>U.startedAt??0])}).flatMap((Z)=>Z.role==="main"?Z.children:[Z]);if(!J.length)return[this.theme.fg("accent","Colegas"),this.theme.fg("dim","○ nenhum colega ativo")];return[this.theme.fg("accent","Colegas"),...J.flatMap((Z,U)=>this.renderNode(Z,"",U===J.length-1))].map((Z)=>vJ$(Z,$))}invalidate(){return}renderLabel($){let q=this.theme.fg("text",$.name),J={name:q,tool:"",tokens:"",model:"",todos:""};if($.status==="idle")J.name=this.theme.fg("dim",$.name);else J.name=this.theme.bold(q);let X=this.colorStatus($),Z=this.elapsedLabel($),U=Z?this.theme.fg("dim",Z):"";if(!k6.teammate.hideModelName)J.model=this.theme.fg("dim",`(${$.session?.model?.id})`);if($.lastTool&&!k6.teammate.hideTools)J.tool=this.theme.fg("dim",$.lastTool);let W=e0.list($.sessionId);if(W.length)J.todos=this.theme.fg("dim",`passos: ${W.filter((F)=>F.isCompleted).length}/${W.length}`);let H=$.session?.getSessionStats();if(H?.tokens)J.tokens=this.theme.fg("dim",`${G4(H.tokens.input)}↑ ${G4(H.tokens.output)}↓`);let K=PM(this.theme,"·",J.name,J.model,X,U,J.todos,J.tokens,J.tool);return`${this.statusIcon($)} ${K}`}statusIcon($){switch($.status){case"failed":return this.theme.fg("error","×");case"running":return this.theme.fg("accent","●");default:return this.theme.fg("dim","○")}}colorStatus($){let q=$.status,J=hj[q];switch(q){case"failed":return this.theme.fg("error",J);case"running":return cM({step:this.step,seedString:$.sessionId});case"idle":return this.theme.fg("accent",J);case"stopping":return this.theme.fg("warning",J);default:return this.theme.fg("dim",J)}}elapsedLabel($){if($.status==="idle")return"aguardando início";if($.status==="failed")return"erro \uD83D\uDE35";if($.isStopping)return;let q=$.lastActiveAt;if(!q)return"";let J=Date.now(),X=Math.max(0,J-q),Z=Math.floor(X/1000),U=Math.floor(Z/60),W=Z%60;return`última ação há ${U>0?`${U}m ${W}s`:`${W}s`}`}}class qw{captureMain($,q){if(s.get(q.sessionId).role!=="main")return;Y9().context.ui.setWidget("pipa.teammates",(X,Z)=>{let U=new $w(X,s.list,Z);return U.start(),{render:(W)=>U.render(W),invalidate:()=>U.invalidate(),dispose:()=>U.stop()}},{placement:"aboveEditor"})}}D$([Y$("before_agent_start"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],qw.prototype,"captureMain",null);var oj=b$(f6(),1);import gJ$ from"node:path";class t9 extends oj.Mixin(mU,V5){pipa;folder;constructor($,q){super($);this.pipa=$;this.folder=q}instantiate($){let q=$.task;this.canCreate(q.name,q.blockedBy);let J=B0.get(this.pipa.sessionId),X=this.getParentSquadTask(q.squad)??o.getActiveTask(J.parentSessionId??""),Z=this.pipa.sessionId,U=Date.now(),W=m9(),H={...q,id:W,status:"pending",role:J.name,blockedBy:q.blockedBy||[],directory:gJ$.join(W8,W),parentTaskId:X?.id??q.parentTaskId,squad:X?.squad??q.squad,creatorId:Z,createdAt:U};if(o.add(H),H.parentTaskId)o.update(H.parentTaskId,{status:"in-progress"});return this.pipa.events.emit("task_created",H),this.notifyEligibleIdleTeammates(),H}}var Jw=30000,hJ$=120000,Xw=120000;class Zw extends C8{lastCreatorNudge=new Map;lastTeammateNudge=new Map;nudgeCreatorAboutUnownedTasks(){this.sessionIntervals.every(Jw,()=>{let $=Date.now();t9.listAvailable().forEach((J)=>{let X=s.find(J.creatorId);if(!X?.pipa||X.isStopping)return;if($-J.createdAt<hJ$)return;let U=this.lastCreatorNudge.get(J.id)||0;if($-U<Xw)return;this.lastCreatorNudge.set(J.id,$),X.pipa.nudge("task.reminder","Lembrete: Existem tarefas pendentes prontas para execução.",{action:"task.reminder",message:"As seguintes tarefas estão pendentes, sem proprietário e com todos os bloqueios resolvidos.",tasks:[v4.pick(J,["id","name"])],instructions:["Você deve reivindicar essas tarefas para começar a trabalhar.","Execute: 'task claim ID_DA_TAREFA'"]})})})}nudgeIdleTeammatesAboutAvailableTasks(){this.sessionIntervals.every(Jw,()=>{let $=Date.now(),q=t9.listAvailable();if(q.length===0)return;s.list().filter(({status:X,role:Z})=>X==="idle"&&Z==="subagent").forEach((X)=>{if(!X.pipa||X.isStopping)return;let Z=q.filter((W)=>t9.isEligibleForTask(W,X));if(Z.length===0)return;let U=this.lastTeammateNudge.get(X.sessionId)||0;if($-U<Xw)return;this.lastTeammateNudge.set(X.sessionId,$),X.pipa.nudge("task.available",`Tarefa disponível para o colega ${X.name}.`,{action:"task.available",message:"As seguintes tarefas estão livres, sem bloqueios e prontas para o seu papel.",tasks:v4.map(Z,["id","name"]),instructions:["Você está ocioso no momento.","Você deve reivindicar uma dessas tarefas para começar a trabalhar nela.","Execute: 'task claim ID_DA_TAREFA'"]})})})}nudgeIdleTeammatesWithActiveTasks(){this.sessionIntervals.every(Jw,()=>{let $=s.list().filter(({status:J,role:X})=>J==="idle"&&X==="subagent");if($.length===0)return;let q=v4.keyBy(t9.listActive().filter((J)=>J.owner),(J)=>J.owner.sessionId);$.forEach((J)=>{if(!J.pipa||J.isStopping)return;let X=q[J.sessionId];if(!X)return;let Z=Date.now(),U=this.lastTeammateNudge.get(J.sessionId)||0;if(Z-U<Xw)return;if(s.listSubordinates(J.sessionId).some((W)=>W.isRunning))return;this.lastTeammateNudge.set(J.sessionId,Z),J.pipa.nudge("task.reminder",`Aviso de inatividade com tarefa pendente: ${X.name}.`,{action:"task.reminder",message:`Você está ocioso mas possui a tarefa [${X.id}] ${X.name} em andamento.`,instructions:["Se você já concluiu seu trabalho, você DEVE finalizá-la.",`Execute: 'task complete ${X.id}'`,"Caso contrário, retome o trabalho informando seu supervisor."]})})})}shutdown($,q){this.sessionIntervals.clearAll(q.sessionId)}}D$([Y$("session_start"),h("design:type",Function),h("design:paramtypes",[]),h("design:returntype",void 0)],Zw.prototype,"nudgeCreatorAboutUnownedTasks",null),D$([Y$("session_start"),h("design:type",Function),h("design:paramtypes",[]),h("design:returntype",void 0)],Zw.prototype,"nudgeIdleTeammatesAboutAvailableTasks",null),D$([Y$("session_start"),h("design:type",Function),h("design:paramtypes",[]),h("design:returntype",void 0)],Zw.prototype,"nudgeIdleTeammatesWithActiveTasks",null),D$([Y$("session_shutdown"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],Zw.prototype,"shutdown",null);var sj=b$(x0(),1);import{truncateToWidth as yJ$}from"@earendil-works/pi-tui";var cJ$={"in-progress":0,pending:1,stopped:2,completed:3};class Qw extends w5{getTasks;theme;constructor($,q){super();this.getTasks=$;this.theme=q}expanded=!1;render($){let q=this.getTasks(),J=BQ({items:q.filter((K)=>!K.isSetup),getId:(K)=>K.id,getParentId:(K)=>K.parentTaskId,sortNodes:(K)=>sj.orderBy(K,[(F)=>cJ$[F.status]??1,"completedAt"],["asc","desc"])}),X=J.flatMap((K,F)=>this.renderNode(K,"",F===J.length-1)),Z=this.expanded?X:X.slice(0,k6.tasks.maxVisible),U=X.length-Z.length;if(!Z.length)return[this.theme.fg("accent","Tarefas"),this.theme.fg("dim","○ nenhuma tarefa ativa")];let W=[this.theme.fg("accent","Tarefas"),...Z],H={[String(!1)]:`ver mais ${U} tarefa${U>1?"s":""} (ctrl+t)`,[String(!0)]:"recolher (ctrl+t)"};if(U||this.expanded&&X.length>k6.tasks.maxVisible)W.push(this.theme.fg("dim",H[String(this.expanded)]));return W.map((K)=>yJ$(K,$))}invalidate(){return}toggle(){this.expanded=!this.expanded}renderLabel($){return`${this.statusIcon($)} ${this.label($)}`}statusIcon($){if(o.hasUncompletedHardDependency($))return this.theme.fg("warning","⚠");switch($.status){case"in-progress":return this.theme.fg("accent","●");case"completed":return this.theme.fg("success","✓");case"stopped":return this.theme.fg("error","×");default:return this.theme.fg("dim","○")}}label($){let q=this.theme.fg("text",nM($.name,50)),J=$.parentTaskId?"":iM($.squad,this.theme),X=this.colorStatus($),Z=$.owner?` · ${$.owner.name}`:" · não atribuído";return`${q}${J} ${X}${this.theme.fg("dim",Z)}`}colorStatus($){if(o.hasUncompletedHardDependency($))return this.theme.fg("warning","(bloqueada)");let q=gL[$.status];switch($.status){case"in-progress":return this.theme.fg("accent",`(${q})`);case"completed":return this.theme.fg("success",`(${q})`);case"stopped":return this.theme.fg("error",`(${q})`);default:return this.theme.fg("dim",`(${q})`)}}}import{Key as dJ$,matchesKey as uJ$}from"@earendil-works/pi-tui";class Yw{captureMain($,q){if(B0.get(q.sessionId).role!=="main")return;Y9().context.ui.setWidget("pipa.tasks",(X,Z)=>{let U=new Qw(o.list,Z),W=setInterval(X.requestRender.bind(X),1000),H=Y9().context.ui.onTerminalInput((K)=>{if(uJ$(K,dJ$.ctrl("t")))return U.toggle(),X.requestRender(),{consume:!0}});return{render:(K)=>U.render(K),invalidate:()=>U.invalidate(),dispose:()=>{clearInterval(W),H()}}},{placement:"aboveEditor"})}}D$([Y$("before_agent_start"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],Yw.prototype,"captureMain",null);var Ww=b$(x0(),1);var lJ$=["pending","in-progress","completed","stopped"],pJ$=["hard","soft"],Uw=A.Object({name:A.String({description:p("Máximo 50 caracteres",'Ex: "Criar schema de usuário", não frases longas')}),description:A.String({description:p("Descrição detalhada da tarefa em português","Inclua contexto, critérios de aceite e restrições")}),blockedBy:A.Array(A.Object({id:A.String({description:"ID da tarefa dependente. Ex: a1b2c3d4."}),type:A.Union(Ww.map(pJ$,A.Literal),{description:"hard: bloqueio total | soft: alerta informativo"})}),{description:p("Dependências da tarefa","Use hard para bloqueio total e soft para alertas","Garante a ordem correta de execução")}),parentTaskId:A.Optional(A.String({description:p("Se esta tarefa for uma sub-tarefa, informe o ID da tarefa pai (épico)","Omita para criar sem pai")})),squad:A.Optional(A.String({description:p("Nome do squad para agrupar tarefas","Herdado automaticamente no instantiate")}))}),ww={instantiate:A.Object({action:A.Literal("instantiate",{description:"instantiate: nova tarefa"}),task:A.Object(Uw.properties,{description:p("Propriedades da nova tarefa","Campos opcionais (blockedBy, parentTaskId, squad) podem ser omitidos")})},{description:p("Cria uma nova tarefa operacional","Use task.instantiate para delegar trabalho a um colega"),examples:[{action:"instantiate",task:{name:"Criar schema de usuário",description:"Criar o schema de usuário com campos nome, email e role.",blockedBy:[{id:"a1b2c3d4",type:"hard"}],squad:"backend"}}]}),get:A.Object({action:A.Literal("get",{description:"get: obter detalhes de uma tarefa"}),id:A.String({description:"ID da tarefa a ser consultada. Ex: a1b2c3d4."})}),setup:A.Object({action:A.Literal("setup",{description:"setup: definir nome, dependências ou tarefa pai da tarefa pré-gerada"}),id:A.String({description:"ID da tarefa a ser configurada. Ex: a1b2c3d4."}),updates:A.Partial(A.Pick(Uw,["name","blockedBy","parentTaskId"]),{description:p("Campos que deseja configurar","Omita os que não mudarem")})}),update:A.Object({action:A.Literal("update",{description:"update: editar uma tarefa existente"}),id:A.String({description:"ID da tarefa a ser atualizada. Ex: a1b2c3d4."}),updates:A.Partial(Uw,{description:p("Campos que deseja atualizar","Apenas inclua o que mudou; omita o restante")})}),list:A.Object({action:A.Literal("list",{description:"list: tarefas criadas"}),status:A.Optional(A.Union(Ww.map(lJ$,A.Literal),{description:p("Filtrar tarefas por status","Omita para listar todas")}))}),remove:A.Object({action:A.Literal("remove",{description:"remove: exclusão de tarefa"}),id:A.String({description:"ID da tarefa a ser removida. Ex: a1b2c3d4."}),force:A.Optional(A.Boolean({description:p("Forçar remoção de tarefa em andamento","Somente criador ou main"),default:!1}))}),claim:A.Object({action:A.Literal("claim",{description:"claim: reivindicar tarefa para si mesmo"}),id:A.String({description:"ID da tarefa a ser reivindicada. Ex: a1b2c3d4."})}),complete:A.Object({action:A.Literal("complete",{description:"complete: marcar tarefa como concluída"}),id:A.String({description:"ID da tarefa concluída. Ex: a1b2c3d4."}),artifactFile:A.String({description:"Caminho absoluto ou relativo do artefato que comprova o resultado da tarefa. Ex: .artifacts/minha-tarefa/relatorio.md"}),force:A.Optional(A.Boolean({description:p("Forçar conclusão da tarefa","Somente main (supervisor) pode usar force"),default:!1}))}),"list-by-squad":A.Object({action:A.Literal("list-by-squad",{description:"list-by-squad: listar tarefas de um squad"}),squad:A.String({description:"Nome do squad para filtrar. Ex: backend."})}),"squad-status":A.Object({action:A.Literal("squad-status",{description:"squad-status: status de progresso de um squad"}),squad:A.String({description:"Nome do squad para consultar. Ex: backend."})})},rj={get:"Buscando tarefa...",setup:"Configurando tarefa...",list:"Listando tarefas ([status])...",instantiate:"Criando nova tarefa [name]...",update:"Atualizando tarefa...",remove:"Removendo tarefa...",claim:"Reivindicando tarefa...",complete:"Concluindo tarefa...","list-by-squad":"Listando tarefas do squad...","squad-status":"Verificando status do squad..."};class tj extends aj.Mixin(R6,Zw,Yw,pW){loadTasks(){o.load()}initialize($){$.registerTool({name:"task",label:"Gerenciar tarefas",description:p("Gerencia tarefas operacionais criadas por agentes durante a execução","Use para delegar trabalho a colegas, reivindicar, atualizar ou concluir tarefas de um squad","Não use para itens persistentes do projeto (use backlog) nem para seus próprios passos de execução (use todo)"),promptSnippet:"task: tarefas operacionais delegadas a colegas (squad). Para itens do projeto use backlog; para seus passos use todo.",promptGuidelines:['Use "task" para trabalho delegado a colegas: criar, reivindicar, atualizar, concluir ou remover tarefas operacionais.','Não use "task" para itens persistentes do projeto (use "backlog") nem para a sua lista de passos (use "todo").'],parameters:Kq.Union(Object.values(ww),{type:"object",unevaluatedProperties:!1}),execute:async(q,J)=>{let X=new t9(this.pipa,W8),U=j9(X,ww,J)[J.action]();if(U)this.pipa.nudge(`task.${J.action}`,void 0,U);return{content:[{type:"text",text:Q9(rj[J.action],{id:J.id??"",name:J.updates?.name||J.task?.name||"",status:J.status??"all"})}],details:U}}})}}D$([Y$("session_start"),h("design:type",Function),h("design:paramtypes",[]),h("design:returntype",void 0)],tj.prototype,"loadTasks",null);var $m=b$(f6(),1);var Hw={instantiate:A.Object({action:A.Literal("instantiate",{description:"instantiate: usar quando quiser delegar uma tarefa clara para outro colega."}),name:A.String({description:"Nome do colega, em letra minúscula, que deve receber a tarefa. Ex: giulia, ella, edu."}),goal:A.String({description:p("Objetivo concreto que o colega deve alcançar ao executar a tarefa","Inclua contexto e critérios de aceite")})}),list:A.Object({action:A.Literal("list",{description:p("list: usar para descobrir quais colegas existem antes de escolher um.","Retorna nome, papel e ID de cada colega")})}),online:A.Object({action:A.Literal("online",{description:p("online: usar quando precisar saber quais colegas estão disponíveis agora.","Retorna os IDs dos colegas com sessão ativa")})}),"send-inbox":A.Object({action:A.Literal("send-inbox",{description:p("send-inbox: EXCEÇÃO — use apenas quando o colega está comprovadamente ocupado em outra task e você não quer interromper o fluxo dele.","Se houver dúvida, prefira chat")}),teammateId:A.String({description:p("ID do colega que deve receber a mensagem na inbox","Recupere com list ou online")}),message:A.String({description:"Texto objetivo com contexto, pedido e próximo passo esperado."})}),chat:A.Object({action:A.Literal("chat",{description:p("chat: PADRÃO para comunicação entre colegas.","Use para 99% das interações: pedir status, reportar resultado, solicitar ajuste, validar entrega","Resposta imediata = menos latência no ciclo","Quando em dúvida, prefira chat","Não use para comunicação assíncrona quando o colega estiver ocupado (use send-inbox)")}),teammateId:A.String({description:p("ID do colega com quem você quer falar em tempo real","Recupere com list ou online")}),message:A.String({description:"Mensagem curta e direta para a conversa síncrona."})}),"read-inbox":A.Object({action:A.Literal("read-inbox",{description:p("read-inbox: usar para revisar mensagens pendentes recebidas na inbox.","Retorna as mensagens não lidas")})}),dismiss:A.Object({action:A.Literal("dismiss",{description:"dismiss: usar para encerrar a sessão de um colega que já concluiu suas tarefas."}),teammateId:A.String({description:p("ID do colega que deve ser dispensado","Recupere com list ou online")}),reason:A.String({description:"Motivo objetivo da dispensa (ex: tarefas concluídas, não será mais necessário nas próximas etapas)."})})},ej={instantiate:"Invocando colegas...",list:"Listando colegas...",online:"Listando colegas online...",chat:"Enviando mensagem instantânea ao colega...","send-inbox":"Enviando mensagem assíncrona à inbox do colega...","read-inbox":"Lendo mensagens da inbox...",dismiss:"Dispensando colega..."};class qm extends $m.Mixin(R6,nW,iW,sW,rW,oW,qw){initialize($){$.registerTool({name:"teammates",label:"Gerenciar colegas",description:p("Gerencia colegas (subagentes) que executam tarefas específicas","Use para invocar, listar, conversar, enviar mensagem assíncrona, ler inbox ou dispensar colegas","Não use para gerenciar trabalho do projeto (use backlog, task ou todo)"),promptSnippet:"teammates: colegas (subagentes) que executam tarefas. Use para invocar, listar, conversar (chat) ou dispensar.",promptGuidelines:['Use "teammates" para interagir com colegas: invocar, listar, conversar (chat), enviar mensagem assíncrona (send-inbox) ou dispensar.','Prefira "chat" para comunicação síncrona; reserve "send-inbox" para quando o colega estiver comprovadamente ocupado.'],parameters:Kq.Union(Object.values(Hw),{type:"object",unevaluatedProperties:!1}),execute:async(q,J)=>{let X=new s(this.pipa),U=await j9(X,Hw,J)[J.action]();if(U)this.pipa.nudge(`teammates.${J.action}`,void 0,U);return{content:[{type:"text",text:ej[J.action]}],details:U}}})}}var Qm=b$(f6(),1);var Jm=b$(x0(),1);var nJ$=["pending","in_progress","completed"],Vw={instantiate:A.Object({action:A.Literal("instantiate",{description:"instantiate: adicionar novo passo"}),item:A.String({description:'O texto do passo a ser adicionado. Ex: "Ler o artefato de planejamento antes de codar".'})}),update:A.Object({action:A.Literal("update",{description:p("Atualizar passo existente","Use para marcar como concluído, editar o texto ou reabrir")}),id:A.String({description:p("ID do passo a ser atualizado","Recupere com list")}),status:A.Optional(A.Union(Jm.map(nJ$,A.Literal),{description:p("Novo status: pending, in_progress ou completed","Omita para manter o status atual")})),text:A.Optional(A.String({description:p("Novo texto do passo","Omita para manter o texto atual")}))}),remove:A.Object({action:A.Literal("remove",{description:"Remover passo da lista de afazeres"}),id:A.String({description:p("ID do passo a ser removido","Recupere com list")})}),list:A.Object({action:A.Literal("list",{description:"Listar os passos atuais da lista de afazeres, com status e ID de cada um"})}),clear:A.Object({action:A.Literal("clear",{description:"Limpar todos os passos da lista de afazeres"})})},Xm={instantiate:"Adicionando item à lista de afazeres...",update:"Atualizando item da lista de afazeres...",remove:"Removendo item da lista de afazeres...",list:"Listando lista de afazeres...",clear:"Limpando lista de afazeres..."};var Zm=b$(f6(),1);class Kw extends Zm.Mixin(j5,tW){pipa;constructor($){super($);this.pipa=$}instantiate($){let q=new b4({id:m9(),sessionId:this.sessionId,text:$.item,status:"pending"});return e0.add(q),this.persist(),this.pipa.events.emit("todo_created",q),q}}class zw{promptTodoCreation($,q){let J=s.find(q.sessionId);if(!J||J.role==="main"||J.isStopping)return;if(e0.list(q.sessionId).length>0)return;q.nudge("todo.empty",`Colega ${J.name} não possui afazeres na lista.`,["Parece que você ainda não tem um plano de execução definido.","Por favor, use a ferramenta de afazeres (todo) para criar e gerenciar seu checklist de execução em passos pequenos e atômicos."])}notifyPendingTodos($,q){let J=s.find(q.sessionId);if(!J||J.role==="main"||J.isStopping)return;let X=e0.list(q.sessionId).filter((Z)=>!Z.isCompleted);if(!X.length)return e0.clear(q.sessionId);if(s.listSubordinates(q.sessionId).some((Z)=>Z.isRunning))return;q.nudge("todo.pending",`Colega ${J.name} possui ${X.length} afazer(es) em aberto.`,["Por favor, retome o trabalho nos seguintes afazeres pendentes ou marque-os como concluídos:",Tq.unorderedList(X,(Z)=>[Z.id,Z.text])])}}D$([Y$("agent_start"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],zw.prototype,"promptTodoCreation",null),D$([Y$("agent_end"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],zw.prototype,"notifyPendingTodos",null);class Ym extends Qm.Mixin(R6,zw){mountPipa(){e0.load(s.get(this.pipa.sessionId).workspaceDir,this.pipa.sessionId)}initialize($){$.registerTool({name:"todo",label:"Gerenciar Lista de Afazeres",description:p("Mantém a sua própria lista de afazeres (passos atômicos) durante a execução","Use para adicionar, atualizar, listar ou remover os passos do seu plano de execução","Não use para itens do projeto (use backlog) nem para trabalho delegado a colegas (use task)"),promptSnippet:"todo: passos atômicos do seu plano de execução. Para itens do projeto use backlog; para trabalho delegado use task.",promptGuidelines:['Use "todo" para o seu próprio plano de execução: passos atômicos que você está executando.','Não use "todo" para itens do projeto (use "backlog") nem para trabalho delegado a colegas (use "task").'],parameters:Kq.Union(Object.values(Vw),{type:"object",unevaluatedProperties:!1}),execute:async(q,J)=>{let X=new Kw(this.pipa),U=j9(X,Vw,J)[J.action]();if(U)this.pipa.nudge(`todo.${J.action}`,void 0,U);return{content:[{type:"text",text:Xm[J.action]}],details:U}}})}}D$([Y$("before_agent_start"),h("design:type",Function),h("design:paramtypes",[]),h("design:returntype",void 0)],Ym.prototype,"mountPipa",null);var Um=b$(f6(),1);class Bw{async validateTerminal({toolName:$,input:q},J){let{role:X}=s.get(J.sessionId),Z=q.action??q.command;if($==="bash"&&Z){let U=tM(Z);if(U)return{block:!0,reason:p(U)};if(FQ(Z))return{block:!0,reason:p(`O uso do comando "${Z}" é proibido para todos os colegas`,"pois pode causar perda de dados ou demorar muito tempo para ser executado.")}}if(X==="main"&&($==="edit"||$==="write")){if(UQ(J))return;if(!await J.context.ui.confirm("Operação de Escrita (Main)",`O supervisor deseja editar um arquivo via '${$}'. Permitir?`))return{block:!0,reason:p(`A execução de ${$} foi cancelada pelo usuário.`,"Lembre-se do seu papel de coordenador. Se a tarefa exige muitas modificações, delegue-a para um colega especializado.")}}}}D$([Y$("tool_call"),h("design:type",Function),h("design:paramtypes",[typeof ToolCallEvent==="undefined"?Object:ToolCallEvent,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",typeof Promise==="undefined"?Object:Promise)],Bw.prototype,"validateTerminal",null);class Fw{async validateTools({toolName:$,input:q},J){let X=s.get(J.sessionId);if(X.isStopping)return{block:!0,terminate:!0,reason:p("Você foi dispensado e não pode mais executar ferramentas.","Apenas pare e aguarde a finalização do processo em silêncio.")};let Z=q.action??q.command,U=oM[$]||[],{depth:W,role:H}=X;if(H==="main"&&U.includes("*"))return{block:!0,reason:p(`O uso de ${$} não é permitido para o supervisor.`,"Se você precisa executar essa operação, considere criar um colega para isso.")};if(H==="main"&&Z&&(U.includes(Z)||FQ(Z)))return{block:!0,reason:p(`O uso de ${$}(${Z}) não é permitido para o supervisor.`,"Se você precisa executar essa operação no terminal ou gerenciar tarefas, considere delegá-la a um colega.")};if($==="ask_user_question"&&H==="subagent")return{block:!0,reason:p("O colega atual não tem permissão para fazer perguntas ao usuário.","Se você precisa fazer perguntas ao usuário, considere instruir o supervisor a fazer isso por você","através da sua resposta final.")};if($==="teammates"&&W>1)return{block:!0,reason:p("O colega atual não tem permissão para criar outros colegas.","Se você precisa criar colegas, considere instruir o supervisor a fazer isso por você","através da sua resposta final.")};if($==="backlog"&&Z==="remove"){if(H!=="main")return{block:!0,reason:p("Apenas o supervisor (main) pode remover itens do backlog.","Se você precisa remover um item, peça ao supervisor para executar esta operação.")};if(!await J.context.ui.confirm("Remover Item do Backlog (Main)",`O supervisor deseja remover o item "${q.code}" do backlog. Permitir?`))return{block:!0,reason:p("A remoção do item do backlog foi cancelada pelo usuário.","O item permanece inalterado.")}}}}D$([Y$("tool_call"),h("design:type",Function),h("design:paramtypes",[typeof ToolCallEvent==="undefined"?Object:ToolCallEvent,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",typeof Promise==="undefined"?Object:Promise)],Fw.prototype,"validateTools",null);class Wm extends Um.Mixin(R6,Bw,Fw){}var Im=b$(x0(),1),_m=b$(f6(),1);var m5=["epic","story","task","bugfix"],wm=["triage","in_progress","done","blocked","cancelled"],Hm=["low","medium","high","critical"],Vm=["api","ui","integration"],Km=["updatedAt","order"],zm=["ASC","DESC"],Bm=["title","status","priority","tags","parentCode","domain"],f5={list:{code:"backlog.list",get failed(){return[this.code,"Falha ao listar backlog"]},get success(){return[this.code,"Backlog listado com sucesso"]}},create:{code:"backlog.create",get failed(){return[this.code,"Falha ao criar item no backlog"]},get success(){return[this.code,"Item criado no backlog"]}},"update-frontmatter":{code:"backlog.update-frontmatter",get failed(){return[this.code,"Falha ao atualizar frontmatter"]},get success(){return[this.code,"Frontmatter atualizado"]}},"update-body":{code:"backlog.update-body",get failed(){return[this.code,"Falha ao atualizar corpo markdown"]},get success(){return[this.code,"Corpo markdown atualizado"]}},"update-metadata":{code:"backlog.update-metadata",get failed(){return[this.code,"Falha ao atualizar metadata"]},get success(){return[this.code,"Metadata atualizado"]}},select:{code:"backlog.select",get failed(){return[this.code,"Falha na busca"]},get success(){return[this.code,"Busca concluída"]}}};var Gw={instantiate:A.Object({action:A.Literal("instantiate",{description:"instantiate: novo item no backlog"}),title:A.String({description:'Título descritivo da tarefa. Ex: "Criar schema de usuário".'}),type:jq(m5,{description:"Tipo do item: epic, story, task, bugfix"}),priority:jq(Hm,{description:"Prioridade do item: low, medium, high, critical"}),domain:A.Optional(A.Array(jq(Vm,{description:p("Domínios relacionados","Ex: api, ui, integration","Omita se não houver")}))),parentCode:A.Optional(A.String({description:p("Código do item pai (ex: a1b2c3d4)","Omita se for item raiz")})),tags:A.Optional(A.Array(A.String({description:p("Etiqueta livre",'Ex: ["backend", "urgente"]',"Omita se não houver")}))),metadata:A.Optional(A.Record(A.String(),A.Unknown(),{description:p("Campo livre para dados arbitrários (JSON)","Omita se não houver")})),body:A.String({description:p("Conteúdo markdown do item","Inclua contexto, critérios e restrições")})},{description:p("Cria um novo item no backlog do projeto","Use backlog.instantiate para registrar trabalho persistente (epic, story, task, bugfix)"),examples:[{action:"instantiate",title:"Criar schema de usuário",type:"task",priority:"high",domain:["api"],tags:["backend"],body:"Criar o schema de usuário com campos nome, email e role."}]}),list:A.Object({action:A.Literal("list",{description:"list: tarefas criadas"}),status:A.Optional(jq(wm,{description:p("Status do item","Omita para listar todos os status")})),type:A.Optional(jq(m5,{description:p("Tipo do item: epic, story, task, bugfix","Omita para listar todos os tipos")})),sort:A.Optional(A.Object({field:jq(Km,{description:"Campo para ordenar a listagem. Ex: updatedAt."}),order:jq(zm,{description:p("Ordem de ordenação: ASC ou DESC","Omita para ASC")})})),limit:A.Optional(A.Number({description:p("Limite de itens a serem retornados","Omita para retornar todos")}))}),"update-frontmatter":A.Object({action:A.Literal("update-frontmatter",{description:"update-frontmatter: atualiza metadados YAML de um item do backlog"}),code:A.String({description:"Código do item do backlog a ser atualizado. Ex: a1b2c3d4."}),field:jq(Bm,{description:"Campo do frontmatter a ser atualizado: title, status, priority, tags, parentCode ou domain."}),value:A.String({description:"Novo valor do campo do frontmatter."})}),"update-body":A.Object({action:A.Literal("update-body",{description:"update-body: manipula o corpo markdown de um item do backlog"}),code:A.String({description:"Código do item do backlog a ser atualizado. Ex: a1b2c3d4."}),mode:A.Union([A.Literal("append"),A.Literal("replace"),A.Literal("set")],{description:p("Modo de atualização do corpo markdown","append: adiciona ao final; replace: substitui trecho; set: substitui o corpo inteiro.")}),value:A.String({description:p("Texto a ser manipulado no corpo markdown","Em mode append/set é o novo conteúdo; em mode replace é o trecho a localizar")}),replacement:A.Optional(A.String({description:p("Texto a ser usado como substituição","Obrigatório apenas em mode replace; omita nos demais")}))}),"update-metadata":A.Object({action:A.Literal("update-metadata",{description:"update-metadata: faz merge de dados livres (metadata) em um item do backlog"}),code:A.String({description:"Código do item do backlog a ser atualizado. Ex: a1b2c3d4."}),metadata:A.Record(A.String(),A.Unknown(),{description:p("Dados a mesclar no metadata existente do item","Chaves existentes são sobrescritas; demais são preservadas")})}),select:A.Object({action:A.Literal("select",{description:"select: busca item do backlog por título, código ou tags"}),query:A.Optional(A.String({description:p("Consulta de busca","Omita para listar itens recentes")}))}),remove:A.Object({action:A.Literal("remove",{description:"remove: exclusão de item do backlog"}),code:A.String({description:"Código do item do backlog a ser removido. Ex: a1b2c3d4."})})},Fm={list:"Listando [count] item(s) do backlog...",instantiate:"Criando novo item no backlog [item.code]...","update-frontmatter":"Atualizando frontmatter do item [item.code]...","update-body":"Atualizando corpo markdown do item [item.code]...","update-metadata":"Atualizando metadata do item [item.code]...",select:"Buscando no backlog...",remove:"Removendo item do backlog [item.code]..."};var w3=b$(x0(),1);var xm=b$(f6(),1);class g4{constructor($){Object.assign(this,$)}code;title;type;status;body;createdAt;updatedAt;priority;domain;parentCode;order;tags;metadata}function bJ($){return!Array.isArray?Em($)==="[object Array]":Array.isArray($)}function iJ$($){if(typeof $=="string")return $;if(typeof $==="bigint")return $.toString();let q=$+"";return q=="0"&&1/$==-1/0?"-0":q}function Dw($){return $==null?"":iJ$($)}function n6($){return typeof $==="string"}function X3($){return typeof $==="number"}function oJ$($){return $===!0||$===!1||sJ$($)&&Em($)=="[object Boolean]"}function Rm($){return typeof $==="object"}function sJ$($){return Rm($)&&$!==null}function fq($){return $!==void 0&&$!==null}function J3($){return!$.trim().length}function Em($){return $==null?$===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call($)}var rJ$="Incorrect 'index' type",Pw="Invalid doc index: must be a non-negative integer within the bounds of the docs array",aJ$=($)=>`Invalid value for key ${$}`,tJ$=($)=>`Pattern length exceeds max of ${$}.`,eJ$=($)=>`Missing ${$} property in key`,$8$=($)=>`Property 'weight' in key '${$}' must be a positive integer`,q8$="Fuse.match does not support useTokenSearch: token search requires corpus-level statistics (df, fieldCount) that a one-off string comparison does not have. Use new Fuse(...).search(...) instead.",Gm=Object.prototype.hasOwnProperty,J8$=class{constructor($){this._keys=[],this._keyMap={};let q=0;$.forEach((J)=>{let X=Cm(J);this._keys.push(X),this._keyMap[X.id]=X,q+=X.weight}),this._keys.forEach((J)=>{J.weight/=q})}get($){return this._keyMap[$]}keys(){return this._keys}toJSON(){return JSON.stringify(this._keys)}};function Cm($){let q=null,J=null,X=null,Z=1,U=null;if(n6($)||bJ($))X=$,q=Nm($),J=Z3($);else{if(!Gm.call($,"name"))throw Error(eJ$("name"));let W=$.name;if(X=W,Gm.call($,"weight")&&$.weight!==void 0){if(Z=$.weight,Z<=0)throw Error($8$(Z3(W)))}q=Nm(W),J=Z3(W),U=$.getFn??null}return{path:q,id:J,weight:Z,src:X,getFn:U}}function Nm($){return bJ($)?$:$.split(".")}function Z3($){return bJ($)?$.join("."):$}function X8$($,q){let J=[],X=!1,Z=(U,W,H,K)=>{if(!fq(U))return;if(!W[H])J.push(K!==void 0?{v:U,i:K}:U);else{let F=U[W[H]];if(!fq(F))return;if(H===W.length-1&&(n6(F)||X3(F)||oJ$(F)||typeof F==="bigint"))J.push(K!==void 0?{v:Dw(F),i:K}:Dw(F));else if(bJ(F)){X=!0;for(let B=0,P=F.length;B<P;B+=1)Z(F[B],W,H+1,B)}else if(W.length)Z(F,W,H+1,K)}};return Z($,n6(q)?q.split("."):q,0),X?J:J[0]}var Z8$={includeMatches:!1,findAllMatches:!1,minMatchCharLength:1},Q8$={isCaseSensitive:!1,ignoreDiacritics:!1,includeScore:!1,keys:[],shouldSort:!0,sortFn:($,q)=>$.score===q.score?$.idx<q.idx?-1:1:$.score<q.score?-1:1},Y8$={location:0,threshold:0.6,distance:100},U8$={useExtendedSearch:!1,useTokenSearch:!1,tokenize:void 0,tokenMatch:"any",getFn:X8$,ignoreLocation:!1,ignoreFieldNorm:!1,fieldNormWeight:1},I$=Object.freeze({...Q8$,...Z8$,...Y8$,...U8$});function W8$($){return $>=9&&$<=13||$===32||$===160}function w8$($=1,q=3){let J=new Map,X=Math.pow(10,q);return{get(Z){let U=0,W=!1;for(let K=0;K<Z.length;K++)if(!W8$(Z.charCodeAt(K))){if(!W)U++,W=!0}else W=!1;if(U===0)U=1;if(J.has(U))return J.get(U);let H=Math.round(X/Math.pow(U,0.5*$))/X;return J.set(U,H),H},clear(){J.clear()}}}var Aw=class{constructor({getFn:$=I$.getFn,fieldNormWeight:q=I$.fieldNormWeight}={}){this.norm=w8$(q,3),this.getFn=$,this.isCreated=!1,this.docs=[],this.keys=[],this._keysMap={},this.setIndexRecords()}setSources($=[]){this.docs=$}setIndexRecords($=[]){this.records=$}setKeys($=[]){this.keys=$,this._keysMap={},$.forEach((q,J)=>{this._keysMap[q.id]=J})}create(){if(this.isCreated||!this.docs.length)return;this.isCreated=!0;let $=this.docs.length;this.records=Array($);let q=0;if(n6(this.docs[0]))for(let J=0;J<$;J++){let X=this._createStringRecord(this.docs[J],J);if(X)this.records[q++]=X}else for(let J=0;J<$;J++)this.records[q++]=this._createObjectRecord(this.docs[J],J);this.records.length=q,this.norm.clear()}add($,q){if(!Number.isInteger(q)||q<0)throw Error(Pw);if(n6($)){let X=this._createStringRecord($,q);if(X)this.records.push(X);return X}let J=this._createObjectRecord($,q);return this.records.push(J),J}removeAt($){if(!Number.isInteger($)||$<0)throw Error(Pw);for(let q=0,J=this.records.length;q<J;q+=1)if(this.records[q].i===$){this.records.splice(q,1);break}for(let q=0,J=this.records.length;q<J;q+=1)if(this.records[q].i>$)this.records[q].i-=1}removeAll($){let q=new Set;for(let X of $)if(Number.isInteger(X)&&X>=0)q.add(X);if(q.size===0)return;this.records=this.records.filter((X)=>!q.has(X.i));let J=Array.from(q).sort((X,Z)=>X-Z);for(let X of this.records){let Z=0,U=J.length;while(Z<U){let W=Z+U>>>1;if(J[W]<X.i)Z=W+1;else U=W}X.i-=Z}}getValueForItemAtKeyId($,q){return $[this._keysMap[q]]}size(){return this.records.length}_createStringRecord($,q){if(!fq($)||J3($))return null;return{v:$,i:q,n:this.norm.get($)}}_createObjectRecord($,q){let J={i:q,$:{}};for(let X=0,Z=this.keys.length;X<Z;X++){let U=this.keys[X],W=U.getFn?U.getFn($):this.getFn($,U.path);if(!fq(W))continue;if(bJ(W)){let H=[];for(let K=0,F=W.length;K<F;K+=1){let B=W[K];if(!fq(B))continue;if(n6(B)){if(!J3(B)){let P={v:B,i:K,n:this.norm.get(B)};H.push(P)}}else if(fq(B.v)){let P=n6(B.v)?B.v:Dw(B.v);if(!J3(P)){let M={v:P,i:B.i,n:this.norm.get(P)};H.push(M)}}}J.$[X]=H}else if(n6(W)&&!J3(W)){let H={v:W,n:this.norm.get(W)};J.$[X]=H}}return J}toJSON(){return{keys:this.keys.map(({getFn:$,...q})=>q),records:this.records}}};function Am($,q,{getFn:J=I$.getFn,fieldNormWeight:X=I$.fieldNormWeight}={}){let Z=new Aw({getFn:J,fieldNormWeight:X});return Z.setKeys($.map(Cm)),Z.setSources(q),Z.create(),Z}function H8$($,{getFn:q=I$.getFn,fieldNormWeight:J=I$.fieldNormWeight}={}){let{keys:X,records:Z}=$,U=new Aw({getFn:q,fieldNormWeight:J});return U.setKeys(X),U.setIndexRecords(Z),U}function V8$($=[],q=I$.minMatchCharLength){let J=[],X=-1,Z=-1,U=0;for(let W=$.length;U<W;U+=1){let H=$[U];if(H&&X===-1)X=U;else if(!H&&X!==-1){if(Z=U-1,Z-X+1>=q)J.push([X,Z]);X=-1}}if($[U-1]&&U-X>=q)J.push([X,U-1]);return J}function K8$($,q,J,{location:X=I$.location,distance:Z=I$.distance,threshold:U=I$.threshold,findAllMatches:W=I$.findAllMatches,minMatchCharLength:H=I$.minMatchCharLength,includeMatches:K=I$.includeMatches,ignoreLocation:F=I$.ignoreLocation}={}){if(q.length>32)throw Error(tJ$(32));let B=q.length,P=$.length,M=Math.max(0,Math.min(X,P)),R=U,S=M,f=(i,Q$)=>{let x=i/B;if(F)return x;let C$=Math.abs(M-Q$);if(!Z)return C$?1:x;return x+C$/Z},y=H>1||K,q$=y?Array(P):[],L$;while((L$=$.indexOf(q,S))>-1){let i=f(0,L$);if(R=Math.min(i,R),S=L$+B,y){let Q$=0;while(Q$<B)q$[L$+Q$]=1,Q$+=1}}S=-1;let G$=[],q0=1,W0=0,z$=B+P,_$=1<<B-1;for(let i=0;i<B;i+=1){let Q$=0,x=z$;while(Q$<x){if(f(i,M+x)<=R)Q$=x;else z$=x;x=Math.floor((z$-Q$)/2+Q$)}z$=x;let C$=Math.max(1,M-x+1),A$=W?P:Math.min(M+x,P)+B,a$=Array(A$+2);a$[A$+1]=(1<<i)-1;for(let _=A$;_>=C$;_-=1){let b=_-1,P$=J[$[b]];if(a$[_]=(a$[_+1]<<1|1)&P$,i)a$[_]|=(G$[_+1]|G$[_])<<1|1|G$[_+1];if(a$[_]&_$){if(q0=f(i,b),q0<=R){if(R=q0,S=b,W0=i,S<=M)break;C$=Math.max(1,2*M-S)}}}if(f(i+1,M)>R)break;G$=a$}if(y&&S>=0){let i=Math.min(P-1,S+B-1+W0);for(let Q$=S;Q$<=i;Q$+=1)if(J[$[Q$]])q$[Q$]=1}let t={isMatch:S>=0,score:Math.max(0.001,q0)};if(y){let i=V8$(q$,H);if(!i.length)t.isMatch=!1;else if(K)t.indices=i}return t}function z8$($){let q={};for(let J=0,X=$.length;J<X;J+=1){let Z=$.charAt(J);q[Z]=(q[Z]||0)|1<<X-J-1}return q}function Sw($){if($.length<=1)return $;$.sort((J,X)=>J[0]-X[0]||J[1]-X[1]);let q=[$[0]];for(let J=1,X=$.length;J<X;J+=1){let Z=q[q.length-1],U=$[J];if(U[0]<=Z[1]+1)Z[1]=Math.max(Z[1],U[1]);else q.push(U)}return q}var Sm={"ł":"l","Ł":"L","đ":"d","Đ":"D","ø":"o","Ø":"O","ħ":"h","Ħ":"H","ŧ":"t","Ŧ":"T","ı":"i","ß":"ss"},B8$=new RegExp("["+Object.keys(Sm).join("")+"]","g"),x5=typeof String.prototype.normalize==="function"?($)=>$.normalize("NFD").replace(/[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C04\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F]/g,"").replace(B8$,(q)=>Sm[q]):($)=>$,Tw=class{constructor($,{location:q=I$.location,threshold:J=I$.threshold,distance:X=I$.distance,includeMatches:Z=I$.includeMatches,findAllMatches:U=I$.findAllMatches,minMatchCharLength:W=I$.minMatchCharLength,isCaseSensitive:H=I$.isCaseSensitive,ignoreDiacritics:K=I$.ignoreDiacritics,ignoreLocation:F=I$.ignoreLocation}={}){if(this.options={location:q,threshold:J,distance:X,includeMatches:Z,findAllMatches:U,minMatchCharLength:W,isCaseSensitive:H,ignoreDiacritics:K,ignoreLocation:F},$=H?$:$.toLowerCase(),$=K?x5($):$,this.pattern=$,this.chunks=[],!this.pattern.length)return;let B=(M,R)=>{this.chunks.push({pattern:M,alphabet:z8$(M),startIndex:R})},P=this.pattern.length;if(P>32){let M=0,R=P%32,S=P-R;while(M<S)B(this.pattern.substr(M,32),M),M+=32;if(R){let f=P-32;B(this.pattern.substr(f),f)}}else B(this.pattern,0)}searchIn($){let{isCaseSensitive:q,ignoreDiacritics:J,includeMatches:X}=this.options;if($=q?$:$.toLowerCase(),$=J?x5($):$,this.pattern===$){if($.length<this.options.minMatchCharLength)return{isMatch:!1,score:1};let S={isMatch:!0,score:0};if(X)S.indices=[[0,$.length-1]];return S}let{location:Z,distance:U,threshold:W,findAllMatches:H,minMatchCharLength:K,ignoreLocation:F}=this.options,B=[],P=0,M=!1;this.chunks.forEach(({pattern:S,alphabet:f,startIndex:y})=>{let{isMatch:q$,score:L$,indices:G$}=K8$($,S,f,{location:Z+y,distance:U,threshold:W,findAllMatches:H,minMatchCharLength:K,includeMatches:X,ignoreLocation:F});if(q$)M=!0;if(P+=L$,q$&&G$)B.push(...G$)});let R={isMatch:M,score:M?P/this.chunks.length:1};if(M&&X)R.indices=Sw(B);return R}},F8$=new Set(["fuzzy","include"]);function G8$($){return $.startsWith("inverse")}var Ow=[{type:"exact",multiRegex:/^="(.*)"$/,singleRegex:/^=(.*)$/,create:($)=>({type:"exact",search(q){let J=q===$;return{isMatch:J,score:J?0:1,indices:[0,$.length-1]}}})},{type:"include",multiRegex:/^'"(.*)"$/,singleRegex:/^'(.*)$/,create:($)=>({type:"include",search(q){let J=0,X,Z=[],U=$.length;while((X=q.indexOf($,J))>-1)J=X+U,Z.push([X,J-1]);let W=!!Z.length;return{isMatch:W,score:W?0:1,indices:Z}}})},{type:"prefix-exact",multiRegex:/^\^"(.*)"$/,singleRegex:/^\^(.*)$/,create:($)=>({type:"prefix-exact",search(q){let J=q.startsWith($);return{isMatch:J,score:J?0:1,indices:[0,$.length-1]}}})},{type:"inverse-prefix-exact",multiRegex:/^!\^"(.*)"$/,singleRegex:/^!\^(.*)$/,create:($)=>({type:"inverse-prefix-exact",search(q){let J=!q.startsWith($);return{isMatch:J,score:J?0:1,indices:[0,q.length-1]}}})},{type:"inverse-suffix-exact",multiRegex:/^!"(.*)"\$$/,singleRegex:/^!(.*)\$$/,create:($)=>({type:"inverse-suffix-exact",search(q){let J=!q.endsWith($);return{isMatch:J,score:J?0:1,indices:[0,q.length-1]}}})},{type:"suffix-exact",multiRegex:/^"(.*)"\$$/,singleRegex:/^(.*)\$$/,create:($)=>({type:"suffix-exact",search(q){let J=q.endsWith($);return{isMatch:J,score:J?0:1,indices:[q.length-$.length,q.length-1]}}})},{type:"inverse-exact",multiRegex:/^!"(.*)"$/,singleRegex:/^!(.*)$/,create:($)=>({type:"inverse-exact",search(q){let J=q.indexOf($)===-1;return{isMatch:J,score:J?0:1,indices:[0,q.length-1]}}})},{type:"fuzzy",multiRegex:/^"(.*)"$/,singleRegex:/^(.*)$/,create:($,q={})=>{let J=new Tw($,{location:q.location??I$.location,threshold:q.threshold??I$.threshold,distance:q.distance??I$.distance,includeMatches:q.includeMatches??I$.includeMatches,findAllMatches:q.findAllMatches??I$.findAllMatches,minMatchCharLength:q.minMatchCharLength??I$.minMatchCharLength,isCaseSensitive:q.isCaseSensitive??I$.isCaseSensitive,ignoreDiacritics:q.ignoreDiacritics??I$.ignoreDiacritics,ignoreLocation:q.ignoreLocation??I$.ignoreLocation});return{type:"fuzzy",search(X){return J.searchIn(X)}}}}],Dm=Ow.length,N8$="\x00",D8$="|";function P8$($){let q=[],J=$.length,X=0;while(X<J){while(X<J&&$[X]===" ")X++;if(X>=J)break;let Z=X;while(Z<J&&$[Z]!==" "&&$[Z]!=='"')Z++;if(Z<J&&$[Z]==='"'){Z++;while(Z<J){if($[Z]==='"'){let U=Z+1;if(U>=J||$[U]===" "){Z++;break}if($[U]==="$"&&(U+1>=J||$[U+1]===" ")){Z+=2;break}}Z++}q.push($.substring(X,Z)),X=Z}else{while(Z<J&&$[Z]!==" ")Z++;q.push($.substring(X,Z)),X=Z}}return q}function Pm($,q){let J=$.match(q);return J?J[1]:null}function O8$($,q={}){return $.replace(/\\\|/g,N8$).split(D8$).map((J)=>{let X=P8$(J.replace(/\u0000/g,"|").trim()).filter((U)=>U&&!!U.trim()),Z=[];for(let U=0,W=X.length;U<W;U+=1){let H=X[U],K=!1,F=-1;while(!K&&++F<Dm){let B=Ow[F],P=Pm(H,B.multiRegex);if(P)Z.push(B.create(P,q)),K=!0}if(K)continue;F=-1;while(++F<Dm){let B=Ow[F],P=Pm(H,B.singleRegex);if(P){Z.push(B.create(P,q));break}}}return Z})}var M8$=class{constructor($,{isCaseSensitive:q=I$.isCaseSensitive,ignoreDiacritics:J=I$.ignoreDiacritics,includeMatches:X=I$.includeMatches,minMatchCharLength:Z=I$.minMatchCharLength,ignoreLocation:U=I$.ignoreLocation,findAllMatches:W=I$.findAllMatches,location:H=I$.location,threshold:K=I$.threshold,distance:F=I$.distance}={}){this.query=null,this.options={isCaseSensitive:q,ignoreDiacritics:J,includeMatches:X,minMatchCharLength:Z,findAllMatches:W,ignoreLocation:U,location:H,threshold:K,distance:F},$=q?$:$.toLowerCase(),$=J?x5($):$,this.pattern=$,this.query=O8$(this.pattern,this.options)}static condition($,q){return q.useExtendedSearch}searchIn($){let q=this.query;if(!q)return{isMatch:!1,score:1};let{includeMatches:J,isCaseSensitive:X,ignoreDiacritics:Z}=this.options;$=X?$:$.toLowerCase(),$=Z?x5($):$;let U=0,W=[],H=0,K=!1;for(let F=0,B=q.length;F<B;F+=1){let P=q[F];W.length=0,U=0,K=!1;for(let M=0,R=P.length;M<R;M+=1){let S=P[M],{isMatch:f,indices:y,score:q$}=S.search($);if(f){if(U+=1,H+=q$,G8$(S.type))K=!0;if(J)if(F8$.has(S.type))W.push(...y);else W.push(y)}else{H=0,U=0,W.length=0,K=!1;break}}if(U){let M={isMatch:!0,score:H/U};if(K)M.hasInverse=!0;if(J)M.indices=Sw(W);return M}}return{isMatch:!1,score:1}}},Mw=[];function jw(...$){Mw.push(...$)}function Q3($,q){for(let J=0,X=Mw.length;J<X;J+=1){let Z=Mw[J];if(Z.condition($,q))return new Z($,q)}return new Tw($,q)}var Y3={AND:"$and",OR:"$or"},Lw={PATH:"$path",PATTERN:"$val"},Rw=($)=>!!($[Y3.AND]||$[Y3.OR]),L8$=($)=>!!$[Lw.PATH],R8$=($)=>!bJ($)&&Rm($)&&!Rw($),Om=($)=>({[Y3.AND]:Object.keys($).map((q)=>({[q]:$[q]}))});function Tm($,q,{auto:J=!0}={}){let X=(Z)=>{if(n6(Z)){let K={keyId:null,pattern:Z};if(J)K.searcher=Q3(Z,q);return K}let U=Object.keys(Z),W=L8$(Z);if(!W&&U.length>1&&!Rw(Z))return X(Om(Z));if(R8$(Z)){let K=W?Z[Lw.PATH]:U[0],F=W?Z[Lw.PATTERN]:Z[K];if(!n6(F))throw Error(aJ$(K));let B={keyId:Z3(K),pattern:F};if(J)B.searcher=Q3(F,q);return B}let H={children:[],operator:U[0]};return U.forEach((K)=>{let F=Z[K];if(bJ(F))F.forEach((B)=>{H.children.push(X(B))})}),H};if(!Rw($))$=Om($);return X($)}function Ew($,{ignoreFieldNorm:q=I$.ignoreFieldNorm}){let J=1;return $.forEach(({key:X,norm:Z,score:U})=>{let W=X?X.weight:null;J*=Math.pow(U===0&&W?Number.EPSILON:U,(W||1)*(q?1:Z))}),J}function E8$($,{ignoreFieldNorm:q=I$.ignoreFieldNorm}){$.forEach((J)=>{J.score=Ew(J.matches,{ignoreFieldNorm:q})})}var C8$=class{constructor($,q){this.limit=$,this.heap=[],this.comparator=q}get size(){return this.heap.length}insert($){if(this.size<this.limit)this.heap.push($),this._bubbleUp(this.size-1);else if(this.comparator($,this.heap[0])<0)this.heap[0]=$,this._sinkDown(0)}extractSorted(){return this.heap.sort(this.comparator)}_bubbleUp($){let q=this.heap;while($>0){let J=$-1>>1;if(this.comparator(q[$],q[J])<=0)break;let X=q[$];q[$]=q[J],q[J]=X,$=J}}_sinkDown($){let q=this.heap,J=q.length,X=$;do{$=X;let Z=2*$+1,U=2*$+2;if(Z<J&&this.comparator(q[Z],q[X])>0)X=Z;if(U<J&&this.comparator(q[U],q[X])>0)X=U;if(X!==$){let W=q[$];q[$]=q[X],q[X]=W}}while(X!==$)}};function A8$($){let q=[];return $.matches.forEach((J)=>{if(!fq(J.indices)||!J.indices.length)return;let X={indices:J.indices,value:J.value};if(J.key)X.key=J.key.id;if(J.idx>-1)X.refIndex=J.idx;q.push(X)}),q}function S8$($,q,{includeMatches:J=I$.includeMatches,includeScore:X=I$.includeScore}={}){return $.map((Z)=>{let{idx:U}=Z,W={item:q[U],refIndex:U};if(J)W.matches=A8$(Z);if(X)W.score=Z.score;return W})}var T8$=/[\p{L}\p{M}\p{N}_]+/gu,Mm=new WeakSet;function j8$($){if(!Mm.has($))Mm.add($),console.warn(`[Fuse] tokenize regex ${$} lacks the global flag; only the first match per text will be returned. Add the 'g' flag.`)}function m8$($){if(typeof $==="function"){let q=!1;return(J)=>{let X=$(J);if(!q){if(q=!0,!Array.isArray(X)||X.some((Z)=>typeof Z!=="string"))throw Error(`[Fuse] tokenize function must return string[]; received ${Array.isArray(X)?"array containing non-strings":typeof X}.`)}return X}}if($ instanceof RegExp){if(!$.global)j8$($);return(q)=>q.match($)||[]}return(q)=>q.match(T8$)||[]}function Cw({isCaseSensitive:$=!1,ignoreDiacritics:q=!1,tokenize:J}={}){let X=m8$(J);return{tokenize(Z){if(!$)Z=Z.toLowerCase();if(q)Z=x5(Z);return X(Z)}}}var f8$=class{static condition($,q){return q.useTokenSearch}constructor($,q){this.options=q,this.analyzer=Cw({isCaseSensitive:q.isCaseSensitive,ignoreDiacritics:q.ignoreDiacritics,tokenize:q.tokenize});let J=this.analyzer.tokenize($),{df:X,fieldCount:Z}=q._invertedIndex;this.termSearchers=[],this.idfWeights=[];for(let U of J){this.termSearchers.push(new Tw(U,{location:q.location,threshold:q.threshold,distance:q.distance,includeMatches:q.includeMatches,findAllMatches:q.findAllMatches,minMatchCharLength:q.minMatchCharLength,isCaseSensitive:q.isCaseSensitive,ignoreDiacritics:q.ignoreDiacritics,ignoreLocation:!0}));let W=X.get(U)||0,H=Math.log(1+(Z-W+0.5)/(W+0.5));this.idfWeights.push(H)}this.combineAll=q.tokenMatch==="all",this.numTerms=this.termSearchers.length,this.useMask=this.numTerms<=31}searchIn($){if(!this.termSearchers.length)return{isMatch:!1,score:1};let q=[],J=0,X=0,Z=0,U=0,W=this.combineAll&&!this.useMask?new Set:null;for(let F=0;F<this.termSearchers.length;F++){let B=this.termSearchers[F].searchIn($),P=this.idfWeights[F];if(X+=P,B.isMatch){if(Z++,J+=P*(1-B.score),B.indices)q.push(...B.indices);if(this.combineAll)if(this.useMask)U|=1<<F;else W.add(F)}}if(Z===0)return{isMatch:!1,score:1};let H=X>0?1-J/X:0,K={isMatch:!0,score:Math.max(0.001,H)};if(this.options.includeMatches&&q.length)K.indices=Sw(q);if(this.combineAll){if(this.useMask)K.matchedMask=U;else K.matchedTerms=W;K.termCount=this.numTerms}return K}};function Nw($,q,J,X){let Z=X.tokenize(q);if(!Z.length)return;$.fieldCount++,$.docFieldCount.set(J,($.docFieldCount.get(J)||0)+1);let U=new Set(Z),W=$.docTermFieldHits.get(J);if(!W)W=new Map,$.docTermFieldHits.set(J,W);for(let H of U)W.set(H,(W.get(H)||0)+1),$.df.set(H,($.df.get(H)||0)+1)}function jm($,q,J,X){let{i:Z,v:U,$:W}=q;if(U!==void 0){Nw($,U,Z,X);return}if(!W)return;for(let H=0;H<J;H++){let K=W[H];if(!K)continue;if(Array.isArray(K))for(let F of K)Nw($,F.v,Z,X);else Nw($,K.v,Z,X)}}function x8$($,q,J){let X={fieldCount:0,df:new Map,docFieldCount:new Map,docTermFieldHits:new Map};for(let Z of $)jm(X,Z,q,J);return X}function I8$($,q,J,X){jm($,q,J,X)}function _8$($,q){let J=$.docFieldCount.get(q);if(J===void 0)return;$.fieldCount-=J,$.docFieldCount.delete(q);let X=$.docTermFieldHits.get(q);if(!X)return;for(let[Z,U]of X){let W=($.df.get(Z)||0)-U;if(W<=0)$.df.delete(Z);else $.df.set(Z,W)}$.docTermFieldHits.delete(q)}function Lm($,q){if(q.length===0)return;let J=Array.from(new Set(q)).sort((H,K)=>H-K);for(let H of J)_8$($,H);let X=(H)=>{let K=0,F=J.length;while(K<F){let B=K+F>>>1;if(J[B]<H)K=B+1;else F=B}return H-K},Z=J[0],U=new Map;for(let[H,K]of $.docFieldCount)U.set(H>Z?X(H):H,K);$.docFieldCount=U;let W=new Map;for(let[H,K]of $.docTermFieldHits)W.set(H>Z?X(H):H,K);$.docTermFieldHits=W}var vJ=class{constructor($,q,J){this.options={...I$,...q},this.options.useExtendedSearch,this.options.useTokenSearch,this._keyStore=new J8$(this.options.keys),this._docs=$,this._myIndex=null,this._invertedIndex=null,this.setCollection($,J),this._lastQuery=null,this._lastSearcher=null}_getSearcher($){if(this._lastQuery===$)return this._lastSearcher;let q=Q3($,this._invertedIndex?{...this.options,_invertedIndex:this._invertedIndex}:this.options);return this._lastQuery=$,this._lastSearcher=q,q}setCollection($,q){if(this._docs=$,q&&!(q instanceof Aw))throw Error(rJ$);if(this._myIndex=q||Am(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight}),this.options.useTokenSearch){let J=Cw({isCaseSensitive:this.options.isCaseSensitive,ignoreDiacritics:this.options.ignoreDiacritics,tokenize:this.options.tokenize});this._invertedIndex=x8$(this._myIndex.records,this._myIndex.keys.length,J)}this._invalidateSearcherCache()}add($){if(!fq($))return;this._docs.push($);let q=this._myIndex.add($,this._docs.length-1);if(this._invertedIndex&&q){let J=Cw({isCaseSensitive:this.options.isCaseSensitive,ignoreDiacritics:this.options.ignoreDiacritics,tokenize:this.options.tokenize});I8$(this._invertedIndex,q,this._myIndex.keys.length,J)}this._invalidateSearcherCache()}remove($=()=>!1){let q=[],J=[];for(let X=0,Z=this._docs.length;X<Z;X+=1)if($(this._docs[X],X))q.push(this._docs[X]),J.push(X);if(J.length){if(this._invertedIndex)Lm(this._invertedIndex,J);let X=new Set(J);this._docs=this._docs.filter((Z,U)=>!X.has(U)),this._myIndex.removeAll(J),this._invalidateSearcherCache()}return q}removeAt($){if(!Number.isInteger($)||$<0||$>=this._docs.length)throw Error(Pw);if(this._invertedIndex)Lm(this._invertedIndex,[$]);let q=this._docs.splice($,1)[0];return this._myIndex.removeAt($),this._invalidateSearcherCache(),q}_invalidateSearcherCache(){this._lastQuery=null,this._lastSearcher=null}getIndex(){return this._myIndex}_normalizedKeys(){return this._myIndex.keys.map(($)=>this._keyStore.get($.id)||$)}search($,q){let{limit:J=-1}=q||{},{includeMatches:X,includeScore:Z,shouldSort:U,sortFn:W,ignoreFieldNorm:H}=this.options;if(n6($)&&!$.trim()){let M=this._docs.map((R,S)=>({item:R,refIndex:S}));if(X3(J)&&J>-1)M=M.slice(0,J);return M}let K=U&&X3(J)&&J>0&&n6($),F=W,B=(M,R)=>F(M,R)||M.idx-R.idx,P;if(K){let M=new C8$(J,B);if(n6(this._docs[0]))this._searchStringList($,{heap:M,ignoreFieldNorm:H});else this._searchObjectList($,{heap:M,ignoreFieldNorm:H});P=M.extractSorted()}else{if(P=n6($)?n6(this._docs[0])?this._searchStringList($):this._searchObjectList($):this._searchLogical($),E8$(P,{ignoreFieldNorm:H}),U)P.sort(n6($)?B:F);if(X3(J)&&J>-1)P=P.slice(0,J)}return S8$(P,this._docs,{includeMatches:X,includeScore:Z})}_searchStringList($,{heap:q,ignoreFieldNorm:J}={}){let X=this._getSearcher($),Z=this.options.useTokenSearch&&this.options.tokenMatch==="all",{records:U}=this._myIndex,W=q?null:[];return U.forEach(({v:H,i:K,n:F})=>{if(!fq(H))return;let B=X.searchIn(H);if(B.isMatch){let P={score:B.score,value:H,norm:F,indices:B.indices};if(Z)P.matchedMask=B.matchedMask,P.matchedTerms=B.matchedTerms,P.termCount=B.termCount;let M=[P];if(!Z||this._coversAllTokens(M)){let R={item:H,idx:K,matches:M};if(q)R.score=Ew(R.matches,{ignoreFieldNorm:J}),q.insert(R);else W.push(R)}}}),W}_searchLogical($){let q=Tm($,this.options),J=this._normalizedKeys(),X=(H,K,F)=>{if(!("children"in H)){let{keyId:R,searcher:S}=H,f;if(R===null)f=[],J.forEach((y,q$)=>{f.push(...this._findMatches({key:y,value:K[q$],searcher:S}))});else f=this._findMatches({key:this._keyStore.get(R),value:this._myIndex.getValueForItemAtKeyId(K,R),searcher:S});if(f&&f.length)return[{idx:F,item:K,matches:f}];return[]}let{children:B,operator:P}=H,M=[];for(let R=0,S=B.length;R<S;R+=1){let f=B[R],y=X(f,K,F);if(y.length)M.push(...y);else if(P===Y3.AND)return[]}return M},Z=this._myIndex.records,U=new Map,W=[];return Z.forEach(({$:H,i:K})=>{if(fq(H)){let F=X(q,H,K);if(F.length){if(!U.has(K))U.set(K,{idx:K,item:H,matches:[]}),W.push(U.get(K));F.forEach(({matches:B})=>{U.get(K).matches.push(...B)})}}}),W}_searchObjectList($,{heap:q,ignoreFieldNorm:J}={}){let X=this._getSearcher($),Z=this.options.useTokenSearch&&this.options.tokenMatch==="all",{records:U}=this._myIndex,W=this._normalizedKeys(),H=q?null:[];return U.forEach(({$:K,i:F})=>{if(!fq(K))return;let B=[],P=!1,M=!1;if(W.forEach((R,S)=>{let f=this._findMatches({key:R,value:K[S],searcher:X});if(f.length){if(B.push(...f),f[0].hasInverse)M=!0}else P=!0}),M&&P)return;if(B.length&&(!Z||this._coversAllTokens(B))){let R={idx:F,item:K,matches:B};if(q)R.score=Ew(R.matches,{ignoreFieldNorm:J}),q.insert(R);else H.push(R)}}),H}_findMatches({key:$,value:q,searcher:J}){if(!fq(q))return[];let X=[];if(bJ(q))q.forEach(({v:Z,i:U,n:W})=>{if(!fq(Z))return;let H=J.searchIn(Z);if(H.isMatch){let K={score:H.score,key:$,value:Z,idx:U,norm:W,indices:H.indices,hasInverse:H.hasInverse};if(H.termCount!==void 0)K.matchedMask=H.matchedMask,K.matchedTerms=H.matchedTerms,K.termCount=H.termCount;X.push(K)}});else{let{v:Z,n:U}=q,W=J.searchIn(Z);if(W.isMatch){let H={score:W.score,key:$,value:Z,norm:U,indices:W.indices,hasInverse:W.hasInverse};if(W.termCount!==void 0)H.matchedMask=W.matchedMask,H.matchedTerms=W.matchedTerms,H.termCount=W.termCount;X.push(H)}}return X}_coversAllTokens($){let q=$.length?$[0].termCount:void 0;if(q===void 0)return!0;if(q<=31){let X=0;for(let Z=0;Z<$.length;Z++)X|=$[Z].matchedMask||0;return X===2**q-1}let J=new Set;for(let X=0;X<$.length;X++){let Z=$[X].matchedTerms;if(Z)for(let U of Z)J.add(U)}return J.size===q}};vJ.version="7.5.0";vJ.createIndex=Am;vJ.parseIndex=H8$;vJ.config=I$;vJ.match=function($,q,J){if(J&&J.useTokenSearch)throw Error(q8$);return Q3($,{...I$,...J}).searchIn(q)};vJ.parseQuery=Tm;jw(M8$);jw(f8$);vJ.use=function(...$){$.forEach((q)=>jw(q))};var U3=vJ;var mm=b$(x0(),1),fm=b$(f6(),1);var W3=b$(x0(),1);class U0{pipa;constructor($){this.pipa=$}static get fileManager(){return new t0(cX)}static get store(){let $=E0.get(NQ);if(!$)$=E0.set(NQ,new Map);return $}static load(){let $=new t0(cX);U0.clear(),($.read(dX)??[]).forEach((q)=>U0.add(new g4(q)))}static persist(){U0.fileManager.save(dX,U0.all(),($)=>$)}static listBy($){let q={};if($?.status)q.status=$.status;if($?.type)q.type=$.type;let J=W3.filter([...U0.store.values()],q);if($?.sort){if(J=W3.sortBy(J,$.sort.field),$.sort.order==="DESC")J=J.reverse()}if($?.limit)J=J.slice(0,$.limit);return J}static all(){return[...U0.store.values()]}static get($){return U0.store.get($)}static clear(){U0.store.clear()}static add($){U0.store.set($.code,$),U0.persist()}static update($,q){let J=U0.store.get($);if(!J)return q;return E0.set(NQ,U0.store.set($,Object.assign(new g4({}),J,q))),U0.persist(),U0.get($)}static delete($){return U0.store.delete($),U0.persist(),!0}}class I5{canUpdate($,q="update-frontmatter"){let J=U0.get($);if(!J)throw new O$(...f5[q].failed,`Item com código "${$}" não encontrado no backlog.`);return J}canRemove($){let q=U0.get($);if(!q)throw new O$("backlog.remove",`Item com código "${$}" não encontrado no backlog.`);return q}canSelect($){let q=U0.get($);if(!q)throw new O$(...f5.select.failed,`Item com código "${$}" não encontrado no backlog.`);return q}canCreate({type:$,title:q}){if(!$||!m5.includes($))throw new O$(...f5.create.failed,`Tipo inválido: "${$}". Esperado: epic, story, task, bugfix.`);if(!q?.trim()||q.trim().length<3)throw new O$(...f5.create.failed,"Título deve ter pelo menos 3 caracteres.")}}class mw extends fm.Mixin(I5,U0){pipa;constructor($){super();this.pipa=$}get($){return U0.get($)}list($){return U0.listBy($)}updateFrontmatter({code:$,field:q,value:J}){let X=this.canUpdate($),Z=X.parentCode;if(X[q]=J,X.updatedAt=new Date().toISOString(),U0.update(X.code,X),q==="status"||q==="parentCode")this.recalculateAncestors($);if(q==="parentCode"&&Z&&Z!==X.parentCode)this.recalculateAncestors(Z);return this.pipa.events.emit("backlog_updated",X),X}deriveStatus($,q){if($.length===0)return q;let J=$[0].status;if($.every((Z)=>Z.status===J))return J;return"in_progress"}deriveNodeStatus($){let q=U0.all().filter((X)=>X.parentCode===$.code),J=this.deriveStatus(q,$.status);if(J!==$.status)$.status=J,$.updatedAt=new Date().toISOString(),U0.update($.code,$),this.pipa.events.emit("backlog_updated",$)}recalculateAncestors($){let q=new Set,J=this.get($);while(J?.parentCode&&!q.has(J.parentCode)){q.add(J.parentCode);let X=this.get(J.parentCode);if(!X)break;this.deriveNodeStatus(X),J=X}}normalizeBody($){return $.replaceAll(String.raw`\n`,`
|
|
142
|
-
`)}updateBody({code:$,mode:q,value:J,replacement:X=""}){let Z=this.canUpdate($);return Z.body=XQ(Z.body,{mode:q,value:J,replacement:X}),Z.updatedAt=new Date().toISOString(),U0.update(Z.code,Z),this.pipa.events.emit("backlog_updated",Z),Z}updateMetadata({code:$,metadata:q}){let J=this.canUpdate($,"update-metadata");return J.metadata=mm.merge({},J.metadata,q),J.updatedAt=new Date().toISOString(),U0.update(J.code,J),this.pipa.events.emit("backlog_updated",J),J}select({query:$}){let q=U0.listBy();return new U3(q,{keys:["title","code","tags"],threshold:0.4}).search($).map((X)=>X.item)}remove({code:$}){let q=this.canRemove($),J=q.parentCode;if(U0.delete($),J){let X=this.get(J);if(X)this.deriveNodeStatus(X),this.recalculateAncestors(J)}return this.pipa.events.emit("backlog_removed",q),q}}class fw extends xm.Mixin(I5,mw){pipa;constructor($){super($);this.pipa=$}instantiate($){this.canCreate($);let q=new Date().toISOString(),J=new g4({...w3.omit($,["action"]),code:m9(8),status:"triage",createdAt:q,updatedAt:q});if(U0.add(J),J.parentCode)this.recalculateAncestors(J.code);return this.pipa.events.emit("backlog_created",J),this.pipa.nudge("backlog.create",`Item criado: ${J.code}`),w3.merge({},$,J)}}var k8$=new Set(["write","edit","read","find"]);class xw{blockedToolCallIds=new Set;guardBacklogWrite($,q){let{toolName:J,toolCallId:X}=$;if(!J||!k8$.has(J))return;if(!pM($))return;let Z=$.input.path??"";if(!Z.includes(dX)||!Z.includes(cX))return;return this.blockedToolCallIds.add(X),{block:!0,reason:p(`O uso de "${J}" em arquivos do backlog não é permitido.`,'Utilize a tool backlog com action "update-body" ou "update-frontmatter" para manipular tarefas.',`Path bloqueado: ${Z}`)}}collapseBlockedLoop($,q){if(!this.blockedToolCallIds.size)return;let J=this.blockedToolCallIds,X=$.messages.filter((W)=>{if(mJ(W))return!KQ(W.content,J);if(VQ(W))return!zQ(W,J);return!0}),Z=$.messages.length-X.length;if(this.blockedToolCallIds.clear(),!Z)return;let U={role:"user",content:[{type:"text",text:p(`${Z} tentativa(s) de write/edit/read em backlog.json foram removidas do contexto.`,"Arquivos do backlog devem ser manipulados exclusivamente via a tool backlog.",'Use backlog com action "update-body" ou "update-frontmatter".')}],timestamp:Date.now()};return $.messages=[...X,U],$}}D$([Y$("tool_call"),h("design:type",Function),h("design:paramtypes",[typeof ToolCallEvent==="undefined"?Object:ToolCallEvent,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",Object)],xw.prototype,"guardBacklogWrite",null),D$([Y$("context"),h("design:type",Function),h("design:paramtypes",[typeof ContextEvent==="undefined"?Object:ContextEvent,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",Object)],xw.prototype,"collapseBlockedLoop",null);class km extends _m.Mixin(R6,xw){loadBacklog(){U0.load()}initialize($){$.registerTool({name:"backlog",label:"Gerenciar Backlog",description:p("Gerencia o backlog local do projeto: itens de trabalho persistentes (epics, stories, tasks, bugfixes) em backlog.json","Use para criar, listar, atualizar ou remover itens de trabalho do projeto","Não use para tarefas operacionais de execução (use task) nem para seus próprios passos (use todo)"),promptSnippet:"backlog: itens de trabalho persistentes do projeto (epics, stories, tasks, bugfixes). Para tarefas operacionais use task; para seus passos use todo.",promptGuidelines:['Use "backlog" para o backlog persistente do projeto: epics, stories, tasks e bugfixes em backlog.json.','Não use "backlog" para trabalho delegado a colegas (use "task") nem para a sua lista de passos (use "todo").'],parameters:Kq.Union(Object.values(Gw),{type:"object",unevaluatedProperties:!1}),execute:async(q,J)=>{let X=new fw(this.pipa),U=j9(X,Gw,J)[J.action]();if(U)this.pipa.nudge(`backlog.${J.action}`,void 0,U);return{content:[{type:"text",text:Q9(Fm[J.action],{...J,item:U,count:Im.size(U)})}],details:U}}})}}D$([Y$("session_start"),h("design:type",Function),h("design:paramtypes",[]),h("design:returntype",void 0)],km.prototype,"loadBacklog",null);var b8$="https://router.espresso.ia.br",bm=process.env.ESPRESSO_AUTH_TOKEN||process.env.ANTHROPIC_AUTH_TOKEN,Iw={input:0,output:0,cacheRead:0,cacheWrite:0};class vm extends R6{initialize($){$.registerProvider("espresso",{baseUrl:b8$,...bm?{apiKey:bm}:{},headers:{"User-Agent":"pi-espresso/1.0"},api:"openai-responses",models:[{id:"claude-haiku",name:"Espresso Light",reasoning:!0,input:["text","image"],cost:Iw,contextWindow:200000,maxTokens:16384},{id:"claude-sonnet",name:"Espresso Medium",reasoning:!0,input:["text","image"],cost:Iw,contextWindow:200000,maxTokens:16384},{id:"claude-opus",name:"Espresso Heavy",reasoning:!0,input:["text","image"],cost:Iw,contextWindow:200000,maxTokens:16384}]})}addToolsDefinition($,q){if(q.context.model?.provider!=="espresso")return;if(!s.find(q.sessionId))return;let Z=q.getAllTools().filter((
|
|
141
|
+
`);U+=H,U+=Tq.unorderedList(W,({name:K,description:F})=>{return[K,p(F,J.frontmatter?.spawnableTeammates?.[K]??"—")]},"Nenhum colega encontrado.")}return{systemPrompt:U}}updateInstanceOnAgentStart($,q){s.update(q.sessionId,{pipa:q})}}D$([Y$("session_start"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],nW.prototype,"initializeSession",null),D$([Y$("before_agent_start"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",Promise)],nW.prototype,"mitigateModelConcurrency",null),D$([Y$("before_agent_start"),h("design:type",Function),h("design:paramtypes",[typeof BeforeAgentStartEvent==="undefined"?Object:BeforeAgentStartEvent,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",typeof BeforeAgentStartEventResult==="undefined"?Object:BeforeAgentStartEventResult)],nW.prototype,"injectExecutionContext",null),D$([Y$("agent_start"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],nW.prototype,"updateInstanceOnAgentStart",null);class pj{intervals=new Set;every($,q){this.intervals.add(setInterval(q,$))}everyForTeammate($,q,J){this.every(q,()=>{let X=s.find($);if(!X)return;J(X)})}everyWhenTeammateIs($,q,J,X,Z){this.everyForTeammate(q,X,(U)=>{if(U.status!==$)return;let W=U.lastActiveAt??U.startedAt;if(Date.now()-W<J)return;Z(U)})}everyWhenTeammateFailed($,q,J){this.everyForTeammate($,q,(X)=>{if(X.status!=="failed")return;J(X)})}clearAll($){let{role:q}=s.find($)||{};if(q==="main")return;this.intervals.forEach(clearInterval),this.intervals.clear()}}class C8{sessionIntervals=new pj}var jJ$=60000,mJ$=300000,fJ$=3,xJ$=180000,IJ$=30000;class iW extends C8{failCount=0;removeInactiveTeammate($,q){let{role:J}=s.find(q.sessionId)||{};if(J==="main")return;this.sessionIntervals.everyWhenTeammateIs("idle",q.sessionId,mJ$,jJ$,()=>this.shutdown(void 0,q))}abortStuckTeammate($,q){let{role:J}=s.find(q.sessionId)||{};if(J==="main")return;this.sessionIntervals.everyWhenTeammateIs("running",q.sessionId,xJ$,IJ$,async(X)=>{await X.session?.abort(),q.nudge("teammates.stuck","Operação abortada por inatividade",["A sua operação atual estava demorando muito (mais de 3 minutos sem atualizações) e foi abortada para destravar você.","Por favor, verifique se há algo bloqueando a ferramenta e tente novamente ou mude sua abordagem."])})}setRunningStatus($,q){if(s.find(q.sessionId)?.isStopping)return;s.update(q.sessionId,{status:"running",lastActiveAt:Date.now()})}handleAgentEnd($,q){let J=s.find(q.sessionId),{status:X}=J||{};if(X==="failed"||J?.isStopping)return;s.update(q.sessionId,{status:"idle",lastTool:void 0}),q.toast.show("Colega [name] está aguardando instruções.")}async handleAgentFail($,q){if(!mJ($.message))return;if($.message.stopReason!=="error"){this.failCount=0;return}if(s.find(q.sessionId)?.isStopping)return;if(s.update(q.sessionId,{status:"failed"}),$.type!=="message_end")return;this.failCount++;let J=s.get(q.sessionId);if(!J.parentSessionId)return;if(k6.teammate.cycling.events.includes("error")&&this.failCount>=fJ$)this.failCount=0,await q.cycleModel();s.find(J.parentSessionId)?.pipa?.nudge("teammates.failed",[`Colega ${J.name} <${J.sessionId}> encontrou um erro e parou de funcionar.`])}async shutdown($,q){this.sessionIntervals.clearAll(q.sessionId);let J=s.find(q.sessionId);if(!J||J.isStopping||J.role==="main"||!J.parentSessionId||o.hasActiveTask(J.sessionId))return;s.update(J.sessionId,{status:"stopping"}),s.get(J.parentSessionId).pipa?.nudge("teammates.shutdown",`Colega ${J.name} <${J.sessionId}> encerrando...`),await J.session?.abort(),q.context.shutdown(),s.delete(q.sessionId)}}D$([Y$("session_start"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],iW.prototype,"removeInactiveTeammate",null),D$([Y$("session_start"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],iW.prototype,"abortStuckTeammate",null),D$([Y$("agent_start"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],iW.prototype,"setRunningStatus",null),D$([Y$("agent_end"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],iW.prototype,"handleAgentEnd",null),D$([Y$("message_start"),Y$("message_update"),Y$("message_end"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",Promise)],iW.prototype,"handleAgentFail",null),D$([Y$("session_shutdown"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",Promise)],iW.prototype,"shutdown",null);class oW{handleActivityEvent($,q){if(!s.find(q.sessionId))return;let X=$.args||$.input;s.update(q.sessionId,{lastActiveAt:Date.now(),lastEvent:$.type,lastTool:`${$.toolName}${X?`(${JSON.stringify(X)})`:""}`})}logTeammateMessages($,q){let J=s.get(q.sessionId);new t0(J.workspaceDir).save("messages.json",[{content:JSON.stringify($.message,null,0),timestamp:Date.now()}])}}D$([Y$("tool_call"),Y$("tool_result"),Y$("tool_execution_start"),Y$("tool_execution_update"),Y$("tool_execution_end"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],oW.prototype,"handleActivityEvent",null),D$([Y$("message_start"),h("design:type",Function),h("design:paramtypes",[typeof MessageEndEvent==="undefined"?Object:MessageEndEvent,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",Object)],oW.prototype,"logTeammateMessages",null);var _J$=300000,kJ$=15000,bJ$=60000;class sW extends C8{lastIdleNudgeAt=0;idleNudgeCount=0;failure={};nudgeInbox($,q){this.sessionIntervals.everyForTeammate(q.sessionId,60000,(J)=>{if(J.isStopping)return;let Z=new t0(J.workspaceDir).read("inbox.json")||[];if(!Z.length)return;q.nudge("teammates.inbox",`Você tem **${Z.length}** nova(s) mensagem(ns) na sua caixa de entrada. Leia quando puder`,{action:"teammates.read-inbox"})})}nudgeIdleTeammate($,q){this.sessionIntervals.everyWhenTeammateIs("idle",q.sessionId,_J$,kJ$,(J)=>{if(J.isStopping||this.idleNudgeCount>=2)return;if(Date.now()-this.lastIdleNudgeAt<bJ$)return;if(J.role==="main")return;if(s.listSubordinates(q.sessionId).some((Z)=>Z.isRunning))return;this.lastIdleNudgeAt=Date.now(),this.idleNudgeCount++,q.nudge("teammates.idle",`Acordando ${J.name}`,["Você está sem executar ações há 1 minuto.","Continue trabalhando no seu objetivo ou reporte um bloqueio ao supervisor."])})}nudgeFailedTeammate($,q){this.sessionIntervals.everyWhenTeammateFailed(q.sessionId,30000,(J)=>{if(J.isStopping||J.session?.isRetrying)return;let X=s.find(J.parentSessionId??"");if(!X?.isStopping)X?.pipa?.nudge("teammates.failed",`Tentando acordar ${J.name}...`);q.nudge("teammates.failed",`Recuperando ${J.name}`,[`Ei, ${J.name}. Parece que você teve um problema na última execução.`,"Detalhes:",Tq.unorderedList([`Último evento: ${J.lastEvent??"nenhum"}.`,`Status code: ${this.failure.code}.`,`Mensagem: ${this.failure.error?.slice(0,100)}.`]),"Tente retomar a tarefa."])})}async handleAgentFail($,q){if(!mJ($.message))return;if($.message.stopReason!=="error")return;let J=$.message.diagnostics?.[0]?.error;this.failure.code=J?.code,this.failure.error=J?.message}handleIdleActivityEvent(){this.lastIdleNudgeAt=0,this.idleNudgeCount=0}clearReminders($,q){this.sessionIntervals.clearAll(q.sessionId),this.lastIdleNudgeAt=0,this.idleNudgeCount=0}}D$([Y$("session_start"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],sW.prototype,"nudgeInbox",null),D$([Y$("session_start"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],sW.prototype,"nudgeIdleTeammate",null),D$([Y$("session_start"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],sW.prototype,"nudgeFailedTeammate",null),D$([Y$("message_start"),Y$("message_update"),Y$("message_end"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",Promise)],sW.prototype,"handleAgentFail",null),D$([Y$("tool_call"),Y$("tool_result"),Y$("tool_execution_start"),Y$("tool_execution_update"),Y$("tool_execution_end"),h("design:type",Function),h("design:paramtypes",[]),h("design:returntype",void 0)],sW.prototype,"handleIdleActivityEvent",null),D$([Y$("session_shutdown"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],sW.prototype,"clearReminders",null);class rW{clearStoppingContext($,q){if(!s.find(q.sessionId)?.isStopping)return;return{messages:[]}}}D$([Y$("context"),h("design:type",Function),h("design:paramtypes",[typeof ContextEvent==="undefined"?Object:ContextEvent,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",Object)],rW.prototype,"clearStoppingContext",null);var nj=b$(x0(),1),ij=b$(f6(),1);import{truncateToWidth as vJ$}from"@earendil-works/pi-tui";class b4{constructor($){Object.assign(this,$)}id;sessionId;text;status;get isPending(){return this.status==="pending"}get isInProgress(){return this.status==="in_progress"}get isCompleted(){return this.status==="completed"}}class e0{static get store(){let $=E0.get("TODO_STORE");if(!$)$=E0.set("TODO_STORE",new Map);return $}static load($,q){let X=new t0($).read("todo.json")??[];e0.clear(q),X.forEach((Z)=>e0.add(new b4({...Z,sessionId:q})))}static add($){return this.store.set($.id,$),$}static update($,q){let J=this.store.get($);if(!J)return;let X=Object.assign(new b4({}),J,q);return this.store.set($,X),X}static delete($){this.store.delete($)}static clear($){let q=this.list($);for(let J of q)this.delete(J.id)}static list($){return Array.from(this.store.values()).filter((q)=>q.sessionId===$)}static get($){return this.store.get($)}}var aW={update:{code:"todo.update",get failed(){return[this.code,"Falha durante atualização"]}},remove:{code:"todo.remove",get failed(){return[this.code,"Falha durante remoção"]}}};class j5{canUpdate($,q){let J=e0.get(q);if(J?.sessionId!==$)throw new O$(...aW.update.failed,`Item com ID "${q}" não encontrado na lista de afazeres.`);return J}canRemove($,q){let J=e0.get(q);if(J?.sessionId!==$)throw new O$(...aW.remove.failed,`Item com ID "${q}" não encontrado na lista de afazeres.`);return J}}class tW extends j5{pipa;fileManager;constructor($){super();this.pipa=$;let q=s.get($.sessionId);this.fileManager=new t0(q.workspaceDir)}get sessionId(){return this.pipa.sessionId}persist(){this.fileManager.save("todo.json",e0.list(this.sessionId),($)=>$)}update({id:$,action:q,...J}){let X=this.canUpdate(this.sessionId,$),Z=e0.update($,J);return this.persist(),this.pipa.events.emit("todo_updated",Z??X),Z??X}remove({id:$}){let q=this.canRemove(this.sessionId,$);e0.delete($),this.persist(),this.pipa.events.emit("todo_removed",q)}clear(){e0.clear(this.sessionId),this.persist(),this.pipa.events.emit("todo_cleared",{sessionId:this.sessionId})}list(){return e0.list(this.sessionId)}}class eW{step=0;animationInterval;startAnimation($,q=80){if(this.animationInterval)clearInterval(this.animationInterval);this.animationInterval=setInterval(()=>{this.step++,$.requestRender()},q)}stopAnimation(){if(this.animationInterval)clearInterval(this.animationInterval),this.animationInterval=void 0}}class $w extends ij.Mixin(w5,eW){tui;getTeammates;theme;constructor($,q,J){super();this.tui=$;this.getTeammates=q;this.theme=J}start(){this.startAnimation(this.tui,120)}stop(){this.stopAnimation()}render($){let q=this.getTeammates(),J=BQ({items:q,getId:(Z)=>Z.sessionId,getParentId:(Z)=>Z.parentSessionId,sortNodes:(Z)=>nj.sortBy(Z,[(U)=>U.startedAt??0])}).flatMap((Z)=>Z.role==="main"?Z.children:[Z]);if(!J.length)return[this.theme.fg("accent","Colegas"),this.theme.fg("dim","○ nenhum colega ativo")];return[this.theme.fg("accent","Colegas"),...J.flatMap((Z,U)=>this.renderNode(Z,"",U===J.length-1))].map((Z)=>vJ$(Z,$))}invalidate(){return}renderLabel($){let q=this.theme.fg("text",$.name),J={name:q,tool:"",tokens:"",model:"",todos:""};if($.status==="idle")J.name=this.theme.fg("dim",$.name);else J.name=this.theme.bold(q);let X=this.colorStatus($),Z=this.elapsedLabel($),U=Z?this.theme.fg("dim",Z):"";if(!k6.teammate.hideModelName)J.model=this.theme.fg("dim",`(${$.session?.model?.id})`);if($.lastTool&&!k6.teammate.hideTools)J.tool=this.theme.fg("dim",$.lastTool);let W=e0.list($.sessionId);if(W.length)J.todos=this.theme.fg("dim",`passos: ${W.filter((F)=>F.isCompleted).length}/${W.length}`);let H=$.session?.getSessionStats();if(H?.tokens)J.tokens=this.theme.fg("dim",`${G4(H.tokens.input)}↑ ${G4(H.tokens.output)}↓`);let K=PM(this.theme,"·",J.name,J.model,X,U,J.todos,J.tokens,J.tool);return`${this.statusIcon($)} ${K}`}statusIcon($){switch($.status){case"failed":return this.theme.fg("error","×");case"running":return this.theme.fg("accent","●");default:return this.theme.fg("dim","○")}}colorStatus($){let q=$.status,J=hj[q];switch(q){case"failed":return this.theme.fg("error",J);case"running":return cM({step:this.step,seedString:$.sessionId});case"idle":return this.theme.fg("accent",J);case"stopping":return this.theme.fg("warning",J);default:return this.theme.fg("dim",J)}}elapsedLabel($){if($.status==="idle")return"aguardando início";if($.status==="failed")return"erro \uD83D\uDE35";if($.isStopping)return;let q=$.lastActiveAt;if(!q)return"";let J=Date.now(),X=Math.max(0,J-q),Z=Math.floor(X/1000),U=Math.floor(Z/60),W=Z%60;return`última ação há ${U>0?`${U}m ${W}s`:`${W}s`}`}}class qw{captureMain($,q){if(s.get(q.sessionId).role!=="main")return;Y9().context.ui.setWidget("pipa.teammates",(X,Z)=>{let U=new $w(X,s.list,Z);return U.start(),{render:(W)=>U.render(W),invalidate:()=>U.invalidate(),dispose:()=>U.stop()}},{placement:"aboveEditor"})}}D$([Y$("before_agent_start"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],qw.prototype,"captureMain",null);var oj=b$(f6(),1);import gJ$ from"node:path";class t9 extends oj.Mixin(mU,V5){pipa;folder;constructor($,q){super($);this.pipa=$;this.folder=q}instantiate($){let q=$.task;this.canCreate(q.name,q.blockedBy);let J=B0.get(this.pipa.sessionId),X=this.getParentSquadTask(q.squad)??o.getActiveTask(J.parentSessionId??""),Z=this.pipa.sessionId,U=Date.now(),W=m9(),H={...q,id:W,status:"pending",role:J.name,blockedBy:q.blockedBy||[],directory:gJ$.join(W8,W),parentTaskId:X?.id??q.parentTaskId,squad:X?.squad??q.squad,creatorId:Z,createdAt:U};if(o.add(H),H.parentTaskId)o.update(H.parentTaskId,{status:"in-progress"});return this.pipa.events.emit("task_created",H),this.notifyEligibleIdleTeammates(),H}}var Jw=30000,hJ$=120000,Xw=120000;class Zw extends C8{lastCreatorNudge=new Map;lastTeammateNudge=new Map;nudgeCreatorAboutUnownedTasks(){this.sessionIntervals.every(Jw,()=>{let $=Date.now();t9.listAvailable().forEach((J)=>{let X=s.find(J.creatorId);if(!X?.pipa||X.isStopping)return;if($-J.createdAt<hJ$)return;let U=this.lastCreatorNudge.get(J.id)||0;if($-U<Xw)return;this.lastCreatorNudge.set(J.id,$),X.pipa.nudge("task.reminder","Lembrete: Existem tarefas pendentes prontas para execução.",{action:"task.reminder",message:"As seguintes tarefas estão pendentes, sem proprietário e com todos os bloqueios resolvidos.",tasks:[v4.pick(J,["id","name"])],instructions:["Você deve reivindicar essas tarefas para começar a trabalhar.","Execute: 'task claim ID_DA_TAREFA'"]})})})}nudgeIdleTeammatesAboutAvailableTasks(){this.sessionIntervals.every(Jw,()=>{let $=Date.now(),q=t9.listAvailable();if(q.length===0)return;s.list().filter(({status:X,role:Z})=>X==="idle"&&Z==="subagent").forEach((X)=>{if(!X.pipa||X.isStopping)return;let Z=q.filter((W)=>t9.isEligibleForTask(W,X));if(Z.length===0)return;let U=this.lastTeammateNudge.get(X.sessionId)||0;if($-U<Xw)return;this.lastTeammateNudge.set(X.sessionId,$),X.pipa.nudge("task.available",`Tarefa disponível para o colega ${X.name}.`,{action:"task.available",message:"As seguintes tarefas estão livres, sem bloqueios e prontas para o seu papel.",tasks:v4.map(Z,["id","name"]),instructions:["Você está ocioso no momento.","Você deve reivindicar uma dessas tarefas para começar a trabalhar nela.","Execute: 'task claim ID_DA_TAREFA'"]})})})}nudgeIdleTeammatesWithActiveTasks(){this.sessionIntervals.every(Jw,()=>{let $=s.list().filter(({status:J,role:X})=>J==="idle"&&X==="subagent");if($.length===0)return;let q=v4.keyBy(t9.listActive().filter((J)=>J.owner),(J)=>J.owner.sessionId);$.forEach((J)=>{if(!J.pipa||J.isStopping)return;let X=q[J.sessionId];if(!X)return;let Z=Date.now(),U=this.lastTeammateNudge.get(J.sessionId)||0;if(Z-U<Xw)return;if(s.listSubordinates(J.sessionId).some((W)=>W.isRunning))return;this.lastTeammateNudge.set(J.sessionId,Z),J.pipa.nudge("task.reminder",`Aviso de inatividade com tarefa pendente: ${X.name}.`,{action:"task.reminder",message:`Você está ocioso mas possui a tarefa [${X.id}] ${X.name} em andamento.`,instructions:["Se você já concluiu seu trabalho, você DEVE finalizá-la.",`Execute: 'task complete ${X.id}'`,"Caso contrário, retome o trabalho informando seu supervisor."]})})})}shutdown($,q){this.sessionIntervals.clearAll(q.sessionId)}}D$([Y$("session_start"),h("design:type",Function),h("design:paramtypes",[]),h("design:returntype",void 0)],Zw.prototype,"nudgeCreatorAboutUnownedTasks",null),D$([Y$("session_start"),h("design:type",Function),h("design:paramtypes",[]),h("design:returntype",void 0)],Zw.prototype,"nudgeIdleTeammatesAboutAvailableTasks",null),D$([Y$("session_start"),h("design:type",Function),h("design:paramtypes",[]),h("design:returntype",void 0)],Zw.prototype,"nudgeIdleTeammatesWithActiveTasks",null),D$([Y$("session_shutdown"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],Zw.prototype,"shutdown",null);var sj=b$(x0(),1);import{truncateToWidth as yJ$}from"@earendil-works/pi-tui";var cJ$={"in-progress":0,pending:1,stopped:2,completed:3};class Qw extends w5{getTasks;theme;constructor($,q){super();this.getTasks=$;this.theme=q}expanded=!1;render($){let q=this.getTasks(),J=BQ({items:q.filter((K)=>!K.isSetup),getId:(K)=>K.id,getParentId:(K)=>K.parentTaskId,sortNodes:(K)=>sj.orderBy(K,[(F)=>cJ$[F.status]??1,"completedAt"],["asc","desc"])}),X=J.flatMap((K,F)=>this.renderNode(K,"",F===J.length-1)),Z=this.expanded?X:X.slice(0,k6.tasks.maxVisible),U=X.length-Z.length;if(!Z.length)return[this.theme.fg("accent","Tarefas"),this.theme.fg("dim","○ nenhuma tarefa ativa")];let W=[this.theme.fg("accent","Tarefas"),...Z],H={[String(!1)]:`ver mais ${U} tarefa${U>1?"s":""} (ctrl+t)`,[String(!0)]:"recolher (ctrl+t)"};if(U||this.expanded&&X.length>k6.tasks.maxVisible)W.push(this.theme.fg("dim",H[String(this.expanded)]));return W.map((K)=>yJ$(K,$))}invalidate(){return}toggle(){this.expanded=!this.expanded}renderLabel($){return`${this.statusIcon($)} ${this.label($)}`}statusIcon($){if(o.hasUncompletedHardDependency($))return this.theme.fg("warning","⚠");switch($.status){case"in-progress":return this.theme.fg("accent","●");case"completed":return this.theme.fg("success","✓");case"stopped":return this.theme.fg("error","×");default:return this.theme.fg("dim","○")}}label($){let q=this.theme.fg("text",nM($.name,50)),J=$.parentTaskId?"":iM($.squad,this.theme),X=this.colorStatus($),Z=$.owner?` · ${$.owner.name}`:" · não atribuído";return`${q}${J} ${X}${this.theme.fg("dim",Z)}`}colorStatus($){if(o.hasUncompletedHardDependency($))return this.theme.fg("warning","(bloqueada)");let q=gL[$.status];switch($.status){case"in-progress":return this.theme.fg("accent",`(${q})`);case"completed":return this.theme.fg("success",`(${q})`);case"stopped":return this.theme.fg("error",`(${q})`);default:return this.theme.fg("dim",`(${q})`)}}}import{Key as dJ$,matchesKey as uJ$}from"@earendil-works/pi-tui";class Yw{captureMain($,q){if(B0.get(q.sessionId).role!=="main")return;Y9().context.ui.setWidget("pipa.tasks",(X,Z)=>{let U=new Qw(o.list,Z),W=setInterval(X.requestRender.bind(X),1000),H=Y9().context.ui.onTerminalInput((K)=>{if(uJ$(K,dJ$.ctrl("t")))return U.toggle(),X.requestRender(),{consume:!0}});return{render:(K)=>U.render(K),invalidate:()=>U.invalidate(),dispose:()=>{clearInterval(W),H()}}},{placement:"aboveEditor"})}}D$([Y$("before_agent_start"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],Yw.prototype,"captureMain",null);var Ww=b$(x0(),1);var lJ$=["pending","in-progress","completed","stopped"],pJ$=["hard","soft"],Uw=A.Object({name:A.String({description:p("Máximo 50 caracteres",'Ex: "Criar schema de usuário", não frases longas')}),description:A.String({description:p("Descrição detalhada da tarefa em português","Inclua contexto, critérios de aceite e restrições")}),blockedBy:A.Array(A.Object({id:A.String({description:"ID da tarefa dependente. Ex: a1b2c3d4."}),type:A.Union(Ww.map(pJ$,A.Literal),{description:"hard: bloqueio total | soft: alerta informativo"})}),{description:p("Dependências da tarefa","Use hard para bloqueio total e soft para alertas","Garante a ordem correta de execução")}),parentTaskId:A.Optional(A.String({description:p("Se esta tarefa for uma sub-tarefa, informe o ID da tarefa pai (épico)","Omita para criar sem pai")})),squad:A.Optional(A.String({description:p("Nome do squad para agrupar tarefas","Herdado automaticamente no instantiate")}))}),ww={instantiate:A.Object({action:A.Literal("instantiate",{description:"instantiate: nova tarefa"}),task:A.Object(Uw.properties,{description:p("Propriedades da nova tarefa","Campos opcionais (blockedBy, parentTaskId, squad) podem ser omitidos")})},{description:p("Cria uma nova tarefa operacional","Use task.instantiate para delegar trabalho a um colega"),examples:[{action:"instantiate",task:{name:"Criar schema de usuário",description:"Criar o schema de usuário com campos nome, email e role.",blockedBy:[{id:"a1b2c3d4",type:"hard"}],squad:"backend"}}]}),get:A.Object({action:A.Literal("get",{description:"get: obter detalhes de uma tarefa"}),id:A.String({description:"ID da tarefa a ser consultada. Ex: a1b2c3d4."})}),setup:A.Object({action:A.Literal("setup",{description:"setup: definir nome, dependências ou tarefa pai da tarefa pré-gerada"}),id:A.String({description:"ID da tarefa a ser configurada. Ex: a1b2c3d4."}),updates:A.Partial(A.Pick(Uw,["name","blockedBy","parentTaskId"]),{description:p("Campos que deseja configurar","Omita os que não mudarem")})}),update:A.Object({action:A.Literal("update",{description:"update: editar uma tarefa existente"}),id:A.String({description:"ID da tarefa a ser atualizada. Ex: a1b2c3d4."}),updates:A.Partial(Uw,{description:p("Campos que deseja atualizar","Apenas inclua o que mudou; omita o restante")})}),list:A.Object({action:A.Literal("list",{description:"list: tarefas criadas"}),status:A.Optional(A.Union(Ww.map(lJ$,A.Literal),{description:p("Filtrar tarefas por status","Omita para listar todas")}))}),remove:A.Object({action:A.Literal("remove",{description:"remove: exclusão de tarefa"}),id:A.String({description:"ID da tarefa a ser removida. Ex: a1b2c3d4."}),force:A.Optional(A.Boolean({description:p("Forçar remoção de tarefa em andamento","Somente criador ou main"),default:!1}))}),claim:A.Object({action:A.Literal("claim",{description:"claim: reivindicar tarefa para si mesmo"}),id:A.String({description:"ID da tarefa a ser reivindicada. Ex: a1b2c3d4."})}),complete:A.Object({action:A.Literal("complete",{description:"complete: marcar tarefa como concluída"}),id:A.String({description:"ID da tarefa concluída. Ex: a1b2c3d4."}),artifactFile:A.String({description:"Caminho absoluto ou relativo do artefato que comprova o resultado da tarefa. Ex: .artifacts/minha-tarefa/relatorio.md"}),force:A.Optional(A.Boolean({description:p("Forçar conclusão da tarefa","Somente main (supervisor) pode usar force"),default:!1}))}),"list-by-squad":A.Object({action:A.Literal("list-by-squad",{description:"list-by-squad: listar tarefas de um squad"}),squad:A.String({description:"Nome do squad para filtrar. Ex: backend."})}),"squad-status":A.Object({action:A.Literal("squad-status",{description:"squad-status: status de progresso de um squad"}),squad:A.String({description:"Nome do squad para consultar. Ex: backend."})})},rj={get:"Buscando tarefa...",setup:"Configurando tarefa...",list:"Listando tarefas ([status])...",instantiate:"Criando nova tarefa [name]...",update:"Atualizando tarefa...",remove:"Removendo tarefa...",claim:"Reivindicando tarefa...",complete:"Concluindo tarefa...","list-by-squad":"Listando tarefas do squad...","squad-status":"Verificando status do squad..."};class tj extends aj.Mixin(R6,Zw,Yw,pW){loadTasks(){o.load()}initialize($){$.registerTool({name:"task",label:"Gerenciar tarefas",description:p("Gerencia tarefas operacionais criadas por agentes durante a execução","Use para delegar trabalho a colegas, reivindicar, atualizar ou concluir tarefas de um squad","Não use para itens persistentes do projeto (use backlog) nem para seus próprios passos de execução (use todo)"),promptSnippet:"task: tarefas operacionais delegadas a colegas (squad). Para itens do projeto use backlog; para seus passos use todo.",promptGuidelines:['Use "task" para trabalho delegado a colegas: criar, reivindicar, atualizar, concluir ou remover tarefas operacionais.','Não use "task" para itens persistentes do projeto (use "backlog") nem para a sua lista de passos (use "todo").'],parameters:Kq.Union(Object.values(ww),{type:"object",unevaluatedProperties:!1}),execute:async(q,J)=>{let X=new t9(this.pipa,W8),U=j9(X,ww,J)[J.action]();if(U)this.pipa.nudge(`task.${J.action}`,void 0,U);return{content:[{type:"text",text:Q9(rj[J.action],{id:J.id??"",name:J.updates?.name||J.task?.name||"",status:J.status??"all"})}],details:U}}})}}D$([Y$("session_start"),h("design:type",Function),h("design:paramtypes",[]),h("design:returntype",void 0)],tj.prototype,"loadTasks",null);var $m=b$(f6(),1);var Hw={instantiate:A.Object({action:A.Literal("instantiate",{description:"instantiate: usar quando quiser delegar uma tarefa clara para outro colega."}),name:A.String({description:"Nome do colega, em letra minúscula, que deve receber a tarefa. Ex: giulia, ella, edu."}),goal:A.String({description:p("Objetivo concreto que o colega deve alcançar ao executar a tarefa","Inclua contexto e critérios de aceite")})}),list:A.Object({action:A.Literal("list",{description:p("list: usar para descobrir quais colegas existem antes de escolher um.","Retorna nome, papel e ID de cada colega")})}),online:A.Object({action:A.Literal("online",{description:p("online: usar quando precisar saber quais colegas estão disponíveis agora.","Retorna os IDs dos colegas com sessão ativa")})}),"send-inbox":A.Object({action:A.Literal("send-inbox",{description:p("send-inbox: EXCEÇÃO — use apenas quando o colega está comprovadamente ocupado em outra task e você não quer interromper o fluxo dele.","Se houver dúvida, prefira chat")}),teammateId:A.String({description:p("ID do colega que deve receber a mensagem na inbox","Recupere com list ou online")}),message:A.String({description:"Texto objetivo com contexto, pedido e próximo passo esperado."})}),chat:A.Object({action:A.Literal("chat",{description:p("chat: PADRÃO para comunicação entre colegas.","Use para 99% das interações: pedir status, reportar resultado, solicitar ajuste, validar entrega","Resposta imediata = menos latência no ciclo","Quando em dúvida, prefira chat","Não use para comunicação assíncrona quando o colega estiver ocupado (use send-inbox)")}),teammateId:A.String({description:p("ID do colega com quem você quer falar em tempo real","Recupere com list ou online")}),message:A.String({description:"Mensagem curta e direta para a conversa síncrona."})}),"read-inbox":A.Object({action:A.Literal("read-inbox",{description:p("read-inbox: usar para revisar mensagens pendentes recebidas na inbox.","Retorna as mensagens não lidas")})}),dismiss:A.Object({action:A.Literal("dismiss",{description:"dismiss: usar para encerrar a sessão de um colega que já concluiu suas tarefas."}),teammateId:A.String({description:p("ID do colega que deve ser dispensado","Recupere com list ou online")}),reason:A.String({description:"Motivo objetivo da dispensa (ex: tarefas concluídas, não será mais necessário nas próximas etapas)."})})},ej={instantiate:"Invocando colegas...",list:"Listando colegas...",online:"Listando colegas online...",chat:"Enviando mensagem instantânea ao colega...","send-inbox":"Enviando mensagem assíncrona à inbox do colega...","read-inbox":"Lendo mensagens da inbox...",dismiss:"Dispensando colega..."};class qm extends $m.Mixin(R6,nW,iW,sW,rW,oW,qw){initialize($){$.registerTool({name:"teammates",label:"Gerenciar colegas",description:p("Gerencia colegas (subagentes) que executam tarefas específicas","Use para invocar, listar, conversar, enviar mensagem assíncrona, ler inbox ou dispensar colegas","Não use para gerenciar trabalho do projeto (use backlog, task ou todo)"),promptSnippet:"teammates: colegas (subagentes) que executam tarefas. Use para invocar, listar, conversar (chat) ou dispensar.",promptGuidelines:['Use "teammates" para interagir com colegas: invocar, listar, conversar (chat), enviar mensagem assíncrona (send-inbox) ou dispensar.','Prefira "chat" para comunicação síncrona; reserve "send-inbox" para quando o colega estiver comprovadamente ocupado.'],parameters:Kq.Union(Object.values(Hw),{type:"object",unevaluatedProperties:!1}),execute:async(q,J)=>{let X=new s(this.pipa),U=await j9(X,Hw,J)[J.action]();if(U)this.pipa.nudge(`teammates.${J.action}`,void 0,U);return{content:[{type:"text",text:ej[J.action]}],details:U}}})}}var Qm=b$(f6(),1);var Jm=b$(x0(),1);var nJ$=["pending","in_progress","completed"],Vw={instantiate:A.Object({action:A.Literal("instantiate",{description:"instantiate: adicionar novo passo"}),item:A.String({description:'O texto do passo a ser adicionado. Ex: "Ler o artefato de planejamento antes de codar".'})}),update:A.Object({action:A.Literal("update",{description:p("Atualizar passo existente","Use para marcar como concluído, editar o texto ou reabrir")}),id:A.String({description:p("ID do passo a ser atualizado","Recupere com list")}),status:A.Optional(A.Union(Jm.map(nJ$,A.Literal),{description:p("Novo status: pending, in_progress ou completed","Omita para manter o status atual")})),text:A.Optional(A.String({description:p("Novo texto do passo","Omita para manter o texto atual")}))}),remove:A.Object({action:A.Literal("remove",{description:"Remover passo da lista de afazeres"}),id:A.String({description:p("ID do passo a ser removido","Recupere com list")})}),list:A.Object({action:A.Literal("list",{description:"Listar os passos atuais da lista de afazeres, com status e ID de cada um"})}),clear:A.Object({action:A.Literal("clear",{description:"Limpar todos os passos da lista de afazeres"})})},Xm={instantiate:"Adicionando item à lista de afazeres...",update:"Atualizando item da lista de afazeres...",remove:"Removendo item da lista de afazeres...",list:"Listando lista de afazeres...",clear:"Limpando lista de afazeres..."};var Zm=b$(f6(),1);class Kw extends Zm.Mixin(j5,tW){pipa;constructor($){super($);this.pipa=$}instantiate($){let q=new b4({id:m9(),sessionId:this.sessionId,text:$.item,status:"pending"});return e0.add(q),this.persist(),this.pipa.events.emit("todo_created",q),q}}class zw{promptTodoCreation($,q){let J=s.find(q.sessionId);if(!J||J.role==="main"||J.isStopping)return;if(e0.list(q.sessionId).length>0)return;q.nudge("todo.empty",`Colega ${J.name} não possui afazeres na lista.`,["Parece que você ainda não tem um plano de execução definido.","Por favor, use a ferramenta de afazeres (todo) para criar e gerenciar seu checklist de execução em passos pequenos e atômicos."])}notifyPendingTodos($,q){let J=s.find(q.sessionId);if(!J||J.role==="main"||J.isStopping)return;let X=e0.list(q.sessionId).filter((Z)=>!Z.isCompleted);if(!X.length)return e0.clear(q.sessionId);if(s.listSubordinates(q.sessionId).some((Z)=>Z.isRunning))return;q.nudge("todo.pending",`Colega ${J.name} possui ${X.length} afazer(es) em aberto.`,["Por favor, retome o trabalho nos seguintes afazeres pendentes ou marque-os como concluídos:",Tq.unorderedList(X,(Z)=>[Z.id,Z.text])])}}D$([Y$("agent_start"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],zw.prototype,"promptTodoCreation",null),D$([Y$("agent_end"),h("design:type",Function),h("design:paramtypes",[Object,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],zw.prototype,"notifyPendingTodos",null);class Ym extends Qm.Mixin(R6,zw){mountPipa(){e0.load(s.get(this.pipa.sessionId).workspaceDir,this.pipa.sessionId)}initialize($){$.registerTool({name:"todo",label:"Gerenciar Lista de Afazeres",description:p("Mantém a sua própria lista de afazeres (passos atômicos) durante a execução","Use para adicionar, atualizar, listar ou remover os passos do seu plano de execução","Não use para itens do projeto (use backlog) nem para trabalho delegado a colegas (use task)"),promptSnippet:"todo: passos atômicos do seu plano de execução. Para itens do projeto use backlog; para trabalho delegado use task.",promptGuidelines:['Use "todo" para o seu próprio plano de execução: passos atômicos que você está executando.','Não use "todo" para itens do projeto (use "backlog") nem para trabalho delegado a colegas (use "task").'],parameters:Kq.Union(Object.values(Vw),{type:"object",unevaluatedProperties:!1}),execute:async(q,J)=>{let X=new Kw(this.pipa),U=j9(X,Vw,J)[J.action]();if(U)this.pipa.nudge(`todo.${J.action}`,void 0,U);return{content:[{type:"text",text:Xm[J.action]}],details:U}}})}}D$([Y$("before_agent_start"),h("design:type",Function),h("design:paramtypes",[]),h("design:returntype",void 0)],Ym.prototype,"mountPipa",null);var Um=b$(f6(),1);class Bw{async validateTerminal({toolName:$,input:q},J){let{role:X}=s.get(J.sessionId),Z=q.action??q.command;if($==="bash"&&Z){let U=tM(Z);if(U)return{block:!0,reason:p(U)};if(FQ(Z))return{block:!0,reason:p(`O uso do comando "${Z}" é proibido para todos os colegas`,"pois pode causar perda de dados ou demorar muito tempo para ser executado.")}}if(X==="main"&&($==="edit"||$==="write")){if(UQ(J))return;if(!await J.context.ui.confirm("Operação de Escrita (Main)",`O supervisor deseja editar um arquivo via '${$}'. Permitir?`))return{block:!0,reason:p(`A execução de ${$} foi cancelada pelo usuário.`,"Lembre-se do seu papel de coordenador. Se a tarefa exige muitas modificações, delegue-a para um colega especializado.")}}}}D$([Y$("tool_call"),h("design:type",Function),h("design:paramtypes",[typeof ToolCallEvent==="undefined"?Object:ToolCallEvent,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",typeof Promise==="undefined"?Object:Promise)],Bw.prototype,"validateTerminal",null);class Fw{async validateTools({toolName:$,input:q},J){let X=s.get(J.sessionId);if(X.isStopping)return{block:!0,terminate:!0,reason:p("Você foi dispensado e não pode mais executar ferramentas.","Apenas pare e aguarde a finalização do processo em silêncio.")};let Z=q.action??q.command,U=oM[$]||[],{depth:W,role:H}=X;if(H==="main"&&U.includes("*"))return{block:!0,reason:p(`O uso de ${$} não é permitido para o supervisor.`,"Se você precisa executar essa operação, considere criar um colega para isso.")};if(H==="main"&&Z&&(U.includes(Z)||FQ(Z)))return{block:!0,reason:p(`O uso de ${$}(${Z}) não é permitido para o supervisor.`,"Se você precisa executar essa operação no terminal ou gerenciar tarefas, considere delegá-la a um colega.")};if($==="ask_user_question"&&H==="subagent")return{block:!0,reason:p("O colega atual não tem permissão para fazer perguntas ao usuário.","Se você precisa fazer perguntas ao usuário, considere instruir o supervisor a fazer isso por você","através da sua resposta final.")};if($==="teammates"&&W>1)return{block:!0,reason:p("O colega atual não tem permissão para criar outros colegas.","Se você precisa criar colegas, considere instruir o supervisor a fazer isso por você","através da sua resposta final.")};if($==="backlog"&&Z==="remove"){if(H!=="main")return{block:!0,reason:p("Apenas o supervisor (main) pode remover itens do backlog.","Se você precisa remover um item, peça ao supervisor para executar esta operação.")};if(!await J.context.ui.confirm("Remover Item do Backlog (Main)",`O supervisor deseja remover o item "${q.code}" do backlog. Permitir?`))return{block:!0,reason:p("A remoção do item do backlog foi cancelada pelo usuário.","O item permanece inalterado.")}}}}D$([Y$("tool_call"),h("design:type",Function),h("design:paramtypes",[typeof ToolCallEvent==="undefined"?Object:ToolCallEvent,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",typeof Promise==="undefined"?Object:Promise)],Fw.prototype,"validateTools",null);class Wm extends Um.Mixin(R6,Bw,Fw){}var Im=b$(x0(),1),_m=b$(f6(),1);var m5=["epic","story","task","bugfix"],wm=["triage","in_progress","done","blocked","cancelled"],Hm=["low","medium","high","critical"],Vm=["api","ui","integration"],Km=["updatedAt","order"],zm=["ASC","DESC"],Bm=["title","status","priority","tags","parentCode","domain"],f5={list:{code:"backlog.list",get failed(){return[this.code,"Falha ao listar backlog"]},get success(){return[this.code,"Backlog listado com sucesso"]}},create:{code:"backlog.create",get failed(){return[this.code,"Falha ao criar item no backlog"]},get success(){return[this.code,"Item criado no backlog"]}},"update-frontmatter":{code:"backlog.update-frontmatter",get failed(){return[this.code,"Falha ao atualizar frontmatter"]},get success(){return[this.code,"Frontmatter atualizado"]}},"update-body":{code:"backlog.update-body",get failed(){return[this.code,"Falha ao atualizar corpo markdown"]},get success(){return[this.code,"Corpo markdown atualizado"]}},"update-metadata":{code:"backlog.update-metadata",get failed(){return[this.code,"Falha ao atualizar metadata"]},get success(){return[this.code,"Metadata atualizado"]}},select:{code:"backlog.select",get failed(){return[this.code,"Falha na busca"]},get success(){return[this.code,"Busca concluída"]}}};var Gw={instantiate:A.Object({action:A.Literal("instantiate",{description:"instantiate: novo item no backlog"}),title:A.String({description:'Título descritivo da tarefa. Ex: "Criar schema de usuário".'}),type:jq(m5,{description:"Tipo do item: epic, story, task, bugfix"}),priority:jq(Hm,{description:"Prioridade do item: low, medium, high, critical"}),domain:A.Optional(A.Array(jq(Vm,{description:p("Domínios relacionados","Ex: api, ui, integration","Omita se não houver")}))),parentCode:A.Optional(A.String({description:p("Código do item pai (ex: a1b2c3d4)","Omita se for item raiz")})),tags:A.Optional(A.Array(A.String({description:p("Etiqueta livre",'Ex: ["backend", "urgente"]',"Omita se não houver")}))),metadata:A.Optional(A.Record(A.String(),A.Unknown(),{description:p("Campo livre para dados arbitrários (JSON)","Omita se não houver")})),body:A.String({description:p("Conteúdo markdown do item","Inclua contexto, critérios e restrições")})},{description:p("Cria um novo item no backlog do projeto","Use backlog.instantiate para registrar trabalho persistente (epic, story, task, bugfix)"),examples:[{action:"instantiate",title:"Criar schema de usuário",type:"task",priority:"high",domain:["api"],tags:["backend"],body:"Criar o schema de usuário com campos nome, email e role."}]}),list:A.Object({action:A.Literal("list",{description:"list: tarefas criadas"}),status:A.Optional(jq(wm,{description:p("Status do item","Omita para listar todos os status")})),type:A.Optional(jq(m5,{description:p("Tipo do item: epic, story, task, bugfix","Omita para listar todos os tipos")})),sort:A.Optional(A.Object({field:jq(Km,{description:"Campo para ordenar a listagem. Ex: updatedAt."}),order:jq(zm,{description:p("Ordem de ordenação: ASC ou DESC","Omita para ASC")})})),limit:A.Optional(A.Number({description:p("Limite de itens a serem retornados","Omita para retornar todos")}))}),"update-frontmatter":A.Object({action:A.Literal("update-frontmatter",{description:"update-frontmatter: atualiza metadados YAML de um item do backlog"}),code:A.String({description:"Código do item do backlog a ser atualizado. Ex: a1b2c3d4."}),field:jq(Bm,{description:"Campo do frontmatter a ser atualizado: title, status, priority, tags, parentCode ou domain."}),value:A.String({description:"Novo valor do campo do frontmatter."})}),"update-body":A.Object({action:A.Literal("update-body",{description:"update-body: manipula o corpo markdown de um item do backlog"}),code:A.String({description:"Código do item do backlog a ser atualizado. Ex: a1b2c3d4."}),mode:A.Union([A.Literal("append"),A.Literal("replace"),A.Literal("set")],{description:p("Modo de atualização do corpo markdown","append: adiciona ao final; replace: substitui trecho; set: substitui o corpo inteiro.")}),value:A.String({description:p("Texto a ser manipulado no corpo markdown","Em mode append/set é o novo conteúdo; em mode replace é o trecho a localizar")}),replacement:A.Optional(A.String({description:p("Texto a ser usado como substituição","Obrigatório apenas em mode replace; omita nos demais")}))}),"update-metadata":A.Object({action:A.Literal("update-metadata",{description:"update-metadata: faz merge de dados livres (metadata) em um item do backlog"}),code:A.String({description:"Código do item do backlog a ser atualizado. Ex: a1b2c3d4."}),metadata:A.Record(A.String(),A.Unknown(),{description:p("Dados a mesclar no metadata existente do item","Chaves existentes são sobrescritas; demais são preservadas")})}),select:A.Object({action:A.Literal("select",{description:"select: busca item do backlog por título, código ou tags"}),query:A.Optional(A.String({description:p("Consulta de busca","Omita para listar itens recentes")}))}),remove:A.Object({action:A.Literal("remove",{description:"remove: exclusão de item do backlog"}),code:A.String({description:"Código do item do backlog a ser removido. Ex: a1b2c3d4."})})},Fm={list:"Listando [count] item(s) do backlog...",instantiate:"Criando novo item no backlog [item.code]...","update-frontmatter":"Atualizando frontmatter do item [item.code]...","update-body":"Atualizando corpo markdown do item [item.code]...","update-metadata":"Atualizando metadata do item [item.code]...",select:"Buscando no backlog...",remove:"Removendo item do backlog [item.code]..."};var w3=b$(x0(),1);var xm=b$(f6(),1);class g4{constructor($){Object.assign(this,$)}code;title;type;status;body;createdAt;updatedAt;priority;domain;parentCode;order;tags;metadata}function bJ($){return!Array.isArray?Em($)==="[object Array]":Array.isArray($)}function iJ$($){if(typeof $=="string")return $;if(typeof $==="bigint")return $.toString();let q=$+"";return q=="0"&&1/$==-1/0?"-0":q}function Dw($){return $==null?"":iJ$($)}function n6($){return typeof $==="string"}function X3($){return typeof $==="number"}function oJ$($){return $===!0||$===!1||sJ$($)&&Em($)=="[object Boolean]"}function Rm($){return typeof $==="object"}function sJ$($){return Rm($)&&$!==null}function fq($){return $!==void 0&&$!==null}function J3($){return!$.trim().length}function Em($){return $==null?$===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call($)}var rJ$="Incorrect 'index' type",Pw="Invalid doc index: must be a non-negative integer within the bounds of the docs array",aJ$=($)=>`Invalid value for key ${$}`,tJ$=($)=>`Pattern length exceeds max of ${$}.`,eJ$=($)=>`Missing ${$} property in key`,$8$=($)=>`Property 'weight' in key '${$}' must be a positive integer`,q8$="Fuse.match does not support useTokenSearch: token search requires corpus-level statistics (df, fieldCount) that a one-off string comparison does not have. Use new Fuse(...).search(...) instead.",Gm=Object.prototype.hasOwnProperty,J8$=class{constructor($){this._keys=[],this._keyMap={};let q=0;$.forEach((J)=>{let X=Cm(J);this._keys.push(X),this._keyMap[X.id]=X,q+=X.weight}),this._keys.forEach((J)=>{J.weight/=q})}get($){return this._keyMap[$]}keys(){return this._keys}toJSON(){return JSON.stringify(this._keys)}};function Cm($){let q=null,J=null,X=null,Z=1,U=null;if(n6($)||bJ($))X=$,q=Nm($),J=Z3($);else{if(!Gm.call($,"name"))throw Error(eJ$("name"));let W=$.name;if(X=W,Gm.call($,"weight")&&$.weight!==void 0){if(Z=$.weight,Z<=0)throw Error($8$(Z3(W)))}q=Nm(W),J=Z3(W),U=$.getFn??null}return{path:q,id:J,weight:Z,src:X,getFn:U}}function Nm($){return bJ($)?$:$.split(".")}function Z3($){return bJ($)?$.join("."):$}function X8$($,q){let J=[],X=!1,Z=(U,W,H,K)=>{if(!fq(U))return;if(!W[H])J.push(K!==void 0?{v:U,i:K}:U);else{let F=U[W[H]];if(!fq(F))return;if(H===W.length-1&&(n6(F)||X3(F)||oJ$(F)||typeof F==="bigint"))J.push(K!==void 0?{v:Dw(F),i:K}:Dw(F));else if(bJ(F)){X=!0;for(let B=0,P=F.length;B<P;B+=1)Z(F[B],W,H+1,B)}else if(W.length)Z(F,W,H+1,K)}};return Z($,n6(q)?q.split("."):q,0),X?J:J[0]}var Z8$={includeMatches:!1,findAllMatches:!1,minMatchCharLength:1},Q8$={isCaseSensitive:!1,ignoreDiacritics:!1,includeScore:!1,keys:[],shouldSort:!0,sortFn:($,q)=>$.score===q.score?$.idx<q.idx?-1:1:$.score<q.score?-1:1},Y8$={location:0,threshold:0.6,distance:100},U8$={useExtendedSearch:!1,useTokenSearch:!1,tokenize:void 0,tokenMatch:"any",getFn:X8$,ignoreLocation:!1,ignoreFieldNorm:!1,fieldNormWeight:1},I$=Object.freeze({...Q8$,...Z8$,...Y8$,...U8$});function W8$($){return $>=9&&$<=13||$===32||$===160}function w8$($=1,q=3){let J=new Map,X=Math.pow(10,q);return{get(Z){let U=0,W=!1;for(let K=0;K<Z.length;K++)if(!W8$(Z.charCodeAt(K))){if(!W)U++,W=!0}else W=!1;if(U===0)U=1;if(J.has(U))return J.get(U);let H=Math.round(X/Math.pow(U,0.5*$))/X;return J.set(U,H),H},clear(){J.clear()}}}var Aw=class{constructor({getFn:$=I$.getFn,fieldNormWeight:q=I$.fieldNormWeight}={}){this.norm=w8$(q,3),this.getFn=$,this.isCreated=!1,this.docs=[],this.keys=[],this._keysMap={},this.setIndexRecords()}setSources($=[]){this.docs=$}setIndexRecords($=[]){this.records=$}setKeys($=[]){this.keys=$,this._keysMap={},$.forEach((q,J)=>{this._keysMap[q.id]=J})}create(){if(this.isCreated||!this.docs.length)return;this.isCreated=!0;let $=this.docs.length;this.records=Array($);let q=0;if(n6(this.docs[0]))for(let J=0;J<$;J++){let X=this._createStringRecord(this.docs[J],J);if(X)this.records[q++]=X}else for(let J=0;J<$;J++)this.records[q++]=this._createObjectRecord(this.docs[J],J);this.records.length=q,this.norm.clear()}add($,q){if(!Number.isInteger(q)||q<0)throw Error(Pw);if(n6($)){let X=this._createStringRecord($,q);if(X)this.records.push(X);return X}let J=this._createObjectRecord($,q);return this.records.push(J),J}removeAt($){if(!Number.isInteger($)||$<0)throw Error(Pw);for(let q=0,J=this.records.length;q<J;q+=1)if(this.records[q].i===$){this.records.splice(q,1);break}for(let q=0,J=this.records.length;q<J;q+=1)if(this.records[q].i>$)this.records[q].i-=1}removeAll($){let q=new Set;for(let X of $)if(Number.isInteger(X)&&X>=0)q.add(X);if(q.size===0)return;this.records=this.records.filter((X)=>!q.has(X.i));let J=Array.from(q).sort((X,Z)=>X-Z);for(let X of this.records){let Z=0,U=J.length;while(Z<U){let W=Z+U>>>1;if(J[W]<X.i)Z=W+1;else U=W}X.i-=Z}}getValueForItemAtKeyId($,q){return $[this._keysMap[q]]}size(){return this.records.length}_createStringRecord($,q){if(!fq($)||J3($))return null;return{v:$,i:q,n:this.norm.get($)}}_createObjectRecord($,q){let J={i:q,$:{}};for(let X=0,Z=this.keys.length;X<Z;X++){let U=this.keys[X],W=U.getFn?U.getFn($):this.getFn($,U.path);if(!fq(W))continue;if(bJ(W)){let H=[];for(let K=0,F=W.length;K<F;K+=1){let B=W[K];if(!fq(B))continue;if(n6(B)){if(!J3(B)){let P={v:B,i:K,n:this.norm.get(B)};H.push(P)}}else if(fq(B.v)){let P=n6(B.v)?B.v:Dw(B.v);if(!J3(P)){let M={v:P,i:B.i,n:this.norm.get(P)};H.push(M)}}}J.$[X]=H}else if(n6(W)&&!J3(W)){let H={v:W,n:this.norm.get(W)};J.$[X]=H}}return J}toJSON(){return{keys:this.keys.map(({getFn:$,...q})=>q),records:this.records}}};function Am($,q,{getFn:J=I$.getFn,fieldNormWeight:X=I$.fieldNormWeight}={}){let Z=new Aw({getFn:J,fieldNormWeight:X});return Z.setKeys($.map(Cm)),Z.setSources(q),Z.create(),Z}function H8$($,{getFn:q=I$.getFn,fieldNormWeight:J=I$.fieldNormWeight}={}){let{keys:X,records:Z}=$,U=new Aw({getFn:q,fieldNormWeight:J});return U.setKeys(X),U.setIndexRecords(Z),U}function V8$($=[],q=I$.minMatchCharLength){let J=[],X=-1,Z=-1,U=0;for(let W=$.length;U<W;U+=1){let H=$[U];if(H&&X===-1)X=U;else if(!H&&X!==-1){if(Z=U-1,Z-X+1>=q)J.push([X,Z]);X=-1}}if($[U-1]&&U-X>=q)J.push([X,U-1]);return J}function K8$($,q,J,{location:X=I$.location,distance:Z=I$.distance,threshold:U=I$.threshold,findAllMatches:W=I$.findAllMatches,minMatchCharLength:H=I$.minMatchCharLength,includeMatches:K=I$.includeMatches,ignoreLocation:F=I$.ignoreLocation}={}){if(q.length>32)throw Error(tJ$(32));let B=q.length,P=$.length,M=Math.max(0,Math.min(X,P)),R=U,S=M,f=(i,Q$)=>{let x=i/B;if(F)return x;let C$=Math.abs(M-Q$);if(!Z)return C$?1:x;return x+C$/Z},y=H>1||K,q$=y?Array(P):[],L$;while((L$=$.indexOf(q,S))>-1){let i=f(0,L$);if(R=Math.min(i,R),S=L$+B,y){let Q$=0;while(Q$<B)q$[L$+Q$]=1,Q$+=1}}S=-1;let G$=[],q0=1,W0=0,z$=B+P,_$=1<<B-1;for(let i=0;i<B;i+=1){let Q$=0,x=z$;while(Q$<x){if(f(i,M+x)<=R)Q$=x;else z$=x;x=Math.floor((z$-Q$)/2+Q$)}z$=x;let C$=Math.max(1,M-x+1),A$=W?P:Math.min(M+x,P)+B,a$=Array(A$+2);a$[A$+1]=(1<<i)-1;for(let _=A$;_>=C$;_-=1){let b=_-1,P$=J[$[b]];if(a$[_]=(a$[_+1]<<1|1)&P$,i)a$[_]|=(G$[_+1]|G$[_])<<1|1|G$[_+1];if(a$[_]&_$){if(q0=f(i,b),q0<=R){if(R=q0,S=b,W0=i,S<=M)break;C$=Math.max(1,2*M-S)}}}if(f(i+1,M)>R)break;G$=a$}if(y&&S>=0){let i=Math.min(P-1,S+B-1+W0);for(let Q$=S;Q$<=i;Q$+=1)if(J[$[Q$]])q$[Q$]=1}let t={isMatch:S>=0,score:Math.max(0.001,q0)};if(y){let i=V8$(q$,H);if(!i.length)t.isMatch=!1;else if(K)t.indices=i}return t}function z8$($){let q={};for(let J=0,X=$.length;J<X;J+=1){let Z=$.charAt(J);q[Z]=(q[Z]||0)|1<<X-J-1}return q}function Sw($){if($.length<=1)return $;$.sort((J,X)=>J[0]-X[0]||J[1]-X[1]);let q=[$[0]];for(let J=1,X=$.length;J<X;J+=1){let Z=q[q.length-1],U=$[J];if(U[0]<=Z[1]+1)Z[1]=Math.max(Z[1],U[1]);else q.push(U)}return q}var Sm={"ł":"l","Ł":"L","đ":"d","Đ":"D","ø":"o","Ø":"O","ħ":"h","Ħ":"H","ŧ":"t","Ŧ":"T","ı":"i","ß":"ss"},B8$=new RegExp("["+Object.keys(Sm).join("")+"]","g"),x5=typeof String.prototype.normalize==="function"?($)=>$.normalize("NFD").replace(/[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C04\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F]/g,"").replace(B8$,(q)=>Sm[q]):($)=>$,Tw=class{constructor($,{location:q=I$.location,threshold:J=I$.threshold,distance:X=I$.distance,includeMatches:Z=I$.includeMatches,findAllMatches:U=I$.findAllMatches,minMatchCharLength:W=I$.minMatchCharLength,isCaseSensitive:H=I$.isCaseSensitive,ignoreDiacritics:K=I$.ignoreDiacritics,ignoreLocation:F=I$.ignoreLocation}={}){if(this.options={location:q,threshold:J,distance:X,includeMatches:Z,findAllMatches:U,minMatchCharLength:W,isCaseSensitive:H,ignoreDiacritics:K,ignoreLocation:F},$=H?$:$.toLowerCase(),$=K?x5($):$,this.pattern=$,this.chunks=[],!this.pattern.length)return;let B=(M,R)=>{this.chunks.push({pattern:M,alphabet:z8$(M),startIndex:R})},P=this.pattern.length;if(P>32){let M=0,R=P%32,S=P-R;while(M<S)B(this.pattern.substr(M,32),M),M+=32;if(R){let f=P-32;B(this.pattern.substr(f),f)}}else B(this.pattern,0)}searchIn($){let{isCaseSensitive:q,ignoreDiacritics:J,includeMatches:X}=this.options;if($=q?$:$.toLowerCase(),$=J?x5($):$,this.pattern===$){if($.length<this.options.minMatchCharLength)return{isMatch:!1,score:1};let S={isMatch:!0,score:0};if(X)S.indices=[[0,$.length-1]];return S}let{location:Z,distance:U,threshold:W,findAllMatches:H,minMatchCharLength:K,ignoreLocation:F}=this.options,B=[],P=0,M=!1;this.chunks.forEach(({pattern:S,alphabet:f,startIndex:y})=>{let{isMatch:q$,score:L$,indices:G$}=K8$($,S,f,{location:Z+y,distance:U,threshold:W,findAllMatches:H,minMatchCharLength:K,includeMatches:X,ignoreLocation:F});if(q$)M=!0;if(P+=L$,q$&&G$)B.push(...G$)});let R={isMatch:M,score:M?P/this.chunks.length:1};if(M&&X)R.indices=Sw(B);return R}},F8$=new Set(["fuzzy","include"]);function G8$($){return $.startsWith("inverse")}var Ow=[{type:"exact",multiRegex:/^="(.*)"$/,singleRegex:/^=(.*)$/,create:($)=>({type:"exact",search(q){let J=q===$;return{isMatch:J,score:J?0:1,indices:[0,$.length-1]}}})},{type:"include",multiRegex:/^'"(.*)"$/,singleRegex:/^'(.*)$/,create:($)=>({type:"include",search(q){let J=0,X,Z=[],U=$.length;while((X=q.indexOf($,J))>-1)J=X+U,Z.push([X,J-1]);let W=!!Z.length;return{isMatch:W,score:W?0:1,indices:Z}}})},{type:"prefix-exact",multiRegex:/^\^"(.*)"$/,singleRegex:/^\^(.*)$/,create:($)=>({type:"prefix-exact",search(q){let J=q.startsWith($);return{isMatch:J,score:J?0:1,indices:[0,$.length-1]}}})},{type:"inverse-prefix-exact",multiRegex:/^!\^"(.*)"$/,singleRegex:/^!\^(.*)$/,create:($)=>({type:"inverse-prefix-exact",search(q){let J=!q.startsWith($);return{isMatch:J,score:J?0:1,indices:[0,q.length-1]}}})},{type:"inverse-suffix-exact",multiRegex:/^!"(.*)"\$$/,singleRegex:/^!(.*)\$$/,create:($)=>({type:"inverse-suffix-exact",search(q){let J=!q.endsWith($);return{isMatch:J,score:J?0:1,indices:[0,q.length-1]}}})},{type:"suffix-exact",multiRegex:/^"(.*)"\$$/,singleRegex:/^(.*)\$$/,create:($)=>({type:"suffix-exact",search(q){let J=q.endsWith($);return{isMatch:J,score:J?0:1,indices:[q.length-$.length,q.length-1]}}})},{type:"inverse-exact",multiRegex:/^!"(.*)"$/,singleRegex:/^!(.*)$/,create:($)=>({type:"inverse-exact",search(q){let J=q.indexOf($)===-1;return{isMatch:J,score:J?0:1,indices:[0,q.length-1]}}})},{type:"fuzzy",multiRegex:/^"(.*)"$/,singleRegex:/^(.*)$/,create:($,q={})=>{let J=new Tw($,{location:q.location??I$.location,threshold:q.threshold??I$.threshold,distance:q.distance??I$.distance,includeMatches:q.includeMatches??I$.includeMatches,findAllMatches:q.findAllMatches??I$.findAllMatches,minMatchCharLength:q.minMatchCharLength??I$.minMatchCharLength,isCaseSensitive:q.isCaseSensitive??I$.isCaseSensitive,ignoreDiacritics:q.ignoreDiacritics??I$.ignoreDiacritics,ignoreLocation:q.ignoreLocation??I$.ignoreLocation});return{type:"fuzzy",search(X){return J.searchIn(X)}}}}],Dm=Ow.length,N8$="\x00",D8$="|";function P8$($){let q=[],J=$.length,X=0;while(X<J){while(X<J&&$[X]===" ")X++;if(X>=J)break;let Z=X;while(Z<J&&$[Z]!==" "&&$[Z]!=='"')Z++;if(Z<J&&$[Z]==='"'){Z++;while(Z<J){if($[Z]==='"'){let U=Z+1;if(U>=J||$[U]===" "){Z++;break}if($[U]==="$"&&(U+1>=J||$[U+1]===" ")){Z+=2;break}}Z++}q.push($.substring(X,Z)),X=Z}else{while(Z<J&&$[Z]!==" ")Z++;q.push($.substring(X,Z)),X=Z}}return q}function Pm($,q){let J=$.match(q);return J?J[1]:null}function O8$($,q={}){return $.replace(/\\\|/g,N8$).split(D8$).map((J)=>{let X=P8$(J.replace(/\u0000/g,"|").trim()).filter((U)=>U&&!!U.trim()),Z=[];for(let U=0,W=X.length;U<W;U+=1){let H=X[U],K=!1,F=-1;while(!K&&++F<Dm){let B=Ow[F],P=Pm(H,B.multiRegex);if(P)Z.push(B.create(P,q)),K=!0}if(K)continue;F=-1;while(++F<Dm){let B=Ow[F],P=Pm(H,B.singleRegex);if(P){Z.push(B.create(P,q));break}}}return Z})}var M8$=class{constructor($,{isCaseSensitive:q=I$.isCaseSensitive,ignoreDiacritics:J=I$.ignoreDiacritics,includeMatches:X=I$.includeMatches,minMatchCharLength:Z=I$.minMatchCharLength,ignoreLocation:U=I$.ignoreLocation,findAllMatches:W=I$.findAllMatches,location:H=I$.location,threshold:K=I$.threshold,distance:F=I$.distance}={}){this.query=null,this.options={isCaseSensitive:q,ignoreDiacritics:J,includeMatches:X,minMatchCharLength:Z,findAllMatches:W,ignoreLocation:U,location:H,threshold:K,distance:F},$=q?$:$.toLowerCase(),$=J?x5($):$,this.pattern=$,this.query=O8$(this.pattern,this.options)}static condition($,q){return q.useExtendedSearch}searchIn($){let q=this.query;if(!q)return{isMatch:!1,score:1};let{includeMatches:J,isCaseSensitive:X,ignoreDiacritics:Z}=this.options;$=X?$:$.toLowerCase(),$=Z?x5($):$;let U=0,W=[],H=0,K=!1;for(let F=0,B=q.length;F<B;F+=1){let P=q[F];W.length=0,U=0,K=!1;for(let M=0,R=P.length;M<R;M+=1){let S=P[M],{isMatch:f,indices:y,score:q$}=S.search($);if(f){if(U+=1,H+=q$,G8$(S.type))K=!0;if(J)if(F8$.has(S.type))W.push(...y);else W.push(y)}else{H=0,U=0,W.length=0,K=!1;break}}if(U){let M={isMatch:!0,score:H/U};if(K)M.hasInverse=!0;if(J)M.indices=Sw(W);return M}}return{isMatch:!1,score:1}}},Mw=[];function jw(...$){Mw.push(...$)}function Q3($,q){for(let J=0,X=Mw.length;J<X;J+=1){let Z=Mw[J];if(Z.condition($,q))return new Z($,q)}return new Tw($,q)}var Y3={AND:"$and",OR:"$or"},Lw={PATH:"$path",PATTERN:"$val"},Rw=($)=>!!($[Y3.AND]||$[Y3.OR]),L8$=($)=>!!$[Lw.PATH],R8$=($)=>!bJ($)&&Rm($)&&!Rw($),Om=($)=>({[Y3.AND]:Object.keys($).map((q)=>({[q]:$[q]}))});function Tm($,q,{auto:J=!0}={}){let X=(Z)=>{if(n6(Z)){let K={keyId:null,pattern:Z};if(J)K.searcher=Q3(Z,q);return K}let U=Object.keys(Z),W=L8$(Z);if(!W&&U.length>1&&!Rw(Z))return X(Om(Z));if(R8$(Z)){let K=W?Z[Lw.PATH]:U[0],F=W?Z[Lw.PATTERN]:Z[K];if(!n6(F))throw Error(aJ$(K));let B={keyId:Z3(K),pattern:F};if(J)B.searcher=Q3(F,q);return B}let H={children:[],operator:U[0]};return U.forEach((K)=>{let F=Z[K];if(bJ(F))F.forEach((B)=>{H.children.push(X(B))})}),H};if(!Rw($))$=Om($);return X($)}function Ew($,{ignoreFieldNorm:q=I$.ignoreFieldNorm}){let J=1;return $.forEach(({key:X,norm:Z,score:U})=>{let W=X?X.weight:null;J*=Math.pow(U===0&&W?Number.EPSILON:U,(W||1)*(q?1:Z))}),J}function E8$($,{ignoreFieldNorm:q=I$.ignoreFieldNorm}){$.forEach((J)=>{J.score=Ew(J.matches,{ignoreFieldNorm:q})})}var C8$=class{constructor($,q){this.limit=$,this.heap=[],this.comparator=q}get size(){return this.heap.length}insert($){if(this.size<this.limit)this.heap.push($),this._bubbleUp(this.size-1);else if(this.comparator($,this.heap[0])<0)this.heap[0]=$,this._sinkDown(0)}extractSorted(){return this.heap.sort(this.comparator)}_bubbleUp($){let q=this.heap;while($>0){let J=$-1>>1;if(this.comparator(q[$],q[J])<=0)break;let X=q[$];q[$]=q[J],q[J]=X,$=J}}_sinkDown($){let q=this.heap,J=q.length,X=$;do{$=X;let Z=2*$+1,U=2*$+2;if(Z<J&&this.comparator(q[Z],q[X])>0)X=Z;if(U<J&&this.comparator(q[U],q[X])>0)X=U;if(X!==$){let W=q[$];q[$]=q[X],q[X]=W}}while(X!==$)}};function A8$($){let q=[];return $.matches.forEach((J)=>{if(!fq(J.indices)||!J.indices.length)return;let X={indices:J.indices,value:J.value};if(J.key)X.key=J.key.id;if(J.idx>-1)X.refIndex=J.idx;q.push(X)}),q}function S8$($,q,{includeMatches:J=I$.includeMatches,includeScore:X=I$.includeScore}={}){return $.map((Z)=>{let{idx:U}=Z,W={item:q[U],refIndex:U};if(J)W.matches=A8$(Z);if(X)W.score=Z.score;return W})}var T8$=/[\p{L}\p{M}\p{N}_]+/gu,Mm=new WeakSet;function j8$($){if(!Mm.has($))Mm.add($),console.warn(`[Fuse] tokenize regex ${$} lacks the global flag; only the first match per text will be returned. Add the 'g' flag.`)}function m8$($){if(typeof $==="function"){let q=!1;return(J)=>{let X=$(J);if(!q){if(q=!0,!Array.isArray(X)||X.some((Z)=>typeof Z!=="string"))throw Error(`[Fuse] tokenize function must return string[]; received ${Array.isArray(X)?"array containing non-strings":typeof X}.`)}return X}}if($ instanceof RegExp){if(!$.global)j8$($);return(q)=>q.match($)||[]}return(q)=>q.match(T8$)||[]}function Cw({isCaseSensitive:$=!1,ignoreDiacritics:q=!1,tokenize:J}={}){let X=m8$(J);return{tokenize(Z){if(!$)Z=Z.toLowerCase();if(q)Z=x5(Z);return X(Z)}}}var f8$=class{static condition($,q){return q.useTokenSearch}constructor($,q){this.options=q,this.analyzer=Cw({isCaseSensitive:q.isCaseSensitive,ignoreDiacritics:q.ignoreDiacritics,tokenize:q.tokenize});let J=this.analyzer.tokenize($),{df:X,fieldCount:Z}=q._invertedIndex;this.termSearchers=[],this.idfWeights=[];for(let U of J){this.termSearchers.push(new Tw(U,{location:q.location,threshold:q.threshold,distance:q.distance,includeMatches:q.includeMatches,findAllMatches:q.findAllMatches,minMatchCharLength:q.minMatchCharLength,isCaseSensitive:q.isCaseSensitive,ignoreDiacritics:q.ignoreDiacritics,ignoreLocation:!0}));let W=X.get(U)||0,H=Math.log(1+(Z-W+0.5)/(W+0.5));this.idfWeights.push(H)}this.combineAll=q.tokenMatch==="all",this.numTerms=this.termSearchers.length,this.useMask=this.numTerms<=31}searchIn($){if(!this.termSearchers.length)return{isMatch:!1,score:1};let q=[],J=0,X=0,Z=0,U=0,W=this.combineAll&&!this.useMask?new Set:null;for(let F=0;F<this.termSearchers.length;F++){let B=this.termSearchers[F].searchIn($),P=this.idfWeights[F];if(X+=P,B.isMatch){if(Z++,J+=P*(1-B.score),B.indices)q.push(...B.indices);if(this.combineAll)if(this.useMask)U|=1<<F;else W.add(F)}}if(Z===0)return{isMatch:!1,score:1};let H=X>0?1-J/X:0,K={isMatch:!0,score:Math.max(0.001,H)};if(this.options.includeMatches&&q.length)K.indices=Sw(q);if(this.combineAll){if(this.useMask)K.matchedMask=U;else K.matchedTerms=W;K.termCount=this.numTerms}return K}};function Nw($,q,J,X){let Z=X.tokenize(q);if(!Z.length)return;$.fieldCount++,$.docFieldCount.set(J,($.docFieldCount.get(J)||0)+1);let U=new Set(Z),W=$.docTermFieldHits.get(J);if(!W)W=new Map,$.docTermFieldHits.set(J,W);for(let H of U)W.set(H,(W.get(H)||0)+1),$.df.set(H,($.df.get(H)||0)+1)}function jm($,q,J,X){let{i:Z,v:U,$:W}=q;if(U!==void 0){Nw($,U,Z,X);return}if(!W)return;for(let H=0;H<J;H++){let K=W[H];if(!K)continue;if(Array.isArray(K))for(let F of K)Nw($,F.v,Z,X);else Nw($,K.v,Z,X)}}function x8$($,q,J){let X={fieldCount:0,df:new Map,docFieldCount:new Map,docTermFieldHits:new Map};for(let Z of $)jm(X,Z,q,J);return X}function I8$($,q,J,X){jm($,q,J,X)}function _8$($,q){let J=$.docFieldCount.get(q);if(J===void 0)return;$.fieldCount-=J,$.docFieldCount.delete(q);let X=$.docTermFieldHits.get(q);if(!X)return;for(let[Z,U]of X){let W=($.df.get(Z)||0)-U;if(W<=0)$.df.delete(Z);else $.df.set(Z,W)}$.docTermFieldHits.delete(q)}function Lm($,q){if(q.length===0)return;let J=Array.from(new Set(q)).sort((H,K)=>H-K);for(let H of J)_8$($,H);let X=(H)=>{let K=0,F=J.length;while(K<F){let B=K+F>>>1;if(J[B]<H)K=B+1;else F=B}return H-K},Z=J[0],U=new Map;for(let[H,K]of $.docFieldCount)U.set(H>Z?X(H):H,K);$.docFieldCount=U;let W=new Map;for(let[H,K]of $.docTermFieldHits)W.set(H>Z?X(H):H,K);$.docTermFieldHits=W}var vJ=class{constructor($,q,J){this.options={...I$,...q},this.options.useExtendedSearch,this.options.useTokenSearch,this._keyStore=new J8$(this.options.keys),this._docs=$,this._myIndex=null,this._invertedIndex=null,this.setCollection($,J),this._lastQuery=null,this._lastSearcher=null}_getSearcher($){if(this._lastQuery===$)return this._lastSearcher;let q=Q3($,this._invertedIndex?{...this.options,_invertedIndex:this._invertedIndex}:this.options);return this._lastQuery=$,this._lastSearcher=q,q}setCollection($,q){if(this._docs=$,q&&!(q instanceof Aw))throw Error(rJ$);if(this._myIndex=q||Am(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight}),this.options.useTokenSearch){let J=Cw({isCaseSensitive:this.options.isCaseSensitive,ignoreDiacritics:this.options.ignoreDiacritics,tokenize:this.options.tokenize});this._invertedIndex=x8$(this._myIndex.records,this._myIndex.keys.length,J)}this._invalidateSearcherCache()}add($){if(!fq($))return;this._docs.push($);let q=this._myIndex.add($,this._docs.length-1);if(this._invertedIndex&&q){let J=Cw({isCaseSensitive:this.options.isCaseSensitive,ignoreDiacritics:this.options.ignoreDiacritics,tokenize:this.options.tokenize});I8$(this._invertedIndex,q,this._myIndex.keys.length,J)}this._invalidateSearcherCache()}remove($=()=>!1){let q=[],J=[];for(let X=0,Z=this._docs.length;X<Z;X+=1)if($(this._docs[X],X))q.push(this._docs[X]),J.push(X);if(J.length){if(this._invertedIndex)Lm(this._invertedIndex,J);let X=new Set(J);this._docs=this._docs.filter((Z,U)=>!X.has(U)),this._myIndex.removeAll(J),this._invalidateSearcherCache()}return q}removeAt($){if(!Number.isInteger($)||$<0||$>=this._docs.length)throw Error(Pw);if(this._invertedIndex)Lm(this._invertedIndex,[$]);let q=this._docs.splice($,1)[0];return this._myIndex.removeAt($),this._invalidateSearcherCache(),q}_invalidateSearcherCache(){this._lastQuery=null,this._lastSearcher=null}getIndex(){return this._myIndex}_normalizedKeys(){return this._myIndex.keys.map(($)=>this._keyStore.get($.id)||$)}search($,q){let{limit:J=-1}=q||{},{includeMatches:X,includeScore:Z,shouldSort:U,sortFn:W,ignoreFieldNorm:H}=this.options;if(n6($)&&!$.trim()){let M=this._docs.map((R,S)=>({item:R,refIndex:S}));if(X3(J)&&J>-1)M=M.slice(0,J);return M}let K=U&&X3(J)&&J>0&&n6($),F=W,B=(M,R)=>F(M,R)||M.idx-R.idx,P;if(K){let M=new C8$(J,B);if(n6(this._docs[0]))this._searchStringList($,{heap:M,ignoreFieldNorm:H});else this._searchObjectList($,{heap:M,ignoreFieldNorm:H});P=M.extractSorted()}else{if(P=n6($)?n6(this._docs[0])?this._searchStringList($):this._searchObjectList($):this._searchLogical($),E8$(P,{ignoreFieldNorm:H}),U)P.sort(n6($)?B:F);if(X3(J)&&J>-1)P=P.slice(0,J)}return S8$(P,this._docs,{includeMatches:X,includeScore:Z})}_searchStringList($,{heap:q,ignoreFieldNorm:J}={}){let X=this._getSearcher($),Z=this.options.useTokenSearch&&this.options.tokenMatch==="all",{records:U}=this._myIndex,W=q?null:[];return U.forEach(({v:H,i:K,n:F})=>{if(!fq(H))return;let B=X.searchIn(H);if(B.isMatch){let P={score:B.score,value:H,norm:F,indices:B.indices};if(Z)P.matchedMask=B.matchedMask,P.matchedTerms=B.matchedTerms,P.termCount=B.termCount;let M=[P];if(!Z||this._coversAllTokens(M)){let R={item:H,idx:K,matches:M};if(q)R.score=Ew(R.matches,{ignoreFieldNorm:J}),q.insert(R);else W.push(R)}}}),W}_searchLogical($){let q=Tm($,this.options),J=this._normalizedKeys(),X=(H,K,F)=>{if(!("children"in H)){let{keyId:R,searcher:S}=H,f;if(R===null)f=[],J.forEach((y,q$)=>{f.push(...this._findMatches({key:y,value:K[q$],searcher:S}))});else f=this._findMatches({key:this._keyStore.get(R),value:this._myIndex.getValueForItemAtKeyId(K,R),searcher:S});if(f&&f.length)return[{idx:F,item:K,matches:f}];return[]}let{children:B,operator:P}=H,M=[];for(let R=0,S=B.length;R<S;R+=1){let f=B[R],y=X(f,K,F);if(y.length)M.push(...y);else if(P===Y3.AND)return[]}return M},Z=this._myIndex.records,U=new Map,W=[];return Z.forEach(({$:H,i:K})=>{if(fq(H)){let F=X(q,H,K);if(F.length){if(!U.has(K))U.set(K,{idx:K,item:H,matches:[]}),W.push(U.get(K));F.forEach(({matches:B})=>{U.get(K).matches.push(...B)})}}}),W}_searchObjectList($,{heap:q,ignoreFieldNorm:J}={}){let X=this._getSearcher($),Z=this.options.useTokenSearch&&this.options.tokenMatch==="all",{records:U}=this._myIndex,W=this._normalizedKeys(),H=q?null:[];return U.forEach(({$:K,i:F})=>{if(!fq(K))return;let B=[],P=!1,M=!1;if(W.forEach((R,S)=>{let f=this._findMatches({key:R,value:K[S],searcher:X});if(f.length){if(B.push(...f),f[0].hasInverse)M=!0}else P=!0}),M&&P)return;if(B.length&&(!Z||this._coversAllTokens(B))){let R={idx:F,item:K,matches:B};if(q)R.score=Ew(R.matches,{ignoreFieldNorm:J}),q.insert(R);else H.push(R)}}),H}_findMatches({key:$,value:q,searcher:J}){if(!fq(q))return[];let X=[];if(bJ(q))q.forEach(({v:Z,i:U,n:W})=>{if(!fq(Z))return;let H=J.searchIn(Z);if(H.isMatch){let K={score:H.score,key:$,value:Z,idx:U,norm:W,indices:H.indices,hasInverse:H.hasInverse};if(H.termCount!==void 0)K.matchedMask=H.matchedMask,K.matchedTerms=H.matchedTerms,K.termCount=H.termCount;X.push(K)}});else{let{v:Z,n:U}=q,W=J.searchIn(Z);if(W.isMatch){let H={score:W.score,key:$,value:Z,norm:U,indices:W.indices,hasInverse:W.hasInverse};if(W.termCount!==void 0)H.matchedMask=W.matchedMask,H.matchedTerms=W.matchedTerms,H.termCount=W.termCount;X.push(H)}}return X}_coversAllTokens($){let q=$.length?$[0].termCount:void 0;if(q===void 0)return!0;if(q<=31){let X=0;for(let Z=0;Z<$.length;Z++)X|=$[Z].matchedMask||0;return X===2**q-1}let J=new Set;for(let X=0;X<$.length;X++){let Z=$[X].matchedTerms;if(Z)for(let U of Z)J.add(U)}return J.size===q}};vJ.version="7.5.0";vJ.createIndex=Am;vJ.parseIndex=H8$;vJ.config=I$;vJ.match=function($,q,J){if(J&&J.useTokenSearch)throw Error(q8$);return Q3($,{...I$,...J}).searchIn(q)};vJ.parseQuery=Tm;jw(M8$);jw(f8$);vJ.use=function(...$){$.forEach((q)=>jw(q))};var U3=vJ;var mm=b$(x0(),1),fm=b$(f6(),1);var W3=b$(x0(),1);class U0{pipa;constructor($){this.pipa=$}static get fileManager(){return new t0(cX)}static get store(){let $=E0.get(NQ);if(!$)$=E0.set(NQ,new Map);return $}static load(){let $=new t0(cX);U0.clear(),($.read(dX)??[]).forEach((q)=>U0.add(new g4(q)))}static persist(){U0.fileManager.save(dX,U0.all(),($)=>$)}static listBy($){let q={};if($?.status)q.status=$.status;if($?.type)q.type=$.type;let J=W3.filter([...U0.store.values()],q);if($?.sort){if(J=W3.sortBy(J,$.sort.field),$.sort.order==="DESC")J=J.reverse()}if($?.limit)J=J.slice(0,$.limit);return J}static all(){return[...U0.store.values()]}static get($){return U0.store.get($)}static clear(){U0.store.clear()}static add($){U0.store.set($.code,$),U0.persist()}static update($,q){let J=U0.store.get($);if(!J)return q;return E0.set(NQ,U0.store.set($,Object.assign(new g4({}),J,q))),U0.persist(),U0.get($)}static delete($){return U0.store.delete($),U0.persist(),!0}}class I5{canUpdate($,q="update-frontmatter"){let J=U0.get($);if(!J)throw new O$(...f5[q].failed,`Item com código "${$}" não encontrado no backlog.`);return J}canRemove($){let q=U0.get($);if(!q)throw new O$("backlog.remove",`Item com código "${$}" não encontrado no backlog.`);return q}canSelect($){let q=U0.get($);if(!q)throw new O$(...f5.select.failed,`Item com código "${$}" não encontrado no backlog.`);return q}canCreate({type:$,title:q}){if(!$||!m5.includes($))throw new O$(...f5.create.failed,`Tipo inválido: "${$}". Esperado: epic, story, task, bugfix.`);if(!q?.trim()||q.trim().length<3)throw new O$(...f5.create.failed,"Título deve ter pelo menos 3 caracteres.")}}class mw extends fm.Mixin(I5,U0){pipa;constructor($){super();this.pipa=$}get($){return U0.get($)}list($){return U0.listBy($)}updateFrontmatter({code:$,field:q,value:J}){let X=this.canUpdate($),Z=X.parentCode;if(X[q]=J,X.updatedAt=new Date().toISOString(),U0.update(X.code,X),q==="status"||q==="parentCode")this.recalculateAncestors($);if(q==="parentCode"&&Z&&Z!==X.parentCode)this.recalculateAncestors(Z);return this.pipa.events.emit("backlog_updated",X),X}deriveStatus($,q){if($.length===0)return q;let J=$[0].status;if($.every((Z)=>Z.status===J))return J;return"in_progress"}deriveNodeStatus($){let q=U0.all().filter((X)=>X.parentCode===$.code),J=this.deriveStatus(q,$.status);if(J!==$.status)$.status=J,$.updatedAt=new Date().toISOString(),U0.update($.code,$),this.pipa.events.emit("backlog_updated",$)}recalculateAncestors($){let q=new Set,J=this.get($);while(J?.parentCode&&!q.has(J.parentCode)){q.add(J.parentCode);let X=this.get(J.parentCode);if(!X)break;this.deriveNodeStatus(X),J=X}}normalizeBody($){return $.replaceAll(String.raw`\n`,`
|
|
142
|
+
`)}updateBody({code:$,mode:q,value:J,replacement:X=""}){let Z=this.canUpdate($);return Z.body=XQ(Z.body,{mode:q,value:J,replacement:X}),Z.updatedAt=new Date().toISOString(),U0.update(Z.code,Z),this.pipa.events.emit("backlog_updated",Z),Z}updateMetadata({code:$,metadata:q}){let J=this.canUpdate($,"update-metadata");return J.metadata=mm.merge({},J.metadata,q),J.updatedAt=new Date().toISOString(),U0.update(J.code,J),this.pipa.events.emit("backlog_updated",J),J}select({query:$}){let q=U0.listBy();return new U3(q,{keys:["title","code","tags"],threshold:0.4}).search($).map((X)=>X.item)}remove({code:$}){let q=this.canRemove($),J=q.parentCode;if(U0.delete($),J){let X=this.get(J);if(X)this.deriveNodeStatus(X),this.recalculateAncestors(J)}return this.pipa.events.emit("backlog_removed",q),q}}class fw extends xm.Mixin(I5,mw){pipa;constructor($){super($);this.pipa=$}instantiate($){this.canCreate($);let q=new Date().toISOString(),J=new g4({...w3.omit($,["action"]),code:m9(8),status:"triage",createdAt:q,updatedAt:q});if(U0.add(J),J.parentCode)this.recalculateAncestors(J.code);return this.pipa.events.emit("backlog_created",J),this.pipa.nudge("backlog.create",`Item criado: ${J.code}`),w3.merge({},$,J)}}var k8$=new Set(["write","edit","read","find"]);class xw{blockedToolCallIds=new Set;guardBacklogWrite($,q){let{toolName:J,toolCallId:X}=$;if(!J||!k8$.has(J))return;if(!pM($))return;let Z=$.input.path??"";if(!Z.includes(dX)||!Z.includes(cX))return;return this.blockedToolCallIds.add(X),{block:!0,reason:p(`O uso de "${J}" em arquivos do backlog não é permitido.`,'Utilize a tool backlog com action "update-body" ou "update-frontmatter" para manipular tarefas.',`Path bloqueado: ${Z}`)}}collapseBlockedLoop($,q){if(!this.blockedToolCallIds.size)return;let J=this.blockedToolCallIds,X=$.messages.filter((W)=>{if(mJ(W))return!KQ(W.content,J);if(VQ(W))return!zQ(W,J);return!0}),Z=$.messages.length-X.length;if(this.blockedToolCallIds.clear(),!Z)return;let U={role:"user",content:[{type:"text",text:p(`${Z} tentativa(s) de write/edit/read em backlog.json foram removidas do contexto.`,"Arquivos do backlog devem ser manipulados exclusivamente via a tool backlog.",'Use backlog com action "update-body" ou "update-frontmatter".')}],timestamp:Date.now()};return $.messages=[...X,U],$}}D$([Y$("tool_call"),h("design:type",Function),h("design:paramtypes",[typeof ToolCallEvent==="undefined"?Object:ToolCallEvent,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",Object)],xw.prototype,"guardBacklogWrite",null),D$([Y$("context"),h("design:type",Function),h("design:paramtypes",[typeof ContextEvent==="undefined"?Object:ContextEvent,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",Object)],xw.prototype,"collapseBlockedLoop",null);class km extends _m.Mixin(R6,xw){loadBacklog(){U0.load()}initialize($){$.registerTool({name:"backlog",label:"Gerenciar Backlog",description:p("Gerencia o backlog local do projeto: itens de trabalho persistentes (epics, stories, tasks, bugfixes) em backlog.json","Use para criar, listar, atualizar ou remover itens de trabalho do projeto","Não use para tarefas operacionais de execução (use task) nem para seus próprios passos (use todo)"),promptSnippet:"backlog: itens de trabalho persistentes do projeto (epics, stories, tasks, bugfixes). Para tarefas operacionais use task; para seus passos use todo.",promptGuidelines:['Use "backlog" para o backlog persistente do projeto: epics, stories, tasks e bugfixes em backlog.json.','Não use "backlog" para trabalho delegado a colegas (use "task") nem para a sua lista de passos (use "todo").'],parameters:Kq.Union(Object.values(Gw),{type:"object",unevaluatedProperties:!1}),execute:async(q,J)=>{let X=new fw(this.pipa),U=j9(X,Gw,J)[J.action]();if(U)this.pipa.nudge(`backlog.${J.action}`,void 0,U);return{content:[{type:"text",text:Q9(Fm[J.action],{...J,item:U,count:Im.size(U)})}],details:U}}})}}D$([Y$("session_start"),h("design:type",Function),h("design:paramtypes",[]),h("design:returntype",void 0)],km.prototype,"loadBacklog",null);var b8$="https://router.espresso.ia.br",bm=process.env.ESPRESSO_AUTH_TOKEN||process.env.ANTHROPIC_AUTH_TOKEN,Iw={input:0,output:0,cacheRead:0,cacheWrite:0};class vm extends R6{initialize($){$.registerProvider("espresso",{baseUrl:b8$,...bm?{apiKey:bm}:{},headers:{"User-Agent":"pi-espresso/1.0"},api:"openai-responses",models:[{id:"claude-haiku",name:"Espresso Light",reasoning:!0,input:["text","image"],cost:Iw,contextWindow:200000,maxTokens:16384},{id:"claude-sonnet",name:"Espresso Medium",reasoning:!0,input:["text","image"],cost:Iw,contextWindow:200000,maxTokens:16384},{id:"claude-opus",name:"Espresso Heavy",reasoning:!0,input:["text","image"],cost:Iw,contextWindow:200000,maxTokens:16384}]})}addToolsDefinition($,q){if(q.context.model?.provider!=="espresso")return;if(!s.find(q.sessionId))return;let Z=q.getAllTools().filter((W)=>["teammates","task","backlog","docs","todo","project-search"].includes(W.name)),U=`${$.systemPrompt}
|
|
143
143
|
|
|
144
144
|
Custom Tools
|
|
145
|
-
|
|
145
|
+
`;return Z.forEach((W)=>{U+=`${JSON.stringify(W.parameters)}`}),{systemPrompt:U}}}D$([Y$("before_agent_start"),h("design:type",Function),h("design:paramtypes",[typeof BeforeAgentStartEvent==="undefined"?Object:BeforeAgentStartEvent,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",void 0)],vm.prototype,"addToolsDefinition",null);import v8$ from"node:fs";import g8$ from"node:path";function gm(){return v8$.readFileSync(g8$.join(EM(),"onboarding.md"),"utf-8")}class hm extends R6{enforceOnboarding($,q){if(s.find(q.sessionId)?.role!=="main")return $;if(jM(q),UQ(q))$.prompt+=`
|
|
146
146
|
|
|
147
147
|
`+gm();return $}}D$([Y$("before_agent_start"),h("design:type",Function),h("design:paramtypes",[typeof BeforeAgentStartEvent==="undefined"?Object:BeforeAgentStartEvent,typeof PipaApi==="undefined"?Object:PipaApi]),h("design:returntype",typeof BeforeAgentStartEventResult==="undefined"?Object:BeforeAgentStartEventResult)],hm.prototype,"enforceOnboarding",null);var lm=b$(x0(),1),pm=b$(f6(),1);var _5=200,w9={create:{code:"docs.create",get failed(){return[this.code,"Falha ao criar documento"]},get success(){return[this.code,"Documento criado"]}},list:{code:"docs.list",get failed(){return[this.code,"Falha ao listar documentos"]},get success(){return[this.code,"Documentos listados"]}},"update-frontmatter":{code:"docs.update-frontmatter",get failed(){return[this.code,"Falha ao atualizar frontmatter"]},get success(){return[this.code,"Frontmatter atualizado"]}},"update-body":{code:"docs.update-body",get failed(){return[this.code,"Falha ao atualizar corpo markdown"]},get success(){return[this.code,"Corpo markdown atualizado"]}},"update-metadata":{code:"docs.update-metadata",get failed(){return[this.code,"Falha ao atualizar metadata"]},get success(){return[this.code,"Metadata atualizado"]}},select:{code:"docs.select",get failed(){return[this.code,"Falha na busca"]},get success(){return[this.code,"Busca concluída"]}},remove:{code:"docs.remove",get failed(){return[this.code,"Falha ao remover documento"]},get success(){return[this.code,"Documento removido"]}},publish:{code:"docs.publish",get failed(){return[this.code,"Falha ao publicar documentação"]},get success(){return[this.code,"Documentação publicada"]}}};var h8$=["title","createdAt","updatedAt"],y8$=["ASC","DESC"],c8$=["title","tags","parentCode"],_w={instantiate:A.Object({action:A.Literal("instantiate",{description:"Cria novo documento na base de conhecimento"}),title:A.String({description:'Título do documento. Ex: "Arquitetura do backend".'}),parentCode:A.Optional(A.String({description:p("Código do documento pai (ex: a1b2c3d4)","Omita se for documento raiz")})),tags:A.Optional(A.Array(A.String({description:p("Etiquetas para categorização",'Ex: ["backend", "arquitetura"]',"Omita se não houver")}))),metadata:A.Optional(A.Record(A.String(),A.Unknown(),{description:p("Metadados extras (JSON)","Omita se não houver")})),body:A.String({description:"Conteúdo markdown do documento."}),summary:A.String({description:"Resumo curto do documento (máximo "+_5+" caracteres)",maxLength:_5})},{description:"Cria um novo documento na base de conhecimento do projeto.",examples:[{action:"instantiate",title:"Arquitetura do backend",tags:["backend","arquitetura"],body:`# Arquitetura
|
|
148
148
|
O backend usa Fastify e WebSocket.`,summary:"Visão geral da arquitetura do backend"}]}),list:A.Object({action:A.Literal("list",{description:"Lista documentos criados"}),tags:A.Optional(A.Array(A.String({description:p("Filtrar por tags","Omita para listar todos")}))),sort:A.Optional(A.Object({field:jq(h8$,{description:"Campo de ordenação. Ex: updatedAt."}),order:jq(y8$,{description:p("Ordem (ASC ou DESC)","Omita para ASC")})})),limit:A.Optional(A.Number({description:p("Limite de resultados","Omita para retornar todos")}))}),"update-frontmatter":A.Object({action:A.Literal("update-frontmatter",{description:"Atualiza metadados básicos de um documento"}),code:A.String({description:"Código do documento. Ex: a1b2c3d4."}),field:jq(c8$,{description:"Campo a atualizar: title, tags ou parentCode."}),value:A.Union([A.String(),A.Array(A.String())],{description:p("Novo valor","String para title/parentCode; array de strings para tags",'Ex: ["backend", "urgente"]')})}),"update-body":A.Object({action:A.Literal("update-body",{description:"Atualiza conteúdo markdown de um documento"}),code:A.String({description:"Código do documento. Ex: a1b2c3d4."}),mode:A.Union([A.Literal("append"),A.Literal("replace"),A.Literal("set")],{description:p("Modo de atualização","append: adiciona ao final; replace: substitui trecho; set: substitui o corpo inteiro.")}),value:A.String({description:p("Texto a inserir, anexar ou buscar","Em mode append/set é o novo conteúdo; em mode replace é o trecho a localizar")}),replacement:A.Optional(A.String({description:p("Texto de substituição","Obrigatório apenas em mode replace; omita nos demais")})),summary:A.Optional(A.String({description:p("Novo resumo (máximo "+_5+" caracteres)","Omita para manter o atual"),maxLength:_5}))},{description:"Atualiza o conteúdo markdown de um documento conforme o modo escolhido.",examples:[{action:"update-body",code:"a1b2c3d4",mode:"append",value:`
|
|
@@ -161,4 +161,4 @@ title: ${U.title}${W}
|
|
|
161
161
|
---
|
|
162
162
|
|
|
163
163
|
${U.body}
|
|
164
|
-
`,K=Z.get(U.code);await V3.default.outputFile(H3.join($,K),H)}try{await p8$("npx -y retypeapp build",{cwd:$}),u8$("npx -y retypeapp serve --port 5000",{cwd:$,shell:!0,detached:!0,stdio:"ignore",windowsHide:!0}).unref();let W={path:H3.join($,".retype"),url:"http://localhost:5000"};return this.pipa.events.emit("doc_published",W),W}catch(U){let W=U instanceof Error?U.message:String(U);throw new O$(...w9.publish.failed,`Falha ao construir site estático: ${W}`)}}}class k5 extends um.Mixin(h4,K3){pipa;constructor($){super($);this.pipa=$}instantiate($){this.canCreate($);let q=new Date().toISOString(),J=new A8({...z3.omit($,["action"]),code:m9(8),createdAt:q,updatedAt:q});return this.persistOne(J),this.pipa.events.emit("doc_created",J),z3.merge({},$,J)}}class nm extends pm.Mixin(R6){loadDocs(){M0.load()}initialize($){$.registerTool({name:"docs",label:"Base de Conhecimento",description:p("Gerencia a documentação e base de conhecimento local do projeto","Use para criar, listar, editar, buscar, remover ou publicar documentos","Não use para gerenciar trabalho (use backlog ou task) nem para seus próprios passos (use todo)"),promptSnippet:"docs: documentação e base de conhecimento local do projeto. Use para criar, editar, buscar, remover ou publicar documentos.",promptGuidelines:['Use "docs" para a documentação do projeto: criar, listar, editar, buscar, remover ou publicar documentos.','Não use "docs" para gerenciar trabalho (use "backlog" para itens do projeto, "task" para tarefas operacionais).'],parameters:Kq.Union(Object.values(_w),{type:"object",unevaluatedProperties:!1}),execute:async(q,J)=>{let X=new k5(this.pipa),Z=j9(X,_w,J),U=await Promise.resolve(Z[J.action]());if(U)this.pipa.nudge(`docs.${J.action}`,void 0,U);return{content:[{type:"text",text:Q9(kw[J.action],{...J,item:U,count:lm.size(U)})}],details:U}}}),$.registerCommand("docs-publish",{description:"Publica documentação do projeto.",handler:async()=>{let J=await new k5(this.pipa).publish();this.pipa.nudge("docs.publish",Q9(kw.publish,{item:J}))}})}}D$([Y$("session_start"),h("design:type",Function),h("design:paramtypes",[]),h("design:returntype",void 0)],nm.prototype,"loadDocs",null);var im=b$(x0(),1);async function n8$($,q){for(let J of q){let X=new J($);await X.initialize?.($);for(let[Z,U]of AP()){let W=Reflect.getMetadata(U,X);if(!W?.length)continue;W.forEach((H)=>{let K=X[H];if(Z in lX){if(["session_start","before_agent_start"].includes(Z))i8$($,Z,X,H);$.on(Z,async(F,B)=>{return await K.call(X,F,bw($,B,X))})}else{let F=Z;$.events.on(F,(B)=>{return K.call(X,B,bw($,Y9().context,X))})}})}}}function i8$($,q,J,X){let Z=J[X];$.on("agent_start",async(U,W)=>{let H=s.find(W.sessionManager.getSessionId());if(!H||H.role==="main"||H.eventsMountMap[X])return;if(!H.session)throw Error("Teammate session not found");H.eventsMountMap[X]=!0;let K;if(q==="session_start")K={reason:"startup",type:"session_start"};else K={
|
|
164
|
+
`,K=Z.get(U.code);await V3.default.outputFile(H3.join($,K),H)}try{await p8$("npx -y retypeapp build",{cwd:$}),u8$("npx -y retypeapp serve --port 5000",{cwd:$,shell:!0,detached:!0,stdio:"ignore",windowsHide:!0}).unref();let W={path:H3.join($,".retype"),url:"http://localhost:5000"};return this.pipa.events.emit("doc_published",W),W}catch(U){let W=U instanceof Error?U.message:String(U);throw new O$(...w9.publish.failed,`Falha ao construir site estático: ${W}`)}}}class k5 extends um.Mixin(h4,K3){pipa;constructor($){super($);this.pipa=$}instantiate($){this.canCreate($);let q=new Date().toISOString(),J=new A8({...z3.omit($,["action"]),code:m9(8),createdAt:q,updatedAt:q});return this.persistOne(J),this.pipa.events.emit("doc_created",J),z3.merge({},$,J)}}class nm extends pm.Mixin(R6){loadDocs(){M0.load()}initialize($){$.registerTool({name:"docs",label:"Base de Conhecimento",description:p("Gerencia a documentação e base de conhecimento local do projeto","Use para criar, listar, editar, buscar, remover ou publicar documentos","Não use para gerenciar trabalho (use backlog ou task) nem para seus próprios passos (use todo)"),promptSnippet:"docs: documentação e base de conhecimento local do projeto. Use para criar, editar, buscar, remover ou publicar documentos.",promptGuidelines:['Use "docs" para a documentação do projeto: criar, listar, editar, buscar, remover ou publicar documentos.','Não use "docs" para gerenciar trabalho (use "backlog" para itens do projeto, "task" para tarefas operacionais).'],parameters:Kq.Union(Object.values(_w),{type:"object",unevaluatedProperties:!1}),execute:async(q,J)=>{let X=new k5(this.pipa),Z=j9(X,_w,J),U=await Promise.resolve(Z[J.action]());if(U)this.pipa.nudge(`docs.${J.action}`,void 0,U);return{content:[{type:"text",text:Q9(kw[J.action],{...J,item:U,count:lm.size(U)})}],details:U}}}),$.registerCommand("docs-publish",{description:"Publica documentação do projeto.",handler:async()=>{let J=await new k5(this.pipa).publish();this.pipa.nudge("docs.publish",Q9(kw.publish,{item:J}))}})}}D$([Y$("session_start"),h("design:type",Function),h("design:paramtypes",[]),h("design:returntype",void 0)],nm.prototype,"loadDocs",null);var im=b$(x0(),1);async function n8$($,q){for(let J of q){let X=new J($);await X.initialize?.($);for(let[Z,U]of AP()){let W=Reflect.getMetadata(U,X);if(!W?.length)continue;W.forEach((H)=>{let K=X[H];if(Z in lX){if(["session_start","before_agent_start"].includes(Z))i8$($,Z,X,H);$.on(Z,async(F,B)=>{return await K.call(X,F,bw($,B,X))})}else{let F=Z;$.events.on(F,(B)=>{return K.call(X,B,bw($,Y9().context,X))})}})}}}function i8$($,q,J,X){let Z=J[X];$.on("agent_start",async(U,W)=>{let H=s.find(W.sessionManager.getSessionId());if(!H||H.role==="main"||H.eventsMountMap[X])return;if(!H.session)throw Error("Teammate session not found");H.eventsMountMap[X]=!0;let K;if(q==="session_start")K={reason:"startup",type:"session_start"};else K={type:"before_agent_start",prompt:"",systemPrompt:H.session.agent.state.systemPrompt,systemPromptOptions:{}};let F=await Z.call(J,K,bw($,W,J));if(q==="before_agent_start"){if(!F.systemPrompt||!H.session)return;let B=H.session.agent.state.messages;H.session.agent.state.messages=[...B,{role:"system",content:F.systemPrompt,timestamp:Date.now()}]}})}function bw($,q,J){let X=SU($,q);return J.pipa=im.merge({},J.pipa??{},X),X}export{Y9 as pipa,k6 as config,SU as buildPipaApi,n8$ as applyFeatures,Ym as TodoFeature,B0 as TeammateState,s as TeammateHub,qm as TeammateFeature,o as TaskState,t9 as TaskHub,tj as TaskFeature,vm as ProviderFeature,E0 as PipaStore,O$ as PipaException,Y$ as PipaEvent,R6 as PipaBaseFeature,Wm as PermissionFeature,lX as PI_EVENTS_SYMBOLS,l7 as PI_EVENTS,hm as OnboardingFeature,M0 as DocsState,k5 as DocsHub,nm as DocsFeature,km as BacklogFeature};
|
package/package.json
CHANGED