@kitelev/exocortex-cli 17.7.5 → 17.7.7

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.
Files changed (2) hide show
  1. package/dist/index.js +3 -3
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- // @kitelev/exocortex-cli v17.7.5
2
+ // @kitelev/exocortex-cli v17.7.7
3
3
  // CLI tool for Exocortex knowledge management system - SPARQL queries, task management, and more
4
4
  // License: MIT
5
5
 
@@ -116,7 +116,7 @@ ${n}}`}default:throw new zf(`Unsupported operation type for SPARQL generation: $
116
116
  `)}generateTriple(e){let t=this.generateElement(e.subject),n=this.generatePredicate(e.predicate),i=this.generateElement(e.object);return`${t} ${n} ${i}`}generatePredicate(e){return"pathType"in e?this.generatePropertyPath(e):this.generateElement(e)}generatePropertyPath(e){let t=e.items.map(n=>"pathType"in n?`(${this.generatePropertyPath(n)})`:`<${n.value}>`);switch(e.pathType){case"/":return t.join("/");case"|":return t.join("|");case"^":return`^${t[0]}`;case"+":return`${t[0]}+`;case"*":return`${t[0]}*`;case"?":return`${t[0]}?`}}generateElement(e){switch(e.type){case"variable":return`?${e.value}`;case"iri":return`<${e.value}>`;case"literal":{let n=`"${e.value.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t")}"`;return e.language?n+=`@${e.language}`:e.datatype&&(n+=`^^<${e.datatype}>`),n}case"blank":return`_:${e.value}`;default:throw new zf(`Unknown element type: ${e.type}`)}}generateValues(e,t){let n=" ".repeat(t);if(e.variables.length===0||e.bindings.length===0)return"";if(e.variables.length===1){let o=e.variables[0],c=e.bindings.map(l=>{let u=l[o];return u?this.generateValuesTerm(u):"UNDEF"}).join(" ");return`${n}VALUES ?${o} { ${c} }`}let i=e.variables.map(o=>`?${o}`).join(" "),s=e.bindings.map(o=>`(${e.variables.map(l=>{let u=o[l];return u?this.generateValuesTerm(u):"UNDEF"}).join(" ")})`);return`${n}VALUES (${i}) {
117
117
  ${s.map(o=>`${n} ${o}`).join(`
118
118
  `)}
119
- ${n}}`}generateValuesTerm(e){if(e.type==="iri")return`<${e.value}>`;let n=`"${e.value.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`;return e.language?n+=`@${e.language}`:e.datatype&&(n+=`^^<${e.datatype}>`),n}generateExpression(e){switch(e.type){case"variable":return`?${e.name}`;case"literal":return typeof e.value=="string"?`"${e.value.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`:typeof e.value=="boolean"?e.value?"true":"false":String(e.value);case"comparison":return`(${this.generateExpression(e.left)} ${e.operator} ${this.generateExpression(e.right)})`;case"logical":return e.operator==="!"?`!(${this.generateExpression(e.operands[0])})`:`(${e.operands.map(t=>this.generateExpression(t)).join(` ${e.operator} `)})`;case"arithmetic":return`(${this.generateExpression(e.left)} ${e.operator} ${this.generateExpression(e.right)})`;case"function":return`${e.function.toUpperCase()}(${e.args.map(t=>this.generateExpression(t)).join(", ")})`;case"functionCall":return`${(typeof e.function=="string"?e.function:e.function.value).toUpperCase()}(${e.args.map(n=>this.generateExpression(n)).join(", ")})`;case"exists":return`${e.negated?"NOT EXISTS":"EXISTS"} { ${this.generateWhereClause(e.pattern,0)} }`;case"in":{let t=this.generateExpression(e.expression),n=e.list.map(i=>this.generateExpression(i)).join(", ");return e.negated?`${t} NOT IN (${n})`:`${t} IN (${n})`}default:throw new zf(`Unknown expression type: ${e.type}`)}}collectVariablesFromOperation(e,t){switch(e.type){case"bgp":for(let n of e.triples)this.collectVariablesFromTriple(n,t);break;case"filter":this.collectVariablesFromOperation(e.input,t),this.collectVariablesFromExpression(e.expression,t);break;case"join":case"leftjoin":case"union":case"minus":this.collectVariablesFromOperation(e.left,t),this.collectVariablesFromOperation(e.right,t);break;case"values":for(let n of e.variables)t.add(n);break;case"project":for(let n of e.variables)t.add(n);this.collectVariablesFromOperation(e.input,t);break;case"extend":t.add(e.variable),this.collectVariablesFromOperation(e.input,t);break;case"orderby":case"slice":case"distinct":case"reduced":this.collectVariablesFromOperation(e.input,t);break;case"group":for(let n of e.variables)t.add(n);for(let n of e.aggregates)t.add(n.variable);this.collectVariablesFromOperation(e.input,t);break;case"subquery":this.collectVariablesFromOperation(e.query,t);break}}collectVariablesFromTriple(e,t){e.subject.type==="variable"&&t.add(e.subject.value),"type"in e.predicate&&e.predicate.type==="variable"&&t.add(e.predicate.value),e.object.type==="variable"&&t.add(e.object.value)}collectVariablesFromExpression(e,t){switch(e.type){case"variable":t.add(e.name);break;case"comparison":case"arithmetic":this.collectVariablesFromExpression(e.left,t),this.collectVariablesFromExpression(e.right,t);break;case"logical":for(let n of e.operands)this.collectVariablesFromExpression(n,t);break;case"function":case"functionCall":for(let n of e.args)this.collectVariablesFromExpression(n,t);break;case"exists":this.collectVariablesFromOperation(e.pattern,t);break;case"in":this.collectVariablesFromExpression(e.expression,t);for(let n of e.list)this.collectVariablesFromExpression(n,t);break}}};Hf.SPARQLGenerator=yI});var Yf=T(Pi=>{"use strict";var eZ=Pi&&Pi.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var i=Object.getOwnPropertyDescriptor(e,t);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:a(function(){return e[t]},"get")}),Object.defineProperty(r,n,i)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),tZ=Pi&&Pi.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),tM=Pi&&Pi.__importStar||(function(){var r=a(function(e){return r=Object.getOwnPropertyNames||function(t){var n=[];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[n.length]=i);return n},r(e)},"ownKeys");return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n=r(e),i=0;i<n.length;i++)n[i]!=="default"&&eZ(t,e,n[i]);return tZ(t,e),t}})();Object.defineProperty(Pi,"__esModule",{value:!0});Pi.QueryExecutor=Pi.ExoQLQueryExecutor=Pi.QueryExecutorError=void 0;var rZ=$A(),nZ=Ab(),iZ=iI(),sZ=oI(),oZ=Uk(),aZ=Vk(),cZ=zk(),lZ=hI(),uZ=Kk(),fZ=Xk(),dZ=Zk(),pZ=eM(),hZ=Le(),mZ=He(),gZ=bb(),En="http://www.w3.org/2001/XMLSchema#",yZ=new Set([`${En}integer`,`${En}decimal`,`${En}float`,`${En}double`,`${En}nonPositiveInteger`,`${En}negativeInteger`,`${En}long`,`${En}int`,`${En}short`,`${En}byte`,`${En}nonNegativeInteger`,`${En}unsignedLong`,`${En}unsignedInt`,`${En}unsignedShort`,`${En}unsignedByte`,`${En}positiveInteger`]),Kf=class extends Error{static{a(this,"QueryExecutorError")}constructor(e,t){super(e,t?{cause:t}:void 0),this.name="QueryExecutorError"}};Pi.QueryExecutorError=Kf;var Db=class{static{a(this,"ExoQLQueryExecutor")}constructor(e,t={}){let n=t.resolveClassHierarchy===!1?e:new dZ.ClassHierarchyResolvingStore(e);this.tripleStore=n,this.bgpExecutor=new rZ.BGPExecutor(n),this.filterExecutor=new nZ.FilterExecutor,this.optionalExecutor=new iZ.OptionalExecutor,this.unionExecutor=new sZ.UnionExecutor,this.minusExecutor=new oZ.MinusExecutor,this.valuesExecutor=new aZ.ValuesExecutor,this.aggregateExecutor=new cZ.AggregateExecutor,this.constructExecutor=new lZ.ConstructExecutor,this.serviceExecutor=new uZ.ServiceExecutor(t.serviceConfig),this.graphExecutor=new fZ.GraphExecutor(n),this.sparqlGenerator=new pZ.SPARQLGenerator,this.filterExecutor.setExistsEvaluator(async(i,s)=>this.evaluateExistsPattern(i,s)),this.filterExecutor.setTripleStore(n)}async evaluateExistsPattern(e,t){let n=this.substituteVariables(e,t);for await(let i of this.execute(n))if(t.merge(i)!==null)return!0;return!1}async executeAll(e){let t=[];for await(let n of this.execute(e))t.push(n);return t}async*execute(e){switch(e.type){case"bgp":yield*this.executeBGP(e);break;case"filter":yield*this.executeFilter(e);break;case"join":yield*this.executeJoin(e);break;case"leftjoin":yield*this.executeLeftJoin(e);break;case"union":yield*this.executeUnion(e);break;case"minus":yield*this.executeMinus(e);break;case"values":yield*this.executeValues(e);break;case"project":yield*this.executeProject(e);break;case"orderby":yield*this.executeOrderBy(e);break;case"slice":yield*this.executeSlice(e);break;case"distinct":yield*this.executeDistinct(e);break;case"reduced":yield*this.executeReduced(e);break;case"group":yield*this.executeGroup(e);break;case"extend":yield*this.executeExtend(e);break;case"subquery":yield*this.executeSubquery(e);break;case"lateraljoin":yield*this.executeLateralJoin(e);break;case"service":yield*this.executeService(e);break;case"graph":yield*this.executeGraph(e);break;default:throw new Kf(`Unknown operation type: ${e.type}`)}}async*executeBGP(e){yield*this.bgpExecutor.execute(e)}async*executeFilter(e){let t=this.execute(e.input);yield*this.filterExecutor.execute(e,t)}async*executeJoin(e){let t=[];for await(let o of this.execute(e.left))t.push(o);if(t.length===0)return;let n=new Set;for(let o of t)for(let c of o.variables())n.add(c);let i=this.collectOperationVariables(e.right);if([...n].some(o=>i.has(o)))for(let o of t){let c=this.substituteVariables(e.right,o);for await(let l of this.execute(c)){let u=o.merge(l);u!==null&&(yield u)}}else{let o=[];for await(let c of this.execute(e.right))o.push(c);for(let c of t)for(let l of o){let u=c.merge(l);u!==null&&(yield u)}}}async*executeLeftJoin(e){let t=[];for await(let o of this.execute(e.left))t.push(o);let n=[];for await(let o of this.execute(e.right))n.push(o);async function*i(){for(let o of t)yield o}a(i,"leftGen");async function*s(){for(let o of n)yield o}a(s,"rightGen"),yield*this.optionalExecutor.execute(i(),s())}async*executeUnion(e){let t=[];for await(let o of this.execute(e.left))t.push(o);let n=[];for await(let o of this.execute(e.right))n.push(o);async function*i(){for(let o of t)yield o}a(i,"leftGen");async function*s(){for(let o of n)yield o}a(s,"rightGen"),yield*this.unionExecutor.execute(i(),s())}async*executeMinus(e){let t=[];for await(let o of this.execute(e.left))t.push(o);let n=[];for await(let o of this.execute(e.right))n.push(o);async function*i(){for(let o of t)yield o}a(i,"leftGen");async function*s(){for(let o of n)yield o}a(s,"rightGen"),yield*this.minusExecutor.execute(i(),s())}async*executeValues(e){yield*this.valuesExecutor.execute(e)}async*executeProject(e){let{SolutionMapping:t}=await Promise.resolve().then(()=>tM(ha())),n=new Set(e.variables);for await(let i of this.execute(e.input)){let s=new t;for(let o of i.variables())if(n.has(o)){let c=i.get(o);c!==void 0&&s.set(o,c)}yield s}}async*executeOrderBy(e){let t=[];for await(let n of this.execute(e.input))t.push(n);t.sort((n,i)=>{for(let s of e.comparators){let o=this.getExpressionValue(s.expression,n),c=this.getExpressionValue(s.expression,i),l=0;if(o===void 0&&c===void 0?l=0:o===void 0?l=1:c===void 0?l=-1:typeof o=="number"&&typeof c=="number"?l=o-c:l=String(o).localeCompare(String(c)),s.descending&&(l=-l),l!==0)return l}return 0});for(let n of t)yield n}async*executeSlice(e){let t=0,n=e.offset??0,i=e.limit;for await(let s of this.execute(e.input)){if(t>=n){if(i!==void 0&&t-n>=i)break;yield s}t++}}async*executeDistinct(e){let t=new Set;for await(let n of this.execute(e.input)){let i=this.getSolutionKey(n);t.has(i)||(t.add(i),yield n)}}async*executeReduced(e){let t=new Set;for await(let n of this.execute(e.input)){let i=this.getSolutionKey(n);t.has(i)||(t.add(i),yield n)}}async*executeGroup(e){let t=[];for await(let i of this.execute(e.input))t.push(i);let n=this.aggregateExecutor.execute(e,t);if(e.having&&e.having.length>0)for(let i of n)e.having.every(o=>this.filterExecutor.evaluateExpression(o,i)===!0)&&(yield i);else for(let i of n)yield i}async*executeExtend(e){let t=e.expression.type!=="aggregate"&&this.filterExecutor.expressionContainsExists(e.expression);for await(let n of this.execute(e.input)){let i=n.clone(),s=t?await this.evaluateExtendExpressionAsync(e.expression,n):this.evaluateExtendExpression(e.expression,n);s!==void 0&&i.set(e.variable,s),yield i}}async*executeSubquery(e){yield*this.execute(e.query)}async*executeLateralJoin(e){let t=[];for await(let n of this.execute(e.left))t.push(n);for(let n of t){let i=this.substituteVariables(e.right,n);for await(let s of this.execute(i)){let o=n.merge(s);o!==null&&(yield o)}}}substituteVariables(e,t){let n=JSON.parse(JSON.stringify(e));return this.substituteInOperation(n,t)}substituteInOperation(e,t){if(!e||typeof e!="object")return e;let n=e;return e.type==="bgp"&&e.triples?(e.triples=e.triples.map(i=>this.substituteInTriple(i,t)),e):(n.input&&(n.input=this.substituteInOperation(n.input,t)),n.left&&(n.left=this.substituteInOperation(n.left,t)),n.right&&(n.right=this.substituteInOperation(n.right,t)),n.pattern&&(n.pattern=this.substituteInOperation(n.pattern,t)),n.query&&(n.query=this.substituteInOperation(n.query,t)),n.where&&(n.where=this.substituteInOperation(n.where,t)),n.expression&&this.substituteInExpression(n.expression,t),e)}substituteInExpression(e,t){if(!(!e||typeof e!="object")){if(e.type==="exists"&&e.pattern&&(e.pattern=this.substituteInOperation(e.pattern,t)),e.type==="variable"&&typeof e.name=="string"){let n=this.termToAlgebraNode(t.get(e.name));if(n!==null){delete e.name;for(let[i,s]of Object.entries(n))e[i]=s}}if(e.left&&this.substituteInExpression(e.left,t),e.right&&this.substituteInExpression(e.right,t),e.operands)for(let n of e.operands)this.substituteInExpression(n,t);if(e.args)for(let n of e.args)this.substituteInExpression(n,t);if(e.expression&&this.substituteInExpression(e.expression,t),e.list)for(let n of e.list)this.substituteInExpression(n,t)}}substituteInTriple(e,t){return{subject:this.substituteInTripleElement(e.subject,t),predicate:e.predicate,object:this.substituteInTripleElement(e.object,t)}}substituteInTripleElement(e,t){if(e&&e.type==="variable"){let n=this.termToAlgebraNode(t.get(e.value));if(n!==null)return n}return e}termToAlgebraNode(e){if(e==null)return null;let t=e;return e instanceof hZ.IRI||t.termType==="NamedNode"?{type:"iri",value:e.value}:t.termType==="Literal"||typeof t.value=="string"?{type:"literal",value:t.value,datatype:t.datatype?.value??t._datatype?.value,language:t.language??t._language}:null}async*executeService(e){yield*this.serviceExecutor.execute(e,t=>this.sparqlGenerator.generateSelect(t))}async*executeGraph(e){let t=async function*(n,i){let s=this.currentGraphContext;this.currentGraphContext=i;try{n.type==="bgp"&&i&&this.tripleStore.matchInGraph?yield*this.executeBGPInGraph(n,i):yield*this.execute(n)}finally{this.currentGraphContext=s}}.bind(this);yield*this.graphExecutor.execute(e,t)}async*executeBGPInGraph(e,t){if(e.triples.length===0){let{SolutionMapping:n}=await Promise.resolve().then(()=>tM(ha()));yield new n;return}yield*this.bgpExecutor.executeInGraph(e,t)}evaluateExtendExpression(e,t){if(e.type!=="aggregate")try{return this.filterExecutor.evaluateExpression(e,t)}catch{return}}async evaluateExtendExpressionAsync(e,t){if(e.type!=="aggregate")try{return await this.filterExecutor.evaluateExpressionAsync(e,t)}catch{return}}getExpressionValue(e,t){if(e.type==="variable"){let n=t.get(e.name);if(!n)return;if(n instanceof mZ.Literal){let i=n.datatype?.value;if(i===`${En}dayTimeDuration`)try{return gZ.DateTimeFunctions.parseDayTimeDuration(n.value)}catch{return n.value}if(i&&yZ.has(i)){let s=parseFloat(n.value);if(!Number.isNaN(s))return s}return n.value}return n.value??n.id??String(n)}if(e.type==="literal")return e.value}collectOperationVariables(e){let t=new Set;return this.collectVarsFromOperation(e,t),t}collectVarsFromOperation(e,t){if(!e||typeof e!="object")return;let n=e;if(n.type==="bgp"&&n.triples)for(let i of n.triples)this.collectVarsFromElement(i.subject,t),i.predicate?.type!=="path"&&this.collectVarsFromElement(i.predicate,t),this.collectVarsFromElement(i.object,t);if(n.type==="values"&&n.variables)for(let i of n.variables)t.add(i);n.expression&&this.collectVarsFromExpressionTree(n.expression,t),n.type==="extend"&&n.variable&&t.add(n.variable),n.input&&this.collectVarsFromOperation(n.input,t),n.left&&this.collectVarsFromOperation(n.left,t),n.right&&this.collectVarsFromOperation(n.right,t),n.pattern&&this.collectVarsFromOperation(n.pattern,t),n.query&&this.collectVarsFromOperation(n.query,t),n.where&&this.collectVarsFromOperation(n.where,t)}collectVarsFromElement(e,t){if(!e||typeof e!="object")return;let n=e;n.type==="variable"&&t.add(n.value),n.type==="quoted"&&(this.collectVarsFromElement(n.subject,t),this.collectVarsFromElement(n.predicate,t),this.collectVarsFromElement(n.object,t))}collectVarsFromExpressionTree(e,t){if(!e||typeof e!="object")return;let n=e;if(n.type==="variable"&&n.name&&t.add(n.name),n.type==="exists"&&n.pattern&&this.collectVarsFromOperation(n.pattern,t),n.left&&this.collectVarsFromExpressionTree(n.left,t),n.right&&this.collectVarsFromExpressionTree(n.right,t),n.operands)for(let i of n.operands)this.collectVarsFromExpressionTree(i,t);if(n.args)for(let i of n.args)this.collectVarsFromExpressionTree(i,t);if(n.expression&&this.collectVarsFromExpressionTree(n.expression,t),n.list)for(let i of n.list)this.collectVarsFromExpressionTree(i,t)}getSolutionKey(e){let t=e.toJSON();return Object.keys(t).sort().map(i=>`${i}=${t[i]}`).join("|")}isConstructQuery(e){return e.type==="construct"}async executeConstruct(e){if(e.type!=="construct")throw new Kf("executeConstruct requires a CONSTRUCT operation");let t=await this.executeAll(e.where);return this.constructExecutor.execute(e.template,t)}isAskQuery(e){return e.type==="ask"}async executeAsk(e){if(e.type!=="ask")throw new Kf("executeAsk requires an ASK operation");for await(let t of this.execute(e.where))return!0;return!1}};Pi.ExoQLQueryExecutor=Db;Pi.QueryExecutor=Db});var dM=T(ma=>{"use strict";var bZ=ma&&ma.__decorate||function(r,e,t,n){var i=arguments.length,s=i<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(r,e,t,n);else for(var c=r.length-1;c>=0;c--)(o=r[c])&&(s=(i<3?o(s):i>3?o(e,t,s):o(e,t))||s);return i>3&&s&&Object.defineProperty(e,t,s),s},_Z=ma&&ma.__metadata||function(r,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,e)};Object.defineProperty(ma,"__esModule",{value:!0});ma.CommandResolver=void 0;var SZ=lt(),wZ=mh(),EZ=gc(),gr=Le(),cr=He(),X=At(),rM=uc(),nM=Xp(),vZ=Bl(),iM=yc(),sM=P0(),Xf=zv(),oM=WN(),TZ=Tf(),AZ=Of(),IZ=Yf(),Jl=10,Lb="exo__Asset",RZ=Jl+1,aM="08cec529-90eb-4d43-88de-ceecccea12b0",CZ=X.Namespace.EXOCMD.term("SubstitutionToken").value,cM=new Set(["today","tomorrow","todayStart","targetFolder","target","randomUUIDv4","nowTimestamp","nowDate","nowYear","nowMonth","userInputLabel","userInput","targetProperty","targetRefProperty","labelAsArray","groundingTargetClass","createdInstance","targetClassSelf"]);function xZ(r,e){return`__SUBSTITUTE__${r}__${e}__`}a(xZ,"buildSubstitutionMarker");function OZ(r,e,t){let n=(0,vZ.utf8ToBase64)(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"");return`__SUBSTITUTE_P__${r}__${e}__${n}__`}a(OZ,"buildParameterisedMarker");var lM="3f28af98-c031-4718-8ba2-44ad0b012c52",PZ=X.Namespace.EXOCMD.term("TokenInvocation").value,uM="29e2c8f8-2d27-4e58-b467-2e85d46f8122",fM="universal-default-template",bI=class{static{a(this,"CommandResolver")}warnOnce(e){this._warnedMessages.has(e)||(this._warnedMessages.add(e),this.logger.warn(e))}clearUniversalCache(){this._universalCacheReady=!1,this._universalCacheValue=null}constructor(e,t=wZ.NullLogger){this.tripleStore=e,this.logger=t,this.cache=new Map,this.multiCache=new Map,this._ancestorDepthCache=new Map,this._legacyPropertyDefaultsWarnedGroundings=new Set,this._fallbackWarnedKeys=new Set,this._ambiguousRefWarnedKeys=new Set,this._warnedMessages=new Set,this._universalCacheReady=!1,this._universalCacheValue=null}async resolveForAssetMulti(e,t,n){if(t.length===0)return[];let i=[...t].sort().join(","),s=`${e}::${i}::${n??""}`,o=this.multiCache.get(s);if(o)return o;let c=n?await this.expandPrototypeChain(n):void 0,l=await this.expandClassHierarchy(t),u=new Map;for(let[h,g]of l){let m=await this.resolveForAsset(e,h,c);for(let b of m){let _=this.getBindingPriority(b.binding)===2?g:0,S=u.get(b.binding.id);(!S||_<S.depth)&&u.set(b.binding.id,{rc:b,depth:_})}}let f=new Set;for(let{rc:h}of u.values())if(h.binding.overrides)for(let g of h.binding.overrides)f.add(g);let d=Array.from(u.entries()).filter(([h])=>!f.has(h)).map(([,h])=>h);d.sort((h,g)=>{let m=this.getBindingPriority(h.rc.binding),b=this.getBindingPriority(g.rc.binding);return m!==b?m-b:h.depth!==g.depth?h.depth-g.depth:(h.rc.binding.order??100)-(g.rc.binding.order??100)});let p=d.map(h=>h.rc);return this.multiCache.set(s,p),p}async expandClassHierarchy(e){let t=new Map;for(let c of e){if(c===Lb){t.set(c,new Set);continue}let l=[];try{l=await this.getClassAncestors(c)}catch{l=[]}t.set(c,new Set(l))}let n=a(c=>{for(let l of e)if(l!==c&&t.get(l)?.has(c)&&!t.get(c)?.has(l))return!0;return!1},"isAncestorOfSibling"),i=e.filter(c=>!n(c)),s=new Map,o=a((c,l)=>{let u=s.get(c);(u===void 0||l<u)&&s.set(c,l)},"setMin");for(let c of i){if(o(c,0),this.looksLikeUUID(c))try{let u=await this.resolveLabelByUID(c);u&&o(u,0)}catch{}if(c===Lb)continue;let l=[];try{l=await this.getClassAncestorsWithDepth(c)}catch{l=[]}for(let{ref:u,depth:f}of l)o(u,f)}return s.has(Lb)||s.set(Lb,RZ),s}async resolveForAsset(e,t,n){let i=typeof n=="string"?`s:${n}`:n?`c:${n.join("\0")}`:"",s=`${e}:${t}:${i}`,o=this.cache.get(s);if(o)return o;let c=typeof n=="string"?await this.expandPrototypeChain(n):n,l=await this.findBindings(t,c,e),u=[];for(let f of l){let d=await this.loadCommand(f.commandRef,{targetClass:f.targetClass});if(!d)continue;let p=f.precondition?{...d,precondition:f.precondition}:d;u.push({command:p,binding:f})}return u.sort((f,d)=>{let p=this.getBindingPriority(f.binding),h=this.getBindingPriority(d.binding);return p!==h?p-h:(f.binding.order??100)-(d.binding.order??100)}),this.cache.set(s,u),u}async loadCommand(e,t){let n=await this.findSubjectByUID(e);if(!n||(await this.tripleStore.match(n,X.Namespace.RDF.term("type"),X.Namespace.EXOCMD.term("Command"))).length===0)return null;let s=await this.readAssetLabel(n)??"Unknown Command",o=await this.getLiteralValue(n,X.Namespace.EXOCMD.term("Command_labelTemplate")),c=await this.getLiteralValue(n,X.Namespace.EXOCMD.term("Command_icon")),l=await this.getLiteralValue(n,X.Namespace.EXOCMD.term("Command_confirmMessage")),u=await this.getLiteralValue(n,X.Namespace.EXOCMD.term("Command_successMessage")),f=await this.getLiteralValue(n,X.Namespace.EXOCMD.term("Command_category")),d=await this.getLiteralValue(n,X.Namespace.EXOCMD.term("Command_openInSameTab")),p=d!==null&&String(d).trim().toLowerCase()==="true",h=await this.loadLinkedPrecondition(n),g=await this.loadLinkedGrounding(n,0,t);return g?{id:e,name:s,labelTemplate:o??void 0,icon:c??void 0,precondition:h??void 0,grounding:g,confirmMessage:l??void 0,successMessage:u??void 0,category:f??void 0,openInSameTab:p||void 0}:null}async findBindings(e,t,n){let i=typeof t=="string"?await this.expandPrototypeChain(t):t,s=await this.tripleStore.match(void 0,X.Namespace.RDF.term("type"),X.Namespace.EXOCMD.term("CommandBinding")),o=[];for(let c of s){let l=c.subject,u=await this.loadBindingDefinition(l);u&&this.bindingMatches(u,e,i,n)&&o.push(u)}return o}async findPaletteEnabledCommands(){let e=await this.tripleStore.match(void 0,X.Namespace.RDF.term("type"),X.Namespace.EXOCMD.term("Command")),t=[],n=new Set;for(let i of e){let s=i.subject;if((await this.getLiteralValue(s,X.Namespace.EXOCMD.term("Command_paletteEnabled")))?.toLowerCase()!=="true")continue;let c=await this.getLiteralValue(s,X.Namespace.EXO.term("Asset_uid"));if(!c){this.warnOnce(`[CommandResolver] paletteEnabled command at ${s.value} has no exo__Asset_uid \u2014 skipped`);continue}let l=await this.loadCommand(c);if(!l){this.warnOnce(`[CommandResolver] paletteEnabled command ${c} could not be loaded (missing grounding?) \u2014 skipped`);continue}let u=await this.getLiteralValue(s,X.Namespace.EXOCMD.term("Command_paletteId")),f=await this.getLiteralValue(s,X.Namespace.EXOCMD.term("Command_cliName")),d=u??f??c;if(n.has(d)){this.warnOnce(`[CommandResolver] duplicate paletteId "${d}" \u2014 first registration wins, dropping ${c}`);continue}n.add(d),t.push({command:l,paletteId:d})}return t}invalidateCache(){this.cache.clear(),this.multiCache.clear(),this._ancestorDepthCache.clear(),this.clearUniversalCache()}async resolveLabel(e,t){if(!e.labelTemplate)return e.name;let n=e.labelTemplate,i=this.extractPlaceholders(e.labelTemplate);for(let{full:s,body:o}of i){let c=await this.evaluateSelectSnippet(o,t);n=n.replace(s,c)}return n}extractPlaceholders(e){let t=[],n=0;for(;n<e.length;)if(e[n]==="{"){let i=1,s=n+1;for(;s<e.length&&i>0;)e[s]==="{"?i++:e[s]==="}"&&i--,s++;if(i===0){let o=e.slice(n,s),c=e.slice(n+1,s-1);t.push({full:o,body:c})}n=s}else n++;return t}async evaluateSelectSnippet(e,t){try{let n=e.replace(/\$target/g,`<${t}>`),s=new TZ.ExoQLParser().parse(n),c=new AZ.ExoQLAlgebraTranslator().translate(s),u=await new IZ.ExoQLQueryExecutor(this.tripleStore).executeAll(c);if(u.length===0)return"";let f=u[0],d=f.variables();if(d.length===0)return"";let p=f.get(d[0]);return p?p instanceof cr.Literal||p instanceof gr.IRI?p.value:String(p):""}catch{return""}}async loadBindingDefinition(e){let t=await this.getLiteralValue(e,X.Namespace.EXO.term("Asset_uid"));if(!t)return null;let n=await this.readAssetLabel(e)??"",i=await this.getLinkedUID(e,X.Namespace.EXOCMD.term("CommandBinding_command"));if(!i)return null;let s=await this.getLinkedValue(e,X.Namespace.EXOCMD.term("CommandBinding_targetClass")),o=await this.getLinkedValue(e,X.Namespace.EXOCMD.term("CommandBinding_targetPrototype")),c=await this.getLinkedValue(e,X.Namespace.EXOCMD.term("CommandBinding_targetAsset"));if(!s&&!o&&!c)return null;let l=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("CommandBinding_position")),u=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("CommandBinding_order")),f=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("CommandBinding_variant")),d=f!==null?this.coerceVariant(f,t):void 0,p=await this.loadLinkedPreconditionFromProperty(e,X.Namespace.EXOCMD.term("CommandBinding_precondition")),h=await this.loadLinkedStyle(e,t),g=await this.getLinkedUIDs(e,X.Namespace.EXOCMD.term("CommandBinding_overrides"));return{id:t,label:n,commandRef:i,targetClass:s??void 0,targetPrototype:o??void 0,targetAsset:c??void 0,position:l??void 0,order:u?parseInt(u,10):void 0,variant:d,precondition:p??void 0,style:h??void 0,overrides:g.length>0?g:void 0}}async loadLinkedStyle(e,t){let n=await this.tripleStore.match(e,X.Namespace.EXOCMD.term("CommandBinding_style"),void 0);if(n.length>0){let s=n[0].object,o=null;if(s instanceof gr.IRI)o=await this.resolveRefIriSubject(s);else if(s instanceof cr.Literal){let c=this.normalizeWikilink(s.value);o=await this.findSubjectByUID(c)}if(o){let c=await this.loadStyleAsset(o);if(c)return c}this.warnOnce(this.capWarning(`CommandBinding ${t}: style reference unresolved, falling back to inline variant`))}let i=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("CommandBinding_variant"));if(i!==null){let s=this.coerceVariant(i,t);if(s!==void 0)return{id:`inline:${t}`,label:"",variant:s,inline:!0}}return null}async loadStyleAsset(e){let t=await this.getLiteralValue(e,X.Namespace.EXO.term("Asset_uid"));if(!t)return null;let n=await this.readAssetLabel(e)??"",i=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("CommandBindingStyle_variant")),s=i!==null?this.coerceVariant(i,t):void 0,o=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("CommandBindingStyle_showIcon")),c=this.coerceBoolean(o),l=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("CommandBindingStyle_labelClass")),u=l!==null?this.coerceLabelClass(l,t):void 0,f=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("CommandBindingStyle_ariaLabel")),d=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("CommandBindingStyle_tooltip")),p=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("CommandBindingStyle_keyboardShortcut")),h=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("CommandBindingStyle_source")),g=h!==null?this.coerceStyleSource(h,t):void 0;return{id:t,label:n,variant:s,showIcon:c,labelClass:u,ariaLabel:f??void 0,tooltip:d??void 0,keyboardShortcut:p??void 0,source:g,inline:!1}}coerceVariant(e,t){if(e==null)return;let n=String(e).trim().toLowerCase();if(n!==""){if(Xf.COMMAND_VARIANT_VALUES.includes(n))return n;this.warnOnce(this.capWarning(`CommandBindingStyle variant "${n}" not in whitelist [${Xf.COMMAND_VARIANT_VALUES.join(",")}]; dropped (asset ${t})`))}}coerceLabelClass(e,t){if(e==null)return;let n=String(e).trim().toLowerCase();if(n!==""){if(Xf.LABEL_CLASS_VALUES.includes(n))return n;this.warnOnce(this.capWarning(`CommandBindingStyle labelClass "${n}" not in whitelist [${Xf.LABEL_CLASS_VALUES.join(",")}]; dropped (asset ${t})`))}}coerceStyleSource(e,t){if(e==null)return;let n=String(e).trim().toLowerCase();if(n!==""){if(Xf.STYLE_SOURCE_VALUES.includes(n))return n;this.warnOnce(this.capWarning(`CommandBindingStyle source "${n}" not in whitelist [${Xf.STYLE_SOURCE_VALUES.join(",")}]; dropped (asset ${t})`))}}coerceBoolean(e){if(e===null)return;let t=e.trim().toLowerCase();if(t==="true")return!0;if(t==="false")return!1}capWarning(e){return e.length<=200?e:e.slice(0,197)+"..."}bindingMatches(e,t,n,i){if(e.targetAsset&&i&&this.matchesReference(e.targetAsset,i))return!0;if(e.targetPrototype&&n){for(let s of n)if(this.matchesReference(e.targetPrototype,s))return!0}return!!(e.targetClass&&t&&this.matchesReference(e.targetClass,t))}matchesReference(e,t){let n=this.normalizeWikilink(e),i=this.normalizeWikilink(t);if(n===i)return!0;let s=this.extractPathBasename(i);if(s&&s===n)return!0;let o=this.extractPathBasename(n);if(o&&o===i)return!0;let c=this.extractAlias(t);if(c&&n===c)return!0;let l=this.extractAlias(e);return!!(l&&l===i)}extractPathBasename(e){let t=e.match(/\/([^/]+)\.md$/);return t?t[1]:null}extractAlias(e){let t=e.replace(/["'[\]]/g,"").trim(),n=t.indexOf("|");return n>=0?t.substring(n+1).trim():null}getBindingPriority(e){return e.targetAsset?0:e.targetPrototype?1:2}async loadLinkedPrecondition(e){return this.loadLinkedPreconditionFromProperty(e,X.Namespace.EXOCMD.term("Command_precondition"))}async loadLinkedPreconditionFromProperty(e,t){let n=await this.tripleStore.match(e,t,void 0);if(n.length===0)return null;let i=await this.resolvePreconditionRef(n[0].object);return i?this.loadPreconditionSubject(i,new Set,0):null}async resolvePreconditionRef(e){if(e instanceof gr.IRI)return this.resolveRefIriSubject(e);if(e instanceof cr.Literal){let t=this.normalizeWikilink(e.value);return await this.findSubjectByUID(t)}return null}async loadPreconditionSubject(e,t,n){let i=await this.getLiteralValue(e,X.Namespace.EXO.term("Asset_uid")),s=await this.readAssetLabel(e)??"";if(i&&t.has(i))return this.brokenPreconditionNode(i,s);if(n>=Jl)return this.brokenPreconditionNode(i??"",s);let o=await this.tripleStore.match(e,X.Namespace.EXOCMD.term("AllPrecondition_preconditions"),void 0),c=await this.tripleStore.match(e,X.Namespace.EXOCMD.term("AnyPrecondition_preconditions"),void 0),l=await this.tripleStore.match(e,X.Namespace.EXOCMD.term("NotPrecondition_precondition"),void 0);if(o.length>0||c.length>0||l.length>0){let p=new Set(t);if(i&&p.add(i),o.length>0||c.length>0){let g=o.length>0?"all":"any",m=o.length>0?o:c,b=[];for(let _ of m)b.push(await this.loadChildPrecondition(_.object,p,n+1));return{id:i??"",label:s,composite:{op:g,children:b}}}let h=await this.loadChildPrecondition(l[0].object,p,n+1);return{id:i??"",label:s,not:h}}let u=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Precondition_sparqlAsk")),f=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Precondition_hostFunction")),d=await this.loadPreconditionQueryRef(e);return!i||!u&&!f&&!d?null:{id:i,label:s,...u&&{sparqlAsk:u},...f&&{hostFunction:f},...d&&{query:d}}}async loadChildPrecondition(e,t,n){let i=await this.resolvePreconditionRef(e);if(!i){let c=e instanceof cr.Literal?this.normalizeWikilink(e.value):"";return this.brokenPreconditionNode(c,"")}let s=await this.loadPreconditionSubject(i,t,n);if(s)return s;let o=await this.getLiteralValue(i,X.Namespace.EXO.term("Asset_uid"));return this.brokenPreconditionNode(o??"","")}async loadPreconditionQueryRef(e){let t=await this.tripleStore.match(e,X.Namespace.EXOCMD.term("Precondition_query"),void 0);if(t.length===0)return;let n=t[0].object;if(n instanceof gr.IRI)return await this.getLiteralValue(await this.resolveRefIriSubject(n),X.Namespace.EXO.term("Asset_uid"))??void 0;if(n instanceof cr.Literal)return this.normalizeWikilink(n.value)}brokenPreconditionNode(e,t){return{id:e,label:t,broken:!0}}async loadLinkedGrounding(e,t,n){if(t>=Jl)return null;let i=await this.tripleStore.match(e,X.Namespace.EXOCMD.term("Command_grounding"),void 0);if(i.length===0)return null;if(i.length===1||!n?.targetClass){let o=await this.resolveGroundingRef(i[0].object);return o?this.loadGroundingDefinition(o,t):null}for(let o of i){let c=await this.resolveGroundingRef(o.object);if(!c)continue;let l=await this.getObsidianName(c,X.Namespace.EXOCMD.term("Grounding_targetPrototype"));if(l&&this.matchesReference(l,n.targetClass))return this.loadGroundingDefinition(c,t)}this.warnOnce(`Command ${e.value}: ${i.length} groundings declared, none matched context.targetClass='${n.targetClass}' via Grounding_targetPrototype \u2014 falling back to first grounding by iteration order (legacy behaviour). Check that one grounding's Grounding_targetPrototype references this targetClass.`);let s=await this.resolveGroundingRef(i[0].object);return s?this.loadGroundingDefinition(s,t):null}async resolveGroundingRef(e){if(e instanceof gr.IRI)return this.resolveRefIriSubject(e);if(e instanceof cr.Literal){let t=this.normalizeWikilink(e.value);return await this.findSubjectByUID(t)}return null}async loadGroundingByUid(e){let t=await this.findSubjectByUID(e);return t?this.loadGroundingDefinition(t,0):null}async loadGroundingDefinition(e,t){if(t>=Jl)return null;let n=await this.getLiteralValue(e,X.Namespace.EXO.term("Asset_uid"));if(!n)return null;let i=await this.readAssetLabel(e)??"",s=await this.resolveGroundingTypeReference(e);if(!s)return null;let o=await this.getObsidianName(e,X.Namespace.EXOCMD.term("Grounding_targetProperty"));if(o&&this.looksLikeUUID(o)){let ae=await this.resolveLabelByUID(o);if(!ae)return this.warnOnce(`Grounding ${n}: targetProperty wikilink UID '${o}' is not resolvable to exo__Asset_label \u2014 grounding skipped (would otherwise write a UUID-named frontmatter key).`),null;o=ae}if(s===rM.GroundingType.SERVICE_CALL){let ae=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_serviceId"));ae&&(o=ae)}let c=await this.getObsidianName(e,X.Namespace.EXOCMD.term("Grounding_targetValueRef")),l=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_targetValueLiteral")),u=await this.getObsidianName(e,X.Namespace.EXOCMD.term("Grounding_targetValueSubstitution")),f=null;if(u&&this.looksLikeUUID(u)){let ae=await this.resolveLabelByUID(u);if(!ae)return this.warnOnce(`Grounding ${n}: targetValueSubstitution UID '${u}' is not resolvable to exo__Asset_label (SubstitutionToken instance missing or unlabelled) \u2014 grounding skipped.`),null;f=ae}else u&&(f=u);let d=await this.getObsidianName(e,X.Namespace.EXOCMD.term("Grounding_targetValueQuery")),p=await this.getObsidianName(e,X.Namespace.EXOCMD.term("Grounding_targetQuery")),h=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_serviceCallPayload")),g=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_appendExpression")),m=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_replaceFromExpression")),b=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_replaceToExpression")),_=await this.getObsidianWikilinkValue(e,X.Namespace.EXOCMD.term("Grounding_isDefinedBy")),S=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_sparqlUpdate")),A=await this.getObsidianName(e,X.Namespace.EXOCMD.term("Grounding_targetClass"));if(A&&!this.looksLikeUUID(A)){let ae=await this.findUidByLabel(A);ae&&(A=ae)}let w=await this.getObsidianName(e,X.Namespace.EXOCMD.term("Grounding_targetPrototype")),E=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_targetFolder")),R=await this.getObsidianName(e,X.Namespace.EXOCMD.term("Grounding_linkBackProperty")),x=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_inputSchema")),P=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_incrementBy")),N=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_shiftDelta")),$;if(P!=null&&P!==""){let ae=Number.parseInt(String(P),10);Number.isFinite(ae)&&($=ae)}let k=await this.resolvePropertyDefaults(e,n),G=await this.resolveInheritanceRules(e,n),B=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_propertyDefaults"));B!==null&&B!==""&&!this._legacyPropertyDefaultsWarnedGroundings.has(n)&&(this.warnOnce(`Grounding ${n}: deprecated exocmd__Grounding_propertyDefaults (plural) JSON predicate detected \u2014 the parser was removed in RFC v2 Phase 5 (#3167); value is ignored. Migrate to ref-form exocmd__Grounding_propertyDefault (singular) pointing to exocmd__PropertyDefault assets. See vault TBox c8f87363-d39c-45cb-9d4d-1be96d70f892 for the canonical replacement.`),this._legacyPropertyDefaultsWarnedGroundings.add(n));let M;s===rM.GroundingType.COMPOSITE&&(M=await this.loadCompositeSteps(e,t+1));let ie;if(x)try{let ae=JSON.parse(x);ae?.properties&&(ie=Object.entries(ae.properties).map(([Ie,ye])=>{let Te=ye.type,Re=Te==="string"?ye.format==="asset-reference"?"assetRef":"text":Te,pe=ye.defaultValue!==void 0?ye.defaultValue:ye.default,q={name:Ie,type:Re,label:ye.title??Ie,required:Array.isArray(ae.required)&&ae.required.includes(Ie)};return pe!=null&&(q.defaultValue=String(pe)),typeof ye.targetClassUid=="string"&&(q.targetClassUid=ye.targetClassUid),q}))}catch{}let Z=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_prefillLabelWithDate")),te=Z!==null&&String(Z).trim().toLowerCase()==="true",V=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_labelTemplate")),H=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_direction")),he;if(H!=null){let ae=String(H).trim().toLowerCase();ae==="forward"||ae==="rollback"?he=ae:ae!==""&&this.warnOnce(`Grounding ${n}: exocmd__Grounding_direction value '${H}' is not 'forward' or 'rollback' \u2014 treating as undefined (will default to 'forward' at dispatch).`)}let ze=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_bodyTemplate")),ce=await this.getObsidianName(e,X.Namespace.EXOCMD.term("Grounding_templateRef")),ee=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_cloneTargetBody")),K=ee!==null&&String(ee).trim().toLowerCase()==="true",Y=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_targetsCreatedInstance")),ne=Y!==null&&String(Y).trim().toLowerCase()==="true",Ce=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_omitLabel")),U=Ce!==null&&String(Ce).trim().toLowerCase()==="true",fe={id:n,label:i,type:s,targetProperty:o??void 0,targetValueRef:c??void 0,targetValueLiteral:l??void 0,targetValueSubstitution:f??void 0,targetValueQuery:d??void 0,targetQuery:p??void 0,serviceCallPayload:h??void 0,appendExpression:g??void 0,replaceFromExpression:m??void 0,replaceToExpression:b??void 0,sparqlUpdate:S??void 0,steps:M,targetClass:A??void 0,targetPrototype:w??void 0,targetFolder:E??void 0,linkBackProperty:R??void 0,incrementBy:$,shiftDelta:N??void 0,propertyDefault:k.length>0?k:void 0,inheritanceRule:G.length>0?G:void 0,isDefinedBy:_??void 0,prefillLabelWithDate:te||void 0,labelTemplate:V??void 0,direction:he,bodyTemplate:ze??void 0,templateRef:ce??void 0,cloneTargetBody:K||void 0,targetsCreatedInstance:ne||void 0,omitLabel:U||void 0};return ie&&(fe.inputSchema=ie),fe}async loadCompositeSteps(e,t){if(t>=Jl)return[];let n=await this.tripleStore.match(e,X.Namespace.EXOCMD.term("Grounding_steps"),void 0),i=[];for(let s of n){let o=null;if(s.object instanceof gr.IRI)o=await this.resolveRefIriSubject(s.object);else if(s.object instanceof cr.Literal){let l=this.normalizeWikilink(s.object.value);o=await this.findSubjectByUID(l)}if(!o)continue;let c=await this.loadGroundingDefinition(o,t);c&&i.push(c)}return i}async resolvePropertyDefaults(e,t){let n=await this.resolvePropertyDefaultsForSubject(e,t,X.Namespace.EXOCMD.term("Grounding_propertyDefault")),i=await this.getUniversalCache();return i&&i.propertyDefaults.length>0?(0,oM.mergePropertyDefaults)(i.propertyDefaults,n):n}async resolvePropertyDefaultsForSubject(e,t,n){let i=await this.tripleStore.match(e,n,void 0),s=[];for(let o of i){let c=await this.resolveRefTripleObject(o.object);if(!c)continue;let l=await this.getObsidianName(c,X.Namespace.EXOCMD.term("PropertyDefault_property"));if(!l){this.warnOnce(`Grounding ${t}: PropertyDefault asset <${c.value}> missing exocmd__PropertyDefault_property \u2014 entry skipped.`);continue}let u=this.looksLikeUUID(l)?await this.resolveLabelByUID(l):l;if(!u){this.warnOnce(`Grounding ${t}: PropertyDefault property UID '${l}' is not resolvable to exo__Asset_label \u2014 entry skipped.`);continue}let f=await this.getObsidianName(c,X.Namespace.EXOCMD.term("PropertyDefault_value"));if(!f){this.warnOnce(`Grounding ${t}: PropertyDefault '${u}' missing exocmd__PropertyDefault_value \u2014 entry skipped.`);continue}let d=await this.resolvePropertyDefaultValue(f,t,u);d!==null&&s.push({propertyName:u,value:d})}return s}async getUniversalCache(){if(this._universalCacheReady)return this._universalCacheValue;this._universalCacheReady=!0;let e=await this.findUniversalSingleton();if(!e)return this.logger.debug("[CommandResolver] No exocmd__UniversalDefaultTemplate instance found in the store; universal property-defaults and inheritance-rules will not be applied. This verdict is cached until invalidateCache() is called \u2014 if the store was still warming up, the next invalidation re-resolves it."),this._universalCacheValue=null,null;let t=await this.resolvePropertyDefaultsForSubject(e,fM,X.Namespace.EXOCMD.term("Template_propertyDefault")),n=await this.resolveInheritanceRulesForSubject(e,fM,X.Namespace.EXOCMD.term("Template_inheritanceRule"));return this._universalCacheValue={propertyDefaults:t,inheritanceRules:n},this._universalCacheValue}async findUniversalSingleton(){let e=X.Namespace.EXOCMD.term("UniversalDefaultTemplate"),t=e.value,i=(await this.tripleStore.match(void 0,X.Namespace.EXO.term("Instance_class"),e)).map(c=>c.subject).filter(c=>c instanceof gr.IRI);if(i.length>0)return this.pickUniversalSingleton(i);let s=await this.tripleStore.match(void 0,X.Namespace.EXO.term("Instance_class"),void 0),o=[];for(let c of s){let l=!1;if(c.object instanceof gr.IRI)l=c.object.value===t||c.object.value.includes(uM);else if(c.object instanceof cr.Literal){let u=this.unwrapWikilink(c.object.value);l=u==="exocmd__UniversalDefaultTemplate"||u===uM}l&&c.subject instanceof gr.IRI&&o.push(c.subject)}return this.pickUniversalSingleton(o)}pickUniversalSingleton(e){if(e.length===0)return null;if(e.length===1)return e[0];let t=[...e].sort((n,i)=>n.value.localeCompare(i.value));return this.warnOnce(`Multiple UniversalDefaultTemplate singletons found (${t.length}); selecting deterministically by lexicographic UID order: ${t[0].value}`),t[0]}async resolveInheritanceRules(e,t){let n=await this.resolveInheritanceRulesForSubject(e,t,X.Namespace.EXOCMD.term("Grounding_inheritanceRule")),i=await this.getUniversalCache();return i&&i.inheritanceRules.length>0?(0,oM.mergeInheritanceRules)(i.inheritanceRules,n):n}async resolveInheritanceRulesForSubject(e,t,n){let i=await this.tripleStore.match(e,n,void 0),s=[],o=t;for(let c of i){let l=await this.resolveRefTripleObject(c.object);if(!l)continue;let u=await this.resolveLabelRef(l,X.Namespace.EXOCMD.term("InheritanceRule_sourceProperty"));if(!u){this.warnOnce(`Grounding ${o}: InheritanceRule <${l.value}> missing/unresolvable exocmd__InheritanceRule_sourceProperty \u2014 entry skipped.`);continue}let f=await this.resolveLabelRef(l,X.Namespace.EXOCMD.term("InheritanceRule_targetProperty"));if(!f){this.warnOnce(`Grounding ${o}: InheritanceRule <${l.value}> missing/unresolvable exocmd__InheritanceRule_targetProperty \u2014 entry skipped.`);continue}let d=await this.tripleStore.match(l,X.Namespace.EXOCMD.term("InheritanceRule_targetClassCondition"),void 0),p,h;if(d.length>0){let w=await this.getObsidianName(l,X.Namespace.EXOCMD.term("InheritanceRule_targetClassCondition"));if(!w||!w.trim()){this.warnOnce(`Grounding ${o}: InheritanceRule <${l.value}> has exocmd__InheritanceRule_targetClassCondition triple but ref is unresolvable \u2014 entire rule skipped (would otherwise apply unconditionally, broadening scope).`);continue}this.looksLikeUUID(w)?(h=w,p=await this.resolveLabelByUID(w)??void 0):p=w}let g=await this.tripleStore.match(l,X.Namespace.EXOCMD.term("InheritanceRule_targetClassExclusion"),void 0),m=[],b=[],_=!1;for(let w of g){let E=null;if(w.object instanceof gr.IRI?E=this.iriToObsidianName(w.object.value)??w.object.value:w.object instanceof cr.Literal&&(E=this.unwrapWikilink(w.object.value)),!E){_=!0;continue}if(this.looksLikeUUID(E)){b.push(E);let R=await this.resolveLabelByUID(E);R&&m.push(R)}else m.push(E)}if(_){this.warnOnce(`Grounding ${o}: InheritanceRule <${l.value}> has unresolvable exocmd__InheritanceRule_targetClassExclusion entry \u2014 entire rule skipped (would otherwise expand scope by silently dropping the excluded class).`);continue}let S=await this.getLiteralValue(l,X.Namespace.EXOCMD.term("InheritanceRule_priority")),A=50;if(S!==null&&S!==""){let w=Number.parseInt(String(S),10);Number.isFinite(w)&&(A=w)}s.push({sourcePropertyName:u,targetPropertyName:f,targetClassCondition:p,targetClassConditionUid:h,targetClassExclusion:m,targetClassExclusionUids:b,priority:A})}return s}async resolveRefIriSubject(e){if((await this.tripleStore.match(e,X.Namespace.EXO.term("Asset_uid"),void 0)).length>0)return e;let n=await(0,sM.labelTermBearers)(this.tripleStore,e);return n.length>1?(this._ambiguousRefWarnedKeys.has(e.value)||(this._ambiguousRefWarnedKeys.add(e.value),this.warnOnce(this.capWarning(`Reference <${e.value}> names a label borne by ${n.length} assets (${n.map(i=>i.uid).join(", ")}) \u2014 left unresolved`))),e):n[0]?.subject??e}async resolveRefTripleObject(e){if(e instanceof gr.IRI)return this.resolveRefIriSubject(e);if(e instanceof cr.Literal){let t=this.normalizeWikilink(e.value);return t?this.findSubjectByUID(t):null}return null}async resolveLabelRef(e,t){let n=await this.getObsidianName(e,t);return n?this.looksLikeUUID(n)?this.resolveLabelByUID(n):n:null}async resolvePropertyDefaultValue(e,t,n){if(!this.looksLikeUUID(e))return`"[[${e}]]"`;let i=await this.findSubjectByUID(e);if(!i){let c=`${t}|${e}`;return this._fallbackWarnedKeys.has(c)||(this._fallbackWarnedKeys.add(c),this.warnOnce(this.capWarning(`Grounding ${t}: PropertyDefault '${n}' \u2192 value asset ${e} not in store; SKIPPING the property (the executor's own default applies). Previously this emitted a wikilink, i.e. a link written where a value belongs.`))),EZ.STRING_SCALAR_PROPERTIES.has(n)?null:`"[[${e}]]"`}return await this.assetIsTokenInvocation(i)?this.resolveTokenInvocation(i,e,t,n):await this.assetIsSubstitutionToken(i)?this.dispatchSubstitutionToken(i,e,t,n,void 0):(this.logger.debug(`Grounding ${t}: PropertyDefault '${n}' value '${e}' is not a SubstitutionToken \u2014 emitting wikilink form.`),`"[[${e}]]"`)}async dispatchSubstitutionToken(e,t,n,i,s){let o=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("SubstitutionToken_resolver"));if(!o||!o.trim())return this.warnOnce(`Grounding ${n}: PropertyDefault '${i}' references SubstitutionToken '${t}' with no exocmd__SubstitutionToken_resolver \u2014 falling back to wikilink form.`),`"[[${t}]]"`;let c=o.trim();return cM.has(c)?s!==void 0?OZ(c,t,s):xZ(c,t):(this.warnOnce(`Grounding ${n}: PropertyDefault '${i}' SubstitutionToken '${t}' declares unknown resolver-id '${c}' \u2014 falling back to wikilink form. Known ids: ${Array.from(cM).join(", ")}.`),`"[[${t}]]"`)}async resolveTokenInvocation(e,t,n,i){let s=await this.getObsidianName(e,X.Namespace.EXOCMD.term("TokenInvocation_token"));if(!s)return this.warnOnce(`Grounding ${n}: PropertyDefault '${i}' TokenInvocation '${t}' missing exocmd__TokenInvocation_token \u2014 entry skipped.`),null;let o=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("TokenInvocation_parameter"))??"";if(!this.looksLikeUUID(s))return this.warnOnce(`Grounding ${n}: PropertyDefault '${i}' TokenInvocation '${t}' references non-UUID token '${s}' \u2014 entry skipped.`),null;let c=await this.findSubjectByUID(s);return c?this.dispatchSubstitutionToken(c,s,n,i,o):(this.warnOnce(`Grounding ${n}: PropertyDefault '${i}' TokenInvocation '${t}' token ref '${s}' not found in store \u2014 entry skipped.`),null)}async assetIsTokenInvocation(e){let t=await this.tripleStore.match(e,X.Namespace.EXO.term("Instance_class"),void 0);for(let i of t)if(i.object instanceof gr.IRI){if(i.object.value===PZ||i.object.value.includes(lM))return!0}else if(i.object instanceof cr.Literal){let s=this.unwrapWikilink(i.object.value);if(s==="exocmd__TokenInvocation"||s===lM)return!0}return(await this.tripleStore.match(e,X.Namespace.EXOCMD.term("TokenInvocation_token"),void 0)).length>0?(this.logger.debug(`Asset ${e.value} classified as TokenInvocation via its exocmd__TokenInvocation_token property; exo__Instance_class was absent or unresolved.`),!0):!1}async assetIsSubstitutionToken(e){let t=await this.tripleStore.match(e,X.Namespace.EXO.term("Instance_class"),void 0);for(let i of t)if(i.object instanceof gr.IRI){if(i.object.value===CZ||i.object.value.includes(aM))return!0}else if(i.object instanceof cr.Literal){let s=this.unwrapWikilink(i.object.value);if(s==="exocmd__SubstitutionToken"||s===aM)return!0}return(await this.tripleStore.match(e,X.Namespace.EXOCMD.term("SubstitutionToken_resolver"),void 0)).length>0?(this.logger.debug(`Asset ${e.value} classified as SubstitutionToken via its resolver property; exo__Instance_class was absent or unresolved.`),!0):!1}async resolveGroundingTypeReference(e){let t=await this.tripleStore.match(e,X.Namespace.EXOCMD.term("Grounding_type"),void 0);if(t.length===0)return null;let n=t[0].object;if(n instanceof gr.IRI)return(0,nM.resolveGroundingTypeFromIRI)(n.value);if(n instanceof cr.Literal){let i=n.value,s=i.match(/^\[\[([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:\|[^\]]*)?\]\]$/i);return s?(0,nM.resolveGroundingTypeFromIRI)(`obsidian://vault/${s[1].toLowerCase()}.md`):(this.warnOnce(`[exocmd-grounding-type-literal-form] legacy literal-string form '${i}' for exocmd__Grounding_type on <${e.value}>. Migrate to wikilink form per RFC 9d20c91f Phase 3.`),null)}return null}async expandPrototypeChain(e){if(!e||!this.normalizeWikilink(e))return[];let t=[e],n=new Set([this.normalizeWikilink(e).toLowerCase()]),i=e;for(let s=0;s<Jl;s++){let o=this.extractUuidFromRef(i);if(!o)break;let c=null;try{let u=await this.findSubjectByUID(o);if(!u)break;c=await this.getLinkedValue(u,X.Namespace.EXO.term("Asset_prototype"))}catch(u){this.logger.debug(this.capWarning(`[expandPrototypeChain] store lookup failed at hop ${s} for '${i}': ${String(u)}`));break}if(!c)break;let l=this.normalizeWikilink(c).toLowerCase();if(n.has(l))break;n.add(l),t.push(c),i=c}return t}extractUuidFromRef(e){let t=this.normalizeWikilink(e);if(this.looksLikeUUID(t))return t;let n=this.extractPathBasename(t);return n&&this.looksLikeUUID(n)?n:null}async findSubjectByUID(e){if(this.tripleStore.findSubjectsByUUID){let n=await this.tripleStore.findSubjectsByUUID(e);if(n.length>0)return n[0]}let t=await this.tripleStore.match(void 0,X.Namespace.EXO.term("Asset_uid"),void 0);for(let n of t)if(n.object instanceof cr.Literal&&n.object.value===e)return n.subject;return null}async getLiteralValue(e,t){let n=await this.tripleStore.match(e,t,void 0);if(n.length===0)return null;let i=n[0].object;return i instanceof cr.Literal||i instanceof gr.IRI?i.value:null}looksLikeUUID(e){return/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)}async resolveLabelByUID(e){let t=await this.findSubjectByUID(e);return t?this.readAssetLabel(t):null}async readAssetLabel(e){let t=(await this.tripleStore.match(e,X.Namespace.EXO.term("Asset_label"),void 0))[0]?.object;return t instanceof gr.IRI?(0,iM.iriToObsidianName)(t.value)??t.value:t instanceof cr.Literal?t.value:null}async getClassAncestors(e){return(await this.getClassAncestorsWithDepth(e)).map(n=>n.ref)}async getClassAncestorsWithDepth(e){let t=this._ancestorDepthCache.get(e);if(t)return t;let n=new Map,i=new Set,s=await this.resolveClassFileIRI(e);if(!s)return[];let o=new Set([e]),c=await this.getLiteralValue(s,X.Namespace.EXO.term("Asset_uid"));c&&o.add(c);let l=await this.readAssetLabel(s);l&&o.add(l);let u=a((p,h)=>{if(o.has(p))return;let g=n.get(p);(g===void 0||h<g)&&n.set(p,h)},"setMin"),f=[{fileIRI:s,depth:0}];for(;f.length>0;){let p=f.shift();if(!p)break;let{fileIRI:h,depth:g}=p;if(g>=Jl||i.has(h.value))continue;i.add(h.value);let m=await this.tripleStore.match(h,X.Namespace.EXO.term("Class_superClass"),void 0);for(let b of m){let _=b.object;if(!(_ instanceof gr.IRI))continue;let S=g+1,A=_.value.startsWith("obsidian://vault/"),w=this.iriToObsidianName(_.value);w&&u(w,S);let E=null;if(A?E=_:w&&(E=await this.resolveClassFileIRI(w)),!E)continue;let R=await this.getLiteralValue(E,X.Namespace.EXO.term("Asset_uid"));R&&u(R,S),i.has(E.value)||f.push({fileIRI:E,depth:S})}}let d=Array.from(n.entries()).map(([p,h])=>({ref:p,depth:h}));return this._ancestorDepthCache.set(e,d),d}async resolveClassFileIRI(e){if(this.looksLikeUUID(e))return this.findSubjectByUID(e);let t=await this.findUidByLabel(e);return t?this.findSubjectByUID(t):null}async findUidByLabel(e){return(0,sM.findUidByAssetLabel)(this.tripleStore,e)}async getLinkedUID(e,t){let n=await this.tripleStore.match(e,t,void 0);if(n.length===0)return null;let i=n[0].object;if(i instanceof gr.IRI){let s=await this.tripleStore.match(await this.resolveRefIriSubject(i),X.Namespace.EXO.term("Asset_uid"),void 0);return s.length>0&&s[0].object instanceof cr.Literal?s[0].object.value:i.value.split("/").pop()?.replace(".md","")??null}return i instanceof cr.Literal?this.normalizeWikilink(i.value):null}async getLinkedUIDs(e,t){let n=await this.tripleStore.match(e,t,void 0),i=[];for(let s of n){let o=s.object;if(o instanceof gr.IRI){let c=await this.tripleStore.match(await this.resolveRefIriSubject(o),X.Namespace.EXO.term("Asset_uid"),void 0);if(c.length>0&&c[0].object instanceof cr.Literal)i.push(c[0].object.value);else{let l=o.value.split("/").pop()?.replace(".md","");l&&i.push(l)}}else if(o instanceof cr.Literal){let c=this.normalizeWikilink(o.value);c&&i.push(c)}}return i}async getLinkedValue(e,t){let n=await this.tripleStore.match(e,t,void 0);if(n.length===0)return null;let i=n[0].object;return i instanceof cr.Literal?this.normalizeWikilink(i.value):i instanceof gr.IRI?this.iriToObsidianName(i.value)??i.value:null}async getObsidianName(e,t){let n=await this.tripleStore.match(e,t,void 0);if(n.length===0)return null;let i=n[0].object;return i instanceof cr.Literal?this.unwrapWikilink(i.value):i instanceof gr.IRI?this.iriToObsidianName(i.value)??i.value:null}unwrapWikilink(e){if(!e)return e;let t=e.trim().replace(/^"|"$/g,"");if(t.startsWith("http://")||t.startsWith("https://"))return this.iriToObsidianName(t)??t;let n=t.match(/^\[\[([^\]|]+)\|([^\]]+)\]\]$/);if(n)return n[2].trim();let i=t.match(/^\[\[([^\]|]+)\]\]$/);if(i){let s=i[1].trim();return s.startsWith("http://")||s.startsWith("https://")?this.iriToObsidianName(s)??s:s}return t}async getObsidianWikilinkValue(e,t){let n=await this.tripleStore.match(e,t,void 0);if(n.length===0)return null;let i=n[0].object;if(i instanceof cr.Literal)return this.resolveWikilinkAlias(i.value);if(i instanceof gr.IRI){let s=this.iriToObsidianName(i.value);return s?`"[[${s}]]"`:i.value}return null}async resolveWikilinkAlias(e){let t=e.match(/\[\[([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\]\]/);if(!t)return e;let n=t[1],i=await this.findSubjectByUID(n);if(!i)return e;let s=await this.readAssetLabel(i);return s?e.replace(`[[${n}]]`,`[[${n}|${s}]]`):e}iriToObsidianName(e){return(0,iM.iriToObsidianName)(e)}normalizeWikilink(e){let t=e.replace(/["'[\]]/g,"").trim(),n=t.indexOf("|");return n>=0?t.substring(0,n):t}};ma.CommandResolver=bI;ma.CommandResolver=bI=bZ([(0,SZ.injectable)(),_Z("design:paramtypes",[Object,Object])],bI)});var SI=T(_I=>{"use strict";Object.defineProperty(_I,"__esModule",{value:!0});_I.validateExoQLAllowlist=FZ;var Nb=Nh();function FZ(r){if(!r||typeof r!="object")return;let e=r;if(e.type==="update"){let t=r.updates??[];for(let n of t)if(n?.type==="load")throw new Nb.ExoQLForbiddenKeywordError("LOAD");throw new Nb.ExoQLForbiddenKeywordError("UPDATE")}if(e.type==="query"){if(e.from){let t=Array.isArray(e.from.default)&&e.from.default.length>0,n=Array.isArray(e.from.named)&&e.from.named.length>0;if(t||n)throw new Nb.ExoQLForbiddenKeywordError("FROM")}if(Array.isArray(e.where))for(let t of e.where)kb(t);if(Array.isArray(e.template))for(let t of e.template)kb(t)}}a(FZ,"validateExoQLAllowlist");function kb(r){if(!r||typeof r!="object")return;if(r.type==="service")throw new Nb.ExoQLForbiddenKeywordError("SERVICE");if(Array.isArray(r.patterns))for(let t of r.patterns)kb(t);let e=r.where;if(Array.isArray(e))for(let t of e)kb(t)}a(kb,"walkPatternForBannedKeywords")});var wI=T(Mb=>{"use strict";Object.defineProperty(Mb,"__esModule",{value:!0});Mb.DEFAULT_EVAL_CONFIG=void 0;Mb.DEFAULT_EVAL_CONFIG=Object.freeze({enabled:!0,maxNestedEvalCount:100,maxAggregateEvalMillis:1e4})});var jb=T(EI=>{"use strict";Object.defineProperty(EI,"__esModule",{value:!0});EI.evaluateWithExoEval=$Z;var DZ=Tf(),LZ=Of(),NZ=Yf(),kZ=SI(),MZ=wI(),jZ=Nh();async function $Z(r,e={}){if(typeof r!="string")throw new TypeError("evaluateWithExoEval: sparql must be a string");let n=new DZ.ExoQLParser().parse(r);if((0,kZ.validateExoQLAllowlist)(n),!{...MZ.DEFAULT_EVAL_CONFIG,...e.config??{}}.enabled)throw new jZ.ExoQLEvalDisabledError;let s="queryType"in n&&typeof n.queryType=="string"?n.queryType:"SELECT";if(!e.store)return s==="ASK"?{kind:"ask",result:!1}:s==="CONSTRUCT"?{kind:"construct",triples:[]}:{kind:"select",rows:[]};let c=new LZ.ExoQLAlgebraTranslator().translate(n),l=new NZ.ExoQLQueryExecutor(e.store);return l.isAskQuery(c)?{kind:"ask",result:await l.executeAsk(c)}:l.isConstructQuery(c)?{kind:"construct",triples:await l.executeConstruct(c)}:{kind:"select",rows:await l.executeAll(c)}}a($Z,"evaluateWithExoEval")});var wo=T($b=>{"use strict";Object.defineProperty($b,"__esModule",{value:!0});$b.DateFormatter=void 0;var vI=class r{static{a(this,"DateFormatter")}static toISOTimestamp(e){return e.toISOString().replace(/\.\d{3}Z$/,"Z")}static toLocalTimestamp(e){let t=e.getFullYear(),n=String(e.getMonth()+1).padStart(2,"0"),i=String(e.getDate()).padStart(2,"0"),s=String(e.getHours()).padStart(2,"0"),o=String(e.getMinutes()).padStart(2,"0"),c=String(e.getSeconds()).padStart(2,"0");return`${t}-${n}-${i}T${s}:${o}:${c}`}static toDateWikilink(e){let t=e.getFullYear(),n=String(e.getMonth()+1).padStart(2,"0"),i=String(e.getDate()).padStart(2,"0");return`"[[${t}-${n}-${i}]]"`}static getTodayWikilink(){return r.toDateWikilink(new Date)}static toDateString(e){let t=e.getFullYear(),n=String(e.getMonth()+1).padStart(2,"0"),i=String(e.getDate()).padStart(2,"0");return`${t}-${n}-${i}`}static parseWikilink(e){let n=e.replace(/^["']|["']$/g,"").match(/\[\[(\d{4}-\d{2}-\d{2})\]\]/);return n?n[1]:null}static addDays(e,t){let n=new Date(e);return n.setDate(n.getDate()+t),n}static isSameDay(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}static getTodayStartTimestamp(){let e=new Date;return e.setHours(0,0,0,0),r.toLocalTimestamp(e)}static toTimestampAtStartOfDay(e){let t=e.split("-").map(Number);if(t.length!==3||t.some(isNaN))throw new Error(`Invalid date format: ${e}. Expected YYYY-MM-DD`);let[n,i,s]=t,o=new Date(n,i-1,s,0,0,0,0);if(isNaN(o.getTime()))throw new Error(`Invalid date values: ${e}`);return r.toLocalTimestamp(o)}static normalizeTimestamp(e){if(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/.test(e))return e;let t=new Date(e);if(isNaN(t.getTime()))throw new Error(`Invalid timestamp format: ${e}`);return r.toISOTimestamp(t)}static isISOTimestamp(e){return/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/.test(e)}};$b.DateFormatter=vI});var Mh=T(Ub=>{"use strict";Object.defineProperty(Ub,"__esModule",{value:!0});Ub.liveClock=UZ;Ub.frozenClock=BZ;function UZ(){return{now:a(()=>new Date,"now")}}a(UZ,"liveClock");function BZ(r){let e=new Date(r);return{now:a(()=>new Date(e.getTime()),"now")}}a(BZ,"frozenClock")});var hM=T(ga=>{"use strict";var VZ=ga&&ga.__decorate||function(r,e,t,n){var i=arguments.length,s=i<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(r,e,t,n);else for(var c=r.length-1;c>=0;c--)(o=r[c])&&(s=(i<3?o(s):i>3?o(e,t,s):o(e,t))||s);return i>3&&s&&Object.defineProperty(e,t,s),s},GZ=ga&&ga.__metadata||function(r,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,e)},$h;Object.defineProperty(ga,"__esModule",{value:!0});ga.PreconditionEvaluator=void 0;var qZ=lt(),WZ=Tf(),zZ=Of(),pM=Yf(),HZ=jb(),jh=wo(),KZ=Mh(),Uh=$h=class{static{a(this,"PreconditionEvaluator")}constructor(e,t,n){this.hostFunctions=new Map,this.askCache=new Map,this.tripleStore=e,this.queryBodyResolver=t,this.clock=n?.clock??(0,KZ.liveClock)()}async evaluate(e,t,n){if(!e)return!0;let i=new Map;return await this.evaluateNode(e,t,n,i)==="yes"}async evaluateNode(e,t,n,i){if(e.broken)return"unknown";if(e.composite){let{op:s,children:o}=e.composite;if(o.length===0)return"unknown";let c=await Promise.all(o.map(l=>this.evaluateNode(l,t,n,i)));return s==="all"?c.includes("no")?"no":c.includes("unknown")?"unknown":"yes":c.includes("yes")?"yes":c.includes("unknown")?"unknown":"no"}if(e.not){let s=await this.evaluateNode(e.not,t,n,i);return s==="unknown"?"unknown":s==="yes"?"no":"yes"}return e.sparqlAsk?await this.evaluateSparqlAskMemoized(e.sparqlAsk,t,i)?"yes":"no":e.query?await this.evaluateQueryRef(e.query,t)?"yes":"no":e.hostFunction?this.evaluateHostFunction(e.hostFunction,t,n)?"yes":"no":"yes"}evaluateSparqlAskMemoized(e,t,n){let i=n.get(e);if(i!==void 0)return i;let s=this.evaluateSparqlAsk(e,t);return n.set(e,s),s}async evaluateQueryRef(e,t){if(!this.queryBodyResolver)return!1;try{let n=await this.queryBodyResolver.resolveSparql(e);if(!n)return!1;let i=this.substituteVariables(n,t),s=await(0,HZ.evaluateWithExoEval)(i,{store:this.tripleStore});return s.kind!=="ask"?!1:s.result}catch{return!1}}registerHostFunction(e,t){this.hostFunctions.set(e,t)}hasHostFunction(e){return this.hostFunctions.has(e)}evaluateHostFunctionSync(e,t,n){return this.hostFunctions.has(e)?this.evaluateHostFunction(e,t,n):null}invalidateCache(){this.askCache.clear()}compileAsk(e){let t=this.substituteVariables(e,$h.SENTINEL_IRI),i=new WZ.ExoQLParser().parse(t),o=new zZ.ExoQLAlgebraTranslator().translate(i);return new pM.ExoQLQueryExecutor(this.tripleStore).isAskQuery(o)?o:null}evaluateHostFunction(e,t,n){let i=this.hostFunctions.get(e);if(!i)return!0;let s=n?{...n,targetIRI:t}:{targetIRI:t};try{return i(s)}catch{return!1}}async evaluateSparqlAsk(e,t){try{let n=$h.TEMPORAL_TOKEN.test(e),i=n?jh.DateFormatter.toDateString(this.clock.now()):null,s=this.askCache.get(e);if(s===void 0||n&&s.day!==i){let l=this.compileAsk(e);if(!l)return!1;s={day:i,compiled:l},this.askCache.set(e,s)}let o=JSON.parse(JSON.stringify(s.compiled).replaceAll($h.SENTINEL_IRI,t));return await new pM.ExoQLQueryExecutor(this.tripleStore).executeAsk(o)}catch{return!1}}substituteVariables(e,t){let n=this.clock.now(),i=n.toISOString(),s=n.getFullYear(),o=n.getMonth(),c=n.getDate(),l=n.getDay(),u=jh.DateFormatter.toDateString(n),f=jh.DateFormatter.toDateString(new Date(s,o,c-1)),d=(l+6)%7,p=jh.DateFormatter.toDateString(new Date(s,o,c-d)),h=jh.DateFormatter.toDateString(new Date(s,o,c-d-7)),g=`${s}-${String(o+1).padStart(2,"0")}-01`,m=o===0?11:o-1,_=`${o===0?s-1:s}-${String(m+1).padStart(2,"0")}-01`,S=`${s}-01-01`;return e.replace(/\$target\b/g,`<${t}>`).replace(/\$now\b/g,`"${i}"^^xsd:dateTime`).replace(/\$yesterday\b/g,`"${f}"^^xsd:date`).replace(/\$thisWeekStart\b/g,`"${p}"^^xsd:date`).replace(/\$lastWeekStart\b/g,`"${h}"^^xsd:date`).replace(/\$thisMonthStart\b/g,`"${g}"^^xsd:date`).replace(/\$lastMonthStart\b/g,`"${_}"^^xsd:date`).replace(/\$thisYearStart\b/g,`"${S}"^^xsd:date`).replace(/\$today\b/g,`"${u}"^^xsd:date`)}};ga.PreconditionEvaluator=Uh;Uh.SENTINEL_IRI="urn:exocortex:cache-sentinel:target";Uh.TEMPORAL_TOKEN=/\$(?:now|today|yesterday|thisWeekStart|lastWeekStart|thisMonthStart|lastMonthStart|thisYearStart)\b/;ga.PreconditionEvaluator=Uh=$h=VZ([(0,qZ.injectable)(),GZ("design:paramtypes",[Object,Object,Object])],Uh)});var mM=T(ya=>{"use strict";Object.defineProperty(ya,"__esModule",{value:!0});ya.hasUidFilename=ya.hasNonUidFilename=void 0;ya.registerDefaultHostFunctions=QZ;var YZ=a(r=>{let e=r.assetUid;if(typeof e!="string"||e.trim()==="")return!1;let t=r.fileBasename;return typeof t!="string"?!1:t!==e},"hasNonUidFilename");ya.hasNonUidFilename=YZ;var XZ=a(r=>{let e=r.assetUid;if(typeof e!="string"||e.trim()==="")return!1;let t=r.fileBasename;return typeof t!="string"?!1:t===e},"hasUidFilename");ya.hasUidFilename=XZ;function QZ(r){r.registerHostFunction("hasNonUidFilename",ya.hasNonUidFilename),r.registerHostFunction("hasUidFilename",ya.hasUidFilename)}a(QZ,"registerDefaultHostFunctions")});var Vb=T(Bb=>{"use strict";Object.defineProperty(Bb,"__esModule",{value:!0});Bb.liveUidGenerator=JZ;Bb.seededUidGenerator=eee;var TI=sf();function JZ(){return{next:a(()=>(0,TI.v4)(),"next")}}a(JZ,"liveUidGenerator");var ZZ="6ba7b810-9dad-11d1-80b4-00c04fd430c8";function eee(r){let e=0,t=(0,TI.v5)(r,ZZ);return{next:a(()=>{let n=`${r}#${e}`;return e+=1,(0,TI.v5)(n,t)},"next")}}a(eee,"seededUidGenerator")});var Wb=T(Ac=>{"use strict";Object.defineProperty(Ac,"__esModule",{value:!0});Ac.registerResolver=yr;Ac.getResolver=nee;Ac.isResolverModifierAware=iee;Ac.getRegisteredResolverIds=see;Ac.clearResolvers=oee;Ac.installDefaultResolvers=gee;var tee=wo(),gM=gc(),qb=new Map,AI=new Set,ree=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function yr(r,e,t=!1){qb.set(r,e),t&&AI.add(r)}a(yr,"registerResolver");function nee(r){return qb.get(r)}a(nee,"getResolver");function iee(r){return AI.has(r)}a(iee,"isResolverModifierAware");function see(){return Array.from(qb.keys())}a(see,"getRegisteredResolverIds");function oee(){qb.clear(),AI.clear()}a(oee,"clearResolvers");function vn(r){return r<10?`0${r}`:String(r)}a(vn,"pad2");var aee=["January","February","March","April","May","June","July","August","September","October","November","December"],cee=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],lee=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],uee=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];function fee(r){let e=["th","st","nd","rd"],t=r%100;return`${r}${e[(t-20)%10]||e[t]||e[0]}`}a(fee,"ordinalDay");var dee=/YYYY|YY|MMMM|MMM|MM|M|Do|DD|D|dddd|ddd|HH|H|hh|h|mm|m|ss|s|A|a/g;function pee(r,e){let t=(r.getHours()+11)%12+1;return e.replace(dee,n=>{switch(n){case"YYYY":return String(r.getFullYear());case"YY":return vn(r.getFullYear()%100);case"MMMM":return aee[r.getMonth()];case"MMM":return cee[r.getMonth()];case"MM":return vn(r.getMonth()+1);case"M":return String(r.getMonth()+1);case"Do":return fee(r.getDate());case"DD":return vn(r.getDate());case"D":return String(r.getDate());case"dddd":return lee[r.getDay()];case"ddd":return uee[r.getDay()];case"HH":return vn(r.getHours());case"H":return String(r.getHours());case"hh":return vn(t);case"h":return String(t);case"mm":return vn(r.getMinutes());case"m":return String(r.getMinutes());case"ss":return vn(r.getSeconds());case"s":return String(r.getSeconds());case"A":return r.getHours()<12?"AM":"PM";case"a":return r.getHours()<12?"am":"pm";default:return n}})}a(pee,"formatDate");function yM(r,e,t){let n=r.getDate(),i=new Date(r.getTime());i.setDate(1),t==="M"?i.setMonth(i.getMonth()+e):i.setFullYear(i.getFullYear()+e);let s=new Date(i.getFullYear(),i.getMonth()+1,0).getDate();return i.setDate(Math.min(n,s)),i}a(yM,"addMonthsClamped");function hee(r,e){if(!e)return r;let t=e.match(/^([+-])(\d+)([dwMy])?$/);if(!t)return r;let n=(t[1]==="-"?-1:1)*parseInt(t[2],10),i=t[3]??"d",s=new Date(r.getTime());switch(i){case"d":s.setDate(s.getDate()+n);break;case"w":s.setDate(s.getDate()+n*7);break;case"M":s=yM(s,n,"M");break;case"y":s=yM(s,n,"y");break}return isNaN(s.getTime())?r:s}a(hee,"applyDateOffset");function mee(r){if(!r)return{offset:null,format:null};let e=r.indexOf(":");if(e<0)return{offset:r,format:null};let t=r.slice(0,e),n=r.slice(e+1);return{offset:t||null,format:n||null}}a(mee,"parseDateModifier");function Gb(r,e){return(t,n)=>{let{offset:i,format:s}=mee(n),o=new Date;return r!==0&&o.setDate(o.getDate()+r),o=hee(o,i),pee(o,s??e)}}a(Gb,"makeDateResolver");function gee(){yr("today",()=>{let r=new Date;return`${r.getFullYear()}-${vn(r.getMonth()+1)}-${vn(r.getDate())}`}),yr("todayStart",()=>tee.DateFormatter.getTodayStartTimestamp()),yr("date",Gb(0,"YYYY-MM-DD"),!0),yr("now",Gb(0,"YYYY-MM-DDTHH:mm:ss"),!0),yr("tomorrow",Gb(1,"YYYY-MM-DD"),!0),yr("yesterday",Gb(-1,"YYYY-MM-DD"),!0),yr("target",r=>r.targetIRI?`"[[${r.targetIRI}]]"`:""),yr("targetFolder",r=>{if(!r.targetFilePath)return"";let e=r.targetFilePath.replace(/^\/+/,""),t=e.lastIndexOf("/");return t>=0?e.slice(0,t):""}),yr("createdInstance",r=>{let e=r.createdInstancePath;if(!e)return null;let t=e.replace(/\.md$/i,"").replace(/^\/+/,""),n=t.split("/").pop()??t;return`"[[${ree.test(n)?n:t}]]"`}),yr("randomUUIDv4",()=>{if(typeof crypto<"u"&&typeof crypto.randomUUID=="function")return crypto.randomUUID();throw new Error("randomUUIDv4 resolver requires crypto.randomUUID() \u2014 runtime is missing Node crypto / Web Crypto API.")}),yr("nowTimestamp",()=>{let r=new Date;return`${r.getFullYear()}-${vn(r.getMonth()+1)}-${vn(r.getDate())}T${vn(r.getHours())}:${vn(r.getMinutes())}:${vn(r.getSeconds())}`}),yr("nowDate",()=>{let r=new Date;return`${r.getFullYear()}-${vn(r.getMonth()+1)}-${vn(r.getDate())}`}),yr("nowYear",()=>String(new Date().getFullYear())),yr("nowMonth",()=>vn(new Date().getMonth()+1)),yr("userInputLabel",r=>{let e=r.userInput?.label;return typeof e=="string"?e:""}),yr("userInput",(r,e)=>{if(!e)return null;let t=r.userInput?.[e];return typeof t=="string"?t:t==null?null:String(t)}),yr("targetProperty",(r,e)=>{if(!e||!r.targetFm)return null;let t=r.targetFm[e];return t==null?null:Array.isArray(t)?t.map(n=>(0,gM.decodeYamlBlockScalar)(String(n),!0)):(0,gM.decodeYamlBlockScalar)(String(t))}),yr("targetRefProperty",(r,e)=>{if(!e)return null;let t=e.indexOf("|");if(t<0)return null;let n=e.slice(0,t),i=e.slice(t+1);if(!n||!i)return null;let s=r.targetRefFm?.[n];if(!s)return null;let o=s[i];return o==null?null:Array.isArray(o)?o.length>0?String(o[0]):null:String(o)}),yr("labelAsArray",r=>{let e=r.userInput?.label;return typeof e=="string"&&e.length>0?[e]:[]}),yr("groundingTargetClass",r=>r.groundingTargetClassUid?`"[[${r.groundingTargetClassUid}]]"`:null),yr("targetClassSelf",r=>{if(!r.targetFilePath)return null;let e=r.targetFilePath.replace(/^\/+/,""),n=e.slice(e.lastIndexOf("/")+1).replace(/\.md$/i,"");return n.length>0?`"[[${n}]]"`:null})}a(gee,"installDefaultResolvers")});var RI=T(zb=>{"use strict";Object.defineProperty(zb,"__esModule",{value:!0});zb.resolveTemplateBody=bee;zb.stripTemplateFrontmatter=_ee;var II=Wb();(0,II.installDefaultResolvers)();var yee=/\$([A-Za-z][A-Za-z0-9_]*)((?:[+-]\d+[dwMy])?(?::[A-Za-z0-9:./-]+)?)/g;function bee(r,e={}){return r.replace(yee,(t,n,i)=>{let s=(0,II.getResolver)(n);if(s===void 0)return t;let o=s(e,i.length>0?i:void 0);return typeof o!="string"||o.length===0?t:(0,II.isResolverModifierAware)(n)?o:o+i})}a(bee,"resolveTemplateBody");function _ee(r){let e=r.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);return e?r.slice(e[0].length):r}a(_ee,"stripTemplateFrontmatter")});var Yb=T(Qf=>{"use strict";Object.defineProperty(Qf,"__esModule",{value:!0});Qf.registerOrderSpecLoader=See;Qf.clearOrderSpecLoader=wee;Qf.loadDefaultSpec=Eee;Qf.orderProperties=vee;var Hb=null,Ic,Kb=!1;function See(r){Hb=r,Ic=void 0,Kb=!1}a(See,"registerOrderSpecLoader");function wee(){Hb=null,Ic=void 0,Kb=!1}a(wee,"clearOrderSpecLoader");function Eee(){if(Ic!==void 0)return Ic;if(!Hb)return Ic=null,null;try{Ic=Hb()}catch(r){Kb||(console.warn("[OrderSpecResolver] loader threw, falling back to insertion order:",r),Kb=!0),Ic=null}return Ic}a(Eee,"loadDefaultSpec");function vee(r,e){if(!e||e.head.length===0&&e.tail.length===0)return r;let t=Object.keys(r),n=new Set(e.head),i=new Set(e.tail),s=e.head.filter(u=>Object.prototype.hasOwnProperty.call(r,u)),o=e.tail.filter(u=>Object.prototype.hasOwnProperty.call(r,u)),c=t.filter(u=>!n.has(u)&&!i.has(u));e.middleStrategy==="alphabetical"&&c.sort((u,f)=>u.localeCompare(f));let l={};for(let u of s)l[u]=r[u];for(let u of c)l[u]=r[u];for(let u of o)l[u]=r[u];return l}a(vee,"orderProperties")});var Fi=T(Xb=>{"use strict";Object.defineProperty(Xb,"__esModule",{value:!0});Xb.DI_TOKENS=void 0;Xb.DI_TOKENS={IFileSystemAdapter:Symbol.for("IFileSystemAdapter"),IVaultAdapter:Symbol.for("IVaultAdapter"),IVaultContext:Symbol.for("IVaultContext"),IMultiVaultManager:Symbol.for("IMultiVaultManager"),ILogger:Symbol.for("ILogger"),IEventBus:Symbol.for("IEventBus"),IConfiguration:Symbol.for("IConfiguration"),INotificationService:Symbol.for("INotificationService"),ClassCreationService:Symbol.for("ClassCreationService"),GenericAssetCreationService:Symbol.for("GenericAssetCreationService"),TaskStatusService:Symbol.for("TaskStatusService"),EffortStatusWorkflow:Symbol.for("EffortStatusWorkflow"),StatusTimestampService:Symbol.for("StatusTimestampService"),PropertyCleanupService:Symbol.for("PropertyCleanupService"),FolderRepairService:Symbol.for("FolderRepairService"),RenameToUidService:Symbol.for("RenameToUidService"),NoteToRDFConverter:Symbol.for("NoteToRDFConverter"),IVaultSettings:Symbol.for("IVaultSettings"),AreaHierarchyBuilder:Symbol.for("AreaHierarchyBuilder"),ClassHierarchyResolver:Symbol.for("ClassHierarchyResolver")}});var xI=T(Qb=>{"use strict";Object.defineProperty(Qb,"__esModule",{value:!0});Qb.RDFVocabularyMapper=void 0;var Dr=Ai(),bM=Le(),Ae=At(),CI=class{static{a(this,"RDFVocabularyMapper")}constructor(){this.propertyMappings=new Map([["exo__Instance_class",Ae.Namespace.RDF.term("type")],["exo__Asset_isDefinedBy",Ae.Namespace.RDFS.term("isDefinedBy")],["exo__Class_superClass",Ae.Namespace.RDFS.term("subClassOf")],["exo__Property_range",Ae.Namespace.RDFS.term("range")],["exo__Property_domain",Ae.Namespace.RDFS.term("domain")],["exo__Property_superProperty",Ae.Namespace.RDFS.term("subPropertyOf")]])}generateClassHierarchyTriples(){let e=[];return e.push(new Dr.Triple(Ae.Namespace.EXO.term("Asset"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.RDFS.term("Resource"))),e.push(new Dr.Triple(Ae.Namespace.EXO.term("Class"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.RDFS.term("Class"))),e.push(new Dr.Triple(Ae.Namespace.EXO.term("Property"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.RDF.term("Property"))),e.push(new Dr.Triple(Ae.Namespace.EMS.term("Task"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.EXO.term("Asset"))),e.push(new Dr.Triple(Ae.Namespace.EMS.term("Project"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.EXO.term("Asset"))),e.push(new Dr.Triple(Ae.Namespace.EMS.term("Area"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.EXO.term("Asset"))),e.push(new Dr.Triple(Ae.Namespace.EMS.term("Workflow"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.EXO.term("Asset"))),e.push(new Dr.Triple(Ae.Namespace.EMS.term("WorkflowState"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.EXO.term("Asset"))),e.push(new Dr.Triple(Ae.Namespace.EMS.term("WorkflowTransition"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.EXO.term("Asset"))),e.push(new Dr.Triple(Ae.Namespace.EXOCMD.term("Command"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.EXO.term("Asset"))),e.push(new Dr.Triple(Ae.Namespace.EXOCMD.term("Precondition"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.EXO.term("Asset"))),e.push(new Dr.Triple(Ae.Namespace.EXOCMD.term("Grounding"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.EXO.term("Asset"))),e.push(new Dr.Triple(Ae.Namespace.EXOCMD.term("CommandBinding"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.EXO.term("Asset"))),e}generatePropertyHierarchyTriples(){let e=[];return e.push(new Dr.Triple(Ae.Namespace.EXO.term("Instance_class"),Ae.Namespace.RDFS.term("subPropertyOf"),Ae.Namespace.RDF.term("type"))),e.push(new Dr.Triple(Ae.Namespace.EXO.term("Asset_isDefinedBy"),Ae.Namespace.RDFS.term("subPropertyOf"),Ae.Namespace.RDFS.term("isDefinedBy"))),e.push(new Dr.Triple(Ae.Namespace.EXO.term("Class_superClass"),Ae.Namespace.RDFS.term("subPropertyOf"),Ae.Namespace.RDFS.term("subClassOf"))),e.push(new Dr.Triple(Ae.Namespace.EXO.term("Property_range"),Ae.Namespace.RDFS.term("subPropertyOf"),Ae.Namespace.RDFS.term("range"))),e.push(new Dr.Triple(Ae.Namespace.EXO.term("Property_domain"),Ae.Namespace.RDFS.term("subPropertyOf"),Ae.Namespace.RDFS.term("domain"))),e.push(new Dr.Triple(Ae.Namespace.EXO.term("Property_superProperty"),Ae.Namespace.RDFS.term("subPropertyOf"),Ae.Namespace.RDFS.term("subPropertyOf"))),e}generateMappedTriple(e,t,n){let i=this.propertyMappings.get(t);if(!i)return null;let s;if(n instanceof bM.IRI)s=n;else{let o=Ae.Namespace.fromPropertyKey(n);s=o?o.namespace.term(o.localName):new bM.IRI(n)}return new Dr.Triple(e,i,s)}hasMappingFor(e){return this.propertyMappings.has(e)}};Qb.RDFVocabularyMapper=CI});var Jb=T(ba=>{"use strict";Object.defineProperty(ba,"__esModule",{value:!0});ba.OBSIDIAN_VAULT_SCHEME=void 0;ba.vaultPathToIRI=Tee;ba.iriToVaultPath=Aee;ba.OBSIDIAN_VAULT_SCHEME="obsidian://vault/";function Tee(r){let e=r.startsWith("./")?r.slice(2):r;return`${ba.OBSIDIAN_VAULT_SCHEME}${encodeURI(e)}`}a(Tee,"vaultPathToIRI");function Aee(r){if(!r.startsWith(ba.OBSIDIAN_VAULT_SCHEME))return null;let e=r.slice(ba.OBSIDIAN_VAULT_SCHEME.length);try{return decodeURI(e)}catch{return null}}a(Aee,"iriToVaultPath")});var e_=T(Bh=>{"use strict";Object.defineProperty(Bh,"__esModule",{value:!0});Bh.derivePath=_M;Bh.deriveUrl=Iee;Bh.deriveLegacyFlatPath=Ree;var OI="assetspaces",Zb=/^[A-Za-z0-9._-]+$/;function _M(r){if(typeof r!="string")return null;let e=r.trim();if(e.length===0||/^file:\/\//i.test(e))return null;e=e.replace(/\/+$/,""),e=e.replace(/\.git$/i,"");let t=null;if(!e.includes("://")){let o=/^[^/@\s]+@[^/:\s]+:(.+)$/.exec(e);o&&(t=o[1])}if(t===null){let o=e.replace(/^[a-z][a-z0-9+.-]*:\/\//i,"");o=o.replace(/^[^/@]+@/,"");let c=o.indexOf("/");if(c<0)return null;t=o.slice(c+1)}let n=t.split("/").filter(o=>o.length>0);if(n.length<2)return null;let i=n[0],s=n[1];return i==="."||i===".."||s==="."||s===".."||!Zb.test(i)||!Zb.test(s)?null:`${OI}/${i}/${s}`}a(_M,"derivePath");function Iee(r){if(typeof r!="string")return null;let e=r.trim();if(e.length===0)return null;e=e.replace(/^\/+/,"").replace(/\/+$/,"");let t=`${OI}/`;if(!e.startsWith(t))return null;let n=e.slice(t.length).split("/").filter(o=>o.length>0);if(n.length<2)return null;let i=n[0],s=n[1];return i==="."||i===".."||s==="."||s===".."||!Zb.test(i)||!Zb.test(s)?null:`https://github.com/${i}/${s}`}a(Iee,"deriveUrl");function Ree(r){let e=_M(r);if(e===null)return null;let t=e.split("/")[2];if(t===void 0||t.length===0)return null;let n=t.startsWith("exoas-")?t.slice(6):t;return n.length===0?null:`${OI}/${n}`}a(Ree,"deriveLegacyFlatPath")});var t_=T(Ts=>{"use strict";Object.defineProperty(Ts,"__esModule",{value:!0});Ts.FILE_SPACE_CLASS_UID=void 0;Ts.frontmatterDeclaresFileSpace=xee;Ts.discoverFileSpaceExclusions=Pee;var Cee=e_();Ts.FILE_SPACE_CLASS_UID="aad8913e-5e9f-4047-879d-93cc46befd52";var SM=/\[\[([^\]|]+)(?:\|[^\]]*)?\]\]/g,PI=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function EM(r){let e=Array.isArray(r)?r:[r],t=[];for(let n of e){if(typeof n!="string")continue;SM.lastIndex=0;let i;for(;(i=SM.exec(n))!==null;)t.push(i[1].trim())}return t}a(EM,"wikilinkTargets");function xee(r){return r?EM(r.exo__Instance_class).some(e=>PI.test(e)&&e.toLowerCase()===Ts.FILE_SPACE_CLASS_UID):!1}a(xee,"frontmatterDeclaresFileSpace");function wM(r,e){try{return r.getFrontmatter(e)}catch{return null}}a(wM,"readFrontmatterSafe");function Oee(r){let e=r.exo__AssetSpace_source;if(typeof e=="string"&&e.length>0)return e;let t=r.exo__AssetSpace_git;return typeof t=="string"&&t.length>0?t:null}a(Oee,"readSource");function Pee(r){let e=[],t=[],n=[],i=new Map,s=a((c,l)=>{if(PI.test(c))return c.toLowerCase()===Ts.FILE_SPACE_CLASS_UID;let u=r.getFirstLinkpathDest(c,l);if(u==null)return!1;let f=i.get(u.path);if(f!==void 0)return f;let p=wM(r,u)?.exo__Asset_uid,h=typeof p=="string"&&p.toLowerCase()===Ts.FILE_SPACE_CLASS_UID;return i.set(u.path,h),h},"isFileSpaceClassRef"),o=a(c=>c.some(l=>PI.test(l)&&l.toLowerCase()===Ts.FILE_SPACE_CLASS_UID),"hasUuidFormRef");for(let c of r.getAllFiles()){let l=wM(r,c);if(!l)continue;let u=EM(l.exo__Instance_class);if(!u.some(h=>s(h,c.path)))continue;t.push(c.path),o(u)||n.push(`FileSpace declaration ${c.path} references the class via a label-form link only \u2014 the sync layer will not pick it up; use the UUID-form wikilink [[${Ts.FILE_SPACE_CLASS_UID}]] (UID-canon)`);let f=Oee(l);if(f===null){n.push(`FileSpace declaration ${c.path} has no exo__AssetSpace_source/_git \u2014 mount path underivable, content NOT excluded from the index`);continue}let d=(0,Cee.derivePath)(f);if(d===null){n.push(`FileSpace declaration ${c.path}: cannot derive mount path from source "${f}" \u2014 content NOT excluded from the index`);continue}let p=`${d}/`;c.path.startsWith(p)&&n.push(`FileSpace declaration ${c.path} lies INSIDE its own mount ${p} \u2014 it will be excluded from the index together with the content; move the declaration outside the mount folder`),e.push(p)}return{prefixes:e,declarationPaths:t,warnings:n}}a(Pee,"discoverFileSpaceExclusions")});var eu=T(kt=>{"use strict";var Fee=kt&&kt.__decorate||function(r,e,t,n){var i=arguments.length,s=i<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(r,e,t,n);else for(var c=r.length-1;c>=0;c--)(o=r[c])&&(s=(i<3?o(s):i>3?o(e,t,s):o(e,t))||s);return i>3&&s&&Object.defineProperty(e,t,s),s},Dee=kt&&kt.__metadata||function(r,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,e)},vM=kt&&kt.__param||function(r,e){return function(t,n){e(t,n,r)}},LI;Object.defineProperty(kt,"__esModule",{value:!0});kt.NoteToRDFConverter=kt.LEGACY_YAML_KEYS=kt.LEGACY_UNPREFIXED_ASSET_FIELDS=kt.UNPREFIXED_ASSET_FIELDS=void 0;kt.canonicalYamlKey=jee;kt.isPosixBracketExpression=IM;kt.normaliseExcludedFolders=RM;kt.isPathExcluded=CM;var FI=lt(),Lr=Ai(),As=Le(),jn=He(),TM=sr(),Zt=At(),AM=Fi(),Lee=xI(),Nee=mh(),DI=Jb(),Di=OT(),kee=t_();kt.UNPREFIXED_ASSET_FIELDS=new Set(["draft","pinned","aliases"]);kt.LEGACY_UNPREFIXED_ASSET_FIELDS=new Set(["archived"]);kt.LEGACY_YAML_KEYS=new Map([...kt.LEGACY_UNPREFIXED_ASSET_FIELDS].map(r=>[`exo__Asset_${r}`,[r]]));var Mee=/^exo__Asset_(.+)$/;function jee(r){let e=Mee.exec(r);return e&&kt.UNPREFIXED_ASSET_FIELDS.has(e[1])?e[1]:kt.LEGACY_UNPREFIXED_ASSET_FIELDS.has(r)?`exo__Asset_${r}`:r}a(jee,"canonicalYamlKey");function IM(r){return/^:[^\s[\]|]+:$/.test(r)}a(IM,"isPosixBracketExpression");function RM(r){return Array.isArray(r)?r.map(e=>String(e).replace(/\\/g,"/").trim()).filter(e=>e.length>0).map(e=>e.endsWith("/")?e:`${e}/`):[]}a(RM,"normaliseExcludedFolders");function CM(r,e){if(e.length===0)return!1;let t=r.replace(/\\/g,"/");for(let n of e)if(t.startsWith(n))return!0;return!1}a(CM,"isPathExcluded");function $ee(r){if(!r)return"";let e=r.replace(/\\/g,"/");for(;e.startsWith("/");)e=e.slice(1);for(;e.endsWith("/");)e=e.slice(0,-1);return e.length>0?`${e}/`:""}a($ee,"normaliseSubjectIriPrefix");var Zl=LI=class{static{a(this,"NoteToRDFConverter")}constructor(e,t=Nee.NullLogger,n={}){this.vault=e,this.logger=t,this.BODY_WIKILINK_PATTERN=/(?<!!)\[\[([^\]|]+)(?:\|[^\]]+)?\]\]/g,this.pendingExtraTriples=[],this.preResolvedTargetFm=new Map,this.vocabularyMapper=new Lee.RDFVocabularyMapper,this.subjectIriPrefix=$ee(n.subjectIriPrefix),this.emitInstanceClassAsUid=n.emitInstanceClassAsUid??!1}async convertNote(e){let t=this.vault.getFrontmatterWithFallback?await this.vault.getFrontmatterWithFallback(e):this.vault.getFrontmatter(e);return this.convertNoteFromFrontmatter(e,t)}async convertNoteFromFrontmatter(e,t){if(!t)return[];await this.preResolveWikilinkTargets(t);let n=this.notePathToIRI(e.path),i=Zt.Namespace.EXO.term("Asset_filename"),s=new Lr.Triple(n,i,new jn.Literal(e.basename));if(Di.Exo003Parser.isExo003Format(t)){let o=await this.convertExo003Note(e,t);return[s,...o]}return this.convertLegacyNote(e,t,s)}async convertLegacyNote(e,t,n){this.pendingExtraTriples=[];let i=[n],s=this.notePathToIRI(e.path),o,c,l,u=!1,f=Zt.Namespace.EXO.term("Statement").value;for(let[m,b]of Object.entries(t)){if(kt.LEGACY_UNPREFIXED_ASSET_FIELDS.has(m)&&Object.prototype.hasOwnProperty.call(t,`exo__Asset_${m}`))continue;let _=kt.UNPREFIXED_ASSET_FIELDS.has(m)||kt.LEGACY_UNPREFIXED_ASSET_FIELDS.has(m)?`exo__Asset_${m}`:m;if(!this.isExocortexProperty(_))continue;let S=this.propertyKeyToIRI(_),A=Array.isArray(b)?b:[b];for(let w of A)if(!((m==="exo__Asset_label"||kt.UNPREFIXED_ASSET_FIELDS.has(m)||kt.LEGACY_UNPREFIXED_ASSET_FIELDS.has(m))&&(w==null||typeof w=="string"&&w.trim()==="")))if(m==="exo__Instance_class"){let E=this.valueToClassURI(w);i.push(new Lr.Triple(s,S,E))}else{let E=await this.valueToRDFObject(w,e,S);if(_==="exo__Statement_subject"&&o===void 0){let R=E.find(x=>x instanceof As.IRI);R&&(o=R)}else if(_==="exo__Statement_predicate"&&c===void 0){let R=E.find(x=>x instanceof As.IRI);R&&(c=R)}else _==="exo__Statement_object"&&l===void 0&&(l=E[0]);for(let R of E)if(i.push(new Lr.Triple(s,S,R)),this.vocabularyMapper.hasMappingFor(m)&&R instanceof As.IRI){let x=this.vocabularyMapper.generateMappedTriple(s,m,R);x&&i.push(x)}}if(m==="exo__Instance_class")for(let w of A){let E=this.valueToClassURI(w);if(E instanceof As.IRI){let R=Zt.Namespace.RDF.term("type");i.push(new Lr.Triple(s,R,E)),E.value===f&&(u=!0)}}if(m==="exo__Asset_label"){let w=Zt.Namespace.RDFS.term("label");for(let E of A)typeof E=="string"&&E.length>0&&i.push(new Lr.Triple(s,w,new jn.Literal(E)))}}let d="exo__Instance_class"in t||"exo__Asset_uid"in t,p=t.exo__Asset_label,h="exo__Asset_label"in t&&p!==null&&p!==void 0&&!(typeof p=="string"&&p.trim()==="")&&!(Array.isArray(p)&&p.length===0);if(d&&!h){let m=Zt.Namespace.RDFS.term("label"),b=Zt.Namespace.EXO.term("Asset_label"),_=new jn.Literal(e.basename);i.push(new Lr.Triple(s,m,_)),i.push(new Lr.Triple(s,b,_))}i.push(...this.pendingExtraTriples),this.pendingExtraTriples=[],u&&o&&c&&l&&i.push(new Lr.Triple(o,c,l));let g=await this.convertBodyWikilinks(e,s);return i.push(...g),i}async convertExo003Note(e,t){let n=Di.Exo003Parser.parse(t);if(!n.success||!n.metadata)return[];let i=n.metadata,s=[];switch(i.metadata){case Di.Exo003MetadataType.Namespace:break;case Di.Exo003MetadataType.Anchor:s.push(...this.convertExo003Anchor(e,i));break;case Di.Exo003MetadataType.BlankNode:s.push(...this.convertExo003BlankNode(e,i));break;case Di.Exo003MetadataType.Statement:s.push(...this.convertExo003Statement(e,i));break;case Di.Exo003MetadataType.Body:s.push(...await this.convertExo003Body(e,i));break}return s}convertExo003Anchor(e,t){let n=this.notePathToIRI(e.path),i=new As.IRI(t.uri);return[new Lr.Triple(n,Zt.Namespace.OWL.term("sameAs"),i),new Lr.Triple(i,Zt.Namespace.OWL.term("sameAs"),n)]}convertExo003BlankNode(e,t){let n=this.notePathToIRI(e.path),i=t.uri.replace(/[^a-zA-Z0-9_-]/g,"_");return[new Lr.Triple(n,Zt.Namespace.OWL.term("sameAs"),new TM.BlankNode(i))]}convertExo003Statement(e,t){let n=[];try{let i=this.createExo003ReferenceResolver(e),s=Di.Exo003Parser.toTriple(t,i);n.push(s);let o=this.notePathToIRI(e.path);n.push(new Lr.Triple(o,Zt.Namespace.RDF.term("value"),s.subject))}catch{}return n}async convertExo003Body(e,t){let n=[];try{let i=await this.vault.read(e),s=this.extractBodyContent(i),o=this.createExo003ReferenceResolver(e),c=o(t.subject),l=o(t.predicate);if(c.type==="literal")throw new Error("Body subject cannot be a literal");if(l.type!=="iri")throw new Error("Body predicate must be an IRI");let u=c.type==="iri"?new As.IRI(c.value):new TM.BlankNode(c.value),f=new As.IRI(l.value),d=Di.Exo003Parser.toLiteral(t,s.trim());n.push(new Lr.Triple(u,f,d));let p=this.notePathToIRI(e.path);n.push(new Lr.Triple(p,Zt.Namespace.RDF.term("value"),u))}catch{}return n}createExo003ReferenceResolver(e){return t=>{let n=this.extractWikilink(t),i=n||t,s=this.vault.getFirstLinkpathDest(i,e.path);if(s){let o=this.targetFrontmatter(s);if(o&&Di.Exo003Parser.isExo003Format(o)){let c=Di.Exo003Parser.parse(o);if(c.success&&c.metadata){let l=c.metadata;if(l.metadata===Di.Exo003MetadataType.Anchor||l.metadata===Di.Exo003MetadataType.Namespace)return{type:"iri",value:l.uri};if(l.metadata===Di.Exo003MetadataType.BlankNode)return{type:"blank",value:l.uri.replace(/[^a-zA-Z0-9_-]/g,"_")}}}return{type:"iri",value:this.notePathToIRI(s.path).value}}return!n&&t.includes("://")?{type:"iri",value:t}:{type:"literal",value:t}}}async convertVault(e={}){return(await this.convertVaultWithValidation({strict:!1,excludedFolders:e.excludedFolders,onFileTriples:e.onFileTriples})).triples}async convertVaultWithValidation(e={}){let t=e.files??this.vault.getAllFiles(),n=[],i=[],s=e.strict??!1,o=0,c=0,l=0,u=e.fileSpacePrefixes?{prefixes:e.fileSpacePrefixes,declarationPaths:[],warnings:[]}:(0,kee.discoverFileSpaceExclusions)(this.vault);for(let b of u.warnings)this.logger.warn(`FileSpace discovery: ${b}`);let f=[...RM(e.excludedFolders),...u.prefixes],d=f.length===0?t:t.filter(b=>!CM(b.path,f)),p=e.onProgress,h=e.progressIntervalFiles&&e.progressIntervalFiles>0?e.progressIntervalFiles:LI.INDEX_PROGRESS_INTERVAL,g=d.length,m=0;for(let b of d){if(m++,p&&m%h===0&&m<g)try{p(m,g)}catch{}try{let _=this.vault.getFrontmatter(b);if(!_){let w=this.vault.getFrontmatterParseFailure?.(b);if(w){if(s)throw new Error(`Unparseable frontmatter in "${b.path}": ${w.reason}`);i.push({path:b.path,reason:`Unparseable frontmatter: ${w.reason}`}),l++,this.logger.info(`Skipping file with unparseable frontmatter: ${b.path}`,{reason:w.reason});continue}}let S=_?this.validateExocortexAsset(_,b.basename):null;if(S){if(s)throw new Error(`Invariant violation in "${b.path}": ${S.message}`);i.push({path:b.path,reason:`Invariant violation: ${S.message}`}),o++,this.logger.info(`Skipping file with invariant violation: ${b.path}`,{code:S.code,property:S.property,reason:S.message});continue}let A=await this.convertNote(b);if(n.push(...A),e.onFileTriples)try{e.onFileTriples(b,A)}catch{}}catch(_){let S=_ instanceof Error?_.message:String(_);if(s)throw new Error(`Invalid IRI for file "${b.path}": ${S}`);i.push({path:b.path,reason:`Invalid IRI: ${S}`}),c++,this.logger.info(`Skipping file with invalid IRI: ${b.path}`,{reason:S})}}return o>0&&this.logger.warn(`Skipped ${o} file${o===1?"":"s"} with invariant violations during indexing (paths in developer console)`,{count:o}),l>0&&this.logger.warn(`Skipped ${l} file${l===1?"":"s"} with unparseable frontmatter during indexing (paths in developer console)`,{count:l}),c>0&&this.logger.warn(`Skipped ${c} file${c===1?"":"s"} with invalid IRI during indexing (paths in developer console)`,{count:c}),{triples:n,skippedFiles:i,summary:{total:d.length,indexed:d.length-i.length,skipped:i.length},fileSpaces:u}}static inferLabelFromBasename(e){return Zt.Namespace.fromPropertyKey(e)!==null?e:null}validateExocortexAsset(e,t){let n=a(d=>d==null?!0:typeof d=="string"?d.trim()==="":Array.isArray(d)?d.length===0||d.every(n):!1,"isEmpty");if(!("exo__Instance_class"in e||"exo__Asset_uid"in e))return null;let s=["exo__Asset_uid","exo__Instance_class"];for(let d of s){if(!(d in e))return{code:"MISSING_PROPERTY",property:d,message:`Required property "${d}" is missing`};if(n(e[d]))return{code:"EMPTY_PROPERTY",property:d,message:`Required property "${d}" is empty`}}let o=["ems__Effort_status","ems__Effort_parent","ems__Effort_lockedBy","ems__Effort_lockExpires","exo__Asset_updatedAt","ems__Effort_startTimestamp"];for(let d of o)if(d in e&&n(e[d]))return{code:"EMPTY_OPTIONAL_PROPERTY",property:d,message:`Optional property "${d}" is present but empty`};let c=e.exo__Instance_class,l=Array.isArray(c)?c:[c],u=null,f=!1;for(let d of l){if(typeof d!="string")continue;let p=this.removeQuotes(d),g=(this.extractWikilink(p)??p).trim(),m=g.indexOf("__");m>0&&Zt.Namespace.isValidPrefix(g.slice(0,m))&&/[\s()]/.test(g)?u||(u={candidate:d}):f=!0}return u&&!f?{code:"INVALID_INSTANCE_CLASS_IRI",property:"exo__Instance_class",message:`Invalid Instance_class IRI: "${u.candidate}"`}:null}async validateVault(){let e=this.vault.getAllFiles(),t=[];for(let n of e){let i=(0,DI.vaultPathToIRI)(n.path);As.IRI.isValidIRI(i)||t.push({path:n.path,reason:`Path "${n.path}" cannot be converted to a valid IRI`})}return t}notePathToIRI(e){return new As.IRI((0,DI.vaultPathToIRI)(`${this.subjectIriPrefix}${e}`))}synthesizeWikilinkTargetIRI(e){return new As.IRI((0,DI.vaultPathToIRI)(e))}isExocortexProperty(e){return Zt.Namespace.fromPropertyKey(e)!==null}propertyKeyToIRI(e){let t=Zt.Namespace.fromPropertyKey(e);if(!t)throw new Error(`Invalid property key: ${e}`);return t.namespace.term(t.localName)}emitTypeTripleForEnumInstance(e,t){let n=this.targetFrontmatter(t);if(!n)return;let i=n.exo__Instance_class,s=Array.isArray(i)?i[0]:i;if(typeof s!="string")return;let o=this.valueToClassURI(s);o instanceof As.IRI&&(this.pendingExtraTriples.push(new Lr.Triple(e,Zt.Namespace.RDF.term("type"),o)),this.pendingExtraTriples.push(new Lr.Triple(e,Zt.Namespace.EXO.term("Instance_class"),o)))}async valueToRDFObject(e,t,n){if(typeof e=="string"){let i=this.removeQuotes(e);if(n?.value.endsWith("#TokenInvocation_parameter"))return[new jn.Literal(i)];let s=this.extractWikilink(i);if(s){let o=this.vault.getFirstLinkpathDest(s,t.path);if(o){let l=this.notePathToIRI(o.path),u=s.includes("|")?s.split("|")[0]:s;if(this.isUUID(u)){let d=new jn.Literal(u);if(n?.value.endsWith("#Grounding_targetValueRef")||n?.value.endsWith("#Grounding_targetValueSubstitution")||n?.value.endsWith("#Grounding_targetClass")||n?.value.endsWith("#Grounding_type")||n?.value.endsWith("#PropertyDefault_value"))return[l];let h=this.expandClassValue(o.basename);if(h)return this.emitTypeTripleForEnumInstance(h,o),[h];let g=this.targetFrontmatter(o);if(g){let A=g.exo__Asset_label;if(typeof A=="string"){let w=this.expandClassValue(A);if(w)return this.emitTypeTripleForEnumInstance(w,o),[w]}}let m=n?.value.endsWith("#Asset_prototype")||n?.value.endsWith("/Asset_prototype"),_=((typeof process<"u"?process.env:void 0)?.EXOCORTEX_DUAL_STORAGE_PREDICATES??"").split(",").map(A=>A.trim()).filter(Boolean),S=_.length>0&&_.some(A=>n?.value.endsWith(`#${A}`));return m||S?[l,d]:[l]}let f=this.expandClassValue(o.basename);return f?(this.emitTypeTripleForEnumInstance(f,o),[f]):[l]}if(this.isClassReference(s)){let l=this.expandClassValue(s);if(l)return[l]}let c=s.includes("|")?s.split("|")[0]:s;return this.isUUID(c)?[this.synthesizeWikilinkTargetIRI(`${c}.md`)]:[new jn.Literal(i)]}if(this.isClassReference(i)){let o=this.expandClassValue(i);if(o)return[o]}return this.isISO8601DateTime(i)?[new jn.Literal(i,Zt.Namespace.XSD.term("dateTime"))]:[new jn.Literal(i)]}return typeof e=="boolean"?[new jn.Literal(e.toString())]:typeof e=="number"?[new jn.Literal(e.toString(),Number.isInteger(e)?Zt.Namespace.XSD.term("integer"):Zt.Namespace.XSD.term("decimal"))]:e instanceof Date?[new jn.Literal(e.toISOString(),Zt.Namespace.XSD.term("dateTime"))]:[new jn.Literal(String(e))]}isISO8601DateTime(e){return/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,3})?(Z|[+-]\d{2}:\d{2})?$/.test(e)}removeQuotes(e){let t=e.trim();return t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")?t.substring(1,t.length-1):e}extractWikilink(e){let t=e.match(/^\[\[([^\]]+)\]\]$/);if(!t)return null;let n=t[1];return n.includes("|")?n.split("|")[0]:n}extractWikilinkAlias(e){let t=e.match(/^\[\[([^\]]+)\]\]$/);if(!t)return null;let n=t[1],i=n.indexOf("|");return i>=0?n.substring(i+1).trim():null}targetFrontmatter(e){return this.vault.getFrontmatter(e)??this.preResolvedTargetFm.get(e.path)??null}async preResolveWikilinkTargets(e){let t=this.vault.getFrontmatterWithFallback?.bind(this.vault);if(t)for(let n of Object.values(e)){let i=Array.isArray(n)?n:n==null?[]:[n];for(let s of i){if(typeof s!="string")continue;let o=this.removeQuotes(s),c=this.extractWikilink(o);if(!c||!this.isUUID(c))continue;let l=this.vault.getFirstLinkpathDest(c,"");!l||this.preResolvedTargetFm.has(l.path)||this.vault.getFrontmatter(l)||this.preResolvedTargetFm.set(l.path,await t(l))}}}valueToClassURI(e){if(typeof e!="string")return new jn.Literal(String(e));let t=this.removeQuotes(e),i=this.extractWikilink(t)||t,s=this.expandClassValue(i);if(s)return s;let o=this.extractWikilinkAlias(t);if(o){let c=this.expandClassValue(o);if(c)return c}if(this.isUUID(i)){let c=this.vault.getFirstLinkpathDest(i,"");if(c){let l=this.expandClassValue(c.basename);if(l)return this.emitInstanceClassAsUid?this.notePathToIRI(c.path):l;let u=this.targetFrontmatter(c);if(u){let f=u.exo__Asset_label;if(typeof f=="string"){let d=this.expandClassValue(f);if(d)return this.emitInstanceClassAsUid?this.notePathToIRI(c.path):d}}return this.notePathToIRI(c.path)}}return new jn.Literal(t)}isClassReference(e){return/\s/.test(e)?!1:Zt.Namespace.fromPropertyKey(e)!==null}isUUID(e){return/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)}expandClassValue(e){let t=this.removeQuotes(e),n=Zt.Namespace.fromPropertyKey(t);return!n||/[\s()]/.test(n.localName)?null:n.namespace.term(n.localName)}extractBodyContent(e){let t=e.charCodeAt(0)===65279?e.slice(1):e,n=/^---\r?\n[\s\S]*?\r?\n---\r?\n?/;return t.replace(n,"")}extractBodyWikilinks(e){let t=new Set,n,i=new RegExp(this.BODY_WIKILINK_PATTERN.source,"g");for(;(n=i.exec(e))!==null;)n[1]&&!IM(n[1].trim())&&t.add(n[1]);return Array.from(t)}async convertBodyWikilinks(e,t){let n=[];try{let i=await this.vault.read(e),s=this.extractBodyContent(i),o=this.extractBodyWikilinks(s),c=Zt.Namespace.EXO.term("Asset_bodyLink");for(let l of o){let u=this.vault.getFirstLinkpathDest(l,e.path);if(u){let f=this.notePathToIRI(u.path);n.push(new Lr.Triple(t,c,f))}else if(this.isClassReference(l)){let f=this.expandClassValue(l);f?n.push(new Lr.Triple(t,c,f)):n.push(new Lr.Triple(t,c,new jn.Literal(l)))}else n.push(new Lr.Triple(t,c,new jn.Literal(l)))}}catch{}return n}};kt.NoteToRDFConverter=Zl;Zl.INDEX_PROGRESS_INTERVAL=200;Zl.SkippedFileInfo=class{constructor(r,e){this.path=r,this.reason=e}};Zl.VaultValidationResult=class{constructor(r,e,t){this.triples=r,this.skippedFiles=e,this.summary=t}};Zl.VaultValidationOptions=class{constructor(r=!1){this.strict=r}};kt.NoteToRDFConverter=Zl=LI=Fee([(0,FI.injectable)(),vM(0,(0,FI.inject)(AM.DI_TOKENS.IVaultAdapter)),vM(1,(0,FI.inject)(AM.DI_TOKENS.ILogger)),Dee("design:paramtypes",[Object,Object,Object])],Zl)});var tu=T(n_=>{"use strict";Object.defineProperty(n_,"__esModule",{value:!0});n_.FrontmatterService=void 0;var xM=Yb(),r_=gc(),Jf=eu(),Uee=At(),Zf=class r{static{a(this,"FrontmatterService")}parse(e){let t=e.match(r.FRONTMATTER_REGEX);return t?{exists:!0,content:t[1],originalContent:e}:{exists:!1,content:"",originalContent:e}}static splitFlowSequence(e){let t=[],n="",i=null,s=0;for(let c=0;c<e.length;c++){let l=e[c];if(i!==null){if(n+=l,l==="\\"&&i==='"'){n+=e[++c]??"";continue}l===i&&(i=null);continue}if(l==='"'||l==="'"){i=l,n+=l;continue}if(l==="["||l==="{"){s++,n+=l;continue}if(l==="]"||l==="}"){if(s--,s<0)return null;n+=l;continue}if(l===","&&s===0){t.push(n.trim()),n="";continue}n+=l}if(i!==null||s!==0)return null;let o=n.trim();return o!==""&&t.push(o),t}parseObject(e){let t=this.parse(e);if(!t.exists)return null;let n={},i=t.content.split(/\r?\n/),s=null,o=null,c=[],l=null,u=a(()=>{s!==null&&o!==null&&(n[s]=o),s=null,o=null,c=[]},"flushArray");for(let f of i){if(l!==null){if(f.trim()===""){c.push(f);continue}if(/^[ \t]/.test(f)){n[l]=[n[l],...c,f].join(`
119
+ ${n}}`}generateValuesTerm(e){if(e.type==="iri")return`<${e.value}>`;let n=`"${e.value.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`;return e.language?n+=`@${e.language}`:e.datatype&&(n+=`^^<${e.datatype}>`),n}generateExpression(e){switch(e.type){case"variable":return`?${e.name}`;case"literal":return typeof e.value=="string"?`"${e.value.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`:typeof e.value=="boolean"?e.value?"true":"false":String(e.value);case"comparison":return`(${this.generateExpression(e.left)} ${e.operator} ${this.generateExpression(e.right)})`;case"logical":return e.operator==="!"?`!(${this.generateExpression(e.operands[0])})`:`(${e.operands.map(t=>this.generateExpression(t)).join(` ${e.operator} `)})`;case"arithmetic":return`(${this.generateExpression(e.left)} ${e.operator} ${this.generateExpression(e.right)})`;case"function":return`${e.function.toUpperCase()}(${e.args.map(t=>this.generateExpression(t)).join(", ")})`;case"functionCall":return`${(typeof e.function=="string"?e.function:e.function.value).toUpperCase()}(${e.args.map(n=>this.generateExpression(n)).join(", ")})`;case"exists":return`${e.negated?"NOT EXISTS":"EXISTS"} { ${this.generateWhereClause(e.pattern,0)} }`;case"in":{let t=this.generateExpression(e.expression),n=e.list.map(i=>this.generateExpression(i)).join(", ");return e.negated?`${t} NOT IN (${n})`:`${t} IN (${n})`}default:throw new zf(`Unknown expression type: ${e.type}`)}}collectVariablesFromOperation(e,t){switch(e.type){case"bgp":for(let n of e.triples)this.collectVariablesFromTriple(n,t);break;case"filter":this.collectVariablesFromOperation(e.input,t),this.collectVariablesFromExpression(e.expression,t);break;case"join":case"leftjoin":case"union":case"minus":this.collectVariablesFromOperation(e.left,t),this.collectVariablesFromOperation(e.right,t);break;case"values":for(let n of e.variables)t.add(n);break;case"project":for(let n of e.variables)t.add(n);this.collectVariablesFromOperation(e.input,t);break;case"extend":t.add(e.variable),this.collectVariablesFromOperation(e.input,t);break;case"orderby":case"slice":case"distinct":case"reduced":this.collectVariablesFromOperation(e.input,t);break;case"group":for(let n of e.variables)t.add(n);for(let n of e.aggregates)t.add(n.variable);this.collectVariablesFromOperation(e.input,t);break;case"subquery":this.collectVariablesFromOperation(e.query,t);break}}collectVariablesFromTriple(e,t){e.subject.type==="variable"&&t.add(e.subject.value),"type"in e.predicate&&e.predicate.type==="variable"&&t.add(e.predicate.value),e.object.type==="variable"&&t.add(e.object.value)}collectVariablesFromExpression(e,t){switch(e.type){case"variable":t.add(e.name);break;case"comparison":case"arithmetic":this.collectVariablesFromExpression(e.left,t),this.collectVariablesFromExpression(e.right,t);break;case"logical":for(let n of e.operands)this.collectVariablesFromExpression(n,t);break;case"function":case"functionCall":for(let n of e.args)this.collectVariablesFromExpression(n,t);break;case"exists":this.collectVariablesFromOperation(e.pattern,t);break;case"in":this.collectVariablesFromExpression(e.expression,t);for(let n of e.list)this.collectVariablesFromExpression(n,t);break}}};Hf.SPARQLGenerator=yI});var Yf=T(Pi=>{"use strict";var eZ=Pi&&Pi.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var i=Object.getOwnPropertyDescriptor(e,t);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:a(function(){return e[t]},"get")}),Object.defineProperty(r,n,i)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),tZ=Pi&&Pi.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),tM=Pi&&Pi.__importStar||(function(){var r=a(function(e){return r=Object.getOwnPropertyNames||function(t){var n=[];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[n.length]=i);return n},r(e)},"ownKeys");return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n=r(e),i=0;i<n.length;i++)n[i]!=="default"&&eZ(t,e,n[i]);return tZ(t,e),t}})();Object.defineProperty(Pi,"__esModule",{value:!0});Pi.QueryExecutor=Pi.ExoQLQueryExecutor=Pi.QueryExecutorError=void 0;var rZ=$A(),nZ=Ab(),iZ=iI(),sZ=oI(),oZ=Uk(),aZ=Vk(),cZ=zk(),lZ=hI(),uZ=Kk(),fZ=Xk(),dZ=Zk(),pZ=eM(),hZ=Le(),mZ=He(),gZ=bb(),En="http://www.w3.org/2001/XMLSchema#",yZ=new Set([`${En}integer`,`${En}decimal`,`${En}float`,`${En}double`,`${En}nonPositiveInteger`,`${En}negativeInteger`,`${En}long`,`${En}int`,`${En}short`,`${En}byte`,`${En}nonNegativeInteger`,`${En}unsignedLong`,`${En}unsignedInt`,`${En}unsignedShort`,`${En}unsignedByte`,`${En}positiveInteger`]),Kf=class extends Error{static{a(this,"QueryExecutorError")}constructor(e,t){super(e,t?{cause:t}:void 0),this.name="QueryExecutorError"}};Pi.QueryExecutorError=Kf;var Db=class{static{a(this,"ExoQLQueryExecutor")}constructor(e,t={}){let n=t.resolveClassHierarchy===!1?e:new dZ.ClassHierarchyResolvingStore(e);this.tripleStore=n,this.bgpExecutor=new rZ.BGPExecutor(n),this.filterExecutor=new nZ.FilterExecutor,this.optionalExecutor=new iZ.OptionalExecutor,this.unionExecutor=new sZ.UnionExecutor,this.minusExecutor=new oZ.MinusExecutor,this.valuesExecutor=new aZ.ValuesExecutor,this.aggregateExecutor=new cZ.AggregateExecutor,this.constructExecutor=new lZ.ConstructExecutor,this.serviceExecutor=new uZ.ServiceExecutor(t.serviceConfig),this.graphExecutor=new fZ.GraphExecutor(n),this.sparqlGenerator=new pZ.SPARQLGenerator,this.filterExecutor.setExistsEvaluator(async(i,s)=>this.evaluateExistsPattern(i,s)),this.filterExecutor.setTripleStore(n)}async evaluateExistsPattern(e,t){let n=this.substituteVariables(e,t);for await(let i of this.execute(n))if(t.merge(i)!==null)return!0;return!1}async executeAll(e){let t=[];for await(let n of this.execute(e))t.push(n);return t}async*execute(e){switch(e.type){case"bgp":yield*this.executeBGP(e);break;case"filter":yield*this.executeFilter(e);break;case"join":yield*this.executeJoin(e);break;case"leftjoin":yield*this.executeLeftJoin(e);break;case"union":yield*this.executeUnion(e);break;case"minus":yield*this.executeMinus(e);break;case"values":yield*this.executeValues(e);break;case"project":yield*this.executeProject(e);break;case"orderby":yield*this.executeOrderBy(e);break;case"slice":yield*this.executeSlice(e);break;case"distinct":yield*this.executeDistinct(e);break;case"reduced":yield*this.executeReduced(e);break;case"group":yield*this.executeGroup(e);break;case"extend":yield*this.executeExtend(e);break;case"subquery":yield*this.executeSubquery(e);break;case"lateraljoin":yield*this.executeLateralJoin(e);break;case"service":yield*this.executeService(e);break;case"graph":yield*this.executeGraph(e);break;default:throw new Kf(`Unknown operation type: ${e.type}`)}}async*executeBGP(e){yield*this.bgpExecutor.execute(e)}async*executeFilter(e){let t=this.execute(e.input);yield*this.filterExecutor.execute(e,t)}async*executeJoin(e){let t=[];for await(let o of this.execute(e.left))t.push(o);if(t.length===0)return;let n=new Set;for(let o of t)for(let c of o.variables())n.add(c);let i=this.collectOperationVariables(e.right);if([...n].some(o=>i.has(o)))for(let o of t){let c=this.substituteVariables(e.right,o);for await(let l of this.execute(c)){let u=o.merge(l);u!==null&&(yield u)}}else{let o=[];for await(let c of this.execute(e.right))o.push(c);for(let c of t)for(let l of o){let u=c.merge(l);u!==null&&(yield u)}}}async*executeLeftJoin(e){let t=[];for await(let o of this.execute(e.left))t.push(o);let n=[];for await(let o of this.execute(e.right))n.push(o);async function*i(){for(let o of t)yield o}a(i,"leftGen");async function*s(){for(let o of n)yield o}a(s,"rightGen"),yield*this.optionalExecutor.execute(i(),s())}async*executeUnion(e){let t=[];for await(let o of this.execute(e.left))t.push(o);let n=[];for await(let o of this.execute(e.right))n.push(o);async function*i(){for(let o of t)yield o}a(i,"leftGen");async function*s(){for(let o of n)yield o}a(s,"rightGen"),yield*this.unionExecutor.execute(i(),s())}async*executeMinus(e){let t=[];for await(let o of this.execute(e.left))t.push(o);let n=[];for await(let o of this.execute(e.right))n.push(o);async function*i(){for(let o of t)yield o}a(i,"leftGen");async function*s(){for(let o of n)yield o}a(s,"rightGen"),yield*this.minusExecutor.execute(i(),s())}async*executeValues(e){yield*this.valuesExecutor.execute(e)}async*executeProject(e){let{SolutionMapping:t}=await Promise.resolve().then(()=>tM(ha())),n=new Set(e.variables);for await(let i of this.execute(e.input)){let s=new t;for(let o of i.variables())if(n.has(o)){let c=i.get(o);c!==void 0&&s.set(o,c)}yield s}}async*executeOrderBy(e){let t=[];for await(let n of this.execute(e.input))t.push(n);t.sort((n,i)=>{for(let s of e.comparators){let o=this.getExpressionValue(s.expression,n),c=this.getExpressionValue(s.expression,i),l=0;if(o===void 0&&c===void 0?l=0:o===void 0?l=1:c===void 0?l=-1:typeof o=="number"&&typeof c=="number"?l=o-c:l=String(o).localeCompare(String(c)),s.descending&&(l=-l),l!==0)return l}return 0});for(let n of t)yield n}async*executeSlice(e){let t=0,n=e.offset??0,i=e.limit;for await(let s of this.execute(e.input)){if(t>=n){if(i!==void 0&&t-n>=i)break;yield s}t++}}async*executeDistinct(e){let t=new Set;for await(let n of this.execute(e.input)){let i=this.getSolutionKey(n);t.has(i)||(t.add(i),yield n)}}async*executeReduced(e){let t=new Set;for await(let n of this.execute(e.input)){let i=this.getSolutionKey(n);t.has(i)||(t.add(i),yield n)}}async*executeGroup(e){let t=[];for await(let i of this.execute(e.input))t.push(i);let n=this.aggregateExecutor.execute(e,t);if(e.having&&e.having.length>0)for(let i of n)e.having.every(o=>this.filterExecutor.evaluateExpression(o,i)===!0)&&(yield i);else for(let i of n)yield i}async*executeExtend(e){let t=e.expression.type!=="aggregate"&&this.filterExecutor.expressionContainsExists(e.expression);for await(let n of this.execute(e.input)){let i=n.clone(),s=t?await this.evaluateExtendExpressionAsync(e.expression,n):this.evaluateExtendExpression(e.expression,n);s!==void 0&&i.set(e.variable,s),yield i}}async*executeSubquery(e){yield*this.execute(e.query)}async*executeLateralJoin(e){let t=[];for await(let n of this.execute(e.left))t.push(n);for(let n of t){let i=this.substituteVariables(e.right,n);for await(let s of this.execute(i)){let o=n.merge(s);o!==null&&(yield o)}}}substituteVariables(e,t){let n=JSON.parse(JSON.stringify(e));return this.substituteInOperation(n,t)}substituteInOperation(e,t){if(!e||typeof e!="object")return e;let n=e;return e.type==="bgp"&&e.triples?(e.triples=e.triples.map(i=>this.substituteInTriple(i,t)),e):(n.input&&(n.input=this.substituteInOperation(n.input,t)),n.left&&(n.left=this.substituteInOperation(n.left,t)),n.right&&(n.right=this.substituteInOperation(n.right,t)),n.pattern&&(n.pattern=this.substituteInOperation(n.pattern,t)),n.query&&(n.query=this.substituteInOperation(n.query,t)),n.where&&(n.where=this.substituteInOperation(n.where,t)),n.expression&&this.substituteInExpression(n.expression,t),e)}substituteInExpression(e,t){if(!(!e||typeof e!="object")){if(e.type==="exists"&&e.pattern&&(e.pattern=this.substituteInOperation(e.pattern,t)),e.type==="variable"&&typeof e.name=="string"){let n=this.termToAlgebraNode(t.get(e.name));if(n!==null){delete e.name;for(let[i,s]of Object.entries(n))e[i]=s}}if(e.left&&this.substituteInExpression(e.left,t),e.right&&this.substituteInExpression(e.right,t),e.operands)for(let n of e.operands)this.substituteInExpression(n,t);if(e.args)for(let n of e.args)this.substituteInExpression(n,t);if(e.expression&&this.substituteInExpression(e.expression,t),e.list)for(let n of e.list)this.substituteInExpression(n,t)}}substituteInTriple(e,t){return{subject:this.substituteInTripleElement(e.subject,t),predicate:e.predicate,object:this.substituteInTripleElement(e.object,t)}}substituteInTripleElement(e,t){if(e&&e.type==="variable"){let n=this.termToAlgebraNode(t.get(e.value));if(n!==null)return n}return e}termToAlgebraNode(e){if(e==null)return null;let t=e;return e instanceof hZ.IRI||t.termType==="NamedNode"?{type:"iri",value:e.value}:t.termType==="Literal"||typeof t.value=="string"?{type:"literal",value:t.value,datatype:t.datatype?.value??t._datatype?.value,language:t.language??t._language}:null}async*executeService(e){yield*this.serviceExecutor.execute(e,t=>this.sparqlGenerator.generateSelect(t))}async*executeGraph(e){let t=async function*(n,i){let s=this.currentGraphContext;this.currentGraphContext=i;try{n.type==="bgp"&&i&&this.tripleStore.matchInGraph?yield*this.executeBGPInGraph(n,i):yield*this.execute(n)}finally{this.currentGraphContext=s}}.bind(this);yield*this.graphExecutor.execute(e,t)}async*executeBGPInGraph(e,t){if(e.triples.length===0){let{SolutionMapping:n}=await Promise.resolve().then(()=>tM(ha()));yield new n;return}yield*this.bgpExecutor.executeInGraph(e,t)}evaluateExtendExpression(e,t){if(e.type!=="aggregate")try{return this.filterExecutor.evaluateExpression(e,t)}catch{return}}async evaluateExtendExpressionAsync(e,t){if(e.type!=="aggregate")try{return await this.filterExecutor.evaluateExpressionAsync(e,t)}catch{return}}getExpressionValue(e,t){if(e.type==="variable"){let n=t.get(e.name);if(!n)return;if(n instanceof mZ.Literal){let i=n.datatype?.value;if(i===`${En}dayTimeDuration`)try{return gZ.DateTimeFunctions.parseDayTimeDuration(n.value)}catch{return n.value}if(i&&yZ.has(i)){let s=parseFloat(n.value);if(!Number.isNaN(s))return s}return n.value}return n.value??n.id??String(n)}if(e.type==="literal")return e.value}collectOperationVariables(e){let t=new Set;return this.collectVarsFromOperation(e,t),t}collectVarsFromOperation(e,t){if(!e||typeof e!="object")return;let n=e;if(n.type==="bgp"&&n.triples)for(let i of n.triples)this.collectVarsFromElement(i.subject,t),i.predicate?.type!=="path"&&this.collectVarsFromElement(i.predicate,t),this.collectVarsFromElement(i.object,t);if(n.type==="values"&&n.variables)for(let i of n.variables)t.add(i);n.expression&&this.collectVarsFromExpressionTree(n.expression,t),n.type==="extend"&&n.variable&&t.add(n.variable),n.input&&this.collectVarsFromOperation(n.input,t),n.left&&this.collectVarsFromOperation(n.left,t),n.right&&this.collectVarsFromOperation(n.right,t),n.pattern&&this.collectVarsFromOperation(n.pattern,t),n.query&&this.collectVarsFromOperation(n.query,t),n.where&&this.collectVarsFromOperation(n.where,t)}collectVarsFromElement(e,t){if(!e||typeof e!="object")return;let n=e;n.type==="variable"&&t.add(n.value),n.type==="quoted"&&(this.collectVarsFromElement(n.subject,t),this.collectVarsFromElement(n.predicate,t),this.collectVarsFromElement(n.object,t))}collectVarsFromExpressionTree(e,t){if(!e||typeof e!="object")return;let n=e;if(n.type==="variable"&&n.name&&t.add(n.name),n.type==="exists"&&n.pattern&&this.collectVarsFromOperation(n.pattern,t),n.left&&this.collectVarsFromExpressionTree(n.left,t),n.right&&this.collectVarsFromExpressionTree(n.right,t),n.operands)for(let i of n.operands)this.collectVarsFromExpressionTree(i,t);if(n.args)for(let i of n.args)this.collectVarsFromExpressionTree(i,t);if(n.expression&&this.collectVarsFromExpressionTree(n.expression,t),n.list)for(let i of n.list)this.collectVarsFromExpressionTree(i,t)}getSolutionKey(e){let t=e.toJSON();return Object.keys(t).sort().map(i=>`${i}=${t[i]}`).join("|")}isConstructQuery(e){return e.type==="construct"}async executeConstruct(e){if(e.type!=="construct")throw new Kf("executeConstruct requires a CONSTRUCT operation");let t=await this.executeAll(e.where);return this.constructExecutor.execute(e.template,t)}isAskQuery(e){return e.type==="ask"}async executeAsk(e){if(e.type!=="ask")throw new Kf("executeAsk requires an ASK operation");for await(let t of this.execute(e.where))return!0;return!1}};Pi.ExoQLQueryExecutor=Db;Pi.QueryExecutor=Db});var dM=T(ma=>{"use strict";var bZ=ma&&ma.__decorate||function(r,e,t,n){var i=arguments.length,s=i<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(r,e,t,n);else for(var c=r.length-1;c>=0;c--)(o=r[c])&&(s=(i<3?o(s):i>3?o(e,t,s):o(e,t))||s);return i>3&&s&&Object.defineProperty(e,t,s),s},_Z=ma&&ma.__metadata||function(r,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,e)};Object.defineProperty(ma,"__esModule",{value:!0});ma.CommandResolver=void 0;var SZ=lt(),wZ=mh(),EZ=gc(),gr=Le(),cr=He(),X=At(),rM=uc(),nM=Xp(),vZ=Bl(),iM=yc(),sM=P0(),Xf=zv(),oM=WN(),TZ=Tf(),AZ=Of(),IZ=Yf(),Jl=10,Lb="exo__Asset",RZ=Jl+1,aM="08cec529-90eb-4d43-88de-ceecccea12b0",CZ=X.Namespace.EXOCMD.term("SubstitutionToken").value,cM=new Set(["today","tomorrow","todayStart","targetFolder","target","randomUUIDv4","nowTimestamp","nowDate","nowYear","nowMonth","userInputLabel","userInput","targetProperty","targetRefProperty","labelAsArray","groundingTargetClass","createdInstance","targetClassSelf"]);function xZ(r,e){return`__SUBSTITUTE__${r}__${e}__`}a(xZ,"buildSubstitutionMarker");function OZ(r,e,t){let n=(0,vZ.utf8ToBase64)(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"");return`__SUBSTITUTE_P__${r}__${e}__${n}__`}a(OZ,"buildParameterisedMarker");var lM="3f28af98-c031-4718-8ba2-44ad0b012c52",PZ=X.Namespace.EXOCMD.term("TokenInvocation").value,uM="29e2c8f8-2d27-4e58-b467-2e85d46f8122",fM="universal-default-template",bI=class{static{a(this,"CommandResolver")}warnOnce(e){this._warnedMessages.has(e)||(this._warnedMessages.add(e),this.logger.warn(e))}clearUniversalCache(){this._universalCacheReady=!1,this._universalCacheValue=null}constructor(e,t=wZ.NullLogger){this.tripleStore=e,this.logger=t,this.cache=new Map,this.multiCache=new Map,this._ancestorDepthCache=new Map,this._legacyPropertyDefaultsWarnedGroundings=new Set,this._fallbackWarnedKeys=new Set,this._ambiguousRefWarnedKeys=new Set,this._warnedMessages=new Set,this._universalCacheReady=!1,this._universalCacheValue=null}async resolveForAssetMulti(e,t,n){if(t.length===0)return[];let i=[...t].sort().join(","),s=`${e}::${i}::${n??""}`,o=this.multiCache.get(s);if(o)return o;let c=n?await this.expandPrototypeChain(n):void 0,l=await this.expandClassHierarchy(t),u=new Map;for(let[h,g]of l){let m=await this.resolveForAsset(e,h,c);for(let b of m){let _=this.getBindingPriority(b.binding)===2?g:0,S=u.get(b.binding.id);(!S||_<S.depth)&&u.set(b.binding.id,{rc:b,depth:_})}}let f=new Set;for(let{rc:h}of u.values())if(h.binding.overrides)for(let g of h.binding.overrides)f.add(g);let d=Array.from(u.entries()).filter(([h])=>!f.has(h)).map(([,h])=>h);d.sort((h,g)=>{let m=this.getBindingPriority(h.rc.binding),b=this.getBindingPriority(g.rc.binding);return m!==b?m-b:h.depth!==g.depth?h.depth-g.depth:(h.rc.binding.order??100)-(g.rc.binding.order??100)});let p=d.map(h=>h.rc);return this.multiCache.set(s,p),p}async expandClassHierarchy(e){let t=new Map;for(let c of e){if(c===Lb){t.set(c,new Set);continue}let l=[];try{l=await this.getClassAncestors(c)}catch{l=[]}t.set(c,new Set(l))}let n=a(c=>{for(let l of e)if(l!==c&&t.get(l)?.has(c)&&!t.get(c)?.has(l))return!0;return!1},"isAncestorOfSibling"),i=e.filter(c=>!n(c)),s=new Map,o=a((c,l)=>{let u=s.get(c);(u===void 0||l<u)&&s.set(c,l)},"setMin");for(let c of i){if(o(c,0),this.looksLikeUUID(c))try{let u=await this.resolveLabelByUID(c);u&&o(u,0)}catch{}if(c===Lb)continue;let l=[];try{l=await this.getClassAncestorsWithDepth(c)}catch{l=[]}for(let{ref:u,depth:f}of l)o(u,f)}return s.has(Lb)||s.set(Lb,RZ),s}async resolveForAsset(e,t,n){let i=typeof n=="string"?`s:${n}`:n?`c:${n.join("\0")}`:"",s=`${e}:${t}:${i}`,o=this.cache.get(s);if(o)return o;let c=typeof n=="string"?await this.expandPrototypeChain(n):n,l=await this.findBindings(t,c,e),u=[];for(let f of l){let d=await this.loadCommand(f.commandRef,{targetClass:f.targetClass});if(!d)continue;let p=f.precondition?{...d,precondition:f.precondition}:d;u.push({command:p,binding:f})}return u.sort((f,d)=>{let p=this.getBindingPriority(f.binding),h=this.getBindingPriority(d.binding);return p!==h?p-h:(f.binding.order??100)-(d.binding.order??100)}),this.cache.set(s,u),u}async loadCommand(e,t){let n=await this.findSubjectByUID(e);if(!n||(await this.tripleStore.match(n,X.Namespace.RDF.term("type"),X.Namespace.EXOCMD.term("Command"))).length===0)return null;let s=await this.readAssetLabel(n)??"Unknown Command",o=await this.getLiteralValue(n,X.Namespace.EXOCMD.term("Command_labelTemplate")),c=await this.getLiteralValue(n,X.Namespace.EXOCMD.term("Command_icon")),l=await this.getLiteralValue(n,X.Namespace.EXOCMD.term("Command_confirmMessage")),u=await this.getLiteralValue(n,X.Namespace.EXOCMD.term("Command_successMessage")),f=await this.getLiteralValue(n,X.Namespace.EXOCMD.term("Command_category")),d=await this.getLiteralValue(n,X.Namespace.EXOCMD.term("Command_openInSameTab")),p=d!==null&&String(d).trim().toLowerCase()==="true",h=await this.loadLinkedPrecondition(n),g=await this.loadLinkedGrounding(n,0,t);return g?{id:e,name:s,labelTemplate:o??void 0,icon:c??void 0,precondition:h??void 0,grounding:g,confirmMessage:l??void 0,successMessage:u??void 0,category:f??void 0,openInSameTab:p||void 0}:null}async findBindings(e,t,n){let i=typeof t=="string"?await this.expandPrototypeChain(t):t,s=await this.tripleStore.match(void 0,X.Namespace.RDF.term("type"),X.Namespace.EXOCMD.term("CommandBinding")),o=[];for(let c of s){let l=c.subject,u=await this.loadBindingDefinition(l);u&&this.bindingMatches(u,e,i,n)&&o.push(u)}return o}async findPaletteEnabledCommands(){let e=await this.tripleStore.match(void 0,X.Namespace.RDF.term("type"),X.Namespace.EXOCMD.term("Command")),t=[],n=new Set;for(let i of e){let s=i.subject;if((await this.getLiteralValue(s,X.Namespace.EXOCMD.term("Command_paletteEnabled")))?.toLowerCase()!=="true")continue;let c=await this.getLiteralValue(s,X.Namespace.EXO.term("Asset_uid"));if(!c){this.warnOnce(`[CommandResolver] paletteEnabled command at ${s.value} has no exo__Asset_uid \u2014 skipped`);continue}let l=await this.loadCommand(c);if(!l){this.warnOnce(`[CommandResolver] paletteEnabled command ${c} could not be loaded (missing grounding?) \u2014 skipped`);continue}let u=await this.getLiteralValue(s,X.Namespace.EXOCMD.term("Command_paletteId")),f=await this.getLiteralValue(s,X.Namespace.EXOCMD.term("Command_cliName")),d=u??f??c;if(n.has(d)){this.warnOnce(`[CommandResolver] duplicate paletteId "${d}" \u2014 first registration wins, dropping ${c}`);continue}n.add(d),t.push({command:l,paletteId:d})}return t}invalidateCache(){this.cache.clear(),this.multiCache.clear(),this._ancestorDepthCache.clear(),this.clearUniversalCache()}async resolveLabel(e,t){if(!e.labelTemplate)return e.name;let n=e.labelTemplate,i=this.extractPlaceholders(e.labelTemplate);for(let{full:s,body:o}of i){let c=await this.evaluateSelectSnippet(o,t);n=n.replace(s,c)}return n}extractPlaceholders(e){let t=[],n=0;for(;n<e.length;)if(e[n]==="{"){let i=1,s=n+1;for(;s<e.length&&i>0;)e[s]==="{"?i++:e[s]==="}"&&i--,s++;if(i===0){let o=e.slice(n,s),c=e.slice(n+1,s-1);t.push({full:o,body:c})}n=s}else n++;return t}async evaluateSelectSnippet(e,t){try{let n=e.replace(/\$target/g,`<${t}>`),s=new TZ.ExoQLParser().parse(n),c=new AZ.ExoQLAlgebraTranslator().translate(s),u=await new IZ.ExoQLQueryExecutor(this.tripleStore).executeAll(c);if(u.length===0)return"";let f=u[0],d=f.variables();if(d.length===0)return"";let p=f.get(d[0]);return p?p instanceof cr.Literal||p instanceof gr.IRI?p.value:String(p):""}catch{return""}}async loadBindingDefinition(e){let t=await this.getLiteralValue(e,X.Namespace.EXO.term("Asset_uid"));if(!t)return null;let n=await this.readAssetLabel(e)??"",i=await this.getLinkedUID(e,X.Namespace.EXOCMD.term("CommandBinding_command"));if(!i)return null;let s=await this.getLinkedValue(e,X.Namespace.EXOCMD.term("CommandBinding_targetClass")),o=await this.getLinkedValue(e,X.Namespace.EXOCMD.term("CommandBinding_targetPrototype")),c=await this.getLinkedValue(e,X.Namespace.EXOCMD.term("CommandBinding_targetAsset"));if(!s&&!o&&!c)return null;let l=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("CommandBinding_position")),u=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("CommandBinding_order")),f=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("CommandBinding_variant")),d=f!==null?this.coerceVariant(f,t):void 0,p=await this.loadLinkedPreconditionFromProperty(e,X.Namespace.EXOCMD.term("CommandBinding_precondition")),h=await this.loadLinkedStyle(e,t),g=await this.getLinkedUIDs(e,X.Namespace.EXOCMD.term("CommandBinding_overrides"));return{id:t,label:n,commandRef:i,targetClass:s??void 0,targetPrototype:o??void 0,targetAsset:c??void 0,position:l??void 0,order:u?parseInt(u,10):void 0,variant:d,precondition:p??void 0,style:h??void 0,overrides:g.length>0?g:void 0}}async loadLinkedStyle(e,t){let n=await this.tripleStore.match(e,X.Namespace.EXOCMD.term("CommandBinding_style"),void 0);if(n.length>0){let s=n[0].object,o=null;if(s instanceof gr.IRI)o=await this.resolveRefIriSubject(s);else if(s instanceof cr.Literal){let c=this.normalizeWikilink(s.value);o=await this.findSubjectByUID(c)}if(o){let c=await this.loadStyleAsset(o);if(c)return c}this.warnOnce(this.capWarning(`CommandBinding ${t}: style reference unresolved, falling back to inline variant`))}let i=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("CommandBinding_variant"));if(i!==null){let s=this.coerceVariant(i,t);if(s!==void 0)return{id:`inline:${t}`,label:"",variant:s,inline:!0}}return null}async loadStyleAsset(e){let t=await this.getLiteralValue(e,X.Namespace.EXO.term("Asset_uid"));if(!t)return null;let n=await this.readAssetLabel(e)??"",i=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("CommandBindingStyle_variant")),s=i!==null?this.coerceVariant(i,t):void 0,o=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("CommandBindingStyle_showIcon")),c=this.coerceBoolean(o),l=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("CommandBindingStyle_labelClass")),u=l!==null?this.coerceLabelClass(l,t):void 0,f=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("CommandBindingStyle_ariaLabel")),d=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("CommandBindingStyle_tooltip")),p=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("CommandBindingStyle_keyboardShortcut")),h=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("CommandBindingStyle_source")),g=h!==null?this.coerceStyleSource(h,t):void 0;return{id:t,label:n,variant:s,showIcon:c,labelClass:u,ariaLabel:f??void 0,tooltip:d??void 0,keyboardShortcut:p??void 0,source:g,inline:!1}}coerceVariant(e,t){if(e==null)return;let n=String(e).trim().toLowerCase();if(n!==""){if(Xf.COMMAND_VARIANT_VALUES.includes(n))return n;this.warnOnce(this.capWarning(`CommandBindingStyle variant "${n}" not in whitelist [${Xf.COMMAND_VARIANT_VALUES.join(",")}]; dropped (asset ${t})`))}}coerceLabelClass(e,t){if(e==null)return;let n=String(e).trim().toLowerCase();if(n!==""){if(Xf.LABEL_CLASS_VALUES.includes(n))return n;this.warnOnce(this.capWarning(`CommandBindingStyle labelClass "${n}" not in whitelist [${Xf.LABEL_CLASS_VALUES.join(",")}]; dropped (asset ${t})`))}}coerceStyleSource(e,t){if(e==null)return;let n=String(e).trim().toLowerCase();if(n!==""){if(Xf.STYLE_SOURCE_VALUES.includes(n))return n;this.warnOnce(this.capWarning(`CommandBindingStyle source "${n}" not in whitelist [${Xf.STYLE_SOURCE_VALUES.join(",")}]; dropped (asset ${t})`))}}coerceBoolean(e){if(e===null)return;let t=e.trim().toLowerCase();if(t==="true")return!0;if(t==="false")return!1}capWarning(e){return e.length<=200?e:e.slice(0,197)+"..."}bindingMatches(e,t,n,i){if(e.targetAsset&&i&&this.matchesReference(e.targetAsset,i))return!0;if(e.targetPrototype&&n){for(let s of n)if(this.matchesReference(e.targetPrototype,s))return!0}return!!(e.targetClass&&t&&this.matchesReference(e.targetClass,t))}matchesReference(e,t){let n=this.normalizeWikilink(e),i=this.normalizeWikilink(t);if(n===i)return!0;let s=this.extractPathBasename(i);if(s&&s===n)return!0;let o=this.extractPathBasename(n);if(o&&o===i)return!0;let c=this.extractAlias(t);if(c&&n===c)return!0;let l=this.extractAlias(e);return!!(l&&l===i)}extractPathBasename(e){let t=e.match(/\/([^/]+)\.md$/);return t?t[1]:null}extractAlias(e){let t=e.replace(/["'[\]]/g,"").trim(),n=t.indexOf("|");return n>=0?t.substring(n+1).trim():null}getBindingPriority(e){return e.targetAsset?0:e.targetPrototype?1:2}async loadLinkedPrecondition(e){return this.loadLinkedPreconditionFromProperty(e,X.Namespace.EXOCMD.term("Command_precondition"))}async loadLinkedPreconditionFromProperty(e,t){let n=await this.tripleStore.match(e,t,void 0);if(n.length===0)return null;let i=await this.resolvePreconditionRef(n[0].object);return i?this.loadPreconditionSubject(i,new Set,0):null}async resolvePreconditionRef(e){if(e instanceof gr.IRI)return this.resolveRefIriSubject(e);if(e instanceof cr.Literal){let t=this.normalizeWikilink(e.value);return await this.findSubjectByUID(t)}return null}async loadPreconditionSubject(e,t,n){let i=await this.getLiteralValue(e,X.Namespace.EXO.term("Asset_uid")),s=await this.readAssetLabel(e)??"";if(i&&t.has(i))return this.brokenPreconditionNode(i,s);if(n>=Jl)return this.brokenPreconditionNode(i??"",s);let o=await this.tripleStore.match(e,X.Namespace.EXOCMD.term("AllPrecondition_preconditions"),void 0),c=await this.tripleStore.match(e,X.Namespace.EXOCMD.term("AnyPrecondition_preconditions"),void 0),l=await this.tripleStore.match(e,X.Namespace.EXOCMD.term("NotPrecondition_precondition"),void 0);if(o.length>0||c.length>0||l.length>0){let p=new Set(t);if(i&&p.add(i),o.length>0||c.length>0){let g=o.length>0?"all":"any",m=o.length>0?o:c,b=[];for(let _ of m)b.push(await this.loadChildPrecondition(_.object,p,n+1));return{id:i??"",label:s,composite:{op:g,children:b}}}let h=await this.loadChildPrecondition(l[0].object,p,n+1);return{id:i??"",label:s,not:h}}let u=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Precondition_sparqlAsk")),f=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Precondition_hostFunction")),d=await this.loadPreconditionQueryRef(e);return!i||!u&&!f&&!d?null:{id:i,label:s,...u&&{sparqlAsk:u},...f&&{hostFunction:f},...d&&{query:d}}}async loadChildPrecondition(e,t,n){let i=await this.resolvePreconditionRef(e);if(!i){let c=e instanceof cr.Literal?this.normalizeWikilink(e.value):"";return this.brokenPreconditionNode(c,"")}let s=await this.loadPreconditionSubject(i,t,n);if(s)return s;let o=await this.getLiteralValue(i,X.Namespace.EXO.term("Asset_uid"));return this.brokenPreconditionNode(o??"","")}async loadPreconditionQueryRef(e){let t=await this.tripleStore.match(e,X.Namespace.EXOCMD.term("Precondition_query"),void 0);if(t.length===0)return;let n=t[0].object;if(n instanceof gr.IRI)return await this.getLiteralValue(await this.resolveRefIriSubject(n),X.Namespace.EXO.term("Asset_uid"))??void 0;if(n instanceof cr.Literal)return this.normalizeWikilink(n.value)}brokenPreconditionNode(e,t){return{id:e,label:t,broken:!0}}async loadLinkedGrounding(e,t,n){if(t>=Jl)return null;let i=await this.tripleStore.match(e,X.Namespace.EXOCMD.term("Command_grounding"),void 0);if(i.length===0)return null;if(i.length===1||!n?.targetClass){let o=await this.resolveGroundingRef(i[0].object);return o?this.loadGroundingDefinition(o,t):null}for(let o of i){let c=await this.resolveGroundingRef(o.object);if(!c)continue;let l=await this.getObsidianName(c,X.Namespace.EXOCMD.term("Grounding_targetPrototype"));if(l&&this.matchesReference(l,n.targetClass))return this.loadGroundingDefinition(c,t)}this.warnOnce(`Command ${e.value}: ${i.length} groundings declared, none matched context.targetClass='${n.targetClass}' via Grounding_targetPrototype \u2014 falling back to first grounding by iteration order (legacy behaviour). Check that one grounding's Grounding_targetPrototype references this targetClass.`);let s=await this.resolveGroundingRef(i[0].object);return s?this.loadGroundingDefinition(s,t):null}async resolveGroundingRef(e){if(e instanceof gr.IRI)return this.resolveRefIriSubject(e);if(e instanceof cr.Literal){let t=this.normalizeWikilink(e.value);return await this.findSubjectByUID(t)}return null}async loadGroundingByUid(e){let t=await this.findSubjectByUID(e);return t?this.loadGroundingDefinition(t,0):null}async loadGroundingDefinition(e,t){if(t>=Jl)return null;let n=await this.getLiteralValue(e,X.Namespace.EXO.term("Asset_uid"));if(!n)return null;let i=await this.readAssetLabel(e)??"",s=await this.resolveGroundingTypeReference(e);if(!s)return null;let o=await this.getObsidianName(e,X.Namespace.EXOCMD.term("Grounding_targetProperty"));if(o&&this.looksLikeUUID(o)){let ae=await this.resolveLabelByUID(o);if(!ae)return this.warnOnce(`Grounding ${n}: targetProperty wikilink UID '${o}' is not resolvable to exo__Asset_label \u2014 grounding skipped (would otherwise write a UUID-named frontmatter key).`),null;o=ae}if(s===rM.GroundingType.SERVICE_CALL){let ae=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_serviceId"));ae&&(o=ae)}let c=await this.getObsidianName(e,X.Namespace.EXOCMD.term("Grounding_targetValueRef")),l=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_targetValueLiteral")),u=await this.getObsidianName(e,X.Namespace.EXOCMD.term("Grounding_targetValueSubstitution")),f=null;if(u&&this.looksLikeUUID(u)){let ae=await this.resolveLabelByUID(u);if(!ae)return this.warnOnce(`Grounding ${n}: targetValueSubstitution UID '${u}' is not resolvable to exo__Asset_label (SubstitutionToken instance missing or unlabelled) \u2014 grounding skipped.`),null;f=ae}else u&&(f=u);let d=await this.getObsidianName(e,X.Namespace.EXOCMD.term("Grounding_targetValueQuery")),p=await this.getObsidianName(e,X.Namespace.EXOCMD.term("Grounding_targetQuery")),h=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_serviceCallPayload")),g=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_appendExpression")),m=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_replaceFromExpression")),b=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_replaceToExpression")),_=await this.getObsidianWikilinkValue(e,X.Namespace.EXOCMD.term("Grounding_isDefinedBy")),S=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_sparqlUpdate")),A=await this.getObsidianName(e,X.Namespace.EXOCMD.term("Grounding_targetClass"));if(A&&!this.looksLikeUUID(A)){let ae=await this.findUidByLabel(A);ae&&(A=ae)}let w=await this.getObsidianName(e,X.Namespace.EXOCMD.term("Grounding_targetPrototype")),E=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_targetFolder")),R=await this.getObsidianName(e,X.Namespace.EXOCMD.term("Grounding_linkBackProperty")),x=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_inputSchema")),P=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_incrementBy")),N=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_shiftDelta")),$;if(P!=null&&P!==""){let ae=Number.parseInt(String(P),10);Number.isFinite(ae)&&($=ae)}let k=await this.resolvePropertyDefaults(e,n),G=await this.resolveInheritanceRules(e,n),B=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_propertyDefaults"));B!==null&&B!==""&&!this._legacyPropertyDefaultsWarnedGroundings.has(n)&&(this.warnOnce(`Grounding ${n}: deprecated exocmd__Grounding_propertyDefaults (plural) JSON predicate detected \u2014 the parser was removed in RFC v2 Phase 5 (#3167); value is ignored. Migrate to ref-form exocmd__Grounding_propertyDefault (singular) pointing to exocmd__PropertyDefault assets. See vault TBox c8f87363-d39c-45cb-9d4d-1be96d70f892 for the canonical replacement.`),this._legacyPropertyDefaultsWarnedGroundings.add(n));let M;s===rM.GroundingType.COMPOSITE&&(M=await this.loadCompositeSteps(e,t+1));let ie;if(x)try{let ae=JSON.parse(x);ae?.properties&&(ie=Object.entries(ae.properties).map(([Ie,ye])=>{let Te=ye.type,Re=Te==="string"?ye.format==="asset-reference"?"assetRef":"text":Te,pe=ye.defaultValue!==void 0?ye.defaultValue:ye.default,q={name:Ie,type:Re,label:ye.title??Ie,required:Array.isArray(ae.required)&&ae.required.includes(Ie)};return pe!=null&&(q.defaultValue=String(pe)),typeof ye.targetClassUid=="string"&&(q.targetClassUid=ye.targetClassUid),q}))}catch{}let Z=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_prefillLabelWithDate")),te=Z!==null&&String(Z).trim().toLowerCase()==="true",V=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_labelTemplate")),H=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_direction")),he;if(H!=null){let ae=String(H).trim().toLowerCase();ae==="forward"||ae==="rollback"?he=ae:ae!==""&&this.warnOnce(`Grounding ${n}: exocmd__Grounding_direction value '${H}' is not 'forward' or 'rollback' \u2014 treating as undefined (will default to 'forward' at dispatch).`)}let ze=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_bodyTemplate")),ce=await this.getObsidianName(e,X.Namespace.EXOCMD.term("Grounding_templateRef")),ee=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_cloneTargetBody")),K=ee!==null&&String(ee).trim().toLowerCase()==="true",Y=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_targetsCreatedInstance")),ne=Y!==null&&String(Y).trim().toLowerCase()==="true",Ce=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("Grounding_omitLabel")),U=Ce!==null&&String(Ce).trim().toLowerCase()==="true",fe={id:n,label:i,type:s,targetProperty:o??void 0,targetValueRef:c??void 0,targetValueLiteral:l??void 0,targetValueSubstitution:f??void 0,targetValueQuery:d??void 0,targetQuery:p??void 0,serviceCallPayload:h??void 0,appendExpression:g??void 0,replaceFromExpression:m??void 0,replaceToExpression:b??void 0,sparqlUpdate:S??void 0,steps:M,targetClass:A??void 0,targetPrototype:w??void 0,targetFolder:E??void 0,linkBackProperty:R??void 0,incrementBy:$,shiftDelta:N??void 0,propertyDefault:k.length>0?k:void 0,inheritanceRule:G.length>0?G:void 0,isDefinedBy:_??void 0,prefillLabelWithDate:te||void 0,labelTemplate:V??void 0,direction:he,bodyTemplate:ze??void 0,templateRef:ce??void 0,cloneTargetBody:K||void 0,targetsCreatedInstance:ne||void 0,omitLabel:U||void 0};return ie&&(fe.inputSchema=ie),fe}async loadCompositeSteps(e,t){if(t>=Jl)return[];let n=await this.tripleStore.match(e,X.Namespace.EXOCMD.term("Grounding_steps"),void 0),i=[];for(let s of n){let o=null;if(s.object instanceof gr.IRI)o=await this.resolveRefIriSubject(s.object);else if(s.object instanceof cr.Literal){let l=this.normalizeWikilink(s.object.value);o=await this.findSubjectByUID(l)}if(!o)continue;let c=await this.loadGroundingDefinition(o,t);c&&i.push(c)}return i}async resolvePropertyDefaults(e,t){let n=await this.resolvePropertyDefaultsForSubject(e,t,X.Namespace.EXOCMD.term("Grounding_propertyDefault")),i=await this.getUniversalCache();return i&&i.propertyDefaults.length>0?(0,oM.mergePropertyDefaults)(i.propertyDefaults,n):n}async resolvePropertyDefaultsForSubject(e,t,n){let i=await this.tripleStore.match(e,n,void 0),s=[];for(let o of i){let c=await this.resolveRefTripleObject(o.object);if(!c)continue;let l=await this.getObsidianName(c,X.Namespace.EXOCMD.term("PropertyDefault_property"));if(!l){this.warnOnce(`Grounding ${t}: PropertyDefault asset <${c.value}> missing exocmd__PropertyDefault_property \u2014 entry skipped.`);continue}let u=this.looksLikeUUID(l)?await this.resolveLabelByUID(l):l;if(!u){this.warnOnce(`Grounding ${t}: PropertyDefault property UID '${l}' is not resolvable to exo__Asset_label \u2014 entry skipped.`);continue}let f=await this.getObsidianName(c,X.Namespace.EXOCMD.term("PropertyDefault_value"));if(!f){this.warnOnce(`Grounding ${t}: PropertyDefault '${u}' missing exocmd__PropertyDefault_value \u2014 entry skipped.`);continue}let d=await this.resolvePropertyDefaultValue(f,t,u);d!==null&&s.push({propertyName:u,value:d})}return s}async getUniversalCache(){if(this._universalCacheReady)return this._universalCacheValue;this._universalCacheReady=!0;let e=await this.findUniversalSingleton();if(!e)return this.logger.debug("[CommandResolver] No exocmd__UniversalDefaultTemplate instance found in the store; universal property-defaults and inheritance-rules will not be applied. This verdict is cached until invalidateCache() is called \u2014 if the store was still warming up, the next invalidation re-resolves it."),this._universalCacheValue=null,null;let t=await this.resolvePropertyDefaultsForSubject(e,fM,X.Namespace.EXOCMD.term("Template_propertyDefault")),n=await this.resolveInheritanceRulesForSubject(e,fM,X.Namespace.EXOCMD.term("Template_inheritanceRule"));return this._universalCacheValue={propertyDefaults:t,inheritanceRules:n},this._universalCacheValue}async findUniversalSingleton(){let e=X.Namespace.EXOCMD.term("UniversalDefaultTemplate"),t=e.value,i=(await this.tripleStore.match(void 0,X.Namespace.EXO.term("Instance_class"),e)).map(c=>c.subject).filter(c=>c instanceof gr.IRI);if(i.length>0)return this.pickUniversalSingleton(i);let s=await this.tripleStore.match(void 0,X.Namespace.EXO.term("Instance_class"),void 0),o=[];for(let c of s){let l=!1;if(c.object instanceof gr.IRI)l=c.object.value===t||c.object.value.includes(uM);else if(c.object instanceof cr.Literal){let u=this.unwrapWikilink(c.object.value);l=u==="exocmd__UniversalDefaultTemplate"||u===uM}l&&c.subject instanceof gr.IRI&&o.push(c.subject)}return this.pickUniversalSingleton(o)}pickUniversalSingleton(e){if(e.length===0)return null;if(e.length===1)return e[0];let t=[...e].sort((n,i)=>n.value.localeCompare(i.value));return this.warnOnce(`Multiple UniversalDefaultTemplate singletons found (${t.length}); selecting deterministically by lexicographic UID order: ${t[0].value}`),t[0]}async resolveInheritanceRules(e,t){let n=await this.resolveInheritanceRulesForSubject(e,t,X.Namespace.EXOCMD.term("Grounding_inheritanceRule")),i=await this.getUniversalCache();return i&&i.inheritanceRules.length>0?(0,oM.mergeInheritanceRules)(i.inheritanceRules,n):n}async resolveInheritanceRulesForSubject(e,t,n){let i=await this.tripleStore.match(e,n,void 0),s=[],o=t;for(let c of i){let l=await this.resolveRefTripleObject(c.object);if(!l)continue;let u=await this.resolveLabelRef(l,X.Namespace.EXOCMD.term("InheritanceRule_sourceProperty"));if(!u){this.warnOnce(`Grounding ${o}: InheritanceRule <${l.value}> missing/unresolvable exocmd__InheritanceRule_sourceProperty \u2014 entry skipped.`);continue}let f=await this.resolveLabelRef(l,X.Namespace.EXOCMD.term("InheritanceRule_targetProperty"));if(!f){this.warnOnce(`Grounding ${o}: InheritanceRule <${l.value}> missing/unresolvable exocmd__InheritanceRule_targetProperty \u2014 entry skipped.`);continue}let d=await this.tripleStore.match(l,X.Namespace.EXOCMD.term("InheritanceRule_targetClassCondition"),void 0),p,h;if(d.length>0){let w=await this.getObsidianName(l,X.Namespace.EXOCMD.term("InheritanceRule_targetClassCondition"));if(!w||!w.trim()){this.warnOnce(`Grounding ${o}: InheritanceRule <${l.value}> has exocmd__InheritanceRule_targetClassCondition triple but ref is unresolvable \u2014 entire rule skipped (would otherwise apply unconditionally, broadening scope).`);continue}this.looksLikeUUID(w)?(h=w,p=await this.resolveLabelByUID(w)??void 0):p=w}let g=await this.tripleStore.match(l,X.Namespace.EXOCMD.term("InheritanceRule_targetClassExclusion"),void 0),m=[],b=[],_=!1;for(let w of g){let E=null;if(w.object instanceof gr.IRI?E=this.iriToObsidianName(w.object.value)??w.object.value:w.object instanceof cr.Literal&&(E=this.unwrapWikilink(w.object.value)),!E){_=!0;continue}if(this.looksLikeUUID(E)){b.push(E);let R=await this.resolveLabelByUID(E);R&&m.push(R)}else m.push(E)}if(_){this.warnOnce(`Grounding ${o}: InheritanceRule <${l.value}> has unresolvable exocmd__InheritanceRule_targetClassExclusion entry \u2014 entire rule skipped (would otherwise expand scope by silently dropping the excluded class).`);continue}let S=await this.getLiteralValue(l,X.Namespace.EXOCMD.term("InheritanceRule_priority")),A=50;if(S!==null&&S!==""){let w=Number.parseInt(String(S),10);Number.isFinite(w)&&(A=w)}s.push({sourcePropertyName:u,targetPropertyName:f,targetClassCondition:p,targetClassConditionUid:h,targetClassExclusion:m,targetClassExclusionUids:b,priority:A})}return s}async resolveRefIriSubject(e){if((await this.tripleStore.match(e,X.Namespace.EXO.term("Asset_uid"),void 0)).length>0)return e;let n=await(0,sM.labelTermBearers)(this.tripleStore,e);return n.length>1?(this._ambiguousRefWarnedKeys.has(e.value)||(this._ambiguousRefWarnedKeys.add(e.value),this.warnOnce(this.capWarning(`Reference <${e.value}> names a label borne by ${n.length} assets (${n.map(i=>i.uid).join(", ")}) \u2014 left unresolved`))),e):n[0]?.subject??e}async resolveRefTripleObject(e){if(e instanceof gr.IRI)return this.resolveRefIriSubject(e);if(e instanceof cr.Literal){let t=this.normalizeWikilink(e.value);return t?this.findSubjectByUID(t):null}return null}async resolveLabelRef(e,t){let n=await this.getObsidianName(e,t);return n?this.looksLikeUUID(n)?this.resolveLabelByUID(n):n:null}async resolvePropertyDefaultValue(e,t,n){if(!this.looksLikeUUID(e))return`"[[${e}]]"`;let i=await this.findSubjectByUID(e);if(!i){let c=`${t}|${e}`;return this._fallbackWarnedKeys.has(c)||(this._fallbackWarnedKeys.add(c),this.warnOnce(this.capWarning(`Grounding ${t}: PropertyDefault '${n}' \u2192 value asset ${e} not in store; SKIPPING the property (the executor's own default applies). Previously this emitted a wikilink, i.e. a link written where a value belongs.`))),EZ.STRING_SCALAR_PROPERTIES.has(n)?null:`"[[${e}]]"`}return await this.assetIsTokenInvocation(i)?this.resolveTokenInvocation(i,e,t,n):await this.assetIsSubstitutionToken(i)?this.dispatchSubstitutionToken(i,e,t,n,void 0):(this.logger.debug(`Grounding ${t}: PropertyDefault '${n}' value '${e}' is not a SubstitutionToken \u2014 emitting wikilink form.`),`"[[${e}]]"`)}async dispatchSubstitutionToken(e,t,n,i,s){let o=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("SubstitutionToken_resolver"));if(!o||!o.trim())return this.warnOnce(`Grounding ${n}: PropertyDefault '${i}' references SubstitutionToken '${t}' with no exocmd__SubstitutionToken_resolver \u2014 falling back to wikilink form.`),`"[[${t}]]"`;let c=o.trim();return cM.has(c)?s!==void 0?OZ(c,t,s):xZ(c,t):(this.warnOnce(`Grounding ${n}: PropertyDefault '${i}' SubstitutionToken '${t}' declares unknown resolver-id '${c}' \u2014 falling back to wikilink form. Known ids: ${Array.from(cM).join(", ")}.`),`"[[${t}]]"`)}async resolveTokenInvocation(e,t,n,i){let s=await this.getObsidianName(e,X.Namespace.EXOCMD.term("TokenInvocation_token"));if(!s)return this.warnOnce(`Grounding ${n}: PropertyDefault '${i}' TokenInvocation '${t}' missing exocmd__TokenInvocation_token \u2014 entry skipped.`),null;let o=await this.getLiteralValue(e,X.Namespace.EXOCMD.term("TokenInvocation_parameter"))??"";if(!this.looksLikeUUID(s))return this.warnOnce(`Grounding ${n}: PropertyDefault '${i}' TokenInvocation '${t}' references non-UUID token '${s}' \u2014 entry skipped.`),null;let c=await this.findSubjectByUID(s);return c?this.dispatchSubstitutionToken(c,s,n,i,o):(this.warnOnce(`Grounding ${n}: PropertyDefault '${i}' TokenInvocation '${t}' token ref '${s}' not found in store \u2014 entry skipped.`),null)}async assetIsTokenInvocation(e){let t=await this.tripleStore.match(e,X.Namespace.EXO.term("Instance_class"),void 0);for(let i of t)if(i.object instanceof gr.IRI){if(i.object.value===PZ||i.object.value.includes(lM))return!0}else if(i.object instanceof cr.Literal){let s=this.unwrapWikilink(i.object.value);if(s==="exocmd__TokenInvocation"||s===lM)return!0}return(await this.tripleStore.match(e,X.Namespace.EXOCMD.term("TokenInvocation_token"),void 0)).length>0?(this.logger.debug(`Asset ${e.value} classified as TokenInvocation via its exocmd__TokenInvocation_token property; exo__Instance_class was absent or unresolved.`),!0):!1}async assetIsSubstitutionToken(e){let t=await this.tripleStore.match(e,X.Namespace.EXO.term("Instance_class"),void 0);for(let i of t)if(i.object instanceof gr.IRI){if(i.object.value===CZ||i.object.value.includes(aM))return!0}else if(i.object instanceof cr.Literal){let s=this.unwrapWikilink(i.object.value);if(s==="exocmd__SubstitutionToken"||s===aM)return!0}return(await this.tripleStore.match(e,X.Namespace.EXOCMD.term("SubstitutionToken_resolver"),void 0)).length>0?(this.logger.debug(`Asset ${e.value} classified as SubstitutionToken via its resolver property; exo__Instance_class was absent or unresolved.`),!0):!1}async resolveGroundingTypeReference(e){let t=await this.tripleStore.match(e,X.Namespace.EXOCMD.term("Grounding_type"),void 0);if(t.length===0)return null;let n=t[0].object;if(n instanceof gr.IRI)return(0,nM.resolveGroundingTypeFromIRI)(n.value);if(n instanceof cr.Literal){let i=n.value,s=i.match(/^\[\[([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:\|[^\]]*)?\]\]$/i);return s?(0,nM.resolveGroundingTypeFromIRI)(`obsidian://vault/${s[1].toLowerCase()}.md`):(this.warnOnce(`[exocmd-grounding-type-literal-form] legacy literal-string form '${i}' for exocmd__Grounding_type on <${e.value}>. Migrate to wikilink form per RFC 9d20c91f Phase 3.`),null)}return null}async expandPrototypeChain(e){if(!e||!this.normalizeWikilink(e))return[];let t=[e],n=new Set([this.normalizeWikilink(e).toLowerCase()]),i=e;for(let s=0;s<Jl;s++){let o=this.extractUuidFromRef(i);if(!o)break;let c=null;try{let u=await this.findSubjectByUID(o);if(!u)break;c=await this.getLinkedValue(u,X.Namespace.EXO.term("Asset_prototype"))}catch(u){this.logger.debug(this.capWarning(`[expandPrototypeChain] store lookup failed at hop ${s} for '${i}': ${String(u)}`));break}if(!c)break;let l=this.normalizeWikilink(c).toLowerCase();if(n.has(l))break;n.add(l),t.push(c),i=c}return t}extractUuidFromRef(e){let t=this.normalizeWikilink(e);if(this.looksLikeUUID(t))return t;let n=this.extractPathBasename(t);return n&&this.looksLikeUUID(n)?n:null}async findSubjectByUID(e){if(this.tripleStore.findSubjectsByUUID){let n=await this.tripleStore.findSubjectsByUUID(e);if(n.length>0)return n[0]}let t=await this.tripleStore.match(void 0,X.Namespace.EXO.term("Asset_uid"),void 0);for(let n of t)if(n.object instanceof cr.Literal&&n.object.value===e)return n.subject;return null}async getLiteralValue(e,t){let n=await this.tripleStore.match(e,t,void 0);if(n.length===0)return null;let i=n[0].object;return i instanceof cr.Literal||i instanceof gr.IRI?i.value:null}looksLikeUUID(e){return/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)}async resolveLabelByUID(e){let t=await this.findSubjectByUID(e);return t?this.readAssetLabel(t):null}async readAssetLabel(e){let t=(await this.tripleStore.match(e,X.Namespace.EXO.term("Asset_label"),void 0))[0]?.object;return t instanceof gr.IRI?(0,iM.iriToObsidianName)(t.value)??t.value:t instanceof cr.Literal?t.value:null}async getClassAncestors(e){return(await this.getClassAncestorsWithDepth(e)).map(n=>n.ref)}async getClassAncestorsWithDepth(e){let t=this._ancestorDepthCache.get(e);if(t)return t;let n=new Map,i=new Set,s=await this.resolveClassFileIRI(e);if(!s)return[];let o=new Set([e]),c=await this.getLiteralValue(s,X.Namespace.EXO.term("Asset_uid"));c&&o.add(c);let l=await this.readAssetLabel(s);l&&o.add(l);let u=a((p,h)=>{if(o.has(p))return;let g=n.get(p);(g===void 0||h<g)&&n.set(p,h)},"setMin"),f=[{fileIRI:s,depth:0}];for(;f.length>0;){let p=f.shift();if(!p)break;let{fileIRI:h,depth:g}=p;if(g>=Jl||i.has(h.value))continue;i.add(h.value);let m=await this.tripleStore.match(h,X.Namespace.EXO.term("Class_superClass"),void 0);for(let b of m){let _=b.object;if(!(_ instanceof gr.IRI))continue;let S=g+1,A=_.value.startsWith("obsidian://vault/"),w=this.iriToObsidianName(_.value);w&&u(w,S);let E=null;if(A?E=_:w&&(E=await this.resolveClassFileIRI(w)),!E)continue;let R=await this.getLiteralValue(E,X.Namespace.EXO.term("Asset_uid"));R&&u(R,S),i.has(E.value)||f.push({fileIRI:E,depth:S})}}let d=Array.from(n.entries()).map(([p,h])=>({ref:p,depth:h}));return this._ancestorDepthCache.set(e,d),d}async resolveClassFileIRI(e){if(this.looksLikeUUID(e))return this.findSubjectByUID(e);let t=await this.findUidByLabel(e);return t?this.findSubjectByUID(t):null}async findUidByLabel(e){return(0,sM.findUidByAssetLabel)(this.tripleStore,e)}async getLinkedUID(e,t){let n=await this.tripleStore.match(e,t,void 0);if(n.length===0)return null;let i=n[0].object;if(i instanceof gr.IRI){let s=await this.tripleStore.match(await this.resolveRefIriSubject(i),X.Namespace.EXO.term("Asset_uid"),void 0);return s.length>0&&s[0].object instanceof cr.Literal?s[0].object.value:i.value.split("/").pop()?.replace(".md","")??null}return i instanceof cr.Literal?this.normalizeWikilink(i.value):null}async getLinkedUIDs(e,t){let n=await this.tripleStore.match(e,t,void 0),i=[];for(let s of n){let o=s.object;if(o instanceof gr.IRI){let c=await this.tripleStore.match(await this.resolveRefIriSubject(o),X.Namespace.EXO.term("Asset_uid"),void 0);if(c.length>0&&c[0].object instanceof cr.Literal)i.push(c[0].object.value);else{let l=o.value.split("/").pop()?.replace(".md","");l&&i.push(l)}}else if(o instanceof cr.Literal){let c=this.normalizeWikilink(o.value);c&&i.push(c)}}return i}async getLinkedValue(e,t){let n=await this.tripleStore.match(e,t,void 0);if(n.length===0)return null;let i=n[0].object;return i instanceof cr.Literal?this.normalizeWikilink(i.value):i instanceof gr.IRI?this.iriToObsidianName(i.value)??i.value:null}async getObsidianName(e,t){let n=await this.tripleStore.match(e,t,void 0);if(n.length===0)return null;let i=n[0].object;return i instanceof cr.Literal?this.unwrapWikilink(i.value):i instanceof gr.IRI?this.iriToObsidianName(i.value)??i.value:null}unwrapWikilink(e){if(!e)return e;let t=e.trim().replace(/^"|"$/g,"");if(t.startsWith("http://")||t.startsWith("https://"))return this.iriToObsidianName(t)??t;let n=t.match(/^\[\[([^\]|]+)\|([^\]]+)\]\]$/);if(n)return n[2].trim();let i=t.match(/^\[\[([^\]|]+)\]\]$/);if(i){let s=i[1].trim();return s.startsWith("http://")||s.startsWith("https://")?this.iriToObsidianName(s)??s:s}return t}async getObsidianWikilinkValue(e,t){let n=await this.tripleStore.match(e,t,void 0);if(n.length===0)return null;let i=n[0].object;if(i instanceof cr.Literal)return this.resolveWikilinkAlias(i.value);if(i instanceof gr.IRI){let s=this.iriToObsidianName(i.value);return s?`"[[${s}]]"`:i.value}return null}async resolveWikilinkAlias(e){let t=e.match(/\[\[([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\]\]/);if(!t)return e;let n=t[1],i=await this.findSubjectByUID(n);if(!i)return e;let s=await this.readAssetLabel(i);return s?e.replace(`[[${n}]]`,`[[${n}|${s}]]`):e}iriToObsidianName(e){return(0,iM.iriToObsidianName)(e)}normalizeWikilink(e){let t=e.replace(/["'[\]]/g,"").trim(),n=t.indexOf("|");return n>=0?t.substring(0,n):t}};ma.CommandResolver=bI;ma.CommandResolver=bI=bZ([(0,SZ.injectable)(),_Z("design:paramtypes",[Object,Object])],bI)});var SI=T(_I=>{"use strict";Object.defineProperty(_I,"__esModule",{value:!0});_I.validateExoQLAllowlist=FZ;var Nb=Nh();function FZ(r){if(!r||typeof r!="object")return;let e=r;if(e.type==="update"){let t=r.updates??[];for(let n of t)if(n?.type==="load")throw new Nb.ExoQLForbiddenKeywordError("LOAD");throw new Nb.ExoQLForbiddenKeywordError("UPDATE")}if(e.type==="query"){if(e.from){let t=Array.isArray(e.from.default)&&e.from.default.length>0,n=Array.isArray(e.from.named)&&e.from.named.length>0;if(t||n)throw new Nb.ExoQLForbiddenKeywordError("FROM")}if(Array.isArray(e.where))for(let t of e.where)kb(t);if(Array.isArray(e.template))for(let t of e.template)kb(t)}}a(FZ,"validateExoQLAllowlist");function kb(r){if(!r||typeof r!="object")return;if(r.type==="service")throw new Nb.ExoQLForbiddenKeywordError("SERVICE");if(Array.isArray(r.patterns))for(let t of r.patterns)kb(t);let e=r.where;if(Array.isArray(e))for(let t of e)kb(t)}a(kb,"walkPatternForBannedKeywords")});var wI=T(Mb=>{"use strict";Object.defineProperty(Mb,"__esModule",{value:!0});Mb.DEFAULT_EVAL_CONFIG=void 0;Mb.DEFAULT_EVAL_CONFIG=Object.freeze({enabled:!0,maxNestedEvalCount:100,maxAggregateEvalMillis:1e4})});var jb=T(EI=>{"use strict";Object.defineProperty(EI,"__esModule",{value:!0});EI.evaluateWithExoEval=$Z;var DZ=Tf(),LZ=Of(),NZ=Yf(),kZ=SI(),MZ=wI(),jZ=Nh();async function $Z(r,e={}){if(typeof r!="string")throw new TypeError("evaluateWithExoEval: sparql must be a string");let n=new DZ.ExoQLParser().parse(r);if((0,kZ.validateExoQLAllowlist)(n),!{...MZ.DEFAULT_EVAL_CONFIG,...e.config??{}}.enabled)throw new jZ.ExoQLEvalDisabledError;let s="queryType"in n&&typeof n.queryType=="string"?n.queryType:"SELECT";if(!e.store)return s==="ASK"?{kind:"ask",result:!1}:s==="CONSTRUCT"?{kind:"construct",triples:[]}:{kind:"select",rows:[]};let c=new LZ.ExoQLAlgebraTranslator().translate(n),l=new NZ.ExoQLQueryExecutor(e.store);return l.isAskQuery(c)?{kind:"ask",result:await l.executeAsk(c)}:l.isConstructQuery(c)?{kind:"construct",triples:await l.executeConstruct(c)}:{kind:"select",rows:await l.executeAll(c)}}a($Z,"evaluateWithExoEval")});var wo=T($b=>{"use strict";Object.defineProperty($b,"__esModule",{value:!0});$b.DateFormatter=void 0;var vI=class r{static{a(this,"DateFormatter")}static toISOTimestamp(e){return e.toISOString().replace(/\.\d{3}Z$/,"Z")}static toLocalTimestamp(e){let t=e.getFullYear(),n=String(e.getMonth()+1).padStart(2,"0"),i=String(e.getDate()).padStart(2,"0"),s=String(e.getHours()).padStart(2,"0"),o=String(e.getMinutes()).padStart(2,"0"),c=String(e.getSeconds()).padStart(2,"0");return`${t}-${n}-${i}T${s}:${o}:${c}`}static toDateWikilink(e){let t=e.getFullYear(),n=String(e.getMonth()+1).padStart(2,"0"),i=String(e.getDate()).padStart(2,"0");return`"[[${t}-${n}-${i}]]"`}static getTodayWikilink(){return r.toDateWikilink(new Date)}static toDateString(e){let t=e.getFullYear(),n=String(e.getMonth()+1).padStart(2,"0"),i=String(e.getDate()).padStart(2,"0");return`${t}-${n}-${i}`}static parseWikilink(e){let n=e.replace(/^["']|["']$/g,"").match(/\[\[(\d{4}-\d{2}-\d{2})\]\]/);return n?n[1]:null}static addDays(e,t){let n=new Date(e);return n.setDate(n.getDate()+t),n}static isSameDay(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}static getTodayStartTimestamp(){let e=new Date;return e.setHours(0,0,0,0),r.toLocalTimestamp(e)}static toTimestampAtStartOfDay(e){let t=e.split("-").map(Number);if(t.length!==3||t.some(isNaN))throw new Error(`Invalid date format: ${e}. Expected YYYY-MM-DD`);let[n,i,s]=t,o=new Date(n,i-1,s,0,0,0,0);if(isNaN(o.getTime()))throw new Error(`Invalid date values: ${e}`);return r.toLocalTimestamp(o)}static normalizeTimestamp(e){if(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/.test(e))return e;let t=new Date(e);if(isNaN(t.getTime()))throw new Error(`Invalid timestamp format: ${e}`);return r.toISOTimestamp(t)}static isISOTimestamp(e){return/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/.test(e)}};$b.DateFormatter=vI});var Mh=T(Ub=>{"use strict";Object.defineProperty(Ub,"__esModule",{value:!0});Ub.liveClock=UZ;Ub.frozenClock=BZ;function UZ(){return{now:a(()=>new Date,"now")}}a(UZ,"liveClock");function BZ(r){let e=new Date(r);return{now:a(()=>new Date(e.getTime()),"now")}}a(BZ,"frozenClock")});var hM=T(ga=>{"use strict";var VZ=ga&&ga.__decorate||function(r,e,t,n){var i=arguments.length,s=i<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(r,e,t,n);else for(var c=r.length-1;c>=0;c--)(o=r[c])&&(s=(i<3?o(s):i>3?o(e,t,s):o(e,t))||s);return i>3&&s&&Object.defineProperty(e,t,s),s},GZ=ga&&ga.__metadata||function(r,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,e)},$h;Object.defineProperty(ga,"__esModule",{value:!0});ga.PreconditionEvaluator=void 0;var qZ=lt(),WZ=Tf(),zZ=Of(),pM=Yf(),HZ=jb(),jh=wo(),KZ=Mh(),Uh=$h=class{static{a(this,"PreconditionEvaluator")}constructor(e,t,n){this.hostFunctions=new Map,this.askCache=new Map,this.tripleStore=e,this.queryBodyResolver=t,this.clock=n?.clock??(0,KZ.liveClock)()}async evaluate(e,t,n){if(!e)return!0;let i=new Map;return await this.evaluateNode(e,t,n,i)==="yes"}async evaluateNode(e,t,n,i){if(e.broken)return"unknown";if(e.composite){let{op:s,children:o}=e.composite;if(o.length===0)return"unknown";let c=await Promise.all(o.map(l=>this.evaluateNode(l,t,n,i)));return s==="all"?c.includes("no")?"no":c.includes("unknown")?"unknown":"yes":c.includes("yes")?"yes":c.includes("unknown")?"unknown":"no"}if(e.not){let s=await this.evaluateNode(e.not,t,n,i);return s==="unknown"?"unknown":s==="yes"?"no":"yes"}return e.sparqlAsk?await this.evaluateSparqlAskMemoized(e.sparqlAsk,t,i)?"yes":"no":e.query?await this.evaluateQueryRef(e.query,t)?"yes":"no":e.hostFunction?this.evaluateHostFunction(e.hostFunction,t,n)?"yes":"no":"yes"}evaluateSparqlAskMemoized(e,t,n){let i=n.get(e);if(i!==void 0)return i;let s=this.evaluateSparqlAsk(e,t);return n.set(e,s),s}async evaluateQueryRef(e,t){if(!this.queryBodyResolver)return!1;try{let n=await this.queryBodyResolver.resolveSparql(e);if(!n)return!1;let i=this.substituteVariables(n,t),s=await(0,HZ.evaluateWithExoEval)(i,{store:this.tripleStore});return s.kind!=="ask"?!1:s.result}catch{return!1}}registerHostFunction(e,t){this.hostFunctions.set(e,t)}hasHostFunction(e){return this.hostFunctions.has(e)}evaluateHostFunctionSync(e,t,n){return this.hostFunctions.has(e)?this.evaluateHostFunction(e,t,n):null}invalidateCache(){this.askCache.clear()}compileAsk(e){let t=this.substituteVariables(e,$h.SENTINEL_IRI),i=new WZ.ExoQLParser().parse(t),o=new zZ.ExoQLAlgebraTranslator().translate(i);return new pM.ExoQLQueryExecutor(this.tripleStore).isAskQuery(o)?o:null}evaluateHostFunction(e,t,n){let i=this.hostFunctions.get(e);if(!i)return!0;let s=n?{...n,targetIRI:t}:{targetIRI:t};try{return i(s)}catch{return!1}}async evaluateSparqlAsk(e,t){try{let n=$h.TEMPORAL_TOKEN.test(e),i=n?jh.DateFormatter.toDateString(this.clock.now()):null,s=this.askCache.get(e);if(s===void 0||n&&s.day!==i){let l=this.compileAsk(e);if(!l)return!1;s={day:i,compiled:l},this.askCache.set(e,s)}let o=JSON.parse(JSON.stringify(s.compiled).replaceAll($h.SENTINEL_IRI,t));return await new pM.ExoQLQueryExecutor(this.tripleStore).executeAsk(o)}catch{return!1}}substituteVariables(e,t){let n=this.clock.now(),i=n.toISOString(),s=n.getFullYear(),o=n.getMonth(),c=n.getDate(),l=n.getDay(),u=jh.DateFormatter.toDateString(n),f=jh.DateFormatter.toDateString(new Date(s,o,c-1)),d=(l+6)%7,p=jh.DateFormatter.toDateString(new Date(s,o,c-d)),h=jh.DateFormatter.toDateString(new Date(s,o,c-d-7)),g=`${s}-${String(o+1).padStart(2,"0")}-01`,m=o===0?11:o-1,_=`${o===0?s-1:s}-${String(m+1).padStart(2,"0")}-01`,S=`${s}-01-01`;return e.replace(/\$target\b/g,`<${t}>`).replace(/\$now\b/g,`"${i}"^^xsd:dateTime`).replace(/\$yesterday\b/g,`"${f}"^^xsd:date`).replace(/\$thisWeekStart\b/g,`"${p}"^^xsd:date`).replace(/\$lastWeekStart\b/g,`"${h}"^^xsd:date`).replace(/\$thisMonthStart\b/g,`"${g}"^^xsd:date`).replace(/\$lastMonthStart\b/g,`"${_}"^^xsd:date`).replace(/\$thisYearStart\b/g,`"${S}"^^xsd:date`).replace(/\$today\b/g,`"${u}"^^xsd:date`)}};ga.PreconditionEvaluator=Uh;Uh.SENTINEL_IRI="urn:exocortex:cache-sentinel:target";Uh.TEMPORAL_TOKEN=/\$(?:now|today|yesterday|thisWeekStart|lastWeekStart|thisMonthStart|lastMonthStart|thisYearStart)\b/;ga.PreconditionEvaluator=Uh=$h=VZ([(0,qZ.injectable)(),GZ("design:paramtypes",[Object,Object,Object])],Uh)});var mM=T(ya=>{"use strict";Object.defineProperty(ya,"__esModule",{value:!0});ya.hasUidFilename=ya.hasNonUidFilename=void 0;ya.registerDefaultHostFunctions=QZ;var YZ=a(r=>{let e=r.assetUid;if(typeof e!="string"||e.trim()==="")return!1;let t=r.fileBasename;return typeof t!="string"?!1:t!==e},"hasNonUidFilename");ya.hasNonUidFilename=YZ;var XZ=a(r=>{let e=r.assetUid;if(typeof e!="string"||e.trim()==="")return!1;let t=r.fileBasename;return typeof t!="string"?!1:t===e},"hasUidFilename");ya.hasUidFilename=XZ;function QZ(r){r.registerHostFunction("hasNonUidFilename",ya.hasNonUidFilename),r.registerHostFunction("hasUidFilename",ya.hasUidFilename)}a(QZ,"registerDefaultHostFunctions")});var Vb=T(Bb=>{"use strict";Object.defineProperty(Bb,"__esModule",{value:!0});Bb.liveUidGenerator=JZ;Bb.seededUidGenerator=eee;var TI=sf();function JZ(){return{next:a(()=>(0,TI.v4)(),"next")}}a(JZ,"liveUidGenerator");var ZZ="6ba7b810-9dad-11d1-80b4-00c04fd430c8";function eee(r){let e=0,t=(0,TI.v5)(r,ZZ);return{next:a(()=>{let n=`${r}#${e}`;return e+=1,(0,TI.v5)(n,t)},"next")}}a(eee,"seededUidGenerator")});var Wb=T(Ac=>{"use strict";Object.defineProperty(Ac,"__esModule",{value:!0});Ac.registerResolver=yr;Ac.getResolver=nee;Ac.isResolverModifierAware=iee;Ac.getRegisteredResolverIds=see;Ac.clearResolvers=oee;Ac.installDefaultResolvers=gee;var tee=wo(),gM=gc(),qb=new Map,AI=new Set,ree=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function yr(r,e,t=!1){qb.set(r,e),t&&AI.add(r)}a(yr,"registerResolver");function nee(r){return qb.get(r)}a(nee,"getResolver");function iee(r){return AI.has(r)}a(iee,"isResolverModifierAware");function see(){return Array.from(qb.keys())}a(see,"getRegisteredResolverIds");function oee(){qb.clear(),AI.clear()}a(oee,"clearResolvers");function vn(r){return r<10?`0${r}`:String(r)}a(vn,"pad2");var aee=["January","February","March","April","May","June","July","August","September","October","November","December"],cee=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],lee=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],uee=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];function fee(r){let e=["th","st","nd","rd"],t=r%100;return`${r}${e[(t-20)%10]||e[t]||e[0]}`}a(fee,"ordinalDay");var dee=/YYYY|YY|MMMM|MMM|MM|M|Do|DD|D|dddd|ddd|HH|H|hh|h|mm|m|ss|s|A|a/g;function pee(r,e){let t=(r.getHours()+11)%12+1;return e.replace(dee,n=>{switch(n){case"YYYY":return String(r.getFullYear());case"YY":return vn(r.getFullYear()%100);case"MMMM":return aee[r.getMonth()];case"MMM":return cee[r.getMonth()];case"MM":return vn(r.getMonth()+1);case"M":return String(r.getMonth()+1);case"Do":return fee(r.getDate());case"DD":return vn(r.getDate());case"D":return String(r.getDate());case"dddd":return lee[r.getDay()];case"ddd":return uee[r.getDay()];case"HH":return vn(r.getHours());case"H":return String(r.getHours());case"hh":return vn(t);case"h":return String(t);case"mm":return vn(r.getMinutes());case"m":return String(r.getMinutes());case"ss":return vn(r.getSeconds());case"s":return String(r.getSeconds());case"A":return r.getHours()<12?"AM":"PM";case"a":return r.getHours()<12?"am":"pm";default:return n}})}a(pee,"formatDate");function yM(r,e,t){let n=r.getDate(),i=new Date(r.getTime());i.setDate(1),t==="M"?i.setMonth(i.getMonth()+e):i.setFullYear(i.getFullYear()+e);let s=new Date(i.getFullYear(),i.getMonth()+1,0).getDate();return i.setDate(Math.min(n,s)),i}a(yM,"addMonthsClamped");function hee(r,e){if(!e)return r;let t=e.match(/^([+-])(\d+)([dwMy])?$/);if(!t)return r;let n=(t[1]==="-"?-1:1)*parseInt(t[2],10),i=t[3]??"d",s=new Date(r.getTime());switch(i){case"d":s.setDate(s.getDate()+n);break;case"w":s.setDate(s.getDate()+n*7);break;case"M":s=yM(s,n,"M");break;case"y":s=yM(s,n,"y");break}return isNaN(s.getTime())?r:s}a(hee,"applyDateOffset");function mee(r){if(!r)return{offset:null,format:null};let e=r.indexOf(":");if(e<0)return{offset:r,format:null};let t=r.slice(0,e),n=r.slice(e+1);return{offset:t||null,format:n||null}}a(mee,"parseDateModifier");function Gb(r,e){return(t,n)=>{let{offset:i,format:s}=mee(n),o=new Date;return r!==0&&o.setDate(o.getDate()+r),o=hee(o,i),pee(o,s??e)}}a(Gb,"makeDateResolver");function gee(){yr("today",()=>{let r=new Date;return`${r.getFullYear()}-${vn(r.getMonth()+1)}-${vn(r.getDate())}`}),yr("todayStart",()=>tee.DateFormatter.getTodayStartTimestamp()),yr("date",Gb(0,"YYYY-MM-DD"),!0),yr("now",Gb(0,"YYYY-MM-DDTHH:mm:ss"),!0),yr("tomorrow",Gb(1,"YYYY-MM-DD"),!0),yr("yesterday",Gb(-1,"YYYY-MM-DD"),!0),yr("target",r=>r.targetIRI?`"[[${r.targetIRI}]]"`:""),yr("targetFolder",r=>{if(!r.targetFilePath)return"";let e=r.targetFilePath.replace(/^\/+/,""),t=e.lastIndexOf("/");return t>=0?e.slice(0,t):""}),yr("createdInstance",r=>{let e=r.createdInstancePath;if(!e)return null;let t=e.replace(/\.md$/i,"").replace(/^\/+/,""),n=t.split("/").pop()??t;return`"[[${ree.test(n)?n:t}]]"`}),yr("randomUUIDv4",()=>{if(typeof crypto<"u"&&typeof crypto.randomUUID=="function")return crypto.randomUUID();throw new Error("randomUUIDv4 resolver requires crypto.randomUUID() \u2014 runtime is missing Node crypto / Web Crypto API.")}),yr("nowTimestamp",()=>{let r=new Date;return`${r.getFullYear()}-${vn(r.getMonth()+1)}-${vn(r.getDate())}T${vn(r.getHours())}:${vn(r.getMinutes())}:${vn(r.getSeconds())}`}),yr("nowDate",()=>{let r=new Date;return`${r.getFullYear()}-${vn(r.getMonth()+1)}-${vn(r.getDate())}`}),yr("nowYear",()=>String(new Date().getFullYear())),yr("nowMonth",()=>vn(new Date().getMonth()+1)),yr("userInputLabel",r=>{let e=r.userInput?.label;return typeof e=="string"?e:""}),yr("userInput",(r,e)=>{if(!e)return null;let t=r.userInput?.[e];return typeof t=="string"?t:t==null?null:String(t)}),yr("targetProperty",(r,e)=>{if(!e||!r.targetFm)return null;let t=r.targetFm[e];return t==null?null:Array.isArray(t)?t.map(n=>(0,gM.decodeYamlBlockScalar)(String(n),!0)):(0,gM.decodeYamlBlockScalar)(String(t))}),yr("targetRefProperty",(r,e)=>{if(!e)return null;let t=e.indexOf("|");if(t<0)return null;let n=e.slice(0,t),i=e.slice(t+1);if(!n||!i)return null;let s=r.targetRefFm?.[n];if(!s)return null;let o=s[i];return o==null?null:Array.isArray(o)?o.length>0?String(o[0]):null:String(o)}),yr("labelAsArray",r=>{let e=r.userInput?.label;return typeof e=="string"&&e.length>0?[e]:[]}),yr("groundingTargetClass",r=>r.groundingTargetClassUid?`"[[${r.groundingTargetClassUid}]]"`:null),yr("targetClassSelf",r=>{if(!r.targetFilePath)return null;let e=r.targetFilePath.replace(/^\/+/,""),n=e.slice(e.lastIndexOf("/")+1).replace(/\.md$/i,"");return n.length>0?`"[[${n}]]"`:null})}a(gee,"installDefaultResolvers")});var RI=T(zb=>{"use strict";Object.defineProperty(zb,"__esModule",{value:!0});zb.resolveTemplateBody=bee;zb.stripTemplateFrontmatter=_ee;var II=Wb();(0,II.installDefaultResolvers)();var yee=/\$([A-Za-z][A-Za-z0-9_]*)((?:[+-]\d+[dwMy])?(?::[A-Za-z0-9:./-]+)?)/g;function bee(r,e={}){return r.replace(yee,(t,n,i)=>{let s=(0,II.getResolver)(n);if(s===void 0)return t;let o=s(e,i.length>0?i:void 0);return typeof o!="string"||o.length===0?t:(0,II.isResolverModifierAware)(n)?o:o+i})}a(bee,"resolveTemplateBody");function _ee(r){let e=r.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);return e?r.slice(e[0].length):r}a(_ee,"stripTemplateFrontmatter")});var Yb=T(Qf=>{"use strict";Object.defineProperty(Qf,"__esModule",{value:!0});Qf.registerOrderSpecLoader=See;Qf.clearOrderSpecLoader=wee;Qf.loadDefaultSpec=Eee;Qf.orderProperties=vee;var Hb=null,Ic,Kb=!1;function See(r){Hb=r,Ic=void 0,Kb=!1}a(See,"registerOrderSpecLoader");function wee(){Hb=null,Ic=void 0,Kb=!1}a(wee,"clearOrderSpecLoader");function Eee(){if(Ic!==void 0)return Ic;if(!Hb)return Ic=null,null;try{Ic=Hb()}catch(r){Kb||(console.warn("[OrderSpecResolver] loader threw, falling back to insertion order:",r),Kb=!0),Ic=null}return Ic}a(Eee,"loadDefaultSpec");function vee(r,e){if(!e||e.head.length===0&&e.tail.length===0)return r;let t=Object.keys(r),n=new Set(e.head),i=new Set(e.tail),s=e.head.filter(u=>Object.prototype.hasOwnProperty.call(r,u)),o=e.tail.filter(u=>Object.prototype.hasOwnProperty.call(r,u)),c=t.filter(u=>!n.has(u)&&!i.has(u));e.middleStrategy==="alphabetical"&&c.sort((u,f)=>u.localeCompare(f));let l={};for(let u of s)l[u]=r[u];for(let u of c)l[u]=r[u];for(let u of o)l[u]=r[u];return l}a(vee,"orderProperties")});var Fi=T(Xb=>{"use strict";Object.defineProperty(Xb,"__esModule",{value:!0});Xb.DI_TOKENS=void 0;Xb.DI_TOKENS={IFileSystemAdapter:Symbol.for("IFileSystemAdapter"),IVaultAdapter:Symbol.for("IVaultAdapter"),IVaultContext:Symbol.for("IVaultContext"),IMultiVaultManager:Symbol.for("IMultiVaultManager"),ILogger:Symbol.for("ILogger"),IEventBus:Symbol.for("IEventBus"),IConfiguration:Symbol.for("IConfiguration"),INotificationService:Symbol.for("INotificationService"),ClassCreationService:Symbol.for("ClassCreationService"),GenericAssetCreationService:Symbol.for("GenericAssetCreationService"),TaskStatusService:Symbol.for("TaskStatusService"),EffortStatusWorkflow:Symbol.for("EffortStatusWorkflow"),StatusTimestampService:Symbol.for("StatusTimestampService"),PropertyCleanupService:Symbol.for("PropertyCleanupService"),FolderRepairService:Symbol.for("FolderRepairService"),RenameToUidService:Symbol.for("RenameToUidService"),NoteToRDFConverter:Symbol.for("NoteToRDFConverter"),IVaultSettings:Symbol.for("IVaultSettings"),AreaHierarchyBuilder:Symbol.for("AreaHierarchyBuilder"),ClassHierarchyResolver:Symbol.for("ClassHierarchyResolver")}});var xI=T(Qb=>{"use strict";Object.defineProperty(Qb,"__esModule",{value:!0});Qb.RDFVocabularyMapper=void 0;var Dr=Ai(),bM=Le(),Ae=At(),CI=class{static{a(this,"RDFVocabularyMapper")}constructor(){this.propertyMappings=new Map([["exo__Instance_class",Ae.Namespace.RDF.term("type")],["exo__Asset_isDefinedBy",Ae.Namespace.RDFS.term("isDefinedBy")],["exo__Class_superClass",Ae.Namespace.RDFS.term("subClassOf")],["exo__Property_range",Ae.Namespace.RDFS.term("range")],["exo__Property_domain",Ae.Namespace.RDFS.term("domain")],["exo__Property_superProperty",Ae.Namespace.RDFS.term("subPropertyOf")]])}generateClassHierarchyTriples(){let e=[];return e.push(new Dr.Triple(Ae.Namespace.EXO.term("Asset"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.RDFS.term("Resource"))),e.push(new Dr.Triple(Ae.Namespace.EXO.term("Class"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.RDFS.term("Class"))),e.push(new Dr.Triple(Ae.Namespace.EXO.term("Property"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.RDF.term("Property"))),e.push(new Dr.Triple(Ae.Namespace.EMS.term("Task"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.EXO.term("Asset"))),e.push(new Dr.Triple(Ae.Namespace.EMS.term("Project"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.EXO.term("Asset"))),e.push(new Dr.Triple(Ae.Namespace.EMS.term("Area"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.EXO.term("Asset"))),e.push(new Dr.Triple(Ae.Namespace.EMS.term("Workflow"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.EXO.term("Asset"))),e.push(new Dr.Triple(Ae.Namespace.EMS.term("WorkflowState"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.EXO.term("Asset"))),e.push(new Dr.Triple(Ae.Namespace.EMS.term("WorkflowTransition"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.EXO.term("Asset"))),e.push(new Dr.Triple(Ae.Namespace.EXOCMD.term("Command"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.EXO.term("Asset"))),e.push(new Dr.Triple(Ae.Namespace.EXOCMD.term("Precondition"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.EXO.term("Asset"))),e.push(new Dr.Triple(Ae.Namespace.EXOCMD.term("Grounding"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.EXO.term("Asset"))),e.push(new Dr.Triple(Ae.Namespace.EXOCMD.term("CommandBinding"),Ae.Namespace.RDFS.term("subClassOf"),Ae.Namespace.EXO.term("Asset"))),e}generatePropertyHierarchyTriples(){let e=[];return e.push(new Dr.Triple(Ae.Namespace.EXO.term("Instance_class"),Ae.Namespace.RDFS.term("subPropertyOf"),Ae.Namespace.RDF.term("type"))),e.push(new Dr.Triple(Ae.Namespace.EXO.term("Asset_isDefinedBy"),Ae.Namespace.RDFS.term("subPropertyOf"),Ae.Namespace.RDFS.term("isDefinedBy"))),e.push(new Dr.Triple(Ae.Namespace.EXO.term("Class_superClass"),Ae.Namespace.RDFS.term("subPropertyOf"),Ae.Namespace.RDFS.term("subClassOf"))),e.push(new Dr.Triple(Ae.Namespace.EXO.term("Property_range"),Ae.Namespace.RDFS.term("subPropertyOf"),Ae.Namespace.RDFS.term("range"))),e.push(new Dr.Triple(Ae.Namespace.EXO.term("Property_domain"),Ae.Namespace.RDFS.term("subPropertyOf"),Ae.Namespace.RDFS.term("domain"))),e.push(new Dr.Triple(Ae.Namespace.EXO.term("Property_superProperty"),Ae.Namespace.RDFS.term("subPropertyOf"),Ae.Namespace.RDFS.term("subPropertyOf"))),e}generateMappedTriple(e,t,n){let i=this.propertyMappings.get(t);if(!i)return null;let s;if(n instanceof bM.IRI)s=n;else{let o=Ae.Namespace.fromPropertyKey(n);s=o?o.namespace.term(o.localName):new bM.IRI(n)}return new Dr.Triple(e,i,s)}hasMappingFor(e){return this.propertyMappings.has(e)}};Qb.RDFVocabularyMapper=CI});var Jb=T(ba=>{"use strict";Object.defineProperty(ba,"__esModule",{value:!0});ba.OBSIDIAN_VAULT_SCHEME=void 0;ba.vaultPathToIRI=Tee;ba.iriToVaultPath=Aee;ba.OBSIDIAN_VAULT_SCHEME="obsidian://vault/";function Tee(r){let e=r.startsWith("./")?r.slice(2):r;return`${ba.OBSIDIAN_VAULT_SCHEME}${encodeURI(e)}`}a(Tee,"vaultPathToIRI");function Aee(r){if(!r.startsWith(ba.OBSIDIAN_VAULT_SCHEME))return null;let e=r.slice(ba.OBSIDIAN_VAULT_SCHEME.length);try{return decodeURI(e)}catch{return null}}a(Aee,"iriToVaultPath")});var e_=T(Bh=>{"use strict";Object.defineProperty(Bh,"__esModule",{value:!0});Bh.derivePath=_M;Bh.deriveUrl=Iee;Bh.deriveLegacyFlatPath=Ree;var OI="assetspaces",Zb=/^[A-Za-z0-9._-]+$/;function _M(r){if(typeof r!="string")return null;let e=r.trim();if(e.length===0||/^file:\/\//i.test(e))return null;e=e.replace(/\/+$/,""),e=e.replace(/\.git$/i,"");let t=null;if(!e.includes("://")){let o=/^[^/@\s]+@[^/:\s]+:(.+)$/.exec(e);o&&(t=o[1])}if(t===null){let o=e.replace(/^[a-z][a-z0-9+.-]*:\/\//i,"");o=o.replace(/^[^/@]+@/,"");let c=o.indexOf("/");if(c<0)return null;t=o.slice(c+1)}let n=t.split("/").filter(o=>o.length>0);if(n.length<2)return null;let i=n[0],s=n[1];return i==="."||i===".."||s==="."||s===".."||!Zb.test(i)||!Zb.test(s)?null:`${OI}/${i}/${s}`}a(_M,"derivePath");function Iee(r){if(typeof r!="string")return null;let e=r.trim();if(e.length===0)return null;e=e.replace(/^\/+/,"").replace(/\/+$/,"");let t=`${OI}/`;if(!e.startsWith(t))return null;let n=e.slice(t.length).split("/").filter(o=>o.length>0);if(n.length<2)return null;let i=n[0],s=n[1];return i==="."||i===".."||s==="."||s===".."||!Zb.test(i)||!Zb.test(s)?null:`https://github.com/${i}/${s}`}a(Iee,"deriveUrl");function Ree(r){let e=_M(r);if(e===null)return null;let t=e.split("/")[2];if(t===void 0||t.length===0)return null;let n=t.startsWith("exoas-")?t.slice(6):t;return n.length===0?null:`${OI}/${n}`}a(Ree,"deriveLegacyFlatPath")});var t_=T(Ts=>{"use strict";Object.defineProperty(Ts,"__esModule",{value:!0});Ts.FILE_SPACE_CLASS_UID=void 0;Ts.frontmatterDeclaresFileSpace=xee;Ts.discoverFileSpaceExclusions=Pee;var Cee=e_();Ts.FILE_SPACE_CLASS_UID="aad8913e-5e9f-4047-879d-93cc46befd52";var SM=/\[\[([^\]|]+)(?:\|[^\]]*)?\]\]/g,PI=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function EM(r){let e=Array.isArray(r)?r:[r],t=[];for(let n of e){if(typeof n!="string")continue;SM.lastIndex=0;let i;for(;(i=SM.exec(n))!==null;)t.push(i[1].trim())}return t}a(EM,"wikilinkTargets");function xee(r){return r?EM(r.exo__Instance_class).some(e=>PI.test(e)&&e.toLowerCase()===Ts.FILE_SPACE_CLASS_UID):!1}a(xee,"frontmatterDeclaresFileSpace");function wM(r,e){try{return r.getFrontmatter(e)}catch{return null}}a(wM,"readFrontmatterSafe");function Oee(r){let e=r.exo__AssetSpace_source;if(typeof e=="string"&&e.length>0)return e;let t=r.exo__AssetSpace_git;return typeof t=="string"&&t.length>0?t:null}a(Oee,"readSource");function Pee(r){let e=[],t=[],n=[],i=new Map,s=a((c,l)=>{if(PI.test(c))return c.toLowerCase()===Ts.FILE_SPACE_CLASS_UID;let u=r.getFirstLinkpathDest(c,l);if(u==null)return!1;let f=i.get(u.path);if(f!==void 0)return f;let p=wM(r,u)?.exo__Asset_uid,h=typeof p=="string"&&p.toLowerCase()===Ts.FILE_SPACE_CLASS_UID;return i.set(u.path,h),h},"isFileSpaceClassRef"),o=a(c=>c.some(l=>PI.test(l)&&l.toLowerCase()===Ts.FILE_SPACE_CLASS_UID),"hasUuidFormRef");for(let c of r.getAllFiles()){let l=wM(r,c);if(!l)continue;let u=EM(l.exo__Instance_class);if(!u.some(h=>s(h,c.path)))continue;t.push(c.path),o(u)||n.push(`FileSpace declaration ${c.path} references the class via a label-form link only \u2014 the sync layer will not pick it up; use the UUID-form wikilink [[${Ts.FILE_SPACE_CLASS_UID}]] (UID-canon)`);let f=Oee(l);if(f===null){n.push(`FileSpace declaration ${c.path} has no exo__AssetSpace_source/_git \u2014 mount path underivable, content NOT excluded from the index`);continue}let d=(0,Cee.derivePath)(f);if(d===null){n.push(`FileSpace declaration ${c.path}: cannot derive mount path from source "${f}" \u2014 content NOT excluded from the index`);continue}let p=`${d}/`;c.path.startsWith(p)&&n.push(`FileSpace declaration ${c.path} lies INSIDE its own mount ${p} \u2014 it will be excluded from the index together with the content; move the declaration outside the mount folder`),e.push(p)}return{prefixes:e,declarationPaths:t,warnings:n}}a(Pee,"discoverFileSpaceExclusions")});var eu=T(kt=>{"use strict";var Fee=kt&&kt.__decorate||function(r,e,t,n){var i=arguments.length,s=i<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(r,e,t,n);else for(var c=r.length-1;c>=0;c--)(o=r[c])&&(s=(i<3?o(s):i>3?o(e,t,s):o(e,t))||s);return i>3&&s&&Object.defineProperty(e,t,s),s},Dee=kt&&kt.__metadata||function(r,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,e)},vM=kt&&kt.__param||function(r,e){return function(t,n){e(t,n,r)}},LI;Object.defineProperty(kt,"__esModule",{value:!0});kt.NoteToRDFConverter=kt.LEGACY_YAML_KEYS=kt.LEGACY_UNPREFIXED_ASSET_FIELDS=kt.UNPREFIXED_ASSET_FIELDS=void 0;kt.canonicalYamlKey=jee;kt.isPosixBracketExpression=IM;kt.normaliseExcludedFolders=RM;kt.isPathExcluded=CM;var FI=lt(),Lr=Ai(),As=Le(),jn=He(),TM=sr(),Zt=At(),AM=Fi(),Lee=xI(),Nee=mh(),DI=Jb(),Di=OT(),kee=t_();kt.UNPREFIXED_ASSET_FIELDS=new Set(["draft","pinned","aliases"]);kt.LEGACY_UNPREFIXED_ASSET_FIELDS=new Set(["archived"]);kt.LEGACY_YAML_KEYS=new Map([...kt.LEGACY_UNPREFIXED_ASSET_FIELDS].map(r=>[`exo__Asset_${r}`,[r]]));var Mee=/^exo__Asset_(.+)$/;function jee(r){let e=Mee.exec(r);return e&&kt.UNPREFIXED_ASSET_FIELDS.has(e[1])?e[1]:kt.LEGACY_UNPREFIXED_ASSET_FIELDS.has(r)?`exo__Asset_${r}`:r}a(jee,"canonicalYamlKey");function IM(r){return/^:[^\s[\]|]+:$/.test(r)}a(IM,"isPosixBracketExpression");function RM(r){return Array.isArray(r)?r.map(e=>String(e).replace(/\\/g,"/").trim()).filter(e=>e.length>0).map(e=>e.endsWith("/")?e:`${e}/`):[]}a(RM,"normaliseExcludedFolders");function CM(r,e){if(e.length===0)return!1;let t=r.replace(/\\/g,"/");for(let n of e)if(t.startsWith(n))return!0;return!1}a(CM,"isPathExcluded");function $ee(r){if(!r)return"";let e=r.replace(/\\/g,"/");for(;e.startsWith("/");)e=e.slice(1);for(;e.endsWith("/");)e=e.slice(0,-1);return e.length>0?`${e}/`:""}a($ee,"normaliseSubjectIriPrefix");var Zl=LI=class{static{a(this,"NoteToRDFConverter")}constructor(e,t=Nee.NullLogger,n={}){this.vault=e,this.logger=t,this.BODY_WIKILINK_PATTERN=/(?<!!)\[\[([^\]|]+)(?:\|[^\]]+)?\]\]/g,this.pendingExtraTriples=[],this.preResolvedTargetFm=new Map,this.vocabularyMapper=new Lee.RDFVocabularyMapper,this.subjectIriPrefix=$ee(n.subjectIriPrefix),this.emitInstanceClassAsUid=n.emitInstanceClassAsUid??!1}async convertNote(e,t){if(t!==void 0)return this.convertNoteFromFrontmatter(e,t);let n=this.vault.getFrontmatterWithFallback?await this.vault.getFrontmatterWithFallback(e):this.vault.getFrontmatter(e);return this.convertNoteFromFrontmatter(e,n)}async convertNoteFromFrontmatter(e,t){if(!t)return[];await this.preResolveWikilinkTargets(t);let n=this.notePathToIRI(e.path),i=Zt.Namespace.EXO.term("Asset_filename"),s=new Lr.Triple(n,i,new jn.Literal(e.basename));if(Di.Exo003Parser.isExo003Format(t)){let o=await this.convertExo003Note(e,t);return[s,...o]}return this.convertLegacyNote(e,t,s)}async convertLegacyNote(e,t,n){this.pendingExtraTriples=[];let i=[n],s=this.notePathToIRI(e.path),o,c,l,u=!1,f=Zt.Namespace.EXO.term("Statement").value;for(let[m,b]of Object.entries(t)){if(kt.LEGACY_UNPREFIXED_ASSET_FIELDS.has(m)&&Object.prototype.hasOwnProperty.call(t,`exo__Asset_${m}`))continue;let _=kt.UNPREFIXED_ASSET_FIELDS.has(m)||kt.LEGACY_UNPREFIXED_ASSET_FIELDS.has(m)?`exo__Asset_${m}`:m;if(!this.isExocortexProperty(_))continue;let S=this.propertyKeyToIRI(_),A=Array.isArray(b)?b:[b];for(let w of A)if(!((m==="exo__Asset_label"||kt.UNPREFIXED_ASSET_FIELDS.has(m)||kt.LEGACY_UNPREFIXED_ASSET_FIELDS.has(m))&&(w==null||typeof w=="string"&&w.trim()==="")))if(m==="exo__Instance_class"){let E=this.valueToClassURI(w);i.push(new Lr.Triple(s,S,E))}else{let E=await this.valueToRDFObject(w,e,S);if(_==="exo__Statement_subject"&&o===void 0){let R=E.find(x=>x instanceof As.IRI);R&&(o=R)}else if(_==="exo__Statement_predicate"&&c===void 0){let R=E.find(x=>x instanceof As.IRI);R&&(c=R)}else _==="exo__Statement_object"&&l===void 0&&(l=E[0]);for(let R of E)if(i.push(new Lr.Triple(s,S,R)),this.vocabularyMapper.hasMappingFor(m)&&R instanceof As.IRI){let x=this.vocabularyMapper.generateMappedTriple(s,m,R);x&&i.push(x)}}if(m==="exo__Instance_class")for(let w of A){let E=this.valueToClassURI(w);if(E instanceof As.IRI){let R=Zt.Namespace.RDF.term("type");i.push(new Lr.Triple(s,R,E)),E.value===f&&(u=!0)}}if(m==="exo__Asset_label"){let w=Zt.Namespace.RDFS.term("label");for(let E of A)typeof E=="string"&&E.length>0&&i.push(new Lr.Triple(s,w,new jn.Literal(E)))}}let d="exo__Instance_class"in t||"exo__Asset_uid"in t,p=t.exo__Asset_label,h="exo__Asset_label"in t&&p!==null&&p!==void 0&&!(typeof p=="string"&&p.trim()==="")&&!(Array.isArray(p)&&p.length===0);if(d&&!h){let m=Zt.Namespace.RDFS.term("label"),b=Zt.Namespace.EXO.term("Asset_label"),_=new jn.Literal(e.basename);i.push(new Lr.Triple(s,m,_)),i.push(new Lr.Triple(s,b,_))}i.push(...this.pendingExtraTriples),this.pendingExtraTriples=[],u&&o&&c&&l&&i.push(new Lr.Triple(o,c,l));let g=await this.convertBodyWikilinks(e,s);return i.push(...g),i}async convertExo003Note(e,t){let n=Di.Exo003Parser.parse(t);if(!n.success||!n.metadata)return[];let i=n.metadata,s=[];switch(i.metadata){case Di.Exo003MetadataType.Namespace:break;case Di.Exo003MetadataType.Anchor:s.push(...this.convertExo003Anchor(e,i));break;case Di.Exo003MetadataType.BlankNode:s.push(...this.convertExo003BlankNode(e,i));break;case Di.Exo003MetadataType.Statement:s.push(...this.convertExo003Statement(e,i));break;case Di.Exo003MetadataType.Body:s.push(...await this.convertExo003Body(e,i));break}return s}convertExo003Anchor(e,t){let n=this.notePathToIRI(e.path),i=new As.IRI(t.uri);return[new Lr.Triple(n,Zt.Namespace.OWL.term("sameAs"),i),new Lr.Triple(i,Zt.Namespace.OWL.term("sameAs"),n)]}convertExo003BlankNode(e,t){let n=this.notePathToIRI(e.path),i=t.uri.replace(/[^a-zA-Z0-9_-]/g,"_");return[new Lr.Triple(n,Zt.Namespace.OWL.term("sameAs"),new TM.BlankNode(i))]}convertExo003Statement(e,t){let n=[];try{let i=this.createExo003ReferenceResolver(e),s=Di.Exo003Parser.toTriple(t,i);n.push(s);let o=this.notePathToIRI(e.path);n.push(new Lr.Triple(o,Zt.Namespace.RDF.term("value"),s.subject))}catch{}return n}async convertExo003Body(e,t){let n=[];try{let i=await this.vault.read(e),s=this.extractBodyContent(i),o=this.createExo003ReferenceResolver(e),c=o(t.subject),l=o(t.predicate);if(c.type==="literal")throw new Error("Body subject cannot be a literal");if(l.type!=="iri")throw new Error("Body predicate must be an IRI");let u=c.type==="iri"?new As.IRI(c.value):new TM.BlankNode(c.value),f=new As.IRI(l.value),d=Di.Exo003Parser.toLiteral(t,s.trim());n.push(new Lr.Triple(u,f,d));let p=this.notePathToIRI(e.path);n.push(new Lr.Triple(p,Zt.Namespace.RDF.term("value"),u))}catch{}return n}createExo003ReferenceResolver(e){return t=>{let n=this.extractWikilink(t),i=n||t,s=this.vault.getFirstLinkpathDest(i,e.path);if(s){let o=this.targetFrontmatter(s);if(o&&Di.Exo003Parser.isExo003Format(o)){let c=Di.Exo003Parser.parse(o);if(c.success&&c.metadata){let l=c.metadata;if(l.metadata===Di.Exo003MetadataType.Anchor||l.metadata===Di.Exo003MetadataType.Namespace)return{type:"iri",value:l.uri};if(l.metadata===Di.Exo003MetadataType.BlankNode)return{type:"blank",value:l.uri.replace(/[^a-zA-Z0-9_-]/g,"_")}}}return{type:"iri",value:this.notePathToIRI(s.path).value}}return!n&&t.includes("://")?{type:"iri",value:t}:{type:"literal",value:t}}}async convertVault(e={}){return(await this.convertVaultWithValidation({strict:!1,excludedFolders:e.excludedFolders,onFileTriples:e.onFileTriples})).triples}async convertVaultWithValidation(e={}){let t=e.files??this.vault.getAllFiles(),n=[],i=[],s=e.strict??!1,o=0,c=0,l=0,u=e.fileSpacePrefixes?{prefixes:e.fileSpacePrefixes,declarationPaths:[],warnings:[]}:(0,kee.discoverFileSpaceExclusions)(this.vault);for(let b of u.warnings)this.logger.warn(`FileSpace discovery: ${b}`);let f=[...RM(e.excludedFolders),...u.prefixes],d=f.length===0?t:t.filter(b=>!CM(b.path,f)),p=e.onProgress,h=e.progressIntervalFiles&&e.progressIntervalFiles>0?e.progressIntervalFiles:LI.INDEX_PROGRESS_INTERVAL,g=d.length,m=0;for(let b of d){if(m++,p&&m%h===0&&m<g)try{p(m,g)}catch{}try{let _=this.vault.getFrontmatterWithFallback?await this.vault.getFrontmatterWithFallback(b):this.vault.getFrontmatter(b);if(!_){let w=await this.vault.getFrontmatterParseFailure?.(b);if(w){if(s)throw new Error(`Unparseable frontmatter in "${b.path}": ${w.reason}`);i.push({path:b.path,reason:`Unparseable frontmatter: ${w.reason}`}),l++,this.logger.info(`Skipping file with unparseable frontmatter: ${b.path}`,{reason:w.reason});continue}}let S=_?this.validateExocortexAsset(_,b.basename):null;if(S){if(s)throw new Error(`Invariant violation in "${b.path}": ${S.message}`);i.push({path:b.path,reason:`Invariant violation: ${S.message}`}),o++,this.logger.info(`Skipping file with invariant violation: ${b.path}`,{code:S.code,property:S.property,reason:S.message});continue}let A=await this.convertNote(b,_);if(n.push(...A),e.onFileTriples)try{e.onFileTriples(b,A)}catch{}}catch(_){let S=_ instanceof Error?_.message:String(_);if(s)throw new Error(`Invalid IRI for file "${b.path}": ${S}`);i.push({path:b.path,reason:`Invalid IRI: ${S}`}),c++,this.logger.info(`Skipping file with invalid IRI: ${b.path}`,{reason:S})}}return o>0&&this.logger.warn(`Skipped ${o} file${o===1?"":"s"} with invariant violations during indexing (paths in developer console)`,{count:o}),l>0&&this.logger.warn(`Skipped ${l} file${l===1?"":"s"} with unparseable frontmatter during indexing (paths in developer console)`,{count:l}),c>0&&this.logger.warn(`Skipped ${c} file${c===1?"":"s"} with invalid IRI during indexing (paths in developer console)`,{count:c}),{triples:n,skippedFiles:i,summary:{total:d.length,indexed:d.length-i.length,skipped:i.length},fileSpaces:u}}static inferLabelFromBasename(e){return Zt.Namespace.fromPropertyKey(e)!==null?e:null}validateExocortexAsset(e,t){let n=a(d=>d==null?!0:typeof d=="string"?d.trim()==="":Array.isArray(d)?d.length===0||d.every(n):!1,"isEmpty");if(!("exo__Instance_class"in e||"exo__Asset_uid"in e))return null;let s=["exo__Asset_uid","exo__Instance_class"];for(let d of s){if(!(d in e))return{code:"MISSING_PROPERTY",property:d,message:`Required property "${d}" is missing`};if(n(e[d]))return{code:"EMPTY_PROPERTY",property:d,message:`Required property "${d}" is empty`}}let o=["ems__Effort_status","ems__Effort_parent","ems__Effort_lockedBy","ems__Effort_lockExpires","exo__Asset_updatedAt","ems__Effort_startTimestamp"];for(let d of o)if(d in e&&n(e[d]))return{code:"EMPTY_OPTIONAL_PROPERTY",property:d,message:`Optional property "${d}" is present but empty`};let c=e.exo__Instance_class,l=Array.isArray(c)?c:[c],u=null,f=!1;for(let d of l){if(typeof d!="string")continue;let p=this.removeQuotes(d),g=(this.extractWikilink(p)??p).trim(),m=g.indexOf("__");m>0&&Zt.Namespace.isValidPrefix(g.slice(0,m))&&/[\s()]/.test(g)?u||(u={candidate:d}):f=!0}return u&&!f?{code:"INVALID_INSTANCE_CLASS_IRI",property:"exo__Instance_class",message:`Invalid Instance_class IRI: "${u.candidate}"`}:null}async validateVault(){let e=this.vault.getAllFiles(),t=[];for(let n of e){let i=(0,DI.vaultPathToIRI)(n.path);As.IRI.isValidIRI(i)||t.push({path:n.path,reason:`Path "${n.path}" cannot be converted to a valid IRI`})}return t}notePathToIRI(e){return new As.IRI((0,DI.vaultPathToIRI)(`${this.subjectIriPrefix}${e}`))}synthesizeWikilinkTargetIRI(e){return new As.IRI((0,DI.vaultPathToIRI)(e))}isExocortexProperty(e){return Zt.Namespace.fromPropertyKey(e)!==null}propertyKeyToIRI(e){let t=Zt.Namespace.fromPropertyKey(e);if(!t)throw new Error(`Invalid property key: ${e}`);return t.namespace.term(t.localName)}emitTypeTripleForEnumInstance(e,t){let n=this.targetFrontmatter(t);if(!n)return;let i=n.exo__Instance_class,s=Array.isArray(i)?i[0]:i;if(typeof s!="string")return;let o=this.valueToClassURI(s);o instanceof As.IRI&&(this.pendingExtraTriples.push(new Lr.Triple(e,Zt.Namespace.RDF.term("type"),o)),this.pendingExtraTriples.push(new Lr.Triple(e,Zt.Namespace.EXO.term("Instance_class"),o)))}async valueToRDFObject(e,t,n){if(typeof e=="string"){let i=this.removeQuotes(e);if(n?.value.endsWith("#TokenInvocation_parameter"))return[new jn.Literal(i)];let s=this.extractWikilink(i);if(s){let o=this.vault.getFirstLinkpathDest(s,t.path);if(o){let l=this.notePathToIRI(o.path),u=s.includes("|")?s.split("|")[0]:s;if(this.isUUID(u)){let d=new jn.Literal(u);if(n?.value.endsWith("#Grounding_targetValueRef")||n?.value.endsWith("#Grounding_targetValueSubstitution")||n?.value.endsWith("#Grounding_targetClass")||n?.value.endsWith("#Grounding_type")||n?.value.endsWith("#PropertyDefault_value"))return[l];let h=this.expandClassValue(o.basename);if(h)return this.emitTypeTripleForEnumInstance(h,o),[h];let g=this.targetFrontmatter(o);if(g){let A=g.exo__Asset_label;if(typeof A=="string"){let w=this.expandClassValue(A);if(w)return this.emitTypeTripleForEnumInstance(w,o),[w]}}let m=n?.value.endsWith("#Asset_prototype")||n?.value.endsWith("/Asset_prototype"),_=((typeof process<"u"?process.env:void 0)?.EXOCORTEX_DUAL_STORAGE_PREDICATES??"").split(",").map(A=>A.trim()).filter(Boolean),S=_.length>0&&_.some(A=>n?.value.endsWith(`#${A}`));return m||S?[l,d]:[l]}let f=this.expandClassValue(o.basename);return f?(this.emitTypeTripleForEnumInstance(f,o),[f]):[l]}if(this.isClassReference(s)){let l=this.expandClassValue(s);if(l)return[l]}let c=s.includes("|")?s.split("|")[0]:s;return this.isUUID(c)?[this.synthesizeWikilinkTargetIRI(`${c}.md`)]:[new jn.Literal(i)]}if(this.isClassReference(i)){let o=this.expandClassValue(i);if(o)return[o]}return this.isISO8601DateTime(i)?[new jn.Literal(i,Zt.Namespace.XSD.term("dateTime"))]:[new jn.Literal(i)]}return typeof e=="boolean"?[new jn.Literal(e.toString())]:typeof e=="number"?[new jn.Literal(e.toString(),Number.isInteger(e)?Zt.Namespace.XSD.term("integer"):Zt.Namespace.XSD.term("decimal"))]:e instanceof Date?[new jn.Literal(e.toISOString(),Zt.Namespace.XSD.term("dateTime"))]:[new jn.Literal(String(e))]}isISO8601DateTime(e){return/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,3})?(Z|[+-]\d{2}:\d{2})?$/.test(e)}removeQuotes(e){let t=e.trim();return t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")?t.substring(1,t.length-1):e}extractWikilink(e){let t=e.match(/^\[\[([^\]]+)\]\]$/);if(!t)return null;let n=t[1];return n.includes("|")?n.split("|")[0]:n}extractWikilinkAlias(e){let t=e.match(/^\[\[([^\]]+)\]\]$/);if(!t)return null;let n=t[1],i=n.indexOf("|");return i>=0?n.substring(i+1).trim():null}targetFrontmatter(e){return this.vault.getFrontmatter(e)??this.preResolvedTargetFm.get(e.path)??null}async preResolveWikilinkTargets(e){let t=this.vault.getFrontmatterWithFallback?.bind(this.vault);if(t)for(let n of Object.values(e)){let i=Array.isArray(n)?n:n==null?[]:[n];for(let s of i){if(typeof s!="string")continue;let o=this.removeQuotes(s),c=this.extractWikilink(o);if(!c||!this.isUUID(c))continue;let l=this.vault.getFirstLinkpathDest(c,"");!l||this.preResolvedTargetFm.has(l.path)||this.vault.getFrontmatter(l)||this.preResolvedTargetFm.set(l.path,await t(l))}}}valueToClassURI(e){if(typeof e!="string")return new jn.Literal(String(e));let t=this.removeQuotes(e),i=this.extractWikilink(t)||t,s=this.expandClassValue(i);if(s)return s;let o=this.extractWikilinkAlias(t);if(o){let c=this.expandClassValue(o);if(c)return c}if(this.isUUID(i)){let c=this.vault.getFirstLinkpathDest(i,"");if(c){let l=this.expandClassValue(c.basename);if(l)return this.emitInstanceClassAsUid?this.notePathToIRI(c.path):l;let u=this.targetFrontmatter(c);if(u){let f=u.exo__Asset_label;if(typeof f=="string"){let d=this.expandClassValue(f);if(d)return this.emitInstanceClassAsUid?this.notePathToIRI(c.path):d}}return this.notePathToIRI(c.path)}}return new jn.Literal(t)}isClassReference(e){return/\s/.test(e)?!1:Zt.Namespace.fromPropertyKey(e)!==null}isUUID(e){return/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)}expandClassValue(e){let t=this.removeQuotes(e),n=Zt.Namespace.fromPropertyKey(t);return!n||/[\s()]/.test(n.localName)?null:n.namespace.term(n.localName)}extractBodyContent(e){let t=e.charCodeAt(0)===65279?e.slice(1):e,n=/^---\r?\n[\s\S]*?\r?\n---\r?\n?/;return t.replace(n,"")}extractBodyWikilinks(e){let t=new Set,n,i=new RegExp(this.BODY_WIKILINK_PATTERN.source,"g");for(;(n=i.exec(e))!==null;)n[1]&&!IM(n[1].trim())&&t.add(n[1]);return Array.from(t)}async convertBodyWikilinks(e,t){let n=[];try{let i=await this.vault.read(e),s=this.extractBodyContent(i),o=this.extractBodyWikilinks(s),c=Zt.Namespace.EXO.term("Asset_bodyLink");for(let l of o){let u=this.vault.getFirstLinkpathDest(l,e.path);if(u){let f=this.notePathToIRI(u.path);n.push(new Lr.Triple(t,c,f))}else if(this.isClassReference(l)){let f=this.expandClassValue(l);f?n.push(new Lr.Triple(t,c,f)):n.push(new Lr.Triple(t,c,new jn.Literal(l)))}else n.push(new Lr.Triple(t,c,new jn.Literal(l)))}}catch{}return n}};kt.NoteToRDFConverter=Zl;Zl.INDEX_PROGRESS_INTERVAL=200;Zl.SkippedFileInfo=class{constructor(r,e){this.path=r,this.reason=e}};Zl.VaultValidationResult=class{constructor(r,e,t){this.triples=r,this.skippedFiles=e,this.summary=t}};Zl.VaultValidationOptions=class{constructor(r=!1){this.strict=r}};kt.NoteToRDFConverter=Zl=LI=Fee([(0,FI.injectable)(),vM(0,(0,FI.inject)(AM.DI_TOKENS.IVaultAdapter)),vM(1,(0,FI.inject)(AM.DI_TOKENS.ILogger)),Dee("design:paramtypes",[Object,Object,Object])],Zl)});var tu=T(n_=>{"use strict";Object.defineProperty(n_,"__esModule",{value:!0});n_.FrontmatterService=void 0;var xM=Yb(),r_=gc(),Jf=eu(),Uee=At(),Zf=class r{static{a(this,"FrontmatterService")}parse(e){let t=e.match(r.FRONTMATTER_REGEX);return t?{exists:!0,content:t[1],originalContent:e}:{exists:!1,content:"",originalContent:e}}static splitFlowSequence(e){let t=[],n="",i=null,s=0;for(let c=0;c<e.length;c++){let l=e[c];if(i!==null){if(n+=l,l==="\\"&&i==='"'){n+=e[++c]??"";continue}l===i&&(i=null);continue}if(l==='"'||l==="'"){i=l,n+=l;continue}if(l==="["||l==="{"){s++,n+=l;continue}if(l==="]"||l==="}"){if(s--,s<0)return null;n+=l;continue}if(l===","&&s===0){t.push(n.trim()),n="";continue}n+=l}if(i!==null||s!==0)return null;let o=n.trim();return o!==""&&t.push(o),t}parseObject(e){let t=this.parse(e);if(!t.exists)return null;let n={},i=t.content.split(/\r?\n/),s=null,o=null,c=[],l=null,u=a(()=>{s!==null&&o!==null&&(n[s]=o),s=null,o=null,c=[]},"flushArray");for(let f of i){if(l!==null){if(f.trim()===""){c.push(f);continue}if(/^[ \t]/.test(f)){n[l]=[n[l],...c,f].join(`
120
120
  `),c=[];continue}l=null,c=[]}let d=r.ARRAY_ITEM_LINE.exec(f);if(d){s!==null&&o!==null&&o.push(d[1].trim()),c=[];continue}let p=o!==null&&o.length>0?o:null,h=p!==null&&r.BLOCK_SCALAR_HEADER.test(p[p.length-1].split(`
121
121
  `,1)[0]);if(f.trim()===""){if(p!==null){c.push(f);continue}u();continue}if(o!==null&&!h&&/^[ \t]+#/.test(f)){c=[];continue}if(p!==null&&/^[ \t]/.test(f)){let _=p.length-1;p[_]=[p[_],...c,f].join(`
122
122
  `),c=[];continue}u();let g=/^([^:\s][^:]*):\s*(.*)$/.exec(f);if(!g)continue;let m=g[1].trim(),b=g[2].trim();if(b===""){s=m,o=[];continue}if(r.BLOCK_SCALAR_HEADER.test(b)){n[m]=b,l=m;continue}if(b.startsWith("[")&&b.endsWith("]")&&!b.startsWith("[[")){let _=r.splitFlowSequence(b.slice(1,-1));if(_!==null){n[m]=_;continue}}n[m]=b}return u(),n}updateProperty(e,t,n){t=(0,Jf.canonicalYamlKey)(r.normalizeIRI(t)),typeof n=="string"&&(n=r.normalizeIRIValue(n));let i=this.parse(e),s=this.serializeValue(t,n);if(!i.exists)return`---
@@ -716,7 +716,7 @@ Next steps:
716
716
  `).map(n=>n.trim()).filter(n=>n.length>0),t=e[e.length-1];if(t!==void 0)try{return JSON.parse(t)}catch{return}}a(OEe,"parseLastJsonLine");function dq(r,e){return e.filter(t=>{let n=r[t];return typeof n!="string"||n.trim().length===0})}a(dq,"missingStringFields");var gv=class{constructor(e){this.deps=e}static{a(this,"McpServer")}async handle(e){if(typeof e!="object"||e===null||Array.isArray(e))return{jsonrpc:"2.0",id:null,error:{code:fq,message:"Invalid request: expected a JSON-RPC object"}};let t=e.id,n=t===void 0;if(typeof e.method!="string")return n?null:{jsonrpc:"2.0",id:t??null,error:{code:fq,message:"Invalid request: missing method"}};if(n)return null;let i=t??null;switch(e.method){case"initialize":return{jsonrpc:"2.0",id:i,result:{protocolVersion:CEe,capabilities:{tools:{}},serverInfo:{name:"exocortex",version:this.deps.version}}};case"ping":return{jsonrpc:"2.0",id:i,result:{}};case"tools/list":return{jsonrpc:"2.0",id:i,result:{tools:uq}};case"tools/call":return{jsonrpc:"2.0",id:i,result:await this.callTool(e.params??{})};default:return{jsonrpc:"2.0",id:i,error:{code:xEe,message:`Method not found: ${e.method}`}}}}async callTool(e){let t=e.name,n=e.arguments??{},i;if(t==="create_asset"){let c=dq(n,["vault","class","label"]);if(c.length>0)return Lp(`create_asset: missing required argument(s): ${c.join(", ")}`,!0);let l=aq(n);if(l!==null)return Lp(`create_asset: ${l}`,!0);i=cq(n)}else if(t==="create_effort"){let c=dq(n,["vault","command","target"]);if(c.length>0)return Lp(`create_effort: missing required argument(s): ${c.join(", ")}`,!0);i=lq(n)}else return Lp(`Unknown tool: ${String(t)}`,!0);let s=await this.deps.runCli(i);if(s.exitCode!==0){let c=s.stderr.trim()||s.stdout.trim()||"(no diagnostic output)";return Lp(`exocortex-cli exited ${s.exitCode}
717
717
  ${c}`,!0)}let o=OEe(s.stdout);return Lp(o===void 0?s.stdout.trim():JSON.stringify(o))}};var mq=require("child_process");var PEe=32*1024*1024;function gq(r){return e=>new Promise(t=>{(0,mq.execFile)(process.execPath,[r,...e],{maxBuffer:PEe},(n,i,s)=>{let o=0;if(n){let c=n.code;o=typeof c=="number"?c:1}t({stdout:i,stderr:s,exitCode:o})})})}a(gq,"createSelfCliRunner");async function FEe(r,e,t){let n=(0,yq.createInterface)({input:e,crlfDelay:1/0});for await(let i of n){let s=i.trim();if(s.length===0)continue;let o;try{o=JSON.parse(s)}catch{t(JSON.stringify({jsonrpc:"2.0",id:null,error:{code:pq,message:"Parse error: invalid JSON"}})+`
718
718
  `);continue}let c;try{c=await r.handle(o)}catch(l){c={jsonrpc:"2.0",id:typeof o?.id=="string"||typeof o?.id=="number"?o.id:null,error:{code:hq,message:`Internal error: ${l instanceof Error?l.message:String(l)}`}}}c!==null&&t(JSON.stringify(c)+`
719
- `)}}a(FEe,"runStdioServer");function bq(r){return new de("mcp").description("Run an MCP (Model Context Protocol) stdio server exposing create_asset / create_effort tools backed by this CLI").option("--entry <path>","Path to the CLI entry script the tools invoke (defaults to this process's script)").action(async e=>{let t=e.entry??process.argv[1],n=new gv({runCli:gq(t),version:r??"unknown"});await FEe(n,process.stdin,i=>process.stdout.write(i))})}a(bq,"mcpCommand");function yv(r){let e=new de;return e.name("exocortex").description("CLI tool for Exocortex knowledge management system - SPARQL queries, task management, and more").version(r??"17.7.5"),e.addCommand(BV()),e.addCommand(QV()),e.addCommand(_7()),e.addCommand(v7()),e.addCommand(q7()),e.addCommand(T7()),e.addCommand(x7()),e.addCommand(O7()),e.addCommand(J7()),e.addCommand(nV()),e.addCommand(vV()),e.addCommand(CV()),e.addCommand(FV()),e.addCommand(DV()),e.addCommand(NV()),e.addCommand(MV()),e.addCommand(jV()),e.addCommand(SG()),e.addCommand(vG()),e.addCommand(YG()),e.addCommand(QG()),e.addCommand(eq()),e.addCommand(tq()),e.addCommand(iq()),e.addCommand(jG()),e.addCommand(zG()),e.addCommand(sq()),e.addCommand(bq(r??"17.7.5")),e}a(yv,"createProgram");yv().parse();0&&(module.exports={createProgram});
719
+ `)}}a(FEe,"runStdioServer");function bq(r){return new de("mcp").description("Run an MCP (Model Context Protocol) stdio server exposing create_asset / create_effort tools backed by this CLI").option("--entry <path>","Path to the CLI entry script the tools invoke (defaults to this process's script)").action(async e=>{let t=e.entry??process.argv[1],n=new gv({runCli:gq(t),version:r??"unknown"});await FEe(n,process.stdin,i=>process.stdout.write(i))})}a(bq,"mcpCommand");function yv(r){let e=new de;return e.name("exocortex").description("CLI tool for Exocortex knowledge management system - SPARQL queries, task management, and more").version(r??"17.7.7"),e.addCommand(BV()),e.addCommand(QV()),e.addCommand(_7()),e.addCommand(v7()),e.addCommand(q7()),e.addCommand(T7()),e.addCommand(x7()),e.addCommand(O7()),e.addCommand(J7()),e.addCommand(nV()),e.addCommand(vV()),e.addCommand(CV()),e.addCommand(FV()),e.addCommand(DV()),e.addCommand(NV()),e.addCommand(MV()),e.addCommand(jV()),e.addCommand(SG()),e.addCommand(vG()),e.addCommand(YG()),e.addCommand(QG()),e.addCommand(eq()),e.addCommand(tq()),e.addCommand(iq()),e.addCommand(jG()),e.addCommand(zG()),e.addCommand(sq()),e.addCommand(bq(r??"17.7.7")),e}a(yv,"createProgram");yv().parse();0&&(module.exports={createProgram});
720
720
  /*! Bundled license information:
721
721
 
722
722
  reflect-metadata/Reflect.js:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kitelev/exocortex-cli",
3
- "version": "17.7.5",
3
+ "version": "17.7.7",
4
4
  "description": "CLI tool for Exocortex knowledge management system - SPARQL queries, task management, and more",
5
5
  "main": "dist/index.js",
6
6
  "bin": {