faf 8.2.1 → 8.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -2
- package/dist/cli.js +268 -267
- package/dist/cli.js.map +14 -15
- package/dist/core/safe-write.d.ts +2 -2
- package/dist/core/version.d.ts +1 -1
- package/dist/index.js +122 -122
- package/dist/index.js.map +8 -8
- package/dist/interop/cards.d.ts +10 -3
- package/dist/interop/claude.d.ts +2 -2
- package/dist/interop/faf.d.ts +1 -1
- package/dist/interop/pack.d.ts +11 -1
- package/dist/pack.js +41 -41
- package/dist/pack.js.map +3 -3
- package/package.json +1 -1
- package/project.faf +3 -3
package/dist/index.js
CHANGED
|
@@ -1,74 +1,74 @@
|
|
|
1
|
-
import{createRequire as
|
|
2
|
-
`)}}J0.defaultYaml={explicit:!1,version:"1.2"};J0.defaultTags={"!!":"tag:yaml.org,2002:"};
|
|
3
|
-
`)?
|
|
1
|
+
import{createRequire as Az}from"node:module";var Fz=Object.defineProperty;var M=($,Z)=>()=>(Z||$((Z={exports:{}}).exports,Z),Z.exports);var Rz=($)=>$;function Nz($,Z){this[$]=Rz.bind(null,Z)}var Tz=($,Z)=>{for(var Q in Z)Fz($,Q,{get:Z[Q],enumerable:!0,configurable:!0,set:Nz.bind(Z,Q)})};var K$=Az(import.meta.url);var x=M((sz)=>{var U5=Symbol.for("yaml.alias"),d1=Symbol.for("yaml.document"),O6=Symbol.for("yaml.map"),i1=Symbol.for("yaml.pair"),J5=Symbol.for("yaml.scalar"),_6=Symbol.for("yaml.seq"),k0=Symbol.for("yaml.node.type"),pz=($)=>!!$&&typeof $==="object"&&$[k0]===U5,lz=($)=>!!$&&typeof $==="object"&&$[k0]===d1,cz=($)=>!!$&&typeof $==="object"&&$[k0]===O6,dz=($)=>!!$&&typeof $==="object"&&$[k0]===i1,n1=($)=>!!$&&typeof $==="object"&&$[k0]===J5,iz=($)=>!!$&&typeof $==="object"&&$[k0]===_6;function r1($){if($&&typeof $==="object")switch($[k0]){case O6:case _6:return!0}return!1}function nz($){if($&&typeof $==="object")switch($[k0]){case U5:case O6:case J5:case _6:return!0}return!1}var rz=($)=>(n1($)||r1($))&&!!$.anchor;sz.ALIAS=U5;sz.DOC=d1;sz.MAP=O6;sz.NODE_TYPE=k0;sz.PAIR=i1;sz.SCALAR=J5;sz.SEQ=_6;sz.hasAnchor=rz;sz.isAlias=pz;sz.isCollection=r1;sz.isDocument=lz;sz.isMap=cz;sz.isNode=nz;sz.isPair=dz;sz.isScalar=n1;sz.isSeq=iz});var _$=M((BX)=>{var r=x(),z0=Symbol("break visit"),s1=Symbol("skip children"),C0=Symbol("remove node");function M6($,Z){let Q=o1(Z);if(r.isDocument($)){if(k2(null,$.contents,Q,Object.freeze([$]))===C0)$.contents=null}else k2(null,$,Q,Object.freeze([]))}M6.BREAK=z0;M6.SKIP=s1;M6.REMOVE=C0;function k2($,Z,Q,z){let X=a1($,Z,Q,z);if(r.isNode(X)||r.isPair(X))return t1($,z,X),k2($,X,Q,z);if(typeof X!=="symbol"){if(r.isCollection(Z)){z=Object.freeze(z.concat(Z));for(let H=0;H<Z.items.length;++H){let U=k2(H,Z.items[H],Q,z);if(typeof U==="number")H=U-1;else if(U===z0)return z0;else if(U===C0)Z.items.splice(H,1),H-=1}}else if(r.isPair(Z)){z=Object.freeze(z.concat(Z));let H=k2("key",Z.key,Q,z);if(H===z0)return z0;else if(H===C0)Z.key=null;let U=k2("value",Z.value,Q,z);if(U===z0)return z0;else if(U===C0)Z.value=null}}return X}async function P6($,Z){let Q=o1(Z);if(r.isDocument($)){if(await h2(null,$.contents,Q,Object.freeze([$]))===C0)$.contents=null}else await h2(null,$,Q,Object.freeze([]))}P6.BREAK=z0;P6.SKIP=s1;P6.REMOVE=C0;async function h2($,Z,Q,z){let X=await a1($,Z,Q,z);if(r.isNode(X)||r.isPair(X))return t1($,z,X),h2($,X,Q,z);if(typeof X!=="symbol"){if(r.isCollection(Z)){z=Object.freeze(z.concat(Z));for(let H=0;H<Z.items.length;++H){let U=await h2(H,Z.items[H],Q,z);if(typeof U==="number")H=U-1;else if(U===z0)return z0;else if(U===C0)Z.items.splice(H,1),H-=1}}else if(r.isPair(Z)){z=Object.freeze(z.concat(Z));let H=await h2("key",Z.key,Q,z);if(H===z0)return z0;else if(H===C0)Z.key=null;let U=await h2("value",Z.value,Q,z);if(U===z0)return z0;else if(U===C0)Z.value=null}}return X}function o1($){if(typeof $==="object"&&($.Collection||$.Node||$.Value))return Object.assign({Alias:$.Node,Map:$.Node,Scalar:$.Node,Seq:$.Node},$.Value&&{Map:$.Value,Scalar:$.Value,Seq:$.Value},$.Collection&&{Map:$.Collection,Seq:$.Collection},$);return $}function a1($,Z,Q,z){if(typeof Q==="function")return Q($,Z,z);if(r.isMap(Z))return Q.Map?.($,Z,z);if(r.isSeq(Z))return Q.Seq?.($,Z,z);if(r.isPair(Z))return Q.Pair?.($,Z,z);if(r.isScalar(Z))return Q.Scalar?.($,Z,z);if(r.isAlias(Z))return Q.Alias?.($,Z,z);return}function t1($,Z,Q){let z=Z[Z.length-1];if(r.isCollection(z))z.items[$]=Q;else if(r.isPair(z))if($==="key")z.key=Q;else z.value=Q;else if(r.isDocument(z))z.contents=Q;else{let X=r.isAlias(z)?"alias":"scalar";throw Error(`Cannot replace node with ${X} parent`)}}BX.visit=M6;BX.visitAsync=P6});var G5=M((OX)=>{var e1=x(),DX=_$(),LX={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},IX=($)=>$.replace(/[!,[\]{}]/g,(Z)=>LX[Z]);class J0{constructor($,Z){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},J0.defaultYaml,$),this.tags=Object.assign({},J0.defaultTags,Z)}clone(){let $=new J0(this.yaml,this.tags);return $.docStart=this.docStart,$}atDocument(){let $=new J0(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:J0.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},J0.defaultTags);break}return $}add($,Z){if(this.atNextDocument)this.yaml={explicit:J0.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},J0.defaultTags),this.atNextDocument=!1;let Q=$.trim().split(/[ \t]+/),z=Q.shift();switch(z){case"%TAG":{if(Q.length!==2){if(Z(0,"%TAG directive should contain exactly two parts"),Q.length<2)return!1}let[X,H]=Q;return this.tags[X]=H,!0}case"%YAML":{if(this.yaml.explicit=!0,Q.length!==1)return Z(0,"%YAML directive should contain exactly one part"),!1;let[X]=Q;if(X==="1.1"||X==="1.2")return this.yaml.version=X,!0;else{let H=/^\d+\.\d+$/.test(X);return Z(6,`Unsupported YAML version ${X}`,H),!1}}default:return Z(0,`Unknown directive ${z}`,!0),!1}}tagName($,Z){if($==="!")return"!";if($[0]!=="!")return Z(`Not a valid tag: ${$}`),null;if($[1]==="<"){let H=$.slice(2,-1);if(H==="!"||H==="!!")return Z(`Verbatim tags aren't resolved, so ${$} is invalid.`),null;if($[$.length-1]!==">")Z("Verbatim tags must end with a >");return H}let[,Q,z]=$.match(/^(.*!)([^!]*)$/s);if(!z)Z(`The ${$} tag has no suffix`);let X=this.tags[Q];if(X)try{return X+decodeURIComponent(z)}catch(H){return Z(String(H)),null}if(Q==="!")return $;return Z(`Could not resolve tag: ${$}`),null}tagString($){for(let[Z,Q]of Object.entries(this.tags))if($.startsWith(Q))return Z+IX($.substring(Q.length));return $[0]==="!"?$:`!<${$}>`}toString($){let Z=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],Q=Object.entries(this.tags),z;if($&&Q.length>0&&e1.isNode($.contents)){let X={};DX.visit($.contents,(H,U)=>{if(e1.isNode(U)&&U.tag)X[U.tag]=!0}),z=Object.keys(X)}else z=[];for(let[X,H]of Q){if(X==="!!"&&H==="tag:yaml.org,2002:")continue;if(!$||z.some((U)=>U.startsWith(H)))Z.push(`%TAG ${X} ${H}`)}return Z.join(`
|
|
2
|
+
`)}}J0.defaultYaml={explicit:!1,version:"1.2"};J0.defaultTags={"!!":"tag:yaml.org,2002:"};OX.Directives=J0});var F6=M((RX)=>{var $4=x(),MX=_$();function PX($){if(/[\x00-\x19\s,[\]{}]/.test($)){let Q=`Anchor must not contain whitespace or control characters: ${JSON.stringify($)}`;throw Error(Q)}return!0}function Z4($){let Z=new Set;return MX.visit($,{Value(Q,z){if(z.anchor)Z.add(z.anchor)}}),Z}function Q4($,Z){for(let Q=1;;++Q){let z=`${$}${Q}`;if(!Z.has(z))return z}}function FX($,Z){let Q=[],z=new Map,X=null;return{onAnchor:(H)=>{Q.push(H),X??(X=Z4($));let U=Q4(Z,X);return X.add(U),U},setAnchors:()=>{for(let H of Q){let U=z.get(H);if(typeof U==="object"&&U.anchor&&($4.isScalar(U.node)||$4.isCollection(U.node)))U.node.anchor=U.anchor;else{let J=Error("Failed to resolve repeated object (this should not happen)");throw J.source=H,J}}},sourceObjects:z}}RX.anchorIsValid=PX;RX.anchorNames=Z4;RX.createNodeAnchors=FX;RX.findNewAnchor=Q4});var V5=M((jX)=>{function M$($,Z,Q,z){if(z&&typeof z==="object")if(Array.isArray(z))for(let X=0,H=z.length;X<H;++X){let U=z[X],J=M$($,z,String(X),U);if(J===void 0)delete z[X];else if(J!==U)z[X]=J}else if(z instanceof Map)for(let X of Array.from(z.keys())){let H=z.get(X),U=M$($,z,X,H);if(U===void 0)z.delete(X);else if(U!==H)z.set(X,U)}else if(z instanceof Set)for(let X of Array.from(z)){let H=M$($,z,X,X);if(H===void 0)z.delete(X);else if(H!==X)z.delete(X),z.add(H)}else for(let[X,H]of Object.entries(z)){let U=M$($,z,X,H);if(U===void 0)delete z[X];else if(U!==H)z[X]=U}return $.call(Z,Q,z)}jX.applyReviver=M$});var d0=M((EX)=>{var SX=x();function z4($,Z,Q){if(Array.isArray($))return $.map((z,X)=>z4(z,String(X),Q));if($&&typeof $.toJSON==="function"){if(!Q||!SX.hasAnchor($))return $.toJSON(Z,Q);let z={aliasCount:0,count:1,res:void 0};Q.anchors.set($,z),Q.onCreate=(H)=>{z.res=H,delete Q.onCreate};let X=$.toJSON(Z,Q);if(Q.onCreate)Q.onCreate(X);return X}if(typeof $==="bigint"&&!Q?.keep)return Number($);return $}EX.toJS=z4});var R6=M((gX)=>{var yX=V5(),X4=x(),xX=d0();class H4{constructor($){Object.defineProperty(this,X4.NODE_TYPE,{value:$})}clone(){let $=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));if(this.range)$.range=this.range.slice();return $}toJS($,{mapAsMap:Z,maxAliasCount:Q,onAnchor:z,reviver:X}={}){if(!X4.isDocument($))throw TypeError("A document argument is required");let H={anchors:new Map,doc:$,keep:!0,mapAsMap:Z===!0,mapKeyWarned:!1,maxAliasCount:typeof Q==="number"?Q:100},U=xX.toJS(this,"",H);if(typeof z==="function")for(let{count:J,res:G}of H.anchors.values())z(G,J);return typeof X==="function"?yX.applyReviver(X,{"":U},"",U):U}}gX.NodeBase=H4});var P$=M((mX)=>{var kX=F6(),hX=_$(),u2=x(),uX=R6(),fX=d0();class U4 extends uX.NodeBase{constructor($){super(u2.ALIAS);this.source=$,Object.defineProperty(this,"tag",{set(){throw Error("Alias nodes cannot have tags")}})}resolve($,Z){if(Z?.maxAliasCount===0)throw ReferenceError("Alias resolution is disabled");let Q;if(Z?.aliasResolveCache)Q=Z.aliasResolveCache;else if(Q=[],hX.visit($,{Node:(X,H)=>{if(u2.isAlias(H)||u2.hasAnchor(H))Q.push(H)}}),Z)Z.aliasResolveCache=Q;let z=void 0;for(let X of Q){if(X===this)break;if(X.anchor===this.source)z=X}return z}toJSON($,Z){if(!Z)return{source:this.source};let{anchors:Q,doc:z,maxAliasCount:X}=Z,H=this.resolve(z,Z);if(!H){let J=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw ReferenceError(J)}let U=Q.get(H);if(!U)fX.toJS(H,null,Z),U=Q.get(H);if(U?.res===void 0)throw ReferenceError("This should not happen: Alias anchor was not resolved?");if(X>=0){if(U.count+=1,U.aliasCount===0)U.aliasCount=N6(z,H,Q);if(U.count*U.aliasCount>X)throw ReferenceError("Excessive alias count indicates a resource exhaustion attack")}return U.res}toString($,Z,Q){let z=`*${this.source}`;if($){if(kX.anchorIsValid(this.source),$.options.verifyAliasOrder&&!$.anchors.has(this.source)){let X=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw Error(X)}if($.implicitKey)return`${z} `}return z}}function N6($,Z,Q){if(u2.isAlias(Z)){let z=Z.resolve($),X=Q&&z&&Q.get(z);return X?X.count*X.aliasCount:0}else if(u2.isCollection(Z)){let z=0;for(let X of Z.items){let H=N6($,X,Q);if(H>z)z=H}return z}else if(u2.isPair(Z)){let z=N6($,Z.key,Q),X=N6($,Z.value,Q);return Math.max(z,X)}return 1}mX.Alias=U4});var d=M((nX)=>{var lX=x(),cX=R6(),dX=d0(),iX=($)=>!$||typeof $!=="function"&&typeof $!=="object";class H2 extends cX.NodeBase{constructor($){super(lX.SCALAR);this.value=$}toJSON($,Z){return Z?.keep?this.value:dX.toJS(this.value,$,Z)}toString(){return String(this.value)}}H2.BLOCK_FOLDED="BLOCK_FOLDED";H2.BLOCK_LITERAL="BLOCK_LITERAL";H2.PLAIN="PLAIN";H2.QUOTE_DOUBLE="QUOTE_DOUBLE";H2.QUOTE_SINGLE="QUOTE_SINGLE";nX.Scalar=H2;nX.isScalarValue=iX});var F$=M(($H)=>{var oX=P$(),U2=x(),J4=d(),aX="tag:yaml.org,2002:";function tX($,Z,Q){if(Z){let z=Q.filter((H)=>H.tag===Z),X=z.find((H)=>!H.format)??z[0];if(!X)throw Error(`Tag ${Z} not found`);return X}return Q.find((z)=>z.identify?.($)&&!z.format)}function eX($,Z,Q){if(U2.isDocument($))$=$.contents;if(U2.isNode($))return $;if(U2.isPair($)){let W=Q.schema[U2.MAP].createNode?.(Q.schema,null,Q);return W.items.push($),W}if($ instanceof String||$ instanceof Number||$ instanceof Boolean||typeof BigInt<"u"&&$ instanceof BigInt)$=$.valueOf();let{aliasDuplicateObjects:z,onAnchor:X,onTagObj:H,schema:U,sourceObjects:J}=Q,G=void 0;if(z&&$&&typeof $==="object")if(G=J.get($),G)return G.anchor??(G.anchor=X($)),new oX.Alias(G.anchor);else G={anchor:null,node:null},J.set($,G);if(Z?.startsWith("!!"))Z=aX+Z.slice(2);let V=tX($,Z,U.tags);if(!V){if($&&typeof $.toJSON==="function")$=$.toJSON();if(!$||typeof $!=="object"){let W=new J4.Scalar($);if(G)G.node=W;return W}V=$ instanceof Map?U[U2.MAP]:(Symbol.iterator in Object($))?U[U2.SEQ]:U[U2.MAP]}if(H)H(V),delete Q.onTagObj;let Y=V?.createNode?V.createNode(Q.schema,$,Q):typeof V?.nodeClass?.from==="function"?V.nodeClass.from(Q.schema,$,Q):new J4.Scalar($);if(Z)Y.tag=Z;else if(!V.default)Y.tag=V.tag;if(G)G.node=Y;return Y}$H.createNode=eX});var T6=M((XH)=>{var QH=F$(),j0=x(),zH=R6();function Y5($,Z,Q){let z=Q;for(let X=Z.length-1;X>=0;--X){let H=Z[X];if(typeof H==="number"&&Number.isInteger(H)&&H>=0){let U=[];U[H]=z,z=U}else z=new Map([[H,z]])}return QH.createNode(z,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw Error("This should not happen, please report a bug.")},schema:$,sourceObjects:new Map})}var G4=($)=>$==null||typeof $==="object"&&!!$[Symbol.iterator]().next().done;class V4 extends zH.NodeBase{constructor($,Z){super($);Object.defineProperty(this,"schema",{value:Z,configurable:!0,enumerable:!1,writable:!0})}clone($){let Z=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));if($)Z.schema=$;if(Z.items=Z.items.map((Q)=>j0.isNode(Q)||j0.isPair(Q)?Q.clone($):Q),this.range)Z.range=this.range.slice();return Z}addIn($,Z){if(G4($))this.add(Z);else{let[Q,...z]=$,X=this.get(Q,!0);if(j0.isCollection(X))X.addIn(z,Z);else if(X===void 0&&this.schema)this.set(Q,Y5(this.schema,z,Z));else throw Error(`Expected YAML collection at ${Q}. Remaining path: ${z}`)}}deleteIn($){let[Z,...Q]=$;if(Q.length===0)return this.delete(Z);let z=this.get(Z,!0);if(j0.isCollection(z))return z.deleteIn(Q);else throw Error(`Expected YAML collection at ${Z}. Remaining path: ${Q}`)}getIn($,Z){let[Q,...z]=$,X=this.get(Q,!0);if(z.length===0)return!Z&&j0.isScalar(X)?X.value:X;else return j0.isCollection(X)?X.getIn(z,Z):void 0}hasAllNullValues($){return this.items.every((Z)=>{if(!j0.isPair(Z))return!1;let Q=Z.value;return Q==null||$&&j0.isScalar(Q)&&Q.value==null&&!Q.commentBefore&&!Q.comment&&!Q.tag})}hasIn($){let[Z,...Q]=$;if(Q.length===0)return this.has(Z);let z=this.get(Z,!0);return j0.isCollection(z)?z.hasIn(Q):!1}setIn($,Z){let[Q,...z]=$;if(z.length===0)this.set(Q,Z);else{let X=this.get(Q,!0);if(j0.isCollection(X))X.setIn(z,Z);else if(X===void 0&&this.schema)this.set(Q,Y5(this.schema,z,Z));else throw Error(`Expected YAML collection at ${Q}. Remaining path: ${z}`)}}}XH.Collection=V4;XH.collectionFromPath=Y5;XH.isEmptyPath=G4});var R$=M((YH)=>{var GH=($)=>$.replace(/^(?!$)(?: $)?/gm,"#");function W5($,Z){if(/^\n+$/.test($))return $.substring(1);return Z?$.replace(/^(?! *$)/gm,Z):$}var VH=($,Z,Q)=>$.endsWith(`
|
|
3
|
+
`)?W5(Q,Z):Q.includes(`
|
|
4
4
|
`)?`
|
|
5
|
-
`+
|
|
6
|
-
`){if(Q==="block")q=
|
|
5
|
+
`+W5(Q,Z):($.endsWith(" ")?"":" ")+Q;YH.indentComment=W5;YH.lineComment=VH;YH.stringifyComment=GH});var W4=M((DH)=>{function KH($,Z,Q="flow",{indentAtStart:z,lineWidth:X=80,minContentWidth:H=20,onFold:U,onOverflow:J}={}){if(!X||X<0)return $;if(X<H)H=0;let G=Math.max(1+H,1+X-Z.length);if($.length<=G)return $;let V=[],Y={},W=X-Z.length;if(typeof z==="number")if(z>X-Math.max(2,H))V.push(0);else W=X-z;let B=void 0,K=void 0,L=!1,q=-1,D=-1,O=-1;if(Q==="block"){if(q=Y4($,q,Z.length),q!==-1)W=q+G}for(let C;C=$[q+=1];){if(Q==="quoted"&&C==="\\"){switch(D=q,$[q+1]){case"x":q+=3;break;case"u":q+=5;break;case"U":q+=9;break;default:q+=1}O=q}if(C===`
|
|
6
|
+
`){if(Q==="block")q=Y4($,q,Z.length);W=q+Z.length+G,B=void 0}else{if(C===" "&&K&&K!==" "&&K!==`
|
|
7
7
|
`&&K!=="\t"){let F=$[q+1];if(F&&F!==" "&&F!==`
|
|
8
|
-
`&&F!=="\t")B=q}if(q>=W)if(B)V.push(B),W=B+G,B=void 0;else if(Q==="quoted"){while(K===" "||K==="\t")K=C,C=$[q+=1],L=!0;let F=q>O+1?q-2:D-1;if(Y[F])return $;V.push(F),Y[F]=!0,W=F+G,B=void 0}else L=!0}K=C}if(L&&J)J();if(V.length===0)return $;if(U)U();let _=$.slice(0,V[0]);for(let C=0;C<V.length;++C){let F=V[C],
|
|
9
|
-
${Z}${$.slice(0,
|
|
10
|
-
${Z}${$.slice(F+1,
|
|
11
|
-
`);z=Z,X=Z+1,H=$[X]}return z}
|
|
8
|
+
`&&F!=="\t")B=q}if(q>=W)if(B)V.push(B),W=B+G,B=void 0;else if(Q==="quoted"){while(K===" "||K==="\t")K=C,C=$[q+=1],L=!0;let F=q>O+1?q-2:D-1;if(Y[F])return $;V.push(F),Y[F]=!0,W=F+G,B=void 0}else L=!0}K=C}if(L&&J)J();if(V.length===0)return $;if(U)U();let _=$.slice(0,V[0]);for(let C=0;C<V.length;++C){let F=V[C],N=V[C+1]||$.length;if(F===0)_=`
|
|
9
|
+
${Z}${$.slice(0,N)}`;else{if(Q==="quoted"&&Y[F])_+=`${$[F]}\\`;_+=`
|
|
10
|
+
${Z}${$.slice(F+1,N)}`}}return _}function Y4($,Z,Q){let z=Z,X=Z+1,H=$[X];while(H===" "||H==="\t")if(Z<X+Q)H=$[++Z];else{do H=$[++Z];while(H&&H!==`
|
|
11
|
+
`);z=Z,X=Z+1,H=$[X]}return z}DH.FOLD_BLOCK="block";DH.FOLD_FLOW="flow";DH.FOLD_QUOTED="quoted";DH.foldFlowLines=KH});var T$=M((RH)=>{var K0=d(),i0=W4(),C6=($,Z)=>({indentAtStart:Z?$.indent.length:$.indentAtStart,lineWidth:$.options.lineWidth,minContentWidth:$.options.minContentWidth}),j6=($)=>/^(%|---|\.\.\.)/m.test($);function MH($,Z,Q){if(!Z||Z<0)return!1;let z=Z-Q,X=$.length;if(X<=z)return!1;for(let H=0,U=0;H<X;++H)if($[H]===`
|
|
12
12
|
`){if(H-U>z)return!0;if(U=H+1,X-U<=z)return!1}return!0}function N$($,Z){let Q=JSON.stringify($);if(Z.options.doubleQuotedAsJSON)return Q;let{implicitKey:z}=Z,X=Z.options.doubleQuotedMinMultiLineLength,H=Z.indent||(j6($)?" ":""),U="",J=0;for(let G=0,V=Q[G];V;V=Q[++G]){if(V===" "&&Q[G+1]==="\\"&&Q[G+2]==="n")U+=Q.slice(J,G)+"\\ ",G+=1,J=G,V="\\";if(V==="\\")switch(Q[G+1]){case"u":{U+=Q.slice(J,G);let Y=Q.substr(G+2,4);switch(Y){case"0000":U+="\\0";break;case"0007":U+="\\a";break;case"000b":U+="\\v";break;case"001b":U+="\\e";break;case"0085":U+="\\N";break;case"00a0":U+="\\_";break;case"2028":U+="\\L";break;case"2029":U+="\\P";break;default:if(Y.substr(0,2)==="00")U+="\\x"+Y.substr(2);else U+=Q.substr(G,6)}G+=5,J=G+1}break;case"n":if(z||Q[G+2]==='"'||Q.length<X)G+=1;else{U+=Q.slice(J,G)+`
|
|
13
13
|
|
|
14
14
|
`;while(Q[G+2]==="\\"&&Q[G+3]==="n"&&Q[G+4]!=='"')U+=`
|
|
15
|
-
`,G+=2;if(U+=H,Q[G+2]===" ")U+="\\";G+=1,J=G+1}break;default:G+=1}}return U=J?U+Q.slice(J):Q,z?U:i0.foldFlowLines(U,H,i0.FOLD_QUOTED,C6(Z,!1))}function
|
|
15
|
+
`,G+=2;if(U+=H,Q[G+2]===" ")U+="\\";G+=1,J=G+1}break;default:G+=1}}return U=J?U+Q.slice(J):Q,z?U:i0.foldFlowLines(U,H,i0.FOLD_QUOTED,C6(Z,!1))}function B5($,Z){if(Z.options.singleQuote===!1||Z.implicitKey&&$.includes(`
|
|
16
16
|
`)||/[ \t]\n|\n[ \t]/.test($))return N$($,Z);let Q=Z.indent||(j6($)?" ":""),z="'"+$.replace(/'/g,"''").replace(/\n+/g,`$&
|
|
17
|
-
${Q}`)+"'";return Z.implicitKey?z:i0.foldFlowLines(z,Q,i0.FOLD_FLOW,C6(Z,!1))}function f2($,Z){let{singleQuote:Q}=Z.options,z;if(Q===!1)z=N$;else{let X=$.includes('"'),H=$.includes("'");if(X&&!H)z=
|
|
17
|
+
${Q}`)+"'";return Z.implicitKey?z:i0.foldFlowLines(z,Q,i0.FOLD_FLOW,C6(Z,!1))}function f2($,Z){let{singleQuote:Q}=Z.options,z;if(Q===!1)z=N$;else{let X=$.includes('"'),H=$.includes("'");if(X&&!H)z=B5;else if(H&&!X)z=N$;else z=Q?B5:N$}return z($,Z)}var q5;try{q5=new RegExp(`(^|(?<!
|
|
18
18
|
))
|
|
19
19
|
+(?!
|
|
20
|
-
|$)`,"g")}catch{
|
|
20
|
+
|$)`,"g")}catch{q5=/\n+(?!\n|$)/g}function A6({comment:$,type:Z,value:Q},z,X,H){let{blockQuote:U,commentString:J,lineWidth:G}=z.options;if(!U||/\n[\t ]+$/.test(Q))return f2(Q,z);let V=z.indent||(z.forceBlockIndent||j6(Q)?" ":""),Y=U==="literal"?!0:U==="folded"||Z===K0.Scalar.BLOCK_FOLDED?!1:Z===K0.Scalar.BLOCK_LITERAL?!0:!MH(Q,G,V.length);if(!Q)return Y?`|
|
|
21
21
|
`:`>
|
|
22
|
-
`;let W,B;for(B=Q.length;B>0;--B){let
|
|
23
|
-
`&&
|
|
22
|
+
`;let W,B;for(B=Q.length;B>0;--B){let N=Q[B-1];if(N!==`
|
|
23
|
+
`&&N!=="\t"&&N!==" ")break}let K=Q.substring(B),L=K.indexOf(`
|
|
24
24
|
`);if(L===-1)W="-";else if(Q===K||L!==K.length-1){if(W="+",H)H()}else W="";if(K){if(Q=Q.slice(0,-K.length),K[K.length-1]===`
|
|
25
|
-
`)K=K.slice(0,-1);K=K.replace(
|
|
26
|
-
`)O=D;else break}let _=Q.substring(0,O<D?O+1:D);if(_)Q=Q.substring(_.length),_=_.replace(/\n+/g,`$&${V}`);let F=(q?V?"2":"1":"")+W;if($){if(F+=" "+J($.replace(/ ?[\r\n]+/g," ")),X)X()}if(!Y){let
|
|
27
|
-
$&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${V}`),
|
|
25
|
+
`)K=K.slice(0,-1);K=K.replace(q5,`$&${V}`)}let q=!1,D,O=-1;for(D=0;D<Q.length;++D){let N=Q[D];if(N===" ")q=!0;else if(N===`
|
|
26
|
+
`)O=D;else break}let _=Q.substring(0,O<D?O+1:D);if(_)Q=Q.substring(_.length),_=_.replace(/\n+/g,`$&${V}`);let F=(q?V?"2":"1":"")+W;if($){if(F+=" "+J($.replace(/ ?[\r\n]+/g," ")),X)X()}if(!Y){let N=Q.replace(/\n+/g,`
|
|
27
|
+
$&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${V}`),T=!1,w=C6(z,!0);if(U!=="folded"&&Z!==K0.Scalar.BLOCK_FOLDED)w.onOverflow=()=>{T=!0};let P=i0.foldFlowLines(`${_}${N}${K}`,V,i0.FOLD_BLOCK,w);if(!T)return`>${F}
|
|
28
28
|
${V}${P}`}return Q=Q.replace(/\n+/g,`$&${V}`),`|${F}
|
|
29
|
-
${V}${_}${Q}${K}`}function
|
|
29
|
+
${V}${_}${Q}${K}`}function PH($,Z,Q,z){let{type:X,value:H}=$,{actualString:U,implicitKey:J,indent:G,indentStep:V,inFlow:Y}=Z;if(J&&H.includes(`
|
|
30
30
|
`)||Y&&/[[\]{},]/.test(H))return f2(H,Z);if(/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(H))return J||Y||!H.includes(`
|
|
31
31
|
`)?f2(H,Z):A6($,Z,Q,z);if(!J&&!Y&&X!==K0.Scalar.PLAIN&&H.includes(`
|
|
32
32
|
`))return A6($,Z,Q,z);if(j6(H)){if(G==="")return Z.forceBlockIndent=!0,A6($,Z,Q,z);else if(J&&G===V)return f2(H,Z)}let W=H.replace(/\n+/g,`$&
|
|
33
|
-
${G}`);if(U){let B=(q)=>q.default&&q.tag!=="tag:yaml.org,2002:str"&&q.test?.test(W),{compat:K,tags:L}=Z.doc.schema;if(L.some(B)||K?.some(B))return f2(H,Z)}return J?W:i0.foldFlowLines(W,G,i0.FOLD_FLOW,C6(Z,!1))}function
|
|
34
|
-
${Z.indent}${J}`}
|
|
35
|
-
${J}:`}else if(D=`${D}:`,B)D+=C$.lineComment(D,Q.indent,V(B));let O,_,C;if(h0.isNode(Z))O=!!Z.spaceBefore,_=Z.commentBefore,C=Z.comment;else if(O=!1,_=null,C=null,Z&&typeof Z==="object")Z=U.createNode(Z);if(Q.implicitKey=!1,!K&&!B&&h0.isScalar(Z))Q.indentAtStart=D.length+1;if(q=!1,!Y&&G.length>=2&&!Q.inFlow&&!K&&h0.isSeq(Z)&&!Z.flow&&!Z.tag&&!Z.anchor)Q.indent=Q.indent.substring(2);let F=!1,
|
|
36
|
-
`:"",_){let w=V(_);
|
|
37
|
-
${C$.indentComment(w,Q.indent)}`}if(
|
|
38
|
-
`&&C)
|
|
33
|
+
${G}`);if(U){let B=(q)=>q.default&&q.tag!=="tag:yaml.org,2002:str"&&q.test?.test(W),{compat:K,tags:L}=Z.doc.schema;if(L.some(B)||K?.some(B))return f2(H,Z)}return J?W:i0.foldFlowLines(W,G,i0.FOLD_FLOW,C6(Z,!1))}function FH($,Z,Q,z){let{implicitKey:X,inFlow:H}=Z,U=typeof $.value==="string"?$:Object.assign({},$,{value:String($.value)}),{type:J}=$;if(J!==K0.Scalar.QUOTE_DOUBLE){if(/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(U.value))J=K0.Scalar.QUOTE_DOUBLE}let G=(Y)=>{switch(Y){case K0.Scalar.BLOCK_FOLDED:case K0.Scalar.BLOCK_LITERAL:return X||H?f2(U.value,Z):A6(U,Z,Q,z);case K0.Scalar.QUOTE_DOUBLE:return N$(U.value,Z);case K0.Scalar.QUOTE_SINGLE:return B5(U.value,Z);case K0.Scalar.PLAIN:return PH(U,Z,Q,z);default:return null}},V=G(J);if(V===null){let{defaultKeyType:Y,defaultStringType:W}=Z.options,B=X&&Y||W;if(V=G(B),V===null)throw Error(`Unsupported default string type ${B}`)}return V}RH.stringifyString=FH});var A$=M((bH)=>{var TH=F6(),n0=x(),AH=R$(),CH=T$();function jH($,Z){let Q=Object.assign({blockQuote:!0,commentString:AH.stringifyComment,defaultKeyType:null,defaultStringType:"PLAIN",directives:null,doubleQuotedAsJSON:!1,doubleQuotedMinMultiLineLength:40,falseStr:"false",flowCollectionPadding:!0,indentSeq:!0,lineWidth:80,minContentWidth:20,nullStr:"null",simpleKeys:!1,singleQuote:null,trailingComma:!1,trueStr:"true",verifyAliasOrder:!0},$.schema.toStringOptions,Z),z;switch(Q.collectionStyle){case"block":z=!1;break;case"flow":z=!0;break;default:z=null}return{anchors:new Set,doc:$,flowCollectionPadding:Q.flowCollectionPadding?" ":"",indent:"",indentStep:typeof Q.indent==="number"?" ".repeat(Q.indent):" ",inFlow:z,options:Q}}function wH($,Z){if(Z.tag){let X=$.filter((H)=>H.tag===Z.tag);if(X.length>0)return X.find((H)=>H.format===Z.format)??X[0]}let Q=void 0,z;if(n0.isScalar(Z)){z=Z.value;let X=$.filter((H)=>H.identify?.(z));if(X.length>1){let H=X.filter((U)=>U.test);if(H.length>0)X=H}Q=X.find((H)=>H.format===Z.format)??X.find((H)=>!H.format)}else z=Z,Q=$.find((X)=>X.nodeClass&&z instanceof X.nodeClass);if(!Q){let X=z?.constructor?.name??(z===null?"null":typeof z);throw Error(`Tag not resolved for ${X} value`)}return Q}function SH($,Z,{anchors:Q,doc:z}){if(!z.directives)return"";let X=[],H=(n0.isScalar($)||n0.isCollection($))&&$.anchor;if(H&&TH.anchorIsValid(H))Q.add(H),X.push(`&${H}`);let U=$.tag??(Z.default?null:Z.tag);if(U)X.push(z.directives.tagString(U));return X.join(" ")}function EH($,Z,Q,z){if(n0.isPair($))return $.toString(Z,Q,z);if(n0.isAlias($)){if(Z.doc.directives)return $.toString(Z);if(Z.resolvedAliases?.has($))throw TypeError("Cannot stringify circular structure without alias nodes");else{if(Z.resolvedAliases)Z.resolvedAliases.add($);else Z.resolvedAliases=new Set([$]);$=$.resolve(Z.doc)}}let X=void 0,H=n0.isNode($)?$:Z.doc.createNode($,{onTagObj:(G)=>X=G});X??(X=wH(Z.doc.schema.tags,H));let U=SH(H,X,Z);if(U.length>0)Z.indentAtStart=(Z.indentAtStart??0)+U.length+1;let J=typeof X.stringify==="function"?X.stringify(H,Z,Q,z):n0.isScalar(H)?CH.stringifyString(H,Z,Q,z):H.toString(Z,Q,z);if(!U)return J;return n0.isScalar(H)||J[0]==="{"||J[0]==="["?`${U} ${J}`:`${U}
|
|
34
|
+
${Z.indent}${J}`}bH.createStringifyContext=jH;bH.stringify=EH});var K4=M((vH)=>{var h0=x(),B4=d(),q4=A$(),C$=R$();function gH({key:$,value:Z},Q,z,X){let{allNullValues:H,doc:U,indent:J,indentStep:G,options:{commentString:V,indentSeq:Y,simpleKeys:W}}=Q,B=h0.isNode($)&&$.comment||null;if(W){if(B)throw Error("With simple keys, key nodes cannot have comments");if(h0.isCollection($)||!h0.isNode($)&&typeof $==="object")throw Error("With simple keys, collection cannot be used as a key value")}let K=!W&&(!$||B&&Z==null&&!Q.inFlow||h0.isCollection($)||(h0.isScalar($)?$.type===B4.Scalar.BLOCK_FOLDED||$.type===B4.Scalar.BLOCK_LITERAL:typeof $==="object"));Q=Object.assign({},Q,{allNullValues:!1,implicitKey:!K&&(W||!H),indent:J+G});let L=!1,q=!1,D=q4.stringify($,Q,()=>L=!0,()=>q=!0);if(!K&&!Q.inFlow&&D.length>1024){if(W)throw Error("With simple keys, single line scalar must not span more than 1024 characters");K=!0}if(Q.inFlow){if(H||Z==null){if(L&&z)z();return D===""?"?":K?`? ${D}`:D}}else if(H&&!W||Z==null&&K){if(D=`? ${D}`,B&&!L)D+=C$.lineComment(D,Q.indent,V(B));else if(q&&X)X();return D}if(L)B=null;if(K){if(B)D+=C$.lineComment(D,Q.indent,V(B));D=`? ${D}
|
|
35
|
+
${J}:`}else if(D=`${D}:`,B)D+=C$.lineComment(D,Q.indent,V(B));let O,_,C;if(h0.isNode(Z))O=!!Z.spaceBefore,_=Z.commentBefore,C=Z.comment;else if(O=!1,_=null,C=null,Z&&typeof Z==="object")Z=U.createNode(Z);if(Q.implicitKey=!1,!K&&!B&&h0.isScalar(Z))Q.indentAtStart=D.length+1;if(q=!1,!Y&&G.length>=2&&!Q.inFlow&&!K&&h0.isSeq(Z)&&!Z.flow&&!Z.tag&&!Z.anchor)Q.indent=Q.indent.substring(2);let F=!1,N=q4.stringify(Z,Q,()=>F=!0,()=>q=!0),T=" ";if(B||O||_){if(T=O?`
|
|
36
|
+
`:"",_){let w=V(_);T+=`
|
|
37
|
+
${C$.indentComment(w,Q.indent)}`}if(N===""&&!Q.inFlow){if(T===`
|
|
38
|
+
`&&C)T=`
|
|
39
39
|
|
|
40
|
-
`}else
|
|
41
|
-
${Q.indent}`}else if(!K&&h0.isCollection(Z)){let w=
|
|
42
|
-
`),E=P!==-1,n=Q.inFlow??Z.flow??Z.items.length===0;if(E||!n){let a=!1;if(E&&(w==="&"||w==="!")){let g=
|
|
43
|
-
${Q.indent}`}}else if(
|
|
44
|
-
`)
|
|
40
|
+
`}else T+=`
|
|
41
|
+
${Q.indent}`}else if(!K&&h0.isCollection(Z)){let w=N[0],P=N.indexOf(`
|
|
42
|
+
`),E=P!==-1,n=Q.inFlow??Z.flow??Z.items.length===0;if(E||!n){let a=!1;if(E&&(w==="&"||w==="!")){let g=N.indexOf(" ");if(w==="&"&&g!==-1&&g<P&&N[g+1]==="!")g=N.indexOf(" ",g+1);if(g===-1||P<g)a=!0}if(!a)T=`
|
|
43
|
+
${Q.indent}`}}else if(N===""||N[0]===`
|
|
44
|
+
`)T="";if(D+=T+N,Q.inFlow){if(F&&z)z()}else if(C&&!F)D+=C$.lineComment(D,Q.indent,V(C));else if(q&&X)X();return D}vH.stringifyPair=gH});var K5=M((fH)=>{var D4=K$("process");function hH($,...Z){if($==="debug")console.log(...Z)}function uH($,Z){if($==="debug"||$==="warn")if(typeof D4.emitWarning==="function")D4.emitWarning(Z);else console.warn(Z)}fH.debug=hH;fH.warn=uH});var b6=M((cH)=>{var E6=x(),L4=d(),w6="<<",S6={identify:($)=>$===w6||typeof $==="symbol"&&$.description===w6,default:"key",tag:"tag:yaml.org,2002:merge",test:/^<<$/,resolve:()=>Object.assign(new L4.Scalar(Symbol(w6)),{addToJSMap:I4}),stringify:()=>w6},lH=($,Z)=>(S6.identify(Z)||E6.isScalar(Z)&&(!Z.type||Z.type===L4.Scalar.PLAIN)&&S6.identify(Z.value))&&$?.doc.schema.tags.some((Q)=>Q.tag===S6.tag&&Q.default);function I4($,Z,Q){let z=O4($,Q);if(E6.isSeq(z))for(let X of z.items)D5($,Z,X);else if(Array.isArray(z))for(let X of z)D5($,Z,X);else D5($,Z,z)}function D5($,Z,Q){let z=O4($,Q);if(!E6.isMap(z))throw Error("Merge sources must be maps or map aliases");let X=z.toJSON(null,$,Map);for(let[H,U]of X)if(Z instanceof Map){if(!Z.has(H))Z.set(H,U)}else if(Z instanceof Set)Z.add(H);else if(!Object.prototype.hasOwnProperty.call(Z,H))Object.defineProperty(Z,H,{value:U,writable:!0,enumerable:!0,configurable:!0});return Z}function O4($,Z){return $&&E6.isAlias(Z)?Z.resolve($.doc,$):Z}cH.addMergeToJSMap=I4;cH.isMergeKey=lH;cH.merge=S6});var I5=M((tH)=>{var rH=K5(),_4=b6(),sH=A$(),M4=x(),L5=d0();function oH($,Z,{key:Q,value:z}){if(M4.isNode(Q)&&Q.addToJSMap)Q.addToJSMap($,Z,z);else if(_4.isMergeKey($,Q))_4.addMergeToJSMap($,Z,z);else{let X=L5.toJS(Q,"",$);if(Z instanceof Map)Z.set(X,L5.toJS(z,X,$));else if(Z instanceof Set)Z.add(X);else{let H=aH(Q,X,$),U=L5.toJS(z,H,$);if(H in Z)Object.defineProperty(Z,H,{value:U,writable:!0,enumerable:!0,configurable:!0});else Z[H]=U}}return Z}function aH($,Z,Q){if(Z===null)return"";if(typeof Z!=="object")return String(Z);if(M4.isNode($)&&Q?.doc){let z=sH.createStringifyContext(Q.doc,{});z.anchors=new Set;for(let H of Q.anchors.keys())z.anchors.add(H.anchor);z.inFlow=!0,z.inStringifyKey=!0;let X=$.toString(z);if(!Q.mapKeyWarned){let H=JSON.stringify(X);if(H.length>40)H=H.substring(0,36)+'..."';rH.warn(Q.doc.options.logLevel,`Keys with collection values will be stringified due to JS Object restrictions: ${H}. Set mapAsMap: true to use object keys.`),Q.mapKeyWarned=!0}return X}return JSON.stringify(Z)}tH.addPairToJSMap=oH});var r0=M((zU)=>{var P4=F$(),$U=K4(),ZU=I5(),y6=x();function QU($,Z,Q){let z=P4.createNode($,void 0,Q),X=P4.createNode(Z,void 0,Q);return new x6(z,X)}class x6{constructor($,Z=null){Object.defineProperty(this,y6.NODE_TYPE,{value:y6.PAIR}),this.key=$,this.value=Z}clone($){let{key:Z,value:Q}=this;if(y6.isNode(Z))Z=Z.clone($);if(y6.isNode(Q))Q=Q.clone($);return new x6(Z,Q)}toJSON($,Z){let Q=Z?.mapAsMap?new Map:{};return ZU.addPairToJSMap(Z,Q,this)}toString($,Z,Q){return $?.doc?$U.stringifyPair(this,$,Z,Q):JSON.stringify(this)}}zU.Pair=x6;zU.createPair=QU});var O5=M((VU)=>{var J2=x(),F4=A$(),g6=R$();function UU($,Z,Q){return(Z.inFlow??$.flow?GU:JU)($,Z,Q)}function JU({comment:$,items:Z},Q,{blockItemPrefix:z,flowChars:X,itemIndent:H,onChompKeep:U,onComment:J}){let{indent:G,options:{commentString:V}}=Q,Y=Object.assign({},Q,{indent:H,type:null}),W=!1,B=[];for(let L=0;L<Z.length;++L){let q=Z[L],D=null;if(J2.isNode(q)){if(!W&&q.spaceBefore)B.push("");if(v6(Q,B,q.commentBefore,W),q.comment)D=q.comment}else if(J2.isPair(q)){let _=J2.isNode(q.key)?q.key:null;if(_){if(!W&&_.spaceBefore)B.push("");v6(Q,B,_.commentBefore,W)}}W=!1;let O=F4.stringify(q,Y,()=>D=null,()=>W=!0);if(D)O+=g6.lineComment(O,H,V(D));if(W&&D)W=!1;B.push(z+O)}let K;if(B.length===0)K=X.start+X.end;else{K=B[0];for(let L=1;L<B.length;++L){let q=B[L];K+=q?`
|
|
45
45
|
${G}${q}`:`
|
|
46
46
|
`}}if($){if(K+=`
|
|
47
|
-
`+g6.indentComment(V($),G),J)J()}else if(W&&U)U();return K}function
|
|
47
|
+
`+g6.indentComment(V($),G),J)J()}else if(W&&U)U();return K}function GU({items:$},Z,{flowChars:Q,itemIndent:z}){let{indent:X,indentStep:H,flowCollectionPadding:U,options:{commentString:J}}=Z;z+=H;let G=Object.assign({},Z,{indent:z,inFlow:!0,type:null}),V=!1,Y=0,W=[];for(let L=0;L<$.length;++L){let q=$[L],D=null;if(J2.isNode(q)){if(q.spaceBefore)W.push("");if(v6(Z,W,q.commentBefore,!1),q.comment)D=q.comment}else if(J2.isPair(q)){let _=J2.isNode(q.key)?q.key:null;if(_){if(_.spaceBefore)W.push("");if(v6(Z,W,_.commentBefore,!1),_.comment)V=!0}let C=J2.isNode(q.value)?q.value:null;if(C){if(C.comment)D=C.comment;if(C.commentBefore)V=!0}else if(q.value==null&&_?.comment)D=_.comment}if(D)V=!0;let O=F4.stringify(q,G,()=>D=null);if(V||(V=W.length>Y||O.includes(`
|
|
48
48
|
`)),L<$.length-1)O+=",";else if(Z.options.trailingComma){if(Z.options.lineWidth>0)V||(V=W.reduce((_,C)=>_+C.length+2,2)+(O.length+2)>Z.options.lineWidth);if(V)O+=","}if(D)O+=g6.lineComment(O,z,J(D));W.push(O),Y=W.length}let{start:B,end:K}=Q;if(W.length===0)return B+K;else{if(!V){let L=W.reduce((q,D)=>q+D.length+2,2);V=Z.options.lineWidth>0&&L>Z.options.lineWidth}if(V){let L=B;for(let q of W)L+=q?`
|
|
49
49
|
${H}${X}${q}`:`
|
|
50
50
|
`;return`${L}
|
|
51
|
-
${X}${K}`}else return`${B}${U}${W.join(" ")}${U}${K}`}}function v6({indent:$,options:{commentString:Z}},Q,z,X){if(z&&X)z=z.replace(/^\n+/,"");if(z){let H=g6.indentComment(Z(z),$);Q.push(H.trimStart())}}
|
|
52
|
-
`:" ")}return
|
|
51
|
+
${X}${K}`}else return`${B}${U}${W.join(" ")}${U}${K}`}}function v6({indent:$,options:{commentString:Z}},Q,z,X){if(z&&X)z=z.replace(/^\n+/,"");if(z){let H=g6.indentComment(Z(z),$);Q.push(H.trimStart())}}VU.stringifyCollection=UU});var o0=M((DU)=>{var WU=O5(),BU=I5(),qU=T6(),s0=x(),k6=r0(),KU=d();function j$($,Z){let Q=s0.isScalar(Z)?Z.value:Z;for(let z of $)if(s0.isPair(z)){if(z.key===Z||z.key===Q)return z;if(s0.isScalar(z.key)&&z.key.value===Q)return z}return}class R4 extends qU.Collection{static get tagName(){return"tag:yaml.org,2002:map"}constructor($){super(s0.MAP,$);this.items=[]}static from($,Z,Q){let{keepUndefined:z,replacer:X}=Q,H=new this($),U=(J,G)=>{if(typeof X==="function")G=X.call(Z,J,G);else if(Array.isArray(X)&&!X.includes(J))return;if(G!==void 0||z)H.items.push(k6.createPair(J,G,Q))};if(Z instanceof Map)for(let[J,G]of Z)U(J,G);else if(Z&&typeof Z==="object")for(let J of Object.keys(Z))U(J,Z[J]);if(typeof $.sortMapEntries==="function")H.items.sort($.sortMapEntries);return H}add($,Z){let Q;if(s0.isPair($))Q=$;else if(!$||typeof $!=="object"||!("key"in $))Q=new k6.Pair($,$?.value);else Q=new k6.Pair($.key,$.value);let z=j$(this.items,Q.key),X=this.schema?.sortMapEntries;if(z){if(!Z)throw Error(`Key ${Q.key} already set`);if(s0.isScalar(z.value)&&KU.isScalarValue(Q.value))z.value.value=Q.value;else z.value=Q.value}else if(X){let H=this.items.findIndex((U)=>X(Q,U)<0);if(H===-1)this.items.push(Q);else this.items.splice(H,0,Q)}else this.items.push(Q)}delete($){let Z=j$(this.items,$);if(!Z)return!1;return this.items.splice(this.items.indexOf(Z),1).length>0}get($,Z){let z=j$(this.items,$)?.value;return(!Z&&s0.isScalar(z)?z.value:z)??void 0}has($){return!!j$(this.items,$)}set($,Z){this.add(new k6.Pair($,Z),!0)}toJSON($,Z,Q){let z=Q?new Q:Z?.mapAsMap?new Map:{};if(Z?.onCreate)Z.onCreate(z);for(let X of this.items)BU.addPairToJSMap(Z,z,X);return z}toString($,Z,Q){if(!$)return JSON.stringify(this);for(let z of this.items)if(!s0.isPair(z))throw Error(`Map items must all be pairs; found ${JSON.stringify(z)} instead`);if(!$.allNullValues&&this.hasAllNullValues(!1))$=Object.assign({},$,{allNullValues:!0});return WU.stringifyCollection(this,$,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:$.indent||"",onChompKeep:Q,onComment:Z})}}DU.YAMLMap=R4;DU.findPair=j$});var m2=M((MU)=>{var OU=x(),N4=o0(),_U={collection:"map",default:!0,nodeClass:N4.YAMLMap,tag:"tag:yaml.org,2002:map",resolve($,Z){if(!OU.isMap($))Z("Expected a mapping for this tag");return $},createNode:($,Z,Q)=>N4.YAMLMap.from($,Z,Q)};MU.map=_U});var a0=M((CU)=>{var FU=F$(),RU=O5(),NU=T6(),u6=x(),TU=d(),AU=d0();class T4 extends NU.Collection{static get tagName(){return"tag:yaml.org,2002:seq"}constructor($){super(u6.SEQ,$);this.items=[]}add($){this.items.push($)}delete($){let Z=h6($);if(typeof Z!=="number")return!1;return this.items.splice(Z,1).length>0}get($,Z){let Q=h6($);if(typeof Q!=="number")return;let z=this.items[Q];return!Z&&u6.isScalar(z)?z.value:z}has($){let Z=h6($);return typeof Z==="number"&&Z<this.items.length}set($,Z){let Q=h6($);if(typeof Q!=="number")throw Error(`Expected a valid index, not ${$}.`);let z=this.items[Q];if(u6.isScalar(z)&&TU.isScalarValue(Z))z.value=Z;else this.items[Q]=Z}toJSON($,Z){let Q=[];if(Z?.onCreate)Z.onCreate(Q);let z=0;for(let X of this.items)Q.push(AU.toJS(X,String(z++),Z));return Q}toString($,Z,Q){if(!$)return JSON.stringify(this);return RU.stringifyCollection(this,$,{blockItemPrefix:"- ",flowChars:{start:"[",end:"]"},itemIndent:($.indent||"")+" ",onChompKeep:Q,onComment:Z})}static from($,Z,Q){let{replacer:z}=Q,X=new this($);if(Z&&Symbol.iterator in Object(Z)){let H=0;for(let U of Z){if(typeof z==="function"){let J=Z instanceof Set?U:String(H++);U=z.call(Z,J,U)}X.items.push(FU.createNode(U,void 0,Q))}}return X}}function h6($){let Z=u6.isScalar($)?$.value:$;if(Z&&typeof Z==="string")Z=Number(Z);return typeof Z==="number"&&Number.isInteger(Z)&&Z>=0?Z:null}CU.YAMLSeq=T4});var p2=M((EU)=>{var wU=x(),A4=a0(),SU={collection:"seq",default:!0,nodeClass:A4.YAMLSeq,tag:"tag:yaml.org,2002:seq",resolve($,Z){if(!wU.isSeq($))Z("Expected a sequence for this tag");return $},createNode:($,Z,Q)=>A4.YAMLSeq.from($,Z,Q)};EU.seq=SU});var w$=M((gU)=>{var yU=T$(),xU={identify:($)=>typeof $==="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:($)=>$,stringify($,Z,Q,z){return Z=Object.assign({actualString:!0},Z),yU.stringifyString($,Z,Q,z)}};gU.string=xU});var f6=M((kU)=>{var C4=d(),j4={identify:($)=>$==null,createNode:()=>new C4.Scalar(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new C4.Scalar(null),stringify:({source:$},Z)=>typeof $==="string"&&j4.test.test($)?$:Z.options.nullStr};kU.nullTag=j4});var _5=M((fU)=>{var uU=d(),w4={identify:($)=>typeof $==="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:($)=>new uU.Scalar($[0]==="t"||$[0]==="T"),stringify({source:$,value:Z},Q){if($&&w4.test.test($)){let z=$[0]==="t"||$[0]==="T";if(Z===z)return $}return Z?Q.options.trueStr:Q.options.falseStr}};fU.boolTag=w4});var l2=M((lU)=>{function pU({format:$,minFractionDigits:Z,tag:Q,value:z}){if(typeof z==="bigint")return String(z);let X=typeof z==="number"?z:Number(z);if(!isFinite(X))return isNaN(X)?".nan":X<0?"-.inf":".inf";let H=Object.is(z,-0)?"-0":JSON.stringify(z);if(!$&&Z&&(!Q||Q==="tag:yaml.org,2002:float")&&/^-?\d/.test(H)&&!H.includes("e")){let U=H.indexOf(".");if(U<0)U=H.length,H+=".";let J=Z-(H.length-U-1);while(J-- >0)H+="0"}return H}lU.stringifyNumber=pU});var P5=M((sU)=>{var dU=d(),M5=l2(),iU={identify:($)=>typeof $==="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:($)=>$.slice(-3).toLowerCase()==="nan"?NaN:$[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:M5.stringifyNumber},nU={identify:($)=>typeof $==="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:($)=>parseFloat($),stringify($){let Z=Number($.value);return isFinite(Z)?Z.toExponential():M5.stringifyNumber($)}},rU={identify:($)=>typeof $==="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,resolve($){let Z=new dU.Scalar(parseFloat($)),Q=$.indexOf(".");if(Q!==-1&&$[$.length-1]==="0")Z.minFractionDigits=$.length-Q-1;return Z},stringify:M5.stringifyNumber};sU.float=rU;sU.floatExp=nU;sU.floatNaN=iU});var R5=M((QJ)=>{var S4=l2(),m6=($)=>typeof $==="bigint"||Number.isInteger($),F5=($,Z,Q,{intAsBigInt:z})=>z?BigInt($):parseInt($.substring(Z),Q);function E4($,Z,Q){let{value:z}=$;if(m6(z)&&z>=0)return Q+z.toString(Z);return S4.stringifyNumber($)}var eU={identify:($)=>m6($)&&$>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:($,Z,Q)=>F5($,2,8,Q),stringify:($)=>E4($,8,"0o")},$J={identify:m6,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:($,Z,Q)=>F5($,0,10,Q),stringify:S4.stringifyNumber},ZJ={identify:($)=>m6($)&&$>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:($,Z,Q)=>F5($,2,16,Q),stringify:($)=>E4($,16,"0x")};QJ.int=$J;QJ.intHex=ZJ;QJ.intOct=eU});var b4=M((BJ)=>{var UJ=m2(),JJ=f6(),GJ=p2(),VJ=w$(),YJ=_5(),N5=P5(),T5=R5(),WJ=[UJ.map,GJ.seq,VJ.string,JJ.nullTag,YJ.boolTag,T5.intOct,T5.int,T5.intHex,N5.floatNaN,N5.floatExp,N5.float];BJ.schema=WJ});var x4=M((MJ)=>{var KJ=d(),DJ=m2(),LJ=p2();function y4($){return typeof $==="bigint"||Number.isInteger($)}var p6=({value:$})=>JSON.stringify($),IJ=[{identify:($)=>typeof $==="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:($)=>$,stringify:p6},{identify:($)=>$==null,createNode:()=>new KJ.Scalar(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:p6},{identify:($)=>typeof $==="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^true$|^false$/,resolve:($)=>$==="true",stringify:p6},{identify:y4,default:!0,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:($,Z,{intAsBigInt:Q})=>Q?BigInt($):parseInt($,10),stringify:({value:$})=>y4($)?$.toString():JSON.stringify($)},{identify:($)=>typeof $==="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:($)=>parseFloat($),stringify:p6}],OJ={default:!0,tag:"",test:/^/,resolve($,Z){return Z(`Unresolved plain scalar ${JSON.stringify($)}`),$}},_J=[DJ.map,LJ.seq].concat(IJ,OJ);MJ.schema=_J});var C5=M((NJ)=>{var S$=K$("buffer"),A5=d(),FJ=T$(),RJ={identify:($)=>$ instanceof Uint8Array,default:!1,tag:"tag:yaml.org,2002:binary",resolve($,Z){if(typeof S$.Buffer==="function")return S$.Buffer.from($,"base64");else if(typeof atob==="function"){let Q=atob($.replace(/[\n\r]/g,"")),z=new Uint8Array(Q.length);for(let X=0;X<Q.length;++X)z[X]=Q.charCodeAt(X);return z}else return Z("This environment does not support reading binary tags; either Buffer or atob is required"),$},stringify({comment:$,type:Z,value:Q},z,X,H){if(!Q)return"";let U=Q,J;if(typeof S$.Buffer==="function")J=U instanceof S$.Buffer?U.toString("base64"):S$.Buffer.from(U.buffer).toString("base64");else if(typeof btoa==="function"){let G="";for(let V=0;V<U.length;++V)G+=String.fromCharCode(U[V]);J=btoa(G)}else throw Error("This environment does not support writing binary tags; either Buffer or btoa is required");if(Z??(Z=A5.Scalar.BLOCK_LITERAL),Z!==A5.Scalar.QUOTE_DOUBLE){let G=Math.max(z.options.lineWidth-z.indent.length,z.options.minContentWidth),V=Math.ceil(J.length/G),Y=Array(V);for(let W=0,B=0;W<V;++W,B+=G)Y[W]=J.substr(B,G);J=Y.join(Z===A5.Scalar.BLOCK_LITERAL?`
|
|
52
|
+
`:" ")}return FJ.stringifyString({comment:$,type:Z,value:J},z,X,H)}};NJ.binary=RJ});var c6=M((wJ)=>{var l6=x(),j5=r0(),AJ=d(),CJ=a0();function g4($,Z){if(l6.isSeq($))for(let Q=0;Q<$.items.length;++Q){let z=$.items[Q];if(l6.isPair(z))continue;else if(l6.isMap(z)){if(z.items.length>1)Z("Each pair must have its own sequence indicator");let X=z.items[0]||new j5.Pair(new AJ.Scalar(null));if(z.commentBefore)X.key.commentBefore=X.key.commentBefore?`${z.commentBefore}
|
|
53
53
|
${X.key.commentBefore}`:z.commentBefore;if(z.comment){let H=X.value??X.key;H.comment=H.comment?`${z.comment}
|
|
54
|
-
${H.comment}`:z.comment}z=X}$.items[Q]=l6.isPair(z)?z:new C5.Pair(z)}else Z("Expected a sequence for this tag");return $}function g4($,Z,Q){let{replacer:z}=Q,X=new TJ.YAMLSeq($);X.tag="tag:yaml.org,2002:pairs";let H=0;if(Z&&Symbol.iterator in Object(Z))for(let U of Z){if(typeof z==="function")U=z.call(Z,String(H++),U);let J,G;if(Array.isArray(U))if(U.length===2)J=U[0],G=U[1];else throw TypeError(`Expected [key, value] tuple: ${U}`);else if(U&&U instanceof Object){let V=Object.keys(U);if(V.length===1)J=V[0],G=U[J];else throw TypeError(`Expected tuple with one key, not ${V.length} keys`)}else J=U;X.items.push(C5.createPair(J,G,Q))}return X}var AJ={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:x4,createNode:g4};CJ.createPairs=g4;CJ.pairs=AJ;CJ.resolvePairs=x4});var w5=M((yJ)=>{var v4=x(),j5=d0(),E$=o0(),EJ=a0(),k4=c6();class G2 extends EJ.YAMLSeq{constructor(){super();this.add=E$.YAMLMap.prototype.add.bind(this),this.delete=E$.YAMLMap.prototype.delete.bind(this),this.get=E$.YAMLMap.prototype.get.bind(this),this.has=E$.YAMLMap.prototype.has.bind(this),this.set=E$.YAMLMap.prototype.set.bind(this),this.tag=G2.tag}toJSON($,Z){if(!Z)return super.toJSON($);let Q=new Map;if(Z?.onCreate)Z.onCreate(Q);for(let z of this.items){let X,H;if(v4.isPair(z))X=j5.toJS(z.key,"",Z),H=j5.toJS(z.value,X,Z);else X=j5.toJS(z,"",Z);if(Q.has(X))throw Error("Ordered maps must not include duplicate keys");Q.set(X,H)}return Q}static from($,Z,Q){let z=k4.createPairs($,Z,Q),X=new this;return X.items=z.items,X}}G2.tag="tag:yaml.org,2002:omap";var bJ={collection:"seq",identify:($)=>$ instanceof Map,nodeClass:G2,default:!1,tag:"tag:yaml.org,2002:omap",resolve($,Z){let Q=k4.resolvePairs($,Z),z=[];for(let{key:X}of Q.items)if(v4.isScalar(X))if(z.includes(X.value))Z(`Ordered maps must not include duplicate keys: ${X.value}`);else z.push(X.value);return Object.assign(new G2,Q)},createNode:($,Z,Q)=>G2.from($,Z,Q)};yJ.YAMLOMap=G2;yJ.omap=bJ});var p4=M((vJ)=>{var h4=d();function u4({value:$,source:Z},Q){if(Z&&($?f4:m4).test.test(Z))return Z;return $?Q.options.trueStr:Q.options.falseStr}var f4={identify:($)=>$===!0,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:()=>new h4.Scalar(!0),stringify:u4},m4={identify:($)=>$===!1,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:()=>new h4.Scalar(!1),stringify:u4};vJ.falseTag=m4;vJ.trueTag=f4});var l4=M((lJ)=>{var uJ=d(),S5=l2(),fJ={identify:($)=>typeof $==="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:($)=>$.slice(-3).toLowerCase()==="nan"?NaN:$[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:S5.stringifyNumber},mJ={identify:($)=>typeof $==="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:($)=>parseFloat($.replace(/_/g,"")),stringify($){let Z=Number($.value);return isFinite(Z)?Z.toExponential():S5.stringifyNumber($)}},pJ={identify:($)=>typeof $==="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve($){let Z=new uJ.Scalar(parseFloat($.replace(/_/g,""))),Q=$.indexOf(".");if(Q!==-1){let z=$.substring(Q+1).replace(/_/g,"");if(z[z.length-1]==="0")Z.minFractionDigits=z.length}return Z},stringify:S5.stringifyNumber};lJ.float=pJ;lJ.floatExp=mJ;lJ.floatNaN=fJ});var d4=M((aJ)=>{var c4=l2(),b$=($)=>typeof $==="bigint"||Number.isInteger($);function d6($,Z,Q,{intAsBigInt:z}){let X=$[0];if(X==="-"||X==="+")Z+=1;if($=$.substring(Z).replace(/_/g,""),z){switch(Q){case 2:$=`0b${$}`;break;case 8:$=`0o${$}`;break;case 16:$=`0x${$}`;break}let U=BigInt($);return X==="-"?BigInt(-1)*U:U}let H=parseInt($,Q);return X==="-"?-1*H:H}function E5($,Z,Q){let{value:z}=$;if(b$(z)){let X=z.toString(Z);return z<0?"-"+Q+X.substr(1):Q+X}return c4.stringifyNumber($)}var nJ={identify:b$,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:($,Z,Q)=>d6($,2,2,Q),stringify:($)=>E5($,2,"0b")},rJ={identify:b$,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:($,Z,Q)=>d6($,1,8,Q),stringify:($)=>E5($,8,"0")},sJ={identify:b$,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:($,Z,Q)=>d6($,0,10,Q),stringify:c4.stringifyNumber},oJ={identify:b$,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:($,Z,Q)=>d6($,2,16,Q),stringify:($)=>E5($,16,"0x")};aJ.int=sJ;aJ.intBin=nJ;aJ.intHex=oJ;aJ.intOct=rJ});var b5=M((zG)=>{var r6=x(),i6=r0(),n6=o0();class V2 extends n6.YAMLMap{constructor($){super($);this.tag=V2.tag}add($){let Z;if(r6.isPair($))Z=$;else if($&&typeof $==="object"&&"key"in $&&"value"in $&&$.value===null)Z=new i6.Pair($.key,null);else Z=new i6.Pair($,null);if(!n6.findPair(this.items,Z.key))this.items.push(Z)}get($,Z){let Q=n6.findPair(this.items,$);return!Z&&r6.isPair(Q)?r6.isScalar(Q.key)?Q.key.value:Q.key:Q}set($,Z){if(typeof Z!=="boolean")throw Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof Z}`);let Q=n6.findPair(this.items,$);if(Q&&!Z)this.items.splice(this.items.indexOf(Q),1);else if(!Q&&Z)this.items.push(new i6.Pair($))}toJSON($,Z){return super.toJSON($,Z,Set)}toString($,Z,Q){if(!$)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},$,{allNullValues:!0}),Z,Q);else throw Error("Set items must all have null values")}static from($,Z,Q){let{replacer:z}=Q,X=new this($);if(Z&&Symbol.iterator in Object(Z))for(let H of Z){if(typeof z==="function")H=z.call(Z,H,H);X.items.push(i6.createPair(H,null,Q))}return X}}V2.tag="tag:yaml.org,2002:set";var QG={collection:"map",identify:($)=>$ instanceof Set,nodeClass:V2,default:!1,tag:"tag:yaml.org,2002:set",createNode:($,Z,Q)=>V2.from($,Z,Q),resolve($,Z){if(r6.isMap($))if($.hasAllNullValues(!0))return Object.assign(new V2,$);else Z("Set items must all have null values");else Z("Expected a mapping for this tag");return $}};zG.YAMLSet=V2;zG.set=QG});var x5=M((VG)=>{var UG=l2();function y5($,Z){let Q=$[0],z=Q==="-"||Q==="+"?$.substring(1):$,X=(U)=>Z?BigInt(U):Number(U),H=z.replace(/_/g,"").split(":").reduce((U,J)=>U*X(60)+X(J),X(0));return Q==="-"?X(-1)*H:H}function i4($){let{value:Z}=$,Q=(U)=>U;if(typeof Z==="bigint")Q=(U)=>BigInt(U);else if(isNaN(Z)||!isFinite(Z))return UG.stringifyNumber($);let z="";if(Z<0)z="-",Z*=Q(-1);let X=Q(60),H=[Z%X];if(Z<60)H.unshift(0);else if(Z=(Z-H[0])/X,H.unshift(Z%X),Z>=60)Z=(Z-H[0])/X,H.unshift(Z);return z+H.map((U)=>String(U).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}var JG={identify:($)=>typeof $==="bigint"||Number.isInteger($),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:($,Z,{intAsBigInt:Q})=>y5($,Q),stringify:i4},GG={identify:($)=>typeof $==="number",default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:($)=>y5($,!1),stringify:i4},n4={identify:($)=>$ instanceof Date,default:!0,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve($){let Z=$.match(n4.test);if(!Z)throw Error("!!timestamp expects a date, starting with yyyy-mm-dd");let[,Q,z,X,H,U,J]=Z.map(Number),G=Z[7]?Number((Z[7]+"00").substr(1,3)):0,V=Date.UTC(Q,z-1,X,H||0,U||0,J||0,G),Y=Z[8];if(Y&&Y!=="Z"){let W=y5(Y,!1);if(Math.abs(W)<30)W*=60;V-=60000*W}return new Date(V)},stringify:({value:$})=>$?.toISOString().replace(/(T00:00:00)?\.000Z$/,"")??""};VG.floatTime=GG;VG.intTime=JG;VG.timestamp=n4});var s4=M((RG)=>{var qG=m2(),KG=f6(),DG=p2(),LG=w$(),IG=A5(),r4=p4(),g5=l4(),s6=d4(),OG=b6(),_G=w5(),MG=c6(),PG=b5(),v5=x5(),FG=[qG.map,DG.seq,LG.string,KG.nullTag,r4.trueTag,r4.falseTag,s6.intBin,s6.intOct,s6.int,s6.intHex,g5.floatNaN,g5.floatExp,g5.float,IG.binary,OG.merge,_G.omap,MG.pairs,PG.set,v5.intTime,v5.floatTime,v5.timestamp];RG.schema=FG});var H7=M((bG)=>{var e4=m2(),TG=f6(),$7=p2(),AG=w$(),CG=O5(),k5=M5(),h5=F5(),jG=E4(),wG=y4(),Z7=A5(),y$=b6(),Q7=w5(),z7=c6(),o4=s4(),X7=b5(),o6=x5(),a4=new Map([["core",jG.schema],["failsafe",[e4.map,$7.seq,AG.string]],["json",wG.schema],["yaml11",o4.schema],["yaml-1.1",o4.schema]]),t4={binary:Z7.binary,bool:CG.boolTag,float:k5.float,floatExp:k5.floatExp,floatNaN:k5.floatNaN,floatTime:o6.floatTime,int:h5.int,intHex:h5.intHex,intOct:h5.intOct,intTime:o6.intTime,map:e4.map,merge:y$.merge,null:TG.nullTag,omap:Q7.omap,pairs:z7.pairs,seq:$7.seq,set:X7.set,timestamp:o6.timestamp},SG={"tag:yaml.org,2002:binary":Z7.binary,"tag:yaml.org,2002:merge":y$.merge,"tag:yaml.org,2002:omap":Q7.omap,"tag:yaml.org,2002:pairs":z7.pairs,"tag:yaml.org,2002:set":X7.set,"tag:yaml.org,2002:timestamp":o6.timestamp};function EG($,Z,Q){let z=a4.get(Z);if(z&&!$)return Q&&!z.includes(y$.merge)?z.concat(y$.merge):z.slice();let X=z;if(!X)if(Array.isArray($))X=[];else{let H=Array.from(a4.keys()).filter((U)=>U!=="yaml11").map((U)=>JSON.stringify(U)).join(", ");throw Error(`Unknown schema "${Z}"; use one of ${H} or define customTags array`)}if(Array.isArray($))for(let H of $)X=X.concat(H);else if(typeof $==="function")X=$(X.slice());if(Q)X=X.concat(y$.merge);return X.reduce((H,U)=>{let J=typeof U==="string"?t4[U]:U;if(!J){let G=JSON.stringify(U),V=Object.keys(t4).map((Y)=>JSON.stringify(Y)).join(", ");throw Error(`Unknown custom tag ${G}; use one of ${V}`)}if(!H.includes(J))H.push(J);return H},[])}bG.coreKnownTags=SG;bG.getTags=EG});var m5=M((uG)=>{var u5=x(),gG=m2(),vG=p2(),kG=w$(),a6=H7(),hG=($,Z)=>$.key<Z.key?-1:$.key>Z.key?1:0;class f5{constructor({compat:$,customTags:Z,merge:Q,resolveKnownTags:z,schema:X,sortMapEntries:H,toStringDefaults:U}){this.compat=Array.isArray($)?a6.getTags($,"compat"):$?a6.getTags(null,$):null,this.name=typeof X==="string"&&X||"core",this.knownTags=z?a6.coreKnownTags:{},this.tags=a6.getTags(Z,this.name,Q),this.toStringOptions=U??null,Object.defineProperty(this,u5.MAP,{value:gG.map}),Object.defineProperty(this,u5.SCALAR,{value:kG.string}),Object.defineProperty(this,u5.SEQ,{value:vG.seq}),this.sortMapEntries=typeof H==="function"?H:H===!0?hG:null}clone(){let $=Object.create(f5.prototype,Object.getOwnPropertyDescriptors(this));return $.tags=this.tags.slice(),$}}uG.Schema=f5});var U7=M((lG)=>{var mG=x(),p5=A$(),x$=R$();function pG($,Z){let Q=[],z=Z.directives===!0;if(Z.directives!==!1&&$.directives){let G=$.directives.toString($);if(G)Q.push(G),z=!0;else if($.directives.docStart)z=!0}if(z)Q.push("---");let X=p5.createStringifyContext($,Z),{commentString:H}=X.options;if($.commentBefore){if(Q.length!==1)Q.unshift("");let G=H($.commentBefore);Q.unshift(x$.indentComment(G,""))}let U=!1,J=null;if($.contents){if(mG.isNode($.contents)){if($.contents.spaceBefore&&z)Q.push("");if($.contents.commentBefore){let Y=H($.contents.commentBefore);Q.push(x$.indentComment(Y,""))}X.forceBlockIndent=!!$.comment,J=$.contents.comment}let G=J?void 0:()=>U=!0,V=p5.stringify($.contents,X,()=>J=null,G);if(J)V+=x$.lineComment(V,"",H(J));if((V[0]==="|"||V[0]===">")&&Q[Q.length-1]==="---")Q[Q.length-1]=`--- ${V}`;else Q.push(V)}else Q.push(p5.stringify($.contents,X));if($.directives?.docEnd)if($.comment){let G=H($.comment);if(G.includes(`
|
|
54
|
+
${H.comment}`:z.comment}z=X}$.items[Q]=l6.isPair(z)?z:new j5.Pair(z)}else Z("Expected a sequence for this tag");return $}function v4($,Z,Q){let{replacer:z}=Q,X=new CJ.YAMLSeq($);X.tag="tag:yaml.org,2002:pairs";let H=0;if(Z&&Symbol.iterator in Object(Z))for(let U of Z){if(typeof z==="function")U=z.call(Z,String(H++),U);let J,G;if(Array.isArray(U))if(U.length===2)J=U[0],G=U[1];else throw TypeError(`Expected [key, value] tuple: ${U}`);else if(U&&U instanceof Object){let V=Object.keys(U);if(V.length===1)J=V[0],G=U[J];else throw TypeError(`Expected tuple with one key, not ${V.length} keys`)}else J=U;X.items.push(j5.createPair(J,G,Q))}return X}var jJ={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:g4,createNode:v4};wJ.createPairs=v4;wJ.pairs=jJ;wJ.resolvePairs=g4});var S5=M((gJ)=>{var k4=x(),w5=d0(),E$=o0(),yJ=a0(),h4=c6();class G2 extends yJ.YAMLSeq{constructor(){super();this.add=E$.YAMLMap.prototype.add.bind(this),this.delete=E$.YAMLMap.prototype.delete.bind(this),this.get=E$.YAMLMap.prototype.get.bind(this),this.has=E$.YAMLMap.prototype.has.bind(this),this.set=E$.YAMLMap.prototype.set.bind(this),this.tag=G2.tag}toJSON($,Z){if(!Z)return super.toJSON($);let Q=new Map;if(Z?.onCreate)Z.onCreate(Q);for(let z of this.items){let X,H;if(k4.isPair(z))X=w5.toJS(z.key,"",Z),H=w5.toJS(z.value,X,Z);else X=w5.toJS(z,"",Z);if(Q.has(X))throw Error("Ordered maps must not include duplicate keys");Q.set(X,H)}return Q}static from($,Z,Q){let z=h4.createPairs($,Z,Q),X=new this;return X.items=z.items,X}}G2.tag="tag:yaml.org,2002:omap";var xJ={collection:"seq",identify:($)=>$ instanceof Map,nodeClass:G2,default:!1,tag:"tag:yaml.org,2002:omap",resolve($,Z){let Q=h4.resolvePairs($,Z),z=[];for(let{key:X}of Q.items)if(k4.isScalar(X))if(z.includes(X.value))Z(`Ordered maps must not include duplicate keys: ${X.value}`);else z.push(X.value);return Object.assign(new G2,Q)},createNode:($,Z,Q)=>G2.from($,Z,Q)};gJ.YAMLOMap=G2;gJ.omap=xJ});var l4=M((hJ)=>{var u4=d();function f4({value:$,source:Z},Q){if(Z&&($?m4:p4).test.test(Z))return Z;return $?Q.options.trueStr:Q.options.falseStr}var m4={identify:($)=>$===!0,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:()=>new u4.Scalar(!0),stringify:f4},p4={identify:($)=>$===!1,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:()=>new u4.Scalar(!1),stringify:f4};hJ.falseTag=p4;hJ.trueTag=m4});var c4=M((dJ)=>{var mJ=d(),E5=l2(),pJ={identify:($)=>typeof $==="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:($)=>$.slice(-3).toLowerCase()==="nan"?NaN:$[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:E5.stringifyNumber},lJ={identify:($)=>typeof $==="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:($)=>parseFloat($.replace(/_/g,"")),stringify($){let Z=Number($.value);return isFinite(Z)?Z.toExponential():E5.stringifyNumber($)}},cJ={identify:($)=>typeof $==="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve($){let Z=new mJ.Scalar(parseFloat($.replace(/_/g,""))),Q=$.indexOf(".");if(Q!==-1){let z=$.substring(Q+1).replace(/_/g,"");if(z[z.length-1]==="0")Z.minFractionDigits=z.length}return Z},stringify:E5.stringifyNumber};dJ.float=cJ;dJ.floatExp=lJ;dJ.floatNaN=pJ});var i4=M((eJ)=>{var d4=l2(),b$=($)=>typeof $==="bigint"||Number.isInteger($);function d6($,Z,Q,{intAsBigInt:z}){let X=$[0];if(X==="-"||X==="+")Z+=1;if($=$.substring(Z).replace(/_/g,""),z){switch(Q){case 2:$=`0b${$}`;break;case 8:$=`0o${$}`;break;case 16:$=`0x${$}`;break}let U=BigInt($);return X==="-"?BigInt(-1)*U:U}let H=parseInt($,Q);return X==="-"?-1*H:H}function b5($,Z,Q){let{value:z}=$;if(b$(z)){let X=z.toString(Z);return z<0?"-"+Q+X.substr(1):Q+X}return d4.stringifyNumber($)}var sJ={identify:b$,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:($,Z,Q)=>d6($,2,2,Q),stringify:($)=>b5($,2,"0b")},oJ={identify:b$,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:($,Z,Q)=>d6($,1,8,Q),stringify:($)=>b5($,8,"0")},aJ={identify:b$,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:($,Z,Q)=>d6($,0,10,Q),stringify:d4.stringifyNumber},tJ={identify:b$,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:($,Z,Q)=>d6($,2,16,Q),stringify:($)=>b5($,16,"0x")};eJ.int=aJ;eJ.intBin=sJ;eJ.intHex=tJ;eJ.intOct=oJ});var y5=M((HG)=>{var r6=x(),i6=r0(),n6=o0();class V2 extends n6.YAMLMap{constructor($){super($);this.tag=V2.tag}add($){let Z;if(r6.isPair($))Z=$;else if($&&typeof $==="object"&&"key"in $&&"value"in $&&$.value===null)Z=new i6.Pair($.key,null);else Z=new i6.Pair($,null);if(!n6.findPair(this.items,Z.key))this.items.push(Z)}get($,Z){let Q=n6.findPair(this.items,$);return!Z&&r6.isPair(Q)?r6.isScalar(Q.key)?Q.key.value:Q.key:Q}set($,Z){if(typeof Z!=="boolean")throw Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof Z}`);let Q=n6.findPair(this.items,$);if(Q&&!Z)this.items.splice(this.items.indexOf(Q),1);else if(!Q&&Z)this.items.push(new i6.Pair($))}toJSON($,Z){return super.toJSON($,Z,Set)}toString($,Z,Q){if(!$)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},$,{allNullValues:!0}),Z,Q);else throw Error("Set items must all have null values")}static from($,Z,Q){let{replacer:z}=Q,X=new this($);if(Z&&Symbol.iterator in Object(Z))for(let H of Z){if(typeof z==="function")H=z.call(Z,H,H);X.items.push(i6.createPair(H,null,Q))}return X}}V2.tag="tag:yaml.org,2002:set";var XG={collection:"map",identify:($)=>$ instanceof Set,nodeClass:V2,default:!1,tag:"tag:yaml.org,2002:set",createNode:($,Z,Q)=>V2.from($,Z,Q),resolve($,Z){if(r6.isMap($))if($.hasAllNullValues(!0))return Object.assign(new V2,$);else Z("Set items must all have null values");else Z("Expected a mapping for this tag");return $}};HG.YAMLSet=V2;HG.set=XG});var g5=M((WG)=>{var GG=l2();function x5($,Z){let Q=$[0],z=Q==="-"||Q==="+"?$.substring(1):$,X=(U)=>Z?BigInt(U):Number(U),H=z.replace(/_/g,"").split(":").reduce((U,J)=>U*X(60)+X(J),X(0));return Q==="-"?X(-1)*H:H}function n4($){let{value:Z}=$,Q=(U)=>U;if(typeof Z==="bigint")Q=(U)=>BigInt(U);else if(isNaN(Z)||!isFinite(Z))return GG.stringifyNumber($);let z="";if(Z<0)z="-",Z*=Q(-1);let X=Q(60),H=[Z%X];if(Z<60)H.unshift(0);else if(Z=(Z-H[0])/X,H.unshift(Z%X),Z>=60)Z=(Z-H[0])/X,H.unshift(Z);return z+H.map((U)=>String(U).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}var VG={identify:($)=>typeof $==="bigint"||Number.isInteger($),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:($,Z,{intAsBigInt:Q})=>x5($,Q),stringify:n4},YG={identify:($)=>typeof $==="number",default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:($)=>x5($,!1),stringify:n4},r4={identify:($)=>$ instanceof Date,default:!0,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve($){let Z=$.match(r4.test);if(!Z)throw Error("!!timestamp expects a date, starting with yyyy-mm-dd");let[,Q,z,X,H,U,J]=Z.map(Number),G=Z[7]?Number((Z[7]+"00").substr(1,3)):0,V=Date.UTC(Q,z-1,X,H||0,U||0,J||0,G),Y=Z[8];if(Y&&Y!=="Z"){let W=x5(Y,!1);if(Math.abs(W)<30)W*=60;V-=60000*W}return new Date(V)},stringify:({value:$})=>$?.toISOString().replace(/(T00:00:00)?\.000Z$/,"")??""};WG.floatTime=YG;WG.intTime=VG;WG.timestamp=r4});var o4=M((TG)=>{var DG=m2(),LG=f6(),IG=p2(),OG=w$(),_G=C5(),s4=l4(),v5=c4(),s6=i4(),MG=b6(),PG=S5(),FG=c6(),RG=y5(),k5=g5(),NG=[DG.map,IG.seq,OG.string,LG.nullTag,s4.trueTag,s4.falseTag,s6.intBin,s6.intOct,s6.int,s6.intHex,v5.floatNaN,v5.floatExp,v5.float,_G.binary,MG.merge,PG.omap,FG.pairs,RG.set,k5.intTime,k5.floatTime,k5.timestamp];TG.schema=NG});var U7=M((xG)=>{var $7=m2(),CG=f6(),Z7=p2(),jG=w$(),wG=_5(),h5=P5(),u5=R5(),SG=b4(),EG=x4(),Q7=C5(),y$=b6(),z7=S5(),X7=c6(),a4=o4(),H7=y5(),o6=g5(),t4=new Map([["core",SG.schema],["failsafe",[$7.map,Z7.seq,jG.string]],["json",EG.schema],["yaml11",a4.schema],["yaml-1.1",a4.schema]]),e4={binary:Q7.binary,bool:wG.boolTag,float:h5.float,floatExp:h5.floatExp,floatNaN:h5.floatNaN,floatTime:o6.floatTime,int:u5.int,intHex:u5.intHex,intOct:u5.intOct,intTime:o6.intTime,map:$7.map,merge:y$.merge,null:CG.nullTag,omap:z7.omap,pairs:X7.pairs,seq:Z7.seq,set:H7.set,timestamp:o6.timestamp},bG={"tag:yaml.org,2002:binary":Q7.binary,"tag:yaml.org,2002:merge":y$.merge,"tag:yaml.org,2002:omap":z7.omap,"tag:yaml.org,2002:pairs":X7.pairs,"tag:yaml.org,2002:set":H7.set,"tag:yaml.org,2002:timestamp":o6.timestamp};function yG($,Z,Q){let z=t4.get(Z);if(z&&!$)return Q&&!z.includes(y$.merge)?z.concat(y$.merge):z.slice();let X=z;if(!X)if(Array.isArray($))X=[];else{let H=Array.from(t4.keys()).filter((U)=>U!=="yaml11").map((U)=>JSON.stringify(U)).join(", ");throw Error(`Unknown schema "${Z}"; use one of ${H} or define customTags array`)}if(Array.isArray($))for(let H of $)X=X.concat(H);else if(typeof $==="function")X=$(X.slice());if(Q)X=X.concat(y$.merge);return X.reduce((H,U)=>{let J=typeof U==="string"?e4[U]:U;if(!J){let G=JSON.stringify(U),V=Object.keys(e4).map((Y)=>JSON.stringify(Y)).join(", ");throw Error(`Unknown custom tag ${G}; use one of ${V}`)}if(!H.includes(J))H.push(J);return H},[])}xG.coreKnownTags=bG;xG.getTags=yG});var p5=M((mG)=>{var f5=x(),kG=m2(),hG=p2(),uG=w$(),a6=U7(),fG=($,Z)=>$.key<Z.key?-1:$.key>Z.key?1:0;class m5{constructor({compat:$,customTags:Z,merge:Q,resolveKnownTags:z,schema:X,sortMapEntries:H,toStringDefaults:U}){this.compat=Array.isArray($)?a6.getTags($,"compat"):$?a6.getTags(null,$):null,this.name=typeof X==="string"&&X||"core",this.knownTags=z?a6.coreKnownTags:{},this.tags=a6.getTags(Z,this.name,Q),this.toStringOptions=U??null,Object.defineProperty(this,f5.MAP,{value:kG.map}),Object.defineProperty(this,f5.SCALAR,{value:uG.string}),Object.defineProperty(this,f5.SEQ,{value:hG.seq}),this.sortMapEntries=typeof H==="function"?H:H===!0?fG:null}clone(){let $=Object.create(m5.prototype,Object.getOwnPropertyDescriptors(this));return $.tags=this.tags.slice(),$}}mG.Schema=m5});var J7=M((dG)=>{var lG=x(),l5=A$(),x$=R$();function cG($,Z){let Q=[],z=Z.directives===!0;if(Z.directives!==!1&&$.directives){let G=$.directives.toString($);if(G)Q.push(G),z=!0;else if($.directives.docStart)z=!0}if(z)Q.push("---");let X=l5.createStringifyContext($,Z),{commentString:H}=X.options;if($.commentBefore){if(Q.length!==1)Q.unshift("");let G=H($.commentBefore);Q.unshift(x$.indentComment(G,""))}let U=!1,J=null;if($.contents){if(lG.isNode($.contents)){if($.contents.spaceBefore&&z)Q.push("");if($.contents.commentBefore){let Y=H($.contents.commentBefore);Q.push(x$.indentComment(Y,""))}X.forceBlockIndent=!!$.comment,J=$.contents.comment}let G=J?void 0:()=>U=!0,V=l5.stringify($.contents,X,()=>J=null,G);if(J)V+=x$.lineComment(V,"",H(J));if((V[0]==="|"||V[0]===">")&&Q[Q.length-1]==="---")Q[Q.length-1]=`--- ${V}`;else Q.push(V)}else Q.push(l5.stringify($.contents,X));if($.directives?.docEnd)if($.comment){let G=H($.comment);if(G.includes(`
|
|
55
55
|
`))Q.push("..."),Q.push(x$.indentComment(G,""));else Q.push(`... ${G}`)}else Q.push("...");else{let G=$.comment;if(G&&U)G=G.replace(/^\n+/,"");if(G){if((!U||J)&&Q[Q.length-1]!=="")Q.push("");Q.push(x$.indentComment(H(G),""))}}return Q.join(`
|
|
56
56
|
`)+`
|
|
57
|
-
`}
|
|
57
|
+
`}dG.stringifyDocument=cG});var g$=M(($V)=>{var nG=P$(),c2=T6(),G0=x(),rG=r0(),sG=d0(),oG=p5(),aG=J7(),c5=F6(),tG=V5(),eG=F$(),d5=G5();class i5{constructor($,Z,Q){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,G0.NODE_TYPE,{value:G0.DOC});let z=null;if(typeof Z==="function"||Array.isArray(Z))z=Z;else if(Q===void 0&&Z)Q=Z,Z=void 0;let X=Object.assign({intAsBigInt:!1,keepSourceTokens:!1,logLevel:"warn",prettyErrors:!0,strict:!0,stringKeys:!1,uniqueKeys:!0,version:"1.2"},Q);this.options=X;let{version:H}=X;if(Q?._directives){if(this.directives=Q._directives.atDocument(),this.directives.yaml.explicit)H=this.directives.yaml.version}else this.directives=new d5.Directives({version:H});this.setSchema(H,Q),this.contents=$===void 0?null:this.createNode($,z,Q)}clone(){let $=Object.create(i5.prototype,{[G0.NODE_TYPE]:{value:G0.DOC}});if($.commentBefore=this.commentBefore,$.comment=this.comment,$.errors=this.errors.slice(),$.warnings=this.warnings.slice(),$.options=Object.assign({},this.options),this.directives)$.directives=this.directives.clone();if($.schema=this.schema.clone(),$.contents=G0.isNode(this.contents)?this.contents.clone($.schema):this.contents,this.range)$.range=this.range.slice();return $}add($){if(d2(this.contents))this.contents.add($)}addIn($,Z){if(d2(this.contents))this.contents.addIn($,Z)}createAlias($,Z){if(!$.anchor){let Q=c5.anchorNames(this);$.anchor=!Z||Q.has(Z)?c5.findNewAnchor(Z||"a",Q):Z}return new nG.Alias($.anchor)}createNode($,Z,Q){let z=void 0;if(typeof Z==="function")$=Z.call({"":$},"",$),z=Z;else if(Array.isArray(Z)){let q=(O)=>typeof O==="number"||O instanceof String||O instanceof Number,D=Z.filter(q).map(String);if(D.length>0)Z=Z.concat(D);z=Z}else if(Q===void 0&&Z)Q=Z,Z=void 0;let{aliasDuplicateObjects:X,anchorPrefix:H,flow:U,keepUndefined:J,onTagObj:G,tag:V}=Q??{},{onAnchor:Y,setAnchors:W,sourceObjects:B}=c5.createNodeAnchors(this,H||"a"),K={aliasDuplicateObjects:X??!0,keepUndefined:J??!1,onAnchor:Y,onTagObj:G,replacer:z,schema:this.schema,sourceObjects:B},L=eG.createNode($,V,K);if(U&&G0.isCollection(L))L.flow=!0;return W(),L}createPair($,Z,Q={}){let z=this.createNode($,null,Q),X=this.createNode(Z,null,Q);return new rG.Pair(z,X)}delete($){return d2(this.contents)?this.contents.delete($):!1}deleteIn($){if(c2.isEmptyPath($)){if(this.contents==null)return!1;return this.contents=null,!0}return d2(this.contents)?this.contents.deleteIn($):!1}get($,Z){return G0.isCollection(this.contents)?this.contents.get($,Z):void 0}getIn($,Z){if(c2.isEmptyPath($))return!Z&&G0.isScalar(this.contents)?this.contents.value:this.contents;return G0.isCollection(this.contents)?this.contents.getIn($,Z):void 0}has($){return G0.isCollection(this.contents)?this.contents.has($):!1}hasIn($){if(c2.isEmptyPath($))return this.contents!==void 0;return G0.isCollection(this.contents)?this.contents.hasIn($):!1}set($,Z){if(this.contents==null)this.contents=c2.collectionFromPath(this.schema,[$],Z);else if(d2(this.contents))this.contents.set($,Z)}setIn($,Z){if(c2.isEmptyPath($))this.contents=Z;else if(this.contents==null)this.contents=c2.collectionFromPath(this.schema,Array.from($),Z);else if(d2(this.contents))this.contents.setIn($,Z)}setSchema($,Z={}){if(typeof $==="number")$=String($);let Q;switch($){case"1.1":if(this.directives)this.directives.yaml.version="1.1";else this.directives=new d5.Directives({version:"1.1"});Q={resolveKnownTags:!1,schema:"yaml-1.1"};break;case"1.2":case"next":if(this.directives)this.directives.yaml.version=$;else this.directives=new d5.Directives({version:$});Q={resolveKnownTags:!0,schema:"core"};break;case null:if(this.directives)delete this.directives;Q=null;break;default:{let z=JSON.stringify($);throw Error(`Expected '1.1', '1.2' or null as first argument, but found: ${z}`)}}if(Z.schema instanceof Object)this.schema=Z.schema;else if(Q)this.schema=new oG.Schema(Object.assign(Q,Z));else throw Error("With a null YAML version, the { schema: Schema } option is required")}toJS({json:$,jsonArg:Z,mapAsMap:Q,maxAliasCount:z,onAnchor:X,reviver:H}={}){let U={anchors:new Map,doc:this,keep:!$,mapAsMap:Q===!0,mapKeyWarned:!1,maxAliasCount:typeof z==="number"?z:100},J=sG.toJS(this.contents,Z??"",U);if(typeof X==="function")for(let{count:G,res:V}of U.anchors.values())X(V,G);return typeof H==="function"?tG.applyReviver(H,{"":J},"",J):J}toJSON($,Z){return this.toJS({json:!0,jsonArg:$,mapAsMap:!1,onAnchor:Z})}toString($={}){if(this.errors.length>0)throw Error("Document with errors cannot be stringified");if("indent"in $&&(!Number.isInteger($.indent)||Number($.indent)<=0)){let Z=JSON.stringify($.indent);throw Error(`"indent" option must be a positive integer, not ${Z}`)}return aG.stringifyDocument(this,$)}}function d2($){if(G0.isCollection($))return!0;throw Error("Expected a YAML collection as document contents")}$V.Document=i5});var v$=M((zV)=>{class t6 extends Error{constructor($,Z,Q,z){super();this.name=$,this.code=Q,this.message=z,this.pos=Z}}class G7 extends t6{constructor($,Z,Q){super("YAMLParseError",$,Z,Q)}}class V7 extends t6{constructor($,Z,Q){super("YAMLWarning",$,Z,Q)}}var QV=($,Z)=>(Q)=>{if(Q.pos[0]===-1)return;Q.linePos=Q.pos.map((J)=>Z.linePos(J));let{line:z,col:X}=Q.linePos[0];Q.message+=` at line ${z}, column ${X}`;let H=X-1,U=$.substring(Z.lineStarts[z-1],Z.lineStarts[z]).replace(/[\n\r]+$/,"");if(H>=60&&U.length>80){let J=Math.min(H-39,U.length-79);U="…"+U.substring(J),H-=J-1}if(U.length>80)U=U.substring(0,79)+"…";if(z>1&&/^ *$/.test(U.substring(0,H))){let J=$.substring(Z.lineStarts[z-2],Z.lineStarts[z-1]);if(J.length>80)J=J.substring(0,79)+`…
|
|
58
58
|
`;U=J+U}if(/[^ ]/.test(U)){let J=1,G=Q.linePos[1];if(G?.line===z&&G.col>X)J=Math.max(1,Math.min(G.col-X,80-H));let V=" ".repeat(H)+"^".repeat(J);Q.message+=`:
|
|
59
59
|
|
|
60
60
|
${U}
|
|
61
61
|
${V}
|
|
62
|
-
`}};
|
|
63
|
-
`))return!0;if($.end){for(let Z of $.end)if(Z.type==="newline")return!0}return!1;case"flow-collection":for(let Z of $.items){for(let Q of Z.start)if(Q.type==="newline")return!0;if(Z.sep){for(let Q of Z.sep)if(Q.type==="newline")return!0}if(
|
|
64
|
-
`+q.comment;else J.comment=q.comment;continue}if(q.newlineAfterProp||
|
|
65
|
-
`+C.comment;else _.comment=C.comment;let F=new
|
|
66
|
-
`+
|
|
67
|
-
`+w;else P.comment=w;
|
|
68
|
-
`+E.comment;else P.comment=E.comment;let a=new
|
|
69
|
-
`+D.comment;else V.comment=D.comment;V.range=[z.offset,q,D.offset]}else V.range=[z.offset,q,q];return V}
|
|
62
|
+
`}};zV.YAMLError=t6;zV.YAMLParseError=G7;zV.YAMLWarning=V7;zV.prettifyError=QV});var k$=M((VV)=>{function GV($,{flow:Z,indicator:Q,next:z,offset:X,onError:H,parentIndent:U,startOnNewline:J}){let G=!1,V=J,Y=J,W="",B="",K=!1,L=!1,q=null,D=null,O=null,_=null,C=null,F=null,N=null;for(let P of $){if(L){if(P.type!=="space"&&P.type!=="newline"&&P.type!=="comma")H(P.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space");L=!1}if(q){if(V&&P.type!=="comment"&&P.type!=="newline")H(q,"TAB_AS_INDENT","Tabs are not allowed as indentation");q=null}switch(P.type){case"space":if(!Z&&(Q!=="doc-start"||z?.type!=="flow-collection")&&P.source.includes("\t"))q=P;Y=!0;break;case"comment":{if(!Y)H(P,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let E=P.source.substring(1)||" ";if(!W)W=E;else W+=B+E;B="",V=!1;break}case"newline":if(V){if(W)W+=P.source;else if(!F||Q!=="seq-item-ind")G=!0}else B+=P.source;if(V=!0,K=!0,D||O)_=P;Y=!0;break;case"anchor":if(D)H(P,"MULTIPLE_ANCHORS","A node can have at most one anchor");if(P.source.endsWith(":"))H(P.offset+P.source.length-1,"BAD_ALIAS","Anchor ending in : is ambiguous",!0);D=P,N??(N=P.offset),V=!1,Y=!1,L=!0;break;case"tag":{if(O)H(P,"MULTIPLE_TAGS","A node can have at most one tag");O=P,N??(N=P.offset),V=!1,Y=!1,L=!0;break}case Q:if(D||O)H(P,"BAD_PROP_ORDER",`Anchors and tags must be after the ${P.source} indicator`);if(F)H(P,"UNEXPECTED_TOKEN",`Unexpected ${P.source} in ${Z??"collection"}`);F=P,V=Q==="seq-item-ind"||Q==="explicit-key-ind",Y=!1;break;case"comma":if(Z){if(C)H(P,"UNEXPECTED_TOKEN",`Unexpected , in ${Z}`);C=P,V=!1,Y=!1;break}default:H(P,"UNEXPECTED_TOKEN",`Unexpected ${P.type} token`),V=!1,Y=!1}}let T=$[$.length-1],w=T?T.offset+T.source.length:X;if(L&&z&&z.type!=="space"&&z.type!=="newline"&&z.type!=="comma"&&(z.type!=="scalar"||z.source!==""))H(z.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space");if(q&&(V&&q.indent<=U||z?.type==="block-map"||z?.type==="block-seq"))H(q,"TAB_AS_INDENT","Tabs are not allowed as indentation");return{comma:C,found:F,spaceBefore:G,comment:W,hasNewline:K,anchor:D,tag:O,newlineAfterProp:_,end:w,start:N??w}}VV.resolveProps=GV});var e6=M((WV)=>{function n5($){if(!$)return null;switch($.type){case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":if($.source.includes(`
|
|
63
|
+
`))return!0;if($.end){for(let Z of $.end)if(Z.type==="newline")return!0}return!1;case"flow-collection":for(let Z of $.items){for(let Q of Z.start)if(Q.type==="newline")return!0;if(Z.sep){for(let Q of Z.sep)if(Q.type==="newline")return!0}if(n5(Z.key)||n5(Z.value))return!0}return!1;default:return!0}}WV.containsNewline=n5});var r5=M((DV)=>{var qV=e6();function KV($,Z,Q){if(Z?.type==="flow-collection"){let z=Z.end[0];if(z.indent===$&&(z.source==="]"||z.source==="}")&&qV.containsNewline(Z))Q(z,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}DV.flowIndentCheck=KV});var s5=M((OV)=>{var Y7=x();function IV($,Z,Q){let{uniqueKeys:z}=$.options;if(z===!1)return!1;let X=typeof z==="function"?z:(H,U)=>H===U||Y7.isScalar(H)&&Y7.isScalar(U)&&H.value===U.value;return Z.some((H)=>X(H.key,Q))}OV.mapIncludes=IV});var D7=M((NV)=>{var W7=r0(),MV=o0(),B7=k$(),PV=e6(),q7=r5(),FV=s5(),K7="All mapping items must start at the same column";function RV({composeNode:$,composeEmptyNode:Z},Q,z,X,H){let J=new(H?.nodeClass??MV.YAMLMap)(Q.schema);if(Q.atRoot)Q.atRoot=!1;let G=z.offset,V=null;for(let Y of z.items){let{start:W,key:B,sep:K,value:L}=Y,q=B7.resolveProps(W,{indicator:"explicit-key-ind",next:B??K?.[0],offset:G,onError:X,parentIndent:z.indent,startOnNewline:!0}),D=!q.found;if(D){if(B){if(B.type==="block-seq")X(G,"BLOCK_AS_IMPLICIT_KEY","A block sequence may not be used as an implicit map key");else if("indent"in B&&B.indent!==z.indent)X(G,"BAD_INDENT",K7)}if(!q.anchor&&!q.tag&&!K){if(V=q.end,q.comment)if(J.comment)J.comment+=`
|
|
64
|
+
`+q.comment;else J.comment=q.comment;continue}if(q.newlineAfterProp||PV.containsNewline(B))X(B??W[W.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}else if(q.found?.indent!==z.indent)X(G,"BAD_INDENT",K7);Q.atKey=!0;let O=q.end,_=B?$(Q,B,q,X):Z(Q,O,W,null,q,X);if(Q.schema.compat)q7.flowIndentCheck(z.indent,B,X);if(Q.atKey=!1,FV.mapIncludes(Q,J.items,_))X(O,"DUPLICATE_KEY","Map keys must be unique");let C=B7.resolveProps(K??[],{indicator:"map-value-ind",next:L,offset:_.range[2],onError:X,parentIndent:z.indent,startOnNewline:!B||B.type==="block-scalar"});if(G=C.end,C.found){if(D){if(L?.type==="block-map"&&!C.hasNewline)X(G,"BLOCK_AS_IMPLICIT_KEY","Nested mappings are not allowed in compact mappings");if(Q.options.strict&&q.start<C.found.offset-1024)X(_.range,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit block mapping key")}let F=L?$(Q,L,C,X):Z(Q,G,K,null,C,X);if(Q.schema.compat)q7.flowIndentCheck(z.indent,L,X);G=F.range[2];let N=new W7.Pair(_,F);if(Q.options.keepSourceTokens)N.srcToken=Y;J.items.push(N)}else{if(D)X(_.range,"MISSING_CHAR","Implicit map keys need to be followed by map values");if(C.comment)if(_.comment)_.comment+=`
|
|
65
|
+
`+C.comment;else _.comment=C.comment;let F=new W7.Pair(_);if(Q.options.keepSourceTokens)F.srcToken=Y;J.items.push(F)}}if(V&&V<G)X(V,"IMPOSSIBLE","Map comment with trailing content");return J.range=[z.offset,G,V??G],J}NV.resolveBlockMap=RV});var L7=M((SV)=>{var AV=a0(),CV=k$(),jV=r5();function wV({composeNode:$,composeEmptyNode:Z},Q,z,X,H){let J=new(H?.nodeClass??AV.YAMLSeq)(Q.schema);if(Q.atRoot)Q.atRoot=!1;if(Q.atKey)Q.atKey=!1;let G=z.offset,V=null;for(let{start:Y,value:W}of z.items){let B=CV.resolveProps(Y,{indicator:"seq-item-ind",next:W,offset:G,onError:X,parentIndent:z.indent,startOnNewline:!0});if(!B.found)if(B.anchor||B.tag||W)if(W?.type==="block-seq")X(B.end,"BAD_INDENT","All sequence items must start at the same column");else X(G,"MISSING_CHAR","Sequence item without - indicator");else{if(V=B.end,B.comment)J.comment=B.comment;continue}let K=W?$(Q,W,B,X):Z(Q,B.end,Y,null,B,X);if(Q.schema.compat)jV.flowIndentCheck(z.indent,W,X);G=K.range[2],J.items.push(K)}return J.range=[z.offset,G,V??G],J}SV.resolveBlockSeq=wV});var i2=M((yV)=>{function bV($,Z,Q,z){let X="";if($){let H=!1,U="";for(let J of $){let{source:G,type:V}=J;switch(V){case"space":H=!0;break;case"comment":{if(Q&&!H)z(J,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let Y=G.substring(1)||" ";if(!X)X=Y;else X+=U+Y;U="";break}case"newline":if(X)U+=G;H=!0;break;default:z(J,"UNEXPECTED_TOKEN",`Unexpected ${V} at node end`)}Z+=G.length}}return{comment:X,offset:Z}}yV.resolveEnd=bV});var _7=M((pV)=>{var gV=x(),vV=r0(),I7=o0(),kV=a0(),hV=i2(),O7=k$(),uV=e6(),fV=s5(),o5="Block collections are not allowed within flow collections",a5=($)=>$&&($.type==="block-map"||$.type==="block-seq");function mV({composeNode:$,composeEmptyNode:Z},Q,z,X,H){let U=z.start.source==="{",J=U?"flow map":"flow sequence",V=new(H?.nodeClass??(U?I7.YAMLMap:kV.YAMLSeq))(Q.schema);V.flow=!0;let Y=Q.atRoot;if(Y)Q.atRoot=!1;if(Q.atKey)Q.atKey=!1;let W=z.offset+z.start.source.length;for(let D=0;D<z.items.length;++D){let O=z.items[D],{start:_,key:C,sep:F,value:N}=O,T=O7.resolveProps(_,{flow:J,indicator:"explicit-key-ind",next:C??F?.[0],offset:W,onError:X,parentIndent:z.indent,startOnNewline:!1});if(!T.found){if(!T.anchor&&!T.tag&&!F&&!N){if(D===0&&T.comma)X(T.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${J}`);else if(D<z.items.length-1)X(T.start,"UNEXPECTED_TOKEN",`Unexpected empty item in ${J}`);if(T.comment)if(V.comment)V.comment+=`
|
|
66
|
+
`+T.comment;else V.comment=T.comment;W=T.end;continue}if(!U&&Q.options.strict&&uV.containsNewline(C))X(C,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line")}if(D===0){if(T.comma)X(T.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${J}`)}else{if(!T.comma)X(T.start,"MISSING_CHAR",`Missing , between ${J} items`);if(T.comment){let w="";$:for(let P of _)switch(P.type){case"comma":case"space":break;case"comment":w=P.source.substring(1);break $;default:break $}if(w){let P=V.items[V.items.length-1];if(gV.isPair(P))P=P.value??P.key;if(P.comment)P.comment+=`
|
|
67
|
+
`+w;else P.comment=w;T.comment=T.comment.substring(w.length+1)}}}if(!U&&!F&&!T.found){let w=N?$(Q,N,T,X):Z(Q,T.end,F,null,T,X);if(V.items.push(w),W=w.range[2],a5(N))X(w.range,"BLOCK_IN_FLOW",o5)}else{Q.atKey=!0;let w=T.end,P=C?$(Q,C,T,X):Z(Q,w,_,null,T,X);if(a5(C))X(P.range,"BLOCK_IN_FLOW",o5);Q.atKey=!1;let E=O7.resolveProps(F??[],{flow:J,indicator:"map-value-ind",next:N,offset:P.range[2],onError:X,parentIndent:z.indent,startOnNewline:!1});if(E.found){if(!U&&!T.found&&Q.options.strict){if(F)for(let g of F){if(g===E.found)break;if(g.type==="newline"){X(g,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line");break}}if(T.start<E.found.offset-1024)X(E.found,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit flow sequence key")}}else if(N)if("source"in N&&N.source?.[0]===":")X(N,"MISSING_CHAR",`Missing space after : in ${J}`);else X(E.start,"MISSING_CHAR",`Missing , or : between ${J} items`);let n=N?$(Q,N,E,X):E.found?Z(Q,E.end,F,null,E,X):null;if(n){if(a5(N))X(n.range,"BLOCK_IN_FLOW",o5)}else if(E.comment)if(P.comment)P.comment+=`
|
|
68
|
+
`+E.comment;else P.comment=E.comment;let a=new vV.Pair(P,n);if(Q.options.keepSourceTokens)a.srcToken=O;if(U){let g=V;if(fV.mapIncludes(Q,g.items,P))X(w,"DUPLICATE_KEY","Map keys must be unique");g.items.push(a)}else{let g=new I7.YAMLMap(Q.schema);g.flow=!0,g.items.push(a);let A=(n??P).range;g.range=[P.range[0],A[1],A[2]],V.items.push(g)}W=n?n.range[2]:E.end}}let B=U?"}":"]",[K,...L]=z.end,q=W;if(K?.source===B)q=K.offset+K.source.length;else{let D=J[0].toUpperCase()+J.substring(1),O=Y?`${D} must end with a ${B}`:`${D} in block collection must be sufficiently indented and end with a ${B}`;if(X(W,Y?"MISSING_CHAR":"BAD_INDENT",O),K&&K.source.length!==1)L.unshift(K)}if(L.length>0){let D=hV.resolveEnd(L,q,Q.options.strict,X);if(D.comment)if(V.comment)V.comment+=`
|
|
69
|
+
`+D.comment;else V.comment=D.comment;V.range=[z.offset,q,D.offset]}else V.range=[z.offset,q,q];return V}pV.resolveFlowCollection=mV});var M7=M((tV)=>{var cV=x(),dV=d(),iV=o0(),nV=a0(),rV=D7(),sV=L7(),oV=_7();function t5($,Z,Q,z,X,H){let U=Q.type==="block-map"?rV.resolveBlockMap($,Z,Q,z,H):Q.type==="block-seq"?sV.resolveBlockSeq($,Z,Q,z,H):oV.resolveFlowCollection($,Z,Q,z,H),J=U.constructor;if(X==="!"||X===J.tagName)return U.tag=J.tagName,U;if(X)U.tag=X;return U}function aV($,Z,Q,z,X){let H=z.tag,U=!H?null:Z.directives.tagName(H.source,(B)=>X(H,"TAG_RESOLVE_FAILED",B));if(Q.type==="block-seq"){let{anchor:B,newlineAfterProp:K}=z,L=B&&H?B.offset>H.offset?B:H:B??H;if(L&&(!K||K.offset<L.offset))X(L,"MISSING_CHAR","Missing newline after block sequence props")}let J=Q.type==="block-map"?"map":Q.type==="block-seq"?"seq":Q.start.source==="{"?"map":"seq";if(!H||!U||U==="!"||U===iV.YAMLMap.tagName&&J==="map"||U===nV.YAMLSeq.tagName&&J==="seq")return t5($,Z,Q,X,U);let G=Z.schema.tags.find((B)=>B.tag===U&&B.collection===J);if(!G){let B=Z.schema.knownTags[U];if(B?.collection===J)Z.schema.tags.push(Object.assign({},B,{default:!1})),G=B;else{if(B)X(H,"BAD_COLLECTION_TYPE",`${B.tag} used for ${J} collection, but expects ${B.collection??"scalar"}`,!0);else X(H,"TAG_RESOLVE_FAILED",`Unresolved tag: ${U}`,!0);return t5($,Z,Q,X,U)}}let V=t5($,Z,Q,X,U,G),Y=G.resolve?.(V,(B)=>X(H,"TAG_RESOLVE_FAILED",B),Z.options)??V,W=cV.isNode(Y)?Y:new dV.Scalar(Y);if(W.range=V.range,W.tag=U,G?.format)W.format=G.format;return W}tV.composeCollection=aV});var $Z=M((zY)=>{var e5=d();function $Y($,Z,Q){let z=Z.offset,X=ZY(Z,$.options.strict,Q);if(!X)return{value:"",type:null,comment:"",range:[z,z,z]};let H=X.mode===">"?e5.Scalar.BLOCK_FOLDED:e5.Scalar.BLOCK_LITERAL,U=Z.source?QY(Z.source):[],J=U.length;for(let q=U.length-1;q>=0;--q){let D=U[q][1];if(D===""||D==="\r")J=q;else break}if(J===0){let q=X.chomp==="+"&&U.length>0?`
|
|
70
70
|
`.repeat(Math.max(1,U.length-1)):"",D=z+X.length;if(Z.source)D+=Z.source.length;return{value:q,type:H,comment:X.comment,range:[z,D,D]}}let G=Z.indent+X.indent,V=Z.offset+X.length,Y=0;for(let q=0;q<J;++q){let[D,O]=U[q];if(O===""||O==="\r"){if(X.indent===0&&D.length>G)G=D.length}else{if(D.length<G)Q(V+D.length,"MISSING_CHAR","Block scalars with more-indented leading empty lines must use an explicit indentation indicator");if(X.indent===0)G=D.length;if(Y=q,G===0&&!$.atRoot)Q(V,"BAD_INDENT","Block scalar values in collections must be indented");break}V+=D.length+O.length+1}for(let q=U.length-1;q>=J;--q)if(U[q][0].length>G)J=q+1;let W="",B="",K=!1;for(let q=0;q<Y;++q)W+=U[q][0].slice(G)+`
|
|
71
|
-
`;for(let q=Y;q<J;++q){let[D,O]=U[q];V+=D.length+O.length+1;let _=O[O.length-1]==="\r";if(_)O=O.slice(0,-1);if(O&&D.length<G){let F=`Block scalar lines must not be less indented than their ${X.indent?"explicit indentation indicator":"first line"}`;Q(V-O.length-(_?2:1),"BAD_INDENT",F),D=""}if(H===
|
|
71
|
+
`;for(let q=Y;q<J;++q){let[D,O]=U[q];V+=D.length+O.length+1;let _=O[O.length-1]==="\r";if(_)O=O.slice(0,-1);if(O&&D.length<G){let F=`Block scalar lines must not be less indented than their ${X.indent?"explicit indentation indicator":"first line"}`;Q(V-O.length-(_?2:1),"BAD_INDENT",F),D=""}if(H===e5.Scalar.BLOCK_LITERAL)W+=B+D.slice(G)+O,B=`
|
|
72
72
|
`;else if(D.length>G||O[0]==="\t"){if(B===" ")B=`
|
|
73
73
|
`;else if(!K&&B===`
|
|
74
74
|
`)B=`
|
|
@@ -81,46 +81,46 @@ ${V}
|
|
|
81
81
|
`+U[q][0].slice(G);if(W[W.length-1]!==`
|
|
82
82
|
`)W+=`
|
|
83
83
|
`;break;default:W+=`
|
|
84
|
-
`}let L=z+X.length+Z.source.length;return{value:W,type:H,comment:X.comment,range:[z,L,L]}}function
|
|
84
|
+
`}let L=z+X.length+Z.source.length;return{value:W,type:H,comment:X.comment,range:[z,L,L]}}function ZY({offset:$,props:Z},Q,z){if(Z[0].type!=="block-scalar-header")return z(Z[0],"IMPOSSIBLE","Block scalar header not found"),null;let{source:X}=Z[0],H=X[0],U=0,J="",G=-1;for(let B=1;B<X.length;++B){let K=X[B];if(!J&&(K==="-"||K==="+"))J=K;else{let L=Number(K);if(!U&&L)U=L;else if(G===-1)G=$+B}}if(G!==-1)z(G,"UNEXPECTED_TOKEN",`Block scalar header includes extra characters: ${X}`);let V=!1,Y="",W=X.length;for(let B=1;B<Z.length;++B){let K=Z[B];switch(K.type){case"space":V=!0;case"newline":W+=K.source.length;break;case"comment":if(Q&&!V)z(K,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");W+=K.source.length,Y=K.source.substring(1);break;case"error":z(K,"UNEXPECTED_TOKEN",K.message),W+=K.source.length;break;default:{let L=`Unexpected token in block scalar header: ${K.type}`;z(K,"UNEXPECTED_TOKEN",L);let q=K.source;if(q&&typeof q==="string")W+=q.length}}}return{mode:H,indent:U,chomp:J,comment:Y,length:W}}function QY($){let Z=$.split(/\n( *)/),Q=Z[0],z=Q.match(/^( *)/),H=[z?.[1]?[z[1],Q.slice(z[1].length)]:["",Q]];for(let U=1;U<Z.length;U+=2)H.push([Z[U],Z[U+1]]);return H}zY.resolveBlockScalar=$Y});var QZ=M((qY)=>{var ZZ=d(),HY=i2();function UY($,Z,Q){let{offset:z,type:X,source:H,end:U}=$,J,G,V=(B,K,L)=>Q(z+B,K,L);switch(X){case"scalar":J=ZZ.Scalar.PLAIN,G=JY(H,V);break;case"single-quoted-scalar":J=ZZ.Scalar.QUOTE_SINGLE,G=GY(H,V);break;case"double-quoted-scalar":J=ZZ.Scalar.QUOTE_DOUBLE,G=VY(H,V);break;default:return Q($,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${X}`),{value:"",type:null,comment:"",range:[z,z+H.length,z+H.length]}}let Y=z+H.length,W=HY.resolveEnd(U,Y,Z,Q);return{value:G,type:J,comment:W.comment,range:[z,Y,W.offset]}}function JY($,Z){let Q="";switch($[0]){case"\t":Q="a tab character";break;case",":Q="flow indicator character ,";break;case"%":Q="directive indicator character %";break;case"|":case">":{Q=`block scalar indicator ${$[0]}`;break}case"@":case"`":{Q=`reserved character ${$[0]}`;break}}if(Q)Z(0,"BAD_SCALAR_START",`Plain value cannot start with ${Q}`);return P7($)}function GY($,Z){if($[$.length-1]!=="'"||$.length===1)Z($.length,"MISSING_CHAR","Missing closing 'quote");return P7($.slice(1,-1)).replace(/''/g,"'")}function P7($){let Z,Q;try{Z=new RegExp(`(.*?)(?<![ ])[ ]*\r?
|
|
85
85
|
`,"sy"),Q=new RegExp(`[ ]*(.*?)(?:(?<![ ])[ ]*)?\r?
|
|
86
86
|
`,"sy")}catch{Z=/(.*?)[ \t]*\r?\n/sy,Q=/[ \t]*(.*?)[ \t]*\r?\n/sy}let z=Z.exec($);if(!z)return $;let X=z[1],H=" ",U=Z.lastIndex;Q.lastIndex=U;while(z=Q.exec($)){if(z[1]==="")if(H===`
|
|
87
87
|
`)X+=H;else H=`
|
|
88
|
-
`;else X+=H+z[1],H=" ";U=Q.lastIndex}let J=/[ \t]*(.*)/sy;return J.lastIndex=U,z=J.exec($),X+H+(z?.[1]??"")}function
|
|
88
|
+
`;else X+=H+z[1],H=" ";U=Q.lastIndex}let J=/[ \t]*(.*)/sy;return J.lastIndex=U,z=J.exec($),X+H+(z?.[1]??"")}function VY($,Z){let Q="";for(let z=1;z<$.length-1;++z){let X=$[z];if(X==="\r"&&$[z+1]===`
|
|
89
89
|
`)continue;if(X===`
|
|
90
|
-
`){let{fold:H,offset:U}=
|
|
90
|
+
`){let{fold:H,offset:U}=YY($,z);Q+=H,z=U}else if(X==="\\"){let H=$[++z],U=WY[H];if(U)Q+=U;else if(H===`
|
|
91
91
|
`){H=$[z+1];while(H===" "||H==="\t")H=$[++z+1]}else if(H==="\r"&&$[z+1]===`
|
|
92
|
-
`){H=$[++z+1];while(H===" "||H==="\t")H=$[++z+1]}else if(H==="x"||H==="u"||H==="U"){let J=H==="x"?2:H==="u"?4:8;Q+=
|
|
92
|
+
`){H=$[++z+1];while(H===" "||H==="\t")H=$[++z+1]}else if(H==="x"||H==="u"||H==="U"){let J=H==="x"?2:H==="u"?4:8;Q+=BY($,z+1,J,Z),z+=J}else{let J=$.substr(z-1,2);Z(z-1,"BAD_DQ_ESCAPE",`Invalid escape sequence ${J}`),Q+=J}}else if(X===" "||X==="\t"){let H=z,U=$[z+1];while(U===" "||U==="\t")U=$[++z+1];if(U!==`
|
|
93
93
|
`&&!(U==="\r"&&$[z+2]===`
|
|
94
|
-
`))Q+=z>H?$.slice(H,z+1):X}else Q+=X}if($[$.length-1]!=='"'||$.length===1)Z($.length,"MISSING_CHAR",'Missing closing "quote');return Q}function
|
|
94
|
+
`))Q+=z>H?$.slice(H,z+1):X}else Q+=X}if($[$.length-1]!=='"'||$.length===1)Z($.length,"MISSING_CHAR",'Missing closing "quote');return Q}function YY($,Z){let Q="",z=$[Z+1];while(z===" "||z==="\t"||z===`
|
|
95
95
|
`||z==="\r"){if(z==="\r"&&$[Z+2]!==`
|
|
96
96
|
`)break;if(z===`
|
|
97
97
|
`)Q+=`
|
|
98
|
-
`;Z+=1,z=$[Z+1]}if(!Q)Q=" ";return{fold:Q,offset:Z}}var
|
|
99
|
-
`,r:"\r",t:"\t",v:"\v",N:"
",_:" ",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\","\t":"\t"};function
|
|
98
|
+
`;Z+=1,z=$[Z+1]}if(!Q)Q=" ";return{fold:Q,offset:Z}}var WY={"0":"\x00",a:"\x07",b:"\b",e:"\x1B",f:"\f",n:`
|
|
99
|
+
`,r:"\r",t:"\t",v:"\v",N:"
",_:" ",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\","\t":"\t"};function BY($,Z,Q,z){let X=$.substr(Z,Q),U=X.length===Q&&/^[0-9a-fA-F]+$/.test(X)?parseInt(X,16):NaN;try{return String.fromCodePoint(U)}catch{let J=$.substr(Z-2,Q+2);return z(Z-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${J}`),J}}qY.resolveFlowScalar=UY});var R7=M((MY)=>{var Y2=x(),F7=d(),DY=$Z(),LY=QZ();function IY($,Z,Q,z){let{value:X,type:H,comment:U,range:J}=Z.type==="block-scalar"?DY.resolveBlockScalar($,Z,z):LY.resolveFlowScalar(Z,$.options.strict,z),G=Q?$.directives.tagName(Q.source,(W)=>z(Q,"TAG_RESOLVE_FAILED",W)):null,V;if($.options.stringKeys&&$.atKey)V=$.schema[Y2.SCALAR];else if(G)V=OY($.schema,X,G,Q,z);else if(Z.type==="scalar")V=_Y($,X,Z,z);else V=$.schema[Y2.SCALAR];let Y;try{let W=V.resolve(X,(B)=>z(Q??Z,"TAG_RESOLVE_FAILED",B),$.options);Y=Y2.isScalar(W)?W:new F7.Scalar(W)}catch(W){let B=W instanceof Error?W.message:String(W);z(Q??Z,"TAG_RESOLVE_FAILED",B),Y=new F7.Scalar(X)}if(Y.range=J,Y.source=X,H)Y.type=H;if(G)Y.tag=G;if(V.format)Y.format=V.format;if(U)Y.comment=U;return Y}function OY($,Z,Q,z,X){if(Q==="!")return $[Y2.SCALAR];let H=[];for(let J of $.tags)if(!J.collection&&J.tag===Q)if(J.default&&J.test)H.push(J);else return J;for(let J of H)if(J.test?.test(Z))return J;let U=$.knownTags[Q];if(U&&!U.collection)return $.tags.push(Object.assign({},U,{default:!1,test:void 0})),U;return X(z,"TAG_RESOLVE_FAILED",`Unresolved tag: ${Q}`,Q!=="tag:yaml.org,2002:str"),$[Y2.SCALAR]}function _Y({atKey:$,directives:Z,schema:Q},z,X,H){let U=Q.tags.find((J)=>(J.default===!0||$&&J.default==="key")&&J.test?.test(z))||Q[Y2.SCALAR];if(Q.compat){let J=Q.compat.find((G)=>G.default&&G.test?.test(z))??Q[Y2.SCALAR];if(U.tag!==J.tag){let G=Z.tagString(U.tag),V=Z.tagString(J.tag),Y=`Value may be parsed as either ${G} or ${V}`;H(X,"TAG_RESOLVE_FAILED",Y,!0)}}return U}MY.composeScalar=IY});var N7=M((RY)=>{function FY($,Z,Q){if(Z){Q??(Q=Z.length);for(let z=Q-1;z>=0;--z){let X=Z[z];switch(X.type){case"space":case"comment":case"newline":$-=X.source.length;continue}X=Z[++z];while(X?.type==="space")$+=X.source.length,X=Z[++z];break}}return $}RY.emptyScalarPosition=FY});var C7=M((bY)=>{var TY=P$(),AY=x(),CY=M7(),T7=R7(),jY=i2(),wY=N7(),SY={composeNode:A7,composeEmptyNode:zZ};function A7($,Z,Q,z){let X=$.atKey,{spaceBefore:H,comment:U,anchor:J,tag:G}=Q,V,Y=!0;switch(Z.type){case"alias":if(V=EY($,Z,z),J||G)z(Z,"ALIAS_PROPS","An alias node must not specify any properties");break;case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"block-scalar":if(V=T7.composeScalar($,Z,G,z),J)V.anchor=J.source.substring(1);break;case"block-map":case"block-seq":case"flow-collection":try{if(V=CY.composeCollection(SY,$,Z,Q,z),J)V.anchor=J.source.substring(1)}catch(W){let B=W instanceof Error?W.message:String(W);z(Z,"RESOURCE_EXHAUSTION",B)}break;default:{let W=Z.type==="error"?Z.message:`Unsupported token (type: ${Z.type})`;z(Z,"UNEXPECTED_TOKEN",W),Y=!1}}if(V??(V=zZ($,Z.offset,void 0,null,Q,z)),J&&V.anchor==="")z(J,"BAD_ALIAS","Anchor cannot be an empty string");if(X&&$.options.stringKeys&&(!AY.isScalar(V)||typeof V.value!=="string"||V.tag&&V.tag!=="tag:yaml.org,2002:str"))z(G??Z,"NON_STRING_KEY","With stringKeys, all keys must be strings");if(H)V.spaceBefore=!0;if(U)if(Z.type==="scalar"&&Z.source==="")V.comment=U;else V.commentBefore=U;if($.options.keepSourceTokens&&Y)V.srcToken=Z;return V}function zZ($,Z,Q,z,{spaceBefore:X,comment:H,anchor:U,tag:J,end:G},V){let Y={type:"scalar",offset:wY.emptyScalarPosition(Z,Q,z),indent:-1,source:""},W=T7.composeScalar($,Y,J,V);if(U){if(W.anchor=U.source.substring(1),W.anchor==="")V(U,"BAD_ALIAS","Anchor cannot be an empty string")}if(X)W.spaceBefore=!0;if(H)W.comment=H,W.range[2]=G;return W}function EY({options:$},{offset:Z,source:Q,end:z},X){let H=new TY.Alias(Q.substring(1));if(H.source==="")X(Z,"BAD_ALIAS","Alias cannot be an empty string");if(H.source.endsWith(":"))X(Z+Q.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);let U=Z+Q.length,J=jY.resolveEnd(z,U,$.strict,X);if(H.range=[Z,U,J.offset],J.comment)H.comment=J.comment;return H}bY.composeEmptyNode=zZ;bY.composeNode=A7});var w7=M((uY)=>{var gY=g$(),j7=C7(),vY=i2(),kY=k$();function hY($,Z,{offset:Q,start:z,value:X,end:H},U){let J=Object.assign({_directives:Z},$),G=new gY.Document(void 0,J),V={atKey:!1,atRoot:!0,directives:G.directives,options:G.options,schema:G.schema},Y=kY.resolveProps(z,{indicator:"doc-start",next:X??H?.[0],offset:Q,onError:U,parentIndent:0,startOnNewline:!0});if(Y.found){if(G.directives.docStart=!0,X&&(X.type==="block-map"||X.type==="block-seq")&&!Y.hasNewline)U(Y.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")}G.contents=X?j7.composeNode(V,X,Y,U):j7.composeEmptyNode(V,Y.end,z,null,Y,U);let W=G.contents.range[2],B=vY.resolveEnd(H,W,!1,U);if(B.comment)G.comment=B.comment;return G.range=[Q,W,B.offset],G}uY.composeDoc=hY});var XZ=M((iY)=>{var mY=K$("process"),pY=G5(),lY=g$(),h$=v$(),S7=x(),cY=w7(),dY=i2();function u$($){if(typeof $==="number")return[$,$+1];if(Array.isArray($))return $.length===2?$:[$[0],$[1]];let{offset:Z,source:Q}=$;return[Z,Z+(typeof Q==="string"?Q.length:1)]}function E7($){let Z="",Q=!1,z=!1;for(let X=0;X<$.length;++X){let H=$[X];switch(H[0]){case"#":Z+=(Z===""?"":z?`
|
|
100
100
|
|
|
101
101
|
`:`
|
|
102
|
-
`)+(H.substring(1)||" "),Q=!0,z=!1;break;case"%":if($[X+1]?.[0]!=="#")X+=1;Q=!1;break;default:if(!Q)z=!0;Q=!1}}return{comment:Z,afterEmptyLine:z}}class
|
|
103
|
-
${Q}`:Q;else if(z||$.directives.docStart||!X)$.commentBefore=Q;else if(
|
|
102
|
+
`)+(H.substring(1)||" "),Q=!0,z=!1;break;case"%":if($[X+1]?.[0]!=="#")X+=1;Q=!1;break;default:if(!Q)z=!0;Q=!1}}return{comment:Z,afterEmptyLine:z}}class b7{constructor($={}){this.doc=null,this.atDirectives=!1,this.prelude=[],this.errors=[],this.warnings=[],this.onError=(Z,Q,z,X)=>{let H=u$(Z);if(X)this.warnings.push(new h$.YAMLWarning(H,Q,z));else this.errors.push(new h$.YAMLParseError(H,Q,z))},this.directives=new pY.Directives({version:$.version||"1.2"}),this.options=$}decorate($,Z){let{comment:Q,afterEmptyLine:z}=E7(this.prelude);if(Q){let X=$.contents;if(Z)$.comment=$.comment?`${$.comment}
|
|
103
|
+
${Q}`:Q;else if(z||$.directives.docStart||!X)$.commentBefore=Q;else if(S7.isCollection(X)&&!X.flow&&X.items.length>0){let H=X.items[0];if(S7.isPair(H))H=H.key;let U=H.commentBefore;H.commentBefore=U?`${Q}
|
|
104
104
|
${U}`:Q}else{let H=X.commentBefore;X.commentBefore=H?`${Q}
|
|
105
|
-
${H}`:Q}}if(Z){for(let X=0;X<this.errors.length;++X)$.errors.push(this.errors[X]);for(let X=0;X<this.warnings.length;++X)$.warnings.push(this.warnings[X])}else $.errors=this.errors,$.warnings=this.warnings;this.prelude=[],this.errors=[],this.warnings=[]}streamInfo(){return{comment:
|
|
106
|
-
${Z.comment}`:Z.comment}this.doc.range[2]=Z.offset;break}default:this.errors.push(new h$.YAMLParseError(u$($),"UNEXPECTED_TOKEN",`Unsupported token ${$.type}`))}}*end($=!1,Z=-1){if(this.doc)this.decorate(this.doc,!0),yield this.doc,this.doc=null;else if($){let Q=Object.assign({_directives:this.directives},this.options),z=new
|
|
105
|
+
${H}`:Q}}if(Z){for(let X=0;X<this.errors.length;++X)$.errors.push(this.errors[X]);for(let X=0;X<this.warnings.length;++X)$.warnings.push(this.warnings[X])}else $.errors=this.errors,$.warnings=this.warnings;this.prelude=[],this.errors=[],this.warnings=[]}streamInfo(){return{comment:E7(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose($,Z=!1,Q=-1){for(let z of $)yield*this.next(z);yield*this.end(Z,Q)}*next($){if(mY.env.LOG_STREAM)console.dir($,{depth:null});switch($.type){case"directive":this.directives.add($.source,(Z,Q,z)=>{let X=u$($);X[0]+=Z,this.onError(X,"BAD_DIRECTIVE",Q,z)}),this.prelude.push($.source),this.atDirectives=!0;break;case"document":{let Z=cY.composeDoc(this.options,this.directives,$,this.onError);if(this.atDirectives&&!Z.directives.docStart)this.onError($,"MISSING_CHAR","Missing directives-end/doc-start indicator line");if(this.decorate(Z,!1),this.doc)yield this.doc;this.doc=Z,this.atDirectives=!1;break}case"byte-order-mark":case"space":break;case"comment":case"newline":this.prelude.push($.source);break;case"error":{let Z=$.source?`${$.message}: ${JSON.stringify($.source)}`:$.message,Q=new h$.YAMLParseError(u$($),"UNEXPECTED_TOKEN",Z);if(this.atDirectives||!this.doc)this.errors.push(Q);else this.doc.errors.push(Q);break}case"doc-end":{if(!this.doc){this.errors.push(new h$.YAMLParseError(u$($),"UNEXPECTED_TOKEN","Unexpected doc-end without preceding document"));break}this.doc.directives.docEnd=!0;let Z=dY.resolveEnd($.end,$.offset+$.source.length,this.doc.options.strict,this.onError);if(this.decorate(this.doc,!0),Z.comment){let Q=this.doc.comment;this.doc.comment=Q?`${Q}
|
|
106
|
+
${Z.comment}`:Z.comment}this.doc.range[2]=Z.offset;break}default:this.errors.push(new h$.YAMLParseError(u$($),"UNEXPECTED_TOKEN",`Unsupported token ${$.type}`))}}*end($=!1,Z=-1){if(this.doc)this.decorate(this.doc,!0),yield this.doc,this.doc=null;else if($){let Q=Object.assign({_directives:this.directives},this.options),z=new lY.Document(void 0,Q);if(this.atDirectives)this.onError(Z,"MISSING_CHAR","Missing directives-end indicator line");z.range=[0,Z,Z],this.decorate(z,!1),yield z}}}iY.Composer=b7});var g7=M((ZW)=>{var rY=$Z(),sY=QZ(),oY=v$(),y7=T$();function aY($,Z=!0,Q){if($){let z=(X,H,U)=>{let J=typeof X==="number"?X:Array.isArray(X)?X[0]:X.offset;if(Q)Q(J,H,U);else throw new oY.YAMLParseError([J,J+1],H,U)};switch($.type){case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return sY.resolveFlowScalar($,Z,z);case"block-scalar":return rY.resolveBlockScalar({options:{strict:Z}},$,z)}}return null}function tY($,Z){let{implicitKey:Q=!1,indent:z,inFlow:X=!1,offset:H=-1,type:U="PLAIN"}=Z,J=y7.stringifyString({type:U,value:$},{implicitKey:Q,indent:z>0?" ".repeat(z):"",inFlow:X,options:{blockQuote:!0,lineWidth:-1}}),G=Z.end??[{type:"newline",offset:-1,indent:z,source:`
|
|
107
107
|
`}];switch(J[0]){case"|":case">":{let V=J.indexOf(`
|
|
108
108
|
`),Y=J.substring(0,V),W=J.substring(V+1)+`
|
|
109
|
-
`,B=[{type:"block-scalar-header",offset:H,indent:z,source:Y}];if(!
|
|
110
|
-
`});return{type:"block-scalar",offset:H,indent:z,props:B,source:W}}case'"':return{type:"double-quoted-scalar",offset:H,indent:z,source:J,end:G};case"'":return{type:"single-quoted-scalar",offset:H,indent:z,source:J,end:G};default:return{type:"scalar",offset:H,indent:z,source:J,end:G}}}function
|
|
109
|
+
`,B=[{type:"block-scalar-header",offset:H,indent:z,source:Y}];if(!x7(B,G))B.push({type:"newline",offset:-1,indent:z,source:`
|
|
110
|
+
`});return{type:"block-scalar",offset:H,indent:z,props:B,source:W}}case'"':return{type:"double-quoted-scalar",offset:H,indent:z,source:J,end:G};case"'":return{type:"single-quoted-scalar",offset:H,indent:z,source:J,end:G};default:return{type:"scalar",offset:H,indent:z,source:J,end:G}}}function eY($,Z,Q={}){let{afterKey:z=!1,implicitKey:X=!1,inFlow:H=!1,type:U}=Q,J="indent"in $?$.indent:null;if(z&&typeof J==="number")J+=2;if(!U)switch($.type){case"single-quoted-scalar":U="QUOTE_SINGLE";break;case"double-quoted-scalar":U="QUOTE_DOUBLE";break;case"block-scalar":{let V=$.props[0];if(V.type!=="block-scalar-header")throw Error("Invalid block scalar header");U=V.source[0]===">"?"BLOCK_FOLDED":"BLOCK_LITERAL";break}default:U="PLAIN"}let G=y7.stringifyString({type:U,value:Z},{implicitKey:X||J===null,indent:J!==null&&J>0?" ".repeat(J):"",inFlow:H,options:{blockQuote:!0,lineWidth:-1}});switch(G[0]){case"|":case">":$W($,G);break;case'"':HZ($,G,"double-quoted-scalar");break;case"'":HZ($,G,"single-quoted-scalar");break;default:HZ($,G,"scalar")}}function $W($,Z){let Q=Z.indexOf(`
|
|
111
111
|
`),z=Z.substring(0,Q),X=Z.substring(Q+1)+`
|
|
112
|
-
`;if($.type==="block-scalar"){let H=$.props[0];if(H.type!=="block-scalar-header")throw Error("Invalid block scalar header");H.source=z,$.source=X}else{let{offset:H}=$,U="indent"in $?$.indent:-1,J=[{type:"block-scalar-header",offset:H,indent:U,source:z}];if(!
|
|
113
|
-
`});for(let G of Object.keys($))if(G!=="type"&&G!=="offset")delete $[G];Object.assign($,{type:"block-scalar",indent:U,props:J,source:X})}}function
|
|
114
|
-
`};delete $.items,Object.assign($,{type:Q,source:Z,end:[X]});break}default:{let z="indent"in $?$.indent:-1,X="end"in $&&Array.isArray($.end)?$.end.filter((H)=>H.type==="space"||H.type==="comment"||H.type==="newline"):[];for(let H of Object.keys($))if(H!=="type"&&H!=="offset")delete $[H];Object.assign($,{type:Q,indent:z,source:Z,end:X})}}}
|
|
112
|
+
`;if($.type==="block-scalar"){let H=$.props[0];if(H.type!=="block-scalar-header")throw Error("Invalid block scalar header");H.source=z,$.source=X}else{let{offset:H}=$,U="indent"in $?$.indent:-1,J=[{type:"block-scalar-header",offset:H,indent:U,source:z}];if(!x7(J,"end"in $?$.end:void 0))J.push({type:"newline",offset:-1,indent:U,source:`
|
|
113
|
+
`});for(let G of Object.keys($))if(G!=="type"&&G!=="offset")delete $[G];Object.assign($,{type:"block-scalar",indent:U,props:J,source:X})}}function x7($,Z){if(Z)for(let Q of Z)switch(Q.type){case"space":case"comment":$.push(Q);break;case"newline":return $.push(Q),!0}return!1}function HZ($,Z,Q){switch($.type){case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":$.type=Q,$.source=Z;break;case"block-scalar":{let z=$.props.slice(1),X=Z.length;if($.props[0].type==="block-scalar-header")X-=$.props[0].source.length;for(let H of z)H.offset+=X;delete $.props,Object.assign($,{type:Q,source:Z,end:z});break}case"block-map":case"block-seq":{let X={type:"newline",offset:$.offset+Z.length,indent:$.indent,source:`
|
|
114
|
+
`};delete $.items,Object.assign($,{type:Q,source:Z,end:[X]});break}default:{let z="indent"in $?$.indent:-1,X="end"in $&&Array.isArray($.end)?$.end.filter((H)=>H.type==="space"||H.type==="comment"||H.type==="newline"):[];for(let H of Object.keys($))if(H!=="type"&&H!=="offset")delete $[H];Object.assign($,{type:Q,indent:z,source:Z,end:X})}}}ZW.createScalarToken=tY;ZW.resolveAsScalar=aY;ZW.setScalarValue=eY});var v7=M((UW)=>{var HW=($)=>("type"in $)?Z8($):$8($);function Z8($){switch($.type){case"block-scalar":{let Z="";for(let Q of $.props)Z+=Z8(Q);return Z+$.source}case"block-map":case"block-seq":{let Z="";for(let Q of $.items)Z+=$8(Q);return Z}case"flow-collection":{let Z=$.start.source;for(let Q of $.items)Z+=$8(Q);for(let Q of $.end)Z+=Q.source;return Z}case"document":{let Z=$8($);if($.end)for(let Q of $.end)Z+=Q.source;return Z}default:{let Z=$.source;if("end"in $&&$.end)for(let Q of $.end)Z+=Q.source;return Z}}}function $8({start:$,key:Z,sep:Q,value:z}){let X="";for(let H of $)X+=H.source;if(Z)X+=Z8(Z);if(Q)for(let H of Q)X+=H.source;if(z)X+=Z8(z);return X}UW.stringify=HW});var u7=M((VW)=>{var UZ=Symbol("break visit"),GW=Symbol("skip children"),k7=Symbol("remove item");function W2($,Z){if("type"in $&&$.type==="document")$={start:$.start,value:$.value};h7(Object.freeze([]),$,Z)}W2.BREAK=UZ;W2.SKIP=GW;W2.REMOVE=k7;W2.itemAtPath=($,Z)=>{let Q=$;for(let[z,X]of Z){let H=Q?.[z];if(H&&"items"in H)Q=H.items[X];else return}return Q};W2.parentCollection=($,Z)=>{let Q=W2.itemAtPath($,Z.slice(0,-1)),z=Z[Z.length-1][0],X=Q?.[z];if(X&&"items"in X)return X;throw Error("Parent collection not found")};function h7($,Z,Q){let z=Q(Z,$);if(typeof z==="symbol")return z;for(let X of["key","value"]){let H=Z[X];if(H&&"items"in H){for(let U=0;U<H.items.length;++U){let J=h7(Object.freeze($.concat([[X,U]])),H.items[U],Q);if(typeof J==="number")U=J-1;else if(J===UZ)return UZ;else if(J===k7)H.items.splice(U,1),U-=1}if(typeof z==="function"&&X==="key")z=z(Z,$)}}return typeof z==="function"?z(Z,$):z}VW.visit=W2});var Q8=M((IW)=>{var JZ=g7(),WW=v7(),BW=u7(),GZ="\uFEFF",VZ="\x02",YZ="\x18",WZ="\x1F",qW=($)=>!!$&&("items"in $),KW=($)=>!!$&&($.type==="scalar"||$.type==="single-quoted-scalar"||$.type==="double-quoted-scalar"||$.type==="block-scalar");function DW($){switch($){case GZ:return"<BOM>";case VZ:return"<DOC>";case YZ:return"<FLOW_END>";case WZ:return"<SCALAR>";default:return JSON.stringify($)}}function LW($){switch($){case GZ:return"byte-order-mark";case VZ:return"doc-mode";case YZ:return"flow-error-end";case WZ:return"scalar";case"---":return"doc-start";case"...":return"doc-end";case"":case`
|
|
115
115
|
`:case`\r
|
|
116
|
-
`:return"newline";case"-":return"seq-item-ind";case"?":return"explicit-key-ind";case":":return"map-value-ind";case"{":return"flow-map-start";case"}":return"flow-map-end";case"[":return"flow-seq-start";case"]":return"flow-seq-end";case",":return"comma"}switch($[0]){case" ":case"\t":return"space";case"#":return"comment";case"%":return"directive-line";case"*":return"alias";case"&":return"anchor";case"!":return"tag";case"'":return"single-quoted-scalar";case'"':return"double-quoted-scalar";case"|":case">":return"block-scalar-header"}return null}
|
|
117
|
-
`:case"\r":case"\t":return!0;default:return!1}}var
|
|
118
|
-
\r `),
|
|
116
|
+
`:return"newline";case"-":return"seq-item-ind";case"?":return"explicit-key-ind";case":":return"map-value-ind";case"{":return"flow-map-start";case"}":return"flow-map-end";case"[":return"flow-seq-start";case"]":return"flow-seq-end";case",":return"comma"}switch($[0]){case" ":case"\t":return"space";case"#":return"comment";case"%":return"directive-line";case"*":return"alias";case"&":return"anchor";case"!":return"tag";case"'":return"single-quoted-scalar";case'"':return"double-quoted-scalar";case"|":case">":return"block-scalar-header"}return null}IW.createScalarToken=JZ.createScalarToken;IW.resolveAsScalar=JZ.resolveAsScalar;IW.setScalarValue=JZ.setScalarValue;IW.stringify=WW.stringify;IW.visit=BW.visit;IW.BOM=GZ;IW.DOCUMENT=VZ;IW.FLOW_END=YZ;IW.SCALAR=WZ;IW.isCollection=qW;IW.isScalar=KW;IW.prettyToken=DW;IW.tokenType=LW});var qZ=M((yW)=>{var f$=Q8();function D0($){switch($){case void 0:case" ":case`
|
|
117
|
+
`:case"\r":case"\t":return!0;default:return!1}}var f7=new Set("0123456789ABCDEFabcdef"),EW=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),z8=new Set(",[]{}"),bW=new Set(` ,[]{}
|
|
118
|
+
\r `),BZ=($)=>!$||bW.has($);class m7{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($,Z=!1){if($){if(typeof $!=="string")throw TypeError("source is not a string");this.buffer=this.buffer?this.buffer+$:$,this.lineEndPos=null}this.atEnd=!Z;let Q=this.next??"stream";while(Q&&(Z||this.hasChars(1)))Q=yield*this.parseNext(Q)}atLineEnd(){let $=this.pos,Z=this.buffer[$];while(Z===" "||Z==="\t")Z=this.buffer[++$];if(!Z||Z==="#"||Z===`
|
|
119
119
|
`)return!0;if(Z==="\r")return this.buffer[$+1]===`
|
|
120
120
|
`;return!1}charAt($){return this.buffer[this.pos+$]}continueScalar($){let Z=this.buffer[$];if(this.indentNext>0){let Q=0;while(Z===" ")Z=this.buffer[++Q+$];if(Z==="\r"){let z=this.buffer[Q+$+1];if(z===`
|
|
121
121
|
`||!z&&!this.atEnd)return $+Q+1}return Z===`
|
|
122
122
|
`||Q>=this.indentNext||!Z&&!this.atEnd?$+Q:-1}if(Z==="-"||Z==="."){let Q=this.buffer.substr($,3);if((Q==="---"||Q==="...")&&D0(this.buffer[$+3]))return-1}return $}getLine(){let $=this.lineEndPos;if(typeof $!=="number"||$!==-1&&$<this.pos)$=this.buffer.indexOf(`
|
|
123
|
-
`,this.pos),this.lineEndPos=$;if($===-1)return this.atEnd?this.buffer.substring(this.pos):null;if(this.buffer[$-1]==="\r")$-=1;return this.buffer.substring(this.pos,$)}hasChars($){return this.pos+$<=this.buffer.length}setNext($){return this.buffer=this.buffer.substring(this.pos),this.pos=0,this.lineEndPos=null,this.next=$,null}peek($){return this.buffer.substr(this.pos,$)}*parseNext($){switch($){case"stream":return yield*this.parseStream();case"line-start":return yield*this.parseLineStart();case"block-start":return yield*this.parseBlockStart();case"doc":return yield*this.parseDocument();case"flow":return yield*this.parseFlowCollection();case"quoted-scalar":return yield*this.parseQuotedScalar();case"block-scalar":return yield*this.parseBlockScalar();case"plain-scalar":return yield*this.parsePlainScalar()}}*parseStream(){let $=this.getLine();if($===null)return this.setNext("stream");if($[0]===f$.BOM)yield*this.pushCount(1),$=$.substring(1);if($[0]==="%"){let Z=$.length,Q=$.indexOf("#");while(Q!==-1){let X=$[Q-1];if(X===" "||X==="\t"){Z=Q-1;break}else Q=$.indexOf("#",Q+1)}while(!0){let X=$[Z-1];if(X===" "||X==="\t")Z-=1;else break}let z=(yield*this.pushCount(Z))+(yield*this.pushSpaces(!0));return yield*this.pushCount($.length-z),this.pushNewline(),"stream"}if(this.atLineEnd()){let Z=yield*this.pushSpaces(!0);return yield*this.pushCount($.length-Z),yield*this.pushNewline(),"stream"}return yield f$.DOCUMENT,yield*this.parseLineStart()}*parseLineStart(){let $=this.charAt(0);if(!$&&!this.atEnd)return this.setNext("line-start");if($==="-"||$==="."){if(!this.atEnd&&!this.hasChars(4))return this.setNext("line-start");let Z=this.peek(3);if((Z==="---"||Z==="...")&&D0(this.charAt(3)))return yield*this.pushCount(3),this.indentValue=0,this.indentNext=0,Z==="---"?"doc":"stream"}if(this.indentValue=yield*this.pushSpaces(!1),this.indentNext>this.indentValue&&!D0(this.charAt(1)))this.indentNext=this.indentValue;return yield*this.parseBlockStart()}*parseBlockStart(){let[$,Z]=this.peek(2);if(!Z&&!this.atEnd)return this.setNext("block-start");if(($==="-"||$==="?"||$===":")&&D0(Z)){let Q=(yield*this.pushCount(1))+(yield*this.pushSpaces(!0));return this.indentNext=this.indentValue+1,this.indentValue+=Q,"block-start"}return"doc"}*parseDocument(){yield*this.pushSpaces(!0);let $=this.getLine();if($===null)return this.setNext("doc");let Z=yield*this.pushIndicators();switch($[Z]){case"#":yield*this.pushCount($.length-Z);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(
|
|
123
|
+
`,this.pos),this.lineEndPos=$;if($===-1)return this.atEnd?this.buffer.substring(this.pos):null;if(this.buffer[$-1]==="\r")$-=1;return this.buffer.substring(this.pos,$)}hasChars($){return this.pos+$<=this.buffer.length}setNext($){return this.buffer=this.buffer.substring(this.pos),this.pos=0,this.lineEndPos=null,this.next=$,null}peek($){return this.buffer.substr(this.pos,$)}*parseNext($){switch($){case"stream":return yield*this.parseStream();case"line-start":return yield*this.parseLineStart();case"block-start":return yield*this.parseBlockStart();case"doc":return yield*this.parseDocument();case"flow":return yield*this.parseFlowCollection();case"quoted-scalar":return yield*this.parseQuotedScalar();case"block-scalar":return yield*this.parseBlockScalar();case"plain-scalar":return yield*this.parsePlainScalar()}}*parseStream(){let $=this.getLine();if($===null)return this.setNext("stream");if($[0]===f$.BOM)yield*this.pushCount(1),$=$.substring(1);if($[0]==="%"){let Z=$.length,Q=$.indexOf("#");while(Q!==-1){let X=$[Q-1];if(X===" "||X==="\t"){Z=Q-1;break}else Q=$.indexOf("#",Q+1)}while(!0){let X=$[Z-1];if(X===" "||X==="\t")Z-=1;else break}let z=(yield*this.pushCount(Z))+(yield*this.pushSpaces(!0));return yield*this.pushCount($.length-z),this.pushNewline(),"stream"}if(this.atLineEnd()){let Z=yield*this.pushSpaces(!0);return yield*this.pushCount($.length-Z),yield*this.pushNewline(),"stream"}return yield f$.DOCUMENT,yield*this.parseLineStart()}*parseLineStart(){let $=this.charAt(0);if(!$&&!this.atEnd)return this.setNext("line-start");if($==="-"||$==="."){if(!this.atEnd&&!this.hasChars(4))return this.setNext("line-start");let Z=this.peek(3);if((Z==="---"||Z==="...")&&D0(this.charAt(3)))return yield*this.pushCount(3),this.indentValue=0,this.indentNext=0,Z==="---"?"doc":"stream"}if(this.indentValue=yield*this.pushSpaces(!1),this.indentNext>this.indentValue&&!D0(this.charAt(1)))this.indentNext=this.indentValue;return yield*this.parseBlockStart()}*parseBlockStart(){let[$,Z]=this.peek(2);if(!Z&&!this.atEnd)return this.setNext("block-start");if(($==="-"||$==="?"||$===":")&&D0(Z)){let Q=(yield*this.pushCount(1))+(yield*this.pushSpaces(!0));return this.indentNext=this.indentValue+1,this.indentValue+=Q,"block-start"}return"doc"}*parseDocument(){yield*this.pushSpaces(!0);let $=this.getLine();if($===null)return this.setNext("doc");let Z=yield*this.pushIndicators();switch($[Z]){case"#":yield*this.pushCount($.length-Z);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(BZ),"doc";case'"':case"'":return yield*this.parseQuotedScalar();case"|":case">":return Z+=yield*this.parseBlockScalarHeader(),Z+=yield*this.pushSpaces(!0),yield*this.pushCount($.length-Z),yield*this.pushNewline(),yield*this.parseBlockScalar();default:return yield*this.parsePlainScalar()}}*parseFlowCollection(){let $,Z,Q=-1;do{if($=yield*this.pushNewline(),$>0)Z=yield*this.pushSpaces(!1),this.indentValue=Q=Z;else Z=0;Z+=yield*this.pushSpaces(!0)}while($+Z>0);let z=this.getLine();if(z===null)return this.setNext("flow");if(Q!==-1&&Q<this.indentNext&&z[0]!=="#"||Q===0&&(z.startsWith("---")||z.startsWith("..."))&&D0(z[3])){if(!(Q===this.indentNext-1&&this.flowLevel===1&&(z[0]==="]"||z[0]==="}")))return this.flowLevel=0,yield f$.FLOW_END,yield*this.parseLineStart()}let X=0;while(z[X]===",")X+=yield*this.pushCount(1),X+=yield*this.pushSpaces(!0),this.flowKey=!1;switch(X+=yield*this.pushIndicators(),z[X]){case void 0:return"flow";case"#":return yield*this.pushCount(z.length-X),"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(BZ),"flow";case'"':case"'":return this.flowKey=!0,yield*this.parseQuotedScalar();case":":{let H=this.charAt(1);if(this.flowKey||D0(H)||H===",")return this.flowKey=!1,yield*this.pushCount(1),yield*this.pushSpaces(!0),"flow"}default:return this.flowKey=!1,yield*this.parsePlainScalar()}}*parseQuotedScalar(){let $=this.charAt(0),Z=this.buffer.indexOf($,this.pos+1);if($==="'")while(Z!==-1&&this.buffer[Z+1]==="'")Z=this.buffer.indexOf("'",Z+2);else while(Z!==-1){let X=0;while(this.buffer[Z-1-X]==="\\")X+=1;if(X%2===0)break;Z=this.buffer.indexOf('"',Z+1)}let Q=this.buffer.substring(0,Z),z=Q.indexOf(`
|
|
124
124
|
`,this.pos);if(z!==-1){while(z!==-1){let X=this.continueScalar(z+1);if(X===-1)break;z=Q.indexOf(`
|
|
125
125
|
`,X)}if(z!==-1)Z=z-(Q[z-1]==="\r"?2:1)}if(Z===-1){if(!this.atEnd)return this.setNext("quoted-scalar");Z=this.buffer.length}return yield*this.pushToIndex(Z+1,!1),this.flowLevel?"flow":"doc"}*parseBlockScalarHeader(){this.blockScalarIndent=-1,this.blockScalarKeep=!1;let $=this.pos;while(!0){let Z=this.buffer[++$];if(Z==="+")this.blockScalarKeep=!0;else if(Z>"0"&&Z<="9")this.blockScalarIndent=Number(Z)-1;else if(Z!=="-")break}return yield*this.pushUntil((Z)=>D0(Z)||Z==="#")}*parseBlockScalar(){let $=this.pos-1,Z=0,Q;$:for(let X=this.pos;Q=this.buffer[X];++X)switch(Q){case" ":Z+=1;break;case`
|
|
126
126
|
`:$=X,Z=0;break;case"\r":{let H=this.buffer[X+1];if(!H&&!this.atEnd)return this.setNext("block-scalar");if(H===`
|
|
@@ -130,53 +130,53 @@ ${Z.comment}`:Z.comment}this.doc.range[2]=Z.offset;break}default:this.errors.pus
|
|
|
130
130
|
`&&X>=this.pos&&X+1+Z>U)$=X;else break}while(!0);return yield f$.SCALAR,yield*this.pushToIndex($+1,!0),yield*this.parseLineStart()}*parsePlainScalar(){let $=this.flowLevel>0,Z=this.pos-1,Q=this.pos-1,z;while(z=this.buffer[++Q])if(z===":"){let X=this.buffer[Q+1];if(D0(X)||$&&z8.has(X))break;Z=Q}else if(D0(z)){let X=this.buffer[Q+1];if(z==="\r")if(X===`
|
|
131
131
|
`)Q+=1,z=`
|
|
132
132
|
`,X=this.buffer[Q+1];else Z=Q;if(X==="#"||$&&z8.has(X))break;if(z===`
|
|
133
|
-
`){let H=this.continueScalar(Q+1);if(H===-1)break;Q=Math.max(Q,H-2)}}else{if($&&z8.has(z))break;Z=Q}if(!z&&!this.atEnd)return this.setNext("plain-scalar");return yield f$.SCALAR,yield*this.pushToIndex(Z+1,!0),$?"flow":"doc"}*pushCount($){if($>0)return yield this.buffer.substr(this.pos,$),this.pos+=$,$;return 0}*pushToIndex($,Z){let Q=this.buffer.slice(this.pos,$);if(Q)return yield Q,this.pos+=Q.length,Q.length;else if(Z)yield"";return 0}*pushIndicators(){let $=0;$:while(!0){switch(this.charAt(0)){case"!":$+=yield*this.pushTag(),$+=yield*this.pushSpaces(!0);continue $;case"&":$+=yield*this.pushUntil(
|
|
133
|
+
`){let H=this.continueScalar(Q+1);if(H===-1)break;Q=Math.max(Q,H-2)}}else{if($&&z8.has(z))break;Z=Q}if(!z&&!this.atEnd)return this.setNext("plain-scalar");return yield f$.SCALAR,yield*this.pushToIndex(Z+1,!0),$?"flow":"doc"}*pushCount($){if($>0)return yield this.buffer.substr(this.pos,$),this.pos+=$,$;return 0}*pushToIndex($,Z){let Q=this.buffer.slice(this.pos,$);if(Q)return yield Q,this.pos+=Q.length,Q.length;else if(Z)yield"";return 0}*pushIndicators(){let $=0;$:while(!0){switch(this.charAt(0)){case"!":$+=yield*this.pushTag(),$+=yield*this.pushSpaces(!0);continue $;case"&":$+=yield*this.pushUntil(BZ),$+=yield*this.pushSpaces(!0);continue $;case"-":case"?":case":":{let Z=this.flowLevel>0,Q=this.charAt(1);if(D0(Q)||Z&&z8.has(Q)){if(!Z)this.indentNext=this.indentValue+1;else if(this.flowKey)this.flowKey=!1;$+=yield*this.pushCount(1),$+=yield*this.pushSpaces(!0);continue $}}}break $}return $}*pushTag(){if(this.charAt(1)==="<"){let $=this.pos+2,Z=this.buffer[$];while(!D0(Z)&&Z!==">")Z=this.buffer[++$];return yield*this.pushToIndex(Z===">"?$+1:$,!1)}else{let $=this.pos+1,Z=this.buffer[$];while(Z)if(EW.has(Z))Z=this.buffer[++$];else if(Z==="%"&&f7.has(this.buffer[$+1])&&f7.has(this.buffer[$+2]))Z=this.buffer[$+=3];else break;return yield*this.pushToIndex($,!1)}}*pushNewline(){let $=this.buffer[this.pos];if($===`
|
|
134
134
|
`)return yield*this.pushCount(1);else if($==="\r"&&this.charAt(1)===`
|
|
135
|
-
`)return yield*this.pushCount(2);else return 0}*pushSpaces($){let Z=this.pos-1,Q;do Q=this.buffer[++Z];while(Q===" "||$&&Q==="\t");let z=Z-this.pos;if(z>0)yield this.buffer.substr(this.pos,z),this.pos=Z;return z}*pushUntil($){let Z=this.pos,Q=this.buffer[Z];while(!$(Q))Q=this.buffer[++Z];return yield*this.pushToIndex(Z,!1)}}
|
|
135
|
+
`)return yield*this.pushCount(2);else return 0}*pushSpaces($){let Z=this.pos-1,Q;do Q=this.buffer[++Z];while(Q===" "||$&&Q==="\t");let z=Z-this.pos;if(z>0)yield this.buffer.substr(this.pos,z),this.pos=Z;return z}*pushUntil($){let Z=this.pos,Q=this.buffer[Z];while(!$(Q))Q=this.buffer[++Z];return yield*this.pushToIndex(Z,!1)}}yW.Lexer=m7});var KZ=M((gW)=>{class p7{constructor(){this.lineStarts=[],this.addNewLine=($)=>this.lineStarts.push($),this.linePos=($)=>{let Z=0,Q=this.lineStarts.length;while(Z<Q){let X=Z+Q>>1;if(this.lineStarts[X]<$)Z=X+1;else Q=X}if(this.lineStarts[Z]===$)return{line:Z+1,col:1};if(Z===0)return{line:0,col:$};let z=this.lineStarts[Z-1];return{line:Z,col:$-z+1}}}}gW.LineCounter=p7});var DZ=M((uW)=>{var kW=K$("process"),l7=Q8(),hW=qZ();function t0($,Z){for(let Q=0;Q<$.length;++Q)if($[Q].type===Z)return!0;return!1}function c7($){for(let Z=0;Z<$.length;++Z)switch($[Z].type){case"space":case"comment":case"newline":break;default:return Z}return-1}function i7($){switch($?.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"flow-collection":return!0;default:return!1}}function X8($){switch($.type){case"document":return $.start;case"block-map":{let Z=$.items[$.items.length-1];return Z.sep??Z.start}case"block-seq":return $.items[$.items.length-1].start;default:return[]}}function n2($){if($.length===0)return[];let Z=$.length;$:while(--Z>=0)switch($[Z].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break $}while($[++Z]?.type==="space");return $.splice(Z,$.length)}function H8($,Z){if(Z.length<1e5)Array.prototype.push.apply($,Z);else for(let Q=0;Q<Z.length;++Q)$.push(Z[Q])}function d7($){if($.start.type==="flow-seq-start"){for(let Z of $.items)if(Z.sep&&!Z.value&&!t0(Z.start,"explicit-key-ind")&&!t0(Z.sep,"map-value-ind")){if(Z.key)Z.value=Z.key;if(delete Z.key,i7(Z.value))if(Z.value.end)H8(Z.value.end,Z.sep);else Z.value.end=Z.sep;else H8(Z.start,Z.sep);delete Z.sep}}}class n7{constructor($){this.atNewLine=!0,this.atScalar=!1,this.indent=0,this.offset=0,this.onKeyLine=!1,this.stack=[],this.source="",this.type="",this.lexer=new hW.Lexer,this.onNewLine=$}*parse($,Z=!1){if(this.onNewLine&&this.offset===0)this.onNewLine(0);for(let Q of this.lexer.lex($,Z))yield*this.next(Q);if(!Z)yield*this.end()}*next($){if(this.source=$,kW.env.LOG_TOKENS)console.log("|",l7.prettyToken($));if(this.atScalar){this.atScalar=!1,yield*this.step(),this.offset+=$.length;return}let Z=l7.tokenType($);if(!Z){let Q=`Not a YAML token: ${$}`;yield*this.pop({type:"error",offset:this.offset,message:Q,source:$}),this.offset+=$.length}else if(Z==="scalar")this.atNewLine=!1,this.atScalar=!0,this.type="scalar";else{switch(this.type=Z,yield*this.step(),Z){case"newline":if(this.atNewLine=!0,this.indent=0,this.onNewLine)this.onNewLine(this.offset+$.length);break;case"space":if(this.atNewLine&&$[0]===" ")this.indent+=$.length;break;case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":if(this.atNewLine)this.indent+=$.length;break;case"doc-mode":case"flow-error-end":return;default:this.atNewLine=!1}this.offset+=$.length}}*end(){while(this.stack.length>0)yield*this.pop()}get sourceToken(){return{type:this.type,offset:this.offset,indent:this.indent,source:this.source}}*step(){let $=this.peek(1);if(this.type==="doc-end"&&$?.type!=="doc-end"){while(this.stack.length>0)yield*this.pop();this.stack.push({type:"doc-end",offset:this.offset,source:this.source});return}if(!$)return yield*this.stream();switch($.type){case"document":return yield*this.document($);case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*this.scalar($);case"block-scalar":return yield*this.blockScalar($);case"block-map":return yield*this.blockMap($);case"block-seq":return yield*this.blockSequence($);case"flow-collection":return yield*this.flowCollection($);case"doc-end":return yield*this.documentEnd($)}yield*this.pop()}peek($){return this.stack[this.stack.length-$]}*pop($){let Z=$??this.stack.pop();if(!Z)yield{type:"error",offset:this.offset,source:"",message:"Tried to pop an empty stack"};else if(this.stack.length===0)yield Z;else{let Q=this.peek(1);if(Z.type==="block-scalar")Z.indent="indent"in Q?Q.indent:0;else if(Z.type==="flow-collection"&&Q.type==="document")Z.indent=0;if(Z.type==="flow-collection")d7(Z);switch(Q.type){case"document":Q.value=Z;break;case"block-scalar":Q.props.push(Z);break;case"block-map":{let z=Q.items[Q.items.length-1];if(z.value){Q.items.push({start:[],key:Z,sep:[]}),this.onKeyLine=!0;return}else if(z.sep)z.value=Z;else{Object.assign(z,{key:Z,sep:[]}),this.onKeyLine=!z.explicitKey;return}break}case"block-seq":{let z=Q.items[Q.items.length-1];if(z.value)Q.items.push({start:[],value:Z});else z.value=Z;break}case"flow-collection":{let z=Q.items[Q.items.length-1];if(!z||z.value)Q.items.push({start:[],key:Z,sep:[]});else if(z.sep)z.value=Z;else Object.assign(z,{key:Z,sep:[]});return}default:yield*this.pop(),yield*this.pop(Z)}if((Q.type==="document"||Q.type==="block-map"||Q.type==="block-seq")&&(Z.type==="block-map"||Z.type==="block-seq")){let z=Z.items[Z.items.length-1];if(z&&!z.sep&&!z.value&&z.start.length>0&&c7(z.start)===-1&&(Z.indent===0||z.start.every((X)=>X.type!=="comment"||X.indent<Z.indent))){if(Q.type==="document")Q.end=z.start;else Q.items.push({start:z.start});Z.items.splice(-1,1)}}}}*stream(){switch(this.type){case"directive-line":yield{type:"directive",offset:this.offset,source:this.source};return;case"byte-order-mark":case"space":case"comment":case"newline":yield this.sourceToken;return;case"doc-mode":case"doc-start":{let $={type:"document",offset:this.offset,start:[]};if(this.type==="doc-start")$.start.push(this.sourceToken);this.stack.push($);return}}yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML stream`,source:this.source}}*document($){if($.value)return yield*this.lineEnd($);switch(this.type){case"doc-start":{if(c7($.start)!==-1)yield*this.pop(),yield*this.step();else $.start.push(this.sourceToken);return}case"anchor":case"tag":case"space":case"comment":case"newline":$.start.push(this.sourceToken);return}let Z=this.startBlockValue($);if(Z)this.stack.push(Z);else yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML document`,source:this.source}}*scalar($){if(this.type==="map-value-ind"){let Z=X8(this.peek(2)),Q=n2(Z),z;if($.end)z=$.end,z.push(this.sourceToken),delete $.end;else z=[this.sourceToken];let X={type:"block-map",offset:$.offset,indent:$.indent,items:[{start:Q,key:$,sep:z}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=X}else yield*this.lineEnd($)}*blockScalar($){switch(this.type){case"space":case"comment":case"newline":$.props.push(this.sourceToken);return;case"scalar":if($.source=this.source,this.atNewLine=!0,this.indent=0,this.onNewLine){let Z=this.source.indexOf(`
|
|
136
136
|
`)+1;while(Z!==0)this.onNewLine(this.offset+Z),Z=this.source.indexOf(`
|
|
137
|
-
`,Z)+1}yield*this.pop();break;default:yield*this.pop(),yield*this.step()}}*blockMap($){let Z=$.items[$.items.length-1];switch(this.type){case"newline":if(this.onKeyLine=!1,Z.value){let Q="end"in Z.value?Z.value.end:void 0;if((Array.isArray(Q)?Q[Q.length-1]:void 0)?.type==="comment")Q?.push(this.sourceToken);else $.items.push({start:[this.sourceToken]})}else if(Z.sep)Z.sep.push(this.sourceToken);else Z.start.push(this.sourceToken);return;case"space":case"comment":if(Z.value)$.items.push({start:[this.sourceToken]});else if(Z.sep)Z.sep.push(this.sourceToken);else{if(this.atIndentedComment(Z.start,$.indent)){let z=$.items[$.items.length-2]?.value?.end;if(Array.isArray(z)){H8(z,Z.start),z.push(this.sourceToken),$.items.pop();return}}Z.start.push(this.sourceToken)}return}if(this.indent>=$.indent){let Q=!this.onKeyLine&&this.indent===$.indent,z=Q&&(Z.sep||Z.explicitKey)&&this.type!=="seq-item-ind",X=[];if(z&&Z.sep&&!Z.value){let H=[];for(let U=0;U<Z.sep.length;++U){let J=Z.sep[U];switch(J.type){case"newline":H.push(U);break;case"space":break;case"comment":if(J.indent>$.indent)H.length=0;break;default:H.length=0}}if(H.length>=2)X=Z.sep.splice(H[1])}switch(this.type){case"anchor":case"tag":if(z||Z.value)X.push(this.sourceToken),$.items.push({start:X}),this.onKeyLine=!0;else if(Z.sep)Z.sep.push(this.sourceToken);else Z.start.push(this.sourceToken);return;case"explicit-key-ind":if(!Z.sep&&!Z.explicitKey)Z.start.push(this.sourceToken),Z.explicitKey=!0;else if(z||Z.value)X.push(this.sourceToken),$.items.push({start:X,explicitKey:!0});else this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]});this.onKeyLine=!0;return;case"map-value-ind":if(Z.explicitKey)if(!Z.sep)if(t0(Z.start,"newline"))Object.assign(Z,{key:null,sep:[this.sourceToken]});else{let H=n2(Z.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:H,key:null,sep:[this.sourceToken]}]})}else if(Z.value)$.items.push({start:[],key:null,sep:[this.sourceToken]});else if(t0(Z.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:X,key:null,sep:[this.sourceToken]}]});else if(
|
|
137
|
+
`,Z)+1}yield*this.pop();break;default:yield*this.pop(),yield*this.step()}}*blockMap($){let Z=$.items[$.items.length-1];switch(this.type){case"newline":if(this.onKeyLine=!1,Z.value){let Q="end"in Z.value?Z.value.end:void 0;if((Array.isArray(Q)?Q[Q.length-1]:void 0)?.type==="comment")Q?.push(this.sourceToken);else $.items.push({start:[this.sourceToken]})}else if(Z.sep)Z.sep.push(this.sourceToken);else Z.start.push(this.sourceToken);return;case"space":case"comment":if(Z.value)$.items.push({start:[this.sourceToken]});else if(Z.sep)Z.sep.push(this.sourceToken);else{if(this.atIndentedComment(Z.start,$.indent)){let z=$.items[$.items.length-2]?.value?.end;if(Array.isArray(z)){H8(z,Z.start),z.push(this.sourceToken),$.items.pop();return}}Z.start.push(this.sourceToken)}return}if(this.indent>=$.indent){let Q=!this.onKeyLine&&this.indent===$.indent,z=Q&&(Z.sep||Z.explicitKey)&&this.type!=="seq-item-ind",X=[];if(z&&Z.sep&&!Z.value){let H=[];for(let U=0;U<Z.sep.length;++U){let J=Z.sep[U];switch(J.type){case"newline":H.push(U);break;case"space":break;case"comment":if(J.indent>$.indent)H.length=0;break;default:H.length=0}}if(H.length>=2)X=Z.sep.splice(H[1])}switch(this.type){case"anchor":case"tag":if(z||Z.value)X.push(this.sourceToken),$.items.push({start:X}),this.onKeyLine=!0;else if(Z.sep)Z.sep.push(this.sourceToken);else Z.start.push(this.sourceToken);return;case"explicit-key-ind":if(!Z.sep&&!Z.explicitKey)Z.start.push(this.sourceToken),Z.explicitKey=!0;else if(z||Z.value)X.push(this.sourceToken),$.items.push({start:X,explicitKey:!0});else this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]});this.onKeyLine=!0;return;case"map-value-ind":if(Z.explicitKey)if(!Z.sep)if(t0(Z.start,"newline"))Object.assign(Z,{key:null,sep:[this.sourceToken]});else{let H=n2(Z.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:H,key:null,sep:[this.sourceToken]}]})}else if(Z.value)$.items.push({start:[],key:null,sep:[this.sourceToken]});else if(t0(Z.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:X,key:null,sep:[this.sourceToken]}]});else if(i7(Z.key)&&!t0(Z.sep,"newline")){let H=n2(Z.start),U=Z.key,J=Z.sep;J.push(this.sourceToken),delete Z.key,delete Z.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:H,key:U,sep:J}]})}else if(X.length>0)Z.sep=Z.sep.concat(X,this.sourceToken);else Z.sep.push(this.sourceToken);else if(!Z.sep)Object.assign(Z,{key:null,sep:[this.sourceToken]});else if(Z.value||z)$.items.push({start:X,key:null,sep:[this.sourceToken]});else if(t0(Z.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]});else Z.sep.push(this.sourceToken);this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let H=this.flowScalar(this.type);if(z||Z.value)$.items.push({start:X,key:H,sep:[]}),this.onKeyLine=!0;else if(Z.sep)this.stack.push(H);else Object.assign(Z,{key:H,sep:[]}),this.onKeyLine=!0;return}default:{let H=this.startBlockValue($);if(H){if(H.type==="block-seq"){if(!Z.explicitKey&&Z.sep&&!t0(Z.sep,"newline")){yield*this.pop({type:"error",offset:this.offset,message:"Unexpected block-seq-ind on same line with key",source:this.source});return}}else if(Q)$.items.push({start:X});this.stack.push(H);return}}}}yield*this.pop(),yield*this.step()}*blockSequence($){let Z=$.items[$.items.length-1];switch(this.type){case"newline":if(Z.value){let Q="end"in Z.value?Z.value.end:void 0;if((Array.isArray(Q)?Q[Q.length-1]:void 0)?.type==="comment")Q?.push(this.sourceToken);else $.items.push({start:[this.sourceToken]})}else Z.start.push(this.sourceToken);return;case"space":case"comment":if(Z.value)$.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(Z.start,$.indent)){let z=$.items[$.items.length-2]?.value?.end;if(Array.isArray(z)){H8(z,Z.start),z.push(this.sourceToken),$.items.pop();return}}Z.start.push(this.sourceToken)}return;case"anchor":case"tag":if(Z.value||this.indent<=$.indent)break;Z.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==$.indent)break;if(Z.value||t0(Z.start,"seq-item-ind"))$.items.push({start:[this.sourceToken]});else Z.start.push(this.sourceToken);return}if(this.indent>$.indent){let Q=this.startBlockValue($);if(Q){this.stack.push(Q);return}}yield*this.pop(),yield*this.step()}*flowCollection($){let Z=$.items[$.items.length-1];if(this.type==="flow-error-end"){let Q;do yield*this.pop(),Q=this.peek(1);while(Q?.type==="flow-collection")}else if($.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":if(!Z||Z.sep)$.items.push({start:[this.sourceToken]});else Z.start.push(this.sourceToken);return;case"map-value-ind":if(!Z||Z.value)$.items.push({start:[],key:null,sep:[this.sourceToken]});else if(Z.sep)Z.sep.push(this.sourceToken);else Object.assign(Z,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":if(!Z||Z.value)$.items.push({start:[this.sourceToken]});else if(Z.sep)Z.sep.push(this.sourceToken);else Z.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let z=this.flowScalar(this.type);if(!Z||Z.value)$.items.push({start:[],key:z,sep:[]});else if(Z.sep)this.stack.push(z);else Object.assign(Z,{key:z,sep:[]});return}case"flow-map-end":case"flow-seq-end":$.end.push(this.sourceToken);return}let Q=this.startBlockValue($);if(Q)this.stack.push(Q);else yield*this.pop(),yield*this.step()}else{let Q=this.peek(2);if(Q.type==="block-map"&&(this.type==="map-value-ind"&&Q.indent===$.indent||this.type==="newline"&&!Q.items[Q.items.length-1].sep))yield*this.pop(),yield*this.step();else if(this.type==="map-value-ind"&&Q.type!=="flow-collection"){let z=X8(Q),X=n2(z);d7($);let H=$.end.splice(1,$.end.length);H.push(this.sourceToken);let U={type:"block-map",offset:$.offset,indent:$.indent,items:[{start:X,key:$,sep:H}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=U}else yield*this.lineEnd($)}}flowScalar($){if(this.onNewLine){let Z=this.source.indexOf(`
|
|
138
138
|
`)+1;while(Z!==0)this.onNewLine(this.offset+Z),Z=this.source.indexOf(`
|
|
139
|
-
`,Z)+1}return{type:$,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue($){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let Z=X8($),Q=n2(Z);return Q.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:Q,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let Z=X8($),Q=n2(Z);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:Q,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment($,Z){if(this.type!=="comment")return!1;if(this.indent<=Z)return!1;return $.every((Q)=>Q.type==="newline"||Q.type==="space")}*documentEnd($){if(this.type!=="doc-mode"){if($.end)$.end.push(this.sourceToken);else $.end=[this.sourceToken];if(this.type==="newline")yield*this.pop()}}*lineEnd($){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;case"space":case"comment":default:if($.end)$.end.push(this.sourceToken);else $.end=[this.sourceToken];if(this.type==="newline")yield*this.pop()}}}kW.Parser=i7});var a7=M((iW)=>{var n7=zZ(),uW=g$(),m$=v$(),fW=q5(),mW=x(),pW=qZ(),r7=KZ();function s7($){let Z=$.prettyErrors!==!1;return{lineCounter:$.lineCounter||Z&&new pW.LineCounter||null,prettyErrors:Z}}function lW($,Z={}){let{lineCounter:Q,prettyErrors:z}=s7(Z),X=new r7.Parser(Q?.addNewLine),H=new n7.Composer(Z),U=Array.from(H.compose(X.parse($)));if(z&&Q)for(let J of U)J.errors.forEach(m$.prettifyError($,Q)),J.warnings.forEach(m$.prettifyError($,Q));if(U.length>0)return U;return Object.assign([],{empty:!0},H.streamInfo())}function o7($,Z={}){let{lineCounter:Q,prettyErrors:z}=s7(Z),X=new r7.Parser(Q?.addNewLine),H=new n7.Composer(Z),U=null;for(let J of H.compose(X.parse($),!0,$.length))if(!U)U=J;else if(U.options.logLevel!=="silent"){U.errors.push(new m$.YAMLParseError(J.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}if(z&&Q)U.errors.forEach(m$.prettifyError($,Q)),U.warnings.forEach(m$.prettifyError($,Q));return U}function cW($,Z,Q){let z=void 0;if(typeof Z==="function")z=Z;else if(Q===void 0&&Z&&typeof Z==="object")Q=Z;let X=o7($,Q);if(!X)return null;if(X.warnings.forEach((H)=>fW.warn(X.options.logLevel,H)),X.errors.length>0)if(X.options.logLevel!=="silent")throw X.errors[0];else X.errors=[];return X.toJS(Object.assign({reviver:z},Q))}function dW($,Z,Q){let z=null;if(typeof Z==="function"||Array.isArray(Z))z=Z;else if(Q===void 0&&Z)Q=Z;if(typeof Q==="string")Q=Q.length;if(typeof Q==="number"){let X=Math.round(Q);Q=X<1?void 0:X>8?{indent:8}:{indent:X}}if($===void 0){let{keepUndefined:X}=Q??Z??{};if(!X)return}if(mW.isDocument($)&&!z)return $.toString(Q);return new uW.Document($,z,Q).toString(Q)}iW.parse=cW;iW.parseAllDocuments=lW;iW.parseDocument=o7;iW.stringify=dW});var m=[{index:1,path:"project.name",label:"Name",description:"Project name",category:"project"},{index:2,path:"project.goal",label:"Goal",description:"Goal (use case)",category:"project"},{index:3,path:"project.main_language",label:"Language",description:"Primary language",category:"project"},{index:4,path:"human_context.who",label:"Who",description:"Who is this for?",category:"human"},{index:5,path:"human_context.what",label:"What",description:"What are they building",category:"human"},{index:6,path:"human_context.why",label:"Why",description:"Why does it exist",category:"human"},{index:7,path:"human_context.where",label:"Where",description:"Where does it run",category:"human"},{index:8,path:"human_context.when",label:"When",description:"When was it started / timeline",category:"human"},{index:9,path:"human_context.how",label:"How",description:"How is it built",category:"human"},{index:10,path:"stack.frontend",canonical:"stack.framework",label:"Framework",description:"Framework (React, Svelte, etc.)",category:"frontend"},{index:11,path:"stack.css_framework",canonical:"stack.css",label:"CSS",description:"CSS framework",category:"frontend"},{index:12,path:"stack.ui_library",label:"UI Library",description:"UI component library",category:"frontend"},{index:13,path:"stack.state_management",canonical:"stack.state",label:"State",description:"State management",category:"frontend"},{index:14,path:"stack.backend",label:"Backend",description:"Backend framework",category:"backend"},{index:15,path:"stack.api_type",canonical:"stack.api",label:"API",description:"API style (REST, GraphQL, etc.)",category:"backend"},{index:16,path:"stack.runtime",label:"Runtime",description:"Runtime (Node, Bun, Python, etc.)",category:"backend"},{index:17,path:"stack.database",canonical:"stack.db",label:"Database",description:"Database",category:"backend"},{index:18,path:"stack.connection",label:"Connection",description:"Connection method (Prisma, etc.)",category:"backend"},{index:19,path:"stack.hosting",label:"Hosting",description:"Hosting platform",category:"universal"},{index:20,path:"stack.build",label:"Build",description:"Build tool",category:"universal"},{index:21,path:"stack.cicd",label:"CI/CD",description:"CI/CD",category:"universal"},{index:22,path:"stack.monorepo_tool",label:"Monorepo",description:"Monorepo tool",category:"enterprise_infra"},{index:23,path:"stack.package_manager",canonical:"stack.pkg_manager",label:"Package Manager",description:"Package manager",category:"enterprise_infra"},{index:24,path:"stack.workspaces",label:"Workspaces",description:"Workspace configuration",category:"enterprise_infra"},{index:25,path:"monorepo.packages_count",label:"Packages",description:"Number of packages",category:"enterprise_infra"},{index:26,path:"monorepo.build_orchestrator",label:"Build Orchestrator",description:"Build orchestration tool",category:"enterprise_infra"},{index:27,path:"stack.admin",label:"Admin",description:"Admin panel",category:"enterprise_app"},{index:28,path:"stack.cache",label:"Cache",description:"Caching layer",category:"enterprise_app"},{index:29,path:"stack.search",label:"Search",description:"Search engine",category:"enterprise_app"},{index:30,path:"stack.storage",label:"Storage",description:"Object storage",category:"enterprise_app"},{index:31,path:"monorepo.versioning_strategy",label:"Versioning",description:"Version strategy",category:"enterprise_ops"},{index:32,path:"monorepo.shared_configs",label:"Shared Configs",description:"Shared configs",category:"enterprise_ops"},{index:33,path:"monorepo.remote_cache",label:"Remote Cache",description:"Remote build cache",category:"enterprise_ops"}],g0=new Map(m.flatMap(($)=>$.canonical?[[$.path,$],[$.canonical,$]]:[[$.path,$]])),k1=new Map(m.filter(($)=>$.canonical).map(($)=>[$.canonical,$.path])),AM=new Map(m.filter(($)=>$.canonical).map(($)=>[$.path,$.canonical]));function h1($,Z){let Q=(X)=>{let H=X.split("."),U=$;for(let J of H)if(U&&typeof U==="object"&&J in U)U=U[J];else return;return U},z=Q(Z.path);if(z!==void 0)return z;if(Z.canonical)return Q(Z.canonical);return}function Tz($){return m.filter((Z)=>Z.category===$)}var Az=m.filter(($)=>$.index<=21),Cz=m,D6=new Set(["describe your project goal","development teams","cloud platform","null","none","unknown","tbd","todo","n/a","not applicable"]),u1=new Set(["none","n/a","not applicable"]),L6="slotignored";function jz($){return typeof $==="string"&&u1.has($.trim().toLowerCase())}function a8($){return typeof $==="string"&&$.trim()!==""&&o($)}function o($){if($===null||$===void 0||$==="")return!0;if(typeof $==="string")return D6.has($.toLowerCase().trim());if(Array.isArray($)&&$.length===0)return!0;if(typeof $==="object"&&Object.keys($).length===0)return!0;return!1}var y2="no classifying signals — fallback",wz=new Set(["stack.css_framework","stack.ui_library","stack.database","stack.connection","stack.hosting"]);function x2($,Z){if(typeof $!=="string"||!Object.prototype.hasOwnProperty.call(b2,$))return null;if(!b2[$].includes(Z.category))return!1;return!($==="framework"&&wz.has(Z.path))}var b2={documentation:["project","human"],intent:["project","human"],encyclopedia:["project","human"],cli:["project","human","universal"],library:["project","human","universal"],sdk:["project","human","universal"],wasm:["project","human","universal"],html:["project","human","universal"],"server-card":["project","human","universal"],frontend:["project","frontend","human","universal"],website:["project","frontend","human","universal"],mobile:["project","frontend","human","universal"],app:["project","frontend","human","universal"],extension:["project","frontend","human","universal"],mcp:["project","backend","human","universal"],backend:["project","backend","universal","human"],"data-science":["project","backend","human","universal"],fullstack:["project","frontend","backend","universal","human"],svelte:["project","frontend","backend","universal","human"],framework:["project","frontend","backend","universal","human"],"monorepo-root":["project","human","enterprise_infra","enterprise_app","enterprise_ops"],mcpaas:["project","backend","universal","human","enterprise_app","enterprise_ops"],saas:["project","frontend","backend","universal","human","enterprise_app"],enterprise:["project","frontend","backend","universal","human","enterprise_infra","enterprise_app","enterprise_ops"]};var t8=($)=>(Z)=>`\x1B[${$}m${Z}\x1B[0m`,D$=t8("1"),g2=t8("2"),jM=t8("3"),L$={cyan:"#00D4D4",cyanDeep:"#0E8C8C",orange:"#FF6B35"},I$=($)=>`\x1B[38;2;0;212;212m${$}\x1B[0m`,e8=($)=>`\x1B[38;2;14;140;140m${$}\x1B[0m`,v2=($)=>`\x1B[38;5;208m${$}\x1B[0m`;var v0=[{name:"TROPHY",indicator:`${v2("✪")} ${v2("TROPHY")}`,threshold:100},{name:"GOLD",indicator:`${v2(D$("★"))} ${v2("GOLD")}`,threshold:99},{name:"SILVER",indicator:`${I$("◆")} ${I$("SILVER")}`,threshold:95},{name:"BRONZE",indicator:`${e8("◇")} ${e8("BRONZE")}`,threshold:85},{name:"GREEN",indicator:`${D$("●")} GREEN`,threshold:70},{name:"YELLOW",indicator:`${g2("●")} YELLOW`,threshold:55},{name:"RED",indicator:`${g2("○")} RED`,threshold:1},{name:"WHITE",indicator:`${g2("♡")}`,threshold:0}];function O$($){for(let Z of v0)if($>=Z.threshold)return Z;return v0[v0.length-1]}function Sz($){let Z=O$($),Q=v0.indexOf(Z);return Q>0?v0[Q-1]:null}var z5={};Rz(z5,{validate:()=>bz,sdkVersion:()=>kz,scoreFafb:()=>vz,scoreEnterprise:()=>Ez,score:()=>Q5,fafbInfo:()=>gz,decompile:()=>xz,compile:()=>yz});var $5=null;function c0(){if($5)return $5;try{let $=K$("faf-scoring-kernel");return $5=$,$}catch{throw Error(`faf-scoring-kernel not installed.
|
|
139
|
+
`,Z)+1}return{type:$,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue($){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let Z=X8($),Q=n2(Z);return Q.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:Q,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let Z=X8($),Q=n2(Z);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:Q,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment($,Z){if(this.type!=="comment")return!1;if(this.indent<=Z)return!1;return $.every((Q)=>Q.type==="newline"||Q.type==="space")}*documentEnd($){if(this.type!=="doc-mode"){if($.end)$.end.push(this.sourceToken);else $.end=[this.sourceToken];if(this.type==="newline")yield*this.pop()}}*lineEnd($){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;case"space":case"comment":default:if($.end)$.end.push(this.sourceToken);else $.end=[this.sourceToken];if(this.type==="newline")yield*this.pop()}}}uW.Parser=n7});var t7=M((rW)=>{var r7=XZ(),mW=g$(),m$=v$(),pW=K5(),lW=x(),cW=KZ(),s7=DZ();function o7($){let Z=$.prettyErrors!==!1;return{lineCounter:$.lineCounter||Z&&new cW.LineCounter||null,prettyErrors:Z}}function dW($,Z={}){let{lineCounter:Q,prettyErrors:z}=o7(Z),X=new s7.Parser(Q?.addNewLine),H=new r7.Composer(Z),U=Array.from(H.compose(X.parse($)));if(z&&Q)for(let J of U)J.errors.forEach(m$.prettifyError($,Q)),J.warnings.forEach(m$.prettifyError($,Q));if(U.length>0)return U;return Object.assign([],{empty:!0},H.streamInfo())}function a7($,Z={}){let{lineCounter:Q,prettyErrors:z}=o7(Z),X=new s7.Parser(Q?.addNewLine),H=new r7.Composer(Z),U=null;for(let J of H.compose(X.parse($),!0,$.length))if(!U)U=J;else if(U.options.logLevel!=="silent"){U.errors.push(new m$.YAMLParseError(J.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}if(z&&Q)U.errors.forEach(m$.prettifyError($,Q)),U.warnings.forEach(m$.prettifyError($,Q));return U}function iW($,Z,Q){let z=void 0;if(typeof Z==="function")z=Z;else if(Q===void 0&&Z&&typeof Z==="object")Q=Z;let X=a7($,Q);if(!X)return null;if(X.warnings.forEach((H)=>pW.warn(X.options.logLevel,H)),X.errors.length>0)if(X.options.logLevel!=="silent")throw X.errors[0];else X.errors=[];return X.toJS(Object.assign({reviver:z},Q))}function nW($,Z,Q){let z=null;if(typeof Z==="function"||Array.isArray(Z))z=Z;else if(Q===void 0&&Z)Q=Z;if(typeof Q==="string")Q=Q.length;if(typeof Q==="number"){let X=Math.round(Q);Q=X<1?void 0:X>8?{indent:8}:{indent:X}}if($===void 0){let{keepUndefined:X}=Q??Z??{};if(!X)return}if(lW.isDocument($)&&!z)return $.toString(Q);return new mW.Document($,z,Q).toString(Q)}rW.parse=iW;rW.parseAllDocuments=dW;rW.parseDocument=a7;rW.stringify=nW});var m=[{index:1,path:"project.name",label:"Name",description:"Project name",category:"project"},{index:2,path:"project.goal",label:"Goal",description:"Goal (use case)",category:"project"},{index:3,path:"project.main_language",label:"Language",description:"Primary language",category:"project"},{index:4,path:"human_context.who",label:"Who",description:"Who is this for?",category:"human"},{index:5,path:"human_context.what",label:"What",description:"What are they building",category:"human"},{index:6,path:"human_context.why",label:"Why",description:"Why does it exist",category:"human"},{index:7,path:"human_context.where",label:"Where",description:"Where does it run",category:"human"},{index:8,path:"human_context.when",label:"When",description:"When was it started / timeline",category:"human"},{index:9,path:"human_context.how",label:"How",description:"How is it built",category:"human"},{index:10,path:"stack.frontend",canonical:"stack.framework",label:"Framework",description:"Framework (React, Svelte, etc.)",category:"frontend"},{index:11,path:"stack.css_framework",canonical:"stack.css",label:"CSS",description:"CSS framework",category:"frontend"},{index:12,path:"stack.ui_library",label:"UI Library",description:"UI component library",category:"frontend"},{index:13,path:"stack.state_management",canonical:"stack.state",label:"State",description:"State management",category:"frontend"},{index:14,path:"stack.backend",label:"Backend",description:"Backend framework",category:"backend"},{index:15,path:"stack.api_type",canonical:"stack.api",label:"API",description:"API style (REST, GraphQL, etc.)",category:"backend"},{index:16,path:"stack.runtime",label:"Runtime",description:"Runtime (Node, Bun, Python, etc.)",category:"backend"},{index:17,path:"stack.database",canonical:"stack.db",label:"Database",description:"Database",category:"backend"},{index:18,path:"stack.connection",label:"Connection",description:"Connection method (Prisma, etc.)",category:"backend"},{index:19,path:"stack.hosting",label:"Hosting",description:"Hosting platform",category:"universal"},{index:20,path:"stack.build",label:"Build",description:"Build tool",category:"universal"},{index:21,path:"stack.cicd",label:"CI/CD",description:"CI/CD",category:"universal"},{index:22,path:"stack.monorepo_tool",label:"Monorepo",description:"Monorepo tool",category:"enterprise_infra"},{index:23,path:"stack.package_manager",canonical:"stack.pkg_manager",label:"Package Manager",description:"Package manager",category:"enterprise_infra"},{index:24,path:"stack.workspaces",label:"Workspaces",description:"Workspace configuration",category:"enterprise_infra"},{index:25,path:"monorepo.packages_count",label:"Packages",description:"Number of packages",category:"enterprise_infra"},{index:26,path:"monorepo.build_orchestrator",label:"Build Orchestrator",description:"Build orchestration tool",category:"enterprise_infra"},{index:27,path:"stack.admin",label:"Admin",description:"Admin panel",category:"enterprise_app"},{index:28,path:"stack.cache",label:"Cache",description:"Caching layer",category:"enterprise_app"},{index:29,path:"stack.search",label:"Search",description:"Search engine",category:"enterprise_app"},{index:30,path:"stack.storage",label:"Storage",description:"Object storage",category:"enterprise_app"},{index:31,path:"monorepo.versioning_strategy",label:"Versioning",description:"Version strategy",category:"enterprise_ops"},{index:32,path:"monorepo.shared_configs",label:"Shared Configs",description:"Shared configs",category:"enterprise_ops"},{index:33,path:"monorepo.remote_cache",label:"Remote Cache",description:"Remote build cache",category:"enterprise_ops"}],g0=new Map(m.flatMap(($)=>$.canonical?[[$.path,$],[$.canonical,$]]:[[$.path,$]])),h1=new Map(m.filter(($)=>$.canonical).map(($)=>[$.canonical,$.path])),bM=new Map(m.filter(($)=>$.canonical).map(($)=>[$.path,$.canonical]));function u1($,Z){let Q=(X)=>{let H=X.split("."),U=$;for(let J of H)if(U&&typeof U==="object"&&J in U)U=U[J];else return;return U},z=Q(Z.path);if(z!==void 0)return z;if(Z.canonical)return Q(Z.canonical);return}function Cz($){return m.filter((Z)=>Z.category===$)}var jz=m.filter(($)=>$.index<=21),wz=m,D6=new Set(["describe your project goal","development teams","cloud platform","null","none","unknown","tbd","todo","n/a","not applicable"]),f1=new Set(["none","n/a","not applicable"]),L6="slotignored";function Sz($){return typeof $==="string"&&f1.has($.trim().toLowerCase())}function t8($){return typeof $==="string"&&$.trim()!==""&&o($)}function o($){if($===null||$===void 0||$==="")return!0;if(typeof $==="string")return D6.has($.toLowerCase().trim());if(Array.isArray($)&&$.length===0)return!0;if(typeof $==="object"&&Object.keys($).length===0)return!0;return!1}var y2="no classifying signals — fallback",Ez=new Set(["stack.css_framework","stack.ui_library","stack.database","stack.connection","stack.hosting"]);function x2($,Z){if(typeof $!=="string"||!Object.prototype.hasOwnProperty.call(b2,$))return null;if(!b2[$].includes(Z.category))return!1;return!($==="framework"&&Ez.has(Z.path))}var b2={documentation:["project","human"],intent:["project","human"],encyclopedia:["project","human"],cli:["project","human","universal"],library:["project","human","universal"],sdk:["project","human","universal"],wasm:["project","human","universal"],html:["project","human","universal"],"server-card":["project","human","universal"],frontend:["project","frontend","human","universal"],website:["project","frontend","human","universal"],mobile:["project","frontend","human","universal"],app:["project","frontend","human","universal"],extension:["project","frontend","human","universal"],mcp:["project","backend","human","universal"],backend:["project","backend","universal","human"],"data-science":["project","backend","human","universal"],fullstack:["project","frontend","backend","universal","human"],svelte:["project","frontend","backend","universal","human"],framework:["project","frontend","backend","universal","human"],"monorepo-root":["project","human","enterprise_infra","enterprise_app","enterprise_ops"],mcpaas:["project","backend","universal","human","enterprise_app","enterprise_ops"],saas:["project","frontend","backend","universal","human","enterprise_app"],enterprise:["project","frontend","backend","universal","human","enterprise_infra","enterprise_app","enterprise_ops"]};var e8=($)=>(Z)=>`\x1B[${$}m${Z}\x1B[0m`,D$=e8("1"),g2=e8("2"),xM=e8("3"),L$={cyan:"#00D4D4",cyanDeep:"#0E8C8C",orange:"#FF6B35"},I$=($)=>`\x1B[38;2;0;212;212m${$}\x1B[0m`,$5=($)=>`\x1B[38;2;14;140;140m${$}\x1B[0m`,v2=($)=>`\x1B[38;5;208m${$}\x1B[0m`;var v0=[{name:"TROPHY",indicator:`${v2("✪")} ${v2("TROPHY")}`,threshold:100},{name:"GOLD",indicator:`${v2(D$("★"))} ${v2("GOLD")}`,threshold:99},{name:"SILVER",indicator:`${I$("◆")} ${I$("SILVER")}`,threshold:95},{name:"BRONZE",indicator:`${$5("◇")} ${$5("BRONZE")}`,threshold:85},{name:"GREEN",indicator:`${D$("●")} GREEN`,threshold:70},{name:"YELLOW",indicator:`${g2("●")} YELLOW`,threshold:55},{name:"RED",indicator:`${g2("○")} RED`,threshold:1},{name:"WHITE",indicator:`${g2("♡")}`,threshold:0}];function O$($){for(let Z of v0)if($>=Z.threshold)return Z;return v0[v0.length-1]}function bz($){let Z=O$($),Q=v0.indexOf(Z);return Q>0?v0[Q-1]:null}var X5={};Tz(X5,{validate:()=>xz,sdkVersion:()=>uz,scoreFafb:()=>hz,scoreEnterprise:()=>yz,score:()=>z5,fafbInfo:()=>kz,decompile:()=>vz,compile:()=>gz});var Z5=null;function c0(){if(Z5)return Z5;try{let $=K$("faf-scoring-kernel");return Z5=$,$}catch{throw Error(`faf-scoring-kernel not installed.
|
|
140
140
|
|
|
141
141
|
Run: npm install faf-scoring-kernel
|
|
142
|
-
`)}}var I6=($)=>$.startsWith("\uFEFF")?$.slice(1):$;function Z5($){let Z={};for(let[Q,z]of Object.entries($.slots??{}))Z[k1.get(Q)??Q]=z;return{...$,slots:Z}}function Q5($){return Z5(JSON.parse(c0().score_faf(I6($))))}function Ez($){return Z5(JSON.parse(c0().score_faf_enterprise(I6($))))}function bz($){return c0().validate_faf(I6($))}function yz($){return c0().compile_fafb(I6($))}function xz($){return JSON.parse(c0().decompile_fafb($))}function gz($){return JSON.parse(c0().fafb_info($))}function vz($){return Z5(JSON.parse(c0().score_fafb($)))}function kz(){return c0().sdk_version()}var f1=/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;function m1($){let Z=$?.about?.represents;return typeof Z==="string"&&Z.length>0}function p1($){let Z=$.match(/^about:\s*\n((?:[ \t]+.*\n?)*)/m);if(!Z)return null;let Q=Z[1]??"",z=Q.match(/^[ \t]+represents:\s*(\S+)\s*$/m);if(!z)return null;let X=z[1],H=Q.match(/^[ \t]+source_score:\s*(\d+)\s*$/m),U=-1;if(H){let J=parseInt(H[1],10);if(J>=0&&J<=100)U=J}return{represents:X,sourceScore:U}}function hz($){return $.unknown?"unknown (—)":`${$.score}%`}function l1($){return{score:$.score,tier:O$($.score),populated:$.populated,empty:$.empty,ignored:$.ignored,active:$.active,total:$.total,slots:$.slots}}function X5($){let Z=p1($);if(Z){let Q=Z.sourceScore;return{score:Q,tier:Q>=0?O$(Q):v0[v0.length-1],populated:0,empty:0,ignored:0,active:0,total:0,slots:{},inherited:!0,represents:Z.represents,...Q<0?{unknown:!0}:{}}}return l1(Q5($))}function uz($){let Z=[];if(!$||typeof $!=="object")return Z.push("File is not a valid YAML mapping"),{valid:!1,errors:Z};let Q=$;if(!Q.faf_version)Z.push("Missing required field: faf_version");if(!Q.project?.name)Z.push("Missing required field: project.name");if(Q.app_type==="about")Z.push("about is not an app_type — declare about.represents (owner/repo) instead");if(Q.about!==void 0){if(!m1(Q)||typeof Q.about.represents!=="string")Z.push("about.represents is required (owner/repo of the source codebase)");else if(!f1.test(Q.about.represents))Z.push(`about.represents must be "owner/repo" format (got: ${Q.about.represents})`);if(Q.about.source_score!==void 0){let z=Q.about.source_score;if(typeof z!=="number"||z<0||z>100)Z.push(`about.source_score must be a number 0-100 (got: ${z})`)}}return{valid:Z.length===0,errors:Z}}import{lstatSync as p9}from"fs";import{join as u9,dirname as xZ,basename as OF,resolve as t$}from"path";var aW=zZ(),tW=g$(),eW=m5(),DZ=v$(),$B=P$(),e0=x(),ZB=r0(),QB=d(),zB=o0(),XB=a0(),QF=Q8(),HB=BZ(),UB=qZ(),JB=KZ(),U8=a7(),t7=_$();var GB=aW.Composer,J8=tW.Document,VB=eW.Schema,YB=DZ.YAMLError,G8=DZ.YAMLParseError,WB=DZ.YAMLWarning,BB=$B.Alias,u0=e0.isAlias,B2=e0.isCollection,qB=e0.isDocument,p=e0.isMap,L0=e0.isNode,KB=e0.isPair,s=e0.isScalar,f0=e0.isSeq,DB=ZB.Pair,LB=QB.Scalar,r2=zB.YAMLMap,p$=XB.YAMLSeq;var IB=HB.Lexer,OB=UB.LineCounter,_B=JB.Parser,m0=U8.parse,MB=U8.parseAllDocuments,s2=U8.parseDocument,q2=U8.stringify,PB=t7.visit,FB=t7.visitAsync;import{accessSync as e7,closeSync as _Z,constants as $9,existsSync as RB,fchmodSync as Z9,fchownSync as NB,fsyncSync as Q9,lstatSync as MZ,mkdirSync as z9,mkdtempSync as HF,openSync as X9,readdirSync as TB,readFileSync as PZ,readlinkSync as AB,realpathSync as CB,renameSync as jB,rmSync as UF,statSync as o2,unlinkSync as H9,writeFileSync as wB}from"fs";import{randomBytes as SB}from"crypto";import{basename as $2,dirname as K2,isAbsolute as U9,join as a2,relative as FZ,resolve as V0,sep as V8}from"path";class b extends Error{reason;path;onWrite;constructor($,Z,Q,z={}){super(Q,z.cause===void 0?void 0:{cause:z.cause});this.name="SafePathError",this.reason=$,this.path=Z,this.onWrite=z.onWrite===!0}}var t=Object.freeze({claude:"CLAUDE.md",agents:"AGENTS.md",gemini:"GEMINI.md",cursorrules:".cursorrules",copilot:"copilot-instructions.md",memory:"MEMORY.md",llms:"llms.txt"}),EB=new Set(Object.values(t).map(($)=>$.toLowerCase())),bB=($,Z)=>$.toLowerCase()===Z.toLowerCase(),LZ=($)=>EB.has($.toLowerCase());function t2($){return $.split(/[\\/]/).some((Z)=>Z.toLowerCase()===".git")}var yB=/\.fafm?$/i,xB=/^[a-z][a-z0-9-]*$/,w0=($)=>CB.native($),Z2=($)=>$?.code;function c$($,Z){let Q=FZ($,Z);return Q===""||Q!==".."&&!Q.startsWith(`..${V8}`)&&!U9(Q)}function J9($){try{return AB($)}catch{return"?"}}function gB($,Z,Q,z){let X;try{X=w0(Q)}catch(H){let U=Z2(H);if(U==="ENOENT"||U==="ELOOP"||U==="ENOTDIR")throw new b("dangling",Z,`${Z} is a link to ${J9(Q)}, which does not exist. faf does not create files through a link — refused.`);throw H}if(!c$($,X))throw new b("outside",Z,`${Z} is a link to ${X}, outside ${$} — refused.`);if(t2(X)&&!(z.inGit&&K2(X)===$))throw new b("git",Z,`${Z} is a link to ${X}, inside .git/ — refused.`);if(!o2(X).isFile())throw new b("not-a-file",Z,`${Z} is a link to ${X}, which is not a regular file — refused.`);return vB(Z,X,z.read),X}function vB($,Z,Q){let z=$2($),X=$2(Z),H=LZ(z)&&LZ(X);if(Q&&!yB.test(X)&&!H){let U=LZ(z)?"a .faf or .fafm file, nor another AI context file":"a .faf or .fafm file";throw new b("not-faf",$,`${$} is a link to ${Z}, which is not ${U} — refused.`)}if(!Q&&!bB(z,X)&&!H)throw new b("other-file",$,`${$} is a link to ${Z}, a file with another name — refused (faf follows a link only to a file of the same name, or from one AI context file to another).`)}function kB($,Z,Q,z){if($2(V0($))!=="hooks"||!xB.test($2(Z)))throw new b("git",Z,`${Z} is not a git hook in a hooks folder — refused.`);if(z!==Q)throw new b("git",Z,`${Z} is not directly in the hooks folder ${Q} — refused.`)}function hB($,Z,Q){if($2($)!=="config"||Q!==Z)throw new b("git",$,`${$} is not the git config file directly in ${Z} — refused.`)}function h($,Z,Q={}){let z=w0(V0($)),X=V0($,Z),H=w0(K2(X));if(!c$(z,H))throw new b("outside",X,`${X} is in ${H}, outside ${z} — refused.`);let U=Q.allowGitHooks===!0,J=Q.allowGitConfig===!0;if(U)kB($,X,z,H);if(J)hB(X,z,H);let G=a2(H,$2(X));if(t2(G)&&!U&&!J)throw new b("git",X,G===X?`${X} is inside .git/ — refused.`:`${X} resolves to ${G}, inside .git/ — refused.`);let V;try{V=MZ(G)}catch(Y){if(Z2(Y)==="ENOENT")return G;throw Y}if(V.isSymbolicLink())return gB(z,X,G,{read:Q.read===!0,inGit:U||J});if(!V.isFile())throw new b("not-a-file",X,`${X} is not a regular file — refused.`);return w0(G)}var uB=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});function fB($,Z){if(!($.length>=2&&($[0]===255&&$[1]===254||$[0]===254&&$[1]===255)))try{return uB.decode($)}catch{}throw new b("not-utf8",Z,`${Z} is not UTF-8 — faf left it unchanged`)}function Z0($){return fB(PZ($),$)}function I0($){try{return PZ($)}catch(Z){if(Z2(Z)==="ENOENT")return null;throw Z}}function l$($,Z){let Q=V0(a2($,Z));if(!RB(Q))return null;let z,X;try{z=w0(mB($)),X=w0(Q)}catch{return null}if(!c$(z,X)||t2(FZ(z,X)))return null;return X}var OZ=[];function mB($){let Z=V0($);return OZ.find((Q)=>Z===Q||Z.startsWith(Q.endsWith(V8)?Q:Q+V8))??Z}function e2($,Z){OZ.push(V0($));try{return Z()}finally{OZ.pop()}}function I($,Z){return l$($,Z)!==null}function S($,Z){let Q=l$($,Z);if(Q===null)return null;try{return o2(Q).isFile()?PZ(Q,"utf-8"):null}catch{return null}}function O0($,Z){let Q=l$($,Z);if(Q===null)return null;try{return o2(Q)}catch{return null}}function v($,Z="."){let Q=l$($,Z);if(Q===null)return null;let z;try{z=TB(Q,{withFileTypes:!0})}catch{return null}return z.filter((X)=>!X.isSymbolicLink()||l$($,a2(Z,X.name))!==null)}function pB($){try{let Z=o2($);return{mode:Z.mode&511,perm:Z.mode&4095,uid:Z.uid,gid:Z.gid}}catch(Z){if(Z2(Z)==="ENOENT")return;throw Z}}class G9 extends Error{path;constructor($,Z,Q={}){super(Z,{cause:Q.cause});this.path=$}}var IZ=($)=>new b("changed",$,`${$} changed on disk while faf was writing — not written; original kept`,{onWrite:!0});function RZ($,Z,Q){if(Z!==void 0){let X=I0($),H=Z===null?null:typeof Z==="string"?Buffer.from(Z,"utf-8"):Buffer.from(Z);if(!(X===null||H===null?X===H:X.equals(H)))throw IZ($)}if(!Q)return;let z;try{z=o2($)}catch(X){if(Z2(X)==="ENOENT")return;throw X}if((z.mode&4095)!==Q.perm)throw IZ($);try{e7($,$9.W_OK)}catch{throw IZ($)}}function lB($,Z){if(process.platform!=="win32")try{NB($,Z.uid,Z.gid)}catch{}Z9($,Z.mode)}function cB($){if(process.platform==="win32")return;try{let Z=X9($,"r");try{Q9(Z)}finally{_Z(Z)}}catch{}}function dB($,Z,Q,z){if($.fd=X9($.path,"wx",z??Q?.mode??438),$.created=!0,wB($.fd,Z),Q)lB($.fd,Q);if(z!==void 0)Z9($.fd,z);Q9($.fd),_Z($.fd),$.fd=void 0}function iB($){if($.fd!==void 0)try{_Z($.fd)}catch{}if($.created)try{H9($.path)}catch{}}function nB($,Z,Q){let z=K2($),X={path:a2(z,`.${$2($).slice(0,100)}.${process.pid}.${SB(6).toString("hex")}.faf-tmp`),created:!1},H=pB($);try{if(H)e7($,$9.W_OK);dB(X,Z,H,Q.mode),RZ($,Q.expect,H),jB(X.path,$)}catch(U){if(iB(X),U instanceof b)throw U;let J=Z2(U)??(U instanceof Error?U.message:String(U));throw new G9($,`${$}: not written${H?"; original kept":""} (${J})`,{cause:U})}cB(z)}function rB($){return $ instanceof b&&!$.onWrite?new b($.reason,$.path,$.message,{onWrite:!0}):$}function e($,Z,Q={}){let z=V0($),X;try{X=h(Q.root??K2(z),z,{allowGitHooks:Q.allowGitHooks,allowGitConfig:Q.allowGitConfig})}catch(H){throw rB(H)}return nB(X,Z,Q),X}function V9($,Z,Q){let z=V0($),X=Q.root??K2(z),H=h(X,z),U=I0(H);if(Q.expect!==void 0)RZ(H,Q.expect,void 0);if(U!==null&&Q.force!==!0&&!Q.owns(U))throw new b("not-owned",z,`${z} has no ${Q.mark}, so faf did not write it — faf left it unchanged.`,{onWrite:!0});return e(H,Z,{root:X,expect:U})}function $$($,Z=$){let Q=V0($);z9(Q,{recursive:!0});let z=w0(Q),X=V0(Q,Z),H=FZ(Q,X);if(H===".."||H.startsWith(`..${V8}`)||U9(H))throw new b("outside",X,`${X} is outside ${z} — refused.`,{onWrite:!0});let U=z;for(let J of H.split(/[\\/]/).filter(Boolean)){let G=a2(U,J);if(t2(G))throw new b("git",X,`${X} runs through ${G}, inside .git/ — refused.`,{onWrite:!0});U=sB(z,X,G)}return U}function sB($,Z,Q){let z;try{z=MZ(Q)}catch(H){if(Z2(H)!=="ENOENT")throw H;return z9(Q),Q}let X=Q;if(z.isSymbolicLink()){try{X=w0(Q)}catch{throw new b("dangling",Z,`${Q} is a link to ${J9(Q)}, which does not exist. faf does not create folders through a link — refused.`,{onWrite:!0})}if(!c$($,X))throw new b("outside",Z,`${Q} is a link to ${X}, outside ${$} — refused.`,{onWrite:!0});if(t2(X))throw new b("git",Z,`${Q} is a link to ${X}, inside .git/ — refused.`,{onWrite:!0})}if(!o2(X).isDirectory())throw new b("not-a-file",Z,`${Q} is not a folder — refused.`,{onWrite:!0});return X}function oB($,Z){let Q=V0($),z=w0(V0(Z.root??K2(Q))),X=w0(K2(Q));if(!c$(z,X))throw new b("outside",Q,`${Q} is in ${X}, outside ${z} — refused.`,{onWrite:!0});let H=a2(X,$2(Q));if(t2(H))throw new b("git",Q,`${Q} is inside .git/ — refused.`,{onWrite:!0});let U;try{U=MZ(H)}catch(J){if(Z2(J)==="ENOENT")return!1;throw J}if(!U.isFile())throw new b("not-a-file",Q,`${Q} is not a regular file faf wrote — left as it is.`,{onWrite:!0});return RZ(H,Z.expect,void 0),H9(H),!0}function u($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function d$($){if(Array.isArray($))return`a list (${$.length} item${$.length===1?"":"s"})`;if($===null||$===void 0)return"empty";if(typeof $==="string"){let Z=$.length>40?`${$.slice(0,40)}…`:$;return`a string (${JSON.stringify(Z)})`}if(typeof $==="object")return"a mapping";return`a ${typeof $} (${String($)})`}function Y8($,Z){if($===null||$===void 0)return{};if(!u($))throw new b("not-yaml",Z,`${Z}: a .faf must be a YAML mapping (key: value pairs), but this one is ${d$($)}. `+"faf left it unchanged — fix it by hand.");return $}var D9=new Set(["tag:yaml.org,2002:int","tag:yaml.org,2002:float"]);function Y9($){return typeof $==="object"&&$.collection===void 0}function aB($,Z){let Q=$.source;if(typeof Q!=="string"||Q.includes(`
|
|
143
|
-
`)||typeof $.value!=="number")return;let z=Z.find((H)=>H.default===!0&&H.test?.test(Q));if(!z||!
|
|
142
|
+
`)}}var I6=($)=>$.startsWith("\uFEFF")?$.slice(1):$;function Q5($){let Z={};for(let[Q,z]of Object.entries($.slots??{}))Z[h1.get(Q)??Q]=z;return{...$,slots:Z}}function z5($){return Q5(JSON.parse(c0().score_faf(I6($))))}function yz($){return Q5(JSON.parse(c0().score_faf_enterprise(I6($))))}function xz($){return c0().validate_faf(I6($))}function gz($){return c0().compile_fafb(I6($))}function vz($){return JSON.parse(c0().decompile_fafb($))}function kz($){return JSON.parse(c0().fafb_info($))}function hz($){return Q5(JSON.parse(c0().score_fafb($)))}function uz(){return c0().sdk_version()}var m1=/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;function p1($){let Z=$?.about?.represents;return typeof Z==="string"&&Z.length>0}function l1($){let Z=$.match(/^about:\s*\n((?:[ \t]+.*\n?)*)/m);if(!Z)return null;let Q=Z[1]??"",z=Q.match(/^[ \t]+represents:\s*(\S+)\s*$/m);if(!z)return null;let X=z[1],H=Q.match(/^[ \t]+source_score:\s*(\d+)\s*$/m),U=-1;if(H){let J=parseInt(H[1],10);if(J>=0&&J<=100)U=J}return{represents:X,sourceScore:U}}function fz($){return $.unknown?"unknown (—)":`${$.score}%`}function c1($){return{score:$.score,tier:O$($.score),populated:$.populated,empty:$.empty,ignored:$.ignored,active:$.active,total:$.total,slots:$.slots}}function H5($){let Z=l1($);if(Z){let Q=Z.sourceScore;return{score:Q,tier:Q>=0?O$(Q):v0[v0.length-1],populated:0,empty:0,ignored:0,active:0,total:0,slots:{},inherited:!0,represents:Z.represents,...Q<0?{unknown:!0}:{}}}return c1(z5($))}function mz($){let Z=[];if(!$||typeof $!=="object")return Z.push("File is not a valid YAML mapping"),{valid:!1,errors:Z};let Q=$;if(!Q.faf_version)Z.push("Missing required field: faf_version");if(!Q.project?.name)Z.push("Missing required field: project.name");if(Q.app_type==="about")Z.push("about is not an app_type — declare about.represents (owner/repo) instead");if(Q.about!==void 0){if(!p1(Q)||typeof Q.about.represents!=="string")Z.push("about.represents is required (owner/repo of the source codebase)");else if(!m1.test(Q.about.represents))Z.push(`about.represents must be "owner/repo" format (got: ${Q.about.represents})`);if(Q.about.source_score!==void 0){let z=Q.about.source_score;if(typeof z!=="number"||z<0||z>100)Z.push(`about.source_score must be a number 0-100 (got: ${z})`)}}return{valid:Z.length===0,errors:Z}}import{lstatSync as l9}from"fs";import{join as f9,dirname as gZ,basename as NF,resolve as t$}from"path";var eW=XZ(),$B=g$(),ZB=p5(),LZ=v$(),QB=P$(),e0=x(),zB=r0(),XB=d(),HB=o0(),UB=a0(),GF=Q8(),JB=qZ(),GB=KZ(),VB=DZ(),U8=t7(),e7=_$();var YB=eW.Composer,J8=$B.Document,WB=ZB.Schema,BB=LZ.YAMLError,G8=LZ.YAMLParseError,qB=LZ.YAMLWarning,KB=QB.Alias,u0=e0.isAlias,B2=e0.isCollection,DB=e0.isDocument,p=e0.isMap,L0=e0.isNode,LB=e0.isPair,s=e0.isScalar,f0=e0.isSeq,IB=zB.Pair,OB=XB.Scalar,r2=HB.YAMLMap,p$=UB.YAMLSeq;var _B=JB.Lexer,MB=GB.LineCounter,PB=VB.Parser,m0=U8.parse,FB=U8.parseAllDocuments,s2=U8.parseDocument,q2=U8.stringify,RB=e7.visit,NB=e7.visitAsync;import{accessSync as $9,closeSync as MZ,constants as Z9,existsSync as TB,fchmodSync as Q9,fchownSync as AB,fsyncSync as z9,lstatSync as PZ,mkdirSync as X9,mkdtempSync as WF,openSync as H9,readdirSync as CB,readFileSync as FZ,readlinkSync as jB,realpathSync as wB,renameSync as SB,rmSync as BF,statSync as o2,unlinkSync as U9,writeFileSync as EB}from"fs";import{randomBytes as bB}from"crypto";import{basename as $2,dirname as K2,isAbsolute as J9,join as a2,relative as RZ,resolve as V0,sep as V8}from"path";class b extends Error{reason;path;onWrite;constructor($,Z,Q,z={}){super(Q,z.cause===void 0?void 0:{cause:z.cause});this.name="SafePathError",this.reason=$,this.path=Z,this.onWrite=z.onWrite===!0}}var t=Object.freeze({claude:"CLAUDE.md",agents:"AGENTS.md",gemini:"GEMINI.md",cursorrules:".cursorrules",copilot:"copilot-instructions.md",memory:"MEMORY.md",llms:"llms.txt"}),yB=new Set(Object.values(t).map(($)=>$.toLowerCase())),xB=($,Z)=>$.toLowerCase()===Z.toLowerCase(),IZ=($)=>yB.has($.toLowerCase());function t2($){return $.split(/[\\/]/).some((Z)=>Z.toLowerCase()===".git")}var gB=/\.fafm?$/i,vB=/^[a-z][a-z0-9-]*$/,w0=($)=>wB.native($),Z2=($)=>$?.code;function c$($,Z){let Q=RZ($,Z);return Q===""||Q!==".."&&!Q.startsWith(`..${V8}`)&&!J9(Q)}function G9($){try{return jB($)}catch{return"?"}}function kB($,Z,Q,z){let X;try{X=w0(Q)}catch(H){let U=Z2(H);if(U==="ENOENT"||U==="ELOOP"||U==="ENOTDIR")throw new b("dangling",Z,`${Z} is a link to ${G9(Q)}, which does not exist. faf does not create files through a link — refused.`);throw H}if(!c$($,X))throw new b("outside",Z,`${Z} is a link to ${X}, outside ${$} — refused.`);if(t2(X)&&!(z.inGit&&K2(X)===$))throw new b("git",Z,`${Z} is a link to ${X}, inside .git/ — refused.`);if(!o2(X).isFile())throw new b("not-a-file",Z,`${Z} is a link to ${X}, which is not a regular file — refused.`);return hB(Z,X,z.read),X}function hB($,Z,Q){let z=$2($),X=$2(Z),H=IZ(z)&&IZ(X);if(Q&&!gB.test(X)&&!H){let U=IZ(z)?"a .faf or .fafm file, nor another AI context file":"a .faf or .fafm file";throw new b("not-faf",$,`${$} is a link to ${Z}, which is not ${U} — refused.`)}if(!Q&&!xB(z,X)&&!H)throw new b("other-file",$,`${$} is a link to ${Z}, a file with another name — refused (faf follows a link only to a file of the same name, or from one AI context file to another).`)}function uB($,Z,Q,z){if($2(V0($))!=="hooks"||!vB.test($2(Z)))throw new b("git",Z,`${Z} is not a git hook in a hooks folder — refused.`);if(z!==Q)throw new b("git",Z,`${Z} is not directly in the hooks folder ${Q} — refused.`)}function fB($,Z,Q){if($2($)!=="config"||Q!==Z)throw new b("git",$,`${$} is not the git config file directly in ${Z} — refused.`)}function h($,Z,Q={}){let z=w0(V0($)),X=V0($,Z),H=w0(K2(X));if(!c$(z,H))throw new b("outside",X,`${X} is in ${H}, outside ${z} — refused.`);let U=Q.allowGitHooks===!0,J=Q.allowGitConfig===!0;if(U)uB($,X,z,H);if(J)fB(X,z,H);let G=a2(H,$2(X));if(t2(G)&&!U&&!J)throw new b("git",X,G===X?`${X} is inside .git/ — refused.`:`${X} resolves to ${G}, inside .git/ — refused.`);let V;try{V=PZ(G)}catch(Y){if(Z2(Y)==="ENOENT")return G;throw Y}if(V.isSymbolicLink())return kB(z,X,G,{read:Q.read===!0,inGit:U||J});if(!V.isFile())throw new b("not-a-file",X,`${X} is not a regular file — refused.`);return w0(G)}var mB=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});function pB($,Z){if(!($.length>=2&&($[0]===255&&$[1]===254||$[0]===254&&$[1]===255)))try{return mB.decode($)}catch{}throw new b("not-utf8",Z,`${Z} is not UTF-8 — faf left it unchanged`)}function Z0($){return pB(FZ($),$)}function I0($){try{return FZ($)}catch(Z){if(Z2(Z)==="ENOENT")return null;throw Z}}function l$($,Z){let Q=V0(a2($,Z));if(!TB(Q))return null;let z,X;try{z=w0(lB($)),X=w0(Q)}catch{return null}if(!c$(z,X)||t2(RZ(z,X)))return null;return X}var _Z=[];function lB($){let Z=V0($);return _Z.find((Q)=>Z===Q||Z.startsWith(Q.endsWith(V8)?Q:Q+V8))??Z}function e2($,Z){_Z.push(V0($));try{return Z()}finally{_Z.pop()}}function I($,Z){return l$($,Z)!==null}function S($,Z){let Q=l$($,Z);if(Q===null)return null;try{return o2(Q).isFile()?FZ(Q,"utf-8"):null}catch{return null}}function O0($,Z){let Q=l$($,Z);if(Q===null)return null;try{return o2(Q)}catch{return null}}function v($,Z="."){let Q=l$($,Z);if(Q===null)return null;let z;try{z=CB(Q,{withFileTypes:!0})}catch{return null}return z.filter((X)=>!X.isSymbolicLink()||l$($,a2(Z,X.name))!==null)}function cB($){try{let Z=o2($);return{mode:Z.mode&511,perm:Z.mode&4095,uid:Z.uid,gid:Z.gid}}catch(Z){if(Z2(Z)==="ENOENT")return;throw Z}}class V9 extends Error{path;constructor($,Z,Q={}){super(Z,{cause:Q.cause});this.path=$}}var OZ=($)=>new b("changed",$,`${$} changed on disk while faf was writing — not written; original kept`,{onWrite:!0});function NZ($,Z,Q){if(Z!==void 0){let X=I0($),H=Z===null?null:typeof Z==="string"?Buffer.from(Z,"utf-8"):Buffer.from(Z);if(!(X===null||H===null?X===H:X.equals(H)))throw OZ($)}if(!Q)return;let z;try{z=o2($)}catch(X){if(Z2(X)==="ENOENT")return;throw X}if((z.mode&4095)!==Q.perm)throw OZ($);try{$9($,Z9.W_OK)}catch{throw OZ($)}}function dB($,Z){if(process.platform!=="win32")try{AB($,Z.uid,Z.gid)}catch{}Q9($,Z.mode)}function iB($){if(process.platform==="win32")return;try{let Z=H9($,"r");try{z9(Z)}finally{MZ(Z)}}catch{}}function nB($,Z,Q,z){if($.fd=H9($.path,"wx",z??Q?.mode??438),$.created=!0,EB($.fd,Z),Q)dB($.fd,Q);if(z!==void 0)Q9($.fd,z);z9($.fd),MZ($.fd),$.fd=void 0}function rB($){if($.fd!==void 0)try{MZ($.fd)}catch{}if($.created)try{U9($.path)}catch{}}function sB($,Z,Q){let z=K2($),X={path:a2(z,`.${$2($).slice(0,100)}.${process.pid}.${bB(6).toString("hex")}.faf-tmp`),created:!1},H=cB($);try{if(H)$9($,Z9.W_OK);nB(X,Z,H,Q.mode),NZ($,Q.expect,H),SB(X.path,$)}catch(U){if(rB(X),U instanceof b)throw U;let J=Z2(U)??(U instanceof Error?U.message:String(U));throw new V9($,`${$}: not written${H?"; original kept":""} (${J})`,{cause:U})}iB(z)}function oB($){return $ instanceof b&&!$.onWrite?new b($.reason,$.path,$.message,{onWrite:!0}):$}function e($,Z,Q={}){let z=V0($),X;try{X=h(Q.root??K2(z),z,{allowGitHooks:Q.allowGitHooks,allowGitConfig:Q.allowGitConfig})}catch(H){throw oB(H)}return sB(X,Z,Q),X}function Y9($,Z,Q){let z=V0($),X=Q.root??K2(z),H=h(X,z),U=I0(H);if(Q.expect!==void 0)NZ(H,Q.expect,void 0);if(U!==null&&Q.force!==!0&&!Q.owns(U))throw new b("not-owned",z,`${z} has no ${Q.mark}, so faf did not write it — faf left it unchanged.`,{onWrite:!0});return e(H,Z,{root:X,expect:U})}function $$($,Z=$){let Q=V0($);X9(Q,{recursive:!0});let z=w0(Q),X=V0(Q,Z),H=RZ(Q,X);if(H===".."||H.startsWith(`..${V8}`)||J9(H))throw new b("outside",X,`${X} is outside ${z} — refused.`,{onWrite:!0});let U=z;for(let J of H.split(/[\\/]/).filter(Boolean)){let G=a2(U,J);if(t2(G))throw new b("git",X,`${X} runs through ${G}, inside .git/ — refused.`,{onWrite:!0});U=aB(z,X,G)}return U}function aB($,Z,Q){let z;try{z=PZ(Q)}catch(H){if(Z2(H)!=="ENOENT")throw H;return X9(Q),Q}let X=Q;if(z.isSymbolicLink()){try{X=w0(Q)}catch{throw new b("dangling",Z,`${Q} is a link to ${G9(Q)}, which does not exist. faf does not create folders through a link — refused.`,{onWrite:!0})}if(!c$($,X))throw new b("outside",Z,`${Q} is a link to ${X}, outside ${$} — refused.`,{onWrite:!0});if(t2(X))throw new b("git",Z,`${Q} is a link to ${X}, inside .git/ — refused.`,{onWrite:!0})}if(!o2(X).isDirectory())throw new b("not-a-file",Z,`${Q} is not a folder — refused.`,{onWrite:!0});return X}function tB($,Z){let Q=V0($),z=w0(V0(Z.root??K2(Q))),X=w0(K2(Q));if(!c$(z,X))throw new b("outside",Q,`${Q} is in ${X}, outside ${z} — refused.`,{onWrite:!0});let H=a2(X,$2(Q));if(t2(H))throw new b("git",Q,`${Q} is inside .git/ — refused.`,{onWrite:!0});let U;try{U=PZ(H)}catch(J){if(Z2(J)==="ENOENT")return!1;throw J}if(!U.isFile())throw new b("not-a-file",Q,`${Q} is not a regular file faf wrote — left as it is.`,{onWrite:!0});return NZ(H,Z.expect,void 0),U9(H),!0}function u($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function d$($){if(Array.isArray($))return`a list (${$.length} item${$.length===1?"":"s"})`;if($===null||$===void 0)return"empty";if(typeof $==="string"){let Z=$.length>40?`${$.slice(0,40)}…`:$;return`a string (${JSON.stringify(Z)})`}if(typeof $==="object")return"a mapping";return`a ${typeof $} (${String($)})`}function Y8($,Z){if($===null||$===void 0)return{};if(!u($))throw new b("not-yaml",Z,`${Z}: a .faf must be a YAML mapping (key: value pairs), but this one is ${d$($)}. `+"faf left it unchanged — fix it by hand.");return $}var L9=new Set(["tag:yaml.org,2002:int","tag:yaml.org,2002:float"]);function W9($){return typeof $==="object"&&$.collection===void 0}function eB($,Z){let Q=$.source;if(typeof Q!=="string"||Q.includes(`
|
|
143
|
+
`)||typeof $.value!=="number")return;let z=Z.find((H)=>H.default===!0&&H.test?.test(Q));if(!z||!L9.has(z.tag))return;let X;try{X=z.resolve(Q,()=>{return},{})}catch{return}return Object.is(s(X)?X.value:X,$.value)?Q:void 0}function $q($){let Z=$.filter(W9);return $.map((Q)=>{if(!W9(Q)||!L9.has(Q.tag)||!Q.stringify)return Q;let z=Q.stringify;return{...Q,stringify:(X,H,U,J)=>eB(X,Z)??z(X,H,U,J)}})}var W8={keepSourceTokens:!0,customTags:$q};function Zq($,Z){let Q=/^( *)[^\s#-][^#]*?:[ \t]*(?:#.*)?$/.exec($),z=/^( *)(\S)/.exec(Z);if(!Q||!z||z[2]==="#")return{};let X=z[1].length-Q[1].length;if(z[2]==="-")return X>=0?{indentSeq:X>0}:{};return X>=1&&X<=8?{indent:X}:{}}function Qq($){let Z=$.split(/\r?\n/),Q,z;for(let X=0;X+1<Z.length;X++){let H=Zq(Z[X],Z[X+1]);Q??=H.indent,z??=H.indentSeq}return{indent:Q??2,indentSeq:z??!0}}function wZ($,Z){let Q=s2($,W8);if(Q.errors.length>0){let z=Q.errors[0].message.split(`
|
|
144
144
|
`)[0];throw Error(`${Z}: not valid YAML (${z}) — faf left it unchanged.`,{cause:Q.errors[0]})}return Q}function D2($,Z,Q,z){$.edits.push({start:Z,end:Q,text:z,seq:$.edits.length})}function i$($,Z){return $.lastIndexOf(`
|
|
145
|
-
`,Z-1)+1}function
|
|
145
|
+
`,Z-1)+1}function I9($,Z){if(Z>0&&$[Z-1]===`
|
|
146
146
|
`)return Z;let Q=$.indexOf(`
|
|
147
|
-
`,Z);return Q<0?$.length:Q+1}function
|
|
148
|
-
`){if(Q--,$[Q-1]==="\r")Q--}return Q}function _0($){return $!==null&&$!==void 0}function X0($){let Z=L0($)?$.range:void 0;return Z?[Z[0],Z[1],Z[2]]:void 0}function
|
|
147
|
+
`,Z);return Q<0?$.length:Q+1}function B9($,Z){let Q=Z;if($[Q-1]===`
|
|
148
|
+
`){if(Q--,$[Q-1]==="\r")Q--}return Q}function _0($){return $!==null&&$!==void 0}function X0($){let Z=L0($)?$.range:void 0;return Z?[Z[0],Z[1],Z[2]]:void 0}function O9($,Z){let Q=X0($),z=X0(Z);return!!Q&&!!z&&Q[0]===z[0]&&Q[1]===z[1]&&Q[2]===z[2]&&$.constructor===Z.constructor}function _9($){if(s($))return $.type==="BLOCK_LITERAL"||$.type==="BLOCK_FOLDED";return B2($)&&!$.flow}function B8($,Z){return $.anchor===Z.anchor&&$.tag===Z.tag&&$.comment===Z.comment&&$.commentBefore===Z.commentBefore&&!!$.spaceBefore===!!Z.spaceBefore}function M9($,Z){return Object.is($.value,Z.value)&&$.type===Z.type&&$.format===Z.format&&$.minFractionDigits===Z.minFractionDigits&&B8($,Z)}function P9($,Z,Q,z){let X=new J8(void 0,W8);X.contents=Z(X);let U=X.toString($.piece).replace(/\n+$/,"").slice(Q),J=U.startsWith(" ")&&!U.includes(`
|
|
149
149
|
`),G=" ".repeat(z),V=U.replace(/\n(?=.)/g,`
|
|
150
|
-
${G}`).replace(/\n/g,$.eol);return{inline:J,text:J?U.slice(1):V}}function
|
|
151
|
-
`)?void 0:Z.comment}function
|
|
152
|
-
`).map((U)=>U?X+U:U).join($.eol)+$.eol}function
|
|
153
|
-
`);D2($,Z,Z,z?$.eol+Q.slice(0,-$.eol.length):Q)}function
|
|
154
|
-
`)?$.eol:"",X=Z.commentBefore?$.eol:"";return D2($,$.src.length,$.src.length,z+X+
|
|
150
|
+
${G}`).replace(/\n/g,$.eol);return{inline:J,text:J?U.slice(1):V}}function AZ($,Z,Q){return P9($,(z)=>{let X=new r2;return X.items.push(z.createPair("k",Z)),X},2,Q)}function zq($,Z,Q){let z=P9($,()=>{let X=new p$;return X.items.push(Z),X},1,Q);if(z.inline)return z;return z.text.startsWith(" ")?{inline:!1,text:z.text.slice(1)}:null}function Xq($){if(!L0($)||!_0($.comment))return $;let Z=$.clone();return Z.comment=void 0,Z}function Hq($,Z){if(!L0($)||!L0(Z))return Z;let Q=$,z=Z;if(!Q.anchor&&!Q.tag||Q.anchor!==z.anchor||Q.tag!==z.tag)return Z;let X=Z.clone();return X.anchor=void 0,X.tag=void 0,X}function Uq($,Z){let Q=X0(Z);if(!Q)return-1;let z=Q[2];while($[z]===" "||$[z]==="\t")z++;return $[z]===":"?z+1:-1}function Jq($,Z,Q){let z=$[Z-1]===" "||$[Z-1]==="\t"?"":" ",X=$[Z]==="#"?" ":"";return`${z}${Q}${X}`}function q9($,Z,Q,z,X=!1){let H=X0(Z);if(!H||z.kind==="root")return null;let U=Z.comment,J=L0(Q)?Q.comment:void 0,G=!_0(U)||U===J,V=G?Xq(Q):Q,Y=X?V:Hq(Z,V),W=z.kind==="value"?AZ($,Y,z.col):zq($,Y,z.col);return W?{range:H,keepTail:G,newComment:J,piece:W}:null}function Gq($,Z,Q,z){if(!z)return B9($,I9($,Q[2]));return _9(Z)?B9($,Q[1]):Q[1]}function n$($,Z,Q,z,X){let H=q9($,Z,Q,z);if(!H)return!1;let U=Gq($.src,Z,H.range,H.keepTail);if(H.piece.inline&&(!_9(Z)||z.kind==="item"))return Vq($,H,U,z,X),!0;let J=H.keepTail?Z.comment:H.newComment;if(X!==void 0||_0(J))return!1;let G=z.kind==="value"?q9($,Z,Q,z,!0):H;return G!==null&&Yq($,G.range[0],U,G.piece,z)}function Vq($,Z,Q,z,X){let[H,U]=Z.range,G=H===U&&z.kind==="value"?Jq($.src,H,Z.piece.text):Z.piece.text;D2($,H,Q,G+(X===void 0?"":` #${X}`))}function Yq($,Z,Q,z,X){if(X.kind==="item")return D2($,Z,Q,z.text),!0;if(X.kind!=="value")return!1;let H=Uq($.src,X.key);if(H<0)return!1;return D2($,H,Q,z.inline?` ${z.text}`:z.text),!0}function Wq($,Z){return B8({...$,comment:void 0},{...Z,comment:void 0})}function Bq($,Z){if(_0($.comment)||typeof Z.comment!=="string")return;return Z.comment.includes(`
|
|
151
|
+
`)?void 0:Z.comment}function qq($,Z,Q,z){if(M9(Z,Q))return!0;if(!Wq(Z,Q))return!1;let X=Bq(Z,Q);if(Z.comment!==Q.comment&&X===void 0)return!1;return n$($,Z,Q,z,X)}function Kq($,Z,Q,z){if(!B8(Z,Q)||!!Z.flow!==!!Q.flow)return!1;if(Z.flow)return AZ($,Z,0).text===AZ($,Q,0).text||n$($,Z,Q,z);if(Q.items.length===0)return n$($,Z,Q,z);return p(Z)?Oq($,Z,Q):Mq($,Z,Q)}function SZ($,Z,Q,z){if(!O9(Z,Q))return n$($,Z,Q,z);if(s(Z))return qq($,Z,Q,z);if(u0(Z))return u0(Q)&&Z.source===Q.source&&B8(Z,Q)||n$($,Z,Q,z);if(!B2(Z)||!B2(Q))return!1;return Kq($,Z,Q,z)}function F9($,Z){return Z-i$($,Z)}function EZ($,Z,Q){let z=$.slice(i$($,Z),Z);return Q?/^ *- +$/.test(z)||/^ *$/.test(z):/^ *$/.test(z)}function CZ($){return L0($)&&(_0($.commentBefore)||!!$.spaceBefore)}function bZ($,Z,Q){let z=X0(Z)??X0(Q);return z?I9($.src,z[2]):-1}function R9($,Z,Q){let z=new J8(void 0,W8);z.contents=Z;let X=" ".repeat(Q);return z.toString($.piece).replace(/\n+$/,"").split(`
|
|
152
|
+
`).map((U)=>U?X+U:U).join($.eol)+$.eol}function Dq($,Z,Q){let z=Z===$.src.length&&Z>0&&!$.src.endsWith(`
|
|
153
|
+
`);D2($,Z,Z,z?$.eol+Q.slice(0,-$.eol.length):Q)}function N9($,Z,Q,z,X,H){let U=Q;if(U<0){let J=X0(Z);if(!J||CZ(Z)||!EZ($.src,J[0],H))return!1;U=i$($.src,J[0])}return Dq($,U,R9($,z,X)),!0}function Lq($,Z,Q){let z=i$($,Q),X=Z,H=_0(X.commentBefore),U=!!X.spaceBefore;while(z>0){let J=i$($,z-1),G=$.slice(J,z).trim();if(H&&G.startsWith("#"))z=J;else if(U&&G==="")z=J,U=!1;else break}return z}function T9($,Z,Q,z){let X=X0(Z);if(!X||!EZ($.src,X[0],z))return!1;let H=bZ($,Q,Z);if(H<0)return!1;return D2($,Lq($.src,Z,X[0]),H,""),!0}function A9($,Z){let Q=new Map,z=(X)=>{let H=X0(X);return H?H.join(":"):void 0};return $.forEach((X,H)=>{let U=z(Z(X));if(U!==void 0&&!Q.has(U))Q.set(U,H)}),(X)=>{let H=z(Z(X)),U=H===void 0?void 0:Q.get(H);return U!==void 0&&O9(Z($[U]),Z(X))?U:-1}}function Iq($,Z){return s($)&&s(Z)?M9($,Z):$===Z}function Oq($,Z,Q){let z=Z.items[0]?.key,X=X0(z);if(!X)return!1;let H=F9($.src,X[0]),U=new Set,J=(W,B)=>{if(W.length===0)return!0;let K=new r2;K.items.push(...W);let L=B<0?-1:bZ($,Z.items[B].value,Z.items[B].key);return N9($,z,L,K,H,!1)},G=A9(Z.items,(W)=>W.key),V=-1,Y=[];for(let W of Q.items){let B=G(W);if(B<0){Y.push(W);continue}if(B<=V||!J(Y,V)||!Iq(Z.items[B].key,W.key))return!1;if(Y=[],!SZ($,Z.items[B].value,W.value,{kind:"value",key:Z.items[B].key,col:H}))return!1;U.add(B),V=B}if(!J(Y,V))return!1;return Z.items.every((W,B)=>U.has(B)||_q($,Z,B))}function _q($,Z,Q){let z=Z.items[Q],X=X0(z.key);if(!X)return!1;if(EZ($.src,X[0],!1))return T9($,z.key,z.value,!1);let H=Z.items[Q+1],U=X0(H?.key);if(Q!==0||!U||CZ(z.key)||CZ(H.key))return!1;return D2($,X[0],U[0],""),!0}function Mq($,Z,Q){let z=X0(Z);if(!z||Z.items.length===0)return!1;let X=F9($.src,z[0]),H=new Set,U=(Y,W)=>{if(Y.length===0)return!0;let B=new p$;B.items.push(...Y);let K=W<0?-1:bZ($,Z.items[W]);return N9($,Z.items[0],K,B,X,!0)},J=A9(Z.items,(Y)=>Y),G=-1,V=[];for(let Y of Q.items){let W=J(Y);if(W<0){V.push(Y);continue}if(W<=G||!U(V,G))return!1;if(V=[],!SZ($,Z.items[W],Y,{kind:"item",col:X}))return!1;H.add(W),G=W}if(!U(V,G))return!1;return Z.items.every((Y,W)=>H.has(W)||T9($,Y,Y,!0))}function Pq($,Z){let Q=[...Z].sort((H,U)=>U.start-H.start||U.end-H.end||U.seq-H.seq),z=$,X=1/0;for(let H of Q){if(H.end>X)return null;z=z.slice(0,H.start)+H.text+z.slice(H.end),X=H.start}return z}function Fq($,Z,Q){if(!p(Q)&&!f0(Q))return!1;let z=$.src.length>0&&!$.src.endsWith(`
|
|
154
|
+
`)?$.eol:"",X=Z.commentBefore?$.eol:"";return D2($,$.src.length,$.src.length,z+X+R9($,Q,0)),!0}function Rq($,Z,Q){if(Z.commentBefore!==Q.commentBefore||Z.comment!==Q.comment)return!1;let z=Z.contents,X=Q.contents;if(!_0(z))return!_0(X)||Fq($,Z,X);return _0(X)&&SZ($,z,X,{kind:"root"})}function Nq($,Z,Q,z,X){let H={src:$,eol:z,edits:[],piece:X};if(!Rq(H,Z,Q))return null;return Pq($,H.edits)}var K9=($)=>$.replace(/^[ \t]*\n/gm,"");function Tq($,Z,Q,z){let X=s2($,W8);if(X.errors.length>0||!l(X.toJS(),Z.toJS()))return!1;let H=X.toString(z);return H===Q||K9(H)===K9(Q)}function q8($,Z,Q="YAML"){let{text:z,changed:X}=Aq($,Z,Q);return{text:z,changed:X}}function Aq($,Z,Q="YAML"){let z=$.startsWith("\uFEFF")?"\uFEFF":"",X=$.slice(z.length),H=wZ(X,Q),U=Cq(H);Z(U);let J={text:$,changed:!1,spliced:!1};if(l(U.toJS(),H.toJS()))return J;let G={lineWidth:0,...Qq(X)},V=U.toString(G);if(V===H.toString(G))return J;let Y=X.includes(`\r
|
|
155
155
|
`)?`\r
|
|
156
156
|
`:`
|
|
157
|
-
`,W=
|
|
158
|
-
`):void 0}function
|
|
159
|
-
`);return Z}function
|
|
160
|
-
`)[0].replace(/ at line \d+, column \d+:?\s*$/,"").replace(/:\s*$/,""),z=Z.linePos?.[0]?.line,X=t$($);return new b("not-yaml",X,`${X} is not valid YAML (${Q}${z===void 0?"":`, line ${z}`}) — faf left it unchanged`,{cause:Z})}function
|
|
161
|
-
`,"\r"]);class
|
|
157
|
+
`,W=Nq(X,H,U,Y,{...G,verifyAliasOrder:!1}),B=W!==null&&Tq(W,U,V,G),K=B&&W!==null?W:V.replace(/\r?\n/g,Y);return{text:z+K,changed:z+K!==$,spliced:B}}function Cq($){let Z=$.clone();if($.directives&&Z.directives)Z.directives.docEnd=$.directives.docEnd;return Z}function l($,Z){if(Object.is($,Z))return!0;if(Array.isArray($)&&Array.isArray(Z))return $.length===Z.length&&$.every((Q,z)=>l(Q,Z[z]));if(u($)&&u(Z)){let Q=Object.keys($);return Q.length===Object.keys(Z).length&&Q.every((z)=>(z in Z)&&l($[z],Z[z]))}return!1}function s$($){let Z=s($.key)?$.key.value:$.key;return typeof Z==="string"||typeof Z==="number"||typeof Z==="boolean"?String(Z):void 0}function Q2($,Z){return $.items.find((Q)=>s$(Q)===Z)}function C9($,Z){return L0(Z)?Z.toJS($):Z}function jq($,Z,Q,z){return z.keepAliases===!0&&u0(Z)||l(C9($,Z),Q)}function K8($,Z,Q,z={}){if(jq($,Z,Q,z))return Z;if(u(Q)&&p(Z))return Sq($,Z,Q,z),Z;if(Array.isArray(Q)&&f0(Z))return yq($,Z,Q,z),Z;if(!u(Q)&&!Array.isArray(Q)&&s(Z))return Z.value=Q,Z;return wq(Z,$.createNode(Q))}function wq($,Z){if(!s($)&&!u0($))return Z;let Q=$,z=Z;if(B2(Z)&&Z.items.length>0&&!Z.flow)return z.commentBefore=TZ(z.commentBefore,Q.commentBefore,Q.comment),Z;if(B2(Z))Z.flow=!0;return z.comment=TZ(z.comment??Q.comment),z.commentBefore=TZ(z.commentBefore??Q.commentBefore),Z}function TZ(...$){let Z=$.filter(_0);return Z.length>0?Z.join(`
|
|
158
|
+
`):void 0}function Sq($,Z,Q,z={}){for(let[X,H]of Object.entries(Q)){if(H===void 0)continue;let U=Q2(Z,X);if(U)U.value=K8($,U.value,H,z);else Z.items.push($.createPair(X,H))}if(!z.prune)return;Z.items=Z.items.filter((X)=>{let H=s$(X);return H===void 0||Q[H]!==void 0})}function yZ($,Z,Q,z){let X=u(Q)?Q:{};for(let[H,U]of Object.entries(z)){if(U===void 0)continue;let J=Q2(Z,H);if(!J)Z.items.push($.createPair(H,U));else if(Object.prototype.hasOwnProperty.call(X,H)&&l(X[H],U))continue;else if(u(U)&&u(X[H])&&p(J.value))yZ($,J.value,X[H],U);else J.value=K8($,J.value,U,{keepAliases:!0})}}function r$($,Z,Q){if(u0($))Q.push({path:[...Z],node:$});else if(p($))for(let z of $.items){let X=s$(z);if(X!==void 0)r$(z.value,[...Z,X],Q)}else if(f0($))$.items.forEach((z,X)=>r$(z,[...Z,X],Q))}function D9($,Z){let Q=$;for(let z of Z)if(Array.isArray(Q)&&typeof z==="number")Q=Q[z];else if(u(Q)&&typeof z==="string")Q=Q[z];else return;return Q}function j9($,Z,Q){let z=[];return r$($.contents,[],z),z.filter(({path:X,node:H})=>{let U=D9(Z,X);return U!==void 0&&!l(D9(Q,X),U)&&!l(H.toJS($),U)}).map(({path:X,node:H})=>({path:X.join("."),alias:`*${H.source}`}))}function w9($,Z){let Q=$.contents;for(let X=0;X<Z.length-1&&Q!==void 0;X++)Q=Eq(Q,Z[X]);let z=Z[Z.length-1];if(p(Q)&&typeof z==="string"){let X=Q2(Q,z);return X?{node:X.value,put:(H)=>(X.value=H,!0)}:null}if(f0(Q)&&typeof z==="number"&&z<Q.items.length){let X=Q,H=X.items[z];return{node:H,put:(U)=>X0(H)===void 0?(X.items[z]=U,!0):!1}}return null}function Eq($,Z){if(p($)&&typeof Z==="string")return Q2($,Z)?.value;if(f0($)&&typeof Z==="number")return $.items[Z];return}function S9($,Z){let Q=[];r$($.contents,[],Q);let z=[];for(let{path:X,node:H}of Q){let U=w9(Z,X);if(!U||u0(U.node)&&U.node.source===H.source)continue;if(!U.put(H.clone()))continue;z.push({path:X.join("."),alias:`*${H.source}`})}return z}function jZ($,Z,Q,z){if(!L0($)||u0($))return;let X=$.anchor;if(X&&Q.has(X))z.push({path:[...Z],node:$});if(p($))for(let H of $.items){let U=s$(H);if(U!==void 0)jZ(H.value,[...Z,U],Q,z)}else if(f0($))$.items.forEach((H,U)=>jZ(H,[...Z,U],Q,z))}function E9($,Z){let Q=[];r$($.contents,[],Q);let z=new Set(Q.map((U)=>U.node.source));if(z.size===0)return[];let X=[];jZ($.contents,[],z,X);let H=[];for(let{path:U,node:J}of X){let G=w9(Z,U);if(!G)continue;let V=J.anchor;if(L0(G.node)&&G.node.anchor===V&&l(J.toJS($),G.node.toJS(Z))||!G.put(J.clone()))continue;H.push({path:U.join("."),alias:`&${V}`,kind:"anchor"})}return H}function bq($,Z){let Q=$.length,z=Z.length,X=Array.from({length:Q+1},()=>Array(z+1).fill(0));for(let U=Q-1;U>=0;U--)for(let J=z-1;J>=0;J--)X[U][J]=l($[U],Z[J])?X[U+1][J+1]+1:Math.max(X[U+1][J],X[U][J+1]);let H=[];for(let U=0,J=0;U<Q&&J<z;)if(l($[U],Z[J]))H.push([U,J]),U++,J++;else if(X[U+1][J]>=X[U][J+1])U++;else J++;return H}function yq($,Z,Q,z){let X=Z.items,H=X.map((V)=>C9($,V)),U=[],J=0,G=0;for(let[V,Y]of[...bq(H,Q),[X.length,Q.length]]){for(;J<V&&G<Y;J++,G++)U.push(K8($,X[J],Q[G],z));for(;G<Y;G++)U.push($.createNode(Q[G]));if(V<X.length)U.push(X[V]);J=V+1,G=Y+1}Z.items=U}function o$($,Z,Q,z){if(l(Q,z))return Z;if(!u(Q)||!u(z)||!p(Z))return K8($,Z,z);let X=new Set(Object.keys(Q).filter((H)=>!(H in z)||z[H]===void 0));Z.items=Z.items.filter((H)=>{let U=s$(H);return U===void 0||!X.has(U)});for(let[H,U]of Object.entries(z)){if(U===void 0)continue;let J=Q2(Z,H);if(!J)Z.items.push($.createPair(H,U));else if(!l(Q[H],U))J.value=o$($,J.value,Q[H],U)}return Z}function b9($,Z,Q){let z=$.contents;if(z===null||z===void 0)$.contents=new r2,z=$.contents;if(!p(z))throw Error(`${Q}: the document is not a mapping — faf left it unchanged.`);let X=z;for(let H of Z){let U=Q2(X,H);if(U&&p(U.value)){X=U.value;continue}if(U&&!g9(U.value))throw Error(`${Q}: ${H} is not a mapping — faf left it unchanged.`);let J=new r2;if(U)U.value=x9(U.value,J);else X.items.push($.createPair(H,J));X=J}return X}function D8($,Z,Q,z,X){if(l(Q,z))return;let H=b9($,Z.slice(0,-1),X),U=Z[Z.length-1],J=Q2(H,U);if(z===void 0)H.items=H.items.filter((G)=>G!==J);else if(!J)H.items.push($.createPair(U,z));else J.value=o$($,J.value,Q,z)}function y9($,Z,Q){let z=b9($,Z.slice(0,-1),Q),X=Z[Z.length-1],H=Q2(z,X);if(H&&f0(H.value))return H.value;if(H&&!g9(H.value))throw Error(`${Q}: ${Z.join(".")} is not a list — faf left it unchanged.`);let U=new p$;if(H)H.value=x9(H.value,U);else z.items.push($.createPair(X,U));return U}function x9($,Z){if(!s($))return Z;let Q=[$.commentBefore,$.comment].filter(_0);if(Q.length>0)Z.commentBefore=Q.join(`
|
|
159
|
+
`);return Z}function g9($){if($===null||$===void 0)return!0;return s($)&&($.value===null||$.value===void 0)}var xZ=new WeakMap;function a$($){return typeof $==="object"&&$!==null?xZ.get($):void 0}function L8($,Z){xZ.set($,Z)}function v9($,Z){let Q=a$($);if(Q)xZ.set(Z,Q);return Z}var k9=new WeakSet;function h9($){return k9.add($),$}function u9($){return typeof $==="object"&&$!==null&&k9.has($)}function I8($){let Z=t$($);return h(gZ(Z),Z,{read:!0})}function c9($){if($ instanceof G8)return $;let Z=$?.cause;return Z instanceof G8?Z:null}function d9($,Z){let Q=Z.message.split(`
|
|
160
|
+
`)[0].replace(/ at line \d+, column \d+:?\s*$/,"").replace(/:\s*$/,""),z=Z.linePos?.[0]?.line,X=t$($);return new b("not-yaml",X,`${X} is not valid YAML (${Q}${z===void 0?"":`, line ${z}`}) — faf left it unchanged`,{cause:Z})}function xq($){let Z=I8($),Q=Z0(Z),z;try{z=m0(Q)}catch(H){let U=c9(H);if(U)throw d9($,U);throw H}let X=Y8(z,$);return L8(X,{real:Z,text:Q}),X}function i9($){let Z=$._meta,Q={...$};delete Q._meta;let z=q2(Q,{lineWidth:0});if(Z?.found&&Z.found.length>0){let X=Z.found.join(" + ");z=z.replace(/^(\s+type:\s+\S+)(\s*)$/m,(H,U,J)=>{if(J.includes("#"))return H;return`${U} # found: ${X}`})}return z}function gq($,Z){return n9($,Z,void 0)}function n9($,Z,Q,z,X=!1){let H=I8($),U=Z0(H),J=[],G;try{G=q8(U,(V)=>{r9(V,$);let Y=V.clone();if(Z(V),J=S9(Y,V),X)J=[...J,...E9(Y,V)];if(z)J=[...J,...z(V,Y.toJS()).filter((W)=>!J.some((B)=>B.path===W.path))]},$)}catch(V){let Y=c9(V);if(Y)throw d9($,Y);throw V}if(!G.changed)return{written:!1,text:U,keptAliases:J};return e($,G.text,{expect:Q&&Q.real===H?Q.text:U}),{written:!0,text:G.text,keptAliases:J}}function m9($){try{return l9($),!0}catch{return!1}}function vq($){let Z=$.getIn(["project","type"],!0);return s(Z)?Z.value:Z}function r9($,Z){let Q=$.contents;if(Q!==null&&Q!==void 0&&!p(Q))throw new b("not-yaml",t$(Z),`${Z}: a .faf must be a YAML mapping (key: value pairs), but this one is ${d$($.toJS())}. faf left it unchanged — fix it by hand.`)}function kq($,Z,Q){r9($,Q);let z=$.contents,X=p(z)&&z.items.some((Y)=>s(Y.key)&&Y.key.value==="_meta"),{_meta:H,...U}=Z,J=vq($),G=p(z)?$.toJS():{},V=p(z)?z:$.createNode({});if($.contents=V,yZ($,V,G,X?{...Z}:U),!X)uq($,H?.found,J)}function hq($,Z){let Q=$.contents;if(p(Q)&&Q.items.some((H)=>s(H.key)&&H.key.value==="_meta"))return Z;let{_meta:z,...X}=Z;return X}function uq($,Z,Q){if(!Z||Z.length===0||!o(Q))return;let z=$.getIn(["project","type"],!0);if(s(z)&&!o(z.value)&&(z.comment===null||z.comment===void 0))z.comment=` found: ${Z.join(" + ")}`}function fq($,Z,Q={}){if(!Q.replace&&m9($)){let J=n9($,(G)=>kq(G,Z,$),a$(Z),(G,V)=>j9(G,hq(G,Z),V),u9(Z));L8(Z,{real:I8($),text:J.text});for(let G of J.keptAliases??[])Q.onAliasKept?.(G);return J.written}let z=t$($),X=i9(Z),H=m9($)?I0(h(gZ(z),z)):null,U=e($,X,{expect:H});return L8(Z,{real:U,text:X}),!0}function s9($){return Z0(I8($))}function p9($,Z){let Q;try{Q=l9(Z)}catch{return!1}if(!Q.isSymbolicLink()&&!Q.isFile())return!1;return h($,t$(Z),{read:!0}),!0}function o9($=process.cwd()){let Z=["project.faf",".faf"];for(let z of Z){let X=f9($,z);if(p9($,X))return X}let Q=gZ($);if(Q!==$)for(let z of Z){let X=f9(Q,z);if(p9(Q,X))return X}return null}import{statSync as a9}from"fs";import{homedir as mq}from"os";import{parse as pq,resolve as t9}from"path";function e9($,Z){try{let Q=a9($,{bigint:!0}),z=a9(Z,{bigint:!0});return Q.isDirectory()&&Q.ino!==0n&&Q.dev===z.dev&&Q.ino===z.ino}catch{return!1}}function lq($){let Z=t9($),Q=t9(mq()),z=pq(Z).root;if(Z===Q)return"home";if(Z===z||Z==="/"||/^[A-Za-z]:[\\/]?$/.test(Z))return"root";if(e9(Z,Q))return"home";if(e9(Z,z))return"root";return null}function cq($=process.cwd()){return lq($)!==null}import{existsSync as dq,statSync as $Q}from"fs";import{dirname as iq,join as nq}from"path";var rq=["CLAUDE.md","AGENTS.md",".cursorrules","GEMINI.md"],sq=1000;function oq($,Z=iq($)){let Q=$Q($).mtimeMs,z=rq.map((X)=>{let H=nq(Z,X);if(!dq(H))return{file:X,exists:!1,mtime_ms:null,status:"missing",delta_ms:null};let U=$Q(H).mtimeMs,J=U-Q,G;if(Math.abs(J)<sq)G="in-sync";else if(J>0)G="newer";else G="older";return{file:X,exists:!0,mtime_ms:U,status:G,delta_ms:J}});return{source:$,source_mtime_ms:Q,targets:z,drifted:z.filter((X)=>X.status==="newer"||X.status==="older").length,in_sync:z.filter((X)=>X.status==="in-sync").length,missing:z.filter((X)=>X.status==="missing").length}}import{join as LK}from"path";import{deprecate as IK}from"node:util";import{createHash as QK}from"crypto";import{resolve as zK}from"path";class L2 extends Error{constructor($){super($);this.name="JsonEditError"}}var aq=new Set([" ","\t",`
|
|
161
|
+
`,"\r"]);class hZ{s;i=0;constructor($){this.s=$}parse(){if(this.s.startsWith("\uFEFF"))this.i=1;let $=this.value();if(this.ws(),this.i!==this.s.length)this.fail("text after the end of the JSON value");return $}fail($){throw new L2(`not valid JSON (${$} at offset ${this.i})`)}ws(){while(this.i<this.s.length&&aq.has(this.s[this.i]))this.i++}value(){this.ws();let $=this.s[this.i];if($==="{")return this.object();if($==="[")return this.array();if($==='"'){let Z=this.i;return this.string(),{kind:"string",start:Z,end:this.i,members:[],items:[]}}if($==="-"||$>="0"&&$<="9")return this.number();for(let Z of["true","false","null"])if(this.s.startsWith(Z,this.i)){let Q=this.i;return this.i+=Z.length,{kind:"literal",start:Q,end:this.i,members:[],items:[]}}return this.fail($===void 0?"unexpected end":`unexpected ${JSON.stringify($)}`)}object(){let $=this.i++,Z=[];if(this.ws(),this.s[this.i]==="}")return this.i++,{kind:"object",start:$,end:this.i,members:Z,items:[]};for(;;){if(this.ws(),this.s[this.i]!=='"')this.fail("expected a key");let Q=this.i,z=this.string(),X=this.i;if(this.ws(),this.s[this.i]!==":")this.fail('expected ":"');if(this.i++,Z.push({key:z,keyStart:Q,keyEnd:X,value:this.value()}),this.ws(),this.s[this.i]===","){this.i++;continue}if(this.s[this.i]==="}")return this.i++,{kind:"object",start:$,end:this.i,members:Z,items:[]};this.fail('expected "," or "}"')}}array(){let $=this.i++,Z=[];if(this.ws(),this.s[this.i]==="]")return this.i++,{kind:"array",start:$,end:this.i,members:[],items:Z};for(;;){if(Z.push(this.value()),this.ws(),this.s[this.i]===","){this.i++;continue}if(this.s[this.i]==="]")return this.i++,{kind:"array",start:$,end:this.i,members:[],items:Z};this.fail('expected "," or "]"')}}string(){let $=this.i++;for(;;){let Z=this.s[this.i];if(Z===void 0)this.fail("unterminated string");if(Z==='"')break;if(Z<" ")this.fail("control character in a string");if(Z==="\\"){let Q=this.s[this.i+1];if(Q==="u"){if(!/^[0-9a-fA-F]{4}$/.test(this.s.slice(this.i+2,this.i+6)))this.fail("bad \\u escape");this.i+=6;continue}if(!'"\\/bfnrt'.includes(Q??"x"))this.fail("bad escape");this.i+=2;continue}this.i++}return this.i++,JSON.parse(this.s.slice($,this.i))}number(){let $=/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/.exec(this.s.slice(this.i));if(!$)this.fail("bad number");let Z=this.i;return this.i+=$[0].length,{kind:"number",start:Z,end:this.i,members:[],items:[]}}}var vZ=($)=>typeof $==="object"&&$!==null&&!Array.isArray($);function kZ($,Z){if(Object.is($,Z))return!0;if(Array.isArray($)&&Array.isArray(Z))return $.length===Z.length&&$.every((Q,z)=>kZ(Q,Z[z]));if(vZ($)&&vZ(Z)){let Q=Object.keys($);return Q.length===Object.keys(Z).length&&Q.every((z)=>(z in Z)&&kZ($[z],Z[z]))}return!1}class ZQ{s;style;after;edits=[];constructor($,Z,Q){this.s=$;this.style=Z;this.after=Q}startsLine($){let Z=this.s.lastIndexOf(`
|
|
162
162
|
`,$-1);return Z>=0&&/^[ \t]*$/.test(this.s.slice(Z+1,$))}indentOf($){return this.startsLine($)?this.s.slice(this.s.lastIndexOf(`
|
|
163
163
|
`,$-1)+1,$):""}render($,Z,Q){if(!Q)return JSON.stringify($);return JSON.stringify($,null,this.style.unit).split(`
|
|
164
|
-
`).join(this.style.eol+Z)}apply($,Z,Q,z){let X={};for(let[H,U]of Object.entries(Z)){if(U===void 0)continue;let J=Q?`${Q}.${H}`:H,G=$.members.filter((B)=>B.key===H);if(G.length>1)throw new L2(`the key "${J}" is there more than once`);let V=G[0];if(!V){if($.members.length===0)X[H]=U;else this.insert($,H,U,Q);continue}let Y=this.startsLine(V.keyStart);if(
|
|
165
|
-
`));continue}let W=JSON.parse(this.s.slice(V.value.start,V.value.end));if(
|
|
164
|
+
`).join(this.style.eol+Z)}apply($,Z,Q,z){let X={};for(let[H,U]of Object.entries(Z)){if(U===void 0)continue;let J=Q?`${Q}.${H}`:H,G=$.members.filter((B)=>B.key===H);if(G.length>1)throw new L2(`the key "${J}" is there more than once`);let V=G[0];if(!V){if($.members.length===0)X[H]=U;else this.insert($,H,U,Q);continue}let Y=this.startsLine(V.keyStart);if(vZ(U)){if(V.value.kind!=="object")throw new L2(`"${J}" is not an object, so faf cannot add its keys to it`);this.apply(V.value,U,J,Y||this.s.slice(V.value.start,V.value.end).includes(`
|
|
165
|
+
`));continue}let W=JSON.parse(this.s.slice(V.value.start,V.value.end));if(kZ(W,U))continue;if(V.value.kind==="object"||V.value.kind==="array")throw new L2(`"${J}" is ${V.value.kind==="object"?"an object":"an array"}, so faf will not replace it with a value`);this.edits.push({start:V.value.start,end:V.value.end,text:this.render(U,this.indentOf(V.keyStart),Y)})}if(Object.keys(X).length>0)this.fillEmpty($,X,z)}fillEmpty($,Z,Q){let z=this.indentOf(this.lineLead($.start)),X=Q?this.render(Z,z,!0):JSON.stringify(Z);this.edits.push({start:$.start,end:$.end,text:X})}insert($,Z,Q,z){let X=$.members,H=X[X.length-1],J=(this.after[z]?.[Z]??[]).map((W)=>X.find((B)=>B.key===W)).find((W)=>W!==void 0);if(this.startsLine(X[0].keyStart)){let W=J&&J!==H?X[X.indexOf(J)+1]:H,B=this.indentOf(W.keyStart),K=this.s.slice(W.keyEnd,W.value.start),L=this.s.lastIndexOf(`
|
|
166
166
|
`,W.keyStart-1),q=L>0&&this.s[L-1]==="\r"?L-1:L,D=`${this.style.eol}${B}${JSON.stringify(Z)}${K}${this.render(Q,B,!0)},`;this.edits.push({start:q,end:q,text:D});return}let G=J??H,V=this.s.slice(G.keyEnd,G.value.start),Y=X.length>1?this.s.slice(X[0].value.end,X[1].keyStart):", ";this.edits.push({start:G.value.end,end:G.value.end,text:`${Y}${JSON.stringify(Z)}${V}${this.render(Q,"",!1)}`})}append($,Z,Q,z){if(Z.length===0)return;if($.items.length===0){this.edits.push({start:$.start,end:$.end,text:this.render(Z,this.indentOf(Q),z)});return}let X=$.items[$.items.length-1];if(this.startsLine($.items[0].start)){let U=this.indentOf($.items[0].start),J=Z.map((G)=>`,${this.style.eol}${U}${this.render(G,U,!0)}`).join("");this.edits.push({start:X.end,end:X.end,text:J});return}let H=$.items.length>1?this.s.slice($.items[0].end,$.items[1].start):", ";this.edits.push({start:X.end,end:X.end,text:Z.map((U)=>`${H}${this.render(U,"",!1)}`).join("")})}lineLead($){let Z=this.s.lastIndexOf(`
|
|
167
|
-
`,$-1)+1;while(Z<$&&(this.s[Z]===" "||this.s[Z]==="\t"))Z++;return Z}}function
|
|
167
|
+
`,$-1)+1;while(Z<$&&(this.s[Z]===" "||this.s[Z]==="\t"))Z++;return Z}}function tq($,Z){let Q=$.includes(`\r
|
|
168
168
|
`)?`\r
|
|
169
169
|
`:`
|
|
170
170
|
`,z=Z.members[0],X=z?$.lastIndexOf(`
|
|
171
|
-
`,z.keyStart-1):-1,H=z&&X>=0?$.slice(X+1,z.keyStart):"";return{eol:Q,unit:/^[ \t]+$/.test(H)?H:" "}}function e$($,Z,Q={}){let z=new
|
|
172
|
-
`)),
|
|
173
|
-
`,Z-1);return Q>=0&&/^[ \t]*$/.test($.slice(Q+1,Z))}function
|
|
174
|
-
`,Q.keyStart-1);return{start:X>0&&$[X-1]==="\r"?X-1:X,end:Q.value.end+1,text:""}}if(z>0)return{start:Z.members[z-1].value.end,end:Q.value.end,text:""};return{start:Q.keyStart,end:Z.members[1].keyStart,text:""}}function
|
|
175
|
-
`),Z.join("")}function
|
|
171
|
+
`,z.keyStart-1):-1,H=z&&X>=0?$.slice(X+1,z.keyStart):"";return{eol:Q,unit:/^[ \t]+$/.test(H)?H:" "}}function e$($,Z,Q={}){let z=new hZ($).parse();if(z.kind!=="object")throw new L2("the JSON is not an object");let X=new ZQ($,tq($,z),Q);return X.apply(z,Z,"",$.slice(z.start,z.end).includes(`
|
|
172
|
+
`)),QQ($,X.edits)}function QQ($,Z){if(Z.length===0)return{text:$,changed:!1};let Q=Z.map((X,H)=>({e:X,i:H})).sort((X,H)=>H.e.start-X.e.start||H.i-X.i),z=$;for(let{e:X}of Q)z=z.slice(0,X.start)+X.text+z.slice(X.end);return{text:z,changed:z!==$}}function eq($){let Z=new hZ($).parse();if(Z.kind!=="object")throw new L2("the JSON is not an object");return Z}function $K($,Z){let Q=$.lastIndexOf(`
|
|
173
|
+
`,Z-1);return Q>=0&&/^[ \t]*$/.test($.slice(Q+1,Z))}function ZK($,Z,Q){if(Z.members.length===1)return{start:Z.start,end:Z.end,text:"{}"};let z=Z.members.indexOf(Q);if($K($,Q.keyStart)&&$[Q.value.end]===","){let X=$.lastIndexOf(`
|
|
174
|
+
`,Q.keyStart-1);return{start:X>0&&$[X-1]==="\r"?X-1:X,end:Q.value.end+1,text:""}}if(z>0)return{start:Z.members[z-1].value.end,end:Q.value.end,text:""};return{start:Q.keyStart,end:Z.members[1].keyStart,text:""}}function zQ($,Z){let Q=[],z=eq($);for(let X of Z){if(z.kind!=="object")return{count:0,chain:Q};let H=z.members.filter((U)=>U.key===X);if(H.length!==1)return{count:H.length,chain:Q};Q.push({obj:z,member:H[0]}),z=H[0].value}return{count:1,chain:Q}}function XQ($,Z){let{count:Q,chain:z}=zQ($,Z);if(Q!==1)return{count:Q};let X=z[z.length-1].member.value;return{count:Q,value:JSON.parse($.slice(X.start,X.end))}}function uZ($,Z,Q={}){let{count:z,chain:X}=zQ($,Z);if(z!==1||X.length===0)return null;let H=X[X.length-1];if(Q.dropEmptyParent&&X.length>1&&H.obj.members.length===1)H=X[X.length-2];return QQ($,[ZK($,H.obj,H.member)]).text}var UQ="one.faf/render";function mZ($){return`sha256:${QK("sha256").update($,"utf8").digest("hex")}`}var XK=/^sha256:[0-9a-f]{64}$/,HK=/^<meta name="faf-render" content="(sha256:[0-9a-f]{64})">$/,UK='<meta name="faf-render"',JK='<meta name="description" content="Visual render of project.faf.';function GK($){let Z=$.split(/(?<=\n)/),Q=Z.findIndex((z)=>z.startsWith(JK));return Z.splice(Q+1,0,`<meta name="faf-render" content="${mZ($)}">
|
|
175
|
+
`),Z.join("")}function JQ($){let Z=$.split(/(?<=\n)/),Q=[],z=!1;if(Z.forEach((X,H)=>{let U=X.replace(/\r?\n$/,""),J=HK.exec(U);if(J)Q.push({at:H,hash:J[1]});else if(U.startsWith(UK))z=!0}),Q.length===0&&!z)return null;if(Q.length!==1||z)return"many";return Z.splice(Q[0].at,1),{hash:Q[0].hash,canonical:Z.join("")}}var fZ=["_meta",UQ];function VK($){return e$($,{_meta:{[UQ]:mZ($)}}).text}function YK($){try{return uZ($,fZ,{dropEmptyParent:!0})??$}catch{return $}}function WK($){let Z;try{Z=XQ($,fZ)}catch{return null}if(Z.count===0)return null;if(Z.count>1||typeof Z.value!=="string"||!XK.test(Z.value))return"many";let Q=uZ($,fZ,{dropEmptyParent:!0});return Q===null?"many":{hash:Z.value,canonical:Q}}function GQ($,Z){return $==="html"?GK(Z):VK(Z)}function BK($,Z){if($==="json")return YK(Z);let Q=JQ(Z);return Q===null||Q==="many"?Z:Q.canonical}function HQ($,Z){let Q=new TextDecoder().decode($),z=Z==="html"?JQ(Q):WK(Q);if(z===null)return"none";if(z==="many")return"mismatch";return Buffer.from(Q,"utf-8").equals(Buffer.from($))&&z.hash===mZ(z.canonical)&&GQ(Z,z.canonical)===Q?"match":"mismatch"}function qK($){let Z=new TextDecoder().decode($);if(!Z.includes(`\r
|
|
176
176
|
`)||/(?:^|[^\r])\n/.test(Z)||!Buffer.from(Z,"utf-8").equals($))return null;return Buffer.from(Z.replace(/\r\n/g,`
|
|
177
|
-
`),"utf-8")}function
|
|
178
|
-
`);if(G!==null&&J.equals(Buffer.from(V,"utf-8")))return{path:X,result:"unchanged"};if(Q.force!==!0&&!
|
|
179
|
-
`)}function
|
|
177
|
+
`),"utf-8")}function KK($,Z,Q){let z=HQ($,Q);return z!=="match"&&Z!==null&&HQ(Z,Q)==="match"?"match":z}function $6($,Z,Q){let z=zK($),X=h(Q.root,z),H=BK(Q.format,Z),U=GQ(Q.format,H),J=I0(X);if(J===null)return e(X,U,{root:Q.root,expect:null}),{path:X,result:"created"};if(J.equals(Buffer.from(U,"utf-8")))return{path:X,result:"unchanged"};let G=qK(J),V=G===null?U:U.replace(/\r?\n/g,`\r
|
|
178
|
+
`);if(G!==null&&J.equals(Buffer.from(V,"utf-8")))return{path:X,result:"unchanged"};if(Q.force!==!0&&!DK(z,J,G,H,Q))return{path:X,result:"unchanged"};return e(X,V,{root:Q.root,expect:J}),{path:X,result:"updated"}}function DK($,Z,Q,z,X){let H=KK(Z,Q,X.format);if(H==="match")return!0;if(H==="mismatch")throw new b("not-owned",$,`${$} was edited since faf wrote it — faf left it unchanged. Use --force to replace it.`,{onWrite:!0});if(!X.hasMark(Z))throw new b("not-owned",$,`${$} has no ${X.mark}, so faf did not write it — faf left it unchanged.`,{onWrite:!0});let U=Buffer.from(z,"utf-8");if(Z.equals(U)||Q!==null&&Q.equals(U))return!1;throw new b("not-owned",$,`${$} has no faf render hash (written before 7.13), so faf cannot tell whether it was edited — faf left it unchanged. Use --force once to replace it; after that faf recognises its own output.`,{onWrite:!0})}var VQ=L$.orange,OK=L$.cyan,_K=L$.cyanDeep,MK="#FF9500",PK="#FF3B30",FK="#E6EDF3",RK="#6E7681",YQ={TROPHY:{glyph:"✪",color:VQ},GOLD:{glyph:"★",color:VQ},SILVER:{glyph:"◆",color:OK},BRONZE:{glyph:"◇",color:_K},GREEN:{glyph:"●",color:FK},YELLOW:{glyph:"●",color:MK},RED:{glyph:"○",color:PK},WHITE:{glyph:"♡",color:RK}};function Z$($){return String($??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}var WQ=["who","what","why","where","when","how"];function O8($){return $.filter(([,Z])=>Z!==void 0&&Z!==null&&String(Z).trim()!=="").map(([Z,Q])=>`<div class="row"><div class="k">${Z$(Z)}</div><div class="v">${Z$(Q)}</div></div>`).join(`
|
|
179
|
+
`)}function pZ($,Z,Q="project.faf"){let z=Z$($.project?.name??"Project"),X=Z.tier?.name??"WHITE",H=YQ[X]??YQ.WHITE,U=Z.inherited?Z.represents?`inherited from ${Z$(Z.represents)}`:"inherited":`${Z.score}%`,J=X==="TROPHY"&&!Z.inherited,G=$.human_context??{},V=WQ.map((q)=>[q,G[q]]),Y=Object.entries(G).filter(([q])=>!WQ.includes(q)),W=[["goal",$.project?.goal],["main_language",$.project?.main_language],["type",$.project?.type],["framework",$.project?.framework],["faf_version",$.faf_version]],B=Object.entries($.stack??{}),K=B.filter(([,q])=>q&&q!=="slotignored"&&String(q).trim()!==""),L=B.filter(([,q])=>q==="slotignored").length;return`<!DOCTYPE html>
|
|
180
180
|
<html lang="en">
|
|
181
181
|
<head>
|
|
182
182
|
<meta charset="UTF-8">
|
|
@@ -246,39 +246,39 @@ Rendered on-demand from your current <strong>${Z$(Q)}</strong><br>
|
|
|
246
246
|
</div>
|
|
247
247
|
</body>
|
|
248
248
|
</html>
|
|
249
|
-
`}var FK='<meta name="description" content="Visual render of project.faf.';function RK($){return new TextDecoder().decode($).split(/\r?\n/).some((Z)=>Z.trim().startsWith(FK)&&Z.includes(" by faf"))}function NK($,Z,Q,z="project.faf",X={}){$6(KK($,"project.html"),mZ(Z,Q,z),{root:$,format:"html",hasMark:RK,mark:"faf mark (the `Visual render of project.faf` description line)",force:X.force})}var TK=DK(mZ,"faf-cli: generateProjectHtml is deprecated, use renderProjectHtml","FAF0001");import{join as dK}from"path";import{deprecate as iK}from"node:util";var Q$="https://faf.one/ext/context/v1",pZ="io.modelcontextprotocol.registry/publisher-provided";function S0($,Z={}){return{faf:Z.fafPointer??"./project.faf",mediaType:"application/vnd.faf+yaml",iana:"https://www.iana.org/assignments/media-types/application/vnd.faf+yaml",deterministic:!0,...Z.scoreEndpoint?{scoreEndpoint:Z.scoreEndpoint}:{},generated:$.generated??Z.now??new Date().toISOString()}}function I2($,Z={}){let Q={"one.faf/context":S0($,Z)},z=new TextEncoder().encode(JSON.stringify(Q)).length;if(z>4096)throw Error(`publisher-provided _meta is ${z}B — exceeds the registry ${"4096"}B cap`);return{["io.modelcontextprotocol.registry/publisher-provided"]:Q}}var WQ="JSONRPC",dZ="1.0",M8=["application/vnd.faf+yaml","application/vnd.fafm+yaml","application/vnd.fafa+yaml"],P8="https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json",BQ="https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",qQ="1.0",KQ="1.0",lZ={a2a:"application/a2a-agent-card+json",server_card:"application/mcp-server-card+json",fafa:"application/vnd.fafa+yaml"};function DQ($){return($.endpoints??[]).filter((Z)=>String(Z.protocol??"").toLowerCase()==="a2a"&&Z.location)}function O2($,Z={}){let Q=DQ($);if(Q.length>0)return Q;let z=Z.doorUrl?.trim();if(z)return[{protocol:"a2a",location:z,version:dZ}];return[]}function AK($){try{return`https://${z$($)}/.well-known/fafa`}catch{return}}function iZ($,Z,Q={}){let z=S0(Z,Q),X=$.agent??{},H={fafaSpecVersion:String($.version??KQ),mediaTypes:[...M8],provenance:{faf:z.faf,mediaType:z.mediaType},generated:z.generated};if(X.id)H.agentId=X.id;let U=AK($);if(U)H.passport=U;return{uri:Q$,description:"FAF passport and project DNA as typed parts",required:!1,params:H}}function CK($){let Z=new Set;for(let Q of $.capabilities??[])if(Q.cites_spec&&M8.includes(Q.cites_spec))Z.add(Q.cites_spec);return["text/plain",...Z]}function F8($,Z={}){let Q=$.agent??{},z=O2($,Z);if(z.length===0)throw Error("No A2A endpoint in .fafa (need endpoints[].protocol: a2a + location). Will not invent a door.");let X=String(Q.displayName??$.metadata?.persona??Q.name??"").trim(),H=String(Q.description??"").trim(),U=String(Q.version??"").trim();if(!X||!H||!U)throw Error("A2A card needs agent.displayName|name, description, version in .fafa");let J=String(Q.vendor??"").trim(),G=String(Q.homepage??"").trim(),V=J&&G?{organization:J,url:G}:void 0,Y=($.capabilities??[]).map((W)=>{let B=String(W.name??"").trim();if(!B)throw Error("A2A skill missing capabilities[].name");let K=Array.isArray(W.tags)?W.tags.map(String):[],L=W.cites_spec&&M8.includes(W.cites_spec)?[W.cites_spec,"text/plain"]:void 0;return{id:B,name:B,description:String(W.description??"").trim()||B,tags:K,...L?{inputModes:L}:{}}});return{name:X,description:H,supportedInterfaces:z.map((W)=>({url:String(W.location),protocolBinding:WQ,protocolVersion:String(W.version??dZ)})),...V?{provider:V}:{},version:U,capabilities:{streaming:!1,pushNotifications:!1,extendedAgentCard:!1,extensions:[...Z.extensions??[]]},defaultInputModes:CK($),defaultOutputModes:["text/plain","application/json"],skills:Y}}var jK=/^[a-z0-9][a-z0-9._-]*$/,wK=/^(@[a-z0-9~][a-z0-9-._~]*\/)?[a-z0-9~][a-z0-9-._~]*$/,SK=/^[A-Za-z0-9]([A-Za-z0-9._-]*[A-Za-z0-9])?$/,EK=/^[A-Za-z0-9][^\s]*$/,bK=["a2a","mcp"],yK=/^(?=.{1,253}$)([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$/;function T($){return String($??"").trim()}function _8($){return Array.isArray($)?$.map(T).filter(Boolean):[]}function xK($){return T($).toLowerCase().replace(/^https?:\/\//,"").replace(/\/.*$/,"").replace(/^www\./,"")}function gK($,Z,Q){let z=["display_name","description","version"].filter((X)=>!T($[X]));if(z.length)throw Error(`Missing answer: ${z.join(", ")}`);if(!jK.test(Z))throw Error("Short name: lowercase letters, digits, dots, hyphens or underscores.");if(!yK.test(Q))throw Error(`Domain "${$.domain}" is not a domain name (e.g. example.com).`)}function vK($,Z){return($.skills??[]).filter((Q)=>T(Q.name)).map((Q)=>({name:T(Q.name),type:T(Q.type)||"tool",description:T(Q.description)||T(Q.name),tags:Z.length?Z:[T(Q.name).toLowerCase()]}))}function kK($){let Z=($.packages??[]).filter((Q)=>T(Q.registryType)&&T(Q.identifier));for(let Q of Z){let z=T(Q.registryType),X=T(Q.identifier);if(z==="npm"&&!wK.test(X))throw Error(`Package "${X}" is not an npm package name (e.g. weather-mcp or @acme/weather).`);if(z==="pypi"&&!SK.test(X))throw Error(`Package "${X}" is not a PyPI package name (e.g. weather-mcp or weather_mcp).`);if(z!=="npm"&&z!=="pypi"&&!EK.test(X))throw Error(`Package "${X}" is not a ${z} package identifier: it must start with a letter or digit and have no spaces.`)}return Z.map((Q)=>({registryType:T(Q.registryType),identifier:T(Q.identifier),...T(Q.version)?{version:T(Q.version)}:{}}))}function hK($){if(/\s/.test($))return!1;try{let Z=new URL($);return(Z.protocol==="http:"||Z.protocol==="https:")&&Z.hostname!==""}catch{return!1}}function uK($){if(!hK(T($.url)))throw Error(`Where it runs: "${T($.url)}" is not an http(s) URL (or give an npm package).`);if(!bK.includes(T($.protocol).toLowerCase()))throw Error(`Protocol "${T($.protocol)}": a2a or mcp.`)}function fK($,Z){let Q=($.endpoints??[]).filter((X)=>T(X.url));Q.forEach(uK);let z=[...Q.map((X)=>({protocol:T(X.protocol).toLowerCase(),transport:"http",location:T(X.url)})),...Z.map((X)=>({protocol:"mcp",transport:"stdio",location:X.identifier}))];if(z.length===0)throw Error("Missing answer: endpoints (a URL, or a package people install)");return z}function mK($,Z,Q,z){let X={domain:Z},H=[["repository",T($.repository)],["icon",T($.icon)],["organizationUrl",T($.organization_url)]];for(let[J,G]of H)if(G)X[J]=G;if(Q.length)X.keywords=Q;let U=_8($.example_requests);if(U.length)X.examples=U;if(z.length)X.packages=z;return X}function LQ($){let Z=T($.handle).toLowerCase(),Q=xK($.domain);gK($,Z,Q);let z=_8($.tags),X=kK($),H={name:Z,displayName:T($.display_name),id:`urn:air:${Q}:agent:${Z}`,...T($.organization)?{vendor:T($.organization)}:{},version:T($.version),description:T($.description),homepage:T($.homepage)||`https://${Q}`,...T($.license)?{license:T($.license)}:{}};return{version:KQ,agent:H,capabilities:vK($,z),endpoints:fK($,X),metadata:{cards:mK($,Q,z,X)}}}function IQ($){return q2($,{lineWidth:0})}function z$($){let Z=T($.agent?.id),Q=/^urn:air:([^:]+):/.exec(Z);if(Q)return Q[1];let z=T($.metadata?.cards?.domain);if(z)return z;try{return new URL(T($.agent?.homepage)).hostname.replace(/^www\./,"")}catch{throw Error("The .fafa names no domain (agent.id urn:air, metadata.cards.domain or agent.homepage).")}}function OQ($){let Z=T($.agent?.name).toLowerCase().replace(/[^a-z0-9._-]/g,"-").replace(/^-+|-+$/g,"");if(!Z)throw Error("The .fafa needs agent.name (the short name).");return Z}function nZ($){return`${z$($).split(".").reverse().join(".")}/${OQ($)}`}function cZ($){let Z=$.replace(/\s+/g," ").trim();return Z.length<=100?Z:`${Z.slice(0,97).trimEnd()}...`}function _2($){return($.endpoints??[]).filter((Z)=>T(Z.protocol).toLowerCase()==="mcp"&&/^https?:\/\//.test(T(Z.location))).map((Z)=>({type:"streamable-http",url:T(Z.location)}))}function pK($){if(!$)return;try{let Z=new URL($).hostname.replace(/^www\./,"");return{url:$,source:Z.split(".")[0]}}catch{return}}function _Q($){let Z=$.agent??{},Q=$.metadata?.cards??{},z=T(Z.description),X=T(Z.version);if(!z||!X)throw Error("An MCP card needs agent.description and agent.version in .fafa");let H={name:nZ($),version:X,description:cZ(z)},U=T(Z.displayName);if(U)H.title=cZ(U);let J=T(Z.homepage);if(J)H.websiteUrl=J;let G=pK(T(Q.repository));if(G)H.repository=G;if(T(Q.icon))H.icons=[{src:T(Q.icon)}];return H}function MQ($){return($.metadata?.cards?.packages??[]).map((Z)=>({registryType:T(Z.registryType),identifier:T(Z.identifier),...T(Z.version)?{version:T(Z.version)}:{},transport:{type:"stdio"}}))}function rZ($){return _2($).length>0||MQ($).length>0}function PQ($){let Z=T($.agent?.displayName);return{name:nZ($),...Z?{title:cZ(Z)}:{}}}function R8($,Z,Q={}){let z=_2($);if(z.length===0)throw Error("A Server Card describes a remote MCP server: the .fafa has no mcp endpoint at an http(s) URL.");return{$schema:P8,..._Q($),remotes:z,...Z?{_meta:{"one.faf/context":S0(Z,Q)}}:{}}}function FQ($,Z,Q={}){let z=_2($),X=MQ($);if(z.length===0&&X.length===0)throw Error("A registry entry needs a package people install or a remote MCP URL.");return{$schema:BQ,..._Q($),...X.length?{packages:X}:{},...z.length?{remotes:z}:{},...Z?{_meta:I2(Z,Q)}:{}}}function lK($,Z,Q){if(!Z.includes("a2a")||O2($,Q).length===0)return;return Q.a2aCardUrl??`https://${z$($)}/.well-known/agent-card.json`}function N8($,Z,Q={}){let z=z$($),X=OQ($),H=$.agent??{},U=T(H.displayName)||T(H.name),J=T(H.description),G=T(H.version),V=Q.now??new Date().toISOString(),Y=(K,L,q)=>({identifier:`urn:air:${z}:${K}:${X}`,displayName:U,type:L,description:J,url:q,...G?{version:G}:{},updatedAt:V}),W=[],B=lK($,Z,Q);if(B)W.push(Y("a2a",lZ.a2a,B));if(Z.includes("server_card")){let K=_2($)[0];if(K)W.push(Y("mcp",lZ.server_card,`${K.url.replace(/\/+$/,"")}/server-card`))}if(Q.listFafa!==!1)W.push(Y("agent",lZ.fafa,`https://${z}/.well-known/fafa`));return W}function T8($){let Z=$.agent??{},Q=T(Z.vendor)||T(Z.displayName)||T(Z.name);if(!Q)return;let z;try{z=z$($)}catch{z=void 0}return{displayName:Q,...z?{identifier:z}:{}}}function RQ($,Z,Q={}){let z=T8($);return{specVersion:qQ,...z?{host:z}:{},entries:N8($,Z,Q)}}function sZ($){let Z=$.metadata?.cards??{},Q=_8(Z.keywords),z=_8(Z.examples);return{...Q.length?{tags:Q}:{},...z.length?{representativeQueries:z}:{}}}function NQ($,Z,Q={}){let z=T8($),X=sZ($);return{specVersion:qQ,...z?{host:z}:{},entries:N8($,Z,Q).map((H)=>({...H,...X}))}}function TQ($,Z){let Q=new Set(Z.cards),z={fafa:$,fafaText:IQ($)},{faf:X}=Z;if(Q.has("a2a")){let U=[...Z.a2aExtensions??[],...X?[iZ($,X,Z)]:[]];z.a2a=F8($,{extensions:U})}if(Q.has("server_card"))z.server_card=R8($,X,Z);if(Q.has("server_json"))z.server_json=FQ($,X,Z);let H={now:Z.now,listFafa:Z.listFafa};if(Q.has("ai_catalog"))z.ai_catalog=RQ($,Z.cards,H);if(Q.has("ard"))z.ard=NQ($,Z.cards,H);return z}function cK($,Z){return TQ(LQ($),Z)}var nK=P8,rK=/^[a-zA-Z0-9.-]+\/[a-zA-Z0-9._-]+$/;function AQ($){let Z=String($.project?.name??"project").trim();if(Z.includes("/")&&rK.test(Z))return Z;let Q=$.project?.homepage??$.project?.website??$.project?.url,z="local";if(Q)try{z=new URL(Q).hostname.replace(/^www\./,"").split(".").reverse().join(".")}catch{}let X=Z.replace(/[^a-zA-Z0-9._-]/g,"-").replace(/^-+|-+$/g,"")||"project";return`${z}/${X}`}function sK($){let Z=String($.project?.goal??$.context??$.project?.name??"MCP server").replace(/\s+/g," ").trim();if(!Z)return"MCP server";return Z.length<=100?Z:`${Z.slice(0,97).trimEnd()}...`}function Z6($,Z={}){let Q={$schema:nK,name:AQ($),version:String($.project?.version??"0.1.0"),description:sK($)},z=A8($)??$.project?.name;if(z&&z.length<=100)Q.title=z;let X=$.project?.homepage??$.project?.website??$.project?.url;if(X)Q.websiteUrl=X;if(Z.remoteUrl)Q.remotes=[{type:"streamable-http",url:Z.remoteUrl}];return Q._meta={"one.faf/context":S0($,Z)},Q}function aZ($){return AQ($)}function A8($){let Z=$.project?.title;if(typeof Z==="string"){let Q=Z.trim();if(Q&&Q.length<=100)return Q}return}function oK($){try{return JSON.parse(new TextDecoder().decode($).replace(/^\uFEFF/,""))}catch{return}}var oZ=($)=>typeof $==="object"&&$!==null&&!Array.isArray($);function CQ($){let Z=oK($);return oZ(Z)&&oZ(Z._meta)&&oZ(Z._meta["one.faf/context"])}function aK($,Z,Q={},z={}){let X=Z6(Z,Q),H=dK($,"server-card");return $6(H,`${JSON.stringify(X,null,2)}
|
|
250
|
-
`,{root:$,format:"json",hasMark:CQ,mark:'FAF context-block (`_meta["one.faf/context"]`)',force:z.force}),H}function tK($,Z){let Q={name:Z.name,title:Z.title,version:Z.version,_meta:Z.meta};return e$($,Q,{"":{name:["$schema"],title:["name"],version:["description","title","name"]}})}var eK=iK(Z6,"faf-cli: generateServerCard is deprecated, use buildServerCard","FAF0002");import{existsSync as jQ}from"fs";import{basename as $D,dirname as SQ,join as wQ}from"path";import{deprecate as ZD}from"node:util";var QD=["a2a","mcp","registry","catalog","ard"];function zD($){return m0(Z0(h(SQ($),$D($))))}function XD($=process.cwd()){let Z=["agent.fafa",".fafa"];for(let z of Z){let X=wQ($,z);if(jQ(X))return X}let Q=SQ($);if(Q!==$)for(let z of Z){let X=wQ(Q,z);if(jQ(X))return X}return null}function tZ($,Z,Q={}){if(O2($,Q).length===0)throw Error("No A2A endpoint in .fafa (need endpoints[].protocol: a2a + location). Will not invent a door.");return F8($,{doorUrl:Q.doorUrl,extensions:Z?[iZ($,Z,Q)]:[]})}var HD=ZD(tZ,"faf-cli: generateA2ACard is deprecated, use buildA2ACard","FAF0003");function UD($,Z={},Q={}){return N8($,["a2a","server_card"],{now:Q.now??Z.generated??new Date().toISOString(),a2aCardUrl:Q.a2aCardUrl,doorUrl:Q.doorUrl})}function JD($,Z){return $.findIndex((Q)=>Q.identifier===Z.identifier)}function GD($,Z,Q){let z=$?{...$,entries:[...$.entries??[]]}:{specVersion:"1.0",entries:[]},X=Q&&z.host===void 0?(({specVersion:H,...U})=>({specVersion:H,host:{...Q},...U}))(z):z;for(let H of Z){let U=JD(X.entries,H);if(U>=0)X.entries[U]={...X.entries[U],url:H.url,type:H.type,...H.updatedAt?{updatedAt:H.updatedAt}:{}};else X.entries.push(H)}return X}function VD($,Z={}){return[...O2($,Z).length>0?["a2a"]:[],..._2($).length>0?["mcp"]:[],...rZ($)?["registry"]:[],"catalog","ard"]}function YD($){let Z=$.opts??{},Q=$.faf,z=$.fafa,X=Q?QD:z?VD(z,Z):[],H=new Set($.targets?.length?$.targets:X),U={};if(Q)U.block=S0(Q,Z);if(H.has("mcp"))if(z&&_2(z).length>0)U.mcp=R8(z,Q,Z);else if(Q)U.mcp=Z6(Q,Z);else throw Error("A Server Card needs an MCP endpoint at an http(s) URL in the .fafa, or a project.faf.");if(H.has("registry"))if(z&&rZ(z))U.registry={...PQ(z),...Q?{_meta:I2(Q,Z)}:{}};else if(Q){let J=A8(Q);U.registry={name:aZ(Q),...J?{title:J}:{},_meta:I2(Q,Z)}}else throw Error("A registry entry needs a package or a remote MCP URL in the .fafa, or a project.faf.");if(H.has("a2a")||H.has("catalog")||H.has("ard")){if(!$.fafa){if($.targets?.some((J)=>J==="a2a"||J==="catalog"||J==="ard"))throw Error("A2A/catalog/ARD require a .fafa (agent.fafa). Will not invent an agent.")}}if(H.has("a2a")&&$.fafa)if(O2($.fafa,Z).length===0){if($.targets?.includes("a2a"))throw Error("No A2A endpoint in .fafa (need endpoints[].protocol: a2a + location). Will not invent a door.")}else U.a2a=tZ($.fafa,Q,Z);if((H.has("catalog")||H.has("ard"))&&$.fafa){let J=UD($.fafa,Q,Z);if(H.has("catalog"))U.catalog=J;if(H.has("ard")){let V=sZ($.fafa);U.ard=J.map((Y)=>({...Y,...V}))}let G=T8($.fafa);if(G)U.catalogHost=G}return WD(U),U}function WD($){if(!$.block)return;let Z=JSON.stringify($.block),Q=[];if($.mcp){let z=$.mcp._meta;Q.push(JSON.stringify(z["one.faf/context"]))}if($.registry?._meta){let z=$.registry._meta["io.modelcontextprotocol.registry/publisher-provided"];Q.push(JSON.stringify(z["one.faf/context"]))}for(let z of Q)if(z!==Z)throw Error("context block drifted across card targets — one projector, one block");if($.a2a){let z=$.a2a.capabilities.extensions?.find((U)=>U.uri===Q$);if(!z)throw Error("A2A card has no FAF context extension, but a project.faf was given");let X=z.params,H=$.block;if(X.provenance?.faf!==H.faf||X.provenance?.mediaType!==H.mediaType)throw Error("A2A extension provenance drifted from the context block — one context, every door")}}var eZ=["ephemeral","standard","high","critical"],z2=Object.fromEntries(eZ.map(($,Z)=>[$,Z])),C8=new Set(["user","feedback","project","reference"]),$1=new Set(["version","profile","namepoint","created","last_etched","retention","index","memory"]),Z1=new Set(["facts","sessions","preferences","custom"]),Q1={low:"ephemeral",medium:"standard"};import{existsSync as BD}from"fs";import{dirname as vQ,resolve as kQ}from"path";function M2(){return new Date().toISOString().replace(/\.\d{3}Z$/,"Z")}function f($){return $===null||$===void 0}function qD($){if(Array.isArray($))return`a list (${$.length} item${$.length===1?"":"s"})`;if(f($))return"empty";if(typeof $==="string")return`a string (${JSON.stringify($.length>40?`${$.slice(0,40)}…`:$)})`;return`a ${typeof $}`}var H$=($)=>typeof $==="object"&&$!==null&&!Array.isArray($);function KD($){let Z=kQ($),Q=h(vQ(Z),Z,{read:!0});return{real:Q,text:Z0(Q)}}function EQ($,Z,Q,z){let X=kQ($),H=h(vQ(X),X),U=Q!==void 0&&Q.real===H;if(U&&Q.text===Z)return H;let J;try{J=I0(H)}catch{J=void 0}if(J&&J.equals(Buffer.from(Z,"utf-8")))return H;if(!U&&!z&&J)throw new b("changed",X,`${X} already exists — not written; pass { replace: true } (faf memory convert --force) to replace it`,{onWrite:!0});let G=U?Q.text:z?J:null;return e($,Z,G===void 0?{}:{expect:G})}function U$($){if(f($))return"standard";if(Q1[$])return Q1[$];if($ in z2)return $;return"standard"}var DD=new Set(["text","id","type","priority","tags","links","timestamp","source"]);function z1($){if(typeof $==="string")return{text:$,id:null,type:null,priority:"standard",tags:[],links:[],timestamp:null,source:null,extra:{}};if(!$||typeof $!=="object"||!("text"in $))throw Error(`fact must be a string or a mapping with 'text': ${JSON.stringify($)}`);let Z=$,Q={};for(let[z,X]of Object.entries(Z))if(!DD.has(z))Q[z]=X;return{text:String(Z.text),id:Z.id??null,type:Z.type??null,priority:U$(Z.priority),tags:Array.isArray(Z.tags)?Z.tags.slice():[],links:Array.isArray(Z.links)?Z.links.slice():[],timestamp:Z.timestamp??null,source:Z.source??null,extra:Q}}function X$($){if(f($.id)&&f($.type)&&$.tags.length===0&&$.links.length===0&&f($.timestamp)&&f($.source)&&Object.keys($.extra).length===0&&$.priority==="standard")return $.text;let Q={text:$.text};if(!f($.id))Q.id=$.id;if(!f($.type))Q.type=$.type;if(Q.priority=$.priority,$.tags.length)Q.tags=$.tags;if($.links.length)Q.links=$.links;if(!f($.timestamp))Q.timestamp=$.timestamp;if(!f($.source))Q.source=$.source;return Object.assign(Q,$.extra),Q}function bQ($){let Z=$;return H$($)&&typeof Z.text==="string"&&Array.isArray(Z.tags)&&Array.isArray(Z.links)&&H$(Z.extra)&&typeof Z.priority==="string"?Z:z1($)}function LD($){if(typeof $==="string"||H$($)&&"text"in $)return z1($);return null}var yQ=["profile","namepoint","created","last_etched","retention"];class Y0{namepoint;profile;retention;created;last_etched;_facts;_byId;_index;_sessions;_preferences;_custom;_extra;_memoryExtra;_version;_origin;_factAt=new WeakMap;_indexDerived=!0;_indexAtRecord=[];constructor($,Z={}){this.namepoint=$,this.profile=Z.profile??"knowledge",this.retention=Z.retention??"forever",this.created=Z.created??M2(),this.last_etched=this.created,this._facts=Z.facts?Z.facts.map(bQ):[],this._byId=new Map,this._facts.forEach((Q,z)=>{if(!f(Q.id))this._byId.set(Q.id,z)}),this._index=Z.index?Z.index.slice():[],this._sessions=Z.sessions?structuredClone(Z.sessions):[],this._preferences=Z.preferences?{...Z.preferences}:{},this._custom=Z.custom?{...Z.custom}:{},this._extra=Z.extra?{...Z.extra}:{},this._memoryExtra=Z.memoryExtra?{...Z.memoryExtra}:{},this._indexDerived=Z.index===void 0||l(this._index,this.derivedIndex()),this._indexAtRecord=this._index.slice()}get facts(){return this._facts}get index(){return this._index}get sessions(){return this._sessions}get preferences(){return this._preferences}get custom(){return this._custom}get extra(){return this._extra}get memoryExtra(){return this._memoryExtra}static load($){if(!BD($))throw Error(`soul file not found: ${$}`);let{real:Z,text:Q}=KD($);return Y0.fromText(Q,$,Z)}static fromText($,Z,Q){let z=jZ($,Z).toJS();if(!H$(z))throw Error(`soul is not a YAML mapping: ${Z} is ${qD(z)}`);let X=new hQ,H=X.pick("memory",z.memory,u)??{},U=new Y0(String(z.namepoint??Z.replace(/.*\//,"").replace(/\.fafm$/,"")),{profile:String(z.profile??"voice"),retention:String(z.retention??"forever"),created:z.created??null,...X.modelled(z,H)});return(X.pick("memory.facts",H.facts,Array.isArray)??[]).forEach((J,G)=>{let V=LD(J);if(V)U.adopt(V,G)}),U.last_etched=String(z.last_etched??U.created),U._version=f(z.version)?void 0:String(z.version),U._origin={path:Z,real:Q,text:$,base:U.state(),residual:X.residual},U.recordIndex(),U}recordIndex(){this._indexDerived=this.indexIsDerived(),this._indexAtRecord=this._index.slice()}adopt($,Z){if(this._facts.push($),!f($.id))this._byId.set($.id,this._facts.length-1);this._factAt.set($,Z)}static fromFile($){return Y0.load($)}toDoc(){let $={facts:this._facts.map(X$),sessions:structuredClone(this._sessions),preferences:structuredClone(this._preferences),custom:structuredClone(this._custom)};for(let[Q,z]of Object.entries(this._memoryExtra))if(!Z1.has(Q))$[Q]=structuredClone(z);let Z={version:this._version??"1.1",profile:this.profile,namepoint:this.namepoint,created:this.created,last_etched:this.last_etched,retention:this.retention,index:this._index.slice(),memory:$};for(let[Q,z]of Object.entries(this._extra))if(!$1.has(Q))Z[Q]=structuredClone(z);return Z}toYaml(){return q2(this.toDoc(),{lineWidth:100})}derivedIndex($=80){return this._facts.map((Z)=>`${Z.id??"?"} — ${String(Z.text).slice(0,$)}`)}indexIsDerived($=80){return!this._origin?.residual.has("index")&&l(this._index,this.derivedIndex($))}rebuildIndex($=80){return this._index=this.derivedIndex($),this._indexDerived=!0,this._indexAtRecord=this._index.slice(),this._index}save($,Z={}){let Q=Z.reindex??(this._indexDerived&&l(this._index,this._indexAtRecord));if(Q)this.rebuildIndex();let z=Z.replace===!0,X=this._origin;if(!X){let G=this.toYaml(),V=EQ($,G,void 0,z);return this.settle($,G,new Map(this._facts.map((Y,W)=>[Y,W])),V),$}let H=new Map,{text:U}=q8(X.text,(G)=>{H=this.applyTo(G,X,Q)},$),J=EQ($,U,X.real===void 0?void 0:{real:X.real,text:X.text},z);return this.settle($,U,H,J),$}toFile($,Z={}){return this.save($,Z)}settle($,Z,Q,z){this._factAt=new WeakMap;for(let[X,H]of Q)this._factAt.set(X,H);this._origin={path:$,real:z,text:Z,base:this.state(),residual:this._origin?.residual??new Map},this.recordIndex()}state(){let $=new Map;for(let Z of this._facts){let Q=this._factAt.get(Z);if(Q!==void 0)$.set(Q,structuredClone(X$(Z)))}return{top:Object.fromEntries(yQ.map((Z)=>[Z,this[Z]])),index:this._index.slice(),sessions:structuredClone(this._sessions),preferences:structuredClone(this._preferences),custom:structuredClone(this._custom),extra:structuredClone(this._extra),memoryExtra:structuredClone(this._memoryExtra),facts:$}}static refuse($,Z,Q){throw Error(`${$.path}: ${Z} is ${$.residual.get(Z)} in the file, not the shape faf writes — `+`faf keeps it as it is and will not ${Q}. Nothing written.`)}applyTo($,Z,Q){let z=Z.base,X=this.state(),H=Z.path;for(let U of yQ)if(z.top[U]!==X.top[U])$.set(U,X.top[U]);if(!l(z.index,X.index)){if(Z.residual.has("index")&&!Q)Y0.refuse(Z,"index","replace it");D8($,["index"],Z.residual.has("index")?void 0:z.index,X.index,H)}for(let U of gQ(z.extra,X.extra))D8($,[U],z.extra[U],X.extra[U],H);return this.applyMemory($,Z,z,X),this.applyFacts($,Z)}applyMemory($,Z,Q,z){let X=[["sessions",Q.sessions,z.sessions],["preferences",Q.preferences,z.preferences],["custom",Q.custom,z.custom],...gQ(Q.memoryExtra,z.memoryExtra).map((H)=>[H,Q.memoryExtra[H],z.memoryExtra[H]])];for(let[H,U,J]of X){if(l(U,J))continue;if(Z.residual.has("memory"))Y0.refuse(Z,"memory",`change memory.${H}`);if(Z.residual.has(`memory.${H}`))Y0.refuse(Z,`memory.${H}`,"replace it");D8($,["memory",H],U,J,Z.path)}}sortFacts($){let Z=[],Q=[];for(let z of this._facts){let X=this._factAt.get(z);if(X===void 0){Q.push(z);continue}if(Q.length>0||Z.length>0&&X<=Z[Z.length-1][1])throw Error(`${$.path}: the facts were reordered — faf keeps the order soul.fafm has. Nothing written.`);Z.push([z,X])}return{kept:Z,added:Q}}applyFacts($,Z){let{kept:Q,added:z}=this.sortFacts(Z),X=new Set(Q.map(([,V])=>V)),H=[...Z.base.facts.keys()].filter((V)=>!X.has(V)).sort((V,Y)=>Y-V),U=Q.filter(([V,Y])=>!l(Z.base.facts.get(Y),X$(V))),J=new Map(Q);if(z.length===0&&H.length===0&&U.length===0)return J;for(let V of["memory","memory.facts"])if(Z.residual.has(V))Y0.refuse(Z,V,"add facts to it");let G=b9($,["memory","facts"],Z.path);for(let[V,Y]of U)G.items[Y]=OD($,G.items[Y],Z.base.facts.get(Y),X$(V));for(let V of H)G.items.splice(V,1);for(let[V,Y]of Q)J.set(V,Y-H.filter((W)=>W<Y).length);for(let V of z)J.set(V,G.items.length),G.items.push($.createNode(X$(V)));return J}add($){let Z=bQ($);if(!f(Z.id)&&this._byId.has(Z.id)){let Q=this._byId.get(Z.id);if(Q!==void 0){let z=this._factAt.get(this._facts[Q]);if(this._facts[Q]=Z,z!==void 0)this._factAt.set(Z,z)}}else if(this._facts.push(Z),!f(Z.id))this._byId.set(Z.id,this._facts.length-1);if(Z.timestamp&&Z.timestamp>(this.last_etched||""))this.last_etched=Z.timestamp;return Z}etch($,Z={}){let Q=f(Z.id)?null:this.getFact(Z.id);if(Q)return this.add(ID(Q,$,Z));return this.add({text:$,id:Z.id??null,type:Z.type??null,priority:U$(Z.priority),tags:Z.tags?Z.tags.slice():[],links:Z.links?Z.links.slice():[],timestamp:M2(),source:Z.source??null,extra:{}})}recall($,Z={}){let Q=H$($)?{...$,...Z}:Z,z=H$($)?$.query:$,X=z2[U$(Q.minPriority??"ephemeral")]??0,H=typeof z==="string"?z.toLowerCase():"",U=new Set(Q.tags??[]),J=[];this._facts.forEach((V,Y)=>{if(H&&!String(V.text??"").toLowerCase().includes(H))return;if(U.size>0&&![...U].some((W)=>(V.tags??[]).includes(W)))return;if(!f(Q.type)&&V.type!==Q.type)return;if((z2[V.priority]??1)<X)return;J.push([Y,V])}),J.sort((V,Y)=>{let W=z2[V[1].priority]??1,B=z2[Y[1].priority]??1;if(B!==W)return B-W;let K=V[1].timestamp??"",L=Y[1].timestamp??"";if(L!==K)return L<K?-1:L>K?1:0;return Y[0]-V[0]});let G=J.map(([,V])=>V);if(!f(Q.limit))return G.slice(0,Q.limit);return G}getFact($){let Z=this._byId.get($);return Z===void 0?null:this._facts[Z]}deleteFact($){let Z=this._byId.get($);if(Z===void 0)return!1;return this._facts.splice(Z,1),this._byId.clear(),this._facts.forEach((Q,z)=>{if(!f(Q.id))this._byId.set(Q.id,z)}),!0}}function ID($,Z,Q){let z=(X,H)=>f(X)?H:X;return{...$,text:Z,type:z(Q.type,$.type),priority:f(Q.priority)?$.priority:U$(Q.priority),tags:z(Q.tags,$.tags).slice(),links:z(Q.links,$.links).slice(),source:z(Q.source,$.source),timestamp:M2(),extra:{...$.extra}}}class hQ{residual=new Map;pick($,Z,Q){if(f(Z))return;if(Q(Z))return Z;this.residual.set($,d$(Z));return}modelled($,Z){return{index:(this.pick("index",$.index,Array.isArray)??[]).map(String),sessions:this.pick("memory.sessions",Z.sessions,Array.isArray)??[],preferences:structuredClone(this.pick("memory.preferences",Z.preferences,u)??{}),custom:structuredClone(this.pick("memory.custom",Z.custom,u)??{}),extra:xQ($,$1),memoryExtra:xQ(Z,Z1)}}}function xQ($,Z){let Q={};for(let[z,X]of Object.entries($))if(!Z.has(z))Q[z]=structuredClone(X);return Q}function gQ($,Z){return[...new Set([...Object.keys($),...Object.keys(Z)])]}function OD($,Z,Q,z){if(!p(Z))return o$($,Z,Q,z);let X=(H)=>typeof H==="string"?{text:H}:H;return o$($,Z,X(Q),X(z))}import{readdirSync as _D,readFileSync as MD,statSync as uQ,existsSync as PD}from"fs";import{join as FD,basename as fQ,resolve as RD}from"path";var mQ=new Set(["MEMORY.md","MEMORY-FULL.md","README.md"]),ND=/\[\[([^\]]+)\]\]/g;function TD($){let Z=uQ($).mtimeMs;return new Date(Z).toISOString().replace(/\.\d{3}Z$/,"Z")}function AD($){if(!$.startsWith("---"))return{fm:null,body:$};let Z=$.split("---");if(Z.length<3)return{fm:null,body:$};try{let Q=m0(Z[1]);if(!Q||typeof Q!=="object")return{fm:null,body:Z.slice(2).join("---").trim()};return{fm:Q,body:Z.slice(2).join("---").trim()}}catch{return{fm:null,body:$}}}function CD($,Z,Q){if(!Q.name)return null;let z=Q.metadata&&typeof Q.metadata==="object"?Q.metadata:{},X=z.type;if(typeof X!=="string"||!C8.has(X))return null;let H=String(Q.name).trim(),J=(Q.description!==void 0&&Q.description!==null&&String(Q.description).trim()?String(Q.description).trim():"")||H,G={};if(z.originSessionId)G.provenance=[`session:${z.originSessionId}`];let V=[...new Set([...Z.matchAll(ND)].map((Y)=>Y[1]))].sort();return{text:J,id:H,type:X,priority:"standard",tags:[],links:V,timestamp:TD($),source:`claude-code memory: ${fQ($)}`,extra:G}}function pQ($,Z={}){let Q=RD($);if(!PD(Q))throw Error(`Claude memory directory not found: ${Q}`);if(!uQ(Q).isDirectory())throw Error(`Claude memory path is not a directory: ${Q}`);let z=Z.skip??mQ,X=Z.namepoint??`@claude-code:${fQ(Q)}`,H=[],U=_D(Q).filter((W)=>W.endsWith(".md")).sort();for(let W of U){if(z.has(W))continue;let B=FD(Q,W),K;try{K=MD(B,"utf-8")}catch{continue}let{fm:L,body:q}=AD(K);if(!L)continue;let D=CD(B,q,L);if(D)H.push(D)}let J=H.map((W)=>W.timestamp).filter(Boolean),G=J.length?J.reduce((W,B)=>W<B?W:B):M2(),V=J.length?J.reduce((W,B)=>W>B?W:B):G,Y=new Y0(X,{profile:"knowledge",facts:H,created:G});return Y.last_etched=V,Y.rebuildIndex(),Y}var nQ="faf-interview/1",J$="(terse — 3-4 words)",X1=[{path:"project.name",question:"What is the name of this project?",header:"Name",type:"text",required:!0},{path:"project.goal",question:"What does this project do? (one sentence)",header:"Goal",type:"text",required:!0},{path:"human_context.who",question:`Who is this for? ${J$}`,header:"Who",type:"text",required:!0},{path:"human_context.what",question:`What are they building? ${J$}`,header:"What",type:"text",required:!0},{path:"human_context.why",question:`Why does it exist? ${J$}`,header:"Why",type:"text",required:!0},{path:"human_context.where",question:`Where does it run or ship? ${J$}`,header:"Where",type:"text",required:!0},{path:"human_context.when",question:`When — timeline or stage? ${J$}`,header:"When",type:"text",required:!0},{path:"human_context.how",question:`How is it built or used? ${J$}`,header:"How",type:"text",required:!0}],rQ=[{path:"project.main_language",question:"What is the primary programming language?",header:"Language",type:"select",required:!0,options:[{label:"TypeScript",value:"TypeScript",description:"JavaScript with types"},{label:"JavaScript",value:"JavaScript",description:"Vanilla JS or Node.js"},{label:"Python",value:"Python",description:"Python 3.x"},{label:"Rust",value:"Rust",description:"Systems programming"},{label:"Go",value:"Go",description:"Golang"},{label:"Other",value:"Other",description:"Specify manually"}]},{path:"stack.frontend",question:"What frontend framework does it use?",header:"Frontend",type:"select",required:!1,options:[{label:"React",value:"React",description:"React.js"},{label:"Vue",value:"Vue",description:"Vue.js"},{label:"Svelte",value:"Svelte",description:"Svelte/SvelteKit"},{label:"Next.js",value:"Next.js",description:"React framework"},{label:"None",value:"None",description:"No frontend"},{label:"Other",value:"Other",description:"Specify manually"}]},{path:"stack.backend",question:"What backend framework does it use?",header:"Backend",type:"select",required:!1,options:[{label:"Express",value:"Express",description:"Node.js Express"},{label:"Fastify",value:"Fastify",description:"Node.js Fastify"},{label:"Django",value:"Django",description:"Python Django"},{label:"FastAPI",value:"FastAPI",description:"Python FastAPI"},{label:"None",value:"None",description:"No backend"},{label:"Other",value:"Other",description:"Specify manually"}]},{path:"stack.database",question:"What database does it use?",header:"Database",type:"select",required:!1,options:[{label:"PostgreSQL",value:"PostgreSQL",description:"Postgres"},{label:"MySQL",value:"MySQL",description:"MySQL/MariaDB"},{label:"SQLite",value:"SQLite",description:"Embedded SQL"},{label:"MongoDB",value:"MongoDB",description:"Document store"},{label:"None",value:"None",description:"No database"},{label:"Other",value:"Other",description:"Specify manually"}]},{path:"stack.runtime",question:"What runtime does it run on?",header:"Runtime",type:"text",required:!1},{path:"stack.hosting",question:"Where is it hosted or distributed?",header:"Hosting",type:"text",required:!1},{path:"stack.build",question:"What is the build tool?",header:"Build",type:"text",required:!1},{path:"stack.cicd",question:"What CI/CD does it use?",header:"CI/CD",type:"text",required:!1}],G$=[...X1,...rQ],sQ=new Map(G$.map(($)=>[$.path,$])),jD=Object.fromEntries(G$.map(($)=>[$.path,$]));function H1($){let Z=sQ.get($);if(Z)return Z.question;let Q=g0.get($)??m.find((z)=>z.canonical===$);return Q?`${Q.description}?`.replace(/\?\?$/,"?"):`${$}?`}function wD($,Z){return G$.filter((Q)=>{let z=Q.path.split("."),X=$;for(let H of z)if(X&&typeof X==="object"&&H in X)X=X[H];else{X=void 0;break}if(X==="slotignored")return!1;return Z(X)})}var SD=new Set(["developers","development teams","development team","teams","development","cloud platform","web platform","platform","best practices","improve development efficiency","development efficiency","modern development practices","modern development","test-driven development","production/stable","production","stable","app","project","tool"]),ED=[["npm",/\bnpm\b/i],["PyPI",/\bpypi\b/i],["crates.io",/\bcrates\.io\b/i],["Homebrew",/\bhomebrew\b/i],["Docker",/\bdocker\b/i],["Cloudflare",/\bcloudflare\b/i],["Vercel",/\bvercel\b/i],["Netlify",/\bnetlify\b/i],["AWS",/\baws\b/i],["Cloud Run",/\bcloud run\b/i],["edge",/\bedge\b/i],["browser",/\bbrowser\b/i],["WASM",/\bwasm\b/i],["GitHub",/\bgithub\b/i],["MCP Registry",/\bmcp registry\b/i],["Chrome Web Store",/\bchrome web store\b/i],["Smithery",/\bsmithery\b/i]],lQ=($)=>SD.has($.toLowerCase().trim()),bD=/^(?:with|and|or|using|for|to|that|who|whom|whose|the|a|an|in|on|of|via|by|&)$/i;function cQ($,Z=5){let Q=$.trim().split(/\s+/).filter(Boolean).slice(0,Z);while(Q.length&&bD.test(Q[Q.length-1].replace(/[.,;:]+$/,"")))Q.pop();return Q.join(" ")}function oQ($){let Z={};if(!$||typeof $!=="string")return Z;let Q=$.trim(),z=Q.replace(/^[^A-Za-z0-9]+/,"").split(/\s+(?:for|that|which|to)\s+|\s+[—–]\s+|\s-\s|:\s|\.\s|,\s/)[0].trim(),X=cQ(z);if(X.split(/\s+/).filter(Boolean).length>=2&&!lQ(X))Z.what=X;let H=ED.filter(([,G])=>G.test(Q)).map(([G])=>G);if(H.length)Z.where=H.slice(0,4).join(", ");let U=Q.match(/\bfor ((?:[A-Za-z][\w./+-]* )?(?:any |all )?(?:developers?|teams?|engineers?|builders?|users?|integrators?)\b[^.,;:—]*)/i),J=cQ((U?.[1]||"").trim().replace(/\s+/g," "));if(J&&!lQ(J))Z.who=J;return Z}function dQ($,Z){let Q=$;for(let z of Z.split("."))if(Q&&typeof Q==="object"&&z in Q)Q=Q[z];else return;return Q}function iQ($){if(typeof $!=="string")return!1;let Z=$.trim();if(!Z||Z==="slotignored")return!1;return!o(Z)}function yD($,Z={}){let Q=$&&typeof $==="object"?$:{},z=dQ(Q,"project.goal"),X=(iQ(z)?String(z).trim():"")||(Z.goal??"").trim(),H=oQ(X),U=Z.detailed??{},J={"project.goal":X||void 0,"human_context.what":H.what,"human_context.where":H.where,"human_context.who":H.who},G=(K)=>{let L=J[K];if(L)return{value:L,source:"project goal",confidence:0.9};let q=K.startsWith("human_context.")?K.slice(14):"",D=q?U[q]:void 0;return D?{value:D.value,source:D.source,confidence:D.confidence}:void 0},V=X1.map((K,L)=>{let q={n:L+1,path:K.path,header:K.header,question:K.question},D=dQ(Q,K.path);if(iQ(D))return{...q,value:String(D).trim(),status:"filled",seeded:!1};let O=G(K.path);if(O)return{...q,value:O.value,status:"seeded",seeded:!0,source:O.source,confidence:O.confidence};return{...q,value:"",status:"empty",seeded:!1}}),Y=V.filter((K)=>K.status==="filled").length,W=V.filter((K)=>K.status==="seeded").length,B=V.filter((K)=>K.status==="empty").length;return{version:nQ,rows:V,filledCount:Y,seededCount:W,emptyCount:B,complete:B===0}}function j8($){if($===null||$===void 0)return!0;if(typeof $==="string"){let Z=$.trim();return Z===""||o(Z)}return!1}function xD($,Z){let Q=$;for(let z of Z.split("."))if(Q&&typeof Q==="object"&&z in Q)Q=Q[z];else return;return Q}function aQ($){if($==="project.goal")return!0;return g0.get($)?.category==="human"}function tQ($,Z=j8){let Q=[],z=[];for(let X of G$){let H=xD($,X.path);if(H==="slotignored")continue;if(!Z(H))continue;(aQ(X.path)?Q:z).push(X.path)}return{human:Q,sourceable:z}}function eQ($,Z,Q=j8){let z=tQ(Z,Q),X;if($>=100||z.human.length===0&&z.sourceable.length===0)X="done";else if(z.sourceable.length>0)X="can-source";else X="needs-human";let H=X==="needs-human"?U1(z):[];return{status:X,score:$,gaps:z,ask:H}}function U1($){return $.human.map((Z)=>({path:Z,question:H1(Z)}))}function gD($,Z={}){let Q=Math.max(1,Z.maxRounds??5),z=Z.isEmpty??j8,X=[],H=0;for(let J=0;J<=Q;J++){let G=$.read();if(!G)return{status:"no-faf",score:0,rounds:H,history:X,ask:[]};let V=$.score(G.yaml);X.push(V);let Y=eQ(V,G.data,z);if(Y.status==="done")return{status:"done",score:V,rounds:H,history:X,ask:[]};if(Y.status==="needs-human")return{status:"needs-human",score:V,rounds:H,history:X,ask:Y.ask};if(X.length>=2&&V<=X[X.length-2])return Y.gaps.human.length?{status:"needs-human",score:V,rounds:H,history:X,ask:U1(Y.gaps)}:{status:"stuck",score:V,rounds:H,history:X,ask:[]};if(H>=Q)return{status:"capped",score:V,rounds:H,history:X,ask:U1(Y.gaps)};$.runAuto(),H++}return{status:"capped",score:X[X.length-1]??0,rounds:H,history:X,ask:[]}}import{createHash as Z3}from"crypto";var J1="faf-bench/1",vD={"project.name":"What is the project's name?","project.goal":"What is the project's goal — what is it for?","project.main_language":"What is the primary programming language?","human_context.who":"Who is this project for?","human_context.what":"What are they building?","human_context.why":"Why does this project exist?","human_context.where":"Where does it run or get distributed?","human_context.when":"When — what is the project's timeline or stage?","human_context.how":"How is it built or used?"};function kD($,Z){return vD[$]??`What is the project's ${Z.replace(/\s*\(.*\)$/,"").toLowerCase()}?`}var Q3=[["typescript","ts"],["javascript","js"],["python","py","python3"],["node","nodejs","node js","node.js"],["github actions","gh actions","actions"],["postgresql","postgres","pg"],["kubernetes","k8s"],["npm","npm registry"],["cloudflare workers","cf workers","workers"],["google cloud run","cloud run","gcp cloud run"]],Q6=new Map;Q3.forEach(($,Z)=>$.forEach((Q)=>Q6.set(Q,Z)));var hD=new Set(["a","an","the","and","or","of","for","to","in","on","with","is","it","its","their","your","via","by","using","use","used"]);function w8($){return $.toLowerCase().replace(/[^a-z0-9\s.+#-]/g," ").replace(/\.(?=\s|$)/g," ").replace(/\s+/g," ").trim()}function $3($){return w8($).split(" ").filter((Z)=>Z&&!hD.has(Z))}function z3($,Z){let Q=w8($),z=w8(Z);if(!Q||!z)return!1;if(Q===z)return!0;let X=Q6.get(Q);if(X!==void 0&&Q6.get(z)===X)return!0;let H=$3($);if(H.length===0)return!1;let U=new Set($3(Z));return H.every((J)=>{if(U.has(J))return!0;let G=Q6.get(J);return G!==void 0&&[...U].some((V)=>Q6.get(V)===G)})}function uD($){let Z=X5($),Q=m0($),z=[],X={},H=0;for(let G of m){if(Z.slots[G.path]!=="populated")continue;let V=h1(Q,G);if(typeof V!=="string")continue;let Y=V.trim();if(!Y||D6.has(Y.toLowerCase()))continue;H+=1,z.push({n:H,path:G.path,question:kD(G.path,G.description)}),X[H]=Y}let U=JSON.stringify({v:J1,q:z.map((G)=>[G.path,G.question])}),J=Z3("sha256").update(U).digest("hex").slice(0,12);return{version:J1,qsetHash:J,questions:z,answers:X}}function fD($){return{version:$.version,qsetHash:$.qsetHash,questions:$.questions}}function mD($,Z){let Q=$.questions.map((X)=>{let H=Z[String(X.n)]??Z[X.path]??"";return{n:X.n,path:X.path,ok:typeof H==="string"&&H.trim()!==""&&z3($.answers[X.n],H)}}),z=$.questions.filter((X)=>!Q[X.n-1].ok);return{correct:Q.filter((X)=>X.ok).length,total:$.questions.length,misses:z,perQuestion:Q}}function pD($,Z){let Q=JSON.stringify({v:$.version,repo:Z??null,qset:$.qsetHash,protocol:$.protocol,cold:$.cold??null,faf:$.faf??null});return{projection:Q,hash:Z3("sha256").update(Q).digest("hex")}}import{join as KI,extname as DI,resolve as LI}from"path";var G1={"package.json":{frameworks:["Node.js","JavaScript","TypeScript"],slots:{packageManager:"npm/yarn/pnpm",mainLanguage:"JavaScript/TypeScript"},priority:35,intelligence:"ultra-high"},"README.md":{frameworks:[],slots:{},priority:25,intelligence:"high"},"requirements.txt":{frameworks:["Python"],slots:{packageManager:"pip",mainLanguage:"Python"},priority:35,intelligence:"ultra-high"},Pipfile:{frameworks:["Python"],slots:{packageManager:"pipenv",mainLanguage:"Python"},priority:35,intelligence:"ultra-high"},"pyproject.toml":{frameworks:["Python"],slots:{mainLanguage:"Python",runtime:"Python"},priority:36,intelligence:"ultra-high"},Gemfile:{frameworks:["Ruby"],slots:{packageManager:"bundler",mainLanguage:"Ruby"},priority:35,intelligence:"ultra-high"},"Gemfile.lock":{frameworks:["Ruby"],slots:{packageManager:"bundler",mainLanguage:"Ruby"},priority:34,intelligence:"high"},"composer.json":{frameworks:["PHP","Laravel","Symfony"],slots:{packageManager:"composer",mainLanguage:"PHP"},priority:35,intelligence:"ultra-high"},"Cargo.toml":{frameworks:["Rust"],slots:{packageManager:"cargo",mainLanguage:"Rust",buildTool:"cargo"},priority:36,intelligence:"ultra-high"},"go.mod":{frameworks:["Go"],slots:{packageManager:"go modules",mainLanguage:"Go",buildTool:"go build"},priority:36,intelligence:"ultra-high"},"Package.swift":{frameworks:["Swift"],slots:{packageManager:"spm",mainLanguage:"Swift",buildTool:"swift build"},priority:36,intelligence:"ultra-high"},"*.csproj":{frameworks:["C#",".NET"],slots:{packageManager:"NuGet",mainLanguage:"C#",buildTool:"dotnet"},priority:36,intelligence:"ultra-high"},"pubspec.yaml":{frameworks:["Dart"],slots:{packageManager:"pub",mainLanguage:"Dart"},priority:35,intelligence:"ultra-high"},"pom.xml":{frameworks:["Java"],slots:{packageManager:"maven",mainLanguage:"Java",buildTool:"maven"},priority:35,intelligence:"ultra-high"},"build.gradle":{frameworks:["Java","Gradle"],slots:{packageManager:"gradle",mainLanguage:"Java",buildTool:"gradle"},priority:35,intelligence:"ultra-high"},"settings.gradle":{frameworks:["Java","Gradle"],slots:{packageManager:"gradle",mainLanguage:"Java",buildTool:"gradle"},priority:34,intelligence:"high"},"settings.gradle.kts":{frameworks:["Kotlin","Gradle"],slots:{packageManager:"gradle",mainLanguage:"Kotlin",buildTool:"gradle"},priority:34,intelligence:"high"},"next.config.js":{frameworks:["Next.js"],slots:{framework:"Next.js",buildTool:"Next.js",mainLanguage:"JavaScript",server:"Node.js"},priority:30,intelligence:"high"},"next.config.mjs":{frameworks:["Next.js"],slots:{framework:"Next.js",buildTool:"Next.js",mainLanguage:"JavaScript",server:"Node.js"},priority:30,intelligence:"high"},"next.config.ts":{frameworks:["Next.js 13+"],slots:{framework:"Next.js 13+",buildTool:"Next.js",mainLanguage:"TypeScript",server:"Node.js"},priority:30,intelligence:"high"},"nuxt.config.js":{frameworks:["Nuxt 2"],slots:{framework:"Nuxt 2",buildTool:"Nuxt",mainLanguage:"JavaScript",server:"Node.js"},priority:30,intelligence:"high"},"nuxt.config.ts":{frameworks:["Nuxt 3"],slots:{framework:"Nuxt 3",buildTool:"Nuxt",mainLanguage:"TypeScript",server:"Node.js"},priority:30,intelligence:"high"},"svelte.config.js":{frameworks:["SvelteKit"],slots:{framework:"SvelteKit",buildTool:"Vite",mainLanguage:"JavaScript",server:"Node.js"},priority:30,intelligence:"high"},"angular.json":{frameworks:["Angular"],slots:{framework:"Angular",buildTool:"Angular CLI",mainLanguage:"TypeScript",server:"Node.js"},priority:30,intelligence:"high"},"manifest.json":{frameworks:["Chrome Extension","Browser Extension"],slots:{framework:"Chrome Extension",runtime:"Chrome/Browser",mainLanguage:"JavaScript",hosting:"Chrome Web Store",apiType:"Chrome APIs"},priority:35,intelligence:"ultra-high",confirmWith:["popup.html","background.js","content.js"]},"vue.config.js":{frameworks:["Vue"],slots:{framework:"Vue",buildTool:"Vue CLI",mainLanguage:"JavaScript"},priority:30,intelligence:"high"},"remix.config.js":{frameworks:["Remix"],slots:{framework:"Remix",mainLanguage:"JavaScript",server:"Node.js"},priority:30,intelligence:"high"},"gatsby-config.js":{frameworks:["Gatsby"],slots:{framework:"Gatsby",buildTool:"Gatsby",mainLanguage:"JavaScript",server:"Node.js"},priority:30,intelligence:"high"},"gatsby-config.ts":{frameworks:["Gatsby"],slots:{framework:"Gatsby",buildTool:"Gatsby",mainLanguage:"TypeScript",server:"Node.js"},priority:30,intelligence:"high"},"astro.config.mjs":{frameworks:["Astro"],slots:{framework:"Astro",buildTool:"Vite",mainLanguage:"JavaScript",server:"Node.js"},priority:30,intelligence:"high"},"redwood.toml":{frameworks:["RedwoodJS"],slots:{framework:"RedwoodJS",buildTool:"Webpack",mainLanguage:"JavaScript/TypeScript",server:"Node.js",database:"Prisma"},priority:30,intelligence:"high"},"blitz.config.ts":{frameworks:["Blitz.js"],slots:{framework:"Blitz.js",buildTool:"Next.js",mainLanguage:"TypeScript",server:"Node.js",database:"Prisma"},priority:30,intelligence:"high"},"qwik.config.ts":{frameworks:["Qwik"],slots:{framework:"Qwik",buildTool:"Vite",mainLanguage:"TypeScript",server:"Node.js"},priority:30,intelligence:"high"},"manage.py":{frameworks:["Django"],slots:{framework:"Django",backend:"Django",mainLanguage:"Python",server:"Django",apiType:"Django Views"},priority:30,intelligence:"high"},artisan:{frameworks:["Laravel"],slots:{framework:"Laravel",backend:"Laravel",mainLanguage:"PHP",server:"PHP",apiType:"Laravel Routes"},priority:30,intelligence:"high"},"mix.exs":{frameworks:["Phoenix","Elixir"],slots:{framework:"Phoenix",backend:"Phoenix",mainLanguage:"Elixir",server:"BEAM"},priority:30,intelligence:"high"},"nest-cli.json":{frameworks:["NestJS"],slots:{framework:"NestJS",backend:"NestJS",mainLanguage:"TypeScript",server:"Node.js",apiType:"REST API"},priority:30,intelligence:"high"},"strapi.config.js":{frameworks:["Strapi"],slots:{backend:"Strapi",apiType:"REST API",server:"Node.js"},priority:30,intelligence:"high"},Dockerfile:{frameworks:["Docker"],slots:{},priority:30,intelligence:"high"},"docker-compose.yml":{frameworks:["Docker Compose"],slots:{hosting:"Docker"},priority:30,intelligence:"high"},"docker-compose.yaml":{frameworks:["Docker Compose"],slots:{hosting:"Docker"},priority:30,intelligence:"high"},"kubernetes.yml":{frameworks:["Kubernetes"],slots:{hosting:"Kubernetes"},priority:30,intelligence:"high"},"k8s.yaml":{frameworks:["Kubernetes"],slots:{hosting:"Kubernetes"},priority:30,intelligence:"high"},"vercel.json":{frameworks:["Vercel"],slots:{hosting:"Vercel",cicd:"Vercel"},priority:30,intelligence:"high"},"netlify.toml":{frameworks:["Netlify"],slots:{hosting:"Netlify",cicd:"Netlify"},priority:30,intelligence:"high"},"render.yaml":{frameworks:["Render"],slots:{hosting:"Render",cicd:"Render"},priority:30,intelligence:"high"},"fly.toml":{frameworks:["Fly.io"],slots:{hosting:"Fly.io",cicd:"Fly.io"},priority:30,intelligence:"high"},"railway.json":{frameworks:["Railway"],slots:{hosting:"Railway",cicd:"Railway"},priority:30,intelligence:"high"},"railway.toml":{frameworks:["Railway"],slots:{hosting:"Railway",cicd:"Railway"},priority:30,intelligence:"high"},"app.yaml":{frameworks:["Google App Engine"],slots:{hosting:"Google Cloud",cicd:"Google Cloud"},priority:30,intelligence:"high"},Procfile:{frameworks:["Heroku"],slots:{hosting:"Heroku",cicd:"Heroku"},priority:30,intelligence:"high"},"vite.config.js":{frameworks:["Vite"],slots:{buildTool:"Vite"},priority:25,intelligence:"medium"},"vite.config.ts":{frameworks:["Vite"],slots:{buildTool:"Vite",mainLanguage:"TypeScript"},priority:25,intelligence:"medium"},"webpack.config.js":{frameworks:["Webpack"],slots:{buildTool:"Webpack"},priority:25,intelligence:"medium"},"rollup.config.js":{frameworks:["Rollup"],slots:{buildTool:"Rollup"},priority:25,intelligence:"medium"},"esbuild.config.js":{frameworks:["esbuild"],slots:{buildTool:"esbuild"},priority:25,intelligence:"medium"},"parcel.config.js":{frameworks:["Parcel"],slots:{buildTool:"Parcel"},priority:25,intelligence:"medium"},"snowpack.config.js":{frameworks:["Snowpack"],slots:{buildTool:"Snowpack"},priority:25,intelligence:"medium"},"tsconfig.json":{frameworks:["TypeScript"],slots:{mainLanguage:"TypeScript"},priority:25,intelligence:"medium"},"jsconfig.json":{frameworks:["JavaScript"],slots:{mainLanguage:"JavaScript"},priority:20,intelligence:"medium"},"babel.config.js":{frameworks:["Babel"],slots:{buildTool:"Babel"},priority:20,intelligence:"medium"},".babelrc":{frameworks:["Babel"],slots:{buildTool:"Babel"},priority:20,intelligence:"medium"},"jest.config.js":{frameworks:["Jest"],slots:{},priority:25,intelligence:"medium"},"jest.config.ts":{frameworks:["Jest"],slots:{mainLanguage:"TypeScript"},priority:25,intelligence:"medium"},"vitest.config.ts":{frameworks:["Vitest"],slots:{mainLanguage:"TypeScript"},priority:25,intelligence:"medium"},"cypress.config.js":{frameworks:["Cypress"],slots:{},priority:25,intelligence:"medium"},"playwright.config.ts":{frameworks:["Playwright"],slots:{mainLanguage:"TypeScript"},priority:25,intelligence:"medium"},"karma.conf.js":{frameworks:["Karma"],slots:{},priority:20,intelligence:"medium"},"mocha.opts":{frameworks:["Mocha"],slots:{},priority:20,intelligence:"medium"},".rspec":{frameworks:["RSpec"],slots:{mainLanguage:"Ruby"},priority:25,intelligence:"medium"},"pytest.ini":{frameworks:["Pytest"],slots:{mainLanguage:"Python"},priority:25,intelligence:"medium"},"phpunit.xml":{frameworks:["PHPUnit"],slots:{mainLanguage:"PHP"},priority:25,intelligence:"medium"},"schema.prisma":{frameworks:["Prisma"],slots:{database:"Prisma ORM",connection:"Prisma"},priority:25,intelligence:"medium"},"drizzle.config.ts":{frameworks:["Drizzle"],slots:{database:"Drizzle ORM",connection:"Drizzle",mainLanguage:"TypeScript"},priority:25,intelligence:"medium"},"ormconfig.js":{frameworks:["TypeORM"],slots:{database:"TypeORM",connection:"TypeORM"},priority:25,intelligence:"medium"},"knexfile.js":{frameworks:["Knex.js"],slots:{database:"Knex.js",connection:"Knex.js"},priority:25,intelligence:"medium"},"sequelize.config.js":{frameworks:["Sequelize"],slots:{database:"Sequelize",connection:"Sequelize"},priority:25,intelligence:"medium"},"alembic.ini":{frameworks:["Alembic"],slots:{database:"Alembic",mainLanguage:"Python"},priority:25,intelligence:"medium"},".github/workflows":{frameworks:["GitHub Actions"],slots:{cicd:"GitHub Actions"},priority:25,intelligence:"medium"},".gitlab-ci.yml":{frameworks:["GitLab CI"],slots:{cicd:"GitLab CI"},priority:25,intelligence:"medium"},Jenkinsfile:{frameworks:["Jenkins"],slots:{cicd:"Jenkins"},priority:25,intelligence:"medium"},".circleci/config.yml":{frameworks:["CircleCI"],slots:{cicd:"CircleCI"},priority:25,intelligence:"medium"},".travis.yml":{frameworks:["Travis CI"],slots:{cicd:"Travis CI"},priority:25,intelligence:"medium"},"azure-pipelines.yml":{frameworks:["Azure DevOps"],slots:{cicd:"Azure DevOps"},priority:25,intelligence:"medium"},"bitbucket-pipelines.yml":{frameworks:["Bitbucket Pipelines"],slots:{cicd:"Bitbucket Pipelines"},priority:25,intelligence:"medium"},"tailwind.config.js":{frameworks:["Tailwind CSS"],slots:{cssFramework:"Tailwind CSS"},priority:20,intelligence:"medium"},"tailwind.config.ts":{frameworks:["Tailwind CSS"],slots:{cssFramework:"Tailwind CSS",mainLanguage:"TypeScript"},priority:20,intelligence:"medium"},"postcss.config.js":{frameworks:["PostCSS"],slots:{cssFramework:"PostCSS"},priority:20,intelligence:"medium"},"uno.config.ts":{frameworks:["UnoCSS"],slots:{cssFramework:"UnoCSS",mainLanguage:"TypeScript"},priority:20,intelligence:"medium"},"styled-components.config.js":{frameworks:["styled-components"],slots:{cssFramework:"styled-components",uiLibrary:"styled-components"},priority:20,intelligence:"medium"},"emotion.config.js":{frameworks:["Emotion"],slots:{cssFramework:"Emotion",uiLibrary:"Emotion"},priority:20,intelligence:"medium"},"metro.config.js":{frameworks:["React Native"],slots:{framework:"React Native",mainLanguage:"JavaScript"},priority:25,intelligence:"medium"},"expo.config.js":{frameworks:["Expo"],slots:{framework:"React Native",buildTool:"Expo"},priority:25,intelligence:"medium"},"app.json":{frameworks:["React Native","Expo"],slots:{framework:"React Native"},priority:20,intelligence:"medium",confirmWith:["expo"]},"capacitor.config.ts":{frameworks:["Capacitor"],slots:{framework:"Capacitor",mainLanguage:"TypeScript"},priority:25,intelligence:"medium"},"ionic.config.json":{frameworks:["Ionic"],slots:{framework:"Ionic",uiLibrary:"Ionic"},priority:25,intelligence:"medium"},"nx.json":{frameworks:["Nx"],slots:{buildTool:"Nx"},priority:25,intelligence:"medium"},"turbo.json":{frameworks:["Turborepo"],slots:{buildTool:"Turborepo"},priority:25,intelligence:"medium"},"lerna.json":{frameworks:["Lerna"],slots:{buildTool:"Lerna"},priority:25,intelligence:"medium"},"rush.json":{frameworks:["Rush"],slots:{buildTool:"Rush"},priority:25,intelligence:"medium"},"pnpm-workspace.yaml":{frameworks:["pnpm workspaces"],slots:{packageManager:"pnpm",buildTool:"pnpm workspaces"},priority:25,intelligence:"medium"},"*.svelte":{frameworks:["Svelte","SvelteKit"],slots:{framework:"Svelte"},priority:15,intelligence:"low"},"*.vue":{frameworks:["Vue"],slots:{framework:"Vue"},priority:15,intelligence:"low"},"*.jsx":{frameworks:["React"],slots:{framework:"React",mainLanguage:"JavaScript"},priority:15,intelligence:"low"},"*.ts":{frameworks:["TypeScript"],slots:{mainLanguage:"TypeScript"},priority:15,intelligence:"low"},"*.tsx":{frameworks:["React","TypeScript"],slots:{framework:"React",mainLanguage:"TypeScript"},priority:15,intelligence:"low"},"*.py":{frameworks:["Python"],slots:{mainLanguage:"Python"},priority:15,intelligence:"low"},"*.rb":{frameworks:["Ruby"],slots:{mainLanguage:"Ruby"},priority:15,intelligence:"low"},"*.php":{frameworks:["PHP"],slots:{mainLanguage:"PHP"},priority:15,intelligence:"low"},"*.java":{frameworks:["Java"],slots:{mainLanguage:"Java"},priority:15,intelligence:"low"},"*.kt":{frameworks:["Kotlin"],slots:{mainLanguage:"Kotlin"},priority:15,intelligence:"low"},"*.swift":{frameworks:["Swift"],slots:{mainLanguage:"Swift"},priority:15,intelligence:"low"},"*.go":{frameworks:["Go"],slots:{mainLanguage:"Go"},priority:15,intelligence:"low"},"*.rs":{frameworks:["Rust"],slots:{mainLanguage:"Rust"},priority:15,intelligence:"low"},"*.dart":{frameworks:["Flutter","Dart"],slots:{mainLanguage:"Dart"},priority:15,intelligence:"low"},"*.ex":{frameworks:["Elixir"],slots:{mainLanguage:"Elixir"},priority:15,intelligence:"low"},"*.exs":{frameworks:["Elixir"],slots:{mainLanguage:"Elixir"},priority:15,intelligence:"low"},"*.scala":{frameworks:["Scala"],slots:{mainLanguage:"Scala"},priority:15,intelligence:"low"},"*.clj":{frameworks:["Clojure"],slots:{mainLanguage:"Clojure"},priority:15,intelligence:"low"},"*.lua":{frameworks:["Lua"],slots:{mainLanguage:"Lua"},priority:15,intelligence:"low"},"*.r":{frameworks:["R"],slots:{mainLanguage:"R"},priority:15,intelligence:"low"},"*.R":{frameworks:["R"],slots:{mainLanguage:"R"},priority:15,intelligence:"low"},"*.jl":{frameworks:["Julia"],slots:{mainLanguage:"Julia"},priority:15,intelligence:"low"},"*.nim":{frameworks:["Nim"],slots:{mainLanguage:"Nim"},priority:15,intelligence:"low"},"*.zig":{frameworks:["Zig"],slots:{mainLanguage:"Zig"},priority:15,intelligence:"low"},"build.zig":{frameworks:["Zig"],slots:{packageManager:"Zig Package Manager",mainLanguage:"Zig",buildTool:"zig build",build:"zig build"},priority:35,intelligence:"ultra-high"},"openapi.json":{frameworks:["OpenAPI"],slots:{apiType:"REST API"},priority:30,intelligence:"high"},"openapi.yaml":{frameworks:["OpenAPI"],slots:{apiType:"REST API"},priority:30,intelligence:"high"},"swagger.json":{frameworks:["Swagger"],slots:{apiType:"REST API"},priority:30,intelligence:"high"},"graphql.schema":{frameworks:["GraphQL"],slots:{apiType:"GraphQL"},priority:30,intelligence:"high"},"schema.graphql":{frameworks:["GraphQL"],slots:{apiType:"GraphQL"},priority:30,intelligence:"high"},".graphqlconfig":{frameworks:["GraphQL"],slots:{apiType:"GraphQL"},priority:25,intelligence:"medium"},"redux.config.js":{frameworks:["Redux"],slots:{stateManagement:"Redux"},priority:20,intelligence:"medium"},"mobx.config.js":{frameworks:["MobX"],slots:{stateManagement:"MobX"},priority:20,intelligence:"medium"},"vuex.config.js":{frameworks:["Vuex"],slots:{stateManagement:"Vuex",framework:"Vue"},priority:20,intelligence:"medium"},"pinia.config.js":{frameworks:["Pinia"],slots:{stateManagement:"Pinia",framework:"Vue"},priority:20,intelligence:"medium"},"zustand.config.js":{frameworks:["Zustand"],slots:{stateManagement:"Zustand"},priority:20,intelligence:"medium"},".eslintrc.js":{frameworks:["ESLint"],slots:{},priority:15,intelligence:"low"},".eslintrc.json":{frameworks:["ESLint"],slots:{},priority:15,intelligence:"low"},".prettierrc":{frameworks:["Prettier"],slots:{},priority:15,intelligence:"low"},".prettierrc.json":{frameworks:["Prettier"],slots:{},priority:15,intelligence:"low"},"biome.json":{frameworks:["Biome"],slots:{},priority:15,intelligence:"low"},".editorconfig":{frameworks:["EditorConfig"],slots:{},priority:10,intelligence:"low"},"serverless.yml":{frameworks:["Serverless Framework"],slots:{hosting:"AWS Lambda/Azure/GCP",backend:"Serverless",apiType:"API Gateway"},priority:30,intelligence:"high"},"serverless.yaml":{frameworks:["Serverless Framework"],slots:{hosting:"AWS Lambda/Azure/GCP",backend:"Serverless",apiType:"API Gateway"},priority:30,intelligence:"high"},"sam.yaml":{frameworks:["AWS SAM"],slots:{hosting:"AWS Lambda",backend:"AWS SAM",cicd:"AWS SAM CLI"},priority:30,intelligence:"high"},"template.yaml":{frameworks:["AWS SAM","CloudFormation"],slots:{hosting:"AWS",backend:"AWS SAM/CloudFormation",cicd:"AWS"},priority:25,intelligence:"medium",confirmWith:["samconfig.toml"]},"amplify.yml":{frameworks:["AWS Amplify"],slots:{hosting:"AWS Amplify",backend:"AWS Amplify",cicd:"AWS Amplify"},priority:30,intelligence:"high"},Podfile:{frameworks:["CocoaPods","Swift"],slots:{packageManager:"CocoaPods",mainLanguage:"Swift/Objective-C"},priority:30,intelligence:"high"},"build.gradle.kts":{frameworks:["Kotlin","Gradle"],slots:{packageManager:"gradle",mainLanguage:"Kotlin",buildTool:"gradle"},priority:35,intelligence:"ultra-high"},"*.ipynb":{frameworks:["Jupyter","Python"],slots:{mainLanguage:"Python",framework:"Jupyter Notebook"},priority:30,intelligence:"high"},MLproject:{frameworks:["MLflow"],slots:{mainLanguage:"Python",backend:"MLflow"},priority:30,intelligence:"high"},"dvc.yaml":{frameworks:["DVC","Data Version Control"],slots:{mainLanguage:"Python",cicd:"DVC Pipelines"},priority:30,intelligence:"high"},"dvc.lock":{frameworks:["DVC"],slots:{},priority:20,intelligence:"medium"},"wrangler.toml":{frameworks:["Cloudflare Workers","Cloudflare"],slots:{hosting:"Cloudflare Workers",backend:"Cloudflare Workers",runtime:"V8 Isolates"},priority:30,intelligence:"high"},"deno.json":{frameworks:["Deno"],slots:{runtime:"Deno",mainLanguage:"TypeScript",packageManager:"Deno"},priority:30,intelligence:"high"},"bun.lockb":{frameworks:["Bun"],slots:{runtime:"Bun",packageManager:"Bun",mainLanguage:"TypeScript/JavaScript"},priority:30,intelligence:"high"},"codecov.yml":{frameworks:["Codecov"],slots:{},priority:25,intelligence:"high"},"dependabot.yml":{frameworks:["Dependabot","GitHub"],slots:{},priority:25,intelligence:"high"},"renovate.json":{frameworks:["Renovate"],slots:{},priority:25,intelligence:"high"},Makefile:{frameworks:["Make","GNU Make"],slots:{buildTool:"Make"},priority:30,intelligence:"high"},"CMakeLists.txt":{frameworks:["CMake","C","C++"],slots:{buildTool:"CMake",mainLanguage:"C/C++"},priority:30,intelligence:"high"},"meson.build":{frameworks:["Meson","C","C++"],slots:{buildTool:"Meson",mainLanguage:"C/C++"},priority:30,intelligence:"high"},"*.c":{frameworks:["C"],slots:{mainLanguage:"C"},priority:30,intelligence:"high"},"*.cpp":{frameworks:["C++"],slots:{mainLanguage:"C++"},priority:30,intelligence:"high"},"*.cc":{frameworks:["C++"],slots:{mainLanguage:"C++"},priority:30,intelligence:"high"},"*.cxx":{frameworks:["C++"],slots:{mainLanguage:"C++"},priority:25,intelligence:"high"},"*.h":{frameworks:["C","C++"],slots:{mainLanguage:"C/C++"},priority:25,intelligence:"high"},"*.hpp":{frameworks:["C++"],slots:{mainLanguage:"C++"},priority:25,intelligence:"high"},"*.hxx":{frameworks:["C++"],slots:{mainLanguage:"C++"},priority:20,intelligence:"medium"},".env":{frameworks:[],slots:{},priority:20,intelligence:"medium"},".env.example":{frameworks:[],slots:{},priority:25,intelligence:"high"},".env.local":{frameworks:[],slots:{},priority:20,intelligence:"medium"},".env.development":{frameworks:[],slots:{},priority:20,intelligence:"medium"},".env.production":{frameworks:[],slots:{},priority:20,intelligence:"medium"},"skaffold.yaml":{frameworks:["Skaffold","Kubernetes"],slots:{hosting:"Kubernetes",cicd:"Skaffold"},priority:30,intelligence:"high"},"Chart.yaml":{frameworks:["Helm","Kubernetes"],slots:{hosting:"Kubernetes"},priority:30,intelligence:"high"},"values.yaml":{frameworks:["Helm","Kubernetes"],slots:{hosting:"Kubernetes"},priority:25,intelligence:"high",confirmWith:["Chart.yaml"]},"pulumi.yaml":{frameworks:["Pulumi"],slots:{cicd:"Pulumi"},priority:30,intelligence:"high"},"Pulumi.yaml":{frameworks:["Pulumi"],slots:{cicd:"Pulumi"},priority:30,intelligence:"high"},"terragrunt.hcl":{frameworks:["Terragrunt","Terraform"],slots:{cicd:"Terragrunt"},priority:30,intelligence:"high"},"ansible.yml":{frameworks:["Ansible"],slots:{cicd:"Ansible"},priority:30,intelligence:"high"},"playbook.yml":{frameworks:["Ansible"],slots:{cicd:"Ansible"},priority:25,intelligence:"high"},"*.cs":{frameworks:["C#",".NET","Unity"],slots:{mainLanguage:"C#"},priority:30,intelligence:"high"},"*.m":{frameworks:["Objective-C","iOS"],slots:{mainLanguage:"Objective-C"},priority:25,intelligence:"high"},".nvmrc":{frameworks:["Node.js","nvm"],slots:{runtime:"Node.js"},priority:25,intelligence:"high"},".tool-versions":{frameworks:["asdf"],slots:{},priority:25,intelligence:"high"},".ruby-version":{frameworks:["Ruby","rbenv"],slots:{mainLanguage:"Ruby",runtime:"Ruby"},priority:25,intelligence:"high"},".python-version":{frameworks:["Python","pyenv"],slots:{mainLanguage:"Python",runtime:"Python"},priority:25,intelligence:"high"},".dockerignore":{frameworks:["Docker"],slots:{},priority:20,intelligence:"medium"},".gitattributes":{frameworks:["Git"],slots:{},priority:15,intelligence:"low"},".npmrc":{frameworks:["npm","Node.js"],slots:{packageManager:"npm"},priority:20,intelligence:"medium"},"sonar-project.properties":{frameworks:["SonarQube","SonarCloud"],slots:{},priority:25,intelligence:"high"},"*.fs":{frameworks:["F#",".NET"],slots:{mainLanguage:"F#"},priority:25,intelligence:"high"},"*.mm":{frameworks:["Objective-C++","iOS","macOS"],slots:{mainLanguage:"Objective-C++"},priority:25,intelligence:"high"},"build.zig.zon":{frameworks:["Zig"],slots:{mainLanguage:"Zig",packageManager:"Zig Package Manager",buildTool:"zig build"},priority:35,intelligence:"ultra-high"},"gleam.toml":{frameworks:["Gleam","BEAM","Erlang"],slots:{mainLanguage:"Gleam",runtime:"BEAM",packageManager:"Gleam"},priority:30,intelligence:"high"},"bunfig.toml":{frameworks:["Bun"],slots:{runtime:"Bun",packageManager:"Bun",buildTool:"Bun"},priority:30,intelligence:"high"},"mise.toml":{frameworks:["mise"],slots:{},priority:25,intelligence:"high"},".mise.toml":{frameworks:["mise"],slots:{},priority:25,intelligence:"high"},"manifest.toml":{frameworks:["Flox","Nix"],slots:{},priority:25,intelligence:"high",confirmWith:[".flox"]},justfile:{frameworks:["Just"],slots:{buildTool:"Just"},priority:25,intelligence:"high"},".pre-commit-config.yaml":{frameworks:["pre-commit"],slots:{},priority:25,intelligence:"high"},"CLAUDE.md":{frameworks:["Claude Code"],slots:{},priority:30,intelligence:"high",confirmWith:[".claude"]}};import{join as cD}from"path";var V$={version:2,_doc:"SINGLE SOURCE of Dart/Flutter detection KNOWLEDGE (A+B hybrid, the Truth-is-faf-cli spec). faf-cli imports this directly; faf-python-sdk vendors a synced copy (phase 2); MCPs compose it. Bolster Dart/Flutter by editing THIS file. Logic stays in dart.ts. Refreshed 2026-08-01 (knowledge v2) — community receipt on top of 6.13.0 Dart Edition.",flutterDeps:["flutter"],mcpDeps:["dart_mcp","mcp_server","mcp_dart","dart_mcp_server","mcp","dart_mcpserver"],serverFrameworks:[["serverpod","Serverpod"],["dart_frog","Dart Frog"],["conduit","Conduit"],["angel3_framework","Angel3"],["alfred","Alfred"],["shelf","Shelf"],["jaspr","Jaspr"],["relic","Relic"]],stateManagement:[["flutter_riverpod","Riverpod"],["hooks_riverpod","Riverpod"],["riverpod_annotation","Riverpod"],["riverpod","Riverpod"],["flutter_bloc","Bloc"],["bloc","Bloc"],["provider","Provider"],["get","GetX"],["flutter_mobx","MobX"],["mobx","MobX"],["signals","Signals"],["flutter_hooks","Hooks"]],routing:[["go_router","go_router"],["auto_route","auto_route"],["beamer","Beamer"],["routemaster","Routemaster"]]};var dD=V$.flutterDeps,iD=V$.mcpDeps,nD=V$.serverFrameworks,rD=V$.stateManagement,sD=V$.routing;function oD($){let Z=new Set,Q=!1;for(let z of $.split(`
|
|
251
|
-
`)){if(/^(dependencies|dev_dependencies|dependency_overrides):\s*$/.test(z)){Q=!0;continue}if(/^\S/.test(z))Q=!1;if(Q){let X=z.match(/^\s{2}([a-zA-Z0-9_]+):/);if(X)Z.add(X[1].toLowerCase())}}return Z}function
|
|
252
|
-
`)){let X=z.replace(/\/\/.*$/,"").trim();if(!X)continue;if(/^require\s*\(\s*$/.test(X)){Q=!0;continue}if(Q){if(X===")"){Q=!1;continue}let U=X.match(/^(\S+)/);if(U)Z.add(U[1].toLowerCase());continue}let H=X.match(/^require\s+(\S+)/);if(H&&H[1]!=="(")Z.add(H[1].toLowerCase())}return Z}function
|
|
253
|
-
`)){let H=X.replace(/#.*$/,"").trim();if(!H)continue;let U=H.match(/^\[([^\]]+)\]$/);if(U){z=U[1].trim().toLowerCase();continue}let J=H.match(/^([A-Za-z0-9_.-]+)\s*=\s*\{[^}]*\bid\s*=\s*"([^"]+)"/);if(J&&(z==="plugins"||z.endsWith(".plugins"))){Z.set(J[1].replace(/-/g,".").toLowerCase(),J[2].toLowerCase()),Z.set(J[1].toLowerCase(),J[2].toLowerCase());continue}let G=H.match(/^([A-Za-z0-9_.-]+)\s*=\s*\{[^}]*\bmodule\s*=\s*"([^"]+)"/);if(G&&(z==="libraries"||z.endsWith(".libraries"))){let W=G[1].toLowerCase();Q.set(W,G[2].toLowerCase()),Q.set(W.replace(/-/g,"."),G[2].toLowerCase());continue}let V=H.match(/^([A-Za-z0-9_.-]+)\s*=\s*\{[^}]*\bgroup\s*=\s*"([^"]+)"[^}]*\bname\s*=\s*"([^"]+)"/);if(V&&(z==="libraries"||z.endsWith(".libraries"))){let W=`${V[2]}:${V[3]}`.toLowerCase(),B=V[1].toLowerCase();Q.set(B,W),Q.set(B.replace(/-/g,"."),W);continue}let Y=H.match(/^([A-Za-z0-9_.-]+)\s*=\s*"([^"]+)"/);if(Y){let W=Y[1].toLowerCase(),B=Y[2];if(z==="plugins"||z.endsWith(".plugins")){let K=B.split(":")[0].toLowerCase();Z.set(W,K),Z.set(W.replace(/-/g,"."),K)}else if(z==="libraries"||z.endsWith(".libraries")){let K=B.split(":");if(K.length>=2){let L=`${K[0]}:${K[1]}`.toLowerCase();Q.set(W,L),Q.set(W.replace(/-/g,"."),L)}}}}return{plugins:Z,libraries:Q}}function SL($){let Z=S($,F2("gradle","libs.versions.toml"));if(!Z)return{plugins:new Map,libraries:new Map};return wL(Z)}function EL($){let Z=[];for(let Q of $.matchAll(/include\s*\(\s*([^)]+)\)/g))for(let z of Q[1].split(",")){let X=z.replace(/['":\s]/g,"").replace(/^:/,"");if(X)Z.push(X.replace(/:/g,"/"))}for(let Q of $.matchAll(/include\s+((?:['"][^'"]+['"]\s*,?\s*)+)/g))for(let z of Q[1].split(",")){let X=z.replace(/['":\s]/g,"").replace(/^:/,"");if(X)Z.push(X.replace(/:/g,"/"))}for(let Q of $.matchAll(/project\s*\(\s*["']:([^"']+)["']\s*\)\s*\.projectDir\s*=\s*file\s*\(\s*["']([^"']+)["']\s*\)/g))Z.push(Q[2].replace(/^\.\//,""));return[...new Set(Z)]}function bL($,Z){let Q=new Set;for(let z of $.matchAll(/\bid\s*\(\s*["']([^"']+)["']\s*\)/g))Q.add(z[1].toLowerCase());for(let z of $.matchAll(/\bid\s+['"]([^'"]+)['"]/g))Q.add(z[1].toLowerCase());for(let z of $.matchAll(/plugins\s*\{([\s\S]*?)\}/g))for(let X of z[1].split(/[\n;]/)){let H=X.replace(/\/\/.*$/,"").trim();if(!H||H.startsWith("id")||H.startsWith("kotlin")||H.startsWith("alias"))continue;let U=H.match(/^`([a-zA-Z0-9.-]+)`$/)||H.match(/^([a-zA-Z][a-zA-Z0-9.-]*)$/);if(U)Q.add(U[1].toLowerCase())}for(let z of $.matchAll(/\bkotlin\s*\(\s*["']([^"']+)["']\s*\)/g)){let X=z[1].toLowerCase();if(X==="jvm")Q.add("org.jetbrains.kotlin.jvm");else if(X==="multiplatform")Q.add("org.jetbrains.kotlin.multiplatform");else if(X==="android")Q.add("org.jetbrains.kotlin.android");else Q.add(`org.jetbrains.kotlin.${X}`)}for(let z of $.matchAll(/libs\.plugins\.([A-Za-z0-9_.]+)/g)){let X=z[1].toLowerCase(),H=Z.plugins.get(X)||Z.plugins.get(X.replace(/\./g,"-"))||Z.plugins.get(X.replace(/-/g,"."));if(H)Q.add(H);else if(X.includes("spring")&&X.includes("boot"))Q.add("org.springframework.boot")}for(let z of $.matchAll(/apply\s+plugin\s*:\s*['"]([^'"]+)['"]/g))Q.add(z[1].toLowerCase());return Q}function yL($,Z){let Q=new Set;for(let z of $.matchAll(/["']([A-Za-z0-9_.-]+:[A-Za-z0-9_.-]+)(?::[^"']+)?["']/g))Q.add(z[1].toLowerCase());for(let z of $.matchAll(/libs\.([A-Za-z0-9_.]+)/g)){let X=z[1].toLowerCase();if(X.startsWith("plugins."))continue;let H=[X,X.replace(/\./g,"-"),X.replace(/-/g,".")];for(let U of H){let J=Z.libraries.get(U);if(J){Q.add(J.includes(":")?J.split(":").slice(0,2).join(":"):J);break}}}return Q}function Y3($){let Z=($.match(/<packaging>\s*([^<]+?)\s*<\/packaging>/i)?.[1]||"jar").trim().toLowerCase(),Q=new Set,z=$.match(/<parent>([\s\S]*?)<\/parent>/i);if(z){let U=z[1].match(/<groupId>\s*([^<]+?)\s*<\/groupId>/i)?.[1]?.trim(),J=z[1].match(/<artifactId>\s*([^<]+?)\s*<\/artifactId>/i)?.[1]?.trim();if(U&&J)Q.add(`${U}:${J}`.toLowerCase())}let X=new Set;for(let U of $.matchAll(/<dependency>([\s\S]*?)<\/dependency>/gi)){let J=U[1].match(/<groupId>\s*([^<]+?)\s*<\/groupId>/i)?.[1]?.trim(),G=U[1].match(/<artifactId>\s*([^<]+?)\s*<\/artifactId>/i)?.[1]?.trim();if(J&&G)X.add(`${J}:${G}`.toLowerCase())}let H=[];for(let U of $.matchAll(/<module>\s*([^<]+?)\s*<\/module>/gi))H.push(U[1].trim());return{packaging:Z,parents:Q,artifacts:X,modules:H}}function p0($,Z){let Q=Z.toLowerCase();if($.has(Q))return!0;for(let z of $)if(z===Q||z.endsWith(`.${Q}`)||z===Q.replace(/^org\.gradle\./,""))return!0;return!1}function z6($,Z,Q){let z;for(let[X,H]of Z){let U=!1;if(Q==="plugin")U=p0($,X);else if(U=$.has(X)||[...$].some((J)=>J===X||J.startsWith(`${X}:`)||J.startsWith(`${X}.`)),!U&&Q==="artifact")U=[...$].some((J)=>J===X||J.startsWith(`${X}`));if(!U)continue;if(!z||X.length>z[0].length)z=[X,H]}return z}function xL($){let Z;for(let Q of _L)for(let z of $){if(z===Q||z.startsWith(`${Q}:`)||z.startsWith(Q.replace(/:mcp$/,":"))){if(!Z||Q.length>Z.length)Z=Q}if(z.startsWith("io.modelcontextprotocol")||z.includes("spring-ai-starter-mcp")||z.includes("spring-ai-mcp")){if(!Z||z.length>Z.length)Z=z}}return Z}function W3($,Z){let Q=new Set,z=!1,X=!1,H=[F2(Z,"src"),F2(Z,"src","main")],U=(J,G)=>{if(G>4)return;let V=v($,J);if(!V)return;for(let{name:Y}of V){if(Y==="androidMain"||Y==="commonMain"||Y==="jvmMain"||Y==="iosMain")Q.add(Y);let W=F2(J,Y),B=O0($,W);if(!B)continue;if(B.isDirectory())U(W,G+1);else if(Y.endsWith(".kt")||Y.endsWith(".kts"))z=!0;else if(Y.endsWith(".java"))X=!0}};for(let J of H)U(J,0);return{kotlin:z,java:X,hints:Q}}function gL($){let Z=[],Q=$.plugins,z=$.artifacts,X=RL.some((F)=>p0(Q,F))||$.sourceHints.has("commonMain"),H=p0(Q,"com.android.application"),U=p0(Q,"com.android.library")||p0(Q,"com.android.kotlin.multiplatform.library");if(H||U)Z.push("android");if(X)Z.push("multiplatform");let J=xL(z),G=z6(Q,ML,"plugin"),V=z6($.parents,PL,"parent"),Y=z6(z,FL,"artifact"),W=z6(Q,TL,"plugin"),B=z6(z,AL,"artifact"),K=CL.some((F)=>p0(Q,F)),L=$.packaging==="pom",q,D="",O;if(H)q="mobile",D=X?"Android+KMP":"Android",O=`${$.path||"root"} + com.android.application (${D})`;else if(J)q="mcp",D="MCP",Z.push("mcp"),O=`${$.path||"root"} + ${J} (JVM MCP server)`;else if(G||V||Y){q="backend",D=G?.[1]||V?.[1]||Y?.[1]||"JVM";let F=G?.[0]||V?.[0]||Y?.[0]||"web";O=`${$.path||"root"} + ${F} (JVM backend)`}else if(X&&!U)q="library",D="Kotlin Multiplatform",O=`${$.path||"root"} + kotlin multiplatform (KMP library)`;else if(U)q="library",D=X?"Android+KMP":"Android",O=`${$.path||"root"} + android library (${D})`;else if(B||$.hasApplicationPlugin&&($.hasMainClass||W)||W&&$.hasMainClass)q="cli",D=B?.[1]||"application",O=B?`${$.path||"root"} + ${B[0]} (JVM CLI)`:`${$.path||"root"} + application plugin (JVM CLI)`;else if($.hasApplicationPlugin&&!K)q="cli",D="application",O=`${$.path||"root"} + application plugin (JVM CLI)`;else if(L)q="library",O=`${$.path||"root"} + packaging=pom (Maven aggregator/BOM)`;else{q="library";let F=$.kotlinSources&&!$.javaSources?"Kotlin":"JVM";if(O=`${$.path||"root"} (${F} library)`,K)O=`${$.path||"root"} + java-library (JVM library)`}let _="Java";if($.kotlinSources&&$.javaSources)_="Java/Kotlin";else if($.kotlinSources||NL.some((F)=>p0(Q,F))||X)_="Kotlin";let C=[...new Set(Z)];return{appType:q,framework:D,facets:C,found:O,buildTool:$.buildTool,mainLanguage:_}}function vL($,Z){if($==="mcp")return 0;if($==="mobile")return 1;if(Z.includes("multiplatform")&&$==="backend")return 2;if($==="backend")return 3;if($==="cli")return 4;if(Z.includes("multiplatform"))return 5;if(Z.includes("android"))return 6;return 7}function G3($,Z,Q){let z=F2(Z,"build.gradle.kts"),X=F2(Z,"build.gradle"),H=I($,z)?z:I($,X)?X:null;if(!H)return null;let U=S($,H);if(!U)return null;let J=bL(U,Q),G=yL(U,Q),V=W3($,Z),Y=/mainClass\s*[.=]/.test(U)||/mainClassName\s*=/.test(U)||/Main-Class/.test(U),W=p0(J,"application")||p0(J,"org.gradle.application");return{path:Z||"build.gradle",plugins:J,artifacts:G,packaging:"jar",parents:new Set,hasMainClass:Y,hasApplicationPlugin:W,sourceHints:V.hints,kotlinSources:V.kotlin||H.endsWith(".kts"),javaSources:V.java,buildTool:"gradle"}}function V3($,Z){let Q=S($,F2(Z,"pom.xml"));if(!Q)return null;let{packaging:z,parents:X,artifacts:H}=Y3(Q),U=W3($,Z);return{path:Z?`${Z}/pom.xml`:"pom.xml",plugins:new Set,artifacts:H,packaging:z,parents:X,hasMainClass:/<mainClass>/.test(Q),hasApplicationPlugin:!1,sourceHints:U.hints,kotlinSources:U.kotlin,javaSources:U.java,buildTool:"maven"}}function X6($){if(!Y1($))return null;let Z=SL($),Q=[],z=null;for(let V of["settings.gradle.kts","settings.gradle"])if(I($,V)){z=S($,V);break}let X=z?EL(z):[],H=G3($,"",Z);if(H)Q.push(H);for(let V of X){let Y=G3($,V,Z);if(Y)Q.push(Y)}let U=V3($,"");if(U){Q.push(U);let V=S($,"pom.xml");if(V){let{modules:Y}=Y3(V);for(let W of Y){let B=V3($,W);if(B)Q.push(B)}}}if(Q.length===0&&z)return{appType:"library",framework:"",buildTool:"gradle",mainLanguage:"Java/Kotlin",facets:[],found:"settings.gradle (Gradle multi-project root)"};if(Q.length===0)return null;let J=null,G=999;for(let V of Q){let Y=gL(V),W=vL(Y.appType,Y.facets);if(!J||W<G)J={appType:Y.appType,framework:Y.framework,buildTool:Y.buildTool,mainLanguage:Y.mainLanguage,facets:Y.facets,found:Y.found},G=W}if(J&&X.length>0&&!J.found.includes("multi-project"));return J}import{join as hL}from"path";var H6={version:1,_doc:"SINGLE SOURCE of Ruby detection KNOWLEDGE (Truth-is-faf-cli). faf-cli imports this; SDKs/MCPs compose it. Kill line: Gemfile alone ≠ Rails. Content-aware: gem names + light layout. 2026-08-03 initial (post-intel ruby-edition).",mcpGems:["mcp","fast-mcp","fast_mcp","rails-mcp-server","rails_mcp_server","ruby-mcp-client","ruby_mcp_client","ruby_llm-mcp","ruby_llm_mcp"],webGems:[["rails","Rails"],["railties","Rails"],["sinatra","Sinatra"],["sinatra-contrib","Sinatra"],["roda","Roda"],["grape","Grape"],["hanami","Hanami"],["hanami-controller","Hanami"],["rack","Rack"]],cliGems:[["thor","Thor"],["gli","GLI"],["commander","Commander"],["slop","Slop"]],railsLayoutFiles:["config/application.rb","config/routes.rb","bin/rails","config/environment.rb"]};var uL=H6.mcpGems.map(($)=>$.toLowerCase()),fL=H6.webGems.map(([$,Z])=>[$.toLowerCase(),Z]),B3=H6.cliGems.map(([$,Z])=>[$.toLowerCase(),Z]),mL=H6.railsLayoutFiles;function pL($){return I($,"Gemfile")||I($,"gems.rb")||lL($)}function lL($){return(v($)??[]).some((Z)=>Z.name.endsWith(".gemspec"))}function cL($){let Z=new Set;for(let Q of $.split(`
|
|
254
|
-
`)){let z=Q.replace(/#.*$/,"").trim();if(!z)continue;let X=z.match(/^\s*gem\s+['"]([^'"]+)['"]/i)||z.match(/^\s*gem\s+:([A-Za-z0-9_.-]+)/i);if(X)Z.add(X[1].toLowerCase())}return Z}function
|
|
255
|
-
`)){let X=z.replace(/\r$/,"");if(/^\s*specs:\s*$/.test(X)){Q=!0;continue}if(Q){if(/^[A-Z]/.test(X)||X.startsWith("PLATFORMS")||X.startsWith("DEPENDENCIES")||X.startsWith("BUNDLED")||X.startsWith("RUBY VERSION")||X.startsWith("CHECKSUMS")){Q=!1;continue}let H=X.match(/^\s{2,}([a-zA-Z0-9_.-]+)\s*\(/);if(H)Z.add(H[1].toLowerCase())}}return Z}function
|
|
256
|
-
`)){let X=Q.replace(/#.*$/,"").match(/add_(?:runtime_|development_)?dependency\s*\(?\s*['"]([^'"]+)['"]/i);if(X)Z.add(X[1].toLowerCase())}return Z}function
|
|
257
|
-
`)Q++;continue}if($[Q]==="/"&&$[Q+1]==="*"){Q+=2;while(Q<$.length&&!($[Q]==="*"&&$[Q+1]==="/"))Q++;Q+=2;continue}Z+=$[Q],Q++}return Z}function YI($,Z){let Q=$.map((X)=>X.toLowerCase()),z;for(let X of Z)for(let H of Q)if(H.includes(X)&&(!z||X.length>z.length))z=X;return z}function K3($,Z){let Q=$.map((X)=>X.toLowerCase()),z;for(let[X,H]of Z)for(let U of Q)if(U.includes(X)&&(!z||X.length>z[0].length))z=[X,H];return z}function D3($,Z){let Q=$.map((X)=>X.toLowerCase()),z;for(let[X,H]of Z)if(Q.includes(X)&&(!z||X.length>z[0].length))z=[X,H];return z}function WI($){let Z=$.map((Q)=>Q.toLowerCase());return eL.some((Q)=>Z.includes(Q))}function BI($){let Z=!1,Q=!1,z;for(let X of B1($)){let H=S($,aL(X,"project.pbxproj"));if(!H)continue;for(let U of XI)if(H.includes(U))Z=!0,z=U;for(let U of HI)if(H.includes(U)){if(Q=!0,!z)z=U}}return{hasApplication:Z,hasTool:Q,hit:z}}function qI($){for(let Z of UI)if(I($,Z))return Z;return}function J6($){if(!JI($))return null;let Z=I($,"Package.swift"),Q=B1($),z=Q.length>0,X=null;if(Z){let P=S($,"Package.swift");if(P)X=GI(P)}let H=z?BI($):{hasApplication:!1,hasTool:!1},U=qI($),J=X?.packageUrls??[],G=X?.productNames??[],V=YI(J,tL),Y=WI(G),W=K3(J,$I),B=D3(G,ZI),K=K3(J,QI),L=D3(G,zI),q=!!(V||Y),D=!!(W||B||U),O=!!(X?.hasExecutableProduct||X?.hasExecutableTarget),_=!!(K||L),C=H.hasApplication,F=Z&&z?"spm+xcode":Z?"spm":"xcode",R,N="",w;if(q)if(R="mcp",N="MCP",Y)w="Package.swift + product MCP (Swift MCP)";else w=`Package.swift + ${V} (Swift MCP)`;else if(D)if(R="backend",N=B?.[1]||W?.[1]||(U?"Vapor":""),B)w=`Package.swift + product ${B[1]} (Swift backend)`;else if(W)w=`Package.swift + ${W[1]} (Swift backend)`;else w=`${U} (Swift backend layout)`;else if(C)R="app",N="",w=`${Q[0]} + ${H.hit||"application"} (Swift app)`;else if(_||O&&!D&&!q)if(R="cli",N=L?.[1]||K?.[1]||"",L)w=`Package.swift + product ${L[1]} (Swift CLI)`;else if(K)w=`Package.swift + ${K[1]} (Swift CLI)`;else if(X?.hasExecutableProduct)w="Package.swift + .executable product (Swift CLI)";else w="Package.swift + .executableTarget (Swift CLI)";else if(H.hasTool&&!Z)R="cli",w=`${Q[0]} + tool productType (Swift CLI)`;else if(Z)if(R="library",X?.hasLibraryProduct)w="Package.swift + .library product (Swift library)";else w="Package.swift (Swift library)";else R="library",w=`${Q[0]||"xcodeproj"} (Swift — no classifying productType)`;return{appType:R,framework:N,packageManager:F,found:w}}var II=new Set(["node_modules",".git","dist","build","venv",".venv","__pycache__","target","coverage",".next",".svelte-kit","vendor"]),OI=new Set([".py",".ts",".tsx",".js",".jsx",".svelte",".vue",".rb",".go",".rs",".php",".java",".kt",".swift"]),_I={mainLanguage:["project","main_language"],main_language:["project","main_language"],framework:["stack","frontend"],cssFramework:["stack","css_framework"],css:["stack","css_framework"],uiLibrary:["stack","ui_library"],ui_library:["stack","ui_library"],stateManagement:["stack","state_management"],state:["stack","state_management"],backend:["stack","backend"],apiType:["stack","api_type"],api:["stack","api_type"],runtime:["stack","runtime"],database:["stack","database"],db:["stack","database"],connection:["stack","connection"],hosting:["stack","hosting"],buildTool:["stack","build"],build_tool:["stack","build"],build:["stack","build"],packageManager:["stack","package_manager"],pkg_manager:["stack","package_manager"],cicd:["stack","cicd"]},MI=[["packageManager","package-manager"],["pkg_manager","package-manager"],["mainLanguage","language"],["main_language","language"],["framework","framework"],["backend","backend"],["database","database"],["db","database"],["cicd","ci-cd"],["hosting","hosting"],["buildTool","build"],["build_tool","build"],["build","build"],["runtime","runtime"],["cssFramework","css"],["css","css"],["uiLibrary","ui-library"],["stateManagement","state-management"],["apiType","api"],["api","api"]];function PI($,Z){for(let[Q,z]of MI)if(Q in $)return z;return Z.length>0?"framework":"config"}function FI($,Z){try{let Q=JSON.parse(S($,Z)??""),z=["background","content_scripts","action","browser_action","permissions"].some((X)=>(X in Q));if(typeof Q.manifest_version==="number"&&z)return"chrome";return"other"}catch{return"other"}}function RI($,Z){if(Z.isFile())return!0;if(!Z.isSymbolicLink())return!1;return O0($,Z.name)?.isFile()===!0}function NI($,Z){if(Z.isDirectory())return!0;if(!Z.isSymbolicLink())return!1;return O0($,Z.name)?.isDirectory()===!0}function TI($){let Z=[],Q=LI($),z=new Set,X=v(Q);if(!X)return Z;for(let H of X){let U=H.name;if(U.endsWith(".xcodeproj")?!NI(Q,H):!RI(Q,H))continue;if(U.toLowerCase().endsWith(".csproj")){let G=x8(Q);if(G){let V={mainLanguage:"C#",packageManager:"NuGet",buildTool:"dotnet"};if(G.appType==="backend"&&G.framework)V.backend=G.framework;else if(G.appType==="cli"&&G.framework)V.framework=G.framework;else if(G.appType==="mcp")V.apiType="MCP";else if(G.appType==="mobile"&&G.framework)V.framework=G.framework;if(G.targetFramework)V.runtime=G.targetFramework;let Y=G.framework?[G.framework,"C#",".NET"]:["C#",".NET"];Z.push({slots:V,priority:36,frameworks:Y,fileName:U})}continue}if(U.endsWith(".xcodeproj")){let G=J6(Q);if(G){let V={mainLanguage:"Swift",packageManager:G.packageManager==="spm"?"spm":"Xcode",buildTool:G.packageManager.includes("spm")?"swift build":"xcodebuild"};if(G.appType==="backend"&&G.framework)V.backend=G.framework;else if(G.appType==="cli"&&G.framework)V.framework=G.framework;else if(G.appType==="mcp")V.apiType="MCP";else if(G.appType==="app"&&G.framework)V.framework=G.framework;let Y=G.framework?[G.framework,"Swift"]:["Swift"];Z.push({slots:V,priority:36,frameworks:Y,fileName:U})}continue}let J=G1[U];if(!J)continue;if(U==="manifest.json"&&FI(Q,U)!=="chrome")continue;if(U==="pubspec.yaml"){let G=S8(Q);if(G){let V={mainLanguage:"Dart",packageManager:"pub"};if(G.isFlutter){if(V.framework="Flutter",G.stateManagement)V.stateManagement=G.stateManagement}else if(G.appType==="backend"&&G.framework)V.backend=G.framework;else if(G.appType==="mcp")V.apiType="MCP";Z.push({slots:V,priority:J.priority,frameworks:G.isFlutter?["Flutter","Dart"]:["Dart"],fileName:U});continue}}if(U==="go.mod"){let G=b8(Q);if(G){let V={mainLanguage:"Go",packageManager:"go modules",buildTool:"go build"};if(G.appType==="backend"&&G.framework)V.backend=G.framework;else if(G.appType==="cli"&&G.framework)V.framework=G.framework;else if(G.appType==="mcp")V.apiType="MCP";let Y=G.framework?[G.framework,"Go"]:["Go"];Z.push({slots:V,priority:J.priority,frameworks:Y,fileName:U});continue}}if(U==="Gemfile"||U==="Gemfile.lock"||U==="gems.rb"){let G=g8(Q);if(G){let V={mainLanguage:"Ruby",packageManager:G.packageManager};if(G.appType==="backend"&&G.framework)V.backend=G.framework;else if(G.appType==="cli"&&G.framework)V.framework=G.framework;else if(G.appType==="mcp")V.apiType="MCP";let Y=G.framework?[G.framework,"Ruby"]:["Ruby"];Z.push({slots:V,priority:J.priority??35,frameworks:Y,fileName:U});continue}}if(U==="Package.swift"){let G=J6(Q);if(G){let V={mainLanguage:"Swift",packageManager:G.packageManager==="xcode"?"Xcode":"spm",buildTool:"swift build"};if(G.appType==="backend"&&G.framework)V.backend=G.framework;else if(G.appType==="cli"&&G.framework)V.framework=G.framework;else if(G.appType==="mcp")V.apiType="MCP";else if(G.appType==="app"&&G.framework)V.framework=G.framework;let Y=G.framework?[G.framework,"Swift"]:["Swift"];Z.push({slots:V,priority:J.priority??36,frameworks:Y,fileName:U});continue}}if(U==="pom.xml"||U==="build.gradle"||U==="build.gradle.kts"||U==="settings.gradle"||U==="settings.gradle.kts"){if(z.has(Q))continue;z.add(Q);let G=X6(Q);if(G){let V={mainLanguage:G.mainLanguage==="Java/Kotlin"?"Kotlin":G.mainLanguage,packageManager:G.buildTool==="maven"?"maven":"gradle",buildTool:G.buildTool};if(G.appType==="backend"&&G.framework)V.backend=G.framework;else if(G.appType==="cli"&&G.framework)V.framework=G.framework;else if(G.appType==="mcp")V.apiType="MCP";else if(G.appType==="mobile")V.framework=G.framework||"Android";if(G.facets.includes("multiplatform"))V.framework=G.framework||"Kotlin Multiplatform";let Y=G.framework?[G.framework,"JVM",G.mainLanguage==="Kotlin"?"Kotlin":"Java"]:["JVM",G.mainLanguage==="Kotlin"?"Kotlin":"Java"];Z.push({slots:V,priority:J.priority??35,frameworks:Y,fileName:U});continue}}Z.push({slots:J.slots||{},priority:J.priority,frameworks:J.frameworks,fileName:U})}return Z}function AI($){let Z=[];for(let Q of e2($,()=>I3($,2,{count:0}))){let z=G1[`*${Q}`],X=z?.slots?.mainLanguage;if(X)Z.push({slots:{mainLanguage:X},priority:z.priority,frameworks:z.frameworks})}return Z}function L3($){let Z=[...TI($),...AI($)],Q={},z={},X=new Set;for(let V of Z){V.frameworks.forEach((Y)=>X.add(Y));for(let[Y,W]of Object.entries(V.slots))if(W&&!W.includes("/")&&(!(Y in Q)||V.priority>z[Y]))Q[Y]=W,z[Y]=V.priority}let H=new Map;for(let V of Z){if(!V.fileName)continue;if(!H.has(V.fileName))H.set(V.fileName,{fileName:V.fileName,category:PI(V.slots,V.frameworks),priority:V.priority})}let U=[...H.values()].sort((V,Y)=>Y.priority-V.priority||V.fileName.localeCompare(Y.fileName)),J=[];if(Q.mainLanguage)J.push(Q.mainLanguage.toLowerCase());if(Q.framework)J.push(Q.framework.toLowerCase());let G=J.length>0?J.join("-"):"unknown-stack";return{slotFills:Q,frameworks:[...X],confirmedCount:Z.length,discoveredFormats:U,stackSignature:G}}function v8($){let{slotFills:Z}=L3($),Q={};for(let[z,X]of Object.entries(Z)){let H=_I[z];if(!H||!X)continue;let[U,J]=H;if(U==="project")(Q.project??={})[J]=X;else(Q.stack??={})[J]=X}return Q}function I3($,Z,Q){let z=new Set;if(Z<0||Q.count>400)return z;let X=v($);if(!X)return z;for(let H of X){if(Q.count++>400)break;if(!H.isDirectory()){let U=DI(H.name);if(OI.has(U))z.add(U);continue}if(II.has(H.name)||H.name.startsWith("."))continue;for(let U of I3(KI($,H.name),Z-1,Q))z.add(U)}return z}var $0=($,Z,Q)=>({value:$,source:Z,confidence:Q});function O3($,Z={}){let Q=Z.toolingRoot?null:CI($),z=jI($),X={},H=(U,J)=>{if(J)X[U]=J};return H("what",EI(Q,z)),H("who",bI(z)),H("why",yI(z)),H("where",xI(Q,z)),H("when",gI(z)),H("how",vI(Q,z)),X}function k8($,Z={}){let Q=O3($,Z),z={};return Object.keys(Q).forEach((X)=>{let H=Q[X];if(H)z[X]=H.value}),z}function CI($){let Z=S($,"package.json");if(Z===null)return null;try{return JSON.parse(Z)}catch{return null}}function jI($){let Z=S($,"README.md");if(Z===null)return"";return Z.replace(/<!--[\s\S]*?-->/g,"").split(`
|
|
249
|
+
`}var NK='<meta name="description" content="Visual render of project.faf.';function TK($){return new TextDecoder().decode($).split(/\r?\n/).some((Z)=>Z.trim().startsWith(NK)&&Z.includes(" by faf"))}function AK($,Z,Q,z="project.faf",X={}){$6(LK($,"project.html"),pZ(Z,Q,z),{root:$,format:"html",hasMark:TK,mark:"faf mark (the `Visual render of project.faf` description line)",force:X.force})}var CK=IK(pZ,"faf-cli: generateProjectHtml is deprecated, use renderProjectHtml","FAF0001");import{join as sK}from"path";import{deprecate as oK}from"node:util";var Q$="https://faf.one/ext/context/v1",lZ="io.modelcontextprotocol.registry/publisher-provided";function S0($,Z={}){return{faf:Z.fafPointer??"./project.faf",mediaType:"application/vnd.faf+yaml",iana:"https://www.iana.org/assignments/media-types/application/vnd.faf+yaml",deterministic:!0,...Z.scoreEndpoint?{scoreEndpoint:Z.scoreEndpoint}:{},generated:$.generated??Z.now??new Date().toISOString()}}function I2($,Z={}){let Q={"one.faf/context":S0($,Z)},z=new TextEncoder().encode(JSON.stringify(Q)).length;if(z>4096)throw Error(`publisher-provided _meta is ${z}B — exceeds the registry ${"4096"}B cap`);return{["io.modelcontextprotocol.registry/publisher-provided"]:Q}}var BQ="JSONRPC",iZ="1.0",M8=["application/vnd.faf+yaml","application/vnd.fafm+yaml","application/vnd.fafa+yaml"],P8="https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json",qQ="https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",KQ="1.0",DQ="1.0",cZ={a2a:"application/a2a-agent-card+json",server_card:"application/mcp-server-card+json",fafa:"application/vnd.fafa+yaml"};function LQ($){return($.endpoints??[]).filter((Z)=>String(Z.protocol??"").toLowerCase()==="a2a"&&Z.location)}function O2($,Z={}){let Q=LQ($);if(Q.length>0)return Q;let z=Z.doorUrl?.trim();if(z)return[{protocol:"a2a",location:z,version:iZ}];return[]}function jK($){try{return`https://${z$($)}/.well-known/fafa`}catch{return}}function nZ($,Z,Q={}){let z=S0(Z,Q),X=$.agent??{},H={fafaSpecVersion:String($.version??DQ),mediaTypes:[...M8],provenance:{faf:z.faf,mediaType:z.mediaType},generated:z.generated};if(X.id)H.agentId=X.id;let U=jK($);if(U)H.passport=U;return{uri:Q$,description:"FAF passport and project DNA as typed parts",required:!1,params:H}}function wK($){let Z=new Set;for(let Q of $.capabilities??[])if(Q.cites_spec&&M8.includes(Q.cites_spec))Z.add(Q.cites_spec);return["text/plain",...Z]}function F8($,Z={}){let Q=$.agent??{},z=O2($,Z);if(z.length===0)throw Error("No A2A endpoint in .fafa (need endpoints[].protocol: a2a + location). Will not invent a door.");let X=String(Q.displayName??$.metadata?.persona??Q.name??"").trim(),H=String(Q.description??"").trim(),U=String(Q.version??"").trim();if(!X||!H||!U)throw Error("A2A card needs agent.displayName|name, description, version in .fafa");let J=String(Q.vendor??"").trim(),G=String(Q.homepage??"").trim(),V=J&&G?{organization:J,url:G}:void 0,Y=($.capabilities??[]).map((W)=>{let B=String(W.name??"").trim();if(!B)throw Error("A2A skill missing capabilities[].name");let K=Array.isArray(W.tags)?W.tags.map(String):[],L=W.cites_spec&&M8.includes(W.cites_spec)?[W.cites_spec,"text/plain"]:void 0;return{id:B,name:B,description:String(W.description??"").trim()||B,tags:K,...L?{inputModes:L}:{}}});return{name:X,description:H,supportedInterfaces:z.map((W)=>({url:String(W.location),protocolBinding:BQ,protocolVersion:String(W.version??iZ)})),...V?{provider:V}:{},version:U,capabilities:{streaming:!1,pushNotifications:!1,extendedAgentCard:!1,extensions:[...Z.extensions??[]]},defaultInputModes:wK($),defaultOutputModes:["text/plain","application/json"],skills:Y}}var SK=["mcp","cli","library"],EK=/^[a-z0-9][a-z0-9._-]*$/,bK=/^(@[a-z0-9~][a-z0-9-._~]*\/)?[a-z0-9~][a-z0-9-._~]*$/,yK=/^[A-Za-z0-9]([A-Za-z0-9._-]*[A-Za-z0-9])?$/,xK=/^[A-Za-z0-9][^\s]*$/,gK=/^[A-Za-z][A-Za-z0-9_-]{0,63}$/,vK=["a2a","mcp"],kK=/^(?=.{1,253}$)([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$/;function R($){return String($??"").trim()}function _8($){return Array.isArray($)?$.map(R).filter(Boolean):[]}function hK($){return R($).toLowerCase().replace(/^https?:\/\//,"").replace(/\/.*$/,"").replace(/^www\./,"")}function uK($,Z,Q){let z=["display_name","description","version"].filter((X)=>!R($[X]));if(z.length)throw Error(`Missing answer: ${z.join(", ")}`);if(!EK.test(Z))throw Error("Short name: lowercase letters, digits, dots, hyphens or underscores.");if(!kK.test(Q))throw Error(`Domain "${$.domain}" is not a domain name (e.g. example.com).`)}function fK($,Z){return($.skills??[]).filter((Q)=>R(Q.name)).map((Q)=>({name:R(Q.name),type:R(Q.type)||"tool",description:R(Q.description)||R(Q.name),tags:Z.length?Z:[R(Q.name).toLowerCase()]}))}function mK($){let Z=($.packages??[]).filter((Q)=>R(Q.registryType)&&R(Q.identifier));for(let Q of Z){let z=R(Q.registryType),X=R(Q.identifier);if(z==="npm"&&!bK.test(X))throw Error(`Package "${X}" is not an npm package name (e.g. weather-mcp or @acme/weather).`);if(z==="pypi"&&!yK.test(X))throw Error(`Package "${X}" is not a PyPI package name (e.g. weather-mcp or weather_mcp).`);if(z==="cargo"&&!gK.test(X))throw Error(`Package "${X}" is not a crate name (e.g. weather-mcp or weather_mcp).`);if(z!=="npm"&&z!=="pypi"&&z!=="cargo"&&!xK.test(X))throw Error(`Package "${X}" is not a ${z} package identifier: it must start with a letter or digit and have no spaces.`)}return Z.map((Q)=>({registryType:R(Q.registryType),identifier:R(Q.identifier),...R(Q.version)?{version:R(Q.version)}:{}}))}function IQ($){if(/\s/.test($))return!1;try{let Z=new URL($);return(Z.protocol==="http:"||Z.protocol==="https:")&&Z.hostname!==""}catch{return!1}}function pK($){if(!IQ(R($.url)))throw Error(`Where it runs: "${R($.url)}" is not an http(s) URL (or give an npm package).`);if(!vK.includes(R($.protocol).toLowerCase()))throw Error(`Protocol "${R($.protocol)}": a2a or mcp.`)}function lK($){let Z=R($.package_kind).toLowerCase()||"mcp";if(!SK.includes(Z))throw Error(`Kind "${R($.package_kind)}" is not one faf knows: mcp, cli or library.`);return Z}function cK($,Z){let Q=($.endpoints??[]).filter((H)=>R(H.url));Q.forEach(pK);let z=lK($),X=[...Q.map((H)=>({protocol:R(H.protocol).toLowerCase(),transport:"http",location:R(H.url)})),...Z.map((H)=>({protocol:z,transport:"stdio",location:H.identifier}))];if(X.length===0)throw Error("Missing answer: endpoints (a URL, or a package people install)");return X}function dK($,Z,Q,z){let X={domain:Z},H=[["repository",R($.repository)],["icon",R($.icon)],["organizationUrl",R($.organization_url)]];for(let[J,G]of H)if(G)X[J]=G;if(Q.length)X.keywords=Q;let U=_8($.example_requests);if(U.length)X.examples=U;if(z.length)X.packages=z;return X}function OQ($){let Z=R($.handle).toLowerCase(),Q=hK($.domain);uK($,Z,Q);let z=_8($.tags),X=mK($),H=R($.homepage);if(H&&!IQ(H))throw Error(`Homepage: "${H}" is not an http(s) URL.`);let U={name:Z,displayName:R($.display_name),id:`urn:air:${Q}:agent:${Z}`,...R($.organization)?{vendor:R($.organization)}:{},version:R($.version),description:R($.description),homepage:H||`https://${Q}`,...R($.license)?{license:R($.license)}:{}};return{version:DQ,agent:U,capabilities:fK($,z),endpoints:cK($,X),metadata:{cards:dK($,Q,z,X)}}}function _Q($){return q2($,{lineWidth:0})}function z$($){let Z=R($.agent?.id),Q=/^urn:air:([^:]+):/.exec(Z);if(Q)return Q[1];let z=R($.metadata?.cards?.domain);if(z)return z;try{return new URL(R($.agent?.homepage)).hostname.replace(/^www\./,"")}catch{throw Error("The .fafa names no domain (agent.id urn:air, metadata.cards.domain or agent.homepage).")}}function MQ($){let Z=R($.agent?.name).toLowerCase().replace(/[^a-z0-9._-]/g,"-").replace(/^-+|-+$/g,"");if(!Z)throw Error("The .fafa needs agent.name (the short name).");return Z}function rZ($){return`${z$($).split(".").reverse().join(".")}/${MQ($)}`}function dZ($){let Z=$.replace(/\s+/g," ").trim();return Z.length<=100?Z:`${Z.slice(0,97).trimEnd()}...`}function _2($){return($.endpoints??[]).filter((Z)=>R(Z.protocol).toLowerCase()==="mcp"&&/^https?:\/\//.test(R(Z.location))).map((Z)=>({type:"streamable-http",url:R(Z.location)}))}function iK($){if(!$)return;try{let Z=new URL($).hostname.replace(/^www\./,"");return{url:$,source:Z.split(".")[0]}}catch{return}}function PQ($){let Z=$.agent??{},Q=$.metadata?.cards??{},z=R(Z.description),X=R(Z.version);if(!z||!X)throw Error("An MCP card needs agent.description and agent.version in .fafa");let H={name:rZ($),version:X,description:dZ(z)},U=R(Z.displayName);if(U)H.title=dZ(U);let J=R(Z.homepage);if(J)H.websiteUrl=J;let G=iK(R(Q.repository));if(G)H.repository=G;if(R(Q.icon))H.icons=[{src:R(Q.icon)}];return H}function FQ($){return($.metadata?.cards?.packages??[]).map((Z)=>({registryType:R(Z.registryType),identifier:R(Z.identifier),...R(Z.version)?{version:R(Z.version)}:{},transport:{type:"stdio"}}))}function R8($){return($.endpoints??[]).some((Z)=>R(Z.protocol).toLowerCase()==="mcp")}function sZ($){return R8($)&&(_2($).length>0||FQ($).length>0)}function RQ($){let Z=R($.agent?.displayName);return{name:rZ($),...Z?{title:dZ(Z)}:{}}}function N8($,Z,Q={}){let z=_2($);if(z.length===0)throw Error("A Server Card describes a remote MCP server: the .fafa has no mcp endpoint at an http(s) URL.");return{$schema:P8,...PQ($),remotes:z,...Z?{_meta:{"one.faf/context":S0(Z,Q)}}:{}}}function NQ($,Z,Q={}){let z=_2($),X=FQ($);if(z.length===0&&X.length===0)throw Error("A registry entry needs a package people install or a remote MCP URL.");if(!R8($))throw Error("A registry entry describes an MCP server: the .fafa has no mcp endpoint.");return{$schema:qQ,...PQ($),...X.length?{packages:X}:{},...z.length?{remotes:z}:{},...Z?{_meta:I2(Z,Q)}:{}}}function nK($,Z,Q){if(!Z.includes("a2a")||O2($,Q).length===0)return;return Q.a2aCardUrl??`https://${z$($)}/.well-known/agent-card.json`}function T8($,Z,Q={}){let z=z$($),X=MQ($),H=$.agent??{},U=R(H.displayName)||R(H.name),J=R(H.description),G=R(H.version),V=Q.now??new Date().toISOString(),Y=(K,L,q)=>({identifier:`urn:air:${z}:${K}:${X}`,displayName:U,type:L,description:J,url:q,...G?{version:G}:{},updatedAt:V}),W=[],B=nK($,Z,Q);if(B)W.push(Y("a2a",cZ.a2a,B));if(Z.includes("server_card")){let K=_2($)[0];if(K)W.push(Y("mcp",cZ.server_card,`${K.url.replace(/\/+$/,"")}/server-card`))}if(Q.listFafa!==!1)W.push(Y("agent",cZ.fafa,`https://${z}/.well-known/fafa`));return W}function A8($){let Z=$.agent??{},Q=R(Z.vendor)||R(Z.displayName)||R(Z.name);if(!Q)return;let z;try{z=z$($)}catch{z=void 0}return{displayName:Q,...z?{identifier:z}:{}}}function TQ($,Z,Q={}){let z=A8($);return{specVersion:KQ,...z?{host:z}:{},entries:T8($,Z,Q)}}function oZ($){let Z=$.metadata?.cards??{},Q=_8(Z.keywords),z=_8(Z.examples);return{...Q.length?{tags:Q}:{},...z.length?{representativeQueries:z}:{}}}function AQ($,Z,Q={}){let z=A8($),X=oZ($);return{specVersion:KQ,...z?{host:z}:{},entries:T8($,Z,Q).map((H)=>({...H,...X}))}}function CQ($,Z){let Q=new Set(Z.cards),z={fafa:$,fafaText:_Q($)},{faf:X}=Z;if(Q.has("a2a")){let U=[...Z.a2aExtensions??[],...X?[nZ($,X,Z)]:[]];z.a2a=F8($,{extensions:U})}if(Q.has("server_card"))z.server_card=N8($,X,Z);if(Q.has("server_json"))z.server_json=NQ($,X,Z);let H={now:Z.now,listFafa:Z.listFafa};if(Q.has("ai_catalog"))z.ai_catalog=TQ($,Z.cards,H);if(Q.has("ard"))z.ard=AQ($,Z.cards,H);return z}function rK($,Z){return CQ(OQ($),Z)}var aK=P8,tK=/^[a-zA-Z0-9.-]+\/[a-zA-Z0-9._-]+$/;function jQ($){let Z=String($.project?.name??"project").trim();if(Z.includes("/")&&tK.test(Z))return Z;let Q=$.project?.homepage??$.project?.website??$.project?.url,z="local";if(Q)try{z=new URL(Q).hostname.replace(/^www\./,"").split(".").reverse().join(".")}catch{}let X=Z.replace(/[^a-zA-Z0-9._-]/g,"-").replace(/^-+|-+$/g,"")||"project";return`${z}/${X}`}function eK($){let Z=String($.project?.goal??$.context??$.project?.name??"MCP server").replace(/\s+/g," ").trim();if(!Z)return"MCP server";return Z.length<=100?Z:`${Z.slice(0,97).trimEnd()}...`}function Z6($,Z={}){let Q={$schema:aK,name:jQ($),version:String($.project?.version??"0.1.0"),description:eK($)},z=C8($)??$.project?.name;if(z&&z.length<=100)Q.title=z;let X=$.project?.homepage??$.project?.website??$.project?.url;if(X)Q.websiteUrl=X;if(Z.remoteUrl)Q.remotes=[{type:"streamable-http",url:Z.remoteUrl}];return Q._meta={"one.faf/context":S0($,Z)},Q}function tZ($){return jQ($)}function C8($){let Z=$.project?.title;if(typeof Z==="string"){let Q=Z.trim();if(Q&&Q.length<=100)return Q}return}function $D($){try{return JSON.parse(new TextDecoder().decode($).replace(/^\uFEFF/,""))}catch{return}}var aZ=($)=>typeof $==="object"&&$!==null&&!Array.isArray($);function wQ($){let Z=$D($);return aZ(Z)&&aZ(Z._meta)&&aZ(Z._meta["one.faf/context"])}function ZD($,Z,Q={},z={}){let X=Z6(Z,Q),H=sK($,"server-card");return $6(H,`${JSON.stringify(X,null,2)}
|
|
250
|
+
`,{root:$,format:"json",hasMark:wQ,mark:'FAF context-block (`_meta["one.faf/context"]`)',force:z.force}),H}function QD($,Z){let Q={name:Z.name,title:Z.title,version:Z.version,_meta:Z.meta};return e$($,Q,{"":{name:["$schema"],title:["name"],version:["description","title","name"]}})}var zD=oK(Z6,"faf-cli: generateServerCard is deprecated, use buildServerCard","FAF0002");import{existsSync as SQ}from"fs";import{basename as XD,dirname as bQ,join as EQ}from"path";import{deprecate as HD}from"node:util";var UD=["a2a","mcp","registry","catalog","ard"];function JD($){return m0(Z0(h(bQ($),XD($))))}function GD($=process.cwd()){let Z=["agent.fafa",".fafa"];for(let z of Z){let X=EQ($,z);if(SQ(X))return X}let Q=bQ($);if(Q!==$)for(let z of Z){let X=EQ(Q,z);if(SQ(X))return X}return null}function eZ($,Z,Q={}){if(O2($,Q).length===0)throw Error("No A2A endpoint in .fafa (need endpoints[].protocol: a2a + location). Will not invent a door.");return F8($,{doorUrl:Q.doorUrl,extensions:Z?[nZ($,Z,Q)]:[]})}var VD=HD(eZ,"faf-cli: generateA2ACard is deprecated, use buildA2ACard","FAF0003");function YD($,Z={},Q={}){return T8($,["a2a","server_card"],{now:Q.now??Z.generated??new Date().toISOString(),a2aCardUrl:Q.a2aCardUrl,doorUrl:Q.doorUrl})}function WD($,Z){return $.findIndex((Q)=>Q.identifier===Z.identifier)}function BD($,Z,Q){let z=$?{...$,entries:[...$.entries??[]]}:{specVersion:"1.0",entries:[]},X=Q&&z.host===void 0?(({specVersion:H,...U})=>({specVersion:H,host:{...Q},...U}))(z):z;for(let H of Z){let U=WD(X.entries,H);if(U>=0)X.entries[U]={...X.entries[U],url:H.url,type:H.type,...H.updatedAt?{updatedAt:H.updatedAt}:{}};else X.entries.push(H)}return X}var qD="no mcp endpoint in agent.fafa";function KD($){return $!==void 0&&!R8($)}function DD($,Z={}){return[...O2($,Z).length>0?["a2a"]:[],..._2($).length>0?["mcp"]:[],...sZ($)?["registry"]:[],"catalog","ard"]}function LD($){let Z=$.opts??{},Q=$.faf,z=$.fafa,X=KD(z),H=$.targets?.filter((V)=>V==="mcp"||V==="registry")??[];if(X&&H.length)throw Error(`${H.join(", ")}: ${qD} — these cards describe an MCP server.`);let U=(Q?UD:z?DD(z,Z):[]).filter((V)=>!X||V!=="mcp"&&V!=="registry"),J=new Set($.targets?.length?$.targets:U),G={};if(Q)G.block=S0(Q,Z);if(J.has("mcp"))if(z&&_2(z).length>0)G.mcp=N8(z,Q,Z);else if(Q)G.mcp=Z6(Q,Z);else throw Error("A Server Card needs an MCP endpoint at an http(s) URL in the .fafa, or a project.faf.");if(J.has("registry"))if(z&&sZ(z))G.registry={...RQ(z),...Q?{_meta:I2(Q,Z)}:{}};else if(Q){let V=C8(Q);G.registry={name:tZ(Q),...V?{title:V}:{},_meta:I2(Q,Z)}}else throw Error("A registry entry needs a package or a remote MCP URL in the .fafa, or a project.faf.");if(J.has("a2a")||J.has("catalog")||J.has("ard")){if(!$.fafa){if($.targets?.some((V)=>V==="a2a"||V==="catalog"||V==="ard"))throw Error("A2A/catalog/ARD require a .fafa (agent.fafa). Will not invent an agent.")}}if(J.has("a2a")&&$.fafa)if(O2($.fafa,Z).length===0){if($.targets?.includes("a2a"))throw Error("No A2A endpoint in .fafa (need endpoints[].protocol: a2a + location). Will not invent a door.")}else G.a2a=eZ($.fafa,Q,Z);if((J.has("catalog")||J.has("ard"))&&$.fafa){let V=YD($.fafa,Q,Z);if(J.has("catalog"))G.catalog=V;if(J.has("ard")){let W=oZ($.fafa);G.ard=V.map((B)=>({...B,...W}))}let Y=A8($.fafa);if(Y)G.catalogHost=Y}return ID(G),G}function ID($){if(!$.block)return;let Z=JSON.stringify($.block),Q=[];if($.mcp){let z=$.mcp._meta;Q.push(JSON.stringify(z["one.faf/context"]))}if($.registry?._meta){let z=$.registry._meta["io.modelcontextprotocol.registry/publisher-provided"];Q.push(JSON.stringify(z["one.faf/context"]))}for(let z of Q)if(z!==Z)throw Error("context block drifted across card targets — one projector, one block");if($.a2a){let z=$.a2a.capabilities.extensions?.find((U)=>U.uri===Q$);if(!z)throw Error("A2A card has no FAF context extension, but a project.faf was given");let X=z.params,H=$.block;if(X.provenance?.faf!==H.faf||X.provenance?.mediaType!==H.mediaType)throw Error("A2A extension provenance drifted from the context block — one context, every door")}}var $1=["ephemeral","standard","high","critical"],z2=Object.fromEntries($1.map(($,Z)=>[$,Z])),j8=new Set(["user","feedback","project","reference"]),Z1=new Set(["version","profile","namepoint","created","last_etched","retention","index","memory"]),Q1=new Set(["facts","sessions","preferences","custom"]),z1={low:"ephemeral",medium:"standard"};import{existsSync as OD}from"fs";import{dirname as hQ,resolve as uQ}from"path";function M2(){return new Date().toISOString().replace(/\.\d{3}Z$/,"Z")}function f($){return $===null||$===void 0}function _D($){if(Array.isArray($))return`a list (${$.length} item${$.length===1?"":"s"})`;if(f($))return"empty";if(typeof $==="string")return`a string (${JSON.stringify($.length>40?`${$.slice(0,40)}…`:$)})`;return`a ${typeof $}`}var H$=($)=>typeof $==="object"&&$!==null&&!Array.isArray($);function MD($){let Z=uQ($),Q=h(hQ(Z),Z,{read:!0});return{real:Q,text:Z0(Q)}}function yQ($,Z,Q,z){let X=uQ($),H=h(hQ(X),X),U=Q!==void 0&&Q.real===H;if(U&&Q.text===Z)return H;let J;try{J=I0(H)}catch{J=void 0}if(J&&J.equals(Buffer.from(Z,"utf-8")))return H;if(!U&&!z&&J)throw new b("changed",X,`${X} already exists — not written; pass { replace: true } (faf memory convert --force) to replace it`,{onWrite:!0});let G=U?Q.text:z?J:null;return e($,Z,G===void 0?{}:{expect:G})}function U$($){if(f($))return"standard";if(z1[$])return z1[$];if($ in z2)return $;return"standard"}var PD=new Set(["text","id","type","priority","tags","links","timestamp","source"]);function X1($){if(typeof $==="string")return{text:$,id:null,type:null,priority:"standard",tags:[],links:[],timestamp:null,source:null,extra:{}};if(!$||typeof $!=="object"||!("text"in $))throw Error(`fact must be a string or a mapping with 'text': ${JSON.stringify($)}`);let Z=$,Q={};for(let[z,X]of Object.entries(Z))if(!PD.has(z))Q[z]=X;return{text:String(Z.text),id:Z.id??null,type:Z.type??null,priority:U$(Z.priority),tags:Array.isArray(Z.tags)?Z.tags.slice():[],links:Array.isArray(Z.links)?Z.links.slice():[],timestamp:Z.timestamp??null,source:Z.source??null,extra:Q}}function X$($){if(f($.id)&&f($.type)&&$.tags.length===0&&$.links.length===0&&f($.timestamp)&&f($.source)&&Object.keys($.extra).length===0&&$.priority==="standard")return $.text;let Q={text:$.text};if(!f($.id))Q.id=$.id;if(!f($.type))Q.type=$.type;if(Q.priority=$.priority,$.tags.length)Q.tags=$.tags;if($.links.length)Q.links=$.links;if(!f($.timestamp))Q.timestamp=$.timestamp;if(!f($.source))Q.source=$.source;return Object.assign(Q,$.extra),Q}function xQ($){let Z=$;return H$($)&&typeof Z.text==="string"&&Array.isArray(Z.tags)&&Array.isArray(Z.links)&&H$(Z.extra)&&typeof Z.priority==="string"?Z:X1($)}function FD($){if(typeof $==="string"||H$($)&&"text"in $)return X1($);return null}var gQ=["profile","namepoint","created","last_etched","retention"];class Y0{namepoint;profile;retention;created;last_etched;_facts;_byId;_index;_sessions;_preferences;_custom;_extra;_memoryExtra;_version;_origin;_factAt=new WeakMap;_indexDerived=!0;_indexAtRecord=[];constructor($,Z={}){this.namepoint=$,this.profile=Z.profile??"knowledge",this.retention=Z.retention??"forever",this.created=Z.created??M2(),this.last_etched=this.created,this._facts=Z.facts?Z.facts.map(xQ):[],this._byId=new Map,this._facts.forEach((Q,z)=>{if(!f(Q.id))this._byId.set(Q.id,z)}),this._index=Z.index?Z.index.slice():[],this._sessions=Z.sessions?structuredClone(Z.sessions):[],this._preferences=Z.preferences?{...Z.preferences}:{},this._custom=Z.custom?{...Z.custom}:{},this._extra=Z.extra?{...Z.extra}:{},this._memoryExtra=Z.memoryExtra?{...Z.memoryExtra}:{},this._indexDerived=Z.index===void 0||l(this._index,this.derivedIndex()),this._indexAtRecord=this._index.slice()}get facts(){return this._facts}get index(){return this._index}get sessions(){return this._sessions}get preferences(){return this._preferences}get custom(){return this._custom}get extra(){return this._extra}get memoryExtra(){return this._memoryExtra}static load($){if(!OD($))throw Error(`soul file not found: ${$}`);let{real:Z,text:Q}=MD($);return Y0.fromText(Q,$,Z)}static fromText($,Z,Q){let z=wZ($,Z).toJS();if(!H$(z))throw Error(`soul is not a YAML mapping: ${Z} is ${_D(z)}`);let X=new fQ,H=X.pick("memory",z.memory,u)??{},U=new Y0(String(z.namepoint??Z.replace(/.*\//,"").replace(/\.fafm$/,"")),{profile:String(z.profile??"voice"),retention:String(z.retention??"forever"),created:z.created??null,...X.modelled(z,H)});return(X.pick("memory.facts",H.facts,Array.isArray)??[]).forEach((J,G)=>{let V=FD(J);if(V)U.adopt(V,G)}),U.last_etched=String(z.last_etched??U.created),U._version=f(z.version)?void 0:String(z.version),U._origin={path:Z,real:Q,text:$,base:U.state(),residual:X.residual},U.recordIndex(),U}recordIndex(){this._indexDerived=this.indexIsDerived(),this._indexAtRecord=this._index.slice()}adopt($,Z){if(this._facts.push($),!f($.id))this._byId.set($.id,this._facts.length-1);this._factAt.set($,Z)}static fromFile($){return Y0.load($)}toDoc(){let $={facts:this._facts.map(X$),sessions:structuredClone(this._sessions),preferences:structuredClone(this._preferences),custom:structuredClone(this._custom)};for(let[Q,z]of Object.entries(this._memoryExtra))if(!Q1.has(Q))$[Q]=structuredClone(z);let Z={version:this._version??"1.1",profile:this.profile,namepoint:this.namepoint,created:this.created,last_etched:this.last_etched,retention:this.retention,index:this._index.slice(),memory:$};for(let[Q,z]of Object.entries(this._extra))if(!Z1.has(Q))Z[Q]=structuredClone(z);return Z}toYaml(){return q2(this.toDoc(),{lineWidth:100})}derivedIndex($=80){return this._facts.map((Z)=>`${Z.id??"?"} — ${String(Z.text).slice(0,$)}`)}indexIsDerived($=80){return!this._origin?.residual.has("index")&&l(this._index,this.derivedIndex($))}rebuildIndex($=80){return this._index=this.derivedIndex($),this._indexDerived=!0,this._indexAtRecord=this._index.slice(),this._index}save($,Z={}){let Q=Z.reindex??(this._indexDerived&&l(this._index,this._indexAtRecord));if(Q)this.rebuildIndex();let z=Z.replace===!0,X=this._origin;if(!X){let G=this.toYaml(),V=yQ($,G,void 0,z);return this.settle($,G,new Map(this._facts.map((Y,W)=>[Y,W])),V),$}let H=new Map,{text:U}=q8(X.text,(G)=>{H=this.applyTo(G,X,Q)},$),J=yQ($,U,X.real===void 0?void 0:{real:X.real,text:X.text},z);return this.settle($,U,H,J),$}toFile($,Z={}){return this.save($,Z)}settle($,Z,Q,z){this._factAt=new WeakMap;for(let[X,H]of Q)this._factAt.set(X,H);this._origin={path:$,real:z,text:Z,base:this.state(),residual:this._origin?.residual??new Map},this.recordIndex()}state(){let $=new Map;for(let Z of this._facts){let Q=this._factAt.get(Z);if(Q!==void 0)$.set(Q,structuredClone(X$(Z)))}return{top:Object.fromEntries(gQ.map((Z)=>[Z,this[Z]])),index:this._index.slice(),sessions:structuredClone(this._sessions),preferences:structuredClone(this._preferences),custom:structuredClone(this._custom),extra:structuredClone(this._extra),memoryExtra:structuredClone(this._memoryExtra),facts:$}}static refuse($,Z,Q){throw Error(`${$.path}: ${Z} is ${$.residual.get(Z)} in the file, not the shape faf writes — `+`faf keeps it as it is and will not ${Q}. Nothing written.`)}applyTo($,Z,Q){let z=Z.base,X=this.state(),H=Z.path;for(let U of gQ)if(z.top[U]!==X.top[U])$.set(U,X.top[U]);if(!l(z.index,X.index)){if(Z.residual.has("index")&&!Q)Y0.refuse(Z,"index","replace it");D8($,["index"],Z.residual.has("index")?void 0:z.index,X.index,H)}for(let U of kQ(z.extra,X.extra))D8($,[U],z.extra[U],X.extra[U],H);return this.applyMemory($,Z,z,X),this.applyFacts($,Z)}applyMemory($,Z,Q,z){let X=[["sessions",Q.sessions,z.sessions],["preferences",Q.preferences,z.preferences],["custom",Q.custom,z.custom],...kQ(Q.memoryExtra,z.memoryExtra).map((H)=>[H,Q.memoryExtra[H],z.memoryExtra[H]])];for(let[H,U,J]of X){if(l(U,J))continue;if(Z.residual.has("memory"))Y0.refuse(Z,"memory",`change memory.${H}`);if(Z.residual.has(`memory.${H}`))Y0.refuse(Z,`memory.${H}`,"replace it");D8($,["memory",H],U,J,Z.path)}}sortFacts($){let Z=[],Q=[];for(let z of this._facts){let X=this._factAt.get(z);if(X===void 0){Q.push(z);continue}if(Q.length>0||Z.length>0&&X<=Z[Z.length-1][1])throw Error(`${$.path}: the facts were reordered — faf keeps the order soul.fafm has. Nothing written.`);Z.push([z,X])}return{kept:Z,added:Q}}applyFacts($,Z){let{kept:Q,added:z}=this.sortFacts(Z),X=new Set(Q.map(([,V])=>V)),H=[...Z.base.facts.keys()].filter((V)=>!X.has(V)).sort((V,Y)=>Y-V),U=Q.filter(([V,Y])=>!l(Z.base.facts.get(Y),X$(V))),J=new Map(Q);if(z.length===0&&H.length===0&&U.length===0)return J;for(let V of["memory","memory.facts"])if(Z.residual.has(V))Y0.refuse(Z,V,"add facts to it");let G=y9($,["memory","facts"],Z.path);for(let[V,Y]of U)G.items[Y]=ND($,G.items[Y],Z.base.facts.get(Y),X$(V));for(let V of H)G.items.splice(V,1);for(let[V,Y]of Q)J.set(V,Y-H.filter((W)=>W<Y).length);for(let V of z)J.set(V,G.items.length),G.items.push($.createNode(X$(V)));return J}add($){let Z=xQ($);if(!f(Z.id)&&this._byId.has(Z.id)){let Q=this._byId.get(Z.id);if(Q!==void 0){let z=this._factAt.get(this._facts[Q]);if(this._facts[Q]=Z,z!==void 0)this._factAt.set(Z,z)}}else if(this._facts.push(Z),!f(Z.id))this._byId.set(Z.id,this._facts.length-1);if(Z.timestamp&&Z.timestamp>(this.last_etched||""))this.last_etched=Z.timestamp;return Z}etch($,Z={}){let Q=f(Z.id)?null:this.getFact(Z.id);if(Q)return this.add(RD(Q,$,Z));return this.add({text:$,id:Z.id??null,type:Z.type??null,priority:U$(Z.priority),tags:Z.tags?Z.tags.slice():[],links:Z.links?Z.links.slice():[],timestamp:M2(),source:Z.source??null,extra:{}})}recall($,Z={}){let Q=H$($)?{...$,...Z}:Z,z=H$($)?$.query:$,X=z2[U$(Q.minPriority??"ephemeral")]??0,H=typeof z==="string"?z.toLowerCase():"",U=new Set(Q.tags??[]),J=[];this._facts.forEach((V,Y)=>{if(H&&!String(V.text??"").toLowerCase().includes(H))return;if(U.size>0&&![...U].some((W)=>(V.tags??[]).includes(W)))return;if(!f(Q.type)&&V.type!==Q.type)return;if((z2[V.priority]??1)<X)return;J.push([Y,V])}),J.sort((V,Y)=>{let W=z2[V[1].priority]??1,B=z2[Y[1].priority]??1;if(B!==W)return B-W;let K=V[1].timestamp??"",L=Y[1].timestamp??"";if(L!==K)return L<K?-1:L>K?1:0;return Y[0]-V[0]});let G=J.map(([,V])=>V);if(!f(Q.limit))return G.slice(0,Q.limit);return G}getFact($){let Z=this._byId.get($);return Z===void 0?null:this._facts[Z]}deleteFact($){let Z=this._byId.get($);if(Z===void 0)return!1;return this._facts.splice(Z,1),this._byId.clear(),this._facts.forEach((Q,z)=>{if(!f(Q.id))this._byId.set(Q.id,z)}),!0}}function RD($,Z,Q){let z=(X,H)=>f(X)?H:X;return{...$,text:Z,type:z(Q.type,$.type),priority:f(Q.priority)?$.priority:U$(Q.priority),tags:z(Q.tags,$.tags).slice(),links:z(Q.links,$.links).slice(),source:z(Q.source,$.source),timestamp:M2(),extra:{...$.extra}}}class fQ{residual=new Map;pick($,Z,Q){if(f(Z))return;if(Q(Z))return Z;this.residual.set($,d$(Z));return}modelled($,Z){return{index:(this.pick("index",$.index,Array.isArray)??[]).map(String),sessions:this.pick("memory.sessions",Z.sessions,Array.isArray)??[],preferences:structuredClone(this.pick("memory.preferences",Z.preferences,u)??{}),custom:structuredClone(this.pick("memory.custom",Z.custom,u)??{}),extra:vQ($,Z1),memoryExtra:vQ(Z,Q1)}}}function vQ($,Z){let Q={};for(let[z,X]of Object.entries($))if(!Z.has(z))Q[z]=structuredClone(X);return Q}function kQ($,Z){return[...new Set([...Object.keys($),...Object.keys(Z)])]}function ND($,Z,Q,z){if(!p(Z))return o$($,Z,Q,z);let X=(H)=>typeof H==="string"?{text:H}:H;return o$($,Z,X(Q),X(z))}import{readdirSync as TD,readFileSync as AD,statSync as mQ,existsSync as CD}from"fs";import{join as jD,basename as pQ,resolve as wD}from"path";var lQ=new Set(["MEMORY.md","MEMORY-FULL.md","README.md"]),SD=/\[\[([^\]]+)\]\]/g;function ED($){let Z=mQ($).mtimeMs;return new Date(Z).toISOString().replace(/\.\d{3}Z$/,"Z")}function bD($){if(!$.startsWith("---"))return{fm:null,body:$};let Z=$.split("---");if(Z.length<3)return{fm:null,body:$};try{let Q=m0(Z[1]);if(!Q||typeof Q!=="object")return{fm:null,body:Z.slice(2).join("---").trim()};return{fm:Q,body:Z.slice(2).join("---").trim()}}catch{return{fm:null,body:$}}}function yD($,Z,Q){if(!Q.name)return null;let z=Q.metadata&&typeof Q.metadata==="object"?Q.metadata:{},X=z.type;if(typeof X!=="string"||!j8.has(X))return null;let H=String(Q.name).trim(),J=(Q.description!==void 0&&Q.description!==null&&String(Q.description).trim()?String(Q.description).trim():"")||H,G={};if(z.originSessionId)G.provenance=[`session:${z.originSessionId}`];let V=[...new Set([...Z.matchAll(SD)].map((Y)=>Y[1]))].sort();return{text:J,id:H,type:X,priority:"standard",tags:[],links:V,timestamp:ED($),source:`claude-code memory: ${pQ($)}`,extra:G}}function cQ($,Z={}){let Q=wD($);if(!CD(Q))throw Error(`Claude memory directory not found: ${Q}`);if(!mQ(Q).isDirectory())throw Error(`Claude memory path is not a directory: ${Q}`);let z=Z.skip??lQ,X=Z.namepoint??`@claude-code:${pQ(Q)}`,H=[],U=TD(Q).filter((W)=>W.endsWith(".md")).sort();for(let W of U){if(z.has(W))continue;let B=jD(Q,W),K;try{K=AD(B,"utf-8")}catch{continue}let{fm:L,body:q}=bD(K);if(!L)continue;let D=yD(B,q,L);if(D)H.push(D)}let J=H.map((W)=>W.timestamp).filter(Boolean),G=J.length?J.reduce((W,B)=>W<B?W:B):M2(),V=J.length?J.reduce((W,B)=>W>B?W:B):G,Y=new Y0(X,{profile:"knowledge",facts:H,created:G});return Y.last_etched=V,Y.rebuildIndex(),Y}var sQ="faf-interview/1",J$="(terse — 3-4 words)",H1=[{path:"project.name",question:"What is the name of this project?",header:"Name",type:"text",required:!0},{path:"project.goal",question:"What does this project do? (one sentence)",header:"Goal",type:"text",required:!0},{path:"human_context.who",question:`Who is this for? ${J$}`,header:"Who",type:"text",required:!0},{path:"human_context.what",question:`What are they building? ${J$}`,header:"What",type:"text",required:!0},{path:"human_context.why",question:`Why does it exist? ${J$}`,header:"Why",type:"text",required:!0},{path:"human_context.where",question:`Where does it run or ship? ${J$}`,header:"Where",type:"text",required:!0},{path:"human_context.when",question:`When — timeline or stage? ${J$}`,header:"When",type:"text",required:!0},{path:"human_context.how",question:`How is it built or used? ${J$}`,header:"How",type:"text",required:!0}],oQ=[{path:"project.main_language",question:"What is the primary programming language?",header:"Language",type:"select",required:!0,options:[{label:"TypeScript",value:"TypeScript",description:"JavaScript with types"},{label:"JavaScript",value:"JavaScript",description:"Vanilla JS or Node.js"},{label:"Python",value:"Python",description:"Python 3.x"},{label:"Rust",value:"Rust",description:"Systems programming"},{label:"Go",value:"Go",description:"Golang"},{label:"Other",value:"Other",description:"Specify manually"}]},{path:"stack.frontend",question:"What frontend framework does it use?",header:"Frontend",type:"select",required:!1,options:[{label:"React",value:"React",description:"React.js"},{label:"Vue",value:"Vue",description:"Vue.js"},{label:"Svelte",value:"Svelte",description:"Svelte/SvelteKit"},{label:"Next.js",value:"Next.js",description:"React framework"},{label:"None",value:"None",description:"No frontend"},{label:"Other",value:"Other",description:"Specify manually"}]},{path:"stack.backend",question:"What backend framework does it use?",header:"Backend",type:"select",required:!1,options:[{label:"Express",value:"Express",description:"Node.js Express"},{label:"Fastify",value:"Fastify",description:"Node.js Fastify"},{label:"Django",value:"Django",description:"Python Django"},{label:"FastAPI",value:"FastAPI",description:"Python FastAPI"},{label:"None",value:"None",description:"No backend"},{label:"Other",value:"Other",description:"Specify manually"}]},{path:"stack.database",question:"What database does it use?",header:"Database",type:"select",required:!1,options:[{label:"PostgreSQL",value:"PostgreSQL",description:"Postgres"},{label:"MySQL",value:"MySQL",description:"MySQL/MariaDB"},{label:"SQLite",value:"SQLite",description:"Embedded SQL"},{label:"MongoDB",value:"MongoDB",description:"Document store"},{label:"None",value:"None",description:"No database"},{label:"Other",value:"Other",description:"Specify manually"}]},{path:"stack.runtime",question:"What runtime does it run on?",header:"Runtime",type:"text",required:!1},{path:"stack.hosting",question:"Where is it hosted or distributed?",header:"Hosting",type:"text",required:!1},{path:"stack.build",question:"What is the build tool?",header:"Build",type:"text",required:!1},{path:"stack.cicd",question:"What CI/CD does it use?",header:"CI/CD",type:"text",required:!1}],G$=[...H1,...oQ],aQ=new Map(G$.map(($)=>[$.path,$])),xD=Object.fromEntries(G$.map(($)=>[$.path,$]));function U1($){let Z=aQ.get($);if(Z)return Z.question;let Q=g0.get($)??m.find((z)=>z.canonical===$);return Q?`${Q.description}?`.replace(/\?\?$/,"?"):`${$}?`}function gD($,Z){return G$.filter((Q)=>{let z=Q.path.split("."),X=$;for(let H of z)if(X&&typeof X==="object"&&H in X)X=X[H];else{X=void 0;break}if(X==="slotignored")return!1;return Z(X)})}var vD=new Set(["developers","development teams","development team","teams","development","cloud platform","web platform","platform","best practices","improve development efficiency","development efficiency","modern development practices","modern development","test-driven development","production/stable","production","stable","app","project","tool"]),kD=[["npm",/\bnpm\b/i],["PyPI",/\bpypi\b/i],["crates.io",/\bcrates\.io\b/i],["Homebrew",/\bhomebrew\b/i],["Docker",/\bdocker\b/i],["Cloudflare",/\bcloudflare\b/i],["Vercel",/\bvercel\b/i],["Netlify",/\bnetlify\b/i],["AWS",/\baws\b/i],["Cloud Run",/\bcloud run\b/i],["edge",/\bedge\b/i],["browser",/\bbrowser\b/i],["WASM",/\bwasm\b/i],["GitHub",/\bgithub\b/i],["MCP Registry",/\bmcp registry\b/i],["Chrome Web Store",/\bchrome web store\b/i],["Smithery",/\bsmithery\b/i]],dQ=($)=>vD.has($.toLowerCase().trim()),hD=/^(?:with|and|or|using|for|to|that|who|whom|whose|the|a|an|in|on|of|via|by|&)$/i;function iQ($,Z=5){let Q=$.trim().split(/\s+/).filter(Boolean).slice(0,Z);while(Q.length&&hD.test(Q[Q.length-1].replace(/[.,;:]+$/,"")))Q.pop();return Q.join(" ")}function tQ($){let Z={};if(!$||typeof $!=="string")return Z;let Q=$.trim(),z=Q.replace(/^[^A-Za-z0-9]+/,"").split(/\s+(?:for|that|which|to)\s+|\s+[—–]\s+|\s-\s|:\s|\.\s|,\s/)[0].trim(),X=iQ(z);if(X.split(/\s+/).filter(Boolean).length>=2&&!dQ(X))Z.what=X;let H=kD.filter(([,G])=>G.test(Q)).map(([G])=>G);if(H.length)Z.where=H.slice(0,4).join(", ");let U=Q.match(/\bfor ((?:[A-Za-z][\w./+-]* )?(?:any |all )?(?:developers?|teams?|engineers?|builders?|users?|integrators?)\b[^.,;:—]*)/i),J=iQ((U?.[1]||"").trim().replace(/\s+/g," "));if(J&&!dQ(J))Z.who=J;return Z}function nQ($,Z){let Q=$;for(let z of Z.split("."))if(Q&&typeof Q==="object"&&z in Q)Q=Q[z];else return;return Q}function rQ($){if(typeof $!=="string")return!1;let Z=$.trim();if(!Z||Z==="slotignored")return!1;return!o(Z)}function uD($,Z={}){let Q=$&&typeof $==="object"?$:{},z=nQ(Q,"project.goal"),X=(rQ(z)?String(z).trim():"")||(Z.goal??"").trim(),H=tQ(X),U=Z.detailed??{},J={"project.goal":X||void 0,"human_context.what":H.what,"human_context.where":H.where,"human_context.who":H.who},G=(K)=>{let L=J[K];if(L)return{value:L,source:"project goal",confidence:0.9};let q=K.startsWith("human_context.")?K.slice(14):"",D=q?U[q]:void 0;return D?{value:D.value,source:D.source,confidence:D.confidence}:void 0},V=H1.map((K,L)=>{let q={n:L+1,path:K.path,header:K.header,question:K.question},D=nQ(Q,K.path);if(rQ(D))return{...q,value:String(D).trim(),status:"filled",seeded:!1};let O=G(K.path);if(O)return{...q,value:O.value,status:"seeded",seeded:!0,source:O.source,confidence:O.confidence};return{...q,value:"",status:"empty",seeded:!1}}),Y=V.filter((K)=>K.status==="filled").length,W=V.filter((K)=>K.status==="seeded").length,B=V.filter((K)=>K.status==="empty").length;return{version:sQ,rows:V,filledCount:Y,seededCount:W,emptyCount:B,complete:B===0}}function w8($){if($===null||$===void 0)return!0;if(typeof $==="string"){let Z=$.trim();return Z===""||o(Z)}return!1}function fD($,Z){let Q=$;for(let z of Z.split("."))if(Q&&typeof Q==="object"&&z in Q)Q=Q[z];else return;return Q}function eQ($){if($==="project.goal")return!0;return g0.get($)?.category==="human"}function $3($,Z=w8){let Q=[],z=[];for(let X of G$){let H=fD($,X.path);if(H==="slotignored")continue;if(!Z(H))continue;(eQ(X.path)?Q:z).push(X.path)}return{human:Q,sourceable:z}}function Z3($,Z,Q=w8){let z=$3(Z,Q),X;if($>=100||z.human.length===0&&z.sourceable.length===0)X="done";else if(z.sourceable.length>0)X="can-source";else X="needs-human";let H=X==="needs-human"?J1(z):[];return{status:X,score:$,gaps:z,ask:H}}function J1($){return $.human.map((Z)=>({path:Z,question:U1(Z)}))}function mD($,Z={}){let Q=Math.max(1,Z.maxRounds??5),z=Z.isEmpty??w8,X=[],H=0;for(let J=0;J<=Q;J++){let G=$.read();if(!G)return{status:"no-faf",score:0,rounds:H,history:X,ask:[]};let V=$.score(G.yaml);X.push(V);let Y=Z3(V,G.data,z);if(Y.status==="done")return{status:"done",score:V,rounds:H,history:X,ask:[]};if(Y.status==="needs-human")return{status:"needs-human",score:V,rounds:H,history:X,ask:Y.ask};if(X.length>=2&&V<=X[X.length-2])return Y.gaps.human.length?{status:"needs-human",score:V,rounds:H,history:X,ask:J1(Y.gaps)}:{status:"stuck",score:V,rounds:H,history:X,ask:[]};if(H>=Q)return{status:"capped",score:V,rounds:H,history:X,ask:J1(Y.gaps)};$.runAuto(),H++}return{status:"capped",score:X[X.length-1]??0,rounds:H,history:X,ask:[]}}import{createHash as z3}from"crypto";var G1="faf-bench/1",pD={"project.name":"What is the project's name?","project.goal":"What is the project's goal — what is it for?","project.main_language":"What is the primary programming language?","human_context.who":"Who is this project for?","human_context.what":"What are they building?","human_context.why":"Why does this project exist?","human_context.where":"Where does it run or get distributed?","human_context.when":"When — what is the project's timeline or stage?","human_context.how":"How is it built or used?"};function lD($,Z){return pD[$]??`What is the project's ${Z.replace(/\s*\(.*\)$/,"").toLowerCase()}?`}var X3=[["typescript","ts"],["javascript","js"],["python","py","python3"],["node","nodejs","node js","node.js"],["github actions","gh actions","actions"],["postgresql","postgres","pg"],["kubernetes","k8s"],["npm","npm registry"],["cloudflare workers","cf workers","workers"],["google cloud run","cloud run","gcp cloud run"]],Q6=new Map;X3.forEach(($,Z)=>$.forEach((Q)=>Q6.set(Q,Z)));var cD=new Set(["a","an","the","and","or","of","for","to","in","on","with","is","it","its","their","your","via","by","using","use","used"]);function S8($){return $.toLowerCase().replace(/[^a-z0-9\s.+#-]/g," ").replace(/\.(?=\s|$)/g," ").replace(/\s+/g," ").trim()}function Q3($){return S8($).split(" ").filter((Z)=>Z&&!cD.has(Z))}function H3($,Z){let Q=S8($),z=S8(Z);if(!Q||!z)return!1;if(Q===z)return!0;let X=Q6.get(Q);if(X!==void 0&&Q6.get(z)===X)return!0;let H=Q3($);if(H.length===0)return!1;let U=new Set(Q3(Z));return H.every((J)=>{if(U.has(J))return!0;let G=Q6.get(J);return G!==void 0&&[...U].some((V)=>Q6.get(V)===G)})}function dD($){let Z=H5($),Q=m0($),z=[],X={},H=0;for(let G of m){if(Z.slots[G.path]!=="populated")continue;let V=u1(Q,G);if(typeof V!=="string")continue;let Y=V.trim();if(!Y||D6.has(Y.toLowerCase()))continue;H+=1,z.push({n:H,path:G.path,question:lD(G.path,G.description)}),X[H]=Y}let U=JSON.stringify({v:G1,q:z.map((G)=>[G.path,G.question])}),J=z3("sha256").update(U).digest("hex").slice(0,12);return{version:G1,qsetHash:J,questions:z,answers:X}}function iD($){return{version:$.version,qsetHash:$.qsetHash,questions:$.questions}}function nD($,Z){let Q=$.questions.map((X)=>{let H=Z[String(X.n)]??Z[X.path]??"";return{n:X.n,path:X.path,ok:typeof H==="string"&&H.trim()!==""&&H3($.answers[X.n],H)}}),z=$.questions.filter((X)=>!Q[X.n-1].ok);return{correct:Q.filter((X)=>X.ok).length,total:$.questions.length,misses:z,perQuestion:Q}}function rD($,Z){let Q=JSON.stringify({v:$.version,repo:Z??null,qset:$.qsetHash,protocol:$.protocol,cold:$.cold??null,faf:$.faf??null});return{projection:Q,hash:z3("sha256").update(Q).digest("hex")}}import{join as MI,extname as PI,resolve as FI}from"path";var V1={"package.json":{frameworks:["Node.js","JavaScript","TypeScript"],slots:{packageManager:"npm/yarn/pnpm",mainLanguage:"JavaScript/TypeScript"},priority:35,intelligence:"ultra-high"},"README.md":{frameworks:[],slots:{},priority:25,intelligence:"high"},"requirements.txt":{frameworks:["Python"],slots:{packageManager:"pip",mainLanguage:"Python"},priority:35,intelligence:"ultra-high"},Pipfile:{frameworks:["Python"],slots:{packageManager:"pipenv",mainLanguage:"Python"},priority:35,intelligence:"ultra-high"},"pyproject.toml":{frameworks:["Python"],slots:{mainLanguage:"Python",runtime:"Python"},priority:36,intelligence:"ultra-high"},Gemfile:{frameworks:["Ruby"],slots:{packageManager:"bundler",mainLanguage:"Ruby"},priority:35,intelligence:"ultra-high"},"Gemfile.lock":{frameworks:["Ruby"],slots:{packageManager:"bundler",mainLanguage:"Ruby"},priority:34,intelligence:"high"},"composer.json":{frameworks:["PHP","Laravel","Symfony"],slots:{packageManager:"composer",mainLanguage:"PHP"},priority:35,intelligence:"ultra-high"},"Cargo.toml":{frameworks:["Rust"],slots:{packageManager:"cargo",mainLanguage:"Rust",buildTool:"cargo"},priority:36,intelligence:"ultra-high"},"go.mod":{frameworks:["Go"],slots:{packageManager:"go modules",mainLanguage:"Go",buildTool:"go build"},priority:36,intelligence:"ultra-high"},"Package.swift":{frameworks:["Swift"],slots:{packageManager:"spm",mainLanguage:"Swift",buildTool:"swift build"},priority:36,intelligence:"ultra-high"},"*.csproj":{frameworks:["C#",".NET"],slots:{packageManager:"NuGet",mainLanguage:"C#",buildTool:"dotnet"},priority:36,intelligence:"ultra-high"},"pubspec.yaml":{frameworks:["Dart"],slots:{packageManager:"pub",mainLanguage:"Dart"},priority:35,intelligence:"ultra-high"},"pom.xml":{frameworks:["Java"],slots:{packageManager:"maven",mainLanguage:"Java",buildTool:"maven"},priority:35,intelligence:"ultra-high"},"build.gradle":{frameworks:["Java","Gradle"],slots:{packageManager:"gradle",mainLanguage:"Java",buildTool:"gradle"},priority:35,intelligence:"ultra-high"},"settings.gradle":{frameworks:["Java","Gradle"],slots:{packageManager:"gradle",mainLanguage:"Java",buildTool:"gradle"},priority:34,intelligence:"high"},"settings.gradle.kts":{frameworks:["Kotlin","Gradle"],slots:{packageManager:"gradle",mainLanguage:"Kotlin",buildTool:"gradle"},priority:34,intelligence:"high"},"next.config.js":{frameworks:["Next.js"],slots:{framework:"Next.js",buildTool:"Next.js",mainLanguage:"JavaScript",server:"Node.js"},priority:30,intelligence:"high"},"next.config.mjs":{frameworks:["Next.js"],slots:{framework:"Next.js",buildTool:"Next.js",mainLanguage:"JavaScript",server:"Node.js"},priority:30,intelligence:"high"},"next.config.ts":{frameworks:["Next.js 13+"],slots:{framework:"Next.js 13+",buildTool:"Next.js",mainLanguage:"TypeScript",server:"Node.js"},priority:30,intelligence:"high"},"nuxt.config.js":{frameworks:["Nuxt 2"],slots:{framework:"Nuxt 2",buildTool:"Nuxt",mainLanguage:"JavaScript",server:"Node.js"},priority:30,intelligence:"high"},"nuxt.config.ts":{frameworks:["Nuxt 3"],slots:{framework:"Nuxt 3",buildTool:"Nuxt",mainLanguage:"TypeScript",server:"Node.js"},priority:30,intelligence:"high"},"svelte.config.js":{frameworks:["SvelteKit"],slots:{framework:"SvelteKit",buildTool:"Vite",mainLanguage:"JavaScript",server:"Node.js"},priority:30,intelligence:"high"},"angular.json":{frameworks:["Angular"],slots:{framework:"Angular",buildTool:"Angular CLI",mainLanguage:"TypeScript",server:"Node.js"},priority:30,intelligence:"high"},"manifest.json":{frameworks:["Chrome Extension","Browser Extension"],slots:{framework:"Chrome Extension",runtime:"Chrome/Browser",mainLanguage:"JavaScript",hosting:"Chrome Web Store",apiType:"Chrome APIs"},priority:35,intelligence:"ultra-high",confirmWith:["popup.html","background.js","content.js"]},"vue.config.js":{frameworks:["Vue"],slots:{framework:"Vue",buildTool:"Vue CLI",mainLanguage:"JavaScript"},priority:30,intelligence:"high"},"remix.config.js":{frameworks:["Remix"],slots:{framework:"Remix",mainLanguage:"JavaScript",server:"Node.js"},priority:30,intelligence:"high"},"gatsby-config.js":{frameworks:["Gatsby"],slots:{framework:"Gatsby",buildTool:"Gatsby",mainLanguage:"JavaScript",server:"Node.js"},priority:30,intelligence:"high"},"gatsby-config.ts":{frameworks:["Gatsby"],slots:{framework:"Gatsby",buildTool:"Gatsby",mainLanguage:"TypeScript",server:"Node.js"},priority:30,intelligence:"high"},"astro.config.mjs":{frameworks:["Astro"],slots:{framework:"Astro",buildTool:"Vite",mainLanguage:"JavaScript",server:"Node.js"},priority:30,intelligence:"high"},"redwood.toml":{frameworks:["RedwoodJS"],slots:{framework:"RedwoodJS",buildTool:"Webpack",mainLanguage:"JavaScript/TypeScript",server:"Node.js",database:"Prisma"},priority:30,intelligence:"high"},"blitz.config.ts":{frameworks:["Blitz.js"],slots:{framework:"Blitz.js",buildTool:"Next.js",mainLanguage:"TypeScript",server:"Node.js",database:"Prisma"},priority:30,intelligence:"high"},"qwik.config.ts":{frameworks:["Qwik"],slots:{framework:"Qwik",buildTool:"Vite",mainLanguage:"TypeScript",server:"Node.js"},priority:30,intelligence:"high"},"manage.py":{frameworks:["Django"],slots:{framework:"Django",backend:"Django",mainLanguage:"Python",server:"Django",apiType:"Django Views"},priority:30,intelligence:"high"},artisan:{frameworks:["Laravel"],slots:{framework:"Laravel",backend:"Laravel",mainLanguage:"PHP",server:"PHP",apiType:"Laravel Routes"},priority:30,intelligence:"high"},"mix.exs":{frameworks:["Phoenix","Elixir"],slots:{framework:"Phoenix",backend:"Phoenix",mainLanguage:"Elixir",server:"BEAM"},priority:30,intelligence:"high"},"nest-cli.json":{frameworks:["NestJS"],slots:{framework:"NestJS",backend:"NestJS",mainLanguage:"TypeScript",server:"Node.js",apiType:"REST API"},priority:30,intelligence:"high"},"strapi.config.js":{frameworks:["Strapi"],slots:{backend:"Strapi",apiType:"REST API",server:"Node.js"},priority:30,intelligence:"high"},Dockerfile:{frameworks:["Docker"],slots:{},priority:30,intelligence:"high"},"docker-compose.yml":{frameworks:["Docker Compose"],slots:{hosting:"Docker"},priority:30,intelligence:"high"},"docker-compose.yaml":{frameworks:["Docker Compose"],slots:{hosting:"Docker"},priority:30,intelligence:"high"},"kubernetes.yml":{frameworks:["Kubernetes"],slots:{hosting:"Kubernetes"},priority:30,intelligence:"high"},"k8s.yaml":{frameworks:["Kubernetes"],slots:{hosting:"Kubernetes"},priority:30,intelligence:"high"},"vercel.json":{frameworks:["Vercel"],slots:{hosting:"Vercel",cicd:"Vercel"},priority:30,intelligence:"high"},"netlify.toml":{frameworks:["Netlify"],slots:{hosting:"Netlify",cicd:"Netlify"},priority:30,intelligence:"high"},"render.yaml":{frameworks:["Render"],slots:{hosting:"Render",cicd:"Render"},priority:30,intelligence:"high"},"fly.toml":{frameworks:["Fly.io"],slots:{hosting:"Fly.io",cicd:"Fly.io"},priority:30,intelligence:"high"},"railway.json":{frameworks:["Railway"],slots:{hosting:"Railway",cicd:"Railway"},priority:30,intelligence:"high"},"railway.toml":{frameworks:["Railway"],slots:{hosting:"Railway",cicd:"Railway"},priority:30,intelligence:"high"},"app.yaml":{frameworks:["Google App Engine"],slots:{hosting:"Google Cloud",cicd:"Google Cloud"},priority:30,intelligence:"high"},Procfile:{frameworks:["Heroku"],slots:{hosting:"Heroku",cicd:"Heroku"},priority:30,intelligence:"high"},"vite.config.js":{frameworks:["Vite"],slots:{buildTool:"Vite"},priority:25,intelligence:"medium"},"vite.config.ts":{frameworks:["Vite"],slots:{buildTool:"Vite",mainLanguage:"TypeScript"},priority:25,intelligence:"medium"},"webpack.config.js":{frameworks:["Webpack"],slots:{buildTool:"Webpack"},priority:25,intelligence:"medium"},"rollup.config.js":{frameworks:["Rollup"],slots:{buildTool:"Rollup"},priority:25,intelligence:"medium"},"esbuild.config.js":{frameworks:["esbuild"],slots:{buildTool:"esbuild"},priority:25,intelligence:"medium"},"parcel.config.js":{frameworks:["Parcel"],slots:{buildTool:"Parcel"},priority:25,intelligence:"medium"},"snowpack.config.js":{frameworks:["Snowpack"],slots:{buildTool:"Snowpack"},priority:25,intelligence:"medium"},"tsconfig.json":{frameworks:["TypeScript"],slots:{mainLanguage:"TypeScript"},priority:25,intelligence:"medium"},"jsconfig.json":{frameworks:["JavaScript"],slots:{mainLanguage:"JavaScript"},priority:20,intelligence:"medium"},"babel.config.js":{frameworks:["Babel"],slots:{buildTool:"Babel"},priority:20,intelligence:"medium"},".babelrc":{frameworks:["Babel"],slots:{buildTool:"Babel"},priority:20,intelligence:"medium"},"jest.config.js":{frameworks:["Jest"],slots:{},priority:25,intelligence:"medium"},"jest.config.ts":{frameworks:["Jest"],slots:{mainLanguage:"TypeScript"},priority:25,intelligence:"medium"},"vitest.config.ts":{frameworks:["Vitest"],slots:{mainLanguage:"TypeScript"},priority:25,intelligence:"medium"},"cypress.config.js":{frameworks:["Cypress"],slots:{},priority:25,intelligence:"medium"},"playwright.config.ts":{frameworks:["Playwright"],slots:{mainLanguage:"TypeScript"},priority:25,intelligence:"medium"},"karma.conf.js":{frameworks:["Karma"],slots:{},priority:20,intelligence:"medium"},"mocha.opts":{frameworks:["Mocha"],slots:{},priority:20,intelligence:"medium"},".rspec":{frameworks:["RSpec"],slots:{mainLanguage:"Ruby"},priority:25,intelligence:"medium"},"pytest.ini":{frameworks:["Pytest"],slots:{mainLanguage:"Python"},priority:25,intelligence:"medium"},"phpunit.xml":{frameworks:["PHPUnit"],slots:{mainLanguage:"PHP"},priority:25,intelligence:"medium"},"schema.prisma":{frameworks:["Prisma"],slots:{database:"Prisma ORM",connection:"Prisma"},priority:25,intelligence:"medium"},"drizzle.config.ts":{frameworks:["Drizzle"],slots:{database:"Drizzle ORM",connection:"Drizzle",mainLanguage:"TypeScript"},priority:25,intelligence:"medium"},"ormconfig.js":{frameworks:["TypeORM"],slots:{database:"TypeORM",connection:"TypeORM"},priority:25,intelligence:"medium"},"knexfile.js":{frameworks:["Knex.js"],slots:{database:"Knex.js",connection:"Knex.js"},priority:25,intelligence:"medium"},"sequelize.config.js":{frameworks:["Sequelize"],slots:{database:"Sequelize",connection:"Sequelize"},priority:25,intelligence:"medium"},"alembic.ini":{frameworks:["Alembic"],slots:{database:"Alembic",mainLanguage:"Python"},priority:25,intelligence:"medium"},".github/workflows":{frameworks:["GitHub Actions"],slots:{cicd:"GitHub Actions"},priority:25,intelligence:"medium"},".gitlab-ci.yml":{frameworks:["GitLab CI"],slots:{cicd:"GitLab CI"},priority:25,intelligence:"medium"},Jenkinsfile:{frameworks:["Jenkins"],slots:{cicd:"Jenkins"},priority:25,intelligence:"medium"},".circleci/config.yml":{frameworks:["CircleCI"],slots:{cicd:"CircleCI"},priority:25,intelligence:"medium"},".travis.yml":{frameworks:["Travis CI"],slots:{cicd:"Travis CI"},priority:25,intelligence:"medium"},"azure-pipelines.yml":{frameworks:["Azure DevOps"],slots:{cicd:"Azure DevOps"},priority:25,intelligence:"medium"},"bitbucket-pipelines.yml":{frameworks:["Bitbucket Pipelines"],slots:{cicd:"Bitbucket Pipelines"},priority:25,intelligence:"medium"},"tailwind.config.js":{frameworks:["Tailwind CSS"],slots:{cssFramework:"Tailwind CSS"},priority:20,intelligence:"medium"},"tailwind.config.ts":{frameworks:["Tailwind CSS"],slots:{cssFramework:"Tailwind CSS",mainLanguage:"TypeScript"},priority:20,intelligence:"medium"},"postcss.config.js":{frameworks:["PostCSS"],slots:{cssFramework:"PostCSS"},priority:20,intelligence:"medium"},"uno.config.ts":{frameworks:["UnoCSS"],slots:{cssFramework:"UnoCSS",mainLanguage:"TypeScript"},priority:20,intelligence:"medium"},"styled-components.config.js":{frameworks:["styled-components"],slots:{cssFramework:"styled-components",uiLibrary:"styled-components"},priority:20,intelligence:"medium"},"emotion.config.js":{frameworks:["Emotion"],slots:{cssFramework:"Emotion",uiLibrary:"Emotion"},priority:20,intelligence:"medium"},"metro.config.js":{frameworks:["React Native"],slots:{framework:"React Native",mainLanguage:"JavaScript"},priority:25,intelligence:"medium"},"expo.config.js":{frameworks:["Expo"],slots:{framework:"React Native",buildTool:"Expo"},priority:25,intelligence:"medium"},"app.json":{frameworks:["React Native","Expo"],slots:{framework:"React Native"},priority:20,intelligence:"medium",confirmWith:["expo"]},"capacitor.config.ts":{frameworks:["Capacitor"],slots:{framework:"Capacitor",mainLanguage:"TypeScript"},priority:25,intelligence:"medium"},"ionic.config.json":{frameworks:["Ionic"],slots:{framework:"Ionic",uiLibrary:"Ionic"},priority:25,intelligence:"medium"},"nx.json":{frameworks:["Nx"],slots:{buildTool:"Nx"},priority:25,intelligence:"medium"},"turbo.json":{frameworks:["Turborepo"],slots:{buildTool:"Turborepo"},priority:25,intelligence:"medium"},"lerna.json":{frameworks:["Lerna"],slots:{buildTool:"Lerna"},priority:25,intelligence:"medium"},"rush.json":{frameworks:["Rush"],slots:{buildTool:"Rush"},priority:25,intelligence:"medium"},"pnpm-workspace.yaml":{frameworks:["pnpm workspaces"],slots:{packageManager:"pnpm",buildTool:"pnpm workspaces"},priority:25,intelligence:"medium"},"*.svelte":{frameworks:["Svelte","SvelteKit"],slots:{framework:"Svelte"},priority:15,intelligence:"low"},"*.vue":{frameworks:["Vue"],slots:{framework:"Vue"},priority:15,intelligence:"low"},"*.jsx":{frameworks:["React"],slots:{framework:"React",mainLanguage:"JavaScript"},priority:15,intelligence:"low"},"*.ts":{frameworks:["TypeScript"],slots:{mainLanguage:"TypeScript"},priority:15,intelligence:"low"},"*.tsx":{frameworks:["React","TypeScript"],slots:{framework:"React",mainLanguage:"TypeScript"},priority:15,intelligence:"low"},"*.py":{frameworks:["Python"],slots:{mainLanguage:"Python"},priority:15,intelligence:"low"},"*.rb":{frameworks:["Ruby"],slots:{mainLanguage:"Ruby"},priority:15,intelligence:"low"},"*.php":{frameworks:["PHP"],slots:{mainLanguage:"PHP"},priority:15,intelligence:"low"},"*.java":{frameworks:["Java"],slots:{mainLanguage:"Java"},priority:15,intelligence:"low"},"*.kt":{frameworks:["Kotlin"],slots:{mainLanguage:"Kotlin"},priority:15,intelligence:"low"},"*.swift":{frameworks:["Swift"],slots:{mainLanguage:"Swift"},priority:15,intelligence:"low"},"*.go":{frameworks:["Go"],slots:{mainLanguage:"Go"},priority:15,intelligence:"low"},"*.rs":{frameworks:["Rust"],slots:{mainLanguage:"Rust"},priority:15,intelligence:"low"},"*.dart":{frameworks:["Flutter","Dart"],slots:{mainLanguage:"Dart"},priority:15,intelligence:"low"},"*.ex":{frameworks:["Elixir"],slots:{mainLanguage:"Elixir"},priority:15,intelligence:"low"},"*.exs":{frameworks:["Elixir"],slots:{mainLanguage:"Elixir"},priority:15,intelligence:"low"},"*.scala":{frameworks:["Scala"],slots:{mainLanguage:"Scala"},priority:15,intelligence:"low"},"*.clj":{frameworks:["Clojure"],slots:{mainLanguage:"Clojure"},priority:15,intelligence:"low"},"*.lua":{frameworks:["Lua"],slots:{mainLanguage:"Lua"},priority:15,intelligence:"low"},"*.r":{frameworks:["R"],slots:{mainLanguage:"R"},priority:15,intelligence:"low"},"*.R":{frameworks:["R"],slots:{mainLanguage:"R"},priority:15,intelligence:"low"},"*.jl":{frameworks:["Julia"],slots:{mainLanguage:"Julia"},priority:15,intelligence:"low"},"*.nim":{frameworks:["Nim"],slots:{mainLanguage:"Nim"},priority:15,intelligence:"low"},"*.zig":{frameworks:["Zig"],slots:{mainLanguage:"Zig"},priority:15,intelligence:"low"},"build.zig":{frameworks:["Zig"],slots:{packageManager:"Zig Package Manager",mainLanguage:"Zig",buildTool:"zig build",build:"zig build"},priority:35,intelligence:"ultra-high"},"openapi.json":{frameworks:["OpenAPI"],slots:{apiType:"REST API"},priority:30,intelligence:"high"},"openapi.yaml":{frameworks:["OpenAPI"],slots:{apiType:"REST API"},priority:30,intelligence:"high"},"swagger.json":{frameworks:["Swagger"],slots:{apiType:"REST API"},priority:30,intelligence:"high"},"graphql.schema":{frameworks:["GraphQL"],slots:{apiType:"GraphQL"},priority:30,intelligence:"high"},"schema.graphql":{frameworks:["GraphQL"],slots:{apiType:"GraphQL"},priority:30,intelligence:"high"},".graphqlconfig":{frameworks:["GraphQL"],slots:{apiType:"GraphQL"},priority:25,intelligence:"medium"},"redux.config.js":{frameworks:["Redux"],slots:{stateManagement:"Redux"},priority:20,intelligence:"medium"},"mobx.config.js":{frameworks:["MobX"],slots:{stateManagement:"MobX"},priority:20,intelligence:"medium"},"vuex.config.js":{frameworks:["Vuex"],slots:{stateManagement:"Vuex",framework:"Vue"},priority:20,intelligence:"medium"},"pinia.config.js":{frameworks:["Pinia"],slots:{stateManagement:"Pinia",framework:"Vue"},priority:20,intelligence:"medium"},"zustand.config.js":{frameworks:["Zustand"],slots:{stateManagement:"Zustand"},priority:20,intelligence:"medium"},".eslintrc.js":{frameworks:["ESLint"],slots:{},priority:15,intelligence:"low"},".eslintrc.json":{frameworks:["ESLint"],slots:{},priority:15,intelligence:"low"},".prettierrc":{frameworks:["Prettier"],slots:{},priority:15,intelligence:"low"},".prettierrc.json":{frameworks:["Prettier"],slots:{},priority:15,intelligence:"low"},"biome.json":{frameworks:["Biome"],slots:{},priority:15,intelligence:"low"},".editorconfig":{frameworks:["EditorConfig"],slots:{},priority:10,intelligence:"low"},"serverless.yml":{frameworks:["Serverless Framework"],slots:{hosting:"AWS Lambda/Azure/GCP",backend:"Serverless",apiType:"API Gateway"},priority:30,intelligence:"high"},"serverless.yaml":{frameworks:["Serverless Framework"],slots:{hosting:"AWS Lambda/Azure/GCP",backend:"Serverless",apiType:"API Gateway"},priority:30,intelligence:"high"},"sam.yaml":{frameworks:["AWS SAM"],slots:{hosting:"AWS Lambda",backend:"AWS SAM",cicd:"AWS SAM CLI"},priority:30,intelligence:"high"},"template.yaml":{frameworks:["AWS SAM","CloudFormation"],slots:{hosting:"AWS",backend:"AWS SAM/CloudFormation",cicd:"AWS"},priority:25,intelligence:"medium",confirmWith:["samconfig.toml"]},"amplify.yml":{frameworks:["AWS Amplify"],slots:{hosting:"AWS Amplify",backend:"AWS Amplify",cicd:"AWS Amplify"},priority:30,intelligence:"high"},Podfile:{frameworks:["CocoaPods","Swift"],slots:{packageManager:"CocoaPods",mainLanguage:"Swift/Objective-C"},priority:30,intelligence:"high"},"build.gradle.kts":{frameworks:["Kotlin","Gradle"],slots:{packageManager:"gradle",mainLanguage:"Kotlin",buildTool:"gradle"},priority:35,intelligence:"ultra-high"},"*.ipynb":{frameworks:["Jupyter","Python"],slots:{mainLanguage:"Python",framework:"Jupyter Notebook"},priority:30,intelligence:"high"},MLproject:{frameworks:["MLflow"],slots:{mainLanguage:"Python",backend:"MLflow"},priority:30,intelligence:"high"},"dvc.yaml":{frameworks:["DVC","Data Version Control"],slots:{mainLanguage:"Python",cicd:"DVC Pipelines"},priority:30,intelligence:"high"},"dvc.lock":{frameworks:["DVC"],slots:{},priority:20,intelligence:"medium"},"wrangler.toml":{frameworks:["Cloudflare Workers","Cloudflare"],slots:{hosting:"Cloudflare Workers",backend:"Cloudflare Workers",runtime:"V8 Isolates"},priority:30,intelligence:"high"},"deno.json":{frameworks:["Deno"],slots:{runtime:"Deno",mainLanguage:"TypeScript",packageManager:"Deno"},priority:30,intelligence:"high"},"bun.lockb":{frameworks:["Bun"],slots:{runtime:"Bun",packageManager:"Bun",mainLanguage:"TypeScript/JavaScript"},priority:30,intelligence:"high"},"codecov.yml":{frameworks:["Codecov"],slots:{},priority:25,intelligence:"high"},"dependabot.yml":{frameworks:["Dependabot","GitHub"],slots:{},priority:25,intelligence:"high"},"renovate.json":{frameworks:["Renovate"],slots:{},priority:25,intelligence:"high"},Makefile:{frameworks:["Make","GNU Make"],slots:{buildTool:"Make"},priority:30,intelligence:"high"},"CMakeLists.txt":{frameworks:["CMake","C","C++"],slots:{buildTool:"CMake",mainLanguage:"C/C++"},priority:30,intelligence:"high"},"meson.build":{frameworks:["Meson","C","C++"],slots:{buildTool:"Meson",mainLanguage:"C/C++"},priority:30,intelligence:"high"},"*.c":{frameworks:["C"],slots:{mainLanguage:"C"},priority:30,intelligence:"high"},"*.cpp":{frameworks:["C++"],slots:{mainLanguage:"C++"},priority:30,intelligence:"high"},"*.cc":{frameworks:["C++"],slots:{mainLanguage:"C++"},priority:30,intelligence:"high"},"*.cxx":{frameworks:["C++"],slots:{mainLanguage:"C++"},priority:25,intelligence:"high"},"*.h":{frameworks:["C","C++"],slots:{mainLanguage:"C/C++"},priority:25,intelligence:"high"},"*.hpp":{frameworks:["C++"],slots:{mainLanguage:"C++"},priority:25,intelligence:"high"},"*.hxx":{frameworks:["C++"],slots:{mainLanguage:"C++"},priority:20,intelligence:"medium"},".env":{frameworks:[],slots:{},priority:20,intelligence:"medium"},".env.example":{frameworks:[],slots:{},priority:25,intelligence:"high"},".env.local":{frameworks:[],slots:{},priority:20,intelligence:"medium"},".env.development":{frameworks:[],slots:{},priority:20,intelligence:"medium"},".env.production":{frameworks:[],slots:{},priority:20,intelligence:"medium"},"skaffold.yaml":{frameworks:["Skaffold","Kubernetes"],slots:{hosting:"Kubernetes",cicd:"Skaffold"},priority:30,intelligence:"high"},"Chart.yaml":{frameworks:["Helm","Kubernetes"],slots:{hosting:"Kubernetes"},priority:30,intelligence:"high"},"values.yaml":{frameworks:["Helm","Kubernetes"],slots:{hosting:"Kubernetes"},priority:25,intelligence:"high",confirmWith:["Chart.yaml"]},"pulumi.yaml":{frameworks:["Pulumi"],slots:{cicd:"Pulumi"},priority:30,intelligence:"high"},"Pulumi.yaml":{frameworks:["Pulumi"],slots:{cicd:"Pulumi"},priority:30,intelligence:"high"},"terragrunt.hcl":{frameworks:["Terragrunt","Terraform"],slots:{cicd:"Terragrunt"},priority:30,intelligence:"high"},"ansible.yml":{frameworks:["Ansible"],slots:{cicd:"Ansible"},priority:30,intelligence:"high"},"playbook.yml":{frameworks:["Ansible"],slots:{cicd:"Ansible"},priority:25,intelligence:"high"},"*.cs":{frameworks:["C#",".NET","Unity"],slots:{mainLanguage:"C#"},priority:30,intelligence:"high"},"*.m":{frameworks:["Objective-C","iOS"],slots:{mainLanguage:"Objective-C"},priority:25,intelligence:"high"},".nvmrc":{frameworks:["Node.js","nvm"],slots:{runtime:"Node.js"},priority:25,intelligence:"high"},".tool-versions":{frameworks:["asdf"],slots:{},priority:25,intelligence:"high"},".ruby-version":{frameworks:["Ruby","rbenv"],slots:{mainLanguage:"Ruby",runtime:"Ruby"},priority:25,intelligence:"high"},".python-version":{frameworks:["Python","pyenv"],slots:{mainLanguage:"Python",runtime:"Python"},priority:25,intelligence:"high"},".dockerignore":{frameworks:["Docker"],slots:{},priority:20,intelligence:"medium"},".gitattributes":{frameworks:["Git"],slots:{},priority:15,intelligence:"low"},".npmrc":{frameworks:["npm","Node.js"],slots:{packageManager:"npm"},priority:20,intelligence:"medium"},"sonar-project.properties":{frameworks:["SonarQube","SonarCloud"],slots:{},priority:25,intelligence:"high"},"*.fs":{frameworks:["F#",".NET"],slots:{mainLanguage:"F#"},priority:25,intelligence:"high"},"*.mm":{frameworks:["Objective-C++","iOS","macOS"],slots:{mainLanguage:"Objective-C++"},priority:25,intelligence:"high"},"build.zig.zon":{frameworks:["Zig"],slots:{mainLanguage:"Zig",packageManager:"Zig Package Manager",buildTool:"zig build"},priority:35,intelligence:"ultra-high"},"gleam.toml":{frameworks:["Gleam","BEAM","Erlang"],slots:{mainLanguage:"Gleam",runtime:"BEAM",packageManager:"Gleam"},priority:30,intelligence:"high"},"bunfig.toml":{frameworks:["Bun"],slots:{runtime:"Bun",packageManager:"Bun",buildTool:"Bun"},priority:30,intelligence:"high"},"mise.toml":{frameworks:["mise"],slots:{},priority:25,intelligence:"high"},".mise.toml":{frameworks:["mise"],slots:{},priority:25,intelligence:"high"},"manifest.toml":{frameworks:["Flox","Nix"],slots:{},priority:25,intelligence:"high",confirmWith:[".flox"]},justfile:{frameworks:["Just"],slots:{buildTool:"Just"},priority:25,intelligence:"high"},".pre-commit-config.yaml":{frameworks:["pre-commit"],slots:{},priority:25,intelligence:"high"},"CLAUDE.md":{frameworks:["Claude Code"],slots:{},priority:30,intelligence:"high",confirmWith:[".claude"]}};import{join as oD}from"path";var V$={version:2,_doc:"SINGLE SOURCE of Dart/Flutter detection KNOWLEDGE (A+B hybrid, the Truth-is-faf-cli spec). faf-cli imports this directly; faf-python-sdk vendors a synced copy (phase 2); MCPs compose it. Bolster Dart/Flutter by editing THIS file. Logic stays in dart.ts. Refreshed 2026-08-01 (knowledge v2) — community receipt on top of 6.13.0 Dart Edition.",flutterDeps:["flutter"],mcpDeps:["dart_mcp","mcp_server","mcp_dart","dart_mcp_server","mcp","dart_mcpserver"],serverFrameworks:[["serverpod","Serverpod"],["dart_frog","Dart Frog"],["conduit","Conduit"],["angel3_framework","Angel3"],["alfred","Alfred"],["shelf","Shelf"],["jaspr","Jaspr"],["relic","Relic"]],stateManagement:[["flutter_riverpod","Riverpod"],["hooks_riverpod","Riverpod"],["riverpod_annotation","Riverpod"],["riverpod","Riverpod"],["flutter_bloc","Bloc"],["bloc","Bloc"],["provider","Provider"],["get","GetX"],["flutter_mobx","MobX"],["mobx","MobX"],["signals","Signals"],["flutter_hooks","Hooks"]],routing:[["go_router","go_router"],["auto_route","auto_route"],["beamer","Beamer"],["routemaster","Routemaster"]]};var aD=V$.flutterDeps,tD=V$.mcpDeps,eD=V$.serverFrameworks,$L=V$.stateManagement,ZL=V$.routing;function QL($){let Z=new Set,Q=!1;for(let z of $.split(`
|
|
251
|
+
`)){if(/^(dependencies|dev_dependencies|dependency_overrides):\s*$/.test(z)){Q=!0;continue}if(/^\S/.test(z))Q=!1;if(Q){let X=z.match(/^\s{2}([a-zA-Z0-9_]+):/);if(X)Z.add(X[1].toLowerCase())}}return Z}function E8($){let Z=S($,"pubspec.yaml");if(Z===null)return null;let Q=QL(Z),z=(_)=>Q.has(_.toLowerCase()),X=aD.some(z)||/^flutter:\s*$/m.test(Z)||/\bsdk:\s*flutter\b/.test(Z),H=tD.find(z),U=eD.find(([_])=>z(_)),J=$L.find(([_])=>z(_)),G=J?J[1]:"",V=ZL.find(([_])=>z(_)),Y=V?V[1]:"",W=z("flutter_test")?"flutter_test":z("test")?"test":"",B=/^executables:\s*$/m.test(Z),K=(v($,"bin")??[]).some((_)=>_.name.endsWith(".dart")),L=B||K,q,D="",O;if(X)if(D="Flutter",I($,oD("lib","main.dart"))||/^publish_to:\s*['"]?none\b/m.test(Z))q="mobile",O="pubspec.yaml (Flutter app)";else q="library",O="pubspec.yaml (Flutter package)";else if(H)q="mcp",O=`pubspec.yaml + ${H} (Dart MCP server)`;else if(U)q="backend",D=U[1],O=`pubspec.yaml + ${U[0]} (Dart backend)`;else if(L)q="cli",O=B?"pubspec.yaml executables: (Dart CLI)":"pubspec.yaml + bin/*.dart (Dart CLI)";else q="library",O="pubspec.yaml (Dart package)";return{appType:q,isFlutter:X,framework:D,stateManagement:G,routing:Y,testing:W,found:O}}import{join as XL}from"path";var b8={version:1,_doc:"SINGLE SOURCE of Go detection KNOWLEDGE (A+B hybrid, Truth-is-faf-cli). faf-cli imports this directly; SDKs/MCPs compose it. Bolster Go by editing THIS file. Logic stays in go.ts. Content-aware: go.mod ≠ one bucket — backend · CLI · MCP · library. 2026-08-01 initial (Dart composition pattern).",mcpModules:["github.com/mark3labs/mcp-go","github.com/modelcontextprotocol/go-sdk","github.com/metoro-io/mcp-golang","github.com/ThinkInAIXYZ/go-mcp"],serverFrameworks:[["github.com/gin-gonic/gin","Gin"],["github.com/labstack/echo","Echo"],["github.com/labstack/echo/v4","Echo"],["github.com/gofiber/fiber","Fiber"],["github.com/gofiber/fiber/v2","Fiber"],["github.com/go-chi/chi","Chi"],["github.com/go-chi/chi/v5","Chi"],["github.com/gorilla/mux","Gorilla Mux"],["github.com/gofiber/fiber/v3","Fiber"],["google.golang.org/grpc","gRPC"],["connectrpc.com/connect","Connect"],["github.com/go-kratos/kratos","Kratos"],["github.com/go-kratos/kratos/v2","Kratos"],["github.com/zeromicro/go-zero","go-zero"],["github.com/cloudwego/hertz","Hertz"]],cliFrameworks:[["github.com/spf13/cobra","Cobra"],["github.com/urfave/cli","urfave/cli"],["github.com/urfave/cli/v2","urfave/cli"],["github.com/alecthomas/kingpin","Kingpin"],["github.com/alecthomas/kong","Kong"]]};var HL=b8.mcpModules,UL=b8.serverFrameworks,JL=b8.cliFrameworks;function GL($){let Z=new Set,Q=!1;for(let z of $.split(`
|
|
252
|
+
`)){let X=z.replace(/\/\/.*$/,"").trim();if(!X)continue;if(/^require\s*\(\s*$/.test(X)){Q=!0;continue}if(Q){if(X===")"){Q=!1;continue}let U=X.match(/^(\S+)/);if(U)Z.add(U[1].toLowerCase());continue}let H=X.match(/^require\s+(\S+)/);if(H&&H[1]!=="(")Z.add(H[1].toLowerCase())}return Z}function J3($,Z){let Q=Z.toLowerCase();for(let z of $)if(z===Q||z.startsWith(`${Q}/`))return!0;return!1}function U3($,Z){let Q;for(let z of Z){if(!J3($,z[0]))continue;if(!Q||z[0].length>Q[0].length)Q=z}return Q}function VL($,Z){let Q;for(let z of Z){if(!J3($,z))continue;if(!Q||z.length>Q.length)Q=z}return Q}function YL($){let Z=$.match(/^module\s+(\S+)/m);return Z?Z[1]:""}function WL($){for(let{name:Z}of v($,"cmd")??[]){let Q=XL("cmd",Z),z=O0($,Q);if(z?.isDirectory()){if((v($,Q)??[]).some((X)=>X.name.endsWith(".go")))return!0}else if(z&&Z.endsWith(".go"))return!0}return!1}function BL($){let Z=S($,"main.go");return Z!==null&&/^package\s+main\b/m.test(Z)}function y8($){let Z=S($,"go.mod");if(Z===null)return null;let Q=YL(Z),z=GL(Z),X=VL(z,HL),H=U3(z,UL),U=U3(z,JL),J=WL($),G=BL($),V,Y="",W;if(X)V="mcp",W=`go.mod + ${X} (Go MCP server)`;else if(H)V="backend",Y=H[1],W=`go.mod + ${H[0]} (Go backend)`;else if(U)V="cli",Y=U[1],W=`go.mod + ${U[0]} (Go CLI)`;else if(J)V="cli",W="go.mod + cmd/ (Go CLI layout)";else if(G&&!H)V="cli",W="go.mod + main.go package main (Go CLI)";else V="library",W="go.mod (Go module)";return{appType:V,modulePath:Q,framework:Y,found:W}}var P2={version:1,_doc:"SINGLE SOURCE of C# /.NET detection KNOWLEDGE (Truth-is-faf-cli). faf-cli imports this; SDKs/MCPs compose it. Bolster C# by editing THIS file. Logic stays in csharp.ts. Content-aware: .csproj alone ≠ type — Sdk first, then props/packages. Kill line: .csproj alone ≠ type. 2026-08-01 initial.",mcpPackages:["ModelContextProtocol","ModelContextProtocol.AspNetCore","ModelContextProtocol.Core","ModelContextProtocol.Extensions.Tasks","ModelContextProtocol.Extensions.Apps"],cliPackages:[["System.CommandLine","System.CommandLine"],["Spectre.Console.Cli","Spectre.Console"],["Spectre.Console","Spectre.Console"],["McMaster.Extensions.CommandLineUtils","McMaster"]],testPackages:[["Microsoft.NET.Test.Sdk","VSTest"],["xunit.v3","xUnit"],["xunit","xUnit"],["NUnit","NUnit"],["MSTest.TestFramework","MSTest"],["MSTest","MSTest"]],grpcServerPackages:["Grpc.AspNetCore"],specializedSdks:[["Microsoft.NET.Sdk.Web","web","ASP.NET Core"],["Microsoft.NET.Sdk.Worker","worker","Worker"],["Microsoft.NET.Sdk.BlazorWebAssembly","blazor-wasm","Blazor WebAssembly"],["Microsoft.NET.Sdk.Razor","razor-lib","Razor Class Library"],["MSTest.Sdk","test","MSTest"],["Aspire.AppHost.Sdk","aspire","Aspire AppHost"]],baseSdk:"Microsoft.NET.Sdk"};var KL=P2.mcpPackages.map(($)=>$.toLowerCase()),DL=P2.cliPackages.map(([$,Z])=>[$.toLowerCase(),Z]),LL=P2.testPackages.map(([$,Z])=>[$.toLowerCase(),Z]),IL=P2.grpcServerPackages.map(($)=>$.toLowerCase()),OL=P2.specializedSdks,G3=P2.baseSdk.toLowerCase();function _L($){let Z=$.match(/<Project\b[^>]*\bSdk\s*=\s*"([^"/]+)(?:\/[^"]*)?"/i),Q=$.match(/<Sdk\b[^>]*\bName\s*=\s*"([^"]+)"/i),z=(Z?.[1]||Q?.[1]||"").trim(),X=($.match(/<OutputType>\s*([^<]+?)\s*<\/OutputType>/i)?.[1]||"").trim(),H=$.match(/<TargetFramework>\s*([^<]+?)\s*<\/TargetFramework>/i)?.[1],J=($.match(/<TargetFrameworks>\s*([^<]+?)\s*<\/TargetFrameworks>/i)?.[1]||H||"").trim(),G=/<IsTestProject>\s*true\s*<\/IsTestProject>/i.test($),V=/<UseMaui>\s*true\s*<\/UseMaui>/i.test($),Y=/<UseWPF>\s*true\s*<\/UseWPF>/i.test($),W=/<UseWindowsForms>\s*true\s*<\/UseWindowsForms>/i.test($),B=new Set;for(let L of $.matchAll(/<PackageReference\b[^>]*\bInclude\s*=\s*"([^"]+)"/gi))B.add(L[1].toLowerCase());for(let L of $.matchAll(/<PackageReference\s+Include\s*=\s*"([^"]+)"/gi))B.add(L[1].toLowerCase());let K=new Set;for(let L of $.matchAll(/<FrameworkReference\b[^>]*\bInclude\s*=\s*"([^"]+)"/gi))K.add(L[1].toLowerCase());return{sdk:z,outputType:X,targetFramework:J,isTestProject:G,useMaui:V,useWpf:Y,useWindowsForms:W,packages:B,frameworkRefs:K}}function Y1($,Z){let Q=Z.toLowerCase();if($.has(Q))return!0;for(let z of $)if(z===Q||z.startsWith(`${Q}.`))return!0;return!1}function V3($,Z){let Q;for(let[z,X]of Z){if(!Y1($,z))continue;if(!Q||z.length>Q[0].length)Q=[z,X]}return Q}function ML($){let Z;for(let Q of KL){if(!Y1($,Q))continue;if(!Z||Q.length>Z.length)Z=Q}for(let Q of $)if(Q==="modelcontextprotocol"||Q.startsWith("modelcontextprotocol.")){if(!Z||Q.length>Z.length)Z=Q}return Z}function PL($){let Z=$.toLowerCase();if(!Z)return;let Q;for(let z of OL){let X=z[0].toLowerCase();if(Z===X||Z.startsWith(`${X}/`)){if(!Q||X.length>Q[0].length)Q=z}}return Q}function x8($){let Z=$.toLowerCase();return Z==="exe"||Z==="winexe"}function FL($,Z){if($==="mcp")return 0;if($==="mobile")return 1;if($==="backend")return 2;if($==="cli")return 3;if(Z&&Z!=="")return 4;return 5}function RL($,Z){let Q=Z.replace(/\.csproj$/i,""),{sdk:z,packages:X,frameworkRefs:H,outputType:U}=$,J,G="",V,Y=ML(X),W=PL(z),B=V3(X,LL),K=V3(X,DL),L=IL.some((D)=>Y1(X,D)),q=H.has("microsoft.aspnetcore.app");if(Y)J="mcp",G="MCP",V=`${Z} + ${Y} (C# MCP server)`;else if($.isTestProject||W?.[1]==="test"||B)J="library",G=B?.[1]||(W?.[1]==="test"?W[2]:"Test"),V=`${Z} + test (${G})`;else if($.useMaui)J="mobile",G="MAUI",V=`${Z} + UseMaui (MAUI)`;else if($.useWpf||$.useWindowsForms)J="backend",G=$.useWpf&&$.useWindowsForms?"WPF+WinForms":$.useWpf?"WPF":"Windows Forms",V=`${Z} + ${G}`;else if(W?.[1]==="web")J="backend",G=L?"gRPC":W[2],V=`${Z} + Sdk=${W[0]}${L?" + Grpc.AspNetCore":""} (ASP.NET Core)`;else if(W?.[1]==="worker")J="backend",G=W[2],V=`${Z} + Sdk=${W[0]} (Worker)`;else if(W?.[1]==="blazor-wasm")J="backend",G=W[2],V=`${Z} + Sdk=${W[0]} (Blazor WASM)`;else if(W?.[1]==="aspire")J="backend",G=W[2],V=`${Z} + Sdk=${W[0]} (Aspire)`;else if(W?.[1]==="razor-lib")J="library",G=W[2],V=`${Z} + Sdk=${W[0]} (Razor class library)`;else if(q&&x8(U))J="backend",G="ASP.NET Core",V=`${Z} + FrameworkReference Microsoft.AspNetCore.App (host)`;else if(q&&!x8(U))J="library",G="ASP.NET Core",V=`${Z} + FrameworkReference Microsoft.AspNetCore.App (web library)`;else if(K&&(x8(U)||!U))J="cli",G=K[1],V=`${Z} + ${K[0]} (C# CLI)`;else if(x8(U))J="cli",V=`${Z} + OutputType=Exe (C# console)`;else{J="library";let D=z?` Sdk=${z}`:"";if(V=`${Z}${D} (C# class library)`.replace(" Sdk=Microsoft.NET.Sdk",""),!z||z.toLowerCase()===G3||z.toLowerCase().startsWith(`${G3}/`))V=`${Z} (C# class library)`}return{appType:J,projectName:Q,targetFramework:$.targetFramework,sdk:z||"Microsoft.NET.Sdk",framework:G,found:V}}function Y$($){return(v($)??[]).map((Z)=>Z.name).filter((Z)=>Z.toLowerCase().endsWith(".csproj")).sort()}function g8($){let Z=Y$($);if(Z.length===0)return null;let Q=null,z=999;for(let X of Z){let H=S($,X);if(H===null)continue;let U=_L(H),J=RL(U,X),G=FL(J.appType,J.framework);if(!Q||G<z)Q=J,z=G}return Q}import{join as F2}from"path";var M0={version:1,_doc:"SINGLE SOURCE of JVM (Java/Kotlin) detection KNOWLEDGE (Truth-is-faf-cli). faf-cli imports this; SDKs/MCPs compose it. Bolster JVM by editing THIS file. Logic stays in jvm.ts. Kill line: pom / gradle alone ≠ type. Content-aware: plugins · parents · packaging · deps · version catalogs. One brand JVM — Android/KMP are facets, not a second Kotlin Edition. 2026-08-03 initial (post-intel).",mcpArtifacts:["io.modelcontextprotocol.sdk:mcp","io.modelcontextprotocol.sdk:mcp-core","io.modelcontextprotocol.sdk:mcp-spring-webflux","io.modelcontextprotocol.sdk:mcp-spring-webmvc","org.springframework.ai:spring-ai-starter-mcp-server","org.springframework.ai:spring-ai-starter-mcp-server-webmvc","org.springframework.ai:spring-ai-starter-mcp-server-webflux","org.springframework.ai:spring-ai-starter-mcp-client","org.springframework.ai:spring-ai-mcp-server-spring-boot-starter","org.springframework.ai:spring-ai-mcp-client-spring-boot-starter","io.modelcontextprotocol:kotlin-sdk","io.modelcontextprotocol.kotlin:mcp"],webPlugins:[["org.springframework.boot","Spring Boot"],["io.quarkus","Quarkus"],["io.quarkus.gradle.plugin","Quarkus"],["io.micronaut.application","Micronaut"],["io.micronaut.library","Micronaut"]],webParents:[["org.springframework.boot:spring-boot-starter-parent","Spring Boot"],["io.quarkus.platform:quarkus-bom","Quarkus"],["io.micronaut.platform:micronaut-parent","Micronaut"]],webArtifacts:[["org.springframework.boot:spring-boot-starter-web","Spring Boot"],["org.springframework.boot:spring-boot-starter-webflux","Spring Boot"],["org.springframework.boot:spring-boot-starter","Spring Boot"],["io.quarkus:quarkus-core","Quarkus"],["io.micronaut:micronaut-http-server-netty","Micronaut"],["io.ktor:ktor-server-core","Ktor"],["io.ktor:ktor-server-netty","Ktor"],["io.ktor:ktor-server-cio","Ktor"]],androidPlugins:["com.android.application","com.android.library","com.android.kotlin.multiplatform.library"],kmpPlugins:["org.jetbrains.kotlin.multiplatform","kotlin-multiplatform"],jvmKotlinPlugins:["org.jetbrains.kotlin.jvm","kotlin-jvm","org.jetbrains.kotlin.android","kotlin-android"],cliPlugins:[["org.gradle.application","application"],["application","application"]],cliArtifacts:[["info.picocli:picocli","Picocli"],["com.github.ajalt.clikt:clikt","Clikt"],["com.github.ajalt.clikt:clikt-jvm","Clikt"]],libraryPlugins:["java-library","org.gradle.java-library"]};var TL=M0.mcpArtifacts.map(($)=>$.toLowerCase()),AL=M0.webPlugins.map(([$,Z])=>[$.toLowerCase(),Z]),CL=M0.webParents.map(([$,Z])=>[$.toLowerCase(),Z]),jL=M0.webArtifacts.map(([$,Z])=>[$.toLowerCase(),Z]),RN=M0.androidPlugins.map(($)=>$.toLowerCase()),wL=M0.kmpPlugins.map(($)=>$.toLowerCase()),SL=M0.jvmKotlinPlugins.map(($)=>$.toLowerCase()),EL=M0.cliPlugins.map(([$,Z])=>[$.toLowerCase(),Z]),bL=M0.cliArtifacts.map(([$,Z])=>[$.toLowerCase(),Z]),yL=M0.libraryPlugins.map(($)=>$.toLowerCase()),xL=["pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts"];function W1($){return xL.some((Z)=>I($,Z))}function gL($){let Z=new Map,Q=new Map,z="";for(let X of $.split(`
|
|
253
|
+
`)){let H=X.replace(/#.*$/,"").trim();if(!H)continue;let U=H.match(/^\[([^\]]+)\]$/);if(U){z=U[1].trim().toLowerCase();continue}let J=H.match(/^([A-Za-z0-9_.-]+)\s*=\s*\{[^}]*\bid\s*=\s*"([^"]+)"/);if(J&&(z==="plugins"||z.endsWith(".plugins"))){Z.set(J[1].replace(/-/g,".").toLowerCase(),J[2].toLowerCase()),Z.set(J[1].toLowerCase(),J[2].toLowerCase());continue}let G=H.match(/^([A-Za-z0-9_.-]+)\s*=\s*\{[^}]*\bmodule\s*=\s*"([^"]+)"/);if(G&&(z==="libraries"||z.endsWith(".libraries"))){let W=G[1].toLowerCase();Q.set(W,G[2].toLowerCase()),Q.set(W.replace(/-/g,"."),G[2].toLowerCase());continue}let V=H.match(/^([A-Za-z0-9_.-]+)\s*=\s*\{[^}]*\bgroup\s*=\s*"([^"]+)"[^}]*\bname\s*=\s*"([^"]+)"/);if(V&&(z==="libraries"||z.endsWith(".libraries"))){let W=`${V[2]}:${V[3]}`.toLowerCase(),B=V[1].toLowerCase();Q.set(B,W),Q.set(B.replace(/-/g,"."),W);continue}let Y=H.match(/^([A-Za-z0-9_.-]+)\s*=\s*"([^"]+)"/);if(Y){let W=Y[1].toLowerCase(),B=Y[2];if(z==="plugins"||z.endsWith(".plugins")){let K=B.split(":")[0].toLowerCase();Z.set(W,K),Z.set(W.replace(/-/g,"."),K)}else if(z==="libraries"||z.endsWith(".libraries")){let K=B.split(":");if(K.length>=2){let L=`${K[0]}:${K[1]}`.toLowerCase();Q.set(W,L),Q.set(W.replace(/-/g,"."),L)}}}}return{plugins:Z,libraries:Q}}function vL($){let Z=S($,F2("gradle","libs.versions.toml"));if(!Z)return{plugins:new Map,libraries:new Map};return gL(Z)}function kL($){let Z=[];for(let Q of $.matchAll(/include\s*\(\s*([^)]+)\)/g))for(let z of Q[1].split(",")){let X=z.replace(/['":\s]/g,"").replace(/^:/,"");if(X)Z.push(X.replace(/:/g,"/"))}for(let Q of $.matchAll(/include\s+((?:['"][^'"]+['"]\s*,?\s*)+)/g))for(let z of Q[1].split(",")){let X=z.replace(/['":\s]/g,"").replace(/^:/,"");if(X)Z.push(X.replace(/:/g,"/"))}for(let Q of $.matchAll(/project\s*\(\s*["']:([^"']+)["']\s*\)\s*\.projectDir\s*=\s*file\s*\(\s*["']([^"']+)["']\s*\)/g))Z.push(Q[2].replace(/^\.\//,""));return[...new Set(Z)]}function hL($,Z){let Q=new Set;for(let z of $.matchAll(/\bid\s*\(\s*["']([^"']+)["']\s*\)/g))Q.add(z[1].toLowerCase());for(let z of $.matchAll(/\bid\s+['"]([^'"]+)['"]/g))Q.add(z[1].toLowerCase());for(let z of $.matchAll(/plugins\s*\{([\s\S]*?)\}/g))for(let X of z[1].split(/[\n;]/)){let H=X.replace(/\/\/.*$/,"").trim();if(!H||H.startsWith("id")||H.startsWith("kotlin")||H.startsWith("alias"))continue;let U=H.match(/^`([a-zA-Z0-9.-]+)`$/)||H.match(/^([a-zA-Z][a-zA-Z0-9.-]*)$/);if(U)Q.add(U[1].toLowerCase())}for(let z of $.matchAll(/\bkotlin\s*\(\s*["']([^"']+)["']\s*\)/g)){let X=z[1].toLowerCase();if(X==="jvm")Q.add("org.jetbrains.kotlin.jvm");else if(X==="multiplatform")Q.add("org.jetbrains.kotlin.multiplatform");else if(X==="android")Q.add("org.jetbrains.kotlin.android");else Q.add(`org.jetbrains.kotlin.${X}`)}for(let z of $.matchAll(/libs\.plugins\.([A-Za-z0-9_.]+)/g)){let X=z[1].toLowerCase(),H=Z.plugins.get(X)||Z.plugins.get(X.replace(/\./g,"-"))||Z.plugins.get(X.replace(/-/g,"."));if(H)Q.add(H);else if(X.includes("spring")&&X.includes("boot"))Q.add("org.springframework.boot")}for(let z of $.matchAll(/apply\s+plugin\s*:\s*['"]([^'"]+)['"]/g))Q.add(z[1].toLowerCase());return Q}function uL($,Z){let Q=new Set;for(let z of $.matchAll(/["']([A-Za-z0-9_.-]+:[A-Za-z0-9_.-]+)(?::[^"']+)?["']/g))Q.add(z[1].toLowerCase());for(let z of $.matchAll(/libs\.([A-Za-z0-9_.]+)/g)){let X=z[1].toLowerCase();if(X.startsWith("plugins."))continue;let H=[X,X.replace(/\./g,"-"),X.replace(/-/g,".")];for(let U of H){let J=Z.libraries.get(U);if(J){Q.add(J.includes(":")?J.split(":").slice(0,2).join(":"):J);break}}}return Q}function B3($){let Z=($.match(/<packaging>\s*([^<]+?)\s*<\/packaging>/i)?.[1]||"jar").trim().toLowerCase(),Q=new Set,z=$.match(/<parent>([\s\S]*?)<\/parent>/i);if(z){let U=z[1].match(/<groupId>\s*([^<]+?)\s*<\/groupId>/i)?.[1]?.trim(),J=z[1].match(/<artifactId>\s*([^<]+?)\s*<\/artifactId>/i)?.[1]?.trim();if(U&&J)Q.add(`${U}:${J}`.toLowerCase())}let X=new Set;for(let U of $.matchAll(/<dependency>([\s\S]*?)<\/dependency>/gi)){let J=U[1].match(/<groupId>\s*([^<]+?)\s*<\/groupId>/i)?.[1]?.trim(),G=U[1].match(/<artifactId>\s*([^<]+?)\s*<\/artifactId>/i)?.[1]?.trim();if(J&&G)X.add(`${J}:${G}`.toLowerCase())}let H=[];for(let U of $.matchAll(/<module>\s*([^<]+?)\s*<\/module>/gi))H.push(U[1].trim());return{packaging:Z,parents:Q,artifacts:X,modules:H}}function p0($,Z){let Q=Z.toLowerCase();if($.has(Q))return!0;for(let z of $)if(z===Q||z.endsWith(`.${Q}`)||z===Q.replace(/^org\.gradle\./,""))return!0;return!1}function z6($,Z,Q){let z;for(let[X,H]of Z){let U=!1;if(Q==="plugin")U=p0($,X);else if(U=$.has(X)||[...$].some((J)=>J===X||J.startsWith(`${X}:`)||J.startsWith(`${X}.`)),!U&&Q==="artifact")U=[...$].some((J)=>J===X||J.startsWith(`${X}`));if(!U)continue;if(!z||X.length>z[0].length)z=[X,H]}return z}function fL($){let Z;for(let Q of TL)for(let z of $){if(z===Q||z.startsWith(`${Q}:`)||z.startsWith(Q.replace(/:mcp$/,":"))){if(!Z||Q.length>Z.length)Z=Q}if(z.startsWith("io.modelcontextprotocol")||z.includes("spring-ai-starter-mcp")||z.includes("spring-ai-mcp")){if(!Z||z.length>Z.length)Z=z}}return Z}function q3($,Z){let Q=new Set,z=!1,X=!1,H=[F2(Z,"src"),F2(Z,"src","main")],U=(J,G)=>{if(G>4)return;let V=v($,J);if(!V)return;for(let{name:Y}of V){if(Y==="androidMain"||Y==="commonMain"||Y==="jvmMain"||Y==="iosMain")Q.add(Y);let W=F2(J,Y),B=O0($,W);if(!B)continue;if(B.isDirectory())U(W,G+1);else if(Y.endsWith(".kt")||Y.endsWith(".kts"))z=!0;else if(Y.endsWith(".java"))X=!0}};for(let J of H)U(J,0);return{kotlin:z,java:X,hints:Q}}function mL($){let Z=[],Q=$.plugins,z=$.artifacts,X=wL.some((F)=>p0(Q,F))||$.sourceHints.has("commonMain"),H=p0(Q,"com.android.application"),U=p0(Q,"com.android.library")||p0(Q,"com.android.kotlin.multiplatform.library");if(H||U)Z.push("android");if(X)Z.push("multiplatform");let J=fL(z),G=z6(Q,AL,"plugin"),V=z6($.parents,CL,"parent"),Y=z6(z,jL,"artifact"),W=z6(Q,EL,"plugin"),B=z6(z,bL,"artifact"),K=yL.some((F)=>p0(Q,F)),L=$.packaging==="pom",q,D="",O;if(H)q="mobile",D=X?"Android+KMP":"Android",O=`${$.path||"root"} + com.android.application (${D})`;else if(J)q="mcp",D="MCP",Z.push("mcp"),O=`${$.path||"root"} + ${J} (JVM MCP server)`;else if(G||V||Y){q="backend",D=G?.[1]||V?.[1]||Y?.[1]||"JVM";let F=G?.[0]||V?.[0]||Y?.[0]||"web";O=`${$.path||"root"} + ${F} (JVM backend)`}else if(X&&!U)q="library",D="Kotlin Multiplatform",O=`${$.path||"root"} + kotlin multiplatform (KMP library)`;else if(U)q="library",D=X?"Android+KMP":"Android",O=`${$.path||"root"} + android library (${D})`;else if(B||$.hasApplicationPlugin&&($.hasMainClass||W)||W&&$.hasMainClass)q="cli",D=B?.[1]||"application",O=B?`${$.path||"root"} + ${B[0]} (JVM CLI)`:`${$.path||"root"} + application plugin (JVM CLI)`;else if($.hasApplicationPlugin&&!K)q="cli",D="application",O=`${$.path||"root"} + application plugin (JVM CLI)`;else if(L)q="library",O=`${$.path||"root"} + packaging=pom (Maven aggregator/BOM)`;else{q="library";let F=$.kotlinSources&&!$.javaSources?"Kotlin":"JVM";if(O=`${$.path||"root"} (${F} library)`,K)O=`${$.path||"root"} + java-library (JVM library)`}let _="Java";if($.kotlinSources&&$.javaSources)_="Java/Kotlin";else if($.kotlinSources||SL.some((F)=>p0(Q,F))||X)_="Kotlin";let C=[...new Set(Z)];return{appType:q,framework:D,facets:C,found:O,buildTool:$.buildTool,mainLanguage:_}}function pL($,Z){if($==="mcp")return 0;if($==="mobile")return 1;if(Z.includes("multiplatform")&&$==="backend")return 2;if($==="backend")return 3;if($==="cli")return 4;if(Z.includes("multiplatform"))return 5;if(Z.includes("android"))return 6;return 7}function Y3($,Z,Q){let z=F2(Z,"build.gradle.kts"),X=F2(Z,"build.gradle"),H=I($,z)?z:I($,X)?X:null;if(!H)return null;let U=S($,H);if(!U)return null;let J=hL(U,Q),G=uL(U,Q),V=q3($,Z),Y=/mainClass\s*[.=]/.test(U)||/mainClassName\s*=/.test(U)||/Main-Class/.test(U),W=p0(J,"application")||p0(J,"org.gradle.application");return{path:Z||"build.gradle",plugins:J,artifacts:G,packaging:"jar",parents:new Set,hasMainClass:Y,hasApplicationPlugin:W,sourceHints:V.hints,kotlinSources:V.kotlin||H.endsWith(".kts"),javaSources:V.java,buildTool:"gradle"}}function W3($,Z){let Q=S($,F2(Z,"pom.xml"));if(!Q)return null;let{packaging:z,parents:X,artifacts:H}=B3(Q),U=q3($,Z);return{path:Z?`${Z}/pom.xml`:"pom.xml",plugins:new Set,artifacts:H,packaging:z,parents:X,hasMainClass:/<mainClass>/.test(Q),hasApplicationPlugin:!1,sourceHints:U.hints,kotlinSources:U.kotlin,javaSources:U.java,buildTool:"maven"}}function X6($){if(!W1($))return null;let Z=vL($),Q=[],z=null;for(let V of["settings.gradle.kts","settings.gradle"])if(I($,V)){z=S($,V);break}let X=z?kL(z):[],H=Y3($,"",Z);if(H)Q.push(H);for(let V of X){let Y=Y3($,V,Z);if(Y)Q.push(Y)}let U=W3($,"");if(U){Q.push(U);let V=S($,"pom.xml");if(V){let{modules:Y}=B3(V);for(let W of Y){let B=W3($,W);if(B)Q.push(B)}}}if(Q.length===0&&z)return{appType:"library",framework:"",buildTool:"gradle",mainLanguage:"Java/Kotlin",facets:[],found:"settings.gradle (Gradle multi-project root)"};if(Q.length===0)return null;let J=null,G=999;for(let V of Q){let Y=mL(V),W=pL(Y.appType,Y.facets);if(!J||W<G)J={appType:Y.appType,framework:Y.framework,buildTool:Y.buildTool,mainLanguage:Y.mainLanguage,facets:Y.facets,found:Y.found},G=W}if(J&&X.length>0&&!J.found.includes("multi-project"));return J}import{join as cL}from"path";var H6={version:1,_doc:"SINGLE SOURCE of Ruby detection KNOWLEDGE (Truth-is-faf-cli). faf-cli imports this; SDKs/MCPs compose it. Kill line: Gemfile alone ≠ Rails. Content-aware: gem names + light layout. 2026-08-03 initial (post-intel ruby-edition).",mcpGems:["mcp","fast-mcp","fast_mcp","rails-mcp-server","rails_mcp_server","ruby-mcp-client","ruby_mcp_client","ruby_llm-mcp","ruby_llm_mcp"],webGems:[["rails","Rails"],["railties","Rails"],["sinatra","Sinatra"],["sinatra-contrib","Sinatra"],["roda","Roda"],["grape","Grape"],["hanami","Hanami"],["hanami-controller","Hanami"],["rack","Rack"]],cliGems:[["thor","Thor"],["gli","GLI"],["commander","Commander"],["slop","Slop"]],railsLayoutFiles:["config/application.rb","config/routes.rb","bin/rails","config/environment.rb"]};var dL=H6.mcpGems.map(($)=>$.toLowerCase()),iL=H6.webGems.map(([$,Z])=>[$.toLowerCase(),Z]),K3=H6.cliGems.map(([$,Z])=>[$.toLowerCase(),Z]),nL=H6.railsLayoutFiles;function rL($){return I($,"Gemfile")||I($,"gems.rb")||sL($)}function sL($){return(v($)??[]).some((Z)=>Z.name.endsWith(".gemspec"))}function oL($){let Z=new Set;for(let Q of $.split(`
|
|
254
|
+
`)){let z=Q.replace(/#.*$/,"").trim();if(!z)continue;let X=z.match(/^\s*gem\s+['"]([^'"]+)['"]/i)||z.match(/^\s*gem\s+:([A-Za-z0-9_.-]+)/i);if(X)Z.add(X[1].toLowerCase())}return Z}function aL($){let Z=new Set,Q=!1;for(let z of $.split(`
|
|
255
|
+
`)){let X=z.replace(/\r$/,"");if(/^\s*specs:\s*$/.test(X)){Q=!0;continue}if(Q){if(/^[A-Z]/.test(X)||X.startsWith("PLATFORMS")||X.startsWith("DEPENDENCIES")||X.startsWith("BUNDLED")||X.startsWith("RUBY VERSION")||X.startsWith("CHECKSUMS")){Q=!1;continue}let H=X.match(/^\s{2,}([a-zA-Z0-9_.-]+)\s*\(/);if(H)Z.add(H[1].toLowerCase())}}return Z}function tL($){let Z=new Set;for(let Q of $.split(`
|
|
256
|
+
`)){let X=Q.replace(/#.*$/,"").match(/add_(?:runtime_|development_)?dependency\s*\(?\s*['"]([^'"]+)['"]/i);if(X)Z.add(X[1].toLowerCase())}return Z}function eL($){let Z=new Set,Q=[];for(let X of["Gemfile","gems.rb"]){let H=S($,X);if(H){for(let U of oL(H))Z.add(U);Q.push(X)}}let z=S($,"Gemfile.lock")||S($,"gems.locked");if(z){for(let X of aL(z))Z.add(X);Q.push("Gemfile.lock")}for(let{name:X}of v($)??[]){if(!X.endsWith(".gemspec"))continue;let H=S($,X);if(H){for(let U of tL(H))Z.add(U);Q.push(X)}}return{gems:Z,sources:Q}}function U6($,Z){let Q=Z.toLowerCase();if($.has(Q))return!0;return!1}function B1($,Z){let Q;for(let[z,X]of Z){if(!U6($,z))continue;if(!Q||z.length>Q[0].length)Q=[z,X]}return Q}function $I($){let Z;for(let Q of dL)if(U6($,Q)&&(!Z||Q.length>Z.length))Z=Q;return Z}function D3($){for(let Z of nL)if(I($,Z))return Z;return}function ZI($,Z){let Q=B1(Z,K3);if(Q)return{hit:!0,why:Q[0]};for(let{name:X}of v($)??[]){if(!X.endsWith(".gemspec"))continue;let H=S($,X);if(H&&/executables\s*=/.test(H)&&!/executables\s*=\s*\[\s*\]/.test(H))return{hit:!0,why:`${X} executables`}}let z=v($,"bin");if(z){let H=z.map((U)=>U.name).filter((U)=>{if(U==="setup"||U==="console"||U==="rake")return!1;return O0($,cL("bin",U))?.isFile()===!0}).filter((U)=>U!=="rails");if(H.length>0&&!U6(Z,"rails")&&!D3($))return{hit:!0,why:`bin/${H[0]}`}}return{hit:!1,why:""}}function v8($){if(!rL($))return null;let{gems:Z,sources:Q}=eL($),z=Q[0]||"Gemfile",X=Q.some((D)=>D==="Gemfile"||D==="gems.rb"||D.includes("lock"))?"bundler":"rubygems",H=$I(Z),U=B1(Z,iL),J=D3($),G=U6(Z,"rails")||U6(Z,"railties"),V=ZI($,Z),Y=I($,"config.ru"),W=G||!!J,B=U&&U[1]!=="Rails"&&!(U[0]==="rack"&&!Y)?U:void 0,K,L="",q;if(H)K="mcp",L="MCP",q=`${z} + gem ${H} (Ruby MCP)`;else if(W)if(K="backend",L="Rails",G&&J)q=`${z} + rails + ${J} (Rails)`;else if(G)q=`${z} + gem rails (Rails)`;else q=`${J} (Rails layout)`;else if(B)K="backend",L=B[1],q=`${z} + gem ${B[0]} (Ruby backend)`;else if(V.hit)K="cli",L=B1(Z,K3)?.[1]||"",q=`${z} + ${V.why} (Ruby CLI)`;else K="library",q=`${z} (Ruby library)`;return{appType:K,framework:L,packageManager:X,found:q}}import{join as zI}from"path";var E0={version:1,_doc:"SINGLE SOURCE of Swift detection KNOWLEDGE (Truth-is-faf-cli). Kill line: Package.swift alone ≠ app. Static parse of products + package URLs + product names + light xcodeproj productType. Never execute Package.swift / swift build. 2026-08-03 post-intel swift-edition.",mcpPackageUrls:["modelcontextprotocol/swift-sdk","github.com/modelcontextprotocol/swift-sdk"],mcpProducts:["MCP"],serverPackageUrls:[["vapor/vapor","Vapor"],["github.com/vapor/vapor","Vapor"],["hummingbird-project/hummingbird","Hummingbird"],["github.com/hummingbird-project/hummingbird","Hummingbird"]],serverProducts:[["Vapor","Vapor"],["Hummingbird","Hummingbird"]],cliPackageUrls:[["apple/swift-argument-parser","ArgumentParser"],["github.com/apple/swift-argument-parser","ArgumentParser"]],cliProducts:[["ArgumentParser","ArgumentParser"]],appProductTypes:["com.apple.product-type.application"],cliProductTypes:["com.apple.product-type.tool"],vaporLayoutFiles:["Sources/App/configure.swift","Sources/App/routes.swift","Sources/App/entrypoint.swift"]};var XI=E0.mcpPackageUrls.map(($)=>$.toLowerCase()),HI=E0.mcpProducts.map(($)=>$.toLowerCase()),UI=E0.serverPackageUrls.map(([$,Z])=>[$.toLowerCase(),Z]),JI=E0.serverProducts.map(([$,Z])=>[$.toLowerCase(),Z]),GI=E0.cliPackageUrls.map(([$,Z])=>[$.toLowerCase(),Z]),VI=E0.cliProducts.map(([$,Z])=>[$.toLowerCase(),Z]),YI=E0.appProductTypes,WI=E0.cliProductTypes,BI=E0.vaporLayoutFiles;function qI($){return I($,"Package.swift")||q1($).length>0}function q1($){return(v($)??[]).map((Z)=>Z.name).filter((Z)=>Z.endsWith(".xcodeproj")&&O0($,Z)?.isDirectory()===!0)}function KI($){let Z=DI($),Q=Z.toLowerCase(),z=[],X=/\.package\s*\(\s*url\s*:\s*"([^"]+)"/gi,H;while((H=X.exec(Z))!==null)z.push(H[1]);let U=/\.package\s*\(\s*url\s*:\s*'([^']+)'/gi;while((H=U.exec(Z))!==null)z.push(H[1]);let J=[],G=/\.product\s*\(\s*name\s*:\s*"([^"]+)"/gi;while((H=G.exec(Z))!==null)J.push(H[1]);let V=/\.product\s*\(\s*name\s*:\s*'([^']+)'/gi;while((H=V.exec(Z))!==null)J.push(H[1]);let Y=/\.library\s*\(/.test(Q),W=/\.executable\s*\(/.test(Q),B=/\.plugin\s*\(/.test(Q)&&!Y&&!W?!0:/\bproducts\s*:\s*\[[\s\S]*?\.plugin\s*\(/.test(Q),K=/\.executabletarget\s*\(/.test(Q),L=/\.target\s*\(/.test(Q)&&!K?!0:(Q.match(/\.target\s*\(/g)||[]).length>(Q.match(/\.executabletarget\s*\(/g)||[]).length+(Q.match(/\.testtarget\s*\(/g)||[]).length;return{packageUrls:z,productNames:J,hasLibraryProduct:Y,hasExecutableProduct:W,hasPluginProduct:!!B,hasExecutableTarget:K,hasLibraryTarget:L}}function DI($){let Z="",Q=0;while(Q<$.length){if($[Q]==='"'||$[Q]==="'"){let z=$[Q];Z+=z,Q++;while(Q<$.length){if($[Q]==="\\"&&Q+1<$.length){Z+=$[Q]+$[Q+1],Q+=2;continue}if(Z+=$[Q],$[Q]===z){Q++;break}Q++}continue}if($[Q]==="/"&&$[Q+1]==="/"){Q+=2;while(Q<$.length&&$[Q]!==`
|
|
257
|
+
`)Q++;continue}if($[Q]==="/"&&$[Q+1]==="*"){Q+=2;while(Q<$.length&&!($[Q]==="*"&&$[Q+1]==="/"))Q++;Q+=2;continue}Z+=$[Q],Q++}return Z}function LI($,Z){let Q=$.map((X)=>X.toLowerCase()),z;for(let X of Z)for(let H of Q)if(H.includes(X)&&(!z||X.length>z.length))z=X;return z}function L3($,Z){let Q=$.map((X)=>X.toLowerCase()),z;for(let[X,H]of Z)for(let U of Q)if(U.includes(X)&&(!z||X.length>z[0].length))z=[X,H];return z}function I3($,Z){let Q=$.map((X)=>X.toLowerCase()),z;for(let[X,H]of Z)if(Q.includes(X)&&(!z||X.length>z[0].length))z=[X,H];return z}function II($){let Z=$.map((Q)=>Q.toLowerCase());return HI.some((Q)=>Z.includes(Q))}function OI($){let Z=!1,Q=!1,z;for(let X of q1($)){let H=S($,zI(X,"project.pbxproj"));if(!H)continue;for(let U of YI)if(H.includes(U))Z=!0,z=U;for(let U of WI)if(H.includes(U)){if(Q=!0,!z)z=U}}return{hasApplication:Z,hasTool:Q,hit:z}}function _I($){for(let Z of BI)if(I($,Z))return Z;return}function J6($){if(!qI($))return null;let Z=I($,"Package.swift"),Q=q1($),z=Q.length>0,X=null;if(Z){let P=S($,"Package.swift");if(P)X=KI(P)}let H=z?OI($):{hasApplication:!1,hasTool:!1},U=_I($),J=X?.packageUrls??[],G=X?.productNames??[],V=LI(J,XI),Y=II(G),W=L3(J,UI),B=I3(G,JI),K=L3(J,GI),L=I3(G,VI),q=!!(V||Y),D=!!(W||B||U),O=!!(X?.hasExecutableProduct||X?.hasExecutableTarget),_=!!(K||L),C=H.hasApplication,F=Z&&z?"spm+xcode":Z?"spm":"xcode",N,T="",w;if(q)if(N="mcp",T="MCP",Y)w="Package.swift + product MCP (Swift MCP)";else w=`Package.swift + ${V} (Swift MCP)`;else if(D)if(N="backend",T=B?.[1]||W?.[1]||(U?"Vapor":""),B)w=`Package.swift + product ${B[1]} (Swift backend)`;else if(W)w=`Package.swift + ${W[1]} (Swift backend)`;else w=`${U} (Swift backend layout)`;else if(C)N="app",T="",w=`${Q[0]} + ${H.hit||"application"} (Swift app)`;else if(_||O&&!D&&!q)if(N="cli",T=L?.[1]||K?.[1]||"",L)w=`Package.swift + product ${L[1]} (Swift CLI)`;else if(K)w=`Package.swift + ${K[1]} (Swift CLI)`;else if(X?.hasExecutableProduct)w="Package.swift + .executable product (Swift CLI)";else w="Package.swift + .executableTarget (Swift CLI)";else if(H.hasTool&&!Z)N="cli",w=`${Q[0]} + tool productType (Swift CLI)`;else if(Z)if(N="library",X?.hasLibraryProduct)w="Package.swift + .library product (Swift library)";else w="Package.swift (Swift library)";else N="library",w=`${Q[0]||"xcodeproj"} (Swift — no classifying productType)`;return{appType:N,framework:T,packageManager:F,found:w}}var RI=new Set(["node_modules",".git","dist","build","venv",".venv","__pycache__","target","coverage",".next",".svelte-kit","vendor"]),NI=new Set([".py",".ts",".tsx",".js",".jsx",".svelte",".vue",".rb",".go",".rs",".php",".java",".kt",".swift"]),TI={mainLanguage:["project","main_language"],main_language:["project","main_language"],framework:["stack","frontend"],cssFramework:["stack","css_framework"],css:["stack","css_framework"],uiLibrary:["stack","ui_library"],ui_library:["stack","ui_library"],stateManagement:["stack","state_management"],state:["stack","state_management"],backend:["stack","backend"],apiType:["stack","api_type"],api:["stack","api_type"],runtime:["stack","runtime"],database:["stack","database"],db:["stack","database"],connection:["stack","connection"],hosting:["stack","hosting"],buildTool:["stack","build"],build_tool:["stack","build"],build:["stack","build"],packageManager:["stack","package_manager"],pkg_manager:["stack","package_manager"],cicd:["stack","cicd"]},AI=[["packageManager","package-manager"],["pkg_manager","package-manager"],["mainLanguage","language"],["main_language","language"],["framework","framework"],["backend","backend"],["database","database"],["db","database"],["cicd","ci-cd"],["hosting","hosting"],["buildTool","build"],["build_tool","build"],["build","build"],["runtime","runtime"],["cssFramework","css"],["css","css"],["uiLibrary","ui-library"],["stateManagement","state-management"],["apiType","api"],["api","api"]];function CI($,Z){for(let[Q,z]of AI)if(Q in $)return z;return Z.length>0?"framework":"config"}function jI($,Z){try{let Q=JSON.parse(S($,Z)??""),z=["background","content_scripts","action","browser_action","permissions"].some((X)=>(X in Q));if(typeof Q.manifest_version==="number"&&z)return"chrome";return"other"}catch{return"other"}}function wI($,Z){if(Z.isFile())return!0;if(!Z.isSymbolicLink())return!1;return O0($,Z.name)?.isFile()===!0}function SI($,Z){if(Z.isDirectory())return!0;if(!Z.isSymbolicLink())return!1;return O0($,Z.name)?.isDirectory()===!0}function EI($){let Z=[],Q=FI($),z=new Set,X=v(Q);if(!X)return Z;for(let H of X){let U=H.name;if(U.endsWith(".xcodeproj")?!SI(Q,H):!wI(Q,H))continue;if(U.toLowerCase().endsWith(".csproj")){let G=g8(Q);if(G){let V={mainLanguage:"C#",packageManager:"NuGet",buildTool:"dotnet"};if(G.appType==="backend"&&G.framework)V.backend=G.framework;else if(G.appType==="cli"&&G.framework)V.framework=G.framework;else if(G.appType==="mcp")V.apiType="MCP";else if(G.appType==="mobile"&&G.framework)V.framework=G.framework;if(G.targetFramework)V.runtime=G.targetFramework;let Y=G.framework?[G.framework,"C#",".NET"]:["C#",".NET"];Z.push({slots:V,priority:36,frameworks:Y,fileName:U})}continue}if(U.endsWith(".xcodeproj")){let G=J6(Q);if(G){let V={mainLanguage:"Swift",packageManager:G.packageManager==="spm"?"spm":"Xcode",buildTool:G.packageManager.includes("spm")?"swift build":"xcodebuild"};if(G.appType==="backend"&&G.framework)V.backend=G.framework;else if(G.appType==="cli"&&G.framework)V.framework=G.framework;else if(G.appType==="mcp")V.apiType="MCP";else if(G.appType==="app"&&G.framework)V.framework=G.framework;let Y=G.framework?[G.framework,"Swift"]:["Swift"];Z.push({slots:V,priority:36,frameworks:Y,fileName:U})}continue}let J=V1[U];if(!J)continue;if(U==="manifest.json"&&jI(Q,U)!=="chrome")continue;if(U==="pubspec.yaml"){let G=E8(Q);if(G){let V={mainLanguage:"Dart",packageManager:"pub"};if(G.isFlutter){if(V.framework="Flutter",G.stateManagement)V.stateManagement=G.stateManagement}else if(G.appType==="backend"&&G.framework)V.backend=G.framework;else if(G.appType==="mcp")V.apiType="MCP";Z.push({slots:V,priority:J.priority,frameworks:G.isFlutter?["Flutter","Dart"]:["Dart"],fileName:U});continue}}if(U==="go.mod"){let G=y8(Q);if(G){let V={mainLanguage:"Go",packageManager:"go modules",buildTool:"go build"};if(G.appType==="backend"&&G.framework)V.backend=G.framework;else if(G.appType==="cli"&&G.framework)V.framework=G.framework;else if(G.appType==="mcp")V.apiType="MCP";let Y=G.framework?[G.framework,"Go"]:["Go"];Z.push({slots:V,priority:J.priority,frameworks:Y,fileName:U});continue}}if(U==="Gemfile"||U==="Gemfile.lock"||U==="gems.rb"){let G=v8(Q);if(G){let V={mainLanguage:"Ruby",packageManager:G.packageManager};if(G.appType==="backend"&&G.framework)V.backend=G.framework;else if(G.appType==="cli"&&G.framework)V.framework=G.framework;else if(G.appType==="mcp")V.apiType="MCP";let Y=G.framework?[G.framework,"Ruby"]:["Ruby"];Z.push({slots:V,priority:J.priority??35,frameworks:Y,fileName:U});continue}}if(U==="Package.swift"){let G=J6(Q);if(G){let V={mainLanguage:"Swift",packageManager:G.packageManager==="xcode"?"Xcode":"spm",buildTool:"swift build"};if(G.appType==="backend"&&G.framework)V.backend=G.framework;else if(G.appType==="cli"&&G.framework)V.framework=G.framework;else if(G.appType==="mcp")V.apiType="MCP";else if(G.appType==="app"&&G.framework)V.framework=G.framework;let Y=G.framework?[G.framework,"Swift"]:["Swift"];Z.push({slots:V,priority:J.priority??36,frameworks:Y,fileName:U});continue}}if(U==="pom.xml"||U==="build.gradle"||U==="build.gradle.kts"||U==="settings.gradle"||U==="settings.gradle.kts"){if(z.has(Q))continue;z.add(Q);let G=X6(Q);if(G){let V={mainLanguage:G.mainLanguage==="Java/Kotlin"?"Kotlin":G.mainLanguage,packageManager:G.buildTool==="maven"?"maven":"gradle",buildTool:G.buildTool};if(G.appType==="backend"&&G.framework)V.backend=G.framework;else if(G.appType==="cli"&&G.framework)V.framework=G.framework;else if(G.appType==="mcp")V.apiType="MCP";else if(G.appType==="mobile")V.framework=G.framework||"Android";if(G.facets.includes("multiplatform"))V.framework=G.framework||"Kotlin Multiplatform";let Y=G.framework?[G.framework,"JVM",G.mainLanguage==="Kotlin"?"Kotlin":"Java"]:["JVM",G.mainLanguage==="Kotlin"?"Kotlin":"Java"];Z.push({slots:V,priority:J.priority??35,frameworks:Y,fileName:U});continue}}Z.push({slots:J.slots||{},priority:J.priority,frameworks:J.frameworks,fileName:U})}return Z}function bI($){let Z=[];for(let Q of e2($,()=>_3($,2,{count:0}))){let z=V1[`*${Q}`],X=z?.slots?.mainLanguage;if(X)Z.push({slots:{mainLanguage:X},priority:z.priority,frameworks:z.frameworks})}return Z}function O3($){let Z=[...EI($),...bI($)],Q={},z={},X=new Set;for(let V of Z){V.frameworks.forEach((Y)=>X.add(Y));for(let[Y,W]of Object.entries(V.slots))if(W&&!W.includes("/")&&(!(Y in Q)||V.priority>z[Y]))Q[Y]=W,z[Y]=V.priority}let H=new Map;for(let V of Z){if(!V.fileName)continue;if(!H.has(V.fileName))H.set(V.fileName,{fileName:V.fileName,category:CI(V.slots,V.frameworks),priority:V.priority})}let U=[...H.values()].sort((V,Y)=>Y.priority-V.priority||V.fileName.localeCompare(Y.fileName)),J=[];if(Q.mainLanguage)J.push(Q.mainLanguage.toLowerCase());if(Q.framework)J.push(Q.framework.toLowerCase());let G=J.length>0?J.join("-"):"unknown-stack";return{slotFills:Q,frameworks:[...X],confirmedCount:Z.length,discoveredFormats:U,stackSignature:G}}function k8($){let{slotFills:Z}=O3($),Q={};for(let[z,X]of Object.entries(Z)){let H=TI[z];if(!H||!X)continue;let[U,J]=H;if(U==="project")(Q.project??={})[J]=X;else(Q.stack??={})[J]=X}return Q}function _3($,Z,Q){let z=new Set;if(Z<0||Q.count>400)return z;let X=v($);if(!X)return z;for(let H of X){if(Q.count++>400)break;if(!H.isDirectory()){let U=PI(H.name);if(NI.has(U))z.add(U);continue}if(RI.has(H.name)||H.name.startsWith("."))continue;for(let U of _3(MI($,H.name),Z-1,Q))z.add(U)}return z}var $0=($,Z,Q)=>({value:$,source:Z,confidence:Q});function M3($,Z={}){let Q=Z.toolingRoot?null:yI($),z=xI($),X={},H=(U,J)=>{if(J)X[U]=J};return H("what",kI(Q,z)),H("who",hI(z)),H("why",uI(z)),H("where",fI(Q,z)),H("when",mI(z)),H("how",pI(Q,z)),X}function h8($,Z={}){let Q=M3($,Z),z={};return Object.keys(Q).forEach((X)=>{let H=Q[X];if(H)z[X]=H.value}),z}function yI($){let Z=S($,"package.json");if(Z===null)return null;try{return JSON.parse(Z)}catch{return null}}function xI($){let Z=S($,"README.md");if(Z===null)return"";return Z.replace(/<!--[\s\S]*?-->/g,"").split(`
|
|
258
258
|
`).filter((Q)=>!/^\s*\[!\[/.test(Q)&&!/^\s*!\[/.test(Q)).join(`
|
|
259
|
-
`).replace(/<[^>]+>/g,"").replace(/!\[[^\]]*\]\([^)]*\)/g,"").trim()}function R2($){return $.replace(/\s+/g," ").replace(/[#*`>]/g,"").trim().slice(0,280)}function wI($){if(!$)return 0;return($.match(/\[[^\]]*\]\([^)]*\)/g)??[]).join("").length/$.length}function W$($,Z){let Q=new RegExp(`##?\\s+(${Z})\\s*\\n+([\\s\\S]+?)(?:\\n\\n|\\n##?|$)`,"i"),z=$.match(Q);if(!z||!z[2]||z[2].trim().length<=20||wI(z[2])>0.4)return null;return{body:R2(z[2]),heading:z[1].trim()}}function SI($){let Z=$.trim();if(/^>/.test(Z))return!0;if(/\b(nightly (release|build)|pre-?release|work[-\s]in[-\s]progress|rough edges|early (access|testing|preview)|use at your own risk|not (yet )?production[-\s]?ready|expect (rough|breaking)|experimental release)\b/i.test(Z))return!0;let Q=Z.split(/[·|]/).map((z)=>z.trim()).filter(Boolean);if(Q.length>=3&&Q.every((z)=>z.length<=24))return!0;return!1}function G6($,Z,Q=30){for(let z of Z){let X=$.match(z);if(X&&X[1]&&X[1].trim().length>=Q)return R2(X[1])}return null}function EI($,Z){if($?.description&&$.description.length>20)return $0(R2($.description),"package.json:description",0.95);let Q=W$(Z,"Purpose|What|About|Overview|Description");if(Q)return $0(Q.body,`README:## ${Q.heading}`,0.8);let z=Z.split(/\n\s*\n/).map((H)=>H.replace(/\s+/g," ").trim()).find((H)=>H.length>30&&!H.startsWith("#")&&!SI(H));if(z)return $0(R2(z),"README:first-paragraph",0.5);let X=G6(Z,[/(?:core|main|primary)\s+(?:problem|challenge)(?:\s+is)?\s*:?\s*([^.\n]{30,})/i,/solves?\s+(?:the\s+)?(?:problem\s+of\s+)?([^.\n]{30,})/i]);return X?$0(X,"README:problem-heuristic",0.6):null}function bI($){let Z=W$($,"Audience|Who|Who is this for|Who it.s for");if(Z)return $0(Z.body,`README:## ${Z.heading}`,0.8);let Q=G6($,[/\b(?:designed|built|made)\s+for\s+((?:[a-z][a-z-]*\s+)?(?:developers?|teams?|engineers?|builders?|founders?)[^.\n]{0,80})/i,/\bfor\s+((?:[a-z][a-z-]*\s+)?(?:developers?|teams?|engineers?|builders?|founders?)[^.\n]{0,80})/i],8);return Q?$0(Q,"README:audience-heuristic",0.6):null}function yI($){let Z=W$($,"Why|Mission|Motivation|Rationale|Vision");if(Z)return $0(Z.body,`README:## ${Z.heading}`,0.8);let Q=G6($,[/(?:our\s+|the\s+)?(?:mission|purpose|goal)\s+is\s+([^.\n]{30,})/i,/\b(?:mission|purpose|goal)\s*:\s*([^.\n]{30,})/i,/(?:built|created|designed)\s+(?:because|to)\s+([^.\n]{30,})/i]);return Q?$0(Q,"README:mission-heuristic",0.6):null}function xI($,Z){let Q=typeof $?.repository==="string"?$.repository:$?.repository?.url;if(Q)return $0(R2(Q.replace(/^git\+/,"").replace(/\.git$/,"")),"package.json:repository",0.95);if($?.homepage)return $0(R2($.homepage),"package.json:homepage",0.9);let z=G6(Z,[/\b(?:deployed|hosted|available|published)\s+(?:on|at|via)\s+([^.\n]{3,80})/i],3);return z?$0(z,"README:deploy-heuristic",0.6):null}function gI($){let Z=W$($,"Timeline|Status|Release|Roadmap");if(Z)return $0(Z.body,`README:## ${Z.heading}`,0.8);let Q=G6($,[/\b(production\s+since\s+[^.\n]{4,60})/i,/\b((?:in\s+)?(?:production|beta|alpha|development)\s+since\s+[^.\n]{4,60})/i,/\bsince\s+((?:[A-Z][a-z]+\s+)?\d{4}[^.\n]{0,40})/],4);return Q?$0(Q,"README:since-heuristic",0.6):null}function vI($,Z){let Q=$?.scripts?Object.keys($.scripts):[],z=["start","dev","build"].filter((U)=>Q.includes(U));if(z.length)return $0(R2(z.map((U)=>`npm run ${U}`).join(", ")),"package.json:scripts",0.9);let X=W$(Z,"Usage|Getting Started|Install|Installation|Quick Start");if(X)return $0(X.body,`README:## ${X.heading}`,0.8);let H=W$(Z,"Architecture|Approach|How it works|Methodology|How");return H?$0(H.body,`README:## ${H.heading}`,0.7):null}var _3="3.0";import{join as P3}from"path";var M3=[{name:"Next.js",slug:"nextjs",category:"frontend",signals:[{type:"dependency",key:"next"},{type:"file",pattern:"next.config.*"}]},{name:"React",slug:"react",category:"frontend",signals:[{type:"dependency",key:"react"}]},{name:"SvelteKit",slug:"sveltekit",category:"frontend",signals:[{type:"anyDependency",key:"@sveltejs/kit"},{type:"file",pattern:"svelte.config.*"}]},{name:"Svelte",slug:"svelte",category:"frontend",signals:[{type:"dependency",key:"svelte"},{type:"devDependency",key:"svelte"}]},{name:"Vue.js",slug:"vue",category:"frontend",signals:[{type:"dependency",key:"vue"}]},{name:"Nuxt",slug:"nuxt",category:"frontend",signals:[{type:"dependency",key:"nuxt"},{type:"file",pattern:"nuxt.config.*"}]},{name:"Angular",slug:"angular",category:"frontend",signals:[{type:"dependency",key:"@angular/core"},{type:"file",pattern:"angular.json"}]},{name:"Astro",slug:"astro",category:"frontend",signals:[{type:"dependency",key:"astro"},{type:"file",pattern:"astro.config.*"}]},{name:"Solid",slug:"solid",category:"frontend",signals:[{type:"dependency",key:"solid-js"}]},{name:"Remix",slug:"remix",category:"frontend",signals:[{type:"dependency",key:"@remix-run/react"}]},{name:"Gatsby",slug:"gatsby",category:"frontend",signals:[{type:"dependency",key:"gatsby"},{type:"file",pattern:"gatsby-config.*"}]},{name:"Qwik",slug:"qwik",category:"frontend",signals:[{type:"dependency",key:"@builder.io/qwik"}]},{name:"Vercel (SvelteKit)",slug:"adapter-vercel",category:"hosting",signals:[{type:"dependency",key:"@sveltejs/adapter-vercel"},{type:"devDependency",key:"@sveltejs/adapter-vercel"}]},{name:"Node (SvelteKit)",slug:"adapter-node",category:"hosting",signals:[{type:"dependency",key:"@sveltejs/adapter-node"},{type:"devDependency",key:"@sveltejs/adapter-node"}]},{name:"Static (SvelteKit)",slug:"adapter-static",category:"hosting",signals:[{type:"dependency",key:"@sveltejs/adapter-static"},{type:"devDependency",key:"@sveltejs/adapter-static"}]},{name:"Cloudflare (SvelteKit)",slug:"adapter-cloudflare",category:"hosting",signals:[{type:"dependency",key:"@sveltejs/adapter-cloudflare"},{type:"devDependency",key:"@sveltejs/adapter-cloudflare"}]},{name:"Netlify (SvelteKit)",slug:"adapter-netlify",category:"hosting",signals:[{type:"dependency",key:"@sveltejs/adapter-netlify"},{type:"devDependency",key:"@sveltejs/adapter-netlify"}]},{name:"Tailwind CSS",slug:"tailwind",category:"css",signals:[{type:"dependency",key:"tailwindcss"},{type:"devDependency",key:"tailwindcss"},{type:"file",pattern:"tailwind.config.*"}]},{name:"Bootstrap",slug:"bootstrap",category:"css",signals:[{type:"dependency",key:"bootstrap"}]},{name:"Styled Components",slug:"styled-components",category:"css",signals:[{type:"dependency",key:"styled-components"}]},{name:"shadcn/ui",slug:"shadcn",category:"ui",signals:[{type:"file",pattern:"components.json"},{type:"dependency",key:"@radix-ui/react-dialog"}]},{name:"Material UI",slug:"mui",category:"ui",signals:[{type:"dependency",key:"@mui/material"}]},{name:"Chakra UI",slug:"chakra",category:"ui",signals:[{type:"dependency",key:"@chakra-ui/react"}]},{name:"Ant Design",slug:"antd",category:"ui",signals:[{type:"dependency",key:"antd"}]},{name:"Redux",slug:"redux",category:"state",signals:[{type:"dependency",key:"@reduxjs/toolkit"}]},{name:"Zustand",slug:"zustand",category:"state",signals:[{type:"dependency",key:"zustand"}]},{name:"Jotai",slug:"jotai",category:"state",signals:[{type:"dependency",key:"jotai"}]},{name:"Pinia",slug:"pinia",category:"state",signals:[{type:"dependency",key:"pinia"}]},{name:"Express",slug:"express",category:"backend",signals:[{type:"dependency",key:"express"}]},{name:"Fastify",slug:"fastify",category:"backend",signals:[{type:"dependency",key:"fastify"}]},{name:"Hono",slug:"hono",category:"backend",signals:[{type:"dependency",key:"hono"}]},{name:"Elysia",slug:"elysia",category:"backend",signals:[{type:"dependency",key:"elysia"}]},{name:"NestJS",slug:"nestjs",category:"backend",signals:[{type:"dependency",key:"@nestjs/core"}]},{name:"Koa",slug:"koa",category:"backend",signals:[{type:"dependency",key:"koa"}]},{name:"Django",slug:"django",category:"backend",signals:[{type:"file",pattern:"manage.py"},{type:"file",pattern:"settings.py"}]},{name:"Flask",slug:"flask",category:"backend",signals:[{type:"content",pattern:"app.py",key:"flask"}]},{name:"FastAPI",slug:"fastapi",category:"backend",signals:[{type:"content",pattern:"main.py",key:"fastapi"}]},{name:"Rails",slug:"rails",category:"backend",signals:[{type:"content",pattern:"Gemfile",key:"rails"},{type:"content",pattern:"Gemfile.lock",key:"rails ("},{type:"file",pattern:"config/application.rb"},{type:"file",pattern:"config/routes.rb"}]},{name:"Spring Boot",slug:"spring",category:"backend",signals:[{type:"content",pattern:"pom.xml",key:"spring-boot"},{type:"content",pattern:"build.gradle",key:"springframework.boot"},{type:"content",pattern:"build.gradle.kts",key:"springframework.boot"},{type:"content",pattern:"gradle/libs.versions.toml",key:"springframework.boot"}]},{name:"Vapor",slug:"vapor",category:"backend",signals:[{type:"content",pattern:"Package.swift",key:"vapor/vapor"},{type:"content",pattern:"Package.swift",key:'product(name: "Vapor"'},{type:"content",pattern:"Package.swift",key:"product(name: 'Vapor'"},{type:"file",pattern:"Sources/App/configure.swift"}]},{name:"Hummingbird",slug:"hummingbird",category:"backend",signals:[{type:"content",pattern:"Package.swift",key:"hummingbird-project/hummingbird"},{type:"content",pattern:"Package.swift",key:'product(name: "Hummingbird"'},{type:"content",pattern:"Package.swift",key:"product(name: 'Hummingbird'"}]},{name:"Prisma",slug:"prisma",category:"database",signals:[{type:"dependency",key:"prisma"},{type:"devDependency",key:"prisma"},{type:"file",pattern:"prisma/schema.prisma"}]},{name:"Drizzle",slug:"drizzle",category:"database",signals:[{type:"dependency",key:"drizzle-orm"},{type:"file",pattern:"drizzle.config.*"}]},{name:"TypeORM",slug:"typeorm",category:"database",signals:[{type:"dependency",key:"typeorm"}]},{name:"Mongoose",slug:"mongoose",category:"database",signals:[{type:"dependency",key:"mongoose"}]},{name:"Vite",slug:"vite",category:"build",signals:[{type:"dependency",key:"vite"},{type:"devDependency",key:"vite"},{type:"file",pattern:"vite.config.*"}]},{name:"webpack",slug:"webpack",category:"build",signals:[{type:"dependency",key:"webpack"},{type:"devDependency",key:"webpack"},{type:"file",pattern:"webpack.config.*"}]},{name:"esbuild",slug:"esbuild",category:"build",signals:[{type:"dependency",key:"esbuild"},{type:"devDependency",key:"esbuild"}]},{name:"Turbopack",slug:"turbopack",category:"build",signals:[{type:"file",pattern:"turbo.json"}]},{name:"Jest",slug:"jest",category:"testing",signals:[{type:"devDependency",key:"jest"},{type:"file",pattern:"jest.config.*"}]},{name:"Vitest",slug:"vitest",category:"testing",signals:[{type:"devDependency",key:"vitest"}]},{name:"Playwright",slug:"playwright",category:"testing",signals:[{type:"devDependency",key:"@playwright/test"},{type:"file",pattern:"playwright.config.*"}]},{name:"Cypress",slug:"cypress",category:"testing",signals:[{type:"devDependency",key:"cypress"},{type:"file",pattern:"cypress.config.*"}]},{name:"Turborepo",slug:"turborepo",category:"monorepo",signals:[{type:"devDependency",key:"turbo"},{type:"file",pattern:"turbo.json"}]},{name:"Nx",slug:"nx",category:"monorepo",signals:[{type:"devDependency",key:"nx"},{type:"file",pattern:"nx.json"}]},{name:"Lerna",slug:"lerna",category:"monorepo",signals:[{type:"devDependency",key:"lerna"},{type:"file",pattern:"lerna.json"}]},{name:"MCP SDK",slug:"mcp",category:"ai",signals:[{type:"dependency",key:"@modelcontextprotocol/sdk"}]},{name:"Anthropic SDK",slug:"anthropic",category:"ai",signals:[{type:"dependency",key:"@anthropic-ai/sdk"}]},{name:"OpenAI SDK",slug:"openai",category:"ai",signals:[{type:"dependency",key:"openai"}]},{name:"LangChain",slug:"langchain",category:"ai",signals:[{type:"dependency",key:"langchain"}]},{name:"Vercel",slug:"vercel",category:"hosting",signals:[{type:"file",pattern:"vercel.json"}]},{name:"Netlify",slug:"netlify",category:"hosting",signals:[{type:"file",pattern:"netlify.toml"}]},{name:"Docker",slug:"docker",category:"hosting",signals:[{type:"file",pattern:"Dockerfile"},{type:"file",pattern:"docker-compose.yml"}]},{name:"Cloudflare Workers",slug:"cloudflare",category:"hosting",signals:[{type:"file",pattern:"wrangler.toml"},{type:"dependency",key:"wrangler"}]},{name:"GitHub Actions",slug:"github-actions",category:"cicd",signals:[{type:"file",pattern:".github/workflows/*.yml"}]},{name:"Commander.js",slug:"commander",category:"cli",signals:[{type:"dependency",key:"commander"}]}];function kI($){let Z=S($,"Cargo.toml");if(Z===null)return null;let Q=Z.match(/^\s*\[package\][\s\S]*?^\s*name\s*=\s*"([^"]+)"/m);return Q?Q[1]:null}function hI($){let Z=S($,"Cargo.toml");return Z!==null&&/^\s*\[\[bin\]\]/m.test(Z)}function uI($,Z){if(Z?.keywords?.some((z)=>/^sdk(?:\s|-|$)|-sdk$/i.test(z)))return'package.json keywords contains "sdk"';if(Z?.name&&/(?:^|[-_/])sdk(?:[-_/]|$)/i.test(Z.name))return`package.json name "${Z.name}" → sdk`;let Q=kI($);if(Q&&/(?:^|[-_])sdk(?:[-_]|$)/i.test(Q))return`Cargo.toml name "${Q}" → sdk`;return null}function fI($){let Z=["manifest.json","public/manifest.json","src/manifest.json","app/manifest.json","extension/manifest.json","dist/manifest.json"];for(let Q of Z){let z=S($,Q);if(z===null)continue;try{let X=JSON.parse(z);if(typeof X.manifest_version==="number")return`${Q} manifest_version ${X.manifest_version} (browser extension)`}catch{}}return null}function mI($){let Z=/(numpy|pandas|jupyter|scikit-learn|sklearn|pytorch|tensorflow|matplotlib|scipy)/i,Q=S($,"pyproject.toml");if(Q!==null){let X=Q.match(Z);if(X)return`pyproject.toml depends on ${X[1]}`}let z=S($,"requirements.txt");if(z!==null){let X=z.match(Z);if(X)return`requirements.txt contains ${X[1]}`}return null}function pI($,Z){let Q=["react-native","expo","@capacitor/core","@ionic/core"];if(Z){for(let z of Q)if(Z.dependencies?.[z]||Z.devDependencies?.[z])return`${z} dependency`}if(I($,"ios")&&I($,"android"))return"ios/ + android/ dirs";return null}function lI($,Z){let Q=S($,"Cargo.toml");if(Q!==null){if(/crate-type\s*=\s*\[[^\]]*"cdylib"/.test(Q))return'Cargo.toml crate-type = ["cdylib"]';if(/wasm-bindgen|wasm-pack/i.test(Q))return"Cargo.toml wasm-bindgen/wasm-pack"}let z=S($,"build.zig");if(z!==null&&/\.wasm\b|wasm32|setOutputFormat\(\.wasm/i.test(z))return"build.zig wasm target";if(Z?.keywords?.some((X)=>/^wasm(?:-|$)|webassembly/i.test(X)))return'package.json keywords contains "wasm"';return null}function cI($,Z){if(!I($,"index.html"))return null;if(Z?.dependencies||Z?.devDependencies){let Q={...Z.dependencies??{},...Z.devDependencies??{}};if(["react","vue","svelte","@sveltejs/kit","next","nuxt","astro","gatsby","solid-js","qwik"].some((X)=>Q[X]))return null}return"index.html (vanilla, no frontend framework)"}function dI($,Z){if(Z?.name&&/specification|^@.*\/spec/i.test(Z.name))return`package name "${Z.name}" → documentation`;if(Z?.keywords?.some((Q)=>/^(specification|format-spec|standard)$/i.test(Q)))return'package keywords contains "specification"';if(Z?.bin)return null;if(Z?.files&&Z.files.length>0){let Q=/^(dist|src|lib|build|bin)(\/|$)|\/(dist|src|lib|build|bin)(\/|$)|(\.|\/)(js|ts|tsx|jsx|mjs|cjs|py|rs|go)$/,z=Z.files.some((H)=>Q.test(H)),X=Z.files.some((H)=>/\.(md|MD)$|examples?\//.test(H)||H==="README.md"||H==="docs"||H==="docs/");if(!z&&X)return"package.json files = docs/examples only (no source)"}return null}function iI($,Z,Q){let z=Q.find((X)=>X.slug==="astro"||X.slug==="gatsby");if(z)return`${z.name} (static-site framework)`;if(Z?.keywords?.some((X)=>/^(website|marketing|landing|brochure|portfolio)$/i.test(X)))return'package keywords contains "website"/"marketing"/"landing"';return null}function nI($,Z){if(!Z)return null;let Q={...Z.dependencies??{},...Z.devDependencies??{}},z=["@clerk/nextjs","@clerk/clerk-react","next-auth","@auth/core","auth0","@auth0/nextjs-auth0"],X=["stripe","@stripe/stripe-js","lemonsqueezy"],H=z.some((J)=>Q[J]),U=X.some((J)=>Q[J]);if(H&&U)return"auth + payment dependencies";return null}function rI($,Z,Q){if(Z?.keywords?.some((H)=>/mcpaas/i.test(H)))return'package keywords contains "mcpaas"';if(Z?.name&&/mcpaas/i.test(Z.name))return`package name "${Z.name}" → mcpaas`;let z=Q.some((H)=>H.slug==="mcp"),X=Q.some((H)=>H.category==="database");if(z&&X&&Z?.dependencies&&Object.keys(Z.dependencies).length>10)return"MCP + database + complex deps (platform shape)";return null}function sI($,Z){if(!Z?.private)return null;if(!(!!Z.workspaces||I($,"pnpm-workspace.yaml")))return null;return"private workspace + multi-package"}var oI=new Set(["node_modules","dist","build","out","vendor","target","coverage","docs","doc","e2e","tests","test","__tests__","scripts","deploy","bin","public","examples","example","fixtures","assets","static","migrations","config","contracts","proto","protos"]),F3=/^(Python|Go|Rust|Ruby|Java|Kotlin)$/,aI=new Set(["frontend","backend","database","css","ui","state"]);function tI($){if(I($,"pyproject.toml")||I($,"manage.py")||I($,"setup.py")||h8($,"requirements*.txt"))return!0;if(I($,"go.mod"))return!0;if(I($,"Cargo.toml"))return!0;if(I($,"Gemfile"))return!0;if(I($,"pom.xml")||h8($,"build.gradle*"))return!0;if(Y$($).length>0)return!0;let Z=W0($);if(Z&&Object.keys(Z.dependencies??{}).length>0)return!0;return!1}function u8($){return e2($,()=>eI($))}function eI($){let Z=v($)??[],Q=[];for(let z of Z){if(!z.isDirectory()||z.name.startsWith(".")||oI.has(z.name))continue;let X=P3($,z.name);if(!tI(X))continue;let H=m8(X);if(!H)continue;let U=f8(X).filter((Y)=>aI.has(Y.category)),J=U.find((Y)=>Y.category==="frontend"),G=U.find((Y)=>Y.category==="backend"),V=J??G??U[0]??null;Q.push({name:z.name,language:H,topFramework:V?.name??null,frontend:!!J,backend:!!G||F3.test(H),hasFramework:!!V,appRoot:I(X,"manage.py")||I(X,"config.ru")||I(X,"bin/rails")||I(X,"artisan")})}return Q}function $O($,Z){if(Z?.workspaces||I($,"pnpm-workspace.yaml"))return null;let Q=u8($),z=new Set(Q.map((X)=>X.language));if(Q.length<2||z.size<2)return null;if(!Q.some((X)=>X.frontend)||!Q.some((X)=>X.backend))return null;return`polyglot: ${Q.map((X)=>`${X.name}/ (${X.language})`).join(", ")}`}function R3($){let Z=u8($);if(Z.length<2)return null;let Q=(U)=>(U.appRoot?2:0)+(F3.test(U.language)?2:0)+(U.hasFramework?1:0)+(U.frontend?0.5:0),z=[...Z].sort((U,J)=>Q(J)-Q(U)),X=new Set,H=[];for(let U of z){if(X.has(U.language))continue;X.add(U.language);let J=U.frontend?"frontend":U.backend?"backend":"service";H.push(U.topFramework?`${U.language} (${U.topFramework} · ${J})`:`${U.language} (${J})`)}return H.join("; ")}function W0($){let Z=S($,"package.json");if(Z===null)return null;try{return JSON.parse(Z)}catch{return null}}function h8($,Z){if(!Z.includes("*"))return I($,Z);let Q=Z.split("/");if(Q.length===1){let J=Z.split("*")[0];return(v($)??[]).some((G)=>G.name.startsWith(J))}let z=P3(...Q.slice(0,-1)),X=Q[Q.length-1],H=X.split("*")[0],U=X.split("*")[1]||"";return(v($,z)??[]).some((J)=>J.name.startsWith(H)&&J.name.endsWith(U))}function ZO($,Z,Q){switch($.type){case"dependency":return!!Z?.dependencies?.[$.key];case"devDependency":return!!Z?.devDependencies?.[$.key];case"anyDependency":{let z=$.key??"";return!!(Z?.dependencies?.[z]||Z?.devDependencies?.[z])}case"file":return h8(Q,$.pattern);case"content":{if(!$.pattern||!$.key)return!1;if(!h8(Q,$.pattern))return!1;let z=S(Q,$.pattern);return z!==null&&z.toLowerCase().includes($.key.toLowerCase())}default:return!1}}function f8($){let Z=W0($);return M3.map((Q)=>{let X=Q.signals.filter((H)=>ZO(H,Z,$)).length/Q.signals.length;return{name:Q.name,slug:Q.slug,category:Q.category,confidence:X}}).filter((Q)=>Q.confidence>0).sort((Q,z)=>z.confidence-Q.confidence)}function m8($){let Z=W0($);if(Z?.devDependencies?.typescript||Z?.dependencies?.typescript)return"TypeScript";if(I($,"tsconfig.json"))return"TypeScript";if(I($,"Cargo.toml"))return"Rust";if(I($,"go.mod"))return"Go";if(Y$($).length>0)return"C#";if(I($,"pyproject.toml")||I($,"setup.py"))return"Python";if(I($,"Gemfile"))return"Ruby";if(Y1($)){let Q=X6($);if(Q)return Q.mainLanguage==="Java/Kotlin"?"Kotlin":Q.mainLanguage;return"Java"}if(I($,"Package.swift"))return"Swift";if(I($,"build.zig"))return"Zig";if(I($,"pubspec.yaml"))return"Dart";if(Z)return"JavaScript";return""}function N3($){let Z=W0($),Q=f8($),z=[],X=dI($,Z);if(X)return z.push(X),{type:"documentation",found:z};let H=uI($,Z);if(H)return z.push(H),{type:"sdk",found:z};let U=fI($);if(U)return z.push(U),{type:"extension",found:z};let J=rI($,Z,Q);if(J)return z.push(J),{type:"mcpaas",found:z};let G=nI($,Z);if(G)return z.push(G),{type:"saas",found:z};let V=lI($,Z);if(V)return z.push(V),{type:"wasm",found:z};let Y=S8($);if(Y)return z.push(Y.found),{type:Y.appType,found:z};let W=b8($);if(W)return z.push(W.found),{type:W.appType,found:z};let B=x8($);if(B)return z.push(B.found),{type:B.appType,found:z};let K=X6($);if(K)return z.push(K.found),{type:K.appType,found:z};let L=g8($);if(L)return z.push(L.found),{type:L.appType,found:z};let q=J6($);if(q)return z.push(q.found),{type:q.appType,found:z};let D=pI($,Z);if(D)return z.push(D),{type:"mobile",found:z};if(Q.some((j)=>j.slug==="mcp"))return z.push("MCP SDK signal"),{type:"mcp",found:z};if(Z?.bin)return z.push("package.json bin"),{type:"cli",found:z};if(hI($))return z.push("Cargo.toml [[bin]]"),{type:"cli",found:z};if(I($,"build.zig")){if(z.push("build.zig"),I($,"src/main.zig"))return z.push("src/main.zig"),{type:"cli",found:z};if(I($,"src/root.zig"))return z.push("src/root.zig"),{type:"library",found:z}}let _=Q.some((j)=>j.slug==="svelte"||j.slug==="sveltekit");if(Z?.private===!0&&(I($,"pnpm-workspace.yaml")||Z?.workspaces!==void 0)&&_)return z.push("private workspace","Svelte"),{type:"framework",found:z};if(_)return z.push("Svelte/SvelteKit"),{type:"svelte",found:z};let F=Q.some((j)=>j.category==="frontend"),R=Q.some((j)=>j.category==="backend");if(Z?.private&&(Z.workspaces||I($,"pnpm-workspace.yaml"))&&F&&R)return z.push("private workspace + frontend + backend frameworks"),{type:"enterprise",found:z};let N=sI($,Z);if(N)return z.push(N),{type:"monorepo-root",found:z};let w=iI($,Z,Q);if(w)return z.push(w),{type:"website",found:z};if(Q.some((j)=>j.slug==="nextjs"||j.slug==="nuxt"))return z.push(Q.find((j)=>j.slug==="nextjs")?"Next.js":"Nuxt"),{type:"fullstack",found:z};let E=Q.some((j)=>j.category==="frontend"),n=Q.some((j)=>j.category==="backend");if(E&&n)return z.push("frontend framework","backend framework"),{type:"fullstack",found:z};if(E)return z.push("frontend framework"),{type:"frontend",found:z};if(n)return z.push("backend framework"),{type:"backend",found:z};let a=mI($);if(a)return z.push(a),{type:"data-science",found:z};let g=cI($,Z);if(g)return z.push(g),{type:"html",found:z};let A=$O($,Z);if(A)return z.push(A),{type:"fullstack",found:z};if(Z?.main&&!Z?.bin)return z.push("package.json main (no bin)"),{type:"library",found:z};return z.push(y2),{type:"library",found:z}}function T3($){if(I($,"bunfig.toml"))return"Bun";if(I($,"deno.json")||I($,"deno.jsonc"))return"Deno";if(W0($))return"Node.js";if(I($,"Cargo.toml"))return"Rust";if(I($,"go.mod"))return"Go";if(Y$($).length>0)return".NET";if(I($,"pubspec.yaml"))return"Dart";return""}var QO=new Set(["npm","pnpm","yarn","bun"]);function zO($){let Z=W0($)?.packageManager;if(typeof Z!=="string")return"";let Q=/^([a-z]+)@/i.exec(Z.trim())?.[1]?.toLowerCase()??"";return QO.has(Q)?Q:""}function XO($){if(I($,"pubspec.yaml"))return"pub";if(I($,"go.mod"))return"go modules";if(Y$($).length>0)return"NuGet";if(I($,"pom.xml"))return"maven";return["build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts"].some((Q)=>I($,Q))?"gradle":""}var HO=[["bun.lockb","bun"],["bun.lock","bun"],["pnpm-lock.yaml","pnpm"],["yarn.lock","yarn"],["package-lock.json","npm"]];function A3($){return XO($)||zO($)||(HO.find(([Z])=>I($,Z))?.[1]??"")}function C3($){if(I($,".github/workflows"))return"GitHub Actions";if(I($,".gitlab-ci.yml"))return"GitLab CI";if(I($,".circleci"))return"CircleCI";if(I($,"Jenkinsfile"))return"Jenkins";return null}function j3($){if(I($,"vercel.json"))return"Vercel";if(I($,"netlify.toml"))return"Netlify";if(I($,"wrangler.toml"))return"Cloudflare";if(I($,"fly.toml"))return"Fly.io";if(I($,"render.yaml"))return"Render";return null}var UO=["svelte.config.js","vite.config.ts","vite.config.js","vite.config.mts","vite.config.mjs"];function JO($){for(let z of UO){let X=S($,z)?.match(/@sveltejs\/adapter-(\w+)/);if(X)return X[1]}let Z=W0($);return Object.keys({...Z?.dependencies,...Z?.devDependencies}).map((z)=>/^@sveltejs\/adapter-(\w+)$/.exec(z)?.[1]).find(Boolean)??null}function w3($){let Z=JO($);if(Z)switch(Z){case"vercel":return"Vercel";case"node":return"Node";case"static":return"Static";case"cloudflare":return"Cloudflare";case"netlify":return"Netlify";case"auto":return"Auto";default:return Z}return null}function q1($){let Z=$?.devDependencies?.vite??$?.dependencies?.vite,Q=typeof Z==="string"?/\d+/.exec(Z)?.[0]:void 0;return Q===void 0?"Vite":`Vite ${Q}`}function S3($){let Z=W0($);if(Z?.devDependencies?.vite||Z?.dependencies?.vite)return q1(Z);if(Z?.devDependencies?.webpack||Z?.dependencies?.webpack)return"webpack";if(Z?.devDependencies?.esbuild||Z?.dependencies?.esbuild)return"esbuild";if(I($,"tsconfig.json")&&Z?.devDependencies?.typescript)return"TypeScript (tsc)";return null}function p8($){return["package.json","Cargo.toml","pyproject.toml","go.mod","build.zig","build.zig.zon","src/index.ts","src/index.js","src/main.ts","src/cli.ts","src/main.rs","src/lib.rs","src/main.zig","src/root.zig","src/__init__.py","main.py","__main__.py","main.go","cmd/main.go","README.md","SPECIFICATION.md","BINARY-FORMAT.md","tsconfig.json","wrangler.toml","vercel.json"].filter((Q)=>I($,Q))}function l8($,Z){let Q={};if(Z?.scripts){for(let z of["build","test","lint","dev","start"])if(Z.scripts[z]){let X=I($,"bun.lock")||I($,"bun.lockb")?"bun run":"npm run";Q[z]=`${X} ${z}`}}if(I($,"Cargo.toml")){if(!Q.build)Q.build="cargo build --release";if(!Q.test)Q.test="cargo test";if(!Q.lint&&GO($))Q.lint="cargo clippy"}if(I($,"build.zig")){if(!Q.build)Q.build="zig build";if(!Q.test&&/\.step\(\s*"test"/.test(K1($,"build.zig")))Q.test="zig build test"}if(I($,"go.mod")){if(!Q.build)Q.build="go build ./...";if(!Q.test)Q.test="go test ./..."}if(!Q.test&&VO($))Q.test="pytest";return Q}function K1($,Z){return S($,Z)??""}function GO($){if(I($,"clippy.toml")||I($,".clippy.toml"))return!0;return/^\s*\[(workspace\.)?lints\.clippy\]/m.test(K1($,"Cargo.toml"))}function VO($){if(I($,"pytest.ini")||I($,"conftest.py"))return!0;return["pyproject.toml","setup.cfg","tox.ini"].some((Z)=>/\bpytest\b/.test(K1($,Z)))}function E3($,Z,Q,z){let X=[];if(z&&z!=="Unknown")X.push(z);let H=new Set(["frontend","backend","database","build","css","state","monorepo"]);for(let U of Q)if(H.has(U.category))X.push(U.name);if(I($,"bunfig.toml"))X.push("Bun");else if(I($,"deno.json")||I($,"deno.jsonc"))X.push("Deno");if(X.length<3&&Z?.dependencies){let U=Object.keys(Z.dependencies).slice(0,5);for(let J of U)if(!X.some((G)=>G.toLowerCase().includes(J.toLowerCase())))X.push(J)}return X}function YO($){let Z=$?.dependencies?.svelte??$?.devDependencies?.svelte,Q=typeof Z==="string"?/\d+/.exec(Z)?.[0]:void 0;return Q===void 0?NaN:Number(Q)}function b3($){return D1($).data}function D1($){let Z=W0($),Q=f8($),z=N3($),X=z.type,H=z.found.some((y)=>y.startsWith("polyglot:")),U=H&&R3($)||m8($),J=T3($),G=A3($),V=C3($),Y=j3($),W=S3($),B=Q.find((y)=>y.slug==="sveltekit")??Q.find((y)=>y.category==="frontend"),K=Q.find((y)=>y.category==="css"),L=Q.find((y)=>y.category==="ui"),q=Q.find((y)=>y.category==="state"),D=Q.find((y)=>y.category==="backend"),O=Q.find((y)=>y.category==="database"),_=(y)=>x2(X,y)??x2("library",y)===!0,C=X==="framework",F=Q.some((y)=>y.slug==="svelte"||y.slug==="sveltekit"),R=C&&F?"svelte":C?null:null,N=X==="svelte"||R==="svelte",w=N?w3($):null,P=N&&Q.some((y)=>y.slug==="sveltekit"),E={},n=m.filter((y)=>y.path.startsWith("stack."));for(let y of n){let k=y.path.replace("stack.","");switch(k){case"frontend":E[k]=B?.name??"";break;case"css_framework":E[k]=K?.name??"";break;case"ui_library":E[k]=L?.name??"";break;case"state_management":E[k]=q?.name??(N&&YO(Z)>=5?"Runes":"");break;case"backend":E[k]=N?P?"SvelteKit":D?.name??"":D?.name??"";break;case"api_type":E[k]=P?"Server Routes":"";break;case"runtime":E[k]=J;break;case"database":E[k]=O?.name??"";break;case"connection":E[k]=O?.name??"";break;case"hosting":if(N&&w)E[k]=w;else E[k]=Y??"";break;case"build":E[k]=P?q1(Z):W??"";break;case"cicd":E[k]=V??"";break;case"package_manager":E[k]=G;break;default:E[k]="";break}}let a={};for(let y of n){let k=y.path.replace("stack.","");a[k]=_(y)?E[k]:"slotignored"}let g={},A=m.filter((y)=>y.path.startsWith("monorepo."));for(let y of A){let k=y.path.replace("monorepo.","");if(!_(y))g[k]="slotignored";else g[k]=""}let j={name:Z?.name??$.split("/").pop()??"project",goal:H?"":Z?.description??"",main_language:U,type:X};if(C&&R)j.framework=R;let c=E3($,Z,Q,H?m8($):U);if(H){for(let y of u8($))for(let k of[y.language,y.topFramework])if(k&&!c.includes(k))c.push(k)}let q0=p8($),v1=l8($,Z),K6={faf_version:_3,project:j,stack:a,human_context:{who:"",what:H?"":Z?.description??"",why:"",where:"",when:"",how:""},monorepo:g,_meta:{found:z.found}};if(c.length>0)K6.tech_stack=c;if(q0.length>0)K6.key_files=q0;if(Object.keys(v1).length>0)K6.commands=v1;return{data:K6,facts:E}}var y3={MIN_LENGTH:8,MAX_LENGTH:280},WO=[/^(see|see\s+the?)\s+readme/i,/^(tbd|todo|fixme|coming\s+soon)\b/i,/^(software|application|app|project|tool|library|framework)\.?$/i,/^(for\s+users|for\s+developers)\.?$/i,/^(description|goal|name|title)\.?$/i,/^lorem\s+ipsum/i,/^example(\s+\w+)?\.?$/i];function P0($){let Z=$.trim();if(Z.length<y3.MIN_LENGTH)return!1;if(Z.length>y3.MAX_LENGTH)return!1;if(WO.some((Q)=>Q.test(Z)))return!1;if(/^[\s|\-*+]/.test(Z))return!1;if(Z.split(`
|
|
260
|
-
`).length>4)return!1;return!0}function
|
|
259
|
+
`).replace(/<[^>]+>/g,"").replace(/!\[[^\]]*\]\([^)]*\)/g,"").trim()}function R2($){return $.replace(/\s+/g," ").replace(/[#*`>]/g,"").trim().slice(0,280)}function gI($){if(!$)return 0;return($.match(/\[[^\]]*\]\([^)]*\)/g)??[]).join("").length/$.length}function W$($,Z){let Q=new RegExp(`##?\\s+(${Z})\\s*\\n+([\\s\\S]+?)(?:\\n\\n|\\n##?|$)`,"i"),z=$.match(Q);if(!z||!z[2]||z[2].trim().length<=20||gI(z[2])>0.4)return null;return{body:R2(z[2]),heading:z[1].trim()}}function vI($){let Z=$.trim();if(/^>/.test(Z))return!0;if(/\b(nightly (release|build)|pre-?release|work[-\s]in[-\s]progress|rough edges|early (access|testing|preview)|use at your own risk|not (yet )?production[-\s]?ready|expect (rough|breaking)|experimental release)\b/i.test(Z))return!0;let Q=Z.split(/[·|]/).map((z)=>z.trim()).filter(Boolean);if(Q.length>=3&&Q.every((z)=>z.length<=24))return!0;return!1}function G6($,Z,Q=30){for(let z of Z){let X=$.match(z);if(X&&X[1]&&X[1].trim().length>=Q)return R2(X[1])}return null}function kI($,Z){if($?.description&&$.description.length>20)return $0(R2($.description),"package.json:description",0.95);let Q=W$(Z,"Purpose|What|About|Overview|Description");if(Q)return $0(Q.body,`README:## ${Q.heading}`,0.8);let z=Z.split(/\n\s*\n/).map((H)=>H.replace(/\s+/g," ").trim()).find((H)=>H.length>30&&!H.startsWith("#")&&!vI(H));if(z)return $0(R2(z),"README:first-paragraph",0.5);let X=G6(Z,[/(?:core|main|primary)\s+(?:problem|challenge)(?:\s+is)?\s*:?\s*([^.\n]{30,})/i,/solves?\s+(?:the\s+)?(?:problem\s+of\s+)?([^.\n]{30,})/i]);return X?$0(X,"README:problem-heuristic",0.6):null}function hI($){let Z=W$($,"Audience|Who|Who is this for|Who it.s for");if(Z)return $0(Z.body,`README:## ${Z.heading}`,0.8);let Q=G6($,[/\b(?:designed|built|made)\s+for\s+((?:[a-z][a-z-]*\s+)?(?:developers?|teams?|engineers?|builders?|founders?)[^.\n]{0,80})/i,/\bfor\s+((?:[a-z][a-z-]*\s+)?(?:developers?|teams?|engineers?|builders?|founders?)[^.\n]{0,80})/i],8);return Q?$0(Q,"README:audience-heuristic",0.6):null}function uI($){let Z=W$($,"Why|Mission|Motivation|Rationale|Vision");if(Z)return $0(Z.body,`README:## ${Z.heading}`,0.8);let Q=G6($,[/(?:our\s+|the\s+)?(?:mission|purpose|goal)\s+is\s+([^.\n]{30,})/i,/\b(?:mission|purpose|goal)\s*:\s*([^.\n]{30,})/i,/(?:built|created|designed)\s+(?:because|to)\s+([^.\n]{30,})/i]);return Q?$0(Q,"README:mission-heuristic",0.6):null}function fI($,Z){let Q=typeof $?.repository==="string"?$.repository:$?.repository?.url;if(Q)return $0(R2(Q.replace(/^git\+/,"").replace(/\.git$/,"")),"package.json:repository",0.95);if($?.homepage)return $0(R2($.homepage),"package.json:homepage",0.9);let z=G6(Z,[/\b(?:deployed|hosted|available|published)\s+(?:on|at|via)\s+([^.\n]{3,80})/i],3);return z?$0(z,"README:deploy-heuristic",0.6):null}function mI($){let Z=W$($,"Timeline|Status|Release|Roadmap");if(Z)return $0(Z.body,`README:## ${Z.heading}`,0.8);let Q=G6($,[/\b(production\s+since\s+[^.\n]{4,60})/i,/\b((?:in\s+)?(?:production|beta|alpha|development)\s+since\s+[^.\n]{4,60})/i,/\bsince\s+((?:[A-Z][a-z]+\s+)?\d{4}[^.\n]{0,40})/],4);return Q?$0(Q,"README:since-heuristic",0.6):null}function pI($,Z){let Q=$?.scripts?Object.keys($.scripts):[],z=["start","dev","build"].filter((U)=>Q.includes(U));if(z.length)return $0(R2(z.map((U)=>`npm run ${U}`).join(", ")),"package.json:scripts",0.9);let X=W$(Z,"Usage|Getting Started|Install|Installation|Quick Start");if(X)return $0(X.body,`README:## ${X.heading}`,0.8);let H=W$(Z,"Architecture|Approach|How it works|Methodology|How");return H?$0(H.body,`README:## ${H.heading}`,0.7):null}var P3="3.0";import{join as R3}from"path";var F3=[{name:"Next.js",slug:"nextjs",category:"frontend",signals:[{type:"dependency",key:"next"},{type:"file",pattern:"next.config.*"}]},{name:"React",slug:"react",category:"frontend",signals:[{type:"dependency",key:"react"}]},{name:"SvelteKit",slug:"sveltekit",category:"frontend",signals:[{type:"anyDependency",key:"@sveltejs/kit"},{type:"file",pattern:"svelte.config.*"}]},{name:"Svelte",slug:"svelte",category:"frontend",signals:[{type:"dependency",key:"svelte"},{type:"devDependency",key:"svelte"}]},{name:"Vue.js",slug:"vue",category:"frontend",signals:[{type:"dependency",key:"vue"}]},{name:"Nuxt",slug:"nuxt",category:"frontend",signals:[{type:"dependency",key:"nuxt"},{type:"file",pattern:"nuxt.config.*"}]},{name:"Angular",slug:"angular",category:"frontend",signals:[{type:"dependency",key:"@angular/core"},{type:"file",pattern:"angular.json"}]},{name:"Astro",slug:"astro",category:"frontend",signals:[{type:"dependency",key:"astro"},{type:"file",pattern:"astro.config.*"}]},{name:"Solid",slug:"solid",category:"frontend",signals:[{type:"dependency",key:"solid-js"}]},{name:"Remix",slug:"remix",category:"frontend",signals:[{type:"dependency",key:"@remix-run/react"}]},{name:"Gatsby",slug:"gatsby",category:"frontend",signals:[{type:"dependency",key:"gatsby"},{type:"file",pattern:"gatsby-config.*"}]},{name:"Qwik",slug:"qwik",category:"frontend",signals:[{type:"dependency",key:"@builder.io/qwik"}]},{name:"Vercel (SvelteKit)",slug:"adapter-vercel",category:"hosting",signals:[{type:"dependency",key:"@sveltejs/adapter-vercel"},{type:"devDependency",key:"@sveltejs/adapter-vercel"}]},{name:"Node (SvelteKit)",slug:"adapter-node",category:"hosting",signals:[{type:"dependency",key:"@sveltejs/adapter-node"},{type:"devDependency",key:"@sveltejs/adapter-node"}]},{name:"Static (SvelteKit)",slug:"adapter-static",category:"hosting",signals:[{type:"dependency",key:"@sveltejs/adapter-static"},{type:"devDependency",key:"@sveltejs/adapter-static"}]},{name:"Cloudflare (SvelteKit)",slug:"adapter-cloudflare",category:"hosting",signals:[{type:"dependency",key:"@sveltejs/adapter-cloudflare"},{type:"devDependency",key:"@sveltejs/adapter-cloudflare"}]},{name:"Netlify (SvelteKit)",slug:"adapter-netlify",category:"hosting",signals:[{type:"dependency",key:"@sveltejs/adapter-netlify"},{type:"devDependency",key:"@sveltejs/adapter-netlify"}]},{name:"Tailwind CSS",slug:"tailwind",category:"css",signals:[{type:"dependency",key:"tailwindcss"},{type:"devDependency",key:"tailwindcss"},{type:"file",pattern:"tailwind.config.*"}]},{name:"Bootstrap",slug:"bootstrap",category:"css",signals:[{type:"dependency",key:"bootstrap"}]},{name:"Styled Components",slug:"styled-components",category:"css",signals:[{type:"dependency",key:"styled-components"}]},{name:"shadcn/ui",slug:"shadcn",category:"ui",signals:[{type:"file",pattern:"components.json"},{type:"dependency",key:"@radix-ui/react-dialog"}]},{name:"Material UI",slug:"mui",category:"ui",signals:[{type:"dependency",key:"@mui/material"}]},{name:"Chakra UI",slug:"chakra",category:"ui",signals:[{type:"dependency",key:"@chakra-ui/react"}]},{name:"Ant Design",slug:"antd",category:"ui",signals:[{type:"dependency",key:"antd"}]},{name:"Redux",slug:"redux",category:"state",signals:[{type:"dependency",key:"@reduxjs/toolkit"}]},{name:"Zustand",slug:"zustand",category:"state",signals:[{type:"dependency",key:"zustand"}]},{name:"Jotai",slug:"jotai",category:"state",signals:[{type:"dependency",key:"jotai"}]},{name:"Pinia",slug:"pinia",category:"state",signals:[{type:"dependency",key:"pinia"}]},{name:"Express",slug:"express",category:"backend",signals:[{type:"dependency",key:"express"}]},{name:"Fastify",slug:"fastify",category:"backend",signals:[{type:"dependency",key:"fastify"}]},{name:"Hono",slug:"hono",category:"backend",signals:[{type:"dependency",key:"hono"}]},{name:"Elysia",slug:"elysia",category:"backend",signals:[{type:"dependency",key:"elysia"}]},{name:"NestJS",slug:"nestjs",category:"backend",signals:[{type:"dependency",key:"@nestjs/core"}]},{name:"Koa",slug:"koa",category:"backend",signals:[{type:"dependency",key:"koa"}]},{name:"Django",slug:"django",category:"backend",signals:[{type:"file",pattern:"manage.py"},{type:"file",pattern:"settings.py"}]},{name:"Flask",slug:"flask",category:"backend",signals:[{type:"content",pattern:"app.py",key:"flask"}]},{name:"FastAPI",slug:"fastapi",category:"backend",signals:[{type:"content",pattern:"main.py",key:"fastapi"}]},{name:"Rails",slug:"rails",category:"backend",signals:[{type:"content",pattern:"Gemfile",key:"rails"},{type:"content",pattern:"Gemfile.lock",key:"rails ("},{type:"file",pattern:"config/application.rb"},{type:"file",pattern:"config/routes.rb"}]},{name:"Spring Boot",slug:"spring",category:"backend",signals:[{type:"content",pattern:"pom.xml",key:"spring-boot"},{type:"content",pattern:"build.gradle",key:"springframework.boot"},{type:"content",pattern:"build.gradle.kts",key:"springframework.boot"},{type:"content",pattern:"gradle/libs.versions.toml",key:"springframework.boot"}]},{name:"Vapor",slug:"vapor",category:"backend",signals:[{type:"content",pattern:"Package.swift",key:"vapor/vapor"},{type:"content",pattern:"Package.swift",key:'product(name: "Vapor"'},{type:"content",pattern:"Package.swift",key:"product(name: 'Vapor'"},{type:"file",pattern:"Sources/App/configure.swift"}]},{name:"Hummingbird",slug:"hummingbird",category:"backend",signals:[{type:"content",pattern:"Package.swift",key:"hummingbird-project/hummingbird"},{type:"content",pattern:"Package.swift",key:'product(name: "Hummingbird"'},{type:"content",pattern:"Package.swift",key:"product(name: 'Hummingbird'"}]},{name:"Prisma",slug:"prisma",category:"database",signals:[{type:"dependency",key:"prisma"},{type:"devDependency",key:"prisma"},{type:"file",pattern:"prisma/schema.prisma"}]},{name:"Drizzle",slug:"drizzle",category:"database",signals:[{type:"dependency",key:"drizzle-orm"},{type:"file",pattern:"drizzle.config.*"}]},{name:"TypeORM",slug:"typeorm",category:"database",signals:[{type:"dependency",key:"typeorm"}]},{name:"Mongoose",slug:"mongoose",category:"database",signals:[{type:"dependency",key:"mongoose"}]},{name:"Vite",slug:"vite",category:"build",signals:[{type:"dependency",key:"vite"},{type:"devDependency",key:"vite"},{type:"file",pattern:"vite.config.*"}]},{name:"webpack",slug:"webpack",category:"build",signals:[{type:"dependency",key:"webpack"},{type:"devDependency",key:"webpack"},{type:"file",pattern:"webpack.config.*"}]},{name:"esbuild",slug:"esbuild",category:"build",signals:[{type:"dependency",key:"esbuild"},{type:"devDependency",key:"esbuild"}]},{name:"Turbopack",slug:"turbopack",category:"build",signals:[{type:"file",pattern:"turbo.json"}]},{name:"Jest",slug:"jest",category:"testing",signals:[{type:"devDependency",key:"jest"},{type:"file",pattern:"jest.config.*"}]},{name:"Vitest",slug:"vitest",category:"testing",signals:[{type:"devDependency",key:"vitest"}]},{name:"Playwright",slug:"playwright",category:"testing",signals:[{type:"devDependency",key:"@playwright/test"},{type:"file",pattern:"playwright.config.*"}]},{name:"Cypress",slug:"cypress",category:"testing",signals:[{type:"devDependency",key:"cypress"},{type:"file",pattern:"cypress.config.*"}]},{name:"Turborepo",slug:"turborepo",category:"monorepo",signals:[{type:"devDependency",key:"turbo"},{type:"file",pattern:"turbo.json"}]},{name:"Nx",slug:"nx",category:"monorepo",signals:[{type:"devDependency",key:"nx"},{type:"file",pattern:"nx.json"}]},{name:"Lerna",slug:"lerna",category:"monorepo",signals:[{type:"devDependency",key:"lerna"},{type:"file",pattern:"lerna.json"}]},{name:"MCP SDK",slug:"mcp",category:"ai",signals:[{type:"dependency",key:"@modelcontextprotocol/sdk"}]},{name:"Anthropic SDK",slug:"anthropic",category:"ai",signals:[{type:"dependency",key:"@anthropic-ai/sdk"}]},{name:"OpenAI SDK",slug:"openai",category:"ai",signals:[{type:"dependency",key:"openai"}]},{name:"LangChain",slug:"langchain",category:"ai",signals:[{type:"dependency",key:"langchain"}]},{name:"Vercel",slug:"vercel",category:"hosting",signals:[{type:"file",pattern:"vercel.json"}]},{name:"Netlify",slug:"netlify",category:"hosting",signals:[{type:"file",pattern:"netlify.toml"}]},{name:"Docker",slug:"docker",category:"hosting",signals:[{type:"file",pattern:"Dockerfile"},{type:"file",pattern:"docker-compose.yml"}]},{name:"Cloudflare Workers",slug:"cloudflare",category:"hosting",signals:[{type:"file",pattern:"wrangler.toml"},{type:"dependency",key:"wrangler"}]},{name:"GitHub Actions",slug:"github-actions",category:"cicd",signals:[{type:"file",pattern:".github/workflows/*.yml"}]},{name:"Commander.js",slug:"commander",category:"cli",signals:[{type:"dependency",key:"commander"}]}];function lI($){let Z=S($,"Cargo.toml");if(Z===null)return null;let Q=Z.match(/^\s*\[package\][\s\S]*?^\s*name\s*=\s*"([^"]+)"/m);return Q?Q[1]:null}function cI($){let Z=S($,"Cargo.toml");return Z!==null&&/^\s*\[\[bin\]\]/m.test(Z)}function dI($,Z){if(Z?.keywords?.some((z)=>/^sdk(?:\s|-|$)|-sdk$/i.test(z)))return'package.json keywords contains "sdk"';if(Z?.name&&/(?:^|[-_/])sdk(?:[-_/]|$)/i.test(Z.name))return`package.json name "${Z.name}" → sdk`;let Q=lI($);if(Q&&/(?:^|[-_])sdk(?:[-_]|$)/i.test(Q))return`Cargo.toml name "${Q}" → sdk`;return null}function iI($){let Z=["manifest.json","public/manifest.json","src/manifest.json","app/manifest.json","extension/manifest.json","dist/manifest.json"];for(let Q of Z){let z=S($,Q);if(z===null)continue;try{let X=JSON.parse(z);if(typeof X.manifest_version==="number")return`${Q} manifest_version ${X.manifest_version} (browser extension)`}catch{}}return null}function nI($){let Z=/(numpy|pandas|jupyter|scikit-learn|sklearn|pytorch|tensorflow|matplotlib|scipy)/i,Q=S($,"pyproject.toml");if(Q!==null){let X=Q.match(Z);if(X)return`pyproject.toml depends on ${X[1]}`}let z=S($,"requirements.txt");if(z!==null){let X=z.match(Z);if(X)return`requirements.txt contains ${X[1]}`}return null}function rI($,Z){let Q=["react-native","expo","@capacitor/core","@ionic/core"];if(Z){for(let z of Q)if(Z.dependencies?.[z]||Z.devDependencies?.[z])return`${z} dependency`}if(I($,"ios")&&I($,"android"))return"ios/ + android/ dirs";return null}function sI($,Z){let Q=S($,"Cargo.toml");if(Q!==null){if(/crate-type\s*=\s*\[[^\]]*"cdylib"/.test(Q))return'Cargo.toml crate-type = ["cdylib"]';if(/wasm-bindgen|wasm-pack/i.test(Q))return"Cargo.toml wasm-bindgen/wasm-pack"}let z=S($,"build.zig");if(z!==null&&/\.wasm\b|wasm32|setOutputFormat\(\.wasm/i.test(z))return"build.zig wasm target";if(Z?.keywords?.some((X)=>/^wasm(?:-|$)|webassembly/i.test(X)))return'package.json keywords contains "wasm"';return null}function oI($,Z){if(!I($,"index.html"))return null;if(Z?.dependencies||Z?.devDependencies){let Q={...Z.dependencies??{},...Z.devDependencies??{}};if(["react","vue","svelte","@sveltejs/kit","next","nuxt","astro","gatsby","solid-js","qwik"].some((X)=>Q[X]))return null}return"index.html (vanilla, no frontend framework)"}function aI($,Z){if(Z?.name&&/specification|^@.*\/spec/i.test(Z.name))return`package name "${Z.name}" → documentation`;if(Z?.keywords?.some((Q)=>/^(specification|format-spec|standard)$/i.test(Q)))return'package keywords contains "specification"';if(Z?.bin)return null;if(Z?.files&&Z.files.length>0){let Q=/^(dist|src|lib|build|bin)(\/|$)|\/(dist|src|lib|build|bin)(\/|$)|(\.|\/)(js|ts|tsx|jsx|mjs|cjs|py|rs|go)$/,z=Z.files.some((H)=>Q.test(H)),X=Z.files.some((H)=>/\.(md|MD)$|examples?\//.test(H)||H==="README.md"||H==="docs"||H==="docs/");if(!z&&X)return"package.json files = docs/examples only (no source)"}return null}function tI($,Z,Q){let z=Q.find((X)=>X.slug==="astro"||X.slug==="gatsby");if(z)return`${z.name} (static-site framework)`;if(Z?.keywords?.some((X)=>/^(website|marketing|landing|brochure|portfolio)$/i.test(X)))return'package keywords contains "website"/"marketing"/"landing"';return null}function eI($,Z){if(!Z)return null;let Q={...Z.dependencies??{},...Z.devDependencies??{}},z=["@clerk/nextjs","@clerk/clerk-react","next-auth","@auth/core","auth0","@auth0/nextjs-auth0"],X=["stripe","@stripe/stripe-js","lemonsqueezy"],H=z.some((J)=>Q[J]),U=X.some((J)=>Q[J]);if(H&&U)return"auth + payment dependencies";return null}function $O($,Z,Q){if(Z?.keywords?.some((H)=>/mcpaas/i.test(H)))return'package keywords contains "mcpaas"';if(Z?.name&&/mcpaas/i.test(Z.name))return`package name "${Z.name}" → mcpaas`;let z=Q.some((H)=>H.slug==="mcp"),X=Q.some((H)=>H.category==="database");if(z&&X&&Z?.dependencies&&Object.keys(Z.dependencies).length>10)return"MCP + database + complex deps (platform shape)";return null}function ZO($,Z){if(!Z?.private)return null;if(!(!!Z.workspaces||I($,"pnpm-workspace.yaml")))return null;return"private workspace + multi-package"}var QO=new Set(["node_modules","dist","build","out","vendor","target","coverage","docs","doc","e2e","tests","test","__tests__","scripts","deploy","bin","public","examples","example","fixtures","assets","static","migrations","config","contracts","proto","protos"]),N3=/^(Python|Go|Rust|Ruby|Java|Kotlin)$/,zO=new Set(["frontend","backend","database","css","ui","state"]);function XO($){if(I($,"pyproject.toml")||I($,"manage.py")||I($,"setup.py")||u8($,"requirements*.txt"))return!0;if(I($,"go.mod"))return!0;if(I($,"Cargo.toml"))return!0;if(I($,"Gemfile"))return!0;if(I($,"pom.xml")||u8($,"build.gradle*"))return!0;if(Y$($).length>0)return!0;let Z=W0($);if(Z&&Object.keys(Z.dependencies??{}).length>0)return!0;return!1}function f8($){return e2($,()=>HO($))}function HO($){let Z=v($)??[],Q=[];for(let z of Z){if(!z.isDirectory()||z.name.startsWith(".")||QO.has(z.name))continue;let X=R3($,z.name);if(!XO(X))continue;let H=p8(X);if(!H)continue;let U=m8(X).filter((Y)=>zO.has(Y.category)),J=U.find((Y)=>Y.category==="frontend"),G=U.find((Y)=>Y.category==="backend"),V=J??G??U[0]??null;Q.push({name:z.name,language:H,topFramework:V?.name??null,frontend:!!J,backend:!!G||N3.test(H),hasFramework:!!V,appRoot:I(X,"manage.py")||I(X,"config.ru")||I(X,"bin/rails")||I(X,"artisan")})}return Q}function UO($,Z){if(Z?.workspaces||I($,"pnpm-workspace.yaml"))return null;let Q=f8($),z=new Set(Q.map((X)=>X.language));if(Q.length<2||z.size<2)return null;if(!Q.some((X)=>X.frontend)||!Q.some((X)=>X.backend))return null;return`polyglot: ${Q.map((X)=>`${X.name}/ (${X.language})`).join(", ")}`}function T3($){let Z=f8($);if(Z.length<2)return null;let Q=(U)=>(U.appRoot?2:0)+(N3.test(U.language)?2:0)+(U.hasFramework?1:0)+(U.frontend?0.5:0),z=[...Z].sort((U,J)=>Q(J)-Q(U)),X=new Set,H=[];for(let U of z){if(X.has(U.language))continue;X.add(U.language);let J=U.frontend?"frontend":U.backend?"backend":"service";H.push(U.topFramework?`${U.language} (${U.topFramework} · ${J})`:`${U.language} (${J})`)}return H.join("; ")}function W0($){let Z=S($,"package.json");if(Z===null)return null;try{return JSON.parse(Z)}catch{return null}}function u8($,Z){if(!Z.includes("*"))return I($,Z);let Q=Z.split("/");if(Q.length===1){let J=Z.split("*")[0];return(v($)??[]).some((G)=>G.name.startsWith(J))}let z=R3(...Q.slice(0,-1)),X=Q[Q.length-1],H=X.split("*")[0],U=X.split("*")[1]||"";return(v($,z)??[]).some((J)=>J.name.startsWith(H)&&J.name.endsWith(U))}function JO($,Z,Q){switch($.type){case"dependency":return!!Z?.dependencies?.[$.key];case"devDependency":return!!Z?.devDependencies?.[$.key];case"anyDependency":{let z=$.key??"";return!!(Z?.dependencies?.[z]||Z?.devDependencies?.[z])}case"file":return u8(Q,$.pattern);case"content":{if(!$.pattern||!$.key)return!1;if(!u8(Q,$.pattern))return!1;let z=S(Q,$.pattern);return z!==null&&z.toLowerCase().includes($.key.toLowerCase())}default:return!1}}function m8($){let Z=W0($);return F3.map((Q)=>{let X=Q.signals.filter((H)=>JO(H,Z,$)).length/Q.signals.length;return{name:Q.name,slug:Q.slug,category:Q.category,confidence:X}}).filter((Q)=>Q.confidence>0).sort((Q,z)=>z.confidence-Q.confidence)}function p8($){let Z=W0($);if(Z?.devDependencies?.typescript||Z?.dependencies?.typescript)return"TypeScript";if(I($,"tsconfig.json"))return"TypeScript";if(I($,"Cargo.toml"))return"Rust";if(I($,"go.mod"))return"Go";if(Y$($).length>0)return"C#";if(I($,"pyproject.toml")||I($,"setup.py"))return"Python";if(I($,"Gemfile"))return"Ruby";if(W1($)){let Q=X6($);if(Q)return Q.mainLanguage==="Java/Kotlin"?"Kotlin":Q.mainLanguage;return"Java"}if(I($,"Package.swift"))return"Swift";if(I($,"build.zig"))return"Zig";if(I($,"pubspec.yaml"))return"Dart";if(Z)return"JavaScript";return""}function A3($){let Z=W0($),Q=m8($),z=[],X=aI($,Z);if(X)return z.push(X),{type:"documentation",found:z};let H=dI($,Z);if(H)return z.push(H),{type:"sdk",found:z};let U=iI($);if(U)return z.push(U),{type:"extension",found:z};let J=$O($,Z,Q);if(J)return z.push(J),{type:"mcpaas",found:z};let G=eI($,Z);if(G)return z.push(G),{type:"saas",found:z};let V=sI($,Z);if(V)return z.push(V),{type:"wasm",found:z};let Y=E8($);if(Y)return z.push(Y.found),{type:Y.appType,found:z};let W=y8($);if(W)return z.push(W.found),{type:W.appType,found:z};let B=g8($);if(B)return z.push(B.found),{type:B.appType,found:z};let K=X6($);if(K)return z.push(K.found),{type:K.appType,found:z};let L=v8($);if(L)return z.push(L.found),{type:L.appType,found:z};let q=J6($);if(q)return z.push(q.found),{type:q.appType,found:z};let D=rI($,Z);if(D)return z.push(D),{type:"mobile",found:z};if(Q.some((j)=>j.slug==="mcp"))return z.push("MCP SDK signal"),{type:"mcp",found:z};if(Z?.bin)return z.push("package.json bin"),{type:"cli",found:z};if(cI($))return z.push("Cargo.toml [[bin]]"),{type:"cli",found:z};if(I($,"build.zig")){if(z.push("build.zig"),I($,"src/main.zig"))return z.push("src/main.zig"),{type:"cli",found:z};if(I($,"src/root.zig"))return z.push("src/root.zig"),{type:"library",found:z}}let _=Q.some((j)=>j.slug==="svelte"||j.slug==="sveltekit");if(Z?.private===!0&&(I($,"pnpm-workspace.yaml")||Z?.workspaces!==void 0)&&_)return z.push("private workspace","Svelte"),{type:"framework",found:z};if(_)return z.push("Svelte/SvelteKit"),{type:"svelte",found:z};let F=Q.some((j)=>j.category==="frontend"),N=Q.some((j)=>j.category==="backend");if(Z?.private&&(Z.workspaces||I($,"pnpm-workspace.yaml"))&&F&&N)return z.push("private workspace + frontend + backend frameworks"),{type:"enterprise",found:z};let T=ZO($,Z);if(T)return z.push(T),{type:"monorepo-root",found:z};let w=tI($,Z,Q);if(w)return z.push(w),{type:"website",found:z};if(Q.some((j)=>j.slug==="nextjs"||j.slug==="nuxt"))return z.push(Q.find((j)=>j.slug==="nextjs")?"Next.js":"Nuxt"),{type:"fullstack",found:z};let E=Q.some((j)=>j.category==="frontend"),n=Q.some((j)=>j.category==="backend");if(E&&n)return z.push("frontend framework","backend framework"),{type:"fullstack",found:z};if(E)return z.push("frontend framework"),{type:"frontend",found:z};if(n)return z.push("backend framework"),{type:"backend",found:z};let a=nI($);if(a)return z.push(a),{type:"data-science",found:z};let g=oI($,Z);if(g)return z.push(g),{type:"html",found:z};let A=UO($,Z);if(A)return z.push(A),{type:"fullstack",found:z};if(Z?.main&&!Z?.bin)return z.push("package.json main (no bin)"),{type:"library",found:z};return z.push(y2),{type:"library",found:z}}function C3($){if(I($,"bunfig.toml"))return"Bun";if(I($,"deno.json")||I($,"deno.jsonc"))return"Deno";if(W0($))return"Node.js";if(I($,"Cargo.toml"))return"Rust";if(I($,"go.mod"))return"Go";if(Y$($).length>0)return".NET";if(I($,"pubspec.yaml"))return"Dart";return""}var GO=new Set(["npm","pnpm","yarn","bun"]);function VO($){let Z=W0($)?.packageManager;if(typeof Z!=="string")return"";let Q=/^([a-z]+)@/i.exec(Z.trim())?.[1]?.toLowerCase()??"";return GO.has(Q)?Q:""}function YO($){if(I($,"pubspec.yaml"))return"pub";if(I($,"go.mod"))return"go modules";if(Y$($).length>0)return"NuGet";if(I($,"pom.xml"))return"maven";return["build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts"].some((Q)=>I($,Q))?"gradle":""}var WO=[["bun.lockb","bun"],["bun.lock","bun"],["pnpm-lock.yaml","pnpm"],["yarn.lock","yarn"],["package-lock.json","npm"]];function j3($){return YO($)||VO($)||(WO.find(([Z])=>I($,Z))?.[1]??"")}function w3($){if(I($,".github/workflows"))return"GitHub Actions";if(I($,".gitlab-ci.yml"))return"GitLab CI";if(I($,".circleci"))return"CircleCI";if(I($,"Jenkinsfile"))return"Jenkins";return null}function S3($){if(I($,"vercel.json"))return"Vercel";if(I($,"netlify.toml"))return"Netlify";if(I($,"wrangler.toml"))return"Cloudflare";if(I($,"fly.toml"))return"Fly.io";if(I($,"render.yaml"))return"Render";return null}var BO=["svelte.config.js","vite.config.ts","vite.config.js","vite.config.mts","vite.config.mjs"];function qO($){for(let z of BO){let X=S($,z)?.match(/@sveltejs\/adapter-(\w+)/);if(X)return X[1]}let Z=W0($);return Object.keys({...Z?.dependencies,...Z?.devDependencies}).map((z)=>/^@sveltejs\/adapter-(\w+)$/.exec(z)?.[1]).find(Boolean)??null}function E3($){let Z=qO($);if(Z)switch(Z){case"vercel":return"Vercel";case"node":return"Node";case"static":return"Static";case"cloudflare":return"Cloudflare";case"netlify":return"Netlify";case"auto":return"Auto";default:return Z}return null}function K1($){let Z=$?.devDependencies?.vite??$?.dependencies?.vite,Q=typeof Z==="string"?/\d+/.exec(Z)?.[0]:void 0;return Q===void 0?"Vite":`Vite ${Q}`}function b3($){let Z=W0($);if(Z?.devDependencies?.vite||Z?.dependencies?.vite)return K1(Z);if(Z?.devDependencies?.webpack||Z?.dependencies?.webpack)return"webpack";if(Z?.devDependencies?.esbuild||Z?.dependencies?.esbuild)return"esbuild";if(I($,"tsconfig.json")&&Z?.devDependencies?.typescript)return"TypeScript (tsc)";return null}function l8($){return["package.json","Cargo.toml","pyproject.toml","go.mod","build.zig","build.zig.zon","src/index.ts","src/index.js","src/main.ts","src/cli.ts","src/main.rs","src/lib.rs","src/main.zig","src/root.zig","src/__init__.py","main.py","__main__.py","main.go","cmd/main.go","README.md","SPECIFICATION.md","BINARY-FORMAT.md","tsconfig.json","wrangler.toml","vercel.json"].filter((Q)=>I($,Q))}function c8($,Z){let Q={};if(Z?.scripts){for(let z of["build","test","lint","dev","start"])if(Z.scripts[z]){let X=I($,"bun.lock")||I($,"bun.lockb")?"bun run":"npm run";Q[z]=`${X} ${z}`}}if(I($,"Cargo.toml")){if(!Q.build)Q.build="cargo build --release";if(!Q.test)Q.test="cargo test";if(!Q.lint&&KO($))Q.lint="cargo clippy"}if(I($,"build.zig")){if(!Q.build)Q.build="zig build";if(!Q.test&&/\.step\(\s*"test"/.test(D1($,"build.zig")))Q.test="zig build test"}if(I($,"go.mod")){if(!Q.build)Q.build="go build ./...";if(!Q.test)Q.test="go test ./..."}if(!Q.test&&DO($))Q.test="pytest";return Q}function D1($,Z){return S($,Z)??""}function KO($){if(I($,"clippy.toml")||I($,".clippy.toml"))return!0;return/^\s*\[(workspace\.)?lints\.clippy\]/m.test(D1($,"Cargo.toml"))}function DO($){if(I($,"pytest.ini")||I($,"conftest.py"))return!0;return["pyproject.toml","setup.cfg","tox.ini"].some((Z)=>/\bpytest\b/.test(D1($,Z)))}function y3($,Z,Q,z){let X=[];if(z&&z!=="Unknown")X.push(z);let H=new Set(["frontend","backend","database","build","css","state","monorepo"]);for(let U of Q)if(H.has(U.category))X.push(U.name);if(I($,"bunfig.toml"))X.push("Bun");else if(I($,"deno.json")||I($,"deno.jsonc"))X.push("Deno");if(X.length<3&&Z?.dependencies){let U=Object.keys(Z.dependencies).slice(0,5);for(let J of U)if(!X.some((G)=>G.toLowerCase().includes(J.toLowerCase())))X.push(J)}return X}function LO($){let Z=$?.dependencies?.svelte??$?.devDependencies?.svelte,Q=typeof Z==="string"?/\d+/.exec(Z)?.[0]:void 0;return Q===void 0?NaN:Number(Q)}function x3($){return L1($).data}function L1($){let Z=W0($),Q=m8($),z=A3($),X=z.type,H=z.found.some((y)=>y.startsWith("polyglot:")),U=H&&T3($)||p8($),J=C3($),G=j3($),V=w3($),Y=S3($),W=b3($),B=Q.find((y)=>y.slug==="sveltekit")??Q.find((y)=>y.category==="frontend"),K=Q.find((y)=>y.category==="css"),L=Q.find((y)=>y.category==="ui"),q=Q.find((y)=>y.category==="state"),D=Q.find((y)=>y.category==="backend"),O=Q.find((y)=>y.category==="database"),_=(y)=>x2(X,y)??x2("library",y)===!0,C=X==="framework",F=Q.some((y)=>y.slug==="svelte"||y.slug==="sveltekit"),N=C&&F?"svelte":C?null:null,T=X==="svelte"||N==="svelte",w=T?E3($):null,P=T&&Q.some((y)=>y.slug==="sveltekit"),E={},n=m.filter((y)=>y.path.startsWith("stack."));for(let y of n){let k=y.path.replace("stack.","");switch(k){case"frontend":E[k]=B?.name??"";break;case"css_framework":E[k]=K?.name??"";break;case"ui_library":E[k]=L?.name??"";break;case"state_management":E[k]=q?.name??(T&&LO(Z)>=5?"Runes":"");break;case"backend":E[k]=T?P?"SvelteKit":D?.name??"":D?.name??"";break;case"api_type":E[k]=P?"Server Routes":"";break;case"runtime":E[k]=J;break;case"database":E[k]=O?.name??"";break;case"connection":E[k]=O?.name??"";break;case"hosting":if(T&&w)E[k]=w;else E[k]=Y??"";break;case"build":E[k]=P?K1(Z):W??"";break;case"cicd":E[k]=V??"";break;case"package_manager":E[k]=G;break;default:E[k]="";break}}let a={};for(let y of n){let k=y.path.replace("stack.","");a[k]=_(y)?E[k]:"slotignored"}let g={},A=m.filter((y)=>y.path.startsWith("monorepo."));for(let y of A){let k=y.path.replace("monorepo.","");if(!_(y))g[k]="slotignored";else g[k]=""}let j={name:Z?.name??$.split("/").pop()??"project",goal:H?"":Z?.description??"",main_language:U,type:X};if(C&&N)j.framework=N;let c=y3($,Z,Q,H?p8($):U);if(H){for(let y of f8($))for(let k of[y.language,y.topFramework])if(k&&!c.includes(k))c.push(k)}let q0=l8($),k1=c8($,Z),K6={faf_version:P3,project:j,stack:a,human_context:{who:"",what:H?"":Z?.description??"",why:"",where:"",when:"",how:""},monorepo:g,_meta:{found:z.found}};if(c.length>0)K6.tech_stack=c;if(q0.length>0)K6.key_files=q0;if(Object.keys(k1).length>0)K6.commands=k1;return{data:K6,facts:E}}var g3={MIN_LENGTH:8,MAX_LENGTH:280},IO=[/^(see|see\s+the?)\s+readme/i,/^(tbd|todo|fixme|coming\s+soon)\b/i,/^(software|application|app|project|tool|library|framework)\.?$/i,/^(for\s+users|for\s+developers)\.?$/i,/^(description|goal|name|title)\.?$/i,/^lorem\s+ipsum/i,/^example(\s+\w+)?\.?$/i];function P0($){let Z=$.trim();if(Z.length<g3.MIN_LENGTH)return!1;if(Z.length>g3.MAX_LENGTH)return!1;if(IO.some((Q)=>Q.test(Z)))return!1;if(/^[\s|\-*+]/.test(Z))return!1;if(Z.split(`
|
|
260
|
+
`).length>4)return!1;return!0}function OO($){let Z=$.split(`
|
|
261
261
|
`),Q=0;while(Q<Z.length&&/^(#\s|$)/.test(Z[Q].trim()))Q++;while(Q<Z.length){let z=Z[Q].trim();if(/^\[!\[/.test(z)){Q++;continue}if(/^!\[/.test(z)){Q++;continue}if(/^<img\s/i.test(z)){Q++;continue}if(z===""){Q++;continue}break}return Z.slice(Q).join(`
|
|
262
|
-
`)}function
|
|
262
|
+
`)}function _O($){let Q=OO($).split(`
|
|
263
263
|
`),z=[];for(let X of Q){let H=X.trim();if(H===""){if(z.length>0)break;continue}if(/^(#|>|```|---|\||\s*[-*+]\s|\d+\.\s)/.test(H))break;if(/^\*\*[^*]+\*\*\s*$/.test(H)&&z.length===0)continue;z.push(H)}if(z.length===0)return null;return z.join(" ").trim()}function N2($,Z){let Q=$.split(`
|
|
264
|
-
`),z=0;while(z<Q.length){let H=Q[z].trim().match(/^(#{1,6})\s+(.+)$/);if(H&&Z.test(H[2])){let U=H[1].length,J=[];z++;while(z<Q.length){let G=Q[z].trim(),V=G.match(/^(#{1,6})\s+/);if(V&&V[1].length<=U)break;if(G===""){if(J.length>0)break;z++;continue}if(/^(>|```|---|\||\s*[-*+]\s|\d+\.\s)/.test(G))break;J.push(G),z++}if(J.length===0)return null;return J.join(" ").trim()}z++}return null}function
|
|
265
|
-
`),z=!1;for(let X of Q){let H=X.trim();if(/^\[/.test(H)){z=H==="[package]";continue}if(!z)continue;let U=H.match(new RegExp(`^${Z}\\s*=\\s*(.+)$`));if(U){let J=U[1].trim();J=J.replace(/\s*#.*$/,"").trim();let G=J.match(/^"((?:[^"\\]|\\.)*)"$/)||J.match(/^'((?:[^'\\]|\\.)*)'$/);if(G)return G[1];return J}}return null}function I1($){let Z=S($,"Cargo.toml");if(Z===null)return{};let Q=PO(Z,"description");if(Q&&P0(Q))return{project:{goal:Q}};return{}}import{join as x3}from"path";var FO=[{re:/^postgres|postgis|pgvector/,slot:"database",label:"PostgreSQL"},{re:/^mysql/,slot:"database",label:"MySQL"},{re:/^mariadb/,slot:"database",label:"MariaDB"},{re:/^mongo/,slot:"database",label:"MongoDB"},{re:/clickhouse/,slot:"database",label:"ClickHouse"},{re:/^cockroach/,slot:"database",label:"CockroachDB"},{re:/^redis|^valkey/,slot:"cache",label:"Redis"},{re:/^memcached/,slot:"cache",label:"Memcached"},{re:/elasticsearch/,slot:"search",label:"Elasticsearch"},{re:/opensearch/,slot:"search",label:"OpenSearch"},{re:/meilisearch/,slot:"search",label:"Meilisearch"},{re:/typesense/,slot:"search",label:"Typesense"},{re:/qdrant/,slot:"search",label:"Qdrant (vector)"},{re:/weaviate/,slot:"search",label:"Weaviate (vector)"},{re:/^minio/,slot:"storage",label:"MinIO (S3-compatible)"},{re:/localstack/,slot:"storage",label:"LocalStack (AWS)"},{re:/rabbitmq/,slot:"runtime",label:"RabbitMQ"},{re:/kafka/,slot:"runtime",label:"Kafka"},{re:/nats/,slot:"runtime",label:"NATS"},{re:/temporalio\/|temporal-server|temporal:/,slot:"runtime",label:"Temporal"}],RO=new Set(["node_modules",".git","dist","build","vendor","target","e2e","tests","test"]);function NO($){let Z=[],Q=(z,X)=>{for(let H of v($,z)??[])if(H.isFile()&&/^(docker-)?compose.*\.ya?ml$/i.test(H.name))Z.push(x3(z,H.name));else if(H.isDirectory()&&X>0&&!H.name.startsWith(".")&&!RO.has(H.name))Q(x3(z,H.name),X-1)};return Q(".",1),Z}function V6($){return[...$].join(" · ")}function O1($){let Z=NO($);if(Z.length===0)return{};let Q={database:new Set,cache:new Set,search:new Set,storage:new Set,runtime:new Set};for(let X of Z){let H=S($,X);if(H===null)continue;for(let U of H.matchAll(/^\s*image:\s*["']?([^\s"'#]+)/gm)){let J=U[1].toLowerCase(),G=J.replace(/:[^/]*$/,"").split("/").pop()??J,V=J.replace(/:[^/]*$/,"");for(let{re:Y,slot:W,label:B}of FO)if(Y.test(G)||Y.test(V))Q[W].add(B)}}let z={};if(Q.database.size)z.database=V6(Q.database);if(Q.cache.size)z.cache=V6(Q.cache);if(Q.search.size)z.search=V6(Q.search);if(Q.storage.size)z.storage=V6(Q.storage);if(Q.runtime.size)z.runtime=`Docker Compose (${V6(Q.runtime)})`;if(Object.keys(z).length===0&&!Q.runtime.size)return{stack:{hosting:"Docker Compose"}};return z.hosting="Docker Compose",{stack:z}}import{join as TO}from"path";var AO=new Set(["node_modules",".git","dist","build","vendor","target","e2e","docs","scripts"]),CO=[{file:"Makefile",runner:"make",targets:($)=>[...$.matchAll(/^([a-zA-Z][\w-]*)\s*:(?!=)/gm)].map((Z)=>Z[1])},{file:"justfile",runner:"just",targets:($)=>[...$.matchAll(/^([a-zA-Z][\w-]*)\s*(?:\([^)]*\))?\s*:/gm)].map((Z)=>Z[1])},{file:"Taskfile.yml",runner:"task",targets:($)=>{let Z=$.indexOf("tasks:");if(Z===-1)return[];return[...$.slice(Z).matchAll(/^\s{2}([a-zA-Z][\w-]*):/gm)].map((Q)=>Q[1])}}];function _1($,Z){for(let Q of Z){let z=$.find((X)=>Q.test(X));if(z)return z}return null}function jO($){let Z=[$];for(let Q of v($)??[])if(Q.isDirectory()&&!Q.name.startsWith(".")&&!AO.has(Q.name))Z.push(TO($,Q.name));return Z}function wO($){let Z=0;if(I($,"manage.py")||I($,"pyproject.toml")||I($,"Gemfile"))Z+=3;if(/(?:^|\/)(backend|api|server|core|app)$/.test($))Z+=2;return Z}function M1($){return e2($,()=>SO($))}function SO($){let Z=[];for(let z of jO($)){let X=z===$,H=X?"":`cd ${z.slice($.length+1)} && `;for(let U of CO){let J=S(z,U.file);if(J===null)continue;let G=U.targets(J);if(G.length===0)continue;let V={},Y=_1(G,[/^test$/i,/^tests$/i,/test-all/i,/^test-unit/i,/^test/i]),W=_1(G,[/^build$/i,/^compile$/i,/^build/i]),B=_1(G,[/^check-all$/i,/^check$/i,/^lint$/i,/^lint/i,/^fmt$/i,/^format$/i]);if(Y)V.test=`${H}${U.runner} ${Y}`;if(W)V.build=`${H}${U.runner} ${W}`;if(B)V.lint=`${H}${U.runner} ${B}`;if(Object.keys(V).length===0)continue;Z.push({score:Object.keys(V).length+(X?10:wO(z)),commands:V})}}let Q=Z.sort((z,X)=>X.score-z.score)[0];return Q?{commands:Q.commands}:{}}var EO=[".env.example",".env.sample",".env.template",".env.dist","env.example",".env.local.example"];function P1($){for(let Z of EO)if(I($,Z))return{security:{secrets:".env",example:Z}};return{}}function bO($,Z){let Q={project:{...Z.project??{},...$.project??{}},human_context:{...Z.human_context??{},...$.human_context??{}},stack:{...Z.stack??{},...$.stack??{}},commands:{...Z.commands??{},...$.commands??{}},security:{...Z.security??{},...$.security??{}}};for(let z of["project","human_context","stack","commands","security"])if(Q[z]&&Object.keys(Q[z]).length===0)delete Q[z];return Q}function F1($){return[L1($),I1($),O1($),M1($),P1($)].reduce(bO,{})}function g3($){try{let Z=s2($,{logLevel:"error"}).getIn(["project","type"],!0);return s(Z)&&typeof Z.comment==="string"&&Z.comment.includes(y2)}catch{return!1}}function R1($){let Z=b3($),Q=F1($),z={};if(Q.stack)z.stack=Q.stack;if(Q.commands)z.commands=Q.commands;if(Q.security)z.security=Q.security;let X={};if(Q.project)X.project=Q.project;if(Q.human_context)X.human_context=Q.human_context;let H=l0(l0(z,Z),X);pO(H);let J=(Z._meta?.found??[]).some((V)=>V.startsWith("polyglot:")),G=l0(H,v8($));return l0(G,{human_context:k8($,{toolingRoot:J})})}function yO($,Z){let Q=mO(Y8(Z,"updateExistingFaf: the existing .faf")),{data:z,facts:X}=D1($),H=z,U=l0(Q,F1($)),J=l0(U,H),G=l0(J,v8($)),V=vO(l0(G,{human_context:k8($)}),Q),Y=kO(xO(Z,Q,H)?hO(v3(V,Q),Q,X):v3(V,Q),Q);return k9(g9(Z,Y))}function xO($,Z,Q){if(!o(H0(Z,"project.type"))){let X=a$($)?.text;return X===void 0||!g3(X)}return!(Q._meta?.found??[]).includes(y2)}function N1($){return $.canonical?[$.path,$.canonical]:[$.path]}function H0($,Z){let[Q,z]=Z.split("."),X=$[Q];return u(X)?X[z]:void 0}function T2($,Z,Q){let[z,X]=Z.split("."),H=$[z];if(!u(H))return;if(Q===void 0?!(X in H):H[X]===Q)return;let U={...H};if(Q===void 0)delete U[X];else U[X]=Q;$[z]=U}var A2=($)=>typeof $==="string"&&$.trim()===L6;function gO($,Z){let Q=Z.map((z)=>H0($,z));return Q.some(A2)&&Q.every((z)=>o(z)||A2(z))}function v3($,Z){let Q={...$};for(let z of m){let X=N1(z);if(!gO(Z,X))continue;for(let H of X){let U=H0(Z,H);if(H0(Q,H)!==U)T2(Q,H,U)}}return Q}function C2($,Z){let[Q,z]=Z.split("."),X=$[Q];return u(X)&&Object.prototype.hasOwnProperty.call(X,z)}function vO($,Z){let Q={...$};for(let z of m){if(!z.canonical||!C2(Z,z.canonical)||C2(Z,z.path))continue;let X=H0(Q,z.path);T2(Q,z.path,void 0);let H=H0(Q,z.canonical);if(c8(X)&&o(H))T2(Q,z.canonical,X)}return Q}function kO($,Z){let Q={...$};for(let z of m){if(!z.canonical||!C2(Z,z.canonical)||C2(Z,z.path))continue;let X=H0(Q,z.canonical);if(c8(X)||A2(X))T2(Q,z.path,X)}return Q}function hO($,Z,Q={}){let z=$.project,X=u(z)?z.type:void 0,H={...$};for(let U of m){if(U.category==="human"||U.category==="project")continue;let J=x2(X,U);if(J===null)return $;if(J)uO(H,Z,U,U.path.startsWith("stack.")?Q[U.path.slice(6)]:void 0);else fO(H,U)}return H}function uO($,Z,Q,z){let X=N1(Q);for(let U of X)if(A2(H0($,U))&&!A2(H0(Z,U)))T2($,U,C2(Z,U)?H0(Z,U):"");if(!c8(z))return;let H=X.filter((U)=>C2($,U));if(H.some((U)=>!o(H0($,U))))return;for(let U of H.length>0?H:[Q.path])T2($,U,z)}function fO($,Z){let Q=N1(Z).filter((X)=>C2($,X)),z=(X)=>!o(H0($,X))&&!A2(H0($,X));if(Q.some(z))return;for(let X of Q.length>0?Q:[Z.path])if(o(H0($,X)))T2($,X,L6)}function mO($){let Z=$.project;if(Z===null||Z===void 0||u(Z)||Array.isArray(Z))return $;return{...$,project:{name:String(Z)}}}function pO($){let Z=$.project?.type??"library",Q=b2[Z]||b2.library;for(let z of m){if(Q.includes(z.category))continue;let[X,H]=z.path.split(".");if(X==="stack"&&$.stack)$.stack[H]="slotignored";if(X==="monorepo"&&$.monorepo)$.monorepo[H]="slotignored"}}function l0($,Z){return k3($,Z,"")}function lO($){let Z=g0.get($);return Z!==void 0&&Z.category!=="human"}function c8($){if(typeof $==="number"||typeof $==="boolean")return!0;return typeof $==="string"&&$.trim()!==""&&!o($)&&!A2($)}function cO($,Z){return lO($)&&c8(Z)}function k3($,Z,Q){let z={...$};for(let[X,H]of Object.entries(Z)){let U=z[X],J=Q?`${Q}.${X}`:X;if(J==="_meta"&&U!==void 0)continue;if(a8(U)){if(cO(J,H))z[X]=H;continue}if(o(U))z[X]=H;else if(u(H)&&u(U))z[X]=k3(U,H,J)}return z}function dO($){let Z=($??"").trim();if(!Z)throw Error("Please provide a GitHub URL.");if(/[\s;&|`$(){}<>\\^'"!*?[\]]/.test(Z))throw Error(`Refusing unsafe URL: ${JSON.stringify($)}`);let Q=Z.replace(/\/+$/,"").replace(/\.git$/i,""),z=Q.match(/^(?:github\.com\/)?([A-Za-z0-9][A-Za-z0-9._-]*)\/([A-Za-z0-9][A-Za-z0-9._-]*)$/);if(z)return`https://github.com/${z[1]}/${z[2]}.git`;if(/^https?:\/\/[A-Za-z0-9._\-/:@~%]+$/.test(Q))return`${Q}.git`;throw Error(`Not a recognized GitHub repo URL: ${JSON.stringify($)}`)}function h3($){return $.replace(/\.git$/i,"").replace(/\/+$/,"").split("/").pop()||"project"}function iO($,Z={}){let Q=R1($);if(Z.repoUrl&&Q.project&&!W0($)?.name&&Q.project.name===$.split("/").pop())Q.project.name=h3(Z.repoUrl);return Q}import{existsSync as u3,lstatSync as nO}from"fs";import{join as rO,basename as sO}from"path";import{createHash as oO}from"crypto";var B0=($)=>typeof $==="object"&&$!==null&&!Array.isArray($),R0=($)=>typeof $==="number"&&Number.isFinite($),F0=($)=>typeof $==="string",aO=/^v?\d+\.\d+\.\d+$/,tO=new Set(["birth","doubled","peak","current"]);function c3($){return B0($)&&F0($.version)&&aO.test($.version)&&R0($.score)}var eO=($)=>R0($.birthDNA)?$.birthDNA:R0($.birthWeight)?$.birthWeight:null,$_=($)=>B0($)&&R0($.birthDNA)&&F0($.born),f3=($)=>B0($)&&F0($.born)&&R0($.birthDNA)&&R0($.lastScore)&&F0($.endedAt),Z_=($)=>Array.isArray($)&&$.length>0&&$.every(c3),Q_=($)=>B0($)&&R0($.score)&&F0($.version),z_=($)=>B0($)&&Array.isArray($.milestones)&&$.milestones.every(B0);function m3($){return B0($)&&$_($.birthCertificate)&&Z_($.versions)&&Q_($.current)&&z_($.growth)}function T1($){try{return nO($),!0}catch{return!1}}var A1=($)=>`${JSON.stringify($,null,2)}
|
|
266
|
-
`,X_=new Set(["version","score","lastSync"]),H_=new Set(["type","score","date","version","label","emoji"]),p3=($,Z)=>Object.keys($).every((Q)=>Z.has(Q)),C1={birth:{label:"Birth",emoji:"\uD83D\uDC23"},doubled:{label:"Doubled",emoji:"2️⃣"},peak:{label:"Peak",emoji:"\uD83C\uDFD4️"},current:{label:"Current",emoji:"\uD83D\uDCCD"}},d3=($)=>$.growth.milestones.filter((Z)=>Z.type==="peak"||Z.type==="current"),i3=($)=>p3($.current,X_)&&d3($).every((Z)=>p3(Z,H_)),U_=($)=>d3($).every((Z)=>Z.label===C1[Z.type].label&&Z.emoji===C1[Z.type].emoji);function J_($){return i3($)&&U_($)}var G_=".faf-dna is not in faf's shape: faf reads it and leaves it as it is.",V_=".faf-dna is not exactly as faf wrote it (hand formatting, key order, a repeated key or a number JSON cannot hold exactly): faf reads it and leaves it as it is.",Y_=".faf-dna has a key of yours in an entry faf would replace (current, or the peak or current milestone): faf reads it and leaves it as it is.",W_=".faf-dna has a label or emoji of yours on a milestone faf would replace (the peak or current one): faf reads it and leaves it as it is.",B_=".faf-dna has no birth certificate faf can read: faf leaves it as it is.";function q_($){if(!Array.isArray($))return[];return $.filter((Z)=>B0(Z)&&F0(Z.type)&&tO.has(Z.type)&&R0(Z.score))}var j2=($,Z="")=>F0($)?$:Z;function K_($,Z){if(!Array.isArray($))return[];return $.filter(c3).map((Q)=>({version:Q.version,timestamp:j2(Q.timestamp),score:Q.score,changes:Array.isArray(Q.changes)?Q.changes.filter(F0):[],growth:R0(Q.growth)?Q.growth:Q.score-Z}))}function D_($,Z,Q,z){return{version:j2($.version,Z?.version??"v1.0.0"),score:R0($.score)?$.score:Z?.score??Q,lastSync:j2($.lastSync,z)}}function l3($){if(!B0($)||!B0($.birthCertificate))return null;let Z=$.birthCertificate,Q=eO(Z);if(Q===null)return null;let z=j2(Z.born),X=K_($.versions,Q),H=D_(B0($.current)?$.current:{},X[X.length-1],Q,z),U=B0($.growth)?$.growth:{};return{birthCertificate:{born:z,birthDNA:Q,birthDNASource:Z.birthDNASource==="legacy"||Z.birthWeightSource==="legacy"?"legacy":"init",projectDNA:j2(Z.projectDNA),certificate:j2(Z.certificate)},versions:X,current:H,growth:{totalGrowth:H.score-Q,daysActive:R0(U.daysActive)?U.daysActive:0,milestones:q_(Array.isArray(U.milestones)?U.milestones:$.milestones)},lastModified:j2($.lastModified,z),format:"faf-dna-v1",...Array.isArray($.priorLineage)&&$.priorLineage.some(f3)?{priorLineage:$.priorLineage.filter(f3)}:{}}}class n3{projectPath;dnaPath;dna=null;own=!1;text;reason=null;sawNoFile=!1;constructor($){this.projectPath=$,this.dnaPath=rO($,".faf-dna")}exists(){let $=u3(this.dnaPath);if(!$&&!T1(this.dnaPath))this.sawNoFile=!0;return $}endingLineage(){let Z=this.dna??(()=>{let z=this.read();return z===null?null:l3(z.raw)})();if(!Z)return[];let Q=Z.birthCertificate;return[...Z.priorLineage??[],{born:Q.born,birthDNA:Q.birthDNA,certificate:Q.certificate,projectDNA:Q.projectDNA,lastScore:Z.current.score,endedAt:new Date().toISOString()}]}birth($){let Z=this.endingLineage();if(!T1(this.dnaPath))this.sawNoFile=!0;let Q=new Date().toISOString();return this.own=!0,this.dna={birthCertificate:{born:Q,birthDNA:$,birthDNASource:"init",projectDNA:this.generateProjectDNA(),certificate:this.generateCertificate()},versions:[{version:"v1.0.0",timestamp:Q,score:$,changes:["Birth — initial context"],growth:0}],current:{version:"v1.0.0",score:$,lastSync:Q},growth:{totalGrowth:0,daysActive:0,milestones:[{type:"birth",score:$,date:Q,version:"v1.0.0",label:"Birth",emoji:"\uD83D\uDC23"}]},lastModified:Q,format:"faf-dna-v1",...Z.length>0?{priorLineage:Z}:{}},this.save(),this.dna}isFafShape(){return this.load()!==null&&this.own}readOnlyReason(){return this.load(),this.own?null:this.reason}recordGrowth($,Z){if(!this.dna&&!this.load())return null;if(!this.own)return null;let Q=this.dna;if($===Q.current.score)return Q;let z=new Date().toISOString(),X=Q.birthCertificate.birthDNA,H=$-X,U=this.incrementVersion(Q.versions[Q.versions.length-1].version);return Q.versions.push({version:U,timestamp:z,score:$,changes:Z,growth:H}),Q.current={version:U,score:$,lastSync:z},Q.growth.totalGrowth=H,Q.growth.daysActive=this.daysSince(Q.birthCertificate.born),this.updateMilestones($,U,z),this.save(),Q}getJourney(){if(!this.dna&&!this.load())return"";let $=this.dna,Z=$.birthCertificate.birthDNA,Q=$.growth.milestones.find((H)=>H.type==="peak"),z=$.current.score,X=`${Z}%`;if(Q&&Q.score!==Z){if(X+=` → ${Q.score}%`,z<Q.score)X+=` ← ${z}%`}else if(z!==Z)X+=` → ${z}%`;return X}getBirthDNADisplay(){if(!this.dna&&!this.load())return null;let $=this.dna;return{current:$.current.score,birthDNA:$.birthCertificate.birthDNA,growth:$.current.score-$.birthCertificate.birthDNA,born:F0($.birthCertificate.born)?$.birthCertificate.born:""}}getLog(){if(!this.dna&&!this.load())return[];return this.dna.versions.map(($)=>{let Z=$.growth>50?"\uD83D\uDE80":$.growth>20?"\uD83D\uDCC8":"\uD83D\uDCCA",Q=F0($.timestamp)?$.timestamp.split("T")[0]:"",z=Array.isArray($.changes)?$.changes.filter(F0).join(", "):"";return`${$.version} — ${$.score}% ${Z} (${Q}) ${z}`})}load(){if(this.dna)return this.dna;if(!u3(this.dnaPath)){if(!T1(this.dnaPath))this.sawNoFile=!0;return null}let $=this.read();if($===null)return null;let{text:Z,raw:Q}=$;if(m3(Q)&&A1(Q)===Z&&J_(Q))this.own=!0,this.reason=null,this.dna=Q;else this.own=!1,this.dna=l3(Q),this.reason=!this.dna?B_:!m3(Q)?G_:A1(Q)!==Z?V_:i3(Q)?W_:Y_;return this.text=Z,this.dna}read(){let $;try{$=Z0(h(this.projectPath,".faf-dna"))}catch(Z){return this.reason=Z instanceof Error?Z.message:String(Z),null}try{return{text:$,raw:JSON.parse($)}}catch{return this.reason=".faf-dna is not JSON: faf leaves it as it is.",null}}save(){if(!this.dna)return;this.dna.lastModified=new Date().toISOString();let $=A1(this.dna),Z=this.text??(this.sawNoFile?null:I0(h(this.projectPath,".faf-dna")));e(this.dnaPath,$,{root:this.projectPath,expect:Z}),this.text=$,this.sawNoFile=!1}generateProjectDNA(){return oO("sha256").update([this.projectPath,Date.now().toString(),Math.random().toString(36)].join(":")).digest("hex").substring(0,16)}generateCertificate(){let $=new Date().getFullYear(),Z=Math.random().toString(36).substring(2,6).toUpperCase(),Q=sO(this.projectPath).replace(/[^A-Z0-9]/gi,"").toUpperCase().substring(0,8).padEnd(4,"X");return`FAF-${$}-${Q}-${Z}`}incrementVersion($){let[Z,Q,z]=$.replace("v","").split(".").map(Number);return`v${Z}.${Q}.${z+1}`}daysSince($){return Math.floor((Date.now()-new Date($).getTime())/86400000)}updateMilestones($,Z,Q){if(!this.dna)return;let z=this.dna.growth.milestones,X=(G)=>z.some((V)=>V.type===G),H=(G)=>z.push({type:G,score:$,date:Q,version:Z,...C1[G]});if($>=this.dna.birthCertificate.birthDNA*2&&$>0&&!X("doubled"))H("doubled");let U=z.find((G)=>G.type==="peak");if(!U||$>U.score){if(U)z.splice(z.indexOf(U),1);H("peak")}let J=z.findIndex((G)=>G.type==="current");if(J>=0)z.splice(J,1);H("current")}}import{join as r_}from"path";import{existsSync as p_,statSync as HA}from"fs";import{join as zz}from"path";import{dirname as e3,resolve as $z}from"path";var s3=100;var L_="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",I_=[/^<(script|pre|style|textarea)(?=\s|>|$)/i,/^<!--/,/^<\?/,/^<![A-Za-z]/,/^<!\[CDATA\[/,new RegExp(`^</?(?:${L_})(?=\\s|/?>|$)`,"i"),new RegExp(`^(?:<[A-Za-z][A-Za-z0-9-]*(?:\\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\\s*=\\s*(?:[^"'=<>\`\\x00-\\x20]+|'[^']*'|"[^"]*"))?)*\\s*/?>|</[A-Za-z][A-Za-z0-9-]*\\s*>)\\s*$`,"i")],O_=[/<\/(?:script|pre|style|textarea)>/i,/-->/,/\?>/,/>/,/\]\]>/],__=["","-->","?>",">","]]>"],M_=/[#`~*+_=<>0-9-]/,P_=/(\d{1,9})([.)])/y,F_=/#{1,6}(?:[ \t]+|$)/y,R_=/`{3,}(?!.*`)|~{3,}/y,N_=/(?:`{3,}|~{3,})(?=[ \t]*$)/y,T_=/(?:=+|-+)[ \t]*$/y,A_=/[^ \t\f\v\r\n]/;function Y6($,Z,Q){return $.lastIndex=Q,$.exec(Z)}var C_=($)=>$==="quote"||$==="list"||$==="item";function j_($){let Z=new Uint8Array($.length),Q="*-_",z=[0,0,0],X=[!0,!0,!0];for(let H=$.length-1;H>=0;H--){let U=$[H],J=U===" "||U==="\t";for(let V=0;V<3;V++)if(U==="*-_"[V])z[V]++;else if(!J)X[V]=!1;let G="*-_".indexOf(U);Z[H]=G>=0&&X[G]&&z[G]>=3?1:0}return Z}var B$=($)=>$===" "||$==="\t";function w_($,Z){if($==="document"||$==="quote"||$==="item")return Z!=="item";return $==="list"&&Z==="item"}var r3=($)=>$==="paragraph"||$==="code"||$==="html";function S_($){if($.kind==="list"||$.kind==="item")return{...$,list:{...$.list}};if($.kind==="code")return{...$,fence:$.fence&&{...$.fence}};return{...$}}class N0{containers;stack=[{kind:"document"}];ln="";offset=0;column=0;nextNonspace=0;nextNonspaceColumn=0;indent=0;indented=!1;blank=!1;allClosed=!0;matched=0;htmlStarted=!1;hiddenIn=null;scannedFrom=-1;breaks=null;deep=!1;limit=-1;overflow=-1;starts;constructor($=!0){this.containers=$;this.starts=[()=>this.startQuote(),()=>this.startHeading(),()=>this.startFence(),(Z)=>this.startHtml(Z),(Z)=>this.startSetext(Z),()=>this.startBreak(),(Z)=>this.startItem(Z),()=>this.startIndentedCode()]}clone(){let $=new N0(this.containers);return $.stack=this.stack.map(S_),$.deep=this.deep,$}overflowAt($,Z){let Q=this.clone();return Q.limit=Z,Q.line($),Q.overflow}get tooDeep(){return this.deep}line($){if(this.deep)return null;this.ln=$,this.offset=0,this.column=0,this.blank=!1,this.htmlStarted=!1,this.hiddenIn=null,this.scannedFrom=-1,this.breaks=null;let Z=this.continueContainers();if(Z<0)return this.hiddenIn;let Q=this.openBlocks(Z);if(this.deep)return null;if(!this.allClosed&&!this.blank&&this.tip.kind==="paragraph")return null;return this.closeUnmatched(),this.addText(Q),this.hiddenIn}closer(){if(this.stack.length!==2)return null;let $=this.stack[1];if($.kind==="code")return $.fence?$.fence.char.repeat($.fence.len):null;if($.kind!=="html"||$.type>5)return null;return $.type===1?`</${$.tag}>`:__[$.type-1]}get tip(){return this.stack[this.stack.length-1]}continueContainers(){let $=this.stack.length-1,Z=0;while(Z<$){this.findNextNonspace();let Q=this.continues(this.stack[Z+1],Z+1);if(Q===2)return-1;if(Q===1)break;Z++}return this.allClosed=Z===$,this.matched=Z,Z}openBlocks($){let Z=this.stack[$],Q=Z.kind!=="paragraph"&&r3(Z.kind);while(!Q&&!this.deep){this.findNextNonspace();let z=this.nextNonspace;if(!this.indented&&!M_.test(this.ln.charAt(z)))break;let X=0;for(let H of this.starts)if(X=H(Z),X!==0)break;if(X===0)break;this.noteOverflow(z,X),Z=this.tip,Q=X===2}if(!Q)this.advanceNextNonspace();return Z}noteOverflow($,Z){if(Z===1&&this.limit>=0&&this.overflow<0&&this.stack.length-1>this.limit)this.overflow=$}addText($){if($.kind==="code")this.hiddenIn=$.fence?"code fence":"indented code";else if($.kind==="html")this.addHtmlLine($);else if(!r3($.kind)&&this.offset<this.ln.length&&!this.blank)this.addChild({kind:"paragraph"})}addHtmlLine($){if($.type>5)return;let Z=O_[$.type-1].test(this.ln.slice(this.offset));if(!(this.htmlStarted&&$.type===2&&Z))this.hiddenIn=$.type===1?`<${$.tag}>`:$.type===2?"comment":"html";if(Z)this.stack.pop()}continues($,Z){switch($.kind){case"quote":return this.continueQuote();case"item":return this.continueItem($);case"code":return $.fence?this.continueFence($.fence,Z):this.continueIndentedCode();default:return this.continueOther($)}}continueOther($){if($.kind==="heading"||$.kind==="break")return 1;return($.kind==="paragraph"||$.kind==="html"&&$.type>=6)&&this.blank?1:0}continueQuote(){if(this.indented||this.ch!==">")return 1;if(this.advanceNextNonspace(),this.advanceOffset(1,!1),B$(this.ln[this.offset]))this.advanceOffset(1,!0);return 0}continueItem($){let Z=$.list.markerOffset+$.list.padding;if(this.blank){if(!$.hasChild)return 1;this.advanceNextNonspace()}else if(this.indent>=Z)this.advanceOffset(Z,!0);else return 1;return 0}continueFence($,Z){let Q=this.indent<=3&&this.ch===$.char?Y6(N_,this.ln,this.nextNonspace):null;if(Q&&Q[0].length>=$.len)return this.stack.length=Z,this.hiddenIn="code fence",2;for(let z=$.offset;z>0&&B$(this.ln[this.offset]);z--)this.advanceOffset(1,!0);return 0}continueIndentedCode(){if(this.indent>=4)this.advanceOffset(4,!0);else if(this.blank)this.advanceNextNonspace();else return 1;return 0}get ch(){return this.ln.charAt(this.nextNonspace)}breakAhead(){return this.breaks??=j_(this.ln),this.breaks[this.nextNonspace]===1}startQuote(){if(!this.containers||this.indented||this.ch!==">")return 0;if(this.advanceNextNonspace(),this.advanceOffset(1,!1),B$(this.ln[this.offset]))this.advanceOffset(1,!0);return this.closeUnmatched(),this.addChild({kind:"quote"}),1}startHeading(){if(this.indented||this.ch!=="#"||!Y6(F_,this.ln,this.nextNonspace))return 0;return this.closeUnmatched(),this.addChild({kind:"heading"}),this.offset=this.ln.length,2}startFence(){let $=this.ch,Z=this.indented||$!=="`"&&$!=="~"?null:Y6(R_,this.ln,this.nextNonspace);if(!Z)return 0;return this.closeUnmatched(),this.addChild({kind:"code",fence:{char:Z[0][0],len:Z[0].length,offset:this.indent}}),this.advanceNextNonspace(),this.advanceOffset(Z[0].length,!1),2}startHtml($){if(this.indented||this.ch!=="<")return 0;let Z=!this.allClosed&&!this.blank&&this.tip.kind==="paragraph",Q=$.kind!=="paragraph"&&!Z,z=this.ln.slice(this.nextNonspace);for(let X=1;X<=(Q?7:6);X++){let H=I_[X-1].exec(z);if(H)return this.closeUnmatched(),this.addChild({kind:"html",type:X,tag:X===1?H[1].toLowerCase():""}),this.htmlStarted=!0,2}return 0}startSetext($){let Z=this.ch;if(this.indented||$.kind!=="paragraph"||Z!=="="&&Z!=="-"||!Y6(T_,this.ln,this.nextNonspace))return 0;return this.closeUnmatched(),this.stack[this.stack.length-1]={kind:"heading"},this.offset=this.ln.length,2}startBreak(){if(this.indented||!this.breakAhead())return 0;return this.closeUnmatched(),this.addChild({kind:"break"}),this.offset=this.ln.length,2}startItem($){if(!this.containers||this.indented&&$.kind!=="list")return 0;let Z=this.listMarker($);if(!Z)return 0;this.closeUnmatched();let Q=this.tip;if(Q.kind!=="list"||Q.list.bullet!==Z.bullet||Q.list.delimiter!==Z.delimiter)this.addChild({kind:"list",list:Z});return this.addChild({kind:"item",list:Z,hasChild:!1}),1}startIndentedCode(){if(!this.indented||this.tip.kind==="paragraph"||this.blank)return 0;return this.advanceOffset(4,!0),this.closeUnmatched(),this.addChild({kind:"code",fence:null}),2}listMarker($){if(this.indent>=4)return null;let Z=this.markerAt($);if(!Z)return null;let Q=this.indent;return this.advanceNextNonspace(),this.advanceOffset(Z.width,!0),{...Z.kind,markerOffset:Q,padding:this.paddingAfter(Z.width)}}markerAt($){let Z=$.kind==="paragraph",Q=this.markerKind(Z);if(!Q)return null;let z=this.ln[this.nextNonspace+Q.width];if(!(z===void 0||B$(z)))return null;if(Z&&!A_.test(this.ln.slice(this.nextNonspace+Q.width)))return null;return Q}markerKind($){let Z=this.ch;if(Z==="*"||Z==="+"||Z==="-")return{width:1,kind:{bullet:Z,delimiter:null}};let Q=Z>="0"&&Z<="9"?Y6(P_,this.ln,this.nextNonspace):null;if(!Q||$&&Number(Q[1])!==1)return null;return{width:Q[0].length,kind:{bullet:null,delimiter:Q[2]}}}paddingAfter($){let Z=this.column,Q=this.offset;do this.advanceOffset(1,!0);while(this.column-Z<5&&B$(this.ln[this.offset]));let z=this.column-Z;if(z>=1&&z<5&&this.ln[this.offset]!==void 0)return $+z;if(this.column=Z,this.offset=Q,B$(this.ln[this.offset]))this.advanceOffset(1,!0);return $+1}addChild($){while(!w_(this.tip.kind,$.kind))this.stack.pop();if(this.tip.hasChild=!0,this.stack.push($),C_($.kind)&&this.stack.length-1>100)this.deep=!0}closeUnmatched(){if(!this.allClosed)this.stack.length=this.matched+1,this.allClosed=!0}findNextNonspace(){let $=this.ln,Z=this.offset,Q=this.column;if(this.scannedFrom!==-1&&this.offset>=this.scannedFrom&&this.offset<=this.nextNonspace)Z=this.nextNonspace,Q=this.nextNonspaceColumn;else{this.scannedFrom=this.offset;for(;Z<$.length;Z++)if($[Z]===" ")Q++;else if($[Z]==="\t")Q+=4-Q%4;else break}this.blank=Z>=$.length,this.nextNonspace=Z,this.nextNonspaceColumn=Q,this.indent=Q-this.column,this.indented=this.indent>=4}advanceNextNonspace(){this.offset=this.nextNonspace,this.column=this.nextNonspaceColumn}advanceOffset($,Z){let Q=$;while(Q>0&&this.offset<this.ln.length){if(this.ln[this.offset]!=="\t"){this.offset++,this.column++,Q--;continue}let z=4-this.column%4,X=Z&&z>Q;this.column+=X?Q:z,this.offset+=X?0:1,Q-=Z?Math.min(z,Q):1}}}var b0="<!-- faf:start -->",y0="<!-- faf:end -->",o3="\uFEFF";function B6($){return $.match(/[^\r\n]*(?:\r\n|\r|\n|$)/g)?.filter((Z,Q,z)=>Z!==""||Q<z.length-1)??[]}var q$=($)=>$.replace(/\r?\n$|\r$/,""),Zz=($)=>q$($).replace(/^\uFEFF/,"").trimEnd();function*j1($){let Z=0;for(let Q of B6($)){let z=q$(Q),X=Z===0&&z.charCodeAt(0)===65279?1:0;yield{offset:Z,from:Z+X,to:Z+z.length,content:z.slice(X)},Z+=Q.length}}function E_($,Z,Q,z){let X=$.some((U)=>U.start!==-1)&&z(Z.content),H=Q(Z.content);for(let U of $)if(U.start!==-1&&X)U.found={start:U.start,end:Z.to};else if(H)U.start=Z.from}function w1($,Z,Q){let[z,X]=[new N0(!0),new N0(!1)].map((H)=>({reader:H,start:-1,found:null}));for(let H of j1($)){let U=[z,X].map((G)=>G.reader.line(H.content));if(z.reader.tooDeep)return null;let J=[z,X].filter((G,V)=>U[V]===null);if(J.length>0)E_(J,H,Z,Q);if(z.found||X.found)return z.found&&X.found&&z.found.start===X.found.start?z.found:null}return null}var a3=($)=>(Z)=>Z===$;function w2($,Z=b0,Q=y0){return w1($,a3(Z),a3(Q))}function t3($,Z){let Q=[];for(let z of[!0,!1]){let X=new N0(z);for(let H of B6($))X.line(q$(H));if(X.clone().line(Z)!==null)Q.push(X.closer())}return Q}var b_=16;function y_($){let Z=new N0(!0);return $.map((Q)=>{let z=Z.overflowAt(q$(Q),b_),X=Q;if(z>=0){let H=/^\d{1,9}(?=[.)])/.exec(Q.slice(z)),U=H?z+H[0].length:z;X=`${Q.slice(0,U)}\\${Q.slice(U)}`}return Z.line(q$(X)),X})}function x_($,Z,Q){let X=y_(B6($).map((U)=>{let J=Zz(U);return J===Z||J===Q?` ${U}`:U})).join(""),H=t3(X,Q);while(H.length>0&&H[0]!==null){let U=`${X}
|
|
267
|
-
${H[0]}`,J
|
|
264
|
+
`),z=0;while(z<Q.length){let H=Q[z].trim().match(/^(#{1,6})\s+(.+)$/);if(H&&Z.test(H[2])){let U=H[1].length,J=[];z++;while(z<Q.length){let G=Q[z].trim(),V=G.match(/^(#{1,6})\s+/);if(V&&V[1].length<=U)break;if(G===""){if(J.length>0)break;z++;continue}if(/^(>|```|---|\||\s*[-*+]\s|\d+\.\s)/.test(G))break;J.push(G),z++}if(J.length===0)return null;return J.join(" ").trim()}z++}return null}function MO($){let Z=N2($,/^(use\s+cases?|goal)\b/i);if(Z&&P0(Z))return Z;let Q=_O($);if(Q&&P0(Q))return Q;return}function PO($){let Z=N2($,/^(about|description|overview|what(\s+is\s+this)?)\b/i);if(Z&&P0(Z))return Z;return}function FO($){let Z=N2($,/^(audience|users?|for\s+whom|who(\s+is\s+this\s+for)?)\b/i);if(Z&&P0(Z))return Z;return}function RO($){let Z=N2($,/^(why|motivation|problem|rationale)\b/i);if(Z&&P0(Z))return Z;return}function NO($){let Z=N2($,/^(deployment|where(\s+it\s+runs)?|hosting)\b/i);if(Z&&P0(Z))return Z;return}function TO($){let Z=N2($,/^(status|history|timeline|since|launched)\b/i);if(Z&&P0(Z))return Z;return}function AO($){let Z=N2($,/^(architecture|how(\s+it\s+works)?|approach|design)\b/i);if(Z&&P0(Z))return Z;return}function I1($){let Z=["README.md","README.MD","Readme.md","readme.md"],Q=null;for(let K of Z)if(I($,K)){Q=K;break}if(!Q)return{};let z=S($,Q);if(z===null)return{};z=z.replace(/<!--[\s\S]*?-->/g,"");let X={},H=MO(z);if(H)X.project={goal:H};let U={},J=PO(z);if(J)U.what=J;let G=FO(z);if(G)U.who=G;let V=RO(z);if(V)U.why=V;let Y=NO(z);if(Y)U.where=Y;let W=TO(z);if(W)U.when=W;let B=AO(z);if(B)U.how=B;if(Object.keys(U).length>0)X.human_context=U;return X}function CO($,Z){let Q=$.split(`
|
|
265
|
+
`),z=!1;for(let X of Q){let H=X.trim();if(/^\[/.test(H)){z=H==="[package]";continue}if(!z)continue;let U=H.match(new RegExp(`^${Z}\\s*=\\s*(.+)$`));if(U){let J=U[1].trim();J=J.replace(/\s*#.*$/,"").trim();let G=J.match(/^"((?:[^"\\]|\\.)*)"$/)||J.match(/^'((?:[^'\\]|\\.)*)'$/);if(G)return G[1];return J}}return null}function O1($){let Z=S($,"Cargo.toml");if(Z===null)return{};let Q=CO(Z,"description");if(Q&&P0(Q))return{project:{goal:Q}};return{}}import{join as v3}from"path";var jO=[{re:/^postgres|postgis|pgvector/,slot:"database",label:"PostgreSQL"},{re:/^mysql/,slot:"database",label:"MySQL"},{re:/^mariadb/,slot:"database",label:"MariaDB"},{re:/^mongo/,slot:"database",label:"MongoDB"},{re:/clickhouse/,slot:"database",label:"ClickHouse"},{re:/^cockroach/,slot:"database",label:"CockroachDB"},{re:/^redis|^valkey/,slot:"cache",label:"Redis"},{re:/^memcached/,slot:"cache",label:"Memcached"},{re:/elasticsearch/,slot:"search",label:"Elasticsearch"},{re:/opensearch/,slot:"search",label:"OpenSearch"},{re:/meilisearch/,slot:"search",label:"Meilisearch"},{re:/typesense/,slot:"search",label:"Typesense"},{re:/qdrant/,slot:"search",label:"Qdrant (vector)"},{re:/weaviate/,slot:"search",label:"Weaviate (vector)"},{re:/^minio/,slot:"storage",label:"MinIO (S3-compatible)"},{re:/localstack/,slot:"storage",label:"LocalStack (AWS)"},{re:/rabbitmq/,slot:"runtime",label:"RabbitMQ"},{re:/kafka/,slot:"runtime",label:"Kafka"},{re:/nats/,slot:"runtime",label:"NATS"},{re:/temporalio\/|temporal-server|temporal:/,slot:"runtime",label:"Temporal"}],wO=new Set(["node_modules",".git","dist","build","vendor","target","e2e","tests","test"]);function SO($){let Z=[],Q=(z,X)=>{for(let H of v($,z)??[])if(H.isFile()&&/^(docker-)?compose.*\.ya?ml$/i.test(H.name))Z.push(v3(z,H.name));else if(H.isDirectory()&&X>0&&!H.name.startsWith(".")&&!wO.has(H.name))Q(v3(z,H.name),X-1)};return Q(".",1),Z}function V6($){return[...$].join(" · ")}function _1($){let Z=SO($);if(Z.length===0)return{};let Q={database:new Set,cache:new Set,search:new Set,storage:new Set,runtime:new Set};for(let X of Z){let H=S($,X);if(H===null)continue;for(let U of H.matchAll(/^\s*image:\s*["']?([^\s"'#]+)/gm)){let J=U[1].toLowerCase(),G=J.replace(/:[^/]*$/,"").split("/").pop()??J,V=J.replace(/:[^/]*$/,"");for(let{re:Y,slot:W,label:B}of jO)if(Y.test(G)||Y.test(V))Q[W].add(B)}}let z={};if(Q.database.size)z.database=V6(Q.database);if(Q.cache.size)z.cache=V6(Q.cache);if(Q.search.size)z.search=V6(Q.search);if(Q.storage.size)z.storage=V6(Q.storage);if(Q.runtime.size)z.runtime=`Docker Compose (${V6(Q.runtime)})`;if(Object.keys(z).length===0&&!Q.runtime.size)return{stack:{hosting:"Docker Compose"}};return z.hosting="Docker Compose",{stack:z}}import{join as EO}from"path";var bO=new Set(["node_modules",".git","dist","build","vendor","target","e2e","docs","scripts"]),yO=[{file:"Makefile",runner:"make",targets:($)=>[...$.matchAll(/^([a-zA-Z][\w-]*)\s*:(?!=)/gm)].map((Z)=>Z[1])},{file:"justfile",runner:"just",targets:($)=>[...$.matchAll(/^([a-zA-Z][\w-]*)\s*(?:\([^)]*\))?\s*:/gm)].map((Z)=>Z[1])},{file:"Taskfile.yml",runner:"task",targets:($)=>{let Z=$.indexOf("tasks:");if(Z===-1)return[];return[...$.slice(Z).matchAll(/^\s{2}([a-zA-Z][\w-]*):/gm)].map((Q)=>Q[1])}}];function M1($,Z){for(let Q of Z){let z=$.find((X)=>Q.test(X));if(z)return z}return null}function xO($){let Z=[$];for(let Q of v($)??[])if(Q.isDirectory()&&!Q.name.startsWith(".")&&!bO.has(Q.name))Z.push(EO($,Q.name));return Z}function gO($){let Z=0;if(I($,"manage.py")||I($,"pyproject.toml")||I($,"Gemfile"))Z+=3;if(/(?:^|\/)(backend|api|server|core|app)$/.test($))Z+=2;return Z}function P1($){return e2($,()=>vO($))}function vO($){let Z=[];for(let z of xO($)){let X=z===$,H=X?"":`cd ${z.slice($.length+1)} && `;for(let U of yO){let J=S(z,U.file);if(J===null)continue;let G=U.targets(J);if(G.length===0)continue;let V={},Y=M1(G,[/^test$/i,/^tests$/i,/test-all/i,/^test-unit/i,/^test/i]),W=M1(G,[/^build$/i,/^compile$/i,/^build/i]),B=M1(G,[/^check-all$/i,/^check$/i,/^lint$/i,/^lint/i,/^fmt$/i,/^format$/i]);if(Y)V.test=`${H}${U.runner} ${Y}`;if(W)V.build=`${H}${U.runner} ${W}`;if(B)V.lint=`${H}${U.runner} ${B}`;if(Object.keys(V).length===0)continue;Z.push({score:Object.keys(V).length+(X?10:gO(z)),commands:V})}}let Q=Z.sort((z,X)=>X.score-z.score)[0];return Q?{commands:Q.commands}:{}}var kO=[".env.example",".env.sample",".env.template",".env.dist","env.example",".env.local.example"];function F1($){for(let Z of kO)if(I($,Z))return{security:{secrets:".env",example:Z}};return{}}function hO($,Z){let Q={project:{...Z.project??{},...$.project??{}},human_context:{...Z.human_context??{},...$.human_context??{}},stack:{...Z.stack??{},...$.stack??{}},commands:{...Z.commands??{},...$.commands??{}},security:{...Z.security??{},...$.security??{}}};for(let z of["project","human_context","stack","commands","security"])if(Q[z]&&Object.keys(Q[z]).length===0)delete Q[z];return Q}function R1($){return[I1($),O1($),_1($),P1($),F1($)].reduce(hO,{})}function k3($){try{let Z=s2($,{logLevel:"error"}).getIn(["project","type"],!0);return s(Z)&&typeof Z.comment==="string"&&Z.comment.includes(y2)}catch{return!1}}function N1($){let Z=x3($),Q=R1($),z={};if(Q.stack)z.stack=Q.stack;if(Q.commands)z.commands=Q.commands;if(Q.security)z.security=Q.security;let X={};if(Q.project)X.project=Q.project;if(Q.human_context)X.human_context=Q.human_context;let H=l0(l0(z,Z),X);rO(H);let J=(Z._meta?.found??[]).some((V)=>V.startsWith("polyglot:")),G=l0(H,k8($));return l0(G,{human_context:h8($,{toolingRoot:J})})}function uO($,Z){let Q=nO(Y8(Z,"updateExistingFaf: the existing .faf")),{data:z,facts:X}=L1($),H=z,U=l0(Q,R1($)),J=l0(U,H),G=l0(J,k8($)),V=pO(l0(G,{human_context:h8($)}),Q),Y=lO(fO(Z,Q,H)?cO(h3(V,Q),Q,X):h3(V,Q),Q);return h9(v9(Z,Y))}function fO($,Z,Q){if(!o(H0(Z,"project.type"))){let X=a$($)?.text;return X===void 0||!k3(X)}return!(Q._meta?.found??[]).includes(y2)}function T1($){return $.canonical?[$.path,$.canonical]:[$.path]}function H0($,Z){let[Q,z]=Z.split("."),X=$[Q];return u(X)?X[z]:void 0}function T2($,Z,Q){let[z,X]=Z.split("."),H=$[z];if(!u(H))return;if(Q===void 0?!(X in H):H[X]===Q)return;let U={...H};if(Q===void 0)delete U[X];else U[X]=Q;$[z]=U}var A2=($)=>typeof $==="string"&&$.trim()===L6;function mO($,Z){let Q=Z.map((z)=>H0($,z));return Q.some(A2)&&Q.every((z)=>o(z)||A2(z))}function h3($,Z){let Q={...$};for(let z of m){let X=T1(z);if(!mO(Z,X))continue;for(let H of X){let U=H0(Z,H);if(H0(Q,H)!==U)T2(Q,H,U)}}return Q}function C2($,Z){let[Q,z]=Z.split("."),X=$[Q];return u(X)&&Object.prototype.hasOwnProperty.call(X,z)}function pO($,Z){let Q={...$};for(let z of m){if(!z.canonical||!C2(Z,z.canonical)||C2(Z,z.path))continue;let X=H0(Q,z.path);T2(Q,z.path,void 0);let H=H0(Q,z.canonical);if(d8(X)&&o(H))T2(Q,z.canonical,X)}return Q}function lO($,Z){let Q={...$};for(let z of m){if(!z.canonical||!C2(Z,z.canonical)||C2(Z,z.path))continue;let X=H0(Q,z.canonical);if(d8(X)||A2(X))T2(Q,z.path,X)}return Q}function cO($,Z,Q={}){let z=$.project,X=u(z)?z.type:void 0,H={...$};for(let U of m){if(U.category==="human"||U.category==="project")continue;let J=x2(X,U);if(J===null)return $;if(J)dO(H,Z,U,U.path.startsWith("stack.")?Q[U.path.slice(6)]:void 0);else iO(H,U)}return H}function dO($,Z,Q,z){let X=T1(Q);for(let U of X)if(A2(H0($,U))&&!A2(H0(Z,U)))T2($,U,C2(Z,U)?H0(Z,U):"");if(!d8(z))return;let H=X.filter((U)=>C2($,U));if(H.some((U)=>!o(H0($,U))))return;for(let U of H.length>0?H:[Q.path])T2($,U,z)}function iO($,Z){let Q=T1(Z).filter((X)=>C2($,X)),z=(X)=>!o(H0($,X))&&!A2(H0($,X));if(Q.some(z))return;for(let X of Q.length>0?Q:[Z.path])if(o(H0($,X)))T2($,X,L6)}function nO($){let Z=$.project;if(Z===null||Z===void 0||u(Z)||Array.isArray(Z))return $;return{...$,project:{name:String(Z)}}}function rO($){let Z=$.project?.type??"library",Q=b2[Z]||b2.library;for(let z of m){if(Q.includes(z.category))continue;let[X,H]=z.path.split(".");if(X==="stack"&&$.stack)$.stack[H]="slotignored";if(X==="monorepo"&&$.monorepo)$.monorepo[H]="slotignored"}}function l0($,Z){return u3($,Z,"")}function sO($){let Z=g0.get($);return Z!==void 0&&Z.category!=="human"}function d8($){if(typeof $==="number"||typeof $==="boolean")return!0;return typeof $==="string"&&$.trim()!==""&&!o($)&&!A2($)}function oO($,Z){return sO($)&&d8(Z)}function u3($,Z,Q){let z={...$};for(let[X,H]of Object.entries(Z)){let U=z[X],J=Q?`${Q}.${X}`:X;if(J==="_meta"&&U!==void 0)continue;if(t8(U)){if(oO(J,H))z[X]=H;continue}if(o(U))z[X]=H;else if(u(H)&&u(U))z[X]=u3(U,H,J)}return z}function aO($){let Z=($??"").trim();if(!Z)throw Error("Please provide a GitHub URL.");if(/[\s;&|`$(){}<>\\^'"!*?[\]]/.test(Z))throw Error(`Refusing unsafe URL: ${JSON.stringify($)}`);let Q=Z.replace(/\/+$/,"").replace(/\.git$/i,""),z=Q.match(/^(?:github\.com\/)?([A-Za-z0-9][A-Za-z0-9._-]*)\/([A-Za-z0-9][A-Za-z0-9._-]*)$/);if(z)return`https://github.com/${z[1]}/${z[2]}.git`;if(/^https?:\/\/[A-Za-z0-9._\-/:@~%]+$/.test(Q))return`${Q}.git`;throw Error(`Not a recognized GitHub repo URL: ${JSON.stringify($)}`)}function f3($){return $.replace(/\.git$/i,"").replace(/\/+$/,"").split("/").pop()||"project"}function tO($,Z={}){let Q=N1($);if(Z.repoUrl&&Q.project&&!W0($)?.name&&Q.project.name===$.split("/").pop())Q.project.name=f3(Z.repoUrl);return Q}import{existsSync as m3,lstatSync as eO}from"fs";import{join as $_,basename as Z_}from"path";import{createHash as Q_}from"crypto";var B0=($)=>typeof $==="object"&&$!==null&&!Array.isArray($),R0=($)=>typeof $==="number"&&Number.isFinite($),F0=($)=>typeof $==="string",z_=/^v?\d+\.\d+\.\d+$/,X_=new Set(["birth","doubled","peak","current"]);function i3($){return B0($)&&F0($.version)&&z_.test($.version)&&R0($.score)}var H_=($)=>R0($.birthDNA)?$.birthDNA:R0($.birthWeight)?$.birthWeight:null,U_=($)=>B0($)&&R0($.birthDNA)&&F0($.born),p3=($)=>B0($)&&F0($.born)&&R0($.birthDNA)&&R0($.lastScore)&&F0($.endedAt),J_=($)=>Array.isArray($)&&$.length>0&&$.every(i3),G_=($)=>B0($)&&R0($.score)&&F0($.version),V_=($)=>B0($)&&Array.isArray($.milestones)&&$.milestones.every(B0);function l3($){return B0($)&&U_($.birthCertificate)&&J_($.versions)&&G_($.current)&&V_($.growth)}function A1($){try{return eO($),!0}catch{return!1}}var C1=($)=>`${JSON.stringify($,null,2)}
|
|
266
|
+
`,Y_=new Set(["version","score","lastSync"]),W_=new Set(["type","score","date","version","label","emoji"]),c3=($,Z)=>Object.keys($).every((Q)=>Z.has(Q)),j1={birth:{label:"Birth",emoji:"\uD83D\uDC23"},doubled:{label:"Doubled",emoji:"2️⃣"},peak:{label:"Peak",emoji:"\uD83C\uDFD4️"},current:{label:"Current",emoji:"\uD83D\uDCCD"}},n3=($)=>$.growth.milestones.filter((Z)=>Z.type==="peak"||Z.type==="current"),r3=($)=>c3($.current,Y_)&&n3($).every((Z)=>c3(Z,W_)),B_=($)=>n3($).every((Z)=>Z.label===j1[Z.type].label&&Z.emoji===j1[Z.type].emoji);function q_($){return r3($)&&B_($)}var K_=".faf-dna is not in faf's shape: faf reads it and leaves it as it is.",D_=".faf-dna is not exactly as faf wrote it (hand formatting, key order, a repeated key or a number JSON cannot hold exactly): faf reads it and leaves it as it is.",L_=".faf-dna has a key of yours in an entry faf would replace (current, or the peak or current milestone): faf reads it and leaves it as it is.",I_=".faf-dna has a label or emoji of yours on a milestone faf would replace (the peak or current one): faf reads it and leaves it as it is.",O_=".faf-dna has no birth certificate faf can read: faf leaves it as it is.";function __($){if(!Array.isArray($))return[];return $.filter((Z)=>B0(Z)&&F0(Z.type)&&X_.has(Z.type)&&R0(Z.score))}var j2=($,Z="")=>F0($)?$:Z;function M_($,Z){if(!Array.isArray($))return[];return $.filter(i3).map((Q)=>({version:Q.version,timestamp:j2(Q.timestamp),score:Q.score,changes:Array.isArray(Q.changes)?Q.changes.filter(F0):[],growth:R0(Q.growth)?Q.growth:Q.score-Z}))}function P_($,Z,Q,z){return{version:j2($.version,Z?.version??"v1.0.0"),score:R0($.score)?$.score:Z?.score??Q,lastSync:j2($.lastSync,z)}}function d3($){if(!B0($)||!B0($.birthCertificate))return null;let Z=$.birthCertificate,Q=H_(Z);if(Q===null)return null;let z=j2(Z.born),X=M_($.versions,Q),H=P_(B0($.current)?$.current:{},X[X.length-1],Q,z),U=B0($.growth)?$.growth:{};return{birthCertificate:{born:z,birthDNA:Q,birthDNASource:Z.birthDNASource==="legacy"||Z.birthWeightSource==="legacy"?"legacy":"init",projectDNA:j2(Z.projectDNA),certificate:j2(Z.certificate)},versions:X,current:H,growth:{totalGrowth:H.score-Q,daysActive:R0(U.daysActive)?U.daysActive:0,milestones:__(Array.isArray(U.milestones)?U.milestones:$.milestones)},lastModified:j2($.lastModified,z),format:"faf-dna-v1",...Array.isArray($.priorLineage)&&$.priorLineage.some(p3)?{priorLineage:$.priorLineage.filter(p3)}:{}}}class s3{projectPath;dnaPath;dna=null;own=!1;text;reason=null;sawNoFile=!1;constructor($){this.projectPath=$,this.dnaPath=$_($,".faf-dna")}exists(){let $=m3(this.dnaPath);if(!$&&!A1(this.dnaPath))this.sawNoFile=!0;return $}endingLineage(){let Z=this.dna??(()=>{let z=this.read();return z===null?null:d3(z.raw)})();if(!Z)return[];let Q=Z.birthCertificate;return[...Z.priorLineage??[],{born:Q.born,birthDNA:Q.birthDNA,certificate:Q.certificate,projectDNA:Q.projectDNA,lastScore:Z.current.score,endedAt:new Date().toISOString()}]}birth($){let Z=this.endingLineage();if(!A1(this.dnaPath))this.sawNoFile=!0;let Q=new Date().toISOString();return this.own=!0,this.dna={birthCertificate:{born:Q,birthDNA:$,birthDNASource:"init",projectDNA:this.generateProjectDNA(),certificate:this.generateCertificate()},versions:[{version:"v1.0.0",timestamp:Q,score:$,changes:["Birth — initial context"],growth:0}],current:{version:"v1.0.0",score:$,lastSync:Q},growth:{totalGrowth:0,daysActive:0,milestones:[{type:"birth",score:$,date:Q,version:"v1.0.0",label:"Birth",emoji:"\uD83D\uDC23"}]},lastModified:Q,format:"faf-dna-v1",...Z.length>0?{priorLineage:Z}:{}},this.save(),this.dna}isFafShape(){return this.load()!==null&&this.own}readOnlyReason(){return this.load(),this.own?null:this.reason}recordGrowth($,Z){if(!this.dna&&!this.load())return null;if(!this.own)return null;let Q=this.dna;if($===Q.current.score)return Q;let z=new Date().toISOString(),X=Q.birthCertificate.birthDNA,H=$-X,U=this.incrementVersion(Q.versions[Q.versions.length-1].version);return Q.versions.push({version:U,timestamp:z,score:$,changes:Z,growth:H}),Q.current={version:U,score:$,lastSync:z},Q.growth.totalGrowth=H,Q.growth.daysActive=this.daysSince(Q.birthCertificate.born),this.updateMilestones($,U,z),this.save(),Q}getJourney(){if(!this.dna&&!this.load())return"";let $=this.dna,Z=$.birthCertificate.birthDNA,Q=$.growth.milestones.find((H)=>H.type==="peak"),z=$.current.score,X=`${Z}%`;if(Q&&Q.score!==Z){if(X+=` → ${Q.score}%`,z<Q.score)X+=` ← ${z}%`}else if(z!==Z)X+=` → ${z}%`;return X}getBirthDNADisplay(){if(!this.dna&&!this.load())return null;let $=this.dna;return{current:$.current.score,birthDNA:$.birthCertificate.birthDNA,growth:$.current.score-$.birthCertificate.birthDNA,born:F0($.birthCertificate.born)?$.birthCertificate.born:""}}getLog(){if(!this.dna&&!this.load())return[];return this.dna.versions.map(($)=>{let Z=$.growth>50?"\uD83D\uDE80":$.growth>20?"\uD83D\uDCC8":"\uD83D\uDCCA",Q=F0($.timestamp)?$.timestamp.split("T")[0]:"",z=Array.isArray($.changes)?$.changes.filter(F0).join(", "):"";return`${$.version} — ${$.score}% ${Z} (${Q}) ${z}`})}load(){if(this.dna)return this.dna;if(!m3(this.dnaPath)){if(!A1(this.dnaPath))this.sawNoFile=!0;return null}let $=this.read();if($===null)return null;let{text:Z,raw:Q}=$;if(l3(Q)&&C1(Q)===Z&&q_(Q))this.own=!0,this.reason=null,this.dna=Q;else this.own=!1,this.dna=d3(Q),this.reason=!this.dna?O_:!l3(Q)?K_:C1(Q)!==Z?D_:r3(Q)?I_:L_;return this.text=Z,this.dna}read(){let $;try{$=Z0(h(this.projectPath,".faf-dna"))}catch(Z){return this.reason=Z instanceof Error?Z.message:String(Z),null}try{return{text:$,raw:JSON.parse($)}}catch{return this.reason=".faf-dna is not JSON: faf leaves it as it is.",null}}save(){if(!this.dna)return;this.dna.lastModified=new Date().toISOString();let $=C1(this.dna),Z=this.text??(this.sawNoFile?null:I0(h(this.projectPath,".faf-dna")));e(this.dnaPath,$,{root:this.projectPath,expect:Z}),this.text=$,this.sawNoFile=!1}generateProjectDNA(){return Q_("sha256").update([this.projectPath,Date.now().toString(),Math.random().toString(36)].join(":")).digest("hex").substring(0,16)}generateCertificate(){let $=new Date().getFullYear(),Z=Math.random().toString(36).substring(2,6).toUpperCase(),Q=Z_(this.projectPath).replace(/[^A-Z0-9]/gi,"").toUpperCase().substring(0,8).padEnd(4,"X");return`FAF-${$}-${Q}-${Z}`}incrementVersion($){let[Z,Q,z]=$.replace("v","").split(".").map(Number);return`v${Z}.${Q}.${z+1}`}daysSince($){return Math.floor((Date.now()-new Date($).getTime())/86400000)}updateMilestones($,Z,Q){if(!this.dna)return;let z=this.dna.growth.milestones,X=(G)=>z.some((V)=>V.type===G),H=(G)=>z.push({type:G,score:$,date:Q,version:Z,...j1[G]});if($>=this.dna.birthCertificate.birthDNA*2&&$>0&&!X("doubled"))H("doubled");let U=z.find((G)=>G.type==="peak");if(!U||$>U.score){if(U)z.splice(z.indexOf(U),1);H("peak")}let J=z.findIndex((G)=>G.type==="current");if(J>=0)z.splice(J,1);H("current")}}import{join as $M}from"path";import{existsSync as r_,statSync as WA}from"fs";import{join as Hz}from"path";import{dirname as Zz,resolve as Qz}from"path";var a3=100;var F_="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",R_=[/^<(script|pre|style|textarea)(?=\s|>|$)/i,/^<!--/,/^<\?/,/^<![A-Za-z]/,/^<!\[CDATA\[/,new RegExp(`^</?(?:${F_})(?=\\s|/?>|$)`,"i"),new RegExp(`^(?:<[A-Za-z][A-Za-z0-9-]*(?:\\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\\s*=\\s*(?:[^"'=<>\`\\x00-\\x20]+|'[^']*'|"[^"]*"))?)*\\s*/?>|</[A-Za-z][A-Za-z0-9-]*\\s*>)\\s*$`,"i")],N_=[/<\/(?:script|pre|style|textarea)>/i,/-->/,/\?>/,/>/,/\]\]>/],T_=["","-->","?>",">","]]>"],A_=/[#`~*+_=<>0-9-]/,C_=/(\d{1,9})([.)])/y,j_=/#{1,6}(?:[ \t]+|$)/y,w_=/`{3,}(?!.*`)|~{3,}/y,S_=/(?:`{3,}|~{3,})(?=[ \t]*$)/y,E_=/(?:=+|-+)[ \t]*$/y,b_=/[^ \t\f\v\r\n]/;function Y6($,Z,Q){return $.lastIndex=Q,$.exec(Z)}var y_=($)=>$==="quote"||$==="list"||$==="item";function x_($){let Z=new Uint8Array($.length),Q="*-_",z=[0,0,0],X=[!0,!0,!0];for(let H=$.length-1;H>=0;H--){let U=$[H],J=U===" "||U==="\t";for(let V=0;V<3;V++)if(U==="*-_"[V])z[V]++;else if(!J)X[V]=!1;let G="*-_".indexOf(U);Z[H]=G>=0&&X[G]&&z[G]>=3?1:0}return Z}var B$=($)=>$===" "||$==="\t";function g_($,Z){if($==="document"||$==="quote"||$==="item")return Z!=="item";return $==="list"&&Z==="item"}var o3=($)=>$==="paragraph"||$==="code"||$==="html";function v_($){if($.kind==="list"||$.kind==="item")return{...$,list:{...$.list}};if($.kind==="code")return{...$,fence:$.fence&&{...$.fence}};return{...$}}class N0{containers;stack=[{kind:"document"}];ln="";offset=0;column=0;nextNonspace=0;nextNonspaceColumn=0;indent=0;indented=!1;blank=!1;allClosed=!0;matched=0;htmlStarted=!1;hiddenIn=null;scannedFrom=-1;breaks=null;deep=!1;limit=-1;overflow=-1;starts;constructor($=!0){this.containers=$;this.starts=[()=>this.startQuote(),()=>this.startHeading(),()=>this.startFence(),(Z)=>this.startHtml(Z),(Z)=>this.startSetext(Z),()=>this.startBreak(),(Z)=>this.startItem(Z),()=>this.startIndentedCode()]}clone(){let $=new N0(this.containers);return $.stack=this.stack.map(v_),$.deep=this.deep,$}overflowAt($,Z){let Q=this.clone();return Q.limit=Z,Q.line($),Q.overflow}get tooDeep(){return this.deep}line($){if(this.deep)return null;this.ln=$,this.offset=0,this.column=0,this.blank=!1,this.htmlStarted=!1,this.hiddenIn=null,this.scannedFrom=-1,this.breaks=null;let Z=this.continueContainers();if(Z<0)return this.hiddenIn;let Q=this.openBlocks(Z);if(this.deep)return null;if(!this.allClosed&&!this.blank&&this.tip.kind==="paragraph")return null;return this.closeUnmatched(),this.addText(Q),this.hiddenIn}closer(){if(this.stack.length!==2)return null;let $=this.stack[1];if($.kind==="code")return $.fence?$.fence.char.repeat($.fence.len):null;if($.kind!=="html"||$.type>5)return null;return $.type===1?`</${$.tag}>`:T_[$.type-1]}get tip(){return this.stack[this.stack.length-1]}continueContainers(){let $=this.stack.length-1,Z=0;while(Z<$){this.findNextNonspace();let Q=this.continues(this.stack[Z+1],Z+1);if(Q===2)return-1;if(Q===1)break;Z++}return this.allClosed=Z===$,this.matched=Z,Z}openBlocks($){let Z=this.stack[$],Q=Z.kind!=="paragraph"&&o3(Z.kind);while(!Q&&!this.deep){this.findNextNonspace();let z=this.nextNonspace;if(!this.indented&&!A_.test(this.ln.charAt(z)))break;let X=0;for(let H of this.starts)if(X=H(Z),X!==0)break;if(X===0)break;this.noteOverflow(z,X),Z=this.tip,Q=X===2}if(!Q)this.advanceNextNonspace();return Z}noteOverflow($,Z){if(Z===1&&this.limit>=0&&this.overflow<0&&this.stack.length-1>this.limit)this.overflow=$}addText($){if($.kind==="code")this.hiddenIn=$.fence?"code fence":"indented code";else if($.kind==="html")this.addHtmlLine($);else if(!o3($.kind)&&this.offset<this.ln.length&&!this.blank)this.addChild({kind:"paragraph"})}addHtmlLine($){if($.type>5)return;let Z=N_[$.type-1].test(this.ln.slice(this.offset));if(!(this.htmlStarted&&$.type===2&&Z))this.hiddenIn=$.type===1?`<${$.tag}>`:$.type===2?"comment":"html";if(Z)this.stack.pop()}continues($,Z){switch($.kind){case"quote":return this.continueQuote();case"item":return this.continueItem($);case"code":return $.fence?this.continueFence($.fence,Z):this.continueIndentedCode();default:return this.continueOther($)}}continueOther($){if($.kind==="heading"||$.kind==="break")return 1;return($.kind==="paragraph"||$.kind==="html"&&$.type>=6)&&this.blank?1:0}continueQuote(){if(this.indented||this.ch!==">")return 1;if(this.advanceNextNonspace(),this.advanceOffset(1,!1),B$(this.ln[this.offset]))this.advanceOffset(1,!0);return 0}continueItem($){let Z=$.list.markerOffset+$.list.padding;if(this.blank){if(!$.hasChild)return 1;this.advanceNextNonspace()}else if(this.indent>=Z)this.advanceOffset(Z,!0);else return 1;return 0}continueFence($,Z){let Q=this.indent<=3&&this.ch===$.char?Y6(S_,this.ln,this.nextNonspace):null;if(Q&&Q[0].length>=$.len)return this.stack.length=Z,this.hiddenIn="code fence",2;for(let z=$.offset;z>0&&B$(this.ln[this.offset]);z--)this.advanceOffset(1,!0);return 0}continueIndentedCode(){if(this.indent>=4)this.advanceOffset(4,!0);else if(this.blank)this.advanceNextNonspace();else return 1;return 0}get ch(){return this.ln.charAt(this.nextNonspace)}breakAhead(){return this.breaks??=x_(this.ln),this.breaks[this.nextNonspace]===1}startQuote(){if(!this.containers||this.indented||this.ch!==">")return 0;if(this.advanceNextNonspace(),this.advanceOffset(1,!1),B$(this.ln[this.offset]))this.advanceOffset(1,!0);return this.closeUnmatched(),this.addChild({kind:"quote"}),1}startHeading(){if(this.indented||this.ch!=="#"||!Y6(j_,this.ln,this.nextNonspace))return 0;return this.closeUnmatched(),this.addChild({kind:"heading"}),this.offset=this.ln.length,2}startFence(){let $=this.ch,Z=this.indented||$!=="`"&&$!=="~"?null:Y6(w_,this.ln,this.nextNonspace);if(!Z)return 0;return this.closeUnmatched(),this.addChild({kind:"code",fence:{char:Z[0][0],len:Z[0].length,offset:this.indent}}),this.advanceNextNonspace(),this.advanceOffset(Z[0].length,!1),2}startHtml($){if(this.indented||this.ch!=="<")return 0;let Z=!this.allClosed&&!this.blank&&this.tip.kind==="paragraph",Q=$.kind!=="paragraph"&&!Z,z=this.ln.slice(this.nextNonspace);for(let X=1;X<=(Q?7:6);X++){let H=R_[X-1].exec(z);if(H)return this.closeUnmatched(),this.addChild({kind:"html",type:X,tag:X===1?H[1].toLowerCase():""}),this.htmlStarted=!0,2}return 0}startSetext($){let Z=this.ch;if(this.indented||$.kind!=="paragraph"||Z!=="="&&Z!=="-"||!Y6(E_,this.ln,this.nextNonspace))return 0;return this.closeUnmatched(),this.stack[this.stack.length-1]={kind:"heading"},this.offset=this.ln.length,2}startBreak(){if(this.indented||!this.breakAhead())return 0;return this.closeUnmatched(),this.addChild({kind:"break"}),this.offset=this.ln.length,2}startItem($){if(!this.containers||this.indented&&$.kind!=="list")return 0;let Z=this.listMarker($);if(!Z)return 0;this.closeUnmatched();let Q=this.tip;if(Q.kind!=="list"||Q.list.bullet!==Z.bullet||Q.list.delimiter!==Z.delimiter)this.addChild({kind:"list",list:Z});return this.addChild({kind:"item",list:Z,hasChild:!1}),1}startIndentedCode(){if(!this.indented||this.tip.kind==="paragraph"||this.blank)return 0;return this.advanceOffset(4,!0),this.closeUnmatched(),this.addChild({kind:"code",fence:null}),2}listMarker($){if(this.indent>=4)return null;let Z=this.markerAt($);if(!Z)return null;let Q=this.indent;return this.advanceNextNonspace(),this.advanceOffset(Z.width,!0),{...Z.kind,markerOffset:Q,padding:this.paddingAfter(Z.width)}}markerAt($){let Z=$.kind==="paragraph",Q=this.markerKind(Z);if(!Q)return null;let z=this.ln[this.nextNonspace+Q.width];if(!(z===void 0||B$(z)))return null;if(Z&&!b_.test(this.ln.slice(this.nextNonspace+Q.width)))return null;return Q}markerKind($){let Z=this.ch;if(Z==="*"||Z==="+"||Z==="-")return{width:1,kind:{bullet:Z,delimiter:null}};let Q=Z>="0"&&Z<="9"?Y6(C_,this.ln,this.nextNonspace):null;if(!Q||$&&Number(Q[1])!==1)return null;return{width:Q[0].length,kind:{bullet:null,delimiter:Q[2]}}}paddingAfter($){let Z=this.column,Q=this.offset;do this.advanceOffset(1,!0);while(this.column-Z<5&&B$(this.ln[this.offset]));let z=this.column-Z;if(z>=1&&z<5&&this.ln[this.offset]!==void 0)return $+z;if(this.column=Z,this.offset=Q,B$(this.ln[this.offset]))this.advanceOffset(1,!0);return $+1}addChild($){while(!g_(this.tip.kind,$.kind))this.stack.pop();if(this.tip.hasChild=!0,this.stack.push($),y_($.kind)&&this.stack.length-1>100)this.deep=!0}closeUnmatched(){if(!this.allClosed)this.stack.length=this.matched+1,this.allClosed=!0}findNextNonspace(){let $=this.ln,Z=this.offset,Q=this.column;if(this.scannedFrom!==-1&&this.offset>=this.scannedFrom&&this.offset<=this.nextNonspace)Z=this.nextNonspace,Q=this.nextNonspaceColumn;else{this.scannedFrom=this.offset;for(;Z<$.length;Z++)if($[Z]===" ")Q++;else if($[Z]==="\t")Q+=4-Q%4;else break}this.blank=Z>=$.length,this.nextNonspace=Z,this.nextNonspaceColumn=Q,this.indent=Q-this.column,this.indented=this.indent>=4}advanceNextNonspace(){this.offset=this.nextNonspace,this.column=this.nextNonspaceColumn}advanceOffset($,Z){let Q=$;while(Q>0&&this.offset<this.ln.length){if(this.ln[this.offset]!=="\t"){this.offset++,this.column++,Q--;continue}let z=4-this.column%4,X=Z&&z>Q;this.column+=X?Q:z,this.offset+=X?0:1,Q-=Z?Math.min(z,Q):1}}}var b0="<!-- faf:start -->",y0="<!-- faf:end -->",t3="\uFEFF";function B6($){return $.match(/[^\r\n]*(?:\r\n|\r|\n|$)/g)?.filter((Z,Q,z)=>Z!==""||Q<z.length-1)??[]}var q$=($)=>$.replace(/\r?\n$|\r$/,""),zz=($)=>q$($).replace(/^\uFEFF/,"").trimEnd();function*w1($){let Z=0;for(let Q of B6($)){let z=q$(Q),X=Z===0&&z.charCodeAt(0)===65279?1:0;yield{offset:Z,from:Z+X,to:Z+z.length,content:z.slice(X)},Z+=Q.length}}function k_($,Z,Q,z){let X=$.some((U)=>U.start!==-1)&&z(Z.content),H=Q(Z.content);for(let U of $)if(U.start!==-1&&X)U.found={start:U.start,end:Z.to};else if(H)U.start=Z.from}function S1($,Z,Q){let[z,X]=[new N0(!0),new N0(!1)].map((H)=>({reader:H,start:-1,found:null}));for(let H of w1($)){let U=[z,X].map((G)=>G.reader.line(H.content));if(z.reader.tooDeep)return null;let J=[z,X].filter((G,V)=>U[V]===null);if(J.length>0)k_(J,H,Z,Q);if(z.found||X.found)return z.found&&X.found&&z.found.start===X.found.start?z.found:null}return null}var e3=($)=>(Z)=>Z===$;function w2($,Z=b0,Q=y0){return S1($,e3(Z),e3(Q))}function $z($,Z){let Q=[];for(let z of[!0,!1]){let X=new N0(z);for(let H of B6($))X.line(q$(H));if(X.clone().line(Z)!==null)Q.push(X.closer())}return Q}var h_=16;function u_($){let Z=new N0(!0);return $.map((Q)=>{let z=Z.overflowAt(q$(Q),h_),X=Q;if(z>=0){let H=/^\d{1,9}(?=[.)])/.exec(Q.slice(z)),U=H?z+H[0].length:z;X=`${Q.slice(0,U)}\\${Q.slice(U)}`}return Z.line(q$(X)),X})}function f_($,Z,Q){let X=u_(B6($).map((U)=>{let J=zz(U);return J===Z||J===Q?` ${U}`:U})).join(""),H=$z(X,Q);while(H.length>0&&H[0]!==null){let U=`${X}
|
|
267
|
+
${H[0]}`,J=$z(U,Q);if(J.length>=H.length)break;X=U,H=J}return X}function m_($,Z,Q){let z=$.slice(Z.length+1,$.length-Q.length-1),X=B6(z).map((H)=>q$(H)===""?`>${H}`:`> ${H}`).join("");return`${Z}
|
|
268
268
|
${X}
|
|
269
|
-
${Q}`}function W6($,Z,Q,z=b0,X=y0,H="the file"){let U=(G)=>{let V=`${$}${G}${Q}`,Y=w2(V,z,X);return Y&&Y.start===$.length&&Y.end===$.length+G.length?V:null},J=U(Z)??U(
|
|
270
|
-
${
|
|
271
|
-
${Q}`}function
|
|
272
|
-
`,Q,z,X);let H=w2($,Q,z);if(H)return W6($.slice(0,H.start),Z,$.slice(H.end),Q,z,X);let U=$.startsWith(
|
|
269
|
+
${Q}`}function W6($,Z,Q,z=b0,X=y0,H="the file"){let U=(G)=>{let V=`${$}${G}${Q}`,Y=w2(V,z,X);return Y&&Y.start===$.length&&Y.end===$.length+G.length?V:null},J=U(Z)??U(m_(Z,z,X));if(J===null)throw new b("unplaceable",H,`${H}: faf could not place its block where the next run finds it again — faf left it unchanged`,{onWrite:!0});return J}function E1($,Z=b0,Q=y0){return`${Z}
|
|
270
|
+
${f_($.trim(),Z,Q)}
|
|
271
|
+
${Q}`}function i8($,Z,Q=b0,z=y0,X){if($===null)return W6("",Z,`
|
|
272
|
+
`,Q,z,X);let H=w2($,Q,z);if(H)return W6($.slice(0,H.start),Z,$.slice(H.end),Q,z,X);let U=$.startsWith(t3)?t3:"";return W6(U,Z,`
|
|
273
273
|
|
|
274
|
-
${$.slice(U.length)}`,Q,z,X)}function q6($){try{return Z0($)}catch(Z){if(Z.code==="ENOENT")return null;throw Z}}function T0($,Z,Q=b0,z=y0,X={}){let H=
|
|
275
|
-
${G}`}function
|
|
276
|
-
`)}function
|
|
277
|
-
`)}function
|
|
278
|
-
`)}function
|
|
279
|
-
`)}function
|
|
280
|
-
`)}function
|
|
281
|
-
`)}function
|
|
274
|
+
${$.slice(U.length)}`,Q,z,X)}function q6($){try{return Z0($)}catch(Z){if(Z.code==="ENOENT")return null;throw Z}}function T0($,Z,Q=b0,z=y0,X={}){let H=E1(Z,Q,z),U=Qz($),J=X.root??Zz(U),G=h(J,U),V=q6(G);e(G,i8(V,H,Q,z,U),{root:J,expect:V})}var p_="<!-- faf:";function l_($){if($==="code fence")return"a code fence";if($==="indented code")return"an indented code block";if($==="comment")return"an HTML comment";return $==="html"?"an HTML block":`a ${$} block`}function c_($,Z){let Q=[new N0(!0),new N0(!1)],z=!1;for(let{content:X}of w1($)){if(z){if(X===Z)return"too deep";continue}let[H,U]=Q.map((G)=>G.line(X));z=Q[0].tooDeep;let J=H??U;if(X===Z&&(z||J!==null))return z?"too deep":J}return null}function d_($,Z,Q){let z=[new N0(!0),new N0(!1)];for(let{content:X}of w1($)){let H=z.map((U)=>U.line(X));if(z[0].tooDeep)return!1;if((X===Z||X===Q)&&H.some((U)=>U===null))return!0}return!1}function n8($,Z,Q=b0,z=y0){if(Z===null||w2(Z,Q,z))return null;let X=zz(B6(Z)[0]??"");if(X.startsWith(p_)&&X!==Q&&X!==z)return`${$}: faf's block is now on top; the old faf text below it is left as you had it — delete it by hand if you no longer want it.`;let H=c_(Z,Q);if(H==="too deep")return`${$}: faf's block is now on top; the file nests more than ${a3} lists or quotes before an older faf block, so faf did not read that far — the older block is left as you had it; delete it by hand if you no longer want it.`;if(H!==null)return`${$}: faf's block is now on top; an older faf block below sits inside ${l_(H)} and is left as you had it — delete it by hand if you no longer want it.`;if(d_(Z,Q,z))return`${$}: faf's block is now on top; an older faf marker line below it has no matching pair, so the text there is left as you had it — delete it by hand if you no longer want it.`;return null}function i_($,Z,Q=b0,z=y0,X={}){try{let H=Qz($);return n8(Z,q6(h(X.root??Zz(H),H)),Q,z)}catch{return null}}var n_=new Set(["API","CI","CD","MCP","CLI","SDK","UI","UX","AI","ML","DB","ORM","OS","HTTP","HTTPS","REST","RPC","JSON","YAML","XML","SQL","CSS","HTML","AWS","GCP","CDN","DNS","JWT","ID","IP","URL","URI","TS","JS"]);function b1($){return $.split("_").map((Z)=>{if(!Z)return Z;let Q=Z.toUpperCase();return n_.has(Q)?Q:Z.charAt(0).toUpperCase()+Z.slice(1)}).join(" ")}function i($){return typeof $==="string"&&$.trim()!==""&&$.trim()!=="slotignored"}function Q0($){let Z=g0.get($);if(Z?.label)return Z.label;let Q=$.includes(".")?$.slice($.lastIndexOf(".")+1):$;return b1(Q)}var y1=t.claude,s_="STATUS: SYNC ACTIVE";function o_($){let Z=Hz($,y1);if(!r_(Z))return null;return Z0(h($,y1))}function a_($,Z){T0(Hz($,y1),Z)}function x0($,Z={}){let Q=String($.project?.name??"").trim(),z=String($.project?.main_language??"").trim(),X=String($.project?.type??"").trim(),H=String($.project?.goal??"").trim(),U=`<!-- faf: ${[Q,z,X,H].join(" | ")} -->`,J=[];if(Z.doc)J.push(`doc=${Z.doc}`);else J.push(`claim=${Z.claim??"project.faf"}`);if(typeof Z.score==="number")J.push(`score=${Z.score}`);if(J.push(`family=${Z.family??"FAF"}`),Z.siblings&&Z.siblings.length>0)J.push(`siblings=${Z.siblings.join(",")}`);let G=`<!-- faf: ${J.join(" | ")} -->`;return`${U}
|
|
275
|
+
${G}`}function t_($){let Z=[],Q=$.project?.name??"Project",z=$.project?.main_language??"",X=$.project?.goal??"";if(Z.push(x0($)),Z.push(""),Z.push(`# CLAUDE.md — ${Q}`),Z.push(""),X)Z.push("## What This Is"),Z.push(""),Z.push(X),Z.push("");let H=$.stack??{},U=[];if(z)U.push(`**Language:** ${z}`);for(let[V,Y]of Object.entries(H))if(Y&&Y!=="slotignored"&&String(Y).trim())U.push(`**${Q0(`stack.${V}`)}:** ${Y}`);if(U.length>0){Z.push("## Stack"),Z.push("");for(let V of U)Z.push(`- ${V}`);Z.push("")}let J=$.human_context??{},G=[["who",J.who],["what",J.what],["why",J.why],["where",J.where],["when",J.when],["how",J.how]].filter(([,V])=>V&&String(V).trim()).map(([V,Y])=>`- **${Q0(`human_context.${V}`)}:** ${Y}`);if(G.length>0)Z.push("## Context"),Z.push(""),Z.push(...G),Z.push("");return Z.push("---"),Z.push(""),Z.push(`*${s_} — ${new Date().toISOString()}*`),Z.push(""),Z.join(`
|
|
276
|
+
`)}function Xz($){return $.replace(/\s+v\d+(?:\.\d+)*\s*$/i,"").trim()}function e_($){let Z={project:{}},Q=$.match(/^# CLAUDE\.md\s*[—–-]\s*(.+)$/m);if(Q)Z.project.name=Xz(Q[1].trim());if(!Z.project.name){let H=$.match(/\*\*Name:\*\*\s*(.+)/);if(H)Z.project.name=Xz(H[1].trim())}let z=$.match(/## What This Is\s*\n\s*\n(.+)/);if(z)Z.project.goal=z[1].trim();if(!Z.project.goal){let H=$.match(/\*\*What Building:\*\*\s*(.+)/);if(H)Z.project.goal=H[1].trim()}let X=$.match(/\*\*Language:\*\*\s*(.+)/);if(X)Z.project.main_language=X[1].trim();if(!Z.project.main_language){let H=$.match(/\*\*Main Language:\*\*\s*(.+)/);if(H)Z.project.main_language=H[1].trim()}return Z}function S2($){let Z=String($??"").trim(),Q=Z.indexOf(" — ");if(Q<=0)return{cmd:Z,note:null};let z=Z.slice(0,Q).trim(),X=Z.slice(Q+3).trim();if(!z||!X)return{cmd:Z,note:null};return{cmd:z,note:X}}function X2($){return S2($).cmd}var U0=($)=>$!==null&&$!==void 0&&$!==""&&$!=="slotignored"&&!(Array.isArray($)&&$.length===0),Uz=($)=>Array.isArray($)?$.join(", "):String($),ZM=new Set(["commit_style","communication","response_style","explanation_level","explanations","documentation","code_first"]),QM=new Set(["target_user","core_problem","mission_purpose"]);function Jz($){let Z=[],Q=(A="")=>Z.push(A),z=$.ai_instructions,X=$.preferences,H=$.instant_context,U=$.security,J=$.commands,G=$.key_files??H?.key_files,V=U0($.project?.default_branch)?String($.project?.default_branch):"main",Y=J?Object.entries(J).filter(([,A])=>U0(A)):[],W=Y.filter(([A])=>/test/i.test(A)),B=Y.filter(([A])=>/lint|check/i.test(A)&&!/test/i.test(A)),K=Y.filter(([A])=>!/test|lint|check/i.test(A)),L=(A)=>{let j=A.toLowerCase();if(/install|deps/.test(j))return 0;if(/^build$|build/.test(j)&&!/rebuild/.test(j))return 1;if(/^dev$|develop/.test(j))return 2;if(/^start$|run/.test(j))return 3;return 4},q=[...K].sort((A,j)=>L(A[0])-L(j[0])||A[0].localeCompare(j[0])),D=[...W,...B],O=q.find(([A])=>/build/i.test(A)),_=W[0]?X2(W[0][1]):void 0,C=O?X2(O[1]):void 0;Q(x0($)),Q(),Q(`# AGENTS.md — ${$.project?.name??"Project"}`),Q();let F=[];if($.project?.main_language)F.push(String($.project.main_language));if(U0($.project?.type))F.push(`type: ${String($.project?.type)}`);if(U0($.project?.version))F.push(`v${String($.project?.version)}`);let N=$.project?.goal?String($.project.goal).trim():"";if(F.length)N+=(N?" — ":"")+F.join(" · ");if(N)Q(N),Q();if(Q("> Authored by faf — do not edit the managed block; refresh with `faf export --agents`. Hand-written content outside the managed block is preserved."),Q(),q.length){Q("## Setup & build"),Q(),Q("```bash");for(let[A,j]of q){let{cmd:c,note:q0}=S2(j);Q(`${c} # ${q0??A}`)}Q("```"),Q()}if(D.length){Q("## Run the tests"),Q(),Q("```bash");for(let[,A]of D){let{cmd:j,note:c}=S2(A);Q(c?`${j} # ${c}`:j)}Q("```"),Q()}if(G&&G.length){Q("## Where things live"),Q();let A=G.map((j)=>{let c=String(j),q0=c.indexOf(" — ");return q0>0?{path:c.slice(0,q0),role:c.slice(q0+3)}:{path:c,role:""}});if(A.some((j)=>j.role)){Q("| Path | Role |"),Q("|------|------|");for(let j of A)Q(`| \`${j.path}\` | ${j.role} |`)}else for(let j of A)Q(`- \`${j.path}\``);Q()}let T=new Map,w=(A)=>{if(!A)return;for(let[j,c]of Object.entries(A)){if(ZM.has(j)||!U0(c))continue;let q0=b1(j);if(!T.has(q0))T.set(q0,Uz(c))}};w(z?.working_style),w(X);let P=$.conventions??[];if(T.size||P.length){Q("## Conventions"),Q();for(let[A,j]of T)Q(`- **${A}:** ${j}`);for(let A of P)if(U0(A))Q(`- ${A}`);Q()}let E=(z?.warnings??[]).filter((A)=>U0(A)),n=["read the tree"];if(_)n.push(`run the tests (\`${_}\`)`);if(C)n.push("build the project");for(let[,A]of B.slice(0,1))n.push(`\`${X2(A)}\``);Q("## Guardrails"),Q();for(let A of E)Q(`- ${A}`);Q(`- **Always OK:** ${[...new Set(n)].join(" · ")}.`),Q("- **Ask first:** dependency installs, deletions, migrations, schema changes, publish/release."),Q(`- **Never:** force-push · push straight to \`${V}\` (branch and open a PR) · commit secrets.`),Q();let a=[];for(let[,A]of B)a.push(`\`${X2(A)}\` exits 0`);for(let[,A]of W)a.push(`\`${X2(A)}\` passes`);if(a.push("changes committed with a conventional message"),Q("## Definition of Done"),Q(),Q(`Done when: ${[...new Set(a)].join(" · ")}.`),Q(),Q("## When stuck"),Q(),Q(`Ask a clarifying question, propose a short plan, or open a draft PR with notes — do not push large speculative changes to \`${V}\`.`),Q(),U&&(U0(U.secrets)||(U.never??[]).length)){if(Q("## Security & secrets"),Q(),U0(U.secrets)){let A=U0(U.example)?` (see \`${U.example}\`)`:"";Q(`- Secrets live in \`${U.secrets}\`${A}. Never read or commit them.`)}for(let A of U.never??[])if(U0(A))Q(`- Never read or commit \`${A}\`.`);Q()}if(Q("## Commit & PR"),Q(),X&&U0(X.commit_style))Q(`- Commit style: ${Uz(X.commit_style)}`);else Q("- Conventional Commits preferred (`feat:`, `fix:`, `chore:`, …).");if(Q(`- Branch off \`${V}\` and open a PR — never commit to \`${V}\` directly.`),Q("- If build/test scripts or layout change, refresh this file in the **same PR** (`faf export --agents`)."),Q(),$.stack){let A=[];for(let[j,c]of Object.entries($.stack)){if(QM.has(j))continue;if(i(c))A.push(`- **${Q0(`stack.${j}`)}:** ${c.trim()}`)}if(A.length){Q("## Stack"),Q();for(let j of A)Q(j);Q()}}let g=$.generated;if(U0(g))Q(`*Context authored: ${String(g)}*`);return Z.join(`
|
|
277
|
+
`)}function zM($,Z){T0($M($,t.agents),Jz(Z))}import{join as XM}from"path";var HM=($)=>$!==null&&$!==void 0&&$!==""&&$!=="slotignored"&&!(Array.isArray($)&&$.length===0),UM=new Set(["target_user","core_problem","mission_purpose"]);function Gz($){let Z=[],Q=$.instant_context,z=$.commands,X=$.key_files??Q?.key_files,H=z?Object.entries(z).filter(([,B])=>HM(B)):[],U=H.filter(([B])=>/test/i.test(B)),J=H.filter(([B])=>/lint|check/i.test(B)&&!/test/i.test(B)),G=H.filter(([B])=>!/test|lint|check/i.test(B)),V=(B)=>{let K=B.toLowerCase();if(/install|deps/.test(K))return 0;if(/^build$|build/.test(K)&&!/rebuild/.test(K))return 1;if(/^dev$|develop/.test(K))return 2;if(/^start$|run/.test(K))return 3;return 4},Y=[...G].sort((B,K)=>V(B[0])-V(K[0])||B[0].localeCompare(K[0])),W=[...U,...J];if(Z.push(x0($)),Z.push(""),Z.push(`# GEMINI.md — ${$.project?.name??"Project"}`),Z.push(""),Z.push("> Authored from project.faf — refresh with `faf export --gemini`."),Z.push(""),$.project?.name)Z.push(`Project: ${$.project.name}`);if($.project?.goal)Z.push(`Goal: ${$.project.goal}`);if($.project?.main_language)Z.push(`Language: ${$.project.main_language}`);if(Y.length){Z.push(""),Z.push("## Setup & build"),Z.push(""),Z.push("```bash");for(let[B,K]of Y){let{cmd:L,note:q}=S2(K);Z.push(`${L} # ${q??B}`)}Z.push("```")}if(W.length){Z.push(""),Z.push("## Test & verify"),Z.push(""),Z.push("```bash");for(let[,B]of W){let{cmd:K,note:L}=S2(B);Z.push(L?`${K} # ${L}`:K)}Z.push("```")}if(X&&X.length){Z.push(""),Z.push("## Where things live"),Z.push("");for(let B of X)Z.push(`- \`${B}\``)}if($.stack){let B=[];for(let[K,L]of Object.entries($.stack)){if(UM.has(K))continue;if(i(L))B.push(`- ${Q0(`stack.${K}`)}: ${L.trim()}`)}if(B.length){Z.push(""),Z.push("## Stack");for(let K of B)Z.push(K)}}return Z.push(""),Z.push("## Before changing things"),Z.push(""),Z.push("- Ask first: dependency installs, deletions, migrations, schema changes, publish/release."),Z.push("- Never: force-push · push straight to `main` · commit secrets."),Z.push(""),Z.join(`
|
|
278
|
+
`)}function JM($,Z){T0(XM($,t.gemini),Gz(Z))}import{join as GM}from"path";function Vz($){let Z=[];if(Z.push(x0($)),Z.push(""),Z.push("# .cursorrules"),Z.push(`# Authored from project.faf — ${$.project?.name??"Project"}`),Z.push(""),$.project?.main_language)Z.push(`language: ${$.project.main_language}`);if($.stack){Z.push(""),Z.push("# Stack");for(let[Q,z]of Object.entries($.stack))if(i(z))Z.push(`# ${Q0(`stack.${Q}`)}: ${z.trim()}`)}return Z.push(""),Z.join(`
|
|
279
|
+
`)}function VM($,Z){T0(GM($,t.cursorrules),Vz(Z),"# faf:start","# faf:end")}import{join as YM}from"path";var Yz=[["install","Install with"],["build","Build with"],["test","Test with"],["lint","Lint with"],["run","Run with"],["start","Start with"],["dev","Run the dev server with"]],WM=new Set([...Yz.map(([$])=>$),"cicd"]);function Wz($){let Z=[],Q=$.project?.name??"Project";if(Z.push(x0($)),Z.push(""),Z.push(`# GitHub Copilot Instructions — ${Q}`),Z.push(""),Z.push("> Authored from project.faf by FAF. Copilot reads these instructions on every request in this repository — keep them short and broadly applicable."),Z.push(""),i($.project?.goal))Z.push($.project.goal.trim()),Z.push("");let z=$.stack??{},X=[];if(i($.project?.main_language))X.push(`- **Language:** ${$.project.main_language.trim()}`);for(let[V,Y]of Object.entries(z)){if(WM.has(V))continue;if(i(Y))X.push(`- **${Q0(`stack.${V}`)}:** ${Y.trim()}`)}if(X.length>0)Z.push("## Tech stack","",...X,"");let H=[];for(let[V,Y]of Yz){let W=z[V];if(i(W))H.push(`- ${Y} \`${W.trim()}\`.`)}if(i(z.cicd))H.push(`- CI runs on ${z.cicd.trim()}.`);if(H.length>0)Z.push("## Build & run","",...H,"");let U=$.human_context??{},G=[["who",U.who],["what",U.what],["why",U.why],["where",U.where],["when",U.when],["how",U.how]].filter(([,V])=>i(V)).map(([V,Y])=>`- **${Q0(`human_context.${V}`)}:** ${Y.trim()}`);if(G.length>0)Z.push("## Project context","",...G,"");return Z.join(`
|
|
280
|
+
`)}function BM($,Z){$$($,".github"),T0(YM($,".github",t.copilot),Wz(Z),b0,y0,{root:$})}import{existsSync as qM,lstatSync as Lz,readFileSync as s8,realpathSync as x1,statSync as KM}from"fs";import{homedir as DM}from"os";import{basename as LM,dirname as g1,join as A0,resolve as E2}from"path";var Bz=200,qz=200,Kz=12,IM="# Project Context (from project.faf)",OM="*This section is managed by tri-sync.";function _M($){let Z=0;for(let Q=0;Q<$.length;Q++)Z=(Z<<5)-Z+$.charCodeAt(Q)|0;return Z}function Iz($){let Z=$.replace(/[^a-zA-Z0-9]/g,"-");if(Z.length<=Bz)return Z;return`${Z.slice(0,Bz)}-${Math.abs(_M($)).toString(36)}`}function Oz($){try{let Z=Lz($);if(Z.isSymbolicLink()){let Q=KM($);return Q.isDirectory()||Q.isFile()}return Z.isDirectory()||Z.isFile()}catch{return!1}}function Dz($){try{return Lz($).isFile()}catch{return!1}}function MM($){let Z=$;for(;;){if(Oz(A0(Z,".git")))return Z;let Q=g1(Z);if(Q===Z)return null;Z=Q}}function PM($){let Z;try{Z=s8(A0($,".git"),"utf-8").trim()}catch{return $}try{if(!Z.startsWith("gitdir:"))return $;let Q=E2($,Z.slice(7).trim()),z=A0(Q,"commondir");if(!Dz(z))return $;let X=E2(Q,s8(z,"utf-8").trim());if(E2(g1(Q))!==A0(X,"worktrees"))return $;let H=A0(Q,"gitdir");if(!Dz(H))return $;let U=s8(H,"utf-8").trim();if(x1(E2(Q,U))!==A0(x1($),".git"))return $;if(LM(X)!==".git")return Oz(A0(X,".git"))?$:X;return g1(X)}catch{return $}}function _z($){let Z=E2($);try{Z=x1.native(Z)}catch{}let Q=MM(Z);return(Q?PM(Q):Z).normalize("NFC")}function a8($,Z={}){if(Z.memoryDir)return E2(Z.memoryDir);let Q=Z.configDir||process.env.CLAUDE_CODE_REMOTE_MEMORY_DIR||process.env.CLAUDE_CONFIG_DIR||A0(DM(),".claude");return A0(E2(Q),"projects",Iz(_z($)),"memory").normalize("NFC")}function FM($,Z={}){return A0(a8($,Z),t.memory)}var RM=new Set(["target_user","core_problem","mission_purpose"]),NM=["who","what","why","where","when","how"];function Mz($){let Z=$.project??{},Q=[["Goal",Z.goal],["Language",Z.main_language],["Type",Z.type]],z=$.human_context??{},X=Array.isArray($.key_files)?$.key_files:[];return["## Project context — from project.faf","",`- **Name:** ${i(Z.name)?Z.name:"Project"}`,...Q.filter(([,U])=>i(U)).map(([U,J])=>`- **${U}:** ${J}`),...r8("Stack",Object.entries($.stack??{}).filter(([U,J])=>!RM.has(U)&&i(J)).map(([U,J])=>`- **${Q0(`stack.${U}`)}:** ${J}`)),...r8("Context",NM.filter((U)=>i(z[U])).map((U)=>`- **${Q0(`human_context.${U}`)}:** ${z[U]}`)),...r8("Commands",Object.entries($.commands??{}).filter(([,U])=>i(U)).slice(0,Kz).map(([U,J])=>`- ${U}: \`${X2(J)}\``)),...r8("Key files",X.filter(i).slice(0,Kz).map((U)=>`- ${U}`)),"","*faf keeps this block in step with project.faf. Everything outside it is Claude's own and is kept as written.*"].join(`
|
|
281
|
+
`)}function r8($,Z){return Z.length>0?["",`### ${$}`,...Z]:[]}function Pz($){return S1($,(Z)=>Z.trimEnd()===IM,(Z)=>Z.startsWith(OM))}function o8($){if($==="")return 0;let Z=$.match(/\r\n|\r|\n/g)?.length??0;return/(\r\n|\r|\n)$/.test($)?Z:Z+1}function TM($,Z,Q){if($===null)return{text:i8(null,Z,void 0,void 0,Q),action:"created",head:"",tail:""};let z=w2($),X=z??Pz($);if(X){let U=$.slice(0,X.start),J=$.slice(X.end);return{text:W6(U,Z,J,void 0,void 0,Q),action:z?"updated":"migrated",head:U,tail:J}}let H=$.startsWith("\uFEFF")?"\uFEFF":"";return{text:i8($,Z,void 0,void 0,Q),action:"added",head:H,tail:$.slice(H.length)}}function v1($){return $>qz?[`MEMORY.md is ${$} lines. Claude Code loads the first ${qz}; lines after that are kept in the file but not loaded.`]:[]}function AM($,Z={}){let Q=a8($,Z),z=A0(Q,t.memory),X={path:z,exists:!1,lines:0,hasBlock:!1,blockLines:0,hasLegacySection:!1,otherLines:0,warnings:[]};if(!qM(Q))return X;let H=q6(h(Q,t.memory));if(H===null)return X;let U=w2(H),J=U?`${H.slice(0,U.start)}${H.slice(U.end)}`:H,G=o8(H);return{path:z,exists:!0,lines:G,hasBlock:U!==null,blockLines:U?o8(H.slice(U.start,U.end)):0,hasLegacySection:!U&&Pz(H)!==null,otherLines:J.split(/\r\n|\r|\n/).filter((V)=>V.replace(/^\uFEFF/,"").trim()!=="").length,warnings:v1(G)}}function CM($,Z,Q={}){let z=a8($,Q);$$(z);let X=h(z,t.memory),H=q6(X),U=TM(H,E1(Mz(Z)),X);if(U.text===H){let B=o8(H);return{path:X,action:"unchanged",written:!1,preserved:!0,lines:B,warnings:v1(B)}}let J=e(X,U.text,{root:z,expect:H}),G=s8(J,"utf-8"),V=G===U.text&&G.startsWith(U.head)&&G.endsWith(U.tail),Y=o8(G),W=U.action==="added"?n8(t.memory,H):null;return{path:J,action:U.action,written:!0,preserved:V,lines:Y,warnings:[...W?[W]:[],...v1(Y)]}}function jM($,Z){let Q=[],z=(G)=>I($,G),X=(G)=>S($,G)??"";if(z("tsconfig.json")&&/"strict"\s*:\s*true/.test(X("tsconfig.json")))Q.push("TypeScript strict mode (tsconfig.json)");if(Z?.type==="module")Q.push("ESM modules (`type: module`)");let H=[],U=Z?.devDependencies??{};if(z(".eslintrc")||z(".eslintrc.json")||z(".eslintrc.cjs")||z("eslint.config.js")||z("eslint.config.mjs")||"eslint"in U)H.push("ESLint");if(z(".prettierrc")||z(".prettierrc.json")||z("prettier.config.js")||"prettier"in U)H.push("Prettier");let J=z("pyproject.toml")?X("pyproject.toml"):"";if(/\[tool\.black\]/.test(J))H.push("black");if(/\[tool\.ruff\]/.test(J))H.push("ruff");if(/\[tool\.mypy\]/.test(J))H.push("mypy");if(z("rustfmt.toml")||z(".rustfmt.toml"))H.push("rustfmt");if(H.length)Q.push(`Style enforced by ${H.join(" · ")} — obey the configs`);return Q}function wM($,Z){let Q={...Z},z=null,X=S($,"package.json");if(X!==null)try{z=JSON.parse(X)}catch{z=null}let H=c8($,z);if(Object.keys(H).length)Q.commands={...H,...Z.commands??{}};let U=Z.key_files??Z.instant_context?.key_files;if(!U||U.length===0){let J=l8($);if(J.length)Q.key_files=J}if(!Z.security){let G=[".env",".env.local",".env.development"].find((V)=>I($,V));if(G){let V=[".env.example",".env.sample",".env.template"].find((Y)=>I($,Y));Q.security={secrets:G,...V?{example:V}:{}}}}if(!Z.conventions){let J=jM($,z);if(J.length)Q.conventions=J}return Q}export{ZD as writeServerCard,AK as writeProjectHtml,JM as writeGeminiMd,fq as writeFaf,VM as writeCursorrules,BM as writeCopilotInstructions,CM as writeClaudeMemory,a_ as writeClaudeMd,zM as writeAgentsMd,mz as validateFaf,M2 as utcNow,BD as upsertCatalog,gq as updateFafFile,uO as updateExistingFaf,k8 as turboCatSlots,O3 as turboCatScan,Cz as slotsByCategory,i9 as serializeFaf,tQ as seedSixWsFromGoal,fz as scoreText,H5 as scoreFafYaml,e as safeWriteFile,tB as safeUnlink,Y9 as safeReplaceOwned,mD as runLoop,h as resolveInside,FM as resolveClaudeMemoryPath,a8 as resolveClaudeMemoryDir,f3 as repoNameFromUrl,pZ as renderProjectHtml,Gz as renderGeminiMd,Vz as renderCursorrules,Wz as renderCopilotInstructions,Mz as renderClaudeMemory,t_ as renderClaudeMd,Jz as renderAgentsMd,M3 as relentlessContextDetailed,h8 as relentlessContext,C8 as registryTitle,tZ as registryName,I2 as registryMeta,Z0 as readUtf8,JD as readFafa,s9 as readFafRaw,xq as readFaf,o_ as readClaudeMd,U1 as questionForSlot,iD as publicQuestions,NQ as projectServerJson,N8 as projectServerCard,CQ as projectPack,LD as projectCards,AQ as projectArd,TQ as projectAiCatalog,F8 as projectA2ACard,QD as patchServerJson,e_ as parseClaudeMd,aO as normalizeGitUrl,S8 as normalizeAnswer,rZ as mcpName,$$ as makeDirInside,Z3 as loopVerdict,i_ as legacyStampNoteAt,n8 as legacyStampNote,X5 as kernel,o as isPlaceholder,cq as isNonProjectRoot,eQ as isHumanSlot,Sz as isExplicitNone,w8 as isEmptyValue,gD as interviewForMissing,T0 as injectFafBlock,nD as gradeAnswers,O$ as getTier,bz as getNextTier,zD as generateServerCard,CK as generateProjectHtml,VD as generateA2ACard,cQ as fromClaudeDir,GD as findFafaFile,o9 as findFafFile,w2 as findFafBlock,l0 as fillEmpties,_Q as fafaYaml,z$ as fafaDomain,x0 as fafMetaTag,S0 as fafContextBlock,c1 as enrichScore,wM as enrichFromRepo,dD as deriveQuestionSet,oq as computeDrift,_z as claudeProjectRoot,Iz as claudeProjectId,AM as claudeMemoryStatus,$3 as classifyGaps,U$ as canonicalPriority,uD as buildTableOf8,Z6 as buildServerCard,rD as buildReceipt,rK as buildPack,eZ as buildA2ACard,tO as authorFafFromRepo,N1 as assembleFreshFaf,OQ as answersToFafa,H3 as answersMatch,v0 as TIERS,b as SafePathError,oQ as STACK_INTERVIEW,g0 as SLOT_BY_PATH,m as SLOTS,L6 as SLOTIGNORED,H1 as SIX_WS_INTERVIEW,qQ as SERVER_JSON_SCHEMA,P8 as SERVER_CARD_SCHEMA,lZ as REGISTRY_PUBLISHER_KEY,z2 as PRIORITY_RANK,$1 as PRIORITY_ORDER,D6 as PLACEHOLDERS,j8 as KNOWLEDGE_TYPES,sQ as INTERVIEW_VERSION,xD as INTERVIEW_PATHS,aQ as INTERVIEW_BY_PATH,G$ as INTERVIEW,Y0 as FafmSoul,s3 as FafDNAManager,b0 as FAF_START,L$ as FAF_HEX,y0 as FAF_END,f1 as EXPLICIT_NONE,wz as ENTERPRISE_SLOTS,G1 as BENCH_VERSION,jz as BASE_SLOTS,X3 as ALIAS_GROUPS,Q$ as A2A_CONTEXT_URI};
|
|
282
282
|
|
|
283
|
-
//# debugId=
|
|
283
|
+
//# debugId=D9725F92AE39B4D964756E2164756E21
|
|
284
284
|
//# sourceMappingURL=index.js.map
|