@keepur/hive 0.1.0 → 0.1.1
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/README.md +37 -321
- package/package.json +9 -10
- package/pkg/cli.min.js +195 -164
- package/pkg/mcp/admin.min.js +16 -16
- package/pkg/mcp/code-search.min.js +1 -1
- package/pkg/mcp/code-task.min.js +1 -1
- package/pkg/mcp/contacts.min.js +1 -1
- package/pkg/mcp/keychain.min.js +16 -16
- package/pkg/mcp/linear.min.js +1 -1
- package/pkg/mcp/memory.min.js +24 -17
- package/pkg/mcp/resend.min.js +14 -14
- package/pkg/mcp/workflow.min.js +23 -23
- package/pkg/server.min.js +246 -242
- package/scripts/honeypot +186 -0
- package/seeds/chief-of-staff/agent.yaml +2 -2
- package/seeds/chief-of-staff/skills/agent-builder/skills/agent-builder/SKILL.md +26 -0
- package/seeds/chief-of-staff/skills/capability-inventory/skills/capability-inventory/SKILL.md +21 -0
- package/seeds/chief-of-staff/skills/credential-setup/skills/credential-setup/SKILL.md +23 -0
- package/seeds/chief-of-staff/skills/onboarding/skills/onboarding/SKILL.md +26 -0
- package/pkg/setup/install-prereqs.sh +0 -80
package/pkg/server.min.js
CHANGED
|
@@ -1,233 +1,274 @@
|
|
|
1
|
-
var
|
|
2
|
-
`);let
|
|
3
|
-
`),i=i.replace(/\\r/g,"\r")),e[n]=i}return e}function Zw(s){s=s||{};let e=Ul(s);s.path=e;let t=re.configDotenv(s);if(!t.parsed){let o=new Error(`MISSING_DATA: Cannot parse ${e} for an unknown reason`);throw o.code="MISSING_DATA",o}let r=jl(s).split(","),n=r.length,i;for(let o=0;o<n;o++)try{let a=r[o].trim(),l=tS(t,a);i=re.decrypt(l.ciphertext,l.key);break}catch(a){if(o+1>=n)throw a}return re.parse(i)}function eS(s){console.error(`[dotenv@${ho}][WARN] ${s}`)}function Es(s){console.log(`[dotenv@${ho}][DEBUG] ${s}`)}function Bl(s){console.log(`[dotenv@${ho}] ${s}`)}function jl(s){return s&&s.DOTENV_KEY&&s.DOTENV_KEY.length>0?s.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function tS(s,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 r=t.password;if(!r){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=s.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:r}}function Ul(s){let e=null;if(s&&s.path&&s.path.length>0)if(Array.isArray(s.path))for(let t of s.path)fo.existsSync(t)&&(e=t.endsWith(".vault")?t:`${t}.vault`);else e=s.path.endsWith(".vault")?s.path:`${s.path}.vault`;else e=Mr.resolve(process.cwd(),".env.vault");return fo.existsSync(e)?e:null}function ql(s){return s[0]==="~"?Mr.join(Gw.homedir(),s.slice(1)):s}function sS(s){let e=Ut(process.env.DOTENV_CONFIG_DEBUG||s&&s.debug),t=Ut(process.env.DOTENV_CONFIG_QUIET||s&&s.quiet);(e||!t)&&Bl("Loading env from encrypted .env.vault");let r=re._parseVault(s),n=process.env;return s&&s.processEnv!=null&&(n=s.processEnv),re.populate(n,r,s),{parsed:r}}function rS(s){let e=Mr.resolve(process.cwd(),".env"),t="utf8",r=process.env;s&&s.processEnv!=null&&(r=s.processEnv);let n=Ut(r.DOTENV_CONFIG_DEBUG||s&&s.debug),i=Ut(r.DOTENV_CONFIG_QUIET||s&&s.quiet);s&&s.encoding?t=s.encoding:n&&Es("No encoding is specified. UTF-8 is used by default");let o=[e];if(s&&s.path)if(!Array.isArray(s.path))o=[ql(s.path)];else{o=[];for(let d of s.path)o.push(ql(d))}let a,l={};for(let d of o)try{let u=re.parse(fo.readFileSync(d,{encoding:t}));re.populate(l,u,s)}catch(u){n&&Es(`Failed to load ${d} ${u.message}`),a=u}let c=re.populate(r,l,s);if(n=Ut(r.DOTENV_CONFIG_DEBUG||n),i=Ut(r.DOTENV_CONFIG_QUIET||i),n||!i){let d=Object.keys(c).length,u=[];for(let f of o)try{let h=Mr.relative(process.cwd(),f);u.push(h)}catch(h){n&&Es(`Failed to load ${f} ${h.message}`),a=h}Bl(`injecting env (${d}) from ${u.join(",")} ${zw(`-- tip: ${Yw()}`)}`)}return a?{parsed:l,error:a}:{parsed:l}}function nS(s){if(jl(s).length===0)return re.configDotenv(s);let e=Ul(s);return e?re._configVault(s):(eS(`You set DOTENV_KEY but you are missing a .env.vault file at ${e}. Did you forget to build it?`),re.configDotenv(s))}function iS(s,e){let t=Buffer.from(e.slice(-64),"hex"),r=Buffer.from(s,"base64"),n=r.subarray(0,12),i=r.subarray(-16);r=r.subarray(12,-16);try{let o=Vw.createDecipheriv("aes-256-gcm",t,n);return o.setAuthTag(i),`${o.update(r)}${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 oS(s,e,t={}){let r=!!(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(s,o)?(n===!0&&(s[o]=e[o],i[o]=e[o]),r&&Es(n===!0?`"${o}" is already defined and WAS overwritten`:`"${o}" is already defined and was NOT overwritten`)):(s[o]=e[o],i[o]=e[o]);return i}var re={configDotenv:rS,_configVault:sS,_parseVault:Zw,config:nS,decrypt:iS,parse:Qw,populate:oS};Je.exports.configDotenv=re.configDotenv;Je.exports._configVault=re._configVault;Je.exports._parseVault=re._parseVault;Je.exports.config=re.config;Je.exports.decrypt=re.decrypt;Je.exports.parse=re.parse;Je.exports.populate=re.populate;Je.exports=re});var B=w(de=>{"use strict";var po=Symbol.for("yaml.alias"),Kl=Symbol.for("yaml.document"),Rr=Symbol.for("yaml.map"),Hl=Symbol.for("yaml.pair"),mo=Symbol.for("yaml.scalar"),$r=Symbol.for("yaml.seq"),ze=Symbol.for("yaml.node.type"),aS=s=>!!s&&typeof s=="object"&&s[ze]===po,cS=s=>!!s&&typeof s=="object"&&s[ze]===Kl,lS=s=>!!s&&typeof s=="object"&&s[ze]===Rr,dS=s=>!!s&&typeof s=="object"&&s[ze]===Hl,Gl=s=>!!s&&typeof s=="object"&&s[ze]===mo,uS=s=>!!s&&typeof s=="object"&&s[ze]===$r;function Vl(s){if(s&&typeof s=="object")switch(s[ze]){case Rr:case $r:return!0}return!1}function fS(s){if(s&&typeof s=="object")switch(s[ze]){case po:case Rr:case mo:case $r:return!0}return!1}var hS=s=>(Gl(s)||Vl(s))&&!!s.anchor;de.ALIAS=po;de.DOC=Kl;de.MAP=Rr;de.NODE_TYPE=ze;de.PAIR=Hl;de.SCALAR=mo;de.SEQ=$r;de.hasAnchor=hS;de.isAlias=aS;de.isCollection=Vl;de.isDocument=cS;de.isMap=lS;de.isNode=fS;de.isPair=dS;de.isScalar=Gl;de.isSeq=uS});var Is=w(go=>{"use strict";var ne=B(),ge=Symbol("break visit"),Wl=Symbol("skip children"),Pe=Symbol("remove node");function Pr(s,e){let t=Yl(e);ne.isDocument(s)?Ft(null,s.contents,t,Object.freeze([s]))===Pe&&(s.contents=null):Ft(null,s,t,Object.freeze([]))}Pr.BREAK=ge;Pr.SKIP=Wl;Pr.REMOVE=Pe;function Ft(s,e,t,r){let n=Jl(s,e,t,r);if(ne.isNode(n)||ne.isPair(n))return zl(s,r,n),Ft(s,n,t,r);if(typeof n!="symbol"){if(ne.isCollection(e)){r=Object.freeze(r.concat(e));for(let i=0;i<e.items.length;++i){let o=Ft(i,e.items[i],t,r);if(typeof o=="number")i=o-1;else{if(o===ge)return ge;o===Pe&&(e.items.splice(i,1),i-=1)}}}else if(ne.isPair(e)){r=Object.freeze(r.concat(e));let i=Ft("key",e.key,t,r);if(i===ge)return ge;i===Pe&&(e.key=null);let o=Ft("value",e.value,t,r);if(o===ge)return ge;o===Pe&&(e.value=null)}}return n}async function qr(s,e){let t=Yl(e);ne.isDocument(s)?await Kt(null,s.contents,t,Object.freeze([s]))===Pe&&(s.contents=null):await Kt(null,s,t,Object.freeze([]))}qr.BREAK=ge;qr.SKIP=Wl;qr.REMOVE=Pe;async function Kt(s,e,t,r){let n=await Jl(s,e,t,r);if(ne.isNode(n)||ne.isPair(n))return zl(s,r,n),Kt(s,n,t,r);if(typeof n!="symbol"){if(ne.isCollection(e)){r=Object.freeze(r.concat(e));for(let i=0;i<e.items.length;++i){let o=await Kt(i,e.items[i],t,r);if(typeof o=="number")i=o-1;else{if(o===ge)return ge;o===Pe&&(e.items.splice(i,1),i-=1)}}}else if(ne.isPair(e)){r=Object.freeze(r.concat(e));let i=await Kt("key",e.key,t,r);if(i===ge)return ge;i===Pe&&(e.key=null);let o=await Kt("value",e.value,t,r);if(o===ge)return ge;o===Pe&&(e.value=null)}}return n}function Yl(s){return typeof s=="object"&&(s.Collection||s.Node||s.Value)?Object.assign({Alias:s.Node,Map:s.Node,Scalar:s.Node,Seq:s.Node},s.Value&&{Map:s.Value,Scalar:s.Value,Seq:s.Value},s.Collection&&{Map:s.Collection,Seq:s.Collection},s):s}function Jl(s,e,t,r){if(typeof t=="function")return t(s,e,r);if(ne.isMap(e))return t.Map?.(s,e,r);if(ne.isSeq(e))return t.Seq?.(s,e,r);if(ne.isPair(e))return t.Pair?.(s,e,r);if(ne.isScalar(e))return t.Scalar?.(s,e,r);if(ne.isAlias(e))return t.Alias?.(s,e,r)}function zl(s,e,t){let r=e[e.length-1];if(ne.isCollection(r))r.items[s]=t;else if(ne.isPair(r))s==="key"?r.key=t:r.value=t;else if(ne.isDocument(r))r.contents=t;else{let n=ne.isAlias(r)?"alias":"scalar";throw new Error(`Cannot replace node with ${n} parent`)}}go.visit=Pr;go.visitAsync=qr});var yo=w(Ql=>{"use strict";var Xl=B(),pS=Is(),mS={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},gS=s=>s.replace(/[!,[\]{}]/g,e=>mS[e]),ks=class s{constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},s.defaultYaml,e),this.tags=Object.assign({},s.defaultTags,t)}clone(){let e=new s(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){let e=new s(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:s.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},s.defaultTags);break}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:s.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},s.defaultTags),this.atNextDocument=!1);let r=e.trim().split(/[ \t]+/),n=r.shift();switch(n){case"%TAG":{if(r.length!==2&&(t(0,"%TAG directive should contain exactly two parts"),r.length<2))return!1;let[i,o]=r;return this.tags[i]=o,!0}case"%YAML":{if(this.yaml.explicit=!0,r.length!==1)return t(0,"%YAML directive should contain exactly one part"),!1;let[i]=r;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[,r,n]=e.match(/^(.*!)([^!]*)$/s);n||t(`The ${e} tag has no suffix`);let i=this.tags[r];if(i)try{return i+decodeURIComponent(n)}catch(o){return t(String(o)),null}return r==="!"?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(let[t,r]of Object.entries(this.tags))if(e.startsWith(r))return t+gS(e.substring(r.length));return e[0]==="!"?e:`!<${e}>`}toString(e){let t=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],r=Object.entries(this.tags),n;if(e&&r.length>0&&Xl.isNode(e.contents)){let i={};pS.visit(e.contents,(o,a)=>{Xl.isNode(a)&&a.tag&&(i[a.tag]=!0)}),n=Object.keys(i)}else n=[];for(let[i,o]of r)i==="!!"&&o==="tag:yaml.org,2002:"||(!e||n.some(a=>a.startsWith(o)))&&t.push(`%TAG ${i} ${o}`);return t.join(`
|
|
4
|
-
`)}};ks.defaultYaml={explicit:!1,version:"1.2"};ks.defaultTags={"!!":"tag:yaml.org,2002:"};Ql.Directives=ks});var Br=w(As=>{"use strict";var Zl=B(),yS=Is();function wS(s){if(/[\x00-\x19\s,[\]{}]/.test(s)){let t=`Anchor must not contain whitespace or control characters: ${JSON.stringify(s)}`;throw new Error(t)}return!0}function ed(s){let e=new Set;return yS.visit(s,{Value(t,r){r.anchor&&e.add(r.anchor)}}),e}function td(s,e){for(let t=1;;++t){let r=`${s}${t}`;if(!e.has(r))return r}}function SS(s,e){let t=[],r=new Map,n=null;return{onAnchor:i=>{t.push(i),n??(n=ed(s));let o=td(e,n);return n.add(o),o},setAnchors:()=>{for(let i of t){let o=r.get(i);if(typeof o=="object"&&o.anchor&&(Zl.isScalar(o.node)||Zl.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:r}}As.anchorIsValid=wS;As.anchorNames=ed;As.createNodeAnchors=SS;As.findNewAnchor=td});var wo=w(sd=>{"use strict";function Cs(s,e,t,r){if(r&&typeof r=="object")if(Array.isArray(r))for(let n=0,i=r.length;n<i;++n){let o=r[n],a=Cs(s,r,String(n),o);a===void 0?delete r[n]:a!==o&&(r[n]=a)}else if(r instanceof Map)for(let n of Array.from(r.keys())){let i=r.get(n),o=Cs(s,r,n,i);o===void 0?r.delete(n):o!==i&&r.set(n,o)}else if(r instanceof Set)for(let n of Array.from(r)){let i=Cs(s,r,n,n);i===void 0?r.delete(n):i!==n&&(r.delete(n),r.add(i))}else for(let[n,i]of Object.entries(r)){let o=Cs(s,r,n,i);o===void 0?delete r[n]:o!==i&&(r[n]=o)}return s.call(e,t,r)}sd.applyReviver=Cs});var at=w(nd=>{"use strict";var bS=B();function rd(s,e,t){if(Array.isArray(s))return s.map((r,n)=>rd(r,String(n),t));if(s&&typeof s.toJSON=="function"){if(!t||!bS.hasAnchor(s))return s.toJSON(e,t);let r={aliasCount:0,count:1,res:void 0};t.anchors.set(s,r),t.onCreate=i=>{r.res=i,delete t.onCreate};let n=s.toJSON(e,t);return t.onCreate&&t.onCreate(n),n}return typeof s=="bigint"&&!t?.keep?Number(s):s}nd.toJS=rd});var jr=w(od=>{"use strict";var vS=wo(),id=B(),_S=at(),So=class{constructor(e){Object.defineProperty(this,id.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:r,onAnchor:n,reviver:i}={}){if(!id.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 r=="number"?r:100},a=_S.toJS(this,"",o);if(typeof n=="function")for(let{count:l,res:c}of o.anchors.values())n(c,l);return typeof i=="function"?vS.applyReviver(i,{"":a},"",a):a}};od.NodeBase=So});var Ns=w(ad=>{"use strict";var TS=Br(),ES=Is(),Ht=B(),IS=jr(),kS=at(),bo=class extends IS.NodeBase{constructor(e){super(Ht.ALIAS),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(e,t){let r;t?.aliasResolveCache?r=t.aliasResolveCache:(r=[],ES.visit(e,{Node:(i,o)=>{(Ht.isAlias(o)||Ht.hasAnchor(o))&&r.push(o)}}),t&&(t.aliasResolveCache=r));let n;for(let i of r){if(i===this)break;i.anchor===this.source&&(n=i)}return n}toJSON(e,t){if(!t)return{source:this.source};let{anchors:r,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=r.get(o);if(a||(kS.toJS(o,null,t),a=r.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=Ur(n,o,r)),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,r){let n=`*${this.source}`;if(e){if(TS.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 Ur(s,e,t){if(Ht.isAlias(e)){let r=e.resolve(s),n=t&&r&&t.get(r);return n?n.count*n.aliasCount:0}else if(Ht.isCollection(e)){let r=0;for(let n of e.items){let i=Ur(s,n,t);i>r&&(r=i)}return r}else if(Ht.isPair(e)){let r=Ur(s,e.key,t),n=Ur(s,e.value,t);return Math.max(r,n)}return 1}ad.Alias=bo});var se=w(vo=>{"use strict";var AS=B(),CS=jr(),NS=at(),OS=s=>!s||typeof s!="function"&&typeof s!="object",ct=class extends CS.NodeBase{constructor(e){super(AS.SCALAR),this.value=e}toJSON(e,t){return t?.keep?this.value:NS.toJS(this.value,e,t)}toString(){return String(this.value)}};ct.BLOCK_FOLDED="BLOCK_FOLDED";ct.BLOCK_LITERAL="BLOCK_LITERAL";ct.PLAIN="PLAIN";ct.QUOTE_DOUBLE="QUOTE_DOUBLE";ct.QUOTE_SINGLE="QUOTE_SINGLE";vo.Scalar=ct;vo.isScalarValue=OS});var Os=w(ld=>{"use strict";var xS=Ns(),Et=B(),cd=se(),LS="tag:yaml.org,2002:";function DS(s,e,t){if(e){let r=t.filter(i=>i.tag===e),n=r.find(i=>!i.format)??r[0];if(!n)throw new Error(`Tag ${e} not found`);return n}return t.find(r=>r.identify?.(s)&&!r.format)}function MS(s,e,t){if(Et.isDocument(s)&&(s=s.contents),Et.isNode(s))return s;if(Et.isPair(s)){let u=t.schema[Et.MAP].createNode?.(t.schema,null,t);return u.items.push(s),u}(s instanceof String||s instanceof Number||s instanceof Boolean||typeof BigInt<"u"&&s instanceof BigInt)&&(s=s.valueOf());let{aliasDuplicateObjects:r,onAnchor:n,onTagObj:i,schema:o,sourceObjects:a}=t,l;if(r&&s&&typeof s=="object"){if(l=a.get(s),l)return l.anchor??(l.anchor=n(s)),new xS.Alias(l.anchor);l={anchor:null,node:null},a.set(s,l)}e?.startsWith("!!")&&(e=LS+e.slice(2));let c=DS(s,e,o.tags);if(!c){if(s&&typeof s.toJSON=="function"&&(s=s.toJSON()),!s||typeof s!="object"){let u=new cd.Scalar(s);return l&&(l.node=u),u}c=s instanceof Map?o[Et.MAP]:Symbol.iterator in Object(s)?o[Et.SEQ]:o[Et.MAP]}i&&(i(c),delete t.onTagObj);let d=c?.createNode?c.createNode(t.schema,s,t):typeof c?.nodeClass?.from=="function"?c.nodeClass.from(t.schema,s,t):new cd.Scalar(s);return e?d.tag=e:c.default||(d.tag=c.tag),l&&(l.node=d),d}ld.createNode=MS});var Kr=w(Fr=>{"use strict";var RS=Os(),qe=B(),$S=jr();function _o(s,e,t){let r=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]=r,r=o}else r=new Map([[i,r]])}return RS.createNode(r,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw new Error("This should not happen, please report a bug.")},schema:s,sourceObjects:new Map})}var dd=s=>s==null||typeof s=="object"&&!!s[Symbol.iterator]().next().done,To=class extends $S.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(r=>qe.isNode(r)||qe.isPair(r)?r.clone(e):r),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(dd(e))this.add(t);else{let[r,...n]=e,i=this.get(r,!0);if(qe.isCollection(i))i.addIn(n,t);else if(i===void 0&&this.schema)this.set(r,_o(this.schema,n,t));else throw new Error(`Expected YAML collection at ${r}. Remaining path: ${n}`)}}deleteIn(e){let[t,...r]=e;if(r.length===0)return this.delete(t);let n=this.get(t,!0);if(qe.isCollection(n))return n.deleteIn(r);throw new Error(`Expected YAML collection at ${t}. Remaining path: ${r}`)}getIn(e,t){let[r,...n]=e,i=this.get(r,!0);return n.length===0?!t&&qe.isScalar(i)?i.value:i:qe.isCollection(i)?i.getIn(n,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!qe.isPair(t))return!1;let r=t.value;return r==null||e&&qe.isScalar(r)&&r.value==null&&!r.commentBefore&&!r.comment&&!r.tag})}hasIn(e){let[t,...r]=e;if(r.length===0)return this.has(t);let n=this.get(t,!0);return qe.isCollection(n)?n.hasIn(r):!1}setIn(e,t){let[r,...n]=e;if(n.length===0)this.set(r,t);else{let i=this.get(r,!0);if(qe.isCollection(i))i.setIn(n,t);else if(i===void 0&&this.schema)this.set(r,_o(this.schema,n,t));else throw new Error(`Expected YAML collection at ${r}. Remaining path: ${n}`)}}};Fr.Collection=To;Fr.collectionFromPath=_o;Fr.isEmptyPath=dd});var xs=w(Hr=>{"use strict";var PS=s=>s.replace(/^(?!$)(?: $)?/gm,"#");function Eo(s,e){return/^\n+$/.test(s)?s.substring(1):e?s.replace(/^(?! *$)/gm,e):s}var qS=(s,e,t)=>s.endsWith(`
|
|
5
|
-
`)?
|
|
1
|
+
var pp=Object.create;var li=Object.defineProperty;var mp=Object.getOwnPropertyDescriptor;var gp=Object.getOwnPropertyNames;var yp=Object.getPrototypeOf,wp=Object.prototype.hasOwnProperty;var F=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var q=(n,e)=>()=>(n&&(e=n(n=0)),e);var T=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports),Pe=(n,e)=>{for(var t in e)li(n,t,{get:e[t],enumerable:!0})},Sp=(n,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of gp(e))!wp.call(n,r)&&r!==t&&li(n,r,{get:()=>e[r],enumerable:!(s=mp(e,r))||s.enumerable});return n};var ve=(n,e,t)=>(t=n!=null?pp(yp(n)):{},Sp(e||!n||!n.__esModule?li(t,"default",{value:n,enumerable:!0}):t,n));import{existsSync as bp}from"node:fs";import{resolve as Je}from"node:path";function kp(){return process.env.HIVE_HOME?Je(process.env.HIVE_HOME):bp(Je(process.cwd(),"hive.yaml"))?process.cwd():Je(_p,".hive")}function sc(n){let e=process.env.HIVE_CONFIG||"hive.yaml";return Je(n,e)}function nc(n){let t=(process.env.HIVE_CONFIG||"hive.yaml").match(/^hive-(.+)\.yaml$/)?.[1];return Je(n,t?`.env-${t}`:".env")}var _p,le,ze,di,rc,rs=q(()=>{"use strict";_p=process.env.HOME??"/tmp";le=kp(),ze=Je(le,"skills"),di=Je(le,".hive"),rc=Je(import.meta.dirname,"..","seeds")});function an(n,e,t,s){if(ic[n]<ic[vp])return;let r={ts:new Date().toISOString(),level:n,component:e,msg:t,...s};(n==="error"?process.stderr:process.stdout).write(JSON.stringify(r)+`
|
|
2
|
+
`)}function I(n){return{debug:(e,t)=>an("debug",n,e,t),info:(e,t)=>an("info",n,e,t),warn:(e,t)=>an("warn",n,e,t),error:(e,t)=>an("error",n,e,t)}}var ic,vp,O=q(()=>{"use strict";ic={debug:0,info:1,warn:2,error:3},vp=process.env.LOG_LEVEL||"info"});import{execFileSync as ui}from"node:child_process";import{existsSync as hi,mkdirSync as Tp,unlinkSync as Ip}from"node:fs";import{resolve as fi,join as Ap}from"node:path";function oc(n){let e=fi(n,".hive","git");if(hi(e))return;Tp(fi(n,".hive"),{recursive:!0});let t=(...s)=>ui("git",[...s],{cwd:n,env:{...process.env,GIT_DIR:e,GIT_WORK_TREE:n},stdio:"pipe"});t("init"),t("config","user.name","hive-instance"),t("config","user.email","hive@localhost"),t("checkout","-b","installed"),t("commit","--allow-empty","-m","init: installed branch"),t("checkout","-b","state"),t("commit","--allow-empty","-m","init: state branch"),cn.info("Instance-local git initialized",{gitDir:e})}function ac(n,e,t,s){let r=fi(n,".hive","git");if(!hi(r)){cn.warn("Instance git not initialized \u2014 skipping state commit");return}let i=Ap(r,"state-index.tmp"),o={...process.env,GIT_DIR:r,GIT_WORK_TREE:n,GIT_INDEX_FILE:i},a=(...l)=>ui("git",[...l],{cwd:n,env:o,stdio:"pipe",encoding:"utf-8"}).trim();try{a("read-tree","state");for(let p of e)a("add","--force","--",p);try{a("rm","--cached","--ignore-unmatch","-r","--","**/.DS_Store")}catch{}let l=a("write-tree"),c=a("rev-parse","state"),d=a("rev-parse","state^{tree}");if(l===d)return;let u=s?{GIT_AUTHOR_NAME:s,GIT_AUTHOR_EMAIL:`${s}@hive`,GIT_COMMITTER_NAME:s,GIT_COMMITTER_EMAIL:`${s}@hive`}:{GIT_AUTHOR_NAME:"hive",GIT_AUTHOR_EMAIL:"hive@localhost",GIT_COMMITTER_NAME:"hive",GIT_COMMITTER_EMAIL:"hive@localhost"},h=ui("git",["commit-tree",l,"-p",c,"-m",t],{env:{...o,...u},encoding:"utf-8"}).trim();a("update-ref","refs/heads/state",h),cn.debug("State branch commit",{message:t,files:e.length})}catch(l){cn.warn("Failed to commit to state branch",{error:String(l),message:t})}finally{try{hi(i)&&Ip(i)}catch{}}}var cn,pi=q(()=>{"use strict";O();cn=I("instance-git")});var bc=T((jk,$e)=>{var wi=F("fs"),ln=F("path"),Mp=F("os"),Dp=F("crypto"),mc=["\u25C8 encrypted .env [www.dotenvx.com]","\u25C8 secrets for agents [www.dotenvx.com]","\u2301 auth for agents [www.vestauth.com]","\u2318 custom filepath { path: '/custom/path/.env' }","\u2318 enable debugging { debug: true }","\u2318 override existing { override: true }","\u2318 suppress logs { quiet: true }","\u2318 multiple files { path: ['.env.local', '.env'] }"];function Lp(){return mc[Math.floor(Math.random()*mc.length)]}function Mt(n){return typeof n=="string"?!["false","0","no","off",""].includes(n.toLowerCase()):!!n}function Pp(){return process.stdout.isTTY}function $p(n){return Pp()?`\x1B[2m${n}\x1B[0m`:n}var Rp=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function Bp(n){let e={},t=n.toString();t=t.replace(/\r\n?/mg,`
|
|
3
|
+
`);let s;for(;(s=Rp.exec(t))!=null;){let r=s[1],i=s[2]||"";i=i.trim();let o=i[0];i=i.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),o==='"'&&(i=i.replace(/\\n/g,`
|
|
4
|
+
`),i=i.replace(/\\r/g,"\r")),e[r]=i}return e}function Up(n){n=n||{};let e=Sc(n);n.path=e;let t=Z.configDotenv(n);if(!t.parsed){let o=new Error(`MISSING_DATA: Cannot parse ${e} for an unknown reason`);throw o.code="MISSING_DATA",o}let s=wc(n).split(","),r=s.length,i;for(let o=0;o<r;o++)try{let a=s[o].trim(),l=jp(t,a);i=Z.decrypt(l.ciphertext,l.key);break}catch(a){if(o+1>=r)throw a}return Z.parse(i)}function qp(n){console.error(`\u26A0 ${n}`)}function is(n){console.log(`\u2506 ${n}`)}function yc(n){console.log(`\u25C7 ${n}`)}function wc(n){return n&&n.DOTENV_KEY&&n.DOTENV_KEY.length>0?n.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function jp(n,e){let t;try{t=new URL(e)}catch(a){if(a.code==="ERR_INVALID_URL"){let l=new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development");throw l.code="INVALID_DOTENV_KEY",l}throw a}let s=t.password;if(!s){let a=new Error("INVALID_DOTENV_KEY: Missing key part");throw a.code="INVALID_DOTENV_KEY",a}let r=t.searchParams.get("environment");if(!r){let a=new Error("INVALID_DOTENV_KEY: Missing environment part");throw a.code="INVALID_DOTENV_KEY",a}let i=`DOTENV_VAULT_${r.toUpperCase()}`,o=n.parsed[i];if(!o){let a=new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${i} in your .env.vault file.`);throw a.code="NOT_FOUND_DOTENV_ENVIRONMENT",a}return{ciphertext:o,key:s}}function Sc(n){let e=null;if(n&&n.path&&n.path.length>0)if(Array.isArray(n.path))for(let t of n.path)wi.existsSync(t)&&(e=t.endsWith(".vault")?t:`${t}.vault`);else e=n.path.endsWith(".vault")?n.path:`${n.path}.vault`;else e=ln.resolve(process.cwd(),".env.vault");return wi.existsSync(e)?e:null}function gc(n){return n[0]==="~"?ln.join(Mp.homedir(),n.slice(1)):n}function Fp(n){let e=Mt(process.env.DOTENV_CONFIG_DEBUG||n&&n.debug),t=Mt(process.env.DOTENV_CONFIG_QUIET||n&&n.quiet);(e||!t)&&yc("loading env from encrypted .env.vault");let s=Z._parseVault(n),r=process.env;return n&&n.processEnv!=null&&(r=n.processEnv),Z.populate(r,s,n),{parsed:s}}function Kp(n){let e=ln.resolve(process.cwd(),".env"),t="utf8",s=process.env;n&&n.processEnv!=null&&(s=n.processEnv);let r=Mt(s.DOTENV_CONFIG_DEBUG||n&&n.debug),i=Mt(s.DOTENV_CONFIG_QUIET||n&&n.quiet);n&&n.encoding?t=n.encoding:r&&is("no encoding is specified (UTF-8 is used by default)");let o=[e];if(n&&n.path)if(!Array.isArray(n.path))o=[gc(n.path)];else{o=[];for(let d of n.path)o.push(gc(d))}let a,l={};for(let d of o)try{let u=Z.parse(wi.readFileSync(d,{encoding:t}));Z.populate(l,u,n)}catch(u){r&&is(`failed to load ${d} ${u.message}`),a=u}let c=Z.populate(s,l,n);if(r=Mt(s.DOTENV_CONFIG_DEBUG||r),i=Mt(s.DOTENV_CONFIG_QUIET||i),r||!i){let d=Object.keys(c).length,u=[];for(let h of o)try{let p=ln.relative(process.cwd(),h);u.push(p)}catch(p){r&&is(`failed to load ${h} ${p.message}`),a=p}yc(`injected env (${d}) from ${u.join(",")} ${$p(`// tip: ${Lp()}`)}`)}return a?{parsed:l,error:a}:{parsed:l}}function Gp(n){if(wc(n).length===0)return Z.configDotenv(n);let e=Sc(n);return e?Z._configVault(n):(qp(`you set DOTENV_KEY but you are missing a .env.vault file at ${e}`),Z.configDotenv(n))}function Hp(n,e){let t=Buffer.from(e.slice(-64),"hex"),s=Buffer.from(n,"base64"),r=s.subarray(0,12),i=s.subarray(-16);s=s.subarray(12,-16);try{let o=Dp.createDecipheriv("aes-256-gcm",t,r);return o.setAuthTag(i),`${o.update(s)}${o.final()}`}catch(o){let a=o instanceof RangeError,l=o.message==="Invalid key length",c=o.message==="Unsupported state or unable to authenticate data";if(a||l){let d=new Error("INVALID_DOTENV_KEY: It must be 64 characters long (or more)");throw d.code="INVALID_DOTENV_KEY",d}else if(c){let d=new Error("DECRYPTION_FAILED: Please check your DOTENV_KEY");throw d.code="DECRYPTION_FAILED",d}else throw o}}function Wp(n,e,t={}){let s=!!(t&&t.debug),r=!!(t&&t.override),i={};if(typeof e!="object"){let o=new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");throw o.code="OBJECT_REQUIRED",o}for(let o of Object.keys(e))Object.prototype.hasOwnProperty.call(n,o)?(r===!0&&(n[o]=e[o],i[o]=e[o]),s&&is(r===!0?`"${o}" is already defined and WAS overwritten`:`"${o}" is already defined and was NOT overwritten`)):(n[o]=e[o],i[o]=e[o]);return i}var Z={configDotenv:Kp,_configVault:Fp,_parseVault:Up,config:Gp,decrypt:Hp,parse:Bp,populate:Wp};$e.exports.configDotenv=Z.configDotenv;$e.exports._configVault=Z._configVault;$e.exports._parseVault=Z._parseVault;$e.exports.config=Z.config;$e.exports.decrypt=Z.decrypt;$e.exports.parse=Z.parse;$e.exports.populate=Z.populate;$e.exports=Z});var $=T(oe=>{"use strict";var Si=Symbol.for("yaml.alias"),_c=Symbol.for("yaml.document"),dn=Symbol.for("yaml.map"),kc=Symbol.for("yaml.pair"),bi=Symbol.for("yaml.scalar"),un=Symbol.for("yaml.seq"),Re=Symbol.for("yaml.node.type"),Vp=n=>!!n&&typeof n=="object"&&n[Re]===Si,Yp=n=>!!n&&typeof n=="object"&&n[Re]===_c,Jp=n=>!!n&&typeof n=="object"&&n[Re]===dn,zp=n=>!!n&&typeof n=="object"&&n[Re]===kc,vc=n=>!!n&&typeof n=="object"&&n[Re]===bi,Qp=n=>!!n&&typeof n=="object"&&n[Re]===un;function Tc(n){if(n&&typeof n=="object")switch(n[Re]){case dn:case un:return!0}return!1}function Xp(n){if(n&&typeof n=="object")switch(n[Re]){case Si:case dn:case bi:case un:return!0}return!1}var Zp=n=>(vc(n)||Tc(n))&&!!n.anchor;oe.ALIAS=Si;oe.DOC=_c;oe.MAP=dn;oe.NODE_TYPE=Re;oe.PAIR=kc;oe.SCALAR=bi;oe.SEQ=un;oe.hasAnchor=Zp;oe.isAlias=Vp;oe.isCollection=Tc;oe.isDocument=Yp;oe.isMap=Jp;oe.isNode=Xp;oe.isPair=zp;oe.isScalar=vc;oe.isSeq=Qp});var os=T(_i=>{"use strict";var ee=$(),de=Symbol("break visit"),Ic=Symbol("skip children"),Ee=Symbol("remove node");function hn(n,e){let t=Ac(e);ee.isDocument(n)?Dt(null,n.contents,t,Object.freeze([n]))===Ee&&(n.contents=null):Dt(null,n,t,Object.freeze([]))}hn.BREAK=de;hn.SKIP=Ic;hn.REMOVE=Ee;function Dt(n,e,t,s){let r=Cc(n,e,t,s);if(ee.isNode(r)||ee.isPair(r))return Ec(n,s,r),Dt(n,r,t,s);if(typeof r!="symbol"){if(ee.isCollection(e)){s=Object.freeze(s.concat(e));for(let i=0;i<e.items.length;++i){let o=Dt(i,e.items[i],t,s);if(typeof o=="number")i=o-1;else{if(o===de)return de;o===Ee&&(e.items.splice(i,1),i-=1)}}}else if(ee.isPair(e)){s=Object.freeze(s.concat(e));let i=Dt("key",e.key,t,s);if(i===de)return de;i===Ee&&(e.key=null);let o=Dt("value",e.value,t,s);if(o===de)return de;o===Ee&&(e.value=null)}}return r}async function fn(n,e){let t=Ac(e);ee.isDocument(n)?await Lt(null,n.contents,t,Object.freeze([n]))===Ee&&(n.contents=null):await Lt(null,n,t,Object.freeze([]))}fn.BREAK=de;fn.SKIP=Ic;fn.REMOVE=Ee;async function Lt(n,e,t,s){let r=await Cc(n,e,t,s);if(ee.isNode(r)||ee.isPair(r))return Ec(n,s,r),Lt(n,r,t,s);if(typeof r!="symbol"){if(ee.isCollection(e)){s=Object.freeze(s.concat(e));for(let i=0;i<e.items.length;++i){let o=await Lt(i,e.items[i],t,s);if(typeof o=="number")i=o-1;else{if(o===de)return de;o===Ee&&(e.items.splice(i,1),i-=1)}}}else if(ee.isPair(e)){s=Object.freeze(s.concat(e));let i=await Lt("key",e.key,t,s);if(i===de)return de;i===Ee&&(e.key=null);let o=await Lt("value",e.value,t,s);if(o===de)return de;o===Ee&&(e.value=null)}}return r}function Ac(n){return typeof n=="object"&&(n.Collection||n.Node||n.Value)?Object.assign({Alias:n.Node,Map:n.Node,Scalar:n.Node,Seq:n.Node},n.Value&&{Map:n.Value,Scalar:n.Value,Seq:n.Value},n.Collection&&{Map:n.Collection,Seq:n.Collection},n):n}function Cc(n,e,t,s){if(typeof t=="function")return t(n,e,s);if(ee.isMap(e))return t.Map?.(n,e,s);if(ee.isSeq(e))return t.Seq?.(n,e,s);if(ee.isPair(e))return t.Pair?.(n,e,s);if(ee.isScalar(e))return t.Scalar?.(n,e,s);if(ee.isAlias(e))return t.Alias?.(n,e,s)}function Ec(n,e,t){let s=e[e.length-1];if(ee.isCollection(s))s.items[n]=t;else if(ee.isPair(s))n==="key"?s.key=t:s.value=t;else if(ee.isDocument(s))s.contents=t;else{let r=ee.isAlias(s)?"alias":"scalar";throw new Error(`Cannot replace node with ${r} parent`)}}_i.visit=hn;_i.visitAsync=fn});var ki=T(Oc=>{"use strict";var Nc=$(),em=os(),tm={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},sm=n=>n.replace(/[!,[\]{}]/g,e=>tm[e]),as=class n{constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},n.defaultYaml,e),this.tags=Object.assign({},n.defaultTags,t)}clone(){let e=new n(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){let e=new n(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:n.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},n.defaultTags);break}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:n.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},n.defaultTags),this.atNextDocument=!1);let s=e.trim().split(/[ \t]+/),r=s.shift();switch(r){case"%TAG":{if(s.length!==2&&(t(0,"%TAG directive should contain exactly two parts"),s.length<2))return!1;let[i,o]=s;return this.tags[i]=o,!0}case"%YAML":{if(this.yaml.explicit=!0,s.length!==1)return t(0,"%YAML directive should contain exactly one part"),!1;let[i]=s;if(i==="1.1"||i==="1.2")return this.yaml.version=i,!0;{let o=/^\d+\.\d+$/.test(i);return t(6,`Unsupported YAML version ${i}`,o),!1}}default:return t(0,`Unknown directive ${r}`,!0),!1}}tagName(e,t){if(e==="!")return"!";if(e[0]!=="!")return t(`Not a valid tag: ${e}`),null;if(e[1]==="<"){let o=e.slice(2,-1);return o==="!"||o==="!!"?(t(`Verbatim tags aren't resolved, so ${e} is invalid.`),null):(e[e.length-1]!==">"&&t("Verbatim tags must end with a >"),o)}let[,s,r]=e.match(/^(.*!)([^!]*)$/s);r||t(`The ${e} tag has no suffix`);let i=this.tags[s];if(i)try{return i+decodeURIComponent(r)}catch(o){return t(String(o)),null}return s==="!"?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(let[t,s]of Object.entries(this.tags))if(e.startsWith(s))return t+sm(e.substring(s.length));return e[0]==="!"?e:`!<${e}>`}toString(e){let t=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],s=Object.entries(this.tags),r;if(e&&s.length>0&&Nc.isNode(e.contents)){let i={};em.visit(e.contents,(o,a)=>{Nc.isNode(a)&&a.tag&&(i[a.tag]=!0)}),r=Object.keys(i)}else r=[];for(let[i,o]of s)i==="!!"&&o==="tag:yaml.org,2002:"||(!e||r.some(a=>a.startsWith(o)))&&t.push(`%TAG ${i} ${o}`);return t.join(`
|
|
5
|
+
`)}};as.defaultYaml={explicit:!1,version:"1.2"};as.defaultTags={"!!":"tag:yaml.org,2002:"};Oc.Directives=as});var pn=T(cs=>{"use strict";var xc=$(),nm=os();function rm(n){if(/[\x00-\x19\s,[\]{}]/.test(n)){let t=`Anchor must not contain whitespace or control characters: ${JSON.stringify(n)}`;throw new Error(t)}return!0}function Mc(n){let e=new Set;return nm.visit(n,{Value(t,s){s.anchor&&e.add(s.anchor)}}),e}function Dc(n,e){for(let t=1;;++t){let s=`${n}${t}`;if(!e.has(s))return s}}function im(n,e){let t=[],s=new Map,r=null;return{onAnchor:i=>{t.push(i),r??(r=Mc(n));let o=Dc(e,r);return r.add(o),o},setAnchors:()=>{for(let i of t){let o=s.get(i);if(typeof o=="object"&&o.anchor&&(xc.isScalar(o.node)||xc.isCollection(o.node)))o.node.anchor=o.anchor;else{let a=new Error("Failed to resolve repeated object (this should not happen)");throw a.source=i,a}}},sourceObjects:s}}cs.anchorIsValid=rm;cs.anchorNames=Mc;cs.createNodeAnchors=im;cs.findNewAnchor=Dc});var vi=T(Lc=>{"use strict";function ls(n,e,t,s){if(s&&typeof s=="object")if(Array.isArray(s))for(let r=0,i=s.length;r<i;++r){let o=s[r],a=ls(n,s,String(r),o);a===void 0?delete s[r]:a!==o&&(s[r]=a)}else if(s instanceof Map)for(let r of Array.from(s.keys())){let i=s.get(r),o=ls(n,s,r,i);o===void 0?s.delete(r):o!==i&&s.set(r,o)}else if(s instanceof Set)for(let r of Array.from(s)){let i=ls(n,s,r,r);i===void 0?s.delete(r):i!==r&&(s.delete(r),s.add(i))}else for(let[r,i]of Object.entries(s)){let o=ls(n,s,r,i);o===void 0?delete s[r]:o!==i&&(s[r]=o)}return n.call(e,t,s)}Lc.applyReviver=ls});var Qe=T($c=>{"use strict";var om=$();function Pc(n,e,t){if(Array.isArray(n))return n.map((s,r)=>Pc(s,String(r),t));if(n&&typeof n.toJSON=="function"){if(!t||!om.hasAnchor(n))return n.toJSON(e,t);let s={aliasCount:0,count:1,res:void 0};t.anchors.set(n,s),t.onCreate=i=>{s.res=i,delete t.onCreate};let r=n.toJSON(e,t);return t.onCreate&&t.onCreate(r),r}return typeof n=="bigint"&&!t?.keep?Number(n):n}$c.toJS=Pc});var mn=T(Bc=>{"use strict";var am=vi(),Rc=$(),cm=Qe(),Ti=class{constructor(e){Object.defineProperty(this,Rc.NODE_TYPE,{value:e})}clone(){let e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:t,maxAliasCount:s,onAnchor:r,reviver:i}={}){if(!Rc.isDocument(e))throw new TypeError("A document argument is required");let o={anchors:new Map,doc:e,keep:!0,mapAsMap:t===!0,mapKeyWarned:!1,maxAliasCount:typeof s=="number"?s:100},a=cm.toJS(this,"",o);if(typeof r=="function")for(let{count:l,res:c}of o.anchors.values())r(c,l);return typeof i=="function"?am.applyReviver(i,{"":a},"",a):a}};Bc.NodeBase=Ti});var ds=T(Uc=>{"use strict";var lm=pn(),dm=os(),Pt=$(),um=mn(),hm=Qe(),Ii=class extends um.NodeBase{constructor(e){super(Pt.ALIAS),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(e,t){let s;t?.aliasResolveCache?s=t.aliasResolveCache:(s=[],dm.visit(e,{Node:(i,o)=>{(Pt.isAlias(o)||Pt.hasAnchor(o))&&s.push(o)}}),t&&(t.aliasResolveCache=s));let r;for(let i of s){if(i===this)break;i.anchor===this.source&&(r=i)}return r}toJSON(e,t){if(!t)return{source:this.source};let{anchors:s,doc:r,maxAliasCount:i}=t,o=this.resolve(r,t);if(!o){let l=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new ReferenceError(l)}let a=s.get(o);if(a||(hm.toJS(o,null,t),a=s.get(o)),a?.res===void 0){let l="This should not happen: Alias anchor was not resolved?";throw new ReferenceError(l)}if(i>=0&&(a.count+=1,a.aliasCount===0&&(a.aliasCount=gn(r,o,s)),a.count*a.aliasCount>i)){let l="Excessive alias count indicates a resource exhaustion attack";throw new ReferenceError(l)}return a.res}toString(e,t,s){let r=`*${this.source}`;if(e){if(lm.anchorIsValid(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){let i=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new Error(i)}if(e.implicitKey)return`${r} `}return r}};function gn(n,e,t){if(Pt.isAlias(e)){let s=e.resolve(n),r=t&&s&&t.get(s);return r?r.count*r.aliasCount:0}else if(Pt.isCollection(e)){let s=0;for(let r of e.items){let i=gn(n,r,t);i>s&&(s=i)}return s}else if(Pt.isPair(e)){let s=gn(n,e.key,t),r=gn(n,e.value,t);return Math.max(s,r)}return 1}Uc.Alias=Ii});var Q=T(Ai=>{"use strict";var fm=$(),pm=mn(),mm=Qe(),gm=n=>!n||typeof n!="function"&&typeof n!="object",Xe=class extends pm.NodeBase{constructor(e){super(fm.SCALAR),this.value=e}toJSON(e,t){return t?.keep?this.value:mm.toJS(this.value,e,t)}toString(){return String(this.value)}};Xe.BLOCK_FOLDED="BLOCK_FOLDED";Xe.BLOCK_LITERAL="BLOCK_LITERAL";Xe.PLAIN="PLAIN";Xe.QUOTE_DOUBLE="QUOTE_DOUBLE";Xe.QUOTE_SINGLE="QUOTE_SINGLE";Ai.Scalar=Xe;Ai.isScalarValue=gm});var us=T(jc=>{"use strict";var ym=ds(),ht=$(),qc=Q(),wm="tag:yaml.org,2002:";function Sm(n,e,t){if(e){let s=t.filter(i=>i.tag===e),r=s.find(i=>!i.format)??s[0];if(!r)throw new Error(`Tag ${e} not found`);return r}return t.find(s=>s.identify?.(n)&&!s.format)}function bm(n,e,t){if(ht.isDocument(n)&&(n=n.contents),ht.isNode(n))return n;if(ht.isPair(n)){let u=t.schema[ht.MAP].createNode?.(t.schema,null,t);return u.items.push(n),u}(n instanceof String||n instanceof Number||n instanceof Boolean||typeof BigInt<"u"&&n instanceof BigInt)&&(n=n.valueOf());let{aliasDuplicateObjects:s,onAnchor:r,onTagObj:i,schema:o,sourceObjects:a}=t,l;if(s&&n&&typeof n=="object"){if(l=a.get(n),l)return l.anchor??(l.anchor=r(n)),new ym.Alias(l.anchor);l={anchor:null,node:null},a.set(n,l)}e?.startsWith("!!")&&(e=wm+e.slice(2));let c=Sm(n,e,o.tags);if(!c){if(n&&typeof n.toJSON=="function"&&(n=n.toJSON()),!n||typeof n!="object"){let u=new qc.Scalar(n);return l&&(l.node=u),u}c=n instanceof Map?o[ht.MAP]:Symbol.iterator in Object(n)?o[ht.SEQ]:o[ht.MAP]}i&&(i(c),delete t.onTagObj);let d=c?.createNode?c.createNode(t.schema,n,t):typeof c?.nodeClass?.from=="function"?c.nodeClass.from(t.schema,n,t):new qc.Scalar(n);return e?d.tag=e:c.default||(d.tag=c.tag),l&&(l.node=d),d}jc.createNode=bm});var wn=T(yn=>{"use strict";var _m=us(),Ne=$(),km=mn();function Ci(n,e,t){let s=t;for(let r=e.length-1;r>=0;--r){let i=e[r];if(typeof i=="number"&&Number.isInteger(i)&&i>=0){let o=[];o[i]=s,s=o}else s=new Map([[i,s]])}return _m.createNode(s,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw new Error("This should not happen, please report a bug.")},schema:n,sourceObjects:new Map})}var Fc=n=>n==null||typeof n=="object"&&!!n[Symbol.iterator]().next().done,Ei=class extends km.NodeBase{constructor(e,t){super(e),Object.defineProperty(this,"schema",{value:t,configurable:!0,enumerable:!1,writable:!0})}clone(e){let t=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(t.schema=e),t.items=t.items.map(s=>Ne.isNode(s)||Ne.isPair(s)?s.clone(e):s),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(Fc(e))this.add(t);else{let[s,...r]=e,i=this.get(s,!0);if(Ne.isCollection(i))i.addIn(r,t);else if(i===void 0&&this.schema)this.set(s,Ci(this.schema,r,t));else throw new Error(`Expected YAML collection at ${s}. Remaining path: ${r}`)}}deleteIn(e){let[t,...s]=e;if(s.length===0)return this.delete(t);let r=this.get(t,!0);if(Ne.isCollection(r))return r.deleteIn(s);throw new Error(`Expected YAML collection at ${t}. Remaining path: ${s}`)}getIn(e,t){let[s,...r]=e,i=this.get(s,!0);return r.length===0?!t&&Ne.isScalar(i)?i.value:i:Ne.isCollection(i)?i.getIn(r,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!Ne.isPair(t))return!1;let s=t.value;return s==null||e&&Ne.isScalar(s)&&s.value==null&&!s.commentBefore&&!s.comment&&!s.tag})}hasIn(e){let[t,...s]=e;if(s.length===0)return this.has(t);let r=this.get(t,!0);return Ne.isCollection(r)?r.hasIn(s):!1}setIn(e,t){let[s,...r]=e;if(r.length===0)this.set(s,t);else{let i=this.get(s,!0);if(Ne.isCollection(i))i.setIn(r,t);else if(i===void 0&&this.schema)this.set(s,Ci(this.schema,r,t));else throw new Error(`Expected YAML collection at ${s}. Remaining path: ${r}`)}}};yn.Collection=Ei;yn.collectionFromPath=Ci;yn.isEmptyPath=Fc});var hs=T(Sn=>{"use strict";var vm=n=>n.replace(/^(?!$)(?: $)?/gm,"#");function Ni(n,e){return/^\n+$/.test(n)?n.substring(1):e?n.replace(/^(?! *$)/gm,e):n}var Tm=(n,e,t)=>n.endsWith(`
|
|
6
|
+
`)?Ni(t,e):t.includes(`
|
|
6
7
|
`)?`
|
|
7
|
-
`+
|
|
8
|
-
`)t===
|
|
9
|
-
`&&
|
|
10
|
-
`&&A!==" "&&(f
|
|
11
|
-
${e}${
|
|
12
|
-
${e}${
|
|
13
|
-
`);
|
|
14
|
-
`){if(i-o>
|
|
8
|
+
`+Ni(t,e):(n.endsWith(" ")?"":" ")+t;Sn.indentComment=Ni;Sn.lineComment=Tm;Sn.stringifyComment=vm});var Gc=T(fs=>{"use strict";var Im="flow",Oi="block",bn="quoted";function Am(n,e,t="flow",{indentAtStart:s,lineWidth:r=80,minContentWidth:i=20,onFold:o,onOverflow:a}={}){if(!r||r<0)return n;r<i&&(i=0);let l=Math.max(1+i,1+r-e.length);if(n.length<=l)return n;let c=[],d={},u=r-e.length;typeof s=="number"&&(s>r-Math.max(2,i)?c.push(0):u=r-s);let h,p,g=!1,f=-1,y=-1,w=-1;t===Oi&&(f=Kc(n,f,e.length),f!==-1&&(u=f+l));for(let b;b=n[f+=1];){if(t===bn&&b==="\\"){switch(y=f,n[f+1]){case"x":f+=3;break;case"u":f+=5;break;case"U":f+=9;break;default:f+=1}w=f}if(b===`
|
|
9
|
+
`)t===Oi&&(f=Kc(n,f,e.length)),u=f+e.length+l,h=void 0;else{if(b===" "&&p&&p!==" "&&p!==`
|
|
10
|
+
`&&p!==" "){let A=n[f+1];A&&A!==" "&&A!==`
|
|
11
|
+
`&&A!==" "&&(h=f)}if(f>=u)if(h)c.push(h),u=h+l,h=void 0;else if(t===bn){for(;p===" "||p===" ";)p=b,b=n[f+=1],g=!0;let A=f>w+1?f-2:y-1;if(d[A])return n;c.push(A),d[A]=!0,u=A+l,h=void 0}else g=!0}p=b}if(g&&a&&a(),c.length===0)return n;o&&o();let S=n.slice(0,c[0]);for(let b=0;b<c.length;++b){let A=c[b],v=c[b+1]||n.length;A===0?S=`
|
|
12
|
+
${e}${n.slice(0,v)}`:(t===bn&&d[A]&&(S+=`${n[A]}\\`),S+=`
|
|
13
|
+
${e}${n.slice(A+1,v)}`)}return S}function Kc(n,e,t){let s=e,r=e+1,i=n[r];for(;i===" "||i===" ";)if(e<r+t)i=n[++e];else{do i=n[++e];while(i&&i!==`
|
|
14
|
+
`);s=e,r=e+1,i=n[r]}return s}fs.FOLD_BLOCK=Oi;fs.FOLD_FLOW=Im;fs.FOLD_QUOTED=bn;fs.foldFlowLines=Am});var ms=T(Hc=>{"use strict";var Te=Q(),Ze=Gc(),kn=(n,e)=>({indentAtStart:e?n.indent.length:n.indentAtStart,lineWidth:n.options.lineWidth,minContentWidth:n.options.minContentWidth}),vn=n=>/^(%|---|\.\.\.)/m.test(n);function Cm(n,e,t){if(!e||e<0)return!1;let s=e-t,r=n.length;if(r<=s)return!1;for(let i=0,o=0;i<r;++i)if(n[i]===`
|
|
15
|
+
`){if(i-o>s)return!0;if(o=i+1,r-o<=s)return!1}return!0}function ps(n,e){let t=JSON.stringify(n);if(e.options.doubleQuotedAsJSON)return t;let{implicitKey:s}=e,r=e.options.doubleQuotedMinMultiLineLength,i=e.indent||(vn(n)?" ":""),o="",a=0;for(let l=0,c=t[l];c;c=t[++l])if(c===" "&&t[l+1]==="\\"&&t[l+2]==="n"&&(o+=t.slice(a,l)+"\\ ",l+=1,a=l,c="\\"),c==="\\")switch(t[l+1]){case"u":{o+=t.slice(a,l);let d=t.substr(l+2,4);switch(d){case"0000":o+="\\0";break;case"0007":o+="\\a";break;case"000b":o+="\\v";break;case"001b":o+="\\e";break;case"0085":o+="\\N";break;case"00a0":o+="\\_";break;case"2028":o+="\\L";break;case"2029":o+="\\P";break;default:d.substr(0,2)==="00"?o+="\\x"+d.substr(2):o+=t.substr(l,6)}l+=5,a=l+1}break;case"n":if(s||t[l+2]==='"'||t.length<r)l+=1;else{for(o+=t.slice(a,l)+`
|
|
15
16
|
|
|
16
17
|
`;t[l+2]==="\\"&&t[l+3]==="n"&&t[l+4]!=='"';)o+=`
|
|
17
|
-
`,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,
|
|
18
|
-
`)||/[ \t]\n|\n[ \t]/.test(
|
|
19
|
-
${t}`)+"'";return e.implicitKey?
|
|
18
|
+
`,l+=2;o+=i,t[l+2]===" "&&(o+="\\"),l+=1,a=l+1}break;default:l+=1}return o=a?o+t.slice(a):t,s?o:Ze.foldFlowLines(o,i,Ze.FOLD_QUOTED,kn(e,!1))}function xi(n,e){if(e.options.singleQuote===!1||e.implicitKey&&n.includes(`
|
|
19
|
+
`)||/[ \t]\n|\n[ \t]/.test(n))return ps(n,e);let t=e.indent||(vn(n)?" ":""),s="'"+n.replace(/'/g,"''").replace(/\n+/g,`$&
|
|
20
|
+
${t}`)+"'";return e.implicitKey?s:Ze.foldFlowLines(s,t,Ze.FOLD_FLOW,kn(e,!1))}function $t(n,e){let{singleQuote:t}=e.options,s;if(t===!1)s=ps;else{let r=n.includes('"'),i=n.includes("'");r&&!i?s=xi:i&&!r?s=ps:s=t?xi:ps}return s(n,e)}var Mi;try{Mi=new RegExp(`(^|(?<!
|
|
20
21
|
))
|
|
21
22
|
+(?!
|
|
22
|
-
|$)`,"g")}catch{
|
|
23
|
+
|$)`,"g")}catch{Mi=/\n+(?!\n|$)/g}function _n({comment:n,type:e,value:t},s,r,i){let{blockQuote:o,commentString:a,lineWidth:l}=s.options;if(!o||/\n[\t ]+$/.test(t))return $t(t,s);let c=s.indent||(s.forceBlockIndent||vn(t)?" ":""),d=o==="literal"?!0:o==="folded"||e===Te.Scalar.BLOCK_FOLDED?!1:e===Te.Scalar.BLOCK_LITERAL?!0:!Cm(t,l,c.length);if(!t)return d?`|
|
|
23
24
|
`:`>
|
|
24
|
-
`;let u,
|
|
25
|
-
`&&
|
|
26
|
-
`);
|
|
27
|
-
`&&(
|
|
28
|
-
`)
|
|
29
|
-
$&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${c}`),
|
|
30
|
-
${c}${
|
|
31
|
-
${c}${
|
|
32
|
-
`)||d&&/[[\]{},]/.test(i))return
|
|
33
|
-
`)
|
|
34
|
-
`))return
|
|
35
|
-
${l}`);if(o){let f
|
|
36
|
-
${e.indent}${a}`:a}
|
|
37
|
-
${a}:`):(y=`${y}:`,
|
|
38
|
-
`:"",
|
|
39
|
-
${
|
|
40
|
-
`&&
|
|
41
|
-
|
|
42
|
-
`):
|
|
43
|
-
${t.indent}`}else if(!
|
|
44
|
-
`),
|
|
45
|
-
${t.indent}`)}}else(
|
|
46
|
-
`)&&(
|
|
47
|
-
${l}${
|
|
48
|
-
`}}return
|
|
49
|
-
`+
|
|
50
|
-
`))&&(c
|
|
51
|
-
${i}${
|
|
52
|
-
`;return`${
|
|
53
|
-
${
|
|
54
|
-
`:" ")}return
|
|
55
|
-
${
|
|
56
|
-
${i.comment}`:r.comment}r=n}s.items[t]=fn.isPair(r)?r:new Yo.Pair(r)}}else e("Expected a sequence for this tag");return s}function Yd(s,e,t){let{replacer:r}=t,n=new z0.YAMLSeq(s);n.tag="tag:yaml.org,2002:pairs";let i=0;if(e&&Symbol.iterator in Object(e))for(let o of e){typeof r=="function"&&(o=r.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(Yo.createPair(a,l,t))}return n}var X0={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:Wd,createNode:Yd};hn.createPairs=Yd;hn.pairs=X0;hn.resolvePairs=Wd});var Xo=w(zo=>{"use strict";var Jd=B(),Jo=at(),Us=ht(),Q0=pt(),zd=pn(),kt=class s extends Q0.YAMLSeq{constructor(){super(),this.add=Us.YAMLMap.prototype.add.bind(this),this.delete=Us.YAMLMap.prototype.delete.bind(this),this.get=Us.YAMLMap.prototype.get.bind(this),this.has=Us.YAMLMap.prototype.has.bind(this),this.set=Us.YAMLMap.prototype.set.bind(this),this.tag=s.tag}toJSON(e,t){if(!t)return super.toJSON(e);let r=new Map;t?.onCreate&&t.onCreate(r);for(let n of this.items){let i,o;if(Jd.isPair(n)?(i=Jo.toJS(n.key,"",t),o=Jo.toJS(n.value,i,t)):i=Jo.toJS(n,"",t),r.has(i))throw new Error("Ordered maps must not include duplicate keys");r.set(i,o)}return r}static from(e,t,r){let n=zd.createPairs(e,t,r),i=new this;return i.items=n.items,i}};kt.tag="tag:yaml.org,2002:omap";var Z0={collection:"seq",identify:s=>s instanceof Map,nodeClass:kt,default:!1,tag:"tag:yaml.org,2002:omap",resolve(s,e){let t=zd.resolvePairs(s,e),r=[];for(let{key:n}of t.items)Jd.isScalar(n)&&(r.includes(n.value)?e(`Ordered maps must not include duplicate keys: ${n.value}`):r.push(n.value));return Object.assign(new kt,t)},createNode:(s,e,t)=>kt.from(s,e,t)};zo.YAMLOMap=kt;zo.omap=Z0});var tu=w(Qo=>{"use strict";var Xd=se();function Qd({value:s,source:e},t){return e&&(s?Zd:eu).test.test(e)?e:s?t.options.trueStr:t.options.falseStr}var Zd={identify:s=>s===!0,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:()=>new Xd.Scalar(!0),stringify:Qd},eu={identify:s=>s===!1,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:()=>new Xd.Scalar(!1),stringify:Qd};Qo.falseTag=eu;Qo.trueTag=Zd});var su=w(mn=>{"use strict";var eb=se(),Zo=Yt(),tb={identify:s=>typeof s=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:s=>s.slice(-3).toLowerCase()==="nan"?NaN:s[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:Zo.stringifyNumber},sb={identify:s=>typeof s=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:s=>parseFloat(s.replace(/_/g,"")),stringify(s){let e=Number(s.value);return isFinite(e)?e.toExponential():Zo.stringifyNumber(s)}},rb={identify:s=>typeof s=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve(s){let e=new eb.Scalar(parseFloat(s.replace(/_/g,""))),t=s.indexOf(".");if(t!==-1){let r=s.substring(t+1).replace(/_/g,"");r[r.length-1]==="0"&&(e.minFractionDigits=r.length)}return e},stringify:Zo.stringifyNumber};mn.float=rb;mn.floatExp=sb;mn.floatNaN=tb});var nu=w(Ks=>{"use strict";var ru=Yt(),Fs=s=>typeof s=="bigint"||Number.isInteger(s);function gn(s,e,t,{intAsBigInt:r}){let n=s[0];if((n==="-"||n==="+")&&(e+=1),s=s.substring(e).replace(/_/g,""),r){switch(t){case 2:s=`0b${s}`;break;case 8:s=`0o${s}`;break;case 16:s=`0x${s}`;break}let o=BigInt(s);return n==="-"?BigInt(-1)*o:o}let i=parseInt(s,t);return n==="-"?-1*i:i}function ea(s,e,t){let{value:r}=s;if(Fs(r)){let n=r.toString(e);return r<0?"-"+t+n.substr(1):t+n}return ru.stringifyNumber(s)}var nb={identify:Fs,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(s,e,t)=>gn(s,2,2,t),stringify:s=>ea(s,2,"0b")},ib={identify:Fs,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(s,e,t)=>gn(s,1,8,t),stringify:s=>ea(s,8,"0")},ob={identify:Fs,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(s,e,t)=>gn(s,0,10,t),stringify:ru.stringifyNumber},ab={identify:Fs,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(s,e,t)=>gn(s,2,16,t),stringify:s=>ea(s,16,"0x")};Ks.int=ob;Ks.intBin=nb;Ks.intHex=ab;Ks.intOct=ib});var sa=w(ta=>{"use strict";var Sn=B(),yn=ut(),wn=ht(),At=class s extends wn.YAMLMap{constructor(e){super(e),this.tag=s.tag}add(e){let t;Sn.isPair(e)?t=e:e&&typeof e=="object"&&"key"in e&&"value"in e&&e.value===null?t=new yn.Pair(e.key,null):t=new yn.Pair(e,null),wn.findPair(this.items,t.key)||this.items.push(t)}get(e,t){let r=wn.findPair(this.items,e);return!t&&Sn.isPair(r)?Sn.isScalar(r.key)?r.key.value:r.key:r}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 r=wn.findPair(this.items,e);r&&!t?this.items.splice(this.items.indexOf(r),1):!r&&t&&this.items.push(new yn.Pair(e))}toJSON(e,t){return super.toJSON(e,t,Set)}toString(e,t,r){if(!e)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},e,{allNullValues:!0}),t,r);throw new Error("Set items must all have null values")}static from(e,t,r){let{replacer:n}=r,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(yn.createPair(o,null,r));return i}};At.tag="tag:yaml.org,2002:set";var cb={collection:"map",identify:s=>s instanceof Set,nodeClass:At,default:!1,tag:"tag:yaml.org,2002:set",createNode:(s,e,t)=>At.from(s,e,t),resolve(s,e){if(Sn.isMap(s)){if(s.hasAllNullValues(!0))return Object.assign(new At,s);e("Set items must all have null values")}else e("Expected a mapping for this tag");return s}};ta.YAMLSet=At;ta.set=cb});var na=w(bn=>{"use strict";var lb=Yt();function ra(s,e){let t=s[0],r=t==="-"||t==="+"?s.substring(1):s,n=o=>e?BigInt(o):Number(o),i=r.replace(/_/g,"").split(":").reduce((o,a)=>o*n(60)+n(a),n(0));return t==="-"?n(-1)*i:i}function iu(s){let{value:e}=s,t=o=>o;if(typeof e=="bigint")t=o=>BigInt(o);else if(isNaN(e)||!isFinite(e))return lb.stringifyNumber(s);let r="";e<0&&(r="-",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))),r+i.map(o=>String(o).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}var db={identify:s=>typeof s=="bigint"||Number.isInteger(s),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:(s,e,{intAsBigInt:t})=>ra(s,t),stringify:iu},ub={identify:s=>typeof s=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:s=>ra(s,!1),stringify:iu},ou={identify:s=>s 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(s){let e=s.match(ou.test);if(!e)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");let[,t,r,n,i,o,a]=e.map(Number),l=e[7]?Number((e[7]+"00").substr(1,3)):0,c=Date.UTC(t,r-1,n,i||0,o||0,a||0,l),d=e[8];if(d&&d!=="Z"){let u=ra(d,!1);Math.abs(u)<30&&(u*=60),c-=6e4*u}return new Date(c)},stringify:({value:s})=>s?.toISOString().replace(/(T00:00:00)?\.000Z$/,"")??""};bn.floatTime=ub;bn.intTime=db;bn.timestamp=ou});var lu=w(cu=>{"use strict";var fb=Vt(),hb=an(),pb=Wt(),mb=Bs(),gb=Wo(),au=tu(),ia=su(),vn=nu(),yb=Qr(),wb=Xo(),Sb=pn(),bb=sa(),oa=na(),vb=[fb.map,pb.seq,mb.string,hb.nullTag,au.trueTag,au.falseTag,vn.intBin,vn.intOct,vn.int,vn.intHex,ia.floatNaN,ia.floatExp,ia.float,gb.binary,yb.merge,wb.omap,Sb.pairs,bb.set,oa.intTime,oa.floatTime,oa.timestamp];cu.schema=vb});var Su=w(la=>{"use strict";var hu=Vt(),_b=an(),pu=Wt(),Tb=Bs(),Eb=Bo(),aa=Uo(),ca=Ko(),Ib=Fd(),kb=Gd(),mu=Wo(),Hs=Qr(),gu=Xo(),yu=pn(),du=lu(),wu=sa(),_n=na(),uu=new Map([["core",Ib.schema],["failsafe",[hu.map,pu.seq,Tb.string]],["json",kb.schema],["yaml11",du.schema],["yaml-1.1",du.schema]]),fu={binary:mu.binary,bool:Eb.boolTag,float:aa.float,floatExp:aa.floatExp,floatNaN:aa.floatNaN,floatTime:_n.floatTime,int:ca.int,intHex:ca.intHex,intOct:ca.intOct,intTime:_n.intTime,map:hu.map,merge:Hs.merge,null:_b.nullTag,omap:gu.omap,pairs:yu.pairs,seq:pu.seq,set:wu.set,timestamp:_n.timestamp},Ab={"tag:yaml.org,2002:binary":mu.binary,"tag:yaml.org,2002:merge":Hs.merge,"tag:yaml.org,2002:omap":gu.omap,"tag:yaml.org,2002:pairs":yu.pairs,"tag:yaml.org,2002:set":wu.set,"tag:yaml.org,2002:timestamp":_n.timestamp};function Cb(s,e,t){let r=uu.get(e);if(r&&!s)return t&&!r.includes(Hs.merge)?r.concat(Hs.merge):r.slice();let n=r;if(!n)if(Array.isArray(s))n=[];else{let i=Array.from(uu.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(s))for(let i of s)n=n.concat(i);else typeof s=="function"&&(n=s(n.slice()));return t&&(n=n.concat(Hs.merge)),n.reduce((i,o)=>{let a=typeof o=="string"?fu[o]:o;if(!a){let l=JSON.stringify(o),c=Object.keys(fu).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},[])}la.coreKnownTags=Ab;la.getTags=Cb});var fa=w(bu=>{"use strict";var da=B(),Nb=Vt(),Ob=Wt(),xb=Bs(),Tn=Su(),Lb=(s,e)=>s.key<e.key?-1:s.key>e.key?1:0,ua=class s{constructor({compat:e,customTags:t,merge:r,resolveKnownTags:n,schema:i,sortMapEntries:o,toStringDefaults:a}){this.compat=Array.isArray(e)?Tn.getTags(e,"compat"):e?Tn.getTags(null,e):null,this.name=typeof i=="string"&&i||"core",this.knownTags=n?Tn.coreKnownTags:{},this.tags=Tn.getTags(t,this.name,r),this.toStringOptions=a??null,Object.defineProperty(this,da.MAP,{value:Nb.map}),Object.defineProperty(this,da.SCALAR,{value:xb.string}),Object.defineProperty(this,da.SEQ,{value:Ob.seq}),this.sortMapEntries=typeof o=="function"?o:o===!0?Lb:null}clone(){let e=Object.create(s.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}};bu.Schema=ua});var _u=w(vu=>{"use strict";var Db=B(),ha=Rs(),Gs=xs();function Mb(s,e){let t=[],r=e.directives===!0;if(e.directives!==!1&&s.directives){let l=s.directives.toString(s);l?(t.push(l),r=!0):s.directives.docStart&&(r=!0)}r&&t.push("---");let n=ha.createStringifyContext(s,e),{commentString:i}=n.options;if(s.commentBefore){t.length!==1&&t.unshift("");let l=i(s.commentBefore);t.unshift(Gs.indentComment(l,""))}let o=!1,a=null;if(s.contents){if(Db.isNode(s.contents)){if(s.contents.spaceBefore&&r&&t.push(""),s.contents.commentBefore){let d=i(s.contents.commentBefore);t.push(Gs.indentComment(d,""))}n.forceBlockIndent=!!s.comment,a=s.contents.comment}let l=a?void 0:()=>o=!0,c=ha.stringify(s.contents,n,()=>a=null,l);a&&(c+=Gs.lineComment(c,"",i(a))),(c[0]==="|"||c[0]===">")&&t[t.length-1]==="---"?t[t.length-1]=`--- ${c}`:t.push(c)}else t.push(ha.stringify(s.contents,n));if(s.directives?.docEnd)if(s.comment){let l=i(s.comment);l.includes(`
|
|
57
|
-
`)?(t.push("..."),t.push(
|
|
25
|
+
`;let u,h;for(h=t.length;h>0;--h){let v=t[h-1];if(v!==`
|
|
26
|
+
`&&v!==" "&&v!==" ")break}let p=t.substring(h),g=p.indexOf(`
|
|
27
|
+
`);g===-1?u="-":t===p||g!==p.length-1?(u="+",i&&i()):u="",p&&(t=t.slice(0,-p.length),p[p.length-1]===`
|
|
28
|
+
`&&(p=p.slice(0,-1)),p=p.replace(Mi,`$&${c}`));let f=!1,y,w=-1;for(y=0;y<t.length;++y){let v=t[y];if(v===" ")f=!0;else if(v===`
|
|
29
|
+
`)w=y;else break}let S=t.substring(0,w<y?w+1:y);S&&(t=t.substring(S.length),S=S.replace(/\n+/g,`$&${c}`));let A=(f?c?"2":"1":"")+u;if(n&&(A+=" "+a(n.replace(/ ?[\r\n]+/g," ")),r&&r()),!d){let v=t.replace(/\n+/g,`
|
|
30
|
+
$&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${c}`),C=!1,M=kn(s,!0);o!=="folded"&&e!==Te.Scalar.BLOCK_FOLDED&&(M.onOverflow=()=>{C=!0});let _=Ze.foldFlowLines(`${S}${v}${p}`,c,Ze.FOLD_BLOCK,M);if(!C)return`>${A}
|
|
31
|
+
${c}${_}`}return t=t.replace(/\n+/g,`$&${c}`),`|${A}
|
|
32
|
+
${c}${S}${t}${p}`}function Em(n,e,t,s){let{type:r,value:i}=n,{actualString:o,implicitKey:a,indent:l,indentStep:c,inFlow:d}=e;if(a&&i.includes(`
|
|
33
|
+
`)||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(`
|
|
34
|
+
`)?$t(i,e):_n(n,e,t,s);if(!a&&!d&&r!==Te.Scalar.PLAIN&&i.includes(`
|
|
35
|
+
`))return _n(n,e,t,s);if(vn(i)){if(l==="")return e.forceBlockIndent=!0,_n(n,e,t,s);if(a&&l===c)return $t(i,e)}let u=i.replace(/\n+/g,`$&
|
|
36
|
+
${l}`);if(o){let h=f=>f.default&&f.tag!=="tag:yaml.org,2002:str"&&f.test?.test(u),{compat:p,tags:g}=e.doc.schema;if(g.some(h)||p?.some(h))return $t(i,e)}return a?u:Ze.foldFlowLines(u,l,Ze.FOLD_FLOW,kn(e,!1))}function Nm(n,e,t,s){let{implicitKey:r,inFlow:i}=e,o=typeof n.value=="string"?n:Object.assign({},n,{value:String(n.value)}),{type:a}=n;a!==Te.Scalar.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(o.value)&&(a=Te.Scalar.QUOTE_DOUBLE);let l=d=>{switch(d){case Te.Scalar.BLOCK_FOLDED:case Te.Scalar.BLOCK_LITERAL:return r||i?$t(o.value,e):_n(o,e,t,s);case Te.Scalar.QUOTE_DOUBLE:return ps(o.value,e);case Te.Scalar.QUOTE_SINGLE:return xi(o.value,e);case Te.Scalar.PLAIN:return Em(o,e,t,s);default:return null}},c=l(a);if(c===null){let{defaultKeyType:d,defaultStringType:u}=e.options,h=r&&d||u;if(c=l(h),c===null)throw new Error(`Unsupported default string type ${h}`)}return c}Hc.stringifyString=Nm});var gs=T(Di=>{"use strict";var Om=pn(),et=$(),xm=hs(),Mm=ms();function Dm(n,e){let t=Object.assign({blockQuote:!0,commentString:xm.stringifyComment,defaultKeyType:null,defaultStringType:"PLAIN",directives:null,doubleQuotedAsJSON:!1,doubleQuotedMinMultiLineLength:40,falseStr:"false",flowCollectionPadding:!0,indentSeq:!0,lineWidth:80,minContentWidth:20,nullStr:"null",simpleKeys:!1,singleQuote:null,trailingComma:!1,trueStr:"true",verifyAliasOrder:!0},n.schema.toStringOptions,e),s;switch(t.collectionStyle){case"block":s=!1;break;case"flow":s=!0;break;default:s=null}return{anchors:new Set,doc:n,flowCollectionPadding:t.flowCollectionPadding?" ":"",indent:"",indentStep:typeof t.indent=="number"?" ".repeat(t.indent):" ",inFlow:s,options:t}}function Lm(n,e){if(e.tag){let r=n.filter(i=>i.tag===e.tag);if(r.length>0)return r.find(i=>i.format===e.format)??r[0]}let t,s;if(et.isScalar(e)){s=e.value;let r=n.filter(i=>i.identify?.(s));if(r.length>1){let i=r.filter(o=>o.test);i.length>0&&(r=i)}t=r.find(i=>i.format===e.format)??r.find(i=>!i.format)}else s=e,t=n.find(r=>r.nodeClass&&s instanceof r.nodeClass);if(!t){let r=s?.constructor?.name??(s===null?"null":typeof s);throw new Error(`Tag not resolved for ${r} value`)}return t}function Pm(n,e,{anchors:t,doc:s}){if(!s.directives)return"";let r=[],i=(et.isScalar(n)||et.isCollection(n))&&n.anchor;i&&Om.anchorIsValid(i)&&(t.add(i),r.push(`&${i}`));let o=n.tag??(e.default?null:e.tag);return o&&r.push(s.directives.tagString(o)),r.join(" ")}function $m(n,e,t,s){if(et.isPair(n))return n.toString(e,t,s);if(et.isAlias(n)){if(e.doc.directives)return n.toString(e);if(e.resolvedAliases?.has(n))throw new TypeError("Cannot stringify circular structure without alias nodes");e.resolvedAliases?e.resolvedAliases.add(n):e.resolvedAliases=new Set([n]),n=n.resolve(e.doc)}let r,i=et.isNode(n)?n:e.doc.createNode(n,{onTagObj:l=>r=l});r??(r=Lm(e.doc.schema.tags,i));let o=Pm(i,r,e);o.length>0&&(e.indentAtStart=(e.indentAtStart??0)+o.length+1);let a=typeof r.stringify=="function"?r.stringify(i,e,t,s):et.isScalar(i)?Mm.stringifyString(i,e,t,s):i.toString(e,t,s);return o?et.isScalar(i)||a[0]==="{"||a[0]==="["?`${o} ${a}`:`${o}
|
|
37
|
+
${e.indent}${a}`:a}Di.createStringifyContext=Dm;Di.stringify=$m});var Jc=T(Yc=>{"use strict";var Be=$(),Wc=Q(),Vc=gs(),ys=hs();function Rm({key:n,value:e},t,s,r){let{allNullValues:i,doc:o,indent:a,indentStep:l,options:{commentString:c,indentSeq:d,simpleKeys:u}}=t,h=Be.isNode(n)&&n.comment||null;if(u){if(h)throw new Error("With simple keys, key nodes cannot have comments");if(Be.isCollection(n)||!Be.isNode(n)&&typeof n=="object"){let M="With simple keys, collection cannot be used as a key value";throw new Error(M)}}let p=!u&&(!n||h&&e==null&&!t.inFlow||Be.isCollection(n)||(Be.isScalar(n)?n.type===Wc.Scalar.BLOCK_FOLDED||n.type===Wc.Scalar.BLOCK_LITERAL:typeof n=="object"));t=Object.assign({},t,{allNullValues:!1,implicitKey:!p&&(u||!i),indent:a+l});let g=!1,f=!1,y=Vc.stringify(n,t,()=>g=!0,()=>f=!0);if(!p&&!t.inFlow&&y.length>1024){if(u)throw new Error("With simple keys, single line scalar must not span more than 1024 characters");p=!0}if(t.inFlow){if(i||e==null)return g&&s&&s(),y===""?"?":p?`? ${y}`:y}else if(i&&!u||e==null&&p)return y=`? ${y}`,h&&!g?y+=ys.lineComment(y,t.indent,c(h)):f&&r&&r(),y;g&&(h=null),p?(h&&(y+=ys.lineComment(y,t.indent,c(h))),y=`? ${y}
|
|
38
|
+
${a}:`):(y=`${y}:`,h&&(y+=ys.lineComment(y,t.indent,c(h))));let w,S,b;Be.isNode(e)?(w=!!e.spaceBefore,S=e.commentBefore,b=e.comment):(w=!1,S=null,b=null,e&&typeof e=="object"&&(e=o.createNode(e))),t.implicitKey=!1,!p&&!h&&Be.isScalar(e)&&(t.indentAtStart=y.length+1),f=!1,!d&&l.length>=2&&!t.inFlow&&!p&&Be.isSeq(e)&&!e.flow&&!e.tag&&!e.anchor&&(t.indent=t.indent.substring(2));let A=!1,v=Vc.stringify(e,t,()=>A=!0,()=>f=!0),C=" ";if(h||w||S){if(C=w?`
|
|
39
|
+
`:"",S){let M=c(S);C+=`
|
|
40
|
+
${ys.indentComment(M,t.indent)}`}v===""&&!t.inFlow?C===`
|
|
41
|
+
`&&b&&(C=`
|
|
42
|
+
|
|
43
|
+
`):C+=`
|
|
44
|
+
${t.indent}`}else if(!p&&Be.isCollection(e)){let M=v[0],_=v.indexOf(`
|
|
45
|
+
`),L=_!==-1,j=t.inFlow??e.flow??e.items.length===0;if(L||!j){let J=!1;if(L&&(M==="&"||M==="!")){let K=v.indexOf(" ");M==="&"&&K!==-1&&K<_&&v[K+1]==="!"&&(K=v.indexOf(" ",K+1)),(K===-1||_<K)&&(J=!0)}J||(C=`
|
|
46
|
+
${t.indent}`)}}else(v===""||v[0]===`
|
|
47
|
+
`)&&(C="");return y+=C+v,t.inFlow?A&&s&&s():b&&!A?y+=ys.lineComment(y,t.indent,c(b)):f&&r&&r(),y}Yc.stringifyPair=Rm});var Pi=T(Li=>{"use strict";var zc=F("process");function Bm(n,...e){n==="debug"&&console.log(...e)}function Um(n,e){(n==="debug"||n==="warn")&&(typeof zc.emitWarning=="function"?zc.emitWarning(e):console.warn(e))}Li.debug=Bm;Li.warn=Um});var Cn=T(An=>{"use strict";var ws=$(),Qc=Q(),Tn="<<",In={identify:n=>n===Tn||typeof n=="symbol"&&n.description===Tn,default:"key",tag:"tag:yaml.org,2002:merge",test:/^<<$/,resolve:()=>Object.assign(new Qc.Scalar(Symbol(Tn)),{addToJSMap:Xc}),stringify:()=>Tn},qm=(n,e)=>(In.identify(e)||ws.isScalar(e)&&(!e.type||e.type===Qc.Scalar.PLAIN)&&In.identify(e.value))&&n?.doc.schema.tags.some(t=>t.tag===In.tag&&t.default);function Xc(n,e,t){if(t=n&&ws.isAlias(t)?t.resolve(n.doc):t,ws.isSeq(t))for(let s of t.items)$i(n,e,s);else if(Array.isArray(t))for(let s of t)$i(n,e,s);else $i(n,e,t)}function $i(n,e,t){let s=n&&ws.isAlias(t)?t.resolve(n.doc):t;if(!ws.isMap(s))throw new Error("Merge sources must be maps or map aliases");let r=s.toJSON(null,n,Map);for(let[i,o]of r)e instanceof Map?e.has(i)||e.set(i,o):e instanceof Set?e.add(i):Object.prototype.hasOwnProperty.call(e,i)||Object.defineProperty(e,i,{value:o,writable:!0,enumerable:!0,configurable:!0});return e}An.addMergeToJSMap=Xc;An.isMergeKey=qm;An.merge=In});var Bi=T(tl=>{"use strict";var jm=Pi(),Zc=Cn(),Fm=gs(),el=$(),Ri=Qe();function Km(n,e,{key:t,value:s}){if(el.isNode(t)&&t.addToJSMap)t.addToJSMap(n,e,s);else if(Zc.isMergeKey(n,t))Zc.addMergeToJSMap(n,e,s);else{let r=Ri.toJS(t,"",n);if(e instanceof Map)e.set(r,Ri.toJS(s,r,n));else if(e instanceof Set)e.add(r);else{let i=Gm(t,r,n),o=Ri.toJS(s,i,n);i in e?Object.defineProperty(e,i,{value:o,writable:!0,enumerable:!0,configurable:!0}):e[i]=o}}return e}function Gm(n,e,t){if(e===null)return"";if(typeof e!="object")return String(e);if(el.isNode(n)&&t?.doc){let s=Fm.createStringifyContext(t.doc,{});s.anchors=new Set;for(let i of t.anchors.keys())s.anchors.add(i.anchor);s.inFlow=!0,s.inStringifyKey=!0;let r=n.toString(s);if(!t.mapKeyWarned){let i=JSON.stringify(r);i.length>40&&(i=i.substring(0,36)+'..."'),jm.warn(t.doc.options.logLevel,`Keys with collection values will be stringified due to JS Object restrictions: ${i}. Set mapAsMap: true to use object keys.`),t.mapKeyWarned=!0}return r}return JSON.stringify(e)}tl.addPairToJSMap=Km});var tt=T(Ui=>{"use strict";var sl=us(),Hm=Jc(),Wm=Bi(),En=$();function Vm(n,e,t){let s=sl.createNode(n,void 0,t),r=sl.createNode(e,void 0,t);return new Nn(s,r)}var Nn=class n{constructor(e,t=null){Object.defineProperty(this,En.NODE_TYPE,{value:En.PAIR}),this.key=e,this.value=t}clone(e){let{key:t,value:s}=this;return En.isNode(t)&&(t=t.clone(e)),En.isNode(s)&&(s=s.clone(e)),new n(t,s)}toJSON(e,t){let s=t?.mapAsMap?new Map:{};return Wm.addPairToJSMap(t,s,this)}toString(e,t,s){return e?.doc?Hm.stringifyPair(this,e,t,s):JSON.stringify(this)}};Ui.Pair=Nn;Ui.createPair=Vm});var qi=T(rl=>{"use strict";var ft=$(),nl=gs(),On=hs();function Ym(n,e,t){return(e.inFlow??n.flow?zm:Jm)(n,e,t)}function Jm({comment:n,items:e},t,{blockItemPrefix:s,flowChars:r,itemIndent:i,onChompKeep:o,onComment:a}){let{indent:l,options:{commentString:c}}=t,d=Object.assign({},t,{indent:i,type:null}),u=!1,h=[];for(let g=0;g<e.length;++g){let f=e[g],y=null;if(ft.isNode(f))!u&&f.spaceBefore&&h.push(""),xn(t,h,f.commentBefore,u),f.comment&&(y=f.comment);else if(ft.isPair(f)){let S=ft.isNode(f.key)?f.key:null;S&&(!u&&S.spaceBefore&&h.push(""),xn(t,h,S.commentBefore,u))}u=!1;let w=nl.stringify(f,d,()=>y=null,()=>u=!0);y&&(w+=On.lineComment(w,i,c(y))),u&&y&&(u=!1),h.push(s+w)}let p;if(h.length===0)p=r.start+r.end;else{p=h[0];for(let g=1;g<h.length;++g){let f=h[g];p+=f?`
|
|
48
|
+
${l}${f}`:`
|
|
49
|
+
`}}return n?(p+=`
|
|
50
|
+
`+On.indentComment(c(n),l),a&&a()):u&&o&&o(),p}function zm({items:n},e,{flowChars:t,itemIndent:s}){let{indent:r,indentStep:i,flowCollectionPadding:o,options:{commentString:a}}=e;s+=i;let l=Object.assign({},e,{indent:s,inFlow:!0,type:null}),c=!1,d=0,u=[];for(let g=0;g<n.length;++g){let f=n[g],y=null;if(ft.isNode(f))f.spaceBefore&&u.push(""),xn(e,u,f.commentBefore,!1),f.comment&&(y=f.comment);else if(ft.isPair(f)){let S=ft.isNode(f.key)?f.key:null;S&&(S.spaceBefore&&u.push(""),xn(e,u,S.commentBefore,!1),S.comment&&(c=!0));let b=ft.isNode(f.value)?f.value:null;b?(b.comment&&(y=b.comment),b.commentBefore&&(c=!0)):f.value==null&&S?.comment&&(y=S.comment)}y&&(c=!0);let w=nl.stringify(f,l,()=>y=null);c||(c=u.length>d||w.includes(`
|
|
51
|
+
`)),g<n.length-1?w+=",":e.options.trailingComma&&(e.options.lineWidth>0&&(c||(c=u.reduce((S,b)=>S+b.length+2,2)+(w.length+2)>e.options.lineWidth)),c&&(w+=",")),y&&(w+=On.lineComment(w,s,a(y))),u.push(w),d=u.length}let{start:h,end:p}=t;if(u.length===0)return h+p;if(!c){let g=u.reduce((f,y)=>f+y.length+2,2);c=e.options.lineWidth>0&&g>e.options.lineWidth}if(c){let g=h;for(let f of u)g+=f?`
|
|
52
|
+
${i}${r}${f}`:`
|
|
53
|
+
`;return`${g}
|
|
54
|
+
${r}${p}`}else return`${h}${o}${u.join(" ")}${o}${p}`}function xn({indent:n,options:{commentString:e}},t,s,r){if(s&&r&&(s=s.replace(/^\n+/,"")),s){let i=On.indentComment(e(s),n);t.push(i.trimStart())}}rl.stringifyCollection=Ym});var nt=T(Fi=>{"use strict";var Qm=qi(),Xm=Bi(),Zm=wn(),st=$(),Mn=tt(),eg=Q();function Ss(n,e){let t=st.isScalar(e)?e.value:e;for(let s of n)if(st.isPair(s)&&(s.key===e||s.key===t||st.isScalar(s.key)&&s.key.value===t))return s}var ji=class extends Zm.Collection{static get tagName(){return"tag:yaml.org,2002:map"}constructor(e){super(st.MAP,e),this.items=[]}static from(e,t,s){let{keepUndefined:r,replacer:i}=s,o=new this(e),a=(l,c)=>{if(typeof i=="function")c=i.call(t,l,c);else if(Array.isArray(i)&&!i.includes(l))return;(c!==void 0||r)&&o.items.push(Mn.createPair(l,c,s))};if(t instanceof Map)for(let[l,c]of t)a(l,c);else if(t&&typeof t=="object")for(let l of Object.keys(t))a(l,t[l]);return typeof e.sortMapEntries=="function"&&o.items.sort(e.sortMapEntries),o}add(e,t){let s;st.isPair(e)?s=e:!e||typeof e!="object"||!("key"in e)?s=new Mn.Pair(e,e?.value):s=new Mn.Pair(e.key,e.value);let r=Ss(this.items,s.key),i=this.schema?.sortMapEntries;if(r){if(!t)throw new Error(`Key ${s.key} already set`);st.isScalar(r.value)&&eg.isScalarValue(s.value)?r.value.value=s.value:r.value=s.value}else if(i){let o=this.items.findIndex(a=>i(s,a)<0);o===-1?this.items.push(s):this.items.splice(o,0,s)}else this.items.push(s)}delete(e){let t=Ss(this.items,e);return t?this.items.splice(this.items.indexOf(t),1).length>0:!1}get(e,t){let r=Ss(this.items,e)?.value;return(!t&&st.isScalar(r)?r.value:r)??void 0}has(e){return!!Ss(this.items,e)}set(e,t){this.add(new Mn.Pair(e,t),!0)}toJSON(e,t,s){let r=s?new s:t?.mapAsMap?new Map:{};t?.onCreate&&t.onCreate(r);for(let i of this.items)Xm.addPairToJSMap(t,r,i);return r}toString(e,t,s){if(!e)return JSON.stringify(this);for(let r of this.items)if(!st.isPair(r))throw new Error(`Map items must all be pairs; found ${JSON.stringify(r)} instead`);return!e.allNullValues&&this.hasAllNullValues(!1)&&(e=Object.assign({},e,{allNullValues:!0})),Qm.stringifyCollection(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:s,onComment:t})}};Fi.YAMLMap=ji;Fi.findPair=Ss});var Rt=T(ol=>{"use strict";var tg=$(),il=nt(),sg={collection:"map",default:!0,nodeClass:il.YAMLMap,tag:"tag:yaml.org,2002:map",resolve(n,e){return tg.isMap(n)||e("Expected a mapping for this tag"),n},createNode:(n,e,t)=>il.YAMLMap.from(n,e,t)};ol.map=sg});var rt=T(al=>{"use strict";var ng=us(),rg=qi(),ig=wn(),Ln=$(),og=Q(),ag=Qe(),Ki=class extends ig.Collection{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(e){super(Ln.SEQ,e),this.items=[]}add(e){this.items.push(e)}delete(e){let t=Dn(e);return typeof t!="number"?!1:this.items.splice(t,1).length>0}get(e,t){let s=Dn(e);if(typeof s!="number")return;let r=this.items[s];return!t&&Ln.isScalar(r)?r.value:r}has(e){let t=Dn(e);return typeof t=="number"&&t<this.items.length}set(e,t){let s=Dn(e);if(typeof s!="number")throw new Error(`Expected a valid index, not ${e}.`);let r=this.items[s];Ln.isScalar(r)&&og.isScalarValue(t)?r.value=t:this.items[s]=t}toJSON(e,t){let s=[];t?.onCreate&&t.onCreate(s);let r=0;for(let i of this.items)s.push(ag.toJS(i,String(r++),t));return s}toString(e,t,s){return e?rg.stringifyCollection(this,e,{blockItemPrefix:"- ",flowChars:{start:"[",end:"]"},itemIndent:(e.indent||"")+" ",onChompKeep:s,onComment:t}):JSON.stringify(this)}static from(e,t,s){let{replacer:r}=s,i=new this(e);if(t&&Symbol.iterator in Object(t)){let o=0;for(let a of t){if(typeof r=="function"){let l=t instanceof Set?a:String(o++);a=r.call(t,l,a)}i.items.push(ng.createNode(a,void 0,s))}}return i}};function Dn(n){let e=Ln.isScalar(n)?n.value:n;return e&&typeof e=="string"&&(e=Number(e)),typeof e=="number"&&Number.isInteger(e)&&e>=0?e:null}al.YAMLSeq=Ki});var Bt=T(ll=>{"use strict";var cg=$(),cl=rt(),lg={collection:"seq",default:!0,nodeClass:cl.YAMLSeq,tag:"tag:yaml.org,2002:seq",resolve(n,e){return cg.isSeq(n)||e("Expected a sequence for this tag"),n},createNode:(n,e,t)=>cl.YAMLSeq.from(n,e,t)};ll.seq=lg});var bs=T(dl=>{"use strict";var dg=ms(),ug={identify:n=>typeof n=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:n=>n,stringify(n,e,t,s){return e=Object.assign({actualString:!0},e),dg.stringifyString(n,e,t,s)}};dl.string=ug});var Pn=T(fl=>{"use strict";var ul=Q(),hl={identify:n=>n==null,createNode:()=>new ul.Scalar(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new ul.Scalar(null),stringify:({source:n},e)=>typeof n=="string"&&hl.test.test(n)?n:e.options.nullStr};fl.nullTag=hl});var Gi=T(ml=>{"use strict";var hg=Q(),pl={identify:n=>typeof n=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:n=>new hg.Scalar(n[0]==="t"||n[0]==="T"),stringify({source:n,value:e},t){if(n&&pl.test.test(n)){let s=n[0]==="t"||n[0]==="T";if(e===s)return n}return e?t.options.trueStr:t.options.falseStr}};ml.boolTag=pl});var Ut=T(gl=>{"use strict";function fg({format:n,minFractionDigits:e,tag:t,value:s}){if(typeof s=="bigint")return String(s);let r=typeof s=="number"?s:Number(s);if(!isFinite(r))return isNaN(r)?".nan":r<0?"-.inf":".inf";let i=Object.is(s,-0)?"-0":JSON.stringify(s);if(!n&&e&&(!t||t==="tag:yaml.org,2002:float")&&/^\d/.test(i)){let o=i.indexOf(".");o<0&&(o=i.length,i+=".");let a=e-(i.length-o-1);for(;a-- >0;)i+="0"}return i}gl.stringifyNumber=fg});var Wi=T($n=>{"use strict";var pg=Q(),Hi=Ut(),mg={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:n=>n.slice(-3).toLowerCase()==="nan"?NaN:n[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:Hi.stringifyNumber},gg={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:n=>parseFloat(n),stringify(n){let e=Number(n.value);return isFinite(e)?e.toExponential():Hi.stringifyNumber(n)}},yg={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,resolve(n){let e=new pg.Scalar(parseFloat(n)),t=n.indexOf(".");return t!==-1&&n[n.length-1]==="0"&&(e.minFractionDigits=n.length-t-1),e},stringify:Hi.stringifyNumber};$n.float=yg;$n.floatExp=gg;$n.floatNaN=mg});var Yi=T(Bn=>{"use strict";var yl=Ut(),Rn=n=>typeof n=="bigint"||Number.isInteger(n),Vi=(n,e,t,{intAsBigInt:s})=>s?BigInt(n):parseInt(n.substring(e),t);function wl(n,e,t){let{value:s}=n;return Rn(s)&&s>=0?t+s.toString(e):yl.stringifyNumber(n)}var wg={identify:n=>Rn(n)&&n>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(n,e,t)=>Vi(n,2,8,t),stringify:n=>wl(n,8,"0o")},Sg={identify:Rn,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(n,e,t)=>Vi(n,0,10,t),stringify:yl.stringifyNumber},bg={identify:n=>Rn(n)&&n>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(n,e,t)=>Vi(n,2,16,t),stringify:n=>wl(n,16,"0x")};Bn.int=Sg;Bn.intHex=bg;Bn.intOct=wg});var bl=T(Sl=>{"use strict";var _g=Rt(),kg=Pn(),vg=Bt(),Tg=bs(),Ig=Gi(),Ji=Wi(),zi=Yi(),Ag=[_g.map,vg.seq,Tg.string,kg.nullTag,Ig.boolTag,zi.intOct,zi.int,zi.intHex,Ji.floatNaN,Ji.floatExp,Ji.float];Sl.schema=Ag});var vl=T(kl=>{"use strict";var Cg=Q(),Eg=Rt(),Ng=Bt();function _l(n){return typeof n=="bigint"||Number.isInteger(n)}var Un=({value:n})=>JSON.stringify(n),Og=[{identify:n=>typeof n=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:n=>n,stringify:Un},{identify:n=>n==null,createNode:()=>new Cg.Scalar(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:Un},{identify:n=>typeof n=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^true$|^false$/,resolve:n=>n==="true",stringify:Un},{identify:_l,default:!0,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:(n,e,{intAsBigInt:t})=>t?BigInt(n):parseInt(n,10),stringify:({value:n})=>_l(n)?n.toString():JSON.stringify(n)},{identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:n=>parseFloat(n),stringify:Un}],xg={default:!0,tag:"",test:/^/,resolve(n,e){return e(`Unresolved plain scalar ${JSON.stringify(n)}`),n}},Mg=[Eg.map,Ng.seq].concat(Og,xg);kl.schema=Mg});var Xi=T(Tl=>{"use strict";var _s=F("buffer"),Qi=Q(),Dg=ms(),Lg={identify:n=>n instanceof Uint8Array,default:!1,tag:"tag:yaml.org,2002:binary",resolve(n,e){if(typeof _s.Buffer=="function")return _s.Buffer.from(n,"base64");if(typeof atob=="function"){let t=atob(n.replace(/[\n\r]/g,"")),s=new Uint8Array(t.length);for(let r=0;r<t.length;++r)s[r]=t.charCodeAt(r);return s}else return e("This environment does not support reading binary tags; either Buffer or atob is required"),n},stringify({comment:n,type:e,value:t},s,r,i){if(!t)return"";let o=t,a;if(typeof _s.Buffer=="function")a=o instanceof _s.Buffer?o.toString("base64"):_s.Buffer.from(o.buffer).toString("base64");else if(typeof btoa=="function"){let l="";for(let c=0;c<o.length;++c)l+=String.fromCharCode(o[c]);a=btoa(l)}else throw new Error("This environment does not support writing binary tags; either Buffer or btoa is required");if(e??(e=Qi.Scalar.BLOCK_LITERAL),e!==Qi.Scalar.QUOTE_DOUBLE){let l=Math.max(s.options.lineWidth-s.indent.length,s.options.minContentWidth),c=Math.ceil(a.length/l),d=new Array(c);for(let u=0,h=0;u<c;++u,h+=l)d[u]=a.substr(h,l);a=d.join(e===Qi.Scalar.BLOCK_LITERAL?`
|
|
55
|
+
`:" ")}return Dg.stringifyString({comment:n,type:e,value:a},s,r,i)}};Tl.binary=Lg});var Fn=T(jn=>{"use strict";var qn=$(),Zi=tt(),Pg=Q(),$g=rt();function Il(n,e){if(qn.isSeq(n))for(let t=0;t<n.items.length;++t){let s=n.items[t];if(!qn.isPair(s)){if(qn.isMap(s)){s.items.length>1&&e("Each pair must have its own sequence indicator");let r=s.items[0]||new Zi.Pair(new Pg.Scalar(null));if(s.commentBefore&&(r.key.commentBefore=r.key.commentBefore?`${s.commentBefore}
|
|
56
|
+
${r.key.commentBefore}`:s.commentBefore),s.comment){let i=r.value??r.key;i.comment=i.comment?`${s.comment}
|
|
57
|
+
${i.comment}`:s.comment}s=r}n.items[t]=qn.isPair(s)?s:new Zi.Pair(s)}}else e("Expected a sequence for this tag");return n}function Al(n,e,t){let{replacer:s}=t,r=new $g.YAMLSeq(n);r.tag="tag:yaml.org,2002:pairs";let i=0;if(e&&Symbol.iterator in Object(e))for(let o of e){typeof s=="function"&&(o=s.call(e,String(i++),o));let a,l;if(Array.isArray(o))if(o.length===2)a=o[0],l=o[1];else throw new TypeError(`Expected [key, value] tuple: ${o}`);else if(o&&o instanceof Object){let c=Object.keys(o);if(c.length===1)a=c[0],l=o[a];else throw new TypeError(`Expected tuple with one key, not ${c.length} keys`)}else a=o;r.items.push(Zi.createPair(a,l,t))}return r}var Rg={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:Il,createNode:Al};jn.createPairs=Al;jn.pairs=Rg;jn.resolvePairs=Il});var so=T(to=>{"use strict";var Cl=$(),eo=Qe(),ks=nt(),Bg=rt(),El=Fn(),pt=class n extends Bg.YAMLSeq{constructor(){super(),this.add=ks.YAMLMap.prototype.add.bind(this),this.delete=ks.YAMLMap.prototype.delete.bind(this),this.get=ks.YAMLMap.prototype.get.bind(this),this.has=ks.YAMLMap.prototype.has.bind(this),this.set=ks.YAMLMap.prototype.set.bind(this),this.tag=n.tag}toJSON(e,t){if(!t)return super.toJSON(e);let s=new Map;t?.onCreate&&t.onCreate(s);for(let r of this.items){let i,o;if(Cl.isPair(r)?(i=eo.toJS(r.key,"",t),o=eo.toJS(r.value,i,t)):i=eo.toJS(r,"",t),s.has(i))throw new Error("Ordered maps must not include duplicate keys");s.set(i,o)}return s}static from(e,t,s){let r=El.createPairs(e,t,s),i=new this;return i.items=r.items,i}};pt.tag="tag:yaml.org,2002:omap";var Ug={collection:"seq",identify:n=>n instanceof Map,nodeClass:pt,default:!1,tag:"tag:yaml.org,2002:omap",resolve(n,e){let t=El.resolvePairs(n,e),s=[];for(let{key:r}of t.items)Cl.isScalar(r)&&(s.includes(r.value)?e(`Ordered maps must not include duplicate keys: ${r.value}`):s.push(r.value));return Object.assign(new pt,t)},createNode:(n,e,t)=>pt.from(n,e,t)};to.YAMLOMap=pt;to.omap=Ug});var Dl=T(no=>{"use strict";var Nl=Q();function Ol({value:n,source:e},t){return e&&(n?xl:Ml).test.test(e)?e:n?t.options.trueStr:t.options.falseStr}var xl={identify:n=>n===!0,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:()=>new Nl.Scalar(!0),stringify:Ol},Ml={identify:n=>n===!1,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:()=>new Nl.Scalar(!1),stringify:Ol};no.falseTag=Ml;no.trueTag=xl});var Ll=T(Kn=>{"use strict";var qg=Q(),ro=Ut(),jg={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:n=>n.slice(-3).toLowerCase()==="nan"?NaN:n[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:ro.stringifyNumber},Fg={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:n=>parseFloat(n.replace(/_/g,"")),stringify(n){let e=Number(n.value);return isFinite(e)?e.toExponential():ro.stringifyNumber(n)}},Kg={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve(n){let e=new qg.Scalar(parseFloat(n.replace(/_/g,""))),t=n.indexOf(".");if(t!==-1){let s=n.substring(t+1).replace(/_/g,"");s[s.length-1]==="0"&&(e.minFractionDigits=s.length)}return e},stringify:ro.stringifyNumber};Kn.float=Kg;Kn.floatExp=Fg;Kn.floatNaN=jg});var $l=T(Ts=>{"use strict";var Pl=Ut(),vs=n=>typeof n=="bigint"||Number.isInteger(n);function Gn(n,e,t,{intAsBigInt:s}){let r=n[0];if((r==="-"||r==="+")&&(e+=1),n=n.substring(e).replace(/_/g,""),s){switch(t){case 2:n=`0b${n}`;break;case 8:n=`0o${n}`;break;case 16:n=`0x${n}`;break}let o=BigInt(n);return r==="-"?BigInt(-1)*o:o}let i=parseInt(n,t);return r==="-"?-1*i:i}function io(n,e,t){let{value:s}=n;if(vs(s)){let r=s.toString(e);return s<0?"-"+t+r.substr(1):t+r}return Pl.stringifyNumber(n)}var Gg={identify:vs,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(n,e,t)=>Gn(n,2,2,t),stringify:n=>io(n,2,"0b")},Hg={identify:vs,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(n,e,t)=>Gn(n,1,8,t),stringify:n=>io(n,8,"0")},Wg={identify:vs,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(n,e,t)=>Gn(n,0,10,t),stringify:Pl.stringifyNumber},Vg={identify:vs,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(n,e,t)=>Gn(n,2,16,t),stringify:n=>io(n,16,"0x")};Ts.int=Wg;Ts.intBin=Gg;Ts.intHex=Vg;Ts.intOct=Hg});var ao=T(oo=>{"use strict";var Vn=$(),Hn=tt(),Wn=nt(),mt=class n extends Wn.YAMLMap{constructor(e){super(e),this.tag=n.tag}add(e){let t;Vn.isPair(e)?t=e:e&&typeof e=="object"&&"key"in e&&"value"in e&&e.value===null?t=new Hn.Pair(e.key,null):t=new Hn.Pair(e,null),Wn.findPair(this.items,t.key)||this.items.push(t)}get(e,t){let s=Wn.findPair(this.items,e);return!t&&Vn.isPair(s)?Vn.isScalar(s.key)?s.key.value:s.key:s}set(e,t){if(typeof t!="boolean")throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof t}`);let s=Wn.findPair(this.items,e);s&&!t?this.items.splice(this.items.indexOf(s),1):!s&&t&&this.items.push(new Hn.Pair(e))}toJSON(e,t){return super.toJSON(e,t,Set)}toString(e,t,s){if(!e)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},e,{allNullValues:!0}),t,s);throw new Error("Set items must all have null values")}static from(e,t,s){let{replacer:r}=s,i=new this(e);if(t&&Symbol.iterator in Object(t))for(let o of t)typeof r=="function"&&(o=r.call(t,o,o)),i.items.push(Hn.createPair(o,null,s));return i}};mt.tag="tag:yaml.org,2002:set";var Yg={collection:"map",identify:n=>n instanceof Set,nodeClass:mt,default:!1,tag:"tag:yaml.org,2002:set",createNode:(n,e,t)=>mt.from(n,e,t),resolve(n,e){if(Vn.isMap(n)){if(n.hasAllNullValues(!0))return Object.assign(new mt,n);e("Set items must all have null values")}else e("Expected a mapping for this tag");return n}};oo.YAMLSet=mt;oo.set=Yg});var lo=T(Yn=>{"use strict";var Jg=Ut();function co(n,e){let t=n[0],s=t==="-"||t==="+"?n.substring(1):n,r=o=>e?BigInt(o):Number(o),i=s.replace(/_/g,"").split(":").reduce((o,a)=>o*r(60)+r(a),r(0));return t==="-"?r(-1)*i:i}function Rl(n){let{value:e}=n,t=o=>o;if(typeof e=="bigint")t=o=>BigInt(o);else if(isNaN(e)||!isFinite(e))return Jg.stringifyNumber(n);let s="";e<0&&(s="-",e*=t(-1));let r=t(60),i=[e%r];return e<60?i.unshift(0):(e=(e-i[0])/r,i.unshift(e%r),e>=60&&(e=(e-i[0])/r,i.unshift(e))),s+i.map(o=>String(o).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}var zg={identify:n=>typeof n=="bigint"||Number.isInteger(n),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:(n,e,{intAsBigInt:t})=>co(n,t),stringify:Rl},Qg={identify:n=>typeof n=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:n=>co(n,!1),stringify:Rl},Bl={identify:n=>n instanceof Date,default:!0,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve(n){let e=n.match(Bl.test);if(!e)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");let[,t,s,r,i,o,a]=e.map(Number),l=e[7]?Number((e[7]+"00").substr(1,3)):0,c=Date.UTC(t,s-1,r,i||0,o||0,a||0,l),d=e[8];if(d&&d!=="Z"){let u=co(d,!1);Math.abs(u)<30&&(u*=60),c-=6e4*u}return new Date(c)},stringify:({value:n})=>n?.toISOString().replace(/(T00:00:00)?\.000Z$/,"")??""};Yn.floatTime=Qg;Yn.intTime=zg;Yn.timestamp=Bl});var jl=T(ql=>{"use strict";var Xg=Rt(),Zg=Pn(),ey=Bt(),ty=bs(),sy=Xi(),Ul=Dl(),uo=Ll(),Jn=$l(),ny=Cn(),ry=so(),iy=Fn(),oy=ao(),ho=lo(),ay=[Xg.map,ey.seq,ty.string,Zg.nullTag,Ul.trueTag,Ul.falseTag,Jn.intBin,Jn.intOct,Jn.int,Jn.intHex,uo.floatNaN,uo.floatExp,uo.float,sy.binary,ny.merge,ry.omap,iy.pairs,oy.set,ho.intTime,ho.floatTime,ho.timestamp];ql.schema=ay});var Ql=T(mo=>{"use strict";var Hl=Rt(),cy=Pn(),Wl=Bt(),ly=bs(),dy=Gi(),fo=Wi(),po=Yi(),uy=bl(),hy=vl(),Vl=Xi(),Is=Cn(),Yl=so(),Jl=Fn(),Fl=jl(),zl=ao(),zn=lo(),Kl=new Map([["core",uy.schema],["failsafe",[Hl.map,Wl.seq,ly.string]],["json",hy.schema],["yaml11",Fl.schema],["yaml-1.1",Fl.schema]]),Gl={binary:Vl.binary,bool:dy.boolTag,float:fo.float,floatExp:fo.floatExp,floatNaN:fo.floatNaN,floatTime:zn.floatTime,int:po.int,intHex:po.intHex,intOct:po.intOct,intTime:zn.intTime,map:Hl.map,merge:Is.merge,null:cy.nullTag,omap:Yl.omap,pairs:Jl.pairs,seq:Wl.seq,set:zl.set,timestamp:zn.timestamp},fy={"tag:yaml.org,2002:binary":Vl.binary,"tag:yaml.org,2002:merge":Is.merge,"tag:yaml.org,2002:omap":Yl.omap,"tag:yaml.org,2002:pairs":Jl.pairs,"tag:yaml.org,2002:set":zl.set,"tag:yaml.org,2002:timestamp":zn.timestamp};function py(n,e,t){let s=Kl.get(e);if(s&&!n)return t&&!s.includes(Is.merge)?s.concat(Is.merge):s.slice();let r=s;if(!r)if(Array.isArray(n))r=[];else{let i=Array.from(Kl.keys()).filter(o=>o!=="yaml11").map(o=>JSON.stringify(o)).join(", ");throw new Error(`Unknown schema "${e}"; use one of ${i} or define customTags array`)}if(Array.isArray(n))for(let i of n)r=r.concat(i);else typeof n=="function"&&(r=n(r.slice()));return t&&(r=r.concat(Is.merge)),r.reduce((i,o)=>{let a=typeof o=="string"?Gl[o]:o;if(!a){let l=JSON.stringify(o),c=Object.keys(Gl).map(d=>JSON.stringify(d)).join(", ");throw new Error(`Unknown custom tag ${l}; use one of ${c}`)}return i.includes(a)||i.push(a),i},[])}mo.coreKnownTags=fy;mo.getTags=py});var wo=T(Xl=>{"use strict";var go=$(),my=Rt(),gy=Bt(),yy=bs(),Qn=Ql(),wy=(n,e)=>n.key<e.key?-1:n.key>e.key?1:0,yo=class n{constructor({compat:e,customTags:t,merge:s,resolveKnownTags:r,schema:i,sortMapEntries:o,toStringDefaults:a}){this.compat=Array.isArray(e)?Qn.getTags(e,"compat"):e?Qn.getTags(null,e):null,this.name=typeof i=="string"&&i||"core",this.knownTags=r?Qn.coreKnownTags:{},this.tags=Qn.getTags(t,this.name,s),this.toStringOptions=a??null,Object.defineProperty(this,go.MAP,{value:my.map}),Object.defineProperty(this,go.SCALAR,{value:yy.string}),Object.defineProperty(this,go.SEQ,{value:gy.seq}),this.sortMapEntries=typeof o=="function"?o:o===!0?wy:null}clone(){let e=Object.create(n.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}};Xl.Schema=yo});var ed=T(Zl=>{"use strict";var Sy=$(),So=gs(),As=hs();function by(n,e){let t=[],s=e.directives===!0;if(e.directives!==!1&&n.directives){let l=n.directives.toString(n);l?(t.push(l),s=!0):n.directives.docStart&&(s=!0)}s&&t.push("---");let r=So.createStringifyContext(n,e),{commentString:i}=r.options;if(n.commentBefore){t.length!==1&&t.unshift("");let l=i(n.commentBefore);t.unshift(As.indentComment(l,""))}let o=!1,a=null;if(n.contents){if(Sy.isNode(n.contents)){if(n.contents.spaceBefore&&s&&t.push(""),n.contents.commentBefore){let d=i(n.contents.commentBefore);t.push(As.indentComment(d,""))}r.forceBlockIndent=!!n.comment,a=n.contents.comment}let l=a?void 0:()=>o=!0,c=So.stringify(n.contents,r,()=>a=null,l);a&&(c+=As.lineComment(c,"",i(a))),(c[0]==="|"||c[0]===">")&&t[t.length-1]==="---"?t[t.length-1]=`--- ${c}`:t.push(c)}else t.push(So.stringify(n.contents,r));if(n.directives?.docEnd)if(n.comment){let l=i(n.comment);l.includes(`
|
|
58
|
+
`)?(t.push("..."),t.push(As.indentComment(l,""))):t.push(`... ${l}`)}else t.push("...");else{let l=n.comment;l&&o&&(l=l.replace(/^\n+/,"")),l&&((!o||a)&&t[t.length-1]!==""&&t.push(""),t.push(As.indentComment(i(l),"")))}return t.join(`
|
|
58
59
|
`)+`
|
|
59
|
-
`}
|
|
60
|
-
`),o=a+o}if(/[^ ]/.test(o)){let a=1,l=t.linePos[1];l?.line===
|
|
60
|
+
`}Zl.stringifyDocument=by});var Cs=T(td=>{"use strict";var _y=ds(),qt=wn(),we=$(),ky=tt(),vy=Qe(),Ty=wo(),Iy=ed(),bo=pn(),Ay=vi(),Cy=us(),_o=ki(),ko=class n{constructor(e,t,s){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,we.NODE_TYPE,{value:we.DOC});let r=null;typeof t=="function"||Array.isArray(t)?r=t:s===void 0&&t&&(s=t,t=void 0);let i=Object.assign({intAsBigInt:!1,keepSourceTokens:!1,logLevel:"warn",prettyErrors:!0,strict:!0,stringKeys:!1,uniqueKeys:!0,version:"1.2"},s);this.options=i;let{version:o}=i;s?._directives?(this.directives=s._directives.atDocument(),this.directives.yaml.explicit&&(o=this.directives.yaml.version)):this.directives=new _o.Directives({version:o}),this.setSchema(o,s),this.contents=e===void 0?null:this.createNode(e,r,s)}clone(){let e=Object.create(n.prototype,{[we.NODE_TYPE]:{value:we.DOC}});return e.commentBefore=this.commentBefore,e.comment=this.comment,e.errors=this.errors.slice(),e.warnings=this.warnings.slice(),e.options=Object.assign({},this.options),this.directives&&(e.directives=this.directives.clone()),e.schema=this.schema.clone(),e.contents=we.isNode(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){jt(this.contents)&&this.contents.add(e)}addIn(e,t){jt(this.contents)&&this.contents.addIn(e,t)}createAlias(e,t){if(!e.anchor){let s=bo.anchorNames(this);e.anchor=!t||s.has(t)?bo.findNewAnchor(t||"a",s):t}return new _y.Alias(e.anchor)}createNode(e,t,s){let r;if(typeof t=="function")e=t.call({"":e},"",e),r=t;else if(Array.isArray(t)){let y=S=>typeof S=="number"||S instanceof String||S instanceof Number,w=t.filter(y).map(String);w.length>0&&(t=t.concat(w)),r=t}else s===void 0&&t&&(s=t,t=void 0);let{aliasDuplicateObjects:i,anchorPrefix:o,flow:a,keepUndefined:l,onTagObj:c,tag:d}=s??{},{onAnchor:u,setAnchors:h,sourceObjects:p}=bo.createNodeAnchors(this,o||"a"),g={aliasDuplicateObjects:i??!0,keepUndefined:l??!1,onAnchor:u,onTagObj:c,replacer:r,schema:this.schema,sourceObjects:p},f=Cy.createNode(e,d,g);return a&&we.isCollection(f)&&(f.flow=!0),h(),f}createPair(e,t,s={}){let r=this.createNode(e,null,s),i=this.createNode(t,null,s);return new ky.Pair(r,i)}delete(e){return jt(this.contents)?this.contents.delete(e):!1}deleteIn(e){return qt.isEmptyPath(e)?this.contents==null?!1:(this.contents=null,!0):jt(this.contents)?this.contents.deleteIn(e):!1}get(e,t){return we.isCollection(this.contents)?this.contents.get(e,t):void 0}getIn(e,t){return qt.isEmptyPath(e)?!t&&we.isScalar(this.contents)?this.contents.value:this.contents:we.isCollection(this.contents)?this.contents.getIn(e,t):void 0}has(e){return we.isCollection(this.contents)?this.contents.has(e):!1}hasIn(e){return qt.isEmptyPath(e)?this.contents!==void 0:we.isCollection(this.contents)?this.contents.hasIn(e):!1}set(e,t){this.contents==null?this.contents=qt.collectionFromPath(this.schema,[e],t):jt(this.contents)&&this.contents.set(e,t)}setIn(e,t){qt.isEmptyPath(e)?this.contents=t:this.contents==null?this.contents=qt.collectionFromPath(this.schema,Array.from(e),t):jt(this.contents)&&this.contents.setIn(e,t)}setSchema(e,t={}){typeof e=="number"&&(e=String(e));let s;switch(e){case"1.1":this.directives?this.directives.yaml.version="1.1":this.directives=new _o.Directives({version:"1.1"}),s={resolveKnownTags:!1,schema:"yaml-1.1"};break;case"1.2":case"next":this.directives?this.directives.yaml.version=e:this.directives=new _o.Directives({version:e}),s={resolveKnownTags:!0,schema:"core"};break;case null:this.directives&&delete this.directives,s=null;break;default:{let r=JSON.stringify(e);throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${r}`)}}if(t.schema instanceof Object)this.schema=t.schema;else if(s)this.schema=new Ty.Schema(Object.assign(s,t));else throw new Error("With a null YAML version, the { schema: Schema } option is required")}toJS({json:e,jsonArg:t,mapAsMap:s,maxAliasCount:r,onAnchor:i,reviver:o}={}){let a={anchors:new Map,doc:this,keep:!e,mapAsMap:s===!0,mapKeyWarned:!1,maxAliasCount:typeof r=="number"?r:100},l=vy.toJS(this.contents,t??"",a);if(typeof i=="function")for(let{count:c,res:d}of a.anchors.values())i(d,c);return typeof o=="function"?Ay.applyReviver(o,{"":l},"",l):l}toJSON(e,t){return this.toJS({json:!0,jsonArg:e,mapAsMap:!1,onAnchor:t})}toString(e={}){if(this.errors.length>0)throw new Error("Document with errors cannot be stringified");if("indent"in e&&(!Number.isInteger(e.indent)||Number(e.indent)<=0)){let t=JSON.stringify(e.indent);throw new Error(`"indent" option must be a positive integer, not ${t}`)}return Iy.stringifyDocument(this,e)}};function jt(n){if(we.isCollection(n))return!0;throw new Error("Expected a YAML collection as document contents")}td.Document=ko});var Os=T(Ns=>{"use strict";var Es=class extends Error{constructor(e,t,s,r){super(),this.name=e,this.code=s,this.message=r,this.pos=t}},vo=class extends Es{constructor(e,t,s){super("YAMLParseError",e,t,s)}},To=class extends Es{constructor(e,t,s){super("YAMLWarning",e,t,s)}},Ey=(n,e)=>t=>{if(t.pos[0]===-1)return;t.linePos=t.pos.map(a=>e.linePos(a));let{line:s,col:r}=t.linePos[0];t.message+=` at line ${s}, column ${r}`;let i=r-1,o=n.substring(e.lineStarts[s-1],e.lineStarts[s]).replace(/[\n\r]+$/,"");if(i>=60&&o.length>80){let a=Math.min(i-39,o.length-79);o="\u2026"+o.substring(a),i-=a-1}if(o.length>80&&(o=o.substring(0,79)+"\u2026"),s>1&&/^ *$/.test(o.substring(0,i))){let a=n.substring(e.lineStarts[s-2],e.lineStarts[s-1]);a.length>80&&(a=a.substring(0,79)+`\u2026
|
|
61
|
+
`),o=a+o}if(/[^ ]/.test(o)){let a=1,l=t.linePos[1];l?.line===s&&l.col>r&&(a=Math.max(1,Math.min(l.col-r,80-i)));let c=" ".repeat(i)+"^".repeat(a);t.message+=`:
|
|
61
62
|
|
|
62
63
|
${o}
|
|
63
64
|
${c}
|
|
64
|
-
`}};
|
|
65
|
-
`))return!0;if(
|
|
66
|
-
`+
|
|
67
|
-
`+
|
|
68
|
-
`+
|
|
69
|
-
`+
|
|
70
|
-
`+
|
|
71
|
-
`+y.comment:c.comment=y.comment),c.range=[
|
|
72
|
-
`.repeat(Math.max(1,o.length-1)):"",y=r
|
|
73
|
-
`;for(let
|
|
74
|
-
`):y.length>l||
|
|
75
|
-
`:!h
|
|
76
|
-
`&&(
|
|
77
|
-
|
|
78
|
-
`),u+=
|
|
79
|
-
`,
|
|
65
|
+
`}};Ns.YAMLError=Es;Ns.YAMLParseError=vo;Ns.YAMLWarning=To;Ns.prettifyError=Ey});var xs=T(sd=>{"use strict";function Ny(n,{flow:e,indicator:t,next:s,offset:r,onError:i,parentIndent:o,startOnNewline:a}){let l=!1,c=a,d=a,u="",h="",p=!1,g=!1,f=null,y=null,w=null,S=null,b=null,A=null,v=null;for(let _ of n)switch(g&&(_.type!=="space"&&_.type!=="newline"&&_.type!=="comma"&&i(_.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),g=!1),f&&(c&&_.type!=="comment"&&_.type!=="newline"&&i(f,"TAB_AS_INDENT","Tabs are not allowed as indentation"),f=null),_.type){case"space":!e&&(t!=="doc-start"||s?.type!=="flow-collection")&&_.source.includes(" ")&&(f=_),d=!0;break;case"comment":{d||i(_,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let L=_.source.substring(1)||" ";u?u+=h+L:u=L,h="",c=!1;break}case"newline":c?u?u+=_.source:(!A||t!=="seq-item-ind")&&(l=!0):h+=_.source,c=!0,p=!0,(y||w)&&(S=_),d=!0;break;case"anchor":y&&i(_,"MULTIPLE_ANCHORS","A node can have at most one anchor"),_.source.endsWith(":")&&i(_.offset+_.source.length-1,"BAD_ALIAS","Anchor ending in : is ambiguous",!0),y=_,v??(v=_.offset),c=!1,d=!1,g=!0;break;case"tag":{w&&i(_,"MULTIPLE_TAGS","A node can have at most one tag"),w=_,v??(v=_.offset),c=!1,d=!1,g=!0;break}case t:(y||w)&&i(_,"BAD_PROP_ORDER",`Anchors and tags must be after the ${_.source} indicator`),A&&i(_,"UNEXPECTED_TOKEN",`Unexpected ${_.source} in ${e??"collection"}`),A=_,c=t==="seq-item-ind"||t==="explicit-key-ind",d=!1;break;case"comma":if(e){b&&i(_,"UNEXPECTED_TOKEN",`Unexpected , in ${e}`),b=_,c=!1,d=!1;break}default:i(_,"UNEXPECTED_TOKEN",`Unexpected ${_.type} token`),c=!1,d=!1}let C=n[n.length-1],M=C?C.offset+C.source.length:r;return g&&s&&s.type!=="space"&&s.type!=="newline"&&s.type!=="comma"&&(s.type!=="scalar"||s.source!=="")&&i(s.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),f&&(c&&f.indent<=o||s?.type==="block-map"||s?.type==="block-seq")&&i(f,"TAB_AS_INDENT","Tabs are not allowed as indentation"),{comma:b,found:A,spaceBefore:l,comment:u,hasNewline:p,anchor:y,tag:w,newlineAfterProp:S,end:M,start:v??M}}sd.resolveProps=Ny});var Xn=T(nd=>{"use strict";function Io(n){if(!n)return null;switch(n.type){case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":if(n.source.includes(`
|
|
66
|
+
`))return!0;if(n.end){for(let e of n.end)if(e.type==="newline")return!0}return!1;case"flow-collection":for(let e of n.items){for(let t of e.start)if(t.type==="newline")return!0;if(e.sep){for(let t of e.sep)if(t.type==="newline")return!0}if(Io(e.key)||Io(e.value))return!0}return!1;default:return!0}}nd.containsNewline=Io});var Ao=T(rd=>{"use strict";var Oy=Xn();function xy(n,e,t){if(e?.type==="flow-collection"){let s=e.end[0];s.indent===n&&(s.source==="]"||s.source==="}")&&Oy.containsNewline(e)&&t(s,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}rd.flowIndentCheck=xy});var Co=T(od=>{"use strict";var id=$();function My(n,e,t){let{uniqueKeys:s}=n.options;if(s===!1)return!1;let r=typeof s=="function"?s:(i,o)=>i===o||id.isScalar(i)&&id.isScalar(o)&&i.value===o.value;return e.some(i=>r(i.key,t))}od.mapIncludes=My});var hd=T(ud=>{"use strict";var ad=tt(),Dy=nt(),cd=xs(),Ly=Xn(),ld=Ao(),Py=Co(),dd="All mapping items must start at the same column";function $y({composeNode:n,composeEmptyNode:e},t,s,r,i){let o=i?.nodeClass??Dy.YAMLMap,a=new o(t.schema);t.atRoot&&(t.atRoot=!1);let l=s.offset,c=null;for(let d of s.items){let{start:u,key:h,sep:p,value:g}=d,f=cd.resolveProps(u,{indicator:"explicit-key-ind",next:h??p?.[0],offset:l,onError:r,parentIndent:s.indent,startOnNewline:!0}),y=!f.found;if(y){if(h&&(h.type==="block-seq"?r(l,"BLOCK_AS_IMPLICIT_KEY","A block sequence may not be used as an implicit map key"):"indent"in h&&h.indent!==s.indent&&r(l,"BAD_INDENT",dd)),!f.anchor&&!f.tag&&!p){c=f.end,f.comment&&(a.comment?a.comment+=`
|
|
67
|
+
`+f.comment:a.comment=f.comment);continue}(f.newlineAfterProp||Ly.containsNewline(h))&&r(h??u[u.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}else f.found?.indent!==s.indent&&r(l,"BAD_INDENT",dd);t.atKey=!0;let w=f.end,S=h?n(t,h,f,r):e(t,w,u,null,f,r);t.schema.compat&&ld.flowIndentCheck(s.indent,h,r),t.atKey=!1,Py.mapIncludes(t,a.items,S)&&r(w,"DUPLICATE_KEY","Map keys must be unique");let b=cd.resolveProps(p??[],{indicator:"map-value-ind",next:g,offset:S.range[2],onError:r,parentIndent:s.indent,startOnNewline:!h||h.type==="block-scalar"});if(l=b.end,b.found){y&&(g?.type==="block-map"&&!b.hasNewline&&r(l,"BLOCK_AS_IMPLICIT_KEY","Nested mappings are not allowed in compact mappings"),t.options.strict&&f.start<b.found.offset-1024&&r(S.range,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit block mapping key"));let A=g?n(t,g,b,r):e(t,l,p,null,b,r);t.schema.compat&&ld.flowIndentCheck(s.indent,g,r),l=A.range[2];let v=new ad.Pair(S,A);t.options.keepSourceTokens&&(v.srcToken=d),a.items.push(v)}else{y&&r(S.range,"MISSING_CHAR","Implicit map keys need to be followed by map values"),b.comment&&(S.comment?S.comment+=`
|
|
68
|
+
`+b.comment:S.comment=b.comment);let A=new ad.Pair(S);t.options.keepSourceTokens&&(A.srcToken=d),a.items.push(A)}}return c&&c<l&&r(c,"IMPOSSIBLE","Map comment with trailing content"),a.range=[s.offset,l,c??l],a}ud.resolveBlockMap=$y});var pd=T(fd=>{"use strict";var Ry=rt(),By=xs(),Uy=Ao();function qy({composeNode:n,composeEmptyNode:e},t,s,r,i){let o=i?.nodeClass??Ry.YAMLSeq,a=new o(t.schema);t.atRoot&&(t.atRoot=!1),t.atKey&&(t.atKey=!1);let l=s.offset,c=null;for(let{start:d,value:u}of s.items){let h=By.resolveProps(d,{indicator:"seq-item-ind",next:u,offset:l,onError:r,parentIndent:s.indent,startOnNewline:!0});if(!h.found)if(h.anchor||h.tag||u)u?.type==="block-seq"?r(h.end,"BAD_INDENT","All sequence items must start at the same column"):r(l,"MISSING_CHAR","Sequence item without - indicator");else{c=h.end,h.comment&&(a.comment=h.comment);continue}let p=u?n(t,u,h,r):e(t,h.end,d,null,h,r);t.schema.compat&&Uy.flowIndentCheck(s.indent,u,r),l=p.range[2],a.items.push(p)}return a.range=[s.offset,l,c??l],a}fd.resolveBlockSeq=qy});var Ft=T(md=>{"use strict";function jy(n,e,t,s){let r="";if(n){let i=!1,o="";for(let a of n){let{source:l,type:c}=a;switch(c){case"space":i=!0;break;case"comment":{t&&!i&&s(a,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let d=l.substring(1)||" ";r?r+=o+d:r=d,o="";break}case"newline":r&&(o+=l),i=!0;break;default:s(a,"UNEXPECTED_TOKEN",`Unexpected ${c} at node end`)}e+=l.length}}return{comment:r,offset:e}}md.resolveEnd=jy});var Sd=T(wd=>{"use strict";var Fy=$(),Ky=tt(),gd=nt(),Gy=rt(),Hy=Ft(),yd=xs(),Wy=Xn(),Vy=Co(),Eo="Block collections are not allowed within flow collections",No=n=>n&&(n.type==="block-map"||n.type==="block-seq");function Yy({composeNode:n,composeEmptyNode:e},t,s,r,i){let o=s.start.source==="{",a=o?"flow map":"flow sequence",l=i?.nodeClass??(o?gd.YAMLMap:Gy.YAMLSeq),c=new l(t.schema);c.flow=!0;let d=t.atRoot;d&&(t.atRoot=!1),t.atKey&&(t.atKey=!1);let u=s.offset+s.start.source.length;for(let y=0;y<s.items.length;++y){let w=s.items[y],{start:S,key:b,sep:A,value:v}=w,C=yd.resolveProps(S,{flow:a,indicator:"explicit-key-ind",next:b??A?.[0],offset:u,onError:r,parentIndent:s.indent,startOnNewline:!1});if(!C.found){if(!C.anchor&&!C.tag&&!A&&!v){y===0&&C.comma?r(C.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${a}`):y<s.items.length-1&&r(C.start,"UNEXPECTED_TOKEN",`Unexpected empty item in ${a}`),C.comment&&(c.comment?c.comment+=`
|
|
69
|
+
`+C.comment:c.comment=C.comment),u=C.end;continue}!o&&t.options.strict&&Wy.containsNewline(b)&&r(b,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line")}if(y===0)C.comma&&r(C.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${a}`);else if(C.comma||r(C.start,"MISSING_CHAR",`Missing , between ${a} items`),C.comment){let M="";e:for(let _ of S)switch(_.type){case"comma":case"space":break;case"comment":M=_.source.substring(1);break e;default:break e}if(M){let _=c.items[c.items.length-1];Fy.isPair(_)&&(_=_.value??_.key),_.comment?_.comment+=`
|
|
70
|
+
`+M:_.comment=M,C.comment=C.comment.substring(M.length+1)}}if(!o&&!A&&!C.found){let M=v?n(t,v,C,r):e(t,C.end,A,null,C,r);c.items.push(M),u=M.range[2],No(v)&&r(M.range,"BLOCK_IN_FLOW",Eo)}else{t.atKey=!0;let M=C.end,_=b?n(t,b,C,r):e(t,M,S,null,C,r);No(b)&&r(_.range,"BLOCK_IN_FLOW",Eo),t.atKey=!1;let L=yd.resolveProps(A??[],{flow:a,indicator:"map-value-ind",next:v,offset:_.range[2],onError:r,parentIndent:s.indent,startOnNewline:!1});if(L.found){if(!o&&!C.found&&t.options.strict){if(A)for(let K of A){if(K===L.found)break;if(K.type==="newline"){r(K,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line");break}}C.start<L.found.offset-1024&&r(L.found,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit flow sequence key")}}else v&&("source"in v&&v.source?.[0]===":"?r(v,"MISSING_CHAR",`Missing space after : in ${a}`):r(L.start,"MISSING_CHAR",`Missing , or : between ${a} items`));let j=v?n(t,v,L,r):L.found?e(t,L.end,A,null,L,r):null;j?No(v)&&r(j.range,"BLOCK_IN_FLOW",Eo):L.comment&&(_.comment?_.comment+=`
|
|
71
|
+
`+L.comment:_.comment=L.comment);let J=new Ky.Pair(_,j);if(t.options.keepSourceTokens&&(J.srcToken=w),o){let K=c;Vy.mapIncludes(t,K.items,_)&&r(M,"DUPLICATE_KEY","Map keys must be unique"),K.items.push(J)}else{let K=new gd.YAMLMap(t.schema);K.flow=!0,K.items.push(J);let ae=(j??_).range;K.range=[_.range[0],ae[1],ae[2]],c.items.push(K)}u=j?j.range[2]:L.end}}let h=o?"}":"]",[p,...g]=s.end,f=u;if(p?.source===h)f=p.offset+p.source.length;else{let y=a[0].toUpperCase()+a.substring(1),w=d?`${y} must end with a ${h}`:`${y} in block collection must be sufficiently indented and end with a ${h}`;r(u,d?"MISSING_CHAR":"BAD_INDENT",w),p&&p.source.length!==1&&g.unshift(p)}if(g.length>0){let y=Hy.resolveEnd(g,f,t.options.strict,r);y.comment&&(c.comment?c.comment+=`
|
|
72
|
+
`+y.comment:c.comment=y.comment),c.range=[s.offset,f,y.offset]}else c.range=[s.offset,f,f];return c}wd.resolveFlowCollection=Yy});var _d=T(bd=>{"use strict";var Jy=$(),zy=Q(),Qy=nt(),Xy=rt(),Zy=hd(),ew=pd(),tw=Sd();function Oo(n,e,t,s,r,i){let o=t.type==="block-map"?Zy.resolveBlockMap(n,e,t,s,i):t.type==="block-seq"?ew.resolveBlockSeq(n,e,t,s,i):tw.resolveFlowCollection(n,e,t,s,i),a=o.constructor;return r==="!"||r===a.tagName?(o.tag=a.tagName,o):(r&&(o.tag=r),o)}function sw(n,e,t,s,r){let i=s.tag,o=i?e.directives.tagName(i.source,h=>r(i,"TAG_RESOLVE_FAILED",h)):null;if(t.type==="block-seq"){let{anchor:h,newlineAfterProp:p}=s,g=h&&i?h.offset>i.offset?h:i:h??i;g&&(!p||p.offset<g.offset)&&r(g,"MISSING_CHAR","Missing newline after block sequence props")}let a=t.type==="block-map"?"map":t.type==="block-seq"?"seq":t.start.source==="{"?"map":"seq";if(!i||!o||o==="!"||o===Qy.YAMLMap.tagName&&a==="map"||o===Xy.YAMLSeq.tagName&&a==="seq")return Oo(n,e,t,r,o);let l=e.schema.tags.find(h=>h.tag===o&&h.collection===a);if(!l){let h=e.schema.knownTags[o];if(h?.collection===a)e.schema.tags.push(Object.assign({},h,{default:!1})),l=h;else return h?r(i,"BAD_COLLECTION_TYPE",`${h.tag} used for ${a} collection, but expects ${h.collection??"scalar"}`,!0):r(i,"TAG_RESOLVE_FAILED",`Unresolved tag: ${o}`,!0),Oo(n,e,t,r,o)}let c=Oo(n,e,t,r,o,l),d=l.resolve?.(c,h=>r(i,"TAG_RESOLVE_FAILED",h),e.options)??c,u=Jy.isNode(d)?d:new zy.Scalar(d);return u.range=c.range,u.tag=o,l?.format&&(u.format=l.format),u}bd.composeCollection=sw});var Mo=T(kd=>{"use strict";var xo=Q();function nw(n,e,t){let s=e.offset,r=rw(e,n.options.strict,t);if(!r)return{value:"",type:null,comment:"",range:[s,s,s]};let i=r.mode===">"?xo.Scalar.BLOCK_FOLDED:xo.Scalar.BLOCK_LITERAL,o=e.source?iw(e.source):[],a=o.length;for(let f=o.length-1;f>=0;--f){let y=o[f][1];if(y===""||y==="\r")a=f;else break}if(a===0){let f=r.chomp==="+"&&o.length>0?`
|
|
73
|
+
`.repeat(Math.max(1,o.length-1)):"",y=s+r.length;return e.source&&(y+=e.source.length),{value:f,type:i,comment:r.comment,range:[s,y,y]}}let l=e.indent+r.indent,c=e.offset+r.length,d=0;for(let f=0;f<a;++f){let[y,w]=o[f];if(w===""||w==="\r")r.indent===0&&y.length>l&&(l=y.length);else{y.length<l&&t(c+y.length,"MISSING_CHAR","Block scalars with more-indented leading empty lines must use an explicit indentation indicator"),r.indent===0&&(l=y.length),d=f,l===0&&!n.atRoot&&t(c,"BAD_INDENT","Block scalar values in collections must be indented");break}c+=y.length+w.length+1}for(let f=o.length-1;f>=a;--f)o[f][0].length>l&&(a=f+1);let u="",h="",p=!1;for(let f=0;f<d;++f)u+=o[f][0].slice(l)+`
|
|
74
|
+
`;for(let f=d;f<a;++f){let[y,w]=o[f];c+=y.length+w.length+1;let S=w[w.length-1]==="\r";if(S&&(w=w.slice(0,-1)),w&&y.length<l){let A=`Block scalar lines must not be less indented than their ${r.indent?"explicit indentation indicator":"first line"}`;t(c-w.length-(S?2:1),"BAD_INDENT",A),y=""}i===xo.Scalar.BLOCK_LITERAL?(u+=h+y.slice(l)+w,h=`
|
|
75
|
+
`):y.length>l||w[0]===" "?(h===" "?h=`
|
|
76
|
+
`:!p&&h===`
|
|
77
|
+
`&&(h=`
|
|
78
|
+
|
|
79
|
+
`),u+=h+y.slice(l)+w,h=`
|
|
80
|
+
`,p=!0):w===""?h===`
|
|
80
81
|
`?u+=`
|
|
81
|
-
`:
|
|
82
|
-
`:(u+=
|
|
83
|
-
`+o[
|
|
82
|
+
`:h=`
|
|
83
|
+
`:(u+=h+w,h=" ",p=!1)}switch(r.chomp){case"-":break;case"+":for(let f=a;f<o.length;++f)u+=`
|
|
84
|
+
`+o[f][0].slice(l);u[u.length-1]!==`
|
|
84
85
|
`&&(u+=`
|
|
85
86
|
`);break;default:u+=`
|
|
86
|
-
`}let
|
|
87
|
+
`}let g=s+r.length+e.source.length;return{value:u,type:i,comment:r.comment,range:[s,g,g]}}function rw({offset:n,props:e},t,s){if(e[0].type!=="block-scalar-header")return s(e[0],"IMPOSSIBLE","Block scalar header not found"),null;let{source:r}=e[0],i=r[0],o=0,a="",l=-1;for(let h=1;h<r.length;++h){let p=r[h];if(!a&&(p==="-"||p==="+"))a=p;else{let g=Number(p);!o&&g?o=g:l===-1&&(l=n+h)}}l!==-1&&s(l,"UNEXPECTED_TOKEN",`Block scalar header includes extra characters: ${r}`);let c=!1,d="",u=r.length;for(let h=1;h<e.length;++h){let p=e[h];switch(p.type){case"space":c=!0;case"newline":u+=p.source.length;break;case"comment":t&&!c&&s(p,"MISSING_CHAR","Comments must be separated from other tokens by white space characters"),u+=p.source.length,d=p.source.substring(1);break;case"error":s(p,"UNEXPECTED_TOKEN",p.message),u+=p.source.length;break;default:{let g=`Unexpected token in block scalar header: ${p.type}`;s(p,"UNEXPECTED_TOKEN",g);let f=p.source;f&&typeof f=="string"&&(u+=f.length)}}}return{mode:i,indent:o,chomp:a,comment:d,length:u}}function iw(n){let e=n.split(/\n( *)/),t=e[0],s=t.match(/^( *)/),i=[s?.[1]?[s[1],t.slice(s[1].length)]:["",t]];for(let o=1;o<e.length;o+=2)i.push([e[o],e[o+1]]);return i}kd.resolveBlockScalar=nw});var Lo=T(Td=>{"use strict";var Do=Q(),ow=Ft();function aw(n,e,t){let{offset:s,type:r,source:i,end:o}=n,a,l,c=(h,p,g)=>t(s+h,p,g);switch(r){case"scalar":a=Do.Scalar.PLAIN,l=cw(i,c);break;case"single-quoted-scalar":a=Do.Scalar.QUOTE_SINGLE,l=lw(i,c);break;case"double-quoted-scalar":a=Do.Scalar.QUOTE_DOUBLE,l=dw(i,c);break;default:return t(n,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${r}`),{value:"",type:null,comment:"",range:[s,s+i.length,s+i.length]}}let d=s+i.length,u=ow.resolveEnd(o,d,e,t);return{value:l,type:a,comment:u.comment,range:[s,d,u.offset]}}function cw(n,e){let t="";switch(n[0]){case" ":t="a tab character";break;case",":t="flow indicator character ,";break;case"%":t="directive indicator character %";break;case"|":case">":{t=`block scalar indicator ${n[0]}`;break}case"@":case"`":{t=`reserved character ${n[0]}`;break}}return t&&e(0,"BAD_SCALAR_START",`Plain value cannot start with ${t}`),vd(n)}function lw(n,e){return(n[n.length-1]!=="'"||n.length===1)&&e(n.length,"MISSING_CHAR","Missing closing 'quote"),vd(n.slice(1,-1)).replace(/''/g,"'")}function vd(n){let e,t;try{e=new RegExp(`(.*?)(?<![ ])[ ]*\r?
|
|
87
88
|
`,"sy"),t=new RegExp(`[ ]*(.*?)(?:(?<![ ])[ ]*)?\r?
|
|
88
|
-
`,"sy")}catch{e=/(.*?)[ \t]*\r?\n/sy,t=/[ \t]*(.*?)[ \t]*\r?\n/sy}let
|
|
89
|
-
`?
|
|
90
|
-
`:(
|
|
91
|
-
`))if(
|
|
92
|
-
`){let{fold:i,offset:o}=
|
|
93
|
-
`)for(i=s
|
|
94
|
-
`)for(i=
|
|
95
|
-
`&&!(o==="\r"&&s
|
|
96
|
-
`)&&(t+=
|
|
97
|
-
`||
|
|
98
|
-
`);)
|
|
89
|
+
`,"sy")}catch{e=/(.*?)[ \t]*\r?\n/sy,t=/[ \t]*(.*?)[ \t]*\r?\n/sy}let s=e.exec(n);if(!s)return n;let r=s[1],i=" ",o=e.lastIndex;for(t.lastIndex=o;s=t.exec(n);)s[1]===""?i===`
|
|
90
|
+
`?r+=i:i=`
|
|
91
|
+
`:(r+=i+s[1],i=" "),o=t.lastIndex;let a=/[ \t]*(.*)/sy;return a.lastIndex=o,s=a.exec(n),r+i+(s?.[1]??"")}function dw(n,e){let t="";for(let s=1;s<n.length-1;++s){let r=n[s];if(!(r==="\r"&&n[s+1]===`
|
|
92
|
+
`))if(r===`
|
|
93
|
+
`){let{fold:i,offset:o}=uw(n,s);t+=i,s=o}else if(r==="\\"){let i=n[++s],o=hw[i];if(o)t+=o;else if(i===`
|
|
94
|
+
`)for(i=n[s+1];i===" "||i===" ";)i=n[++s+1];else if(i==="\r"&&n[s+1]===`
|
|
95
|
+
`)for(i=n[++s+1];i===" "||i===" ";)i=n[++s+1];else if(i==="x"||i==="u"||i==="U"){let a={x:2,u:4,U:8}[i];t+=fw(n,s+1,a,e),s+=a}else{let a=n.substr(s-1,2);e(s-1,"BAD_DQ_ESCAPE",`Invalid escape sequence ${a}`),t+=a}}else if(r===" "||r===" "){let i=s,o=n[s+1];for(;o===" "||o===" ";)o=n[++s+1];o!==`
|
|
96
|
+
`&&!(o==="\r"&&n[s+2]===`
|
|
97
|
+
`)&&(t+=s>i?n.slice(i,s+1):r)}else t+=r}return(n[n.length-1]!=='"'||n.length===1)&&e(n.length,"MISSING_CHAR",'Missing closing "quote'),t}function uw(n,e){let t="",s=n[e+1];for(;(s===" "||s===" "||s===`
|
|
98
|
+
`||s==="\r")&&!(s==="\r"&&n[e+2]!==`
|
|
99
|
+
`);)s===`
|
|
99
100
|
`&&(t+=`
|
|
100
|
-
`),e+=1,
|
|
101
|
-
`,r:"\r",t:" ",v:"\v",N:"\x85",_:"\xA0",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\"," ":" "};function
|
|
101
|
+
`),e+=1,s=n[e+1];return t||(t=" "),{fold:t,offset:e}}var hw={0:"\0",a:"\x07",b:"\b",e:"\x1B",f:"\f",n:`
|
|
102
|
+
`,r:"\r",t:" ",v:"\v",N:"\x85",_:"\xA0",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\"," ":" "};function fw(n,e,t,s){let r=n.substr(e,t),o=r.length===t&&/^[0-9a-fA-F]+$/.test(r)?parseInt(r,16):NaN;if(isNaN(o)){let a=n.substr(e-2,t+2);return s(e-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${a}`),a}return String.fromCodePoint(o)}Td.resolveFlowScalar=aw});var Cd=T(Ad=>{"use strict";var gt=$(),Id=Q(),pw=Mo(),mw=Lo();function gw(n,e,t,s){let{value:r,type:i,comment:o,range:a}=e.type==="block-scalar"?pw.resolveBlockScalar(n,e,s):mw.resolveFlowScalar(e,n.options.strict,s),l=t?n.directives.tagName(t.source,u=>s(t,"TAG_RESOLVE_FAILED",u)):null,c;n.options.stringKeys&&n.atKey?c=n.schema[gt.SCALAR]:l?c=yw(n.schema,r,l,t,s):e.type==="scalar"?c=ww(n,r,e,s):c=n.schema[gt.SCALAR];let d;try{let u=c.resolve(r,h=>s(t??e,"TAG_RESOLVE_FAILED",h),n.options);d=gt.isScalar(u)?u:new Id.Scalar(u)}catch(u){let h=u instanceof Error?u.message:String(u);s(t??e,"TAG_RESOLVE_FAILED",h),d=new Id.Scalar(r)}return d.range=a,d.source=r,i&&(d.type=i),l&&(d.tag=l),c.format&&(d.format=c.format),o&&(d.comment=o),d}function yw(n,e,t,s,r){if(t==="!")return n[gt.SCALAR];let i=[];for(let a of n.tags)if(!a.collection&&a.tag===t)if(a.default&&a.test)i.push(a);else return a;for(let a of i)if(a.test?.test(e))return a;let o=n.knownTags[t];return o&&!o.collection?(n.tags.push(Object.assign({},o,{default:!1,test:void 0})),o):(r(s,"TAG_RESOLVE_FAILED",`Unresolved tag: ${t}`,t!=="tag:yaml.org,2002:str"),n[gt.SCALAR])}function ww({atKey:n,directives:e,schema:t},s,r,i){let o=t.tags.find(a=>(a.default===!0||n&&a.default==="key")&&a.test?.test(s))||t[gt.SCALAR];if(t.compat){let a=t.compat.find(l=>l.default&&l.test?.test(s))??t[gt.SCALAR];if(o.tag!==a.tag){let l=e.tagString(o.tag),c=e.tagString(a.tag),d=`Value may be parsed as either ${l} or ${c}`;i(r,"TAG_RESOLVE_FAILED",d,!0)}}return o}Ad.composeScalar=gw});var Nd=T(Ed=>{"use strict";function Sw(n,e,t){if(e){t??(t=e.length);for(let s=t-1;s>=0;--s){let r=e[s];switch(r.type){case"space":case"comment":case"newline":n-=r.source.length;continue}for(r=e[++s];r?.type==="space";)n+=r.source.length,r=e[++s];break}}return n}Ed.emptyScalarPosition=Sw});var Md=T($o=>{"use strict";var bw=ds(),_w=$(),kw=_d(),Od=Cd(),vw=Ft(),Tw=Nd(),Iw={composeNode:xd,composeEmptyNode:Po};function xd(n,e,t,s){let r=n.atKey,{spaceBefore:i,comment:o,anchor:a,tag:l}=t,c,d=!0;switch(e.type){case"alias":c=Aw(n,e,s),(a||l)&&s(e,"ALIAS_PROPS","An alias node must not specify any properties");break;case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"block-scalar":c=Od.composeScalar(n,e,l,s),a&&(c.anchor=a.source.substring(1));break;case"block-map":case"block-seq":case"flow-collection":try{c=kw.composeCollection(Iw,n,e,t,s),a&&(c.anchor=a.source.substring(1))}catch(u){let h=u instanceof Error?u.message:String(u);s(e,"RESOURCE_EXHAUSTION",h)}break;default:{let u=e.type==="error"?e.message:`Unsupported token (type: ${e.type})`;s(e,"UNEXPECTED_TOKEN",u),d=!1}}return c??(c=Po(n,e.offset,void 0,null,t,s)),a&&c.anchor===""&&s(a,"BAD_ALIAS","Anchor cannot be an empty string"),r&&n.options.stringKeys&&(!_w.isScalar(c)||typeof c.value!="string"||c.tag&&c.tag!=="tag:yaml.org,2002:str")&&s(l??e,"NON_STRING_KEY","With stringKeys, all keys must be strings"),i&&(c.spaceBefore=!0),o&&(e.type==="scalar"&&e.source===""?c.comment=o:c.commentBefore=o),n.options.keepSourceTokens&&d&&(c.srcToken=e),c}function Po(n,e,t,s,{spaceBefore:r,comment:i,anchor:o,tag:a,end:l},c){let d={type:"scalar",offset:Tw.emptyScalarPosition(e,t,s),indent:-1,source:""},u=Od.composeScalar(n,d,a,c);return o&&(u.anchor=o.source.substring(1),u.anchor===""&&c(o,"BAD_ALIAS","Anchor cannot be an empty string")),r&&(u.spaceBefore=!0),i&&(u.comment=i,u.range[2]=l),u}function Aw({options:n},{offset:e,source:t,end:s},r){let i=new bw.Alias(t.substring(1));i.source===""&&r(e,"BAD_ALIAS","Alias cannot be an empty string"),i.source.endsWith(":")&&r(e+t.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);let o=e+t.length,a=vw.resolveEnd(s,o,n.strict,r);return i.range=[e,o,a.offset],a.comment&&(i.comment=a.comment),i}$o.composeEmptyNode=Po;$o.composeNode=xd});var Pd=T(Ld=>{"use strict";var Cw=Cs(),Dd=Md(),Ew=Ft(),Nw=xs();function Ow(n,e,{offset:t,start:s,value:r,end:i},o){let a=Object.assign({_directives:e},n),l=new Cw.Document(void 0,a),c={atKey:!1,atRoot:!0,directives:l.directives,options:l.options,schema:l.schema},d=Nw.resolveProps(s,{indicator:"doc-start",next:r??i?.[0],offset:t,onError:o,parentIndent:0,startOnNewline:!0});d.found&&(l.directives.docStart=!0,r&&(r.type==="block-map"||r.type==="block-seq")&&!d.hasNewline&&o(d.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")),l.contents=r?Dd.composeNode(c,r,d,o):Dd.composeEmptyNode(c,d.end,s,null,d,o);let u=l.contents.range[2],h=Ew.resolveEnd(i,u,!1,o);return h.comment&&(l.comment=h.comment),l.range=[t,u,h.offset],l}Ld.composeDoc=Ow});var Bo=T(Bd=>{"use strict";var xw=F("process"),Mw=ki(),Dw=Cs(),Ms=Os(),$d=$(),Lw=Pd(),Pw=Ft();function Ds(n){if(typeof n=="number")return[n,n+1];if(Array.isArray(n))return n.length===2?n:[n[0],n[1]];let{offset:e,source:t}=n;return[e,e+(typeof t=="string"?t.length:1)]}function Rd(n){let e="",t=!1,s=!1;for(let r=0;r<n.length;++r){let i=n[r];switch(i[0]){case"#":e+=(e===""?"":s?`
|
|
102
103
|
|
|
103
104
|
`:`
|
|
104
|
-
`)+(i.substring(1)||" "),t=!0,
|
|
105
|
-
${
|
|
106
|
-
${a}`:
|
|
107
|
-
${o}`:
|
|
108
|
-
${t.comment}`:t.comment}this.doc.range[2]=t.offset;break}default:this.errors.push(new
|
|
105
|
+
`)+(i.substring(1)||" "),t=!0,s=!1;break;case"%":n[r+1]?.[0]!=="#"&&(r+=1),t=!1;break;default:t||(s=!0),t=!1}}return{comment:e,afterEmptyLine:s}}var Ro=class{constructor(e={}){this.doc=null,this.atDirectives=!1,this.prelude=[],this.errors=[],this.warnings=[],this.onError=(t,s,r,i)=>{let o=Ds(t);i?this.warnings.push(new Ms.YAMLWarning(o,s,r)):this.errors.push(new Ms.YAMLParseError(o,s,r))},this.directives=new Mw.Directives({version:e.version||"1.2"}),this.options=e}decorate(e,t){let{comment:s,afterEmptyLine:r}=Rd(this.prelude);if(s){let i=e.contents;if(t)e.comment=e.comment?`${e.comment}
|
|
106
|
+
${s}`:s;else if(r||e.directives.docStart||!i)e.commentBefore=s;else if($d.isCollection(i)&&!i.flow&&i.items.length>0){let o=i.items[0];$d.isPair(o)&&(o=o.key);let a=o.commentBefore;o.commentBefore=a?`${s}
|
|
107
|
+
${a}`:s}else{let o=i.commentBefore;i.commentBefore=o?`${s}
|
|
108
|
+
${o}`:s}}t?(Array.prototype.push.apply(e.errors,this.errors),Array.prototype.push.apply(e.warnings,this.warnings)):(e.errors=this.errors,e.warnings=this.warnings),this.prelude=[],this.errors=[],this.warnings=[]}streamInfo(){return{comment:Rd(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose(e,t=!1,s=-1){for(let r of e)yield*this.next(r);yield*this.end(t,s)}*next(e){switch(xw.env.LOG_STREAM&&console.dir(e,{depth:null}),e.type){case"directive":this.directives.add(e.source,(t,s,r)=>{let i=Ds(e);i[0]+=t,this.onError(i,"BAD_DIRECTIVE",s,r)}),this.prelude.push(e.source),this.atDirectives=!0;break;case"document":{let t=Lw.composeDoc(this.options,this.directives,e,this.onError);this.atDirectives&&!t.directives.docStart&&this.onError(e,"MISSING_CHAR","Missing directives-end/doc-start indicator line"),this.decorate(t,!1),this.doc&&(yield this.doc),this.doc=t,this.atDirectives=!1;break}case"byte-order-mark":case"space":break;case"comment":case"newline":this.prelude.push(e.source);break;case"error":{let t=e.source?`${e.message}: ${JSON.stringify(e.source)}`:e.message,s=new Ms.YAMLParseError(Ds(e),"UNEXPECTED_TOKEN",t);this.atDirectives||!this.doc?this.errors.push(s):this.doc.errors.push(s);break}case"doc-end":{if(!this.doc){let s="Unexpected doc-end without preceding document";this.errors.push(new Ms.YAMLParseError(Ds(e),"UNEXPECTED_TOKEN",s));break}this.doc.directives.docEnd=!0;let t=Pw.resolveEnd(e.end,e.offset+e.source.length,this.doc.options.strict,this.onError);if(this.decorate(this.doc,!0),t.comment){let s=this.doc.comment;this.doc.comment=s?`${s}
|
|
109
|
+
${t.comment}`:t.comment}this.doc.range[2]=t.offset;break}default:this.errors.push(new Ms.YAMLParseError(Ds(e),"UNEXPECTED_TOKEN",`Unsupported token ${e.type}`))}}*end(e=!1,t=-1){if(this.doc)this.decorate(this.doc,!0),yield this.doc,this.doc=null;else if(e){let s=Object.assign({_directives:this.directives},this.options),r=new Dw.Document(void 0,s);this.atDirectives&&this.onError(t,"MISSING_CHAR","Missing directives-end indicator line"),r.range=[0,t,t],this.decorate(r,!1),yield r}}};Bd.Composer=Ro});var jd=T(Zn=>{"use strict";var $w=Mo(),Rw=Lo(),Bw=Os(),Ud=ms();function Uw(n,e=!0,t){if(n){let s=(r,i,o)=>{let a=typeof r=="number"?r:Array.isArray(r)?r[0]:r.offset;if(t)t(a,i,o);else throw new Bw.YAMLParseError([a,a+1],i,o)};switch(n.type){case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return Rw.resolveFlowScalar(n,e,s);case"block-scalar":return $w.resolveBlockScalar({options:{strict:e}},n,s)}}return null}function qw(n,e){let{implicitKey:t=!1,indent:s,inFlow:r=!1,offset:i=-1,type:o="PLAIN"}=e,a=Ud.stringifyString({type:o,value:n},{implicitKey:t,indent:s>0?" ".repeat(s):"",inFlow:r,options:{blockQuote:!0,lineWidth:-1}}),l=e.end??[{type:"newline",offset:-1,indent:s,source:`
|
|
109
110
|
`}];switch(a[0]){case"|":case">":{let c=a.indexOf(`
|
|
110
111
|
`),d=a.substring(0,c),u=a.substring(c+1)+`
|
|
111
|
-
`,
|
|
112
|
-
`}),{type:"block-scalar",offset:i,indent:
|
|
113
|
-
`),
|
|
114
|
-
`;if(
|
|
115
|
-
`});for(let l of Object.keys(
|
|
116
|
-
`};delete
|
|
112
|
+
`,h=[{type:"block-scalar-header",offset:i,indent:s,source:d}];return qd(h,l)||h.push({type:"newline",offset:-1,indent:s,source:`
|
|
113
|
+
`}),{type:"block-scalar",offset:i,indent:s,props:h,source:u}}case'"':return{type:"double-quoted-scalar",offset:i,indent:s,source:a,end:l};case"'":return{type:"single-quoted-scalar",offset:i,indent:s,source:a,end:l};default:return{type:"scalar",offset:i,indent:s,source:a,end:l}}}function jw(n,e,t={}){let{afterKey:s=!1,implicitKey:r=!1,inFlow:i=!1,type:o}=t,a="indent"in n?n.indent:null;if(s&&typeof a=="number"&&(a+=2),!o)switch(n.type){case"single-quoted-scalar":o="QUOTE_SINGLE";break;case"double-quoted-scalar":o="QUOTE_DOUBLE";break;case"block-scalar":{let c=n.props[0];if(c.type!=="block-scalar-header")throw new Error("Invalid block scalar header");o=c.source[0]===">"?"BLOCK_FOLDED":"BLOCK_LITERAL";break}default:o="PLAIN"}let l=Ud.stringifyString({type:o,value:e},{implicitKey:r||a===null,indent:a!==null&&a>0?" ".repeat(a):"",inFlow:i,options:{blockQuote:!0,lineWidth:-1}});switch(l[0]){case"|":case">":Fw(n,l);break;case'"':Uo(n,l,"double-quoted-scalar");break;case"'":Uo(n,l,"single-quoted-scalar");break;default:Uo(n,l,"scalar")}}function Fw(n,e){let t=e.indexOf(`
|
|
114
|
+
`),s=e.substring(0,t),r=e.substring(t+1)+`
|
|
115
|
+
`;if(n.type==="block-scalar"){let i=n.props[0];if(i.type!=="block-scalar-header")throw new Error("Invalid block scalar header");i.source=s,n.source=r}else{let{offset:i}=n,o="indent"in n?n.indent:-1,a=[{type:"block-scalar-header",offset:i,indent:o,source:s}];qd(a,"end"in n?n.end:void 0)||a.push({type:"newline",offset:-1,indent:o,source:`
|
|
116
|
+
`});for(let l of Object.keys(n))l!=="type"&&l!=="offset"&&delete n[l];Object.assign(n,{type:"block-scalar",indent:o,props:a,source:r})}}function qd(n,e){if(e)for(let t of e)switch(t.type){case"space":case"comment":n.push(t);break;case"newline":return n.push(t),!0}return!1}function Uo(n,e,t){switch(n.type){case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":n.type=t,n.source=e;break;case"block-scalar":{let s=n.props.slice(1),r=e.length;n.props[0].type==="block-scalar-header"&&(r-=n.props[0].source.length);for(let i of s)i.offset+=r;delete n.props,Object.assign(n,{type:t,source:e,end:s});break}case"block-map":case"block-seq":{let r={type:"newline",offset:n.offset+e.length,indent:n.indent,source:`
|
|
117
|
+
`};delete n.items,Object.assign(n,{type:t,source:e,end:[r]});break}default:{let s="indent"in n?n.indent:-1,r="end"in n&&Array.isArray(n.end)?n.end.filter(i=>i.type==="space"||i.type==="comment"||i.type==="newline"):[];for(let i of Object.keys(n))i!=="type"&&i!=="offset"&&delete n[i];Object.assign(n,{type:t,indent:s,source:e,end:r})}}}Zn.createScalarToken=qw;Zn.resolveAsScalar=Uw;Zn.setScalarValue=jw});var Kd=T(Fd=>{"use strict";var Kw=n=>"type"in n?tr(n):er(n);function tr(n){switch(n.type){case"block-scalar":{let e="";for(let t of n.props)e+=tr(t);return e+n.source}case"block-map":case"block-seq":{let e="";for(let t of n.items)e+=er(t);return e}case"flow-collection":{let e=n.start.source;for(let t of n.items)e+=er(t);for(let t of n.end)e+=t.source;return e}case"document":{let e=er(n);if(n.end)for(let t of n.end)e+=t.source;return e}default:{let e=n.source;if("end"in n&&n.end)for(let t of n.end)e+=t.source;return e}}}function er({start:n,key:e,sep:t,value:s}){let r="";for(let i of n)r+=i.source;if(e&&(r+=tr(e)),t)for(let i of t)r+=i.source;return s&&(r+=tr(s)),r}Fd.stringify=Kw});var Vd=T(Wd=>{"use strict";var qo=Symbol("break visit"),Gw=Symbol("skip children"),Gd=Symbol("remove item");function yt(n,e){"type"in n&&n.type==="document"&&(n={start:n.start,value:n.value}),Hd(Object.freeze([]),n,e)}yt.BREAK=qo;yt.SKIP=Gw;yt.REMOVE=Gd;yt.itemAtPath=(n,e)=>{let t=n;for(let[s,r]of e){let i=t?.[s];if(i&&"items"in i)t=i.items[r];else return}return t};yt.parentCollection=(n,e)=>{let t=yt.itemAtPath(n,e.slice(0,-1)),s=e[e.length-1][0],r=t?.[s];if(r&&"items"in r)return r;throw new Error("Parent collection not found")};function Hd(n,e,t){let s=t(e,n);if(typeof s=="symbol")return s;for(let r of["key","value"]){let i=e[r];if(i&&"items"in i){for(let o=0;o<i.items.length;++o){let a=Hd(Object.freeze(n.concat([[r,o]])),i.items[o],t);if(typeof a=="number")o=a-1;else{if(a===qo)return qo;a===Gd&&(i.items.splice(o,1),o-=1)}}typeof s=="function"&&r==="key"&&(s=s(e,n))}}return typeof s=="function"?s(e,n):s}Wd.visit=yt});var sr=T(ue=>{"use strict";var jo=jd(),Hw=Kd(),Ww=Vd(),Fo="\uFEFF",Ko="",Go="",Ho="",Vw=n=>!!n&&"items"in n,Yw=n=>!!n&&(n.type==="scalar"||n.type==="single-quoted-scalar"||n.type==="double-quoted-scalar"||n.type==="block-scalar");function Jw(n){switch(n){case Fo:return"<BOM>";case Ko:return"<DOC>";case Go:return"<FLOW_END>";case Ho:return"<SCALAR>";default:return JSON.stringify(n)}}function zw(n){switch(n){case Fo:return"byte-order-mark";case Ko:return"doc-mode";case Go:return"flow-error-end";case Ho:return"scalar";case"---":return"doc-start";case"...":return"doc-end";case"":case`
|
|
117
118
|
`:case`\r
|
|
118
|
-
`: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(
|
|
119
|
-
`:case"\r":case" ":return!0;default:return!1}}var
|
|
120
|
-
\r `),
|
|
119
|
+
`:return"newline";case"-":return"seq-item-ind";case"?":return"explicit-key-ind";case":":return"map-value-ind";case"{":return"flow-map-start";case"}":return"flow-map-end";case"[":return"flow-seq-start";case"]":return"flow-seq-end";case",":return"comma"}switch(n[0]){case" ":case" ":return"space";case"#":return"comment";case"%":return"directive-line";case"*":return"alias";case"&":return"anchor";case"!":return"tag";case"'":return"single-quoted-scalar";case'"':return"double-quoted-scalar";case"|":case">":return"block-scalar-header"}return null}ue.createScalarToken=jo.createScalarToken;ue.resolveAsScalar=jo.resolveAsScalar;ue.setScalarValue=jo.setScalarValue;ue.stringify=Hw.stringify;ue.visit=Ww.visit;ue.BOM=Fo;ue.DOCUMENT=Ko;ue.FLOW_END=Go;ue.SCALAR=Ho;ue.isCollection=Vw;ue.isScalar=Yw;ue.prettyToken=Jw;ue.tokenType=zw});var Yo=T(Jd=>{"use strict";var Ls=sr();function Ie(n){switch(n){case void 0:case" ":case`
|
|
120
|
+
`:case"\r":case" ":return!0;default:return!1}}var Yd=new Set("0123456789ABCDEFabcdef"),Qw=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),nr=new Set(",[]{}"),Xw=new Set(` ,[]{}
|
|
121
|
+
\r `),Wo=n=>!n||Xw.has(n),Vo=class{constructor(){this.atEnd=!1,this.blockScalarIndent=-1,this.blockScalarKeep=!1,this.buffer="",this.flowKey=!1,this.flowLevel=0,this.indentNext=0,this.indentValue=0,this.lineEndPos=null,this.next=null,this.pos=0}*lex(e,t=!1){if(e){if(typeof e!="string")throw TypeError("source is not a string");this.buffer=this.buffer?this.buffer+e:e,this.lineEndPos=null}this.atEnd=!t;let s=this.next??"stream";for(;s&&(t||this.hasChars(1));)s=yield*this.parseNext(s)}atLineEnd(){let e=this.pos,t=this.buffer[e];for(;t===" "||t===" ";)t=this.buffer[++e];return!t||t==="#"||t===`
|
|
121
122
|
`?!0:t==="\r"?this.buffer[e+1]===`
|
|
122
|
-
`:!1}charAt(e){return this.buffer[this.pos+e]}continueScalar(e){let t=this.buffer[e];if(this.indentNext>0){let
|
|
123
|
-
`||!
|
|
124
|
-
`||
|
|
125
|
-
`,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]===
|
|
126
|
-
`,this.pos);if(
|
|
127
|
-
`,i)}
|
|
123
|
+
`:!1}charAt(e){return this.buffer[this.pos+e]}continueScalar(e){let t=this.buffer[e];if(this.indentNext>0){let s=0;for(;t===" ";)t=this.buffer[++s+e];if(t==="\r"){let r=this.buffer[s+e+1];if(r===`
|
|
124
|
+
`||!r&&!this.atEnd)return e+s+1}return t===`
|
|
125
|
+
`||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(`
|
|
126
|
+
`,this.pos),this.lineEndPos=e),e===-1?this.atEnd?this.buffer.substring(this.pos):null:(this.buffer[e-1]==="\r"&&(e-=1),this.buffer.substring(this.pos,e))}hasChars(e){return this.pos+e<=this.buffer.length}setNext(e){return this.buffer=this.buffer.substring(this.pos),this.pos=0,this.lineEndPos=null,this.next=e,null}peek(e){return this.buffer.substr(this.pos,e)}*parseNext(e){switch(e){case"stream":return yield*this.parseStream();case"line-start":return yield*this.parseLineStart();case"block-start":return yield*this.parseBlockStart();case"doc":return yield*this.parseDocument();case"flow":return yield*this.parseFlowCollection();case"quoted-scalar":return yield*this.parseQuotedScalar();case"block-scalar":return yield*this.parseBlockScalar();case"plain-scalar":return yield*this.parsePlainScalar()}}*parseStream(){let e=this.getLine();if(e===null)return this.setNext("stream");if(e[0]===Ls.BOM&&(yield*this.pushCount(1),e=e.substring(1)),e[0]==="%"){let t=e.length,s=e.indexOf("#");for(;s!==-1;){let i=e[s-1];if(i===" "||i===" "){t=s-1;break}else s=e.indexOf("#",s+1)}for(;;){let i=e[t-1];if(i===" "||i===" ")t-=1;else break}let r=(yield*this.pushCount(t))+(yield*this.pushSpaces(!0));return yield*this.pushCount(e.length-r),this.pushNewline(),"stream"}if(this.atLineEnd()){let t=yield*this.pushSpaces(!0);return yield*this.pushCount(e.length-t),yield*this.pushNewline(),"stream"}return yield Ls.DOCUMENT,yield*this.parseLineStart()}*parseLineStart(){let e=this.charAt(0);if(!e&&!this.atEnd)return this.setNext("line-start");if(e==="-"||e==="."){if(!this.atEnd&&!this.hasChars(4))return this.setNext("line-start");let t=this.peek(3);if((t==="---"||t==="...")&&Ie(this.charAt(3)))return yield*this.pushCount(3),this.indentValue=0,this.indentNext=0,t==="---"?"doc":"stream"}return this.indentValue=yield*this.pushSpaces(!1),this.indentNext>this.indentValue&&!Ie(this.charAt(1))&&(this.indentNext=this.indentValue),yield*this.parseBlockStart()}*parseBlockStart(){let[e,t]=this.peek(2);if(!t&&!this.atEnd)return this.setNext("block-start");if((e==="-"||e==="?"||e===":")&&Ie(t)){let s=(yield*this.pushCount(1))+(yield*this.pushSpaces(!0));return this.indentNext=this.indentValue+1,this.indentValue+=s,yield*this.parseBlockStart()}return"doc"}*parseDocument(){yield*this.pushSpaces(!0);let e=this.getLine();if(e===null)return this.setNext("doc");let t=yield*this.pushIndicators();switch(e[t]){case"#":yield*this.pushCount(e.length-t);case void 0:return yield*this.pushNewline(),yield*this.parseLineStart();case"{":case"[":return yield*this.pushCount(1),this.flowKey=!1,this.flowLevel=1,"flow";case"}":case"]":return yield*this.pushCount(1),"doc";case"*":return yield*this.pushUntil(Wo),"doc";case'"':case"'":return yield*this.parseQuotedScalar();case"|":case">":return t+=yield*this.parseBlockScalarHeader(),t+=yield*this.pushSpaces(!0),yield*this.pushCount(e.length-t),yield*this.pushNewline(),yield*this.parseBlockScalar();default:return yield*this.parsePlainScalar()}}*parseFlowCollection(){let e,t,s=-1;do e=yield*this.pushNewline(),e>0?(t=yield*this.pushSpaces(!1),this.indentValue=s=t):t=0,t+=yield*this.pushSpaces(!0);while(e+t>0);let r=this.getLine();if(r===null)return this.setNext("flow");if((s!==-1&&s<this.indentNext&&r[0]!=="#"||s===0&&(r.startsWith("---")||r.startsWith("..."))&&Ie(r[3]))&&!(s===this.indentNext-1&&this.flowLevel===1&&(r[0]==="]"||r[0]==="}")))return this.flowLevel=0,yield Ls.FLOW_END,yield*this.parseLineStart();let i=0;for(;r[i]===",";)i+=yield*this.pushCount(1),i+=yield*this.pushSpaces(!0),this.flowKey=!1;switch(i+=yield*this.pushIndicators(),r[i]){case void 0:return"flow";case"#":return yield*this.pushCount(r.length-i),"flow";case"{":case"[":return yield*this.pushCount(1),this.flowKey=!1,this.flowLevel+=1,"flow";case"}":case"]":return yield*this.pushCount(1),this.flowKey=!0,this.flowLevel-=1,this.flowLevel?"flow":"doc";case"*":return yield*this.pushUntil(Wo),"flow";case'"':case"'":return this.flowKey=!0,yield*this.parseQuotedScalar();case":":{let o=this.charAt(1);if(this.flowKey||Ie(o)||o===",")return this.flowKey=!1,yield*this.pushCount(1),yield*this.pushSpaces(!0),"flow"}default:return this.flowKey=!1,yield*this.parsePlainScalar()}}*parseQuotedScalar(){let e=this.charAt(0),t=this.buffer.indexOf(e,this.pos+1);if(e==="'")for(;t!==-1&&this.buffer[t+1]==="'";)t=this.buffer.indexOf("'",t+2);else for(;t!==-1;){let i=0;for(;this.buffer[t-1-i]==="\\";)i+=1;if(i%2===0)break;t=this.buffer.indexOf('"',t+1)}let s=this.buffer.substring(0,t),r=s.indexOf(`
|
|
127
|
+
`,this.pos);if(r!==-1){for(;r!==-1;){let i=this.continueScalar(r+1);if(i===-1)break;r=s.indexOf(`
|
|
128
|
+
`,i)}r!==-1&&(t=r-(s[r-1]==="\r"?2:1))}if(t===-1){if(!this.atEnd)return this.setNext("quoted-scalar");t=this.buffer.length}return yield*this.pushToIndex(t+1,!1),this.flowLevel?"flow":"doc"}*parseBlockScalarHeader(){this.blockScalarIndent=-1,this.blockScalarKeep=!1;let e=this.pos;for(;;){let t=this.buffer[++e];if(t==="+")this.blockScalarKeep=!0;else if(t>"0"&&t<="9")this.blockScalarIndent=Number(t)-1;else if(t!=="-")break}return yield*this.pushUntil(t=>Ie(t)||t==="#")}*parseBlockScalar(){let e=this.pos-1,t=0,s;e:for(let i=this.pos;s=this.buffer[i];++i)switch(s){case" ":t+=1;break;case`
|
|
128
129
|
`:e=i,t=0;break;case"\r":{let o=this.buffer[i+1];if(!o&&!this.atEnd)return this.setNext("block-scalar");if(o===`
|
|
129
|
-
`)break}default:break e}if(!
|
|
130
|
-
`,i)}while(e!==-1);if(e===-1){if(!this.atEnd)return this.setNext("block-scalar");e=this.buffer.length}}let
|
|
131
|
-
`;)
|
|
132
|
-
`&&i>=this.pos&&i+1+t>a)e=i;else break}while(!0);return yield
|
|
133
|
-
`?(
|
|
134
|
-
`,i=this.buffer[
|
|
135
|
-
`){let o=this.continueScalar(
|
|
130
|
+
`)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(`
|
|
131
|
+
`,i)}while(e!==-1);if(e===-1){if(!this.atEnd)return this.setNext("block-scalar");e=this.buffer.length}}let r=e+1;for(s=this.buffer[r];s===" ";)s=this.buffer[++r];if(s===" "){for(;s===" "||s===" "||s==="\r"||s===`
|
|
132
|
+
`;)s=this.buffer[++r];e=r-1}else if(!this.blockScalarKeep)do{let i=e-1,o=this.buffer[i];o==="\r"&&(o=this.buffer[--i]);let a=i;for(;o===" ";)o=this.buffer[--i];if(o===`
|
|
133
|
+
`&&i>=this.pos&&i+1+t>a)e=i;else break}while(!0);return yield Ls.SCALAR,yield*this.pushToIndex(e+1,!0),yield*this.parseLineStart()}*parsePlainScalar(){let e=this.flowLevel>0,t=this.pos-1,s=this.pos-1,r;for(;r=this.buffer[++s];)if(r===":"){let i=this.buffer[s+1];if(Ie(i)||e&&nr.has(i))break;t=s}else if(Ie(r)){let i=this.buffer[s+1];if(r==="\r"&&(i===`
|
|
134
|
+
`?(s+=1,r=`
|
|
135
|
+
`,i=this.buffer[s+1]):t=s),i==="#"||e&&nr.has(i))break;if(r===`
|
|
136
|
+
`){let o=this.continueScalar(s+1);if(o===-1)break;s=Math.max(s,o-2)}}else{if(e&&nr.has(r))break;t=s}return!r&&!this.atEnd?this.setNext("plain-scalar"):(yield Ls.SCALAR,yield*this.pushToIndex(t+1,!0),e?"flow":"doc")}*pushCount(e){return e>0?(yield this.buffer.substr(this.pos,e),this.pos+=e,e):0}*pushToIndex(e,t){let s=this.buffer.slice(this.pos,e);return s?(yield s,this.pos+=s.length,s.length):(t&&(yield""),0)}*pushIndicators(){switch(this.charAt(0)){case"!":return(yield*this.pushTag())+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"&":return(yield*this.pushUntil(Wo))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"-":case"?":case":":{let e=this.flowLevel>0,t=this.charAt(1);if(Ie(t)||e&&nr.has(t))return e?this.flowKey&&(this.flowKey=!1):this.indentNext=this.indentValue+1,(yield*this.pushCount(1))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators())}}return 0}*pushTag(){if(this.charAt(1)==="<"){let e=this.pos+2,t=this.buffer[e];for(;!Ie(t)&&t!==">";)t=this.buffer[++e];return yield*this.pushToIndex(t===">"?e+1:e,!1)}else{let e=this.pos+1,t=this.buffer[e];for(;t;)if(Qw.has(t))t=this.buffer[++e];else if(t==="%"&&Yd.has(this.buffer[e+1])&&Yd.has(this.buffer[e+2]))t=this.buffer[e+=3];else break;return yield*this.pushToIndex(e,!1)}}*pushNewline(){let e=this.buffer[this.pos];return e===`
|
|
136
137
|
`?yield*this.pushCount(1):e==="\r"&&this.charAt(1)===`
|
|
137
|
-
`?yield*this.pushCount(2):0}*pushSpaces(e){let t=this.pos-1,
|
|
138
|
+
`?yield*this.pushCount(2):0}*pushSpaces(e){let t=this.pos-1,s;do s=this.buffer[++t];while(s===" "||e&&s===" ");let r=t-this.pos;return r>0&&(yield this.buffer.substr(this.pos,r),this.pos=t),r}*pushUntil(e){let t=this.pos,s=this.buffer[t];for(;!e(s);)s=this.buffer[++t];return yield*this.pushToIndex(t,!1)}};Jd.Lexer=Vo});var zo=T(zd=>{"use strict";var Jo=class{constructor(){this.lineStarts=[],this.addNewLine=e=>this.lineStarts.push(e),this.linePos=e=>{let t=0,s=this.lineStarts.length;for(;t<s;){let i=t+s>>1;this.lineStarts[i]<e?t=i+1:s=i}if(this.lineStarts[t]===e)return{line:t+1,col:1};if(t===0)return{line:0,col:e};let r=this.lineStarts[t-1];return{line:t,col:e-r+1}}}};zd.LineCounter=Jo});var Xo=T(tu=>{"use strict";var Zw=F("process"),Qd=sr(),eS=Yo();function it(n,e){for(let t=0;t<n.length;++t)if(n[t].type===e)return!0;return!1}function Xd(n){for(let e=0;e<n.length;++e)switch(n[e].type){case"space":case"comment":case"newline":break;default:return e}return-1}function eu(n){switch(n?.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"flow-collection":return!0;default:return!1}}function rr(n){switch(n.type){case"document":return n.start;case"block-map":{let e=n.items[n.items.length-1];return e.sep??e.start}case"block-seq":return n.items[n.items.length-1].start;default:return[]}}function Kt(n){if(n.length===0)return[];let e=n.length;e:for(;--e>=0;)switch(n[e].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break e}for(;n[++e]?.type==="space";);return n.splice(e,n.length)}function Zd(n){if(n.start.type==="flow-seq-start")for(let e of n.items)e.sep&&!e.value&&!it(e.start,"explicit-key-ind")&&!it(e.sep,"map-value-ind")&&(e.key&&(e.value=e.key),delete e.key,eu(e.value)?e.value.end?Array.prototype.push.apply(e.value.end,e.sep):e.value.end=e.sep:Array.prototype.push.apply(e.start,e.sep),delete e.sep)}var Qo=class{constructor(e){this.atNewLine=!0,this.atScalar=!1,this.indent=0,this.offset=0,this.onKeyLine=!1,this.stack=[],this.source="",this.type="",this.lexer=new eS.Lexer,this.onNewLine=e}*parse(e,t=!1){this.onNewLine&&this.offset===0&&this.onNewLine(0);for(let s of this.lexer.lex(e,t))yield*this.next(s);t||(yield*this.end())}*next(e){if(this.source=e,Zw.env.LOG_TOKENS&&console.log("|",Qd.prettyToken(e)),this.atScalar){this.atScalar=!1,yield*this.step(),this.offset+=e.length;return}let t=Qd.tokenType(e);if(t)if(t==="scalar")this.atNewLine=!1,this.atScalar=!0,this.type="scalar";else{switch(this.type=t,yield*this.step(),t){case"newline":this.atNewLine=!0,this.indent=0,this.onNewLine&&this.onNewLine(this.offset+e.length);break;case"space":this.atNewLine&&e[0]===" "&&(this.indent+=e.length);break;case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":this.atNewLine&&(this.indent+=e.length);break;case"doc-mode":case"flow-error-end":return;default:this.atNewLine=!1}this.offset+=e.length}else{let s=`Not a YAML token: ${e}`;yield*this.pop({type:"error",offset:this.offset,message:s,source:e}),this.offset+=e.length}}*end(){for(;this.stack.length>0;)yield*this.pop()}get sourceToken(){return{type:this.type,offset:this.offset,indent:this.indent,source:this.source}}*step(){let e=this.peek(1);if(this.type==="doc-end"&&e?.type!=="doc-end"){for(;this.stack.length>0;)yield*this.pop();this.stack.push({type:"doc-end",offset:this.offset,source:this.source});return}if(!e)return yield*this.stream();switch(e.type){case"document":return yield*this.document(e);case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*this.scalar(e);case"block-scalar":return yield*this.blockScalar(e);case"block-map":return yield*this.blockMap(e);case"block-seq":return yield*this.blockSequence(e);case"flow-collection":return yield*this.flowCollection(e);case"doc-end":return yield*this.documentEnd(e)}yield*this.pop()}peek(e){return this.stack[this.stack.length-e]}*pop(e){let t=e??this.stack.pop();if(!t)yield{type:"error",offset:this.offset,source:"",message:"Tried to pop an empty stack"};else if(this.stack.length===0)yield t;else{let s=this.peek(1);switch(t.type==="block-scalar"?t.indent="indent"in s?s.indent:0:t.type==="flow-collection"&&s.type==="document"&&(t.indent=0),t.type==="flow-collection"&&Zd(t),s.type){case"document":s.value=t;break;case"block-scalar":s.props.push(t);break;case"block-map":{let r=s.items[s.items.length-1];if(r.value){s.items.push({start:[],key:t,sep:[]}),this.onKeyLine=!0;return}else if(r.sep)r.value=t;else{Object.assign(r,{key:t,sep:[]}),this.onKeyLine=!r.explicitKey;return}break}case"block-seq":{let r=s.items[s.items.length-1];r.value?s.items.push({start:[],value:t}):r.value=t;break}case"flow-collection":{let r=s.items[s.items.length-1];!r||r.value?s.items.push({start:[],key:t,sep:[]}):r.sep?r.value=t:Object.assign(r,{key:t,sep:[]});return}default:yield*this.pop(),yield*this.pop(t)}if((s.type==="document"||s.type==="block-map"||s.type==="block-seq")&&(t.type==="block-map"||t.type==="block-seq")){let r=t.items[t.items.length-1];r&&!r.sep&&!r.value&&r.start.length>0&&Xd(r.start)===-1&&(t.indent===0||r.start.every(i=>i.type!=="comment"||i.indent<t.indent))&&(s.type==="document"?s.end=r.start:s.items.push({start:r.start}),t.items.splice(-1,1))}}}*stream(){switch(this.type){case"directive-line":yield{type:"directive",offset:this.offset,source:this.source};return;case"byte-order-mark":case"space":case"comment":case"newline":yield this.sourceToken;return;case"doc-mode":case"doc-start":{let e={type:"document",offset:this.offset,start:[]};this.type==="doc-start"&&e.start.push(this.sourceToken),this.stack.push(e);return}}yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML stream`,source:this.source}}*document(e){if(e.value)return yield*this.lineEnd(e);switch(this.type){case"doc-start":{Xd(e.start)!==-1?(yield*this.pop(),yield*this.step()):e.start.push(this.sourceToken);return}case"anchor":case"tag":case"space":case"comment":case"newline":e.start.push(this.sourceToken);return}let t=this.startBlockValue(e);t?this.stack.push(t):yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML document`,source:this.source}}*scalar(e){if(this.type==="map-value-ind"){let t=rr(this.peek(2)),s=Kt(t),r;e.end?(r=e.end,r.push(this.sourceToken),delete e.end):r=[this.sourceToken];let i={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:s,key:e,sep:r}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=i}else yield*this.lineEnd(e)}*blockScalar(e){switch(this.type){case"space":case"comment":case"newline":e.props.push(this.sourceToken);return;case"scalar":if(e.source=this.source,this.atNewLine=!0,this.indent=0,this.onNewLine){let t=this.source.indexOf(`
|
|
138
139
|
`)+1;for(;t!==0;)this.onNewLine(this.offset+t),t=this.source.indexOf(`
|
|
139
|
-
`,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
|
|
140
|
+
`,t)+1}yield*this.pop();break;default:yield*this.pop(),yield*this.step()}}*blockMap(e){let t=e.items[e.items.length-1];switch(this.type){case"newline":if(this.onKeyLine=!1,t.value){let s="end"in t.value?t.value.end:void 0;(Array.isArray(s)?s[s.length-1]:void 0)?.type==="comment"?s?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"space":case"comment":if(t.value)e.items.push({start:[this.sourceToken]});else if(t.sep)t.sep.push(this.sourceToken);else{if(this.atIndentedComment(t.start,e.indent)){let r=e.items[e.items.length-2]?.value?.end;if(Array.isArray(r)){Array.prototype.push.apply(r,t.start),r.push(this.sourceToken),e.items.pop();return}}t.start.push(this.sourceToken)}return}if(this.indent>=e.indent){let s=!this.onKeyLine&&this.indent===e.indent,r=s&&(t.sep||t.explicitKey)&&this.type!=="seq-item-ind",i=[];if(r&&t.sep&&!t.value){let o=[];for(let a=0;a<t.sep.length;++a){let l=t.sep[a];switch(l.type){case"newline":o.push(a);break;case"space":break;case"comment":l.indent>e.indent&&(o.length=0);break;default:o.length=0}}o.length>=2&&(i=t.sep.splice(o[1]))}switch(this.type){case"anchor":case"tag":r||t.value?(i.push(this.sourceToken),e.items.push({start:i}),this.onKeyLine=!0):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"explicit-key-ind":!t.sep&&!t.explicitKey?(t.start.push(this.sourceToken),t.explicitKey=!0):r||t.value?(i.push(this.sourceToken),e.items.push({start:i,explicitKey:!0})):this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]}),this.onKeyLine=!0;return;case"map-value-ind":if(t.explicitKey)if(t.sep)if(t.value)e.items.push({start:[],key:null,sep:[this.sourceToken]});else if(it(t.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,key:null,sep:[this.sourceToken]}]});else if(eu(t.key)&&!it(t.sep,"newline")){let o=Kt(t.start),a=t.key,l=t.sep;l.push(this.sourceToken),delete t.key,delete t.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:a,sep:l}]})}else i.length>0?t.sep=t.sep.concat(i,this.sourceToken):t.sep.push(this.sourceToken);else if(it(t.start,"newline"))Object.assign(t,{key:null,sep:[this.sourceToken]});else{let o=Kt(t.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:null,sep:[this.sourceToken]}]})}else t.sep?t.value||r?e.items.push({start:i,key:null,sep:[this.sourceToken]}):it(t.sep,"map-value-ind")?this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]}):t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let o=this.flowScalar(this.type);r||t.value?(e.items.push({start:i,key:o,sep:[]}),this.onKeyLine=!0):t.sep?this.stack.push(o):(Object.assign(t,{key:o,sep:[]}),this.onKeyLine=!0);return}default:{let o=this.startBlockValue(e);if(o){if(o.type==="block-seq"){if(!t.explicitKey&&t.sep&&!it(t.sep,"newline")){yield*this.pop({type:"error",offset:this.offset,message:"Unexpected block-seq-ind on same line with key",source:this.source});return}}else s&&e.items.push({start:i});this.stack.push(o);return}}}}yield*this.pop(),yield*this.step()}*blockSequence(e){let t=e.items[e.items.length-1];switch(this.type){case"newline":if(t.value){let s="end"in t.value?t.value.end:void 0;(Array.isArray(s)?s[s.length-1]:void 0)?.type==="comment"?s?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else t.start.push(this.sourceToken);return;case"space":case"comment":if(t.value)e.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(t.start,e.indent)){let r=e.items[e.items.length-2]?.value?.end;if(Array.isArray(r)){Array.prototype.push.apply(r,t.start),r.push(this.sourceToken),e.items.pop();return}}t.start.push(this.sourceToken)}return;case"anchor":case"tag":if(t.value||this.indent<=e.indent)break;t.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==e.indent)break;t.value||it(t.start,"seq-item-ind")?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken);return}if(this.indent>e.indent){let s=this.startBlockValue(e);if(s){this.stack.push(s);return}}yield*this.pop(),yield*this.step()}*flowCollection(e){let t=e.items[e.items.length-1];if(this.type==="flow-error-end"){let s;do yield*this.pop(),s=this.peek(1);while(s?.type==="flow-collection")}else if(e.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":!t||t.sep?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken);return;case"map-value-ind":!t||t.value?e.items.push({start:[],key:null,sep:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":!t||t.value?e.items.push({start:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let r=this.flowScalar(this.type);!t||t.value?e.items.push({start:[],key:r,sep:[]}):t.sep?this.stack.push(r):Object.assign(t,{key:r,sep:[]});return}case"flow-map-end":case"flow-seq-end":e.end.push(this.sourceToken);return}let s=this.startBlockValue(e);s?this.stack.push(s):(yield*this.pop(),yield*this.step())}else{let s=this.peek(2);if(s.type==="block-map"&&(this.type==="map-value-ind"&&s.indent===e.indent||this.type==="newline"&&!s.items[s.items.length-1].sep))yield*this.pop(),yield*this.step();else if(this.type==="map-value-ind"&&s.type!=="flow-collection"){let r=rr(s),i=Kt(r);Zd(e);let o=e.end.splice(1,e.end.length);o.push(this.sourceToken);let a={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:i,key:e,sep:o}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=a}else yield*this.lineEnd(e)}}flowScalar(e){if(this.onNewLine){let t=this.source.indexOf(`
|
|
140
141
|
`)+1;for(;t!==0;)this.onNewLine(this.offset+t),t=this.source.indexOf(`
|
|
141
|
-
`,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=On(e),r=Qt(t);return r.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:r,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let t=On(e),r=Qt(t);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:r,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,t){return this.type!=="comment"||this.indent<=t?!1:e.every(r=>r.type==="newline"||r.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())}}};Ef.Parser=Ga});var Nf=w(tr=>{"use strict";var If=La(),m_=Vs(),er=Js(),g_=Oo(),y_=B(),w_=Ha(),kf=Va();function Af(s){let e=s.prettyErrors!==!1;return{lineCounter:s.lineCounter||e&&new w_.LineCounter||null,prettyErrors:e}}function S_(s,e={}){let{lineCounter:t,prettyErrors:r}=Af(e),n=new kf.Parser(t?.addNewLine),i=new If.Composer(e),o=Array.from(i.compose(n.parse(s)));if(r&&t)for(let a of o)a.errors.forEach(er.prettifyError(s,t)),a.warnings.forEach(er.prettifyError(s,t));return o.length>0?o:Object.assign([],{empty:!0},i.streamInfo())}function Cf(s,e={}){let{lineCounter:t,prettyErrors:r}=Af(e),n=new kf.Parser(t?.addNewLine),i=new If.Composer(e),o=null;for(let a of i.compose(n.parse(s),!0,s.length))if(!o)o=a;else if(o.options.logLevel!=="silent"){o.errors.push(new er.YAMLParseError(a.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return r&&t&&(o.errors.forEach(er.prettifyError(s,t)),o.warnings.forEach(er.prettifyError(s,t))),o}function b_(s,e,t){let r;typeof e=="function"?r=e:t===void 0&&e&&typeof e=="object"&&(t=e);let n=Cf(s,t);if(!n)return null;if(n.warnings.forEach(i=>g_.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:r},t))}function v_(s,e,t){let r=null;if(typeof e=="function"||Array.isArray(e)?r=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(s===void 0){let{keepUndefined:n}=t??e??{};if(!n)return}return y_.isDocument(s)&&!r?s.toString(t):new m_.Document(s,r,t).toString(t)}tr.parse=b_;tr.parseAllDocuments=S_;tr.parseDocument=Cf;tr.stringify=v_});var Ya=w(U=>{"use strict";var __=La(),T_=Vs(),E_=fa(),Wa=Js(),I_=Ns(),gt=B(),k_=ut(),A_=se(),C_=ht(),N_=pt(),O_=Cn(),x_=Fa(),L_=Ha(),D_=Va(),xn=Nf(),Of=Is();U.Composer=__.Composer;U.Document=T_.Document;U.Schema=E_.Schema;U.YAMLError=Wa.YAMLError;U.YAMLParseError=Wa.YAMLParseError;U.YAMLWarning=Wa.YAMLWarning;U.Alias=I_.Alias;U.isAlias=gt.isAlias;U.isCollection=gt.isCollection;U.isDocument=gt.isDocument;U.isMap=gt.isMap;U.isNode=gt.isNode;U.isPair=gt.isPair;U.isScalar=gt.isScalar;U.isSeq=gt.isSeq;U.Pair=k_.Pair;U.Scalar=A_.Scalar;U.YAMLMap=C_.YAMLMap;U.YAMLSeq=N_.YAMLSeq;U.CST=O_;U.Lexer=x_.Lexer;U.LineCounter=L_.LineCounter;U.Parser=D_.Parser;U.parse=xn.parse;U.parseAllDocuments=xn.parseAllDocuments;U.parseDocument=xn.parseDocument;U.stringify=xn.stringify;U.visit=Of.visit;U.visitAsync=Of.visitAsync});function xf(s={},e){let t={};for(let r of Object.keys(Zt)){let n=s[r]??Zt[r];t[r]=n&&(e?.[r]??!0)}return t}var Zt,Ja=z(()=>{"use strict";Zt={externalComms:!0,codeTask:!1,codeAccess:!1}});import{existsSync as M_}from"node:fs";import{resolve as sr}from"node:path";function $_(){return process.env.HIVE_HOME?sr(process.env.HIVE_HOME):M_(sr(process.cwd(),"hive.yaml"))?process.cwd():sr(R_,".hive")}function Lf(s){let e=process.env.HIVE_CONFIG||"hive.yaml";return sr(s,e)}function Df(s){let t=(process.env.HIVE_CONFIG||"hive.yaml").match(/^hive-(.+)\.yaml$/)?.[1];return sr(s,t?`.env-${t}`:".env")}var R_,rr,za=z(()=>{"use strict";R_=process.env.HOME??"/tmp";rr=$_()});import{readFileSync as P_,existsSync as q_}from"node:fs";import{resolve as B_}from"node:path";import{randomUUID as Mf}from"node:crypto";function Rf(s){let e=process.env[s];if(!e)throw new Error(`Missing required env var: ${s}`);return e}function _(s,e){return process.env[s]||e}var Pf,qf,j_,$f,O,F1,Ln,Ot,es,g,Ee=z(()=>{"use strict";Pf=Ye(Fl(),1),qf=Ye(Ya(),1);Ja();za();j_=Df(rr);Pf.default.config({path:j_});$f=Lf(rr),O={};q_($f)&&(O=(0,qf.parse)(P_($f,"utf-8"))??{});F1=process.env.HOME??"/tmp",Ln=O.instance?.id??"hive",Ot=O.instance?.portBase??3100,es=O.instance?.ports??{},g={instance:{id:Ln,portBase:Ot},business:{name:O.business?.name??_("BUSINESS_NAME",""),description:O.business?.description??"",location:O.business?.location??"",ownerName:O.business?.owner?.name??"",ownerRole:O.business?.owner?.role??""},slack:{appToken:Rf("SLACK_APP_TOKEN"),botToken:Rf("SLACK_BOT_TOKEN"),mcpToken:_("SLACK_MCP_TOKEN",""),auditChannel:_("SLACK_AUDIT_CHANNEL",O.slack?.auditChannel??"")},slackJasper:{appToken:_("SLACK_JASPER_APP_TOKEN",""),botToken:_("SLACK_JASPER_BOT_TOKEN",""),mcpToken:_("SLACK_JASPER_MCP_TOKEN","")},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(([s])=>s.startsWith("TASK_LEDGER_KEY_")).map(([s,e])=>[s.replace("TASK_LEDGER_KEY_","").toLowerCase().replace(/_/g,"-"),e])),apiKey:_("TASK_LEDGER_API_KEY","")},mongo:{uri:_("MONGODB_URI","mongodb://localhost:27017"),dbName:_("MONGODB_DB",`hive_${Ln}`)},defaultAgent:_("DEFAULT_AGENT","chief-of-staff"),google:{account:_("GOOGLE_ACCOUNT",O.google?.account??""),client:_("GOG_CLIENT",O.google?.client??""),accounts:O.google?.accounts??{},sharedFolder:_("DRIVE_SHARED_FOLDER",O.google?.sharedFolder??O.googleWorkspace?.sharedFolder??"")},googleWorkspace:{account:_("GWS_ACCOUNT",O.googleWorkspace?.account??""),gwsPath:_("GWS_PATH",""),sharedFolder:_("GWS_SHARED_FOLDER",O.googleWorkspace?.sharedFolder??"")},quo:{apiKey:_("QUO_API_KEY",""),phoneNumberId:_("QUO_PHONE_NUMBER_ID",""),lines:O.quo?.lines??{}},sms:{lines:O.sms?.lines??[]},imessage:{enabled:O.imessage?.enabled??!1,slackChannel:O.imessage?.slackChannel??"imessage",hotWindowMs:O.imessage?.hotWindowMs??3e5,coldIntervalMs:O.imessage?.coldIntervalMs??3e5,hotIntervalMs:O.imessage?.hotIntervalMs??1e4},resend:{apiKey:_("RESEND_API_KEY",""),fromAddress:_("RESEND_FROM_ADDRESS",""),defaultCc:_("RESEND_DEFAULT_CC",""),hubspotBcc:_("HUBSPOT_BCC_OUTGOING",""),emailDomain:_("RESEND_EMAIL_DOMAIN",O.resend?.emailDomain??""),businessName:_("RESEND_BUSINESS_NAME",O.resend?.businessName??"")},plugins:O.plugins??[],hubspot:{apiKey:_("HUBSPOT_API_KEY","")},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(es.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(es.background??Ot)),10),authToken:_("BG_TASK_AUTH_TOKEN","")||Mf()},codeTask:{port:parseInt(_("CODE_TASK_PORT",String(es.codeTask??Ot+2)),10),authToken:_("CODE_TASK_AUTH_TOKEN","")||Mf(),pluginDir:_("CODE_TASK_PLUGIN_DIR",B_("plugins/claude-code/dodi-dev")),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)},ws:{enabled:_("WS_ENABLED","false")==="true",port:parseInt(_("WS_PORT",String(es.ws??Ot+3)),10),jwtSecret:_("WS_JWT_SECRET","")},team:{enabled:_("TEAM_ENABLED","false")==="true"},workflow:{enabled:_("WORKFLOW_ENABLED","false")==="true"},adminApi:{port:parseInt(_("ADMIN_API_PORT",String(es.adminApi??Ot+4)),10),token:_("ADMIN_API_TOKEN","")},voice:{enabled:!!O.voice?.provider,provider:O.voice?.provider??"",publicUrl:O.voice?.publicUrl??"",phoneNumberId:O.voice?.phoneNumberId??"",assistants:O.voice?.assistants??{},apiKey:_("VAPI_API_KEY",""),serverSecret:_("VAPI_SERVER_SECRET",""),port:parseInt(_("VOICE_PORT",String(es.voice??Ot+5)),10)},autonomy:{externalComms:O.autonomy?.externalComms??Zt.externalComms,codeTask:O.autonomy?.codeTask??Zt.codeTask,codeAccess:O.autonomy?.codeAccess??Zt.codeAccess},triage:{model:_("TRIAGE_MODEL","claude-haiku-4-5-20251001"),timeoutMs:parseInt(_("TRIAGE_TIMEOUT_MS","10000"),10),enabled:_("TRIAGE_ENABLED","true")==="true"},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(O.memory?.hotBudgetTokens??3e3)),10),sweepIntervalHours:parseFloat(_("MEMORY_SWEEP_INTERVAL_HOURS",String(O.memory?.sweepIntervalHours??6))),hotThreshold:parseFloat(_("MEMORY_HOT_THRESHOLD",String(O.memory?.hotThreshold??.6))),warmThreshold:parseFloat(_("MEMORY_WARM_THRESHOLD",String(O.memory?.warmThreshold??.3))),recencyHalfLifeDays:parseFloat(_("MEMORY_RECENCY_HALF_LIFE_DAYS",String(O.memory?.recencyHalfLifeDays??7))),coldSummaryMinRecords:parseInt(_("MEMORY_COLD_SUMMARY_MIN",String(O.memory?.coldSummaryMinRecords??5)),10),coldRetentionDays:parseInt(_("MEMORY_COLD_RETENTION_DAYS",String(O.memory?.coldRetentionDays??90)),10),purgeRetentionDays:parseInt(_("MEMORY_PURGE_RETENTION_DAYS",String(O.memory?.purgeRetentionDays??7)),10),reflectionMinTurns:parseInt(_("MEMORY_REFLECTION_MIN_TURNS",String(O.memory?.reflectionMinTurns??3)),10)},codeIndex:{enabled:O.codeIndex?.enabled===!0||process.env.CODE_INDEX_ENABLED==="true",scoreThreshold:parseFloat(_("CODE_INDEX_SCORE_THRESHOLD",String(O.codeIndex?.scoreThreshold??.65))),prefetchLimit:parseInt(_("CODE_INDEX_PREFETCH_LIMIT",String(O.codeIndex?.prefetchLimit??8)),10),sessionKnowledge:{enabled:(O.codeIndex?.sessionKnowledge?.enabled??!0)&&process.env.CODE_INDEX_SESSION_KNOWLEDGE!=="false"},repos:O.codeIndex?.repos??{}},events:{retentionDays:parseInt(_("EVENT_RETENTION_DAYS",String(O.events?.retentionDays??30)),10)},activity:{enabled:(O.activity?.enabled??!0)&&process.env.ACTIVITY_LOG_ENABLED!=="false",bufferSize:parseInt(_("ACTIVITY_BUFFER_SIZE",String(O.activity?.bufferSize??200)),10),flushIntervalMs:parseInt(_("ACTIVITY_FLUSH_INTERVAL_MS",String(O.activity?.flushIntervalMs??3e4)),10),retentionDays:parseInt(_("ACTIVITY_RETENTION_DAYS",String(O.activity?.retentionDays??90)),10)},autoDream:{enabled:O.autoDream?.enabled??!0,idleThresholdMinutes:parseInt(_("AUTODREAM_IDLE_THRESHOLD_MINUTES",String(O.autoDream?.idleThresholdMinutes??30)),10),cooldownMinutes:parseInt(_("AUTODREAM_COOLDOWN_MINUTES",String(O.autoDream?.cooldownMinutes??60)),10),similarityThreshold:parseFloat(_("AUTODREAM_SIMILARITY_THRESHOLD",String(O.autoDream?.similarityThreshold??.85))),patternMinCount:parseInt(_("AUTODREAM_PATTERN_MIN_COUNT",String(O.autoDream?.patternMinCount??3)),10),maxClustersPerRun:parseInt(_("AUTODREAM_MAX_CLUSTERS",String(O.autoDream?.maxClustersPerRun??20)),10),maxContradictionPairsPerRun:parseInt(_("AUTODREAM_MAX_CONTRADICTIONS",String(O.autoDream?.maxContradictionPairsPerRun??30)),10),maxPromotionsPerRun:parseInt(_("AUTODREAM_MAX_PROMOTIONS",String(O.autoDream?.maxPromotionsPerRun??10)),10)},browser:{cdpEndpoint:_("BROWSER_CDP_ENDPOINT","")},tasksDir:{code:_("CODE_TASKS_DIR",`/tmp/${Ln}-code-tasks`),background:_("BG_TASKS_DIR",`/tmp/${Ln}-bg-tasks`)}}});function Dn(s,e,t,r){if(Bf[s]<Bf[U_])return;let n={ts:new Date().toISOString(),level:s,component:e,msg:t,...r};(s==="error"?process.stderr:process.stdout).write(JSON.stringify(n)+`
|
|
142
|
-
`)
|
|
143
|
-
|
|
144
|
-
|
|
142
|
+
`,t)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let t=rr(e),s=Kt(t);return s.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:s,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let t=rr(e),s=Kt(t);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:s,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,t){return this.type!=="comment"||this.indent<=t?!1:e.every(s=>s.type==="newline"||s.type==="space")}*documentEnd(e){this.type!=="doc-mode"&&(e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop()))}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;default:e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop())}}};tu.Parser=Qo});var ou=T($s=>{"use strict";var su=Bo(),tS=Cs(),Ps=Os(),sS=Pi(),nS=$(),rS=zo(),nu=Xo();function ru(n){let e=n.prettyErrors!==!1;return{lineCounter:n.lineCounter||e&&new rS.LineCounter||null,prettyErrors:e}}function iS(n,e={}){let{lineCounter:t,prettyErrors:s}=ru(e),r=new nu.Parser(t?.addNewLine),i=new su.Composer(e),o=Array.from(i.compose(r.parse(n)));if(s&&t)for(let a of o)a.errors.forEach(Ps.prettifyError(n,t)),a.warnings.forEach(Ps.prettifyError(n,t));return o.length>0?o:Object.assign([],{empty:!0},i.streamInfo())}function iu(n,e={}){let{lineCounter:t,prettyErrors:s}=ru(e),r=new nu.Parser(t?.addNewLine),i=new su.Composer(e),o=null;for(let a of i.compose(r.parse(n),!0,n.length))if(!o)o=a;else if(o.options.logLevel!=="silent"){o.errors.push(new Ps.YAMLParseError(a.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return s&&t&&(o.errors.forEach(Ps.prettifyError(n,t)),o.warnings.forEach(Ps.prettifyError(n,t))),o}function oS(n,e,t){let s;typeof e=="function"?s=e:t===void 0&&e&&typeof e=="object"&&(t=e);let r=iu(n,t);if(!r)return null;if(r.warnings.forEach(i=>sS.warn(r.options.logLevel,i)),r.errors.length>0){if(r.options.logLevel!=="silent")throw r.errors[0];r.errors=[]}return r.toJS(Object.assign({reviver:s},t))}function aS(n,e,t){let s=null;if(typeof e=="function"||Array.isArray(e)?s=e:t===void 0&&e&&(t=e),typeof t=="string"&&(t=t.length),typeof t=="number"){let r=Math.round(t);t=r<1?void 0:r>8?{indent:8}:{indent:r}}if(n===void 0){let{keepUndefined:r}=t??e??{};if(!r)return}return nS.isDocument(n)&&!s?n.toString(t):new tS.Document(n,s,t).toString(t)}$s.parse=oS;$s.parseAllDocuments=iS;$s.parseDocument=iu;$s.stringify=aS});var ea=T(U=>{"use strict";var cS=Bo(),lS=Cs(),dS=wo(),Zo=Os(),uS=ds(),ot=$(),hS=tt(),fS=Q(),pS=nt(),mS=rt(),gS=sr(),yS=Yo(),wS=zo(),SS=Xo(),ir=ou(),au=os();U.Composer=cS.Composer;U.Document=lS.Document;U.Schema=dS.Schema;U.YAMLError=Zo.YAMLError;U.YAMLParseError=Zo.YAMLParseError;U.YAMLWarning=Zo.YAMLWarning;U.Alias=uS.Alias;U.isAlias=ot.isAlias;U.isCollection=ot.isCollection;U.isDocument=ot.isDocument;U.isMap=ot.isMap;U.isNode=ot.isNode;U.isPair=ot.isPair;U.isScalar=ot.isScalar;U.isSeq=ot.isSeq;U.Pair=hS.Pair;U.Scalar=fS.Scalar;U.YAMLMap=pS.YAMLMap;U.YAMLSeq=mS.YAMLSeq;U.CST=gS;U.Lexer=yS.Lexer;U.LineCounter=wS.LineCounter;U.Parser=SS.Parser;U.parse=ir.parse;U.parseAllDocuments=ir.parseAllDocuments;U.parseDocument=ir.parseDocument;U.stringify=ir.stringify;U.visit=au.visit;U.visitAsync=au.visitAsync});function cu(n={},e){let t={};for(let s of Object.keys(Gt)){let r=n[s]??Gt[s];t[s]=r&&(e?.[s]??!0)}return t}var Gt,ta=q(()=>{"use strict";Gt={externalComms:!0,codeTask:!1,codeAccess:!1}});import{readFileSync as bS,existsSync as fu,readdirSync as _S,statSync as kS}from"node:fs";import{resolve as sa}from"node:path";import{randomUUID as lu}from"node:crypto";import{execFileSync as vS}from"node:child_process";function du(n){let e=process.env[n]||mu(n);if(!e)throw new Error(`Missing required env var: ${n}`);return e}function k(n,e){return process.env[n]||mu(n)||e}function IS(n){if(n?.length)return n.map(t=>sa(t.replace(/^~/,process.env.HOME??"/tmp")));let e=sa(le,"plugins/claude-code");return fu(e)?_S(e).map(t=>sa(e,t)).filter(t=>kS(t).isDirectory()):[]}function mu(n){if(process.platform!=="darwin")return"";try{return vS("security",["find-generic-password","-s",`hive/${Rs}/${n}`,"-w"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()}catch{return""}}var hu,pu,TS,uu,E,fT,Rs,wt,Ht,m,Oe=q(()=>{"use strict";hu=ve(bc(),1),pu=ve(ea(),1);ta();rs();TS=nc(le);hu.default.config({path:TS});uu=sc(le),E={};fu(uu)&&(E=(0,pu.parse)(bS(uu,"utf-8"))??{});fT=process.env.HOME??"/tmp",Rs=E.instance?.id??"hive";wt=E.instance?.portBase??3100,Ht=E.instance?.ports??{},m={instance:{id:Rs,portBase:wt},business:{name:E.business?.name??k("BUSINESS_NAME",""),description:E.business?.description??"",location:E.business?.location??"",ownerName:E.business?.owner?.name??"",ownerRole:E.business?.owner?.role??""},slack:{appToken:du("SLACK_APP_TOKEN"),botToken:du("SLACK_BOT_TOKEN"),mcpToken:k("SLACK_MCP_TOKEN",""),auditChannel:k("SLACK_AUDIT_CHANNEL",E.slack?.auditChannel??"")},slackJasper:{appToken:k("SLACK_JASPER_APP_TOKEN",""),botToken:k("SLACK_JASPER_BOT_TOKEN",""),mcpToken:k("SLACK_JASPER_MCP_TOKEN","")},anthropic:{apiKey:k("ANTHROPIC_API_KEY","")},linear:{apiKey:k("LINEAR_API_KEY",""),teamId:k("LINEAR_TEAM_ID","")},clickup:{apiToken:k("CLICKUP_API_TOKEN","")},github:{repo:k("GITHUB_REPO",""),token:k("GH_TOKEN","")},brave:{apiKey:k("BRAVE_API_KEY","")},taskLedger:{apiUrl:k("TASK_LEDGER_API_URL","http://localhost:3002"),agentKeys:Object.fromEntries(Object.entries(process.env).filter(([n])=>n.startsWith("TASK_LEDGER_KEY_")).map(([n,e])=>[n.replace("TASK_LEDGER_KEY_","").toLowerCase().replace(/_/g,"-"),e])),apiKey:k("TASK_LEDGER_API_KEY","")},mongo:{uri:k("MONGODB_URI","mongodb://localhost:27017"),dbName:k("MONGODB_DB",`hive_${Rs}`)},defaultAgent:k("DEFAULT_AGENT","chief-of-staff"),google:{account:k("GOOGLE_ACCOUNT",E.google?.account??""),client:k("GOG_CLIENT",E.google?.client??""),accounts:E.google?.accounts??{},sharedFolder:k("DRIVE_SHARED_FOLDER",E.google?.sharedFolder??E.googleWorkspace?.sharedFolder??"")},googleWorkspace:{account:k("GWS_ACCOUNT",E.googleWorkspace?.account??""),gwsPath:k("GWS_PATH",""),sharedFolder:k("GWS_SHARED_FOLDER",E.googleWorkspace?.sharedFolder??"")},quo:{apiKey:k("QUO_API_KEY",""),phoneNumberId:k("QUO_PHONE_NUMBER_ID",""),lines:E.quo?.lines??{}},sms:{lines:E.sms?.lines??[]},imessage:{enabled:E.imessage?.enabled??!1,slackChannel:E.imessage?.slackChannel??"imessage",hotWindowMs:E.imessage?.hotWindowMs??3e5,coldIntervalMs:E.imessage?.coldIntervalMs??3e5,hotIntervalMs:E.imessage?.hotIntervalMs??1e4},resend:{apiKey:k("RESEND_API_KEY",""),fromAddress:k("RESEND_FROM_ADDRESS",""),defaultCc:k("RESEND_DEFAULT_CC",""),defaultBcc:k("RESEND_DEFAULT_BCC",""),emailDomain:k("RESEND_EMAIL_DOMAIN",E.resend?.emailDomain??""),businessName:k("RESEND_BUSINESS_NAME",E.resend?.businessName??"")},plugins:E.plugins??[],skillRegistries:E.skillRegistries??[{name:"keepur-default",url:"https://github.com/keepur/hive-skills",default:!0}],gemini:{apiKey:k("GEMINI_API_KEY",""),visionModel:k("GEMINI_VISION_MODEL","gemini-2.5-flash")},permits:{mongoUri:k("PERMITS_MONGO_URI","mongodb://localhost:27017/permits")},recall:{apiKey:k("RECALL_API_KEY",""),region:k("RECALL_API_REGION","us-west-2"),monitorPort:parseInt(k("MEETING_MONITOR_PORT",String(Ht.recall??wt+1)),10),monitorPublicUrl:k("MEETING_MONITOR_PUBLIC_URL",""),webhookSecret:k("RECALL_WEBHOOK_SECRET","")},scheduler:{heartbeatIntervalMs:parseInt(k("HEARTBEAT_INTERVAL_MS","120000"),10)},background:{port:parseInt(k("BG_TASK_PORT",String(Ht.background??wt)),10),authToken:k("BG_TASK_AUTH_TOKEN","")||lu()},codeTask:{port:parseInt(k("CODE_TASK_PORT",String(Ht.codeTask??wt+2)),10),authToken:k("CODE_TASK_AUTH_TOKEN","")||lu(),pluginDirs:IS(E.codeTask?.pluginDirs),defaultModel:k("CODE_TASK_MODEL","claude-sonnet-4-6"),defaultMaxTurns:parseInt(k("CODE_TASK_MAX_TURNS","100"),10),defaultMaxBudget:parseFloat(k("CODE_TASK_MAX_BUDGET","5.00")),maxConcurrent:parseInt(k("CODE_TASK_MAX_CONCURRENT","2"),10),maxLifetimeMs:parseInt(k("CODE_TASK_MAX_LIFETIME_MS",String(480*60*1e3)),10),staleGraceMs:parseInt(k("CODE_TASK_STALE_GRACE_MS",String(1800*1e3)),10)},ws:{enabled:k("WS_ENABLED","false")==="true",port:parseInt(k("WS_PORT",String(Ht.ws??wt+3)),10)},beekeeper:{port:parseInt(k("BEEKEEPER_PORT",String(E.beekeeper?.port??8420)),10)},workflow:{enabled:k("WORKFLOW_ENABLED","false")==="true"},adminApi:{port:parseInt(k("ADMIN_API_PORT",String(Ht.adminApi??wt+4)),10),token:k("ADMIN_API_TOKEN","")},voice:{enabled:!!E.voice?.provider,provider:E.voice?.provider??"",publicUrl:E.voice?.publicUrl??"",phoneNumberId:E.voice?.phoneNumberId??"",assistants:E.voice?.assistants??{},apiKey:k("VAPI_API_KEY",""),serverSecret:k("VAPI_SERVER_SECRET",""),port:parseInt(k("VOICE_PORT",String(Ht.voice??wt+5)),10)},autonomy:{externalComms:E.autonomy?.externalComms??Gt.externalComms,codeTask:E.autonomy?.codeTask??Gt.codeTask,codeAccess:E.autonomy?.codeAccess??Gt.codeAccess},modelRouter:{enabled:k("MODEL_ROUTER_ENABLED","true")==="true",model:k("MODEL_ROUTER_MODEL","claude-haiku-4-5-20251001"),timeoutMs:parseInt(k("MODEL_ROUTER_TIMEOUT_MS","8000"),10)},sweeper:{intervalMs:parseInt(k("SWEEPER_INTERVAL_MS","300000"),10),threadTtlMs:parseInt(k("SWEEPER_THREAD_TTL_MS","86400000"),10),taskFileTtlMs:parseInt(k("SWEEPER_TASK_FILE_TTL_MS","604800000"),10),meetingSessionTtlMs:parseInt(k("SWEEPER_MEETING_TTL_MS","3600000"),10),cacheTtlMs:parseInt(k("SWEEPER_CACHE_TTL_MS","3600000"),10),retryMaxAttempts:parseInt(k("SWEEPER_RETRY_MAX_ATTEMPTS","3"),10),retryBaseDelayMs:parseInt(k("SWEEPER_RETRY_BASE_DELAY_MS","30000"),10)},memory:{hotBudgetTokens:parseInt(k("MEMORY_HOT_BUDGET_TOKENS",String(E.memory?.hotBudgetTokens??3e3)),10),sweepIntervalHours:parseFloat(k("MEMORY_SWEEP_INTERVAL_HOURS",String(E.memory?.sweepIntervalHours??6))),hotThreshold:parseFloat(k("MEMORY_HOT_THRESHOLD",String(E.memory?.hotThreshold??.6))),warmThreshold:parseFloat(k("MEMORY_WARM_THRESHOLD",String(E.memory?.warmThreshold??.3))),recencyHalfLifeDays:parseFloat(k("MEMORY_RECENCY_HALF_LIFE_DAYS",String(E.memory?.recencyHalfLifeDays??7))),coldSummaryMinRecords:parseInt(k("MEMORY_COLD_SUMMARY_MIN",String(E.memory?.coldSummaryMinRecords??5)),10),coldRetentionDays:parseInt(k("MEMORY_COLD_RETENTION_DAYS",String(E.memory?.coldRetentionDays??90)),10),purgeRetentionDays:parseInt(k("MEMORY_PURGE_RETENTION_DAYS",String(E.memory?.purgeRetentionDays??7)),10),reflectionMinTurns:parseInt(k("MEMORY_REFLECTION_MIN_TURNS",String(E.memory?.reflectionMinTurns??3)),10)},codeIndex:{enabled:E.codeIndex?.enabled===!0||process.env.CODE_INDEX_ENABLED==="true",scoreThreshold:parseFloat(k("CODE_INDEX_SCORE_THRESHOLD",String(E.codeIndex?.scoreThreshold??.65))),prefetchLimit:parseInt(k("CODE_INDEX_PREFETCH_LIMIT",String(E.codeIndex?.prefetchLimit??8)),10),sessionKnowledge:{enabled:(E.codeIndex?.sessionKnowledge?.enabled??!0)&&process.env.CODE_INDEX_SESSION_KNOWLEDGE!=="false"},repos:E.codeIndex?.repos??{}},events:{retentionDays:parseInt(k("EVENT_RETENTION_DAYS",String(E.events?.retentionDays??30)),10)},activity:{enabled:(E.activity?.enabled??!0)&&process.env.ACTIVITY_LOG_ENABLED!=="false",bufferSize:parseInt(k("ACTIVITY_BUFFER_SIZE",String(E.activity?.bufferSize??200)),10),flushIntervalMs:parseInt(k("ACTIVITY_FLUSH_INTERVAL_MS",String(E.activity?.flushIntervalMs??3e4)),10),retentionDays:parseInt(k("ACTIVITY_RETENTION_DAYS",String(E.activity?.retentionDays??90)),10)},autoDream:{enabled:E.autoDream?.enabled??!0,idleThresholdMinutes:parseInt(k("AUTODREAM_IDLE_THRESHOLD_MINUTES",String(E.autoDream?.idleThresholdMinutes??30)),10),cooldownMinutes:parseInt(k("AUTODREAM_COOLDOWN_MINUTES",String(E.autoDream?.cooldownMinutes??60)),10),similarityThreshold:parseFloat(k("AUTODREAM_SIMILARITY_THRESHOLD",String(E.autoDream?.similarityThreshold??.85))),patternMinCount:parseInt(k("AUTODREAM_PATTERN_MIN_COUNT",String(E.autoDream?.patternMinCount??3)),10),maxClustersPerRun:parseInt(k("AUTODREAM_MAX_CLUSTERS",String(E.autoDream?.maxClustersPerRun??20)),10),maxContradictionPairsPerRun:parseInt(k("AUTODREAM_MAX_CONTRADICTIONS",String(E.autoDream?.maxContradictionPairsPerRun??30)),10),maxPromotionsPerRun:parseInt(k("AUTODREAM_MAX_PROMOTIONS",String(E.autoDream?.maxPromotionsPerRun??10)),10)},browser:{cdpEndpoint:k("BROWSER_CDP_ENDPOINT","")},tasksDir:{code:k("CODE_TASKS_DIR",`/tmp/${Rs}-code-tasks`),background:k("BG_TASKS_DIR",`/tmp/${Rs}-bg-tasks`)}}});function wu(n){na.has(n.id)&&yu.warn("Archetype already registered \u2014 overwriting",{id:n.id}),na.set(n.id,n),yu.info("Registered archetype",{id:n.id})}function or(n){return na.get(n)}var yu,na,ar=q(()=>{"use strict";O();yu=I("archetypes"),na=new Map});import{readFileSync as DS,writeFileSync as LS}from"node:fs";function PS(n){let e=n.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);if(!e)throw new Error("No YAML frontmatter found");let t=e[1],s=e[2],r={name:"",description:"",agents:[]},i=t.split(`
|
|
143
|
+
`),o=0;for(;o<i.length;){let a=i[o];if(a.trim()===""){o++;continue}let l=a.match(/^(\w[\w-]*):\s*(.*)/);if(!l){o++;continue}let c=l[1],d=l[2].trim();if(c==="name")r.name=St(d);else if(c==="description")r.description=St(d);else if(c==="workflow")r.workflow=St(d);else if(c==="agents"){let u=d.match(/^\[([^\]]*)\]$/);if(u)r.agents=u[1].split(",").map(h=>St(h.trim())).filter(h=>h.length>0);else if(d==="")for(r.agents=[];o+1<i.length&&i[o+1].match(/^\s+-\s+/);){o++;let h=i[o].replace(/^\s+-\s+/,"").trim();r.agents.push(St(h))}else r.agents=[St(d)]}else if(c==="origin")for(r.origin=Pu(i,o);o+1<i.length&&i[o+1].match(/^\s+\S/);)o++;else if(c==="author")for(r.author=Pu(i,o);o+1<i.length&&i[o+1].match(/^\s+\S/);)o++;o++}return{frontmatter:r,body:s}}function Pu(n,e){let t={},s=e+1;for(;s<n.length&&n[s].match(/^\s+\S/);){let r=n[s].match(/^\s+([\w][\w-]*):\s*(.*)/);if(r){let i=r[2].trim();i==="true"?t[r[1]]=!0:i==="false"?t[r[1]]=!1:t[r[1]]=St(i)}s++}return t}function St(n){return n.startsWith('"')&&n.endsWith('"')||n.startsWith("'")&&n.endsWith("'")?n.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"):n}function $S(n,e){let t=[];t.push(`name: ${lr(n.name)}`),t.push(`description: ${lr(n.description)}`);let s=n.agents.join(", ");return t.push(`agents: [${s}]`),n.workflow&&t.push(`workflow: ${lr(n.workflow)}`),n.origin&&(t.push("origin:"),$u(t,n.origin)),n.author&&(t.push("author:"),$u(t,n.author)),`---
|
|
144
|
+
${t.join(`
|
|
145
|
+
`)}
|
|
146
|
+
---
|
|
147
|
+
${e}`}function $u(n,e){for(let[t,s]of Object.entries(e))s!==void 0&&n.push(` ${t}: ${lr(String(s))}`)}function lr(n){return n.includes(":")||n.includes("#")||n.includes('"')?`"${n.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`:n}function Ru(n){let e=DS(n,"utf-8");return PS(e)}function Bu(n,e,t){LS(n,$S(e,t),"utf-8")}function Uu(n){let e=n.match(/^(---\n)([\s\S]*?)(\n---\n?)([\s\S]*)$/);if(!e)return n;let t=e[1],s=e[2],r=e[3],i=e[4],o=s.split(`
|
|
148
|
+
`),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(`
|
|
149
|
+
`)+r+i}var ia=q(()=>{"use strict"});import{createHash as RS}from"node:crypto";import{readdirSync as BS,readFileSync as US,statSync as qS}from"node:fs";import{join as qu}from"node:path";function ju(n){let e=Fu(n).sort(),t=RS("sha256");for(let s=0;s<e.length;s++){s>0&&t.update("\0");let r=qu(n,e[s]),i=US(r,"utf-8");e[s]==="SKILL.md"?t.update(Uu(i)):t.update(i)}return t.digest("hex")}function Fu(n,e=""){let t=BS(n),s=[];for(let r of t){let i=qu(n,r),o=e?`${e}/${r}`:r;qS(i).isDirectory()?s.push(...Fu(i,o)):s.push(o)}return s}var Ku=q(()=>{"use strict";ia()});import{readdirSync as aa,readFileSync as jS,statSync as ca,existsSync as bt}from"node:fs";import{join as Ae,relative as FS,resolve as KS}from"node:path";function la(n,e,t){let s=new Map,r=[],i=new Map;for(let o of t??[]){let a=Ae(o,"skills");if(!bt(a))continue;let l=o.split("/").pop()??"seed";oa(a,`seed:${l}`,i,s,r,!1)}for(let o of e??[]){let a=Ae(o.dir,"skills");bt(a)&&oa(a,o.name,i,s,r,!1)}if(bt(n)?oa(n,"customer",i,s,r,!0):Se.debug("No customer skills directory found",{path:n}),r.length>0){for(let o of[...s.keys()])s.get(o).push(...r);s.set("__universal__",r)}return GS=HS(i,n),Se.info("Skill index loaded",{workflows:i.size,agents:s.size-(s.has("__universal__")?1:0)}),s}function Gu(n,e,t){for(let[s,r]of e){let i=r.filter(o=>o.path!==n);i.length!==r.length&&(i.length===0?e.delete(s):e.set(s,i))}for(let s=t.length-1;s>=0;s--)t[s].path===n&&t.splice(s,1)}function oa(n,e,t,s,r,i){let o;try{o=aa(n).filter(a=>{try{return ca(Ae(n,a)).isDirectory()}catch{return!1}})}catch(a){Se.warn("Failed to read skills directory",{source:e,path:n,error:String(a)});return}for(let a of o){let l=Ae(n,a),c=Ae(l,"skills");if(!bt(c)){Se.debug("Workflow missing skills/ subdirectory, skipping",{source:e,workflow:a});continue}let d=t.get(a);if(d)if(i&&d.source!=="customer")Se.warn("Customer skill shadows plugin-bundled skill",{workflow:a,shadowed:d,customer:{source:e,path:l}}),Gu(d.path,s,r),t.set(a,{source:e,path:l});else if(i&&d.source==="customer"){Se.error("Customer skill collision \u2014 both skipped",{workflow:a,first:d,second:{source:e,path:l}}),Gu(d.path,s,r),t.delete(a);continue}else{Se.warn("Skill workflow collision \u2014 keeping first, skipping second",{workflow:a,kept:d,skipped:{source:e,path:l}});continue}else t.set(a,{source:e,path:l});let u={type:"local",path:l},h=new Set,p=!1,g;try{g=aa(c).filter(f=>{try{return ca(Ae(c,f)).isDirectory()}catch{return!1}})}catch(f){Se.warn("Failed to read workflow skills subdir",{source:e,workflow:a,error:String(f)});continue}for(let f of g){let y=Ae(c,f,"SKILL.md");if(!bt(y))continue;let w=WS(jS(y,"utf-8"));for(let S of w)S==="all"?p=!0:h.add(S)}if(p)r.push(u),Se.debug("Workflow registered as universal",{source:e,workflow:a,skills:g.length});else if(h.size>0){for(let f of h){let y=s.get(f)??[];y.push(u),s.set(f,y)}Se.debug("Workflow registered",{source:e,workflow:a,agents:[...h],skills:g.length})}}}function Hu(n,e){let t=n.get(e)??[],s=n.get("__universal__")??[];if(t.length>0&&s.length>0){let r=new Set(t.map(o=>o.path)),i=s.filter(o=>!r.has(o.path));return[...t,...i]}return t.length===0&&s.length>0?[...s]:t}function HS(n,e){let t=new Set,s=KS(e,"..");for(let[r,i]of n){if(i.source!=="customer")continue;let o=Ae(i.path,"skills");if(!bt(o))continue;let a;try{a=aa(o).filter(l=>{try{return ca(Ae(o,l)).isDirectory()}catch{return!1}})}catch{continue}for(let l of a){let c=Ae(o,l),d=Ae(c,"SKILL.md");if(bt(d))try{let{frontmatter:u,body:h}=Ru(d);if(!u.origin?.["base-content-hash"])continue;let p=ju(c);if(p!==u.origin["base-content-hash"]&&(t.add(c),Se.warn("Registry-installed skill has been modified",{workflow:r,skill:l,source:u.origin.source,baseHash:u.origin["base-content-hash"],currentHash:p}),!u.origin.modified)){u.origin.modified=!0;try{Bu(d,u,h),ac(s,[FS(s,d)],`detect-modified: ${l} content hash changed`)}catch(g){Se.error("Failed to persist modified flag to disk",{path:d,error:String(g)})}}}catch{}}}return t}function WS(n){let e=n.match(/^---\n([\s\S]*?)\n---/);if(!e)return[];let t=e[1],s=t.match(/^agents:\s*\n((?:\s+-\s+.+\n?)*)/m);if(s)return s[1].split(`
|
|
150
|
+
`).map(i=>i.replace(/^\s+-\s+/,"").trim()).filter(Boolean);let r=t.match(/^agents:\s*\[([^\]]*)\]/m);return r?r[1].split(",").map(i=>i.trim()).filter(Boolean):[]}var Se,GS,da=q(()=>{"use strict";O();Ku();ia();pi();Se=I("skill-loader"),GS=new Set});function ua(n,e){let t=`- ${n}: ${e.description}`,s=[];return e.usage&&s.push(`Use for: ${e.usage}.`),e.notFor&&s.push(`Not for: ${e.notFor}.`),s.length>0&&(t+=`
|
|
151
|
+
\u2192 ${s.join(" ")}`),t}var Bs,ha=q(()=>{"use strict";Bs={clickup:{description:"Task management \u2014 tasks, lists, spaces, comments, custom fields",usage:"Creating and managing project tasks"},google:{description:"Email (Gmail), calendar, Google Drive files",usage:"Sending email, checking calendar events, reading Drive documents"},resend:{description:"Send outbound email with file attachments",usage:"Sending transactional or outreach email from your agent address",notFor:"Reading email \u2014 use google for inbox access"},"brave-search":{description:"Web search, news, local business lookup",usage:"Finding current information from the public web",notFor:"Internal data \u2014 use crm-search, code-search, or memory instead"},contacts:{description:"Contact lookups by name, email, or phone",usage:"Quick lookups of people in the contact directory",notFor:"CRM deal/company data \u2014 use a CRM plugin's tools instead"},linear:{description:"Issue tracking and project management",usage:"Creating, searching, and updating engineering issues"},"github-issues":{description:"GitHub issue tracking \u2014 create, search, update, comment on issues",usage:"Managing GitHub issues for engineering work"},quo:{description:"Send and receive SMS messages via OpenPhone",usage:"Texting customers or team members"},voice:{description:"Make outbound phone calls via Vapi",usage:"Calling customers, scheduling appointments, following up by phone"},tasks:{description:"Task management \u2014 create, update, and track agent tasks",usage:"Managing your own task queue"},"code-search":{description:"Semantic search over codebase file index \u2014 find where functionality lives, file roles, exports",usage:"Finding code by what it does, not just by filename",notFor:"Broad web search \u2014 use brave-search instead"},"code-task":{description:"Spawn Claude Code CLI sessions for coding tasks",usage:"Delegating implementation, debugging, or code analysis work"},memory:{description:"Read and write your personal agent memory",usage:"Storing and retrieving facts across conversations. Auto-managed \u2014 don't over-save"},schedule:{description:"Self-service schedule management \u2014 view, add, update, remove your schedules",usage:"Managing your recurring or one-time scheduled tasks"},"event-bus":{description:"Publish events to the cross-agent event bus",usage:"Notifying other agents about state changes or completed work"},workflow:{description:"Plan and task management \u2014 create plans, assign tasks, track dependencies",usage:"Coordinating multi-step work across agents and humans"},callback:{description:"Schedule future self-invocations",usage:"Reminding yourself to follow up on something later"},background:{description:"Spawn detached background processes",usage:"Running long-lived commands that outlive your current turn"},"conversation-search":{description:"Semantic search over past conversations",usage:"Finding what was discussed previously across threads"},browser:{description:"Browser automation via Playwright \u2014 navigate, click, fill forms, screenshot",usage:"Accessing web UIs that don't have APIs"},slack:{description:"Slack API \u2014 read channels, post messages, manage threads",usage:"Interacting with Slack channels and threads"},recall:{description:"Meeting bot \u2014 join calls, get transcripts",usage:"Participating in or getting transcripts from video meetings"},admin:{description:"Agent management \u2014 list, view, update agent definitions",usage:"Viewing or modifying agent configurations"},keychain:{description:"Read secrets from macOS Keychain",usage:"Retrieving API keys or credentials stored in the system keychain"}}});function Wu(n=[]){let e=[],t=[];for(let s of Object.keys(Bs)){if(YS.has(s)){e.push(s);continue}let r=VS[s];!r||r()?e.push(s):t.push(s)}for(let s of n)for(let[r,i]of Object.entries(s.manifest.mcpServers)){let o=i.env??[];o.length===0||o.every(l=>!!process.env[l])?e.push(r):t.push(r)}return{instanceId:m.instance?.id??"unknown",servers:{configured:e,unconfigured:t}}}var VS,YS,Vu=q(()=>{"use strict";Oe();ha();VS={google:()=>Object.keys(m.google?.accounts??{}).length>0||!!m.google?.account,resend:()=>!!m.resend?.apiKey,"brave-search":()=>!!m.brave?.apiKey,linear:()=>!!m.linear?.apiKey,clickup:()=>!!m.clickup?.apiToken,"github-issues":()=>!!m.github?.repo,quo:()=>!!m.quo?.apiKey,recall:()=>!!m.recall?.apiKey,"code-task":()=>!0,"code-search":()=>!!m.codeIndex?.enabled,browser:()=>!!m.browser?.cdpEndpoint,tasks:()=>(m.taskLedger?.apiUrl??"")!=="http://localhost:3002"},YS=new Set(["memory","slack","contacts","callback","background","schedule","event-bus","conversation-search","keychain","admin"])});var Yu={};Pe(Yu,{AgentRunner:()=>Us});import{query as JS}from"@anthropic-ai/claude-agent-sdk";import{resolve as Ue}from"node:path";import{existsSync as dr,statSync as zS}from"node:fs";import{createRequire as QS}from"node:module";import{readFile as XS}from"node:fs/promises";function ZS(n){return JSON.stringify(Wu(n))}function Y(n){let e=e0[n];if(e){let t=Ue(ur,"mcp",e);if(dr(t))return t}return Ue(ur,n)}var R,ur,e0,Us,fa=q(()=>{"use strict";ar();O();Oe();rs();da();ha();Vu();R=I("agent-runner");ur=dr(Ue(import.meta.dirname,"mcp"))?import.meta.dirname:Ue(import.meta.dirname,".."),e0={"memory/memory-mcp-server.js":"memory.min.js","memory/structured-memory-mcp-server.js":"structured-memory.min.js","keychain/keychain-mcp-server.js":"keychain.min.js","google/google-mcp-server.js":"google.min.js","quo/quo-mcp-server.js":"quo.min.js","voice/voice-mcp-server.js":"voice.min.js","contacts/contacts-mcp-server.js":"contacts.min.js","tasks/task-mcp-server.js":"task.min.js","resend/resend-mcp-server.js":"resend.min.js","linear/linear-mcp-server.js":"linear.min.js","github/github-issues-mcp-server.js":"github-issues.min.js","clickup/clickup-mcp-server.js":"clickup.min.js","recall/recall-mcp-server.js":"recall.min.js","background/background-task-mcp-server.js":"background-task.min.js","callback/callback-mcp-server.js":"callback.min.js","code-task/code-task-mcp-server.js":"code-task.min.js","search/conversation-search-mcp-server.js":"search-conversation.min.js","code-index/code-search-mcp-server.js":"code-search.min.js","events/event-bus-mcp-server.js":"event-bus.min.js","team/team-mcp-server.js":"team.min.js","workflow/workflow-mcp-server.js":"workflow.min.js","schedule/schedule-mcp-server.js":"schedule.min.js","admin/admin-mcp-server.js":"admin.min.js"};Us=class n{static registryRef;agentConfig;memoryManager;plugins;skillIndex;activeQuery=null;eventSubscribersJson;prefetcher;_archetypeDef=void 0;constructor(e,t,s=[],r=new Map,i="{}",o){this.agentConfig=e,this.memoryManager=t,this.plugins=s,this.skillIndex=r,this.eventSubscribersJson=i,this.prefetcher=o}async buildSystemPrompt(e,t){let s=[];this.agentConfig.soul&&s.push(this.agentConfig.soul);let r=this.getArchetypeDef();if(r&&this.agentConfig.archetypeConfig)try{let u=r.systemPromptCard({agentConfig:this.agentConfig,archetypeConfig:this.agentConfig.archetypeConfig});u&&s.push(u)}catch(u){R.error("Archetype systemPromptCard threw \u2014 omitting card",{agent:this.agentConfig.id,archetype:this.agentConfig.archetype,error:String(u)})}s.push(this.agentConfig.systemPrompt);let i=await this.memoryManager.read("shared/constitution.md");i&&s.push(i);let o=e.filter(u=>!n.INFRASTRUCTURE_SERVERS.has(u));if(o.length>0){let u=o.map(h=>ua(h,this.getServerCatalogEntry(h)));s.push(`## Your tools
|
|
145
152
|
|
|
146
153
|
Direct tools available to you:
|
|
147
|
-
${
|
|
148
|
-
`)}`)}let
|
|
154
|
+
${u.join(`
|
|
155
|
+
`)}`)}let a=t??[];if(a.length>0){let u=a.map(h=>ua(h,this.getServerCatalogEntry(h)));s.push(`## Available via subagents
|
|
149
156
|
|
|
150
157
|
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:
|
|
151
|
-
${
|
|
152
|
-
`)}`)}let
|
|
153
|
-
${
|
|
154
|
-
You have ${
|
|
155
|
-
`+
|
|
156
|
-
`)+"\n\nRead relevant files via the memory MCP server (`memory_read`) before starting tasks that may relate to them.")}let
|
|
158
|
+
${u.join(`
|
|
159
|
+
`)}`)}let l=await this.memoryManager.getHotTierPrompt(this.agentConfig.id,m.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
|
|
160
|
+
${h}`);let g=(await this.memoryManager.list(u)).filter(f=>f.endsWith(".md")&&f!=="memory.md");g.length>0&&s.push(`## Available Memory Files
|
|
161
|
+
You have ${g.length} reference file(s) in your memory directory:
|
|
162
|
+
`+g.map(f=>`- ${u}/${f}`).join(`
|
|
163
|
+
`)+"\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(`
|
|
157
164
|
|
|
158
165
|
---
|
|
159
166
|
|
|
160
|
-
`)}buildServerConfig(e,t){return this.buildAllServerConfigs(t)[e]}buildAllServerConfigs(e){let t={},r=g.slack.mcpToken;r&&(t.slack={type:"http",url:"https://mcp.slack.com/mcp",headers:{Authorization:`Bearer ${r}`}}),t.memory={type:"stdio",command:"node",args:[Q("memory/memory-mcp-server.js")],env:{AGENT_ID:this.agentConfig.id,MONGODB_URI:g.mongo.uri,MONGODB_DB:g.mongo.dbName}},t["structured-memory"]={type:"stdio",command:"node",args:[Q("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:[Q("keychain/keychain-mcp-server.js")]};let n=g.google.accounts[this.agentConfig.id]||g.google.account,i=g.google.client;if(t.google={type:"stdio",command:"node",args:[Q("google/google-mcp-server.js")],env:{...n?{GOG_ACCOUNT:n}:{},...i?{GOG_CLIENT:i}:{},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:[Q("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 l=Object.entries(g.voice.assistants).find(([c,d])=>d===this.agentConfig.id)?.[0]??"";t.voice={type:"stdio",command:"node",args:[Q("voice/voice-mcp-server.js")],env:{VAPI_API_KEY:g.voice.apiKey,VAPI_PHONE_NUMBER_ID:g.voice.phoneNumberId,VAPI_ASSISTANT_ID:l,AGENT_ID:this.agentConfig.id,AGENT_NAME:this.agentConfig.name}}}t.contacts={type:"stdio",command:"node",args:[Q("contacts/contacts-mcp-server.js")],env:{MONGODB_URI:g.mongo.uri,MONGODB_DB:g.mongo.dbName}};let o=g.taskLedger.agentKeys[this.agentConfig.id]??g.taskLedger.apiKey;if(o&&(t.tasks={type:"stdio",command:"node",args:[Q("tasks/task-mcp-server.js")],env:{TASK_LEDGER_API_URL:g.taskLedger.apiUrl,TASK_LEDGER_API_KEY:o}}),g.brave.apiKey&&(t["brave-search"]={type:"stdio",command:"node",args:[Y_(import.meta.url).resolve("brave-search-mcp/dist/index.js")],env:{BRAVE_API_KEY:g.brave.apiKey}}),g.resend.apiKey){let l=this.agentConfig.name.toLowerCase(),c=g.resend.emailDomain,d=g.resend.businessName?` (${g.resend.businessName})`:"",u=c?`${this.agentConfig.name}${d} <${l}@${c}>`:g.resend.fromAddress;t.resend={type:"stdio",command:"node",args:[Q("resend/resend-mcp-server.js")],env:{RESEND_API_KEY:g.resend.apiKey,RESEND_FROM_ADDRESS:u,RESEND_DEFAULT_CC:g.resend.defaultCc,HUBSPOT_BCC:g.resend.hubspotBcc}}}if(g.linear.apiKey){let l={LINEAR_API_KEY:g.linear.apiKey};g.linear.teamId&&(l.LINEAR_TEAM_ID=g.linear.teamId),t.linear={type:"stdio",command:"node",args:[Q("linear/linear-mcp-server.js")],env:l}}if(g.github.repo){let l={GITHUB_REPO:g.github.repo,PATH:process.env.PATH??""};g.github.token&&(l.GH_TOKEN=g.github.token),t["github-issues"]={type:"stdio",command:"node",args:[Q("github/github-issues-mcp-server.js")],env:l}}g.clickup.apiToken&&(t.clickup={type:"stdio",command:"node",args:[Q("clickup/clickup-mcp-server.js")],env:{CLICKUP_API_TOKEN:g.clickup.apiToken}}),g.recall.apiKey&&(t.recall={type:"stdio",command:"node",args:[Q("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:[Q("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:[Q("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:[Q("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 a={OLLAMA_URL:process.env.OLLAMA_URL??"http://localhost:11434",QDRANT_URL:process.env.QDRANT_URL??"http://localhost:6333"};process.env.KB_EMBED_MODEL&&(a.KB_EMBED_MODEL=process.env.KB_EMBED_MODEL),t["conversation-search"]={type:"stdio",command:"node",args:[Q("search/conversation-search-mcp-server.js")],env:{...a,AGENT_ID:this.agentConfig.id,DEFAULT_AGENT:g.defaultAgent}},t["code-search"]={type:"stdio",command:"node",args:[Q("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 l of this.plugins)for(let[c,d]of Object.entries(l.manifest.mcpServers)){if(t[c]){G.warn("Plugin server name conflicts with core server, skipping",{plugin:l.name,server:c});continue}let u=yt(Pn,`plugins/${l.name}/${d.entry.replace(/\.ts$/,".js")}`),f=yt(rr,"plugins","node_modules",l.name,"dist","mcp",d.entry.replace(/\.ts$/,".min.js").replace(/^.*\//,"")),h=$n(f)?f:u,m=g.taskLedger.agentKeys[this.agentConfig.id]??g.taskLedger.apiKey,p={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,...m?{TASK_LEDGER_API_KEY:m}:{},PATH:process.env.PATH??"",HOME:process.env.HOME??""};for(let y of d.env??[])process.env[y]&&(p[y]=process.env[y]);for(let[y,S]of Object.entries(d.envMap??{}))p[S]&&(p[y]=p[S]);for(let[y,S]of Object.entries(d.agentEnv??{}))p[y]=String(this.agentConfig[S]??"");t[c]={type:"stdio",command:"node",args:[h],env:p}}return t["event-bus"]={type:"stdio",command:"node",args:[Q("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}},g.team.enabled&&(s.registryRef||G.warn("Team enabled but registryRef not set \u2014 agents will get empty AGENT_IDS"),t.team={type:"stdio",command:"node",args:[Q("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(s.registryRef?.getAll().map(l=>l.id)??[])}}),g.workflow.enabled&&(t.workflow={type:"stdio",command:"node",args:[Q("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:[Q("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:[Q("admin/admin-mcp-server.js")],env:{MONGODB_URI:g.mongo.uri,MONGODB_DB:g.mongo.dbName,AGENT_ID:this.agentConfig.id,INSTANCE_CAPABILITIES:z_()}},t}filterCoreServers(e){let t={...e},r=new Set(this.agentConfig.coreServers);r.has("memory")&&r.add("structured-memory"),r.add("schedule"),g.team.enabled&&r.add("team"),g.workflow.enabled&&r.add("workflow");for(let n of Object.keys(t))r.has(n)||delete t[n];if(!this.agentConfig.autonomy.externalComms)for(let n of["resend","quo"])t[n]&&(G.debug("Autonomy: externalComms disabled \u2014 removing server",{server:n,agent:this.agentConfig.id}),delete t[n]);return this.agentConfig.autonomy.codeTask||t["code-task"]&&(G.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"]&&(G.debug("Autonomy: codeAccess disabled \u2014 removing server",{server:"code-search",agent:this.agentConfig.id}),delete t["code-search"]),t}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 r={},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)){G.debug("Autonomy gate \u2014 skipping delegate server",{server:i,agent:this.agentConfig.id});continue}s.CONTEXT_DEPENDENT_SERVERS.has(i)&&G.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){G.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.`;r[i]={description:a,prompt:c,mcpServers:[{[i]:o}],model:"inherit",maxTurns:l?7:10,disallowedTools:["Agent"]},l&&G.info("Intent-aware delegate prompt loaded",{agent:this.agentConfig.id,server:i,promptLength:l.length})}return r}getServerCatalogEntry(e){if(nr[e])return nr[e];for(let t of this.plugins){let r=t.manifest.mcpServers[e];if(r?.description)return{description:r.description,usage:r.usage,notFor:r.notFor}}return{description:e}}buildSdkPlugins(){let e=this.agentConfig.plugins;if(!e?.length)return[];let t=[],r=yt(Pn,"..","plugins","claude-code");for(let n of e){if(n.includes("/")||n.includes("\\")||n===".."||n.startsWith(".")){G.warn("Invalid plugin name, skipping",{plugin:n,agent:this.agentConfig.id});continue}let i=yt(r,n);if(!$n(i)){G.warn("Plugin not found, skipping",{plugin:n,expected:i,agent:this.agentConfig.id});continue}t.push({type:"local",path:i})}return t.length>0&&G.debug("Loaded plugins for agent",{agent:this.agentConfig.id,plugins:t.map(n=>n.path)}),t}buildNativeSkills(){return Hf(this.skillIndex,this.agentConfig.id)}buildPreCompactHook(){let e=this.agentConfig.name,t=this.agentConfig.id,r=this.prefetcher;return{PreCompact:[{hooks:[async(n,i,o)=>{G.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(`
|
|
161
|
-
`),l="";if(r
|
|
167
|
+
`)}buildServerConfig(e,t){return this.buildAllServerConfigs(t)[e]}buildAllServerConfigs(e){let t={},s=m.slack.mcpToken;s&&(t.slack={type:"http",url:"https://mcp.slack.com/mcp",headers:{Authorization:`Bearer ${s}`}});let r=[{id:"self",backing:"mongo"}],i=this.getArchetypeDef();if(i&&this.agentConfig.archetypeConfig)try{let d=i.memoryScopes({agentConfig:this.agentConfig,archetypeConfig:this.agentConfig.archetypeConfig});for(let u of d)u.id!=="self"&&r.push(u)}catch(d){R.error("Archetype memoryScopes threw \u2014 using self-only",{agent:this.agentConfig.id,archetype:this.agentConfig.archetype,error:String(d)})}t.memory={type:"stdio",command:"node",args:[Y("memory/memory-mcp-server.js")],env:{AGENT_ID:this.agentConfig.id,MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName,MEMORY_SCOPES_JSON:JSON.stringify(r)}},t["structured-memory"]={type:"stdio",command:"node",args:[Y("memory/structured-memory-mcp-server.js")],env:{AGENT_ID:this.agentConfig.id,MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName,CHANNEL_ID:e?.channelId??"",THREAD_ID:e?.threadId??"",QDRANT_URL:process.env.QDRANT_URL??"http://localhost:6333",OLLAMA_URL:process.env.OLLAMA_URL??"http://localhost:11434"}},t.keychain={type:"stdio",command:"node",args:[Y("keychain/keychain-mcp-server.js")],env:{KEYCHAIN_SERVICE:`hive/${m.instance.id}`}};let o=m.google.accounts[this.agentConfig.id]||m.google.account,a=m.google.client;if(t.google={type:"stdio",command:"node",args:[Y("google/google-mcp-server.js")],env:{...o?{GOG_ACCOUNT:o}:{},...a?{GOG_CLIENT:a}:{},DRIVE_SHARED_FOLDER:m.google.sharedFolder,INSTANCE_ID:m.instance.id,PATH:process.env.PATH??""}},m.quo.apiKey&&(t.quo={type:"stdio",command:"node",args:[Y("quo/quo-mcp-server.js")],env:{QUO_API_KEY:m.quo.apiKey,...m.quo.phoneNumberId?{QUO_PHONE_NUMBER_ID:m.quo.phoneNumberId}:{},QUO_LINES_JSON:JSON.stringify(m.quo.lines)}}),m.voice.enabled&&m.voice.apiKey){let d=Object.entries(m.voice.assistants).find(([u,h])=>h===this.agentConfig.id)?.[0]??"";t.voice={type:"stdio",command:"node",args:[Y("voice/voice-mcp-server.js")],env:{VAPI_API_KEY:m.voice.apiKey,VAPI_PHONE_NUMBER_ID:m.voice.phoneNumberId,VAPI_ASSISTANT_ID:d,AGENT_ID:this.agentConfig.id,AGENT_NAME:this.agentConfig.name}}}t.contacts={type:"stdio",command:"node",args:[Y("contacts/contacts-mcp-server.js")],env:{MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName}};let l=m.taskLedger.agentKeys[this.agentConfig.id]??m.taskLedger.apiKey;if(l&&(t.tasks={type:"stdio",command:"node",args:[Y("tasks/task-mcp-server.js")],env:{TASK_LEDGER_API_URL:m.taskLedger.apiUrl,TASK_LEDGER_API_KEY:l}}),m.brave.apiKey&&(t["brave-search"]={type:"stdio",command:"node",args:[QS(import.meta.url).resolve("brave-search-mcp/dist/index.js")],env:{BRAVE_API_KEY:m.brave.apiKey}}),m.resend.apiKey){let d=this.agentConfig.name.toLowerCase(),u=m.resend.emailDomain,h=m.resend.businessName?` (${m.resend.businessName})`:"",p=u?`${this.agentConfig.name}${h} <${d}@${u}>`:m.resend.fromAddress;t.resend={type:"stdio",command:"node",args:[Y("resend/resend-mcp-server.js")],env:{RESEND_API_KEY:m.resend.apiKey,RESEND_FROM_ADDRESS:p,RESEND_DEFAULT_CC:m.resend.defaultCc,RESEND_DEFAULT_BCC:m.resend.defaultBcc}}}if(m.linear.apiKey){let d={LINEAR_API_KEY:m.linear.apiKey};m.linear.teamId&&(d.LINEAR_TEAM_ID=m.linear.teamId),t.linear={type:"stdio",command:"node",args:[Y("linear/linear-mcp-server.js")],env:d}}if(m.github.repo){let d={GITHUB_REPO:m.github.repo,PATH:process.env.PATH??""};m.github.token&&(d.GH_TOKEN=m.github.token),t["github-issues"]={type:"stdio",command:"node",args:[Y("github/github-issues-mcp-server.js")],env:d}}m.clickup.apiToken&&(t.clickup={type:"stdio",command:"node",args:[Y("clickup/clickup-mcp-server.js")],env:{CLICKUP_API_TOKEN:m.clickup.apiToken}}),m.recall.apiKey&&(t.recall={type:"stdio",command:"node",args:[Y("recall/recall-mcp-server.js")],env:{RECALL_API_KEY:m.recall.apiKey,RECALL_API_REGION:m.recall.region,RECALL_WEBHOOK_SECRET:m.recall.webhookSecret,MEETING_MONITOR_API:`http://127.0.0.1:${m.recall.monitorPort}`,MEETING_MONITOR_PUBLIC_URL:m.recall.monitorPublicUrl,RECALL_AGENT_ID:this.agentConfig.id,RECALL_ADAPTER_ID:e?.adapterId??"",RECALL_CHANNEL_ID:e?.channelId??"",RECALL_CHANNEL_KIND:e?.channelKind??"internal",RECALL_CHANNEL_LABEL:e?.channelLabel??"",RECALL_THREAD_ID:e?.threadId??"",RECALL_SLACK_TS:e?.slackTs??"",RECALL_SLACK_THREAD_TS:e?.slackThreadTs??""}}),m.browser.cdpEndpoint&&(t.browser={type:"stdio",command:"npx",args:["@playwright/mcp@latest","--cdp-endpoint",m.browser.cdpEndpoint],env:{PATH:process.env.PATH??"",HOME:process.env.HOME??""}}),t.background={type:"stdio",command:"node",args:[Y("background/background-task-mcp-server.js")],env:{BG_TASK_API:`http://127.0.0.1:${m.background.port}`,BG_AUTH_TOKEN:m.background.authToken,BG_AGENT_ID:this.agentConfig.id,BG_ADAPTER_ID:e?.adapterId??"",BG_CHANNEL_ID:e?.channelId??"",BG_CHANNEL_KIND:e?.channelKind??"internal",BG_CHANNEL_LABEL:e?.channelLabel??"",BG_THREAD_ID:e?.threadId??"",BG_SLACK_TS:e?.slackTs??"",BG_SLACK_THREAD_TS:e?.slackThreadTs??""}},t.callback={type:"stdio",command:"node",args:[Y("callback/callback-mcp-server.js")],env:{CB_AGENT_ID:this.agentConfig.id,CB_ADAPTER_ID:e?.adapterId??"",CB_CHANNEL_ID:e?.channelId??"",CB_CHANNEL_KIND:e?.channelKind??"internal",CB_CHANNEL_LABEL:e?.channelLabel??"",CB_THREAD_ID:e?.threadId??"",CB_SLACK_TS:e?.slackTs??"",CB_SLACK_THREAD_TS:e?.slackThreadTs??"",MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName}},t["code-task"]={type:"stdio",command:"node",args:[Y("code-task/code-task-mcp-server.js")],env:{CT_TASK_API:`http://127.0.0.1:${m.codeTask.port}`,CT_AUTH_TOKEN:m.codeTask.authToken,CT_AGENT_ID:this.agentConfig.id,CT_ADAPTER_ID:e?.adapterId??"",CT_CHANNEL_ID:e?.channelId??"",CT_CHANNEL_KIND:e?.channelKind??"internal",CT_CHANNEL_LABEL:e?.channelLabel??"",CT_THREAD_ID:e?.threadId??"",CT_SLACK_TS:e?.slackTs??"",CT_SLACK_THREAD_TS:e?.slackThreadTs??""}};let c={OLLAMA_URL:process.env.OLLAMA_URL??"http://localhost:11434",QDRANT_URL:process.env.QDRANT_URL??"http://localhost:6333"};process.env.KB_EMBED_MODEL&&(c.KB_EMBED_MODEL=process.env.KB_EMBED_MODEL),t["conversation-search"]={type:"stdio",command:"node",args:[Y("search/conversation-search-mcp-server.js")],env:{...c,AGENT_ID:this.agentConfig.id,DEFAULT_AGENT:m.defaultAgent}},t["code-search"]={type:"stdio",command:"node",args:[Y("code-index/code-search-mcp-server.js")],env:{MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName,QDRANT_URL:process.env.QDRANT_URL??"http://localhost:6333",OLLAMA_URL:process.env.OLLAMA_URL??"http://localhost:11434"}};for(let d of this.plugins)for(let[u,h]of Object.entries(d.manifest.mcpServers)){if(t[u]){R.warn("Plugin server name conflicts with core server, skipping",{plugin:d.name,server:u});continue}let p=h.entry.replace(/\.ts$/,".js"),g=h.entry.replace(/\.ts$/,".min.js"),f=Ue(ur,`plugins/${d.name}/${p}`),y=Ue(le,"plugins","node_modules",d.name,"dist",g),w=Ue(le,"plugins",d.name,"dist",g),S=[f,y,w].find(v=>dr(v))??f,b=m.taskLedger.agentKeys[this.agentConfig.id]??m.taskLedger.apiKey,A={AGENT_ID:this.agentConfig.id,AGENT_NAME:this.agentConfig.name,MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName,TASK_LEDGER_API_URL:m.taskLedger.apiUrl,...b?{TASK_LEDGER_API_KEY:b}:{},PATH:process.env.PATH??"",HOME:process.env.HOME??""};for(let v of h.env??[])process.env[v]&&(A[v]=process.env[v]);for(let[v,C]of Object.entries(h.envMap??{}))A[C]&&(A[v]=A[C]);for(let[v,C]of Object.entries(h.agentEnv??{}))A[v]=n.resolveAgentEnvPath(this.agentConfig,C);t[u]={type:"stdio",command:"node",args:[S],env:A}}return t["event-bus"]={type:"stdio",command:"node",args:[Y("events/event-bus-mcp-server.js")],env:{AGENT_ID:this.agentConfig.id,MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName,EVENT_SUBSCRIBERS:this.eventSubscribersJson}},n.registryRef||R.warn("registryRef not set \u2014 agents will get empty AGENT_IDS for team server"),t.team={type:"stdio",command:"node",args:[Y("team/team-mcp-server.js")],env:{AGENT_ID:this.agentConfig.id,MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName,AGENT_IDS:JSON.stringify(n.registryRef?.getAll().map(d=>d.id)??[])}},m.workflow.enabled&&(t.workflow={type:"stdio",command:"node",args:[Y("workflow/workflow-mcp-server.js")],env:{AGENT_ID:this.agentConfig.id,MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName,EVENT_SUBSCRIBERS:this.eventSubscribersJson}}),t.schedule={type:"stdio",command:"node",args:[Y("schedule/schedule-mcp-server.js")],env:{AGENT_ID:this.agentConfig.id,MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName}},t.admin={type:"stdio",command:"node",args:[Y("admin/admin-mcp-server.js")],env:{MONGODB_URI:m.mongo.uri,MONGODB_DB:m.mongo.dbName,AGENT_ID:this.agentConfig.id,INSTANCE_CAPABILITIES:ZS(this.plugins)}},t}filterCoreServers(e){let t={...e},s=new Set(this.agentConfig.coreServers);s.has("memory")&&s.add("structured-memory"),s.add("schedule"),s.add("team"),m.workflow.enabled&&s.add("workflow");for(let r of Object.keys(t))s.has(r)||delete t[r];if(!this.agentConfig.autonomy.externalComms)for(let r of["resend","quo"])t[r]&&(R.debug("Autonomy: externalComms disabled \u2014 removing server",{server:r,agent:this.agentConfig.id}),delete t[r]);return this.agentConfig.autonomy.codeTask||t["code-task"]&&(R.debug("Autonomy: codeTask disabled \u2014 removing server",{server:"code-task",agent:this.agentConfig.id}),delete t["code-task"]),this.agentConfig.autonomy.codeAccess||t["code-search"]&&(R.debug("Autonomy: codeAccess disabled \u2014 removing server",{server:"code-search",agent:this.agentConfig.id}),delete t["code-search"]),t}static resolveAgentEnvPath(e,t){let s=t.split("."),r=e;for(let i of s){if(r==null||typeof r!="object")return"";r=r[i]}return r==null?"":String(r)}static INFRASTRUCTURE_SERVERS=new Set(["schedule","structured-memory","team"]);static CONTEXT_DEPENDENT_SERVERS=new Set(["callback","background","code-task","recall","structured-memory","memory"]);buildDelegateAgents(e){let t=this.agentConfig.delegateServers;if(t.length===0)return{};let s={},r=new Set;this.agentConfig.autonomy.externalComms||(r.add("resend"),r.add("quo")),this.agentConfig.autonomy.codeTask||r.add("code-task"),this.agentConfig.autonomy.codeAccess||r.add("code-search");for(let i of t){if(r.has(i)){R.debug("Autonomy gate \u2014 skipping delegate server",{server:i,agent:this.agentConfig.id});continue}n.CONTEXT_DEPENDENT_SERVERS.has(i)&&R.warn("Context-dependent server in delegateServers \u2014 subagent won't have channel context",{agent:this.agentConfig.id,server:i});let o=e[i];if(!o){R.warn("Delegate server not found in configs, skipping",{agent:this.agentConfig.id,server:i});continue}let a=this.getServerCatalogEntry(i).description,l=this.agentConfig.delegatePrompts?.[i],c=l||`You are a tool specialist for ${i}. Execute the requested task using your available tools. Return results concisely. Do not add commentary or explanation beyond what was asked.`;s[i]={description:a,prompt:c,mcpServers:[{[i]:o}],model:"inherit",maxTurns:l?7:10,disallowedTools:["Agent"]},l&&R.info("Intent-aware delegate prompt loaded",{agent:this.agentConfig.id,server:i,promptLength:l.length})}return s}getServerCatalogEntry(e){if(Bs[e])return Bs[e];for(let t of this.plugins){let s=t.manifest.mcpServers[e];if(s?.description)return{description:s.description,usage:s.usage,notFor:s.notFor}}return{description:e}}buildSdkPlugins(){let e=this.agentConfig.plugins;if(!e?.length)return[];let t=[],s=Ue(ur,"..","plugins","claude-code");for(let r of e){if(r.includes("/")||r.includes("\\")||r===".."||r.startsWith(".")){R.warn("Invalid plugin name, skipping",{plugin:r,agent:this.agentConfig.id});continue}let i=Ue(s,r);if(!dr(i)){R.warn("Plugin not found, skipping",{plugin:r,expected:i,agent:this.agentConfig.id});continue}t.push({type:"local",path:i})}return t.length>0&&R.debug("Loaded plugins for agent",{agent:this.agentConfig.id,plugins:t.map(r=>r.path)}),t}buildNativeSkills(){return Hu(this.skillIndex,this.agentConfig.id)}getArchetypeDef(){return this._archetypeDef===void 0&&(this._archetypeDef=this.agentConfig.archetype?or(this.agentConfig.archetype)??null:null,this.agentConfig.archetype&&!this._archetypeDef&&R.warn("Archetype referenced by agent not registered \u2014 running unstructured",{agent:this.agentConfig.id,archetype:this.agentConfig.archetype})),this._archetypeDef}buildHooks(e){let t={PreCompact:this.buildPreCompactMatcher()},s=this.getArchetypeDef();if(s&&this.agentConfig.archetypeConfig)try{let r=s.preToolUseHooks({agentConfig:this.agentConfig,archetypeConfig:this.agentConfig.archetypeConfig,workItemContext:e});r.length>0&&(t.PreToolUse=r)}catch(r){R.error("Archetype preToolUseHooks threw \u2014 installing deny-all PreToolUse hook",{agent:this.agentConfig.id,archetype:this.agentConfig.archetype,error:String(r)}),t.PreToolUse=[{hooks:[async()=>({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:`Archetype hook initialization failed (${String(r)}). All tool calls blocked until the archetype is fixed.`}})]}]}return t}buildPreCompactMatcher(){let e=this.agentConfig.name,t=this.agentConfig.id,s=this.prefetcher;return[{hooks:[async(r,i,o)=>{R.info("PreCompact hook fired",{agent:t});let a=[`You are ${e} (agent ID: ${t}). When summarizing this conversation for compaction:`,"- Preserve your identity, role, and any behavioral instructions from your system prompt","- Keep all customer/contact names, deal details, and reference numbers","- Retain every decision made and commitment given \u2014 who decided what, and why","- Preserve active workflows: what's in progress, what's pending, next steps","- Keep tool call results that informed decisions (not raw API responses)","- Discard pleasantries, thinking-out-loud, and intermediate failed attempts"].join(`
|
|
168
|
+
`),l="";if(s&&r?.transcript_path)try{let d=await XS(r.transcript_path,"utf-8");if(d.length>0){let h=d.length>2e5?d.slice(-2e5):d;l=await s.getCompactionContext(h,t)}}catch(d){R.warn("Code context extraction failed during compaction \u2014 proceeding without",{agent:t,error:String(d)})}return{continue:!0,systemMessage:l?`${a}
|
|
162
169
|
|
|
163
|
-
${l}`:a}}]}]}
|
|
164
|
-
${l}`});return{textContent:
|
|
170
|
+
${l}`:a}}]}]}async send(e,t,s,r,i,o){let a=i??this.agentConfig.model;R.info("Sending prompt to agent",{agent:this.agentConfig.id,model:a,modelOverride:!!i,resumeSession:t??"new",promptLength:e.length,streaming:!!s});let l=this.buildAllServerConfigs(r),c=this.filterCoreServers(l),d=this.buildDelegateAgents(l),u=await this.buildSystemPrompt(Object.keys(c),Object.keys(d)),h=[...this.buildSdkPlugins(),...this.buildNativeSkills()];Object.keys(d).length>0&&R.info("Delegate subagents configured",{agent:this.agentConfig.id,delegates:Object.keys(d)});let p={},g=this.getArchetypeDef();if(g&&this.agentConfig.archetypeConfig)try{p=g.sessionOptions({agentConfig:this.agentConfig,archetypeConfig:this.agentConfig.archetypeConfig,workItemContext:r})}catch(G){R.error("Archetype sessionOptions threw \u2014 ignoring",{agent:this.agentConfig.id,archetype:this.agentConfig.archetype,error:String(G)})}if(typeof p.cwd=="string"){let G=p.cwd,D;try{D=zS(G)}catch(P){let ie=`Archetype cwd unavailable at session start \u2014 refusing to run: ${G} (${String(P)})`;throw R.error(ie,{agent:this.agentConfig.id}),new Error(ie)}if(!D.isDirectory()){let P=`Archetype cwd is not a directory: ${G}`;throw R.error(P,{agent:this.agentConfig.id}),new Error(P)}}let f=JS({prompt:e,options:{model:a,systemPrompt:u,permissionMode:"bypassPermissions",allowDangerouslySkipPermissions:!0,maxTurns:o?.maxTurns??this.agentConfig.maxTurns,maxBudgetUsd:o?.budgetUsd??this.agentConfig.budgetUsd,thinking:{type:"disabled"},...p.cwd?{cwd:p.cwd}:{},settingSources:p.settingSources??[],includePartialMessages:!!s,...t?{resume:t}:{},...Object.keys(c).length>0?{mcpServers:c}:{},...Object.keys(d).length>0?{agents:d}:{},...h.length>0?{plugins:h}:{},hooks:this.buildHooks(r),...this.agentConfig.betas?.length?{betas:this.agentConfig.betas}:{},env:{...process.env,...m.anthropic.apiKey?{ANTHROPIC_API_KEY:m.anthropic.apiKey}:{},CLAUDE_AGENT_SDK_CLIENT_APP:"hive/0.1.0",CLAUDECODE:void 0}}});this.activeQuery=f;let y="",w=t??"",S=0,b=0,A=!1,v;this._aborted=!1;let C=0,M=0,_=0,L=0,j=0,J=0,K,ae=[],sn=null,Le=null,nn=o?.timeoutMs??this.agentConfig.timeoutMs??3e5,rn=setTimeout(()=>{R.warn("Agent query timed out, aborting",{agent:this.agentConfig.id,timeoutMs:nn}),this.abort()},nn);try{for await(let G of f){let D=G;if(D.type==="system"&&D.subtype==="init"&&(w=D.session_id,R.debug("Session initialized",{sessionId:w})),D.type==="system"&&D.subtype==="compact_boundary"){let P=D.compact_metadata;J++,K=P?.pre_tokens,R.info("Context compacted",{agent:this.agentConfig.id,trigger:P?.trigger,preTokens:P?.pre_tokens,compactionNumber:J})}if(D.type==="system"&&D.subtype==="status"&&D.status==="compacting"&&R.info("Compaction in progress",{agent:this.agentConfig.id}),D.type==="stream_event"&&s){let P=D.event;P?.type==="content_block_delta"&&P?.delta?.type==="text_delta"&&(s(P.delta.text),A=!0)}if(D.type==="tool_progress"){let P=D;R.info("Tool in progress",{agent:this.agentConfig.id,tool:P.tool_name,elapsed:P.elapsed_time_seconds})}if(D.type==="assistant"){let P=D.message?.content;if(Array.isArray(P))for(let ie of P)ie.type==="text"?y=ie.text:ie.type==="tool_use"&&(Le&&ae.length>0&&(ae[ae.length-1].endMs=Date.now()),Le=ie.name,sn=Date.now(),ae.push({tool:ie.name,startMs:sn}),R.info("Tool call started",{agent:this.agentConfig.id,tool:ie.name}));D.session_id&&(w=D.session_id)}if(D.type==="result"){let P=D;S=P.total_cost_usd,b=P.duration_ms,w=P.session_id;let ie=P.usage;ie&&(C=ie.input_tokens??0,M=ie.output_tokens??0,_=ie.cache_read_input_tokens??0,L=ie.cache_creation_input_tokens??0);let ns=P.modelUsage;if(ns)for(let Ot of Object.values(ns))Ot.contextWindow&&Ot.contextWindow>j&&(j=Ot.contextWindow);P.subtype==="success"?y=P.result||y:(v=P.subtype,"errors"in P&&Array.isArray(P.errors)&&(v=P.errors.join("; ")))}}}catch(G){let D=String(G);y&&S>0?R.warn("Agent process crashed after producing response \u2014 using response anyway",{agent:this.agentConfig.id,error:D,resultPreview:y.slice(0,200),costUsd:S,durationMs:b}):(v=D,R.error("Agent query failed",{agent:this.agentConfig.id,error:D,costUsd:S,durationMs:b}))}finally{clearTimeout(rn),this.activeQuery=null}Le&&ae.length>0&&(ae[ae.length-1].endMs=Date.now());let ut={};for(let G of ae){let D=(G.endMs??Date.now())-G.startMs,P=G.tool.includes("__")?G.tool.split("__")[1]:G.tool;ut[P]||(ut[P]={count:0,totalMs:0}),ut[P].count++,ut[P].totalMs+=D}let Ve=Object.entries(ut).sort((G,D)=>D[1].totalMs-G[1].totalMs).map(([G,D])=>`${G}:${D.count}x/${(D.totalMs/1e3).toFixed(1)}s`).join(", "),Et=ae.reduce((G,D)=>G+((D.endMs??Date.now())-D.startMs),0),Nt=b-Et;return R.info("Agent response complete",{agent:this.agentConfig.id,sessionId:w,costUsd:S,durationMs:b,llmMs:Nt,toolMs:Et,toolCalls:ae.length,toolSummary:Ve||"none",inputTokens:C,outputTokens:M,cacheReadTokens:_,cacheCreationTokens:L,contextWindow:j,compactions:J,preCompactTokens:K,streamed:A,hasError:!!v}),{text:y,sessionId:w,costUsd:S,durationMs:b,llmMs:Nt,toolMs:Et,toolCalls:ae.length,toolSummary:Ve||"none",streamed:A,inputTokens:C,outputTokens:M,cacheReadTokens:_,cacheCreationTokens:L,contextWindow:j,compactions:J,preCompactTokens:K,error:v,aborted:this._aborted}}_aborted=!1;get wasAborted(){return this._aborted}abort(){this.activeQuery&&(R.info("Aborting active query",{agent:this.agentConfig.id}),this._aborted=!0,this.activeQuery.close(),this.activeQuery=null)}}});import{writeFileSync as ma,mkdirSync as t0}from"node:fs";import{join as fr,extname as ga}from"node:path";import{tmpdir as s0}from"node:os";function Qu(n){pa=n}async function Xu(n,e){if(!pa)return null;try{let t=n.toString("base64"),s=await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${Ju}:generateContent?key=${pa}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({contents:[{parts:[{inline_data:{mime_type:e,data:t}},{text:"Describe this image in detail. If it contains text, extract all of it. If it's a diagram, architecture drawing, or technical image, describe all labels, relationships, and structure. If it's a screenshot of messages or a conversation, transcribe everything. Be thorough."}]}]})});if(!s.ok){let o=await s.text();return pe.warn("Gemini vision error",{status:s.status,error:o.slice(0,200)}),null}let i=(await s.json()).candidates?.[0]?.content?.parts?.[0]?.text;return i&&pe.info("Image described via Gemini",{model:Ju,chars:i.length}),i||null}catch(t){return pe.warn("Gemini vision failed",{error:t.message}),null}}async function Zu(n,e,t){let s=ga(e).slice(1).toLowerCase();if(n0.has(s)||t.startsWith("text/"))return{textContent:hr(n.toString("utf-8")),isImage:!1};if(s==="pdf"||t==="application/pdf")try{let r=await import("pdf-parse"),o=await(r.default??r)(n);return{textContent:hr(o.text),isImage:!1}}catch(r){return pe.warn("PDF parse failed",{name:e,error:r.message}),{textContent:"[PDF \u2014 could not extract text]",isImage:!1}}if(s==="docx"||t==="application/vnd.openxmlformats-officedocument.wordprocessingml.document")try{let i=await(await import("mammoth")).extractRawText({buffer:n});return{textContent:hr(i.value),isImage:!1}}catch(r){return pe.warn("DOCX parse failed",{name:e,error:r.message}),{textContent:"[DOCX \u2014 could not extract text]",isImage:!1}}if(s==="xlsx"||s==="xls"||t.includes("spreadsheet"))try{let r=await import("xlsx"),i=r.read(n,{type:"buffer"}),o=i.SheetNames.map(a=>{let l=r.utils.sheet_to_csv(i.Sheets[a]);return`--- Sheet: ${a} ---
|
|
171
|
+
${l}`});return{textContent:hr(o.join(`
|
|
165
172
|
|
|
166
|
-
`)),isImage:!1}}catch(
|
|
173
|
+
`)),isImage:!1}}catch(r){return pe.warn("XLSX parse failed",{name:e,error:r.message}),{textContent:"[Spreadsheet \u2014 could not extract content]",isImage:!1}}return null}async function eh(n,e){let t=n.url_private_download||n.url_private;if(!t)return pe.warn("No download URL for file",{id:n.id,name:n.name}),null;try{pe.info("Downloading file",{id:n.id,url:t.slice(0,80),mimetype:n.mimetype});let s=await fetch(t,{headers:{Authorization:`Bearer ${e}`},redirect:"manual"});if(s.status===302||s.status===301){let d=s.headers.get("location");d&&(pe.info("Following redirect",{id:n.id}),s=await fetch(d))}if(!s.ok)return pe.error("Failed to download file",{id:n.id,status:s.status}),null;let r=Buffer.from(await s.arrayBuffer());if(r.length<100&&r.length>0){let d=r.toString("utf-8").trim();if(d.includes("requested")&&d.includes("file")&&d.includes("not found"))return pe.error("Slack file error response",{id:n.id,name:n.name,errorText:d,bufferSize:r.length}),null}let i=n.name.replace(/[^a-zA-Z0-9._-]/g,"_"),o=fr(pr,`${n.id}-${i}`);ma(o,r);let a=ga(n.name).slice(1).toLowerCase();if(zu.has(a)||n.mimetype.startsWith("image/")){let d=await Xu(r,n.mimetype);return{name:n.name,mimetype:n.mimetype,size:n.size,localPath:o,textContent:d??"[Image \u2014 could not extract description]",isImage:!0}}let c=await Zu(r,n.name,n.mimetype);return c?{name:n.name,mimetype:n.mimetype,size:n.size,localPath:o,...c}:(pe.info("Unsupported file type",{name:n.name,ext:a,mimetype:n.mimetype}),{name:n.name,mimetype:n.mimetype,size:n.size,localPath:o,textContent:null,isImage:!1})}catch(s){return pe.error("File processing failed",{id:n.id,name:n.name,error:s.message}),null}}async function qs(n,e,t){let s=e.replace(/[^a-zA-Z0-9._-]/g,"_"),r=fr(pr,`ws-${Date.now()}-${s}`);ma(r,n);let i=await Xu(n,t);return{name:e,mimetype:t,size:n.length,localPath:r,textContent:i??"[Image \u2014 could not extract description]",isImage:!0}}async function th(n,e,t){let s=e.replace(/[^a-zA-Z0-9._-]/g,"_"),r=fr(pr,`team-${Date.now()}-${s}`);ma(r,n);let i=ga(e).slice(1).toLowerCase();if(zu.has(i)||t.startsWith("image/"))return qs(n,e,t);let a=await Zu(n,e,t);return a?{name:e,mimetype:t,size:n.length,localPath:r,...a}:{name:e,mimetype:t,size:n.length,localPath:r,textContent:null,isImage:!1}}function sh(n){return n.length===0?"":`
|
|
167
174
|
|
|
168
|
-
`+
|
|
175
|
+
`+n.map(t=>{let s=`\u{1F4CE} File: ${t.name} (${nh(t.size)}, ${t.mimetype})`;return t.isImage?t.textContent?`${s}
|
|
169
176
|
--- image description ---
|
|
170
177
|
${t.textContent}
|
|
171
|
-
--- end image description ---`:`${
|
|
172
|
-
[Image received but could not be processed]`:t.textContent?`${
|
|
178
|
+
--- end image description ---`:`${s}
|
|
179
|
+
[Image received but could not be processed]`:t.textContent?`${s}
|
|
173
180
|
--- file content ---
|
|
174
181
|
${t.textContent}
|
|
175
|
-
--- end file content ---`:`${
|
|
182
|
+
--- end file content ---`:`${s}
|
|
176
183
|
Saved at: ${t.localPath}
|
|
177
184
|
(Content could not be extracted \u2014 file available for download)`}).join(`
|
|
178
185
|
|
|
179
|
-
`)}function
|
|
186
|
+
`)}function nh(n){return n<1024?`${n} B`:n<1024*1024?`${(n/1024).toFixed(1)} KB`:`${(n/(1024*1024)).toFixed(1)} MB`}function hr(n,e=5e4){return n.length<=e?n:n.slice(0,e)+`
|
|
180
187
|
|
|
181
|
-
[... truncated at ${
|
|
188
|
+
[... truncated at ${nh(e)} \u2014 full file at local path]`}var pe,pr,zu,pa,Ju,n0,js=q(()=>{"use strict";O();pe=I("file-processor"),pr=fr(s0(),"hive-slack-files");t0(pr,{recursive:!0});zu=new Set(["png","jpg","jpeg","gif","webp","bmp","heic"]),pa="",Ju=process.env.GEMINI_VISION_MODEL||"gemini-2.5-flash";n0=new Set(["csv","tsv","txt","text","md","markdown","json","xml","html","yaml","yml","log"])});import{readFileSync as l0}from"node:fs";import{resolve as ih}from"node:path";function u0(){let n=[ih(import.meta.dirname,"..","..","package.json"),ih(import.meta.dirname,"..","package.json")];for(let e of n)try{let t=JSON.parse(l0(e,"utf-8"));if(t?.name==="@keepur/hive"&&typeof t.hiveApi=="string")return t.hiveApi}catch{continue}return null}var d0,oh,ya,ah=q(()=>{"use strict";O();d0=I("api-version");oh=u0();oh||d0.warn("Could not read hiveApi from package.json; falling back to 1.0.0");ya=oh??"1.0.0"});var uh={};Pe(uh,{isHiveApiCompatible:()=>lh,loadPlugins:()=>Sa,normalizeManifest:()=>dh,registerPluginCommands:()=>f0});import{readFileSync as h0,existsSync as yr}from"node:fs";import{resolve as wa,join as Ks}from"node:path";function Sa(n,e){let t=[];for(let s of n){let r=wa(e,"plugins","node_modules",s),i=wa(e,"plugins",s),o=Ks(r,"plugin.yaml"),a=Ks(i,"plugin.yaml"),l;if(yr(o))l=r;else if(yr(a))l=i;else{ct.warn("Plugin manifest not found, skipping",{plugin:s,tried:[o,a]});continue}let c=Ks(l,"plugin.yaml"),d=(0,ch.parse)(h0(c,"utf-8")),u=dh(d);if(u.hiveApi&&!lh(u.hiveApi,ya)){ct.warn("Plugin declares incompatible hiveApi range, skipping",{plugin:s,requires:u.hiveApi,running:ya});continue}for(let[h,p]of Object.entries(u.mcpServers)){let g=Ks(l,p.entry);yr(g)||ct.warn("Plugin MCP server entry not found",{plugin:s,server:h,entry:g})}for(let h of u.agentSeeds){let p=Ks(l,"agent-seeds",h);yr(p)||ct.warn("Plugin agent seed not found",{plugin:s,seed:h,path:p})}t.push({name:s,dir:l,manifest:u}),ct.info("Plugin loaded",{plugin:s,mcpServers:Object.keys(u.mcpServers),seeds:u.agentSeeds})}return t}function lh(n,e){let t=n.trim();if(t===e)return!0;if(t.startsWith("^")){let s=t.slice(1).split(".").map(Number),r=e.split(".").map(Number);return!(s.length<1||r.length<1||s[0]!==r[0]||(r[1]??0)<(s[1]??0)||(r[1]??0)===(s[1]??0)&&(r[2]??0)<(s[2]??0))}return ct.warn("Unrecognized hiveApi range syntax, accepting",{range:n}),!0}function dh(n){return{name:n.name??"",description:n.description??"",hiveApi:n.hiveApi??n["hive-api"]??void 0,mcpServers:Object.fromEntries(Object.entries(n["mcp-servers"]??{}).map(([e,t])=>[e,{entry:t.entry,description:t.description,usage:t.usage,notFor:t["not-for"],env:t.env??[],envMap:t["env-map"]??{},agentEnv:t["agent-env"]??{}}])),agentSeeds:n["agent-seeds"]??n["agents-templates"]??[],registerCommands:n["register-commands"]??void 0}}async function f0(n,e){for(let t of n)if(t.manifest.registerCommands)try{let r=await import(wa(t.dir,"dist",t.manifest.registerCommands));typeof r.registerCommands=="function"&&(r.registerCommands(e),ct.info("Plugin commands registered",{plugin:t.name}))}catch(s){ct.warn("Failed to load plugin commands",{plugin:t.name,error:String(s)})}}var ch,ct,ba=q(()=>{"use strict";ch=ve(ea(),1);O();ah();ct=I("plugin-loader")});async function qe(n,e){let t=await fetch(`${n}/api/embed`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:p0,input:e})});if(!t.ok)throw new Error(`Ollama embed ${t.status}: ${await t.text()}`);return(await t.json()).embeddings[0]}var p0,wr=q(()=>{"use strict";p0=process.env.KB_EMBED_MODEL??"bge-large"});var va,BC,Lh=q(()=>{"use strict";va="code_index",BC=Buffer.from("6ba7b8109dad11d180b400c04fd430c8","hex")});var Ph={};Pe(Ph,{CodeIndexPrefetcher:()=>Ta});import{QdrantClient as Ob}from"@qdrant/js-client-rest";import{MongoClient as xb}from"mongodb";var Ta,$h=q(()=>{"use strict";wr();Lh();Ta=class{options;mongo;qdrant;connected=!1;scoreThreshold;prefetchLimit;constructor(e){this.options=e,this.scoreThreshold=e.scoreThreshold??.65,this.prefetchLimit=e.prefetchLimit??8}async ensureConnected(){this.connected||(this.mongo=new xb(this.options.mongoUri),await this.mongo.connect(),this.qdrant=new Ob({url:this.options.qdrantUrl}),this.connected=!0)}async getContext(e,t){try{await this.ensureConnected()}catch{return""}let s=[],r;try{r=await qe(this.options.ollamaUrl,e)}catch{return""}try{let o=(await this.qdrant.search(va,{vector:r,limit:this.prefetchLimit,with_payload:!0})).filter(a=>a.score>=this.scoreThreshold);if(o.length>0){let a=o.map(l=>{let c=l.payload;return`- **${c.repo}:${c.filePath}** \u2014 ${c.summary} (${c.role})`});s.push(`**Relevant files:**
|
|
182
189
|
`+a.join(`
|
|
183
|
-
`))}}catch{}if(t)try{let o=(await this.qdrant.search("agent_memory",{vector:
|
|
190
|
+
`))}}catch{}if(t)try{let o=(await this.qdrant.search("agent_memory",{vector:r,limit:15,with_payload:!0,filter:{must:[{key:"agentId",match:{value:t}}]}})).filter(a=>a.score>=this.scoreThreshold).filter(a=>typeof a.payload?.topic=="string"&&a.payload.topic.startsWith("code:"));if(o.length>0){let a=o.map(l=>l.payload?.mongoId).filter(Boolean);if(a.length>0){let l=this.mongo.db(this.options.dbName).collection("agent_memory"),{ObjectId:c}=await import("mongodb"),d=await l.find({_id:{$in:a.map(u=>new c(u))}}).toArray();if(d.length>0){let u=d.map(h=>`- ${String(h.topic??"").replace(/^code:/,"")}: ${String(h.content??"")}`);s.push(`**Previous session insights:**
|
|
184
191
|
`+u.join(`
|
|
185
|
-
`))}}}}catch{}return
|
|
186
|
-
`)}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,
|
|
187
|
-
`)}async close(){this.connected&&await this.mongo.close()}}});var
|
|
188
|
-
[...truncated]`:t.result,
|
|
192
|
+
`))}}}}catch{}return s.length===0?"":["## Codebase Context (auto-retrieved)",...s,"","_Results may be stale \u2014 verify by reading files._"].join(`
|
|
193
|
+
`)}extractFilePaths(e){let t=/(?:^|\s|`|"|')((src|plugins|dist|docs|scripts|setup|skills|service|agents-templates|test)\/.{1,200}\.(ts|tsx|js|jsx|json|yaml|yml|md))\b/gm,s=new Set,r;for(;(r=t.exec(e))!==null;)s.add(r[1]);return[...s]}async getCompactionContext(e,t){try{await this.ensureConnected()}catch{return""}let s=[],r=[],i=new Set;try{let c=this.extractFilePaths(e);if(c.length>0){let u=await this.mongo.db(this.options.dbName).collection("code_index").find({filePath:{$in:c}}).project({repo:1,filePath:1,summary:1,role:1}).toArray();for(let h of u){let p=`${h.repo}:${h.filePath}`;i.has(p)||(i.add(p),s.push(`- ${p} \u2014 ${h.summary} [${h.role}]`))}}}catch{}try{let c=e.slice(-2e3),d=await qe(this.options.ollamaUrl,c),u=await this.qdrant.search(va,{vector:d,limit:this.prefetchLimit,with_payload:!0});for(let h of u){if(h.score<this.scoreThreshold)continue;let p=h.payload,g=`${p.repo}:${p.filePath}`;i.has(g)||(i.add(g),s.push(`- ${g} \u2014 ${p.summary} [${p.role}]`))}if(t){let p=(await this.qdrant.search("agent_memory",{vector:d,limit:10,with_payload:!0,filter:{must:[{key:"agentId",match:{value:t}}]}})).filter(g=>g.score>=this.scoreThreshold).filter(g=>typeof g.payload?.topic=="string"&&g.payload.topic.startsWith("code:"));if(p.length>0){let g=p.map(f=>f.payload?.mongoId).filter(Boolean);if(g.length>0){let{ObjectId:f}=await import("mongodb"),w=await this.mongo.db(this.options.dbName).collection("agent_memory").find({_id:{$in:g.map(S=>new f(S))}}).toArray();for(let S of w){let b=String(S.topic??"").replace(/^code:/,""),A=String(S.content??"");r.push(`- ${b}: ${A}`)}}}}}catch{}if(s.length===0&&r.length===0)return"";let o=s.slice(0,10),a=[];o.length>0&&a.push("Files actively referenced in this conversation:",...o,"Preserve references to these files and any decisions made about them.");let l=r.slice(0,10);return l.length>0&&a.push("","Code insights from prior sessions:",...l,"Preserve these insights if relevant to the conversation."),a.join(`
|
|
194
|
+
`)}async close(){this.connected&&await this.mongo.close()}}});var Rh={};Pe(Rh,{KnowledgeExtractor:()=>Ia});import Mb from"@anthropic-ai/sdk";var Db,Ia,Bh=q(()=>{"use strict";O();Db=I("knowledge-extractor"),Ia=class{memoryStore;memoryEmbedder;anthropic;constructor(e,t){this.memoryStore=e,this.memoryEmbedder=t,this.anthropic=new Mb}async extract(e,t){if(!t?.result)return 0;let s=t.result.length>3e4?t.result.slice(0,3e4)+`
|
|
195
|
+
[...truncated]`:t.result,r=await this.anthropic.messages.create({model:"claude-haiku-4-5-20251001",max_tokens:4096,messages:[{role:"user",content:`Extract code insights from this completed coding session. For each source file the session read or modified, note:
|
|
189
196
|
- filePath: the relative file path
|
|
190
|
-
- repo: which
|
|
197
|
+
- repo: which repository this file belongs to, inferred from the working directory or file paths
|
|
191
198
|
- 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.
|
|
192
199
|
- wasModified: true if the file was created or edited, false if only read
|
|
193
200
|
|
|
194
201
|
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.
|
|
195
202
|
|
|
196
203
|
Session output:
|
|
197
|
-
${
|
|
198
|
-
${this.list().map(
|
|
199
|
-
`)}`}),this.register({def:{name:"
|
|
200
|
-
${t.members.map(
|
|
201
|
-
`)}`:"Channel not found"}})}}});var cs=w((bc,Ph)=>{var bi=$("buffer"),tt=bi.Buffer;function $h(s,e){for(var t in s)e[t]=s[t]}tt.from&&tt.alloc&&tt.allocUnsafe&&tt.allocUnsafeSlow?Ph.exports=bi:($h(bi,bc),bc.Buffer=as);function as(s,e,t){return tt(s,e,t)}$h(tt,as);as.from=function(s,e,t){if(typeof s=="number")throw new TypeError("Argument must not be a number");return tt(s,e,t)};as.alloc=function(s,e,t){if(typeof s!="number")throw new TypeError("Argument must be a number");var r=tt(s);return e!==void 0?typeof t=="string"?r.fill(e,t):r.fill(e):r.fill(0),r};as.allocUnsafe=function(s){if(typeof s!="number")throw new TypeError("Argument must be a number");return tt(s)};as.allocUnsafeSlow=function(s){if(typeof s!="number")throw new TypeError("Argument must be a number");return bi.SlowBuffer(s)}});var vc=w((PR,qh)=>{var vi=cs().Buffer,AE=$("stream"),CE=$("util");function _i(s){if(this.buffer=null,this.writable=!0,this.readable=!0,!s)return this.buffer=vi.alloc(0),this;if(typeof s.pipe=="function")return this.buffer=vi.alloc(0),s.pipe(this),this;if(s.length||typeof s=="object")return this.buffer=s,this.writable=!1,process.nextTick(function(){this.emit("end",s),this.readable=!1,this.emit("close")}.bind(this)),this;throw new TypeError("Unexpected data type ("+typeof s+")")}CE.inherits(_i,AE);_i.prototype.write=function(e){this.buffer=vi.concat([this.buffer,vi.from(e)]),this.emit("data",e)};_i.prototype.end=function(e){e&&this.write(e),this.emit("end",e),this.emit("close"),this.writable=!1,this.readable=!1};qh.exports=_i});var jh=w((qR,Bh)=>{"use strict";function _c(s){var e=(s/8|0)+(s%8===0?0:1);return e}var NE={ES256:_c(256),ES384:_c(384),ES512:_c(521)};function OE(s){var e=NE[s];if(e)return e;throw new Error('Unknown algorithm "'+s+'"')}Bh.exports=OE});var Wh=w((BR,Vh)=>{"use strict";var Ti=cs().Buffer,Fh=jh(),Ei=128,Kh=0,xE=32,LE=16,DE=2,Hh=LE|xE|Kh<<6,Ii=DE|Kh<<6;function ME(s){return s.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}function Gh(s){if(Ti.isBuffer(s))return s;if(typeof s=="string")return Ti.from(s,"base64");throw new TypeError("ECDSA signature must be a Base64 string or a Buffer")}function RE(s,e){s=Gh(s);var t=Fh(e),r=t+1,n=s.length,i=0;if(s[i++]!==Hh)throw new Error('Could not find expected "seq"');var o=s[i++];if(o===(Ei|1)&&(o=s[i++]),n-i<o)throw new Error('"seq" specified length of "'+o+'", only "'+(n-i)+'" remaining');if(s[i++]!==Ii)throw new Error('Could not find expected "int" for "r"');var a=s[i++];if(n-i-2<a)throw new Error('"r" specified length of "'+a+'", only "'+(n-i-2)+'" available');if(r<a)throw new Error('"r" specified length of "'+a+'", max of "'+r+'" is acceptable');var l=i;if(i+=a,s[i++]!==Ii)throw new Error('Could not find expected "int" for "s"');var c=s[i++];if(n-i!==c)throw new Error('"s" specified length of "'+c+'", expected "'+(n-i)+'"');if(r<c)throw new Error('"s" specified length of "'+c+'", max of "'+r+'" is acceptable');var d=i;if(i+=c,i!==n)throw new Error('Expected to consume entire buffer, but "'+(n-i)+'" bytes remain');var u=t-a,f=t-c,h=Ti.allocUnsafe(u+a+f+c);for(i=0;i<u;++i)h[i]=0;s.copy(h,i,l+Math.max(-u,0),l+a),i=t;for(var m=i;i<m+f;++i)h[i]=0;return s.copy(h,i,d+Math.max(-f,0),d+c),h=h.toString("base64"),h=ME(h),h}function Uh(s,e,t){for(var r=0;e+r<t&&s[e+r]===0;)++r;var n=s[e+r]>=Ei;return n&&--r,r}function $E(s,e){s=Gh(s);var t=Fh(e),r=s.length;if(r!==t*2)throw new TypeError('"'+e+'" signatures must be "'+t*2+'" bytes, saw "'+r+'"');var n=Uh(s,0,t),i=Uh(s,t,s.length),o=t-n,a=t-i,l=2+o+1+1+a,c=l<Ei,d=Ti.allocUnsafe((c?2:3)+l),u=0;return d[u++]=Hh,c?d[u++]=l:(d[u++]=Ei|1,d[u++]=l&255),d[u++]=Ii,d[u++]=o,n<0?(d[u++]=0,u+=s.copy(d,u,0,t)):u+=s.copy(d,u,n,t),d[u++]=Ii,d[u++]=a,i<0?(d[u++]=0,s.copy(d,u,t)):s.copy(d,u,t+i),d}Vh.exports={derToJose:RE,joseToDer:$E}});var Jh=w((jR,Yh)=>{"use strict";var fr=$("buffer").Buffer,Tc=$("buffer").SlowBuffer;Yh.exports=ki;function ki(s,e){if(!fr.isBuffer(s)||!fr.isBuffer(e)||s.length!==e.length)return!1;for(var t=0,r=0;r<s.length;r++)t|=s[r]^e[r];return t===0}ki.install=function(){fr.prototype.equal=Tc.prototype.equal=function(e){return ki(this,e)}};var PE=fr.prototype.equal,qE=Tc.prototype.equal;ki.restore=function(){fr.prototype.equal=PE,Tc.prototype.equal=qE}});var Ac=w((UR,np)=>{var ds=cs().Buffer,ke=$("crypto"),Xh=Wh(),zh=$("util"),BE=`"%s" is not a valid algorithm.
|
|
202
|
-
Supported algorithms are:
|
|
203
|
-
"HS256", "HS384", "HS512", "RS256", "RS384", "RS512", "PS256", "PS384", "PS512", "ES256", "ES384", "ES512" and "none".`,hr="secret must be a string or buffer",ls="key must be a string or a buffer",jE="key must be a string, a buffer or an object",Ic=typeof ke.createPublicKey=="function";Ic&&(ls+=" or a KeyObject",hr+="or a KeyObject");function Qh(s){if(!ds.isBuffer(s)&&typeof s!="string"&&(!Ic||typeof s!="object"||typeof s.type!="string"||typeof s.asymmetricKeyType!="string"||typeof s.export!="function"))throw De(ls)}function Zh(s){if(!ds.isBuffer(s)&&typeof s!="string"&&typeof s!="object")throw De(jE)}function UE(s){if(!ds.isBuffer(s)){if(typeof s=="string")return s;if(!Ic||typeof s!="object"||s.type!=="secret"||typeof s.export!="function")throw De(hr)}}function kc(s){return s.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}function ep(s){s=s.toString();var e=4-s.length%4;if(e!==4)for(var t=0;t<e;++t)s+="=";return s.replace(/\-/g,"+").replace(/_/g,"/")}function De(s){var e=[].slice.call(arguments,1),t=zh.format.bind(zh,s).apply(null,e);return new TypeError(t)}function FE(s){return ds.isBuffer(s)||typeof s=="string"}function pr(s){return FE(s)||(s=JSON.stringify(s)),s}function tp(s){return function(t,r){UE(r),t=pr(t);var n=ke.createHmac("sha"+s,r),i=(n.update(t),n.digest("base64"));return kc(i)}}var Ec,KE="timingSafeEqual"in ke?function(e,t){return e.byteLength!==t.byteLength?!1:ke.timingSafeEqual(e,t)}:function(e,t){return Ec||(Ec=Jh()),Ec(e,t)};function HE(s){return function(t,r,n){var i=tp(s)(t,n);return KE(ds.from(r),ds.from(i))}}function sp(s){return function(t,r){Zh(r),t=pr(t);var n=ke.createSign("RSA-SHA"+s),i=(n.update(t),n.sign(r,"base64"));return kc(i)}}function rp(s){return function(t,r,n){Qh(n),t=pr(t),r=ep(r);var i=ke.createVerify("RSA-SHA"+s);return i.update(t),i.verify(n,r,"base64")}}function GE(s){return function(t,r){Zh(r),t=pr(t);var n=ke.createSign("RSA-SHA"+s),i=(n.update(t),n.sign({key:r,padding:ke.constants.RSA_PKCS1_PSS_PADDING,saltLength:ke.constants.RSA_PSS_SALTLEN_DIGEST},"base64"));return kc(i)}}function VE(s){return function(t,r,n){Qh(n),t=pr(t),r=ep(r);var i=ke.createVerify("RSA-SHA"+s);return i.update(t),i.verify({key:n,padding:ke.constants.RSA_PKCS1_PSS_PADDING,saltLength:ke.constants.RSA_PSS_SALTLEN_DIGEST},r,"base64")}}function WE(s){var e=sp(s);return function(){var r=e.apply(null,arguments);return r=Xh.derToJose(r,"ES"+s),r}}function YE(s){var e=rp(s);return function(r,n,i){n=Xh.joseToDer(n,"ES"+s).toString("base64");var o=e(r,n,i);return o}}function JE(){return function(){return""}}function zE(){return function(e,t){return t===""}}np.exports=function(e){var t={hs:tp,rs:sp,ps:GE,es:WE,none:JE},r={hs:HE,rs:rp,ps:VE,es:YE,none:zE},n=e.match(/^(RS|PS|ES|HS)(256|384|512)$|^(none)$/);if(!n)throw De(BE,e);var i=(n[1]||n[3]).toLowerCase(),o=n[2];return{sign:t[i](o),verify:r[i](o)}}});var Cc=w((FR,ip)=>{var XE=$("buffer").Buffer;ip.exports=function(e){return typeof e=="string"?e:typeof e=="number"||XE.isBuffer(e)?e.toString():JSON.stringify(e)}});var up=w((KR,dp)=>{var QE=cs().Buffer,op=vc(),ZE=Ac(),eI=$("stream"),ap=Cc(),Nc=$("util");function cp(s,e){return QE.from(s,e).toString("base64").replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}function tI(s,e,t){t=t||"utf8";var r=cp(ap(s),"binary"),n=cp(ap(e),t);return Nc.format("%s.%s",r,n)}function lp(s){var e=s.header,t=s.payload,r=s.secret||s.privateKey,n=s.encoding,i=ZE(e.alg),o=tI(e,t,n),a=i.sign(o,r);return Nc.format("%s.%s",o,a)}function Ai(s){var e=s.secret;if(e=e??s.privateKey,e=e??s.key,/^hs/i.test(s.header.alg)===!0&&e==null)throw new TypeError("secret must be a string or buffer or a KeyObject");var t=new op(e);this.readable=!0,this.header=s.header,this.encoding=s.encoding,this.secret=this.privateKey=this.key=t,this.payload=new op(s.payload),this.secret.once("close",function(){!this.payload.writable&&this.readable&&this.sign()}.bind(this)),this.payload.once("close",function(){!this.secret.writable&&this.readable&&this.sign()}.bind(this))}Nc.inherits(Ai,eI);Ai.prototype.sign=function(){try{var e=lp({header:this.header,payload:this.payload.buffer,secret:this.secret.buffer,encoding:this.encoding});return this.emit("done",e),this.emit("data",e),this.emit("end"),this.readable=!1,e}catch(t){this.readable=!1,this.emit("error",t),this.emit("close")}};Ai.sign=lp;dp.exports=Ai});var vp=w((HR,bp)=>{var hp=cs().Buffer,fp=vc(),sI=Ac(),rI=$("stream"),pp=Cc(),nI=$("util"),iI=/^[a-zA-Z0-9\-_]+?\.[a-zA-Z0-9\-_]+?\.([a-zA-Z0-9\-_]+)?$/;function oI(s){return Object.prototype.toString.call(s)==="[object Object]"}function aI(s){if(oI(s))return s;try{return JSON.parse(s)}catch{return}}function mp(s){var e=s.split(".",1)[0];return aI(hp.from(e,"base64").toString("binary"))}function cI(s){return s.split(".",2).join(".")}function gp(s){return s.split(".")[2]}function lI(s,e){e=e||"utf8";var t=s.split(".")[1];return hp.from(t,"base64").toString(e)}function yp(s){return iI.test(s)&&!!mp(s)}function wp(s,e,t){if(!e){var r=new Error("Missing algorithm parameter for jws.verify");throw r.code="MISSING_ALGORITHM",r}s=pp(s);var n=gp(s),i=cI(s),o=sI(e);return o.verify(i,n,t)}function Sp(s,e){if(e=e||{},s=pp(s),!yp(s))return null;var t=mp(s);if(!t)return null;var r=lI(s);return(t.typ==="JWT"||e.json)&&(r=JSON.parse(r,e.encoding)),{header:t,payload:r,signature:gp(s)}}function us(s){s=s||{};var e=s.secret;if(e=e??s.publicKey,e=e??s.key,/^hs/i.test(s.algorithm)===!0&&e==null)throw new TypeError("secret must be a string or buffer or a KeyObject");var t=new fp(e);this.readable=!0,this.algorithm=s.algorithm,this.encoding=s.encoding,this.secret=this.publicKey=this.key=t,this.signature=new fp(s.signature),this.secret.once("close",function(){!this.signature.writable&&this.readable&&this.verify()}.bind(this)),this.signature.once("close",function(){!this.secret.writable&&this.readable&&this.verify()}.bind(this))}nI.inherits(us,rI);us.prototype.verify=function(){try{var e=wp(this.signature.buffer,this.algorithm,this.key.buffer),t=Sp(this.signature.buffer,this.encoding);return this.emit("done",e,t),this.emit("data",e),this.emit("end"),this.readable=!1,e}catch(r){this.readable=!1,this.emit("error",r),this.emit("close")}};us.decode=Sp;us.isValid=yp;us.verify=wp;bp.exports=us});var Ni=w(St=>{var _p=up(),Ci=vp(),dI=["HS256","HS384","HS512","RS256","RS384","RS512","PS256","PS384","PS512","ES256","ES384","ES512"];St.ALGORITHMS=dI;St.sign=_p.sign;St.verify=Ci.verify;St.decode=Ci.decode;St.isValid=Ci.isValid;St.createSign=function(e){return new _p(e)};St.createVerify=function(e){return new Ci(e)}});var Oc=w((VR,Tp)=>{var uI=Ni();Tp.exports=function(s,e){e=e||{};var t=uI.decode(s,e);if(!t)return null;var r=t.payload;if(typeof r=="string")try{var n=JSON.parse(r);n!==null&&typeof n=="object"&&(r=n)}catch{}return e.complete===!0?{header:t.header,payload:r,signature:t.signature}:r}});var mr=w((WR,Ep)=>{var Oi=function(s,e){Error.call(this,s),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.name="JsonWebTokenError",this.message=s,e&&(this.inner=e)};Oi.prototype=Object.create(Error.prototype);Oi.prototype.constructor=Oi;Ep.exports=Oi});var xc=w((YR,kp)=>{var Ip=mr(),xi=function(s,e){Ip.call(this,s),this.name="NotBeforeError",this.date=e};xi.prototype=Object.create(Ip.prototype);xi.prototype.constructor=xi;kp.exports=xi});var Lc=w((JR,Cp)=>{var Ap=mr(),Li=function(s,e){Ap.call(this,s),this.name="TokenExpiredError",this.expiredAt=e};Li.prototype=Object.create(Ap.prototype);Li.prototype.constructor=Li;Cp.exports=Li});var Op=w((zR,Np)=>{var fs=1e3,hs=fs*60,ps=hs*60,Dt=ps*24,fI=Dt*7,hI=Dt*365.25;Np.exports=function(s,e){e=e||{};var t=typeof s;if(t==="string"&&s.length>0)return pI(s);if(t==="number"&&isFinite(s))return e.long?gI(s):mI(s);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(s))};function pI(s){if(s=String(s),!(s.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(s);if(e){var t=parseFloat(e[1]),r=(e[2]||"ms").toLowerCase();switch(r){case"years":case"year":case"yrs":case"yr":case"y":return t*hI;case"weeks":case"week":case"w":return t*fI;case"days":case"day":case"d":return t*Dt;case"hours":case"hour":case"hrs":case"hr":case"h":return t*ps;case"minutes":case"minute":case"mins":case"min":case"m":return t*hs;case"seconds":case"second":case"secs":case"sec":case"s":return t*fs;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function mI(s){var e=Math.abs(s);return e>=Dt?Math.round(s/Dt)+"d":e>=ps?Math.round(s/ps)+"h":e>=hs?Math.round(s/hs)+"m":e>=fs?Math.round(s/fs)+"s":s+"ms"}function gI(s){var e=Math.abs(s);return e>=Dt?Di(s,e,Dt,"day"):e>=ps?Di(s,e,ps,"hour"):e>=hs?Di(s,e,hs,"minute"):e>=fs?Di(s,e,fs,"second"):s+" ms"}function Di(s,e,t,r){var n=e>=t*1.5;return Math.round(s/t)+" "+r+(n?"s":"")}});var Dc=w((XR,xp)=>{var yI=Op();xp.exports=function(s,e){var t=e||Math.floor(Date.now()/1e3);if(typeof s=="string"){var r=yI(s);return typeof r>"u"?void 0:Math.floor(t+r/1e3)}else return typeof s=="number"?t+s:void 0}});var gr=w((QR,Lp)=>{"use strict";var wI="2.0.0",SI=Number.MAX_SAFE_INTEGER||9007199254740991,bI=16,vI=250,_I=["major","premajor","minor","preminor","patch","prepatch","prerelease"];Lp.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:bI,MAX_SAFE_BUILD_LENGTH:vI,MAX_SAFE_INTEGER:SI,RELEASE_TYPES:_I,SEMVER_SPEC_VERSION:wI,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var yr=w((ZR,Dp)=>{"use strict";var TI=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...s)=>console.error("SEMVER",...s):()=>{};Dp.exports=TI});var ms=w((Fe,Mp)=>{"use strict";var{MAX_SAFE_COMPONENT_LENGTH:Mc,MAX_SAFE_BUILD_LENGTH:EI,MAX_LENGTH:II}=gr(),kI=yr();Fe=Mp.exports={};var AI=Fe.re=[],CI=Fe.safeRe=[],C=Fe.src=[],NI=Fe.safeSrc=[],N=Fe.t={},OI=0,Rc="[a-zA-Z0-9-]",xI=[["\\s",1],["\\d",II],[Rc,EI]],LI=s=>{for(let[e,t]of xI)s=s.split(`${e}*`).join(`${e}{0,${t}}`).split(`${e}+`).join(`${e}{1,${t}}`);return s},D=(s,e,t)=>{let r=LI(e),n=OI++;kI(s,n,e),N[s]=n,C[n]=e,NI[n]=r,AI[n]=new RegExp(e,t?"g":void 0),CI[n]=new RegExp(r,t?"g":void 0)};D("NUMERICIDENTIFIER","0|[1-9]\\d*");D("NUMERICIDENTIFIERLOOSE","\\d+");D("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${Rc}*`);D("MAINVERSION",`(${C[N.NUMERICIDENTIFIER]})\\.(${C[N.NUMERICIDENTIFIER]})\\.(${C[N.NUMERICIDENTIFIER]})`);D("MAINVERSIONLOOSE",`(${C[N.NUMERICIDENTIFIERLOOSE]})\\.(${C[N.NUMERICIDENTIFIERLOOSE]})\\.(${C[N.NUMERICIDENTIFIERLOOSE]})`);D("PRERELEASEIDENTIFIER",`(?:${C[N.NONNUMERICIDENTIFIER]}|${C[N.NUMERICIDENTIFIER]})`);D("PRERELEASEIDENTIFIERLOOSE",`(?:${C[N.NONNUMERICIDENTIFIER]}|${C[N.NUMERICIDENTIFIERLOOSE]})`);D("PRERELEASE",`(?:-(${C[N.PRERELEASEIDENTIFIER]}(?:\\.${C[N.PRERELEASEIDENTIFIER]})*))`);D("PRERELEASELOOSE",`(?:-?(${C[N.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${C[N.PRERELEASEIDENTIFIERLOOSE]})*))`);D("BUILDIDENTIFIER",`${Rc}+`);D("BUILD",`(?:\\+(${C[N.BUILDIDENTIFIER]}(?:\\.${C[N.BUILDIDENTIFIER]})*))`);D("FULLPLAIN",`v?${C[N.MAINVERSION]}${C[N.PRERELEASE]}?${C[N.BUILD]}?`);D("FULL",`^${C[N.FULLPLAIN]}$`);D("LOOSEPLAIN",`[v=\\s]*${C[N.MAINVERSIONLOOSE]}${C[N.PRERELEASELOOSE]}?${C[N.BUILD]}?`);D("LOOSE",`^${C[N.LOOSEPLAIN]}$`);D("GTLT","((?:<|>)?=?)");D("XRANGEIDENTIFIERLOOSE",`${C[N.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);D("XRANGEIDENTIFIER",`${C[N.NUMERICIDENTIFIER]}|x|X|\\*`);D("XRANGEPLAIN",`[v=\\s]*(${C[N.XRANGEIDENTIFIER]})(?:\\.(${C[N.XRANGEIDENTIFIER]})(?:\\.(${C[N.XRANGEIDENTIFIER]})(?:${C[N.PRERELEASE]})?${C[N.BUILD]}?)?)?`);D("XRANGEPLAINLOOSE",`[v=\\s]*(${C[N.XRANGEIDENTIFIERLOOSE]})(?:\\.(${C[N.XRANGEIDENTIFIERLOOSE]})(?:\\.(${C[N.XRANGEIDENTIFIERLOOSE]})(?:${C[N.PRERELEASELOOSE]})?${C[N.BUILD]}?)?)?`);D("XRANGE",`^${C[N.GTLT]}\\s*${C[N.XRANGEPLAIN]}$`);D("XRANGELOOSE",`^${C[N.GTLT]}\\s*${C[N.XRANGEPLAINLOOSE]}$`);D("COERCEPLAIN",`(^|[^\\d])(\\d{1,${Mc}})(?:\\.(\\d{1,${Mc}}))?(?:\\.(\\d{1,${Mc}}))?`);D("COERCE",`${C[N.COERCEPLAIN]}(?:$|[^\\d])`);D("COERCEFULL",C[N.COERCEPLAIN]+`(?:${C[N.PRERELEASE]})?(?:${C[N.BUILD]})?(?:$|[^\\d])`);D("COERCERTL",C[N.COERCE],!0);D("COERCERTLFULL",C[N.COERCEFULL],!0);D("LONETILDE","(?:~>?)");D("TILDETRIM",`(\\s*)${C[N.LONETILDE]}\\s+`,!0);Fe.tildeTrimReplace="$1~";D("TILDE",`^${C[N.LONETILDE]}${C[N.XRANGEPLAIN]}$`);D("TILDELOOSE",`^${C[N.LONETILDE]}${C[N.XRANGEPLAINLOOSE]}$`);D("LONECARET","(?:\\^)");D("CARETTRIM",`(\\s*)${C[N.LONECARET]}\\s+`,!0);Fe.caretTrimReplace="$1^";D("CARET",`^${C[N.LONECARET]}${C[N.XRANGEPLAIN]}$`);D("CARETLOOSE",`^${C[N.LONECARET]}${C[N.XRANGEPLAINLOOSE]}$`);D("COMPARATORLOOSE",`^${C[N.GTLT]}\\s*(${C[N.LOOSEPLAIN]})$|^$`);D("COMPARATOR",`^${C[N.GTLT]}\\s*(${C[N.FULLPLAIN]})$|^$`);D("COMPARATORTRIM",`(\\s*)${C[N.GTLT]}\\s*(${C[N.LOOSEPLAIN]}|${C[N.XRANGEPLAIN]})`,!0);Fe.comparatorTrimReplace="$1$2$3";D("HYPHENRANGE",`^\\s*(${C[N.XRANGEPLAIN]})\\s+-\\s+(${C[N.XRANGEPLAIN]})\\s*$`);D("HYPHENRANGELOOSE",`^\\s*(${C[N.XRANGEPLAINLOOSE]})\\s+-\\s+(${C[N.XRANGEPLAINLOOSE]})\\s*$`);D("STAR","(<|>)?=?\\s*\\*");D("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");D("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var Mi=w((e$,Rp)=>{"use strict";var DI=Object.freeze({loose:!0}),MI=Object.freeze({}),RI=s=>s?typeof s!="object"?DI:s:MI;Rp.exports=RI});var $c=w((t$,qp)=>{"use strict";var $p=/^[0-9]+$/,Pp=(s,e)=>{if(typeof s=="number"&&typeof e=="number")return s===e?0:s<e?-1:1;let t=$p.test(s),r=$p.test(e);return t&&r&&(s=+s,e=+e),s===e?0:t&&!r?-1:r&&!t?1:s<e?-1:1},$I=(s,e)=>Pp(e,s);qp.exports={compareIdentifiers:Pp,rcompareIdentifiers:$I}});var ue=w((s$,jp)=>{"use strict";var Ri=yr(),{MAX_LENGTH:Bp,MAX_SAFE_INTEGER:$i}=gr(),{safeRe:Pi,t:qi}=ms(),PI=Mi(),{compareIdentifiers:Pc}=$c(),qc=class s{constructor(e,t){if(t=PI(t),e instanceof s){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof e}".`);if(e.length>Bp)throw new TypeError(`version is longer than ${Bp} characters`);Ri("SemVer",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;let r=e.trim().match(t.loose?Pi[qi.LOOSE]:Pi[qi.FULL]);if(!r)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+r[1],this.minor=+r[2],this.patch=+r[3],this.major>$i||this.major<0)throw new TypeError("Invalid major version");if(this.minor>$i||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>$i||this.patch<0)throw new TypeError("Invalid patch version");r[4]?this.prerelease=r[4].split(".").map(n=>{if(/^[0-9]+$/.test(n)){let i=+n;if(i>=0&&i<$i)return i}return n}):this.prerelease=[],this.build=r[5]?r[5].split("."):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(".")}`),this.version}toString(){return this.version}compare(e){if(Ri("SemVer.compare",this.version,this.options,e),!(e instanceof s)){if(typeof e=="string"&&e===this.version)return 0;e=new s(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof s||(e=new s(e,this.options)),this.major<e.major?-1:this.major>e.major?1:this.minor<e.minor?-1:this.minor>e.minor?1:this.patch<e.patch?-1:this.patch>e.patch?1:0}comparePre(e){if(e instanceof s||(e=new s(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let t=0;do{let r=this.prerelease[t],n=e.prerelease[t];if(Ri("prerelease compare",t,r,n),r===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(r===void 0)return-1;if(r===n)continue;return Pc(r,n)}while(++t)}compareBuild(e){e instanceof s||(e=new s(e,this.options));let t=0;do{let r=this.build[t],n=e.build[t];if(Ri("build compare",t,r,n),r===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(r===void 0)return-1;if(r===n)continue;return Pc(r,n)}while(++t)}inc(e,t,r){if(e.startsWith("pre")){if(!t&&r===!1)throw new Error("invalid increment argument: identifier is empty");if(t){let n=`-${t}`.match(this.options.loose?Pi[qi.PRERELEASELOOSE]:Pi[qi.PRERELEASE]);if(!n||n[1]!==t)throw new Error(`invalid identifier: ${t}`)}}switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",t,r);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",t,r);break;case"prepatch":this.prerelease.length=0,this.inc("patch",t,r),this.inc("pre",t,r);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",t,r),this.inc("pre",t,r);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{let n=Number(r)?1:0;if(this.prerelease.length===0)this.prerelease=[n];else{let i=this.prerelease.length;for(;--i>=0;)typeof this.prerelease[i]=="number"&&(this.prerelease[i]++,i=-2);if(i===-1){if(t===this.prerelease.join(".")&&r===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(n)}}if(t){let i=[t,n];r===!1&&(i=[t]),Pc(this.prerelease[0],t)===0?isNaN(this.prerelease[1])&&(this.prerelease=i):this.prerelease=i}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};jp.exports=qc});var Mt=w((r$,Fp)=>{"use strict";var Up=ue(),qI=(s,e,t=!1)=>{if(s instanceof Up)return s;try{return new Up(s,e)}catch(r){if(!t)return null;throw r}};Fp.exports=qI});var Hp=w((n$,Kp)=>{"use strict";var BI=Mt(),jI=(s,e)=>{let t=BI(s,e);return t?t.version:null};Kp.exports=jI});var Vp=w((i$,Gp)=>{"use strict";var UI=Mt(),FI=(s,e)=>{let t=UI(s.trim().replace(/^[=v]+/,""),e);return t?t.version:null};Gp.exports=FI});var Jp=w((o$,Yp)=>{"use strict";var Wp=ue(),KI=(s,e,t,r,n)=>{typeof t=="string"&&(n=r,r=t,t=void 0);try{return new Wp(s instanceof Wp?s.version:s,t).inc(e,r,n).version}catch{return null}};Yp.exports=KI});var Qp=w((a$,Xp)=>{"use strict";var zp=Mt(),HI=(s,e)=>{let t=zp(s,null,!0),r=zp(e,null,!0),n=t.compare(r);if(n===0)return null;let i=n>0,o=i?t:r,a=i?r:t,l=!!o.prerelease.length;if(!!a.prerelease.length&&!l){if(!a.patch&&!a.minor)return"major";if(a.compareMain(o)===0)return a.minor&&!a.patch?"minor":"patch"}let d=l?"pre":"";return t.major!==r.major?d+"major":t.minor!==r.minor?d+"minor":t.patch!==r.patch?d+"patch":"prerelease"};Xp.exports=HI});var em=w((c$,Zp)=>{"use strict";var GI=ue(),VI=(s,e)=>new GI(s,e).major;Zp.exports=VI});var sm=w((l$,tm)=>{"use strict";var WI=ue(),YI=(s,e)=>new WI(s,e).minor;tm.exports=YI});var nm=w((d$,rm)=>{"use strict";var JI=ue(),zI=(s,e)=>new JI(s,e).patch;rm.exports=zI});var om=w((u$,im)=>{"use strict";var XI=Mt(),QI=(s,e)=>{let t=XI(s,e);return t&&t.prerelease.length?t.prerelease:null};im.exports=QI});var Ae=w((f$,cm)=>{"use strict";var am=ue(),ZI=(s,e,t)=>new am(s,t).compare(new am(e,t));cm.exports=ZI});var dm=w((h$,lm)=>{"use strict";var ek=Ae(),tk=(s,e,t)=>ek(e,s,t);lm.exports=tk});var fm=w((p$,um)=>{"use strict";var sk=Ae(),rk=(s,e)=>sk(s,e,!0);um.exports=rk});var Bi=w((m$,pm)=>{"use strict";var hm=ue(),nk=(s,e,t)=>{let r=new hm(s,t),n=new hm(e,t);return r.compare(n)||r.compareBuild(n)};pm.exports=nk});var gm=w((g$,mm)=>{"use strict";var ik=Bi(),ok=(s,e)=>s.sort((t,r)=>ik(t,r,e));mm.exports=ok});var wm=w((y$,ym)=>{"use strict";var ak=Bi(),ck=(s,e)=>s.sort((t,r)=>ak(r,t,e));ym.exports=ck});var wr=w((w$,Sm)=>{"use strict";var lk=Ae(),dk=(s,e,t)=>lk(s,e,t)>0;Sm.exports=dk});var ji=w((S$,bm)=>{"use strict";var uk=Ae(),fk=(s,e,t)=>uk(s,e,t)<0;bm.exports=fk});var Bc=w((b$,vm)=>{"use strict";var hk=Ae(),pk=(s,e,t)=>hk(s,e,t)===0;vm.exports=pk});var jc=w((v$,_m)=>{"use strict";var mk=Ae(),gk=(s,e,t)=>mk(s,e,t)!==0;_m.exports=gk});var Ui=w((_$,Tm)=>{"use strict";var yk=Ae(),wk=(s,e,t)=>yk(s,e,t)>=0;Tm.exports=wk});var Fi=w((T$,Em)=>{"use strict";var Sk=Ae(),bk=(s,e,t)=>Sk(s,e,t)<=0;Em.exports=bk});var Uc=w((E$,Im)=>{"use strict";var vk=Bc(),_k=jc(),Tk=wr(),Ek=Ui(),Ik=ji(),kk=Fi(),Ak=(s,e,t,r)=>{switch(e){case"===":return typeof s=="object"&&(s=s.version),typeof t=="object"&&(t=t.version),s===t;case"!==":return typeof s=="object"&&(s=s.version),typeof t=="object"&&(t=t.version),s!==t;case"":case"=":case"==":return vk(s,t,r);case"!=":return _k(s,t,r);case">":return Tk(s,t,r);case">=":return Ek(s,t,r);case"<":return Ik(s,t,r);case"<=":return kk(s,t,r);default:throw new TypeError(`Invalid operator: ${e}`)}};Im.exports=Ak});var Am=w((I$,km)=>{"use strict";var Ck=ue(),Nk=Mt(),{safeRe:Ki,t:Hi}=ms(),Ok=(s,e)=>{if(s instanceof Ck)return s;if(typeof s=="number"&&(s=String(s)),typeof s!="string")return null;e=e||{};let t=null;if(!e.rtl)t=s.match(e.includePrerelease?Ki[Hi.COERCEFULL]:Ki[Hi.COERCE]);else{let l=e.includePrerelease?Ki[Hi.COERCERTLFULL]:Ki[Hi.COERCERTL],c;for(;(c=l.exec(s))&&(!t||t.index+t[0].length!==s.length);)(!t||c.index+c[0].length!==t.index+t[0].length)&&(t=c),l.lastIndex=c.index+c[1].length+c[2].length;l.lastIndex=-1}if(t===null)return null;let r=t[2],n=t[3]||"0",i=t[4]||"0",o=e.includePrerelease&&t[5]?`-${t[5]}`:"",a=e.includePrerelease&&t[6]?`+${t[6]}`:"";return Nk(`${r}.${n}.${i}${o}${a}`,e)};km.exports=Ok});var Nm=w((k$,Cm)=>{"use strict";var Fc=class{constructor(){this.max=1e3,this.map=new Map}get(e){let t=this.map.get(e);if(t!==void 0)return this.map.delete(e),this.map.set(e,t),t}delete(e){return this.map.delete(e)}set(e,t){if(!this.delete(e)&&t!==void 0){if(this.map.size>=this.max){let n=this.map.keys().next().value;this.delete(n)}this.map.set(e,t)}return this}};Cm.exports=Fc});var Ce=w((A$,Dm)=>{"use strict";var xk=/\s+/g,Kc=class s{constructor(e,t){if(t=Dk(t),e instanceof s)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new s(e.raw,t);if(e instanceof Hc)return this.raw=e.value,this.set=[[e]],this.formatted=void 0,this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e.trim().replace(xk," "),this.set=this.raw.split("||").map(r=>this.parseRange(r.trim())).filter(r=>r.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let r=this.set[0];if(this.set=this.set.filter(n=>!xm(n[0])),this.set.length===0)this.set=[r];else if(this.set.length>1){for(let n of this.set)if(n.length===1&&jk(n[0])){this.set=[n];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let e=0;e<this.set.length;e++){e>0&&(this.formatted+="||");let t=this.set[e];for(let r=0;r<t.length;r++)r>0&&(this.formatted+=" "),this.formatted+=t[r].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(e){let r=((this.options.includePrerelease&&qk)|(this.options.loose&&Bk))+":"+e,n=Om.get(r);if(n)return n;let i=this.options.loose,o=i?pe[fe.HYPHENRANGELOOSE]:pe[fe.HYPHENRANGE];e=e.replace(o,zk(this.options.includePrerelease)),J("hyphen replace",e),e=e.replace(pe[fe.COMPARATORTRIM],Rk),J("comparator trim",e),e=e.replace(pe[fe.TILDETRIM],$k),J("tilde trim",e),e=e.replace(pe[fe.CARETTRIM],Pk),J("caret trim",e);let a=e.split(" ").map(u=>Uk(u,this.options)).join(" ").split(/\s+/).map(u=>Jk(u,this.options));i&&(a=a.filter(u=>(J("loose invalid filter",u,this.options),!!u.match(pe[fe.COMPARATORLOOSE])))),J("range list",a);let l=new Map,c=a.map(u=>new Hc(u,this.options));for(let u of c){if(xm(u))return[u];l.set(u.value,u)}l.size>1&&l.has("")&&l.delete("");let d=[...l.values()];return Om.set(r,d),d}intersects(e,t){if(!(e instanceof s))throw new TypeError("a Range is required");return this.set.some(r=>Lm(r,t)&&e.set.some(n=>Lm(n,t)&&r.every(i=>n.every(o=>i.intersects(o,t)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new Mk(e,this.options)}catch{return!1}for(let t=0;t<this.set.length;t++)if(Xk(this.set[t],e,this.options))return!0;return!1}};Dm.exports=Kc;var Lk=Nm(),Om=new Lk,Dk=Mi(),Hc=Sr(),J=yr(),Mk=ue(),{safeRe:pe,t:fe,comparatorTrimReplace:Rk,tildeTrimReplace:$k,caretTrimReplace:Pk}=ms(),{FLAG_INCLUDE_PRERELEASE:qk,FLAG_LOOSE:Bk}=gr(),xm=s=>s.value==="<0.0.0-0",jk=s=>s.value==="",Lm=(s,e)=>{let t=!0,r=s.slice(),n=r.pop();for(;t&&r.length;)t=r.every(i=>n.intersects(i,e)),n=r.pop();return t},Uk=(s,e)=>(s=s.replace(pe[fe.BUILD],""),J("comp",s,e),s=Hk(s,e),J("caret",s),s=Fk(s,e),J("tildes",s),s=Vk(s,e),J("xrange",s),s=Yk(s,e),J("stars",s),s),me=s=>!s||s.toLowerCase()==="x"||s==="*",Fk=(s,e)=>s.trim().split(/\s+/).map(t=>Kk(t,e)).join(" "),Kk=(s,e)=>{let t=e.loose?pe[fe.TILDELOOSE]:pe[fe.TILDE];return s.replace(t,(r,n,i,o,a)=>{J("tilde",s,r,n,i,o,a);let l;return me(n)?l="":me(i)?l=`>=${n}.0.0 <${+n+1}.0.0-0`:me(o)?l=`>=${n}.${i}.0 <${n}.${+i+1}.0-0`:a?(J("replaceTilde pr",a),l=`>=${n}.${i}.${o}-${a} <${n}.${+i+1}.0-0`):l=`>=${n}.${i}.${o} <${n}.${+i+1}.0-0`,J("tilde return",l),l})},Hk=(s,e)=>s.trim().split(/\s+/).map(t=>Gk(t,e)).join(" "),Gk=(s,e)=>{J("caret",s,e);let t=e.loose?pe[fe.CARETLOOSE]:pe[fe.CARET],r=e.includePrerelease?"-0":"";return s.replace(t,(n,i,o,a,l)=>{J("caret",s,n,i,o,a,l);let c;return me(i)?c="":me(o)?c=`>=${i}.0.0${r} <${+i+1}.0.0-0`:me(a)?i==="0"?c=`>=${i}.${o}.0${r} <${i}.${+o+1}.0-0`:c=`>=${i}.${o}.0${r} <${+i+1}.0.0-0`:l?(J("replaceCaret pr",l),i==="0"?o==="0"?c=`>=${i}.${o}.${a}-${l} <${i}.${o}.${+a+1}-0`:c=`>=${i}.${o}.${a}-${l} <${i}.${+o+1}.0-0`:c=`>=${i}.${o}.${a}-${l} <${+i+1}.0.0-0`):(J("no pr"),i==="0"?o==="0"?c=`>=${i}.${o}.${a}${r} <${i}.${o}.${+a+1}-0`:c=`>=${i}.${o}.${a}${r} <${i}.${+o+1}.0-0`:c=`>=${i}.${o}.${a} <${+i+1}.0.0-0`),J("caret return",c),c})},Vk=(s,e)=>(J("replaceXRanges",s,e),s.split(/\s+/).map(t=>Wk(t,e)).join(" ")),Wk=(s,e)=>{s=s.trim();let t=e.loose?pe[fe.XRANGELOOSE]:pe[fe.XRANGE];return s.replace(t,(r,n,i,o,a,l)=>{J("xRange",s,r,n,i,o,a,l);let c=me(i),d=c||me(o),u=d||me(a),f=u;return n==="="&&f&&(n=""),l=e.includePrerelease?"-0":"",c?n===">"||n==="<"?r="<0.0.0-0":r="*":n&&f?(d&&(o=0),a=0,n===">"?(n=">=",d?(i=+i+1,o=0,a=0):(o=+o+1,a=0)):n==="<="&&(n="<",d?i=+i+1:o=+o+1),n==="<"&&(l="-0"),r=`${n+i}.${o}.${a}${l}`):d?r=`>=${i}.0.0${l} <${+i+1}.0.0-0`:u&&(r=`>=${i}.${o}.0${l} <${i}.${+o+1}.0-0`),J("xRange return",r),r})},Yk=(s,e)=>(J("replaceStars",s,e),s.trim().replace(pe[fe.STAR],"")),Jk=(s,e)=>(J("replaceGTE0",s,e),s.trim().replace(pe[e.includePrerelease?fe.GTE0PRE:fe.GTE0],"")),zk=s=>(e,t,r,n,i,o,a,l,c,d,u,f)=>(me(r)?t="":me(n)?t=`>=${r}.0.0${s?"-0":""}`:me(i)?t=`>=${r}.${n}.0${s?"-0":""}`:o?t=`>=${t}`:t=`>=${t}${s?"-0":""}`,me(c)?l="":me(d)?l=`<${+c+1}.0.0-0`:me(u)?l=`<${c}.${+d+1}.0-0`:f?l=`<=${c}.${d}.${u}-${f}`:s?l=`<${c}.${d}.${+u+1}-0`:l=`<=${l}`,`${t} ${l}`.trim()),Xk=(s,e,t)=>{for(let r=0;r<s.length;r++)if(!s[r].test(e))return!1;if(e.prerelease.length&&!t.includePrerelease){for(let r=0;r<s.length;r++)if(J(s[r].semver),s[r].semver!==Hc.ANY&&s[r].semver.prerelease.length>0){let n=s[r].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0}});var Sr=w((C$,Bm)=>{"use strict";var br=Symbol("SemVer ANY"),Wc=class s{static get ANY(){return br}constructor(e,t){if(t=Mm(t),e instanceof s){if(e.loose===!!t.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),Vc("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===br?this.value="":this.value=this.operator+this.semver.version,Vc("comp",this)}parse(e){let t=this.options.loose?Rm[$m.COMPARATORLOOSE]:Rm[$m.COMPARATOR],r=e.match(t);if(!r)throw new TypeError(`Invalid comparator: ${e}`);this.operator=r[1]!==void 0?r[1]:"",this.operator==="="&&(this.operator=""),r[2]?this.semver=new Pm(r[2],this.options.loose):this.semver=br}toString(){return this.value}test(e){if(Vc("Comparator.test",e,this.options.loose),this.semver===br||e===br)return!0;if(typeof e=="string")try{e=new Pm(e,this.options)}catch{return!1}return Gc(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof s))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new qm(e.value,t).test(this.value):e.operator===""?e.value===""?!0:new qm(this.value,t).test(e.semver):(t=Mm(t),t.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!t.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||Gc(this.semver,"<",e.semver,t)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||Gc(this.semver,">",e.semver,t)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};Bm.exports=Wc;var Mm=Mi(),{safeRe:Rm,t:$m}=ms(),Gc=Uc(),Vc=yr(),Pm=ue(),qm=Ce()});var vr=w((N$,jm)=>{"use strict";var Qk=Ce(),Zk=(s,e,t)=>{try{e=new Qk(e,t)}catch{return!1}return e.test(s)};jm.exports=Zk});var Fm=w((O$,Um)=>{"use strict";var eA=Ce(),tA=(s,e)=>new eA(s,e).set.map(t=>t.map(r=>r.value).join(" ").trim().split(" "));Um.exports=tA});var Hm=w((x$,Km)=>{"use strict";var sA=ue(),rA=Ce(),nA=(s,e,t)=>{let r=null,n=null,i=null;try{i=new rA(e,t)}catch{return null}return s.forEach(o=>{i.test(o)&&(!r||n.compare(o)===-1)&&(r=o,n=new sA(r,t))}),r};Km.exports=nA});var Vm=w((L$,Gm)=>{"use strict";var iA=ue(),oA=Ce(),aA=(s,e,t)=>{let r=null,n=null,i=null;try{i=new oA(e,t)}catch{return null}return s.forEach(o=>{i.test(o)&&(!r||n.compare(o)===1)&&(r=o,n=new iA(r,t))}),r};Gm.exports=aA});var Jm=w((D$,Ym)=>{"use strict";var Yc=ue(),cA=Ce(),Wm=wr(),lA=(s,e)=>{s=new cA(s,e);let t=new Yc("0.0.0");if(s.test(t)||(t=new Yc("0.0.0-0"),s.test(t)))return t;t=null;for(let r=0;r<s.set.length;++r){let n=s.set[r],i=null;n.forEach(o=>{let a=new Yc(o.semver.version);switch(o.operator){case">":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case"":case">=":(!i||Wm(a,i))&&(i=a);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${o.operator}`)}}),i&&(!t||Wm(t,i))&&(t=i)}return t&&s.test(t)?t:null};Ym.exports=lA});var Xm=w((M$,zm)=>{"use strict";var dA=Ce(),uA=(s,e)=>{try{return new dA(s,e).range||"*"}catch{return null}};zm.exports=uA});var Gi=w((R$,tg)=>{"use strict";var fA=ue(),eg=Sr(),{ANY:hA}=eg,pA=Ce(),mA=vr(),Qm=wr(),Zm=ji(),gA=Fi(),yA=Ui(),wA=(s,e,t,r)=>{s=new fA(s,r),e=new pA(e,r);let n,i,o,a,l;switch(t){case">":n=Qm,i=gA,o=Zm,a=">",l=">=";break;case"<":n=Zm,i=yA,o=Qm,a="<",l="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(mA(s,e,r))return!1;for(let c=0;c<e.set.length;++c){let d=e.set[c],u=null,f=null;if(d.forEach(h=>{h.semver===hA&&(h=new eg(">=0.0.0")),u=u||h,f=f||h,n(h.semver,u.semver,r)?u=h:o(h.semver,f.semver,r)&&(f=h)}),u.operator===a||u.operator===l||(!f.operator||f.operator===a)&&i(s,f.semver))return!1;if(f.operator===l&&o(s,f.semver))return!1}return!0};tg.exports=wA});var rg=w(($$,sg)=>{"use strict";var SA=Gi(),bA=(s,e,t)=>SA(s,e,">",t);sg.exports=bA});var ig=w((P$,ng)=>{"use strict";var vA=Gi(),_A=(s,e,t)=>vA(s,e,"<",t);ng.exports=_A});var cg=w((q$,ag)=>{"use strict";var og=Ce(),TA=(s,e,t)=>(s=new og(s,t),e=new og(e,t),s.intersects(e,t));ag.exports=TA});var dg=w((B$,lg)=>{"use strict";var EA=vr(),IA=Ae();lg.exports=(s,e,t)=>{let r=[],n=null,i=null,o=s.sort((d,u)=>IA(d,u,t));for(let d of o)EA(d,e,t)?(i=d,n||(n=d)):(i&&r.push([n,i]),i=null,n=null);n&&r.push([n,null]);let a=[];for(let[d,u]of r)d===u?a.push(d):!u&&d===o[0]?a.push("*"):u?d===o[0]?a.push(`<=${u}`):a.push(`${d} - ${u}`):a.push(`>=${d}`);let l=a.join(" || "),c=typeof e.raw=="string"?e.raw:String(e);return l.length<c.length?l:e}});var gg=w((j$,mg)=>{"use strict";var ug=Ce(),zc=Sr(),{ANY:Jc}=zc,_r=vr(),Xc=Ae(),kA=(s,e,t={})=>{if(s===e)return!0;s=new ug(s,t),e=new ug(e,t);let r=!1;e:for(let n of s.set){for(let i of e.set){let o=CA(n,i,t);if(r=r||o!==null,o)continue e}if(r)return!1}return!0},AA=[new zc(">=0.0.0-0")],fg=[new zc(">=0.0.0")],CA=(s,e,t)=>{if(s===e)return!0;if(s.length===1&&s[0].semver===Jc){if(e.length===1&&e[0].semver===Jc)return!0;t.includePrerelease?s=AA:s=fg}if(e.length===1&&e[0].semver===Jc){if(t.includePrerelease)return!0;e=fg}let r=new Set,n,i;for(let h of s)h.operator===">"||h.operator===">="?n=hg(n,h,t):h.operator==="<"||h.operator==="<="?i=pg(i,h,t):r.add(h.semver);if(r.size>1)return null;let o;if(n&&i){if(o=Xc(n.semver,i.semver,t),o>0)return null;if(o===0&&(n.operator!==">="||i.operator!=="<="))return null}for(let h of r){if(n&&!_r(h,String(n),t)||i&&!_r(h,String(i),t))return null;for(let m of e)if(!_r(h,String(m),t))return!1;return!0}let a,l,c,d,u=i&&!t.includePrerelease&&i.semver.prerelease.length?i.semver:!1,f=n&&!t.includePrerelease&&n.semver.prerelease.length?n.semver:!1;u&&u.prerelease.length===1&&i.operator==="<"&&u.prerelease[0]===0&&(u=!1);for(let h of e){if(d=d||h.operator===">"||h.operator===">=",c=c||h.operator==="<"||h.operator==="<=",n){if(f&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===f.major&&h.semver.minor===f.minor&&h.semver.patch===f.patch&&(f=!1),h.operator===">"||h.operator===">="){if(a=hg(n,h,t),a===h&&a!==n)return!1}else if(n.operator===">="&&!_r(n.semver,String(h),t))return!1}if(i){if(u&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===u.major&&h.semver.minor===u.minor&&h.semver.patch===u.patch&&(u=!1),h.operator==="<"||h.operator==="<="){if(l=pg(i,h,t),l===h&&l!==i)return!1}else if(i.operator==="<="&&!_r(i.semver,String(h),t))return!1}if(!h.operator&&(i||n)&&o!==0)return!1}return!(n&&c&&!i&&o!==0||i&&d&&!n&&o!==0||f||u)},hg=(s,e,t)=>{if(!s)return e;let r=Xc(s.semver,e.semver,t);return r>0?s:r<0||e.operator===">"&&s.operator===">="?e:s},pg=(s,e,t)=>{if(!s)return e;let r=Xc(s.semver,e.semver,t);return r<0?s:r>0||e.operator==="<"&&s.operator==="<="?e:s};mg.exports=kA});var Vi=w((U$,Sg)=>{"use strict";var Qc=ms(),yg=gr(),NA=ue(),wg=$c(),OA=Mt(),xA=Hp(),LA=Vp(),DA=Jp(),MA=Qp(),RA=em(),$A=sm(),PA=nm(),qA=om(),BA=Ae(),jA=dm(),UA=fm(),FA=Bi(),KA=gm(),HA=wm(),GA=wr(),VA=ji(),WA=Bc(),YA=jc(),JA=Ui(),zA=Fi(),XA=Uc(),QA=Am(),ZA=Sr(),eC=Ce(),tC=vr(),sC=Fm(),rC=Hm(),nC=Vm(),iC=Jm(),oC=Xm(),aC=Gi(),cC=rg(),lC=ig(),dC=cg(),uC=dg(),fC=gg();Sg.exports={parse:OA,valid:xA,clean:LA,inc:DA,diff:MA,major:RA,minor:$A,patch:PA,prerelease:qA,compare:BA,rcompare:jA,compareLoose:UA,compareBuild:FA,sort:KA,rsort:HA,gt:GA,lt:VA,eq:WA,neq:YA,gte:JA,lte:zA,cmp:XA,coerce:QA,Comparator:ZA,Range:eC,satisfies:tC,toComparators:sC,maxSatisfying:rC,minSatisfying:nC,minVersion:iC,validRange:oC,outside:aC,gtr:cC,ltr:lC,intersects:dC,simplifyRange:uC,subset:fC,SemVer:NA,re:Qc.re,src:Qc.src,tokens:Qc.t,SEMVER_SPEC_VERSION:yg.SEMVER_SPEC_VERSION,RELEASE_TYPES:yg.RELEASE_TYPES,compareIdentifiers:wg.compareIdentifiers,rcompareIdentifiers:wg.rcompareIdentifiers}});var vg=w((F$,bg)=>{var hC=Vi();bg.exports=hC.satisfies(process.version,">=15.7.0")});var Tg=w((K$,_g)=>{var pC=Vi();_g.exports=pC.satisfies(process.version,">=16.9.0")});var Zc=w((H$,Eg)=>{var mC=vg(),gC=Tg(),yC={ec:["ES256","ES384","ES512"],rsa:["RS256","PS256","RS384","PS384","RS512","PS512"],"rsa-pss":["PS256","PS384","PS512"]},wC={ES256:"prime256v1",ES384:"secp384r1",ES512:"secp521r1"};Eg.exports=function(s,e){if(!s||!e)return;let t=e.asymmetricKeyType;if(!t)return;let r=yC[t];if(!r)throw new Error(`Unknown key type "${t}".`);if(!r.includes(s))throw new Error(`"alg" parameter for "${t}" key type must be one of: ${r.join(", ")}.`);if(mC)switch(t){case"ec":let n=e.asymmetricKeyDetails.namedCurve,i=wC[s];if(n!==i)throw new Error(`"alg" parameter "${s}" requires curve "${i}".`);break;case"rsa-pss":if(gC){let o=parseInt(s.slice(-3),10),{hashAlgorithm:a,mgf1HashAlgorithm:l,saltLength:c}=e.asymmetricKeyDetails;if(a!==`sha${o}`||l!==a)throw new Error(`Invalid key for this operation, its RSA-PSS parameters do not meet the requirements of "alg" ${s}.`);if(c!==void 0&&c>o>>3)throw new Error(`Invalid key for this operation, its RSA-PSS parameter saltLength does not meet the requirements of "alg" ${s}.`)}break}}});var el=w((G$,Ig)=>{var SC=Vi();Ig.exports=SC.satisfies(process.version,"^6.12.0 || >=8.0.0")});var Cg=w((V$,Ag)=>{var V=mr(),bC=xc(),kg=Lc(),vC=Oc(),_C=Dc(),TC=Zc(),EC=el(),IC=Ni(),{KeyObject:kC,createSecretKey:AC,createPublicKey:CC}=$("crypto"),tl=["RS256","RS384","RS512"],NC=["ES256","ES384","ES512"],sl=["RS256","RS384","RS512"],OC=["HS256","HS384","HS512"];EC&&(tl.splice(tl.length,0,"PS256","PS384","PS512"),sl.splice(sl.length,0,"PS256","PS384","PS512"));Ag.exports=function(s,e,t,r){typeof t=="function"&&!r&&(r=t,t={}),t||(t={}),t=Object.assign({},t);let n;if(r?n=r:n=function(d,u){if(d)throw d;return u},t.clockTimestamp&&typeof t.clockTimestamp!="number")return n(new V("clockTimestamp must be a number"));if(t.nonce!==void 0&&(typeof t.nonce!="string"||t.nonce.trim()===""))return n(new V("nonce must be a non-empty string"));if(t.allowInvalidAsymmetricKeyTypes!==void 0&&typeof t.allowInvalidAsymmetricKeyTypes!="boolean")return n(new V("allowInvalidAsymmetricKeyTypes must be a boolean"));let i=t.clockTimestamp||Math.floor(Date.now()/1e3);if(!s)return n(new V("jwt must be provided"));if(typeof s!="string")return n(new V("jwt must be a string"));let o=s.split(".");if(o.length!==3)return n(new V("jwt malformed"));let a;try{a=vC(s,{complete:!0})}catch(d){return n(d)}if(!a)return n(new V("invalid token"));let l=a.header,c;if(typeof e=="function"){if(!r)return n(new V("verify must be called asynchronous if secret or public key is provided as a callback"));c=e}else c=function(d,u){return u(null,e)};return c(l,function(d,u){if(d)return n(new V("error in secret or public key callback: "+d.message));let f=o[2].trim()!=="";if(!f&&u)return n(new V("jwt signature is required"));if(f&&!u)return n(new V("secret or public key must be provided"));if(!f&&!t.algorithms)return n(new V('please specify "none" in "algorithms" to verify unsigned tokens'));if(u!=null&&!(u instanceof kC))try{u=CC(u)}catch{try{u=AC(typeof u=="string"?Buffer.from(u):u)}catch{return n(new V("secretOrPublicKey is not valid key material"))}}if(t.algorithms||(u.type==="secret"?t.algorithms=OC:["rsa","rsa-pss"].includes(u.asymmetricKeyType)?t.algorithms=sl:u.asymmetricKeyType==="ec"?t.algorithms=NC:t.algorithms=tl),t.algorithms.indexOf(a.header.alg)===-1)return n(new V("invalid algorithm"));if(l.alg.startsWith("HS")&&u.type!=="secret")return n(new V(`secretOrPublicKey must be a symmetric key when using ${l.alg}`));if(/^(?:RS|PS|ES)/.test(l.alg)&&u.type!=="public")return n(new V(`secretOrPublicKey must be an asymmetric key when using ${l.alg}`));if(!t.allowInvalidAsymmetricKeyTypes)try{TC(l.alg,u)}catch(p){return n(p)}let h;try{h=IC.verify(s,a.header.alg,u)}catch(p){return n(p)}if(!h)return n(new V("invalid signature"));let m=a.payload;if(typeof m.nbf<"u"&&!t.ignoreNotBefore){if(typeof m.nbf!="number")return n(new V("invalid nbf value"));if(m.nbf>i+(t.clockTolerance||0))return n(new bC("jwt not active",new Date(m.nbf*1e3)))}if(typeof m.exp<"u"&&!t.ignoreExpiration){if(typeof m.exp!="number")return n(new V("invalid exp value"));if(i>=m.exp+(t.clockTolerance||0))return n(new kg("jwt expired",new Date(m.exp*1e3)))}if(t.audience){let p=Array.isArray(t.audience)?t.audience:[t.audience];if(!(Array.isArray(m.aud)?m.aud:[m.aud]).some(function(b){return p.some(function(v){return v instanceof RegExp?v.test(b):v===b})}))return n(new V("jwt audience invalid. expected: "+p.join(" or ")))}if(t.issuer&&(typeof t.issuer=="string"&&m.iss!==t.issuer||Array.isArray(t.issuer)&&t.issuer.indexOf(m.iss)===-1))return n(new V("jwt issuer invalid. expected: "+t.issuer));if(t.subject&&m.sub!==t.subject)return n(new V("jwt subject invalid. expected: "+t.subject));if(t.jwtid&&m.jti!==t.jwtid)return n(new V("jwt jwtid invalid. expected: "+t.jwtid));if(t.nonce&&m.nonce!==t.nonce)return n(new V("jwt nonce invalid. expected: "+t.nonce));if(t.maxAge){if(typeof m.iat!="number")return n(new V("iat required when maxAge is specified"));let p=_C(t.maxAge,m.iat);if(typeof p>"u")return n(new V('"maxAge" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60'));if(i>=p+(t.clockTolerance||0))return n(new kg("maxAge exceeded",new Date(p*1e3)))}if(t.complete===!0){let p=a.signature;return n(null,{header:l,payload:m,signature:p})}return n(null,m)})}});var Mg=w((W$,Dg)=>{var Ng=1/0,xg=9007199254740991,xC=17976931348623157e292,Og=NaN,LC="[object Arguments]",DC="[object Function]",MC="[object GeneratorFunction]",RC="[object String]",$C="[object Symbol]",PC=/^\s+|\s+$/g,qC=/^[-+]0x[0-9a-f]+$/i,BC=/^0b[01]+$/i,jC=/^0o[0-7]+$/i,UC=/^(?:0|[1-9]\d*)$/,FC=parseInt;function KC(s,e){for(var t=-1,r=s?s.length:0,n=Array(r);++t<r;)n[t]=e(s[t],t,s);return n}function HC(s,e,t,r){for(var n=s.length,i=t+(r?1:-1);r?i--:++i<n;)if(e(s[i],i,s))return i;return-1}function GC(s,e,t){if(e!==e)return HC(s,VC,t);for(var r=t-1,n=s.length;++r<n;)if(s[r]===e)return r;return-1}function VC(s){return s!==s}function WC(s,e){for(var t=-1,r=Array(s);++t<s;)r[t]=e(t);return r}function YC(s,e){return KC(e,function(t){return s[t]})}function JC(s,e){return function(t){return s(e(t))}}var Wi=Object.prototype,nl=Wi.hasOwnProperty,Yi=Wi.toString,zC=Wi.propertyIsEnumerable,XC=JC(Object.keys,Object),QC=Math.max;function ZC(s,e){var t=Lg(s)||nN(s)?WC(s.length,String):[],r=t.length,n=!!r;for(var i in s)(e||nl.call(s,i))&&!(n&&(i=="length"||tN(i,r)))&&t.push(i);return t}function eN(s){if(!sN(s))return XC(s);var e=[];for(var t in Object(s))nl.call(s,t)&&t!="constructor"&&e.push(t);return e}function tN(s,e){return e=e??xg,!!e&&(typeof s=="number"||UC.test(s))&&s>-1&&s%1==0&&s<e}function sN(s){var e=s&&s.constructor,t=typeof e=="function"&&e.prototype||Wi;return s===t}function rN(s,e,t,r){s=il(s)?s:pN(s),t=t&&!r?uN(t):0;var n=s.length;return t<0&&(t=QC(n+t,0)),cN(s)?t<=n&&s.indexOf(e,t)>-1:!!n&&GC(s,e,t)>-1}function nN(s){return iN(s)&&nl.call(s,"callee")&&(!zC.call(s,"callee")||Yi.call(s)==LC)}var Lg=Array.isArray;function il(s){return s!=null&&aN(s.length)&&!oN(s)}function iN(s){return ol(s)&&il(s)}function oN(s){var e=rl(s)?Yi.call(s):"";return e==DC||e==MC}function aN(s){return typeof s=="number"&&s>-1&&s%1==0&&s<=xg}function rl(s){var e=typeof s;return!!s&&(e=="object"||e=="function")}function ol(s){return!!s&&typeof s=="object"}function cN(s){return typeof s=="string"||!Lg(s)&&ol(s)&&Yi.call(s)==RC}function lN(s){return typeof s=="symbol"||ol(s)&&Yi.call(s)==$C}function dN(s){if(!s)return s===0?s:0;if(s=fN(s),s===Ng||s===-Ng){var e=s<0?-1:1;return e*xC}return s===s?s:0}function uN(s){var e=dN(s),t=e%1;return e===e?t?e-t:e:0}function fN(s){if(typeof s=="number")return s;if(lN(s))return Og;if(rl(s)){var e=typeof s.valueOf=="function"?s.valueOf():s;s=rl(e)?e+"":e}if(typeof s!="string")return s===0?s:+s;s=s.replace(PC,"");var t=BC.test(s);return t||jC.test(s)?FC(s.slice(2),t?2:8):qC.test(s)?Og:+s}function hN(s){return il(s)?ZC(s):eN(s)}function pN(s){return s?YC(s,hN(s)):[]}Dg.exports=rN});var $g=w((Y$,Rg)=>{var mN="[object Boolean]",gN=Object.prototype,yN=gN.toString;function wN(s){return s===!0||s===!1||SN(s)&&yN.call(s)==mN}function SN(s){return!!s&&typeof s=="object"}Rg.exports=wN});var Ug=w((J$,jg)=>{var Pg=1/0,bN=17976931348623157e292,qg=NaN,vN="[object Symbol]",_N=/^\s+|\s+$/g,TN=/^[-+]0x[0-9a-f]+$/i,EN=/^0b[01]+$/i,IN=/^0o[0-7]+$/i,kN=parseInt,AN=Object.prototype,CN=AN.toString;function NN(s){return typeof s=="number"&&s==DN(s)}function Bg(s){var e=typeof s;return!!s&&(e=="object"||e=="function")}function ON(s){return!!s&&typeof s=="object"}function xN(s){return typeof s=="symbol"||ON(s)&&CN.call(s)==vN}function LN(s){if(!s)return s===0?s:0;if(s=MN(s),s===Pg||s===-Pg){var e=s<0?-1:1;return e*bN}return s===s?s:0}function DN(s){var e=LN(s),t=e%1;return e===e?t?e-t:e:0}function MN(s){if(typeof s=="number")return s;if(xN(s))return qg;if(Bg(s)){var e=typeof s.valueOf=="function"?s.valueOf():s;s=Bg(e)?e+"":e}if(typeof s!="string")return s===0?s:+s;s=s.replace(_N,"");var t=EN.test(s);return t||IN.test(s)?kN(s.slice(2),t?2:8):TN.test(s)?qg:+s}jg.exports=NN});var Kg=w((z$,Fg)=>{var RN="[object Number]",$N=Object.prototype,PN=$N.toString;function qN(s){return!!s&&typeof s=="object"}function BN(s){return typeof s=="number"||qN(s)&&PN.call(s)==RN}Fg.exports=BN});var Wg=w((X$,Vg)=>{var jN="[object Object]";function UN(s){var e=!1;if(s!=null&&typeof s.toString!="function")try{e=!!(s+"")}catch{}return e}function FN(s,e){return function(t){return s(e(t))}}var KN=Function.prototype,Hg=Object.prototype,Gg=KN.toString,HN=Hg.hasOwnProperty,GN=Gg.call(Object),VN=Hg.toString,WN=FN(Object.getPrototypeOf,Object);function YN(s){return!!s&&typeof s=="object"}function JN(s){if(!YN(s)||VN.call(s)!=jN||UN(s))return!1;var e=WN(s);if(e===null)return!0;var t=HN.call(e,"constructor")&&e.constructor;return typeof t=="function"&&t instanceof t&&Gg.call(t)==GN}Vg.exports=JN});var Jg=w((Q$,Yg)=>{var zN="[object String]",XN=Object.prototype,QN=XN.toString,ZN=Array.isArray;function eO(s){return!!s&&typeof s=="object"}function tO(s){return typeof s=="string"||!ZN(s)&&eO(s)&&QN.call(s)==zN}Yg.exports=tO});var ey=w((Z$,Zg)=>{var sO="Expected a function",zg=1/0,rO=17976931348623157e292,Xg=NaN,nO="[object Symbol]",iO=/^\s+|\s+$/g,oO=/^[-+]0x[0-9a-f]+$/i,aO=/^0b[01]+$/i,cO=/^0o[0-7]+$/i,lO=parseInt,dO=Object.prototype,uO=dO.toString;function fO(s,e){var t;if(typeof e!="function")throw new TypeError(sO);return s=yO(s),function(){return--s>0&&(t=e.apply(this,arguments)),s<=1&&(e=void 0),t}}function hO(s){return fO(2,s)}function Qg(s){var e=typeof s;return!!s&&(e=="object"||e=="function")}function pO(s){return!!s&&typeof s=="object"}function mO(s){return typeof s=="symbol"||pO(s)&&uO.call(s)==nO}function gO(s){if(!s)return s===0?s:0;if(s=wO(s),s===zg||s===-zg){var e=s<0?-1:1;return e*rO}return s===s?s:0}function yO(s){var e=gO(s),t=e%1;return e===e?t?e-t:e:0}function wO(s){if(typeof s=="number")return s;if(mO(s))return Xg;if(Qg(s)){var e=typeof s.valueOf=="function"?s.valueOf():s;s=Qg(e)?e+"":e}if(typeof s!="string")return s===0?s:+s;s=s.replace(iO,"");var t=aO.test(s);return t||cO.test(s)?lO(s.slice(2),t?2:8):oO.test(s)?Xg:+s}Zg.exports=hO});var ly=w((eP,cy)=>{var ty=Dc(),SO=el(),bO=Zc(),sy=Ni(),vO=Mg(),Ji=$g(),ry=Ug(),al=Kg(),iy=Wg(),bt=Jg(),_O=ey(),{KeyObject:TO,createSecretKey:EO,createPrivateKey:IO}=$("crypto"),oy=["RS256","RS384","RS512","ES256","ES384","ES512","HS256","HS384","HS512","none"];SO&&oy.splice(3,0,"PS256","PS384","PS512");var kO={expiresIn:{isValid:function(s){return ry(s)||bt(s)&&s},message:'"expiresIn" should be a number of seconds or string representing a timespan'},notBefore:{isValid:function(s){return ry(s)||bt(s)&&s},message:'"notBefore" should be a number of seconds or string representing a timespan'},audience:{isValid:function(s){return bt(s)||Array.isArray(s)},message:'"audience" must be a string or array'},algorithm:{isValid:vO.bind(null,oy),message:'"algorithm" must be a valid string enum value'},header:{isValid:iy,message:'"header" must be an object'},encoding:{isValid:bt,message:'"encoding" must be a string'},issuer:{isValid:bt,message:'"issuer" must be a string'},subject:{isValid:bt,message:'"subject" must be a string'},jwtid:{isValid:bt,message:'"jwtid" must be a string'},noTimestamp:{isValid:Ji,message:'"noTimestamp" must be a boolean'},keyid:{isValid:bt,message:'"keyid" must be a string'},mutatePayload:{isValid:Ji,message:'"mutatePayload" must be a boolean'},allowInsecureKeySizes:{isValid:Ji,message:'"allowInsecureKeySizes" must be a boolean'},allowInvalidAsymmetricKeyTypes:{isValid:Ji,message:'"allowInvalidAsymmetricKeyTypes" must be a boolean'}},AO={iat:{isValid:al,message:'"iat" should be a number of seconds'},exp:{isValid:al,message:'"exp" should be a number of seconds'},nbf:{isValid:al,message:'"nbf" should be a number of seconds'}};function ay(s,e,t,r){if(!iy(t))throw new Error('Expected "'+r+'" to be a plain object.');Object.keys(t).forEach(function(n){let i=s[n];if(!i){if(!e)throw new Error('"'+n+'" is not allowed in "'+r+'"');return}if(!i.isValid(t[n]))throw new Error(i.message)})}function CO(s){return ay(kO,!1,s,"options")}function NO(s){return ay(AO,!0,s,"payload")}var ny={audience:"aud",issuer:"iss",subject:"sub",jwtid:"jti"},OO=["expiresIn","notBefore","noTimestamp","audience","issuer","subject","jwtid"];cy.exports=function(s,e,t,r){typeof t=="function"?(r=t,t={}):t=t||{};let n=typeof s=="object"&&!Buffer.isBuffer(s),i=Object.assign({alg:t.algorithm||"HS256",typ:n?"JWT":void 0,kid:t.keyid},t.header);function o(c){if(r)return r(c);throw c}if(!e&&t.algorithm!=="none")return o(new Error("secretOrPrivateKey must have a value"));if(e!=null&&!(e instanceof TO))try{e=IO(e)}catch{try{e=EO(typeof e=="string"?Buffer.from(e):e)}catch{return o(new Error("secretOrPrivateKey is not valid key material"))}}if(i.alg.startsWith("HS")&&e.type!=="secret")return o(new Error(`secretOrPrivateKey must be a symmetric key when using ${i.alg}`));if(/^(?:RS|PS|ES)/.test(i.alg)){if(e.type!=="private")return o(new Error(`secretOrPrivateKey must be an asymmetric key when using ${i.alg}`));if(!t.allowInsecureKeySizes&&!i.alg.startsWith("ES")&&e.asymmetricKeyDetails!==void 0&&e.asymmetricKeyDetails.modulusLength<2048)return o(new Error(`secretOrPrivateKey has a minimum key size of 2048 bits for ${i.alg}`))}if(typeof s>"u")return o(new Error("payload is required"));if(n){try{NO(s)}catch(c){return o(c)}t.mutatePayload||(s=Object.assign({},s))}else{let c=OO.filter(function(d){return typeof t[d]<"u"});if(c.length>0)return o(new Error("invalid "+c.join(",")+" option for "+typeof s+" payload"))}if(typeof s.exp<"u"&&typeof t.expiresIn<"u")return o(new Error('Bad "options.expiresIn" option the payload already has an "exp" property.'));if(typeof s.nbf<"u"&&typeof t.notBefore<"u")return o(new Error('Bad "options.notBefore" option the payload already has an "nbf" property.'));try{CO(t)}catch(c){return o(c)}if(!t.allowInvalidAsymmetricKeyTypes)try{bO(i.alg,e)}catch(c){return o(c)}let a=s.iat||Math.floor(Date.now()/1e3);if(t.noTimestamp?delete s.iat:n&&(s.iat=a),typeof t.notBefore<"u"){try{s.nbf=ty(t.notBefore,a)}catch(c){return o(c)}if(typeof s.nbf>"u")return o(new Error('"notBefore" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60'))}if(typeof t.expiresIn<"u"&&typeof s=="object"){try{s.exp=ty(t.expiresIn,a)}catch(c){return o(c)}if(typeof s.exp>"u")return o(new Error('"expiresIn" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60'))}Object.keys(ny).forEach(function(c){let d=ny[c];if(typeof t[c]<"u"){if(typeof s[d]<"u")return o(new Error('Bad "options.'+c+'" option. The payload already has an "'+d+'" property.'));s[d]=t[c]}});let l=t.encoding||"utf8";if(typeof r=="function")r=r&&_O(r),sy.createSign({header:i,privateKey:e,payload:s,encoding:l}).once("error",r).once("done",function(c){if(!t.allowInsecureKeySizes&&/^(?:RS|PS)/.test(i.alg)&&c.length<256)return r(new Error(`secretOrPrivateKey has a minimum key size of 2048 bits for ${i.alg}`));r(null,c)});else{let c=sy.sign({header:i,payload:s,secret:e,encoding:l});if(!t.allowInsecureKeySizes&&/^(?:RS|PS)/.test(i.alg)&&c.length<256)throw new Error(`secretOrPrivateKey has a minimum key size of 2048 bits for ${i.alg}`);return c}}});var uy=w((tP,dy)=>{dy.exports={decode:Oc(),verify:Cg(),sign:ly(),JsonWebTokenError:mr(),NotBeforeError:xc(),TokenExpiredError:Lc()}});var py={};We(py,{DeviceRegistry:()=>ll});import{MongoClient as xO}from"mongodb";import{randomUUID as LO,randomInt as fy}from"node:crypto";var cl,Ke,hy,ll,my=z(()=>{"use strict";P();cl=Ye(uy(),1),Ke=T("device-registry"),hy=600*1e3,ll=class{client;dbName;db;collection;jwtSecret;constructor(e,t,r){this.client=new xO(e),this.dbName=t,this.jwtSecret=r}async connect(){await this.client.connect(),this.db=this.client.db(this.dbName),this.collection=this.db.collection("devices"),await this.collection.createIndex({pairingCode:1},{sparse:!0}),Ke.info("Device registry connected",{db:this.dbName})}async createDevice(e,t){let r=new Date,n={_id:LO(),name:e,pairingCode:fy(1e5,999999).toString(),pairingCodeExpiresAt:new Date(r.getTime()+hy),defaultAgentId:t,createdAt:r,lastSeenAt:r,active:!0};return await this.collection.insertOne(n),Ke.info("Device created",{id:n._id,name:e}),n}async verifyPairingCode(e,t){let r=await this.collection.findOne({pairingCode:e,pairingCodeExpiresAt:{$gt:new Date}});if(!r)return Ke.warn("Pairing code invalid or expired"),null;let n=new Date,i={pairedAt:n};t&&(i.name=t),await this.collection.updateOne({_id:r._id},{$set:i,$unset:{pairingCode:"",pairingCodeExpiresAt:""}});let o=t??r.name,a=cl.default.sign({deviceId:r._id},this.jwtSecret,{expiresIn:"90d"});return Ke.info("Device paired",{id:r._id,name:o}),{device:{...r,name:o,pairedAt:n,pairingCode:void 0,pairingCodeExpiresAt:void 0},token:a}}async verifyToken(e){try{let t=cl.default.verify(e,this.jwtSecret),r=await this.collection.findOne({_id:t.deviceId,active:!0});return r||(Ke.warn("Token valid but device not found or inactive",{deviceId:t.deviceId}),null)}catch(t){return Ke.warn("Token verification failed",{error:t.message}),null}}async refreshPairingCode(e){let t=fy(1e5,999999).toString(),r=new Date(Date.now()+hy);return await this.collection.updateOne({_id:e},{$set:{pairingCode:t,pairingCodeExpiresAt:r}}),Ke.info("Pairing code refreshed",{deviceId:e}),t}async updateLastSeen(e){await this.collection.updateOne({_id:e},{$set:{lastSeenAt:new Date}})}async getDevice(e){return this.collection.findOne({_id:e})}async updateDevice(e,t){let r=await this.collection.findOneAndUpdate({_id:e},{$set:t},{returnDocument:"after"});return r&&Ke.info("Device updated",{deviceId:e,...t}),r}async deactivateDevice(e){return(await this.collection.updateOne({_id:e},{$set:{active:!1}})).modifiedCount>0?(Ke.info("Device deactivated",{deviceId:e}),!0):!1}async listDevices(){return this.collection.find().toArray()}async close(){await this.client.close(),Ke.info("Device registry closed")}}});var st=w((iP,wy)=>{"use strict";var gy=["nodebuffer","arraybuffer","fragments"],yy=typeof Blob<"u";yy&&gy.push("blob");wy.exports={BINARY_TYPES:gy,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:yy,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var Tr=w((oP,zi)=>{"use strict";var{EMPTY_BUFFER:DO}=st(),dl=Buffer[Symbol.species];function MO(s,e){if(s.length===0)return DO;if(s.length===1)return s[0];let t=Buffer.allocUnsafe(e),r=0;for(let n=0;n<s.length;n++){let i=s[n];t.set(i,r),r+=i.length}return r<e?new dl(t.buffer,t.byteOffset,r):t}function Sy(s,e,t,r,n){for(let i=0;i<n;i++)t[r+i]=s[i]^e[i&3]}function by(s,e){for(let t=0;t<s.length;t++)s[t]^=e[t&3]}function RO(s){return s.length===s.buffer.byteLength?s.buffer:s.buffer.slice(s.byteOffset,s.byteOffset+s.length)}function ul(s){if(ul.readOnly=!0,Buffer.isBuffer(s))return s;let e;return s instanceof ArrayBuffer?e=new dl(s):ArrayBuffer.isView(s)?e=new dl(s.buffer,s.byteOffset,s.byteLength):(e=Buffer.from(s),ul.readOnly=!1),e}zi.exports={concat:MO,mask:Sy,toArrayBuffer:RO,toBuffer:ul,unmask:by};if(!process.env.WS_NO_BUFFER_UTIL)try{let s=$("bufferutil");zi.exports.mask=function(e,t,r,n,i){i<48?Sy(e,t,r,n,i):s.mask(e,t,r,n,i)},zi.exports.unmask=function(e,t){e.length<32?by(e,t):s.unmask(e,t)}}catch{}});var Ty=w((aP,_y)=>{"use strict";var vy=Symbol("kDone"),fl=Symbol("kRun"),hl=class{constructor(e){this[vy]=()=>{this.pending--,this[fl]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[fl]()}[fl](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[vy])}}};_y.exports=hl});var Ir=w((cP,Ay)=>{"use strict";var Er=$("zlib"),Ey=Tr(),$O=Ty(),{kStatusCode:Iy}=st(),PO=Buffer[Symbol.species],qO=Buffer.from([0,0,255,255]),Qi=Symbol("permessage-deflate"),rt=Symbol("total-length"),gs=Symbol("callback"),vt=Symbol("buffers"),ys=Symbol("error"),Xi,pl=class{constructor(e,t,r){if(this._maxPayload=r|0,this._options=e||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._isServer=!!t,this._deflate=null,this._inflate=null,this.params=null,!Xi){let n=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;Xi=new $O(n)}}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[gs];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,r=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(!r)throw new Error("None of the extension offers can be accepted");return t.serverNoContextTakeover&&(r.server_no_context_takeover=!0),t.clientNoContextTakeover&&(r.client_no_context_takeover=!0),typeof t.serverMaxWindowBits=="number"&&(r.server_max_window_bits=t.serverMaxWindowBits),typeof t.clientMaxWindowBits=="number"?r.client_max_window_bits=t.clientMaxWindowBits:(r.client_max_window_bits===!0||t.clientMaxWindowBits===!1)&&delete r.client_max_window_bits,r}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(r=>{let n=t[r];if(n.length>1)throw new Error(`Parameter "${r}" must have only a single value`);if(n=n[0],r==="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 "${r}": ${n}`);n=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${r}": ${n}`)}else if(r==="server_max_window_bits"){let i=+n;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${r}": ${n}`);n=i}else if(r==="client_no_context_takeover"||r==="server_no_context_takeover"){if(n!==!0)throw new TypeError(`Invalid value for parameter "${r}": ${n}`)}else throw new Error(`Unknown parameter "${r}"`);t[r]=n})}),e}decompress(e,t,r){Xi.add(n=>{this._decompress(e,t,(i,o)=>{n(),r(i,o)})})}compress(e,t,r){Xi.add(n=>{this._compress(e,t,(i,o)=>{n(),r(i,o)})})}_decompress(e,t,r){let n=this._isServer?"client":"server";if(!this._inflate){let i=`${n}_max_window_bits`,o=typeof this.params[i]!="number"?Er.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=Er.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[Qi]=this,this._inflate[rt]=0,this._inflate[vt]=[],this._inflate.on("error",jO),this._inflate.on("data",ky)}this._inflate[gs]=r,this._inflate.write(e),t&&this._inflate.write(qO),this._inflate.flush(()=>{let i=this._inflate[ys];if(i){this._inflate.close(),this._inflate=null,r(i);return}let o=Ey.concat(this._inflate[vt],this._inflate[rt]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[rt]=0,this._inflate[vt]=[],t&&this.params[`${n}_no_context_takeover`]&&this._inflate.reset()),r(null,o)})}_compress(e,t,r){let n=this._isServer?"server":"client";if(!this._deflate){let i=`${n}_max_window_bits`,o=typeof this.params[i]!="number"?Er.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=Er.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[rt]=0,this._deflate[vt]=[],this._deflate.on("data",BO)}this._deflate[gs]=r,this._deflate.write(e),this._deflate.flush(Er.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=Ey.concat(this._deflate[vt],this._deflate[rt]);t&&(i=new PO(i.buffer,i.byteOffset,i.length-4)),this._deflate[gs]=null,this._deflate[rt]=0,this._deflate[vt]=[],t&&this.params[`${n}_no_context_takeover`]&&this._deflate.reset(),r(null,i)})}};Ay.exports=pl;function BO(s){this[vt].push(s),this[rt]+=s.length}function ky(s){if(this[rt]+=s.length,this[Qi]._maxPayload<1||this[rt]<=this[Qi]._maxPayload){this[vt].push(s);return}this[ys]=new RangeError("Max payload size exceeded"),this[ys].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[ys][Iy]=1009,this.removeListener("data",ky),this.reset()}function jO(s){if(this[Qi]._inflate=null,this[ys]){this[gs](this[ys]);return}s[Iy]=1007,this[gs](s)}});var ws=w((lP,Zi)=>{"use strict";var{isUtf8:Cy}=$("buffer"),{hasBlob:UO}=st(),FO=[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 KO(s){return s>=1e3&&s<=1014&&s!==1004&&s!==1005&&s!==1006||s>=3e3&&s<=4999}function ml(s){let e=s.length,t=0;for(;t<e;)if((s[t]&128)===0)t++;else if((s[t]&224)===192){if(t+1===e||(s[t+1]&192)!==128||(s[t]&254)===192)return!1;t+=2}else if((s[t]&240)===224){if(t+2>=e||(s[t+1]&192)!==128||(s[t+2]&192)!==128||s[t]===224&&(s[t+1]&224)===128||s[t]===237&&(s[t+1]&224)===160)return!1;t+=3}else if((s[t]&248)===240){if(t+3>=e||(s[t+1]&192)!==128||(s[t+2]&192)!==128||(s[t+3]&192)!==128||s[t]===240&&(s[t+1]&240)===128||s[t]===244&&s[t+1]>143||s[t]>244)return!1;t+=4}else return!1;return!0}function HO(s){return UO&&typeof s=="object"&&typeof s.arrayBuffer=="function"&&typeof s.type=="string"&&typeof s.stream=="function"&&(s[Symbol.toStringTag]==="Blob"||s[Symbol.toStringTag]==="File")}Zi.exports={isBlob:HO,isValidStatusCode:KO,isValidUTF8:ml,tokenChars:FO};if(Cy)Zi.exports.isValidUTF8=function(s){return s.length<24?ml(s):Cy(s)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let s=$("utf-8-validate");Zi.exports.isValidUTF8=function(e){return e.length<32?ml(e):s(e)}}catch{}});var bl=w((dP,Ry)=>{"use strict";var{Writable:GO}=$("stream"),Ny=Ir(),{BINARY_TYPES:VO,EMPTY_BUFFER:Oy,kStatusCode:WO,kWebSocket:YO}=st(),{concat:gl,toArrayBuffer:JO,unmask:zO}=Tr(),{isValidStatusCode:XO,isValidUTF8:xy}=ws(),eo=Buffer[Symbol.species],Ne=0,Ly=1,Dy=2,My=3,yl=4,wl=5,to=6,Sl=class extends GO{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||VO[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[YO]=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=Ne}_write(e,t,r){if(this._opcode===8&&this._state==Ne)return r();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(r)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let r=this._buffers[0];return this._buffers[0]=new eo(r.buffer,r.byteOffset+e,r.length-e),new eo(r.buffer,r.byteOffset,e)}let t=Buffer.allocUnsafe(e);do{let r=this._buffers[0],n=t.length-e;e>=r.length?t.set(this._buffers.shift(),n):(t.set(new Uint8Array(r.buffer,r.byteOffset,e),n),this._buffers[0]=new eo(r.buffer,r.byteOffset+e,r.length-e)),e-=r.length}while(e>0);return t}startLoop(e){this._loop=!0;do switch(this._state){case Ne:this.getInfo(e);break;case Ly:this.getPayloadLength16(e);break;case Dy:this.getPayloadLength64(e);break;case My:this.getMask();break;case yl:this.getData(e);break;case wl:case to: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 r=(t[0]&64)===64;if(r&&!this._extensions[Ny.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(r){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=r}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(r){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=Ly:this._payloadLength===127?this._state=Dy: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),r=t.readUInt32BE(0);if(r>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=r*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=My:this._state=yl}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=yl}getData(e){let t=Oy;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&&zO(t,this._mask)}if(this._opcode>7){this.controlMessage(t,e);return}if(this._compressed){this._state=wl,this.decompress(t,e);return}t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage(e)}decompress(e,t){this._extensions[Ny.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===Ne&&this.startLoop(t)})}dataMessage(e){if(!this._fin){this._state=Ne;return}let t=this._messageLength,r=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let n;this._binaryType==="nodebuffer"?n=gl(r,t):this._binaryType==="arraybuffer"?n=JO(gl(r,t)):this._binaryType==="blob"?n=new Blob(r):n=r,this._allowSynchronousEvents?(this.emit("message",n,!0),this._state=Ne):(this._state=to,setImmediate(()=>{this.emit("message",n,!0),this._state=Ne,this.startLoop(e)}))}else{let n=gl(r,t);if(!this._skipUTF8Validation&&!xy(n)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===wl||this._allowSynchronousEvents?(this.emit("message",n,!1),this._state=Ne):(this._state=to,setImmediate(()=>{this.emit("message",n,!1),this._state=Ne,this.startLoop(e)}))}}controlMessage(e,t){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,Oy),this.end();else{let r=e.readUInt16BE(0);if(!XO(r)){let i=this.createError(RangeError,`invalid status code ${r}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");t(i);return}let n=new eo(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!xy(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",r,n),this.end()}this._state=Ne;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=Ne):(this._state=to,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=Ne,this.startLoop(t)}))}createError(e,t,r,n,i){this._loop=!1,this._errored=!0;let o=new e(r?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(o,this.createError),o.code=i,o[WO]=n,o}};Ry.exports=Sl});var Tl=w((fP,qy)=>{"use strict";var{Duplex:uP}=$("stream"),{randomFillSync:QO}=$("crypto"),$y=Ir(),{EMPTY_BUFFER:ZO,kWebSocket:ex,NOOP:tx}=st(),{isBlob:Ss,isValidStatusCode:sx}=ws(),{mask:Py,toBuffer:Rt}=Tr(),Oe=Symbol("kByteLength"),rx=Buffer.alloc(4),so=8*1024,$t,bs=so,Me=0,nx=1,ix=2,vl=class s{constructor(e,t,r){this._extensions=t||{},r&&(this._generateMask=r,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=Me,this.onerror=tx,this[ex]=void 0}static frame(e,t){let r,n=!1,i=2,o=!1;t.mask&&(r=t.maskBuffer||rx,t.generateMask?t.generateMask(r):(bs===so&&($t===void 0&&($t=Buffer.alloc(so)),QO($t,0,so),bs=0),r[0]=$t[bs++],r[1]=$t[bs++],r[2]=$t[bs++],r[3]=$t[bs++]),o=(r[0]|r[1]|r[2]|r[3])===0,i=6);let a;typeof e=="string"?(!t.mask||o)&&t[Oe]!==void 0?a=t[Oe]:(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]=r[0],c[i-3]=r[1],c[i-2]=r[2],c[i-1]=r[3],o?[c,e]:n?(Py(e,r,c,i,a),[c]):(Py(e,r,e,0,a),[c,e])):[c,e]}close(e,t,r,n){let i;if(e===void 0)i=ZO;else{if(typeof e!="number"||!sx(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={[Oe]:i.length,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==Me?this.enqueue([this.dispatch,i,!1,o,n]):this.sendFrame(s.frame(i,o),n)}ping(e,t,r){let n,i;if(typeof e=="string"?(n=Buffer.byteLength(e),i=!1):Ss(e)?(n=e.size,i=!1):(e=Rt(e),n=e.length,i=Rt.readOnly),n>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[Oe]:n,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};Ss(e)?this._state!==Me?this.enqueue([this.getBlobData,e,!1,o,r]):this.getBlobData(e,!1,o,r):this._state!==Me?this.enqueue([this.dispatch,e,!1,o,r]):this.sendFrame(s.frame(e,o),r)}pong(e,t,r){let n,i;if(typeof e=="string"?(n=Buffer.byteLength(e),i=!1):Ss(e)?(n=e.size,i=!1):(e=Rt(e),n=e.length,i=Rt.readOnly),n>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[Oe]:n,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};Ss(e)?this._state!==Me?this.enqueue([this.getBlobData,e,!1,o,r]):this.getBlobData(e,!1,o,r):this._state!==Me?this.enqueue([this.dispatch,e,!1,o,r]):this.sendFrame(s.frame(e,o),r)}send(e,t,r){let n=this._extensions[$y.extensionName],i=t.binary?2:1,o=t.compress,a,l;typeof e=="string"?(a=Buffer.byteLength(e),l=!1):Ss(e)?(a=e.size,l=!1):(e=Rt(e),a=e.length,l=Rt.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={[Oe]:a,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:l,rsv1:o};Ss(e)?this._state!==Me?this.enqueue([this.getBlobData,e,this._compress,c,r]):this.getBlobData(e,this._compress,c,r):this._state!==Me?this.enqueue([this.dispatch,e,this._compress,c,r]):this.dispatch(e,this._compress,c,r)}getBlobData(e,t,r,n){this._bufferedBytes+=r[Oe],this._state=ix,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let a=new Error("The socket was closed while the blob was being read");process.nextTick(_l,this,a,n);return}this._bufferedBytes-=r[Oe];let o=Rt(i);t?this.dispatch(o,t,r,n):(this._state=Me,this.sendFrame(s.frame(o,r),n),this.dequeue())}).catch(i=>{process.nextTick(ox,this,i,n)})}dispatch(e,t,r,n){if(!t){this.sendFrame(s.frame(e,r),n);return}let i=this._extensions[$y.extensionName];this._bufferedBytes+=r[Oe],this._state=nx,i.compress(e,r.fin,(o,a)=>{if(this._socket.destroyed){let l=new Error("The socket was closed while data was being compressed");_l(this,l,n);return}this._bufferedBytes-=r[Oe],this._state=Me,r.readOnly=!1,this.sendFrame(s.frame(a,r),n),this.dequeue()})}dequeue(){for(;this._state===Me&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][Oe],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][Oe],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)}};qy.exports=vl;function _l(s,e,t){typeof t=="function"&&t(e);for(let r=0;r<s._queue.length;r++){let n=s._queue[r],i=n[n.length-1];typeof i=="function"&&i(e)}}function ox(s,e,t){_l(s,e,t),s.onerror(e)}});var Wy=w((hP,Vy)=>{"use strict";var{kForOnEventAttribute:kr,kListener:El}=st(),By=Symbol("kCode"),jy=Symbol("kData"),Uy=Symbol("kError"),Fy=Symbol("kMessage"),Ky=Symbol("kReason"),vs=Symbol("kTarget"),Hy=Symbol("kType"),Gy=Symbol("kWasClean"),nt=class{constructor(e){this[vs]=null,this[Hy]=e}get target(){return this[vs]}get type(){return this[Hy]}};Object.defineProperty(nt.prototype,"target",{enumerable:!0});Object.defineProperty(nt.prototype,"type",{enumerable:!0});var Pt=class extends nt{constructor(e,t={}){super(e),this[By]=t.code===void 0?0:t.code,this[Ky]=t.reason===void 0?"":t.reason,this[Gy]=t.wasClean===void 0?!1:t.wasClean}get code(){return this[By]}get reason(){return this[Ky]}get wasClean(){return this[Gy]}};Object.defineProperty(Pt.prototype,"code",{enumerable:!0});Object.defineProperty(Pt.prototype,"reason",{enumerable:!0});Object.defineProperty(Pt.prototype,"wasClean",{enumerable:!0});var _s=class extends nt{constructor(e,t={}){super(e),this[Uy]=t.error===void 0?null:t.error,this[Fy]=t.message===void 0?"":t.message}get error(){return this[Uy]}get message(){return this[Fy]}};Object.defineProperty(_s.prototype,"error",{enumerable:!0});Object.defineProperty(_s.prototype,"message",{enumerable:!0});var Ar=class extends nt{constructor(e,t={}){super(e),this[jy]=t.data===void 0?null:t.data}get data(){return this[jy]}};Object.defineProperty(Ar.prototype,"data",{enumerable:!0});var ax={addEventListener(s,e,t={}){for(let n of this.listeners(s))if(!t[kr]&&n[El]===e&&!n[kr])return;let r;if(s==="message")r=function(i,o){let a=new Ar("message",{data:o?i:i.toString()});a[vs]=this,ro(e,this,a)};else if(s==="close")r=function(i,o){let a=new Pt("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});a[vs]=this,ro(e,this,a)};else if(s==="error")r=function(i){let o=new _s("error",{error:i,message:i.message});o[vs]=this,ro(e,this,o)};else if(s==="open")r=function(){let i=new nt("open");i[vs]=this,ro(e,this,i)};else return;r[kr]=!!t[kr],r[El]=e,t.once?this.once(s,r):this.on(s,r)},removeEventListener(s,e){for(let t of this.listeners(s))if(t[El]===e&&!t[kr]){this.removeListener(s,t);break}}};Vy.exports={CloseEvent:Pt,ErrorEvent:_s,Event:nt,EventTarget:ax,MessageEvent:Ar};function ro(s,e,t){typeof s=="object"&&s.handleEvent?s.handleEvent.call(s,t):s.call(e,t)}});var Il=w((pP,Yy)=>{"use strict";var{tokenChars:Cr}=ws();function He(s,e,t){s[e]===void 0?s[e]=[t]:s[e].push(t)}function cx(s){let e=Object.create(null),t=Object.create(null),r=!1,n=!1,i=!1,o,a,l=-1,c=-1,d=-1,u=0;for(;u<s.length;u++)if(c=s.charCodeAt(u),o===void 0)if(d===-1&&Cr[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 h=s.slice(l,d);c===44?(He(e,h,t),t=Object.create(null)):o=h,l=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);else if(a===void 0)if(d===-1&&Cr[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),He(t,s.slice(l,d),!0),c===44&&(He(e,o,t),t=Object.create(null),o=void 0),l=d=-1}else if(c===61&&l!==-1&&d===-1)a=s.slice(l,u),l=d=-1;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(n){if(Cr[c]!==1)throw new SyntaxError(`Unexpected character at index ${u}`);l===-1?l=u:r||(r=!0),n=!1}else if(i)if(Cr[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&&s.charCodeAt(u-1)===61)i=!0;else if(d===-1&&Cr[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 h=s.slice(l,d);r&&(h=h.replace(/\\/g,""),r=!1),He(t,a,h),c===44&&(He(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 f=s.slice(l,d);return o===void 0?He(e,f,t):(a===void 0?He(t,f,!0):r?He(t,a,f.replace(/\\/g,"")):He(t,a,f),He(e,o,t)),e}function lx(s){return Object.keys(s).map(e=>{let t=s[e];return Array.isArray(t)||(t=[t]),t.map(r=>[e].concat(Object.keys(r).map(n=>{let i=r[n];return Array.isArray(i)||(i=[i]),i.map(o=>o===!0?n:`${n}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}Yy.exports={format:lx,parse:cx}});var ao=w((yP,ow)=>{"use strict";var dx=$("events"),ux=$("https"),fx=$("http"),Xy=$("net"),hx=$("tls"),{randomBytes:px,createHash:mx}=$("crypto"),{Duplex:mP,Readable:gP}=$("stream"),{URL:kl}=$("url"),_t=Ir(),gx=bl(),yx=Tl(),{isBlob:wx}=ws(),{BINARY_TYPES:Jy,CLOSE_TIMEOUT:Sx,EMPTY_BUFFER:no,GUID:bx,kForOnEventAttribute:Al,kListener:vx,kStatusCode:_x,kWebSocket:le,NOOP:Qy}=st(),{EventTarget:{addEventListener:Tx,removeEventListener:Ex}}=Wy(),{format:Ix,parse:kx}=Il(),{toBuffer:Ax}=Tr(),Zy=Symbol("kAborted"),Cl=[8,13],it=["CONNECTING","OPEN","CLOSING","CLOSED"],Cx=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,X=class s extends dx{constructor(e,t,r){super(),this._binaryType=Jy[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=no,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=s.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?(r=t,t=[]):t=[t]),ew(this,e,t,r)):(this._autoPong=r.autoPong,this._closeTimeout=r.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){Jy.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,r){let n=new gx({allowSynchronousEvents:r.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:r.maxPayload,skipUTF8Validation:r.skipUTF8Validation}),i=new yx(e,this._extensions,r.generateMask);this._receiver=n,this._sender=i,this._socket=e,n[le]=this,i[le]=this,e[le]=this,n.on("conclude",xx),n.on("drain",Lx),n.on("error",Dx),n.on("message",Mx),n.on("ping",Rx),n.on("pong",$x),i.onerror=Px,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",rw),e.on("data",oo),e.on("end",nw),e.on("error",iw),this._readyState=s.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=s.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[_t.extensionName]&&this._extensions[_t.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=s.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==s.CLOSED){if(this.readyState===s.CONNECTING){ve(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===s.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=s.CLOSING,this._sender.close(e,t,!this._isServer,r=>{r||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),sw(this)}}pause(){this.readyState===s.CONNECTING||this.readyState===s.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,t,r){if(this.readyState===s.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(r=e,e=t=void 0):typeof t=="function"&&(r=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==s.OPEN){Nl(this,e,r);return}t===void 0&&(t=!this._isServer),this._sender.ping(e||no,t,r)}pong(e,t,r){if(this.readyState===s.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(r=e,e=t=void 0):typeof t=="function"&&(r=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==s.OPEN){Nl(this,e,r);return}t===void 0&&(t=!this._isServer),this._sender.pong(e||no,t,r)}resume(){this.readyState===s.CONNECTING||this.readyState===s.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,t,r){if(this.readyState===s.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof t=="function"&&(r=t,t={}),typeof e=="number"&&(e=e.toString()),this.readyState!==s.OPEN){Nl(this,e,r);return}let n={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[_t.extensionName]||(n.compress=!1),this._sender.send(e||no,n,r)}terminate(){if(this.readyState!==s.CLOSED){if(this.readyState===s.CONNECTING){ve(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=s.CLOSING,this._socket.destroy())}}};Object.defineProperty(X,"CONNECTING",{enumerable:!0,value:it.indexOf("CONNECTING")});Object.defineProperty(X.prototype,"CONNECTING",{enumerable:!0,value:it.indexOf("CONNECTING")});Object.defineProperty(X,"OPEN",{enumerable:!0,value:it.indexOf("OPEN")});Object.defineProperty(X.prototype,"OPEN",{enumerable:!0,value:it.indexOf("OPEN")});Object.defineProperty(X,"CLOSING",{enumerable:!0,value:it.indexOf("CLOSING")});Object.defineProperty(X.prototype,"CLOSING",{enumerable:!0,value:it.indexOf("CLOSING")});Object.defineProperty(X,"CLOSED",{enumerable:!0,value:it.indexOf("CLOSED")});Object.defineProperty(X.prototype,"CLOSED",{enumerable:!0,value:it.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(s=>{Object.defineProperty(X.prototype,s,{enumerable:!0})});["open","error","close","message"].forEach(s=>{Object.defineProperty(X.prototype,`on${s}`,{enumerable:!0,get(){for(let e of this.listeners(s))if(e[Al])return e[vx];return null},set(e){for(let t of this.listeners(s))if(t[Al]){this.removeListener(s,t);break}typeof e=="function"&&this.addEventListener(s,e,{[Al]:!0})}})});X.prototype.addEventListener=Tx;X.prototype.removeEventListener=Ex;ow.exports=X;function ew(s,e,t,r){let n={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:Sx,protocolVersion:Cl[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...r,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(s._autoPong=n.autoPong,s._closeTimeout=n.closeTimeout,!Cl.includes(n.protocolVersion))throw new RangeError(`Unsupported protocol version: ${n.protocolVersion} (supported versions: ${Cl.join(", ")})`);let i;if(e instanceof kl)i=e;else try{i=new kl(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),s._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 p=new SyntaxError(l);if(s._redirects===0)throw p;io(s,p);return}let c=o?443:80,d=px(16).toString("base64"),u=o?ux.request:fx.request,f=new Set,h;if(n.createConnection=n.createConnection||(o?Ox:Nx),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&&(h=new _t(n.perMessageDeflate!==!0?n.perMessageDeflate:{},!1,n.maxPayload),n.headers["Sec-WebSocket-Extensions"]=Ix({[_t.extensionName]:h.offer()})),t.length){for(let p of t){if(typeof p!="string"||!Cx.test(p)||f.has(p))throw new SyntaxError("An invalid or duplicated subprotocol was specified");f.add(p)}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 p=n.path.split(":");n.socketPath=p[0],n.path=p[1]}let m;if(n.followRedirects){if(s._redirects===0){s._originalIpc=a,s._originalSecure=o,s._originalHostOrSocketPath=a?n.socketPath:i.host;let p=r&&r.headers;if(r={...r,headers:{}},p)for(let[y,S]of Object.entries(p))r.headers[y.toLowerCase()]=S}else if(s.listenerCount("redirect")===0){let p=a?s._originalIpc?n.socketPath===s._originalHostOrSocketPath:!1:s._originalIpc?!1:i.host===s._originalHostOrSocketPath;(!p||s._originalSecure&&!o)&&(delete n.headers.authorization,delete n.headers.cookie,p||delete n.headers.host,n.auth=void 0)}n.auth&&!r.headers.authorization&&(r.headers.authorization="Basic "+Buffer.from(n.auth).toString("base64")),m=s._req=u(n),s._redirects&&s.emit("redirect",s.url,m)}else m=s._req=u(n);n.timeout&&m.on("timeout",()=>{ve(s,m,"Opening handshake has timed out")}),m.on("error",p=>{m===null||m[Zy]||(m=s._req=null,io(s,p))}),m.on("response",p=>{let y=p.headers.location,S=p.statusCode;if(y&&n.followRedirects&&S>=300&&S<400){if(++s._redirects>n.maxRedirects){ve(s,m,"Maximum redirects exceeded");return}m.abort();let b;try{b=new kl(y,e)}catch{let A=new SyntaxError(`Invalid URL: ${y}`);io(s,A);return}ew(s,b,t,r)}else s.emit("unexpected-response",m,p)||ve(s,m,`Unexpected server response: ${p.statusCode}`)}),m.on("upgrade",(p,y,S)=>{if(s.emit("upgrade",p),s.readyState!==X.CONNECTING)return;m=s._req=null;let b=p.headers.upgrade;if(b===void 0||b.toLowerCase()!=="websocket"){ve(s,y,"Invalid Upgrade header");return}let v=mx("sha1").update(d+bx).digest("base64");if(p.headers["sec-websocket-accept"]!==v){ve(s,y,"Invalid Sec-WebSocket-Accept header");return}let A=p.headers["sec-websocket-protocol"],E;if(A!==void 0?f.size?f.has(A)||(E="Server sent an invalid subprotocol"):E="Server sent a subprotocol but none was requested":f.size&&(E="Server sent no subprotocol"),E){ve(s,y,E);return}A&&(s._protocol=A);let x=p.headers["sec-websocket-extensions"];if(x!==void 0){if(!h){ve(s,y,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let k;try{k=kx(x)}catch{ve(s,y,"Invalid Sec-WebSocket-Extensions header");return}let I=Object.keys(k);if(I.length!==1||I[0]!==_t.extensionName){ve(s,y,"Server indicated an extension that was not requested");return}try{h.accept(k[_t.extensionName])}catch{ve(s,y,"Invalid Sec-WebSocket-Extensions header");return}s._extensions[_t.extensionName]=h}s.setSocket(y,S,{allowSynchronousEvents:n.allowSynchronousEvents,generateMask:n.generateMask,maxPayload:n.maxPayload,skipUTF8Validation:n.skipUTF8Validation})}),n.finishRequest?n.finishRequest(m,s):m.end()}function io(s,e){s._readyState=X.CLOSING,s._errorEmitted=!0,s.emit("error",e),s.emitClose()}function Nx(s){return s.path=s.socketPath,Xy.connect(s)}function Ox(s){return s.path=void 0,!s.servername&&s.servername!==""&&(s.servername=Xy.isIP(s.host)?"":s.host),hx.connect(s)}function ve(s,e,t){s._readyState=X.CLOSING;let r=new Error(t);Error.captureStackTrace(r,ve),e.setHeader?(e[Zy]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(io,s,r)):(e.destroy(r),e.once("error",s.emit.bind(s,"error")),e.once("close",s.emitClose.bind(s)))}function Nl(s,e,t){if(e){let r=wx(e)?e.size:Ax(e).length;s._socket?s._sender._bufferedBytes+=r:s._bufferedAmount+=r}if(t){let r=new Error(`WebSocket is not open: readyState ${s.readyState} (${it[s.readyState]})`);process.nextTick(t,r)}}function xx(s,e){let t=this[le];t._closeFrameReceived=!0,t._closeMessage=e,t._closeCode=s,t._socket[le]!==void 0&&(t._socket.removeListener("data",oo),process.nextTick(tw,t._socket),s===1005?t.close():t.close(s,e))}function Lx(){let s=this[le];s.isPaused||s._socket.resume()}function Dx(s){let e=this[le];e._socket[le]!==void 0&&(e._socket.removeListener("data",oo),process.nextTick(tw,e._socket),e.close(s[_x])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",s))}function zy(){this[le].emitClose()}function Mx(s,e){this[le].emit("message",s,e)}function Rx(s){let e=this[le];e._autoPong&&e.pong(s,!this._isServer,Qy),e.emit("ping",s)}function $x(s){this[le].emit("pong",s)}function tw(s){s.resume()}function Px(s){let e=this[le];e.readyState!==X.CLOSED&&(e.readyState===X.OPEN&&(e._readyState=X.CLOSING,sw(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",s)))}function sw(s){s._closeTimer=setTimeout(s._socket.destroy.bind(s._socket),s._closeTimeout)}function rw(){let s=this[le];if(this.removeListener("close",rw),this.removeListener("data",oo),this.removeListener("end",nw),s._readyState=X.CLOSING,!this._readableState.endEmitted&&!s._closeFrameReceived&&!s._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);s._receiver.write(e)}s._receiver.end(),this[le]=void 0,clearTimeout(s._closeTimer),s._receiver._writableState.finished||s._receiver._writableState.errorEmitted?s.emitClose():(s._receiver.on("error",zy),s._receiver.on("finish",zy))}function oo(s){this[le]._receiver.write(s)||this.pause()}function nw(){let s=this[le];s._readyState=X.CLOSING,s._receiver.end(),this.end()}function iw(){let s=this[le];this.removeListener("error",iw),this.on("error",Qy),s&&(s._readyState=X.CLOSING,this.destroy())}});var dw=w((SP,lw)=>{"use strict";var wP=ao(),{Duplex:qx}=$("stream");function aw(s){s.emit("close")}function Bx(){!this.destroyed&&this._writableState.finished&&this.destroy()}function cw(s){this.removeListener("error",cw),this.destroy(),this.listenerCount("error")===0&&this.emit("error",s)}function jx(s,e){let t=!0,r=new qx({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return s.on("message",function(i,o){let a=!o&&r._readableState.objectMode?i.toString():i;r.push(a)||s.pause()}),s.once("error",function(i){r.destroyed||(t=!1,r.destroy(i))}),s.once("close",function(){r.destroyed||r.push(null)}),r._destroy=function(n,i){if(s.readyState===s.CLOSED){i(n),process.nextTick(aw,r);return}let o=!1;s.once("error",function(l){o=!0,i(l)}),s.once("close",function(){o||i(n),process.nextTick(aw,r)}),t&&s.terminate()},r._final=function(n){if(s.readyState===s.CONNECTING){s.once("open",function(){r._final(n)});return}s._socket!==null&&(s._socket._writableState.finished?(n(),r._readableState.endEmitted&&r.destroy()):(s._socket.once("finish",function(){n()}),s.close()))},r._read=function(){s.isPaused&&s.resume()},r._write=function(n,i,o){if(s.readyState===s.CONNECTING){s.once("open",function(){r._write(n,i,o)});return}s.send(n,o)},r.on("end",Bx),r.on("error",cw),r}lw.exports=jx});var fw=w((bP,uw)=>{"use strict";var{tokenChars:Ux}=ws();function Fx(s){let e=new Set,t=-1,r=-1,n=0;for(n;n<s.length;n++){let o=s.charCodeAt(n);if(r===-1&&Ux[o]===1)t===-1&&(t=n);else if(n!==0&&(o===32||o===9))r===-1&&t!==-1&&(r=n);else if(o===44){if(t===-1)throw new SyntaxError(`Unexpected character at index ${n}`);r===-1&&(r=n);let a=s.slice(t,r);if(e.has(a))throw new SyntaxError(`The "${a}" subprotocol is duplicated`);e.add(a),t=r=-1}else throw new SyntaxError(`Unexpected character at index ${n}`)}if(t===-1||r!==-1)throw new SyntaxError("Unexpected end of input");let i=s.slice(t,n);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}uw.exports={parse:Fx}});var Sw=w((_P,ww)=>{"use strict";var Kx=$("events"),co=$("http"),{Duplex:vP}=$("stream"),{createHash:Hx}=$("crypto"),hw=Il(),qt=Ir(),Gx=fw(),Vx=ao(),{CLOSE_TIMEOUT:Wx,GUID:Yx,kWebSocket:Jx}=st(),zx=/^[+/0-9A-Za-z]{22}==$/,pw=0,mw=1,yw=2,Ol=class extends Kx{constructor(e,t){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:Wx,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:Vx,...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=co.createServer((r,n)=>{let i=co.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 r=this.emit.bind(this,"connection");this._removeListeners=Xx(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(n,i,o)=>{this.handleUpgrade(n,i,o,r)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=pw}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===yw){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(Nr,this);return}if(e&&this.once("close",e),this._state!==mw)if(this._state=mw,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(Nr,this):process.nextTick(Nr,this);else{let t=this._server;this._removeListeners(),this._removeListeners=this._server=null,t.close(()=>{Nr(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,r,n){t.on("error",gw);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,a=+e.headers["sec-websocket-version"];if(e.method!=="GET"){Bt(this,e,t,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){Bt(this,e,t,400,"Invalid Upgrade header");return}if(i===void 0||!zx.test(i)){Bt(this,e,t,400,"Missing or invalid Sec-WebSocket-Key header");return}if(a!==13&&a!==8){Bt(this,e,t,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){Or(t,400);return}let l=e.headers["sec-websocket-protocol"],c=new Set;if(l!==void 0)try{c=Gx.parse(l)}catch{Bt(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 f=new qt(this.options.perMessageDeflate,!0,this.options.maxPayload);try{let h=hw.parse(d);h[qt.extensionName]&&(f.accept(h[qt.extensionName]),u[qt.extensionName]=f)}catch{Bt(this,e,t,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let f={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(f,(h,m,p,y)=>{if(!h)return Or(t,m||401,p,y);this.completeUpgrade(u,i,c,e,t,r,n)});return}if(!this.options.verifyClient(f))return Or(t,401)}this.completeUpgrade(u,i,c,e,t,r,n)}completeUpgrade(e,t,r,n,i,o,a){if(!i.readable||!i.writable)return i.destroy();if(i[Jx])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>pw)return Or(i,503);let c=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${Hx("sha1").update(t+Yx).digest("base64")}`],d=new this.options.WebSocket(null,void 0,this.options);if(r.size){let u=this.options.handleProtocols?this.options.handleProtocols(r,n):r.values().next().value;u&&(c.push(`Sec-WebSocket-Protocol: ${u}`),d._protocol=u)}if(e[qt.extensionName]){let u=e[qt.extensionName].params,f=hw.format({[qt.extensionName]:[u]});c.push(`Sec-WebSocket-Extensions: ${f}`),d._extensions=e}this.emit("headers",c,n),i.write(c.concat(`\r
|
|
204
|
+
${s}`}]}),o=(r.content[0].type==="text"?r.content[0].text:"").match(/\[[\s\S]*\]/);if(!o)return 0;let a;try{a=JSON.parse(o[0])}catch{return 0}let l=0;for(let c of a){if(!c.filePath||!c.insight)continue;let d=`code:${c.repo??"unknown"}:${c.filePath}`;try{let u=this.memoryStore.getCollection(),h=await u.find({agentId:e,topic:d,pinned:{$ne:!0}}).toArray();for(let y of h)y.qdrantPointId&&await this.memoryEmbedder.remove(y.qdrantPointId).catch(()=>{});h.length>0&&await u.deleteMany({_id:{$in:h.map(y=>y._id)}});let p={content:c.insight,type:"fact",topic:d,importance:c.wasModified?"high":"medium"},g=crypto.randomUUID(),f=await this.memoryStore.save(e,p,g);await this.memoryEmbedder.upsert(g,c.insight,{agentId:e,mongoId:f._id.toString(),type:"fact",topic:d,tier:"hot",importance:p.importance,createdAt:Date.now()}),l++}catch(u){Db.error("Failed to save insight",{topic:d,error:String(u)})}}return l}}});function Uh(n,e){let t=[n,e].sort();return`dm:${t[0]}:${t[1]}`}var qh=q(()=>{"use strict"});var jh={};Pe(jh,{TeamStore:()=>Ca});import{MongoClient as Lb,ObjectId as Pb}from"mongodb";var Aa,Ca,Fh=q(()=>{"use strict";O();qh();Aa=I("team-store"),Ca=class{uri;dbName;client;db;channels;messages;constructor(e,t){this.uri=e,this.dbName=t,this.client=new Lb(e)}async connect(){await this.client.connect(),this.db=this.client.db(this.dbName),this.channels=this.db.collection("team_channels"),this.messages=this.db.collection("team_messages"),await this.channels.createIndex({type:1}),await this.channels.createIndex({members:1}),await this.messages.createIndex({channelId:1,createdAt:-1}),await this.messages.createIndex({threadId:1}),await this.messages.createIndex({createdAt:-1}),Aa.info("Team store connected",{db:this.dbName})}async close(){await this.client.close()}async getChannel(e){return this.channels.findOne({_id:e,archived:{$ne:!0}})}async listChannels(e){let t={archived:{$ne:!0}};return e&&(t.members=e),this.channels.find(t).sort({updatedAt:-1}).toArray()}async createChannel(e){return await this.channels.insertOne(e),Aa.info("Channel created",{id:e._id,type:e.type}),e}async getOrCreateDm(e,t,s){let r=Uh(e,t),i=await this.channels.findOne({_id:r});if(i)return i;let o={_id:r,type:"dm",name:s?`DM with ${s}`:`DM: ${e} & ${t}`,members:[e,t].sort(),createdBy:e,createdAt:new Date,updatedAt:new Date,archived:!1};return await this.channels.insertOne(o),Aa.info("DM created",{id:r,members:o.members}),o}async joinChannel(e,t){return(await this.channels.updateOne({_id:e,archived:{$ne:!0}},{$addToSet:{members:t},$set:{updatedAt:new Date}})).modifiedCount>0}async leaveChannel(e,t){return(await this.channels.updateOne({_id:e},{$pull:{members:t},$set:{updatedAt:new Date}})).modifiedCount>0}async archiveChannel(e){return(await this.channels.updateOne({_id:e},{$set:{archived:!0,updatedAt:new Date}})).modifiedCount>0}async renameChannel(e,t){return(await this.channels.updateOne({_id:e},{$set:{name:t,updatedAt:new Date}})).modifiedCount>0}async saveMessage(e){let t={...e,_id:new Pb().toHexString()};return await this.messages.insertOne(t),await this.channels.updateOne({_id:e.channelId},{$set:{updatedAt:new Date}}),t}async getHistory(e,t){let s=Math.min(t?.limit??50,100),r={channelId:e};t?.before&&(r._id={$lt:t.before}),t?.threadId&&(r.threadId=t.threadId);let i=await this.messages.find(r).sort({createdAt:-1}).limit(s+1).toArray(),o=i.length>s;return o&&i.pop(),{messages:i.reverse(),hasMore:o}}}});var Kh={};Pe(Kh,{CommandRegistry:()=>Na});var Ea,Na,Gh=q(()=>{"use strict";O();Ea=I("command-registry"),Na=class{teamStore;resolveAgent;commands=new Map;constructor(e,t){this.teamStore=e,this.resolveAgent=t,this.registerCoreCommands()}register(e){this.commands.has(e.def.name)&&Ea.warn("Command already registered, overwriting",{name:e.def.name}),this.commands.set(e.def.name,e),Ea.info("Command registered",{name:e.def.name,source:e.def.source})}get(e){return this.commands.get(e)}has(e){return this.commands.has(e)}list(){return[...this.commands.values()].map(e=>e.def)}async execute(e,t){let s=this.commands.get(e);if(!s)return{found:!1};try{return{found:!0,result:await s.execute(t)}}catch(r){return Ea.error("Command execution failed",{name:e,error:String(r)}),{found:!0,result:`Command failed: ${String(r)}`}}}registerCoreCommands(){this.register({def:{name:"help",source:"core",description:"List available commands"},execute:async()=>`Available commands:
|
|
205
|
+
${this.list().map(s=>` /${s.name} \u2014 ${s.description}`).join(`
|
|
206
|
+
`)}`}),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}:
|
|
207
|
+
${t.members.map(s=>` - ${s}`).join(`
|
|
208
|
+
`)}`:"Channel not found"}})}}});var Ke=T((QC,Vh)=>{"use strict";var Hh=["nodebuffer","arraybuffer","fragments"],Wh=typeof Blob<"u";Wh&&Hh.push("blob");Vh.exports={BINARY_TYPES:Hh,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:Wh,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var Vs=T((XC,Jr)=>{"use strict";var{EMPTY_BUFFER:$b}=Ke(),Oa=Buffer[Symbol.species];function Rb(n,e){if(n.length===0)return $b;if(n.length===1)return n[0];let t=Buffer.allocUnsafe(e),s=0;for(let r=0;r<n.length;r++){let i=n[r];t.set(i,s),s+=i.length}return s<e?new Oa(t.buffer,t.byteOffset,s):t}function Yh(n,e,t,s,r){for(let i=0;i<r;i++)t[s+i]=n[i]^e[i&3]}function Jh(n,e){for(let t=0;t<n.length;t++)n[t]^=e[t&3]}function Bb(n){return n.length===n.buffer.byteLength?n.buffer:n.buffer.slice(n.byteOffset,n.byteOffset+n.length)}function xa(n){if(xa.readOnly=!0,Buffer.isBuffer(n))return n;let e;return n instanceof ArrayBuffer?e=new Oa(n):ArrayBuffer.isView(n)?e=new Oa(n.buffer,n.byteOffset,n.byteLength):(e=Buffer.from(n),xa.readOnly=!1),e}Jr.exports={concat:Rb,mask:Yh,toArrayBuffer:Bb,toBuffer:xa,unmask:Jh};if(!process.env.WS_NO_BUFFER_UTIL)try{let n=F("bufferutil");Jr.exports.mask=function(e,t,s,r,i){i<48?Yh(e,t,s,r,i):n.mask(e,t,s,r,i)},Jr.exports.unmask=function(e,t){e.length<32?Jh(e,t):n.unmask(e,t)}}catch{}});var Xh=T((ZC,Qh)=>{"use strict";var zh=Symbol("kDone"),Ma=Symbol("kRun"),Da=class{constructor(e){this[zh]=()=>{this.pending--,this[Ma]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[Ma]()}[Ma](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[zh])}}};Qh.exports=Da});var Qt=T((eE,sf)=>{"use strict";var Ys=F("zlib"),Zh=Vs(),Ub=Xh(),{kStatusCode:ef}=Ke(),qb=Buffer[Symbol.species],jb=Buffer.from([0,0,255,255]),Qr=Symbol("permessage-deflate"),Ge=Symbol("total-length"),Jt=Symbol("callback"),lt=Symbol("buffers"),zt=Symbol("error"),zr,La=class{constructor(e){if(this._options=e||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!zr){let t=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;zr=new Ub(t)}}static get extensionName(){return"permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let e=this._deflate[Jt];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let t=this._options,s=e.find(r=>!(t.serverNoContextTakeover===!1&&r.server_no_context_takeover||r.server_max_window_bits&&(t.serverMaxWindowBits===!1||typeof t.serverMaxWindowBits=="number"&&t.serverMaxWindowBits>r.server_max_window_bits)||typeof t.clientMaxWindowBits=="number"&&!r.client_max_window_bits));if(!s)throw new Error("None of the extension offers can be accepted");return t.serverNoContextTakeover&&(s.server_no_context_takeover=!0),t.clientNoContextTakeover&&(s.client_no_context_takeover=!0),typeof t.serverMaxWindowBits=="number"&&(s.server_max_window_bits=t.serverMaxWindowBits),typeof t.clientMaxWindowBits=="number"?s.client_max_window_bits=t.clientMaxWindowBits:(s.client_max_window_bits===!0||t.clientMaxWindowBits===!1)&&delete s.client_max_window_bits,s}acceptAsClient(e){let t=e[0];if(this._options.clientNoContextTakeover===!1&&t.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!t.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(t.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return t}normalizeParams(e){return e.forEach(t=>{Object.keys(t).forEach(s=>{let r=t[s];if(r.length>1)throw new Error(`Parameter "${s}" must have only a single value`);if(r=r[0],s==="client_max_window_bits"){if(r!==!0){let i=+r;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${s}": ${r}`);r=i}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${s}": ${r}`)}else if(s==="server_max_window_bits"){let i=+r;if(!Number.isInteger(i)||i<8||i>15)throw new TypeError(`Invalid value for parameter "${s}": ${r}`);r=i}else if(s==="client_no_context_takeover"||s==="server_no_context_takeover"){if(r!==!0)throw new TypeError(`Invalid value for parameter "${s}": ${r}`)}else throw new Error(`Unknown parameter "${s}"`);t[s]=r})}),e}decompress(e,t,s){zr.add(r=>{this._decompress(e,t,(i,o)=>{r(),s(i,o)})})}compress(e,t,s){zr.add(r=>{this._compress(e,t,(i,o)=>{r(),s(i,o)})})}_decompress(e,t,s){let r=this._isServer?"client":"server";if(!this._inflate){let i=`${r}_max_window_bits`,o=typeof this.params[i]!="number"?Ys.Z_DEFAULT_WINDOWBITS:this.params[i];this._inflate=Ys.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[Qr]=this,this._inflate[Ge]=0,this._inflate[lt]=[],this._inflate.on("error",Kb),this._inflate.on("data",tf)}this._inflate[Jt]=s,this._inflate.write(e),t&&this._inflate.write(jb),this._inflate.flush(()=>{let i=this._inflate[zt];if(i){this._inflate.close(),this._inflate=null,s(i);return}let o=Zh.concat(this._inflate[lt],this._inflate[Ge]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[Ge]=0,this._inflate[lt]=[],t&&this.params[`${r}_no_context_takeover`]&&this._inflate.reset()),s(null,o)})}_compress(e,t,s){let r=this._isServer?"server":"client";if(!this._deflate){let i=`${r}_max_window_bits`,o=typeof this.params[i]!="number"?Ys.Z_DEFAULT_WINDOWBITS:this.params[i];this._deflate=Ys.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[Ge]=0,this._deflate[lt]=[],this._deflate.on("data",Fb)}this._deflate[Jt]=s,this._deflate.write(e),this._deflate.flush(Ys.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let i=Zh.concat(this._deflate[lt],this._deflate[Ge]);t&&(i=new qb(i.buffer,i.byteOffset,i.length-4)),this._deflate[Jt]=null,this._deflate[Ge]=0,this._deflate[lt]=[],t&&this.params[`${r}_no_context_takeover`]&&this._deflate.reset(),s(null,i)})}};sf.exports=La;function Fb(n){this[lt].push(n),this[Ge]+=n.length}function tf(n){if(this[Ge]+=n.length,this[Qr]._maxPayload<1||this[Ge]<=this[Qr]._maxPayload){this[lt].push(n);return}this[zt]=new RangeError("Max payload size exceeded"),this[zt].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[zt][ef]=1009,this.removeListener("data",tf),this.reset()}function Kb(n){if(this[Qr]._inflate=null,this[zt]){this[Jt](this[zt]);return}n[ef]=1007,this[Jt](n)}});var Xt=T((tE,Xr)=>{"use strict";var{isUtf8:nf}=F("buffer"),{hasBlob:Gb}=Ke(),Hb=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function Wb(n){return n>=1e3&&n<=1014&&n!==1004&&n!==1005&&n!==1006||n>=3e3&&n<=4999}function Pa(n){let e=n.length,t=0;for(;t<e;)if((n[t]&128)===0)t++;else if((n[t]&224)===192){if(t+1===e||(n[t+1]&192)!==128||(n[t]&254)===192)return!1;t+=2}else if((n[t]&240)===224){if(t+2>=e||(n[t+1]&192)!==128||(n[t+2]&192)!==128||n[t]===224&&(n[t+1]&224)===128||n[t]===237&&(n[t+1]&224)===160)return!1;t+=3}else if((n[t]&248)===240){if(t+3>=e||(n[t+1]&192)!==128||(n[t+2]&192)!==128||(n[t+3]&192)!==128||n[t]===240&&(n[t+1]&240)===128||n[t]===244&&n[t+1]>143||n[t]>244)return!1;t+=4}else return!1;return!0}function Vb(n){return Gb&&typeof n=="object"&&typeof n.arrayBuffer=="function"&&typeof n.type=="string"&&typeof n.stream=="function"&&(n[Symbol.toStringTag]==="Blob"||n[Symbol.toStringTag]==="File")}Xr.exports={isBlob:Vb,isValidStatusCode:Wb,isValidUTF8:Pa,tokenChars:Hb};if(nf)Xr.exports.isValidUTF8=function(n){return n.length<24?Pa(n):nf(n)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let n=F("utf-8-validate");Xr.exports.isValidUTF8=function(e){return e.length<32?Pa(e):n(e)}}catch{}});var qa=T((sE,uf)=>{"use strict";var{Writable:Yb}=F("stream"),rf=Qt(),{BINARY_TYPES:Jb,EMPTY_BUFFER:of,kStatusCode:zb,kWebSocket:Qb}=Ke(),{concat:$a,toArrayBuffer:Xb,unmask:Zb}=Vs(),{isValidStatusCode:e_,isValidUTF8:af}=Xt(),Zr=Buffer[Symbol.species],be=0,cf=1,lf=2,df=3,Ra=4,Ba=5,ei=6,Ua=class extends Yb{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||Jb[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[Qb]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=be}_write(e,t,s){if(this._opcode===8&&this._state==be)return s();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(s)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let s=this._buffers[0];return this._buffers[0]=new Zr(s.buffer,s.byteOffset+e,s.length-e),new Zr(s.buffer,s.byteOffset,e)}let t=Buffer.allocUnsafe(e);do{let s=this._buffers[0],r=t.length-e;e>=s.length?t.set(this._buffers.shift(),r):(t.set(new Uint8Array(s.buffer,s.byteOffset,e),r),this._buffers[0]=new Zr(s.buffer,s.byteOffset+e,s.length-e)),e-=s.length}while(e>0);return t}startLoop(e){this._loop=!0;do switch(this._state){case be:this.getInfo(e);break;case cf:this.getPayloadLength16(e);break;case lf:this.getPayloadLength64(e);break;case df:this.getMask();break;case Ra:this.getData(e);break;case Ba:case ei:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let t=this.consume(2);if((t[0]&48)!==0){let r=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(r);return}let s=(t[0]&64)===64;if(s&&!this._extensions[rf.extensionName]){let r=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(r);return}if(this._fin=(t[0]&128)===128,this._opcode=t[0]&15,this._payloadLength=t[1]&127,this._opcode===0){if(s){let r=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(r);return}if(!this._fragmented){let r=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");e(r);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let r=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(r);return}this._compressed=s}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let r=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");e(r);return}if(s){let r=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(r);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let r=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(r);return}}else{let r=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(r);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(t[1]&128)===128,this._isServer){if(!this._masked){let r=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");e(r);return}}else if(this._masked){let r=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");e(r);return}this._payloadLength===126?this._state=cf:this._payloadLength===127?this._state=lf:this.haveLength(e)}getPayloadLength16(e){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e)}getPayloadLength64(e){if(this._bufferedBytes<8){this._loop=!1;return}let t=this.consume(8),s=t.readUInt32BE(0);if(s>Math.pow(2,21)-1){let r=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(r);return}this._payloadLength=s*Math.pow(2,32)+t.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){let t=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(t);return}this._masked?this._state=df:this._state=Ra}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=Ra}getData(e){let t=of;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}t=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&Zb(t,this._mask)}if(this._opcode>7){this.controlMessage(t,e);return}if(this._compressed){this._state=Ba,this.decompress(t,e);return}t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage(e)}decompress(e,t){this._extensions[rf.extensionName].decompress(e,this._fin,(r,i)=>{if(r)return t(r);if(i.length){if(this._messageLength+=i.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");t(o);return}this._fragments.push(i)}this.dataMessage(t),this._state===be&&this.startLoop(t)})}dataMessage(e){if(!this._fin){this._state=be;return}let t=this._messageLength,s=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let r;this._binaryType==="nodebuffer"?r=$a(s,t):this._binaryType==="arraybuffer"?r=Xb($a(s,t)):this._binaryType==="blob"?r=new Blob(s):r=s,this._allowSynchronousEvents?(this.emit("message",r,!0),this._state=be):(this._state=ei,setImmediate(()=>{this.emit("message",r,!0),this._state=be,this.startLoop(e)}))}else{let r=$a(s,t);if(!this._skipUTF8Validation&&!af(r)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(i);return}this._state===Ba||this._allowSynchronousEvents?(this.emit("message",r,!1),this._state=be):(this._state=ei,setImmediate(()=>{this.emit("message",r,!1),this._state=be,this.startLoop(e)}))}}controlMessage(e,t){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,of),this.end();else{let s=e.readUInt16BE(0);if(!e_(s)){let i=this.createError(RangeError,`invalid status code ${s}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");t(i);return}let r=new Zr(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!af(r)){let i=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");t(i);return}this._loop=!1,this.emit("conclude",s,r),this.end()}this._state=be;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=be):(this._state=ei,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=be,this.startLoop(t)}))}createError(e,t,s,r,i){this._loop=!1,this._errored=!0;let o=new e(s?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(o,this.createError),o.code=i,o[zb]=r,o}};uf.exports=Ua});var Ka=T((rE,pf)=>{"use strict";var{Duplex:nE}=F("stream"),{randomFillSync:t_}=F("crypto"),hf=Qt(),{EMPTY_BUFFER:s_,kWebSocket:n_,NOOP:r_}=Ke(),{isBlob:Zt,isValidStatusCode:i_}=Xt(),{mask:ff,toBuffer:vt}=Vs(),_e=Symbol("kByteLength"),o_=Buffer.alloc(4),ti=8*1024,Tt,es=ti,Ce=0,a_=1,c_=2,ja=class n{constructor(e,t,s){this._extensions=t||{},s&&(this._generateMask=s,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=Ce,this.onerror=r_,this[n_]=void 0}static frame(e,t){let s,r=!1,i=2,o=!1;t.mask&&(s=t.maskBuffer||o_,t.generateMask?t.generateMask(s):(es===ti&&(Tt===void 0&&(Tt=Buffer.alloc(ti)),t_(Tt,0,ti),es=0),s[0]=Tt[es++],s[1]=Tt[es++],s[2]=Tt[es++],s[3]=Tt[es++]),o=(s[0]|s[1]|s[2]|s[3])===0,i=6);let a;typeof e=="string"?(!t.mask||o)&&t[_e]!==void 0?a=t[_e]:(e=Buffer.from(e),a=e.length):(a=e.length,r=t.mask&&t.readOnly&&!o);let l=a;a>=65536?(i+=8,l=127):a>125&&(i+=2,l=126);let c=Buffer.allocUnsafe(r?a+i:i);return c[0]=t.fin?t.opcode|128:t.opcode,t.rsv1&&(c[0]|=64),c[1]=l,l===126?c.writeUInt16BE(a,2):l===127&&(c[2]=c[3]=0,c.writeUIntBE(a,4,6)),t.mask?(c[1]|=128,c[i-4]=s[0],c[i-3]=s[1],c[i-2]=s[2],c[i-1]=s[3],o?[c,e]:r?(ff(e,s,c,i,a),[c]):(ff(e,s,e,0,a),[c,e])):[c,e]}close(e,t,s,r){let i;if(e===void 0)i=s_;else{if(typeof e!="number"||!i_(e))throw new TypeError("First argument must be a valid error code number");if(t===void 0||!t.length)i=Buffer.allocUnsafe(2),i.writeUInt16BE(e,0);else{let a=Buffer.byteLength(t);if(a>123)throw new RangeError("The message must not be greater than 123 bytes");i=Buffer.allocUnsafe(2+a),i.writeUInt16BE(e,0),typeof t=="string"?i.write(t,2):i.set(t,2)}}let o={[_e]:i.length,fin:!0,generateMask:this._generateMask,mask:s,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==Ce?this.enqueue([this.dispatch,i,!1,o,r]):this.sendFrame(n.frame(i,o),r)}ping(e,t,s){let r,i;if(typeof e=="string"?(r=Buffer.byteLength(e),i=!1):Zt(e)?(r=e.size,i=!1):(e=vt(e),r=e.length,i=vt.readOnly),r>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[_e]:r,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};Zt(e)?this._state!==Ce?this.enqueue([this.getBlobData,e,!1,o,s]):this.getBlobData(e,!1,o,s):this._state!==Ce?this.enqueue([this.dispatch,e,!1,o,s]):this.sendFrame(n.frame(e,o),s)}pong(e,t,s){let r,i;if(typeof e=="string"?(r=Buffer.byteLength(e),i=!1):Zt(e)?(r=e.size,i=!1):(e=vt(e),r=e.length,i=vt.readOnly),r>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[_e]:r,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};Zt(e)?this._state!==Ce?this.enqueue([this.getBlobData,e,!1,o,s]):this.getBlobData(e,!1,o,s):this._state!==Ce?this.enqueue([this.dispatch,e,!1,o,s]):this.sendFrame(n.frame(e,o),s)}send(e,t,s){let r=this._extensions[hf.extensionName],i=t.binary?2:1,o=t.compress,a,l;typeof e=="string"?(a=Buffer.byteLength(e),l=!1):Zt(e)?(a=e.size,l=!1):(e=vt(e),a=e.length,l=vt.readOnly),this._firstFragment?(this._firstFragment=!1,o&&r&&r.params[r._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=a>=r._threshold),this._compress=o):(o=!1,i=0),t.fin&&(this._firstFragment=!0);let c={[_e]:a,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:l,rsv1:o};Zt(e)?this._state!==Ce?this.enqueue([this.getBlobData,e,this._compress,c,s]):this.getBlobData(e,this._compress,c,s):this._state!==Ce?this.enqueue([this.dispatch,e,this._compress,c,s]):this.dispatch(e,this._compress,c,s)}getBlobData(e,t,s,r){this._bufferedBytes+=s[_e],this._state=c_,e.arrayBuffer().then(i=>{if(this._socket.destroyed){let a=new Error("The socket was closed while the blob was being read");process.nextTick(Fa,this,a,r);return}this._bufferedBytes-=s[_e];let o=vt(i);t?this.dispatch(o,t,s,r):(this._state=Ce,this.sendFrame(n.frame(o,s),r),this.dequeue())}).catch(i=>{process.nextTick(l_,this,i,r)})}dispatch(e,t,s,r){if(!t){this.sendFrame(n.frame(e,s),r);return}let i=this._extensions[hf.extensionName];this._bufferedBytes+=s[_e],this._state=a_,i.compress(e,s.fin,(o,a)=>{if(this._socket.destroyed){let l=new Error("The socket was closed while data was being compressed");Fa(this,l,r);return}this._bufferedBytes-=s[_e],this._state=Ce,s.readOnly=!1,this.sendFrame(n.frame(a,s),r),this.dequeue()})}dequeue(){for(;this._state===Ce&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][_e],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][_e],this._queue.push(e)}sendFrame(e,t){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],t),this._socket.uncork()):this._socket.write(e[0],t)}};pf.exports=ja;function Fa(n,e,t){typeof t=="function"&&t(e);for(let s=0;s<n._queue.length;s++){let r=n._queue[s],i=r[r.length-1];typeof i=="function"&&i(e)}}function l_(n,e,t){Fa(n,e,t),n.onerror(e)}});var vf=T((iE,kf)=>{"use strict";var{kForOnEventAttribute:Js,kListener:Ga}=Ke(),mf=Symbol("kCode"),gf=Symbol("kData"),yf=Symbol("kError"),wf=Symbol("kMessage"),Sf=Symbol("kReason"),ts=Symbol("kTarget"),bf=Symbol("kType"),_f=Symbol("kWasClean"),He=class{constructor(e){this[ts]=null,this[bf]=e}get target(){return this[ts]}get type(){return this[bf]}};Object.defineProperty(He.prototype,"target",{enumerable:!0});Object.defineProperty(He.prototype,"type",{enumerable:!0});var It=class extends He{constructor(e,t={}){super(e),this[mf]=t.code===void 0?0:t.code,this[Sf]=t.reason===void 0?"":t.reason,this[_f]=t.wasClean===void 0?!1:t.wasClean}get code(){return this[mf]}get reason(){return this[Sf]}get wasClean(){return this[_f]}};Object.defineProperty(It.prototype,"code",{enumerable:!0});Object.defineProperty(It.prototype,"reason",{enumerable:!0});Object.defineProperty(It.prototype,"wasClean",{enumerable:!0});var ss=class extends He{constructor(e,t={}){super(e),this[yf]=t.error===void 0?null:t.error,this[wf]=t.message===void 0?"":t.message}get error(){return this[yf]}get message(){return this[wf]}};Object.defineProperty(ss.prototype,"error",{enumerable:!0});Object.defineProperty(ss.prototype,"message",{enumerable:!0});var zs=class extends He{constructor(e,t={}){super(e),this[gf]=t.data===void 0?null:t.data}get data(){return this[gf]}};Object.defineProperty(zs.prototype,"data",{enumerable:!0});var d_={addEventListener(n,e,t={}){for(let r of this.listeners(n))if(!t[Js]&&r[Ga]===e&&!r[Js])return;let s;if(n==="message")s=function(i,o){let a=new zs("message",{data:o?i:i.toString()});a[ts]=this,si(e,this,a)};else if(n==="close")s=function(i,o){let a=new It("close",{code:i,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});a[ts]=this,si(e,this,a)};else if(n==="error")s=function(i){let o=new ss("error",{error:i,message:i.message});o[ts]=this,si(e,this,o)};else if(n==="open")s=function(){let i=new He("open");i[ts]=this,si(e,this,i)};else return;s[Js]=!!t[Js],s[Ga]=e,t.once?this.once(n,s):this.on(n,s)},removeEventListener(n,e){for(let t of this.listeners(n))if(t[Ga]===e&&!t[Js]){this.removeListener(n,t);break}}};kf.exports={CloseEvent:It,ErrorEvent:ss,Event:He,EventTarget:d_,MessageEvent:zs};function si(n,e,t){typeof n=="object"&&n.handleEvent?n.handleEvent.call(n,t):n.call(e,t)}});var ni=T((oE,Tf)=>{"use strict";var{tokenChars:Qs}=Xt();function Me(n,e,t){n[e]===void 0?n[e]=[t]:n[e].push(t)}function u_(n){let e=Object.create(null),t=Object.create(null),s=!1,r=!1,i=!1,o,a,l=-1,c=-1,d=-1,u=0;for(;u<n.length;u++)if(c=n.charCodeAt(u),o===void 0)if(d===-1&&Qs[c]===1)l===-1&&(l=u);else if(u!==0&&(c===32||c===9))d===-1&&l!==-1&&(d=u);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u);let p=n.slice(l,d);c===44?(Me(e,p,t),t=Object.create(null)):o=p,l=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);else if(a===void 0)if(d===-1&&Qs[c]===1)l===-1&&(l=u);else if(c===32||c===9)d===-1&&l!==-1&&(d=u);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u),Me(t,n.slice(l,d),!0),c===44&&(Me(e,o,t),t=Object.create(null),o=void 0),l=d=-1}else if(c===61&&l!==-1&&d===-1)a=n.slice(l,u),l=d=-1;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(r){if(Qs[c]!==1)throw new SyntaxError(`Unexpected character at index ${u}`);l===-1?l=u:s||(s=!0),r=!1}else if(i)if(Qs[c]===1)l===-1&&(l=u);else if(c===34&&l!==-1)i=!1,d=u;else if(c===92)r=!0;else throw new SyntaxError(`Unexpected character at index ${u}`);else if(c===34&&n.charCodeAt(u-1)===61)i=!0;else if(d===-1&&Qs[c]===1)l===-1&&(l=u);else if(l!==-1&&(c===32||c===9))d===-1&&(d=u);else if(c===59||c===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${u}`);d===-1&&(d=u);let p=n.slice(l,d);s&&(p=p.replace(/\\/g,""),s=!1),Me(t,a,p),c===44&&(Me(e,o,t),t=Object.create(null),o=void 0),a=void 0,l=d=-1}else throw new SyntaxError(`Unexpected character at index ${u}`);if(l===-1||i||c===32||c===9)throw new SyntaxError("Unexpected end of input");d===-1&&(d=u);let h=n.slice(l,d);return o===void 0?Me(e,h,t):(a===void 0?Me(t,h,!0):s?Me(t,a,h.replace(/\\/g,"")):Me(t,a,h),Me(e,o,t)),e}function h_(n){return Object.keys(n).map(e=>{let t=n[e];return Array.isArray(t)||(t=[t]),t.map(s=>[e].concat(Object.keys(s).map(r=>{let i=s[r];return Array.isArray(i)||(i=[i]),i.map(o=>o===!0?r:`${r}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}Tf.exports={format:h_,parse:u_}});var ai=T((lE,$f)=>{"use strict";var f_=F("events"),p_=F("https"),m_=F("http"),Cf=F("net"),g_=F("tls"),{randomBytes:y_,createHash:w_}=F("crypto"),{Duplex:aE,Readable:cE}=F("stream"),{URL:Ha}=F("url"),dt=Qt(),S_=qa(),b_=Ka(),{isBlob:__}=Xt(),{BINARY_TYPES:If,CLOSE_TIMEOUT:k_,EMPTY_BUFFER:ri,GUID:v_,kForOnEventAttribute:Wa,kListener:T_,kStatusCode:I_,kWebSocket:re,NOOP:Ef}=Ke(),{EventTarget:{addEventListener:A_,removeEventListener:C_}}=vf(),{format:E_,parse:N_}=ni(),{toBuffer:O_}=Vs(),Nf=Symbol("kAborted"),Va=[8,13],We=["CONNECTING","OPEN","CLOSING","CLOSED"],x_=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,V=class n extends f_{constructor(e,t,s){super(),this._binaryType=If[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=ri,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=n.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,t===void 0?t=[]:Array.isArray(t)||(typeof t=="object"&&t!==null?(s=t,t=[]):t=[t]),Of(this,e,t,s)):(this._autoPong=s.autoPong,this._closeTimeout=s.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){If.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(e,t,s){let r=new S_({allowSynchronousEvents:s.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation}),i=new b_(e,this._extensions,s.generateMask);this._receiver=r,this._sender=i,this._socket=e,r[re]=this,i[re]=this,e[re]=this,r.on("conclude",L_),r.on("drain",P_),r.on("error",$_),r.on("message",R_),r.on("ping",B_),r.on("pong",U_),i.onerror=q_,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",Df),e.on("data",oi),e.on("end",Lf),e.on("error",Pf),this._readyState=n.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=n.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[dt.extensionName]&&this._extensions[dt.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=n.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==n.CLOSED){if(this.readyState===n.CONNECTING){ye(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===n.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=n.CLOSING,this._sender.close(e,t,!this._isServer,s=>{s||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),Mf(this)}}pause(){this.readyState===n.CONNECTING||this.readyState===n.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,t,s){if(this.readyState===n.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(s=e,e=t=void 0):typeof t=="function"&&(s=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==n.OPEN){Ya(this,e,s);return}t===void 0&&(t=!this._isServer),this._sender.ping(e||ri,t,s)}pong(e,t,s){if(this.readyState===n.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(s=e,e=t=void 0):typeof t=="function"&&(s=t,t=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==n.OPEN){Ya(this,e,s);return}t===void 0&&(t=!this._isServer),this._sender.pong(e||ri,t,s)}resume(){this.readyState===n.CONNECTING||this.readyState===n.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,t,s){if(this.readyState===n.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof t=="function"&&(s=t,t={}),typeof e=="number"&&(e=e.toString()),this.readyState!==n.OPEN){Ya(this,e,s);return}let r={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[dt.extensionName]||(r.compress=!1),this._sender.send(e||ri,r,s)}terminate(){if(this.readyState!==n.CLOSED){if(this.readyState===n.CONNECTING){ye(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=n.CLOSING,this._socket.destroy())}}};Object.defineProperty(V,"CONNECTING",{enumerable:!0,value:We.indexOf("CONNECTING")});Object.defineProperty(V.prototype,"CONNECTING",{enumerable:!0,value:We.indexOf("CONNECTING")});Object.defineProperty(V,"OPEN",{enumerable:!0,value:We.indexOf("OPEN")});Object.defineProperty(V.prototype,"OPEN",{enumerable:!0,value:We.indexOf("OPEN")});Object.defineProperty(V,"CLOSING",{enumerable:!0,value:We.indexOf("CLOSING")});Object.defineProperty(V.prototype,"CLOSING",{enumerable:!0,value:We.indexOf("CLOSING")});Object.defineProperty(V,"CLOSED",{enumerable:!0,value:We.indexOf("CLOSED")});Object.defineProperty(V.prototype,"CLOSED",{enumerable:!0,value:We.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(n=>{Object.defineProperty(V.prototype,n,{enumerable:!0})});["open","error","close","message"].forEach(n=>{Object.defineProperty(V.prototype,`on${n}`,{enumerable:!0,get(){for(let e of this.listeners(n))if(e[Wa])return e[T_];return null},set(e){for(let t of this.listeners(n))if(t[Wa]){this.removeListener(n,t);break}typeof e=="function"&&this.addEventListener(n,e,{[Wa]:!0})}})});V.prototype.addEventListener=A_;V.prototype.removeEventListener=C_;$f.exports=V;function Of(n,e,t,s){let r={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:k_,protocolVersion:Va[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...s,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(n._autoPong=r.autoPong,n._closeTimeout=r.closeTimeout,!Va.includes(r.protocolVersion))throw new RangeError(`Unsupported protocol version: ${r.protocolVersion} (supported versions: ${Va.join(", ")})`);let i;if(e instanceof Ha)i=e;else try{i=new Ha(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}i.protocol==="http:"?i.protocol="ws:":i.protocol==="https:"&&(i.protocol="wss:"),n._url=i.href;let o=i.protocol==="wss:",a=i.protocol==="ws+unix:",l;if(i.protocol!=="ws:"&&!o&&!a?l=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:a&&!i.pathname?l="The URL's pathname is empty":i.hash&&(l="The URL contains a fragment identifier"),l){let f=new SyntaxError(l);if(n._redirects===0)throw f;ii(n,f);return}let c=o?443:80,d=y_(16).toString("base64"),u=o?p_.request:m_.request,h=new Set,p;if(r.createConnection=r.createConnection||(o?D_:M_),r.defaultPort=r.defaultPort||c,r.port=i.port||c,r.host=i.hostname.startsWith("[")?i.hostname.slice(1,-1):i.hostname,r.headers={...r.headers,"Sec-WebSocket-Version":r.protocolVersion,"Sec-WebSocket-Key":d,Connection:"Upgrade",Upgrade:"websocket"},r.path=i.pathname+i.search,r.timeout=r.handshakeTimeout,r.perMessageDeflate&&(p=new dt({...r.perMessageDeflate,isServer:!1,maxPayload:r.maxPayload}),r.headers["Sec-WebSocket-Extensions"]=E_({[dt.extensionName]:p.offer()})),t.length){for(let f of t){if(typeof f!="string"||!x_.test(f)||h.has(f))throw new SyntaxError("An invalid or duplicated subprotocol was specified");h.add(f)}r.headers["Sec-WebSocket-Protocol"]=t.join(",")}if(r.origin&&(r.protocolVersion<13?r.headers["Sec-WebSocket-Origin"]=r.origin:r.headers.Origin=r.origin),(i.username||i.password)&&(r.auth=`${i.username}:${i.password}`),a){let f=r.path.split(":");r.socketPath=f[0],r.path=f[1]}let g;if(r.followRedirects){if(n._redirects===0){n._originalIpc=a,n._originalSecure=o,n._originalHostOrSocketPath=a?r.socketPath:i.host;let f=s&&s.headers;if(s={...s,headers:{}},f)for(let[y,w]of Object.entries(f))s.headers[y.toLowerCase()]=w}else if(n.listenerCount("redirect")===0){let f=a?n._originalIpc?r.socketPath===n._originalHostOrSocketPath:!1:n._originalIpc?!1:i.host===n._originalHostOrSocketPath;(!f||n._originalSecure&&!o)&&(delete r.headers.authorization,delete r.headers.cookie,f||delete r.headers.host,r.auth=void 0)}r.auth&&!s.headers.authorization&&(s.headers.authorization="Basic "+Buffer.from(r.auth).toString("base64")),g=n._req=u(r),n._redirects&&n.emit("redirect",n.url,g)}else g=n._req=u(r);r.timeout&&g.on("timeout",()=>{ye(n,g,"Opening handshake has timed out")}),g.on("error",f=>{g===null||g[Nf]||(g=n._req=null,ii(n,f))}),g.on("response",f=>{let y=f.headers.location,w=f.statusCode;if(y&&r.followRedirects&&w>=300&&w<400){if(++n._redirects>r.maxRedirects){ye(n,g,"Maximum redirects exceeded");return}g.abort();let S;try{S=new Ha(y,e)}catch{let A=new SyntaxError(`Invalid URL: ${y}`);ii(n,A);return}Of(n,S,t,s)}else n.emit("unexpected-response",g,f)||ye(n,g,`Unexpected server response: ${f.statusCode}`)}),g.on("upgrade",(f,y,w)=>{if(n.emit("upgrade",f),n.readyState!==V.CONNECTING)return;g=n._req=null;let S=f.headers.upgrade;if(S===void 0||S.toLowerCase()!=="websocket"){ye(n,y,"Invalid Upgrade header");return}let b=w_("sha1").update(d+v_).digest("base64");if(f.headers["sec-websocket-accept"]!==b){ye(n,y,"Invalid Sec-WebSocket-Accept header");return}let A=f.headers["sec-websocket-protocol"],v;if(A!==void 0?h.size?h.has(A)||(v="Server sent an invalid subprotocol"):v="Server sent a subprotocol but none was requested":h.size&&(v="Server sent no subprotocol"),v){ye(n,y,v);return}A&&(n._protocol=A);let C=f.headers["sec-websocket-extensions"];if(C!==void 0){if(!p){ye(n,y,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let M;try{M=N_(C)}catch{ye(n,y,"Invalid Sec-WebSocket-Extensions header");return}let _=Object.keys(M);if(_.length!==1||_[0]!==dt.extensionName){ye(n,y,"Server indicated an extension that was not requested");return}try{p.accept(M[dt.extensionName])}catch{ye(n,y,"Invalid Sec-WebSocket-Extensions header");return}n._extensions[dt.extensionName]=p}n.setSocket(y,w,{allowSynchronousEvents:r.allowSynchronousEvents,generateMask:r.generateMask,maxPayload:r.maxPayload,skipUTF8Validation:r.skipUTF8Validation})}),r.finishRequest?r.finishRequest(g,n):g.end()}function ii(n,e){n._readyState=V.CLOSING,n._errorEmitted=!0,n.emit("error",e),n.emitClose()}function M_(n){return n.path=n.socketPath,Cf.connect(n)}function D_(n){return n.path=void 0,!n.servername&&n.servername!==""&&(n.servername=Cf.isIP(n.host)?"":n.host),g_.connect(n)}function ye(n,e,t){n._readyState=V.CLOSING;let s=new Error(t);Error.captureStackTrace(s,ye),e.setHeader?(e[Nf]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(ii,n,s)):(e.destroy(s),e.once("error",n.emit.bind(n,"error")),e.once("close",n.emitClose.bind(n)))}function Ya(n,e,t){if(e){let s=__(e)?e.size:O_(e).length;n._socket?n._sender._bufferedBytes+=s:n._bufferedAmount+=s}if(t){let s=new Error(`WebSocket is not open: readyState ${n.readyState} (${We[n.readyState]})`);process.nextTick(t,s)}}function L_(n,e){let t=this[re];t._closeFrameReceived=!0,t._closeMessage=e,t._closeCode=n,t._socket[re]!==void 0&&(t._socket.removeListener("data",oi),process.nextTick(xf,t._socket),n===1005?t.close():t.close(n,e))}function P_(){let n=this[re];n.isPaused||n._socket.resume()}function $_(n){let e=this[re];e._socket[re]!==void 0&&(e._socket.removeListener("data",oi),process.nextTick(xf,e._socket),e.close(n[I_])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",n))}function Af(){this[re].emitClose()}function R_(n,e){this[re].emit("message",n,e)}function B_(n){let e=this[re];e._autoPong&&e.pong(n,!this._isServer,Ef),e.emit("ping",n)}function U_(n){this[re].emit("pong",n)}function xf(n){n.resume()}function q_(n){let e=this[re];e.readyState!==V.CLOSED&&(e.readyState===V.OPEN&&(e._readyState=V.CLOSING,Mf(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",n)))}function Mf(n){n._closeTimer=setTimeout(n._socket.destroy.bind(n._socket),n._closeTimeout)}function Df(){let n=this[re];if(this.removeListener("close",Df),this.removeListener("data",oi),this.removeListener("end",Lf),n._readyState=V.CLOSING,!this._readableState.endEmitted&&!n._closeFrameReceived&&!n._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);n._receiver.write(e)}n._receiver.end(),this[re]=void 0,clearTimeout(n._closeTimer),n._receiver._writableState.finished||n._receiver._writableState.errorEmitted?n.emitClose():(n._receiver.on("error",Af),n._receiver.on("finish",Af))}function oi(n){this[re]._receiver.write(n)||this.pause()}function Lf(){let n=this[re];n._readyState=V.CLOSING,n._receiver.end(),this.end()}function Pf(){let n=this[re];this.removeListener("error",Pf),this.on("error",Ef),n&&(n._readyState=V.CLOSING,this.destroy())}});var qf=T((uE,Uf)=>{"use strict";var dE=ai(),{Duplex:j_}=F("stream");function Rf(n){n.emit("close")}function F_(){!this.destroyed&&this._writableState.finished&&this.destroy()}function Bf(n){this.removeListener("error",Bf),this.destroy(),this.listenerCount("error")===0&&this.emit("error",n)}function K_(n,e){let t=!0,s=new j_({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return n.on("message",function(i,o){let a=!o&&s._readableState.objectMode?i.toString():i;s.push(a)||n.pause()}),n.once("error",function(i){s.destroyed||(t=!1,s.destroy(i))}),n.once("close",function(){s.destroyed||s.push(null)}),s._destroy=function(r,i){if(n.readyState===n.CLOSED){i(r),process.nextTick(Rf,s);return}let o=!1;n.once("error",function(l){o=!0,i(l)}),n.once("close",function(){o||i(r),process.nextTick(Rf,s)}),t&&n.terminate()},s._final=function(r){if(n.readyState===n.CONNECTING){n.once("open",function(){s._final(r)});return}n._socket!==null&&(n._socket._writableState.finished?(r(),s._readableState.endEmitted&&s.destroy()):(n._socket.once("finish",function(){r()}),n.close()))},s._read=function(){n.isPaused&&n.resume()},s._write=function(r,i,o){if(n.readyState===n.CONNECTING){n.once("open",function(){s._write(r,i,o)});return}n.send(r,o)},s.on("end",F_),s.on("error",Bf),s}Uf.exports=K_});var Ja=T((hE,jf)=>{"use strict";var{tokenChars:G_}=Xt();function H_(n){let e=new Set,t=-1,s=-1,r=0;for(r;r<n.length;r++){let o=n.charCodeAt(r);if(s===-1&&G_[o]===1)t===-1&&(t=r);else if(r!==0&&(o===32||o===9))s===-1&&t!==-1&&(s=r);else if(o===44){if(t===-1)throw new SyntaxError(`Unexpected character at index ${r}`);s===-1&&(s=r);let a=n.slice(t,s);if(e.has(a))throw new SyntaxError(`The "${a}" subprotocol is duplicated`);e.add(a),t=s=-1}else throw new SyntaxError(`Unexpected character at index ${r}`)}if(t===-1||s!==-1)throw new SyntaxError("Unexpected end of input");let i=n.slice(t,r);if(e.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return e.add(i),e}jf.exports={parse:H_}});var Yf=T((pE,Vf)=>{"use strict";var W_=F("events"),ci=F("http"),{Duplex:fE}=F("stream"),{createHash:V_}=F("crypto"),Ff=ni(),At=Qt(),Y_=Ja(),J_=ai(),{CLOSE_TIMEOUT:z_,GUID:Q_,kWebSocket:X_}=Ke(),Z_=/^[+/0-9A-Za-z]{22}==$/,Kf=0,Gf=1,Wf=2,za=class extends W_{constructor(e,t){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:z_,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:J_,...e},e.port==null&&!e.server&&!e.noServer||e.port!=null&&(e.server||e.noServer)||e.server&&e.noServer)throw new TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(e.port!=null?(this._server=ci.createServer((s,r)=>{let i=ci.STATUS_CODES[426];r.writeHead(426,{"Content-Length":i.length,"Content-Type":"text/plain"}),r.end(i)}),this._server.listen(e.port,e.host,e.backlog,t)):e.server&&(this._server=e.server),this._server){let s=this.emit.bind(this,"connection");this._removeListeners=ek(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(r,i,o)=>{this.handleUpgrade(r,i,o,s)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=Kf}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(e){if(this._state===Wf){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(Xs,this);return}if(e&&this.once("close",e),this._state!==Gf)if(this._state=Gf,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients?this.clients.size?this._shouldEmitClose=!0:process.nextTick(Xs,this):process.nextTick(Xs,this);else{let t=this._server;this._removeListeners(),this._removeListeners=this._server=null,t.close(()=>{Xs(this)})}}shouldHandle(e){if(this.options.path){let t=e.url.indexOf("?");if((t!==-1?e.url.slice(0,t):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,t,s,r){t.on("error",Hf);let i=e.headers["sec-websocket-key"],o=e.headers.upgrade,a=+e.headers["sec-websocket-version"];if(e.method!=="GET"){Ct(this,e,t,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){Ct(this,e,t,400,"Invalid Upgrade header");return}if(i===void 0||!Z_.test(i)){Ct(this,e,t,400,"Missing or invalid Sec-WebSocket-Key header");return}if(a!==13&&a!==8){Ct(this,e,t,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){Zs(t,400);return}let l=e.headers["sec-websocket-protocol"],c=new Set;if(l!==void 0)try{c=Y_.parse(l)}catch{Ct(this,e,t,400,"Invalid Sec-WebSocket-Protocol header");return}let d=e.headers["sec-websocket-extensions"],u={};if(this.options.perMessageDeflate&&d!==void 0){let h=new At({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let p=Ff.parse(d);p[At.extensionName]&&(h.accept(p[At.extensionName]),u[At.extensionName]=h)}catch{Ct(this,e,t,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let h={origin:e.headers[`${a===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(h,(p,g,f,y)=>{if(!p)return Zs(t,g||401,f,y);this.completeUpgrade(u,i,c,e,t,s,r)});return}if(!this.options.verifyClient(h))return Zs(t,401)}this.completeUpgrade(u,i,c,e,t,s,r)}completeUpgrade(e,t,s,r,i,o,a){if(!i.readable||!i.writable)return i.destroy();if(i[X_])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>Kf)return Zs(i,503);let c=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${V_("sha1").update(t+Q_).digest("base64")}`],d=new this.options.WebSocket(null,void 0,this.options);if(s.size){let u=this.options.handleProtocols?this.options.handleProtocols(s,r):s.values().next().value;u&&(c.push(`Sec-WebSocket-Protocol: ${u}`),d._protocol=u)}if(e[At.extensionName]){let u=e[At.extensionName].params,h=Ff.format({[At.extensionName]:[u]});c.push(`Sec-WebSocket-Extensions: ${h}`),d._extensions=e}this.emit("headers",c,r),i.write(c.concat(`\r
|
|
204
209
|
`).join(`\r
|
|
205
|
-
`)),i.removeListener("error",
|
|
206
|
-
`+Object.keys(
|
|
210
|
+
`)),i.removeListener("error",Hf),d.setSocket(i,o,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(d),d.on("close",()=>{this.clients.delete(d),this._shouldEmitClose&&!this.clients.size&&process.nextTick(Xs,this)})),a(d,r)}};Vf.exports=za;function ek(n,e){for(let t of Object.keys(e))n.on(t,e[t]);return function(){for(let s of Object.keys(e))n.removeListener(s,e[s])}}function Xs(n){n._state=Wf,n.emit("close")}function Hf(){this.destroy()}function Zs(n,e,t,s){t=t||ci.STATUS_CODES[e],s={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(t),...s},n.once("finish",n.destroy),n.end(`HTTP/1.1 ${e} ${ci.STATUS_CODES[e]}\r
|
|
211
|
+
`+Object.keys(s).map(r=>`${r}: ${s[r]}`).join(`\r
|
|
207
212
|
`)+`\r
|
|
208
213
|
\r
|
|
209
|
-
`+t)}function
|
|
214
|
+
`+t)}function Ct(n,e,t,s,r,i){if(n.listenerCount("wsClientError")){let o=new Error(r);Error.captureStackTrace(o,Ct),n.emit("wsClientError",o,t,e)}else Zs(t,s,r,i)}});var tk,sk,nk,rk,ik,ok,en,Qa,Jf=q(()=>{tk=ve(qf(),1),sk=ve(ni(),1),nk=ve(Qt(),1),rk=ve(qa(),1),ik=ve(Ka(),1),ok=ve(Ja(),1),en=ve(ai(),1),Qa=ve(Yf(),1)});function zf(n){let e;try{e=JSON.parse(n)}catch{return null}if(typeof e!="object"||e===null)return null;let t=e;switch(t.type){case"message":return typeof t.text!="string"||typeof t.id!="string"?null:typeof t.channelId=="string"?{type:"message",channelId:t.channelId,text:t.text,threadId:typeof t.threadId=="string"?t.threadId:void 0,id:t.id}:{type:"message",text:t.text,id:t.id};case"image":return typeof t.data!="string"||typeof t.filename!="string"||typeof t.id!="string"?null:typeof t.channelId=="string"?{type:"image",channelId:t.channelId,data:t.data,filename:t.filename,id:t.id}:{type:"image",data:t.data,filename:t.filename,id:t.id};case"file":return typeof t.channelId=="string"&&typeof t.data=="string"&&typeof t.filename=="string"&&typeof t.mimetype=="string"&&typeof t.id=="string"?{type:"file",channelId:t.channelId,data:t.data,filename:t.filename,mimetype:t.mimetype,id:t.id}:null;case"ping":return{type:"ping"};case"join":return typeof t.channelId=="string"&&typeof t.id=="string"?{type:"join",channelId:t.channelId,id:t.id}:null;case"leave":return typeof t.channelId=="string"&&typeof t.id=="string"?{type:"leave",channelId:t.channelId,id:t.id}:null;case"command":return typeof t.channelId=="string"&&typeof t.name=="string"&&Array.isArray(t.args)&&typeof t.id=="string"?{type:"command",channelId:t.channelId,name:t.name,args:t.args.map(String),id:t.id}:null;case"command_list":return typeof t.id=="string"?{type:"command_list",id:t.id}:null;case"channel_list":return typeof t.id=="string"?{type:"channel_list",id:t.id}:null;case"history":return typeof t.channelId=="string"&&typeof t.id=="string"?{type:"history",channelId:t.channelId,before:typeof t.before=="string"?t.before:void 0,limit:typeof t.limit=="number"?t.limit:void 0,id:t.id}:null;case"agent_list":return typeof t.id=="string"?{type:"agent_list",id:t.id}:null;default:return null}}function Qf(n){return(n.type==="message"||n.type==="image"||n.type==="file")&&"channelId"in n}var Xf=q(()=>{"use strict"});var ep={};Pe(ep,{WsAdapter:()=>Xa});import{createServer as ak}from"node:http";import{randomUUID as tn}from"node:crypto";function Zf(n){let e=n.split(".").pop()?.toLowerCase();return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",heic:"image/heic"}[e??""]??"image/jpeg"}var ke,Xa,tp=q(()=>{"use strict";Jf();O();Xf();js();ke=I("ws-adapter"),Xa=class{id="ws";kind="app";port;server;wss;connections=new Map;pendingMessages=new Map;onWorkItem;teamStore;commandRegistry;agentRegistry;agentManager;constructor(e,t){this.port=e,this.teamStore=t.teamStore,this.commandRegistry=t.commandRegistry,this.agentRegistry=t.agentRegistry,this.agentManager=t.agentManager}async start(e){this.onWorkItem=e,this.server=ak(async(t,s)=>{if(s.setHeader("Access-Control-Allow-Origin","*"),s.setHeader("Access-Control-Allow-Methods","POST, GET, PUT, DELETE, OPTIONS"),s.setHeader("Access-Control-Allow-Headers","Content-Type, Authorization"),t.method==="OPTIONS"){s.writeHead(204),s.end();return}let r=new URL(t.url??"/",`http://localhost:${this.port}`);if(t.method==="GET"&&r.pathname==="/health"){s.writeHead(200,{"Content-Type":"application/json"}),s.end(JSON.stringify({status:"ok",connections:this.connections.size}));return}s.writeHead(404),s.end("Not found")}),this.wss=new Qa.default({noServer:!0,maxPayload:10*1024*1024}),this.server.on("upgrade",(t,s,r)=>{let i=new URL(t.url??"/",`http://localhost:${this.port}`);if(i.searchParams.get("internal")!=="1"){s.write(`HTTP/1.1 404 Not Found\r
|
|
215
|
+
\r
|
|
216
|
+
`),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
|
|
210
217
|
\r
|
|
211
|
-
`),
|
|
218
|
+
`),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
|
|
212
219
|
\r
|
|
213
|
-
`),r.destroy();return}this.wss.handleUpgrade(t,r,n,l=>{this.wss.emit("connection",l,t,a)})}),this.wss.on("connection",(t,r,n)=>{let i=n._id;te.info("Device connected",{deviceId:i,name:n.name});let o=this.pendingMessages.get(i);if(o?.length){te.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),this.deviceRegistry.updateLastSeen(i),t.on("message",async l=>{try{let c=vw(l.toString());if(!c){this.send(t,{type:"error",message:"Invalid message format"});return}if(c.type==="ping"){this.deviceRegistry.updateLastSeen(i);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(_w(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||Lr(),text:c.text,source:{kind:"app",id:i,label:`app:${n.name}`,adapterId:"ws"},sender:i,senderName:n.name,threadId:`app:${i}`,timestamp:new Date,meta:{deviceId:i,defaultAgentId:n.defaultAgentId}};this.onWorkItem(d)}if(c.type==="image"){this.send(t,{type:"ack",id:c.id});let d=Buffer.from(c.data,"base64"),u=Ew(c.filename);try{let f=await or(d,c.filename,u),h={id:c.id||Lr(),text:`[Photo: ${c.filename}]`,source:{kind:"app",id:i,label:`app:${n.name}`,adapterId:"ws"},sender:i,senderName:n.name,threadId:`app:${i}`,timestamp:new Date,files:[f],meta:{deviceId:i,defaultAgentId:n.defaultAgentId}};this.onWorkItem(h)}catch(f){te.error("Image processing failed",{deviceId:i,filename:c.filename,error:String(f)}),this.send(t,{type:"error",message:"Failed to process image"})}}}catch(c){te.error("Message handling error",{deviceId:i,error:String(c)}),this.send(t,{type:"error",message:"Internal error"})}}),t.on("close",()=>{te.info("Device disconnected",{deviceId:i}),this.connections.delete(i)}),t.on("error",l=>{te.error("WebSocket error",{deviceId:i,error:String(l)})})}),await new Promise(t=>{this.server.listen(this.port,()=>{te.info("WebSocket server listening",{port:this.port}),t()})})}async deliver(e){let t=e.workItem.meta?.deviceId;if(!t){te.warn("No deviceId in WorkResult, cannot deliver");return}let r=e.error?`Error: ${e.error}`:e.text,n=e.workItem.meta?.channelId;n&&this.teamStore&&await this.teamStore.saveMessage({channelId:n,senderId:e.agentId,senderType:"agent",senderName:e.agentId,text:r,createdAt:new Date});let i={type:"message",text:r,agentId:e.agentId,agentName:e.agentId,replyTo:e.workItem.id,...n?{channelId:n}:{}},o=this.connections.get(t);if(o&&o.readyState===xr.default.OPEN)this.send(o,i);else{te.info("Device not connected, buffering message",{deviceId:t});let a=this.pendingMessages.get(t)??[];a.push(i),this.pendingMessages.set(t,a)}}async onProcessingStart(e){let t=e.meta?.deviceId;if(!t)return;let r=this.connections.get(t);r&&r.readyState===xr.default.OPEN&&this.send(r,{type:"typing",agentId:e.meta?.defaultAgentId??"unknown"})}async onProcessingEnd(e){}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()}),te.info("WebSocket adapter stopped")}get connectionCount(){return this.connections.size}async verifyChannelMembership(e,t,r){let n=await this.teamStore?.getChannel(t);return n?n.members.includes(r)?n:(this.send(e,{type:"error",message:"Not a member of this channel"}),null):(this.send(e,{type:"error",message:"Channel not found"}),null)}async handleTeamMessage(e,t,r,n){this.send(e,{type:"ack",id:t.id});let i=await this.verifyChannelMembership(e,t.channelId,n);if(!i)return;this.teamStore&&await this.teamStore.saveMessage({channelId:t.channelId,threadId:t.threadId,senderId:n,senderType:"person",senderName:r.name,text:t.text,createdAt:new Date});let o=i.type==="dm"?i.members.find(l=>l!==n):void 0,a={id:t.id||Lr(),text:t.text,source:{kind:"team",id:t.channelId,label:`team:${i?.name??t.channelId}`,adapterId:"ws"},sender:n,senderName:r.name,threadId:t.threadId??`team:${t.channelId}`,timestamp:new Date,meta:{deviceId:n,channelId:t.channelId,...o?{targetAgentId:o}:{defaultAgentId:r.defaultAgentId}}};this.onWorkItem(a)}async handleTeamImage(e,t,r,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=Ew(t.filename);try{let l=await or(o,t.filename,a);this.teamStore&&await this.teamStore.saveMessage({channelId:t.channelId,senderId:n,senderType:"person",senderName:r.name,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||Lr(),text:`[Photo: ${t.filename}]`,source:{kind:"team",id:t.channelId,label:`team:${i?.name??t.channelId}`,adapterId:"ws"},sender:n,senderName:r.name,threadId:`team:${t.channelId}`,timestamp:new Date,files:[l],meta:{deviceId:n,channelId:t.channelId,...c?{targetAgentId:c}:{defaultAgentId:r.defaultAgentId}}};this.onWorkItem(d)}catch(l){te.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,r,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 or(o,t.filename,t.mimetype):await eh(o,t.filename,t.mimetype);this.teamStore&&await this.teamStore.saveMessage({channelId:t.channelId,senderId:n,senderType:"person",senderName:r.name,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||Lr(),text:`[File: ${t.filename}]`,source:{kind:"team",id:t.channelId,label:`team:${i?.name??t.channelId}`,adapterId:"ws"},sender:n,senderName:r.name,threadId:`team:${t.channelId}`,timestamp:new Date,files:[a],meta:{deviceId:n,channelId:t.channelId,...l?{targetAgentId:l}:{defaultAgentId:r.defaultAgentId}}};this.onWorkItem(c)}catch(a){te.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,r,n){if(this.send(e,{type:"ack",id:t.id}),!this.commandRegistry){this.send(e,{type:"error",message:"Commands not available"});return}let{found:i,result:o}=await this.commandRegistry.execute(t.name,{channelId:t.channelId,senderId:n,senderName:r.name,args:t.args});if(!i){await this.handleTeamMessage(e,{type:"message",channelId:t.channelId,text:`/${t.name} ${t.args.join(" ")}`.trim(),id:t.id},r,n);return}this.teamStore&&o&&await this.teamStore.saveMessage({channelId:t.channelId,senderId:"system",senderType:"agent",senderName:"system",text:o,command:{name:t.name,args:t.args,result:o},createdAt:new Date}),this.send(e,{type:"message",text:o??"Done.",agentId:"system",agentName:"system",replyTo:t.id})}async handleCommandList(e,t){let r=this.commandRegistry?.list()??[];this.send(e,{type:"command_list",commands:r.map(n=>({name:n.name,description:n.description,args:n.args})),id:t.id})}async handleChannelList(e,t,r){let n=await this.teamStore?.listChannels(r)??[];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,r){if(!this.teamStore){this.send(e,{type:"error",message:"Team store not available"});return}if(!await this.verifyChannelMembership(e,t.channelId,r))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,r){if(t.channelId.startsWith("dm:")){let i=await this.teamStore?.getChannel(t.channelId);if(!i||!i.members.includes(r)){this.send(e,{type:"error",message:"Cannot join a DM you are not part of"});return}}await this.teamStore?.joinChannel(t.channelId,r)?this.send(e,{type:"channel_event",channelId:t.channelId,event:"joined",detail:{memberId:r},id:t.id}):this.send(e,{type:"error",message:"Failed to join channel"})}async handleLeave(e,t,r){await this.teamStore?.leaveChannel(t.channelId,r)?this.send(e,{type:"channel_event",channelId:t.channelId,event:"left",detail:{memberId:r},id:t.id}):this.send(e,{type:"error",message:"Failed to leave channel"})}async verifyDeviceToken(e){let t=e.headers.authorization,r=t?.startsWith("Bearer ")?t.slice(7):null;return r?this.deviceRegistry.verifyToken(r):null}verifyAdmin(e){let t=e.headers.authorization;return t?t===`Bearer ${this.adminSecret}`:!1}send(e,t){e.readyState===xr.default.OPEN&&e.send(JSON.stringify(t))}}});async function Aw(s,e,t){let r=[];s.soul&&r.push(s.soul),r.push(s.systemPrompt);let n=await e.read("shared/constitution.md");n&&r.push(n),r.push(`## Voice Call Mode
|
|
220
|
+
`),s.destroy();return}let u=i.searchParams.get("origin")??void 0,h={_id:l,label:c,user:d,defaultAgentId:"",origin:u};this.wss.handleUpgrade(t,s,r,p=>{this.wss.emit("connection",p,t,h)})}),this.wss.on("connection",(t,s,r)=>{let i=r._id;ke.info("Device connected",{deviceId:i,label:r.label});let o=this.pendingMessages.get(i);if(o?.length){ke.info("Draining pending messages",{deviceId:i,count:o.length});for(let l of o)this.send(t,l);this.pendingMessages.delete(i)}let a=this.connections.get(i);a&&a.close(1e3,"Replaced by new connection"),this.connections.set(i,t),t.on("message",async l=>{try{let c=zf(l.toString());if(!c){this.send(t,{type:"error",message:"Invalid message format"});return}if(c.type==="ping")return;if(c.type==="command"){await this.handleCommand(t,c,r,i);return}if(c.type==="command_list"){await this.handleCommandList(t,c);return}if(c.type==="channel_list"){await this.handleChannelList(t,c,i);return}if(c.type==="history"){await this.handleHistory(t,c,i);return}if(c.type==="join"){await this.handleJoin(t,c,i);return}if(c.type==="leave"){await this.handleLeave(t,c,i);return}if(c.type==="agent_list"){let d=this.buildAgentList();this.send(t,{type:"agent_list",agents:d,id:c.id});return}if(Qf(c)){c.type==="message"?await this.handleTeamMessage(t,c,r,i):c.type==="image"?await this.handleTeamImage(t,c,r,i):c.type==="file"&&await this.handleTeamFile(t,c,r,i);return}if(c.type==="message"){this.send(t,{type:"ack",id:c.id});let d={id:c.id||tn(),text:c.text,source:{kind:"app",id:i,label:`app:${r.label}`,adapterId:"ws"},sender:i,senderName:r.label,threadId:`app:${i}`,timestamp:new Date,meta:{deviceId:i,defaultAgentId:r.defaultAgentId,origin:r.origin}};this.onWorkItem(d)}if(c.type==="image"){this.send(t,{type:"ack",id:c.id});let d=Buffer.from(c.data,"base64"),u=Zf(c.filename);try{let h=await qs(d,c.filename,u),p={id:c.id||tn(),text:`[Photo: ${c.filename}]`,source:{kind:"app",id:i,label:`app:${r.label}`,adapterId:"ws"},sender:i,senderName:r.label,threadId:`app:${i}`,timestamp:new Date,files:[h],meta:{deviceId:i,defaultAgentId:r.defaultAgentId,origin:r.origin}};this.onWorkItem(p)}catch(h){ke.error("Image processing failed",{deviceId:i,filename:c.filename,error:String(h)}),this.send(t,{type:"error",message:"Failed to process image"})}}}catch(c){ke.error("Message handling error",{deviceId:i,error:String(c)}),this.send(t,{type:"error",message:"Internal error"})}}),t.on("close",()=>{ke.info("Device disconnected",{deviceId:i}),this.connections.delete(i)}),t.on("error",l=>{ke.error("WebSocket error",{deviceId:i,error:String(l)})})}),await new Promise(t=>{this.server.listen(this.port,"127.0.0.1",()=>{ke.info("WebSocket server listening",{port:this.port,host:"127.0.0.1"}),t()})})}async deliver(e){let t=e.workItem.meta?.deviceId;if(!t){ke.warn("No deviceId in WorkResult, cannot deliver");return}let s=e.error?`Error: ${e.error}`:e.text,r=e.workItem.meta?.channelId,i=this.agentRegistry.get(e.agentId)?.name??e.agentId;r&&await this.teamStore.saveMessage({channelId:r,senderId:e.agentId,senderType:"agent",senderName:i,text:s,createdAt:new Date});let o={type:"message",text:s,agentId:e.agentId,agentName:i,replyTo:e.workItem.id,...r?{channelId:r}:{}},a=this.connections.get(t);if(a&&a.readyState===en.default.OPEN)this.send(a,o);else{ke.info("Device not connected, buffering message",{deviceId:t});let l=this.pendingMessages.get(t)??[];l.push(o),this.pendingMessages.set(t,l)}}async onProcessingStart(e,t){let s=e.meta?.deviceId;if(!s)return;let r=this.connections.get(s);r&&r.readyState===en.default.OPEN&&this.send(r,{type:"typing",agentId:t})}async onProcessingEnd(e,t){}async stop(){for(let[e,t]of this.connections)t.close(1001,"Server shutting down");this.connections.clear(),await new Promise(e=>{this.wss&&this.wss.close(()=>{}),this.server?this.server.close(()=>e()):e()}),ke.info("WebSocket adapter stopped")}get connectionCount(){return this.connections.size}async verifyChannelMembership(e,t,s){let r=await this.teamStore.getChannel(t);return r?r.members.includes(s)?r:(this.send(e,{type:"error",message:"Not a member of this channel"}),null):(this.send(e,{type:"error",message:"Channel not found"}),null)}buildAgentList(){return this.agentRegistry.getAll().map(e=>{let t=this.agentManager.getState(e.id);return{id:e.id,name:e.name,icon:e.icon,title:e.title??null,model:e.model,status:t?.status??"idle",tools:[...new Set([...e.coreServers,...e.delegateServers])].sort(),schedule:e.schedule.map(s=>({cron:s.cron,task:s.task})),channels:e.channels,messagesProcessed:t?.messagesProcessed??0,lastActivity:t?t.lastActivity.toISOString():null}})}async handleTeamMessage(e,t,s,r){this.send(e,{type:"ack",id:t.id});let i=await this.verifyChannelMembership(e,t.channelId,r);if(!i)return;await this.teamStore.saveMessage({channelId:t.channelId,threadId:t.threadId,senderId:r,senderType:"person",senderName:s.label,text:t.text,createdAt:new Date});let o=i.type==="dm"?i.members.find(l=>l!==r):void 0,a={id:t.id||tn(),text:t.text,source:{kind:"team",id:t.channelId,label:`team:${i?.name??t.channelId}`,adapterId:"ws"},sender:r,senderName:s.label,threadId:t.threadId??`team:${t.channelId}`,timestamp:new Date,meta:{deviceId:r,channelId:t.channelId,...s.user?{user:s.user}:{},...o?{targetAgentId:o}:{defaultAgentId:s.defaultAgentId}}};this.onWorkItem(a)}async handleTeamImage(e,t,s,r){this.send(e,{type:"ack",id:t.id});let i=await this.verifyChannelMembership(e,t.channelId,r);if(!i)return;let o=Buffer.from(t.data,"base64"),a=Zf(t.filename);try{let l=await qs(o,t.filename,a);await this.teamStore.saveMessage({channelId:t.channelId,senderId:r,senderType:"person",senderName:s.label,text:`[Photo: ${t.filename}]`,files:[{name:l.name,mimetype:l.mimetype,size:l.size,storageKey:l.localPath,isImage:!0}],createdAt:new Date});let c=i.type==="dm"?i.members.find(u=>u!==r):void 0,d={id:t.id||tn(),text:`[Photo: ${t.filename}]`,source:{kind:"team",id:t.channelId,label:`team:${i?.name??t.channelId}`,adapterId:"ws"},sender:r,senderName:s.label,threadId:`team:${t.channelId}`,timestamp:new Date,files:[l],meta:{deviceId:r,channelId:t.channelId,...s.user?{user:s.user}:{},...c?{targetAgentId:c}:{defaultAgentId:s.defaultAgentId}}};this.onWorkItem(d)}catch(l){ke.error("Team image processing failed",{deviceId:r,filename:t.filename,error:String(l)}),this.send(e,{type:"error",message:"Failed to process image"})}}async handleTeamFile(e,t,s,r){this.send(e,{type:"ack",id:t.id});let i=await this.verifyChannelMembership(e,t.channelId,r);if(!i)return;let o=Buffer.from(t.data,"base64");try{let a=t.mimetype.startsWith("image/")?await qs(o,t.filename,t.mimetype):await th(o,t.filename,t.mimetype);await this.teamStore.saveMessage({channelId:t.channelId,senderId:r,senderType:"person",senderName:s.label,text:`[File: ${t.filename}]`,files:[{name:a.name,mimetype:a.mimetype,size:a.size,storageKey:a.localPath,isImage:a.isImage}],createdAt:new Date});let l=i.type==="dm"?i.members.find(d=>d!==r):void 0,c={id:t.id||tn(),text:`[File: ${t.filename}]`,source:{kind:"team",id:t.channelId,label:`team:${i?.name??t.channelId}`,adapterId:"ws"},sender:r,senderName:s.label,threadId:`team:${t.channelId}`,timestamp:new Date,files:[a],meta:{deviceId:r,channelId:t.channelId,...s.user?{user:s.user}:{},...l?{targetAgentId:l}:{defaultAgentId:s.defaultAgentId}}};this.onWorkItem(c)}catch(a){ke.error("Team file processing failed",{deviceId:r,filename:t.filename,error:String(a)}),this.send(e,{type:"error",message:"Failed to process file"})}}async handleCommand(e,t,s,r){if(this.send(e,{type:"ack",id:t.id}),!this.commandRegistry.has(t.name)){this.send(e,{type:"error",message:`Unknown command: /${t.name}`});return}let{result:i}=await this.commandRegistry.execute(t.name,{channelId:t.channelId,senderId:r,senderName:s.label,args:t.args});i&&await this.teamStore.saveMessage({channelId:t.channelId,senderId:"system",senderType:"agent",senderName:"system",text:i,command:{name:t.name,args:t.args,result:i},createdAt:new Date}),this.send(e,{type:"message",text:i??"Done.",agentId:"system",agentName:"system",replyTo:t.id})}async handleCommandList(e,t){let s=this.commandRegistry.list();this.send(e,{type:"command_list",commands:s.map(r=>({name:r.name,description:r.description,args:r.args})),id:t.id})}async handleChannelList(e,t,s){let r=await this.teamStore.listChannels(s);this.send(e,{type:"channel_list",channels:r.map(i=>({id:i._id,type:i.type,name:i.name,members:i.members})),id:t.id})}async handleHistory(e,t,s){if(!await this.verifyChannelMembership(e,t.channelId,s))return;let{messages:r,hasMore:i}=await this.teamStore.getHistory(t.channelId,{before:t.before,limit:t.limit});this.send(e,{type:"history",channelId:t.channelId,messages:r.map(o=>({id:o._id??"",senderId:o.senderId,senderType:o.senderType,senderName:o.senderName,text:o.text,threadId:o.threadId,createdAt:o.createdAt.toISOString()})),hasMore:i,id:t.id})}async handleJoin(e,t,s){if(t.channelId.startsWith("dm:")){let i=await this.teamStore.getChannel(t.channelId);if(!i||!i.members.includes(s)){this.send(e,{type:"error",message:"Cannot join a DM you are not part of"});return}}await this.teamStore.joinChannel(t.channelId,s)?this.send(e,{type:"channel_event",channelId:t.channelId,event:"joined",detail:{memberId:s},id:t.id}):this.send(e,{type:"error",message:"Failed to join channel"})}async handleLeave(e,t,s){await this.teamStore.leaveChannel(t.channelId,s)?this.send(e,{type:"channel_event",channelId:t.channelId,event:"left",detail:{memberId:s},id:t.id}):this.send(e,{type:"error",message:"Failed to leave channel"})}send(e,t){e.readyState===en.default.OPEN&&e.send(JSON.stringify(t))}}});var sp={};Pe(sp,{startBeekeeperRegistration:()=>ck});function ck(n){let{beekeeperPort:e,wsPort:t}=n,s=n.intervalMs??3e4,r=`http://127.0.0.1:${e}/internal/register-capability`,i={name:n.capabilityName??"hive",localWsUrl:`ws://127.0.0.1:${t}`,healthUrl:`http://127.0.0.1:${t}/health`},o=JSON.stringify(i),a=async()=>{try{let c=await fetch(r,{method:"POST",headers:{"content-type":"application/json"},body:o});if(c.ok)Za.debug("Registered with beekeeper",{beekeeperPort:e,wsPort:t});else{let d=await c.text().catch(()=>"");Za.warn("Beekeeper registration failed",{status:c.status,body:d})}}catch(c){Za.warn("Beekeeper registration error",{error:String(c)})}};a();let l=setInterval(()=>{a()},s);return{stop:()=>clearInterval(l)}}var Za,np=q(()=>{"use strict";O();Za=I("beekeeper-client")});async function rp(n,e,t){let s=[];n.soul&&s.push(n.soul),s.push(n.systemPrompt);let r=await e.read("shared/constitution.md");r&&s.push(r),s.push(`## Voice Call Mode
|
|
214
221
|
|
|
215
|
-
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&&
|
|
222
|
+
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
|
|
216
223
|
|
|
217
|
-
${t.goal}`),t?.context&&
|
|
224
|
+
${t.goal}`),t?.context&&s.push(`## Call Context
|
|
218
225
|
|
|
219
|
-
${t.context}`);let i=await e.getHotTierPrompt(
|
|
220
|
-
${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
|
|
226
|
+
${t.context}`);let i=await e.getHotTierPrompt(n.id,m.memory.hotBudgetTokens);if(i)s.push(i);else{let l=`agents/${n.id}`,c=await e.read(`${l}/memory.md`);c&&s.push(`## Your Memory
|
|
227
|
+
${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(`
|
|
221
228
|
|
|
222
229
|
---
|
|
223
230
|
|
|
224
|
-
`)}var
|
|
231
|
+
`)}var ip=q(()=>{"use strict";Oe()});function op(n,e){let t=[];for(let s of n)if(s.role!=="system")if(s.role==="user")t.push({role:"user",content:s.content??""});else if(s.role==="assistant")if(s.tool_calls&&s.tool_calls.length>0){let r=[];s.content&&r.push({type:"text",text:s.content});for(let i of s.tool_calls)r.push({type:"tool_use",id:i.id,name:i.function.name,input:lk(i.function.arguments)});t.push({role:"assistant",content:r})}else t.push({role:"assistant",content:s.content??""});else s.role==="tool"&&t.push({role:"user",content:[{type:"tool_result",tool_use_id:s.tool_call_id??"",content:s.content??""}]});return(t.length===0||t[0].role!=="user")&&t.unshift({role:"user",content:"[Call connected]"}),{system:e,messages:t}}function ap(n){if(!(!n||n.length===0))return n.map(e=>({name:e.function.name,description:e.function.description??"",input_schema:e.function.parameters??{type:"object",properties:{}}}))}function cp(n,e,t){let s={id:n,object:"chat.completion.chunk",created:Math.floor(Date.now()/1e3),model:t,choices:[{index:0,delta:{content:e},finish_reason:null}]};return`data: ${JSON.stringify(s)}
|
|
225
232
|
|
|
226
|
-
`}function
|
|
233
|
+
`}function ec(n,e,t="stop"){let s={id:n,object:"chat.completion.chunk",created:Math.floor(Date.now()/1e3),model:e,choices:[{index:0,delta:{},finish_reason:t}]};return`data: ${JSON.stringify(s)}
|
|
227
234
|
|
|
228
235
|
data: [DONE]
|
|
229
236
|
|
|
230
|
-
`}function
|
|
237
|
+
`}function lp(n,e,t){return{id:n,object:"chat.completion",created:Math.floor(Date.now()/1e3),model:t,choices:[{index:0,message:{role:"assistant",content:e},finish_reason:"stop"}]}}function lk(n){if(!n)return{};try{return JSON.parse(n)}catch{return{}}}var dp=q(()=>{"use strict"});var hp={};Pe(hp,{VoiceAdapter:()=>tc});import{createServer as dk}from"node:http";import uk from"@anthropic-ai/sdk";import{randomUUID as up}from"node:crypto";function fk(n){return new Promise((e,t)=>{let s=[];n.on("data",r=>s.push(r)),n.on("end",()=>e(Buffer.concat(s).toString("utf-8"))),n.on("error",t)})}var De,hk,tc,fp=q(()=>{"use strict";O();ip();dp();Oe();De=I("voice-adapter"),hk=7200*1e3,tc=class{port;serverSecret;registry;memoryManager;httpServer;anthropic;sessions=new Map;sweepTimer;constructor(e,t,s,r){this.port=e,this.serverSecret=t,this.registry=s,this.memoryManager=r,this.anthropic=new uk}async start(){this.httpServer=dk((e,t)=>{this.handleRequest(e,t).catch(s=>{De.error("Voice request handler error",{error:String(s)}),t.headersSent||(t.writeHead(500,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Internal server error"})))})}),await new Promise(e=>{this.httpServer.listen(this.port,()=>e())}),this.sweepTimer=setInterval(()=>this.sweepStaleSessions(),1800*1e3),De.info("Voice adapter started",{port:this.port})}stop(){this.sweepTimer&&clearInterval(this.sweepTimer),this.httpServer?.close(),De.info("Voice adapter stopped")}sweepStaleSessions(){let e=Date.now(),t=0;for(let[s,r]of this.sessions)e-r.startedAt.getTime()>hk&&(this.sessions.delete(s),t++);t>0&&De.info("Swept stale voice sessions",{count:t})}async handleRequest(e,t){if(!this.serverSecret){De.error("Voice endpoint called but VAPI_SERVER_SECRET not configured \u2014 rejecting"),t.writeHead(403,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Server secret not configured"}));return}if((e.headers["x-vapi-secret"]??e.headers["server-secret"]??"")!==this.serverSecret){De.warn("Voice request rejected \u2014 invalid server secret"),t.writeHead(401,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Unauthorized"}));return}if(e.method==="GET"&&e.url==="/health"){t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({status:"ok",activeCalls:this.sessions.size}));return}if(e.method!=="POST"||e.url!=="/v1/chat/completions"){t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Not found"}));return}let r=await fk(e),i;try{i=JSON.parse(r)}catch{t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Invalid JSON"}));return}let o=this.resolveAgentId(i);if(!o){De.error("Could not resolve agent ID from Vapi request"),t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Cannot determine agent identity"}));return}let a=this.registry.get(o);if(!a){De.error("Agent not found",{agentId:o}),t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:`Agent not found: ${o}`}));return}let l=i.call?.id??up();this.sessions.has(l)||(this.sessions.set(l,{callId:l,agentId:o,startedAt:new Date}),De.info("Voice call session started",{callId:l,agentId:o}));let c=i.call?.metadata,d=await rp(a,this.memoryManager,{goal:c?.goal,context:c?.context}),{system:u,messages:h}=op(i.messages,d),p=ap(i.tools),g=a.model,f=`chatcmpl-${up()}`;if(i.stream===!1){let S=(await this.anthropic.messages.create({model:g,max_tokens:1024,system:u,messages:h,...p?{tools:p}:{}})).content.filter(b=>b.type==="text").map(b=>b.text).join("");t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify(lp(f,S,g)));return}t.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"});try{let y=this.anthropic.messages.stream({model:g,max_tokens:1024,system:u,messages:h,...p?{tools:p}:{}});for await(let w of y)if(w.type==="content_block_delta"){let S=w.delta;S.type==="text_delta"&&t.write(cp(f,S.text??"",g))}t.writableEnded||t.write(ec(f,g))}catch(y){De.error("Claude streaming error",{error:String(y),callId:l,agentId:o}),t.writableEnded||t.write(ec(f,g,"error"))}t.end()}resolveAgentId(e){let t=e.assistant?.metadata;if(t?.hive_agent_id)return t.hive_agent_id;let s=e.assistant?.id;if(s&&m.voice.assistants[s])return m.voice.assistants[s];let r=e.call?.metadata;if(r?.hive_agent_id)return r.hive_agent_id}}});rs();pi();import{existsSync as pk,watch as mk}from"node:fs";import{MongoClient as gk}from"mongodb";O();import{existsSync as cc,readFileSync as lc,readdirSync as Cp,statSync as Nk,writeFileSync as Ok,mkdirSync as xk}from"node:fs";import{resolve as dc,join as Dk}from"node:path";import{createHash as Ep}from"node:crypto";var mi=I("integrity");function uc(n,e){let t=dc(e,"installed-snapshot.json");if(!cc(t))return mi.warn("No installed-snapshot.json \u2014 skipping integrity check (first install?)"),{ok:!0,warnings:[]};let s=JSON.parse(lc(t,"utf-8"));if(!Array.isArray(s))return{ok:!1,warnings:[`installed-snapshot.json is malformed (expected array, got ${typeof s})`]};let r=s,i=[];for(let o of r){let a=dc(n,o.path);if(!cc(a)){i.push(`missing: ${o.path}`);continue}let l=lc(a);Ep("sha256").update(l).digest("hex")!==o.hash&&i.push(`modified: ${o.path}`)}if(i.length>0)throw mi.error("Package integrity check FAILED \u2014 refusing to start",{drift:i}),new Error(`Package integrity check failed. ${i.length} file(s) have been modified or are missing:
|
|
238
|
+
`+i.map(o=>` - ${o}`).join(`
|
|
239
|
+
`)+`
|
|
240
|
+
Reinstall with: npm install @keepur/hive@<version>`);return{ok:!0,warnings:[]}}function hc(n){let e=["skills","plugins",".hive",".env","hive.yaml","hive-"],t=new Set(["dist","node_modules","package.json","package-lock.json","pkg","seeds","templates"]);try{let s=Cp(n),r=[];for(let i of s)t.has(i)||i.startsWith(".")&&i!==".hive"||e.some(o=>i.startsWith(o.replace("/","")))||r.push(i);r.length>0&&mi.warn("Unexpected files in instance directory",{files:r})}catch{}}O();import{existsSync as gi,readFileSync as Np,writeFileSync as Op,mkdirSync as xp}from"node:fs";import{resolve as yi}from"node:path";var fc=I("upgrade-notice");function pc(n,e){let t=yi(n,"upgrade-notice-emitted");if(gi(t))return;let s=yi(n,"previous-snapshot.json");if(gi(s))try{let r=JSON.parse(Np(s,"utf-8")),i=[];for(let l of r)if(typeof l.path=="string"&&l.path.startsWith("skills/")&&l.path.endsWith("SKILL.md")){let c=l.path.match(/^skills\/([^/]+)\//);c&&!gi(yi(e,c[1]))&&i.push(c[1])}if(i.length===0)return;let o=[...new Set(i)],a=["","=".repeat(72),"Your previous version of hive shipped the following skills in its tarball:",...o.map(l=>` - ${l}`),"","These are no longer part of the hive core package. You can re-install any of","them from the default Keepur registry with:",""," hive skill add <name>","","Agent-authored skills you or your agents wrote on this hive are unaffected and","continue to work. This notice only appears once.","=".repeat(72),""].join(`
|
|
241
|
+
`);fc.info(a),xp(n,{recursive:!0}),Op(t,new Date().toISOString())}catch(r){fc.warn("Failed to check upgrade notice",{error:String(r)})}}Oe();O();O();ta();var te={maxConcurrent:3,timeoutMs:3e5,budgetUsd:10,maxTurns:200,icon:"",keywords:[],passiveChannels:[],delegatePrompts:{},schedule:[]};function gu(n,e){return{id:n._id,name:n.name,model:n.model,channels:n.channels??[],homeBase:n.homeBase,catches:n.catches,passiveChannels:n.passiveChannels??te.passiveChannels,keywords:n.keywords??te.keywords,isDefault:n.isDefault??!1,schedule:n.schedule??te.schedule,budgetUsd:n.budgetUsd??te.budgetUsd,maxTurns:n.maxTurns??te.maxTurns,icon:n.icon??te.icon,slackBot:n.slackBot,coreServers:n.coreServers??[],delegateServers:n.delegateServers??[],plugins:n.plugins,maxConcurrent:n.maxConcurrent??te.maxConcurrent,timeoutMs:n.timeoutMs??te.timeoutMs,betas:n.betas,metadata:n.metadata,disabled:n.disabled??!1,subscribe:n.subscribe??[],resourceTiers:n.resourceTiers,delegatePrompts:n.delegatePrompts??te.delegatePrompts,soul:n.soul??"",systemPrompt:n.systemPrompt??"",archetype:n.archetype,title:n.title,archetypeConfig:n.archetypeConfig,autonomy:cu(e,n.autonomy)}}Oe();ar();ar();import{statSync as AS}from"node:fs";import{normalize as Su,resolve as bu}from"node:path";var _u=new Set(["linear","github","clickup"]);function vu(n){if(!n||typeof n!="object")throw new Error("software-engineer archetypeConfig must be an object");let e=n;if(typeof e.workshop!="string"||!e.workshop.startsWith("/"))throw new Error("workshop must be an absolute path");let t=Su(e.workshop);ku(t,"workshop");let s=e.workspaces??[];if(!Array.isArray(s))throw new Error("workspaces must be an array");let r=new Set,i=s.map((o,a)=>{if(!o||typeof o!="object")throw new Error(`workspaces[${a}]: must be an object`);let l=o;if(typeof l.name!="string"||l.name.length===0)throw new Error(`workspaces[${a}]: name is required`);if(r.has(l.name))throw new Error(`workspaces[${a}]: duplicate workspace name "${l.name}"`);if(r.add(l.name),typeof l.path!="string"||!l.path.startsWith("/"))throw new Error(`workspaces[${a}] (${l.name}): path must be an absolute path`);let c=Su(l.path);ku(c,`workspaces[${a}] (${l.name})`);let d=bu(c),u=bu(t);if(!d.startsWith(u+"/"))throw new Error(`workspaces[${a}] (${l.name}): path must be inside workshop (${t}), got ${c}`);if(!l.tracker||typeof l.tracker!="object")throw new Error(`workspaces[${a}] (${l.name}): tracker is required`);let h=l.tracker;if(typeof h.type!="string"||!_u.has(h.type))throw new Error(`workspaces[${a}] (${l.name}): tracker.type must be one of: ${[..._u].join(", ")}`);return CS(h,a,l.name),{name:l.name,path:c,tracker:h,...l.primary===!0?{primary:!0}:{}}});return{workshop:t,workspaces:i}}function ku(n,e){let t;try{t=AS(n)}catch{throw new Error(`${e}: path does not exist: ${n}`)}if(!t.isDirectory())throw new Error(`${e}: path is not a directory: ${n}`)}function CS(n,e,t){switch(n.type){case"linear":if(typeof n.project!="string"||n.project.length===0)throw new Error(`workspaces[${e}] (${t}): linear tracker requires project`);break;case"github":if(typeof n.repo!="string"||n.repo.length===0)throw new Error(`workspaces[${e}] (${t}): github tracker requires repo`);break;case"clickup":if(typeof n.list!="string"||n.list.length===0)throw new Error(`workspaces[${e}] (${t}): clickup tracker requires list`);break}}function Tu(n){let e=n.archetypeConfig,t=n.agentConfig.title||n.agentConfig.name,s=[];s.push(`# Software Engineer
|
|
242
|
+
|
|
243
|
+
You are a software engineer. Your title is ${t}. Your discipline is owning codebases and shipping production code through disciplined delivery.`);let r=[`Your workshop is \`${e.workshop}\`. This is your working directory.`];if(e.workspaces.length>0){r.push(`
|
|
244
|
+
Workspaces:`);for(let i of e.workspaces){let o=ES(i.tracker),a=i.primary?" (primary)":"";r.push(`- **${i.name}**${a}: \`${i.path}\` \u2014 tracker: ${o}`)}}else r.push(`
|
|
245
|
+
No workspaces configured yet. You have full agency over your entire workshop.`);return s.push(r.join(`
|
|
246
|
+
`)),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
|
|
247
|
+
|
|
248
|
+
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.
|
|
249
|
+
|
|
250
|
+
Never start coding without a filed ticket. Never delegate to \`code_task\` without a ticket reference.`),s.push(`## Delivery Primitives
|
|
251
|
+
|
|
252
|
+
You have four delivery primitives that compose into your workflow:
|
|
253
|
+
|
|
254
|
+
1. **Brainstorm** \u2014 Explore intent, constraints, and approaches with the requester. Ask clarifying questions. Reach alignment before filing a ticket.
|
|
255
|
+
2. **File Ticket** \u2014 Create a ticket in the workspace's tracker with a complete spec (problem, approach, acceptance criteria). The description must be implementable by someone who wasn't in the brainstorm.
|
|
256
|
+
3. **Code Task** \u2014 Delegate implementation to \`code_task\` with the ticket context. Paste the ticket body into the prompt so the inner session has the full spec inline. Use \`code_status\` to check progress. If the session reports NEEDS_CONTEXT or BLOCKED, respond via \`code_respond\` with your answer and context.
|
|
257
|
+
4. **Review** \u2014 Verify the work meets the spec. Check the PR and CI status, then comment on the tracker ticket with the result.`),s.push("## Review Recipe\n\nWhen reviewing completed work:\n1. Check PR state: `gh pr view <number>`\n2. Check CI status: `gh pr checks <number>`\n3. Comment on the tracker ticket with the PR URL and status summary (use the workspace's tracker MCP \u2014 e.g., `linear:create_comment`).\n\nFor workspaces using Linear for tickets and GitHub for code (split-tracker), use `gh` for PR/CI reads and the Linear MCP for ticket comments."),s.push(`## Definition of Done
|
|
258
|
+
|
|
259
|
+
A task is done when ALL of these are true:
|
|
260
|
+
- Ticket filed with complete spec
|
|
261
|
+
- \`code_task\` completed successfully
|
|
262
|
+
- PR merged and CI green
|
|
263
|
+
- Ticket closed in the tracker`),s.push(`## Guardrails
|
|
264
|
+
|
|
265
|
+
- **Never** directly edit files inside a workspace \u2014 always via \`code_task\`
|
|
266
|
+
- **Never** start implementation without a filed ticket
|
|
267
|
+
- **Never** delegate to \`code_task\` without the ticket context in the prompt
|
|
268
|
+
- **Always** verify PR + CI status before closing a ticket
|
|
269
|
+
- **Always** file a ticket before delegating work`),s.join(`
|
|
270
|
+
|
|
271
|
+
`)}function ES(n){switch(n.type){case"linear":return`Linear (project: ${n.project})`;case"github":return`GitHub Issues (repo: ${n.repo})`;case"clickup":return`ClickUp (list: ${n.list})`;default:return n.type}}import{resolve as NS}from"node:path";import{normalize as Iu,resolve as Au}from"node:path";function ra(n){if(typeof n!="string"||!n.startsWith("/"))throw new Error(`claudeProjectSlug: path must be absolute, got ${String(n)}`);return n.replace(/\/+$/,"").replace(/[/_.]/g,"-").replace(/-+/g,"-")}function Cu(n,e){let t=Iu(Au(n));return e.workspaces.find(s=>{let r=Iu(Au(s.path));return t===r||t.startsWith(r+"/")})}function Eu(n){return ra(n.workshop)}function Nu(n){return ra(n.path)}var OS=new Set(["Edit","Write","MultiEdit","NotebookEdit"]);function xS(n,e){return n==="NotebookEdit"?e.notebook_path??e.file_path:e.file_path}function Ou(n){let e=n.archetypeConfig;return e.workspaces.length===0?[]:[{hooks:[async t=>{try{let s=t,r=s.tool_name??"";if(!OS.has(r))return{continue:!0};let i=xS(r,s.tool_input??{});if(typeof i!="string"||i.length===0)return{continue:!0};let o=NS(e.workshop,i),a=Cu(o,e);return a?{hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:`${r} blocked: \`${o}\` is inside workspace \`${a.name}\`. Code changes inside workspaces flow through \`code_task\`, not direct edits \u2014 this preserves the spec \u2192 plan \u2192 PR \u2192 CI discipline. If you're drafting a prototype, work inside the workshop outside any workspace. If you're ready to implement against a ticket, use \`code_task\` with the ticket ID.`}}:{continue:!0}}catch(s){return{hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:`Software-engineer hook internal error: ${String(s)}. All file mutations blocked until the archetype is fixed.`}}}}]}]}import{homedir as MS}from"node:os";import{join as xu}from"node:path";function Mu(n){let e=n.archetypeConfig,t=MS(),s=[];s.push({id:"workshop",backing:"filesystem",dir:xu(t,".claude/projects",Eu(e),"memory")});for(let r of e.workspaces)s.push({id:`workspace:${r.name}`,backing:"filesystem",dir:xu(t,".claude/projects",Nu(r),"memory")});return s}function Du(n){return{cwd:n.archetypeConfig.workshop,settingSources:["project"]}}wu({id:"software-engineer",validateConfig:vu,systemPromptCard:Tu,preToolUseHooks:Ou,memoryScopes:Mu,sessionOptions:Du});var he=I("agent-registry"),Lu=3e4,cr=class{agents=new Map;originToAgent=new Map;disabledAgents=[];agentDefs;changeStream=null;pollTimer=null;lastPollTime=new Date(0);onReload;constructor(e,t){this.agentDefs=e,this.onReload=t}async load(){let e=await this.agentDefs.find().toArray(),t=new Set(this.agents.keys()),s=new Set,r=[],i=[],o=[],a=[];for(let l of e){let c=gu(l,m.autonomy);if(s.add(c.id),c.disabled){a.push(c),this.agents.has(c.id)&&(this.agents.delete(c.id),o.push(c.id),he.info("Disabled agent removed from active map",{id:c.id}));continue}if(c.archetype){let d=or(c.archetype);if(!d)he.warn("Unknown archetype \u2014 loading agent as unstructured",{id:c.id,archetype:c.archetype}),c.archetype=void 0,c.archetypeConfig=void 0;else try{c.archetypeConfig=d.validateConfig(c.archetypeConfig)}catch(u){he.error("Archetype config validation failed \u2014 agent will not load",{id:c.id,archetype:c.archetype,error:String(u)}),this.agents.has(c.id)&&(this.agents.delete(c.id),o.push(c.id),he.warn("Evicted previously-loaded agent due to archetype validation failure",{id:c.id}));continue}}t.has(c.id)?i.push(c.id):r.push(c.id),this.agents.set(c.id,c),he.info("Loaded agent",{id:c.id,name:c.name})}this.disabledAgents=a;for(let l of t)s.has(l)||(this.agents.delete(l),o.push(l),he.info("Removed agent",{id:l}));return this.lastPollTime=new Date,this.rebuildOriginIndex(),{added:r,updated:i,removed:o}}async startWatching(){try{this.changeStream=this.agentDefs.watch([],{fullDocument:"updateLookup"}),this.changeStream.on("change",()=>{he.info("Agent definition changed (change stream), triggering reload"),this.onReload?.()}),this.changeStream.on("error",e=>{he.warn("Change stream error, falling back to polling",{error:String(e)}),this.changeStream=null,this.startPolling()}),he.info("Agent registry watching via change stream")}catch{he.info("Change stream not available, using polling fallback"),this.startPolling()}}startPolling(){this.pollTimer=setInterval(async()=>{try{let e=await this.agentDefs.countDocuments({updatedAt:{$gt:this.lastPollTime}});e>0&&(he.info("Agent definitions changed (poll), triggering reload",{changed:e}),this.onReload?.())}catch(e){he.error("Poll check failed",{error:String(e)})}},Lu),he.info("Agent registry watching via polling",{intervalMs:Lu})}rebuildOriginIndex(){this.originToAgent.clear();let e=[...this.agents.values()].sort((t,s)=>t.id.localeCompare(s.id));for(let t of e)for(let s of t.catches??[]){if(this.originToAgent.has(s)){he.error("Origin conflict \u2014 first sorted agent wins",{origin:s,winner:this.originToAgent.get(s),loser:t.id});continue}this.originToAgent.set(s,t.id)}}stopWatching(){this.changeStream&&(this.changeStream.close().catch(()=>{}),this.changeStream=null),this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null)}get(e){return this.agents.get(e)}getAll(){return Array.from(this.agents.values())}async getAllDefinitions(){return this.agentDefs.find().toArray()}listIds(){return Array.from(this.agents.keys())}findByChannel(e){return this.getAll().find(t=>!t.disabled&&t.channels.includes(e))}findByOrigin(e){let t=this.originToAgent.get(e);return t?this.agents.get(t):void 0}isPassiveChannel(e){return this.getAll().some(t=>!t.disabled&&t.passiveChannels.includes(e))}findByKeyword(e){let t=e.toLowerCase();return this.getAll().find(s=>!s.disabled&&s.keywords.some(r=>{let i=r.toLowerCase().replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`\\b${i}\\b`).test(t)}))}findByName(e){return this.findAllByName(e)[0]}findAllByName(e){return this.getAll().filter(t=>{if(t.disabled)return!1;let s=t.name.toLowerCase();if(new RegExp(`(?:^|hey\\s+|@)${s}\\b|\\b${s}[,:]`,"i").test(e))return!0;if(s.includes(" ")){let i=s.split(" ")[0];return new RegExp(`(?:^|hey\\s+|@)${i}\\b|\\b${i}[,:]`,"i").test(e)}return!1})}getDefault(){return this.getAll().find(e=>!e.disabled&&e.isDefault)}getDisabled(){return this.disabledAgents}getSubscriberMap(){let e={};for(let t of this.getAll())if(!t.disabled)for(let s of t.subscribe??[]){let r=s.includes(":")?s.split(":")[0]:s;e[r]||(e[r]=[]),e[r].includes(t.id)||e[r].push(t.id)}return e}};O();fa();js();O();Oe();import{query as r0}from"@anthropic-ai/claude-agent-sdk";var Fs=I("model-router"),i0={haiku:{timeoutMs:12e4,maxTurns:20,budgetUsd:1},sonnet:{timeoutMs:3e5,maxTurns:50,budgetUsd:5},opus:{timeoutMs:6e5,maxTurns:200,budgetUsd:50}};function mr(n,e){let t=i0[n],s=e?.[n];return s?{timeoutMs:s.timeoutMs??t.timeoutMs,maxTurns:s.maxTurns??t.maxTurns,budgetUsd:s.budgetUsd??t.budgetUsd}:{...t}}var at={haiku:0,sonnet:1,opus:2},gr={haiku:"claude-haiku-4-5-20251001",sonnet:"claude-sonnet-4-6",opus:"claude-opus-4-6"};function o0(n){return n.includes("opus")?"opus":n.includes("haiku")?"haiku":"sonnet"}var a0=`You are a model router. Your job is to classify the complexity of a user message and decide which AI model tier should handle it.
|
|
231
272
|
|
|
232
273
|
Tiers:
|
|
233
274
|
- **haiku**: Greetings, simple factual questions, acknowledgments, status checks, yes/no answers, brief lookups, routine updates. Fast and cheap.
|
|
@@ -240,73 +281,36 @@ Rules:
|
|
|
240
281
|
- Look at the TASK complexity, not the message length.
|
|
241
282
|
- Scheduled/cron tasks that say "execute your scheduled X task" are routine \u2192 haiku unless the task itself is complex.
|
|
242
283
|
|
|
243
|
-
Respond with ONLY a JSON object: { "tier": "haiku" | "sonnet" | "opus" }`;function
|
|
284
|
+
Respond with ONLY a JSON object: { "tier": "haiku" | "sonnet" | "opus" }`;function c0(n){try{let s=JSON.parse(n);if(s.tier&&at[s.tier]!==void 0)return s.tier}catch{}let e=n.indexOf("{"),t=n.lastIndexOf("}");if(e!==-1&&t>e)try{let s=JSON.parse(n.slice(e,t+1));if(s.tier&&at[s.tier]!==void 0)return s.tier}catch{}return null}async function rh(n,e,t){let s=o0(e),r=m.modelRouter.model;if(s==="haiku")return{tier:"haiku",model:gr.haiku,costUsd:0,durationMs:0,resourceLimits:mr("haiku",t)};let i=null,o="",a=0,l=0,c=setTimeout(()=>{i&&(Fs.warn("Model router timed out",{timeoutMs:m.modelRouter.timeoutMs}),i.close())},m.modelRouter.timeoutMs);try{i=r0({prompt:n,options:{model:r,systemPrompt:a0,permissionMode:"bypassPermissions",allowDangerouslySkipPermissions:!0,maxTurns:1,maxBudgetUsd:.01,persistSession:!1,thinking:{type:"disabled"},disallowedTools:["Bash","Read","Write","Edit","Glob","Grep","Agent","WebFetch","WebSearch","NotebookEdit"],env:{...process.env,...m.anthropic.apiKey?{ANTHROPIC_API_KEY:m.anthropic.apiKey}:{},CLAUDE_AGENT_SDK_CLIENT_APP:"hive/0.1.0",CLAUDECODE:void 0}}});for await(let h of i){let p=h;if(p.type==="assistant"){let g=p.message?.content;if(Array.isArray(g))for(let f of g)f.type==="text"&&(o=f.text)}if(p.type==="result"){let g=p;a=g.total_cost_usd,l=g.duration_ms,g.subtype==="success"&&g.result&&(o=g.result)}}}catch(h){Fs.warn("Model router query failed, defaulting to sonnet",{error:String(h)});let p=at[s]>=at.sonnet?"sonnet":s;return{tier:p,model:gr[p],costUsd:0,durationMs:0,resourceLimits:mr(p,t)}}finally{clearTimeout(c),i=null}let d=c0(o);if(!d){Fs.warn("Model router parse failed, defaulting to sonnet",{rawText:o.slice(0,200)});let h=at[s]>=at.sonnet?"sonnet":s;return{tier:h,model:gr[h],costUsd:0,durationMs:0,resourceLimits:mr(h,t)}}let u=d;return at[d]>at[s]&&(u=s,Fs.debug("Model router capped by ceiling",{requested:d,ceiling:s})),Fs.info("Model router decision",{tier:u,requested:d,ceiling:s,costUsd:a,durationMs:l,textPreview:n.slice(0,100)}),{tier:u,model:gr[u],costUsd:a,durationMs:l,resourceLimits:mr(u,t)}}Oe();ba();da();rs();import{existsSync as hh,readdirSync as g0,statSync as y0}from"node:fs";import{join as fh}from"node:path";wr();import{QdrantClient as m0}from"@qdrant/js-client-rest";var Sr="conversations",br=class{qdrantUrl;ollamaUrl;qdrant=null;collectionReady=!1;constructor(e,t){this.qdrantUrl=e??process.env.QDRANT_URL??"http://localhost:6333",this.ollamaUrl=t??process.env.OLLAMA_URL??"http://localhost:11434"}getClient(){return this.qdrant||(this.qdrant=new m0({url:this.qdrantUrl})),this.qdrant}async ensureCollection(){if(this.collectionReady)return;let e=this.getClient(),{collections:t}=await e.getCollections();if(!t.some(r=>r.name===Sr)){let i=(await qe(this.ollamaUrl,"test")).length;await e.createCollection(Sr,{vectors:{size:i,distance:"Cosine"}})}this.collectionReady=!0}async index(e){await this.ensureCollection();let t=this.getClient(),s=e.inbound+`
|
|
244
285
|
|
|
245
|
-
`+e.response,
|
|
246
|
-
`),
|
|
286
|
+
`+e.response,r=await qe(this.ollamaUrl,s),i=crypto.randomUUID();await t.upsert(Sr,{points:[{id:i,vector:r,payload:{agentId:e.agentId,threadId:e.threadId,channelId:e.channelId,source:e.source,senderName:e.senderName,timestampUnix:e.timestampUnix,timestamp:e.timestamp,inbound:e.inbound,response:e.response}}]})}async search(e,t,s,r){await this.ensureCollection();let i=this.getClient(),o=await qe(this.ollamaUrl,e),a=[{key:"agentId",match:{value:t}}];return r!==void 0&&a.push({key:"timestampUnix",range:{gte:r}}),(await i.search(Sr,{vector:o,limit:s,with_payload:!0,filter:{must:a}})).map(c=>({agentId:c.payload?.agentId,threadId:c.payload?.threadId,channelId:c.payload?.channelId,source:c.payload?.source,senderName:c.payload?.senderName,timestampUnix:c.payload?.timestampUnix,timestamp:c.payload?.timestamp,inbound:c.payload?.inbound,response:c.payload?.response,score:c.score}))}};var me=I("agent-manager"),w0=new br;function S0(n){if(!hh(n))return[];try{return g0(n).map(e=>fh(n,e)).filter(e=>{try{return y0(e).isDirectory()&&hh(fh(e,"skills"))}catch{return!1}})}catch{return[]}}var _r=class{states=new Map;queues=new Map;processing=new Set;activeRunners=new Map;activeThreads=new Map;registry;memoryManager;sessionStore;plugins;seedDirs;skillIndex;activityLogger;prefetcher;constructor(e,t,s,r,i){this.registry=e,this.memoryManager=t,this.sessionStore=s,this.activityLogger=r,this.prefetcher=i,this.plugins=Sa(m.plugins,le),this.seedDirs=S0(rc),this.skillIndex=la(ze,this.plugins,this.seedDirs)}getPlugins(){return this.plugins}createRunner(e){let t=this.registry.get(e);if(!t)throw new Error(`Unknown agent: ${e}`);let s=JSON.stringify(this.registry.getSubscriberMap());return new Us(t,this.memoryManager,this.plugins,this.skillIndex,s,this.prefetcher)}reloadSkills(){try{this.skillIndex=la(ze,this.plugins,this.seedDirs)}catch(e){me.warn("Skill reload failed, retaining previous index",{error:String(e)})}}ensureState(e){this.states.has(e)||this.states.set(e,{id:e,status:"idle",lastActivity:new Date,messagesProcessed:0,errorCount:0,activeThreadCount:0})}async sendMessage(e,t,s){this.ensureState(e);let r=t.threadId??t.id,i=`${e}:${r}`;return new Promise((o,a)=>{let l=this.queues.get(i)??[];l.push({message:t,onStream:s,resolve:o,reject:a}),this.queues.set(i,l),this.processThreadQueue(e,i).catch(c=>{me.error("processThreadQueue failed unexpectedly",{agentId:e,threadKey:i,error:String(c)}),this.processing.delete(i);let d=this.activeThreads.get(e);d&&(d.delete(i),this.updateThreadCount(e),d.size===0&&this.updateStatus(e,"idle"));let u=this.queues.get(i);if(u){for(let h of u)h.reject(c instanceof Error?c:new Error(String(c)));this.queues.delete(i)}this.retryDeferredThreads(e)})})}async processThreadQueue(e,t){if(this.processing.has(t))return;let s=this.queues.get(t);if(!s||s.length===0)return;let r=this.registry.get(e),i=r?.maxConcurrent??3,o=this.activeThreads.get(e)??new Set;if(o.size>=i){me.debug("Agent at concurrency limit, deferring",{agentId:e,threadKey:t,active:o.size,limit:i});return}this.processing.add(t),o.add(t),this.activeThreads.set(e,o),this.updateStatus(e,"processing"),this.updateThreadCount(e);let a=this.createRunner(e),l=this.activeRunners.get(e)??new Set;l.add(a),this.activeRunners.set(e,l);let c=0,d,u;for(;s.length>0;){let g=s.shift();try{let f=g.message.threadId??g.message.id,y=await this.sessionStore.get(e,f),w={adapterId:g.message.source.adapterId??g.message.source.kind,channelId:g.message.source.id,channelKind:g.message.source.kind,channelLabel:g.message.source.label,threadId:g.message.threadId??g.message.id,slackTs:g.message.meta?.slackTs??"",slackThreadTs:g.message.meta?.slackThreadTs??""},S=g.message.senderName??g.message.sender,b=g.message.source.kind==="team"?g.message.meta?.user:void 0,A;b?A=`[user:${b} via ${S} in #${g.message.source.label}]: ${g.message.text}`:g.message.senderName?A=`[${S} in #${g.message.source.label}]: ${g.message.text}`:A=g.message.text,g.message.files?.length&&(A+=sh(g.message.files));let v,C=0,M;if(m.modelRouter.enabled&&g.message.sender!=="system")try{let j=this.registry.get(e);if(j){let J=await rh(g.message.text,j.model,j.resourceTiers);v=J.model!==j.model?J.model:void 0,C=J.costUsd,M=J.resourceLimits}}catch(j){me.warn("Model router failed, using default",{agentId:e,error:String(j)})}let _=await a.send(A,y,g.onStream,w,v,M);_.costUsd+=C,_.sessionId&&!_.aborted&&this.sessionStore.set(e,f,_.sessionId,{inputTokens:_.inputTokens,outputTokens:_.outputTokens,cacheReadTokens:_.cacheReadTokens,cacheCreationTokens:_.cacheCreationTokens,contextWindow:_.contextWindow,compactions:_.compactions,preCompactTokens:_.preCompactTokens});let L=this.states.get(e);L.messagesProcessed++,L.lastActivity=new Date,L.currentSessionId=_.sessionId,_.error&&(L.errorCount++,y&&this.sessionStore.delete(e,f)),g.resolve(_),c++,d=g,u=_,_.text&&!_.error&&w0.index({agentId:e,threadId:f,channelId:g.message.source.id,source:g.message.source.kind,senderName:g.message.senderName??"unknown",timestampUnix:Math.floor(Date.now()/1e3),timestamp:new Date().toISOString(),inbound:A,response:_.text}).catch(j=>me.warn("Conversation indexing failed",{agentId:e,error:String(j)})),this.activityLogger?.record({agentId:e,threadId:f,timestamp:new Date,sender:g.message.sender,senderName:g.message.senderName,channel:g.message.source.label,channelKind:g.message.source.kind,model:v??r?.model??"unknown",modelTier:void 0,costUsd:_.costUsd,durationMs:_.durationMs,inputTokens:_.inputTokens,outputTokens:_.outputTokens,contextWindow:_.contextWindow,toolCalls:_.toolCalls,toolSummary:_.toolSummary,compactions:_.compactions,streamed:_.streamed,error:_.error})}catch(f){let y=this.states.get(e);y&&(y.errorCount++,y.lastActivity=new Date),this.activityLogger?.record({agentId:e,threadId:g.message.threadId??g.message.id,timestamp:new Date,sender:g.message.sender,senderName:g.message.senderName,channel:g.message.source.label,channelKind:g.message.source.kind,model:r?.model??"unknown",costUsd:0,durationMs:0,inputTokens:0,outputTokens:0,contextWindow:0,toolCalls:0,toolSummary:"none",compactions:0,streamed:!1,error:String(f)}),g.reject(f instanceof Error?f:new Error(String(f)))}}let h=[...r?.coreServers??[],...r?.delegateServers??[]];if((h.includes("memory")||h.includes("structured-memory"))&&u&&d&&!u.error&&!u.aborted&&c>=m.memory.reflectionMinTurns&&d.message.sender!=="system")try{let g=["[System \u2014 end of conversation reflection]","This conversation is wrapping up. Review what was discussed:","- Were any new facts, decisions, or commitments made?","- Did anything contradict or update what you previously knew?","- Should any existing memories be updated or forgotten?","","If yes, use memory_save, memory_update, or memory_forget now.","If nothing worth saving, do nothing."].join(`
|
|
287
|
+
`),f=await a.send(g,u.sessionId);if(me.info("Reflection completed",{agentId:e,threadKey:t,turnCount:c,costUsd:f.costUsd,toolCalls:f.toolCalls,toolSummary:f.toolSummary||void 0}),f.sessionId&&!f.aborted){let y=d.message.threadId??d.message.id;this.sessionStore.set(e,y,f.sessionId,{inputTokens:f.inputTokens,outputTokens:f.outputTokens,cacheReadTokens:f.cacheReadTokens,cacheCreationTokens:f.cacheCreationTokens,contextWindow:f.contextWindow,compactions:f.compactions,preCompactTokens:f.preCompactTokens})}}catch(g){me.warn("Reflection failed, non-critical",{agentId:e,threadKey:t,error:String(g)})}l.delete(a),this.processing.delete(t),o.delete(t),this.queues.delete(t),this.updateThreadCount(e),o.size===0&&this.updateStatus(e,"idle"),this.retryDeferredThreads(e)}updateThreadCount(e){let t=this.states.get(e);t&&(t.activeThreadCount=this.activeThreads.get(e)?.size??0)}retryDeferredThreads(e){let t=`${e}:`;for(let[s,r]of this.queues)if(s.startsWith(t)&&r.length>0&&!this.processing.has(s)){this.processThreadQueue(e,s);break}}updateStatus(e,t){let s=this.states.get(e);s&&(s.status=t,me.debug("Agent status changed",{agentId:e,status:t}))}getState(e){return this.states.get(e)}getAllStates(){return Array.from(this.states.values())}stopAgent(e){let t=this.activeRunners.get(e);if(t){for(let s of t)s.abort();t.clear()}this.activeRunners.delete(e),this.activeThreads.delete(e),this.updateStatus(e,"stopped")}stopAll(){for(let e of this.states.keys())this.stopAgent(e);me.info("All agents stopped")}async findAgentForThread(e){return this.sessionStore.findAgentByThread(e)}async findAgentsForThread(e){return this.sessionStore.findAgentsByThread(e)}restartAgent(e){this.stopAgent(e),this.sessionStore.clearAgent(e),this.states.set(e,{id:e,status:"idle",lastActivity:new Date,messagesProcessed:0,errorCount:0,activeThreadCount:0}),me.info("Agent restarted",{agentId:e})}sweep(){let e=0,t=[];for(let[r,i]of this.states)!this.registry.get(r)&&(i.status==="stopped"||i.status==="idle")&&(this.states.delete(r),this.activeRunners.delete(r),this.activeThreads.delete(r),e++,me.info("Zombie agent state removed",{agentId:r}));for(let r of this.processing){let i=r.split(":")[0],o=this.activeRunners.get(i);if(!o||o.size===0){this.processing.delete(r);let a=this.activeThreads.get(i);a&&(a.delete(r),this.updateThreadCount(i),a.size===0&&this.updateStatus(i,"idle")),e++,me.warn("Stuck processing flag cleared",{threadKey:r,agentId:i});let l=this.queues.get(r);l&&l.length>0&&this.processThreadQueue(i,r).catch(c=>{me.error("Failed to restart stuck queue",{threadKey:r,error:String(c)})})}}let s=new Set;for(let r of this.queues.keys())s.add(r.split(":")[0]);for(let r of s)this.retryDeferredThreads(r);return{component:"agent-manager",pruned:e,retried:0,bytesFreed:0,errors:t}}};O();js();import{SocketModeClient as b0}from"@slack/socket-mode";import{WebClient as _0}from"@slack/web-api";var H=I("slack-gateway"),kr=class n{socket;web;messageHandler=null;threadStartedHandler=null;threadContextHandler=null;botUserId=null;botId=null;peerBotUserIds=new Set;peerBotIds=new Set;channelNameCache=new Map;userNameCache=new Map;integrationChannels=new Set;botToken;constructor(e,t){this.socket=new b0({appToken:e}),this.web=new _0(t),this.botToken=t}addIntegrationChannels(e){for(let t of e)this.integrationChannels.add(t)}addPeerBotIds(e,t){e&&this.peerBotUserIds.add(e),t&&this.peerBotIds.add(t),H.info("Peer bot IDs registered",{peerBotUserIds:[...this.peerBotUserIds],peerBotIds:[...this.peerBotIds]})}get resolvedBotUserId(){return this.botUserId}get resolvedBotId(){return this.botId}onMessage(e){this.messageHandler=e}onThreadStarted(e){this.threadStartedHandler=e}onThreadContextChanged(e){this.threadContextHandler=e}async start(){let e=await this.web.auth.test();this.botUserId=e.user_id,this.botId=e.bot_id??null,H.info("Bot identity resolved",{botUserId:this.botUserId,botId:this.botId}),this.socket.on("message",async({event:t,ack:s})=>{if(await s(),!t||(H.debug("Raw message event",{subtype:t.subtype,bot_id:t.bot_id,user:t.user,channel:t.channel,hasText:!!t.text,hasAttachments:!!t.attachments?.length,hasBlocks:!!t.blocks?.length}),t.user===this.botUserId)||this.peerBotUserIds.has(t.user)||t.bot_id&&t.bot_id===this.botId||t.bot_id&&this.peerBotIds.has(t.bot_id))return;if(t.bot_id||t.subtype){let l=await this.resolveChannelName(t.channel);if(!this.integrationChannels.has(l)){H.info("Message filtered (subtype/bot in non-integration channel)",{channel:t.channel,channelName:l,user:t.user,subtype:t.subtype,bot_id:t.bot_id,hasText:!!t.text});return}H.info("Integration message accepted",{channelName:l,subtype:t.subtype,bot_id:t.bot_id})}let r=await this.resolveChannelName(t.channel),i=t.text??"";if(!i){let l=[...t.blocks??[]];for(let c of t.attachments??[])c.blocks&&l.push(...c.blocks),c.text&&(i+=c.text+`
|
|
247
288
|
`);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(`
|
|
248
289
|
`):"").filter(Boolean).join(`
|
|
249
|
-
`)),i=i.trim()}let o=[];if(t.files?.length&&(
|
|
290
|
+
`)),i=i.trim()}let o=[];if(t.files?.length&&(H.info("Processing file attachments",{count:t.files.length,names:t.files.map(c=>c.name)}),o=(await Promise.all(t.files.map(c=>eh(c,this.botToken)))).filter(Boolean)),!i&&o.length===0){H.info("Skipping message with no extractable text or files",{channel:t.channel,channelName:r,user:t.user,subtype:t.subtype,hasBlocks:!!t.blocks?.length,hasAttachments:!!t.attachments?.length,blockTypes:t.blocks?.map(l=>l.type)});return}!i&&o.length>0&&(i=`[shared ${o.length} file${o.length>1?"s":""}]`),i=await this.resolveUserMentions(i);let a={text:i,channel:t.channel,channelName:r,user:t.user??t.bot_id??"unknown",ts:t.ts,threadTs:t.thread_ts,files:o.length>0?o:void 0};H.info("Message received",{channel:a.channel,channelName:r,user:a.user,textLength:a.text.length,fileCount:o.length}),this.messageHandler?.(a)}),this.socket.on("assistant_thread_started",async({event:t,ack:s})=>{await s(),H.info("Assistant thread started",{channel:t?.assistant_thread?.channel_id});let r=t?.assistant_thread;r&&this.threadStartedHandler?.({channel:r.channel_id,threadTs:r.thread_ts,context:r.context??{}})}),this.socket.on("assistant_thread_context_changed",async({event:t,ack:s})=>{await s(),H.info("Assistant thread context changed",{channel:t?.assistant_thread?.channel_id});let r=t?.assistant_thread;r&&this.threadContextHandler?.({channel:r.channel_id,threadTs:r.thread_ts,context:r.context??{}})}),this.socket.on("slack_event",async({ack:t,body:s})=>{await t();let r=s?.event;r&&H.debug("slack_event",{type:r.type,subtype:r.subtype,channel:r.channel})}),await this.socket.start(),H.info("Socket Mode connected")}async stop(){await this.socket.disconnect(),H.info("Socket Mode disconnected")}async setThreadStatus(e,t,s){try{await this.web.assistant.threads.setStatus({channel_id:e,thread_ts:t,status:s})}catch(r){H.warn("Failed to set thread status",{error:String(r)})}}async setSuggestedPrompts(e,t,s){try{await this.web.assistant.threads.setSuggestedPrompts({channel_id:e,thread_ts:t,prompts:s})}catch(r){H.warn("Failed to set suggested prompts",{error:String(r)})}}async setThreadTitle(e,t,s){try{await this.web.assistant.threads.setTitle({channel_id:e,thread_ts:t,title:s})}catch(r){H.warn("Failed to set thread title",{error:String(r)})}}async startStream(e,t){try{let s=await this.web.chat.startStream({channel:e,thread_ts:t});return s.channel&&s.ts?{channel:s.channel,ts:s.ts}:void 0}catch(s){H.warn("Failed to start stream",{error:String(s)});return}}async appendStream(e,t,s){try{await this.web.chat.appendStream({channel:e,ts:t,markdown_text:s})}catch(r){H.warn("Failed to append stream",{error:String(r)})}}async stopStream(e,t){try{await this.web.chat.stopStream({channel:e,ts:t})}catch(s){H.warn("Failed to stop stream",{error:String(s)})}}static SLACK_MAX_CHARS=3900;static SPLIT_MAX_CHARS=8e3;static SUMMARY_LENGTH=200;async postMessage(e,t,s,r){return t.length<=n.SLACK_MAX_CHARS?this.postSingle(e,t,s,r):t.length<=n.SPLIT_MAX_CHARS?this.postSplit(e,t,s,r):this.postAsFile(e,t,s,r)}async postSingle(e,t,s,r){if(r)try{let i={};return r.icon&&(r.icon.startsWith(":")&&r.icon.endsWith(":")?i.icon_emoji=r.icon:i.icon_url=r.icon),(await this.web.chat.postMessage({channel:e,text:t,thread_ts:s,unfurl_links:!1,username:r.name,...i})).ts}catch(i){H.warn("Failed to post with identity, falling back to plain post",{error:String(i)})}try{return(await this.web.chat.postMessage({channel:e,text:t,thread_ts:s,unfurl_links:!1})).ts}catch(i){H.error("Failed to post message",{channel:e,error:String(i)});return}}splitText(e){let t=n.SLACK_MAX_CHARS,s=[],r=e;for(;r.length>t;){let i=-1,o=r.lastIndexOf(`
|
|
250
291
|
|
|
251
|
-
`,t);if(o>0&&(i=o+2),i===-1){let a=
|
|
252
|
-
`,t);a>0&&(i=a+1)}if(i===-1){let a=
|
|
292
|
+
`,t);if(o>0&&(i=o+2),i===-1){let a=r.lastIndexOf(`
|
|
293
|
+
`,t);a>0&&(i=a+1)}if(i===-1){let a=r.lastIndexOf(" ",t);a>0&&(i=a+1)}i===-1&&(i=t),s.push(r.slice(0,i).trimEnd()),r=r.slice(i).trimStart()}return r.length>0&&s.push(r),s}async postSplit(e,t,s,r){let i=this.splitText(t);H.info("Splitting oversized message",{channel:e,totalLength:t.length,chunks:i.length});let o;for(let a=0;a<i.length;a++){let l=a===0?i[a]:`_(cont.)_ ${i[a]}`,c=await this.postSingle(e,l,s,r);a===0&&(o=c)}return o}async postAsFile(e,t,s,r){let i=t.slice(0,n.SUMMARY_LENGTH),o=i,a=Math.max(i.lastIndexOf(". "),i.lastIndexOf(`.
|
|
253
294
|
`),i.lastIndexOf(`?
|
|
254
295
|
`),i.lastIndexOf("? "),i.lastIndexOf(`!
|
|
255
|
-
`),i.lastIndexOf("! "));if(a>0)o=i.slice(0,a+1);else{let
|
|
256
|
-
`);
|
|
296
|
+
`),i.lastIndexOf("! "));if(a>0)o=i.slice(0,a+1);else{let h=i.lastIndexOf(`
|
|
297
|
+
`);h>0&&(o=i.slice(0,h))}o=`${o.trimEnd()}
|
|
257
298
|
|
|
258
|
-
_(full response attached)_`;let l=
|
|
299
|
+
_(full response attached)_`;let l=r?.name??"hive",c=new Date().toISOString().replace(/[:.]/g,"-").slice(0,19),d=`${l.toLowerCase()}-${c}.md`,u=await this.postSingle(e,o,s,r);try{let h={content:t,filename:d,title:`${l} response`},p=s?{channel_id:e,thread_ts:s}:{channel_id:e};return await this.web.files.uploadV2({...h,...p}),H.info("Uploaded oversized message as file",{channel:e,filename:d,length:t.length}),u}catch(h){return H.warn("File upload failed, falling back to split",{channel:e,error:String(h)}),this.postSplit(e,t,s,r)}}async addReaction(e,t,s){try{await this.web.reactions.add({channel:e,name:s,timestamp:t})}catch(r){let i=String(r);i.includes("already_reacted")||H.warn("Failed to add reaction",{channel:e,ts:t,emoji:s,error:i})}}async removeReaction(e,t,s){try{await this.web.reactions.remove({channel:e,name:s,timestamp:t})}catch{}}async resolveUserName(e){let t=this.userNameCache.get(e);if(t)return t;try{let s=await this.web.users.info({user:e});return t=s.user?.profile?.display_name||s.user?.real_name||s.user?.name||e,this.userNameCache.set(e,t),t}catch{return this.userNameCache.set(e,e),e}}async resolveUserMentions(e){let t=/<@(U[A-Z0-9]+)>/g,s=[...e.matchAll(t)];if(s.length===0)return e;let r=e;for(let i of s){let o=i[1],a=this.userNameCache.get(o);if(!a)try{let l=await this.web.users.info({user:o});a=l.user?.profile?.display_name||l.user?.real_name||l.user?.name||o,this.userNameCache.set(o,a)}catch{this.userNameCache.set(o,o);continue}r=r.replace(i[0],`@${a}`)}return r}async resolveChannelName(e){let t=this.channelNameCache.get(e);if(t)return t;try{let r=(await this.web.conversations.info({channel:e})).channel?.name??e;return this.channelNameCache.set(e,r),r}catch{return this.channelNameCache.set(e,e),e}}sweep(){let e=this.channelNameCache.size+this.userNameCache.size;return this.channelNameCache.clear(),this.userNameCache.clear(),{component:"slack-gateway",pruned:e,retried:0,bytesFreed:0,errors:[]}}get client(){return this.web}};O();import{MongoClient as k0}from"mongodb";var v0=I("memory-manager"),vr=class{mongoUri;dbName;client;db;collection;versions;_memoryStore;set memoryStore(e){this._memoryStore=e}constructor(e,t="hive"){this.mongoUri=e,this.dbName=t}async init(){this.client=new k0(this.mongoUri),await this.client.connect(),this.db=this.client.db(this.dbName),this.collection=this.db.collection("memory"),this.versions=this.db.collection("memory_versions"),await this.collection.createIndex({path:1},{unique:!0}),await this.versions.createIndex({path:1,savedAt:-1}),v0.info("Memory manager connected to MongoDB",{db:this.dbName})}async read(e){return(await this.collection.findOne({path:e}))?.content??null}async list(e){let t=e.endsWith("/")?e:e+"/";return(await this.collection.find({path:{$regex:`^${T0(t)}[^/]+$`}}).project({path:1}).toArray()).map(r=>r.path.slice(t.length))}async getHotTierPrompt(e,t){if(!this._memoryStore)return null;let s=await this._memoryStore.getHotTier(e);if(s.length===0)return null;let r={task:"Active Tasks",fact:"Key Facts",decision:"Recent Decisions",preference:"Preferences",interaction:"Recent Interactions",summary:"Summaries"},i={},o=[],a=0;for(let d of s){let h=`- [${d.updatedAt.toISOString().split("T")[0]}] ${d.content} (${d.importance})`,p=Math.ceil(h.length/4);if(a+p>t&&!d.pinned)break;if(a+=p,d.pinned)o.push(`- ${d.content} (${d.importance}, pinned)`);else{let g=d.type;i[g]||(i[g]=[]),i[g].push(h)}}let l=["## Your Memory"];for(let[d,u]of Object.entries(r))i[d]?.length&&l.push(`### ${u}
|
|
259
300
|
${i[d].join(`
|
|
260
301
|
`)}`);o.length>0&&l.push(`### Pinned
|
|
261
302
|
${o.join(`
|
|
262
303
|
`)}`);let c=await this._memoryStore.countNonHot(e);return c>0&&l.push(`---
|
|
263
304
|
You have ${c} additional memories available via \`memory_recall\`. Use it to search for context before starting tasks.`),l.join(`
|
|
264
305
|
|
|
265
|
-
`)}async write(e,t,
|
|
266
|
-
|
|
267
|
-
${JSON.stringify(t.payload)}`,source:{kind:"internal",id:`agent-${n.agentId}`,label:`agent-${n.agentId}`},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(u):this.agentManager.sendMessage(n.agentId,u).catch(f=>{ee.error("Event dispatch failed",{agentId:n.agentId,eventType:t.type,eventId:l,error:String(f)})})}}}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=>ee.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){ee.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 yT(s,e){let t=s.split(/\s+/);if(t.length!==5)return!1;let[r,n,i,o,a]=t,l=e.getMinutes(),c=e.getHours(),d=e.getDate(),u=e.getMonth()+1,f=e.getDay();return lr(r,l)&&lr(n,c)&&lr(i,d)&&lr(o,u)&&lr(a,f)}function lr(s,e){if(s==="*")return!0;if(s.includes("-")){let[t,r]=s.split("-").map(Number);return e>=t&&e<=r}if(s.includes(","))return s.split(",").map(Number).includes(e);if(s.startsWith("*/")){let t=Number(s.slice(2));return e%t===0}return Number(s)===e}function wT(s,e){return s.getFullYear()===e.getFullYear()&&s.getMonth()===e.getMonth()&&s.getDate()===e.getDate()&&s.getHours()===e.getHours()&&s.getMinutes()===e.getMinutes()}P();var ST=T("health-reporter"),zn=class{agentManager;memoryManager;registry;constructor(e,t,r){this.agentManager=e,this.memoryManager=t,this.registry=r}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 r=[`*Hive Status* \u2014 ${new Date().toLocaleString()}
|
|
268
|
-
`];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)`:"";r.push(`${l} *${n}*${c}`),r.push(` Messages: ${i.messagesProcessed} | Errors: ${i.errorCount}`),r.push(` Last active: ${new Date(i.lastActivity).toLocaleString()}`)}return r.join(`
|
|
269
|
-
`)}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"),ST.info("Health report written to memory")}};P();import{LinearClient as bT}from"@linear/sdk";var we=T("linear-client"),Xn=class{client;defaultTeamId;constructor(e,t){this.client=new bT({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 we.error("Failed to list teams",{error:String(e)}),[]}}async createIssue(e,t){try{let r=t?.teamId??this.defaultTeamId;if(!r)return we.error("Cannot create issue: no teamId provided and no default set"),null;let i=await(await this.client.createIssue({teamId:r,title:e,description:t?.description,priority:t?.priority,stateId:t?.stateId,labelIds:t?.labelIds})).issue;return i?(we.info("Issue created",{identifier:i.identifier,title:e}),{identifier:i.identifier,id:i.id,url:i.url}):(we.error("Issue creation returned no issue",{title:e}),null)}catch(r){return we.error("Failed to create issue",{error:String(r),title:e}),null}}async updateIssue(e,t){try{return await this.client.updateIssue(e,t),we.info("Issue updated",{issueId:e,...t}),!0}catch(r){return we.error("Failed to update issue",{error:String(r),issueId:e}),!1}}async addComment(e,t){try{let n=await(await this.client.createComment({issueId:e,body:t})).comment;return we.info("Comment added",{issueId:e,commentId:n?.id}),n?.id??null}catch(r){return we.error("Failed to add comment",{error:String(r),issueId:e}),null}}async listIssues(e){try{let t=e?.teamId??this.defaultTeamId,r={};t&&(r.team={id:{eq:t}}),e?.stateType&&(r.state={type:{eq:e.stateType}}),e?.assigneeEmail&&(r.assignee={email:{eq:e.assigneeEmail}});let n=await this.client.issues({filter:r,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 we.error("Failed to list issues",{error:String(t)}),[]}}async searchIssues(e,t,r){try{let n=r??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 we.error("Failed to search issues",{error:String(n),term:e}),[]}}async getWorkflowStates(e){try{let t=e??this.defaultTeamId,r={};return t&&(r.team={id:{eq:t}}),(await this.client.workflowStates({filter:r})).nodes.map(i=>({id:i.id,name:i.name,type:i.type}))}catch(t){return we.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(r){return we.error("Failed to search users",{error:String(r),query:e}),[]}}async findIssueByIdentifier(e){try{let t=await this.client.issue(e),r=await t.state,n=await t.assignee;return{identifier:t.identifier,id:t.id,title:t.title,state:r?.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 we.error("Failed to find issue",{error:String(t),identifier:e}),null}}};P();import{MongoClient as ch}from"mongodb";var ns=T("session-store"),Qn=class{client;db;collection;uri;dbName;constructor(e,t="hive"){this.uri=e,this.dbName=t,this.client=new ch(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();ns.info("Session store connected",{count:t})}async reconnect(){ns.warn("Reconnecting to MongoDB...");try{await this.client.close().catch(()=>{})}catch{}this.client=new ch(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"),ns.info("MongoDB reconnected")}async withRetry(e,t,r){try{return await e()}catch(n){let i=String(n?.message??n);ns.warn("MongoDB operation failed, retrying after reconnect",{label:r,error:i});try{return await this.reconnect(),await e()}catch(o){return ns.error("MongoDB operation failed after retry, using fallback",{label:r,error:String(o?.message??o)}),t}}}async get(e,t){return this.withRetry(async()=>{let r=await this.collection.findOne({_id:`${e}:${t}`});if(r)return r.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,r,n){await this.withRetry(async()=>{let i=new Date,o={$set:{agentId:e,threadId:t,sessionId:r,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&&ns.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(r=>r.agentId))]},[],`findAgentsByThread(${e})`)}async close(){await this.client.close()}};P();P();Ee();import{query as vT}from"@anthropic-ai/claude-agent-sdk";var Zn=T("triage");function _T(s,e){let r=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 e?`You are triaging messages for ${s.name}. Current date/time: ${r} (Pacific Time).
|
|
270
|
-
|
|
271
|
-
${s.soul}
|
|
272
|
-
|
|
273
|
-
This message is part of an ongoing conversation thread. You do NOT have access to previous messages in this thread, so you CANNOT answer questions that depend on context.
|
|
274
|
-
|
|
275
|
-
Respond with ONLY a JSON object, no markdown fences, no explanation.
|
|
276
|
-
|
|
277
|
-
{ "response": "<brief ack>", "action": "done" } ONLY when the message is:
|
|
278
|
-
- A standalone thank you, acknowledgment, or farewell ("thanks", "ok", "got it", "bye")
|
|
279
|
-
|
|
280
|
-
{ "response": "<brief ack>", "action": "continue" } for EVERYTHING else, including:
|
|
281
|
-
- Any question (even if it seems simple \u2014 you lack thread context to answer it)
|
|
282
|
-
- Any request, instruction, or follow-up
|
|
283
|
-
- Anything you're not 100% sure is a trivial ack
|
|
284
|
-
|
|
285
|
-
CRITICAL RULE: Your ack response is posted to Slack AS the agent. You are NOT the agent \u2014 you are a router. You do NOT know what tools the agent has. NEVER mention tools, capabilities, access, or limitations in your ack. Just say something like "On it", "Checking now", "Let me look into that". NEVER say "I don't have access to..." or "I can't...".
|
|
286
|
-
|
|
287
|
-
Keep ack responses under 15 words, natural, in character.`:`You are triaging messages for ${s.name}. Current date/time: ${r} (Pacific Time).
|
|
288
|
-
|
|
289
|
-
${s.soul}
|
|
290
|
-
|
|
291
|
-
Respond with ONLY a JSON object, no markdown fences, no explanation.
|
|
292
|
-
|
|
293
|
-
{ "response": "<your reply>", "action": "done" } ONLY when:
|
|
294
|
-
- Simple greetings ("hi", "hey"), thanks ("thanks", "ty"), or farewells ("bye", "later")
|
|
295
|
-
- That's it. Nothing else gets "done".
|
|
296
|
-
|
|
297
|
-
{ "response": "<brief ack>", "action": "continue" } for EVERYTHING else:
|
|
298
|
-
- ANY question, no matter how simple it seems
|
|
299
|
-
- ANY request for information, lookups, or data
|
|
300
|
-
- ANY task, instruction, or follow-up
|
|
301
|
-
- If the message is more than a one-word social nicety, use "continue"
|
|
302
|
-
|
|
303
|
-
CRITICAL RULE: Your ack response is posted to Slack AS the agent. You are NOT the agent \u2014 you are a router. You do NOT know what tools the agent has. NEVER mention tools, capabilities, access, or limitations in your ack. Just say something like "On it", "Checking now", "Let me look into that". NEVER say "I don't have access to..." or "I can't..." \u2014 the full agent DOES have those tools.
|
|
306
|
+
`)}async write(e,t,s){let r=await this.collection.findOne({path:e});r&&await this.versions.insertOne({path:e,content:r.content,savedAt:r.updatedAt,savedBy:r.updatedBy}),await this.collection.updateOne({path:e},{$set:{content:t,updatedAt:new Date,...s?{updatedBy:s}:{}}},{upsert:!0})}async commitAndPush(e){}async pull(){}async close(){await this.client?.close()}};function T0(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}O();Oe();import{MongoClient as I0}from"mongodb";var z=I("scheduler"),Tr=class{heartbeatTimer=null;cronTimer=null;callbackTimer=null;eventTimer=null;teamTimer=null;agentManager;memoryManager;healthReporter;registry;cronJobs=[];mongoClient=null;db=null;callbackCollection=null;eventsCollection=null;onDispatch;constructor(e,t,s,r,i){this.agentManager=e,this.memoryManager=t,this.healthReporter=s,this.registry=r,this.onDispatch=i;for(let o of r.getAll())for(let a of o.schedule)this.cronJobs.push({agentId:o.id,cron:a.cron,task:a.task,lastRun:null})}async connectDb(e,t){this.mongoClient=new I0(e),await this.mongoClient.connect(),this.db=this.mongoClient.db(t),this.callbackCollection=this.db.collection("agent_callbacks"),this.eventsCollection=this.db.collection("agent_events"),await this.callbackCollection.createIndex({status:1,dueAt:1}),await this.eventsCollection.createIndex({hasPending:1,createdAt:1}),await this.eventsCollection.createIndex({sourceAgentId:1,createdAt:-1}),await this.eventsCollection.createIndex({domain:1,createdAt:-1}),await this.eventsCollection.createIndex({createdAt:1},{expireAfterSeconds:m.events.retentionDays*86400}),await this.db.collection("team_pending_requests").createIndex({status:1,createdAt:-1}),await this.db.collection("team_pending_requests").createIndex({createdAt:1},{expireAfterSeconds:3600}),z.info("Callback store connected",{db:t})}async reloadSchedules(){this.cronJobs=[];for(let e of this.registry.getAll())for(let t of e.schedule)this.cronJobs.push({agentId:e.id,cron:t.cron,task:t.task,lastRun:null});z.info("Schedules reloaded",{jobs:this.cronJobs.length})}start(){this.heartbeatTimer=setInterval(async()=>{try{await this.memoryManager.pull(),await this.healthReporter.writeToMemory()}catch(e){z.error("Heartbeat failed",{error:String(e)})}},m.scheduler.heartbeatIntervalMs),this.cronTimer=setInterval(()=>{this.checkCronJobs()},6e4),this.callbackCollection&&(this.callbackTimer=setInterval(()=>{this.checkCallbacks().catch(e=>{z.error("Callback check failed",{error:String(e)})})},3e4)),this.eventsCollection&&(this.eventTimer=setInterval(()=>{this.checkEvents().catch(e=>{z.error("Event check failed",{error:String(e)})})},3e4)),this.db&&(this.teamTimer=setInterval(()=>{this.fireTeamRequests().catch(e=>z.error("Team request check failed",{error:String(e)}))},5e3)),z.info("Scheduler started",{heartbeatMs:m.scheduler.heartbeatIntervalMs,cronJobs:this.cronJobs.length,callbacksEnabled:!!this.callbackCollection,eventsEnabled:!!this.eventsCollection})}stop(){this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=null),this.cronTimer&&(clearInterval(this.cronTimer),this.cronTimer=null),this.callbackTimer&&(clearInterval(this.callbackTimer),this.callbackTimer=null),this.eventTimer&&(clearInterval(this.eventTimer),this.eventTimer=null),this.teamTimer&&(clearInterval(this.teamTimer),this.teamTimer=null),this.mongoClient?.close().catch(()=>{}),z.info("Scheduler stopped")}checkCronJobs(){let e=new Date;for(let t of this.cronJobs)if(A0(t.cron,e)){if(t.lastRun&&C0(t.lastRun,e))continue;t.lastRun=e;let s=this.registry.get(t.agentId);if(s?.disabled){z.debug("Skipping scheduled task \u2014 agent disabled",{agentId:t.agentId,task:t.task});continue}z.info("Triggering scheduled task",{agentId:t.agentId,task:t.task});let r=s?.homeBase??s?.channels?.[0];if(!r){z.error("Cannot dispatch scheduled task \u2014 agent has no homeBase or channels",{agentId:t.agentId,task:t.task});continue}let i={id:`sched:${t.agentId}:${t.task}:${Date.now()}`,text:`[Scheduled task: ${t.task}] Execute your scheduled "${t.task}" task now.`,source:{kind:"slack",id:r,label:r},sender:"system",threadId:`scheduler:${t.agentId}:${t.task}:${Date.now()}`,timestamp:e,meta:{targetAgentId:t.agentId}};this.onDispatch?this.onDispatch(i):this.agentManager.sendMessage(t.agentId,i).catch(o=>{z.error("Scheduled task failed",{agentId:t.agentId,task:t.task,error:String(o)})})}}async checkCallbacks(){if(!this.callbackCollection)return;let e=new Date,t=this.callbackCollection.find({status:"pending",dueAt:{$lte:e}});for await(let s of t){if((await this.callbackCollection.updateOne({_id:s._id,status:"pending"},{$set:{status:"fired",firedAt:e}})).modifiedCount===0)continue;z.info("Firing callback",{agentId:s.agentId,callbackId:s._id.toString(),contextPreview:s.context.slice(0,80)});let i=this.registry.get(s.agentId);if(!i){z.warn("Callback agent not found, skipping",{agentId:s.agentId});continue}if(i.disabled){z.info("Callback agent disabled, skipping",{agentId:s.agentId});continue}let o={id:`callback:${s._id.toString()}`,text:`[Scheduled callback] ${s.context}`,source:{kind:s.source.channelKind||"slack",id:s.source.channelId,label:s.source.channelLabel,adapterId:s.source.adapterId},sender:"system",threadId:s.source.threadId||void 0,timestamp:e,meta:{slackTs:s.source.slackTs,slackThreadTs:s.source.slackThreadTs,targetAgentId:s.agentId}};this.onDispatch?this.onDispatch(o):this.agentManager.sendMessage(s.agentId,o).catch(a=>{z.error("Callback dispatch failed",{agentId:s.agentId,callbackId:s._id.toString(),error:String(a)})})}}async checkEvents(){if(!this.eventsCollection)return;let e=this.eventsCollection.find({hasPending:!0});for await(let t of e){let s=t.deliveries.filter(r=>r.status==="pending");for(let r of s){let i=new Date;if((await this.eventsCollection.updateOne({_id:t._id,deliveries:{$elemMatch:{agentId:r.agentId,status:"pending"}}},{$set:{"deliveries.$.status":"fired","deliveries.$.firedAt":i}})).modifiedCount===0)continue;await this.eventsCollection.updateOne({_id:t._id,"deliveries.status":{$ne:"pending"}},{$set:{hasPending:!1}});let a=this.registry.get(r.agentId);if(!a){z.warn("Event target agent not found, skipping",{agentId:r.agentId,eventType:t.type});continue}if(a.disabled){z.info("Event target agent disabled, skipping",{agentId:r.agentId,eventType:t.type});continue}let l=t._id.toHexString(),d=this.registry.get(t.sourceAgentId)?.name??t.sourceAgentId;z.info("Dispatching event",{eventType:t.type,eventId:l,targetAgent:r.agentId,sourceAgent:t.sourceAgentId});let u=a.homeBase??`agent-${r.agentId}`,h={id:`event:${l}:${r.agentId}`,text:`[Event: ${t.type} from ${d}]
|
|
304
307
|
|
|
305
|
-
|
|
306
|
-
Keep "done" responses under 10 words.`}function TT(s){try{let n=JSON.parse(s);if(n.response&&(n.action==="done"||n.action==="continue"))return{response:n.response,action:n.action}}catch{}let e=s.match(/```(?:json)?\s*([\s\S]*?)```/);if(e)try{let n=JSON.parse(e[1].trim());if(n.response&&(n.action==="done"||n.action==="continue"))return{response:n.response,action:n.action}}catch{}let t=s.indexOf("{"),r=s.lastIndexOf("}");if(t!==-1&&r>t)try{let n=JSON.parse(s.slice(t,r+1));if(n.response&&(n.action==="done"||n.action==="continue"))return{response:n.response,action:n.action}}catch{}return null}async function dc(s,e,t){let r=e.triageModel??g.triage.model,n=_T(e,t.isThread),i=g.triage.timeoutMs,o=null,a="",l=0,c=0,d=setTimeout(()=>{o&&(Zn.warn("Triage timed out",{agent:e.id,timeoutMs:i}),o.close())},i);try{o=vT({prompt:s,options:{model:r,systemPrompt:n,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 f of o){let h=f;if(h.type==="assistant"){let m=h.message?.content;if(Array.isArray(m))for(let p of m)p.type==="text"&&(a=p.text)}if(h.type==="result"){let m=h;l=m.total_cost_usd,c=m.duration_ms,m.subtype==="success"&&m.result&&(a=m.result)}}}catch(f){return Zn.warn("Triage query failed",{agent:e.id,error:String(f)}),{response:"On it...",action:"continue",costUsd:0,durationMs:0}}finally{clearTimeout(d),o=null}let u=TT(a);return u?(Zn.info("Triage complete",{agent:e.id,action:u.action,costUsd:l,durationMs:c,responsePreview:u.response.slice(0,80)}),{response:u.response,action:u.action,costUsd:l,durationMs:c}):(Zn.warn("Triage JSON parse failed, defaulting to continue",{agent:e.id,rawText:a.slice(0,200)}),{response:"On it...",action:"continue",costUsd:l,durationMs:c})}Ee();var F=T("dispatcher"),ET=80,IT=[/^status\??$/i,/^how.{0,20}(everyone|agents?|doing|running)/i,/^health\??$/i,/^system status/i],lh=[/^no response (requested|needed|required|necessary)\.?$/i,/^\(no response\)$/i,/^n\/a\.?$/i],ei=class s{adapters=new Map;registry;agentManager;healthReporter;defaultAgentId;threadAgentMap=new Map;threadParticipants=new Map;threadAgentLastSeen=new Map;recentMessageIds=new Map;auditAdapter;auditChannelId;taskLedger;retryQueue;teamStore;static DEDUP_TTL_MS=6e4;constructor(e,t,r,n,i){this.registry=e,this.agentManager=t,this.healthReporter=r,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){this.auditAdapter=e,this.auditChannelId=t}async dispatch(e){if(this.recentMessageIds.has(e.id)){F.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<=ET&&IT.some(h=>h.test(t))){F.info("Status query intercepted",{source:e.source.kind,text:t});let h=this.healthReporter.formatForSlack(),m=this.adapters.get(e.source.adapterId??e.source.kind);if(m)try{await m.deliver({text:h,agentId:"system",workItem:e,costUsd:0,durationMs:0})}catch(p){F.warn("Status delivery failed, queuing for retry",{error:String(p)}),this.retryQueue?.enqueue({text:h,agentId:"system",workItem:e,costUsd:0,durationMs:0},m)}return}let r=await this.resolveAgents(e);if(r.length===0){F.warn("No agent found for work item",{source:e.source.kind,label:e.source.label,text:e.text.slice(0,50)});return}let n=r.filter(({agentId:h})=>this.registry.get(h)?.disabled?(F.info("Message dropped \u2014 agent is disabled",{agentId:h,source:e.source.kind}),!1):!0);if(n.length===0)return;if(n.length>1){let h=e.threadId??e.id;this.threadParticipants.has(h)||this.threadParticipants.set(h,new Set(n.map(m=>m.agentId))),this.threadAgentLastSeen.set(h,Date.now()),F.info("Multi-agent fan-out",{agents:n.map(m=>m.agentId)}),await Promise.all(n.map(m=>this.dispatchToAgent(e,m)));return}let{agentId:i,skipTriage:o}=n[0],a=e.threadId??e.id;this.threadAgentMap.set(a,i),this.threadAgentLastSeen.set(a,Date.now());let l=this.taskLedger?.shouldTrack(e)??!1;l&&this.taskLedger.onDispatch(e,i).catch(h=>F.warn("Task ledger dispatch failed",{error:String(h)}));let c=this.adapters.get(e.source.adapterId??e.source.kind),d=this.registry.get(i),u=(e.source.kind==="slack"||e.source.kind==="sms"||e.source.kind==="imessage"||e.source.kind==="team")&&e.sender!=="system",f=!1;if(u&&g.triage.enabled&&d&&!o){await c?.onProcessingStart?.(e),f=!0;try{let h=await dc(e.text,d,{isThread:!!e.meta?.slackThreadTs});if(h.action==="done"){let p={text:h.response,agentId:i,workItem:e,costUsd:h.costUsd,durationMs:h.durationMs};if(c)try{await c.deliver(p)}catch(y){F.warn("Triage delivery failed, queuing for retry",{error:String(y)}),this.retryQueue?.enqueue(p,c)}this.auditAdapter&&e.source.kind!==this.auditAdapter.kind&&await this.postAuditLog(p),F.info("Triage handled message",{agentId:i,source:e.source.kind,costUsd:h.costUsd,durationMs:h.durationMs}),await c?.onProcessingEnd?.(e);return}let m=!!e.meta?.slackThreadTs;if(c&&!m){let p={text:h.response,agentId:i,workItem:e,costUsd:h.costUsd,durationMs:h.durationMs};try{await c.deliver(p)}catch(y){F.warn("Triage ack delivery failed, queuing for retry",{error:String(y)}),this.retryQueue?.enqueue(p,c)}}F.info("Triage ack posted, continuing to full agent",{agentId:i,source:e.source.kind,ack:h.response.slice(0,80)})}catch(h){F.warn("Triage failed, falling through to full agent",{error:String(h)})}}f||await c?.onProcessingStart?.(e);try{let h=await this.agentManager.sendMessage(i,e),m=h.text.trim();if(lh.some(y=>y.test(m)))F.info("Non-response suppressed",{agentId:i,source:e.source.kind,text:m,costUsd:h.costUsd,durationMs:h.durationMs});else{let y={text:h.text||"_No response._",agentId:i,workItem:e,costUsd:h.costUsd,durationMs:h.durationMs,error:h.error};if(c)try{await c.deliver(y)}catch(S){F.warn("Agent response delivery failed, queuing for retry",{error:String(S)}),this.retryQueue?.enqueue(y,c)}l&&this.taskLedger.onComplete(y).catch(S=>F.warn("Task ledger complete failed",{error:String(S)})),this.auditAdapter&&e.source.kind!==this.auditAdapter.kind&&await this.postAuditLog(y),F.info("Work item dispatched",{agentId:i,source:e.source.kind,costUsd:h.costUsd,durationMs:h.durationMs,llmMs:h.llmMs,toolMs:h.toolMs,toolCalls:h.toolCalls,toolSummary:h.toolSummary})}}catch(h){let m={text:`Something went wrong: ${String(h)}`,agentId:i,workItem:e,costUsd:0,durationMs:0,error:String(h)};if(c)try{await c.deliver(m)}catch(p){F.warn("Error delivery failed, queuing for retry",{error:String(p)}),this.retryQueue?.enqueue(m,c)}F.error("Dispatch failed",{agentId:i,error:String(h)})}finally{await c?.onProcessingEnd?.(e)}}pruneDedup(){let e=Date.now()-s.DEDUP_TTL_MS;for(let[t,r]of this.recentMessageIds)r<e&&this.recentMessageIds.delete(t)}async resolveAgents(e){let t=e.meta?.targetAgentId;if(t&&this.registry.get(t))return[{agentId:t,skipTriage:!1}];if(e.source.kind==="team")return this.resolveFromTeam(e);let r=this.registry.findByChannel(e.source.label);if(r)return[{agentId:r.id,skipTriage:!1}];if(e.threadId){let o=this.registry.findAllByName(e.text),a=new Set(o.map(u=>u.id)),l=this.threadParticipants.get(e.threadId);if(l){for(let u of a)l.add(u);return this.threadAgentLastSeen.set(e.threadId,Date.now()),[...l].map(u=>({agentId:u,skipTriage:!1}))}let c=this.threadAgentMap.get(e.threadId);if(c){let u=o.some(f=>f.id!==c);if(a.size>0&&u){let f=new Set([c,...a]);return this.threadParticipants.set(e.threadId,f),this.threadAgentMap.delete(e.threadId),this.threadAgentLastSeen.set(e.threadId,Date.now()),F.info("Thread transitioned to multi-agent",{threadId:e.threadId,participants:[...f]}),[...f].map(h=>({agentId:h,skipTriage:!1}))}return this.threadAgentLastSeen.set(e.threadId,Date.now()),[{agentId:c,skipTriage:!1}]}let d=await this.agentManager.findAgentsForThread(e.threadId);if(d.length>0){let u=d.filter(f=>this.registry.get(f));if(u.length>1){let f=new Set(u);return this.threadParticipants.set(e.threadId,f),this.threadAgentLastSeen.set(e.threadId,Date.now()),[...f].map(h=>({agentId:h,skipTriage:!1}))}if(u.length===1)return this.threadAgentMap.set(e.threadId,u[0]),this.threadAgentLastSeen.set(e.threadId,Date.now()),[{agentId:u[0],skipTriage:!1}]}}let n=this.registry.findAllByName(e.text);if(n.length>0)return n.map(o=>({agentId:o.id,skipTriage:o.passiveChannels.includes(e.source.label)}));let i=e.meta?.defaultAgentId;return i&&this.registry.get(i)?[{agentId:i,skipTriage:!1}]:(F.debug("No agent matched \u2014 dropping",{channel:e.source.label}),[])}async resolveFromTeam(e){let t=e.meta?.channelId;if(!t||!this.teamStore){let o=e.meta?.defaultAgentId;return o&&this.registry.get(o)?[{agentId:o,skipTriage:!1}]:[]}let r=await this.teamStore.getChannel(t);if(!r)return F.warn("Team channel not found",{channelId:t}),[];if(r.type==="dm"){let o=r.members.find(a=>a!==e.sender);return o&&this.registry.get(o)?[{agentId:o,skipTriage:!0}]:(F.warn("DM agent not found in registry",{channelId:t,members:r.members}),[])}let n=this.registry.findAllByName(e.text);if(n.length>0){let o=new Set(r.members),a=n.filter(l=>o.has(l.id));if(a.length>0)return a.map(l=>({agentId:l.id,skipTriage:!0}))}let i=r.members.filter(o=>this.registry.get(o));return i.length>0?[{agentId:i[0],skipTriage:!1}]:(F.warn("No agent members in Team channel",{channelId:t}),[])}async dispatchToAgent(e,t){let{agentId:r,skipTriage:n}=t,i=e.threadId??e.id;this.threadAgentLastSeen.set(i,Date.now());let o=this.taskLedger?.shouldTrack(e)??!1;o&&this.taskLedger.onDispatch(e,r).catch(d=>F.warn("Task ledger dispatch failed",{error:String(d)}));let a=this.adapters.get(e.source.adapterId??e.source.kind),l=this.registry.get(r);if((e.source.kind==="slack"||e.source.kind==="sms"||e.source.kind==="imessage"||e.source.kind==="team")&&e.sender!=="system"&&g.triage.enabled&&l&&!n)try{let d=await dc(e.text,l,{isThread:!!e.meta?.slackThreadTs});if(d.action==="done"){let u={text:d.response,agentId:r,workItem:e,costUsd:d.costUsd,durationMs:d.durationMs};if(a)try{await a.deliver(u)}catch{this.retryQueue?.enqueue(u,a)}this.auditAdapter&&e.source.kind!==this.auditAdapter.kind&&await this.postAuditLog(u);return}}catch(d){F.warn("Triage failed in fan-out, falling through to full agent",{agentId:r,error:String(d)})}try{let d=await this.agentManager.sendMessage(r,e),u=d.text.trim();if(lh.some(h=>h.test(u)))F.info("Non-response suppressed (fan-out)",{agentId:r});else{let h={text:d.text||"_No response._",agentId:r,workItem:e,costUsd:d.costUsd,durationMs:d.durationMs,error:d.error};if(a)try{await a.deliver(h)}catch{this.retryQueue?.enqueue(h,a)}o&&this.taskLedger.onComplete(h).catch(m=>F.warn("Task ledger complete failed",{error:String(m)})),this.auditAdapter&&e.source.kind!==this.auditAdapter.kind&&await this.postAuditLog(h),F.info("Fan-out dispatch complete",{agentId:r,costUsd:d.costUsd,durationMs:d.durationMs})}}catch(d){let u={text:`Something went wrong: ${String(d)}`,agentId:r,workItem:e,costUsd:0,durationMs:0,error:String(d)};if(a)try{await a.deliver(u)}catch{this.retryQueue?.enqueue(u,a)}F.error("Fan-out dispatch failed",{agentId:r,error:String(d)})}}sweep(e){let t=Date.now()-e,r=0;for(let[n,i]of this.threadAgentLastSeen)i<t&&(this.threadAgentMap.delete(n),this.threadParticipants.delete(n),this.threadAgentLastSeen.delete(n),r++);return{component:"dispatcher",pruned:r,retried:0,bytesFreed:0,errors:[]}}async postAuditLog(e){if(!this.auditAdapter||!this.auditChannelId)return;let r=this.registry.get(e.agentId)?.name??e.agentId,n=e.workItem.source.kind==="sms"?":phone:":e.workItem.source.kind==="imessage"?":speech_balloon:":e.workItem.source.kind==="app"?":iphone:":":incoming_envelope:",i=e.workItem.senderName??e.workItem.sender,o=e.text.length>300?e.text.slice(0,300)+"...":e.text,a={id:`audit:${e.workItem.id}`,text:`${n} *${r}* handled ${e.workItem.source.kind} from ${i}:
|
|
307
|
-
> ${o}
|
|
308
|
-
|
|
309
|
-
${
|
|
308
|
+
${JSON.stringify(t.payload)}`,source:{kind:"internal",id:u,label:u},sender:"system",threadId:`event:${l}:${r.agentId}:${i.getTime()}`,timestamp:i,meta:{targetAgentId:r.agentId,eventType:t.type,eventDomain:t.domain,eventId:l}};this.onDispatch?this.onDispatch(h):this.agentManager.sendMessage(r.agentId,h).catch(p=>{z.error("Event dispatch failed",{agentId:r.agentId,eventType:t.type,eventId:l,error:String(p)})})}}}async fireTeamRequests(){if(!this.db)return;let e=await this.db.collection("team_pending_requests").find({status:"pending"}).toArray();for(let t of e){if(!await this.db.collection("team_pending_requests").findOneAndUpdate({_id:t._id,status:"pending"},{$set:{status:"fired",firedAt:new Date}}))continue;let r={id:`team-${String(t._id)}`,text:t.text,source:{kind:"internal",id:t.channelId,label:`internal:${t.fromAgentId}\u2192${t.targetAgentId}`},sender:t.fromAgentId,senderName:t.fromAgentId,threadId:`internal:${t.channelId}:${t.threadId}`,timestamp:new Date,meta:{targetAgentId:t.targetAgentId,teamRequestId:String(t._id),teamRequestType:t.type}};try{if(t.type==="fire_and_forget")this.onDispatch?this.onDispatch(r):this.agentManager.sendMessage(t.targetAgentId,r).catch(i=>z.error("Fire-and-forget team message failed",{target:t.targetAgentId,error:String(i)}));else if(t.type==="request_response"){let i=await this.agentManager.sendMessage(t.targetAgentId,r);await this.db.collection("team_messages").insertOne({channelId:t.channelId,threadId:t.threadId,senderId:t.targetAgentId,senderType:"agent",senderName:t.targetAgentId,text:i.text,createdAt:new Date}),await this.db.collection("team_pending_requests").updateOne({_id:t._id},{$set:{status:"completed",response:i.text}})}}catch(i){z.error("Team request dispatch failed",{requestId:String(t._id),target:t.targetAgentId,error:String(i)}),await this.db.collection("team_pending_requests").updateOne({_id:t._id},{$set:{status:"failed",error:String(i)}})}}}};function A0(n,e){let t=n.split(/\s+/);if(t.length!==5)return!1;let[s,r,i,o,a]=t,l=e.getMinutes(),c=e.getHours(),d=e.getDate(),u=e.getMonth()+1,h=e.getDay();return Gs(s,l)&&Gs(r,c)&&Gs(i,d)&&Gs(o,u)&&Gs(a,h)}function Gs(n,e){if(n==="*")return!0;if(n.includes("-")){let[t,s]=n.split("-").map(Number);return e>=t&&e<=s}if(n.includes(","))return n.split(",").map(Number).includes(e);if(n.startsWith("*/")){let t=Number(n.slice(2));return e%t===0}return Number(n)===e}function C0(n,e){return n.getFullYear()===e.getFullYear()&&n.getMonth()===e.getMonth()&&n.getDate()===e.getDate()&&n.getHours()===e.getHours()&&n.getMinutes()===e.getMinutes()}O();var E0=I("health-reporter"),Ir=class{agentManager;memoryManager;registry;constructor(e,t,s){this.agentManager=e,this.memoryManager=t,this.registry=s}generateReport(){let e={};for(let t of this.agentManager.getAllStates())e[t.id]={status:t.status,lastActivity:t.lastActivity.toISOString(),messagesProcessed:t.messagesProcessed,errorCount:t.errorCount,sessionId:t.currentSessionId,activeThreads:t.activeThreadCount??0};return{lastUpdated:new Date().toISOString(),agents:e}}formatForSlack(){let e=this.generateReport();if(Object.keys(e.agents).length===0)return"No agents are currently registered.";let s=[`*Hive Status* \u2014 ${new Date().toLocaleString()}
|
|
309
|
+
`];for(let[r,i]of Object.entries(e.agents)){let l=this.registry?.get(r)?.disabled?":no_entry_sign:":i.status==="idle"?":white_circle:":i.status==="processing"?":large_blue_circle:":i.status==="error"?":red_circle:":":black_circle:",c=i.activeThreads>0?` (${i.activeThreads} threads)`:"";s.push(`${l} *${r}*${c}`),s.push(` Messages: ${i.messagesProcessed} | Errors: ${i.errorCount}`),s.push(` Last active: ${new Date(i.lastActivity).toLocaleString()}`)}return s.join(`
|
|
310
|
+
`)}async writeToMemory(){let e=this.generateReport();await this.memoryManager.write("status/health.json",JSON.stringify(e,null,2)),await this.memoryManager.commitAndPush("heartbeat: update agent status"),E0.info("Health report written to memory")}};O();import{LinearClient as N0}from"@linear/sdk";var fe=I("linear-client"),Ar=class{client;defaultTeamId;constructor(e,t){this.client=new N0({apiKey:e}),this.defaultTeamId=t}async listTeams(){try{return(await this.client.teams()).nodes.map(t=>({id:t.id,name:t.name,key:t.key}))}catch(e){return fe.error("Failed to list teams",{error:String(e)}),[]}}async createIssue(e,t){try{let s=t?.teamId??this.defaultTeamId;if(!s)return fe.error("Cannot create issue: no teamId provided and no default set"),null;let i=await(await this.client.createIssue({teamId:s,title:e,description:t?.description,priority:t?.priority,stateId:t?.stateId,labelIds:t?.labelIds})).issue;return i?(fe.info("Issue created",{identifier:i.identifier,title:e}),{identifier:i.identifier,id:i.id,url:i.url}):(fe.error("Issue creation returned no issue",{title:e}),null)}catch(s){return fe.error("Failed to create issue",{error:String(s),title:e}),null}}async updateIssue(e,t){try{return await this.client.updateIssue(e,t),fe.info("Issue updated",{issueId:e,...t}),!0}catch(s){return fe.error("Failed to update issue",{error:String(s),issueId:e}),!1}}async addComment(e,t){try{let r=await(await this.client.createComment({issueId:e,body:t})).comment;return fe.info("Comment added",{issueId:e,commentId:r?.id}),r?.id??null}catch(s){return fe.error("Failed to add comment",{error:String(s),issueId:e}),null}}async listIssues(e){try{let t=e?.teamId??this.defaultTeamId,s={};t&&(s.team={id:{eq:t}}),e?.stateType&&(s.state={type:{eq:e.stateType}}),e?.assigneeEmail&&(s.assignee={email:{eq:e.assigneeEmail}});let r=await this.client.issues({filter:s,first:e?.limit??50,orderBy:"updatedAt"}),i=[];for(let o of r.nodes){let a=await o.state,l=await o.assignee;i.push({identifier:o.identifier,id:o.id,title:o.title,state:a?.name??"Unknown",priority:o.priority,url:o.url,assignee:l?{id:l.id,name:l.name,email:l.email}:void 0})}return i}catch(t){return fe.error("Failed to list issues",{error:String(t)}),[]}}async searchIssues(e,t,s){try{let r=s??this.defaultTeamId,o=(await this.client.searchIssues(e,{first:t??10})).nodes,a=[];for(let l of o){if(r&&(await l.team)?.id!==r)continue;let c=await l.state,d=await l.assignee;a.push({identifier:l.identifier,id:l.id,title:l.title,state:c?.name??"Unknown",priority:l.priority,url:l.url,assignee:d?{id:d.id,name:d.name,email:d.email}:void 0})}return a}catch(r){return fe.error("Failed to search issues",{error:String(r),term:e}),[]}}async getWorkflowStates(e){try{let t=e??this.defaultTeamId,s={};return t&&(s.team={id:{eq:t}}),(await this.client.workflowStates({filter:s})).nodes.map(i=>({id:i.id,name:i.name,type:i.type}))}catch(t){return fe.error("Failed to get workflow states",{error:String(t)}),[]}}async searchUsers(e,t){try{return(await this.client.users({filter:{or:[{name:{containsIgnoreCase:e}},{displayName:{containsIgnoreCase:e}},{email:{containsIgnoreCase:e}}]},first:t??10})).nodes.map(r=>({id:r.id,name:r.name,displayName:r.displayName,email:r.email,active:r.active}))}catch(s){return fe.error("Failed to search users",{error:String(s),query:e}),[]}}async findIssueByIdentifier(e){try{let t=await this.client.issue(e),s=await t.state,r=await t.assignee;return{identifier:t.identifier,id:t.id,title:t.title,state:s?.name??"Unknown",priority:t.priority,url:t.url,description:t.description??void 0,assignee:r?{id:r.id,name:r.name,email:r.email}:void 0}}catch(t){return fe.error("Failed to find issue",{error:String(t),identifier:e}),null}}};O();import{MongoClient as ph}from"mongodb";var Wt=I("session-store"),Cr=class{client;db;collection;uri;dbName;constructor(e,t="hive"){this.uri=e,this.dbName=t,this.client=new ph(e,{heartbeatFrequencyMS:3e4,serverSelectionTimeoutMS:1e4,socketTimeoutMS:3e4,maxIdleTimeMS:3e5,retryWrites:!0,retryReads:!0})}async connect(e){this.dbName=e??this.dbName,await this.client.connect(),this.db=this.client.db(this.dbName),this.collection=this.db.collection("sessions"),await this.collection.createIndex({updatedAt:1},{expireAfterSeconds:10080*60}),await this.collection.createIndex({agentId:1}),await this.collection.createIndex({threadId:1});let t=await this.collection.countDocuments();Wt.info("Session store connected",{count:t})}async reconnect(){Wt.warn("Reconnecting to MongoDB...");try{await this.client.close().catch(()=>{})}catch{}this.client=new ph(this.uri,{heartbeatFrequencyMS:3e4,serverSelectionTimeoutMS:1e4,socketTimeoutMS:3e4,maxIdleTimeMS:3e5,retryWrites:!0,retryReads:!0}),await this.client.connect(),this.db=this.client.db(this.dbName),this.collection=this.db.collection("sessions"),Wt.info("MongoDB reconnected")}async withRetry(e,t,s){try{return await e()}catch(r){let i=String(r?.message??r);Wt.warn("MongoDB operation failed, retrying after reconnect",{label:s,error:i});try{return await this.reconnect(),await e()}catch(o){return Wt.error("MongoDB operation failed after retry, using fallback",{label:s,error:String(o?.message??o)}),t}}}async get(e,t){return this.withRetry(async()=>{let s=await this.collection.findOne({_id:`${e}:${t}`});if(s)return s.sessionId;if(t.startsWith("slack:")){let r=t.split(":").pop();return(await this.collection.findOne({_id:`${e}:${r}`}))?.sessionId}},void 0,`get(${e}:${t})`)}async set(e,t,s,r){await this.withRetry(async()=>{let i=new Date,o={$set:{agentId:e,threadId:t,sessionId:s,updatedAt:i},$setOnInsert:{createdAt:i,compactions:0}};r?(o.$set.inputTokens=r.inputTokens,o.$set.outputTokens=r.outputTokens,o.$set.cacheReadTokens=r.cacheReadTokens,o.$set.cacheCreationTokens=r.cacheCreationTokens,o.$set.contextWindow=r.contextWindow,r.compactions>0&&(o.$inc={compactions:r.compactions},o.$set.lastCompactedAt=i,r.preCompactTokens!==void 0&&(o.$set.preCompactTokens=r.preCompactTokens),delete o.$setOnInsert.compactions)):Object.assign(o.$setOnInsert,{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheCreationTokens:0,contextWindow:0}),await this.collection.updateOne({_id:`${e}:${t}`},o,{upsert:!0})},void 0,`set(${e}:${t})`)}async delete(e,t){await this.withRetry(async()=>{await this.collection.deleteOne({_id:`${e}:${t}`})},void 0,`delete(${e}:${t})`)}async clearAgent(e){await this.withRetry(async()=>{let t=await this.collection.deleteMany({agentId:e});t.deletedCount>0&&Wt.info("Cleared agent sessions",{agentId:e,deleted:t.deletedCount})},void 0,`clearAgent(${e})`)}async findAgentByThread(e){return this.withRetry(async()=>(await this.collection.findOne({threadId:e},{sort:{updatedAt:-1},projection:{agentId:1}}))?.agentId,void 0,`findAgentByThread(${e})`)}async findAgentsByThread(e){return this.withRetry(async()=>{let t=await this.collection.find({threadId:e},{projection:{agentId:1},sort:{updatedAt:-1}}).toArray();return[...new Set(t.map(s=>s.agentId))]},[],`findAgentsByThread(${e})`)}async close(){await this.client.close()}};O();var W=I("dispatcher"),O0=80,x0=[/^status\??$/i,/^how.{0,20}(everyone|agents?|doing|running)/i,/^health\??$/i,/^system status/i],mh=[/^no response (requested|needed|required|necessary)\.?$/i,/^\(no response\)$/i,/^n\/a\.?$/i],Er=class n{adapters=new Map;registry;agentManager;healthReporter;defaultAgentId;threadAgentMap=new Map;threadParticipants=new Map;threadAgentLastSeen=new Map;recentMessageIds=new Map;auditAdapter;auditChannelIds;fallbackAuditChannelId;taskLedger;retryQueue;teamStore;static DEDUP_TTL_MS=6e4;constructor(e,t,s,r,i){this.registry=e,this.agentManager=t,this.healthReporter=s,this.defaultAgentId=r,this.taskLedger=i}registerAdapter(e){this.adapters.set(e.id,e)}setRetryQueue(e){this.retryQueue=e}setTeamStore(e){this.teamStore=e}setAuditChannel(e,t,s){this.auditAdapter=e,this.auditChannelIds=t,this.fallbackAuditChannelId=s}async dispatch(e){if(this.recentMessageIds.has(e.id)){W.debug("Duplicate message skipped",{id:e.id,source:e.source.adapterId});return}this.recentMessageIds.set(e.id,Date.now()),this.pruneDedup();let t=e.text.trim();if(t.length<=O0&&x0.some(c=>c.test(t))){W.info("Status query intercepted",{source:e.source.kind,text:t});let c=this.healthReporter.formatForSlack(),d=this.adapters.get(e.source.adapterId??e.source.kind);if(d)try{await d.deliver({text:c,agentId:"system",workItem:e,costUsd:0,durationMs:0})}catch(u){W.warn("Status delivery failed, queuing for retry",{error:String(u)}),this.retryQueue?.enqueue({text:c,agentId:"system",workItem:e,costUsd:0,durationMs:0},d)}return}let s=await this.resolveAgents(e);if(s.length===0){W.warn("No agent found for work item",{source:e.source.kind,label:e.source.label,text:e.text.slice(0,50)});return}let r=s.filter(({agentId:c})=>this.registry.get(c)?.disabled?(W.info("Message dropped \u2014 agent is disabled",{agentId:c,source:e.source.kind}),!1):!0);if(r.length===0)return;if(r.length>1){let c=e.threadId??e.id;this.threadParticipants.has(c)||this.threadParticipants.set(c,new Set(r.map(d=>d.agentId))),this.threadAgentLastSeen.set(c,Date.now()),W.info("Multi-agent fan-out",{agents:r.map(d=>d.agentId)}),await Promise.all(r.map(d=>this.dispatchToAgent(e,d)));return}let{agentId:i}=r[0],o=e.threadId??e.id;this.threadAgentMap.set(o,i),this.threadAgentLastSeen.set(o,Date.now());let a=this.taskLedger?.shouldTrack(e)??!1;a&&this.taskLedger.onDispatch(e,i).catch(c=>W.warn("Task ledger dispatch failed",{error:String(c)}));let l=this.adapters.get(e.source.adapterId??e.source.kind);await l?.onProcessingStart?.(e,i);try{let c=await this.agentManager.sendMessage(i,e),d=c.text.trim();if(mh.some(h=>h.test(d)))W.info("Non-response suppressed",{agentId:i,source:e.source.kind,text:d,costUsd:c.costUsd,durationMs:c.durationMs});else{let h={text:c.text||"_No response._",agentId:i,workItem:e,costUsd:c.costUsd,durationMs:c.durationMs,error:c.error};if(l)try{await l.deliver(h)}catch(p){W.warn("Agent response delivery failed, queuing for retry",{error:String(p)}),this.retryQueue?.enqueue(h,l)}a&&this.taskLedger.onComplete(h).catch(p=>W.warn("Task ledger complete failed",{error:String(p)})),this.auditAdapter&&e.source.kind!==this.auditAdapter.kind&&await this.postAuditLog(h),W.info("Work item dispatched",{agentId:i,source:e.source.kind,costUsd:c.costUsd,durationMs:c.durationMs,llmMs:c.llmMs,toolMs:c.toolMs,toolCalls:c.toolCalls,toolSummary:c.toolSummary})}}catch(c){let d={text:`Something went wrong: ${String(c)}`,agentId:i,workItem:e,costUsd:0,durationMs:0,error:String(c)};if(l)try{await l.deliver(d)}catch(u){W.warn("Error delivery failed, queuing for retry",{error:String(u)}),this.retryQueue?.enqueue(d,l)}W.error("Dispatch failed",{agentId:i,error:String(c)})}finally{await l?.onProcessingEnd?.(e,i)}}pruneDedup(){let e=Date.now()-n.DEDUP_TTL_MS;for(let[t,s]of this.recentMessageIds)s<e&&this.recentMessageIds.delete(t)}async resolveAgents(e){let t=e.meta?.targetAgentId;if(t&&this.registry.get(t))return[{agentId:t}];if(e.source.kind==="team")return this.resolveFromTeam(e);let s=e.meta?.origin;if(s){let a=this.registry.findByOrigin(s);return a?[{agentId:a.id}]:(W.warn("Origin not routed",{origin:s,deviceId:e.meta?.deviceId,text:e.text.slice(0,50)}),[])}let r=this.registry.findByChannel(e.source.label);if(r)return[{agentId:r.id}];if(e.threadId){let a=this.registry.findAllByName(e.text),l=new Set(a.map(h=>h.id)),c=this.threadParticipants.get(e.threadId);if(c){for(let h of l)c.add(h);return this.threadAgentLastSeen.set(e.threadId,Date.now()),[...c].map(h=>({agentId:h}))}let d=this.threadAgentMap.get(e.threadId);if(d){let h=a.some(p=>p.id!==d);if(l.size>0&&h){let p=new Set([d,...l]);return this.threadParticipants.set(e.threadId,p),this.threadAgentMap.delete(e.threadId),this.threadAgentLastSeen.set(e.threadId,Date.now()),W.info("Thread transitioned to multi-agent",{threadId:e.threadId,participants:[...p]}),[...p].map(g=>({agentId:g}))}return this.threadAgentLastSeen.set(e.threadId,Date.now()),[{agentId:d}]}let u=await this.agentManager.findAgentsForThread(e.threadId);if(u.length>0){let h=u.filter(p=>this.registry.get(p));if(h.length>1){let p=new Set(h);return this.threadParticipants.set(e.threadId,p),this.threadAgentLastSeen.set(e.threadId,Date.now()),[...p].map(g=>({agentId:g}))}if(h.length===1)return this.threadAgentMap.set(e.threadId,h[0]),this.threadAgentLastSeen.set(e.threadId,Date.now()),[{agentId:h[0]}]}}let i=this.registry.findAllByName(e.text);if(i.length>0)return i.map(a=>({agentId:a.id}));let o=e.meta?.defaultAgentId;return o&&this.registry.get(o)?[{agentId:o}]:(W.debug("No agent matched \u2014 dropping",{channel:e.source.label}),[])}async resolveFromTeam(e){let t=e.meta?.channelId;if(!t||!this.teamStore){let o=e.meta?.defaultAgentId;return o&&this.registry.get(o)?[{agentId:o}]:[]}let s=await this.teamStore.getChannel(t);if(!s)return W.warn("Team channel not found",{channelId:t}),[];if(s.type==="dm"){let o=s.members.find(a=>a!==e.sender);return o&&this.registry.get(o)?[{agentId:o}]:(W.warn("DM agent not found in registry",{channelId:t,members:s.members}),[])}let r=this.registry.findAllByName(e.text);if(r.length>0){let o=new Set(s.members),a=r.filter(l=>o.has(l.id));if(a.length>0)return a.map(l=>({agentId:l.id}))}let i=s.members.filter(o=>this.registry.get(o));return i.length>0?[{agentId:i[0]}]:(W.warn("No agent members in Team channel",{channelId:t}),[])}async dispatchToAgent(e,t){let{agentId:s}=t,r=e.threadId??e.id;this.threadAgentLastSeen.set(r,Date.now());let i=this.taskLedger?.shouldTrack(e)??!1;i&&this.taskLedger.onDispatch(e,s).catch(a=>W.warn("Task ledger dispatch failed",{error:String(a)}));let o=this.adapters.get(e.source.adapterId??e.source.kind);try{let a=await this.agentManager.sendMessage(s,e),l=a.text.trim();if(mh.some(d=>d.test(l)))W.info("Non-response suppressed (fan-out)",{agentId:s});else{let d={text:a.text||"_No response._",agentId:s,workItem:e,costUsd:a.costUsd,durationMs:a.durationMs,error:a.error};if(o)try{await o.deliver(d)}catch{this.retryQueue?.enqueue(d,o)}i&&this.taskLedger.onComplete(d).catch(u=>W.warn("Task ledger complete failed",{error:String(u)})),this.auditAdapter&&e.source.kind!==this.auditAdapter.kind&&await this.postAuditLog(d),W.info("Fan-out dispatch complete",{agentId:s,costUsd:a.costUsd,durationMs:a.durationMs})}}catch(a){let l={text:`Something went wrong: ${String(a)}`,agentId:s,workItem:e,costUsd:0,durationMs:0,error:String(a)};if(o)try{await o.deliver(l)}catch{this.retryQueue?.enqueue(l,o)}W.error("Fan-out dispatch failed",{agentId:s,error:String(a)})}}sweep(e){let t=Date.now()-e,s=0;for(let[r,i]of this.threadAgentLastSeen)i<t&&(this.threadAgentMap.delete(r),this.threadParticipants.delete(r),this.threadAgentLastSeen.delete(r),s++);return{component:"dispatcher",pruned:s,retried:0,bytesFreed:0,errors:[]}}async postAuditLog(e){if(!this.auditAdapter||!this.auditChannelIds)return;let t=this.registry.get(e.agentId),s=t?.name??e.agentId,r=t?.homeBase,i=(r?this.auditChannelIds.get(r):void 0)??this.fallbackAuditChannelId;if(!i){W.warn("No audit channel resolved for agent",{agentId:e.agentId,homeBase:r});return}if(e.workItem.source.kind==="slack"&&e.workItem.source.id===i)return;let o=e.workItem.source.kind==="sms"?":phone:":e.workItem.source.kind==="imessage"?":speech_balloon:":e.workItem.source.kind==="app"?":iphone:":":incoming_envelope:",a=e.workItem.senderName??e.workItem.sender,l=e.text.length>300?e.text.slice(0,300)+"...":e.text,c={id:`audit:${e.workItem.id}`,text:`${o} *${s}* handled ${e.workItem.source.kind} from ${a}:
|
|
311
|
+
> ${l}
|
|
312
|
+
_($${e.costUsd.toFixed(3)} \xB7 ${(e.durationMs/1e3).toFixed(1)}s)_`,source:{kind:"internal",id:i,label:"audit"},sender:"system",timestamp:new Date,meta:{slackThreadTs:e.workItem.meta?.slackThreadTs,slackTs:e.workItem.meta?.slackTs}};await this.auditAdapter.deliver({text:c.text,agentId:"system",workItem:c,costUsd:0,durationMs:0})}};O();function M0(n){let e=n;return e=e.replace(/^#{1,6}\s+(.+)$/gm,"*$1*"),e=e.replace(/\*{3}(.+?)\*{3}/g,"*_$1_*"),e=e.replace(/\*{2}(.+?)\*{2}/g,"*$1*"),e=e.replace(/__(.+?)__/g,"*$1*"),e=e.replace(/\[([^\]]+)\]\(([^)]+)\)/g,"<$2|$1>"),e=e.replace(/~~(.+?)~~/g,"~$1~"),e=e.replace(/^[-*_]{3,}$/gm,"\u2014\u2014\u2014"),e}function gh(n){return n?M0(n.trim()):"_No response._"}function yh(n){return`Something went wrong: ${n}`}var Vt=I("slack-adapter"),D0=[{title:"Daily briefing",message:"What's on my plate today?"},{title:"Open tasks",message:"Show me all open tasks from Linear"},{title:"System status",message:"How's everyone doing?"},{title:"Quick note",message:"I need to remember something..."}],Nr=class{id;kind="slack";gateway;registry;excludeChannels;defaultAgentId;botLabel;threadContextMap=new Map;threadContextLastSeen=new Map;constructor(e,t,s=[],r="slack",i,o){this.id=r,this.gateway=e,this.registry=t,this.excludeChannels=new Set(s),this.defaultAgentId=i,this.botLabel=o}async start(e){let t=this.registry.getAll().filter(s=>!s.slackBot||s.slackBot===this.botLabel).flatMap(s=>s.channels).filter(s=>!this.excludeChannels.has(s));this.gateway.addIntegrationChannels(t),this.gateway.onMessage(async s=>{if(this.excludeChannels.has(s.channelName)){Vt.debug("Ignoring message from excluded channel",{channel:s.channelName});return}let r=this.registry.findByChannel(s.channelName);if(r&&r.slackBot&&r.slackBot!==this.botLabel){Vt.debug("Ignoring message from other bot's channel",{channel:s.channelName,owner:r.id,botLabel:this.botLabel});return}let i=s.user.startsWith("U")?await this.gateway.resolveUserName(s.user):void 0,o={id:s.ts,text:s.text,source:{kind:"slack",id:s.channel,label:s.channelName,adapterId:this.id},sender:s.user,senderName:i,threadId:`slack:${s.channel}:${s.threadTs??s.ts}`,timestamp:new Date,meta:{slackTs:s.ts,slackThreadTs:s.threadTs,defaultAgentId:this.defaultAgentId},files:s.files};e(o)}),this.gateway.onThreadStarted(async s=>{Vt.info("Setting up new assistant thread",{channel:s.channel}),await this.gateway.setThreadStatus(s.channel,s.threadTs,"Getting ready..."),await this.gateway.setSuggestedPrompts(s.channel,s.threadTs,D0),await this.gateway.setThreadStatus(s.channel,s.threadTs,""),s.context.channelId&&(this.threadContextMap.set(s.threadTs,s.context.channelId),this.threadContextLastSeen.set(s.threadTs,Date.now()))}),this.gateway.onThreadContextChanged(async s=>{s.context.channelId&&(this.threadContextMap.set(s.threadTs,s.context.channelId),this.threadContextLastSeen.set(s.threadTs,Date.now()),Vt.info("Thread context updated",{threadTs:s.threadTs,channelId:s.context.channelId}))}),await this.gateway.start(),Vt.info("Slack adapter started")}async deliver(e){let t=e.workItem.source.id,s=e.workItem.meta?.slackThreadTs??e.workItem.meta?.slackTs,r=this.registry.get(e.agentId),o=e.workItem.sender?.startsWith("B")||e.workItem.sender==="integration"?void 0:s,a=e.error?yh(e.error):gh(e.text);r&&(a=`${r.icon?`${r.icon} `:""}*${r.name}*: ${a}`);let l=r?{name:r.name,icon:r.icon}:void 0;await this.gateway.postMessage(t,a,o,l)}async onProcessingStart(e,t){let s=e.sender?.startsWith("B")||e.sender==="integration",r=e.meta?.slackThreadTs??e.meta?.slackTs;!s&&r&&await this.gateway.setThreadStatus(e.source.id,r,"Thinking...")}async onProcessingEnd(e,t){let s=e.sender?.startsWith("B")||e.sender==="integration",r=e.meta?.slackThreadTs??e.meta?.slackTs;!s&&r&&await this.gateway.setThreadStatus(e.source.id,r,"")}sweep(e){let t=Date.now()-e,s=0;for(let[r,i]of this.threadContextLastSeen)i<t&&(this.threadContextMap.delete(r),this.threadContextLastSeen.delete(r),s++);return{component:`slack-adapter:${this.id}`,pruned:s,retried:0,bytesFreed:0,errors:[]}}async stop(){await this.gateway.stop(),Vt.info("Slack adapter stopped")}get client(){return this.gateway.client}};O();var je=I("sms-adapter"),wh="https://api.openphone.com/v1",Or=class{id="sms";kind="sms";apiKey;lines;interval=null;constructor(e,t){this.apiKey=e,this.lines=t.map(s=>({id:s.id,label:s.label,number:s.number,routeLabel:s.slackChannel??s.label,lastSeen:new Date().toISOString()}))}async start(e){if(this.lines.length===0){je.warn("SMS adapter has no lines to watch");return}this.poll(e),this.interval=setInterval(()=>this.poll(e),3e4),je.info("SMS adapter started",{lines:this.lines.map(t=>t.label)})}async deliver(e){if(e.error){je.warn("Skipping SMS delivery due to error",{error:e.error});return}let t=e.workItem.sender,s=e.workItem.source.id;try{let r=await fetch(`${wh}/messages`,{method:"POST",headers:{Authorization:this.apiKey,"Content-Type":"application/json"},body:JSON.stringify({from:s,to:[t],content:e.text})});r.ok?je.info("SMS reply sent",{to:t,from:s}):je.error("Failed to send SMS reply",{status:r.status,body:await r.text(),to:t})}catch(r){je.error("SMS delivery error",{error:String(r),to:t})}}async stop(){this.interval&&(clearInterval(this.interval),this.interval=null),je.info("SMS adapter stopped")}async quoApi(e,t={}){let s=new URL(`${wh}${e}`);for(let[i,o]of Object.entries(t))o&&s.searchParams.append(i,o);let r=await fetch(s.toString(),{headers:{Authorization:this.apiKey}});if(!r.ok)throw new Error(`Quo API ${r.status}: ${await r.text()}`);return r.json()}async poll(e){for(let t of this.lines)try{let r=(await this.quoApi("/conversations",{"phoneNumbers[]":t.id,updatedAfter:t.lastSeen,maxResults:"20"})).data??[];if(r.length===0)continue;for(let i of r){let o=i.participants?.[0];if(!o)continue;let l=((await this.quoApi("/messages",{phoneNumberId:t.id,"participants[]":o,maxResults:"10",createdAfter:t.lastSeen})).data??[]).filter(c=>c.direction==="incoming").reverse();for(let c of l){if(!c.text)continue;let d=`SMS from ${c.from} \u2192 ${t.label}:
|
|
313
|
+
${c.text}`,u={id:c.id,text:d,source:{kind:"sms",id:t.id,label:t.routeLabel},sender:c.from,threadId:`sms:${t.id}:${c.from}`,timestamp:new Date,meta:{quoMessageId:c.id,lineNumber:t.number}};je.info("SMS received",{from:c.from,line:t.label,textLength:c.text.length}),e(u)}}t.lastSeen=new Date().toISOString()}catch(s){je.error("SMS poll failed",{line:t.label,error:String(s)})}}};O();import{execFileSync as F0}from"node:child_process";import{readFileSync as K0,writeFileSync as G0,existsSync as bh,mkdirSync as H0}from"node:fs";import{resolve as _h}from"node:path";import{MongoClient as W0}from"mongodb";O();import L0 from"better-sqlite3";var Sh=I("imessage-db"),P0=978307200,$0=43;function R0(n){let e=n/1e9+P0;return new Date(e*1e3)}function B0(n){try{let e=Buffer.from("NS.string"),t=n.indexOf(e);if(t===-1){let o=Buffer.from("NS.data");t=n.indexOf(o)}if(t===-1){let o=Buffer.from("streamtyped"),a=n.indexOf(o);return a===-1?null:U0(n,a+o.length)}for(t+=e.length;t<n.length&&n[t]<32&&n[t]!==10;)t++;let s=t,r=t;for(;r<n.length;){let o=n[r];if(o===0||o===6&&r>s+1)break;r++}if(r<=s)return null;let i=n.subarray(s,r).toString("utf-8").trim();return i.length>0?i:null}catch(e){return Sh.warn("Failed to extract text from attributedBody",{error:String(e)}),null}}function U0(n,e){let t=e,s=-1,r=0;for(;t<n.length-1;)if(q0(n[t])){let o=t,a=0;for(;t<n.length&&j0(n[t]);)a++,t++;a>r&&a>4&&(s=o,r=a)}else t++;if(s===-1)return null;let i=n.subarray(s,s+r).toString("utf-8").trim();return i.length>0?i:null}function q0(n){return n>=32&&n<=126||n>=192}function j0(n){return n>=32&&n<=126||n===10||n===13||n===9||n>=128}var xr=class{db;constructor(e){let t=e??`${process.env.HOME}/Library/Messages/chat.db`;this.db=new L0(t,{readonly:!0})}getNewMessages(e){let t=this.db.prepare(`
|
|
310
314
|
SELECT m.ROWID AS rowId, m.text, m.attributedBody, m.is_from_me AS isFromMe,
|
|
311
315
|
m.date, m.service, h.id AS sender, h.ROWID AS handleRowId
|
|
312
316
|
FROM message m
|
|
@@ -318,45 +322,45 @@ ${c.text}`,u={id:c.id,text:d,source:{kind:"sms",id:t.id,label:t.routeLabel},send
|
|
|
318
322
|
AND m.is_empty = 0
|
|
319
323
|
AND (c.style IS NULL OR c.style != ?)
|
|
320
324
|
ORDER BY m.ROWID ASC
|
|
321
|
-
`).all(e
|
|
325
|
+
`).all(e,$0),s=[];for(let r of t){let i=r.text;if(!i&&r.attributedBody&&(i=B0(r.attributedBody),!i)){Sh.warn("Could not extract text from attributedBody, skipping",{rowId:r.rowId});continue}i&&s.push({rowId:r.rowId,text:i,sender:r.sender,handleRowId:r.handleRowId,service:r.service,date:R0(r.date)})}return s}getMaxRowId(){return this.db.prepare("SELECT MAX(ROWID) AS maxId FROM message").get().maxId??0}close(){this.db.close()}};var se=I("imessage-adapter"),Mr=class{id="imessage";kind="imessage";config;mongoUri;dbName;gateway;db;mongo;threadsCollection;contactsCollection;slackChannelId;interval=null;lastSeenRowId=0;lastMessageAt=0;lastColdPoll=0;stateFilePath;constructor(e,t,s,r,i){this.config=e,this.mongoUri=t,this.dbName=s,this.gateway=r,this.stateFilePath=_h(`/tmp/${i}-imessage-state.json`)}async start(e){this.mongo=new W0(this.mongoUri),await this.mongo.connect();let t=this.mongo.db(this.dbName);this.threadsCollection=t.collection("imessage_threads"),this.contactsCollection=t.collection("contacts");try{let r=((await this.gateway.client.conversations.list({types:"public_channel",limit:200})).channels??[]).find(i=>i.name===this.config.slackChannel);r?.id?(this.slackChannelId=r.id,se.info("Slack mirror channel resolved",{channel:this.config.slackChannel,id:r.id})):se.warn("Slack mirror channel not found",{channel:this.config.slackChannel})}catch(s){se.warn("Failed to resolve Slack mirror channel",{error:String(s)})}try{this.db=new xr}catch(s){se.error("Failed to open chat.db \u2014 check Full Disk Access for node",{error:String(s)});return}this.loadState(),this.lastSeenRowId===0&&(this.lastSeenRowId=this.db.getMaxRowId(),this.saveState(),se.info("First run \u2014 initialized lastSeenRowId",{lastSeenRowId:this.lastSeenRowId})),this.interval=setInterval(()=>this.poll(e),this.config.hotIntervalMs),this.poll(e),se.info("iMessage adapter started",{lastSeenRowId:this.lastSeenRowId,hotIntervalMs:this.config.hotIntervalMs,coldIntervalMs:this.config.coldIntervalMs})}async deliver(e){if(e.error){se.warn("Skipping iMessage delivery due to error",{error:e.error});return}let t=e.workItem.sender;try{this.sendViaAppleScript(t,e.text),se.info("iMessage reply sent",{to:t})}catch(s){se.warn("iMessage send failed, retrying",{error:String(s),to:t});try{await V0(500),this.sendViaAppleScript(t,e.text),se.info("iMessage reply sent on retry",{to:t})}catch(r){se.error("iMessage delivery failed after retry",{error:String(r),to:t});return}}await this.mirrorToSlack(t,e.text,e.agentId,!0)}async stop(){this.interval&&(clearInterval(this.interval),this.interval=null),this.db?.close(),await this.mongo?.close(),se.info("iMessage adapter stopped")}async poll(e){let t=Date.now(),s=t-this.lastMessageAt<this.config.hotWindowMs;if(!(!s&&t-this.lastColdPoll<this.config.coldIntervalMs)&&(s||(this.lastColdPoll=t),!!this.db))try{let r=this.db.getNewMessages(this.lastSeenRowId);if(r.length===0)return;for(let i of r){this.lastSeenRowId=i.rowId,this.lastMessageAt=t;let o={id:`imsg-${i.rowId}`,text:i.text,source:{kind:"imessage",id:"imessage",label:"imessage"},sender:i.sender,threadId:`imessage:${i.sender}`,timestamp:i.date,meta:{messageRowId:i.rowId,service:i.service}};se.info("iMessage received",{from:i.sender,service:i.service,textLength:i.text.length}),await this.mirrorToSlack(i.sender,i.text,void 0,!1),e(o)}this.saveState()}catch(r){se.error("iMessage poll failed",{error:String(r)})}}sendViaAppleScript(e,t){let s=t.replace(/\\/g,"\\\\").replace(/"/g,'\\"');F0("osascript",["-e",'tell application "Messages"',"-e","set targetService to 1st account whose service type = iMessage","-e",`set targetBuddy to participant "${e}" of targetService`,"-e",`send "${s}" to targetBuddy`,"-e","end tell"])}async mirrorToSlack(e,t,s,r){if(!(!this.slackChannelId||!this.threadsCollection))try{let i=await this.threadsCollection.findOne({handleId:e}),o;if(i)o=i.slackThreadTs;else{let l=await this.resolveContactName(e),c=`:speech_balloon: iMessage conversation with ${l}`,d=await this.gateway.postMessage(this.slackChannelId,c);if(!d){se.warn("Failed to create Slack mirror thread",{handleId:e});return}o=d,await this.threadsCollection.insertOne({handleId:e,slackThreadTs:o,displayName:l,createdAt:new Date})}let a=r?s?`*${s}*: `:"*Agent*: ":`*${e}*: `;await this.gateway.postMessage(this.slackChannelId,`${a}${t}`,o)}catch(i){se.warn("Slack mirror failed",{error:String(i),handleId:e})}}async resolveContactName(e){if(!this.contactsCollection)return e;try{let t=await this.contactsCollection.findOne({$or:[{phones:e},{emails:e}]});if(t?.displayName)return`${t.displayName} (${e})`;if(t?.name)return`${t.name} (${e})`}catch{}return e}loadState(){try{if(bh(this.stateFilePath)){let e=JSON.parse(K0(this.stateFilePath,"utf-8"));this.lastSeenRowId=e.lastSeenRowId??0,se.info("Restored iMessage state",{lastSeenRowId:this.lastSeenRowId})}}catch(e){se.warn("Failed to load iMessage state, starting fresh",{error:String(e)})}}saveState(){try{let e=_h(this.stateFilePath,"..");bh(e)||H0(e,{recursive:!0}),G0(this.stateFilePath,JSON.stringify({lastSeenRowId:this.lastSeenRowId}))}catch(e){se.warn("Failed to save iMessage state",{error:String(e)})}}};function V0(n){return new Promise(e=>setTimeout(e,n))}O();var Yt=I("task-client"),Dr=class{apiUrl;apiKey;constructor(e,t){this.apiUrl=e,this.apiKey=t}get isConfigured(){return this.apiKey.length>0}async api(e,t,s){let r=await fetch(`${this.apiUrl}/api/v1${t}`,{method:e,headers:{"x-api-key":this.apiKey,...s?{"Content-Type":"application/json"}:{}},...s?{body:JSON.stringify(s)}:{}});if(!r.ok)throw new Error(`Task API ${r.status}: ${await r.text()}`);return r.json()}async createTask(e){try{let t=await this.api("POST","/tasks",e);return Yt.info("Task created",{taskId:t._id,name:e.name}),t}catch(t){return Yt.error("Failed to create task",{error:String(t),name:e.name}),null}}async updateTask(e,t){try{return await this.api("PUT",`/tasks/${e}`,t),Yt.info("Task updated",{taskId:e,...t}),!0}catch(s){return Yt.error("Failed to update task",{error:String(s),taskId:e}),!1}}async addComment(e,t){try{return await this.api("POST",`/tasks/${e}/comments`,{content:t}),Yt.info("Comment added",{taskId:e}),!0}catch(s){return Yt.error("Failed to add comment",{error:String(s),taskId:e}),!1}}};O();var Hs=I("task-ledger"),Lr=class{threadTaskMap=new Map;threadTaskLastSeen=new Map;apiUrl;agentKeys;fallbackKey;constructor(e,t,s){this.apiUrl=e,this.agentKeys=t,this.fallbackKey=s}get isConfigured(){return Object.keys(this.agentKeys).length>0||this.fallbackKey.length>0}shouldTrack(e){return e.source.kind!=="slack"&&e.source.kind!=="sms"}async onDispatch(e,t){let s=this.getApiKey(t);if(!s)return;let r=e.threadId??e.id,i=this.threadTaskMap.get(r);if(i){this.threadTaskLastSeen.set(r,Date.now()),await this.addComment(i,s,this.formatIncomingComment(e));return}let o=await this.createTask(s,e);o&&(this.threadTaskMap.set(r,o),this.threadTaskLastSeen.set(r,Date.now()))}async onComplete(e){let t=this.getApiKey(e.agentId);if(!t)return;let s=e.workItem.threadId??e.workItem.id,r=this.threadTaskMap.get(s);if(r&&this.threadTaskLastSeen.set(s,Date.now()),!r)return;let i=this.formatCompletionComment(e);await this.addComment(r,t,i),e.error||await this.updateTask(r,t,{state:"DONE"})}sweep(e){let t=Date.now()-e,s=0;for(let[r,i]of this.threadTaskLastSeen)i<t&&(this.threadTaskMap.delete(r),this.threadTaskLastSeen.delete(r),s++);return{component:"task-ledger",pruned:s,retried:0,bytesFreed:0,errors:[]}}getApiKey(e){let t=this.agentKeys[e]??this.fallbackKey;return t||(Hs.debug("No task ledger API key for agent",{agentId:e}),null)}async createTask(e,t){try{let s=await this.api("POST","/tasks",e,{name:this.taskName(t),type:this.taskType(t),description:this.taskDescription(t)});return Hs.info("Task created",{taskId:s.taskId,source:t.source.kind}),s.taskId}catch(s){return Hs.error("Failed to create task",{error:String(s),source:t.source.kind}),null}}async addComment(e,t,s){try{await this.api("POST",`/tasks/${e}/comments`,t,{content:s})}catch(r){Hs.error("Failed to add comment",{error:String(r),taskId:e})}}async updateTask(e,t,s){try{await this.api("PUT",`/tasks/${e}`,t,s)}catch(r){Hs.error("Failed to update task",{error:String(r),taskId:e})}}async api(e,t,s,r){let i=await fetch(`${this.apiUrl}/api/v1${t}`,{method:e,headers:{"x-api-key":s,...r?{"Content-Type":"application/json"}:{}},...r?{body:JSON.stringify(r)}:{}});if(!i.ok)throw new Error(`Task API ${i.status}: ${await i.text()}`);return i.json()}taskName(e){let t=e.text,s=t.match(/\[Scheduled task: (.+?)\]/);if(s)return`[Scheduled] ${s[1]}`;let r=t.match(/Command: `(.+?)`/);if(r)return`[Background] ${r[1].slice(0,80)}`;let i=t.match(/\[Meeting (?:transcript update|ended) — (.+?)\]/);return i?`[Meeting] ${i[1]}`:e.source.kind==="email"?`[Email] ${t.slice(0,80)}`:`[${e.source.kind}] ${t.slice(0,80)}`}taskType(e){return e.source.kind==="email"?"FOLLOW_UP":e.text.includes("[Meeting ended")?"ACTION_ITEM":"AGENT"}taskDescription(e){let t=[`**Source:** ${e.source.kind} / ${e.source.label}`,`**Sender:** ${e.senderName??e.sender}`,`**Time:** ${e.timestamp.toISOString()}`];e.threadId&&t.push(`**Thread:** ${e.threadId}`);let s=5e3,r=e.text.length>s?e.text.slice(0,s)+`
|
|
322
326
|
|
|
323
|
-
... (truncated)`:e.text;return t.push("","---","",
|
|
327
|
+
... (truncated)`:e.text;return t.push("","---","",r),t.join(`
|
|
324
328
|
`)}formatIncomingComment(e){return`**Follow-up message** (${e.source.kind})
|
|
325
329
|
|
|
326
330
|
${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(`
|
|
327
|
-
**Error:** ${e.error}`);let
|
|
331
|
+
**Error:** ${e.error}`);let s=5e3,r=e.text.length>s?e.text.slice(0,s)+`
|
|
328
332
|
|
|
329
|
-
... (truncated)`:e.text;return t.push("",
|
|
330
|
-
`)}};
|
|
331
|
-
`),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}};
|
|
333
|
+
... (truncated)`:e.text;return t.push("",r),t.join(`
|
|
334
|
+
`)}};O();import{createServer as Y0}from"node:http";import{spawn as J0}from"node:child_process";import{mkdir as z0,readFile as kh,writeFile as Q0,readdir as X0,stat as Z0,unlink as eb}from"node:fs/promises";import{openSync as tb,closeSync as sb}from"node:fs";import{randomUUID as nb}from"node:crypto";var ge=I("bg-task-manager"),_a=100,rb=5e3,Pr=class{port;authToken;tasksDir;tasks=new Map;onComplete;server=null;orphanPollers=new Map;constructor(e,t,s,r){this.port=e,this.authToken=t,this.tasksDir=s,this.onComplete=r}async start(){await z0(this.tasksDir,{recursive:!0}),this.server=Y0((e,t)=>{this.handleRequest(e,t).catch(s=>{ge.error("HTTP handler error",{error:String(s)}),t.writeHead(500,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Internal server error"}))})}),await new Promise(e=>{this.server.listen(this.port,"127.0.0.1",()=>e())}),ge.info("Background task manager started",{port:this.port})}async scanOrphans(){let e;try{e=await X0(this.tasksDir)}catch{return}let t=e.filter(i=>i.endsWith(".json")),s=0,r=0;for(let i of t)try{let o=await kh(`${this.tasksDir}/${i}`,"utf-8"),a=JSON.parse(o);this.tasks.set(a.id,a),a.status==="running"&&a.pid&&(this.isProcessAlive(a.pid)?(this.pollOrphan(a.id,a.pid),r++):(a.status="orphaned",a.completedAt=new Date().toISOString(),await this.writeMeta(a),this.fireCompletion(a),s++))}catch(o){ge.warn("Failed to read orphan task file",{file:i,error:String(o)})}(s>0||r>0)&&ge.info("Orphan scan complete",{orphaned:s,recovered:r,total:t.length})}async stop(){for(let[,t]of this.orphanPollers)clearInterval(t);this.orphanPollers.clear();let e=[...this.tasks.values()].filter(t=>t.status==="running"&&t.pid);if(e.length>0){ge.info("Sending SIGTERM to running background tasks",{count:e.length});for(let t of e)this.killProcess(t.pid,"SIGTERM");await this.sleep(rb);for(let t of e)t.pid&&this.isProcessAlive(t.pid)&&(ge.warn("Background task did not exit after SIGTERM, sending SIGKILL",{id:t.id,pid:t.pid}),this.killProcess(t.pid,"SIGKILL"))}this.server&&(this.server.close(),this.server=null),ge.info("Background task manager stopped",{killed:e.length})}killProcess(e,t){try{process.kill(e,t)}catch(s){s.code!=="ESRCH"&&ge.warn("Failed to send signal to process",{pid:e,signal:t,error:String(s)})}}sleep(e){return new Promise(t=>setTimeout(t,e))}async handleRequest(e,t){let s=new URL(e.url??"/",`http://127.0.0.1:${this.port}`);if(e.headers.authorization!==`Bearer ${this.authToken}`){t.writeHead(401,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Unauthorized"}));return}if(e.method==="POST"&&s.pathname==="/tasks"){let o=await this.readBody(e),a=JSON.parse(o),l=await this.spawnTask(a);t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({id:l.id,status:"running"}));return}let i=s.pathname.match(/^\/tasks\/([a-f0-9-]+)$/);if(e.method==="GET"&&i){let o=i[1],a=await this.taskStatus(o);if(!a){t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Task not found"}));return}t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify(a));return}if(e.method==="GET"&&s.pathname==="/tasks"){let o=s.searchParams.get("agentId")??void 0,a=await this.listTasks(o);t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({tasks:a}));return}t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Not found"}))}async spawnTask(e){let t=nb(),s=`${this.tasksDir}/${t}.log`,r=`${this.tasksDir}/${t}.json`,i=e.cwd??process.env.HOME??"/tmp",o=tb(s,"a"),a=J0(e.command,e.args??[],{cwd:i,detached:!0,stdio:["ignore",o,o]});sb(o);let l={id:t,command:e.command+(e.args?.length?" "+e.args.join(" "):""),cwd:i,status:"running",exitCode:null,startedAt:new Date().toISOString(),completedAt:null,logPath:s,metaPath:r,context:e.context,pid:a.pid??null};return this.tasks.set(t,l),a.on("exit",c=>this.handleExit(t,c)),a.on("error",c=>{ge.error("Background task process error",{id:t,error:String(c)}),this.handleExit(t,1)}),this.writeMeta(l).catch(()=>{}),ge.info("Background task spawned",{id:t,command:e.command,cwd:i,pid:a.pid,agentId:e.context.agentId}),l}async handleExit(e,t){let s=this.tasks.get(e);!s||s.status!=="running"||(s.exitCode=t??1,s.status=s.exitCode===0?"completed":"failed",s.completedAt=new Date().toISOString(),await this.writeMeta(s),this.fireCompletion(s))}fireCompletion(e){let t=new Date(e.startedAt).getTime(),r=(((e.completedAt?new Date(e.completedAt).getTime():Date.now())-t)/1e3).toFixed(1);this.tailLog(e.logPath,_a).then(i=>{let o=e.status==="completed"?"completed":e.status==="failed"?"failed":"orphaned",a={id:`bg:${e.id}:done:${Date.now()}`,text:[`[Background task ${o}] Task \`${e.id}\` finished with exit code ${e.exitCode??"unknown"}.`,`Command: \`${e.command}\``,`Duration: ${r}s`,`Output (last ${_a} lines):`,"```",i||"(no output)","```"].join(`
|
|
335
|
+
`),source:{kind:e.context.channelKind||"internal",id:e.context.channelId,label:e.context.channelLabel,adapterId:e.context.adapterId},sender:"system",threadId:e.context.threadId,timestamp:new Date,meta:{slackTs:e.context.slackTs,slackThreadTs:e.context.slackThreadTs,bgTaskId:e.id}};ge.info("Background task completed, dispatching notification",{id:e.id,status:e.status,exitCode:e.exitCode,durationSec:r,agentId:e.context.agentId}),this.onComplete(a)}).catch(i=>{ge.error("Failed to fire completion notification",{id:e.id,error:String(i)})})}async taskStatus(e){let t=this.tasks.get(e);if(!t)return null;let s=await this.tailLog(t.logPath,_a);return{id:t.id,status:t.status,exitCode:t.exitCode,startedAt:t.startedAt,completedAt:t.completedAt,command:t.command,output:s}}async listTasks(e){let t=[];for(let s of this.tasks.values())e&&s.context.agentId!==e||t.push({id:s.id,status:s.status,exitCode:s.exitCode,startedAt:s.startedAt,completedAt:s.completedAt,command:s.command});return t}async writeMeta(e){try{await Q0(e.metaPath,JSON.stringify(e,null,2),"utf-8")}catch(t){ge.error("Failed to write task metadata",{id:e.id,error:String(t)})}}async tailLog(e,t){try{return(await kh(e,"utf-8")).split(`
|
|
332
336
|
`).slice(-t).join(`
|
|
333
|
-
`).trim()}catch{return""}}isProcessAlive(e){try{return process.kill(e,0),!0}catch{return!1}}pollOrphan(e,t){let
|
|
337
|
+
`).trim()}catch{return""}}isProcessAlive(e){try{return process.kill(e,0),!0}catch{return!1}}pollOrphan(e,t){let s=setInterval(()=>{if(!this.isProcessAlive(t)){clearInterval(s),this.orphanPollers.delete(e);let r=this.tasks.get(e);r&&r.status==="running"&&(r.status="orphaned",r.completedAt=new Date().toISOString(),this.writeMeta(r).then(()=>this.fireCompletion(r)))}},5e3);this.orphanPollers.set(e,s)}async sweep(e){let t=Date.now()-e,s=0,r=0,i=[];for(let[o,a]of this.tasks)if(!(a.status==="running"||!a.completedAt||new Date(a.completedAt).getTime()>t)){for(let c of[a.metaPath,a.logPath])try{let d=await Z0(c);r+=d.size,await eb(c)}catch(d){d.code!=="ENOENT"&&i.push(`Failed to delete ${c}: ${String(d)}`)}this.tasks.delete(o),s++}return{component:"bg-task-manager",pruned:s,retried:0,bytesFreed:r,errors:i}}readBody(e){return new Promise((t,s)=>{let r="";e.on("data",i=>{r+=i.toString()}),e.on("end",()=>t(r)),e.on("error",s)})}};O();import{createServer as cb}from"node:http";import{spawn as lb}from"node:child_process";import{mkdir as db,readFile as $r,writeFile as ub,readdir as hb,stat as fb,unlink as pb,open as mb}from"node:fs/promises";import{openSync as Ah,closeSync as Ch}from"node:fs";import{randomUUID as gb}from"node:crypto";function vh(n){let e=n.trim();if(!e)return null;try{let t=JSON.parse(e);return t.type!=="result"?null:{sessionId:t.session_id??null,result:t.result??"",subtype:t.subtype??"unknown",costUsd:t.total_cost_usd??0,durationMs:t.duration_ms??0,numTurns:t.num_turns??0,isError:t.is_error===!0}}catch{return null}}var ib=/\*{0,2}Status:?\*{0,2}\s+(NEEDS_CONTEXT|BLOCKED)/i,ob=/\*{0,2}Question:?\*{0,2}\s+(.+?)(?:\n\n|\n\*{0,2}(?:Context|Status|Files|What)|$)/is,ab=/\*{0,2}Context:?\*{0,2}\s+(.+?)(?:\n\n\*{0,2}(?:Status|Question|Files|To respond)|$)/is;function Th(n){if(!n)return null;let e=ib.exec(n);if(!e)return null;let t=e[1].toUpperCase(),r=ob.exec(n)?.[1]?.trim()??"",o=ab.exec(n)?.[1]?.trim()??"";return{status:t,question:r,context:o}}function Ih(n,e,t){return t||e?.subtype==="error_max_turns"||e?.subtype==="error_max_budget_usd"?"needs_input":n===0&&e?.subtype==="success"||n===0&&!e?"completed":"failed"}var X=I("code-task-manager"),Ws=2e3,ka=100,Eh=5e3,Rr=class{port;authToken;pluginDirs;maxConcurrent;tasksDir;cliBin;options;tasks=new Map;onComplete;server=null;orphanPollers=new Map;reapTimers=new Set;constructor(e,t,s,r,i,o,a){this.port=e,this.authToken=t,this.pluginDirs=s,this.maxConcurrent=r,this.tasksDir=i,this.onComplete=o,this.options=a??{},this.cliBin=this.options.cliBin??"claude"}async start(){await db(this.tasksDir,{recursive:!0}),this.server=cb((e,t)=>{this.handleRequest(e,t).catch(s=>{X.error("HTTP handler error",{error:String(s)}),t.writeHead(500,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Internal server error"}))})}),await new Promise(e=>{this.server.listen(this.port,"127.0.0.1",()=>e())}),X.info("Code task manager started",{port:this.port})}async scanOrphans(){let e;try{e=await hb(this.tasksDir)}catch{return}let t=e.filter(i=>i.endsWith(".meta.json")),s=0,r=0;for(let i of t)try{let o=await $r(`${this.tasksDir}/${i}`,"utf-8"),a=JSON.parse(o);this.tasks.set(a.id,a),a.status==="running"&&a.pid&&(this.isProcessAlive(a.pid)?(this.pollOrphan(a.id,a.pid),r++):(a.status="orphaned",a.completedAt=new Date().toISOString(),await this.writeMeta(a),this.fireCompletion(a),s++))}catch(o){X.warn("Failed to read orphan task file",{file:i,error:String(o)})}(s>0||r>0)&&X.info("Orphan scan complete",{orphaned:s,recovered:r,total:t.length})}async stop(){for(let[,t]of this.orphanPollers)clearInterval(t);this.orphanPollers.clear();for(let t of this.reapTimers)clearTimeout(t);this.reapTimers.clear();let e=[...this.tasks.values()].filter(t=>t.status==="running"&&t.pid);if(e.length>0){X.info("Sending SIGTERM to running code tasks",{count:e.length});for(let t of e)this.killProcess(t.pid,"SIGTERM");await this.sleep(Eh);for(let t of e)t.pid&&this.isProcessAlive(t.pid)&&(X.warn("Code task did not exit after SIGTERM, sending SIGKILL",{id:t.id,pid:t.pid}),this.killProcess(t.pid,"SIGKILL"))}this.server&&(this.server.close(),this.server=null),X.info("Code task manager stopped",{killed:e.length})}async reapStale(){let e=this.options.maxLifetimeMs??288e5,t=this.options.staleGraceMs??1800*1e3,s=Date.now(),r=0,i=0;for(let o of this.tasks.values()){if(o.status!=="running"||!o.pid)continue;let a=s-new Date(o.startedAt).getTime();if(a<e)continue;if(await this.isFileRecentlyModified(o.stderrPath,t)){X.info("Stale code task spared \u2014 stderr still active",{id:o.id,pid:o.pid,ageHours:(a/36e5).toFixed(1)}),i++;continue}X.warn("Reaping stale code task",{id:o.id,pid:o.pid,ageHours:(a/36e5).toFixed(1)}),this.killProcess(o.pid,"SIGTERM"),o.status="orphaned";let c=setTimeout(()=>{this.reapTimers.delete(c),o.pid&&this.isProcessAlive(o.pid)&&(X.warn("Stale code task did not exit after SIGTERM, sending SIGKILL",{id:o.id,pid:o.pid}),this.killProcess(o.pid,"SIGKILL"))},Eh);this.reapTimers.add(c),r++}return(r>0||i>0)&&X.info("Stale reap complete",{reaped:r,spared:i}),{reaped:r,spared:i}}async handleRequest(e,t){let s=new URL(e.url??"/",`http://127.0.0.1:${this.port}`);if(e.headers.authorization!==`Bearer ${this.authToken}`){t.writeHead(401,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Unauthorized"}));return}if(e.method==="POST"&&s.pathname==="/tasks"){let a;try{a=JSON.parse(await this.readBody(e))}catch{t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Invalid JSON body"}));return}try{let l=await this.spawnTask(a);t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({id:l.id,status:"running"}))}catch(l){let c=String(l instanceof Error?l.message:l),d=c.includes("concurrency")?429:400;t.writeHead(d,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:c}))}return}let i=s.pathname.match(/^\/tasks\/([a-f0-9-]+)\/respond$/);if(e.method==="POST"&&i){let a=i[1],l;try{l=JSON.parse(await this.readBody(e))}catch{t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Invalid JSON body"}));return}try{let c=await this.resumeTask(a,l.response,l.context);t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({id:c.id,status:"running",resumedFrom:a}))}catch(c){t.writeHead(400,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:String(c instanceof Error?c.message:c)}))}return}let o=s.pathname.match(/^\/tasks\/([a-f0-9-]+)$/);if(e.method==="GET"&&o){let a=o[1],l=await this.taskStatus(a);if(!l){t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Task not found"}));return}t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify(l));return}if(e.method==="GET"&&s.pathname==="/tasks"){let a=s.searchParams.get("agentId")??void 0,l=this.listTasks(a);t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({tasks:l}));return}t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Not found"}))}async spawnTask(e){if([...this.tasks.values()].filter(S=>S.status==="running").length>=this.maxConcurrent)throw new Error(`Max concurrency reached (${this.maxConcurrent} running). Wait for a task to finish or increase the limit.`);let s=gb(),r=`${this.tasksDir}/${s}.stdout.json`,i=`${this.tasksDir}/${s}.stderr.log`,o=`${this.tasksDir}/${s}.meta.json`,a=e.cwd,l=e.model??"",c=e.maxTurns??100,d=e.maxBudget??5,u=e.prompt;if(this.options?.prefetcher)try{let S=await this.options.prefetcher.getContext(e.prompt,e.context.agentId);S&&(u=S+`
|
|
334
338
|
|
|
335
339
|
---
|
|
336
340
|
|
|
337
|
-
`+e.prompt)}catch(
|
|
341
|
+
`+e.prompt)}catch(S){X.warn(`Prefetch failed for task, proceeding without context: ${S}`)}let h=e.sessionId?u:u+`
|
|
338
342
|
|
|
339
343
|
---
|
|
340
|
-
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.`,
|
|
341
|
-
`)}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 ${
|
|
342
|
-
`)}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 ${
|
|
343
|
-
`)}let a="";try{a=(await
|
|
344
|
-
`).slice(-
|
|
345
|
-
`).trim()}catch{a="(no stderr output)"}let l=t?.result?t.result.slice(-
|
|
344
|
+
IMPORTANT: After completing implementation, you MUST run /quality-gate before reporting done. This includes test creation, lint, typecheck, and build verification. Do not claim completion without quality-gate passing.`,p=this.buildArgs({prompt:h,maxTurns:c,maxBudget:d,model:l,sessionId:e.sessionId}),g=Ah(r,"w"),f=Ah(i,"w"),y=lb(this.cliBin,p,{cwd:a,detached:!0,stdio:["ignore",g,f],env:process.env});y.on("exit",S=>this.handleExit(s,S)),y.on("error",S=>{X.error("Code task process error",{id:s,error:String(S)}),this.handleExit(s,1)}),Ch(g),Ch(f);let w={id:s,prompt:e.prompt.slice(0,500),cwd:a,model:l,maxTurns:c,maxBudget:d,status:"running",exitCode:null,startedAt:new Date().toISOString(),completedAt:null,stdoutPath:r,stderrPath:i,metaPath:o,context:e.context,pid:y.pid??null,sessionId:e.sessionId??null,costUsd:0,numTurns:0,escalation:null,parentTaskId:e.parentTaskId??null};return this.tasks.set(s,w),await this.writeMeta(w),X.info("Code task spawned",{id:s,cwd:a,model:l||"(default)",maxTurns:c,maxBudget:d,pid:y.pid,agentId:e.context.agentId,parentTaskId:e.parentTaskId??null}),w}buildArgs(e){let t=[];e.sessionId?t.push("--resume",e.sessionId,"-p",e.prompt):t.push("-p",e.prompt);for(let s of this.pluginDirs)t.push("--plugin-dir",s);return t.push("--output-format","json","--dangerously-skip-permissions"),t.push("--max-turns",String(e.maxTurns)),t.push("--max-budget-usd",String(e.maxBudget)),e.model&&t.push("--model",e.model),t}async resumeTask(e,t,s){let r=this.tasks.get(e);if(!r)throw new Error(`Task ${e} not found`);if(r.status!=="needs_input")throw new Error(`Task ${e} is ${r.status}, not needs_input`);if(!r.sessionId)throw new Error(`Task ${e} has no session ID for resume`);return r.status="running",this.spawnTask({prompt:t,cwd:r.cwd,model:r.model,maxTurns:r.maxTurns,maxBudget:r.maxBudget,sessionId:r.sessionId,context:s??r.context,parentTaskId:e})}async handleExit(e,t){let s=this.tasks.get(e);if(!s||s.status!=="running")return;s.exitCode=t??1,s.completedAt=new Date().toISOString();let r=null;try{let o=await $r(s.stdoutPath,"utf-8");r=vh(o)}catch{}r&&(s.sessionId=r.sessionId,s.costUsd=r.costUsd,s.numTurns=r.numTurns);let i=r?Th(r.result):null;s.escalation=i,s.status=Ih(s.exitCode,r,i),await this.writeMeta(s),this.fireCompletion(s,r)}fireCompletion(e,t){let s=new Date(e.startedAt).getTime(),i=(((e.completedAt?new Date(e.completedAt).getTime():Date.now())-s)/1e3).toFixed(1);(async()=>{if(e.status==="needs_input"&&e.escalation){let c=[`[Code task needs input] Task \`${e.id}\` is waiting for a decision.`,""];return e.escalation.status==="BLOCKED"?c.push(`**BLOCKED**: ${e.escalation.question||"No details provided."}`):c.push(`**Needs context**: ${e.escalation.question||"No details provided."}`),e.escalation.context&&c.push("",`Context: ${e.escalation.context}`),c.push("",`Duration: ${i}s | Cost: $${e.costUsd.toFixed(2)} | Turns: ${e.numTurns}`,"",`To respond: \`code_respond({ id: "${e.id}", response: "your answer" })\``),c.join(`
|
|
345
|
+
`)}if(e.status==="needs_input"&&t?.subtype){let c=t.subtype==="error_max_turns"?`Hit max turns limit (${e.maxTurns})`:`Hit budget limit ($${e.maxBudget})`;return[`[Code task limit reached] Task \`${e.id}\` \u2014 ${c}.`,`Duration: ${i}s | Cost: $${e.costUsd.toFixed(2)} | Turns: ${e.numTurns}`,"","The session can be resumed with additional budget/turns via `code_respond`.","",`Result (last ${Ws} chars):`,"```",(t.result||"(no output)").slice(-Ws),"```"].join(`
|
|
346
|
+
`)}if(e.status==="completed"){let c=t?.result||"(no output)";return[`[Code task completed] Task \`${e.id}\` finished successfully.`,`Duration: ${i}s | Cost: $${e.costUsd.toFixed(2)} | Turns: ${e.numTurns}`,"",`Result (last ${Ws} chars):`,"```",c.slice(-Ws),"```"].join(`
|
|
347
|
+
`)}let a="";try{a=(await $r(e.stderrPath,"utf-8")).split(`
|
|
348
|
+
`).slice(-ka).join(`
|
|
349
|
+
`).trim()}catch{a="(no stderr output)"}let l=t?.result?t.result.slice(-Ws):"";return[`[Code task ${e.status}] Task \`${e.id}\` exited with code ${e.exitCode??"unknown"}.`,`Duration: ${i}s | Cost: $${e.costUsd.toFixed(2)} | Turns: ${e.numTurns}`,"",l?`Result:
|
|
346
350
|
\`\`\`
|
|
347
351
|
${l}
|
|
348
352
|
\`\`\`
|
|
349
|
-
`:"",`Stderr (last ${
|
|
350
|
-
`)})().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}};
|
|
351
|
-
`).slice(-
|
|
352
|
-
`).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:
|
|
353
|
-
`),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}};
|
|
354
|
-
`),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}};
|
|
355
|
-
`);await this.taskClient.addComment(this.taskId,o),i.length>0&&await this.taskClient.updateTask(this.taskId,{state:"NEEDS_ATTENTION"})}catch(o){et.warn("Failed to report to dodi_v2",{error:String(o)})}}formatBytes(e){if(e===0)return"0 B";let t=["B","KB","MB","GB"],r=Math.floor(Math.log(e)/Math.log(1024));return`${(e/Math.pow(1024,r)).toFixed(1)} ${t[r]}`}};ar();P();import{MongoClient as mE}from"mongodb";var gE=T("memory-store"),pi=class{mongoUri;dbName;client;db;collection;constructor(e,t){this.mongoUri=e,this.dbName=t,this.client=new mE(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}),gE.info("Memory store initialized",{db:this.dbName})}getCollection(){return this.collection}async save(e,t,r,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:r},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,r,n){let i={content:t,updatedAt:new Date};return r&&(i.importance=r),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),r=Date.now();return t.map(n=>({...n,ageDays:Math.floor((r-n.createdAt.getTime())/(1e3*60*60*24)),daysSinceAccess:Math.floor((r-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(),r=new Map;for(let n of t){let i=r.get(n.topic)??[];i.push(n),r.set(n.topic,i)}return r}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(),r=new Map;for(let n of t){let i=r.get(n.topic)??[];i.push(n),r.set(n.topic,i)}return r}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 r=await this.collection.find({agentId:e,purged:!0,purgedAt:{$lt:t}}).toArray();if(r.length===0)return[];let n=r.map(i=>i._id);return await this.collection.deleteMany({_id:{$in:n}}),r}async getAgentIds(){return this.collection.distinct("agentId")}async close(){await this.client.close()}};P();Kn();import{QdrantClient as yE}from"@qdrant/js-client-rest";var wE=T("memory-embedder"),xt="agent_memory",mi=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 yE({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(n=>n.name===xt)){let n=await this.embed("test");await e.createCollection(xt,{vectors:{size:n.length,distance:"Cosine"}}),wE.info("Created Qdrant collection",{collection:xt,vectorSize:n.length})}this.collectionReady=!0}async upsert(e,t,r){await this.ensureCollection();let n=await this.embed(t);await this.getClient().upsert(xt,{points:[{id:e,vector:n,payload:r}]})}async remove(e){await this.ensureCollection(),await this.getClient().delete(xt,{points:[e]})}async search(e,t,r){await this.ensureCollection();let n=await this.embed(e),i=r?.limit??10,o=[{key:"agentId",match:{value:t}}];return r?.type&&o.push({key:"type",match:{value:r.type}}),r?.topic&&o.push({key:"topic",match:{value:r.topic}}),r?.tier&&o.push({key:"tier",match:{value:r.tier}}),r?.importance&&o.push({key:"importance",match:{value:r.importance}}),(await this.getClient().search(xt,{vector:n,limit:i,with_payload:!0,filter:{must:o}})).map(l=>({mongoId:l.payload?.mongoId,score:l.score}))}async findSimilar(e,t,r,n=10){return await this.ensureCollection(),(await this.getClient().query(xt,{query:{recommend:{positive:[e]}},filter:{must:[{key:"agentId",match:{value:t}}]},limit:n,with_payload:!0,score_threshold:r})).points.map(o=>({mongoId:o.payload?.mongoId,score:o.score??0,pointId:typeof o.id=="string"?o.id:String(o.id)}))}};P();import{ObjectId as SE}from"mongodb";import{query as gi}from"@anthropic-ai/claude-agent-sdk";var _h={critical:1,high:.75,medium:.5,low:.25},Th={decision:1,fact:.8,preference:.8,summary:.6,task:.5,interaction:.3};var Ue=T("memory-lifecycle"),yi=class{store;embedder;config;dreamConfig;constructor(e,t,r,n){this.store=e,this.embedder=t,this.config=r,this.dreamConfig=n}computeScore(e,t){let r=_h[e.importance]??.5,n=Th[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 r*.4+a*.3+l*.2+n*.1}estimateTokens(e){return Math.ceil(e.length/4)}async sweep(){let e=Date.now(),t=0,r=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,r+=u.demoted,n+=u.summarized,i+=u.cleaned,o+=u.purged}catch(u){a.push(`${d}: ${u}`),Ue.error("Memory lifecycle sweep failed for agent",{agentId:d,error:String(u)})}}catch(c){a.push(`global: ${c}`)}return t+r+n+i+o>0&&Ue.info("Memory lifecycle sweep complete",{durationMs:Date.now()-e,promoted:t,demoted:r,summarized:n,cleaned:i,purged:o,errors:a.length}),{component:"memory-lifecycle",pruned:r+i+o,retried:t,bytesFreed:0,errors:a}}async sweepAgent(e){let t=0,r=0,n=await this.store.getAllNonPinned(e),i=0,o=0;if(n.length>0){let d=n.map(S=>S.accessCount).sort((S,b)=>S-b),u=d[Math.floor(d.length/2)]??0,f=n.map(S=>({record:S,score:this.computeScore(S,u)})),h=[];for(let{record:S,score:b}of f){let v;b>=this.config.hotThreshold?v="hot":b>=this.config.warmThreshold?v="warm":v="cold",v!==S.tier&&(h.push({id:S._id,newTier:v}),v==="hot"&&S.tier!=="hot"&&t++,v!=="hot"&&S.tier==="hot"&&r++)}for(let S of["hot","warm","cold"]){let b=h.filter(v=>v.newTier===S).map(v=>v.id);await this.store.setTierBulk(b,S)}let m=await this.store.getHotTier(e),p=0,y=[];for(let S of m){let b=this.estimateTokens(S.content);S.pinned||(p+=b,p>this.config.hotBudgetTokens&&y.push(S._id))}y.length>0&&(await this.store.setTierBulk(y,"warm"),r+=y.length);try{i=await this.summarizeCold(e)}catch(S){Ue.warn("Cold summarization failed",{agentId:e,error:String(S)})}}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(f=>f.qdrantPointId).filter(Boolean);for(let f of u)await this.embedder.remove(f);Ue.info("Hard-deleted purged records",{agentId:e,count:d.length})}}catch(d){Ue.warn("Purge hard-delete phase failed",{agentId:e,error:String(d)})}return{promoted:t,demoted:r,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,r=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);r+=u.resolved,i+=u.flagged;let f=await this.promotePatterns(c);n+=f.promoted}catch(d){o.push(`${c}: ${d}`),Ue.error("autoDream failed for agent",{agentId:c,error:String(d)})}}catch(l){o.push(`global: ${l}`)}return t+r+n+i>0&&Ue.info("autoDream complete",{durationMs:Date.now()-e,merged:t,contradictions:r,promoted:n,flaggedForReview:i,errors:o.length}),{merged:t,contradictions:r,promoted:n,flaggedForReview:i,errors:o}}async mergeDuplicates(e){let t=this.dreamConfig,r=await this.store.getByTiersForAgent(e,["hot","warm"]);if(r.length<2)return{merged:0};let n=new Set,i=0,o=0;for(let a of r){if(o>=t.maxClustersPerRun)break;if(n.has(a.qdrantPointId))continue;let c=(await this.embedder.findSimilar(a.qdrantPointId,e,t.similarityThreshold,10)).filter(E=>!n.has(E.pointId));if(c.length===0)continue;n.add(a.qdrantPointId);for(let E of c)n.add(E.pointId);let d=c.map(E=>new SE(E.mongoId)),u=await this.store.getByIds(d),f=[a,...u],m=["Merge the following duplicate or overlapping memories into a single consolidated record.","Preserve all unique details. Discard exact duplicates. Be concise.","",f.map(E=>`- [${E.type}/${E.importance}] ${E.content}`).join(`
|
|
353
|
+
`:"",`Stderr (last ${ka} lines):`,"```",a||"(empty)","```"].filter(Boolean).join(`
|
|
354
|
+
`)})().then(a=>{let l={id:`ct:${e.id}:done:${Date.now()}`,text:a,source:{kind:e.context.channelKind||"internal",id:e.context.channelId,label:e.context.channelLabel,adapterId:e.context.adapterId},sender:"system",threadId:e.context.threadId,timestamp:new Date,meta:{slackTs:e.context.slackTs,slackThreadTs:e.context.slackThreadTs,codeTaskId:e.id}};X.info("Code task completed, dispatching notification",{id:e.id,status:e.status,exitCode:e.exitCode,costUsd:e.costUsd,numTurns:e.numTurns,durationSec:i,agentId:e.context.agentId,hasEscalation:!!e.escalation}),this.onComplete(l),this.options?.knowledgeExtractor&&e.status==="completed"&&t&&this.options.knowledgeExtractor.extract(e.context.agentId,t).then(c=>{c>0&&X.info(`Extracted ${c} code insights from task ${e.id}`)}).catch(c=>{X.warn(`Knowledge extraction failed for task ${e.id}: ${c}`)})}).catch(a=>{X.error("Failed to fire completion notification",{id:e.id,error:String(a)})})}async taskStatus(e){let t=this.tasks.get(e);if(!t)return null;let s="";try{s=(await $r(t.stderrPath,"utf-8")).split(`
|
|
355
|
+
`).slice(-ka).join(`
|
|
356
|
+
`).trim()}catch{}return{id:t.id,status:t.status,exitCode:t.exitCode,startedAt:t.startedAt,completedAt:t.completedAt,cwd:t.cwd,model:t.model,costUsd:t.costUsd,numTurns:t.numTurns,sessionId:t.sessionId,escalation:t.escalation,parentTaskId:t.parentTaskId,stderrTail:s}}listTasks(e){let t=[];for(let s of this.tasks.values())e&&s.context.agentId!==e||t.push({id:s.id,status:s.status,exitCode:s.exitCode,startedAt:s.startedAt,completedAt:s.completedAt,costUsd:s.costUsd,numTurns:s.numTurns,cwd:s.cwd,prompt:s.prompt});return t}async sweep(e){let t=Date.now()-e,s=0,r=0,i=[];for(let[o,a]of this.tasks)if(!(a.status==="running"||!a.completedAt||new Date(a.completedAt).getTime()>t)){for(let c of[a.metaPath,a.stdoutPath,a.stderrPath])try{let d=await fb(c);r+=d.size,await pb(c)}catch(d){d.code!=="ENOENT"&&i.push(`Failed to delete ${c}: ${String(d)}`)}this.tasks.delete(o),s++}return{component:"code-task-manager",pruned:s,retried:0,bytesFreed:r,errors:i}}async writeMeta(e){try{await ub(e.metaPath,JSON.stringify(e,null,2),"utf-8")}catch(t){X.error("Failed to write task metadata",{id:e.id,error:String(t)})}}isProcessAlive(e){try{return process.kill(e,0),!0}catch{return!1}}pollOrphan(e,t){let s=setInterval(()=>{if(!this.isProcessAlive(t)){clearInterval(s),this.orphanPollers.delete(e);let r=this.tasks.get(e);r&&r.status==="running"&&(r.status="orphaned",r.completedAt=new Date().toISOString(),this.writeMeta(r).then(()=>this.fireCompletion(r)))}},5e3);this.orphanPollers.set(e,s)}killProcess(e,t){try{process.kill(e,t)}catch(s){s.code!=="ESRCH"&&X.warn("Failed to send signal to process",{pid:e,signal:t,error:String(s)})}}async isFileRecentlyModified(e,t){try{let s=await mb(e,"r"),r=await s.stat();return await s.close(),Date.now()-r.mtimeMs<t}catch{return!1}}sleep(e){return new Promise(t=>setTimeout(t,e))}readBody(e){return new Promise((t,s)=>{let r="";e.on("data",i=>{r+=i.toString()}),e.on("end",()=>t(r)),e.on("error",s)})}};O();import{createServer as yb}from"node:http";import{randomUUID as wb}from"node:crypto";var ne=I("meeting-monitor"),Sb=1e4,bb=15e3,_b=2,kb=new Set(["done","fatal","call_ended","media_expired","recording_permission_denied"]),Br=class{port;webhookSecret;onUpdate;server=null;sessions=new Map;sessionsByBotId=new Map;constructor(e,t,s){this.port=e,this.webhookSecret=t,this.onUpdate=s}async start(){this.server=yb((e,t)=>{this.handleRequest(e,t).catch(s=>{ne.error("HTTP handler error",{error:String(s)}),t.writeHead(500,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Internal server error"}))})}),await new Promise(e=>{this.server.listen(this.port,"127.0.0.1",()=>e())}),ne.info("Meeting monitor started",{port:this.port}),this.webhookSecret||ne.error("Webhook verification disabled \u2014 RECALL_WEBHOOK_SECRET not set. All webhook requests will be rejected.")}stop(){for(let e of this.sessions.values())e.pollTimer&&(clearInterval(e.pollTimer),e.pollTimer=null);this.server&&(this.server.close(),this.server=null),ne.info("Meeting monitor stopped")}async handleRequest(e,t){let s=new URL(e.url??"/",`http://127.0.0.1:${this.port}`);if(e.method==="POST"&&s.pathname==="/meetings/start"){let i=await this.readBody(e),o=JSON.parse(i),a=this.createSession(o);t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({sessionId:a.id}));return}let r=s.pathname.match(/^\/meetings\/([a-f0-9-]+)\/stop$/);if(e.method==="POST"&&r){let i=r[1],o=this.sessions.get(i);if(!o){t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Session not found"}));return}o.pollTimer&&(clearInterval(o.pollTimer),o.pollTimer=null),o.status="ended",o.endedAt=Date.now(),t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({status:"stopped"}));return}if(e.method==="POST"&&s.pathname.startsWith("/webhook/transcript")){if(!this.webhookSecret){t.writeHead(403,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Webhook verification not configured"}));return}if(s.pathname!==`/webhook/transcript/${this.webhookSecret}`){t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Not found"}));return}let i=await this.readBody(e);this.handleTranscriptWebhook(i),t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({ok:!0}));return}if(e.method==="GET"&&s.pathname==="/meetings"){let i=[];for(let o of this.sessions.values())i.push({id:o.id,botId:o.botId,botName:o.botName,meetingUrl:o.meetingUrl,status:o.status,pollCount:o.pollCount,lastSegmentIndex:o.lastSegmentIndex,pendingSegments:o.pendingSegments.length});t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify(i));return}t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Not found"}))}handleTranscriptWebhook(e){try{let t=JSON.parse(e),s=t.event,r=t.data?.bot?.id;if(!r){ne.warn("Webhook missing bot ID",{event:s});return}let i=this.sessionsByBotId.get(r);if(!i){ne.warn("Webhook for unknown bot",{botId:r,event:s});return}let o=this.sessions.get(i);if(!o||o.status!=="monitoring")return;let a=t.data?.data;if(!a)return;let l=a.participant?.id??0,c=a.participant?.name??"Unknown",d=Array.isArray(a.words)?a.words.map(u=>u.text).join(" "):"";if(!d)return;o.idlePollCount=0,s==="transcript.partial_data"?o.activePartials.set(l,{speaker:c,text:d}):s==="transcript.data"&&(o.pendingSegments.push({speaker:c,text:d}),o.activePartials.delete(l),o.lastSegmentIndex++),ne.debug("Webhook transcript",{sessionId:i,botId:r,event:s,speaker:c,wordCount:d.split(" ").length})}catch(t){ne.error("Webhook parse error",{error:String(t)})}}createSession(e){let t=wb(),s={id:t,botId:e.botId,botName:e.botName,meetingUrl:e.meetingUrl,apiKey:e.apiKey,region:e.region,context:e.context,lastSegmentIndex:0,pendingSegments:[],activePartials:new Map,lastDispatchTime:Date.now(),idlePollCount:0,pollTimer:null,pollCount:0,status:"monitoring",endedAt:null};return this.sessions.set(t,s),this.sessionsByBotId.set(e.botId,t),s.pollTimer=setInterval(()=>{this.pollSession(t).catch(r=>{ne.error("Poll session error",{sessionId:t,botId:s.botId,error:String(r)})})},Sb),ne.info("Meeting session created",{sessionId:t,botId:e.botId,botName:e.botName,meetingUrl:e.meetingUrl,agentId:e.context.agentId}),s}async pollSession(e){let t=this.sessions.get(e);if(!t||t.status!=="monitoring")return;t.pollCount++;let s=t.pendingSegments.length>0||t.activePartials.size>0;(Date.now()-t.lastDispatchTime>=bb&&s||t.idlePollCount>=_b&&s)&&this.dispatchBatch(t),t.pollCount%3===0&&await this.checkBotStatus(t)}async checkBotStatus(e){try{let t=`https://${e.region}.recall.ai/api/v1/bot/${e.botId}/`,s=await fetch(t,{headers:{Authorization:`Token ${e.apiKey}`},signal:AbortSignal.timeout(15e3)});if(!s.ok){ne.warn("Bot status check failed",{sessionId:e.id,botId:e.botId,status:s.status});return}let r=await s.json(),i=r.status_changes;if(Array.isArray(i)&&i.length>0){let o=i[i.length-1].code;if(kb.has(o)){ne.info("Meeting reached terminal status",{sessionId:e.id,botId:e.botId,statusCode:o});let a=await this.fetchFullTranscript(e,r);this.dispatchEnd(e,a);return}}}catch(t){ne.error("Bot status check error",{sessionId:e.id,botId:e.botId,error:String(t)})}}async fetchFullTranscript(e,t){let i=(Array.isArray(t.recordings)?t.recordings:[])[0]?.media_shortcuts?.transcript?.data?.download_url;if(!i)return ne.warn("No transcript download URL available",{sessionId:e.id,botId:e.botId}),[...e.pendingSegments];try{let o=await fetch(i,{signal:AbortSignal.timeout(3e4)});if(!o.ok)return ne.warn("Transcript download failed",{sessionId:e.id,status:o.status}),[...e.pendingSegments];let a=await o.json();return(Array.isArray(a)?a:Array.isArray(a.results)?a.results:[]).map(c=>({speaker:c.speaker??c.participant?.name??"Unknown",text:Array.isArray(c.words)?c.words.map(d=>d.text).join(" "):typeof c.text=="string"?c.text:""}))}catch(o){return ne.error("Transcript download error",{sessionId:e.id,error:String(o)}),[...e.pendingSegments]}}dispatchBatch(e){let t=e.pendingSegments.splice(0,e.pendingSegments.length);for(let r of e.activePartials.values())t.push({speaker:r.speaker,text:`${r.text} [still speaking...]`});if(e.activePartials.clear(),e.lastDispatchTime=Date.now(),t.length===0)return;let s={id:`meeting:${e.botId}:${Date.now()}`,text:[`[Meeting transcript update \u2014 ${e.botName}]`,`Bot ID: ${e.botId}`,"","New transcript:",...t.map(r=>`[${r.speaker}]: ${r.text}`),"","---",`You are participating in this meeting. Use recall_send_chat with bot_id "${e.botId}" if you have relevant input. Otherwise respond "No response needed."`].join(`
|
|
357
|
+
`),source:{kind:e.context.channelKind||"internal",id:e.context.channelId,label:e.context.channelLabel,adapterId:e.context.adapterId},sender:"system",threadId:e.context.threadId,timestamp:new Date,meta:{slackTs:e.context.slackTs,slackThreadTs:e.context.slackThreadTs,meetingBotId:e.botId}};ne.info("Dispatching transcript batch",{sessionId:e.id,botId:e.botId,segmentCount:t.length}),this.onUpdate(s)}dispatchEnd(e,t){let s={id:`meeting:${e.botId}:${Date.now()}`,text:[`[Meeting ended \u2014 ${e.botName}]`,`Bot ID: ${e.botId}`,"","Full transcript:",...t.map(r=>`[${r.speaker}]: ${r.text}`),"","---","Meeting has ended. Produce a summary: key decisions made, action items with owners, and open questions."].join(`
|
|
358
|
+
`),source:{kind:e.context.channelKind||"internal",id:e.context.channelId,label:e.context.channelLabel,adapterId:e.context.adapterId},sender:"system",threadId:e.context.threadId,timestamp:new Date,meta:{slackTs:e.context.slackTs,slackThreadTs:e.context.slackThreadTs,meetingBotId:e.botId}};ne.info("Dispatching meeting end",{sessionId:e.id,botId:e.botId,totalSegments:t.length}),this.onUpdate(s),e.pollTimer&&(clearInterval(e.pollTimer),e.pollTimer=null),e.status="ended",e.endedAt=Date.now()}sweep(e){let t=Date.now()-e,s=0;for(let[r,i]of this.sessions)i.endedAt!==null&&(i.endedAt>t||(i.pollTimer&&(clearInterval(i.pollTimer),i.pollTimer=null),this.sessionsByBotId.delete(i.botId),this.sessions.delete(r),s++));return{component:"meeting-monitor",pruned:s,retried:0,bytesFreed:0,errors:[]}}readBody(e){return new Promise((t,s)=>{let r="";e.on("data",i=>{r+=i.toString()}),e.on("end",()=>t(r)),e.on("error",s)})}};O();var Ur=I("retry-queue"),qr=class{entries=[];config;constructor(e){this.config=e}enqueue(e,t){this.entries.push({result:e,adapter:t,attempts:0,nextRetryAt:Date.now()+this.config.baseDelayMs,createdAt:Date.now()}),Ur.info("Delivery queued for retry",{agentId:e.agentId,adapterId:t.id,queueSize:this.entries.length})}async processRetries(){let e=Date.now(),t={pending:0,retried:0,dropped:0,errors:[]},s=[];for(let r of this.entries){if(r.nextRetryAt>e){s.push(r),t.pending++;continue}r.attempts++;try{await r.adapter.deliver(r.result),t.retried++,Ur.info("Retry delivery succeeded",{agentId:r.result.agentId,adapterId:r.adapter.id,attempt:r.attempts})}catch(i){if(r.attempts>=this.config.maxAttempts){t.dropped++;let o=`Dropped after ${r.attempts} attempts: ${String(i)}`;t.errors.push(o),Ur.error("Retry delivery exhausted",{agentId:r.result.agentId,adapterId:r.adapter.id,attempts:r.attempts,error:String(i)})}else r.nextRetryAt=e+this.config.baseDelayMs*Math.pow(2,r.attempts),s.push(r),t.pending++,Ur.warn("Retry delivery failed, will retry",{agentId:r.result.agentId,adapterId:r.adapter.id,attempt:r.attempts,nextRetryAt:new Date(r.nextRetryAt).toISOString(),error:String(i)})}}return this.entries=s,t}get size(){return this.entries.length}};O();var Fe=I("sweeper"),jr=class n{config;targets;taskClient;taskId;timer=null;sweepCount=0;gatewayCycleCounter=0;memoryCycleCounter=0;memorySweepEvery;lastDreamAt=0;static GATEWAY_SWEEP_EVERY=12;constructor(e,t,s){this.config=e,this.targets=t,this.taskClient=s;let r=e.memorySweepIntervalHours??6;this.memorySweepEvery=Math.round(r*36e5/e.intervalMs)}start(){this.timer||(this.timer=setInterval(()=>{this.sweep().catch(e=>{Fe.error("Sweep cycle failed",{error:String(e)})})},this.config.intervalMs),Fe.info("Sweeper started",{intervalMs:this.config.intervalMs}))}stop(){this.timer&&(clearInterval(this.timer),this.timer=null),Fe.info("Sweeper stopped")}async sweep(){let e=Date.now();this.sweepCount++,this.gatewayCycleCounter++;let t=[];try{t.push(this.targets.dispatcher.sweep(this.config.threadTtlMs))}catch(d){t.push({component:"dispatcher",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}for(let d of this.targets.slackAdapters)try{t.push(d.sweep(this.config.threadTtlMs))}catch(u){t.push({component:`slack-adapter:${d.id}`,pruned:0,retried:0,bytesFreed:0,errors:[String(u)]})}if(this.targets.taskLedger)try{t.push(this.targets.taskLedger.sweep(this.config.threadTtlMs))}catch(d){t.push({component:"task-ledger",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}try{t.push(await this.targets.bgTaskManager.sweep(this.config.taskFileTtlMs))}catch(d){t.push({component:"bg-task-manager",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}if(this.targets.codeTaskManager){try{t.push(await this.targets.codeTaskManager.sweep(this.config.taskFileTtlMs))}catch(d){t.push({component:"code-task-manager",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}try{let{reaped:d,spared:u}=await this.targets.codeTaskManager.reapStale();(d>0||u>0)&&t.push({component:"code-task-reaper",pruned:d,retried:0,bytesFreed:0,errors:u>0?[`${u} task(s) spared \u2014 still active past TTL`]:[]})}catch(d){t.push({component:"code-task-reaper",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}}if(this.targets.meetingMonitor)try{t.push(this.targets.meetingMonitor.sweep(this.config.meetingSessionTtlMs))}catch(d){t.push({component:"meeting-monitor",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}if(this.gatewayCycleCounter>=n.GATEWAY_SWEEP_EVERY){this.gatewayCycleCounter=0;for(let d of this.targets.slackGateways)try{t.push(d.sweep())}catch(u){t.push({component:"slack-gateway",pruned:0,retried:0,bytesFreed:0,errors:[String(u)]})}}try{t.push(this.targets.agentManager.sweep())}catch(d){t.push({component:"agent-manager",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}if(this.targets.retryQueue)try{let d=await this.targets.retryQueue.processRetries();t.push({component:"retry-queue",pruned:d.dropped,retried:d.retried,bytesFreed:0,errors:d.errors})}catch(d){t.push({component:"retry-queue",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}if(this.targets.memoryLifecycle&&(this.memoryCycleCounter++,this.memoryCycleCounter>=this.memorySweepEvery)){this.memoryCycleCounter=0;try{t.push(await this.targets.memoryLifecycle.sweep())}catch(d){t.push({component:"memory-lifecycle",pruned:0,retried:0,bytesFreed:0,errors:[String(d)]})}}if(this.targets.memoryLifecycle&&this.config.dreamConfig?.enabled){let d=this.config.dreamConfig,u=d.cooldownMinutes*60*1e3,h=Date.now(),p=h-this.lastDreamAt>u,g=this.memoryCycleCounter===0,f=!1;if(p&&!g){let y=d.idleThresholdMinutes*60*1e3,w=this.targets.agentManager.getAllStates();f=w.length>0&&w.every(S=>S.status==="idle"&&h-S.lastActivity.getTime()>y)}if(p&&(g||f)){let y=g?"post-sweep":"idle";Fe.info("autoDream triggered",{trigger:y});try{let w=await this.targets.memoryLifecycle.dream();this.lastDreamAt=Date.now(),(w.merged+w.contradictions+w.promoted>0||w.errors.length>0)&&t.push({component:"autodream",pruned:w.merged+w.contradictions,retried:w.promoted,bytesFreed:0,errors:w.errors})}catch(w){t.push({component:"autodream",pruned:0,retried:0,bytesFreed:0,errors:[String(w)]})}}}let s=Date.now()-e,r=t.reduce((d,u)=>d+u.pruned,0),i=t.reduce((d,u)=>d+u.retried,0),o=t.reduce((d,u)=>d+u.bytesFreed,0),a=t.flatMap(d=>d.errors),l=r===0&&i===0&&o===0&&a.length===0;return(l?Fe.debug.bind(Fe):Fe.info.bind(Fe))("Sweep cycle complete",{cycle:this.sweepCount,durationMs:s,pruned:r,retried:i,bytesFreed:o,errors:a.length,components:t.map(d=>`${d.component}:${d.pruned}p/${d.retried}r`).join(" ")}),this.taskClient?.isConfigured&&!l&&await this.reportToTaskLedger(s,r,i,o,a),t}async reportToTaskLedger(e,t,s,r,i){try{if(!this.taskId){let a=await this.taskClient.createTask({name:"[Sweeper] Periodic maintenance",type:"AGENT",description:"Long-running system health task. Each comment is a sweep cycle report."});a&&(this.taskId=a._id)}if(!this.taskId)return;let o=[`**Sweep #${this.sweepCount}** (${e}ms)`,`Pruned: ${t} | Retried: ${s} | Freed: ${this.formatBytes(r)}`,i.length>0?`Errors: ${i.join(", ")}`:null].filter(Boolean).join(`
|
|
359
|
+
`);await this.taskClient.addComment(this.taskId,o),i.length>0&&await this.taskClient.updateTask(this.taskId,{state:"NEEDS_ATTENTION"})}catch(o){Fe.warn("Failed to report to task ledger",{error:String(o)})}}formatBytes(e){if(e===0)return"0 B";let t=["B","KB","MB","GB"],s=Math.floor(Math.log(e)/Math.log(1024));return`${(e/Math.pow(1024,s)).toFixed(1)} ${t[s]}`}};js();O();import{MongoClient as vb}from"mongodb";var Tb=I("memory-store"),Fr=class{mongoUri;dbName;client;db;collection;constructor(e,t){this.mongoUri=e,this.dbName=t,this.client=new vb(e)}async init(){await this.client.connect(),this.db=this.client.db(this.dbName),this.collection=this.db.collection("agent_memory"),await this.collection.createIndex({agentId:1,tier:1}),await this.collection.createIndex({agentId:1,topic:1}),await this.collection.createIndex({agentId:1,updatedAt:1}),await this.collection.createIndex({agentId:1,type:1}),await this.collection.createIndex({agentId:1,purged:1,purgedAt:1}),Tb.info("Memory store initialized",{db:this.dbName})}getCollection(){return this.collection}async save(e,t,s,r,i){let o=new Date,a={agentId:e,content:t.content,type:t.type,topic:t.topic,importance:t.importance,tier:"hot",createdAt:o,updatedAt:o,lastAccessedAt:o,accessCount:0,sourceChannel:r,sourceThread:i,pinned:!1,summarized:!1,qdrantPointId:s},l=await this.collection.insertOne(a);return a._id=l.insertedId,a}async getById(e){return this.collection.findOne({_id:e,purged:{$ne:!0}})}async update(e,t,s,r){let i={content:t,updatedAt:new Date};return s&&(i.importance=s),r&&(i.qdrantPointId=r),await this.collection.findOneAndUpdate({_id:e},{$set:i},{returnDocument:"after"})}async pin(e){return(await this.collection.updateOne({_id:e},{$set:{pinned:!0,tier:"hot"}})).modifiedCount>0}async unpin(e){return(await this.collection.updateOne({_id:e},{$set:{pinned:!1}})).modifiedCount>0}async delete(e){return this.collection.findOneAndDelete({_id:e})}async touchAccess(e){e.length!==0&&await this.collection.updateMany({_id:{$in:e}},{$set:{lastAccessedAt:new Date},$inc:{accessCount:1}})}async getHotTier(e){let t={critical:4,high:3,medium:2,low:1};return(await this.collection.find({agentId:e,tier:"hot",purged:{$ne:!0},supersededBy:{$exists:!1}}).toArray()).sort((r,i)=>{if(r.pinned!==i.pinned)return r.pinned?-1:1;let o=(t[i.importance]??0)-(t[r.importance]??0);return o!==0?o:i.updatedAt.getTime()-r.updatedAt.getTime()})}async getHotTierWithStats(e){let t=await this.getHotTier(e),s=Date.now();return t.map(r=>({...r,ageDays:Math.floor((s-r.createdAt.getTime())/(1e3*60*60*24)),daysSinceAccess:Math.floor((s-r.lastAccessedAt.getTime())/(1e3*60*60*24))}))}async getByIds(e){return e.length===0?[]:this.collection.find({_id:{$in:e},purged:{$ne:!0}}).toArray()}async countNonHot(e){return this.collection.countDocuments({agentId:e,tier:{$ne:"hot"},purged:{$ne:!0}})}async getAllNonPinned(e){return this.collection.find({agentId:e,pinned:!1,purged:{$ne:!0},supersededBy:{$exists:!1}}).toArray()}async getByTiersForAgent(e,t){return this.collection.find({agentId:e,tier:{$in:t},purged:{$ne:!0},summarized:!1,supersededBy:{$exists:!1}}).toArray()}async getFactsAndDecisionsByTopic(e){let t=await this.collection.find({agentId:e,type:{$in:["fact","decision"]},purged:{$ne:!0},supersededBy:{$exists:!1},needsReview:{$ne:!0}}).toArray(),s=new Map;for(let r of t){let i=s.get(r.topic)??[];i.push(r),s.set(r.topic,i)}return s}async getInteractionsByTopic(e){let t=await this.collection.find({agentId:e,type:"interaction",tier:{$in:["hot","warm"]},purged:{$ne:!0},supersededBy:{$exists:!1},summarized:!1}).toArray(),s=new Map;for(let r of t){let i=s.get(r.topic)??[];i.push(r),s.set(r.topic,i)}return s}async markSuperseded(e,t){e.length!==0&&await this.collection.updateMany({_id:{$in:e}},{$set:{supersededBy:t,tier:"cold"}})}async flagForReview(e){e.length!==0&&await this.collection.updateMany({_id:{$in:e}},{$set:{needsReview:!0}})}async getAllForAgent(e){return this.collection.find({agentId:e}).toArray()}async setTier(e,t){await this.collection.updateOne({_id:e},{$set:{tier:t}})}async setTierBulk(e,t){e.length!==0&&await this.collection.updateMany({_id:{$in:e}},{$set:{tier:t}})}async getColdByTopic(e,t){return this.collection.find({agentId:e,tier:"cold",topic:t,summarized:!1,purged:{$ne:!0}}).sort({createdAt:1}).toArray()}async getColdTopics(e){return await this.collection.distinct("topic",{agentId:e,tier:"cold",summarized:!1,purged:{$ne:!0}})}async markSummarized(e,t){e.length!==0&&await this.collection.updateMany({_id:{$in:e}},{$set:{summarized:!0,summaryGroup:t,summarizedAt:new Date}})}async deleteSummarizedOlderThan(e,t){return(await this.collection.deleteMany({agentId:e,summarized:!0,summarizedAt:{$lt:t}})).deletedCount}async purge(e,t){if(!(t.topic!==void 0||t.type!==void 0||t.importance!==void 0||t.tier!==void 0||t.olderThan!==void 0))throw new Error("purge() requires at least one filter");let r={agentId:e,pinned:!1,purged:{$ne:!0}};return t.topic!==void 0&&(r.topic=t.topic),t.type!==void 0&&(r.type=t.type),t.importance!==void 0&&(r.importance=t.importance),t.tier!==void 0&&(r.tier=t.tier),t.olderThan!==void 0&&(r.updatedAt={$lt:t.olderThan}),(await this.collection.updateMany(r,{$set:{purged:!0,purgedAt:new Date}})).modifiedCount}async deletePurgedOlderThan(e,t){let s=await this.collection.find({agentId:e,purged:!0,purgedAt:{$lt:t}}).toArray();if(s.length===0)return[];let r=s.map(i=>i._id);return await this.collection.deleteMany({_id:{$in:r}}),s}async getAgentIds(){return this.collection.distinct("agentId")}async close(){await this.client.close()}};O();wr();import{QdrantClient as Ib}from"@qdrant/js-client-rest";var Ab=I("memory-embedder"),_t="agent_memory",Kr=class{qdrantUrl;ollamaUrl;qdrant=null;collectionReady=!1;constructor(e=process.env.QDRANT_URL??"http://localhost:6333",t=process.env.OLLAMA_URL??"http://localhost:11434"){this.qdrantUrl=e,this.ollamaUrl=t}getClient(){return this.qdrant||(this.qdrant=new Ib({url:this.qdrantUrl})),this.qdrant}async embed(e){return qe(this.ollamaUrl,e)}async ensureCollection(){if(this.collectionReady)return;let e=this.getClient(),{collections:t}=await e.getCollections();if(!t.some(r=>r.name===_t)){let r=await this.embed("test");await e.createCollection(_t,{vectors:{size:r.length,distance:"Cosine"}}),Ab.info("Created Qdrant collection",{collection:_t,vectorSize:r.length})}this.collectionReady=!0}async upsert(e,t,s){await this.ensureCollection();let r=await this.embed(t);await this.getClient().upsert(_t,{points:[{id:e,vector:r,payload:s}]})}async remove(e){await this.ensureCollection(),await this.getClient().delete(_t,{points:[e]})}async search(e,t,s){await this.ensureCollection();let r=await this.embed(e),i=s?.limit??10,o=[{key:"agentId",match:{value:t}}];return s?.type&&o.push({key:"type",match:{value:s.type}}),s?.topic&&o.push({key:"topic",match:{value:s.topic}}),s?.tier&&o.push({key:"tier",match:{value:s.tier}}),s?.importance&&o.push({key:"importance",match:{value:s.importance}}),(await this.getClient().search(_t,{vector:r,limit:i,with_payload:!0,filter:{must:o}})).map(l=>({mongoId:l.payload?.mongoId,score:l.score}))}async findSimilar(e,t,s,r=10){return await this.ensureCollection(),(await this.getClient().query(_t,{query:{recommend:{positive:[e]}},filter:{must:[{key:"agentId",match:{value:t}}]},limit:r,with_payload:!0,score_threshold:s})).points.map(o=>({mongoId:o.payload?.mongoId,score:o.score??0,pointId:typeof o.id=="string"?o.id:String(o.id)}))}};O();import{ObjectId as Cb}from"mongodb";import{query as Gr}from"@anthropic-ai/claude-agent-sdk";var Nh={critical:1,high:.75,medium:.5,low:.25},Oh={decision:1,fact:.8,preference:.8,summary:.6,task:.5,interaction:.3};var xe=I("memory-lifecycle"),Hr=class{store;embedder;config;dreamConfig;constructor(e,t,s,r){this.store=e,this.embedder=t,this.config=s,this.dreamConfig=r}computeScore(e,t){let s=Nh[e.importance]??.5,r=Oh[e.type]??.5,i=Date.now()-e.updatedAt.getTime(),o=this.config.recencyHalfLifeDays*24*60*60*1e3,a=Math.exp(-.693*i/o),l=t>0?Math.min(e.accessCount/t,1):e.accessCount>0?1:0;return s*.4+a*.3+l*.2+r*.1}estimateTokens(e){return Math.ceil(e.length/4)}async sweep(){let e=Date.now(),t=0,s=0,r=0,i=0,o=0,a=[];try{let c=await this.store.getAgentIds();for(let d of c)try{let u=await this.sweepAgent(d);t+=u.promoted,s+=u.demoted,r+=u.summarized,i+=u.cleaned,o+=u.purged}catch(u){a.push(`${d}: ${u}`),xe.error("Memory lifecycle sweep failed for agent",{agentId:d,error:String(u)})}}catch(c){a.push(`global: ${c}`)}return t+s+r+i+o>0&&xe.info("Memory lifecycle sweep complete",{durationMs:Date.now()-e,promoted:t,demoted:s,summarized:r,cleaned:i,purged:o,errors:a.length}),{component:"memory-lifecycle",pruned:s+i+o,retried:t,bytesFreed:0,errors:a}}async sweepAgent(e){let t=0,s=0,r=await this.store.getAllNonPinned(e),i=0,o=0;if(r.length>0){let d=r.map(w=>w.accessCount).sort((w,S)=>w-S),u=d[Math.floor(d.length/2)]??0,h=r.map(w=>({record:w,score:this.computeScore(w,u)})),p=[];for(let{record:w,score:S}of h){let b;S>=this.config.hotThreshold?b="hot":S>=this.config.warmThreshold?b="warm":b="cold",b!==w.tier&&(p.push({id:w._id,newTier:b}),b==="hot"&&w.tier!=="hot"&&t++,b!=="hot"&&w.tier==="hot"&&s++)}for(let w of["hot","warm","cold"]){let S=p.filter(b=>b.newTier===w).map(b=>b.id);await this.store.setTierBulk(S,w)}let g=await this.store.getHotTier(e),f=0,y=[];for(let w of g){let S=this.estimateTokens(w.content);w.pinned||(f+=S,f>this.config.hotBudgetTokens&&y.push(w._id))}y.length>0&&(await this.store.setTierBulk(y,"warm"),s+=y.length);try{i=await this.summarizeCold(e)}catch(w){xe.warn("Cold summarization failed",{agentId:e,error:String(w)})}}let a=new Date(Date.now()-this.config.coldRetentionDays*24*60*60*1e3);o=await this.store.deleteSummarizedOlderThan(e,a);let l=new Date(Date.now()-this.config.purgeRetentionDays*24*60*60*1e3),c=0;try{let d=await this.store.deletePurgedOlderThan(e,l);if(c=d.length,d.length>0){let u=d.map(h=>h.qdrantPointId).filter(Boolean);for(let h of u)await this.embedder.remove(h);xe.info("Hard-deleted purged records",{agentId:e,count:d.length})}}catch(d){xe.warn("Purge hard-delete phase failed",{agentId:e,error:String(d)})}return{promoted:t,demoted:s,summarized:i,cleaned:o,purged:c}}async dream(){if(!this.dreamConfig?.enabled)return{merged:0,contradictions:0,promoted:0,flaggedForReview:0,errors:[]};let e=Date.now(),t=0,s=0,r=0,i=0,o=[];try{let l=await this.store.getAgentIds();for(let c of l)try{let d=await this.mergeDuplicates(c);t+=d.merged;let u=await this.detectContradictions(c);s+=u.resolved,i+=u.flagged;let h=await this.promotePatterns(c);r+=h.promoted}catch(d){o.push(`${c}: ${d}`),xe.error("autoDream failed for agent",{agentId:c,error:String(d)})}}catch(l){o.push(`global: ${l}`)}return t+s+r+i>0&&xe.info("autoDream complete",{durationMs:Date.now()-e,merged:t,contradictions:s,promoted:r,flaggedForReview:i,errors:o.length}),{merged:t,contradictions:s,promoted:r,flaggedForReview:i,errors:o}}async mergeDuplicates(e){let t=this.dreamConfig,s=await this.store.getByTiersForAgent(e,["hot","warm"]);if(s.length<2)return{merged:0};let r=new Set,i=0,o=0;for(let a of s){if(o>=t.maxClustersPerRun)break;if(r.has(a.qdrantPointId))continue;let c=(await this.embedder.findSimilar(a.qdrantPointId,e,t.similarityThreshold,10)).filter(v=>!r.has(v.pointId));if(c.length===0)continue;r.add(a.qdrantPointId);for(let v of c)r.add(v.pointId);let d=c.map(v=>new Cb(v.mongoId)),u=await this.store.getByIds(d),h=[a,...u],g=["Merge the following duplicate or overlapping memories into a single consolidated record.","Preserve all unique details. Discard exact duplicates. Be concise.","",h.map(v=>`- [${v.type}/${v.importance}] ${v.content}`).join(`
|
|
356
360
|
`)].join(`
|
|
357
|
-
`),
|
|
358
|
-
`),
|
|
361
|
+
`),f=Gr({prompt:g,options:{model:"claude-haiku-4-5-20251001",permissionMode:"bypassPermissions",allowDangerouslySkipPermissions:!0,maxTurns:1,maxBudgetUsd:.02,persistSession:!1}}),y="";for await(let v of f){let C=v;if(C.type==="result"){let M=C;M.subtype==="success"&&M.result&&(y=M.result)}}if(!y)continue;let w=this.highestImportance(h),S=crypto.randomUUID(),b=await this.store.save(e,{content:y,type:a.type,topic:a.topic,importance:w},S);await this.embedder.upsert(S,y,{agentId:e,mongoId:b._id.toString(),type:a.type,topic:a.topic,tier:"hot",importance:w,createdAt:Math.floor(Date.now()/1e3)});let A=h.map(v=>v._id);await this.store.markSuperseded(A,b._id),i+=h.length,o++}return i>0&&xe.info("autoDream: duplicates merged",{agentId:e,merged:i,clusters:o}),{merged:i}}highestImportance(e){let t=["critical","high","medium","low"];for(let s of t)if(e.some(r=>r.importance===s))return s;return"medium"}async detectContradictions(e){let t=this.dreamConfig,s=await this.store.getFactsAndDecisionsByTopic(e),r=0,i=0,o=0,a=new Set;for(let[l,c]of s){if(o>=t.maxContradictionPairsPerRun)break;if(!(c.length<2)){for(let d=0;d<c.length-1;d++)if(!a.has(c[d]._id.toString())){for(let u=d+1;u<c.length&&!(o>=t.maxContradictionPairsPerRun);u++){if(a.has(c[u]._id.toString()))continue;let h=c[d],p=c[u],g=["Do these two memories contradict each other?","",`Memory A (${h.type}, created ${h.createdAt.toISOString()}):`,h.content,"",`Memory B (${p.type}, created ${p.createdAt.toISOString()}):`,p.content,"","Reply with exactly one of:",`- "NO" if they don't contradict`,'- "A_WINS" if Memory A is more current/accurate','- "B_WINS" if Memory B is more current/accurate',`- "UNCLEAR" if they contradict but you can't determine which is correct`].join(`
|
|
362
|
+
`),f=Gr({prompt:g,options:{model:"claude-haiku-4-5-20251001",permissionMode:"bypassPermissions",allowDangerouslySkipPermissions:!0,maxTurns:1,maxBudgetUsd:.02,persistSession:!1}}),y="";for await(let w of f){let S=w;if(S.type==="result"){let b=S;b.subtype==="success"&&b.result&&(y=b.result.trim().toUpperCase())}}o++,y.includes("A_WINS")?(await this.store.markSuperseded([p._id],h._id),a.add(p._id.toString()),r++):y.includes("B_WINS")?(await this.store.markSuperseded([h._id],p._id),a.add(h._id.toString()),r++):y.includes("UNCLEAR")&&(await this.store.flagForReview([h._id,p._id]),a.add(h._id.toString()),a.add(p._id.toString()),i+=2)}if(o>=t.maxContradictionPairsPerRun)break}}}return(r>0||i>0)&&xe.info("autoDream: contradictions processed",{agentId:e,resolved:r,flagged:i,pairsChecked:o}),{resolved:r,flagged:i}}async promotePatterns(e){let t=this.dreamConfig,s=await this.store.getInteractionsByTopic(e),r=0;for(let[i,o]of s){if(r>=t.maxPromotionsPerRun)break;let a=new Set(o.map(w=>w.sourceThread).filter(Boolean));if(a.size<t.patternMinCount)continue;let d=o.sort((w,S)=>S.createdAt.getTime()-w.createdAt.getTime()).slice(0,10).map(w=>`- [${w.importance}] ${w.content}`).join(`
|
|
359
363
|
`),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(`
|
|
360
|
-
`),
|
|
361
|
-
`),a=[`Summarize the following memory entries for agent ${e} about topic "${
|
|
362
|
-
`),l=gi({prompt:a,options:{model:"claude-haiku-4-5-20251001",permissionMode:"bypassPermissions",allowDangerouslySkipPermissions:!0,maxTurns:1,maxBudgetUsd:.02,persistSession:!1}}),c="";for await(let f of l){let h=f;if(h.type==="result"){let m=h;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(f=>f._id),u._id),r+=i.length}return r}};P();import{createServer as bE}from"node:http";var Eh=T("admin-api"),wi=class{server;port;token;agentDefs;agentVersions;onReload;constructor(e,t,r,n,i){this.port=e,this.token=t,this.agentDefs=r,this.agentVersions=n,this.onReload=i,this.server=bE((o,a)=>this.handleRequest(o,a))}async start(){return new Promise(e=>{this.server.listen(this.port,()=>{Eh.info("Admin API started",{port:this.port}),e()})})}stop(){this.server.close()}async handleRequest(e,t){let r=e.headers.authorization;if(!r||r!==`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]),f=l[2];return await this.toggleAgent(u,f,t)}let c=i.match(/^\/admin\/agents\/([^/]+)\/history$/);if(c&&o==="GET"){let u=decodeURIComponent(c[1]),f=parseInt(n.searchParams.get("limit")??"10",10);return await this.agentHistory(u,f,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){Eh.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,r)=>{let n=[];e.on("data",i=>n.push(i)),e.on("end",()=>{try{t(JSON.parse(Buffer.concat(n).toString()))}catch{r(new Error("Invalid JSON"))}}),e.on("error",r)})}json(e,t,r){e.writeHead(t,{"Content-Type":"application/json"}),e.end(JSON.stringify(r))}async saveVersion(e,t){let r=await this.agentDefs.findOne({_id:e});r&&await this.agentVersions.insertOne({agentId:e,snapshot:r,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 r=await this.agentDefs.findOne({_id:e});if(!r)return this.json(t,404,{error:"Agent not found"});this.json(t,200,r)}async createAgent(e,t){let r=await this.readBody(e);if(!r._id||!r.name||!r.model)return this.json(t,400,{error:"Required: _id, name, model"});if(await this.agentDefs.findOne({_id:r._id}))return this.json(t,409,{error:"Agent already exists"});let i=new Date,o={_id:r._id,name:r.name,model:r.model,icon:r.icon??ie.icon,channels:r.channels??[],passiveChannels:r.passiveChannels??ie.passiveChannels,keywords:r.keywords??ie.keywords,isDefault:r.isDefault??!1,coreServers:r.coreServers??[],delegateServers:r.delegateServers??[],delegatePrompts:r.delegatePrompts??ie.delegatePrompts,plugins:r.plugins,dodiOpsMode:r.dodiOpsMode,soul:r.soul??"",systemPrompt:r.systemPrompt??"",schedule:r.schedule??ie.schedule,subscribe:r.subscribe,budgetUsd:r.budgetUsd??ie.budgetUsd,maxTurns:r.maxTurns??ie.maxTurns,maxConcurrent:r.maxConcurrent??ie.maxConcurrent,timeoutMs:r.timeoutMs??ie.timeoutMs,disabled:r.disabled??!1,slackBot:r.slackBot,createdAt:i,updatedAt:i,updatedBy:"admin-api"};await this.agentDefs.insertOne(o),this.onReload(),this.json(t,201,o)}async updateAgent(e,t,r){let n=await this.readBody(t);if(!await this.agentDefs.findOne({_id:e}))return this.json(r,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(r,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,r){if(!await this.agentDefs.findOne({_id:e}))return this.json(r,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(r,200,{[t+"d"]:e})}async agentHistory(e,t,r){let n=await this.agentVersions.find({agentId:e}).sort({createdAt:-1}).limit(t).toArray();this.json(r,200,n)}async rollbackAgent(e,t,r){let i=(await this.readBody(t)).version_index??0;if(typeof i!="number"||i<0||!Number.isInteger(i))return this.json(r,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(r,404,{error:"No version found at that index"});if(!await this.agentDefs.findOne({_id:e}))return this.json(r,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(r,200,d)}async listServers(e){this.json(e,200,{message:"Server registry \u2014 use agent_definitions.coreServers/delegateServers fields"})}};P();var Lt=T("activity-logger"),Si=class{db;collection;buffer=[];flushTimer=null;config;connected=!1;constructor(e,t){this.db=e,this.config=t}async connect(){if(!this.config.enabled){Lt.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=>Lt.warn("Periodic flush failed",{error:String(t)}))},this.config.flushIntervalMs);let e=await this.collection.estimatedDocumentCount();Lt.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=>Lt.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){Lt.warn("Bulk write failed, retrying once",{count:e.length,error:String(t)});try{await this.collection.insertMany(e,{ordered:!1})}catch(r){Lt.error("Bulk write failed after retry, dropping batch",{count:e.length,error:String(r)})}}}async stop(){this.flushTimer&&(clearInterval(this.flushTimer),this.flushTimer=null),this.buffer.length>0&&(Lt.info("Draining activity buffer on shutdown",{count:this.buffer.length}),await this.flush()),this.connected=!1}};var M=T("index");async function uL(){M.info("Hive starting up",{instance:g.instance.id,portBase:g.instance.portBase}),g.gemini.apiKey&&(zf(g.gemini.apiKey),M.info("Gemini vision enabled",{model:g.gemini.visionModel}));let s=new dL(g.mongo.uri);await s.connect();let e=s.db(g.mongo.dbName),t=e.collection("agent_definitions");await t.createIndex({channels:1}),await t.createIndex({disabled:1});let r,n,i,o=null,a=async()=>{if(!n||!i)return;M.info("Hot-reloading agent registry...");let L=await r.load();if(L.added.length&&M.info("New agents online",{agents:L.added}),L.updated.length&&M.info("Agents updated",{agents:L.updated}),L.removed.length){M.info("Agents removed",{agents:L.removed});for(let $e of L.removed)n.stopAgent($e)}let K=r.getDisabled();for(let $e of K)n.stopAgent($e.id);K.length&&M.info("Disabled agents stopped",{agents:K.map($e=>$e.id)}),await i.reloadSchedules(),n.reloadSkills()};r=new Mn(t,()=>{o&&clearTimeout(o),o=setTimeout(()=>a(),500)}),await r.load(),M.info("Agent registry loaded",{agents:r.listIds()});let l=new Yn(g.mongo.uri,g.mongo.dbName);await l.init();let c=new pi(g.mongo.uri,g.mongo.dbName);await c.init(),l.memoryStore=c;let d=new mi,u=new yi(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 f=new Qn(g.mongo.uri);await f.connect(g.mongo.dbName);let h;if(g.activity.enabled&&(h=new Si(e,g.activity),await h.connect()),g.linear.apiKey){let L=new Xn(g.linear.apiKey,g.linear.teamId||void 0);M.info("Linear client configured")}let m=new ii(g.taskLedger.apiUrl,g.taskLedger.apiKey);m.isConfigured&&M.info("Task ledger client configured",{apiUrl:g.taskLedger.apiUrl});let p=new oi(g.taskLedger.apiUrl,g.taskLedger.agentKeys,g.taskLedger.apiKey);p.isConfigured&&M.info("Task ledger auto-tracking enabled",{apiUrl:g.taskLedger.apiUrl,agents:Object.keys(g.taskLedger.agentKeys)});let y,S;if(g.codeIndex.enabled){let{CodeIndexPrefetcher:L}=await Promise.resolve().then(()=>(Ah(),kh)),{KnowledgeExtractor:K}=await Promise.resolve().then(()=>(Nh(),Ch));y=new L({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&&(S=new K(c,d)),M.info("Code index integration enabled",{prefetch:!0,sessionKnowledge:S!==void 0})}n=new Vn(r,l,f,h,y);let b=new zn(n,l,r),v=new ei(r,n,b,g.defaultAgent,p.isConfigured?p:void 0),A=new ai(g.background.port,g.background.authToken,g.tasksDir.background,L=>v.dispatch(L).catch(K=>{M.error("Background task completion dispatch failed",{error:String(K)})}));await A.start(),await A.scanOrphans(),M.info("Background task manager started",{port:g.background.port});let E=new li(g.codeTask.port,g.codeTask.authToken,g.codeTask.pluginDir,g.codeTask.maxConcurrent,g.tasksDir.code,L=>v.dispatch(L).catch(K=>{M.error("Code task completion dispatch failed",{error:String(K)})}),{prefetcher:y,knowledgeExtractor:S});await E.start(),await E.scanOrphans(),M.info("Code task manager started",{port:g.codeTask.port});let x;g.recall.apiKey&&(x=new di(g.recall.monitorPort,g.recall.webhookSecret,L=>v.dispatch(L).catch(K=>{M.error("Meeting monitor dispatch failed",{error:String(K)})})),await x.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"));let k=lL("skills");aL(k)&&(cL(k,{recursive:!0},()=>{o&&clearTimeout(o),o=setTimeout(()=>a(),500)}),M.info("Skills hot-reload enabled",{watched:k})),process.on("SIGUSR1",()=>a()),M.info("Hot-reload enabled",{signal:"SIGUSR1"});let I=g.sms.lines.map(L=>L.slackChannel).filter(Boolean),R=new Wn(g.slack.appToken,g.slack.botToken),W=new ti(R,r,I,"slack");v.registerAdapter(W),await W.start(L=>{v.dispatch(L).catch(K=>{M.error("Slack dispatch failed",{error:String(K),source:L.source.label})})}),M.info("Slack adapter connected");let Z=g.slack.auditChannel;if(Z)try{let K=((await R.client.conversations.list({types:"public_channel",limit:200})).channels??[]).find($e=>$e.name===Z);K?.id&&(v.setAuditChannel(W,K.id),M.info("Audit channel configured",{channel:Z,id:K.id}))}catch(L){M.warn("Failed to configure audit channel",{error:String(L)})}let H=new si(g.quo.apiKey,g.sms.lines);v.registerAdapter(H),g.quo.apiKey&&g.sms.lines.length>0&&(await H.start(L=>{v.dispatch(L).catch(K=>{M.error("SMS dispatch failed",{error:String(K),source:L.source.label})})}),M.info("SMS adapter started",{lines:g.sms.lines.length}));let _e;g.imessage.enabled&&(_e=new ni(g.imessage,g.mongo.uri,g.mongo.dbName,R,g.instance.id),v.registerAdapter(_e),await _e.start(L=>{v.dispatch(L).catch(K=>{M.error("iMessage dispatch failed",{error:String(K)})})}),M.info("iMessage adapter started"));let{AgentRunner:Dr}=await Promise.resolve().then(()=>(sc(),Wf));Dr.registryRef=r;let Ve,Re;if(g.team.enabled){let{TeamStore:L}=await Promise.resolve().then(()=>(Dh(),Lh)),{CommandRegistry:K}=await Promise.resolve().then(()=>(Rh(),Mh));Ve=new L(g.mongo.uri,g.mongo.dbName),await Ve.connect(),Re=new K(Ve),v.setTeamStore(Ve),M.info("Team layer initialized")}if(Re){let{registerPluginCommands:L}=await Promise.resolve().then(()=>(lc(),ah));await L(n.getPlugins(),Re)}let ot;if(g.ws.enabled&&g.ws.jwtSecret){let{DeviceRegistry:L}=await Promise.resolve().then(()=>(my(),py)),{WsAdapter:K}=await Promise.resolve().then(()=>(kw(),Iw)),$e=new L(g.mongo.uri,g.mongo.dbName,g.ws.jwtSecret);await $e.connect(),ot=new K(g.ws.port,$e,g.ws.jwtSecret,Ve,Re),v.registerAdapter(ot),await ot.start(Rl=>{v.dispatch(Rl).catch(Pw=>{M.error("WS dispatch failed",{error:String(Pw),source:Rl.source.label})})}),M.info("WebSocket adapter started",{port:g.ws.port})}let Tt;if(g.voice.enabled&&g.voice.serverSecret){let{VoiceAdapter:L}=await Promise.resolve().then(()=>($w(),Rw));Tt=new L(g.voice.port,g.voice.serverSecret,r,l),await Tt.start(),M.info("Voice adapter started",{port:g.voice.port})}i=new Jn(n,l,b,r,L=>{v.dispatch(L).catch(K=>{M.error("Callback dispatch failed",{error:String(K)})})}),await i.connectDb(g.mongo.uri,g.mongo.dbName),i.start(),M.info("Scheduler started"),await r.startWatching();let jt;g.adminApi.token&&(jt=new wi(g.adminApi.port,g.adminApi.token,t,e.collection("agent_definition_versions"),()=>a()),await jt.start(),M.info("Admin API started",{port:g.adminApi.port}));let ae=new fi({maxAttempts:g.sweeper.retryMaxAttempts,baseDelayMs:g.sweeper.retryBaseDelayMs});v.setRetryQueue(ae);let q=[W],j=[R],he=new hi({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:v,slackAdapters:q,bgTaskManager:A,codeTaskManager:E,meetingMonitor:x,taskLedger:p.isConfigured?p:void 0,slackGateways:j,agentManager:n,retryQueue:ae,memoryLifecycle:u},m.isConfigured?m:void 0);he.start(),M.info("Sweeper started",{intervalMs:g.sweeper.intervalMs});let Ts=async L=>{M.info("Shutdown signal received",{signal:L}),he.stop(),jt?.stop(),r.stopWatching(),await H.stop(),_e&&await _e.stop(),ot&&await ot.stop(),Tt?.stop(),Ve&&await Ve.close(),i.stop(),A.stop(),E.stop(),await y?.close(),x?.stop(),n.stopAll(),h&&await h.stop(),await f.close(),await c.close(),await W.stop(),await s.close(),M.info("Hive shut down cleanly"),process.exit(0)};process.on("SIGTERM",()=>Ts("SIGTERM")),process.on("SIGINT",()=>Ts("SIGINT")),M.info("Hive is running")}process.on("unhandledRejection",s=>{M.error("Unhandled promise rejection",{error:String(s),stack:s instanceof Error?s.stack:void 0})});uL().catch(s=>{M.error("Fatal startup error",{error:String(s)}),process.exit(1)});
|
|
364
|
+
`),h=Gr({prompt:u,options:{model:"claude-haiku-4-5-20251001",permissionMode:"bypassPermissions",allowDangerouslySkipPermissions:!0,maxTurns:1,maxBudgetUsd:.02,persistSession:!1}}),p="";for await(let w of h){let S=w;if(S.type==="result"){let b=S;b.subtype==="success"&&b.result&&(p=b.result)}}if(!p)continue;let g=crypto.randomUUID(),f=await this.store.save(e,{content:p,type:"fact",topic:i,importance:"medium"},g);await this.embedder.upsert(g,p,{agentId:e,mongoId:f._id.toString(),type:"fact",topic:i,tier:"hot",importance:"medium",createdAt:Math.floor(Date.now()/1e3)});let y=o.map(w=>w._id);await this.store.markSuperseded(y,f._id),r++}return r>0&&xe.info("autoDream: patterns promoted",{agentId:e,promoted:r}),{promoted:r}}async summarizeCold(e){let t=await this.store.getColdTopics(e),s=0;for(let r of t){let i=await this.store.getColdByTopic(e,r);if(i.length<this.config.coldSummaryMinRecords)continue;let o=i.map(h=>`- [${h.type}/${h.importance}] ${h.content}`).join(`
|
|
365
|
+
`),a=[`Summarize the following memory entries for agent ${e} about topic "${r}".`,"Preserve key facts, decisions, and outcomes. Discard routine interactions.","Be concise \u2014 aim for 2-5 sentences.","",o].join(`
|
|
366
|
+
`),l=Gr({prompt:a,options:{model:"claude-haiku-4-5-20251001",permissionMode:"bypassPermissions",allowDangerouslySkipPermissions:!0,maxTurns:1,maxBudgetUsd:.02,persistSession:!1}}),c="";for await(let h of l){let p=h;if(p.type==="result"){let g=p;g.subtype==="success"&&g.result&&(c=g.result)}}if(!c)continue;let d=crypto.randomUUID(),u=await this.store.save(e,{content:c,type:"summary",topic:r,importance:"medium"},d);await this.store.setTier(u._id,"warm"),await this.embedder.upsert(d,c,{agentId:e,mongoId:u._id.toString(),type:"summary",topic:r,tier:"warm",importance:"medium",createdAt:Math.floor(Date.now()/1e3)}),await this.store.markSummarized(i.map(h=>h._id),u._id),s+=i.length}return s}};O();import{createServer as Eb}from"node:http";var xh=I("admin-api"),Wr=class{server;port;token;agentDefs;agentVersions;onReload;constructor(e,t,s,r,i){this.port=e,this.token=t,this.agentDefs=s,this.agentVersions=r,this.onReload=i,this.server=Eb((o,a)=>this.handleRequest(o,a))}async start(){return new Promise(e=>{this.server.listen(this.port,()=>{xh.info("Admin API started",{port:this.port}),e()})})}stop(){this.server.close()}async handleRequest(e,t){let s=e.headers.authorization;if(!s||s!==`Bearer ${this.token}`){t.writeHead(401,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Unauthorized"}));return}let r=new URL(e.url??"/",`http://localhost:${this.port}`),i=r.pathname,o=e.method??"GET";try{if(i==="/admin/agents"&&o==="GET")return await this.listAgents(t);if(i==="/admin/agents"&&o==="POST")return await this.createAgent(e,t);let a=i.match(/^\/admin\/agents\/([^/]+)$/);if(a){let u=decodeURIComponent(a[1]);if(o==="GET")return await this.getAgent(u,t);if(o==="PATCH")return await this.updateAgent(u,e,t);if(o==="DELETE")return await this.deleteAgent(u,t)}let l=i.match(/^\/admin\/agents\/([^/]+)\/(enable|disable)$/);if(l&&o==="POST"){let u=decodeURIComponent(l[1]),h=l[2];return await this.toggleAgent(u,h,t)}let c=i.match(/^\/admin\/agents\/([^/]+)\/history$/);if(c&&o==="GET"){let u=decodeURIComponent(c[1]),h=parseInt(r.searchParams.get("limit")??"10",10);return await this.agentHistory(u,h,t)}let d=i.match(/^\/admin\/agents\/([^/]+)\/rollback$/);if(d&&o==="POST"){let u=decodeURIComponent(d[1]);return await this.rollbackAgent(u,e,t)}if(i==="/admin/servers"&&o==="GET")return await this.listServers(t);t.writeHead(404,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Not found"}))}catch(a){xh.error("Admin API error",{error:String(a),path:i,method:o}),t.writeHead(500,{"Content-Type":"application/json"}),t.end(JSON.stringify({error:"Internal server error"}))}}async readBody(e){return new Promise((t,s)=>{let r=[];e.on("data",i=>r.push(i)),e.on("end",()=>{try{t(JSON.parse(Buffer.concat(r).toString()))}catch{s(new Error("Invalid JSON"))}}),e.on("error",s)})}json(e,t,s){e.writeHead(t,{"Content-Type":"application/json"}),e.end(JSON.stringify(s))}async saveVersion(e,t){let s=await this.agentDefs.findOne({_id:e});s&&await this.agentVersions.insertOne({agentId:e,snapshot:s,changedFields:t,createdAt:new Date})}async listAgents(e){let t=await this.agentDefs.find().toArray();this.json(e,200,t)}async getAgent(e,t){let s=await this.agentDefs.findOne({_id:e});if(!s)return this.json(t,404,{error:"Agent not found"});this.json(t,200,s)}async createAgent(e,t){let s=await this.readBody(e);if(!s._id||!s.name||!s.model)return this.json(t,400,{error:"Required: _id, name, model"});if(await this.agentDefs.findOne({_id:s._id}))return this.json(t,409,{error:"Agent already exists"});let i=new Date,o={_id:s._id,name:s.name,model:s.model,icon:s.icon??te.icon,channels:s.channels??[],passiveChannels:s.passiveChannels??te.passiveChannels,keywords:s.keywords??te.keywords,isDefault:s.isDefault??!1,coreServers:s.coreServers??[],delegateServers:s.delegateServers??[],delegatePrompts:s.delegatePrompts??te.delegatePrompts,plugins:s.plugins,metadata:s.metadata,soul:s.soul??"",systemPrompt:s.systemPrompt??"",schedule:s.schedule??te.schedule,subscribe:s.subscribe,budgetUsd:s.budgetUsd??te.budgetUsd,maxTurns:s.maxTurns??te.maxTurns,maxConcurrent:s.maxConcurrent??te.maxConcurrent,timeoutMs:s.timeoutMs??te.timeoutMs,disabled:s.disabled??!1,slackBot:s.slackBot,createdAt:i,updatedAt:i,updatedBy:"admin-api"};await this.agentDefs.insertOne(o),this.onReload(),this.json(t,201,o)}async updateAgent(e,t,s){let r=await this.readBody(t);if(!await this.agentDefs.findOne({_id:e}))return this.json(s,404,{error:"Agent not found"});delete r._id,delete r.createdAt;let o=Object.keys(r);await this.saveVersion(e,o),await this.agentDefs.updateOne({_id:e},{$set:{...r,updatedAt:new Date,updatedBy:"admin-api"}}),this.onReload();let a=await this.agentDefs.findOne({_id:e});this.json(s,200,a)}async deleteAgent(e,t){if(!await this.agentDefs.findOne({_id:e}))return this.json(t,404,{error:"Agent not found"});await this.saveVersion(e,["_deleted"]),await this.agentDefs.deleteOne({_id:e}),this.onReload(),this.json(t,200,{deleted:e})}async toggleAgent(e,t,s){if(!await this.agentDefs.findOne({_id:e}))return this.json(s,404,{error:"Agent not found"});await this.saveVersion(e,["disabled"]),await this.agentDefs.updateOne({_id:e},{$set:{disabled:t==="disable",updatedAt:new Date,updatedBy:"admin-api"}}),this.onReload(),this.json(s,200,{[t+"d"]:e})}async agentHistory(e,t,s){let r=await this.agentVersions.find({agentId:e}).sort({createdAt:-1}).limit(t).toArray();this.json(s,200,r)}async rollbackAgent(e,t,s){let i=(await this.readBody(t)).version_index??0;if(typeof i!="number"||i<0||!Number.isInteger(i))return this.json(s,400,{error:"version_index must be a non-negative integer"});let o=await this.agentVersions.find({agentId:e}).sort({createdAt:-1}).skip(i).limit(1).toArray();if(o.length===0)return this.json(s,404,{error:"No version found at that index"});if(!await this.agentDefs.findOne({_id:e}))return this.json(s,404,{error:"Agent not found \u2014 cannot rollback a deleted agent"});await this.saveVersion(e,["_rollback"]);let{_id:l,...c}=o[0].snapshot;await this.agentDefs.updateOne({_id:e},{$set:{...c,updatedAt:new Date,updatedBy:"admin-api"}}),this.onReload();let d=await this.agentDefs.findOne({_id:e});this.json(s,200,d)}async listServers(e){this.json(e,200,{message:"Server registry \u2014 use agent_definitions.coreServers/delegateServers fields"})}};O();var kt=I("activity-logger"),Vr=class{db;collection;buffer=[];flushTimer=null;config;connected=!1;constructor(e,t){this.db=e,this.config=t}async connect(){if(!this.config.enabled){kt.info("Activity log disabled");return}this.collection=this.db.collection("activity_log"),await this.collection.createIndex({agentId:1,timestamp:-1}),await this.collection.createIndex({timestamp:1},{expireAfterSeconds:this.config.retentionDays*24*60*60}),this.connected=!0,this.flushTimer=setInterval(()=>{this.flush().catch(t=>kt.warn("Periodic flush failed",{error:String(t)}))},this.config.flushIntervalMs);let e=await this.collection.estimatedDocumentCount();kt.info("Activity log connected",{records:e,retentionDays:this.config.retentionDays})}record(e){!this.config.enabled||!this.connected||(this.buffer.push(e),this.buffer.length>=this.config.bufferSize&&this.flush().catch(t=>kt.warn("Buffer-full flush failed",{error:String(t)})))}async flush(){if(this.buffer.length===0)return;let e=this.buffer.splice(0);try{await this.collection.insertMany(e,{ordered:!1})}catch(t){kt.warn("Bulk write failed, retrying once",{count:e.length,error:String(t)});try{await this.collection.insertMany(e,{ordered:!1})}catch(s){kt.error("Bulk write failed after retry, dropping batch",{count:e.length,error:String(s)})}}}async stop(){this.flushTimer&&(clearInterval(this.flushTimer),this.flushTimer=null),this.buffer.length>0&&(kt.info("Draining activity buffer on shutdown",{count:this.buffer.length}),await this.flush()),this.connected=!1}};O();var Mh={id:"001-backfill-home-base",async run(n,e){let t=n.collection("agent_definitions"),s=t.find({homeBase:{$exists:!1}}),r=0,i=0;for await(let o of s){let a=o.channels?.find(l=>l.startsWith("agent-"))??o.channels?.[0];if(!a){e.warn("Cannot backfill homeBase \u2014 no channels",{agentId:o._id}),i++;continue}await t.updateOne({_id:o._id},{$set:{homeBase:a}}),r++}e.info("Backfill complete",{migration:"001-backfill-home-base",updated:r,skipped:i})}};var Yr=I("migrations"),Nb=[Mh];async function Dh(n,e=Nb){let t=n.collection("migrations");for(let s of e){if(await t.findOne({_id:s.id})){Yr.debug("Migration already applied, skipping",{id:s.id});continue}Yr.info("Running migration",{id:s.id}),await s.run(n,Yr),await t.insertOne({_id:s.id,ranAt:new Date}),Yr.info("Migration applied",{id:s.id})}}var x=I("index");async function yk(){x.info("Hive starting up",{instance:m.instance.id,portBase:m.instance.portBase}),uc(le,di),hc(le),oc(le),pc(di,ze),m.gemini.apiKey&&(Qu(m.gemini.apiKey),x.info("Gemini vision enabled",{model:m.gemini.visionModel}));let n=new gk(m.mongo.uri);await n.connect();let e=n.db(m.mongo.dbName),t=e.collection("agent_definitions");await t.createIndex({channels:1}),await t.createIndex({disabled:1}),await Dh(e);let s,r,i,o=null,a=async()=>{if(!r||!i)return;x.info("Hot-reloading agent registry...");let N=await s.load();if(N.added.length&&x.info("New agents online",{agents:N.added}),N.updated.length&&x.info("Agents updated",{agents:N.updated}),N.removed.length){x.info("Agents removed",{agents:N.removed});for(let ce of N.removed)r.stopAgent(ce)}let B=s.getDisabled();for(let ce of B)r.stopAgent(ce.id);B.length&&x.info("Disabled agents stopped",{agents:B.map(ce=>ce.id)}),await i.reloadSchedules(),r.reloadSkills()};s=new cr(t,()=>{o&&clearTimeout(o),o=setTimeout(()=>a(),500)}),await s.load(),x.info("Agent registry loaded",{agents:s.listIds()});let l=new vr(m.mongo.uri,m.mongo.dbName);await l.init();let c=new Fr(m.mongo.uri,m.mongo.dbName);await c.init(),l.memoryStore=c;let d=new Kr,u=new Hr(c,d,{hotBudgetTokens:m.memory.hotBudgetTokens,sweepIntervalHours:m.memory.sweepIntervalHours,hotThreshold:m.memory.hotThreshold,warmThreshold:m.memory.warmThreshold,recencyHalfLifeDays:m.memory.recencyHalfLifeDays,coldSummaryMinRecords:m.memory.coldSummaryMinRecords,coldRetentionDays:m.memory.coldRetentionDays,purgeRetentionDays:m.memory.purgeRetentionDays},m.autoDream);x.info("Structured memory lifecycle enabled");let h=new Cr(m.mongo.uri);await h.connect(m.mongo.dbName);let p;if(m.activity.enabled&&(p=new Vr(e,m.activity),await p.connect()),m.linear.apiKey){let N=new Ar(m.linear.apiKey,m.linear.teamId||void 0);x.info("Linear client configured")}let g=new Dr(m.taskLedger.apiUrl,m.taskLedger.apiKey);g.isConfigured&&x.info("Task ledger client configured",{apiUrl:m.taskLedger.apiUrl});let f=new Lr(m.taskLedger.apiUrl,m.taskLedger.agentKeys,m.taskLedger.apiKey);f.isConfigured&&x.info("Task ledger auto-tracking enabled",{apiUrl:m.taskLedger.apiUrl,agents:Object.keys(m.taskLedger.agentKeys)});let y,w;if(m.codeIndex.enabled){let{CodeIndexPrefetcher:N}=await Promise.resolve().then(()=>($h(),Ph)),{KnowledgeExtractor:B}=await Promise.resolve().then(()=>(Bh(),Rh));y=new N({mongoUri:m.mongo.uri,dbName:m.mongo.dbName,qdrantUrl:process.env.QDRANT_URL??"http://localhost:6333",ollamaUrl:process.env.OLLAMA_URL??"http://localhost:11434",scoreThreshold:m.codeIndex.scoreThreshold,prefetchLimit:m.codeIndex.prefetchLimit}),m.codeIndex.sessionKnowledge.enabled&&(w=new B(c,d)),x.info("Code index integration enabled",{prefetch:!0,sessionKnowledge:w!==void 0})}r=new _r(s,l,h,p,y);let S=new Ir(r,l,s),b=new Er(s,r,S,m.defaultAgent,f.isConfigured?f:void 0),A=new Pr(m.background.port,m.background.authToken,m.tasksDir.background,N=>b.dispatch(N).catch(B=>{x.error("Background task completion dispatch failed",{error:String(B)})}));await A.start(),await A.scanOrphans(),x.info("Background task manager started",{port:m.background.port});let v=new Rr(m.codeTask.port,m.codeTask.authToken,m.codeTask.pluginDirs,m.codeTask.maxConcurrent,m.tasksDir.code,N=>b.dispatch(N).catch(B=>{x.error("Code task completion dispatch failed",{error:String(B)})}),{prefetcher:y,knowledgeExtractor:w,maxLifetimeMs:m.codeTask.maxLifetimeMs,staleGraceMs:m.codeTask.staleGraceMs});await v.start(),await v.scanOrphans(),x.info("Code task manager started",{port:m.codeTask.port});let C;m.recall.apiKey&&(C=new Br(m.recall.monitorPort,m.recall.webhookSecret,N=>b.dispatch(N).catch(B=>{x.error("Meeting monitor dispatch failed",{error:String(B)})})),await C.start(),x.info("Meeting monitor started",{port:m.recall.monitorPort}),m.recall.apiKey&&!m.recall.webhookSecret&&x.error("Real-time transcript delivery disabled \u2014 RECALL_WEBHOOK_SECRET not set")),pk(ze)&&(mk(ze,{recursive:!0},()=>{o&&clearTimeout(o),o=setTimeout(()=>a(),500)}),x.info("Skills hot-reload enabled",{watched:ze})),process.on("SIGUSR1",()=>a()),x.info("Hot-reload enabled",{signal:"SIGUSR1"});let M=m.sms.lines.map(N=>N.slackChannel).filter(Boolean),_=new kr(m.slack.appToken,m.slack.botToken),L=new Nr(_,s,M,"slack");b.registerAdapter(L),await L.start(N=>{b.dispatch(N).catch(B=>{x.error("Slack dispatch failed",{error:String(B),source:N.source.label})})}),x.info("Slack adapter connected");try{let N=new Map,B;do{let xt=await _.client.conversations.list({types:"public_channel",limit:1e3,cursor:B});for(let Ye of xt.channels??[])Ye.name&&Ye.id&&N.set(Ye.name,Ye.id);B=xt.response_metadata?.next_cursor||void 0}while(B);let ce=m.slack.auditChannel,on=ce?N.get(ce):void 0;b.setAuditChannel(L,N,on),x.info("Audit channel configured",{channels:N.size,fallback:ce||null,fallbackResolved:!!on})}catch(N){x.warn("Failed to configure audit channel",{error:String(N)})}let j=new Or(m.quo.apiKey,m.sms.lines);b.registerAdapter(j),m.quo.apiKey&&m.sms.lines.length>0&&(await j.start(N=>{b.dispatch(N).catch(B=>{x.error("SMS dispatch failed",{error:String(B),source:N.source.label})})}),x.info("SMS adapter started",{lines:m.sms.lines.length}));let J;m.imessage.enabled&&(J=new Mr(m.imessage,m.mongo.uri,m.mongo.dbName,_,m.instance.id),b.registerAdapter(J),await J.start(N=>{b.dispatch(N).catch(B=>{x.error("iMessage dispatch failed",{error:String(B)})})}),x.info("iMessage adapter started"));let{AgentRunner:K}=await Promise.resolve().then(()=>(fa(),Yu));K.registryRef=s;let{TeamStore:ae}=await Promise.resolve().then(()=>(Fh(),jh)),{CommandRegistry:sn}=await Promise.resolve().then(()=>(Gh(),Kh)),Le=new ae(m.mongo.uri,m.mongo.dbName);await Le.connect();let nn=N=>{let B=s.getAll(),ce=B.find(Ye=>Ye.id===N);if(ce)return{id:ce.id,name:ce.name};let on=N.toLowerCase(),xt=B.find(Ye=>Ye.name.toLowerCase()===on);return xt?{id:xt.id,name:xt.name}:null},rn=new sn(Le,nn);b.setTeamStore(Le),x.info("Team layer initialized");let{registerPluginCommands:ut}=await Promise.resolve().then(()=>(ba(),uh));await ut(r.getPlugins(),rn);let Ve;if(m.ws.enabled){let{WsAdapter:N}=await Promise.resolve().then(()=>(tp(),ep));Ve=new N(m.ws.port,{teamStore:Le,commandRegistry:rn,agentRegistry:s,agentManager:r}),b.registerAdapter(Ve),await Ve.start(B=>{b.dispatch(B).catch(ce=>{x.error("WS dispatch failed",{error:String(ce),source:B.source.label})})}),x.info("WebSocket adapter started",{port:m.ws.port})}let Et;if(m.ws.enabled){let{startBeekeeperRegistration:N}=await Promise.resolve().then(()=>(np(),sp)),B=`hive-${m.instance.id}`;Et=N({beekeeperPort:m.beekeeper.port,wsPort:m.ws.port,capabilityName:B}),x.info("Beekeeper registration loop started",{beekeeperPort:m.beekeeper.port,wsPort:m.ws.port,capabilityName:B})}let Nt;if(m.voice.enabled&&m.voice.serverSecret){let{VoiceAdapter:N}=await Promise.resolve().then(()=>(fp(),hp));Nt=new N(m.voice.port,m.voice.serverSecret,s,l),await Nt.start(),x.info("Voice adapter started",{port:m.voice.port})}i=new Tr(r,l,S,s,N=>{b.dispatch(N).catch(B=>{x.error("Callback dispatch failed",{error:String(B)})})}),await i.connectDb(m.mongo.uri,m.mongo.dbName),i.start(),x.info("Scheduler started"),await s.startWatching();let G;m.adminApi.token&&(G=new Wr(m.adminApi.port,m.adminApi.token,t,e.collection("agent_definition_versions"),()=>a()),await G.start(),x.info("Admin API started",{port:m.adminApi.port}));let D=new qr({maxAttempts:m.sweeper.retryMaxAttempts,baseDelayMs:m.sweeper.retryBaseDelayMs});b.setRetryQueue(D);let P=[L],ie=[_],ns=new jr({intervalMs:m.sweeper.intervalMs,threadTtlMs:m.sweeper.threadTtlMs,taskFileTtlMs:m.sweeper.taskFileTtlMs,meetingSessionTtlMs:m.sweeper.meetingSessionTtlMs,cacheTtlMs:m.sweeper.cacheTtlMs,memorySweepIntervalHours:m.memory.sweepIntervalHours,dreamConfig:m.autoDream},{dispatcher:b,slackAdapters:P,bgTaskManager:A,codeTaskManager:v,meetingMonitor:C,taskLedger:f.isConfigured?f:void 0,slackGateways:ie,agentManager:r,retryQueue:D,memoryLifecycle:u},g.isConfigured?g:void 0);ns.start(),x.info("Sweeper started",{intervalMs:m.sweeper.intervalMs});let Ot=async N=>{x.info("Shutdown signal received",{signal:N}),ns.stop(),G?.stop(),s.stopWatching(),await j.stop(),J&&await J.stop(),Et?.stop(),Ve&&await Ve.stop(),Nt?.stop(),await Le.close(),i.stop(),await A.stop(),await v.stop(),await y?.close(),C?.stop(),r.stopAll(),p&&await p.stop(),await h.close(),await c.close(),await L.stop(),await n.close(),x.info("Hive shut down cleanly"),process.exit(0)};process.on("SIGTERM",()=>Ot("SIGTERM")),process.on("SIGINT",()=>Ot("SIGINT")),x.info("Hive is running")}process.on("unhandledRejection",n=>{x.error("Unhandled promise rejection",{error:String(n),stack:n instanceof Error?n.stack:void 0})});yk().catch(n=>{x.error("Fatal startup error",{error:String(n)}),process.exit(1)});
|