@keepur/hive 0.1.6 → 0.1.9
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/LICENSE +42 -0
- package/README.md +3 -1
- package/package.json +3 -1
- package/pkg/cli.min.js +101 -101
- package/pkg/mcp/admin.min.js +1 -1
- package/pkg/mcp/slack.min.js +44 -0
- package/pkg/server.min.js +213 -179
- package/templates/constitution-bootstrap.md.tpl +18 -0
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
|
|
3
|
-
`)}function
|
|
4
|
-
`);let s;for(;(s=
|
|
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=ee.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=ee.decrypt(l.ciphertext,l.key);break}catch(a){if(o+1>=r)throw a}return ee.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=ee._parseVault(n),r=process.env;return n&&n.processEnv!=null&&(r=n.processEnv),ee.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=ee.parse(Si.readFileSync(d,{encoding:t}));ee.populate(l,u,n)}catch(u){r&&rs(`failed to load ${d} ${u.message}`),a=u}let c=ee.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 ee.configDotenv(n);let e=_c(n);return e?ee._configVault(n):(Hp(`you set DOTENV_KEY but you are missing a .env.vault file at ${e}`),ee.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 ee={configDotenv:Yp,_configVault:Vp,_parseVault:Gp,config:Jp,decrypt:zp,parse:Kp,populate:Qp};$e.exports.configDotenv=ee.configDotenv;$e.exports._configVault=ee._configVault;$e.exports._parseVault=ee._parseVault;$e.exports.config=ee.config;$e.exports.decrypt=ee.decrypt;$e.exports.parse=ee.parse;$e.exports.populate=ee.populate;$e.exports=ee});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 te=$(),de=Symbol("break visit"),Cc=Symbol("skip children"),Ee=Symbol("remove node");function un(n,e){let t=Ec(e);te.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(te.isNode(r)||te.isPair(r))return Oc(n,s,r),xt(n,r,t,s);if(typeof r!="symbol"){if(te.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(te.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);te.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(te.isNode(r)||te.isPair(r))return Oc(n,s,r),Mt(n,r,t,s);if(typeof r!="symbol"){if(te.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(te.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(te.isMap(e))return t.Map?.(n,e,s);if(te.isSeq(e))return t.Seq?.(n,e,s);if(te.isPair(e))return t.Pair?.(n,e,s);if(te.isScalar(e))return t.Scalar?.(n,e,s);if(te.isAlias(e))return t.Alias?.(n,e,s)}function Oc(n,e,t){let s=e[e.length-1];if(te.isCollection(s))s.items[n]=t;else if(te.isPair(s))n==="key"?s.key=t:s.value=t;else if(te.isDocument(s))s.contents=t;else{let r=te.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
|
-
`)}};
|
|
7
|
-
`)?
|
|
2
|
+
var Cp=Object.create;var fi=Object.defineProperty;var Ap=Object.getOwnPropertyDescriptor;var Ep=Object.getOwnPropertyNames;var Np=Object.getPrototypeOf,xp=Object.prototype.hasOwnProperty;var H=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var K=(r,e)=>()=>(r&&(e=r(r=0)),e);var T=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Le=(r,e)=>{for(var t in e)fi(r,t,{get:e[t],enumerable:!0})},Op=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Ep(e))!xp.call(r,n)&&n!==t&&fi(r,n,{get:()=>e[n],enumerable:!(s=Ap(e,n))||s.enumerable});return r};var ve=(r,e,t)=>(t=r!=null?Cp(Np(r)):{},Op(e||!r||!r.__esModule?fi(t,"default",{value:r,enumerable:!0}):t,r));import{existsSync as Mp}from"node:fs";import{resolve as Ye}from"node:path";function Lp(){return process.env.HIVE_HOME?Ye(process.env.HIVE_HOME):Mp(Ye(process.cwd(),"hive.yaml"))?process.cwd():Ye(Dp,".hive")}function uc(r){let e=process.env.HIVE_CONFIG||"hive.yaml";return Ye(r,e)}function hc(r){let t=(process.env.HIVE_CONFIG||"hive.yaml").match(/^hive-(.+)\.yaml$/)?.[1];return Ye(r,t?`.env-${t}`:".env")}var Dp,ce,Je,pi,fc,is=K(()=>{"use strict";Dp=process.env.HOME??"/tmp";ce=Lp(),Je=Ye(ce,"skills"),pi=Ye(ce,".hive"),fc=Ye(import.meta.dirname,"..","seeds")});function an(r,e,t,s){if(pc[r]<pc[Pp])return;let n={ts:new Date().toISOString(),level:r,component:e,msg:t,...s};(r==="error"?process.stderr:process.stdout).write(JSON.stringify(n)+`
|
|
3
|
+
`)}function b(r){return{debug:(e,t)=>an("debug",r,e,t),info:(e,t)=>an("info",r,e,t),warn:(e,t)=>an("warn",r,e,t),error:(e,t)=>an("error",r,e,t)}}var pc,Pp,x=K(()=>{"use strict";pc={debug:0,info:1,warn:2,error:3},Pp=process.env.LOG_LEVEL||"info"});import{execFileSync as mi}from"node:child_process";import{existsSync as gi,mkdirSync as $p,unlinkSync as Rp}from"node:fs";import{resolve as yi,join as Bp}from"node:path";function mc(r){let e=yi(r,".hive","git");if(gi(e))return;$p(yi(r,".hive"),{recursive:!0});let t=(...s)=>mi("git",[...s],{cwd:r,env:{...process.env,GIT_DIR:e,GIT_WORK_TREE:r},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 gc(r,e,t,s){let n=yi(r,".hive","git");if(!gi(n)){cn.warn("Instance git not initialized \u2014 skipping state commit");return}let i=Bp(n,"state-index.tmp"),o={...process.env,GIT_DIR:n,GIT_WORK_TREE:r,GIT_INDEX_FILE:i},a=(...l)=>mi("git",[...l],{cwd:r,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=mi("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{gi(i)&&Rp(i)}catch{}}}var cn,wi=K(()=>{"use strict";x();cn=b("instance-git")});var Nc=T((av,Pe)=>{var _i=H("fs"),ln=H("path"),Hp=H("os"),Wp=H("crypto"),Tc=["\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 Gp(){return Tc[Math.floor(Math.random()*Tc.length)]}function Mt(r){return typeof r=="string"?!["false","0","no","off",""].includes(r.toLowerCase()):!!r}function Vp(){return process.stdout.isTTY}function Yp(r){return Vp()?`\x1B[2m${r}\x1B[0m`:r}var Jp=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function zp(r){let e={},t=r.toString();t=t.replace(/\r\n?/mg,`
|
|
4
|
+
`);let s;for(;(s=Jp.exec(t))!=null;){let n=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[n]=i}return e}function Qp(r){r=r||{};let e=Ec(r);r.path=e;let t=te.configDotenv(r);if(!t.parsed){let o=new Error(`MISSING_DATA: Cannot parse ${e} for an unknown reason`);throw o.code="MISSING_DATA",o}let s=Ac(r).split(","),n=s.length,i;for(let o=0;o<n;o++)try{let a=s[o].trim(),l=Zp(t,a);i=te.decrypt(l.ciphertext,l.key);break}catch(a){if(o+1>=n)throw a}return te.parse(i)}function Xp(r){console.error(`\u26A0 ${r}`)}function os(r){console.log(`\u2506 ${r}`)}function Cc(r){console.log(`\u25C7 ${r}`)}function Ac(r){return r&&r.DOTENV_KEY&&r.DOTENV_KEY.length>0?r.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function Zp(r,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 n=t.searchParams.get("environment");if(!n){let a=new Error("INVALID_DOTENV_KEY: Missing environment part");throw a.code="INVALID_DOTENV_KEY",a}let i=`DOTENV_VAULT_${n.toUpperCase()}`,o=r.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 Ec(r){let e=null;if(r&&r.path&&r.path.length>0)if(Array.isArray(r.path))for(let t of r.path)_i.existsSync(t)&&(e=t.endsWith(".vault")?t:`${t}.vault`);else e=r.path.endsWith(".vault")?r.path:`${r.path}.vault`;else e=ln.resolve(process.cwd(),".env.vault");return _i.existsSync(e)?e:null}function Ic(r){return r[0]==="~"?ln.join(Hp.homedir(),r.slice(1)):r}function em(r){let e=Mt(process.env.DOTENV_CONFIG_DEBUG||r&&r.debug),t=Mt(process.env.DOTENV_CONFIG_QUIET||r&&r.quiet);(e||!t)&&Cc("loading env from encrypted .env.vault");let s=te._parseVault(r),n=process.env;return r&&r.processEnv!=null&&(n=r.processEnv),te.populate(n,s,r),{parsed:s}}function tm(r){let e=ln.resolve(process.cwd(),".env"),t="utf8",s=process.env;r&&r.processEnv!=null&&(s=r.processEnv);let n=Mt(s.DOTENV_CONFIG_DEBUG||r&&r.debug),i=Mt(s.DOTENV_CONFIG_QUIET||r&&r.quiet);r&&r.encoding?t=r.encoding:n&&os("no encoding is specified (UTF-8 is used by default)");let o=[e];if(r&&r.path)if(!Array.isArray(r.path))o=[Ic(r.path)];else{o=[];for(let d of r.path)o.push(Ic(d))}let a,l={};for(let d of o)try{let u=te.parse(_i.readFileSync(d,{encoding:t}));te.populate(l,u,r)}catch(u){n&&os(`failed to load ${d} ${u.message}`),a=u}let c=te.populate(s,l,r);if(n=Mt(s.DOTENV_CONFIG_DEBUG||n),i=Mt(s.DOTENV_CONFIG_QUIET||i),n||!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){n&&os(`failed to load ${h} ${p.message}`),a=p}Cc(`injected env (${d}) from ${u.join(",")} ${Yp(`// tip: ${Gp()}`)}`)}return a?{parsed:l,error:a}:{parsed:l}}function sm(r){if(Ac(r).length===0)return te.configDotenv(r);let e=Ec(r);return e?te._configVault(r):(Xp(`you set DOTENV_KEY but you are missing a .env.vault file at ${e}`),te.configDotenv(r))}function nm(r,e){let t=Buffer.from(e.slice(-64),"hex"),s=Buffer.from(r,"base64"),n=s.subarray(0,12),i=s.subarray(-16);s=s.subarray(12,-16);try{let o=Wp.createDecipheriv("aes-256-gcm",t,n);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 rm(r,e,t={}){let s=!!(t&&t.debug),n=!!(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(r,o)?(n===!0&&(r[o]=e[o],i[o]=e[o]),s&&os(n===!0?`"${o}" is already defined and WAS overwritten`:`"${o}" is already defined and was NOT overwritten`)):(r[o]=e[o],i[o]=e[o]);return i}var te={configDotenv:tm,_configVault:em,_parseVault:Qp,config:sm,decrypt:nm,parse:zp,populate:rm};Pe.exports.configDotenv=te.configDotenv;Pe.exports._configVault=te._configVault;Pe.exports._parseVault=te._parseVault;Pe.exports.config=te.config;Pe.exports.decrypt=te.decrypt;Pe.exports.parse=te.parse;Pe.exports.populate=te.populate;Pe.exports=te});var R=T(ae=>{"use strict";var vi=Symbol.for("yaml.alias"),xc=Symbol.for("yaml.document"),dn=Symbol.for("yaml.map"),Oc=Symbol.for("yaml.pair"),Ti=Symbol.for("yaml.scalar"),un=Symbol.for("yaml.seq"),$e=Symbol.for("yaml.node.type"),im=r=>!!r&&typeof r=="object"&&r[$e]===vi,om=r=>!!r&&typeof r=="object"&&r[$e]===xc,am=r=>!!r&&typeof r=="object"&&r[$e]===dn,cm=r=>!!r&&typeof r=="object"&&r[$e]===Oc,Mc=r=>!!r&&typeof r=="object"&&r[$e]===Ti,lm=r=>!!r&&typeof r=="object"&&r[$e]===un;function Dc(r){if(r&&typeof r=="object")switch(r[$e]){case dn:case un:return!0}return!1}function dm(r){if(r&&typeof r=="object")switch(r[$e]){case vi:case dn:case Ti:case un:return!0}return!1}var um=r=>(Mc(r)||Dc(r))&&!!r.anchor;ae.ALIAS=vi;ae.DOC=xc;ae.MAP=dn;ae.NODE_TYPE=$e;ae.PAIR=Oc;ae.SCALAR=Ti;ae.SEQ=un;ae.hasAnchor=um;ae.isAlias=im;ae.isCollection=Dc;ae.isDocument=om;ae.isMap=am;ae.isNode=dm;ae.isPair=cm;ae.isScalar=Mc;ae.isSeq=lm});var as=T(Ii=>{"use strict";var se=R(),de=Symbol("break visit"),Lc=Symbol("skip children"),Ne=Symbol("remove node");function hn(r,e){let t=Pc(e);se.isDocument(r)?Dt(null,r.contents,t,Object.freeze([r]))===Ne&&(r.contents=null):Dt(null,r,t,Object.freeze([]))}hn.BREAK=de;hn.SKIP=Lc;hn.REMOVE=Ne;function Dt(r,e,t,s){let n=$c(r,e,t,s);if(se.isNode(n)||se.isPair(n))return Rc(r,s,n),Dt(r,n,t,s);if(typeof n!="symbol"){if(se.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===Ne&&(e.items.splice(i,1),i-=1)}}}else if(se.isPair(e)){s=Object.freeze(s.concat(e));let i=Dt("key",e.key,t,s);if(i===de)return de;i===Ne&&(e.key=null);let o=Dt("value",e.value,t,s);if(o===de)return de;o===Ne&&(e.value=null)}}return n}async function fn(r,e){let t=Pc(e);se.isDocument(r)?await Lt(null,r.contents,t,Object.freeze([r]))===Ne&&(r.contents=null):await Lt(null,r,t,Object.freeze([]))}fn.BREAK=de;fn.SKIP=Lc;fn.REMOVE=Ne;async function Lt(r,e,t,s){let n=await $c(r,e,t,s);if(se.isNode(n)||se.isPair(n))return Rc(r,s,n),Lt(r,n,t,s);if(typeof n!="symbol"){if(se.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===Ne&&(e.items.splice(i,1),i-=1)}}}else if(se.isPair(e)){s=Object.freeze(s.concat(e));let i=await Lt("key",e.key,t,s);if(i===de)return de;i===Ne&&(e.key=null);let o=await Lt("value",e.value,t,s);if(o===de)return de;o===Ne&&(e.value=null)}}return n}function Pc(r){return typeof r=="object"&&(r.Collection||r.Node||r.Value)?Object.assign({Alias:r.Node,Map:r.Node,Scalar:r.Node,Seq:r.Node},r.Value&&{Map:r.Value,Scalar:r.Value,Seq:r.Value},r.Collection&&{Map:r.Collection,Seq:r.Collection},r):r}function $c(r,e,t,s){if(typeof t=="function")return t(r,e,s);if(se.isMap(e))return t.Map?.(r,e,s);if(se.isSeq(e))return t.Seq?.(r,e,s);if(se.isPair(e))return t.Pair?.(r,e,s);if(se.isScalar(e))return t.Scalar?.(r,e,s);if(se.isAlias(e))return t.Alias?.(r,e,s)}function Rc(r,e,t){let s=e[e.length-1];if(se.isCollection(s))s.items[r]=t;else if(se.isPair(s))r==="key"?s.key=t:s.value=t;else if(se.isDocument(s))s.contents=t;else{let n=se.isAlias(s)?"alias":"scalar";throw new Error(`Cannot replace node with ${n} parent`)}}Ii.visit=hn;Ii.visitAsync=fn});var Ci=T(Uc=>{"use strict";var Bc=R(),hm=as(),fm={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},pm=r=>r.replace(/[!,[\]{}]/g,e=>fm[e]),cs=class r{constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},r.defaultYaml,e),this.tags=Object.assign({},r.defaultTags,t)}clone(){let e=new r(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){let e=new r(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:r.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},r.defaultTags);break}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:r.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},r.defaultTags),this.atNextDocument=!1);let s=e.trim().split(/[ \t]+/),n=s.shift();switch(n){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 ${n}`,!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,n]=e.match(/^(.*!)([^!]*)$/s);n||t(`The ${e} tag has no suffix`);let i=this.tags[s];if(i)try{return i+decodeURIComponent(n)}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+pm(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),n;if(e&&s.length>0&&Bc.isNode(e.contents)){let i={};hm.visit(e.contents,(o,a)=>{Bc.isNode(a)&&a.tag&&(i[a.tag]=!0)}),n=Object.keys(i)}else n=[];for(let[i,o]of s)i==="!!"&&o==="tag:yaml.org,2002:"||(!e||n.some(a=>a.startsWith(o)))&&t.push(`%TAG ${i} ${o}`);return t.join(`
|
|
6
|
+
`)}};cs.defaultYaml={explicit:!1,version:"1.2"};cs.defaultTags={"!!":"tag:yaml.org,2002:"};Uc.Directives=cs});var pn=T(ls=>{"use strict";var qc=R(),mm=as();function gm(r){if(/[\x00-\x19\s,[\]{}]/.test(r)){let t=`Anchor must not contain whitespace or control characters: ${JSON.stringify(r)}`;throw new Error(t)}return!0}function jc(r){let e=new Set;return mm.visit(r,{Value(t,s){s.anchor&&e.add(s.anchor)}}),e}function Fc(r,e){for(let t=1;;++t){let s=`${r}${t}`;if(!e.has(s))return s}}function ym(r,e){let t=[],s=new Map,n=null;return{onAnchor:i=>{t.push(i),n??(n=jc(r));let o=Fc(e,n);return n.add(o),o},setAnchors:()=>{for(let i of t){let o=s.get(i);if(typeof o=="object"&&o.anchor&&(qc.isScalar(o.node)||qc.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}}ls.anchorIsValid=gm;ls.anchorNames=jc;ls.createNodeAnchors=ym;ls.findNewAnchor=Fc});var Ai=T(Kc=>{"use strict";function ds(r,e,t,s){if(s&&typeof s=="object")if(Array.isArray(s))for(let n=0,i=s.length;n<i;++n){let o=s[n],a=ds(r,s,String(n),o);a===void 0?delete s[n]:a!==o&&(s[n]=a)}else if(s instanceof Map)for(let n of Array.from(s.keys())){let i=s.get(n),o=ds(r,s,n,i);o===void 0?s.delete(n):o!==i&&s.set(n,o)}else if(s instanceof Set)for(let n of Array.from(s)){let i=ds(r,s,n,n);i===void 0?s.delete(n):i!==n&&(s.delete(n),s.add(i))}else for(let[n,i]of Object.entries(s)){let o=ds(r,s,n,i);o===void 0?delete s[n]:o!==i&&(s[n]=o)}return r.call(e,t,s)}Kc.applyReviver=ds});var ze=T(Wc=>{"use strict";var wm=R();function Hc(r,e,t){if(Array.isArray(r))return r.map((s,n)=>Hc(s,String(n),t));if(r&&typeof r.toJSON=="function"){if(!t||!wm.hasAnchor(r))return r.toJSON(e,t);let s={aliasCount:0,count:1,res:void 0};t.anchors.set(r,s),t.onCreate=i=>{s.res=i,delete t.onCreate};let n=r.toJSON(e,t);return t.onCreate&&t.onCreate(n),n}return typeof r=="bigint"&&!t?.keep?Number(r):r}Wc.toJS=Hc});var mn=T(Vc=>{"use strict";var Sm=Ai(),Gc=R(),km=ze(),Ei=class{constructor(e){Object.defineProperty(this,Gc.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:n,reviver:i}={}){if(!Gc.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=km.toJS(this,"",o);if(typeof n=="function")for(let{count:l,res:c}of o.anchors.values())n(c,l);return typeof i=="function"?Sm.applyReviver(i,{"":a},"",a):a}};Vc.NodeBase=Ei});var us=T(Yc=>{"use strict";var bm=pn(),_m=as(),Pt=R(),vm=mn(),Tm=ze(),Ni=class extends vm.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=[],_m.visit(e,{Node:(i,o)=>{(Pt.isAlias(o)||Pt.hasAnchor(o))&&s.push(o)}}),t&&(t.aliasResolveCache=s));let n;for(let i of s){if(i===this)break;i.anchor===this.source&&(n=i)}return n}toJSON(e,t){if(!t)return{source:this.source};let{anchors:s,doc:n,maxAliasCount:i}=t,o=this.resolve(n,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||(Tm.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(n,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 n=`*${this.source}`;if(e){if(bm.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`${n} `}return n}};function gn(r,e,t){if(Pt.isAlias(e)){let s=e.resolve(r),n=t&&s&&t.get(s);return n?n.count*n.aliasCount:0}else if(Pt.isCollection(e)){let s=0;for(let n of e.items){let i=gn(r,n,t);i>s&&(s=i)}return s}else if(Pt.isPair(e)){let s=gn(r,e.key,t),n=gn(r,e.value,t);return Math.max(s,n)}return 1}Yc.Alias=Ni});var Z=T(xi=>{"use strict";var Im=R(),Cm=mn(),Am=ze(),Em=r=>!r||typeof r!="function"&&typeof r!="object",Qe=class extends Cm.NodeBase{constructor(e){super(Im.SCALAR),this.value=e}toJSON(e,t){return t?.keep?this.value:Am.toJS(this.value,e,t)}toString(){return String(this.value)}};Qe.BLOCK_FOLDED="BLOCK_FOLDED";Qe.BLOCK_LITERAL="BLOCK_LITERAL";Qe.PLAIN="PLAIN";Qe.QUOTE_DOUBLE="QUOTE_DOUBLE";Qe.QUOTE_SINGLE="QUOTE_SINGLE";xi.Scalar=Qe;xi.isScalarValue=Em});var hs=T(zc=>{"use strict";var Nm=us(),ft=R(),Jc=Z(),xm="tag:yaml.org,2002:";function Om(r,e,t){if(e){let s=t.filter(i=>i.tag===e),n=s.find(i=>!i.format)??s[0];if(!n)throw new Error(`Tag ${e} not found`);return n}return t.find(s=>s.identify?.(r)&&!s.format)}function Mm(r,e,t){if(ft.isDocument(r)&&(r=r.contents),ft.isNode(r))return r;if(ft.isPair(r)){let u=t.schema[ft.MAP].createNode?.(t.schema,null,t);return u.items.push(r),u}(r instanceof String||r instanceof Number||r instanceof Boolean||typeof BigInt<"u"&&r instanceof BigInt)&&(r=r.valueOf());let{aliasDuplicateObjects:s,onAnchor:n,onTagObj:i,schema:o,sourceObjects:a}=t,l;if(s&&r&&typeof r=="object"){if(l=a.get(r),l)return l.anchor??(l.anchor=n(r)),new Nm.Alias(l.anchor);l={anchor:null,node:null},a.set(r,l)}e?.startsWith("!!")&&(e=xm+e.slice(2));let c=Om(r,e,o.tags);if(!c){if(r&&typeof r.toJSON=="function"&&(r=r.toJSON()),!r||typeof r!="object"){let u=new Jc.Scalar(r);return l&&(l.node=u),u}c=r instanceof Map?o[ft.MAP]:Symbol.iterator in Object(r)?o[ft.SEQ]:o[ft.MAP]}i&&(i(c),delete t.onTagObj);let d=c?.createNode?c.createNode(t.schema,r,t):typeof c?.nodeClass?.from=="function"?c.nodeClass.from(t.schema,r,t):new Jc.Scalar(r);return e?d.tag=e:c.default||(d.tag=c.tag),l&&(l.node=d),d}zc.createNode=Mm});var wn=T(yn=>{"use strict";var Dm=hs(),xe=R(),Lm=mn();function Oi(r,e,t){let s=t;for(let n=e.length-1;n>=0;--n){let i=e[n];if(typeof i=="number"&&Number.isInteger(i)&&i>=0){let o=[];o[i]=s,s=o}else s=new Map([[i,s]])}return Dm.createNode(s,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw new Error("This should not happen, please report a bug.")},schema:r,sourceObjects:new Map})}var Qc=r=>r==null||typeof r=="object"&&!!r[Symbol.iterator]().next().done,Mi=class extends Lm.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=>xe.isNode(s)||xe.isPair(s)?s.clone(e):s),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(Qc(e))this.add(t);else{let[s,...n]=e,i=this.get(s,!0);if(xe.isCollection(i))i.addIn(n,t);else if(i===void 0&&this.schema)this.set(s,Oi(this.schema,n,t));else throw new Error(`Expected YAML collection at ${s}. Remaining path: ${n}`)}}deleteIn(e){let[t,...s]=e;if(s.length===0)return this.delete(t);let n=this.get(t,!0);if(xe.isCollection(n))return n.deleteIn(s);throw new Error(`Expected YAML collection at ${t}. Remaining path: ${s}`)}getIn(e,t){let[s,...n]=e,i=this.get(s,!0);return n.length===0?!t&&xe.isScalar(i)?i.value:i:xe.isCollection(i)?i.getIn(n,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!xe.isPair(t))return!1;let s=t.value;return s==null||e&&xe.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 n=this.get(t,!0);return xe.isCollection(n)?n.hasIn(s):!1}setIn(e,t){let[s,...n]=e;if(n.length===0)this.set(s,t);else{let i=this.get(s,!0);if(xe.isCollection(i))i.setIn(n,t);else if(i===void 0&&this.schema)this.set(s,Oi(this.schema,n,t));else throw new Error(`Expected YAML collection at ${s}. Remaining path: ${n}`)}}};yn.Collection=Mi;yn.collectionFromPath=Oi;yn.isEmptyPath=Qc});var fs=T(Sn=>{"use strict";var Pm=r=>r.replace(/^(?!$)(?: $)?/gm,"#");function Di(r,e){return/^\n+$/.test(r)?r.substring(1):e?r.replace(/^(?! *$)/gm,e):r}var $m=(r,e,t)=>r.endsWith(`
|
|
7
|
+
`)?Di(t,e):t.includes(`
|
|
8
8
|
`)?`
|
|
9
|
-
`+
|
|
10
|
-
`)t===
|
|
11
|
-
`&&p!==" "){let
|
|
12
|
-
`&&
|
|
13
|
-
${e}${
|
|
14
|
-
${e}${
|
|
15
|
-
`);s=e,
|
|
16
|
-
`){if(i-o>s)return!0;if(o=i+1,
|
|
9
|
+
`+Di(t,e):(r.endsWith(" ")?"":" ")+t;Sn.indentComment=Di;Sn.lineComment=$m;Sn.stringifyComment=Pm});var Zc=T(ps=>{"use strict";var Rm="flow",Li="block",kn="quoted";function Bm(r,e,t="flow",{indentAtStart:s,lineWidth:n=80,minContentWidth:i=20,onFold:o,onOverflow:a}={}){if(!n||n<0)return r;n<i&&(i=0);let l=Math.max(1+i,1+n-e.length);if(r.length<=l)return r;let c=[],d={},u=n-e.length;typeof s=="number"&&(s>n-Math.max(2,i)?c.push(0):u=n-s);let h,p,m=!1,f=-1,y=-1,w=-1;t===Li&&(f=Xc(r,f,e.length),f!==-1&&(u=f+l));for(let k;k=r[f+=1];){if(t===kn&&k==="\\"){switch(y=f,r[f+1]){case"x":f+=3;break;case"u":f+=5;break;case"U":f+=9;break;default:f+=1}w=f}if(k===`
|
|
10
|
+
`)t===Li&&(f=Xc(r,f,e.length)),u=f+e.length+l,h=void 0;else{if(k===" "&&p&&p!==" "&&p!==`
|
|
11
|
+
`&&p!==" "){let I=r[f+1];I&&I!==" "&&I!==`
|
|
12
|
+
`&&I!==" "&&(h=f)}if(f>=u)if(h)c.push(h),u=h+l,h=void 0;else if(t===kn){for(;p===" "||p===" ";)p=k,k=r[f+=1],m=!0;let I=f>w+1?f-2:y-1;if(d[I])return r;c.push(I),d[I]=!0,u=I+l,h=void 0}else m=!0}p=k}if(m&&a&&a(),c.length===0)return r;o&&o();let S=r.slice(0,c[0]);for(let k=0;k<c.length;++k){let I=c[k],v=c[k+1]||r.length;I===0?S=`
|
|
13
|
+
${e}${r.slice(0,v)}`:(t===kn&&d[I]&&(S+=`${r[I]}\\`),S+=`
|
|
14
|
+
${e}${r.slice(I+1,v)}`)}return S}function Xc(r,e,t){let s=e,n=e+1,i=r[n];for(;i===" "||i===" ";)if(e<n+t)i=r[++e];else{do i=r[++e];while(i&&i!==`
|
|
15
|
+
`);s=e,n=e+1,i=r[n]}return s}ps.FOLD_BLOCK=Li;ps.FOLD_FLOW=Rm;ps.FOLD_QUOTED=kn;ps.foldFlowLines=Bm});var gs=T(el=>{"use strict";var Te=Z(),Xe=Zc(),_n=(r,e)=>({indentAtStart:e?r.indent.length:r.indentAtStart,lineWidth:r.options.lineWidth,minContentWidth:r.options.minContentWidth}),vn=r=>/^(%|---|\.\.\.)/m.test(r);function Um(r,e,t){if(!e||e<0)return!1;let s=e-t,n=r.length;if(n<=s)return!1;for(let i=0,o=0;i<n;++i)if(r[i]===`
|
|
16
|
+
`){if(i-o>s)return!0;if(o=i+1,n-o<=s)return!1}return!0}function ms(r,e){let t=JSON.stringify(r);if(e.options.doubleQuotedAsJSON)return t;let{implicitKey:s}=e,n=e.options.doubleQuotedMinMultiLineLength,i=e.indent||(vn(r)?" ":""),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<n)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:
|
|
20
|
-
`)||/[ \t]\n|\n[ \t]/.test(
|
|
21
|
-
${t}`)+"'";return e.implicitKey?s:
|
|
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:Xe.foldFlowLines(o,i,Xe.FOLD_QUOTED,_n(e,!1))}function Pi(r,e){if(e.options.singleQuote===!1||e.implicitKey&&r.includes(`
|
|
20
|
+
`)||/[ \t]\n|\n[ \t]/.test(r))return ms(r,e);let t=e.indent||(vn(r)?" ":""),s="'"+r.replace(/'/g,"''").replace(/\n+/g,`$&
|
|
21
|
+
${t}`)+"'";return e.implicitKey?s:Xe.foldFlowLines(s,t,Xe.FOLD_FLOW,_n(e,!1))}function $t(r,e){let{singleQuote:t}=e.options,s;if(t===!1)s=ms;else{let n=r.includes('"'),i=r.includes("'");n&&!i?s=Pi:i&&!n?s=ms:s=t?Pi:ms}return s(r,e)}var $i;try{$i=new RegExp(`(^|(?<!
|
|
22
22
|
))
|
|
23
23
|
+(?!
|
|
24
|
-
|$)`,"g")}catch{
|
|
24
|
+
|$)`,"g")}catch{$i=/\n+(?!\n|$)/g}function bn({comment:r,type:e,value:t},s,n,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:!Um(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
|
-
`&&v!==" "&&v!==" ")break}let p=t.substring(h),
|
|
28
|
-
`);
|
|
29
|
-
`&&(p=p.slice(0,-1)),p=p.replace(
|
|
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
|
|
31
|
-
$&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${c}`),
|
|
32
|
-
${c}${
|
|
33
|
-
${c}${S}${t}${p}`}function
|
|
34
|
-
`)||d&&/[[\]{},]/.test(i))return
|
|
35
|
-
`)
|
|
36
|
-
`))return bn(
|
|
37
|
-
${l}`);if(o){let h=f=>f.default&&f.tag!=="tag:yaml.org,2002:str"&&f.test?.test(u),{compat:p,tags:
|
|
38
|
-
${e.indent}${a}`:a}
|
|
39
|
-
${a}:`):(y=`${y}:`,h&&(y+=
|
|
40
|
-
`:"",S){let
|
|
41
|
-
${
|
|
42
|
-
`&&
|
|
43
|
-
|
|
44
|
-
`):
|
|
45
|
-
${t.indent}`}else if(!p&&
|
|
46
|
-
`),
|
|
27
|
+
`&&v!==" "&&v!==" ")break}let p=t.substring(h),m=p.indexOf(`
|
|
28
|
+
`);m===-1?u="-":t===p||m!==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($i,`$&${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
|
+
`)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 I=(f?c?"2":"1":"")+u;if(r&&(I+=" "+a(r.replace(/ ?[\r\n]+/g," ")),n&&n()),!d){let v=t.replace(/\n+/g,`
|
|
31
|
+
$&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${c}`),N=!1,D=_n(s,!0);o!=="folded"&&e!==Te.Scalar.BLOCK_FOLDED&&(D.onOverflow=()=>{N=!0});let C=Xe.foldFlowLines(`${S}${v}${p}`,c,Xe.FOLD_BLOCK,D);if(!N)return`>${I}
|
|
32
|
+
${c}${C}`}return t=t.replace(/\n+/g,`$&${c}`),`|${I}
|
|
33
|
+
${c}${S}${t}${p}`}function qm(r,e,t,s){let{type:n,value:i}=r,{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):bn(r,e,t,s);if(!a&&!d&&n!==Te.Scalar.PLAIN&&i.includes(`
|
|
36
|
+
`))return bn(r,e,t,s);if(vn(i)){if(l==="")return e.forceBlockIndent=!0,bn(r,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:m}=e.doc.schema;if(m.some(h)||p?.some(h))return $t(i,e)}return a?u:Xe.foldFlowLines(u,l,Xe.FOLD_FLOW,_n(e,!1))}function jm(r,e,t,s){let{implicitKey:n,inFlow:i}=e,o=typeof r.value=="string"?r:Object.assign({},r,{value:String(r.value)}),{type:a}=r;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 n||i?$t(o.value,e):bn(o,e,t,s);case Te.Scalar.QUOTE_DOUBLE:return ms(o.value,e);case Te.Scalar.QUOTE_SINGLE:return Pi(o.value,e);case Te.Scalar.PLAIN:return qm(o,e,t,s);default:return null}},c=l(a);if(c===null){let{defaultKeyType:d,defaultStringType:u}=e.options,h=n&&d||u;if(c=l(h),c===null)throw new Error(`Unsupported default string type ${h}`)}return c}el.stringifyString=jm});var ys=T(Ri=>{"use strict";var Fm=pn(),Ze=R(),Km=fs(),Hm=gs();function Wm(r,e){let t=Object.assign({blockQuote:!0,commentString:Km.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},r.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:r,flowCollectionPadding:t.flowCollectionPadding?" ":"",indent:"",indentStep:typeof t.indent=="number"?" ".repeat(t.indent):" ",inFlow:s,options:t}}function Gm(r,e){if(e.tag){let n=r.filter(i=>i.tag===e.tag);if(n.length>0)return n.find(i=>i.format===e.format)??n[0]}let t,s;if(Ze.isScalar(e)){s=e.value;let n=r.filter(i=>i.identify?.(s));if(n.length>1){let i=n.filter(o=>o.test);i.length>0&&(n=i)}t=n.find(i=>i.format===e.format)??n.find(i=>!i.format)}else s=e,t=r.find(n=>n.nodeClass&&s instanceof n.nodeClass);if(!t){let n=s?.constructor?.name??(s===null?"null":typeof s);throw new Error(`Tag not resolved for ${n} value`)}return t}function Vm(r,e,{anchors:t,doc:s}){if(!s.directives)return"";let n=[],i=(Ze.isScalar(r)||Ze.isCollection(r))&&r.anchor;i&&Fm.anchorIsValid(i)&&(t.add(i),n.push(`&${i}`));let o=r.tag??(e.default?null:e.tag);return o&&n.push(s.directives.tagString(o)),n.join(" ")}function Ym(r,e,t,s){if(Ze.isPair(r))return r.toString(e,t,s);if(Ze.isAlias(r)){if(e.doc.directives)return r.toString(e);if(e.resolvedAliases?.has(r))throw new TypeError("Cannot stringify circular structure without alias nodes");e.resolvedAliases?e.resolvedAliases.add(r):e.resolvedAliases=new Set([r]),r=r.resolve(e.doc)}let n,i=Ze.isNode(r)?r:e.doc.createNode(r,{onTagObj:l=>n=l});n??(n=Gm(e.doc.schema.tags,i));let o=Vm(i,n,e);o.length>0&&(e.indentAtStart=(e.indentAtStart??0)+o.length+1);let a=typeof n.stringify=="function"?n.stringify(i,e,t,s):Ze.isScalar(i)?Hm.stringifyString(i,e,t,s):i.toString(e,t,s);return o?Ze.isScalar(i)||a[0]==="{"||a[0]==="["?`${o} ${a}`:`${o}
|
|
38
|
+
${e.indent}${a}`:a}Ri.createStringifyContext=Wm;Ri.stringify=Ym});var rl=T(nl=>{"use strict";var Re=R(),tl=Z(),sl=ys(),ws=fs();function Jm({key:r,value:e},t,s,n){let{allNullValues:i,doc:o,indent:a,indentStep:l,options:{commentString:c,indentSeq:d,simpleKeys:u}}=t,h=Re.isNode(r)&&r.comment||null;if(u){if(h)throw new Error("With simple keys, key nodes cannot have comments");if(Re.isCollection(r)||!Re.isNode(r)&&typeof r=="object"){let D="With simple keys, collection cannot be used as a key value";throw new Error(D)}}let p=!u&&(!r||h&&e==null&&!t.inFlow||Re.isCollection(r)||(Re.isScalar(r)?r.type===tl.Scalar.BLOCK_FOLDED||r.type===tl.Scalar.BLOCK_LITERAL:typeof r=="object"));t=Object.assign({},t,{allNullValues:!1,implicitKey:!p&&(u||!i),indent:a+l});let m=!1,f=!1,y=sl.stringify(r,t,()=>m=!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 m&&s&&s(),y===""?"?":p?`? ${y}`:y}else if(i&&!u||e==null&&p)return y=`? ${y}`,h&&!m?y+=ws.lineComment(y,t.indent,c(h)):f&&n&&n(),y;m&&(h=null),p?(h&&(y+=ws.lineComment(y,t.indent,c(h))),y=`? ${y}
|
|
39
|
+
${a}:`):(y=`${y}:`,h&&(y+=ws.lineComment(y,t.indent,c(h))));let w,S,k;Re.isNode(e)?(w=!!e.spaceBefore,S=e.commentBefore,k=e.comment):(w=!1,S=null,k=null,e&&typeof e=="object"&&(e=o.createNode(e))),t.implicitKey=!1,!p&&!h&&Re.isScalar(e)&&(t.indentAtStart=y.length+1),f=!1,!d&&l.length>=2&&!t.inFlow&&!p&&Re.isSeq(e)&&!e.flow&&!e.tag&&!e.anchor&&(t.indent=t.indent.substring(2));let I=!1,v=sl.stringify(e,t,()=>I=!0,()=>f=!0),N=" ";if(h||w||S){if(N=w?`
|
|
40
|
+
`:"",S){let D=c(S);N+=`
|
|
41
|
+
${ws.indentComment(D,t.indent)}`}v===""&&!t.inFlow?N===`
|
|
42
|
+
`&&k&&(N=`
|
|
43
|
+
|
|
44
|
+
`):N+=`
|
|
45
|
+
${t.indent}`}else if(!p&&Re.isCollection(e)){let D=v[0],C=v.indexOf(`
|
|
46
|
+
`),E=C!==-1,G=t.inFlow??e.flow??e.items.length===0;if(E||!G){let W=!1;if(E&&(D==="&"||D==="!")){let $=v.indexOf(" ");D==="&"&&$!==-1&&$<C&&v[$+1]==="!"&&($=v.indexOf(" ",$+1)),($===-1||C<$)&&(W=!0)}W||(N=`
|
|
47
47
|
${t.indent}`)}}else(v===""||v[0]===`
|
|
48
|
-
`)&&(
|
|
48
|
+
`)&&(N="");return y+=N+v,t.inFlow?I&&s&&s():k&&!I?y+=ws.lineComment(y,t.indent,c(k)):f&&n&&n(),y}nl.stringifyPair=Jm});var Ui=T(Bi=>{"use strict";var il=H("process");function zm(r,...e){r==="debug"&&console.log(...e)}function Qm(r,e){(r==="debug"||r==="warn")&&(typeof il.emitWarning=="function"?il.emitWarning(e):console.warn(e))}Bi.debug=zm;Bi.warn=Qm});var An=T(Cn=>{"use strict";var Ss=R(),ol=Z(),Tn="<<",In={identify:r=>r===Tn||typeof r=="symbol"&&r.description===Tn,default:"key",tag:"tag:yaml.org,2002:merge",test:/^<<$/,resolve:()=>Object.assign(new ol.Scalar(Symbol(Tn)),{addToJSMap:al}),stringify:()=>Tn},Xm=(r,e)=>(In.identify(e)||Ss.isScalar(e)&&(!e.type||e.type===ol.Scalar.PLAIN)&&In.identify(e.value))&&r?.doc.schema.tags.some(t=>t.tag===In.tag&&t.default);function al(r,e,t){if(t=r&&Ss.isAlias(t)?t.resolve(r.doc):t,Ss.isSeq(t))for(let s of t.items)qi(r,e,s);else if(Array.isArray(t))for(let s of t)qi(r,e,s);else qi(r,e,t)}function qi(r,e,t){let s=r&&Ss.isAlias(t)?t.resolve(r.doc):t;if(!Ss.isMap(s))throw new Error("Merge sources must be maps or map aliases");let n=s.toJSON(null,r,Map);for(let[i,o]of n)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}Cn.addMergeToJSMap=al;Cn.isMergeKey=Xm;Cn.merge=In});var Fi=T(dl=>{"use strict";var Zm=Ui(),cl=An(),eg=ys(),ll=R(),ji=ze();function tg(r,e,{key:t,value:s}){if(ll.isNode(t)&&t.addToJSMap)t.addToJSMap(r,e,s);else if(cl.isMergeKey(r,t))cl.addMergeToJSMap(r,e,s);else{let n=ji.toJS(t,"",r);if(e instanceof Map)e.set(n,ji.toJS(s,n,r));else if(e instanceof Set)e.add(n);else{let i=sg(t,n,r),o=ji.toJS(s,i,r);i in e?Object.defineProperty(e,i,{value:o,writable:!0,enumerable:!0,configurable:!0}):e[i]=o}}return e}function sg(r,e,t){if(e===null)return"";if(typeof e!="object")return String(e);if(ll.isNode(r)&&t?.doc){let s=eg.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 n=r.toString(s);if(!t.mapKeyWarned){let i=JSON.stringify(n);i.length>40&&(i=i.substring(0,36)+'..."'),Zm.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 n}return JSON.stringify(e)}dl.addPairToJSMap=tg});var et=T(Ki=>{"use strict";var ul=hs(),ng=rl(),rg=Fi(),En=R();function ig(r,e,t){let s=ul.createNode(r,void 0,t),n=ul.createNode(e,void 0,t);return new Nn(s,n)}var Nn=class r{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 r(t,s)}toJSON(e,t){let s=t?.mapAsMap?new Map:{};return rg.addPairToJSMap(t,s,this)}toString(e,t,s){return e?.doc?ng.stringifyPair(this,e,t,s):JSON.stringify(this)}};Ki.Pair=Nn;Ki.createPair=ig});var Hi=T(fl=>{"use strict";var pt=R(),hl=ys(),xn=fs();function og(r,e,t){return(e.inFlow??r.flow?cg:ag)(r,e,t)}function ag({comment:r,items:e},t,{blockItemPrefix:s,flowChars:n,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 m=0;m<e.length;++m){let f=e[m],y=null;if(pt.isNode(f))!u&&f.spaceBefore&&h.push(""),On(t,h,f.commentBefore,u),f.comment&&(y=f.comment);else if(pt.isPair(f)){let S=pt.isNode(f.key)?f.key:null;S&&(!u&&S.spaceBefore&&h.push(""),On(t,h,S.commentBefore,u))}u=!1;let w=hl.stringify(f,d,()=>y=null,()=>u=!0);y&&(w+=xn.lineComment(w,i,c(y))),u&&y&&(u=!1),h.push(s+w)}let p;if(h.length===0)p=n.start+n.end;else{p=h[0];for(let m=1;m<h.length;++m){let f=h[m];p+=f?`
|
|
49
49
|
${l}${f}`:`
|
|
50
|
-
`}}return
|
|
51
|
-
`+
|
|
52
|
-
`)),
|
|
53
|
-
${i}${
|
|
54
|
-
`;return`${
|
|
55
|
-
${
|
|
56
|
-
`:" ")}return
|
|
57
|
-
${
|
|
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=X();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=X(),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(
|
|
50
|
+
`}}return r?(p+=`
|
|
51
|
+
`+xn.indentComment(c(r),l),a&&a()):u&&o&&o(),p}function cg({items:r},e,{flowChars:t,itemIndent:s}){let{indent:n,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 m=0;m<r.length;++m){let f=r[m],y=null;if(pt.isNode(f))f.spaceBefore&&u.push(""),On(e,u,f.commentBefore,!1),f.comment&&(y=f.comment);else if(pt.isPair(f)){let S=pt.isNode(f.key)?f.key:null;S&&(S.spaceBefore&&u.push(""),On(e,u,S.commentBefore,!1),S.comment&&(c=!0));let k=pt.isNode(f.value)?f.value:null;k?(k.comment&&(y=k.comment),k.commentBefore&&(c=!0)):f.value==null&&S?.comment&&(y=S.comment)}y&&(c=!0);let w=hl.stringify(f,l,()=>y=null);c||(c=u.length>d||w.includes(`
|
|
52
|
+
`)),m<r.length-1?w+=",":e.options.trailingComma&&(e.options.lineWidth>0&&(c||(c=u.reduce((S,k)=>S+k.length+2,2)+(w.length+2)>e.options.lineWidth)),c&&(w+=",")),y&&(w+=xn.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 m=u.reduce((f,y)=>f+y.length+2,2);c=e.options.lineWidth>0&&m>e.options.lineWidth}if(c){let m=h;for(let f of u)m+=f?`
|
|
53
|
+
${i}${n}${f}`:`
|
|
54
|
+
`;return`${m}
|
|
55
|
+
${n}${p}`}else return`${h}${o}${u.join(" ")}${o}${p}`}function On({indent:r,options:{commentString:e}},t,s,n){if(s&&n&&(s=s.replace(/^\n+/,"")),s){let i=xn.indentComment(e(s),r);t.push(i.trimStart())}}fl.stringifyCollection=og});var st=T(Gi=>{"use strict";var lg=Hi(),dg=Fi(),ug=wn(),tt=R(),Mn=et(),hg=Z();function ks(r,e){let t=tt.isScalar(e)?e.value:e;for(let s of r)if(tt.isPair(s)&&(s.key===e||s.key===t||tt.isScalar(s.key)&&s.key.value===t))return s}var Wi=class extends ug.Collection{static get tagName(){return"tag:yaml.org,2002:map"}constructor(e){super(tt.MAP,e),this.items=[]}static from(e,t,s){let{keepUndefined:n,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||n)&&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;tt.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 n=ks(this.items,s.key),i=this.schema?.sortMapEntries;if(n){if(!t)throw new Error(`Key ${s.key} already set`);tt.isScalar(n.value)&&hg.isScalarValue(s.value)?n.value.value=s.value:n.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=ks(this.items,e);return t?this.items.splice(this.items.indexOf(t),1).length>0:!1}get(e,t){let n=ks(this.items,e)?.value;return(!t&&tt.isScalar(n)?n.value:n)??void 0}has(e){return!!ks(this.items,e)}set(e,t){this.add(new Mn.Pair(e,t),!0)}toJSON(e,t,s){let n=s?new s:t?.mapAsMap?new Map:{};t?.onCreate&&t.onCreate(n);for(let i of this.items)dg.addPairToJSMap(t,n,i);return n}toString(e,t,s){if(!e)return JSON.stringify(this);for(let n of this.items)if(!tt.isPair(n))throw new Error(`Map items must all be pairs; found ${JSON.stringify(n)} instead`);return!e.allNullValues&&this.hasAllNullValues(!1)&&(e=Object.assign({},e,{allNullValues:!0})),lg.stringifyCollection(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:s,onComment:t})}};Gi.YAMLMap=Wi;Gi.findPair=ks});var Rt=T(ml=>{"use strict";var fg=R(),pl=st(),pg={collection:"map",default:!0,nodeClass:pl.YAMLMap,tag:"tag:yaml.org,2002:map",resolve(r,e){return fg.isMap(r)||e("Expected a mapping for this tag"),r},createNode:(r,e,t)=>pl.YAMLMap.from(r,e,t)};ml.map=pg});var nt=T(gl=>{"use strict";var mg=hs(),gg=Hi(),yg=wn(),Ln=R(),wg=Z(),Sg=ze(),Vi=class extends yg.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 n=this.items[s];return!t&&Ln.isScalar(n)?n.value:n}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 n=this.items[s];Ln.isScalar(n)&&wg.isScalarValue(t)?n.value=t:this.items[s]=t}toJSON(e,t){let s=[];t?.onCreate&&t.onCreate(s);let n=0;for(let i of this.items)s.push(Sg.toJS(i,String(n++),t));return s}toString(e,t,s){return e?gg.stringifyCollection(this,e,{blockItemPrefix:"- ",flowChars:{start:"[",end:"]"},itemIndent:(e.indent||"")+" ",onChompKeep:s,onComment:t}):JSON.stringify(this)}static from(e,t,s){let{replacer:n}=s,i=new this(e);if(t&&Symbol.iterator in Object(t)){let o=0;for(let a of t){if(typeof n=="function"){let l=t instanceof Set?a:String(o++);a=n.call(t,l,a)}i.items.push(mg.createNode(a,void 0,s))}}return i}};function Dn(r){let e=Ln.isScalar(r)?r.value:r;return e&&typeof e=="string"&&(e=Number(e)),typeof e=="number"&&Number.isInteger(e)&&e>=0?e:null}gl.YAMLSeq=Vi});var Bt=T(wl=>{"use strict";var kg=R(),yl=nt(),bg={collection:"seq",default:!0,nodeClass:yl.YAMLSeq,tag:"tag:yaml.org,2002:seq",resolve(r,e){return kg.isSeq(r)||e("Expected a sequence for this tag"),r},createNode:(r,e,t)=>yl.YAMLSeq.from(r,e,t)};wl.seq=bg});var bs=T(Sl=>{"use strict";var _g=gs(),vg={identify:r=>typeof r=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:r=>r,stringify(r,e,t,s){return e=Object.assign({actualString:!0},e),_g.stringifyString(r,e,t,s)}};Sl.string=vg});var Pn=T(_l=>{"use strict";var kl=Z(),bl={identify:r=>r==null,createNode:()=>new kl.Scalar(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new kl.Scalar(null),stringify:({source:r},e)=>typeof r=="string"&&bl.test.test(r)?r:e.options.nullStr};_l.nullTag=bl});var Yi=T(Tl=>{"use strict";var Tg=Z(),vl={identify:r=>typeof r=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:r=>new Tg.Scalar(r[0]==="t"||r[0]==="T"),stringify({source:r,value:e},t){if(r&&vl.test.test(r)){let s=r[0]==="t"||r[0]==="T";if(e===s)return r}return e?t.options.trueStr:t.options.falseStr}};Tl.boolTag=vl});var Ut=T(Il=>{"use strict";function Ig({format:r,minFractionDigits:e,tag:t,value:s}){if(typeof s=="bigint")return String(s);let n=typeof s=="number"?s:Number(s);if(!isFinite(n))return isNaN(n)?".nan":n<0?"-.inf":".inf";let i=Object.is(s,-0)?"-0":JSON.stringify(s);if(!r&&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}Il.stringifyNumber=Ig});var zi=T($n=>{"use strict";var Cg=Z(),Ji=Ut(),Ag={identify:r=>typeof r=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:r=>r.slice(-3).toLowerCase()==="nan"?NaN:r[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:Ji.stringifyNumber},Eg={identify:r=>typeof r=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:r=>parseFloat(r),stringify(r){let e=Number(r.value);return isFinite(e)?e.toExponential():Ji.stringifyNumber(r)}},Ng={identify:r=>typeof r=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,resolve(r){let e=new Cg.Scalar(parseFloat(r)),t=r.indexOf(".");return t!==-1&&r[r.length-1]==="0"&&(e.minFractionDigits=r.length-t-1),e},stringify:Ji.stringifyNumber};$n.float=Ng;$n.floatExp=Eg;$n.floatNaN=Ag});var Xi=T(Bn=>{"use strict";var Cl=Ut(),Rn=r=>typeof r=="bigint"||Number.isInteger(r),Qi=(r,e,t,{intAsBigInt:s})=>s?BigInt(r):parseInt(r.substring(e),t);function Al(r,e,t){let{value:s}=r;return Rn(s)&&s>=0?t+s.toString(e):Cl.stringifyNumber(r)}var xg={identify:r=>Rn(r)&&r>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(r,e,t)=>Qi(r,2,8,t),stringify:r=>Al(r,8,"0o")},Og={identify:Rn,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(r,e,t)=>Qi(r,0,10,t),stringify:Cl.stringifyNumber},Mg={identify:r=>Rn(r)&&r>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(r,e,t)=>Qi(r,2,16,t),stringify:r=>Al(r,16,"0x")};Bn.int=Og;Bn.intHex=Mg;Bn.intOct=xg});var Nl=T(El=>{"use strict";var Dg=Rt(),Lg=Pn(),Pg=Bt(),$g=bs(),Rg=Yi(),Zi=zi(),eo=Xi(),Bg=[Dg.map,Pg.seq,$g.string,Lg.nullTag,Rg.boolTag,eo.intOct,eo.int,eo.intHex,Zi.floatNaN,Zi.floatExp,Zi.float];El.schema=Bg});var Ml=T(Ol=>{"use strict";var Ug=Z(),qg=Rt(),jg=Bt();function xl(r){return typeof r=="bigint"||Number.isInteger(r)}var Un=({value:r})=>JSON.stringify(r),Fg=[{identify:r=>typeof r=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:r=>r,stringify:Un},{identify:r=>r==null,createNode:()=>new Ug.Scalar(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:Un},{identify:r=>typeof r=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^true$|^false$/,resolve:r=>r==="true",stringify:Un},{identify:xl,default:!0,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:(r,e,{intAsBigInt:t})=>t?BigInt(r):parseInt(r,10),stringify:({value:r})=>xl(r)?r.toString():JSON.stringify(r)},{identify:r=>typeof r=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:r=>parseFloat(r),stringify:Un}],Kg={default:!0,tag:"",test:/^/,resolve(r,e){return e(`Unresolved plain scalar ${JSON.stringify(r)}`),r}},Hg=[qg.map,jg.seq].concat(Fg,Kg);Ol.schema=Hg});var so=T(Dl=>{"use strict";var _s=H("buffer"),to=Z(),Wg=gs(),Gg={identify:r=>r instanceof Uint8Array,default:!1,tag:"tag:yaml.org,2002:binary",resolve(r,e){if(typeof _s.Buffer=="function")return _s.Buffer.from(r,"base64");if(typeof atob=="function"){let t=atob(r.replace(/[\n\r]/g,"")),s=new Uint8Array(t.length);for(let n=0;n<t.length;++n)s[n]=t.charCodeAt(n);return s}else return e("This environment does not support reading binary tags; either Buffer or atob is required"),r},stringify({comment:r,type:e,value:t},s,n,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=to.Scalar.BLOCK_LITERAL),e!==to.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===to.Scalar.BLOCK_LITERAL?`
|
|
56
|
+
`:" ")}return Wg.stringifyString({comment:r,type:e,value:a},s,n,i)}};Dl.binary=Gg});var Fn=T(jn=>{"use strict";var qn=R(),no=et(),Vg=Z(),Yg=nt();function Ll(r,e){if(qn.isSeq(r))for(let t=0;t<r.items.length;++t){let s=r.items[t];if(!qn.isPair(s)){if(qn.isMap(s)){s.items.length>1&&e("Each pair must have its own sequence indicator");let n=s.items[0]||new no.Pair(new Vg.Scalar(null));if(s.commentBefore&&(n.key.commentBefore=n.key.commentBefore?`${s.commentBefore}
|
|
57
|
+
${n.key.commentBefore}`:s.commentBefore),s.comment){let i=n.value??n.key;i.comment=i.comment?`${s.comment}
|
|
58
|
+
${i.comment}`:s.comment}s=n}r.items[t]=qn.isPair(s)?s:new no.Pair(s)}}else e("Expected a sequence for this tag");return r}function Pl(r,e,t){let{replacer:s}=t,n=new Yg.YAMLSeq(r);n.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;n.items.push(no.createPair(a,l,t))}return n}var Jg={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:Ll,createNode:Pl};jn.createPairs=Pl;jn.pairs=Jg;jn.resolvePairs=Ll});var oo=T(io=>{"use strict";var $l=R(),ro=ze(),vs=st(),zg=nt(),Rl=Fn(),mt=class r extends zg.YAMLSeq{constructor(){super(),this.add=vs.YAMLMap.prototype.add.bind(this),this.delete=vs.YAMLMap.prototype.delete.bind(this),this.get=vs.YAMLMap.prototype.get.bind(this),this.has=vs.YAMLMap.prototype.has.bind(this),this.set=vs.YAMLMap.prototype.set.bind(this),this.tag=r.tag}toJSON(e,t){if(!t)return super.toJSON(e);let s=new Map;t?.onCreate&&t.onCreate(s);for(let n of this.items){let i,o;if($l.isPair(n)?(i=ro.toJS(n.key,"",t),o=ro.toJS(n.value,i,t)):i=ro.toJS(n,"",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 n=Rl.createPairs(e,t,s),i=new this;return i.items=n.items,i}};mt.tag="tag:yaml.org,2002:omap";var Qg={collection:"seq",identify:r=>r instanceof Map,nodeClass:mt,default:!1,tag:"tag:yaml.org,2002:omap",resolve(r,e){let t=Rl.resolvePairs(r,e),s=[];for(let{key:n}of t.items)$l.isScalar(n)&&(s.includes(n.value)?e(`Ordered maps must not include duplicate keys: ${n.value}`):s.push(n.value));return Object.assign(new mt,t)},createNode:(r,e,t)=>mt.from(r,e,t)};io.YAMLOMap=mt;io.omap=Qg});var Fl=T(ao=>{"use strict";var Bl=Z();function Ul({value:r,source:e},t){return e&&(r?ql:jl).test.test(e)?e:r?t.options.trueStr:t.options.falseStr}var ql={identify:r=>r===!0,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:()=>new Bl.Scalar(!0),stringify:Ul},jl={identify:r=>r===!1,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:()=>new Bl.Scalar(!1),stringify:Ul};ao.falseTag=jl;ao.trueTag=ql});var Kl=T(Kn=>{"use strict";var Xg=Z(),co=Ut(),Zg={identify:r=>typeof r=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:r=>r.slice(-3).toLowerCase()==="nan"?NaN:r[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:co.stringifyNumber},ey={identify:r=>typeof r=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:r=>parseFloat(r.replace(/_/g,"")),stringify(r){let e=Number(r.value);return isFinite(e)?e.toExponential():co.stringifyNumber(r)}},ty={identify:r=>typeof r=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve(r){let e=new Xg.Scalar(parseFloat(r.replace(/_/g,""))),t=r.indexOf(".");if(t!==-1){let s=r.substring(t+1).replace(/_/g,"");s[s.length-1]==="0"&&(e.minFractionDigits=s.length)}return e},stringify:co.stringifyNumber};Kn.float=ty;Kn.floatExp=ey;Kn.floatNaN=Zg});var Wl=T(Is=>{"use strict";var Hl=Ut(),Ts=r=>typeof r=="bigint"||Number.isInteger(r);function Hn(r,e,t,{intAsBigInt:s}){let n=r[0];if((n==="-"||n==="+")&&(e+=1),r=r.substring(e).replace(/_/g,""),s){switch(t){case 2:r=`0b${r}`;break;case 8:r=`0o${r}`;break;case 16:r=`0x${r}`;break}let o=BigInt(r);return n==="-"?BigInt(-1)*o:o}let i=parseInt(r,t);return n==="-"?-1*i:i}function lo(r,e,t){let{value:s}=r;if(Ts(s)){let n=s.toString(e);return s<0?"-"+t+n.substr(1):t+n}return Hl.stringifyNumber(r)}var sy={identify:Ts,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(r,e,t)=>Hn(r,2,2,t),stringify:r=>lo(r,2,"0b")},ny={identify:Ts,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(r,e,t)=>Hn(r,1,8,t),stringify:r=>lo(r,8,"0")},ry={identify:Ts,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(r,e,t)=>Hn(r,0,10,t),stringify:Hl.stringifyNumber},iy={identify:Ts,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(r,e,t)=>Hn(r,2,16,t),stringify:r=>lo(r,16,"0x")};Is.int=ry;Is.intBin=sy;Is.intHex=iy;Is.intOct=ny});var ho=T(uo=>{"use strict";var Vn=R(),Wn=et(),Gn=st(),gt=class r extends Gn.YAMLMap{constructor(e){super(e),this.tag=r.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 Wn.Pair(e.key,null):t=new Wn.Pair(e,null),Gn.findPair(this.items,t.key)||this.items.push(t)}get(e,t){let s=Gn.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=Gn.findPair(this.items,e);s&&!t?this.items.splice(this.items.indexOf(s),1):!s&&t&&this.items.push(new Wn.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:n}=s,i=new this(e);if(t&&Symbol.iterator in Object(t))for(let o of t)typeof n=="function"&&(o=n.call(t,o,o)),i.items.push(Wn.createPair(o,null,s));return i}};gt.tag="tag:yaml.org,2002:set";var oy={collection:"map",identify:r=>r instanceof Set,nodeClass:gt,default:!1,tag:"tag:yaml.org,2002:set",createNode:(r,e,t)=>gt.from(r,e,t),resolve(r,e){if(Vn.isMap(r)){if(r.hasAllNullValues(!0))return Object.assign(new gt,r);e("Set items must all have null values")}else e("Expected a mapping for this tag");return r}};uo.YAMLSet=gt;uo.set=oy});var po=T(Yn=>{"use strict";var ay=Ut();function fo(r,e){let t=r[0],s=t==="-"||t==="+"?r.substring(1):r,n=o=>e?BigInt(o):Number(o),i=s.replace(/_/g,"").split(":").reduce((o,a)=>o*n(60)+n(a),n(0));return t==="-"?n(-1)*i:i}function Gl(r){let{value:e}=r,t=o=>o;if(typeof e=="bigint")t=o=>BigInt(o);else if(isNaN(e)||!isFinite(e))return ay.stringifyNumber(r);let s="";e<0&&(s="-",e*=t(-1));let n=t(60),i=[e%n];return e<60?i.unshift(0):(e=(e-i[0])/n,i.unshift(e%n),e>=60&&(e=(e-i[0])/n,i.unshift(e))),s+i.map(o=>String(o).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}var cy={identify:r=>typeof r=="bigint"||Number.isInteger(r),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:(r,e,{intAsBigInt:t})=>fo(r,t),stringify:Gl},ly={identify:r=>typeof r=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:r=>fo(r,!1),stringify:Gl},Vl={identify:r=>r 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(r){let e=r.match(Vl.test);if(!e)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");let[,t,s,n,i,o,a]=e.map(Number),l=e[7]?Number((e[7]+"00").substr(1,3)):0,c=Date.UTC(t,s-1,n,i||0,o||0,a||0,l),d=e[8];if(d&&d!=="Z"){let u=fo(d,!1);Math.abs(u)<30&&(u*=60),c-=6e4*u}return new Date(c)},stringify:({value:r})=>r?.toISOString().replace(/(T00:00:00)?\.000Z$/,"")??""};Yn.floatTime=ly;Yn.intTime=cy;Yn.timestamp=Vl});var zl=T(Jl=>{"use strict";var dy=Rt(),uy=Pn(),hy=Bt(),fy=bs(),py=so(),Yl=Fl(),mo=Kl(),Jn=Wl(),my=An(),gy=oo(),yy=Fn(),wy=ho(),go=po(),Sy=[dy.map,hy.seq,fy.string,uy.nullTag,Yl.trueTag,Yl.falseTag,Jn.intBin,Jn.intOct,Jn.int,Jn.intHex,mo.floatNaN,mo.floatExp,mo.float,py.binary,my.merge,gy.omap,yy.pairs,wy.set,go.intTime,go.floatTime,go.timestamp];Jl.schema=Sy});var od=T(So=>{"use strict";var ed=Rt(),ky=Pn(),td=Bt(),by=bs(),_y=Yi(),yo=zi(),wo=Xi(),vy=Nl(),Ty=Ml(),sd=so(),Cs=An(),nd=oo(),rd=Fn(),Ql=zl(),id=ho(),zn=po(),Xl=new Map([["core",vy.schema],["failsafe",[ed.map,td.seq,by.string]],["json",Ty.schema],["yaml11",Ql.schema],["yaml-1.1",Ql.schema]]),Zl={binary:sd.binary,bool:_y.boolTag,float:yo.float,floatExp:yo.floatExp,floatNaN:yo.floatNaN,floatTime:zn.floatTime,int:wo.int,intHex:wo.intHex,intOct:wo.intOct,intTime:zn.intTime,map:ed.map,merge:Cs.merge,null:ky.nullTag,omap:nd.omap,pairs:rd.pairs,seq:td.seq,set:id.set,timestamp:zn.timestamp},Iy={"tag:yaml.org,2002:binary":sd.binary,"tag:yaml.org,2002:merge":Cs.merge,"tag:yaml.org,2002:omap":nd.omap,"tag:yaml.org,2002:pairs":rd.pairs,"tag:yaml.org,2002:set":id.set,"tag:yaml.org,2002:timestamp":zn.timestamp};function Cy(r,e,t){let s=Xl.get(e);if(s&&!r)return t&&!s.includes(Cs.merge)?s.concat(Cs.merge):s.slice();let n=s;if(!n)if(Array.isArray(r))n=[];else{let i=Array.from(Xl.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(r))for(let i of r)n=n.concat(i);else typeof r=="function"&&(n=r(n.slice()));return t&&(n=n.concat(Cs.merge)),n.reduce((i,o)=>{let a=typeof o=="string"?Zl[o]:o;if(!a){let l=JSON.stringify(o),c=Object.keys(Zl).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},[])}So.coreKnownTags=Iy;So.getTags=Cy});var _o=T(ad=>{"use strict";var ko=R(),Ay=Rt(),Ey=Bt(),Ny=bs(),Qn=od(),xy=(r,e)=>r.key<e.key?-1:r.key>e.key?1:0,bo=class r{constructor({compat:e,customTags:t,merge:s,resolveKnownTags:n,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=n?Qn.coreKnownTags:{},this.tags=Qn.getTags(t,this.name,s),this.toStringOptions=a??null,Object.defineProperty(this,ko.MAP,{value:Ay.map}),Object.defineProperty(this,ko.SCALAR,{value:Ny.string}),Object.defineProperty(this,ko.SEQ,{value:Ey.seq}),this.sortMapEntries=typeof o=="function"?o:o===!0?xy:null}clone(){let e=Object.create(r.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}};ad.Schema=bo});var ld=T(cd=>{"use strict";var Oy=R(),vo=ys(),As=fs();function My(r,e){let t=[],s=e.directives===!0;if(e.directives!==!1&&r.directives){let l=r.directives.toString(r);l?(t.push(l),s=!0):r.directives.docStart&&(s=!0)}s&&t.push("---");let n=vo.createStringifyContext(r,e),{commentString:i}=n.options;if(r.commentBefore){t.length!==1&&t.unshift("");let l=i(r.commentBefore);t.unshift(As.indentComment(l,""))}let o=!1,a=null;if(r.contents){if(Oy.isNode(r.contents)){if(r.contents.spaceBefore&&s&&t.push(""),r.contents.commentBefore){let d=i(r.contents.commentBefore);t.push(As.indentComment(d,""))}n.forceBlockIndent=!!r.comment,a=r.contents.comment}let l=a?void 0:()=>o=!0,c=vo.stringify(r.contents,n,()=>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(vo.stringify(r.contents,n));if(r.directives?.docEnd)if(r.comment){let l=i(r.comment);l.includes(`
|
|
59
|
+
`)?(t.push("..."),t.push(As.indentComment(l,""))):t.push(`... ${l}`)}else t.push("...");else{let l=r.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(`
|
|
60
60
|
`)+`
|
|
61
|
-
`}
|
|
62
|
-
`),o=a+o}if(/[^ ]/.test(o)){let a=1,l=t.linePos[1];l?.line===s&&l.col>
|
|
61
|
+
`}cd.stringifyDocument=My});var Es=T(dd=>{"use strict";var Dy=us(),qt=wn(),we=R(),Ly=et(),Py=ze(),$y=_o(),Ry=ld(),To=pn(),By=Ai(),Uy=hs(),Io=Ci(),Co=class r{constructor(e,t,s){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,we.NODE_TYPE,{value:we.DOC});let n=null;typeof t=="function"||Array.isArray(t)?n=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 Io.Directives({version:o}),this.setSchema(o,s),this.contents=e===void 0?null:this.createNode(e,n,s)}clone(){let e=Object.create(r.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=To.anchorNames(this);e.anchor=!t||s.has(t)?To.findNewAnchor(t||"a",s):t}return new Dy.Alias(e.anchor)}createNode(e,t,s){let n;if(typeof t=="function")e=t.call({"":e},"",e),n=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)),n=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}=To.createNodeAnchors(this,o||"a"),m={aliasDuplicateObjects:i??!0,keepUndefined:l??!1,onAnchor:u,onTagObj:c,replacer:n,schema:this.schema,sourceObjects:p},f=Uy.createNode(e,d,m);return a&&we.isCollection(f)&&(f.flow=!0),h(),f}createPair(e,t,s={}){let n=this.createNode(e,null,s),i=this.createNode(t,null,s);return new Ly.Pair(n,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 Io.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 Io.Directives({version:e}),s={resolveKnownTags:!0,schema:"core"};break;case null:this.directives&&delete this.directives,s=null;break;default:{let n=JSON.stringify(e);throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${n}`)}}if(t.schema instanceof Object)this.schema=t.schema;else if(s)this.schema=new $y.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:n,onAnchor:i,reviver:o}={}){let a={anchors:new Map,doc:this,keep:!e,mapAsMap:s===!0,mapKeyWarned:!1,maxAliasCount:typeof n=="number"?n:100},l=Py.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"?By.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 Ry.stringifyDocument(this,e)}};function jt(r){if(we.isCollection(r))return!0;throw new Error("Expected a YAML collection as document contents")}dd.Document=Co});var Os=T(xs=>{"use strict";var Ns=class extends Error{constructor(e,t,s,n){super(),this.name=e,this.code=s,this.message=n,this.pos=t}},Ao=class extends Ns{constructor(e,t,s){super("YAMLParseError",e,t,s)}},Eo=class extends Ns{constructor(e,t,s){super("YAMLWarning",e,t,s)}},qy=(r,e)=>t=>{if(t.pos[0]===-1)return;t.linePos=t.pos.map(a=>e.linePos(a));let{line:s,col:n}=t.linePos[0];t.message+=` at line ${s}, column ${n}`;let i=n-1,o=r.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=r.substring(e.lineStarts[s-2],e.lineStarts[s-1]);a.length>80&&(a=a.substring(0,79)+`\u2026
|
|
62
|
+
`),o=a+o}if(/[^ ]/.test(o)){let a=1,l=t.linePos[1];l?.line===s&&l.col>n&&(a=Math.max(1,Math.min(l.col-n,80-i)));let c=" ".repeat(i)+"^".repeat(a);t.message+=`:
|
|
63
63
|
|
|
64
64
|
${o}
|
|
65
65
|
${c}
|
|
66
|
-
`}};
|
|
67
|
-
`))return!0;if(
|
|
68
|
-
`+f.comment:a.comment=f.comment);continue}(f.newlineAfterProp||
|
|
69
|
-
`+
|
|
70
|
-
`+
|
|
71
|
-
`+
|
|
72
|
-
`+
|
|
73
|
-
`+y.comment:c.comment=y.comment),c.range=[s.offset,f,y.offset]}else c.range=[s.offset,f,f];return c}
|
|
74
|
-
`.repeat(Math.max(1,o.length-1)):"",y=s+
|
|
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
|
|
66
|
+
`}};xs.YAMLError=Ns;xs.YAMLParseError=Ao;xs.YAMLWarning=Eo;xs.prettifyError=qy});var Ms=T(ud=>{"use strict";function jy(r,{flow:e,indicator:t,next:s,offset:n,onError:i,parentIndent:o,startOnNewline:a}){let l=!1,c=a,d=a,u="",h="",p=!1,m=!1,f=null,y=null,w=null,S=null,k=null,I=null,v=null;for(let C of r)switch(m&&(C.type!=="space"&&C.type!=="newline"&&C.type!=="comma"&&i(C.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),m=!1),f&&(c&&C.type!=="comment"&&C.type!=="newline"&&i(f,"TAB_AS_INDENT","Tabs are not allowed as indentation"),f=null),C.type){case"space":!e&&(t!=="doc-start"||s?.type!=="flow-collection")&&C.source.includes(" ")&&(f=C),d=!0;break;case"comment":{d||i(C,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let E=C.source.substring(1)||" ";u?u+=h+E:u=E,h="",c=!1;break}case"newline":c?u?u+=C.source:(!I||t!=="seq-item-ind")&&(l=!0):h+=C.source,c=!0,p=!0,(y||w)&&(S=C),d=!0;break;case"anchor":y&&i(C,"MULTIPLE_ANCHORS","A node can have at most one anchor"),C.source.endsWith(":")&&i(C.offset+C.source.length-1,"BAD_ALIAS","Anchor ending in : is ambiguous",!0),y=C,v??(v=C.offset),c=!1,d=!1,m=!0;break;case"tag":{w&&i(C,"MULTIPLE_TAGS","A node can have at most one tag"),w=C,v??(v=C.offset),c=!1,d=!1,m=!0;break}case t:(y||w)&&i(C,"BAD_PROP_ORDER",`Anchors and tags must be after the ${C.source} indicator`),I&&i(C,"UNEXPECTED_TOKEN",`Unexpected ${C.source} in ${e??"collection"}`),I=C,c=t==="seq-item-ind"||t==="explicit-key-ind",d=!1;break;case"comma":if(e){k&&i(C,"UNEXPECTED_TOKEN",`Unexpected , in ${e}`),k=C,c=!1,d=!1;break}default:i(C,"UNEXPECTED_TOKEN",`Unexpected ${C.type} token`),c=!1,d=!1}let N=r[r.length-1],D=N?N.offset+N.source.length:n;return m&&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:k,found:I,spaceBefore:l,comment:u,hasNewline:p,anchor:y,tag:w,newlineAfterProp:S,end:D,start:v??D}}ud.resolveProps=jy});var Xn=T(hd=>{"use strict";function No(r){if(!r)return null;switch(r.type){case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":if(r.source.includes(`
|
|
67
|
+
`))return!0;if(r.end){for(let e of r.end)if(e.type==="newline")return!0}return!1;case"flow-collection":for(let e of r.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(No(e.key)||No(e.value))return!0}return!1;default:return!0}}hd.containsNewline=No});var xo=T(fd=>{"use strict";var Fy=Xn();function Ky(r,e,t){if(e?.type==="flow-collection"){let s=e.end[0];s.indent===r&&(s.source==="]"||s.source==="}")&&Fy.containsNewline(e)&&t(s,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}fd.flowIndentCheck=Ky});var Oo=T(md=>{"use strict";var pd=R();function Hy(r,e,t){let{uniqueKeys:s}=r.options;if(s===!1)return!1;let n=typeof s=="function"?s:(i,o)=>i===o||pd.isScalar(i)&&pd.isScalar(o)&&i.value===o.value;return e.some(i=>n(i.key,t))}md.mapIncludes=Hy});var bd=T(kd=>{"use strict";var gd=et(),Wy=st(),yd=Ms(),Gy=Xn(),wd=xo(),Vy=Oo(),Sd="All mapping items must start at the same column";function Yy({composeNode:r,composeEmptyNode:e},t,s,n,i){let o=i?.nodeClass??Wy.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:m}=d,f=yd.resolveProps(u,{indicator:"explicit-key-ind",next:h??p?.[0],offset:l,onError:n,parentIndent:s.indent,startOnNewline:!0}),y=!f.found;if(y){if(h&&(h.type==="block-seq"?n(l,"BLOCK_AS_IMPLICIT_KEY","A block sequence may not be used as an implicit map key"):"indent"in h&&h.indent!==s.indent&&n(l,"BAD_INDENT",Sd)),!f.anchor&&!f.tag&&!p){c=f.end,f.comment&&(a.comment?a.comment+=`
|
|
68
|
+
`+f.comment:a.comment=f.comment);continue}(f.newlineAfterProp||Gy.containsNewline(h))&&n(h??u[u.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}else f.found?.indent!==s.indent&&n(l,"BAD_INDENT",Sd);t.atKey=!0;let w=f.end,S=h?r(t,h,f,n):e(t,w,u,null,f,n);t.schema.compat&&wd.flowIndentCheck(s.indent,h,n),t.atKey=!1,Vy.mapIncludes(t,a.items,S)&&n(w,"DUPLICATE_KEY","Map keys must be unique");let k=yd.resolveProps(p??[],{indicator:"map-value-ind",next:m,offset:S.range[2],onError:n,parentIndent:s.indent,startOnNewline:!h||h.type==="block-scalar"});if(l=k.end,k.found){y&&(m?.type==="block-map"&&!k.hasNewline&&n(l,"BLOCK_AS_IMPLICIT_KEY","Nested mappings are not allowed in compact mappings"),t.options.strict&&f.start<k.found.offset-1024&&n(S.range,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit block mapping key"));let I=m?r(t,m,k,n):e(t,l,p,null,k,n);t.schema.compat&&wd.flowIndentCheck(s.indent,m,n),l=I.range[2];let v=new gd.Pair(S,I);t.options.keepSourceTokens&&(v.srcToken=d),a.items.push(v)}else{y&&n(S.range,"MISSING_CHAR","Implicit map keys need to be followed by map values"),k.comment&&(S.comment?S.comment+=`
|
|
69
|
+
`+k.comment:S.comment=k.comment);let I=new gd.Pair(S);t.options.keepSourceTokens&&(I.srcToken=d),a.items.push(I)}}return c&&c<l&&n(c,"IMPOSSIBLE","Map comment with trailing content"),a.range=[s.offset,l,c??l],a}kd.resolveBlockMap=Yy});var vd=T(_d=>{"use strict";var Jy=nt(),zy=Ms(),Qy=xo();function Xy({composeNode:r,composeEmptyNode:e},t,s,n,i){let o=i?.nodeClass??Jy.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=zy.resolveProps(d,{indicator:"seq-item-ind",next:u,offset:l,onError:n,parentIndent:s.indent,startOnNewline:!0});if(!h.found)if(h.anchor||h.tag||u)u?.type==="block-seq"?n(h.end,"BAD_INDENT","All sequence items must start at the same column"):n(l,"MISSING_CHAR","Sequence item without - indicator");else{c=h.end,h.comment&&(a.comment=h.comment);continue}let p=u?r(t,u,h,n):e(t,h.end,d,null,h,n);t.schema.compat&&Qy.flowIndentCheck(s.indent,u,n),l=p.range[2],a.items.push(p)}return a.range=[s.offset,l,c??l],a}_d.resolveBlockSeq=Xy});var Ft=T(Td=>{"use strict";function Zy(r,e,t,s){let n="";if(r){let i=!1,o="";for(let a of r){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)||" ";n?n+=o+d:n=d,o="";break}case"newline":n&&(o+=l),i=!0;break;default:s(a,"UNEXPECTED_TOKEN",`Unexpected ${c} at node end`)}e+=l.length}}return{comment:n,offset:e}}Td.resolveEnd=Zy});var Ed=T(Ad=>{"use strict";var ew=R(),tw=et(),Id=st(),sw=nt(),nw=Ft(),Cd=Ms(),rw=Xn(),iw=Oo(),Mo="Block collections are not allowed within flow collections",Do=r=>r&&(r.type==="block-map"||r.type==="block-seq");function ow({composeNode:r,composeEmptyNode:e},t,s,n,i){let o=s.start.source==="{",a=o?"flow map":"flow sequence",l=i?.nodeClass??(o?Id.YAMLMap:sw.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:k,sep:I,value:v}=w,N=Cd.resolveProps(S,{flow:a,indicator:"explicit-key-ind",next:k??I?.[0],offset:u,onError:n,parentIndent:s.indent,startOnNewline:!1});if(!N.found){if(!N.anchor&&!N.tag&&!I&&!v){y===0&&N.comma?n(N.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${a}`):y<s.items.length-1&&n(N.start,"UNEXPECTED_TOKEN",`Unexpected empty item in ${a}`),N.comment&&(c.comment?c.comment+=`
|
|
70
|
+
`+N.comment:c.comment=N.comment),u=N.end;continue}!o&&t.options.strict&&rw.containsNewline(k)&&n(k,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line")}if(y===0)N.comma&&n(N.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${a}`);else if(N.comma||n(N.start,"MISSING_CHAR",`Missing , between ${a} items`),N.comment){let D="";e:for(let C of S)switch(C.type){case"comma":case"space":break;case"comment":D=C.source.substring(1);break e;default:break e}if(D){let C=c.items[c.items.length-1];ew.isPair(C)&&(C=C.value??C.key),C.comment?C.comment+=`
|
|
71
|
+
`+D:C.comment=D,N.comment=N.comment.substring(D.length+1)}}if(!o&&!I&&!N.found){let D=v?r(t,v,N,n):e(t,N.end,I,null,N,n);c.items.push(D),u=D.range[2],Do(v)&&n(D.range,"BLOCK_IN_FLOW",Mo)}else{t.atKey=!0;let D=N.end,C=k?r(t,k,N,n):e(t,D,S,null,N,n);Do(k)&&n(C.range,"BLOCK_IN_FLOW",Mo),t.atKey=!1;let E=Cd.resolveProps(I??[],{flow:a,indicator:"map-value-ind",next:v,offset:C.range[2],onError:n,parentIndent:s.indent,startOnNewline:!1});if(E.found){if(!o&&!N.found&&t.options.strict){if(I)for(let $ of I){if($===E.found)break;if($.type==="newline"){n($,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line");break}}N.start<E.found.offset-1024&&n(E.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]===":"?n(v,"MISSING_CHAR",`Missing space after : in ${a}`):n(E.start,"MISSING_CHAR",`Missing , or : between ${a} items`));let G=v?r(t,v,E,n):E.found?e(t,E.end,I,null,E,n):null;G?Do(v)&&n(G.range,"BLOCK_IN_FLOW",Mo):E.comment&&(C.comment?C.comment+=`
|
|
72
|
+
`+E.comment:C.comment=E.comment);let W=new tw.Pair(C,G);if(t.options.keepSourceTokens&&(W.srcToken=w),o){let $=c;iw.mapIncludes(t,$.items,C)&&n(D,"DUPLICATE_KEY","Map keys must be unique"),$.items.push(W)}else{let $=new Id.YAMLMap(t.schema);$.flow=!0,$.items.push(W);let z=(G??C).range;$.range=[C.range[0],z[1],z[2]],c.items.push($)}u=G?G.range[2]:E.end}}let h=o?"}":"]",[p,...m]=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}`;n(u,d?"MISSING_CHAR":"BAD_INDENT",w),p&&p.source.length!==1&&m.unshift(p)}if(m.length>0){let y=nw.resolveEnd(m,f,t.options.strict,n);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}Ad.resolveFlowCollection=ow});var xd=T(Nd=>{"use strict";var aw=R(),cw=Z(),lw=st(),dw=nt(),uw=bd(),hw=vd(),fw=Ed();function Lo(r,e,t,s,n,i){let o=t.type==="block-map"?uw.resolveBlockMap(r,e,t,s,i):t.type==="block-seq"?hw.resolveBlockSeq(r,e,t,s,i):fw.resolveFlowCollection(r,e,t,s,i),a=o.constructor;return n==="!"||n===a.tagName?(o.tag=a.tagName,o):(n&&(o.tag=n),o)}function pw(r,e,t,s,n){let i=s.tag,o=i?e.directives.tagName(i.source,h=>n(i,"TAG_RESOLVE_FAILED",h)):null;if(t.type==="block-seq"){let{anchor:h,newlineAfterProp:p}=s,m=h&&i?h.offset>i.offset?h:i:h??i;m&&(!p||p.offset<m.offset)&&n(m,"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===lw.YAMLMap.tagName&&a==="map"||o===dw.YAMLSeq.tagName&&a==="seq")return Lo(r,e,t,n,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?n(i,"BAD_COLLECTION_TYPE",`${h.tag} used for ${a} collection, but expects ${h.collection??"scalar"}`,!0):n(i,"TAG_RESOLVE_FAILED",`Unresolved tag: ${o}`,!0),Lo(r,e,t,n,o)}let c=Lo(r,e,t,n,o,l),d=l.resolve?.(c,h=>n(i,"TAG_RESOLVE_FAILED",h),e.options)??c,u=aw.isNode(d)?d:new cw.Scalar(d);return u.range=c.range,u.tag=o,l?.format&&(u.format=l.format),u}Nd.composeCollection=pw});var $o=T(Od=>{"use strict";var Po=Z();function mw(r,e,t){let s=e.offset,n=gw(e,r.options.strict,t);if(!n)return{value:"",type:null,comment:"",range:[s,s,s]};let i=n.mode===">"?Po.Scalar.BLOCK_FOLDED:Po.Scalar.BLOCK_LITERAL,o=e.source?yw(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=n.chomp==="+"&&o.length>0?`
|
|
74
|
+
`.repeat(Math.max(1,o.length-1)):"",y=s+n.length;return e.source&&(y+=e.source.length),{value:f,type:i,comment:n.comment,range:[s,y,y]}}let l=e.indent+n.indent,c=e.offset+n.length,d=0;for(let f=0;f<a;++f){let[y,w]=o[f];if(w===""||w==="\r")n.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"),n.indent===0&&(l=y.length),d=f,l===0&&!r.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 I=`Block scalar lines must not be less indented than their ${n.indent?"explicit indentation indicator":"first line"}`;t(c-w.length-(S?2:1),"BAD_INDENT",I),y=""}i===Po.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=`
|
|
@@ -81,99 +81,99 @@ ${c}
|
|
|
81
81
|
`,p=!0):w===""?h===`
|
|
82
82
|
`?u+=`
|
|
83
83
|
`:h=`
|
|
84
|
-
`:(u+=h+w,h=" ",p=!1)}switch(
|
|
84
|
+
`:(u+=h+w,h=" ",p=!1)}switch(n.chomp){case"-":break;case"+":for(let f=a;f<o.length;++f)u+=`
|
|
85
85
|
`+o[f][0].slice(l);u[u.length-1]!==`
|
|
86
86
|
`&&(u+=`
|
|
87
87
|
`);break;default:u+=`
|
|
88
|
-
`}let
|
|
88
|
+
`}let m=s+n.length+e.source.length;return{value:u,type:i,comment:n.comment,range:[s,m,m]}}function gw({offset:r,props:e},t,s){if(e[0].type!=="block-scalar-header")return s(e[0],"IMPOSSIBLE","Block scalar header not found"),null;let{source:n}=e[0],i=n[0],o=0,a="",l=-1;for(let h=1;h<n.length;++h){let p=n[h];if(!a&&(p==="-"||p==="+"))a=p;else{let m=Number(p);!o&&m?o=m:l===-1&&(l=r+h)}}l!==-1&&s(l,"UNEXPECTED_TOKEN",`Block scalar header includes extra characters: ${n}`);let c=!1,d="",u=n.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 m=`Unexpected token in block scalar header: ${p.type}`;s(p,"UNEXPECTED_TOKEN",m);let f=p.source;f&&typeof f=="string"&&(u+=f.length)}}}return{mode:i,indent:o,chomp:a,comment:d,length:u}}function yw(r){let e=r.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}Od.resolveBlockScalar=mw});var Bo=T(Dd=>{"use strict";var Ro=Z(),ww=Ft();function Sw(r,e,t){let{offset:s,type:n,source:i,end:o}=r,a,l,c=(h,p,m)=>t(s+h,p,m);switch(n){case"scalar":a=Ro.Scalar.PLAIN,l=kw(i,c);break;case"single-quoted-scalar":a=Ro.Scalar.QUOTE_SINGLE,l=bw(i,c);break;case"double-quoted-scalar":a=Ro.Scalar.QUOTE_DOUBLE,l=_w(i,c);break;default:return t(r,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${n}`),{value:"",type:null,comment:"",range:[s,s+i.length,s+i.length]}}let d=s+i.length,u=ww.resolveEnd(o,d,e,t);return{value:l,type:a,comment:u.comment,range:[s,d,u.offset]}}function kw(r,e){let t="";switch(r[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 ${r[0]}`;break}case"@":case"`":{t=`reserved character ${r[0]}`;break}}return t&&e(0,"BAD_SCALAR_START",`Plain value cannot start with ${t}`),Md(r)}function bw(r,e){return(r[r.length-1]!=="'"||r.length===1)&&e(r.length,"MISSING_CHAR","Missing closing 'quote"),Md(r.slice(1,-1)).replace(/''/g,"'")}function Md(r){let e,t;try{e=new RegExp(`(.*?)(?<![ ])[ ]*\r?
|
|
89
89
|
`,"sy"),t=new RegExp(`[ ]*(.*?)(?:(?<![ ])[ ]*)?\r?
|
|
90
|
-
`,"sy")}catch{e=/(.*?)[ \t]*\r?\n/sy,t=/[ \t]*(.*?)[ \t]*\r?\n/sy}let s=e.exec(
|
|
91
|
-
`?
|
|
92
|
-
`:(
|
|
93
|
-
`))if(
|
|
94
|
-
`){let{fold:i,offset:o}=
|
|
95
|
-
`)for(i=
|
|
96
|
-
`)for(i=
|
|
97
|
-
`&&!(o==="\r"&&
|
|
98
|
-
`)&&(t+=s>i?
|
|
99
|
-
`||s==="\r")&&!(s==="\r"&&
|
|
90
|
+
`,"sy")}catch{e=/(.*?)[ \t]*\r?\n/sy,t=/[ \t]*(.*?)[ \t]*\r?\n/sy}let s=e.exec(r);if(!s)return r;let n=s[1],i=" ",o=e.lastIndex;for(t.lastIndex=o;s=t.exec(r);)s[1]===""?i===`
|
|
91
|
+
`?n+=i:i=`
|
|
92
|
+
`:(n+=i+s[1],i=" "),o=t.lastIndex;let a=/[ \t]*(.*)/sy;return a.lastIndex=o,s=a.exec(r),n+i+(s?.[1]??"")}function _w(r,e){let t="";for(let s=1;s<r.length-1;++s){let n=r[s];if(!(n==="\r"&&r[s+1]===`
|
|
93
|
+
`))if(n===`
|
|
94
|
+
`){let{fold:i,offset:o}=vw(r,s);t+=i,s=o}else if(n==="\\"){let i=r[++s],o=Tw[i];if(o)t+=o;else if(i===`
|
|
95
|
+
`)for(i=r[s+1];i===" "||i===" ";)i=r[++s+1];else if(i==="\r"&&r[s+1]===`
|
|
96
|
+
`)for(i=r[++s+1];i===" "||i===" ";)i=r[++s+1];else if(i==="x"||i==="u"||i==="U"){let a={x:2,u:4,U:8}[i];t+=Iw(r,s+1,a,e),s+=a}else{let a=r.substr(s-1,2);e(s-1,"BAD_DQ_ESCAPE",`Invalid escape sequence ${a}`),t+=a}}else if(n===" "||n===" "){let i=s,o=r[s+1];for(;o===" "||o===" ";)o=r[++s+1];o!==`
|
|
97
|
+
`&&!(o==="\r"&&r[s+2]===`
|
|
98
|
+
`)&&(t+=s>i?r.slice(i,s+1):n)}else t+=n}return(r[r.length-1]!=='"'||r.length===1)&&e(r.length,"MISSING_CHAR",'Missing closing "quote'),t}function vw(r,e){let t="",s=r[e+1];for(;(s===" "||s===" "||s===`
|
|
99
|
+
`||s==="\r")&&!(s==="\r"&&r[e+2]!==`
|
|
100
100
|
`);)s===`
|
|
101
101
|
`&&(t+=`
|
|
102
|
-
`),e+=1,s=
|
|
103
|
-
`,r:"\r",t:" ",v:"\v",N:"\x85",_:"\xA0",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\"," ":" "};function
|
|
102
|
+
`),e+=1,s=r[e+1];return t||(t=" "),{fold:t,offset:e}}var Tw={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 Iw(r,e,t,s){let n=r.substr(e,t),o=n.length===t&&/^[0-9a-fA-F]+$/.test(n)?parseInt(n,16):NaN;if(isNaN(o)){let a=r.substr(e-2,t+2);return s(e-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${a}`),a}return String.fromCodePoint(o)}Dd.resolveFlowScalar=Sw});var $d=T(Pd=>{"use strict";var yt=R(),Ld=Z(),Cw=$o(),Aw=Bo();function Ew(r,e,t,s){let{value:n,type:i,comment:o,range:a}=e.type==="block-scalar"?Cw.resolveBlockScalar(r,e,s):Aw.resolveFlowScalar(e,r.options.strict,s),l=t?r.directives.tagName(t.source,u=>s(t,"TAG_RESOLVE_FAILED",u)):null,c;r.options.stringKeys&&r.atKey?c=r.schema[yt.SCALAR]:l?c=Nw(r.schema,n,l,t,s):e.type==="scalar"?c=xw(r,n,e,s):c=r.schema[yt.SCALAR];let d;try{let u=c.resolve(n,h=>s(t??e,"TAG_RESOLVE_FAILED",h),r.options);d=yt.isScalar(u)?u:new Ld.Scalar(u)}catch(u){let h=u instanceof Error?u.message:String(u);s(t??e,"TAG_RESOLVE_FAILED",h),d=new Ld.Scalar(n)}return d.range=a,d.source=n,i&&(d.type=i),l&&(d.tag=l),c.format&&(d.format=c.format),o&&(d.comment=o),d}function Nw(r,e,t,s,n){if(t==="!")return r[yt.SCALAR];let i=[];for(let a of r.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=r.knownTags[t];return o&&!o.collection?(r.tags.push(Object.assign({},o,{default:!1,test:void 0})),o):(n(s,"TAG_RESOLVE_FAILED",`Unresolved tag: ${t}`,t!=="tag:yaml.org,2002:str"),r[yt.SCALAR])}function xw({atKey:r,directives:e,schema:t},s,n,i){let o=t.tags.find(a=>(a.default===!0||r&&a.default==="key")&&a.test?.test(s))||t[yt.SCALAR];if(t.compat){let a=t.compat.find(l=>l.default&&l.test?.test(s))??t[yt.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(n,"TAG_RESOLVE_FAILED",d,!0)}}return o}Pd.composeScalar=Ew});var Bd=T(Rd=>{"use strict";function Ow(r,e,t){if(e){t??(t=e.length);for(let s=t-1;s>=0;--s){let n=e[s];switch(n.type){case"space":case"comment":case"newline":r-=n.source.length;continue}for(n=e[++s];n?.type==="space";)r+=n.source.length,n=e[++s];break}}return r}Rd.emptyScalarPosition=Ow});var jd=T(qo=>{"use strict";var Mw=us(),Dw=R(),Lw=xd(),Ud=$d(),Pw=Ft(),$w=Bd(),Rw={composeNode:qd,composeEmptyNode:Uo};function qd(r,e,t,s){let n=r.atKey,{spaceBefore:i,comment:o,anchor:a,tag:l}=t,c,d=!0;switch(e.type){case"alias":c=Bw(r,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=Ud.composeScalar(r,e,l,s),a&&(c.anchor=a.source.substring(1));break;case"block-map":case"block-seq":case"flow-collection":try{c=Lw.composeCollection(Rw,r,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=Uo(r,e.offset,void 0,null,t,s)),a&&c.anchor===""&&s(a,"BAD_ALIAS","Anchor cannot be an empty string"),n&&r.options.stringKeys&&(!Dw.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),r.options.keepSourceTokens&&d&&(c.srcToken=e),c}function Uo(r,e,t,s,{spaceBefore:n,comment:i,anchor:o,tag:a,end:l},c){let d={type:"scalar",offset:$w.emptyScalarPosition(e,t,s),indent:-1,source:""},u=Ud.composeScalar(r,d,a,c);return o&&(u.anchor=o.source.substring(1),u.anchor===""&&c(o,"BAD_ALIAS","Anchor cannot be an empty string")),n&&(u.spaceBefore=!0),i&&(u.comment=i,u.range[2]=l),u}function Bw({options:r},{offset:e,source:t,end:s},n){let i=new Mw.Alias(t.substring(1));i.source===""&&n(e,"BAD_ALIAS","Alias cannot be an empty string"),i.source.endsWith(":")&&n(e+t.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);let o=e+t.length,a=Pw.resolveEnd(s,o,r.strict,n);return i.range=[e,o,a.offset],a.comment&&(i.comment=a.comment),i}qo.composeEmptyNode=Uo;qo.composeNode=qd});var Hd=T(Kd=>{"use strict";var Uw=Es(),Fd=jd(),qw=Ft(),jw=Ms();function Fw(r,e,{offset:t,start:s,value:n,end:i},o){let a=Object.assign({_directives:e},r),l=new Uw.Document(void 0,a),c={atKey:!1,atRoot:!0,directives:l.directives,options:l.options,schema:l.schema},d=jw.resolveProps(s,{indicator:"doc-start",next:n??i?.[0],offset:t,onError:o,parentIndent:0,startOnNewline:!0});d.found&&(l.directives.docStart=!0,n&&(n.type==="block-map"||n.type==="block-seq")&&!d.hasNewline&&o(d.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")),l.contents=n?Fd.composeNode(c,n,d,o):Fd.composeEmptyNode(c,d.end,s,null,d,o);let u=l.contents.range[2],h=qw.resolveEnd(i,u,!1,o);return h.comment&&(l.comment=h.comment),l.range=[t,u,h.offset],l}Kd.composeDoc=Fw});var Fo=T(Vd=>{"use strict";var Kw=H("process"),Hw=Ci(),Ww=Es(),Ds=Os(),Wd=R(),Gw=Hd(),Vw=Ft();function Ls(r){if(typeof r=="number")return[r,r+1];if(Array.isArray(r))return r.length===2?r:[r[0],r[1]];let{offset:e,source:t}=r;return[e,e+(typeof t=="string"?t.length:1)]}function Gd(r){let e="",t=!1,s=!1;for(let n=0;n<r.length;++n){let i=r[n];switch(i[0]){case"#":e+=(e===""?"":s?`
|
|
104
104
|
|
|
105
105
|
`:`
|
|
106
|
-
`)+(i.substring(1)||" "),t=!0,s=!1;break;case"%":n
|
|
107
|
-
${s}`:s;else if(
|
|
106
|
+
`)+(i.substring(1)||" "),t=!0,s=!1;break;case"%":r[n+1]?.[0]!=="#"&&(n+=1),t=!1;break;default:t||(s=!0),t=!1}}return{comment:e,afterEmptyLine:s}}var jo=class{constructor(e={}){this.doc=null,this.atDirectives=!1,this.prelude=[],this.errors=[],this.warnings=[],this.onError=(t,s,n,i)=>{let o=Ls(t);i?this.warnings.push(new Ds.YAMLWarning(o,s,n)):this.errors.push(new Ds.YAMLParseError(o,s,n))},this.directives=new Hw.Directives({version:e.version||"1.2"}),this.options=e}decorate(e,t){let{comment:s,afterEmptyLine:n}=Gd(this.prelude);if(s){let i=e.contents;if(t)e.comment=e.comment?`${e.comment}
|
|
107
|
+
${s}`:s;else if(n||e.directives.docStart||!i)e.commentBefore=s;else if(Wd.isCollection(i)&&!i.flow&&i.items.length>0){let o=i.items[0];Wd.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:
|
|
110
|
-
${t.comment}`:t.comment}this.doc.range[2]=t.offset;break}default:this.errors.push(new
|
|
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:Gd(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose(e,t=!1,s=-1){for(let n of e)yield*this.next(n);yield*this.end(t,s)}*next(e){switch(Kw.env.LOG_STREAM&&console.dir(e,{depth:null}),e.type){case"directive":this.directives.add(e.source,(t,s,n)=>{let i=Ls(e);i[0]+=t,this.onError(i,"BAD_DIRECTIVE",s,n)}),this.prelude.push(e.source),this.atDirectives=!0;break;case"document":{let t=Gw.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 Ds.YAMLParseError(Ls(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 Ds.YAMLParseError(Ls(e),"UNEXPECTED_TOKEN",s));break}this.doc.directives.docEnd=!0;let t=Vw.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 Ds.YAMLParseError(Ls(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),n=new Ww.Document(void 0,s);this.atDirectives&&this.onError(t,"MISSING_CHAR","Missing directives-end indicator line"),n.range=[0,t,t],this.decorate(n,!1),yield n}}};Vd.Composer=jo});var zd=T(Zn=>{"use strict";var Yw=$o(),Jw=Bo(),zw=Os(),Yd=gs();function Qw(r,e=!0,t){if(r){let s=(n,i,o)=>{let a=typeof n=="number"?n:Array.isArray(n)?n[0]:n.offset;if(t)t(a,i,o);else throw new zw.YAMLParseError([a,a+1],i,o)};switch(r.type){case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return Jw.resolveFlowScalar(r,e,s);case"block-scalar":return Yw.resolveBlockScalar({options:{strict:e}},r,s)}}return null}function Xw(r,e){let{implicitKey:t=!1,indent:s,inFlow:n=!1,offset:i=-1,type:o="PLAIN"}=e,a=Yd.stringifyString({type:o,value:r},{implicitKey:t,indent:s>0?" ".repeat(s):"",inFlow:n,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
|
|
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
|
|
115
|
-
`),s=e.substring(0,t),
|
|
116
|
-
`;if(
|
|
117
|
-
`});for(let l of Object.keys(
|
|
118
|
-
`};delete
|
|
113
|
+
`,h=[{type:"block-scalar-header",offset:i,indent:s,source:d}];return Jd(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 Zw(r,e,t={}){let{afterKey:s=!1,implicitKey:n=!1,inFlow:i=!1,type:o}=t,a="indent"in r?r.indent:null;if(s&&typeof a=="number"&&(a+=2),!o)switch(r.type){case"single-quoted-scalar":o="QUOTE_SINGLE";break;case"double-quoted-scalar":o="QUOTE_DOUBLE";break;case"block-scalar":{let c=r.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=Yd.stringifyString({type:o,value:e},{implicitKey:n||a===null,indent:a!==null&&a>0?" ".repeat(a):"",inFlow:i,options:{blockQuote:!0,lineWidth:-1}});switch(l[0]){case"|":case">":eS(r,l);break;case'"':Ko(r,l,"double-quoted-scalar");break;case"'":Ko(r,l,"single-quoted-scalar");break;default:Ko(r,l,"scalar")}}function eS(r,e){let t=e.indexOf(`
|
|
115
|
+
`),s=e.substring(0,t),n=e.substring(t+1)+`
|
|
116
|
+
`;if(r.type==="block-scalar"){let i=r.props[0];if(i.type!=="block-scalar-header")throw new Error("Invalid block scalar header");i.source=s,r.source=n}else{let{offset:i}=r,o="indent"in r?r.indent:-1,a=[{type:"block-scalar-header",offset:i,indent:o,source:s}];Jd(a,"end"in r?r.end:void 0)||a.push({type:"newline",offset:-1,indent:o,source:`
|
|
117
|
+
`});for(let l of Object.keys(r))l!=="type"&&l!=="offset"&&delete r[l];Object.assign(r,{type:"block-scalar",indent:o,props:a,source:n})}}function Jd(r,e){if(e)for(let t of e)switch(t.type){case"space":case"comment":r.push(t);break;case"newline":return r.push(t),!0}return!1}function Ko(r,e,t){switch(r.type){case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":r.type=t,r.source=e;break;case"block-scalar":{let s=r.props.slice(1),n=e.length;r.props[0].type==="block-scalar-header"&&(n-=r.props[0].source.length);for(let i of s)i.offset+=n;delete r.props,Object.assign(r,{type:t,source:e,end:s});break}case"block-map":case"block-seq":{let n={type:"newline",offset:r.offset+e.length,indent:r.indent,source:`
|
|
118
|
+
`};delete r.items,Object.assign(r,{type:t,source:e,end:[n]});break}default:{let s="indent"in r?r.indent:-1,n="end"in r&&Array.isArray(r.end)?r.end.filter(i=>i.type==="space"||i.type==="comment"||i.type==="newline"):[];for(let i of Object.keys(r))i!=="type"&&i!=="offset"&&delete r[i];Object.assign(r,{type:t,indent:s,source:e,end:n})}}}Zn.createScalarToken=Xw;Zn.resolveAsScalar=Qw;Zn.setScalarValue=Zw});var Xd=T(Qd=>{"use strict";var tS=r=>"type"in r?tr(r):er(r);function tr(r){switch(r.type){case"block-scalar":{let e="";for(let t of r.props)e+=tr(t);return e+r.source}case"block-map":case"block-seq":{let e="";for(let t of r.items)e+=er(t);return e}case"flow-collection":{let e=r.start.source;for(let t of r.items)e+=er(t);for(let t of r.end)e+=t.source;return e}case"document":{let e=er(r);if(r.end)for(let t of r.end)e+=t.source;return e}default:{let e=r.source;if("end"in r&&r.end)for(let t of r.end)e+=t.source;return e}}}function er({start:r,key:e,sep:t,value:s}){let n="";for(let i of r)n+=i.source;if(e&&(n+=tr(e)),t)for(let i of t)n+=i.source;return s&&(n+=tr(s)),n}Qd.stringify=tS});var su=T(tu=>{"use strict";var Ho=Symbol("break visit"),sS=Symbol("skip children"),Zd=Symbol("remove item");function wt(r,e){"type"in r&&r.type==="document"&&(r={start:r.start,value:r.value}),eu(Object.freeze([]),r,e)}wt.BREAK=Ho;wt.SKIP=sS;wt.REMOVE=Zd;wt.itemAtPath=(r,e)=>{let t=r;for(let[s,n]of e){let i=t?.[s];if(i&&"items"in i)t=i.items[n];else return}return t};wt.parentCollection=(r,e)=>{let t=wt.itemAtPath(r,e.slice(0,-1)),s=e[e.length-1][0],n=t?.[s];if(n&&"items"in n)return n;throw new Error("Parent collection not found")};function eu(r,e,t){let s=t(e,r);if(typeof s=="symbol")return s;for(let n of["key","value"]){let i=e[n];if(i&&"items"in i){for(let o=0;o<i.items.length;++o){let a=eu(Object.freeze(r.concat([[n,o]])),i.items[o],t);if(typeof a=="number")o=a-1;else{if(a===Ho)return Ho;a===Zd&&(i.items.splice(o,1),o-=1)}}typeof s=="function"&&n==="key"&&(s=s(e,r))}}return typeof s=="function"?s(e,r):s}tu.visit=wt});var sr=T(ue=>{"use strict";var Wo=zd(),nS=Xd(),rS=su(),Go="\uFEFF",Vo="",Yo="",Jo="",iS=r=>!!r&&"items"in r,oS=r=>!!r&&(r.type==="scalar"||r.type==="single-quoted-scalar"||r.type==="double-quoted-scalar"||r.type==="block-scalar");function aS(r){switch(r){case Go:return"<BOM>";case Vo:return"<DOC>";case Yo:return"<FLOW_END>";case Jo:return"<SCALAR>";default:return JSON.stringify(r)}}function cS(r){switch(r){case Go:return"byte-order-mark";case Vo:return"doc-mode";case Yo:return"flow-error-end";case Jo: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(
|
|
121
|
-
`:case"\r":case" ":return!0;default:return!1}}var
|
|
122
|
-
\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(r[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=Wo.createScalarToken;ue.resolveAsScalar=Wo.resolveAsScalar;ue.setScalarValue=Wo.setScalarValue;ue.stringify=nS.stringify;ue.visit=rS.visit;ue.BOM=Go;ue.DOCUMENT=Vo;ue.FLOW_END=Yo;ue.SCALAR=Jo;ue.isCollection=iS;ue.isScalar=oS;ue.prettyToken=aS;ue.tokenType=cS});var Xo=T(ru=>{"use strict";var Ps=sr();function Ie(r){switch(r){case void 0:case" ":case`
|
|
121
|
+
`:case"\r":case" ":return!0;default:return!1}}var nu=new Set("0123456789ABCDEFabcdef"),lS=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),nr=new Set(",[]{}"),dS=new Set(` ,[]{}
|
|
122
|
+
\r `),zo=r=>!r||dS.has(r),Qo=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
|
-
`:!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
|
|
125
|
-
`||!
|
|
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 n=this.buffer[s+e+1];if(n===`
|
|
125
|
+
`||!n&&!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]===
|
|
128
|
-
`,this.pos);if(
|
|
129
|
-
`,i)}
|
|
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]===Ps.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 n=(yield*this.pushCount(t))+(yield*this.pushSpaces(!0));return yield*this.pushCount(e.length-n),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 Ps.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(zo),"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 n=this.getLine();if(n===null)return this.setNext("flow");if((s!==-1&&s<this.indentNext&&n[0]!=="#"||s===0&&(n.startsWith("---")||n.startsWith("..."))&&Ie(n[3]))&&!(s===this.indentNext-1&&this.flowLevel===1&&(n[0]==="]"||n[0]==="}")))return this.flowLevel=0,yield Ps.FLOW_END,yield*this.parseLineStart();let i=0;for(;n[i]===",";)i+=yield*this.pushCount(1),i+=yield*this.pushSpaces(!0),this.flowKey=!1;switch(i+=yield*this.pushIndicators(),n[i]){case void 0:return"flow";case"#":return yield*this.pushCount(n.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(zo),"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),n=s.indexOf(`
|
|
128
|
+
`,this.pos);if(n!==-1){for(;n!==-1;){let i=this.continueScalar(n+1);if(i===-1)break;n=s.indexOf(`
|
|
129
|
+
`,i)}n!==-1&&(t=n-(s[n-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
|
-
`,i)}while(e!==-1);if(e===-1){if(!this.atEnd)return this.setNext("block-scalar");e=this.buffer.length}}let
|
|
133
|
-
`;)s=this.buffer[++
|
|
134
|
-
`&&i>=this.pos&&i+1+t>a)e=i;else break}while(!0);return yield
|
|
135
|
-
`?(s+=1,
|
|
136
|
-
`,i=this.buffer[s+1]):t=s),i==="#"||e&&
|
|
137
|
-
`){let o=this.continueScalar(s+1);if(o===-1)break;s=Math.max(s,o-2)}}else{if(e&&
|
|
132
|
+
`,i)}while(e!==-1);if(e===-1){if(!this.atEnd)return this.setNext("block-scalar");e=this.buffer.length}}let n=e+1;for(s=this.buffer[n];s===" ";)s=this.buffer[++n];if(s===" "){for(;s===" "||s===" "||s==="\r"||s===`
|
|
133
|
+
`;)s=this.buffer[++n];e=n-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 Ps.SCALAR,yield*this.pushToIndex(e+1,!0),yield*this.parseLineStart()}*parsePlainScalar(){let e=this.flowLevel>0,t=this.pos-1,s=this.pos-1,n;for(;n=this.buffer[++s];)if(n===":"){let i=this.buffer[s+1];if(Ie(i)||e&&nr.has(i))break;t=s}else if(Ie(n)){let i=this.buffer[s+1];if(n==="\r"&&(i===`
|
|
135
|
+
`?(s+=1,n=`
|
|
136
|
+
`,i=this.buffer[s+1]):t=s),i==="#"||e&&nr.has(i))break;if(n===`
|
|
137
|
+
`){let o=this.continueScalar(s+1);if(o===-1)break;s=Math.max(s,o-2)}}else{if(e&&nr.has(n))break;t=s}return!n&&!this.atEnd?this.setNext("plain-scalar"):(yield Ps.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(zo))+(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(lS.has(t))t=this.buffer[++e];else if(t==="%"&&nu.has(this.buffer[e+1])&&nu.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
|
|
139
|
+
`?yield*this.pushCount(2):0}*pushSpaces(e){let t=this.pos-1,s;do s=this.buffer[++t];while(s===" "||e&&s===" ");let n=t-this.pos;return n>0&&(yield this.buffer.substr(this.pos,n),this.pos=t),n}*pushUntil(e){let t=this.pos,s=this.buffer[t];for(;!e(s);)s=this.buffer[++t];return yield*this.pushToIndex(t,!1)}};ru.Lexer=Qo});var ea=T(iu=>{"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 n=this.lineStarts[t-1];return{line:t,col:e-n+1}}}};iu.LineCounter=Zo});var sa=T(du=>{"use strict";var uS=H("process"),ou=sr(),hS=Xo();function rt(r,e){for(let t=0;t<r.length;++t)if(r[t].type===e)return!0;return!1}function au(r){for(let e=0;e<r.length;++e)switch(r[e].type){case"space":case"comment":case"newline":break;default:return e}return-1}function lu(r){switch(r?.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"flow-collection":return!0;default:return!1}}function rr(r){switch(r.type){case"document":return r.start;case"block-map":{let e=r.items[r.items.length-1];return e.sep??e.start}case"block-seq":return r.items[r.items.length-1].start;default:return[]}}function Kt(r){if(r.length===0)return[];let e=r.length;e:for(;--e>=0;)switch(r[e].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break e}for(;r[++e]?.type==="space";);return r.splice(e,r.length)}function cu(r){if(r.start.type==="flow-seq-start")for(let e of r.items)e.sep&&!e.value&&!rt(e.start,"explicit-key-ind")&&!rt(e.sep,"map-value-ind")&&(e.key&&(e.value=e.key),delete e.key,lu(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 ta=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 hS.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,uS.env.LOG_TOKENS&&console.log("|",ou.prettyToken(e)),this.atScalar){this.atScalar=!1,yield*this.step(),this.offset+=e.length;return}let t=ou.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"&&cu(t),s.type){case"document":s.value=t;break;case"block-scalar":s.props.push(t);break;case"block-map":{let n=s.items[s.items.length-1];if(n.value){s.items.push({start:[],key:t,sep:[]}),this.onKeyLine=!0;return}else if(n.sep)n.value=t;else{Object.assign(n,{key:t,sep:[]}),this.onKeyLine=!n.explicitKey;return}break}case"block-seq":{let n=s.items[s.items.length-1];n.value?s.items.push({start:[],value:t}):n.value=t;break}case"flow-collection":{let n=s.items[s.items.length-1];!n||n.value?s.items.push({start:[],key:t,sep:[]}):n.sep?n.value=t:Object.assign(n,{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 n=t.items[t.items.length-1];n&&!n.sep&&!n.value&&n.start.length>0&&au(n.start)===-1&&(t.indent===0||n.start.every(i=>i.type!=="comment"||i.indent<t.indent))&&(s.type==="document"?s.end=n.start:s.items.push({start:n.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":{au(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),n;e.end?(n=e.end,n.push(this.sourceToken),delete e.end):n=[this.sourceToken];let i={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:s,key:e,sep:n}]};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
|
|
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 n=e.items[e.items.length-2]?.value?.end;if(Array.isArray(n)){Array.prototype.push.apply(n,t.start),n.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,n=s&&(t.sep||t.explicitKey)&&this.type!=="seq-item-ind",i=[];if(n&&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":n||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):n||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(rt(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(lu(t.key)&&!rt(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(rt(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||n?e.items.push({start:i,key:null,sep:[this.sourceToken]}):rt(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);n||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&&!rt(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 n=e.items[e.items.length-2]?.value?.end;if(Array.isArray(n)){Array.prototype.push.apply(n,t.start),n.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||rt(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 n=this.flowScalar(this.type);!t||t.value?e.items.push({start:[],key:n,sep:[]}):t.sep?this.stack.push(n):Object.assign(t,{key:n,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 n=rr(s),i=Kt(n);cu(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=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=X(),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")
|
|
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())}}};du.Parser=ta});var mu=T(Rs=>{"use strict";var uu=Fo(),fS=Es(),$s=Os(),pS=Ui(),mS=R(),gS=ea(),hu=sa();function fu(r){let e=r.prettyErrors!==!1;return{lineCounter:r.lineCounter||e&&new gS.LineCounter||null,prettyErrors:e}}function yS(r,e={}){let{lineCounter:t,prettyErrors:s}=fu(e),n=new hu.Parser(t?.addNewLine),i=new uu.Composer(e),o=Array.from(i.compose(n.parse(r)));if(s&&t)for(let a of o)a.errors.forEach($s.prettifyError(r,t)),a.warnings.forEach($s.prettifyError(r,t));return o.length>0?o:Object.assign([],{empty:!0},i.streamInfo())}function pu(r,e={}){let{lineCounter:t,prettyErrors:s}=fu(e),n=new hu.Parser(t?.addNewLine),i=new uu.Composer(e),o=null;for(let a of i.compose(n.parse(r),!0,r.length))if(!o)o=a;else if(o.options.logLevel!=="silent"){o.errors.push(new $s.YAMLParseError(a.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return s&&t&&(o.errors.forEach($s.prettifyError(r,t)),o.warnings.forEach($s.prettifyError(r,t))),o}function wS(r,e,t){let s;typeof e=="function"?s=e:t===void 0&&e&&typeof e=="object"&&(t=e);let n=pu(r,t);if(!n)return null;if(n.warnings.forEach(i=>pS.warn(n.options.logLevel,i)),n.errors.length>0){if(n.options.logLevel!=="silent")throw n.errors[0];n.errors=[]}return n.toJS(Object.assign({reviver:s},t))}function SS(r,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 n=Math.round(t);t=n<1?void 0:n>8?{indent:8}:{indent:n}}if(r===void 0){let{keepUndefined:n}=t??e??{};if(!n)return}return mS.isDocument(r)&&!s?r.toString(t):new fS.Document(r,s,t).toString(t)}Rs.parse=wS;Rs.parseAllDocuments=yS;Rs.parseDocument=pu;Rs.stringify=SS});var ra=T(j=>{"use strict";var kS=Fo(),bS=Es(),_S=_o(),na=Os(),vS=us(),it=R(),TS=et(),IS=Z(),CS=st(),AS=nt(),ES=sr(),NS=Xo(),xS=ea(),OS=sa(),ir=mu(),gu=as();j.Composer=kS.Composer;j.Document=bS.Document;j.Schema=_S.Schema;j.YAMLError=na.YAMLError;j.YAMLParseError=na.YAMLParseError;j.YAMLWarning=na.YAMLWarning;j.Alias=vS.Alias;j.isAlias=it.isAlias;j.isCollection=it.isCollection;j.isDocument=it.isDocument;j.isMap=it.isMap;j.isNode=it.isNode;j.isPair=it.isPair;j.isScalar=it.isScalar;j.isSeq=it.isSeq;j.Pair=TS.Pair;j.Scalar=IS.Scalar;j.YAMLMap=CS.YAMLMap;j.YAMLSeq=AS.YAMLSeq;j.CST=ES;j.Lexer=NS.Lexer;j.LineCounter=xS.LineCounter;j.Parser=OS.Parser;j.parse=ir.parse;j.parseAllDocuments=ir.parseAllDocuments;j.parseDocument=ir.parseDocument;j.stringify=ir.stringify;j.visit=gu.visit;j.visitAsync=gu.visitAsync});function yu(r={},e){let t={};for(let s of Object.keys(Ht)){let n=r[s]??Ht[s];t[s]=n&&(e?.[s]??!0)}return t}var Ht,ia=K(()=>{"use strict";Ht={externalComms:!0,codeTask:!1,codeAccess:!1}});import{readFileSync as MS,existsSync as bu,readdirSync as DS,statSync as LS}from"node:fs";import{resolve as oa}from"node:path";import{randomUUID as aa}from"node:crypto";import{execFileSync as PS}from"node:child_process";function wu(r){let e=process.env[r]||vu(r);if(!e)throw new Error(`Missing required env var: ${r}`);return e}function _(r,e){return process.env[r]||vu(r)||e}function RS(r){if(r?.length)return r.map(t=>oa(t.replace(/^~/,process.env.HOME??"/tmp")));let e=oa(ce,"plugins/claude-code");return bu(e)?DS(e).map(t=>oa(e,t)).filter(t=>LS(t).isDirectory()):[]}function vu(r){if(process.platform!=="darwin")return"";try{return PS("security",["find-generic-password","-s",`hive/${Bs}/${r}`,"-w"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()}catch{return""}}var ku,_u,$S,Su,A,DT,Bs,ot,St,g,Ce=K(()=>{"use strict";ku=ve(Nc(),1),_u=ve(ra(),1);ia();is();$S=hc(ce);ku.default.config({path:$S});Su=uc(ce),A={};bu(Su)&&(A=(0,_u.parse)(MS(Su,"utf-8"))??{});DT=process.env.HOME??"/tmp",Bs=A.instance?.id??"hive";ot=A.instance?.portBase??3100,St=A.instance?.ports??{},g={instance:{id:Bs,portBase:ot},business:{name:A.business?.name??_("BUSINESS_NAME",""),description:A.business?.description??"",location:A.business?.location??"",ownerName:A.business?.owner?.name??"",ownerRole:A.business?.owner?.role??""},slack:{appToken:wu("SLACK_APP_TOKEN"),botToken:wu("SLACK_BOT_TOKEN"),mcpToken:_("SLACK_MCP_TOKEN",""),auditChannel:_("SLACK_AUDIT_CHANNEL",A.slack?.auditChannel??""),localMcpServer:!!(A.slack?.localMcpServer??!1)},anthropic:{apiKey:_("ANTHROPIC_API_KEY","")},linear:{apiKey:_("LINEAR_API_KEY",""),teamId:_("LINEAR_TEAM_ID","")},clickup:{apiToken:_("CLICKUP_API_TOKEN","")},github:{repo:_("GITHUB_REPO",""),token:_("GH_TOKEN","")},brave:{apiKey:_("BRAVE_API_KEY","")},taskLedger:{apiUrl:_("TASK_LEDGER_API_URL","http://localhost:3002"),agentKeys:Object.fromEntries(Object.entries(process.env).filter(([r])=>r.startsWith("TASK_LEDGER_KEY_")).map(([r,e])=>[r.replace("TASK_LEDGER_KEY_","").toLowerCase().replace(/_/g,"-"),e])),apiKey:_("TASK_LEDGER_API_KEY","")},mongo:{uri:_("MONGODB_URI","mongodb://localhost:27017"),dbName:_("MONGODB_DB",`hive_${Bs}`)},defaultAgent:_("DEFAULT_AGENT","chief-of-staff"),google:{account:_("GOOGLE_ACCOUNT",A.google?.account??""),client:_("GOG_CLIENT",A.google?.client??""),accounts:A.google?.accounts??{},sharedFolder:_("DRIVE_SHARED_FOLDER",A.google?.sharedFolder??A.googleWorkspace?.sharedFolder??"")},googleWorkspace:{account:_("GWS_ACCOUNT",A.googleWorkspace?.account??""),gwsPath:_("GWS_PATH",""),sharedFolder:_("GWS_SHARED_FOLDER",A.googleWorkspace?.sharedFolder??"")},quo:{apiKey:_("QUO_API_KEY",""),phoneNumberId:_("QUO_PHONE_NUMBER_ID",""),lines:A.quo?.lines??{}},sms:{lines:A.sms?.lines??[]},imessage:{enabled:A.imessage?.enabled??!1,slackChannel:A.imessage?.slackChannel??"imessage",hotWindowMs:A.imessage?.hotWindowMs??3e5,coldIntervalMs:A.imessage?.coldIntervalMs??3e5,hotIntervalMs:A.imessage?.hotIntervalMs??1e4},resend:{apiKey:_("RESEND_API_KEY",""),fromAddress:_("RESEND_FROM_ADDRESS",""),defaultCc:_("RESEND_DEFAULT_CC",""),defaultBcc:_("RESEND_DEFAULT_BCC",""),emailDomain:_("RESEND_EMAIL_DOMAIN",A.resend?.emailDomain??""),businessName:_("RESEND_BUSINESS_NAME",A.resend?.businessName??"")},plugins:A.plugins??[],skillRegistries:A.skillRegistries??[{name:"keepur-default",url:"https://github.com/keepur/hive-skills",default:!0}],gemini:{apiKey:_("GEMINI_API_KEY",""),visionModel:_("GEMINI_VISION_MODEL","gemini-2.5-flash")},permits:{mongoUri:_("PERMITS_MONGO_URI","mongodb://localhost:27017/permits")},recall:{apiKey:_("RECALL_API_KEY",""),region:_("RECALL_API_REGION","us-west-2"),monitorPort:parseInt(_("MEETING_MONITOR_PORT",String(St.recall??ot+1)),10),monitorPublicUrl:_("MEETING_MONITOR_PUBLIC_URL",""),webhookSecret:_("RECALL_WEBHOOK_SECRET","")},scheduler:{heartbeatIntervalMs:parseInt(_("HEARTBEAT_INTERVAL_MS","120000"),10)},background:{port:parseInt(_("BG_TASK_PORT",String(St.background??ot)),10),authToken:_("BG_TASK_AUTH_TOKEN","")||aa()},slackInternal:{port:parseInt(_("SLACK_INTERNAL_PORT",String(St.slackInternal??ot+6)),10),authToken:_("SLACK_INTERNAL_TOKEN","")||aa()},codeTask:{port:parseInt(_("CODE_TASK_PORT",String(St.codeTask??ot+2)),10),authToken:_("CODE_TASK_AUTH_TOKEN","")||aa(),pluginDirs:RS(A.codeTask?.pluginDirs),defaultModel:_("CODE_TASK_MODEL","claude-sonnet-4-6"),defaultMaxTurns:parseInt(_("CODE_TASK_MAX_TURNS","100"),10),defaultMaxBudget:parseFloat(_("CODE_TASK_MAX_BUDGET","5.00")),maxConcurrent:parseInt(_("CODE_TASK_MAX_CONCURRENT","2"),10),maxLifetimeMs:parseInt(_("CODE_TASK_MAX_LIFETIME_MS",String(480*60*1e3)),10),staleGraceMs:parseInt(_("CODE_TASK_STALE_GRACE_MS",String(1800*1e3)),10)},ws:{enabled:_("WS_ENABLED","false")==="true",port:parseInt(_("WS_PORT",String(St.ws??ot+3)),10)},beekeeper:{port:parseInt(_("BEEKEEPER_PORT",String(A.beekeeper?.port??8420)),10)},workflow:{enabled:_("WORKFLOW_ENABLED","false")==="true"},adminApi:{port:parseInt(_("ADMIN_API_PORT",String(St.adminApi??ot+4)),10),token:_("ADMIN_API_TOKEN","")},voice:{enabled:!!A.voice?.provider,provider:A.voice?.provider??"",publicUrl:A.voice?.publicUrl??"",phoneNumberId:A.voice?.phoneNumberId??"",assistants:A.voice?.assistants??{},apiKey:_("VAPI_API_KEY",""),serverSecret:_("VAPI_SERVER_SECRET",""),port:parseInt(_("VOICE_PORT",String(St.voice??ot+5)),10)},autonomy:{externalComms:A.autonomy?.externalComms??Ht.externalComms,codeTask:A.autonomy?.codeTask??Ht.codeTask,codeAccess:A.autonomy?.codeAccess??Ht.codeAccess},modelRouter:{enabled:_("MODEL_ROUTER_ENABLED","true")==="true",model:_("MODEL_ROUTER_MODEL","claude-haiku-4-5-20251001"),timeoutMs:parseInt(_("MODEL_ROUTER_TIMEOUT_MS","8000"),10)},sweeper:{intervalMs:parseInt(_("SWEEPER_INTERVAL_MS","300000"),10),threadTtlMs:parseInt(_("SWEEPER_THREAD_TTL_MS","86400000"),10),taskFileTtlMs:parseInt(_("SWEEPER_TASK_FILE_TTL_MS","604800000"),10),meetingSessionTtlMs:parseInt(_("SWEEPER_MEETING_TTL_MS","3600000"),10),cacheTtlMs:parseInt(_("SWEEPER_CACHE_TTL_MS","3600000"),10),retryMaxAttempts:parseInt(_("SWEEPER_RETRY_MAX_ATTEMPTS","3"),10),retryBaseDelayMs:parseInt(_("SWEEPER_RETRY_BASE_DELAY_MS","30000"),10)},memory:{hotBudgetTokens:parseInt(_("MEMORY_HOT_BUDGET_TOKENS",String(A.memory?.hotBudgetTokens??3e3)),10),sweepIntervalHours:parseFloat(_("MEMORY_SWEEP_INTERVAL_HOURS",String(A.memory?.sweepIntervalHours??6))),hotThreshold:parseFloat(_("MEMORY_HOT_THRESHOLD",String(A.memory?.hotThreshold??.6))),warmThreshold:parseFloat(_("MEMORY_WARM_THRESHOLD",String(A.memory?.warmThreshold??.3))),recencyHalfLifeDays:parseFloat(_("MEMORY_RECENCY_HALF_LIFE_DAYS",String(A.memory?.recencyHalfLifeDays??7))),coldSummaryMinRecords:parseInt(_("MEMORY_COLD_SUMMARY_MIN",String(A.memory?.coldSummaryMinRecords??5)),10),coldRetentionDays:parseInt(_("MEMORY_COLD_RETENTION_DAYS",String(A.memory?.coldRetentionDays??90)),10),purgeRetentionDays:parseInt(_("MEMORY_PURGE_RETENTION_DAYS",String(A.memory?.purgeRetentionDays??7)),10),reflectionMinTurns:parseInt(_("MEMORY_REFLECTION_MIN_TURNS",String(A.memory?.reflectionMinTurns??3)),10)},codeIndex:{enabled:A.codeIndex?.enabled===!0||process.env.CODE_INDEX_ENABLED==="true",scoreThreshold:parseFloat(_("CODE_INDEX_SCORE_THRESHOLD",String(A.codeIndex?.scoreThreshold??.65))),prefetchLimit:parseInt(_("CODE_INDEX_PREFETCH_LIMIT",String(A.codeIndex?.prefetchLimit??8)),10),sessionKnowledge:{enabled:(A.codeIndex?.sessionKnowledge?.enabled??!0)&&process.env.CODE_INDEX_SESSION_KNOWLEDGE!=="false"},repos:A.codeIndex?.repos??{}},events:{retentionDays:parseInt(_("EVENT_RETENTION_DAYS",String(A.events?.retentionDays??30)),10)},activity:{enabled:(A.activity?.enabled??!0)&&process.env.ACTIVITY_LOG_ENABLED!=="false",bufferSize:parseInt(_("ACTIVITY_BUFFER_SIZE",String(A.activity?.bufferSize??200)),10),flushIntervalMs:parseInt(_("ACTIVITY_FLUSH_INTERVAL_MS",String(A.activity?.flushIntervalMs??3e4)),10),retentionDays:parseInt(_("ACTIVITY_RETENTION_DAYS",String(A.activity?.retentionDays??90)),10)},autoDream:{enabled:A.autoDream?.enabled??!0,idleThresholdMinutes:parseInt(_("AUTODREAM_IDLE_THRESHOLD_MINUTES",String(A.autoDream?.idleThresholdMinutes??30)),10),cooldownMinutes:parseInt(_("AUTODREAM_COOLDOWN_MINUTES",String(A.autoDream?.cooldownMinutes??60)),10),similarityThreshold:parseFloat(_("AUTODREAM_SIMILARITY_THRESHOLD",String(A.autoDream?.similarityThreshold??.85))),patternMinCount:parseInt(_("AUTODREAM_PATTERN_MIN_COUNT",String(A.autoDream?.patternMinCount??3)),10),maxClustersPerRun:parseInt(_("AUTODREAM_MAX_CLUSTERS",String(A.autoDream?.maxClustersPerRun??20)),10),maxContradictionPairsPerRun:parseInt(_("AUTODREAM_MAX_CONTRADICTIONS",String(A.autoDream?.maxContradictionPairsPerRun??30)),10),maxPromotionsPerRun:parseInt(_("AUTODREAM_MAX_PROMOTIONS",String(A.autoDream?.maxPromotionsPerRun??10)),10)},browser:{cdpEndpoint:_("BROWSER_CDP_ENDPOINT","")},tasksDir:{code:_("CODE_TASKS_DIR",`/tmp/${Bs}-code-tasks`),background:_("BG_TASKS_DIR",`/tmp/${Bs}-bg-tasks`)}}});function Cu(r){ca.has(r.id)&&Iu.warn("Archetype already registered \u2014 overwriting",{id:r.id}),ca.set(r.id,r),Iu.info("Registered archetype",{id:r.id})}function or(r){return ca.get(r)}var Iu,ca,ar=K(()=>{"use strict";x();Iu=b("archetypes"),ca=new Map});import{readFileSync as WS,writeFileSync as GS}from"node:fs";function VS(r){let e=r.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);if(!e)throw new Error("No YAML frontmatter found");let t=e[1],s=e[2],n={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")n.name=kt(d);else if(c==="description")n.description=kt(d);else if(c==="workflow")n.workflow=kt(d);else if(c==="agents"){let u=d.match(/^\[([^\]]*)\]$/);if(u)n.agents=u[1].split(",").map(h=>kt(h.trim())).filter(h=>h.length>0);else if(d==="")for(n.agents=[];o+1<i.length&&i[o+1].match(/^\s+-\s+/);){o++;let h=i[o].replace(/^\s+-\s+/,"").trim();n.agents.push(kt(h))}else n.agents=[kt(d)]}else if(c==="origin")for(n.origin=Ku(i,o);o+1<i.length&&i[o+1].match(/^\s+\S/);)o++;else if(c==="author")for(n.author=Ku(i,o);o+1<i.length&&i[o+1].match(/^\s+\S/);)o++;o++}return{frontmatter:n,body:s}}function Ku(r,e){let t={},s=e+1;for(;s<r.length&&r[s].match(/^\s+\S/);){let n=r[s].match(/^\s+([\w][\w-]*):\s*(.*)/);if(n){let i=n[2].trim();i==="true"?t[n[1]]=!0:i==="false"?t[n[1]]=!1:t[n[1]]=kt(i)}s++}return t}function kt(r){return r.startsWith('"')&&r.endsWith('"')||r.startsWith("'")&&r.endsWith("'")?r.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"):r}function YS(r,e){let t=[];t.push(`name: ${lr(r.name)}`),t.push(`description: ${lr(r.description)}`);let s=r.agents.join(", ");return t.push(`agents: [${s}]`),r.workflow&&t.push(`workflow: ${lr(r.workflow)}`),r.origin&&(t.push("origin:"),Hu(t,r.origin)),r.author&&(t.push("author:"),Hu(t,r.author)),`---
|
|
145
145
|
${t.join(`
|
|
146
146
|
`)}
|
|
147
147
|
---
|
|
148
|
-
${e}`}function
|
|
148
|
+
${e}`}function Hu(r,e){for(let[t,s]of Object.entries(e))s!==void 0&&r.push(` ${t}: ${lr(String(s))}`)}function lr(r){return r.includes(":")||r.includes("#")||r.includes('"')?`"${r.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`:r}function Wu(r){let e=WS(r,"utf-8");return VS(e)}function Gu(r,e,t){GS(r,YS(e,t),"utf-8")}function Vu(r){let e=r.match(/^(---\n)([\s\S]*?)(\n---\n?)([\s\S]*)$/);if(!e)return r;let t=e[1],s=e[2],n=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
|
-
`)+
|
|
151
|
-
`).map(i=>i.replace(/^\s+-\s+/,"").trim()).filter(Boolean);let
|
|
152
|
-
\u2192 ${s.join(" ")}`),t}var
|
|
150
|
+
`)+n+i}var da=K(()=>{"use strict"});import{createHash as JS}from"node:crypto";import{readdirSync as zS,readFileSync as QS,statSync as XS}from"node:fs";import{join as Yu}from"node:path";function Ju(r){let e=zu(r).sort(),t=JS("sha256");for(let s=0;s<e.length;s++){s>0&&t.update("\0");let n=Yu(r,e[s]),i=QS(n,"utf-8");e[s]==="SKILL.md"?t.update(Vu(i)):t.update(i)}return t.digest("hex")}function zu(r,e=""){let t=zS(r),s=[];for(let n of t){let i=Yu(r,n),o=e?`${e}/${n}`:n;XS(i).isDirectory()?s.push(...zu(i,o)):s.push(o)}return s}var Qu=K(()=>{"use strict";da()});import{readdirSync as ha,readFileSync as ZS,statSync as fa,existsSync as bt}from"node:fs";import{join as Ae,relative as e0,resolve as t0}from"node:path";function pa(r,e,t){let s=new Map,n=[],i=new Map;for(let o of t??[]){let a=Ae(o,"skills");if(!bt(a))continue;let l=o.split("/").pop()??"seed";ua(a,`seed:${l}`,i,s,n,!1)}for(let o of e??[]){let a=Ae(o.dir,"skills");bt(a)&&ua(a,o.name,i,s,n,!1)}if(bt(r)?ua(r,"customer",i,s,n,!0):Se.debug("No customer skills directory found",{path:r}),n.length>0){for(let o of[...s.keys()])s.get(o).push(...n);s.set("__universal__",n)}return s0=n0(i,r),Se.info("Skill index loaded",{workflows:i.size,agents:s.size-(s.has("__universal__")?1:0)}),s}function Xu(r,e,t){for(let[s,n]of e){let i=n.filter(o=>o.path!==r);i.length!==n.length&&(i.length===0?e.delete(s):e.set(s,i))}for(let s=t.length-1;s>=0;s--)t[s].path===r&&t.splice(s,1)}function ua(r,e,t,s,n,i){let o;try{o=ha(r).filter(a=>{try{return fa(Ae(r,a)).isDirectory()}catch{return!1}})}catch(a){Se.warn("Failed to read skills directory",{source:e,path:r,error:String(a)});return}for(let a of o){let l=Ae(r,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}}),Xu(d.path,s,n),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}}),Xu(d.path,s,n),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,m;try{m=ha(c).filter(f=>{try{return fa(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 m){let y=Ae(c,f,"SKILL.md");if(!bt(y))continue;let w=r0(ZS(y,"utf-8"));for(let S of w)S==="all"?p=!0:h.add(S)}if(p)n.push(u),Se.debug("Workflow registered as universal",{source:e,workflow:a,skills:m.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:m.length})}}}function Zu(r,e){let t=r.get(e)??[],s=r.get("__universal__")??[];if(t.length>0&&s.length>0){let n=new Set(t.map(o=>o.path)),i=s.filter(o=>!n.has(o.path));return[...t,...i]}return t.length===0&&s.length>0?[...s]:t}function n0(r,e){let t=new Set,s=t0(e,"..");for(let[n,i]of r){if(i.source!=="customer")continue;let o=Ae(i.path,"skills");if(!bt(o))continue;let a;try{a=ha(o).filter(l=>{try{return fa(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}=Wu(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:n,skill:l,source:u.origin.source,baseHash:u.origin["base-content-hash"],currentHash:p}),!u.origin.modified)){u.origin.modified=!0;try{Gu(d,u,h),gc(s,[e0(s,d)],`detect-modified: ${l} content hash changed`)}catch(m){Se.error("Failed to persist modified flag to disk",{path:d,error:String(m)})}}}catch{}}}return t}function r0(r){let e=r.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 n=t.match(/^agents:\s*\[([^\]]*)\]/m);return n?n[1].split(",").map(i=>i.trim()).filter(Boolean):[]}var Se,s0,ma=K(()=>{"use strict";x();Qu();da();wi();Se=b("skill-loader"),s0=new Set});function ga(r,e){let t=`- ${r}: ${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 Us,ya=K(()=>{"use strict";Us={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 eh(r=[]){let e=[],t=[];for(let s of Object.keys(Us)){if(o0.has(s)){e.push(s);continue}let n=i0[s];!n||n()?e.push(s):t.push(s)}for(let s of r)for(let[n,i]of Object.entries(s.manifest.mcpServers)){let o=i.env??[];o.length===0||o.every(l=>!!process.env[l])?e.push(n):t.push(n)}return{instanceId:g.instance?.id??"unknown",servers:{configured:e,unconfigured:t}}}var i0,o0,th=K(()=>{"use strict";Ce();ya();i0={google:()=>Object.keys(g.google?.accounts??{}).length>0||!!g.google?.account,resend:()=>!!g.resend?.apiKey,"brave-search":()=>!!g.brave?.apiKey,linear:()=>!!g.linear?.apiKey,clickup:()=>!!g.clickup?.apiToken,"github-issues":()=>!!g.github?.repo,quo:()=>!!g.quo?.apiKey,recall:()=>!!g.recall?.apiKey,"code-task":()=>!0,"code-search":()=>!!g.codeIndex?.enabled,browser:()=>!!g.browser?.cdpEndpoint,tasks:()=>(g.taskLedger?.apiUrl??"")!=="http://localhost:3002"},o0=new Set(["memory","slack","contacts","callback","background","schedule","event-bus","conversation-search","keychain","admin"])});var sh={};Le(sh,{AgentRunner:()=>qs});import{query as a0}from"@anthropic-ai/claude-agent-sdk";import{resolve as Be}from"node:path";import{existsSync as dr,statSync as c0}from"node:fs";import{createRequire as l0}from"node:module";import{readFile as d0}from"node:fs/promises";function u0(r){return JSON.stringify(eh(r))}function Y(r){let e=h0[r];if(e){let t=Be(ur,"mcp",e);if(dr(t))return t}return Be(ur,r)}var B,ur,h0,qs,wa=K(()=>{"use strict";ar();x();Ce();is();ma();ya();th();B=b("agent-runner");ur=dr(Be(import.meta.dirname,"mcp"))?import.meta.dirname:Be(import.meta.dirname,".."),h0={"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","slack/slack-mcp-server.js":"slack.min.js"};qs=class r{static registryRef;agentConfig;memoryManager;plugins;skillIndex;activeQuery=null;eventSubscribersJson;prefetcher;_archetypeDef=void 0;constructor(e,t,s=[],n=new Map,i="{}",o){this.agentConfig=e,this.memoryManager=t,this.plugins=s,this.skillIndex=n,this.eventSubscribersJson=i,this.prefetcher=o}async buildSystemPrompt(e,t){let s=[];this.agentConfig.soul&&s.push(this.agentConfig.soul);let n=this.getArchetypeDef();if(n&&this.agentConfig.archetypeConfig)try{let u=n.systemPromptCard({agentConfig:this.agentConfig,archetypeConfig:this.agentConfig.archetypeConfig});u&&s.push(u)}catch(u){B.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=>!r.INFRASTRUCTURE_SERVERS.has(u));if(o.length>0){let u=o.map(h=>ga(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=>
|
|
156
|
+
`)}`)}let a=t??[];if(a.length>0){let u=a.map(h=>ga(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(`
|
|
160
|
-
`)}`)}let l=await this.memoryManager.getHotTierPrompt(this.agentConfig.id,
|
|
161
|
-
${h}`);let
|
|
162
|
-
You have ${
|
|
163
|
-
`+
|
|
160
|
+
`)}`)}let l=await this.memoryManager.getHotTierPrompt(this.agentConfig.id,g.memory.hotBudgetTokens);if(l)s.push(l);else{let u=`agents/${this.agentConfig.id}`,h=await this.memoryManager.read(`${u}/memory.md`);h&&s.push(`## Your Memory
|
|
161
|
+
${h}`);let m=(await this.memoryManager.list(u)).filter(f=>f.endsWith(".md")&&f!=="memory.md");m.length>0&&s.push(`## Available Memory Files
|
|
162
|
+
You have ${m.length} reference file(s) in your memory directory:
|
|
163
|
+
`+m.map(f=>`- ${u}/${f}`).join(`
|
|
164
164
|
`)+"\n\nRead relevant files via the memory MCP server (`memory_read`) before starting tasks that may relate to them.")}let d=new Date().toLocaleString("en-US",{timeZone:"America/Los_Angeles",weekday:"long",year:"numeric",month:"long",day:"numeric",hour:"numeric",minute:"2-digit",hour12:!0});return s.push(`**Current date/time**: ${d} (Pacific Time)`),s.join(`
|
|
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:[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"),s.add("slack"),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&&
|
|
168
|
+
`)}buildServerConfig(e,t){return this.buildAllServerConfigs(t)[e]}buildAllServerConfigs(e){let t={};if(g.slack.localMcpServer)t.slack={type:"stdio",command:"node",args:[Y("slack/slack-mcp-server.js")],env:{HIVE_INTERNAL_URL:`http://127.0.0.1:${g.slackInternal.port}`,HIVE_INTERNAL_TOKEN:g.slackInternal.authToken,HIVE_AGENT_ID:this.agentConfig.id}};else{let c=g.slack.mcpToken;c&&(t.slack={type:"http",url:"https://mcp.slack.com/mcp",headers:{Authorization:`Bearer ${c}`}})}let s=[{id:"self",backing:"mongo"}],n=this.getArchetypeDef();if(n&&this.agentConfig.archetypeConfig)try{let c=n.memoryScopes({agentConfig:this.agentConfig,archetypeConfig:this.agentConfig.archetypeConfig});for(let d of c)d.id!=="self"&&s.push(d)}catch(c){B.error("Archetype memoryScopes threw \u2014 using self-only",{agent:this.agentConfig.id,archetype:this.agentConfig.archetype,error:String(c)})}t.memory={type:"stdio",command:"node",args:[Y("memory/memory-mcp-server.js")],env:{AGENT_ID:this.agentConfig.id,MONGODB_URI:g.mongo.uri,MONGODB_DB:g.mongo.dbName,MEMORY_SCOPES_JSON:JSON.stringify(s)}},t["structured-memory"]={type:"stdio",command:"node",args:[Y("memory/structured-memory-mcp-server.js")],env:{AGENT_ID:this.agentConfig.id,MONGODB_URI:g.mongo.uri,MONGODB_DB:g.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/${g.instance.id}`}};let i=g.google.accounts[this.agentConfig.id]||g.google.account,o=g.google.client;if(t.google={type:"stdio",command:"node",args:[Y("google/google-mcp-server.js")],env:{...i?{GOG_ACCOUNT:i}:{},...o?{GOG_CLIENT:o}:{},DRIVE_SHARED_FOLDER:g.google.sharedFolder,INSTANCE_ID:g.instance.id,PATH:process.env.PATH??""}},g.quo.apiKey&&(t.quo={type:"stdio",command:"node",args:[Y("quo/quo-mcp-server.js")],env:{QUO_API_KEY:g.quo.apiKey,...g.quo.phoneNumberId?{QUO_PHONE_NUMBER_ID:g.quo.phoneNumberId}:{},QUO_LINES_JSON:JSON.stringify(g.quo.lines)}}),g.voice.enabled&&g.voice.apiKey){let c=Object.entries(g.voice.assistants).find(([d,u])=>u===this.agentConfig.id)?.[0]??"";t.voice={type:"stdio",command:"node",args:[Y("voice/voice-mcp-server.js")],env:{VAPI_API_KEY:g.voice.apiKey,VAPI_PHONE_NUMBER_ID:g.voice.phoneNumberId,VAPI_ASSISTANT_ID:c,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:g.mongo.uri,MONGODB_DB:g.mongo.dbName}};let a=g.taskLedger.agentKeys[this.agentConfig.id]??g.taskLedger.apiKey;if(a&&(t.tasks={type:"stdio",command:"node",args:[Y("tasks/task-mcp-server.js")],env:{TASK_LEDGER_API_URL:g.taskLedger.apiUrl,TASK_LEDGER_API_KEY:a}}),g.brave.apiKey&&(t["brave-search"]={type:"stdio",command:"node",args:[l0(import.meta.url).resolve("brave-search-mcp/dist/index.js")],env:{BRAVE_API_KEY:g.brave.apiKey}}),g.resend.apiKey){let c=this.agentConfig.name.toLowerCase(),d=g.resend.emailDomain,u=g.resend.businessName?` (${g.resend.businessName})`:"",h=d?`${this.agentConfig.name}${u} <${c}@${d}>`:g.resend.fromAddress;t.resend={type:"stdio",command:"node",args:[Y("resend/resend-mcp-server.js")],env:{RESEND_API_KEY:g.resend.apiKey,RESEND_FROM_ADDRESS:h,RESEND_DEFAULT_CC:g.resend.defaultCc,RESEND_DEFAULT_BCC:g.resend.defaultBcc}}}if(g.linear.apiKey){let c={LINEAR_API_KEY:g.linear.apiKey};g.linear.teamId&&(c.LINEAR_TEAM_ID=g.linear.teamId),t.linear={type:"stdio",command:"node",args:[Y("linear/linear-mcp-server.js")],env:c}}if(g.github.repo){let c={GITHUB_REPO:g.github.repo,PATH:process.env.PATH??""};g.github.token&&(c.GH_TOKEN=g.github.token),t["github-issues"]={type:"stdio",command:"node",args:[Y("github/github-issues-mcp-server.js")],env:c}}g.clickup.apiToken&&(t.clickup={type:"stdio",command:"node",args:[Y("clickup/clickup-mcp-server.js")],env:{CLICKUP_API_TOKEN:g.clickup.apiToken}}),g.recall.apiKey&&(t.recall={type:"stdio",command:"node",args:[Y("recall/recall-mcp-server.js")],env:{RECALL_API_KEY:g.recall.apiKey,RECALL_API_REGION:g.recall.region,RECALL_WEBHOOK_SECRET:g.recall.webhookSecret,MEETING_MONITOR_API:`http://127.0.0.1:${g.recall.monitorPort}`,MEETING_MONITOR_PUBLIC_URL:g.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??""}}),g.browser.cdpEndpoint&&(t.browser={type:"stdio",command:"npx",args:["@playwright/mcp@latest","--cdp-endpoint",g.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:${g.background.port}`,BG_AUTH_TOKEN:g.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:g.mongo.uri,MONGODB_DB:g.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:${g.codeTask.port}`,CT_AUTH_TOKEN:g.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 l={OLLAMA_URL:process.env.OLLAMA_URL??"http://localhost:11434",QDRANT_URL:process.env.QDRANT_URL??"http://localhost:6333"};process.env.KB_EMBED_MODEL&&(l.KB_EMBED_MODEL=process.env.KB_EMBED_MODEL),t["conversation-search"]={type:"stdio",command:"node",args:[Y("search/conversation-search-mcp-server.js")],env:{...l,AGENT_ID:this.agentConfig.id,DEFAULT_AGENT:g.defaultAgent}},t["code-search"]={type:"stdio",command:"node",args:[Y("code-index/code-search-mcp-server.js")],env:{MONGODB_URI:g.mongo.uri,MONGODB_DB:g.mongo.dbName,QDRANT_URL:process.env.QDRANT_URL??"http://localhost:6333",OLLAMA_URL:process.env.OLLAMA_URL??"http://localhost:11434"}};for(let c of this.plugins)for(let[d,u]of Object.entries(c.manifest.mcpServers)){if(t[d]){B.warn("Plugin server name conflicts with core server, skipping",{plugin:c.name,server:d});continue}let h=u.entry.replace(/\.ts$/,".js"),p=u.entry.replace(/\.ts$/,".min.js"),m=Be(ur,`plugins/${c.name}/${h}`),f=Be(ce,"plugins","node_modules",c.name,"dist",p),y=Be(ce,"plugins",c.name,"dist",p),w=[m,f,y].find(I=>dr(I))??m,S=g.taskLedger.agentKeys[this.agentConfig.id]??g.taskLedger.apiKey,k={AGENT_ID:this.agentConfig.id,AGENT_NAME:this.agentConfig.name,MONGODB_URI:g.mongo.uri,MONGODB_DB:g.mongo.dbName,TASK_LEDGER_API_URL:g.taskLedger.apiUrl,...S?{TASK_LEDGER_API_KEY:S}:{},PATH:process.env.PATH??"",HOME:process.env.HOME??""};for(let I of u.env??[])process.env[I]&&(k[I]=process.env[I]);for(let[I,v]of Object.entries(u.envMap??{}))k[v]&&(k[I]=k[v]);for(let[I,v]of Object.entries(u.agentEnv??{}))k[I]=r.resolveAgentEnvPath(this.agentConfig,v);t[d]={type:"stdio",command:"node",args:[w],env:k}}return t["event-bus"]={type:"stdio",command:"node",args:[Y("events/event-bus-mcp-server.js")],env:{AGENT_ID:this.agentConfig.id,MONGODB_URI:g.mongo.uri,MONGODB_DB:g.mongo.dbName,EVENT_SUBSCRIBERS:this.eventSubscribersJson}},r.registryRef||B.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:g.mongo.uri,MONGODB_DB:g.mongo.dbName,AGENT_IDS:JSON.stringify(r.registryRef?.getAll().map(c=>c.id)??[])}},g.workflow.enabled&&(t.workflow={type:"stdio",command:"node",args:[Y("workflow/workflow-mcp-server.js")],env:{AGENT_ID:this.agentConfig.id,MONGODB_URI:g.mongo.uri,MONGODB_DB:g.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:g.mongo.uri,MONGODB_DB:g.mongo.dbName}},t.admin={type:"stdio",command:"node",args:[Y("admin/admin-mcp-server.js")],env:{MONGODB_URI:g.mongo.uri,MONGODB_DB:g.mongo.dbName,AGENT_ID:this.agentConfig.id,INSTANCE_CAPABILITIES:u0(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"),s.add("slack"),g.workflow.enabled&&s.add("workflow");for(let n of Object.keys(t))s.has(n)||delete t[n];if(!this.agentConfig.autonomy.externalComms)for(let n of["resend","quo"])t[n]&&(B.debug("Autonomy: externalComms disabled \u2014 removing server",{server:n,agent:this.agentConfig.id}),delete t[n]);return this.agentConfig.autonomy.codeTask||t["code-task"]&&(B.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"]&&(B.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("."),n=e;for(let i of s){if(n==null||typeof n!="object")return"";n=n[i]}return n==null?"":String(n)}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={},n=new Set;this.agentConfig.autonomy.externalComms||(n.add("resend"),n.add("quo")),this.agentConfig.autonomy.codeTask||n.add("code-task"),this.agentConfig.autonomy.codeAccess||n.add("code-search");for(let i of t){if(n.has(i)){B.debug("Autonomy gate \u2014 skipping delegate server",{server:i,agent:this.agentConfig.id});continue}r.CONTEXT_DEPENDENT_SERVERS.has(i)&&B.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){B.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&&B.info("Intent-aware delegate prompt loaded",{agent:this.agentConfig.id,server:i,promptLength:l.length})}return s}getServerCatalogEntry(e){if(Us[e])return Us[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=Be(ur,"..","plugins","claude-code");for(let n of e){if(n.includes("/")||n.includes("\\")||n===".."||n.startsWith(".")){B.warn("Invalid plugin name, skipping",{plugin:n,agent:this.agentConfig.id});continue}let i=Be(s,n);if(!dr(i)){B.warn("Plugin not found, skipping",{plugin:n,expected:i,agent:this.agentConfig.id});continue}t.push({type:"local",path:i})}return t.length>0&&B.debug("Loaded plugins for agent",{agent:this.agentConfig.id,plugins:t.map(n=>n.path)}),t}buildNativeSkills(){return Zu(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&&B.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 n=s.preToolUseHooks({agentConfig:this.agentConfig,archetypeConfig:this.agentConfig.archetypeConfig,workItemContext:e});n.length>0&&(t.PreToolUse=n)}catch(n){B.error("Archetype preToolUseHooks threw \u2014 installing deny-all PreToolUse hook",{agent:this.agentConfig.id,archetype:this.agentConfig.archetype,error:String(n)}),t.PreToolUse=[{hooks:[async()=>({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:`Archetype hook initialization failed (${String(n)}). 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(n,i,o)=>{B.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&&n?.transcript_path)try{let d=await d0(n.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){B.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,
|
|
172
|
-
${l}`});return{textContent:
|
|
171
|
+
${l}`:a}}]}]}async send(e,t,s,n,i,o){let a=i??this.agentConfig.model;B.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(n),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&&B.info("Delegate subagents configured",{agent:this.agentConfig.id,delegates:Object.keys(d)});let p={},m=this.getArchetypeDef();if(m&&this.agentConfig.archetypeConfig)try{p=m.sessionOptions({agentConfig:this.agentConfig,archetypeConfig:this.agentConfig.archetypeConfig,workItemContext:n})}catch(V){B.error("Archetype sessionOptions threw \u2014 ignoring",{agent:this.agentConfig.id,archetype:this.agentConfig.archetype,error:String(V)})}if(typeof p.cwd=="string"){let V=p.cwd,L;try{L=c0(V)}catch(P){let re=`Archetype cwd unavailable at session start \u2014 refusing to run: ${V} (${String(P)})`;throw B.error(re,{agent:this.agentConfig.id}),new Error(re)}if(!L.isDirectory()){let P=`Archetype cwd is not a directory: ${V}`;throw B.error(P,{agent:this.agentConfig.id}),new Error(P)}}let f=a0({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(n),...this.agentConfig.betas?.length?{betas:this.agentConfig.betas}:{},env:{...process.env,...g.anthropic.apiKey?{ANTHROPIC_API_KEY:g.anthropic.apiKey}:{},CLAUDE_AGENT_SDK_CLIENT_APP:"hive/0.1.0",CLAUDECODE:void 0}}});this.activeQuery=f;let y="",w=t??"",S=0,k=0,I=!1,v;this._aborted=!1;let N=0,D=0,C=0,E=0,G=0,W=0,$,z=[],Ot=null,ts=null,nn=o?.timeoutMs??this.agentConfig.timeoutMs??3e5,ut=setTimeout(()=>{B.warn("Agent query timed out, aborting",{agent:this.agentConfig.id,timeoutMs:nn}),this.abort()},nn);try{for await(let V of f){let L=V;if(L.type==="system"&&L.subtype==="init"&&(w=L.session_id,B.debug("Session initialized",{sessionId:w})),L.type==="system"&&L.subtype==="compact_boundary"){let P=L.compact_metadata;W++,$=P?.pre_tokens,B.info("Context compacted",{agent:this.agentConfig.id,trigger:P?.trigger,preTokens:P?.pre_tokens,compactionNumber:W})}if(L.type==="system"&&L.subtype==="status"&&L.status==="compacting"&&B.info("Compaction in progress",{agent:this.agentConfig.id}),L.type==="stream_event"&&s){let P=L.event;P?.type==="content_block_delta"&&P?.delta?.type==="text_delta"&&(s(P.delta.text),I=!0)}if(L.type==="tool_progress"){let P=L;B.info("Tool in progress",{agent:this.agentConfig.id,tool:P.tool_name,elapsed:P.elapsed_time_seconds})}if(L.type==="assistant"){let P=L.message?.content;if(Array.isArray(P))for(let re of P)re.type==="text"?y=re.text:re.type==="tool_use"&&(ts&&z.length>0&&(z[z.length-1].endMs=Date.now()),ts=re.name,Ot=Date.now(),z.push({tool:re.name,startMs:Ot}),B.info("Tool call started",{agent:this.agentConfig.id,tool:re.name}));L.session_id&&(w=L.session_id)}if(L.type==="result"){let P=L;S=P.total_cost_usd,k=P.duration_ms,w=P.session_id;let re=P.usage;re&&(N=re.input_tokens??0,D=re.output_tokens??0,C=re.cache_read_input_tokens??0,E=re.cache_creation_input_tokens??0);let rn=P.modelUsage;if(rn)for(let rs of Object.values(rn))rs.contextWindow&&rs.contextWindow>G&&(G=rs.contextWindow);P.subtype==="success"?y=P.result||y:(v=P.subtype,"errors"in P&&Array.isArray(P.errors)&&(v=P.errors.join("; ")))}}}catch(V){let L=String(V);y&&S>0?B.warn("Agent process crashed after producing response \u2014 using response anyway",{agent:this.agentConfig.id,error:L,resultPreview:y.slice(0,200),costUsd:S,durationMs:k}):(v=L,B.error("Agent query failed",{agent:this.agentConfig.id,error:L,costUsd:S,durationMs:k}))}finally{clearTimeout(ut),this.activeQuery=null}ts&&z.length>0&&(z[z.length-1].endMs=Date.now());let ht={};for(let V of z){let L=(V.endMs??Date.now())-V.startMs,P=V.tool.includes("__")?V.tool.split("__")[1]:V.tool;ht[P]||(ht[P]={count:0,totalMs:0}),ht[P].count++,ht[P].totalMs+=L}let ss=Object.entries(ht).sort((V,L)=>L[1].totalMs-V[1].totalMs).map(([V,L])=>`${V}:${L.count}x/${(L.totalMs/1e3).toFixed(1)}s`).join(", "),ns=z.reduce((V,L)=>V+((L.endMs??Date.now())-L.startMs),0),Ge=k-ns;return B.info("Agent response complete",{agent:this.agentConfig.id,sessionId:w,costUsd:S,durationMs:k,llmMs:Ge,toolMs:ns,toolCalls:z.length,toolSummary:ss||"none",inputTokens:N,outputTokens:D,cacheReadTokens:C,cacheCreationTokens:E,contextWindow:G,compactions:W,preCompactTokens:$,streamed:I,hasError:!!v}),{text:y,sessionId:w,costUsd:S,durationMs:k,llmMs:Ge,toolMs:ns,toolCalls:z.length,toolSummary:ss||"none",streamed:I,inputTokens:N,outputTokens:D,cacheReadTokens:C,cacheCreationTokens:E,contextWindow:G,compactions:W,preCompactTokens:$,error:v,aborted:this._aborted}}_aborted=!1;get wasAborted(){return this._aborted}abort(){this.activeQuery&&(B.info("Aborting active query",{agent:this.agentConfig.id}),this._aborted=!0,this.activeQuery.close(),this.activeQuery=null)}}});import{writeFileSync as ka,mkdirSync as f0}from"node:fs";import{join as fr,extname as ba}from"node:path";import{tmpdir as p0}from"node:os";function ih(r){Sa=r}async function oh(r,e){if(!Sa)return null;try{let t=r.toString("base64"),s=await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${nh}:generateContent?key=${Sa}`,{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 me.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&&me.info("Image described via Gemini",{model:nh,chars:i.length}),i||null}catch(t){return me.warn("Gemini vision failed",{error:t.message}),null}}async function ah(r,e,t){let s=ba(e).slice(1).toLowerCase();if(m0.has(s)||t.startsWith("text/"))return{textContent:hr(r.toString("utf-8")),isImage:!1};if(s==="pdf"||t==="application/pdf")try{let n=await import("pdf-parse"),o=await(n.default??n)(r);return{textContent:hr(o.text),isImage:!1}}catch(n){return me.warn("PDF parse failed",{name:e,error:n.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:r});return{textContent:hr(i.value),isImage:!1}}catch(n){return me.warn("DOCX parse failed",{name:e,error:n.message}),{textContent:"[DOCX \u2014 could not extract text]",isImage:!1}}if(s==="xlsx"||s==="xls"||t.includes("spreadsheet"))try{let n=await import("xlsx"),i=n.read(r,{type:"buffer"}),o=i.SheetNames.map(a=>{let l=n.utils.sheet_to_csv(i.Sheets[a]);return`--- Sheet: ${a} ---
|
|
172
|
+
${l}`});return{textContent:hr(o.join(`
|
|
173
173
|
|
|
174
|
-
`)),isImage:!1}}catch(
|
|
174
|
+
`)),isImage:!1}}catch(n){return me.warn("XLSX parse failed",{name:e,error:n.message}),{textContent:"[Spreadsheet \u2014 could not extract content]",isImage:!1}}return null}async function ch(r,e){let t=r.url_private_download||r.url_private;if(!t)return me.warn("No download URL for file",{id:r.id,name:r.name}),null;try{me.info("Downloading file",{id:r.id,url:t.slice(0,80),mimetype:r.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&&(me.info("Following redirect",{id:r.id}),s=await fetch(d))}if(!s.ok)return me.error("Failed to download file",{id:r.id,status:s.status}),null;let n=Buffer.from(await s.arrayBuffer());if(n.length<100&&n.length>0){let d=n.toString("utf-8").trim();if(d.includes("requested")&&d.includes("file")&&d.includes("not found"))return me.error("Slack file error response",{id:r.id,name:r.name,errorText:d,bufferSize:n.length}),null}let i=r.name.replace(/[^a-zA-Z0-9._-]/g,"_"),o=fr(pr,`${r.id}-${i}`);ka(o,n);let a=ba(r.name).slice(1).toLowerCase();if(rh.has(a)||r.mimetype.startsWith("image/")){let d=await oh(n,r.mimetype);return{name:r.name,mimetype:r.mimetype,size:r.size,localPath:o,textContent:d??"[Image \u2014 could not extract description]",isImage:!0}}let c=await ah(n,r.name,r.mimetype);return c?{name:r.name,mimetype:r.mimetype,size:r.size,localPath:o,...c}:(me.info("Unsupported file type",{name:r.name,ext:a,mimetype:r.mimetype}),{name:r.name,mimetype:r.mimetype,size:r.size,localPath:o,textContent:null,isImage:!1})}catch(s){return me.error("File processing failed",{id:r.id,name:r.name,error:s.message}),null}}async function js(r,e,t){let s=e.replace(/[^a-zA-Z0-9._-]/g,"_"),n=fr(pr,`ws-${Date.now()}-${s}`);ka(n,r);let i=await oh(r,t);return{name:e,mimetype:t,size:r.length,localPath:n,textContent:i??"[Image \u2014 could not extract description]",isImage:!0}}async function lh(r,e,t){let s=e.replace(/[^a-zA-Z0-9._-]/g,"_"),n=fr(pr,`team-${Date.now()}-${s}`);ka(n,r);let i=ba(e).slice(1).toLowerCase();if(rh.has(i)||t.startsWith("image/"))return js(r,e,t);let a=await ah(r,e,t);return a?{name:e,mimetype:t,size:r.length,localPath:n,...a}:{name:e,mimetype:t,size:r.length,localPath:n,textContent:null,isImage:!1}}function dh(r){return r.length===0?"":`
|
|
175
175
|
|
|
176
|
-
`+
|
|
176
|
+
`+r.map(t=>{let s=`\u{1F4CE} File: ${t.name} (${uh(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,16 +184,16 @@ ${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
|
|
187
|
+
`)}function uh(r){return r<1024?`${r} B`:r<1024*1024?`${(r/1024).toFixed(1)} KB`:`${(r/(1024*1024)).toFixed(1)} MB`}function hr(r,e=5e4){return r.length<=e?r:r.slice(0,e)+`
|
|
188
188
|
|
|
189
|
-
[... truncated at ${
|
|
189
|
+
[... truncated at ${uh(e)} \u2014 full file at local path]`}var me,pr,rh,Sa,nh,m0,Fs=K(()=>{"use strict";x();me=b("file-processor"),pr=fr(p0(),"hive-slack-files");f0(pr,{recursive:!0});rh=new Set(["png","jpg","jpeg","gif","webp","bmp","heic"]),Sa="",nh=process.env.GEMINI_VISION_MODEL||"gemini-2.5-flash";m0=new Set(["csv","tsv","txt","text","md","markdown","json","xml","html","yaml","yml","log"])});import{readFileSync as b0}from"node:fs";import{resolve as fh}from"node:path";function v0(){let r=[fh(import.meta.dirname,"..","..","package.json"),fh(import.meta.dirname,"..","package.json")];for(let e of r)try{let t=JSON.parse(b0(e,"utf-8"));if(t?.name==="@keepur/hive"&&typeof t.hiveApi=="string")return t.hiveApi}catch{continue}return null}var _0,ph,_a,mh=K(()=>{"use strict";x();_0=b("api-version");ph=v0();ph||_0.warn("Could not read hiveApi from package.json; falling back to 1.0.0");_a=ph??"1.0.0"});var Sh={};Le(Sh,{isHiveApiCompatible:()=>yh,loadPlugins:()=>Ta,normalizeManifest:()=>wh,registerPluginCommands:()=>I0});import{readFileSync as T0,existsSync as yr}from"node:fs";import{resolve as va,join as Hs}from"node:path";function Ta(r,e){let t=[];for(let s of r){let n=va(e,"plugins","node_modules",s),i=va(e,"plugins",s),o=Hs(n,"plugin.yaml"),a=Hs(i,"plugin.yaml"),l;if(yr(o))l=n;else if(yr(a))l=i;else{ct.warn("Plugin manifest not found, skipping",{plugin:s,tried:[o,a]});continue}let c=Hs(l,"plugin.yaml"),d=(0,gh.parse)(T0(c,"utf-8")),u=wh(d);if(u.hiveApi&&!yh(u.hiveApi,_a)){ct.warn("Plugin declares incompatible hiveApi range, skipping",{plugin:s,requires:u.hiveApi,running:_a});continue}for(let[h,p]of Object.entries(u.mcpServers)){let m=Hs(l,p.entry);yr(m)||ct.warn("Plugin MCP server entry not found",{plugin:s,server:h,entry:m})}for(let h of u.agentSeeds){let p=Hs(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 yh(r,e){let t=r.trim();if(t===e)return!0;if(t.startsWith("^")){let s=t.slice(1).split(".").map(Number),n=e.split(".").map(Number);return!(s.length<1||n.length<1||s[0]!==n[0]||(n[1]??0)<(s[1]??0)||(n[1]??0)===(s[1]??0)&&(n[2]??0)<(s[2]??0))}return ct.warn("Unrecognized hiveApi range syntax, accepting",{range:r}),!0}function wh(r){return{name:r.name??"",description:r.description??"",hiveApi:r.hiveApi??r["hive-api"]??void 0,mcpServers:Object.fromEntries(Object.entries(r["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:r["agent-seeds"]??r["agents-templates"]??[],registerCommands:r["register-commands"]??void 0}}async function I0(r,e){for(let t of r)if(t.manifest.registerCommands)try{let n=await import(va(t.dir,"dist",t.manifest.registerCommands));typeof n.registerCommands=="function"&&(n.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 gh,ct,Ia=K(()=>{"use strict";gh=ve(ra(),1);x();mh();ct=b("plugin-loader")});async function Ue(r,e){let t=await fetch(`${r}/api/embed`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:C0,input:e})});if(!t.ok)throw new Error(`Ollama embed ${t.status}: ${await t.text()}`);return(await t.json()).embeddings[0]}var C0,wr=K(()=>{"use strict";C0=process.env.KB_EMBED_MODEL??"bge-large"});var xa,SE,Gh=K(()=>{"use strict";xa="code_index",SE=Buffer.from("6ba7b8109dad11d180b400c04fd430c8","hex")});var Vh={};Le(Vh,{CodeIndexPrefetcher:()=>Oa});import{QdrantClient as zk}from"@qdrant/js-client-rest";import{MongoClient as Qk}from"mongodb";var Oa,Yh=K(()=>{"use strict";wr();Gh();Oa=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 Qk(this.options.mongoUri),await this.mongo.connect(),this.qdrant=new zk({url:this.options.qdrantUrl}),this.connected=!0)}async getContext(e,t){try{await this.ensureConnected()}catch{return""}let s=[],n;try{n=await Ue(this.options.ollamaUrl,e)}catch{return""}try{let o=(await this.qdrant.search(xa,{vector:n,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
|
-
`))}}catch{}if(t)try{let o=(await this.qdrant.search("agent_memory",{vector:
|
|
191
|
+
`))}}catch{}if(t)try{let o=(await this.qdrant.search("agent_memory",{vector:n,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,
|
|
195
|
-
`)}async close(){this.connected&&await this.mongo.close()}}});var
|
|
196
|
-
[...truncated]`:t.result,
|
|
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,n;for(;(n=t.exec(e))!==null;)s.add(n[1]);return[...s]}async getCompactionContext(e,t){try{await this.ensureConnected()}catch{return""}let s=[],n=[],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 Ue(this.options.ollamaUrl,c),u=await this.qdrant.search(xa,{vector:d,limit:this.prefetchLimit,with_payload:!0});for(let h of u){if(h.score<this.scoreThreshold)continue;let p=h.payload,m=`${p.repo}:${p.filePath}`;i.has(m)||(i.add(m),s.push(`- ${m} \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(m=>m.score>=this.scoreThreshold).filter(m=>typeof m.payload?.topic=="string"&&m.payload.topic.startsWith("code:"));if(p.length>0){let m=p.map(f=>f.payload?.mongoId).filter(Boolean);if(m.length>0){let{ObjectId:f}=await import("mongodb"),w=await this.mongo.db(this.options.dbName).collection("agent_memory").find({_id:{$in:m.map(S=>new f(S))}}).toArray();for(let S of w){let k=String(S.topic??"").replace(/^code:/,""),I=String(S.content??"");n.push(`- ${k}: ${I}`)}}}}}catch{}if(s.length===0&&n.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=n.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 Jh={};Le(Jh,{KnowledgeExtractor:()=>Ma});import Xk from"@anthropic-ai/sdk";var Zk,Ma,zh=K(()=>{"use strict";x();Zk=b("knowledge-extractor"),Ma=class{memoryStore;memoryEmbedder;anthropic;constructor(e,t){this.memoryStore=e,this.memoryEmbedder=t,this.anthropic=new Xk}async extract(e,t){if(!t?.result)return 0;let s=t.result.length>3e4?t.result.slice(0,3e4)+`
|
|
196
|
+
[...truncated]`:t.result,n=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
|
|
199
199
|
- insight: what was learned \u2014 what the file does, key patterns, gotchas, architectural decisions. Be specific and useful for a future session working on the same code.
|
|
@@ -202,48 +202,48 @@ ${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=(
|
|
205
|
+
${s}`}]}),o=(n.content[0].type==="text"?n.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"},m=crypto.randomUUID(),f=await this.memoryStore.save(e,p,m);await this.memoryEmbedder.upsert(m,c.insight,{agentId:e,mongoId:f._id.toString(),type:"fact",topic:d,tier:"hot",importance:p.importance,createdAt:Date.now()}),l++}catch(u){Zk.error("Failed to save insight",{topic:d,error:String(u)})}}return l}}});function Qh(r,e){let t=[r,e].sort();return`dm:${t[0]}:${t[1]}`}var Xh=K(()=>{"use strict"});var Zh={};Le(Zh,{TeamStore:()=>La});import{MongoClient as eb,ObjectId as tb}from"mongodb";var Da,La,ef=K(()=>{"use strict";x();Xh();Da=b("team-store"),La=class{uri;dbName;client;db;channels;messages;constructor(e,t){this.uri=e,this.dbName=t,this.client=new eb(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}),Da.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),Da.info("Channel created",{id:e._id,type:e.type}),e}async getOrCreateDm(e,t,s){let n=Qh(e,t),i=await this.channels.findOne({_id:n});if(i)return i;let o={_id:n,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),Da.info("DM created",{id:n,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 tb().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),n={channelId:e};t?.before&&(n._id={$lt:t.before}),t?.threadId&&(n.threadId=t.threadId);let i=await this.messages.find(n).sort({createdAt:-1}).limit(s+1).toArray(),o=i.length>s;return o&&i.pop(),{messages:i.reverse(),hasMore:o}}}});var tf={};Le(tf,{CommandRegistry:()=>$a});var Pa,$a,sf=K(()=>{"use strict";x();Pa=b("command-registry"),$a=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)&&Pa.warn("Command already registered, overwriting",{name:e.def.name}),this.commands.set(e.def.name,e),Pa.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(n){return Pa.error("Command execution failed",{name:e,error:String(n)}),{found:!0,result:`Command failed: ${String(n)}`}}}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=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
|
|
209
|
+
`)}`:"Channel not found"}})}}});var Fe=T((ME,of)=>{"use strict";var nf=["nodebuffer","arraybuffer","fragments"],rf=typeof Blob<"u";rf&&nf.push("blob");of.exports={BINARY_TYPES:nf,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:rf,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var Ys=T((DE,Xr)=>{"use strict";var{EMPTY_BUFFER:sb}=Fe(),Ra=Buffer[Symbol.species];function nb(r,e){if(r.length===0)return sb;if(r.length===1)return r[0];let t=Buffer.allocUnsafe(e),s=0;for(let n=0;n<r.length;n++){let i=r[n];t.set(i,s),s+=i.length}return s<e?new Ra(t.buffer,t.byteOffset,s):t}function af(r,e,t,s,n){for(let i=0;i<n;i++)t[s+i]=r[i]^e[i&3]}function cf(r,e){for(let t=0;t<r.length;t++)r[t]^=e[t&3]}function rb(r){return r.length===r.buffer.byteLength?r.buffer:r.buffer.slice(r.byteOffset,r.byteOffset+r.length)}function Ba(r){if(Ba.readOnly=!0,Buffer.isBuffer(r))return r;let e;return r instanceof ArrayBuffer?e=new Ra(r):ArrayBuffer.isView(r)?e=new Ra(r.buffer,r.byteOffset,r.byteLength):(e=Buffer.from(r),Ba.readOnly=!1),e}Xr.exports={concat:nb,mask:af,toArrayBuffer:rb,toBuffer:Ba,unmask:cf};if(!process.env.WS_NO_BUFFER_UTIL)try{let r=H("bufferutil");Xr.exports.mask=function(e,t,s,n,i){i<48?af(e,t,s,n,i):r.mask(e,t,s,n,i)},Xr.exports.unmask=function(e,t){e.length<32?cf(e,t):r.unmask(e,t)}}catch{}});var uf=T((LE,df)=>{"use strict";var lf=Symbol("kDone"),Ua=Symbol("kRun"),qa=class{constructor(e){this[lf]=()=>{this.pending--,this[Ua]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[Ua]()}[Ua](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[lf])}}};df.exports=qa});var Jt=T((PE,mf)=>{"use strict";var Js=H("zlib"),hf=Ys(),ib=uf(),{kStatusCode:ff}=Fe(),ob=Buffer[Symbol.species],ab=Buffer.from([0,0,255,255]),ei=Symbol("permessage-deflate"),Ke=Symbol("total-length"),Vt=Symbol("callback"),lt=Symbol("buffers"),Yt=Symbol("error"),Zr,ja=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 ib(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(n=>!(t.serverNoContextTakeover===!1&&n.server_no_context_takeover||n.server_max_window_bits&&(t.serverMaxWindowBits===!1||typeof t.serverMaxWindowBits=="number"&&t.serverMaxWindowBits>n.server_max_window_bits)||typeof t.clientMaxWindowBits=="number"&&!n.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 n=t[s];if(n.length>1)throw new Error(`Parameter "${s}" must have only a single value`);if(n=n[0],s==="client_max_window_bits"){if(n!==!0){let i=+n;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${s}": ${n}`);n=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${s}": ${n}`)}else if(s==="server_max_window_bits"){let i=+n;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${s}": ${n}`);n=i}else if(s==="client_no_context_takeover"||s==="server_no_context_takeover"){if(n!==!0)throw new TypeError(`Invalid value for parameter "${s}": ${n}`)}else throw new Error(`Unknown parameter "${s}"`);t[s]=n})}),e}decompress(e,t,s){Zr.add(n=>{this._decompress(e,t,(i,o)=>{n(),s(i,o)})})}compress(e,t,s){Zr.add(n=>{this._compress(e,t,(i,o)=>{n(),s(i,o)})})}_decompress(e,t,s){let n=this._isServer?"client":"server";if(!this._inflate){let i=`${n}_max_window_bits`,o=typeof this.params[i]!="number"?Js.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=Js.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[ei]=this,this._inflate[Ke]=0,this._inflate[lt]=[],this._inflate.on("error",lb),this._inflate.on("data",pf)}this._inflate[Vt]=s,this._inflate.write(e),t&&this._inflate.write(ab),this._inflate.flush(()=>{let i=this._inflate[Yt];if(i){this._inflate.close(),this._inflate=null,s(i);return}let o=hf.concat(this._inflate[lt],this._inflate[Ke]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[Ke]=0,this._inflate[lt]=[],t&&this.params[`${n}_no_context_takeover`]&&this._inflate.reset()),s(null,o)})}_compress(e,t,s){let n=this._isServer?"server":"client";if(!this._deflate){let i=`${n}_max_window_bits`,o=typeof this.params[i]!="number"?Js.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=Js.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[Ke]=0,this._deflate[lt]=[],this._deflate.on("data",cb)}this._deflate[Vt]=s,this._deflate.write(e),this._deflate.flush(Js.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=hf.concat(this._deflate[lt],this._deflate[Ke]);t&&(i=new ob(i.buffer,i.byteOffset,i.length-4)),this._deflate[Vt]=null,this._deflate[Ke]=0,this._deflate[lt]=[],t&&this.params[`${n}_no_context_takeover`]&&this._deflate.reset(),s(null,i)})}};mf.exports=ja;function cb(r){this[lt].push(r),this[Ke]+=r.length}function pf(r){if(this[Ke]+=r.length,this[ei]._maxPayload<1||this[Ke]<=this[ei]._maxPayload){this[lt].push(r);return}this[Yt]=new RangeError("Max payload size exceeded"),this[Yt].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[Yt][ff]=1009,this.removeListener("data",pf),this.reset()}function lb(r){if(this[ei]._inflate=null,this[Yt]){this[Vt](this[Yt]);return}r[ff]=1007,this[Vt](r)}});var zt=T(($E,ti)=>{"use strict";var{isUtf8:gf}=H("buffer"),{hasBlob:db}=Fe(),ub=[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 hb(r){return r>=1e3&&r<=1014&&r!==1004&&r!==1005&&r!==1006||r>=3e3&&r<=4999}function Fa(r){let e=r.length,t=0;for(;t<e;)if((r[t]&128)===0)t++;else if((r[t]&224)===192){if(t+1===e||(r[t+1]&192)!==128||(r[t]&254)===192)return!1;t+=2}else if((r[t]&240)===224){if(t+2>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||r[t]===224&&(r[t+1]&224)===128||r[t]===237&&(r[t+1]&224)===160)return!1;t+=3}else if((r[t]&248)===240){if(t+3>=e||(r[t+1]&192)!==128||(r[t+2]&192)!==128||(r[t+3]&192)!==128||r[t]===240&&(r[t+1]&240)===128||r[t]===244&&r[t+1]>143||r[t]>244)return!1;t+=4}else return!1;return!0}function fb(r){return db&&typeof r=="object"&&typeof r.arrayBuffer=="function"&&typeof r.type=="string"&&typeof r.stream=="function"&&(r[Symbol.toStringTag]==="Blob"||r[Symbol.toStringTag]==="File")}ti.exports={isBlob:fb,isValidStatusCode:hb,isValidUTF8:Fa,tokenChars:ub};if(gf)ti.exports.isValidUTF8=function(r){return r.length<24?Fa(r):gf(r)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let r=H("utf-8-validate");ti.exports.isValidUTF8=function(e){return e.length<32?Fa(e):r(e)}}catch{}});var Va=T((RE,vf)=>{"use strict";var{Writable:pb}=H("stream"),yf=Jt(),{BINARY_TYPES:mb,EMPTY_BUFFER:wf,kStatusCode:gb,kWebSocket:yb}=Fe(),{concat:Ka,toArrayBuffer:wb,unmask:Sb}=Ys(),{isValidStatusCode:kb,isValidUTF8:Sf}=zt(),si=Buffer[Symbol.species],ke=0,kf=1,bf=2,_f=3,Ha=4,Wa=5,ni=6,Ga=class extends pb{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||mb[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[yb]=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=ke}_write(e,t,s){if(this._opcode===8&&this._state==ke)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 si(s.buffer,s.byteOffset+e,s.length-e),new si(s.buffer,s.byteOffset,e)}let t=Buffer.allocUnsafe(e);do{let s=this._buffers[0],n=t.length-e;e>=s.length?t.set(this._buffers.shift(),n):(t.set(new Uint8Array(s.buffer,s.byteOffset,e),n),this._buffers[0]=new si(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 ke:this.getInfo(e);break;case kf:this.getPayloadLength16(e);break;case bf:this.getPayloadLength64(e);break;case _f:this.getMask();break;case Ha:this.getData(e);break;case Wa:case ni: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 n=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(n);return}let s=(t[0]&64)===64;if(s&&!this._extensions[yf.extensionName]){let n=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(n);return}if(this._fin=(t[0]&128)===128,this._opcode=t[0]&15,this._payloadLength=t[1]&127,this._opcode===0){if(s){let n=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(n);return}if(!this._fragmented){let n=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");e(n);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let n=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(n);return}this._compressed=s}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let n=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");e(n);return}if(s){let n=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(n);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let n=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(n);return}}else{let n=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(n);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(t[1]&128)===128,this._isServer){if(!this._masked){let n=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");e(n);return}}else if(this._masked){let n=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");e(n);return}this._payloadLength===126?this._state=kf:this._payloadLength===127?this._state=bf: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 n=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(n);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=_f:this._state=Ha}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=Ha}getData(e){let t=wf;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&&Sb(t,this._mask)}if(this._opcode>7){this.controlMessage(t,e);return}if(this._compressed){this._state=Wa,this.decompress(t,e);return}t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage(e)}decompress(e,t){this._extensions[yf.extensionName].decompress(e,this._fin,(n,i)=>{if(n)return t(n);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===ke&&this.startLoop(t)})}dataMessage(e){if(!this._fin){this._state=ke;return}let t=this._messageLength,s=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let n;this._binaryType==="nodebuffer"?n=Ka(s,t):this._binaryType==="arraybuffer"?n=wb(Ka(s,t)):this._binaryType==="blob"?n=new Blob(s):n=s,this._allowSynchronousEvents?(this.emit("message",n,!0),this._state=ke):(this._state=ni,setImmediate(()=>{this.emit("message",n,!0),this._state=ke,this.startLoop(e)}))}else{let n=Ka(s,t);if(!this._skipUTF8Validation&&!Sf(n)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===Wa||this._allowSynchronousEvents?(this.emit("message",n,!1),this._state=ke):(this._state=ni,setImmediate(()=>{this.emit("message",n,!1),this._state=ke,this.startLoop(e)}))}}controlMessage(e,t){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,wf),this.end();else{let s=e.readUInt16BE(0);if(!kb(s)){let i=this.createError(RangeError,`invalid status code ${s}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");t(i);return}let n=new si(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!Sf(n)){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,n),this.end()}this._state=ke;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=ke):(this._state=ni,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=ke,this.startLoop(t)}))}createError(e,t,s,n,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[gb]=n,o}};vf.exports=Ga});var za=T((UE,Cf)=>{"use strict";var{Duplex:BE}=H("stream"),{randomFillSync:bb}=H("crypto"),Tf=Jt(),{EMPTY_BUFFER:_b,kWebSocket:vb,NOOP:Tb}=Fe(),{isBlob:Qt,isValidStatusCode:Ib}=zt(),{mask:If,toBuffer:Ct}=Ys(),be=Symbol("kByteLength"),Cb=Buffer.alloc(4),ri=8*1024,At,Xt=ri,Ee=0,Ab=1,Eb=2,Ya=class r{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=Ee,this.onerror=Tb,this[vb]=void 0}static frame(e,t){let s,n=!1,i=2,o=!1;t.mask&&(s=t.maskBuffer||Cb,t.generateMask?t.generateMask(s):(Xt===ri&&(At===void 0&&(At=Buffer.alloc(ri)),bb(At,0,ri),Xt=0),s[0]=At[Xt++],s[1]=At[Xt++],s[2]=At[Xt++],s[3]=At[Xt++]),o=(s[0]|s[1]|s[2]|s[3])===0,i=6);let a;typeof e=="string"?(!t.mask||o)&&t[be]!==void 0?a=t[be]:(e=Buffer.from(e),a=e.length):(a=e.length,n=t.mask&&t.readOnly&&!o);let l=a;a>=65536?(i+=8,l=127):a>125&&(i+=2,l=126);let c=Buffer.allocUnsafe(n?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]:n?(If(e,s,c,i,a),[c]):(If(e,s,e,0,a),[c,e])):[c,e]}close(e,t,s,n){let i;if(e===void 0)i=_b;else{if(typeof e!="number"||!Ib(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={[be]:i.length,fin:!0,generateMask:this._generateMask,mask:s,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==Ee?this.enqueue([this.dispatch,i,!1,o,n]):this.sendFrame(r.frame(i,o),n)}ping(e,t,s){let n,i;if(typeof e=="string"?(n=Buffer.byteLength(e),i=!1):Qt(e)?(n=e.size,i=!1):(e=Ct(e),n=e.length,i=Ct.readOnly),n>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[be]:n,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};Qt(e)?this._state!==Ee?this.enqueue([this.getBlobData,e,!1,o,s]):this.getBlobData(e,!1,o,s):this._state!==Ee?this.enqueue([this.dispatch,e,!1,o,s]):this.sendFrame(r.frame(e,o),s)}pong(e,t,s){let n,i;if(typeof e=="string"?(n=Buffer.byteLength(e),i=!1):Qt(e)?(n=e.size,i=!1):(e=Ct(e),n=e.length,i=Ct.readOnly),n>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[be]:n,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};Qt(e)?this._state!==Ee?this.enqueue([this.getBlobData,e,!1,o,s]):this.getBlobData(e,!1,o,s):this._state!==Ee?this.enqueue([this.dispatch,e,!1,o,s]):this.sendFrame(r.frame(e,o),s)}send(e,t,s){let n=this._extensions[Tf.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=Ct(e),a=e.length,l=Ct.readOnly),this._firstFragment?(this._firstFragment=!1,o&&n&&n.params[n._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=a>=n._threshold),this._compress=o):(o=!1,i=0),t.fin&&(this._firstFragment=!0);let c={[be]:a,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:l,rsv1:o};Qt(e)?this._state!==Ee?this.enqueue([this.getBlobData,e,this._compress,c,s]):this.getBlobData(e,this._compress,c,s):this._state!==Ee?this.enqueue([this.dispatch,e,this._compress,c,s]):this.dispatch(e,this._compress,c,s)}getBlobData(e,t,s,n){this._bufferedBytes+=s[be],this._state=Eb,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let a=new Error("The socket was closed while the blob was being read");process.nextTick(Ja,this,a,n);return}this._bufferedBytes-=s[be];let o=Ct(i);t?this.dispatch(o,t,s,n):(this._state=Ee,this.sendFrame(r.frame(o,s),n),this.dequeue())}).catch(i=>{process.nextTick(Nb,this,i,n)})}dispatch(e,t,s,n){if(!t){this.sendFrame(r.frame(e,s),n);return}let i=this._extensions[Tf.extensionName];this._bufferedBytes+=s[be],this._state=Ab,i.compress(e,s.fin,(o,a)=>{if(this._socket.destroyed){let l=new Error("The socket was closed while data was being compressed");Ja(this,l,n);return}this._bufferedBytes-=s[be],this._state=Ee,s.readOnly=!1,this.sendFrame(r.frame(a,s),n),this.dequeue()})}dequeue(){for(;this._state===Ee&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][be],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][be],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)}};Cf.exports=Ya;function Ja(r,e,t){typeof t=="function"&&t(e);for(let s=0;s<r._queue.length;s++){let n=r._queue[s],i=n[n.length-1];typeof i=="function"&&i(e)}}function Nb(r,e,t){Ja(r,e,t),r.onerror(e)}});var Pf=T((qE,Lf)=>{"use strict";var{kForOnEventAttribute:zs,kListener:Qa}=Fe(),Af=Symbol("kCode"),Ef=Symbol("kData"),Nf=Symbol("kError"),xf=Symbol("kMessage"),Of=Symbol("kReason"),Zt=Symbol("kTarget"),Mf=Symbol("kType"),Df=Symbol("kWasClean"),He=class{constructor(e){this[Zt]=null,this[Mf]=e}get target(){return this[Zt]}get type(){return this[Mf]}};Object.defineProperty(He.prototype,"target",{enumerable:!0});Object.defineProperty(He.prototype,"type",{enumerable:!0});var Et=class extends He{constructor(e,t={}){super(e),this[Af]=t.code===void 0?0:t.code,this[Of]=t.reason===void 0?"":t.reason,this[Df]=t.wasClean===void 0?!1:t.wasClean}get code(){return this[Af]}get reason(){return this[Of]}get wasClean(){return this[Df]}};Object.defineProperty(Et.prototype,"code",{enumerable:!0});Object.defineProperty(Et.prototype,"reason",{enumerable:!0});Object.defineProperty(Et.prototype,"wasClean",{enumerable:!0});var es=class extends He{constructor(e,t={}){super(e),this[Nf]=t.error===void 0?null:t.error,this[xf]=t.message===void 0?"":t.message}get error(){return this[Nf]}get message(){return this[xf]}};Object.defineProperty(es.prototype,"error",{enumerable:!0});Object.defineProperty(es.prototype,"message",{enumerable:!0});var Qs=class extends He{constructor(e,t={}){super(e),this[Ef]=t.data===void 0?null:t.data}get data(){return this[Ef]}};Object.defineProperty(Qs.prototype,"data",{enumerable:!0});var xb={addEventListener(r,e,t={}){for(let n of this.listeners(r))if(!t[zs]&&n[Qa]===e&&!n[zs])return;let s;if(r==="message")s=function(i,o){let a=new Qs("message",{data:o?i:i.toString()});a[Zt]=this,ii(e,this,a)};else if(r==="close")s=function(i,o){let a=new Et("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});a[Zt]=this,ii(e,this,a)};else if(r==="error")s=function(i){let o=new es("error",{error:i,message:i.message});o[Zt]=this,ii(e,this,o)};else if(r==="open")s=function(){let i=new He("open");i[Zt]=this,ii(e,this,i)};else return;s[zs]=!!t[zs],s[Qa]=e,t.once?this.once(r,s):this.on(r,s)},removeEventListener(r,e){for(let t of this.listeners(r))if(t[Qa]===e&&!t[zs]){this.removeListener(r,t);break}}};Lf.exports={CloseEvent:Et,ErrorEvent:es,Event:He,EventTarget:xb,MessageEvent:Qs};function ii(r,e,t){typeof r=="object"&&r.handleEvent?r.handleEvent.call(r,t):r.call(e,t)}});var oi=T((jE,$f)=>{"use strict";var{tokenChars:Xs}=zt();function Me(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}function Ob(r){let e=Object.create(null),t=Object.create(null),s=!1,n=!1,i=!1,o,a,l=-1,c=-1,d=-1,u=0;for(;u<r.length;u++)if(c=r.charCodeAt(u),o===void 0)if(d===-1&&Xs[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=r.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&&Xs[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,r.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=r.slice(l,u),l=d=-1;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(n){if(Xs[c]!==1)throw new SyntaxError(`Unexpected character at index ${u}`);l===-1?l=u:s||(s=!0),n=!1}else if(i)if(Xs[c]===1)l===-1&&(l=u);else if(c===34&&l!==-1)i=!1,d=u;else if(c===92)n=!0;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(c===34&&r.charCodeAt(u-1)===61)i=!0;else if(d===-1&&Xs[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=r.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=r.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 Mb(r){return Object.keys(r).map(e=>{let t=r[e];return Array.isArray(t)||(t=[t]),t.map(s=>[e].concat(Object.keys(s).map(n=>{let i=s[n];return Array.isArray(i)||(i=[i]),i.map(o=>o===!0?n:`${n}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}$f.exports={format:Mb,parse:Ob}});var di=T((HE,Yf)=>{"use strict";var Db=H("events"),Lb=H("https"),Pb=H("http"),Uf=H("net"),$b=H("tls"),{randomBytes:Rb,createHash:Bb}=H("crypto"),{Duplex:FE,Readable:KE}=H("stream"),{URL:Xa}=H("url"),dt=Jt(),Ub=Va(),qb=za(),{isBlob:jb}=zt(),{BINARY_TYPES:Rf,CLOSE_TIMEOUT:Fb,EMPTY_BUFFER:ai,GUID:Kb,kForOnEventAttribute:Za,kListener:Hb,kStatusCode:Wb,kWebSocket:oe,NOOP:qf}=Fe(),{EventTarget:{addEventListener:Gb,removeEventListener:Vb}}=Pf(),{format:Yb,parse:Jb}=oi(),{toBuffer:zb}=Ys(),jf=Symbol("kAborted"),ec=[8,13],We=["CONNECTING","OPEN","CLOSING","CLOSED"],Qb=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,J=class r extends Db{constructor(e,t,s){super(),this._binaryType=Rf[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=ai,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=r.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]),Ff(this,e,t,s)):(this._autoPong=s.autoPong,this._closeTimeout=s.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){Rf.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 n=new Ub({allowSynchronousEvents:s.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation}),i=new qb(e,this._extensions,s.generateMask);this._receiver=n,this._sender=i,this._socket=e,n[oe]=this,i[oe]=this,e[oe]=this,n.on("conclude",e_),n.on("drain",t_),n.on("error",s_),n.on("message",n_),n.on("ping",r_),n.on("pong",i_),i.onerror=o_,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",Wf),e.on("data",li),e.on("end",Gf),e.on("error",Vf),this._readyState=r.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[dt.extensionName]&&this._extensions[dt.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=r.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){ye(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===r.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=r.CLOSING,this._sender.close(e,t,!this._isServer,s=>{s||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),Hf(this)}}pause(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,t,s){if(this.readyState===r.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!==r.OPEN){tc(this,e,s);return}t===void 0&&(t=!this._isServer),this._sender.ping(e||ai,t,s)}pong(e,t,s){if(this.readyState===r.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!==r.OPEN){tc(this,e,s);return}t===void 0&&(t=!this._isServer),this._sender.pong(e||ai,t,s)}resume(){this.readyState===r.CONNECTING||this.readyState===r.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,t,s){if(this.readyState===r.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!==r.OPEN){tc(this,e,s);return}let n={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[dt.extensionName]||(n.compress=!1),this._sender.send(e||ai,n,s)}terminate(){if(this.readyState!==r.CLOSED){if(this.readyState===r.CONNECTING){ye(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=r.CLOSING,this._socket.destroy())}}};Object.defineProperty(J,"CONNECTING",{enumerable:!0,value:We.indexOf("CONNECTING")});Object.defineProperty(J.prototype,"CONNECTING",{enumerable:!0,value:We.indexOf("CONNECTING")});Object.defineProperty(J,"OPEN",{enumerable:!0,value:We.indexOf("OPEN")});Object.defineProperty(J.prototype,"OPEN",{enumerable:!0,value:We.indexOf("OPEN")});Object.defineProperty(J,"CLOSING",{enumerable:!0,value:We.indexOf("CLOSING")});Object.defineProperty(J.prototype,"CLOSING",{enumerable:!0,value:We.indexOf("CLOSING")});Object.defineProperty(J,"CLOSED",{enumerable:!0,value:We.indexOf("CLOSED")});Object.defineProperty(J.prototype,"CLOSED",{enumerable:!0,value:We.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(r=>{Object.defineProperty(J.prototype,r,{enumerable:!0})});["open","error","close","message"].forEach(r=>{Object.defineProperty(J.prototype,`on${r}`,{enumerable:!0,get(){for(let e of this.listeners(r))if(e[Za])return e[Hb];return null},set(e){for(let t of this.listeners(r))if(t[Za]){this.removeListener(r,t);break}typeof e=="function"&&this.addEventListener(r,e,{[Za]:!0})}})});J.prototype.addEventListener=Gb;J.prototype.removeEventListener=Vb;Yf.exports=J;function Ff(r,e,t,s){let n={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:Fb,protocolVersion:ec[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(r._autoPong=n.autoPong,r._closeTimeout=n.closeTimeout,!ec.includes(n.protocolVersion))throw new RangeError(`Unsupported protocol version: ${n.protocolVersion} (supported versions: ${ec.join(", ")})`);let i;if(e instanceof Xa)i=e;else try{i=new Xa(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),r._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(r._redirects===0)throw f;ci(r,f);return}let c=o?443:80,d=Rb(16).toString("base64"),u=o?Lb.request:Pb.request,h=new Set,p;if(n.createConnection=n.createConnection||(o?Zb:Xb),n.defaultPort=n.defaultPort||c,n.port=i.port||c,n.host=i.hostname.startsWith("[")?i.hostname.slice(1,-1):i.hostname,n.headers={...n.headers,"Sec-WebSocket-Version":n.protocolVersion,"Sec-WebSocket-Key":d,Connection:"Upgrade",Upgrade:"websocket"},n.path=i.pathname+i.search,n.timeout=n.handshakeTimeout,n.perMessageDeflate&&(p=new dt({...n.perMessageDeflate,isServer:!1,maxPayload:n.maxPayload}),n.headers["Sec-WebSocket-Extensions"]=Yb({[dt.extensionName]:p.offer()})),t.length){for(let f of t){if(typeof f!="string"||!Qb.test(f)||h.has(f))throw new SyntaxError("An invalid or duplicated subprotocol was specified");h.add(f)}n.headers["Sec-WebSocket-Protocol"]=t.join(",")}if(n.origin&&(n.protocolVersion<13?n.headers["Sec-WebSocket-Origin"]=n.origin:n.headers.Origin=n.origin),(i.username||i.password)&&(n.auth=`${i.username}:${i.password}`),a){let f=n.path.split(":");n.socketPath=f[0],n.path=f[1]}let m;if(n.followRedirects){if(r._redirects===0){r._originalIpc=a,r._originalSecure=o,r._originalHostOrSocketPath=a?n.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(r.listenerCount("redirect")===0){let f=a?r._originalIpc?n.socketPath===r._originalHostOrSocketPath:!1:r._originalIpc?!1:i.host===r._originalHostOrSocketPath;(!f||r._originalSecure&&!o)&&(delete n.headers.authorization,delete n.headers.cookie,f||delete n.headers.host,n.auth=void 0)}n.auth&&!s.headers.authorization&&(s.headers.authorization="Basic "+Buffer.from(n.auth).toString("base64")),m=r._req=u(n),r._redirects&&r.emit("redirect",r.url,m)}else m=r._req=u(n);n.timeout&&m.on("timeout",()=>{ye(r,m,"Opening handshake has timed out")}),m.on("error",f=>{m===null||m[jf]||(m=r._req=null,ci(r,f))}),m.on("response",f=>{let y=f.headers.location,w=f.statusCode;if(y&&n.followRedirects&&w>=300&&w<400){if(++r._redirects>n.maxRedirects){ye(r,m,"Maximum redirects exceeded");return}m.abort();let S;try{S=new Xa(y,e)}catch{let I=new SyntaxError(`Invalid URL: ${y}`);ci(r,I);return}Ff(r,S,t,s)}else r.emit("unexpected-response",m,f)||ye(r,m,`Unexpected server response: ${f.statusCode}`)}),m.on("upgrade",(f,y,w)=>{if(r.emit("upgrade",f),r.readyState!==J.CONNECTING)return;m=r._req=null;let S=f.headers.upgrade;if(S===void 0||S.toLowerCase()!=="websocket"){ye(r,y,"Invalid Upgrade header");return}let k=Bb("sha1").update(d+Kb).digest("base64");if(f.headers["sec-websocket-accept"]!==k){ye(r,y,"Invalid Sec-WebSocket-Accept header");return}let I=f.headers["sec-websocket-protocol"],v;if(I!==void 0?h.size?h.has(I)||(v="Server sent an invalid subprotocol"):v="Server sent a subprotocol but none was requested":h.size&&(v="Server sent no subprotocol"),v){ye(r,y,v);return}I&&(r._protocol=I);let N=f.headers["sec-websocket-extensions"];if(N!==void 0){if(!p){ye(r,y,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let D;try{D=Jb(N)}catch{ye(r,y,"Invalid Sec-WebSocket-Extensions header");return}let C=Object.keys(D);if(C.length!==1||C[0]!==dt.extensionName){ye(r,y,"Server indicated an extension that was not requested");return}try{p.accept(D[dt.extensionName])}catch{ye(r,y,"Invalid Sec-WebSocket-Extensions header");return}r._extensions[dt.extensionName]=p}r.setSocket(y,w,{allowSynchronousEvents:n.allowSynchronousEvents,generateMask:n.generateMask,maxPayload:n.maxPayload,skipUTF8Validation:n.skipUTF8Validation})}),n.finishRequest?n.finishRequest(m,r):m.end()}function ci(r,e){r._readyState=J.CLOSING,r._errorEmitted=!0,r.emit("error",e),r.emitClose()}function Xb(r){return r.path=r.socketPath,Uf.connect(r)}function Zb(r){return r.path=void 0,!r.servername&&r.servername!==""&&(r.servername=Uf.isIP(r.host)?"":r.host),$b.connect(r)}function ye(r,e,t){r._readyState=J.CLOSING;let s=new Error(t);Error.captureStackTrace(s,ye),e.setHeader?(e[jf]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(ci,r,s)):(e.destroy(s),e.once("error",r.emit.bind(r,"error")),e.once("close",r.emitClose.bind(r)))}function tc(r,e,t){if(e){let s=jb(e)?e.size:zb(e).length;r._socket?r._sender._bufferedBytes+=s:r._bufferedAmount+=s}if(t){let s=new Error(`WebSocket is not open: readyState ${r.readyState} (${We[r.readyState]})`);process.nextTick(t,s)}}function e_(r,e){let t=this[oe];t._closeFrameReceived=!0,t._closeMessage=e,t._closeCode=r,t._socket[oe]!==void 0&&(t._socket.removeListener("data",li),process.nextTick(Kf,t._socket),r===1005?t.close():t.close(r,e))}function t_(){let r=this[oe];r.isPaused||r._socket.resume()}function s_(r){let e=this[oe];e._socket[oe]!==void 0&&(e._socket.removeListener("data",li),process.nextTick(Kf,e._socket),e.close(r[Wb])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r))}function Bf(){this[oe].emitClose()}function n_(r,e){this[oe].emit("message",r,e)}function r_(r){let e=this[oe];e._autoPong&&e.pong(r,!this._isServer,qf),e.emit("ping",r)}function i_(r){this[oe].emit("pong",r)}function Kf(r){r.resume()}function o_(r){let e=this[oe];e.readyState!==J.CLOSED&&(e.readyState===J.OPEN&&(e._readyState=J.CLOSING,Hf(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",r)))}function Hf(r){r._closeTimer=setTimeout(r._socket.destroy.bind(r._socket),r._closeTimeout)}function Wf(){let r=this[oe];if(this.removeListener("close",Wf),this.removeListener("data",li),this.removeListener("end",Gf),r._readyState=J.CLOSING,!this._readableState.endEmitted&&!r._closeFrameReceived&&!r._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);r._receiver.write(e)}r._receiver.end(),this[oe]=void 0,clearTimeout(r._closeTimer),r._receiver._writableState.finished||r._receiver._writableState.errorEmitted?r.emitClose():(r._receiver.on("error",Bf),r._receiver.on("finish",Bf))}function li(r){this[oe]._receiver.write(r)||this.pause()}function Gf(){let r=this[oe];r._readyState=J.CLOSING,r._receiver.end(),this.end()}function Vf(){let r=this[oe];this.removeListener("error",Vf),this.on("error",qf),r&&(r._readyState=J.CLOSING,this.destroy())}});var Xf=T((GE,Qf)=>{"use strict";var WE=di(),{Duplex:a_}=H("stream");function Jf(r){r.emit("close")}function c_(){!this.destroyed&&this._writableState.finished&&this.destroy()}function zf(r){this.removeListener("error",zf),this.destroy(),this.listenerCount("error")===0&&this.emit("error",r)}function l_(r,e){let t=!0,s=new a_({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return r.on("message",function(i,o){let a=!o&&s._readableState.objectMode?i.toString():i;s.push(a)||r.pause()}),r.once("error",function(i){s.destroyed||(t=!1,s.destroy(i))}),r.once("close",function(){s.destroyed||s.push(null)}),s._destroy=function(n,i){if(r.readyState===r.CLOSED){i(n),process.nextTick(Jf,s);return}let o=!1;r.once("error",function(l){o=!0,i(l)}),r.once("close",function(){o||i(n),process.nextTick(Jf,s)}),t&&r.terminate()},s._final=function(n){if(r.readyState===r.CONNECTING){r.once("open",function(){s._final(n)});return}r._socket!==null&&(r._socket._writableState.finished?(n(),s._readableState.endEmitted&&s.destroy()):(r._socket.once("finish",function(){n()}),r.close()))},s._read=function(){r.isPaused&&r.resume()},s._write=function(n,i,o){if(r.readyState===r.CONNECTING){r.once("open",function(){s._write(n,i,o)});return}r.send(n,o)},s.on("end",c_),s.on("error",zf),s}Qf.exports=l_});var sc=T((VE,Zf)=>{"use strict";var{tokenChars:d_}=zt();function u_(r){let e=new Set,t=-1,s=-1,n=0;for(n;n<r.length;n++){let o=r.charCodeAt(n);if(s===-1&&d_[o]===1)t===-1&&(t=n);else if(n!==0&&(o===32||o===9))s===-1&&t!==-1&&(s=n);else if(o===44){if(t===-1)throw new SyntaxError(`Unexpected character at index ${n}`);s===-1&&(s=n);let a=r.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 ${n}`)}if(t===-1||s!==-1)throw new SyntaxError("Unexpected end of input");let i=r.slice(t,n);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}Zf.exports={parse:u_}});var op=T((JE,ip)=>{"use strict";var h_=H("events"),ui=H("http"),{Duplex:YE}=H("stream"),{createHash:f_}=H("crypto"),ep=oi(),Nt=Jt(),p_=sc(),m_=di(),{CLOSE_TIMEOUT:g_,GUID:y_,kWebSocket:w_}=Fe(),S_=/^[+/0-9A-Za-z]{22}==$/,tp=0,sp=1,rp=2,nc=class extends h_{constructor(e,t){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:g_,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:m_,...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=ui.createServer((s,n)=>{let i=ui.STATUS_CODES[426];n.writeHead(426,{"Content-Length":i.length,"Content-Type":"text/plain"}),n.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=k_(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(n,i,o)=>{this.handleUpgrade(n,i,o,s)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=tp}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===rp){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(Zs,this);return}if(e&&this.once("close",e),this._state!==sp)if(this._state=sp,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(Zs,this):process.nextTick(Zs,this);else{let t=this._server;this._removeListeners(),this._removeListeners=this._server=null,t.close(()=>{Zs(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,n){t.on("error",np);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,a=+e.headers["sec-websocket-version"];if(e.method!=="GET"){xt(this,e,t,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){xt(this,e,t,400,"Invalid Upgrade header");return}if(i===void 0||!S_.test(i)){xt(this,e,t,400,"Missing or invalid Sec-WebSocket-Key header");return}if(a!==13&&a!==8){xt(this,e,t,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){en(t,400);return}let l=e.headers["sec-websocket-protocol"],c=new Set;if(l!==void 0)try{c=p_.parse(l)}catch{xt(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 Nt({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let p=ep.parse(d);p[Nt.extensionName]&&(h.accept(p[Nt.extensionName]),u[Nt.extensionName]=h)}catch{xt(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,m,f,y)=>{if(!p)return en(t,m||401,f,y);this.completeUpgrade(u,i,c,e,t,s,n)});return}if(!this.options.verifyClient(h))return en(t,401)}this.completeUpgrade(u,i,c,e,t,s,n)}completeUpgrade(e,t,s,n,i,o,a){if(!i.readable||!i.writable)return i.destroy();if(i[w_])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>tp)return en(i,503);let c=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${f_("sha1").update(t+y_).digest("base64")}`],d=new this.options.WebSocket(null,void 0,this.options);if(s.size){let u=this.options.handleProtocols?this.options.handleProtocols(s,n):s.values().next().value;u&&(c.push(`Sec-WebSocket-Protocol: ${u}`),d._protocol=u)}if(e[Nt.extensionName]){let u=e[Nt.extensionName].params,h=ep.format({[Nt.extensionName]:[u]});c.push(`Sec-WebSocket-Extensions: ${h}`),d._extensions=e}this.emit("headers",c,n),i.write(c.concat(`\r
|
|
210
210
|
`).join(`\r
|
|
211
|
-
`)),i.removeListener("error",
|
|
212
|
-
`+Object.keys(s).map(
|
|
211
|
+
`)),i.removeListener("error",np),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(Zs,this)})),a(d,n)}};ip.exports=nc;function k_(r,e){for(let t of Object.keys(e))r.on(t,e[t]);return function(){for(let s of Object.keys(e))r.removeListener(s,e[s])}}function Zs(r){r._state=rp,r.emit("close")}function np(){this.destroy()}function en(r,e,t,s){t=t||ui.STATUS_CODES[e],s={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(t),...s},r.once("finish",r.destroy),r.end(`HTTP/1.1 ${e} ${ui.STATUS_CODES[e]}\r
|
|
212
|
+
`+Object.keys(s).map(n=>`${n}: ${s[n]}`).join(`\r
|
|
213
213
|
`)+`\r
|
|
214
214
|
\r
|
|
215
|
-
`+t)}function
|
|
215
|
+
`+t)}function xt(r,e,t,s,n,i){if(r.listenerCount("wsClientError")){let o=new Error(n);Error.captureStackTrace(o,xt),r.emit("wsClientError",o,t,e)}else en(t,s,n,i)}});var b_,__,v_,T_,I_,C_,tn,rc,ap=K(()=>{b_=ve(Xf(),1),__=ve(oi(),1),v_=ve(Jt(),1),T_=ve(Va(),1),I_=ve(za(),1),C_=ve(sc(),1),tn=ve(di(),1),rc=ve(op(),1)});function cp(r){let e;try{e=JSON.parse(r)}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 lp(r){return(r.type==="message"||r.type==="image"||r.type==="file")&&"channelId"in r}var dp=K(()=>{"use strict"});var hp={};Le(hp,{WsAdapter:()=>ic});import{createServer as A_}from"node:http";import{randomUUID as sn}from"node:crypto";function up(r){let e=r.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 _e,ic,fp=K(()=>{"use strict";ap();x();dp();Fs();_e=b("ws-adapter"),ic=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=A_(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 n=new URL(t.url??"/",`http://localhost:${this.port}`);if(t.method==="GET"&&n.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 rc.default({noServer:!0,maxPayload:10*1024*1024}),this.server.on("upgrade",(t,s,n)=>{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=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
|
|
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,n,p=>{this.wss.emit("connection",p,t,h)})}),this.wss.on("connection",(t,s,n)=>{let i=n._id;_e.info("Device connected",{deviceId:i,label:n.label});let o=this.pendingMessages.get(i);if(o?.length){_e.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=cp(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,n,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(lp(c)){c.type==="message"?await this.handleTeamMessage(t,c,n,i):c.type==="image"?await this.handleTeamImage(t,c,n,i):c.type==="file"&&await this.handleTeamFile(t,c,n,i);return}if(c.type==="message"){this.send(t,{type:"ack",id:c.id});let d={id:c.id||sn(),text:c.text,source:{kind:"app",id:i,label:`app:${n.label}`,adapterId:"ws"},sender:i,senderName:n.label,threadId:`app:${i}`,timestamp:new Date,meta:{deviceId:i,defaultAgentId:n.defaultAgentId,origin:n.origin}};this.onWorkItem(d)}if(c.type==="image"){this.send(t,{type:"ack",id:c.id});let d=Buffer.from(c.data,"base64"),u=up(c.filename);try{let h=await js(d,c.filename,u),p={id:c.id||sn(),text:`[Photo: ${c.filename}]`,source:{kind:"app",id:i,label:`app:${n.label}`,adapterId:"ws"},sender:i,senderName:n.label,threadId:`app:${i}`,timestamp:new Date,files:[h],meta:{deviceId:i,defaultAgentId:n.defaultAgentId,origin:n.origin}};this.onWorkItem(p)}catch(h){_e.error("Image processing failed",{deviceId:i,filename:c.filename,error:String(h)}),this.send(t,{type:"error",message:"Failed to process image"})}}}catch(c){_e.error("Message handling error",{deviceId:i,error:String(c)}),this.send(t,{type:"error",message:"Internal error"})}}),t.on("close",()=>{_e.info("Device disconnected",{deviceId:i}),this.connections.delete(i)}),t.on("error",l=>{_e.error("WebSocket error",{deviceId:i,error:String(l)})})}),await new Promise(t=>{this.server.listen(this.port,"127.0.0.1",()=>{_e.info("WebSocket server listening",{port:this.port,host:"127.0.0.1"}),t()})})}async deliver(e){let t=e.workItem.meta?.deviceId;if(!t){_e.warn("No deviceId in WorkResult, cannot deliver");return}let s=e.error?`Error: ${e.error}`:e.text,n=e.workItem.meta?.channelId,i=this.agentRegistry.get(e.agentId)?.name??e.agentId;n&&await this.teamStore.saveMessage({channelId:n,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,...n?{channelId:n}:{}},a=this.connections.get(t);if(a&&a.readyState===tn.default.OPEN)this.send(a,o);else{_e.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 n=this.connections.get(s);n&&n.readyState===tn.default.OPEN&&this.send(n,{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()}),_e.info("WebSocket adapter stopped")}get connectionCount(){return this.connections.size}async verifyChannelMembership(e,t,s){let n=await this.teamStore.getChannel(t);return n?n.members.includes(s)?n:(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,n){this.send(e,{type:"ack",id:t.id});let i=await this.verifyChannelMembership(e,t.channelId,n);if(!i)return;await this.teamStore.saveMessage({channelId:t.channelId,threadId:t.threadId,senderId:n,senderType:"person",senderName:s.label,text:t.text,createdAt:new Date});let o=i.type==="dm"?i.members.find(l=>l!==n):void 0,a={id:t.id||sn(),text:t.text,source:{kind:"team",id:t.channelId,label:`team:${i?.name??t.channelId}`,adapterId:"ws"},sender:n,senderName:s.label,threadId:t.threadId??`team:${t.channelId}`,timestamp:new Date,meta:{deviceId:n,channelId:t.channelId,...s.user?{user:s.user}:{},...o?{targetAgentId:o}:{defaultAgentId:s.defaultAgentId}}};this.onWorkItem(a)}async handleTeamImage(e,t,s,n){this.send(e,{type:"ack",id:t.id});let i=await this.verifyChannelMembership(e,t.channelId,n);if(!i)return;let o=Buffer.from(t.data,"base64"),a=up(t.filename);try{let l=await js(o,t.filename,a);await this.teamStore.saveMessage({channelId:t.channelId,senderId:n,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!==n):void 0,d={id:t.id||sn(),text:`[Photo: ${t.filename}]`,source:{kind:"team",id:t.channelId,label:`team:${i?.name??t.channelId}`,adapterId:"ws"},sender:n,senderName:s.label,threadId:`team:${t.channelId}`,timestamp:new Date,files:[l],meta:{deviceId:n,channelId:t.channelId,...s.user?{user:s.user}:{},...c?{targetAgentId:c}:{defaultAgentId:s.defaultAgentId}}};this.onWorkItem(d)}catch(l){_e.error("Team image processing failed",{deviceId:n,filename:t.filename,error:String(l)}),this.send(e,{type:"error",message:"Failed to process image"})}}async handleTeamFile(e,t,s,n){this.send(e,{type:"ack",id:t.id});let i=await this.verifyChannelMembership(e,t.channelId,n);if(!i)return;let o=Buffer.from(t.data,"base64");try{let a=t.mimetype.startsWith("image/")?await js(o,t.filename,t.mimetype):await lh(o,t.filename,t.mimetype);await this.teamStore.saveMessage({channelId:t.channelId,senderId:n,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!==n):void 0,c={id:t.id||sn(),text:`[File: ${t.filename}]`,source:{kind:"team",id:t.channelId,label:`team:${i?.name??t.channelId}`,adapterId:"ws"},sender:n,senderName:s.label,threadId:`team:${t.channelId}`,timestamp:new Date,files:[a],meta:{deviceId:n,channelId:t.channelId,...s.user?{user:s.user}:{},...l?{targetAgentId:l}:{defaultAgentId:s.defaultAgentId}}};this.onWorkItem(c)}catch(a){_e.error("Team file processing failed",{deviceId:n,filename:t.filename,error:String(a)}),this.send(e,{type:"error",message:"Failed to process file"})}}async handleCommand(e,t,s,n){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:n,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(n=>({name:n.name,description:n.description,args:n.args})),id:t.id})}async handleChannelList(e,t,s){let n=await this.teamStore.listChannels(s);this.send(e,{type:"channel_list",channels:n.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:n,hasMore:i}=await this.teamStore.getHistory(t.channelId,{before:t.before,limit:t.limit});this.send(e,{type:"history",channelId:t.channelId,messages:n.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===tn.default.OPEN&&e.send(JSON.stringify(t))}}});var pp={};Le(pp,{startBeekeeperRegistration:()=>E_});function E_(r){let{beekeeperPort:e,wsPort:t}=r,s=r.intervalMs??3e4,n=`http://127.0.0.1:${e}/internal/register-capability`,i={name:r.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(n,{method:"POST",headers:{"content-type":"application/json"},body:o});if(c.ok)oc.debug("Registered with beekeeper",{beekeeperPort:e,wsPort:t});else{let d=await c.text().catch(()=>"");oc.warn("Beekeeper registration failed",{status:c.status,body:d})}}catch(c){oc.warn("Beekeeper registration error",{error:String(c)})}};a();let l=setInterval(()=>{a()},s);return{stop:()=>clearInterval(l)}}var oc,mp=K(()=>{"use strict";x();oc=b("beekeeper-client")});async function gp(r,e,t){let s=[];r.soul&&s.push(r.soul),s.push(r.systemPrompt);let n=await e.read("shared/constitution.md");n&&s.push(n),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
|
|
|
225
225
|
${t.goal}`),t?.context&&s.push(`## Call Context
|
|
226
226
|
|
|
227
|
-
${t.context}`);let i=await e.getHotTierPrompt(
|
|
227
|
+
${t.context}`);let i=await e.getHotTierPrompt(r.id,g.memory.hotBudgetTokens);if(i)s.push(i);else{let l=`agents/${r.id}`,c=await e.read(`${l}/memory.md`);c&&s.push(`## Your Memory
|
|
228
228
|
${c}`)}let a=new Date().toLocaleString("en-US",{timeZone:"America/Los_Angeles",weekday:"long",year:"numeric",month:"long",day:"numeric",hour:"numeric",minute:"2-digit",hour12:!0});return s.push(`**Current date/time**: ${a} (Pacific Time)`),s.join(`
|
|
229
229
|
|
|
230
230
|
---
|
|
231
231
|
|
|
232
|
-
`)}var
|
|
232
|
+
`)}var yp=K(()=>{"use strict";Ce()});function wp(r,e){let t=[];for(let s of r)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 n=[];s.content&&n.push({type:"text",text:s.content});for(let i of s.tool_calls)n.push({type:"tool_use",id:i.id,name:i.function.name,input:N_(i.function.arguments)});t.push({role:"assistant",content:n})}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 Sp(r){if(!(!r||r.length===0))return r.map(e=>({name:e.function.name,description:e.function.description??"",input_schema:e.function.parameters??{type:"object",properties:{}}}))}function kp(r,e,t){let s={id:r,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
|
|
234
|
+
`}function ac(r,e,t="stop"){let s={id:r,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
|
|
238
|
+
`}function bp(r,e,t){return{id:r,object:"chat.completion",created:Math.floor(Date.now()/1e3),model:t,choices:[{index:0,message:{role:"assistant",content:e},finish_reason:"stop"}]}}function N_(r){if(!r)return{};try{return JSON.parse(r)}catch{return{}}}var _p=K(()=>{"use strict"});var Tp={};Le(Tp,{VoiceAdapter:()=>cc});import{createServer as x_}from"node:http";import O_ from"@anthropic-ai/sdk";import{randomUUID as vp}from"node:crypto";function D_(r){return new Promise((e,t)=>{let s=[];r.on("data",n=>s.push(n)),r.on("end",()=>e(Buffer.concat(s).toString("utf-8"))),r.on("error",t)})}var De,M_,cc,Ip=K(()=>{"use strict";x();yp();_p();Ce();De=b("voice-adapter"),M_=7200*1e3,cc=class{port;serverSecret;registry;memoryManager;httpServer;anthropic;sessions=new Map;sweepTimer;constructor(e,t,s,n){this.port=e,this.serverSecret=t,this.registry=s,this.memoryManager=n,this.anthropic=new O_}async start(){this.httpServer=x_((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,n]of this.sessions)e-n.startedAt.getTime()>M_&&(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 n=await D_(e),i;try{i=JSON.parse(n)}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??vp();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 gp(a,this.memoryManager,{goal:c?.goal,context:c?.context}),{system:u,messages:h}=wp(i.messages,d),p=Sp(i.tools),m=a.model,f=`chatcmpl-${vp()}`;if(i.stream===!1){let S=(await this.anthropic.messages.create({model:m,max_tokens:1024,system:u,messages:h,...p?{tools:p}:{}})).content.filter(k=>k.type==="text").map(k=>k.text).join("");t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify(bp(f,S,m)));return}t.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"});try{let y=this.anthropic.messages.stream({model:m,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(kp(f,S.text??"",m))}t.writableEnded||t.write(ac(f,m))}catch(y){De.error("Claude streaming error",{error:String(y),callId:l,agentId:o}),t.writableEnded||t.write(ac(f,m,"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&&g.voice.assistants[s])return g.voice.assistants[s];let n=e.call?.metadata;if(n?.hive_agent_id)return n.hive_agent_id}}});is();wi();import{existsSync as L_,watch as P_}from"node:fs";import{MongoClient as $_}from"mongodb";x();import{existsSync as yc,readFileSync as wc,readdirSync as Up,statSync as J_,writeFileSync as z_,mkdirSync as Q_}from"node:fs";import{resolve as Sc,join as Z_}from"node:path";import{createHash as qp}from"node:crypto";var Si=b("integrity");function kc(r,e){let t=Sc(e,"installed-snapshot.json");if(!yc(t))return Si.warn("No installed-snapshot.json \u2014 skipping integrity check (first install?)"),{ok:!0,warnings:[]};let s=JSON.parse(wc(t,"utf-8"));if(!Array.isArray(s))return{ok:!1,warnings:[`installed-snapshot.json is malformed (expected array, got ${typeof s})`]};let n=s,i=[];for(let o of n){let a=Sc(r,o.path);if(!yc(a)){i.push(`missing: ${o.path}`);continue}let l=wc(a);qp("sha256").update(l).digest("hex")!==o.hash&&i.push(`modified: ${o.path}`)}if(i.length>0)throw Si.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
|
|
242
|
-
`);
|
|
241
|
+
Reinstall with: npm install @keepur/hive@<version>`);return{ok:!0,warnings:[]}}function bc(r){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=Up(r),n=[];for(let i of s)t.has(i)||i.startsWith(".")&&i!==".hive"||e.some(o=>i.startsWith(o.replace("/","")))||n.push(i);n.length>0&&Si.warn("Unexpected files in instance directory",{files:n})}catch{}}x();import{existsSync as ki,readFileSync as jp,writeFileSync as Fp,mkdirSync as Kp}from"node:fs";import{resolve as bi}from"node:path";var _c=b("upgrade-notice");function vc(r,e){let t=bi(r,"upgrade-notice-emitted");if(ki(t))return;let s=bi(r,"previous-snapshot.json");if(ki(s))try{let n=JSON.parse(jp(s,"utf-8")),i=[];for(let l of n)if(typeof l.path=="string"&&l.path.startsWith("skills/")&&l.path.endsWith("SKILL.md")){let c=l.path.match(/^skills\/([^/]+)\//);c&&!ki(bi(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
|
+
`);_c.info(a),Kp(r,{recursive:!0}),Fp(t,new Date().toISOString())}catch(n){_c.warn("Failed to check upgrade notice",{error:String(n)})}}Ce();x();x();ia();var X={maxConcurrent:3,timeoutMs:3e5,budgetUsd:10,maxTurns:200,icon:"",keywords:[],passiveChannels:[],delegatePrompts:{},schedule:[],coreServers:["memory","structured-memory","keychain","event-bus","contacts"],delegateServers:[]};function Tu(r,e){return{id:r._id,name:r.name,aliases:r.aliases??[],model:r.model,channels:r.channels??[],homeBase:r.homeBase,catches:r.catches,passiveChannels:r.passiveChannels??X.passiveChannels,keywords:r.keywords??X.keywords,isDefault:r.isDefault??!1,schedule:r.schedule??X.schedule,budgetUsd:r.budgetUsd??X.budgetUsd,maxTurns:r.maxTurns??X.maxTurns,icon:r.icon??X.icon,slackBot:r.slackBot,coreServers:r.coreServers??[...X.coreServers],delegateServers:r.delegateServers??[...X.delegateServers],plugins:r.plugins,maxConcurrent:r.maxConcurrent??X.maxConcurrent,timeoutMs:r.timeoutMs??X.timeoutMs,betas:r.betas,metadata:r.metadata,disabled:r.disabled??!1,subscribe:r.subscribe??[],resourceTiers:r.resourceTiers,delegatePrompts:r.delegatePrompts??X.delegatePrompts,soul:r.soul??"",systemPrompt:r.systemPrompt??"",archetype:r.archetype,title:r.title,archetypeConfig:r.archetypeConfig,autonomy:yu(e,r.autonomy)}}Ce();ar();ar();import{statSync as BS}from"node:fs";import{normalize as Au,resolve as Eu}from"node:path";var Nu=new Set(["linear","github","clickup"]);function Ou(r){if(!r||typeof r!="object")throw new Error("software-engineer archetypeConfig must be an object");let e=r;if(typeof e.workshop!="string"||!e.workshop.startsWith("/"))throw new Error("workshop must be an absolute path");let t=Au(e.workshop);xu(t,"workshop");let s=e.workspaces??[];if(!Array.isArray(s))throw new Error("workspaces must be an array");let n=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(n.has(l.name))throw new Error(`workspaces[${a}]: duplicate workspace name "${l.name}"`);if(n.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=Au(l.path);xu(c,`workspaces[${a}] (${l.name})`);let d=Eu(c),u=Eu(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"||!Nu.has(h.type))throw new Error(`workspaces[${a}] (${l.name}): tracker.type must be one of: ${[...Nu].join(", ")}`);return US(h,a,l.name),{name:l.name,path:c,tracker:h,...l.primary===!0?{primary:!0}:{}}});return{workshop:t,workspaces:i}}function xu(r,e){let t;try{t=BS(r)}catch{throw new Error(`${e}: path does not exist: ${r}`)}if(!t.isDirectory())throw new Error(`${e}: path is not a directory: ${r}`)}function US(r,e,t){switch(r.type){case"linear":if(typeof r.project!="string"||r.project.length===0)throw new Error(`workspaces[${e}] (${t}): linear tracker requires project`);break;case"github":if(typeof r.repo!="string"||r.repo.length===0)throw new Error(`workspaces[${e}] (${t}): github tracker requires repo`);break;case"clickup":if(typeof r.list!="string"||r.list.length===0)throw new Error(`workspaces[${e}] (${t}): clickup tracker requires list`);break}}function Mu(r){let e=r.archetypeConfig,t=r.agentConfig.title||r.agentConfig.name,s=[];s.push(`# Software Engineer
|
|
243
243
|
|
|
244
|
-
You are a software engineer. Your title is ${t}. Your discipline is owning codebases and shipping production code through disciplined delivery.`);let
|
|
245
|
-
Workspaces:`);for(let i of e.workspaces){let o=
|
|
246
|
-
No workspaces configured yet. You have full agency over your entire workshop.`);return s.push(
|
|
244
|
+
You are a software engineer. Your title is ${t}. Your discipline is owning codebases and shipping production code through disciplined delivery.`);let n=[`Your workshop is \`${e.workshop}\`. This is your working directory.`];if(e.workspaces.length>0){n.push(`
|
|
245
|
+
Workspaces:`);for(let i of e.workspaces){let o=qS(i.tracker),a=i.primary?" (primary)":"";n.push(`- **${i.name}**${a}: \`${i.path}\` \u2014 tracker: ${o}`)}}else n.push(`
|
|
246
|
+
No workspaces configured yet. You have full agency over your entire workshop.`);return s.push(n.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
|
|
|
249
249
|
Every piece of work starts with a ticket. The ticket description IS the spec. Write ticket descriptions that a developer can implement from \u2014 problem statement, approach, and acceptance criteria.
|
|
@@ -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
|
|
272
|
+
`)}function qS(r){switch(r.type){case"linear":return`Linear (project: ${r.project})`;case"github":return`GitHub Issues (repo: ${r.repo})`;case"clickup":return`ClickUp (list: ${r.list})`;default:return r.type}}import{resolve as jS}from"node:path";import{normalize as Du,resolve as Lu}from"node:path";function la(r){if(typeof r!="string"||!r.startsWith("/"))throw new Error(`claudeProjectSlug: path must be absolute, got ${String(r)}`);return r.replace(/\/+$/,"").replace(/[/_.]/g,"-").replace(/-+/g,"-")}function Pu(r,e){let t=Du(Lu(r));return e.workspaces.find(s=>{let n=Du(Lu(s.path));return t===n||t.startsWith(n+"/")})}function $u(r){return la(r.workshop)}function Ru(r){return la(r.path)}var FS=new Set(["Edit","Write","MultiEdit","NotebookEdit"]);function KS(r,e){return r==="NotebookEdit"?e.notebook_path??e.file_path:e.file_path}function Bu(r){let e=r.archetypeConfig;return e.workspaces.length===0?[]:[{hooks:[async t=>{try{let s=t,n=s.tool_name??"";if(!FS.has(n))return{continue:!0};let i=KS(n,s.tool_input??{});if(typeof i!="string"||i.length===0)return{continue:!0};let o=jS(e.workshop,i),a=Pu(o,e);return a?{hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:`${n} 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 HS}from"node:os";import{join as Uu}from"node:path";function qu(r){let e=r.archetypeConfig,t=HS(),s=[];s.push({id:"workshop",backing:"filesystem",dir:Uu(t,".claude/projects",$u(e),"memory")});for(let n of e.workspaces)s.push({id:`workspace:${n.name}`,backing:"filesystem",dir:Uu(t,".claude/projects",Ru(n),"memory")});return s}function ju(r){return{cwd:r.archetypeConfig.workshop,settingSources:["project"]}}Cu({id:"software-engineer",description:"Owns codebases and ships production code through disciplined delivery (ticket \u2192 spec \u2192 PR \u2192 CI \u2192 close).",whenToUse:"Pick this when the agent's core job is writing, reviewing, or shipping production code. For product strategists, marketers, or anyone where code is incidental, use a plain agent.",configSchema:{workshop:{type:"string",required:!0,description:"Absolute filesystem path \u2014 the engineer's bounded root directory (e.g. /Users/you/dev)."},workspaces:{type:"array",required:!1,description:"Registered codebases inside the workshop. Do NOT prompt for these at creation time \u2014 workspace registration is a separate admin flow. Start with an empty array."}},validateConfig:Ou,systemPromptCard:Mu,preToolUseHooks:Bu,memoryScopes:qu,sessionOptions:ju});var he=b("agent-registry"),Fu=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,n=[],i=[],o=[],a=[];for(let l of e){let c=Tu(l,g.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):n.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:n,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)})}},Fu),he.info("Agent registry watching via polling",{intervalMs:Fu})}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(n=>{let i=n.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;if(this.matchesName(t.name,e))return!0;if(t.name.includes(" ")){let s=t.name.split(" ")[0];if(this.matchesName(s,e))return!0}for(let s of t.aliases)if(this.matchesName(s,e))return!0;return!1})}matchesName(e,t){let s=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`(?:^|hey\\s+|@)${s}\\b|\\b${s}[,:]`,"i").test(t)}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 n=s.includes(":")?s.split(":")[0]:s;e[n]||(e[n]=[]),e[n].includes(t.id)||e[n].push(t.id)}return e}};x();wa();Fs();x();Ce();import{query as g0}from"@anthropic-ai/claude-agent-sdk";var Ks=b("model-router"),y0={haiku:{timeoutMs:12e4,maxTurns:20,budgetUsd:1},sonnet:{timeoutMs:3e5,maxTurns:50,budgetUsd:5},opus:{timeoutMs:6e5,maxTurns:200,budgetUsd:50}};function mr(r,e){let t=y0[r],s=e?.[r];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 w0(r){return r.includes("opus")?"opus":r.includes("haiku")?"haiku":"sonnet"}var S0=`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,70 @@ 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
|
|
285
|
+
Respond with ONLY a JSON object: { "tier": "haiku" | "sonnet" | "opus" }`;function k0(r){try{let s=JSON.parse(r);if(s.tier&&at[s.tier]!==void 0)return s.tier}catch{}let e=r.indexOf("{"),t=r.lastIndexOf("}");if(e!==-1&&t>e)try{let s=JSON.parse(r.slice(e,t+1));if(s.tier&&at[s.tier]!==void 0)return s.tier}catch{}return null}async function hh(r,e,t){let s=w0(e),n=g.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&&(Ks.warn("Model router timed out",{timeoutMs:g.modelRouter.timeoutMs}),i.close())},g.modelRouter.timeoutMs);try{i=g0({prompt:r,options:{model:n,systemPrompt:S0,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,...g.anthropic.apiKey?{ANTHROPIC_API_KEY:g.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 m=p.message?.content;if(Array.isArray(m))for(let f of m)f.type==="text"&&(o=f.text)}if(p.type==="result"){let m=p;a=m.total_cost_usd,l=m.duration_ms,m.subtype==="success"&&m.result&&(o=m.result)}}}catch(h){Ks.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=k0(o);if(!d){Ks.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,Ks.debug("Model router capped by ceiling",{requested:d,ceiling:s})),Ks.info("Model router decision",{tier:u,requested:d,ceiling:s,costUsd:a,durationMs:l,textPreview:r.slice(0,100)}),{tier:u,model:gr[u],costUsd:a,durationMs:l,resourceLimits:mr(u,t)}}Ce();Ia();ma();is();import{existsSync as kh,readdirSync as E0,statSync as N0}from"node:fs";import{join as bh}from"node:path";wr();import{QdrantClient as A0}from"@qdrant/js-client-rest";var Sr="conversations",kr=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 A0({url:this.qdrantUrl})),this.qdrant}async ensureCollection(){if(this.collectionReady)return;let e=this.getClient(),{collections:t}=await e.getCollections();if(!t.some(n=>n.name===Sr)){let i=(await Ue(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+`
|
|
286
286
|
|
|
287
|
-
`+e.response,
|
|
288
|
-
`),f=await a.send(
|
|
287
|
+
`+e.response,n=await Ue(this.ollamaUrl,s),i=crypto.randomUUID();await t.upsert(Sr,{points:[{id:i,vector:n,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,n){await this.ensureCollection();let i=this.getClient(),o=await Ue(this.ollamaUrl,e),a=[{key:"agentId",match:{value:t}}];return n!==void 0&&a.push({key:"timestampUnix",range:{gte:n}}),(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 fe=b("agent-manager"),x0=new kr;function O0(r){if(!kh(r))return[];try{return E0(r).map(e=>bh(r,e)).filter(e=>{try{return N0(e).isDirectory()&&kh(bh(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;activeWorkItems=new Map;spawnWindow=new Map;constructor(e,t,s,n,i){this.registry=e,this.memoryManager=t,this.sessionStore=s,this.activityLogger=n,this.prefetcher=i,this.plugins=Ta(g.plugins,ce),this.seedDirs=O0(fc),this.skillIndex=pa(Je,this.plugins,this.seedDirs)}getPlugins(){return this.plugins}getActiveWorkItems(e){return this.activeWorkItems.get(e)??[]}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 qs(t,this.memoryManager,this.plugins,this.skillIndex,s,this.prefetcher)}reloadSkills(){try{this.skillIndex=pa(Je,this.plugins,this.seedDirs)}catch(e){fe.warn("Skill reload failed, retaining previous index",{error:String(e)})}}recordSpawn(e){let t=Date.now(),s=6e4,n=(this.spawnWindow.get(e)??[]).filter(i=>t-i<s);if(n.push(t),this.spawnWindow.set(e,n),n.length>3&&fe.warn("Session spawn rate exceeded",{channelId:e,count:n.length,windowSec:60}),this.spawnWindow.size>200){let i=this.spawnWindow.keys().next().value;i&&this.spawnWindow.delete(i)}}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 n=t.threadId??t.id,i=`${e}:${n}`;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=>{fe.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 n=this.registry.get(e),i=n?.maxConcurrent??3,o=this.activeThreads.get(e)??new Set;if(o.size>=i){fe.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 m=s.shift(),f=this.activeWorkItems.get(e)??[];f.push(m.message),this.activeWorkItems.set(e,f);try{let y=m.message.threadId??m.message.id,w=await this.sessionStore.get(e,y);w||this.recordSpawn(m.message.source.id);let S={adapterId:m.message.source.adapterId??m.message.source.kind,channelId:m.message.source.id,channelKind:m.message.source.kind,channelLabel:m.message.source.label,threadId:m.message.threadId??m.message.id,slackTs:m.message.meta?.slackTs??"",slackThreadTs:m.message.meta?.slackThreadTs??""},k=m.message.senderName??m.message.sender,I=m.message.source.kind==="team"?m.message.meta?.user:void 0,v;if(I)v=`[user:${I} via ${k} in #${m.message.source.label}]: ${m.message.text}`;else if(m.message.senderName){let W=m.message.meta?.slackThreadTs,$=m.message.meta?.slackTs,z=W??$,Ot=z?`, thread=${z}`:"";v=`[${k} in #${m.message.source.label}${Ot}]: ${m.message.text}`}else v=m.message.text;m.message.files?.length&&(v+=dh(m.message.files));let N,D=0,C;if(g.modelRouter.enabled&&m.message.sender!=="system")try{let W=this.registry.get(e);if(W){let $=await hh(m.message.text,W.model,W.resourceTiers);N=$.model!==W.model?$.model:void 0,D=$.costUsd,C=$.resourceLimits}}catch(W){fe.warn("Model router failed, using default",{agentId:e,error:String(W)})}let E=await a.send(v,w,m.onStream,S,N,C);E.costUsd+=D,E.sessionId&&!E.aborted&&this.sessionStore.set(e,y,E.sessionId,{inputTokens:E.inputTokens,outputTokens:E.outputTokens,cacheReadTokens:E.cacheReadTokens,cacheCreationTokens:E.cacheCreationTokens,contextWindow:E.contextWindow,compactions:E.compactions,preCompactTokens:E.preCompactTokens});let G=this.states.get(e);G.messagesProcessed++,G.lastActivity=new Date,G.currentSessionId=E.sessionId,E.error&&(G.errorCount++,w&&this.sessionStore.delete(e,y)),m.resolve(E),c++,d=m,u=E,E.text&&!E.error&&x0.index({agentId:e,threadId:y,channelId:m.message.source.id,source:m.message.source.kind,senderName:m.message.senderName??"unknown",timestampUnix:Math.floor(Date.now()/1e3),timestamp:new Date().toISOString(),inbound:v,response:E.text}).catch(W=>fe.warn("Conversation indexing failed",{agentId:e,error:String(W)})),this.activityLogger?.record({agentId:e,threadId:y,timestamp:new Date,sender:m.message.sender,senderName:m.message.senderName,channel:m.message.source.label,channelKind:m.message.source.kind,model:N??n?.model??"unknown",modelTier:void 0,costUsd:E.costUsd,durationMs:E.durationMs,inputTokens:E.inputTokens,outputTokens:E.outputTokens,contextWindow:E.contextWindow,toolCalls:E.toolCalls,toolSummary:E.toolSummary,compactions:E.compactions,streamed:E.streamed,error:E.error})}catch(y){let w=this.states.get(e);w&&(w.errorCount++,w.lastActivity=new Date),this.activityLogger?.record({agentId:e,threadId:m.message.threadId??m.message.id,timestamp:new Date,sender:m.message.sender,senderName:m.message.senderName,channel:m.message.source.label,channelKind:m.message.source.kind,model:n?.model??"unknown",costUsd:0,durationMs:0,inputTokens:0,outputTokens:0,contextWindow:0,toolCalls:0,toolSummary:"none",compactions:0,streamed:!1,error:String(y)}),m.reject(y instanceof Error?y:new Error(String(y)))}finally{let y=(this.activeWorkItems.get(e)??[]).filter(w=>w.id!==m.message.id);y.length===0?this.activeWorkItems.delete(e):this.activeWorkItems.set(e,y)}}let h=[...n?.coreServers??[],...n?.delegateServers??[]];if((h.includes("memory")||h.includes("structured-memory"))&&u&&d&&!u.error&&!u.aborted&&c>=g.memory.reflectionMinTurns&&d.message.sender!=="system")try{let m=["[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(m,u.sessionId);if(fe.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(m){fe.warn("Reflection failed, non-critical",{agentId:e,threadKey:t,error:String(m)})}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,n]of this.queues)if(s.startsWith(t)&&n.length>0&&!this.processing.has(s)){this.processThreadQueue(e,s);break}}updateStatus(e,t){let s=this.states.get(e);s&&(s.status=t,fe.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);fe.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}),fe.info("Agent restarted",{agentId:e})}sweep(){let e=0,t=[];for(let[n,i]of this.states)!this.registry.get(n)&&(i.status==="stopped"||i.status==="idle")&&(this.states.delete(n),this.activeRunners.delete(n),this.activeThreads.delete(n),e++,fe.info("Zombie agent state removed",{agentId:n}));for(let n of this.processing){let i=n.split(":")[0],o=this.activeRunners.get(i);if(!o||o.size===0){this.processing.delete(n);let a=this.activeThreads.get(i);a&&(a.delete(n),this.updateThreadCount(i),a.size===0&&this.updateStatus(i,"idle")),e++,fe.warn("Stuck processing flag cleared",{threadKey:n,agentId:i});let l=this.queues.get(n);l&&l.length>0&&this.processThreadQueue(i,n).catch(c=>{fe.error("Failed to restart stuck queue",{threadKey:n,error:String(c)})})}}let s=new Set;for(let n of this.queues.keys())s.add(n.split(":")[0]);for(let n of s)this.retryDeferredThreads(n);return{component:"agent-manager",pruned:e,retried:0,bytesFreed:0,errors:t}}};x();Fs();import{SocketModeClient as D0}from"@slack/socket-mode";import{WebClient as L0}from"@slack/web-api";x();var M0=b("outbound-ts-cache"),_r=class{entries=new Map;ttlMs;maxSize;constructor(e={}){this.ttlMs=e.ttlMs??12e4,this.maxSize=e.maxSize??1e4}register(e,t){if(this.evictExpired(),this.entries.size>=this.maxSize){let s=this.entries.keys().next().value;s&&this.entries.delete(s)}this.entries.set(this.key(e,t),Date.now()+this.ttlMs)}has(e,t){let s=this.entries.get(this.key(e,t));return s===void 0?!1:s<=Date.now()?(this.entries.delete(this.key(e,t)),!1):!0}size(){return this.entries.size}key(e,t){return`${e}:${t}`}evictExpired(){let e=Date.now(),t=0;for(let[s,n]of this.entries)n<=e&&(this.entries.delete(s),t++);t>0&&M0.debug(`evicted ${t} expired entries`,{evicted:t})}};var F=b("slack-gateway"),vr=class r{socket;web;messageHandler=null;threadStartedHandler=null;threadContextHandler=null;botUserId=null;botId=null;peerBotUserIds=new Set;peerBotIds=new Set;channelNameCache=new Map;channelIdCache=new Map;userNameCache=new Map;outboundTsCache=new _r;integrationChannels=new Set;botToken;constructor(e,t){this.socket=new D0({appToken:e}),this.web=new L0(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),F.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,F.info("Bot identity resolved",{botUserId:this.botUserId,botId:this.botId}),this.socket.on("message",async({event:t,ack:s})=>{if(await s(),!t||(F.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.ts&&t.channel&&this.outboundTsCache.has(t.channel,t.ts)){F.info("Outbound echo suppressed",{channel:t.channel,ts:t.ts});return}if(t.bot_id||t.subtype){let l=await this.resolveChannelName(t.channel);if(!this.integrationChannels.has(l)){F.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}F.info("Integration message accepted",{channelName:l,subtype:t.subtype,bot_id:t.bot_id})}let n=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&&(
|
|
291
|
+
`)),i=i.trim()}let o=[];if(t.files?.length&&(F.info("Processing file attachments",{count:t.files.length,names:t.files.map(c=>c.name)}),o=(await Promise.all(t.files.map(c=>ch(c,this.botToken)))).filter(Boolean)),!i&&o.length===0){F.info("Skipping message with no extractable text or files",{channel:t.channel,channelName:n,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:n,user:t.user??t.bot_id??"unknown",ts:t.ts,threadTs:t.thread_ts,files:o.length>0?o:void 0};F.info("Message received",{channel:a.channel,channelName:n,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(),F.info("Assistant thread started",{channel:t?.assistant_thread?.channel_id});let n=t?.assistant_thread;n&&this.threadStartedHandler?.({channel:n.channel_id,threadTs:n.thread_ts,context:n.context??{}})}),this.socket.on("assistant_thread_context_changed",async({event:t,ack:s})=>{await s(),F.info("Assistant thread context changed",{channel:t?.assistant_thread?.channel_id});let n=t?.assistant_thread;n&&this.threadContextHandler?.({channel:n.channel_id,threadTs:n.thread_ts,context:n.context??{}})}),this.socket.on("slack_event",async({ack:t,body:s})=>{await t();let n=s?.event;n&&F.debug("slack_event",{type:n.type,subtype:n.subtype,channel:n.channel})}),await this.socket.start(),F.info("Socket Mode connected")}async stop(){await this.socket.disconnect(),F.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(n){F.warn("Failed to set thread status",{error:String(n)})}}async setSuggestedPrompts(e,t,s){try{await this.web.assistant.threads.setSuggestedPrompts({channel_id:e,thread_ts:t,prompts:s})}catch(n){F.warn("Failed to set suggested prompts",{error:String(n)})}}async setThreadTitle(e,t,s){try{await this.web.assistant.threads.setTitle({channel_id:e,thread_ts:t,title:s})}catch(n){F.warn("Failed to set thread title",{error:String(n)})}}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){F.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(n){F.warn("Failed to append stream",{error:String(n)})}}async stopStream(e,t){try{await this.web.chat.stopStream({channel:e,ts:t})}catch(s){F.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,n){return t.length<=r.SLACK_MAX_CHARS?this.postSingle(e,t,s,n):t.length<=r.SPLIT_MAX_CHARS?this.postSplit(e,t,s,n):this.postAsFile(e,t,s,n)}async postSingle(e,t,s,n){if(n)try{let i={};n.icon&&(n.icon.startsWith(":")&&n.icon.endsWith(":")?i.icon_emoji=n.icon:i.icon_url=n.icon);let o=await this.web.chat.postMessage({channel:e,text:t,thread_ts:s,unfurl_links:!1,username:n.name,...i});return o.ok&&o.ts&&o.channel&&this.outboundTsCache.register(o.channel,o.ts),o.ts}catch(i){F.warn("Failed to post with identity, falling back to plain post",{error:String(i)})}try{let i=await this.web.chat.postMessage({channel:e,text:t,thread_ts:s,unfurl_links:!1});return i.ok&&i.ts&&i.channel&&this.outboundTsCache.register(i.channel,i.ts),i.ts}catch(i){F.error("Failed to post message",{channel:e,error:String(i)});return}}splitText(e){let t=r.SLACK_MAX_CHARS,s=[],n=e;for(;n.length>t;){let i=-1,o=n.lastIndexOf(`
|
|
292
292
|
|
|
293
|
-
`,t);if(o>0&&(i=o+2),i===-1){let a=
|
|
294
|
-
`,t);a>0&&(i=a+1)}if(i===-1){let a=
|
|
293
|
+
`,t);if(o>0&&(i=o+2),i===-1){let a=n.lastIndexOf(`
|
|
294
|
+
`,t);a>0&&(i=a+1)}if(i===-1){let a=n.lastIndexOf(" ",t);a>0&&(i=a+1)}i===-1&&(i=t),s.push(n.slice(0,i).trimEnd()),n=n.slice(i).trimStart()}return n.length>0&&s.push(n),s}async postSplit(e,t,s,n){let i=this.splitText(t);F.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,n);a===0&&(o=c)}return o}async postAsFile(e,t,s,n){let i=t.slice(0,r.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=
|
|
300
|
+
_(full response attached)_`;let l=n?.name??"hive",c=new Date().toISOString().replace(/[:.]/g,"-").slice(0,19),d=`${l.toLowerCase()}-${c}.md`,u=await this.postSingle(e,o,s,n);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}),F.info("Uploaded oversized message as file",{channel:e,filename:d,length:t.length}),u}catch(h){return F.warn("File upload failed, falling back to split",{channel:e,error:String(h)}),this.postSplit(e,t,s,n)}}async addReaction(e,t,s){try{await this.web.reactions.add({channel:e,name:s,timestamp:t})}catch(n){let i=String(n);i.includes("already_reacted")||F.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 n=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}n=n.replace(i[0],`@${a}`)}return n}registerOutboundTs(e,t){this.outboundTsCache.register(e,t)}isOutboundEcho(e,t){return this.outboundTsCache.has(e,t)}async postAndRegister(e,t,s){try{let n=await this.postMessage(e,t,s);return n?{ok:!0,ts:n}:{ok:!1,error:"postMessage returned no ts"}}catch(n){return{ok:!1,error:n.message}}}async resolveChannelId(e){if(e.startsWith("C")||e.startsWith("D")||e.startsWith("G"))return e;let t=e.replace(/^#/,""),s=this.channelIdCache.get(t);if(s)return s;try{let n;do{let i=await this.web.conversations.list({limit:1e3,cursor:n,exclude_archived:!0,types:"public_channel,private_channel"});for(let o of i.channels??[])o.id&&o.name&&(this.channelNameCache.set(o.id,o.name),this.channelIdCache.set(o.name,o.id));n=i.response_metadata?.next_cursor||void 0}while(n)}catch(n){return F.warn("channel id resolve failed",{name:t,error:n.message}),null}return this.channelIdCache.get(t)??null}async resolveChannelName(e){let t=this.channelNameCache.get(e);if(t)return t;try{let n=(await this.web.conversations.info({channel:e})).channel?.name??e;return this.channelNameCache.set(e,n),n}catch{return this.channelNameCache.set(e,e),e}}async readChannel(e,t=50){try{return(await this.web.conversations.history({channel:e,limit:t})).messages}catch(s){F.warn("readChannel failed",{channel:e,error:s.message});return}}async listChannels(e){let t=[];try{let s;do{let n=await this.web.conversations.list({limit:1e3,cursor:s,exclude_archived:!0,types:"public_channel,private_channel"});for(let i of n.channels??[])i.id&&i.name&&(this.channelNameCache.set(i.id,i.name),this.channelIdCache.set(i.name,i.id),(!e||i.name.includes(e))&&t.push({id:i.id,name:i.name}));s=n.response_metadata?.next_cursor||void 0}while(s)}catch(s){F.warn("listChannels failed",{query:e,error:s.message})}return t}async readUser(e){try{return(await this.web.users.info({user:e})).user}catch(t){F.warn("readUser failed",{user:e,error:t.message});return}}sweep(){let e=this.channelNameCache.size+this.channelIdCache.size+this.userNameCache.size;return this.channelNameCache.clear(),this.channelIdCache.clear(),this.userNameCache.clear(),{component:"slack-gateway",pruned:e,retried:0,bytesFreed:0,errors:[]}}get client(){return this.web}};x();import{MongoClient as P0}from"mongodb";var $0=b("memory-manager"),Tr=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 P0(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}),$0.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:`^${R0(t)}[^/]+$`}}).project({path:1}).toArray()).map(n=>n.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 n={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 m=d.type;i[m]||(i[m]=[]),i[m].push(h)}}let l=["## Your Memory"];for(let[d,u]of Object.entries(n))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
|
|
307
|
+
`)}async write(e,t,s){let n=await this.collection.findOne({path:e});n&&await this.versions.insertOne({path:e,content:n.content,savedAt:n.updatedAt,savedBy:n.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 R0(r){return r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}x();Ce();import{MongoClient as B0}from"mongodb";var Q=b("scheduler"),Ir=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,n,i){this.agentManager=e,this.memoryManager=t,this.healthReporter=s,this.registry=n,this.onDispatch=i;for(let o of n.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 B0(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:g.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}),Q.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});Q.info("Schedules reloaded",{jobs:this.cronJobs.length})}start(){this.heartbeatTimer=setInterval(async()=>{try{await this.memoryManager.pull(),await this.healthReporter.writeToMemory()}catch(e){Q.error("Heartbeat failed",{error:String(e)})}},g.scheduler.heartbeatIntervalMs),this.cronTimer=setInterval(()=>{this.checkCronJobs()},6e4),this.callbackCollection&&(this.callbackTimer=setInterval(()=>{this.checkCallbacks().catch(e=>{Q.error("Callback check failed",{error:String(e)})})},3e4)),this.eventsCollection&&(this.eventTimer=setInterval(()=>{this.checkEvents().catch(e=>{Q.error("Event check failed",{error:String(e)})})},3e4)),this.db&&(this.teamTimer=setInterval(()=>{this.fireTeamRequests().catch(e=>Q.error("Team request check failed",{error:String(e)}))},5e3)),Q.info("Scheduler started",{heartbeatMs:g.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(()=>{}),Q.info("Scheduler stopped")}checkCronJobs(){let e=new Date;for(let t of this.cronJobs)if(U0(t.cron,e)){if(t.lastRun&&q0(t.lastRun,e))continue;t.lastRun=e;let s=this.registry.get(t.agentId);if(s?.disabled){Q.debug("Skipping scheduled task \u2014 agent disabled",{agentId:t.agentId,task:t.task});continue}Q.info("Triggering scheduled task",{agentId:t.agentId,task:t.task});let n=s?.homeBase??s?.channels?.[0];if(!n){Q.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:n,label:n},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=>{Q.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;Q.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){Q.warn("Callback agent not found, skipping",{agentId:s.agentId});continue}if(i.disabled){Q.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=>{Q.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(n=>n.status==="pending");for(let n of s){let i=new Date;if((await this.eventsCollection.updateOne({_id:t._id,deliveries:{$elemMatch:{agentId:n.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(n.agentId);if(!a){Q.warn("Event target agent not found, skipping",{agentId:n.agentId,eventType:t.type});continue}if(a.disabled){Q.info("Event target agent disabled, skipping",{agentId:n.agentId,eventType:t.type});continue}let l=t._id.toHexString(),d=this.registry.get(t.sourceAgentId)?.name??t.sourceAgentId;Q.info("Dispatching event",{eventType:t.type,eventId:l,targetAgent:n.agentId,sourceAgent:t.sourceAgentId});let u=a.homeBase??`agent-${n.agentId}`,h={id:`event:${l}:${n.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}:${
|
|
310
|
-
`];for(let[
|
|
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}:
|
|
309
|
+
${JSON.stringify(t.payload)}`,source:{kind:"internal",id:u,label:u},sender:"system",threadId:`event:${l}:${n.agentId}:${i.getTime()}`,timestamp:i,meta:{targetAgentId:n.agentId,eventType:t.type,eventDomain:t.domain,eventId:l}};this.onDispatch?this.onDispatch(h):this.agentManager.sendMessage(n.agentId,h).catch(p=>{Q.error("Event dispatch failed",{agentId:n.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 n={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(n):this.agentManager.sendMessage(t.targetAgentId,n).catch(i=>Q.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,n);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){Q.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 U0(r,e){let t=r.split(/\s+/);if(t.length!==5)return!1;let[s,n,i,o,a]=t,l=e.getMinutes(),c=e.getHours(),d=e.getDate(),u=e.getMonth()+1,h=e.getDay();return Ws(s,l)&&Ws(n,c)&&Ws(i,d)&&Ws(o,u)&&Ws(a,h)}function Ws(r,e){if(r==="*")return!0;if(r.includes("-")){let[t,s]=r.split("-").map(Number);return e>=t&&e<=s}if(r.includes(","))return r.split(",").map(Number).includes(e);if(r.startsWith("*/")){let t=Number(r.slice(2));return e%t===0}return Number(r)===e}function q0(r,e){return r.getFullYear()===e.getFullYear()&&r.getMonth()===e.getMonth()&&r.getDate()===e.getDate()&&r.getHours()===e.getHours()&&r.getMinutes()===e.getMinutes()}x();var j0=b("health-reporter"),Cr=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
|
+
`];for(let[n,i]of Object.entries(e.agents)){let l=this.registry?.get(n)?.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} *${n}*${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"),j0.info("Health report written to memory")}};x();import{LinearClient as F0}from"@linear/sdk";var pe=b("linear-client"),Ar=class{client;defaultTeamId;constructor(e,t){this.client=new F0({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 pe.error("Failed to list teams",{error:String(e)}),[]}}async createIssue(e,t){try{let s=t?.teamId??this.defaultTeamId;if(!s)return pe.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?(pe.info("Issue created",{identifier:i.identifier,title:e}),{identifier:i.identifier,id:i.id,url:i.url}):(pe.error("Issue creation returned no issue",{title:e}),null)}catch(s){return pe.error("Failed to create issue",{error:String(s),title:e}),null}}async updateIssue(e,t){try{return await this.client.updateIssue(e,t),pe.info("Issue updated",{issueId:e,...t}),!0}catch(s){return pe.error("Failed to update issue",{error:String(s),issueId:e}),!1}}async addComment(e,t){try{let n=await(await this.client.createComment({issueId:e,body:t})).comment;return pe.info("Comment added",{issueId:e,commentId:n?.id}),n?.id??null}catch(s){return pe.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 n=await this.client.issues({filter:s,first:e?.limit??50,orderBy:"updatedAt"}),i=[];for(let o of n.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 pe.error("Failed to list issues",{error:String(t)}),[]}}async searchIssues(e,t,s){try{let n=s??this.defaultTeamId,o=(await this.client.searchIssues(e,{first:t??10})).nodes,a=[];for(let l of o){if(n&&(await l.team)?.id!==n)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(n){return pe.error("Failed to search issues",{error:String(n),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 pe.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(n=>({id:n.id,name:n.name,displayName:n.displayName,email:n.email,active:n.active}))}catch(s){return pe.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,n=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:n?{id:n.id,name:n.name,email:n.email}:void 0}}catch(t){return pe.error("Failed to find issue",{error:String(t),identifier:e}),null}}};x();import{MongoClient as _h}from"mongodb";var Wt=b("session-store"),Er=class{client;db;collection;uri;dbName;constructor(e,t="hive"){this.uri=e,this.dbName=t,this.client=new _h(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 _h(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(n){let i=String(n?.message??n);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 n=t.split(":").pop();return(await this.collection.findOne({_id:`${e}:${n}`}))?.sessionId}},void 0,`get(${e}:${t})`)}async set(e,t,s,n){await this.withRetry(async()=>{let i=new Date,o={$set:{agentId:e,threadId:t,sessionId:s,updatedAt:i},$setOnInsert:{createdAt:i,compactions:0}};n?(o.$set.inputTokens=n.inputTokens,o.$set.outputTokens=n.outputTokens,o.$set.cacheReadTokens=n.cacheReadTokens,o.$set.cacheCreationTokens=n.cacheCreationTokens,o.$set.contextWindow=n.contextWindow,n.compactions>0&&(o.$inc={compactions:n.compactions},o.$set.lastCompactedAt=i,n.preCompactTokens!==void 0&&(o.$set.preCompactTokens=n.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()}};x();x();Ce();import{query as K0}from"@anthropic-ai/claude-agent-sdk";var Nr=b("meeting-classifier"),H0=`You are a meeting facilitator. Given a message and a list of meeting participants, decide which participants should respond.
|
|
312
|
+
|
|
313
|
+
Rules:
|
|
314
|
+
- If someone is addressed by name, they MUST be in the respond list.
|
|
315
|
+
- Pick participants whose expertise is directly relevant to the message.
|
|
316
|
+
- Fewer is better \u2014 don't trigger everyone for a question only one person can answer.
|
|
317
|
+
- If the message is clearly directed at one person, return only that person.
|
|
318
|
+
- If the message is a general question to the room, pick 2-3 most relevant.
|
|
319
|
+
- For "what does everyone think?" style questions, include all participants.
|
|
320
|
+
|
|
321
|
+
Respond with ONLY a JSON object: { "respond": ["agent-id-1", "agent-id-2"] }`;function W0(r,e){let t=o=>{try{let a=JSON.parse(o);if(Array.isArray(a.respond))return a.respond.filter(l=>e.has(l))}catch{}return null},s=t(r);if(s)return s;let n=r.indexOf("{"),i=r.lastIndexOf("}");if(n!==-1&&i>n){let o=t(r.slice(n,i+1));if(o)return o}return null}function G0(r,e){let s=`Participants:
|
|
322
|
+
${r.map(n=>`- ${n.agentId} (${n.name}${n.title?`, ${n.title}`:""}): ${n.role}`).join(`
|
|
323
|
+
`)}`;return e&&(s+=`
|
|
324
|
+
|
|
325
|
+
Recent thread context:
|
|
326
|
+
${e}`),s}async function Ca(r,e,t){let s=new Set(e.map(u=>u.agentId));if(e.length===0)return{respondAgentIds:[],costUsd:0,durationMs:0};if(e.length===1)return{respondAgentIds:[e[0].agentId],costUsd:0,durationMs:0};let n=g.modelRouter.model,i=null,o="",a=0,l=0,c=setTimeout(()=>{i&&(Nr.warn("Meeting classifier timed out",{timeoutMs:g.modelRouter.timeoutMs}),i.close())},g.modelRouter.timeoutMs);try{let u=`${G0(e,t)}
|
|
327
|
+
|
|
328
|
+
Message:
|
|
329
|
+
${r}`;i=K0({prompt:u,options:{model:n,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,...g.anthropic.apiKey?{ANTHROPIC_API_KEY:g.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 m=p.message?.content;if(Array.isArray(m))for(let f of m)f.type==="text"&&(o=f.text)}if(p.type==="result"){let m=p;a=m.total_cost_usd,l=m.duration_ms,m.subtype==="success"&&m.result&&(o=m.result)}}}catch(u){return Nr.warn("Meeting classifier query failed, selecting all roster members",{error:String(u)}),{respondAgentIds:[...s],costUsd:0,durationMs:0}}finally{clearTimeout(c),i=null}let d=W0(o,s);return d?(Nr.info("Meeting classifier decision",{respond:d,rosterSize:e.length,costUsd:a,durationMs:l}),{respondAgentIds:d,costUsd:a,durationMs:l}):(Nr.warn("Meeting classifier parse failed, selecting all roster members",{rawText:o.slice(0,200)}),{respondAgentIds:[...s],costUsd:a,durationMs:l})}var q=b("dispatcher"),V0=80,Y0=[/^status\??$/i,/^how.{0,20}(everyone|agents?|doing|running)/i,/^health\??$/i,/^system status/i],vh=[/^no response (requested|needed|required|necessary)\.?$/i,/^\(no response\)$/i,/^n\/a\.?$/i],xr=class r{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;slackAdapter;meetingRosters=new Map;meetingReactionTracker=new Map;static DEDUP_TTL_MS=6e4;constructor(e,t,s,n,i){this.registry=e,this.agentManager=t,this.healthReporter=s,this.defaultAgentId=n,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}setSlackAdapter(e){this.slackAdapter=e}async dispatch(e){if(this.recentMessageIds.has(e.id)){q.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<=V0&&Y0.some(d=>d.test(t))){q.info("Status query intercepted",{source:e.source.kind,text:t});let d=this.healthReporter.formatForSlack(),u=this.adapters.get(e.source.adapterId??e.source.kind);if(u)try{await u.deliver({text:d,agentId:"system",workItem:e,costUsd:0,durationMs:0})}catch(h){q.warn("Status delivery failed, queuing for retry",{error:String(h)}),this.retryQueue?.enqueue({text:d,agentId:"system",workItem:e,costUsd:0,durationMs:0},u)}return}let s=await this.resolveAgents(e);if(s.length===0){q.warn("No agent found for work item",{source:e.source.kind,label:e.source.label,text:e.text.slice(0,50)});return}let n=s.filter(({agentId:d})=>this.registry.get(d)?.disabled?(q.info("Message dropped \u2014 agent is disabled",{agentId:d,source:e.source.kind}),!1):!0);if(n.length===0)return;if(n.some(d=>d.conferenceMode)){let d=e.threadId??e.id;this.threadAgentLastSeen.set(d,Date.now()),q.info("Conference fan-out",{agents:n.map(u=>u.agentId)}),await Promise.all(n.map(u=>this.dispatchToAgent(e,u)));return}if(n.length>1){let d=e.threadId??e.id;this.threadParticipants.has(d)||this.threadParticipants.set(d,new Set(n.map(u=>u.agentId))),this.threadAgentLastSeen.set(d,Date.now()),q.info("Multi-agent fan-out",{agents:n.map(u=>u.agentId)}),await Promise.all(n.map(u=>this.dispatchToAgent(e,u)));return}let{agentId:o}=n[0],a=e.threadId??e.id;this.threadAgentMap.set(a,o),this.threadAgentLastSeen.set(a,Date.now());let l=this.taskLedger?.shouldTrack(e)??!1;l&&this.taskLedger.onDispatch(e,o).catch(d=>q.warn("Task ledger dispatch failed",{error:String(d)}));let c=this.adapters.get(e.source.adapterId??e.source.kind);await c?.onProcessingStart?.(e,o);try{let d=await this.agentManager.sendMessage(o,e),u=d.text.trim();if(vh.some(p=>p.test(u)))q.info("Non-response suppressed",{agentId:o,source:e.source.kind,text:u,costUsd:d.costUsd,durationMs:d.durationMs});else{let p={text:d.text||"_No response._",agentId:o,workItem:e,costUsd:d.costUsd,durationMs:d.durationMs,error:d.error};if(c)try{await c.deliver(p)}catch(m){q.warn("Agent response delivery failed, queuing for retry",{error:String(m)}),this.retryQueue?.enqueue(p,c)}l&&this.taskLedger.onComplete(p).catch(m=>q.warn("Task ledger complete failed",{error:String(m)})),this.auditAdapter&&e.source.kind!==this.auditAdapter.kind&&await this.postAuditLog(p),q.info("Work item dispatched",{agentId:o,source:e.source.kind,costUsd:d.costUsd,durationMs:d.durationMs,llmMs:d.llmMs,toolMs:d.toolMs,toolCalls:d.toolCalls,toolSummary:d.toolSummary})}}catch(d){let u={text:`Something went wrong: ${String(d)}`,agentId:o,workItem:e,costUsd:0,durationMs:0,error:String(d)};if(c)try{await c.deliver(u)}catch(h){q.warn("Error delivery failed, queuing for retry",{error:String(h)}),this.retryQueue?.enqueue(u,c)}q.error("Dispatch failed",{agentId:o,error:String(d)})}finally{await c?.onProcessingEnd?.(e,o)}}pruneDedup(){let e=Date.now()-r.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}]:(q.warn("Origin not routed",{origin:s,deviceId:e.meta?.deviceId,text:e.text.slice(0,50)}),[])}if(e.source.kind==="slack"&&e.source.label.startsWith("conf-"))return this.resolveConferenceAgents(e);let n=this.registry.findByChannel(e.source.label);if(n)return[{agentId:n.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()),q.info("Thread transitioned to multi-agent",{threadId:e.threadId,participants:[...p]}),[...p].map(m=>({agentId:m}))}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(m=>({agentId:m}))}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)?(q.info("DM routed to default agent",{agentId:this.defaultAgentId,channel:e.source.id}),[{agentId:this.defaultAgentId}]):(q.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 q.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}]:(q.warn("DM agent not found in registry",{channelId:t,members:s.members}),[])}let n=this.registry.findAllByName(e.text);if(n.length>0){let o=new Set(s.members),a=n.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]}]:(q.warn("No agent members in Team channel",{channelId:t}),[])}async dispatchToAgent(e,t){let{agentId:s}=t,n=e;if(t.conferenceMode){let l=[t.meetingPreamble,"",t.threadContext,"","---","[New message]:"].filter(Boolean).join(`
|
|
330
|
+
`);n={...e,text:`${l}
|
|
331
|
+
${e.text}`,meta:{...e.meta,conferenceMode:!0,conferenceHumanTs:t.conferenceHumanTs,conferenceRound:t.conferenceRound}}}let i=n.threadId??n.id;this.threadAgentLastSeen.set(i,Date.now());let o=this.taskLedger?.shouldTrack(n)??!1;o&&this.taskLedger.onDispatch(n,s).catch(l=>q.warn("Task ledger dispatch failed",{error:String(l)}));let a=this.adapters.get(n.source.adapterId??n.source.kind);try{let l=await this.agentManager.sendMessage(s,n),c=l.text.trim(),d=vh.some(u=>u.test(c));if(d)q.info("Non-response suppressed (fan-out)",{agentId:s});else{let u={text:l.text||"_No response._",agentId:s,workItem:n,costUsd:l.costUsd,durationMs:l.durationMs,error:l.error};if(a)try{await a.deliver(u)}catch{this.retryQueue?.enqueue(u,a)}t.conferenceMode&&t.conferenceRound===0&&!d&&this.triggerConferenceReactions(l.text,e,s,t.conferenceHumanTs).catch(h=>q.warn("Conference reaction trigger failed",{error:String(h)})),o&&this.taskLedger.onComplete(u).catch(h=>q.warn("Task ledger complete failed",{error:String(h)})),this.auditAdapter&&n.source.kind!==this.auditAdapter.kind&&await this.postAuditLog(u),q.info("Fan-out dispatch complete",{agentId:s,costUsd:l.costUsd,durationMs:l.durationMs})}}catch(l){let c={text:`Something went wrong: ${String(l)}`,agentId:s,workItem:n,costUsd:0,durationMs:0,error:String(l)};if(a)try{await a.deliver(c)}catch{this.retryQueue?.enqueue(c,a)}q.error("Fan-out dispatch failed",{agentId:s,error:String(l)})}}sweep(e){let t=Date.now()-e,s=0;for(let[n,i]of this.threadAgentLastSeen)i<t&&(this.threadAgentMap.delete(n),this.threadParticipants.delete(n),this.meetingRosters.delete(n),this.meetingReactionTracker.delete(n),this.threadAgentLastSeen.delete(n),s++);return{component:"dispatcher",pruned:s,retried:0,bytesFreed:0,errors:[]}}async resolveConferenceAgents(e){let t=e.threadId??e.id,s=this.meetingRosters.get(t)??new Set,n=this.registry.findAllByName(e.text);for(let d of n)s.add(d.id);if(this.meetingRosters.set(t,s),this.threadAgentLastSeen.set(t,Date.now()),s.size===0)return q.debug("Conference channel \u2014 no roster yet",{channel:e.source.label,threadId:t}),[];let i=[];for(let d of s){let u=this.registry.get(d);!u||u.disabled||i.push({agentId:u.id,name:u.name,title:u.title,role:u.soul.split(`
|
|
332
|
+
`)[0]})}if(i.length===0)return[];let o="",a="";if(this.slackAdapter){let d=e.source.id,u=e.meta?.slackThreadTs??e.meta?.slackTs??t,h=await this.slackAdapter.fetchThreadHistory(d,u);o=this.formatThreadContext(h,e.source.label,i),a=h.slice(-5).map(p=>`${p.author}: ${p.text.slice(0,200)}`).join(`
|
|
333
|
+
`)}let l=await Ca(e.text,i,a);q.info("Conference classifier result",{channel:e.source.label,threadId:t,roster:[...s],selected:l.respondAgentIds,costUsd:l.costUsd});let c=this.buildMeetingPreamble(e.source.label,i);return l.respondAgentIds.map(d=>({agentId:d,conferenceMode:!0,conferenceHumanTs:e.meta?.slackTs,conferenceRound:0,threadContext:o,meetingPreamble:c}))}formatThreadContext(e,t,s){if(e.length===0)return"";let n=s.map(l=>l.name).join(", "),i=`[Meeting thread in #${t} \u2014 participants: ${n}]`,o=e;if(e.length>105){let l=e.slice(0,5),c=e.slice(-100);o=[...l,...c]}let a=o.map(l=>{let c=this.formatTimeAgo(l.timestamp);return`${l.author} (${c}): ${l.text}`}).join(`
|
|
334
|
+
`);return`${i}
|
|
335
|
+
|
|
336
|
+
${a}`}formatTimeAgo(e){let t=Math.floor((Date.now()-e.getTime())/1e3);if(t<60)return`${t}s ago`;let s=Math.floor(t/60);return s<60?`${s} min ago`:`${Math.floor(s/60)}h ago`}buildMeetingPreamble(e,t){let s=t.map(n=>n.name).join(", ");return`You are in a meeting in #${e} with ${s}.
|
|
337
|
+
|
|
338
|
+
Meeting rules:
|
|
339
|
+
- Be concise \u2014 others are also responding.
|
|
340
|
+
- Build on what's been said. Don't repeat points already made.
|
|
341
|
+
- If you have nothing meaningful to add, respond with "No response needed."
|
|
342
|
+
- Stay in your lane \u2014 don't cover someone else's domain unless asked.
|
|
343
|
+
- Address others by name when responding to their points.`}async triggerConferenceReactions(e,t,s,n){let i=t.threadId??t.id,o=this.meetingRosters.get(i);if(!o)return;this.meetingReactionTracker.has(i)||this.meetingReactionTracker.set(i,new Map);let a=this.meetingReactionTracker.get(i),l=a.get(n)??new Set;a.set(n,l);let c=[];for(let f of o){if(f===s||l.has(f))continue;let y=this.registry.get(f);!y||y.disabled||(l.add(f),c.push({agentId:y.id,name:y.name,title:y.title,role:y.soul.split(`
|
|
344
|
+
`)[0]}))}if(c.length===0)return;let d=await Ca(e,c),u=new Set(d.respondAgentIds);for(let f of c)u.has(f.agentId)||l.delete(f.agentId);if(d.respondAgentIds.length===0)return;q.info("Conference depth-1 reactions",{threadId:i,respondingAgent:s,peers:d.respondAgentIds});let h="",p="";if(this.slackAdapter){let f=t.source.id,y=t.meta?.slackThreadTs??t.meta?.slackTs??i,w=await this.slackAdapter.fetchThreadHistory(f,y),S=[];for(let k of o){let I=this.registry.get(k);!I||I.disabled||S.push({agentId:I.id,name:I.name,title:I.title,role:I.soul.split(`
|
|
345
|
+
`)[0]})}h=this.formatThreadContext(w,t.source.label,S),p=this.buildMeetingPreamble(t.source.label,S)}let m=d.respondAgentIds.map(f=>{let y={agentId:f,conferenceMode:!0,conferenceHumanTs:n,conferenceRound:1,threadContext:h,meetingPreamble:p};return this.dispatchToAgent(t,y)});await Promise.all(m)}async postAuditLog(e){if(!this.auditAdapter||!this.auditChannelIds)return;let t=this.registry.get(e.agentId),s=t?.name??e.agentId,n=t?.homeBase,i=(n?this.auditChannelIds.get(n):void 0)??this.fallbackAuditChannelId;if(!i){q.warn("No audit channel resolved for agent",{agentId:e.agentId,homeBase:n});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
346
|
> ${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})}};
|
|
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}};
|
|
347
|
+
_($${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})}};x();function J0(r){let e=r;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 Th(r){return r?J0(r.trim()):"_No response._"}function Ih(r){return`Something went wrong: ${r}`}var _t=b("slack-adapter"),z0=[{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..."}],Or=class{id;kind="slack";gateway;registry;excludeChannels;defaultAgentId;botLabel;threadContextMap=new Map;threadContextLastSeen=new Map;constructor(e,t,s=[],n="slack",i,o){this.id=n,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)){_t.debug("Ignoring message from excluded channel",{channel:s.channelName});return}let n=this.registry.findByChannel(s.channelName);if(n&&n.slackBot&&n.slackBot!==this.botLabel){_t.debug("Ignoring message from other bot's channel",{channel:s.channelName,owner:n.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=>{_t.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,z0),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()),_t.info("Thread context updated",{threadTs:s.threadTs,channelId:s.context.channelId}))}),await this.gateway.start(),_t.info("Slack adapter started")}async deliver(e){let t=e.workItem.source.id,s=e.workItem.meta?.slackThreadTs??e.workItem.meta?.slackTs,n=this.registry.get(e.agentId),o=e.workItem.sender?.startsWith("B")||e.workItem.sender==="integration"?void 0:s,a=e.error?Ih(e.error):Th(e.text);n&&(a=`${n.icon?`${n.icon} `:""}*${n.name}*: ${a}`);let l=n?{name:n.name,icon:n.icon}:void 0;await this.gateway.postMessage(t,a,o,l)}async onProcessingStart(e,t){let s=e.sender?.startsWith("B")||e.sender==="integration",n=e.meta?.slackThreadTs??e.meta?.slackTs;!s&&n&&await this.gateway.setThreadStatus(e.source.id,n,"Thinking...")}async onProcessingEnd(e,t){let s=e.sender?.startsWith("B")||e.sender==="integration",n=e.meta?.slackThreadTs??e.meta?.slackTs;!s&&n&&await this.gateway.setThreadStatus(e.source.id,n,"")}sweep(e){let t=Date.now()-e,s=0;for(let[n,i]of this.threadContextLastSeen)i<t&&(this.threadContextMap.delete(n),this.threadContextLastSeen.delete(n),s++);return{component:`slack-adapter:${this.id}`,pruned:s,retried:0,bytesFreed:0,errors:[]}}async stop(){await this.gateway.stop(),_t.info("Slack adapter stopped")}get client(){return this.gateway.client}async fetchThreadHistory(e,t){try{let s=await this.gateway.client.conversations.replies({channel:e,ts:t,limit:200}),n=[],i=new Map;for(let o of s.messages??[]){if(!o.text&&!o.blocks)continue;let a="Unknown",l=!1,c=o;if(o.bot_id||c.subtype==="bot_message"){let d=o.text?.match(/^\S+\s\*([^*]+)\*:/);a=d?d[1]:c.username??"Agent",l=!0}else if(o.user){let d=i.get(o.user);if(d)a=d;else{try{let u=await this.gateway.client.users.info({user:o.user});a=u.user?.real_name??u.user?.name??o.user}catch{a=o.user}i.set(o.user,a)}}n.push({author:a,text:o.text??"",timestamp:new Date(parseFloat(o.ts??"0")*1e3),isBot:l})}return n}catch(s){return _t.warn("Failed to fetch thread history",{channelId:e,threadTs:t,error:String(s)}),[]}}};x();var qe=b("sms-adapter"),Ch="https://api.openphone.com/v1",Mr=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){qe.warn("SMS adapter has no lines to watch");return}this.poll(e),this.interval=setInterval(()=>this.poll(e),3e4),qe.info("SMS adapter started",{lines:this.lines.map(t=>t.label)})}async deliver(e){if(e.error){qe.warn("Skipping SMS delivery due to error",{error:e.error});return}let t=e.workItem.sender,s=e.workItem.source.id;try{let n=await fetch(`${Ch}/messages`,{method:"POST",headers:{Authorization:this.apiKey,"Content-Type":"application/json"},body:JSON.stringify({from:s,to:[t],content:e.text})});n.ok?qe.info("SMS reply sent",{to:t,from:s}):qe.error("Failed to send SMS reply",{status:n.status,body:await n.text(),to:t})}catch(n){qe.error("SMS delivery error",{error:String(n),to:t})}}async stop(){this.interval&&(clearInterval(this.interval),this.interval=null),qe.info("SMS adapter stopped")}async quoApi(e,t={}){let s=new URL(`${Ch}${e}`);for(let[i,o]of Object.entries(t))o&&s.searchParams.append(i,o);let n=await fetch(s.toString(),{headers:{Authorization:this.apiKey}});if(!n.ok)throw new Error(`Quo API ${n.status}: ${await n.text()}`);return n.json()}async poll(e){for(let t of this.lines)try{let n=(await this.quoApi("/conversations",{"phoneNumbers[]":t.id,updatedAfter:t.lastSeen,maxResults:"20"})).data??[];if(n.length===0)continue;for(let i of n){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}:
|
|
348
|
+
${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}};qe.info("SMS received",{from:c.from,line:t.label,textLength:c.text.length}),e(u)}}t.lastSeen=new Date().toISOString()}catch(s){qe.error("SMS poll failed",{line:t.label,error:String(s)})}}};x();import{execFileSync as ik}from"node:child_process";import{readFileSync as ok,writeFileSync as ak,existsSync as Eh,mkdirSync as ck}from"node:fs";import{resolve as Nh}from"node:path";import{MongoClient as lk}from"mongodb";x();import Q0 from"better-sqlite3";var Ah=b("imessage-db"),X0=978307200,Z0=43;function ek(r){let e=r/1e9+X0;return new Date(e*1e3)}function tk(r){try{let e=Buffer.from("NS.string"),t=r.indexOf(e);if(t===-1){let o=Buffer.from("NS.data");t=r.indexOf(o)}if(t===-1){let o=Buffer.from("streamtyped"),a=r.indexOf(o);return a===-1?null:sk(r,a+o.length)}for(t+=e.length;t<r.length&&r[t]<32&&r[t]!==10;)t++;let s=t,n=t;for(;n<r.length;){let o=r[n];if(o===0||o===6&&n>s+1)break;n++}if(n<=s)return null;let i=r.subarray(s,n).toString("utf-8").trim();return i.length>0?i:null}catch(e){return Ah.warn("Failed to extract text from attributedBody",{error:String(e)}),null}}function sk(r,e){let t=e,s=-1,n=0;for(;t<r.length-1;)if(nk(r[t])){let o=t,a=0;for(;t<r.length&&rk(r[t]);)a++,t++;a>n&&a>4&&(s=o,n=a)}else t++;if(s===-1)return null;let i=r.subarray(s,s+n).toString("utf-8").trim();return i.length>0?i:null}function nk(r){return r>=32&&r<=126||r>=192}function rk(r){return r>=32&&r<=126||r===10||r===13||r===9||r>=128}var Dr=class{db;constructor(e){let t=e??`${process.env.HOME}/Library/Messages/chat.db`;this.db=new Q0(t,{readonly:!0})}getNewMessages(e){let t=this.db.prepare(`
|
|
315
349
|
SELECT m.ROWID AS rowId, m.text, m.attributedBody, m.is_from_me AS isFromMe,
|
|
316
350
|
m.date, m.service, h.id AS sender, h.ROWID AS handleRowId
|
|
317
351
|
FROM message m
|
|
@@ -323,45 +357,45 @@ ${c.text}`,u={id:c.id,text:d,source:{kind:"sms",id:t.id,label:t.routeLabel},send
|
|
|
323
357
|
AND m.is_empty = 0
|
|
324
358
|
AND (c.style IS NULL OR c.style != ?)
|
|
325
359
|
ORDER BY m.ROWID ASC
|
|
326
|
-
`).all(e,
|
|
360
|
+
`).all(e,Z0),s=[];for(let n of t){let i=n.text;if(!i&&n.attributedBody&&(i=tk(n.attributedBody),!i)){Ah.warn("Could not extract text from attributedBody, skipping",{rowId:n.rowId});continue}i&&s.push({rowId:n.rowId,text:i,sender:n.sender,handleRowId:n.handleRowId,service:n.service,date:ek(n.date)})}return s}getMaxRowId(){return this.db.prepare("SELECT MAX(ROWID) AS maxId FROM message").get().maxId??0}close(){this.db.close()}};var ne=b("imessage-adapter"),Lr=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,n,i){this.config=e,this.mongoUri=t,this.dbName=s,this.gateway=n,this.stateFilePath=Nh(`/tmp/${i}-imessage-state.json`)}async start(e){this.mongo=new lk(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 n=((await this.gateway.client.conversations.list({types:"public_channel",limit:200})).channels??[]).find(i=>i.name===this.config.slackChannel);n?.id?(this.slackChannelId=n.id,ne.info("Slack mirror channel resolved",{channel:this.config.slackChannel,id:n.id})):ne.warn("Slack mirror channel not found",{channel:this.config.slackChannel})}catch(s){ne.warn("Failed to resolve Slack mirror channel",{error:String(s)})}try{this.db=new Dr}catch(s){ne.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(),ne.info("First run \u2014 initialized lastSeenRowId",{lastSeenRowId:this.lastSeenRowId})),this.interval=setInterval(()=>this.poll(e),this.config.hotIntervalMs),this.poll(e),ne.info("iMessage adapter started",{lastSeenRowId:this.lastSeenRowId,hotIntervalMs:this.config.hotIntervalMs,coldIntervalMs:this.config.coldIntervalMs})}async deliver(e){if(e.error){ne.warn("Skipping iMessage delivery due to error",{error:e.error});return}let t=e.workItem.sender;try{this.sendViaAppleScript(t,e.text),ne.info("iMessage reply sent",{to:t})}catch(s){ne.warn("iMessage send failed, retrying",{error:String(s),to:t});try{await dk(500),this.sendViaAppleScript(t,e.text),ne.info("iMessage reply sent on retry",{to:t})}catch(n){ne.error("iMessage delivery failed after retry",{error:String(n),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(),ne.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 n=this.db.getNewMessages(this.lastSeenRowId);if(n.length===0)return;for(let i of n){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}};ne.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(n){ne.error("iMessage poll failed",{error:String(n)})}}sendViaAppleScript(e,t){let s=t.replace(/\\/g,"\\\\").replace(/"/g,'\\"');ik("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,n){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){ne.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=n?s?`*${s}*: `:"*Agent*: ":`*${e}*: `;await this.gateway.postMessage(this.slackChannelId,`${a}${t}`,o)}catch(i){ne.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(Eh(this.stateFilePath)){let e=JSON.parse(ok(this.stateFilePath,"utf-8"));this.lastSeenRowId=e.lastSeenRowId??0,ne.info("Restored iMessage state",{lastSeenRowId:this.lastSeenRowId})}}catch(e){ne.warn("Failed to load iMessage state, starting fresh",{error:String(e)})}}saveState(){try{let e=Nh(this.stateFilePath,"..");Eh(e)||ck(e,{recursive:!0}),ak(this.stateFilePath,JSON.stringify({lastSeenRowId:this.lastSeenRowId}))}catch(e){ne.warn("Failed to save iMessage state",{error:String(e)})}}};function dk(r){return new Promise(e=>setTimeout(e,r))}x();var Gt=b("task-client"),Pr=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 n=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(!n.ok)throw new Error(`Task API ${n.status}: ${await n.text()}`);return n.json()}async createTask(e){try{let t=await this.api("POST","/tasks",e);return Gt.info("Task created",{taskId:t._id,name:e.name}),t}catch(t){return Gt.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),Gt.info("Task updated",{taskId:e,...t}),!0}catch(s){return Gt.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}),Gt.info("Comment added",{taskId:e}),!0}catch(s){return Gt.error("Failed to add comment",{error:String(s),taskId:e}),!1}}};x();var Gs=b("task-ledger"),$r=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 n=e.threadId??e.id,i=this.threadTaskMap.get(n);if(i){this.threadTaskLastSeen.set(n,Date.now()),await this.addComment(i,s,this.formatIncomingComment(e));return}let o=await this.createTask(s,e);o&&(this.threadTaskMap.set(n,o),this.threadTaskLastSeen.set(n,Date.now()))}async onComplete(e){let t=this.getApiKey(e.agentId);if(!t)return;let s=e.workItem.threadId??e.workItem.id,n=this.threadTaskMap.get(s);if(n&&this.threadTaskLastSeen.set(s,Date.now()),!n)return;let i=this.formatCompletionComment(e);await this.addComment(n,t,i),e.error||await this.updateTask(n,t,{state:"DONE"})}sweep(e){let t=Date.now()-e,s=0;for(let[n,i]of this.threadTaskLastSeen)i<t&&(this.threadTaskMap.delete(n),this.threadTaskLastSeen.delete(n),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(n){Gs.error("Failed to add comment",{error:String(n),taskId:e})}}async updateTask(e,t,s){try{await this.api("PUT",`/tasks/${e}`,t,s)}catch(n){Gs.error("Failed to update task",{error:String(n),taskId:e})}}async api(e,t,s,n){let i=await fetch(`${this.apiUrl}/api/v1${t}`,{method:e,headers:{"x-api-key":s,...n?{"Content-Type":"application/json"}:{}},...n?{body:JSON.stringify(n)}:{}});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 n=t.match(/Command: `(.+?)`/);if(n)return`[Background] ${n[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,n=e.text.length>s?e.text.slice(0,s)+`
|
|
327
361
|
|
|
328
|
-
... (truncated)`:e.text;return t.push("","---","",
|
|
362
|
+
... (truncated)`:e.text;return t.push("","---","",n),t.join(`
|
|
329
363
|
`)}formatIncomingComment(e){return`**Follow-up message** (${e.source.kind})
|
|
330
364
|
|
|
331
365
|
${e.text.slice(0,5e3)}`}formatCompletionComment(e){let t=[`**Agent response** ($${e.costUsd.toFixed(3)} \xB7 ${(e.durationMs/1e3).toFixed(1)}s)`];e.error&&t.push(`
|
|
332
|
-
**Error:** ${e.error}`);let s=5e3,
|
|
366
|
+
**Error:** ${e.error}`);let s=5e3,n=e.text.length>s?e.text.slice(0,s)+`
|
|
333
367
|
|
|
334
|
-
... (truncated)`:e.text;return t.push("",
|
|
335
|
-
`)}};
|
|
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:
|
|
368
|
+
... (truncated)`:e.text;return t.push("",n),t.join(`
|
|
369
|
+
`)}};x();import{createServer as uk}from"node:http";import{spawn as hk}from"node:child_process";import{mkdir as fk,readFile as xh,writeFile as pk,readdir as mk,stat as gk,unlink as yk}from"node:fs/promises";import{openSync as wk,closeSync as Sk}from"node:fs";import{randomUUID as kk}from"node:crypto";var ge=b("bg-task-manager"),Aa=100,bk=5e3,Rr=class{port;authToken;tasksDir;tasks=new Map;onComplete;server=null;orphanPollers=new Map;constructor(e,t,s,n){this.port=e,this.authToken=t,this.tasksDir=s,this.onComplete=n}async start(){await fk(this.tasksDir,{recursive:!0}),this.server=uk((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 mk(this.tasksDir)}catch{return}let t=e.filter(i=>i.endsWith(".json")),s=0,n=0;for(let i of t)try{let o=await xh(`${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),n++):(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||n>0)&&ge.info("Orphan scan complete",{orphaned:s,recovered:n,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(bk);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=kk(),s=`${this.tasksDir}/${t}.log`,n=`${this.tasksDir}/${t}.json`,i=e.cwd??process.env.HOME??"/tmp",o=wk(s,"a"),a=hk(e.command,e.args??[],{cwd:i,detached:!0,stdio:["ignore",o,o]});Sk(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:n,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(),n=(((e.completedAt?new Date(e.completedAt).getTime():Date.now())-t)/1e3).toFixed(1);this.tailLog(e.logPath,Aa).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: ${n}s`,`Output (last ${Aa} lines):`,"```",i||"(no output)","```"].join(`
|
|
370
|
+
`),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:n,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,Aa);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 pk(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 xh(e,"utf-8")).split(`
|
|
337
371
|
`).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
|
|
372
|
+
`).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 n=this.tasks.get(e);n&&n.status==="running"&&(n.status="orphaned",n.completedAt=new Date().toISOString(),this.writeMeta(n).then(()=>this.fireCompletion(n)))}},5e3);this.orphanPollers.set(e,s)}async sweep(e){let t=Date.now()-e,s=0,n=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 gk(c);n+=d.size,await yk(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:n,errors:i}}readBody(e){return new Promise((t,s)=>{let n="";e.on("data",i=>{n+=i.toString()}),e.on("end",()=>t(n)),e.on("error",s)})}};x();import{createServer as Ik}from"node:http";import{spawn as Ck}from"node:child_process";import{mkdir as Ak,readFile as Br,writeFile as Ek,readdir as Nk,stat as xk,unlink as Ok,open as Mk}from"node:fs/promises";import{openSync as Lh,closeSync as Ph}from"node:fs";import{randomUUID as Dk}from"node:crypto";function Oh(r){let e=r.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 _k=/\*{0,2}Status:?\*{0,2}\s+(NEEDS_CONTEXT|BLOCKED)/i,vk=/\*{0,2}Question:?\*{0,2}\s+(.+?)(?:\n\n|\n\*{0,2}(?:Context|Status|Files|What)|$)/is,Tk=/\*{0,2}Context:?\*{0,2}\s+(.+?)(?:\n\n\*{0,2}(?:Status|Question|Files|To respond)|$)/is;function Mh(r){if(!r)return null;let e=_k.exec(r);if(!e)return null;let t=e[1].toUpperCase(),n=vk.exec(r)?.[1]?.trim()??"",o=Tk.exec(r)?.[1]?.trim()??"";return{status:t,question:n,context:o}}function Dh(r,e,t){return t||e?.subtype==="error_max_turns"||e?.subtype==="error_max_budget_usd"?"needs_input":r===0&&e?.subtype==="success"||r===0&&!e?"completed":"failed"}var ee=b("code-task-manager"),Vs=2e3,Ea=100,$h=5e3,Ur=class{port;authToken;pluginDirs;maxConcurrent;tasksDir;cliBin;options;tasks=new Map;onComplete;server=null;orphanPollers=new Map;reapTimers=new Set;constructor(e,t,s,n,i,o,a){this.port=e,this.authToken=t,this.pluginDirs=s,this.maxConcurrent=n,this.tasksDir=i,this.onComplete=o,this.options=a??{},this.cliBin=this.options.cliBin??"claude"}async start(){await Ak(this.tasksDir,{recursive:!0}),this.server=Ik((e,t)=>{this.handleRequest(e,t).catch(s=>{ee.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())}),ee.info("Code task manager started",{port:this.port})}async scanOrphans(){let e;try{e=await Nk(this.tasksDir)}catch{return}let t=e.filter(i=>i.endsWith(".meta.json")),s=0,n=0;for(let i of t)try{let o=await Br(`${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),n++):(a.status="orphaned",a.completedAt=new Date().toISOString(),await this.writeMeta(a),this.fireCompletion(a),s++))}catch(o){ee.warn("Failed to read orphan task file",{file:i,error:String(o)})}(s>0||n>0)&&ee.info("Orphan scan complete",{orphaned:s,recovered:n,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){ee.info("Sending SIGTERM to running code tasks",{count:e.length});for(let t of e)this.killProcess(t.pid,"SIGTERM");await this.sleep($h);for(let t of e)t.pid&&this.isProcessAlive(t.pid)&&(ee.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),ee.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(),n=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)){ee.info("Stale code task spared \u2014 stderr still active",{id:o.id,pid:o.pid,ageHours:(a/36e5).toFixed(1)}),i++;continue}ee.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)&&(ee.warn("Stale code task did not exit after SIGTERM, sending SIGKILL",{id:o.id,pid:o.pid}),this.killProcess(o.pid,"SIGKILL"))},$h);this.reapTimers.add(c),n++}return(n>0||i>0)&&ee.info("Stale reap complete",{reaped:n,spared:i}),{reaped:n,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=Dk(),n=`${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
373
|
|
|
340
374
|
---
|
|
341
375
|
|
|
342
|
-
`+e.prompt)}catch(S){
|
|
376
|
+
`+e.prompt)}catch(S){ee.warn(`Prefetch failed for task, proceeding without context: ${S}`)}let h=e.sessionId?u:u+`
|
|
343
377
|
|
|
344
378
|
---
|
|
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}),
|
|
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 ${
|
|
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 ${
|
|
348
|
-
`)}let a="";try{a=(await
|
|
349
|
-
`).slice(-
|
|
350
|
-
`).trim()}catch{a="(no stderr output)"}let l=t?.result?t.result.slice(-
|
|
379
|
+
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}),m=Lh(n,"w"),f=Lh(i,"w"),y=Ck(this.cliBin,p,{cwd:a,detached:!0,stdio:["ignore",m,f],env:process.env});y.on("exit",S=>this.handleExit(s,S)),y.on("error",S=>{ee.error("Code task process error",{id:s,error:String(S)}),this.handleExit(s,1)}),Ph(m),Ph(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:n,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),ee.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 n=this.tasks.get(e);if(!n)throw new Error(`Task ${e} not found`);if(n.status!=="needs_input")throw new Error(`Task ${e} is ${n.status}, not needs_input`);if(!n.sessionId)throw new Error(`Task ${e} has no session ID for resume`);return n.status="running",this.spawnTask({prompt:t,cwd:n.cwd,model:n.model,maxTurns:n.maxTurns,maxBudget:n.maxBudget,sessionId:n.sessionId,context:s??n.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 n=null;try{let o=await Br(s.stdoutPath,"utf-8");n=Oh(o)}catch{}n&&(s.sessionId=n.sessionId,s.costUsd=n.costUsd,s.numTurns=n.numTurns);let i=n?Mh(n.result):null;s.escalation=i,s.status=Dh(s.exitCode,n,i),await this.writeMeta(s),this.fireCompletion(s,n)}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(`
|
|
380
|
+
`)}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 ${Vs} chars):`,"```",(t.result||"(no output)").slice(-Vs),"```"].join(`
|
|
381
|
+
`)}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 ${Vs} chars):`,"```",c.slice(-Vs),"```"].join(`
|
|
382
|
+
`)}let a="";try{a=(await Br(e.stderrPath,"utf-8")).split(`
|
|
383
|
+
`).slice(-Ea).join(`
|
|
384
|
+
`).trim()}catch{a="(no stderr output)"}let l=t?.result?t.result.slice(-Vs):"";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
385
|
\`\`\`
|
|
352
386
|
${l}
|
|
353
387
|
\`\`\`
|
|
354
|
-
`:"",`Stderr (last ${
|
|
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}};
|
|
356
|
-
`).slice(-
|
|
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,
|
|
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}};
|
|
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}};
|
|
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(`
|
|
388
|
+
`:"",`Stderr (last ${Ea} lines):`,"```",a||"(empty)","```"].filter(Boolean).join(`
|
|
389
|
+
`)})().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}};ee.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&&ee.info(`Extracted ${c} code insights from task ${e.id}`)}).catch(c=>{ee.warn(`Knowledge extraction failed for task ${e.id}: ${c}`)})}).catch(a=>{ee.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 Br(t.stderrPath,"utf-8")).split(`
|
|
390
|
+
`).slice(-Ea).join(`
|
|
391
|
+
`).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,n=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 xk(c);n+=d.size,await Ok(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:n,errors:i}}async writeMeta(e){try{await Ek(e.metaPath,JSON.stringify(e,null,2),"utf-8")}catch(t){ee.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 n=this.tasks.get(e);n&&n.status==="running"&&(n.status="orphaned",n.completedAt=new Date().toISOString(),this.writeMeta(n).then(()=>this.fireCompletion(n)))}},5e3);this.orphanPollers.set(e,s)}killProcess(e,t){try{process.kill(e,t)}catch(s){s.code!=="ESRCH"&&ee.warn("Failed to send signal to process",{pid:e,signal:t,error:String(s)})}}async isFileRecentlyModified(e,t){try{let s=await Mk(e,"r"),n=await s.stat();return await s.close(),Date.now()-n.mtimeMs<t}catch{return!1}}sleep(e){return new Promise(t=>setTimeout(t,e))}readBody(e){return new Promise((t,s)=>{let n="";e.on("data",i=>{n+=i.toString()}),e.on("end",()=>t(n)),e.on("error",s)})}};x();import{createServer as Lk}from"node:http";import{randomUUID as Pk}from"node:crypto";var ie=b("meeting-monitor"),$k=1e4,Rk=15e3,Bk=2,Uk=new Set(["done","fatal","call_ended","media_expired","recording_permission_denied"]),qr=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=Lk((e,t)=>{this.handleRequest(e,t).catch(s=>{ie.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())}),ie.info("Meeting monitor started",{port:this.port}),this.webhookSecret||ie.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),ie.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 n=s.pathname.match(/^\/meetings\/([a-f0-9-]+)\/stop$/);if(e.method==="POST"&&n){let i=n[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,n=t.data?.bot?.id;if(!n){ie.warn("Webhook missing bot ID",{event:s});return}let i=this.sessionsByBotId.get(n);if(!i){ie.warn("Webhook for unknown bot",{botId:n,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++),ie.debug("Webhook transcript",{sessionId:i,botId:n,event:s,speaker:c,wordCount:d.split(" ").length})}catch(t){ie.error("Webhook parse error",{error:String(t)})}}createSession(e){let t=Pk(),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(n=>{ie.error("Poll session error",{sessionId:t,botId:s.botId,error:String(n)})})},$k),ie.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>=Rk&&s||t.idlePollCount>=Bk&&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){ie.warn("Bot status check failed",{sessionId:e.id,botId:e.botId,status:s.status});return}let n=await s.json(),i=n.status_changes;if(Array.isArray(i)&&i.length>0){let o=i[i.length-1].code;if(Uk.has(o)){ie.info("Meeting reached terminal status",{sessionId:e.id,botId:e.botId,statusCode:o});let a=await this.fetchFullTranscript(e,n);this.dispatchEnd(e,a);return}}}catch(t){ie.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 ie.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 ie.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 ie.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 n of e.activePartials.values())t.push({speaker:n.speaker,text:`${n.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(n=>`[${n.speaker}]: ${n.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(`
|
|
392
|
+
`),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}};ie.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(n=>`[${n.speaker}]: ${n.text}`),"","---","Meeting has ended. Produce a summary: key decisions made, action items with owners, and open questions."].join(`
|
|
393
|
+
`),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}};ie.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[n,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(n),s++));return{component:"meeting-monitor",pruned:s,retried:0,bytesFreed:0,errors:[]}}readBody(e){return new Promise((t,s)=>{let n="";e.on("data",i=>{n+=i.toString()}),e.on("end",()=>t(n)),e.on("error",s)})}};x();var jr=b("retry-queue"),Fr=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()}),jr.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 n of this.entries){if(n.nextRetryAt>e){s.push(n),t.pending++;continue}n.attempts++;try{await n.adapter.deliver(n.result),t.retried++,jr.info("Retry delivery succeeded",{agentId:n.result.agentId,adapterId:n.adapter.id,attempt:n.attempts})}catch(i){if(n.attempts>=this.config.maxAttempts){t.dropped++;let o=`Dropped after ${n.attempts} attempts: ${String(i)}`;t.errors.push(o),jr.error("Retry delivery exhausted",{agentId:n.result.agentId,adapterId:n.adapter.id,attempts:n.attempts,error:String(i)})}else n.nextRetryAt=e+this.config.baseDelayMs*Math.pow(2,n.attempts),s.push(n),t.pending++,jr.warn("Retry delivery failed, will retry",{agentId:n.result.agentId,adapterId:n.adapter.id,attempt:n.attempts,nextRetryAt:new Date(n.nextRetryAt).toISOString(),error:String(i)})}}return this.entries=s,t}get size(){return this.entries.length}};x();var je=b("sweeper"),Kr=class r{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 n=e.memorySweepIntervalHours??6;this.memorySweepEvery=Math.round(n*36e5/e.intervalMs)}start(){this.timer||(this.timer=setInterval(()=>{this.sweep().catch(e=>{je.error("Sweep cycle failed",{error:String(e)})})},this.config.intervalMs),je.info("Sweeper started",{intervalMs:this.config.intervalMs}))}stop(){this.timer&&(clearInterval(this.timer),this.timer=null),je.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>=r.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,m=this.memoryCycleCounter===0,f=!1;if(p&&!m){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&&(m||f)){let y=m?"post-sweep":"idle";je.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,n=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=n===0&&i===0&&o===0&&a.length===0;return(l?je.debug.bind(je):je.info.bind(je))("Sweep cycle complete",{cycle:this.sweepCount,durationMs:s,pruned:n,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,n,i,o,a),t}async reportToTaskLedger(e,t,s,n,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(n)}`,i.length>0?`Errors: ${i.join(", ")}`:null].filter(Boolean).join(`
|
|
394
|
+
`);await this.taskClient.addComment(this.taskId,o),i.length>0&&await this.taskClient.updateTask(this.taskId,{state:"NEEDS_ATTENTION"})}catch(o){je.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]}`}};Fs();x();import{MongoClient as qk}from"mongodb";var jk=b("memory-store"),Hr=class{mongoUri;dbName;client;db;collection;constructor(e,t){this.mongoUri=e,this.dbName=t,this.client=new qk(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}),jk.info("Memory store initialized",{db:this.dbName})}getCollection(){return this.collection}async save(e,t,s,n,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:n,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,n){let i={content:t,updatedAt:new Date};return s&&(i.importance=s),n&&(i.qdrantPointId=n),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((n,i)=>{if(n.pinned!==i.pinned)return n.pinned?-1:1;let o=(t[i.importance]??0)-(t[n.importance]??0);return o!==0?o:i.updatedAt.getTime()-n.updatedAt.getTime()})}async getHotTierWithStats(e){let t=await this.getHotTier(e),s=Date.now();return t.map(n=>({...n,ageDays:Math.floor((s-n.createdAt.getTime())/(1e3*60*60*24)),daysSinceAccess:Math.floor((s-n.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 n of t){let i=s.get(n.topic)??[];i.push(n),s.set(n.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 n of t){let i=s.get(n.topic)??[];i.push(n),s.set(n.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 n={agentId:e,pinned:!1,purged:{$ne:!0}};return t.topic!==void 0&&(n.topic=t.topic),t.type!==void 0&&(n.type=t.type),t.importance!==void 0&&(n.importance=t.importance),t.tier!==void 0&&(n.tier=t.tier),t.olderThan!==void 0&&(n.updatedAt={$lt:t.olderThan}),(await this.collection.updateMany(n,{$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 n=s.map(i=>i._id);return await this.collection.deleteMany({_id:{$in:n}}),s}async getAgentIds(){return this.collection.distinct("agentId")}async close(){await this.client.close()}};x();wr();import{QdrantClient as Fk}from"@qdrant/js-client-rest";var Kk=b("memory-embedder"),vt="agent_memory",Wr=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 Fk({url:this.qdrantUrl})),this.qdrant}async embed(e){return Ue(this.ollamaUrl,e)}async ensureCollection(){if(this.collectionReady)return;let e=this.getClient(),{collections:t}=await e.getCollections();if(!t.some(n=>n.name===vt)){let n=await this.embed("test");await e.createCollection(vt,{vectors:{size:n.length,distance:"Cosine"}}),Kk.info("Created Qdrant collection",{collection:vt,vectorSize:n.length})}this.collectionReady=!0}async upsert(e,t,s){await this.ensureCollection();let n=await this.embed(t);await this.getClient().upsert(vt,{points:[{id:e,vector:n,payload:s}]})}async remove(e){await this.ensureCollection(),await this.getClient().delete(vt,{points:[e]})}async search(e,t,s){await this.ensureCollection();let n=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(vt,{vector:n,limit:i,with_payload:!0,filter:{must:o}})).map(l=>({mongoId:l.payload?.mongoId,score:l.score}))}async findSimilar(e,t,s,n=10){return await this.ensureCollection(),(await this.getClient().query(vt,{query:{recommend:{positive:[e]}},filter:{must:[{key:"agentId",match:{value:t}}]},limit:n,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)}))}};x();import{ObjectId as Hk}from"mongodb";import{query as Gr}from"@anthropic-ai/claude-agent-sdk";var Rh={critical:1,high:.75,medium:.5,low:.25},Bh={decision:1,fact:.8,preference:.8,summary:.6,task:.5,interaction:.3};var Oe=b("memory-lifecycle"),Vr=class{store;embedder;config;dreamConfig;constructor(e,t,s,n){this.store=e,this.embedder=t,this.config=s,this.dreamConfig=n}computeScore(e,t){let s=Rh[e.importance]??.5,n=Bh[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+n*.1}estimateTokens(e){return Math.ceil(e.length/4)}async sweep(){let e=Date.now(),t=0,s=0,n=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,n+=u.summarized,i+=u.cleaned,o+=u.purged}catch(u){a.push(`${d}: ${u}`),Oe.error("Memory lifecycle sweep failed for agent",{agentId:d,error:String(u)})}}catch(c){a.push(`global: ${c}`)}return t+s+n+i+o>0&&Oe.info("Memory lifecycle sweep complete",{durationMs:Date.now()-e,promoted:t,demoted:s,summarized:n,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,n=await this.store.getAllNonPinned(e),i=0,o=0;if(n.length>0){let d=n.map(w=>w.accessCount).sort((w,S)=>w-S),u=d[Math.floor(d.length/2)]??0,h=n.map(w=>({record:w,score:this.computeScore(w,u)})),p=[];for(let{record:w,score:S}of h){let k;S>=this.config.hotThreshold?k="hot":S>=this.config.warmThreshold?k="warm":k="cold",k!==w.tier&&(p.push({id:w._id,newTier:k}),k==="hot"&&w.tier!=="hot"&&t++,k!=="hot"&&w.tier==="hot"&&s++)}for(let w of["hot","warm","cold"]){let S=p.filter(k=>k.newTier===w).map(k=>k.id);await this.store.setTierBulk(S,w)}let m=await this.store.getHotTier(e),f=0,y=[];for(let w of m){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){Oe.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);Oe.info("Hard-deleted purged records",{agentId:e,count:d.length})}}catch(d){Oe.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,n=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);n+=h.promoted}catch(d){o.push(`${c}: ${d}`),Oe.error("autoDream failed for agent",{agentId:c,error:String(d)})}}catch(l){o.push(`global: ${l}`)}return t+s+n+i>0&&Oe.info("autoDream complete",{durationMs:Date.now()-e,merged:t,contradictions:s,promoted:n,flaggedForReview:i,errors:o.length}),{merged:t,contradictions:s,promoted:n,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 n=new Set,i=0,o=0;for(let a of s){if(o>=t.maxClustersPerRun)break;if(n.has(a.qdrantPointId))continue;let c=(await this.embedder.findSimilar(a.qdrantPointId,e,t.similarityThreshold,10)).filter(v=>!n.has(v.pointId));if(c.length===0)continue;n.add(a.qdrantPointId);for(let v of c)n.add(v.pointId);let d=c.map(v=>new Hk(v.mongoId)),u=await this.store.getByIds(d),h=[a,...u],m=["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
395
|
`)].join(`
|
|
362
|
-
`),f=
|
|
363
|
-
`),f=
|
|
396
|
+
`),f=Gr({prompt:m,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 N=v;if(N.type==="result"){let D=N;D.subtype==="success"&&D.result&&(y=D.result)}}if(!y)continue;let w=this.highestImportance(h),S=crypto.randomUUID(),k=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:k._id.toString(),type:a.type,topic:a.topic,tier:"hot",importance:w,createdAt:Math.floor(Date.now()/1e3)});let I=h.map(v=>v._id);await this.store.markSuperseded(I,k._id),i+=h.length,o++}return i>0&&Oe.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(n=>n.importance===s))return s;return"medium"}async detectContradictions(e){let t=this.dreamConfig,s=await this.store.getFactsAndDecisionsByTopic(e),n=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],m=["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(`
|
|
397
|
+
`),f=Gr({prompt:m,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 k=S;k.subtype==="success"&&k.result&&(y=k.result.trim().toUpperCase())}}o++,y.includes("A_WINS")?(await this.store.markSuperseded([p._id],h._id),a.add(p._id.toString()),n++):y.includes("B_WINS")?(await this.store.markSuperseded([h._id],p._id),a.add(h._id.toString()),n++):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(n>0||i>0)&&Oe.info("autoDream: contradictions processed",{agentId:e,resolved:n,flagged:i,pairsChecked:o}),{resolved:n,flagged:i}}async promotePatterns(e){let t=this.dreamConfig,s=await this.store.getInteractionsByTopic(e),n=0;for(let[i,o]of s){if(n>=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
398
|
`),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=
|
|
366
|
-
`),a=[`Summarize the following memory entries for agent ${e} about topic "${
|
|
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??z.icon,channels:s.channels??[],passiveChannels:s.passiveChannels??z.passiveChannels,keywords:s.keywords??z.keywords,isDefault:s.isDefault??!1,coreServers:s.coreServers??[],delegateServers:s.delegateServers??[],delegatePrompts:s.delegatePrompts??z.delegatePrompts,plugins:s.plugins,metadata:s.metadata,soul:s.soul??"",systemPrompt:s.systemPrompt??"",schedule:s.schedule??z.schedule,subscribe:s.subscribe,budgetUsd:s.budgetUsd??z.budgetUsd,maxTurns:s.maxTurns??z.maxTurns,maxConcurrent:s.maxConcurrent??z.maxConcurrent,timeoutMs:s.timeoutMs??z.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 Q=new Nr(m.quo.apiKey,m.sms.lines);b.registerAdapter(Q),m.quo.apiKey&&m.sms.lines.length>0&&(await Q.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 Q.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)});
|
|
399
|
+
`),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 k=S;k.subtype==="success"&&k.result&&(p=k.result)}}if(!p)continue;let m=crypto.randomUUID(),f=await this.store.save(e,{content:p,type:"fact",topic:i,importance:"medium"},m);await this.embedder.upsert(m,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),n++}return n>0&&Oe.info("autoDream: patterns promoted",{agentId:e,promoted:n}),{promoted:n}}async summarizeCold(e){let t=await this.store.getColdTopics(e),s=0;for(let n of t){let i=await this.store.getColdByTopic(e,n);if(i.length<this.config.coldSummaryMinRecords)continue;let o=i.map(h=>`- [${h.type}/${h.importance}] ${h.content}`).join(`
|
|
400
|
+
`),a=[`Summarize the following memory entries for agent ${e} about topic "${n}".`,"Preserve key facts, decisions, and outcomes. Discard routine interactions.","Be concise \u2014 aim for 2-5 sentences.","",o].join(`
|
|
401
|
+
`),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 m=p;m.subtype==="success"&&m.result&&(c=m.result)}}if(!c)continue;let d=crypto.randomUUID(),u=await this.store.save(e,{content:c,type:"summary",topic:n,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:n,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}};x();import{createServer as Wk}from"node:http";var Uh=b("admin-api"),Yr=class{server;port;token;agentDefs;agentVersions;onReload;constructor(e,t,s,n,i){this.port=e,this.token=t,this.agentDefs=s,this.agentVersions=n,this.onReload=i,this.server=Wk((o,a)=>this.handleRequest(o,a))}async start(){return new Promise(e=>{this.server.listen(this.port,()=>{Uh.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 n=new URL(e.url??"/",`http://localhost:${this.port}`),i=n.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(n.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){Uh.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 n=[];e.on("data",i=>n.push(i)),e.on("end",()=>{try{t(JSON.parse(Buffer.concat(n).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??X.icon,channels:s.channels??[],passiveChannels:s.passiveChannels??X.passiveChannels,keywords:s.keywords??X.keywords,isDefault:s.isDefault??!1,coreServers:s.coreServers??[],delegateServers:s.delegateServers??[],delegatePrompts:s.delegatePrompts??X.delegatePrompts,plugins:s.plugins,metadata:s.metadata,soul:s.soul??"",systemPrompt:s.systemPrompt??"",schedule:s.schedule??X.schedule,subscribe:s.subscribe,budgetUsd:s.budgetUsd??X.budgetUsd,maxTurns:s.maxTurns??X.maxTurns,maxConcurrent:s.maxConcurrent??X.maxConcurrent,timeoutMs:s.timeoutMs??X.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 n=await this.readBody(t);if(!await this.agentDefs.findOne({_id:e}))return this.json(s,404,{error:"Agent not found"});delete n._id,delete n.createdAt;let o=Object.keys(n);await this.saveVersion(e,o),await this.agentDefs.updateOne({_id:e},{$set:{...n,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 n=await this.agentVersions.find({agentId:e}).sort({createdAt:-1}).limit(t).toArray();this.json(s,200,n)}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"})}};x();var Tt=b("activity-logger"),Jr=class{db;collection;buffer=[];flushTimer=null;config;connected=!1;constructor(e,t){this.db=e,this.config=t}async connect(){if(!this.config.enabled){Tt.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=>Tt.warn("Periodic flush failed",{error:String(t)}))},this.config.flushIntervalMs);let e=await this.collection.estimatedDocumentCount();Tt.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=>Tt.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){Tt.warn("Bulk write failed, retrying once",{count:e.length,error:String(t)});try{await this.collection.insertMany(e,{ordered:!1})}catch(s){Tt.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&&(Tt.info("Draining activity buffer on shutdown",{count:this.buffer.length}),await this.flush()),this.connected=!1}};x();var qh={id:"001-backfill-home-base",async run(r,e){let t=r.collection("agent_definitions"),s=t.find({homeBase:{$exists:!1}}),n=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}}),n++}e.info("Backfill complete",{migration:"001-backfill-home-base",updated:n,skipped:i})}};var zr=b("migrations"),Gk=[qh];async function jh(r,e=Gk){let t=r.collection("migrations");for(let s of e){if(await t.findOne({_id:s.id})){zr.debug("Migration already applied, skipping",{id:s.id});continue}zr.info("Running migration",{id:s.id}),await s.run(r,zr),await t.insertOne({_id:s.id,ranAt:new Date}),zr.info("Migration applied",{id:s.id})}}x();var It=b("first-boot"),Fh="hive/first-boot-greeting-sent",Kh="chief-of-staff";async function Hh(r,e,t,s){let n;try{n=await r.read(Fh)}catch(d){It.warn("First-boot flag read failed \u2014 skipping check this startup",{error:String(d)});return}if(n){It.debug("First-boot greeting already sent \u2014 skipping");return}let i=e.get(Kh),o=i?.homeBase??i?.channels?.[0];if(!o){It.warn("First-boot: CoS agent has no homeBase or channels \u2014 skipping, will retry next startup");return}let a=s.get(o);if(!a){It.warn("First-boot: could not resolve channel ID for CoS home channel",{channelName:o});return}try{await r.write(Fh,"true","system")}catch(d){It.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:Kh,systemTrigger:"first-boot"}};It.info("First-boot: dispatching CoS greeting",{channel:o,channelId:a}),t.dispatch(c).catch(d=>{It.error("First-boot greeting dispatch failed",{error:String(d)})})}x();import{createServer as Vk}from"node:http";var Na=b("slack-internal-api"),Qr=class{port;authToken;gateway;agentManager;server=null;constructor(e){this.port=e.port,this.authToken=e.authToken,this.gateway=e.gateway,this.agentManager=e.agentManager}async start(){this.server=Vk((e,t)=>{this.handleRequest(e,t).catch(s=>{Na.error("HTTP handler error",{error:String(s)}),t.writeHead(500,{"Content-Type":"application/json"}),t.end(JSON.stringify({ok:!1,error:"Internal server error"}))})}),await new Promise(e=>{this.server.listen(this.port,"127.0.0.1",()=>e())}),Na.info("Slack internal API started",{port:this.port})}async stop(){this.server&&(this.server.close(),this.server=null),Na.info("Slack internal API stopped")}async handleRequest(e,t){if(e.method!=="POST"){t.writeHead(405,{"Content-Type":"application/json"}),t.end(JSON.stringify({ok:!1,error:"method not allowed"}));return}if(e.headers.authorization!==`Bearer ${this.authToken}`){t.writeHead(401,{"Content-Type":"application/json"}),t.end(JSON.stringify({ok:!1,error:"unauthorized"}));return}let n=new URL(e.url??"/",`http://127.0.0.1:${this.port}`),i=await this.readBody(e),o;try{o=JSON.parse(i)}catch{t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({ok:!1,error:"invalid JSON body"}));return}switch(n.pathname){case"/internal/slack/send":return this.handleSend(o,t);case"/internal/slack/read":return this.handleRead(o,t);case"/internal/slack/channels":return this.handleChannels(o,t);case"/internal/slack/users":return this.handleUsers(o,t);case"/internal/slack/search":t.writeHead(501,{"Content-Type":"application/json"}),t.end(JSON.stringify({ok:!1,error:"search deferred pending tool-parity audit"}));return;default:t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({ok:!1,error:"not found"}))}}async handleSend(e,t){let{agent_id:s,channel:n,text:i,thread_ts:o,blocks:a,force_root:l}=e;if(typeof n!="string"||!n){t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({ok:!1,error:"channel is required"}));return}if(typeof i!="string"||!i){t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({ok:!1,error:"text is required"}));return}let c=await this.gateway.resolveChannelId(n);if(!c){t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({ok:!1,error:`unknown channel: ${n}`}));return}let d=o;if(!d&&!l&&typeof s=="string"&&s){let m=this.agentManager.getActiveWorkItems(s).filter(f=>f.source.id===c);if(m.length>0){let f=m[m.length-1];d=f.meta?.slackThreadTs??f.meta?.slackTs}}let u=await this.gateway.postAndRegister(c,i,d),h=u.ok?{ok:!0,ts:u.ts,channel:c}:{ok:!1,error:u.error};t.writeHead(u.ok?200:500,{"Content-Type":"application/json"}),t.end(JSON.stringify(h))}async handleRead(e,t){let{channel:s,limit:n}=e;if(typeof s!="string"||!s){t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({ok:!1,error:"channel is required"}));return}let i=await this.gateway.readChannel(s,typeof n=="number"?n:void 0);if(i===void 0){t.writeHead(500,{"Content-Type":"application/json"}),t.end(JSON.stringify({ok:!1,error:"failed to read channel history"}));return}t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({ok:!0,messages:i}))}async handleChannels(e,t){let{query:s}=e,n=await this.gateway.listChannels(typeof s=="string"?s:void 0);t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({ok:!0,channels:n}))}async handleUsers(e,t){let{user:s}=e;if(typeof s!="string"||!s){t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({ok:!1,error:"user is required"}));return}let n=await this.gateway.readUser(s);if(n===void 0){t.writeHead(500,{"Content-Type":"application/json"}),t.end(JSON.stringify({ok:!1,error:"failed to look up user"}));return}t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({ok:!0,user:n}))}readBody(e){return new Promise((t,s)=>{let n="";e.on("data",i=>{n+=i.toString()}),e.on("end",()=>t(n)),e.on("error",s)})}};x();var Yk=b("slack-scope-preflight"),Jk=["chat:write","chat:write.public","chat:write.customize","channels:history","channels:read","users:read"];async function Wh(r,e=Jk){let t=await fetch("https://slack.com/api/auth.test",{method:"POST",headers:{Authorization:`Bearer ${r}`}}),s=await t.json();if(!s.ok)throw new Error(`Slack auth.test failed: ${s.error??"unknown"}`);let i=(t.headers.get("x-oauth-scopes")??"").split(",").map(a=>a.trim()).filter(Boolean),o=e.filter(a=>!i.includes(a));if(o.length>0)throw new Error(`Slack bot token missing required scopes: ${o.join(", ")}`);Yk.info("Slack scope preflight passed",{required:[...e]})}var M=b("index");async function R_(){M.info("Hive starting up",{instance:g.instance.id,portBase:g.instance.portBase}),kc(ce,pi),bc(ce),mc(ce),vc(pi,Je),g.gemini.apiKey&&(ih(g.gemini.apiKey),M.info("Gemini vision enabled",{model:g.gemini.visionModel}));let r=new $_(g.mongo.uri);await r.connect();let e=r.db(g.mongo.dbName),t=e.collection("agent_definitions");await t.createIndex({channels:1}),await t.createIndex({disabled:1}),await jh(e);let s,n,i,o=null,a=async()=>{if(!n||!i)return;M.info("Hot-reloading agent registry...");let O=await s.load();if(O.added.length&&M.info("New agents online",{agents:O.added}),O.updated.length&&M.info("Agents updated",{agents:O.updated}),O.removed.length){M.info("Agents removed",{agents:O.removed});for(let le of O.removed)n.stopAgent(le)}let U=s.getDisabled();for(let le of U)n.stopAgent(le.id);U.length&&M.info("Disabled agents stopped",{agents:U.map(le=>le.id)}),await i.reloadSchedules(),n.reloadSkills()};s=new cr(t,()=>{o&&clearTimeout(o),o=setTimeout(()=>a(),500)}),await s.load(),M.info("Agent registry loaded",{agents:s.listIds()});let l=new Tr(g.mongo.uri,g.mongo.dbName);await l.init();let c=new Hr(g.mongo.uri,g.mongo.dbName);await c.init(),l.memoryStore=c;let d=new Wr,u=new Vr(c,d,{hotBudgetTokens:g.memory.hotBudgetTokens,sweepIntervalHours:g.memory.sweepIntervalHours,hotThreshold:g.memory.hotThreshold,warmThreshold:g.memory.warmThreshold,recencyHalfLifeDays:g.memory.recencyHalfLifeDays,coldSummaryMinRecords:g.memory.coldSummaryMinRecords,coldRetentionDays:g.memory.coldRetentionDays,purgeRetentionDays:g.memory.purgeRetentionDays},g.autoDream);M.info("Structured memory lifecycle enabled");let h=new Er(g.mongo.uri);await h.connect(g.mongo.dbName);let p;if(g.activity.enabled&&(p=new Jr(e,g.activity),await p.connect()),g.linear.apiKey){let O=new Ar(g.linear.apiKey,g.linear.teamId||void 0);M.info("Linear client configured")}let m=new Pr(g.taskLedger.apiUrl,g.taskLedger.apiKey);m.isConfigured&&M.info("Task ledger client configured",{apiUrl:g.taskLedger.apiUrl});let f=new $r(g.taskLedger.apiUrl,g.taskLedger.agentKeys,g.taskLedger.apiKey);f.isConfigured&&M.info("Task ledger auto-tracking enabled",{apiUrl:g.taskLedger.apiUrl,agents:Object.keys(g.taskLedger.agentKeys)});let y,w;if(g.codeIndex.enabled){let{CodeIndexPrefetcher:O}=await Promise.resolve().then(()=>(Yh(),Vh)),{KnowledgeExtractor:U}=await Promise.resolve().then(()=>(zh(),Jh));y=new O({mongoUri:g.mongo.uri,dbName:g.mongo.dbName,qdrantUrl:process.env.QDRANT_URL??"http://localhost:6333",ollamaUrl:process.env.OLLAMA_URL??"http://localhost:11434",scoreThreshold:g.codeIndex.scoreThreshold,prefetchLimit:g.codeIndex.prefetchLimit}),g.codeIndex.sessionKnowledge.enabled&&(w=new U(c,d)),M.info("Code index integration enabled",{prefetch:!0,sessionKnowledge:w!==void 0})}n=new br(s,l,h,p,y);let S=new Cr(n,l,s),k=new xr(s,n,S,g.defaultAgent,f.isConfigured?f:void 0),I=new Rr(g.background.port,g.background.authToken,g.tasksDir.background,O=>k.dispatch(O).catch(U=>{M.error("Background task completion dispatch failed",{error:String(U)})}));await I.start(),await I.scanOrphans(),M.info("Background task manager started",{port:g.background.port});let v=new Ur(g.codeTask.port,g.codeTask.authToken,g.codeTask.pluginDirs,g.codeTask.maxConcurrent,g.tasksDir.code,O=>k.dispatch(O).catch(U=>{M.error("Code task completion dispatch failed",{error:String(U)})}),{prefetcher:y,knowledgeExtractor:w,maxLifetimeMs:g.codeTask.maxLifetimeMs,staleGraceMs:g.codeTask.staleGraceMs});await v.start(),await v.scanOrphans(),M.info("Code task manager started",{port:g.codeTask.port});let N;g.recall.apiKey&&(N=new qr(g.recall.monitorPort,g.recall.webhookSecret,O=>k.dispatch(O).catch(U=>{M.error("Meeting monitor dispatch failed",{error:String(U)})})),await N.start(),M.info("Meeting monitor started",{port:g.recall.monitorPort}),g.recall.apiKey&&!g.recall.webhookSecret&&M.error("Real-time transcript delivery disabled \u2014 RECALL_WEBHOOK_SECRET not set")),L_(Je)&&(P_(Je,{recursive:!0},()=>{o&&clearTimeout(o),o=setTimeout(()=>a(),500)}),M.info("Skills hot-reload enabled",{watched:Je})),process.on("SIGUSR1",()=>a()),M.info("Hot-reload enabled",{signal:"SIGUSR1"});let D=g.sms.lines.map(O=>O.slackChannel).filter(Boolean),C=new vr(g.slack.appToken,g.slack.botToken),E=new Or(C,s,D,"slack");k.registerAdapter(E),k.setSlackAdapter(E),await E.start(O=>{k.dispatch(O).catch(U=>{M.error("Slack dispatch failed",{error:String(U),source:O.source.label})})}),M.info("Slack adapter connected");let G=new Map;try{let O;do{let on=await C.client.conversations.list({types:"public_channel,private_channel",limit:1e3,cursor:O});for(let Ve of on.channels??[])Ve.name&&Ve.id&&G.set(Ve.name,Ve.id);O=on.response_metadata?.next_cursor||void 0}while(O);let U=g.slack.auditChannel,le=U?G.get(U):void 0;k.setAuditChannel(E,G,le),M.info("Audit channel configured",{channels:G.size,fallback:U||null,fallbackResolved:!!le})}catch(O){M.warn("Failed to configure audit channel",{error:String(O)})}let W=null;g.slack.localMcpServer&&(await Wh(g.slack.botToken),W=new Qr({port:g.slackInternal.port,authToken:g.slackInternal.authToken,gateway:C,agentManager:n}),await W.start(),M.info("Slack internal API started",{port:g.slackInternal.port}));let $=new Mr(g.quo.apiKey,g.sms.lines);k.registerAdapter($),g.quo.apiKey&&g.sms.lines.length>0&&(await $.start(O=>{k.dispatch(O).catch(U=>{M.error("SMS dispatch failed",{error:String(U),source:O.source.label})})}),M.info("SMS adapter started",{lines:g.sms.lines.length}));let z;g.imessage.enabled&&(z=new Lr(g.imessage,g.mongo.uri,g.mongo.dbName,C,g.instance.id),k.registerAdapter(z),await z.start(O=>{k.dispatch(O).catch(U=>{M.error("iMessage dispatch failed",{error:String(U)})})}),M.info("iMessage adapter started"));let{AgentRunner:Ot}=await Promise.resolve().then(()=>(wa(),sh));Ot.registryRef=s;let{TeamStore:ts}=await Promise.resolve().then(()=>(ef(),Zh)),{CommandRegistry:nn}=await Promise.resolve().then(()=>(sf(),tf)),ut=new ts(g.mongo.uri,g.mongo.dbName);await ut.connect();let ht=O=>{let U=s.getAll(),le=U.find(hi=>hi.id===O);if(le)return{id:le.id,name:le.name};let on=O.toLowerCase(),Ve=U.find(hi=>hi.name.toLowerCase()===on);return Ve?{id:Ve.id,name:Ve.name}:null},ss=new nn(ut,ht);k.setTeamStore(ut),M.info("Team layer initialized");let{registerPluginCommands:ns}=await Promise.resolve().then(()=>(Ia(),Sh));await ns(n.getPlugins(),ss);let Ge;if(g.ws.enabled){let{WsAdapter:O}=await Promise.resolve().then(()=>(fp(),hp));Ge=new O(g.ws.port,{teamStore:ut,commandRegistry:ss,agentRegistry:s,agentManager:n}),k.registerAdapter(Ge),await Ge.start(U=>{k.dispatch(U).catch(le=>{M.error("WS dispatch failed",{error:String(le),source:U.source.label})})}),M.info("WebSocket adapter started",{port:g.ws.port})}let V;if(g.ws.enabled){let{startBeekeeperRegistration:O}=await Promise.resolve().then(()=>(mp(),pp)),U=`hive-${g.instance.id}`;V=O({beekeeperPort:g.beekeeper.port,wsPort:g.ws.port,capabilityName:U}),M.info("Beekeeper registration loop started",{beekeeperPort:g.beekeeper.port,wsPort:g.ws.port,capabilityName:U})}let L;if(g.voice.enabled&&g.voice.serverSecret){let{VoiceAdapter:O}=await Promise.resolve().then(()=>(Ip(),Tp));L=new O(g.voice.port,g.voice.serverSecret,s,l),await L.start(),M.info("Voice adapter started",{port:g.voice.port})}i=new Ir(n,l,S,s,O=>{k.dispatch(O).catch(U=>{M.error("Callback dispatch failed",{error:String(U)})})}),await i.connectDb(g.mongo.uri,g.mongo.dbName),i.start(),M.info("Scheduler started"),await s.startWatching();let P;g.adminApi.token&&(P=new Yr(g.adminApi.port,g.adminApi.token,t,e.collection("agent_definition_versions"),()=>a()),await P.start(),M.info("Admin API started",{port:g.adminApi.port}));let re=new Fr({maxAttempts:g.sweeper.retryMaxAttempts,baseDelayMs:g.sweeper.retryBaseDelayMs});k.setRetryQueue(re);let rn=[E],rs=[C],lc=new Kr({intervalMs:g.sweeper.intervalMs,threadTtlMs:g.sweeper.threadTtlMs,taskFileTtlMs:g.sweeper.taskFileTtlMs,meetingSessionTtlMs:g.sweeper.meetingSessionTtlMs,cacheTtlMs:g.sweeper.cacheTtlMs,memorySweepIntervalHours:g.memory.sweepIntervalHours,dreamConfig:g.autoDream},{dispatcher:k,slackAdapters:rn,bgTaskManager:I,codeTaskManager:v,meetingMonitor:N,taskLedger:f.isConfigured?f:void 0,slackGateways:rs,agentManager:n,retryQueue:re,memoryLifecycle:u},m.isConfigured?m:void 0);lc.start(),M.info("Sweeper started",{intervalMs:g.sweeper.intervalMs});let dc=async O=>{M.info("Shutdown signal received",{signal:O}),lc.stop(),P?.stop(),s.stopWatching(),await $.stop(),W&&await W.stop(),z&&await z.stop(),V?.stop(),Ge&&await Ge.stop(),L?.stop(),await ut.close(),i.stop(),await I.stop(),await v.stop(),await y?.close(),N?.stop(),n.stopAll(),p&&await p.stop(),await h.close(),await c.close(),await E.stop(),await r.close(),M.info("Hive shut down cleanly"),process.exit(0)};process.on("SIGTERM",()=>dc("SIGTERM")),process.on("SIGINT",()=>dc("SIGINT")),M.info("Hive is running"),Hh(l,s,k,G).catch(O=>{M.error("First-boot check failed",{error:String(O)})})}process.on("unhandledRejection",r=>{M.error("Unhandled promise rejection",{error:String(r),stack:r instanceof Error?r.stack:void 0})});R_().catch(r=>{M.error("Fatal startup error",{error:String(r)}),process.exit(1)});
|