@kitelev/exocortex-cli 16.224.2 → 16.224.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +3 -3
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
// @kitelev/exocortex-cli v16.224.
|
|
2
|
+
// @kitelev/exocortex-cli v16.224.3
|
|
3
3
|
// CLI tool for Exocortex knowledge management system - SPARQL queries, task management, and more
|
|
4
4
|
// License: MIT
|
|
5
5
|
|
|
@@ -68,7 +68,7 @@ ${r}}`}default:throw new bu(`Unsupported operation type for SPARQL generation: $
|
|
|
68
68
|
`)}generateTriple(e){let t=this.generateElement(e.subject),r=this.generatePredicate(e.predicate),i=this.generateElement(e.object);return`${t} ${r} ${i}`}generatePredicate(e){return"pathType"in e?this.generatePropertyPath(e):this.generateElement(e)}generatePropertyPath(e){let t=e.items.map(r=>"pathType"in r?`(${this.generatePropertyPath(r)})`:`<${r.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 r=`"${e.value.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t")}"`;return e.language?r+=`@${e.language}`:e.datatype&&(r+=`^^<${e.datatype}>`),r}case"blank":return`_:${e.value}`;default:throw new bu(`Unknown element type: ${e.type}`)}}generateValues(e,t){let r=" ".repeat(t);if(e.variables.length===0||e.bindings.length===0)return"";if(e.variables.length===1){let o=e.variables[0],l=e.bindings.map(c=>{let u=c[o];return u?this.generateValuesTerm(u):"UNDEF"}).join(" ");return`${r}VALUES ?${o} { ${l} }`}let i=e.variables.map(o=>`?${o}`).join(" "),s=e.bindings.map(o=>`(${e.variables.map(c=>{let u=o[c];return u?this.generateValuesTerm(u):"UNDEF"}).join(" ")})`);return`${r}VALUES (${i}) {
|
|
69
69
|
${s.map(o=>`${r} ${o}`).join(`
|
|
70
70
|
`)}
|
|
71
|
-
${r}}`}generateValuesTerm(e){if(e.type==="iri")return`<${e.value}>`;let r=`"${e.value.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`;return e.language?r+=`@${e.language}`:e.datatype&&(r+=`^^<${e.datatype}>`),r}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(r=>this.generateExpression(r)).join(", ")})`;case"exists":return`${e.negated?"NOT EXISTS":"EXISTS"} { ${this.generateWhereClause(e.pattern,0)} }`;case"in":{let t=this.generateExpression(e.expression),r=e.list.map(i=>this.generateExpression(i)).join(", ");return e.negated?`${t} NOT IN (${r})`:`${t} IN (${r})`}default:throw new bu(`Unknown expression type: ${e.type}`)}}collectVariablesFromOperation(e,t){switch(e.type){case"bgp":for(let r of e.triples)this.collectVariablesFromTriple(r,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 r of e.variables)t.add(r);break;case"project":for(let r of e.variables)t.add(r);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 r of e.variables)t.add(r);for(let r of e.aggregates)t.add(r.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 r of e.operands)this.collectVariablesFromExpression(r,t);break;case"function":case"functionCall":for(let r of e.args)this.collectVariablesFromExpression(r,t);break;case"exists":this.collectVariablesFromOperation(e.pattern,t);break;case"in":this.collectVariablesFromExpression(e.expression,t);for(let r of e.list)this.collectVariablesFromExpression(r,t);break}}};Su.SPARQLGenerator=HE});var Eu=v(ti=>{"use strict";var aW=ti&&ti.__createBinding||(Object.create?(function(n,e,t,r){r===void 0&&(r=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(n,r,i)}):(function(n,e,t,r){r===void 0&&(r=t),n[r]=e[t]})),lW=ti&&ti.__setModuleDefault||(Object.create?(function(n,e){Object.defineProperty(n,"default",{enumerable:!0,value:e})}):function(n,e){n.default=e}),W3=ti&&ti.__importStar||(function(){var n=a(function(e){return n=Object.getOwnPropertyNames||function(t){var r=[];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[r.length]=i);return r},n(e)},"ownKeys");return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r=n(e),i=0;i<r.length;i++)r[i]!=="default"&&aW(t,e,r[i]);return lW(t,e),t}})();Object.defineProperty(ti,"__esModule",{value:!0});ti.QueryExecutor=ti.ExoQLQueryExecutor=ti.QueryExecutorError=void 0;var cW=hE(),uW=ry(),fW=FE(),dW=NE(),pW=O3(),hW=D3(),mW=k3(),gW=qE(),yW=j3(),_W=U3(),bW=q3(),SW=G3(),wW=ze(),EW=tt(),vW=Yg(),ln="http://www.w3.org/2001/XMLSchema#",TW=new Set([`${ln}integer`,`${ln}decimal`,`${ln}float`,`${ln}double`,`${ln}nonPositiveInteger`,`${ln}negativeInteger`,`${ln}long`,`${ln}int`,`${ln}short`,`${ln}byte`,`${ln}nonNegativeInteger`,`${ln}unsignedLong`,`${ln}unsignedInt`,`${ln}unsignedShort`,`${ln}unsignedByte`,`${ln}positiveInteger`]),wu=class extends Error{static{a(this,"QueryExecutorError")}constructor(e,t){super(e,t?{cause:t}:void 0),this.name="QueryExecutorError"}};ti.QueryExecutorError=wu;var uy=class{static{a(this,"ExoQLQueryExecutor")}constructor(e,t={}){let r=t.resolveClassHierarchy===!1?e:new bW.ClassHierarchyResolvingStore(e);this.tripleStore=r,this.bgpExecutor=new cW.BGPExecutor(r),this.filterExecutor=new uW.FilterExecutor,this.optionalExecutor=new fW.OptionalExecutor,this.unionExecutor=new dW.UnionExecutor,this.minusExecutor=new pW.MinusExecutor,this.valuesExecutor=new hW.ValuesExecutor,this.aggregateExecutor=new mW.AggregateExecutor,this.constructExecutor=new gW.ConstructExecutor,this.serviceExecutor=new yW.ServiceExecutor(t.serviceConfig),this.graphExecutor=new _W.GraphExecutor(r),this.sparqlGenerator=new SW.SPARQLGenerator,this.filterExecutor.setExistsEvaluator(async(i,s)=>this.evaluateExistsPattern(i,s)),this.filterExecutor.setTripleStore(r)}async evaluateExistsPattern(e,t){for await(let r of this.execute(e))if(t.merge(r)!==null)return!0;return!1}async executeAll(e){let t=[];for await(let r of this.execute(e))t.push(r);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 wu(`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 r=new Set;for(let o of t)for(let l of o.variables())r.add(l);let i=this.collectOperationVariables(e.right);if([...r].some(o=>i.has(o)))for(let o of t){let l=this.substituteVariables(e.right,o);for await(let c of this.execute(l)){let u=o.merge(c);u!==null&&(yield u)}}else{let o=[];for await(let l of this.execute(e.right))o.push(l);for(let l of t)for(let c of o){let u=l.merge(c);u!==null&&(yield u)}}}async*executeLeftJoin(e){let t=[];for await(let o of this.execute(e.left))t.push(o);let r=[];for await(let o of this.execute(e.right))r.push(o);async function*i(){for(let o of t)yield o}a(i,"leftGen");async function*s(){for(let o of r)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 r=[];for await(let o of this.execute(e.right))r.push(o);async function*i(){for(let o of t)yield o}a(i,"leftGen");async function*s(){for(let o of r)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 r=[];for await(let o of this.execute(e.right))r.push(o);async function*i(){for(let o of t)yield o}a(i,"leftGen");async function*s(){for(let o of r)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(()=>W3(Ro())),r=new Set(e.variables);for await(let i of this.execute(e.input)){let s=new t;for(let o of i.variables())if(r.has(o)){let l=i.get(o);l!==void 0&&s.set(o,l)}yield s}}async*executeOrderBy(e){let t=[];for await(let r of this.execute(e.input))t.push(r);t.sort((r,i)=>{for(let s of e.comparators){let o=this.getExpressionValue(s.expression,r),l=this.getExpressionValue(s.expression,i),c=0;if(o===void 0&&l===void 0?c=0:o===void 0?c=1:l===void 0?c=-1:typeof o=="number"&&typeof l=="number"?c=o-l:c=String(o).localeCompare(String(l)),s.descending&&(c=-c),c!==0)return c}return 0});for(let r of t)yield r}async*executeSlice(e){let t=0,r=e.offset??0,i=e.limit;for await(let s of this.execute(e.input)){if(t>=r){if(i!==void 0&&t-r>=i)break;yield s}t++}}async*executeDistinct(e){let t=new Set;for await(let r of this.execute(e.input)){let i=this.getSolutionKey(r);t.has(i)||(t.add(i),yield r)}}async*executeReduced(e){let t=new Set;for await(let r of this.execute(e.input)){let i=this.getSolutionKey(r);t.has(i)||(t.add(i),yield r)}}async*executeGroup(e){let t=[];for await(let i of this.execute(e.input))t.push(i);let r=this.aggregateExecutor.execute(e,t);if(e.having&&e.having.length>0)for(let i of r)e.having.every(o=>this.filterExecutor.evaluateExpression(o,i)===!0)&&(yield i);else for(let i of r)yield i}async*executeExtend(e){let t=e.expression.type!=="aggregate"&&this.filterExecutor.expressionContainsExists(e.expression);for await(let r of this.execute(e.input)){let i=r.clone(),s=t?await this.evaluateExtendExpressionAsync(e.expression,r):this.evaluateExtendExpression(e.expression,r);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 r of this.execute(e.left))t.push(r);for(let r of t){let i=this.substituteVariables(e.right,r);for await(let s of this.execute(i)){let o=r.merge(s);o!==null&&(yield o)}}}substituteVariables(e,t){let r=JSON.parse(JSON.stringify(e));return this.substituteInOperation(r,t)}substituteInOperation(e,t){if(!e||typeof e!="object")return e;let r=e;return e.type==="bgp"&&e.triples?(e.triples=e.triples.map(i=>this.substituteInTriple(i,t)),e):(r.input&&(r.input=this.substituteInOperation(r.input,t)),r.left&&(r.left=this.substituteInOperation(r.left,t)),r.right&&(r.right=this.substituteInOperation(r.right,t)),r.pattern&&(r.pattern=this.substituteInOperation(r.pattern,t)),r.query&&(r.query=this.substituteInOperation(r.query,t)),r.where&&(r.where=this.substituteInOperation(r.where,t)),r.expression&&this.substituteInExpression(r.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.left&&this.substituteInExpression(e.left,t),e.right&&this.substituteInExpression(e.right,t),e.operands)for(let r of e.operands)this.substituteInExpression(r,t);if(e.args)for(let r of e.args)this.substituteInExpression(r,t);if(e.expression&&this.substituteInExpression(e.expression,t),e.list)for(let r of e.list)this.substituteInExpression(r,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 r=t.get(e.value);if(r!=null){let i=r;if(r instanceof wW.IRI||i.termType==="NamedNode")return{type:"iri",value:r.value};if(i.termType==="Literal"||typeof i.value=="string")return{type:"literal",value:i.value,datatype:i.datatype?.value??i._datatype?.value,language:i.language??i._language}}}return e}async*executeService(e){yield*this.serviceExecutor.execute(e,t=>this.sparqlGenerator.generateSelect(t))}async*executeGraph(e){let t=async function*(r,i){let s=this.currentGraphContext;this.currentGraphContext=i;try{r.type==="bgp"&&i&&this.tripleStore.matchInGraph?yield*this.executeBGPInGraph(r,i):yield*this.execute(r)}finally{this.currentGraphContext=s}}.bind(this);yield*this.graphExecutor.execute(e,t)}async*executeBGPInGraph(e,t){if(e.triples.length===0){let{SolutionMapping:r}=await Promise.resolve().then(()=>W3(Ro()));yield new r;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 r=t.get(e.name);if(!r)return;if(r instanceof EW.Literal){let i=r.datatype?.value;if(i===`${ln}dayTimeDuration`)try{return vW.DateTimeFunctions.parseDayTimeDuration(r.value)}catch{return r.value}if(i&&TW.has(i)){let s=parseFloat(r.value);if(!Number.isNaN(s))return s}return r.value}return r.value??r.id??String(r)}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 r=e;if(r.type==="bgp"&&r.triples)for(let i of r.triples)this.collectVarsFromElement(i.subject,t),i.predicate?.type!=="path"&&this.collectVarsFromElement(i.predicate,t),this.collectVarsFromElement(i.object,t);if(r.type==="values"&&r.variables)for(let i of r.variables)t.add(i);r.expression&&this.collectVarsFromExpressionTree(r.expression,t),r.type==="extend"&&r.variable&&t.add(r.variable),r.input&&this.collectVarsFromOperation(r.input,t),r.left&&this.collectVarsFromOperation(r.left,t),r.right&&this.collectVarsFromOperation(r.right,t),r.pattern&&this.collectVarsFromOperation(r.pattern,t),r.query&&this.collectVarsFromOperation(r.query,t),r.where&&this.collectVarsFromOperation(r.where,t)}collectVarsFromElement(e,t){if(!e||typeof e!="object")return;let r=e;r.type==="variable"&&t.add(r.value),r.type==="quoted"&&(this.collectVarsFromElement(r.subject,t),this.collectVarsFromElement(r.predicate,t),this.collectVarsFromElement(r.object,t))}collectVarsFromExpressionTree(e,t){if(!e||typeof e!="object")return;let r=e;if(r.type==="variable"&&r.name&&t.add(r.name),r.type==="exists"&&r.pattern&&this.collectVarsFromOperation(r.pattern,t),r.left&&this.collectVarsFromExpressionTree(r.left,t),r.right&&this.collectVarsFromExpressionTree(r.right,t),r.operands)for(let i of r.operands)this.collectVarsFromExpressionTree(i,t);if(r.args)for(let i of r.args)this.collectVarsFromExpressionTree(i,t);if(r.expression&&this.collectVarsFromExpressionTree(r.expression,t),r.list)for(let i of r.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 wu("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 wu("executeAsk requires an ASK operation");for await(let t of this.execute(e.where))return!0;return!1}};ti.ExoQLQueryExecutor=uy;ti.QueryExecutor=uy});var Z3=v(Co=>{"use strict";var AW=Co&&Co.__decorate||function(n,e,t,r){var i=arguments.length,s=i<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(n,e,t,r);else for(var l=n.length-1;l>=0;l--)(o=n[l])&&(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},IW=Co&&Co.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)};Object.defineProperty(Co,"__esModule",{value:!0});Co.CommandResolver=void 0;var xW=ut(),RW=Fd(),ar=ze(),Gt=tt(),re=Vt(),H3=Sa(),z3=pd(),CW=Vc(),OW=Ld(),vu=ow(),fy=NP(),PW=Jc(),DW=nu(),FW=Eu(),Hl=10,dy="exo__Asset",LW=Hl+1,K3="08cec529-90eb-4d43-88de-ceecccea12b0",NW=re.Namespace.EXOCMD.term("SubstitutionToken").value,Y3=new Set(["today","tomorrow","todayStart","targetFolder","target","randomUUIDv4","nowTimestamp","nowDate","nowYear","nowMonth","userInputLabel","userInput","targetProperty","targetRefProperty","labelAsArray","groundingTargetClass","targetClassSelf"]);function kW(n,e){return`__SUBSTITUTE__${n}__${e}__`}a(kW,"buildSubstitutionMarker");function MW(n,e,t){let r=(0,CW.utf8ToBase64)(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"");return`__SUBSTITUTE_P__${n}__${e}__${r}__`}a(MW,"buildParameterisedMarker");var Q3="3f28af98-c031-4718-8ba2-44ad0b012c52",jW=re.Namespace.EXOCMD.term("TokenInvocation").value,X3="29e2c8f8-2d27-4e58-b467-2e85d46f8122",J3="universal-default-template",zE=class{static{a(this,"CommandResolver")}clearUniversalCache(){this._universalCacheReady=!1,this._universalCacheValue=null,(0,fy.clearUniversalDefault)()}constructor(e,t=RW.NullLogger){this.tripleStore=e,this.logger=t,this.cache=new Map,this.multiCache=new Map,this._ancestorDepthCache=new Map,this._legacyPropertyDefaultsWarnedGroundings=new Set,this._universalCacheReady=!1,this._universalCacheValue=null}async resolveForAssetMulti(e,t,r){if(t.length===0)return[];let i=[...t].sort().join(","),s=`${e}::${i}::${r??""}`,o=this.multiCache.get(s);if(o)return o;let l=r?await this.expandPrototypeChain(r):void 0,c=await this.expandClassHierarchy(t),u=new Map;for(let[h,_]of c){let y=await this.resolveForAsset(e,h,l);for(let b of y){let S=this.getBindingPriority(b.binding)===2?_:0,I=u.get(b.binding.id);(!I||S<I.depth)&&u.set(b.binding.id,{rc:b,depth:S})}}let f=new Set;for(let{rc:h}of u.values())if(h.binding.overrides)for(let _ of h.binding.overrides)f.add(_);let d=Array.from(u.entries()).filter(([h])=>!f.has(h)).map(([,h])=>h);d.sort((h,_)=>{let y=this.getBindingPriority(h.rc.binding),b=this.getBindingPriority(_.rc.binding);return y!==b?y-b:h.depth!==_.depth?h.depth-_.depth:(h.rc.binding.order??100)-(_.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 l of e){if(l===dy){t.set(l,new Set);continue}let c=[];try{c=await this.getClassAncestors(l)}catch{c=[]}t.set(l,new Set(c))}let r=a(l=>{for(let c of e)if(c!==l&&t.get(c)?.has(l)&&!t.get(l)?.has(c))return!0;return!1},"isAncestorOfSibling"),i=e.filter(l=>!r(l)),s=new Map,o=a((l,c)=>{let u=s.get(l);(u===void 0||c<u)&&s.set(l,c)},"setMin");for(let l of i){if(o(l,0),this.looksLikeUUID(l))try{let u=await this.resolveLabelByUID(l);u&&o(u,0)}catch{}if(l===dy)continue;let c=[];try{c=await this.getClassAncestorsWithDepth(l)}catch{c=[]}for(let{ref:u,depth:f}of c)o(u,f)}return s.has(dy)||s.set(dy,LW),s}async resolveForAsset(e,t,r){let i=typeof r=="string"?`s:${r}`:r?`c:${r.join("\0")}`:"",s=`${e}:${t}:${i}`,o=this.cache.get(s);if(o)return o;let l=typeof r=="string"?await this.expandPrototypeChain(r):r,c=await this.findBindings(t,l,e),u=[];for(let f of c){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 r=await this.findSubjectByUID(e);if(!r||(await this.tripleStore.match(r,re.Namespace.RDF.term("type"),re.Namespace.EXOCMD.term("Command"))).length===0)return null;let s=await this.getLiteralValue(r,re.Namespace.EXO.term("Asset_label"))??"Unknown Command",o=await this.getLiteralValue(r,re.Namespace.EXOCMD.term("Command_labelTemplate")),l=await this.getLiteralValue(r,re.Namespace.EXOCMD.term("Command_icon")),c=await this.getLiteralValue(r,re.Namespace.EXOCMD.term("Command_confirmMessage")),u=await this.getLiteralValue(r,re.Namespace.EXOCMD.term("Command_successMessage")),f=await this.getLiteralValue(r,re.Namespace.EXOCMD.term("Command_category")),d=await this.getLiteralValue(r,re.Namespace.EXOCMD.term("Command_openInSameTab")),p=d!==null&&String(d).trim().toLowerCase()==="true",h=await this.loadLinkedPrecondition(r),_=await this.loadLinkedGrounding(r,0,t);return _?{id:e,name:s,labelTemplate:o??void 0,icon:l??void 0,precondition:h??void 0,grounding:_,confirmMessage:c??void 0,successMessage:u??void 0,category:f??void 0,openInSameTab:p||void 0}:null}async findBindings(e,t,r){let i=typeof t=="string"?await this.expandPrototypeChain(t):t,s=await this.tripleStore.match(void 0,re.Namespace.RDF.term("type"),re.Namespace.EXOCMD.term("CommandBinding")),o=[];for(let l of s){let c=l.subject,u=await this.loadBindingDefinition(c);u&&this.bindingMatches(u,e,i,r)&&o.push(u)}return o}async findPaletteEnabledCommands(){let e=await this.tripleStore.match(void 0,re.Namespace.RDF.term("type"),re.Namespace.EXOCMD.term("Command")),t=[],r=new Set;for(let i of e){let s=i.subject;if((await this.getLiteralValue(s,re.Namespace.EXOCMD.term("Command_paletteEnabled")))?.toLowerCase()!=="true")continue;let l=await this.getLiteralValue(s,re.Namespace.EXO.term("Asset_uid"));if(!l){this.logger.warn(`[CommandResolver] paletteEnabled command at ${s.value} has no exo__Asset_uid \u2014 skipped`);continue}let c=await this.loadCommand(l);if(!c){this.logger.warn(`[CommandResolver] paletteEnabled command ${l} could not be loaded (missing grounding?) \u2014 skipped`);continue}let u=await this.getLiteralValue(s,re.Namespace.EXOCMD.term("Command_paletteId")),f=await this.getLiteralValue(s,re.Namespace.EXOCMD.term("Command_cliName")),d=u??f??l;if(r.has(d)){this.logger.warn(`[CommandResolver] duplicate paletteId "${d}" \u2014 first registration wins, dropping ${l}`);continue}r.add(d),t.push({command:c,paletteId:d})}return t}invalidateCache(){this.cache.clear(),this.multiCache.clear(),this._ancestorDepthCache.clear()}async resolveLabel(e,t){if(!e.labelTemplate)return e.name;let r=e.labelTemplate,i=this.extractPlaceholders(e.labelTemplate);for(let{full:s,body:o}of i){let l=await this.evaluateSelectSnippet(o,t);r=r.replace(s,l)}return r}extractPlaceholders(e){let t=[],r=0;for(;r<e.length;)if(e[r]==="{"){let i=1,s=r+1;for(;s<e.length&&i>0;)e[s]==="{"?i++:e[s]==="}"&&i--,s++;if(i===0){let o=e.slice(r,s),l=e.slice(r+1,s-1);t.push({full:o,body:l})}r=s}else r++;return t}async evaluateSelectSnippet(e,t){try{let r=e.replace(/\$target/g,`<${t}>`),s=new PW.ExoQLParser().parse(r),l=new DW.ExoQLAlgebraTranslator().translate(s),u=await new FW.ExoQLQueryExecutor(this.tripleStore).executeAll(l);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 Gt.Literal||p instanceof ar.IRI?p.value:String(p):""}catch{return""}}async loadBindingDefinition(e){let t=await this.getLiteralValue(e,re.Namespace.EXO.term("Asset_uid"));if(!t)return null;let r=await this.getLiteralValue(e,re.Namespace.EXO.term("Asset_label"))??"",i=await this.getLinkedUID(e,re.Namespace.EXOCMD.term("CommandBinding_command"));if(!i)return null;let s=await this.getLinkedValue(e,re.Namespace.EXOCMD.term("CommandBinding_targetClass")),o=await this.getLinkedValue(e,re.Namespace.EXOCMD.term("CommandBinding_targetPrototype")),l=await this.getLinkedValue(e,re.Namespace.EXOCMD.term("CommandBinding_targetAsset"));if(!s&&!o&&!l)return null;let c=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("CommandBinding_position")),u=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("CommandBinding_order")),f=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("CommandBinding_variant")),d=f!==null?this.coerceVariant(f,t):void 0,p=await this.loadLinkedPreconditionFromProperty(e,re.Namespace.EXOCMD.term("CommandBinding_precondition")),h=await this.loadLinkedStyle(e,t),_=await this.getLinkedUIDs(e,re.Namespace.EXOCMD.term("CommandBinding_overrides"));return{id:t,label:r,commandRef:i,targetClass:s??void 0,targetPrototype:o??void 0,targetAsset:l??void 0,position:c??void 0,order:u?parseInt(u,10):void 0,variant:d,precondition:p??void 0,style:h??void 0,overrides:_.length>0?_:void 0}}async loadLinkedStyle(e,t){let r=await this.tripleStore.match(e,re.Namespace.EXOCMD.term("CommandBinding_style"),void 0);if(r.length>0){let s=r[0].object,o=null;if(s instanceof ar.IRI)o=s;else if(s instanceof Gt.Literal){let l=this.normalizeWikilink(s.value);o=await this.findSubjectByUID(l)}if(o){let l=await this.loadStyleAsset(o);if(l)return l}this.logger.warn(this.capWarning(`CommandBinding ${t}: style reference unresolved, falling back to inline variant`))}let i=await this.getLiteralValue(e,re.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,re.Namespace.EXO.term("Asset_uid"));if(!t)return null;let r=await this.getLiteralValue(e,re.Namespace.EXO.term("Asset_label"))??"",i=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("CommandBindingStyle_variant")),s=i!==null?this.coerceVariant(i,t):void 0,o=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("CommandBindingStyle_showIcon")),l=this.coerceBoolean(o),c=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("CommandBindingStyle_labelClass")),u=c!==null?this.coerceLabelClass(c,t):void 0,f=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("CommandBindingStyle_ariaLabel")),d=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("CommandBindingStyle_tooltip")),p=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("CommandBindingStyle_keyboardShortcut")),h=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("CommandBindingStyle_source")),_=h!==null?this.coerceStyleSource(h,t):void 0;return{id:t,label:r,variant:s,showIcon:l,labelClass:u,ariaLabel:f??void 0,tooltip:d??void 0,keyboardShortcut:p??void 0,source:_,inline:!1}}coerceVariant(e,t){if(e==null)return;let r=String(e).trim().toLowerCase();if(r!==""){if(vu.COMMAND_VARIANT_VALUES.includes(r))return r;this.logger.warn(this.capWarning(`CommandBindingStyle variant "${r}" not in whitelist [${vu.COMMAND_VARIANT_VALUES.join(",")}]; dropped (asset ${t})`))}}coerceLabelClass(e,t){if(e==null)return;let r=String(e).trim().toLowerCase();if(r!==""){if(vu.LABEL_CLASS_VALUES.includes(r))return r;this.logger.warn(this.capWarning(`CommandBindingStyle labelClass "${r}" not in whitelist [${vu.LABEL_CLASS_VALUES.join(",")}]; dropped (asset ${t})`))}}coerceStyleSource(e,t){if(e==null)return;let r=String(e).trim().toLowerCase();if(r!==""){if(vu.STYLE_SOURCE_VALUES.includes(r))return r;this.logger.warn(this.capWarning(`CommandBindingStyle source "${r}" not in whitelist [${vu.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,r,i){if(e.targetAsset&&i&&this.matchesReference(e.targetAsset,i))return!0;if(e.targetPrototype&&r){for(let s of r)if(this.matchesReference(e.targetPrototype,s))return!0}return!!(e.targetClass&&t&&this.matchesReference(e.targetClass,t))}matchesReference(e,t){let r=this.normalizeWikilink(e),i=this.normalizeWikilink(t);if(r===i)return!0;let s=this.extractPathBasename(i);if(s&&s===r)return!0;let o=this.extractPathBasename(r);if(o&&o===i)return!0;let l=this.extractAlias(t);if(l&&r===l)return!0;let c=this.extractAlias(e);return!!(c&&c===i)}extractPathBasename(e){let t=e.match(/\/([^/]+)\.md$/);return t?t[1]:null}extractAlias(e){let t=e.replace(/["'[\]]/g,"").trim(),r=t.indexOf("|");return r>=0?t.substring(r+1).trim():null}getBindingPriority(e){return e.targetAsset?0:e.targetPrototype?1:2}async loadLinkedPrecondition(e){return this.loadLinkedPreconditionFromProperty(e,re.Namespace.EXOCMD.term("Command_precondition"))}async loadLinkedPreconditionFromProperty(e,t){let r=await this.tripleStore.match(e,t,void 0);if(r.length===0)return null;let i=await this.resolvePreconditionRef(r[0].object);return i?this.loadPreconditionSubject(i,new Set,0):null}async resolvePreconditionRef(e){if(e instanceof ar.IRI)return e;if(e instanceof Gt.Literal){let t=this.normalizeWikilink(e.value);return await this.findSubjectByUID(t)}return null}async loadPreconditionSubject(e,t,r){let i=await this.getLiteralValue(e,re.Namespace.EXO.term("Asset_uid")),s=await this.getLiteralValue(e,re.Namespace.EXO.term("Asset_label"))??"";if(i&&t.has(i))return this.brokenPreconditionNode(i,s);if(r>=Hl)return this.brokenPreconditionNode(i??"",s);let o=await this.tripleStore.match(e,re.Namespace.EXOCMD.term("AllPrecondition_preconditions"),void 0),l=await this.tripleStore.match(e,re.Namespace.EXOCMD.term("AnyPrecondition_preconditions"),void 0),c=await this.tripleStore.match(e,re.Namespace.EXOCMD.term("NotPrecondition_precondition"),void 0);if(o.length>0||l.length>0||c.length>0){let p=new Set(t);if(i&&p.add(i),o.length>0||l.length>0){let _=o.length>0?"all":"any",y=o.length>0?o:l,b=[];for(let S of y)b.push(await this.loadChildPrecondition(S.object,p,r+1));return{id:i??"",label:s,composite:{op:_,children:b}}}let h=await this.loadChildPrecondition(c[0].object,p,r+1);return{id:i??"",label:s,not:h}}let u=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Precondition_sparqlAsk")),f=await this.getLiteralValue(e,re.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,r){let i=await this.resolvePreconditionRef(e);if(!i){let l=e instanceof Gt.Literal?this.normalizeWikilink(e.value):"";return this.brokenPreconditionNode(l,"")}let s=await this.loadPreconditionSubject(i,t,r);if(s)return s;let o=await this.getLiteralValue(i,re.Namespace.EXO.term("Asset_uid"));return this.brokenPreconditionNode(o??"","")}async loadPreconditionQueryRef(e){let t=await this.tripleStore.match(e,re.Namespace.EXOCMD.term("Precondition_query"),void 0);if(t.length===0)return;let r=t[0].object;if(r instanceof ar.IRI)return await this.getLiteralValue(r,re.Namespace.EXO.term("Asset_uid"))??void 0;if(r instanceof Gt.Literal)return this.normalizeWikilink(r.value)}brokenPreconditionNode(e,t){return{id:e,label:t,broken:!0}}async loadLinkedGrounding(e,t,r){if(t>=Hl)return null;let i=await this.tripleStore.match(e,re.Namespace.EXOCMD.term("Command_grounding"),void 0);if(i.length===0)return null;if(i.length===1||!r?.targetClass){let o=await this.resolveGroundingRef(i[0].object);return o?this.loadGroundingDefinition(o,t):null}for(let o of i){let l=await this.resolveGroundingRef(o.object);if(!l)continue;let c=await this.getObsidianName(l,re.Namespace.EXOCMD.term("Grounding_targetPrototype"));if(c&&this.matchesReference(c,r.targetClass))return this.loadGroundingDefinition(l,t)}this.logger.warn(`Command ${e.value}: ${i.length} groundings declared, none matched context.targetClass='${r.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 ar.IRI)return e;if(e instanceof Gt.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>=Hl)return null;let r=await this.getLiteralValue(e,re.Namespace.EXO.term("Asset_uid"));if(!r)return null;let i=await this.getLiteralValue(e,re.Namespace.EXO.term("Asset_label"))??"",s=await this.resolveGroundingTypeReference(e);if(!s)return null;let o=await this.getObsidianName(e,re.Namespace.EXOCMD.term("Grounding_targetProperty"));if(o&&this.looksLikeUUID(o)){let B=await this.resolveLabelByUID(o);if(!B)return this.logger.warn(`Grounding ${r}: targetProperty wikilink UID '${o}' is not resolvable to exo__Asset_label \u2014 grounding skipped (would otherwise write a UUID-named frontmatter key).`),null;o=B}if(s===H3.GroundingType.SERVICE_CALL){let B=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_serviceId"));B&&(o=B)}let l=await this.getObsidianName(e,re.Namespace.EXOCMD.term("Grounding_targetValueRef")),c=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_targetValueLiteral")),u=await this.getObsidianName(e,re.Namespace.EXOCMD.term("Grounding_targetValueSubstitution")),f=null;if(u&&this.looksLikeUUID(u)){let B=await this.resolveLabelByUID(u);if(!B)return this.logger.warn(`Grounding ${r}: targetValueSubstitution UID '${u}' is not resolvable to exo__Asset_label (SubstitutionToken instance missing or unlabelled) \u2014 grounding skipped.`),null;f=B}else u&&(f=u);let d=await this.getObsidianName(e,re.Namespace.EXOCMD.term("Grounding_targetValueQuery")),p=await this.getObsidianName(e,re.Namespace.EXOCMD.term("Grounding_targetQuery")),h=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_serviceCallPayload")),_=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_appendExpression")),y=await this.getObsidianWikilinkValue(e,re.Namespace.EXOCMD.term("Grounding_isDefinedBy")),b=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_sparqlUpdate")),S=await this.getObsidianName(e,re.Namespace.EXOCMD.term("Grounding_targetClass"));if(S&&!this.looksLikeUUID(S)){let B=await this.findUidByLabel(S);B&&(S=B)}let I=await this.getObsidianName(e,re.Namespace.EXOCMD.term("Grounding_targetPrototype")),O=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_targetFolder")),T=await this.getObsidianName(e,re.Namespace.EXOCMD.term("Grounding_linkBackProperty")),E=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_inputSchema")),P=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_incrementBy")),V=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_shiftDelta")),M;if(P!=null&&P!==""){let B=Number.parseInt(String(P),10);Number.isFinite(B)&&(M=B)}let j=await this.resolvePropertyDefaults(e,r),$=await this.resolveInheritanceRules(e,r),G=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_propertyDefaults"));G!==null&&G!==""&&!this._legacyPropertyDefaultsWarnedGroundings.has(r)&&(this.logger.warn(`Grounding ${r}: 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(r));let ge;s===H3.GroundingType.COMPOSITE&&(ge=await this.loadCompositeSteps(e,t+1));let ye;if(E)try{let B=JSON.parse(E);B?.properties&&(ye=Object.entries(B.properties).map(([oe,Ee])=>{let Ce=Ee.type,xe=Ce==="string"?"text":Ce,Oe=Ee.defaultValue!==void 0?Ee.defaultValue:Ee.default,Re={name:oe,type:xe,label:Ee.title??oe,required:Array.isArray(B.required)&&B.required.includes(oe)};return Oe!=null&&(Re.defaultValue=String(Oe)),typeof Ee.targetClassUid=="string"&&(Re.targetClassUid=Ee.targetClassUid),Re}))}catch{}let Q=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_prefillLabelWithDate")),se=Q!==null&&String(Q).trim().toLowerCase()==="true",J=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_labelTemplate")),ve=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_direction")),te;if(ve!=null){let B=String(ve).trim().toLowerCase();B==="forward"||B==="rollback"?te=B:B!==""&&this.logger.warn(`Grounding ${r}: exocmd__Grounding_direction value '${ve}' is not 'forward' or 'rollback' \u2014 treating as undefined (will default to 'forward' at dispatch).`)}let ie=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_bodyTemplate")),he=await this.getObsidianName(e,re.Namespace.EXOCMD.term("Grounding_templateRef")),Ue=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_cloneTargetBody")),ce=Ue!==null&&String(Ue).trim().toLowerCase()==="true",ue=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_targetsCreatedInstance")),fe=ue!==null&&String(ue).trim().toLowerCase()==="true",ne=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_omitLabel")),me=ne!==null&&String(ne).trim().toLowerCase()==="true",Le={id:r,label:i,type:s,targetProperty:o??void 0,targetValueRef:l??void 0,targetValueLiteral:c??void 0,targetValueSubstitution:f??void 0,targetValueQuery:d??void 0,targetQuery:p??void 0,serviceCallPayload:h??void 0,appendExpression:_??void 0,sparqlUpdate:b??void 0,steps:ge,targetClass:S??void 0,targetPrototype:I??void 0,targetFolder:O??void 0,linkBackProperty:T??void 0,incrementBy:M,shiftDelta:V??void 0,propertyDefault:j.length>0?j:void 0,inheritanceRule:$.length>0?$:void 0,isDefinedBy:y??void 0,prefillLabelWithDate:se||void 0,labelTemplate:J??void 0,direction:te,bodyTemplate:ie??void 0,templateRef:he??void 0,cloneTargetBody:ce||void 0,targetsCreatedInstance:fe||void 0,omitLabel:me||void 0};return ye&&(Le.inputSchema=ye),Le}async loadCompositeSteps(e,t){if(t>=Hl)return[];let r=await this.tripleStore.match(e,re.Namespace.EXOCMD.term("Grounding_steps"),void 0),i=[];for(let s of r){let o=null;if(s.object instanceof ar.IRI)o=s.object;else if(s.object instanceof Gt.Literal){let c=this.normalizeWikilink(s.object.value);o=await this.findSubjectByUID(c)}if(!o)continue;let l=await this.loadGroundingDefinition(o,t);l&&i.push(l)}return i}async resolvePropertyDefaults(e,t){let r=await this.resolvePropertyDefaultsForSubject(e,t,re.Namespace.EXOCMD.term("Grounding_propertyDefault")),i=await this.getUniversalCache();return i&&i.propertyDefaults.length>0?(0,fy.mergePropertyDefaults)(i.propertyDefaults,r):r}async resolvePropertyDefaultsForSubject(e,t,r){let i=await this.tripleStore.match(e,r,void 0),s=[];for(let o of i){let l=await this.resolveRefTripleObject(o.object);if(!l)continue;let c=await this.getObsidianName(l,re.Namespace.EXOCMD.term("PropertyDefault_property"));if(!c){this.logger.warn(`Grounding ${t}: PropertyDefault asset missing exocmd__PropertyDefault_property \u2014 entry skipped.`);continue}let u=this.looksLikeUUID(c)?await this.resolveLabelByUID(c):c;if(!u){this.logger.warn(`Grounding ${t}: PropertyDefault property UID '${c}' is not resolvable to exo__Asset_label \u2014 entry skipped.`);continue}let f=await this.getObsidianName(l,re.Namespace.EXOCMD.term("PropertyDefault_value"));if(!f){this.logger.warn(`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(0,fy.loadUniversalDefault)();if(e)return this._universalCacheValue=e,e;let t=await this.findUniversalSingleton();if(!t)return this._universalCacheValue=null,null;let r=await this.resolvePropertyDefaultsForSubject(t,J3,re.Namespace.EXOCMD.term("Template_propertyDefault")),i=await this.resolveInheritanceRulesForSubject(t,J3,re.Namespace.EXOCMD.term("Template_inheritanceRule"));return this._universalCacheValue={propertyDefaults:r,inheritanceRules:i},this._universalCacheValue}async findUniversalSingleton(){let e=re.Namespace.EXOCMD.term("UniversalDefaultTemplate").value,t=await this.tripleStore.match(void 0,re.Namespace.EXO.term("Instance_class"),void 0),r=[];for(let i of t){let s=!1;if(i.object instanceof ar.IRI)s=i.object.value===e||i.object.value.includes(X3);else if(i.object instanceof Gt.Literal){let o=this.unwrapWikilink(i.object.value);s=o==="exocmd__UniversalDefaultTemplate"||o===X3}s&&i.subject instanceof ar.IRI&&r.push(i.subject)}return r.length===0?null:(r.length===1||(r.sort((i,s)=>i.value.localeCompare(s.value)),this.logger.warn(`Multiple UniversalDefaultTemplate singletons found (${r.length}); selecting deterministically by lexicographic UID order: ${r[0].value}`)),r[0])}async resolveInheritanceRules(e,t){let r=await this.resolveInheritanceRulesForSubject(e,t,re.Namespace.EXOCMD.term("Grounding_inheritanceRule")),i=await this.getUniversalCache();return i&&i.inheritanceRules.length>0?(0,fy.mergeInheritanceRules)(i.inheritanceRules,r):r}async resolveInheritanceRulesForSubject(e,t,r){let i=await this.tripleStore.match(e,r,void 0),s=[],o=t;for(let l of i){let c=await this.resolveRefTripleObject(l.object);if(!c)continue;let u=await this.resolveLabelRef(c,re.Namespace.EXOCMD.term("InheritanceRule_sourceProperty"));if(!u){this.logger.warn(`Grounding ${o}: InheritanceRule missing/unresolvable exocmd__InheritanceRule_sourceProperty \u2014 entry skipped.`);continue}let f=await this.resolveLabelRef(c,re.Namespace.EXOCMD.term("InheritanceRule_targetProperty"));if(!f){this.logger.warn(`Grounding ${o}: InheritanceRule missing/unresolvable exocmd__InheritanceRule_targetProperty \u2014 entry skipped.`);continue}let d=await this.tripleStore.match(c,re.Namespace.EXOCMD.term("InheritanceRule_targetClassCondition"),void 0),p,h;if(d.length>0){let T=await this.getObsidianName(c,re.Namespace.EXOCMD.term("InheritanceRule_targetClassCondition"));if(!T||!T.trim()){this.logger.warn(`Grounding ${o}: InheritanceRule has exocmd__InheritanceRule_targetClassCondition triple but ref is unresolvable \u2014 entire rule skipped (would otherwise apply unconditionally, broadening scope).`);continue}this.looksLikeUUID(T)?(h=T,p=await this.resolveLabelByUID(T)??void 0):p=T}let _=await this.tripleStore.match(c,re.Namespace.EXOCMD.term("InheritanceRule_targetClassExclusion"),void 0),y=[],b=[],S=!1;for(let T of _){let E=null;if(T.object instanceof ar.IRI?E=this.iriToObsidianName(T.object.value)??T.object.value:T.object instanceof Gt.Literal&&(E=this.unwrapWikilink(T.object.value)),!E){S=!0;continue}if(this.looksLikeUUID(E)){b.push(E);let P=await this.resolveLabelByUID(E);P&&y.push(P)}else y.push(E)}if(S){this.logger.warn(`Grounding ${o}: InheritanceRule has unresolvable exocmd__InheritanceRule_targetClassExclusion entry \u2014 entire rule skipped (would otherwise expand scope by silently dropping the excluded class).`);continue}let I=await this.getLiteralValue(c,re.Namespace.EXOCMD.term("InheritanceRule_priority")),O=50;if(I!==null&&I!==""){let T=Number.parseInt(String(I),10);Number.isFinite(T)&&(O=T)}s.push({sourcePropertyName:u,targetPropertyName:f,targetClassCondition:p,targetClassConditionUid:h,targetClassExclusion:y,targetClassExclusionUids:b,priority:O})}return s}async resolveRefTripleObject(e){if(e instanceof ar.IRI)return e;if(e instanceof Gt.Literal){let t=this.normalizeWikilink(e.value);return t?this.findSubjectByUID(t):null}return null}async resolveLabelRef(e,t){let r=await this.getObsidianName(e,t);return r?this.looksLikeUUID(r)?this.resolveLabelByUID(r):r:null}async resolvePropertyDefaultValue(e,t,r){if(!this.looksLikeUUID(e))return`"[[${e}]]"`;let i=await this.findSubjectByUID(e);return i?await this.assetIsTokenInvocation(i)?this.resolveTokenInvocation(i,e,t,r):await this.assetIsSubstitutionToken(i)?this.dispatchSubstitutionToken(i,e,t,r,void 0):`"[[${e}]]"`:`"[[${e}]]"`}async dispatchSubstitutionToken(e,t,r,i,s){let o=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("SubstitutionToken_resolver"));if(!o||!o.trim())return this.logger.warn(`Grounding ${r}: PropertyDefault '${i}' references SubstitutionToken '${t}' with no exocmd__SubstitutionToken_resolver \u2014 falling back to wikilink form.`),`"[[${t}]]"`;let l=o.trim();return Y3.has(l)?s!==void 0?MW(l,t,s):kW(l,t):(this.logger.warn(`Grounding ${r}: PropertyDefault '${i}' SubstitutionToken '${t}' declares unknown resolver-id '${l}' \u2014 falling back to wikilink form. Known ids: ${Array.from(Y3).join(", ")}.`),`"[[${t}]]"`)}async resolveTokenInvocation(e,t,r,i){let s=await this.getObsidianName(e,re.Namespace.EXOCMD.term("TokenInvocation_token"));if(!s)return this.logger.warn(`Grounding ${r}: PropertyDefault '${i}' TokenInvocation '${t}' missing exocmd__TokenInvocation_token \u2014 entry skipped.`),null;let o=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("TokenInvocation_parameter"))??"";if(!this.looksLikeUUID(s))return this.logger.warn(`Grounding ${r}: PropertyDefault '${i}' TokenInvocation '${t}' references non-UUID token '${s}' \u2014 entry skipped.`),null;let l=await this.findSubjectByUID(s);return l?this.dispatchSubstitutionToken(l,s,r,i,o):(this.logger.warn(`Grounding ${r}: 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,re.Namespace.EXO.term("Instance_class"),void 0);for(let r of t)if(r.object instanceof ar.IRI){if(r.object.value===jW||r.object.value.includes(Q3))return!0}else if(r.object instanceof Gt.Literal){let i=this.unwrapWikilink(r.object.value);if(i==="exocmd__TokenInvocation"||i===Q3)return!0}return!1}async assetIsSubstitutionToken(e){let t=await this.tripleStore.match(e,re.Namespace.EXO.term("Instance_class"),void 0);for(let r of t)if(r.object instanceof ar.IRI){if(r.object.value===NW||r.object.value.includes(K3))return!0}else if(r.object instanceof Gt.Literal){let i=this.unwrapWikilink(r.object.value);if(i==="exocmd__SubstitutionToken"||i===K3)return!0}return!1}async resolveGroundingTypeReference(e){let t=await this.tripleStore.match(e,re.Namespace.EXOCMD.term("Grounding_type"),void 0);if(t.length===0)return null;let r=t[0].object;if(r instanceof ar.IRI)return(0,z3.resolveGroundingTypeFromIRI)(r.value);if(r instanceof Gt.Literal){let i=r.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,z3.resolveGroundingTypeFromIRI)(`obsidian://vault/${s[1].toLowerCase()}.md`):(this.logger.warn(`[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],r=new Set([this.normalizeWikilink(e).toLowerCase()]),i=e;for(let s=0;s<Hl;s++){let o=this.extractUuidFromRef(i);if(!o)break;let l=null;try{let u=await this.findSubjectByUID(o);if(!u)break;l=await this.getLinkedValue(u,re.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(!l)break;let c=this.normalizeWikilink(l).toLowerCase();if(r.has(c))break;r.add(c),t.push(l),i=l}return t}extractUuidFromRef(e){let t=this.normalizeWikilink(e);if(this.looksLikeUUID(t))return t;let r=this.extractPathBasename(t);return r&&this.looksLikeUUID(r)?r:null}async findSubjectByUID(e){if(this.tripleStore.findSubjectsByUUID){let r=await this.tripleStore.findSubjectsByUUID(e);if(r.length>0)return r[0]}let t=await this.tripleStore.match(void 0,re.Namespace.EXO.term("Asset_uid"),void 0);for(let r of t)if(r.object instanceof Gt.Literal&&r.object.value===e)return r.subject;return null}async getLiteralValue(e,t){let r=await this.tripleStore.match(e,t,void 0);if(r.length===0)return null;let i=r[0].object;return i instanceof Gt.Literal||i instanceof ar.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.getLiteralValue(t,re.Namespace.EXO.term("Asset_label")):null}async getClassAncestors(e){return(await this.getClassAncestorsWithDepth(e)).map(r=>r.ref)}async getClassAncestorsWithDepth(e){let t=this._ancestorDepthCache.get(e);if(t)return t;let r=new Map,i=new Set,s=await this.resolveClassFileIRI(e);if(!s)return[];let o=new Set([e]),l=await this.getLiteralValue(s,re.Namespace.EXO.term("Asset_uid"));l&&o.add(l);let c=await this.getLiteralValue(s,re.Namespace.EXO.term("Asset_label"));c&&o.add(c);let u=a((p,h)=>{if(o.has(p))return;let _=r.get(p);(_===void 0||h<_)&&r.set(p,h)},"setMin"),f=[{fileIRI:s,depth:0}];for(;f.length>0;){let p=f.shift();if(!p)break;let{fileIRI:h,depth:_}=p;if(_>=Hl||i.has(h.value))continue;i.add(h.value);let y=await this.tripleStore.match(h,re.Namespace.EXO.term("Class_superClass"),void 0);for(let b of y){let S=b.object;if(!(S instanceof ar.IRI))continue;let I=_+1,O=S.value.startsWith("obsidian://vault/"),T=this.iriToObsidianName(S.value);T&&u(T,I);let E=null;if(O?E=S:T&&(E=await this.resolveClassFileIRI(T)),!E)continue;let P=await this.getLiteralValue(E,re.Namespace.EXO.term("Asset_uid"));P&&u(P,I),i.has(E.value)||f.push({fileIRI:E,depth:I})}}let d=Array.from(r.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){let t=await this.tripleStore.match(void 0,re.Namespace.EXO.term("Asset_label"),void 0);for(let r of t)if(r.object instanceof Gt.Literal&&r.object.value===e&&r.subject instanceof ar.IRI){let i=await this.tripleStore.match(r.subject,re.Namespace.EXO.term("Asset_uid"),void 0);if(i.length>0&&i[0].object instanceof Gt.Literal)return i[0].object.value}return null}async getLinkedUID(e,t){let r=await this.tripleStore.match(e,t,void 0);if(r.length===0)return null;let i=r[0].object;if(i instanceof ar.IRI){let s=await this.tripleStore.match(i,re.Namespace.EXO.term("Asset_uid"),void 0);return s.length>0&&s[0].object instanceof Gt.Literal?s[0].object.value:i.value.split("/").pop()?.replace(".md","")??null}return i instanceof Gt.Literal?this.normalizeWikilink(i.value):null}async getLinkedUIDs(e,t){let r=await this.tripleStore.match(e,t,void 0),i=[];for(let s of r){let o=s.object;if(o instanceof ar.IRI){let l=await this.tripleStore.match(o,re.Namespace.EXO.term("Asset_uid"),void 0);if(l.length>0&&l[0].object instanceof Gt.Literal)i.push(l[0].object.value);else{let c=o.value.split("/").pop()?.replace(".md","");c&&i.push(c)}}else if(o instanceof Gt.Literal){let l=this.normalizeWikilink(o.value);l&&i.push(l)}}return i}async getLinkedValue(e,t){let r=await this.tripleStore.match(e,t,void 0);if(r.length===0)return null;let i=r[0].object;return i instanceof Gt.Literal?this.normalizeWikilink(i.value):i instanceof ar.IRI?this.iriToObsidianName(i.value)??i.value:null}async getObsidianName(e,t){let r=await this.tripleStore.match(e,t,void 0);if(r.length===0)return null;let i=r[0].object;return i instanceof Gt.Literal?this.unwrapWikilink(i.value):i instanceof ar.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 r=t.match(/^\[\[([^\]|]+)\|([^\]]+)\]\]$/);if(r)return r[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 r=await this.tripleStore.match(e,t,void 0);if(r.length===0)return null;let i=r[0].object;if(i instanceof Gt.Literal)return this.resolveWikilinkAlias(i.value);if(i instanceof ar.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 r=t[1],i=await this.findSubjectByUID(r);if(!i)return e;let s=await this.getLiteralValue(i,re.Namespace.EXO.term("Asset_label"));return s?e.replace(`[[${r}]]`,`[[${r}|${s}]]`):e}iriToObsidianName(e){return(0,OW.iriToObsidianName)(e)}normalizeWikilink(e){let t=e.replace(/["'[\]]/g,"").trim(),r=t.indexOf("|");return r>=0?t.substring(0,r):t}};Co.CommandResolver=zE;Co.CommandResolver=zE=AW([(0,xW.injectable)(),IW("design:paramtypes",[Object,Object])],zE)});var YE=v(KE=>{"use strict";Object.defineProperty(KE,"__esModule",{value:!0});KE.validateExoQLAllowlist=$W;var py=qd();function $W(n){if(!n||typeof n!="object")return;let e=n;if(e.type==="update"){let t=n.updates??[];for(let r of t)if(r?.type==="load")throw new py.ExoQLForbiddenKeywordError("LOAD");throw new py.ExoQLForbiddenKeywordError("UPDATE")}if(e.type==="query"){if(e.from){let t=Array.isArray(e.from.default)&&e.from.default.length>0,r=Array.isArray(e.from.named)&&e.from.named.length>0;if(t||r)throw new py.ExoQLForbiddenKeywordError("FROM")}if(Array.isArray(e.where))for(let t of e.where)hy(t);if(Array.isArray(e.template))for(let t of e.template)hy(t)}}a($W,"validateExoQLAllowlist");function hy(n){if(!n||typeof n!="object")return;if(n.type==="service")throw new py.ExoQLForbiddenKeywordError("SERVICE");if(Array.isArray(n.patterns))for(let t of n.patterns)hy(t);let e=n.where;if(Array.isArray(e))for(let t of e)hy(t)}a(hy,"walkPatternForBannedKeywords")});var QE=v(my=>{"use strict";Object.defineProperty(my,"__esModule",{value:!0});my.DEFAULT_EVAL_CONFIG=void 0;my.DEFAULT_EVAL_CONFIG=Object.freeze({enabled:!0,maxNestedEvalCount:100,maxAggregateEvalMillis:1e4})});var gy=v(XE=>{"use strict";Object.defineProperty(XE,"__esModule",{value:!0});XE.evaluateWithExoEval=HW;var UW=Jc(),BW=nu(),VW=Eu(),qW=YE(),GW=QE(),WW=qd();async function HW(n,e={}){if(typeof n!="string")throw new TypeError("evaluateWithExoEval: sparql must be a string");let r=new UW.ExoQLParser().parse(n);if((0,qW.validateExoQLAllowlist)(r),!{...GW.DEFAULT_EVAL_CONFIG,...e.config??{}}.enabled)throw new WW.ExoQLEvalDisabledError;let s="queryType"in r&&typeof r.queryType=="string"?r.queryType:"SELECT";if(!e.store)return s==="ASK"?{kind:"ask",result:!1}:s==="CONSTRUCT"?{kind:"construct",triples:[]}:{kind:"select",rows:[]};let l=new BW.ExoQLAlgebraTranslator().translate(r),c=new VW.ExoQLQueryExecutor(e.store);return c.isAskQuery(l)?{kind:"ask",result:await c.executeAsk(l)}:c.isConstructQuery(l)?{kind:"construct",triples:await c.executeConstruct(l)}:{kind:"select",rows:await c.executeAll(l)}}a(HW,"evaluateWithExoEval")});var zi=v(yy=>{"use strict";Object.defineProperty(yy,"__esModule",{value:!0});yy.DateFormatter=void 0;var JE=class n{static{a(this,"DateFormatter")}static toISOTimestamp(e){return e.toISOString().replace(/\.\d{3}Z$/,"Z")}static toLocalTimestamp(e){let t=e.getFullYear(),r=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"),l=String(e.getSeconds()).padStart(2,"0");return`${t}-${r}-${i}T${s}:${o}:${l}`}static toDateWikilink(e){let t=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),i=String(e.getDate()).padStart(2,"0");return`"[[${t}-${r}-${i}]]"`}static getTodayWikilink(){return n.toDateWikilink(new Date)}static toDateString(e){let t=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),i=String(e.getDate()).padStart(2,"0");return`${t}-${r}-${i}`}static parseWikilink(e){let r=e.replace(/^["']|["']$/g,"").match(/\[\[(\d{4}-\d{2}-\d{2})\]\]/);return r?r[1]:null}static addDays(e,t){let r=new Date(e);return r.setDate(r.getDate()+t),r}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),n.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[r,i,s]=t,o=new Date(r,i-1,s,0,0,0,0);if(isNaN(o.getTime()))throw new Error(`Invalid date values: ${e}`);return n.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 n.toISOTimestamp(t)}static isISOTimestamp(e){return/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/.test(e)}};yy.DateFormatter=JE});var Wd=v(_y=>{"use strict";Object.defineProperty(_y,"__esModule",{value:!0});_y.liveClock=zW;_y.frozenClock=KW;function zW(){return{now:a(()=>new Date,"now")}}a(zW,"liveClock");function KW(n){let e=new Date(n);return{now:a(()=>new Date(e.getTime()),"now")}}a(KW,"frozenClock")});var tD=v(Oo=>{"use strict";var YW=Oo&&Oo.__decorate||function(n,e,t,r){var i=arguments.length,s=i<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(n,e,t,r);else for(var l=n.length-1;l>=0;l--)(o=n[l])&&(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},QW=Oo&&Oo.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},zd;Object.defineProperty(Oo,"__esModule",{value:!0});Oo.PreconditionEvaluator=void 0;var XW=ut(),JW=Jc(),ZW=nu(),eD=Eu(),eH=gy(),Hd=zi(),tH=Wd(),Kd=zd=class{static{a(this,"PreconditionEvaluator")}constructor(e,t,r){this.hostFunctions=new Map,this.askCache=new Map,this.tripleStore=e,this.queryBodyResolver=t,this.clock=r?.clock??(0,tH.liveClock)()}async evaluate(e,t,r){if(!e)return!0;let i=new Map;return await this.evaluateNode(e,t,r,i)==="yes"}async evaluateNode(e,t,r,i){if(e.broken)return"unknown";if(e.composite){let{op:s,children:o}=e.composite;if(o.length===0)return"unknown";let l=await Promise.all(o.map(c=>this.evaluateNode(c,t,r,i)));return s==="all"?l.includes("no")?"no":l.includes("unknown")?"unknown":"yes":l.includes("yes")?"yes":l.includes("unknown")?"unknown":"no"}if(e.not){let s=await this.evaluateNode(e.not,t,r,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,r)?"yes":"no":"yes"}evaluateSparqlAskMemoized(e,t,r){let i=r.get(e);if(i!==void 0)return i;let s=this.evaluateSparqlAsk(e,t);return r.set(e,s),s}async evaluateQueryRef(e,t){if(!this.queryBodyResolver)return!1;try{let r=await this.queryBodyResolver.resolveSparql(e);if(!r)return!1;let i=this.substituteVariables(r,t),s=await(0,eH.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,r){return this.hostFunctions.has(e)?this.evaluateHostFunction(e,t,r):null}invalidateCache(){this.askCache.clear()}compileAsk(e){let t=this.substituteVariables(e,zd.SENTINEL_IRI),i=new JW.ExoQLParser().parse(t),o=new ZW.ExoQLAlgebraTranslator().translate(i);return new eD.ExoQLQueryExecutor(this.tripleStore).isAskQuery(o)?o:null}evaluateHostFunction(e,t,r){let i=this.hostFunctions.get(e);if(!i)return!0;let s=r?{...r,targetIRI:t}:{targetIRI:t};try{return i(s)}catch{return!1}}async evaluateSparqlAsk(e,t){try{let r=zd.TEMPORAL_TOKEN.test(e),i=r?Hd.DateFormatter.toDateString(this.clock.now()):null,s=this.askCache.get(e);if(s===void 0||r&&s.day!==i){let c=this.compileAsk(e);if(!c)return!1;s={day:i,compiled:c},this.askCache.set(e,s)}let o=JSON.parse(JSON.stringify(s.compiled).replaceAll(zd.SENTINEL_IRI,t));return await new eD.ExoQLQueryExecutor(this.tripleStore).executeAsk(o)}catch{return!1}}substituteVariables(e,t){let r=this.clock.now(),i=r.toISOString(),s=r.getFullYear(),o=r.getMonth(),l=r.getDate(),c=r.getDay(),u=Hd.DateFormatter.toDateString(r),f=Hd.DateFormatter.toDateString(new Date(s,o,l-1)),d=(c+6)%7,p=Hd.DateFormatter.toDateString(new Date(s,o,l-d)),h=Hd.DateFormatter.toDateString(new Date(s,o,l-d-7)),_=`${s}-${String(o+1).padStart(2,"0")}-01`,y=o===0?11:o-1,S=`${o===0?s-1:s}-${String(y+1).padStart(2,"0")}-01`,I=`${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,`"${_}"^^xsd:date`).replace(/\$lastMonthStart\b/g,`"${S}"^^xsd:date`).replace(/\$thisYearStart\b/g,`"${I}"^^xsd:date`).replace(/\$today\b/g,`"${u}"^^xsd:date`)}};Oo.PreconditionEvaluator=Kd;Kd.SENTINEL_IRI="urn:exocortex:cache-sentinel:target";Kd.TEMPORAL_TOKEN=/\$(?:now|today|yesterday|thisWeekStart|lastWeekStart|thisMonthStart|lastMonthStart|thisYearStart)\b/;Oo.PreconditionEvaluator=Kd=zd=YW([(0,XW.injectable)(),QW("design:paramtypes",[Object,Object,Object])],Kd)});var rD=v(Po=>{"use strict";Object.defineProperty(Po,"__esModule",{value:!0});Po.hasUidFilename=Po.hasNonUidFilename=void 0;Po.registerDefaultHostFunctions=iH;var rH=a(n=>{let e=n.assetUid;if(typeof e!="string"||e.trim()==="")return!1;let t=n.fileBasename;return typeof t!="string"?!1:t!==e},"hasNonUidFilename");Po.hasNonUidFilename=rH;var nH=a(n=>{let e=n.assetUid;if(typeof e!="string"||e.trim()==="")return!1;let t=n.fileBasename;return typeof t!="string"?!1:t===e},"hasUidFilename");Po.hasUidFilename=nH;function iH(n){n.registerHostFunction("hasNonUidFilename",Po.hasNonUidFilename),n.registerHostFunction("hasUidFilename",Po.hasUidFilename)}a(iH,"registerDefaultHostFunctions")});var Sy=v(by=>{"use strict";Object.defineProperty(by,"__esModule",{value:!0});by.liveUidGenerator=sH;by.seededUidGenerator=aH;var ZE=Ol();function sH(){return{next:a(()=>(0,ZE.v4)(),"next")}}a(sH,"liveUidGenerator");var oH="6ba7b810-9dad-11d1-80b4-00c04fd430c8";function aH(n){let e=0,t=(0,ZE.v5)(n,oH);return{next:a(()=>{let r=`${n}#${e}`;return e+=1,(0,ZE.v5)(r,t)},"next")}}a(aH,"seededUidGenerator")});var vy=v(Da=>{"use strict";Object.defineProperty(Da,"__esModule",{value:!0});Da.registerResolver=lr;Da.getResolver=cH;Da.isResolverModifierAware=uH;Da.getRegisteredResolverIds=fH;Da.clearResolvers=dH;Da.installDefaultResolvers=EH;var lH=zi(),Ey=new Map,ev=new Set;function lr(n,e,t=!1){Ey.set(n,e),t&&ev.add(n)}a(lr,"registerResolver");function cH(n){return Ey.get(n)}a(cH,"getResolver");function uH(n){return ev.has(n)}a(uH,"isResolverModifierAware");function fH(){return Array.from(Ey.keys())}a(fH,"getRegisteredResolverIds");function dH(){Ey.clear(),ev.clear()}a(dH,"clearResolvers");function cn(n){return n<10?`0${n}`:String(n)}a(cn,"pad2");var pH=["January","February","March","April","May","June","July","August","September","October","November","December"],hH=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],mH=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],gH=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];function yH(n){let e=["th","st","nd","rd"],t=n%100;return`${n}${e[(t-20)%10]||e[t]||e[0]}`}a(yH,"ordinalDay");var _H=/YYYY|YY|MMMM|MMM|MM|M|Do|DD|D|dddd|ddd|HH|H|hh|h|mm|m|ss|s|A|a/g;function bH(n,e){let t=(n.getHours()+11)%12+1;return e.replace(_H,r=>{switch(r){case"YYYY":return String(n.getFullYear());case"YY":return cn(n.getFullYear()%100);case"MMMM":return pH[n.getMonth()];case"MMM":return hH[n.getMonth()];case"MM":return cn(n.getMonth()+1);case"M":return String(n.getMonth()+1);case"Do":return yH(n.getDate());case"DD":return cn(n.getDate());case"D":return String(n.getDate());case"dddd":return mH[n.getDay()];case"ddd":return gH[n.getDay()];case"HH":return cn(n.getHours());case"H":return String(n.getHours());case"hh":return cn(t);case"h":return String(t);case"mm":return cn(n.getMinutes());case"m":return String(n.getMinutes());case"ss":return cn(n.getSeconds());case"s":return String(n.getSeconds());case"A":return n.getHours()<12?"AM":"PM";case"a":return n.getHours()<12?"am":"pm";default:return r}})}a(bH,"formatDate");function nD(n,e,t){let r=n.getDate(),i=new Date(n.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(r,s)),i}a(nD,"addMonthsClamped");function SH(n,e){if(!e)return n;let t=e.match(/^([+-])(\d+)([dwMy])?$/);if(!t)return n;let r=(t[1]==="-"?-1:1)*parseInt(t[2],10),i=t[3]??"d",s=new Date(n.getTime());switch(i){case"d":s.setDate(s.getDate()+r);break;case"w":s.setDate(s.getDate()+r*7);break;case"M":s=nD(s,r,"M");break;case"y":s=nD(s,r,"y");break}return isNaN(s.getTime())?n:s}a(SH,"applyDateOffset");function wH(n){if(!n)return{offset:null,format:null};let e=n.indexOf(":");if(e<0)return{offset:n,format:null};let t=n.slice(0,e),r=n.slice(e+1);return{offset:t||null,format:r||null}}a(wH,"parseDateModifier");function wy(n,e){return(t,r)=>{let{offset:i,format:s}=wH(r),o=new Date;return n!==0&&o.setDate(o.getDate()+n),o=SH(o,i),bH(o,s??e)}}a(wy,"makeDateResolver");function EH(){lr("today",()=>{let n=new Date;return`${n.getFullYear()}-${cn(n.getMonth()+1)}-${cn(n.getDate())}`}),lr("todayStart",()=>lH.DateFormatter.getTodayStartTimestamp()),lr("date",wy(0,"YYYY-MM-DD"),!0),lr("now",wy(0,"YYYY-MM-DDTHH:mm:ss"),!0),lr("tomorrow",wy(1,"YYYY-MM-DD"),!0),lr("yesterday",wy(-1,"YYYY-MM-DD"),!0),lr("target",n=>n.targetIRI?`"[[${n.targetIRI}]]"`:""),lr("targetFolder",n=>{if(!n.targetFilePath)return"";let e=n.targetFilePath.replace(/^\/+/,""),t=e.lastIndexOf("/");return t>=0?e.slice(0,t):""}),lr("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.")}),lr("nowTimestamp",()=>{let n=new Date;return`${n.getFullYear()}-${cn(n.getMonth()+1)}-${cn(n.getDate())}T${cn(n.getHours())}:${cn(n.getMinutes())}:${cn(n.getSeconds())}`}),lr("nowDate",()=>{let n=new Date;return`${n.getFullYear()}-${cn(n.getMonth()+1)}-${cn(n.getDate())}`}),lr("nowYear",()=>String(new Date().getFullYear())),lr("nowMonth",()=>cn(new Date().getMonth()+1)),lr("userInputLabel",n=>{let e=n.userInput?.label;return typeof e=="string"?e:""}),lr("userInput",(n,e)=>{if(!e)return null;let t=n.userInput?.[e];return typeof t=="string"?t:t==null?null:String(t)}),lr("targetProperty",(n,e)=>{if(!e||!n.targetFm)return null;let t=n.targetFm[e];return t==null?null:Array.isArray(t)?t.map(String):String(t)}),lr("targetRefProperty",(n,e)=>{if(!e)return null;let t=e.indexOf("|");if(t<0)return null;let r=e.slice(0,t),i=e.slice(t+1);if(!r||!i)return null;let s=n.targetRefFm?.[r];if(!s)return null;let o=s[i];return o==null?null:Array.isArray(o)?o.length>0?String(o[0]):null:String(o)}),lr("labelAsArray",n=>{let e=n.userInput?.label;return typeof e=="string"&&e.length>0?[e]:[]}),lr("groundingTargetClass",n=>n.groundingTargetClassUid?`"[[${n.groundingTargetClassUid}]]"`:null),lr("targetClassSelf",n=>{if(!n.targetFilePath)return null;let e=n.targetFilePath.replace(/^\/+/,""),r=e.slice(e.lastIndexOf("/")+1).replace(/\.md$/i,"");return r.length>0?`"[[${r}]]"`:null})}a(EH,"installDefaultResolvers")});var rv=v(Ty=>{"use strict";Object.defineProperty(Ty,"__esModule",{value:!0});Ty.resolveTemplateBody=TH;Ty.stripTemplateFrontmatter=AH;var tv=vy();(0,tv.installDefaultResolvers)();var vH=/\$([A-Za-z][A-Za-z0-9_]*)((?:[+-]\d+[dwMy])?(?::[A-Za-z0-9:./-]+)?)/g;function TH(n,e={}){return n.replace(vH,(t,r,i)=>{let s=(0,tv.getResolver)(r);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,tv.isResolverModifierAware)(r)?o:o+i})}a(TH,"resolveTemplateBody");function AH(n){let e=n.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);return e?n.slice(e[0].length):n}a(AH,"stripTemplateFrontmatter")});var xy=v(Tu=>{"use strict";Object.defineProperty(Tu,"__esModule",{value:!0});Tu.registerOrderSpecLoader=IH;Tu.clearOrderSpecLoader=xH;Tu.loadDefaultSpec=RH;Tu.orderProperties=CH;var Ay=null,Fa,Iy=!1;function IH(n){Ay=n,Fa=void 0,Iy=!1}a(IH,"registerOrderSpecLoader");function xH(){Ay=null,Fa=void 0,Iy=!1}a(xH,"clearOrderSpecLoader");function RH(){if(Fa!==void 0)return Fa;if(!Ay)return Fa=null,null;try{Fa=Ay()}catch(n){Iy||(console.warn("[OrderSpecResolver] loader threw, falling back to insertion order:",n),Iy=!0),Fa=null}return Fa}a(RH,"loadDefaultSpec");function CH(n,e){if(!e||e.head.length===0&&e.tail.length===0)return n;let t=Object.keys(n),r=new Set(e.head),i=new Set(e.tail),s=e.head.filter(u=>Object.prototype.hasOwnProperty.call(n,u)),o=e.tail.filter(u=>Object.prototype.hasOwnProperty.call(n,u)),l=t.filter(u=>!r.has(u)&&!i.has(u));e.middleStrategy==="alphabetical"&&l.sort((u,f)=>u.localeCompare(f));let c={};for(let u of s)c[u]=n[u];for(let u of l)c[u]=n[u];for(let u of o)c[u]=n[u];return c}a(CH,"orderProperties")});var Yd=v(zl=>{"use strict";Object.defineProperty(zl,"__esModule",{value:!0});zl.STRING_SCALAR_PROPERTIES=void 0;zl.needsYamlQuoting=iD;zl.quoteYamlString=sD;zl.serializeYamlScalar=$H;var OH=/^[-!&*?|>%@`"'#,[\]{}]/,PH=/[\u0000-\u001f\u007f]/,DH=/^(?:true|True|TRUE|false|False|FALSE)$/,FH=/^(?:null|Null|NULL|~)$/,LH=/^[-+]?(?:0b[01_]+|0o[0-7_]+|0x[0-9a-fA-F_]+|[0-9][0-9_]*)$/,NH=/^(?:[-+]?[0-9][0-9_]*(?:\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\.(?:inf|Inf|INF)|\.(?:nan|NaN|NAN))$/,kH=/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;zl.STRING_SCALAR_PROPERTIES=new Set(["exo__Asset_label","aliases"]);function MH(n){if(n.length<2||!n.startsWith('"')||!n.endsWith('"'))return!1;let e=n.slice(1,-1);for(let t=0;t<e.length;t++){if(e[t]==="\\"){if(t+1>=e.length)return!1;t++;continue}if(e[t]==='"')return!1}return!0}a(MH,"isCompleteDoubleQuotedScalar");function jH(n){return DH.test(n)||FH.test(n)||LH.test(n)||NH.test(n)||kH.test(n)}a(jH,"looksLikeNonStringScalar");function iD(n,e=!1){return n===""?!0:MH(n)?!1:!!(n!==n.trim()||/:(\s|$)/.test(n)||/\s#/.test(n)||OH.test(n)||PH.test(n)||e&&jH(n))}a(iD,"needsYamlQuoting");function sD(n){let e="";for(let t=0;t<n.length;t++){let r=n[t],i=n.charCodeAt(t);r==="\\"?e+="\\\\":r==='"'?e+='\\"':r===`
|
|
71
|
+
${r}}`}generateValuesTerm(e){if(e.type==="iri")return`<${e.value}>`;let r=`"${e.value.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`;return e.language?r+=`@${e.language}`:e.datatype&&(r+=`^^<${e.datatype}>`),r}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(r=>this.generateExpression(r)).join(", ")})`;case"exists":return`${e.negated?"NOT EXISTS":"EXISTS"} { ${this.generateWhereClause(e.pattern,0)} }`;case"in":{let t=this.generateExpression(e.expression),r=e.list.map(i=>this.generateExpression(i)).join(", ");return e.negated?`${t} NOT IN (${r})`:`${t} IN (${r})`}default:throw new bu(`Unknown expression type: ${e.type}`)}}collectVariablesFromOperation(e,t){switch(e.type){case"bgp":for(let r of e.triples)this.collectVariablesFromTriple(r,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 r of e.variables)t.add(r);break;case"project":for(let r of e.variables)t.add(r);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 r of e.variables)t.add(r);for(let r of e.aggregates)t.add(r.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 r of e.operands)this.collectVariablesFromExpression(r,t);break;case"function":case"functionCall":for(let r of e.args)this.collectVariablesFromExpression(r,t);break;case"exists":this.collectVariablesFromOperation(e.pattern,t);break;case"in":this.collectVariablesFromExpression(e.expression,t);for(let r of e.list)this.collectVariablesFromExpression(r,t);break}}};Su.SPARQLGenerator=HE});var Eu=v(ti=>{"use strict";var aW=ti&&ti.__createBinding||(Object.create?(function(n,e,t,r){r===void 0&&(r=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(n,r,i)}):(function(n,e,t,r){r===void 0&&(r=t),n[r]=e[t]})),lW=ti&&ti.__setModuleDefault||(Object.create?(function(n,e){Object.defineProperty(n,"default",{enumerable:!0,value:e})}):function(n,e){n.default=e}),W3=ti&&ti.__importStar||(function(){var n=a(function(e){return n=Object.getOwnPropertyNames||function(t){var r=[];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[r.length]=i);return r},n(e)},"ownKeys");return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r=n(e),i=0;i<r.length;i++)r[i]!=="default"&&aW(t,e,r[i]);return lW(t,e),t}})();Object.defineProperty(ti,"__esModule",{value:!0});ti.QueryExecutor=ti.ExoQLQueryExecutor=ti.QueryExecutorError=void 0;var cW=hE(),uW=ry(),fW=FE(),dW=NE(),pW=O3(),hW=D3(),mW=k3(),gW=qE(),yW=j3(),_W=U3(),bW=q3(),SW=G3(),wW=ze(),EW=tt(),vW=Yg(),ln="http://www.w3.org/2001/XMLSchema#",TW=new Set([`${ln}integer`,`${ln}decimal`,`${ln}float`,`${ln}double`,`${ln}nonPositiveInteger`,`${ln}negativeInteger`,`${ln}long`,`${ln}int`,`${ln}short`,`${ln}byte`,`${ln}nonNegativeInteger`,`${ln}unsignedLong`,`${ln}unsignedInt`,`${ln}unsignedShort`,`${ln}unsignedByte`,`${ln}positiveInteger`]),wu=class extends Error{static{a(this,"QueryExecutorError")}constructor(e,t){super(e,t?{cause:t}:void 0),this.name="QueryExecutorError"}};ti.QueryExecutorError=wu;var uy=class{static{a(this,"ExoQLQueryExecutor")}constructor(e,t={}){let r=t.resolveClassHierarchy===!1?e:new bW.ClassHierarchyResolvingStore(e);this.tripleStore=r,this.bgpExecutor=new cW.BGPExecutor(r),this.filterExecutor=new uW.FilterExecutor,this.optionalExecutor=new fW.OptionalExecutor,this.unionExecutor=new dW.UnionExecutor,this.minusExecutor=new pW.MinusExecutor,this.valuesExecutor=new hW.ValuesExecutor,this.aggregateExecutor=new mW.AggregateExecutor,this.constructExecutor=new gW.ConstructExecutor,this.serviceExecutor=new yW.ServiceExecutor(t.serviceConfig),this.graphExecutor=new _W.GraphExecutor(r),this.sparqlGenerator=new SW.SPARQLGenerator,this.filterExecutor.setExistsEvaluator(async(i,s)=>this.evaluateExistsPattern(i,s)),this.filterExecutor.setTripleStore(r)}async evaluateExistsPattern(e,t){for await(let r of this.execute(e))if(t.merge(r)!==null)return!0;return!1}async executeAll(e){let t=[];for await(let r of this.execute(e))t.push(r);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 wu(`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 r=new Set;for(let o of t)for(let l of o.variables())r.add(l);let i=this.collectOperationVariables(e.right);if([...r].some(o=>i.has(o)))for(let o of t){let l=this.substituteVariables(e.right,o);for await(let c of this.execute(l)){let u=o.merge(c);u!==null&&(yield u)}}else{let o=[];for await(let l of this.execute(e.right))o.push(l);for(let l of t)for(let c of o){let u=l.merge(c);u!==null&&(yield u)}}}async*executeLeftJoin(e){let t=[];for await(let o of this.execute(e.left))t.push(o);let r=[];for await(let o of this.execute(e.right))r.push(o);async function*i(){for(let o of t)yield o}a(i,"leftGen");async function*s(){for(let o of r)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 r=[];for await(let o of this.execute(e.right))r.push(o);async function*i(){for(let o of t)yield o}a(i,"leftGen");async function*s(){for(let o of r)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 r=[];for await(let o of this.execute(e.right))r.push(o);async function*i(){for(let o of t)yield o}a(i,"leftGen");async function*s(){for(let o of r)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(()=>W3(Ro())),r=new Set(e.variables);for await(let i of this.execute(e.input)){let s=new t;for(let o of i.variables())if(r.has(o)){let l=i.get(o);l!==void 0&&s.set(o,l)}yield s}}async*executeOrderBy(e){let t=[];for await(let r of this.execute(e.input))t.push(r);t.sort((r,i)=>{for(let s of e.comparators){let o=this.getExpressionValue(s.expression,r),l=this.getExpressionValue(s.expression,i),c=0;if(o===void 0&&l===void 0?c=0:o===void 0?c=1:l===void 0?c=-1:typeof o=="number"&&typeof l=="number"?c=o-l:c=String(o).localeCompare(String(l)),s.descending&&(c=-c),c!==0)return c}return 0});for(let r of t)yield r}async*executeSlice(e){let t=0,r=e.offset??0,i=e.limit;for await(let s of this.execute(e.input)){if(t>=r){if(i!==void 0&&t-r>=i)break;yield s}t++}}async*executeDistinct(e){let t=new Set;for await(let r of this.execute(e.input)){let i=this.getSolutionKey(r);t.has(i)||(t.add(i),yield r)}}async*executeReduced(e){let t=new Set;for await(let r of this.execute(e.input)){let i=this.getSolutionKey(r);t.has(i)||(t.add(i),yield r)}}async*executeGroup(e){let t=[];for await(let i of this.execute(e.input))t.push(i);let r=this.aggregateExecutor.execute(e,t);if(e.having&&e.having.length>0)for(let i of r)e.having.every(o=>this.filterExecutor.evaluateExpression(o,i)===!0)&&(yield i);else for(let i of r)yield i}async*executeExtend(e){let t=e.expression.type!=="aggregate"&&this.filterExecutor.expressionContainsExists(e.expression);for await(let r of this.execute(e.input)){let i=r.clone(),s=t?await this.evaluateExtendExpressionAsync(e.expression,r):this.evaluateExtendExpression(e.expression,r);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 r of this.execute(e.left))t.push(r);for(let r of t){let i=this.substituteVariables(e.right,r);for await(let s of this.execute(i)){let o=r.merge(s);o!==null&&(yield o)}}}substituteVariables(e,t){let r=JSON.parse(JSON.stringify(e));return this.substituteInOperation(r,t)}substituteInOperation(e,t){if(!e||typeof e!="object")return e;let r=e;return e.type==="bgp"&&e.triples?(e.triples=e.triples.map(i=>this.substituteInTriple(i,t)),e):(r.input&&(r.input=this.substituteInOperation(r.input,t)),r.left&&(r.left=this.substituteInOperation(r.left,t)),r.right&&(r.right=this.substituteInOperation(r.right,t)),r.pattern&&(r.pattern=this.substituteInOperation(r.pattern,t)),r.query&&(r.query=this.substituteInOperation(r.query,t)),r.where&&(r.where=this.substituteInOperation(r.where,t)),r.expression&&this.substituteInExpression(r.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.left&&this.substituteInExpression(e.left,t),e.right&&this.substituteInExpression(e.right,t),e.operands)for(let r of e.operands)this.substituteInExpression(r,t);if(e.args)for(let r of e.args)this.substituteInExpression(r,t);if(e.expression&&this.substituteInExpression(e.expression,t),e.list)for(let r of e.list)this.substituteInExpression(r,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 r=t.get(e.value);if(r!=null){let i=r;if(r instanceof wW.IRI||i.termType==="NamedNode")return{type:"iri",value:r.value};if(i.termType==="Literal"||typeof i.value=="string")return{type:"literal",value:i.value,datatype:i.datatype?.value??i._datatype?.value,language:i.language??i._language}}}return e}async*executeService(e){yield*this.serviceExecutor.execute(e,t=>this.sparqlGenerator.generateSelect(t))}async*executeGraph(e){let t=async function*(r,i){let s=this.currentGraphContext;this.currentGraphContext=i;try{r.type==="bgp"&&i&&this.tripleStore.matchInGraph?yield*this.executeBGPInGraph(r,i):yield*this.execute(r)}finally{this.currentGraphContext=s}}.bind(this);yield*this.graphExecutor.execute(e,t)}async*executeBGPInGraph(e,t){if(e.triples.length===0){let{SolutionMapping:r}=await Promise.resolve().then(()=>W3(Ro()));yield new r;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 r=t.get(e.name);if(!r)return;if(r instanceof EW.Literal){let i=r.datatype?.value;if(i===`${ln}dayTimeDuration`)try{return vW.DateTimeFunctions.parseDayTimeDuration(r.value)}catch{return r.value}if(i&&TW.has(i)){let s=parseFloat(r.value);if(!Number.isNaN(s))return s}return r.value}return r.value??r.id??String(r)}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 r=e;if(r.type==="bgp"&&r.triples)for(let i of r.triples)this.collectVarsFromElement(i.subject,t),i.predicate?.type!=="path"&&this.collectVarsFromElement(i.predicate,t),this.collectVarsFromElement(i.object,t);if(r.type==="values"&&r.variables)for(let i of r.variables)t.add(i);r.expression&&this.collectVarsFromExpressionTree(r.expression,t),r.type==="extend"&&r.variable&&t.add(r.variable),r.input&&this.collectVarsFromOperation(r.input,t),r.left&&this.collectVarsFromOperation(r.left,t),r.right&&this.collectVarsFromOperation(r.right,t),r.pattern&&this.collectVarsFromOperation(r.pattern,t),r.query&&this.collectVarsFromOperation(r.query,t),r.where&&this.collectVarsFromOperation(r.where,t)}collectVarsFromElement(e,t){if(!e||typeof e!="object")return;let r=e;r.type==="variable"&&t.add(r.value),r.type==="quoted"&&(this.collectVarsFromElement(r.subject,t),this.collectVarsFromElement(r.predicate,t),this.collectVarsFromElement(r.object,t))}collectVarsFromExpressionTree(e,t){if(!e||typeof e!="object")return;let r=e;if(r.type==="variable"&&r.name&&t.add(r.name),r.type==="exists"&&r.pattern&&this.collectVarsFromOperation(r.pattern,t),r.left&&this.collectVarsFromExpressionTree(r.left,t),r.right&&this.collectVarsFromExpressionTree(r.right,t),r.operands)for(let i of r.operands)this.collectVarsFromExpressionTree(i,t);if(r.args)for(let i of r.args)this.collectVarsFromExpressionTree(i,t);if(r.expression&&this.collectVarsFromExpressionTree(r.expression,t),r.list)for(let i of r.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 wu("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 wu("executeAsk requires an ASK operation");for await(let t of this.execute(e.where))return!0;return!1}};ti.ExoQLQueryExecutor=uy;ti.QueryExecutor=uy});var Z3=v(Co=>{"use strict";var AW=Co&&Co.__decorate||function(n,e,t,r){var i=arguments.length,s=i<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(n,e,t,r);else for(var l=n.length-1;l>=0;l--)(o=n[l])&&(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},IW=Co&&Co.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)};Object.defineProperty(Co,"__esModule",{value:!0});Co.CommandResolver=void 0;var xW=ut(),RW=Fd(),ar=ze(),Gt=tt(),re=Vt(),H3=Sa(),z3=pd(),CW=Vc(),OW=Ld(),vu=ow(),fy=NP(),PW=Jc(),DW=nu(),FW=Eu(),Hl=10,dy="exo__Asset",LW=Hl+1,K3="08cec529-90eb-4d43-88de-ceecccea12b0",NW=re.Namespace.EXOCMD.term("SubstitutionToken").value,Y3=new Set(["today","tomorrow","todayStart","targetFolder","target","randomUUIDv4","nowTimestamp","nowDate","nowYear","nowMonth","userInputLabel","userInput","targetProperty","targetRefProperty","labelAsArray","groundingTargetClass","targetClassSelf"]);function kW(n,e){return`__SUBSTITUTE__${n}__${e}__`}a(kW,"buildSubstitutionMarker");function MW(n,e,t){let r=(0,CW.utf8ToBase64)(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"");return`__SUBSTITUTE_P__${n}__${e}__${r}__`}a(MW,"buildParameterisedMarker");var Q3="3f28af98-c031-4718-8ba2-44ad0b012c52",jW=re.Namespace.EXOCMD.term("TokenInvocation").value,X3="29e2c8f8-2d27-4e58-b467-2e85d46f8122",J3="universal-default-template",zE=class{static{a(this,"CommandResolver")}clearUniversalCache(){this._universalCacheReady=!1,this._universalCacheValue=null,(0,fy.clearUniversalDefault)()}constructor(e,t=RW.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._universalCacheReady=!1,this._universalCacheValue=null}async resolveForAssetMulti(e,t,r){if(t.length===0)return[];let i=[...t].sort().join(","),s=`${e}::${i}::${r??""}`,o=this.multiCache.get(s);if(o)return o;let l=r?await this.expandPrototypeChain(r):void 0,c=await this.expandClassHierarchy(t),u=new Map;for(let[h,_]of c){let y=await this.resolveForAsset(e,h,l);for(let b of y){let S=this.getBindingPriority(b.binding)===2?_:0,I=u.get(b.binding.id);(!I||S<I.depth)&&u.set(b.binding.id,{rc:b,depth:S})}}let f=new Set;for(let{rc:h}of u.values())if(h.binding.overrides)for(let _ of h.binding.overrides)f.add(_);let d=Array.from(u.entries()).filter(([h])=>!f.has(h)).map(([,h])=>h);d.sort((h,_)=>{let y=this.getBindingPriority(h.rc.binding),b=this.getBindingPriority(_.rc.binding);return y!==b?y-b:h.depth!==_.depth?h.depth-_.depth:(h.rc.binding.order??100)-(_.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 l of e){if(l===dy){t.set(l,new Set);continue}let c=[];try{c=await this.getClassAncestors(l)}catch{c=[]}t.set(l,new Set(c))}let r=a(l=>{for(let c of e)if(c!==l&&t.get(c)?.has(l)&&!t.get(l)?.has(c))return!0;return!1},"isAncestorOfSibling"),i=e.filter(l=>!r(l)),s=new Map,o=a((l,c)=>{let u=s.get(l);(u===void 0||c<u)&&s.set(l,c)},"setMin");for(let l of i){if(o(l,0),this.looksLikeUUID(l))try{let u=await this.resolveLabelByUID(l);u&&o(u,0)}catch{}if(l===dy)continue;let c=[];try{c=await this.getClassAncestorsWithDepth(l)}catch{c=[]}for(let{ref:u,depth:f}of c)o(u,f)}return s.has(dy)||s.set(dy,LW),s}async resolveForAsset(e,t,r){let i=typeof r=="string"?`s:${r}`:r?`c:${r.join("\0")}`:"",s=`${e}:${t}:${i}`,o=this.cache.get(s);if(o)return o;let l=typeof r=="string"?await this.expandPrototypeChain(r):r,c=await this.findBindings(t,l,e),u=[];for(let f of c){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 r=await this.findSubjectByUID(e);if(!r||(await this.tripleStore.match(r,re.Namespace.RDF.term("type"),re.Namespace.EXOCMD.term("Command"))).length===0)return null;let s=await this.getLiteralValue(r,re.Namespace.EXO.term("Asset_label"))??"Unknown Command",o=await this.getLiteralValue(r,re.Namespace.EXOCMD.term("Command_labelTemplate")),l=await this.getLiteralValue(r,re.Namespace.EXOCMD.term("Command_icon")),c=await this.getLiteralValue(r,re.Namespace.EXOCMD.term("Command_confirmMessage")),u=await this.getLiteralValue(r,re.Namespace.EXOCMD.term("Command_successMessage")),f=await this.getLiteralValue(r,re.Namespace.EXOCMD.term("Command_category")),d=await this.getLiteralValue(r,re.Namespace.EXOCMD.term("Command_openInSameTab")),p=d!==null&&String(d).trim().toLowerCase()==="true",h=await this.loadLinkedPrecondition(r),_=await this.loadLinkedGrounding(r,0,t);return _?{id:e,name:s,labelTemplate:o??void 0,icon:l??void 0,precondition:h??void 0,grounding:_,confirmMessage:c??void 0,successMessage:u??void 0,category:f??void 0,openInSameTab:p||void 0}:null}async findBindings(e,t,r){let i=typeof t=="string"?await this.expandPrototypeChain(t):t,s=await this.tripleStore.match(void 0,re.Namespace.RDF.term("type"),re.Namespace.EXOCMD.term("CommandBinding")),o=[];for(let l of s){let c=l.subject,u=await this.loadBindingDefinition(c);u&&this.bindingMatches(u,e,i,r)&&o.push(u)}return o}async findPaletteEnabledCommands(){let e=await this.tripleStore.match(void 0,re.Namespace.RDF.term("type"),re.Namespace.EXOCMD.term("Command")),t=[],r=new Set;for(let i of e){let s=i.subject;if((await this.getLiteralValue(s,re.Namespace.EXOCMD.term("Command_paletteEnabled")))?.toLowerCase()!=="true")continue;let l=await this.getLiteralValue(s,re.Namespace.EXO.term("Asset_uid"));if(!l){this.logger.warn(`[CommandResolver] paletteEnabled command at ${s.value} has no exo__Asset_uid \u2014 skipped`);continue}let c=await this.loadCommand(l);if(!c){this.logger.warn(`[CommandResolver] paletteEnabled command ${l} could not be loaded (missing grounding?) \u2014 skipped`);continue}let u=await this.getLiteralValue(s,re.Namespace.EXOCMD.term("Command_paletteId")),f=await this.getLiteralValue(s,re.Namespace.EXOCMD.term("Command_cliName")),d=u??f??l;if(r.has(d)){this.logger.warn(`[CommandResolver] duplicate paletteId "${d}" \u2014 first registration wins, dropping ${l}`);continue}r.add(d),t.push({command:c,paletteId:d})}return t}invalidateCache(){this.cache.clear(),this.multiCache.clear(),this._ancestorDepthCache.clear()}async resolveLabel(e,t){if(!e.labelTemplate)return e.name;let r=e.labelTemplate,i=this.extractPlaceholders(e.labelTemplate);for(let{full:s,body:o}of i){let l=await this.evaluateSelectSnippet(o,t);r=r.replace(s,l)}return r}extractPlaceholders(e){let t=[],r=0;for(;r<e.length;)if(e[r]==="{"){let i=1,s=r+1;for(;s<e.length&&i>0;)e[s]==="{"?i++:e[s]==="}"&&i--,s++;if(i===0){let o=e.slice(r,s),l=e.slice(r+1,s-1);t.push({full:o,body:l})}r=s}else r++;return t}async evaluateSelectSnippet(e,t){try{let r=e.replace(/\$target/g,`<${t}>`),s=new PW.ExoQLParser().parse(r),l=new DW.ExoQLAlgebraTranslator().translate(s),u=await new FW.ExoQLQueryExecutor(this.tripleStore).executeAll(l);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 Gt.Literal||p instanceof ar.IRI?p.value:String(p):""}catch{return""}}async loadBindingDefinition(e){let t=await this.getLiteralValue(e,re.Namespace.EXO.term("Asset_uid"));if(!t)return null;let r=await this.getLiteralValue(e,re.Namespace.EXO.term("Asset_label"))??"",i=await this.getLinkedUID(e,re.Namespace.EXOCMD.term("CommandBinding_command"));if(!i)return null;let s=await this.getLinkedValue(e,re.Namespace.EXOCMD.term("CommandBinding_targetClass")),o=await this.getLinkedValue(e,re.Namespace.EXOCMD.term("CommandBinding_targetPrototype")),l=await this.getLinkedValue(e,re.Namespace.EXOCMD.term("CommandBinding_targetAsset"));if(!s&&!o&&!l)return null;let c=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("CommandBinding_position")),u=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("CommandBinding_order")),f=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("CommandBinding_variant")),d=f!==null?this.coerceVariant(f,t):void 0,p=await this.loadLinkedPreconditionFromProperty(e,re.Namespace.EXOCMD.term("CommandBinding_precondition")),h=await this.loadLinkedStyle(e,t),_=await this.getLinkedUIDs(e,re.Namespace.EXOCMD.term("CommandBinding_overrides"));return{id:t,label:r,commandRef:i,targetClass:s??void 0,targetPrototype:o??void 0,targetAsset:l??void 0,position:c??void 0,order:u?parseInt(u,10):void 0,variant:d,precondition:p??void 0,style:h??void 0,overrides:_.length>0?_:void 0}}async loadLinkedStyle(e,t){let r=await this.tripleStore.match(e,re.Namespace.EXOCMD.term("CommandBinding_style"),void 0);if(r.length>0){let s=r[0].object,o=null;if(s instanceof ar.IRI)o=s;else if(s instanceof Gt.Literal){let l=this.normalizeWikilink(s.value);o=await this.findSubjectByUID(l)}if(o){let l=await this.loadStyleAsset(o);if(l)return l}this.logger.warn(this.capWarning(`CommandBinding ${t}: style reference unresolved, falling back to inline variant`))}let i=await this.getLiteralValue(e,re.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,re.Namespace.EXO.term("Asset_uid"));if(!t)return null;let r=await this.getLiteralValue(e,re.Namespace.EXO.term("Asset_label"))??"",i=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("CommandBindingStyle_variant")),s=i!==null?this.coerceVariant(i,t):void 0,o=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("CommandBindingStyle_showIcon")),l=this.coerceBoolean(o),c=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("CommandBindingStyle_labelClass")),u=c!==null?this.coerceLabelClass(c,t):void 0,f=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("CommandBindingStyle_ariaLabel")),d=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("CommandBindingStyle_tooltip")),p=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("CommandBindingStyle_keyboardShortcut")),h=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("CommandBindingStyle_source")),_=h!==null?this.coerceStyleSource(h,t):void 0;return{id:t,label:r,variant:s,showIcon:l,labelClass:u,ariaLabel:f??void 0,tooltip:d??void 0,keyboardShortcut:p??void 0,source:_,inline:!1}}coerceVariant(e,t){if(e==null)return;let r=String(e).trim().toLowerCase();if(r!==""){if(vu.COMMAND_VARIANT_VALUES.includes(r))return r;this.logger.warn(this.capWarning(`CommandBindingStyle variant "${r}" not in whitelist [${vu.COMMAND_VARIANT_VALUES.join(",")}]; dropped (asset ${t})`))}}coerceLabelClass(e,t){if(e==null)return;let r=String(e).trim().toLowerCase();if(r!==""){if(vu.LABEL_CLASS_VALUES.includes(r))return r;this.logger.warn(this.capWarning(`CommandBindingStyle labelClass "${r}" not in whitelist [${vu.LABEL_CLASS_VALUES.join(",")}]; dropped (asset ${t})`))}}coerceStyleSource(e,t){if(e==null)return;let r=String(e).trim().toLowerCase();if(r!==""){if(vu.STYLE_SOURCE_VALUES.includes(r))return r;this.logger.warn(this.capWarning(`CommandBindingStyle source "${r}" not in whitelist [${vu.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,r,i){if(e.targetAsset&&i&&this.matchesReference(e.targetAsset,i))return!0;if(e.targetPrototype&&r){for(let s of r)if(this.matchesReference(e.targetPrototype,s))return!0}return!!(e.targetClass&&t&&this.matchesReference(e.targetClass,t))}matchesReference(e,t){let r=this.normalizeWikilink(e),i=this.normalizeWikilink(t);if(r===i)return!0;let s=this.extractPathBasename(i);if(s&&s===r)return!0;let o=this.extractPathBasename(r);if(o&&o===i)return!0;let l=this.extractAlias(t);if(l&&r===l)return!0;let c=this.extractAlias(e);return!!(c&&c===i)}extractPathBasename(e){let t=e.match(/\/([^/]+)\.md$/);return t?t[1]:null}extractAlias(e){let t=e.replace(/["'[\]]/g,"").trim(),r=t.indexOf("|");return r>=0?t.substring(r+1).trim():null}getBindingPriority(e){return e.targetAsset?0:e.targetPrototype?1:2}async loadLinkedPrecondition(e){return this.loadLinkedPreconditionFromProperty(e,re.Namespace.EXOCMD.term("Command_precondition"))}async loadLinkedPreconditionFromProperty(e,t){let r=await this.tripleStore.match(e,t,void 0);if(r.length===0)return null;let i=await this.resolvePreconditionRef(r[0].object);return i?this.loadPreconditionSubject(i,new Set,0):null}async resolvePreconditionRef(e){if(e instanceof ar.IRI)return e;if(e instanceof Gt.Literal){let t=this.normalizeWikilink(e.value);return await this.findSubjectByUID(t)}return null}async loadPreconditionSubject(e,t,r){let i=await this.getLiteralValue(e,re.Namespace.EXO.term("Asset_uid")),s=await this.getLiteralValue(e,re.Namespace.EXO.term("Asset_label"))??"";if(i&&t.has(i))return this.brokenPreconditionNode(i,s);if(r>=Hl)return this.brokenPreconditionNode(i??"",s);let o=await this.tripleStore.match(e,re.Namespace.EXOCMD.term("AllPrecondition_preconditions"),void 0),l=await this.tripleStore.match(e,re.Namespace.EXOCMD.term("AnyPrecondition_preconditions"),void 0),c=await this.tripleStore.match(e,re.Namespace.EXOCMD.term("NotPrecondition_precondition"),void 0);if(o.length>0||l.length>0||c.length>0){let p=new Set(t);if(i&&p.add(i),o.length>0||l.length>0){let _=o.length>0?"all":"any",y=o.length>0?o:l,b=[];for(let S of y)b.push(await this.loadChildPrecondition(S.object,p,r+1));return{id:i??"",label:s,composite:{op:_,children:b}}}let h=await this.loadChildPrecondition(c[0].object,p,r+1);return{id:i??"",label:s,not:h}}let u=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Precondition_sparqlAsk")),f=await this.getLiteralValue(e,re.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,r){let i=await this.resolvePreconditionRef(e);if(!i){let l=e instanceof Gt.Literal?this.normalizeWikilink(e.value):"";return this.brokenPreconditionNode(l,"")}let s=await this.loadPreconditionSubject(i,t,r);if(s)return s;let o=await this.getLiteralValue(i,re.Namespace.EXO.term("Asset_uid"));return this.brokenPreconditionNode(o??"","")}async loadPreconditionQueryRef(e){let t=await this.tripleStore.match(e,re.Namespace.EXOCMD.term("Precondition_query"),void 0);if(t.length===0)return;let r=t[0].object;if(r instanceof ar.IRI)return await this.getLiteralValue(r,re.Namespace.EXO.term("Asset_uid"))??void 0;if(r instanceof Gt.Literal)return this.normalizeWikilink(r.value)}brokenPreconditionNode(e,t){return{id:e,label:t,broken:!0}}async loadLinkedGrounding(e,t,r){if(t>=Hl)return null;let i=await this.tripleStore.match(e,re.Namespace.EXOCMD.term("Command_grounding"),void 0);if(i.length===0)return null;if(i.length===1||!r?.targetClass){let o=await this.resolveGroundingRef(i[0].object);return o?this.loadGroundingDefinition(o,t):null}for(let o of i){let l=await this.resolveGroundingRef(o.object);if(!l)continue;let c=await this.getObsidianName(l,re.Namespace.EXOCMD.term("Grounding_targetPrototype"));if(c&&this.matchesReference(c,r.targetClass))return this.loadGroundingDefinition(l,t)}this.logger.warn(`Command ${e.value}: ${i.length} groundings declared, none matched context.targetClass='${r.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 ar.IRI)return e;if(e instanceof Gt.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>=Hl)return null;let r=await this.getLiteralValue(e,re.Namespace.EXO.term("Asset_uid"));if(!r)return null;let i=await this.getLiteralValue(e,re.Namespace.EXO.term("Asset_label"))??"",s=await this.resolveGroundingTypeReference(e);if(!s)return null;let o=await this.getObsidianName(e,re.Namespace.EXOCMD.term("Grounding_targetProperty"));if(o&&this.looksLikeUUID(o)){let B=await this.resolveLabelByUID(o);if(!B)return this.logger.warn(`Grounding ${r}: targetProperty wikilink UID '${o}' is not resolvable to exo__Asset_label \u2014 grounding skipped (would otherwise write a UUID-named frontmatter key).`),null;o=B}if(s===H3.GroundingType.SERVICE_CALL){let B=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_serviceId"));B&&(o=B)}let l=await this.getObsidianName(e,re.Namespace.EXOCMD.term("Grounding_targetValueRef")),c=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_targetValueLiteral")),u=await this.getObsidianName(e,re.Namespace.EXOCMD.term("Grounding_targetValueSubstitution")),f=null;if(u&&this.looksLikeUUID(u)){let B=await this.resolveLabelByUID(u);if(!B)return this.logger.warn(`Grounding ${r}: targetValueSubstitution UID '${u}' is not resolvable to exo__Asset_label (SubstitutionToken instance missing or unlabelled) \u2014 grounding skipped.`),null;f=B}else u&&(f=u);let d=await this.getObsidianName(e,re.Namespace.EXOCMD.term("Grounding_targetValueQuery")),p=await this.getObsidianName(e,re.Namespace.EXOCMD.term("Grounding_targetQuery")),h=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_serviceCallPayload")),_=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_appendExpression")),y=await this.getObsidianWikilinkValue(e,re.Namespace.EXOCMD.term("Grounding_isDefinedBy")),b=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_sparqlUpdate")),S=await this.getObsidianName(e,re.Namespace.EXOCMD.term("Grounding_targetClass"));if(S&&!this.looksLikeUUID(S)){let B=await this.findUidByLabel(S);B&&(S=B)}let I=await this.getObsidianName(e,re.Namespace.EXOCMD.term("Grounding_targetPrototype")),O=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_targetFolder")),T=await this.getObsidianName(e,re.Namespace.EXOCMD.term("Grounding_linkBackProperty")),E=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_inputSchema")),P=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_incrementBy")),V=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_shiftDelta")),M;if(P!=null&&P!==""){let B=Number.parseInt(String(P),10);Number.isFinite(B)&&(M=B)}let j=await this.resolvePropertyDefaults(e,r),$=await this.resolveInheritanceRules(e,r),G=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_propertyDefaults"));G!==null&&G!==""&&!this._legacyPropertyDefaultsWarnedGroundings.has(r)&&(this.logger.warn(`Grounding ${r}: 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(r));let ge;s===H3.GroundingType.COMPOSITE&&(ge=await this.loadCompositeSteps(e,t+1));let ye;if(E)try{let B=JSON.parse(E);B?.properties&&(ye=Object.entries(B.properties).map(([oe,Ee])=>{let Ce=Ee.type,xe=Ce==="string"?"text":Ce,Oe=Ee.defaultValue!==void 0?Ee.defaultValue:Ee.default,Re={name:oe,type:xe,label:Ee.title??oe,required:Array.isArray(B.required)&&B.required.includes(oe)};return Oe!=null&&(Re.defaultValue=String(Oe)),typeof Ee.targetClassUid=="string"&&(Re.targetClassUid=Ee.targetClassUid),Re}))}catch{}let Q=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_prefillLabelWithDate")),se=Q!==null&&String(Q).trim().toLowerCase()==="true",J=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_labelTemplate")),ve=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_direction")),te;if(ve!=null){let B=String(ve).trim().toLowerCase();B==="forward"||B==="rollback"?te=B:B!==""&&this.logger.warn(`Grounding ${r}: exocmd__Grounding_direction value '${ve}' is not 'forward' or 'rollback' \u2014 treating as undefined (will default to 'forward' at dispatch).`)}let ie=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_bodyTemplate")),he=await this.getObsidianName(e,re.Namespace.EXOCMD.term("Grounding_templateRef")),Ue=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_cloneTargetBody")),ce=Ue!==null&&String(Ue).trim().toLowerCase()==="true",ue=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_targetsCreatedInstance")),fe=ue!==null&&String(ue).trim().toLowerCase()==="true",ne=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("Grounding_omitLabel")),me=ne!==null&&String(ne).trim().toLowerCase()==="true",Le={id:r,label:i,type:s,targetProperty:o??void 0,targetValueRef:l??void 0,targetValueLiteral:c??void 0,targetValueSubstitution:f??void 0,targetValueQuery:d??void 0,targetQuery:p??void 0,serviceCallPayload:h??void 0,appendExpression:_??void 0,sparqlUpdate:b??void 0,steps:ge,targetClass:S??void 0,targetPrototype:I??void 0,targetFolder:O??void 0,linkBackProperty:T??void 0,incrementBy:M,shiftDelta:V??void 0,propertyDefault:j.length>0?j:void 0,inheritanceRule:$.length>0?$:void 0,isDefinedBy:y??void 0,prefillLabelWithDate:se||void 0,labelTemplate:J??void 0,direction:te,bodyTemplate:ie??void 0,templateRef:he??void 0,cloneTargetBody:ce||void 0,targetsCreatedInstance:fe||void 0,omitLabel:me||void 0};return ye&&(Le.inputSchema=ye),Le}async loadCompositeSteps(e,t){if(t>=Hl)return[];let r=await this.tripleStore.match(e,re.Namespace.EXOCMD.term("Grounding_steps"),void 0),i=[];for(let s of r){let o=null;if(s.object instanceof ar.IRI)o=s.object;else if(s.object instanceof Gt.Literal){let c=this.normalizeWikilink(s.object.value);o=await this.findSubjectByUID(c)}if(!o)continue;let l=await this.loadGroundingDefinition(o,t);l&&i.push(l)}return i}async resolvePropertyDefaults(e,t){let r=await this.resolvePropertyDefaultsForSubject(e,t,re.Namespace.EXOCMD.term("Grounding_propertyDefault")),i=await this.getUniversalCache();return i&&i.propertyDefaults.length>0?(0,fy.mergePropertyDefaults)(i.propertyDefaults,r):r}async resolvePropertyDefaultsForSubject(e,t,r){let i=await this.tripleStore.match(e,r,void 0),s=[];for(let o of i){let l=await this.resolveRefTripleObject(o.object);if(!l)continue;let c=await this.getObsidianName(l,re.Namespace.EXOCMD.term("PropertyDefault_property"));if(!c){this.logger.warn(`Grounding ${t}: PropertyDefault asset missing exocmd__PropertyDefault_property \u2014 entry skipped.`);continue}let u=this.looksLikeUUID(c)?await this.resolveLabelByUID(c):c;if(!u){this.logger.warn(`Grounding ${t}: PropertyDefault property UID '${c}' is not resolvable to exo__Asset_label \u2014 entry skipped.`);continue}let f=await this.getObsidianName(l,re.Namespace.EXOCMD.term("PropertyDefault_value"));if(!f){this.logger.warn(`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(0,fy.loadUniversalDefault)();if(e)return this._universalCacheValue=e,e;let t=await this.findUniversalSingleton();if(!t)return this._universalCacheValue=null,null;let r=await this.resolvePropertyDefaultsForSubject(t,J3,re.Namespace.EXOCMD.term("Template_propertyDefault")),i=await this.resolveInheritanceRulesForSubject(t,J3,re.Namespace.EXOCMD.term("Template_inheritanceRule"));return this._universalCacheValue={propertyDefaults:r,inheritanceRules:i},this._universalCacheValue}async findUniversalSingleton(){let e=re.Namespace.EXOCMD.term("UniversalDefaultTemplate").value,t=await this.tripleStore.match(void 0,re.Namespace.EXO.term("Instance_class"),void 0),r=[];for(let i of t){let s=!1;if(i.object instanceof ar.IRI)s=i.object.value===e||i.object.value.includes(X3);else if(i.object instanceof Gt.Literal){let o=this.unwrapWikilink(i.object.value);s=o==="exocmd__UniversalDefaultTemplate"||o===X3}s&&i.subject instanceof ar.IRI&&r.push(i.subject)}return r.length===0?null:(r.length===1||(r.sort((i,s)=>i.value.localeCompare(s.value)),this.logger.warn(`Multiple UniversalDefaultTemplate singletons found (${r.length}); selecting deterministically by lexicographic UID order: ${r[0].value}`)),r[0])}async resolveInheritanceRules(e,t){let r=await this.resolveInheritanceRulesForSubject(e,t,re.Namespace.EXOCMD.term("Grounding_inheritanceRule")),i=await this.getUniversalCache();return i&&i.inheritanceRules.length>0?(0,fy.mergeInheritanceRules)(i.inheritanceRules,r):r}async resolveInheritanceRulesForSubject(e,t,r){let i=await this.tripleStore.match(e,r,void 0),s=[],o=t;for(let l of i){let c=await this.resolveRefTripleObject(l.object);if(!c)continue;let u=await this.resolveLabelRef(c,re.Namespace.EXOCMD.term("InheritanceRule_sourceProperty"));if(!u){this.logger.warn(`Grounding ${o}: InheritanceRule missing/unresolvable exocmd__InheritanceRule_sourceProperty \u2014 entry skipped.`);continue}let f=await this.resolveLabelRef(c,re.Namespace.EXOCMD.term("InheritanceRule_targetProperty"));if(!f){this.logger.warn(`Grounding ${o}: InheritanceRule missing/unresolvable exocmd__InheritanceRule_targetProperty \u2014 entry skipped.`);continue}let d=await this.tripleStore.match(c,re.Namespace.EXOCMD.term("InheritanceRule_targetClassCondition"),void 0),p,h;if(d.length>0){let T=await this.getObsidianName(c,re.Namespace.EXOCMD.term("InheritanceRule_targetClassCondition"));if(!T||!T.trim()){this.logger.warn(`Grounding ${o}: InheritanceRule has exocmd__InheritanceRule_targetClassCondition triple but ref is unresolvable \u2014 entire rule skipped (would otherwise apply unconditionally, broadening scope).`);continue}this.looksLikeUUID(T)?(h=T,p=await this.resolveLabelByUID(T)??void 0):p=T}let _=await this.tripleStore.match(c,re.Namespace.EXOCMD.term("InheritanceRule_targetClassExclusion"),void 0),y=[],b=[],S=!1;for(let T of _){let E=null;if(T.object instanceof ar.IRI?E=this.iriToObsidianName(T.object.value)??T.object.value:T.object instanceof Gt.Literal&&(E=this.unwrapWikilink(T.object.value)),!E){S=!0;continue}if(this.looksLikeUUID(E)){b.push(E);let P=await this.resolveLabelByUID(E);P&&y.push(P)}else y.push(E)}if(S){this.logger.warn(`Grounding ${o}: InheritanceRule has unresolvable exocmd__InheritanceRule_targetClassExclusion entry \u2014 entire rule skipped (would otherwise expand scope by silently dropping the excluded class).`);continue}let I=await this.getLiteralValue(c,re.Namespace.EXOCMD.term("InheritanceRule_priority")),O=50;if(I!==null&&I!==""){let T=Number.parseInt(String(I),10);Number.isFinite(T)&&(O=T)}s.push({sourcePropertyName:u,targetPropertyName:f,targetClassCondition:p,targetClassConditionUid:h,targetClassExclusion:y,targetClassExclusionUids:b,priority:O})}return s}async resolveRefTripleObject(e){if(e instanceof ar.IRI)return e;if(e instanceof Gt.Literal){let t=this.normalizeWikilink(e.value);return t?this.findSubjectByUID(t):null}return null}async resolveLabelRef(e,t){let r=await this.getObsidianName(e,t);return r?this.looksLikeUUID(r)?this.resolveLabelByUID(r):r:null}async resolvePropertyDefaultValue(e,t,r){if(!this.looksLikeUUID(e))return`"[[${e}]]"`;let i=await this.findSubjectByUID(e);if(!i){let l=`${t}|${e}`;return this._fallbackWarnedKeys.has(l)||(this._fallbackWarnedKeys.add(l),this.logger.warn(this.capWarning(`Grounding ${t}: PropertyDefault '${r}' \u2192 value asset ${e} not in store; emitting wikilink (a link, not the substituted value).`))),`"[[${e}]]"`}return await this.assetIsTokenInvocation(i)?this.resolveTokenInvocation(i,e,t,r):await this.assetIsSubstitutionToken(i)?this.dispatchSubstitutionToken(i,e,t,r,void 0):(this.logger.debug(`Grounding ${t}: PropertyDefault '${r}' value '${e}' is not a SubstitutionToken \u2014 emitting wikilink form.`),`"[[${e}]]"`)}async dispatchSubstitutionToken(e,t,r,i,s){let o=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("SubstitutionToken_resolver"));if(!o||!o.trim())return this.logger.warn(`Grounding ${r}: PropertyDefault '${i}' references SubstitutionToken '${t}' with no exocmd__SubstitutionToken_resolver \u2014 falling back to wikilink form.`),`"[[${t}]]"`;let l=o.trim();return Y3.has(l)?s!==void 0?MW(l,t,s):kW(l,t):(this.logger.warn(`Grounding ${r}: PropertyDefault '${i}' SubstitutionToken '${t}' declares unknown resolver-id '${l}' \u2014 falling back to wikilink form. Known ids: ${Array.from(Y3).join(", ")}.`),`"[[${t}]]"`)}async resolveTokenInvocation(e,t,r,i){let s=await this.getObsidianName(e,re.Namespace.EXOCMD.term("TokenInvocation_token"));if(!s)return this.logger.warn(`Grounding ${r}: PropertyDefault '${i}' TokenInvocation '${t}' missing exocmd__TokenInvocation_token \u2014 entry skipped.`),null;let o=await this.getLiteralValue(e,re.Namespace.EXOCMD.term("TokenInvocation_parameter"))??"";if(!this.looksLikeUUID(s))return this.logger.warn(`Grounding ${r}: PropertyDefault '${i}' TokenInvocation '${t}' references non-UUID token '${s}' \u2014 entry skipped.`),null;let l=await this.findSubjectByUID(s);return l?this.dispatchSubstitutionToken(l,s,r,i,o):(this.logger.warn(`Grounding ${r}: 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,re.Namespace.EXO.term("Instance_class"),void 0);for(let r of t)if(r.object instanceof ar.IRI){if(r.object.value===jW||r.object.value.includes(Q3))return!0}else if(r.object instanceof Gt.Literal){let i=this.unwrapWikilink(r.object.value);if(i==="exocmd__TokenInvocation"||i===Q3)return!0}return!1}async assetIsSubstitutionToken(e){let t=await this.tripleStore.match(e,re.Namespace.EXO.term("Instance_class"),void 0);for(let r of t)if(r.object instanceof ar.IRI){if(r.object.value===NW||r.object.value.includes(K3))return!0}else if(r.object instanceof Gt.Literal){let i=this.unwrapWikilink(r.object.value);if(i==="exocmd__SubstitutionToken"||i===K3)return!0}return!1}async resolveGroundingTypeReference(e){let t=await this.tripleStore.match(e,re.Namespace.EXOCMD.term("Grounding_type"),void 0);if(t.length===0)return null;let r=t[0].object;if(r instanceof ar.IRI)return(0,z3.resolveGroundingTypeFromIRI)(r.value);if(r instanceof Gt.Literal){let i=r.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,z3.resolveGroundingTypeFromIRI)(`obsidian://vault/${s[1].toLowerCase()}.md`):(this.logger.warn(`[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],r=new Set([this.normalizeWikilink(e).toLowerCase()]),i=e;for(let s=0;s<Hl;s++){let o=this.extractUuidFromRef(i);if(!o)break;let l=null;try{let u=await this.findSubjectByUID(o);if(!u)break;l=await this.getLinkedValue(u,re.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(!l)break;let c=this.normalizeWikilink(l).toLowerCase();if(r.has(c))break;r.add(c),t.push(l),i=l}return t}extractUuidFromRef(e){let t=this.normalizeWikilink(e);if(this.looksLikeUUID(t))return t;let r=this.extractPathBasename(t);return r&&this.looksLikeUUID(r)?r:null}async findSubjectByUID(e){if(this.tripleStore.findSubjectsByUUID){let r=await this.tripleStore.findSubjectsByUUID(e);if(r.length>0)return r[0]}let t=await this.tripleStore.match(void 0,re.Namespace.EXO.term("Asset_uid"),void 0);for(let r of t)if(r.object instanceof Gt.Literal&&r.object.value===e)return r.subject;return null}async getLiteralValue(e,t){let r=await this.tripleStore.match(e,t,void 0);if(r.length===0)return null;let i=r[0].object;return i instanceof Gt.Literal||i instanceof ar.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.getLiteralValue(t,re.Namespace.EXO.term("Asset_label")):null}async getClassAncestors(e){return(await this.getClassAncestorsWithDepth(e)).map(r=>r.ref)}async getClassAncestorsWithDepth(e){let t=this._ancestorDepthCache.get(e);if(t)return t;let r=new Map,i=new Set,s=await this.resolveClassFileIRI(e);if(!s)return[];let o=new Set([e]),l=await this.getLiteralValue(s,re.Namespace.EXO.term("Asset_uid"));l&&o.add(l);let c=await this.getLiteralValue(s,re.Namespace.EXO.term("Asset_label"));c&&o.add(c);let u=a((p,h)=>{if(o.has(p))return;let _=r.get(p);(_===void 0||h<_)&&r.set(p,h)},"setMin"),f=[{fileIRI:s,depth:0}];for(;f.length>0;){let p=f.shift();if(!p)break;let{fileIRI:h,depth:_}=p;if(_>=Hl||i.has(h.value))continue;i.add(h.value);let y=await this.tripleStore.match(h,re.Namespace.EXO.term("Class_superClass"),void 0);for(let b of y){let S=b.object;if(!(S instanceof ar.IRI))continue;let I=_+1,O=S.value.startsWith("obsidian://vault/"),T=this.iriToObsidianName(S.value);T&&u(T,I);let E=null;if(O?E=S:T&&(E=await this.resolveClassFileIRI(T)),!E)continue;let P=await this.getLiteralValue(E,re.Namespace.EXO.term("Asset_uid"));P&&u(P,I),i.has(E.value)||f.push({fileIRI:E,depth:I})}}let d=Array.from(r.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){let t=await this.tripleStore.match(void 0,re.Namespace.EXO.term("Asset_label"),void 0);for(let r of t)if(r.object instanceof Gt.Literal&&r.object.value===e&&r.subject instanceof ar.IRI){let i=await this.tripleStore.match(r.subject,re.Namespace.EXO.term("Asset_uid"),void 0);if(i.length>0&&i[0].object instanceof Gt.Literal)return i[0].object.value}return null}async getLinkedUID(e,t){let r=await this.tripleStore.match(e,t,void 0);if(r.length===0)return null;let i=r[0].object;if(i instanceof ar.IRI){let s=await this.tripleStore.match(i,re.Namespace.EXO.term("Asset_uid"),void 0);return s.length>0&&s[0].object instanceof Gt.Literal?s[0].object.value:i.value.split("/").pop()?.replace(".md","")??null}return i instanceof Gt.Literal?this.normalizeWikilink(i.value):null}async getLinkedUIDs(e,t){let r=await this.tripleStore.match(e,t,void 0),i=[];for(let s of r){let o=s.object;if(o instanceof ar.IRI){let l=await this.tripleStore.match(o,re.Namespace.EXO.term("Asset_uid"),void 0);if(l.length>0&&l[0].object instanceof Gt.Literal)i.push(l[0].object.value);else{let c=o.value.split("/").pop()?.replace(".md","");c&&i.push(c)}}else if(o instanceof Gt.Literal){let l=this.normalizeWikilink(o.value);l&&i.push(l)}}return i}async getLinkedValue(e,t){let r=await this.tripleStore.match(e,t,void 0);if(r.length===0)return null;let i=r[0].object;return i instanceof Gt.Literal?this.normalizeWikilink(i.value):i instanceof ar.IRI?this.iriToObsidianName(i.value)??i.value:null}async getObsidianName(e,t){let r=await this.tripleStore.match(e,t,void 0);if(r.length===0)return null;let i=r[0].object;return i instanceof Gt.Literal?this.unwrapWikilink(i.value):i instanceof ar.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 r=t.match(/^\[\[([^\]|]+)\|([^\]]+)\]\]$/);if(r)return r[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 r=await this.tripleStore.match(e,t,void 0);if(r.length===0)return null;let i=r[0].object;if(i instanceof Gt.Literal)return this.resolveWikilinkAlias(i.value);if(i instanceof ar.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 r=t[1],i=await this.findSubjectByUID(r);if(!i)return e;let s=await this.getLiteralValue(i,re.Namespace.EXO.term("Asset_label"));return s?e.replace(`[[${r}]]`,`[[${r}|${s}]]`):e}iriToObsidianName(e){return(0,OW.iriToObsidianName)(e)}normalizeWikilink(e){let t=e.replace(/["'[\]]/g,"").trim(),r=t.indexOf("|");return r>=0?t.substring(0,r):t}};Co.CommandResolver=zE;Co.CommandResolver=zE=AW([(0,xW.injectable)(),IW("design:paramtypes",[Object,Object])],zE)});var YE=v(KE=>{"use strict";Object.defineProperty(KE,"__esModule",{value:!0});KE.validateExoQLAllowlist=$W;var py=qd();function $W(n){if(!n||typeof n!="object")return;let e=n;if(e.type==="update"){let t=n.updates??[];for(let r of t)if(r?.type==="load")throw new py.ExoQLForbiddenKeywordError("LOAD");throw new py.ExoQLForbiddenKeywordError("UPDATE")}if(e.type==="query"){if(e.from){let t=Array.isArray(e.from.default)&&e.from.default.length>0,r=Array.isArray(e.from.named)&&e.from.named.length>0;if(t||r)throw new py.ExoQLForbiddenKeywordError("FROM")}if(Array.isArray(e.where))for(let t of e.where)hy(t);if(Array.isArray(e.template))for(let t of e.template)hy(t)}}a($W,"validateExoQLAllowlist");function hy(n){if(!n||typeof n!="object")return;if(n.type==="service")throw new py.ExoQLForbiddenKeywordError("SERVICE");if(Array.isArray(n.patterns))for(let t of n.patterns)hy(t);let e=n.where;if(Array.isArray(e))for(let t of e)hy(t)}a(hy,"walkPatternForBannedKeywords")});var QE=v(my=>{"use strict";Object.defineProperty(my,"__esModule",{value:!0});my.DEFAULT_EVAL_CONFIG=void 0;my.DEFAULT_EVAL_CONFIG=Object.freeze({enabled:!0,maxNestedEvalCount:100,maxAggregateEvalMillis:1e4})});var gy=v(XE=>{"use strict";Object.defineProperty(XE,"__esModule",{value:!0});XE.evaluateWithExoEval=HW;var UW=Jc(),BW=nu(),VW=Eu(),qW=YE(),GW=QE(),WW=qd();async function HW(n,e={}){if(typeof n!="string")throw new TypeError("evaluateWithExoEval: sparql must be a string");let r=new UW.ExoQLParser().parse(n);if((0,qW.validateExoQLAllowlist)(r),!{...GW.DEFAULT_EVAL_CONFIG,...e.config??{}}.enabled)throw new WW.ExoQLEvalDisabledError;let s="queryType"in r&&typeof r.queryType=="string"?r.queryType:"SELECT";if(!e.store)return s==="ASK"?{kind:"ask",result:!1}:s==="CONSTRUCT"?{kind:"construct",triples:[]}:{kind:"select",rows:[]};let l=new BW.ExoQLAlgebraTranslator().translate(r),c=new VW.ExoQLQueryExecutor(e.store);return c.isAskQuery(l)?{kind:"ask",result:await c.executeAsk(l)}:c.isConstructQuery(l)?{kind:"construct",triples:await c.executeConstruct(l)}:{kind:"select",rows:await c.executeAll(l)}}a(HW,"evaluateWithExoEval")});var zi=v(yy=>{"use strict";Object.defineProperty(yy,"__esModule",{value:!0});yy.DateFormatter=void 0;var JE=class n{static{a(this,"DateFormatter")}static toISOTimestamp(e){return e.toISOString().replace(/\.\d{3}Z$/,"Z")}static toLocalTimestamp(e){let t=e.getFullYear(),r=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"),l=String(e.getSeconds()).padStart(2,"0");return`${t}-${r}-${i}T${s}:${o}:${l}`}static toDateWikilink(e){let t=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),i=String(e.getDate()).padStart(2,"0");return`"[[${t}-${r}-${i}]]"`}static getTodayWikilink(){return n.toDateWikilink(new Date)}static toDateString(e){let t=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),i=String(e.getDate()).padStart(2,"0");return`${t}-${r}-${i}`}static parseWikilink(e){let r=e.replace(/^["']|["']$/g,"").match(/\[\[(\d{4}-\d{2}-\d{2})\]\]/);return r?r[1]:null}static addDays(e,t){let r=new Date(e);return r.setDate(r.getDate()+t),r}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),n.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[r,i,s]=t,o=new Date(r,i-1,s,0,0,0,0);if(isNaN(o.getTime()))throw new Error(`Invalid date values: ${e}`);return n.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 n.toISOTimestamp(t)}static isISOTimestamp(e){return/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/.test(e)}};yy.DateFormatter=JE});var Wd=v(_y=>{"use strict";Object.defineProperty(_y,"__esModule",{value:!0});_y.liveClock=zW;_y.frozenClock=KW;function zW(){return{now:a(()=>new Date,"now")}}a(zW,"liveClock");function KW(n){let e=new Date(n);return{now:a(()=>new Date(e.getTime()),"now")}}a(KW,"frozenClock")});var tD=v(Oo=>{"use strict";var YW=Oo&&Oo.__decorate||function(n,e,t,r){var i=arguments.length,s=i<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(n,e,t,r);else for(var l=n.length-1;l>=0;l--)(o=n[l])&&(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},QW=Oo&&Oo.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},zd;Object.defineProperty(Oo,"__esModule",{value:!0});Oo.PreconditionEvaluator=void 0;var XW=ut(),JW=Jc(),ZW=nu(),eD=Eu(),eH=gy(),Hd=zi(),tH=Wd(),Kd=zd=class{static{a(this,"PreconditionEvaluator")}constructor(e,t,r){this.hostFunctions=new Map,this.askCache=new Map,this.tripleStore=e,this.queryBodyResolver=t,this.clock=r?.clock??(0,tH.liveClock)()}async evaluate(e,t,r){if(!e)return!0;let i=new Map;return await this.evaluateNode(e,t,r,i)==="yes"}async evaluateNode(e,t,r,i){if(e.broken)return"unknown";if(e.composite){let{op:s,children:o}=e.composite;if(o.length===0)return"unknown";let l=await Promise.all(o.map(c=>this.evaluateNode(c,t,r,i)));return s==="all"?l.includes("no")?"no":l.includes("unknown")?"unknown":"yes":l.includes("yes")?"yes":l.includes("unknown")?"unknown":"no"}if(e.not){let s=await this.evaluateNode(e.not,t,r,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,r)?"yes":"no":"yes"}evaluateSparqlAskMemoized(e,t,r){let i=r.get(e);if(i!==void 0)return i;let s=this.evaluateSparqlAsk(e,t);return r.set(e,s),s}async evaluateQueryRef(e,t){if(!this.queryBodyResolver)return!1;try{let r=await this.queryBodyResolver.resolveSparql(e);if(!r)return!1;let i=this.substituteVariables(r,t),s=await(0,eH.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,r){return this.hostFunctions.has(e)?this.evaluateHostFunction(e,t,r):null}invalidateCache(){this.askCache.clear()}compileAsk(e){let t=this.substituteVariables(e,zd.SENTINEL_IRI),i=new JW.ExoQLParser().parse(t),o=new ZW.ExoQLAlgebraTranslator().translate(i);return new eD.ExoQLQueryExecutor(this.tripleStore).isAskQuery(o)?o:null}evaluateHostFunction(e,t,r){let i=this.hostFunctions.get(e);if(!i)return!0;let s=r?{...r,targetIRI:t}:{targetIRI:t};try{return i(s)}catch{return!1}}async evaluateSparqlAsk(e,t){try{let r=zd.TEMPORAL_TOKEN.test(e),i=r?Hd.DateFormatter.toDateString(this.clock.now()):null,s=this.askCache.get(e);if(s===void 0||r&&s.day!==i){let c=this.compileAsk(e);if(!c)return!1;s={day:i,compiled:c},this.askCache.set(e,s)}let o=JSON.parse(JSON.stringify(s.compiled).replaceAll(zd.SENTINEL_IRI,t));return await new eD.ExoQLQueryExecutor(this.tripleStore).executeAsk(o)}catch{return!1}}substituteVariables(e,t){let r=this.clock.now(),i=r.toISOString(),s=r.getFullYear(),o=r.getMonth(),l=r.getDate(),c=r.getDay(),u=Hd.DateFormatter.toDateString(r),f=Hd.DateFormatter.toDateString(new Date(s,o,l-1)),d=(c+6)%7,p=Hd.DateFormatter.toDateString(new Date(s,o,l-d)),h=Hd.DateFormatter.toDateString(new Date(s,o,l-d-7)),_=`${s}-${String(o+1).padStart(2,"0")}-01`,y=o===0?11:o-1,S=`${o===0?s-1:s}-${String(y+1).padStart(2,"0")}-01`,I=`${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,`"${_}"^^xsd:date`).replace(/\$lastMonthStart\b/g,`"${S}"^^xsd:date`).replace(/\$thisYearStart\b/g,`"${I}"^^xsd:date`).replace(/\$today\b/g,`"${u}"^^xsd:date`)}};Oo.PreconditionEvaluator=Kd;Kd.SENTINEL_IRI="urn:exocortex:cache-sentinel:target";Kd.TEMPORAL_TOKEN=/\$(?:now|today|yesterday|thisWeekStart|lastWeekStart|thisMonthStart|lastMonthStart|thisYearStart)\b/;Oo.PreconditionEvaluator=Kd=zd=YW([(0,XW.injectable)(),QW("design:paramtypes",[Object,Object,Object])],Kd)});var rD=v(Po=>{"use strict";Object.defineProperty(Po,"__esModule",{value:!0});Po.hasUidFilename=Po.hasNonUidFilename=void 0;Po.registerDefaultHostFunctions=iH;var rH=a(n=>{let e=n.assetUid;if(typeof e!="string"||e.trim()==="")return!1;let t=n.fileBasename;return typeof t!="string"?!1:t!==e},"hasNonUidFilename");Po.hasNonUidFilename=rH;var nH=a(n=>{let e=n.assetUid;if(typeof e!="string"||e.trim()==="")return!1;let t=n.fileBasename;return typeof t!="string"?!1:t===e},"hasUidFilename");Po.hasUidFilename=nH;function iH(n){n.registerHostFunction("hasNonUidFilename",Po.hasNonUidFilename),n.registerHostFunction("hasUidFilename",Po.hasUidFilename)}a(iH,"registerDefaultHostFunctions")});var Sy=v(by=>{"use strict";Object.defineProperty(by,"__esModule",{value:!0});by.liveUidGenerator=sH;by.seededUidGenerator=aH;var ZE=Ol();function sH(){return{next:a(()=>(0,ZE.v4)(),"next")}}a(sH,"liveUidGenerator");var oH="6ba7b810-9dad-11d1-80b4-00c04fd430c8";function aH(n){let e=0,t=(0,ZE.v5)(n,oH);return{next:a(()=>{let r=`${n}#${e}`;return e+=1,(0,ZE.v5)(r,t)},"next")}}a(aH,"seededUidGenerator")});var vy=v(Da=>{"use strict";Object.defineProperty(Da,"__esModule",{value:!0});Da.registerResolver=lr;Da.getResolver=cH;Da.isResolverModifierAware=uH;Da.getRegisteredResolverIds=fH;Da.clearResolvers=dH;Da.installDefaultResolvers=EH;var lH=zi(),Ey=new Map,ev=new Set;function lr(n,e,t=!1){Ey.set(n,e),t&&ev.add(n)}a(lr,"registerResolver");function cH(n){return Ey.get(n)}a(cH,"getResolver");function uH(n){return ev.has(n)}a(uH,"isResolverModifierAware");function fH(){return Array.from(Ey.keys())}a(fH,"getRegisteredResolverIds");function dH(){Ey.clear(),ev.clear()}a(dH,"clearResolvers");function cn(n){return n<10?`0${n}`:String(n)}a(cn,"pad2");var pH=["January","February","March","April","May","June","July","August","September","October","November","December"],hH=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],mH=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],gH=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];function yH(n){let e=["th","st","nd","rd"],t=n%100;return`${n}${e[(t-20)%10]||e[t]||e[0]}`}a(yH,"ordinalDay");var _H=/YYYY|YY|MMMM|MMM|MM|M|Do|DD|D|dddd|ddd|HH|H|hh|h|mm|m|ss|s|A|a/g;function bH(n,e){let t=(n.getHours()+11)%12+1;return e.replace(_H,r=>{switch(r){case"YYYY":return String(n.getFullYear());case"YY":return cn(n.getFullYear()%100);case"MMMM":return pH[n.getMonth()];case"MMM":return hH[n.getMonth()];case"MM":return cn(n.getMonth()+1);case"M":return String(n.getMonth()+1);case"Do":return yH(n.getDate());case"DD":return cn(n.getDate());case"D":return String(n.getDate());case"dddd":return mH[n.getDay()];case"ddd":return gH[n.getDay()];case"HH":return cn(n.getHours());case"H":return String(n.getHours());case"hh":return cn(t);case"h":return String(t);case"mm":return cn(n.getMinutes());case"m":return String(n.getMinutes());case"ss":return cn(n.getSeconds());case"s":return String(n.getSeconds());case"A":return n.getHours()<12?"AM":"PM";case"a":return n.getHours()<12?"am":"pm";default:return r}})}a(bH,"formatDate");function nD(n,e,t){let r=n.getDate(),i=new Date(n.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(r,s)),i}a(nD,"addMonthsClamped");function SH(n,e){if(!e)return n;let t=e.match(/^([+-])(\d+)([dwMy])?$/);if(!t)return n;let r=(t[1]==="-"?-1:1)*parseInt(t[2],10),i=t[3]??"d",s=new Date(n.getTime());switch(i){case"d":s.setDate(s.getDate()+r);break;case"w":s.setDate(s.getDate()+r*7);break;case"M":s=nD(s,r,"M");break;case"y":s=nD(s,r,"y");break}return isNaN(s.getTime())?n:s}a(SH,"applyDateOffset");function wH(n){if(!n)return{offset:null,format:null};let e=n.indexOf(":");if(e<0)return{offset:n,format:null};let t=n.slice(0,e),r=n.slice(e+1);return{offset:t||null,format:r||null}}a(wH,"parseDateModifier");function wy(n,e){return(t,r)=>{let{offset:i,format:s}=wH(r),o=new Date;return n!==0&&o.setDate(o.getDate()+n),o=SH(o,i),bH(o,s??e)}}a(wy,"makeDateResolver");function EH(){lr("today",()=>{let n=new Date;return`${n.getFullYear()}-${cn(n.getMonth()+1)}-${cn(n.getDate())}`}),lr("todayStart",()=>lH.DateFormatter.getTodayStartTimestamp()),lr("date",wy(0,"YYYY-MM-DD"),!0),lr("now",wy(0,"YYYY-MM-DDTHH:mm:ss"),!0),lr("tomorrow",wy(1,"YYYY-MM-DD"),!0),lr("yesterday",wy(-1,"YYYY-MM-DD"),!0),lr("target",n=>n.targetIRI?`"[[${n.targetIRI}]]"`:""),lr("targetFolder",n=>{if(!n.targetFilePath)return"";let e=n.targetFilePath.replace(/^\/+/,""),t=e.lastIndexOf("/");return t>=0?e.slice(0,t):""}),lr("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.")}),lr("nowTimestamp",()=>{let n=new Date;return`${n.getFullYear()}-${cn(n.getMonth()+1)}-${cn(n.getDate())}T${cn(n.getHours())}:${cn(n.getMinutes())}:${cn(n.getSeconds())}`}),lr("nowDate",()=>{let n=new Date;return`${n.getFullYear()}-${cn(n.getMonth()+1)}-${cn(n.getDate())}`}),lr("nowYear",()=>String(new Date().getFullYear())),lr("nowMonth",()=>cn(new Date().getMonth()+1)),lr("userInputLabel",n=>{let e=n.userInput?.label;return typeof e=="string"?e:""}),lr("userInput",(n,e)=>{if(!e)return null;let t=n.userInput?.[e];return typeof t=="string"?t:t==null?null:String(t)}),lr("targetProperty",(n,e)=>{if(!e||!n.targetFm)return null;let t=n.targetFm[e];return t==null?null:Array.isArray(t)?t.map(String):String(t)}),lr("targetRefProperty",(n,e)=>{if(!e)return null;let t=e.indexOf("|");if(t<0)return null;let r=e.slice(0,t),i=e.slice(t+1);if(!r||!i)return null;let s=n.targetRefFm?.[r];if(!s)return null;let o=s[i];return o==null?null:Array.isArray(o)?o.length>0?String(o[0]):null:String(o)}),lr("labelAsArray",n=>{let e=n.userInput?.label;return typeof e=="string"&&e.length>0?[e]:[]}),lr("groundingTargetClass",n=>n.groundingTargetClassUid?`"[[${n.groundingTargetClassUid}]]"`:null),lr("targetClassSelf",n=>{if(!n.targetFilePath)return null;let e=n.targetFilePath.replace(/^\/+/,""),r=e.slice(e.lastIndexOf("/")+1).replace(/\.md$/i,"");return r.length>0?`"[[${r}]]"`:null})}a(EH,"installDefaultResolvers")});var rv=v(Ty=>{"use strict";Object.defineProperty(Ty,"__esModule",{value:!0});Ty.resolveTemplateBody=TH;Ty.stripTemplateFrontmatter=AH;var tv=vy();(0,tv.installDefaultResolvers)();var vH=/\$([A-Za-z][A-Za-z0-9_]*)((?:[+-]\d+[dwMy])?(?::[A-Za-z0-9:./-]+)?)/g;function TH(n,e={}){return n.replace(vH,(t,r,i)=>{let s=(0,tv.getResolver)(r);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,tv.isResolverModifierAware)(r)?o:o+i})}a(TH,"resolveTemplateBody");function AH(n){let e=n.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);return e?n.slice(e[0].length):n}a(AH,"stripTemplateFrontmatter")});var xy=v(Tu=>{"use strict";Object.defineProperty(Tu,"__esModule",{value:!0});Tu.registerOrderSpecLoader=IH;Tu.clearOrderSpecLoader=xH;Tu.loadDefaultSpec=RH;Tu.orderProperties=CH;var Ay=null,Fa,Iy=!1;function IH(n){Ay=n,Fa=void 0,Iy=!1}a(IH,"registerOrderSpecLoader");function xH(){Ay=null,Fa=void 0,Iy=!1}a(xH,"clearOrderSpecLoader");function RH(){if(Fa!==void 0)return Fa;if(!Ay)return Fa=null,null;try{Fa=Ay()}catch(n){Iy||(console.warn("[OrderSpecResolver] loader threw, falling back to insertion order:",n),Iy=!0),Fa=null}return Fa}a(RH,"loadDefaultSpec");function CH(n,e){if(!e||e.head.length===0&&e.tail.length===0)return n;let t=Object.keys(n),r=new Set(e.head),i=new Set(e.tail),s=e.head.filter(u=>Object.prototype.hasOwnProperty.call(n,u)),o=e.tail.filter(u=>Object.prototype.hasOwnProperty.call(n,u)),l=t.filter(u=>!r.has(u)&&!i.has(u));e.middleStrategy==="alphabetical"&&l.sort((u,f)=>u.localeCompare(f));let c={};for(let u of s)c[u]=n[u];for(let u of l)c[u]=n[u];for(let u of o)c[u]=n[u];return c}a(CH,"orderProperties")});var Yd=v(zl=>{"use strict";Object.defineProperty(zl,"__esModule",{value:!0});zl.STRING_SCALAR_PROPERTIES=void 0;zl.needsYamlQuoting=iD;zl.quoteYamlString=sD;zl.serializeYamlScalar=$H;var OH=/^[-!&*?|>%@`"'#,[\]{}]/,PH=/[\u0000-\u001f\u007f]/,DH=/^(?:true|True|TRUE|false|False|FALSE)$/,FH=/^(?:null|Null|NULL|~)$/,LH=/^[-+]?(?:0b[01_]+|0o[0-7_]+|0x[0-9a-fA-F_]+|[0-9][0-9_]*)$/,NH=/^(?:[-+]?[0-9][0-9_]*(?:\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\.(?:inf|Inf|INF)|\.(?:nan|NaN|NAN))$/,kH=/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;zl.STRING_SCALAR_PROPERTIES=new Set(["exo__Asset_label","aliases"]);function MH(n){if(n.length<2||!n.startsWith('"')||!n.endsWith('"'))return!1;let e=n.slice(1,-1);for(let t=0;t<e.length;t++){if(e[t]==="\\"){if(t+1>=e.length)return!1;t++;continue}if(e[t]==='"')return!1}return!0}a(MH,"isCompleteDoubleQuotedScalar");function jH(n){return DH.test(n)||FH.test(n)||LH.test(n)||NH.test(n)||kH.test(n)}a(jH,"looksLikeNonStringScalar");function iD(n,e=!1){return n===""?!0:MH(n)?!1:!!(n!==n.trim()||/:(\s|$)/.test(n)||/\s#/.test(n)||OH.test(n)||PH.test(n)||e&&jH(n))}a(iD,"needsYamlQuoting");function sD(n){let e="";for(let t=0;t<n.length;t++){let r=n[t],i=n.charCodeAt(t);r==="\\"?e+="\\\\":r==='"'?e+='\\"':r===`
|
|
72
72
|
`?e+="\\n":r==="\r"?e+="\\r":r===" "?e+="\\t":i<32||i===127?e+="\\x"+i.toString(16).toUpperCase().padStart(2,"0"):e+=r}return`"${e}"`}a(sD,"quoteYamlString");function $H(n,e=!1){return typeof n!="string"?String(n):iD(n,e)?sD(n):n}a($H,"serializeYamlScalar")});var Nn=v(Ry=>{"use strict";Object.defineProperty(Ry,"__esModule",{value:!0});Ry.DI_TOKENS=void 0;Ry.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"),ConceptCreationService:Symbol.for("ConceptCreationService"),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 iv=v(Cy=>{"use strict";Object.defineProperty(Cy,"__esModule",{value:!0});Cy.RDFVocabularyMapper=void 0;var yr=Qn(),oD=ze(),Fe=Vt(),nv=class{static{a(this,"RDFVocabularyMapper")}constructor(){this.propertyMappings=new Map([["exo__Instance_class",Fe.Namespace.RDF.term("type")],["exo__Asset_isDefinedBy",Fe.Namespace.RDFS.term("isDefinedBy")],["exo__Class_superClass",Fe.Namespace.RDFS.term("subClassOf")],["exo__Property_range",Fe.Namespace.RDFS.term("range")],["exo__Property_domain",Fe.Namespace.RDFS.term("domain")],["exo__Property_superProperty",Fe.Namespace.RDFS.term("subPropertyOf")]])}generateClassHierarchyTriples(){let e=[];return e.push(new yr.Triple(Fe.Namespace.EXO.term("Asset"),Fe.Namespace.RDFS.term("subClassOf"),Fe.Namespace.RDFS.term("Resource"))),e.push(new yr.Triple(Fe.Namespace.EXO.term("Class"),Fe.Namespace.RDFS.term("subClassOf"),Fe.Namespace.RDFS.term("Class"))),e.push(new yr.Triple(Fe.Namespace.EXO.term("Property"),Fe.Namespace.RDFS.term("subClassOf"),Fe.Namespace.RDF.term("Property"))),e.push(new yr.Triple(Fe.Namespace.EMS.term("Task"),Fe.Namespace.RDFS.term("subClassOf"),Fe.Namespace.EXO.term("Asset"))),e.push(new yr.Triple(Fe.Namespace.EMS.term("Project"),Fe.Namespace.RDFS.term("subClassOf"),Fe.Namespace.EXO.term("Asset"))),e.push(new yr.Triple(Fe.Namespace.EMS.term("Area"),Fe.Namespace.RDFS.term("subClassOf"),Fe.Namespace.EXO.term("Asset"))),e.push(new yr.Triple(Fe.Namespace.EMS.term("Workflow"),Fe.Namespace.RDFS.term("subClassOf"),Fe.Namespace.EXO.term("Asset"))),e.push(new yr.Triple(Fe.Namespace.EMS.term("WorkflowState"),Fe.Namespace.RDFS.term("subClassOf"),Fe.Namespace.EXO.term("Asset"))),e.push(new yr.Triple(Fe.Namespace.EMS.term("WorkflowTransition"),Fe.Namespace.RDFS.term("subClassOf"),Fe.Namespace.EXO.term("Asset"))),e.push(new yr.Triple(Fe.Namespace.EXOCMD.term("Command"),Fe.Namespace.RDFS.term("subClassOf"),Fe.Namespace.EXO.term("Asset"))),e.push(new yr.Triple(Fe.Namespace.EXOCMD.term("Precondition"),Fe.Namespace.RDFS.term("subClassOf"),Fe.Namespace.EXO.term("Asset"))),e.push(new yr.Triple(Fe.Namespace.EXOCMD.term("Grounding"),Fe.Namespace.RDFS.term("subClassOf"),Fe.Namespace.EXO.term("Asset"))),e.push(new yr.Triple(Fe.Namespace.EXOCMD.term("CommandBinding"),Fe.Namespace.RDFS.term("subClassOf"),Fe.Namespace.EXO.term("Asset"))),e}generatePropertyHierarchyTriples(){let e=[];return e.push(new yr.Triple(Fe.Namespace.EXO.term("Instance_class"),Fe.Namespace.RDFS.term("subPropertyOf"),Fe.Namespace.RDF.term("type"))),e.push(new yr.Triple(Fe.Namespace.EXO.term("Asset_isDefinedBy"),Fe.Namespace.RDFS.term("subPropertyOf"),Fe.Namespace.RDFS.term("isDefinedBy"))),e.push(new yr.Triple(Fe.Namespace.EXO.term("Class_superClass"),Fe.Namespace.RDFS.term("subPropertyOf"),Fe.Namespace.RDFS.term("subClassOf"))),e.push(new yr.Triple(Fe.Namespace.EXO.term("Property_range"),Fe.Namespace.RDFS.term("subPropertyOf"),Fe.Namespace.RDFS.term("range"))),e.push(new yr.Triple(Fe.Namespace.EXO.term("Property_domain"),Fe.Namespace.RDFS.term("subPropertyOf"),Fe.Namespace.RDFS.term("domain"))),e.push(new yr.Triple(Fe.Namespace.EXO.term("Property_superProperty"),Fe.Namespace.RDFS.term("subPropertyOf"),Fe.Namespace.RDFS.term("subPropertyOf"))),e}generateMappedTriple(e,t,r){let i=this.propertyMappings.get(t);if(!i)return null;let s;if(r instanceof oD.IRI)s=r;else{let o=r.match(/^(ems|exo|exocmd)__(.+)$/);if(o){let[,l,c]=o;s=(l==="ems"?Fe.Namespace.EMS:l==="exocmd"?Fe.Namespace.EXOCMD:Fe.Namespace.EXO).term(c)}else s=new oD.IRI(r)}return new yr.Triple(e,i,s)}hasMappingFor(e){return this.propertyMappings.has(e)}};Cy.RDFVocabularyMapper=nv});var Oy=v(Do=>{"use strict";Object.defineProperty(Do,"__esModule",{value:!0});Do.OBSIDIAN_VAULT_SCHEME=void 0;Do.vaultPathToIRI=UH;Do.iriToVaultPath=BH;Do.OBSIDIAN_VAULT_SCHEME="obsidian://vault/";function UH(n){let e=n.startsWith("./")?n.slice(2):n;return`${Do.OBSIDIAN_VAULT_SCHEME}${encodeURI(e)}`}a(UH,"vaultPathToIRI");function BH(n){if(!n.startsWith(Do.OBSIDIAN_VAULT_SCHEME))return null;let e=n.slice(Do.OBSIDIAN_VAULT_SCHEME.length);try{return decodeURI(e)}catch{return null}}a(BH,"iriToVaultPath")});var Dy=v(Qd=>{"use strict";Object.defineProperty(Qd,"__esModule",{value:!0});Qd.derivePath=aD;Qd.deriveUrl=VH;Qd.deriveLegacyFlatPath=qH;var sv="assetspaces",Py=/^[A-Za-z0-9._-]+$/;function aD(n){if(typeof n!="string")return null;let e=n.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 l=o.indexOf("/");if(l<0)return null;t=o.slice(l+1)}let r=t.split("/").filter(o=>o.length>0);if(r.length<2)return null;let i=r[0],s=r[1];return i==="."||i===".."||s==="."||s===".."||!Py.test(i)||!Py.test(s)?null:`${sv}/${i}/${s}`}a(aD,"derivePath");function VH(n){if(typeof n!="string")return null;let e=n.trim();if(e.length===0)return null;e=e.replace(/^\/+/,"").replace(/\/+$/,"");let t=`${sv}/`;if(!e.startsWith(t))return null;let r=e.slice(t.length).split("/").filter(o=>o.length>0);if(r.length<2)return null;let i=r[0],s=r[1];return i==="."||i===".."||s==="."||s===".."||!Py.test(i)||!Py.test(s)?null:`https://github.com/${i}/${s}`}a(VH,"deriveUrl");function qH(n){let e=aD(n);if(e===null)return null;let t=e.split("/")[2];if(t===void 0||t.length===0)return null;let r=t.startsWith("exoas-")?t.slice(6):t;return r.length===0?null:`${sv}/${r}`}a(qH,"deriveLegacyFlatPath")});var Fy=v(Ki=>{"use strict";Object.defineProperty(Ki,"__esModule",{value:!0});Ki.FILE_SPACE_CLASS_UID=void 0;Ki.frontmatterDeclaresFileSpace=WH;Ki.discoverFileSpaceExclusions=zH;var GH=Dy();Ki.FILE_SPACE_CLASS_UID="aad8913e-5e9f-4047-879d-93cc46befd52";var lD=/\[\[([^\]|]+)(?:\|[^\]]*)?\]\]/g,ov=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function uD(n){let e=Array.isArray(n)?n:[n],t=[];for(let r of e){if(typeof r!="string")continue;lD.lastIndex=0;let i;for(;(i=lD.exec(r))!==null;)t.push(i[1].trim())}return t}a(uD,"wikilinkTargets");function WH(n){return n?uD(n.exo__Instance_class).some(e=>ov.test(e)&&e.toLowerCase()===Ki.FILE_SPACE_CLASS_UID):!1}a(WH,"frontmatterDeclaresFileSpace");function cD(n,e){try{return n.getFrontmatter(e)}catch{return null}}a(cD,"readFrontmatterSafe");function HH(n){let e=n.exo__AssetSpace_source;if(typeof e=="string"&&e.length>0)return e;let t=n.exo__AssetSpace_git;return typeof t=="string"&&t.length>0?t:null}a(HH,"readSource");function zH(n){let e=[],t=[],r=[],i=new Map,s=a((l,c)=>{if(ov.test(l))return l.toLowerCase()===Ki.FILE_SPACE_CLASS_UID;let u=n.getFirstLinkpathDest(l,c);if(u==null)return!1;let f=i.get(u.path);if(f!==void 0)return f;let p=cD(n,u)?.exo__Asset_uid,h=typeof p=="string"&&p.toLowerCase()===Ki.FILE_SPACE_CLASS_UID;return i.set(u.path,h),h},"isFileSpaceClassRef"),o=a(l=>l.some(c=>ov.test(c)&&c.toLowerCase()===Ki.FILE_SPACE_CLASS_UID),"hasUuidFormRef");for(let l of n.getAllFiles()){let c=cD(n,l);if(!c)continue;let u=uD(c.exo__Instance_class);if(!u.some(h=>s(h,l.path)))continue;t.push(l.path),o(u)||r.push(`FileSpace declaration ${l.path} references the class via a label-form link only \u2014 the sync layer will not pick it up; use the UUID-form wikilink [[${Ki.FILE_SPACE_CLASS_UID}]] (UID-canon)`);let f=HH(c);if(f===null){r.push(`FileSpace declaration ${l.path} has no exo__AssetSpace_source/_git \u2014 mount path underivable, content NOT excluded from the index`);continue}let d=(0,GH.derivePath)(f);if(d===null){r.push(`FileSpace declaration ${l.path}: cannot derive mount path from source "${f}" \u2014 content NOT excluded from the index`);continue}let p=`${d}/`;l.path.startsWith(p)&&r.push(`FileSpace declaration ${l.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:r}}a(zH,"discoverFileSpaceExclusions")});var Yl=v(Lr=>{"use strict";var KH=Lr&&Lr.__decorate||function(n,e,t,r){var i=arguments.length,s=i<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(n,e,t,r);else for(var l=n.length-1;l>=0;l--)(o=n[l])&&(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},YH=Lr&&Lr.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},fD=Lr&&Lr.__param||function(n,e){return function(t,r){e(t,r,n)}},cv;Object.defineProperty(Lr,"__esModule",{value:!0});Lr.NoteToRDFConverter=Lr.UNPREFIXED_ASSET_FIELDS=void 0;Lr.canonicalYamlKey=ez;Lr.normaliseExcludedFolders=hD;Lr.isPathExcluded=mD;var av=ut(),_r=Qn(),Yi=ze(),yn=tt(),dD=Yt(),rr=Vt(),pD=Nn(),QH=iv(),XH=Fd(),lv=Oy(),ri=Gw(),JH=Fy();Lr.UNPREFIXED_ASSET_FIELDS=new Set(["archived","draft","pinned","aliases"]);var ZH=/^exo__Asset_(.+)$/;function ez(n){let e=ZH.exec(n);return e&&Lr.UNPREFIXED_ASSET_FIELDS.has(e[1])?e[1]:n}a(ez,"canonicalYamlKey");function hD(n){return Array.isArray(n)?n.map(e=>String(e).replace(/\\/g,"/").trim()).filter(e=>e.length>0).map(e=>e.endsWith("/")?e:`${e}/`):[]}a(hD,"normaliseExcludedFolders");function mD(n,e){if(e.length===0)return!1;let t=n.replace(/\\/g,"/");for(let r of e)if(t.startsWith(r))return!0;return!1}a(mD,"isPathExcluded");function tz(n){if(!n)return"";let e=n.replace(/\\/g,"/");for(;e.startsWith("/");)e=e.slice(1);for(;e.endsWith("/");)e=e.slice(0,-1);return e.length>0?`${e}/`:""}a(tz,"normaliseSubjectIriPrefix");var Kl=cv=class{static{a(this,"NoteToRDFConverter")}constructor(e,t=XH.NullLogger,r={}){this.vault=e,this.logger=t,this.BODY_WIKILINK_PATTERN=/(?<!!)\[\[([^\]|]+)(?:\|[^\]]+)?\]\]/g,this.pendingExtraTriples=[],this.vocabularyMapper=new QH.RDFVocabularyMapper,this.subjectIriPrefix=tz(r.subjectIriPrefix),this.emitInstanceClassAsUid=r.emitInstanceClassAsUid??!1}async convertNote(e){return this.convertNoteFromFrontmatter(e,this.vault.getFrontmatter(e))}async convertNoteFromFrontmatter(e,t){if(!t)return[];let r=this.notePathToIRI(e.path),i=rr.Namespace.EXO.term("Asset_filename"),s=new _r.Triple(r,i,new yn.Literal(e.basename));if(ri.Exo003Parser.isExo003Format(t)){let o=await this.convertExo003Note(e,t);return[s,...o]}return this.convertLegacyNote(e,t,s)}async convertLegacyNote(e,t,r){this.pendingExtraTriples=[];let i=[r],s=this.notePathToIRI(e.path),o,l,c,u=!1,f=rr.Namespace.EXO.term("Statement").value;for(let[y,b]of Object.entries(t)){let S=Lr.UNPREFIXED_ASSET_FIELDS.has(y)?`exo__Asset_${y}`:y;if(!this.isExocortexProperty(S))continue;let I=this.propertyKeyToIRI(S),O=Array.isArray(b)?b:[b];for(let T of O)if(!((y==="exo__Asset_label"||Lr.UNPREFIXED_ASSET_FIELDS.has(y))&&(T==null||typeof T=="string"&&T.trim()==="")))if(y==="exo__Instance_class"){let E=this.valueToClassURI(T);i.push(new _r.Triple(s,I,E))}else{let E=await this.valueToRDFObject(T,e,I);if(S==="exo__Statement_subject"&&o===void 0){let P=E.find(V=>V instanceof Yi.IRI);P&&(o=P)}else if(S==="exo__Statement_predicate"&&l===void 0){let P=E.find(V=>V instanceof Yi.IRI);P&&(l=P)}else S==="exo__Statement_object"&&c===void 0&&(c=E[0]);for(let P of E)if(i.push(new _r.Triple(s,I,P)),this.vocabularyMapper.hasMappingFor(y)&&P instanceof Yi.IRI){let V=this.vocabularyMapper.generateMappedTriple(s,y,P);V&&i.push(V)}}if(y==="exo__Instance_class")for(let T of O){let E=this.valueToClassURI(T);if(E instanceof Yi.IRI){let P=rr.Namespace.RDF.term("type");i.push(new _r.Triple(s,P,E)),E.value===f&&(u=!0)}}if(y==="exo__Asset_label"){let T=rr.Namespace.RDFS.term("label");for(let E of O)typeof E=="string"&&E.length>0&&i.push(new _r.Triple(s,T,new yn.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 y=rr.Namespace.RDFS.term("label"),b=rr.Namespace.EXO.term("Asset_label"),S=new yn.Literal(e.basename);i.push(new _r.Triple(s,y,S)),i.push(new _r.Triple(s,b,S))}i.push(...this.pendingExtraTriples),this.pendingExtraTriples=[],u&&o&&l&&c&&i.push(new _r.Triple(o,l,c));let _=await this.convertBodyWikilinks(e,s);return i.push(..._),i}async convertExo003Note(e,t){let r=ri.Exo003Parser.parse(t);if(!r.success||!r.metadata)return[];let i=r.metadata,s=[];switch(i.metadata){case ri.Exo003MetadataType.Namespace:break;case ri.Exo003MetadataType.Anchor:s.push(...this.convertExo003Anchor(e,i));break;case ri.Exo003MetadataType.BlankNode:s.push(...this.convertExo003BlankNode(e,i));break;case ri.Exo003MetadataType.Statement:s.push(...this.convertExo003Statement(e,i));break;case ri.Exo003MetadataType.Body:s.push(...await this.convertExo003Body(e,i));break}return s}convertExo003Anchor(e,t){let r=this.notePathToIRI(e.path),i=new Yi.IRI(t.uri);return[new _r.Triple(r,rr.Namespace.OWL.term("sameAs"),i),new _r.Triple(i,rr.Namespace.OWL.term("sameAs"),r)]}convertExo003BlankNode(e,t){let r=this.notePathToIRI(e.path),i=t.uri.replace(/[^a-zA-Z0-9_-]/g,"_");return[new _r.Triple(r,rr.Namespace.OWL.term("sameAs"),new dD.BlankNode(i))]}convertExo003Statement(e,t){let r=[];try{let i=this.createExo003ReferenceResolver(e),s=ri.Exo003Parser.toTriple(t,i);r.push(s);let o=this.notePathToIRI(e.path);r.push(new _r.Triple(o,rr.Namespace.RDF.term("value"),s.subject))}catch{}return r}async convertExo003Body(e,t){let r=[];try{let i=await this.vault.read(e),s=this.extractBodyContent(i),o=this.createExo003ReferenceResolver(e),l=o(t.subject),c=o(t.predicate);if(l.type==="literal")throw new Error("Body subject cannot be a literal");if(c.type!=="iri")throw new Error("Body predicate must be an IRI");let u=l.type==="iri"?new Yi.IRI(l.value):new dD.BlankNode(l.value),f=new Yi.IRI(c.value),d=ri.Exo003Parser.toLiteral(t,s.trim());r.push(new _r.Triple(u,f,d));let p=this.notePathToIRI(e.path);r.push(new _r.Triple(p,rr.Namespace.RDF.term("value"),u))}catch{}return r}createExo003ReferenceResolver(e){return t=>{let r=this.extractWikilink(t),i=r||t,s=this.vault.getFirstLinkpathDest(i,e.path);if(s){let o=this.vault.getFrontmatter(s);if(o&&ri.Exo003Parser.isExo003Format(o)){let l=ri.Exo003Parser.parse(o);if(l.success&&l.metadata){let c=l.metadata;if(c.metadata===ri.Exo003MetadataType.Anchor||c.metadata===ri.Exo003MetadataType.Namespace)return{type:"iri",value:c.uri};if(c.metadata===ri.Exo003MetadataType.BlankNode)return{type:"blank",value:c.uri.replace(/[^a-zA-Z0-9_-]/g,"_")}}}return{type:"iri",value:this.notePathToIRI(s.path).value}}return!r&&t.includes("://")?{type:"iri",value:t}:{type:"literal",value:t}}}async convertVault(e={}){return(await this.convertVaultWithValidation({strict:!1,excludedFolders:e.excludedFolders})).triples}async convertVaultWithValidation(e={}){let t=this.vault.getAllFiles(),r=[],i=[],s=e.strict??!1,o=0,l=0,c=(0,JH.discoverFileSpaceExclusions)(this.vault);for(let y of c.warnings)this.logger.warn(`FileSpace discovery: ${y}`);let u=[...hD(e.excludedFolders),...c.prefixes],f=u.length===0?t:t.filter(y=>!mD(y.path,u)),d=e.onProgress,p=e.progressIntervalFiles&&e.progressIntervalFiles>0?e.progressIntervalFiles:cv.INDEX_PROGRESS_INTERVAL,h=f.length,_=0;for(let y of f){if(_++,d&&_%p===0&&_<h)try{d(_,h)}catch{}try{let b=this.vault.getFrontmatter(y),S=b?this.validateExocortexAsset(b,y.basename):null;if(S){if(s)throw new Error(`Invariant violation in "${y.path}": ${S.message}`);i.push({path:y.path,reason:`Invariant violation: ${S.message}`}),o++,this.logger.info(`Skipping file with invariant violation: ${y.path}`,{code:S.code,property:S.property,reason:S.message});continue}let I=await this.convertNote(y);r.push(...I)}catch(b){let S=b instanceof Error?b.message:String(b);if(s)throw new Error(`Invalid IRI for file "${y.path}": ${S}`);i.push({path:y.path,reason:`Invalid IRI: ${S}`}),l++,this.logger.info(`Skipping file with invalid IRI: ${y.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 invalid IRI during indexing (paths in developer console)`,{count:l}),{triples:r,skippedFiles:i,summary:{total:f.length,indexed:f.length-i.length,skipped:i.length},fileSpaces:c}}static inferLabelFromBasename(e){return rr.Namespace.fromPropertyKey(e)!==null?e:null}validateExocortexAsset(e,t){let r=a(d=>d==null?!0:typeof d=="string"?d.trim()==="":Array.isArray(d)?d.length===0||d.every(r):!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(r(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&&r(e[d]))return{code:"EMPTY_OPTIONAL_PROPERTY",property:d,message:`Optional property "${d}" is present but empty`};let l=e.exo__Instance_class,c=Array.isArray(l)?l:[l],u=null,f=!1;for(let d of c){if(typeof d!="string")continue;let p=this.removeQuotes(d),_=(this.extractWikilink(p)??p).trim();/^[a-z][a-zA-Z0-9]*__/.test(_)&&/[\s()]/.test(_)?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 r of e){let i=(0,lv.vaultPathToIRI)(r.path);Yi.IRI.isValidIRI(i)||t.push({path:r.path,reason:`Path "${r.path}" cannot be converted to a valid IRI`})}return t}notePathToIRI(e){return new Yi.IRI((0,lv.vaultPathToIRI)(`${this.subjectIriPrefix}${e}`))}synthesizeWikilinkTargetIRI(e){return new Yi.IRI((0,lv.vaultPathToIRI)(e))}isExocortexProperty(e){return rr.Namespace.fromPropertyKey(e)!==null}propertyKeyToIRI(e){let t=rr.Namespace.fromPropertyKey(e);if(!t)throw new Error(`Invalid property key: ${e}`);return t.namespace.term(t.localName)}emitTypeTripleForEnumInstance(e,t){let r=this.vault.getFrontmatter(t);if(!r)return;let i=r.exo__Instance_class,s=Array.isArray(i)?i[0]:i;if(typeof s!="string")return;let o=this.valueToClassURI(s);o instanceof Yi.IRI&&(this.pendingExtraTriples.push(new _r.Triple(e,rr.Namespace.RDF.term("type"),o)),this.pendingExtraTriples.push(new _r.Triple(e,rr.Namespace.EXO.term("Instance_class"),o)))}async valueToRDFObject(e,t,r){if(typeof e=="string"){let i=this.removeQuotes(e);if(r?.value.endsWith("#TokenInvocation_parameter"))return[new yn.Literal(i)];let s=this.extractWikilink(i);if(s){let o=this.vault.getFirstLinkpathDest(s,t.path);if(o){let c=this.notePathToIRI(o.path),u=s.includes("|")?s.split("|")[0]:s;if(this.isUUID(u)){let d=new yn.Literal(u);if(r?.value.endsWith("#Grounding_targetValueRef")||r?.value.endsWith("#Grounding_targetValueSubstitution")||r?.value.endsWith("#Grounding_targetClass")||r?.value.endsWith("#Grounding_type")||r?.value.endsWith("#PropertyDefault_value"))return[c];let h=this.expandClassValue(o.basename);if(h)return this.emitTypeTripleForEnumInstance(h,o),[h];let _=this.vault.getFrontmatter(o);if(_){let O=_.exo__Asset_label;if(typeof O=="string"){let T=this.expandClassValue(O);if(T)return this.emitTypeTripleForEnumInstance(T,o),[T]}}let y=r?.value.endsWith("#Asset_prototype")||r?.value.endsWith("/Asset_prototype"),S=((typeof process<"u"?process.env:void 0)?.EXOCORTEX_DUAL_STORAGE_PREDICATES??"").split(",").map(O=>O.trim()).filter(Boolean),I=S.length>0&&S.some(O=>r?.value.endsWith(`#${O}`));return y||I?[c,d]:[c]}let f=this.expandClassValue(o.basename);return f?(this.emitTypeTripleForEnumInstance(f,o),[f]):[c]}if(this.isClassReference(s)){let c=this.expandClassValue(s);if(c)return[c]}let l=s.includes("|")?s.split("|")[0]:s;return this.isUUID(l)?[this.synthesizeWikilinkTargetIRI(`${l}.md`)]:[new yn.Literal(i)]}if(this.isClassReference(i)){let o=this.expandClassValue(i);if(o)return[o]}return this.isISO8601DateTime(i)?[new yn.Literal(i,rr.Namespace.XSD.term("dateTime"))]:[new yn.Literal(i)]}return typeof e=="boolean"?[new yn.Literal(e.toString())]:typeof e=="number"?[new yn.Literal(e.toString(),rr.Namespace.XSD.term("decimal"))]:e instanceof Date?[new yn.Literal(e.toISOString(),rr.Namespace.XSD.term("dateTime"))]:[new yn.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 r=t[1];return r.includes("|")?r.split("|")[0]:r}extractWikilinkAlias(e){let t=e.match(/^\[\[([^\]]+)\]\]$/);if(!t)return null;let r=t[1],i=r.indexOf("|");return i>=0?r.substring(i+1).trim():null}valueToClassURI(e){if(typeof e!="string")return new yn.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 l=this.expandClassValue(o);if(l)return l}if(this.isUUID(i)){let l=this.vault.getFirstLinkpathDest(i,"");if(l){let c=this.expandClassValue(l.basename);if(c)return this.emitInstanceClassAsUid?this.notePathToIRI(l.path):c;let u=this.vault.getFrontmatter(l);if(u){let f=u.exo__Asset_label;if(typeof f=="string"){let d=this.expandClassValue(f);if(d)return this.emitInstanceClassAsUid?this.notePathToIRI(l.path):d}}return this.notePathToIRI(l.path)}}return new yn.Literal(t)}isClassReference(e){return/\s/.test(e)?!1:rr.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),r=rr.Namespace.fromPropertyKey(t);return!r||/[\s()]/.test(r.localName)?null:r.namespace.term(r.localName)}extractBodyContent(e){let t=/^---\r?\n[\s\S]*?\r?\n---\r?\n?/;return e.replace(t,"")}extractBodyWikilinks(e){let t=new Set,r,i=new RegExp(this.BODY_WIKILINK_PATTERN.source,"g");for(;(r=i.exec(e))!==null;)r[1]&&t.add(r[1]);return Array.from(t)}async convertBodyWikilinks(e,t){let r=[];try{let i=await this.vault.read(e),s=this.extractBodyContent(i),o=this.extractBodyWikilinks(s),l=rr.Namespace.EXO.term("Asset_bodyLink");for(let c of o){let u=this.vault.getFirstLinkpathDest(c,e.path);if(u){let f=this.notePathToIRI(u.path);r.push(new _r.Triple(t,l,f))}else if(this.isClassReference(c)){let f=this.expandClassValue(c);f?r.push(new _r.Triple(t,l,f)):r.push(new _r.Triple(t,l,new yn.Literal(c)))}else r.push(new _r.Triple(t,l,new yn.Literal(c)))}}catch{}return r}};Lr.NoteToRDFConverter=Kl;Kl.INDEX_PROGRESS_INTERVAL=200;Kl.SkippedFileInfo=class{constructor(n,e){this.path=n,this.reason=e}};Kl.VaultValidationResult=class{constructor(n,e,t){this.triples=n,this.skippedFiles=e,this.summary=t}};Kl.VaultValidationOptions=class{constructor(n=!1){this.strict=n}};Lr.NoteToRDFConverter=Kl=cv=KH([(0,av.injectable)(),fD(0,(0,av.inject)(pD.DI_TOKENS.IVaultAdapter)),fD(1,(0,av.inject)(pD.DI_TOKENS.ILogger)),YH("design:paramtypes",[Object,Object,Object])],Kl)});var Ql=v(Ly=>{"use strict";Object.defineProperty(Ly,"__esModule",{value:!0});Ly.FrontmatterService=void 0;var gD=xy(),uv=Yd(),fv=Yl(),Xd=class n{static{a(this,"FrontmatterService")}parse(e){let t=e.match(n.FRONTMATTER_REGEX);return t?{exists:!0,content:t[1],originalContent:e}:{exists:!1,content:"",originalContent:e}}parseObject(e){let t=this.parse(e);if(!t.exists)return null;let r={},i=t.content.split(/\r?\n/),s=null,o=null,l=a(()=>{s!==null&&o!==null&&(r[s]=o),s=null,o=null},"flushArray");for(let c of i){let u=/^ {2}- (.*)$/.exec(c);if(u){s!==null&&o!==null&&o.push(u[1].trim());continue}l();let f=/^([^:\s][^:]*):\s*(.*)$/.exec(c);if(!f)continue;let d=f[1].trim(),p=f[2].trim();p===""?(s=d,o=[]):r[d]=p}return l(),r}updateProperty(e,t,r){t=(0,fv.canonicalYamlKey)(n.normalizeIRI(t)),typeof r=="string"&&(r=n.normalizeIRIValue(r));let i=this.parse(e),s=this.serializeValue(t,r);if(!i.exists)return`---
|
|
73
73
|
${s}
|
|
74
74
|
---
|
|
@@ -636,7 +636,7 @@ Next steps:
|
|
|
636
636
|
`).map(r=>r.trim()).filter(r=>r.length>0),t=e[e.length-1];if(t!==void 0)try{return JSON.parse(t)}catch{return}}a(Gpe,"parseLastJsonLine");function sB(n,e){return e.filter(t=>{let r=n[t];return typeof r!="string"||r.trim().length===0})}a(sB,"missingStringFields");var yS=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:iB,message:"Invalid request: expected a JSON-RPC object"}};let t=e.id,r=t===void 0;if(typeof e.method!="string")return r?null:{jsonrpc:"2.0",id:t??null,error:{code:iB,message:"Invalid request: missing method"}};if(r)return null;let i=t??null;switch(e.method){case"initialize":return{jsonrpc:"2.0",id:i,result:{protocolVersion:Vpe,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:nB}};case"tools/call":return{jsonrpc:"2.0",id:i,result:await this.callTool(e.params??{})};default:return{jsonrpc:"2.0",id:i,error:{code:qpe,message:`Method not found: ${e.method}`}}}}async callTool(e){let t=e.name,r=e.arguments??{},i;if(t==="create_asset"){let l=sB(r,["vault","class","label"]);if(l.length>0)return ed(`create_asset: missing required argument(s): ${l.join(", ")}`,!0);let c=eB(r);if(c!==null)return ed(`create_asset: ${c}`,!0);i=tB(r)}else if(t==="create_effort"){let l=sB(r,["vault","command","target"]);if(l.length>0)return ed(`create_effort: missing required argument(s): ${l.join(", ")}`,!0);i=rB(r)}else return ed(`Unknown tool: ${String(t)}`,!0);let s=await this.deps.runCli(i);if(s.exitCode!==0){let l=s.stderr.trim()||s.stdout.trim()||"(no diagnostic output)";return ed(`exocortex-cli exited ${s.exitCode}
|
|
637
637
|
${l}`,!0)}let o=Gpe(s.stdout);return ed(o===void 0?s.stdout.trim():JSON.stringify(o))}};var lB=require("child_process");var Wpe=32*1024*1024;function cB(n){return e=>new Promise(t=>{(0,lB.execFile)(process.execPath,[n,...e],{maxBuffer:Wpe},(r,i,s)=>{let o=0;if(r){let l=r.code;o=typeof l=="number"?l:1}t({stdout:i,stderr:s,exitCode:o})})})}a(cB,"createSelfCliRunner");async function Hpe(n,e,t){let r=(0,uB.createInterface)({input:e,crlfDelay:1/0});for await(let i of r){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:oB,message:"Parse error: invalid JSON"}})+`
|
|
638
638
|
`);continue}let l;try{l=await n.handle(o)}catch(c){l={jsonrpc:"2.0",id:typeof o?.id=="string"||typeof o?.id=="number"?o.id:null,error:{code:aB,message:`Internal error: ${c instanceof Error?c.message:String(c)}`}}}l!==null&&t(JSON.stringify(l)+`
|
|
639
|
-
`)}}a(Hpe,"runStdioServer");function fB(n){return new Ie("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],r=new yS({runCli:cB(t),version:n??"unknown"});await Hpe(r,process.stdin,i=>process.stdout.write(i))})}a(fB,"mcpCommand");function _S(n){let e=new Ie;return e.name("exocortex").description("CLI tool for Exocortex knowledge management system - SPARQL queries, task management, and more").version(n??"16.224.
|
|
639
|
+
`)}}a(Hpe,"runStdioServer");function fB(n){return new Ie("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],r=new yS({runCli:cB(t),version:n??"unknown"});await Hpe(r,process.stdin,i=>process.stdout.write(i))})}a(fB,"mcpCommand");function _S(n){let e=new Ie;return e.name("exocortex").description("CLI tool for Exocortex knowledge management system - SPARQL queries, task management, and more").version(n??"16.224.3"),e.addCommand(K6()),e.addCommand(nU()),e.addCommand(G5()),e.addCommand(K5()),e.addCommand(g6()),e.addCommand(Y5()),e.addCommand(t6()),e.addCommand(r6()),e.addCommand(v6()),e.addCommand(R6()),e.addCommand(U6()),e.addCommand(B6()),e.addCommand(V6()),e.addCommand(G6()),e.addCommand(W6()),e.addCommand(vU()),e.addCommand(IU()),e.addCommand(BU()),e.addCommand(qU()),e.addCommand(HU()),e.addCommand(zU()),e.addCommand(XU()),e.addCommand(DU()),e.addCommand(jU()),e.addCommand(JU()),e.addCommand(fB(n??"16.224.3")),e}a(_S,"createProgram");_S().parse();0&&(module.exports={createProgram});
|
|
640
640
|
/*! Bundled license information:
|
|
641
641
|
|
|
642
642
|
reflect-metadata/Reflect.js:
|
package/package.json
CHANGED