@keepur/hive 0.1.3 → 0.1.5

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/pkg/server.min.js CHANGED
@@ -1,78 +1,78 @@
1
1
  import { createRequire as __hiveCreateRequire } from 'module'; const require = __hiveCreateRequire(import.meta.url);
2
- var pp=Object.create;var li=Object.defineProperty;var mp=Object.getOwnPropertyDescriptor;var gp=Object.getOwnPropertyNames;var yp=Object.getPrototypeOf,wp=Object.prototype.hasOwnProperty;var F=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var q=(n,e)=>()=>(n&&(e=n(n=0)),e);var T=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports),Pe=(n,e)=>{for(var t in e)li(n,t,{get:e[t],enumerable:!0})},Sp=(n,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of gp(e))!wp.call(n,r)&&r!==t&&li(n,r,{get:()=>e[r],enumerable:!(s=mp(e,r))||s.enumerable});return n};var ve=(n,e,t)=>(t=n!=null?pp(yp(n)):{},Sp(e||!n||!n.__esModule?li(t,"default",{value:n,enumerable:!0}):t,n));import{existsSync as bp}from"node:fs";import{resolve as Je}from"node:path";function kp(){return process.env.HIVE_HOME?Je(process.env.HIVE_HOME):bp(Je(process.cwd(),"hive.yaml"))?process.cwd():Je(_p,".hive")}function sc(n){let e=process.env.HIVE_CONFIG||"hive.yaml";return Je(n,e)}function nc(n){let t=(process.env.HIVE_CONFIG||"hive.yaml").match(/^hive-(.+)\.yaml$/)?.[1];return Je(n,t?`.env-${t}`:".env")}var _p,le,ze,di,rc,rs=q(()=>{"use strict";_p=process.env.HOME??"/tmp";le=kp(),ze=Je(le,"skills"),di=Je(le,".hive"),rc=Je(import.meta.dirname,"..","seeds")});function an(n,e,t,s){if(ic[n]<ic[vp])return;let r={ts:new Date().toISOString(),level:n,component:e,msg:t,...s};(n==="error"?process.stderr:process.stdout).write(JSON.stringify(r)+`
3
- `)}function I(n){return{debug:(e,t)=>an("debug",n,e,t),info:(e,t)=>an("info",n,e,t),warn:(e,t)=>an("warn",n,e,t),error:(e,t)=>an("error",n,e,t)}}var ic,vp,O=q(()=>{"use strict";ic={debug:0,info:1,warn:2,error:3},vp=process.env.LOG_LEVEL||"info"});import{execFileSync as ui}from"node:child_process";import{existsSync as hi,mkdirSync as Tp,unlinkSync as Ip}from"node:fs";import{resolve as fi,join as Ap}from"node:path";function oc(n){let e=fi(n,".hive","git");if(hi(e))return;Tp(fi(n,".hive"),{recursive:!0});let t=(...s)=>ui("git",[...s],{cwd:n,env:{...process.env,GIT_DIR:e,GIT_WORK_TREE:n},stdio:"pipe"});t("init"),t("config","user.name","hive-instance"),t("config","user.email","hive@localhost"),t("checkout","-b","installed"),t("commit","--allow-empty","-m","init: installed branch"),t("checkout","-b","state"),t("commit","--allow-empty","-m","init: state branch"),cn.info("Instance-local git initialized",{gitDir:e})}function ac(n,e,t,s){let r=fi(n,".hive","git");if(!hi(r)){cn.warn("Instance git not initialized \u2014 skipping state commit");return}let i=Ap(r,"state-index.tmp"),o={...process.env,GIT_DIR:r,GIT_WORK_TREE:n,GIT_INDEX_FILE:i},a=(...l)=>ui("git",[...l],{cwd:n,env:o,stdio:"pipe",encoding:"utf-8"}).trim();try{a("read-tree","state");for(let p of e)a("add","--force","--",p);try{a("rm","--cached","--ignore-unmatch","-r","--","**/.DS_Store")}catch{}let l=a("write-tree"),c=a("rev-parse","state"),d=a("rev-parse","state^{tree}");if(l===d)return;let u=s?{GIT_AUTHOR_NAME:s,GIT_AUTHOR_EMAIL:`${s}@hive`,GIT_COMMITTER_NAME:s,GIT_COMMITTER_EMAIL:`${s}@hive`}:{GIT_AUTHOR_NAME:"hive",GIT_AUTHOR_EMAIL:"hive@localhost",GIT_COMMITTER_NAME:"hive",GIT_COMMITTER_EMAIL:"hive@localhost"},h=ui("git",["commit-tree",l,"-p",c,"-m",t],{env:{...o,...u},encoding:"utf-8"}).trim();a("update-ref","refs/heads/state",h),cn.debug("State branch commit",{message:t,files:e.length})}catch(l){cn.warn("Failed to commit to state branch",{error:String(l),message:t})}finally{try{hi(i)&&Ip(i)}catch{}}}var cn,pi=q(()=>{"use strict";O();cn=I("instance-git")});var bc=T((jk,$e)=>{var wi=F("fs"),ln=F("path"),Mp=F("os"),Dp=F("crypto"),mc=["\u25C8 encrypted .env [www.dotenvx.com]","\u25C8 secrets for agents [www.dotenvx.com]","\u2301 auth for agents [www.vestauth.com]","\u2318 custom filepath { path: '/custom/path/.env' }","\u2318 enable debugging { debug: true }","\u2318 override existing { override: true }","\u2318 suppress logs { quiet: true }","\u2318 multiple files { path: ['.env.local', '.env'] }"];function Lp(){return mc[Math.floor(Math.random()*mc.length)]}function Mt(n){return typeof n=="string"?!["false","0","no","off",""].includes(n.toLowerCase()):!!n}function Pp(){return process.stdout.isTTY}function $p(n){return Pp()?`\x1B[2m${n}\x1B[0m`:n}var Rp=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function Bp(n){let e={},t=n.toString();t=t.replace(/\r\n?/mg,`
4
- `);let s;for(;(s=Rp.exec(t))!=null;){let r=s[1],i=s[2]||"";i=i.trim();let o=i[0];i=i.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),o==='"'&&(i=i.replace(/\\n/g,`
5
- `),i=i.replace(/\\r/g,"\r")),e[r]=i}return e}function Up(n){n=n||{};let e=Sc(n);n.path=e;let t=Z.configDotenv(n);if(!t.parsed){let o=new Error(`MISSING_DATA: Cannot parse ${e} for an unknown reason`);throw o.code="MISSING_DATA",o}let s=wc(n).split(","),r=s.length,i;for(let o=0;o<r;o++)try{let a=s[o].trim(),l=jp(t,a);i=Z.decrypt(l.ciphertext,l.key);break}catch(a){if(o+1>=r)throw a}return Z.parse(i)}function qp(n){console.error(`\u26A0 ${n}`)}function is(n){console.log(`\u2506 ${n}`)}function yc(n){console.log(`\u25C7 ${n}`)}function wc(n){return n&&n.DOTENV_KEY&&n.DOTENV_KEY.length>0?n.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function jp(n,e){let t;try{t=new URL(e)}catch(a){if(a.code==="ERR_INVALID_URL"){let l=new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development");throw l.code="INVALID_DOTENV_KEY",l}throw a}let s=t.password;if(!s){let a=new Error("INVALID_DOTENV_KEY: Missing key part");throw a.code="INVALID_DOTENV_KEY",a}let r=t.searchParams.get("environment");if(!r){let a=new Error("INVALID_DOTENV_KEY: Missing environment part");throw a.code="INVALID_DOTENV_KEY",a}let i=`DOTENV_VAULT_${r.toUpperCase()}`,o=n.parsed[i];if(!o){let a=new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${i} in your .env.vault file.`);throw a.code="NOT_FOUND_DOTENV_ENVIRONMENT",a}return{ciphertext:o,key:s}}function Sc(n){let e=null;if(n&&n.path&&n.path.length>0)if(Array.isArray(n.path))for(let t of n.path)wi.existsSync(t)&&(e=t.endsWith(".vault")?t:`${t}.vault`);else e=n.path.endsWith(".vault")?n.path:`${n.path}.vault`;else e=ln.resolve(process.cwd(),".env.vault");return wi.existsSync(e)?e:null}function gc(n){return n[0]==="~"?ln.join(Mp.homedir(),n.slice(1)):n}function Fp(n){let e=Mt(process.env.DOTENV_CONFIG_DEBUG||n&&n.debug),t=Mt(process.env.DOTENV_CONFIG_QUIET||n&&n.quiet);(e||!t)&&yc("loading env from encrypted .env.vault");let s=Z._parseVault(n),r=process.env;return n&&n.processEnv!=null&&(r=n.processEnv),Z.populate(r,s,n),{parsed:s}}function Kp(n){let e=ln.resolve(process.cwd(),".env"),t="utf8",s=process.env;n&&n.processEnv!=null&&(s=n.processEnv);let r=Mt(s.DOTENV_CONFIG_DEBUG||n&&n.debug),i=Mt(s.DOTENV_CONFIG_QUIET||n&&n.quiet);n&&n.encoding?t=n.encoding:r&&is("no encoding is specified (UTF-8 is used by default)");let o=[e];if(n&&n.path)if(!Array.isArray(n.path))o=[gc(n.path)];else{o=[];for(let d of n.path)o.push(gc(d))}let a,l={};for(let d of o)try{let u=Z.parse(wi.readFileSync(d,{encoding:t}));Z.populate(l,u,n)}catch(u){r&&is(`failed to load ${d} ${u.message}`),a=u}let c=Z.populate(s,l,n);if(r=Mt(s.DOTENV_CONFIG_DEBUG||r),i=Mt(s.DOTENV_CONFIG_QUIET||i),r||!i){let d=Object.keys(c).length,u=[];for(let h of o)try{let p=ln.relative(process.cwd(),h);u.push(p)}catch(p){r&&is(`failed to load ${h} ${p.message}`),a=p}yc(`injected env (${d}) from ${u.join(",")} ${$p(`// tip: ${Lp()}`)}`)}return a?{parsed:l,error:a}:{parsed:l}}function Gp(n){if(wc(n).length===0)return Z.configDotenv(n);let e=Sc(n);return e?Z._configVault(n):(qp(`you set DOTENV_KEY but you are missing a .env.vault file at ${e}`),Z.configDotenv(n))}function Hp(n,e){let t=Buffer.from(e.slice(-64),"hex"),s=Buffer.from(n,"base64"),r=s.subarray(0,12),i=s.subarray(-16);s=s.subarray(12,-16);try{let o=Dp.createDecipheriv("aes-256-gcm",t,r);return o.setAuthTag(i),`${o.update(s)}${o.final()}`}catch(o){let a=o instanceof RangeError,l=o.message==="Invalid key length",c=o.message==="Unsupported state or unable to authenticate data";if(a||l){let d=new Error("INVALID_DOTENV_KEY: It must be 64 characters long (or more)");throw d.code="INVALID_DOTENV_KEY",d}else if(c){let d=new Error("DECRYPTION_FAILED: Please check your DOTENV_KEY");throw d.code="DECRYPTION_FAILED",d}else throw o}}function Wp(n,e,t={}){let s=!!(t&&t.debug),r=!!(t&&t.override),i={};if(typeof e!="object"){let o=new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");throw o.code="OBJECT_REQUIRED",o}for(let o of Object.keys(e))Object.prototype.hasOwnProperty.call(n,o)?(r===!0&&(n[o]=e[o],i[o]=e[o]),s&&is(r===!0?`"${o}" is already defined and WAS overwritten`:`"${o}" is already defined and was NOT overwritten`)):(n[o]=e[o],i[o]=e[o]);return i}var Z={configDotenv:Kp,_configVault:Fp,_parseVault:Up,config:Gp,decrypt:Hp,parse:Bp,populate:Wp};$e.exports.configDotenv=Z.configDotenv;$e.exports._configVault=Z._configVault;$e.exports._parseVault=Z._parseVault;$e.exports.config=Z.config;$e.exports.decrypt=Z.decrypt;$e.exports.parse=Z.parse;$e.exports.populate=Z.populate;$e.exports=Z});var $=T(oe=>{"use strict";var Si=Symbol.for("yaml.alias"),_c=Symbol.for("yaml.document"),dn=Symbol.for("yaml.map"),kc=Symbol.for("yaml.pair"),bi=Symbol.for("yaml.scalar"),un=Symbol.for("yaml.seq"),Re=Symbol.for("yaml.node.type"),Vp=n=>!!n&&typeof n=="object"&&n[Re]===Si,Yp=n=>!!n&&typeof n=="object"&&n[Re]===_c,Jp=n=>!!n&&typeof n=="object"&&n[Re]===dn,zp=n=>!!n&&typeof n=="object"&&n[Re]===kc,vc=n=>!!n&&typeof n=="object"&&n[Re]===bi,Qp=n=>!!n&&typeof n=="object"&&n[Re]===un;function Tc(n){if(n&&typeof n=="object")switch(n[Re]){case dn:case un:return!0}return!1}function Xp(n){if(n&&typeof n=="object")switch(n[Re]){case Si:case dn:case bi:case un:return!0}return!1}var Zp=n=>(vc(n)||Tc(n))&&!!n.anchor;oe.ALIAS=Si;oe.DOC=_c;oe.MAP=dn;oe.NODE_TYPE=Re;oe.PAIR=kc;oe.SCALAR=bi;oe.SEQ=un;oe.hasAnchor=Zp;oe.isAlias=Vp;oe.isCollection=Tc;oe.isDocument=Yp;oe.isMap=Jp;oe.isNode=Xp;oe.isPair=zp;oe.isScalar=vc;oe.isSeq=Qp});var os=T(_i=>{"use strict";var ee=$(),de=Symbol("break visit"),Ic=Symbol("skip children"),Ee=Symbol("remove node");function hn(n,e){let t=Ac(e);ee.isDocument(n)?Dt(null,n.contents,t,Object.freeze([n]))===Ee&&(n.contents=null):Dt(null,n,t,Object.freeze([]))}hn.BREAK=de;hn.SKIP=Ic;hn.REMOVE=Ee;function Dt(n,e,t,s){let r=Cc(n,e,t,s);if(ee.isNode(r)||ee.isPair(r))return Ec(n,s,r),Dt(n,r,t,s);if(typeof r!="symbol"){if(ee.isCollection(e)){s=Object.freeze(s.concat(e));for(let i=0;i<e.items.length;++i){let o=Dt(i,e.items[i],t,s);if(typeof o=="number")i=o-1;else{if(o===de)return de;o===Ee&&(e.items.splice(i,1),i-=1)}}}else if(ee.isPair(e)){s=Object.freeze(s.concat(e));let i=Dt("key",e.key,t,s);if(i===de)return de;i===Ee&&(e.key=null);let o=Dt("value",e.value,t,s);if(o===de)return de;o===Ee&&(e.value=null)}}return r}async function fn(n,e){let t=Ac(e);ee.isDocument(n)?await Lt(null,n.contents,t,Object.freeze([n]))===Ee&&(n.contents=null):await Lt(null,n,t,Object.freeze([]))}fn.BREAK=de;fn.SKIP=Ic;fn.REMOVE=Ee;async function Lt(n,e,t,s){let r=await Cc(n,e,t,s);if(ee.isNode(r)||ee.isPair(r))return Ec(n,s,r),Lt(n,r,t,s);if(typeof r!="symbol"){if(ee.isCollection(e)){s=Object.freeze(s.concat(e));for(let i=0;i<e.items.length;++i){let o=await Lt(i,e.items[i],t,s);if(typeof o=="number")i=o-1;else{if(o===de)return de;o===Ee&&(e.items.splice(i,1),i-=1)}}}else if(ee.isPair(e)){s=Object.freeze(s.concat(e));let i=await Lt("key",e.key,t,s);if(i===de)return de;i===Ee&&(e.key=null);let o=await Lt("value",e.value,t,s);if(o===de)return de;o===Ee&&(e.value=null)}}return r}function Ac(n){return typeof n=="object"&&(n.Collection||n.Node||n.Value)?Object.assign({Alias:n.Node,Map:n.Node,Scalar:n.Node,Seq:n.Node},n.Value&&{Map:n.Value,Scalar:n.Value,Seq:n.Value},n.Collection&&{Map:n.Collection,Seq:n.Collection},n):n}function Cc(n,e,t,s){if(typeof t=="function")return t(n,e,s);if(ee.isMap(e))return t.Map?.(n,e,s);if(ee.isSeq(e))return t.Seq?.(n,e,s);if(ee.isPair(e))return t.Pair?.(n,e,s);if(ee.isScalar(e))return t.Scalar?.(n,e,s);if(ee.isAlias(e))return t.Alias?.(n,e,s)}function Ec(n,e,t){let s=e[e.length-1];if(ee.isCollection(s))s.items[n]=t;else if(ee.isPair(s))n==="key"?s.key=t:s.value=t;else if(ee.isDocument(s))s.contents=t;else{let r=ee.isAlias(s)?"alias":"scalar";throw new Error(`Cannot replace node with ${r} parent`)}}_i.visit=hn;_i.visitAsync=fn});var ki=T(Oc=>{"use strict";var Nc=$(),em=os(),tm={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},sm=n=>n.replace(/[!,[\]{}]/g,e=>tm[e]),as=class n{constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},n.defaultYaml,e),this.tags=Object.assign({},n.defaultTags,t)}clone(){let e=new n(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){let e=new n(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:n.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},n.defaultTags);break}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:n.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},n.defaultTags),this.atNextDocument=!1);let s=e.trim().split(/[ \t]+/),r=s.shift();switch(r){case"%TAG":{if(s.length!==2&&(t(0,"%TAG directive should contain exactly two parts"),s.length<2))return!1;let[i,o]=s;return this.tags[i]=o,!0}case"%YAML":{if(this.yaml.explicit=!0,s.length!==1)return t(0,"%YAML directive should contain exactly one part"),!1;let[i]=s;if(i==="1.1"||i==="1.2")return this.yaml.version=i,!0;{let o=/^\d+\.\d+$/.test(i);return t(6,`Unsupported YAML version ${i}`,o),!1}}default:return t(0,`Unknown directive ${r}`,!0),!1}}tagName(e,t){if(e==="!")return"!";if(e[0]!=="!")return t(`Not a valid tag: ${e}`),null;if(e[1]==="<"){let o=e.slice(2,-1);return o==="!"||o==="!!"?(t(`Verbatim tags aren't resolved, so ${e} is invalid.`),null):(e[e.length-1]!==">"&&t("Verbatim tags must end with a >"),o)}let[,s,r]=e.match(/^(.*!)([^!]*)$/s);r||t(`The ${e} tag has no suffix`);let i=this.tags[s];if(i)try{return i+decodeURIComponent(r)}catch(o){return t(String(o)),null}return s==="!"?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(let[t,s]of Object.entries(this.tags))if(e.startsWith(s))return t+sm(e.substring(s.length));return e[0]==="!"?e:`!<${e}>`}toString(e){let t=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],s=Object.entries(this.tags),r;if(e&&s.length>0&&Nc.isNode(e.contents)){let i={};em.visit(e.contents,(o,a)=>{Nc.isNode(a)&&a.tag&&(i[a.tag]=!0)}),r=Object.keys(i)}else r=[];for(let[i,o]of s)i==="!!"&&o==="tag:yaml.org,2002:"||(!e||r.some(a=>a.startsWith(o)))&&t.push(`%TAG ${i} ${o}`);return t.join(`
6
- `)}};as.defaultYaml={explicit:!1,version:"1.2"};as.defaultTags={"!!":"tag:yaml.org,2002:"};Oc.Directives=as});var pn=T(cs=>{"use strict";var xc=$(),nm=os();function rm(n){if(/[\x00-\x19\s,[\]{}]/.test(n)){let t=`Anchor must not contain whitespace or control characters: ${JSON.stringify(n)}`;throw new Error(t)}return!0}function Mc(n){let e=new Set;return nm.visit(n,{Value(t,s){s.anchor&&e.add(s.anchor)}}),e}function Dc(n,e){for(let t=1;;++t){let s=`${n}${t}`;if(!e.has(s))return s}}function im(n,e){let t=[],s=new Map,r=null;return{onAnchor:i=>{t.push(i),r??(r=Mc(n));let o=Dc(e,r);return r.add(o),o},setAnchors:()=>{for(let i of t){let o=s.get(i);if(typeof o=="object"&&o.anchor&&(xc.isScalar(o.node)||xc.isCollection(o.node)))o.node.anchor=o.anchor;else{let a=new Error("Failed to resolve repeated object (this should not happen)");throw a.source=i,a}}},sourceObjects:s}}cs.anchorIsValid=rm;cs.anchorNames=Mc;cs.createNodeAnchors=im;cs.findNewAnchor=Dc});var vi=T(Lc=>{"use strict";function ls(n,e,t,s){if(s&&typeof s=="object")if(Array.isArray(s))for(let r=0,i=s.length;r<i;++r){let o=s[r],a=ls(n,s,String(r),o);a===void 0?delete s[r]:a!==o&&(s[r]=a)}else if(s instanceof Map)for(let r of Array.from(s.keys())){let i=s.get(r),o=ls(n,s,r,i);o===void 0?s.delete(r):o!==i&&s.set(r,o)}else if(s instanceof Set)for(let r of Array.from(s)){let i=ls(n,s,r,r);i===void 0?s.delete(r):i!==r&&(s.delete(r),s.add(i))}else for(let[r,i]of Object.entries(s)){let o=ls(n,s,r,i);o===void 0?delete s[r]:o!==i&&(s[r]=o)}return n.call(e,t,s)}Lc.applyReviver=ls});var Qe=T($c=>{"use strict";var om=$();function Pc(n,e,t){if(Array.isArray(n))return n.map((s,r)=>Pc(s,String(r),t));if(n&&typeof n.toJSON=="function"){if(!t||!om.hasAnchor(n))return n.toJSON(e,t);let s={aliasCount:0,count:1,res:void 0};t.anchors.set(n,s),t.onCreate=i=>{s.res=i,delete t.onCreate};let r=n.toJSON(e,t);return t.onCreate&&t.onCreate(r),r}return typeof n=="bigint"&&!t?.keep?Number(n):n}$c.toJS=Pc});var mn=T(Bc=>{"use strict";var am=vi(),Rc=$(),cm=Qe(),Ti=class{constructor(e){Object.defineProperty(this,Rc.NODE_TYPE,{value:e})}clone(){let e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:t,maxAliasCount:s,onAnchor:r,reviver:i}={}){if(!Rc.isDocument(e))throw new TypeError("A document argument is required");let o={anchors:new Map,doc:e,keep:!0,mapAsMap:t===!0,mapKeyWarned:!1,maxAliasCount:typeof s=="number"?s:100},a=cm.toJS(this,"",o);if(typeof r=="function")for(let{count:l,res:c}of o.anchors.values())r(c,l);return typeof i=="function"?am.applyReviver(i,{"":a},"",a):a}};Bc.NodeBase=Ti});var ds=T(Uc=>{"use strict";var lm=pn(),dm=os(),Pt=$(),um=mn(),hm=Qe(),Ii=class extends um.NodeBase{constructor(e){super(Pt.ALIAS),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(e,t){let s;t?.aliasResolveCache?s=t.aliasResolveCache:(s=[],dm.visit(e,{Node:(i,o)=>{(Pt.isAlias(o)||Pt.hasAnchor(o))&&s.push(o)}}),t&&(t.aliasResolveCache=s));let r;for(let i of s){if(i===this)break;i.anchor===this.source&&(r=i)}return r}toJSON(e,t){if(!t)return{source:this.source};let{anchors:s,doc:r,maxAliasCount:i}=t,o=this.resolve(r,t);if(!o){let l=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new ReferenceError(l)}let a=s.get(o);if(a||(hm.toJS(o,null,t),a=s.get(o)),a?.res===void 0){let l="This should not happen: Alias anchor was not resolved?";throw new ReferenceError(l)}if(i>=0&&(a.count+=1,a.aliasCount===0&&(a.aliasCount=gn(r,o,s)),a.count*a.aliasCount>i)){let l="Excessive alias count indicates a resource exhaustion attack";throw new ReferenceError(l)}return a.res}toString(e,t,s){let r=`*${this.source}`;if(e){if(lm.anchorIsValid(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){let i=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new Error(i)}if(e.implicitKey)return`${r} `}return r}};function gn(n,e,t){if(Pt.isAlias(e)){let s=e.resolve(n),r=t&&s&&t.get(s);return r?r.count*r.aliasCount:0}else if(Pt.isCollection(e)){let s=0;for(let r of e.items){let i=gn(n,r,t);i>s&&(s=i)}return s}else if(Pt.isPair(e)){let s=gn(n,e.key,t),r=gn(n,e.value,t);return Math.max(s,r)}return 1}Uc.Alias=Ii});var Q=T(Ai=>{"use strict";var fm=$(),pm=mn(),mm=Qe(),gm=n=>!n||typeof n!="function"&&typeof n!="object",Xe=class extends pm.NodeBase{constructor(e){super(fm.SCALAR),this.value=e}toJSON(e,t){return t?.keep?this.value:mm.toJS(this.value,e,t)}toString(){return String(this.value)}};Xe.BLOCK_FOLDED="BLOCK_FOLDED";Xe.BLOCK_LITERAL="BLOCK_LITERAL";Xe.PLAIN="PLAIN";Xe.QUOTE_DOUBLE="QUOTE_DOUBLE";Xe.QUOTE_SINGLE="QUOTE_SINGLE";Ai.Scalar=Xe;Ai.isScalarValue=gm});var us=T(jc=>{"use strict";var ym=ds(),ht=$(),qc=Q(),wm="tag:yaml.org,2002:";function Sm(n,e,t){if(e){let s=t.filter(i=>i.tag===e),r=s.find(i=>!i.format)??s[0];if(!r)throw new Error(`Tag ${e} not found`);return r}return t.find(s=>s.identify?.(n)&&!s.format)}function bm(n,e,t){if(ht.isDocument(n)&&(n=n.contents),ht.isNode(n))return n;if(ht.isPair(n)){let u=t.schema[ht.MAP].createNode?.(t.schema,null,t);return u.items.push(n),u}(n instanceof String||n instanceof Number||n instanceof Boolean||typeof BigInt<"u"&&n instanceof BigInt)&&(n=n.valueOf());let{aliasDuplicateObjects:s,onAnchor:r,onTagObj:i,schema:o,sourceObjects:a}=t,l;if(s&&n&&typeof n=="object"){if(l=a.get(n),l)return l.anchor??(l.anchor=r(n)),new ym.Alias(l.anchor);l={anchor:null,node:null},a.set(n,l)}e?.startsWith("!!")&&(e=wm+e.slice(2));let c=Sm(n,e,o.tags);if(!c){if(n&&typeof n.toJSON=="function"&&(n=n.toJSON()),!n||typeof n!="object"){let u=new qc.Scalar(n);return l&&(l.node=u),u}c=n instanceof Map?o[ht.MAP]:Symbol.iterator in Object(n)?o[ht.SEQ]:o[ht.MAP]}i&&(i(c),delete t.onTagObj);let d=c?.createNode?c.createNode(t.schema,n,t):typeof c?.nodeClass?.from=="function"?c.nodeClass.from(t.schema,n,t):new qc.Scalar(n);return e?d.tag=e:c.default||(d.tag=c.tag),l&&(l.node=d),d}jc.createNode=bm});var wn=T(yn=>{"use strict";var _m=us(),Ne=$(),km=mn();function Ci(n,e,t){let s=t;for(let r=e.length-1;r>=0;--r){let i=e[r];if(typeof i=="number"&&Number.isInteger(i)&&i>=0){let o=[];o[i]=s,s=o}else s=new Map([[i,s]])}return _m.createNode(s,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw new Error("This should not happen, please report a bug.")},schema:n,sourceObjects:new Map})}var Fc=n=>n==null||typeof n=="object"&&!!n[Symbol.iterator]().next().done,Ei=class extends km.NodeBase{constructor(e,t){super(e),Object.defineProperty(this,"schema",{value:t,configurable:!0,enumerable:!1,writable:!0})}clone(e){let t=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(t.schema=e),t.items=t.items.map(s=>Ne.isNode(s)||Ne.isPair(s)?s.clone(e):s),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(Fc(e))this.add(t);else{let[s,...r]=e,i=this.get(s,!0);if(Ne.isCollection(i))i.addIn(r,t);else if(i===void 0&&this.schema)this.set(s,Ci(this.schema,r,t));else throw new Error(`Expected YAML collection at ${s}. Remaining path: ${r}`)}}deleteIn(e){let[t,...s]=e;if(s.length===0)return this.delete(t);let r=this.get(t,!0);if(Ne.isCollection(r))return r.deleteIn(s);throw new Error(`Expected YAML collection at ${t}. Remaining path: ${s}`)}getIn(e,t){let[s,...r]=e,i=this.get(s,!0);return r.length===0?!t&&Ne.isScalar(i)?i.value:i:Ne.isCollection(i)?i.getIn(r,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!Ne.isPair(t))return!1;let s=t.value;return s==null||e&&Ne.isScalar(s)&&s.value==null&&!s.commentBefore&&!s.comment&&!s.tag})}hasIn(e){let[t,...s]=e;if(s.length===0)return this.has(t);let r=this.get(t,!0);return Ne.isCollection(r)?r.hasIn(s):!1}setIn(e,t){let[s,...r]=e;if(r.length===0)this.set(s,t);else{let i=this.get(s,!0);if(Ne.isCollection(i))i.setIn(r,t);else if(i===void 0&&this.schema)this.set(s,Ci(this.schema,r,t));else throw new Error(`Expected YAML collection at ${s}. Remaining path: ${r}`)}}};yn.Collection=Ei;yn.collectionFromPath=Ci;yn.isEmptyPath=Fc});var hs=T(Sn=>{"use strict";var vm=n=>n.replace(/^(?!$)(?: $)?/gm,"#");function Ni(n,e){return/^\n+$/.test(n)?n.substring(1):e?n.replace(/^(?! *$)/gm,e):n}var Tm=(n,e,t)=>n.endsWith(`
7
- `)?Ni(t,e):t.includes(`
2
+ var Sp=Object.create;var di=Object.defineProperty;var bp=Object.getOwnPropertyDescriptor;var _p=Object.getOwnPropertyNames;var kp=Object.getPrototypeOf,vp=Object.prototype.hasOwnProperty;var K=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var F=(n,e)=>()=>(n&&(e=n(n=0)),e);var I=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports),Pe=(n,e)=>{for(var t in e)di(n,t,{get:e[t],enumerable:!0})},Tp=(n,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of _p(e))!vp.call(n,r)&&r!==t&&di(n,r,{get:()=>e[r],enumerable:!(s=bp(e,r))||s.enumerable});return n};var ve=(n,e,t)=>(t=n!=null?Sp(kp(n)):{},Tp(e||!n||!n.__esModule?di(t,"default",{value:n,enumerable:!0}):t,n));import{existsSync as Ip}from"node:fs";import{resolve as ze}from"node:path";function Cp(){return process.env.HIVE_HOME?ze(process.env.HIVE_HOME):Ip(ze(process.cwd(),"hive.yaml"))?process.cwd():ze(Ap,".hive")}function rc(n){let e=process.env.HIVE_CONFIG||"hive.yaml";return ze(n,e)}function ic(n){let t=(process.env.HIVE_CONFIG||"hive.yaml").match(/^hive-(.+)\.yaml$/)?.[1];return ze(n,t?`.env-${t}`:".env")}var Ap,ce,Qe,ui,oc,ns=F(()=>{"use strict";Ap=process.env.HOME??"/tmp";ce=Cp(),Qe=ze(ce,"skills"),ui=ze(ce,".hive"),oc=ze(import.meta.dirname,"..","seeds")});function on(n,e,t,s){if(ac[n]<ac[Ep])return;let r={ts:new Date().toISOString(),level:n,component:e,msg:t,...s};(n==="error"?process.stderr:process.stdout).write(JSON.stringify(r)+`
3
+ `)}function T(n){return{debug:(e,t)=>on("debug",n,e,t),info:(e,t)=>on("info",n,e,t),warn:(e,t)=>on("warn",n,e,t),error:(e,t)=>on("error",n,e,t)}}var ac,Ep,O=F(()=>{"use strict";ac={debug:0,info:1,warn:2,error:3},Ep=process.env.LOG_LEVEL||"info"});import{execFileSync as hi}from"node:child_process";import{existsSync as fi,mkdirSync as Np,unlinkSync as Op}from"node:fs";import{resolve as pi,join as xp}from"node:path";function cc(n){let e=pi(n,".hive","git");if(fi(e))return;Np(pi(n,".hive"),{recursive:!0});let t=(...s)=>hi("git",[...s],{cwd:n,env:{...process.env,GIT_DIR:e,GIT_WORK_TREE:n},stdio:"pipe"});t("init"),t("config","user.name","hive-instance"),t("config","user.email","hive@localhost"),t("checkout","-b","installed"),t("commit","--allow-empty","-m","init: installed branch"),t("checkout","-b","state"),t("commit","--allow-empty","-m","init: state branch"),an.info("Instance-local git initialized",{gitDir:e})}function lc(n,e,t,s){let r=pi(n,".hive","git");if(!fi(r)){an.warn("Instance git not initialized \u2014 skipping state commit");return}let i=xp(r,"state-index.tmp"),o={...process.env,GIT_DIR:r,GIT_WORK_TREE:n,GIT_INDEX_FILE:i},a=(...l)=>hi("git",[...l],{cwd:n,env:o,stdio:"pipe",encoding:"utf-8"}).trim();try{a("read-tree","state");for(let p of e)a("add","--force","--",p);try{a("rm","--cached","--ignore-unmatch","-r","--","**/.DS_Store")}catch{}let l=a("write-tree"),c=a("rev-parse","state"),d=a("rev-parse","state^{tree}");if(l===d)return;let u=s?{GIT_AUTHOR_NAME:s,GIT_AUTHOR_EMAIL:`${s}@hive`,GIT_COMMITTER_NAME:s,GIT_COMMITTER_EMAIL:`${s}@hive`}:{GIT_AUTHOR_NAME:"hive",GIT_AUTHOR_EMAIL:"hive@localhost",GIT_COMMITTER_NAME:"hive",GIT_COMMITTER_EMAIL:"hive@localhost"},h=hi("git",["commit-tree",l,"-p",c,"-m",t],{env:{...o,...u},encoding:"utf-8"}).trim();a("update-ref","refs/heads/state",h),an.debug("State branch commit",{message:t,files:e.length})}catch(l){an.warn("Failed to commit to state branch",{error:String(l),message:t})}finally{try{fi(i)&&Op(i)}catch{}}}var an,mi=F(()=>{"use strict";O();an=T("instance-git")});var kc=I((Wk,$e)=>{var Si=K("fs"),cn=K("path"),Rp=K("os"),Bp=K("crypto"),yc=["\u25C8 encrypted .env [www.dotenvx.com]","\u25C8 secrets for agents [www.dotenvx.com]","\u2301 auth for agents [www.vestauth.com]","\u2318 custom filepath { path: '/custom/path/.env' }","\u2318 enable debugging { debug: true }","\u2318 override existing { override: true }","\u2318 suppress logs { quiet: true }","\u2318 multiple files { path: ['.env.local', '.env'] }"];function Up(){return yc[Math.floor(Math.random()*yc.length)]}function Ot(n){return typeof n=="string"?!["false","0","no","off",""].includes(n.toLowerCase()):!!n}function qp(){return process.stdout.isTTY}function jp(n){return qp()?`\x1B[2m${n}\x1B[0m`:n}var Fp=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function Kp(n){let e={},t=n.toString();t=t.replace(/\r\n?/mg,`
4
+ `);let s;for(;(s=Fp.exec(t))!=null;){let r=s[1],i=s[2]||"";i=i.trim();let o=i[0];i=i.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),o==='"'&&(i=i.replace(/\\n/g,`
5
+ `),i=i.replace(/\\r/g,"\r")),e[r]=i}return e}function Gp(n){n=n||{};let e=_c(n);n.path=e;let t=Z.configDotenv(n);if(!t.parsed){let o=new Error(`MISSING_DATA: Cannot parse ${e} for an unknown reason`);throw o.code="MISSING_DATA",o}let s=bc(n).split(","),r=s.length,i;for(let o=0;o<r;o++)try{let a=s[o].trim(),l=Wp(t,a);i=Z.decrypt(l.ciphertext,l.key);break}catch(a){if(o+1>=r)throw a}return Z.parse(i)}function Hp(n){console.error(`\u26A0 ${n}`)}function rs(n){console.log(`\u2506 ${n}`)}function Sc(n){console.log(`\u25C7 ${n}`)}function bc(n){return n&&n.DOTENV_KEY&&n.DOTENV_KEY.length>0?n.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function Wp(n,e){let t;try{t=new URL(e)}catch(a){if(a.code==="ERR_INVALID_URL"){let l=new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development");throw l.code="INVALID_DOTENV_KEY",l}throw a}let s=t.password;if(!s){let a=new Error("INVALID_DOTENV_KEY: Missing key part");throw a.code="INVALID_DOTENV_KEY",a}let r=t.searchParams.get("environment");if(!r){let a=new Error("INVALID_DOTENV_KEY: Missing environment part");throw a.code="INVALID_DOTENV_KEY",a}let i=`DOTENV_VAULT_${r.toUpperCase()}`,o=n.parsed[i];if(!o){let a=new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${i} in your .env.vault file.`);throw a.code="NOT_FOUND_DOTENV_ENVIRONMENT",a}return{ciphertext:o,key:s}}function _c(n){let e=null;if(n&&n.path&&n.path.length>0)if(Array.isArray(n.path))for(let t of n.path)Si.existsSync(t)&&(e=t.endsWith(".vault")?t:`${t}.vault`);else e=n.path.endsWith(".vault")?n.path:`${n.path}.vault`;else e=cn.resolve(process.cwd(),".env.vault");return Si.existsSync(e)?e:null}function wc(n){return n[0]==="~"?cn.join(Rp.homedir(),n.slice(1)):n}function Vp(n){let e=Ot(process.env.DOTENV_CONFIG_DEBUG||n&&n.debug),t=Ot(process.env.DOTENV_CONFIG_QUIET||n&&n.quiet);(e||!t)&&Sc("loading env from encrypted .env.vault");let s=Z._parseVault(n),r=process.env;return n&&n.processEnv!=null&&(r=n.processEnv),Z.populate(r,s,n),{parsed:s}}function Yp(n){let e=cn.resolve(process.cwd(),".env"),t="utf8",s=process.env;n&&n.processEnv!=null&&(s=n.processEnv);let r=Ot(s.DOTENV_CONFIG_DEBUG||n&&n.debug),i=Ot(s.DOTENV_CONFIG_QUIET||n&&n.quiet);n&&n.encoding?t=n.encoding:r&&rs("no encoding is specified (UTF-8 is used by default)");let o=[e];if(n&&n.path)if(!Array.isArray(n.path))o=[wc(n.path)];else{o=[];for(let d of n.path)o.push(wc(d))}let a,l={};for(let d of o)try{let u=Z.parse(Si.readFileSync(d,{encoding:t}));Z.populate(l,u,n)}catch(u){r&&rs(`failed to load ${d} ${u.message}`),a=u}let c=Z.populate(s,l,n);if(r=Ot(s.DOTENV_CONFIG_DEBUG||r),i=Ot(s.DOTENV_CONFIG_QUIET||i),r||!i){let d=Object.keys(c).length,u=[];for(let h of o)try{let p=cn.relative(process.cwd(),h);u.push(p)}catch(p){r&&rs(`failed to load ${h} ${p.message}`),a=p}Sc(`injected env (${d}) from ${u.join(",")} ${jp(`// tip: ${Up()}`)}`)}return a?{parsed:l,error:a}:{parsed:l}}function Jp(n){if(bc(n).length===0)return Z.configDotenv(n);let e=_c(n);return e?Z._configVault(n):(Hp(`you set DOTENV_KEY but you are missing a .env.vault file at ${e}`),Z.configDotenv(n))}function zp(n,e){let t=Buffer.from(e.slice(-64),"hex"),s=Buffer.from(n,"base64"),r=s.subarray(0,12),i=s.subarray(-16);s=s.subarray(12,-16);try{let o=Bp.createDecipheriv("aes-256-gcm",t,r);return o.setAuthTag(i),`${o.update(s)}${o.final()}`}catch(o){let a=o instanceof RangeError,l=o.message==="Invalid key length",c=o.message==="Unsupported state or unable to authenticate data";if(a||l){let d=new Error("INVALID_DOTENV_KEY: It must be 64 characters long (or more)");throw d.code="INVALID_DOTENV_KEY",d}else if(c){let d=new Error("DECRYPTION_FAILED: Please check your DOTENV_KEY");throw d.code="DECRYPTION_FAILED",d}else throw o}}function Qp(n,e,t={}){let s=!!(t&&t.debug),r=!!(t&&t.override),i={};if(typeof e!="object"){let o=new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");throw o.code="OBJECT_REQUIRED",o}for(let o of Object.keys(e))Object.prototype.hasOwnProperty.call(n,o)?(r===!0&&(n[o]=e[o],i[o]=e[o]),s&&rs(r===!0?`"${o}" is already defined and WAS overwritten`:`"${o}" is already defined and was NOT overwritten`)):(n[o]=e[o],i[o]=e[o]);return i}var Z={configDotenv:Yp,_configVault:Vp,_parseVault:Gp,config:Jp,decrypt:zp,parse:Kp,populate:Qp};$e.exports.configDotenv=Z.configDotenv;$e.exports._configVault=Z._configVault;$e.exports._parseVault=Z._parseVault;$e.exports.config=Z.config;$e.exports.decrypt=Z.decrypt;$e.exports.parse=Z.parse;$e.exports.populate=Z.populate;$e.exports=Z});var $=I(oe=>{"use strict";var bi=Symbol.for("yaml.alias"),vc=Symbol.for("yaml.document"),ln=Symbol.for("yaml.map"),Tc=Symbol.for("yaml.pair"),_i=Symbol.for("yaml.scalar"),dn=Symbol.for("yaml.seq"),Re=Symbol.for("yaml.node.type"),Xp=n=>!!n&&typeof n=="object"&&n[Re]===bi,Zp=n=>!!n&&typeof n=="object"&&n[Re]===vc,em=n=>!!n&&typeof n=="object"&&n[Re]===ln,tm=n=>!!n&&typeof n=="object"&&n[Re]===Tc,Ic=n=>!!n&&typeof n=="object"&&n[Re]===_i,sm=n=>!!n&&typeof n=="object"&&n[Re]===dn;function Ac(n){if(n&&typeof n=="object")switch(n[Re]){case ln:case dn:return!0}return!1}function nm(n){if(n&&typeof n=="object")switch(n[Re]){case bi:case ln:case _i:case dn:return!0}return!1}var rm=n=>(Ic(n)||Ac(n))&&!!n.anchor;oe.ALIAS=bi;oe.DOC=vc;oe.MAP=ln;oe.NODE_TYPE=Re;oe.PAIR=Tc;oe.SCALAR=_i;oe.SEQ=dn;oe.hasAnchor=rm;oe.isAlias=Xp;oe.isCollection=Ac;oe.isDocument=Zp;oe.isMap=em;oe.isNode=nm;oe.isPair=tm;oe.isScalar=Ic;oe.isSeq=sm});var is=I(ki=>{"use strict";var ee=$(),de=Symbol("break visit"),Cc=Symbol("skip children"),Ee=Symbol("remove node");function un(n,e){let t=Ec(e);ee.isDocument(n)?xt(null,n.contents,t,Object.freeze([n]))===Ee&&(n.contents=null):xt(null,n,t,Object.freeze([]))}un.BREAK=de;un.SKIP=Cc;un.REMOVE=Ee;function xt(n,e,t,s){let r=Nc(n,e,t,s);if(ee.isNode(r)||ee.isPair(r))return Oc(n,s,r),xt(n,r,t,s);if(typeof r!="symbol"){if(ee.isCollection(e)){s=Object.freeze(s.concat(e));for(let i=0;i<e.items.length;++i){let o=xt(i,e.items[i],t,s);if(typeof o=="number")i=o-1;else{if(o===de)return de;o===Ee&&(e.items.splice(i,1),i-=1)}}}else if(ee.isPair(e)){s=Object.freeze(s.concat(e));let i=xt("key",e.key,t,s);if(i===de)return de;i===Ee&&(e.key=null);let o=xt("value",e.value,t,s);if(o===de)return de;o===Ee&&(e.value=null)}}return r}async function hn(n,e){let t=Ec(e);ee.isDocument(n)?await Mt(null,n.contents,t,Object.freeze([n]))===Ee&&(n.contents=null):await Mt(null,n,t,Object.freeze([]))}hn.BREAK=de;hn.SKIP=Cc;hn.REMOVE=Ee;async function Mt(n,e,t,s){let r=await Nc(n,e,t,s);if(ee.isNode(r)||ee.isPair(r))return Oc(n,s,r),Mt(n,r,t,s);if(typeof r!="symbol"){if(ee.isCollection(e)){s=Object.freeze(s.concat(e));for(let i=0;i<e.items.length;++i){let o=await Mt(i,e.items[i],t,s);if(typeof o=="number")i=o-1;else{if(o===de)return de;o===Ee&&(e.items.splice(i,1),i-=1)}}}else if(ee.isPair(e)){s=Object.freeze(s.concat(e));let i=await Mt("key",e.key,t,s);if(i===de)return de;i===Ee&&(e.key=null);let o=await Mt("value",e.value,t,s);if(o===de)return de;o===Ee&&(e.value=null)}}return r}function Ec(n){return typeof n=="object"&&(n.Collection||n.Node||n.Value)?Object.assign({Alias:n.Node,Map:n.Node,Scalar:n.Node,Seq:n.Node},n.Value&&{Map:n.Value,Scalar:n.Value,Seq:n.Value},n.Collection&&{Map:n.Collection,Seq:n.Collection},n):n}function Nc(n,e,t,s){if(typeof t=="function")return t(n,e,s);if(ee.isMap(e))return t.Map?.(n,e,s);if(ee.isSeq(e))return t.Seq?.(n,e,s);if(ee.isPair(e))return t.Pair?.(n,e,s);if(ee.isScalar(e))return t.Scalar?.(n,e,s);if(ee.isAlias(e))return t.Alias?.(n,e,s)}function Oc(n,e,t){let s=e[e.length-1];if(ee.isCollection(s))s.items[n]=t;else if(ee.isPair(s))n==="key"?s.key=t:s.value=t;else if(ee.isDocument(s))s.contents=t;else{let r=ee.isAlias(s)?"alias":"scalar";throw new Error(`Cannot replace node with ${r} parent`)}}ki.visit=un;ki.visitAsync=hn});var vi=I(Mc=>{"use strict";var xc=$(),im=is(),om={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},am=n=>n.replace(/[!,[\]{}]/g,e=>om[e]),os=class n{constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},n.defaultYaml,e),this.tags=Object.assign({},n.defaultTags,t)}clone(){let e=new n(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){let e=new n(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:n.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},n.defaultTags);break}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:n.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},n.defaultTags),this.atNextDocument=!1);let s=e.trim().split(/[ \t]+/),r=s.shift();switch(r){case"%TAG":{if(s.length!==2&&(t(0,"%TAG directive should contain exactly two parts"),s.length<2))return!1;let[i,o]=s;return this.tags[i]=o,!0}case"%YAML":{if(this.yaml.explicit=!0,s.length!==1)return t(0,"%YAML directive should contain exactly one part"),!1;let[i]=s;if(i==="1.1"||i==="1.2")return this.yaml.version=i,!0;{let o=/^\d+\.\d+$/.test(i);return t(6,`Unsupported YAML version ${i}`,o),!1}}default:return t(0,`Unknown directive ${r}`,!0),!1}}tagName(e,t){if(e==="!")return"!";if(e[0]!=="!")return t(`Not a valid tag: ${e}`),null;if(e[1]==="<"){let o=e.slice(2,-1);return o==="!"||o==="!!"?(t(`Verbatim tags aren't resolved, so ${e} is invalid.`),null):(e[e.length-1]!==">"&&t("Verbatim tags must end with a >"),o)}let[,s,r]=e.match(/^(.*!)([^!]*)$/s);r||t(`The ${e} tag has no suffix`);let i=this.tags[s];if(i)try{return i+decodeURIComponent(r)}catch(o){return t(String(o)),null}return s==="!"?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(let[t,s]of Object.entries(this.tags))if(e.startsWith(s))return t+am(e.substring(s.length));return e[0]==="!"?e:`!<${e}>`}toString(e){let t=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],s=Object.entries(this.tags),r;if(e&&s.length>0&&xc.isNode(e.contents)){let i={};im.visit(e.contents,(o,a)=>{xc.isNode(a)&&a.tag&&(i[a.tag]=!0)}),r=Object.keys(i)}else r=[];for(let[i,o]of s)i==="!!"&&o==="tag:yaml.org,2002:"||(!e||r.some(a=>a.startsWith(o)))&&t.push(`%TAG ${i} ${o}`);return t.join(`
6
+ `)}};os.defaultYaml={explicit:!1,version:"1.2"};os.defaultTags={"!!":"tag:yaml.org,2002:"};Mc.Directives=os});var fn=I(as=>{"use strict";var Dc=$(),cm=is();function lm(n){if(/[\x00-\x19\s,[\]{}]/.test(n)){let t=`Anchor must not contain whitespace or control characters: ${JSON.stringify(n)}`;throw new Error(t)}return!0}function Lc(n){let e=new Set;return cm.visit(n,{Value(t,s){s.anchor&&e.add(s.anchor)}}),e}function Pc(n,e){for(let t=1;;++t){let s=`${n}${t}`;if(!e.has(s))return s}}function dm(n,e){let t=[],s=new Map,r=null;return{onAnchor:i=>{t.push(i),r??(r=Lc(n));let o=Pc(e,r);return r.add(o),o},setAnchors:()=>{for(let i of t){let o=s.get(i);if(typeof o=="object"&&o.anchor&&(Dc.isScalar(o.node)||Dc.isCollection(o.node)))o.node.anchor=o.anchor;else{let a=new Error("Failed to resolve repeated object (this should not happen)");throw a.source=i,a}}},sourceObjects:s}}as.anchorIsValid=lm;as.anchorNames=Lc;as.createNodeAnchors=dm;as.findNewAnchor=Pc});var Ti=I($c=>{"use strict";function cs(n,e,t,s){if(s&&typeof s=="object")if(Array.isArray(s))for(let r=0,i=s.length;r<i;++r){let o=s[r],a=cs(n,s,String(r),o);a===void 0?delete s[r]:a!==o&&(s[r]=a)}else if(s instanceof Map)for(let r of Array.from(s.keys())){let i=s.get(r),o=cs(n,s,r,i);o===void 0?s.delete(r):o!==i&&s.set(r,o)}else if(s instanceof Set)for(let r of Array.from(s)){let i=cs(n,s,r,r);i===void 0?s.delete(r):i!==r&&(s.delete(r),s.add(i))}else for(let[r,i]of Object.entries(s)){let o=cs(n,s,r,i);o===void 0?delete s[r]:o!==i&&(s[r]=o)}return n.call(e,t,s)}$c.applyReviver=cs});var Xe=I(Bc=>{"use strict";var um=$();function Rc(n,e,t){if(Array.isArray(n))return n.map((s,r)=>Rc(s,String(r),t));if(n&&typeof n.toJSON=="function"){if(!t||!um.hasAnchor(n))return n.toJSON(e,t);let s={aliasCount:0,count:1,res:void 0};t.anchors.set(n,s),t.onCreate=i=>{s.res=i,delete t.onCreate};let r=n.toJSON(e,t);return t.onCreate&&t.onCreate(r),r}return typeof n=="bigint"&&!t?.keep?Number(n):n}Bc.toJS=Rc});var pn=I(qc=>{"use strict";var hm=Ti(),Uc=$(),fm=Xe(),Ii=class{constructor(e){Object.defineProperty(this,Uc.NODE_TYPE,{value:e})}clone(){let e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:t,maxAliasCount:s,onAnchor:r,reviver:i}={}){if(!Uc.isDocument(e))throw new TypeError("A document argument is required");let o={anchors:new Map,doc:e,keep:!0,mapAsMap:t===!0,mapKeyWarned:!1,maxAliasCount:typeof s=="number"?s:100},a=fm.toJS(this,"",o);if(typeof r=="function")for(let{count:l,res:c}of o.anchors.values())r(c,l);return typeof i=="function"?hm.applyReviver(i,{"":a},"",a):a}};qc.NodeBase=Ii});var ls=I(jc=>{"use strict";var pm=fn(),mm=is(),Dt=$(),gm=pn(),ym=Xe(),Ai=class extends gm.NodeBase{constructor(e){super(Dt.ALIAS),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(e,t){let s;t?.aliasResolveCache?s=t.aliasResolveCache:(s=[],mm.visit(e,{Node:(i,o)=>{(Dt.isAlias(o)||Dt.hasAnchor(o))&&s.push(o)}}),t&&(t.aliasResolveCache=s));let r;for(let i of s){if(i===this)break;i.anchor===this.source&&(r=i)}return r}toJSON(e,t){if(!t)return{source:this.source};let{anchors:s,doc:r,maxAliasCount:i}=t,o=this.resolve(r,t);if(!o){let l=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new ReferenceError(l)}let a=s.get(o);if(a||(ym.toJS(o,null,t),a=s.get(o)),a?.res===void 0){let l="This should not happen: Alias anchor was not resolved?";throw new ReferenceError(l)}if(i>=0&&(a.count+=1,a.aliasCount===0&&(a.aliasCount=mn(r,o,s)),a.count*a.aliasCount>i)){let l="Excessive alias count indicates a resource exhaustion attack";throw new ReferenceError(l)}return a.res}toString(e,t,s){let r=`*${this.source}`;if(e){if(pm.anchorIsValid(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){let i=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new Error(i)}if(e.implicitKey)return`${r} `}return r}};function mn(n,e,t){if(Dt.isAlias(e)){let s=e.resolve(n),r=t&&s&&t.get(s);return r?r.count*r.aliasCount:0}else if(Dt.isCollection(e)){let s=0;for(let r of e.items){let i=mn(n,r,t);i>s&&(s=i)}return s}else if(Dt.isPair(e)){let s=mn(n,e.key,t),r=mn(n,e.value,t);return Math.max(s,r)}return 1}jc.Alias=Ai});var Q=I(Ci=>{"use strict";var wm=$(),Sm=pn(),bm=Xe(),_m=n=>!n||typeof n!="function"&&typeof n!="object",Ze=class extends Sm.NodeBase{constructor(e){super(wm.SCALAR),this.value=e}toJSON(e,t){return t?.keep?this.value:bm.toJS(this.value,e,t)}toString(){return String(this.value)}};Ze.BLOCK_FOLDED="BLOCK_FOLDED";Ze.BLOCK_LITERAL="BLOCK_LITERAL";Ze.PLAIN="PLAIN";Ze.QUOTE_DOUBLE="QUOTE_DOUBLE";Ze.QUOTE_SINGLE="QUOTE_SINGLE";Ci.Scalar=Ze;Ci.isScalarValue=_m});var ds=I(Kc=>{"use strict";var km=ls(),ht=$(),Fc=Q(),vm="tag:yaml.org,2002:";function Tm(n,e,t){if(e){let s=t.filter(i=>i.tag===e),r=s.find(i=>!i.format)??s[0];if(!r)throw new Error(`Tag ${e} not found`);return r}return t.find(s=>s.identify?.(n)&&!s.format)}function Im(n,e,t){if(ht.isDocument(n)&&(n=n.contents),ht.isNode(n))return n;if(ht.isPair(n)){let u=t.schema[ht.MAP].createNode?.(t.schema,null,t);return u.items.push(n),u}(n instanceof String||n instanceof Number||n instanceof Boolean||typeof BigInt<"u"&&n instanceof BigInt)&&(n=n.valueOf());let{aliasDuplicateObjects:s,onAnchor:r,onTagObj:i,schema:o,sourceObjects:a}=t,l;if(s&&n&&typeof n=="object"){if(l=a.get(n),l)return l.anchor??(l.anchor=r(n)),new km.Alias(l.anchor);l={anchor:null,node:null},a.set(n,l)}e?.startsWith("!!")&&(e=vm+e.slice(2));let c=Tm(n,e,o.tags);if(!c){if(n&&typeof n.toJSON=="function"&&(n=n.toJSON()),!n||typeof n!="object"){let u=new Fc.Scalar(n);return l&&(l.node=u),u}c=n instanceof Map?o[ht.MAP]:Symbol.iterator in Object(n)?o[ht.SEQ]:o[ht.MAP]}i&&(i(c),delete t.onTagObj);let d=c?.createNode?c.createNode(t.schema,n,t):typeof c?.nodeClass?.from=="function"?c.nodeClass.from(t.schema,n,t):new Fc.Scalar(n);return e?d.tag=e:c.default||(d.tag=c.tag),l&&(l.node=d),d}Kc.createNode=Im});var yn=I(gn=>{"use strict";var Am=ds(),Ne=$(),Cm=pn();function Ei(n,e,t){let s=t;for(let r=e.length-1;r>=0;--r){let i=e[r];if(typeof i=="number"&&Number.isInteger(i)&&i>=0){let o=[];o[i]=s,s=o}else s=new Map([[i,s]])}return Am.createNode(s,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw new Error("This should not happen, please report a bug.")},schema:n,sourceObjects:new Map})}var Gc=n=>n==null||typeof n=="object"&&!!n[Symbol.iterator]().next().done,Ni=class extends Cm.NodeBase{constructor(e,t){super(e),Object.defineProperty(this,"schema",{value:t,configurable:!0,enumerable:!1,writable:!0})}clone(e){let t=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(t.schema=e),t.items=t.items.map(s=>Ne.isNode(s)||Ne.isPair(s)?s.clone(e):s),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(Gc(e))this.add(t);else{let[s,...r]=e,i=this.get(s,!0);if(Ne.isCollection(i))i.addIn(r,t);else if(i===void 0&&this.schema)this.set(s,Ei(this.schema,r,t));else throw new Error(`Expected YAML collection at ${s}. Remaining path: ${r}`)}}deleteIn(e){let[t,...s]=e;if(s.length===0)return this.delete(t);let r=this.get(t,!0);if(Ne.isCollection(r))return r.deleteIn(s);throw new Error(`Expected YAML collection at ${t}. Remaining path: ${s}`)}getIn(e,t){let[s,...r]=e,i=this.get(s,!0);return r.length===0?!t&&Ne.isScalar(i)?i.value:i:Ne.isCollection(i)?i.getIn(r,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!Ne.isPair(t))return!1;let s=t.value;return s==null||e&&Ne.isScalar(s)&&s.value==null&&!s.commentBefore&&!s.comment&&!s.tag})}hasIn(e){let[t,...s]=e;if(s.length===0)return this.has(t);let r=this.get(t,!0);return Ne.isCollection(r)?r.hasIn(s):!1}setIn(e,t){let[s,...r]=e;if(r.length===0)this.set(s,t);else{let i=this.get(s,!0);if(Ne.isCollection(i))i.setIn(r,t);else if(i===void 0&&this.schema)this.set(s,Ei(this.schema,r,t));else throw new Error(`Expected YAML collection at ${s}. Remaining path: ${r}`)}}};gn.Collection=Ni;gn.collectionFromPath=Ei;gn.isEmptyPath=Gc});var us=I(wn=>{"use strict";var Em=n=>n.replace(/^(?!$)(?: $)?/gm,"#");function Oi(n,e){return/^\n+$/.test(n)?n.substring(1):e?n.replace(/^(?! *$)/gm,e):n}var Nm=(n,e,t)=>n.endsWith(`
7
+ `)?Oi(t,e):t.includes(`
8
8
  `)?`
9
- `+Ni(t,e):(n.endsWith(" ")?"":" ")+t;Sn.indentComment=Ni;Sn.lineComment=Tm;Sn.stringifyComment=vm});var Gc=T(fs=>{"use strict";var Im="flow",Oi="block",bn="quoted";function Am(n,e,t="flow",{indentAtStart:s,lineWidth:r=80,minContentWidth:i=20,onFold:o,onOverflow:a}={}){if(!r||r<0)return n;r<i&&(i=0);let l=Math.max(1+i,1+r-e.length);if(n.length<=l)return n;let c=[],d={},u=r-e.length;typeof s=="number"&&(s>r-Math.max(2,i)?c.push(0):u=r-s);let h,p,g=!1,f=-1,y=-1,w=-1;t===Oi&&(f=Kc(n,f,e.length),f!==-1&&(u=f+l));for(let b;b=n[f+=1];){if(t===bn&&b==="\\"){switch(y=f,n[f+1]){case"x":f+=3;break;case"u":f+=5;break;case"U":f+=9;break;default:f+=1}w=f}if(b===`
10
- `)t===Oi&&(f=Kc(n,f,e.length)),u=f+e.length+l,h=void 0;else{if(b===" "&&p&&p!==" "&&p!==`
9
+ `+Oi(t,e):(n.endsWith(" ")?"":" ")+t;wn.indentComment=Oi;wn.lineComment=Nm;wn.stringifyComment=Em});var Wc=I(hs=>{"use strict";var Om="flow",xi="block",Sn="quoted";function xm(n,e,t="flow",{indentAtStart:s,lineWidth:r=80,minContentWidth:i=20,onFold:o,onOverflow:a}={}){if(!r||r<0)return n;r<i&&(i=0);let l=Math.max(1+i,1+r-e.length);if(n.length<=l)return n;let c=[],d={},u=r-e.length;typeof s=="number"&&(s>r-Math.max(2,i)?c.push(0):u=r-s);let h,p,g=!1,f=-1,y=-1,w=-1;t===xi&&(f=Hc(n,f,e.length),f!==-1&&(u=f+l));for(let b;b=n[f+=1];){if(t===Sn&&b==="\\"){switch(y=f,n[f+1]){case"x":f+=3;break;case"u":f+=5;break;case"U":f+=9;break;default:f+=1}w=f}if(b===`
10
+ `)t===xi&&(f=Hc(n,f,e.length)),u=f+e.length+l,h=void 0;else{if(b===" "&&p&&p!==" "&&p!==`
11
11
  `&&p!==" "){let A=n[f+1];A&&A!==" "&&A!==`
12
- `&&A!==" "&&(h=f)}if(f>=u)if(h)c.push(h),u=h+l,h=void 0;else if(t===bn){for(;p===" "||p===" ";)p=b,b=n[f+=1],g=!0;let A=f>w+1?f-2:y-1;if(d[A])return n;c.push(A),d[A]=!0,u=A+l,h=void 0}else g=!0}p=b}if(g&&a&&a(),c.length===0)return n;o&&o();let S=n.slice(0,c[0]);for(let b=0;b<c.length;++b){let A=c[b],v=c[b+1]||n.length;A===0?S=`
13
- ${e}${n.slice(0,v)}`:(t===bn&&d[A]&&(S+=`${n[A]}\\`),S+=`
14
- ${e}${n.slice(A+1,v)}`)}return S}function Kc(n,e,t){let s=e,r=e+1,i=n[r];for(;i===" "||i===" ";)if(e<r+t)i=n[++e];else{do i=n[++e];while(i&&i!==`
15
- `);s=e,r=e+1,i=n[r]}return s}fs.FOLD_BLOCK=Oi;fs.FOLD_FLOW=Im;fs.FOLD_QUOTED=bn;fs.foldFlowLines=Am});var ms=T(Hc=>{"use strict";var Te=Q(),Ze=Gc(),kn=(n,e)=>({indentAtStart:e?n.indent.length:n.indentAtStart,lineWidth:n.options.lineWidth,minContentWidth:n.options.minContentWidth}),vn=n=>/^(%|---|\.\.\.)/m.test(n);function Cm(n,e,t){if(!e||e<0)return!1;let s=e-t,r=n.length;if(r<=s)return!1;for(let i=0,o=0;i<r;++i)if(n[i]===`
16
- `){if(i-o>s)return!0;if(o=i+1,r-o<=s)return!1}return!0}function ps(n,e){let t=JSON.stringify(n);if(e.options.doubleQuotedAsJSON)return t;let{implicitKey:s}=e,r=e.options.doubleQuotedMinMultiLineLength,i=e.indent||(vn(n)?" ":""),o="",a=0;for(let l=0,c=t[l];c;c=t[++l])if(c===" "&&t[l+1]==="\\"&&t[l+2]==="n"&&(o+=t.slice(a,l)+"\\ ",l+=1,a=l,c="\\"),c==="\\")switch(t[l+1]){case"u":{o+=t.slice(a,l);let d=t.substr(l+2,4);switch(d){case"0000":o+="\\0";break;case"0007":o+="\\a";break;case"000b":o+="\\v";break;case"001b":o+="\\e";break;case"0085":o+="\\N";break;case"00a0":o+="\\_";break;case"2028":o+="\\L";break;case"2029":o+="\\P";break;default:d.substr(0,2)==="00"?o+="\\x"+d.substr(2):o+=t.substr(l,6)}l+=5,a=l+1}break;case"n":if(s||t[l+2]==='"'||t.length<r)l+=1;else{for(o+=t.slice(a,l)+`
12
+ `&&A!==" "&&(h=f)}if(f>=u)if(h)c.push(h),u=h+l,h=void 0;else if(t===Sn){for(;p===" "||p===" ";)p=b,b=n[f+=1],g=!0;let A=f>w+1?f-2:y-1;if(d[A])return n;c.push(A),d[A]=!0,u=A+l,h=void 0}else g=!0}p=b}if(g&&a&&a(),c.length===0)return n;o&&o();let S=n.slice(0,c[0]);for(let b=0;b<c.length;++b){let A=c[b],v=c[b+1]||n.length;A===0?S=`
13
+ ${e}${n.slice(0,v)}`:(t===Sn&&d[A]&&(S+=`${n[A]}\\`),S+=`
14
+ ${e}${n.slice(A+1,v)}`)}return S}function Hc(n,e,t){let s=e,r=e+1,i=n[r];for(;i===" "||i===" ";)if(e<r+t)i=n[++e];else{do i=n[++e];while(i&&i!==`
15
+ `);s=e,r=e+1,i=n[r]}return s}hs.FOLD_BLOCK=xi;hs.FOLD_FLOW=Om;hs.FOLD_QUOTED=Sn;hs.foldFlowLines=xm});var ps=I(Vc=>{"use strict";var Te=Q(),et=Wc(),_n=(n,e)=>({indentAtStart:e?n.indent.length:n.indentAtStart,lineWidth:n.options.lineWidth,minContentWidth:n.options.minContentWidth}),kn=n=>/^(%|---|\.\.\.)/m.test(n);function Mm(n,e,t){if(!e||e<0)return!1;let s=e-t,r=n.length;if(r<=s)return!1;for(let i=0,o=0;i<r;++i)if(n[i]===`
16
+ `){if(i-o>s)return!0;if(o=i+1,r-o<=s)return!1}return!0}function fs(n,e){let t=JSON.stringify(n);if(e.options.doubleQuotedAsJSON)return t;let{implicitKey:s}=e,r=e.options.doubleQuotedMinMultiLineLength,i=e.indent||(kn(n)?" ":""),o="",a=0;for(let l=0,c=t[l];c;c=t[++l])if(c===" "&&t[l+1]==="\\"&&t[l+2]==="n"&&(o+=t.slice(a,l)+"\\ ",l+=1,a=l,c="\\"),c==="\\")switch(t[l+1]){case"u":{o+=t.slice(a,l);let d=t.substr(l+2,4);switch(d){case"0000":o+="\\0";break;case"0007":o+="\\a";break;case"000b":o+="\\v";break;case"001b":o+="\\e";break;case"0085":o+="\\N";break;case"00a0":o+="\\_";break;case"2028":o+="\\L";break;case"2029":o+="\\P";break;default:d.substr(0,2)==="00"?o+="\\x"+d.substr(2):o+=t.substr(l,6)}l+=5,a=l+1}break;case"n":if(s||t[l+2]==='"'||t.length<r)l+=1;else{for(o+=t.slice(a,l)+`
17
17
 
18
18
  `;t[l+2]==="\\"&&t[l+3]==="n"&&t[l+4]!=='"';)o+=`
19
- `,l+=2;o+=i,t[l+2]===" "&&(o+="\\"),l+=1,a=l+1}break;default:l+=1}return o=a?o+t.slice(a):t,s?o:Ze.foldFlowLines(o,i,Ze.FOLD_QUOTED,kn(e,!1))}function xi(n,e){if(e.options.singleQuote===!1||e.implicitKey&&n.includes(`
20
- `)||/[ \t]\n|\n[ \t]/.test(n))return ps(n,e);let t=e.indent||(vn(n)?" ":""),s="'"+n.replace(/'/g,"''").replace(/\n+/g,`$&
21
- ${t}`)+"'";return e.implicitKey?s:Ze.foldFlowLines(s,t,Ze.FOLD_FLOW,kn(e,!1))}function $t(n,e){let{singleQuote:t}=e.options,s;if(t===!1)s=ps;else{let r=n.includes('"'),i=n.includes("'");r&&!i?s=xi:i&&!r?s=ps:s=t?xi:ps}return s(n,e)}var Mi;try{Mi=new RegExp(`(^|(?<!
19
+ `,l+=2;o+=i,t[l+2]===" "&&(o+="\\"),l+=1,a=l+1}break;default:l+=1}return o=a?o+t.slice(a):t,s?o:et.foldFlowLines(o,i,et.FOLD_QUOTED,_n(e,!1))}function Mi(n,e){if(e.options.singleQuote===!1||e.implicitKey&&n.includes(`
20
+ `)||/[ \t]\n|\n[ \t]/.test(n))return fs(n,e);let t=e.indent||(kn(n)?" ":""),s="'"+n.replace(/'/g,"''").replace(/\n+/g,`$&
21
+ ${t}`)+"'";return e.implicitKey?s:et.foldFlowLines(s,t,et.FOLD_FLOW,_n(e,!1))}function Lt(n,e){let{singleQuote:t}=e.options,s;if(t===!1)s=fs;else{let r=n.includes('"'),i=n.includes("'");r&&!i?s=Mi:i&&!r?s=fs:s=t?Mi:fs}return s(n,e)}var Di;try{Di=new RegExp(`(^|(?<!
22
22
  ))
23
23
  +(?!
24
- |$)`,"g")}catch{Mi=/\n+(?!\n|$)/g}function _n({comment:n,type:e,value:t},s,r,i){let{blockQuote:o,commentString:a,lineWidth:l}=s.options;if(!o||/\n[\t ]+$/.test(t))return $t(t,s);let c=s.indent||(s.forceBlockIndent||vn(t)?" ":""),d=o==="literal"?!0:o==="folded"||e===Te.Scalar.BLOCK_FOLDED?!1:e===Te.Scalar.BLOCK_LITERAL?!0:!Cm(t,l,c.length);if(!t)return d?`|
24
+ |$)`,"g")}catch{Di=/\n+(?!\n|$)/g}function bn({comment:n,type:e,value:t},s,r,i){let{blockQuote:o,commentString:a,lineWidth:l}=s.options;if(!o||/\n[\t ]+$/.test(t))return Lt(t,s);let c=s.indent||(s.forceBlockIndent||kn(t)?" ":""),d=o==="literal"?!0:o==="folded"||e===Te.Scalar.BLOCK_FOLDED?!1:e===Te.Scalar.BLOCK_LITERAL?!0:!Mm(t,l,c.length);if(!t)return d?`|
25
25
  `:`>
26
26
  `;let u,h;for(h=t.length;h>0;--h){let v=t[h-1];if(v!==`
27
27
  `&&v!==" "&&v!==" ")break}let p=t.substring(h),g=p.indexOf(`
28
28
  `);g===-1?u="-":t===p||g!==p.length-1?(u="+",i&&i()):u="",p&&(t=t.slice(0,-p.length),p[p.length-1]===`
29
- `&&(p=p.slice(0,-1)),p=p.replace(Mi,`$&${c}`));let f=!1,y,w=-1;for(y=0;y<t.length;++y){let v=t[y];if(v===" ")f=!0;else if(v===`
29
+ `&&(p=p.slice(0,-1)),p=p.replace(Di,`$&${c}`));let f=!1,y,w=-1;for(y=0;y<t.length;++y){let v=t[y];if(v===" ")f=!0;else if(v===`
30
30
  `)w=y;else break}let S=t.substring(0,w<y?w+1:y);S&&(t=t.substring(S.length),S=S.replace(/\n+/g,`$&${c}`));let A=(f?c?"2":"1":"")+u;if(n&&(A+=" "+a(n.replace(/ ?[\r\n]+/g," ")),r&&r()),!d){let v=t.replace(/\n+/g,`
31
- $&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${c}`),C=!1,M=kn(s,!0);o!=="folded"&&e!==Te.Scalar.BLOCK_FOLDED&&(M.onOverflow=()=>{C=!0});let _=Ze.foldFlowLines(`${S}${v}${p}`,c,Ze.FOLD_BLOCK,M);if(!C)return`>${A}
31
+ $&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${c}`),C=!1,M=_n(s,!0);o!=="folded"&&e!==Te.Scalar.BLOCK_FOLDED&&(M.onOverflow=()=>{C=!0});let _=et.foldFlowLines(`${S}${v}${p}`,c,et.FOLD_BLOCK,M);if(!C)return`>${A}
32
32
  ${c}${_}`}return t=t.replace(/\n+/g,`$&${c}`),`|${A}
33
- ${c}${S}${t}${p}`}function Em(n,e,t,s){let{type:r,value:i}=n,{actualString:o,implicitKey:a,indent:l,indentStep:c,inFlow:d}=e;if(a&&i.includes(`
34
- `)||d&&/[[\]{},]/.test(i))return $t(i,e);if(/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(i))return a||d||!i.includes(`
35
- `)?$t(i,e):_n(n,e,t,s);if(!a&&!d&&r!==Te.Scalar.PLAIN&&i.includes(`
36
- `))return _n(n,e,t,s);if(vn(i)){if(l==="")return e.forceBlockIndent=!0,_n(n,e,t,s);if(a&&l===c)return $t(i,e)}let u=i.replace(/\n+/g,`$&
37
- ${l}`);if(o){let h=f=>f.default&&f.tag!=="tag:yaml.org,2002:str"&&f.test?.test(u),{compat:p,tags:g}=e.doc.schema;if(g.some(h)||p?.some(h))return $t(i,e)}return a?u:Ze.foldFlowLines(u,l,Ze.FOLD_FLOW,kn(e,!1))}function Nm(n,e,t,s){let{implicitKey:r,inFlow:i}=e,o=typeof n.value=="string"?n:Object.assign({},n,{value:String(n.value)}),{type:a}=n;a!==Te.Scalar.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(o.value)&&(a=Te.Scalar.QUOTE_DOUBLE);let l=d=>{switch(d){case Te.Scalar.BLOCK_FOLDED:case Te.Scalar.BLOCK_LITERAL:return r||i?$t(o.value,e):_n(o,e,t,s);case Te.Scalar.QUOTE_DOUBLE:return ps(o.value,e);case Te.Scalar.QUOTE_SINGLE:return xi(o.value,e);case Te.Scalar.PLAIN:return Em(o,e,t,s);default:return null}},c=l(a);if(c===null){let{defaultKeyType:d,defaultStringType:u}=e.options,h=r&&d||u;if(c=l(h),c===null)throw new Error(`Unsupported default string type ${h}`)}return c}Hc.stringifyString=Nm});var gs=T(Di=>{"use strict";var Om=pn(),et=$(),xm=hs(),Mm=ms();function Dm(n,e){let t=Object.assign({blockQuote:!0,commentString:xm.stringifyComment,defaultKeyType:null,defaultStringType:"PLAIN",directives:null,doubleQuotedAsJSON:!1,doubleQuotedMinMultiLineLength:40,falseStr:"false",flowCollectionPadding:!0,indentSeq:!0,lineWidth:80,minContentWidth:20,nullStr:"null",simpleKeys:!1,singleQuote:null,trailingComma:!1,trueStr:"true",verifyAliasOrder:!0},n.schema.toStringOptions,e),s;switch(t.collectionStyle){case"block":s=!1;break;case"flow":s=!0;break;default:s=null}return{anchors:new Set,doc:n,flowCollectionPadding:t.flowCollectionPadding?" ":"",indent:"",indentStep:typeof t.indent=="number"?" ".repeat(t.indent):" ",inFlow:s,options:t}}function Lm(n,e){if(e.tag){let r=n.filter(i=>i.tag===e.tag);if(r.length>0)return r.find(i=>i.format===e.format)??r[0]}let t,s;if(et.isScalar(e)){s=e.value;let r=n.filter(i=>i.identify?.(s));if(r.length>1){let i=r.filter(o=>o.test);i.length>0&&(r=i)}t=r.find(i=>i.format===e.format)??r.find(i=>!i.format)}else s=e,t=n.find(r=>r.nodeClass&&s instanceof r.nodeClass);if(!t){let r=s?.constructor?.name??(s===null?"null":typeof s);throw new Error(`Tag not resolved for ${r} value`)}return t}function Pm(n,e,{anchors:t,doc:s}){if(!s.directives)return"";let r=[],i=(et.isScalar(n)||et.isCollection(n))&&n.anchor;i&&Om.anchorIsValid(i)&&(t.add(i),r.push(`&${i}`));let o=n.tag??(e.default?null:e.tag);return o&&r.push(s.directives.tagString(o)),r.join(" ")}function $m(n,e,t,s){if(et.isPair(n))return n.toString(e,t,s);if(et.isAlias(n)){if(e.doc.directives)return n.toString(e);if(e.resolvedAliases?.has(n))throw new TypeError("Cannot stringify circular structure without alias nodes");e.resolvedAliases?e.resolvedAliases.add(n):e.resolvedAliases=new Set([n]),n=n.resolve(e.doc)}let r,i=et.isNode(n)?n:e.doc.createNode(n,{onTagObj:l=>r=l});r??(r=Lm(e.doc.schema.tags,i));let o=Pm(i,r,e);o.length>0&&(e.indentAtStart=(e.indentAtStart??0)+o.length+1);let a=typeof r.stringify=="function"?r.stringify(i,e,t,s):et.isScalar(i)?Mm.stringifyString(i,e,t,s):i.toString(e,t,s);return o?et.isScalar(i)||a[0]==="{"||a[0]==="["?`${o} ${a}`:`${o}
38
- ${e.indent}${a}`:a}Di.createStringifyContext=Dm;Di.stringify=$m});var Jc=T(Yc=>{"use strict";var Be=$(),Wc=Q(),Vc=gs(),ys=hs();function Rm({key:n,value:e},t,s,r){let{allNullValues:i,doc:o,indent:a,indentStep:l,options:{commentString:c,indentSeq:d,simpleKeys:u}}=t,h=Be.isNode(n)&&n.comment||null;if(u){if(h)throw new Error("With simple keys, key nodes cannot have comments");if(Be.isCollection(n)||!Be.isNode(n)&&typeof n=="object"){let M="With simple keys, collection cannot be used as a key value";throw new Error(M)}}let p=!u&&(!n||h&&e==null&&!t.inFlow||Be.isCollection(n)||(Be.isScalar(n)?n.type===Wc.Scalar.BLOCK_FOLDED||n.type===Wc.Scalar.BLOCK_LITERAL:typeof n=="object"));t=Object.assign({},t,{allNullValues:!1,implicitKey:!p&&(u||!i),indent:a+l});let g=!1,f=!1,y=Vc.stringify(n,t,()=>g=!0,()=>f=!0);if(!p&&!t.inFlow&&y.length>1024){if(u)throw new Error("With simple keys, single line scalar must not span more than 1024 characters");p=!0}if(t.inFlow){if(i||e==null)return g&&s&&s(),y===""?"?":p?`? ${y}`:y}else if(i&&!u||e==null&&p)return y=`? ${y}`,h&&!g?y+=ys.lineComment(y,t.indent,c(h)):f&&r&&r(),y;g&&(h=null),p?(h&&(y+=ys.lineComment(y,t.indent,c(h))),y=`? ${y}
39
- ${a}:`):(y=`${y}:`,h&&(y+=ys.lineComment(y,t.indent,c(h))));let w,S,b;Be.isNode(e)?(w=!!e.spaceBefore,S=e.commentBefore,b=e.comment):(w=!1,S=null,b=null,e&&typeof e=="object"&&(e=o.createNode(e))),t.implicitKey=!1,!p&&!h&&Be.isScalar(e)&&(t.indentAtStart=y.length+1),f=!1,!d&&l.length>=2&&!t.inFlow&&!p&&Be.isSeq(e)&&!e.flow&&!e.tag&&!e.anchor&&(t.indent=t.indent.substring(2));let A=!1,v=Vc.stringify(e,t,()=>A=!0,()=>f=!0),C=" ";if(h||w||S){if(C=w?`
33
+ ${c}${S}${t}${p}`}function Dm(n,e,t,s){let{type:r,value:i}=n,{actualString:o,implicitKey:a,indent:l,indentStep:c,inFlow:d}=e;if(a&&i.includes(`
34
+ `)||d&&/[[\]{},]/.test(i))return Lt(i,e);if(/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(i))return a||d||!i.includes(`
35
+ `)?Lt(i,e):bn(n,e,t,s);if(!a&&!d&&r!==Te.Scalar.PLAIN&&i.includes(`
36
+ `))return bn(n,e,t,s);if(kn(i)){if(l==="")return e.forceBlockIndent=!0,bn(n,e,t,s);if(a&&l===c)return Lt(i,e)}let u=i.replace(/\n+/g,`$&
37
+ ${l}`);if(o){let h=f=>f.default&&f.tag!=="tag:yaml.org,2002:str"&&f.test?.test(u),{compat:p,tags:g}=e.doc.schema;if(g.some(h)||p?.some(h))return Lt(i,e)}return a?u:et.foldFlowLines(u,l,et.FOLD_FLOW,_n(e,!1))}function Lm(n,e,t,s){let{implicitKey:r,inFlow:i}=e,o=typeof n.value=="string"?n:Object.assign({},n,{value:String(n.value)}),{type:a}=n;a!==Te.Scalar.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(o.value)&&(a=Te.Scalar.QUOTE_DOUBLE);let l=d=>{switch(d){case Te.Scalar.BLOCK_FOLDED:case Te.Scalar.BLOCK_LITERAL:return r||i?Lt(o.value,e):bn(o,e,t,s);case Te.Scalar.QUOTE_DOUBLE:return fs(o.value,e);case Te.Scalar.QUOTE_SINGLE:return Mi(o.value,e);case Te.Scalar.PLAIN:return Dm(o,e,t,s);default:return null}},c=l(a);if(c===null){let{defaultKeyType:d,defaultStringType:u}=e.options,h=r&&d||u;if(c=l(h),c===null)throw new Error(`Unsupported default string type ${h}`)}return c}Vc.stringifyString=Lm});var ms=I(Li=>{"use strict";var Pm=fn(),tt=$(),$m=us(),Rm=ps();function Bm(n,e){let t=Object.assign({blockQuote:!0,commentString:$m.stringifyComment,defaultKeyType:null,defaultStringType:"PLAIN",directives:null,doubleQuotedAsJSON:!1,doubleQuotedMinMultiLineLength:40,falseStr:"false",flowCollectionPadding:!0,indentSeq:!0,lineWidth:80,minContentWidth:20,nullStr:"null",simpleKeys:!1,singleQuote:null,trailingComma:!1,trueStr:"true",verifyAliasOrder:!0},n.schema.toStringOptions,e),s;switch(t.collectionStyle){case"block":s=!1;break;case"flow":s=!0;break;default:s=null}return{anchors:new Set,doc:n,flowCollectionPadding:t.flowCollectionPadding?" ":"",indent:"",indentStep:typeof t.indent=="number"?" ".repeat(t.indent):" ",inFlow:s,options:t}}function Um(n,e){if(e.tag){let r=n.filter(i=>i.tag===e.tag);if(r.length>0)return r.find(i=>i.format===e.format)??r[0]}let t,s;if(tt.isScalar(e)){s=e.value;let r=n.filter(i=>i.identify?.(s));if(r.length>1){let i=r.filter(o=>o.test);i.length>0&&(r=i)}t=r.find(i=>i.format===e.format)??r.find(i=>!i.format)}else s=e,t=n.find(r=>r.nodeClass&&s instanceof r.nodeClass);if(!t){let r=s?.constructor?.name??(s===null?"null":typeof s);throw new Error(`Tag not resolved for ${r} value`)}return t}function qm(n,e,{anchors:t,doc:s}){if(!s.directives)return"";let r=[],i=(tt.isScalar(n)||tt.isCollection(n))&&n.anchor;i&&Pm.anchorIsValid(i)&&(t.add(i),r.push(`&${i}`));let o=n.tag??(e.default?null:e.tag);return o&&r.push(s.directives.tagString(o)),r.join(" ")}function jm(n,e,t,s){if(tt.isPair(n))return n.toString(e,t,s);if(tt.isAlias(n)){if(e.doc.directives)return n.toString(e);if(e.resolvedAliases?.has(n))throw new TypeError("Cannot stringify circular structure without alias nodes");e.resolvedAliases?e.resolvedAliases.add(n):e.resolvedAliases=new Set([n]),n=n.resolve(e.doc)}let r,i=tt.isNode(n)?n:e.doc.createNode(n,{onTagObj:l=>r=l});r??(r=Um(e.doc.schema.tags,i));let o=qm(i,r,e);o.length>0&&(e.indentAtStart=(e.indentAtStart??0)+o.length+1);let a=typeof r.stringify=="function"?r.stringify(i,e,t,s):tt.isScalar(i)?Rm.stringifyString(i,e,t,s):i.toString(e,t,s);return o?tt.isScalar(i)||a[0]==="{"||a[0]==="["?`${o} ${a}`:`${o}
38
+ ${e.indent}${a}`:a}Li.createStringifyContext=Bm;Li.stringify=jm});var Qc=I(zc=>{"use strict";var Be=$(),Yc=Q(),Jc=ms(),gs=us();function Fm({key:n,value:e},t,s,r){let{allNullValues:i,doc:o,indent:a,indentStep:l,options:{commentString:c,indentSeq:d,simpleKeys:u}}=t,h=Be.isNode(n)&&n.comment||null;if(u){if(h)throw new Error("With simple keys, key nodes cannot have comments");if(Be.isCollection(n)||!Be.isNode(n)&&typeof n=="object"){let M="With simple keys, collection cannot be used as a key value";throw new Error(M)}}let p=!u&&(!n||h&&e==null&&!t.inFlow||Be.isCollection(n)||(Be.isScalar(n)?n.type===Yc.Scalar.BLOCK_FOLDED||n.type===Yc.Scalar.BLOCK_LITERAL:typeof n=="object"));t=Object.assign({},t,{allNullValues:!1,implicitKey:!p&&(u||!i),indent:a+l});let g=!1,f=!1,y=Jc.stringify(n,t,()=>g=!0,()=>f=!0);if(!p&&!t.inFlow&&y.length>1024){if(u)throw new Error("With simple keys, single line scalar must not span more than 1024 characters");p=!0}if(t.inFlow){if(i||e==null)return g&&s&&s(),y===""?"?":p?`? ${y}`:y}else if(i&&!u||e==null&&p)return y=`? ${y}`,h&&!g?y+=gs.lineComment(y,t.indent,c(h)):f&&r&&r(),y;g&&(h=null),p?(h&&(y+=gs.lineComment(y,t.indent,c(h))),y=`? ${y}
39
+ ${a}:`):(y=`${y}:`,h&&(y+=gs.lineComment(y,t.indent,c(h))));let w,S,b;Be.isNode(e)?(w=!!e.spaceBefore,S=e.commentBefore,b=e.comment):(w=!1,S=null,b=null,e&&typeof e=="object"&&(e=o.createNode(e))),t.implicitKey=!1,!p&&!h&&Be.isScalar(e)&&(t.indentAtStart=y.length+1),f=!1,!d&&l.length>=2&&!t.inFlow&&!p&&Be.isSeq(e)&&!e.flow&&!e.tag&&!e.anchor&&(t.indent=t.indent.substring(2));let A=!1,v=Jc.stringify(e,t,()=>A=!0,()=>f=!0),C=" ";if(h||w||S){if(C=w?`
40
40
  `:"",S){let M=c(S);C+=`
41
- ${ys.indentComment(M,t.indent)}`}v===""&&!t.inFlow?C===`
41
+ ${gs.indentComment(M,t.indent)}`}v===""&&!t.inFlow?C===`
42
42
  `&&b&&(C=`
43
43
 
44
44
  `):C+=`
45
45
  ${t.indent}`}else if(!p&&Be.isCollection(e)){let M=v[0],_=v.indexOf(`
46
- `),L=_!==-1,j=t.inFlow??e.flow??e.items.length===0;if(L||!j){let J=!1;if(L&&(M==="&"||M==="!")){let K=v.indexOf(" ");M==="&"&&K!==-1&&K<_&&v[K+1]==="!"&&(K=v.indexOf(" ",K+1)),(K===-1||_<K)&&(J=!0)}J||(C=`
46
+ `),P=_!==-1,U=t.inFlow??e.flow??e.items.length===0;if(P||!U){let z=!1;if(P&&(M==="&"||M==="!")){let j=v.indexOf(" ");M==="&"&&j!==-1&&j<_&&v[j+1]==="!"&&(j=v.indexOf(" ",j+1)),(j===-1||_<j)&&(z=!0)}z||(C=`
47
47
  ${t.indent}`)}}else(v===""||v[0]===`
48
- `)&&(C="");return y+=C+v,t.inFlow?A&&s&&s():b&&!A?y+=ys.lineComment(y,t.indent,c(b)):f&&r&&r(),y}Yc.stringifyPair=Rm});var Pi=T(Li=>{"use strict";var zc=F("process");function Bm(n,...e){n==="debug"&&console.log(...e)}function Um(n,e){(n==="debug"||n==="warn")&&(typeof zc.emitWarning=="function"?zc.emitWarning(e):console.warn(e))}Li.debug=Bm;Li.warn=Um});var Cn=T(An=>{"use strict";var ws=$(),Qc=Q(),Tn="<<",In={identify:n=>n===Tn||typeof n=="symbol"&&n.description===Tn,default:"key",tag:"tag:yaml.org,2002:merge",test:/^<<$/,resolve:()=>Object.assign(new Qc.Scalar(Symbol(Tn)),{addToJSMap:Xc}),stringify:()=>Tn},qm=(n,e)=>(In.identify(e)||ws.isScalar(e)&&(!e.type||e.type===Qc.Scalar.PLAIN)&&In.identify(e.value))&&n?.doc.schema.tags.some(t=>t.tag===In.tag&&t.default);function Xc(n,e,t){if(t=n&&ws.isAlias(t)?t.resolve(n.doc):t,ws.isSeq(t))for(let s of t.items)$i(n,e,s);else if(Array.isArray(t))for(let s of t)$i(n,e,s);else $i(n,e,t)}function $i(n,e,t){let s=n&&ws.isAlias(t)?t.resolve(n.doc):t;if(!ws.isMap(s))throw new Error("Merge sources must be maps or map aliases");let r=s.toJSON(null,n,Map);for(let[i,o]of r)e instanceof Map?e.has(i)||e.set(i,o):e instanceof Set?e.add(i):Object.prototype.hasOwnProperty.call(e,i)||Object.defineProperty(e,i,{value:o,writable:!0,enumerable:!0,configurable:!0});return e}An.addMergeToJSMap=Xc;An.isMergeKey=qm;An.merge=In});var Bi=T(tl=>{"use strict";var jm=Pi(),Zc=Cn(),Fm=gs(),el=$(),Ri=Qe();function Km(n,e,{key:t,value:s}){if(el.isNode(t)&&t.addToJSMap)t.addToJSMap(n,e,s);else if(Zc.isMergeKey(n,t))Zc.addMergeToJSMap(n,e,s);else{let r=Ri.toJS(t,"",n);if(e instanceof Map)e.set(r,Ri.toJS(s,r,n));else if(e instanceof Set)e.add(r);else{let i=Gm(t,r,n),o=Ri.toJS(s,i,n);i in e?Object.defineProperty(e,i,{value:o,writable:!0,enumerable:!0,configurable:!0}):e[i]=o}}return e}function Gm(n,e,t){if(e===null)return"";if(typeof e!="object")return String(e);if(el.isNode(n)&&t?.doc){let s=Fm.createStringifyContext(t.doc,{});s.anchors=new Set;for(let i of t.anchors.keys())s.anchors.add(i.anchor);s.inFlow=!0,s.inStringifyKey=!0;let r=n.toString(s);if(!t.mapKeyWarned){let i=JSON.stringify(r);i.length>40&&(i=i.substring(0,36)+'..."'),jm.warn(t.doc.options.logLevel,`Keys with collection values will be stringified due to JS Object restrictions: ${i}. Set mapAsMap: true to use object keys.`),t.mapKeyWarned=!0}return r}return JSON.stringify(e)}tl.addPairToJSMap=Km});var tt=T(Ui=>{"use strict";var sl=us(),Hm=Jc(),Wm=Bi(),En=$();function Vm(n,e,t){let s=sl.createNode(n,void 0,t),r=sl.createNode(e,void 0,t);return new Nn(s,r)}var Nn=class n{constructor(e,t=null){Object.defineProperty(this,En.NODE_TYPE,{value:En.PAIR}),this.key=e,this.value=t}clone(e){let{key:t,value:s}=this;return En.isNode(t)&&(t=t.clone(e)),En.isNode(s)&&(s=s.clone(e)),new n(t,s)}toJSON(e,t){let s=t?.mapAsMap?new Map:{};return Wm.addPairToJSMap(t,s,this)}toString(e,t,s){return e?.doc?Hm.stringifyPair(this,e,t,s):JSON.stringify(this)}};Ui.Pair=Nn;Ui.createPair=Vm});var qi=T(rl=>{"use strict";var ft=$(),nl=gs(),On=hs();function Ym(n,e,t){return(e.inFlow??n.flow?zm:Jm)(n,e,t)}function Jm({comment:n,items:e},t,{blockItemPrefix:s,flowChars:r,itemIndent:i,onChompKeep:o,onComment:a}){let{indent:l,options:{commentString:c}}=t,d=Object.assign({},t,{indent:i,type:null}),u=!1,h=[];for(let g=0;g<e.length;++g){let f=e[g],y=null;if(ft.isNode(f))!u&&f.spaceBefore&&h.push(""),xn(t,h,f.commentBefore,u),f.comment&&(y=f.comment);else if(ft.isPair(f)){let S=ft.isNode(f.key)?f.key:null;S&&(!u&&S.spaceBefore&&h.push(""),xn(t,h,S.commentBefore,u))}u=!1;let w=nl.stringify(f,d,()=>y=null,()=>u=!0);y&&(w+=On.lineComment(w,i,c(y))),u&&y&&(u=!1),h.push(s+w)}let p;if(h.length===0)p=r.start+r.end;else{p=h[0];for(let g=1;g<h.length;++g){let f=h[g];p+=f?`
48
+ `)&&(C="");return y+=C+v,t.inFlow?A&&s&&s():b&&!A?y+=gs.lineComment(y,t.indent,c(b)):f&&r&&r(),y}zc.stringifyPair=Fm});var $i=I(Pi=>{"use strict";var Xc=K("process");function Km(n,...e){n==="debug"&&console.log(...e)}function Gm(n,e){(n==="debug"||n==="warn")&&(typeof Xc.emitWarning=="function"?Xc.emitWarning(e):console.warn(e))}Pi.debug=Km;Pi.warn=Gm});var An=I(In=>{"use strict";var ys=$(),Zc=Q(),vn="<<",Tn={identify:n=>n===vn||typeof n=="symbol"&&n.description===vn,default:"key",tag:"tag:yaml.org,2002:merge",test:/^<<$/,resolve:()=>Object.assign(new Zc.Scalar(Symbol(vn)),{addToJSMap:el}),stringify:()=>vn},Hm=(n,e)=>(Tn.identify(e)||ys.isScalar(e)&&(!e.type||e.type===Zc.Scalar.PLAIN)&&Tn.identify(e.value))&&n?.doc.schema.tags.some(t=>t.tag===Tn.tag&&t.default);function el(n,e,t){if(t=n&&ys.isAlias(t)?t.resolve(n.doc):t,ys.isSeq(t))for(let s of t.items)Ri(n,e,s);else if(Array.isArray(t))for(let s of t)Ri(n,e,s);else Ri(n,e,t)}function Ri(n,e,t){let s=n&&ys.isAlias(t)?t.resolve(n.doc):t;if(!ys.isMap(s))throw new Error("Merge sources must be maps or map aliases");let r=s.toJSON(null,n,Map);for(let[i,o]of r)e instanceof Map?e.has(i)||e.set(i,o):e instanceof Set?e.add(i):Object.prototype.hasOwnProperty.call(e,i)||Object.defineProperty(e,i,{value:o,writable:!0,enumerable:!0,configurable:!0});return e}In.addMergeToJSMap=el;In.isMergeKey=Hm;In.merge=Tn});var Ui=I(nl=>{"use strict";var Wm=$i(),tl=An(),Vm=ms(),sl=$(),Bi=Xe();function Ym(n,e,{key:t,value:s}){if(sl.isNode(t)&&t.addToJSMap)t.addToJSMap(n,e,s);else if(tl.isMergeKey(n,t))tl.addMergeToJSMap(n,e,s);else{let r=Bi.toJS(t,"",n);if(e instanceof Map)e.set(r,Bi.toJS(s,r,n));else if(e instanceof Set)e.add(r);else{let i=Jm(t,r,n),o=Bi.toJS(s,i,n);i in e?Object.defineProperty(e,i,{value:o,writable:!0,enumerable:!0,configurable:!0}):e[i]=o}}return e}function Jm(n,e,t){if(e===null)return"";if(typeof e!="object")return String(e);if(sl.isNode(n)&&t?.doc){let s=Vm.createStringifyContext(t.doc,{});s.anchors=new Set;for(let i of t.anchors.keys())s.anchors.add(i.anchor);s.inFlow=!0,s.inStringifyKey=!0;let r=n.toString(s);if(!t.mapKeyWarned){let i=JSON.stringify(r);i.length>40&&(i=i.substring(0,36)+'..."'),Wm.warn(t.doc.options.logLevel,`Keys with collection values will be stringified due to JS Object restrictions: ${i}. Set mapAsMap: true to use object keys.`),t.mapKeyWarned=!0}return r}return JSON.stringify(e)}nl.addPairToJSMap=Ym});var st=I(qi=>{"use strict";var rl=ds(),zm=Qc(),Qm=Ui(),Cn=$();function Xm(n,e,t){let s=rl.createNode(n,void 0,t),r=rl.createNode(e,void 0,t);return new En(s,r)}var En=class n{constructor(e,t=null){Object.defineProperty(this,Cn.NODE_TYPE,{value:Cn.PAIR}),this.key=e,this.value=t}clone(e){let{key:t,value:s}=this;return Cn.isNode(t)&&(t=t.clone(e)),Cn.isNode(s)&&(s=s.clone(e)),new n(t,s)}toJSON(e,t){let s=t?.mapAsMap?new Map:{};return Qm.addPairToJSMap(t,s,this)}toString(e,t,s){return e?.doc?zm.stringifyPair(this,e,t,s):JSON.stringify(this)}};qi.Pair=En;qi.createPair=Xm});var ji=I(ol=>{"use strict";var ft=$(),il=ms(),Nn=us();function Zm(n,e,t){return(e.inFlow??n.flow?tg:eg)(n,e,t)}function eg({comment:n,items:e},t,{blockItemPrefix:s,flowChars:r,itemIndent:i,onChompKeep:o,onComment:a}){let{indent:l,options:{commentString:c}}=t,d=Object.assign({},t,{indent:i,type:null}),u=!1,h=[];for(let g=0;g<e.length;++g){let f=e[g],y=null;if(ft.isNode(f))!u&&f.spaceBefore&&h.push(""),On(t,h,f.commentBefore,u),f.comment&&(y=f.comment);else if(ft.isPair(f)){let S=ft.isNode(f.key)?f.key:null;S&&(!u&&S.spaceBefore&&h.push(""),On(t,h,S.commentBefore,u))}u=!1;let w=il.stringify(f,d,()=>y=null,()=>u=!0);y&&(w+=Nn.lineComment(w,i,c(y))),u&&y&&(u=!1),h.push(s+w)}let p;if(h.length===0)p=r.start+r.end;else{p=h[0];for(let g=1;g<h.length;++g){let f=h[g];p+=f?`
49
49
  ${l}${f}`:`
50
50
  `}}return n?(p+=`
51
- `+On.indentComment(c(n),l),a&&a()):u&&o&&o(),p}function zm({items:n},e,{flowChars:t,itemIndent:s}){let{indent:r,indentStep:i,flowCollectionPadding:o,options:{commentString:a}}=e;s+=i;let l=Object.assign({},e,{indent:s,inFlow:!0,type:null}),c=!1,d=0,u=[];for(let g=0;g<n.length;++g){let f=n[g],y=null;if(ft.isNode(f))f.spaceBefore&&u.push(""),xn(e,u,f.commentBefore,!1),f.comment&&(y=f.comment);else if(ft.isPair(f)){let S=ft.isNode(f.key)?f.key:null;S&&(S.spaceBefore&&u.push(""),xn(e,u,S.commentBefore,!1),S.comment&&(c=!0));let b=ft.isNode(f.value)?f.value:null;b?(b.comment&&(y=b.comment),b.commentBefore&&(c=!0)):f.value==null&&S?.comment&&(y=S.comment)}y&&(c=!0);let w=nl.stringify(f,l,()=>y=null);c||(c=u.length>d||w.includes(`
52
- `)),g<n.length-1?w+=",":e.options.trailingComma&&(e.options.lineWidth>0&&(c||(c=u.reduce((S,b)=>S+b.length+2,2)+(w.length+2)>e.options.lineWidth)),c&&(w+=",")),y&&(w+=On.lineComment(w,s,a(y))),u.push(w),d=u.length}let{start:h,end:p}=t;if(u.length===0)return h+p;if(!c){let g=u.reduce((f,y)=>f+y.length+2,2);c=e.options.lineWidth>0&&g>e.options.lineWidth}if(c){let g=h;for(let f of u)g+=f?`
51
+ `+Nn.indentComment(c(n),l),a&&a()):u&&o&&o(),p}function tg({items:n},e,{flowChars:t,itemIndent:s}){let{indent:r,indentStep:i,flowCollectionPadding:o,options:{commentString:a}}=e;s+=i;let l=Object.assign({},e,{indent:s,inFlow:!0,type:null}),c=!1,d=0,u=[];for(let g=0;g<n.length;++g){let f=n[g],y=null;if(ft.isNode(f))f.spaceBefore&&u.push(""),On(e,u,f.commentBefore,!1),f.comment&&(y=f.comment);else if(ft.isPair(f)){let S=ft.isNode(f.key)?f.key:null;S&&(S.spaceBefore&&u.push(""),On(e,u,S.commentBefore,!1),S.comment&&(c=!0));let b=ft.isNode(f.value)?f.value:null;b?(b.comment&&(y=b.comment),b.commentBefore&&(c=!0)):f.value==null&&S?.comment&&(y=S.comment)}y&&(c=!0);let w=il.stringify(f,l,()=>y=null);c||(c=u.length>d||w.includes(`
52
+ `)),g<n.length-1?w+=",":e.options.trailingComma&&(e.options.lineWidth>0&&(c||(c=u.reduce((S,b)=>S+b.length+2,2)+(w.length+2)>e.options.lineWidth)),c&&(w+=",")),y&&(w+=Nn.lineComment(w,s,a(y))),u.push(w),d=u.length}let{start:h,end:p}=t;if(u.length===0)return h+p;if(!c){let g=u.reduce((f,y)=>f+y.length+2,2);c=e.options.lineWidth>0&&g>e.options.lineWidth}if(c){let g=h;for(let f of u)g+=f?`
53
53
  ${i}${r}${f}`:`
54
54
  `;return`${g}
55
- ${r}${p}`}else return`${h}${o}${u.join(" ")}${o}${p}`}function xn({indent:n,options:{commentString:e}},t,s,r){if(s&&r&&(s=s.replace(/^\n+/,"")),s){let i=On.indentComment(e(s),n);t.push(i.trimStart())}}rl.stringifyCollection=Ym});var nt=T(Fi=>{"use strict";var Qm=qi(),Xm=Bi(),Zm=wn(),st=$(),Mn=tt(),eg=Q();function Ss(n,e){let t=st.isScalar(e)?e.value:e;for(let s of n)if(st.isPair(s)&&(s.key===e||s.key===t||st.isScalar(s.key)&&s.key.value===t))return s}var ji=class extends Zm.Collection{static get tagName(){return"tag:yaml.org,2002:map"}constructor(e){super(st.MAP,e),this.items=[]}static from(e,t,s){let{keepUndefined:r,replacer:i}=s,o=new this(e),a=(l,c)=>{if(typeof i=="function")c=i.call(t,l,c);else if(Array.isArray(i)&&!i.includes(l))return;(c!==void 0||r)&&o.items.push(Mn.createPair(l,c,s))};if(t instanceof Map)for(let[l,c]of t)a(l,c);else if(t&&typeof t=="object")for(let l of Object.keys(t))a(l,t[l]);return typeof e.sortMapEntries=="function"&&o.items.sort(e.sortMapEntries),o}add(e,t){let s;st.isPair(e)?s=e:!e||typeof e!="object"||!("key"in e)?s=new Mn.Pair(e,e?.value):s=new Mn.Pair(e.key,e.value);let r=Ss(this.items,s.key),i=this.schema?.sortMapEntries;if(r){if(!t)throw new Error(`Key ${s.key} already set`);st.isScalar(r.value)&&eg.isScalarValue(s.value)?r.value.value=s.value:r.value=s.value}else if(i){let o=this.items.findIndex(a=>i(s,a)<0);o===-1?this.items.push(s):this.items.splice(o,0,s)}else this.items.push(s)}delete(e){let t=Ss(this.items,e);return t?this.items.splice(this.items.indexOf(t),1).length>0:!1}get(e,t){let r=Ss(this.items,e)?.value;return(!t&&st.isScalar(r)?r.value:r)??void 0}has(e){return!!Ss(this.items,e)}set(e,t){this.add(new Mn.Pair(e,t),!0)}toJSON(e,t,s){let r=s?new s:t?.mapAsMap?new Map:{};t?.onCreate&&t.onCreate(r);for(let i of this.items)Xm.addPairToJSMap(t,r,i);return r}toString(e,t,s){if(!e)return JSON.stringify(this);for(let r of this.items)if(!st.isPair(r))throw new Error(`Map items must all be pairs; found ${JSON.stringify(r)} instead`);return!e.allNullValues&&this.hasAllNullValues(!1)&&(e=Object.assign({},e,{allNullValues:!0})),Qm.stringifyCollection(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:s,onComment:t})}};Fi.YAMLMap=ji;Fi.findPair=Ss});var Rt=T(ol=>{"use strict";var tg=$(),il=nt(),sg={collection:"map",default:!0,nodeClass:il.YAMLMap,tag:"tag:yaml.org,2002:map",resolve(n,e){return tg.isMap(n)||e("Expected a mapping for this tag"),n},createNode:(n,e,t)=>il.YAMLMap.from(n,e,t)};ol.map=sg});var rt=T(al=>{"use strict";var ng=us(),rg=qi(),ig=wn(),Ln=$(),og=Q(),ag=Qe(),Ki=class extends ig.Collection{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(e){super(Ln.SEQ,e),this.items=[]}add(e){this.items.push(e)}delete(e){let t=Dn(e);return typeof t!="number"?!1:this.items.splice(t,1).length>0}get(e,t){let s=Dn(e);if(typeof s!="number")return;let r=this.items[s];return!t&&Ln.isScalar(r)?r.value:r}has(e){let t=Dn(e);return typeof t=="number"&&t<this.items.length}set(e,t){let s=Dn(e);if(typeof s!="number")throw new Error(`Expected a valid index, not ${e}.`);let r=this.items[s];Ln.isScalar(r)&&og.isScalarValue(t)?r.value=t:this.items[s]=t}toJSON(e,t){let s=[];t?.onCreate&&t.onCreate(s);let r=0;for(let i of this.items)s.push(ag.toJS(i,String(r++),t));return s}toString(e,t,s){return e?rg.stringifyCollection(this,e,{blockItemPrefix:"- ",flowChars:{start:"[",end:"]"},itemIndent:(e.indent||"")+" ",onChompKeep:s,onComment:t}):JSON.stringify(this)}static from(e,t,s){let{replacer:r}=s,i=new this(e);if(t&&Symbol.iterator in Object(t)){let o=0;for(let a of t){if(typeof r=="function"){let l=t instanceof Set?a:String(o++);a=r.call(t,l,a)}i.items.push(ng.createNode(a,void 0,s))}}return i}};function Dn(n){let e=Ln.isScalar(n)?n.value:n;return e&&typeof e=="string"&&(e=Number(e)),typeof e=="number"&&Number.isInteger(e)&&e>=0?e:null}al.YAMLSeq=Ki});var Bt=T(ll=>{"use strict";var cg=$(),cl=rt(),lg={collection:"seq",default:!0,nodeClass:cl.YAMLSeq,tag:"tag:yaml.org,2002:seq",resolve(n,e){return cg.isSeq(n)||e("Expected a sequence for this tag"),n},createNode:(n,e,t)=>cl.YAMLSeq.from(n,e,t)};ll.seq=lg});var bs=T(dl=>{"use strict";var dg=ms(),ug={identify:n=>typeof n=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:n=>n,stringify(n,e,t,s){return e=Object.assign({actualString:!0},e),dg.stringifyString(n,e,t,s)}};dl.string=ug});var Pn=T(fl=>{"use strict";var ul=Q(),hl={identify:n=>n==null,createNode:()=>new ul.Scalar(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new ul.Scalar(null),stringify:({source:n},e)=>typeof n=="string"&&hl.test.test(n)?n:e.options.nullStr};fl.nullTag=hl});var Gi=T(ml=>{"use strict";var hg=Q(),pl={identify:n=>typeof n=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:n=>new hg.Scalar(n[0]==="t"||n[0]==="T"),stringify({source:n,value:e},t){if(n&&pl.test.test(n)){let s=n[0]==="t"||n[0]==="T";if(e===s)return n}return e?t.options.trueStr:t.options.falseStr}};ml.boolTag=pl});var Ut=T(gl=>{"use strict";function fg({format:n,minFractionDigits:e,tag:t,value:s}){if(typeof s=="bigint")return String(s);let r=typeof s=="number"?s:Number(s);if(!isFinite(r))return isNaN(r)?".nan":r<0?"-.inf":".inf";let i=Object.is(s,-0)?"-0":JSON.stringify(s);if(!n&&e&&(!t||t==="tag:yaml.org,2002:float")&&/^\d/.test(i)){let o=i.indexOf(".");o<0&&(o=i.length,i+=".");let a=e-(i.length-o-1);for(;a-- >0;)i+="0"}return i}gl.stringifyNumber=fg});var Wi=T($n=>{"use strict";var pg=Q(),Hi=Ut(),mg={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:n=>n.slice(-3).toLowerCase()==="nan"?NaN:n[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:Hi.stringifyNumber},gg={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:n=>parseFloat(n),stringify(n){let e=Number(n.value);return isFinite(e)?e.toExponential():Hi.stringifyNumber(n)}},yg={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,resolve(n){let e=new pg.Scalar(parseFloat(n)),t=n.indexOf(".");return t!==-1&&n[n.length-1]==="0"&&(e.minFractionDigits=n.length-t-1),e},stringify:Hi.stringifyNumber};$n.float=yg;$n.floatExp=gg;$n.floatNaN=mg});var Yi=T(Bn=>{"use strict";var yl=Ut(),Rn=n=>typeof n=="bigint"||Number.isInteger(n),Vi=(n,e,t,{intAsBigInt:s})=>s?BigInt(n):parseInt(n.substring(e),t);function wl(n,e,t){let{value:s}=n;return Rn(s)&&s>=0?t+s.toString(e):yl.stringifyNumber(n)}var wg={identify:n=>Rn(n)&&n>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(n,e,t)=>Vi(n,2,8,t),stringify:n=>wl(n,8,"0o")},Sg={identify:Rn,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(n,e,t)=>Vi(n,0,10,t),stringify:yl.stringifyNumber},bg={identify:n=>Rn(n)&&n>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(n,e,t)=>Vi(n,2,16,t),stringify:n=>wl(n,16,"0x")};Bn.int=Sg;Bn.intHex=bg;Bn.intOct=wg});var bl=T(Sl=>{"use strict";var _g=Rt(),kg=Pn(),vg=Bt(),Tg=bs(),Ig=Gi(),Ji=Wi(),zi=Yi(),Ag=[_g.map,vg.seq,Tg.string,kg.nullTag,Ig.boolTag,zi.intOct,zi.int,zi.intHex,Ji.floatNaN,Ji.floatExp,Ji.float];Sl.schema=Ag});var vl=T(kl=>{"use strict";var Cg=Q(),Eg=Rt(),Ng=Bt();function _l(n){return typeof n=="bigint"||Number.isInteger(n)}var Un=({value:n})=>JSON.stringify(n),Og=[{identify:n=>typeof n=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:n=>n,stringify:Un},{identify:n=>n==null,createNode:()=>new Cg.Scalar(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:Un},{identify:n=>typeof n=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^true$|^false$/,resolve:n=>n==="true",stringify:Un},{identify:_l,default:!0,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:(n,e,{intAsBigInt:t})=>t?BigInt(n):parseInt(n,10),stringify:({value:n})=>_l(n)?n.toString():JSON.stringify(n)},{identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:n=>parseFloat(n),stringify:Un}],xg={default:!0,tag:"",test:/^/,resolve(n,e){return e(`Unresolved plain scalar ${JSON.stringify(n)}`),n}},Mg=[Eg.map,Ng.seq].concat(Og,xg);kl.schema=Mg});var Xi=T(Tl=>{"use strict";var _s=F("buffer"),Qi=Q(),Dg=ms(),Lg={identify:n=>n instanceof Uint8Array,default:!1,tag:"tag:yaml.org,2002:binary",resolve(n,e){if(typeof _s.Buffer=="function")return _s.Buffer.from(n,"base64");if(typeof atob=="function"){let t=atob(n.replace(/[\n\r]/g,"")),s=new Uint8Array(t.length);for(let r=0;r<t.length;++r)s[r]=t.charCodeAt(r);return s}else return e("This environment does not support reading binary tags; either Buffer or atob is required"),n},stringify({comment:n,type:e,value:t},s,r,i){if(!t)return"";let o=t,a;if(typeof _s.Buffer=="function")a=o instanceof _s.Buffer?o.toString("base64"):_s.Buffer.from(o.buffer).toString("base64");else if(typeof btoa=="function"){let l="";for(let c=0;c<o.length;++c)l+=String.fromCharCode(o[c]);a=btoa(l)}else throw new Error("This environment does not support writing binary tags; either Buffer or btoa is required");if(e??(e=Qi.Scalar.BLOCK_LITERAL),e!==Qi.Scalar.QUOTE_DOUBLE){let l=Math.max(s.options.lineWidth-s.indent.length,s.options.minContentWidth),c=Math.ceil(a.length/l),d=new Array(c);for(let u=0,h=0;u<c;++u,h+=l)d[u]=a.substr(h,l);a=d.join(e===Qi.Scalar.BLOCK_LITERAL?`
56
- `:" ")}return Dg.stringifyString({comment:n,type:e,value:a},s,r,i)}};Tl.binary=Lg});var Fn=T(jn=>{"use strict";var qn=$(),Zi=tt(),Pg=Q(),$g=rt();function Il(n,e){if(qn.isSeq(n))for(let t=0;t<n.items.length;++t){let s=n.items[t];if(!qn.isPair(s)){if(qn.isMap(s)){s.items.length>1&&e("Each pair must have its own sequence indicator");let r=s.items[0]||new Zi.Pair(new Pg.Scalar(null));if(s.commentBefore&&(r.key.commentBefore=r.key.commentBefore?`${s.commentBefore}
55
+ ${r}${p}`}else return`${h}${o}${u.join(" ")}${o}${p}`}function On({indent:n,options:{commentString:e}},t,s,r){if(s&&r&&(s=s.replace(/^\n+/,"")),s){let i=Nn.indentComment(e(s),n);t.push(i.trimStart())}}ol.stringifyCollection=Zm});var rt=I(Ki=>{"use strict";var sg=ji(),ng=Ui(),rg=yn(),nt=$(),xn=st(),ig=Q();function ws(n,e){let t=nt.isScalar(e)?e.value:e;for(let s of n)if(nt.isPair(s)&&(s.key===e||s.key===t||nt.isScalar(s.key)&&s.key.value===t))return s}var Fi=class extends rg.Collection{static get tagName(){return"tag:yaml.org,2002:map"}constructor(e){super(nt.MAP,e),this.items=[]}static from(e,t,s){let{keepUndefined:r,replacer:i}=s,o=new this(e),a=(l,c)=>{if(typeof i=="function")c=i.call(t,l,c);else if(Array.isArray(i)&&!i.includes(l))return;(c!==void 0||r)&&o.items.push(xn.createPair(l,c,s))};if(t instanceof Map)for(let[l,c]of t)a(l,c);else if(t&&typeof t=="object")for(let l of Object.keys(t))a(l,t[l]);return typeof e.sortMapEntries=="function"&&o.items.sort(e.sortMapEntries),o}add(e,t){let s;nt.isPair(e)?s=e:!e||typeof e!="object"||!("key"in e)?s=new xn.Pair(e,e?.value):s=new xn.Pair(e.key,e.value);let r=ws(this.items,s.key),i=this.schema?.sortMapEntries;if(r){if(!t)throw new Error(`Key ${s.key} already set`);nt.isScalar(r.value)&&ig.isScalarValue(s.value)?r.value.value=s.value:r.value=s.value}else if(i){let o=this.items.findIndex(a=>i(s,a)<0);o===-1?this.items.push(s):this.items.splice(o,0,s)}else this.items.push(s)}delete(e){let t=ws(this.items,e);return t?this.items.splice(this.items.indexOf(t),1).length>0:!1}get(e,t){let r=ws(this.items,e)?.value;return(!t&&nt.isScalar(r)?r.value:r)??void 0}has(e){return!!ws(this.items,e)}set(e,t){this.add(new xn.Pair(e,t),!0)}toJSON(e,t,s){let r=s?new s:t?.mapAsMap?new Map:{};t?.onCreate&&t.onCreate(r);for(let i of this.items)ng.addPairToJSMap(t,r,i);return r}toString(e,t,s){if(!e)return JSON.stringify(this);for(let r of this.items)if(!nt.isPair(r))throw new Error(`Map items must all be pairs; found ${JSON.stringify(r)} instead`);return!e.allNullValues&&this.hasAllNullValues(!1)&&(e=Object.assign({},e,{allNullValues:!0})),sg.stringifyCollection(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:s,onComment:t})}};Ki.YAMLMap=Fi;Ki.findPair=ws});var Pt=I(cl=>{"use strict";var og=$(),al=rt(),ag={collection:"map",default:!0,nodeClass:al.YAMLMap,tag:"tag:yaml.org,2002:map",resolve(n,e){return og.isMap(n)||e("Expected a mapping for this tag"),n},createNode:(n,e,t)=>al.YAMLMap.from(n,e,t)};cl.map=ag});var it=I(ll=>{"use strict";var cg=ds(),lg=ji(),dg=yn(),Dn=$(),ug=Q(),hg=Xe(),Gi=class extends dg.Collection{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(e){super(Dn.SEQ,e),this.items=[]}add(e){this.items.push(e)}delete(e){let t=Mn(e);return typeof t!="number"?!1:this.items.splice(t,1).length>0}get(e,t){let s=Mn(e);if(typeof s!="number")return;let r=this.items[s];return!t&&Dn.isScalar(r)?r.value:r}has(e){let t=Mn(e);return typeof t=="number"&&t<this.items.length}set(e,t){let s=Mn(e);if(typeof s!="number")throw new Error(`Expected a valid index, not ${e}.`);let r=this.items[s];Dn.isScalar(r)&&ug.isScalarValue(t)?r.value=t:this.items[s]=t}toJSON(e,t){let s=[];t?.onCreate&&t.onCreate(s);let r=0;for(let i of this.items)s.push(hg.toJS(i,String(r++),t));return s}toString(e,t,s){return e?lg.stringifyCollection(this,e,{blockItemPrefix:"- ",flowChars:{start:"[",end:"]"},itemIndent:(e.indent||"")+" ",onChompKeep:s,onComment:t}):JSON.stringify(this)}static from(e,t,s){let{replacer:r}=s,i=new this(e);if(t&&Symbol.iterator in Object(t)){let o=0;for(let a of t){if(typeof r=="function"){let l=t instanceof Set?a:String(o++);a=r.call(t,l,a)}i.items.push(cg.createNode(a,void 0,s))}}return i}};function Mn(n){let e=Dn.isScalar(n)?n.value:n;return e&&typeof e=="string"&&(e=Number(e)),typeof e=="number"&&Number.isInteger(e)&&e>=0?e:null}ll.YAMLSeq=Gi});var $t=I(ul=>{"use strict";var fg=$(),dl=it(),pg={collection:"seq",default:!0,nodeClass:dl.YAMLSeq,tag:"tag:yaml.org,2002:seq",resolve(n,e){return fg.isSeq(n)||e("Expected a sequence for this tag"),n},createNode:(n,e,t)=>dl.YAMLSeq.from(n,e,t)};ul.seq=pg});var Ss=I(hl=>{"use strict";var mg=ps(),gg={identify:n=>typeof n=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:n=>n,stringify(n,e,t,s){return e=Object.assign({actualString:!0},e),mg.stringifyString(n,e,t,s)}};hl.string=gg});var Ln=I(ml=>{"use strict";var fl=Q(),pl={identify:n=>n==null,createNode:()=>new fl.Scalar(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new fl.Scalar(null),stringify:({source:n},e)=>typeof n=="string"&&pl.test.test(n)?n:e.options.nullStr};ml.nullTag=pl});var Hi=I(yl=>{"use strict";var yg=Q(),gl={identify:n=>typeof n=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:n=>new yg.Scalar(n[0]==="t"||n[0]==="T"),stringify({source:n,value:e},t){if(n&&gl.test.test(n)){let s=n[0]==="t"||n[0]==="T";if(e===s)return n}return e?t.options.trueStr:t.options.falseStr}};yl.boolTag=gl});var Rt=I(wl=>{"use strict";function wg({format:n,minFractionDigits:e,tag:t,value:s}){if(typeof s=="bigint")return String(s);let r=typeof s=="number"?s:Number(s);if(!isFinite(r))return isNaN(r)?".nan":r<0?"-.inf":".inf";let i=Object.is(s,-0)?"-0":JSON.stringify(s);if(!n&&e&&(!t||t==="tag:yaml.org,2002:float")&&/^\d/.test(i)){let o=i.indexOf(".");o<0&&(o=i.length,i+=".");let a=e-(i.length-o-1);for(;a-- >0;)i+="0"}return i}wl.stringifyNumber=wg});var Vi=I(Pn=>{"use strict";var Sg=Q(),Wi=Rt(),bg={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:n=>n.slice(-3).toLowerCase()==="nan"?NaN:n[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:Wi.stringifyNumber},_g={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:n=>parseFloat(n),stringify(n){let e=Number(n.value);return isFinite(e)?e.toExponential():Wi.stringifyNumber(n)}},kg={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,resolve(n){let e=new Sg.Scalar(parseFloat(n)),t=n.indexOf(".");return t!==-1&&n[n.length-1]==="0"&&(e.minFractionDigits=n.length-t-1),e},stringify:Wi.stringifyNumber};Pn.float=kg;Pn.floatExp=_g;Pn.floatNaN=bg});var Ji=I(Rn=>{"use strict";var Sl=Rt(),$n=n=>typeof n=="bigint"||Number.isInteger(n),Yi=(n,e,t,{intAsBigInt:s})=>s?BigInt(n):parseInt(n.substring(e),t);function bl(n,e,t){let{value:s}=n;return $n(s)&&s>=0?t+s.toString(e):Sl.stringifyNumber(n)}var vg={identify:n=>$n(n)&&n>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(n,e,t)=>Yi(n,2,8,t),stringify:n=>bl(n,8,"0o")},Tg={identify:$n,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(n,e,t)=>Yi(n,0,10,t),stringify:Sl.stringifyNumber},Ig={identify:n=>$n(n)&&n>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(n,e,t)=>Yi(n,2,16,t),stringify:n=>bl(n,16,"0x")};Rn.int=Tg;Rn.intHex=Ig;Rn.intOct=vg});var kl=I(_l=>{"use strict";var Ag=Pt(),Cg=Ln(),Eg=$t(),Ng=Ss(),Og=Hi(),zi=Vi(),Qi=Ji(),xg=[Ag.map,Eg.seq,Ng.string,Cg.nullTag,Og.boolTag,Qi.intOct,Qi.int,Qi.intHex,zi.floatNaN,zi.floatExp,zi.float];_l.schema=xg});var Il=I(Tl=>{"use strict";var Mg=Q(),Dg=Pt(),Lg=$t();function vl(n){return typeof n=="bigint"||Number.isInteger(n)}var Bn=({value:n})=>JSON.stringify(n),Pg=[{identify:n=>typeof n=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:n=>n,stringify:Bn},{identify:n=>n==null,createNode:()=>new Mg.Scalar(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:Bn},{identify:n=>typeof n=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^true$|^false$/,resolve:n=>n==="true",stringify:Bn},{identify:vl,default:!0,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:(n,e,{intAsBigInt:t})=>t?BigInt(n):parseInt(n,10),stringify:({value:n})=>vl(n)?n.toString():JSON.stringify(n)},{identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:n=>parseFloat(n),stringify:Bn}],$g={default:!0,tag:"",test:/^/,resolve(n,e){return e(`Unresolved plain scalar ${JSON.stringify(n)}`),n}},Rg=[Dg.map,Lg.seq].concat(Pg,$g);Tl.schema=Rg});var Zi=I(Al=>{"use strict";var bs=K("buffer"),Xi=Q(),Bg=ps(),Ug={identify:n=>n instanceof Uint8Array,default:!1,tag:"tag:yaml.org,2002:binary",resolve(n,e){if(typeof bs.Buffer=="function")return bs.Buffer.from(n,"base64");if(typeof atob=="function"){let t=atob(n.replace(/[\n\r]/g,"")),s=new Uint8Array(t.length);for(let r=0;r<t.length;++r)s[r]=t.charCodeAt(r);return s}else return e("This environment does not support reading binary tags; either Buffer or atob is required"),n},stringify({comment:n,type:e,value:t},s,r,i){if(!t)return"";let o=t,a;if(typeof bs.Buffer=="function")a=o instanceof bs.Buffer?o.toString("base64"):bs.Buffer.from(o.buffer).toString("base64");else if(typeof btoa=="function"){let l="";for(let c=0;c<o.length;++c)l+=String.fromCharCode(o[c]);a=btoa(l)}else throw new Error("This environment does not support writing binary tags; either Buffer or btoa is required");if(e??(e=Xi.Scalar.BLOCK_LITERAL),e!==Xi.Scalar.QUOTE_DOUBLE){let l=Math.max(s.options.lineWidth-s.indent.length,s.options.minContentWidth),c=Math.ceil(a.length/l),d=new Array(c);for(let u=0,h=0;u<c;++u,h+=l)d[u]=a.substr(h,l);a=d.join(e===Xi.Scalar.BLOCK_LITERAL?`
56
+ `:" ")}return Bg.stringifyString({comment:n,type:e,value:a},s,r,i)}};Al.binary=Ug});var jn=I(qn=>{"use strict";var Un=$(),eo=st(),qg=Q(),jg=it();function Cl(n,e){if(Un.isSeq(n))for(let t=0;t<n.items.length;++t){let s=n.items[t];if(!Un.isPair(s)){if(Un.isMap(s)){s.items.length>1&&e("Each pair must have its own sequence indicator");let r=s.items[0]||new eo.Pair(new qg.Scalar(null));if(s.commentBefore&&(r.key.commentBefore=r.key.commentBefore?`${s.commentBefore}
57
57
  ${r.key.commentBefore}`:s.commentBefore),s.comment){let i=r.value??r.key;i.comment=i.comment?`${s.comment}
58
- ${i.comment}`:s.comment}s=r}n.items[t]=qn.isPair(s)?s:new Zi.Pair(s)}}else e("Expected a sequence for this tag");return n}function Al(n,e,t){let{replacer:s}=t,r=new $g.YAMLSeq(n);r.tag="tag:yaml.org,2002:pairs";let i=0;if(e&&Symbol.iterator in Object(e))for(let o of e){typeof s=="function"&&(o=s.call(e,String(i++),o));let a,l;if(Array.isArray(o))if(o.length===2)a=o[0],l=o[1];else throw new TypeError(`Expected [key, value] tuple: ${o}`);else if(o&&o instanceof Object){let c=Object.keys(o);if(c.length===1)a=c[0],l=o[a];else throw new TypeError(`Expected tuple with one key, not ${c.length} keys`)}else a=o;r.items.push(Zi.createPair(a,l,t))}return r}var Rg={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:Il,createNode:Al};jn.createPairs=Al;jn.pairs=Rg;jn.resolvePairs=Il});var so=T(to=>{"use strict";var Cl=$(),eo=Qe(),ks=nt(),Bg=rt(),El=Fn(),pt=class n extends Bg.YAMLSeq{constructor(){super(),this.add=ks.YAMLMap.prototype.add.bind(this),this.delete=ks.YAMLMap.prototype.delete.bind(this),this.get=ks.YAMLMap.prototype.get.bind(this),this.has=ks.YAMLMap.prototype.has.bind(this),this.set=ks.YAMLMap.prototype.set.bind(this),this.tag=n.tag}toJSON(e,t){if(!t)return super.toJSON(e);let s=new Map;t?.onCreate&&t.onCreate(s);for(let r of this.items){let i,o;if(Cl.isPair(r)?(i=eo.toJS(r.key,"",t),o=eo.toJS(r.value,i,t)):i=eo.toJS(r,"",t),s.has(i))throw new Error("Ordered maps must not include duplicate keys");s.set(i,o)}return s}static from(e,t,s){let r=El.createPairs(e,t,s),i=new this;return i.items=r.items,i}};pt.tag="tag:yaml.org,2002:omap";var Ug={collection:"seq",identify:n=>n instanceof Map,nodeClass:pt,default:!1,tag:"tag:yaml.org,2002:omap",resolve(n,e){let t=El.resolvePairs(n,e),s=[];for(let{key:r}of t.items)Cl.isScalar(r)&&(s.includes(r.value)?e(`Ordered maps must not include duplicate keys: ${r.value}`):s.push(r.value));return Object.assign(new pt,t)},createNode:(n,e,t)=>pt.from(n,e,t)};to.YAMLOMap=pt;to.omap=Ug});var Dl=T(no=>{"use strict";var Nl=Q();function Ol({value:n,source:e},t){return e&&(n?xl:Ml).test.test(e)?e:n?t.options.trueStr:t.options.falseStr}var xl={identify:n=>n===!0,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:()=>new Nl.Scalar(!0),stringify:Ol},Ml={identify:n=>n===!1,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:()=>new Nl.Scalar(!1),stringify:Ol};no.falseTag=Ml;no.trueTag=xl});var Ll=T(Kn=>{"use strict";var qg=Q(),ro=Ut(),jg={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:n=>n.slice(-3).toLowerCase()==="nan"?NaN:n[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:ro.stringifyNumber},Fg={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:n=>parseFloat(n.replace(/_/g,"")),stringify(n){let e=Number(n.value);return isFinite(e)?e.toExponential():ro.stringifyNumber(n)}},Kg={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve(n){let e=new qg.Scalar(parseFloat(n.replace(/_/g,""))),t=n.indexOf(".");if(t!==-1){let s=n.substring(t+1).replace(/_/g,"");s[s.length-1]==="0"&&(e.minFractionDigits=s.length)}return e},stringify:ro.stringifyNumber};Kn.float=Kg;Kn.floatExp=Fg;Kn.floatNaN=jg});var $l=T(Ts=>{"use strict";var Pl=Ut(),vs=n=>typeof n=="bigint"||Number.isInteger(n);function Gn(n,e,t,{intAsBigInt:s}){let r=n[0];if((r==="-"||r==="+")&&(e+=1),n=n.substring(e).replace(/_/g,""),s){switch(t){case 2:n=`0b${n}`;break;case 8:n=`0o${n}`;break;case 16:n=`0x${n}`;break}let o=BigInt(n);return r==="-"?BigInt(-1)*o:o}let i=parseInt(n,t);return r==="-"?-1*i:i}function io(n,e,t){let{value:s}=n;if(vs(s)){let r=s.toString(e);return s<0?"-"+t+r.substr(1):t+r}return Pl.stringifyNumber(n)}var Gg={identify:vs,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(n,e,t)=>Gn(n,2,2,t),stringify:n=>io(n,2,"0b")},Hg={identify:vs,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(n,e,t)=>Gn(n,1,8,t),stringify:n=>io(n,8,"0")},Wg={identify:vs,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(n,e,t)=>Gn(n,0,10,t),stringify:Pl.stringifyNumber},Vg={identify:vs,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(n,e,t)=>Gn(n,2,16,t),stringify:n=>io(n,16,"0x")};Ts.int=Wg;Ts.intBin=Gg;Ts.intHex=Vg;Ts.intOct=Hg});var ao=T(oo=>{"use strict";var Vn=$(),Hn=tt(),Wn=nt(),mt=class n extends Wn.YAMLMap{constructor(e){super(e),this.tag=n.tag}add(e){let t;Vn.isPair(e)?t=e:e&&typeof e=="object"&&"key"in e&&"value"in e&&e.value===null?t=new Hn.Pair(e.key,null):t=new Hn.Pair(e,null),Wn.findPair(this.items,t.key)||this.items.push(t)}get(e,t){let s=Wn.findPair(this.items,e);return!t&&Vn.isPair(s)?Vn.isScalar(s.key)?s.key.value:s.key:s}set(e,t){if(typeof t!="boolean")throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof t}`);let s=Wn.findPair(this.items,e);s&&!t?this.items.splice(this.items.indexOf(s),1):!s&&t&&this.items.push(new Hn.Pair(e))}toJSON(e,t){return super.toJSON(e,t,Set)}toString(e,t,s){if(!e)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},e,{allNullValues:!0}),t,s);throw new Error("Set items must all have null values")}static from(e,t,s){let{replacer:r}=s,i=new this(e);if(t&&Symbol.iterator in Object(t))for(let o of t)typeof r=="function"&&(o=r.call(t,o,o)),i.items.push(Hn.createPair(o,null,s));return i}};mt.tag="tag:yaml.org,2002:set";var Yg={collection:"map",identify:n=>n instanceof Set,nodeClass:mt,default:!1,tag:"tag:yaml.org,2002:set",createNode:(n,e,t)=>mt.from(n,e,t),resolve(n,e){if(Vn.isMap(n)){if(n.hasAllNullValues(!0))return Object.assign(new mt,n);e("Set items must all have null values")}else e("Expected a mapping for this tag");return n}};oo.YAMLSet=mt;oo.set=Yg});var lo=T(Yn=>{"use strict";var Jg=Ut();function co(n,e){let t=n[0],s=t==="-"||t==="+"?n.substring(1):n,r=o=>e?BigInt(o):Number(o),i=s.replace(/_/g,"").split(":").reduce((o,a)=>o*r(60)+r(a),r(0));return t==="-"?r(-1)*i:i}function Rl(n){let{value:e}=n,t=o=>o;if(typeof e=="bigint")t=o=>BigInt(o);else if(isNaN(e)||!isFinite(e))return Jg.stringifyNumber(n);let s="";e<0&&(s="-",e*=t(-1));let r=t(60),i=[e%r];return e<60?i.unshift(0):(e=(e-i[0])/r,i.unshift(e%r),e>=60&&(e=(e-i[0])/r,i.unshift(e))),s+i.map(o=>String(o).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}var zg={identify:n=>typeof n=="bigint"||Number.isInteger(n),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:(n,e,{intAsBigInt:t})=>co(n,t),stringify:Rl},Qg={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:n=>co(n,!1),stringify:Rl},Bl={identify:n=>n instanceof Date,default:!0,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve(n){let e=n.match(Bl.test);if(!e)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");let[,t,s,r,i,o,a]=e.map(Number),l=e[7]?Number((e[7]+"00").substr(1,3)):0,c=Date.UTC(t,s-1,r,i||0,o||0,a||0,l),d=e[8];if(d&&d!=="Z"){let u=co(d,!1);Math.abs(u)<30&&(u*=60),c-=6e4*u}return new Date(c)},stringify:({value:n})=>n?.toISOString().replace(/(T00:00:00)?\.000Z$/,"")??""};Yn.floatTime=Qg;Yn.intTime=zg;Yn.timestamp=Bl});var jl=T(ql=>{"use strict";var Xg=Rt(),Zg=Pn(),ey=Bt(),ty=bs(),sy=Xi(),Ul=Dl(),uo=Ll(),Jn=$l(),ny=Cn(),ry=so(),iy=Fn(),oy=ao(),ho=lo(),ay=[Xg.map,ey.seq,ty.string,Zg.nullTag,Ul.trueTag,Ul.falseTag,Jn.intBin,Jn.intOct,Jn.int,Jn.intHex,uo.floatNaN,uo.floatExp,uo.float,sy.binary,ny.merge,ry.omap,iy.pairs,oy.set,ho.intTime,ho.floatTime,ho.timestamp];ql.schema=ay});var Ql=T(mo=>{"use strict";var Hl=Rt(),cy=Pn(),Wl=Bt(),ly=bs(),dy=Gi(),fo=Wi(),po=Yi(),uy=bl(),hy=vl(),Vl=Xi(),Is=Cn(),Yl=so(),Jl=Fn(),Fl=jl(),zl=ao(),zn=lo(),Kl=new Map([["core",uy.schema],["failsafe",[Hl.map,Wl.seq,ly.string]],["json",hy.schema],["yaml11",Fl.schema],["yaml-1.1",Fl.schema]]),Gl={binary:Vl.binary,bool:dy.boolTag,float:fo.float,floatExp:fo.floatExp,floatNaN:fo.floatNaN,floatTime:zn.floatTime,int:po.int,intHex:po.intHex,intOct:po.intOct,intTime:zn.intTime,map:Hl.map,merge:Is.merge,null:cy.nullTag,omap:Yl.omap,pairs:Jl.pairs,seq:Wl.seq,set:zl.set,timestamp:zn.timestamp},fy={"tag:yaml.org,2002:binary":Vl.binary,"tag:yaml.org,2002:merge":Is.merge,"tag:yaml.org,2002:omap":Yl.omap,"tag:yaml.org,2002:pairs":Jl.pairs,"tag:yaml.org,2002:set":zl.set,"tag:yaml.org,2002:timestamp":zn.timestamp};function py(n,e,t){let s=Kl.get(e);if(s&&!n)return t&&!s.includes(Is.merge)?s.concat(Is.merge):s.slice();let r=s;if(!r)if(Array.isArray(n))r=[];else{let i=Array.from(Kl.keys()).filter(o=>o!=="yaml11").map(o=>JSON.stringify(o)).join(", ");throw new Error(`Unknown schema "${e}"; use one of ${i} or define customTags array`)}if(Array.isArray(n))for(let i of n)r=r.concat(i);else typeof n=="function"&&(r=n(r.slice()));return t&&(r=r.concat(Is.merge)),r.reduce((i,o)=>{let a=typeof o=="string"?Gl[o]:o;if(!a){let l=JSON.stringify(o),c=Object.keys(Gl).map(d=>JSON.stringify(d)).join(", ");throw new Error(`Unknown custom tag ${l}; use one of ${c}`)}return i.includes(a)||i.push(a),i},[])}mo.coreKnownTags=fy;mo.getTags=py});var wo=T(Xl=>{"use strict";var go=$(),my=Rt(),gy=Bt(),yy=bs(),Qn=Ql(),wy=(n,e)=>n.key<e.key?-1:n.key>e.key?1:0,yo=class n{constructor({compat:e,customTags:t,merge:s,resolveKnownTags:r,schema:i,sortMapEntries:o,toStringDefaults:a}){this.compat=Array.isArray(e)?Qn.getTags(e,"compat"):e?Qn.getTags(null,e):null,this.name=typeof i=="string"&&i||"core",this.knownTags=r?Qn.coreKnownTags:{},this.tags=Qn.getTags(t,this.name,s),this.toStringOptions=a??null,Object.defineProperty(this,go.MAP,{value:my.map}),Object.defineProperty(this,go.SCALAR,{value:yy.string}),Object.defineProperty(this,go.SEQ,{value:gy.seq}),this.sortMapEntries=typeof o=="function"?o:o===!0?wy:null}clone(){let e=Object.create(n.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}};Xl.Schema=yo});var ed=T(Zl=>{"use strict";var Sy=$(),So=gs(),As=hs();function by(n,e){let t=[],s=e.directives===!0;if(e.directives!==!1&&n.directives){let l=n.directives.toString(n);l?(t.push(l),s=!0):n.directives.docStart&&(s=!0)}s&&t.push("---");let r=So.createStringifyContext(n,e),{commentString:i}=r.options;if(n.commentBefore){t.length!==1&&t.unshift("");let l=i(n.commentBefore);t.unshift(As.indentComment(l,""))}let o=!1,a=null;if(n.contents){if(Sy.isNode(n.contents)){if(n.contents.spaceBefore&&s&&t.push(""),n.contents.commentBefore){let d=i(n.contents.commentBefore);t.push(As.indentComment(d,""))}r.forceBlockIndent=!!n.comment,a=n.contents.comment}let l=a?void 0:()=>o=!0,c=So.stringify(n.contents,r,()=>a=null,l);a&&(c+=As.lineComment(c,"",i(a))),(c[0]==="|"||c[0]===">")&&t[t.length-1]==="---"?t[t.length-1]=`--- ${c}`:t.push(c)}else t.push(So.stringify(n.contents,r));if(n.directives?.docEnd)if(n.comment){let l=i(n.comment);l.includes(`
59
- `)?(t.push("..."),t.push(As.indentComment(l,""))):t.push(`... ${l}`)}else t.push("...");else{let l=n.comment;l&&o&&(l=l.replace(/^\n+/,"")),l&&((!o||a)&&t[t.length-1]!==""&&t.push(""),t.push(As.indentComment(i(l),"")))}return t.join(`
58
+ ${i.comment}`:s.comment}s=r}n.items[t]=Un.isPair(s)?s:new eo.Pair(s)}}else e("Expected a sequence for this tag");return n}function El(n,e,t){let{replacer:s}=t,r=new jg.YAMLSeq(n);r.tag="tag:yaml.org,2002:pairs";let i=0;if(e&&Symbol.iterator in Object(e))for(let o of e){typeof s=="function"&&(o=s.call(e,String(i++),o));let a,l;if(Array.isArray(o))if(o.length===2)a=o[0],l=o[1];else throw new TypeError(`Expected [key, value] tuple: ${o}`);else if(o&&o instanceof Object){let c=Object.keys(o);if(c.length===1)a=c[0],l=o[a];else throw new TypeError(`Expected tuple with one key, not ${c.length} keys`)}else a=o;r.items.push(eo.createPair(a,l,t))}return r}var Fg={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:Cl,createNode:El};qn.createPairs=El;qn.pairs=Fg;qn.resolvePairs=Cl});var no=I(so=>{"use strict";var Nl=$(),to=Xe(),_s=rt(),Kg=it(),Ol=jn(),pt=class n extends Kg.YAMLSeq{constructor(){super(),this.add=_s.YAMLMap.prototype.add.bind(this),this.delete=_s.YAMLMap.prototype.delete.bind(this),this.get=_s.YAMLMap.prototype.get.bind(this),this.has=_s.YAMLMap.prototype.has.bind(this),this.set=_s.YAMLMap.prototype.set.bind(this),this.tag=n.tag}toJSON(e,t){if(!t)return super.toJSON(e);let s=new Map;t?.onCreate&&t.onCreate(s);for(let r of this.items){let i,o;if(Nl.isPair(r)?(i=to.toJS(r.key,"",t),o=to.toJS(r.value,i,t)):i=to.toJS(r,"",t),s.has(i))throw new Error("Ordered maps must not include duplicate keys");s.set(i,o)}return s}static from(e,t,s){let r=Ol.createPairs(e,t,s),i=new this;return i.items=r.items,i}};pt.tag="tag:yaml.org,2002:omap";var Gg={collection:"seq",identify:n=>n instanceof Map,nodeClass:pt,default:!1,tag:"tag:yaml.org,2002:omap",resolve(n,e){let t=Ol.resolvePairs(n,e),s=[];for(let{key:r}of t.items)Nl.isScalar(r)&&(s.includes(r.value)?e(`Ordered maps must not include duplicate keys: ${r.value}`):s.push(r.value));return Object.assign(new pt,t)},createNode:(n,e,t)=>pt.from(n,e,t)};so.YAMLOMap=pt;so.omap=Gg});var Pl=I(ro=>{"use strict";var xl=Q();function Ml({value:n,source:e},t){return e&&(n?Dl:Ll).test.test(e)?e:n?t.options.trueStr:t.options.falseStr}var Dl={identify:n=>n===!0,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:()=>new xl.Scalar(!0),stringify:Ml},Ll={identify:n=>n===!1,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:()=>new xl.Scalar(!1),stringify:Ml};ro.falseTag=Ll;ro.trueTag=Dl});var $l=I(Fn=>{"use strict";var Hg=Q(),io=Rt(),Wg={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:n=>n.slice(-3).toLowerCase()==="nan"?NaN:n[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:io.stringifyNumber},Vg={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:n=>parseFloat(n.replace(/_/g,"")),stringify(n){let e=Number(n.value);return isFinite(e)?e.toExponential():io.stringifyNumber(n)}},Yg={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve(n){let e=new Hg.Scalar(parseFloat(n.replace(/_/g,""))),t=n.indexOf(".");if(t!==-1){let s=n.substring(t+1).replace(/_/g,"");s[s.length-1]==="0"&&(e.minFractionDigits=s.length)}return e},stringify:io.stringifyNumber};Fn.float=Yg;Fn.floatExp=Vg;Fn.floatNaN=Wg});var Bl=I(vs=>{"use strict";var Rl=Rt(),ks=n=>typeof n=="bigint"||Number.isInteger(n);function Kn(n,e,t,{intAsBigInt:s}){let r=n[0];if((r==="-"||r==="+")&&(e+=1),n=n.substring(e).replace(/_/g,""),s){switch(t){case 2:n=`0b${n}`;break;case 8:n=`0o${n}`;break;case 16:n=`0x${n}`;break}let o=BigInt(n);return r==="-"?BigInt(-1)*o:o}let i=parseInt(n,t);return r==="-"?-1*i:i}function oo(n,e,t){let{value:s}=n;if(ks(s)){let r=s.toString(e);return s<0?"-"+t+r.substr(1):t+r}return Rl.stringifyNumber(n)}var Jg={identify:ks,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(n,e,t)=>Kn(n,2,2,t),stringify:n=>oo(n,2,"0b")},zg={identify:ks,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(n,e,t)=>Kn(n,1,8,t),stringify:n=>oo(n,8,"0")},Qg={identify:ks,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(n,e,t)=>Kn(n,0,10,t),stringify:Rl.stringifyNumber},Xg={identify:ks,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(n,e,t)=>Kn(n,2,16,t),stringify:n=>oo(n,16,"0x")};vs.int=Qg;vs.intBin=Jg;vs.intHex=Xg;vs.intOct=zg});var co=I(ao=>{"use strict";var Wn=$(),Gn=st(),Hn=rt(),mt=class n extends Hn.YAMLMap{constructor(e){super(e),this.tag=n.tag}add(e){let t;Wn.isPair(e)?t=e:e&&typeof e=="object"&&"key"in e&&"value"in e&&e.value===null?t=new Gn.Pair(e.key,null):t=new Gn.Pair(e,null),Hn.findPair(this.items,t.key)||this.items.push(t)}get(e,t){let s=Hn.findPair(this.items,e);return!t&&Wn.isPair(s)?Wn.isScalar(s.key)?s.key.value:s.key:s}set(e,t){if(typeof t!="boolean")throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof t}`);let s=Hn.findPair(this.items,e);s&&!t?this.items.splice(this.items.indexOf(s),1):!s&&t&&this.items.push(new Gn.Pair(e))}toJSON(e,t){return super.toJSON(e,t,Set)}toString(e,t,s){if(!e)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},e,{allNullValues:!0}),t,s);throw new Error("Set items must all have null values")}static from(e,t,s){let{replacer:r}=s,i=new this(e);if(t&&Symbol.iterator in Object(t))for(let o of t)typeof r=="function"&&(o=r.call(t,o,o)),i.items.push(Gn.createPair(o,null,s));return i}};mt.tag="tag:yaml.org,2002:set";var Zg={collection:"map",identify:n=>n instanceof Set,nodeClass:mt,default:!1,tag:"tag:yaml.org,2002:set",createNode:(n,e,t)=>mt.from(n,e,t),resolve(n,e){if(Wn.isMap(n)){if(n.hasAllNullValues(!0))return Object.assign(new mt,n);e("Set items must all have null values")}else e("Expected a mapping for this tag");return n}};ao.YAMLSet=mt;ao.set=Zg});var uo=I(Vn=>{"use strict";var ey=Rt();function lo(n,e){let t=n[0],s=t==="-"||t==="+"?n.substring(1):n,r=o=>e?BigInt(o):Number(o),i=s.replace(/_/g,"").split(":").reduce((o,a)=>o*r(60)+r(a),r(0));return t==="-"?r(-1)*i:i}function Ul(n){let{value:e}=n,t=o=>o;if(typeof e=="bigint")t=o=>BigInt(o);else if(isNaN(e)||!isFinite(e))return ey.stringifyNumber(n);let s="";e<0&&(s="-",e*=t(-1));let r=t(60),i=[e%r];return e<60?i.unshift(0):(e=(e-i[0])/r,i.unshift(e%r),e>=60&&(e=(e-i[0])/r,i.unshift(e))),s+i.map(o=>String(o).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}var ty={identify:n=>typeof n=="bigint"||Number.isInteger(n),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:(n,e,{intAsBigInt:t})=>lo(n,t),stringify:Ul},sy={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:n=>lo(n,!1),stringify:Ul},ql={identify:n=>n instanceof Date,default:!0,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve(n){let e=n.match(ql.test);if(!e)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");let[,t,s,r,i,o,a]=e.map(Number),l=e[7]?Number((e[7]+"00").substr(1,3)):0,c=Date.UTC(t,s-1,r,i||0,o||0,a||0,l),d=e[8];if(d&&d!=="Z"){let u=lo(d,!1);Math.abs(u)<30&&(u*=60),c-=6e4*u}return new Date(c)},stringify:({value:n})=>n?.toISOString().replace(/(T00:00:00)?\.000Z$/,"")??""};Vn.floatTime=sy;Vn.intTime=ty;Vn.timestamp=ql});var Kl=I(Fl=>{"use strict";var ny=Pt(),ry=Ln(),iy=$t(),oy=Ss(),ay=Zi(),jl=Pl(),ho=$l(),Yn=Bl(),cy=An(),ly=no(),dy=jn(),uy=co(),fo=uo(),hy=[ny.map,iy.seq,oy.string,ry.nullTag,jl.trueTag,jl.falseTag,Yn.intBin,Yn.intOct,Yn.int,Yn.intHex,ho.floatNaN,ho.floatExp,ho.float,ay.binary,cy.merge,ly.omap,dy.pairs,uy.set,fo.intTime,fo.floatTime,fo.timestamp];Fl.schema=hy});var Zl=I(go=>{"use strict";var Vl=Pt(),fy=Ln(),Yl=$t(),py=Ss(),my=Hi(),po=Vi(),mo=Ji(),gy=kl(),yy=Il(),Jl=Zi(),Ts=An(),zl=no(),Ql=jn(),Gl=Kl(),Xl=co(),Jn=uo(),Hl=new Map([["core",gy.schema],["failsafe",[Vl.map,Yl.seq,py.string]],["json",yy.schema],["yaml11",Gl.schema],["yaml-1.1",Gl.schema]]),Wl={binary:Jl.binary,bool:my.boolTag,float:po.float,floatExp:po.floatExp,floatNaN:po.floatNaN,floatTime:Jn.floatTime,int:mo.int,intHex:mo.intHex,intOct:mo.intOct,intTime:Jn.intTime,map:Vl.map,merge:Ts.merge,null:fy.nullTag,omap:zl.omap,pairs:Ql.pairs,seq:Yl.seq,set:Xl.set,timestamp:Jn.timestamp},wy={"tag:yaml.org,2002:binary":Jl.binary,"tag:yaml.org,2002:merge":Ts.merge,"tag:yaml.org,2002:omap":zl.omap,"tag:yaml.org,2002:pairs":Ql.pairs,"tag:yaml.org,2002:set":Xl.set,"tag:yaml.org,2002:timestamp":Jn.timestamp};function Sy(n,e,t){let s=Hl.get(e);if(s&&!n)return t&&!s.includes(Ts.merge)?s.concat(Ts.merge):s.slice();let r=s;if(!r)if(Array.isArray(n))r=[];else{let i=Array.from(Hl.keys()).filter(o=>o!=="yaml11").map(o=>JSON.stringify(o)).join(", ");throw new Error(`Unknown schema "${e}"; use one of ${i} or define customTags array`)}if(Array.isArray(n))for(let i of n)r=r.concat(i);else typeof n=="function"&&(r=n(r.slice()));return t&&(r=r.concat(Ts.merge)),r.reduce((i,o)=>{let a=typeof o=="string"?Wl[o]:o;if(!a){let l=JSON.stringify(o),c=Object.keys(Wl).map(d=>JSON.stringify(d)).join(", ");throw new Error(`Unknown custom tag ${l}; use one of ${c}`)}return i.includes(a)||i.push(a),i},[])}go.coreKnownTags=wy;go.getTags=Sy});var So=I(ed=>{"use strict";var yo=$(),by=Pt(),_y=$t(),ky=Ss(),zn=Zl(),vy=(n,e)=>n.key<e.key?-1:n.key>e.key?1:0,wo=class n{constructor({compat:e,customTags:t,merge:s,resolveKnownTags:r,schema:i,sortMapEntries:o,toStringDefaults:a}){this.compat=Array.isArray(e)?zn.getTags(e,"compat"):e?zn.getTags(null,e):null,this.name=typeof i=="string"&&i||"core",this.knownTags=r?zn.coreKnownTags:{},this.tags=zn.getTags(t,this.name,s),this.toStringOptions=a??null,Object.defineProperty(this,yo.MAP,{value:by.map}),Object.defineProperty(this,yo.SCALAR,{value:ky.string}),Object.defineProperty(this,yo.SEQ,{value:_y.seq}),this.sortMapEntries=typeof o=="function"?o:o===!0?vy:null}clone(){let e=Object.create(n.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}};ed.Schema=wo});var sd=I(td=>{"use strict";var Ty=$(),bo=ms(),Is=us();function Iy(n,e){let t=[],s=e.directives===!0;if(e.directives!==!1&&n.directives){let l=n.directives.toString(n);l?(t.push(l),s=!0):n.directives.docStart&&(s=!0)}s&&t.push("---");let r=bo.createStringifyContext(n,e),{commentString:i}=r.options;if(n.commentBefore){t.length!==1&&t.unshift("");let l=i(n.commentBefore);t.unshift(Is.indentComment(l,""))}let o=!1,a=null;if(n.contents){if(Ty.isNode(n.contents)){if(n.contents.spaceBefore&&s&&t.push(""),n.contents.commentBefore){let d=i(n.contents.commentBefore);t.push(Is.indentComment(d,""))}r.forceBlockIndent=!!n.comment,a=n.contents.comment}let l=a?void 0:()=>o=!0,c=bo.stringify(n.contents,r,()=>a=null,l);a&&(c+=Is.lineComment(c,"",i(a))),(c[0]==="|"||c[0]===">")&&t[t.length-1]==="---"?t[t.length-1]=`--- ${c}`:t.push(c)}else t.push(bo.stringify(n.contents,r));if(n.directives?.docEnd)if(n.comment){let l=i(n.comment);l.includes(`
59
+ `)?(t.push("..."),t.push(Is.indentComment(l,""))):t.push(`... ${l}`)}else t.push("...");else{let l=n.comment;l&&o&&(l=l.replace(/^\n+/,"")),l&&((!o||a)&&t[t.length-1]!==""&&t.push(""),t.push(Is.indentComment(i(l),"")))}return t.join(`
60
60
  `)+`
61
- `}Zl.stringifyDocument=by});var Cs=T(td=>{"use strict";var _y=ds(),qt=wn(),we=$(),ky=tt(),vy=Qe(),Ty=wo(),Iy=ed(),bo=pn(),Ay=vi(),Cy=us(),_o=ki(),ko=class n{constructor(e,t,s){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,we.NODE_TYPE,{value:we.DOC});let r=null;typeof t=="function"||Array.isArray(t)?r=t:s===void 0&&t&&(s=t,t=void 0);let i=Object.assign({intAsBigInt:!1,keepSourceTokens:!1,logLevel:"warn",prettyErrors:!0,strict:!0,stringKeys:!1,uniqueKeys:!0,version:"1.2"},s);this.options=i;let{version:o}=i;s?._directives?(this.directives=s._directives.atDocument(),this.directives.yaml.explicit&&(o=this.directives.yaml.version)):this.directives=new _o.Directives({version:o}),this.setSchema(o,s),this.contents=e===void 0?null:this.createNode(e,r,s)}clone(){let e=Object.create(n.prototype,{[we.NODE_TYPE]:{value:we.DOC}});return e.commentBefore=this.commentBefore,e.comment=this.comment,e.errors=this.errors.slice(),e.warnings=this.warnings.slice(),e.options=Object.assign({},this.options),this.directives&&(e.directives=this.directives.clone()),e.schema=this.schema.clone(),e.contents=we.isNode(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){jt(this.contents)&&this.contents.add(e)}addIn(e,t){jt(this.contents)&&this.contents.addIn(e,t)}createAlias(e,t){if(!e.anchor){let s=bo.anchorNames(this);e.anchor=!t||s.has(t)?bo.findNewAnchor(t||"a",s):t}return new _y.Alias(e.anchor)}createNode(e,t,s){let r;if(typeof t=="function")e=t.call({"":e},"",e),r=t;else if(Array.isArray(t)){let y=S=>typeof S=="number"||S instanceof String||S instanceof Number,w=t.filter(y).map(String);w.length>0&&(t=t.concat(w)),r=t}else s===void 0&&t&&(s=t,t=void 0);let{aliasDuplicateObjects:i,anchorPrefix:o,flow:a,keepUndefined:l,onTagObj:c,tag:d}=s??{},{onAnchor:u,setAnchors:h,sourceObjects:p}=bo.createNodeAnchors(this,o||"a"),g={aliasDuplicateObjects:i??!0,keepUndefined:l??!1,onAnchor:u,onTagObj:c,replacer:r,schema:this.schema,sourceObjects:p},f=Cy.createNode(e,d,g);return a&&we.isCollection(f)&&(f.flow=!0),h(),f}createPair(e,t,s={}){let r=this.createNode(e,null,s),i=this.createNode(t,null,s);return new ky.Pair(r,i)}delete(e){return jt(this.contents)?this.contents.delete(e):!1}deleteIn(e){return qt.isEmptyPath(e)?this.contents==null?!1:(this.contents=null,!0):jt(this.contents)?this.contents.deleteIn(e):!1}get(e,t){return we.isCollection(this.contents)?this.contents.get(e,t):void 0}getIn(e,t){return qt.isEmptyPath(e)?!t&&we.isScalar(this.contents)?this.contents.value:this.contents:we.isCollection(this.contents)?this.contents.getIn(e,t):void 0}has(e){return we.isCollection(this.contents)?this.contents.has(e):!1}hasIn(e){return qt.isEmptyPath(e)?this.contents!==void 0:we.isCollection(this.contents)?this.contents.hasIn(e):!1}set(e,t){this.contents==null?this.contents=qt.collectionFromPath(this.schema,[e],t):jt(this.contents)&&this.contents.set(e,t)}setIn(e,t){qt.isEmptyPath(e)?this.contents=t:this.contents==null?this.contents=qt.collectionFromPath(this.schema,Array.from(e),t):jt(this.contents)&&this.contents.setIn(e,t)}setSchema(e,t={}){typeof e=="number"&&(e=String(e));let s;switch(e){case"1.1":this.directives?this.directives.yaml.version="1.1":this.directives=new _o.Directives({version:"1.1"}),s={resolveKnownTags:!1,schema:"yaml-1.1"};break;case"1.2":case"next":this.directives?this.directives.yaml.version=e:this.directives=new _o.Directives({version:e}),s={resolveKnownTags:!0,schema:"core"};break;case null:this.directives&&delete this.directives,s=null;break;default:{let r=JSON.stringify(e);throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${r}`)}}if(t.schema instanceof Object)this.schema=t.schema;else if(s)this.schema=new Ty.Schema(Object.assign(s,t));else throw new Error("With a null YAML version, the { schema: Schema } option is required")}toJS({json:e,jsonArg:t,mapAsMap:s,maxAliasCount:r,onAnchor:i,reviver:o}={}){let a={anchors:new Map,doc:this,keep:!e,mapAsMap:s===!0,mapKeyWarned:!1,maxAliasCount:typeof r=="number"?r:100},l=vy.toJS(this.contents,t??"",a);if(typeof i=="function")for(let{count:c,res:d}of a.anchors.values())i(d,c);return typeof o=="function"?Ay.applyReviver(o,{"":l},"",l):l}toJSON(e,t){return this.toJS({json:!0,jsonArg:e,mapAsMap:!1,onAnchor:t})}toString(e={}){if(this.errors.length>0)throw new Error("Document with errors cannot be stringified");if("indent"in e&&(!Number.isInteger(e.indent)||Number(e.indent)<=0)){let t=JSON.stringify(e.indent);throw new Error(`"indent" option must be a positive integer, not ${t}`)}return Iy.stringifyDocument(this,e)}};function jt(n){if(we.isCollection(n))return!0;throw new Error("Expected a YAML collection as document contents")}td.Document=ko});var Os=T(Ns=>{"use strict";var Es=class extends Error{constructor(e,t,s,r){super(),this.name=e,this.code=s,this.message=r,this.pos=t}},vo=class extends Es{constructor(e,t,s){super("YAMLParseError",e,t,s)}},To=class extends Es{constructor(e,t,s){super("YAMLWarning",e,t,s)}},Ey=(n,e)=>t=>{if(t.pos[0]===-1)return;t.linePos=t.pos.map(a=>e.linePos(a));let{line:s,col:r}=t.linePos[0];t.message+=` at line ${s}, column ${r}`;let i=r-1,o=n.substring(e.lineStarts[s-1],e.lineStarts[s]).replace(/[\n\r]+$/,"");if(i>=60&&o.length>80){let a=Math.min(i-39,o.length-79);o="\u2026"+o.substring(a),i-=a-1}if(o.length>80&&(o=o.substring(0,79)+"\u2026"),s>1&&/^ *$/.test(o.substring(0,i))){let a=n.substring(e.lineStarts[s-2],e.lineStarts[s-1]);a.length>80&&(a=a.substring(0,79)+`\u2026
61
+ `}td.stringifyDocument=Iy});var As=I(nd=>{"use strict";var Ay=ls(),Bt=yn(),we=$(),Cy=st(),Ey=Xe(),Ny=So(),Oy=sd(),_o=fn(),xy=Ti(),My=ds(),ko=vi(),vo=class n{constructor(e,t,s){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,we.NODE_TYPE,{value:we.DOC});let r=null;typeof t=="function"||Array.isArray(t)?r=t:s===void 0&&t&&(s=t,t=void 0);let i=Object.assign({intAsBigInt:!1,keepSourceTokens:!1,logLevel:"warn",prettyErrors:!0,strict:!0,stringKeys:!1,uniqueKeys:!0,version:"1.2"},s);this.options=i;let{version:o}=i;s?._directives?(this.directives=s._directives.atDocument(),this.directives.yaml.explicit&&(o=this.directives.yaml.version)):this.directives=new ko.Directives({version:o}),this.setSchema(o,s),this.contents=e===void 0?null:this.createNode(e,r,s)}clone(){let e=Object.create(n.prototype,{[we.NODE_TYPE]:{value:we.DOC}});return e.commentBefore=this.commentBefore,e.comment=this.comment,e.errors=this.errors.slice(),e.warnings=this.warnings.slice(),e.options=Object.assign({},this.options),this.directives&&(e.directives=this.directives.clone()),e.schema=this.schema.clone(),e.contents=we.isNode(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){Ut(this.contents)&&this.contents.add(e)}addIn(e,t){Ut(this.contents)&&this.contents.addIn(e,t)}createAlias(e,t){if(!e.anchor){let s=_o.anchorNames(this);e.anchor=!t||s.has(t)?_o.findNewAnchor(t||"a",s):t}return new Ay.Alias(e.anchor)}createNode(e,t,s){let r;if(typeof t=="function")e=t.call({"":e},"",e),r=t;else if(Array.isArray(t)){let y=S=>typeof S=="number"||S instanceof String||S instanceof Number,w=t.filter(y).map(String);w.length>0&&(t=t.concat(w)),r=t}else s===void 0&&t&&(s=t,t=void 0);let{aliasDuplicateObjects:i,anchorPrefix:o,flow:a,keepUndefined:l,onTagObj:c,tag:d}=s??{},{onAnchor:u,setAnchors:h,sourceObjects:p}=_o.createNodeAnchors(this,o||"a"),g={aliasDuplicateObjects:i??!0,keepUndefined:l??!1,onAnchor:u,onTagObj:c,replacer:r,schema:this.schema,sourceObjects:p},f=My.createNode(e,d,g);return a&&we.isCollection(f)&&(f.flow=!0),h(),f}createPair(e,t,s={}){let r=this.createNode(e,null,s),i=this.createNode(t,null,s);return new Cy.Pair(r,i)}delete(e){return Ut(this.contents)?this.contents.delete(e):!1}deleteIn(e){return Bt.isEmptyPath(e)?this.contents==null?!1:(this.contents=null,!0):Ut(this.contents)?this.contents.deleteIn(e):!1}get(e,t){return we.isCollection(this.contents)?this.contents.get(e,t):void 0}getIn(e,t){return Bt.isEmptyPath(e)?!t&&we.isScalar(this.contents)?this.contents.value:this.contents:we.isCollection(this.contents)?this.contents.getIn(e,t):void 0}has(e){return we.isCollection(this.contents)?this.contents.has(e):!1}hasIn(e){return Bt.isEmptyPath(e)?this.contents!==void 0:we.isCollection(this.contents)?this.contents.hasIn(e):!1}set(e,t){this.contents==null?this.contents=Bt.collectionFromPath(this.schema,[e],t):Ut(this.contents)&&this.contents.set(e,t)}setIn(e,t){Bt.isEmptyPath(e)?this.contents=t:this.contents==null?this.contents=Bt.collectionFromPath(this.schema,Array.from(e),t):Ut(this.contents)&&this.contents.setIn(e,t)}setSchema(e,t={}){typeof e=="number"&&(e=String(e));let s;switch(e){case"1.1":this.directives?this.directives.yaml.version="1.1":this.directives=new ko.Directives({version:"1.1"}),s={resolveKnownTags:!1,schema:"yaml-1.1"};break;case"1.2":case"next":this.directives?this.directives.yaml.version=e:this.directives=new ko.Directives({version:e}),s={resolveKnownTags:!0,schema:"core"};break;case null:this.directives&&delete this.directives,s=null;break;default:{let r=JSON.stringify(e);throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${r}`)}}if(t.schema instanceof Object)this.schema=t.schema;else if(s)this.schema=new Ny.Schema(Object.assign(s,t));else throw new Error("With a null YAML version, the { schema: Schema } option is required")}toJS({json:e,jsonArg:t,mapAsMap:s,maxAliasCount:r,onAnchor:i,reviver:o}={}){let a={anchors:new Map,doc:this,keep:!e,mapAsMap:s===!0,mapKeyWarned:!1,maxAliasCount:typeof r=="number"?r:100},l=Ey.toJS(this.contents,t??"",a);if(typeof i=="function")for(let{count:c,res:d}of a.anchors.values())i(d,c);return typeof o=="function"?xy.applyReviver(o,{"":l},"",l):l}toJSON(e,t){return this.toJS({json:!0,jsonArg:e,mapAsMap:!1,onAnchor:t})}toString(e={}){if(this.errors.length>0)throw new Error("Document with errors cannot be stringified");if("indent"in e&&(!Number.isInteger(e.indent)||Number(e.indent)<=0)){let t=JSON.stringify(e.indent);throw new Error(`"indent" option must be a positive integer, not ${t}`)}return Oy.stringifyDocument(this,e)}};function Ut(n){if(we.isCollection(n))return!0;throw new Error("Expected a YAML collection as document contents")}nd.Document=vo});var Ns=I(Es=>{"use strict";var Cs=class extends Error{constructor(e,t,s,r){super(),this.name=e,this.code=s,this.message=r,this.pos=t}},To=class extends Cs{constructor(e,t,s){super("YAMLParseError",e,t,s)}},Io=class extends Cs{constructor(e,t,s){super("YAMLWarning",e,t,s)}},Dy=(n,e)=>t=>{if(t.pos[0]===-1)return;t.linePos=t.pos.map(a=>e.linePos(a));let{line:s,col:r}=t.linePos[0];t.message+=` at line ${s}, column ${r}`;let i=r-1,o=n.substring(e.lineStarts[s-1],e.lineStarts[s]).replace(/[\n\r]+$/,"");if(i>=60&&o.length>80){let a=Math.min(i-39,o.length-79);o="\u2026"+o.substring(a),i-=a-1}if(o.length>80&&(o=o.substring(0,79)+"\u2026"),s>1&&/^ *$/.test(o.substring(0,i))){let a=n.substring(e.lineStarts[s-2],e.lineStarts[s-1]);a.length>80&&(a=a.substring(0,79)+`\u2026
62
62
  `),o=a+o}if(/[^ ]/.test(o)){let a=1,l=t.linePos[1];l?.line===s&&l.col>r&&(a=Math.max(1,Math.min(l.col-r,80-i)));let c=" ".repeat(i)+"^".repeat(a);t.message+=`:
63
63
 
64
64
  ${o}
65
65
  ${c}
66
- `}};Ns.YAMLError=Es;Ns.YAMLParseError=vo;Ns.YAMLWarning=To;Ns.prettifyError=Ey});var xs=T(sd=>{"use strict";function Ny(n,{flow:e,indicator:t,next:s,offset:r,onError:i,parentIndent:o,startOnNewline:a}){let l=!1,c=a,d=a,u="",h="",p=!1,g=!1,f=null,y=null,w=null,S=null,b=null,A=null,v=null;for(let _ of n)switch(g&&(_.type!=="space"&&_.type!=="newline"&&_.type!=="comma"&&i(_.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),g=!1),f&&(c&&_.type!=="comment"&&_.type!=="newline"&&i(f,"TAB_AS_INDENT","Tabs are not allowed as indentation"),f=null),_.type){case"space":!e&&(t!=="doc-start"||s?.type!=="flow-collection")&&_.source.includes(" ")&&(f=_),d=!0;break;case"comment":{d||i(_,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let L=_.source.substring(1)||" ";u?u+=h+L:u=L,h="",c=!1;break}case"newline":c?u?u+=_.source:(!A||t!=="seq-item-ind")&&(l=!0):h+=_.source,c=!0,p=!0,(y||w)&&(S=_),d=!0;break;case"anchor":y&&i(_,"MULTIPLE_ANCHORS","A node can have at most one anchor"),_.source.endsWith(":")&&i(_.offset+_.source.length-1,"BAD_ALIAS","Anchor ending in : is ambiguous",!0),y=_,v??(v=_.offset),c=!1,d=!1,g=!0;break;case"tag":{w&&i(_,"MULTIPLE_TAGS","A node can have at most one tag"),w=_,v??(v=_.offset),c=!1,d=!1,g=!0;break}case t:(y||w)&&i(_,"BAD_PROP_ORDER",`Anchors and tags must be after the ${_.source} indicator`),A&&i(_,"UNEXPECTED_TOKEN",`Unexpected ${_.source} in ${e??"collection"}`),A=_,c=t==="seq-item-ind"||t==="explicit-key-ind",d=!1;break;case"comma":if(e){b&&i(_,"UNEXPECTED_TOKEN",`Unexpected , in ${e}`),b=_,c=!1,d=!1;break}default:i(_,"UNEXPECTED_TOKEN",`Unexpected ${_.type} token`),c=!1,d=!1}let C=n[n.length-1],M=C?C.offset+C.source.length:r;return g&&s&&s.type!=="space"&&s.type!=="newline"&&s.type!=="comma"&&(s.type!=="scalar"||s.source!=="")&&i(s.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),f&&(c&&f.indent<=o||s?.type==="block-map"||s?.type==="block-seq")&&i(f,"TAB_AS_INDENT","Tabs are not allowed as indentation"),{comma:b,found:A,spaceBefore:l,comment:u,hasNewline:p,anchor:y,tag:w,newlineAfterProp:S,end:M,start:v??M}}sd.resolveProps=Ny});var Xn=T(nd=>{"use strict";function Io(n){if(!n)return null;switch(n.type){case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":if(n.source.includes(`
67
- `))return!0;if(n.end){for(let e of n.end)if(e.type==="newline")return!0}return!1;case"flow-collection":for(let e of n.items){for(let t of e.start)if(t.type==="newline")return!0;if(e.sep){for(let t of e.sep)if(t.type==="newline")return!0}if(Io(e.key)||Io(e.value))return!0}return!1;default:return!0}}nd.containsNewline=Io});var Ao=T(rd=>{"use strict";var Oy=Xn();function xy(n,e,t){if(e?.type==="flow-collection"){let s=e.end[0];s.indent===n&&(s.source==="]"||s.source==="}")&&Oy.containsNewline(e)&&t(s,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}rd.flowIndentCheck=xy});var Co=T(od=>{"use strict";var id=$();function My(n,e,t){let{uniqueKeys:s}=n.options;if(s===!1)return!1;let r=typeof s=="function"?s:(i,o)=>i===o||id.isScalar(i)&&id.isScalar(o)&&i.value===o.value;return e.some(i=>r(i.key,t))}od.mapIncludes=My});var hd=T(ud=>{"use strict";var ad=tt(),Dy=nt(),cd=xs(),Ly=Xn(),ld=Ao(),Py=Co(),dd="All mapping items must start at the same column";function $y({composeNode:n,composeEmptyNode:e},t,s,r,i){let o=i?.nodeClass??Dy.YAMLMap,a=new o(t.schema);t.atRoot&&(t.atRoot=!1);let l=s.offset,c=null;for(let d of s.items){let{start:u,key:h,sep:p,value:g}=d,f=cd.resolveProps(u,{indicator:"explicit-key-ind",next:h??p?.[0],offset:l,onError:r,parentIndent:s.indent,startOnNewline:!0}),y=!f.found;if(y){if(h&&(h.type==="block-seq"?r(l,"BLOCK_AS_IMPLICIT_KEY","A block sequence may not be used as an implicit map key"):"indent"in h&&h.indent!==s.indent&&r(l,"BAD_INDENT",dd)),!f.anchor&&!f.tag&&!p){c=f.end,f.comment&&(a.comment?a.comment+=`
68
- `+f.comment:a.comment=f.comment);continue}(f.newlineAfterProp||Ly.containsNewline(h))&&r(h??u[u.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}else f.found?.indent!==s.indent&&r(l,"BAD_INDENT",dd);t.atKey=!0;let w=f.end,S=h?n(t,h,f,r):e(t,w,u,null,f,r);t.schema.compat&&ld.flowIndentCheck(s.indent,h,r),t.atKey=!1,Py.mapIncludes(t,a.items,S)&&r(w,"DUPLICATE_KEY","Map keys must be unique");let b=cd.resolveProps(p??[],{indicator:"map-value-ind",next:g,offset:S.range[2],onError:r,parentIndent:s.indent,startOnNewline:!h||h.type==="block-scalar"});if(l=b.end,b.found){y&&(g?.type==="block-map"&&!b.hasNewline&&r(l,"BLOCK_AS_IMPLICIT_KEY","Nested mappings are not allowed in compact mappings"),t.options.strict&&f.start<b.found.offset-1024&&r(S.range,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit block mapping key"));let A=g?n(t,g,b,r):e(t,l,p,null,b,r);t.schema.compat&&ld.flowIndentCheck(s.indent,g,r),l=A.range[2];let v=new ad.Pair(S,A);t.options.keepSourceTokens&&(v.srcToken=d),a.items.push(v)}else{y&&r(S.range,"MISSING_CHAR","Implicit map keys need to be followed by map values"),b.comment&&(S.comment?S.comment+=`
69
- `+b.comment:S.comment=b.comment);let A=new ad.Pair(S);t.options.keepSourceTokens&&(A.srcToken=d),a.items.push(A)}}return c&&c<l&&r(c,"IMPOSSIBLE","Map comment with trailing content"),a.range=[s.offset,l,c??l],a}ud.resolveBlockMap=$y});var pd=T(fd=>{"use strict";var Ry=rt(),By=xs(),Uy=Ao();function qy({composeNode:n,composeEmptyNode:e},t,s,r,i){let o=i?.nodeClass??Ry.YAMLSeq,a=new o(t.schema);t.atRoot&&(t.atRoot=!1),t.atKey&&(t.atKey=!1);let l=s.offset,c=null;for(let{start:d,value:u}of s.items){let h=By.resolveProps(d,{indicator:"seq-item-ind",next:u,offset:l,onError:r,parentIndent:s.indent,startOnNewline:!0});if(!h.found)if(h.anchor||h.tag||u)u?.type==="block-seq"?r(h.end,"BAD_INDENT","All sequence items must start at the same column"):r(l,"MISSING_CHAR","Sequence item without - indicator");else{c=h.end,h.comment&&(a.comment=h.comment);continue}let p=u?n(t,u,h,r):e(t,h.end,d,null,h,r);t.schema.compat&&Uy.flowIndentCheck(s.indent,u,r),l=p.range[2],a.items.push(p)}return a.range=[s.offset,l,c??l],a}fd.resolveBlockSeq=qy});var Ft=T(md=>{"use strict";function jy(n,e,t,s){let r="";if(n){let i=!1,o="";for(let a of n){let{source:l,type:c}=a;switch(c){case"space":i=!0;break;case"comment":{t&&!i&&s(a,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let d=l.substring(1)||" ";r?r+=o+d:r=d,o="";break}case"newline":r&&(o+=l),i=!0;break;default:s(a,"UNEXPECTED_TOKEN",`Unexpected ${c} at node end`)}e+=l.length}}return{comment:r,offset:e}}md.resolveEnd=jy});var Sd=T(wd=>{"use strict";var Fy=$(),Ky=tt(),gd=nt(),Gy=rt(),Hy=Ft(),yd=xs(),Wy=Xn(),Vy=Co(),Eo="Block collections are not allowed within flow collections",No=n=>n&&(n.type==="block-map"||n.type==="block-seq");function Yy({composeNode:n,composeEmptyNode:e},t,s,r,i){let o=s.start.source==="{",a=o?"flow map":"flow sequence",l=i?.nodeClass??(o?gd.YAMLMap:Gy.YAMLSeq),c=new l(t.schema);c.flow=!0;let d=t.atRoot;d&&(t.atRoot=!1),t.atKey&&(t.atKey=!1);let u=s.offset+s.start.source.length;for(let y=0;y<s.items.length;++y){let w=s.items[y],{start:S,key:b,sep:A,value:v}=w,C=yd.resolveProps(S,{flow:a,indicator:"explicit-key-ind",next:b??A?.[0],offset:u,onError:r,parentIndent:s.indent,startOnNewline:!1});if(!C.found){if(!C.anchor&&!C.tag&&!A&&!v){y===0&&C.comma?r(C.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${a}`):y<s.items.length-1&&r(C.start,"UNEXPECTED_TOKEN",`Unexpected empty item in ${a}`),C.comment&&(c.comment?c.comment+=`
70
- `+C.comment:c.comment=C.comment),u=C.end;continue}!o&&t.options.strict&&Wy.containsNewline(b)&&r(b,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line")}if(y===0)C.comma&&r(C.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${a}`);else if(C.comma||r(C.start,"MISSING_CHAR",`Missing , between ${a} items`),C.comment){let M="";e:for(let _ of S)switch(_.type){case"comma":case"space":break;case"comment":M=_.source.substring(1);break e;default:break e}if(M){let _=c.items[c.items.length-1];Fy.isPair(_)&&(_=_.value??_.key),_.comment?_.comment+=`
71
- `+M:_.comment=M,C.comment=C.comment.substring(M.length+1)}}if(!o&&!A&&!C.found){let M=v?n(t,v,C,r):e(t,C.end,A,null,C,r);c.items.push(M),u=M.range[2],No(v)&&r(M.range,"BLOCK_IN_FLOW",Eo)}else{t.atKey=!0;let M=C.end,_=b?n(t,b,C,r):e(t,M,S,null,C,r);No(b)&&r(_.range,"BLOCK_IN_FLOW",Eo),t.atKey=!1;let L=yd.resolveProps(A??[],{flow:a,indicator:"map-value-ind",next:v,offset:_.range[2],onError:r,parentIndent:s.indent,startOnNewline:!1});if(L.found){if(!o&&!C.found&&t.options.strict){if(A)for(let K of A){if(K===L.found)break;if(K.type==="newline"){r(K,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line");break}}C.start<L.found.offset-1024&&r(L.found,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit flow sequence key")}}else v&&("source"in v&&v.source?.[0]===":"?r(v,"MISSING_CHAR",`Missing space after : in ${a}`):r(L.start,"MISSING_CHAR",`Missing , or : between ${a} items`));let j=v?n(t,v,L,r):L.found?e(t,L.end,A,null,L,r):null;j?No(v)&&r(j.range,"BLOCK_IN_FLOW",Eo):L.comment&&(_.comment?_.comment+=`
72
- `+L.comment:_.comment=L.comment);let J=new Ky.Pair(_,j);if(t.options.keepSourceTokens&&(J.srcToken=w),o){let K=c;Vy.mapIncludes(t,K.items,_)&&r(M,"DUPLICATE_KEY","Map keys must be unique"),K.items.push(J)}else{let K=new gd.YAMLMap(t.schema);K.flow=!0,K.items.push(J);let ae=(j??_).range;K.range=[_.range[0],ae[1],ae[2]],c.items.push(K)}u=j?j.range[2]:L.end}}let h=o?"}":"]",[p,...g]=s.end,f=u;if(p?.source===h)f=p.offset+p.source.length;else{let y=a[0].toUpperCase()+a.substring(1),w=d?`${y} must end with a ${h}`:`${y} in block collection must be sufficiently indented and end with a ${h}`;r(u,d?"MISSING_CHAR":"BAD_INDENT",w),p&&p.source.length!==1&&g.unshift(p)}if(g.length>0){let y=Hy.resolveEnd(g,f,t.options.strict,r);y.comment&&(c.comment?c.comment+=`
73
- `+y.comment:c.comment=y.comment),c.range=[s.offset,f,y.offset]}else c.range=[s.offset,f,f];return c}wd.resolveFlowCollection=Yy});var _d=T(bd=>{"use strict";var Jy=$(),zy=Q(),Qy=nt(),Xy=rt(),Zy=hd(),ew=pd(),tw=Sd();function Oo(n,e,t,s,r,i){let o=t.type==="block-map"?Zy.resolveBlockMap(n,e,t,s,i):t.type==="block-seq"?ew.resolveBlockSeq(n,e,t,s,i):tw.resolveFlowCollection(n,e,t,s,i),a=o.constructor;return r==="!"||r===a.tagName?(o.tag=a.tagName,o):(r&&(o.tag=r),o)}function sw(n,e,t,s,r){let i=s.tag,o=i?e.directives.tagName(i.source,h=>r(i,"TAG_RESOLVE_FAILED",h)):null;if(t.type==="block-seq"){let{anchor:h,newlineAfterProp:p}=s,g=h&&i?h.offset>i.offset?h:i:h??i;g&&(!p||p.offset<g.offset)&&r(g,"MISSING_CHAR","Missing newline after block sequence props")}let a=t.type==="block-map"?"map":t.type==="block-seq"?"seq":t.start.source==="{"?"map":"seq";if(!i||!o||o==="!"||o===Qy.YAMLMap.tagName&&a==="map"||o===Xy.YAMLSeq.tagName&&a==="seq")return Oo(n,e,t,r,o);let l=e.schema.tags.find(h=>h.tag===o&&h.collection===a);if(!l){let h=e.schema.knownTags[o];if(h?.collection===a)e.schema.tags.push(Object.assign({},h,{default:!1})),l=h;else return h?r(i,"BAD_COLLECTION_TYPE",`${h.tag} used for ${a} collection, but expects ${h.collection??"scalar"}`,!0):r(i,"TAG_RESOLVE_FAILED",`Unresolved tag: ${o}`,!0),Oo(n,e,t,r,o)}let c=Oo(n,e,t,r,o,l),d=l.resolve?.(c,h=>r(i,"TAG_RESOLVE_FAILED",h),e.options)??c,u=Jy.isNode(d)?d:new zy.Scalar(d);return u.range=c.range,u.tag=o,l?.format&&(u.format=l.format),u}bd.composeCollection=sw});var Mo=T(kd=>{"use strict";var xo=Q();function nw(n,e,t){let s=e.offset,r=rw(e,n.options.strict,t);if(!r)return{value:"",type:null,comment:"",range:[s,s,s]};let i=r.mode===">"?xo.Scalar.BLOCK_FOLDED:xo.Scalar.BLOCK_LITERAL,o=e.source?iw(e.source):[],a=o.length;for(let f=o.length-1;f>=0;--f){let y=o[f][1];if(y===""||y==="\r")a=f;else break}if(a===0){let f=r.chomp==="+"&&o.length>0?`
66
+ `}};Es.YAMLError=Cs;Es.YAMLParseError=To;Es.YAMLWarning=Io;Es.prettifyError=Dy});var Os=I(rd=>{"use strict";function Ly(n,{flow:e,indicator:t,next:s,offset:r,onError:i,parentIndent:o,startOnNewline:a}){let l=!1,c=a,d=a,u="",h="",p=!1,g=!1,f=null,y=null,w=null,S=null,b=null,A=null,v=null;for(let _ of n)switch(g&&(_.type!=="space"&&_.type!=="newline"&&_.type!=="comma"&&i(_.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),g=!1),f&&(c&&_.type!=="comment"&&_.type!=="newline"&&i(f,"TAB_AS_INDENT","Tabs are not allowed as indentation"),f=null),_.type){case"space":!e&&(t!=="doc-start"||s?.type!=="flow-collection")&&_.source.includes(" ")&&(f=_),d=!0;break;case"comment":{d||i(_,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let P=_.source.substring(1)||" ";u?u+=h+P:u=P,h="",c=!1;break}case"newline":c?u?u+=_.source:(!A||t!=="seq-item-ind")&&(l=!0):h+=_.source,c=!0,p=!0,(y||w)&&(S=_),d=!0;break;case"anchor":y&&i(_,"MULTIPLE_ANCHORS","A node can have at most one anchor"),_.source.endsWith(":")&&i(_.offset+_.source.length-1,"BAD_ALIAS","Anchor ending in : is ambiguous",!0),y=_,v??(v=_.offset),c=!1,d=!1,g=!0;break;case"tag":{w&&i(_,"MULTIPLE_TAGS","A node can have at most one tag"),w=_,v??(v=_.offset),c=!1,d=!1,g=!0;break}case t:(y||w)&&i(_,"BAD_PROP_ORDER",`Anchors and tags must be after the ${_.source} indicator`),A&&i(_,"UNEXPECTED_TOKEN",`Unexpected ${_.source} in ${e??"collection"}`),A=_,c=t==="seq-item-ind"||t==="explicit-key-ind",d=!1;break;case"comma":if(e){b&&i(_,"UNEXPECTED_TOKEN",`Unexpected , in ${e}`),b=_,c=!1,d=!1;break}default:i(_,"UNEXPECTED_TOKEN",`Unexpected ${_.type} token`),c=!1,d=!1}let C=n[n.length-1],M=C?C.offset+C.source.length:r;return g&&s&&s.type!=="space"&&s.type!=="newline"&&s.type!=="comma"&&(s.type!=="scalar"||s.source!=="")&&i(s.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),f&&(c&&f.indent<=o||s?.type==="block-map"||s?.type==="block-seq")&&i(f,"TAB_AS_INDENT","Tabs are not allowed as indentation"),{comma:b,found:A,spaceBefore:l,comment:u,hasNewline:p,anchor:y,tag:w,newlineAfterProp:S,end:M,start:v??M}}rd.resolveProps=Ly});var Qn=I(id=>{"use strict";function Ao(n){if(!n)return null;switch(n.type){case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":if(n.source.includes(`
67
+ `))return!0;if(n.end){for(let e of n.end)if(e.type==="newline")return!0}return!1;case"flow-collection":for(let e of n.items){for(let t of e.start)if(t.type==="newline")return!0;if(e.sep){for(let t of e.sep)if(t.type==="newline")return!0}if(Ao(e.key)||Ao(e.value))return!0}return!1;default:return!0}}id.containsNewline=Ao});var Co=I(od=>{"use strict";var Py=Qn();function $y(n,e,t){if(e?.type==="flow-collection"){let s=e.end[0];s.indent===n&&(s.source==="]"||s.source==="}")&&Py.containsNewline(e)&&t(s,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}od.flowIndentCheck=$y});var Eo=I(cd=>{"use strict";var ad=$();function Ry(n,e,t){let{uniqueKeys:s}=n.options;if(s===!1)return!1;let r=typeof s=="function"?s:(i,o)=>i===o||ad.isScalar(i)&&ad.isScalar(o)&&i.value===o.value;return e.some(i=>r(i.key,t))}cd.mapIncludes=Ry});var pd=I(fd=>{"use strict";var ld=st(),By=rt(),dd=Os(),Uy=Qn(),ud=Co(),qy=Eo(),hd="All mapping items must start at the same column";function jy({composeNode:n,composeEmptyNode:e},t,s,r,i){let o=i?.nodeClass??By.YAMLMap,a=new o(t.schema);t.atRoot&&(t.atRoot=!1);let l=s.offset,c=null;for(let d of s.items){let{start:u,key:h,sep:p,value:g}=d,f=dd.resolveProps(u,{indicator:"explicit-key-ind",next:h??p?.[0],offset:l,onError:r,parentIndent:s.indent,startOnNewline:!0}),y=!f.found;if(y){if(h&&(h.type==="block-seq"?r(l,"BLOCK_AS_IMPLICIT_KEY","A block sequence may not be used as an implicit map key"):"indent"in h&&h.indent!==s.indent&&r(l,"BAD_INDENT",hd)),!f.anchor&&!f.tag&&!p){c=f.end,f.comment&&(a.comment?a.comment+=`
68
+ `+f.comment:a.comment=f.comment);continue}(f.newlineAfterProp||Uy.containsNewline(h))&&r(h??u[u.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}else f.found?.indent!==s.indent&&r(l,"BAD_INDENT",hd);t.atKey=!0;let w=f.end,S=h?n(t,h,f,r):e(t,w,u,null,f,r);t.schema.compat&&ud.flowIndentCheck(s.indent,h,r),t.atKey=!1,qy.mapIncludes(t,a.items,S)&&r(w,"DUPLICATE_KEY","Map keys must be unique");let b=dd.resolveProps(p??[],{indicator:"map-value-ind",next:g,offset:S.range[2],onError:r,parentIndent:s.indent,startOnNewline:!h||h.type==="block-scalar"});if(l=b.end,b.found){y&&(g?.type==="block-map"&&!b.hasNewline&&r(l,"BLOCK_AS_IMPLICIT_KEY","Nested mappings are not allowed in compact mappings"),t.options.strict&&f.start<b.found.offset-1024&&r(S.range,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit block mapping key"));let A=g?n(t,g,b,r):e(t,l,p,null,b,r);t.schema.compat&&ud.flowIndentCheck(s.indent,g,r),l=A.range[2];let v=new ld.Pair(S,A);t.options.keepSourceTokens&&(v.srcToken=d),a.items.push(v)}else{y&&r(S.range,"MISSING_CHAR","Implicit map keys need to be followed by map values"),b.comment&&(S.comment?S.comment+=`
69
+ `+b.comment:S.comment=b.comment);let A=new ld.Pair(S);t.options.keepSourceTokens&&(A.srcToken=d),a.items.push(A)}}return c&&c<l&&r(c,"IMPOSSIBLE","Map comment with trailing content"),a.range=[s.offset,l,c??l],a}fd.resolveBlockMap=jy});var gd=I(md=>{"use strict";var Fy=it(),Ky=Os(),Gy=Co();function Hy({composeNode:n,composeEmptyNode:e},t,s,r,i){let o=i?.nodeClass??Fy.YAMLSeq,a=new o(t.schema);t.atRoot&&(t.atRoot=!1),t.atKey&&(t.atKey=!1);let l=s.offset,c=null;for(let{start:d,value:u}of s.items){let h=Ky.resolveProps(d,{indicator:"seq-item-ind",next:u,offset:l,onError:r,parentIndent:s.indent,startOnNewline:!0});if(!h.found)if(h.anchor||h.tag||u)u?.type==="block-seq"?r(h.end,"BAD_INDENT","All sequence items must start at the same column"):r(l,"MISSING_CHAR","Sequence item without - indicator");else{c=h.end,h.comment&&(a.comment=h.comment);continue}let p=u?n(t,u,h,r):e(t,h.end,d,null,h,r);t.schema.compat&&Gy.flowIndentCheck(s.indent,u,r),l=p.range[2],a.items.push(p)}return a.range=[s.offset,l,c??l],a}md.resolveBlockSeq=Hy});var qt=I(yd=>{"use strict";function Wy(n,e,t,s){let r="";if(n){let i=!1,o="";for(let a of n){let{source:l,type:c}=a;switch(c){case"space":i=!0;break;case"comment":{t&&!i&&s(a,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let d=l.substring(1)||" ";r?r+=o+d:r=d,o="";break}case"newline":r&&(o+=l),i=!0;break;default:s(a,"UNEXPECTED_TOKEN",`Unexpected ${c} at node end`)}e+=l.length}}return{comment:r,offset:e}}yd.resolveEnd=Wy});var _d=I(bd=>{"use strict";var Vy=$(),Yy=st(),wd=rt(),Jy=it(),zy=qt(),Sd=Os(),Qy=Qn(),Xy=Eo(),No="Block collections are not allowed within flow collections",Oo=n=>n&&(n.type==="block-map"||n.type==="block-seq");function Zy({composeNode:n,composeEmptyNode:e},t,s,r,i){let o=s.start.source==="{",a=o?"flow map":"flow sequence",l=i?.nodeClass??(o?wd.YAMLMap:Jy.YAMLSeq),c=new l(t.schema);c.flow=!0;let d=t.atRoot;d&&(t.atRoot=!1),t.atKey&&(t.atKey=!1);let u=s.offset+s.start.source.length;for(let y=0;y<s.items.length;++y){let w=s.items[y],{start:S,key:b,sep:A,value:v}=w,C=Sd.resolveProps(S,{flow:a,indicator:"explicit-key-ind",next:b??A?.[0],offset:u,onError:r,parentIndent:s.indent,startOnNewline:!1});if(!C.found){if(!C.anchor&&!C.tag&&!A&&!v){y===0&&C.comma?r(C.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${a}`):y<s.items.length-1&&r(C.start,"UNEXPECTED_TOKEN",`Unexpected empty item in ${a}`),C.comment&&(c.comment?c.comment+=`
70
+ `+C.comment:c.comment=C.comment),u=C.end;continue}!o&&t.options.strict&&Qy.containsNewline(b)&&r(b,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line")}if(y===0)C.comma&&r(C.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${a}`);else if(C.comma||r(C.start,"MISSING_CHAR",`Missing , between ${a} items`),C.comment){let M="";e:for(let _ of S)switch(_.type){case"comma":case"space":break;case"comment":M=_.source.substring(1);break e;default:break e}if(M){let _=c.items[c.items.length-1];Vy.isPair(_)&&(_=_.value??_.key),_.comment?_.comment+=`
71
+ `+M:_.comment=M,C.comment=C.comment.substring(M.length+1)}}if(!o&&!A&&!C.found){let M=v?n(t,v,C,r):e(t,C.end,A,null,C,r);c.items.push(M),u=M.range[2],Oo(v)&&r(M.range,"BLOCK_IN_FLOW",No)}else{t.atKey=!0;let M=C.end,_=b?n(t,b,C,r):e(t,M,S,null,C,r);Oo(b)&&r(_.range,"BLOCK_IN_FLOW",No),t.atKey=!1;let P=Sd.resolveProps(A??[],{flow:a,indicator:"map-value-ind",next:v,offset:_.range[2],onError:r,parentIndent:s.indent,startOnNewline:!1});if(P.found){if(!o&&!C.found&&t.options.strict){if(A)for(let j of A){if(j===P.found)break;if(j.type==="newline"){r(j,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line");break}}C.start<P.found.offset-1024&&r(P.found,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit flow sequence key")}}else v&&("source"in v&&v.source?.[0]===":"?r(v,"MISSING_CHAR",`Missing space after : in ${a}`):r(P.start,"MISSING_CHAR",`Missing , or : between ${a} items`));let U=v?n(t,v,P,r):P.found?e(t,P.end,A,null,P,r):null;U?Oo(v)&&r(U.range,"BLOCK_IN_FLOW",No):P.comment&&(_.comment?_.comment+=`
72
+ `+P.comment:_.comment=P.comment);let z=new Yy.Pair(_,U);if(t.options.keepSourceTokens&&(z.srcToken=w),o){let j=c;Xy.mapIncludes(t,j.items,_)&&r(M,"DUPLICATE_KEY","Map keys must be unique"),j.items.push(z)}else{let j=new wd.YAMLMap(t.schema);j.flow=!0,j.items.push(z);let ae=(U??_).range;j.range=[_.range[0],ae[1],ae[2]],c.items.push(j)}u=U?U.range[2]:P.end}}let h=o?"}":"]",[p,...g]=s.end,f=u;if(p?.source===h)f=p.offset+p.source.length;else{let y=a[0].toUpperCase()+a.substring(1),w=d?`${y} must end with a ${h}`:`${y} in block collection must be sufficiently indented and end with a ${h}`;r(u,d?"MISSING_CHAR":"BAD_INDENT",w),p&&p.source.length!==1&&g.unshift(p)}if(g.length>0){let y=zy.resolveEnd(g,f,t.options.strict,r);y.comment&&(c.comment?c.comment+=`
73
+ `+y.comment:c.comment=y.comment),c.range=[s.offset,f,y.offset]}else c.range=[s.offset,f,f];return c}bd.resolveFlowCollection=Zy});var vd=I(kd=>{"use strict";var ew=$(),tw=Q(),sw=rt(),nw=it(),rw=pd(),iw=gd(),ow=_d();function xo(n,e,t,s,r,i){let o=t.type==="block-map"?rw.resolveBlockMap(n,e,t,s,i):t.type==="block-seq"?iw.resolveBlockSeq(n,e,t,s,i):ow.resolveFlowCollection(n,e,t,s,i),a=o.constructor;return r==="!"||r===a.tagName?(o.tag=a.tagName,o):(r&&(o.tag=r),o)}function aw(n,e,t,s,r){let i=s.tag,o=i?e.directives.tagName(i.source,h=>r(i,"TAG_RESOLVE_FAILED",h)):null;if(t.type==="block-seq"){let{anchor:h,newlineAfterProp:p}=s,g=h&&i?h.offset>i.offset?h:i:h??i;g&&(!p||p.offset<g.offset)&&r(g,"MISSING_CHAR","Missing newline after block sequence props")}let a=t.type==="block-map"?"map":t.type==="block-seq"?"seq":t.start.source==="{"?"map":"seq";if(!i||!o||o==="!"||o===sw.YAMLMap.tagName&&a==="map"||o===nw.YAMLSeq.tagName&&a==="seq")return xo(n,e,t,r,o);let l=e.schema.tags.find(h=>h.tag===o&&h.collection===a);if(!l){let h=e.schema.knownTags[o];if(h?.collection===a)e.schema.tags.push(Object.assign({},h,{default:!1})),l=h;else return h?r(i,"BAD_COLLECTION_TYPE",`${h.tag} used for ${a} collection, but expects ${h.collection??"scalar"}`,!0):r(i,"TAG_RESOLVE_FAILED",`Unresolved tag: ${o}`,!0),xo(n,e,t,r,o)}let c=xo(n,e,t,r,o,l),d=l.resolve?.(c,h=>r(i,"TAG_RESOLVE_FAILED",h),e.options)??c,u=ew.isNode(d)?d:new tw.Scalar(d);return u.range=c.range,u.tag=o,l?.format&&(u.format=l.format),u}kd.composeCollection=aw});var Do=I(Td=>{"use strict";var Mo=Q();function cw(n,e,t){let s=e.offset,r=lw(e,n.options.strict,t);if(!r)return{value:"",type:null,comment:"",range:[s,s,s]};let i=r.mode===">"?Mo.Scalar.BLOCK_FOLDED:Mo.Scalar.BLOCK_LITERAL,o=e.source?dw(e.source):[],a=o.length;for(let f=o.length-1;f>=0;--f){let y=o[f][1];if(y===""||y==="\r")a=f;else break}if(a===0){let f=r.chomp==="+"&&o.length>0?`
74
74
  `.repeat(Math.max(1,o.length-1)):"",y=s+r.length;return e.source&&(y+=e.source.length),{value:f,type:i,comment:r.comment,range:[s,y,y]}}let l=e.indent+r.indent,c=e.offset+r.length,d=0;for(let f=0;f<a;++f){let[y,w]=o[f];if(w===""||w==="\r")r.indent===0&&y.length>l&&(l=y.length);else{y.length<l&&t(c+y.length,"MISSING_CHAR","Block scalars with more-indented leading empty lines must use an explicit indentation indicator"),r.indent===0&&(l=y.length),d=f,l===0&&!n.atRoot&&t(c,"BAD_INDENT","Block scalar values in collections must be indented");break}c+=y.length+w.length+1}for(let f=o.length-1;f>=a;--f)o[f][0].length>l&&(a=f+1);let u="",h="",p=!1;for(let f=0;f<d;++f)u+=o[f][0].slice(l)+`
75
- `;for(let f=d;f<a;++f){let[y,w]=o[f];c+=y.length+w.length+1;let S=w[w.length-1]==="\r";if(S&&(w=w.slice(0,-1)),w&&y.length<l){let A=`Block scalar lines must not be less indented than their ${r.indent?"explicit indentation indicator":"first line"}`;t(c-w.length-(S?2:1),"BAD_INDENT",A),y=""}i===xo.Scalar.BLOCK_LITERAL?(u+=h+y.slice(l)+w,h=`
75
+ `;for(let f=d;f<a;++f){let[y,w]=o[f];c+=y.length+w.length+1;let S=w[w.length-1]==="\r";if(S&&(w=w.slice(0,-1)),w&&y.length<l){let A=`Block scalar lines must not be less indented than their ${r.indent?"explicit indentation indicator":"first line"}`;t(c-w.length-(S?2:1),"BAD_INDENT",A),y=""}i===Mo.Scalar.BLOCK_LITERAL?(u+=h+y.slice(l)+w,h=`
76
76
  `):y.length>l||w[0]===" "?(h===" "?h=`
77
77
  `:!p&&h===`
78
78
  `&&(h=`
@@ -85,75 +85,75 @@ ${c}
85
85
  `+o[f][0].slice(l);u[u.length-1]!==`
86
86
  `&&(u+=`
87
87
  `);break;default:u+=`
88
- `}let g=s+r.length+e.source.length;return{value:u,type:i,comment:r.comment,range:[s,g,g]}}function rw({offset:n,props:e},t,s){if(e[0].type!=="block-scalar-header")return s(e[0],"IMPOSSIBLE","Block scalar header not found"),null;let{source:r}=e[0],i=r[0],o=0,a="",l=-1;for(let h=1;h<r.length;++h){let p=r[h];if(!a&&(p==="-"||p==="+"))a=p;else{let g=Number(p);!o&&g?o=g:l===-1&&(l=n+h)}}l!==-1&&s(l,"UNEXPECTED_TOKEN",`Block scalar header includes extra characters: ${r}`);let c=!1,d="",u=r.length;for(let h=1;h<e.length;++h){let p=e[h];switch(p.type){case"space":c=!0;case"newline":u+=p.source.length;break;case"comment":t&&!c&&s(p,"MISSING_CHAR","Comments must be separated from other tokens by white space characters"),u+=p.source.length,d=p.source.substring(1);break;case"error":s(p,"UNEXPECTED_TOKEN",p.message),u+=p.source.length;break;default:{let g=`Unexpected token in block scalar header: ${p.type}`;s(p,"UNEXPECTED_TOKEN",g);let f=p.source;f&&typeof f=="string"&&(u+=f.length)}}}return{mode:i,indent:o,chomp:a,comment:d,length:u}}function iw(n){let e=n.split(/\n( *)/),t=e[0],s=t.match(/^( *)/),i=[s?.[1]?[s[1],t.slice(s[1].length)]:["",t]];for(let o=1;o<e.length;o+=2)i.push([e[o],e[o+1]]);return i}kd.resolveBlockScalar=nw});var Lo=T(Td=>{"use strict";var Do=Q(),ow=Ft();function aw(n,e,t){let{offset:s,type:r,source:i,end:o}=n,a,l,c=(h,p,g)=>t(s+h,p,g);switch(r){case"scalar":a=Do.Scalar.PLAIN,l=cw(i,c);break;case"single-quoted-scalar":a=Do.Scalar.QUOTE_SINGLE,l=lw(i,c);break;case"double-quoted-scalar":a=Do.Scalar.QUOTE_DOUBLE,l=dw(i,c);break;default:return t(n,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${r}`),{value:"",type:null,comment:"",range:[s,s+i.length,s+i.length]}}let d=s+i.length,u=ow.resolveEnd(o,d,e,t);return{value:l,type:a,comment:u.comment,range:[s,d,u.offset]}}function cw(n,e){let t="";switch(n[0]){case" ":t="a tab character";break;case",":t="flow indicator character ,";break;case"%":t="directive indicator character %";break;case"|":case">":{t=`block scalar indicator ${n[0]}`;break}case"@":case"`":{t=`reserved character ${n[0]}`;break}}return t&&e(0,"BAD_SCALAR_START",`Plain value cannot start with ${t}`),vd(n)}function lw(n,e){return(n[n.length-1]!=="'"||n.length===1)&&e(n.length,"MISSING_CHAR","Missing closing 'quote"),vd(n.slice(1,-1)).replace(/''/g,"'")}function vd(n){let e,t;try{e=new RegExp(`(.*?)(?<![ ])[ ]*\r?
88
+ `}let g=s+r.length+e.source.length;return{value:u,type:i,comment:r.comment,range:[s,g,g]}}function lw({offset:n,props:e},t,s){if(e[0].type!=="block-scalar-header")return s(e[0],"IMPOSSIBLE","Block scalar header not found"),null;let{source:r}=e[0],i=r[0],o=0,a="",l=-1;for(let h=1;h<r.length;++h){let p=r[h];if(!a&&(p==="-"||p==="+"))a=p;else{let g=Number(p);!o&&g?o=g:l===-1&&(l=n+h)}}l!==-1&&s(l,"UNEXPECTED_TOKEN",`Block scalar header includes extra characters: ${r}`);let c=!1,d="",u=r.length;for(let h=1;h<e.length;++h){let p=e[h];switch(p.type){case"space":c=!0;case"newline":u+=p.source.length;break;case"comment":t&&!c&&s(p,"MISSING_CHAR","Comments must be separated from other tokens by white space characters"),u+=p.source.length,d=p.source.substring(1);break;case"error":s(p,"UNEXPECTED_TOKEN",p.message),u+=p.source.length;break;default:{let g=`Unexpected token in block scalar header: ${p.type}`;s(p,"UNEXPECTED_TOKEN",g);let f=p.source;f&&typeof f=="string"&&(u+=f.length)}}}return{mode:i,indent:o,chomp:a,comment:d,length:u}}function dw(n){let e=n.split(/\n( *)/),t=e[0],s=t.match(/^( *)/),i=[s?.[1]?[s[1],t.slice(s[1].length)]:["",t]];for(let o=1;o<e.length;o+=2)i.push([e[o],e[o+1]]);return i}Td.resolveBlockScalar=cw});var Po=I(Ad=>{"use strict";var Lo=Q(),uw=qt();function hw(n,e,t){let{offset:s,type:r,source:i,end:o}=n,a,l,c=(h,p,g)=>t(s+h,p,g);switch(r){case"scalar":a=Lo.Scalar.PLAIN,l=fw(i,c);break;case"single-quoted-scalar":a=Lo.Scalar.QUOTE_SINGLE,l=pw(i,c);break;case"double-quoted-scalar":a=Lo.Scalar.QUOTE_DOUBLE,l=mw(i,c);break;default:return t(n,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${r}`),{value:"",type:null,comment:"",range:[s,s+i.length,s+i.length]}}let d=s+i.length,u=uw.resolveEnd(o,d,e,t);return{value:l,type:a,comment:u.comment,range:[s,d,u.offset]}}function fw(n,e){let t="";switch(n[0]){case" ":t="a tab character";break;case",":t="flow indicator character ,";break;case"%":t="directive indicator character %";break;case"|":case">":{t=`block scalar indicator ${n[0]}`;break}case"@":case"`":{t=`reserved character ${n[0]}`;break}}return t&&e(0,"BAD_SCALAR_START",`Plain value cannot start with ${t}`),Id(n)}function pw(n,e){return(n[n.length-1]!=="'"||n.length===1)&&e(n.length,"MISSING_CHAR","Missing closing 'quote"),Id(n.slice(1,-1)).replace(/''/g,"'")}function Id(n){let e,t;try{e=new RegExp(`(.*?)(?<![ ])[ ]*\r?
89
89
  `,"sy"),t=new RegExp(`[ ]*(.*?)(?:(?<![ ])[ ]*)?\r?
90
90
  `,"sy")}catch{e=/(.*?)[ \t]*\r?\n/sy,t=/[ \t]*(.*?)[ \t]*\r?\n/sy}let s=e.exec(n);if(!s)return n;let r=s[1],i=" ",o=e.lastIndex;for(t.lastIndex=o;s=t.exec(n);)s[1]===""?i===`
91
91
  `?r+=i:i=`
92
- `:(r+=i+s[1],i=" "),o=t.lastIndex;let a=/[ \t]*(.*)/sy;return a.lastIndex=o,s=a.exec(n),r+i+(s?.[1]??"")}function dw(n,e){let t="";for(let s=1;s<n.length-1;++s){let r=n[s];if(!(r==="\r"&&n[s+1]===`
92
+ `:(r+=i+s[1],i=" "),o=t.lastIndex;let a=/[ \t]*(.*)/sy;return a.lastIndex=o,s=a.exec(n),r+i+(s?.[1]??"")}function mw(n,e){let t="";for(let s=1;s<n.length-1;++s){let r=n[s];if(!(r==="\r"&&n[s+1]===`
93
93
  `))if(r===`
94
- `){let{fold:i,offset:o}=uw(n,s);t+=i,s=o}else if(r==="\\"){let i=n[++s],o=hw[i];if(o)t+=o;else if(i===`
94
+ `){let{fold:i,offset:o}=gw(n,s);t+=i,s=o}else if(r==="\\"){let i=n[++s],o=yw[i];if(o)t+=o;else if(i===`
95
95
  `)for(i=n[s+1];i===" "||i===" ";)i=n[++s+1];else if(i==="\r"&&n[s+1]===`
96
- `)for(i=n[++s+1];i===" "||i===" ";)i=n[++s+1];else if(i==="x"||i==="u"||i==="U"){let a={x:2,u:4,U:8}[i];t+=fw(n,s+1,a,e),s+=a}else{let a=n.substr(s-1,2);e(s-1,"BAD_DQ_ESCAPE",`Invalid escape sequence ${a}`),t+=a}}else if(r===" "||r===" "){let i=s,o=n[s+1];for(;o===" "||o===" ";)o=n[++s+1];o!==`
96
+ `)for(i=n[++s+1];i===" "||i===" ";)i=n[++s+1];else if(i==="x"||i==="u"||i==="U"){let a={x:2,u:4,U:8}[i];t+=ww(n,s+1,a,e),s+=a}else{let a=n.substr(s-1,2);e(s-1,"BAD_DQ_ESCAPE",`Invalid escape sequence ${a}`),t+=a}}else if(r===" "||r===" "){let i=s,o=n[s+1];for(;o===" "||o===" ";)o=n[++s+1];o!==`
97
97
  `&&!(o==="\r"&&n[s+2]===`
98
- `)&&(t+=s>i?n.slice(i,s+1):r)}else t+=r}return(n[n.length-1]!=='"'||n.length===1)&&e(n.length,"MISSING_CHAR",'Missing closing "quote'),t}function uw(n,e){let t="",s=n[e+1];for(;(s===" "||s===" "||s===`
98
+ `)&&(t+=s>i?n.slice(i,s+1):r)}else t+=r}return(n[n.length-1]!=='"'||n.length===1)&&e(n.length,"MISSING_CHAR",'Missing closing "quote'),t}function gw(n,e){let t="",s=n[e+1];for(;(s===" "||s===" "||s===`
99
99
  `||s==="\r")&&!(s==="\r"&&n[e+2]!==`
100
100
  `);)s===`
101
101
  `&&(t+=`
102
- `),e+=1,s=n[e+1];return t||(t=" "),{fold:t,offset:e}}var hw={0:"\0",a:"\x07",b:"\b",e:"\x1B",f:"\f",n:`
103
- `,r:"\r",t:" ",v:"\v",N:"\x85",_:"\xA0",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\"," ":" "};function fw(n,e,t,s){let r=n.substr(e,t),o=r.length===t&&/^[0-9a-fA-F]+$/.test(r)?parseInt(r,16):NaN;if(isNaN(o)){let a=n.substr(e-2,t+2);return s(e-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${a}`),a}return String.fromCodePoint(o)}Td.resolveFlowScalar=aw});var Cd=T(Ad=>{"use strict";var gt=$(),Id=Q(),pw=Mo(),mw=Lo();function gw(n,e,t,s){let{value:r,type:i,comment:o,range:a}=e.type==="block-scalar"?pw.resolveBlockScalar(n,e,s):mw.resolveFlowScalar(e,n.options.strict,s),l=t?n.directives.tagName(t.source,u=>s(t,"TAG_RESOLVE_FAILED",u)):null,c;n.options.stringKeys&&n.atKey?c=n.schema[gt.SCALAR]:l?c=yw(n.schema,r,l,t,s):e.type==="scalar"?c=ww(n,r,e,s):c=n.schema[gt.SCALAR];let d;try{let u=c.resolve(r,h=>s(t??e,"TAG_RESOLVE_FAILED",h),n.options);d=gt.isScalar(u)?u:new Id.Scalar(u)}catch(u){let h=u instanceof Error?u.message:String(u);s(t??e,"TAG_RESOLVE_FAILED",h),d=new Id.Scalar(r)}return d.range=a,d.source=r,i&&(d.type=i),l&&(d.tag=l),c.format&&(d.format=c.format),o&&(d.comment=o),d}function yw(n,e,t,s,r){if(t==="!")return n[gt.SCALAR];let i=[];for(let a of n.tags)if(!a.collection&&a.tag===t)if(a.default&&a.test)i.push(a);else return a;for(let a of i)if(a.test?.test(e))return a;let o=n.knownTags[t];return o&&!o.collection?(n.tags.push(Object.assign({},o,{default:!1,test:void 0})),o):(r(s,"TAG_RESOLVE_FAILED",`Unresolved tag: ${t}`,t!=="tag:yaml.org,2002:str"),n[gt.SCALAR])}function ww({atKey:n,directives:e,schema:t},s,r,i){let o=t.tags.find(a=>(a.default===!0||n&&a.default==="key")&&a.test?.test(s))||t[gt.SCALAR];if(t.compat){let a=t.compat.find(l=>l.default&&l.test?.test(s))??t[gt.SCALAR];if(o.tag!==a.tag){let l=e.tagString(o.tag),c=e.tagString(a.tag),d=`Value may be parsed as either ${l} or ${c}`;i(r,"TAG_RESOLVE_FAILED",d,!0)}}return o}Ad.composeScalar=gw});var Nd=T(Ed=>{"use strict";function Sw(n,e,t){if(e){t??(t=e.length);for(let s=t-1;s>=0;--s){let r=e[s];switch(r.type){case"space":case"comment":case"newline":n-=r.source.length;continue}for(r=e[++s];r?.type==="space";)n+=r.source.length,r=e[++s];break}}return n}Ed.emptyScalarPosition=Sw});var Md=T($o=>{"use strict";var bw=ds(),_w=$(),kw=_d(),Od=Cd(),vw=Ft(),Tw=Nd(),Iw={composeNode:xd,composeEmptyNode:Po};function xd(n,e,t,s){let r=n.atKey,{spaceBefore:i,comment:o,anchor:a,tag:l}=t,c,d=!0;switch(e.type){case"alias":c=Aw(n,e,s),(a||l)&&s(e,"ALIAS_PROPS","An alias node must not specify any properties");break;case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"block-scalar":c=Od.composeScalar(n,e,l,s),a&&(c.anchor=a.source.substring(1));break;case"block-map":case"block-seq":case"flow-collection":try{c=kw.composeCollection(Iw,n,e,t,s),a&&(c.anchor=a.source.substring(1))}catch(u){let h=u instanceof Error?u.message:String(u);s(e,"RESOURCE_EXHAUSTION",h)}break;default:{let u=e.type==="error"?e.message:`Unsupported token (type: ${e.type})`;s(e,"UNEXPECTED_TOKEN",u),d=!1}}return c??(c=Po(n,e.offset,void 0,null,t,s)),a&&c.anchor===""&&s(a,"BAD_ALIAS","Anchor cannot be an empty string"),r&&n.options.stringKeys&&(!_w.isScalar(c)||typeof c.value!="string"||c.tag&&c.tag!=="tag:yaml.org,2002:str")&&s(l??e,"NON_STRING_KEY","With stringKeys, all keys must be strings"),i&&(c.spaceBefore=!0),o&&(e.type==="scalar"&&e.source===""?c.comment=o:c.commentBefore=o),n.options.keepSourceTokens&&d&&(c.srcToken=e),c}function Po(n,e,t,s,{spaceBefore:r,comment:i,anchor:o,tag:a,end:l},c){let d={type:"scalar",offset:Tw.emptyScalarPosition(e,t,s),indent:-1,source:""},u=Od.composeScalar(n,d,a,c);return o&&(u.anchor=o.source.substring(1),u.anchor===""&&c(o,"BAD_ALIAS","Anchor cannot be an empty string")),r&&(u.spaceBefore=!0),i&&(u.comment=i,u.range[2]=l),u}function Aw({options:n},{offset:e,source:t,end:s},r){let i=new bw.Alias(t.substring(1));i.source===""&&r(e,"BAD_ALIAS","Alias cannot be an empty string"),i.source.endsWith(":")&&r(e+t.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);let o=e+t.length,a=vw.resolveEnd(s,o,n.strict,r);return i.range=[e,o,a.offset],a.comment&&(i.comment=a.comment),i}$o.composeEmptyNode=Po;$o.composeNode=xd});var Pd=T(Ld=>{"use strict";var Cw=Cs(),Dd=Md(),Ew=Ft(),Nw=xs();function Ow(n,e,{offset:t,start:s,value:r,end:i},o){let a=Object.assign({_directives:e},n),l=new Cw.Document(void 0,a),c={atKey:!1,atRoot:!0,directives:l.directives,options:l.options,schema:l.schema},d=Nw.resolveProps(s,{indicator:"doc-start",next:r??i?.[0],offset:t,onError:o,parentIndent:0,startOnNewline:!0});d.found&&(l.directives.docStart=!0,r&&(r.type==="block-map"||r.type==="block-seq")&&!d.hasNewline&&o(d.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")),l.contents=r?Dd.composeNode(c,r,d,o):Dd.composeEmptyNode(c,d.end,s,null,d,o);let u=l.contents.range[2],h=Ew.resolveEnd(i,u,!1,o);return h.comment&&(l.comment=h.comment),l.range=[t,u,h.offset],l}Ld.composeDoc=Ow});var Bo=T(Bd=>{"use strict";var xw=F("process"),Mw=ki(),Dw=Cs(),Ms=Os(),$d=$(),Lw=Pd(),Pw=Ft();function Ds(n){if(typeof n=="number")return[n,n+1];if(Array.isArray(n))return n.length===2?n:[n[0],n[1]];let{offset:e,source:t}=n;return[e,e+(typeof t=="string"?t.length:1)]}function Rd(n){let e="",t=!1,s=!1;for(let r=0;r<n.length;++r){let i=n[r];switch(i[0]){case"#":e+=(e===""?"":s?`
102
+ `),e+=1,s=n[e+1];return t||(t=" "),{fold:t,offset:e}}var yw={0:"\0",a:"\x07",b:"\b",e:"\x1B",f:"\f",n:`
103
+ `,r:"\r",t:" ",v:"\v",N:"\x85",_:"\xA0",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\"," ":" "};function ww(n,e,t,s){let r=n.substr(e,t),o=r.length===t&&/^[0-9a-fA-F]+$/.test(r)?parseInt(r,16):NaN;if(isNaN(o)){let a=n.substr(e-2,t+2);return s(e-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${a}`),a}return String.fromCodePoint(o)}Ad.resolveFlowScalar=hw});var Nd=I(Ed=>{"use strict";var gt=$(),Cd=Q(),Sw=Do(),bw=Po();function _w(n,e,t,s){let{value:r,type:i,comment:o,range:a}=e.type==="block-scalar"?Sw.resolveBlockScalar(n,e,s):bw.resolveFlowScalar(e,n.options.strict,s),l=t?n.directives.tagName(t.source,u=>s(t,"TAG_RESOLVE_FAILED",u)):null,c;n.options.stringKeys&&n.atKey?c=n.schema[gt.SCALAR]:l?c=kw(n.schema,r,l,t,s):e.type==="scalar"?c=vw(n,r,e,s):c=n.schema[gt.SCALAR];let d;try{let u=c.resolve(r,h=>s(t??e,"TAG_RESOLVE_FAILED",h),n.options);d=gt.isScalar(u)?u:new Cd.Scalar(u)}catch(u){let h=u instanceof Error?u.message:String(u);s(t??e,"TAG_RESOLVE_FAILED",h),d=new Cd.Scalar(r)}return d.range=a,d.source=r,i&&(d.type=i),l&&(d.tag=l),c.format&&(d.format=c.format),o&&(d.comment=o),d}function kw(n,e,t,s,r){if(t==="!")return n[gt.SCALAR];let i=[];for(let a of n.tags)if(!a.collection&&a.tag===t)if(a.default&&a.test)i.push(a);else return a;for(let a of i)if(a.test?.test(e))return a;let o=n.knownTags[t];return o&&!o.collection?(n.tags.push(Object.assign({},o,{default:!1,test:void 0})),o):(r(s,"TAG_RESOLVE_FAILED",`Unresolved tag: ${t}`,t!=="tag:yaml.org,2002:str"),n[gt.SCALAR])}function vw({atKey:n,directives:e,schema:t},s,r,i){let o=t.tags.find(a=>(a.default===!0||n&&a.default==="key")&&a.test?.test(s))||t[gt.SCALAR];if(t.compat){let a=t.compat.find(l=>l.default&&l.test?.test(s))??t[gt.SCALAR];if(o.tag!==a.tag){let l=e.tagString(o.tag),c=e.tagString(a.tag),d=`Value may be parsed as either ${l} or ${c}`;i(r,"TAG_RESOLVE_FAILED",d,!0)}}return o}Ed.composeScalar=_w});var xd=I(Od=>{"use strict";function Tw(n,e,t){if(e){t??(t=e.length);for(let s=t-1;s>=0;--s){let r=e[s];switch(r.type){case"space":case"comment":case"newline":n-=r.source.length;continue}for(r=e[++s];r?.type==="space";)n+=r.source.length,r=e[++s];break}}return n}Od.emptyScalarPosition=Tw});var Ld=I(Ro=>{"use strict";var Iw=ls(),Aw=$(),Cw=vd(),Md=Nd(),Ew=qt(),Nw=xd(),Ow={composeNode:Dd,composeEmptyNode:$o};function Dd(n,e,t,s){let r=n.atKey,{spaceBefore:i,comment:o,anchor:a,tag:l}=t,c,d=!0;switch(e.type){case"alias":c=xw(n,e,s),(a||l)&&s(e,"ALIAS_PROPS","An alias node must not specify any properties");break;case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"block-scalar":c=Md.composeScalar(n,e,l,s),a&&(c.anchor=a.source.substring(1));break;case"block-map":case"block-seq":case"flow-collection":try{c=Cw.composeCollection(Ow,n,e,t,s),a&&(c.anchor=a.source.substring(1))}catch(u){let h=u instanceof Error?u.message:String(u);s(e,"RESOURCE_EXHAUSTION",h)}break;default:{let u=e.type==="error"?e.message:`Unsupported token (type: ${e.type})`;s(e,"UNEXPECTED_TOKEN",u),d=!1}}return c??(c=$o(n,e.offset,void 0,null,t,s)),a&&c.anchor===""&&s(a,"BAD_ALIAS","Anchor cannot be an empty string"),r&&n.options.stringKeys&&(!Aw.isScalar(c)||typeof c.value!="string"||c.tag&&c.tag!=="tag:yaml.org,2002:str")&&s(l??e,"NON_STRING_KEY","With stringKeys, all keys must be strings"),i&&(c.spaceBefore=!0),o&&(e.type==="scalar"&&e.source===""?c.comment=o:c.commentBefore=o),n.options.keepSourceTokens&&d&&(c.srcToken=e),c}function $o(n,e,t,s,{spaceBefore:r,comment:i,anchor:o,tag:a,end:l},c){let d={type:"scalar",offset:Nw.emptyScalarPosition(e,t,s),indent:-1,source:""},u=Md.composeScalar(n,d,a,c);return o&&(u.anchor=o.source.substring(1),u.anchor===""&&c(o,"BAD_ALIAS","Anchor cannot be an empty string")),r&&(u.spaceBefore=!0),i&&(u.comment=i,u.range[2]=l),u}function xw({options:n},{offset:e,source:t,end:s},r){let i=new Iw.Alias(t.substring(1));i.source===""&&r(e,"BAD_ALIAS","Alias cannot be an empty string"),i.source.endsWith(":")&&r(e+t.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);let o=e+t.length,a=Ew.resolveEnd(s,o,n.strict,r);return i.range=[e,o,a.offset],a.comment&&(i.comment=a.comment),i}Ro.composeEmptyNode=$o;Ro.composeNode=Dd});var Rd=I($d=>{"use strict";var Mw=As(),Pd=Ld(),Dw=qt(),Lw=Os();function Pw(n,e,{offset:t,start:s,value:r,end:i},o){let a=Object.assign({_directives:e},n),l=new Mw.Document(void 0,a),c={atKey:!1,atRoot:!0,directives:l.directives,options:l.options,schema:l.schema},d=Lw.resolveProps(s,{indicator:"doc-start",next:r??i?.[0],offset:t,onError:o,parentIndent:0,startOnNewline:!0});d.found&&(l.directives.docStart=!0,r&&(r.type==="block-map"||r.type==="block-seq")&&!d.hasNewline&&o(d.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")),l.contents=r?Pd.composeNode(c,r,d,o):Pd.composeEmptyNode(c,d.end,s,null,d,o);let u=l.contents.range[2],h=Dw.resolveEnd(i,u,!1,o);return h.comment&&(l.comment=h.comment),l.range=[t,u,h.offset],l}$d.composeDoc=Pw});var Uo=I(qd=>{"use strict";var $w=K("process"),Rw=vi(),Bw=As(),xs=Ns(),Bd=$(),Uw=Rd(),qw=qt();function Ms(n){if(typeof n=="number")return[n,n+1];if(Array.isArray(n))return n.length===2?n:[n[0],n[1]];let{offset:e,source:t}=n;return[e,e+(typeof t=="string"?t.length:1)]}function Ud(n){let e="",t=!1,s=!1;for(let r=0;r<n.length;++r){let i=n[r];switch(i[0]){case"#":e+=(e===""?"":s?`
104
104
 
105
105
  `:`
106
- `)+(i.substring(1)||" "),t=!0,s=!1;break;case"%":n[r+1]?.[0]!=="#"&&(r+=1),t=!1;break;default:t||(s=!0),t=!1}}return{comment:e,afterEmptyLine:s}}var Ro=class{constructor(e={}){this.doc=null,this.atDirectives=!1,this.prelude=[],this.errors=[],this.warnings=[],this.onError=(t,s,r,i)=>{let o=Ds(t);i?this.warnings.push(new Ms.YAMLWarning(o,s,r)):this.errors.push(new Ms.YAMLParseError(o,s,r))},this.directives=new Mw.Directives({version:e.version||"1.2"}),this.options=e}decorate(e,t){let{comment:s,afterEmptyLine:r}=Rd(this.prelude);if(s){let i=e.contents;if(t)e.comment=e.comment?`${e.comment}
107
- ${s}`:s;else if(r||e.directives.docStart||!i)e.commentBefore=s;else if($d.isCollection(i)&&!i.flow&&i.items.length>0){let o=i.items[0];$d.isPair(o)&&(o=o.key);let a=o.commentBefore;o.commentBefore=a?`${s}
106
+ `)+(i.substring(1)||" "),t=!0,s=!1;break;case"%":n[r+1]?.[0]!=="#"&&(r+=1),t=!1;break;default:t||(s=!0),t=!1}}return{comment:e,afterEmptyLine:s}}var Bo=class{constructor(e={}){this.doc=null,this.atDirectives=!1,this.prelude=[],this.errors=[],this.warnings=[],this.onError=(t,s,r,i)=>{let o=Ms(t);i?this.warnings.push(new xs.YAMLWarning(o,s,r)):this.errors.push(new xs.YAMLParseError(o,s,r))},this.directives=new Rw.Directives({version:e.version||"1.2"}),this.options=e}decorate(e,t){let{comment:s,afterEmptyLine:r}=Ud(this.prelude);if(s){let i=e.contents;if(t)e.comment=e.comment?`${e.comment}
107
+ ${s}`:s;else if(r||e.directives.docStart||!i)e.commentBefore=s;else if(Bd.isCollection(i)&&!i.flow&&i.items.length>0){let o=i.items[0];Bd.isPair(o)&&(o=o.key);let a=o.commentBefore;o.commentBefore=a?`${s}
108
108
  ${a}`:s}else{let o=i.commentBefore;i.commentBefore=o?`${s}
109
- ${o}`:s}}t?(Array.prototype.push.apply(e.errors,this.errors),Array.prototype.push.apply(e.warnings,this.warnings)):(e.errors=this.errors,e.warnings=this.warnings),this.prelude=[],this.errors=[],this.warnings=[]}streamInfo(){return{comment:Rd(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose(e,t=!1,s=-1){for(let r of e)yield*this.next(r);yield*this.end(t,s)}*next(e){switch(xw.env.LOG_STREAM&&console.dir(e,{depth:null}),e.type){case"directive":this.directives.add(e.source,(t,s,r)=>{let i=Ds(e);i[0]+=t,this.onError(i,"BAD_DIRECTIVE",s,r)}),this.prelude.push(e.source),this.atDirectives=!0;break;case"document":{let t=Lw.composeDoc(this.options,this.directives,e,this.onError);this.atDirectives&&!t.directives.docStart&&this.onError(e,"MISSING_CHAR","Missing directives-end/doc-start indicator line"),this.decorate(t,!1),this.doc&&(yield this.doc),this.doc=t,this.atDirectives=!1;break}case"byte-order-mark":case"space":break;case"comment":case"newline":this.prelude.push(e.source);break;case"error":{let t=e.source?`${e.message}: ${JSON.stringify(e.source)}`:e.message,s=new Ms.YAMLParseError(Ds(e),"UNEXPECTED_TOKEN",t);this.atDirectives||!this.doc?this.errors.push(s):this.doc.errors.push(s);break}case"doc-end":{if(!this.doc){let s="Unexpected doc-end without preceding document";this.errors.push(new Ms.YAMLParseError(Ds(e),"UNEXPECTED_TOKEN",s));break}this.doc.directives.docEnd=!0;let t=Pw.resolveEnd(e.end,e.offset+e.source.length,this.doc.options.strict,this.onError);if(this.decorate(this.doc,!0),t.comment){let s=this.doc.comment;this.doc.comment=s?`${s}
110
- ${t.comment}`:t.comment}this.doc.range[2]=t.offset;break}default:this.errors.push(new Ms.YAMLParseError(Ds(e),"UNEXPECTED_TOKEN",`Unsupported token ${e.type}`))}}*end(e=!1,t=-1){if(this.doc)this.decorate(this.doc,!0),yield this.doc,this.doc=null;else if(e){let s=Object.assign({_directives:this.directives},this.options),r=new Dw.Document(void 0,s);this.atDirectives&&this.onError(t,"MISSING_CHAR","Missing directives-end indicator line"),r.range=[0,t,t],this.decorate(r,!1),yield r}}};Bd.Composer=Ro});var jd=T(Zn=>{"use strict";var $w=Mo(),Rw=Lo(),Bw=Os(),Ud=ms();function Uw(n,e=!0,t){if(n){let s=(r,i,o)=>{let a=typeof r=="number"?r:Array.isArray(r)?r[0]:r.offset;if(t)t(a,i,o);else throw new Bw.YAMLParseError([a,a+1],i,o)};switch(n.type){case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return Rw.resolveFlowScalar(n,e,s);case"block-scalar":return $w.resolveBlockScalar({options:{strict:e}},n,s)}}return null}function qw(n,e){let{implicitKey:t=!1,indent:s,inFlow:r=!1,offset:i=-1,type:o="PLAIN"}=e,a=Ud.stringifyString({type:o,value:n},{implicitKey:t,indent:s>0?" ".repeat(s):"",inFlow:r,options:{blockQuote:!0,lineWidth:-1}}),l=e.end??[{type:"newline",offset:-1,indent:s,source:`
109
+ ${o}`:s}}t?(Array.prototype.push.apply(e.errors,this.errors),Array.prototype.push.apply(e.warnings,this.warnings)):(e.errors=this.errors,e.warnings=this.warnings),this.prelude=[],this.errors=[],this.warnings=[]}streamInfo(){return{comment:Ud(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose(e,t=!1,s=-1){for(let r of e)yield*this.next(r);yield*this.end(t,s)}*next(e){switch($w.env.LOG_STREAM&&console.dir(e,{depth:null}),e.type){case"directive":this.directives.add(e.source,(t,s,r)=>{let i=Ms(e);i[0]+=t,this.onError(i,"BAD_DIRECTIVE",s,r)}),this.prelude.push(e.source),this.atDirectives=!0;break;case"document":{let t=Uw.composeDoc(this.options,this.directives,e,this.onError);this.atDirectives&&!t.directives.docStart&&this.onError(e,"MISSING_CHAR","Missing directives-end/doc-start indicator line"),this.decorate(t,!1),this.doc&&(yield this.doc),this.doc=t,this.atDirectives=!1;break}case"byte-order-mark":case"space":break;case"comment":case"newline":this.prelude.push(e.source);break;case"error":{let t=e.source?`${e.message}: ${JSON.stringify(e.source)}`:e.message,s=new xs.YAMLParseError(Ms(e),"UNEXPECTED_TOKEN",t);this.atDirectives||!this.doc?this.errors.push(s):this.doc.errors.push(s);break}case"doc-end":{if(!this.doc){let s="Unexpected doc-end without preceding document";this.errors.push(new xs.YAMLParseError(Ms(e),"UNEXPECTED_TOKEN",s));break}this.doc.directives.docEnd=!0;let t=qw.resolveEnd(e.end,e.offset+e.source.length,this.doc.options.strict,this.onError);if(this.decorate(this.doc,!0),t.comment){let s=this.doc.comment;this.doc.comment=s?`${s}
110
+ ${t.comment}`:t.comment}this.doc.range[2]=t.offset;break}default:this.errors.push(new xs.YAMLParseError(Ms(e),"UNEXPECTED_TOKEN",`Unsupported token ${e.type}`))}}*end(e=!1,t=-1){if(this.doc)this.decorate(this.doc,!0),yield this.doc,this.doc=null;else if(e){let s=Object.assign({_directives:this.directives},this.options),r=new Bw.Document(void 0,s);this.atDirectives&&this.onError(t,"MISSING_CHAR","Missing directives-end indicator line"),r.range=[0,t,t],this.decorate(r,!1),yield r}}};qd.Composer=Bo});var Kd=I(Xn=>{"use strict";var jw=Do(),Fw=Po(),Kw=Ns(),jd=ps();function Gw(n,e=!0,t){if(n){let s=(r,i,o)=>{let a=typeof r=="number"?r:Array.isArray(r)?r[0]:r.offset;if(t)t(a,i,o);else throw new Kw.YAMLParseError([a,a+1],i,o)};switch(n.type){case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return Fw.resolveFlowScalar(n,e,s);case"block-scalar":return jw.resolveBlockScalar({options:{strict:e}},n,s)}}return null}function Hw(n,e){let{implicitKey:t=!1,indent:s,inFlow:r=!1,offset:i=-1,type:o="PLAIN"}=e,a=jd.stringifyString({type:o,value:n},{implicitKey:t,indent:s>0?" ".repeat(s):"",inFlow:r,options:{blockQuote:!0,lineWidth:-1}}),l=e.end??[{type:"newline",offset:-1,indent:s,source:`
111
111
  `}];switch(a[0]){case"|":case">":{let c=a.indexOf(`
112
112
  `),d=a.substring(0,c),u=a.substring(c+1)+`
113
- `,h=[{type:"block-scalar-header",offset:i,indent:s,source:d}];return qd(h,l)||h.push({type:"newline",offset:-1,indent:s,source:`
114
- `}),{type:"block-scalar",offset:i,indent:s,props:h,source:u}}case'"':return{type:"double-quoted-scalar",offset:i,indent:s,source:a,end:l};case"'":return{type:"single-quoted-scalar",offset:i,indent:s,source:a,end:l};default:return{type:"scalar",offset:i,indent:s,source:a,end:l}}}function jw(n,e,t={}){let{afterKey:s=!1,implicitKey:r=!1,inFlow:i=!1,type:o}=t,a="indent"in n?n.indent:null;if(s&&typeof a=="number"&&(a+=2),!o)switch(n.type){case"single-quoted-scalar":o="QUOTE_SINGLE";break;case"double-quoted-scalar":o="QUOTE_DOUBLE";break;case"block-scalar":{let c=n.props[0];if(c.type!=="block-scalar-header")throw new Error("Invalid block scalar header");o=c.source[0]===">"?"BLOCK_FOLDED":"BLOCK_LITERAL";break}default:o="PLAIN"}let l=Ud.stringifyString({type:o,value:e},{implicitKey:r||a===null,indent:a!==null&&a>0?" ".repeat(a):"",inFlow:i,options:{blockQuote:!0,lineWidth:-1}});switch(l[0]){case"|":case">":Fw(n,l);break;case'"':Uo(n,l,"double-quoted-scalar");break;case"'":Uo(n,l,"single-quoted-scalar");break;default:Uo(n,l,"scalar")}}function Fw(n,e){let t=e.indexOf(`
113
+ `,h=[{type:"block-scalar-header",offset:i,indent:s,source:d}];return Fd(h,l)||h.push({type:"newline",offset:-1,indent:s,source:`
114
+ `}),{type:"block-scalar",offset:i,indent:s,props:h,source:u}}case'"':return{type:"double-quoted-scalar",offset:i,indent:s,source:a,end:l};case"'":return{type:"single-quoted-scalar",offset:i,indent:s,source:a,end:l};default:return{type:"scalar",offset:i,indent:s,source:a,end:l}}}function Ww(n,e,t={}){let{afterKey:s=!1,implicitKey:r=!1,inFlow:i=!1,type:o}=t,a="indent"in n?n.indent:null;if(s&&typeof a=="number"&&(a+=2),!o)switch(n.type){case"single-quoted-scalar":o="QUOTE_SINGLE";break;case"double-quoted-scalar":o="QUOTE_DOUBLE";break;case"block-scalar":{let c=n.props[0];if(c.type!=="block-scalar-header")throw new Error("Invalid block scalar header");o=c.source[0]===">"?"BLOCK_FOLDED":"BLOCK_LITERAL";break}default:o="PLAIN"}let l=jd.stringifyString({type:o,value:e},{implicitKey:r||a===null,indent:a!==null&&a>0?" ".repeat(a):"",inFlow:i,options:{blockQuote:!0,lineWidth:-1}});switch(l[0]){case"|":case">":Vw(n,l);break;case'"':qo(n,l,"double-quoted-scalar");break;case"'":qo(n,l,"single-quoted-scalar");break;default:qo(n,l,"scalar")}}function Vw(n,e){let t=e.indexOf(`
115
115
  `),s=e.substring(0,t),r=e.substring(t+1)+`
116
- `;if(n.type==="block-scalar"){let i=n.props[0];if(i.type!=="block-scalar-header")throw new Error("Invalid block scalar header");i.source=s,n.source=r}else{let{offset:i}=n,o="indent"in n?n.indent:-1,a=[{type:"block-scalar-header",offset:i,indent:o,source:s}];qd(a,"end"in n?n.end:void 0)||a.push({type:"newline",offset:-1,indent:o,source:`
117
- `});for(let l of Object.keys(n))l!=="type"&&l!=="offset"&&delete n[l];Object.assign(n,{type:"block-scalar",indent:o,props:a,source:r})}}function qd(n,e){if(e)for(let t of e)switch(t.type){case"space":case"comment":n.push(t);break;case"newline":return n.push(t),!0}return!1}function Uo(n,e,t){switch(n.type){case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":n.type=t,n.source=e;break;case"block-scalar":{let s=n.props.slice(1),r=e.length;n.props[0].type==="block-scalar-header"&&(r-=n.props[0].source.length);for(let i of s)i.offset+=r;delete n.props,Object.assign(n,{type:t,source:e,end:s});break}case"block-map":case"block-seq":{let r={type:"newline",offset:n.offset+e.length,indent:n.indent,source:`
118
- `};delete n.items,Object.assign(n,{type:t,source:e,end:[r]});break}default:{let s="indent"in n?n.indent:-1,r="end"in n&&Array.isArray(n.end)?n.end.filter(i=>i.type==="space"||i.type==="comment"||i.type==="newline"):[];for(let i of Object.keys(n))i!=="type"&&i!=="offset"&&delete n[i];Object.assign(n,{type:t,indent:s,source:e,end:r})}}}Zn.createScalarToken=qw;Zn.resolveAsScalar=Uw;Zn.setScalarValue=jw});var Kd=T(Fd=>{"use strict";var Kw=n=>"type"in n?tr(n):er(n);function tr(n){switch(n.type){case"block-scalar":{let e="";for(let t of n.props)e+=tr(t);return e+n.source}case"block-map":case"block-seq":{let e="";for(let t of n.items)e+=er(t);return e}case"flow-collection":{let e=n.start.source;for(let t of n.items)e+=er(t);for(let t of n.end)e+=t.source;return e}case"document":{let e=er(n);if(n.end)for(let t of n.end)e+=t.source;return e}default:{let e=n.source;if("end"in n&&n.end)for(let t of n.end)e+=t.source;return e}}}function er({start:n,key:e,sep:t,value:s}){let r="";for(let i of n)r+=i.source;if(e&&(r+=tr(e)),t)for(let i of t)r+=i.source;return s&&(r+=tr(s)),r}Fd.stringify=Kw});var Vd=T(Wd=>{"use strict";var qo=Symbol("break visit"),Gw=Symbol("skip children"),Gd=Symbol("remove item");function yt(n,e){"type"in n&&n.type==="document"&&(n={start:n.start,value:n.value}),Hd(Object.freeze([]),n,e)}yt.BREAK=qo;yt.SKIP=Gw;yt.REMOVE=Gd;yt.itemAtPath=(n,e)=>{let t=n;for(let[s,r]of e){let i=t?.[s];if(i&&"items"in i)t=i.items[r];else return}return t};yt.parentCollection=(n,e)=>{let t=yt.itemAtPath(n,e.slice(0,-1)),s=e[e.length-1][0],r=t?.[s];if(r&&"items"in r)return r;throw new Error("Parent collection not found")};function Hd(n,e,t){let s=t(e,n);if(typeof s=="symbol")return s;for(let r of["key","value"]){let i=e[r];if(i&&"items"in i){for(let o=0;o<i.items.length;++o){let a=Hd(Object.freeze(n.concat([[r,o]])),i.items[o],t);if(typeof a=="number")o=a-1;else{if(a===qo)return qo;a===Gd&&(i.items.splice(o,1),o-=1)}}typeof s=="function"&&r==="key"&&(s=s(e,n))}}return typeof s=="function"?s(e,n):s}Wd.visit=yt});var sr=T(ue=>{"use strict";var jo=jd(),Hw=Kd(),Ww=Vd(),Fo="\uFEFF",Ko="",Go="",Ho="",Vw=n=>!!n&&"items"in n,Yw=n=>!!n&&(n.type==="scalar"||n.type==="single-quoted-scalar"||n.type==="double-quoted-scalar"||n.type==="block-scalar");function Jw(n){switch(n){case Fo:return"<BOM>";case Ko:return"<DOC>";case Go:return"<FLOW_END>";case Ho:return"<SCALAR>";default:return JSON.stringify(n)}}function zw(n){switch(n){case Fo:return"byte-order-mark";case Ko:return"doc-mode";case Go:return"flow-error-end";case Ho:return"scalar";case"---":return"doc-start";case"...":return"doc-end";case"":case`
116
+ `;if(n.type==="block-scalar"){let i=n.props[0];if(i.type!=="block-scalar-header")throw new Error("Invalid block scalar header");i.source=s,n.source=r}else{let{offset:i}=n,o="indent"in n?n.indent:-1,a=[{type:"block-scalar-header",offset:i,indent:o,source:s}];Fd(a,"end"in n?n.end:void 0)||a.push({type:"newline",offset:-1,indent:o,source:`
117
+ `});for(let l of Object.keys(n))l!=="type"&&l!=="offset"&&delete n[l];Object.assign(n,{type:"block-scalar",indent:o,props:a,source:r})}}function Fd(n,e){if(e)for(let t of e)switch(t.type){case"space":case"comment":n.push(t);break;case"newline":return n.push(t),!0}return!1}function qo(n,e,t){switch(n.type){case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":n.type=t,n.source=e;break;case"block-scalar":{let s=n.props.slice(1),r=e.length;n.props[0].type==="block-scalar-header"&&(r-=n.props[0].source.length);for(let i of s)i.offset+=r;delete n.props,Object.assign(n,{type:t,source:e,end:s});break}case"block-map":case"block-seq":{let r={type:"newline",offset:n.offset+e.length,indent:n.indent,source:`
118
+ `};delete n.items,Object.assign(n,{type:t,source:e,end:[r]});break}default:{let s="indent"in n?n.indent:-1,r="end"in n&&Array.isArray(n.end)?n.end.filter(i=>i.type==="space"||i.type==="comment"||i.type==="newline"):[];for(let i of Object.keys(n))i!=="type"&&i!=="offset"&&delete n[i];Object.assign(n,{type:t,indent:s,source:e,end:r})}}}Xn.createScalarToken=Hw;Xn.resolveAsScalar=Gw;Xn.setScalarValue=Ww});var Hd=I(Gd=>{"use strict";var Yw=n=>"type"in n?er(n):Zn(n);function er(n){switch(n.type){case"block-scalar":{let e="";for(let t of n.props)e+=er(t);return e+n.source}case"block-map":case"block-seq":{let e="";for(let t of n.items)e+=Zn(t);return e}case"flow-collection":{let e=n.start.source;for(let t of n.items)e+=Zn(t);for(let t of n.end)e+=t.source;return e}case"document":{let e=Zn(n);if(n.end)for(let t of n.end)e+=t.source;return e}default:{let e=n.source;if("end"in n&&n.end)for(let t of n.end)e+=t.source;return e}}}function Zn({start:n,key:e,sep:t,value:s}){let r="";for(let i of n)r+=i.source;if(e&&(r+=er(e)),t)for(let i of t)r+=i.source;return s&&(r+=er(s)),r}Gd.stringify=Yw});var Jd=I(Yd=>{"use strict";var jo=Symbol("break visit"),Jw=Symbol("skip children"),Wd=Symbol("remove item");function yt(n,e){"type"in n&&n.type==="document"&&(n={start:n.start,value:n.value}),Vd(Object.freeze([]),n,e)}yt.BREAK=jo;yt.SKIP=Jw;yt.REMOVE=Wd;yt.itemAtPath=(n,e)=>{let t=n;for(let[s,r]of e){let i=t?.[s];if(i&&"items"in i)t=i.items[r];else return}return t};yt.parentCollection=(n,e)=>{let t=yt.itemAtPath(n,e.slice(0,-1)),s=e[e.length-1][0],r=t?.[s];if(r&&"items"in r)return r;throw new Error("Parent collection not found")};function Vd(n,e,t){let s=t(e,n);if(typeof s=="symbol")return s;for(let r of["key","value"]){let i=e[r];if(i&&"items"in i){for(let o=0;o<i.items.length;++o){let a=Vd(Object.freeze(n.concat([[r,o]])),i.items[o],t);if(typeof a=="number")o=a-1;else{if(a===jo)return jo;a===Wd&&(i.items.splice(o,1),o-=1)}}typeof s=="function"&&r==="key"&&(s=s(e,n))}}return typeof s=="function"?s(e,n):s}Yd.visit=yt});var tr=I(ue=>{"use strict";var Fo=Kd(),zw=Hd(),Qw=Jd(),Ko="\uFEFF",Go="",Ho="",Wo="",Xw=n=>!!n&&"items"in n,Zw=n=>!!n&&(n.type==="scalar"||n.type==="single-quoted-scalar"||n.type==="double-quoted-scalar"||n.type==="block-scalar");function eS(n){switch(n){case Ko:return"<BOM>";case Go:return"<DOC>";case Ho:return"<FLOW_END>";case Wo:return"<SCALAR>";default:return JSON.stringify(n)}}function tS(n){switch(n){case Ko:return"byte-order-mark";case Go:return"doc-mode";case Ho:return"flow-error-end";case Wo:return"scalar";case"---":return"doc-start";case"...":return"doc-end";case"":case`
119
119
  `:case`\r
120
- `:return"newline";case"-":return"seq-item-ind";case"?":return"explicit-key-ind";case":":return"map-value-ind";case"{":return"flow-map-start";case"}":return"flow-map-end";case"[":return"flow-seq-start";case"]":return"flow-seq-end";case",":return"comma"}switch(n[0]){case" ":case" ":return"space";case"#":return"comment";case"%":return"directive-line";case"*":return"alias";case"&":return"anchor";case"!":return"tag";case"'":return"single-quoted-scalar";case'"':return"double-quoted-scalar";case"|":case">":return"block-scalar-header"}return null}ue.createScalarToken=jo.createScalarToken;ue.resolveAsScalar=jo.resolveAsScalar;ue.setScalarValue=jo.setScalarValue;ue.stringify=Hw.stringify;ue.visit=Ww.visit;ue.BOM=Fo;ue.DOCUMENT=Ko;ue.FLOW_END=Go;ue.SCALAR=Ho;ue.isCollection=Vw;ue.isScalar=Yw;ue.prettyToken=Jw;ue.tokenType=zw});var Yo=T(Jd=>{"use strict";var Ls=sr();function Ie(n){switch(n){case void 0:case" ":case`
121
- `:case"\r":case" ":return!0;default:return!1}}var Yd=new Set("0123456789ABCDEFabcdef"),Qw=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),nr=new Set(",[]{}"),Xw=new Set(` ,[]{}
122
- \r `),Wo=n=>!n||Xw.has(n),Vo=class{constructor(){this.atEnd=!1,this.blockScalarIndent=-1,this.blockScalarKeep=!1,this.buffer="",this.flowKey=!1,this.flowLevel=0,this.indentNext=0,this.indentValue=0,this.lineEndPos=null,this.next=null,this.pos=0}*lex(e,t=!1){if(e){if(typeof e!="string")throw TypeError("source is not a string");this.buffer=this.buffer?this.buffer+e:e,this.lineEndPos=null}this.atEnd=!t;let s=this.next??"stream";for(;s&&(t||this.hasChars(1));)s=yield*this.parseNext(s)}atLineEnd(){let e=this.pos,t=this.buffer[e];for(;t===" "||t===" ";)t=this.buffer[++e];return!t||t==="#"||t===`
120
+ `:return"newline";case"-":return"seq-item-ind";case"?":return"explicit-key-ind";case":":return"map-value-ind";case"{":return"flow-map-start";case"}":return"flow-map-end";case"[":return"flow-seq-start";case"]":return"flow-seq-end";case",":return"comma"}switch(n[0]){case" ":case" ":return"space";case"#":return"comment";case"%":return"directive-line";case"*":return"alias";case"&":return"anchor";case"!":return"tag";case"'":return"single-quoted-scalar";case'"':return"double-quoted-scalar";case"|":case">":return"block-scalar-header"}return null}ue.createScalarToken=Fo.createScalarToken;ue.resolveAsScalar=Fo.resolveAsScalar;ue.setScalarValue=Fo.setScalarValue;ue.stringify=zw.stringify;ue.visit=Qw.visit;ue.BOM=Ko;ue.DOCUMENT=Go;ue.FLOW_END=Ho;ue.SCALAR=Wo;ue.isCollection=Xw;ue.isScalar=Zw;ue.prettyToken=eS;ue.tokenType=tS});var Jo=I(Qd=>{"use strict";var Ds=tr();function Ie(n){switch(n){case void 0:case" ":case`
121
+ `:case"\r":case" ":return!0;default:return!1}}var zd=new Set("0123456789ABCDEFabcdef"),sS=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),sr=new Set(",[]{}"),nS=new Set(` ,[]{}
122
+ \r `),Vo=n=>!n||nS.has(n),Yo=class{constructor(){this.atEnd=!1,this.blockScalarIndent=-1,this.blockScalarKeep=!1,this.buffer="",this.flowKey=!1,this.flowLevel=0,this.indentNext=0,this.indentValue=0,this.lineEndPos=null,this.next=null,this.pos=0}*lex(e,t=!1){if(e){if(typeof e!="string")throw TypeError("source is not a string");this.buffer=this.buffer?this.buffer+e:e,this.lineEndPos=null}this.atEnd=!t;let s=this.next??"stream";for(;s&&(t||this.hasChars(1));)s=yield*this.parseNext(s)}atLineEnd(){let e=this.pos,t=this.buffer[e];for(;t===" "||t===" ";)t=this.buffer[++e];return!t||t==="#"||t===`
123
123
  `?!0:t==="\r"?this.buffer[e+1]===`
124
124
  `:!1}charAt(e){return this.buffer[this.pos+e]}continueScalar(e){let t=this.buffer[e];if(this.indentNext>0){let s=0;for(;t===" ";)t=this.buffer[++s+e];if(t==="\r"){let r=this.buffer[s+e+1];if(r===`
125
125
  `||!r&&!this.atEnd)return e+s+1}return t===`
126
126
  `||s>=this.indentNext||!t&&!this.atEnd?e+s:-1}if(t==="-"||t==="."){let s=this.buffer.substr(e,3);if((s==="---"||s==="...")&&Ie(this.buffer[e+3]))return-1}return e}getLine(){let e=this.lineEndPos;return(typeof e!="number"||e!==-1&&e<this.pos)&&(e=this.buffer.indexOf(`
127
- `,this.pos),this.lineEndPos=e),e===-1?this.atEnd?this.buffer.substring(this.pos):null:(this.buffer[e-1]==="\r"&&(e-=1),this.buffer.substring(this.pos,e))}hasChars(e){return this.pos+e<=this.buffer.length}setNext(e){return this.buffer=this.buffer.substring(this.pos),this.pos=0,this.lineEndPos=null,this.next=e,null}peek(e){return this.buffer.substr(this.pos,e)}*parseNext(e){switch(e){case"stream":return yield*this.parseStream();case"line-start":return yield*this.parseLineStart();case"block-start":return yield*this.parseBlockStart();case"doc":return yield*this.parseDocument();case"flow":return yield*this.parseFlowCollection();case"quoted-scalar":return yield*this.parseQuotedScalar();case"block-scalar":return yield*this.parseBlockScalar();case"plain-scalar":return yield*this.parsePlainScalar()}}*parseStream(){let e=this.getLine();if(e===null)return this.setNext("stream");if(e[0]===Ls.BOM&&(yield*this.pushCount(1),e=e.substring(1)),e[0]==="%"){let t=e.length,s=e.indexOf("#");for(;s!==-1;){let i=e[s-1];if(i===" "||i===" "){t=s-1;break}else s=e.indexOf("#",s+1)}for(;;){let i=e[t-1];if(i===" "||i===" ")t-=1;else break}let r=(yield*this.pushCount(t))+(yield*this.pushSpaces(!0));return yield*this.pushCount(e.length-r),this.pushNewline(),"stream"}if(this.atLineEnd()){let t=yield*this.pushSpaces(!0);return yield*this.pushCount(e.length-t),yield*this.pushNewline(),"stream"}return yield Ls.DOCUMENT,yield*this.parseLineStart()}*parseLineStart(){let e=this.charAt(0);if(!e&&!this.atEnd)return this.setNext("line-start");if(e==="-"||e==="."){if(!this.atEnd&&!this.hasChars(4))return this.setNext("line-start");let t=this.peek(3);if((t==="---"||t==="...")&&Ie(this.charAt(3)))return yield*this.pushCount(3),this.indentValue=0,this.indentNext=0,t==="---"?"doc":"stream"}return this.indentValue=yield*this.pushSpaces(!1),this.indentNext>this.indentValue&&!Ie(this.charAt(1))&&(this.indentNext=this.indentValue),yield*this.parseBlockStart()}*parseBlockStart(){let[e,t]=this.peek(2);if(!t&&!this.atEnd)return this.setNext("block-start");if((e==="-"||e==="?"||e===":")&&Ie(t)){let s=(yield*this.pushCount(1))+(yield*this.pushSpaces(!0));return this.indentNext=this.indentValue+1,this.indentValue+=s,yield*this.parseBlockStart()}return"doc"}*parseDocument(){yield*this.pushSpaces(!0);let e=this.getLine();if(e===null)return this.setNext("doc");let t=yield*this.pushIndicators();switch(e[t]){case"#":yield*this.pushCount(e.length-t);case void 0:return yield*this.pushNewline(),yield*this.parseLineStart();case"{":case"[":return yield*this.pushCount(1),this.flowKey=!1,this.flowLevel=1,"flow";case"}":case"]":return yield*this.pushCount(1),"doc";case"*":return yield*this.pushUntil(Wo),"doc";case'"':case"'":return yield*this.parseQuotedScalar();case"|":case">":return t+=yield*this.parseBlockScalarHeader(),t+=yield*this.pushSpaces(!0),yield*this.pushCount(e.length-t),yield*this.pushNewline(),yield*this.parseBlockScalar();default:return yield*this.parsePlainScalar()}}*parseFlowCollection(){let e,t,s=-1;do e=yield*this.pushNewline(),e>0?(t=yield*this.pushSpaces(!1),this.indentValue=s=t):t=0,t+=yield*this.pushSpaces(!0);while(e+t>0);let r=this.getLine();if(r===null)return this.setNext("flow");if((s!==-1&&s<this.indentNext&&r[0]!=="#"||s===0&&(r.startsWith("---")||r.startsWith("..."))&&Ie(r[3]))&&!(s===this.indentNext-1&&this.flowLevel===1&&(r[0]==="]"||r[0]==="}")))return this.flowLevel=0,yield Ls.FLOW_END,yield*this.parseLineStart();let i=0;for(;r[i]===",";)i+=yield*this.pushCount(1),i+=yield*this.pushSpaces(!0),this.flowKey=!1;switch(i+=yield*this.pushIndicators(),r[i]){case void 0:return"flow";case"#":return yield*this.pushCount(r.length-i),"flow";case"{":case"[":return yield*this.pushCount(1),this.flowKey=!1,this.flowLevel+=1,"flow";case"}":case"]":return yield*this.pushCount(1),this.flowKey=!0,this.flowLevel-=1,this.flowLevel?"flow":"doc";case"*":return yield*this.pushUntil(Wo),"flow";case'"':case"'":return this.flowKey=!0,yield*this.parseQuotedScalar();case":":{let o=this.charAt(1);if(this.flowKey||Ie(o)||o===",")return this.flowKey=!1,yield*this.pushCount(1),yield*this.pushSpaces(!0),"flow"}default:return this.flowKey=!1,yield*this.parsePlainScalar()}}*parseQuotedScalar(){let e=this.charAt(0),t=this.buffer.indexOf(e,this.pos+1);if(e==="'")for(;t!==-1&&this.buffer[t+1]==="'";)t=this.buffer.indexOf("'",t+2);else for(;t!==-1;){let i=0;for(;this.buffer[t-1-i]==="\\";)i+=1;if(i%2===0)break;t=this.buffer.indexOf('"',t+1)}let s=this.buffer.substring(0,t),r=s.indexOf(`
127
+ `,this.pos),this.lineEndPos=e),e===-1?this.atEnd?this.buffer.substring(this.pos):null:(this.buffer[e-1]==="\r"&&(e-=1),this.buffer.substring(this.pos,e))}hasChars(e){return this.pos+e<=this.buffer.length}setNext(e){return this.buffer=this.buffer.substring(this.pos),this.pos=0,this.lineEndPos=null,this.next=e,null}peek(e){return this.buffer.substr(this.pos,e)}*parseNext(e){switch(e){case"stream":return yield*this.parseStream();case"line-start":return yield*this.parseLineStart();case"block-start":return yield*this.parseBlockStart();case"doc":return yield*this.parseDocument();case"flow":return yield*this.parseFlowCollection();case"quoted-scalar":return yield*this.parseQuotedScalar();case"block-scalar":return yield*this.parseBlockScalar();case"plain-scalar":return yield*this.parsePlainScalar()}}*parseStream(){let e=this.getLine();if(e===null)return this.setNext("stream");if(e[0]===Ds.BOM&&(yield*this.pushCount(1),e=e.substring(1)),e[0]==="%"){let t=e.length,s=e.indexOf("#");for(;s!==-1;){let i=e[s-1];if(i===" "||i===" "){t=s-1;break}else s=e.indexOf("#",s+1)}for(;;){let i=e[t-1];if(i===" "||i===" ")t-=1;else break}let r=(yield*this.pushCount(t))+(yield*this.pushSpaces(!0));return yield*this.pushCount(e.length-r),this.pushNewline(),"stream"}if(this.atLineEnd()){let t=yield*this.pushSpaces(!0);return yield*this.pushCount(e.length-t),yield*this.pushNewline(),"stream"}return yield Ds.DOCUMENT,yield*this.parseLineStart()}*parseLineStart(){let e=this.charAt(0);if(!e&&!this.atEnd)return this.setNext("line-start");if(e==="-"||e==="."){if(!this.atEnd&&!this.hasChars(4))return this.setNext("line-start");let t=this.peek(3);if((t==="---"||t==="...")&&Ie(this.charAt(3)))return yield*this.pushCount(3),this.indentValue=0,this.indentNext=0,t==="---"?"doc":"stream"}return this.indentValue=yield*this.pushSpaces(!1),this.indentNext>this.indentValue&&!Ie(this.charAt(1))&&(this.indentNext=this.indentValue),yield*this.parseBlockStart()}*parseBlockStart(){let[e,t]=this.peek(2);if(!t&&!this.atEnd)return this.setNext("block-start");if((e==="-"||e==="?"||e===":")&&Ie(t)){let s=(yield*this.pushCount(1))+(yield*this.pushSpaces(!0));return this.indentNext=this.indentValue+1,this.indentValue+=s,yield*this.parseBlockStart()}return"doc"}*parseDocument(){yield*this.pushSpaces(!0);let e=this.getLine();if(e===null)return this.setNext("doc");let t=yield*this.pushIndicators();switch(e[t]){case"#":yield*this.pushCount(e.length-t);case void 0:return yield*this.pushNewline(),yield*this.parseLineStart();case"{":case"[":return yield*this.pushCount(1),this.flowKey=!1,this.flowLevel=1,"flow";case"}":case"]":return yield*this.pushCount(1),"doc";case"*":return yield*this.pushUntil(Vo),"doc";case'"':case"'":return yield*this.parseQuotedScalar();case"|":case">":return t+=yield*this.parseBlockScalarHeader(),t+=yield*this.pushSpaces(!0),yield*this.pushCount(e.length-t),yield*this.pushNewline(),yield*this.parseBlockScalar();default:return yield*this.parsePlainScalar()}}*parseFlowCollection(){let e,t,s=-1;do e=yield*this.pushNewline(),e>0?(t=yield*this.pushSpaces(!1),this.indentValue=s=t):t=0,t+=yield*this.pushSpaces(!0);while(e+t>0);let r=this.getLine();if(r===null)return this.setNext("flow");if((s!==-1&&s<this.indentNext&&r[0]!=="#"||s===0&&(r.startsWith("---")||r.startsWith("..."))&&Ie(r[3]))&&!(s===this.indentNext-1&&this.flowLevel===1&&(r[0]==="]"||r[0]==="}")))return this.flowLevel=0,yield Ds.FLOW_END,yield*this.parseLineStart();let i=0;for(;r[i]===",";)i+=yield*this.pushCount(1),i+=yield*this.pushSpaces(!0),this.flowKey=!1;switch(i+=yield*this.pushIndicators(),r[i]){case void 0:return"flow";case"#":return yield*this.pushCount(r.length-i),"flow";case"{":case"[":return yield*this.pushCount(1),this.flowKey=!1,this.flowLevel+=1,"flow";case"}":case"]":return yield*this.pushCount(1),this.flowKey=!0,this.flowLevel-=1,this.flowLevel?"flow":"doc";case"*":return yield*this.pushUntil(Vo),"flow";case'"':case"'":return this.flowKey=!0,yield*this.parseQuotedScalar();case":":{let o=this.charAt(1);if(this.flowKey||Ie(o)||o===",")return this.flowKey=!1,yield*this.pushCount(1),yield*this.pushSpaces(!0),"flow"}default:return this.flowKey=!1,yield*this.parsePlainScalar()}}*parseQuotedScalar(){let e=this.charAt(0),t=this.buffer.indexOf(e,this.pos+1);if(e==="'")for(;t!==-1&&this.buffer[t+1]==="'";)t=this.buffer.indexOf("'",t+2);else for(;t!==-1;){let i=0;for(;this.buffer[t-1-i]==="\\";)i+=1;if(i%2===0)break;t=this.buffer.indexOf('"',t+1)}let s=this.buffer.substring(0,t),r=s.indexOf(`
128
128
  `,this.pos);if(r!==-1){for(;r!==-1;){let i=this.continueScalar(r+1);if(i===-1)break;r=s.indexOf(`
129
129
  `,i)}r!==-1&&(t=r-(s[r-1]==="\r"?2:1))}if(t===-1){if(!this.atEnd)return this.setNext("quoted-scalar");t=this.buffer.length}return yield*this.pushToIndex(t+1,!1),this.flowLevel?"flow":"doc"}*parseBlockScalarHeader(){this.blockScalarIndent=-1,this.blockScalarKeep=!1;let e=this.pos;for(;;){let t=this.buffer[++e];if(t==="+")this.blockScalarKeep=!0;else if(t>"0"&&t<="9")this.blockScalarIndent=Number(t)-1;else if(t!=="-")break}return yield*this.pushUntil(t=>Ie(t)||t==="#")}*parseBlockScalar(){let e=this.pos-1,t=0,s;e:for(let i=this.pos;s=this.buffer[i];++i)switch(s){case" ":t+=1;break;case`
130
130
  `:e=i,t=0;break;case"\r":{let o=this.buffer[i+1];if(!o&&!this.atEnd)return this.setNext("block-scalar");if(o===`
131
131
  `)break}default:break e}if(!s&&!this.atEnd)return this.setNext("block-scalar");if(t>=this.indentNext){this.blockScalarIndent===-1?this.indentNext=t:this.indentNext=this.blockScalarIndent+(this.indentNext===0?1:this.indentNext);do{let i=this.continueScalar(e+1);if(i===-1)break;e=this.buffer.indexOf(`
132
132
  `,i)}while(e!==-1);if(e===-1){if(!this.atEnd)return this.setNext("block-scalar");e=this.buffer.length}}let r=e+1;for(s=this.buffer[r];s===" ";)s=this.buffer[++r];if(s===" "){for(;s===" "||s===" "||s==="\r"||s===`
133
133
  `;)s=this.buffer[++r];e=r-1}else if(!this.blockScalarKeep)do{let i=e-1,o=this.buffer[i];o==="\r"&&(o=this.buffer[--i]);let a=i;for(;o===" ";)o=this.buffer[--i];if(o===`
134
- `&&i>=this.pos&&i+1+t>a)e=i;else break}while(!0);return yield Ls.SCALAR,yield*this.pushToIndex(e+1,!0),yield*this.parseLineStart()}*parsePlainScalar(){let e=this.flowLevel>0,t=this.pos-1,s=this.pos-1,r;for(;r=this.buffer[++s];)if(r===":"){let i=this.buffer[s+1];if(Ie(i)||e&&nr.has(i))break;t=s}else if(Ie(r)){let i=this.buffer[s+1];if(r==="\r"&&(i===`
134
+ `&&i>=this.pos&&i+1+t>a)e=i;else break}while(!0);return yield Ds.SCALAR,yield*this.pushToIndex(e+1,!0),yield*this.parseLineStart()}*parsePlainScalar(){let e=this.flowLevel>0,t=this.pos-1,s=this.pos-1,r;for(;r=this.buffer[++s];)if(r===":"){let i=this.buffer[s+1];if(Ie(i)||e&&sr.has(i))break;t=s}else if(Ie(r)){let i=this.buffer[s+1];if(r==="\r"&&(i===`
135
135
  `?(s+=1,r=`
136
- `,i=this.buffer[s+1]):t=s),i==="#"||e&&nr.has(i))break;if(r===`
137
- `){let o=this.continueScalar(s+1);if(o===-1)break;s=Math.max(s,o-2)}}else{if(e&&nr.has(r))break;t=s}return!r&&!this.atEnd?this.setNext("plain-scalar"):(yield Ls.SCALAR,yield*this.pushToIndex(t+1,!0),e?"flow":"doc")}*pushCount(e){return e>0?(yield this.buffer.substr(this.pos,e),this.pos+=e,e):0}*pushToIndex(e,t){let s=this.buffer.slice(this.pos,e);return s?(yield s,this.pos+=s.length,s.length):(t&&(yield""),0)}*pushIndicators(){switch(this.charAt(0)){case"!":return(yield*this.pushTag())+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"&":return(yield*this.pushUntil(Wo))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"-":case"?":case":":{let e=this.flowLevel>0,t=this.charAt(1);if(Ie(t)||e&&nr.has(t))return e?this.flowKey&&(this.flowKey=!1):this.indentNext=this.indentValue+1,(yield*this.pushCount(1))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators())}}return 0}*pushTag(){if(this.charAt(1)==="<"){let e=this.pos+2,t=this.buffer[e];for(;!Ie(t)&&t!==">";)t=this.buffer[++e];return yield*this.pushToIndex(t===">"?e+1:e,!1)}else{let e=this.pos+1,t=this.buffer[e];for(;t;)if(Qw.has(t))t=this.buffer[++e];else if(t==="%"&&Yd.has(this.buffer[e+1])&&Yd.has(this.buffer[e+2]))t=this.buffer[e+=3];else break;return yield*this.pushToIndex(e,!1)}}*pushNewline(){let e=this.buffer[this.pos];return e===`
136
+ `,i=this.buffer[s+1]):t=s),i==="#"||e&&sr.has(i))break;if(r===`
137
+ `){let o=this.continueScalar(s+1);if(o===-1)break;s=Math.max(s,o-2)}}else{if(e&&sr.has(r))break;t=s}return!r&&!this.atEnd?this.setNext("plain-scalar"):(yield Ds.SCALAR,yield*this.pushToIndex(t+1,!0),e?"flow":"doc")}*pushCount(e){return e>0?(yield this.buffer.substr(this.pos,e),this.pos+=e,e):0}*pushToIndex(e,t){let s=this.buffer.slice(this.pos,e);return s?(yield s,this.pos+=s.length,s.length):(t&&(yield""),0)}*pushIndicators(){switch(this.charAt(0)){case"!":return(yield*this.pushTag())+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"&":return(yield*this.pushUntil(Vo))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"-":case"?":case":":{let e=this.flowLevel>0,t=this.charAt(1);if(Ie(t)||e&&sr.has(t))return e?this.flowKey&&(this.flowKey=!1):this.indentNext=this.indentValue+1,(yield*this.pushCount(1))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators())}}return 0}*pushTag(){if(this.charAt(1)==="<"){let e=this.pos+2,t=this.buffer[e];for(;!Ie(t)&&t!==">";)t=this.buffer[++e];return yield*this.pushToIndex(t===">"?e+1:e,!1)}else{let e=this.pos+1,t=this.buffer[e];for(;t;)if(sS.has(t))t=this.buffer[++e];else if(t==="%"&&zd.has(this.buffer[e+1])&&zd.has(this.buffer[e+2]))t=this.buffer[e+=3];else break;return yield*this.pushToIndex(e,!1)}}*pushNewline(){let e=this.buffer[this.pos];return e===`
138
138
  `?yield*this.pushCount(1):e==="\r"&&this.charAt(1)===`
139
- `?yield*this.pushCount(2):0}*pushSpaces(e){let t=this.pos-1,s;do s=this.buffer[++t];while(s===" "||e&&s===" ");let r=t-this.pos;return r>0&&(yield this.buffer.substr(this.pos,r),this.pos=t),r}*pushUntil(e){let t=this.pos,s=this.buffer[t];for(;!e(s);)s=this.buffer[++t];return yield*this.pushToIndex(t,!1)}};Jd.Lexer=Vo});var zo=T(zd=>{"use strict";var Jo=class{constructor(){this.lineStarts=[],this.addNewLine=e=>this.lineStarts.push(e),this.linePos=e=>{let t=0,s=this.lineStarts.length;for(;t<s;){let i=t+s>>1;this.lineStarts[i]<e?t=i+1:s=i}if(this.lineStarts[t]===e)return{line:t+1,col:1};if(t===0)return{line:0,col:e};let r=this.lineStarts[t-1];return{line:t,col:e-r+1}}}};zd.LineCounter=Jo});var Xo=T(tu=>{"use strict";var Zw=F("process"),Qd=sr(),eS=Yo();function it(n,e){for(let t=0;t<n.length;++t)if(n[t].type===e)return!0;return!1}function Xd(n){for(let e=0;e<n.length;++e)switch(n[e].type){case"space":case"comment":case"newline":break;default:return e}return-1}function eu(n){switch(n?.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"flow-collection":return!0;default:return!1}}function rr(n){switch(n.type){case"document":return n.start;case"block-map":{let e=n.items[n.items.length-1];return e.sep??e.start}case"block-seq":return n.items[n.items.length-1].start;default:return[]}}function Kt(n){if(n.length===0)return[];let e=n.length;e:for(;--e>=0;)switch(n[e].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break e}for(;n[++e]?.type==="space";);return n.splice(e,n.length)}function Zd(n){if(n.start.type==="flow-seq-start")for(let e of n.items)e.sep&&!e.value&&!it(e.start,"explicit-key-ind")&&!it(e.sep,"map-value-ind")&&(e.key&&(e.value=e.key),delete e.key,eu(e.value)?e.value.end?Array.prototype.push.apply(e.value.end,e.sep):e.value.end=e.sep:Array.prototype.push.apply(e.start,e.sep),delete e.sep)}var Qo=class{constructor(e){this.atNewLine=!0,this.atScalar=!1,this.indent=0,this.offset=0,this.onKeyLine=!1,this.stack=[],this.source="",this.type="",this.lexer=new eS.Lexer,this.onNewLine=e}*parse(e,t=!1){this.onNewLine&&this.offset===0&&this.onNewLine(0);for(let s of this.lexer.lex(e,t))yield*this.next(s);t||(yield*this.end())}*next(e){if(this.source=e,Zw.env.LOG_TOKENS&&console.log("|",Qd.prettyToken(e)),this.atScalar){this.atScalar=!1,yield*this.step(),this.offset+=e.length;return}let t=Qd.tokenType(e);if(t)if(t==="scalar")this.atNewLine=!1,this.atScalar=!0,this.type="scalar";else{switch(this.type=t,yield*this.step(),t){case"newline":this.atNewLine=!0,this.indent=0,this.onNewLine&&this.onNewLine(this.offset+e.length);break;case"space":this.atNewLine&&e[0]===" "&&(this.indent+=e.length);break;case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":this.atNewLine&&(this.indent+=e.length);break;case"doc-mode":case"flow-error-end":return;default:this.atNewLine=!1}this.offset+=e.length}else{let s=`Not a YAML token: ${e}`;yield*this.pop({type:"error",offset:this.offset,message:s,source:e}),this.offset+=e.length}}*end(){for(;this.stack.length>0;)yield*this.pop()}get sourceToken(){return{type:this.type,offset:this.offset,indent:this.indent,source:this.source}}*step(){let e=this.peek(1);if(this.type==="doc-end"&&e?.type!=="doc-end"){for(;this.stack.length>0;)yield*this.pop();this.stack.push({type:"doc-end",offset:this.offset,source:this.source});return}if(!e)return yield*this.stream();switch(e.type){case"document":return yield*this.document(e);case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*this.scalar(e);case"block-scalar":return yield*this.blockScalar(e);case"block-map":return yield*this.blockMap(e);case"block-seq":return yield*this.blockSequence(e);case"flow-collection":return yield*this.flowCollection(e);case"doc-end":return yield*this.documentEnd(e)}yield*this.pop()}peek(e){return this.stack[this.stack.length-e]}*pop(e){let t=e??this.stack.pop();if(!t)yield{type:"error",offset:this.offset,source:"",message:"Tried to pop an empty stack"};else if(this.stack.length===0)yield t;else{let s=this.peek(1);switch(t.type==="block-scalar"?t.indent="indent"in s?s.indent:0:t.type==="flow-collection"&&s.type==="document"&&(t.indent=0),t.type==="flow-collection"&&Zd(t),s.type){case"document":s.value=t;break;case"block-scalar":s.props.push(t);break;case"block-map":{let r=s.items[s.items.length-1];if(r.value){s.items.push({start:[],key:t,sep:[]}),this.onKeyLine=!0;return}else if(r.sep)r.value=t;else{Object.assign(r,{key:t,sep:[]}),this.onKeyLine=!r.explicitKey;return}break}case"block-seq":{let r=s.items[s.items.length-1];r.value?s.items.push({start:[],value:t}):r.value=t;break}case"flow-collection":{let r=s.items[s.items.length-1];!r||r.value?s.items.push({start:[],key:t,sep:[]}):r.sep?r.value=t:Object.assign(r,{key:t,sep:[]});return}default:yield*this.pop(),yield*this.pop(t)}if((s.type==="document"||s.type==="block-map"||s.type==="block-seq")&&(t.type==="block-map"||t.type==="block-seq")){let r=t.items[t.items.length-1];r&&!r.sep&&!r.value&&r.start.length>0&&Xd(r.start)===-1&&(t.indent===0||r.start.every(i=>i.type!=="comment"||i.indent<t.indent))&&(s.type==="document"?s.end=r.start:s.items.push({start:r.start}),t.items.splice(-1,1))}}}*stream(){switch(this.type){case"directive-line":yield{type:"directive",offset:this.offset,source:this.source};return;case"byte-order-mark":case"space":case"comment":case"newline":yield this.sourceToken;return;case"doc-mode":case"doc-start":{let e={type:"document",offset:this.offset,start:[]};this.type==="doc-start"&&e.start.push(this.sourceToken),this.stack.push(e);return}}yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML stream`,source:this.source}}*document(e){if(e.value)return yield*this.lineEnd(e);switch(this.type){case"doc-start":{Xd(e.start)!==-1?(yield*this.pop(),yield*this.step()):e.start.push(this.sourceToken);return}case"anchor":case"tag":case"space":case"comment":case"newline":e.start.push(this.sourceToken);return}let t=this.startBlockValue(e);t?this.stack.push(t):yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML document`,source:this.source}}*scalar(e){if(this.type==="map-value-ind"){let t=rr(this.peek(2)),s=Kt(t),r;e.end?(r=e.end,r.push(this.sourceToken),delete e.end):r=[this.sourceToken];let i={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:s,key:e,sep:r}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=i}else yield*this.lineEnd(e)}*blockScalar(e){switch(this.type){case"space":case"comment":case"newline":e.props.push(this.sourceToken);return;case"scalar":if(e.source=this.source,this.atNewLine=!0,this.indent=0,this.onNewLine){let t=this.source.indexOf(`
139
+ `?yield*this.pushCount(2):0}*pushSpaces(e){let t=this.pos-1,s;do s=this.buffer[++t];while(s===" "||e&&s===" ");let r=t-this.pos;return r>0&&(yield this.buffer.substr(this.pos,r),this.pos=t),r}*pushUntil(e){let t=this.pos,s=this.buffer[t];for(;!e(s);)s=this.buffer[++t];return yield*this.pushToIndex(t,!1)}};Qd.Lexer=Yo});var Qo=I(Xd=>{"use strict";var zo=class{constructor(){this.lineStarts=[],this.addNewLine=e=>this.lineStarts.push(e),this.linePos=e=>{let t=0,s=this.lineStarts.length;for(;t<s;){let i=t+s>>1;this.lineStarts[i]<e?t=i+1:s=i}if(this.lineStarts[t]===e)return{line:t+1,col:1};if(t===0)return{line:0,col:e};let r=this.lineStarts[t-1];return{line:t,col:e-r+1}}}};Xd.LineCounter=zo});var Zo=I(nu=>{"use strict";var rS=K("process"),Zd=tr(),iS=Jo();function ot(n,e){for(let t=0;t<n.length;++t)if(n[t].type===e)return!0;return!1}function eu(n){for(let e=0;e<n.length;++e)switch(n[e].type){case"space":case"comment":case"newline":break;default:return e}return-1}function su(n){switch(n?.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"flow-collection":return!0;default:return!1}}function nr(n){switch(n.type){case"document":return n.start;case"block-map":{let e=n.items[n.items.length-1];return e.sep??e.start}case"block-seq":return n.items[n.items.length-1].start;default:return[]}}function jt(n){if(n.length===0)return[];let e=n.length;e:for(;--e>=0;)switch(n[e].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break e}for(;n[++e]?.type==="space";);return n.splice(e,n.length)}function tu(n){if(n.start.type==="flow-seq-start")for(let e of n.items)e.sep&&!e.value&&!ot(e.start,"explicit-key-ind")&&!ot(e.sep,"map-value-ind")&&(e.key&&(e.value=e.key),delete e.key,su(e.value)?e.value.end?Array.prototype.push.apply(e.value.end,e.sep):e.value.end=e.sep:Array.prototype.push.apply(e.start,e.sep),delete e.sep)}var Xo=class{constructor(e){this.atNewLine=!0,this.atScalar=!1,this.indent=0,this.offset=0,this.onKeyLine=!1,this.stack=[],this.source="",this.type="",this.lexer=new iS.Lexer,this.onNewLine=e}*parse(e,t=!1){this.onNewLine&&this.offset===0&&this.onNewLine(0);for(let s of this.lexer.lex(e,t))yield*this.next(s);t||(yield*this.end())}*next(e){if(this.source=e,rS.env.LOG_TOKENS&&console.log("|",Zd.prettyToken(e)),this.atScalar){this.atScalar=!1,yield*this.step(),this.offset+=e.length;return}let t=Zd.tokenType(e);if(t)if(t==="scalar")this.atNewLine=!1,this.atScalar=!0,this.type="scalar";else{switch(this.type=t,yield*this.step(),t){case"newline":this.atNewLine=!0,this.indent=0,this.onNewLine&&this.onNewLine(this.offset+e.length);break;case"space":this.atNewLine&&e[0]===" "&&(this.indent+=e.length);break;case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":this.atNewLine&&(this.indent+=e.length);break;case"doc-mode":case"flow-error-end":return;default:this.atNewLine=!1}this.offset+=e.length}else{let s=`Not a YAML token: ${e}`;yield*this.pop({type:"error",offset:this.offset,message:s,source:e}),this.offset+=e.length}}*end(){for(;this.stack.length>0;)yield*this.pop()}get sourceToken(){return{type:this.type,offset:this.offset,indent:this.indent,source:this.source}}*step(){let e=this.peek(1);if(this.type==="doc-end"&&e?.type!=="doc-end"){for(;this.stack.length>0;)yield*this.pop();this.stack.push({type:"doc-end",offset:this.offset,source:this.source});return}if(!e)return yield*this.stream();switch(e.type){case"document":return yield*this.document(e);case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*this.scalar(e);case"block-scalar":return yield*this.blockScalar(e);case"block-map":return yield*this.blockMap(e);case"block-seq":return yield*this.blockSequence(e);case"flow-collection":return yield*this.flowCollection(e);case"doc-end":return yield*this.documentEnd(e)}yield*this.pop()}peek(e){return this.stack[this.stack.length-e]}*pop(e){let t=e??this.stack.pop();if(!t)yield{type:"error",offset:this.offset,source:"",message:"Tried to pop an empty stack"};else if(this.stack.length===0)yield t;else{let s=this.peek(1);switch(t.type==="block-scalar"?t.indent="indent"in s?s.indent:0:t.type==="flow-collection"&&s.type==="document"&&(t.indent=0),t.type==="flow-collection"&&tu(t),s.type){case"document":s.value=t;break;case"block-scalar":s.props.push(t);break;case"block-map":{let r=s.items[s.items.length-1];if(r.value){s.items.push({start:[],key:t,sep:[]}),this.onKeyLine=!0;return}else if(r.sep)r.value=t;else{Object.assign(r,{key:t,sep:[]}),this.onKeyLine=!r.explicitKey;return}break}case"block-seq":{let r=s.items[s.items.length-1];r.value?s.items.push({start:[],value:t}):r.value=t;break}case"flow-collection":{let r=s.items[s.items.length-1];!r||r.value?s.items.push({start:[],key:t,sep:[]}):r.sep?r.value=t:Object.assign(r,{key:t,sep:[]});return}default:yield*this.pop(),yield*this.pop(t)}if((s.type==="document"||s.type==="block-map"||s.type==="block-seq")&&(t.type==="block-map"||t.type==="block-seq")){let r=t.items[t.items.length-1];r&&!r.sep&&!r.value&&r.start.length>0&&eu(r.start)===-1&&(t.indent===0||r.start.every(i=>i.type!=="comment"||i.indent<t.indent))&&(s.type==="document"?s.end=r.start:s.items.push({start:r.start}),t.items.splice(-1,1))}}}*stream(){switch(this.type){case"directive-line":yield{type:"directive",offset:this.offset,source:this.source};return;case"byte-order-mark":case"space":case"comment":case"newline":yield this.sourceToken;return;case"doc-mode":case"doc-start":{let e={type:"document",offset:this.offset,start:[]};this.type==="doc-start"&&e.start.push(this.sourceToken),this.stack.push(e);return}}yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML stream`,source:this.source}}*document(e){if(e.value)return yield*this.lineEnd(e);switch(this.type){case"doc-start":{eu(e.start)!==-1?(yield*this.pop(),yield*this.step()):e.start.push(this.sourceToken);return}case"anchor":case"tag":case"space":case"comment":case"newline":e.start.push(this.sourceToken);return}let t=this.startBlockValue(e);t?this.stack.push(t):yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML document`,source:this.source}}*scalar(e){if(this.type==="map-value-ind"){let t=nr(this.peek(2)),s=jt(t),r;e.end?(r=e.end,r.push(this.sourceToken),delete e.end):r=[this.sourceToken];let i={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:s,key:e,sep:r}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=i}else yield*this.lineEnd(e)}*blockScalar(e){switch(this.type){case"space":case"comment":case"newline":e.props.push(this.sourceToken);return;case"scalar":if(e.source=this.source,this.atNewLine=!0,this.indent=0,this.onNewLine){let t=this.source.indexOf(`
140
140
  `)+1;for(;t!==0;)this.onNewLine(this.offset+t),t=this.source.indexOf(`
141
- `,t)+1}yield*this.pop();break;default:yield*this.pop(),yield*this.step()}}*blockMap(e){let t=e.items[e.items.length-1];switch(this.type){case"newline":if(this.onKeyLine=!1,t.value){let s="end"in t.value?t.value.end:void 0;(Array.isArray(s)?s[s.length-1]:void 0)?.type==="comment"?s?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"space":case"comment":if(t.value)e.items.push({start:[this.sourceToken]});else if(t.sep)t.sep.push(this.sourceToken);else{if(this.atIndentedComment(t.start,e.indent)){let r=e.items[e.items.length-2]?.value?.end;if(Array.isArray(r)){Array.prototype.push.apply(r,t.start),r.push(this.sourceToken),e.items.pop();return}}t.start.push(this.sourceToken)}return}if(this.indent>=e.indent){let s=!this.onKeyLine&&this.indent===e.indent,r=s&&(t.sep||t.explicitKey)&&this.type!=="seq-item-ind",i=[];if(r&&t.sep&&!t.value){let o=[];for(let a=0;a<t.sep.length;++a){let l=t.sep[a];switch(l.type){case"newline":o.push(a);break;case"space":break;case"comment":l.indent>e.indent&&(o.length=0);break;default:o.length=0}}o.length>=2&&(i=t.sep.splice(o[1]))}switch(this.type){case"anchor":case"tag":r||t.value?(i.push(this.sourceToken),e.items.push({start:i}),this.onKeyLine=!0):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"explicit-key-ind":!t.sep&&!t.explicitKey?(t.start.push(this.sourceToken),t.explicitKey=!0):r||t.value?(i.push(this.sourceToken),e.items.push({start:i,explicitKey:!0})):this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]}),this.onKeyLine=!0;return;case"map-value-ind":if(t.explicitKey)if(t.sep)if(t.value)e.items.push({start:[],key:null,sep:[this.sourceToken]});else if(it(t.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,key:null,sep:[this.sourceToken]}]});else if(eu(t.key)&&!it(t.sep,"newline")){let o=Kt(t.start),a=t.key,l=t.sep;l.push(this.sourceToken),delete t.key,delete t.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:a,sep:l}]})}else i.length>0?t.sep=t.sep.concat(i,this.sourceToken):t.sep.push(this.sourceToken);else if(it(t.start,"newline"))Object.assign(t,{key:null,sep:[this.sourceToken]});else{let o=Kt(t.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:null,sep:[this.sourceToken]}]})}else t.sep?t.value||r?e.items.push({start:i,key:null,sep:[this.sourceToken]}):it(t.sep,"map-value-ind")?this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]}):t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let o=this.flowScalar(this.type);r||t.value?(e.items.push({start:i,key:o,sep:[]}),this.onKeyLine=!0):t.sep?this.stack.push(o):(Object.assign(t,{key:o,sep:[]}),this.onKeyLine=!0);return}default:{let o=this.startBlockValue(e);if(o){if(o.type==="block-seq"){if(!t.explicitKey&&t.sep&&!it(t.sep,"newline")){yield*this.pop({type:"error",offset:this.offset,message:"Unexpected block-seq-ind on same line with key",source:this.source});return}}else s&&e.items.push({start:i});this.stack.push(o);return}}}}yield*this.pop(),yield*this.step()}*blockSequence(e){let t=e.items[e.items.length-1];switch(this.type){case"newline":if(t.value){let s="end"in t.value?t.value.end:void 0;(Array.isArray(s)?s[s.length-1]:void 0)?.type==="comment"?s?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else t.start.push(this.sourceToken);return;case"space":case"comment":if(t.value)e.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(t.start,e.indent)){let r=e.items[e.items.length-2]?.value?.end;if(Array.isArray(r)){Array.prototype.push.apply(r,t.start),r.push(this.sourceToken),e.items.pop();return}}t.start.push(this.sourceToken)}return;case"anchor":case"tag":if(t.value||this.indent<=e.indent)break;t.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==e.indent)break;t.value||it(t.start,"seq-item-ind")?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken);return}if(this.indent>e.indent){let s=this.startBlockValue(e);if(s){this.stack.push(s);return}}yield*this.pop(),yield*this.step()}*flowCollection(e){let t=e.items[e.items.length-1];if(this.type==="flow-error-end"){let s;do yield*this.pop(),s=this.peek(1);while(s?.type==="flow-collection")}else if(e.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":!t||t.sep?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken);return;case"map-value-ind":!t||t.value?e.items.push({start:[],key:null,sep:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":!t||t.value?e.items.push({start:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let r=this.flowScalar(this.type);!t||t.value?e.items.push({start:[],key:r,sep:[]}):t.sep?this.stack.push(r):Object.assign(t,{key:r,sep:[]});return}case"flow-map-end":case"flow-seq-end":e.end.push(this.sourceToken);return}let s=this.startBlockValue(e);s?this.stack.push(s):(yield*this.pop(),yield*this.step())}else{let s=this.peek(2);if(s.type==="block-map"&&(this.type==="map-value-ind"&&s.indent===e.indent||this.type==="newline"&&!s.items[s.items.length-1].sep))yield*this.pop(),yield*this.step();else if(this.type==="map-value-ind"&&s.type!=="flow-collection"){let r=rr(s),i=Kt(r);Zd(e);let o=e.end.splice(1,e.end.length);o.push(this.sourceToken);let a={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:i,key:e,sep:o}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=a}else yield*this.lineEnd(e)}}flowScalar(e){if(this.onNewLine){let t=this.source.indexOf(`
141
+ `,t)+1}yield*this.pop();break;default:yield*this.pop(),yield*this.step()}}*blockMap(e){let t=e.items[e.items.length-1];switch(this.type){case"newline":if(this.onKeyLine=!1,t.value){let s="end"in t.value?t.value.end:void 0;(Array.isArray(s)?s[s.length-1]:void 0)?.type==="comment"?s?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"space":case"comment":if(t.value)e.items.push({start:[this.sourceToken]});else if(t.sep)t.sep.push(this.sourceToken);else{if(this.atIndentedComment(t.start,e.indent)){let r=e.items[e.items.length-2]?.value?.end;if(Array.isArray(r)){Array.prototype.push.apply(r,t.start),r.push(this.sourceToken),e.items.pop();return}}t.start.push(this.sourceToken)}return}if(this.indent>=e.indent){let s=!this.onKeyLine&&this.indent===e.indent,r=s&&(t.sep||t.explicitKey)&&this.type!=="seq-item-ind",i=[];if(r&&t.sep&&!t.value){let o=[];for(let a=0;a<t.sep.length;++a){let l=t.sep[a];switch(l.type){case"newline":o.push(a);break;case"space":break;case"comment":l.indent>e.indent&&(o.length=0);break;default:o.length=0}}o.length>=2&&(i=t.sep.splice(o[1]))}switch(this.type){case"anchor":case"tag":r||t.value?(i.push(this.sourceToken),e.items.push({start:i}),this.onKeyLine=!0):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"explicit-key-ind":!t.sep&&!t.explicitKey?(t.start.push(this.sourceToken),t.explicitKey=!0):r||t.value?(i.push(this.sourceToken),e.items.push({start:i,explicitKey:!0})):this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]}),this.onKeyLine=!0;return;case"map-value-ind":if(t.explicitKey)if(t.sep)if(t.value)e.items.push({start:[],key:null,sep:[this.sourceToken]});else if(ot(t.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,key:null,sep:[this.sourceToken]}]});else if(su(t.key)&&!ot(t.sep,"newline")){let o=jt(t.start),a=t.key,l=t.sep;l.push(this.sourceToken),delete t.key,delete t.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:a,sep:l}]})}else i.length>0?t.sep=t.sep.concat(i,this.sourceToken):t.sep.push(this.sourceToken);else if(ot(t.start,"newline"))Object.assign(t,{key:null,sep:[this.sourceToken]});else{let o=jt(t.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:null,sep:[this.sourceToken]}]})}else t.sep?t.value||r?e.items.push({start:i,key:null,sep:[this.sourceToken]}):ot(t.sep,"map-value-ind")?this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]}):t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let o=this.flowScalar(this.type);r||t.value?(e.items.push({start:i,key:o,sep:[]}),this.onKeyLine=!0):t.sep?this.stack.push(o):(Object.assign(t,{key:o,sep:[]}),this.onKeyLine=!0);return}default:{let o=this.startBlockValue(e);if(o){if(o.type==="block-seq"){if(!t.explicitKey&&t.sep&&!ot(t.sep,"newline")){yield*this.pop({type:"error",offset:this.offset,message:"Unexpected block-seq-ind on same line with key",source:this.source});return}}else s&&e.items.push({start:i});this.stack.push(o);return}}}}yield*this.pop(),yield*this.step()}*blockSequence(e){let t=e.items[e.items.length-1];switch(this.type){case"newline":if(t.value){let s="end"in t.value?t.value.end:void 0;(Array.isArray(s)?s[s.length-1]:void 0)?.type==="comment"?s?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else t.start.push(this.sourceToken);return;case"space":case"comment":if(t.value)e.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(t.start,e.indent)){let r=e.items[e.items.length-2]?.value?.end;if(Array.isArray(r)){Array.prototype.push.apply(r,t.start),r.push(this.sourceToken),e.items.pop();return}}t.start.push(this.sourceToken)}return;case"anchor":case"tag":if(t.value||this.indent<=e.indent)break;t.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==e.indent)break;t.value||ot(t.start,"seq-item-ind")?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken);return}if(this.indent>e.indent){let s=this.startBlockValue(e);if(s){this.stack.push(s);return}}yield*this.pop(),yield*this.step()}*flowCollection(e){let t=e.items[e.items.length-1];if(this.type==="flow-error-end"){let s;do yield*this.pop(),s=this.peek(1);while(s?.type==="flow-collection")}else if(e.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":!t||t.sep?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken);return;case"map-value-ind":!t||t.value?e.items.push({start:[],key:null,sep:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":!t||t.value?e.items.push({start:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let r=this.flowScalar(this.type);!t||t.value?e.items.push({start:[],key:r,sep:[]}):t.sep?this.stack.push(r):Object.assign(t,{key:r,sep:[]});return}case"flow-map-end":case"flow-seq-end":e.end.push(this.sourceToken);return}let s=this.startBlockValue(e);s?this.stack.push(s):(yield*this.pop(),yield*this.step())}else{let s=this.peek(2);if(s.type==="block-map"&&(this.type==="map-value-ind"&&s.indent===e.indent||this.type==="newline"&&!s.items[s.items.length-1].sep))yield*this.pop(),yield*this.step();else if(this.type==="map-value-ind"&&s.type!=="flow-collection"){let r=nr(s),i=jt(r);tu(e);let o=e.end.splice(1,e.end.length);o.push(this.sourceToken);let a={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:i,key:e,sep:o}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=a}else yield*this.lineEnd(e)}}flowScalar(e){if(this.onNewLine){let t=this.source.indexOf(`
142
142
  `)+1;for(;t!==0;)this.onNewLine(this.offset+t),t=this.source.indexOf(`
143
- `,t)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let t=rr(e),s=Kt(t);return s.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:s,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let t=rr(e),s=Kt(t);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:s,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,t){return this.type!=="comment"||this.indent<=t?!1:e.every(s=>s.type==="newline"||s.type==="space")}*documentEnd(e){this.type!=="doc-mode"&&(e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop()))}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;default:e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop())}}};tu.Parser=Qo});var ou=T($s=>{"use strict";var su=Bo(),tS=Cs(),Ps=Os(),sS=Pi(),nS=$(),rS=zo(),nu=Xo();function ru(n){let e=n.prettyErrors!==!1;return{lineCounter:n.lineCounter||e&&new rS.LineCounter||null,prettyErrors:e}}function iS(n,e={}){let{lineCounter:t,prettyErrors:s}=ru(e),r=new nu.Parser(t?.addNewLine),i=new su.Composer(e),o=Array.from(i.compose(r.parse(n)));if(s&&t)for(let a of o)a.errors.forEach(Ps.prettifyError(n,t)),a.warnings.forEach(Ps.prettifyError(n,t));return o.length>0?o:Object.assign([],{empty:!0},i.streamInfo())}function iu(n,e={}){let{lineCounter:t,prettyErrors:s}=ru(e),r=new nu.Parser(t?.addNewLine),i=new su.Composer(e),o=null;for(let a of i.compose(r.parse(n),!0,n.length))if(!o)o=a;else if(o.options.logLevel!=="silent"){o.errors.push(new Ps.YAMLParseError(a.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return s&&t&&(o.errors.forEach(Ps.prettifyError(n,t)),o.warnings.forEach(Ps.prettifyError(n,t))),o}function oS(n,e,t){let s;typeof e=="function"?s=e:t===void 0&&e&&typeof e=="object"&&(t=e);let r=iu(n,t);if(!r)return null;if(r.warnings.forEach(i=>sS.warn(r.options.logLevel,i)),r.errors.length>0){if(r.options.logLevel!=="silent")throw r.errors[0];r.errors=[]}return r.toJS(Object.assign({reviver:s},t))}function aS(n,e,t){let s=null;if(typeof e=="function"||Array.isArray(e)?s=e:t===void 0&&e&&(t=e),typeof t=="string"&&(t=t.length),typeof t=="number"){let r=Math.round(t);t=r<1?void 0:r>8?{indent:8}:{indent:r}}if(n===void 0){let{keepUndefined:r}=t??e??{};if(!r)return}return nS.isDocument(n)&&!s?n.toString(t):new tS.Document(n,s,t).toString(t)}$s.parse=oS;$s.parseAllDocuments=iS;$s.parseDocument=iu;$s.stringify=aS});var ea=T(U=>{"use strict";var cS=Bo(),lS=Cs(),dS=wo(),Zo=Os(),uS=ds(),ot=$(),hS=tt(),fS=Q(),pS=nt(),mS=rt(),gS=sr(),yS=Yo(),wS=zo(),SS=Xo(),ir=ou(),au=os();U.Composer=cS.Composer;U.Document=lS.Document;U.Schema=dS.Schema;U.YAMLError=Zo.YAMLError;U.YAMLParseError=Zo.YAMLParseError;U.YAMLWarning=Zo.YAMLWarning;U.Alias=uS.Alias;U.isAlias=ot.isAlias;U.isCollection=ot.isCollection;U.isDocument=ot.isDocument;U.isMap=ot.isMap;U.isNode=ot.isNode;U.isPair=ot.isPair;U.isScalar=ot.isScalar;U.isSeq=ot.isSeq;U.Pair=hS.Pair;U.Scalar=fS.Scalar;U.YAMLMap=pS.YAMLMap;U.YAMLSeq=mS.YAMLSeq;U.CST=gS;U.Lexer=yS.Lexer;U.LineCounter=wS.LineCounter;U.Parser=SS.Parser;U.parse=ir.parse;U.parseAllDocuments=ir.parseAllDocuments;U.parseDocument=ir.parseDocument;U.stringify=ir.stringify;U.visit=au.visit;U.visitAsync=au.visitAsync});function cu(n={},e){let t={};for(let s of Object.keys(Gt)){let r=n[s]??Gt[s];t[s]=r&&(e?.[s]??!0)}return t}var Gt,ta=q(()=>{"use strict";Gt={externalComms:!0,codeTask:!1,codeAccess:!1}});import{readFileSync as bS,existsSync as fu,readdirSync as _S,statSync as kS}from"node:fs";import{resolve as sa}from"node:path";import{randomUUID as lu}from"node:crypto";import{execFileSync as vS}from"node:child_process";function du(n){let e=process.env[n]||mu(n);if(!e)throw new Error(`Missing required env var: ${n}`);return e}function k(n,e){return process.env[n]||mu(n)||e}function IS(n){if(n?.length)return n.map(t=>sa(t.replace(/^~/,process.env.HOME??"/tmp")));let e=sa(le,"plugins/claude-code");return fu(e)?_S(e).map(t=>sa(e,t)).filter(t=>kS(t).isDirectory()):[]}function mu(n){if(process.platform!=="darwin")return"";try{return vS("security",["find-generic-password","-s",`hive/${Rs}/${n}`,"-w"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()}catch{return""}}var hu,pu,TS,uu,E,fT,Rs,wt,Ht,m,Oe=q(()=>{"use strict";hu=ve(bc(),1),pu=ve(ea(),1);ta();rs();TS=nc(le);hu.default.config({path:TS});uu=sc(le),E={};fu(uu)&&(E=(0,pu.parse)(bS(uu,"utf-8"))??{});fT=process.env.HOME??"/tmp",Rs=E.instance?.id??"hive";wt=E.instance?.portBase??3100,Ht=E.instance?.ports??{},m={instance:{id:Rs,portBase:wt},business:{name:E.business?.name??k("BUSINESS_NAME",""),description:E.business?.description??"",location:E.business?.location??"",ownerName:E.business?.owner?.name??"",ownerRole:E.business?.owner?.role??""},slack:{appToken:du("SLACK_APP_TOKEN"),botToken:du("SLACK_BOT_TOKEN"),mcpToken:k("SLACK_MCP_TOKEN",""),auditChannel:k("SLACK_AUDIT_CHANNEL",E.slack?.auditChannel??"")},slackJasper:{appToken:k("SLACK_JASPER_APP_TOKEN",""),botToken:k("SLACK_JASPER_BOT_TOKEN",""),mcpToken:k("SLACK_JASPER_MCP_TOKEN","")},anthropic:{apiKey:k("ANTHROPIC_API_KEY","")},linear:{apiKey:k("LINEAR_API_KEY",""),teamId:k("LINEAR_TEAM_ID","")},clickup:{apiToken:k("CLICKUP_API_TOKEN","")},github:{repo:k("GITHUB_REPO",""),token:k("GH_TOKEN","")},brave:{apiKey:k("BRAVE_API_KEY","")},taskLedger:{apiUrl:k("TASK_LEDGER_API_URL","http://localhost:3002"),agentKeys:Object.fromEntries(Object.entries(process.env).filter(([n])=>n.startsWith("TASK_LEDGER_KEY_")).map(([n,e])=>[n.replace("TASK_LEDGER_KEY_","").toLowerCase().replace(/_/g,"-"),e])),apiKey:k("TASK_LEDGER_API_KEY","")},mongo:{uri:k("MONGODB_URI","mongodb://localhost:27017"),dbName:k("MONGODB_DB",`hive_${Rs}`)},defaultAgent:k("DEFAULT_AGENT","chief-of-staff"),google:{account:k("GOOGLE_ACCOUNT",E.google?.account??""),client:k("GOG_CLIENT",E.google?.client??""),accounts:E.google?.accounts??{},sharedFolder:k("DRIVE_SHARED_FOLDER",E.google?.sharedFolder??E.googleWorkspace?.sharedFolder??"")},googleWorkspace:{account:k("GWS_ACCOUNT",E.googleWorkspace?.account??""),gwsPath:k("GWS_PATH",""),sharedFolder:k("GWS_SHARED_FOLDER",E.googleWorkspace?.sharedFolder??"")},quo:{apiKey:k("QUO_API_KEY",""),phoneNumberId:k("QUO_PHONE_NUMBER_ID",""),lines:E.quo?.lines??{}},sms:{lines:E.sms?.lines??[]},imessage:{enabled:E.imessage?.enabled??!1,slackChannel:E.imessage?.slackChannel??"imessage",hotWindowMs:E.imessage?.hotWindowMs??3e5,coldIntervalMs:E.imessage?.coldIntervalMs??3e5,hotIntervalMs:E.imessage?.hotIntervalMs??1e4},resend:{apiKey:k("RESEND_API_KEY",""),fromAddress:k("RESEND_FROM_ADDRESS",""),defaultCc:k("RESEND_DEFAULT_CC",""),defaultBcc:k("RESEND_DEFAULT_BCC",""),emailDomain:k("RESEND_EMAIL_DOMAIN",E.resend?.emailDomain??""),businessName:k("RESEND_BUSINESS_NAME",E.resend?.businessName??"")},plugins:E.plugins??[],skillRegistries:E.skillRegistries??[{name:"keepur-default",url:"https://github.com/keepur/hive-skills",default:!0}],gemini:{apiKey:k("GEMINI_API_KEY",""),visionModel:k("GEMINI_VISION_MODEL","gemini-2.5-flash")},permits:{mongoUri:k("PERMITS_MONGO_URI","mongodb://localhost:27017/permits")},recall:{apiKey:k("RECALL_API_KEY",""),region:k("RECALL_API_REGION","us-west-2"),monitorPort:parseInt(k("MEETING_MONITOR_PORT",String(Ht.recall??wt+1)),10),monitorPublicUrl:k("MEETING_MONITOR_PUBLIC_URL",""),webhookSecret:k("RECALL_WEBHOOK_SECRET","")},scheduler:{heartbeatIntervalMs:parseInt(k("HEARTBEAT_INTERVAL_MS","120000"),10)},background:{port:parseInt(k("BG_TASK_PORT",String(Ht.background??wt)),10),authToken:k("BG_TASK_AUTH_TOKEN","")||lu()},codeTask:{port:parseInt(k("CODE_TASK_PORT",String(Ht.codeTask??wt+2)),10),authToken:k("CODE_TASK_AUTH_TOKEN","")||lu(),pluginDirs:IS(E.codeTask?.pluginDirs),defaultModel:k("CODE_TASK_MODEL","claude-sonnet-4-6"),defaultMaxTurns:parseInt(k("CODE_TASK_MAX_TURNS","100"),10),defaultMaxBudget:parseFloat(k("CODE_TASK_MAX_BUDGET","5.00")),maxConcurrent:parseInt(k("CODE_TASK_MAX_CONCURRENT","2"),10),maxLifetimeMs:parseInt(k("CODE_TASK_MAX_LIFETIME_MS",String(480*60*1e3)),10),staleGraceMs:parseInt(k("CODE_TASK_STALE_GRACE_MS",String(1800*1e3)),10)},ws:{enabled:k("WS_ENABLED","false")==="true",port:parseInt(k("WS_PORT",String(Ht.ws??wt+3)),10)},beekeeper:{port:parseInt(k("BEEKEEPER_PORT",String(E.beekeeper?.port??8420)),10)},workflow:{enabled:k("WORKFLOW_ENABLED","false")==="true"},adminApi:{port:parseInt(k("ADMIN_API_PORT",String(Ht.adminApi??wt+4)),10),token:k("ADMIN_API_TOKEN","")},voice:{enabled:!!E.voice?.provider,provider:E.voice?.provider??"",publicUrl:E.voice?.publicUrl??"",phoneNumberId:E.voice?.phoneNumberId??"",assistants:E.voice?.assistants??{},apiKey:k("VAPI_API_KEY",""),serverSecret:k("VAPI_SERVER_SECRET",""),port:parseInt(k("VOICE_PORT",String(Ht.voice??wt+5)),10)},autonomy:{externalComms:E.autonomy?.externalComms??Gt.externalComms,codeTask:E.autonomy?.codeTask??Gt.codeTask,codeAccess:E.autonomy?.codeAccess??Gt.codeAccess},modelRouter:{enabled:k("MODEL_ROUTER_ENABLED","true")==="true",model:k("MODEL_ROUTER_MODEL","claude-haiku-4-5-20251001"),timeoutMs:parseInt(k("MODEL_ROUTER_TIMEOUT_MS","8000"),10)},sweeper:{intervalMs:parseInt(k("SWEEPER_INTERVAL_MS","300000"),10),threadTtlMs:parseInt(k("SWEEPER_THREAD_TTL_MS","86400000"),10),taskFileTtlMs:parseInt(k("SWEEPER_TASK_FILE_TTL_MS","604800000"),10),meetingSessionTtlMs:parseInt(k("SWEEPER_MEETING_TTL_MS","3600000"),10),cacheTtlMs:parseInt(k("SWEEPER_CACHE_TTL_MS","3600000"),10),retryMaxAttempts:parseInt(k("SWEEPER_RETRY_MAX_ATTEMPTS","3"),10),retryBaseDelayMs:parseInt(k("SWEEPER_RETRY_BASE_DELAY_MS","30000"),10)},memory:{hotBudgetTokens:parseInt(k("MEMORY_HOT_BUDGET_TOKENS",String(E.memory?.hotBudgetTokens??3e3)),10),sweepIntervalHours:parseFloat(k("MEMORY_SWEEP_INTERVAL_HOURS",String(E.memory?.sweepIntervalHours??6))),hotThreshold:parseFloat(k("MEMORY_HOT_THRESHOLD",String(E.memory?.hotThreshold??.6))),warmThreshold:parseFloat(k("MEMORY_WARM_THRESHOLD",String(E.memory?.warmThreshold??.3))),recencyHalfLifeDays:parseFloat(k("MEMORY_RECENCY_HALF_LIFE_DAYS",String(E.memory?.recencyHalfLifeDays??7))),coldSummaryMinRecords:parseInt(k("MEMORY_COLD_SUMMARY_MIN",String(E.memory?.coldSummaryMinRecords??5)),10),coldRetentionDays:parseInt(k("MEMORY_COLD_RETENTION_DAYS",String(E.memory?.coldRetentionDays??90)),10),purgeRetentionDays:parseInt(k("MEMORY_PURGE_RETENTION_DAYS",String(E.memory?.purgeRetentionDays??7)),10),reflectionMinTurns:parseInt(k("MEMORY_REFLECTION_MIN_TURNS",String(E.memory?.reflectionMinTurns??3)),10)},codeIndex:{enabled:E.codeIndex?.enabled===!0||process.env.CODE_INDEX_ENABLED==="true",scoreThreshold:parseFloat(k("CODE_INDEX_SCORE_THRESHOLD",String(E.codeIndex?.scoreThreshold??.65))),prefetchLimit:parseInt(k("CODE_INDEX_PREFETCH_LIMIT",String(E.codeIndex?.prefetchLimit??8)),10),sessionKnowledge:{enabled:(E.codeIndex?.sessionKnowledge?.enabled??!0)&&process.env.CODE_INDEX_SESSION_KNOWLEDGE!=="false"},repos:E.codeIndex?.repos??{}},events:{retentionDays:parseInt(k("EVENT_RETENTION_DAYS",String(E.events?.retentionDays??30)),10)},activity:{enabled:(E.activity?.enabled??!0)&&process.env.ACTIVITY_LOG_ENABLED!=="false",bufferSize:parseInt(k("ACTIVITY_BUFFER_SIZE",String(E.activity?.bufferSize??200)),10),flushIntervalMs:parseInt(k("ACTIVITY_FLUSH_INTERVAL_MS",String(E.activity?.flushIntervalMs??3e4)),10),retentionDays:parseInt(k("ACTIVITY_RETENTION_DAYS",String(E.activity?.retentionDays??90)),10)},autoDream:{enabled:E.autoDream?.enabled??!0,idleThresholdMinutes:parseInt(k("AUTODREAM_IDLE_THRESHOLD_MINUTES",String(E.autoDream?.idleThresholdMinutes??30)),10),cooldownMinutes:parseInt(k("AUTODREAM_COOLDOWN_MINUTES",String(E.autoDream?.cooldownMinutes??60)),10),similarityThreshold:parseFloat(k("AUTODREAM_SIMILARITY_THRESHOLD",String(E.autoDream?.similarityThreshold??.85))),patternMinCount:parseInt(k("AUTODREAM_PATTERN_MIN_COUNT",String(E.autoDream?.patternMinCount??3)),10),maxClustersPerRun:parseInt(k("AUTODREAM_MAX_CLUSTERS",String(E.autoDream?.maxClustersPerRun??20)),10),maxContradictionPairsPerRun:parseInt(k("AUTODREAM_MAX_CONTRADICTIONS",String(E.autoDream?.maxContradictionPairsPerRun??30)),10),maxPromotionsPerRun:parseInt(k("AUTODREAM_MAX_PROMOTIONS",String(E.autoDream?.maxPromotionsPerRun??10)),10)},browser:{cdpEndpoint:k("BROWSER_CDP_ENDPOINT","")},tasksDir:{code:k("CODE_TASKS_DIR",`/tmp/${Rs}-code-tasks`),background:k("BG_TASKS_DIR",`/tmp/${Rs}-bg-tasks`)}}});function wu(n){na.has(n.id)&&yu.warn("Archetype already registered \u2014 overwriting",{id:n.id}),na.set(n.id,n),yu.info("Registered archetype",{id:n.id})}function or(n){return na.get(n)}var yu,na,ar=q(()=>{"use strict";O();yu=I("archetypes"),na=new Map});import{readFileSync as DS,writeFileSync as LS}from"node:fs";function PS(n){let e=n.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);if(!e)throw new Error("No YAML frontmatter found");let t=e[1],s=e[2],r={name:"",description:"",agents:[]},i=t.split(`
144
- `),o=0;for(;o<i.length;){let a=i[o];if(a.trim()===""){o++;continue}let l=a.match(/^(\w[\w-]*):\s*(.*)/);if(!l){o++;continue}let c=l[1],d=l[2].trim();if(c==="name")r.name=St(d);else if(c==="description")r.description=St(d);else if(c==="workflow")r.workflow=St(d);else if(c==="agents"){let u=d.match(/^\[([^\]]*)\]$/);if(u)r.agents=u[1].split(",").map(h=>St(h.trim())).filter(h=>h.length>0);else if(d==="")for(r.agents=[];o+1<i.length&&i[o+1].match(/^\s+-\s+/);){o++;let h=i[o].replace(/^\s+-\s+/,"").trim();r.agents.push(St(h))}else r.agents=[St(d)]}else if(c==="origin")for(r.origin=Pu(i,o);o+1<i.length&&i[o+1].match(/^\s+\S/);)o++;else if(c==="author")for(r.author=Pu(i,o);o+1<i.length&&i[o+1].match(/^\s+\S/);)o++;o++}return{frontmatter:r,body:s}}function Pu(n,e){let t={},s=e+1;for(;s<n.length&&n[s].match(/^\s+\S/);){let r=n[s].match(/^\s+([\w][\w-]*):\s*(.*)/);if(r){let i=r[2].trim();i==="true"?t[r[1]]=!0:i==="false"?t[r[1]]=!1:t[r[1]]=St(i)}s++}return t}function St(n){return n.startsWith('"')&&n.endsWith('"')||n.startsWith("'")&&n.endsWith("'")?n.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"):n}function $S(n,e){let t=[];t.push(`name: ${lr(n.name)}`),t.push(`description: ${lr(n.description)}`);let s=n.agents.join(", ");return t.push(`agents: [${s}]`),n.workflow&&t.push(`workflow: ${lr(n.workflow)}`),n.origin&&(t.push("origin:"),$u(t,n.origin)),n.author&&(t.push("author:"),$u(t,n.author)),`---
143
+ `,t)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let t=nr(e),s=jt(t);return s.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:s,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let t=nr(e),s=jt(t);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:s,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,t){return this.type!=="comment"||this.indent<=t?!1:e.every(s=>s.type==="newline"||s.type==="space")}*documentEnd(e){this.type!=="doc-mode"&&(e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop()))}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;default:e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop())}}};nu.Parser=Xo});var cu=I(Ps=>{"use strict";var ru=Uo(),oS=As(),Ls=Ns(),aS=$i(),cS=$(),lS=Qo(),iu=Zo();function ou(n){let e=n.prettyErrors!==!1;return{lineCounter:n.lineCounter||e&&new lS.LineCounter||null,prettyErrors:e}}function dS(n,e={}){let{lineCounter:t,prettyErrors:s}=ou(e),r=new iu.Parser(t?.addNewLine),i=new ru.Composer(e),o=Array.from(i.compose(r.parse(n)));if(s&&t)for(let a of o)a.errors.forEach(Ls.prettifyError(n,t)),a.warnings.forEach(Ls.prettifyError(n,t));return o.length>0?o:Object.assign([],{empty:!0},i.streamInfo())}function au(n,e={}){let{lineCounter:t,prettyErrors:s}=ou(e),r=new iu.Parser(t?.addNewLine),i=new ru.Composer(e),o=null;for(let a of i.compose(r.parse(n),!0,n.length))if(!o)o=a;else if(o.options.logLevel!=="silent"){o.errors.push(new Ls.YAMLParseError(a.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return s&&t&&(o.errors.forEach(Ls.prettifyError(n,t)),o.warnings.forEach(Ls.prettifyError(n,t))),o}function uS(n,e,t){let s;typeof e=="function"?s=e:t===void 0&&e&&typeof e=="object"&&(t=e);let r=au(n,t);if(!r)return null;if(r.warnings.forEach(i=>aS.warn(r.options.logLevel,i)),r.errors.length>0){if(r.options.logLevel!=="silent")throw r.errors[0];r.errors=[]}return r.toJS(Object.assign({reviver:s},t))}function hS(n,e,t){let s=null;if(typeof e=="function"||Array.isArray(e)?s=e:t===void 0&&e&&(t=e),typeof t=="string"&&(t=t.length),typeof t=="number"){let r=Math.round(t);t=r<1?void 0:r>8?{indent:8}:{indent:r}}if(n===void 0){let{keepUndefined:r}=t??e??{};if(!r)return}return cS.isDocument(n)&&!s?n.toString(t):new oS.Document(n,s,t).toString(t)}Ps.parse=uS;Ps.parseAllDocuments=dS;Ps.parseDocument=au;Ps.stringify=hS});var ta=I(q=>{"use strict";var fS=Uo(),pS=As(),mS=So(),ea=Ns(),gS=ls(),at=$(),yS=st(),wS=Q(),SS=rt(),bS=it(),_S=tr(),kS=Jo(),vS=Qo(),TS=Zo(),rr=cu(),lu=is();q.Composer=fS.Composer;q.Document=pS.Document;q.Schema=mS.Schema;q.YAMLError=ea.YAMLError;q.YAMLParseError=ea.YAMLParseError;q.YAMLWarning=ea.YAMLWarning;q.Alias=gS.Alias;q.isAlias=at.isAlias;q.isCollection=at.isCollection;q.isDocument=at.isDocument;q.isMap=at.isMap;q.isNode=at.isNode;q.isPair=at.isPair;q.isScalar=at.isScalar;q.isSeq=at.isSeq;q.Pair=yS.Pair;q.Scalar=wS.Scalar;q.YAMLMap=SS.YAMLMap;q.YAMLSeq=bS.YAMLSeq;q.CST=_S;q.Lexer=kS.Lexer;q.LineCounter=vS.LineCounter;q.Parser=TS.Parser;q.parse=rr.parse;q.parseAllDocuments=rr.parseAllDocuments;q.parseDocument=rr.parseDocument;q.stringify=rr.stringify;q.visit=lu.visit;q.visitAsync=lu.visitAsync});function du(n={},e){let t={};for(let s of Object.keys(Ft)){let r=n[s]??Ft[s];t[s]=r&&(e?.[s]??!0)}return t}var Ft,sa=F(()=>{"use strict";Ft={externalComms:!0,codeTask:!1,codeAccess:!1}});import{readFileSync as IS,existsSync as mu,readdirSync as AS,statSync as CS}from"node:fs";import{resolve as na}from"node:path";import{randomUUID as uu}from"node:crypto";import{execFileSync as ES}from"node:child_process";function hu(n){let e=process.env[n]||yu(n);if(!e)throw new Error(`Missing required env var: ${n}`);return e}function k(n,e){return process.env[n]||yu(n)||e}function OS(n){if(n?.length)return n.map(t=>na(t.replace(/^~/,process.env.HOME??"/tmp")));let e=na(ce,"plugins/claude-code");return mu(e)?AS(e).map(t=>na(e,t)).filter(t=>CS(t).isDirectory()):[]}function yu(n){if(process.platform!=="darwin")return"";try{return ES("security",["find-generic-password","-s",`hive/${$s}/${n}`,"-w"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()}catch{return""}}var pu,gu,NS,fu,E,wT,$s,wt,Kt,m,Oe=F(()=>{"use strict";pu=ve(kc(),1),gu=ve(ta(),1);sa();ns();NS=ic(ce);pu.default.config({path:NS});fu=rc(ce),E={};mu(fu)&&(E=(0,gu.parse)(IS(fu,"utf-8"))??{});wT=process.env.HOME??"/tmp",$s=E.instance?.id??"hive";wt=E.instance?.portBase??3100,Kt=E.instance?.ports??{},m={instance:{id:$s,portBase:wt},business:{name:E.business?.name??k("BUSINESS_NAME",""),description:E.business?.description??"",location:E.business?.location??"",ownerName:E.business?.owner?.name??"",ownerRole:E.business?.owner?.role??""},slack:{appToken:hu("SLACK_APP_TOKEN"),botToken:hu("SLACK_BOT_TOKEN"),mcpToken:k("SLACK_MCP_TOKEN",""),auditChannel:k("SLACK_AUDIT_CHANNEL",E.slack?.auditChannel??"")},anthropic:{apiKey:k("ANTHROPIC_API_KEY","")},linear:{apiKey:k("LINEAR_API_KEY",""),teamId:k("LINEAR_TEAM_ID","")},clickup:{apiToken:k("CLICKUP_API_TOKEN","")},github:{repo:k("GITHUB_REPO",""),token:k("GH_TOKEN","")},brave:{apiKey:k("BRAVE_API_KEY","")},taskLedger:{apiUrl:k("TASK_LEDGER_API_URL","http://localhost:3002"),agentKeys:Object.fromEntries(Object.entries(process.env).filter(([n])=>n.startsWith("TASK_LEDGER_KEY_")).map(([n,e])=>[n.replace("TASK_LEDGER_KEY_","").toLowerCase().replace(/_/g,"-"),e])),apiKey:k("TASK_LEDGER_API_KEY","")},mongo:{uri:k("MONGODB_URI","mongodb://localhost:27017"),dbName:k("MONGODB_DB",`hive_${$s}`)},defaultAgent:k("DEFAULT_AGENT","chief-of-staff"),google:{account:k("GOOGLE_ACCOUNT",E.google?.account??""),client:k("GOG_CLIENT",E.google?.client??""),accounts:E.google?.accounts??{},sharedFolder:k("DRIVE_SHARED_FOLDER",E.google?.sharedFolder??E.googleWorkspace?.sharedFolder??"")},googleWorkspace:{account:k("GWS_ACCOUNT",E.googleWorkspace?.account??""),gwsPath:k("GWS_PATH",""),sharedFolder:k("GWS_SHARED_FOLDER",E.googleWorkspace?.sharedFolder??"")},quo:{apiKey:k("QUO_API_KEY",""),phoneNumberId:k("QUO_PHONE_NUMBER_ID",""),lines:E.quo?.lines??{}},sms:{lines:E.sms?.lines??[]},imessage:{enabled:E.imessage?.enabled??!1,slackChannel:E.imessage?.slackChannel??"imessage",hotWindowMs:E.imessage?.hotWindowMs??3e5,coldIntervalMs:E.imessage?.coldIntervalMs??3e5,hotIntervalMs:E.imessage?.hotIntervalMs??1e4},resend:{apiKey:k("RESEND_API_KEY",""),fromAddress:k("RESEND_FROM_ADDRESS",""),defaultCc:k("RESEND_DEFAULT_CC",""),defaultBcc:k("RESEND_DEFAULT_BCC",""),emailDomain:k("RESEND_EMAIL_DOMAIN",E.resend?.emailDomain??""),businessName:k("RESEND_BUSINESS_NAME",E.resend?.businessName??"")},plugins:E.plugins??[],skillRegistries:E.skillRegistries??[{name:"keepur-default",url:"https://github.com/keepur/hive-skills",default:!0}],gemini:{apiKey:k("GEMINI_API_KEY",""),visionModel:k("GEMINI_VISION_MODEL","gemini-2.5-flash")},permits:{mongoUri:k("PERMITS_MONGO_URI","mongodb://localhost:27017/permits")},recall:{apiKey:k("RECALL_API_KEY",""),region:k("RECALL_API_REGION","us-west-2"),monitorPort:parseInt(k("MEETING_MONITOR_PORT",String(Kt.recall??wt+1)),10),monitorPublicUrl:k("MEETING_MONITOR_PUBLIC_URL",""),webhookSecret:k("RECALL_WEBHOOK_SECRET","")},scheduler:{heartbeatIntervalMs:parseInt(k("HEARTBEAT_INTERVAL_MS","120000"),10)},background:{port:parseInt(k("BG_TASK_PORT",String(Kt.background??wt)),10),authToken:k("BG_TASK_AUTH_TOKEN","")||uu()},codeTask:{port:parseInt(k("CODE_TASK_PORT",String(Kt.codeTask??wt+2)),10),authToken:k("CODE_TASK_AUTH_TOKEN","")||uu(),pluginDirs:OS(E.codeTask?.pluginDirs),defaultModel:k("CODE_TASK_MODEL","claude-sonnet-4-6"),defaultMaxTurns:parseInt(k("CODE_TASK_MAX_TURNS","100"),10),defaultMaxBudget:parseFloat(k("CODE_TASK_MAX_BUDGET","5.00")),maxConcurrent:parseInt(k("CODE_TASK_MAX_CONCURRENT","2"),10),maxLifetimeMs:parseInt(k("CODE_TASK_MAX_LIFETIME_MS",String(480*60*1e3)),10),staleGraceMs:parseInt(k("CODE_TASK_STALE_GRACE_MS",String(1800*1e3)),10)},ws:{enabled:k("WS_ENABLED","false")==="true",port:parseInt(k("WS_PORT",String(Kt.ws??wt+3)),10)},beekeeper:{port:parseInt(k("BEEKEEPER_PORT",String(E.beekeeper?.port??8420)),10)},workflow:{enabled:k("WORKFLOW_ENABLED","false")==="true"},adminApi:{port:parseInt(k("ADMIN_API_PORT",String(Kt.adminApi??wt+4)),10),token:k("ADMIN_API_TOKEN","")},voice:{enabled:!!E.voice?.provider,provider:E.voice?.provider??"",publicUrl:E.voice?.publicUrl??"",phoneNumberId:E.voice?.phoneNumberId??"",assistants:E.voice?.assistants??{},apiKey:k("VAPI_API_KEY",""),serverSecret:k("VAPI_SERVER_SECRET",""),port:parseInt(k("VOICE_PORT",String(Kt.voice??wt+5)),10)},autonomy:{externalComms:E.autonomy?.externalComms??Ft.externalComms,codeTask:E.autonomy?.codeTask??Ft.codeTask,codeAccess:E.autonomy?.codeAccess??Ft.codeAccess},modelRouter:{enabled:k("MODEL_ROUTER_ENABLED","true")==="true",model:k("MODEL_ROUTER_MODEL","claude-haiku-4-5-20251001"),timeoutMs:parseInt(k("MODEL_ROUTER_TIMEOUT_MS","8000"),10)},sweeper:{intervalMs:parseInt(k("SWEEPER_INTERVAL_MS","300000"),10),threadTtlMs:parseInt(k("SWEEPER_THREAD_TTL_MS","86400000"),10),taskFileTtlMs:parseInt(k("SWEEPER_TASK_FILE_TTL_MS","604800000"),10),meetingSessionTtlMs:parseInt(k("SWEEPER_MEETING_TTL_MS","3600000"),10),cacheTtlMs:parseInt(k("SWEEPER_CACHE_TTL_MS","3600000"),10),retryMaxAttempts:parseInt(k("SWEEPER_RETRY_MAX_ATTEMPTS","3"),10),retryBaseDelayMs:parseInt(k("SWEEPER_RETRY_BASE_DELAY_MS","30000"),10)},memory:{hotBudgetTokens:parseInt(k("MEMORY_HOT_BUDGET_TOKENS",String(E.memory?.hotBudgetTokens??3e3)),10),sweepIntervalHours:parseFloat(k("MEMORY_SWEEP_INTERVAL_HOURS",String(E.memory?.sweepIntervalHours??6))),hotThreshold:parseFloat(k("MEMORY_HOT_THRESHOLD",String(E.memory?.hotThreshold??.6))),warmThreshold:parseFloat(k("MEMORY_WARM_THRESHOLD",String(E.memory?.warmThreshold??.3))),recencyHalfLifeDays:parseFloat(k("MEMORY_RECENCY_HALF_LIFE_DAYS",String(E.memory?.recencyHalfLifeDays??7))),coldSummaryMinRecords:parseInt(k("MEMORY_COLD_SUMMARY_MIN",String(E.memory?.coldSummaryMinRecords??5)),10),coldRetentionDays:parseInt(k("MEMORY_COLD_RETENTION_DAYS",String(E.memory?.coldRetentionDays??90)),10),purgeRetentionDays:parseInt(k("MEMORY_PURGE_RETENTION_DAYS",String(E.memory?.purgeRetentionDays??7)),10),reflectionMinTurns:parseInt(k("MEMORY_REFLECTION_MIN_TURNS",String(E.memory?.reflectionMinTurns??3)),10)},codeIndex:{enabled:E.codeIndex?.enabled===!0||process.env.CODE_INDEX_ENABLED==="true",scoreThreshold:parseFloat(k("CODE_INDEX_SCORE_THRESHOLD",String(E.codeIndex?.scoreThreshold??.65))),prefetchLimit:parseInt(k("CODE_INDEX_PREFETCH_LIMIT",String(E.codeIndex?.prefetchLimit??8)),10),sessionKnowledge:{enabled:(E.codeIndex?.sessionKnowledge?.enabled??!0)&&process.env.CODE_INDEX_SESSION_KNOWLEDGE!=="false"},repos:E.codeIndex?.repos??{}},events:{retentionDays:parseInt(k("EVENT_RETENTION_DAYS",String(E.events?.retentionDays??30)),10)},activity:{enabled:(E.activity?.enabled??!0)&&process.env.ACTIVITY_LOG_ENABLED!=="false",bufferSize:parseInt(k("ACTIVITY_BUFFER_SIZE",String(E.activity?.bufferSize??200)),10),flushIntervalMs:parseInt(k("ACTIVITY_FLUSH_INTERVAL_MS",String(E.activity?.flushIntervalMs??3e4)),10),retentionDays:parseInt(k("ACTIVITY_RETENTION_DAYS",String(E.activity?.retentionDays??90)),10)},autoDream:{enabled:E.autoDream?.enabled??!0,idleThresholdMinutes:parseInt(k("AUTODREAM_IDLE_THRESHOLD_MINUTES",String(E.autoDream?.idleThresholdMinutes??30)),10),cooldownMinutes:parseInt(k("AUTODREAM_COOLDOWN_MINUTES",String(E.autoDream?.cooldownMinutes??60)),10),similarityThreshold:parseFloat(k("AUTODREAM_SIMILARITY_THRESHOLD",String(E.autoDream?.similarityThreshold??.85))),patternMinCount:parseInt(k("AUTODREAM_PATTERN_MIN_COUNT",String(E.autoDream?.patternMinCount??3)),10),maxClustersPerRun:parseInt(k("AUTODREAM_MAX_CLUSTERS",String(E.autoDream?.maxClustersPerRun??20)),10),maxContradictionPairsPerRun:parseInt(k("AUTODREAM_MAX_CONTRADICTIONS",String(E.autoDream?.maxContradictionPairsPerRun??30)),10),maxPromotionsPerRun:parseInt(k("AUTODREAM_MAX_PROMOTIONS",String(E.autoDream?.maxPromotionsPerRun??10)),10)},browser:{cdpEndpoint:k("BROWSER_CDP_ENDPOINT","")},tasksDir:{code:k("CODE_TASKS_DIR",`/tmp/${$s}-code-tasks`),background:k("BG_TASKS_DIR",`/tmp/${$s}-bg-tasks`)}}});function bu(n){ra.has(n.id)&&Su.warn("Archetype already registered \u2014 overwriting",{id:n.id}),ra.set(n.id,n),Su.info("Registered archetype",{id:n.id})}function ir(n){return ra.get(n)}var Su,ra,or=F(()=>{"use strict";O();Su=T("archetypes"),ra=new Map});import{readFileSync as BS,writeFileSync as US}from"node:fs";function qS(n){let e=n.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);if(!e)throw new Error("No YAML frontmatter found");let t=e[1],s=e[2],r={name:"",description:"",agents:[]},i=t.split(`
144
+ `),o=0;for(;o<i.length;){let a=i[o];if(a.trim()===""){o++;continue}let l=a.match(/^(\w[\w-]*):\s*(.*)/);if(!l){o++;continue}let c=l[1],d=l[2].trim();if(c==="name")r.name=St(d);else if(c==="description")r.description=St(d);else if(c==="workflow")r.workflow=St(d);else if(c==="agents"){let u=d.match(/^\[([^\]]*)\]$/);if(u)r.agents=u[1].split(",").map(h=>St(h.trim())).filter(h=>h.length>0);else if(d==="")for(r.agents=[];o+1<i.length&&i[o+1].match(/^\s+-\s+/);){o++;let h=i[o].replace(/^\s+-\s+/,"").trim();r.agents.push(St(h))}else r.agents=[St(d)]}else if(c==="origin")for(r.origin=Ru(i,o);o+1<i.length&&i[o+1].match(/^\s+\S/);)o++;else if(c==="author")for(r.author=Ru(i,o);o+1<i.length&&i[o+1].match(/^\s+\S/);)o++;o++}return{frontmatter:r,body:s}}function Ru(n,e){let t={},s=e+1;for(;s<n.length&&n[s].match(/^\s+\S/);){let r=n[s].match(/^\s+([\w][\w-]*):\s*(.*)/);if(r){let i=r[2].trim();i==="true"?t[r[1]]=!0:i==="false"?t[r[1]]=!1:t[r[1]]=St(i)}s++}return t}function St(n){return n.startsWith('"')&&n.endsWith('"')||n.startsWith("'")&&n.endsWith("'")?n.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"):n}function jS(n,e){let t=[];t.push(`name: ${cr(n.name)}`),t.push(`description: ${cr(n.description)}`);let s=n.agents.join(", ");return t.push(`agents: [${s}]`),n.workflow&&t.push(`workflow: ${cr(n.workflow)}`),n.origin&&(t.push("origin:"),Bu(t,n.origin)),n.author&&(t.push("author:"),Bu(t,n.author)),`---
145
145
  ${t.join(`
146
146
  `)}
147
147
  ---
148
- ${e}`}function $u(n,e){for(let[t,s]of Object.entries(e))s!==void 0&&n.push(` ${t}: ${lr(String(s))}`)}function lr(n){return n.includes(":")||n.includes("#")||n.includes('"')?`"${n.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`:n}function Ru(n){let e=DS(n,"utf-8");return PS(e)}function Bu(n,e,t){LS(n,$S(e,t),"utf-8")}function Uu(n){let e=n.match(/^(---\n)([\s\S]*?)(\n---\n?)([\s\S]*)$/);if(!e)return n;let t=e[1],s=e[2],r=e[3],i=e[4],o=s.split(`
148
+ ${e}`}function Bu(n,e){for(let[t,s]of Object.entries(e))s!==void 0&&n.push(` ${t}: ${cr(String(s))}`)}function cr(n){return n.includes(":")||n.includes("#")||n.includes('"')?`"${n.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`:n}function Uu(n){let e=BS(n,"utf-8");return qS(e)}function qu(n,e,t){US(n,jS(e,t),"utf-8")}function ju(n){let e=n.match(/^(---\n)([\s\S]*?)(\n---\n?)([\s\S]*)$/);if(!e)return n;let t=e[1],s=e[2],r=e[3],i=e[4],o=s.split(`
149
149
  `),a=[],l=!1;for(let c of o){if(l){if(c.match(/^\s+\S/))continue;l=!1}if(c.match(/^origin:\s*$/)){l=!0;continue}c.match(/^origin:\s+\S/)||a.push(c)}return t+a.join(`
150
- `)+r+i}var ia=q(()=>{"use strict"});import{createHash as RS}from"node:crypto";import{readdirSync as BS,readFileSync as US,statSync as qS}from"node:fs";import{join as qu}from"node:path";function ju(n){let e=Fu(n).sort(),t=RS("sha256");for(let s=0;s<e.length;s++){s>0&&t.update("\0");let r=qu(n,e[s]),i=US(r,"utf-8");e[s]==="SKILL.md"?t.update(Uu(i)):t.update(i)}return t.digest("hex")}function Fu(n,e=""){let t=BS(n),s=[];for(let r of t){let i=qu(n,r),o=e?`${e}/${r}`:r;qS(i).isDirectory()?s.push(...Fu(i,o)):s.push(o)}return s}var Ku=q(()=>{"use strict";ia()});import{readdirSync as aa,readFileSync as jS,statSync as ca,existsSync as bt}from"node:fs";import{join as Ae,relative as FS,resolve as KS}from"node:path";function la(n,e,t){let s=new Map,r=[],i=new Map;for(let o of t??[]){let a=Ae(o,"skills");if(!bt(a))continue;let l=o.split("/").pop()??"seed";oa(a,`seed:${l}`,i,s,r,!1)}for(let o of e??[]){let a=Ae(o.dir,"skills");bt(a)&&oa(a,o.name,i,s,r,!1)}if(bt(n)?oa(n,"customer",i,s,r,!0):Se.debug("No customer skills directory found",{path:n}),r.length>0){for(let o of[...s.keys()])s.get(o).push(...r);s.set("__universal__",r)}return GS=HS(i,n),Se.info("Skill index loaded",{workflows:i.size,agents:s.size-(s.has("__universal__")?1:0)}),s}function Gu(n,e,t){for(let[s,r]of e){let i=r.filter(o=>o.path!==n);i.length!==r.length&&(i.length===0?e.delete(s):e.set(s,i))}for(let s=t.length-1;s>=0;s--)t[s].path===n&&t.splice(s,1)}function oa(n,e,t,s,r,i){let o;try{o=aa(n).filter(a=>{try{return ca(Ae(n,a)).isDirectory()}catch{return!1}})}catch(a){Se.warn("Failed to read skills directory",{source:e,path:n,error:String(a)});return}for(let a of o){let l=Ae(n,a),c=Ae(l,"skills");if(!bt(c)){Se.debug("Workflow missing skills/ subdirectory, skipping",{source:e,workflow:a});continue}let d=t.get(a);if(d)if(i&&d.source!=="customer")Se.warn("Customer skill shadows plugin-bundled skill",{workflow:a,shadowed:d,customer:{source:e,path:l}}),Gu(d.path,s,r),t.set(a,{source:e,path:l});else if(i&&d.source==="customer"){Se.error("Customer skill collision \u2014 both skipped",{workflow:a,first:d,second:{source:e,path:l}}),Gu(d.path,s,r),t.delete(a);continue}else{Se.warn("Skill workflow collision \u2014 keeping first, skipping second",{workflow:a,kept:d,skipped:{source:e,path:l}});continue}else t.set(a,{source:e,path:l});let u={type:"local",path:l},h=new Set,p=!1,g;try{g=aa(c).filter(f=>{try{return ca(Ae(c,f)).isDirectory()}catch{return!1}})}catch(f){Se.warn("Failed to read workflow skills subdir",{source:e,workflow:a,error:String(f)});continue}for(let f of g){let y=Ae(c,f,"SKILL.md");if(!bt(y))continue;let w=WS(jS(y,"utf-8"));for(let S of w)S==="all"?p=!0:h.add(S)}if(p)r.push(u),Se.debug("Workflow registered as universal",{source:e,workflow:a,skills:g.length});else if(h.size>0){for(let f of h){let y=s.get(f)??[];y.push(u),s.set(f,y)}Se.debug("Workflow registered",{source:e,workflow:a,agents:[...h],skills:g.length})}}}function Hu(n,e){let t=n.get(e)??[],s=n.get("__universal__")??[];if(t.length>0&&s.length>0){let r=new Set(t.map(o=>o.path)),i=s.filter(o=>!r.has(o.path));return[...t,...i]}return t.length===0&&s.length>0?[...s]:t}function HS(n,e){let t=new Set,s=KS(e,"..");for(let[r,i]of n){if(i.source!=="customer")continue;let o=Ae(i.path,"skills");if(!bt(o))continue;let a;try{a=aa(o).filter(l=>{try{return ca(Ae(o,l)).isDirectory()}catch{return!1}})}catch{continue}for(let l of a){let c=Ae(o,l),d=Ae(c,"SKILL.md");if(bt(d))try{let{frontmatter:u,body:h}=Ru(d);if(!u.origin?.["base-content-hash"])continue;let p=ju(c);if(p!==u.origin["base-content-hash"]&&(t.add(c),Se.warn("Registry-installed skill has been modified",{workflow:r,skill:l,source:u.origin.source,baseHash:u.origin["base-content-hash"],currentHash:p}),!u.origin.modified)){u.origin.modified=!0;try{Bu(d,u,h),ac(s,[FS(s,d)],`detect-modified: ${l} content hash changed`)}catch(g){Se.error("Failed to persist modified flag to disk",{path:d,error:String(g)})}}}catch{}}}return t}function WS(n){let e=n.match(/^---\n([\s\S]*?)\n---/);if(!e)return[];let t=e[1],s=t.match(/^agents:\s*\n((?:\s+-\s+.+\n?)*)/m);if(s)return s[1].split(`
151
- `).map(i=>i.replace(/^\s+-\s+/,"").trim()).filter(Boolean);let r=t.match(/^agents:\s*\[([^\]]*)\]/m);return r?r[1].split(",").map(i=>i.trim()).filter(Boolean):[]}var Se,GS,da=q(()=>{"use strict";O();Ku();ia();pi();Se=I("skill-loader"),GS=new Set});function ua(n,e){let t=`- ${n}: ${e.description}`,s=[];return e.usage&&s.push(`Use for: ${e.usage}.`),e.notFor&&s.push(`Not for: ${e.notFor}.`),s.length>0&&(t+=`
152
- \u2192 ${s.join(" ")}`),t}var Bs,ha=q(()=>{"use strict";Bs={clickup:{description:"Task management \u2014 tasks, lists, spaces, comments, custom fields",usage:"Creating and managing project tasks"},google:{description:"Email (Gmail), calendar, Google Drive files",usage:"Sending email, checking calendar events, reading Drive documents"},resend:{description:"Send outbound email with file attachments",usage:"Sending transactional or outreach email from your agent address",notFor:"Reading email \u2014 use google for inbox access"},"brave-search":{description:"Web search, news, local business lookup",usage:"Finding current information from the public web",notFor:"Internal data \u2014 use crm-search, code-search, or memory instead"},contacts:{description:"Contact lookups by name, email, or phone",usage:"Quick lookups of people in the contact directory",notFor:"CRM deal/company data \u2014 use a CRM plugin's tools instead"},linear:{description:"Issue tracking and project management",usage:"Creating, searching, and updating engineering issues"},"github-issues":{description:"GitHub issue tracking \u2014 create, search, update, comment on issues",usage:"Managing GitHub issues for engineering work"},quo:{description:"Send and receive SMS messages via OpenPhone",usage:"Texting customers or team members"},voice:{description:"Make outbound phone calls via Vapi",usage:"Calling customers, scheduling appointments, following up by phone"},tasks:{description:"Task management \u2014 create, update, and track agent tasks",usage:"Managing your own task queue"},"code-search":{description:"Semantic search over codebase file index \u2014 find where functionality lives, file roles, exports",usage:"Finding code by what it does, not just by filename",notFor:"Broad web search \u2014 use brave-search instead"},"code-task":{description:"Spawn Claude Code CLI sessions for coding tasks",usage:"Delegating implementation, debugging, or code analysis work"},memory:{description:"Read and write your personal agent memory",usage:"Storing and retrieving facts across conversations. Auto-managed \u2014 don't over-save"},schedule:{description:"Self-service schedule management \u2014 view, add, update, remove your schedules",usage:"Managing your recurring or one-time scheduled tasks"},"event-bus":{description:"Publish events to the cross-agent event bus",usage:"Notifying other agents about state changes or completed work"},workflow:{description:"Plan and task management \u2014 create plans, assign tasks, track dependencies",usage:"Coordinating multi-step work across agents and humans"},callback:{description:"Schedule future self-invocations",usage:"Reminding yourself to follow up on something later"},background:{description:"Spawn detached background processes",usage:"Running long-lived commands that outlive your current turn"},"conversation-search":{description:"Semantic search over past conversations",usage:"Finding what was discussed previously across threads"},browser:{description:"Browser automation via Playwright \u2014 navigate, click, fill forms, screenshot",usage:"Accessing web UIs that don't have APIs"},slack:{description:"Slack API \u2014 read channels, post messages, manage threads",usage:"Interacting with Slack channels and threads"},recall:{description:"Meeting bot \u2014 join calls, get transcripts",usage:"Participating in or getting transcripts from video meetings"},admin:{description:"Agent management \u2014 list, view, update agent definitions",usage:"Viewing or modifying agent configurations"},keychain:{description:"Read secrets from macOS Keychain",usage:"Retrieving API keys or credentials stored in the system keychain"}}});function Wu(n=[]){let e=[],t=[];for(let s of Object.keys(Bs)){if(YS.has(s)){e.push(s);continue}let r=VS[s];!r||r()?e.push(s):t.push(s)}for(let s of n)for(let[r,i]of Object.entries(s.manifest.mcpServers)){let o=i.env??[];o.length===0||o.every(l=>!!process.env[l])?e.push(r):t.push(r)}return{instanceId:m.instance?.id??"unknown",servers:{configured:e,unconfigured:t}}}var VS,YS,Vu=q(()=>{"use strict";Oe();ha();VS={google:()=>Object.keys(m.google?.accounts??{}).length>0||!!m.google?.account,resend:()=>!!m.resend?.apiKey,"brave-search":()=>!!m.brave?.apiKey,linear:()=>!!m.linear?.apiKey,clickup:()=>!!m.clickup?.apiToken,"github-issues":()=>!!m.github?.repo,quo:()=>!!m.quo?.apiKey,recall:()=>!!m.recall?.apiKey,"code-task":()=>!0,"code-search":()=>!!m.codeIndex?.enabled,browser:()=>!!m.browser?.cdpEndpoint,tasks:()=>(m.taskLedger?.apiUrl??"")!=="http://localhost:3002"},YS=new Set(["memory","slack","contacts","callback","background","schedule","event-bus","conversation-search","keychain","admin"])});var Yu={};Pe(Yu,{AgentRunner:()=>Us});import{query as JS}from"@anthropic-ai/claude-agent-sdk";import{resolve as Ue}from"node:path";import{existsSync as dr,statSync as zS}from"node:fs";import{createRequire as QS}from"node:module";import{readFile as XS}from"node:fs/promises";function ZS(n){return JSON.stringify(Wu(n))}function Y(n){let e=e0[n];if(e){let t=Ue(ur,"mcp",e);if(dr(t))return t}return Ue(ur,n)}var R,ur,e0,Us,fa=q(()=>{"use strict";ar();O();Oe();rs();da();ha();Vu();R=I("agent-runner");ur=dr(Ue(import.meta.dirname,"mcp"))?import.meta.dirname:Ue(import.meta.dirname,".."),e0={"memory/memory-mcp-server.js":"memory.min.js","memory/structured-memory-mcp-server.js":"structured-memory.min.js","keychain/keychain-mcp-server.js":"keychain.min.js","google/google-mcp-server.js":"google.min.js","quo/quo-mcp-server.js":"quo.min.js","voice/voice-mcp-server.js":"voice.min.js","contacts/contacts-mcp-server.js":"contacts.min.js","tasks/task-mcp-server.js":"task.min.js","resend/resend-mcp-server.js":"resend.min.js","linear/linear-mcp-server.js":"linear.min.js","github/github-issues-mcp-server.js":"github-issues.min.js","clickup/clickup-mcp-server.js":"clickup.min.js","recall/recall-mcp-server.js":"recall.min.js","background/background-task-mcp-server.js":"background-task.min.js","callback/callback-mcp-server.js":"callback.min.js","code-task/code-task-mcp-server.js":"code-task.min.js","search/conversation-search-mcp-server.js":"search-conversation.min.js","code-index/code-search-mcp-server.js":"code-search.min.js","events/event-bus-mcp-server.js":"event-bus.min.js","team/team-mcp-server.js":"team.min.js","workflow/workflow-mcp-server.js":"workflow.min.js","schedule/schedule-mcp-server.js":"schedule.min.js","admin/admin-mcp-server.js":"admin.min.js"};Us=class n{static registryRef;agentConfig;memoryManager;plugins;skillIndex;activeQuery=null;eventSubscribersJson;prefetcher;_archetypeDef=void 0;constructor(e,t,s=[],r=new Map,i="{}",o){this.agentConfig=e,this.memoryManager=t,this.plugins=s,this.skillIndex=r,this.eventSubscribersJson=i,this.prefetcher=o}async buildSystemPrompt(e,t){let s=[];this.agentConfig.soul&&s.push(this.agentConfig.soul);let r=this.getArchetypeDef();if(r&&this.agentConfig.archetypeConfig)try{let u=r.systemPromptCard({agentConfig:this.agentConfig,archetypeConfig:this.agentConfig.archetypeConfig});u&&s.push(u)}catch(u){R.error("Archetype systemPromptCard threw \u2014 omitting card",{agent:this.agentConfig.id,archetype:this.agentConfig.archetype,error:String(u)})}s.push(this.agentConfig.systemPrompt);let i=await this.memoryManager.read("shared/constitution.md");i&&s.push(i);let o=e.filter(u=>!n.INFRASTRUCTURE_SERVERS.has(u));if(o.length>0){let u=o.map(h=>ua(h,this.getServerCatalogEntry(h)));s.push(`## Your tools
150
+ `)+r+i}var oa=F(()=>{"use strict"});import{createHash as FS}from"node:crypto";import{readdirSync as KS,readFileSync as GS,statSync as HS}from"node:fs";import{join as Fu}from"node:path";function Ku(n){let e=Gu(n).sort(),t=FS("sha256");for(let s=0;s<e.length;s++){s>0&&t.update("\0");let r=Fu(n,e[s]),i=GS(r,"utf-8");e[s]==="SKILL.md"?t.update(ju(i)):t.update(i)}return t.digest("hex")}function Gu(n,e=""){let t=KS(n),s=[];for(let r of t){let i=Fu(n,r),o=e?`${e}/${r}`:r;HS(i).isDirectory()?s.push(...Gu(i,o)):s.push(o)}return s}var Hu=F(()=>{"use strict";oa()});import{readdirSync as ca,readFileSync as WS,statSync as la,existsSync as bt}from"node:fs";import{join as Ae,relative as VS,resolve as YS}from"node:path";function da(n,e,t){let s=new Map,r=[],i=new Map;for(let o of t??[]){let a=Ae(o,"skills");if(!bt(a))continue;let l=o.split("/").pop()??"seed";aa(a,`seed:${l}`,i,s,r,!1)}for(let o of e??[]){let a=Ae(o.dir,"skills");bt(a)&&aa(a,o.name,i,s,r,!1)}if(bt(n)?aa(n,"customer",i,s,r,!0):Se.debug("No customer skills directory found",{path:n}),r.length>0){for(let o of[...s.keys()])s.get(o).push(...r);s.set("__universal__",r)}return JS=zS(i,n),Se.info("Skill index loaded",{workflows:i.size,agents:s.size-(s.has("__universal__")?1:0)}),s}function Wu(n,e,t){for(let[s,r]of e){let i=r.filter(o=>o.path!==n);i.length!==r.length&&(i.length===0?e.delete(s):e.set(s,i))}for(let s=t.length-1;s>=0;s--)t[s].path===n&&t.splice(s,1)}function aa(n,e,t,s,r,i){let o;try{o=ca(n).filter(a=>{try{return la(Ae(n,a)).isDirectory()}catch{return!1}})}catch(a){Se.warn("Failed to read skills directory",{source:e,path:n,error:String(a)});return}for(let a of o){let l=Ae(n,a),c=Ae(l,"skills");if(!bt(c)){Se.debug("Workflow missing skills/ subdirectory, skipping",{source:e,workflow:a});continue}let d=t.get(a);if(d)if(i&&d.source!=="customer")Se.warn("Customer skill shadows plugin-bundled skill",{workflow:a,shadowed:d,customer:{source:e,path:l}}),Wu(d.path,s,r),t.set(a,{source:e,path:l});else if(i&&d.source==="customer"){Se.error("Customer skill collision \u2014 both skipped",{workflow:a,first:d,second:{source:e,path:l}}),Wu(d.path,s,r),t.delete(a);continue}else{Se.warn("Skill workflow collision \u2014 keeping first, skipping second",{workflow:a,kept:d,skipped:{source:e,path:l}});continue}else t.set(a,{source:e,path:l});let u={type:"local",path:l},h=new Set,p=!1,g;try{g=ca(c).filter(f=>{try{return la(Ae(c,f)).isDirectory()}catch{return!1}})}catch(f){Se.warn("Failed to read workflow skills subdir",{source:e,workflow:a,error:String(f)});continue}for(let f of g){let y=Ae(c,f,"SKILL.md");if(!bt(y))continue;let w=QS(WS(y,"utf-8"));for(let S of w)S==="all"?p=!0:h.add(S)}if(p)r.push(u),Se.debug("Workflow registered as universal",{source:e,workflow:a,skills:g.length});else if(h.size>0){for(let f of h){let y=s.get(f)??[];y.push(u),s.set(f,y)}Se.debug("Workflow registered",{source:e,workflow:a,agents:[...h],skills:g.length})}}}function Vu(n,e){let t=n.get(e)??[],s=n.get("__universal__")??[];if(t.length>0&&s.length>0){let r=new Set(t.map(o=>o.path)),i=s.filter(o=>!r.has(o.path));return[...t,...i]}return t.length===0&&s.length>0?[...s]:t}function zS(n,e){let t=new Set,s=YS(e,"..");for(let[r,i]of n){if(i.source!=="customer")continue;let o=Ae(i.path,"skills");if(!bt(o))continue;let a;try{a=ca(o).filter(l=>{try{return la(Ae(o,l)).isDirectory()}catch{return!1}})}catch{continue}for(let l of a){let c=Ae(o,l),d=Ae(c,"SKILL.md");if(bt(d))try{let{frontmatter:u,body:h}=Uu(d);if(!u.origin?.["base-content-hash"])continue;let p=Ku(c);if(p!==u.origin["base-content-hash"]&&(t.add(c),Se.warn("Registry-installed skill has been modified",{workflow:r,skill:l,source:u.origin.source,baseHash:u.origin["base-content-hash"],currentHash:p}),!u.origin.modified)){u.origin.modified=!0;try{qu(d,u,h),lc(s,[VS(s,d)],`detect-modified: ${l} content hash changed`)}catch(g){Se.error("Failed to persist modified flag to disk",{path:d,error:String(g)})}}}catch{}}}return t}function QS(n){let e=n.match(/^---\n([\s\S]*?)\n---/);if(!e)return[];let t=e[1],s=t.match(/^agents:\s*\n((?:\s+-\s+.+\n?)*)/m);if(s)return s[1].split(`
151
+ `).map(i=>i.replace(/^\s+-\s+/,"").trim()).filter(Boolean);let r=t.match(/^agents:\s*\[([^\]]*)\]/m);return r?r[1].split(",").map(i=>i.trim()).filter(Boolean):[]}var Se,JS,ua=F(()=>{"use strict";O();Hu();oa();mi();Se=T("skill-loader"),JS=new Set});function ha(n,e){let t=`- ${n}: ${e.description}`,s=[];return e.usage&&s.push(`Use for: ${e.usage}.`),e.notFor&&s.push(`Not for: ${e.notFor}.`),s.length>0&&(t+=`
152
+ \u2192 ${s.join(" ")}`),t}var Rs,fa=F(()=>{"use strict";Rs={clickup:{description:"Task management \u2014 tasks, lists, spaces, comments, custom fields",usage:"Creating and managing project tasks"},google:{description:"Email (Gmail), calendar, Google Drive files",usage:"Sending email, checking calendar events, reading Drive documents"},resend:{description:"Send outbound email with file attachments",usage:"Sending transactional or outreach email from your agent address",notFor:"Reading email \u2014 use google for inbox access"},"brave-search":{description:"Web search, news, local business lookup",usage:"Finding current information from the public web",notFor:"Internal data \u2014 use crm-search, code-search, or memory instead"},contacts:{description:"Contact lookups by name, email, or phone",usage:"Quick lookups of people in the contact directory",notFor:"CRM deal/company data \u2014 use a CRM plugin's tools instead"},linear:{description:"Issue tracking and project management",usage:"Creating, searching, and updating engineering issues"},"github-issues":{description:"GitHub issue tracking \u2014 create, search, update, comment on issues",usage:"Managing GitHub issues for engineering work"},quo:{description:"Send and receive SMS messages via OpenPhone",usage:"Texting customers or team members"},voice:{description:"Make outbound phone calls via Vapi",usage:"Calling customers, scheduling appointments, following up by phone"},tasks:{description:"Task management \u2014 create, update, and track agent tasks",usage:"Managing your own task queue"},"code-search":{description:"Semantic search over codebase file index \u2014 find where functionality lives, file roles, exports",usage:"Finding code by what it does, not just by filename",notFor:"Broad web search \u2014 use brave-search instead"},"code-task":{description:"Spawn Claude Code CLI sessions for coding tasks",usage:"Delegating implementation, debugging, or code analysis work"},memory:{description:"Read and write your personal agent memory",usage:"Storing and retrieving facts across conversations. Auto-managed \u2014 don't over-save"},schedule:{description:"Self-service schedule management \u2014 view, add, update, remove your schedules",usage:"Managing your recurring or one-time scheduled tasks"},"event-bus":{description:"Publish events to the cross-agent event bus",usage:"Notifying other agents about state changes or completed work"},workflow:{description:"Plan and task management \u2014 create plans, assign tasks, track dependencies",usage:"Coordinating multi-step work across agents and humans"},callback:{description:"Schedule future self-invocations",usage:"Reminding yourself to follow up on something later"},background:{description:"Spawn detached background processes",usage:"Running long-lived commands that outlive your current turn"},"conversation-search":{description:"Semantic search over past conversations",usage:"Finding what was discussed previously across threads"},browser:{description:"Browser automation via Playwright \u2014 navigate, click, fill forms, screenshot",usage:"Accessing web UIs that don't have APIs"},slack:{description:"Slack API \u2014 read channels, post messages, manage threads",usage:"Interacting with Slack channels and threads"},recall:{description:"Meeting bot \u2014 join calls, get transcripts",usage:"Participating in or getting transcripts from video meetings"},admin:{description:"Agent management \u2014 list, view, update agent definitions",usage:"Viewing or modifying agent configurations"},keychain:{description:"Read secrets from macOS Keychain",usage:"Retrieving API keys or credentials stored in the system keychain"}}});function Yu(n=[]){let e=[],t=[];for(let s of Object.keys(Rs)){if(ZS.has(s)){e.push(s);continue}let r=XS[s];!r||r()?e.push(s):t.push(s)}for(let s of n)for(let[r,i]of Object.entries(s.manifest.mcpServers)){let o=i.env??[];o.length===0||o.every(l=>!!process.env[l])?e.push(r):t.push(r)}return{instanceId:m.instance?.id??"unknown",servers:{configured:e,unconfigured:t}}}var XS,ZS,Ju=F(()=>{"use strict";Oe();fa();XS={google:()=>Object.keys(m.google?.accounts??{}).length>0||!!m.google?.account,resend:()=>!!m.resend?.apiKey,"brave-search":()=>!!m.brave?.apiKey,linear:()=>!!m.linear?.apiKey,clickup:()=>!!m.clickup?.apiToken,"github-issues":()=>!!m.github?.repo,quo:()=>!!m.quo?.apiKey,recall:()=>!!m.recall?.apiKey,"code-task":()=>!0,"code-search":()=>!!m.codeIndex?.enabled,browser:()=>!!m.browser?.cdpEndpoint,tasks:()=>(m.taskLedger?.apiUrl??"")!=="http://localhost:3002"},ZS=new Set(["memory","slack","contacts","callback","background","schedule","event-bus","conversation-search","keychain","admin"])});var zu={};Pe(zu,{AgentRunner:()=>Bs});import{query as e0}from"@anthropic-ai/claude-agent-sdk";import{resolve as Ue}from"node:path";import{existsSync as lr,statSync as t0}from"node:fs";import{createRequire as s0}from"node:module";import{readFile as n0}from"node:fs/promises";function r0(n){return JSON.stringify(Yu(n))}function Y(n){let e=i0[n];if(e){let t=Ue(dr,"mcp",e);if(lr(t))return t}return Ue(dr,n)}var R,dr,i0,Bs,pa=F(()=>{"use strict";or();O();Oe();ns();ua();fa();Ju();R=T("agent-runner");dr=lr(Ue(import.meta.dirname,"mcp"))?import.meta.dirname:Ue(import.meta.dirname,".."),i0={"memory/memory-mcp-server.js":"memory.min.js","memory/structured-memory-mcp-server.js":"structured-memory.min.js","keychain/keychain-mcp-server.js":"keychain.min.js","google/google-mcp-server.js":"google.min.js","quo/quo-mcp-server.js":"quo.min.js","voice/voice-mcp-server.js":"voice.min.js","contacts/contacts-mcp-server.js":"contacts.min.js","tasks/task-mcp-server.js":"task.min.js","resend/resend-mcp-server.js":"resend.min.js","linear/linear-mcp-server.js":"linear.min.js","github/github-issues-mcp-server.js":"github-issues.min.js","clickup/clickup-mcp-server.js":"clickup.min.js","recall/recall-mcp-server.js":"recall.min.js","background/background-task-mcp-server.js":"background-task.min.js","callback/callback-mcp-server.js":"callback.min.js","code-task/code-task-mcp-server.js":"code-task.min.js","search/conversation-search-mcp-server.js":"search-conversation.min.js","code-index/code-search-mcp-server.js":"code-search.min.js","events/event-bus-mcp-server.js":"event-bus.min.js","team/team-mcp-server.js":"team.min.js","workflow/workflow-mcp-server.js":"workflow.min.js","schedule/schedule-mcp-server.js":"schedule.min.js","admin/admin-mcp-server.js":"admin.min.js"};Bs=class n{static registryRef;agentConfig;memoryManager;plugins;skillIndex;activeQuery=null;eventSubscribersJson;prefetcher;_archetypeDef=void 0;constructor(e,t,s=[],r=new Map,i="{}",o){this.agentConfig=e,this.memoryManager=t,this.plugins=s,this.skillIndex=r,this.eventSubscribersJson=i,this.prefetcher=o}async buildSystemPrompt(e,t){let s=[];this.agentConfig.soul&&s.push(this.agentConfig.soul);let r=this.getArchetypeDef();if(r&&this.agentConfig.archetypeConfig)try{let u=r.systemPromptCard({agentConfig:this.agentConfig,archetypeConfig:this.agentConfig.archetypeConfig});u&&s.push(u)}catch(u){R.error("Archetype systemPromptCard threw \u2014 omitting card",{agent:this.agentConfig.id,archetype:this.agentConfig.archetype,error:String(u)})}s.push(this.agentConfig.systemPrompt);let i=await this.memoryManager.read("shared/constitution.md");i&&s.push(i);let o=e.filter(u=>!n.INFRASTRUCTURE_SERVERS.has(u));if(o.length>0){let u=o.map(h=>ha(h,this.getServerCatalogEntry(h)));s.push(`## Your tools
153
153
 
154
154
  Direct tools available to you:
155
155
  ${u.join(`
156
- `)}`)}let a=t??[];if(a.length>0){let u=a.map(h=>ua(h,this.getServerCatalogEntry(h)));s.push(`## Available via subagents
156
+ `)}`)}let a=t??[];if(a.length>0){let u=a.map(h=>ha(h,this.getServerCatalogEntry(h)));s.push(`## Available via subagents
157
157
 
158
158
  You have additional capabilities through delegation. If a task involves any of these domains, use the Agent tool \u2014 do NOT say you lack access:
159
159
  ${u.join(`
@@ -165,15 +165,15 @@ You have ${g.length} reference file(s) in your memory directory:
165
165
 
166
166
  ---
167
167
 
168
- `)}buildServerConfig(e,t){return this.buildAllServerConfigs(t)[e]}buildAllServerConfigs(e){let t={},s=m.slack.mcpToken;s&&(t.slack={type:"http",url:"https://mcp.slack.com/mcp",headers:{Authorization:`Bearer ${s}`}});let r=[{id:"self",backing:"mongo"}],i=this.getArchetypeDef();if(i&&this.agentConfig.archetypeConfig)try{let d=i.memoryScopes({agentConfig:this.agentConfig,archetypeConfig:this.agentConfig.archetypeConfig});for(let u of d)u.id!=="self"&&r.push(u)}catch(d){R.error("Archetype memoryScopes threw \u2014 using self-only",{agent:this.agentConfig.id,archetype:this.agentConfig.archetype,error:String(d)})}t.memory={type:"stdio",command:"node",args:[Y("memory/memory-mcp-server.js")],env:{AGENT_ID:this.agentConfig.id,MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName,MEMORY_SCOPES_JSON:JSON.stringify(r)}},t["structured-memory"]={type:"stdio",command:"node",args:[Y("memory/structured-memory-mcp-server.js")],env:{AGENT_ID:this.agentConfig.id,MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName,CHANNEL_ID:e?.channelId??"",THREAD_ID:e?.threadId??"",QDRANT_URL:process.env.QDRANT_URL??"http://localhost:6333",OLLAMA_URL:process.env.OLLAMA_URL??"http://localhost:11434"}},t.keychain={type:"stdio",command:"node",args:[Y("keychain/keychain-mcp-server.js")],env:{KEYCHAIN_SERVICE:`hive/${m.instance.id}`}};let o=m.google.accounts[this.agentConfig.id]||m.google.account,a=m.google.client;if(t.google={type:"stdio",command:"node",args:[Y("google/google-mcp-server.js")],env:{...o?{GOG_ACCOUNT:o}:{},...a?{GOG_CLIENT:a}:{},DRIVE_SHARED_FOLDER:m.google.sharedFolder,INSTANCE_ID:m.instance.id,PATH:process.env.PATH??""}},m.quo.apiKey&&(t.quo={type:"stdio",command:"node",args:[Y("quo/quo-mcp-server.js")],env:{QUO_API_KEY:m.quo.apiKey,...m.quo.phoneNumberId?{QUO_PHONE_NUMBER_ID:m.quo.phoneNumberId}:{},QUO_LINES_JSON:JSON.stringify(m.quo.lines)}}),m.voice.enabled&&m.voice.apiKey){let d=Object.entries(m.voice.assistants).find(([u,h])=>h===this.agentConfig.id)?.[0]??"";t.voice={type:"stdio",command:"node",args:[Y("voice/voice-mcp-server.js")],env:{VAPI_API_KEY:m.voice.apiKey,VAPI_PHONE_NUMBER_ID:m.voice.phoneNumberId,VAPI_ASSISTANT_ID:d,AGENT_ID:this.agentConfig.id,AGENT_NAME:this.agentConfig.name}}}t.contacts={type:"stdio",command:"node",args:[Y("contacts/contacts-mcp-server.js")],env:{MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName}};let l=m.taskLedger.agentKeys[this.agentConfig.id]??m.taskLedger.apiKey;if(l&&(t.tasks={type:"stdio",command:"node",args:[Y("tasks/task-mcp-server.js")],env:{TASK_LEDGER_API_URL:m.taskLedger.apiUrl,TASK_LEDGER_API_KEY:l}}),m.brave.apiKey&&(t["brave-search"]={type:"stdio",command:"node",args:[QS(import.meta.url).resolve("brave-search-mcp/dist/index.js")],env:{BRAVE_API_KEY:m.brave.apiKey}}),m.resend.apiKey){let d=this.agentConfig.name.toLowerCase(),u=m.resend.emailDomain,h=m.resend.businessName?` (${m.resend.businessName})`:"",p=u?`${this.agentConfig.name}${h} <${d}@${u}>`:m.resend.fromAddress;t.resend={type:"stdio",command:"node",args:[Y("resend/resend-mcp-server.js")],env:{RESEND_API_KEY:m.resend.apiKey,RESEND_FROM_ADDRESS:p,RESEND_DEFAULT_CC:m.resend.defaultCc,RESEND_DEFAULT_BCC:m.resend.defaultBcc}}}if(m.linear.apiKey){let d={LINEAR_API_KEY:m.linear.apiKey};m.linear.teamId&&(d.LINEAR_TEAM_ID=m.linear.teamId),t.linear={type:"stdio",command:"node",args:[Y("linear/linear-mcp-server.js")],env:d}}if(m.github.repo){let d={GITHUB_REPO:m.github.repo,PATH:process.env.PATH??""};m.github.token&&(d.GH_TOKEN=m.github.token),t["github-issues"]={type:"stdio",command:"node",args:[Y("github/github-issues-mcp-server.js")],env:d}}m.clickup.apiToken&&(t.clickup={type:"stdio",command:"node",args:[Y("clickup/clickup-mcp-server.js")],env:{CLICKUP_API_TOKEN:m.clickup.apiToken}}),m.recall.apiKey&&(t.recall={type:"stdio",command:"node",args:[Y("recall/recall-mcp-server.js")],env:{RECALL_API_KEY:m.recall.apiKey,RECALL_API_REGION:m.recall.region,RECALL_WEBHOOK_SECRET:m.recall.webhookSecret,MEETING_MONITOR_API:`http://127.0.0.1:${m.recall.monitorPort}`,MEETING_MONITOR_PUBLIC_URL:m.recall.monitorPublicUrl,RECALL_AGENT_ID:this.agentConfig.id,RECALL_ADAPTER_ID:e?.adapterId??"",RECALL_CHANNEL_ID:e?.channelId??"",RECALL_CHANNEL_KIND:e?.channelKind??"internal",RECALL_CHANNEL_LABEL:e?.channelLabel??"",RECALL_THREAD_ID:e?.threadId??"",RECALL_SLACK_TS:e?.slackTs??"",RECALL_SLACK_THREAD_TS:e?.slackThreadTs??""}}),m.browser.cdpEndpoint&&(t.browser={type:"stdio",command:"npx",args:["@playwright/mcp@latest","--cdp-endpoint",m.browser.cdpEndpoint],env:{PATH:process.env.PATH??"",HOME:process.env.HOME??""}}),t.background={type:"stdio",command:"node",args:[Y("background/background-task-mcp-server.js")],env:{BG_TASK_API:`http://127.0.0.1:${m.background.port}`,BG_AUTH_TOKEN:m.background.authToken,BG_AGENT_ID:this.agentConfig.id,BG_ADAPTER_ID:e?.adapterId??"",BG_CHANNEL_ID:e?.channelId??"",BG_CHANNEL_KIND:e?.channelKind??"internal",BG_CHANNEL_LABEL:e?.channelLabel??"",BG_THREAD_ID:e?.threadId??"",BG_SLACK_TS:e?.slackTs??"",BG_SLACK_THREAD_TS:e?.slackThreadTs??""}},t.callback={type:"stdio",command:"node",args:[Y("callback/callback-mcp-server.js")],env:{CB_AGENT_ID:this.agentConfig.id,CB_ADAPTER_ID:e?.adapterId??"",CB_CHANNEL_ID:e?.channelId??"",CB_CHANNEL_KIND:e?.channelKind??"internal",CB_CHANNEL_LABEL:e?.channelLabel??"",CB_THREAD_ID:e?.threadId??"",CB_SLACK_TS:e?.slackTs??"",CB_SLACK_THREAD_TS:e?.slackThreadTs??"",MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName}},t["code-task"]={type:"stdio",command:"node",args:[Y("code-task/code-task-mcp-server.js")],env:{CT_TASK_API:`http://127.0.0.1:${m.codeTask.port}`,CT_AUTH_TOKEN:m.codeTask.authToken,CT_AGENT_ID:this.agentConfig.id,CT_ADAPTER_ID:e?.adapterId??"",CT_CHANNEL_ID:e?.channelId??"",CT_CHANNEL_KIND:e?.channelKind??"internal",CT_CHANNEL_LABEL:e?.channelLabel??"",CT_THREAD_ID:e?.threadId??"",CT_SLACK_TS:e?.slackTs??"",CT_SLACK_THREAD_TS:e?.slackThreadTs??""}};let c={OLLAMA_URL:process.env.OLLAMA_URL??"http://localhost:11434",QDRANT_URL:process.env.QDRANT_URL??"http://localhost:6333"};process.env.KB_EMBED_MODEL&&(c.KB_EMBED_MODEL=process.env.KB_EMBED_MODEL),t["conversation-search"]={type:"stdio",command:"node",args:[Y("search/conversation-search-mcp-server.js")],env:{...c,AGENT_ID:this.agentConfig.id,DEFAULT_AGENT:m.defaultAgent}},t["code-search"]={type:"stdio",command:"node",args:[Y("code-index/code-search-mcp-server.js")],env:{MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName,QDRANT_URL:process.env.QDRANT_URL??"http://localhost:6333",OLLAMA_URL:process.env.OLLAMA_URL??"http://localhost:11434"}};for(let d of this.plugins)for(let[u,h]of Object.entries(d.manifest.mcpServers)){if(t[u]){R.warn("Plugin server name conflicts with core server, skipping",{plugin:d.name,server:u});continue}let p=h.entry.replace(/\.ts$/,".js"),g=h.entry.replace(/\.ts$/,".min.js"),f=Ue(ur,`plugins/${d.name}/${p}`),y=Ue(le,"plugins","node_modules",d.name,"dist",g),w=Ue(le,"plugins",d.name,"dist",g),S=[f,y,w].find(v=>dr(v))??f,b=m.taskLedger.agentKeys[this.agentConfig.id]??m.taskLedger.apiKey,A={AGENT_ID:this.agentConfig.id,AGENT_NAME:this.agentConfig.name,MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName,TASK_LEDGER_API_URL:m.taskLedger.apiUrl,...b?{TASK_LEDGER_API_KEY:b}:{},PATH:process.env.PATH??"",HOME:process.env.HOME??""};for(let v of h.env??[])process.env[v]&&(A[v]=process.env[v]);for(let[v,C]of Object.entries(h.envMap??{}))A[C]&&(A[v]=A[C]);for(let[v,C]of Object.entries(h.agentEnv??{}))A[v]=n.resolveAgentEnvPath(this.agentConfig,C);t[u]={type:"stdio",command:"node",args:[S],env:A}}return t["event-bus"]={type:"stdio",command:"node",args:[Y("events/event-bus-mcp-server.js")],env:{AGENT_ID:this.agentConfig.id,MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName,EVENT_SUBSCRIBERS:this.eventSubscribersJson}},n.registryRef||R.warn("registryRef not set \u2014 agents will get empty AGENT_IDS for team server"),t.team={type:"stdio",command:"node",args:[Y("team/team-mcp-server.js")],env:{AGENT_ID:this.agentConfig.id,MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName,AGENT_IDS:JSON.stringify(n.registryRef?.getAll().map(d=>d.id)??[])}},m.workflow.enabled&&(t.workflow={type:"stdio",command:"node",args:[Y("workflow/workflow-mcp-server.js")],env:{AGENT_ID:this.agentConfig.id,MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName,EVENT_SUBSCRIBERS:this.eventSubscribersJson}}),t.schedule={type:"stdio",command:"node",args:[Y("schedule/schedule-mcp-server.js")],env:{AGENT_ID:this.agentConfig.id,MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName}},t.admin={type:"stdio",command:"node",args:[Y("admin/admin-mcp-server.js")],env:{MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName,AGENT_ID:this.agentConfig.id,INSTANCE_CAPABILITIES:ZS(this.plugins)}},t}filterCoreServers(e){let t={...e},s=new Set(this.agentConfig.coreServers);s.has("memory")&&s.add("structured-memory"),s.add("schedule"),s.add("team"),m.workflow.enabled&&s.add("workflow");for(let r of Object.keys(t))s.has(r)||delete t[r];if(!this.agentConfig.autonomy.externalComms)for(let r of["resend","quo"])t[r]&&(R.debug("Autonomy: externalComms disabled \u2014 removing server",{server:r,agent:this.agentConfig.id}),delete t[r]);return this.agentConfig.autonomy.codeTask||t["code-task"]&&(R.debug("Autonomy: codeTask disabled \u2014 removing server",{server:"code-task",agent:this.agentConfig.id}),delete t["code-task"]),this.agentConfig.autonomy.codeAccess||t["code-search"]&&(R.debug("Autonomy: codeAccess disabled \u2014 removing server",{server:"code-search",agent:this.agentConfig.id}),delete t["code-search"]),t}static resolveAgentEnvPath(e,t){let s=t.split("."),r=e;for(let i of s){if(r==null||typeof r!="object")return"";r=r[i]}return r==null?"":String(r)}static INFRASTRUCTURE_SERVERS=new Set(["schedule","structured-memory","team"]);static CONTEXT_DEPENDENT_SERVERS=new Set(["callback","background","code-task","recall","structured-memory","memory"]);buildDelegateAgents(e){let t=this.agentConfig.delegateServers;if(t.length===0)return{};let s={},r=new Set;this.agentConfig.autonomy.externalComms||(r.add("resend"),r.add("quo")),this.agentConfig.autonomy.codeTask||r.add("code-task"),this.agentConfig.autonomy.codeAccess||r.add("code-search");for(let i of t){if(r.has(i)){R.debug("Autonomy gate \u2014 skipping delegate server",{server:i,agent:this.agentConfig.id});continue}n.CONTEXT_DEPENDENT_SERVERS.has(i)&&R.warn("Context-dependent server in delegateServers \u2014 subagent won't have channel context",{agent:this.agentConfig.id,server:i});let o=e[i];if(!o){R.warn("Delegate server not found in configs, skipping",{agent:this.agentConfig.id,server:i});continue}let a=this.getServerCatalogEntry(i).description,l=this.agentConfig.delegatePrompts?.[i],c=l||`You are a tool specialist for ${i}. Execute the requested task using your available tools. Return results concisely. Do not add commentary or explanation beyond what was asked.`;s[i]={description:a,prompt:c,mcpServers:[{[i]:o}],model:"inherit",maxTurns:l?7:10,disallowedTools:["Agent"]},l&&R.info("Intent-aware delegate prompt loaded",{agent:this.agentConfig.id,server:i,promptLength:l.length})}return s}getServerCatalogEntry(e){if(Bs[e])return Bs[e];for(let t of this.plugins){let s=t.manifest.mcpServers[e];if(s?.description)return{description:s.description,usage:s.usage,notFor:s.notFor}}return{description:e}}buildSdkPlugins(){let e=this.agentConfig.plugins;if(!e?.length)return[];let t=[],s=Ue(ur,"..","plugins","claude-code");for(let r of e){if(r.includes("/")||r.includes("\\")||r===".."||r.startsWith(".")){R.warn("Invalid plugin name, skipping",{plugin:r,agent:this.agentConfig.id});continue}let i=Ue(s,r);if(!dr(i)){R.warn("Plugin not found, skipping",{plugin:r,expected:i,agent:this.agentConfig.id});continue}t.push({type:"local",path:i})}return t.length>0&&R.debug("Loaded plugins for agent",{agent:this.agentConfig.id,plugins:t.map(r=>r.path)}),t}buildNativeSkills(){return Hu(this.skillIndex,this.agentConfig.id)}getArchetypeDef(){return this._archetypeDef===void 0&&(this._archetypeDef=this.agentConfig.archetype?or(this.agentConfig.archetype)??null:null,this.agentConfig.archetype&&!this._archetypeDef&&R.warn("Archetype referenced by agent not registered \u2014 running unstructured",{agent:this.agentConfig.id,archetype:this.agentConfig.archetype})),this._archetypeDef}buildHooks(e){let t={PreCompact:this.buildPreCompactMatcher()},s=this.getArchetypeDef();if(s&&this.agentConfig.archetypeConfig)try{let r=s.preToolUseHooks({agentConfig:this.agentConfig,archetypeConfig:this.agentConfig.archetypeConfig,workItemContext:e});r.length>0&&(t.PreToolUse=r)}catch(r){R.error("Archetype preToolUseHooks threw \u2014 installing deny-all PreToolUse hook",{agent:this.agentConfig.id,archetype:this.agentConfig.archetype,error:String(r)}),t.PreToolUse=[{hooks:[async()=>({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:`Archetype hook initialization failed (${String(r)}). All tool calls blocked until the archetype is fixed.`}})]}]}return t}buildPreCompactMatcher(){let e=this.agentConfig.name,t=this.agentConfig.id,s=this.prefetcher;return[{hooks:[async(r,i,o)=>{R.info("PreCompact hook fired",{agent:t});let a=[`You are ${e} (agent ID: ${t}). When summarizing this conversation for compaction:`,"- Preserve your identity, role, and any behavioral instructions from your system prompt","- Keep all customer/contact names, deal details, and reference numbers","- Retain every decision made and commitment given \u2014 who decided what, and why","- Preserve active workflows: what's in progress, what's pending, next steps","- Keep tool call results that informed decisions (not raw API responses)","- Discard pleasantries, thinking-out-loud, and intermediate failed attempts"].join(`
169
- `),l="";if(s&&r?.transcript_path)try{let d=await XS(r.transcript_path,"utf-8");if(d.length>0){let h=d.length>2e5?d.slice(-2e5):d;l=await s.getCompactionContext(h,t)}}catch(d){R.warn("Code context extraction failed during compaction \u2014 proceeding without",{agent:t,error:String(d)})}return{continue:!0,systemMessage:l?`${a}
168
+ `)}buildServerConfig(e,t){return this.buildAllServerConfigs(t)[e]}buildAllServerConfigs(e){let t={},s=m.slack.mcpToken;s&&(t.slack={type:"http",url:"https://mcp.slack.com/mcp",headers:{Authorization:`Bearer ${s}`}});let r=[{id:"self",backing:"mongo"}],i=this.getArchetypeDef();if(i&&this.agentConfig.archetypeConfig)try{let d=i.memoryScopes({agentConfig:this.agentConfig,archetypeConfig:this.agentConfig.archetypeConfig});for(let u of d)u.id!=="self"&&r.push(u)}catch(d){R.error("Archetype memoryScopes threw \u2014 using self-only",{agent:this.agentConfig.id,archetype:this.agentConfig.archetype,error:String(d)})}t.memory={type:"stdio",command:"node",args:[Y("memory/memory-mcp-server.js")],env:{AGENT_ID:this.agentConfig.id,MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName,MEMORY_SCOPES_JSON:JSON.stringify(r)}},t["structured-memory"]={type:"stdio",command:"node",args:[Y("memory/structured-memory-mcp-server.js")],env:{AGENT_ID:this.agentConfig.id,MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName,CHANNEL_ID:e?.channelId??"",THREAD_ID:e?.threadId??"",QDRANT_URL:process.env.QDRANT_URL??"http://localhost:6333",OLLAMA_URL:process.env.OLLAMA_URL??"http://localhost:11434"}},t.keychain={type:"stdio",command:"node",args:[Y("keychain/keychain-mcp-server.js")],env:{KEYCHAIN_SERVICE:`hive/${m.instance.id}`}};let o=m.google.accounts[this.agentConfig.id]||m.google.account,a=m.google.client;if(t.google={type:"stdio",command:"node",args:[Y("google/google-mcp-server.js")],env:{...o?{GOG_ACCOUNT:o}:{},...a?{GOG_CLIENT:a}:{},DRIVE_SHARED_FOLDER:m.google.sharedFolder,INSTANCE_ID:m.instance.id,PATH:process.env.PATH??""}},m.quo.apiKey&&(t.quo={type:"stdio",command:"node",args:[Y("quo/quo-mcp-server.js")],env:{QUO_API_KEY:m.quo.apiKey,...m.quo.phoneNumberId?{QUO_PHONE_NUMBER_ID:m.quo.phoneNumberId}:{},QUO_LINES_JSON:JSON.stringify(m.quo.lines)}}),m.voice.enabled&&m.voice.apiKey){let d=Object.entries(m.voice.assistants).find(([u,h])=>h===this.agentConfig.id)?.[0]??"";t.voice={type:"stdio",command:"node",args:[Y("voice/voice-mcp-server.js")],env:{VAPI_API_KEY:m.voice.apiKey,VAPI_PHONE_NUMBER_ID:m.voice.phoneNumberId,VAPI_ASSISTANT_ID:d,AGENT_ID:this.agentConfig.id,AGENT_NAME:this.agentConfig.name}}}t.contacts={type:"stdio",command:"node",args:[Y("contacts/contacts-mcp-server.js")],env:{MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName}};let l=m.taskLedger.agentKeys[this.agentConfig.id]??m.taskLedger.apiKey;if(l&&(t.tasks={type:"stdio",command:"node",args:[Y("tasks/task-mcp-server.js")],env:{TASK_LEDGER_API_URL:m.taskLedger.apiUrl,TASK_LEDGER_API_KEY:l}}),m.brave.apiKey&&(t["brave-search"]={type:"stdio",command:"node",args:[s0(import.meta.url).resolve("brave-search-mcp/dist/index.js")],env:{BRAVE_API_KEY:m.brave.apiKey}}),m.resend.apiKey){let d=this.agentConfig.name.toLowerCase(),u=m.resend.emailDomain,h=m.resend.businessName?` (${m.resend.businessName})`:"",p=u?`${this.agentConfig.name}${h} <${d}@${u}>`:m.resend.fromAddress;t.resend={type:"stdio",command:"node",args:[Y("resend/resend-mcp-server.js")],env:{RESEND_API_KEY:m.resend.apiKey,RESEND_FROM_ADDRESS:p,RESEND_DEFAULT_CC:m.resend.defaultCc,RESEND_DEFAULT_BCC:m.resend.defaultBcc}}}if(m.linear.apiKey){let d={LINEAR_API_KEY:m.linear.apiKey};m.linear.teamId&&(d.LINEAR_TEAM_ID=m.linear.teamId),t.linear={type:"stdio",command:"node",args:[Y("linear/linear-mcp-server.js")],env:d}}if(m.github.repo){let d={GITHUB_REPO:m.github.repo,PATH:process.env.PATH??""};m.github.token&&(d.GH_TOKEN=m.github.token),t["github-issues"]={type:"stdio",command:"node",args:[Y("github/github-issues-mcp-server.js")],env:d}}m.clickup.apiToken&&(t.clickup={type:"stdio",command:"node",args:[Y("clickup/clickup-mcp-server.js")],env:{CLICKUP_API_TOKEN:m.clickup.apiToken}}),m.recall.apiKey&&(t.recall={type:"stdio",command:"node",args:[Y("recall/recall-mcp-server.js")],env:{RECALL_API_KEY:m.recall.apiKey,RECALL_API_REGION:m.recall.region,RECALL_WEBHOOK_SECRET:m.recall.webhookSecret,MEETING_MONITOR_API:`http://127.0.0.1:${m.recall.monitorPort}`,MEETING_MONITOR_PUBLIC_URL:m.recall.monitorPublicUrl,RECALL_AGENT_ID:this.agentConfig.id,RECALL_ADAPTER_ID:e?.adapterId??"",RECALL_CHANNEL_ID:e?.channelId??"",RECALL_CHANNEL_KIND:e?.channelKind??"internal",RECALL_CHANNEL_LABEL:e?.channelLabel??"",RECALL_THREAD_ID:e?.threadId??"",RECALL_SLACK_TS:e?.slackTs??"",RECALL_SLACK_THREAD_TS:e?.slackThreadTs??""}}),m.browser.cdpEndpoint&&(t.browser={type:"stdio",command:"npx",args:["@playwright/mcp@latest","--cdp-endpoint",m.browser.cdpEndpoint],env:{PATH:process.env.PATH??"",HOME:process.env.HOME??""}}),t.background={type:"stdio",command:"node",args:[Y("background/background-task-mcp-server.js")],env:{BG_TASK_API:`http://127.0.0.1:${m.background.port}`,BG_AUTH_TOKEN:m.background.authToken,BG_AGENT_ID:this.agentConfig.id,BG_ADAPTER_ID:e?.adapterId??"",BG_CHANNEL_ID:e?.channelId??"",BG_CHANNEL_KIND:e?.channelKind??"internal",BG_CHANNEL_LABEL:e?.channelLabel??"",BG_THREAD_ID:e?.threadId??"",BG_SLACK_TS:e?.slackTs??"",BG_SLACK_THREAD_TS:e?.slackThreadTs??""}},t.callback={type:"stdio",command:"node",args:[Y("callback/callback-mcp-server.js")],env:{CB_AGENT_ID:this.agentConfig.id,CB_ADAPTER_ID:e?.adapterId??"",CB_CHANNEL_ID:e?.channelId??"",CB_CHANNEL_KIND:e?.channelKind??"internal",CB_CHANNEL_LABEL:e?.channelLabel??"",CB_THREAD_ID:e?.threadId??"",CB_SLACK_TS:e?.slackTs??"",CB_SLACK_THREAD_TS:e?.slackThreadTs??"",MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName}},t["code-task"]={type:"stdio",command:"node",args:[Y("code-task/code-task-mcp-server.js")],env:{CT_TASK_API:`http://127.0.0.1:${m.codeTask.port}`,CT_AUTH_TOKEN:m.codeTask.authToken,CT_AGENT_ID:this.agentConfig.id,CT_ADAPTER_ID:e?.adapterId??"",CT_CHANNEL_ID:e?.channelId??"",CT_CHANNEL_KIND:e?.channelKind??"internal",CT_CHANNEL_LABEL:e?.channelLabel??"",CT_THREAD_ID:e?.threadId??"",CT_SLACK_TS:e?.slackTs??"",CT_SLACK_THREAD_TS:e?.slackThreadTs??""}};let c={OLLAMA_URL:process.env.OLLAMA_URL??"http://localhost:11434",QDRANT_URL:process.env.QDRANT_URL??"http://localhost:6333"};process.env.KB_EMBED_MODEL&&(c.KB_EMBED_MODEL=process.env.KB_EMBED_MODEL),t["conversation-search"]={type:"stdio",command:"node",args:[Y("search/conversation-search-mcp-server.js")],env:{...c,AGENT_ID:this.agentConfig.id,DEFAULT_AGENT:m.defaultAgent}},t["code-search"]={type:"stdio",command:"node",args:[Y("code-index/code-search-mcp-server.js")],env:{MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName,QDRANT_URL:process.env.QDRANT_URL??"http://localhost:6333",OLLAMA_URL:process.env.OLLAMA_URL??"http://localhost:11434"}};for(let d of this.plugins)for(let[u,h]of Object.entries(d.manifest.mcpServers)){if(t[u]){R.warn("Plugin server name conflicts with core server, skipping",{plugin:d.name,server:u});continue}let p=h.entry.replace(/\.ts$/,".js"),g=h.entry.replace(/\.ts$/,".min.js"),f=Ue(dr,`plugins/${d.name}/${p}`),y=Ue(ce,"plugins","node_modules",d.name,"dist",g),w=Ue(ce,"plugins",d.name,"dist",g),S=[f,y,w].find(v=>lr(v))??f,b=m.taskLedger.agentKeys[this.agentConfig.id]??m.taskLedger.apiKey,A={AGENT_ID:this.agentConfig.id,AGENT_NAME:this.agentConfig.name,MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName,TASK_LEDGER_API_URL:m.taskLedger.apiUrl,...b?{TASK_LEDGER_API_KEY:b}:{},PATH:process.env.PATH??"",HOME:process.env.HOME??""};for(let v of h.env??[])process.env[v]&&(A[v]=process.env[v]);for(let[v,C]of Object.entries(h.envMap??{}))A[C]&&(A[v]=A[C]);for(let[v,C]of Object.entries(h.agentEnv??{}))A[v]=n.resolveAgentEnvPath(this.agentConfig,C);t[u]={type:"stdio",command:"node",args:[S],env:A}}return t["event-bus"]={type:"stdio",command:"node",args:[Y("events/event-bus-mcp-server.js")],env:{AGENT_ID:this.agentConfig.id,MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName,EVENT_SUBSCRIBERS:this.eventSubscribersJson}},n.registryRef||R.warn("registryRef not set \u2014 agents will get empty AGENT_IDS for team server"),t.team={type:"stdio",command:"node",args:[Y("team/team-mcp-server.js")],env:{AGENT_ID:this.agentConfig.id,MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName,AGENT_IDS:JSON.stringify(n.registryRef?.getAll().map(d=>d.id)??[])}},m.workflow.enabled&&(t.workflow={type:"stdio",command:"node",args:[Y("workflow/workflow-mcp-server.js")],env:{AGENT_ID:this.agentConfig.id,MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName,EVENT_SUBSCRIBERS:this.eventSubscribersJson}}),t.schedule={type:"stdio",command:"node",args:[Y("schedule/schedule-mcp-server.js")],env:{AGENT_ID:this.agentConfig.id,MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName}},t.admin={type:"stdio",command:"node",args:[Y("admin/admin-mcp-server.js")],env:{MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName,AGENT_ID:this.agentConfig.id,INSTANCE_CAPABILITIES:r0(this.plugins)}},t}filterCoreServers(e){let t={...e},s=new Set(this.agentConfig.coreServers);s.has("memory")&&s.add("structured-memory"),s.add("schedule"),s.add("team"),m.workflow.enabled&&s.add("workflow");for(let r of Object.keys(t))s.has(r)||delete t[r];if(!this.agentConfig.autonomy.externalComms)for(let r of["resend","quo"])t[r]&&(R.debug("Autonomy: externalComms disabled \u2014 removing server",{server:r,agent:this.agentConfig.id}),delete t[r]);return this.agentConfig.autonomy.codeTask||t["code-task"]&&(R.debug("Autonomy: codeTask disabled \u2014 removing server",{server:"code-task",agent:this.agentConfig.id}),delete t["code-task"]),this.agentConfig.autonomy.codeAccess||t["code-search"]&&(R.debug("Autonomy: codeAccess disabled \u2014 removing server",{server:"code-search",agent:this.agentConfig.id}),delete t["code-search"]),t}static resolveAgentEnvPath(e,t){let s=t.split("."),r=e;for(let i of s){if(r==null||typeof r!="object")return"";r=r[i]}return r==null?"":String(r)}static INFRASTRUCTURE_SERVERS=new Set(["schedule","structured-memory","team"]);static CONTEXT_DEPENDENT_SERVERS=new Set(["callback","background","code-task","recall","structured-memory","memory"]);buildDelegateAgents(e){let t=this.agentConfig.delegateServers;if(t.length===0)return{};let s={},r=new Set;this.agentConfig.autonomy.externalComms||(r.add("resend"),r.add("quo")),this.agentConfig.autonomy.codeTask||r.add("code-task"),this.agentConfig.autonomy.codeAccess||r.add("code-search");for(let i of t){if(r.has(i)){R.debug("Autonomy gate \u2014 skipping delegate server",{server:i,agent:this.agentConfig.id});continue}n.CONTEXT_DEPENDENT_SERVERS.has(i)&&R.warn("Context-dependent server in delegateServers \u2014 subagent won't have channel context",{agent:this.agentConfig.id,server:i});let o=e[i];if(!o){R.warn("Delegate server not found in configs, skipping",{agent:this.agentConfig.id,server:i});continue}let a=this.getServerCatalogEntry(i).description,l=this.agentConfig.delegatePrompts?.[i],c=l||`You are a tool specialist for ${i}. Execute the requested task using your available tools. Return results concisely. Do not add commentary or explanation beyond what was asked.`;s[i]={description:a,prompt:c,mcpServers:[{[i]:o}],model:"inherit",maxTurns:l?7:10,disallowedTools:["Agent"]},l&&R.info("Intent-aware delegate prompt loaded",{agent:this.agentConfig.id,server:i,promptLength:l.length})}return s}getServerCatalogEntry(e){if(Rs[e])return Rs[e];for(let t of this.plugins){let s=t.manifest.mcpServers[e];if(s?.description)return{description:s.description,usage:s.usage,notFor:s.notFor}}return{description:e}}buildSdkPlugins(){let e=this.agentConfig.plugins;if(!e?.length)return[];let t=[],s=Ue(dr,"..","plugins","claude-code");for(let r of e){if(r.includes("/")||r.includes("\\")||r===".."||r.startsWith(".")){R.warn("Invalid plugin name, skipping",{plugin:r,agent:this.agentConfig.id});continue}let i=Ue(s,r);if(!lr(i)){R.warn("Plugin not found, skipping",{plugin:r,expected:i,agent:this.agentConfig.id});continue}t.push({type:"local",path:i})}return t.length>0&&R.debug("Loaded plugins for agent",{agent:this.agentConfig.id,plugins:t.map(r=>r.path)}),t}buildNativeSkills(){return Vu(this.skillIndex,this.agentConfig.id)}getArchetypeDef(){return this._archetypeDef===void 0&&(this._archetypeDef=this.agentConfig.archetype?ir(this.agentConfig.archetype)??null:null,this.agentConfig.archetype&&!this._archetypeDef&&R.warn("Archetype referenced by agent not registered \u2014 running unstructured",{agent:this.agentConfig.id,archetype:this.agentConfig.archetype})),this._archetypeDef}buildHooks(e){let t={PreCompact:this.buildPreCompactMatcher()},s=this.getArchetypeDef();if(s&&this.agentConfig.archetypeConfig)try{let r=s.preToolUseHooks({agentConfig:this.agentConfig,archetypeConfig:this.agentConfig.archetypeConfig,workItemContext:e});r.length>0&&(t.PreToolUse=r)}catch(r){R.error("Archetype preToolUseHooks threw \u2014 installing deny-all PreToolUse hook",{agent:this.agentConfig.id,archetype:this.agentConfig.archetype,error:String(r)}),t.PreToolUse=[{hooks:[async()=>({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:`Archetype hook initialization failed (${String(r)}). All tool calls blocked until the archetype is fixed.`}})]}]}return t}buildPreCompactMatcher(){let e=this.agentConfig.name,t=this.agentConfig.id,s=this.prefetcher;return[{hooks:[async(r,i,o)=>{R.info("PreCompact hook fired",{agent:t});let a=[`You are ${e} (agent ID: ${t}). When summarizing this conversation for compaction:`,"- Preserve your identity, role, and any behavioral instructions from your system prompt","- Keep all customer/contact names, deal details, and reference numbers","- Retain every decision made and commitment given \u2014 who decided what, and why","- Preserve active workflows: what's in progress, what's pending, next steps","- Keep tool call results that informed decisions (not raw API responses)","- Discard pleasantries, thinking-out-loud, and intermediate failed attempts"].join(`
169
+ `),l="";if(s&&r?.transcript_path)try{let d=await n0(r.transcript_path,"utf-8");if(d.length>0){let h=d.length>2e5?d.slice(-2e5):d;l=await s.getCompactionContext(h,t)}}catch(d){R.warn("Code context extraction failed during compaction \u2014 proceeding without",{agent:t,error:String(d)})}return{continue:!0,systemMessage:l?`${a}
170
170
 
171
- ${l}`:a}}]}]}async send(e,t,s,r,i,o){let a=i??this.agentConfig.model;R.info("Sending prompt to agent",{agent:this.agentConfig.id,model:a,modelOverride:!!i,resumeSession:t??"new",promptLength:e.length,streaming:!!s});let l=this.buildAllServerConfigs(r),c=this.filterCoreServers(l),d=this.buildDelegateAgents(l),u=await this.buildSystemPrompt(Object.keys(c),Object.keys(d)),h=[...this.buildSdkPlugins(),...this.buildNativeSkills()];Object.keys(d).length>0&&R.info("Delegate subagents configured",{agent:this.agentConfig.id,delegates:Object.keys(d)});let p={},g=this.getArchetypeDef();if(g&&this.agentConfig.archetypeConfig)try{p=g.sessionOptions({agentConfig:this.agentConfig,archetypeConfig:this.agentConfig.archetypeConfig,workItemContext:r})}catch(G){R.error("Archetype sessionOptions threw \u2014 ignoring",{agent:this.agentConfig.id,archetype:this.agentConfig.archetype,error:String(G)})}if(typeof p.cwd=="string"){let G=p.cwd,D;try{D=zS(G)}catch(P){let ie=`Archetype cwd unavailable at session start \u2014 refusing to run: ${G} (${String(P)})`;throw R.error(ie,{agent:this.agentConfig.id}),new Error(ie)}if(!D.isDirectory()){let P=`Archetype cwd is not a directory: ${G}`;throw R.error(P,{agent:this.agentConfig.id}),new Error(P)}}let f=JS({prompt:e,options:{model:a,systemPrompt:u,permissionMode:"bypassPermissions",allowDangerouslySkipPermissions:!0,maxTurns:o?.maxTurns??this.agentConfig.maxTurns,maxBudgetUsd:o?.budgetUsd??this.agentConfig.budgetUsd,thinking:{type:"disabled"},...p.cwd?{cwd:p.cwd}:{},settingSources:p.settingSources??[],includePartialMessages:!!s,...t?{resume:t}:{},...Object.keys(c).length>0?{mcpServers:c}:{},...Object.keys(d).length>0?{agents:d}:{},...h.length>0?{plugins:h}:{},hooks:this.buildHooks(r),...this.agentConfig.betas?.length?{betas:this.agentConfig.betas}:{},env:{...process.env,...m.anthropic.apiKey?{ANTHROPIC_API_KEY:m.anthropic.apiKey}:{},CLAUDE_AGENT_SDK_CLIENT_APP:"hive/0.1.0",CLAUDECODE:void 0}}});this.activeQuery=f;let y="",w=t??"",S=0,b=0,A=!1,v;this._aborted=!1;let C=0,M=0,_=0,L=0,j=0,J=0,K,ae=[],sn=null,Le=null,nn=o?.timeoutMs??this.agentConfig.timeoutMs??3e5,rn=setTimeout(()=>{R.warn("Agent query timed out, aborting",{agent:this.agentConfig.id,timeoutMs:nn}),this.abort()},nn);try{for await(let G of f){let D=G;if(D.type==="system"&&D.subtype==="init"&&(w=D.session_id,R.debug("Session initialized",{sessionId:w})),D.type==="system"&&D.subtype==="compact_boundary"){let P=D.compact_metadata;J++,K=P?.pre_tokens,R.info("Context compacted",{agent:this.agentConfig.id,trigger:P?.trigger,preTokens:P?.pre_tokens,compactionNumber:J})}if(D.type==="system"&&D.subtype==="status"&&D.status==="compacting"&&R.info("Compaction in progress",{agent:this.agentConfig.id}),D.type==="stream_event"&&s){let P=D.event;P?.type==="content_block_delta"&&P?.delta?.type==="text_delta"&&(s(P.delta.text),A=!0)}if(D.type==="tool_progress"){let P=D;R.info("Tool in progress",{agent:this.agentConfig.id,tool:P.tool_name,elapsed:P.elapsed_time_seconds})}if(D.type==="assistant"){let P=D.message?.content;if(Array.isArray(P))for(let ie of P)ie.type==="text"?y=ie.text:ie.type==="tool_use"&&(Le&&ae.length>0&&(ae[ae.length-1].endMs=Date.now()),Le=ie.name,sn=Date.now(),ae.push({tool:ie.name,startMs:sn}),R.info("Tool call started",{agent:this.agentConfig.id,tool:ie.name}));D.session_id&&(w=D.session_id)}if(D.type==="result"){let P=D;S=P.total_cost_usd,b=P.duration_ms,w=P.session_id;let ie=P.usage;ie&&(C=ie.input_tokens??0,M=ie.output_tokens??0,_=ie.cache_read_input_tokens??0,L=ie.cache_creation_input_tokens??0);let ns=P.modelUsage;if(ns)for(let Ot of Object.values(ns))Ot.contextWindow&&Ot.contextWindow>j&&(j=Ot.contextWindow);P.subtype==="success"?y=P.result||y:(v=P.subtype,"errors"in P&&Array.isArray(P.errors)&&(v=P.errors.join("; ")))}}}catch(G){let D=String(G);y&&S>0?R.warn("Agent process crashed after producing response \u2014 using response anyway",{agent:this.agentConfig.id,error:D,resultPreview:y.slice(0,200),costUsd:S,durationMs:b}):(v=D,R.error("Agent query failed",{agent:this.agentConfig.id,error:D,costUsd:S,durationMs:b}))}finally{clearTimeout(rn),this.activeQuery=null}Le&&ae.length>0&&(ae[ae.length-1].endMs=Date.now());let ut={};for(let G of ae){let D=(G.endMs??Date.now())-G.startMs,P=G.tool.includes("__")?G.tool.split("__")[1]:G.tool;ut[P]||(ut[P]={count:0,totalMs:0}),ut[P].count++,ut[P].totalMs+=D}let Ve=Object.entries(ut).sort((G,D)=>D[1].totalMs-G[1].totalMs).map(([G,D])=>`${G}:${D.count}x/${(D.totalMs/1e3).toFixed(1)}s`).join(", "),Et=ae.reduce((G,D)=>G+((D.endMs??Date.now())-D.startMs),0),Nt=b-Et;return R.info("Agent response complete",{agent:this.agentConfig.id,sessionId:w,costUsd:S,durationMs:b,llmMs:Nt,toolMs:Et,toolCalls:ae.length,toolSummary:Ve||"none",inputTokens:C,outputTokens:M,cacheReadTokens:_,cacheCreationTokens:L,contextWindow:j,compactions:J,preCompactTokens:K,streamed:A,hasError:!!v}),{text:y,sessionId:w,costUsd:S,durationMs:b,llmMs:Nt,toolMs:Et,toolCalls:ae.length,toolSummary:Ve||"none",streamed:A,inputTokens:C,outputTokens:M,cacheReadTokens:_,cacheCreationTokens:L,contextWindow:j,compactions:J,preCompactTokens:K,error:v,aborted:this._aborted}}_aborted=!1;get wasAborted(){return this._aborted}abort(){this.activeQuery&&(R.info("Aborting active query",{agent:this.agentConfig.id}),this._aborted=!0,this.activeQuery.close(),this.activeQuery=null)}}});import{writeFileSync as ma,mkdirSync as t0}from"node:fs";import{join as fr,extname as ga}from"node:path";import{tmpdir as s0}from"node:os";function Qu(n){pa=n}async function Xu(n,e){if(!pa)return null;try{let t=n.toString("base64"),s=await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${Ju}:generateContent?key=${pa}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({contents:[{parts:[{inline_data:{mime_type:e,data:t}},{text:"Describe this image in detail. If it contains text, extract all of it. If it's a diagram, architecture drawing, or technical image, describe all labels, relationships, and structure. If it's a screenshot of messages or a conversation, transcribe everything. Be thorough."}]}]})});if(!s.ok){let o=await s.text();return pe.warn("Gemini vision error",{status:s.status,error:o.slice(0,200)}),null}let i=(await s.json()).candidates?.[0]?.content?.parts?.[0]?.text;return i&&pe.info("Image described via Gemini",{model:Ju,chars:i.length}),i||null}catch(t){return pe.warn("Gemini vision failed",{error:t.message}),null}}async function Zu(n,e,t){let s=ga(e).slice(1).toLowerCase();if(n0.has(s)||t.startsWith("text/"))return{textContent:hr(n.toString("utf-8")),isImage:!1};if(s==="pdf"||t==="application/pdf")try{let r=await import("pdf-parse"),o=await(r.default??r)(n);return{textContent:hr(o.text),isImage:!1}}catch(r){return pe.warn("PDF parse failed",{name:e,error:r.message}),{textContent:"[PDF \u2014 could not extract text]",isImage:!1}}if(s==="docx"||t==="application/vnd.openxmlformats-officedocument.wordprocessingml.document")try{let i=await(await import("mammoth")).extractRawText({buffer:n});return{textContent:hr(i.value),isImage:!1}}catch(r){return pe.warn("DOCX parse failed",{name:e,error:r.message}),{textContent:"[DOCX \u2014 could not extract text]",isImage:!1}}if(s==="xlsx"||s==="xls"||t.includes("spreadsheet"))try{let r=await import("xlsx"),i=r.read(n,{type:"buffer"}),o=i.SheetNames.map(a=>{let l=r.utils.sheet_to_csv(i.Sheets[a]);return`--- Sheet: ${a} ---
172
- ${l}`});return{textContent:hr(o.join(`
171
+ ${l}`:a}}]}]}async send(e,t,s,r,i,o){let a=i??this.agentConfig.model;R.info("Sending prompt to agent",{agent:this.agentConfig.id,model:a,modelOverride:!!i,resumeSession:t??"new",promptLength:e.length,streaming:!!s});let l=this.buildAllServerConfigs(r),c=this.filterCoreServers(l),d=this.buildDelegateAgents(l),u=await this.buildSystemPrompt(Object.keys(c),Object.keys(d)),h=[...this.buildSdkPlugins(),...this.buildNativeSkills()];Object.keys(d).length>0&&R.info("Delegate subagents configured",{agent:this.agentConfig.id,delegates:Object.keys(d)});let p={},g=this.getArchetypeDef();if(g&&this.agentConfig.archetypeConfig)try{p=g.sessionOptions({agentConfig:this.agentConfig,archetypeConfig:this.agentConfig.archetypeConfig,workItemContext:r})}catch(H){R.error("Archetype sessionOptions threw \u2014 ignoring",{agent:this.agentConfig.id,archetype:this.agentConfig.archetype,error:String(H)})}if(typeof p.cwd=="string"){let H=p.cwd,D;try{D=t0(H)}catch(L){let ie=`Archetype cwd unavailable at session start \u2014 refusing to run: ${H} (${String(L)})`;throw R.error(ie,{agent:this.agentConfig.id}),new Error(ie)}if(!D.isDirectory()){let L=`Archetype cwd is not a directory: ${H}`;throw R.error(L,{agent:this.agentConfig.id}),new Error(L)}}let f=e0({prompt:e,options:{model:a,systemPrompt:u,permissionMode:"bypassPermissions",allowDangerouslySkipPermissions:!0,maxTurns:o?.maxTurns??this.agentConfig.maxTurns,maxBudgetUsd:o?.budgetUsd??this.agentConfig.budgetUsd,thinking:{type:"disabled"},...p.cwd?{cwd:p.cwd}:{},settingSources:p.settingSources??[],includePartialMessages:!!s,...t?{resume:t}:{},...Object.keys(c).length>0?{mcpServers:c}:{},...Object.keys(d).length>0?{agents:d}:{},...h.length>0?{plugins:h}:{},hooks:this.buildHooks(r),...this.agentConfig.betas?.length?{betas:this.agentConfig.betas}:{},env:{...process.env,...m.anthropic.apiKey?{ANTHROPIC_API_KEY:m.anthropic.apiKey}:{},CLAUDE_AGENT_SDK_CLIENT_APP:"hive/0.1.0",CLAUDECODE:void 0}}});this.activeQuery=f;let y="",w=t??"",S=0,b=0,A=!1,v;this._aborted=!1;let C=0,M=0,_=0,P=0,U=0,z=0,j,ae=[],tn=null,ts=null,Ve=o?.timeoutMs??this.agentConfig.timeoutMs??3e5,ci=setTimeout(()=>{R.warn("Agent query timed out, aborting",{agent:this.agentConfig.id,timeoutMs:Ve}),this.abort()},Ve);try{for await(let H of f){let D=H;if(D.type==="system"&&D.subtype==="init"&&(w=D.session_id,R.debug("Session initialized",{sessionId:w})),D.type==="system"&&D.subtype==="compact_boundary"){let L=D.compact_metadata;z++,j=L?.pre_tokens,R.info("Context compacted",{agent:this.agentConfig.id,trigger:L?.trigger,preTokens:L?.pre_tokens,compactionNumber:z})}if(D.type==="system"&&D.subtype==="status"&&D.status==="compacting"&&R.info("Compaction in progress",{agent:this.agentConfig.id}),D.type==="stream_event"&&s){let L=D.event;L?.type==="content_block_delta"&&L?.delta?.type==="text_delta"&&(s(L.delta.text),A=!0)}if(D.type==="tool_progress"){let L=D;R.info("Tool in progress",{agent:this.agentConfig.id,tool:L.tool_name,elapsed:L.elapsed_time_seconds})}if(D.type==="assistant"){let L=D.message?.content;if(Array.isArray(L))for(let ie of L)ie.type==="text"?y=ie.text:ie.type==="tool_use"&&(ts&&ae.length>0&&(ae[ae.length-1].endMs=Date.now()),ts=ie.name,tn=Date.now(),ae.push({tool:ie.name,startMs:tn}),R.info("Tool call started",{agent:this.agentConfig.id,tool:ie.name}));D.session_id&&(w=D.session_id)}if(D.type==="result"){let L=D;S=L.total_cost_usd,b=L.duration_ms,w=L.session_id;let ie=L.usage;ie&&(C=ie.input_tokens??0,M=ie.output_tokens??0,_=ie.cache_read_input_tokens??0,P=ie.cache_creation_input_tokens??0);let nn=L.modelUsage;if(nn)for(let Nt of Object.values(nn))Nt.contextWindow&&Nt.contextWindow>U&&(U=Nt.contextWindow);L.subtype==="success"?y=L.result||y:(v=L.subtype,"errors"in L&&Array.isArray(L.errors)&&(v=L.errors.join("; ")))}}}catch(H){let D=String(H);y&&S>0?R.warn("Agent process crashed after producing response \u2014 using response anyway",{agent:this.agentConfig.id,error:D,resultPreview:y.slice(0,200),costUsd:S,durationMs:b}):(v=D,R.error("Agent query failed",{agent:this.agentConfig.id,error:D,costUsd:S,durationMs:b}))}finally{clearTimeout(ci),this.activeQuery=null}ts&&ae.length>0&&(ae[ae.length-1].endMs=Date.now());let Ye={};for(let H of ae){let D=(H.endMs??Date.now())-H.startMs,L=H.tool.includes("__")?H.tool.split("__")[1]:H.tool;Ye[L]||(Ye[L]={count:0,totalMs:0}),Ye[L].count++,Ye[L].totalMs+=D}let sn=Object.entries(Ye).sort((H,D)=>D[1].totalMs-H[1].totalMs).map(([H,D])=>`${H}:${D.count}x/${(D.totalMs/1e3).toFixed(1)}s`).join(", "),Le=ae.reduce((H,D)=>H+((D.endMs??Date.now())-D.startMs),0),ss=b-Le;return R.info("Agent response complete",{agent:this.agentConfig.id,sessionId:w,costUsd:S,durationMs:b,llmMs:ss,toolMs:Le,toolCalls:ae.length,toolSummary:sn||"none",inputTokens:C,outputTokens:M,cacheReadTokens:_,cacheCreationTokens:P,contextWindow:U,compactions:z,preCompactTokens:j,streamed:A,hasError:!!v}),{text:y,sessionId:w,costUsd:S,durationMs:b,llmMs:ss,toolMs:Le,toolCalls:ae.length,toolSummary:sn||"none",streamed:A,inputTokens:C,outputTokens:M,cacheReadTokens:_,cacheCreationTokens:P,contextWindow:U,compactions:z,preCompactTokens:j,error:v,aborted:this._aborted}}_aborted=!1;get wasAborted(){return this._aborted}abort(){this.activeQuery&&(R.info("Aborting active query",{agent:this.agentConfig.id}),this._aborted=!0,this.activeQuery.close(),this.activeQuery=null)}}});import{writeFileSync as ga,mkdirSync as o0}from"node:fs";import{join as hr,extname as ya}from"node:path";import{tmpdir as a0}from"node:os";function Zu(n){ma=n}async function eh(n,e){if(!ma)return null;try{let t=n.toString("base64"),s=await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${Qu}:generateContent?key=${ma}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({contents:[{parts:[{inline_data:{mime_type:e,data:t}},{text:"Describe this image in detail. If it contains text, extract all of it. If it's a diagram, architecture drawing, or technical image, describe all labels, relationships, and structure. If it's a screenshot of messages or a conversation, transcribe everything. Be thorough."}]}]})});if(!s.ok){let o=await s.text();return pe.warn("Gemini vision error",{status:s.status,error:o.slice(0,200)}),null}let i=(await s.json()).candidates?.[0]?.content?.parts?.[0]?.text;return i&&pe.info("Image described via Gemini",{model:Qu,chars:i.length}),i||null}catch(t){return pe.warn("Gemini vision failed",{error:t.message}),null}}async function th(n,e,t){let s=ya(e).slice(1).toLowerCase();if(c0.has(s)||t.startsWith("text/"))return{textContent:ur(n.toString("utf-8")),isImage:!1};if(s==="pdf"||t==="application/pdf")try{let r=await import("pdf-parse"),o=await(r.default??r)(n);return{textContent:ur(o.text),isImage:!1}}catch(r){return pe.warn("PDF parse failed",{name:e,error:r.message}),{textContent:"[PDF \u2014 could not extract text]",isImage:!1}}if(s==="docx"||t==="application/vnd.openxmlformats-officedocument.wordprocessingml.document")try{let i=await(await import("mammoth")).extractRawText({buffer:n});return{textContent:ur(i.value),isImage:!1}}catch(r){return pe.warn("DOCX parse failed",{name:e,error:r.message}),{textContent:"[DOCX \u2014 could not extract text]",isImage:!1}}if(s==="xlsx"||s==="xls"||t.includes("spreadsheet"))try{let r=await import("xlsx"),i=r.read(n,{type:"buffer"}),o=i.SheetNames.map(a=>{let l=r.utils.sheet_to_csv(i.Sheets[a]);return`--- Sheet: ${a} ---
172
+ ${l}`});return{textContent:ur(o.join(`
173
173
 
174
- `)),isImage:!1}}catch(r){return pe.warn("XLSX parse failed",{name:e,error:r.message}),{textContent:"[Spreadsheet \u2014 could not extract content]",isImage:!1}}return null}async function eh(n,e){let t=n.url_private_download||n.url_private;if(!t)return pe.warn("No download URL for file",{id:n.id,name:n.name}),null;try{pe.info("Downloading file",{id:n.id,url:t.slice(0,80),mimetype:n.mimetype});let s=await fetch(t,{headers:{Authorization:`Bearer ${e}`},redirect:"manual"});if(s.status===302||s.status===301){let d=s.headers.get("location");d&&(pe.info("Following redirect",{id:n.id}),s=await fetch(d))}if(!s.ok)return pe.error("Failed to download file",{id:n.id,status:s.status}),null;let r=Buffer.from(await s.arrayBuffer());if(r.length<100&&r.length>0){let d=r.toString("utf-8").trim();if(d.includes("requested")&&d.includes("file")&&d.includes("not found"))return pe.error("Slack file error response",{id:n.id,name:n.name,errorText:d,bufferSize:r.length}),null}let i=n.name.replace(/[^a-zA-Z0-9._-]/g,"_"),o=fr(pr,`${n.id}-${i}`);ma(o,r);let a=ga(n.name).slice(1).toLowerCase();if(zu.has(a)||n.mimetype.startsWith("image/")){let d=await Xu(r,n.mimetype);return{name:n.name,mimetype:n.mimetype,size:n.size,localPath:o,textContent:d??"[Image \u2014 could not extract description]",isImage:!0}}let c=await Zu(r,n.name,n.mimetype);return c?{name:n.name,mimetype:n.mimetype,size:n.size,localPath:o,...c}:(pe.info("Unsupported file type",{name:n.name,ext:a,mimetype:n.mimetype}),{name:n.name,mimetype:n.mimetype,size:n.size,localPath:o,textContent:null,isImage:!1})}catch(s){return pe.error("File processing failed",{id:n.id,name:n.name,error:s.message}),null}}async function qs(n,e,t){let s=e.replace(/[^a-zA-Z0-9._-]/g,"_"),r=fr(pr,`ws-${Date.now()}-${s}`);ma(r,n);let i=await Xu(n,t);return{name:e,mimetype:t,size:n.length,localPath:r,textContent:i??"[Image \u2014 could not extract description]",isImage:!0}}async function th(n,e,t){let s=e.replace(/[^a-zA-Z0-9._-]/g,"_"),r=fr(pr,`team-${Date.now()}-${s}`);ma(r,n);let i=ga(e).slice(1).toLowerCase();if(zu.has(i)||t.startsWith("image/"))return qs(n,e,t);let a=await Zu(n,e,t);return a?{name:e,mimetype:t,size:n.length,localPath:r,...a}:{name:e,mimetype:t,size:n.length,localPath:r,textContent:null,isImage:!1}}function sh(n){return n.length===0?"":`
174
+ `)),isImage:!1}}catch(r){return pe.warn("XLSX parse failed",{name:e,error:r.message}),{textContent:"[Spreadsheet \u2014 could not extract content]",isImage:!1}}return null}async function sh(n,e){let t=n.url_private_download||n.url_private;if(!t)return pe.warn("No download URL for file",{id:n.id,name:n.name}),null;try{pe.info("Downloading file",{id:n.id,url:t.slice(0,80),mimetype:n.mimetype});let s=await fetch(t,{headers:{Authorization:`Bearer ${e}`},redirect:"manual"});if(s.status===302||s.status===301){let d=s.headers.get("location");d&&(pe.info("Following redirect",{id:n.id}),s=await fetch(d))}if(!s.ok)return pe.error("Failed to download file",{id:n.id,status:s.status}),null;let r=Buffer.from(await s.arrayBuffer());if(r.length<100&&r.length>0){let d=r.toString("utf-8").trim();if(d.includes("requested")&&d.includes("file")&&d.includes("not found"))return pe.error("Slack file error response",{id:n.id,name:n.name,errorText:d,bufferSize:r.length}),null}let i=n.name.replace(/[^a-zA-Z0-9._-]/g,"_"),o=hr(fr,`${n.id}-${i}`);ga(o,r);let a=ya(n.name).slice(1).toLowerCase();if(Xu.has(a)||n.mimetype.startsWith("image/")){let d=await eh(r,n.mimetype);return{name:n.name,mimetype:n.mimetype,size:n.size,localPath:o,textContent:d??"[Image \u2014 could not extract description]",isImage:!0}}let c=await th(r,n.name,n.mimetype);return c?{name:n.name,mimetype:n.mimetype,size:n.size,localPath:o,...c}:(pe.info("Unsupported file type",{name:n.name,ext:a,mimetype:n.mimetype}),{name:n.name,mimetype:n.mimetype,size:n.size,localPath:o,textContent:null,isImage:!1})}catch(s){return pe.error("File processing failed",{id:n.id,name:n.name,error:s.message}),null}}async function Us(n,e,t){let s=e.replace(/[^a-zA-Z0-9._-]/g,"_"),r=hr(fr,`ws-${Date.now()}-${s}`);ga(r,n);let i=await eh(n,t);return{name:e,mimetype:t,size:n.length,localPath:r,textContent:i??"[Image \u2014 could not extract description]",isImage:!0}}async function nh(n,e,t){let s=e.replace(/[^a-zA-Z0-9._-]/g,"_"),r=hr(fr,`team-${Date.now()}-${s}`);ga(r,n);let i=ya(e).slice(1).toLowerCase();if(Xu.has(i)||t.startsWith("image/"))return Us(n,e,t);let a=await th(n,e,t);return a?{name:e,mimetype:t,size:n.length,localPath:r,...a}:{name:e,mimetype:t,size:n.length,localPath:r,textContent:null,isImage:!1}}function rh(n){return n.length===0?"":`
175
175
 
176
- `+n.map(t=>{let s=`\u{1F4CE} File: ${t.name} (${nh(t.size)}, ${t.mimetype})`;return t.isImage?t.textContent?`${s}
176
+ `+n.map(t=>{let s=`\u{1F4CE} File: ${t.name} (${ih(t.size)}, ${t.mimetype})`;return t.isImage?t.textContent?`${s}
177
177
  --- image description ---
178
178
  ${t.textContent}
179
179
  --- end image description ---`:`${s}
@@ -184,15 +184,15 @@ ${t.textContent}
184
184
  Saved at: ${t.localPath}
185
185
  (Content could not be extracted \u2014 file available for download)`}).join(`
186
186
 
187
- `)}function nh(n){return n<1024?`${n} B`:n<1024*1024?`${(n/1024).toFixed(1)} KB`:`${(n/(1024*1024)).toFixed(1)} MB`}function hr(n,e=5e4){return n.length<=e?n:n.slice(0,e)+`
187
+ `)}function ih(n){return n<1024?`${n} B`:n<1024*1024?`${(n/1024).toFixed(1)} KB`:`${(n/(1024*1024)).toFixed(1)} MB`}function ur(n,e=5e4){return n.length<=e?n:n.slice(0,e)+`
188
188
 
189
- [... truncated at ${nh(e)} \u2014 full file at local path]`}var pe,pr,zu,pa,Ju,n0,js=q(()=>{"use strict";O();pe=I("file-processor"),pr=fr(s0(),"hive-slack-files");t0(pr,{recursive:!0});zu=new Set(["png","jpg","jpeg","gif","webp","bmp","heic"]),pa="",Ju=process.env.GEMINI_VISION_MODEL||"gemini-2.5-flash";n0=new Set(["csv","tsv","txt","text","md","markdown","json","xml","html","yaml","yml","log"])});import{readFileSync as l0}from"node:fs";import{resolve as ih}from"node:path";function u0(){let n=[ih(import.meta.dirname,"..","..","package.json"),ih(import.meta.dirname,"..","package.json")];for(let e of n)try{let t=JSON.parse(l0(e,"utf-8"));if(t?.name==="@keepur/hive"&&typeof t.hiveApi=="string")return t.hiveApi}catch{continue}return null}var d0,oh,ya,ah=q(()=>{"use strict";O();d0=I("api-version");oh=u0();oh||d0.warn("Could not read hiveApi from package.json; falling back to 1.0.0");ya=oh??"1.0.0"});var uh={};Pe(uh,{isHiveApiCompatible:()=>lh,loadPlugins:()=>Sa,normalizeManifest:()=>dh,registerPluginCommands:()=>f0});import{readFileSync as h0,existsSync as yr}from"node:fs";import{resolve as wa,join as Ks}from"node:path";function Sa(n,e){let t=[];for(let s of n){let r=wa(e,"plugins","node_modules",s),i=wa(e,"plugins",s),o=Ks(r,"plugin.yaml"),a=Ks(i,"plugin.yaml"),l;if(yr(o))l=r;else if(yr(a))l=i;else{ct.warn("Plugin manifest not found, skipping",{plugin:s,tried:[o,a]});continue}let c=Ks(l,"plugin.yaml"),d=(0,ch.parse)(h0(c,"utf-8")),u=dh(d);if(u.hiveApi&&!lh(u.hiveApi,ya)){ct.warn("Plugin declares incompatible hiveApi range, skipping",{plugin:s,requires:u.hiveApi,running:ya});continue}for(let[h,p]of Object.entries(u.mcpServers)){let g=Ks(l,p.entry);yr(g)||ct.warn("Plugin MCP server entry not found",{plugin:s,server:h,entry:g})}for(let h of u.agentSeeds){let p=Ks(l,"agent-seeds",h);yr(p)||ct.warn("Plugin agent seed not found",{plugin:s,seed:h,path:p})}t.push({name:s,dir:l,manifest:u}),ct.info("Plugin loaded",{plugin:s,mcpServers:Object.keys(u.mcpServers),seeds:u.agentSeeds})}return t}function lh(n,e){let t=n.trim();if(t===e)return!0;if(t.startsWith("^")){let s=t.slice(1).split(".").map(Number),r=e.split(".").map(Number);return!(s.length<1||r.length<1||s[0]!==r[0]||(r[1]??0)<(s[1]??0)||(r[1]??0)===(s[1]??0)&&(r[2]??0)<(s[2]??0))}return ct.warn("Unrecognized hiveApi range syntax, accepting",{range:n}),!0}function dh(n){return{name:n.name??"",description:n.description??"",hiveApi:n.hiveApi??n["hive-api"]??void 0,mcpServers:Object.fromEntries(Object.entries(n["mcp-servers"]??{}).map(([e,t])=>[e,{entry:t.entry,description:t.description,usage:t.usage,notFor:t["not-for"],env:t.env??[],envMap:t["env-map"]??{},agentEnv:t["agent-env"]??{}}])),agentSeeds:n["agent-seeds"]??n["agents-templates"]??[],registerCommands:n["register-commands"]??void 0}}async function f0(n,e){for(let t of n)if(t.manifest.registerCommands)try{let r=await import(wa(t.dir,"dist",t.manifest.registerCommands));typeof r.registerCommands=="function"&&(r.registerCommands(e),ct.info("Plugin commands registered",{plugin:t.name}))}catch(s){ct.warn("Failed to load plugin commands",{plugin:t.name,error:String(s)})}}var ch,ct,ba=q(()=>{"use strict";ch=ve(ea(),1);O();ah();ct=I("plugin-loader")});async function qe(n,e){let t=await fetch(`${n}/api/embed`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:p0,input:e})});if(!t.ok)throw new Error(`Ollama embed ${t.status}: ${await t.text()}`);return(await t.json()).embeddings[0]}var p0,wr=q(()=>{"use strict";p0=process.env.KB_EMBED_MODEL??"bge-large"});var va,BC,Lh=q(()=>{"use strict";va="code_index",BC=Buffer.from("6ba7b8109dad11d180b400c04fd430c8","hex")});var Ph={};Pe(Ph,{CodeIndexPrefetcher:()=>Ta});import{QdrantClient as Ob}from"@qdrant/js-client-rest";import{MongoClient as xb}from"mongodb";var Ta,$h=q(()=>{"use strict";wr();Lh();Ta=class{options;mongo;qdrant;connected=!1;scoreThreshold;prefetchLimit;constructor(e){this.options=e,this.scoreThreshold=e.scoreThreshold??.65,this.prefetchLimit=e.prefetchLimit??8}async ensureConnected(){this.connected||(this.mongo=new xb(this.options.mongoUri),await this.mongo.connect(),this.qdrant=new Ob({url:this.options.qdrantUrl}),this.connected=!0)}async getContext(e,t){try{await this.ensureConnected()}catch{return""}let s=[],r;try{r=await qe(this.options.ollamaUrl,e)}catch{return""}try{let o=(await this.qdrant.search(va,{vector:r,limit:this.prefetchLimit,with_payload:!0})).filter(a=>a.score>=this.scoreThreshold);if(o.length>0){let a=o.map(l=>{let c=l.payload;return`- **${c.repo}:${c.filePath}** \u2014 ${c.summary} (${c.role})`});s.push(`**Relevant files:**
189
+ [... truncated at ${ih(e)} \u2014 full file at local path]`}var pe,fr,Xu,ma,Qu,c0,qs=F(()=>{"use strict";O();pe=T("file-processor"),fr=hr(a0(),"hive-slack-files");o0(fr,{recursive:!0});Xu=new Set(["png","jpg","jpeg","gif","webp","bmp","heic"]),ma="",Qu=process.env.GEMINI_VISION_MODEL||"gemini-2.5-flash";c0=new Set(["csv","tsv","txt","text","md","markdown","json","xml","html","yaml","yml","log"])});import{readFileSync as p0}from"node:fs";import{resolve as ah}from"node:path";function g0(){let n=[ah(import.meta.dirname,"..","..","package.json"),ah(import.meta.dirname,"..","package.json")];for(let e of n)try{let t=JSON.parse(p0(e,"utf-8"));if(t?.name==="@keepur/hive"&&typeof t.hiveApi=="string")return t.hiveApi}catch{continue}return null}var m0,ch,wa,lh=F(()=>{"use strict";O();m0=T("api-version");ch=g0();ch||m0.warn("Could not read hiveApi from package.json; falling back to 1.0.0");wa=ch??"1.0.0"});var fh={};Pe(fh,{isHiveApiCompatible:()=>uh,loadPlugins:()=>ba,normalizeManifest:()=>hh,registerPluginCommands:()=>w0});import{readFileSync as y0,existsSync as gr}from"node:fs";import{resolve as Sa,join as Fs}from"node:path";function ba(n,e){let t=[];for(let s of n){let r=Sa(e,"plugins","node_modules",s),i=Sa(e,"plugins",s),o=Fs(r,"plugin.yaml"),a=Fs(i,"plugin.yaml"),l;if(gr(o))l=r;else if(gr(a))l=i;else{lt.warn("Plugin manifest not found, skipping",{plugin:s,tried:[o,a]});continue}let c=Fs(l,"plugin.yaml"),d=(0,dh.parse)(y0(c,"utf-8")),u=hh(d);if(u.hiveApi&&!uh(u.hiveApi,wa)){lt.warn("Plugin declares incompatible hiveApi range, skipping",{plugin:s,requires:u.hiveApi,running:wa});continue}for(let[h,p]of Object.entries(u.mcpServers)){let g=Fs(l,p.entry);gr(g)||lt.warn("Plugin MCP server entry not found",{plugin:s,server:h,entry:g})}for(let h of u.agentSeeds){let p=Fs(l,"agent-seeds",h);gr(p)||lt.warn("Plugin agent seed not found",{plugin:s,seed:h,path:p})}t.push({name:s,dir:l,manifest:u}),lt.info("Plugin loaded",{plugin:s,mcpServers:Object.keys(u.mcpServers),seeds:u.agentSeeds})}return t}function uh(n,e){let t=n.trim();if(t===e)return!0;if(t.startsWith("^")){let s=t.slice(1).split(".").map(Number),r=e.split(".").map(Number);return!(s.length<1||r.length<1||s[0]!==r[0]||(r[1]??0)<(s[1]??0)||(r[1]??0)===(s[1]??0)&&(r[2]??0)<(s[2]??0))}return lt.warn("Unrecognized hiveApi range syntax, accepting",{range:n}),!0}function hh(n){return{name:n.name??"",description:n.description??"",hiveApi:n.hiveApi??n["hive-api"]??void 0,mcpServers:Object.fromEntries(Object.entries(n["mcp-servers"]??{}).map(([e,t])=>[e,{entry:t.entry,description:t.description,usage:t.usage,notFor:t["not-for"],env:t.env??[],envMap:t["env-map"]??{},agentEnv:t["agent-env"]??{}}])),agentSeeds:n["agent-seeds"]??n["agents-templates"]??[],registerCommands:n["register-commands"]??void 0}}async function w0(n,e){for(let t of n)if(t.manifest.registerCommands)try{let r=await import(Sa(t.dir,"dist",t.manifest.registerCommands));typeof r.registerCommands=="function"&&(r.registerCommands(e),lt.info("Plugin commands registered",{plugin:t.name}))}catch(s){lt.warn("Failed to load plugin commands",{plugin:t.name,error:String(s)})}}var dh,lt,_a=F(()=>{"use strict";dh=ve(ta(),1);O();lh();lt=T("plugin-loader")});async function qe(n,e){let t=await fetch(`${n}/api/embed`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:S0,input:e})});if(!t.ok)throw new Error(`Ollama embed ${t.status}: ${await t.text()}`);return(await t.json()).embeddings[0]}var S0,yr=F(()=>{"use strict";S0=process.env.KB_EMBED_MODEL??"bge-large"});var Ta,HC,Uh=F(()=>{"use strict";Ta="code_index",HC=Buffer.from("6ba7b8109dad11d180b400c04fd430c8","hex")});var qh={};Pe(qh,{CodeIndexPrefetcher:()=>Ia});import{QdrantClient as Pb}from"@qdrant/js-client-rest";import{MongoClient as $b}from"mongodb";var Ia,jh=F(()=>{"use strict";yr();Uh();Ia=class{options;mongo;qdrant;connected=!1;scoreThreshold;prefetchLimit;constructor(e){this.options=e,this.scoreThreshold=e.scoreThreshold??.65,this.prefetchLimit=e.prefetchLimit??8}async ensureConnected(){this.connected||(this.mongo=new $b(this.options.mongoUri),await this.mongo.connect(),this.qdrant=new Pb({url:this.options.qdrantUrl}),this.connected=!0)}async getContext(e,t){try{await this.ensureConnected()}catch{return""}let s=[],r;try{r=await qe(this.options.ollamaUrl,e)}catch{return""}try{let o=(await this.qdrant.search(Ta,{vector:r,limit:this.prefetchLimit,with_payload:!0})).filter(a=>a.score>=this.scoreThreshold);if(o.length>0){let a=o.map(l=>{let c=l.payload;return`- **${c.repo}:${c.filePath}** \u2014 ${c.summary} (${c.role})`});s.push(`**Relevant files:**
190
190
  `+a.join(`
191
191
  `))}}catch{}if(t)try{let o=(await this.qdrant.search("agent_memory",{vector:r,limit:15,with_payload:!0,filter:{must:[{key:"agentId",match:{value:t}}]}})).filter(a=>a.score>=this.scoreThreshold).filter(a=>typeof a.payload?.topic=="string"&&a.payload.topic.startsWith("code:"));if(o.length>0){let a=o.map(l=>l.payload?.mongoId).filter(Boolean);if(a.length>0){let l=this.mongo.db(this.options.dbName).collection("agent_memory"),{ObjectId:c}=await import("mongodb"),d=await l.find({_id:{$in:a.map(u=>new c(u))}}).toArray();if(d.length>0){let u=d.map(h=>`- ${String(h.topic??"").replace(/^code:/,"")}: ${String(h.content??"")}`);s.push(`**Previous session insights:**
192
192
  `+u.join(`
193
193
  `))}}}}catch{}return s.length===0?"":["## Codebase Context (auto-retrieved)",...s,"","_Results may be stale \u2014 verify by reading files._"].join(`
194
- `)}extractFilePaths(e){let t=/(?:^|\s|`|"|')((src|plugins|dist|docs|scripts|setup|skills|service|agents-templates|test)\/.{1,200}\.(ts|tsx|js|jsx|json|yaml|yml|md))\b/gm,s=new Set,r;for(;(r=t.exec(e))!==null;)s.add(r[1]);return[...s]}async getCompactionContext(e,t){try{await this.ensureConnected()}catch{return""}let s=[],r=[],i=new Set;try{let c=this.extractFilePaths(e);if(c.length>0){let u=await this.mongo.db(this.options.dbName).collection("code_index").find({filePath:{$in:c}}).project({repo:1,filePath:1,summary:1,role:1}).toArray();for(let h of u){let p=`${h.repo}:${h.filePath}`;i.has(p)||(i.add(p),s.push(`- ${p} \u2014 ${h.summary} [${h.role}]`))}}}catch{}try{let c=e.slice(-2e3),d=await qe(this.options.ollamaUrl,c),u=await this.qdrant.search(va,{vector:d,limit:this.prefetchLimit,with_payload:!0});for(let h of u){if(h.score<this.scoreThreshold)continue;let p=h.payload,g=`${p.repo}:${p.filePath}`;i.has(g)||(i.add(g),s.push(`- ${g} \u2014 ${p.summary} [${p.role}]`))}if(t){let p=(await this.qdrant.search("agent_memory",{vector:d,limit:10,with_payload:!0,filter:{must:[{key:"agentId",match:{value:t}}]}})).filter(g=>g.score>=this.scoreThreshold).filter(g=>typeof g.payload?.topic=="string"&&g.payload.topic.startsWith("code:"));if(p.length>0){let g=p.map(f=>f.payload?.mongoId).filter(Boolean);if(g.length>0){let{ObjectId:f}=await import("mongodb"),w=await this.mongo.db(this.options.dbName).collection("agent_memory").find({_id:{$in:g.map(S=>new f(S))}}).toArray();for(let S of w){let b=String(S.topic??"").replace(/^code:/,""),A=String(S.content??"");r.push(`- ${b}: ${A}`)}}}}}catch{}if(s.length===0&&r.length===0)return"";let o=s.slice(0,10),a=[];o.length>0&&a.push("Files actively referenced in this conversation:",...o,"Preserve references to these files and any decisions made about them.");let l=r.slice(0,10);return l.length>0&&a.push("","Code insights from prior sessions:",...l,"Preserve these insights if relevant to the conversation."),a.join(`
195
- `)}async close(){this.connected&&await this.mongo.close()}}});var Rh={};Pe(Rh,{KnowledgeExtractor:()=>Ia});import Mb from"@anthropic-ai/sdk";var Db,Ia,Bh=q(()=>{"use strict";O();Db=I("knowledge-extractor"),Ia=class{memoryStore;memoryEmbedder;anthropic;constructor(e,t){this.memoryStore=e,this.memoryEmbedder=t,this.anthropic=new Mb}async extract(e,t){if(!t?.result)return 0;let s=t.result.length>3e4?t.result.slice(0,3e4)+`
194
+ `)}extractFilePaths(e){let t=/(?:^|\s|`|"|')((src|plugins|dist|docs|scripts|setup|skills|service|agents-templates|test)\/.{1,200}\.(ts|tsx|js|jsx|json|yaml|yml|md))\b/gm,s=new Set,r;for(;(r=t.exec(e))!==null;)s.add(r[1]);return[...s]}async getCompactionContext(e,t){try{await this.ensureConnected()}catch{return""}let s=[],r=[],i=new Set;try{let c=this.extractFilePaths(e);if(c.length>0){let u=await this.mongo.db(this.options.dbName).collection("code_index").find({filePath:{$in:c}}).project({repo:1,filePath:1,summary:1,role:1}).toArray();for(let h of u){let p=`${h.repo}:${h.filePath}`;i.has(p)||(i.add(p),s.push(`- ${p} \u2014 ${h.summary} [${h.role}]`))}}}catch{}try{let c=e.slice(-2e3),d=await qe(this.options.ollamaUrl,c),u=await this.qdrant.search(Ta,{vector:d,limit:this.prefetchLimit,with_payload:!0});for(let h of u){if(h.score<this.scoreThreshold)continue;let p=h.payload,g=`${p.repo}:${p.filePath}`;i.has(g)||(i.add(g),s.push(`- ${g} \u2014 ${p.summary} [${p.role}]`))}if(t){let p=(await this.qdrant.search("agent_memory",{vector:d,limit:10,with_payload:!0,filter:{must:[{key:"agentId",match:{value:t}}]}})).filter(g=>g.score>=this.scoreThreshold).filter(g=>typeof g.payload?.topic=="string"&&g.payload.topic.startsWith("code:"));if(p.length>0){let g=p.map(f=>f.payload?.mongoId).filter(Boolean);if(g.length>0){let{ObjectId:f}=await import("mongodb"),w=await this.mongo.db(this.options.dbName).collection("agent_memory").find({_id:{$in:g.map(S=>new f(S))}}).toArray();for(let S of w){let b=String(S.topic??"").replace(/^code:/,""),A=String(S.content??"");r.push(`- ${b}: ${A}`)}}}}}catch{}if(s.length===0&&r.length===0)return"";let o=s.slice(0,10),a=[];o.length>0&&a.push("Files actively referenced in this conversation:",...o,"Preserve references to these files and any decisions made about them.");let l=r.slice(0,10);return l.length>0&&a.push("","Code insights from prior sessions:",...l,"Preserve these insights if relevant to the conversation."),a.join(`
195
+ `)}async close(){this.connected&&await this.mongo.close()}}});var Fh={};Pe(Fh,{KnowledgeExtractor:()=>Aa});import Rb from"@anthropic-ai/sdk";var Bb,Aa,Kh=F(()=>{"use strict";O();Bb=T("knowledge-extractor"),Aa=class{memoryStore;memoryEmbedder;anthropic;constructor(e,t){this.memoryStore=e,this.memoryEmbedder=t,this.anthropic=new Rb}async extract(e,t){if(!t?.result)return 0;let s=t.result.length>3e4?t.result.slice(0,3e4)+`
196
196
  [...truncated]`:t.result,r=await this.anthropic.messages.create({model:"claude-haiku-4-5-20251001",max_tokens:4096,messages:[{role:"user",content:`Extract code insights from this completed coding session. For each source file the session read or modified, note:
197
197
  - filePath: the relative file path
198
198
  - repo: which repository this file belongs to, inferred from the working directory or file paths
@@ -202,23 +202,23 @@ ${t.textContent}
202
202
  Return a JSON array. Only include files where the session gained meaningful understanding \u2014 skip trivial reads (package.json, tsconfig, etc). Only JSON, no other text.
203
203
 
204
204
  Session output:
205
- ${s}`}]}),o=(r.content[0].type==="text"?r.content[0].text:"").match(/\[[\s\S]*\]/);if(!o)return 0;let a;try{a=JSON.parse(o[0])}catch{return 0}let l=0;for(let c of a){if(!c.filePath||!c.insight)continue;let d=`code:${c.repo??"unknown"}:${c.filePath}`;try{let u=this.memoryStore.getCollection(),h=await u.find({agentId:e,topic:d,pinned:{$ne:!0}}).toArray();for(let y of h)y.qdrantPointId&&await this.memoryEmbedder.remove(y.qdrantPointId).catch(()=>{});h.length>0&&await u.deleteMany({_id:{$in:h.map(y=>y._id)}});let p={content:c.insight,type:"fact",topic:d,importance:c.wasModified?"high":"medium"},g=crypto.randomUUID(),f=await this.memoryStore.save(e,p,g);await this.memoryEmbedder.upsert(g,c.insight,{agentId:e,mongoId:f._id.toString(),type:"fact",topic:d,tier:"hot",importance:p.importance,createdAt:Date.now()}),l++}catch(u){Db.error("Failed to save insight",{topic:d,error:String(u)})}}return l}}});function Uh(n,e){let t=[n,e].sort();return`dm:${t[0]}:${t[1]}`}var qh=q(()=>{"use strict"});var jh={};Pe(jh,{TeamStore:()=>Ca});import{MongoClient as Lb,ObjectId as Pb}from"mongodb";var Aa,Ca,Fh=q(()=>{"use strict";O();qh();Aa=I("team-store"),Ca=class{uri;dbName;client;db;channels;messages;constructor(e,t){this.uri=e,this.dbName=t,this.client=new Lb(e)}async connect(){await this.client.connect(),this.db=this.client.db(this.dbName),this.channels=this.db.collection("team_channels"),this.messages=this.db.collection("team_messages"),await this.channels.createIndex({type:1}),await this.channels.createIndex({members:1}),await this.messages.createIndex({channelId:1,createdAt:-1}),await this.messages.createIndex({threadId:1}),await this.messages.createIndex({createdAt:-1}),Aa.info("Team store connected",{db:this.dbName})}async close(){await this.client.close()}async getChannel(e){return this.channels.findOne({_id:e,archived:{$ne:!0}})}async listChannels(e){let t={archived:{$ne:!0}};return e&&(t.members=e),this.channels.find(t).sort({updatedAt:-1}).toArray()}async createChannel(e){return await this.channels.insertOne(e),Aa.info("Channel created",{id:e._id,type:e.type}),e}async getOrCreateDm(e,t,s){let r=Uh(e,t),i=await this.channels.findOne({_id:r});if(i)return i;let o={_id:r,type:"dm",name:s?`DM with ${s}`:`DM: ${e} & ${t}`,members:[e,t].sort(),createdBy:e,createdAt:new Date,updatedAt:new Date,archived:!1};return await this.channels.insertOne(o),Aa.info("DM created",{id:r,members:o.members}),o}async joinChannel(e,t){return(await this.channels.updateOne({_id:e,archived:{$ne:!0}},{$addToSet:{members:t},$set:{updatedAt:new Date}})).modifiedCount>0}async leaveChannel(e,t){return(await this.channels.updateOne({_id:e},{$pull:{members:t},$set:{updatedAt:new Date}})).modifiedCount>0}async archiveChannel(e){return(await this.channels.updateOne({_id:e},{$set:{archived:!0,updatedAt:new Date}})).modifiedCount>0}async renameChannel(e,t){return(await this.channels.updateOne({_id:e},{$set:{name:t,updatedAt:new Date}})).modifiedCount>0}async saveMessage(e){let t={...e,_id:new Pb().toHexString()};return await this.messages.insertOne(t),await this.channels.updateOne({_id:e.channelId},{$set:{updatedAt:new Date}}),t}async getHistory(e,t){let s=Math.min(t?.limit??50,100),r={channelId:e};t?.before&&(r._id={$lt:t.before}),t?.threadId&&(r.threadId=t.threadId);let i=await this.messages.find(r).sort({createdAt:-1}).limit(s+1).toArray(),o=i.length>s;return o&&i.pop(),{messages:i.reverse(),hasMore:o}}}});var Kh={};Pe(Kh,{CommandRegistry:()=>Na});var Ea,Na,Gh=q(()=>{"use strict";O();Ea=I("command-registry"),Na=class{teamStore;resolveAgent;commands=new Map;constructor(e,t){this.teamStore=e,this.resolveAgent=t,this.registerCoreCommands()}register(e){this.commands.has(e.def.name)&&Ea.warn("Command already registered, overwriting",{name:e.def.name}),this.commands.set(e.def.name,e),Ea.info("Command registered",{name:e.def.name,source:e.def.source})}get(e){return this.commands.get(e)}has(e){return this.commands.has(e)}list(){return[...this.commands.values()].map(e=>e.def)}async execute(e,t){let s=this.commands.get(e);if(!s)return{found:!1};try{return{found:!0,result:await s.execute(t)}}catch(r){return Ea.error("Command execution failed",{name:e,error:String(r)}),{found:!0,result:`Command failed: ${String(r)}`}}}registerCoreCommands(){this.register({def:{name:"help",source:"core",description:"List available commands"},execute:async()=>`Available commands:
205
+ ${s}`}]}),o=(r.content[0].type==="text"?r.content[0].text:"").match(/\[[\s\S]*\]/);if(!o)return 0;let a;try{a=JSON.parse(o[0])}catch{return 0}let l=0;for(let c of a){if(!c.filePath||!c.insight)continue;let d=`code:${c.repo??"unknown"}:${c.filePath}`;try{let u=this.memoryStore.getCollection(),h=await u.find({agentId:e,topic:d,pinned:{$ne:!0}}).toArray();for(let y of h)y.qdrantPointId&&await this.memoryEmbedder.remove(y.qdrantPointId).catch(()=>{});h.length>0&&await u.deleteMany({_id:{$in:h.map(y=>y._id)}});let p={content:c.insight,type:"fact",topic:d,importance:c.wasModified?"high":"medium"},g=crypto.randomUUID(),f=await this.memoryStore.save(e,p,g);await this.memoryEmbedder.upsert(g,c.insight,{agentId:e,mongoId:f._id.toString(),type:"fact",topic:d,tier:"hot",importance:p.importance,createdAt:Date.now()}),l++}catch(u){Bb.error("Failed to save insight",{topic:d,error:String(u)})}}return l}}});function Gh(n,e){let t=[n,e].sort();return`dm:${t[0]}:${t[1]}`}var Hh=F(()=>{"use strict"});var Wh={};Pe(Wh,{TeamStore:()=>Ea});import{MongoClient as Ub,ObjectId as qb}from"mongodb";var Ca,Ea,Vh=F(()=>{"use strict";O();Hh();Ca=T("team-store"),Ea=class{uri;dbName;client;db;channels;messages;constructor(e,t){this.uri=e,this.dbName=t,this.client=new Ub(e)}async connect(){await this.client.connect(),this.db=this.client.db(this.dbName),this.channels=this.db.collection("team_channels"),this.messages=this.db.collection("team_messages"),await this.channels.createIndex({type:1}),await this.channels.createIndex({members:1}),await this.messages.createIndex({channelId:1,createdAt:-1}),await this.messages.createIndex({threadId:1}),await this.messages.createIndex({createdAt:-1}),Ca.info("Team store connected",{db:this.dbName})}async close(){await this.client.close()}async getChannel(e){return this.channels.findOne({_id:e,archived:{$ne:!0}})}async listChannels(e){let t={archived:{$ne:!0}};return e&&(t.members=e),this.channels.find(t).sort({updatedAt:-1}).toArray()}async createChannel(e){return await this.channels.insertOne(e),Ca.info("Channel created",{id:e._id,type:e.type}),e}async getOrCreateDm(e,t,s){let r=Gh(e,t),i=await this.channels.findOne({_id:r});if(i)return i;let o={_id:r,type:"dm",name:s?`DM with ${s}`:`DM: ${e} & ${t}`,members:[e,t].sort(),createdBy:e,createdAt:new Date,updatedAt:new Date,archived:!1};return await this.channels.insertOne(o),Ca.info("DM created",{id:r,members:o.members}),o}async joinChannel(e,t){return(await this.channels.updateOne({_id:e,archived:{$ne:!0}},{$addToSet:{members:t},$set:{updatedAt:new Date}})).modifiedCount>0}async leaveChannel(e,t){return(await this.channels.updateOne({_id:e},{$pull:{members:t},$set:{updatedAt:new Date}})).modifiedCount>0}async archiveChannel(e){return(await this.channels.updateOne({_id:e},{$set:{archived:!0,updatedAt:new Date}})).modifiedCount>0}async renameChannel(e,t){return(await this.channels.updateOne({_id:e},{$set:{name:t,updatedAt:new Date}})).modifiedCount>0}async saveMessage(e){let t={...e,_id:new qb().toHexString()};return await this.messages.insertOne(t),await this.channels.updateOne({_id:e.channelId},{$set:{updatedAt:new Date}}),t}async getHistory(e,t){let s=Math.min(t?.limit??50,100),r={channelId:e};t?.before&&(r._id={$lt:t.before}),t?.threadId&&(r.threadId=t.threadId);let i=await this.messages.find(r).sort({createdAt:-1}).limit(s+1).toArray(),o=i.length>s;return o&&i.pop(),{messages:i.reverse(),hasMore:o}}}});var Yh={};Pe(Yh,{CommandRegistry:()=>Oa});var Na,Oa,Jh=F(()=>{"use strict";O();Na=T("command-registry"),Oa=class{teamStore;resolveAgent;commands=new Map;constructor(e,t){this.teamStore=e,this.resolveAgent=t,this.registerCoreCommands()}register(e){this.commands.has(e.def.name)&&Na.warn("Command already registered, overwriting",{name:e.def.name}),this.commands.set(e.def.name,e),Na.info("Command registered",{name:e.def.name,source:e.def.source})}get(e){return this.commands.get(e)}has(e){return this.commands.has(e)}list(){return[...this.commands.values()].map(e=>e.def)}async execute(e,t){let s=this.commands.get(e);if(!s)return{found:!1};try{return{found:!0,result:await s.execute(t)}}catch(r){return Na.error("Command execution failed",{name:e,error:String(r)}),{found:!0,result:`Command failed: ${String(r)}`}}}registerCoreCommands(){this.register({def:{name:"help",source:"core",description:"List available commands"},execute:async()=>`Available commands:
206
206
  ${this.list().map(s=>` /${s.name} \u2014 ${s.description}`).join(`
207
207
  `)}`}),this.register({def:{name:"dm",source:"core",description:"Open or create a DM with an agent",args:[{name:"agent",required:!0,description:"Agent id or display name"}]},execute:async e=>{let t=e.args[0];if(!t)return"Usage: /dm <agent-id-or-name>";let s=this.resolveAgent(t);return s?`DM ready: ${(await this.teamStore.getOrCreateDm(e.senderId,s.id,e.senderName))._id}`:`Unknown agent: ${t}`}}),this.register({def:{name:"rename",source:"core",description:"Rename the current channel or thread",args:[{name:"name",required:!0,description:"New name"}]},execute:async e=>{let t=e.args.join(" ");return t?await this.teamStore.renameChannel(e.channelId,t)?`Renamed to "${t}"`:"Channel not found":"Usage: /rename <new name>"}}),this.register({def:{name:"members",source:"core",description:"List members of the current channel"},execute:async e=>{let t=await this.teamStore.getChannel(e.channelId);return t?`Members of ${t.name}:
208
208
  ${t.members.map(s=>` - ${s}`).join(`
209
- `)}`:"Channel not found"}})}}});var Ke=T((QC,Vh)=>{"use strict";var Hh=["nodebuffer","arraybuffer","fragments"],Wh=typeof Blob<"u";Wh&&Hh.push("blob");Vh.exports={BINARY_TYPES:Hh,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:Wh,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var Vs=T((XC,Jr)=>{"use strict";var{EMPTY_BUFFER:$b}=Ke(),Oa=Buffer[Symbol.species];function Rb(n,e){if(n.length===0)return $b;if(n.length===1)return n[0];let t=Buffer.allocUnsafe(e),s=0;for(let r=0;r<n.length;r++){let i=n[r];t.set(i,s),s+=i.length}return s<e?new Oa(t.buffer,t.byteOffset,s):t}function Yh(n,e,t,s,r){for(let i=0;i<r;i++)t[s+i]=n[i]^e[i&3]}function Jh(n,e){for(let t=0;t<n.length;t++)n[t]^=e[t&3]}function Bb(n){return n.length===n.buffer.byteLength?n.buffer:n.buffer.slice(n.byteOffset,n.byteOffset+n.length)}function xa(n){if(xa.readOnly=!0,Buffer.isBuffer(n))return n;let e;return n instanceof ArrayBuffer?e=new Oa(n):ArrayBuffer.isView(n)?e=new Oa(n.buffer,n.byteOffset,n.byteLength):(e=Buffer.from(n),xa.readOnly=!1),e}Jr.exports={concat:Rb,mask:Yh,toArrayBuffer:Bb,toBuffer:xa,unmask:Jh};if(!process.env.WS_NO_BUFFER_UTIL)try{let n=F("bufferutil");Jr.exports.mask=function(e,t,s,r,i){i<48?Yh(e,t,s,r,i):n.mask(e,t,s,r,i)},Jr.exports.unmask=function(e,t){e.length<32?Jh(e,t):n.unmask(e,t)}}catch{}});var Xh=T((ZC,Qh)=>{"use strict";var zh=Symbol("kDone"),Ma=Symbol("kRun"),Da=class{constructor(e){this[zh]=()=>{this.pending--,this[Ma]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[Ma]()}[Ma](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[zh])}}};Qh.exports=Da});var Qt=T((eE,sf)=>{"use strict";var Ys=F("zlib"),Zh=Vs(),Ub=Xh(),{kStatusCode:ef}=Ke(),qb=Buffer[Symbol.species],jb=Buffer.from([0,0,255,255]),Qr=Symbol("permessage-deflate"),Ge=Symbol("total-length"),Jt=Symbol("callback"),lt=Symbol("buffers"),zt=Symbol("error"),zr,La=class{constructor(e){if(this._options=e||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!zr){let t=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;zr=new Ub(t)}}static get extensionName(){return"permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let e=this._deflate[Jt];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let t=this._options,s=e.find(r=>!(t.serverNoContextTakeover===!1&&r.server_no_context_takeover||r.server_max_window_bits&&(t.serverMaxWindowBits===!1||typeof t.serverMaxWindowBits=="number"&&t.serverMaxWindowBits>r.server_max_window_bits)||typeof t.clientMaxWindowBits=="number"&&!r.client_max_window_bits));if(!s)throw new Error("None of the extension offers can be accepted");return t.serverNoContextTakeover&&(s.server_no_context_takeover=!0),t.clientNoContextTakeover&&(s.client_no_context_takeover=!0),typeof t.serverMaxWindowBits=="number"&&(s.server_max_window_bits=t.serverMaxWindowBits),typeof t.clientMaxWindowBits=="number"?s.client_max_window_bits=t.clientMaxWindowBits:(s.client_max_window_bits===!0||t.clientMaxWindowBits===!1)&&delete s.client_max_window_bits,s}acceptAsClient(e){let t=e[0];if(this._options.clientNoContextTakeover===!1&&t.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!t.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(t.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return t}normalizeParams(e){return e.forEach(t=>{Object.keys(t).forEach(s=>{let r=t[s];if(r.length>1)throw new Error(`Parameter "${s}" must have only a single value`);if(r=r[0],s==="client_max_window_bits"){if(r!==!0){let i=+r;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${s}": ${r}`);r=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${s}": ${r}`)}else if(s==="server_max_window_bits"){let i=+r;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${s}": ${r}`);r=i}else if(s==="client_no_context_takeover"||s==="server_no_context_takeover"){if(r!==!0)throw new TypeError(`Invalid value for parameter "${s}": ${r}`)}else throw new Error(`Unknown parameter "${s}"`);t[s]=r})}),e}decompress(e,t,s){zr.add(r=>{this._decompress(e,t,(i,o)=>{r(),s(i,o)})})}compress(e,t,s){zr.add(r=>{this._compress(e,t,(i,o)=>{r(),s(i,o)})})}_decompress(e,t,s){let r=this._isServer?"client":"server";if(!this._inflate){let i=`${r}_max_window_bits`,o=typeof this.params[i]!="number"?Ys.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=Ys.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[Qr]=this,this._inflate[Ge]=0,this._inflate[lt]=[],this._inflate.on("error",Kb),this._inflate.on("data",tf)}this._inflate[Jt]=s,this._inflate.write(e),t&&this._inflate.write(jb),this._inflate.flush(()=>{let i=this._inflate[zt];if(i){this._inflate.close(),this._inflate=null,s(i);return}let o=Zh.concat(this._inflate[lt],this._inflate[Ge]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[Ge]=0,this._inflate[lt]=[],t&&this.params[`${r}_no_context_takeover`]&&this._inflate.reset()),s(null,o)})}_compress(e,t,s){let r=this._isServer?"server":"client";if(!this._deflate){let i=`${r}_max_window_bits`,o=typeof this.params[i]!="number"?Ys.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=Ys.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[Ge]=0,this._deflate[lt]=[],this._deflate.on("data",Fb)}this._deflate[Jt]=s,this._deflate.write(e),this._deflate.flush(Ys.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=Zh.concat(this._deflate[lt],this._deflate[Ge]);t&&(i=new qb(i.buffer,i.byteOffset,i.length-4)),this._deflate[Jt]=null,this._deflate[Ge]=0,this._deflate[lt]=[],t&&this.params[`${r}_no_context_takeover`]&&this._deflate.reset(),s(null,i)})}};sf.exports=La;function Fb(n){this[lt].push(n),this[Ge]+=n.length}function tf(n){if(this[Ge]+=n.length,this[Qr]._maxPayload<1||this[Ge]<=this[Qr]._maxPayload){this[lt].push(n);return}this[zt]=new RangeError("Max payload size exceeded"),this[zt].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[zt][ef]=1009,this.removeListener("data",tf),this.reset()}function Kb(n){if(this[Qr]._inflate=null,this[zt]){this[Jt](this[zt]);return}n[ef]=1007,this[Jt](n)}});var Xt=T((tE,Xr)=>{"use strict";var{isUtf8:nf}=F("buffer"),{hasBlob:Gb}=Ke(),Hb=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function Wb(n){return n>=1e3&&n<=1014&&n!==1004&&n!==1005&&n!==1006||n>=3e3&&n<=4999}function Pa(n){let e=n.length,t=0;for(;t<e;)if((n[t]&128)===0)t++;else if((n[t]&224)===192){if(t+1===e||(n[t+1]&192)!==128||(n[t]&254)===192)return!1;t+=2}else if((n[t]&240)===224){if(t+2>=e||(n[t+1]&192)!==128||(n[t+2]&192)!==128||n[t]===224&&(n[t+1]&224)===128||n[t]===237&&(n[t+1]&224)===160)return!1;t+=3}else if((n[t]&248)===240){if(t+3>=e||(n[t+1]&192)!==128||(n[t+2]&192)!==128||(n[t+3]&192)!==128||n[t]===240&&(n[t+1]&240)===128||n[t]===244&&n[t+1]>143||n[t]>244)return!1;t+=4}else return!1;return!0}function Vb(n){return Gb&&typeof n=="object"&&typeof n.arrayBuffer=="function"&&typeof n.type=="string"&&typeof n.stream=="function"&&(n[Symbol.toStringTag]==="Blob"||n[Symbol.toStringTag]==="File")}Xr.exports={isBlob:Vb,isValidStatusCode:Wb,isValidUTF8:Pa,tokenChars:Hb};if(nf)Xr.exports.isValidUTF8=function(n){return n.length<24?Pa(n):nf(n)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let n=F("utf-8-validate");Xr.exports.isValidUTF8=function(e){return e.length<32?Pa(e):n(e)}}catch{}});var qa=T((sE,uf)=>{"use strict";var{Writable:Yb}=F("stream"),rf=Qt(),{BINARY_TYPES:Jb,EMPTY_BUFFER:of,kStatusCode:zb,kWebSocket:Qb}=Ke(),{concat:$a,toArrayBuffer:Xb,unmask:Zb}=Vs(),{isValidStatusCode:e_,isValidUTF8:af}=Xt(),Zr=Buffer[Symbol.species],be=0,cf=1,lf=2,df=3,Ra=4,Ba=5,ei=6,Ua=class extends Yb{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||Jb[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[Qb]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=be}_write(e,t,s){if(this._opcode===8&&this._state==be)return s();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(s)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let s=this._buffers[0];return this._buffers[0]=new Zr(s.buffer,s.byteOffset+e,s.length-e),new Zr(s.buffer,s.byteOffset,e)}let t=Buffer.allocUnsafe(e);do{let s=this._buffers[0],r=t.length-e;e>=s.length?t.set(this._buffers.shift(),r):(t.set(new Uint8Array(s.buffer,s.byteOffset,e),r),this._buffers[0]=new Zr(s.buffer,s.byteOffset+e,s.length-e)),e-=s.length}while(e>0);return t}startLoop(e){this._loop=!0;do switch(this._state){case be:this.getInfo(e);break;case cf:this.getPayloadLength16(e);break;case lf:this.getPayloadLength64(e);break;case df:this.getMask();break;case Ra:this.getData(e);break;case Ba:case ei:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let t=this.consume(2);if((t[0]&48)!==0){let r=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(r);return}let s=(t[0]&64)===64;if(s&&!this._extensions[rf.extensionName]){let r=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(r);return}if(this._fin=(t[0]&128)===128,this._opcode=t[0]&15,this._payloadLength=t[1]&127,this._opcode===0){if(s){let r=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(r);return}if(!this._fragmented){let r=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");e(r);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let r=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(r);return}this._compressed=s}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let r=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");e(r);return}if(s){let r=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(r);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let r=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(r);return}}else{let r=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(r);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(t[1]&128)===128,this._isServer){if(!this._masked){let r=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");e(r);return}}else if(this._masked){let r=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");e(r);return}this._payloadLength===126?this._state=cf:this._payloadLength===127?this._state=lf:this.haveLength(e)}getPayloadLength16(e){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e)}getPayloadLength64(e){if(this._bufferedBytes<8){this._loop=!1;return}let t=this.consume(8),s=t.readUInt32BE(0);if(s>Math.pow(2,21)-1){let r=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(r);return}this._payloadLength=s*Math.pow(2,32)+t.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){let t=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(t);return}this._masked?this._state=df:this._state=Ra}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=Ra}getData(e){let t=of;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}t=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&Zb(t,this._mask)}if(this._opcode>7){this.controlMessage(t,e);return}if(this._compressed){this._state=Ba,this.decompress(t,e);return}t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage(e)}decompress(e,t){this._extensions[rf.extensionName].decompress(e,this._fin,(r,i)=>{if(r)return t(r);if(i.length){if(this._messageLength+=i.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");t(o);return}this._fragments.push(i)}this.dataMessage(t),this._state===be&&this.startLoop(t)})}dataMessage(e){if(!this._fin){this._state=be;return}let t=this._messageLength,s=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let r;this._binaryType==="nodebuffer"?r=$a(s,t):this._binaryType==="arraybuffer"?r=Xb($a(s,t)):this._binaryType==="blob"?r=new Blob(s):r=s,this._allowSynchronousEvents?(this.emit("message",r,!0),this._state=be):(this._state=ei,setImmediate(()=>{this.emit("message",r,!0),this._state=be,this.startLoop(e)}))}else{let r=$a(s,t);if(!this._skipUTF8Validation&&!af(r)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===Ba||this._allowSynchronousEvents?(this.emit("message",r,!1),this._state=be):(this._state=ei,setImmediate(()=>{this.emit("message",r,!1),this._state=be,this.startLoop(e)}))}}controlMessage(e,t){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,of),this.end();else{let s=e.readUInt16BE(0);if(!e_(s)){let i=this.createError(RangeError,`invalid status code ${s}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");t(i);return}let r=new Zr(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!af(r)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");t(i);return}this._loop=!1,this.emit("conclude",s,r),this.end()}this._state=be;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=be):(this._state=ei,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=be,this.startLoop(t)}))}createError(e,t,s,r,i){this._loop=!1,this._errored=!0;let o=new e(s?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(o,this.createError),o.code=i,o[zb]=r,o}};uf.exports=Ua});var Ka=T((rE,pf)=>{"use strict";var{Duplex:nE}=F("stream"),{randomFillSync:t_}=F("crypto"),hf=Qt(),{EMPTY_BUFFER:s_,kWebSocket:n_,NOOP:r_}=Ke(),{isBlob:Zt,isValidStatusCode:i_}=Xt(),{mask:ff,toBuffer:vt}=Vs(),_e=Symbol("kByteLength"),o_=Buffer.alloc(4),ti=8*1024,Tt,es=ti,Ce=0,a_=1,c_=2,ja=class n{constructor(e,t,s){this._extensions=t||{},s&&(this._generateMask=s,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=Ce,this.onerror=r_,this[n_]=void 0}static frame(e,t){let s,r=!1,i=2,o=!1;t.mask&&(s=t.maskBuffer||o_,t.generateMask?t.generateMask(s):(es===ti&&(Tt===void 0&&(Tt=Buffer.alloc(ti)),t_(Tt,0,ti),es=0),s[0]=Tt[es++],s[1]=Tt[es++],s[2]=Tt[es++],s[3]=Tt[es++]),o=(s[0]|s[1]|s[2]|s[3])===0,i=6);let a;typeof e=="string"?(!t.mask||o)&&t[_e]!==void 0?a=t[_e]:(e=Buffer.from(e),a=e.length):(a=e.length,r=t.mask&&t.readOnly&&!o);let l=a;a>=65536?(i+=8,l=127):a>125&&(i+=2,l=126);let c=Buffer.allocUnsafe(r?a+i:i);return c[0]=t.fin?t.opcode|128:t.opcode,t.rsv1&&(c[0]|=64),c[1]=l,l===126?c.writeUInt16BE(a,2):l===127&&(c[2]=c[3]=0,c.writeUIntBE(a,4,6)),t.mask?(c[1]|=128,c[i-4]=s[0],c[i-3]=s[1],c[i-2]=s[2],c[i-1]=s[3],o?[c,e]:r?(ff(e,s,c,i,a),[c]):(ff(e,s,e,0,a),[c,e])):[c,e]}close(e,t,s,r){let i;if(e===void 0)i=s_;else{if(typeof e!="number"||!i_(e))throw new TypeError("First argument must be a valid error code number");if(t===void 0||!t.length)i=Buffer.allocUnsafe(2),i.writeUInt16BE(e,0);else{let a=Buffer.byteLength(t);if(a>123)throw new RangeError("The message must not be greater than 123 bytes");i=Buffer.allocUnsafe(2+a),i.writeUInt16BE(e,0),typeof t=="string"?i.write(t,2):i.set(t,2)}}let o={[_e]:i.length,fin:!0,generateMask:this._generateMask,mask:s,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==Ce?this.enqueue([this.dispatch,i,!1,o,r]):this.sendFrame(n.frame(i,o),r)}ping(e,t,s){let r,i;if(typeof e=="string"?(r=Buffer.byteLength(e),i=!1):Zt(e)?(r=e.size,i=!1):(e=vt(e),r=e.length,i=vt.readOnly),r>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[_e]:r,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};Zt(e)?this._state!==Ce?this.enqueue([this.getBlobData,e,!1,o,s]):this.getBlobData(e,!1,o,s):this._state!==Ce?this.enqueue([this.dispatch,e,!1,o,s]):this.sendFrame(n.frame(e,o),s)}pong(e,t,s){let r,i;if(typeof e=="string"?(r=Buffer.byteLength(e),i=!1):Zt(e)?(r=e.size,i=!1):(e=vt(e),r=e.length,i=vt.readOnly),r>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[_e]:r,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};Zt(e)?this._state!==Ce?this.enqueue([this.getBlobData,e,!1,o,s]):this.getBlobData(e,!1,o,s):this._state!==Ce?this.enqueue([this.dispatch,e,!1,o,s]):this.sendFrame(n.frame(e,o),s)}send(e,t,s){let r=this._extensions[hf.extensionName],i=t.binary?2:1,o=t.compress,a,l;typeof e=="string"?(a=Buffer.byteLength(e),l=!1):Zt(e)?(a=e.size,l=!1):(e=vt(e),a=e.length,l=vt.readOnly),this._firstFragment?(this._firstFragment=!1,o&&r&&r.params[r._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=a>=r._threshold),this._compress=o):(o=!1,i=0),t.fin&&(this._firstFragment=!0);let c={[_e]:a,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:l,rsv1:o};Zt(e)?this._state!==Ce?this.enqueue([this.getBlobData,e,this._compress,c,s]):this.getBlobData(e,this._compress,c,s):this._state!==Ce?this.enqueue([this.dispatch,e,this._compress,c,s]):this.dispatch(e,this._compress,c,s)}getBlobData(e,t,s,r){this._bufferedBytes+=s[_e],this._state=c_,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let a=new Error("The socket was closed while the blob was being read");process.nextTick(Fa,this,a,r);return}this._bufferedBytes-=s[_e];let o=vt(i);t?this.dispatch(o,t,s,r):(this._state=Ce,this.sendFrame(n.frame(o,s),r),this.dequeue())}).catch(i=>{process.nextTick(l_,this,i,r)})}dispatch(e,t,s,r){if(!t){this.sendFrame(n.frame(e,s),r);return}let i=this._extensions[hf.extensionName];this._bufferedBytes+=s[_e],this._state=a_,i.compress(e,s.fin,(o,a)=>{if(this._socket.destroyed){let l=new Error("The socket was closed while data was being compressed");Fa(this,l,r);return}this._bufferedBytes-=s[_e],this._state=Ce,s.readOnly=!1,this.sendFrame(n.frame(a,s),r),this.dequeue()})}dequeue(){for(;this._state===Ce&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][_e],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][_e],this._queue.push(e)}sendFrame(e,t){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],t),this._socket.uncork()):this._socket.write(e[0],t)}};pf.exports=ja;function Fa(n,e,t){typeof t=="function"&&t(e);for(let s=0;s<n._queue.length;s++){let r=n._queue[s],i=r[r.length-1];typeof i=="function"&&i(e)}}function l_(n,e,t){Fa(n,e,t),n.onerror(e)}});var vf=T((iE,kf)=>{"use strict";var{kForOnEventAttribute:Js,kListener:Ga}=Ke(),mf=Symbol("kCode"),gf=Symbol("kData"),yf=Symbol("kError"),wf=Symbol("kMessage"),Sf=Symbol("kReason"),ts=Symbol("kTarget"),bf=Symbol("kType"),_f=Symbol("kWasClean"),He=class{constructor(e){this[ts]=null,this[bf]=e}get target(){return this[ts]}get type(){return this[bf]}};Object.defineProperty(He.prototype,"target",{enumerable:!0});Object.defineProperty(He.prototype,"type",{enumerable:!0});var It=class extends He{constructor(e,t={}){super(e),this[mf]=t.code===void 0?0:t.code,this[Sf]=t.reason===void 0?"":t.reason,this[_f]=t.wasClean===void 0?!1:t.wasClean}get code(){return this[mf]}get reason(){return this[Sf]}get wasClean(){return this[_f]}};Object.defineProperty(It.prototype,"code",{enumerable:!0});Object.defineProperty(It.prototype,"reason",{enumerable:!0});Object.defineProperty(It.prototype,"wasClean",{enumerable:!0});var ss=class extends He{constructor(e,t={}){super(e),this[yf]=t.error===void 0?null:t.error,this[wf]=t.message===void 0?"":t.message}get error(){return this[yf]}get message(){return this[wf]}};Object.defineProperty(ss.prototype,"error",{enumerable:!0});Object.defineProperty(ss.prototype,"message",{enumerable:!0});var zs=class extends He{constructor(e,t={}){super(e),this[gf]=t.data===void 0?null:t.data}get data(){return this[gf]}};Object.defineProperty(zs.prototype,"data",{enumerable:!0});var d_={addEventListener(n,e,t={}){for(let r of this.listeners(n))if(!t[Js]&&r[Ga]===e&&!r[Js])return;let s;if(n==="message")s=function(i,o){let a=new zs("message",{data:o?i:i.toString()});a[ts]=this,si(e,this,a)};else if(n==="close")s=function(i,o){let a=new It("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});a[ts]=this,si(e,this,a)};else if(n==="error")s=function(i){let o=new ss("error",{error:i,message:i.message});o[ts]=this,si(e,this,o)};else if(n==="open")s=function(){let i=new He("open");i[ts]=this,si(e,this,i)};else return;s[Js]=!!t[Js],s[Ga]=e,t.once?this.once(n,s):this.on(n,s)},removeEventListener(n,e){for(let t of this.listeners(n))if(t[Ga]===e&&!t[Js]){this.removeListener(n,t);break}}};kf.exports={CloseEvent:It,ErrorEvent:ss,Event:He,EventTarget:d_,MessageEvent:zs};function si(n,e,t){typeof n=="object"&&n.handleEvent?n.handleEvent.call(n,t):n.call(e,t)}});var ni=T((oE,Tf)=>{"use strict";var{tokenChars:Qs}=Xt();function Me(n,e,t){n[e]===void 0?n[e]=[t]:n[e].push(t)}function u_(n){let e=Object.create(null),t=Object.create(null),s=!1,r=!1,i=!1,o,a,l=-1,c=-1,d=-1,u=0;for(;u<n.length;u++)if(c=n.charCodeAt(u),o===void 0)if(d===-1&&Qs[c]===1)l===-1&&(l=u);else if(u!==0&&(c===32||c===9))d===-1&&l!==-1&&(d=u);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u);let p=n.slice(l,d);c===44?(Me(e,p,t),t=Object.create(null)):o=p,l=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);else if(a===void 0)if(d===-1&&Qs[c]===1)l===-1&&(l=u);else if(c===32||c===9)d===-1&&l!==-1&&(d=u);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u),Me(t,n.slice(l,d),!0),c===44&&(Me(e,o,t),t=Object.create(null),o=void 0),l=d=-1}else if(c===61&&l!==-1&&d===-1)a=n.slice(l,u),l=d=-1;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(r){if(Qs[c]!==1)throw new SyntaxError(`Unexpected character at index ${u}`);l===-1?l=u:s||(s=!0),r=!1}else if(i)if(Qs[c]===1)l===-1&&(l=u);else if(c===34&&l!==-1)i=!1,d=u;else if(c===92)r=!0;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(c===34&&n.charCodeAt(u-1)===61)i=!0;else if(d===-1&&Qs[c]===1)l===-1&&(l=u);else if(l!==-1&&(c===32||c===9))d===-1&&(d=u);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u);let p=n.slice(l,d);s&&(p=p.replace(/\\/g,""),s=!1),Me(t,a,p),c===44&&(Me(e,o,t),t=Object.create(null),o=void 0),a=void 0,l=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);if(l===-1||i||c===32||c===9)throw new SyntaxError("Unexpected end of input");d===-1&&(d=u);let h=n.slice(l,d);return o===void 0?Me(e,h,t):(a===void 0?Me(t,h,!0):s?Me(t,a,h.replace(/\\/g,"")):Me(t,a,h),Me(e,o,t)),e}function h_(n){return Object.keys(n).map(e=>{let t=n[e];return Array.isArray(t)||(t=[t]),t.map(s=>[e].concat(Object.keys(s).map(r=>{let i=s[r];return Array.isArray(i)||(i=[i]),i.map(o=>o===!0?r:`${r}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}Tf.exports={format:h_,parse:u_}});var ai=T((lE,$f)=>{"use strict";var f_=F("events"),p_=F("https"),m_=F("http"),Cf=F("net"),g_=F("tls"),{randomBytes:y_,createHash:w_}=F("crypto"),{Duplex:aE,Readable:cE}=F("stream"),{URL:Ha}=F("url"),dt=Qt(),S_=qa(),b_=Ka(),{isBlob:__}=Xt(),{BINARY_TYPES:If,CLOSE_TIMEOUT:k_,EMPTY_BUFFER:ri,GUID:v_,kForOnEventAttribute:Wa,kListener:T_,kStatusCode:I_,kWebSocket:re,NOOP:Ef}=Ke(),{EventTarget:{addEventListener:A_,removeEventListener:C_}}=vf(),{format:E_,parse:N_}=ni(),{toBuffer:O_}=Vs(),Nf=Symbol("kAborted"),Va=[8,13],We=["CONNECTING","OPEN","CLOSING","CLOSED"],x_=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,V=class n extends f_{constructor(e,t,s){super(),this._binaryType=If[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=ri,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=n.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,t===void 0?t=[]:Array.isArray(t)||(typeof t=="object"&&t!==null?(s=t,t=[]):t=[t]),Of(this,e,t,s)):(this._autoPong=s.autoPong,this._closeTimeout=s.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){If.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(e,t,s){let r=new S_({allowSynchronousEvents:s.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation}),i=new b_(e,this._extensions,s.generateMask);this._receiver=r,this._sender=i,this._socket=e,r[re]=this,i[re]=this,e[re]=this,r.on("conclude",L_),r.on("drain",P_),r.on("error",$_),r.on("message",R_),r.on("ping",B_),r.on("pong",U_),i.onerror=q_,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",Df),e.on("data",oi),e.on("end",Lf),e.on("error",Pf),this._readyState=n.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=n.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[dt.extensionName]&&this._extensions[dt.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=n.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==n.CLOSED){if(this.readyState===n.CONNECTING){ye(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===n.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=n.CLOSING,this._sender.close(e,t,!this._isServer,s=>{s||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),Mf(this)}}pause(){this.readyState===n.CONNECTING||this.readyState===n.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,t,s){if(this.readyState===n.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(s=e,e=t=void 0):typeof t=="function"&&(s=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==n.OPEN){Ya(this,e,s);return}t===void 0&&(t=!this._isServer),this._sender.ping(e||ri,t,s)}pong(e,t,s){if(this.readyState===n.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(s=e,e=t=void 0):typeof t=="function"&&(s=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==n.OPEN){Ya(this,e,s);return}t===void 0&&(t=!this._isServer),this._sender.pong(e||ri,t,s)}resume(){this.readyState===n.CONNECTING||this.readyState===n.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,t,s){if(this.readyState===n.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof t=="function"&&(s=t,t={}),typeof e=="number"&&(e=e.toString()),this.readyState!==n.OPEN){Ya(this,e,s);return}let r={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[dt.extensionName]||(r.compress=!1),this._sender.send(e||ri,r,s)}terminate(){if(this.readyState!==n.CLOSED){if(this.readyState===n.CONNECTING){ye(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=n.CLOSING,this._socket.destroy())}}};Object.defineProperty(V,"CONNECTING",{enumerable:!0,value:We.indexOf("CONNECTING")});Object.defineProperty(V.prototype,"CONNECTING",{enumerable:!0,value:We.indexOf("CONNECTING")});Object.defineProperty(V,"OPEN",{enumerable:!0,value:We.indexOf("OPEN")});Object.defineProperty(V.prototype,"OPEN",{enumerable:!0,value:We.indexOf("OPEN")});Object.defineProperty(V,"CLOSING",{enumerable:!0,value:We.indexOf("CLOSING")});Object.defineProperty(V.prototype,"CLOSING",{enumerable:!0,value:We.indexOf("CLOSING")});Object.defineProperty(V,"CLOSED",{enumerable:!0,value:We.indexOf("CLOSED")});Object.defineProperty(V.prototype,"CLOSED",{enumerable:!0,value:We.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(n=>{Object.defineProperty(V.prototype,n,{enumerable:!0})});["open","error","close","message"].forEach(n=>{Object.defineProperty(V.prototype,`on${n}`,{enumerable:!0,get(){for(let e of this.listeners(n))if(e[Wa])return e[T_];return null},set(e){for(let t of this.listeners(n))if(t[Wa]){this.removeListener(n,t);break}typeof e=="function"&&this.addEventListener(n,e,{[Wa]:!0})}})});V.prototype.addEventListener=A_;V.prototype.removeEventListener=C_;$f.exports=V;function Of(n,e,t,s){let r={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:k_,protocolVersion:Va[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...s,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(n._autoPong=r.autoPong,n._closeTimeout=r.closeTimeout,!Va.includes(r.protocolVersion))throw new RangeError(`Unsupported protocol version: ${r.protocolVersion} (supported versions: ${Va.join(", ")})`);let i;if(e instanceof Ha)i=e;else try{i=new Ha(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),n._url=i.href;let o=i.protocol==="wss:",a=i.protocol==="ws+unix:",l;if(i.protocol!=="ws:"&&!o&&!a?l=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:a&&!i.pathname?l="The URL's pathname is empty":i.hash&&(l="The URL contains a fragment identifier"),l){let f=new SyntaxError(l);if(n._redirects===0)throw f;ii(n,f);return}let c=o?443:80,d=y_(16).toString("base64"),u=o?p_.request:m_.request,h=new Set,p;if(r.createConnection=r.createConnection||(o?D_:M_),r.defaultPort=r.defaultPort||c,r.port=i.port||c,r.host=i.hostname.startsWith("[")?i.hostname.slice(1,-1):i.hostname,r.headers={...r.headers,"Sec-WebSocket-Version":r.protocolVersion,"Sec-WebSocket-Key":d,Connection:"Upgrade",Upgrade:"websocket"},r.path=i.pathname+i.search,r.timeout=r.handshakeTimeout,r.perMessageDeflate&&(p=new dt({...r.perMessageDeflate,isServer:!1,maxPayload:r.maxPayload}),r.headers["Sec-WebSocket-Extensions"]=E_({[dt.extensionName]:p.offer()})),t.length){for(let f of t){if(typeof f!="string"||!x_.test(f)||h.has(f))throw new SyntaxError("An invalid or duplicated subprotocol was specified");h.add(f)}r.headers["Sec-WebSocket-Protocol"]=t.join(",")}if(r.origin&&(r.protocolVersion<13?r.headers["Sec-WebSocket-Origin"]=r.origin:r.headers.Origin=r.origin),(i.username||i.password)&&(r.auth=`${i.username}:${i.password}`),a){let f=r.path.split(":");r.socketPath=f[0],r.path=f[1]}let g;if(r.followRedirects){if(n._redirects===0){n._originalIpc=a,n._originalSecure=o,n._originalHostOrSocketPath=a?r.socketPath:i.host;let f=s&&s.headers;if(s={...s,headers:{}},f)for(let[y,w]of Object.entries(f))s.headers[y.toLowerCase()]=w}else if(n.listenerCount("redirect")===0){let f=a?n._originalIpc?r.socketPath===n._originalHostOrSocketPath:!1:n._originalIpc?!1:i.host===n._originalHostOrSocketPath;(!f||n._originalSecure&&!o)&&(delete r.headers.authorization,delete r.headers.cookie,f||delete r.headers.host,r.auth=void 0)}r.auth&&!s.headers.authorization&&(s.headers.authorization="Basic "+Buffer.from(r.auth).toString("base64")),g=n._req=u(r),n._redirects&&n.emit("redirect",n.url,g)}else g=n._req=u(r);r.timeout&&g.on("timeout",()=>{ye(n,g,"Opening handshake has timed out")}),g.on("error",f=>{g===null||g[Nf]||(g=n._req=null,ii(n,f))}),g.on("response",f=>{let y=f.headers.location,w=f.statusCode;if(y&&r.followRedirects&&w>=300&&w<400){if(++n._redirects>r.maxRedirects){ye(n,g,"Maximum redirects exceeded");return}g.abort();let S;try{S=new Ha(y,e)}catch{let A=new SyntaxError(`Invalid URL: ${y}`);ii(n,A);return}Of(n,S,t,s)}else n.emit("unexpected-response",g,f)||ye(n,g,`Unexpected server response: ${f.statusCode}`)}),g.on("upgrade",(f,y,w)=>{if(n.emit("upgrade",f),n.readyState!==V.CONNECTING)return;g=n._req=null;let S=f.headers.upgrade;if(S===void 0||S.toLowerCase()!=="websocket"){ye(n,y,"Invalid Upgrade header");return}let b=w_("sha1").update(d+v_).digest("base64");if(f.headers["sec-websocket-accept"]!==b){ye(n,y,"Invalid Sec-WebSocket-Accept header");return}let A=f.headers["sec-websocket-protocol"],v;if(A!==void 0?h.size?h.has(A)||(v="Server sent an invalid subprotocol"):v="Server sent a subprotocol but none was requested":h.size&&(v="Server sent no subprotocol"),v){ye(n,y,v);return}A&&(n._protocol=A);let C=f.headers["sec-websocket-extensions"];if(C!==void 0){if(!p){ye(n,y,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let M;try{M=N_(C)}catch{ye(n,y,"Invalid Sec-WebSocket-Extensions header");return}let _=Object.keys(M);if(_.length!==1||_[0]!==dt.extensionName){ye(n,y,"Server indicated an extension that was not requested");return}try{p.accept(M[dt.extensionName])}catch{ye(n,y,"Invalid Sec-WebSocket-Extensions header");return}n._extensions[dt.extensionName]=p}n.setSocket(y,w,{allowSynchronousEvents:r.allowSynchronousEvents,generateMask:r.generateMask,maxPayload:r.maxPayload,skipUTF8Validation:r.skipUTF8Validation})}),r.finishRequest?r.finishRequest(g,n):g.end()}function ii(n,e){n._readyState=V.CLOSING,n._errorEmitted=!0,n.emit("error",e),n.emitClose()}function M_(n){return n.path=n.socketPath,Cf.connect(n)}function D_(n){return n.path=void 0,!n.servername&&n.servername!==""&&(n.servername=Cf.isIP(n.host)?"":n.host),g_.connect(n)}function ye(n,e,t){n._readyState=V.CLOSING;let s=new Error(t);Error.captureStackTrace(s,ye),e.setHeader?(e[Nf]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(ii,n,s)):(e.destroy(s),e.once("error",n.emit.bind(n,"error")),e.once("close",n.emitClose.bind(n)))}function Ya(n,e,t){if(e){let s=__(e)?e.size:O_(e).length;n._socket?n._sender._bufferedBytes+=s:n._bufferedAmount+=s}if(t){let s=new Error(`WebSocket is not open: readyState ${n.readyState} (${We[n.readyState]})`);process.nextTick(t,s)}}function L_(n,e){let t=this[re];t._closeFrameReceived=!0,t._closeMessage=e,t._closeCode=n,t._socket[re]!==void 0&&(t._socket.removeListener("data",oi),process.nextTick(xf,t._socket),n===1005?t.close():t.close(n,e))}function P_(){let n=this[re];n.isPaused||n._socket.resume()}function $_(n){let e=this[re];e._socket[re]!==void 0&&(e._socket.removeListener("data",oi),process.nextTick(xf,e._socket),e.close(n[I_])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",n))}function Af(){this[re].emitClose()}function R_(n,e){this[re].emit("message",n,e)}function B_(n){let e=this[re];e._autoPong&&e.pong(n,!this._isServer,Ef),e.emit("ping",n)}function U_(n){this[re].emit("pong",n)}function xf(n){n.resume()}function q_(n){let e=this[re];e.readyState!==V.CLOSED&&(e.readyState===V.OPEN&&(e._readyState=V.CLOSING,Mf(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",n)))}function Mf(n){n._closeTimer=setTimeout(n._socket.destroy.bind(n._socket),n._closeTimeout)}function Df(){let n=this[re];if(this.removeListener("close",Df),this.removeListener("data",oi),this.removeListener("end",Lf),n._readyState=V.CLOSING,!this._readableState.endEmitted&&!n._closeFrameReceived&&!n._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);n._receiver.write(e)}n._receiver.end(),this[re]=void 0,clearTimeout(n._closeTimer),n._receiver._writableState.finished||n._receiver._writableState.errorEmitted?n.emitClose():(n._receiver.on("error",Af),n._receiver.on("finish",Af))}function oi(n){this[re]._receiver.write(n)||this.pause()}function Lf(){let n=this[re];n._readyState=V.CLOSING,n._receiver.end(),this.end()}function Pf(){let n=this[re];this.removeListener("error",Pf),this.on("error",Ef),n&&(n._readyState=V.CLOSING,this.destroy())}});var qf=T((uE,Uf)=>{"use strict";var dE=ai(),{Duplex:j_}=F("stream");function Rf(n){n.emit("close")}function F_(){!this.destroyed&&this._writableState.finished&&this.destroy()}function Bf(n){this.removeListener("error",Bf),this.destroy(),this.listenerCount("error")===0&&this.emit("error",n)}function K_(n,e){let t=!0,s=new j_({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return n.on("message",function(i,o){let a=!o&&s._readableState.objectMode?i.toString():i;s.push(a)||n.pause()}),n.once("error",function(i){s.destroyed||(t=!1,s.destroy(i))}),n.once("close",function(){s.destroyed||s.push(null)}),s._destroy=function(r,i){if(n.readyState===n.CLOSED){i(r),process.nextTick(Rf,s);return}let o=!1;n.once("error",function(l){o=!0,i(l)}),n.once("close",function(){o||i(r),process.nextTick(Rf,s)}),t&&n.terminate()},s._final=function(r){if(n.readyState===n.CONNECTING){n.once("open",function(){s._final(r)});return}n._socket!==null&&(n._socket._writableState.finished?(r(),s._readableState.endEmitted&&s.destroy()):(n._socket.once("finish",function(){r()}),n.close()))},s._read=function(){n.isPaused&&n.resume()},s._write=function(r,i,o){if(n.readyState===n.CONNECTING){n.once("open",function(){s._write(r,i,o)});return}n.send(r,o)},s.on("end",F_),s.on("error",Bf),s}Uf.exports=K_});var Ja=T((hE,jf)=>{"use strict";var{tokenChars:G_}=Xt();function H_(n){let e=new Set,t=-1,s=-1,r=0;for(r;r<n.length;r++){let o=n.charCodeAt(r);if(s===-1&&G_[o]===1)t===-1&&(t=r);else if(r!==0&&(o===32||o===9))s===-1&&t!==-1&&(s=r);else if(o===44){if(t===-1)throw new SyntaxError(`Unexpected character at index ${r}`);s===-1&&(s=r);let a=n.slice(t,s);if(e.has(a))throw new SyntaxError(`The "${a}" subprotocol is duplicated`);e.add(a),t=s=-1}else throw new SyntaxError(`Unexpected character at index ${r}`)}if(t===-1||s!==-1)throw new SyntaxError("Unexpected end of input");let i=n.slice(t,r);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}jf.exports={parse:H_}});var Yf=T((pE,Vf)=>{"use strict";var W_=F("events"),ci=F("http"),{Duplex:fE}=F("stream"),{createHash:V_}=F("crypto"),Ff=ni(),At=Qt(),Y_=Ja(),J_=ai(),{CLOSE_TIMEOUT:z_,GUID:Q_,kWebSocket:X_}=Ke(),Z_=/^[+/0-9A-Za-z]{22}==$/,Kf=0,Gf=1,Wf=2,za=class extends W_{constructor(e,t){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:z_,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:J_,...e},e.port==null&&!e.server&&!e.noServer||e.port!=null&&(e.server||e.noServer)||e.server&&e.noServer)throw new TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(e.port!=null?(this._server=ci.createServer((s,r)=>{let i=ci.STATUS_CODES[426];r.writeHead(426,{"Content-Length":i.length,"Content-Type":"text/plain"}),r.end(i)}),this._server.listen(e.port,e.host,e.backlog,t)):e.server&&(this._server=e.server),this._server){let s=this.emit.bind(this,"connection");this._removeListeners=ek(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(r,i,o)=>{this.handleUpgrade(r,i,o,s)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=Kf}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(e){if(this._state===Wf){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(Xs,this);return}if(e&&this.once("close",e),this._state!==Gf)if(this._state=Gf,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients?this.clients.size?this._shouldEmitClose=!0:process.nextTick(Xs,this):process.nextTick(Xs,this);else{let t=this._server;this._removeListeners(),this._removeListeners=this._server=null,t.close(()=>{Xs(this)})}}shouldHandle(e){if(this.options.path){let t=e.url.indexOf("?");if((t!==-1?e.url.slice(0,t):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,t,s,r){t.on("error",Hf);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,a=+e.headers["sec-websocket-version"];if(e.method!=="GET"){Ct(this,e,t,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){Ct(this,e,t,400,"Invalid Upgrade header");return}if(i===void 0||!Z_.test(i)){Ct(this,e,t,400,"Missing or invalid Sec-WebSocket-Key header");return}if(a!==13&&a!==8){Ct(this,e,t,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){Zs(t,400);return}let l=e.headers["sec-websocket-protocol"],c=new Set;if(l!==void 0)try{c=Y_.parse(l)}catch{Ct(this,e,t,400,"Invalid Sec-WebSocket-Protocol header");return}let d=e.headers["sec-websocket-extensions"],u={};if(this.options.perMessageDeflate&&d!==void 0){let h=new At({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let p=Ff.parse(d);p[At.extensionName]&&(h.accept(p[At.extensionName]),u[At.extensionName]=h)}catch{Ct(this,e,t,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let h={origin:e.headers[`${a===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(h,(p,g,f,y)=>{if(!p)return Zs(t,g||401,f,y);this.completeUpgrade(u,i,c,e,t,s,r)});return}if(!this.options.verifyClient(h))return Zs(t,401)}this.completeUpgrade(u,i,c,e,t,s,r)}completeUpgrade(e,t,s,r,i,o,a){if(!i.readable||!i.writable)return i.destroy();if(i[X_])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>Kf)return Zs(i,503);let c=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${V_("sha1").update(t+Q_).digest("base64")}`],d=new this.options.WebSocket(null,void 0,this.options);if(s.size){let u=this.options.handleProtocols?this.options.handleProtocols(s,r):s.values().next().value;u&&(c.push(`Sec-WebSocket-Protocol: ${u}`),d._protocol=u)}if(e[At.extensionName]){let u=e[At.extensionName].params,h=Ff.format({[At.extensionName]:[u]});c.push(`Sec-WebSocket-Extensions: ${h}`),d._extensions=e}this.emit("headers",c,r),i.write(c.concat(`\r
209
+ `)}`:"Channel not found"}})}}});var Ke=I((rE,Xh)=>{"use strict";var zh=["nodebuffer","arraybuffer","fragments"],Qh=typeof Blob<"u";Qh&&zh.push("blob");Xh.exports={BINARY_TYPES:zh,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:Qh,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var Ws=I((iE,Yr)=>{"use strict";var{EMPTY_BUFFER:jb}=Ke(),xa=Buffer[Symbol.species];function Fb(n,e){if(n.length===0)return jb;if(n.length===1)return n[0];let t=Buffer.allocUnsafe(e),s=0;for(let r=0;r<n.length;r++){let i=n[r];t.set(i,s),s+=i.length}return s<e?new xa(t.buffer,t.byteOffset,s):t}function Zh(n,e,t,s,r){for(let i=0;i<r;i++)t[s+i]=n[i]^e[i&3]}function ef(n,e){for(let t=0;t<n.length;t++)n[t]^=e[t&3]}function Kb(n){return n.length===n.buffer.byteLength?n.buffer:n.buffer.slice(n.byteOffset,n.byteOffset+n.length)}function Ma(n){if(Ma.readOnly=!0,Buffer.isBuffer(n))return n;let e;return n instanceof ArrayBuffer?e=new xa(n):ArrayBuffer.isView(n)?e=new xa(n.buffer,n.byteOffset,n.byteLength):(e=Buffer.from(n),Ma.readOnly=!1),e}Yr.exports={concat:Fb,mask:Zh,toArrayBuffer:Kb,toBuffer:Ma,unmask:ef};if(!process.env.WS_NO_BUFFER_UTIL)try{let n=K("bufferutil");Yr.exports.mask=function(e,t,s,r,i){i<48?Zh(e,t,s,r,i):n.mask(e,t,s,r,i)},Yr.exports.unmask=function(e,t){e.length<32?ef(e,t):n.unmask(e,t)}}catch{}});var nf=I((oE,sf)=>{"use strict";var tf=Symbol("kDone"),Da=Symbol("kRun"),La=class{constructor(e){this[tf]=()=>{this.pending--,this[Da]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[Da]()}[Da](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[tf])}}};sf.exports=La});var Jt=I((aE,cf)=>{"use strict";var Vs=K("zlib"),rf=Ws(),Gb=nf(),{kStatusCode:of}=Ke(),Hb=Buffer[Symbol.species],Wb=Buffer.from([0,0,255,255]),zr=Symbol("permessage-deflate"),Ge=Symbol("total-length"),Vt=Symbol("callback"),dt=Symbol("buffers"),Yt=Symbol("error"),Jr,Pa=class{constructor(e){if(this._options=e||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!Jr){let t=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;Jr=new Gb(t)}}static get extensionName(){return"permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let e=this._deflate[Vt];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let t=this._options,s=e.find(r=>!(t.serverNoContextTakeover===!1&&r.server_no_context_takeover||r.server_max_window_bits&&(t.serverMaxWindowBits===!1||typeof t.serverMaxWindowBits=="number"&&t.serverMaxWindowBits>r.server_max_window_bits)||typeof t.clientMaxWindowBits=="number"&&!r.client_max_window_bits));if(!s)throw new Error("None of the extension offers can be accepted");return t.serverNoContextTakeover&&(s.server_no_context_takeover=!0),t.clientNoContextTakeover&&(s.client_no_context_takeover=!0),typeof t.serverMaxWindowBits=="number"&&(s.server_max_window_bits=t.serverMaxWindowBits),typeof t.clientMaxWindowBits=="number"?s.client_max_window_bits=t.clientMaxWindowBits:(s.client_max_window_bits===!0||t.clientMaxWindowBits===!1)&&delete s.client_max_window_bits,s}acceptAsClient(e){let t=e[0];if(this._options.clientNoContextTakeover===!1&&t.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!t.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(t.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return t}normalizeParams(e){return e.forEach(t=>{Object.keys(t).forEach(s=>{let r=t[s];if(r.length>1)throw new Error(`Parameter "${s}" must have only a single value`);if(r=r[0],s==="client_max_window_bits"){if(r!==!0){let i=+r;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${s}": ${r}`);r=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${s}": ${r}`)}else if(s==="server_max_window_bits"){let i=+r;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${s}": ${r}`);r=i}else if(s==="client_no_context_takeover"||s==="server_no_context_takeover"){if(r!==!0)throw new TypeError(`Invalid value for parameter "${s}": ${r}`)}else throw new Error(`Unknown parameter "${s}"`);t[s]=r})}),e}decompress(e,t,s){Jr.add(r=>{this._decompress(e,t,(i,o)=>{r(),s(i,o)})})}compress(e,t,s){Jr.add(r=>{this._compress(e,t,(i,o)=>{r(),s(i,o)})})}_decompress(e,t,s){let r=this._isServer?"client":"server";if(!this._inflate){let i=`${r}_max_window_bits`,o=typeof this.params[i]!="number"?Vs.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=Vs.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[zr]=this,this._inflate[Ge]=0,this._inflate[dt]=[],this._inflate.on("error",Yb),this._inflate.on("data",af)}this._inflate[Vt]=s,this._inflate.write(e),t&&this._inflate.write(Wb),this._inflate.flush(()=>{let i=this._inflate[Yt];if(i){this._inflate.close(),this._inflate=null,s(i);return}let o=rf.concat(this._inflate[dt],this._inflate[Ge]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[Ge]=0,this._inflate[dt]=[],t&&this.params[`${r}_no_context_takeover`]&&this._inflate.reset()),s(null,o)})}_compress(e,t,s){let r=this._isServer?"server":"client";if(!this._deflate){let i=`${r}_max_window_bits`,o=typeof this.params[i]!="number"?Vs.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=Vs.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[Ge]=0,this._deflate[dt]=[],this._deflate.on("data",Vb)}this._deflate[Vt]=s,this._deflate.write(e),this._deflate.flush(Vs.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=rf.concat(this._deflate[dt],this._deflate[Ge]);t&&(i=new Hb(i.buffer,i.byteOffset,i.length-4)),this._deflate[Vt]=null,this._deflate[Ge]=0,this._deflate[dt]=[],t&&this.params[`${r}_no_context_takeover`]&&this._deflate.reset(),s(null,i)})}};cf.exports=Pa;function Vb(n){this[dt].push(n),this[Ge]+=n.length}function af(n){if(this[Ge]+=n.length,this[zr]._maxPayload<1||this[Ge]<=this[zr]._maxPayload){this[dt].push(n);return}this[Yt]=new RangeError("Max payload size exceeded"),this[Yt].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[Yt][of]=1009,this.removeListener("data",af),this.reset()}function Yb(n){if(this[zr]._inflate=null,this[Yt]){this[Vt](this[Yt]);return}n[of]=1007,this[Vt](n)}});var zt=I((cE,Qr)=>{"use strict";var{isUtf8:lf}=K("buffer"),{hasBlob:Jb}=Ke(),zb=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function Qb(n){return n>=1e3&&n<=1014&&n!==1004&&n!==1005&&n!==1006||n>=3e3&&n<=4999}function $a(n){let e=n.length,t=0;for(;t<e;)if((n[t]&128)===0)t++;else if((n[t]&224)===192){if(t+1===e||(n[t+1]&192)!==128||(n[t]&254)===192)return!1;t+=2}else if((n[t]&240)===224){if(t+2>=e||(n[t+1]&192)!==128||(n[t+2]&192)!==128||n[t]===224&&(n[t+1]&224)===128||n[t]===237&&(n[t+1]&224)===160)return!1;t+=3}else if((n[t]&248)===240){if(t+3>=e||(n[t+1]&192)!==128||(n[t+2]&192)!==128||(n[t+3]&192)!==128||n[t]===240&&(n[t+1]&240)===128||n[t]===244&&n[t+1]>143||n[t]>244)return!1;t+=4}else return!1;return!0}function Xb(n){return Jb&&typeof n=="object"&&typeof n.arrayBuffer=="function"&&typeof n.type=="string"&&typeof n.stream=="function"&&(n[Symbol.toStringTag]==="Blob"||n[Symbol.toStringTag]==="File")}Qr.exports={isBlob:Xb,isValidStatusCode:Qb,isValidUTF8:$a,tokenChars:zb};if(lf)Qr.exports.isValidUTF8=function(n){return n.length<24?$a(n):lf(n)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let n=K("utf-8-validate");Qr.exports.isValidUTF8=function(e){return e.length<32?$a(e):n(e)}}catch{}});var ja=I((lE,gf)=>{"use strict";var{Writable:Zb}=K("stream"),df=Jt(),{BINARY_TYPES:e_,EMPTY_BUFFER:uf,kStatusCode:t_,kWebSocket:s_}=Ke(),{concat:Ra,toArrayBuffer:n_,unmask:r_}=Ws(),{isValidStatusCode:i_,isValidUTF8:hf}=zt(),Xr=Buffer[Symbol.species],be=0,ff=1,pf=2,mf=3,Ba=4,Ua=5,Zr=6,qa=class extends Zb{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||e_[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[s_]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=be}_write(e,t,s){if(this._opcode===8&&this._state==be)return s();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(s)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let s=this._buffers[0];return this._buffers[0]=new Xr(s.buffer,s.byteOffset+e,s.length-e),new Xr(s.buffer,s.byteOffset,e)}let t=Buffer.allocUnsafe(e);do{let s=this._buffers[0],r=t.length-e;e>=s.length?t.set(this._buffers.shift(),r):(t.set(new Uint8Array(s.buffer,s.byteOffset,e),r),this._buffers[0]=new Xr(s.buffer,s.byteOffset+e,s.length-e)),e-=s.length}while(e>0);return t}startLoop(e){this._loop=!0;do switch(this._state){case be:this.getInfo(e);break;case ff:this.getPayloadLength16(e);break;case pf:this.getPayloadLength64(e);break;case mf:this.getMask();break;case Ba:this.getData(e);break;case Ua:case Zr:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let t=this.consume(2);if((t[0]&48)!==0){let r=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(r);return}let s=(t[0]&64)===64;if(s&&!this._extensions[df.extensionName]){let r=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(r);return}if(this._fin=(t[0]&128)===128,this._opcode=t[0]&15,this._payloadLength=t[1]&127,this._opcode===0){if(s){let r=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(r);return}if(!this._fragmented){let r=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");e(r);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let r=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(r);return}this._compressed=s}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let r=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");e(r);return}if(s){let r=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(r);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let r=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(r);return}}else{let r=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(r);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(t[1]&128)===128,this._isServer){if(!this._masked){let r=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");e(r);return}}else if(this._masked){let r=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");e(r);return}this._payloadLength===126?this._state=ff:this._payloadLength===127?this._state=pf:this.haveLength(e)}getPayloadLength16(e){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e)}getPayloadLength64(e){if(this._bufferedBytes<8){this._loop=!1;return}let t=this.consume(8),s=t.readUInt32BE(0);if(s>Math.pow(2,21)-1){let r=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(r);return}this._payloadLength=s*Math.pow(2,32)+t.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){let t=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(t);return}this._masked?this._state=mf:this._state=Ba}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=Ba}getData(e){let t=uf;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}t=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&r_(t,this._mask)}if(this._opcode>7){this.controlMessage(t,e);return}if(this._compressed){this._state=Ua,this.decompress(t,e);return}t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage(e)}decompress(e,t){this._extensions[df.extensionName].decompress(e,this._fin,(r,i)=>{if(r)return t(r);if(i.length){if(this._messageLength+=i.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");t(o);return}this._fragments.push(i)}this.dataMessage(t),this._state===be&&this.startLoop(t)})}dataMessage(e){if(!this._fin){this._state=be;return}let t=this._messageLength,s=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let r;this._binaryType==="nodebuffer"?r=Ra(s,t):this._binaryType==="arraybuffer"?r=n_(Ra(s,t)):this._binaryType==="blob"?r=new Blob(s):r=s,this._allowSynchronousEvents?(this.emit("message",r,!0),this._state=be):(this._state=Zr,setImmediate(()=>{this.emit("message",r,!0),this._state=be,this.startLoop(e)}))}else{let r=Ra(s,t);if(!this._skipUTF8Validation&&!hf(r)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===Ua||this._allowSynchronousEvents?(this.emit("message",r,!1),this._state=be):(this._state=Zr,setImmediate(()=>{this.emit("message",r,!1),this._state=be,this.startLoop(e)}))}}controlMessage(e,t){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,uf),this.end();else{let s=e.readUInt16BE(0);if(!i_(s)){let i=this.createError(RangeError,`invalid status code ${s}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");t(i);return}let r=new Xr(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!hf(r)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");t(i);return}this._loop=!1,this.emit("conclude",s,r),this.end()}this._state=be;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=be):(this._state=Zr,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=be,this.startLoop(t)}))}createError(e,t,s,r,i){this._loop=!1,this._errored=!0;let o=new e(s?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(o,this.createError),o.code=i,o[t_]=r,o}};gf.exports=qa});var Ga=I((uE,Sf)=>{"use strict";var{Duplex:dE}=K("stream"),{randomFillSync:o_}=K("crypto"),yf=Jt(),{EMPTY_BUFFER:a_,kWebSocket:c_,NOOP:l_}=Ke(),{isBlob:Qt,isValidStatusCode:d_}=zt(),{mask:wf,toBuffer:Tt}=Ws(),_e=Symbol("kByteLength"),u_=Buffer.alloc(4),ei=8*1024,It,Xt=ei,Ce=0,h_=1,f_=2,Fa=class n{constructor(e,t,s){this._extensions=t||{},s&&(this._generateMask=s,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=Ce,this.onerror=l_,this[c_]=void 0}static frame(e,t){let s,r=!1,i=2,o=!1;t.mask&&(s=t.maskBuffer||u_,t.generateMask?t.generateMask(s):(Xt===ei&&(It===void 0&&(It=Buffer.alloc(ei)),o_(It,0,ei),Xt=0),s[0]=It[Xt++],s[1]=It[Xt++],s[2]=It[Xt++],s[3]=It[Xt++]),o=(s[0]|s[1]|s[2]|s[3])===0,i=6);let a;typeof e=="string"?(!t.mask||o)&&t[_e]!==void 0?a=t[_e]:(e=Buffer.from(e),a=e.length):(a=e.length,r=t.mask&&t.readOnly&&!o);let l=a;a>=65536?(i+=8,l=127):a>125&&(i+=2,l=126);let c=Buffer.allocUnsafe(r?a+i:i);return c[0]=t.fin?t.opcode|128:t.opcode,t.rsv1&&(c[0]|=64),c[1]=l,l===126?c.writeUInt16BE(a,2):l===127&&(c[2]=c[3]=0,c.writeUIntBE(a,4,6)),t.mask?(c[1]|=128,c[i-4]=s[0],c[i-3]=s[1],c[i-2]=s[2],c[i-1]=s[3],o?[c,e]:r?(wf(e,s,c,i,a),[c]):(wf(e,s,e,0,a),[c,e])):[c,e]}close(e,t,s,r){let i;if(e===void 0)i=a_;else{if(typeof e!="number"||!d_(e))throw new TypeError("First argument must be a valid error code number");if(t===void 0||!t.length)i=Buffer.allocUnsafe(2),i.writeUInt16BE(e,0);else{let a=Buffer.byteLength(t);if(a>123)throw new RangeError("The message must not be greater than 123 bytes");i=Buffer.allocUnsafe(2+a),i.writeUInt16BE(e,0),typeof t=="string"?i.write(t,2):i.set(t,2)}}let o={[_e]:i.length,fin:!0,generateMask:this._generateMask,mask:s,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==Ce?this.enqueue([this.dispatch,i,!1,o,r]):this.sendFrame(n.frame(i,o),r)}ping(e,t,s){let r,i;if(typeof e=="string"?(r=Buffer.byteLength(e),i=!1):Qt(e)?(r=e.size,i=!1):(e=Tt(e),r=e.length,i=Tt.readOnly),r>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[_e]:r,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};Qt(e)?this._state!==Ce?this.enqueue([this.getBlobData,e,!1,o,s]):this.getBlobData(e,!1,o,s):this._state!==Ce?this.enqueue([this.dispatch,e,!1,o,s]):this.sendFrame(n.frame(e,o),s)}pong(e,t,s){let r,i;if(typeof e=="string"?(r=Buffer.byteLength(e),i=!1):Qt(e)?(r=e.size,i=!1):(e=Tt(e),r=e.length,i=Tt.readOnly),r>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[_e]:r,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};Qt(e)?this._state!==Ce?this.enqueue([this.getBlobData,e,!1,o,s]):this.getBlobData(e,!1,o,s):this._state!==Ce?this.enqueue([this.dispatch,e,!1,o,s]):this.sendFrame(n.frame(e,o),s)}send(e,t,s){let r=this._extensions[yf.extensionName],i=t.binary?2:1,o=t.compress,a,l;typeof e=="string"?(a=Buffer.byteLength(e),l=!1):Qt(e)?(a=e.size,l=!1):(e=Tt(e),a=e.length,l=Tt.readOnly),this._firstFragment?(this._firstFragment=!1,o&&r&&r.params[r._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=a>=r._threshold),this._compress=o):(o=!1,i=0),t.fin&&(this._firstFragment=!0);let c={[_e]:a,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:l,rsv1:o};Qt(e)?this._state!==Ce?this.enqueue([this.getBlobData,e,this._compress,c,s]):this.getBlobData(e,this._compress,c,s):this._state!==Ce?this.enqueue([this.dispatch,e,this._compress,c,s]):this.dispatch(e,this._compress,c,s)}getBlobData(e,t,s,r){this._bufferedBytes+=s[_e],this._state=f_,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let a=new Error("The socket was closed while the blob was being read");process.nextTick(Ka,this,a,r);return}this._bufferedBytes-=s[_e];let o=Tt(i);t?this.dispatch(o,t,s,r):(this._state=Ce,this.sendFrame(n.frame(o,s),r),this.dequeue())}).catch(i=>{process.nextTick(p_,this,i,r)})}dispatch(e,t,s,r){if(!t){this.sendFrame(n.frame(e,s),r);return}let i=this._extensions[yf.extensionName];this._bufferedBytes+=s[_e],this._state=h_,i.compress(e,s.fin,(o,a)=>{if(this._socket.destroyed){let l=new Error("The socket was closed while data was being compressed");Ka(this,l,r);return}this._bufferedBytes-=s[_e],this._state=Ce,s.readOnly=!1,this.sendFrame(n.frame(a,s),r),this.dequeue()})}dequeue(){for(;this._state===Ce&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][_e],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][_e],this._queue.push(e)}sendFrame(e,t){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],t),this._socket.uncork()):this._socket.write(e[0],t)}};Sf.exports=Fa;function Ka(n,e,t){typeof t=="function"&&t(e);for(let s=0;s<n._queue.length;s++){let r=n._queue[s],i=r[r.length-1];typeof i=="function"&&i(e)}}function p_(n,e,t){Ka(n,e,t),n.onerror(e)}});var Ef=I((hE,Cf)=>{"use strict";var{kForOnEventAttribute:Ys,kListener:Ha}=Ke(),bf=Symbol("kCode"),_f=Symbol("kData"),kf=Symbol("kError"),vf=Symbol("kMessage"),Tf=Symbol("kReason"),Zt=Symbol("kTarget"),If=Symbol("kType"),Af=Symbol("kWasClean"),He=class{constructor(e){this[Zt]=null,this[If]=e}get target(){return this[Zt]}get type(){return this[If]}};Object.defineProperty(He.prototype,"target",{enumerable:!0});Object.defineProperty(He.prototype,"type",{enumerable:!0});var At=class extends He{constructor(e,t={}){super(e),this[bf]=t.code===void 0?0:t.code,this[Tf]=t.reason===void 0?"":t.reason,this[Af]=t.wasClean===void 0?!1:t.wasClean}get code(){return this[bf]}get reason(){return this[Tf]}get wasClean(){return this[Af]}};Object.defineProperty(At.prototype,"code",{enumerable:!0});Object.defineProperty(At.prototype,"reason",{enumerable:!0});Object.defineProperty(At.prototype,"wasClean",{enumerable:!0});var es=class extends He{constructor(e,t={}){super(e),this[kf]=t.error===void 0?null:t.error,this[vf]=t.message===void 0?"":t.message}get error(){return this[kf]}get message(){return this[vf]}};Object.defineProperty(es.prototype,"error",{enumerable:!0});Object.defineProperty(es.prototype,"message",{enumerable:!0});var Js=class extends He{constructor(e,t={}){super(e),this[_f]=t.data===void 0?null:t.data}get data(){return this[_f]}};Object.defineProperty(Js.prototype,"data",{enumerable:!0});var m_={addEventListener(n,e,t={}){for(let r of this.listeners(n))if(!t[Ys]&&r[Ha]===e&&!r[Ys])return;let s;if(n==="message")s=function(i,o){let a=new Js("message",{data:o?i:i.toString()});a[Zt]=this,ti(e,this,a)};else if(n==="close")s=function(i,o){let a=new At("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});a[Zt]=this,ti(e,this,a)};else if(n==="error")s=function(i){let o=new es("error",{error:i,message:i.message});o[Zt]=this,ti(e,this,o)};else if(n==="open")s=function(){let i=new He("open");i[Zt]=this,ti(e,this,i)};else return;s[Ys]=!!t[Ys],s[Ha]=e,t.once?this.once(n,s):this.on(n,s)},removeEventListener(n,e){for(let t of this.listeners(n))if(t[Ha]===e&&!t[Ys]){this.removeListener(n,t);break}}};Cf.exports={CloseEvent:At,ErrorEvent:es,Event:He,EventTarget:m_,MessageEvent:Js};function ti(n,e,t){typeof n=="object"&&n.handleEvent?n.handleEvent.call(n,t):n.call(e,t)}});var si=I((fE,Nf)=>{"use strict";var{tokenChars:zs}=zt();function Me(n,e,t){n[e]===void 0?n[e]=[t]:n[e].push(t)}function g_(n){let e=Object.create(null),t=Object.create(null),s=!1,r=!1,i=!1,o,a,l=-1,c=-1,d=-1,u=0;for(;u<n.length;u++)if(c=n.charCodeAt(u),o===void 0)if(d===-1&&zs[c]===1)l===-1&&(l=u);else if(u!==0&&(c===32||c===9))d===-1&&l!==-1&&(d=u);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u);let p=n.slice(l,d);c===44?(Me(e,p,t),t=Object.create(null)):o=p,l=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);else if(a===void 0)if(d===-1&&zs[c]===1)l===-1&&(l=u);else if(c===32||c===9)d===-1&&l!==-1&&(d=u);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u),Me(t,n.slice(l,d),!0),c===44&&(Me(e,o,t),t=Object.create(null),o=void 0),l=d=-1}else if(c===61&&l!==-1&&d===-1)a=n.slice(l,u),l=d=-1;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(r){if(zs[c]!==1)throw new SyntaxError(`Unexpected character at index ${u}`);l===-1?l=u:s||(s=!0),r=!1}else if(i)if(zs[c]===1)l===-1&&(l=u);else if(c===34&&l!==-1)i=!1,d=u;else if(c===92)r=!0;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(c===34&&n.charCodeAt(u-1)===61)i=!0;else if(d===-1&&zs[c]===1)l===-1&&(l=u);else if(l!==-1&&(c===32||c===9))d===-1&&(d=u);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u);let p=n.slice(l,d);s&&(p=p.replace(/\\/g,""),s=!1),Me(t,a,p),c===44&&(Me(e,o,t),t=Object.create(null),o=void 0),a=void 0,l=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);if(l===-1||i||c===32||c===9)throw new SyntaxError("Unexpected end of input");d===-1&&(d=u);let h=n.slice(l,d);return o===void 0?Me(e,h,t):(a===void 0?Me(t,h,!0):s?Me(t,a,h.replace(/\\/g,"")):Me(t,a,h),Me(e,o,t)),e}function y_(n){return Object.keys(n).map(e=>{let t=n[e];return Array.isArray(t)||(t=[t]),t.map(s=>[e].concat(Object.keys(s).map(r=>{let i=s[r];return Array.isArray(i)||(i=[i]),i.map(o=>o===!0?r:`${r}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}Nf.exports={format:y_,parse:g_}});var oi=I((gE,jf)=>{"use strict";var w_=K("events"),S_=K("https"),b_=K("http"),Mf=K("net"),__=K("tls"),{randomBytes:k_,createHash:v_}=K("crypto"),{Duplex:pE,Readable:mE}=K("stream"),{URL:Wa}=K("url"),ut=Jt(),T_=ja(),I_=Ga(),{isBlob:A_}=zt(),{BINARY_TYPES:Of,CLOSE_TIMEOUT:C_,EMPTY_BUFFER:ni,GUID:E_,kForOnEventAttribute:Va,kListener:N_,kStatusCode:O_,kWebSocket:re,NOOP:Df}=Ke(),{EventTarget:{addEventListener:x_,removeEventListener:M_}}=Ef(),{format:D_,parse:L_}=si(),{toBuffer:P_}=Ws(),Lf=Symbol("kAborted"),Ya=[8,13],We=["CONNECTING","OPEN","CLOSING","CLOSED"],$_=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,V=class n extends w_{constructor(e,t,s){super(),this._binaryType=Of[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=ni,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=n.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,t===void 0?t=[]:Array.isArray(t)||(typeof t=="object"&&t!==null?(s=t,t=[]):t=[t]),Pf(this,e,t,s)):(this._autoPong=s.autoPong,this._closeTimeout=s.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){Of.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(e,t,s){let r=new T_({allowSynchronousEvents:s.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation}),i=new I_(e,this._extensions,s.generateMask);this._receiver=r,this._sender=i,this._socket=e,r[re]=this,i[re]=this,e[re]=this,r.on("conclude",U_),r.on("drain",q_),r.on("error",j_),r.on("message",F_),r.on("ping",K_),r.on("pong",G_),i.onerror=H_,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",Bf),e.on("data",ii),e.on("end",Uf),e.on("error",qf),this._readyState=n.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=n.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[ut.extensionName]&&this._extensions[ut.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=n.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==n.CLOSED){if(this.readyState===n.CONNECTING){ye(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===n.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=n.CLOSING,this._sender.close(e,t,!this._isServer,s=>{s||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),Rf(this)}}pause(){this.readyState===n.CONNECTING||this.readyState===n.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,t,s){if(this.readyState===n.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(s=e,e=t=void 0):typeof t=="function"&&(s=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==n.OPEN){Ja(this,e,s);return}t===void 0&&(t=!this._isServer),this._sender.ping(e||ni,t,s)}pong(e,t,s){if(this.readyState===n.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(s=e,e=t=void 0):typeof t=="function"&&(s=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==n.OPEN){Ja(this,e,s);return}t===void 0&&(t=!this._isServer),this._sender.pong(e||ni,t,s)}resume(){this.readyState===n.CONNECTING||this.readyState===n.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,t,s){if(this.readyState===n.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof t=="function"&&(s=t,t={}),typeof e=="number"&&(e=e.toString()),this.readyState!==n.OPEN){Ja(this,e,s);return}let r={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[ut.extensionName]||(r.compress=!1),this._sender.send(e||ni,r,s)}terminate(){if(this.readyState!==n.CLOSED){if(this.readyState===n.CONNECTING){ye(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=n.CLOSING,this._socket.destroy())}}};Object.defineProperty(V,"CONNECTING",{enumerable:!0,value:We.indexOf("CONNECTING")});Object.defineProperty(V.prototype,"CONNECTING",{enumerable:!0,value:We.indexOf("CONNECTING")});Object.defineProperty(V,"OPEN",{enumerable:!0,value:We.indexOf("OPEN")});Object.defineProperty(V.prototype,"OPEN",{enumerable:!0,value:We.indexOf("OPEN")});Object.defineProperty(V,"CLOSING",{enumerable:!0,value:We.indexOf("CLOSING")});Object.defineProperty(V.prototype,"CLOSING",{enumerable:!0,value:We.indexOf("CLOSING")});Object.defineProperty(V,"CLOSED",{enumerable:!0,value:We.indexOf("CLOSED")});Object.defineProperty(V.prototype,"CLOSED",{enumerable:!0,value:We.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(n=>{Object.defineProperty(V.prototype,n,{enumerable:!0})});["open","error","close","message"].forEach(n=>{Object.defineProperty(V.prototype,`on${n}`,{enumerable:!0,get(){for(let e of this.listeners(n))if(e[Va])return e[N_];return null},set(e){for(let t of this.listeners(n))if(t[Va]){this.removeListener(n,t);break}typeof e=="function"&&this.addEventListener(n,e,{[Va]:!0})}})});V.prototype.addEventListener=x_;V.prototype.removeEventListener=M_;jf.exports=V;function Pf(n,e,t,s){let r={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:C_,protocolVersion:Ya[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...s,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(n._autoPong=r.autoPong,n._closeTimeout=r.closeTimeout,!Ya.includes(r.protocolVersion))throw new RangeError(`Unsupported protocol version: ${r.protocolVersion} (supported versions: ${Ya.join(", ")})`);let i;if(e instanceof Wa)i=e;else try{i=new Wa(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),n._url=i.href;let o=i.protocol==="wss:",a=i.protocol==="ws+unix:",l;if(i.protocol!=="ws:"&&!o&&!a?l=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:a&&!i.pathname?l="The URL's pathname is empty":i.hash&&(l="The URL contains a fragment identifier"),l){let f=new SyntaxError(l);if(n._redirects===0)throw f;ri(n,f);return}let c=o?443:80,d=k_(16).toString("base64"),u=o?S_.request:b_.request,h=new Set,p;if(r.createConnection=r.createConnection||(o?B_:R_),r.defaultPort=r.defaultPort||c,r.port=i.port||c,r.host=i.hostname.startsWith("[")?i.hostname.slice(1,-1):i.hostname,r.headers={...r.headers,"Sec-WebSocket-Version":r.protocolVersion,"Sec-WebSocket-Key":d,Connection:"Upgrade",Upgrade:"websocket"},r.path=i.pathname+i.search,r.timeout=r.handshakeTimeout,r.perMessageDeflate&&(p=new ut({...r.perMessageDeflate,isServer:!1,maxPayload:r.maxPayload}),r.headers["Sec-WebSocket-Extensions"]=D_({[ut.extensionName]:p.offer()})),t.length){for(let f of t){if(typeof f!="string"||!$_.test(f)||h.has(f))throw new SyntaxError("An invalid or duplicated subprotocol was specified");h.add(f)}r.headers["Sec-WebSocket-Protocol"]=t.join(",")}if(r.origin&&(r.protocolVersion<13?r.headers["Sec-WebSocket-Origin"]=r.origin:r.headers.Origin=r.origin),(i.username||i.password)&&(r.auth=`${i.username}:${i.password}`),a){let f=r.path.split(":");r.socketPath=f[0],r.path=f[1]}let g;if(r.followRedirects){if(n._redirects===0){n._originalIpc=a,n._originalSecure=o,n._originalHostOrSocketPath=a?r.socketPath:i.host;let f=s&&s.headers;if(s={...s,headers:{}},f)for(let[y,w]of Object.entries(f))s.headers[y.toLowerCase()]=w}else if(n.listenerCount("redirect")===0){let f=a?n._originalIpc?r.socketPath===n._originalHostOrSocketPath:!1:n._originalIpc?!1:i.host===n._originalHostOrSocketPath;(!f||n._originalSecure&&!o)&&(delete r.headers.authorization,delete r.headers.cookie,f||delete r.headers.host,r.auth=void 0)}r.auth&&!s.headers.authorization&&(s.headers.authorization="Basic "+Buffer.from(r.auth).toString("base64")),g=n._req=u(r),n._redirects&&n.emit("redirect",n.url,g)}else g=n._req=u(r);r.timeout&&g.on("timeout",()=>{ye(n,g,"Opening handshake has timed out")}),g.on("error",f=>{g===null||g[Lf]||(g=n._req=null,ri(n,f))}),g.on("response",f=>{let y=f.headers.location,w=f.statusCode;if(y&&r.followRedirects&&w>=300&&w<400){if(++n._redirects>r.maxRedirects){ye(n,g,"Maximum redirects exceeded");return}g.abort();let S;try{S=new Wa(y,e)}catch{let A=new SyntaxError(`Invalid URL: ${y}`);ri(n,A);return}Pf(n,S,t,s)}else n.emit("unexpected-response",g,f)||ye(n,g,`Unexpected server response: ${f.statusCode}`)}),g.on("upgrade",(f,y,w)=>{if(n.emit("upgrade",f),n.readyState!==V.CONNECTING)return;g=n._req=null;let S=f.headers.upgrade;if(S===void 0||S.toLowerCase()!=="websocket"){ye(n,y,"Invalid Upgrade header");return}let b=v_("sha1").update(d+E_).digest("base64");if(f.headers["sec-websocket-accept"]!==b){ye(n,y,"Invalid Sec-WebSocket-Accept header");return}let A=f.headers["sec-websocket-protocol"],v;if(A!==void 0?h.size?h.has(A)||(v="Server sent an invalid subprotocol"):v="Server sent a subprotocol but none was requested":h.size&&(v="Server sent no subprotocol"),v){ye(n,y,v);return}A&&(n._protocol=A);let C=f.headers["sec-websocket-extensions"];if(C!==void 0){if(!p){ye(n,y,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let M;try{M=L_(C)}catch{ye(n,y,"Invalid Sec-WebSocket-Extensions header");return}let _=Object.keys(M);if(_.length!==1||_[0]!==ut.extensionName){ye(n,y,"Server indicated an extension that was not requested");return}try{p.accept(M[ut.extensionName])}catch{ye(n,y,"Invalid Sec-WebSocket-Extensions header");return}n._extensions[ut.extensionName]=p}n.setSocket(y,w,{allowSynchronousEvents:r.allowSynchronousEvents,generateMask:r.generateMask,maxPayload:r.maxPayload,skipUTF8Validation:r.skipUTF8Validation})}),r.finishRequest?r.finishRequest(g,n):g.end()}function ri(n,e){n._readyState=V.CLOSING,n._errorEmitted=!0,n.emit("error",e),n.emitClose()}function R_(n){return n.path=n.socketPath,Mf.connect(n)}function B_(n){return n.path=void 0,!n.servername&&n.servername!==""&&(n.servername=Mf.isIP(n.host)?"":n.host),__.connect(n)}function ye(n,e,t){n._readyState=V.CLOSING;let s=new Error(t);Error.captureStackTrace(s,ye),e.setHeader?(e[Lf]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(ri,n,s)):(e.destroy(s),e.once("error",n.emit.bind(n,"error")),e.once("close",n.emitClose.bind(n)))}function Ja(n,e,t){if(e){let s=A_(e)?e.size:P_(e).length;n._socket?n._sender._bufferedBytes+=s:n._bufferedAmount+=s}if(t){let s=new Error(`WebSocket is not open: readyState ${n.readyState} (${We[n.readyState]})`);process.nextTick(t,s)}}function U_(n,e){let t=this[re];t._closeFrameReceived=!0,t._closeMessage=e,t._closeCode=n,t._socket[re]!==void 0&&(t._socket.removeListener("data",ii),process.nextTick($f,t._socket),n===1005?t.close():t.close(n,e))}function q_(){let n=this[re];n.isPaused||n._socket.resume()}function j_(n){let e=this[re];e._socket[re]!==void 0&&(e._socket.removeListener("data",ii),process.nextTick($f,e._socket),e.close(n[O_])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",n))}function xf(){this[re].emitClose()}function F_(n,e){this[re].emit("message",n,e)}function K_(n){let e=this[re];e._autoPong&&e.pong(n,!this._isServer,Df),e.emit("ping",n)}function G_(n){this[re].emit("pong",n)}function $f(n){n.resume()}function H_(n){let e=this[re];e.readyState!==V.CLOSED&&(e.readyState===V.OPEN&&(e._readyState=V.CLOSING,Rf(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",n)))}function Rf(n){n._closeTimer=setTimeout(n._socket.destroy.bind(n._socket),n._closeTimeout)}function Bf(){let n=this[re];if(this.removeListener("close",Bf),this.removeListener("data",ii),this.removeListener("end",Uf),n._readyState=V.CLOSING,!this._readableState.endEmitted&&!n._closeFrameReceived&&!n._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);n._receiver.write(e)}n._receiver.end(),this[re]=void 0,clearTimeout(n._closeTimer),n._receiver._writableState.finished||n._receiver._writableState.errorEmitted?n.emitClose():(n._receiver.on("error",xf),n._receiver.on("finish",xf))}function ii(n){this[re]._receiver.write(n)||this.pause()}function Uf(){let n=this[re];n._readyState=V.CLOSING,n._receiver.end(),this.end()}function qf(){let n=this[re];this.removeListener("error",qf),this.on("error",Df),n&&(n._readyState=V.CLOSING,this.destroy())}});var Hf=I((wE,Gf)=>{"use strict";var yE=oi(),{Duplex:W_}=K("stream");function Ff(n){n.emit("close")}function V_(){!this.destroyed&&this._writableState.finished&&this.destroy()}function Kf(n){this.removeListener("error",Kf),this.destroy(),this.listenerCount("error")===0&&this.emit("error",n)}function Y_(n,e){let t=!0,s=new W_({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return n.on("message",function(i,o){let a=!o&&s._readableState.objectMode?i.toString():i;s.push(a)||n.pause()}),n.once("error",function(i){s.destroyed||(t=!1,s.destroy(i))}),n.once("close",function(){s.destroyed||s.push(null)}),s._destroy=function(r,i){if(n.readyState===n.CLOSED){i(r),process.nextTick(Ff,s);return}let o=!1;n.once("error",function(l){o=!0,i(l)}),n.once("close",function(){o||i(r),process.nextTick(Ff,s)}),t&&n.terminate()},s._final=function(r){if(n.readyState===n.CONNECTING){n.once("open",function(){s._final(r)});return}n._socket!==null&&(n._socket._writableState.finished?(r(),s._readableState.endEmitted&&s.destroy()):(n._socket.once("finish",function(){r()}),n.close()))},s._read=function(){n.isPaused&&n.resume()},s._write=function(r,i,o){if(n.readyState===n.CONNECTING){n.once("open",function(){s._write(r,i,o)});return}n.send(r,o)},s.on("end",V_),s.on("error",Kf),s}Gf.exports=Y_});var za=I((SE,Wf)=>{"use strict";var{tokenChars:J_}=zt();function z_(n){let e=new Set,t=-1,s=-1,r=0;for(r;r<n.length;r++){let o=n.charCodeAt(r);if(s===-1&&J_[o]===1)t===-1&&(t=r);else if(r!==0&&(o===32||o===9))s===-1&&t!==-1&&(s=r);else if(o===44){if(t===-1)throw new SyntaxError(`Unexpected character at index ${r}`);s===-1&&(s=r);let a=n.slice(t,s);if(e.has(a))throw new SyntaxError(`The "${a}" subprotocol is duplicated`);e.add(a),t=s=-1}else throw new SyntaxError(`Unexpected character at index ${r}`)}if(t===-1||s!==-1)throw new SyntaxError("Unexpected end of input");let i=n.slice(t,r);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}Wf.exports={parse:z_}});var Zf=I((_E,Xf)=>{"use strict";var Q_=K("events"),ai=K("http"),{Duplex:bE}=K("stream"),{createHash:X_}=K("crypto"),Vf=si(),Ct=Jt(),Z_=za(),ek=oi(),{CLOSE_TIMEOUT:tk,GUID:sk,kWebSocket:nk}=Ke(),rk=/^[+/0-9A-Za-z]{22}==$/,Yf=0,Jf=1,Qf=2,Qa=class extends Q_{constructor(e,t){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:tk,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:ek,...e},e.port==null&&!e.server&&!e.noServer||e.port!=null&&(e.server||e.noServer)||e.server&&e.noServer)throw new TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(e.port!=null?(this._server=ai.createServer((s,r)=>{let i=ai.STATUS_CODES[426];r.writeHead(426,{"Content-Length":i.length,"Content-Type":"text/plain"}),r.end(i)}),this._server.listen(e.port,e.host,e.backlog,t)):e.server&&(this._server=e.server),this._server){let s=this.emit.bind(this,"connection");this._removeListeners=ik(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(r,i,o)=>{this.handleUpgrade(r,i,o,s)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=Yf}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(e){if(this._state===Qf){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(Qs,this);return}if(e&&this.once("close",e),this._state!==Jf)if(this._state=Jf,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients?this.clients.size?this._shouldEmitClose=!0:process.nextTick(Qs,this):process.nextTick(Qs,this);else{let t=this._server;this._removeListeners(),this._removeListeners=this._server=null,t.close(()=>{Qs(this)})}}shouldHandle(e){if(this.options.path){let t=e.url.indexOf("?");if((t!==-1?e.url.slice(0,t):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,t,s,r){t.on("error",zf);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,a=+e.headers["sec-websocket-version"];if(e.method!=="GET"){Et(this,e,t,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){Et(this,e,t,400,"Invalid Upgrade header");return}if(i===void 0||!rk.test(i)){Et(this,e,t,400,"Missing or invalid Sec-WebSocket-Key header");return}if(a!==13&&a!==8){Et(this,e,t,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){Xs(t,400);return}let l=e.headers["sec-websocket-protocol"],c=new Set;if(l!==void 0)try{c=Z_.parse(l)}catch{Et(this,e,t,400,"Invalid Sec-WebSocket-Protocol header");return}let d=e.headers["sec-websocket-extensions"],u={};if(this.options.perMessageDeflate&&d!==void 0){let h=new Ct({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let p=Vf.parse(d);p[Ct.extensionName]&&(h.accept(p[Ct.extensionName]),u[Ct.extensionName]=h)}catch{Et(this,e,t,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let h={origin:e.headers[`${a===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(h,(p,g,f,y)=>{if(!p)return Xs(t,g||401,f,y);this.completeUpgrade(u,i,c,e,t,s,r)});return}if(!this.options.verifyClient(h))return Xs(t,401)}this.completeUpgrade(u,i,c,e,t,s,r)}completeUpgrade(e,t,s,r,i,o,a){if(!i.readable||!i.writable)return i.destroy();if(i[nk])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>Yf)return Xs(i,503);let c=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${X_("sha1").update(t+sk).digest("base64")}`],d=new this.options.WebSocket(null,void 0,this.options);if(s.size){let u=this.options.handleProtocols?this.options.handleProtocols(s,r):s.values().next().value;u&&(c.push(`Sec-WebSocket-Protocol: ${u}`),d._protocol=u)}if(e[Ct.extensionName]){let u=e[Ct.extensionName].params,h=Vf.format({[Ct.extensionName]:[u]});c.push(`Sec-WebSocket-Extensions: ${h}`),d._extensions=e}this.emit("headers",c,r),i.write(c.concat(`\r
210
210
  `).join(`\r
211
- `)),i.removeListener("error",Hf),d.setSocket(i,o,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(d),d.on("close",()=>{this.clients.delete(d),this._shouldEmitClose&&!this.clients.size&&process.nextTick(Xs,this)})),a(d,r)}};Vf.exports=za;function ek(n,e){for(let t of Object.keys(e))n.on(t,e[t]);return function(){for(let s of Object.keys(e))n.removeListener(s,e[s])}}function Xs(n){n._state=Wf,n.emit("close")}function Hf(){this.destroy()}function Zs(n,e,t,s){t=t||ci.STATUS_CODES[e],s={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(t),...s},n.once("finish",n.destroy),n.end(`HTTP/1.1 ${e} ${ci.STATUS_CODES[e]}\r
211
+ `)),i.removeListener("error",zf),d.setSocket(i,o,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(d),d.on("close",()=>{this.clients.delete(d),this._shouldEmitClose&&!this.clients.size&&process.nextTick(Qs,this)})),a(d,r)}};Xf.exports=Qa;function ik(n,e){for(let t of Object.keys(e))n.on(t,e[t]);return function(){for(let s of Object.keys(e))n.removeListener(s,e[s])}}function Qs(n){n._state=Qf,n.emit("close")}function zf(){this.destroy()}function Xs(n,e,t,s){t=t||ai.STATUS_CODES[e],s={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(t),...s},n.once("finish",n.destroy),n.end(`HTTP/1.1 ${e} ${ai.STATUS_CODES[e]}\r
212
212
  `+Object.keys(s).map(r=>`${r}: ${s[r]}`).join(`\r
213
213
  `)+`\r
214
214
  \r
215
- `+t)}function Ct(n,e,t,s,r,i){if(n.listenerCount("wsClientError")){let o=new Error(r);Error.captureStackTrace(o,Ct),n.emit("wsClientError",o,t,e)}else Zs(t,s,r,i)}});var tk,sk,nk,rk,ik,ok,en,Qa,Jf=q(()=>{tk=ve(qf(),1),sk=ve(ni(),1),nk=ve(Qt(),1),rk=ve(qa(),1),ik=ve(Ka(),1),ok=ve(Ja(),1),en=ve(ai(),1),Qa=ve(Yf(),1)});function zf(n){let e;try{e=JSON.parse(n)}catch{return null}if(typeof e!="object"||e===null)return null;let t=e;switch(t.type){case"message":return typeof t.text!="string"||typeof t.id!="string"?null:typeof t.channelId=="string"?{type:"message",channelId:t.channelId,text:t.text,threadId:typeof t.threadId=="string"?t.threadId:void 0,id:t.id}:{type:"message",text:t.text,id:t.id};case"image":return typeof t.data!="string"||typeof t.filename!="string"||typeof t.id!="string"?null:typeof t.channelId=="string"?{type:"image",channelId:t.channelId,data:t.data,filename:t.filename,id:t.id}:{type:"image",data:t.data,filename:t.filename,id:t.id};case"file":return typeof t.channelId=="string"&&typeof t.data=="string"&&typeof t.filename=="string"&&typeof t.mimetype=="string"&&typeof t.id=="string"?{type:"file",channelId:t.channelId,data:t.data,filename:t.filename,mimetype:t.mimetype,id:t.id}:null;case"ping":return{type:"ping"};case"join":return typeof t.channelId=="string"&&typeof t.id=="string"?{type:"join",channelId:t.channelId,id:t.id}:null;case"leave":return typeof t.channelId=="string"&&typeof t.id=="string"?{type:"leave",channelId:t.channelId,id:t.id}:null;case"command":return typeof t.channelId=="string"&&typeof t.name=="string"&&Array.isArray(t.args)&&typeof t.id=="string"?{type:"command",channelId:t.channelId,name:t.name,args:t.args.map(String),id:t.id}:null;case"command_list":return typeof t.id=="string"?{type:"command_list",id:t.id}:null;case"channel_list":return typeof t.id=="string"?{type:"channel_list",id:t.id}:null;case"history":return typeof t.channelId=="string"&&typeof t.id=="string"?{type:"history",channelId:t.channelId,before:typeof t.before=="string"?t.before:void 0,limit:typeof t.limit=="number"?t.limit:void 0,id:t.id}:null;case"agent_list":return typeof t.id=="string"?{type:"agent_list",id:t.id}:null;default:return null}}function Qf(n){return(n.type==="message"||n.type==="image"||n.type==="file")&&"channelId"in n}var Xf=q(()=>{"use strict"});var ep={};Pe(ep,{WsAdapter:()=>Xa});import{createServer as ak}from"node:http";import{randomUUID as tn}from"node:crypto";function Zf(n){let e=n.split(".").pop()?.toLowerCase();return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",heic:"image/heic"}[e??""]??"image/jpeg"}var ke,Xa,tp=q(()=>{"use strict";Jf();O();Xf();js();ke=I("ws-adapter"),Xa=class{id="ws";kind="app";port;server;wss;connections=new Map;pendingMessages=new Map;onWorkItem;teamStore;commandRegistry;agentRegistry;agentManager;constructor(e,t){this.port=e,this.teamStore=t.teamStore,this.commandRegistry=t.commandRegistry,this.agentRegistry=t.agentRegistry,this.agentManager=t.agentManager}async start(e){this.onWorkItem=e,this.server=ak(async(t,s)=>{if(s.setHeader("Access-Control-Allow-Origin","*"),s.setHeader("Access-Control-Allow-Methods","POST, GET, PUT, DELETE, OPTIONS"),s.setHeader("Access-Control-Allow-Headers","Content-Type, Authorization"),t.method==="OPTIONS"){s.writeHead(204),s.end();return}let r=new URL(t.url??"/",`http://localhost:${this.port}`);if(t.method==="GET"&&r.pathname==="/health"){s.writeHead(200,{"Content-Type":"application/json"}),s.end(JSON.stringify({status:"ok",connections:this.connections.size}));return}s.writeHead(404),s.end("Not found")}),this.wss=new Qa.default({noServer:!0,maxPayload:10*1024*1024}),this.server.on("upgrade",(t,s,r)=>{let i=new URL(t.url??"/",`http://localhost:${this.port}`);if(i.searchParams.get("internal")!=="1"){s.write(`HTTP/1.1 404 Not Found\r
215
+ `+t)}function Et(n,e,t,s,r,i){if(n.listenerCount("wsClientError")){let o=new Error(r);Error.captureStackTrace(o,Et),n.emit("wsClientError",o,t,e)}else Xs(t,s,r,i)}});var ok,ak,ck,lk,dk,uk,Zs,Xa,ep=F(()=>{ok=ve(Hf(),1),ak=ve(si(),1),ck=ve(Jt(),1),lk=ve(ja(),1),dk=ve(Ga(),1),uk=ve(za(),1),Zs=ve(oi(),1),Xa=ve(Zf(),1)});function tp(n){let e;try{e=JSON.parse(n)}catch{return null}if(typeof e!="object"||e===null)return null;let t=e;switch(t.type){case"message":return typeof t.text!="string"||typeof t.id!="string"?null:typeof t.channelId=="string"?{type:"message",channelId:t.channelId,text:t.text,threadId:typeof t.threadId=="string"?t.threadId:void 0,id:t.id}:{type:"message",text:t.text,id:t.id};case"image":return typeof t.data!="string"||typeof t.filename!="string"||typeof t.id!="string"?null:typeof t.channelId=="string"?{type:"image",channelId:t.channelId,data:t.data,filename:t.filename,id:t.id}:{type:"image",data:t.data,filename:t.filename,id:t.id};case"file":return typeof t.channelId=="string"&&typeof t.data=="string"&&typeof t.filename=="string"&&typeof t.mimetype=="string"&&typeof t.id=="string"?{type:"file",channelId:t.channelId,data:t.data,filename:t.filename,mimetype:t.mimetype,id:t.id}:null;case"ping":return{type:"ping"};case"join":return typeof t.channelId=="string"&&typeof t.id=="string"?{type:"join",channelId:t.channelId,id:t.id}:null;case"leave":return typeof t.channelId=="string"&&typeof t.id=="string"?{type:"leave",channelId:t.channelId,id:t.id}:null;case"command":return typeof t.channelId=="string"&&typeof t.name=="string"&&Array.isArray(t.args)&&typeof t.id=="string"?{type:"command",channelId:t.channelId,name:t.name,args:t.args.map(String),id:t.id}:null;case"command_list":return typeof t.id=="string"?{type:"command_list",id:t.id}:null;case"channel_list":return typeof t.id=="string"?{type:"channel_list",id:t.id}:null;case"history":return typeof t.channelId=="string"&&typeof t.id=="string"?{type:"history",channelId:t.channelId,before:typeof t.before=="string"?t.before:void 0,limit:typeof t.limit=="number"?t.limit:void 0,id:t.id}:null;case"agent_list":return typeof t.id=="string"?{type:"agent_list",id:t.id}:null;default:return null}}function sp(n){return(n.type==="message"||n.type==="image"||n.type==="file")&&"channelId"in n}var np=F(()=>{"use strict"});var ip={};Pe(ip,{WsAdapter:()=>Za});import{createServer as hk}from"node:http";import{randomUUID as en}from"node:crypto";function rp(n){let e=n.split(".").pop()?.toLowerCase();return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",heic:"image/heic"}[e??""]??"image/jpeg"}var ke,Za,op=F(()=>{"use strict";ep();O();np();qs();ke=T("ws-adapter"),Za=class{id="ws";kind="app";port;server;wss;connections=new Map;pendingMessages=new Map;onWorkItem;teamStore;commandRegistry;agentRegistry;agentManager;constructor(e,t){this.port=e,this.teamStore=t.teamStore,this.commandRegistry=t.commandRegistry,this.agentRegistry=t.agentRegistry,this.agentManager=t.agentManager}async start(e){this.onWorkItem=e,this.server=hk(async(t,s)=>{if(s.setHeader("Access-Control-Allow-Origin","*"),s.setHeader("Access-Control-Allow-Methods","POST, GET, PUT, DELETE, OPTIONS"),s.setHeader("Access-Control-Allow-Headers","Content-Type, Authorization"),t.method==="OPTIONS"){s.writeHead(204),s.end();return}let r=new URL(t.url??"/",`http://localhost:${this.port}`);if(t.method==="GET"&&r.pathname==="/health"){s.writeHead(200,{"Content-Type":"application/json"}),s.end(JSON.stringify({status:"ok",connections:this.connections.size}));return}s.writeHead(404),s.end("Not found")}),this.wss=new Xa.default({noServer:!0,maxPayload:10*1024*1024}),this.server.on("upgrade",(t,s,r)=>{let i=new URL(t.url??"/",`http://localhost:${this.port}`);if(i.searchParams.get("internal")!=="1"){s.write(`HTTP/1.1 404 Not Found\r
216
216
  \r
217
217
  `),s.destroy();return}let o=t.socket.remoteAddress??"";if(!(o==="127.0.0.1"||o==="::1"||o==="::ffff:127.0.0.1")){s.write(`HTTP/1.1 403 Forbidden\r
218
218
  \r
219
219
  `),s.destroy();return}let l=i.searchParams.get("deviceId"),c=i.searchParams.get("label")??i.searchParams.get("name"),d=i.searchParams.get("user")??void 0;if(!l||!c){s.write(`HTTP/1.1 400 Bad Request\r
220
220
  \r
221
- `),s.destroy();return}let u=i.searchParams.get("origin")??void 0,h={_id:l,label:c,user:d,defaultAgentId:"",origin:u};this.wss.handleUpgrade(t,s,r,p=>{this.wss.emit("connection",p,t,h)})}),this.wss.on("connection",(t,s,r)=>{let i=r._id;ke.info("Device connected",{deviceId:i,label:r.label});let o=this.pendingMessages.get(i);if(o?.length){ke.info("Draining pending messages",{deviceId:i,count:o.length});for(let l of o)this.send(t,l);this.pendingMessages.delete(i)}let a=this.connections.get(i);a&&a.close(1e3,"Replaced by new connection"),this.connections.set(i,t),t.on("message",async l=>{try{let c=zf(l.toString());if(!c){this.send(t,{type:"error",message:"Invalid message format"});return}if(c.type==="ping")return;if(c.type==="command"){await this.handleCommand(t,c,r,i);return}if(c.type==="command_list"){await this.handleCommandList(t,c);return}if(c.type==="channel_list"){await this.handleChannelList(t,c,i);return}if(c.type==="history"){await this.handleHistory(t,c,i);return}if(c.type==="join"){await this.handleJoin(t,c,i);return}if(c.type==="leave"){await this.handleLeave(t,c,i);return}if(c.type==="agent_list"){let d=this.buildAgentList();this.send(t,{type:"agent_list",agents:d,id:c.id});return}if(Qf(c)){c.type==="message"?await this.handleTeamMessage(t,c,r,i):c.type==="image"?await this.handleTeamImage(t,c,r,i):c.type==="file"&&await this.handleTeamFile(t,c,r,i);return}if(c.type==="message"){this.send(t,{type:"ack",id:c.id});let d={id:c.id||tn(),text:c.text,source:{kind:"app",id:i,label:`app:${r.label}`,adapterId:"ws"},sender:i,senderName:r.label,threadId:`app:${i}`,timestamp:new Date,meta:{deviceId:i,defaultAgentId:r.defaultAgentId,origin:r.origin}};this.onWorkItem(d)}if(c.type==="image"){this.send(t,{type:"ack",id:c.id});let d=Buffer.from(c.data,"base64"),u=Zf(c.filename);try{let h=await qs(d,c.filename,u),p={id:c.id||tn(),text:`[Photo: ${c.filename}]`,source:{kind:"app",id:i,label:`app:${r.label}`,adapterId:"ws"},sender:i,senderName:r.label,threadId:`app:${i}`,timestamp:new Date,files:[h],meta:{deviceId:i,defaultAgentId:r.defaultAgentId,origin:r.origin}};this.onWorkItem(p)}catch(h){ke.error("Image processing failed",{deviceId:i,filename:c.filename,error:String(h)}),this.send(t,{type:"error",message:"Failed to process image"})}}}catch(c){ke.error("Message handling error",{deviceId:i,error:String(c)}),this.send(t,{type:"error",message:"Internal error"})}}),t.on("close",()=>{ke.info("Device disconnected",{deviceId:i}),this.connections.delete(i)}),t.on("error",l=>{ke.error("WebSocket error",{deviceId:i,error:String(l)})})}),await new Promise(t=>{this.server.listen(this.port,"127.0.0.1",()=>{ke.info("WebSocket server listening",{port:this.port,host:"127.0.0.1"}),t()})})}async deliver(e){let t=e.workItem.meta?.deviceId;if(!t){ke.warn("No deviceId in WorkResult, cannot deliver");return}let s=e.error?`Error: ${e.error}`:e.text,r=e.workItem.meta?.channelId,i=this.agentRegistry.get(e.agentId)?.name??e.agentId;r&&await this.teamStore.saveMessage({channelId:r,senderId:e.agentId,senderType:"agent",senderName:i,text:s,createdAt:new Date});let o={type:"message",text:s,agentId:e.agentId,agentName:i,replyTo:e.workItem.id,...r?{channelId:r}:{}},a=this.connections.get(t);if(a&&a.readyState===en.default.OPEN)this.send(a,o);else{ke.info("Device not connected, buffering message",{deviceId:t});let l=this.pendingMessages.get(t)??[];l.push(o),this.pendingMessages.set(t,l)}}async onProcessingStart(e,t){let s=e.meta?.deviceId;if(!s)return;let r=this.connections.get(s);r&&r.readyState===en.default.OPEN&&this.send(r,{type:"typing",agentId:t})}async onProcessingEnd(e,t){}async stop(){for(let[e,t]of this.connections)t.close(1001,"Server shutting down");this.connections.clear(),await new Promise(e=>{this.wss&&this.wss.close(()=>{}),this.server?this.server.close(()=>e()):e()}),ke.info("WebSocket adapter stopped")}get connectionCount(){return this.connections.size}async verifyChannelMembership(e,t,s){let r=await this.teamStore.getChannel(t);return r?r.members.includes(s)?r:(this.send(e,{type:"error",message:"Not a member of this channel"}),null):(this.send(e,{type:"error",message:"Channel not found"}),null)}buildAgentList(){return this.agentRegistry.getAll().map(e=>{let t=this.agentManager.getState(e.id);return{id:e.id,name:e.name,icon:e.icon,title:e.title??null,model:e.model,status:t?.status??"idle",tools:[...new Set([...e.coreServers,...e.delegateServers])].sort(),schedule:e.schedule.map(s=>({cron:s.cron,task:s.task})),channels:e.channels,messagesProcessed:t?.messagesProcessed??0,lastActivity:t?t.lastActivity.toISOString():null}})}async handleTeamMessage(e,t,s,r){this.send(e,{type:"ack",id:t.id});let i=await this.verifyChannelMembership(e,t.channelId,r);if(!i)return;await this.teamStore.saveMessage({channelId:t.channelId,threadId:t.threadId,senderId:r,senderType:"person",senderName:s.label,text:t.text,createdAt:new Date});let o=i.type==="dm"?i.members.find(l=>l!==r):void 0,a={id:t.id||tn(),text:t.text,source:{kind:"team",id:t.channelId,label:`team:${i?.name??t.channelId}`,adapterId:"ws"},sender:r,senderName:s.label,threadId:t.threadId??`team:${t.channelId}`,timestamp:new Date,meta:{deviceId:r,channelId:t.channelId,...s.user?{user:s.user}:{},...o?{targetAgentId:o}:{defaultAgentId:s.defaultAgentId}}};this.onWorkItem(a)}async handleTeamImage(e,t,s,r){this.send(e,{type:"ack",id:t.id});let i=await this.verifyChannelMembership(e,t.channelId,r);if(!i)return;let o=Buffer.from(t.data,"base64"),a=Zf(t.filename);try{let l=await qs(o,t.filename,a);await this.teamStore.saveMessage({channelId:t.channelId,senderId:r,senderType:"person",senderName:s.label,text:`[Photo: ${t.filename}]`,files:[{name:l.name,mimetype:l.mimetype,size:l.size,storageKey:l.localPath,isImage:!0}],createdAt:new Date});let c=i.type==="dm"?i.members.find(u=>u!==r):void 0,d={id:t.id||tn(),text:`[Photo: ${t.filename}]`,source:{kind:"team",id:t.channelId,label:`team:${i?.name??t.channelId}`,adapterId:"ws"},sender:r,senderName:s.label,threadId:`team:${t.channelId}`,timestamp:new Date,files:[l],meta:{deviceId:r,channelId:t.channelId,...s.user?{user:s.user}:{},...c?{targetAgentId:c}:{defaultAgentId:s.defaultAgentId}}};this.onWorkItem(d)}catch(l){ke.error("Team image processing failed",{deviceId:r,filename:t.filename,error:String(l)}),this.send(e,{type:"error",message:"Failed to process image"})}}async handleTeamFile(e,t,s,r){this.send(e,{type:"ack",id:t.id});let i=await this.verifyChannelMembership(e,t.channelId,r);if(!i)return;let o=Buffer.from(t.data,"base64");try{let a=t.mimetype.startsWith("image/")?await qs(o,t.filename,t.mimetype):await th(o,t.filename,t.mimetype);await this.teamStore.saveMessage({channelId:t.channelId,senderId:r,senderType:"person",senderName:s.label,text:`[File: ${t.filename}]`,files:[{name:a.name,mimetype:a.mimetype,size:a.size,storageKey:a.localPath,isImage:a.isImage}],createdAt:new Date});let l=i.type==="dm"?i.members.find(d=>d!==r):void 0,c={id:t.id||tn(),text:`[File: ${t.filename}]`,source:{kind:"team",id:t.channelId,label:`team:${i?.name??t.channelId}`,adapterId:"ws"},sender:r,senderName:s.label,threadId:`team:${t.channelId}`,timestamp:new Date,files:[a],meta:{deviceId:r,channelId:t.channelId,...s.user?{user:s.user}:{},...l?{targetAgentId:l}:{defaultAgentId:s.defaultAgentId}}};this.onWorkItem(c)}catch(a){ke.error("Team file processing failed",{deviceId:r,filename:t.filename,error:String(a)}),this.send(e,{type:"error",message:"Failed to process file"})}}async handleCommand(e,t,s,r){if(this.send(e,{type:"ack",id:t.id}),!this.commandRegistry.has(t.name)){this.send(e,{type:"error",message:`Unknown command: /${t.name}`});return}let{result:i}=await this.commandRegistry.execute(t.name,{channelId:t.channelId,senderId:r,senderName:s.label,args:t.args});i&&await this.teamStore.saveMessage({channelId:t.channelId,senderId:"system",senderType:"agent",senderName:"system",text:i,command:{name:t.name,args:t.args,result:i},createdAt:new Date}),this.send(e,{type:"message",text:i??"Done.",agentId:"system",agentName:"system",replyTo:t.id})}async handleCommandList(e,t){let s=this.commandRegistry.list();this.send(e,{type:"command_list",commands:s.map(r=>({name:r.name,description:r.description,args:r.args})),id:t.id})}async handleChannelList(e,t,s){let r=await this.teamStore.listChannels(s);this.send(e,{type:"channel_list",channels:r.map(i=>({id:i._id,type:i.type,name:i.name,members:i.members})),id:t.id})}async handleHistory(e,t,s){if(!await this.verifyChannelMembership(e,t.channelId,s))return;let{messages:r,hasMore:i}=await this.teamStore.getHistory(t.channelId,{before:t.before,limit:t.limit});this.send(e,{type:"history",channelId:t.channelId,messages:r.map(o=>({id:o._id??"",senderId:o.senderId,senderType:o.senderType,senderName:o.senderName,text:o.text,threadId:o.threadId,createdAt:o.createdAt.toISOString()})),hasMore:i,id:t.id})}async handleJoin(e,t,s){if(t.channelId.startsWith("dm:")){let i=await this.teamStore.getChannel(t.channelId);if(!i||!i.members.includes(s)){this.send(e,{type:"error",message:"Cannot join a DM you are not part of"});return}}await this.teamStore.joinChannel(t.channelId,s)?this.send(e,{type:"channel_event",channelId:t.channelId,event:"joined",detail:{memberId:s},id:t.id}):this.send(e,{type:"error",message:"Failed to join channel"})}async handleLeave(e,t,s){await this.teamStore.leaveChannel(t.channelId,s)?this.send(e,{type:"channel_event",channelId:t.channelId,event:"left",detail:{memberId:s},id:t.id}):this.send(e,{type:"error",message:"Failed to leave channel"})}send(e,t){e.readyState===en.default.OPEN&&e.send(JSON.stringify(t))}}});var sp={};Pe(sp,{startBeekeeperRegistration:()=>ck});function ck(n){let{beekeeperPort:e,wsPort:t}=n,s=n.intervalMs??3e4,r=`http://127.0.0.1:${e}/internal/register-capability`,i={name:n.capabilityName??"hive",localWsUrl:`ws://127.0.0.1:${t}`,healthUrl:`http://127.0.0.1:${t}/health`},o=JSON.stringify(i),a=async()=>{try{let c=await fetch(r,{method:"POST",headers:{"content-type":"application/json"},body:o});if(c.ok)Za.debug("Registered with beekeeper",{beekeeperPort:e,wsPort:t});else{let d=await c.text().catch(()=>"");Za.warn("Beekeeper registration failed",{status:c.status,body:d})}}catch(c){Za.warn("Beekeeper registration error",{error:String(c)})}};a();let l=setInterval(()=>{a()},s);return{stop:()=>clearInterval(l)}}var Za,np=q(()=>{"use strict";O();Za=I("beekeeper-client")});async function rp(n,e,t){let s=[];n.soul&&s.push(n.soul),s.push(n.systemPrompt);let r=await e.read("shared/constitution.md");r&&s.push(r),s.push(`## Voice Call Mode
221
+ `),s.destroy();return}let u=i.searchParams.get("origin")??void 0,h={_id:l,label:c,user:d,defaultAgentId:"",origin:u};this.wss.handleUpgrade(t,s,r,p=>{this.wss.emit("connection",p,t,h)})}),this.wss.on("connection",(t,s,r)=>{let i=r._id;ke.info("Device connected",{deviceId:i,label:r.label});let o=this.pendingMessages.get(i);if(o?.length){ke.info("Draining pending messages",{deviceId:i,count:o.length});for(let l of o)this.send(t,l);this.pendingMessages.delete(i)}let a=this.connections.get(i);a&&a.close(1e3,"Replaced by new connection"),this.connections.set(i,t),t.on("message",async l=>{try{let c=tp(l.toString());if(!c){this.send(t,{type:"error",message:"Invalid message format"});return}if(c.type==="ping")return;if(c.type==="command"){await this.handleCommand(t,c,r,i);return}if(c.type==="command_list"){await this.handleCommandList(t,c);return}if(c.type==="channel_list"){await this.handleChannelList(t,c,i);return}if(c.type==="history"){await this.handleHistory(t,c,i);return}if(c.type==="join"){await this.handleJoin(t,c,i);return}if(c.type==="leave"){await this.handleLeave(t,c,i);return}if(c.type==="agent_list"){let d=this.buildAgentList();this.send(t,{type:"agent_list",agents:d,id:c.id});return}if(sp(c)){c.type==="message"?await this.handleTeamMessage(t,c,r,i):c.type==="image"?await this.handleTeamImage(t,c,r,i):c.type==="file"&&await this.handleTeamFile(t,c,r,i);return}if(c.type==="message"){this.send(t,{type:"ack",id:c.id});let d={id:c.id||en(),text:c.text,source:{kind:"app",id:i,label:`app:${r.label}`,adapterId:"ws"},sender:i,senderName:r.label,threadId:`app:${i}`,timestamp:new Date,meta:{deviceId:i,defaultAgentId:r.defaultAgentId,origin:r.origin}};this.onWorkItem(d)}if(c.type==="image"){this.send(t,{type:"ack",id:c.id});let d=Buffer.from(c.data,"base64"),u=rp(c.filename);try{let h=await Us(d,c.filename,u),p={id:c.id||en(),text:`[Photo: ${c.filename}]`,source:{kind:"app",id:i,label:`app:${r.label}`,adapterId:"ws"},sender:i,senderName:r.label,threadId:`app:${i}`,timestamp:new Date,files:[h],meta:{deviceId:i,defaultAgentId:r.defaultAgentId,origin:r.origin}};this.onWorkItem(p)}catch(h){ke.error("Image processing failed",{deviceId:i,filename:c.filename,error:String(h)}),this.send(t,{type:"error",message:"Failed to process image"})}}}catch(c){ke.error("Message handling error",{deviceId:i,error:String(c)}),this.send(t,{type:"error",message:"Internal error"})}}),t.on("close",()=>{ke.info("Device disconnected",{deviceId:i}),this.connections.delete(i)}),t.on("error",l=>{ke.error("WebSocket error",{deviceId:i,error:String(l)})})}),await new Promise(t=>{this.server.listen(this.port,"127.0.0.1",()=>{ke.info("WebSocket server listening",{port:this.port,host:"127.0.0.1"}),t()})})}async deliver(e){let t=e.workItem.meta?.deviceId;if(!t){ke.warn("No deviceId in WorkResult, cannot deliver");return}let s=e.error?`Error: ${e.error}`:e.text,r=e.workItem.meta?.channelId,i=this.agentRegistry.get(e.agentId)?.name??e.agentId;r&&await this.teamStore.saveMessage({channelId:r,senderId:e.agentId,senderType:"agent",senderName:i,text:s,createdAt:new Date});let o={type:"message",text:s,agentId:e.agentId,agentName:i,replyTo:e.workItem.id,...r?{channelId:r}:{}},a=this.connections.get(t);if(a&&a.readyState===Zs.default.OPEN)this.send(a,o);else{ke.info("Device not connected, buffering message",{deviceId:t});let l=this.pendingMessages.get(t)??[];l.push(o),this.pendingMessages.set(t,l)}}async onProcessingStart(e,t){let s=e.meta?.deviceId;if(!s)return;let r=this.connections.get(s);r&&r.readyState===Zs.default.OPEN&&this.send(r,{type:"typing",agentId:t})}async onProcessingEnd(e,t){}async stop(){for(let[e,t]of this.connections)t.close(1001,"Server shutting down");this.connections.clear(),await new Promise(e=>{this.wss&&this.wss.close(()=>{}),this.server?this.server.close(()=>e()):e()}),ke.info("WebSocket adapter stopped")}get connectionCount(){return this.connections.size}async verifyChannelMembership(e,t,s){let r=await this.teamStore.getChannel(t);return r?r.members.includes(s)?r:(this.send(e,{type:"error",message:"Not a member of this channel"}),null):(this.send(e,{type:"error",message:"Channel not found"}),null)}buildAgentList(){return this.agentRegistry.getAll().map(e=>{let t=this.agentManager.getState(e.id);return{id:e.id,name:e.name,icon:e.icon,title:e.title??null,model:e.model,status:t?.status??"idle",tools:[...new Set([...e.coreServers,...e.delegateServers])].sort(),schedule:e.schedule.map(s=>({cron:s.cron,task:s.task})),channels:e.channels,messagesProcessed:t?.messagesProcessed??0,lastActivity:t?t.lastActivity.toISOString():null}})}async handleTeamMessage(e,t,s,r){this.send(e,{type:"ack",id:t.id});let i=await this.verifyChannelMembership(e,t.channelId,r);if(!i)return;await this.teamStore.saveMessage({channelId:t.channelId,threadId:t.threadId,senderId:r,senderType:"person",senderName:s.label,text:t.text,createdAt:new Date});let o=i.type==="dm"?i.members.find(l=>l!==r):void 0,a={id:t.id||en(),text:t.text,source:{kind:"team",id:t.channelId,label:`team:${i?.name??t.channelId}`,adapterId:"ws"},sender:r,senderName:s.label,threadId:t.threadId??`team:${t.channelId}`,timestamp:new Date,meta:{deviceId:r,channelId:t.channelId,...s.user?{user:s.user}:{},...o?{targetAgentId:o}:{defaultAgentId:s.defaultAgentId}}};this.onWorkItem(a)}async handleTeamImage(e,t,s,r){this.send(e,{type:"ack",id:t.id});let i=await this.verifyChannelMembership(e,t.channelId,r);if(!i)return;let o=Buffer.from(t.data,"base64"),a=rp(t.filename);try{let l=await Us(o,t.filename,a);await this.teamStore.saveMessage({channelId:t.channelId,senderId:r,senderType:"person",senderName:s.label,text:`[Photo: ${t.filename}]`,files:[{name:l.name,mimetype:l.mimetype,size:l.size,storageKey:l.localPath,isImage:!0}],createdAt:new Date});let c=i.type==="dm"?i.members.find(u=>u!==r):void 0,d={id:t.id||en(),text:`[Photo: ${t.filename}]`,source:{kind:"team",id:t.channelId,label:`team:${i?.name??t.channelId}`,adapterId:"ws"},sender:r,senderName:s.label,threadId:`team:${t.channelId}`,timestamp:new Date,files:[l],meta:{deviceId:r,channelId:t.channelId,...s.user?{user:s.user}:{},...c?{targetAgentId:c}:{defaultAgentId:s.defaultAgentId}}};this.onWorkItem(d)}catch(l){ke.error("Team image processing failed",{deviceId:r,filename:t.filename,error:String(l)}),this.send(e,{type:"error",message:"Failed to process image"})}}async handleTeamFile(e,t,s,r){this.send(e,{type:"ack",id:t.id});let i=await this.verifyChannelMembership(e,t.channelId,r);if(!i)return;let o=Buffer.from(t.data,"base64");try{let a=t.mimetype.startsWith("image/")?await Us(o,t.filename,t.mimetype):await nh(o,t.filename,t.mimetype);await this.teamStore.saveMessage({channelId:t.channelId,senderId:r,senderType:"person",senderName:s.label,text:`[File: ${t.filename}]`,files:[{name:a.name,mimetype:a.mimetype,size:a.size,storageKey:a.localPath,isImage:a.isImage}],createdAt:new Date});let l=i.type==="dm"?i.members.find(d=>d!==r):void 0,c={id:t.id||en(),text:`[File: ${t.filename}]`,source:{kind:"team",id:t.channelId,label:`team:${i?.name??t.channelId}`,adapterId:"ws"},sender:r,senderName:s.label,threadId:`team:${t.channelId}`,timestamp:new Date,files:[a],meta:{deviceId:r,channelId:t.channelId,...s.user?{user:s.user}:{},...l?{targetAgentId:l}:{defaultAgentId:s.defaultAgentId}}};this.onWorkItem(c)}catch(a){ke.error("Team file processing failed",{deviceId:r,filename:t.filename,error:String(a)}),this.send(e,{type:"error",message:"Failed to process file"})}}async handleCommand(e,t,s,r){if(this.send(e,{type:"ack",id:t.id}),!this.commandRegistry.has(t.name)){this.send(e,{type:"error",message:`Unknown command: /${t.name}`});return}let{result:i}=await this.commandRegistry.execute(t.name,{channelId:t.channelId,senderId:r,senderName:s.label,args:t.args});i&&await this.teamStore.saveMessage({channelId:t.channelId,senderId:"system",senderType:"agent",senderName:"system",text:i,command:{name:t.name,args:t.args,result:i},createdAt:new Date}),this.send(e,{type:"message",text:i??"Done.",agentId:"system",agentName:"system",replyTo:t.id})}async handleCommandList(e,t){let s=this.commandRegistry.list();this.send(e,{type:"command_list",commands:s.map(r=>({name:r.name,description:r.description,args:r.args})),id:t.id})}async handleChannelList(e,t,s){let r=await this.teamStore.listChannels(s);this.send(e,{type:"channel_list",channels:r.map(i=>({id:i._id,type:i.type,name:i.name,members:i.members})),id:t.id})}async handleHistory(e,t,s){if(!await this.verifyChannelMembership(e,t.channelId,s))return;let{messages:r,hasMore:i}=await this.teamStore.getHistory(t.channelId,{before:t.before,limit:t.limit});this.send(e,{type:"history",channelId:t.channelId,messages:r.map(o=>({id:o._id??"",senderId:o.senderId,senderType:o.senderType,senderName:o.senderName,text:o.text,threadId:o.threadId,createdAt:o.createdAt.toISOString()})),hasMore:i,id:t.id})}async handleJoin(e,t,s){if(t.channelId.startsWith("dm:")){let i=await this.teamStore.getChannel(t.channelId);if(!i||!i.members.includes(s)){this.send(e,{type:"error",message:"Cannot join a DM you are not part of"});return}}await this.teamStore.joinChannel(t.channelId,s)?this.send(e,{type:"channel_event",channelId:t.channelId,event:"joined",detail:{memberId:s},id:t.id}):this.send(e,{type:"error",message:"Failed to join channel"})}async handleLeave(e,t,s){await this.teamStore.leaveChannel(t.channelId,s)?this.send(e,{type:"channel_event",channelId:t.channelId,event:"left",detail:{memberId:s},id:t.id}):this.send(e,{type:"error",message:"Failed to leave channel"})}send(e,t){e.readyState===Zs.default.OPEN&&e.send(JSON.stringify(t))}}});var ap={};Pe(ap,{startBeekeeperRegistration:()=>fk});function fk(n){let{beekeeperPort:e,wsPort:t}=n,s=n.intervalMs??3e4,r=`http://127.0.0.1:${e}/internal/register-capability`,i={name:n.capabilityName??"hive",localWsUrl:`ws://127.0.0.1:${t}`,healthUrl:`http://127.0.0.1:${t}/health`},o=JSON.stringify(i),a=async()=>{try{let c=await fetch(r,{method:"POST",headers:{"content-type":"application/json"},body:o});if(c.ok)ec.debug("Registered with beekeeper",{beekeeperPort:e,wsPort:t});else{let d=await c.text().catch(()=>"");ec.warn("Beekeeper registration failed",{status:c.status,body:d})}}catch(c){ec.warn("Beekeeper registration error",{error:String(c)})}};a();let l=setInterval(()=>{a()},s);return{stop:()=>clearInterval(l)}}var ec,cp=F(()=>{"use strict";O();ec=T("beekeeper-client")});async function lp(n,e,t){let s=[];n.soul&&s.push(n.soul),s.push(n.systemPrompt);let r=await e.read("shared/constitution.md");r&&s.push(r),s.push(`## Voice Call Mode
222
222
 
223
223
  You are currently on a live phone call. Keep responses conversational and concise \u2014 you are speaking out loud, not writing text. Avoid markdown, bullet points, or long lists. Speak naturally as a human would on the phone. Identify yourself at the start of the call.`),t?.goal&&s.push(`## Call Goal
224
224
 
@@ -229,20 +229,20 @@ ${c}`)}let a=new Date().toLocaleString("en-US",{timeZone:"America/Los_Angeles",w
229
229
 
230
230
  ---
231
231
 
232
- `)}var ip=q(()=>{"use strict";Oe()});function op(n,e){let t=[];for(let s of n)if(s.role!=="system")if(s.role==="user")t.push({role:"user",content:s.content??""});else if(s.role==="assistant")if(s.tool_calls&&s.tool_calls.length>0){let r=[];s.content&&r.push({type:"text",text:s.content});for(let i of s.tool_calls)r.push({type:"tool_use",id:i.id,name:i.function.name,input:lk(i.function.arguments)});t.push({role:"assistant",content:r})}else t.push({role:"assistant",content:s.content??""});else s.role==="tool"&&t.push({role:"user",content:[{type:"tool_result",tool_use_id:s.tool_call_id??"",content:s.content??""}]});return(t.length===0||t[0].role!=="user")&&t.unshift({role:"user",content:"[Call connected]"}),{system:e,messages:t}}function ap(n){if(!(!n||n.length===0))return n.map(e=>({name:e.function.name,description:e.function.description??"",input_schema:e.function.parameters??{type:"object",properties:{}}}))}function cp(n,e,t){let s={id:n,object:"chat.completion.chunk",created:Math.floor(Date.now()/1e3),model:t,choices:[{index:0,delta:{content:e},finish_reason:null}]};return`data: ${JSON.stringify(s)}
232
+ `)}var dp=F(()=>{"use strict";Oe()});function up(n,e){let t=[];for(let s of n)if(s.role!=="system")if(s.role==="user")t.push({role:"user",content:s.content??""});else if(s.role==="assistant")if(s.tool_calls&&s.tool_calls.length>0){let r=[];s.content&&r.push({type:"text",text:s.content});for(let i of s.tool_calls)r.push({type:"tool_use",id:i.id,name:i.function.name,input:pk(i.function.arguments)});t.push({role:"assistant",content:r})}else t.push({role:"assistant",content:s.content??""});else s.role==="tool"&&t.push({role:"user",content:[{type:"tool_result",tool_use_id:s.tool_call_id??"",content:s.content??""}]});return(t.length===0||t[0].role!=="user")&&t.unshift({role:"user",content:"[Call connected]"}),{system:e,messages:t}}function hp(n){if(!(!n||n.length===0))return n.map(e=>({name:e.function.name,description:e.function.description??"",input_schema:e.function.parameters??{type:"object",properties:{}}}))}function fp(n,e,t){let s={id:n,object:"chat.completion.chunk",created:Math.floor(Date.now()/1e3),model:t,choices:[{index:0,delta:{content:e},finish_reason:null}]};return`data: ${JSON.stringify(s)}
233
233
 
234
- `}function ec(n,e,t="stop"){let s={id:n,object:"chat.completion.chunk",created:Math.floor(Date.now()/1e3),model:e,choices:[{index:0,delta:{},finish_reason:t}]};return`data: ${JSON.stringify(s)}
234
+ `}function tc(n,e,t="stop"){let s={id:n,object:"chat.completion.chunk",created:Math.floor(Date.now()/1e3),model:e,choices:[{index:0,delta:{},finish_reason:t}]};return`data: ${JSON.stringify(s)}
235
235
 
236
236
  data: [DONE]
237
237
 
238
- `}function lp(n,e,t){return{id:n,object:"chat.completion",created:Math.floor(Date.now()/1e3),model:t,choices:[{index:0,message:{role:"assistant",content:e},finish_reason:"stop"}]}}function lk(n){if(!n)return{};try{return JSON.parse(n)}catch{return{}}}var dp=q(()=>{"use strict"});var hp={};Pe(hp,{VoiceAdapter:()=>tc});import{createServer as dk}from"node:http";import uk from"@anthropic-ai/sdk";import{randomUUID as up}from"node:crypto";function fk(n){return new Promise((e,t)=>{let s=[];n.on("data",r=>s.push(r)),n.on("end",()=>e(Buffer.concat(s).toString("utf-8"))),n.on("error",t)})}var De,hk,tc,fp=q(()=>{"use strict";O();ip();dp();Oe();De=I("voice-adapter"),hk=7200*1e3,tc=class{port;serverSecret;registry;memoryManager;httpServer;anthropic;sessions=new Map;sweepTimer;constructor(e,t,s,r){this.port=e,this.serverSecret=t,this.registry=s,this.memoryManager=r,this.anthropic=new uk}async start(){this.httpServer=dk((e,t)=>{this.handleRequest(e,t).catch(s=>{De.error("Voice request handler error",{error:String(s)}),t.headersSent||(t.writeHead(500,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Internal server error"})))})}),await new Promise(e=>{this.httpServer.listen(this.port,()=>e())}),this.sweepTimer=setInterval(()=>this.sweepStaleSessions(),1800*1e3),De.info("Voice adapter started",{port:this.port})}stop(){this.sweepTimer&&clearInterval(this.sweepTimer),this.httpServer?.close(),De.info("Voice adapter stopped")}sweepStaleSessions(){let e=Date.now(),t=0;for(let[s,r]of this.sessions)e-r.startedAt.getTime()>hk&&(this.sessions.delete(s),t++);t>0&&De.info("Swept stale voice sessions",{count:t})}async handleRequest(e,t){if(!this.serverSecret){De.error("Voice endpoint called but VAPI_SERVER_SECRET not configured \u2014 rejecting"),t.writeHead(403,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Server secret not configured"}));return}if((e.headers["x-vapi-secret"]??e.headers["server-secret"]??"")!==this.serverSecret){De.warn("Voice request rejected \u2014 invalid server secret"),t.writeHead(401,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Unauthorized"}));return}if(e.method==="GET"&&e.url==="/health"){t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({status:"ok",activeCalls:this.sessions.size}));return}if(e.method!=="POST"||e.url!=="/v1/chat/completions"){t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Not found"}));return}let r=await fk(e),i;try{i=JSON.parse(r)}catch{t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Invalid JSON"}));return}let o=this.resolveAgentId(i);if(!o){De.error("Could not resolve agent ID from Vapi request"),t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Cannot determine agent identity"}));return}let a=this.registry.get(o);if(!a){De.error("Agent not found",{agentId:o}),t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:`Agent not found: ${o}`}));return}let l=i.call?.id??up();this.sessions.has(l)||(this.sessions.set(l,{callId:l,agentId:o,startedAt:new Date}),De.info("Voice call session started",{callId:l,agentId:o}));let c=i.call?.metadata,d=await rp(a,this.memoryManager,{goal:c?.goal,context:c?.context}),{system:u,messages:h}=op(i.messages,d),p=ap(i.tools),g=a.model,f=`chatcmpl-${up()}`;if(i.stream===!1){let S=(await this.anthropic.messages.create({model:g,max_tokens:1024,system:u,messages:h,...p?{tools:p}:{}})).content.filter(b=>b.type==="text").map(b=>b.text).join("");t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify(lp(f,S,g)));return}t.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"});try{let y=this.anthropic.messages.stream({model:g,max_tokens:1024,system:u,messages:h,...p?{tools:p}:{}});for await(let w of y)if(w.type==="content_block_delta"){let S=w.delta;S.type==="text_delta"&&t.write(cp(f,S.text??"",g))}t.writableEnded||t.write(ec(f,g))}catch(y){De.error("Claude streaming error",{error:String(y),callId:l,agentId:o}),t.writableEnded||t.write(ec(f,g,"error"))}t.end()}resolveAgentId(e){let t=e.assistant?.metadata;if(t?.hive_agent_id)return t.hive_agent_id;let s=e.assistant?.id;if(s&&m.voice.assistants[s])return m.voice.assistants[s];let r=e.call?.metadata;if(r?.hive_agent_id)return r.hive_agent_id}}});rs();pi();import{existsSync as pk,watch as mk}from"node:fs";import{MongoClient as gk}from"mongodb";O();import{existsSync as cc,readFileSync as lc,readdirSync as Cp,statSync as Nk,writeFileSync as Ok,mkdirSync as xk}from"node:fs";import{resolve as dc,join as Dk}from"node:path";import{createHash as Ep}from"node:crypto";var mi=I("integrity");function uc(n,e){let t=dc(e,"installed-snapshot.json");if(!cc(t))return mi.warn("No installed-snapshot.json \u2014 skipping integrity check (first install?)"),{ok:!0,warnings:[]};let s=JSON.parse(lc(t,"utf-8"));if(!Array.isArray(s))return{ok:!1,warnings:[`installed-snapshot.json is malformed (expected array, got ${typeof s})`]};let r=s,i=[];for(let o of r){let a=dc(n,o.path);if(!cc(a)){i.push(`missing: ${o.path}`);continue}let l=lc(a);Ep("sha256").update(l).digest("hex")!==o.hash&&i.push(`modified: ${o.path}`)}if(i.length>0)throw mi.error("Package integrity check FAILED \u2014 refusing to start",{drift:i}),new Error(`Package integrity check failed. ${i.length} file(s) have been modified or are missing:
238
+ `}function pp(n,e,t){return{id:n,object:"chat.completion",created:Math.floor(Date.now()/1e3),model:t,choices:[{index:0,message:{role:"assistant",content:e},finish_reason:"stop"}]}}function pk(n){if(!n)return{};try{return JSON.parse(n)}catch{return{}}}var mp=F(()=>{"use strict"});var yp={};Pe(yp,{VoiceAdapter:()=>sc});import{createServer as mk}from"node:http";import gk from"@anthropic-ai/sdk";import{randomUUID as gp}from"node:crypto";function wk(n){return new Promise((e,t)=>{let s=[];n.on("data",r=>s.push(r)),n.on("end",()=>e(Buffer.concat(s).toString("utf-8"))),n.on("error",t)})}var De,yk,sc,wp=F(()=>{"use strict";O();dp();mp();Oe();De=T("voice-adapter"),yk=7200*1e3,sc=class{port;serverSecret;registry;memoryManager;httpServer;anthropic;sessions=new Map;sweepTimer;constructor(e,t,s,r){this.port=e,this.serverSecret=t,this.registry=s,this.memoryManager=r,this.anthropic=new gk}async start(){this.httpServer=mk((e,t)=>{this.handleRequest(e,t).catch(s=>{De.error("Voice request handler error",{error:String(s)}),t.headersSent||(t.writeHead(500,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Internal server error"})))})}),await new Promise(e=>{this.httpServer.listen(this.port,()=>e())}),this.sweepTimer=setInterval(()=>this.sweepStaleSessions(),1800*1e3),De.info("Voice adapter started",{port:this.port})}stop(){this.sweepTimer&&clearInterval(this.sweepTimer),this.httpServer?.close(),De.info("Voice adapter stopped")}sweepStaleSessions(){let e=Date.now(),t=0;for(let[s,r]of this.sessions)e-r.startedAt.getTime()>yk&&(this.sessions.delete(s),t++);t>0&&De.info("Swept stale voice sessions",{count:t})}async handleRequest(e,t){if(!this.serverSecret){De.error("Voice endpoint called but VAPI_SERVER_SECRET not configured \u2014 rejecting"),t.writeHead(403,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Server secret not configured"}));return}if((e.headers["x-vapi-secret"]??e.headers["server-secret"]??"")!==this.serverSecret){De.warn("Voice request rejected \u2014 invalid server secret"),t.writeHead(401,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Unauthorized"}));return}if(e.method==="GET"&&e.url==="/health"){t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({status:"ok",activeCalls:this.sessions.size}));return}if(e.method!=="POST"||e.url!=="/v1/chat/completions"){t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Not found"}));return}let r=await wk(e),i;try{i=JSON.parse(r)}catch{t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Invalid JSON"}));return}let o=this.resolveAgentId(i);if(!o){De.error("Could not resolve agent ID from Vapi request"),t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Cannot determine agent identity"}));return}let a=this.registry.get(o);if(!a){De.error("Agent not found",{agentId:o}),t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:`Agent not found: ${o}`}));return}let l=i.call?.id??gp();this.sessions.has(l)||(this.sessions.set(l,{callId:l,agentId:o,startedAt:new Date}),De.info("Voice call session started",{callId:l,agentId:o}));let c=i.call?.metadata,d=await lp(a,this.memoryManager,{goal:c?.goal,context:c?.context}),{system:u,messages:h}=up(i.messages,d),p=hp(i.tools),g=a.model,f=`chatcmpl-${gp()}`;if(i.stream===!1){let S=(await this.anthropic.messages.create({model:g,max_tokens:1024,system:u,messages:h,...p?{tools:p}:{}})).content.filter(b=>b.type==="text").map(b=>b.text).join("");t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify(pp(f,S,g)));return}t.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"});try{let y=this.anthropic.messages.stream({model:g,max_tokens:1024,system:u,messages:h,...p?{tools:p}:{}});for await(let w of y)if(w.type==="content_block_delta"){let S=w.delta;S.type==="text_delta"&&t.write(fp(f,S.text??"",g))}t.writableEnded||t.write(tc(f,g))}catch(y){De.error("Claude streaming error",{error:String(y),callId:l,agentId:o}),t.writableEnded||t.write(tc(f,g,"error"))}t.end()}resolveAgentId(e){let t=e.assistant?.metadata;if(t?.hive_agent_id)return t.hive_agent_id;let s=e.assistant?.id;if(s&&m.voice.assistants[s])return m.voice.assistants[s];let r=e.call?.metadata;if(r?.hive_agent_id)return r.hive_agent_id}}});ns();mi();import{existsSync as Sk,watch as bk}from"node:fs";import{MongoClient as _k}from"mongodb";O();import{existsSync as dc,readFileSync as uc,readdirSync as Mp,statSync as Lk,writeFileSync as Pk,mkdirSync as $k}from"node:fs";import{resolve as hc,join as Bk}from"node:path";import{createHash as Dp}from"node:crypto";var gi=T("integrity");function fc(n,e){let t=hc(e,"installed-snapshot.json");if(!dc(t))return gi.warn("No installed-snapshot.json \u2014 skipping integrity check (first install?)"),{ok:!0,warnings:[]};let s=JSON.parse(uc(t,"utf-8"));if(!Array.isArray(s))return{ok:!1,warnings:[`installed-snapshot.json is malformed (expected array, got ${typeof s})`]};let r=s,i=[];for(let o of r){let a=hc(n,o.path);if(!dc(a)){i.push(`missing: ${o.path}`);continue}let l=uc(a);Dp("sha256").update(l).digest("hex")!==o.hash&&i.push(`modified: ${o.path}`)}if(i.length>0)throw gi.error("Package integrity check FAILED \u2014 refusing to start",{drift:i}),new Error(`Package integrity check failed. ${i.length} file(s) have been modified or are missing:
239
239
  `+i.map(o=>` - ${o}`).join(`
240
240
  `)+`
241
- Reinstall with: npm install @keepur/hive@<version>`);return{ok:!0,warnings:[]}}function hc(n){let e=["skills","plugins",".hive",".env","hive.yaml","hive-"],t=new Set(["dist","node_modules","package.json","package-lock.json","pkg","seeds","templates"]);try{let s=Cp(n),r=[];for(let i of s)t.has(i)||i.startsWith(".")&&i!==".hive"||e.some(o=>i.startsWith(o.replace("/","")))||r.push(i);r.length>0&&mi.warn("Unexpected files in instance directory",{files:r})}catch{}}O();import{existsSync as gi,readFileSync as Np,writeFileSync as Op,mkdirSync as xp}from"node:fs";import{resolve as yi}from"node:path";var fc=I("upgrade-notice");function pc(n,e){let t=yi(n,"upgrade-notice-emitted");if(gi(t))return;let s=yi(n,"previous-snapshot.json");if(gi(s))try{let r=JSON.parse(Np(s,"utf-8")),i=[];for(let l of r)if(typeof l.path=="string"&&l.path.startsWith("skills/")&&l.path.endsWith("SKILL.md")){let c=l.path.match(/^skills\/([^/]+)\//);c&&!gi(yi(e,c[1]))&&i.push(c[1])}if(i.length===0)return;let o=[...new Set(i)],a=["","=".repeat(72),"Your previous version of hive shipped the following skills in its tarball:",...o.map(l=>` - ${l}`),"","These are no longer part of the hive core package. You can re-install any of","them from the default Keepur registry with:",""," hive skill add <name>","","Agent-authored skills you or your agents wrote on this hive are unaffected and","continue to work. This notice only appears once.","=".repeat(72),""].join(`
242
- `);fc.info(a),xp(n,{recursive:!0}),Op(t,new Date().toISOString())}catch(r){fc.warn("Failed to check upgrade notice",{error:String(r)})}}Oe();O();O();ta();var te={maxConcurrent:3,timeoutMs:3e5,budgetUsd:10,maxTurns:200,icon:"",keywords:[],passiveChannels:[],delegatePrompts:{},schedule:[]};function gu(n,e){return{id:n._id,name:n.name,model:n.model,channels:n.channels??[],homeBase:n.homeBase,catches:n.catches,passiveChannels:n.passiveChannels??te.passiveChannels,keywords:n.keywords??te.keywords,isDefault:n.isDefault??!1,schedule:n.schedule??te.schedule,budgetUsd:n.budgetUsd??te.budgetUsd,maxTurns:n.maxTurns??te.maxTurns,icon:n.icon??te.icon,slackBot:n.slackBot,coreServers:n.coreServers??[],delegateServers:n.delegateServers??[],plugins:n.plugins,maxConcurrent:n.maxConcurrent??te.maxConcurrent,timeoutMs:n.timeoutMs??te.timeoutMs,betas:n.betas,metadata:n.metadata,disabled:n.disabled??!1,subscribe:n.subscribe??[],resourceTiers:n.resourceTiers,delegatePrompts:n.delegatePrompts??te.delegatePrompts,soul:n.soul??"",systemPrompt:n.systemPrompt??"",archetype:n.archetype,title:n.title,archetypeConfig:n.archetypeConfig,autonomy:cu(e,n.autonomy)}}Oe();ar();ar();import{statSync as AS}from"node:fs";import{normalize as Su,resolve as bu}from"node:path";var _u=new Set(["linear","github","clickup"]);function vu(n){if(!n||typeof n!="object")throw new Error("software-engineer archetypeConfig must be an object");let e=n;if(typeof e.workshop!="string"||!e.workshop.startsWith("/"))throw new Error("workshop must be an absolute path");let t=Su(e.workshop);ku(t,"workshop");let s=e.workspaces??[];if(!Array.isArray(s))throw new Error("workspaces must be an array");let r=new Set,i=s.map((o,a)=>{if(!o||typeof o!="object")throw new Error(`workspaces[${a}]: must be an object`);let l=o;if(typeof l.name!="string"||l.name.length===0)throw new Error(`workspaces[${a}]: name is required`);if(r.has(l.name))throw new Error(`workspaces[${a}]: duplicate workspace name "${l.name}"`);if(r.add(l.name),typeof l.path!="string"||!l.path.startsWith("/"))throw new Error(`workspaces[${a}] (${l.name}): path must be an absolute path`);let c=Su(l.path);ku(c,`workspaces[${a}] (${l.name})`);let d=bu(c),u=bu(t);if(!d.startsWith(u+"/"))throw new Error(`workspaces[${a}] (${l.name}): path must be inside workshop (${t}), got ${c}`);if(!l.tracker||typeof l.tracker!="object")throw new Error(`workspaces[${a}] (${l.name}): tracker is required`);let h=l.tracker;if(typeof h.type!="string"||!_u.has(h.type))throw new Error(`workspaces[${a}] (${l.name}): tracker.type must be one of: ${[..._u].join(", ")}`);return CS(h,a,l.name),{name:l.name,path:c,tracker:h,...l.primary===!0?{primary:!0}:{}}});return{workshop:t,workspaces:i}}function ku(n,e){let t;try{t=AS(n)}catch{throw new Error(`${e}: path does not exist: ${n}`)}if(!t.isDirectory())throw new Error(`${e}: path is not a directory: ${n}`)}function CS(n,e,t){switch(n.type){case"linear":if(typeof n.project!="string"||n.project.length===0)throw new Error(`workspaces[${e}] (${t}): linear tracker requires project`);break;case"github":if(typeof n.repo!="string"||n.repo.length===0)throw new Error(`workspaces[${e}] (${t}): github tracker requires repo`);break;case"clickup":if(typeof n.list!="string"||n.list.length===0)throw new Error(`workspaces[${e}] (${t}): clickup tracker requires list`);break}}function Tu(n){let e=n.archetypeConfig,t=n.agentConfig.title||n.agentConfig.name,s=[];s.push(`# Software Engineer
241
+ Reinstall with: npm install @keepur/hive@<version>`);return{ok:!0,warnings:[]}}function pc(n){let e=["skills","plugins",".hive",".env","hive.yaml","hive-"],t=new Set(["dist","node_modules","package.json","package-lock.json","pkg","seeds","templates"]);try{let s=Mp(n),r=[];for(let i of s)t.has(i)||i.startsWith(".")&&i!==".hive"||e.some(o=>i.startsWith(o.replace("/","")))||r.push(i);r.length>0&&gi.warn("Unexpected files in instance directory",{files:r})}catch{}}O();import{existsSync as yi,readFileSync as Lp,writeFileSync as Pp,mkdirSync as $p}from"node:fs";import{resolve as wi}from"node:path";var mc=T("upgrade-notice");function gc(n,e){let t=wi(n,"upgrade-notice-emitted");if(yi(t))return;let s=wi(n,"previous-snapshot.json");if(yi(s))try{let r=JSON.parse(Lp(s,"utf-8")),i=[];for(let l of r)if(typeof l.path=="string"&&l.path.startsWith("skills/")&&l.path.endsWith("SKILL.md")){let c=l.path.match(/^skills\/([^/]+)\//);c&&!yi(wi(e,c[1]))&&i.push(c[1])}if(i.length===0)return;let o=[...new Set(i)],a=["","=".repeat(72),"Your previous version of hive shipped the following skills in its tarball:",...o.map(l=>` - ${l}`),"","These are no longer part of the hive core package. You can re-install any of","them from the default Keepur registry with:",""," hive skill add <name>","","Agent-authored skills you or your agents wrote on this hive are unaffected and","continue to work. This notice only appears once.","=".repeat(72),""].join(`
242
+ `);mc.info(a),$p(n,{recursive:!0}),Pp(t,new Date().toISOString())}catch(r){mc.warn("Failed to check upgrade notice",{error:String(r)})}}Oe();O();O();sa();var te={maxConcurrent:3,timeoutMs:3e5,budgetUsd:10,maxTurns:200,icon:"",keywords:[],passiveChannels:[],delegatePrompts:{},schedule:[]};function wu(n,e){return{id:n._id,name:n.name,model:n.model,channels:n.channels??[],homeBase:n.homeBase,catches:n.catches,passiveChannels:n.passiveChannels??te.passiveChannels,keywords:n.keywords??te.keywords,isDefault:n.isDefault??!1,schedule:n.schedule??te.schedule,budgetUsd:n.budgetUsd??te.budgetUsd,maxTurns:n.maxTurns??te.maxTurns,icon:n.icon??te.icon,slackBot:n.slackBot,coreServers:n.coreServers??[],delegateServers:n.delegateServers??[],plugins:n.plugins,maxConcurrent:n.maxConcurrent??te.maxConcurrent,timeoutMs:n.timeoutMs??te.timeoutMs,betas:n.betas,metadata:n.metadata,disabled:n.disabled??!1,subscribe:n.subscribe??[],resourceTiers:n.resourceTiers,delegatePrompts:n.delegatePrompts??te.delegatePrompts,soul:n.soul??"",systemPrompt:n.systemPrompt??"",archetype:n.archetype,title:n.title,archetypeConfig:n.archetypeConfig,autonomy:du(e,n.autonomy)}}Oe();or();or();import{statSync as xS}from"node:fs";import{normalize as _u,resolve as ku}from"node:path";var vu=new Set(["linear","github","clickup"]);function Iu(n){if(!n||typeof n!="object")throw new Error("software-engineer archetypeConfig must be an object");let e=n;if(typeof e.workshop!="string"||!e.workshop.startsWith("/"))throw new Error("workshop must be an absolute path");let t=_u(e.workshop);Tu(t,"workshop");let s=e.workspaces??[];if(!Array.isArray(s))throw new Error("workspaces must be an array");let r=new Set,i=s.map((o,a)=>{if(!o||typeof o!="object")throw new Error(`workspaces[${a}]: must be an object`);let l=o;if(typeof l.name!="string"||l.name.length===0)throw new Error(`workspaces[${a}]: name is required`);if(r.has(l.name))throw new Error(`workspaces[${a}]: duplicate workspace name "${l.name}"`);if(r.add(l.name),typeof l.path!="string"||!l.path.startsWith("/"))throw new Error(`workspaces[${a}] (${l.name}): path must be an absolute path`);let c=_u(l.path);Tu(c,`workspaces[${a}] (${l.name})`);let d=ku(c),u=ku(t);if(!d.startsWith(u+"/"))throw new Error(`workspaces[${a}] (${l.name}): path must be inside workshop (${t}), got ${c}`);if(!l.tracker||typeof l.tracker!="object")throw new Error(`workspaces[${a}] (${l.name}): tracker is required`);let h=l.tracker;if(typeof h.type!="string"||!vu.has(h.type))throw new Error(`workspaces[${a}] (${l.name}): tracker.type must be one of: ${[...vu].join(", ")}`);return MS(h,a,l.name),{name:l.name,path:c,tracker:h,...l.primary===!0?{primary:!0}:{}}});return{workshop:t,workspaces:i}}function Tu(n,e){let t;try{t=xS(n)}catch{throw new Error(`${e}: path does not exist: ${n}`)}if(!t.isDirectory())throw new Error(`${e}: path is not a directory: ${n}`)}function MS(n,e,t){switch(n.type){case"linear":if(typeof n.project!="string"||n.project.length===0)throw new Error(`workspaces[${e}] (${t}): linear tracker requires project`);break;case"github":if(typeof n.repo!="string"||n.repo.length===0)throw new Error(`workspaces[${e}] (${t}): github tracker requires repo`);break;case"clickup":if(typeof n.list!="string"||n.list.length===0)throw new Error(`workspaces[${e}] (${t}): clickup tracker requires list`);break}}function Au(n){let e=n.archetypeConfig,t=n.agentConfig.title||n.agentConfig.name,s=[];s.push(`# Software Engineer
243
243
 
244
244
  You are a software engineer. Your title is ${t}. Your discipline is owning codebases and shipping production code through disciplined delivery.`);let r=[`Your workshop is \`${e.workshop}\`. This is your working directory.`];if(e.workspaces.length>0){r.push(`
245
- Workspaces:`);for(let i of e.workspaces){let o=ES(i.tracker),a=i.primary?" (primary)":"";r.push(`- **${i.name}**${a}: \`${i.path}\` \u2014 tracker: ${o}`)}}else r.push(`
245
+ Workspaces:`);for(let i of e.workspaces){let o=DS(i.tracker),a=i.primary?" (primary)":"";r.push(`- **${i.name}**${a}: \`${i.path}\` \u2014 tracker: ${o}`)}}else r.push(`
246
246
  No workspaces configured yet. You have full agency over your entire workshop.`);return s.push(r.join(`
247
247
  `)),e.workspaces.length>0&&s.push("## Workshop vs Workspace Policy\n\n**Workshop** (outside workspaces): You have full agency. Read, write, create, edit freely. This is your prototyping space, scratch area, and coordination point.\n\n**Workspaces**: Delegate-only. You MUST NOT directly edit, write, or create files inside a workspace. All code changes inside workspaces flow through `code_task`. This preserves the spec \u2192 plan \u2192 PR \u2192 CI discipline.\n\nIf you attempt to Edit or Write inside a workspace, the tool will be blocked with an error. This is intentional. Use `code_task` instead.\n\nInside workspaces, ALL execution \u2014 including git, npm, builds, test runs \u2014 flows through `code_task`. Your working directory is your workshop; treat all relative file paths accordingly. Reference workspace source only via absolute paths or through `code_task`."),s.push(`## Workflow: Ticket as Spec
248
248
 
@@ -269,7 +269,7 @@ A task is done when ALL of these are true:
269
269
  - **Always** verify PR + CI status before closing a ticket
270
270
  - **Always** file a ticket before delegating work`),s.join(`
271
271
 
272
- `)}function ES(n){switch(n.type){case"linear":return`Linear (project: ${n.project})`;case"github":return`GitHub Issues (repo: ${n.repo})`;case"clickup":return`ClickUp (list: ${n.list})`;default:return n.type}}import{resolve as NS}from"node:path";import{normalize as Iu,resolve as Au}from"node:path";function ra(n){if(typeof n!="string"||!n.startsWith("/"))throw new Error(`claudeProjectSlug: path must be absolute, got ${String(n)}`);return n.replace(/\/+$/,"").replace(/[/_.]/g,"-").replace(/-+/g,"-")}function Cu(n,e){let t=Iu(Au(n));return e.workspaces.find(s=>{let r=Iu(Au(s.path));return t===r||t.startsWith(r+"/")})}function Eu(n){return ra(n.workshop)}function Nu(n){return ra(n.path)}var OS=new Set(["Edit","Write","MultiEdit","NotebookEdit"]);function xS(n,e){return n==="NotebookEdit"?e.notebook_path??e.file_path:e.file_path}function Ou(n){let e=n.archetypeConfig;return e.workspaces.length===0?[]:[{hooks:[async t=>{try{let s=t,r=s.tool_name??"";if(!OS.has(r))return{continue:!0};let i=xS(r,s.tool_input??{});if(typeof i!="string"||i.length===0)return{continue:!0};let o=NS(e.workshop,i),a=Cu(o,e);return a?{hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:`${r} blocked: \`${o}\` is inside workspace \`${a.name}\`. Code changes inside workspaces flow through \`code_task\`, not direct edits \u2014 this preserves the spec \u2192 plan \u2192 PR \u2192 CI discipline. If you're drafting a prototype, work inside the workshop outside any workspace. If you're ready to implement against a ticket, use \`code_task\` with the ticket ID.`}}:{continue:!0}}catch(s){return{hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:`Software-engineer hook internal error: ${String(s)}. All file mutations blocked until the archetype is fixed.`}}}}]}]}import{homedir as MS}from"node:os";import{join as xu}from"node:path";function Mu(n){let e=n.archetypeConfig,t=MS(),s=[];s.push({id:"workshop",backing:"filesystem",dir:xu(t,".claude/projects",Eu(e),"memory")});for(let r of e.workspaces)s.push({id:`workspace:${r.name}`,backing:"filesystem",dir:xu(t,".claude/projects",Nu(r),"memory")});return s}function Du(n){return{cwd:n.archetypeConfig.workshop,settingSources:["project"]}}wu({id:"software-engineer",validateConfig:vu,systemPromptCard:Tu,preToolUseHooks:Ou,memoryScopes:Mu,sessionOptions:Du});var he=I("agent-registry"),Lu=3e4,cr=class{agents=new Map;originToAgent=new Map;disabledAgents=[];agentDefs;changeStream=null;pollTimer=null;lastPollTime=new Date(0);onReload;constructor(e,t){this.agentDefs=e,this.onReload=t}async load(){let e=await this.agentDefs.find().toArray(),t=new Set(this.agents.keys()),s=new Set,r=[],i=[],o=[],a=[];for(let l of e){let c=gu(l,m.autonomy);if(s.add(c.id),c.disabled){a.push(c),this.agents.has(c.id)&&(this.agents.delete(c.id),o.push(c.id),he.info("Disabled agent removed from active map",{id:c.id}));continue}if(c.archetype){let d=or(c.archetype);if(!d)he.warn("Unknown archetype \u2014 loading agent as unstructured",{id:c.id,archetype:c.archetype}),c.archetype=void 0,c.archetypeConfig=void 0;else try{c.archetypeConfig=d.validateConfig(c.archetypeConfig)}catch(u){he.error("Archetype config validation failed \u2014 agent will not load",{id:c.id,archetype:c.archetype,error:String(u)}),this.agents.has(c.id)&&(this.agents.delete(c.id),o.push(c.id),he.warn("Evicted previously-loaded agent due to archetype validation failure",{id:c.id}));continue}}t.has(c.id)?i.push(c.id):r.push(c.id),this.agents.set(c.id,c),he.info("Loaded agent",{id:c.id,name:c.name})}this.disabledAgents=a;for(let l of t)s.has(l)||(this.agents.delete(l),o.push(l),he.info("Removed agent",{id:l}));return this.lastPollTime=new Date,this.rebuildOriginIndex(),{added:r,updated:i,removed:o}}async startWatching(){try{this.changeStream=this.agentDefs.watch([],{fullDocument:"updateLookup"}),this.changeStream.on("change",()=>{he.info("Agent definition changed (change stream), triggering reload"),this.onReload?.()}),this.changeStream.on("error",e=>{he.warn("Change stream error, falling back to polling",{error:String(e)}),this.changeStream=null,this.startPolling()}),he.info("Agent registry watching via change stream")}catch{he.info("Change stream not available, using polling fallback"),this.startPolling()}}startPolling(){this.pollTimer=setInterval(async()=>{try{let e=await this.agentDefs.countDocuments({updatedAt:{$gt:this.lastPollTime}});e>0&&(he.info("Agent definitions changed (poll), triggering reload",{changed:e}),this.onReload?.())}catch(e){he.error("Poll check failed",{error:String(e)})}},Lu),he.info("Agent registry watching via polling",{intervalMs:Lu})}rebuildOriginIndex(){this.originToAgent.clear();let e=[...this.agents.values()].sort((t,s)=>t.id.localeCompare(s.id));for(let t of e)for(let s of t.catches??[]){if(this.originToAgent.has(s)){he.error("Origin conflict \u2014 first sorted agent wins",{origin:s,winner:this.originToAgent.get(s),loser:t.id});continue}this.originToAgent.set(s,t.id)}}stopWatching(){this.changeStream&&(this.changeStream.close().catch(()=>{}),this.changeStream=null),this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null)}get(e){return this.agents.get(e)}getAll(){return Array.from(this.agents.values())}async getAllDefinitions(){return this.agentDefs.find().toArray()}listIds(){return Array.from(this.agents.keys())}findByChannel(e){return this.getAll().find(t=>!t.disabled&&t.channels.includes(e))}findByOrigin(e){let t=this.originToAgent.get(e);return t?this.agents.get(t):void 0}isPassiveChannel(e){return this.getAll().some(t=>!t.disabled&&t.passiveChannels.includes(e))}findByKeyword(e){let t=e.toLowerCase();return this.getAll().find(s=>!s.disabled&&s.keywords.some(r=>{let i=r.toLowerCase().replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`\\b${i}\\b`).test(t)}))}findByName(e){return this.findAllByName(e)[0]}findAllByName(e){return this.getAll().filter(t=>{if(t.disabled)return!1;let s=t.name.toLowerCase();if(new RegExp(`(?:^|hey\\s+|@)${s}\\b|\\b${s}[,:]`,"i").test(e))return!0;if(s.includes(" ")){let i=s.split(" ")[0];return new RegExp(`(?:^|hey\\s+|@)${i}\\b|\\b${i}[,:]`,"i").test(e)}return!1})}getDefault(){return this.getAll().find(e=>!e.disabled&&e.isDefault)}getDisabled(){return this.disabledAgents}getSubscriberMap(){let e={};for(let t of this.getAll())if(!t.disabled)for(let s of t.subscribe??[]){let r=s.includes(":")?s.split(":")[0]:s;e[r]||(e[r]=[]),e[r].includes(t.id)||e[r].push(t.id)}return e}};O();fa();js();O();Oe();import{query as r0}from"@anthropic-ai/claude-agent-sdk";var Fs=I("model-router"),i0={haiku:{timeoutMs:12e4,maxTurns:20,budgetUsd:1},sonnet:{timeoutMs:3e5,maxTurns:50,budgetUsd:5},opus:{timeoutMs:6e5,maxTurns:200,budgetUsd:50}};function mr(n,e){let t=i0[n],s=e?.[n];return s?{timeoutMs:s.timeoutMs??t.timeoutMs,maxTurns:s.maxTurns??t.maxTurns,budgetUsd:s.budgetUsd??t.budgetUsd}:{...t}}var at={haiku:0,sonnet:1,opus:2},gr={haiku:"claude-haiku-4-5-20251001",sonnet:"claude-sonnet-4-6",opus:"claude-opus-4-6"};function o0(n){return n.includes("opus")?"opus":n.includes("haiku")?"haiku":"sonnet"}var a0=`You are a model router. Your job is to classify the complexity of a user message and decide which AI model tier should handle it.
272
+ `)}function DS(n){switch(n.type){case"linear":return`Linear (project: ${n.project})`;case"github":return`GitHub Issues (repo: ${n.repo})`;case"clickup":return`ClickUp (list: ${n.list})`;default:return n.type}}import{resolve as LS}from"node:path";import{normalize as Cu,resolve as Eu}from"node:path";function ia(n){if(typeof n!="string"||!n.startsWith("/"))throw new Error(`claudeProjectSlug: path must be absolute, got ${String(n)}`);return n.replace(/\/+$/,"").replace(/[/_.]/g,"-").replace(/-+/g,"-")}function Nu(n,e){let t=Cu(Eu(n));return e.workspaces.find(s=>{let r=Cu(Eu(s.path));return t===r||t.startsWith(r+"/")})}function Ou(n){return ia(n.workshop)}function xu(n){return ia(n.path)}var PS=new Set(["Edit","Write","MultiEdit","NotebookEdit"]);function $S(n,e){return n==="NotebookEdit"?e.notebook_path??e.file_path:e.file_path}function Mu(n){let e=n.archetypeConfig;return e.workspaces.length===0?[]:[{hooks:[async t=>{try{let s=t,r=s.tool_name??"";if(!PS.has(r))return{continue:!0};let i=$S(r,s.tool_input??{});if(typeof i!="string"||i.length===0)return{continue:!0};let o=LS(e.workshop,i),a=Nu(o,e);return a?{hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:`${r} blocked: \`${o}\` is inside workspace \`${a.name}\`. Code changes inside workspaces flow through \`code_task\`, not direct edits \u2014 this preserves the spec \u2192 plan \u2192 PR \u2192 CI discipline. If you're drafting a prototype, work inside the workshop outside any workspace. If you're ready to implement against a ticket, use \`code_task\` with the ticket ID.`}}:{continue:!0}}catch(s){return{hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:`Software-engineer hook internal error: ${String(s)}. All file mutations blocked until the archetype is fixed.`}}}}]}]}import{homedir as RS}from"node:os";import{join as Du}from"node:path";function Lu(n){let e=n.archetypeConfig,t=RS(),s=[];s.push({id:"workshop",backing:"filesystem",dir:Du(t,".claude/projects",Ou(e),"memory")});for(let r of e.workspaces)s.push({id:`workspace:${r.name}`,backing:"filesystem",dir:Du(t,".claude/projects",xu(r),"memory")});return s}function Pu(n){return{cwd:n.archetypeConfig.workshop,settingSources:["project"]}}bu({id:"software-engineer",validateConfig:Iu,systemPromptCard:Au,preToolUseHooks:Mu,memoryScopes:Lu,sessionOptions:Pu});var he=T("agent-registry"),$u=3e4,ar=class{agents=new Map;originToAgent=new Map;disabledAgents=[];agentDefs;changeStream=null;pollTimer=null;lastPollTime=new Date(0);onReload;constructor(e,t){this.agentDefs=e,this.onReload=t}async load(){let e=await this.agentDefs.find().toArray(),t=new Set(this.agents.keys()),s=new Set,r=[],i=[],o=[],a=[];for(let l of e){let c=wu(l,m.autonomy);if(s.add(c.id),c.disabled){a.push(c),this.agents.has(c.id)&&(this.agents.delete(c.id),o.push(c.id),he.info("Disabled agent removed from active map",{id:c.id}));continue}if(c.archetype){let d=ir(c.archetype);if(!d)he.warn("Unknown archetype \u2014 loading agent as unstructured",{id:c.id,archetype:c.archetype}),c.archetype=void 0,c.archetypeConfig=void 0;else try{c.archetypeConfig=d.validateConfig(c.archetypeConfig)}catch(u){he.error("Archetype config validation failed \u2014 agent will not load",{id:c.id,archetype:c.archetype,error:String(u)}),this.agents.has(c.id)&&(this.agents.delete(c.id),o.push(c.id),he.warn("Evicted previously-loaded agent due to archetype validation failure",{id:c.id}));continue}}t.has(c.id)?i.push(c.id):r.push(c.id),this.agents.set(c.id,c),he.info("Loaded agent",{id:c.id,name:c.name})}this.disabledAgents=a;for(let l of t)s.has(l)||(this.agents.delete(l),o.push(l),he.info("Removed agent",{id:l}));return this.lastPollTime=new Date,this.rebuildOriginIndex(),{added:r,updated:i,removed:o}}async startWatching(){try{this.changeStream=this.agentDefs.watch([],{fullDocument:"updateLookup"}),this.changeStream.on("change",()=>{he.info("Agent definition changed (change stream), triggering reload"),this.onReload?.()}),this.changeStream.on("error",e=>{he.warn("Change stream error, falling back to polling",{error:String(e)}),this.changeStream=null,this.startPolling()}),he.info("Agent registry watching via change stream")}catch{he.info("Change stream not available, using polling fallback"),this.startPolling()}}startPolling(){this.pollTimer=setInterval(async()=>{try{let e=await this.agentDefs.countDocuments({updatedAt:{$gt:this.lastPollTime}});e>0&&(he.info("Agent definitions changed (poll), triggering reload",{changed:e}),this.onReload?.())}catch(e){he.error("Poll check failed",{error:String(e)})}},$u),he.info("Agent registry watching via polling",{intervalMs:$u})}rebuildOriginIndex(){this.originToAgent.clear();let e=[...this.agents.values()].sort((t,s)=>t.id.localeCompare(s.id));for(let t of e)for(let s of t.catches??[]){if(this.originToAgent.has(s)){he.error("Origin conflict \u2014 first sorted agent wins",{origin:s,winner:this.originToAgent.get(s),loser:t.id});continue}this.originToAgent.set(s,t.id)}}stopWatching(){this.changeStream&&(this.changeStream.close().catch(()=>{}),this.changeStream=null),this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null)}get(e){return this.agents.get(e)}getAll(){return Array.from(this.agents.values())}async getAllDefinitions(){return this.agentDefs.find().toArray()}listIds(){return Array.from(this.agents.keys())}findByChannel(e){return this.getAll().find(t=>!t.disabled&&t.channels.includes(e))}findByOrigin(e){let t=this.originToAgent.get(e);return t?this.agents.get(t):void 0}isPassiveChannel(e){return this.getAll().some(t=>!t.disabled&&t.passiveChannels.includes(e))}findByKeyword(e){let t=e.toLowerCase();return this.getAll().find(s=>!s.disabled&&s.keywords.some(r=>{let i=r.toLowerCase().replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`\\b${i}\\b`).test(t)}))}findByName(e){return this.findAllByName(e)[0]}findAllByName(e){return this.getAll().filter(t=>{if(t.disabled)return!1;let s=t.name.toLowerCase();if(new RegExp(`(?:^|hey\\s+|@)${s}\\b|\\b${s}[,:]`,"i").test(e))return!0;if(s.includes(" ")){let i=s.split(" ")[0];return new RegExp(`(?:^|hey\\s+|@)${i}\\b|\\b${i}[,:]`,"i").test(e)}return!1})}getDefault(){return this.getAll().find(e=>!e.disabled&&e.isDefault)}getDisabled(){return this.disabledAgents}getSubscriberMap(){let e={};for(let t of this.getAll())if(!t.disabled)for(let s of t.subscribe??[]){let r=s.includes(":")?s.split(":")[0]:s;e[r]||(e[r]=[]),e[r].includes(t.id)||e[r].push(t.id)}return e}};O();pa();qs();O();Oe();import{query as l0}from"@anthropic-ai/claude-agent-sdk";var js=T("model-router"),d0={haiku:{timeoutMs:12e4,maxTurns:20,budgetUsd:1},sonnet:{timeoutMs:3e5,maxTurns:50,budgetUsd:5},opus:{timeoutMs:6e5,maxTurns:200,budgetUsd:50}};function pr(n,e){let t=d0[n],s=e?.[n];return s?{timeoutMs:s.timeoutMs??t.timeoutMs,maxTurns:s.maxTurns??t.maxTurns,budgetUsd:s.budgetUsd??t.budgetUsd}:{...t}}var ct={haiku:0,sonnet:1,opus:2},mr={haiku:"claude-haiku-4-5-20251001",sonnet:"claude-sonnet-4-6",opus:"claude-opus-4-6"};function u0(n){return n.includes("opus")?"opus":n.includes("haiku")?"haiku":"sonnet"}var h0=`You are a model router. Your job is to classify the complexity of a user message and decide which AI model tier should handle it.
273
273
 
274
274
  Tiers:
275
275
  - **haiku**: Greetings, simple factual questions, acknowledgments, status checks, yes/no answers, brief lookups, routine updates. Fast and cheap.
@@ -282,36 +282,36 @@ Rules:
282
282
  - Look at the TASK complexity, not the message length.
283
283
  - Scheduled/cron tasks that say "execute your scheduled X task" are routine \u2192 haiku unless the task itself is complex.
284
284
 
285
- Respond with ONLY a JSON object: { "tier": "haiku" | "sonnet" | "opus" }`;function c0(n){try{let s=JSON.parse(n);if(s.tier&&at[s.tier]!==void 0)return s.tier}catch{}let e=n.indexOf("{"),t=n.lastIndexOf("}");if(e!==-1&&t>e)try{let s=JSON.parse(n.slice(e,t+1));if(s.tier&&at[s.tier]!==void 0)return s.tier}catch{}return null}async function rh(n,e,t){let s=o0(e),r=m.modelRouter.model;if(s==="haiku")return{tier:"haiku",model:gr.haiku,costUsd:0,durationMs:0,resourceLimits:mr("haiku",t)};let i=null,o="",a=0,l=0,c=setTimeout(()=>{i&&(Fs.warn("Model router timed out",{timeoutMs:m.modelRouter.timeoutMs}),i.close())},m.modelRouter.timeoutMs);try{i=r0({prompt:n,options:{model:r,systemPrompt:a0,permissionMode:"bypassPermissions",allowDangerouslySkipPermissions:!0,maxTurns:1,maxBudgetUsd:.01,persistSession:!1,thinking:{type:"disabled"},disallowedTools:["Bash","Read","Write","Edit","Glob","Grep","Agent","WebFetch","WebSearch","NotebookEdit"],env:{...process.env,...m.anthropic.apiKey?{ANTHROPIC_API_KEY:m.anthropic.apiKey}:{},CLAUDE_AGENT_SDK_CLIENT_APP:"hive/0.1.0",CLAUDECODE:void 0}}});for await(let h of i){let p=h;if(p.type==="assistant"){let g=p.message?.content;if(Array.isArray(g))for(let f of g)f.type==="text"&&(o=f.text)}if(p.type==="result"){let g=p;a=g.total_cost_usd,l=g.duration_ms,g.subtype==="success"&&g.result&&(o=g.result)}}}catch(h){Fs.warn("Model router query failed, defaulting to sonnet",{error:String(h)});let p=at[s]>=at.sonnet?"sonnet":s;return{tier:p,model:gr[p],costUsd:0,durationMs:0,resourceLimits:mr(p,t)}}finally{clearTimeout(c),i=null}let d=c0(o);if(!d){Fs.warn("Model router parse failed, defaulting to sonnet",{rawText:o.slice(0,200)});let h=at[s]>=at.sonnet?"sonnet":s;return{tier:h,model:gr[h],costUsd:0,durationMs:0,resourceLimits:mr(h,t)}}let u=d;return at[d]>at[s]&&(u=s,Fs.debug("Model router capped by ceiling",{requested:d,ceiling:s})),Fs.info("Model router decision",{tier:u,requested:d,ceiling:s,costUsd:a,durationMs:l,textPreview:n.slice(0,100)}),{tier:u,model:gr[u],costUsd:a,durationMs:l,resourceLimits:mr(u,t)}}Oe();ba();da();rs();import{existsSync as hh,readdirSync as g0,statSync as y0}from"node:fs";import{join as fh}from"node:path";wr();import{QdrantClient as m0}from"@qdrant/js-client-rest";var Sr="conversations",br=class{qdrantUrl;ollamaUrl;qdrant=null;collectionReady=!1;constructor(e,t){this.qdrantUrl=e??process.env.QDRANT_URL??"http://localhost:6333",this.ollamaUrl=t??process.env.OLLAMA_URL??"http://localhost:11434"}getClient(){return this.qdrant||(this.qdrant=new m0({url:this.qdrantUrl})),this.qdrant}async ensureCollection(){if(this.collectionReady)return;let e=this.getClient(),{collections:t}=await e.getCollections();if(!t.some(r=>r.name===Sr)){let i=(await qe(this.ollamaUrl,"test")).length;await e.createCollection(Sr,{vectors:{size:i,distance:"Cosine"}})}this.collectionReady=!0}async index(e){await this.ensureCollection();let t=this.getClient(),s=e.inbound+`
285
+ Respond with ONLY a JSON object: { "tier": "haiku" | "sonnet" | "opus" }`;function f0(n){try{let s=JSON.parse(n);if(s.tier&&ct[s.tier]!==void 0)return s.tier}catch{}let e=n.indexOf("{"),t=n.lastIndexOf("}");if(e!==-1&&t>e)try{let s=JSON.parse(n.slice(e,t+1));if(s.tier&&ct[s.tier]!==void 0)return s.tier}catch{}return null}async function oh(n,e,t){let s=u0(e),r=m.modelRouter.model;if(s==="haiku")return{tier:"haiku",model:mr.haiku,costUsd:0,durationMs:0,resourceLimits:pr("haiku",t)};let i=null,o="",a=0,l=0,c=setTimeout(()=>{i&&(js.warn("Model router timed out",{timeoutMs:m.modelRouter.timeoutMs}),i.close())},m.modelRouter.timeoutMs);try{i=l0({prompt:n,options:{model:r,systemPrompt:h0,permissionMode:"bypassPermissions",allowDangerouslySkipPermissions:!0,maxTurns:1,maxBudgetUsd:.01,persistSession:!1,thinking:{type:"disabled"},disallowedTools:["Bash","Read","Write","Edit","Glob","Grep","Agent","WebFetch","WebSearch","NotebookEdit"],env:{...process.env,...m.anthropic.apiKey?{ANTHROPIC_API_KEY:m.anthropic.apiKey}:{},CLAUDE_AGENT_SDK_CLIENT_APP:"hive/0.1.0",CLAUDECODE:void 0}}});for await(let h of i){let p=h;if(p.type==="assistant"){let g=p.message?.content;if(Array.isArray(g))for(let f of g)f.type==="text"&&(o=f.text)}if(p.type==="result"){let g=p;a=g.total_cost_usd,l=g.duration_ms,g.subtype==="success"&&g.result&&(o=g.result)}}}catch(h){js.warn("Model router query failed, defaulting to sonnet",{error:String(h)});let p=ct[s]>=ct.sonnet?"sonnet":s;return{tier:p,model:mr[p],costUsd:0,durationMs:0,resourceLimits:pr(p,t)}}finally{clearTimeout(c),i=null}let d=f0(o);if(!d){js.warn("Model router parse failed, defaulting to sonnet",{rawText:o.slice(0,200)});let h=ct[s]>=ct.sonnet?"sonnet":s;return{tier:h,model:mr[h],costUsd:0,durationMs:0,resourceLimits:pr(h,t)}}let u=d;return ct[d]>ct[s]&&(u=s,js.debug("Model router capped by ceiling",{requested:d,ceiling:s})),js.info("Model router decision",{tier:u,requested:d,ceiling:s,costUsd:a,durationMs:l,textPreview:n.slice(0,100)}),{tier:u,model:mr[u],costUsd:a,durationMs:l,resourceLimits:pr(u,t)}}Oe();_a();ua();ns();import{existsSync as ph,readdirSync as _0,statSync as k0}from"node:fs";import{join as mh}from"node:path";yr();import{QdrantClient as b0}from"@qdrant/js-client-rest";var wr="conversations",Sr=class{qdrantUrl;ollamaUrl;qdrant=null;collectionReady=!1;constructor(e,t){this.qdrantUrl=e??process.env.QDRANT_URL??"http://localhost:6333",this.ollamaUrl=t??process.env.OLLAMA_URL??"http://localhost:11434"}getClient(){return this.qdrant||(this.qdrant=new b0({url:this.qdrantUrl})),this.qdrant}async ensureCollection(){if(this.collectionReady)return;let e=this.getClient(),{collections:t}=await e.getCollections();if(!t.some(r=>r.name===wr)){let i=(await qe(this.ollamaUrl,"test")).length;await e.createCollection(wr,{vectors:{size:i,distance:"Cosine"}})}this.collectionReady=!0}async index(e){await this.ensureCollection();let t=this.getClient(),s=e.inbound+`
286
286
 
287
- `+e.response,r=await qe(this.ollamaUrl,s),i=crypto.randomUUID();await t.upsert(Sr,{points:[{id:i,vector:r,payload:{agentId:e.agentId,threadId:e.threadId,channelId:e.channelId,source:e.source,senderName:e.senderName,timestampUnix:e.timestampUnix,timestamp:e.timestamp,inbound:e.inbound,response:e.response}}]})}async search(e,t,s,r){await this.ensureCollection();let i=this.getClient(),o=await qe(this.ollamaUrl,e),a=[{key:"agentId",match:{value:t}}];return r!==void 0&&a.push({key:"timestampUnix",range:{gte:r}}),(await i.search(Sr,{vector:o,limit:s,with_payload:!0,filter:{must:a}})).map(c=>({agentId:c.payload?.agentId,threadId:c.payload?.threadId,channelId:c.payload?.channelId,source:c.payload?.source,senderName:c.payload?.senderName,timestampUnix:c.payload?.timestampUnix,timestamp:c.payload?.timestamp,inbound:c.payload?.inbound,response:c.payload?.response,score:c.score}))}};var me=I("agent-manager"),w0=new br;function S0(n){if(!hh(n))return[];try{return g0(n).map(e=>fh(n,e)).filter(e=>{try{return y0(e).isDirectory()&&hh(fh(e,"skills"))}catch{return!1}})}catch{return[]}}var _r=class{states=new Map;queues=new Map;processing=new Set;activeRunners=new Map;activeThreads=new Map;registry;memoryManager;sessionStore;plugins;seedDirs;skillIndex;activityLogger;prefetcher;constructor(e,t,s,r,i){this.registry=e,this.memoryManager=t,this.sessionStore=s,this.activityLogger=r,this.prefetcher=i,this.plugins=Sa(m.plugins,le),this.seedDirs=S0(rc),this.skillIndex=la(ze,this.plugins,this.seedDirs)}getPlugins(){return this.plugins}createRunner(e){let t=this.registry.get(e);if(!t)throw new Error(`Unknown agent: ${e}`);let s=JSON.stringify(this.registry.getSubscriberMap());return new Us(t,this.memoryManager,this.plugins,this.skillIndex,s,this.prefetcher)}reloadSkills(){try{this.skillIndex=la(ze,this.plugins,this.seedDirs)}catch(e){me.warn("Skill reload failed, retaining previous index",{error:String(e)})}}ensureState(e){this.states.has(e)||this.states.set(e,{id:e,status:"idle",lastActivity:new Date,messagesProcessed:0,errorCount:0,activeThreadCount:0})}async sendMessage(e,t,s){this.ensureState(e);let r=t.threadId??t.id,i=`${e}:${r}`;return new Promise((o,a)=>{let l=this.queues.get(i)??[];l.push({message:t,onStream:s,resolve:o,reject:a}),this.queues.set(i,l),this.processThreadQueue(e,i).catch(c=>{me.error("processThreadQueue failed unexpectedly",{agentId:e,threadKey:i,error:String(c)}),this.processing.delete(i);let d=this.activeThreads.get(e);d&&(d.delete(i),this.updateThreadCount(e),d.size===0&&this.updateStatus(e,"idle"));let u=this.queues.get(i);if(u){for(let h of u)h.reject(c instanceof Error?c:new Error(String(c)));this.queues.delete(i)}this.retryDeferredThreads(e)})})}async processThreadQueue(e,t){if(this.processing.has(t))return;let s=this.queues.get(t);if(!s||s.length===0)return;let r=this.registry.get(e),i=r?.maxConcurrent??3,o=this.activeThreads.get(e)??new Set;if(o.size>=i){me.debug("Agent at concurrency limit, deferring",{agentId:e,threadKey:t,active:o.size,limit:i});return}this.processing.add(t),o.add(t),this.activeThreads.set(e,o),this.updateStatus(e,"processing"),this.updateThreadCount(e);let a=this.createRunner(e),l=this.activeRunners.get(e)??new Set;l.add(a),this.activeRunners.set(e,l);let c=0,d,u;for(;s.length>0;){let g=s.shift();try{let f=g.message.threadId??g.message.id,y=await this.sessionStore.get(e,f),w={adapterId:g.message.source.adapterId??g.message.source.kind,channelId:g.message.source.id,channelKind:g.message.source.kind,channelLabel:g.message.source.label,threadId:g.message.threadId??g.message.id,slackTs:g.message.meta?.slackTs??"",slackThreadTs:g.message.meta?.slackThreadTs??""},S=g.message.senderName??g.message.sender,b=g.message.source.kind==="team"?g.message.meta?.user:void 0,A;b?A=`[user:${b} via ${S} in #${g.message.source.label}]: ${g.message.text}`:g.message.senderName?A=`[${S} in #${g.message.source.label}]: ${g.message.text}`:A=g.message.text,g.message.files?.length&&(A+=sh(g.message.files));let v,C=0,M;if(m.modelRouter.enabled&&g.message.sender!=="system")try{let j=this.registry.get(e);if(j){let J=await rh(g.message.text,j.model,j.resourceTiers);v=J.model!==j.model?J.model:void 0,C=J.costUsd,M=J.resourceLimits}}catch(j){me.warn("Model router failed, using default",{agentId:e,error:String(j)})}let _=await a.send(A,y,g.onStream,w,v,M);_.costUsd+=C,_.sessionId&&!_.aborted&&this.sessionStore.set(e,f,_.sessionId,{inputTokens:_.inputTokens,outputTokens:_.outputTokens,cacheReadTokens:_.cacheReadTokens,cacheCreationTokens:_.cacheCreationTokens,contextWindow:_.contextWindow,compactions:_.compactions,preCompactTokens:_.preCompactTokens});let L=this.states.get(e);L.messagesProcessed++,L.lastActivity=new Date,L.currentSessionId=_.sessionId,_.error&&(L.errorCount++,y&&this.sessionStore.delete(e,f)),g.resolve(_),c++,d=g,u=_,_.text&&!_.error&&w0.index({agentId:e,threadId:f,channelId:g.message.source.id,source:g.message.source.kind,senderName:g.message.senderName??"unknown",timestampUnix:Math.floor(Date.now()/1e3),timestamp:new Date().toISOString(),inbound:A,response:_.text}).catch(j=>me.warn("Conversation indexing failed",{agentId:e,error:String(j)})),this.activityLogger?.record({agentId:e,threadId:f,timestamp:new Date,sender:g.message.sender,senderName:g.message.senderName,channel:g.message.source.label,channelKind:g.message.source.kind,model:v??r?.model??"unknown",modelTier:void 0,costUsd:_.costUsd,durationMs:_.durationMs,inputTokens:_.inputTokens,outputTokens:_.outputTokens,contextWindow:_.contextWindow,toolCalls:_.toolCalls,toolSummary:_.toolSummary,compactions:_.compactions,streamed:_.streamed,error:_.error})}catch(f){let y=this.states.get(e);y&&(y.errorCount++,y.lastActivity=new Date),this.activityLogger?.record({agentId:e,threadId:g.message.threadId??g.message.id,timestamp:new Date,sender:g.message.sender,senderName:g.message.senderName,channel:g.message.source.label,channelKind:g.message.source.kind,model:r?.model??"unknown",costUsd:0,durationMs:0,inputTokens:0,outputTokens:0,contextWindow:0,toolCalls:0,toolSummary:"none",compactions:0,streamed:!1,error:String(f)}),g.reject(f instanceof Error?f:new Error(String(f)))}}let h=[...r?.coreServers??[],...r?.delegateServers??[]];if((h.includes("memory")||h.includes("structured-memory"))&&u&&d&&!u.error&&!u.aborted&&c>=m.memory.reflectionMinTurns&&d.message.sender!=="system")try{let g=["[System \u2014 end of conversation reflection]","This conversation is wrapping up. Review what was discussed:","- Were any new facts, decisions, or commitments made?","- Did anything contradict or update what you previously knew?","- Should any existing memories be updated or forgotten?","","If yes, use memory_save, memory_update, or memory_forget now.","If nothing worth saving, do nothing."].join(`
288
- `),f=await a.send(g,u.sessionId);if(me.info("Reflection completed",{agentId:e,threadKey:t,turnCount:c,costUsd:f.costUsd,toolCalls:f.toolCalls,toolSummary:f.toolSummary||void 0}),f.sessionId&&!f.aborted){let y=d.message.threadId??d.message.id;this.sessionStore.set(e,y,f.sessionId,{inputTokens:f.inputTokens,outputTokens:f.outputTokens,cacheReadTokens:f.cacheReadTokens,cacheCreationTokens:f.cacheCreationTokens,contextWindow:f.contextWindow,compactions:f.compactions,preCompactTokens:f.preCompactTokens})}}catch(g){me.warn("Reflection failed, non-critical",{agentId:e,threadKey:t,error:String(g)})}l.delete(a),this.processing.delete(t),o.delete(t),this.queues.delete(t),this.updateThreadCount(e),o.size===0&&this.updateStatus(e,"idle"),this.retryDeferredThreads(e)}updateThreadCount(e){let t=this.states.get(e);t&&(t.activeThreadCount=this.activeThreads.get(e)?.size??0)}retryDeferredThreads(e){let t=`${e}:`;for(let[s,r]of this.queues)if(s.startsWith(t)&&r.length>0&&!this.processing.has(s)){this.processThreadQueue(e,s);break}}updateStatus(e,t){let s=this.states.get(e);s&&(s.status=t,me.debug("Agent status changed",{agentId:e,status:t}))}getState(e){return this.states.get(e)}getAllStates(){return Array.from(this.states.values())}stopAgent(e){let t=this.activeRunners.get(e);if(t){for(let s of t)s.abort();t.clear()}this.activeRunners.delete(e),this.activeThreads.delete(e),this.updateStatus(e,"stopped")}stopAll(){for(let e of this.states.keys())this.stopAgent(e);me.info("All agents stopped")}async findAgentForThread(e){return this.sessionStore.findAgentByThread(e)}async findAgentsForThread(e){return this.sessionStore.findAgentsByThread(e)}restartAgent(e){this.stopAgent(e),this.sessionStore.clearAgent(e),this.states.set(e,{id:e,status:"idle",lastActivity:new Date,messagesProcessed:0,errorCount:0,activeThreadCount:0}),me.info("Agent restarted",{agentId:e})}sweep(){let e=0,t=[];for(let[r,i]of this.states)!this.registry.get(r)&&(i.status==="stopped"||i.status==="idle")&&(this.states.delete(r),this.activeRunners.delete(r),this.activeThreads.delete(r),e++,me.info("Zombie agent state removed",{agentId:r}));for(let r of this.processing){let i=r.split(":")[0],o=this.activeRunners.get(i);if(!o||o.size===0){this.processing.delete(r);let a=this.activeThreads.get(i);a&&(a.delete(r),this.updateThreadCount(i),a.size===0&&this.updateStatus(i,"idle")),e++,me.warn("Stuck processing flag cleared",{threadKey:r,agentId:i});let l=this.queues.get(r);l&&l.length>0&&this.processThreadQueue(i,r).catch(c=>{me.error("Failed to restart stuck queue",{threadKey:r,error:String(c)})})}}let s=new Set;for(let r of this.queues.keys())s.add(r.split(":")[0]);for(let r of s)this.retryDeferredThreads(r);return{component:"agent-manager",pruned:e,retried:0,bytesFreed:0,errors:t}}};O();js();import{SocketModeClient as b0}from"@slack/socket-mode";import{WebClient as _0}from"@slack/web-api";var H=I("slack-gateway"),kr=class n{socket;web;messageHandler=null;threadStartedHandler=null;threadContextHandler=null;botUserId=null;botId=null;peerBotUserIds=new Set;peerBotIds=new Set;channelNameCache=new Map;userNameCache=new Map;integrationChannels=new Set;botToken;constructor(e,t){this.socket=new b0({appToken:e}),this.web=new _0(t),this.botToken=t}addIntegrationChannels(e){for(let t of e)this.integrationChannels.add(t)}addPeerBotIds(e,t){e&&this.peerBotUserIds.add(e),t&&this.peerBotIds.add(t),H.info("Peer bot IDs registered",{peerBotUserIds:[...this.peerBotUserIds],peerBotIds:[...this.peerBotIds]})}get resolvedBotUserId(){return this.botUserId}get resolvedBotId(){return this.botId}onMessage(e){this.messageHandler=e}onThreadStarted(e){this.threadStartedHandler=e}onThreadContextChanged(e){this.threadContextHandler=e}async start(){let e=await this.web.auth.test();this.botUserId=e.user_id,this.botId=e.bot_id??null,H.info("Bot identity resolved",{botUserId:this.botUserId,botId:this.botId}),this.socket.on("message",async({event:t,ack:s})=>{if(await s(),!t||(H.debug("Raw message event",{subtype:t.subtype,bot_id:t.bot_id,user:t.user,channel:t.channel,hasText:!!t.text,hasAttachments:!!t.attachments?.length,hasBlocks:!!t.blocks?.length}),t.user===this.botUserId)||this.peerBotUserIds.has(t.user)||t.bot_id&&t.bot_id===this.botId||t.bot_id&&this.peerBotIds.has(t.bot_id))return;if(t.bot_id||t.subtype){let l=await this.resolveChannelName(t.channel);if(!this.integrationChannels.has(l)){H.info("Message filtered (subtype/bot in non-integration channel)",{channel:t.channel,channelName:l,user:t.user,subtype:t.subtype,bot_id:t.bot_id,hasText:!!t.text});return}H.info("Integration message accepted",{channelName:l,subtype:t.subtype,bot_id:t.bot_id})}let r=await this.resolveChannelName(t.channel),i=t.text??"";if(!i){let l=[...t.blocks??[]];for(let c of t.attachments??[])c.blocks&&l.push(...c.blocks),c.text&&(i+=c.text+`
287
+ `+e.response,r=await qe(this.ollamaUrl,s),i=crypto.randomUUID();await t.upsert(wr,{points:[{id:i,vector:r,payload:{agentId:e.agentId,threadId:e.threadId,channelId:e.channelId,source:e.source,senderName:e.senderName,timestampUnix:e.timestampUnix,timestamp:e.timestamp,inbound:e.inbound,response:e.response}}]})}async search(e,t,s,r){await this.ensureCollection();let i=this.getClient(),o=await qe(this.ollamaUrl,e),a=[{key:"agentId",match:{value:t}}];return r!==void 0&&a.push({key:"timestampUnix",range:{gte:r}}),(await i.search(wr,{vector:o,limit:s,with_payload:!0,filter:{must:a}})).map(c=>({agentId:c.payload?.agentId,threadId:c.payload?.threadId,channelId:c.payload?.channelId,source:c.payload?.source,senderName:c.payload?.senderName,timestampUnix:c.payload?.timestampUnix,timestamp:c.payload?.timestamp,inbound:c.payload?.inbound,response:c.payload?.response,score:c.score}))}};var me=T("agent-manager"),v0=new Sr;function T0(n){if(!ph(n))return[];try{return _0(n).map(e=>mh(n,e)).filter(e=>{try{return k0(e).isDirectory()&&ph(mh(e,"skills"))}catch{return!1}})}catch{return[]}}var br=class{states=new Map;queues=new Map;processing=new Set;activeRunners=new Map;activeThreads=new Map;registry;memoryManager;sessionStore;plugins;seedDirs;skillIndex;activityLogger;prefetcher;constructor(e,t,s,r,i){this.registry=e,this.memoryManager=t,this.sessionStore=s,this.activityLogger=r,this.prefetcher=i,this.plugins=ba(m.plugins,ce),this.seedDirs=T0(oc),this.skillIndex=da(Qe,this.plugins,this.seedDirs)}getPlugins(){return this.plugins}createRunner(e){let t=this.registry.get(e);if(!t)throw new Error(`Unknown agent: ${e}`);let s=JSON.stringify(this.registry.getSubscriberMap());return new Bs(t,this.memoryManager,this.plugins,this.skillIndex,s,this.prefetcher)}reloadSkills(){try{this.skillIndex=da(Qe,this.plugins,this.seedDirs)}catch(e){me.warn("Skill reload failed, retaining previous index",{error:String(e)})}}ensureState(e){this.states.has(e)||this.states.set(e,{id:e,status:"idle",lastActivity:new Date,messagesProcessed:0,errorCount:0,activeThreadCount:0})}async sendMessage(e,t,s){this.ensureState(e);let r=t.threadId??t.id,i=`${e}:${r}`;return new Promise((o,a)=>{let l=this.queues.get(i)??[];l.push({message:t,onStream:s,resolve:o,reject:a}),this.queues.set(i,l),this.processThreadQueue(e,i).catch(c=>{me.error("processThreadQueue failed unexpectedly",{agentId:e,threadKey:i,error:String(c)}),this.processing.delete(i);let d=this.activeThreads.get(e);d&&(d.delete(i),this.updateThreadCount(e),d.size===0&&this.updateStatus(e,"idle"));let u=this.queues.get(i);if(u){for(let h of u)h.reject(c instanceof Error?c:new Error(String(c)));this.queues.delete(i)}this.retryDeferredThreads(e)})})}async processThreadQueue(e,t){if(this.processing.has(t))return;let s=this.queues.get(t);if(!s||s.length===0)return;let r=this.registry.get(e),i=r?.maxConcurrent??3,o=this.activeThreads.get(e)??new Set;if(o.size>=i){me.debug("Agent at concurrency limit, deferring",{agentId:e,threadKey:t,active:o.size,limit:i});return}this.processing.add(t),o.add(t),this.activeThreads.set(e,o),this.updateStatus(e,"processing"),this.updateThreadCount(e);let a=this.createRunner(e),l=this.activeRunners.get(e)??new Set;l.add(a),this.activeRunners.set(e,l);let c=0,d,u;for(;s.length>0;){let g=s.shift();try{let f=g.message.threadId??g.message.id,y=await this.sessionStore.get(e,f),w={adapterId:g.message.source.adapterId??g.message.source.kind,channelId:g.message.source.id,channelKind:g.message.source.kind,channelLabel:g.message.source.label,threadId:g.message.threadId??g.message.id,slackTs:g.message.meta?.slackTs??"",slackThreadTs:g.message.meta?.slackThreadTs??""},S=g.message.senderName??g.message.sender,b=g.message.source.kind==="team"?g.message.meta?.user:void 0,A;b?A=`[user:${b} via ${S} in #${g.message.source.label}]: ${g.message.text}`:g.message.senderName?A=`[${S} in #${g.message.source.label}]: ${g.message.text}`:A=g.message.text,g.message.files?.length&&(A+=rh(g.message.files));let v,C=0,M;if(m.modelRouter.enabled&&g.message.sender!=="system")try{let U=this.registry.get(e);if(U){let z=await oh(g.message.text,U.model,U.resourceTiers);v=z.model!==U.model?z.model:void 0,C=z.costUsd,M=z.resourceLimits}}catch(U){me.warn("Model router failed, using default",{agentId:e,error:String(U)})}let _=await a.send(A,y,g.onStream,w,v,M);_.costUsd+=C,_.sessionId&&!_.aborted&&this.sessionStore.set(e,f,_.sessionId,{inputTokens:_.inputTokens,outputTokens:_.outputTokens,cacheReadTokens:_.cacheReadTokens,cacheCreationTokens:_.cacheCreationTokens,contextWindow:_.contextWindow,compactions:_.compactions,preCompactTokens:_.preCompactTokens});let P=this.states.get(e);P.messagesProcessed++,P.lastActivity=new Date,P.currentSessionId=_.sessionId,_.error&&(P.errorCount++,y&&this.sessionStore.delete(e,f)),g.resolve(_),c++,d=g,u=_,_.text&&!_.error&&v0.index({agentId:e,threadId:f,channelId:g.message.source.id,source:g.message.source.kind,senderName:g.message.senderName??"unknown",timestampUnix:Math.floor(Date.now()/1e3),timestamp:new Date().toISOString(),inbound:A,response:_.text}).catch(U=>me.warn("Conversation indexing failed",{agentId:e,error:String(U)})),this.activityLogger?.record({agentId:e,threadId:f,timestamp:new Date,sender:g.message.sender,senderName:g.message.senderName,channel:g.message.source.label,channelKind:g.message.source.kind,model:v??r?.model??"unknown",modelTier:void 0,costUsd:_.costUsd,durationMs:_.durationMs,inputTokens:_.inputTokens,outputTokens:_.outputTokens,contextWindow:_.contextWindow,toolCalls:_.toolCalls,toolSummary:_.toolSummary,compactions:_.compactions,streamed:_.streamed,error:_.error})}catch(f){let y=this.states.get(e);y&&(y.errorCount++,y.lastActivity=new Date),this.activityLogger?.record({agentId:e,threadId:g.message.threadId??g.message.id,timestamp:new Date,sender:g.message.sender,senderName:g.message.senderName,channel:g.message.source.label,channelKind:g.message.source.kind,model:r?.model??"unknown",costUsd:0,durationMs:0,inputTokens:0,outputTokens:0,contextWindow:0,toolCalls:0,toolSummary:"none",compactions:0,streamed:!1,error:String(f)}),g.reject(f instanceof Error?f:new Error(String(f)))}}let h=[...r?.coreServers??[],...r?.delegateServers??[]];if((h.includes("memory")||h.includes("structured-memory"))&&u&&d&&!u.error&&!u.aborted&&c>=m.memory.reflectionMinTurns&&d.message.sender!=="system")try{let g=["[System \u2014 end of conversation reflection]","This conversation is wrapping up. Review what was discussed:","- Were any new facts, decisions, or commitments made?","- Did anything contradict or update what you previously knew?","- Should any existing memories be updated or forgotten?","","If yes, use memory_save, memory_update, or memory_forget now.","If nothing worth saving, do nothing."].join(`
288
+ `),f=await a.send(g,u.sessionId);if(me.info("Reflection completed",{agentId:e,threadKey:t,turnCount:c,costUsd:f.costUsd,toolCalls:f.toolCalls,toolSummary:f.toolSummary||void 0}),f.sessionId&&!f.aborted){let y=d.message.threadId??d.message.id;this.sessionStore.set(e,y,f.sessionId,{inputTokens:f.inputTokens,outputTokens:f.outputTokens,cacheReadTokens:f.cacheReadTokens,cacheCreationTokens:f.cacheCreationTokens,contextWindow:f.contextWindow,compactions:f.compactions,preCompactTokens:f.preCompactTokens})}}catch(g){me.warn("Reflection failed, non-critical",{agentId:e,threadKey:t,error:String(g)})}l.delete(a),this.processing.delete(t),o.delete(t),this.queues.delete(t),this.updateThreadCount(e),o.size===0&&this.updateStatus(e,"idle"),this.retryDeferredThreads(e)}updateThreadCount(e){let t=this.states.get(e);t&&(t.activeThreadCount=this.activeThreads.get(e)?.size??0)}retryDeferredThreads(e){let t=`${e}:`;for(let[s,r]of this.queues)if(s.startsWith(t)&&r.length>0&&!this.processing.has(s)){this.processThreadQueue(e,s);break}}updateStatus(e,t){let s=this.states.get(e);s&&(s.status=t,me.debug("Agent status changed",{agentId:e,status:t}))}getState(e){return this.states.get(e)}getAllStates(){return Array.from(this.states.values())}stopAgent(e){let t=this.activeRunners.get(e);if(t){for(let s of t)s.abort();t.clear()}this.activeRunners.delete(e),this.activeThreads.delete(e),this.updateStatus(e,"stopped")}stopAll(){for(let e of this.states.keys())this.stopAgent(e);me.info("All agents stopped")}async findAgentForThread(e){return this.sessionStore.findAgentByThread(e)}async findAgentsForThread(e){return this.sessionStore.findAgentsByThread(e)}restartAgent(e){this.stopAgent(e),this.sessionStore.clearAgent(e),this.states.set(e,{id:e,status:"idle",lastActivity:new Date,messagesProcessed:0,errorCount:0,activeThreadCount:0}),me.info("Agent restarted",{agentId:e})}sweep(){let e=0,t=[];for(let[r,i]of this.states)!this.registry.get(r)&&(i.status==="stopped"||i.status==="idle")&&(this.states.delete(r),this.activeRunners.delete(r),this.activeThreads.delete(r),e++,me.info("Zombie agent state removed",{agentId:r}));for(let r of this.processing){let i=r.split(":")[0],o=this.activeRunners.get(i);if(!o||o.size===0){this.processing.delete(r);let a=this.activeThreads.get(i);a&&(a.delete(r),this.updateThreadCount(i),a.size===0&&this.updateStatus(i,"idle")),e++,me.warn("Stuck processing flag cleared",{threadKey:r,agentId:i});let l=this.queues.get(r);l&&l.length>0&&this.processThreadQueue(i,r).catch(c=>{me.error("Failed to restart stuck queue",{threadKey:r,error:String(c)})})}}let s=new Set;for(let r of this.queues.keys())s.add(r.split(":")[0]);for(let r of s)this.retryDeferredThreads(r);return{component:"agent-manager",pruned:e,retried:0,bytesFreed:0,errors:t}}};O();qs();import{SocketModeClient as I0}from"@slack/socket-mode";import{WebClient as A0}from"@slack/web-api";var W=T("slack-gateway"),_r=class n{socket;web;messageHandler=null;threadStartedHandler=null;threadContextHandler=null;botUserId=null;botId=null;peerBotUserIds=new Set;peerBotIds=new Set;channelNameCache=new Map;userNameCache=new Map;integrationChannels=new Set;botToken;constructor(e,t){this.socket=new I0({appToken:e}),this.web=new A0(t),this.botToken=t}addIntegrationChannels(e){for(let t of e)this.integrationChannels.add(t)}addPeerBotIds(e,t){e&&this.peerBotUserIds.add(e),t&&this.peerBotIds.add(t),W.info("Peer bot IDs registered",{peerBotUserIds:[...this.peerBotUserIds],peerBotIds:[...this.peerBotIds]})}get resolvedBotUserId(){return this.botUserId}get resolvedBotId(){return this.botId}onMessage(e){this.messageHandler=e}onThreadStarted(e){this.threadStartedHandler=e}onThreadContextChanged(e){this.threadContextHandler=e}async start(){let e=await this.web.auth.test();this.botUserId=e.user_id,this.botId=e.bot_id??null,W.info("Bot identity resolved",{botUserId:this.botUserId,botId:this.botId}),this.socket.on("message",async({event:t,ack:s})=>{if(await s(),!t||(W.debug("Raw message event",{subtype:t.subtype,bot_id:t.bot_id,user:t.user,channel:t.channel,hasText:!!t.text,hasAttachments:!!t.attachments?.length,hasBlocks:!!t.blocks?.length}),t.user===this.botUserId)||this.peerBotUserIds.has(t.user)||t.bot_id&&t.bot_id===this.botId||t.bot_id&&this.peerBotIds.has(t.bot_id))return;if(t.bot_id||t.subtype){let l=await this.resolveChannelName(t.channel);if(!this.integrationChannels.has(l)){W.info("Message filtered (subtype/bot in non-integration channel)",{channel:t.channel,channelName:l,user:t.user,subtype:t.subtype,bot_id:t.bot_id,hasText:!!t.text});return}W.info("Integration message accepted",{channelName:l,subtype:t.subtype,bot_id:t.bot_id})}let r=await this.resolveChannelName(t.channel),i=t.text??"";if(!i){let l=[...t.blocks??[]];for(let c of t.attachments??[])c.blocks&&l.push(...c.blocks),c.text&&(i+=c.text+`
289
289
  `);i||(i=l.filter(c=>c.type==="section"||c.type==="rich_text").map(c=>c.text?.text?c.text.text:c.elements?c.elements.map(d=>d.elements?.map(u=>u.text||"").join("")??"").join(`
290
290
  `):"").filter(Boolean).join(`
291
- `)),i=i.trim()}let o=[];if(t.files?.length&&(H.info("Processing file attachments",{count:t.files.length,names:t.files.map(c=>c.name)}),o=(await Promise.all(t.files.map(c=>eh(c,this.botToken)))).filter(Boolean)),!i&&o.length===0){H.info("Skipping message with no extractable text or files",{channel:t.channel,channelName:r,user:t.user,subtype:t.subtype,hasBlocks:!!t.blocks?.length,hasAttachments:!!t.attachments?.length,blockTypes:t.blocks?.map(l=>l.type)});return}!i&&o.length>0&&(i=`[shared ${o.length} file${o.length>1?"s":""}]`),i=await this.resolveUserMentions(i);let a={text:i,channel:t.channel,channelName:r,user:t.user??t.bot_id??"unknown",ts:t.ts,threadTs:t.thread_ts,files:o.length>0?o:void 0};H.info("Message received",{channel:a.channel,channelName:r,user:a.user,textLength:a.text.length,fileCount:o.length}),this.messageHandler?.(a)}),this.socket.on("assistant_thread_started",async({event:t,ack:s})=>{await s(),H.info("Assistant thread started",{channel:t?.assistant_thread?.channel_id});let r=t?.assistant_thread;r&&this.threadStartedHandler?.({channel:r.channel_id,threadTs:r.thread_ts,context:r.context??{}})}),this.socket.on("assistant_thread_context_changed",async({event:t,ack:s})=>{await s(),H.info("Assistant thread context changed",{channel:t?.assistant_thread?.channel_id});let r=t?.assistant_thread;r&&this.threadContextHandler?.({channel:r.channel_id,threadTs:r.thread_ts,context:r.context??{}})}),this.socket.on("slack_event",async({ack:t,body:s})=>{await t();let r=s?.event;r&&H.debug("slack_event",{type:r.type,subtype:r.subtype,channel:r.channel})}),await this.socket.start(),H.info("Socket Mode connected")}async stop(){await this.socket.disconnect(),H.info("Socket Mode disconnected")}async setThreadStatus(e,t,s){try{await this.web.assistant.threads.setStatus({channel_id:e,thread_ts:t,status:s})}catch(r){H.warn("Failed to set thread status",{error:String(r)})}}async setSuggestedPrompts(e,t,s){try{await this.web.assistant.threads.setSuggestedPrompts({channel_id:e,thread_ts:t,prompts:s})}catch(r){H.warn("Failed to set suggested prompts",{error:String(r)})}}async setThreadTitle(e,t,s){try{await this.web.assistant.threads.setTitle({channel_id:e,thread_ts:t,title:s})}catch(r){H.warn("Failed to set thread title",{error:String(r)})}}async startStream(e,t){try{let s=await this.web.chat.startStream({channel:e,thread_ts:t});return s.channel&&s.ts?{channel:s.channel,ts:s.ts}:void 0}catch(s){H.warn("Failed to start stream",{error:String(s)});return}}async appendStream(e,t,s){try{await this.web.chat.appendStream({channel:e,ts:t,markdown_text:s})}catch(r){H.warn("Failed to append stream",{error:String(r)})}}async stopStream(e,t){try{await this.web.chat.stopStream({channel:e,ts:t})}catch(s){H.warn("Failed to stop stream",{error:String(s)})}}static SLACK_MAX_CHARS=3900;static SPLIT_MAX_CHARS=8e3;static SUMMARY_LENGTH=200;async postMessage(e,t,s,r){return t.length<=n.SLACK_MAX_CHARS?this.postSingle(e,t,s,r):t.length<=n.SPLIT_MAX_CHARS?this.postSplit(e,t,s,r):this.postAsFile(e,t,s,r)}async postSingle(e,t,s,r){if(r)try{let i={};return r.icon&&(r.icon.startsWith(":")&&r.icon.endsWith(":")?i.icon_emoji=r.icon:i.icon_url=r.icon),(await this.web.chat.postMessage({channel:e,text:t,thread_ts:s,unfurl_links:!1,username:r.name,...i})).ts}catch(i){H.warn("Failed to post with identity, falling back to plain post",{error:String(i)})}try{return(await this.web.chat.postMessage({channel:e,text:t,thread_ts:s,unfurl_links:!1})).ts}catch(i){H.error("Failed to post message",{channel:e,error:String(i)});return}}splitText(e){let t=n.SLACK_MAX_CHARS,s=[],r=e;for(;r.length>t;){let i=-1,o=r.lastIndexOf(`
291
+ `)),i=i.trim()}let o=[];if(t.files?.length&&(W.info("Processing file attachments",{count:t.files.length,names:t.files.map(c=>c.name)}),o=(await Promise.all(t.files.map(c=>sh(c,this.botToken)))).filter(Boolean)),!i&&o.length===0){W.info("Skipping message with no extractable text or files",{channel:t.channel,channelName:r,user:t.user,subtype:t.subtype,hasBlocks:!!t.blocks?.length,hasAttachments:!!t.attachments?.length,blockTypes:t.blocks?.map(l=>l.type)});return}!i&&o.length>0&&(i=`[shared ${o.length} file${o.length>1?"s":""}]`),i=await this.resolveUserMentions(i);let a={text:i,channel:t.channel,channelName:r,user:t.user??t.bot_id??"unknown",ts:t.ts,threadTs:t.thread_ts,files:o.length>0?o:void 0};W.info("Message received",{channel:a.channel,channelName:r,user:a.user,textLength:a.text.length,fileCount:o.length}),this.messageHandler?.(a)}),this.socket.on("assistant_thread_started",async({event:t,ack:s})=>{await s(),W.info("Assistant thread started",{channel:t?.assistant_thread?.channel_id});let r=t?.assistant_thread;r&&this.threadStartedHandler?.({channel:r.channel_id,threadTs:r.thread_ts,context:r.context??{}})}),this.socket.on("assistant_thread_context_changed",async({event:t,ack:s})=>{await s(),W.info("Assistant thread context changed",{channel:t?.assistant_thread?.channel_id});let r=t?.assistant_thread;r&&this.threadContextHandler?.({channel:r.channel_id,threadTs:r.thread_ts,context:r.context??{}})}),this.socket.on("slack_event",async({ack:t,body:s})=>{await t();let r=s?.event;r&&W.debug("slack_event",{type:r.type,subtype:r.subtype,channel:r.channel})}),await this.socket.start(),W.info("Socket Mode connected")}async stop(){await this.socket.disconnect(),W.info("Socket Mode disconnected")}async setThreadStatus(e,t,s){try{await this.web.assistant.threads.setStatus({channel_id:e,thread_ts:t,status:s})}catch(r){W.warn("Failed to set thread status",{error:String(r)})}}async setSuggestedPrompts(e,t,s){try{await this.web.assistant.threads.setSuggestedPrompts({channel_id:e,thread_ts:t,prompts:s})}catch(r){W.warn("Failed to set suggested prompts",{error:String(r)})}}async setThreadTitle(e,t,s){try{await this.web.assistant.threads.setTitle({channel_id:e,thread_ts:t,title:s})}catch(r){W.warn("Failed to set thread title",{error:String(r)})}}async startStream(e,t){try{let s=await this.web.chat.startStream({channel:e,thread_ts:t});return s.channel&&s.ts?{channel:s.channel,ts:s.ts}:void 0}catch(s){W.warn("Failed to start stream",{error:String(s)});return}}async appendStream(e,t,s){try{await this.web.chat.appendStream({channel:e,ts:t,markdown_text:s})}catch(r){W.warn("Failed to append stream",{error:String(r)})}}async stopStream(e,t){try{await this.web.chat.stopStream({channel:e,ts:t})}catch(s){W.warn("Failed to stop stream",{error:String(s)})}}static SLACK_MAX_CHARS=3900;static SPLIT_MAX_CHARS=8e3;static SUMMARY_LENGTH=200;async postMessage(e,t,s,r){return t.length<=n.SLACK_MAX_CHARS?this.postSingle(e,t,s,r):t.length<=n.SPLIT_MAX_CHARS?this.postSplit(e,t,s,r):this.postAsFile(e,t,s,r)}async postSingle(e,t,s,r){if(r)try{let i={};return r.icon&&(r.icon.startsWith(":")&&r.icon.endsWith(":")?i.icon_emoji=r.icon:i.icon_url=r.icon),(await this.web.chat.postMessage({channel:e,text:t,thread_ts:s,unfurl_links:!1,username:r.name,...i})).ts}catch(i){W.warn("Failed to post with identity, falling back to plain post",{error:String(i)})}try{return(await this.web.chat.postMessage({channel:e,text:t,thread_ts:s,unfurl_links:!1})).ts}catch(i){W.error("Failed to post message",{channel:e,error:String(i)});return}}splitText(e){let t=n.SLACK_MAX_CHARS,s=[],r=e;for(;r.length>t;){let i=-1,o=r.lastIndexOf(`
292
292
 
293
293
  `,t);if(o>0&&(i=o+2),i===-1){let a=r.lastIndexOf(`
294
- `,t);a>0&&(i=a+1)}if(i===-1){let a=r.lastIndexOf(" ",t);a>0&&(i=a+1)}i===-1&&(i=t),s.push(r.slice(0,i).trimEnd()),r=r.slice(i).trimStart()}return r.length>0&&s.push(r),s}async postSplit(e,t,s,r){let i=this.splitText(t);H.info("Splitting oversized message",{channel:e,totalLength:t.length,chunks:i.length});let o;for(let a=0;a<i.length;a++){let l=a===0?i[a]:`_(cont.)_ ${i[a]}`,c=await this.postSingle(e,l,s,r);a===0&&(o=c)}return o}async postAsFile(e,t,s,r){let i=t.slice(0,n.SUMMARY_LENGTH),o=i,a=Math.max(i.lastIndexOf(". "),i.lastIndexOf(`.
294
+ `,t);a>0&&(i=a+1)}if(i===-1){let a=r.lastIndexOf(" ",t);a>0&&(i=a+1)}i===-1&&(i=t),s.push(r.slice(0,i).trimEnd()),r=r.slice(i).trimStart()}return r.length>0&&s.push(r),s}async postSplit(e,t,s,r){let i=this.splitText(t);W.info("Splitting oversized message",{channel:e,totalLength:t.length,chunks:i.length});let o;for(let a=0;a<i.length;a++){let l=a===0?i[a]:`_(cont.)_ ${i[a]}`,c=await this.postSingle(e,l,s,r);a===0&&(o=c)}return o}async postAsFile(e,t,s,r){let i=t.slice(0,n.SUMMARY_LENGTH),o=i,a=Math.max(i.lastIndexOf(". "),i.lastIndexOf(`.
295
295
  `),i.lastIndexOf(`?
296
296
  `),i.lastIndexOf("? "),i.lastIndexOf(`!
297
297
  `),i.lastIndexOf("! "));if(a>0)o=i.slice(0,a+1);else{let h=i.lastIndexOf(`
298
298
  `);h>0&&(o=i.slice(0,h))}o=`${o.trimEnd()}
299
299
 
300
- _(full response attached)_`;let l=r?.name??"hive",c=new Date().toISOString().replace(/[:.]/g,"-").slice(0,19),d=`${l.toLowerCase()}-${c}.md`,u=await this.postSingle(e,o,s,r);try{let h={content:t,filename:d,title:`${l} response`},p=s?{channel_id:e,thread_ts:s}:{channel_id:e};return await this.web.files.uploadV2({...h,...p}),H.info("Uploaded oversized message as file",{channel:e,filename:d,length:t.length}),u}catch(h){return H.warn("File upload failed, falling back to split",{channel:e,error:String(h)}),this.postSplit(e,t,s,r)}}async addReaction(e,t,s){try{await this.web.reactions.add({channel:e,name:s,timestamp:t})}catch(r){let i=String(r);i.includes("already_reacted")||H.warn("Failed to add reaction",{channel:e,ts:t,emoji:s,error:i})}}async removeReaction(e,t,s){try{await this.web.reactions.remove({channel:e,name:s,timestamp:t})}catch{}}async resolveUserName(e){let t=this.userNameCache.get(e);if(t)return t;try{let s=await this.web.users.info({user:e});return t=s.user?.profile?.display_name||s.user?.real_name||s.user?.name||e,this.userNameCache.set(e,t),t}catch{return this.userNameCache.set(e,e),e}}async resolveUserMentions(e){let t=/<@(U[A-Z0-9]+)>/g,s=[...e.matchAll(t)];if(s.length===0)return e;let r=e;for(let i of s){let o=i[1],a=this.userNameCache.get(o);if(!a)try{let l=await this.web.users.info({user:o});a=l.user?.profile?.display_name||l.user?.real_name||l.user?.name||o,this.userNameCache.set(o,a)}catch{this.userNameCache.set(o,o);continue}r=r.replace(i[0],`@${a}`)}return r}async resolveChannelName(e){let t=this.channelNameCache.get(e);if(t)return t;try{let r=(await this.web.conversations.info({channel:e})).channel?.name??e;return this.channelNameCache.set(e,r),r}catch{return this.channelNameCache.set(e,e),e}}sweep(){let e=this.channelNameCache.size+this.userNameCache.size;return this.channelNameCache.clear(),this.userNameCache.clear(),{component:"slack-gateway",pruned:e,retried:0,bytesFreed:0,errors:[]}}get client(){return this.web}};O();import{MongoClient as k0}from"mongodb";var v0=I("memory-manager"),vr=class{mongoUri;dbName;client;db;collection;versions;_memoryStore;set memoryStore(e){this._memoryStore=e}constructor(e,t="hive"){this.mongoUri=e,this.dbName=t}async init(){this.client=new k0(this.mongoUri),await this.client.connect(),this.db=this.client.db(this.dbName),this.collection=this.db.collection("memory"),this.versions=this.db.collection("memory_versions"),await this.collection.createIndex({path:1},{unique:!0}),await this.versions.createIndex({path:1,savedAt:-1}),v0.info("Memory manager connected to MongoDB",{db:this.dbName})}async read(e){return(await this.collection.findOne({path:e}))?.content??null}async list(e){let t=e.endsWith("/")?e:e+"/";return(await this.collection.find({path:{$regex:`^${T0(t)}[^/]+$`}}).project({path:1}).toArray()).map(r=>r.path.slice(t.length))}async getHotTierPrompt(e,t){if(!this._memoryStore)return null;let s=await this._memoryStore.getHotTier(e);if(s.length===0)return null;let r={task:"Active Tasks",fact:"Key Facts",decision:"Recent Decisions",preference:"Preferences",interaction:"Recent Interactions",summary:"Summaries"},i={},o=[],a=0;for(let d of s){let h=`- [${d.updatedAt.toISOString().split("T")[0]}] ${d.content} (${d.importance})`,p=Math.ceil(h.length/4);if(a+p>t&&!d.pinned)break;if(a+=p,d.pinned)o.push(`- ${d.content} (${d.importance}, pinned)`);else{let g=d.type;i[g]||(i[g]=[]),i[g].push(h)}}let l=["## Your Memory"];for(let[d,u]of Object.entries(r))i[d]?.length&&l.push(`### ${u}
300
+ _(full response attached)_`;let l=r?.name??"hive",c=new Date().toISOString().replace(/[:.]/g,"-").slice(0,19),d=`${l.toLowerCase()}-${c}.md`,u=await this.postSingle(e,o,s,r);try{let h={content:t,filename:d,title:`${l} response`},p=s?{channel_id:e,thread_ts:s}:{channel_id:e};return await this.web.files.uploadV2({...h,...p}),W.info("Uploaded oversized message as file",{channel:e,filename:d,length:t.length}),u}catch(h){return W.warn("File upload failed, falling back to split",{channel:e,error:String(h)}),this.postSplit(e,t,s,r)}}async addReaction(e,t,s){try{await this.web.reactions.add({channel:e,name:s,timestamp:t})}catch(r){let i=String(r);i.includes("already_reacted")||W.warn("Failed to add reaction",{channel:e,ts:t,emoji:s,error:i})}}async removeReaction(e,t,s){try{await this.web.reactions.remove({channel:e,name:s,timestamp:t})}catch{}}async resolveUserName(e){let t=this.userNameCache.get(e);if(t)return t;try{let s=await this.web.users.info({user:e});return t=s.user?.profile?.display_name||s.user?.real_name||s.user?.name||e,this.userNameCache.set(e,t),t}catch{return this.userNameCache.set(e,e),e}}async resolveUserMentions(e){let t=/<@(U[A-Z0-9]+)>/g,s=[...e.matchAll(t)];if(s.length===0)return e;let r=e;for(let i of s){let o=i[1],a=this.userNameCache.get(o);if(!a)try{let l=await this.web.users.info({user:o});a=l.user?.profile?.display_name||l.user?.real_name||l.user?.name||o,this.userNameCache.set(o,a)}catch{this.userNameCache.set(o,o);continue}r=r.replace(i[0],`@${a}`)}return r}async resolveChannelName(e){let t=this.channelNameCache.get(e);if(t)return t;try{let r=(await this.web.conversations.info({channel:e})).channel?.name??e;return this.channelNameCache.set(e,r),r}catch{return this.channelNameCache.set(e,e),e}}sweep(){let e=this.channelNameCache.size+this.userNameCache.size;return this.channelNameCache.clear(),this.userNameCache.clear(),{component:"slack-gateway",pruned:e,retried:0,bytesFreed:0,errors:[]}}get client(){return this.web}};O();import{MongoClient as C0}from"mongodb";var E0=T("memory-manager"),kr=class{mongoUri;dbName;client;db;collection;versions;_memoryStore;set memoryStore(e){this._memoryStore=e}constructor(e,t="hive"){this.mongoUri=e,this.dbName=t}async init(){this.client=new C0(this.mongoUri),await this.client.connect(),this.db=this.client.db(this.dbName),this.collection=this.db.collection("memory"),this.versions=this.db.collection("memory_versions"),await this.collection.createIndex({path:1},{unique:!0}),await this.versions.createIndex({path:1,savedAt:-1}),E0.info("Memory manager connected to MongoDB",{db:this.dbName})}async read(e){return(await this.collection.findOne({path:e}))?.content??null}async list(e){let t=e.endsWith("/")?e:e+"/";return(await this.collection.find({path:{$regex:`^${N0(t)}[^/]+$`}}).project({path:1}).toArray()).map(r=>r.path.slice(t.length))}async getHotTierPrompt(e,t){if(!this._memoryStore)return null;let s=await this._memoryStore.getHotTier(e);if(s.length===0)return null;let r={task:"Active Tasks",fact:"Key Facts",decision:"Recent Decisions",preference:"Preferences",interaction:"Recent Interactions",summary:"Summaries"},i={},o=[],a=0;for(let d of s){let h=`- [${d.updatedAt.toISOString().split("T")[0]}] ${d.content} (${d.importance})`,p=Math.ceil(h.length/4);if(a+p>t&&!d.pinned)break;if(a+=p,d.pinned)o.push(`- ${d.content} (${d.importance}, pinned)`);else{let g=d.type;i[g]||(i[g]=[]),i[g].push(h)}}let l=["## Your Memory"];for(let[d,u]of Object.entries(r))i[d]?.length&&l.push(`### ${u}
301
301
  ${i[d].join(`
302
302
  `)}`);o.length>0&&l.push(`### Pinned
303
303
  ${o.join(`
304
304
  `)}`);let c=await this._memoryStore.countNonHot(e);return c>0&&l.push(`---
305
305
  You have ${c} additional memories available via \`memory_recall\`. Use it to search for context before starting tasks.`),l.join(`
306
306
 
307
- `)}async write(e,t,s){let r=await this.collection.findOne({path:e});r&&await this.versions.insertOne({path:e,content:r.content,savedAt:r.updatedAt,savedBy:r.updatedBy}),await this.collection.updateOne({path:e},{$set:{content:t,updatedAt:new Date,...s?{updatedBy:s}:{}}},{upsert:!0})}async commitAndPush(e){}async pull(){}async close(){await this.client?.close()}};function T0(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}O();Oe();import{MongoClient as I0}from"mongodb";var z=I("scheduler"),Tr=class{heartbeatTimer=null;cronTimer=null;callbackTimer=null;eventTimer=null;teamTimer=null;agentManager;memoryManager;healthReporter;registry;cronJobs=[];mongoClient=null;db=null;callbackCollection=null;eventsCollection=null;onDispatch;constructor(e,t,s,r,i){this.agentManager=e,this.memoryManager=t,this.healthReporter=s,this.registry=r,this.onDispatch=i;for(let o of r.getAll())for(let a of o.schedule)this.cronJobs.push({agentId:o.id,cron:a.cron,task:a.task,lastRun:null})}async connectDb(e,t){this.mongoClient=new I0(e),await this.mongoClient.connect(),this.db=this.mongoClient.db(t),this.callbackCollection=this.db.collection("agent_callbacks"),this.eventsCollection=this.db.collection("agent_events"),await this.callbackCollection.createIndex({status:1,dueAt:1}),await this.eventsCollection.createIndex({hasPending:1,createdAt:1}),await this.eventsCollection.createIndex({sourceAgentId:1,createdAt:-1}),await this.eventsCollection.createIndex({domain:1,createdAt:-1}),await this.eventsCollection.createIndex({createdAt:1},{expireAfterSeconds:m.events.retentionDays*86400}),await this.db.collection("team_pending_requests").createIndex({status:1,createdAt:-1}),await this.db.collection("team_pending_requests").createIndex({createdAt:1},{expireAfterSeconds:3600}),z.info("Callback store connected",{db:t})}async reloadSchedules(){this.cronJobs=[];for(let e of this.registry.getAll())for(let t of e.schedule)this.cronJobs.push({agentId:e.id,cron:t.cron,task:t.task,lastRun:null});z.info("Schedules reloaded",{jobs:this.cronJobs.length})}start(){this.heartbeatTimer=setInterval(async()=>{try{await this.memoryManager.pull(),await this.healthReporter.writeToMemory()}catch(e){z.error("Heartbeat failed",{error:String(e)})}},m.scheduler.heartbeatIntervalMs),this.cronTimer=setInterval(()=>{this.checkCronJobs()},6e4),this.callbackCollection&&(this.callbackTimer=setInterval(()=>{this.checkCallbacks().catch(e=>{z.error("Callback check failed",{error:String(e)})})},3e4)),this.eventsCollection&&(this.eventTimer=setInterval(()=>{this.checkEvents().catch(e=>{z.error("Event check failed",{error:String(e)})})},3e4)),this.db&&(this.teamTimer=setInterval(()=>{this.fireTeamRequests().catch(e=>z.error("Team request check failed",{error:String(e)}))},5e3)),z.info("Scheduler started",{heartbeatMs:m.scheduler.heartbeatIntervalMs,cronJobs:this.cronJobs.length,callbacksEnabled:!!this.callbackCollection,eventsEnabled:!!this.eventsCollection})}stop(){this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=null),this.cronTimer&&(clearInterval(this.cronTimer),this.cronTimer=null),this.callbackTimer&&(clearInterval(this.callbackTimer),this.callbackTimer=null),this.eventTimer&&(clearInterval(this.eventTimer),this.eventTimer=null),this.teamTimer&&(clearInterval(this.teamTimer),this.teamTimer=null),this.mongoClient?.close().catch(()=>{}),z.info("Scheduler stopped")}checkCronJobs(){let e=new Date;for(let t of this.cronJobs)if(A0(t.cron,e)){if(t.lastRun&&C0(t.lastRun,e))continue;t.lastRun=e;let s=this.registry.get(t.agentId);if(s?.disabled){z.debug("Skipping scheduled task \u2014 agent disabled",{agentId:t.agentId,task:t.task});continue}z.info("Triggering scheduled task",{agentId:t.agentId,task:t.task});let r=s?.homeBase??s?.channels?.[0];if(!r){z.error("Cannot dispatch scheduled task \u2014 agent has no homeBase or channels",{agentId:t.agentId,task:t.task});continue}let i={id:`sched:${t.agentId}:${t.task}:${Date.now()}`,text:`[Scheduled task: ${t.task}] Execute your scheduled "${t.task}" task now.`,source:{kind:"slack",id:r,label:r},sender:"system",threadId:`scheduler:${t.agentId}:${t.task}:${Date.now()}`,timestamp:e,meta:{targetAgentId:t.agentId}};this.onDispatch?this.onDispatch(i):this.agentManager.sendMessage(t.agentId,i).catch(o=>{z.error("Scheduled task failed",{agentId:t.agentId,task:t.task,error:String(o)})})}}async checkCallbacks(){if(!this.callbackCollection)return;let e=new Date,t=this.callbackCollection.find({status:"pending",dueAt:{$lte:e}});for await(let s of t){if((await this.callbackCollection.updateOne({_id:s._id,status:"pending"},{$set:{status:"fired",firedAt:e}})).modifiedCount===0)continue;z.info("Firing callback",{agentId:s.agentId,callbackId:s._id.toString(),contextPreview:s.context.slice(0,80)});let i=this.registry.get(s.agentId);if(!i){z.warn("Callback agent not found, skipping",{agentId:s.agentId});continue}if(i.disabled){z.info("Callback agent disabled, skipping",{agentId:s.agentId});continue}let o={id:`callback:${s._id.toString()}`,text:`[Scheduled callback] ${s.context}`,source:{kind:s.source.channelKind||"slack",id:s.source.channelId,label:s.source.channelLabel,adapterId:s.source.adapterId},sender:"system",threadId:s.source.threadId||void 0,timestamp:e,meta:{slackTs:s.source.slackTs,slackThreadTs:s.source.slackThreadTs,targetAgentId:s.agentId}};this.onDispatch?this.onDispatch(o):this.agentManager.sendMessage(s.agentId,o).catch(a=>{z.error("Callback dispatch failed",{agentId:s.agentId,callbackId:s._id.toString(),error:String(a)})})}}async checkEvents(){if(!this.eventsCollection)return;let e=this.eventsCollection.find({hasPending:!0});for await(let t of e){let s=t.deliveries.filter(r=>r.status==="pending");for(let r of s){let i=new Date;if((await this.eventsCollection.updateOne({_id:t._id,deliveries:{$elemMatch:{agentId:r.agentId,status:"pending"}}},{$set:{"deliveries.$.status":"fired","deliveries.$.firedAt":i}})).modifiedCount===0)continue;await this.eventsCollection.updateOne({_id:t._id,"deliveries.status":{$ne:"pending"}},{$set:{hasPending:!1}});let a=this.registry.get(r.agentId);if(!a){z.warn("Event target agent not found, skipping",{agentId:r.agentId,eventType:t.type});continue}if(a.disabled){z.info("Event target agent disabled, skipping",{agentId:r.agentId,eventType:t.type});continue}let l=t._id.toHexString(),d=this.registry.get(t.sourceAgentId)?.name??t.sourceAgentId;z.info("Dispatching event",{eventType:t.type,eventId:l,targetAgent:r.agentId,sourceAgent:t.sourceAgentId});let u=a.homeBase??`agent-${r.agentId}`,h={id:`event:${l}:${r.agentId}`,text:`[Event: ${t.type} from ${d}]
307
+ `)}async write(e,t,s){let r=await this.collection.findOne({path:e});r&&await this.versions.insertOne({path:e,content:r.content,savedAt:r.updatedAt,savedBy:r.updatedBy}),await this.collection.updateOne({path:e},{$set:{content:t,updatedAt:new Date,...s?{updatedBy:s}:{}}},{upsert:!0})}async commitAndPush(e){}async pull(){}async close(){await this.client?.close()}};function N0(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}O();Oe();import{MongoClient as O0}from"mongodb";var J=T("scheduler"),vr=class{heartbeatTimer=null;cronTimer=null;callbackTimer=null;eventTimer=null;teamTimer=null;agentManager;memoryManager;healthReporter;registry;cronJobs=[];mongoClient=null;db=null;callbackCollection=null;eventsCollection=null;onDispatch;constructor(e,t,s,r,i){this.agentManager=e,this.memoryManager=t,this.healthReporter=s,this.registry=r,this.onDispatch=i;for(let o of r.getAll())for(let a of o.schedule)this.cronJobs.push({agentId:o.id,cron:a.cron,task:a.task,lastRun:null})}async connectDb(e,t){this.mongoClient=new O0(e),await this.mongoClient.connect(),this.db=this.mongoClient.db(t),this.callbackCollection=this.db.collection("agent_callbacks"),this.eventsCollection=this.db.collection("agent_events"),await this.callbackCollection.createIndex({status:1,dueAt:1}),await this.eventsCollection.createIndex({hasPending:1,createdAt:1}),await this.eventsCollection.createIndex({sourceAgentId:1,createdAt:-1}),await this.eventsCollection.createIndex({domain:1,createdAt:-1}),await this.eventsCollection.createIndex({createdAt:1},{expireAfterSeconds:m.events.retentionDays*86400}),await this.db.collection("team_pending_requests").createIndex({status:1,createdAt:-1}),await this.db.collection("team_pending_requests").createIndex({createdAt:1},{expireAfterSeconds:3600}),J.info("Callback store connected",{db:t})}async reloadSchedules(){this.cronJobs=[];for(let e of this.registry.getAll())for(let t of e.schedule)this.cronJobs.push({agentId:e.id,cron:t.cron,task:t.task,lastRun:null});J.info("Schedules reloaded",{jobs:this.cronJobs.length})}start(){this.heartbeatTimer=setInterval(async()=>{try{await this.memoryManager.pull(),await this.healthReporter.writeToMemory()}catch(e){J.error("Heartbeat failed",{error:String(e)})}},m.scheduler.heartbeatIntervalMs),this.cronTimer=setInterval(()=>{this.checkCronJobs()},6e4),this.callbackCollection&&(this.callbackTimer=setInterval(()=>{this.checkCallbacks().catch(e=>{J.error("Callback check failed",{error:String(e)})})},3e4)),this.eventsCollection&&(this.eventTimer=setInterval(()=>{this.checkEvents().catch(e=>{J.error("Event check failed",{error:String(e)})})},3e4)),this.db&&(this.teamTimer=setInterval(()=>{this.fireTeamRequests().catch(e=>J.error("Team request check failed",{error:String(e)}))},5e3)),J.info("Scheduler started",{heartbeatMs:m.scheduler.heartbeatIntervalMs,cronJobs:this.cronJobs.length,callbacksEnabled:!!this.callbackCollection,eventsEnabled:!!this.eventsCollection})}stop(){this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=null),this.cronTimer&&(clearInterval(this.cronTimer),this.cronTimer=null),this.callbackTimer&&(clearInterval(this.callbackTimer),this.callbackTimer=null),this.eventTimer&&(clearInterval(this.eventTimer),this.eventTimer=null),this.teamTimer&&(clearInterval(this.teamTimer),this.teamTimer=null),this.mongoClient?.close().catch(()=>{}),J.info("Scheduler stopped")}checkCronJobs(){let e=new Date;for(let t of this.cronJobs)if(x0(t.cron,e)){if(t.lastRun&&M0(t.lastRun,e))continue;t.lastRun=e;let s=this.registry.get(t.agentId);if(s?.disabled){J.debug("Skipping scheduled task \u2014 agent disabled",{agentId:t.agentId,task:t.task});continue}J.info("Triggering scheduled task",{agentId:t.agentId,task:t.task});let r=s?.homeBase??s?.channels?.[0];if(!r){J.error("Cannot dispatch scheduled task \u2014 agent has no homeBase or channels",{agentId:t.agentId,task:t.task});continue}let i={id:`sched:${t.agentId}:${t.task}:${Date.now()}`,text:`[Scheduled task: ${t.task}] Execute your scheduled "${t.task}" task now.`,source:{kind:"slack",id:r,label:r},sender:"system",threadId:`scheduler:${t.agentId}:${t.task}:${Date.now()}`,timestamp:e,meta:{targetAgentId:t.agentId}};this.onDispatch?this.onDispatch(i):this.agentManager.sendMessage(t.agentId,i).catch(o=>{J.error("Scheduled task failed",{agentId:t.agentId,task:t.task,error:String(o)})})}}async checkCallbacks(){if(!this.callbackCollection)return;let e=new Date,t=this.callbackCollection.find({status:"pending",dueAt:{$lte:e}});for await(let s of t){if((await this.callbackCollection.updateOne({_id:s._id,status:"pending"},{$set:{status:"fired",firedAt:e}})).modifiedCount===0)continue;J.info("Firing callback",{agentId:s.agentId,callbackId:s._id.toString(),contextPreview:s.context.slice(0,80)});let i=this.registry.get(s.agentId);if(!i){J.warn("Callback agent not found, skipping",{agentId:s.agentId});continue}if(i.disabled){J.info("Callback agent disabled, skipping",{agentId:s.agentId});continue}let o={id:`callback:${s._id.toString()}`,text:`[Scheduled callback] ${s.context}`,source:{kind:s.source.channelKind||"slack",id:s.source.channelId,label:s.source.channelLabel,adapterId:s.source.adapterId},sender:"system",threadId:s.source.threadId||void 0,timestamp:e,meta:{slackTs:s.source.slackTs,slackThreadTs:s.source.slackThreadTs,targetAgentId:s.agentId}};this.onDispatch?this.onDispatch(o):this.agentManager.sendMessage(s.agentId,o).catch(a=>{J.error("Callback dispatch failed",{agentId:s.agentId,callbackId:s._id.toString(),error:String(a)})})}}async checkEvents(){if(!this.eventsCollection)return;let e=this.eventsCollection.find({hasPending:!0});for await(let t of e){let s=t.deliveries.filter(r=>r.status==="pending");for(let r of s){let i=new Date;if((await this.eventsCollection.updateOne({_id:t._id,deliveries:{$elemMatch:{agentId:r.agentId,status:"pending"}}},{$set:{"deliveries.$.status":"fired","deliveries.$.firedAt":i}})).modifiedCount===0)continue;await this.eventsCollection.updateOne({_id:t._id,"deliveries.status":{$ne:"pending"}},{$set:{hasPending:!1}});let a=this.registry.get(r.agentId);if(!a){J.warn("Event target agent not found, skipping",{agentId:r.agentId,eventType:t.type});continue}if(a.disabled){J.info("Event target agent disabled, skipping",{agentId:r.agentId,eventType:t.type});continue}let l=t._id.toHexString(),d=this.registry.get(t.sourceAgentId)?.name??t.sourceAgentId;J.info("Dispatching event",{eventType:t.type,eventId:l,targetAgent:r.agentId,sourceAgent:t.sourceAgentId});let u=a.homeBase??`agent-${r.agentId}`,h={id:`event:${l}:${r.agentId}`,text:`[Event: ${t.type} from ${d}]
308
308
 
309
- ${JSON.stringify(t.payload)}`,source:{kind:"internal",id:u,label:u},sender:"system",threadId:`event:${l}:${r.agentId}:${i.getTime()}`,timestamp:i,meta:{targetAgentId:r.agentId,eventType:t.type,eventDomain:t.domain,eventId:l}};this.onDispatch?this.onDispatch(h):this.agentManager.sendMessage(r.agentId,h).catch(p=>{z.error("Event dispatch failed",{agentId:r.agentId,eventType:t.type,eventId:l,error:String(p)})})}}}async fireTeamRequests(){if(!this.db)return;let e=await this.db.collection("team_pending_requests").find({status:"pending"}).toArray();for(let t of e){if(!await this.db.collection("team_pending_requests").findOneAndUpdate({_id:t._id,status:"pending"},{$set:{status:"fired",firedAt:new Date}}))continue;let r={id:`team-${String(t._id)}`,text:t.text,source:{kind:"internal",id:t.channelId,label:`internal:${t.fromAgentId}\u2192${t.targetAgentId}`},sender:t.fromAgentId,senderName:t.fromAgentId,threadId:`internal:${t.channelId}:${t.threadId}`,timestamp:new Date,meta:{targetAgentId:t.targetAgentId,teamRequestId:String(t._id),teamRequestType:t.type}};try{if(t.type==="fire_and_forget")this.onDispatch?this.onDispatch(r):this.agentManager.sendMessage(t.targetAgentId,r).catch(i=>z.error("Fire-and-forget team message failed",{target:t.targetAgentId,error:String(i)}));else if(t.type==="request_response"){let i=await this.agentManager.sendMessage(t.targetAgentId,r);await this.db.collection("team_messages").insertOne({channelId:t.channelId,threadId:t.threadId,senderId:t.targetAgentId,senderType:"agent",senderName:t.targetAgentId,text:i.text,createdAt:new Date}),await this.db.collection("team_pending_requests").updateOne({_id:t._id},{$set:{status:"completed",response:i.text}})}}catch(i){z.error("Team request dispatch failed",{requestId:String(t._id),target:t.targetAgentId,error:String(i)}),await this.db.collection("team_pending_requests").updateOne({_id:t._id},{$set:{status:"failed",error:String(i)}})}}}};function A0(n,e){let t=n.split(/\s+/);if(t.length!==5)return!1;let[s,r,i,o,a]=t,l=e.getMinutes(),c=e.getHours(),d=e.getDate(),u=e.getMonth()+1,h=e.getDay();return Gs(s,l)&&Gs(r,c)&&Gs(i,d)&&Gs(o,u)&&Gs(a,h)}function Gs(n,e){if(n==="*")return!0;if(n.includes("-")){let[t,s]=n.split("-").map(Number);return e>=t&&e<=s}if(n.includes(","))return n.split(",").map(Number).includes(e);if(n.startsWith("*/")){let t=Number(n.slice(2));return e%t===0}return Number(n)===e}function C0(n,e){return n.getFullYear()===e.getFullYear()&&n.getMonth()===e.getMonth()&&n.getDate()===e.getDate()&&n.getHours()===e.getHours()&&n.getMinutes()===e.getMinutes()}O();var E0=I("health-reporter"),Ir=class{agentManager;memoryManager;registry;constructor(e,t,s){this.agentManager=e,this.memoryManager=t,this.registry=s}generateReport(){let e={};for(let t of this.agentManager.getAllStates())e[t.id]={status:t.status,lastActivity:t.lastActivity.toISOString(),messagesProcessed:t.messagesProcessed,errorCount:t.errorCount,sessionId:t.currentSessionId,activeThreads:t.activeThreadCount??0};return{lastUpdated:new Date().toISOString(),agents:e}}formatForSlack(){let e=this.generateReport();if(Object.keys(e.agents).length===0)return"No agents are currently registered.";let s=[`*Hive Status* \u2014 ${new Date().toLocaleString()}
309
+ ${JSON.stringify(t.payload)}`,source:{kind:"internal",id:u,label:u},sender:"system",threadId:`event:${l}:${r.agentId}:${i.getTime()}`,timestamp:i,meta:{targetAgentId:r.agentId,eventType:t.type,eventDomain:t.domain,eventId:l}};this.onDispatch?this.onDispatch(h):this.agentManager.sendMessage(r.agentId,h).catch(p=>{J.error("Event dispatch failed",{agentId:r.agentId,eventType:t.type,eventId:l,error:String(p)})})}}}async fireTeamRequests(){if(!this.db)return;let e=await this.db.collection("team_pending_requests").find({status:"pending"}).toArray();for(let t of e){if(!await this.db.collection("team_pending_requests").findOneAndUpdate({_id:t._id,status:"pending"},{$set:{status:"fired",firedAt:new Date}}))continue;let r={id:`team-${String(t._id)}`,text:t.text,source:{kind:"internal",id:t.channelId,label:`internal:${t.fromAgentId}\u2192${t.targetAgentId}`},sender:t.fromAgentId,senderName:t.fromAgentId,threadId:`internal:${t.channelId}:${t.threadId}`,timestamp:new Date,meta:{targetAgentId:t.targetAgentId,teamRequestId:String(t._id),teamRequestType:t.type}};try{if(t.type==="fire_and_forget")this.onDispatch?this.onDispatch(r):this.agentManager.sendMessage(t.targetAgentId,r).catch(i=>J.error("Fire-and-forget team message failed",{target:t.targetAgentId,error:String(i)}));else if(t.type==="request_response"){let i=await this.agentManager.sendMessage(t.targetAgentId,r);await this.db.collection("team_messages").insertOne({channelId:t.channelId,threadId:t.threadId,senderId:t.targetAgentId,senderType:"agent",senderName:t.targetAgentId,text:i.text,createdAt:new Date}),await this.db.collection("team_pending_requests").updateOne({_id:t._id},{$set:{status:"completed",response:i.text}})}}catch(i){J.error("Team request dispatch failed",{requestId:String(t._id),target:t.targetAgentId,error:String(i)}),await this.db.collection("team_pending_requests").updateOne({_id:t._id},{$set:{status:"failed",error:String(i)}})}}}};function x0(n,e){let t=n.split(/\s+/);if(t.length!==5)return!1;let[s,r,i,o,a]=t,l=e.getMinutes(),c=e.getHours(),d=e.getDate(),u=e.getMonth()+1,h=e.getDay();return Ks(s,l)&&Ks(r,c)&&Ks(i,d)&&Ks(o,u)&&Ks(a,h)}function Ks(n,e){if(n==="*")return!0;if(n.includes("-")){let[t,s]=n.split("-").map(Number);return e>=t&&e<=s}if(n.includes(","))return n.split(",").map(Number).includes(e);if(n.startsWith("*/")){let t=Number(n.slice(2));return e%t===0}return Number(n)===e}function M0(n,e){return n.getFullYear()===e.getFullYear()&&n.getMonth()===e.getMonth()&&n.getDate()===e.getDate()&&n.getHours()===e.getHours()&&n.getMinutes()===e.getMinutes()}O();var D0=T("health-reporter"),Tr=class{agentManager;memoryManager;registry;constructor(e,t,s){this.agentManager=e,this.memoryManager=t,this.registry=s}generateReport(){let e={};for(let t of this.agentManager.getAllStates())e[t.id]={status:t.status,lastActivity:t.lastActivity.toISOString(),messagesProcessed:t.messagesProcessed,errorCount:t.errorCount,sessionId:t.currentSessionId,activeThreads:t.activeThreadCount??0};return{lastUpdated:new Date().toISOString(),agents:e}}formatForSlack(){let e=this.generateReport();if(Object.keys(e.agents).length===0)return"No agents are currently registered.";let s=[`*Hive Status* \u2014 ${new Date().toLocaleString()}
310
310
  `];for(let[r,i]of Object.entries(e.agents)){let l=this.registry?.get(r)?.disabled?":no_entry_sign:":i.status==="idle"?":white_circle:":i.status==="processing"?":large_blue_circle:":i.status==="error"?":red_circle:":":black_circle:",c=i.activeThreads>0?` (${i.activeThreads} threads)`:"";s.push(`${l} *${r}*${c}`),s.push(` Messages: ${i.messagesProcessed} | Errors: ${i.errorCount}`),s.push(` Last active: ${new Date(i.lastActivity).toLocaleString()}`)}return s.join(`
311
- `)}async writeToMemory(){let e=this.generateReport();await this.memoryManager.write("status/health.json",JSON.stringify(e,null,2)),await this.memoryManager.commitAndPush("heartbeat: update agent status"),E0.info("Health report written to memory")}};O();import{LinearClient as N0}from"@linear/sdk";var fe=I("linear-client"),Ar=class{client;defaultTeamId;constructor(e,t){this.client=new N0({apiKey:e}),this.defaultTeamId=t}async listTeams(){try{return(await this.client.teams()).nodes.map(t=>({id:t.id,name:t.name,key:t.key}))}catch(e){return fe.error("Failed to list teams",{error:String(e)}),[]}}async createIssue(e,t){try{let s=t?.teamId??this.defaultTeamId;if(!s)return fe.error("Cannot create issue: no teamId provided and no default set"),null;let i=await(await this.client.createIssue({teamId:s,title:e,description:t?.description,priority:t?.priority,stateId:t?.stateId,labelIds:t?.labelIds})).issue;return i?(fe.info("Issue created",{identifier:i.identifier,title:e}),{identifier:i.identifier,id:i.id,url:i.url}):(fe.error("Issue creation returned no issue",{title:e}),null)}catch(s){return fe.error("Failed to create issue",{error:String(s),title:e}),null}}async updateIssue(e,t){try{return await this.client.updateIssue(e,t),fe.info("Issue updated",{issueId:e,...t}),!0}catch(s){return fe.error("Failed to update issue",{error:String(s),issueId:e}),!1}}async addComment(e,t){try{let r=await(await this.client.createComment({issueId:e,body:t})).comment;return fe.info("Comment added",{issueId:e,commentId:r?.id}),r?.id??null}catch(s){return fe.error("Failed to add comment",{error:String(s),issueId:e}),null}}async listIssues(e){try{let t=e?.teamId??this.defaultTeamId,s={};t&&(s.team={id:{eq:t}}),e?.stateType&&(s.state={type:{eq:e.stateType}}),e?.assigneeEmail&&(s.assignee={email:{eq:e.assigneeEmail}});let r=await this.client.issues({filter:s,first:e?.limit??50,orderBy:"updatedAt"}),i=[];for(let o of r.nodes){let a=await o.state,l=await o.assignee;i.push({identifier:o.identifier,id:o.id,title:o.title,state:a?.name??"Unknown",priority:o.priority,url:o.url,assignee:l?{id:l.id,name:l.name,email:l.email}:void 0})}return i}catch(t){return fe.error("Failed to list issues",{error:String(t)}),[]}}async searchIssues(e,t,s){try{let r=s??this.defaultTeamId,o=(await this.client.searchIssues(e,{first:t??10})).nodes,a=[];for(let l of o){if(r&&(await l.team)?.id!==r)continue;let c=await l.state,d=await l.assignee;a.push({identifier:l.identifier,id:l.id,title:l.title,state:c?.name??"Unknown",priority:l.priority,url:l.url,assignee:d?{id:d.id,name:d.name,email:d.email}:void 0})}return a}catch(r){return fe.error("Failed to search issues",{error:String(r),term:e}),[]}}async getWorkflowStates(e){try{let t=e??this.defaultTeamId,s={};return t&&(s.team={id:{eq:t}}),(await this.client.workflowStates({filter:s})).nodes.map(i=>({id:i.id,name:i.name,type:i.type}))}catch(t){return fe.error("Failed to get workflow states",{error:String(t)}),[]}}async searchUsers(e,t){try{return(await this.client.users({filter:{or:[{name:{containsIgnoreCase:e}},{displayName:{containsIgnoreCase:e}},{email:{containsIgnoreCase:e}}]},first:t??10})).nodes.map(r=>({id:r.id,name:r.name,displayName:r.displayName,email:r.email,active:r.active}))}catch(s){return fe.error("Failed to search users",{error:String(s),query:e}),[]}}async findIssueByIdentifier(e){try{let t=await this.client.issue(e),s=await t.state,r=await t.assignee;return{identifier:t.identifier,id:t.id,title:t.title,state:s?.name??"Unknown",priority:t.priority,url:t.url,description:t.description??void 0,assignee:r?{id:r.id,name:r.name,email:r.email}:void 0}}catch(t){return fe.error("Failed to find issue",{error:String(t),identifier:e}),null}}};O();import{MongoClient as ph}from"mongodb";var Wt=I("session-store"),Cr=class{client;db;collection;uri;dbName;constructor(e,t="hive"){this.uri=e,this.dbName=t,this.client=new ph(e,{heartbeatFrequencyMS:3e4,serverSelectionTimeoutMS:1e4,socketTimeoutMS:3e4,maxIdleTimeMS:3e5,retryWrites:!0,retryReads:!0})}async connect(e){this.dbName=e??this.dbName,await this.client.connect(),this.db=this.client.db(this.dbName),this.collection=this.db.collection("sessions"),await this.collection.createIndex({updatedAt:1},{expireAfterSeconds:10080*60}),await this.collection.createIndex({agentId:1}),await this.collection.createIndex({threadId:1});let t=await this.collection.countDocuments();Wt.info("Session store connected",{count:t})}async reconnect(){Wt.warn("Reconnecting to MongoDB...");try{await this.client.close().catch(()=>{})}catch{}this.client=new ph(this.uri,{heartbeatFrequencyMS:3e4,serverSelectionTimeoutMS:1e4,socketTimeoutMS:3e4,maxIdleTimeMS:3e5,retryWrites:!0,retryReads:!0}),await this.client.connect(),this.db=this.client.db(this.dbName),this.collection=this.db.collection("sessions"),Wt.info("MongoDB reconnected")}async withRetry(e,t,s){try{return await e()}catch(r){let i=String(r?.message??r);Wt.warn("MongoDB operation failed, retrying after reconnect",{label:s,error:i});try{return await this.reconnect(),await e()}catch(o){return Wt.error("MongoDB operation failed after retry, using fallback",{label:s,error:String(o?.message??o)}),t}}}async get(e,t){return this.withRetry(async()=>{let s=await this.collection.findOne({_id:`${e}:${t}`});if(s)return s.sessionId;if(t.startsWith("slack:")){let r=t.split(":").pop();return(await this.collection.findOne({_id:`${e}:${r}`}))?.sessionId}},void 0,`get(${e}:${t})`)}async set(e,t,s,r){await this.withRetry(async()=>{let i=new Date,o={$set:{agentId:e,threadId:t,sessionId:s,updatedAt:i},$setOnInsert:{createdAt:i,compactions:0}};r?(o.$set.inputTokens=r.inputTokens,o.$set.outputTokens=r.outputTokens,o.$set.cacheReadTokens=r.cacheReadTokens,o.$set.cacheCreationTokens=r.cacheCreationTokens,o.$set.contextWindow=r.contextWindow,r.compactions>0&&(o.$inc={compactions:r.compactions},o.$set.lastCompactedAt=i,r.preCompactTokens!==void 0&&(o.$set.preCompactTokens=r.preCompactTokens),delete o.$setOnInsert.compactions)):Object.assign(o.$setOnInsert,{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheCreationTokens:0,contextWindow:0}),await this.collection.updateOne({_id:`${e}:${t}`},o,{upsert:!0})},void 0,`set(${e}:${t})`)}async delete(e,t){await this.withRetry(async()=>{await this.collection.deleteOne({_id:`${e}:${t}`})},void 0,`delete(${e}:${t})`)}async clearAgent(e){await this.withRetry(async()=>{let t=await this.collection.deleteMany({agentId:e});t.deletedCount>0&&Wt.info("Cleared agent sessions",{agentId:e,deleted:t.deletedCount})},void 0,`clearAgent(${e})`)}async findAgentByThread(e){return this.withRetry(async()=>(await this.collection.findOne({threadId:e},{sort:{updatedAt:-1},projection:{agentId:1}}))?.agentId,void 0,`findAgentByThread(${e})`)}async findAgentsByThread(e){return this.withRetry(async()=>{let t=await this.collection.find({threadId:e},{projection:{agentId:1},sort:{updatedAt:-1}}).toArray();return[...new Set(t.map(s=>s.agentId))]},[],`findAgentsByThread(${e})`)}async close(){await this.client.close()}};O();var W=I("dispatcher"),O0=80,x0=[/^status\??$/i,/^how.{0,20}(everyone|agents?|doing|running)/i,/^health\??$/i,/^system status/i],mh=[/^no response (requested|needed|required|necessary)\.?$/i,/^\(no response\)$/i,/^n\/a\.?$/i],Er=class n{adapters=new Map;registry;agentManager;healthReporter;defaultAgentId;threadAgentMap=new Map;threadParticipants=new Map;threadAgentLastSeen=new Map;recentMessageIds=new Map;auditAdapter;auditChannelIds;fallbackAuditChannelId;taskLedger;retryQueue;teamStore;static DEDUP_TTL_MS=6e4;constructor(e,t,s,r,i){this.registry=e,this.agentManager=t,this.healthReporter=s,this.defaultAgentId=r,this.taskLedger=i}registerAdapter(e){this.adapters.set(e.id,e)}setRetryQueue(e){this.retryQueue=e}setTeamStore(e){this.teamStore=e}setAuditChannel(e,t,s){this.auditAdapter=e,this.auditChannelIds=t,this.fallbackAuditChannelId=s}async dispatch(e){if(this.recentMessageIds.has(e.id)){W.debug("Duplicate message skipped",{id:e.id,source:e.source.adapterId});return}this.recentMessageIds.set(e.id,Date.now()),this.pruneDedup();let t=e.text.trim();if(t.length<=O0&&x0.some(c=>c.test(t))){W.info("Status query intercepted",{source:e.source.kind,text:t});let c=this.healthReporter.formatForSlack(),d=this.adapters.get(e.source.adapterId??e.source.kind);if(d)try{await d.deliver({text:c,agentId:"system",workItem:e,costUsd:0,durationMs:0})}catch(u){W.warn("Status delivery failed, queuing for retry",{error:String(u)}),this.retryQueue?.enqueue({text:c,agentId:"system",workItem:e,costUsd:0,durationMs:0},d)}return}let s=await this.resolveAgents(e);if(s.length===0){W.warn("No agent found for work item",{source:e.source.kind,label:e.source.label,text:e.text.slice(0,50)});return}let r=s.filter(({agentId:c})=>this.registry.get(c)?.disabled?(W.info("Message dropped \u2014 agent is disabled",{agentId:c,source:e.source.kind}),!1):!0);if(r.length===0)return;if(r.length>1){let c=e.threadId??e.id;this.threadParticipants.has(c)||this.threadParticipants.set(c,new Set(r.map(d=>d.agentId))),this.threadAgentLastSeen.set(c,Date.now()),W.info("Multi-agent fan-out",{agents:r.map(d=>d.agentId)}),await Promise.all(r.map(d=>this.dispatchToAgent(e,d)));return}let{agentId:i}=r[0],o=e.threadId??e.id;this.threadAgentMap.set(o,i),this.threadAgentLastSeen.set(o,Date.now());let a=this.taskLedger?.shouldTrack(e)??!1;a&&this.taskLedger.onDispatch(e,i).catch(c=>W.warn("Task ledger dispatch failed",{error:String(c)}));let l=this.adapters.get(e.source.adapterId??e.source.kind);await l?.onProcessingStart?.(e,i);try{let c=await this.agentManager.sendMessage(i,e),d=c.text.trim();if(mh.some(h=>h.test(d)))W.info("Non-response suppressed",{agentId:i,source:e.source.kind,text:d,costUsd:c.costUsd,durationMs:c.durationMs});else{let h={text:c.text||"_No response._",agentId:i,workItem:e,costUsd:c.costUsd,durationMs:c.durationMs,error:c.error};if(l)try{await l.deliver(h)}catch(p){W.warn("Agent response delivery failed, queuing for retry",{error:String(p)}),this.retryQueue?.enqueue(h,l)}a&&this.taskLedger.onComplete(h).catch(p=>W.warn("Task ledger complete failed",{error:String(p)})),this.auditAdapter&&e.source.kind!==this.auditAdapter.kind&&await this.postAuditLog(h),W.info("Work item dispatched",{agentId:i,source:e.source.kind,costUsd:c.costUsd,durationMs:c.durationMs,llmMs:c.llmMs,toolMs:c.toolMs,toolCalls:c.toolCalls,toolSummary:c.toolSummary})}}catch(c){let d={text:`Something went wrong: ${String(c)}`,agentId:i,workItem:e,costUsd:0,durationMs:0,error:String(c)};if(l)try{await l.deliver(d)}catch(u){W.warn("Error delivery failed, queuing for retry",{error:String(u)}),this.retryQueue?.enqueue(d,l)}W.error("Dispatch failed",{agentId:i,error:String(c)})}finally{await l?.onProcessingEnd?.(e,i)}}pruneDedup(){let e=Date.now()-n.DEDUP_TTL_MS;for(let[t,s]of this.recentMessageIds)s<e&&this.recentMessageIds.delete(t)}async resolveAgents(e){let t=e.meta?.targetAgentId;if(t&&this.registry.get(t))return[{agentId:t}];if(e.source.kind==="team")return this.resolveFromTeam(e);let s=e.meta?.origin;if(s){let a=this.registry.findByOrigin(s);return a?[{agentId:a.id}]:(W.warn("Origin not routed",{origin:s,deviceId:e.meta?.deviceId,text:e.text.slice(0,50)}),[])}let r=this.registry.findByChannel(e.source.label);if(r)return[{agentId:r.id}];if(e.threadId){let a=this.registry.findAllByName(e.text),l=new Set(a.map(h=>h.id)),c=this.threadParticipants.get(e.threadId);if(c){for(let h of l)c.add(h);return this.threadAgentLastSeen.set(e.threadId,Date.now()),[...c].map(h=>({agentId:h}))}let d=this.threadAgentMap.get(e.threadId);if(d){let h=a.some(p=>p.id!==d);if(l.size>0&&h){let p=new Set([d,...l]);return this.threadParticipants.set(e.threadId,p),this.threadAgentMap.delete(e.threadId),this.threadAgentLastSeen.set(e.threadId,Date.now()),W.info("Thread transitioned to multi-agent",{threadId:e.threadId,participants:[...p]}),[...p].map(g=>({agentId:g}))}return this.threadAgentLastSeen.set(e.threadId,Date.now()),[{agentId:d}]}let u=await this.agentManager.findAgentsForThread(e.threadId);if(u.length>0){let h=u.filter(p=>this.registry.get(p));if(h.length>1){let p=new Set(h);return this.threadParticipants.set(e.threadId,p),this.threadAgentLastSeen.set(e.threadId,Date.now()),[...p].map(g=>({agentId:g}))}if(h.length===1)return this.threadAgentMap.set(e.threadId,h[0]),this.threadAgentLastSeen.set(e.threadId,Date.now()),[{agentId:h[0]}]}}let i=this.registry.findAllByName(e.text);if(i.length>0)return i.map(a=>({agentId:a.id}));let o=e.meta?.defaultAgentId;return o&&this.registry.get(o)?[{agentId:o}]:(W.debug("No agent matched \u2014 dropping",{channel:e.source.label}),[])}async resolveFromTeam(e){let t=e.meta?.channelId;if(!t||!this.teamStore){let o=e.meta?.defaultAgentId;return o&&this.registry.get(o)?[{agentId:o}]:[]}let s=await this.teamStore.getChannel(t);if(!s)return W.warn("Team channel not found",{channelId:t}),[];if(s.type==="dm"){let o=s.members.find(a=>a!==e.sender);return o&&this.registry.get(o)?[{agentId:o}]:(W.warn("DM agent not found in registry",{channelId:t,members:s.members}),[])}let r=this.registry.findAllByName(e.text);if(r.length>0){let o=new Set(s.members),a=r.filter(l=>o.has(l.id));if(a.length>0)return a.map(l=>({agentId:l.id}))}let i=s.members.filter(o=>this.registry.get(o));return i.length>0?[{agentId:i[0]}]:(W.warn("No agent members in Team channel",{channelId:t}),[])}async dispatchToAgent(e,t){let{agentId:s}=t,r=e.threadId??e.id;this.threadAgentLastSeen.set(r,Date.now());let i=this.taskLedger?.shouldTrack(e)??!1;i&&this.taskLedger.onDispatch(e,s).catch(a=>W.warn("Task ledger dispatch failed",{error:String(a)}));let o=this.adapters.get(e.source.adapterId??e.source.kind);try{let a=await this.agentManager.sendMessage(s,e),l=a.text.trim();if(mh.some(d=>d.test(l)))W.info("Non-response suppressed (fan-out)",{agentId:s});else{let d={text:a.text||"_No response._",agentId:s,workItem:e,costUsd:a.costUsd,durationMs:a.durationMs,error:a.error};if(o)try{await o.deliver(d)}catch{this.retryQueue?.enqueue(d,o)}i&&this.taskLedger.onComplete(d).catch(u=>W.warn("Task ledger complete failed",{error:String(u)})),this.auditAdapter&&e.source.kind!==this.auditAdapter.kind&&await this.postAuditLog(d),W.info("Fan-out dispatch complete",{agentId:s,costUsd:a.costUsd,durationMs:a.durationMs})}}catch(a){let l={text:`Something went wrong: ${String(a)}`,agentId:s,workItem:e,costUsd:0,durationMs:0,error:String(a)};if(o)try{await o.deliver(l)}catch{this.retryQueue?.enqueue(l,o)}W.error("Fan-out dispatch failed",{agentId:s,error:String(a)})}}sweep(e){let t=Date.now()-e,s=0;for(let[r,i]of this.threadAgentLastSeen)i<t&&(this.threadAgentMap.delete(r),this.threadParticipants.delete(r),this.threadAgentLastSeen.delete(r),s++);return{component:"dispatcher",pruned:s,retried:0,bytesFreed:0,errors:[]}}async postAuditLog(e){if(!this.auditAdapter||!this.auditChannelIds)return;let t=this.registry.get(e.agentId),s=t?.name??e.agentId,r=t?.homeBase,i=(r?this.auditChannelIds.get(r):void 0)??this.fallbackAuditChannelId;if(!i){W.warn("No audit channel resolved for agent",{agentId:e.agentId,homeBase:r});return}if(e.workItem.source.kind==="slack"&&e.workItem.source.id===i)return;let o=e.workItem.source.kind==="sms"?":phone:":e.workItem.source.kind==="imessage"?":speech_balloon:":e.workItem.source.kind==="app"?":iphone:":":incoming_envelope:",a=e.workItem.senderName??e.workItem.sender,l=e.text.length>300?e.text.slice(0,300)+"...":e.text,c={id:`audit:${e.workItem.id}`,text:`${o} *${s}* handled ${e.workItem.source.kind} from ${a}:
311
+ `)}async writeToMemory(){let e=this.generateReport();await this.memoryManager.write("status/health.json",JSON.stringify(e,null,2)),await this.memoryManager.commitAndPush("heartbeat: update agent status"),D0.info("Health report written to memory")}};O();import{LinearClient as L0}from"@linear/sdk";var fe=T("linear-client"),Ir=class{client;defaultTeamId;constructor(e,t){this.client=new L0({apiKey:e}),this.defaultTeamId=t}async listTeams(){try{return(await this.client.teams()).nodes.map(t=>({id:t.id,name:t.name,key:t.key}))}catch(e){return fe.error("Failed to list teams",{error:String(e)}),[]}}async createIssue(e,t){try{let s=t?.teamId??this.defaultTeamId;if(!s)return fe.error("Cannot create issue: no teamId provided and no default set"),null;let i=await(await this.client.createIssue({teamId:s,title:e,description:t?.description,priority:t?.priority,stateId:t?.stateId,labelIds:t?.labelIds})).issue;return i?(fe.info("Issue created",{identifier:i.identifier,title:e}),{identifier:i.identifier,id:i.id,url:i.url}):(fe.error("Issue creation returned no issue",{title:e}),null)}catch(s){return fe.error("Failed to create issue",{error:String(s),title:e}),null}}async updateIssue(e,t){try{return await this.client.updateIssue(e,t),fe.info("Issue updated",{issueId:e,...t}),!0}catch(s){return fe.error("Failed to update issue",{error:String(s),issueId:e}),!1}}async addComment(e,t){try{let r=await(await this.client.createComment({issueId:e,body:t})).comment;return fe.info("Comment added",{issueId:e,commentId:r?.id}),r?.id??null}catch(s){return fe.error("Failed to add comment",{error:String(s),issueId:e}),null}}async listIssues(e){try{let t=e?.teamId??this.defaultTeamId,s={};t&&(s.team={id:{eq:t}}),e?.stateType&&(s.state={type:{eq:e.stateType}}),e?.assigneeEmail&&(s.assignee={email:{eq:e.assigneeEmail}});let r=await this.client.issues({filter:s,first:e?.limit??50,orderBy:"updatedAt"}),i=[];for(let o of r.nodes){let a=await o.state,l=await o.assignee;i.push({identifier:o.identifier,id:o.id,title:o.title,state:a?.name??"Unknown",priority:o.priority,url:o.url,assignee:l?{id:l.id,name:l.name,email:l.email}:void 0})}return i}catch(t){return fe.error("Failed to list issues",{error:String(t)}),[]}}async searchIssues(e,t,s){try{let r=s??this.defaultTeamId,o=(await this.client.searchIssues(e,{first:t??10})).nodes,a=[];for(let l of o){if(r&&(await l.team)?.id!==r)continue;let c=await l.state,d=await l.assignee;a.push({identifier:l.identifier,id:l.id,title:l.title,state:c?.name??"Unknown",priority:l.priority,url:l.url,assignee:d?{id:d.id,name:d.name,email:d.email}:void 0})}return a}catch(r){return fe.error("Failed to search issues",{error:String(r),term:e}),[]}}async getWorkflowStates(e){try{let t=e??this.defaultTeamId,s={};return t&&(s.team={id:{eq:t}}),(await this.client.workflowStates({filter:s})).nodes.map(i=>({id:i.id,name:i.name,type:i.type}))}catch(t){return fe.error("Failed to get workflow states",{error:String(t)}),[]}}async searchUsers(e,t){try{return(await this.client.users({filter:{or:[{name:{containsIgnoreCase:e}},{displayName:{containsIgnoreCase:e}},{email:{containsIgnoreCase:e}}]},first:t??10})).nodes.map(r=>({id:r.id,name:r.name,displayName:r.displayName,email:r.email,active:r.active}))}catch(s){return fe.error("Failed to search users",{error:String(s),query:e}),[]}}async findIssueByIdentifier(e){try{let t=await this.client.issue(e),s=await t.state,r=await t.assignee;return{identifier:t.identifier,id:t.id,title:t.title,state:s?.name??"Unknown",priority:t.priority,url:t.url,description:t.description??void 0,assignee:r?{id:r.id,name:r.name,email:r.email}:void 0}}catch(t){return fe.error("Failed to find issue",{error:String(t),identifier:e}),null}}};O();import{MongoClient as gh}from"mongodb";var Gt=T("session-store"),Ar=class{client;db;collection;uri;dbName;constructor(e,t="hive"){this.uri=e,this.dbName=t,this.client=new gh(e,{heartbeatFrequencyMS:3e4,serverSelectionTimeoutMS:1e4,socketTimeoutMS:3e4,maxIdleTimeMS:3e5,retryWrites:!0,retryReads:!0})}async connect(e){this.dbName=e??this.dbName,await this.client.connect(),this.db=this.client.db(this.dbName),this.collection=this.db.collection("sessions"),await this.collection.createIndex({updatedAt:1},{expireAfterSeconds:10080*60}),await this.collection.createIndex({agentId:1}),await this.collection.createIndex({threadId:1});let t=await this.collection.countDocuments();Gt.info("Session store connected",{count:t})}async reconnect(){Gt.warn("Reconnecting to MongoDB...");try{await this.client.close().catch(()=>{})}catch{}this.client=new gh(this.uri,{heartbeatFrequencyMS:3e4,serverSelectionTimeoutMS:1e4,socketTimeoutMS:3e4,maxIdleTimeMS:3e5,retryWrites:!0,retryReads:!0}),await this.client.connect(),this.db=this.client.db(this.dbName),this.collection=this.db.collection("sessions"),Gt.info("MongoDB reconnected")}async withRetry(e,t,s){try{return await e()}catch(r){let i=String(r?.message??r);Gt.warn("MongoDB operation failed, retrying after reconnect",{label:s,error:i});try{return await this.reconnect(),await e()}catch(o){return Gt.error("MongoDB operation failed after retry, using fallback",{label:s,error:String(o?.message??o)}),t}}}async get(e,t){return this.withRetry(async()=>{let s=await this.collection.findOne({_id:`${e}:${t}`});if(s)return s.sessionId;if(t.startsWith("slack:")){let r=t.split(":").pop();return(await this.collection.findOne({_id:`${e}:${r}`}))?.sessionId}},void 0,`get(${e}:${t})`)}async set(e,t,s,r){await this.withRetry(async()=>{let i=new Date,o={$set:{agentId:e,threadId:t,sessionId:s,updatedAt:i},$setOnInsert:{createdAt:i,compactions:0}};r?(o.$set.inputTokens=r.inputTokens,o.$set.outputTokens=r.outputTokens,o.$set.cacheReadTokens=r.cacheReadTokens,o.$set.cacheCreationTokens=r.cacheCreationTokens,o.$set.contextWindow=r.contextWindow,r.compactions>0&&(o.$inc={compactions:r.compactions},o.$set.lastCompactedAt=i,r.preCompactTokens!==void 0&&(o.$set.preCompactTokens=r.preCompactTokens),delete o.$setOnInsert.compactions)):Object.assign(o.$setOnInsert,{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheCreationTokens:0,contextWindow:0}),await this.collection.updateOne({_id:`${e}:${t}`},o,{upsert:!0})},void 0,`set(${e}:${t})`)}async delete(e,t){await this.withRetry(async()=>{await this.collection.deleteOne({_id:`${e}:${t}`})},void 0,`delete(${e}:${t})`)}async clearAgent(e){await this.withRetry(async()=>{let t=await this.collection.deleteMany({agentId:e});t.deletedCount>0&&Gt.info("Cleared agent sessions",{agentId:e,deleted:t.deletedCount})},void 0,`clearAgent(${e})`)}async findAgentByThread(e){return this.withRetry(async()=>(await this.collection.findOne({threadId:e},{sort:{updatedAt:-1},projection:{agentId:1}}))?.agentId,void 0,`findAgentByThread(${e})`)}async findAgentsByThread(e){return this.withRetry(async()=>{let t=await this.collection.find({threadId:e},{projection:{agentId:1},sort:{updatedAt:-1}}).toArray();return[...new Set(t.map(s=>s.agentId))]},[],`findAgentsByThread(${e})`)}async close(){await this.client.close()}};O();var G=T("dispatcher"),P0=80,$0=[/^status\??$/i,/^how.{0,20}(everyone|agents?|doing|running)/i,/^health\??$/i,/^system status/i],yh=[/^no response (requested|needed|required|necessary)\.?$/i,/^\(no response\)$/i,/^n\/a\.?$/i],Cr=class n{adapters=new Map;registry;agentManager;healthReporter;defaultAgentId;threadAgentMap=new Map;threadParticipants=new Map;threadAgentLastSeen=new Map;recentMessageIds=new Map;auditAdapter;auditChannelIds;fallbackAuditChannelId;taskLedger;retryQueue;teamStore;static DEDUP_TTL_MS=6e4;constructor(e,t,s,r,i){this.registry=e,this.agentManager=t,this.healthReporter=s,this.defaultAgentId=r,this.taskLedger=i}registerAdapter(e){this.adapters.set(e.id,e)}setRetryQueue(e){this.retryQueue=e}setTeamStore(e){this.teamStore=e}setAuditChannel(e,t,s){this.auditAdapter=e,this.auditChannelIds=t,this.fallbackAuditChannelId=s}async dispatch(e){if(this.recentMessageIds.has(e.id)){G.debug("Duplicate message skipped",{id:e.id,source:e.source.adapterId});return}this.recentMessageIds.set(e.id,Date.now()),this.pruneDedup();let t=e.text.trim();if(t.length<=P0&&$0.some(c=>c.test(t))){G.info("Status query intercepted",{source:e.source.kind,text:t});let c=this.healthReporter.formatForSlack(),d=this.adapters.get(e.source.adapterId??e.source.kind);if(d)try{await d.deliver({text:c,agentId:"system",workItem:e,costUsd:0,durationMs:0})}catch(u){G.warn("Status delivery failed, queuing for retry",{error:String(u)}),this.retryQueue?.enqueue({text:c,agentId:"system",workItem:e,costUsd:0,durationMs:0},d)}return}let s=await this.resolveAgents(e);if(s.length===0){G.warn("No agent found for work item",{source:e.source.kind,label:e.source.label,text:e.text.slice(0,50)});return}let r=s.filter(({agentId:c})=>this.registry.get(c)?.disabled?(G.info("Message dropped \u2014 agent is disabled",{agentId:c,source:e.source.kind}),!1):!0);if(r.length===0)return;if(r.length>1){let c=e.threadId??e.id;this.threadParticipants.has(c)||this.threadParticipants.set(c,new Set(r.map(d=>d.agentId))),this.threadAgentLastSeen.set(c,Date.now()),G.info("Multi-agent fan-out",{agents:r.map(d=>d.agentId)}),await Promise.all(r.map(d=>this.dispatchToAgent(e,d)));return}let{agentId:i}=r[0],o=e.threadId??e.id;this.threadAgentMap.set(o,i),this.threadAgentLastSeen.set(o,Date.now());let a=this.taskLedger?.shouldTrack(e)??!1;a&&this.taskLedger.onDispatch(e,i).catch(c=>G.warn("Task ledger dispatch failed",{error:String(c)}));let l=this.adapters.get(e.source.adapterId??e.source.kind);await l?.onProcessingStart?.(e,i);try{let c=await this.agentManager.sendMessage(i,e),d=c.text.trim();if(yh.some(h=>h.test(d)))G.info("Non-response suppressed",{agentId:i,source:e.source.kind,text:d,costUsd:c.costUsd,durationMs:c.durationMs});else{let h={text:c.text||"_No response._",agentId:i,workItem:e,costUsd:c.costUsd,durationMs:c.durationMs,error:c.error};if(l)try{await l.deliver(h)}catch(p){G.warn("Agent response delivery failed, queuing for retry",{error:String(p)}),this.retryQueue?.enqueue(h,l)}a&&this.taskLedger.onComplete(h).catch(p=>G.warn("Task ledger complete failed",{error:String(p)})),this.auditAdapter&&e.source.kind!==this.auditAdapter.kind&&await this.postAuditLog(h),G.info("Work item dispatched",{agentId:i,source:e.source.kind,costUsd:c.costUsd,durationMs:c.durationMs,llmMs:c.llmMs,toolMs:c.toolMs,toolCalls:c.toolCalls,toolSummary:c.toolSummary})}}catch(c){let d={text:`Something went wrong: ${String(c)}`,agentId:i,workItem:e,costUsd:0,durationMs:0,error:String(c)};if(l)try{await l.deliver(d)}catch(u){G.warn("Error delivery failed, queuing for retry",{error:String(u)}),this.retryQueue?.enqueue(d,l)}G.error("Dispatch failed",{agentId:i,error:String(c)})}finally{await l?.onProcessingEnd?.(e,i)}}pruneDedup(){let e=Date.now()-n.DEDUP_TTL_MS;for(let[t,s]of this.recentMessageIds)s<e&&this.recentMessageIds.delete(t)}async resolveAgents(e){let t=e.meta?.targetAgentId;if(t&&this.registry.get(t))return[{agentId:t}];if(e.source.kind==="team")return this.resolveFromTeam(e);let s=e.meta?.origin;if(s){let a=this.registry.findByOrigin(s);return a?[{agentId:a.id}]:(G.warn("Origin not routed",{origin:s,deviceId:e.meta?.deviceId,text:e.text.slice(0,50)}),[])}let r=this.registry.findByChannel(e.source.label);if(r)return[{agentId:r.id}];if(e.threadId){let a=this.registry.findAllByName(e.text),l=new Set(a.map(h=>h.id)),c=this.threadParticipants.get(e.threadId);if(c){for(let h of l)c.add(h);return this.threadAgentLastSeen.set(e.threadId,Date.now()),[...c].map(h=>({agentId:h}))}let d=this.threadAgentMap.get(e.threadId);if(d){let h=a.some(p=>p.id!==d);if(l.size>0&&h){let p=new Set([d,...l]);return this.threadParticipants.set(e.threadId,p),this.threadAgentMap.delete(e.threadId),this.threadAgentLastSeen.set(e.threadId,Date.now()),G.info("Thread transitioned to multi-agent",{threadId:e.threadId,participants:[...p]}),[...p].map(g=>({agentId:g}))}return this.threadAgentLastSeen.set(e.threadId,Date.now()),[{agentId:d}]}let u=await this.agentManager.findAgentsForThread(e.threadId);if(u.length>0){let h=u.filter(p=>this.registry.get(p));if(h.length>1){let p=new Set(h);return this.threadParticipants.set(e.threadId,p),this.threadAgentLastSeen.set(e.threadId,Date.now()),[...p].map(g=>({agentId:g}))}if(h.length===1)return this.threadAgentMap.set(e.threadId,h[0]),this.threadAgentLastSeen.set(e.threadId,Date.now()),[{agentId:h[0]}]}}let i=this.registry.findAllByName(e.text);if(i.length>0)return i.map(a=>({agentId:a.id}));let o=e.meta?.defaultAgentId;return o&&this.registry.get(o)?[{agentId:o}]:this.isDirectMessage(e)&&this.registry.get(this.defaultAgentId)?(G.info("DM routed to default agent",{agentId:this.defaultAgentId,channel:e.source.id}),[{agentId:this.defaultAgentId}]):(G.debug("No agent matched \u2014 dropping",{channel:e.source.label}),[])}isDirectMessage(e){return!!(e.source.kind==="slack"&&e.source.id.startsWith("D")||e.meta?.channelType==="im"||e.source.kind==="team"&&typeof e.source.id=="string"&&e.source.id.startsWith("dm:"))}async resolveFromTeam(e){let t=e.meta?.channelId;if(!t||!this.teamStore){let o=e.meta?.defaultAgentId;return o&&this.registry.get(o)?[{agentId:o}]:[]}let s=await this.teamStore.getChannel(t);if(!s)return G.warn("Team channel not found",{channelId:t}),[];if(s.type==="dm"){let o=s.members.find(a=>a!==e.sender);return o&&this.registry.get(o)?[{agentId:o}]:(G.warn("DM agent not found in registry",{channelId:t,members:s.members}),[])}let r=this.registry.findAllByName(e.text);if(r.length>0){let o=new Set(s.members),a=r.filter(l=>o.has(l.id));if(a.length>0)return a.map(l=>({agentId:l.id}))}let i=s.members.filter(o=>this.registry.get(o));return i.length>0?[{agentId:i[0]}]:(G.warn("No agent members in Team channel",{channelId:t}),[])}async dispatchToAgent(e,t){let{agentId:s}=t,r=e.threadId??e.id;this.threadAgentLastSeen.set(r,Date.now());let i=this.taskLedger?.shouldTrack(e)??!1;i&&this.taskLedger.onDispatch(e,s).catch(a=>G.warn("Task ledger dispatch failed",{error:String(a)}));let o=this.adapters.get(e.source.adapterId??e.source.kind);try{let a=await this.agentManager.sendMessage(s,e),l=a.text.trim();if(yh.some(d=>d.test(l)))G.info("Non-response suppressed (fan-out)",{agentId:s});else{let d={text:a.text||"_No response._",agentId:s,workItem:e,costUsd:a.costUsd,durationMs:a.durationMs,error:a.error};if(o)try{await o.deliver(d)}catch{this.retryQueue?.enqueue(d,o)}i&&this.taskLedger.onComplete(d).catch(u=>G.warn("Task ledger complete failed",{error:String(u)})),this.auditAdapter&&e.source.kind!==this.auditAdapter.kind&&await this.postAuditLog(d),G.info("Fan-out dispatch complete",{agentId:s,costUsd:a.costUsd,durationMs:a.durationMs})}}catch(a){let l={text:`Something went wrong: ${String(a)}`,agentId:s,workItem:e,costUsd:0,durationMs:0,error:String(a)};if(o)try{await o.deliver(l)}catch{this.retryQueue?.enqueue(l,o)}G.error("Fan-out dispatch failed",{agentId:s,error:String(a)})}}sweep(e){let t=Date.now()-e,s=0;for(let[r,i]of this.threadAgentLastSeen)i<t&&(this.threadAgentMap.delete(r),this.threadParticipants.delete(r),this.threadAgentLastSeen.delete(r),s++);return{component:"dispatcher",pruned:s,retried:0,bytesFreed:0,errors:[]}}async postAuditLog(e){if(!this.auditAdapter||!this.auditChannelIds)return;let t=this.registry.get(e.agentId),s=t?.name??e.agentId,r=t?.homeBase,i=(r?this.auditChannelIds.get(r):void 0)??this.fallbackAuditChannelId;if(!i){G.warn("No audit channel resolved for agent",{agentId:e.agentId,homeBase:r});return}if(e.workItem.source.kind==="slack"&&e.workItem.source.id===i)return;let o=e.workItem.source.kind==="sms"?":phone:":e.workItem.source.kind==="imessage"?":speech_balloon:":e.workItem.source.kind==="app"?":iphone:":":incoming_envelope:",a=e.workItem.senderName??e.workItem.sender,l=e.text.length>300?e.text.slice(0,300)+"...":e.text,c={id:`audit:${e.workItem.id}`,text:`${o} *${s}* handled ${e.workItem.source.kind} from ${a}:
312
312
  > ${l}
313
- _($${e.costUsd.toFixed(3)} \xB7 ${(e.durationMs/1e3).toFixed(1)}s)_`,source:{kind:"internal",id:i,label:"audit"},sender:"system",timestamp:new Date,meta:{slackThreadTs:e.workItem.meta?.slackThreadTs,slackTs:e.workItem.meta?.slackTs}};await this.auditAdapter.deliver({text:c.text,agentId:"system",workItem:c,costUsd:0,durationMs:0})}};O();function M0(n){let e=n;return e=e.replace(/^#{1,6}\s+(.+)$/gm,"*$1*"),e=e.replace(/\*{3}(.+?)\*{3}/g,"*_$1_*"),e=e.replace(/\*{2}(.+?)\*{2}/g,"*$1*"),e=e.replace(/__(.+?)__/g,"*$1*"),e=e.replace(/\[([^\]]+)\]\(([^)]+)\)/g,"<$2|$1>"),e=e.replace(/~~(.+?)~~/g,"~$1~"),e=e.replace(/^[-*_]{3,}$/gm,"\u2014\u2014\u2014"),e}function gh(n){return n?M0(n.trim()):"_No response._"}function yh(n){return`Something went wrong: ${n}`}var Vt=I("slack-adapter"),D0=[{title:"Daily briefing",message:"What's on my plate today?"},{title:"Open tasks",message:"Show me all open tasks from Linear"},{title:"System status",message:"How's everyone doing?"},{title:"Quick note",message:"I need to remember something..."}],Nr=class{id;kind="slack";gateway;registry;excludeChannels;defaultAgentId;botLabel;threadContextMap=new Map;threadContextLastSeen=new Map;constructor(e,t,s=[],r="slack",i,o){this.id=r,this.gateway=e,this.registry=t,this.excludeChannels=new Set(s),this.defaultAgentId=i,this.botLabel=o}async start(e){let t=this.registry.getAll().filter(s=>!s.slackBot||s.slackBot===this.botLabel).flatMap(s=>s.channels).filter(s=>!this.excludeChannels.has(s));this.gateway.addIntegrationChannels(t),this.gateway.onMessage(async s=>{if(this.excludeChannels.has(s.channelName)){Vt.debug("Ignoring message from excluded channel",{channel:s.channelName});return}let r=this.registry.findByChannel(s.channelName);if(r&&r.slackBot&&r.slackBot!==this.botLabel){Vt.debug("Ignoring message from other bot's channel",{channel:s.channelName,owner:r.id,botLabel:this.botLabel});return}let i=s.user.startsWith("U")?await this.gateway.resolveUserName(s.user):void 0,o={id:s.ts,text:s.text,source:{kind:"slack",id:s.channel,label:s.channelName,adapterId:this.id},sender:s.user,senderName:i,threadId:`slack:${s.channel}:${s.threadTs??s.ts}`,timestamp:new Date,meta:{slackTs:s.ts,slackThreadTs:s.threadTs,defaultAgentId:this.defaultAgentId},files:s.files};e(o)}),this.gateway.onThreadStarted(async s=>{Vt.info("Setting up new assistant thread",{channel:s.channel}),await this.gateway.setThreadStatus(s.channel,s.threadTs,"Getting ready..."),await this.gateway.setSuggestedPrompts(s.channel,s.threadTs,D0),await this.gateway.setThreadStatus(s.channel,s.threadTs,""),s.context.channelId&&(this.threadContextMap.set(s.threadTs,s.context.channelId),this.threadContextLastSeen.set(s.threadTs,Date.now()))}),this.gateway.onThreadContextChanged(async s=>{s.context.channelId&&(this.threadContextMap.set(s.threadTs,s.context.channelId),this.threadContextLastSeen.set(s.threadTs,Date.now()),Vt.info("Thread context updated",{threadTs:s.threadTs,channelId:s.context.channelId}))}),await this.gateway.start(),Vt.info("Slack adapter started")}async deliver(e){let t=e.workItem.source.id,s=e.workItem.meta?.slackThreadTs??e.workItem.meta?.slackTs,r=this.registry.get(e.agentId),o=e.workItem.sender?.startsWith("B")||e.workItem.sender==="integration"?void 0:s,a=e.error?yh(e.error):gh(e.text);r&&(a=`${r.icon?`${r.icon} `:""}*${r.name}*: ${a}`);let l=r?{name:r.name,icon:r.icon}:void 0;await this.gateway.postMessage(t,a,o,l)}async onProcessingStart(e,t){let s=e.sender?.startsWith("B")||e.sender==="integration",r=e.meta?.slackThreadTs??e.meta?.slackTs;!s&&r&&await this.gateway.setThreadStatus(e.source.id,r,"Thinking...")}async onProcessingEnd(e,t){let s=e.sender?.startsWith("B")||e.sender==="integration",r=e.meta?.slackThreadTs??e.meta?.slackTs;!s&&r&&await this.gateway.setThreadStatus(e.source.id,r,"")}sweep(e){let t=Date.now()-e,s=0;for(let[r,i]of this.threadContextLastSeen)i<t&&(this.threadContextMap.delete(r),this.threadContextLastSeen.delete(r),s++);return{component:`slack-adapter:${this.id}`,pruned:s,retried:0,bytesFreed:0,errors:[]}}async stop(){await this.gateway.stop(),Vt.info("Slack adapter stopped")}get client(){return this.gateway.client}};O();var je=I("sms-adapter"),wh="https://api.openphone.com/v1",Or=class{id="sms";kind="sms";apiKey;lines;interval=null;constructor(e,t){this.apiKey=e,this.lines=t.map(s=>({id:s.id,label:s.label,number:s.number,routeLabel:s.slackChannel??s.label,lastSeen:new Date().toISOString()}))}async start(e){if(this.lines.length===0){je.warn("SMS adapter has no lines to watch");return}this.poll(e),this.interval=setInterval(()=>this.poll(e),3e4),je.info("SMS adapter started",{lines:this.lines.map(t=>t.label)})}async deliver(e){if(e.error){je.warn("Skipping SMS delivery due to error",{error:e.error});return}let t=e.workItem.sender,s=e.workItem.source.id;try{let r=await fetch(`${wh}/messages`,{method:"POST",headers:{Authorization:this.apiKey,"Content-Type":"application/json"},body:JSON.stringify({from:s,to:[t],content:e.text})});r.ok?je.info("SMS reply sent",{to:t,from:s}):je.error("Failed to send SMS reply",{status:r.status,body:await r.text(),to:t})}catch(r){je.error("SMS delivery error",{error:String(r),to:t})}}async stop(){this.interval&&(clearInterval(this.interval),this.interval=null),je.info("SMS adapter stopped")}async quoApi(e,t={}){let s=new URL(`${wh}${e}`);for(let[i,o]of Object.entries(t))o&&s.searchParams.append(i,o);let r=await fetch(s.toString(),{headers:{Authorization:this.apiKey}});if(!r.ok)throw new Error(`Quo API ${r.status}: ${await r.text()}`);return r.json()}async poll(e){for(let t of this.lines)try{let r=(await this.quoApi("/conversations",{"phoneNumbers[]":t.id,updatedAfter:t.lastSeen,maxResults:"20"})).data??[];if(r.length===0)continue;for(let i of r){let o=i.participants?.[0];if(!o)continue;let l=((await this.quoApi("/messages",{phoneNumberId:t.id,"participants[]":o,maxResults:"10",createdAfter:t.lastSeen})).data??[]).filter(c=>c.direction==="incoming").reverse();for(let c of l){if(!c.text)continue;let d=`SMS from ${c.from} \u2192 ${t.label}:
314
- ${c.text}`,u={id:c.id,text:d,source:{kind:"sms",id:t.id,label:t.routeLabel},sender:c.from,threadId:`sms:${t.id}:${c.from}`,timestamp:new Date,meta:{quoMessageId:c.id,lineNumber:t.number}};je.info("SMS received",{from:c.from,line:t.label,textLength:c.text.length}),e(u)}}t.lastSeen=new Date().toISOString()}catch(s){je.error("SMS poll failed",{line:t.label,error:String(s)})}}};O();import{execFileSync as F0}from"node:child_process";import{readFileSync as K0,writeFileSync as G0,existsSync as bh,mkdirSync as H0}from"node:fs";import{resolve as _h}from"node:path";import{MongoClient as W0}from"mongodb";O();import L0 from"better-sqlite3";var Sh=I("imessage-db"),P0=978307200,$0=43;function R0(n){let e=n/1e9+P0;return new Date(e*1e3)}function B0(n){try{let e=Buffer.from("NS.string"),t=n.indexOf(e);if(t===-1){let o=Buffer.from("NS.data");t=n.indexOf(o)}if(t===-1){let o=Buffer.from("streamtyped"),a=n.indexOf(o);return a===-1?null:U0(n,a+o.length)}for(t+=e.length;t<n.length&&n[t]<32&&n[t]!==10;)t++;let s=t,r=t;for(;r<n.length;){let o=n[r];if(o===0||o===6&&r>s+1)break;r++}if(r<=s)return null;let i=n.subarray(s,r).toString("utf-8").trim();return i.length>0?i:null}catch(e){return Sh.warn("Failed to extract text from attributedBody",{error:String(e)}),null}}function U0(n,e){let t=e,s=-1,r=0;for(;t<n.length-1;)if(q0(n[t])){let o=t,a=0;for(;t<n.length&&j0(n[t]);)a++,t++;a>r&&a>4&&(s=o,r=a)}else t++;if(s===-1)return null;let i=n.subarray(s,s+r).toString("utf-8").trim();return i.length>0?i:null}function q0(n){return n>=32&&n<=126||n>=192}function j0(n){return n>=32&&n<=126||n===10||n===13||n===9||n>=128}var xr=class{db;constructor(e){let t=e??`${process.env.HOME}/Library/Messages/chat.db`;this.db=new L0(t,{readonly:!0})}getNewMessages(e){let t=this.db.prepare(`
313
+ _($${e.costUsd.toFixed(3)} \xB7 ${(e.durationMs/1e3).toFixed(1)}s)_`,source:{kind:"internal",id:i,label:"audit"},sender:"system",timestamp:new Date,meta:{slackThreadTs:e.workItem.meta?.slackThreadTs,slackTs:e.workItem.meta?.slackTs}};await this.auditAdapter.deliver({text:c.text,agentId:"system",workItem:c,costUsd:0,durationMs:0})}};O();function R0(n){let e=n;return e=e.replace(/^#{1,6}\s+(.+)$/gm,"*$1*"),e=e.replace(/\*{3}(.+?)\*{3}/g,"*_$1_*"),e=e.replace(/\*{2}(.+?)\*{2}/g,"*$1*"),e=e.replace(/__(.+?)__/g,"*$1*"),e=e.replace(/\[([^\]]+)\]\(([^)]+)\)/g,"<$2|$1>"),e=e.replace(/~~(.+?)~~/g,"~$1~"),e=e.replace(/^[-*_]{3,}$/gm,"\u2014\u2014\u2014"),e}function wh(n){return n?R0(n.trim()):"_No response._"}function Sh(n){return`Something went wrong: ${n}`}var Ht=T("slack-adapter"),B0=[{title:"Daily briefing",message:"What's on my plate today?"},{title:"Open tasks",message:"Show me all open tasks from Linear"},{title:"System status",message:"How's everyone doing?"},{title:"Quick note",message:"I need to remember something..."}],Er=class{id;kind="slack";gateway;registry;excludeChannels;defaultAgentId;botLabel;threadContextMap=new Map;threadContextLastSeen=new Map;constructor(e,t,s=[],r="slack",i,o){this.id=r,this.gateway=e,this.registry=t,this.excludeChannels=new Set(s),this.defaultAgentId=i,this.botLabel=o}async start(e){let t=this.registry.getAll().filter(s=>!s.slackBot||s.slackBot===this.botLabel).flatMap(s=>s.channels).filter(s=>!this.excludeChannels.has(s));this.gateway.addIntegrationChannels(t),this.gateway.onMessage(async s=>{if(this.excludeChannels.has(s.channelName)){Ht.debug("Ignoring message from excluded channel",{channel:s.channelName});return}let r=this.registry.findByChannel(s.channelName);if(r&&r.slackBot&&r.slackBot!==this.botLabel){Ht.debug("Ignoring message from other bot's channel",{channel:s.channelName,owner:r.id,botLabel:this.botLabel});return}let i=s.user.startsWith("U")?await this.gateway.resolveUserName(s.user):void 0,o={id:s.ts,text:s.text,source:{kind:"slack",id:s.channel,label:s.channelName,adapterId:this.id},sender:s.user,senderName:i,threadId:`slack:${s.channel}:${s.threadTs??s.ts}`,timestamp:new Date,meta:{slackTs:s.ts,slackThreadTs:s.threadTs,defaultAgentId:this.defaultAgentId},files:s.files};e(o)}),this.gateway.onThreadStarted(async s=>{Ht.info("Setting up new assistant thread",{channel:s.channel}),await this.gateway.setThreadStatus(s.channel,s.threadTs,"Getting ready..."),await this.gateway.setSuggestedPrompts(s.channel,s.threadTs,B0),await this.gateway.setThreadStatus(s.channel,s.threadTs,""),s.context.channelId&&(this.threadContextMap.set(s.threadTs,s.context.channelId),this.threadContextLastSeen.set(s.threadTs,Date.now()))}),this.gateway.onThreadContextChanged(async s=>{s.context.channelId&&(this.threadContextMap.set(s.threadTs,s.context.channelId),this.threadContextLastSeen.set(s.threadTs,Date.now()),Ht.info("Thread context updated",{threadTs:s.threadTs,channelId:s.context.channelId}))}),await this.gateway.start(),Ht.info("Slack adapter started")}async deliver(e){let t=e.workItem.source.id,s=e.workItem.meta?.slackThreadTs??e.workItem.meta?.slackTs,r=this.registry.get(e.agentId),o=e.workItem.sender?.startsWith("B")||e.workItem.sender==="integration"?void 0:s,a=e.error?Sh(e.error):wh(e.text);r&&(a=`${r.icon?`${r.icon} `:""}*${r.name}*: ${a}`);let l=r?{name:r.name,icon:r.icon}:void 0;await this.gateway.postMessage(t,a,o,l)}async onProcessingStart(e,t){let s=e.sender?.startsWith("B")||e.sender==="integration",r=e.meta?.slackThreadTs??e.meta?.slackTs;!s&&r&&await this.gateway.setThreadStatus(e.source.id,r,"Thinking...")}async onProcessingEnd(e,t){let s=e.sender?.startsWith("B")||e.sender==="integration",r=e.meta?.slackThreadTs??e.meta?.slackTs;!s&&r&&await this.gateway.setThreadStatus(e.source.id,r,"")}sweep(e){let t=Date.now()-e,s=0;for(let[r,i]of this.threadContextLastSeen)i<t&&(this.threadContextMap.delete(r),this.threadContextLastSeen.delete(r),s++);return{component:`slack-adapter:${this.id}`,pruned:s,retried:0,bytesFreed:0,errors:[]}}async stop(){await this.gateway.stop(),Ht.info("Slack adapter stopped")}get client(){return this.gateway.client}};O();var je=T("sms-adapter"),bh="https://api.openphone.com/v1",Nr=class{id="sms";kind="sms";apiKey;lines;interval=null;constructor(e,t){this.apiKey=e,this.lines=t.map(s=>({id:s.id,label:s.label,number:s.number,routeLabel:s.slackChannel??s.label,lastSeen:new Date().toISOString()}))}async start(e){if(this.lines.length===0){je.warn("SMS adapter has no lines to watch");return}this.poll(e),this.interval=setInterval(()=>this.poll(e),3e4),je.info("SMS adapter started",{lines:this.lines.map(t=>t.label)})}async deliver(e){if(e.error){je.warn("Skipping SMS delivery due to error",{error:e.error});return}let t=e.workItem.sender,s=e.workItem.source.id;try{let r=await fetch(`${bh}/messages`,{method:"POST",headers:{Authorization:this.apiKey,"Content-Type":"application/json"},body:JSON.stringify({from:s,to:[t],content:e.text})});r.ok?je.info("SMS reply sent",{to:t,from:s}):je.error("Failed to send SMS reply",{status:r.status,body:await r.text(),to:t})}catch(r){je.error("SMS delivery error",{error:String(r),to:t})}}async stop(){this.interval&&(clearInterval(this.interval),this.interval=null),je.info("SMS adapter stopped")}async quoApi(e,t={}){let s=new URL(`${bh}${e}`);for(let[i,o]of Object.entries(t))o&&s.searchParams.append(i,o);let r=await fetch(s.toString(),{headers:{Authorization:this.apiKey}});if(!r.ok)throw new Error(`Quo API ${r.status}: ${await r.text()}`);return r.json()}async poll(e){for(let t of this.lines)try{let r=(await this.quoApi("/conversations",{"phoneNumbers[]":t.id,updatedAfter:t.lastSeen,maxResults:"20"})).data??[];if(r.length===0)continue;for(let i of r){let o=i.participants?.[0];if(!o)continue;let l=((await this.quoApi("/messages",{phoneNumberId:t.id,"participants[]":o,maxResults:"10",createdAfter:t.lastSeen})).data??[]).filter(c=>c.direction==="incoming").reverse();for(let c of l){if(!c.text)continue;let d=`SMS from ${c.from} \u2192 ${t.label}:
314
+ ${c.text}`,u={id:c.id,text:d,source:{kind:"sms",id:t.id,label:t.routeLabel},sender:c.from,threadId:`sms:${t.id}:${c.from}`,timestamp:new Date,meta:{quoMessageId:c.id,lineNumber:t.number}};je.info("SMS received",{from:c.from,line:t.label,textLength:c.text.length}),e(u)}}t.lastSeen=new Date().toISOString()}catch(s){je.error("SMS poll failed",{line:t.label,error:String(s)})}}};O();import{execFileSync as V0}from"node:child_process";import{readFileSync as Y0,writeFileSync as J0,existsSync as kh,mkdirSync as z0}from"node:fs";import{resolve as vh}from"node:path";import{MongoClient as Q0}from"mongodb";O();import U0 from"better-sqlite3";var _h=T("imessage-db"),q0=978307200,j0=43;function F0(n){let e=n/1e9+q0;return new Date(e*1e3)}function K0(n){try{let e=Buffer.from("NS.string"),t=n.indexOf(e);if(t===-1){let o=Buffer.from("NS.data");t=n.indexOf(o)}if(t===-1){let o=Buffer.from("streamtyped"),a=n.indexOf(o);return a===-1?null:G0(n,a+o.length)}for(t+=e.length;t<n.length&&n[t]<32&&n[t]!==10;)t++;let s=t,r=t;for(;r<n.length;){let o=n[r];if(o===0||o===6&&r>s+1)break;r++}if(r<=s)return null;let i=n.subarray(s,r).toString("utf-8").trim();return i.length>0?i:null}catch(e){return _h.warn("Failed to extract text from attributedBody",{error:String(e)}),null}}function G0(n,e){let t=e,s=-1,r=0;for(;t<n.length-1;)if(H0(n[t])){let o=t,a=0;for(;t<n.length&&W0(n[t]);)a++,t++;a>r&&a>4&&(s=o,r=a)}else t++;if(s===-1)return null;let i=n.subarray(s,s+r).toString("utf-8").trim();return i.length>0?i:null}function H0(n){return n>=32&&n<=126||n>=192}function W0(n){return n>=32&&n<=126||n===10||n===13||n===9||n>=128}var Or=class{db;constructor(e){let t=e??`${process.env.HOME}/Library/Messages/chat.db`;this.db=new U0(t,{readonly:!0})}getNewMessages(e){let t=this.db.prepare(`
315
315
  SELECT m.ROWID AS rowId, m.text, m.attributedBody, m.is_from_me AS isFromMe,
316
316
  m.date, m.service, h.id AS sender, h.ROWID AS handleRowId
317
317
  FROM message m
@@ -323,7 +323,7 @@ ${c.text}`,u={id:c.id,text:d,source:{kind:"sms",id:t.id,label:t.routeLabel},send
323
323
  AND m.is_empty = 0
324
324
  AND (c.style IS NULL OR c.style != ?)
325
325
  ORDER BY m.ROWID ASC
326
- `).all(e,$0),s=[];for(let r of t){let i=r.text;if(!i&&r.attributedBody&&(i=B0(r.attributedBody),!i)){Sh.warn("Could not extract text from attributedBody, skipping",{rowId:r.rowId});continue}i&&s.push({rowId:r.rowId,text:i,sender:r.sender,handleRowId:r.handleRowId,service:r.service,date:R0(r.date)})}return s}getMaxRowId(){return this.db.prepare("SELECT MAX(ROWID) AS maxId FROM message").get().maxId??0}close(){this.db.close()}};var se=I("imessage-adapter"),Mr=class{id="imessage";kind="imessage";config;mongoUri;dbName;gateway;db;mongo;threadsCollection;contactsCollection;slackChannelId;interval=null;lastSeenRowId=0;lastMessageAt=0;lastColdPoll=0;stateFilePath;constructor(e,t,s,r,i){this.config=e,this.mongoUri=t,this.dbName=s,this.gateway=r,this.stateFilePath=_h(`/tmp/${i}-imessage-state.json`)}async start(e){this.mongo=new W0(this.mongoUri),await this.mongo.connect();let t=this.mongo.db(this.dbName);this.threadsCollection=t.collection("imessage_threads"),this.contactsCollection=t.collection("contacts");try{let r=((await this.gateway.client.conversations.list({types:"public_channel",limit:200})).channels??[]).find(i=>i.name===this.config.slackChannel);r?.id?(this.slackChannelId=r.id,se.info("Slack mirror channel resolved",{channel:this.config.slackChannel,id:r.id})):se.warn("Slack mirror channel not found",{channel:this.config.slackChannel})}catch(s){se.warn("Failed to resolve Slack mirror channel",{error:String(s)})}try{this.db=new xr}catch(s){se.error("Failed to open chat.db \u2014 check Full Disk Access for node",{error:String(s)});return}this.loadState(),this.lastSeenRowId===0&&(this.lastSeenRowId=this.db.getMaxRowId(),this.saveState(),se.info("First run \u2014 initialized lastSeenRowId",{lastSeenRowId:this.lastSeenRowId})),this.interval=setInterval(()=>this.poll(e),this.config.hotIntervalMs),this.poll(e),se.info("iMessage adapter started",{lastSeenRowId:this.lastSeenRowId,hotIntervalMs:this.config.hotIntervalMs,coldIntervalMs:this.config.coldIntervalMs})}async deliver(e){if(e.error){se.warn("Skipping iMessage delivery due to error",{error:e.error});return}let t=e.workItem.sender;try{this.sendViaAppleScript(t,e.text),se.info("iMessage reply sent",{to:t})}catch(s){se.warn("iMessage send failed, retrying",{error:String(s),to:t});try{await V0(500),this.sendViaAppleScript(t,e.text),se.info("iMessage reply sent on retry",{to:t})}catch(r){se.error("iMessage delivery failed after retry",{error:String(r),to:t});return}}await this.mirrorToSlack(t,e.text,e.agentId,!0)}async stop(){this.interval&&(clearInterval(this.interval),this.interval=null),this.db?.close(),await this.mongo?.close(),se.info("iMessage adapter stopped")}async poll(e){let t=Date.now(),s=t-this.lastMessageAt<this.config.hotWindowMs;if(!(!s&&t-this.lastColdPoll<this.config.coldIntervalMs)&&(s||(this.lastColdPoll=t),!!this.db))try{let r=this.db.getNewMessages(this.lastSeenRowId);if(r.length===0)return;for(let i of r){this.lastSeenRowId=i.rowId,this.lastMessageAt=t;let o={id:`imsg-${i.rowId}`,text:i.text,source:{kind:"imessage",id:"imessage",label:"imessage"},sender:i.sender,threadId:`imessage:${i.sender}`,timestamp:i.date,meta:{messageRowId:i.rowId,service:i.service}};se.info("iMessage received",{from:i.sender,service:i.service,textLength:i.text.length}),await this.mirrorToSlack(i.sender,i.text,void 0,!1),e(o)}this.saveState()}catch(r){se.error("iMessage poll failed",{error:String(r)})}}sendViaAppleScript(e,t){let s=t.replace(/\\/g,"\\\\").replace(/"/g,'\\"');F0("osascript",["-e",'tell application "Messages"',"-e","set targetService to 1st account whose service type = iMessage","-e",`set targetBuddy to participant "${e}" of targetService`,"-e",`send "${s}" to targetBuddy`,"-e","end tell"])}async mirrorToSlack(e,t,s,r){if(!(!this.slackChannelId||!this.threadsCollection))try{let i=await this.threadsCollection.findOne({handleId:e}),o;if(i)o=i.slackThreadTs;else{let l=await this.resolveContactName(e),c=`:speech_balloon: iMessage conversation with ${l}`,d=await this.gateway.postMessage(this.slackChannelId,c);if(!d){se.warn("Failed to create Slack mirror thread",{handleId:e});return}o=d,await this.threadsCollection.insertOne({handleId:e,slackThreadTs:o,displayName:l,createdAt:new Date})}let a=r?s?`*${s}*: `:"*Agent*: ":`*${e}*: `;await this.gateway.postMessage(this.slackChannelId,`${a}${t}`,o)}catch(i){se.warn("Slack mirror failed",{error:String(i),handleId:e})}}async resolveContactName(e){if(!this.contactsCollection)return e;try{let t=await this.contactsCollection.findOne({$or:[{phones:e},{emails:e}]});if(t?.displayName)return`${t.displayName} (${e})`;if(t?.name)return`${t.name} (${e})`}catch{}return e}loadState(){try{if(bh(this.stateFilePath)){let e=JSON.parse(K0(this.stateFilePath,"utf-8"));this.lastSeenRowId=e.lastSeenRowId??0,se.info("Restored iMessage state",{lastSeenRowId:this.lastSeenRowId})}}catch(e){se.warn("Failed to load iMessage state, starting fresh",{error:String(e)})}}saveState(){try{let e=_h(this.stateFilePath,"..");bh(e)||H0(e,{recursive:!0}),G0(this.stateFilePath,JSON.stringify({lastSeenRowId:this.lastSeenRowId}))}catch(e){se.warn("Failed to save iMessage state",{error:String(e)})}}};function V0(n){return new Promise(e=>setTimeout(e,n))}O();var Yt=I("task-client"),Dr=class{apiUrl;apiKey;constructor(e,t){this.apiUrl=e,this.apiKey=t}get isConfigured(){return this.apiKey.length>0}async api(e,t,s){let r=await fetch(`${this.apiUrl}/api/v1${t}`,{method:e,headers:{"x-api-key":this.apiKey,...s?{"Content-Type":"application/json"}:{}},...s?{body:JSON.stringify(s)}:{}});if(!r.ok)throw new Error(`Task API ${r.status}: ${await r.text()}`);return r.json()}async createTask(e){try{let t=await this.api("POST","/tasks",e);return Yt.info("Task created",{taskId:t._id,name:e.name}),t}catch(t){return Yt.error("Failed to create task",{error:String(t),name:e.name}),null}}async updateTask(e,t){try{return await this.api("PUT",`/tasks/${e}`,t),Yt.info("Task updated",{taskId:e,...t}),!0}catch(s){return Yt.error("Failed to update task",{error:String(s),taskId:e}),!1}}async addComment(e,t){try{return await this.api("POST",`/tasks/${e}/comments`,{content:t}),Yt.info("Comment added",{taskId:e}),!0}catch(s){return Yt.error("Failed to add comment",{error:String(s),taskId:e}),!1}}};O();var Hs=I("task-ledger"),Lr=class{threadTaskMap=new Map;threadTaskLastSeen=new Map;apiUrl;agentKeys;fallbackKey;constructor(e,t,s){this.apiUrl=e,this.agentKeys=t,this.fallbackKey=s}get isConfigured(){return Object.keys(this.agentKeys).length>0||this.fallbackKey.length>0}shouldTrack(e){return e.source.kind!=="slack"&&e.source.kind!=="sms"}async onDispatch(e,t){let s=this.getApiKey(t);if(!s)return;let r=e.threadId??e.id,i=this.threadTaskMap.get(r);if(i){this.threadTaskLastSeen.set(r,Date.now()),await this.addComment(i,s,this.formatIncomingComment(e));return}let o=await this.createTask(s,e);o&&(this.threadTaskMap.set(r,o),this.threadTaskLastSeen.set(r,Date.now()))}async onComplete(e){let t=this.getApiKey(e.agentId);if(!t)return;let s=e.workItem.threadId??e.workItem.id,r=this.threadTaskMap.get(s);if(r&&this.threadTaskLastSeen.set(s,Date.now()),!r)return;let i=this.formatCompletionComment(e);await this.addComment(r,t,i),e.error||await this.updateTask(r,t,{state:"DONE"})}sweep(e){let t=Date.now()-e,s=0;for(let[r,i]of this.threadTaskLastSeen)i<t&&(this.threadTaskMap.delete(r),this.threadTaskLastSeen.delete(r),s++);return{component:"task-ledger",pruned:s,retried:0,bytesFreed:0,errors:[]}}getApiKey(e){let t=this.agentKeys[e]??this.fallbackKey;return t||(Hs.debug("No task ledger API key for agent",{agentId:e}),null)}async createTask(e,t){try{let s=await this.api("POST","/tasks",e,{name:this.taskName(t),type:this.taskType(t),description:this.taskDescription(t)});return Hs.info("Task created",{taskId:s.taskId,source:t.source.kind}),s.taskId}catch(s){return Hs.error("Failed to create task",{error:String(s),source:t.source.kind}),null}}async addComment(e,t,s){try{await this.api("POST",`/tasks/${e}/comments`,t,{content:s})}catch(r){Hs.error("Failed to add comment",{error:String(r),taskId:e})}}async updateTask(e,t,s){try{await this.api("PUT",`/tasks/${e}`,t,s)}catch(r){Hs.error("Failed to update task",{error:String(r),taskId:e})}}async api(e,t,s,r){let i=await fetch(`${this.apiUrl}/api/v1${t}`,{method:e,headers:{"x-api-key":s,...r?{"Content-Type":"application/json"}:{}},...r?{body:JSON.stringify(r)}:{}});if(!i.ok)throw new Error(`Task API ${i.status}: ${await i.text()}`);return i.json()}taskName(e){let t=e.text,s=t.match(/\[Scheduled task: (.+?)\]/);if(s)return`[Scheduled] ${s[1]}`;let r=t.match(/Command: `(.+?)`/);if(r)return`[Background] ${r[1].slice(0,80)}`;let i=t.match(/\[Meeting (?:transcript update|ended) — (.+?)\]/);return i?`[Meeting] ${i[1]}`:e.source.kind==="email"?`[Email] ${t.slice(0,80)}`:`[${e.source.kind}] ${t.slice(0,80)}`}taskType(e){return e.source.kind==="email"?"FOLLOW_UP":e.text.includes("[Meeting ended")?"ACTION_ITEM":"AGENT"}taskDescription(e){let t=[`**Source:** ${e.source.kind} / ${e.source.label}`,`**Sender:** ${e.senderName??e.sender}`,`**Time:** ${e.timestamp.toISOString()}`];e.threadId&&t.push(`**Thread:** ${e.threadId}`);let s=5e3,r=e.text.length>s?e.text.slice(0,s)+`
326
+ `).all(e,j0),s=[];for(let r of t){let i=r.text;if(!i&&r.attributedBody&&(i=K0(r.attributedBody),!i)){_h.warn("Could not extract text from attributedBody, skipping",{rowId:r.rowId});continue}i&&s.push({rowId:r.rowId,text:i,sender:r.sender,handleRowId:r.handleRowId,service:r.service,date:F0(r.date)})}return s}getMaxRowId(){return this.db.prepare("SELECT MAX(ROWID) AS maxId FROM message").get().maxId??0}close(){this.db.close()}};var se=T("imessage-adapter"),xr=class{id="imessage";kind="imessage";config;mongoUri;dbName;gateway;db;mongo;threadsCollection;contactsCollection;slackChannelId;interval=null;lastSeenRowId=0;lastMessageAt=0;lastColdPoll=0;stateFilePath;constructor(e,t,s,r,i){this.config=e,this.mongoUri=t,this.dbName=s,this.gateway=r,this.stateFilePath=vh(`/tmp/${i}-imessage-state.json`)}async start(e){this.mongo=new Q0(this.mongoUri),await this.mongo.connect();let t=this.mongo.db(this.dbName);this.threadsCollection=t.collection("imessage_threads"),this.contactsCollection=t.collection("contacts");try{let r=((await this.gateway.client.conversations.list({types:"public_channel",limit:200})).channels??[]).find(i=>i.name===this.config.slackChannel);r?.id?(this.slackChannelId=r.id,se.info("Slack mirror channel resolved",{channel:this.config.slackChannel,id:r.id})):se.warn("Slack mirror channel not found",{channel:this.config.slackChannel})}catch(s){se.warn("Failed to resolve Slack mirror channel",{error:String(s)})}try{this.db=new Or}catch(s){se.error("Failed to open chat.db \u2014 check Full Disk Access for node",{error:String(s)});return}this.loadState(),this.lastSeenRowId===0&&(this.lastSeenRowId=this.db.getMaxRowId(),this.saveState(),se.info("First run \u2014 initialized lastSeenRowId",{lastSeenRowId:this.lastSeenRowId})),this.interval=setInterval(()=>this.poll(e),this.config.hotIntervalMs),this.poll(e),se.info("iMessage adapter started",{lastSeenRowId:this.lastSeenRowId,hotIntervalMs:this.config.hotIntervalMs,coldIntervalMs:this.config.coldIntervalMs})}async deliver(e){if(e.error){se.warn("Skipping iMessage delivery due to error",{error:e.error});return}let t=e.workItem.sender;try{this.sendViaAppleScript(t,e.text),se.info("iMessage reply sent",{to:t})}catch(s){se.warn("iMessage send failed, retrying",{error:String(s),to:t});try{await X0(500),this.sendViaAppleScript(t,e.text),se.info("iMessage reply sent on retry",{to:t})}catch(r){se.error("iMessage delivery failed after retry",{error:String(r),to:t});return}}await this.mirrorToSlack(t,e.text,e.agentId,!0)}async stop(){this.interval&&(clearInterval(this.interval),this.interval=null),this.db?.close(),await this.mongo?.close(),se.info("iMessage adapter stopped")}async poll(e){let t=Date.now(),s=t-this.lastMessageAt<this.config.hotWindowMs;if(!(!s&&t-this.lastColdPoll<this.config.coldIntervalMs)&&(s||(this.lastColdPoll=t),!!this.db))try{let r=this.db.getNewMessages(this.lastSeenRowId);if(r.length===0)return;for(let i of r){this.lastSeenRowId=i.rowId,this.lastMessageAt=t;let o={id:`imsg-${i.rowId}`,text:i.text,source:{kind:"imessage",id:"imessage",label:"imessage"},sender:i.sender,threadId:`imessage:${i.sender}`,timestamp:i.date,meta:{messageRowId:i.rowId,service:i.service}};se.info("iMessage received",{from:i.sender,service:i.service,textLength:i.text.length}),await this.mirrorToSlack(i.sender,i.text,void 0,!1),e(o)}this.saveState()}catch(r){se.error("iMessage poll failed",{error:String(r)})}}sendViaAppleScript(e,t){let s=t.replace(/\\/g,"\\\\").replace(/"/g,'\\"');V0("osascript",["-e",'tell application "Messages"',"-e","set targetService to 1st account whose service type = iMessage","-e",`set targetBuddy to participant "${e}" of targetService`,"-e",`send "${s}" to targetBuddy`,"-e","end tell"])}async mirrorToSlack(e,t,s,r){if(!(!this.slackChannelId||!this.threadsCollection))try{let i=await this.threadsCollection.findOne({handleId:e}),o;if(i)o=i.slackThreadTs;else{let l=await this.resolveContactName(e),c=`:speech_balloon: iMessage conversation with ${l}`,d=await this.gateway.postMessage(this.slackChannelId,c);if(!d){se.warn("Failed to create Slack mirror thread",{handleId:e});return}o=d,await this.threadsCollection.insertOne({handleId:e,slackThreadTs:o,displayName:l,createdAt:new Date})}let a=r?s?`*${s}*: `:"*Agent*: ":`*${e}*: `;await this.gateway.postMessage(this.slackChannelId,`${a}${t}`,o)}catch(i){se.warn("Slack mirror failed",{error:String(i),handleId:e})}}async resolveContactName(e){if(!this.contactsCollection)return e;try{let t=await this.contactsCollection.findOne({$or:[{phones:e},{emails:e}]});if(t?.displayName)return`${t.displayName} (${e})`;if(t?.name)return`${t.name} (${e})`}catch{}return e}loadState(){try{if(kh(this.stateFilePath)){let e=JSON.parse(Y0(this.stateFilePath,"utf-8"));this.lastSeenRowId=e.lastSeenRowId??0,se.info("Restored iMessage state",{lastSeenRowId:this.lastSeenRowId})}}catch(e){se.warn("Failed to load iMessage state, starting fresh",{error:String(e)})}}saveState(){try{let e=vh(this.stateFilePath,"..");kh(e)||z0(e,{recursive:!0}),J0(this.stateFilePath,JSON.stringify({lastSeenRowId:this.lastSeenRowId}))}catch(e){se.warn("Failed to save iMessage state",{error:String(e)})}}};function X0(n){return new Promise(e=>setTimeout(e,n))}O();var Wt=T("task-client"),Mr=class{apiUrl;apiKey;constructor(e,t){this.apiUrl=e,this.apiKey=t}get isConfigured(){return this.apiKey.length>0}async api(e,t,s){let r=await fetch(`${this.apiUrl}/api/v1${t}`,{method:e,headers:{"x-api-key":this.apiKey,...s?{"Content-Type":"application/json"}:{}},...s?{body:JSON.stringify(s)}:{}});if(!r.ok)throw new Error(`Task API ${r.status}: ${await r.text()}`);return r.json()}async createTask(e){try{let t=await this.api("POST","/tasks",e);return Wt.info("Task created",{taskId:t._id,name:e.name}),t}catch(t){return Wt.error("Failed to create task",{error:String(t),name:e.name}),null}}async updateTask(e,t){try{return await this.api("PUT",`/tasks/${e}`,t),Wt.info("Task updated",{taskId:e,...t}),!0}catch(s){return Wt.error("Failed to update task",{error:String(s),taskId:e}),!1}}async addComment(e,t){try{return await this.api("POST",`/tasks/${e}/comments`,{content:t}),Wt.info("Comment added",{taskId:e}),!0}catch(s){return Wt.error("Failed to add comment",{error:String(s),taskId:e}),!1}}};O();var Gs=T("task-ledger"),Dr=class{threadTaskMap=new Map;threadTaskLastSeen=new Map;apiUrl;agentKeys;fallbackKey;constructor(e,t,s){this.apiUrl=e,this.agentKeys=t,this.fallbackKey=s}get isConfigured(){return Object.keys(this.agentKeys).length>0||this.fallbackKey.length>0}shouldTrack(e){return e.source.kind!=="slack"&&e.source.kind!=="sms"}async onDispatch(e,t){let s=this.getApiKey(t);if(!s)return;let r=e.threadId??e.id,i=this.threadTaskMap.get(r);if(i){this.threadTaskLastSeen.set(r,Date.now()),await this.addComment(i,s,this.formatIncomingComment(e));return}let o=await this.createTask(s,e);o&&(this.threadTaskMap.set(r,o),this.threadTaskLastSeen.set(r,Date.now()))}async onComplete(e){let t=this.getApiKey(e.agentId);if(!t)return;let s=e.workItem.threadId??e.workItem.id,r=this.threadTaskMap.get(s);if(r&&this.threadTaskLastSeen.set(s,Date.now()),!r)return;let i=this.formatCompletionComment(e);await this.addComment(r,t,i),e.error||await this.updateTask(r,t,{state:"DONE"})}sweep(e){let t=Date.now()-e,s=0;for(let[r,i]of this.threadTaskLastSeen)i<t&&(this.threadTaskMap.delete(r),this.threadTaskLastSeen.delete(r),s++);return{component:"task-ledger",pruned:s,retried:0,bytesFreed:0,errors:[]}}getApiKey(e){let t=this.agentKeys[e]??this.fallbackKey;return t||(Gs.debug("No task ledger API key for agent",{agentId:e}),null)}async createTask(e,t){try{let s=await this.api("POST","/tasks",e,{name:this.taskName(t),type:this.taskType(t),description:this.taskDescription(t)});return Gs.info("Task created",{taskId:s.taskId,source:t.source.kind}),s.taskId}catch(s){return Gs.error("Failed to create task",{error:String(s),source:t.source.kind}),null}}async addComment(e,t,s){try{await this.api("POST",`/tasks/${e}/comments`,t,{content:s})}catch(r){Gs.error("Failed to add comment",{error:String(r),taskId:e})}}async updateTask(e,t,s){try{await this.api("PUT",`/tasks/${e}`,t,s)}catch(r){Gs.error("Failed to update task",{error:String(r),taskId:e})}}async api(e,t,s,r){let i=await fetch(`${this.apiUrl}/api/v1${t}`,{method:e,headers:{"x-api-key":s,...r?{"Content-Type":"application/json"}:{}},...r?{body:JSON.stringify(r)}:{}});if(!i.ok)throw new Error(`Task API ${i.status}: ${await i.text()}`);return i.json()}taskName(e){let t=e.text,s=t.match(/\[Scheduled task: (.+?)\]/);if(s)return`[Scheduled] ${s[1]}`;let r=t.match(/Command: `(.+?)`/);if(r)return`[Background] ${r[1].slice(0,80)}`;let i=t.match(/\[Meeting (?:transcript update|ended) — (.+?)\]/);return i?`[Meeting] ${i[1]}`:e.source.kind==="email"?`[Email] ${t.slice(0,80)}`:`[${e.source.kind}] ${t.slice(0,80)}`}taskType(e){return e.source.kind==="email"?"FOLLOW_UP":e.text.includes("[Meeting ended")?"ACTION_ITEM":"AGENT"}taskDescription(e){let t=[`**Source:** ${e.source.kind} / ${e.source.label}`,`**Sender:** ${e.senderName??e.sender}`,`**Time:** ${e.timestamp.toISOString()}`];e.threadId&&t.push(`**Thread:** ${e.threadId}`);let s=5e3,r=e.text.length>s?e.text.slice(0,s)+`
327
327
 
328
328
  ... (truncated)`:e.text;return t.push("","---","",r),t.join(`
329
329
  `)}formatIncomingComment(e){return`**Follow-up message** (${e.source.kind})
@@ -332,36 +332,36 @@ ${e.text.slice(0,5e3)}`}formatCompletionComment(e){let t=[`**Agent response** ($
332
332
  **Error:** ${e.error}`);let s=5e3,r=e.text.length>s?e.text.slice(0,s)+`
333
333
 
334
334
  ... (truncated)`:e.text;return t.push("",r),t.join(`
335
- `)}};O();import{createServer as Y0}from"node:http";import{spawn as J0}from"node:child_process";import{mkdir as z0,readFile as kh,writeFile as Q0,readdir as X0,stat as Z0,unlink as eb}from"node:fs/promises";import{openSync as tb,closeSync as sb}from"node:fs";import{randomUUID as nb}from"node:crypto";var ge=I("bg-task-manager"),_a=100,rb=5e3,Pr=class{port;authToken;tasksDir;tasks=new Map;onComplete;server=null;orphanPollers=new Map;constructor(e,t,s,r){this.port=e,this.authToken=t,this.tasksDir=s,this.onComplete=r}async start(){await z0(this.tasksDir,{recursive:!0}),this.server=Y0((e,t)=>{this.handleRequest(e,t).catch(s=>{ge.error("HTTP handler error",{error:String(s)}),t.writeHead(500,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Internal server error"}))})}),await new Promise(e=>{this.server.listen(this.port,"127.0.0.1",()=>e())}),ge.info("Background task manager started",{port:this.port})}async scanOrphans(){let e;try{e=await X0(this.tasksDir)}catch{return}let t=e.filter(i=>i.endsWith(".json")),s=0,r=0;for(let i of t)try{let o=await kh(`${this.tasksDir}/${i}`,"utf-8"),a=JSON.parse(o);this.tasks.set(a.id,a),a.status==="running"&&a.pid&&(this.isProcessAlive(a.pid)?(this.pollOrphan(a.id,a.pid),r++):(a.status="orphaned",a.completedAt=new Date().toISOString(),await this.writeMeta(a),this.fireCompletion(a),s++))}catch(o){ge.warn("Failed to read orphan task file",{file:i,error:String(o)})}(s>0||r>0)&&ge.info("Orphan scan complete",{orphaned:s,recovered:r,total:t.length})}async stop(){for(let[,t]of this.orphanPollers)clearInterval(t);this.orphanPollers.clear();let e=[...this.tasks.values()].filter(t=>t.status==="running"&&t.pid);if(e.length>0){ge.info("Sending SIGTERM to running background tasks",{count:e.length});for(let t of e)this.killProcess(t.pid,"SIGTERM");await this.sleep(rb);for(let t of e)t.pid&&this.isProcessAlive(t.pid)&&(ge.warn("Background task did not exit after SIGTERM, sending SIGKILL",{id:t.id,pid:t.pid}),this.killProcess(t.pid,"SIGKILL"))}this.server&&(this.server.close(),this.server=null),ge.info("Background task manager stopped",{killed:e.length})}killProcess(e,t){try{process.kill(e,t)}catch(s){s.code!=="ESRCH"&&ge.warn("Failed to send signal to process",{pid:e,signal:t,error:String(s)})}}sleep(e){return new Promise(t=>setTimeout(t,e))}async handleRequest(e,t){let s=new URL(e.url??"/",`http://127.0.0.1:${this.port}`);if(e.headers.authorization!==`Bearer ${this.authToken}`){t.writeHead(401,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Unauthorized"}));return}if(e.method==="POST"&&s.pathname==="/tasks"){let o=await this.readBody(e),a=JSON.parse(o),l=await this.spawnTask(a);t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({id:l.id,status:"running"}));return}let i=s.pathname.match(/^\/tasks\/([a-f0-9-]+)$/);if(e.method==="GET"&&i){let o=i[1],a=await this.taskStatus(o);if(!a){t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Task not found"}));return}t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify(a));return}if(e.method==="GET"&&s.pathname==="/tasks"){let o=s.searchParams.get("agentId")??void 0,a=await this.listTasks(o);t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({tasks:a}));return}t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Not found"}))}async spawnTask(e){let t=nb(),s=`${this.tasksDir}/${t}.log`,r=`${this.tasksDir}/${t}.json`,i=e.cwd??process.env.HOME??"/tmp",o=tb(s,"a"),a=J0(e.command,e.args??[],{cwd:i,detached:!0,stdio:["ignore",o,o]});sb(o);let l={id:t,command:e.command+(e.args?.length?" "+e.args.join(" "):""),cwd:i,status:"running",exitCode:null,startedAt:new Date().toISOString(),completedAt:null,logPath:s,metaPath:r,context:e.context,pid:a.pid??null};return this.tasks.set(t,l),a.on("exit",c=>this.handleExit(t,c)),a.on("error",c=>{ge.error("Background task process error",{id:t,error:String(c)}),this.handleExit(t,1)}),this.writeMeta(l).catch(()=>{}),ge.info("Background task spawned",{id:t,command:e.command,cwd:i,pid:a.pid,agentId:e.context.agentId}),l}async handleExit(e,t){let s=this.tasks.get(e);!s||s.status!=="running"||(s.exitCode=t??1,s.status=s.exitCode===0?"completed":"failed",s.completedAt=new Date().toISOString(),await this.writeMeta(s),this.fireCompletion(s))}fireCompletion(e){let t=new Date(e.startedAt).getTime(),r=(((e.completedAt?new Date(e.completedAt).getTime():Date.now())-t)/1e3).toFixed(1);this.tailLog(e.logPath,_a).then(i=>{let o=e.status==="completed"?"completed":e.status==="failed"?"failed":"orphaned",a={id:`bg:${e.id}:done:${Date.now()}`,text:[`[Background task ${o}] Task \`${e.id}\` finished with exit code ${e.exitCode??"unknown"}.`,`Command: \`${e.command}\``,`Duration: ${r}s`,`Output (last ${_a} lines):`,"```",i||"(no output)","```"].join(`
336
- `),source:{kind:e.context.channelKind||"internal",id:e.context.channelId,label:e.context.channelLabel,adapterId:e.context.adapterId},sender:"system",threadId:e.context.threadId,timestamp:new Date,meta:{slackTs:e.context.slackTs,slackThreadTs:e.context.slackThreadTs,bgTaskId:e.id}};ge.info("Background task completed, dispatching notification",{id:e.id,status:e.status,exitCode:e.exitCode,durationSec:r,agentId:e.context.agentId}),this.onComplete(a)}).catch(i=>{ge.error("Failed to fire completion notification",{id:e.id,error:String(i)})})}async taskStatus(e){let t=this.tasks.get(e);if(!t)return null;let s=await this.tailLog(t.logPath,_a);return{id:t.id,status:t.status,exitCode:t.exitCode,startedAt:t.startedAt,completedAt:t.completedAt,command:t.command,output:s}}async listTasks(e){let t=[];for(let s of this.tasks.values())e&&s.context.agentId!==e||t.push({id:s.id,status:s.status,exitCode:s.exitCode,startedAt:s.startedAt,completedAt:s.completedAt,command:s.command});return t}async writeMeta(e){try{await Q0(e.metaPath,JSON.stringify(e,null,2),"utf-8")}catch(t){ge.error("Failed to write task metadata",{id:e.id,error:String(t)})}}async tailLog(e,t){try{return(await kh(e,"utf-8")).split(`
335
+ `)}};O();import{createServer as Z0}from"node:http";import{spawn as eb}from"node:child_process";import{mkdir as tb,readFile as Th,writeFile as sb,readdir as nb,stat as rb,unlink as ib}from"node:fs/promises";import{openSync as ob,closeSync as ab}from"node:fs";import{randomUUID as cb}from"node:crypto";var ge=T("bg-task-manager"),ka=100,lb=5e3,Lr=class{port;authToken;tasksDir;tasks=new Map;onComplete;server=null;orphanPollers=new Map;constructor(e,t,s,r){this.port=e,this.authToken=t,this.tasksDir=s,this.onComplete=r}async start(){await tb(this.tasksDir,{recursive:!0}),this.server=Z0((e,t)=>{this.handleRequest(e,t).catch(s=>{ge.error("HTTP handler error",{error:String(s)}),t.writeHead(500,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Internal server error"}))})}),await new Promise(e=>{this.server.listen(this.port,"127.0.0.1",()=>e())}),ge.info("Background task manager started",{port:this.port})}async scanOrphans(){let e;try{e=await nb(this.tasksDir)}catch{return}let t=e.filter(i=>i.endsWith(".json")),s=0,r=0;for(let i of t)try{let o=await Th(`${this.tasksDir}/${i}`,"utf-8"),a=JSON.parse(o);this.tasks.set(a.id,a),a.status==="running"&&a.pid&&(this.isProcessAlive(a.pid)?(this.pollOrphan(a.id,a.pid),r++):(a.status="orphaned",a.completedAt=new Date().toISOString(),await this.writeMeta(a),this.fireCompletion(a),s++))}catch(o){ge.warn("Failed to read orphan task file",{file:i,error:String(o)})}(s>0||r>0)&&ge.info("Orphan scan complete",{orphaned:s,recovered:r,total:t.length})}async stop(){for(let[,t]of this.orphanPollers)clearInterval(t);this.orphanPollers.clear();let e=[...this.tasks.values()].filter(t=>t.status==="running"&&t.pid);if(e.length>0){ge.info("Sending SIGTERM to running background tasks",{count:e.length});for(let t of e)this.killProcess(t.pid,"SIGTERM");await this.sleep(lb);for(let t of e)t.pid&&this.isProcessAlive(t.pid)&&(ge.warn("Background task did not exit after SIGTERM, sending SIGKILL",{id:t.id,pid:t.pid}),this.killProcess(t.pid,"SIGKILL"))}this.server&&(this.server.close(),this.server=null),ge.info("Background task manager stopped",{killed:e.length})}killProcess(e,t){try{process.kill(e,t)}catch(s){s.code!=="ESRCH"&&ge.warn("Failed to send signal to process",{pid:e,signal:t,error:String(s)})}}sleep(e){return new Promise(t=>setTimeout(t,e))}async handleRequest(e,t){let s=new URL(e.url??"/",`http://127.0.0.1:${this.port}`);if(e.headers.authorization!==`Bearer ${this.authToken}`){t.writeHead(401,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Unauthorized"}));return}if(e.method==="POST"&&s.pathname==="/tasks"){let o=await this.readBody(e),a=JSON.parse(o),l=await this.spawnTask(a);t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({id:l.id,status:"running"}));return}let i=s.pathname.match(/^\/tasks\/([a-f0-9-]+)$/);if(e.method==="GET"&&i){let o=i[1],a=await this.taskStatus(o);if(!a){t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Task not found"}));return}t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify(a));return}if(e.method==="GET"&&s.pathname==="/tasks"){let o=s.searchParams.get("agentId")??void 0,a=await this.listTasks(o);t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({tasks:a}));return}t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Not found"}))}async spawnTask(e){let t=cb(),s=`${this.tasksDir}/${t}.log`,r=`${this.tasksDir}/${t}.json`,i=e.cwd??process.env.HOME??"/tmp",o=ob(s,"a"),a=eb(e.command,e.args??[],{cwd:i,detached:!0,stdio:["ignore",o,o]});ab(o);let l={id:t,command:e.command+(e.args?.length?" "+e.args.join(" "):""),cwd:i,status:"running",exitCode:null,startedAt:new Date().toISOString(),completedAt:null,logPath:s,metaPath:r,context:e.context,pid:a.pid??null};return this.tasks.set(t,l),a.on("exit",c=>this.handleExit(t,c)),a.on("error",c=>{ge.error("Background task process error",{id:t,error:String(c)}),this.handleExit(t,1)}),this.writeMeta(l).catch(()=>{}),ge.info("Background task spawned",{id:t,command:e.command,cwd:i,pid:a.pid,agentId:e.context.agentId}),l}async handleExit(e,t){let s=this.tasks.get(e);!s||s.status!=="running"||(s.exitCode=t??1,s.status=s.exitCode===0?"completed":"failed",s.completedAt=new Date().toISOString(),await this.writeMeta(s),this.fireCompletion(s))}fireCompletion(e){let t=new Date(e.startedAt).getTime(),r=(((e.completedAt?new Date(e.completedAt).getTime():Date.now())-t)/1e3).toFixed(1);this.tailLog(e.logPath,ka).then(i=>{let o=e.status==="completed"?"completed":e.status==="failed"?"failed":"orphaned",a={id:`bg:${e.id}:done:${Date.now()}`,text:[`[Background task ${o}] Task \`${e.id}\` finished with exit code ${e.exitCode??"unknown"}.`,`Command: \`${e.command}\``,`Duration: ${r}s`,`Output (last ${ka} lines):`,"```",i||"(no output)","```"].join(`
336
+ `),source:{kind:e.context.channelKind||"internal",id:e.context.channelId,label:e.context.channelLabel,adapterId:e.context.adapterId},sender:"system",threadId:e.context.threadId,timestamp:new Date,meta:{slackTs:e.context.slackTs,slackThreadTs:e.context.slackThreadTs,bgTaskId:e.id}};ge.info("Background task completed, dispatching notification",{id:e.id,status:e.status,exitCode:e.exitCode,durationSec:r,agentId:e.context.agentId}),this.onComplete(a)}).catch(i=>{ge.error("Failed to fire completion notification",{id:e.id,error:String(i)})})}async taskStatus(e){let t=this.tasks.get(e);if(!t)return null;let s=await this.tailLog(t.logPath,ka);return{id:t.id,status:t.status,exitCode:t.exitCode,startedAt:t.startedAt,completedAt:t.completedAt,command:t.command,output:s}}async listTasks(e){let t=[];for(let s of this.tasks.values())e&&s.context.agentId!==e||t.push({id:s.id,status:s.status,exitCode:s.exitCode,startedAt:s.startedAt,completedAt:s.completedAt,command:s.command});return t}async writeMeta(e){try{await sb(e.metaPath,JSON.stringify(e,null,2),"utf-8")}catch(t){ge.error("Failed to write task metadata",{id:e.id,error:String(t)})}}async tailLog(e,t){try{return(await Th(e,"utf-8")).split(`
337
337
  `).slice(-t).join(`
338
- `).trim()}catch{return""}}isProcessAlive(e){try{return process.kill(e,0),!0}catch{return!1}}pollOrphan(e,t){let s=setInterval(()=>{if(!this.isProcessAlive(t)){clearInterval(s),this.orphanPollers.delete(e);let r=this.tasks.get(e);r&&r.status==="running"&&(r.status="orphaned",r.completedAt=new Date().toISOString(),this.writeMeta(r).then(()=>this.fireCompletion(r)))}},5e3);this.orphanPollers.set(e,s)}async sweep(e){let t=Date.now()-e,s=0,r=0,i=[];for(let[o,a]of this.tasks)if(!(a.status==="running"||!a.completedAt||new Date(a.completedAt).getTime()>t)){for(let c of[a.metaPath,a.logPath])try{let d=await Z0(c);r+=d.size,await eb(c)}catch(d){d.code!=="ENOENT"&&i.push(`Failed to delete ${c}: ${String(d)}`)}this.tasks.delete(o),s++}return{component:"bg-task-manager",pruned:s,retried:0,bytesFreed:r,errors:i}}readBody(e){return new Promise((t,s)=>{let r="";e.on("data",i=>{r+=i.toString()}),e.on("end",()=>t(r)),e.on("error",s)})}};O();import{createServer as cb}from"node:http";import{spawn as lb}from"node:child_process";import{mkdir as db,readFile as $r,writeFile as ub,readdir as hb,stat as fb,unlink as pb,open as mb}from"node:fs/promises";import{openSync as Ah,closeSync as Ch}from"node:fs";import{randomUUID as gb}from"node:crypto";function vh(n){let e=n.trim();if(!e)return null;try{let t=JSON.parse(e);return t.type!=="result"?null:{sessionId:t.session_id??null,result:t.result??"",subtype:t.subtype??"unknown",costUsd:t.total_cost_usd??0,durationMs:t.duration_ms??0,numTurns:t.num_turns??0,isError:t.is_error===!0}}catch{return null}}var ib=/\*{0,2}Status:?\*{0,2}\s+(NEEDS_CONTEXT|BLOCKED)/i,ob=/\*{0,2}Question:?\*{0,2}\s+(.+?)(?:\n\n|\n\*{0,2}(?:Context|Status|Files|What)|$)/is,ab=/\*{0,2}Context:?\*{0,2}\s+(.+?)(?:\n\n\*{0,2}(?:Status|Question|Files|To respond)|$)/is;function Th(n){if(!n)return null;let e=ib.exec(n);if(!e)return null;let t=e[1].toUpperCase(),r=ob.exec(n)?.[1]?.trim()??"",o=ab.exec(n)?.[1]?.trim()??"";return{status:t,question:r,context:o}}function Ih(n,e,t){return t||e?.subtype==="error_max_turns"||e?.subtype==="error_max_budget_usd"?"needs_input":n===0&&e?.subtype==="success"||n===0&&!e?"completed":"failed"}var X=I("code-task-manager"),Ws=2e3,ka=100,Eh=5e3,Rr=class{port;authToken;pluginDirs;maxConcurrent;tasksDir;cliBin;options;tasks=new Map;onComplete;server=null;orphanPollers=new Map;reapTimers=new Set;constructor(e,t,s,r,i,o,a){this.port=e,this.authToken=t,this.pluginDirs=s,this.maxConcurrent=r,this.tasksDir=i,this.onComplete=o,this.options=a??{},this.cliBin=this.options.cliBin??"claude"}async start(){await db(this.tasksDir,{recursive:!0}),this.server=cb((e,t)=>{this.handleRequest(e,t).catch(s=>{X.error("HTTP handler error",{error:String(s)}),t.writeHead(500,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Internal server error"}))})}),await new Promise(e=>{this.server.listen(this.port,"127.0.0.1",()=>e())}),X.info("Code task manager started",{port:this.port})}async scanOrphans(){let e;try{e=await hb(this.tasksDir)}catch{return}let t=e.filter(i=>i.endsWith(".meta.json")),s=0,r=0;for(let i of t)try{let o=await $r(`${this.tasksDir}/${i}`,"utf-8"),a=JSON.parse(o);this.tasks.set(a.id,a),a.status==="running"&&a.pid&&(this.isProcessAlive(a.pid)?(this.pollOrphan(a.id,a.pid),r++):(a.status="orphaned",a.completedAt=new Date().toISOString(),await this.writeMeta(a),this.fireCompletion(a),s++))}catch(o){X.warn("Failed to read orphan task file",{file:i,error:String(o)})}(s>0||r>0)&&X.info("Orphan scan complete",{orphaned:s,recovered:r,total:t.length})}async stop(){for(let[,t]of this.orphanPollers)clearInterval(t);this.orphanPollers.clear();for(let t of this.reapTimers)clearTimeout(t);this.reapTimers.clear();let e=[...this.tasks.values()].filter(t=>t.status==="running"&&t.pid);if(e.length>0){X.info("Sending SIGTERM to running code tasks",{count:e.length});for(let t of e)this.killProcess(t.pid,"SIGTERM");await this.sleep(Eh);for(let t of e)t.pid&&this.isProcessAlive(t.pid)&&(X.warn("Code task did not exit after SIGTERM, sending SIGKILL",{id:t.id,pid:t.pid}),this.killProcess(t.pid,"SIGKILL"))}this.server&&(this.server.close(),this.server=null),X.info("Code task manager stopped",{killed:e.length})}async reapStale(){let e=this.options.maxLifetimeMs??288e5,t=this.options.staleGraceMs??1800*1e3,s=Date.now(),r=0,i=0;for(let o of this.tasks.values()){if(o.status!=="running"||!o.pid)continue;let a=s-new Date(o.startedAt).getTime();if(a<e)continue;if(await this.isFileRecentlyModified(o.stderrPath,t)){X.info("Stale code task spared \u2014 stderr still active",{id:o.id,pid:o.pid,ageHours:(a/36e5).toFixed(1)}),i++;continue}X.warn("Reaping stale code task",{id:o.id,pid:o.pid,ageHours:(a/36e5).toFixed(1)}),this.killProcess(o.pid,"SIGTERM"),o.status="orphaned";let c=setTimeout(()=>{this.reapTimers.delete(c),o.pid&&this.isProcessAlive(o.pid)&&(X.warn("Stale code task did not exit after SIGTERM, sending SIGKILL",{id:o.id,pid:o.pid}),this.killProcess(o.pid,"SIGKILL"))},Eh);this.reapTimers.add(c),r++}return(r>0||i>0)&&X.info("Stale reap complete",{reaped:r,spared:i}),{reaped:r,spared:i}}async handleRequest(e,t){let s=new URL(e.url??"/",`http://127.0.0.1:${this.port}`);if(e.headers.authorization!==`Bearer ${this.authToken}`){t.writeHead(401,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Unauthorized"}));return}if(e.method==="POST"&&s.pathname==="/tasks"){let a;try{a=JSON.parse(await this.readBody(e))}catch{t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Invalid JSON body"}));return}try{let l=await this.spawnTask(a);t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({id:l.id,status:"running"}))}catch(l){let c=String(l instanceof Error?l.message:l),d=c.includes("concurrency")?429:400;t.writeHead(d,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:c}))}return}let i=s.pathname.match(/^\/tasks\/([a-f0-9-]+)\/respond$/);if(e.method==="POST"&&i){let a=i[1],l;try{l=JSON.parse(await this.readBody(e))}catch{t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Invalid JSON body"}));return}try{let c=await this.resumeTask(a,l.response,l.context);t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({id:c.id,status:"running",resumedFrom:a}))}catch(c){t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:String(c instanceof Error?c.message:c)}))}return}let o=s.pathname.match(/^\/tasks\/([a-f0-9-]+)$/);if(e.method==="GET"&&o){let a=o[1],l=await this.taskStatus(a);if(!l){t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Task not found"}));return}t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify(l));return}if(e.method==="GET"&&s.pathname==="/tasks"){let a=s.searchParams.get("agentId")??void 0,l=this.listTasks(a);t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({tasks:l}));return}t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Not found"}))}async spawnTask(e){if([...this.tasks.values()].filter(S=>S.status==="running").length>=this.maxConcurrent)throw new Error(`Max concurrency reached (${this.maxConcurrent} running). Wait for a task to finish or increase the limit.`);let s=gb(),r=`${this.tasksDir}/${s}.stdout.json`,i=`${this.tasksDir}/${s}.stderr.log`,o=`${this.tasksDir}/${s}.meta.json`,a=e.cwd,l=e.model??"",c=e.maxTurns??100,d=e.maxBudget??5,u=e.prompt;if(this.options?.prefetcher)try{let S=await this.options.prefetcher.getContext(e.prompt,e.context.agentId);S&&(u=S+`
338
+ `).trim()}catch{return""}}isProcessAlive(e){try{return process.kill(e,0),!0}catch{return!1}}pollOrphan(e,t){let s=setInterval(()=>{if(!this.isProcessAlive(t)){clearInterval(s),this.orphanPollers.delete(e);let r=this.tasks.get(e);r&&r.status==="running"&&(r.status="orphaned",r.completedAt=new Date().toISOString(),this.writeMeta(r).then(()=>this.fireCompletion(r)))}},5e3);this.orphanPollers.set(e,s)}async sweep(e){let t=Date.now()-e,s=0,r=0,i=[];for(let[o,a]of this.tasks)if(!(a.status==="running"||!a.completedAt||new Date(a.completedAt).getTime()>t)){for(let c of[a.metaPath,a.logPath])try{let d=await rb(c);r+=d.size,await ib(c)}catch(d){d.code!=="ENOENT"&&i.push(`Failed to delete ${c}: ${String(d)}`)}this.tasks.delete(o),s++}return{component:"bg-task-manager",pruned:s,retried:0,bytesFreed:r,errors:i}}readBody(e){return new Promise((t,s)=>{let r="";e.on("data",i=>{r+=i.toString()}),e.on("end",()=>t(r)),e.on("error",s)})}};O();import{createServer as fb}from"node:http";import{spawn as pb}from"node:child_process";import{mkdir as mb,readFile as Pr,writeFile as gb,readdir as yb,stat as wb,unlink as Sb,open as bb}from"node:fs/promises";import{openSync as Eh,closeSync as Nh}from"node:fs";import{randomUUID as _b}from"node:crypto";function Ih(n){let e=n.trim();if(!e)return null;try{let t=JSON.parse(e);return t.type!=="result"?null:{sessionId:t.session_id??null,result:t.result??"",subtype:t.subtype??"unknown",costUsd:t.total_cost_usd??0,durationMs:t.duration_ms??0,numTurns:t.num_turns??0,isError:t.is_error===!0}}catch{return null}}var db=/\*{0,2}Status:?\*{0,2}\s+(NEEDS_CONTEXT|BLOCKED)/i,ub=/\*{0,2}Question:?\*{0,2}\s+(.+?)(?:\n\n|\n\*{0,2}(?:Context|Status|Files|What)|$)/is,hb=/\*{0,2}Context:?\*{0,2}\s+(.+?)(?:\n\n\*{0,2}(?:Status|Question|Files|To respond)|$)/is;function Ah(n){if(!n)return null;let e=db.exec(n);if(!e)return null;let t=e[1].toUpperCase(),r=ub.exec(n)?.[1]?.trim()??"",o=hb.exec(n)?.[1]?.trim()??"";return{status:t,question:r,context:o}}function Ch(n,e,t){return t||e?.subtype==="error_max_turns"||e?.subtype==="error_max_budget_usd"?"needs_input":n===0&&e?.subtype==="success"||n===0&&!e?"completed":"failed"}var X=T("code-task-manager"),Hs=2e3,va=100,Oh=5e3,$r=class{port;authToken;pluginDirs;maxConcurrent;tasksDir;cliBin;options;tasks=new Map;onComplete;server=null;orphanPollers=new Map;reapTimers=new Set;constructor(e,t,s,r,i,o,a){this.port=e,this.authToken=t,this.pluginDirs=s,this.maxConcurrent=r,this.tasksDir=i,this.onComplete=o,this.options=a??{},this.cliBin=this.options.cliBin??"claude"}async start(){await mb(this.tasksDir,{recursive:!0}),this.server=fb((e,t)=>{this.handleRequest(e,t).catch(s=>{X.error("HTTP handler error",{error:String(s)}),t.writeHead(500,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Internal server error"}))})}),await new Promise(e=>{this.server.listen(this.port,"127.0.0.1",()=>e())}),X.info("Code task manager started",{port:this.port})}async scanOrphans(){let e;try{e=await yb(this.tasksDir)}catch{return}let t=e.filter(i=>i.endsWith(".meta.json")),s=0,r=0;for(let i of t)try{let o=await Pr(`${this.tasksDir}/${i}`,"utf-8"),a=JSON.parse(o);this.tasks.set(a.id,a),a.status==="running"&&a.pid&&(this.isProcessAlive(a.pid)?(this.pollOrphan(a.id,a.pid),r++):(a.status="orphaned",a.completedAt=new Date().toISOString(),await this.writeMeta(a),this.fireCompletion(a),s++))}catch(o){X.warn("Failed to read orphan task file",{file:i,error:String(o)})}(s>0||r>0)&&X.info("Orphan scan complete",{orphaned:s,recovered:r,total:t.length})}async stop(){for(let[,t]of this.orphanPollers)clearInterval(t);this.orphanPollers.clear();for(let t of this.reapTimers)clearTimeout(t);this.reapTimers.clear();let e=[...this.tasks.values()].filter(t=>t.status==="running"&&t.pid);if(e.length>0){X.info("Sending SIGTERM to running code tasks",{count:e.length});for(let t of e)this.killProcess(t.pid,"SIGTERM");await this.sleep(Oh);for(let t of e)t.pid&&this.isProcessAlive(t.pid)&&(X.warn("Code task did not exit after SIGTERM, sending SIGKILL",{id:t.id,pid:t.pid}),this.killProcess(t.pid,"SIGKILL"))}this.server&&(this.server.close(),this.server=null),X.info("Code task manager stopped",{killed:e.length})}async reapStale(){let e=this.options.maxLifetimeMs??288e5,t=this.options.staleGraceMs??1800*1e3,s=Date.now(),r=0,i=0;for(let o of this.tasks.values()){if(o.status!=="running"||!o.pid)continue;let a=s-new Date(o.startedAt).getTime();if(a<e)continue;if(await this.isFileRecentlyModified(o.stderrPath,t)){X.info("Stale code task spared \u2014 stderr still active",{id:o.id,pid:o.pid,ageHours:(a/36e5).toFixed(1)}),i++;continue}X.warn("Reaping stale code task",{id:o.id,pid:o.pid,ageHours:(a/36e5).toFixed(1)}),this.killProcess(o.pid,"SIGTERM"),o.status="orphaned";let c=setTimeout(()=>{this.reapTimers.delete(c),o.pid&&this.isProcessAlive(o.pid)&&(X.warn("Stale code task did not exit after SIGTERM, sending SIGKILL",{id:o.id,pid:o.pid}),this.killProcess(o.pid,"SIGKILL"))},Oh);this.reapTimers.add(c),r++}return(r>0||i>0)&&X.info("Stale reap complete",{reaped:r,spared:i}),{reaped:r,spared:i}}async handleRequest(e,t){let s=new URL(e.url??"/",`http://127.0.0.1:${this.port}`);if(e.headers.authorization!==`Bearer ${this.authToken}`){t.writeHead(401,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Unauthorized"}));return}if(e.method==="POST"&&s.pathname==="/tasks"){let a;try{a=JSON.parse(await this.readBody(e))}catch{t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Invalid JSON body"}));return}try{let l=await this.spawnTask(a);t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({id:l.id,status:"running"}))}catch(l){let c=String(l instanceof Error?l.message:l),d=c.includes("concurrency")?429:400;t.writeHead(d,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:c}))}return}let i=s.pathname.match(/^\/tasks\/([a-f0-9-]+)\/respond$/);if(e.method==="POST"&&i){let a=i[1],l;try{l=JSON.parse(await this.readBody(e))}catch{t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Invalid JSON body"}));return}try{let c=await this.resumeTask(a,l.response,l.context);t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({id:c.id,status:"running",resumedFrom:a}))}catch(c){t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:String(c instanceof Error?c.message:c)}))}return}let o=s.pathname.match(/^\/tasks\/([a-f0-9-]+)$/);if(e.method==="GET"&&o){let a=o[1],l=await this.taskStatus(a);if(!l){t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Task not found"}));return}t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify(l));return}if(e.method==="GET"&&s.pathname==="/tasks"){let a=s.searchParams.get("agentId")??void 0,l=this.listTasks(a);t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({tasks:l}));return}t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Not found"}))}async spawnTask(e){if([...this.tasks.values()].filter(S=>S.status==="running").length>=this.maxConcurrent)throw new Error(`Max concurrency reached (${this.maxConcurrent} running). Wait for a task to finish or increase the limit.`);let s=_b(),r=`${this.tasksDir}/${s}.stdout.json`,i=`${this.tasksDir}/${s}.stderr.log`,o=`${this.tasksDir}/${s}.meta.json`,a=e.cwd,l=e.model??"",c=e.maxTurns??100,d=e.maxBudget??5,u=e.prompt;if(this.options?.prefetcher)try{let S=await this.options.prefetcher.getContext(e.prompt,e.context.agentId);S&&(u=S+`
339
339
 
340
340
  ---
341
341
 
342
342
  `+e.prompt)}catch(S){X.warn(`Prefetch failed for task, proceeding without context: ${S}`)}let h=e.sessionId?u:u+`
343
343
 
344
344
  ---
345
- IMPORTANT: After completing implementation, you MUST run /quality-gate before reporting done. This includes test creation, lint, typecheck, and build verification. Do not claim completion without quality-gate passing.`,p=this.buildArgs({prompt:h,maxTurns:c,maxBudget:d,model:l,sessionId:e.sessionId}),g=Ah(r,"w"),f=Ah(i,"w"),y=lb(this.cliBin,p,{cwd:a,detached:!0,stdio:["ignore",g,f],env:process.env});y.on("exit",S=>this.handleExit(s,S)),y.on("error",S=>{X.error("Code task process error",{id:s,error:String(S)}),this.handleExit(s,1)}),Ch(g),Ch(f);let w={id:s,prompt:e.prompt.slice(0,500),cwd:a,model:l,maxTurns:c,maxBudget:d,status:"running",exitCode:null,startedAt:new Date().toISOString(),completedAt:null,stdoutPath:r,stderrPath:i,metaPath:o,context:e.context,pid:y.pid??null,sessionId:e.sessionId??null,costUsd:0,numTurns:0,escalation:null,parentTaskId:e.parentTaskId??null};return this.tasks.set(s,w),await this.writeMeta(w),X.info("Code task spawned",{id:s,cwd:a,model:l||"(default)",maxTurns:c,maxBudget:d,pid:y.pid,agentId:e.context.agentId,parentTaskId:e.parentTaskId??null}),w}buildArgs(e){let t=[];e.sessionId?t.push("--resume",e.sessionId,"-p",e.prompt):t.push("-p",e.prompt);for(let s of this.pluginDirs)t.push("--plugin-dir",s);return t.push("--output-format","json","--dangerously-skip-permissions"),t.push("--max-turns",String(e.maxTurns)),t.push("--max-budget-usd",String(e.maxBudget)),e.model&&t.push("--model",e.model),t}async resumeTask(e,t,s){let r=this.tasks.get(e);if(!r)throw new Error(`Task ${e} not found`);if(r.status!=="needs_input")throw new Error(`Task ${e} is ${r.status}, not needs_input`);if(!r.sessionId)throw new Error(`Task ${e} has no session ID for resume`);return r.status="running",this.spawnTask({prompt:t,cwd:r.cwd,model:r.model,maxTurns:r.maxTurns,maxBudget:r.maxBudget,sessionId:r.sessionId,context:s??r.context,parentTaskId:e})}async handleExit(e,t){let s=this.tasks.get(e);if(!s||s.status!=="running")return;s.exitCode=t??1,s.completedAt=new Date().toISOString();let r=null;try{let o=await $r(s.stdoutPath,"utf-8");r=vh(o)}catch{}r&&(s.sessionId=r.sessionId,s.costUsd=r.costUsd,s.numTurns=r.numTurns);let i=r?Th(r.result):null;s.escalation=i,s.status=Ih(s.exitCode,r,i),await this.writeMeta(s),this.fireCompletion(s,r)}fireCompletion(e,t){let s=new Date(e.startedAt).getTime(),i=(((e.completedAt?new Date(e.completedAt).getTime():Date.now())-s)/1e3).toFixed(1);(async()=>{if(e.status==="needs_input"&&e.escalation){let c=[`[Code task needs input] Task \`${e.id}\` is waiting for a decision.`,""];return e.escalation.status==="BLOCKED"?c.push(`**BLOCKED**: ${e.escalation.question||"No details provided."}`):c.push(`**Needs context**: ${e.escalation.question||"No details provided."}`),e.escalation.context&&c.push("",`Context: ${e.escalation.context}`),c.push("",`Duration: ${i}s | Cost: $${e.costUsd.toFixed(2)} | Turns: ${e.numTurns}`,"",`To respond: \`code_respond({ id: "${e.id}", response: "your answer" })\``),c.join(`
346
- `)}if(e.status==="needs_input"&&t?.subtype){let c=t.subtype==="error_max_turns"?`Hit max turns limit (${e.maxTurns})`:`Hit budget limit ($${e.maxBudget})`;return[`[Code task limit reached] Task \`${e.id}\` \u2014 ${c}.`,`Duration: ${i}s | Cost: $${e.costUsd.toFixed(2)} | Turns: ${e.numTurns}`,"","The session can be resumed with additional budget/turns via `code_respond`.","",`Result (last ${Ws} chars):`,"```",(t.result||"(no output)").slice(-Ws),"```"].join(`
347
- `)}if(e.status==="completed"){let c=t?.result||"(no output)";return[`[Code task completed] Task \`${e.id}\` finished successfully.`,`Duration: ${i}s | Cost: $${e.costUsd.toFixed(2)} | Turns: ${e.numTurns}`,"",`Result (last ${Ws} chars):`,"```",c.slice(-Ws),"```"].join(`
348
- `)}let a="";try{a=(await $r(e.stderrPath,"utf-8")).split(`
349
- `).slice(-ka).join(`
350
- `).trim()}catch{a="(no stderr output)"}let l=t?.result?t.result.slice(-Ws):"";return[`[Code task ${e.status}] Task \`${e.id}\` exited with code ${e.exitCode??"unknown"}.`,`Duration: ${i}s | Cost: $${e.costUsd.toFixed(2)} | Turns: ${e.numTurns}`,"",l?`Result:
345
+ IMPORTANT: After completing implementation, you MUST run /quality-gate before reporting done. This includes test creation, lint, typecheck, and build verification. Do not claim completion without quality-gate passing.`,p=this.buildArgs({prompt:h,maxTurns:c,maxBudget:d,model:l,sessionId:e.sessionId}),g=Eh(r,"w"),f=Eh(i,"w"),y=pb(this.cliBin,p,{cwd:a,detached:!0,stdio:["ignore",g,f],env:process.env});y.on("exit",S=>this.handleExit(s,S)),y.on("error",S=>{X.error("Code task process error",{id:s,error:String(S)}),this.handleExit(s,1)}),Nh(g),Nh(f);let w={id:s,prompt:e.prompt.slice(0,500),cwd:a,model:l,maxTurns:c,maxBudget:d,status:"running",exitCode:null,startedAt:new Date().toISOString(),completedAt:null,stdoutPath:r,stderrPath:i,metaPath:o,context:e.context,pid:y.pid??null,sessionId:e.sessionId??null,costUsd:0,numTurns:0,escalation:null,parentTaskId:e.parentTaskId??null};return this.tasks.set(s,w),await this.writeMeta(w),X.info("Code task spawned",{id:s,cwd:a,model:l||"(default)",maxTurns:c,maxBudget:d,pid:y.pid,agentId:e.context.agentId,parentTaskId:e.parentTaskId??null}),w}buildArgs(e){let t=[];e.sessionId?t.push("--resume",e.sessionId,"-p",e.prompt):t.push("-p",e.prompt);for(let s of this.pluginDirs)t.push("--plugin-dir",s);return t.push("--output-format","json","--dangerously-skip-permissions"),t.push("--max-turns",String(e.maxTurns)),t.push("--max-budget-usd",String(e.maxBudget)),e.model&&t.push("--model",e.model),t}async resumeTask(e,t,s){let r=this.tasks.get(e);if(!r)throw new Error(`Task ${e} not found`);if(r.status!=="needs_input")throw new Error(`Task ${e} is ${r.status}, not needs_input`);if(!r.sessionId)throw new Error(`Task ${e} has no session ID for resume`);return r.status="running",this.spawnTask({prompt:t,cwd:r.cwd,model:r.model,maxTurns:r.maxTurns,maxBudget:r.maxBudget,sessionId:r.sessionId,context:s??r.context,parentTaskId:e})}async handleExit(e,t){let s=this.tasks.get(e);if(!s||s.status!=="running")return;s.exitCode=t??1,s.completedAt=new Date().toISOString();let r=null;try{let o=await Pr(s.stdoutPath,"utf-8");r=Ih(o)}catch{}r&&(s.sessionId=r.sessionId,s.costUsd=r.costUsd,s.numTurns=r.numTurns);let i=r?Ah(r.result):null;s.escalation=i,s.status=Ch(s.exitCode,r,i),await this.writeMeta(s),this.fireCompletion(s,r)}fireCompletion(e,t){let s=new Date(e.startedAt).getTime(),i=(((e.completedAt?new Date(e.completedAt).getTime():Date.now())-s)/1e3).toFixed(1);(async()=>{if(e.status==="needs_input"&&e.escalation){let c=[`[Code task needs input] Task \`${e.id}\` is waiting for a decision.`,""];return e.escalation.status==="BLOCKED"?c.push(`**BLOCKED**: ${e.escalation.question||"No details provided."}`):c.push(`**Needs context**: ${e.escalation.question||"No details provided."}`),e.escalation.context&&c.push("",`Context: ${e.escalation.context}`),c.push("",`Duration: ${i}s | Cost: $${e.costUsd.toFixed(2)} | Turns: ${e.numTurns}`,"",`To respond: \`code_respond({ id: "${e.id}", response: "your answer" })\``),c.join(`
346
+ `)}if(e.status==="needs_input"&&t?.subtype){let c=t.subtype==="error_max_turns"?`Hit max turns limit (${e.maxTurns})`:`Hit budget limit ($${e.maxBudget})`;return[`[Code task limit reached] Task \`${e.id}\` \u2014 ${c}.`,`Duration: ${i}s | Cost: $${e.costUsd.toFixed(2)} | Turns: ${e.numTurns}`,"","The session can be resumed with additional budget/turns via `code_respond`.","",`Result (last ${Hs} chars):`,"```",(t.result||"(no output)").slice(-Hs),"```"].join(`
347
+ `)}if(e.status==="completed"){let c=t?.result||"(no output)";return[`[Code task completed] Task \`${e.id}\` finished successfully.`,`Duration: ${i}s | Cost: $${e.costUsd.toFixed(2)} | Turns: ${e.numTurns}`,"",`Result (last ${Hs} chars):`,"```",c.slice(-Hs),"```"].join(`
348
+ `)}let a="";try{a=(await Pr(e.stderrPath,"utf-8")).split(`
349
+ `).slice(-va).join(`
350
+ `).trim()}catch{a="(no stderr output)"}let l=t?.result?t.result.slice(-Hs):"";return[`[Code task ${e.status}] Task \`${e.id}\` exited with code ${e.exitCode??"unknown"}.`,`Duration: ${i}s | Cost: $${e.costUsd.toFixed(2)} | Turns: ${e.numTurns}`,"",l?`Result:
351
351
  \`\`\`
352
352
  ${l}
353
353
  \`\`\`
354
- `:"",`Stderr (last ${ka} lines):`,"```",a||"(empty)","```"].filter(Boolean).join(`
355
- `)})().then(a=>{let l={id:`ct:${e.id}:done:${Date.now()}`,text:a,source:{kind:e.context.channelKind||"internal",id:e.context.channelId,label:e.context.channelLabel,adapterId:e.context.adapterId},sender:"system",threadId:e.context.threadId,timestamp:new Date,meta:{slackTs:e.context.slackTs,slackThreadTs:e.context.slackThreadTs,codeTaskId:e.id}};X.info("Code task completed, dispatching notification",{id:e.id,status:e.status,exitCode:e.exitCode,costUsd:e.costUsd,numTurns:e.numTurns,durationSec:i,agentId:e.context.agentId,hasEscalation:!!e.escalation}),this.onComplete(l),this.options?.knowledgeExtractor&&e.status==="completed"&&t&&this.options.knowledgeExtractor.extract(e.context.agentId,t).then(c=>{c>0&&X.info(`Extracted ${c} code insights from task ${e.id}`)}).catch(c=>{X.warn(`Knowledge extraction failed for task ${e.id}: ${c}`)})}).catch(a=>{X.error("Failed to fire completion notification",{id:e.id,error:String(a)})})}async taskStatus(e){let t=this.tasks.get(e);if(!t)return null;let s="";try{s=(await $r(t.stderrPath,"utf-8")).split(`
356
- `).slice(-ka).join(`
357
- `).trim()}catch{}return{id:t.id,status:t.status,exitCode:t.exitCode,startedAt:t.startedAt,completedAt:t.completedAt,cwd:t.cwd,model:t.model,costUsd:t.costUsd,numTurns:t.numTurns,sessionId:t.sessionId,escalation:t.escalation,parentTaskId:t.parentTaskId,stderrTail:s}}listTasks(e){let t=[];for(let s of this.tasks.values())e&&s.context.agentId!==e||t.push({id:s.id,status:s.status,exitCode:s.exitCode,startedAt:s.startedAt,completedAt:s.completedAt,costUsd:s.costUsd,numTurns:s.numTurns,cwd:s.cwd,prompt:s.prompt});return t}async sweep(e){let t=Date.now()-e,s=0,r=0,i=[];for(let[o,a]of this.tasks)if(!(a.status==="running"||!a.completedAt||new Date(a.completedAt).getTime()>t)){for(let c of[a.metaPath,a.stdoutPath,a.stderrPath])try{let d=await fb(c);r+=d.size,await pb(c)}catch(d){d.code!=="ENOENT"&&i.push(`Failed to delete ${c}: ${String(d)}`)}this.tasks.delete(o),s++}return{component:"code-task-manager",pruned:s,retried:0,bytesFreed:r,errors:i}}async writeMeta(e){try{await ub(e.metaPath,JSON.stringify(e,null,2),"utf-8")}catch(t){X.error("Failed to write task metadata",{id:e.id,error:String(t)})}}isProcessAlive(e){try{return process.kill(e,0),!0}catch{return!1}}pollOrphan(e,t){let s=setInterval(()=>{if(!this.isProcessAlive(t)){clearInterval(s),this.orphanPollers.delete(e);let r=this.tasks.get(e);r&&r.status==="running"&&(r.status="orphaned",r.completedAt=new Date().toISOString(),this.writeMeta(r).then(()=>this.fireCompletion(r)))}},5e3);this.orphanPollers.set(e,s)}killProcess(e,t){try{process.kill(e,t)}catch(s){s.code!=="ESRCH"&&X.warn("Failed to send signal to process",{pid:e,signal:t,error:String(s)})}}async isFileRecentlyModified(e,t){try{let s=await mb(e,"r"),r=await s.stat();return await s.close(),Date.now()-r.mtimeMs<t}catch{return!1}}sleep(e){return new Promise(t=>setTimeout(t,e))}readBody(e){return new Promise((t,s)=>{let r="";e.on("data",i=>{r+=i.toString()}),e.on("end",()=>t(r)),e.on("error",s)})}};O();import{createServer as yb}from"node:http";import{randomUUID as wb}from"node:crypto";var ne=I("meeting-monitor"),Sb=1e4,bb=15e3,_b=2,kb=new Set(["done","fatal","call_ended","media_expired","recording_permission_denied"]),Br=class{port;webhookSecret;onUpdate;server=null;sessions=new Map;sessionsByBotId=new Map;constructor(e,t,s){this.port=e,this.webhookSecret=t,this.onUpdate=s}async start(){this.server=yb((e,t)=>{this.handleRequest(e,t).catch(s=>{ne.error("HTTP handler error",{error:String(s)}),t.writeHead(500,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Internal server error"}))})}),await new Promise(e=>{this.server.listen(this.port,"127.0.0.1",()=>e())}),ne.info("Meeting monitor started",{port:this.port}),this.webhookSecret||ne.error("Webhook verification disabled \u2014 RECALL_WEBHOOK_SECRET not set. All webhook requests will be rejected.")}stop(){for(let e of this.sessions.values())e.pollTimer&&(clearInterval(e.pollTimer),e.pollTimer=null);this.server&&(this.server.close(),this.server=null),ne.info("Meeting monitor stopped")}async handleRequest(e,t){let s=new URL(e.url??"/",`http://127.0.0.1:${this.port}`);if(e.method==="POST"&&s.pathname==="/meetings/start"){let i=await this.readBody(e),o=JSON.parse(i),a=this.createSession(o);t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({sessionId:a.id}));return}let r=s.pathname.match(/^\/meetings\/([a-f0-9-]+)\/stop$/);if(e.method==="POST"&&r){let i=r[1],o=this.sessions.get(i);if(!o){t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Session not found"}));return}o.pollTimer&&(clearInterval(o.pollTimer),o.pollTimer=null),o.status="ended",o.endedAt=Date.now(),t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({status:"stopped"}));return}if(e.method==="POST"&&s.pathname.startsWith("/webhook/transcript")){if(!this.webhookSecret){t.writeHead(403,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Webhook verification not configured"}));return}if(s.pathname!==`/webhook/transcript/${this.webhookSecret}`){t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Not found"}));return}let i=await this.readBody(e);this.handleTranscriptWebhook(i),t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({ok:!0}));return}if(e.method==="GET"&&s.pathname==="/meetings"){let i=[];for(let o of this.sessions.values())i.push({id:o.id,botId:o.botId,botName:o.botName,meetingUrl:o.meetingUrl,status:o.status,pollCount:o.pollCount,lastSegmentIndex:o.lastSegmentIndex,pendingSegments:o.pendingSegments.length});t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify(i));return}t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Not found"}))}handleTranscriptWebhook(e){try{let t=JSON.parse(e),s=t.event,r=t.data?.bot?.id;if(!r){ne.warn("Webhook missing bot ID",{event:s});return}let i=this.sessionsByBotId.get(r);if(!i){ne.warn("Webhook for unknown bot",{botId:r,event:s});return}let o=this.sessions.get(i);if(!o||o.status!=="monitoring")return;let a=t.data?.data;if(!a)return;let l=a.participant?.id??0,c=a.participant?.name??"Unknown",d=Array.isArray(a.words)?a.words.map(u=>u.text).join(" "):"";if(!d)return;o.idlePollCount=0,s==="transcript.partial_data"?o.activePartials.set(l,{speaker:c,text:d}):s==="transcript.data"&&(o.pendingSegments.push({speaker:c,text:d}),o.activePartials.delete(l),o.lastSegmentIndex++),ne.debug("Webhook transcript",{sessionId:i,botId:r,event:s,speaker:c,wordCount:d.split(" ").length})}catch(t){ne.error("Webhook parse error",{error:String(t)})}}createSession(e){let t=wb(),s={id:t,botId:e.botId,botName:e.botName,meetingUrl:e.meetingUrl,apiKey:e.apiKey,region:e.region,context:e.context,lastSegmentIndex:0,pendingSegments:[],activePartials:new Map,lastDispatchTime:Date.now(),idlePollCount:0,pollTimer:null,pollCount:0,status:"monitoring",endedAt:null};return this.sessions.set(t,s),this.sessionsByBotId.set(e.botId,t),s.pollTimer=setInterval(()=>{this.pollSession(t).catch(r=>{ne.error("Poll session error",{sessionId:t,botId:s.botId,error:String(r)})})},Sb),ne.info("Meeting session created",{sessionId:t,botId:e.botId,botName:e.botName,meetingUrl:e.meetingUrl,agentId:e.context.agentId}),s}async pollSession(e){let t=this.sessions.get(e);if(!t||t.status!=="monitoring")return;t.pollCount++;let s=t.pendingSegments.length>0||t.activePartials.size>0;(Date.now()-t.lastDispatchTime>=bb&&s||t.idlePollCount>=_b&&s)&&this.dispatchBatch(t),t.pollCount%3===0&&await this.checkBotStatus(t)}async checkBotStatus(e){try{let t=`https://${e.region}.recall.ai/api/v1/bot/${e.botId}/`,s=await fetch(t,{headers:{Authorization:`Token ${e.apiKey}`},signal:AbortSignal.timeout(15e3)});if(!s.ok){ne.warn("Bot status check failed",{sessionId:e.id,botId:e.botId,status:s.status});return}let r=await s.json(),i=r.status_changes;if(Array.isArray(i)&&i.length>0){let o=i[i.length-1].code;if(kb.has(o)){ne.info("Meeting reached terminal status",{sessionId:e.id,botId:e.botId,statusCode:o});let a=await this.fetchFullTranscript(e,r);this.dispatchEnd(e,a);return}}}catch(t){ne.error("Bot status check error",{sessionId:e.id,botId:e.botId,error:String(t)})}}async fetchFullTranscript(e,t){let i=(Array.isArray(t.recordings)?t.recordings:[])[0]?.media_shortcuts?.transcript?.data?.download_url;if(!i)return ne.warn("No transcript download URL available",{sessionId:e.id,botId:e.botId}),[...e.pendingSegments];try{let o=await fetch(i,{signal:AbortSignal.timeout(3e4)});if(!o.ok)return ne.warn("Transcript download failed",{sessionId:e.id,status:o.status}),[...e.pendingSegments];let a=await o.json();return(Array.isArray(a)?a:Array.isArray(a.results)?a.results:[]).map(c=>({speaker:c.speaker??c.participant?.name??"Unknown",text:Array.isArray(c.words)?c.words.map(d=>d.text).join(" "):typeof c.text=="string"?c.text:""}))}catch(o){return ne.error("Transcript download error",{sessionId:e.id,error:String(o)}),[...e.pendingSegments]}}dispatchBatch(e){let t=e.pendingSegments.splice(0,e.pendingSegments.length);for(let r of e.activePartials.values())t.push({speaker:r.speaker,text:`${r.text} [still speaking...]`});if(e.activePartials.clear(),e.lastDispatchTime=Date.now(),t.length===0)return;let s={id:`meeting:${e.botId}:${Date.now()}`,text:[`[Meeting transcript update \u2014 ${e.botName}]`,`Bot ID: ${e.botId}`,"","New transcript:",...t.map(r=>`[${r.speaker}]: ${r.text}`),"","---",`You are participating in this meeting. Use recall_send_chat with bot_id "${e.botId}" if you have relevant input. Otherwise respond "No response needed."`].join(`
354
+ `:"",`Stderr (last ${va} lines):`,"```",a||"(empty)","```"].filter(Boolean).join(`
355
+ `)})().then(a=>{let l={id:`ct:${e.id}:done:${Date.now()}`,text:a,source:{kind:e.context.channelKind||"internal",id:e.context.channelId,label:e.context.channelLabel,adapterId:e.context.adapterId},sender:"system",threadId:e.context.threadId,timestamp:new Date,meta:{slackTs:e.context.slackTs,slackThreadTs:e.context.slackThreadTs,codeTaskId:e.id}};X.info("Code task completed, dispatching notification",{id:e.id,status:e.status,exitCode:e.exitCode,costUsd:e.costUsd,numTurns:e.numTurns,durationSec:i,agentId:e.context.agentId,hasEscalation:!!e.escalation}),this.onComplete(l),this.options?.knowledgeExtractor&&e.status==="completed"&&t&&this.options.knowledgeExtractor.extract(e.context.agentId,t).then(c=>{c>0&&X.info(`Extracted ${c} code insights from task ${e.id}`)}).catch(c=>{X.warn(`Knowledge extraction failed for task ${e.id}: ${c}`)})}).catch(a=>{X.error("Failed to fire completion notification",{id:e.id,error:String(a)})})}async taskStatus(e){let t=this.tasks.get(e);if(!t)return null;let s="";try{s=(await Pr(t.stderrPath,"utf-8")).split(`
356
+ `).slice(-va).join(`
357
+ `).trim()}catch{}return{id:t.id,status:t.status,exitCode:t.exitCode,startedAt:t.startedAt,completedAt:t.completedAt,cwd:t.cwd,model:t.model,costUsd:t.costUsd,numTurns:t.numTurns,sessionId:t.sessionId,escalation:t.escalation,parentTaskId:t.parentTaskId,stderrTail:s}}listTasks(e){let t=[];for(let s of this.tasks.values())e&&s.context.agentId!==e||t.push({id:s.id,status:s.status,exitCode:s.exitCode,startedAt:s.startedAt,completedAt:s.completedAt,costUsd:s.costUsd,numTurns:s.numTurns,cwd:s.cwd,prompt:s.prompt});return t}async sweep(e){let t=Date.now()-e,s=0,r=0,i=[];for(let[o,a]of this.tasks)if(!(a.status==="running"||!a.completedAt||new Date(a.completedAt).getTime()>t)){for(let c of[a.metaPath,a.stdoutPath,a.stderrPath])try{let d=await wb(c);r+=d.size,await Sb(c)}catch(d){d.code!=="ENOENT"&&i.push(`Failed to delete ${c}: ${String(d)}`)}this.tasks.delete(o),s++}return{component:"code-task-manager",pruned:s,retried:0,bytesFreed:r,errors:i}}async writeMeta(e){try{await gb(e.metaPath,JSON.stringify(e,null,2),"utf-8")}catch(t){X.error("Failed to write task metadata",{id:e.id,error:String(t)})}}isProcessAlive(e){try{return process.kill(e,0),!0}catch{return!1}}pollOrphan(e,t){let s=setInterval(()=>{if(!this.isProcessAlive(t)){clearInterval(s),this.orphanPollers.delete(e);let r=this.tasks.get(e);r&&r.status==="running"&&(r.status="orphaned",r.completedAt=new Date().toISOString(),this.writeMeta(r).then(()=>this.fireCompletion(r)))}},5e3);this.orphanPollers.set(e,s)}killProcess(e,t){try{process.kill(e,t)}catch(s){s.code!=="ESRCH"&&X.warn("Failed to send signal to process",{pid:e,signal:t,error:String(s)})}}async isFileRecentlyModified(e,t){try{let s=await bb(e,"r"),r=await s.stat();return await s.close(),Date.now()-r.mtimeMs<t}catch{return!1}}sleep(e){return new Promise(t=>setTimeout(t,e))}readBody(e){return new Promise((t,s)=>{let r="";e.on("data",i=>{r+=i.toString()}),e.on("end",()=>t(r)),e.on("error",s)})}};O();import{createServer as kb}from"node:http";import{randomUUID as vb}from"node:crypto";var ne=T("meeting-monitor"),Tb=1e4,Ib=15e3,Ab=2,Cb=new Set(["done","fatal","call_ended","media_expired","recording_permission_denied"]),Rr=class{port;webhookSecret;onUpdate;server=null;sessions=new Map;sessionsByBotId=new Map;constructor(e,t,s){this.port=e,this.webhookSecret=t,this.onUpdate=s}async start(){this.server=kb((e,t)=>{this.handleRequest(e,t).catch(s=>{ne.error("HTTP handler error",{error:String(s)}),t.writeHead(500,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Internal server error"}))})}),await new Promise(e=>{this.server.listen(this.port,"127.0.0.1",()=>e())}),ne.info("Meeting monitor started",{port:this.port}),this.webhookSecret||ne.error("Webhook verification disabled \u2014 RECALL_WEBHOOK_SECRET not set. All webhook requests will be rejected.")}stop(){for(let e of this.sessions.values())e.pollTimer&&(clearInterval(e.pollTimer),e.pollTimer=null);this.server&&(this.server.close(),this.server=null),ne.info("Meeting monitor stopped")}async handleRequest(e,t){let s=new URL(e.url??"/",`http://127.0.0.1:${this.port}`);if(e.method==="POST"&&s.pathname==="/meetings/start"){let i=await this.readBody(e),o=JSON.parse(i),a=this.createSession(o);t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({sessionId:a.id}));return}let r=s.pathname.match(/^\/meetings\/([a-f0-9-]+)\/stop$/);if(e.method==="POST"&&r){let i=r[1],o=this.sessions.get(i);if(!o){t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Session not found"}));return}o.pollTimer&&(clearInterval(o.pollTimer),o.pollTimer=null),o.status="ended",o.endedAt=Date.now(),t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({status:"stopped"}));return}if(e.method==="POST"&&s.pathname.startsWith("/webhook/transcript")){if(!this.webhookSecret){t.writeHead(403,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Webhook verification not configured"}));return}if(s.pathname!==`/webhook/transcript/${this.webhookSecret}`){t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Not found"}));return}let i=await this.readBody(e);this.handleTranscriptWebhook(i),t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({ok:!0}));return}if(e.method==="GET"&&s.pathname==="/meetings"){let i=[];for(let o of this.sessions.values())i.push({id:o.id,botId:o.botId,botName:o.botName,meetingUrl:o.meetingUrl,status:o.status,pollCount:o.pollCount,lastSegmentIndex:o.lastSegmentIndex,pendingSegments:o.pendingSegments.length});t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify(i));return}t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Not found"}))}handleTranscriptWebhook(e){try{let t=JSON.parse(e),s=t.event,r=t.data?.bot?.id;if(!r){ne.warn("Webhook missing bot ID",{event:s});return}let i=this.sessionsByBotId.get(r);if(!i){ne.warn("Webhook for unknown bot",{botId:r,event:s});return}let o=this.sessions.get(i);if(!o||o.status!=="monitoring")return;let a=t.data?.data;if(!a)return;let l=a.participant?.id??0,c=a.participant?.name??"Unknown",d=Array.isArray(a.words)?a.words.map(u=>u.text).join(" "):"";if(!d)return;o.idlePollCount=0,s==="transcript.partial_data"?o.activePartials.set(l,{speaker:c,text:d}):s==="transcript.data"&&(o.pendingSegments.push({speaker:c,text:d}),o.activePartials.delete(l),o.lastSegmentIndex++),ne.debug("Webhook transcript",{sessionId:i,botId:r,event:s,speaker:c,wordCount:d.split(" ").length})}catch(t){ne.error("Webhook parse error",{error:String(t)})}}createSession(e){let t=vb(),s={id:t,botId:e.botId,botName:e.botName,meetingUrl:e.meetingUrl,apiKey:e.apiKey,region:e.region,context:e.context,lastSegmentIndex:0,pendingSegments:[],activePartials:new Map,lastDispatchTime:Date.now(),idlePollCount:0,pollTimer:null,pollCount:0,status:"monitoring",endedAt:null};return this.sessions.set(t,s),this.sessionsByBotId.set(e.botId,t),s.pollTimer=setInterval(()=>{this.pollSession(t).catch(r=>{ne.error("Poll session error",{sessionId:t,botId:s.botId,error:String(r)})})},Tb),ne.info("Meeting session created",{sessionId:t,botId:e.botId,botName:e.botName,meetingUrl:e.meetingUrl,agentId:e.context.agentId}),s}async pollSession(e){let t=this.sessions.get(e);if(!t||t.status!=="monitoring")return;t.pollCount++;let s=t.pendingSegments.length>0||t.activePartials.size>0;(Date.now()-t.lastDispatchTime>=Ib&&s||t.idlePollCount>=Ab&&s)&&this.dispatchBatch(t),t.pollCount%3===0&&await this.checkBotStatus(t)}async checkBotStatus(e){try{let t=`https://${e.region}.recall.ai/api/v1/bot/${e.botId}/`,s=await fetch(t,{headers:{Authorization:`Token ${e.apiKey}`},signal:AbortSignal.timeout(15e3)});if(!s.ok){ne.warn("Bot status check failed",{sessionId:e.id,botId:e.botId,status:s.status});return}let r=await s.json(),i=r.status_changes;if(Array.isArray(i)&&i.length>0){let o=i[i.length-1].code;if(Cb.has(o)){ne.info("Meeting reached terminal status",{sessionId:e.id,botId:e.botId,statusCode:o});let a=await this.fetchFullTranscript(e,r);this.dispatchEnd(e,a);return}}}catch(t){ne.error("Bot status check error",{sessionId:e.id,botId:e.botId,error:String(t)})}}async fetchFullTranscript(e,t){let i=(Array.isArray(t.recordings)?t.recordings:[])[0]?.media_shortcuts?.transcript?.data?.download_url;if(!i)return ne.warn("No transcript download URL available",{sessionId:e.id,botId:e.botId}),[...e.pendingSegments];try{let o=await fetch(i,{signal:AbortSignal.timeout(3e4)});if(!o.ok)return ne.warn("Transcript download failed",{sessionId:e.id,status:o.status}),[...e.pendingSegments];let a=await o.json();return(Array.isArray(a)?a:Array.isArray(a.results)?a.results:[]).map(c=>({speaker:c.speaker??c.participant?.name??"Unknown",text:Array.isArray(c.words)?c.words.map(d=>d.text).join(" "):typeof c.text=="string"?c.text:""}))}catch(o){return ne.error("Transcript download error",{sessionId:e.id,error:String(o)}),[...e.pendingSegments]}}dispatchBatch(e){let t=e.pendingSegments.splice(0,e.pendingSegments.length);for(let r of e.activePartials.values())t.push({speaker:r.speaker,text:`${r.text} [still speaking...]`});if(e.activePartials.clear(),e.lastDispatchTime=Date.now(),t.length===0)return;let s={id:`meeting:${e.botId}:${Date.now()}`,text:[`[Meeting transcript update \u2014 ${e.botName}]`,`Bot ID: ${e.botId}`,"","New transcript:",...t.map(r=>`[${r.speaker}]: ${r.text}`),"","---",`You are participating in this meeting. Use recall_send_chat with bot_id "${e.botId}" if you have relevant input. Otherwise respond "No response needed."`].join(`
358
358
  `),source:{kind:e.context.channelKind||"internal",id:e.context.channelId,label:e.context.channelLabel,adapterId:e.context.adapterId},sender:"system",threadId:e.context.threadId,timestamp:new Date,meta:{slackTs:e.context.slackTs,slackThreadTs:e.context.slackThreadTs,meetingBotId:e.botId}};ne.info("Dispatching transcript batch",{sessionId:e.id,botId:e.botId,segmentCount:t.length}),this.onUpdate(s)}dispatchEnd(e,t){let s={id:`meeting:${e.botId}:${Date.now()}`,text:[`[Meeting ended \u2014 ${e.botName}]`,`Bot ID: ${e.botId}`,"","Full transcript:",...t.map(r=>`[${r.speaker}]: ${r.text}`),"","---","Meeting has ended. Produce a summary: key decisions made, action items with owners, and open questions."].join(`
359
- `),source:{kind:e.context.channelKind||"internal",id:e.context.channelId,label:e.context.channelLabel,adapterId:e.context.adapterId},sender:"system",threadId:e.context.threadId,timestamp:new Date,meta:{slackTs:e.context.slackTs,slackThreadTs:e.context.slackThreadTs,meetingBotId:e.botId}};ne.info("Dispatching meeting end",{sessionId:e.id,botId:e.botId,totalSegments:t.length}),this.onUpdate(s),e.pollTimer&&(clearInterval(e.pollTimer),e.pollTimer=null),e.status="ended",e.endedAt=Date.now()}sweep(e){let t=Date.now()-e,s=0;for(let[r,i]of this.sessions)i.endedAt!==null&&(i.endedAt>t||(i.pollTimer&&(clearInterval(i.pollTimer),i.pollTimer=null),this.sessionsByBotId.delete(i.botId),this.sessions.delete(r),s++));return{component:"meeting-monitor",pruned:s,retried:0,bytesFreed:0,errors:[]}}readBody(e){return new Promise((t,s)=>{let r="";e.on("data",i=>{r+=i.toString()}),e.on("end",()=>t(r)),e.on("error",s)})}};O();var Ur=I("retry-queue"),qr=class{entries=[];config;constructor(e){this.config=e}enqueue(e,t){this.entries.push({result:e,adapter:t,attempts:0,nextRetryAt:Date.now()+this.config.baseDelayMs,createdAt:Date.now()}),Ur.info("Delivery queued for retry",{agentId:e.agentId,adapterId:t.id,queueSize:this.entries.length})}async processRetries(){let e=Date.now(),t={pending:0,retried:0,dropped:0,errors:[]},s=[];for(let r of this.entries){if(r.nextRetryAt>e){s.push(r),t.pending++;continue}r.attempts++;try{await r.adapter.deliver(r.result),t.retried++,Ur.info("Retry delivery succeeded",{agentId:r.result.agentId,adapterId:r.adapter.id,attempt:r.attempts})}catch(i){if(r.attempts>=this.config.maxAttempts){t.dropped++;let o=`Dropped after ${r.attempts} attempts: ${String(i)}`;t.errors.push(o),Ur.error("Retry delivery exhausted",{agentId:r.result.agentId,adapterId:r.adapter.id,attempts:r.attempts,error:String(i)})}else r.nextRetryAt=e+this.config.baseDelayMs*Math.pow(2,r.attempts),s.push(r),t.pending++,Ur.warn("Retry delivery failed, will retry",{agentId:r.result.agentId,adapterId:r.adapter.id,attempt:r.attempts,nextRetryAt:new Date(r.nextRetryAt).toISOString(),error:String(i)})}}return this.entries=s,t}get size(){return this.entries.length}};O();var Fe=I("sweeper"),jr=class n{config;targets;taskClient;taskId;timer=null;sweepCount=0;gatewayCycleCounter=0;memoryCycleCounter=0;memorySweepEvery;lastDreamAt=0;static GATEWAY_SWEEP_EVERY=12;constructor(e,t,s){this.config=e,this.targets=t,this.taskClient=s;let r=e.memorySweepIntervalHours??6;this.memorySweepEvery=Math.round(r*36e5/e.intervalMs)}start(){this.timer||(this.timer=setInterval(()=>{this.sweep().catch(e=>{Fe.error("Sweep cycle failed",{error:String(e)})})},this.config.intervalMs),Fe.info("Sweeper started",{intervalMs:this.config.intervalMs}))}stop(){this.timer&&(clearInterval(this.timer),this.timer=null),Fe.info("Sweeper stopped")}async sweep(){let e=Date.now();this.sweepCount++,this.gatewayCycleCounter++;let t=[];try{t.push(this.targets.dispatcher.sweep(this.config.threadTtlMs))}catch(d){t.push({component:"dispatcher",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}for(let d of this.targets.slackAdapters)try{t.push(d.sweep(this.config.threadTtlMs))}catch(u){t.push({component:`slack-adapter:${d.id}`,pruned:0,retried:0,bytesFreed:0,errors:[String(u)]})}if(this.targets.taskLedger)try{t.push(this.targets.taskLedger.sweep(this.config.threadTtlMs))}catch(d){t.push({component:"task-ledger",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}try{t.push(await this.targets.bgTaskManager.sweep(this.config.taskFileTtlMs))}catch(d){t.push({component:"bg-task-manager",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}if(this.targets.codeTaskManager){try{t.push(await this.targets.codeTaskManager.sweep(this.config.taskFileTtlMs))}catch(d){t.push({component:"code-task-manager",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}try{let{reaped:d,spared:u}=await this.targets.codeTaskManager.reapStale();(d>0||u>0)&&t.push({component:"code-task-reaper",pruned:d,retried:0,bytesFreed:0,errors:u>0?[`${u} task(s) spared \u2014 still active past TTL`]:[]})}catch(d){t.push({component:"code-task-reaper",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}}if(this.targets.meetingMonitor)try{t.push(this.targets.meetingMonitor.sweep(this.config.meetingSessionTtlMs))}catch(d){t.push({component:"meeting-monitor",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}if(this.gatewayCycleCounter>=n.GATEWAY_SWEEP_EVERY){this.gatewayCycleCounter=0;for(let d of this.targets.slackGateways)try{t.push(d.sweep())}catch(u){t.push({component:"slack-gateway",pruned:0,retried:0,bytesFreed:0,errors:[String(u)]})}}try{t.push(this.targets.agentManager.sweep())}catch(d){t.push({component:"agent-manager",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}if(this.targets.retryQueue)try{let d=await this.targets.retryQueue.processRetries();t.push({component:"retry-queue",pruned:d.dropped,retried:d.retried,bytesFreed:0,errors:d.errors})}catch(d){t.push({component:"retry-queue",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}if(this.targets.memoryLifecycle&&(this.memoryCycleCounter++,this.memoryCycleCounter>=this.memorySweepEvery)){this.memoryCycleCounter=0;try{t.push(await this.targets.memoryLifecycle.sweep())}catch(d){t.push({component:"memory-lifecycle",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}}if(this.targets.memoryLifecycle&&this.config.dreamConfig?.enabled){let d=this.config.dreamConfig,u=d.cooldownMinutes*60*1e3,h=Date.now(),p=h-this.lastDreamAt>u,g=this.memoryCycleCounter===0,f=!1;if(p&&!g){let y=d.idleThresholdMinutes*60*1e3,w=this.targets.agentManager.getAllStates();f=w.length>0&&w.every(S=>S.status==="idle"&&h-S.lastActivity.getTime()>y)}if(p&&(g||f)){let y=g?"post-sweep":"idle";Fe.info("autoDream triggered",{trigger:y});try{let w=await this.targets.memoryLifecycle.dream();this.lastDreamAt=Date.now(),(w.merged+w.contradictions+w.promoted>0||w.errors.length>0)&&t.push({component:"autodream",pruned:w.merged+w.contradictions,retried:w.promoted,bytesFreed:0,errors:w.errors})}catch(w){t.push({component:"autodream",pruned:0,retried:0,bytesFreed:0,errors:[String(w)]})}}}let s=Date.now()-e,r=t.reduce((d,u)=>d+u.pruned,0),i=t.reduce((d,u)=>d+u.retried,0),o=t.reduce((d,u)=>d+u.bytesFreed,0),a=t.flatMap(d=>d.errors),l=r===0&&i===0&&o===0&&a.length===0;return(l?Fe.debug.bind(Fe):Fe.info.bind(Fe))("Sweep cycle complete",{cycle:this.sweepCount,durationMs:s,pruned:r,retried:i,bytesFreed:o,errors:a.length,components:t.map(d=>`${d.component}:${d.pruned}p/${d.retried}r`).join(" ")}),this.taskClient?.isConfigured&&!l&&await this.reportToTaskLedger(s,r,i,o,a),t}async reportToTaskLedger(e,t,s,r,i){try{if(!this.taskId){let a=await this.taskClient.createTask({name:"[Sweeper] Periodic maintenance",type:"AGENT",description:"Long-running system health task. Each comment is a sweep cycle report."});a&&(this.taskId=a._id)}if(!this.taskId)return;let o=[`**Sweep #${this.sweepCount}** (${e}ms)`,`Pruned: ${t} | Retried: ${s} | Freed: ${this.formatBytes(r)}`,i.length>0?`Errors: ${i.join(", ")}`:null].filter(Boolean).join(`
360
- `);await this.taskClient.addComment(this.taskId,o),i.length>0&&await this.taskClient.updateTask(this.taskId,{state:"NEEDS_ATTENTION"})}catch(o){Fe.warn("Failed to report to task ledger",{error:String(o)})}}formatBytes(e){if(e===0)return"0 B";let t=["B","KB","MB","GB"],s=Math.floor(Math.log(e)/Math.log(1024));return`${(e/Math.pow(1024,s)).toFixed(1)} ${t[s]}`}};js();O();import{MongoClient as vb}from"mongodb";var Tb=I("memory-store"),Fr=class{mongoUri;dbName;client;db;collection;constructor(e,t){this.mongoUri=e,this.dbName=t,this.client=new vb(e)}async init(){await this.client.connect(),this.db=this.client.db(this.dbName),this.collection=this.db.collection("agent_memory"),await this.collection.createIndex({agentId:1,tier:1}),await this.collection.createIndex({agentId:1,topic:1}),await this.collection.createIndex({agentId:1,updatedAt:1}),await this.collection.createIndex({agentId:1,type:1}),await this.collection.createIndex({agentId:1,purged:1,purgedAt:1}),Tb.info("Memory store initialized",{db:this.dbName})}getCollection(){return this.collection}async save(e,t,s,r,i){let o=new Date,a={agentId:e,content:t.content,type:t.type,topic:t.topic,importance:t.importance,tier:"hot",createdAt:o,updatedAt:o,lastAccessedAt:o,accessCount:0,sourceChannel:r,sourceThread:i,pinned:!1,summarized:!1,qdrantPointId:s},l=await this.collection.insertOne(a);return a._id=l.insertedId,a}async getById(e){return this.collection.findOne({_id:e,purged:{$ne:!0}})}async update(e,t,s,r){let i={content:t,updatedAt:new Date};return s&&(i.importance=s),r&&(i.qdrantPointId=r),await this.collection.findOneAndUpdate({_id:e},{$set:i},{returnDocument:"after"})}async pin(e){return(await this.collection.updateOne({_id:e},{$set:{pinned:!0,tier:"hot"}})).modifiedCount>0}async unpin(e){return(await this.collection.updateOne({_id:e},{$set:{pinned:!1}})).modifiedCount>0}async delete(e){return this.collection.findOneAndDelete({_id:e})}async touchAccess(e){e.length!==0&&await this.collection.updateMany({_id:{$in:e}},{$set:{lastAccessedAt:new Date},$inc:{accessCount:1}})}async getHotTier(e){let t={critical:4,high:3,medium:2,low:1};return(await this.collection.find({agentId:e,tier:"hot",purged:{$ne:!0},supersededBy:{$exists:!1}}).toArray()).sort((r,i)=>{if(r.pinned!==i.pinned)return r.pinned?-1:1;let o=(t[i.importance]??0)-(t[r.importance]??0);return o!==0?o:i.updatedAt.getTime()-r.updatedAt.getTime()})}async getHotTierWithStats(e){let t=await this.getHotTier(e),s=Date.now();return t.map(r=>({...r,ageDays:Math.floor((s-r.createdAt.getTime())/(1e3*60*60*24)),daysSinceAccess:Math.floor((s-r.lastAccessedAt.getTime())/(1e3*60*60*24))}))}async getByIds(e){return e.length===0?[]:this.collection.find({_id:{$in:e},purged:{$ne:!0}}).toArray()}async countNonHot(e){return this.collection.countDocuments({agentId:e,tier:{$ne:"hot"},purged:{$ne:!0}})}async getAllNonPinned(e){return this.collection.find({agentId:e,pinned:!1,purged:{$ne:!0},supersededBy:{$exists:!1}}).toArray()}async getByTiersForAgent(e,t){return this.collection.find({agentId:e,tier:{$in:t},purged:{$ne:!0},summarized:!1,supersededBy:{$exists:!1}}).toArray()}async getFactsAndDecisionsByTopic(e){let t=await this.collection.find({agentId:e,type:{$in:["fact","decision"]},purged:{$ne:!0},supersededBy:{$exists:!1},needsReview:{$ne:!0}}).toArray(),s=new Map;for(let r of t){let i=s.get(r.topic)??[];i.push(r),s.set(r.topic,i)}return s}async getInteractionsByTopic(e){let t=await this.collection.find({agentId:e,type:"interaction",tier:{$in:["hot","warm"]},purged:{$ne:!0},supersededBy:{$exists:!1},summarized:!1}).toArray(),s=new Map;for(let r of t){let i=s.get(r.topic)??[];i.push(r),s.set(r.topic,i)}return s}async markSuperseded(e,t){e.length!==0&&await this.collection.updateMany({_id:{$in:e}},{$set:{supersededBy:t,tier:"cold"}})}async flagForReview(e){e.length!==0&&await this.collection.updateMany({_id:{$in:e}},{$set:{needsReview:!0}})}async getAllForAgent(e){return this.collection.find({agentId:e}).toArray()}async setTier(e,t){await this.collection.updateOne({_id:e},{$set:{tier:t}})}async setTierBulk(e,t){e.length!==0&&await this.collection.updateMany({_id:{$in:e}},{$set:{tier:t}})}async getColdByTopic(e,t){return this.collection.find({agentId:e,tier:"cold",topic:t,summarized:!1,purged:{$ne:!0}}).sort({createdAt:1}).toArray()}async getColdTopics(e){return await this.collection.distinct("topic",{agentId:e,tier:"cold",summarized:!1,purged:{$ne:!0}})}async markSummarized(e,t){e.length!==0&&await this.collection.updateMany({_id:{$in:e}},{$set:{summarized:!0,summaryGroup:t,summarizedAt:new Date}})}async deleteSummarizedOlderThan(e,t){return(await this.collection.deleteMany({agentId:e,summarized:!0,summarizedAt:{$lt:t}})).deletedCount}async purge(e,t){if(!(t.topic!==void 0||t.type!==void 0||t.importance!==void 0||t.tier!==void 0||t.olderThan!==void 0))throw new Error("purge() requires at least one filter");let r={agentId:e,pinned:!1,purged:{$ne:!0}};return t.topic!==void 0&&(r.topic=t.topic),t.type!==void 0&&(r.type=t.type),t.importance!==void 0&&(r.importance=t.importance),t.tier!==void 0&&(r.tier=t.tier),t.olderThan!==void 0&&(r.updatedAt={$lt:t.olderThan}),(await this.collection.updateMany(r,{$set:{purged:!0,purgedAt:new Date}})).modifiedCount}async deletePurgedOlderThan(e,t){let s=await this.collection.find({agentId:e,purged:!0,purgedAt:{$lt:t}}).toArray();if(s.length===0)return[];let r=s.map(i=>i._id);return await this.collection.deleteMany({_id:{$in:r}}),s}async getAgentIds(){return this.collection.distinct("agentId")}async close(){await this.client.close()}};O();wr();import{QdrantClient as Ib}from"@qdrant/js-client-rest";var Ab=I("memory-embedder"),_t="agent_memory",Kr=class{qdrantUrl;ollamaUrl;qdrant=null;collectionReady=!1;constructor(e=process.env.QDRANT_URL??"http://localhost:6333",t=process.env.OLLAMA_URL??"http://localhost:11434"){this.qdrantUrl=e,this.ollamaUrl=t}getClient(){return this.qdrant||(this.qdrant=new Ib({url:this.qdrantUrl})),this.qdrant}async embed(e){return qe(this.ollamaUrl,e)}async ensureCollection(){if(this.collectionReady)return;let e=this.getClient(),{collections:t}=await e.getCollections();if(!t.some(r=>r.name===_t)){let r=await this.embed("test");await e.createCollection(_t,{vectors:{size:r.length,distance:"Cosine"}}),Ab.info("Created Qdrant collection",{collection:_t,vectorSize:r.length})}this.collectionReady=!0}async upsert(e,t,s){await this.ensureCollection();let r=await this.embed(t);await this.getClient().upsert(_t,{points:[{id:e,vector:r,payload:s}]})}async remove(e){await this.ensureCollection(),await this.getClient().delete(_t,{points:[e]})}async search(e,t,s){await this.ensureCollection();let r=await this.embed(e),i=s?.limit??10,o=[{key:"agentId",match:{value:t}}];return s?.type&&o.push({key:"type",match:{value:s.type}}),s?.topic&&o.push({key:"topic",match:{value:s.topic}}),s?.tier&&o.push({key:"tier",match:{value:s.tier}}),s?.importance&&o.push({key:"importance",match:{value:s.importance}}),(await this.getClient().search(_t,{vector:r,limit:i,with_payload:!0,filter:{must:o}})).map(l=>({mongoId:l.payload?.mongoId,score:l.score}))}async findSimilar(e,t,s,r=10){return await this.ensureCollection(),(await this.getClient().query(_t,{query:{recommend:{positive:[e]}},filter:{must:[{key:"agentId",match:{value:t}}]},limit:r,with_payload:!0,score_threshold:s})).points.map(o=>({mongoId:o.payload?.mongoId,score:o.score??0,pointId:typeof o.id=="string"?o.id:String(o.id)}))}};O();import{ObjectId as Cb}from"mongodb";import{query as Gr}from"@anthropic-ai/claude-agent-sdk";var Nh={critical:1,high:.75,medium:.5,low:.25},Oh={decision:1,fact:.8,preference:.8,summary:.6,task:.5,interaction:.3};var xe=I("memory-lifecycle"),Hr=class{store;embedder;config;dreamConfig;constructor(e,t,s,r){this.store=e,this.embedder=t,this.config=s,this.dreamConfig=r}computeScore(e,t){let s=Nh[e.importance]??.5,r=Oh[e.type]??.5,i=Date.now()-e.updatedAt.getTime(),o=this.config.recencyHalfLifeDays*24*60*60*1e3,a=Math.exp(-.693*i/o),l=t>0?Math.min(e.accessCount/t,1):e.accessCount>0?1:0;return s*.4+a*.3+l*.2+r*.1}estimateTokens(e){return Math.ceil(e.length/4)}async sweep(){let e=Date.now(),t=0,s=0,r=0,i=0,o=0,a=[];try{let c=await this.store.getAgentIds();for(let d of c)try{let u=await this.sweepAgent(d);t+=u.promoted,s+=u.demoted,r+=u.summarized,i+=u.cleaned,o+=u.purged}catch(u){a.push(`${d}: ${u}`),xe.error("Memory lifecycle sweep failed for agent",{agentId:d,error:String(u)})}}catch(c){a.push(`global: ${c}`)}return t+s+r+i+o>0&&xe.info("Memory lifecycle sweep complete",{durationMs:Date.now()-e,promoted:t,demoted:s,summarized:r,cleaned:i,purged:o,errors:a.length}),{component:"memory-lifecycle",pruned:s+i+o,retried:t,bytesFreed:0,errors:a}}async sweepAgent(e){let t=0,s=0,r=await this.store.getAllNonPinned(e),i=0,o=0;if(r.length>0){let d=r.map(w=>w.accessCount).sort((w,S)=>w-S),u=d[Math.floor(d.length/2)]??0,h=r.map(w=>({record:w,score:this.computeScore(w,u)})),p=[];for(let{record:w,score:S}of h){let b;S>=this.config.hotThreshold?b="hot":S>=this.config.warmThreshold?b="warm":b="cold",b!==w.tier&&(p.push({id:w._id,newTier:b}),b==="hot"&&w.tier!=="hot"&&t++,b!=="hot"&&w.tier==="hot"&&s++)}for(let w of["hot","warm","cold"]){let S=p.filter(b=>b.newTier===w).map(b=>b.id);await this.store.setTierBulk(S,w)}let g=await this.store.getHotTier(e),f=0,y=[];for(let w of g){let S=this.estimateTokens(w.content);w.pinned||(f+=S,f>this.config.hotBudgetTokens&&y.push(w._id))}y.length>0&&(await this.store.setTierBulk(y,"warm"),s+=y.length);try{i=await this.summarizeCold(e)}catch(w){xe.warn("Cold summarization failed",{agentId:e,error:String(w)})}}let a=new Date(Date.now()-this.config.coldRetentionDays*24*60*60*1e3);o=await this.store.deleteSummarizedOlderThan(e,a);let l=new Date(Date.now()-this.config.purgeRetentionDays*24*60*60*1e3),c=0;try{let d=await this.store.deletePurgedOlderThan(e,l);if(c=d.length,d.length>0){let u=d.map(h=>h.qdrantPointId).filter(Boolean);for(let h of u)await this.embedder.remove(h);xe.info("Hard-deleted purged records",{agentId:e,count:d.length})}}catch(d){xe.warn("Purge hard-delete phase failed",{agentId:e,error:String(d)})}return{promoted:t,demoted:s,summarized:i,cleaned:o,purged:c}}async dream(){if(!this.dreamConfig?.enabled)return{merged:0,contradictions:0,promoted:0,flaggedForReview:0,errors:[]};let e=Date.now(),t=0,s=0,r=0,i=0,o=[];try{let l=await this.store.getAgentIds();for(let c of l)try{let d=await this.mergeDuplicates(c);t+=d.merged;let u=await this.detectContradictions(c);s+=u.resolved,i+=u.flagged;let h=await this.promotePatterns(c);r+=h.promoted}catch(d){o.push(`${c}: ${d}`),xe.error("autoDream failed for agent",{agentId:c,error:String(d)})}}catch(l){o.push(`global: ${l}`)}return t+s+r+i>0&&xe.info("autoDream complete",{durationMs:Date.now()-e,merged:t,contradictions:s,promoted:r,flaggedForReview:i,errors:o.length}),{merged:t,contradictions:s,promoted:r,flaggedForReview:i,errors:o}}async mergeDuplicates(e){let t=this.dreamConfig,s=await this.store.getByTiersForAgent(e,["hot","warm"]);if(s.length<2)return{merged:0};let r=new Set,i=0,o=0;for(let a of s){if(o>=t.maxClustersPerRun)break;if(r.has(a.qdrantPointId))continue;let c=(await this.embedder.findSimilar(a.qdrantPointId,e,t.similarityThreshold,10)).filter(v=>!r.has(v.pointId));if(c.length===0)continue;r.add(a.qdrantPointId);for(let v of c)r.add(v.pointId);let d=c.map(v=>new Cb(v.mongoId)),u=await this.store.getByIds(d),h=[a,...u],g=["Merge the following duplicate or overlapping memories into a single consolidated record.","Preserve all unique details. Discard exact duplicates. Be concise.","",h.map(v=>`- [${v.type}/${v.importance}] ${v.content}`).join(`
359
+ `),source:{kind:e.context.channelKind||"internal",id:e.context.channelId,label:e.context.channelLabel,adapterId:e.context.adapterId},sender:"system",threadId:e.context.threadId,timestamp:new Date,meta:{slackTs:e.context.slackTs,slackThreadTs:e.context.slackThreadTs,meetingBotId:e.botId}};ne.info("Dispatching meeting end",{sessionId:e.id,botId:e.botId,totalSegments:t.length}),this.onUpdate(s),e.pollTimer&&(clearInterval(e.pollTimer),e.pollTimer=null),e.status="ended",e.endedAt=Date.now()}sweep(e){let t=Date.now()-e,s=0;for(let[r,i]of this.sessions)i.endedAt!==null&&(i.endedAt>t||(i.pollTimer&&(clearInterval(i.pollTimer),i.pollTimer=null),this.sessionsByBotId.delete(i.botId),this.sessions.delete(r),s++));return{component:"meeting-monitor",pruned:s,retried:0,bytesFreed:0,errors:[]}}readBody(e){return new Promise((t,s)=>{let r="";e.on("data",i=>{r+=i.toString()}),e.on("end",()=>t(r)),e.on("error",s)})}};O();var Br=T("retry-queue"),Ur=class{entries=[];config;constructor(e){this.config=e}enqueue(e,t){this.entries.push({result:e,adapter:t,attempts:0,nextRetryAt:Date.now()+this.config.baseDelayMs,createdAt:Date.now()}),Br.info("Delivery queued for retry",{agentId:e.agentId,adapterId:t.id,queueSize:this.entries.length})}async processRetries(){let e=Date.now(),t={pending:0,retried:0,dropped:0,errors:[]},s=[];for(let r of this.entries){if(r.nextRetryAt>e){s.push(r),t.pending++;continue}r.attempts++;try{await r.adapter.deliver(r.result),t.retried++,Br.info("Retry delivery succeeded",{agentId:r.result.agentId,adapterId:r.adapter.id,attempt:r.attempts})}catch(i){if(r.attempts>=this.config.maxAttempts){t.dropped++;let o=`Dropped after ${r.attempts} attempts: ${String(i)}`;t.errors.push(o),Br.error("Retry delivery exhausted",{agentId:r.result.agentId,adapterId:r.adapter.id,attempts:r.attempts,error:String(i)})}else r.nextRetryAt=e+this.config.baseDelayMs*Math.pow(2,r.attempts),s.push(r),t.pending++,Br.warn("Retry delivery failed, will retry",{agentId:r.result.agentId,adapterId:r.adapter.id,attempt:r.attempts,nextRetryAt:new Date(r.nextRetryAt).toISOString(),error:String(i)})}}return this.entries=s,t}get size(){return this.entries.length}};O();var Fe=T("sweeper"),qr=class n{config;targets;taskClient;taskId;timer=null;sweepCount=0;gatewayCycleCounter=0;memoryCycleCounter=0;memorySweepEvery;lastDreamAt=0;static GATEWAY_SWEEP_EVERY=12;constructor(e,t,s){this.config=e,this.targets=t,this.taskClient=s;let r=e.memorySweepIntervalHours??6;this.memorySweepEvery=Math.round(r*36e5/e.intervalMs)}start(){this.timer||(this.timer=setInterval(()=>{this.sweep().catch(e=>{Fe.error("Sweep cycle failed",{error:String(e)})})},this.config.intervalMs),Fe.info("Sweeper started",{intervalMs:this.config.intervalMs}))}stop(){this.timer&&(clearInterval(this.timer),this.timer=null),Fe.info("Sweeper stopped")}async sweep(){let e=Date.now();this.sweepCount++,this.gatewayCycleCounter++;let t=[];try{t.push(this.targets.dispatcher.sweep(this.config.threadTtlMs))}catch(d){t.push({component:"dispatcher",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}for(let d of this.targets.slackAdapters)try{t.push(d.sweep(this.config.threadTtlMs))}catch(u){t.push({component:`slack-adapter:${d.id}`,pruned:0,retried:0,bytesFreed:0,errors:[String(u)]})}if(this.targets.taskLedger)try{t.push(this.targets.taskLedger.sweep(this.config.threadTtlMs))}catch(d){t.push({component:"task-ledger",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}try{t.push(await this.targets.bgTaskManager.sweep(this.config.taskFileTtlMs))}catch(d){t.push({component:"bg-task-manager",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}if(this.targets.codeTaskManager){try{t.push(await this.targets.codeTaskManager.sweep(this.config.taskFileTtlMs))}catch(d){t.push({component:"code-task-manager",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}try{let{reaped:d,spared:u}=await this.targets.codeTaskManager.reapStale();(d>0||u>0)&&t.push({component:"code-task-reaper",pruned:d,retried:0,bytesFreed:0,errors:u>0?[`${u} task(s) spared \u2014 still active past TTL`]:[]})}catch(d){t.push({component:"code-task-reaper",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}}if(this.targets.meetingMonitor)try{t.push(this.targets.meetingMonitor.sweep(this.config.meetingSessionTtlMs))}catch(d){t.push({component:"meeting-monitor",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}if(this.gatewayCycleCounter>=n.GATEWAY_SWEEP_EVERY){this.gatewayCycleCounter=0;for(let d of this.targets.slackGateways)try{t.push(d.sweep())}catch(u){t.push({component:"slack-gateway",pruned:0,retried:0,bytesFreed:0,errors:[String(u)]})}}try{t.push(this.targets.agentManager.sweep())}catch(d){t.push({component:"agent-manager",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}if(this.targets.retryQueue)try{let d=await this.targets.retryQueue.processRetries();t.push({component:"retry-queue",pruned:d.dropped,retried:d.retried,bytesFreed:0,errors:d.errors})}catch(d){t.push({component:"retry-queue",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}if(this.targets.memoryLifecycle&&(this.memoryCycleCounter++,this.memoryCycleCounter>=this.memorySweepEvery)){this.memoryCycleCounter=0;try{t.push(await this.targets.memoryLifecycle.sweep())}catch(d){t.push({component:"memory-lifecycle",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}}if(this.targets.memoryLifecycle&&this.config.dreamConfig?.enabled){let d=this.config.dreamConfig,u=d.cooldownMinutes*60*1e3,h=Date.now(),p=h-this.lastDreamAt>u,g=this.memoryCycleCounter===0,f=!1;if(p&&!g){let y=d.idleThresholdMinutes*60*1e3,w=this.targets.agentManager.getAllStates();f=w.length>0&&w.every(S=>S.status==="idle"&&h-S.lastActivity.getTime()>y)}if(p&&(g||f)){let y=g?"post-sweep":"idle";Fe.info("autoDream triggered",{trigger:y});try{let w=await this.targets.memoryLifecycle.dream();this.lastDreamAt=Date.now(),(w.merged+w.contradictions+w.promoted>0||w.errors.length>0)&&t.push({component:"autodream",pruned:w.merged+w.contradictions,retried:w.promoted,bytesFreed:0,errors:w.errors})}catch(w){t.push({component:"autodream",pruned:0,retried:0,bytesFreed:0,errors:[String(w)]})}}}let s=Date.now()-e,r=t.reduce((d,u)=>d+u.pruned,0),i=t.reduce((d,u)=>d+u.retried,0),o=t.reduce((d,u)=>d+u.bytesFreed,0),a=t.flatMap(d=>d.errors),l=r===0&&i===0&&o===0&&a.length===0;return(l?Fe.debug.bind(Fe):Fe.info.bind(Fe))("Sweep cycle complete",{cycle:this.sweepCount,durationMs:s,pruned:r,retried:i,bytesFreed:o,errors:a.length,components:t.map(d=>`${d.component}:${d.pruned}p/${d.retried}r`).join(" ")}),this.taskClient?.isConfigured&&!l&&await this.reportToTaskLedger(s,r,i,o,a),t}async reportToTaskLedger(e,t,s,r,i){try{if(!this.taskId){let a=await this.taskClient.createTask({name:"[Sweeper] Periodic maintenance",type:"AGENT",description:"Long-running system health task. Each comment is a sweep cycle report."});a&&(this.taskId=a._id)}if(!this.taskId)return;let o=[`**Sweep #${this.sweepCount}** (${e}ms)`,`Pruned: ${t} | Retried: ${s} | Freed: ${this.formatBytes(r)}`,i.length>0?`Errors: ${i.join(", ")}`:null].filter(Boolean).join(`
360
+ `);await this.taskClient.addComment(this.taskId,o),i.length>0&&await this.taskClient.updateTask(this.taskId,{state:"NEEDS_ATTENTION"})}catch(o){Fe.warn("Failed to report to task ledger",{error:String(o)})}}formatBytes(e){if(e===0)return"0 B";let t=["B","KB","MB","GB"],s=Math.floor(Math.log(e)/Math.log(1024));return`${(e/Math.pow(1024,s)).toFixed(1)} ${t[s]}`}};qs();O();import{MongoClient as Eb}from"mongodb";var Nb=T("memory-store"),jr=class{mongoUri;dbName;client;db;collection;constructor(e,t){this.mongoUri=e,this.dbName=t,this.client=new Eb(e)}async init(){await this.client.connect(),this.db=this.client.db(this.dbName),this.collection=this.db.collection("agent_memory"),await this.collection.createIndex({agentId:1,tier:1}),await this.collection.createIndex({agentId:1,topic:1}),await this.collection.createIndex({agentId:1,updatedAt:1}),await this.collection.createIndex({agentId:1,type:1}),await this.collection.createIndex({agentId:1,purged:1,purgedAt:1}),Nb.info("Memory store initialized",{db:this.dbName})}getCollection(){return this.collection}async save(e,t,s,r,i){let o=new Date,a={agentId:e,content:t.content,type:t.type,topic:t.topic,importance:t.importance,tier:"hot",createdAt:o,updatedAt:o,lastAccessedAt:o,accessCount:0,sourceChannel:r,sourceThread:i,pinned:!1,summarized:!1,qdrantPointId:s},l=await this.collection.insertOne(a);return a._id=l.insertedId,a}async getById(e){return this.collection.findOne({_id:e,purged:{$ne:!0}})}async update(e,t,s,r){let i={content:t,updatedAt:new Date};return s&&(i.importance=s),r&&(i.qdrantPointId=r),await this.collection.findOneAndUpdate({_id:e},{$set:i},{returnDocument:"after"})}async pin(e){return(await this.collection.updateOne({_id:e},{$set:{pinned:!0,tier:"hot"}})).modifiedCount>0}async unpin(e){return(await this.collection.updateOne({_id:e},{$set:{pinned:!1}})).modifiedCount>0}async delete(e){return this.collection.findOneAndDelete({_id:e})}async touchAccess(e){e.length!==0&&await this.collection.updateMany({_id:{$in:e}},{$set:{lastAccessedAt:new Date},$inc:{accessCount:1}})}async getHotTier(e){let t={critical:4,high:3,medium:2,low:1};return(await this.collection.find({agentId:e,tier:"hot",purged:{$ne:!0},supersededBy:{$exists:!1}}).toArray()).sort((r,i)=>{if(r.pinned!==i.pinned)return r.pinned?-1:1;let o=(t[i.importance]??0)-(t[r.importance]??0);return o!==0?o:i.updatedAt.getTime()-r.updatedAt.getTime()})}async getHotTierWithStats(e){let t=await this.getHotTier(e),s=Date.now();return t.map(r=>({...r,ageDays:Math.floor((s-r.createdAt.getTime())/(1e3*60*60*24)),daysSinceAccess:Math.floor((s-r.lastAccessedAt.getTime())/(1e3*60*60*24))}))}async getByIds(e){return e.length===0?[]:this.collection.find({_id:{$in:e},purged:{$ne:!0}}).toArray()}async countNonHot(e){return this.collection.countDocuments({agentId:e,tier:{$ne:"hot"},purged:{$ne:!0}})}async getAllNonPinned(e){return this.collection.find({agentId:e,pinned:!1,purged:{$ne:!0},supersededBy:{$exists:!1}}).toArray()}async getByTiersForAgent(e,t){return this.collection.find({agentId:e,tier:{$in:t},purged:{$ne:!0},summarized:!1,supersededBy:{$exists:!1}}).toArray()}async getFactsAndDecisionsByTopic(e){let t=await this.collection.find({agentId:e,type:{$in:["fact","decision"]},purged:{$ne:!0},supersededBy:{$exists:!1},needsReview:{$ne:!0}}).toArray(),s=new Map;for(let r of t){let i=s.get(r.topic)??[];i.push(r),s.set(r.topic,i)}return s}async getInteractionsByTopic(e){let t=await this.collection.find({agentId:e,type:"interaction",tier:{$in:["hot","warm"]},purged:{$ne:!0},supersededBy:{$exists:!1},summarized:!1}).toArray(),s=new Map;for(let r of t){let i=s.get(r.topic)??[];i.push(r),s.set(r.topic,i)}return s}async markSuperseded(e,t){e.length!==0&&await this.collection.updateMany({_id:{$in:e}},{$set:{supersededBy:t,tier:"cold"}})}async flagForReview(e){e.length!==0&&await this.collection.updateMany({_id:{$in:e}},{$set:{needsReview:!0}})}async getAllForAgent(e){return this.collection.find({agentId:e}).toArray()}async setTier(e,t){await this.collection.updateOne({_id:e},{$set:{tier:t}})}async setTierBulk(e,t){e.length!==0&&await this.collection.updateMany({_id:{$in:e}},{$set:{tier:t}})}async getColdByTopic(e,t){return this.collection.find({agentId:e,tier:"cold",topic:t,summarized:!1,purged:{$ne:!0}}).sort({createdAt:1}).toArray()}async getColdTopics(e){return await this.collection.distinct("topic",{agentId:e,tier:"cold",summarized:!1,purged:{$ne:!0}})}async markSummarized(e,t){e.length!==0&&await this.collection.updateMany({_id:{$in:e}},{$set:{summarized:!0,summaryGroup:t,summarizedAt:new Date}})}async deleteSummarizedOlderThan(e,t){return(await this.collection.deleteMany({agentId:e,summarized:!0,summarizedAt:{$lt:t}})).deletedCount}async purge(e,t){if(!(t.topic!==void 0||t.type!==void 0||t.importance!==void 0||t.tier!==void 0||t.olderThan!==void 0))throw new Error("purge() requires at least one filter");let r={agentId:e,pinned:!1,purged:{$ne:!0}};return t.topic!==void 0&&(r.topic=t.topic),t.type!==void 0&&(r.type=t.type),t.importance!==void 0&&(r.importance=t.importance),t.tier!==void 0&&(r.tier=t.tier),t.olderThan!==void 0&&(r.updatedAt={$lt:t.olderThan}),(await this.collection.updateMany(r,{$set:{purged:!0,purgedAt:new Date}})).modifiedCount}async deletePurgedOlderThan(e,t){let s=await this.collection.find({agentId:e,purged:!0,purgedAt:{$lt:t}}).toArray();if(s.length===0)return[];let r=s.map(i=>i._id);return await this.collection.deleteMany({_id:{$in:r}}),s}async getAgentIds(){return this.collection.distinct("agentId")}async close(){await this.client.close()}};O();yr();import{QdrantClient as Ob}from"@qdrant/js-client-rest";var xb=T("memory-embedder"),_t="agent_memory",Fr=class{qdrantUrl;ollamaUrl;qdrant=null;collectionReady=!1;constructor(e=process.env.QDRANT_URL??"http://localhost:6333",t=process.env.OLLAMA_URL??"http://localhost:11434"){this.qdrantUrl=e,this.ollamaUrl=t}getClient(){return this.qdrant||(this.qdrant=new Ob({url:this.qdrantUrl})),this.qdrant}async embed(e){return qe(this.ollamaUrl,e)}async ensureCollection(){if(this.collectionReady)return;let e=this.getClient(),{collections:t}=await e.getCollections();if(!t.some(r=>r.name===_t)){let r=await this.embed("test");await e.createCollection(_t,{vectors:{size:r.length,distance:"Cosine"}}),xb.info("Created Qdrant collection",{collection:_t,vectorSize:r.length})}this.collectionReady=!0}async upsert(e,t,s){await this.ensureCollection();let r=await this.embed(t);await this.getClient().upsert(_t,{points:[{id:e,vector:r,payload:s}]})}async remove(e){await this.ensureCollection(),await this.getClient().delete(_t,{points:[e]})}async search(e,t,s){await this.ensureCollection();let r=await this.embed(e),i=s?.limit??10,o=[{key:"agentId",match:{value:t}}];return s?.type&&o.push({key:"type",match:{value:s.type}}),s?.topic&&o.push({key:"topic",match:{value:s.topic}}),s?.tier&&o.push({key:"tier",match:{value:s.tier}}),s?.importance&&o.push({key:"importance",match:{value:s.importance}}),(await this.getClient().search(_t,{vector:r,limit:i,with_payload:!0,filter:{must:o}})).map(l=>({mongoId:l.payload?.mongoId,score:l.score}))}async findSimilar(e,t,s,r=10){return await this.ensureCollection(),(await this.getClient().query(_t,{query:{recommend:{positive:[e]}},filter:{must:[{key:"agentId",match:{value:t}}]},limit:r,with_payload:!0,score_threshold:s})).points.map(o=>({mongoId:o.payload?.mongoId,score:o.score??0,pointId:typeof o.id=="string"?o.id:String(o.id)}))}};O();import{ObjectId as Mb}from"mongodb";import{query as Kr}from"@anthropic-ai/claude-agent-sdk";var xh={critical:1,high:.75,medium:.5,low:.25},Mh={decision:1,fact:.8,preference:.8,summary:.6,task:.5,interaction:.3};var xe=T("memory-lifecycle"),Gr=class{store;embedder;config;dreamConfig;constructor(e,t,s,r){this.store=e,this.embedder=t,this.config=s,this.dreamConfig=r}computeScore(e,t){let s=xh[e.importance]??.5,r=Mh[e.type]??.5,i=Date.now()-e.updatedAt.getTime(),o=this.config.recencyHalfLifeDays*24*60*60*1e3,a=Math.exp(-.693*i/o),l=t>0?Math.min(e.accessCount/t,1):e.accessCount>0?1:0;return s*.4+a*.3+l*.2+r*.1}estimateTokens(e){return Math.ceil(e.length/4)}async sweep(){let e=Date.now(),t=0,s=0,r=0,i=0,o=0,a=[];try{let c=await this.store.getAgentIds();for(let d of c)try{let u=await this.sweepAgent(d);t+=u.promoted,s+=u.demoted,r+=u.summarized,i+=u.cleaned,o+=u.purged}catch(u){a.push(`${d}: ${u}`),xe.error("Memory lifecycle sweep failed for agent",{agentId:d,error:String(u)})}}catch(c){a.push(`global: ${c}`)}return t+s+r+i+o>0&&xe.info("Memory lifecycle sweep complete",{durationMs:Date.now()-e,promoted:t,demoted:s,summarized:r,cleaned:i,purged:o,errors:a.length}),{component:"memory-lifecycle",pruned:s+i+o,retried:t,bytesFreed:0,errors:a}}async sweepAgent(e){let t=0,s=0,r=await this.store.getAllNonPinned(e),i=0,o=0;if(r.length>0){let d=r.map(w=>w.accessCount).sort((w,S)=>w-S),u=d[Math.floor(d.length/2)]??0,h=r.map(w=>({record:w,score:this.computeScore(w,u)})),p=[];for(let{record:w,score:S}of h){let b;S>=this.config.hotThreshold?b="hot":S>=this.config.warmThreshold?b="warm":b="cold",b!==w.tier&&(p.push({id:w._id,newTier:b}),b==="hot"&&w.tier!=="hot"&&t++,b!=="hot"&&w.tier==="hot"&&s++)}for(let w of["hot","warm","cold"]){let S=p.filter(b=>b.newTier===w).map(b=>b.id);await this.store.setTierBulk(S,w)}let g=await this.store.getHotTier(e),f=0,y=[];for(let w of g){let S=this.estimateTokens(w.content);w.pinned||(f+=S,f>this.config.hotBudgetTokens&&y.push(w._id))}y.length>0&&(await this.store.setTierBulk(y,"warm"),s+=y.length);try{i=await this.summarizeCold(e)}catch(w){xe.warn("Cold summarization failed",{agentId:e,error:String(w)})}}let a=new Date(Date.now()-this.config.coldRetentionDays*24*60*60*1e3);o=await this.store.deleteSummarizedOlderThan(e,a);let l=new Date(Date.now()-this.config.purgeRetentionDays*24*60*60*1e3),c=0;try{let d=await this.store.deletePurgedOlderThan(e,l);if(c=d.length,d.length>0){let u=d.map(h=>h.qdrantPointId).filter(Boolean);for(let h of u)await this.embedder.remove(h);xe.info("Hard-deleted purged records",{agentId:e,count:d.length})}}catch(d){xe.warn("Purge hard-delete phase failed",{agentId:e,error:String(d)})}return{promoted:t,demoted:s,summarized:i,cleaned:o,purged:c}}async dream(){if(!this.dreamConfig?.enabled)return{merged:0,contradictions:0,promoted:0,flaggedForReview:0,errors:[]};let e=Date.now(),t=0,s=0,r=0,i=0,o=[];try{let l=await this.store.getAgentIds();for(let c of l)try{let d=await this.mergeDuplicates(c);t+=d.merged;let u=await this.detectContradictions(c);s+=u.resolved,i+=u.flagged;let h=await this.promotePatterns(c);r+=h.promoted}catch(d){o.push(`${c}: ${d}`),xe.error("autoDream failed for agent",{agentId:c,error:String(d)})}}catch(l){o.push(`global: ${l}`)}return t+s+r+i>0&&xe.info("autoDream complete",{durationMs:Date.now()-e,merged:t,contradictions:s,promoted:r,flaggedForReview:i,errors:o.length}),{merged:t,contradictions:s,promoted:r,flaggedForReview:i,errors:o}}async mergeDuplicates(e){let t=this.dreamConfig,s=await this.store.getByTiersForAgent(e,["hot","warm"]);if(s.length<2)return{merged:0};let r=new Set,i=0,o=0;for(let a of s){if(o>=t.maxClustersPerRun)break;if(r.has(a.qdrantPointId))continue;let c=(await this.embedder.findSimilar(a.qdrantPointId,e,t.similarityThreshold,10)).filter(v=>!r.has(v.pointId));if(c.length===0)continue;r.add(a.qdrantPointId);for(let v of c)r.add(v.pointId);let d=c.map(v=>new Mb(v.mongoId)),u=await this.store.getByIds(d),h=[a,...u],g=["Merge the following duplicate or overlapping memories into a single consolidated record.","Preserve all unique details. Discard exact duplicates. Be concise.","",h.map(v=>`- [${v.type}/${v.importance}] ${v.content}`).join(`
361
361
  `)].join(`
362
- `),f=Gr({prompt:g,options:{model:"claude-haiku-4-5-20251001",permissionMode:"bypassPermissions",allowDangerouslySkipPermissions:!0,maxTurns:1,maxBudgetUsd:.02,persistSession:!1}}),y="";for await(let v of f){let C=v;if(C.type==="result"){let M=C;M.subtype==="success"&&M.result&&(y=M.result)}}if(!y)continue;let w=this.highestImportance(h),S=crypto.randomUUID(),b=await this.store.save(e,{content:y,type:a.type,topic:a.topic,importance:w},S);await this.embedder.upsert(S,y,{agentId:e,mongoId:b._id.toString(),type:a.type,topic:a.topic,tier:"hot",importance:w,createdAt:Math.floor(Date.now()/1e3)});let A=h.map(v=>v._id);await this.store.markSuperseded(A,b._id),i+=h.length,o++}return i>0&&xe.info("autoDream: duplicates merged",{agentId:e,merged:i,clusters:o}),{merged:i}}highestImportance(e){let t=["critical","high","medium","low"];for(let s of t)if(e.some(r=>r.importance===s))return s;return"medium"}async detectContradictions(e){let t=this.dreamConfig,s=await this.store.getFactsAndDecisionsByTopic(e),r=0,i=0,o=0,a=new Set;for(let[l,c]of s){if(o>=t.maxContradictionPairsPerRun)break;if(!(c.length<2)){for(let d=0;d<c.length-1;d++)if(!a.has(c[d]._id.toString())){for(let u=d+1;u<c.length&&!(o>=t.maxContradictionPairsPerRun);u++){if(a.has(c[u]._id.toString()))continue;let h=c[d],p=c[u],g=["Do these two memories contradict each other?","",`Memory A (${h.type}, created ${h.createdAt.toISOString()}):`,h.content,"",`Memory B (${p.type}, created ${p.createdAt.toISOString()}):`,p.content,"","Reply with exactly one of:",`- "NO" if they don't contradict`,'- "A_WINS" if Memory A is more current/accurate','- "B_WINS" if Memory B is more current/accurate',`- "UNCLEAR" if they contradict but you can't determine which is correct`].join(`
363
- `),f=Gr({prompt:g,options:{model:"claude-haiku-4-5-20251001",permissionMode:"bypassPermissions",allowDangerouslySkipPermissions:!0,maxTurns:1,maxBudgetUsd:.02,persistSession:!1}}),y="";for await(let w of f){let S=w;if(S.type==="result"){let b=S;b.subtype==="success"&&b.result&&(y=b.result.trim().toUpperCase())}}o++,y.includes("A_WINS")?(await this.store.markSuperseded([p._id],h._id),a.add(p._id.toString()),r++):y.includes("B_WINS")?(await this.store.markSuperseded([h._id],p._id),a.add(h._id.toString()),r++):y.includes("UNCLEAR")&&(await this.store.flagForReview([h._id,p._id]),a.add(h._id.toString()),a.add(p._id.toString()),i+=2)}if(o>=t.maxContradictionPairsPerRun)break}}}return(r>0||i>0)&&xe.info("autoDream: contradictions processed",{agentId:e,resolved:r,flagged:i,pairsChecked:o}),{resolved:r,flagged:i}}async promotePatterns(e){let t=this.dreamConfig,s=await this.store.getInteractionsByTopic(e),r=0;for(let[i,o]of s){if(r>=t.maxPromotionsPerRun)break;let a=new Set(o.map(w=>w.sourceThread).filter(Boolean));if(a.size<t.patternMinCount)continue;let d=o.sort((w,S)=>S.createdAt.getTime()-w.createdAt.getTime()).slice(0,10).map(w=>`- [${w.importance}] ${w.content}`).join(`
362
+ `),f=Kr({prompt:g,options:{model:"claude-haiku-4-5-20251001",permissionMode:"bypassPermissions",allowDangerouslySkipPermissions:!0,maxTurns:1,maxBudgetUsd:.02,persistSession:!1}}),y="";for await(let v of f){let C=v;if(C.type==="result"){let M=C;M.subtype==="success"&&M.result&&(y=M.result)}}if(!y)continue;let w=this.highestImportance(h),S=crypto.randomUUID(),b=await this.store.save(e,{content:y,type:a.type,topic:a.topic,importance:w},S);await this.embedder.upsert(S,y,{agentId:e,mongoId:b._id.toString(),type:a.type,topic:a.topic,tier:"hot",importance:w,createdAt:Math.floor(Date.now()/1e3)});let A=h.map(v=>v._id);await this.store.markSuperseded(A,b._id),i+=h.length,o++}return i>0&&xe.info("autoDream: duplicates merged",{agentId:e,merged:i,clusters:o}),{merged:i}}highestImportance(e){let t=["critical","high","medium","low"];for(let s of t)if(e.some(r=>r.importance===s))return s;return"medium"}async detectContradictions(e){let t=this.dreamConfig,s=await this.store.getFactsAndDecisionsByTopic(e),r=0,i=0,o=0,a=new Set;for(let[l,c]of s){if(o>=t.maxContradictionPairsPerRun)break;if(!(c.length<2)){for(let d=0;d<c.length-1;d++)if(!a.has(c[d]._id.toString())){for(let u=d+1;u<c.length&&!(o>=t.maxContradictionPairsPerRun);u++){if(a.has(c[u]._id.toString()))continue;let h=c[d],p=c[u],g=["Do these two memories contradict each other?","",`Memory A (${h.type}, created ${h.createdAt.toISOString()}):`,h.content,"",`Memory B (${p.type}, created ${p.createdAt.toISOString()}):`,p.content,"","Reply with exactly one of:",`- "NO" if they don't contradict`,'- "A_WINS" if Memory A is more current/accurate','- "B_WINS" if Memory B is more current/accurate',`- "UNCLEAR" if they contradict but you can't determine which is correct`].join(`
363
+ `),f=Kr({prompt:g,options:{model:"claude-haiku-4-5-20251001",permissionMode:"bypassPermissions",allowDangerouslySkipPermissions:!0,maxTurns:1,maxBudgetUsd:.02,persistSession:!1}}),y="";for await(let w of f){let S=w;if(S.type==="result"){let b=S;b.subtype==="success"&&b.result&&(y=b.result.trim().toUpperCase())}}o++,y.includes("A_WINS")?(await this.store.markSuperseded([p._id],h._id),a.add(p._id.toString()),r++):y.includes("B_WINS")?(await this.store.markSuperseded([h._id],p._id),a.add(h._id.toString()),r++):y.includes("UNCLEAR")&&(await this.store.flagForReview([h._id,p._id]),a.add(h._id.toString()),a.add(p._id.toString()),i+=2)}if(o>=t.maxContradictionPairsPerRun)break}}}return(r>0||i>0)&&xe.info("autoDream: contradictions processed",{agentId:e,resolved:r,flagged:i,pairsChecked:o}),{resolved:r,flagged:i}}async promotePatterns(e){let t=this.dreamConfig,s=await this.store.getInteractionsByTopic(e),r=0;for(let[i,o]of s){if(r>=t.maxPromotionsPerRun)break;let a=new Set(o.map(w=>w.sourceThread).filter(Boolean));if(a.size<t.patternMinCount)continue;let d=o.sort((w,S)=>S.createdAt.getTime()-w.createdAt.getTime()).slice(0,10).map(w=>`- [${w.importance}] ${w.content}`).join(`
364
364
  `),u=[`These ${o.length} interactions across ${a.size} conversations share topic "${i}".`,"Generate a single fact that captures the recurring pattern or insight.","Be concise \u2014 one to three sentences.","",d].join(`
365
- `),h=Gr({prompt:u,options:{model:"claude-haiku-4-5-20251001",permissionMode:"bypassPermissions",allowDangerouslySkipPermissions:!0,maxTurns:1,maxBudgetUsd:.02,persistSession:!1}}),p="";for await(let w of h){let S=w;if(S.type==="result"){let b=S;b.subtype==="success"&&b.result&&(p=b.result)}}if(!p)continue;let g=crypto.randomUUID(),f=await this.store.save(e,{content:p,type:"fact",topic:i,importance:"medium"},g);await this.embedder.upsert(g,p,{agentId:e,mongoId:f._id.toString(),type:"fact",topic:i,tier:"hot",importance:"medium",createdAt:Math.floor(Date.now()/1e3)});let y=o.map(w=>w._id);await this.store.markSuperseded(y,f._id),r++}return r>0&&xe.info("autoDream: patterns promoted",{agentId:e,promoted:r}),{promoted:r}}async summarizeCold(e){let t=await this.store.getColdTopics(e),s=0;for(let r of t){let i=await this.store.getColdByTopic(e,r);if(i.length<this.config.coldSummaryMinRecords)continue;let o=i.map(h=>`- [${h.type}/${h.importance}] ${h.content}`).join(`
365
+ `),h=Kr({prompt:u,options:{model:"claude-haiku-4-5-20251001",permissionMode:"bypassPermissions",allowDangerouslySkipPermissions:!0,maxTurns:1,maxBudgetUsd:.02,persistSession:!1}}),p="";for await(let w of h){let S=w;if(S.type==="result"){let b=S;b.subtype==="success"&&b.result&&(p=b.result)}}if(!p)continue;let g=crypto.randomUUID(),f=await this.store.save(e,{content:p,type:"fact",topic:i,importance:"medium"},g);await this.embedder.upsert(g,p,{agentId:e,mongoId:f._id.toString(),type:"fact",topic:i,tier:"hot",importance:"medium",createdAt:Math.floor(Date.now()/1e3)});let y=o.map(w=>w._id);await this.store.markSuperseded(y,f._id),r++}return r>0&&xe.info("autoDream: patterns promoted",{agentId:e,promoted:r}),{promoted:r}}async summarizeCold(e){let t=await this.store.getColdTopics(e),s=0;for(let r of t){let i=await this.store.getColdByTopic(e,r);if(i.length<this.config.coldSummaryMinRecords)continue;let o=i.map(h=>`- [${h.type}/${h.importance}] ${h.content}`).join(`
366
366
  `),a=[`Summarize the following memory entries for agent ${e} about topic "${r}".`,"Preserve key facts, decisions, and outcomes. Discard routine interactions.","Be concise \u2014 aim for 2-5 sentences.","",o].join(`
367
- `),l=Gr({prompt:a,options:{model:"claude-haiku-4-5-20251001",permissionMode:"bypassPermissions",allowDangerouslySkipPermissions:!0,maxTurns:1,maxBudgetUsd:.02,persistSession:!1}}),c="";for await(let h of l){let p=h;if(p.type==="result"){let g=p;g.subtype==="success"&&g.result&&(c=g.result)}}if(!c)continue;let d=crypto.randomUUID(),u=await this.store.save(e,{content:c,type:"summary",topic:r,importance:"medium"},d);await this.store.setTier(u._id,"warm"),await this.embedder.upsert(d,c,{agentId:e,mongoId:u._id.toString(),type:"summary",topic:r,tier:"warm",importance:"medium",createdAt:Math.floor(Date.now()/1e3)}),await this.store.markSummarized(i.map(h=>h._id),u._id),s+=i.length}return s}};O();import{createServer as Eb}from"node:http";var xh=I("admin-api"),Wr=class{server;port;token;agentDefs;agentVersions;onReload;constructor(e,t,s,r,i){this.port=e,this.token=t,this.agentDefs=s,this.agentVersions=r,this.onReload=i,this.server=Eb((o,a)=>this.handleRequest(o,a))}async start(){return new Promise(e=>{this.server.listen(this.port,()=>{xh.info("Admin API started",{port:this.port}),e()})})}stop(){this.server.close()}async handleRequest(e,t){let s=e.headers.authorization;if(!s||s!==`Bearer ${this.token}`){t.writeHead(401,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Unauthorized"}));return}let r=new URL(e.url??"/",`http://localhost:${this.port}`),i=r.pathname,o=e.method??"GET";try{if(i==="/admin/agents"&&o==="GET")return await this.listAgents(t);if(i==="/admin/agents"&&o==="POST")return await this.createAgent(e,t);let a=i.match(/^\/admin\/agents\/([^/]+)$/);if(a){let u=decodeURIComponent(a[1]);if(o==="GET")return await this.getAgent(u,t);if(o==="PATCH")return await this.updateAgent(u,e,t);if(o==="DELETE")return await this.deleteAgent(u,t)}let l=i.match(/^\/admin\/agents\/([^/]+)\/(enable|disable)$/);if(l&&o==="POST"){let u=decodeURIComponent(l[1]),h=l[2];return await this.toggleAgent(u,h,t)}let c=i.match(/^\/admin\/agents\/([^/]+)\/history$/);if(c&&o==="GET"){let u=decodeURIComponent(c[1]),h=parseInt(r.searchParams.get("limit")??"10",10);return await this.agentHistory(u,h,t)}let d=i.match(/^\/admin\/agents\/([^/]+)\/rollback$/);if(d&&o==="POST"){let u=decodeURIComponent(d[1]);return await this.rollbackAgent(u,e,t)}if(i==="/admin/servers"&&o==="GET")return await this.listServers(t);t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Not found"}))}catch(a){xh.error("Admin API error",{error:String(a),path:i,method:o}),t.writeHead(500,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Internal server error"}))}}async readBody(e){return new Promise((t,s)=>{let r=[];e.on("data",i=>r.push(i)),e.on("end",()=>{try{t(JSON.parse(Buffer.concat(r).toString()))}catch{s(new Error("Invalid JSON"))}}),e.on("error",s)})}json(e,t,s){e.writeHead(t,{"Content-Type":"application/json"}),e.end(JSON.stringify(s))}async saveVersion(e,t){let s=await this.agentDefs.findOne({_id:e});s&&await this.agentVersions.insertOne({agentId:e,snapshot:s,changedFields:t,createdAt:new Date})}async listAgents(e){let t=await this.agentDefs.find().toArray();this.json(e,200,t)}async getAgent(e,t){let s=await this.agentDefs.findOne({_id:e});if(!s)return this.json(t,404,{error:"Agent not found"});this.json(t,200,s)}async createAgent(e,t){let s=await this.readBody(e);if(!s._id||!s.name||!s.model)return this.json(t,400,{error:"Required: _id, name, model"});if(await this.agentDefs.findOne({_id:s._id}))return this.json(t,409,{error:"Agent already exists"});let i=new Date,o={_id:s._id,name:s.name,model:s.model,icon:s.icon??te.icon,channels:s.channels??[],passiveChannels:s.passiveChannels??te.passiveChannels,keywords:s.keywords??te.keywords,isDefault:s.isDefault??!1,coreServers:s.coreServers??[],delegateServers:s.delegateServers??[],delegatePrompts:s.delegatePrompts??te.delegatePrompts,plugins:s.plugins,metadata:s.metadata,soul:s.soul??"",systemPrompt:s.systemPrompt??"",schedule:s.schedule??te.schedule,subscribe:s.subscribe,budgetUsd:s.budgetUsd??te.budgetUsd,maxTurns:s.maxTurns??te.maxTurns,maxConcurrent:s.maxConcurrent??te.maxConcurrent,timeoutMs:s.timeoutMs??te.timeoutMs,disabled:s.disabled??!1,slackBot:s.slackBot,createdAt:i,updatedAt:i,updatedBy:"admin-api"};await this.agentDefs.insertOne(o),this.onReload(),this.json(t,201,o)}async updateAgent(e,t,s){let r=await this.readBody(t);if(!await this.agentDefs.findOne({_id:e}))return this.json(s,404,{error:"Agent not found"});delete r._id,delete r.createdAt;let o=Object.keys(r);await this.saveVersion(e,o),await this.agentDefs.updateOne({_id:e},{$set:{...r,updatedAt:new Date,updatedBy:"admin-api"}}),this.onReload();let a=await this.agentDefs.findOne({_id:e});this.json(s,200,a)}async deleteAgent(e,t){if(!await this.agentDefs.findOne({_id:e}))return this.json(t,404,{error:"Agent not found"});await this.saveVersion(e,["_deleted"]),await this.agentDefs.deleteOne({_id:e}),this.onReload(),this.json(t,200,{deleted:e})}async toggleAgent(e,t,s){if(!await this.agentDefs.findOne({_id:e}))return this.json(s,404,{error:"Agent not found"});await this.saveVersion(e,["disabled"]),await this.agentDefs.updateOne({_id:e},{$set:{disabled:t==="disable",updatedAt:new Date,updatedBy:"admin-api"}}),this.onReload(),this.json(s,200,{[t+"d"]:e})}async agentHistory(e,t,s){let r=await this.agentVersions.find({agentId:e}).sort({createdAt:-1}).limit(t).toArray();this.json(s,200,r)}async rollbackAgent(e,t,s){let i=(await this.readBody(t)).version_index??0;if(typeof i!="number"||i<0||!Number.isInteger(i))return this.json(s,400,{error:"version_index must be a non-negative integer"});let o=await this.agentVersions.find({agentId:e}).sort({createdAt:-1}).skip(i).limit(1).toArray();if(o.length===0)return this.json(s,404,{error:"No version found at that index"});if(!await this.agentDefs.findOne({_id:e}))return this.json(s,404,{error:"Agent not found \u2014 cannot rollback a deleted agent"});await this.saveVersion(e,["_rollback"]);let{_id:l,...c}=o[0].snapshot;await this.agentDefs.updateOne({_id:e},{$set:{...c,updatedAt:new Date,updatedBy:"admin-api"}}),this.onReload();let d=await this.agentDefs.findOne({_id:e});this.json(s,200,d)}async listServers(e){this.json(e,200,{message:"Server registry \u2014 use agent_definitions.coreServers/delegateServers fields"})}};O();var kt=I("activity-logger"),Vr=class{db;collection;buffer=[];flushTimer=null;config;connected=!1;constructor(e,t){this.db=e,this.config=t}async connect(){if(!this.config.enabled){kt.info("Activity log disabled");return}this.collection=this.db.collection("activity_log"),await this.collection.createIndex({agentId:1,timestamp:-1}),await this.collection.createIndex({timestamp:1},{expireAfterSeconds:this.config.retentionDays*24*60*60}),this.connected=!0,this.flushTimer=setInterval(()=>{this.flush().catch(t=>kt.warn("Periodic flush failed",{error:String(t)}))},this.config.flushIntervalMs);let e=await this.collection.estimatedDocumentCount();kt.info("Activity log connected",{records:e,retentionDays:this.config.retentionDays})}record(e){!this.config.enabled||!this.connected||(this.buffer.push(e),this.buffer.length>=this.config.bufferSize&&this.flush().catch(t=>kt.warn("Buffer-full flush failed",{error:String(t)})))}async flush(){if(this.buffer.length===0)return;let e=this.buffer.splice(0);try{await this.collection.insertMany(e,{ordered:!1})}catch(t){kt.warn("Bulk write failed, retrying once",{count:e.length,error:String(t)});try{await this.collection.insertMany(e,{ordered:!1})}catch(s){kt.error("Bulk write failed after retry, dropping batch",{count:e.length,error:String(s)})}}}async stop(){this.flushTimer&&(clearInterval(this.flushTimer),this.flushTimer=null),this.buffer.length>0&&(kt.info("Draining activity buffer on shutdown",{count:this.buffer.length}),await this.flush()),this.connected=!1}};O();var Mh={id:"001-backfill-home-base",async run(n,e){let t=n.collection("agent_definitions"),s=t.find({homeBase:{$exists:!1}}),r=0,i=0;for await(let o of s){let a=o.channels?.find(l=>l.startsWith("agent-"))??o.channels?.[0];if(!a){e.warn("Cannot backfill homeBase \u2014 no channels",{agentId:o._id}),i++;continue}await t.updateOne({_id:o._id},{$set:{homeBase:a}}),r++}e.info("Backfill complete",{migration:"001-backfill-home-base",updated:r,skipped:i})}};var Yr=I("migrations"),Nb=[Mh];async function Dh(n,e=Nb){let t=n.collection("migrations");for(let s of e){if(await t.findOne({_id:s.id})){Yr.debug("Migration already applied, skipping",{id:s.id});continue}Yr.info("Running migration",{id:s.id}),await s.run(n,Yr),await t.insertOne({_id:s.id,ranAt:new Date}),Yr.info("Migration applied",{id:s.id})}}var x=I("index");async function yk(){x.info("Hive starting up",{instance:m.instance.id,portBase:m.instance.portBase}),uc(le,di),hc(le),oc(le),pc(di,ze),m.gemini.apiKey&&(Qu(m.gemini.apiKey),x.info("Gemini vision enabled",{model:m.gemini.visionModel}));let n=new gk(m.mongo.uri);await n.connect();let e=n.db(m.mongo.dbName),t=e.collection("agent_definitions");await t.createIndex({channels:1}),await t.createIndex({disabled:1}),await Dh(e);let s,r,i,o=null,a=async()=>{if(!r||!i)return;x.info("Hot-reloading agent registry...");let N=await s.load();if(N.added.length&&x.info("New agents online",{agents:N.added}),N.updated.length&&x.info("Agents updated",{agents:N.updated}),N.removed.length){x.info("Agents removed",{agents:N.removed});for(let ce of N.removed)r.stopAgent(ce)}let B=s.getDisabled();for(let ce of B)r.stopAgent(ce.id);B.length&&x.info("Disabled agents stopped",{agents:B.map(ce=>ce.id)}),await i.reloadSchedules(),r.reloadSkills()};s=new cr(t,()=>{o&&clearTimeout(o),o=setTimeout(()=>a(),500)}),await s.load(),x.info("Agent registry loaded",{agents:s.listIds()});let l=new vr(m.mongo.uri,m.mongo.dbName);await l.init();let c=new Fr(m.mongo.uri,m.mongo.dbName);await c.init(),l.memoryStore=c;let d=new Kr,u=new Hr(c,d,{hotBudgetTokens:m.memory.hotBudgetTokens,sweepIntervalHours:m.memory.sweepIntervalHours,hotThreshold:m.memory.hotThreshold,warmThreshold:m.memory.warmThreshold,recencyHalfLifeDays:m.memory.recencyHalfLifeDays,coldSummaryMinRecords:m.memory.coldSummaryMinRecords,coldRetentionDays:m.memory.coldRetentionDays,purgeRetentionDays:m.memory.purgeRetentionDays},m.autoDream);x.info("Structured memory lifecycle enabled");let h=new Cr(m.mongo.uri);await h.connect(m.mongo.dbName);let p;if(m.activity.enabled&&(p=new Vr(e,m.activity),await p.connect()),m.linear.apiKey){let N=new Ar(m.linear.apiKey,m.linear.teamId||void 0);x.info("Linear client configured")}let g=new Dr(m.taskLedger.apiUrl,m.taskLedger.apiKey);g.isConfigured&&x.info("Task ledger client configured",{apiUrl:m.taskLedger.apiUrl});let f=new Lr(m.taskLedger.apiUrl,m.taskLedger.agentKeys,m.taskLedger.apiKey);f.isConfigured&&x.info("Task ledger auto-tracking enabled",{apiUrl:m.taskLedger.apiUrl,agents:Object.keys(m.taskLedger.agentKeys)});let y,w;if(m.codeIndex.enabled){let{CodeIndexPrefetcher:N}=await Promise.resolve().then(()=>($h(),Ph)),{KnowledgeExtractor:B}=await Promise.resolve().then(()=>(Bh(),Rh));y=new N({mongoUri:m.mongo.uri,dbName:m.mongo.dbName,qdrantUrl:process.env.QDRANT_URL??"http://localhost:6333",ollamaUrl:process.env.OLLAMA_URL??"http://localhost:11434",scoreThreshold:m.codeIndex.scoreThreshold,prefetchLimit:m.codeIndex.prefetchLimit}),m.codeIndex.sessionKnowledge.enabled&&(w=new B(c,d)),x.info("Code index integration enabled",{prefetch:!0,sessionKnowledge:w!==void 0})}r=new _r(s,l,h,p,y);let S=new Ir(r,l,s),b=new Er(s,r,S,m.defaultAgent,f.isConfigured?f:void 0),A=new Pr(m.background.port,m.background.authToken,m.tasksDir.background,N=>b.dispatch(N).catch(B=>{x.error("Background task completion dispatch failed",{error:String(B)})}));await A.start(),await A.scanOrphans(),x.info("Background task manager started",{port:m.background.port});let v=new Rr(m.codeTask.port,m.codeTask.authToken,m.codeTask.pluginDirs,m.codeTask.maxConcurrent,m.tasksDir.code,N=>b.dispatch(N).catch(B=>{x.error("Code task completion dispatch failed",{error:String(B)})}),{prefetcher:y,knowledgeExtractor:w,maxLifetimeMs:m.codeTask.maxLifetimeMs,staleGraceMs:m.codeTask.staleGraceMs});await v.start(),await v.scanOrphans(),x.info("Code task manager started",{port:m.codeTask.port});let C;m.recall.apiKey&&(C=new Br(m.recall.monitorPort,m.recall.webhookSecret,N=>b.dispatch(N).catch(B=>{x.error("Meeting monitor dispatch failed",{error:String(B)})})),await C.start(),x.info("Meeting monitor started",{port:m.recall.monitorPort}),m.recall.apiKey&&!m.recall.webhookSecret&&x.error("Real-time transcript delivery disabled \u2014 RECALL_WEBHOOK_SECRET not set")),pk(ze)&&(mk(ze,{recursive:!0},()=>{o&&clearTimeout(o),o=setTimeout(()=>a(),500)}),x.info("Skills hot-reload enabled",{watched:ze})),process.on("SIGUSR1",()=>a()),x.info("Hot-reload enabled",{signal:"SIGUSR1"});let M=m.sms.lines.map(N=>N.slackChannel).filter(Boolean),_=new kr(m.slack.appToken,m.slack.botToken),L=new Nr(_,s,M,"slack");b.registerAdapter(L),await L.start(N=>{b.dispatch(N).catch(B=>{x.error("Slack dispatch failed",{error:String(B),source:N.source.label})})}),x.info("Slack adapter connected");try{let N=new Map,B;do{let xt=await _.client.conversations.list({types:"public_channel",limit:1e3,cursor:B});for(let Ye of xt.channels??[])Ye.name&&Ye.id&&N.set(Ye.name,Ye.id);B=xt.response_metadata?.next_cursor||void 0}while(B);let ce=m.slack.auditChannel,on=ce?N.get(ce):void 0;b.setAuditChannel(L,N,on),x.info("Audit channel configured",{channels:N.size,fallback:ce||null,fallbackResolved:!!on})}catch(N){x.warn("Failed to configure audit channel",{error:String(N)})}let j=new Or(m.quo.apiKey,m.sms.lines);b.registerAdapter(j),m.quo.apiKey&&m.sms.lines.length>0&&(await j.start(N=>{b.dispatch(N).catch(B=>{x.error("SMS dispatch failed",{error:String(B),source:N.source.label})})}),x.info("SMS adapter started",{lines:m.sms.lines.length}));let J;m.imessage.enabled&&(J=new Mr(m.imessage,m.mongo.uri,m.mongo.dbName,_,m.instance.id),b.registerAdapter(J),await J.start(N=>{b.dispatch(N).catch(B=>{x.error("iMessage dispatch failed",{error:String(B)})})}),x.info("iMessage adapter started"));let{AgentRunner:K}=await Promise.resolve().then(()=>(fa(),Yu));K.registryRef=s;let{TeamStore:ae}=await Promise.resolve().then(()=>(Fh(),jh)),{CommandRegistry:sn}=await Promise.resolve().then(()=>(Gh(),Kh)),Le=new ae(m.mongo.uri,m.mongo.dbName);await Le.connect();let nn=N=>{let B=s.getAll(),ce=B.find(Ye=>Ye.id===N);if(ce)return{id:ce.id,name:ce.name};let on=N.toLowerCase(),xt=B.find(Ye=>Ye.name.toLowerCase()===on);return xt?{id:xt.id,name:xt.name}:null},rn=new sn(Le,nn);b.setTeamStore(Le),x.info("Team layer initialized");let{registerPluginCommands:ut}=await Promise.resolve().then(()=>(ba(),uh));await ut(r.getPlugins(),rn);let Ve;if(m.ws.enabled){let{WsAdapter:N}=await Promise.resolve().then(()=>(tp(),ep));Ve=new N(m.ws.port,{teamStore:Le,commandRegistry:rn,agentRegistry:s,agentManager:r}),b.registerAdapter(Ve),await Ve.start(B=>{b.dispatch(B).catch(ce=>{x.error("WS dispatch failed",{error:String(ce),source:B.source.label})})}),x.info("WebSocket adapter started",{port:m.ws.port})}let Et;if(m.ws.enabled){let{startBeekeeperRegistration:N}=await Promise.resolve().then(()=>(np(),sp)),B=`hive-${m.instance.id}`;Et=N({beekeeperPort:m.beekeeper.port,wsPort:m.ws.port,capabilityName:B}),x.info("Beekeeper registration loop started",{beekeeperPort:m.beekeeper.port,wsPort:m.ws.port,capabilityName:B})}let Nt;if(m.voice.enabled&&m.voice.serverSecret){let{VoiceAdapter:N}=await Promise.resolve().then(()=>(fp(),hp));Nt=new N(m.voice.port,m.voice.serverSecret,s,l),await Nt.start(),x.info("Voice adapter started",{port:m.voice.port})}i=new Tr(r,l,S,s,N=>{b.dispatch(N).catch(B=>{x.error("Callback dispatch failed",{error:String(B)})})}),await i.connectDb(m.mongo.uri,m.mongo.dbName),i.start(),x.info("Scheduler started"),await s.startWatching();let G;m.adminApi.token&&(G=new Wr(m.adminApi.port,m.adminApi.token,t,e.collection("agent_definition_versions"),()=>a()),await G.start(),x.info("Admin API started",{port:m.adminApi.port}));let D=new qr({maxAttempts:m.sweeper.retryMaxAttempts,baseDelayMs:m.sweeper.retryBaseDelayMs});b.setRetryQueue(D);let P=[L],ie=[_],ns=new jr({intervalMs:m.sweeper.intervalMs,threadTtlMs:m.sweeper.threadTtlMs,taskFileTtlMs:m.sweeper.taskFileTtlMs,meetingSessionTtlMs:m.sweeper.meetingSessionTtlMs,cacheTtlMs:m.sweeper.cacheTtlMs,memorySweepIntervalHours:m.memory.sweepIntervalHours,dreamConfig:m.autoDream},{dispatcher:b,slackAdapters:P,bgTaskManager:A,codeTaskManager:v,meetingMonitor:C,taskLedger:f.isConfigured?f:void 0,slackGateways:ie,agentManager:r,retryQueue:D,memoryLifecycle:u},g.isConfigured?g:void 0);ns.start(),x.info("Sweeper started",{intervalMs:m.sweeper.intervalMs});let Ot=async N=>{x.info("Shutdown signal received",{signal:N}),ns.stop(),G?.stop(),s.stopWatching(),await j.stop(),J&&await J.stop(),Et?.stop(),Ve&&await Ve.stop(),Nt?.stop(),await Le.close(),i.stop(),await A.stop(),await v.stop(),await y?.close(),C?.stop(),r.stopAll(),p&&await p.stop(),await h.close(),await c.close(),await L.stop(),await n.close(),x.info("Hive shut down cleanly"),process.exit(0)};process.on("SIGTERM",()=>Ot("SIGTERM")),process.on("SIGINT",()=>Ot("SIGINT")),x.info("Hive is running")}process.on("unhandledRejection",n=>{x.error("Unhandled promise rejection",{error:String(n),stack:n instanceof Error?n.stack:void 0})});yk().catch(n=>{x.error("Fatal startup error",{error:String(n)}),process.exit(1)});
367
+ `),l=Kr({prompt:a,options:{model:"claude-haiku-4-5-20251001",permissionMode:"bypassPermissions",allowDangerouslySkipPermissions:!0,maxTurns:1,maxBudgetUsd:.02,persistSession:!1}}),c="";for await(let h of l){let p=h;if(p.type==="result"){let g=p;g.subtype==="success"&&g.result&&(c=g.result)}}if(!c)continue;let d=crypto.randomUUID(),u=await this.store.save(e,{content:c,type:"summary",topic:r,importance:"medium"},d);await this.store.setTier(u._id,"warm"),await this.embedder.upsert(d,c,{agentId:e,mongoId:u._id.toString(),type:"summary",topic:r,tier:"warm",importance:"medium",createdAt:Math.floor(Date.now()/1e3)}),await this.store.markSummarized(i.map(h=>h._id),u._id),s+=i.length}return s}};O();import{createServer as Db}from"node:http";var Dh=T("admin-api"),Hr=class{server;port;token;agentDefs;agentVersions;onReload;constructor(e,t,s,r,i){this.port=e,this.token=t,this.agentDefs=s,this.agentVersions=r,this.onReload=i,this.server=Db((o,a)=>this.handleRequest(o,a))}async start(){return new Promise(e=>{this.server.listen(this.port,()=>{Dh.info("Admin API started",{port:this.port}),e()})})}stop(){this.server.close()}async handleRequest(e,t){let s=e.headers.authorization;if(!s||s!==`Bearer ${this.token}`){t.writeHead(401,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Unauthorized"}));return}let r=new URL(e.url??"/",`http://localhost:${this.port}`),i=r.pathname,o=e.method??"GET";try{if(i==="/admin/agents"&&o==="GET")return await this.listAgents(t);if(i==="/admin/agents"&&o==="POST")return await this.createAgent(e,t);let a=i.match(/^\/admin\/agents\/([^/]+)$/);if(a){let u=decodeURIComponent(a[1]);if(o==="GET")return await this.getAgent(u,t);if(o==="PATCH")return await this.updateAgent(u,e,t);if(o==="DELETE")return await this.deleteAgent(u,t)}let l=i.match(/^\/admin\/agents\/([^/]+)\/(enable|disable)$/);if(l&&o==="POST"){let u=decodeURIComponent(l[1]),h=l[2];return await this.toggleAgent(u,h,t)}let c=i.match(/^\/admin\/agents\/([^/]+)\/history$/);if(c&&o==="GET"){let u=decodeURIComponent(c[1]),h=parseInt(r.searchParams.get("limit")??"10",10);return await this.agentHistory(u,h,t)}let d=i.match(/^\/admin\/agents\/([^/]+)\/rollback$/);if(d&&o==="POST"){let u=decodeURIComponent(d[1]);return await this.rollbackAgent(u,e,t)}if(i==="/admin/servers"&&o==="GET")return await this.listServers(t);t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Not found"}))}catch(a){Dh.error("Admin API error",{error:String(a),path:i,method:o}),t.writeHead(500,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Internal server error"}))}}async readBody(e){return new Promise((t,s)=>{let r=[];e.on("data",i=>r.push(i)),e.on("end",()=>{try{t(JSON.parse(Buffer.concat(r).toString()))}catch{s(new Error("Invalid JSON"))}}),e.on("error",s)})}json(e,t,s){e.writeHead(t,{"Content-Type":"application/json"}),e.end(JSON.stringify(s))}async saveVersion(e,t){let s=await this.agentDefs.findOne({_id:e});s&&await this.agentVersions.insertOne({agentId:e,snapshot:s,changedFields:t,createdAt:new Date})}async listAgents(e){let t=await this.agentDefs.find().toArray();this.json(e,200,t)}async getAgent(e,t){let s=await this.agentDefs.findOne({_id:e});if(!s)return this.json(t,404,{error:"Agent not found"});this.json(t,200,s)}async createAgent(e,t){let s=await this.readBody(e);if(!s._id||!s.name||!s.model)return this.json(t,400,{error:"Required: _id, name, model"});if(await this.agentDefs.findOne({_id:s._id}))return this.json(t,409,{error:"Agent already exists"});let i=new Date,o={_id:s._id,name:s.name,model:s.model,icon:s.icon??te.icon,channels:s.channels??[],passiveChannels:s.passiveChannels??te.passiveChannels,keywords:s.keywords??te.keywords,isDefault:s.isDefault??!1,coreServers:s.coreServers??[],delegateServers:s.delegateServers??[],delegatePrompts:s.delegatePrompts??te.delegatePrompts,plugins:s.plugins,metadata:s.metadata,soul:s.soul??"",systemPrompt:s.systemPrompt??"",schedule:s.schedule??te.schedule,subscribe:s.subscribe,budgetUsd:s.budgetUsd??te.budgetUsd,maxTurns:s.maxTurns??te.maxTurns,maxConcurrent:s.maxConcurrent??te.maxConcurrent,timeoutMs:s.timeoutMs??te.timeoutMs,disabled:s.disabled??!1,slackBot:s.slackBot,createdAt:i,updatedAt:i,updatedBy:"admin-api"};await this.agentDefs.insertOne(o),this.onReload(),this.json(t,201,o)}async updateAgent(e,t,s){let r=await this.readBody(t);if(!await this.agentDefs.findOne({_id:e}))return this.json(s,404,{error:"Agent not found"});delete r._id,delete r.createdAt;let o=Object.keys(r);await this.saveVersion(e,o),await this.agentDefs.updateOne({_id:e},{$set:{...r,updatedAt:new Date,updatedBy:"admin-api"}}),this.onReload();let a=await this.agentDefs.findOne({_id:e});this.json(s,200,a)}async deleteAgent(e,t){if(!await this.agentDefs.findOne({_id:e}))return this.json(t,404,{error:"Agent not found"});await this.saveVersion(e,["_deleted"]),await this.agentDefs.deleteOne({_id:e}),this.onReload(),this.json(t,200,{deleted:e})}async toggleAgent(e,t,s){if(!await this.agentDefs.findOne({_id:e}))return this.json(s,404,{error:"Agent not found"});await this.saveVersion(e,["disabled"]),await this.agentDefs.updateOne({_id:e},{$set:{disabled:t==="disable",updatedAt:new Date,updatedBy:"admin-api"}}),this.onReload(),this.json(s,200,{[t+"d"]:e})}async agentHistory(e,t,s){let r=await this.agentVersions.find({agentId:e}).sort({createdAt:-1}).limit(t).toArray();this.json(s,200,r)}async rollbackAgent(e,t,s){let i=(await this.readBody(t)).version_index??0;if(typeof i!="number"||i<0||!Number.isInteger(i))return this.json(s,400,{error:"version_index must be a non-negative integer"});let o=await this.agentVersions.find({agentId:e}).sort({createdAt:-1}).skip(i).limit(1).toArray();if(o.length===0)return this.json(s,404,{error:"No version found at that index"});if(!await this.agentDefs.findOne({_id:e}))return this.json(s,404,{error:"Agent not found \u2014 cannot rollback a deleted agent"});await this.saveVersion(e,["_rollback"]);let{_id:l,...c}=o[0].snapshot;await this.agentDefs.updateOne({_id:e},{$set:{...c,updatedAt:new Date,updatedBy:"admin-api"}}),this.onReload();let d=await this.agentDefs.findOne({_id:e});this.json(s,200,d)}async listServers(e){this.json(e,200,{message:"Server registry \u2014 use agent_definitions.coreServers/delegateServers fields"})}};O();var kt=T("activity-logger"),Wr=class{db;collection;buffer=[];flushTimer=null;config;connected=!1;constructor(e,t){this.db=e,this.config=t}async connect(){if(!this.config.enabled){kt.info("Activity log disabled");return}this.collection=this.db.collection("activity_log"),await this.collection.createIndex({agentId:1,timestamp:-1}),await this.collection.createIndex({timestamp:1},{expireAfterSeconds:this.config.retentionDays*24*60*60}),this.connected=!0,this.flushTimer=setInterval(()=>{this.flush().catch(t=>kt.warn("Periodic flush failed",{error:String(t)}))},this.config.flushIntervalMs);let e=await this.collection.estimatedDocumentCount();kt.info("Activity log connected",{records:e,retentionDays:this.config.retentionDays})}record(e){!this.config.enabled||!this.connected||(this.buffer.push(e),this.buffer.length>=this.config.bufferSize&&this.flush().catch(t=>kt.warn("Buffer-full flush failed",{error:String(t)})))}async flush(){if(this.buffer.length===0)return;let e=this.buffer.splice(0);try{await this.collection.insertMany(e,{ordered:!1})}catch(t){kt.warn("Bulk write failed, retrying once",{count:e.length,error:String(t)});try{await this.collection.insertMany(e,{ordered:!1})}catch(s){kt.error("Bulk write failed after retry, dropping batch",{count:e.length,error:String(s)})}}}async stop(){this.flushTimer&&(clearInterval(this.flushTimer),this.flushTimer=null),this.buffer.length>0&&(kt.info("Draining activity buffer on shutdown",{count:this.buffer.length}),await this.flush()),this.connected=!1}};O();var Lh={id:"001-backfill-home-base",async run(n,e){let t=n.collection("agent_definitions"),s=t.find({homeBase:{$exists:!1}}),r=0,i=0;for await(let o of s){let a=o.channels?.find(l=>l.startsWith("agent-"))??o.channels?.[0];if(!a){e.warn("Cannot backfill homeBase \u2014 no channels",{agentId:o._id}),i++;continue}await t.updateOne({_id:o._id},{$set:{homeBase:a}}),r++}e.info("Backfill complete",{migration:"001-backfill-home-base",updated:r,skipped:i})}};var Vr=T("migrations"),Lb=[Lh];async function Ph(n,e=Lb){let t=n.collection("migrations");for(let s of e){if(await t.findOne({_id:s.id})){Vr.debug("Migration already applied, skipping",{id:s.id});continue}Vr.info("Running migration",{id:s.id}),await s.run(n,Vr),await t.insertOne({_id:s.id,ranAt:new Date}),Vr.info("Migration applied",{id:s.id})}}O();var vt=T("first-boot"),$h="hive/first-boot-greeting-sent",Rh="chief-of-staff";async function Bh(n,e,t,s){let r;try{r=await n.read($h)}catch(d){vt.warn("First-boot flag read failed \u2014 skipping check this startup",{error:String(d)});return}if(r){vt.debug("First-boot greeting already sent \u2014 skipping");return}let i=e.get(Rh),o=i?.homeBase??i?.channels?.[0];if(!o){vt.warn("First-boot: CoS agent has no homeBase or channels \u2014 skipping, will retry next startup");return}let a=s.get(o);if(!a){vt.warn("First-boot: could not resolve channel ID for CoS home channel",{channelName:o});return}try{await n.write($h,"true","system")}catch(d){vt.error("First-boot: flag write failed \u2014 aborting greeting dispatch",{error:String(d)});return}let l=Date.now(),c={id:`system:first-boot:${l}`,text:"First boot detected. Greet the owner and offer onboarding.",source:{kind:"slack",id:a,label:o,adapterId:"slack"},sender:"system",threadId:`first-boot:${l}`,timestamp:new Date,meta:{targetAgentId:Rh,systemTrigger:"first-boot"}};vt.info("First-boot: dispatching CoS greeting",{channel:o,channelId:a}),t.dispatch(c).catch(d=>{vt.error("First-boot greeting dispatch failed",{error:String(d)})})}var x=T("index");async function kk(){x.info("Hive starting up",{instance:m.instance.id,portBase:m.instance.portBase}),fc(ce,ui),pc(ce),cc(ce),gc(ui,Qe),m.gemini.apiKey&&(Zu(m.gemini.apiKey),x.info("Gemini vision enabled",{model:m.gemini.visionModel}));let n=new _k(m.mongo.uri);await n.connect();let e=n.db(m.mongo.dbName),t=e.collection("agent_definitions");await t.createIndex({channels:1}),await t.createIndex({disabled:1}),await Ph(e);let s,r,i,o=null,a=async()=>{if(!r||!i)return;x.info("Hot-reloading agent registry...");let N=await s.load();if(N.added.length&&x.info("New agents online",{agents:N.added}),N.updated.length&&x.info("Agents updated",{agents:N.updated}),N.removed.length){x.info("Agents removed",{agents:N.removed});for(let le of N.removed)r.stopAgent(le)}let B=s.getDisabled();for(let le of B)r.stopAgent(le.id);B.length&&x.info("Disabled agents stopped",{agents:B.map(le=>le.id)}),await i.reloadSchedules(),r.reloadSkills()};s=new ar(t,()=>{o&&clearTimeout(o),o=setTimeout(()=>a(),500)}),await s.load(),x.info("Agent registry loaded",{agents:s.listIds()});let l=new kr(m.mongo.uri,m.mongo.dbName);await l.init();let c=new jr(m.mongo.uri,m.mongo.dbName);await c.init(),l.memoryStore=c;let d=new Fr,u=new Gr(c,d,{hotBudgetTokens:m.memory.hotBudgetTokens,sweepIntervalHours:m.memory.sweepIntervalHours,hotThreshold:m.memory.hotThreshold,warmThreshold:m.memory.warmThreshold,recencyHalfLifeDays:m.memory.recencyHalfLifeDays,coldSummaryMinRecords:m.memory.coldSummaryMinRecords,coldRetentionDays:m.memory.coldRetentionDays,purgeRetentionDays:m.memory.purgeRetentionDays},m.autoDream);x.info("Structured memory lifecycle enabled");let h=new Ar(m.mongo.uri);await h.connect(m.mongo.dbName);let p;if(m.activity.enabled&&(p=new Wr(e,m.activity),await p.connect()),m.linear.apiKey){let N=new Ir(m.linear.apiKey,m.linear.teamId||void 0);x.info("Linear client configured")}let g=new Mr(m.taskLedger.apiUrl,m.taskLedger.apiKey);g.isConfigured&&x.info("Task ledger client configured",{apiUrl:m.taskLedger.apiUrl});let f=new Dr(m.taskLedger.apiUrl,m.taskLedger.agentKeys,m.taskLedger.apiKey);f.isConfigured&&x.info("Task ledger auto-tracking enabled",{apiUrl:m.taskLedger.apiUrl,agents:Object.keys(m.taskLedger.agentKeys)});let y,w;if(m.codeIndex.enabled){let{CodeIndexPrefetcher:N}=await Promise.resolve().then(()=>(jh(),qh)),{KnowledgeExtractor:B}=await Promise.resolve().then(()=>(Kh(),Fh));y=new N({mongoUri:m.mongo.uri,dbName:m.mongo.dbName,qdrantUrl:process.env.QDRANT_URL??"http://localhost:6333",ollamaUrl:process.env.OLLAMA_URL??"http://localhost:11434",scoreThreshold:m.codeIndex.scoreThreshold,prefetchLimit:m.codeIndex.prefetchLimit}),m.codeIndex.sessionKnowledge.enabled&&(w=new B(c,d)),x.info("Code index integration enabled",{prefetch:!0,sessionKnowledge:w!==void 0})}r=new br(s,l,h,p,y);let S=new Tr(r,l,s),b=new Cr(s,r,S,m.defaultAgent,f.isConfigured?f:void 0),A=new Lr(m.background.port,m.background.authToken,m.tasksDir.background,N=>b.dispatch(N).catch(B=>{x.error("Background task completion dispatch failed",{error:String(B)})}));await A.start(),await A.scanOrphans(),x.info("Background task manager started",{port:m.background.port});let v=new $r(m.codeTask.port,m.codeTask.authToken,m.codeTask.pluginDirs,m.codeTask.maxConcurrent,m.tasksDir.code,N=>b.dispatch(N).catch(B=>{x.error("Code task completion dispatch failed",{error:String(B)})}),{prefetcher:y,knowledgeExtractor:w,maxLifetimeMs:m.codeTask.maxLifetimeMs,staleGraceMs:m.codeTask.staleGraceMs});await v.start(),await v.scanOrphans(),x.info("Code task manager started",{port:m.codeTask.port});let C;m.recall.apiKey&&(C=new Rr(m.recall.monitorPort,m.recall.webhookSecret,N=>b.dispatch(N).catch(B=>{x.error("Meeting monitor dispatch failed",{error:String(B)})})),await C.start(),x.info("Meeting monitor started",{port:m.recall.monitorPort}),m.recall.apiKey&&!m.recall.webhookSecret&&x.error("Real-time transcript delivery disabled \u2014 RECALL_WEBHOOK_SECRET not set")),Sk(Qe)&&(bk(Qe,{recursive:!0},()=>{o&&clearTimeout(o),o=setTimeout(()=>a(),500)}),x.info("Skills hot-reload enabled",{watched:Qe})),process.on("SIGUSR1",()=>a()),x.info("Hot-reload enabled",{signal:"SIGUSR1"});let M=m.sms.lines.map(N=>N.slackChannel).filter(Boolean),_=new _r(m.slack.appToken,m.slack.botToken),P=new Er(_,s,M,"slack");b.registerAdapter(P),await P.start(N=>{b.dispatch(N).catch(B=>{x.error("Slack dispatch failed",{error:String(B),source:N.source.label})})}),x.info("Slack adapter connected");let U=new Map;try{let N;do{let rn=await _.client.conversations.list({types:"public_channel,private_channel",limit:1e3,cursor:N});for(let Je of rn.channels??[])Je.name&&Je.id&&U.set(Je.name,Je.id);N=rn.response_metadata?.next_cursor||void 0}while(N);let B=m.slack.auditChannel,le=B?U.get(B):void 0;b.setAuditChannel(P,U,le),x.info("Audit channel configured",{channels:U.size,fallback:B||null,fallbackResolved:!!le})}catch(N){x.warn("Failed to configure audit channel",{error:String(N)})}let z=new Nr(m.quo.apiKey,m.sms.lines);b.registerAdapter(z),m.quo.apiKey&&m.sms.lines.length>0&&(await z.start(N=>{b.dispatch(N).catch(B=>{x.error("SMS dispatch failed",{error:String(B),source:N.source.label})})}),x.info("SMS adapter started",{lines:m.sms.lines.length}));let j;m.imessage.enabled&&(j=new xr(m.imessage,m.mongo.uri,m.mongo.dbName,_,m.instance.id),b.registerAdapter(j),await j.start(N=>{b.dispatch(N).catch(B=>{x.error("iMessage dispatch failed",{error:String(B)})})}),x.info("iMessage adapter started"));let{AgentRunner:ae}=await Promise.resolve().then(()=>(pa(),zu));ae.registryRef=s;let{TeamStore:tn}=await Promise.resolve().then(()=>(Vh(),Wh)),{CommandRegistry:ts}=await Promise.resolve().then(()=>(Jh(),Yh)),Ve=new tn(m.mongo.uri,m.mongo.dbName);await Ve.connect();let ci=N=>{let B=s.getAll(),le=B.find(li=>li.id===N);if(le)return{id:le.id,name:le.name};let rn=N.toLowerCase(),Je=B.find(li=>li.name.toLowerCase()===rn);return Je?{id:Je.id,name:Je.name}:null},Ye=new ts(Ve,ci);b.setTeamStore(Ve),x.info("Team layer initialized");let{registerPluginCommands:sn}=await Promise.resolve().then(()=>(_a(),fh));await sn(r.getPlugins(),Ye);let Le;if(m.ws.enabled){let{WsAdapter:N}=await Promise.resolve().then(()=>(op(),ip));Le=new N(m.ws.port,{teamStore:Ve,commandRegistry:Ye,agentRegistry:s,agentManager:r}),b.registerAdapter(Le),await Le.start(B=>{b.dispatch(B).catch(le=>{x.error("WS dispatch failed",{error:String(le),source:B.source.label})})}),x.info("WebSocket adapter started",{port:m.ws.port})}let ss;if(m.ws.enabled){let{startBeekeeperRegistration:N}=await Promise.resolve().then(()=>(cp(),ap)),B=`hive-${m.instance.id}`;ss=N({beekeeperPort:m.beekeeper.port,wsPort:m.ws.port,capabilityName:B}),x.info("Beekeeper registration loop started",{beekeeperPort:m.beekeeper.port,wsPort:m.ws.port,capabilityName:B})}let H;if(m.voice.enabled&&m.voice.serverSecret){let{VoiceAdapter:N}=await Promise.resolve().then(()=>(wp(),yp));H=new N(m.voice.port,m.voice.serverSecret,s,l),await H.start(),x.info("Voice adapter started",{port:m.voice.port})}i=new vr(r,l,S,s,N=>{b.dispatch(N).catch(B=>{x.error("Callback dispatch failed",{error:String(B)})})}),await i.connectDb(m.mongo.uri,m.mongo.dbName),i.start(),x.info("Scheduler started"),await s.startWatching();let D;m.adminApi.token&&(D=new Hr(m.adminApi.port,m.adminApi.token,t,e.collection("agent_definition_versions"),()=>a()),await D.start(),x.info("Admin API started",{port:m.adminApi.port}));let L=new Ur({maxAttempts:m.sweeper.retryMaxAttempts,baseDelayMs:m.sweeper.retryBaseDelayMs});b.setRetryQueue(L);let ie=[P],nn=[_],Nt=new qr({intervalMs:m.sweeper.intervalMs,threadTtlMs:m.sweeper.threadTtlMs,taskFileTtlMs:m.sweeper.taskFileTtlMs,meetingSessionTtlMs:m.sweeper.meetingSessionTtlMs,cacheTtlMs:m.sweeper.cacheTtlMs,memorySweepIntervalHours:m.memory.sweepIntervalHours,dreamConfig:m.autoDream},{dispatcher:b,slackAdapters:ie,bgTaskManager:A,codeTaskManager:v,meetingMonitor:C,taskLedger:f.isConfigured?f:void 0,slackGateways:nn,agentManager:r,retryQueue:L,memoryLifecycle:u},g.isConfigured?g:void 0);Nt.start(),x.info("Sweeper started",{intervalMs:m.sweeper.intervalMs});let nc=async N=>{x.info("Shutdown signal received",{signal:N}),Nt.stop(),D?.stop(),s.stopWatching(),await z.stop(),j&&await j.stop(),ss?.stop(),Le&&await Le.stop(),H?.stop(),await Ve.close(),i.stop(),await A.stop(),await v.stop(),await y?.close(),C?.stop(),r.stopAll(),p&&await p.stop(),await h.close(),await c.close(),await P.stop(),await n.close(),x.info("Hive shut down cleanly"),process.exit(0)};process.on("SIGTERM",()=>nc("SIGTERM")),process.on("SIGINT",()=>nc("SIGINT")),x.info("Hive is running"),Bh(l,s,b,U).catch(N=>{x.error("First-boot check failed",{error:String(N)})})}process.on("unhandledRejection",n=>{x.error("Unhandled promise rejection",{error:String(n),stack:n instanceof Error?n.stack:void 0})});kk().catch(n=>{x.error("Fatal startup error",{error:String(n)}),process.exit(1)});