@kitelev/exocortex-cli 16.183.1 → 16.184.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +3 -3
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- // @kitelev/exocortex-cli v16.183.1
2
+ // @kitelev/exocortex-cli v16.184.0
3
3
  // CLI tool for Exocortex knowledge management system - SPARQL queries, task management, and more
4
4
  // License: MIT
5
5
 
@@ -67,7 +67,7 @@ ${r}}`}default:throw new jl(`Unsupported operation type for SPARQL generation: $
67
67
  `)}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 jl(`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],c=e.bindings.map(l=>{let u=l[o];return u?this.generateValuesTerm(u):"UNDEF"}).join(" ");return`${r}VALUES ?${o} { ${c} }`}let i=e.variables.map(o=>`?${o}`).join(" "),s=e.bindings.map(o=>`(${e.variables.map(l=>{let u=o[l];return u?this.generateValuesTerm(u):"UNDEF"}).join(" ")})`);return`${r}VALUES (${i}) {
68
68
  ${s.map(o=>`${r} ${o}`).join(`
69
69
  `)}
70
- ${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 jl(`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}}};$l.SPARQLGenerator=i1});var Bl=E(jn=>{"use strict";var pB=jn&&jn.__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]})),mB=jn&&jn.__setModuleDefault||(Object.create?(function(n,e){Object.defineProperty(n,"default",{enumerable:!0,value:e})}):function(n,e){n.default=e}),lP=jn&&jn.__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"&&pB(t,e,r[i]);return mB(t,e),t}})();Object.defineProperty(jn,"__esModule",{value:!0});jn.QueryExecutor=jn.ExoQLQueryExecutor=jn.QueryExecutorError=void 0;var gB=Tw(),yB=Cm(),_B=qw(),bB=Ww(),SB=XC(),wB=ZC(),vB=nP(),EB=t1(),TB=sP(),IB=aP(),AB=cP(),RB=ze(),OB=Ze(),CB=vm(),Qr="http://www.w3.org/2001/XMLSchema#",PB=new Set([`${Qr}integer`,`${Qr}decimal`,`${Qr}float`,`${Qr}double`,`${Qr}nonPositiveInteger`,`${Qr}negativeInteger`,`${Qr}long`,`${Qr}int`,`${Qr}short`,`${Qr}byte`,`${Qr}nonNegativeInteger`,`${Qr}unsignedLong`,`${Qr}unsignedInt`,`${Qr}unsignedShort`,`${Qr}unsignedByte`,`${Qr}positiveInteger`]),Ul=class extends Error{static{a(this,"QueryExecutorError")}constructor(e,t){super(e,t?{cause:t}:void 0),this.name="QueryExecutorError"}};jn.QueryExecutorError=Ul;var jm=class{static{a(this,"ExoQLQueryExecutor")}constructor(e,t={}){this.tripleStore=e,this.bgpExecutor=new gB.BGPExecutor(e),this.filterExecutor=new yB.FilterExecutor,this.optionalExecutor=new _B.OptionalExecutor,this.unionExecutor=new bB.UnionExecutor,this.minusExecutor=new SB.MinusExecutor,this.valuesExecutor=new wB.ValuesExecutor,this.aggregateExecutor=new vB.AggregateExecutor,this.constructExecutor=new EB.ConstructExecutor,this.serviceExecutor=new TB.ServiceExecutor(t.serviceConfig),this.graphExecutor=new IB.GraphExecutor(e),this.sparqlGenerator=new AB.SPARQLGenerator,this.filterExecutor.setExistsEvaluator(async(r,i)=>this.evaluateExistsPattern(r,i)),this.filterExecutor.setTripleStore(e)}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 Ul(`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 c of o.variables())r.add(c);let i=this.collectOperationVariables(e.right);if([...r].some(o=>i.has(o)))for(let o of t){let c=this.substituteVariables(e.right,o);for await(let l of this.execute(c)){let u=o.merge(l);u!==null&&(yield u)}}else{let o=[];for await(let c of this.execute(e.right))o.push(c);for(let c of t)for(let l of o){let u=c.merge(l);u!==null&&(yield u)}}}async*executeLeftJoin(e){let t=[];for await(let o of this.execute(e.left))t.push(o);let 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(()=>lP(fo())),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 c=i.get(o);c!==void 0&&s.set(o,c)}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),c=this.getExpressionValue(s.expression,i),l=0;if(o===void 0&&c===void 0?l=0:o===void 0?l=1:c===void 0?l=-1:typeof o=="number"&&typeof c=="number"?l=o-c:l=String(o).localeCompare(String(c)),s.descending&&(l=-l),l!==0)return l}return 0});for(let 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 RB.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(()=>lP(fo()));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 OB.Literal){let i=r.datatype?.value;if(i===`${Qr}dayTimeDuration`)try{return CB.DateTimeFunctions.parseDayTimeDuration(r.value)}catch{return r.value}if(i&&PB.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 Ul("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 Ul("executeAsk requires an ASK operation");for await(let t of this.execute(e.where))return!0;return!1}};jn.ExoQLQueryExecutor=jm;jn.QueryExecutor=jm});var yP=E(ho=>{"use strict";var xB=ho&&ho.__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 c=n.length-1;c>=0;c--)(o=n[c])&&(s=(i<3?o(s):i>3?o(e,t,s):o(e,t))||s);return i>3&&s&&Object.defineProperty(e,t,s),s},DB=ho&&ho.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},s1;Object.defineProperty(ho,"__esModule",{value:!0});ho.CommandResolver=void 0;var FB=Xe(),LB=ol(),nr=ze(),kt=Ze(),ne=Jt(),uP=Jo(),fP=df(),NB=cl(),kB=xf(),MB=Hr(),Vl=yb(),$m=nC(),jB=_l(),$B=Sl(),UB=Bl(),pc=10,Um="exo__Asset",BB=pc+1,dP="08cec529-90eb-4d43-88de-ceecccea12b0",VB=ne.Namespace.EXOCMD.term("SubstitutionToken").value,hP=new Set(["today","tomorrow","todayStart","targetFolder","target","randomUUIDv4","nowTimestamp","nowDate","nowYear","nowMonth","userInputLabel","userInput","targetProperty","labelAsArray","groundingTargetClass","targetClassSelf"]);function qB(n,e){return`__SUBSTITUTE__${n}__${e}__`}a(qB,"buildSubstitutionMarker");function GB(n,e,t){let r=(0,NB.utf8ToBase64)(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"");return`__SUBSTITUTE_P__${n}__${e}__${r}__`}a(GB,"buildParameterisedMarker");var pP="3f28af98-c031-4718-8ba2-44ad0b012c52",WB=ne.Namespace.EXOCMD.term("TokenInvocation").value,mP="29e2c8f8-2d27-4e58-b467-2e85d46f8122",gP="universal-default-template",HB=new Set(["today","tomorrow","todayStart","nowTimestamp","nowDate","nowYear","nowMonth"]),o1=s1=class{static{a(this,"CommandResolver")}clearUniversalCache(){this._universalCacheReady=!1,this._universalCacheValue=null,(0,$m.clearUniversalDefault)()}constructor(e,t=LB.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 c=r?await this.expandPrototypeChain(r):void 0,l=await this.expandClassHierarchy(t),u=new Map;for(let[p,y]of l){let _=await this.resolveForAsset(e,p,c);for(let S of _){let v=this.getBindingPriority(S.binding)===2?y:0,T=u.get(S.binding.id);(!T||v<T.depth)&&u.set(S.binding.id,{rc:S,depth:v})}}let f=new Set;for(let{rc:p}of u.values())if(p.binding.overrides)for(let y of p.binding.overrides)f.add(y);let d=Array.from(u.entries()).filter(([p])=>!f.has(p)).map(([,p])=>p);d.sort((p,y)=>{let _=this.getBindingPriority(p.rc.binding),S=this.getBindingPriority(y.rc.binding);return _!==S?_-S:p.depth!==y.depth?p.depth-y.depth:(p.rc.binding.order??100)-(y.rc.binding.order??100)});let h=d.map(p=>p.rc);return this.multiCache.set(s,h),h}async expandClassHierarchy(e){let t=new Map;for(let c of e){if(c===Um){t.set(c,new Set);continue}let l=[];try{l=await this.getClassAncestors(c)}catch{l=[]}t.set(c,new Set(l))}let r=a(c=>{for(let l of e)if(l!==c&&t.get(l)?.has(c)&&!t.get(c)?.has(l))return!0;return!1},"isAncestorOfSibling"),i=e.filter(c=>!r(c)),s=new Map,o=a((c,l)=>{let u=s.get(c);(u===void 0||l<u)&&s.set(c,l)},"setMin");for(let c of i){if(o(c,0),this.looksLikeUUID(c))try{let u=await this.resolveLabelByUID(c);u&&o(u,0)}catch{}if(c===Um)continue;let l=[];try{l=await this.getClassAncestorsWithDepth(c)}catch{l=[]}for(let{ref:u,depth:f}of l)o(u,f)}return s.has(Um)||s.set(Um,BB),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 c=typeof r=="string"?await this.expandPrototypeChain(r):r,l=await this.findBindings(t,c,e),u=[];for(let f of l){let d=await this.loadCommand(f.commandRef,{targetClass:f.targetClass});if(!d)continue;let h=f.precondition?{...d,precondition:f.precondition}:d;u.push({command:h,binding:f})}return u.sort((f,d)=>{let h=this.getBindingPriority(f.binding),p=this.getBindingPriority(d.binding);return h!==p?h-p:(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,ne.Namespace.RDF.term("type"),ne.Namespace.EXOCMD.term("Command"))).length===0)return null;let s=await this.getLiteralValue(r,ne.Namespace.EXO.term("Asset_label"))??"Unknown Command",o=await this.getLiteralValue(r,ne.Namespace.EXOCMD.term("Command_labelTemplate")),c=await this.getLiteralValue(r,ne.Namespace.EXOCMD.term("Command_icon")),l=await this.getLiteralValue(r,ne.Namespace.EXOCMD.term("Command_confirmMessage")),u=await this.getLiteralValue(r,ne.Namespace.EXOCMD.term("Command_successMessage")),f=await this.getLiteralValue(r,ne.Namespace.EXOCMD.term("Command_category")),d=await this.getLiteralValue(r,ne.Namespace.EXOCMD.term("Command_openInSameTab")),h=d!==null&&String(d).trim().toLowerCase()==="true",p=await this.loadLinkedPrecondition(r),y=await this.loadLinkedGrounding(r,0,t);return y?{id:e,name:s,labelTemplate:o??void 0,icon:c??void 0,precondition:p??void 0,grounding:y,confirmMessage:l??void 0,successMessage:u??void 0,category:f??void 0,openInSameTab:h||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,ne.Namespace.RDF.term("type"),ne.Namespace.EXOCMD.term("CommandBinding")),o=[];for(let c of s){let l=c.subject,u=await this.loadBindingDefinition(l);u&&this.bindingMatches(u,e,i,r)&&o.push(u)}return o}async findPaletteEnabledCommands(){let e=await this.tripleStore.match(void 0,ne.Namespace.RDF.term("type"),ne.Namespace.EXOCMD.term("Command")),t=[],r=new Set;for(let i of e){let s=i.subject;if((await this.getLiteralValue(s,ne.Namespace.EXOCMD.term("Command_paletteEnabled")))?.toLowerCase()!=="true")continue;let c=await this.getLiteralValue(s,ne.Namespace.EXO.term("Asset_uid"));if(!c){this.logger.warn(`[CommandResolver] paletteEnabled command at ${s.value} has no exo__Asset_uid \u2014 skipped`);continue}let l=await this.loadCommand(c);if(!l){this.logger.warn(`[CommandResolver] paletteEnabled command ${c} could not be loaded (missing grounding?) \u2014 skipped`);continue}let u=await this.getLiteralValue(s,ne.Namespace.EXOCMD.term("Command_paletteId")),f=await this.getLiteralValue(s,ne.Namespace.EXOCMD.term("Command_cliName")),d=u??f??c;if(r.has(d)){this.logger.warn(`[CommandResolver] duplicate paletteId "${d}" \u2014 first registration wins, dropping ${c}`);continue}r.add(d),t.push({command:l,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 c=await this.evaluateSelectSnippet(o,t);r=r.replace(s,c)}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),c=e.slice(r+1,s-1);t.push({full:o,body:c})}r=s}else r++;return t}async evaluateSelectSnippet(e,t){try{let r=e.replace(/\$target/g,`<${t}>`),s=new jB.ExoQLParser().parse(r),c=new $B.ExoQLAlgebraTranslator().translate(s),u=await new UB.ExoQLQueryExecutor(this.tripleStore).executeAll(c);if(u.length===0)return"";let f=u[0],d=f.variables();if(d.length===0)return"";let h=f.get(d[0]);return h?h instanceof kt.Literal||h instanceof nr.IRI?h.value:String(h):""}catch{return""}}async loadBindingDefinition(e){let t=await this.getLiteralValue(e,ne.Namespace.EXO.term("Asset_uid"));if(!t)return null;let r=await this.getLiteralValue(e,ne.Namespace.EXO.term("Asset_label"))??"",i=await this.getLinkedUID(e,ne.Namespace.EXOCMD.term("CommandBinding_command"));if(!i)return null;let s=await this.getLinkedValue(e,ne.Namespace.EXOCMD.term("CommandBinding_targetClass")),o=await this.getLinkedValue(e,ne.Namespace.EXOCMD.term("CommandBinding_targetPrototype")),c=await this.getLinkedValue(e,ne.Namespace.EXOCMD.term("CommandBinding_targetAsset"));if(!s&&!o&&!c)return null;let l=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("CommandBinding_position")),u=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("CommandBinding_order")),f=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("CommandBinding_variant")),d=f!==null?this.coerceVariant(f,t):void 0,h=await this.loadLinkedPreconditionFromProperty(e,ne.Namespace.EXOCMD.term("CommandBinding_precondition")),p=await this.loadLinkedStyle(e,t),y=await this.getLinkedUIDs(e,ne.Namespace.EXOCMD.term("CommandBinding_overrides"));return{id:t,label:r,commandRef:i,targetClass:s??void 0,targetPrototype:o??void 0,targetAsset:c??void 0,position:l??void 0,order:u?parseInt(u,10):void 0,variant:d,precondition:h??void 0,style:p??void 0,overrides:y.length>0?y:void 0}}async loadLinkedStyle(e,t){let r=await this.tripleStore.match(e,ne.Namespace.EXOCMD.term("CommandBinding_style"),void 0);if(r.length>0){let s=r[0].object,o=null;if(s instanceof nr.IRI)o=s;else if(s instanceof kt.Literal){let c=this.normalizeWikilink(s.value);o=await this.findSubjectByUID(c)}if(o){let c=await this.loadStyleAsset(o);if(c)return c}this.logger.warn(this.capWarning(`CommandBinding ${t}: style reference unresolved, falling back to inline variant`))}let i=await this.getLiteralValue(e,ne.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,ne.Namespace.EXO.term("Asset_uid"));if(!t)return null;let r=await this.getLiteralValue(e,ne.Namespace.EXO.term("Asset_label"))??"",i=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("CommandBindingStyle_variant")),s=i!==null?this.coerceVariant(i,t):void 0,o=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("CommandBindingStyle_showIcon")),c=this.coerceBoolean(o),l=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("CommandBindingStyle_labelClass")),u=l!==null?this.coerceLabelClass(l,t):void 0,f=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("CommandBindingStyle_ariaLabel")),d=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("CommandBindingStyle_tooltip")),h=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("CommandBindingStyle_keyboardShortcut")),p=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("CommandBindingStyle_source")),y=p!==null?this.coerceStyleSource(p,t):void 0;return{id:t,label:r,variant:s,showIcon:c,labelClass:u,ariaLabel:f??void 0,tooltip:d??void 0,keyboardShortcut:h??void 0,source:y,inline:!1}}coerceVariant(e,t){if(e==null)return;let r=String(e).trim().toLowerCase();if(r!==""){if(Vl.COMMAND_VARIANT_VALUES.includes(r))return r;this.logger.warn(this.capWarning(`CommandBindingStyle variant "${r}" not in whitelist [${Vl.COMMAND_VARIANT_VALUES.join(",")}]; dropped (asset ${t})`))}}coerceLabelClass(e,t){if(e==null)return;let r=String(e).trim().toLowerCase();if(r!==""){if(Vl.LABEL_CLASS_VALUES.includes(r))return r;this.logger.warn(this.capWarning(`CommandBindingStyle labelClass "${r}" not in whitelist [${Vl.LABEL_CLASS_VALUES.join(",")}]; dropped (asset ${t})`))}}coerceStyleSource(e,t){if(e==null)return;let r=String(e).trim().toLowerCase();if(r!==""){if(Vl.STYLE_SOURCE_VALUES.includes(r))return r;this.logger.warn(this.capWarning(`CommandBindingStyle source "${r}" not in whitelist [${Vl.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 c=this.extractAlias(t);if(c&&r===c)return!0;let l=this.extractAlias(e);return!!(l&&l===i)}extractPathBasename(e){let t=e.match(/\/([^/]+)\.md$/);return t?t[1]:null}extractAlias(e){let t=e.replace(/["'[\]]/g,"").trim(),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,ne.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 nr.IRI)return e;if(e instanceof kt.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,ne.Namespace.EXO.term("Asset_uid")),s=await this.getLiteralValue(e,ne.Namespace.EXO.term("Asset_label"))??"";if(i&&t.has(i))return this.brokenPreconditionNode(i,s);if(r>=pc)return this.brokenPreconditionNode(i??"",s);let o=await this.tripleStore.match(e,ne.Namespace.EXOCMD.term("AllPrecondition_preconditions"),void 0),c=await this.tripleStore.match(e,ne.Namespace.EXOCMD.term("AnyPrecondition_preconditions"),void 0),l=await this.tripleStore.match(e,ne.Namespace.EXOCMD.term("NotPrecondition_precondition"),void 0);if(o.length>0||c.length>0||l.length>0){let h=new Set(t);if(i&&h.add(i),o.length>0||c.length>0){let y=o.length>0?"all":"any",_=o.length>0?o:c,S=[];for(let v of _)S.push(await this.loadChildPrecondition(v.object,h,r+1));return{id:i??"",label:s,composite:{op:y,children:S}}}let p=await this.loadChildPrecondition(l[0].object,h,r+1);return{id:i??"",label:s,not:p}}let u=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Precondition_sparqlAsk")),f=await this.getLiteralValue(e,ne.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 c=e instanceof kt.Literal?this.normalizeWikilink(e.value):"";return this.brokenPreconditionNode(c,"")}let s=await this.loadPreconditionSubject(i,t,r);if(s)return s;let o=await this.getLiteralValue(i,ne.Namespace.EXO.term("Asset_uid"));return this.brokenPreconditionNode(o??"","")}async loadPreconditionQueryRef(e){let t=await this.tripleStore.match(e,ne.Namespace.EXOCMD.term("Precondition_query"),void 0);if(t.length===0)return;let r=t[0].object;if(r instanceof nr.IRI)return await this.getLiteralValue(r,ne.Namespace.EXO.term("Asset_uid"))??void 0;if(r instanceof kt.Literal)return this.normalizeWikilink(r.value)}brokenPreconditionNode(e,t){return{id:e,label:t,broken:!0}}async loadLinkedGrounding(e,t,r){if(t>=pc)return null;let i=await this.tripleStore.match(e,ne.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 c=await this.resolveGroundingRef(o.object);if(!c)continue;let l=await this.getObsidianName(c,ne.Namespace.EXOCMD.term("Grounding_targetPrototype"));if(l&&this.matchesReference(l,r.targetClass))return this.loadGroundingDefinition(c,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 nr.IRI)return e;if(e instanceof kt.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>=pc)return null;let r=await this.getLiteralValue(e,ne.Namespace.EXO.term("Asset_uid"));if(!r)return null;let i=await this.getLiteralValue(e,ne.Namespace.EXO.term("Asset_label"))??"",s=await this.resolveGroundingTypeReference(e);if(!s)return null;let o=await this.getObsidianName(e,ne.Namespace.EXOCMD.term("Grounding_targetProperty"));if(o&&this.looksLikeUUID(o)){let se=await this.resolveLabelByUID(o);if(!se)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=se}if(s===uP.GroundingType.SERVICE_CALL){let se=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_serviceId"));se&&(o=se)}let c=await this.getObsidianName(e,ne.Namespace.EXOCMD.term("Grounding_targetValueRef")),l=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_targetValueLiteral")),u=await this.getObsidianName(e,ne.Namespace.EXOCMD.term("Grounding_targetValueSubstitution")),f=null;if(u&&this.looksLikeUUID(u)){let se=await this.resolveLabelByUID(u);if(!se)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=se}else u&&(f=u);let d=await this.getObsidianName(e,ne.Namespace.EXOCMD.term("Grounding_targetValueQuery")),h=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_serviceCallPayload")),p=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_appendExpression")),y=await this.getObsidianWikilinkValue(e,ne.Namespace.EXOCMD.term("Grounding_isDefinedBy")),_=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_sparqlUpdate")),S=await this.getObsidianName(e,ne.Namespace.EXOCMD.term("Grounding_targetClass"));if(S&&!this.looksLikeUUID(S)){let se=await this.findUidByLabel(S);se&&(S=se)}let v=await this.getObsidianName(e,ne.Namespace.EXOCMD.term("Grounding_targetPrototype")),T=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_targetFolder")),P=await this.getObsidianName(e,ne.Namespace.EXOCMD.term("Grounding_linkBackProperty")),O=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_inputSchema")),C=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_incrementBy")),F=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_shiftDelta")),X;if(C!=null&&C!==""){let se=Number.parseInt(String(C),10);Number.isFinite(se)&&(X=se)}let U=await this.resolvePropertyDefaults(e,r),j=await this.resolveInheritanceRules(e,r),K=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_propertyDefaults"));K!==null&&K!==""&&!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 N;s===uP.GroundingType.COMPOSITE&&(N=await this.loadCompositeSteps(e,t+1));let le;if(O)try{let se=JSON.parse(O);se?.properties&&(le=Object.entries(se.properties).map(([ge,Le])=>{let z=Le.type,ae=z==="string"?"text":z,_e=Le.defaultValue!==void 0?Le.defaultValue:Le.default,Ie={name:ge,type:ae,label:Le.title??ge,required:Array.isArray(se.required)&&se.required.includes(ge)};return _e!=null&&(Ie.defaultValue=String(_e)),typeof Le.targetClassUid=="string"&&(Ie.targetClassUid=Le.targetClassUid),Ie}))}catch{}let Se=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_prefillLabelWithDate")),Z=Se!==null&&String(Se).trim().toLowerCase()==="true",me=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_labelTemplate")),Y=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_direction")),ve;if(Y!=null){let se=String(Y).trim().toLowerCase();se==="forward"||se==="rollback"?ve=se:se!==""&&this.logger.warn(`Grounding ${r}: exocmd__Grounding_direction value '${Y}' is not 'forward' or 'rollback' \u2014 treating as undefined (will default to 'forward' at dispatch).`)}let ie=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_bodyTemplate")),te=await this.getObsidianName(e,ne.Namespace.EXOCMD.term("Grounding_templateRef")),pe=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_cloneTargetBody")),Ee=pe!==null&&String(pe).trim().toLowerCase()==="true",re=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_targetsCreatedInstance")),ye=re!==null&&String(re).trim().toLowerCase()==="true",Fe={id:r,label:i,type:s,targetProperty:o??void 0,targetValueRef:c??void 0,targetValueLiteral:l??void 0,targetValueSubstitution:f??void 0,targetValueQuery:d??void 0,serviceCallPayload:h??void 0,appendExpression:p??void 0,sparqlUpdate:_??void 0,steps:N,targetClass:S??void 0,targetPrototype:v??void 0,targetFolder:T??void 0,linkBackProperty:P??void 0,incrementBy:X,shiftDelta:F??void 0,propertyDefault:U.length>0?U:void 0,inheritanceRule:j.length>0?j:void 0,isDefinedBy:y??void 0,prefillLabelWithDate:Z||void 0,labelTemplate:me??void 0,direction:ve,bodyTemplate:ie??void 0,templateRef:te??void 0,cloneTargetBody:Ee||void 0,targetsCreatedInstance:ye||void 0};return le&&(Fe.inputSchema=le),Fe}async loadCompositeSteps(e,t){if(t>=pc)return[];let r=await this.tripleStore.match(e,ne.Namespace.EXOCMD.term("Grounding_steps"),void 0),i=[];for(let s of r){let o=null;if(s.object instanceof nr.IRI)o=s.object;else if(s.object instanceof kt.Literal){let l=this.normalizeWikilink(s.object.value);o=await this.findSubjectByUID(l)}if(!o)continue;let c=await this.loadGroundingDefinition(o,t);c&&i.push(c)}return i}async resolvePropertyDefaults(e,t){let r=await this.resolvePropertyDefaultsForSubject(e,t,ne.Namespace.EXOCMD.term("Grounding_propertyDefault")),i=await this.getUniversalCache();return i&&i.propertyDefaults.length>0?(0,$m.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 c=await this.resolveRefTripleObject(o.object);if(!c)continue;let l=await this.getObsidianName(c,ne.Namespace.EXOCMD.term("PropertyDefault_property"));if(!l){this.logger.warn(`Grounding ${t}: PropertyDefault asset missing exocmd__PropertyDefault_property \u2014 entry skipped.`);continue}let u=this.looksLikeUUID(l)?await this.resolveLabelByUID(l):l;if(!u){this.logger.warn(`Grounding ${t}: PropertyDefault property UID '${l}' is not resolvable to exo__Asset_label \u2014 entry skipped.`);continue}let f=await this.getObsidianName(c,ne.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,$m.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,gP,ne.Namespace.EXOCMD.term("Template_propertyDefault")),i=await this.resolveInheritanceRulesForSubject(t,gP,ne.Namespace.EXOCMD.term("Template_inheritanceRule"));return this._universalCacheValue={propertyDefaults:r,inheritanceRules:i},this._universalCacheValue}async findUniversalSingleton(){let e=ne.Namespace.EXOCMD.term("UniversalDefaultTemplate").value,t=await this.tripleStore.match(void 0,ne.Namespace.EXO.term("Instance_class"),void 0),r=[];for(let i of t){let s=!1;if(i.object instanceof nr.IRI)s=i.object.value===e||i.object.value.includes(mP);else if(i.object instanceof kt.Literal){let o=this.unwrapWikilink(i.object.value);s=o==="exocmd__UniversalDefaultTemplate"||o===mP}s&&i.subject instanceof nr.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,ne.Namespace.EXOCMD.term("Grounding_inheritanceRule")),i=await this.getUniversalCache();return i&&i.inheritanceRules.length>0?(0,$m.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 c of i){let l=await this.resolveRefTripleObject(c.object);if(!l)continue;let u=await this.resolveLabelRef(l,ne.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(l,ne.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(l,ne.Namespace.EXOCMD.term("InheritanceRule_targetClassCondition"),void 0),h,p;if(d.length>0){let O=await this.getObsidianName(l,ne.Namespace.EXOCMD.term("InheritanceRule_targetClassCondition"));if(!O||!O.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(O)?(p=O,h=await this.resolveLabelByUID(O)??void 0):h=O}let y=await this.tripleStore.match(l,ne.Namespace.EXOCMD.term("InheritanceRule_targetClassExclusion"),void 0),_=[],S=[],v=!1;for(let O of y){let C=null;if(O.object instanceof nr.IRI?C=this.iriToObsidianName(O.object.value)??O.object.value:O.object instanceof kt.Literal&&(C=this.unwrapWikilink(O.object.value)),!C){v=!0;continue}if(this.looksLikeUUID(C)){S.push(C);let F=await this.resolveLabelByUID(C);F&&_.push(F)}else _.push(C)}if(v){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 T=await this.getLiteralValue(l,ne.Namespace.EXOCMD.term("InheritanceRule_priority")),P=50;if(T!==null&&T!==""){let O=Number.parseInt(String(T),10);Number.isFinite(O)&&(P=O)}s.push({sourcePropertyName:u,targetPropertyName:f,targetClassCondition:h,targetClassConditionUid:p,targetClassExclusion:_,targetClassExclusionUids:S,priority:P})}return s}async resolveRefTripleObject(e){if(e instanceof nr.IRI)return e;if(e instanceof kt.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,ne.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 c=o.trim();return hP.has(c)?s!==void 0?GB(c,t,s):HB.has(c)?s1.parseTimeResolve(c):qB(c,t):(this.logger.warn(`Grounding ${r}: PropertyDefault '${i}' SubstitutionToken '${t}' declares unknown resolver-id '${c}' \u2014 falling back to wikilink form. Known ids: ${Array.from(hP).join(", ")}.`),`"[[${t}]]"`)}static parseTimeResolve(e){let t=new Date,r=a(i=>i<10?`0${i}`:String(i),"pad");switch(e){case"today":return`${t.getFullYear()}-${r(t.getMonth()+1)}-${r(t.getDate())}`;case"tomorrow":{let i=new Date(t.getFullYear(),t.getMonth(),t.getDate()+1);return`${i.getFullYear()}-${r(i.getMonth()+1)}-${r(i.getDate())}`}case"todayStart":return MB.DateFormatter.getTodayStartTimestamp();case"nowTimestamp":return`${t.getFullYear()}-${r(t.getMonth()+1)}-${r(t.getDate())}T${r(t.getHours())}:${r(t.getMinutes())}:${r(t.getSeconds())}`;case"nowDate":return`${t.getFullYear()}-${r(t.getMonth()+1)}-${r(t.getDate())}`;case"nowYear":return String(t.getFullYear());case"nowMonth":return r(t.getMonth()+1);default:return""}}async resolveTokenInvocation(e,t,r,i){let s=await this.getObsidianName(e,ne.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,ne.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 c=await this.findSubjectByUID(s);return c?this.dispatchSubstitutionToken(c,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,ne.Namespace.EXO.term("Instance_class"),void 0);for(let r of t)if(r.object instanceof nr.IRI){if(r.object.value===WB||r.object.value.includes(pP))return!0}else if(r.object instanceof kt.Literal){let i=this.unwrapWikilink(r.object.value);if(i==="exocmd__TokenInvocation"||i===pP)return!0}return!1}async assetIsSubstitutionToken(e){let t=await this.tripleStore.match(e,ne.Namespace.EXO.term("Instance_class"),void 0);for(let r of t)if(r.object instanceof nr.IRI){if(r.object.value===VB||r.object.value.includes(dP))return!0}else if(r.object instanceof kt.Literal){let i=this.unwrapWikilink(r.object.value);if(i==="exocmd__SubstitutionToken"||i===dP)return!0}return!1}async resolveGroundingTypeReference(e){let t=await this.tripleStore.match(e,ne.Namespace.EXOCMD.term("Grounding_type"),void 0);if(t.length===0)return null;let r=t[0].object;if(r instanceof nr.IRI)return(0,fP.resolveGroundingTypeFromIRI)(r.value);if(r instanceof kt.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,fP.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<pc;s++){let o=this.extractUuidFromRef(i);if(!o)break;let c=null;try{let u=await this.findSubjectByUID(o);if(!u)break;c=await this.getLinkedValue(u,ne.Namespace.EXO.term("Asset_prototype"))}catch(u){this.logger.debug(this.capWarning(`[expandPrototypeChain] store lookup failed at hop ${s} for '${i}': ${String(u)}`));break}if(!c)break;let l=this.normalizeWikilink(c).toLowerCase();if(r.has(l))break;r.add(l),t.push(c),i=c}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,ne.Namespace.EXO.term("Asset_uid"),void 0);for(let r of t)if(r.object instanceof kt.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 kt.Literal||i instanceof nr.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,ne.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]),c=await this.getLiteralValue(s,ne.Namespace.EXO.term("Asset_uid"));c&&o.add(c);let l=await this.getLiteralValue(s,ne.Namespace.EXO.term("Asset_label"));l&&o.add(l);let u=a((h,p)=>{if(o.has(h))return;let y=r.get(h);(y===void 0||p<y)&&r.set(h,p)},"setMin"),f=[{fileIRI:s,depth:0}];for(;f.length>0;){let h=f.shift();if(!h)break;let{fileIRI:p,depth:y}=h;if(y>=pc||i.has(p.value))continue;i.add(p.value);let _=await this.tripleStore.match(p,ne.Namespace.EXO.term("Class_superClass"),void 0);for(let S of _){let v=S.object;if(!(v instanceof nr.IRI))continue;let T=y+1,P=v.value.startsWith("obsidian://vault/"),O=this.iriToObsidianName(v.value);O&&u(O,T);let C=null;if(P?C=v:O&&(C=await this.resolveClassFileIRI(O)),!C)continue;let F=await this.getLiteralValue(C,ne.Namespace.EXO.term("Asset_uid"));F&&u(F,T),i.has(C.value)||f.push({fileIRI:C,depth:T})}}let d=Array.from(r.entries()).map(([h,p])=>({ref:h,depth:p}));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,ne.Namespace.EXO.term("Asset_label"),void 0);for(let r of t)if(r.object instanceof kt.Literal&&r.object.value===e&&r.subject instanceof nr.IRI){let i=await this.tripleStore.match(r.subject,ne.Namespace.EXO.term("Asset_uid"),void 0);if(i.length>0&&i[0].object instanceof kt.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 nr.IRI){let s=await this.tripleStore.match(i,ne.Namespace.EXO.term("Asset_uid"),void 0);return s.length>0&&s[0].object instanceof kt.Literal?s[0].object.value:i.value.split("/").pop()?.replace(".md","")??null}return i instanceof kt.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 nr.IRI){let c=await this.tripleStore.match(o,ne.Namespace.EXO.term("Asset_uid"),void 0);if(c.length>0&&c[0].object instanceof kt.Literal)i.push(c[0].object.value);else{let l=o.value.split("/").pop()?.replace(".md","");l&&i.push(l)}}else if(o instanceof kt.Literal){let c=this.normalizeWikilink(o.value);c&&i.push(c)}}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 kt.Literal?this.normalizeWikilink(i.value):i instanceof nr.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 kt.Literal?this.unwrapWikilink(i.value):i instanceof nr.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 kt.Literal)return this.resolveWikilinkAlias(i.value);if(i instanceof nr.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,ne.Namespace.EXO.term("Asset_label"));return s?e.replace(`[[${r}]]`,`[[${r}|${s}]]`):e}iriToObsidianName(e){return(0,kB.iriToObsidianName)(e)}normalizeWikilink(e){let t=e.replace(/["'[\]]/g,"").trim(),r=t.indexOf("|");return r>=0?t.substring(0,r):t}};ho.CommandResolver=o1;ho.CommandResolver=o1=s1=xB([(0,FB.injectable)(),DB("design:paramtypes",[Object,Object])],o1)});var c1=E(a1=>{"use strict";Object.defineProperty(a1,"__esModule",{value:!0});a1.validateExoQLAllowlist=zB;var Bm=Uf();function zB(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 Bm.ExoQLForbiddenKeywordError("LOAD");throw new Bm.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 Bm.ExoQLForbiddenKeywordError("FROM")}if(Array.isArray(e.where))for(let t of e.where)Vm(t);if(Array.isArray(e.template))for(let t of e.template)Vm(t)}}a(zB,"validateExoQLAllowlist");function Vm(n){if(!n||typeof n!="object")return;if(n.type==="service")throw new Bm.ExoQLForbiddenKeywordError("SERVICE");if(Array.isArray(n.patterns))for(let t of n.patterns)Vm(t);let e=n.where;if(Array.isArray(e))for(let t of e)Vm(t)}a(Vm,"walkPatternForBannedKeywords")});var l1=E(qm=>{"use strict";Object.defineProperty(qm,"__esModule",{value:!0});qm.DEFAULT_EVAL_CONFIG=void 0;qm.DEFAULT_EVAL_CONFIG=Object.freeze({enabled:!0,maxNestedEvalCount:100,maxAggregateEvalMillis:1e4})});var Gm=E(u1=>{"use strict";Object.defineProperty(u1,"__esModule",{value:!0});u1.evaluateWithExoEval=e8;var KB=_l(),YB=Sl(),QB=Bl(),XB=c1(),JB=l1(),ZB=Uf();async function e8(n,e={}){if(typeof n!="string")throw new TypeError("evaluateWithExoEval: sparql must be a string");let r=new KB.ExoQLParser().parse(n);if((0,XB.validateExoQLAllowlist)(r),!{...JB.DEFAULT_EVAL_CONFIG,...e.config??{}}.enabled)throw new ZB.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 c=new YB.ExoQLAlgebraTranslator().translate(r),l=new QB.ExoQLQueryExecutor(e.store);return l.isAskQuery(c)?{kind:"ask",result:await l.executeAsk(c)}:l.isConstructQuery(c)?{kind:"construct",triples:await l.executeConstruct(c)}:{kind:"select",rows:await l.executeAll(c)}}a(e8,"evaluateWithExoEval")});var Vf=E(Wm=>{"use strict";Object.defineProperty(Wm,"__esModule",{value:!0});Wm.liveClock=t8;Wm.frozenClock=r8;function t8(){return{now:a(()=>new Date,"now")}}a(t8,"liveClock");function r8(n){let e=new Date(n);return{now:a(()=>new Date(e.getTime()),"now")}}a(r8,"frozenClock")});var bP=E(po=>{"use strict";var n8=po&&po.__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 c=n.length-1;c>=0;c--)(o=n[c])&&(s=(i<3?o(s):i>3?o(e,t,s):o(e,t))||s);return i>3&&s&&Object.defineProperty(e,t,s),s},i8=po&&po.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},Gf;Object.defineProperty(po,"__esModule",{value:!0});po.PreconditionEvaluator=void 0;var s8=Xe(),o8=_l(),a8=Sl(),_P=Bl(),c8=Gm(),qf=Hr(),l8=Vf(),Wf=Gf=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,l8.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 c=await Promise.all(o.map(l=>this.evaluateNode(l,t,r,i)));return s==="all"?c.includes("no")?"no":c.includes("unknown")?"unknown":"yes":c.includes("yes")?"yes":c.includes("unknown")?"unknown":"no"}if(e.not){let s=await this.evaluateNode(e.not,t,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,c8.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,Gf.SENTINEL_IRI),i=new o8.ExoQLParser().parse(t),o=new a8.ExoQLAlgebraTranslator().translate(i);return new _P.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=Gf.TEMPORAL_TOKEN.test(e),i=r?qf.DateFormatter.toDateString(this.clock.now()):null,s=this.askCache.get(e);if(s===void 0||r&&s.day!==i){let l=this.compileAsk(e);if(!l)return!1;s={day:i,compiled:l},this.askCache.set(e,s)}let o=JSON.parse(JSON.stringify(s.compiled).replaceAll(Gf.SENTINEL_IRI,t));return await new _P.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(),c=r.getDate(),l=r.getDay(),u=qf.DateFormatter.toDateString(r),f=qf.DateFormatter.toDateString(new Date(s,o,c-1)),d=(l+6)%7,h=qf.DateFormatter.toDateString(new Date(s,o,c-d)),p=qf.DateFormatter.toDateString(new Date(s,o,c-d-7)),y=`${s}-${String(o+1).padStart(2,"0")}-01`,_=o===0?11:o-1,v=`${o===0?s-1:s}-${String(_+1).padStart(2,"0")}-01`,T=`${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,`"${h}"^^xsd:date`).replace(/\$lastWeekStart\b/g,`"${p}"^^xsd:date`).replace(/\$thisMonthStart\b/g,`"${y}"^^xsd:date`).replace(/\$lastMonthStart\b/g,`"${v}"^^xsd:date`).replace(/\$thisYearStart\b/g,`"${T}"^^xsd:date`).replace(/\$today\b/g,`"${u}"^^xsd:date`)}};po.PreconditionEvaluator=Wf;Wf.SENTINEL_IRI="urn:exocortex:cache-sentinel:target";Wf.TEMPORAL_TOKEN=/\$(?:now|today|yesterday|thisWeekStart|lastWeekStart|thisMonthStart|lastMonthStart|thisYearStart)\b/;po.PreconditionEvaluator=Wf=Gf=n8([(0,s8.injectable)(),i8("design:paramtypes",[Object,Object,Object])],Wf)});var SP=E(mo=>{"use strict";Object.defineProperty(mo,"__esModule",{value:!0});mo.hasUidFilename=mo.hasNonUidFilename=void 0;mo.registerDefaultHostFunctions=d8;var u8=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");mo.hasNonUidFilename=u8;var f8=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");mo.hasUidFilename=f8;function d8(n){n.registerHostFunction("hasNonUidFilename",mo.hasNonUidFilename),n.registerHostFunction("hasUidFilename",mo.hasUidFilename)}a(d8,"registerDefaultHostFunctions")});var zm=E(Hm=>{"use strict";Object.defineProperty(Hm,"__esModule",{value:!0});Hm.liveUidGenerator=h8;Hm.seededUidGenerator=m8;var f1=Ii();function h8(){return{next:a(()=>(0,f1.v4)(),"next")}}a(h8,"liveUidGenerator");var p8="6ba7b810-9dad-11d1-80b4-00c04fd430c8";function m8(n){let e=0,t=(0,f1.v5)(n,p8);return{next:a(()=>{let r=`${n}#${e}`;return e+=1,(0,f1.v5)(r,t)},"next")}}a(m8,"seededUidGenerator")});var Qm=E(fa=>{"use strict";Object.defineProperty(fa,"__esModule",{value:!0});fa.registerResolver=fr;fa.getResolver=y8;fa.isResolverModifierAware=_8;fa.getRegisteredResolverIds=b8;fa.clearResolvers=S8;fa.installDefaultResolvers=P8;var g8=Hr(),Ym=new Map,d1=new Set;function fr(n,e,t=!1){Ym.set(n,e),t&&d1.add(n)}a(fr,"registerResolver");function y8(n){return Ym.get(n)}a(y8,"getResolver");function _8(n){return d1.has(n)}a(_8,"isResolverModifierAware");function b8(){return Array.from(Ym.keys())}a(b8,"getRegisteredResolverIds");function S8(){Ym.clear(),d1.clear()}a(S8,"clearResolvers");function Xr(n){return n<10?`0${n}`:String(n)}a(Xr,"pad2");var w8=["January","February","March","April","May","June","July","August","September","October","November","December"],v8=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],E8=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],T8=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];function I8(n){let e=["th","st","nd","rd"],t=n%100;return`${n}${e[(t-20)%10]||e[t]||e[0]}`}a(I8,"ordinalDay");var A8=/YYYY|YY|MMMM|MMM|MM|M|Do|DD|D|dddd|ddd|HH|H|hh|h|mm|m|ss|s|A|a/g;function R8(n,e){let t=(n.getHours()+11)%12+1;return e.replace(A8,r=>{switch(r){case"YYYY":return String(n.getFullYear());case"YY":return Xr(n.getFullYear()%100);case"MMMM":return w8[n.getMonth()];case"MMM":return v8[n.getMonth()];case"MM":return Xr(n.getMonth()+1);case"M":return String(n.getMonth()+1);case"Do":return I8(n.getDate());case"DD":return Xr(n.getDate());case"D":return String(n.getDate());case"dddd":return E8[n.getDay()];case"ddd":return T8[n.getDay()];case"HH":return Xr(n.getHours());case"H":return String(n.getHours());case"hh":return Xr(t);case"h":return String(t);case"mm":return Xr(n.getMinutes());case"m":return String(n.getMinutes());case"ss":return Xr(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(R8,"formatDate");function wP(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(wP,"addMonthsClamped");function O8(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=wP(s,r,"M");break;case"y":s=wP(s,r,"y");break}return isNaN(s.getTime())?n:s}a(O8,"applyDateOffset");function C8(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(C8,"parseDateModifier");function Km(n,e){return(t,r)=>{let{offset:i,format:s}=C8(r),o=new Date;return n!==0&&o.setDate(o.getDate()+n),o=O8(o,i),R8(o,s??e)}}a(Km,"makeDateResolver");function P8(){fr("today",()=>{let n=new Date;return`${n.getFullYear()}-${Xr(n.getMonth()+1)}-${Xr(n.getDate())}`}),fr("todayStart",()=>g8.DateFormatter.getTodayStartTimestamp()),fr("date",Km(0,"YYYY-MM-DD"),!0),fr("now",Km(0,"YYYY-MM-DDTHH:mm:ss"),!0),fr("tomorrow",Km(1,"YYYY-MM-DD"),!0),fr("yesterday",Km(-1,"YYYY-MM-DD"),!0),fr("target",n=>n.targetIRI?`"[[${n.targetIRI}]]"`:""),fr("targetFolder",n=>{if(!n.targetFilePath)return"";let e=n.targetFilePath.replace(/^\/+/,""),t=e.lastIndexOf("/");return t>=0?e.slice(0,t):""}),fr("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.")}),fr("nowTimestamp",()=>{let n=new Date;return`${n.getFullYear()}-${Xr(n.getMonth()+1)}-${Xr(n.getDate())}T${Xr(n.getHours())}:${Xr(n.getMinutes())}:${Xr(n.getSeconds())}`}),fr("nowDate",()=>{let n=new Date;return`${n.getFullYear()}-${Xr(n.getMonth()+1)}-${Xr(n.getDate())}`}),fr("nowYear",()=>String(new Date().getFullYear())),fr("nowMonth",()=>Xr(new Date().getMonth()+1)),fr("userInputLabel",n=>{let e=n.userInput?.label;return typeof e=="string"?e:""}),fr("userInput",(n,e)=>{if(!e)return null;let t=n.userInput?.[e];return typeof t=="string"?t:t==null?null:String(t)}),fr("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)}),fr("labelAsArray",n=>{let e=n.userInput?.label;return typeof e=="string"&&e.length>0?[e]:[]}),fr("groundingTargetClass",n=>n.groundingTargetClassUid?`"[[${n.groundingTargetClassUid}]]"`:null),fr("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(P8,"installDefaultResolvers")});var p1=E(Xm=>{"use strict";Object.defineProperty(Xm,"__esModule",{value:!0});Xm.resolveTemplateBody=D8;Xm.stripTemplateFrontmatter=F8;var h1=Qm();(0,h1.installDefaultResolvers)();var x8=/\$([A-Za-z][A-Za-z0-9_]*)((?:[+-]\d+[dwMy])?(?::[A-Za-z0-9:./-]+)?)/g;function D8(n,e={}){return n.replace(x8,(t,r,i)=>{let s=(0,h1.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,h1.isResolverModifierAware)(r)?o:o+i})}a(D8,"resolveTemplateBody");function F8(n){let e=n.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);return e?n.slice(e[0].length):n}a(F8,"stripTemplateFrontmatter")});var Hf=E(ql=>{"use strict";Object.defineProperty(ql,"__esModule",{value:!0});ql.registerOrderSpecLoader=L8;ql.clearOrderSpecLoader=N8;ql.loadDefaultSpec=k8;ql.orderProperties=M8;var Jm=null,da,Zm=!1;function L8(n){Jm=n,da=void 0,Zm=!1}a(L8,"registerOrderSpecLoader");function N8(){Jm=null,da=void 0,Zm=!1}a(N8,"clearOrderSpecLoader");function k8(){if(da!==void 0)return da;if(!Jm)return da=null,null;try{da=Jm()}catch(n){Zm||(console.warn("[OrderSpecResolver] loader threw, falling back to insertion order:",n),Zm=!0),da=null}return da}a(k8,"loadDefaultSpec");function M8(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)),c=t.filter(u=>!r.has(u)&&!i.has(u));e.middleStrategy==="alphabetical"&&c.sort((u,f)=>u.localeCompare(f));let l={};for(let u of s)l[u]=n[u];for(let u of c)l[u]=n[u];for(let u of o)l[u]=n[u];return l}a(M8,"orderProperties")});var eg=E(mc=>{"use strict";Object.defineProperty(mc,"__esModule",{value:!0});mc.STRING_SCALAR_PROPERTIES=void 0;mc.needsYamlQuoting=vP;mc.quoteYamlString=EP;mc.serializeYamlScalar=z8;var j8=/^[-!&*?|>%@`"'#,[\]{}]/,$8=/[\u0000-\u001f\u007f]/,U8=/^(?:true|True|TRUE|false|False|FALSE)$/,B8=/^(?:null|Null|NULL|~)$/,V8=/^[-+]?(?:0b[01_]+|0o[0-7_]+|0x[0-9a-fA-F_]+|[0-9][0-9_]*)$/,q8=/^(?:[-+]?[0-9][0-9_]*(?:\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\.(?:inf|Inf|INF)|\.(?:nan|NaN|NAN))$/,G8=/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;mc.STRING_SCALAR_PROPERTIES=new Set(["exo__Asset_label","aliases"]);function W8(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(W8,"isCompleteDoubleQuotedScalar");function H8(n){return U8.test(n)||B8.test(n)||V8.test(n)||q8.test(n)||G8.test(n)}a(H8,"looksLikeNonStringScalar");function vP(n,e=!1){return n===""?!0:W8(n)?!1:!!(n!==n.trim()||/:(\s|$)/.test(n)||/\s#/.test(n)||j8.test(n)||$8.test(n)||e&&H8(n))}a(vP,"needsYamlQuoting");function EP(n){let e="";for(let t=0;t<n.length;t++){let r=n[t],i=n.charCodeAt(t);r==="\\"?e+="\\\\":r==='"'?e+='\\"':r===`
70
+ ${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 jl(`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}}};$l.SPARQLGenerator=i1});var Bl=E(jn=>{"use strict";var pB=jn&&jn.__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]})),mB=jn&&jn.__setModuleDefault||(Object.create?(function(n,e){Object.defineProperty(n,"default",{enumerable:!0,value:e})}):function(n,e){n.default=e}),lP=jn&&jn.__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"&&pB(t,e,r[i]);return mB(t,e),t}})();Object.defineProperty(jn,"__esModule",{value:!0});jn.QueryExecutor=jn.ExoQLQueryExecutor=jn.QueryExecutorError=void 0;var gB=Tw(),yB=Cm(),_B=qw(),bB=Ww(),SB=XC(),wB=ZC(),vB=nP(),EB=t1(),TB=sP(),IB=aP(),AB=cP(),RB=ze(),OB=Ze(),CB=vm(),Qr="http://www.w3.org/2001/XMLSchema#",PB=new Set([`${Qr}integer`,`${Qr}decimal`,`${Qr}float`,`${Qr}double`,`${Qr}nonPositiveInteger`,`${Qr}negativeInteger`,`${Qr}long`,`${Qr}int`,`${Qr}short`,`${Qr}byte`,`${Qr}nonNegativeInteger`,`${Qr}unsignedLong`,`${Qr}unsignedInt`,`${Qr}unsignedShort`,`${Qr}unsignedByte`,`${Qr}positiveInteger`]),Ul=class extends Error{static{a(this,"QueryExecutorError")}constructor(e,t){super(e,t?{cause:t}:void 0),this.name="QueryExecutorError"}};jn.QueryExecutorError=Ul;var jm=class{static{a(this,"ExoQLQueryExecutor")}constructor(e,t={}){this.tripleStore=e,this.bgpExecutor=new gB.BGPExecutor(e),this.filterExecutor=new yB.FilterExecutor,this.optionalExecutor=new _B.OptionalExecutor,this.unionExecutor=new bB.UnionExecutor,this.minusExecutor=new SB.MinusExecutor,this.valuesExecutor=new wB.ValuesExecutor,this.aggregateExecutor=new vB.AggregateExecutor,this.constructExecutor=new EB.ConstructExecutor,this.serviceExecutor=new TB.ServiceExecutor(t.serviceConfig),this.graphExecutor=new IB.GraphExecutor(e),this.sparqlGenerator=new AB.SPARQLGenerator,this.filterExecutor.setExistsEvaluator(async(r,i)=>this.evaluateExistsPattern(r,i)),this.filterExecutor.setTripleStore(e)}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 Ul(`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 c of o.variables())r.add(c);let i=this.collectOperationVariables(e.right);if([...r].some(o=>i.has(o)))for(let o of t){let c=this.substituteVariables(e.right,o);for await(let l of this.execute(c)){let u=o.merge(l);u!==null&&(yield u)}}else{let o=[];for await(let c of this.execute(e.right))o.push(c);for(let c of t)for(let l of o){let u=c.merge(l);u!==null&&(yield u)}}}async*executeLeftJoin(e){let t=[];for await(let o of this.execute(e.left))t.push(o);let 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(()=>lP(fo())),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 c=i.get(o);c!==void 0&&s.set(o,c)}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),c=this.getExpressionValue(s.expression,i),l=0;if(o===void 0&&c===void 0?l=0:o===void 0?l=1:c===void 0?l=-1:typeof o=="number"&&typeof c=="number"?l=o-c:l=String(o).localeCompare(String(c)),s.descending&&(l=-l),l!==0)return l}return 0});for(let 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 RB.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(()=>lP(fo()));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 OB.Literal){let i=r.datatype?.value;if(i===`${Qr}dayTimeDuration`)try{return CB.DateTimeFunctions.parseDayTimeDuration(r.value)}catch{return r.value}if(i&&PB.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 Ul("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 Ul("executeAsk requires an ASK operation");for await(let t of this.execute(e.where))return!0;return!1}};jn.ExoQLQueryExecutor=jm;jn.QueryExecutor=jm});var yP=E(ho=>{"use strict";var xB=ho&&ho.__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 c=n.length-1;c>=0;c--)(o=n[c])&&(s=(i<3?o(s):i>3?o(e,t,s):o(e,t))||s);return i>3&&s&&Object.defineProperty(e,t,s),s},DB=ho&&ho.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},s1;Object.defineProperty(ho,"__esModule",{value:!0});ho.CommandResolver=void 0;var FB=Xe(),LB=ol(),nr=ze(),kt=Ze(),ne=Jt(),uP=Jo(),fP=df(),NB=cl(),kB=xf(),MB=Hr(),Vl=yb(),$m=nC(),jB=_l(),$B=Sl(),UB=Bl(),pc=10,Um="exo__Asset",BB=pc+1,dP="08cec529-90eb-4d43-88de-ceecccea12b0",VB=ne.Namespace.EXOCMD.term("SubstitutionToken").value,hP=new Set(["today","tomorrow","todayStart","targetFolder","target","randomUUIDv4","nowTimestamp","nowDate","nowYear","nowMonth","userInputLabel","userInput","targetProperty","labelAsArray","groundingTargetClass","targetClassSelf"]);function qB(n,e){return`__SUBSTITUTE__${n}__${e}__`}a(qB,"buildSubstitutionMarker");function GB(n,e,t){let r=(0,NB.utf8ToBase64)(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"");return`__SUBSTITUTE_P__${n}__${e}__${r}__`}a(GB,"buildParameterisedMarker");var pP="3f28af98-c031-4718-8ba2-44ad0b012c52",WB=ne.Namespace.EXOCMD.term("TokenInvocation").value,mP="29e2c8f8-2d27-4e58-b467-2e85d46f8122",gP="universal-default-template",HB=new Set(["today","tomorrow","todayStart","nowDate","nowYear","nowMonth"]),o1=s1=class{static{a(this,"CommandResolver")}clearUniversalCache(){this._universalCacheReady=!1,this._universalCacheValue=null,(0,$m.clearUniversalDefault)()}constructor(e,t=LB.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 c=r?await this.expandPrototypeChain(r):void 0,l=await this.expandClassHierarchy(t),u=new Map;for(let[p,y]of l){let _=await this.resolveForAsset(e,p,c);for(let S of _){let v=this.getBindingPriority(S.binding)===2?y:0,T=u.get(S.binding.id);(!T||v<T.depth)&&u.set(S.binding.id,{rc:S,depth:v})}}let f=new Set;for(let{rc:p}of u.values())if(p.binding.overrides)for(let y of p.binding.overrides)f.add(y);let d=Array.from(u.entries()).filter(([p])=>!f.has(p)).map(([,p])=>p);d.sort((p,y)=>{let _=this.getBindingPriority(p.rc.binding),S=this.getBindingPriority(y.rc.binding);return _!==S?_-S:p.depth!==y.depth?p.depth-y.depth:(p.rc.binding.order??100)-(y.rc.binding.order??100)});let h=d.map(p=>p.rc);return this.multiCache.set(s,h),h}async expandClassHierarchy(e){let t=new Map;for(let c of e){if(c===Um){t.set(c,new Set);continue}let l=[];try{l=await this.getClassAncestors(c)}catch{l=[]}t.set(c,new Set(l))}let r=a(c=>{for(let l of e)if(l!==c&&t.get(l)?.has(c)&&!t.get(c)?.has(l))return!0;return!1},"isAncestorOfSibling"),i=e.filter(c=>!r(c)),s=new Map,o=a((c,l)=>{let u=s.get(c);(u===void 0||l<u)&&s.set(c,l)},"setMin");for(let c of i){if(o(c,0),this.looksLikeUUID(c))try{let u=await this.resolveLabelByUID(c);u&&o(u,0)}catch{}if(c===Um)continue;let l=[];try{l=await this.getClassAncestorsWithDepth(c)}catch{l=[]}for(let{ref:u,depth:f}of l)o(u,f)}return s.has(Um)||s.set(Um,BB),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 c=typeof r=="string"?await this.expandPrototypeChain(r):r,l=await this.findBindings(t,c,e),u=[];for(let f of l){let d=await this.loadCommand(f.commandRef,{targetClass:f.targetClass});if(!d)continue;let h=f.precondition?{...d,precondition:f.precondition}:d;u.push({command:h,binding:f})}return u.sort((f,d)=>{let h=this.getBindingPriority(f.binding),p=this.getBindingPriority(d.binding);return h!==p?h-p:(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,ne.Namespace.RDF.term("type"),ne.Namespace.EXOCMD.term("Command"))).length===0)return null;let s=await this.getLiteralValue(r,ne.Namespace.EXO.term("Asset_label"))??"Unknown Command",o=await this.getLiteralValue(r,ne.Namespace.EXOCMD.term("Command_labelTemplate")),c=await this.getLiteralValue(r,ne.Namespace.EXOCMD.term("Command_icon")),l=await this.getLiteralValue(r,ne.Namespace.EXOCMD.term("Command_confirmMessage")),u=await this.getLiteralValue(r,ne.Namespace.EXOCMD.term("Command_successMessage")),f=await this.getLiteralValue(r,ne.Namespace.EXOCMD.term("Command_category")),d=await this.getLiteralValue(r,ne.Namespace.EXOCMD.term("Command_openInSameTab")),h=d!==null&&String(d).trim().toLowerCase()==="true",p=await this.loadLinkedPrecondition(r),y=await this.loadLinkedGrounding(r,0,t);return y?{id:e,name:s,labelTemplate:o??void 0,icon:c??void 0,precondition:p??void 0,grounding:y,confirmMessage:l??void 0,successMessage:u??void 0,category:f??void 0,openInSameTab:h||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,ne.Namespace.RDF.term("type"),ne.Namespace.EXOCMD.term("CommandBinding")),o=[];for(let c of s){let l=c.subject,u=await this.loadBindingDefinition(l);u&&this.bindingMatches(u,e,i,r)&&o.push(u)}return o}async findPaletteEnabledCommands(){let e=await this.tripleStore.match(void 0,ne.Namespace.RDF.term("type"),ne.Namespace.EXOCMD.term("Command")),t=[],r=new Set;for(let i of e){let s=i.subject;if((await this.getLiteralValue(s,ne.Namespace.EXOCMD.term("Command_paletteEnabled")))?.toLowerCase()!=="true")continue;let c=await this.getLiteralValue(s,ne.Namespace.EXO.term("Asset_uid"));if(!c){this.logger.warn(`[CommandResolver] paletteEnabled command at ${s.value} has no exo__Asset_uid \u2014 skipped`);continue}let l=await this.loadCommand(c);if(!l){this.logger.warn(`[CommandResolver] paletteEnabled command ${c} could not be loaded (missing grounding?) \u2014 skipped`);continue}let u=await this.getLiteralValue(s,ne.Namespace.EXOCMD.term("Command_paletteId")),f=await this.getLiteralValue(s,ne.Namespace.EXOCMD.term("Command_cliName")),d=u??f??c;if(r.has(d)){this.logger.warn(`[CommandResolver] duplicate paletteId "${d}" \u2014 first registration wins, dropping ${c}`);continue}r.add(d),t.push({command:l,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 c=await this.evaluateSelectSnippet(o,t);r=r.replace(s,c)}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),c=e.slice(r+1,s-1);t.push({full:o,body:c})}r=s}else r++;return t}async evaluateSelectSnippet(e,t){try{let r=e.replace(/\$target/g,`<${t}>`),s=new jB.ExoQLParser().parse(r),c=new $B.ExoQLAlgebraTranslator().translate(s),u=await new UB.ExoQLQueryExecutor(this.tripleStore).executeAll(c);if(u.length===0)return"";let f=u[0],d=f.variables();if(d.length===0)return"";let h=f.get(d[0]);return h?h instanceof kt.Literal||h instanceof nr.IRI?h.value:String(h):""}catch{return""}}async loadBindingDefinition(e){let t=await this.getLiteralValue(e,ne.Namespace.EXO.term("Asset_uid"));if(!t)return null;let r=await this.getLiteralValue(e,ne.Namespace.EXO.term("Asset_label"))??"",i=await this.getLinkedUID(e,ne.Namespace.EXOCMD.term("CommandBinding_command"));if(!i)return null;let s=await this.getLinkedValue(e,ne.Namespace.EXOCMD.term("CommandBinding_targetClass")),o=await this.getLinkedValue(e,ne.Namespace.EXOCMD.term("CommandBinding_targetPrototype")),c=await this.getLinkedValue(e,ne.Namespace.EXOCMD.term("CommandBinding_targetAsset"));if(!s&&!o&&!c)return null;let l=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("CommandBinding_position")),u=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("CommandBinding_order")),f=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("CommandBinding_variant")),d=f!==null?this.coerceVariant(f,t):void 0,h=await this.loadLinkedPreconditionFromProperty(e,ne.Namespace.EXOCMD.term("CommandBinding_precondition")),p=await this.loadLinkedStyle(e,t),y=await this.getLinkedUIDs(e,ne.Namespace.EXOCMD.term("CommandBinding_overrides"));return{id:t,label:r,commandRef:i,targetClass:s??void 0,targetPrototype:o??void 0,targetAsset:c??void 0,position:l??void 0,order:u?parseInt(u,10):void 0,variant:d,precondition:h??void 0,style:p??void 0,overrides:y.length>0?y:void 0}}async loadLinkedStyle(e,t){let r=await this.tripleStore.match(e,ne.Namespace.EXOCMD.term("CommandBinding_style"),void 0);if(r.length>0){let s=r[0].object,o=null;if(s instanceof nr.IRI)o=s;else if(s instanceof kt.Literal){let c=this.normalizeWikilink(s.value);o=await this.findSubjectByUID(c)}if(o){let c=await this.loadStyleAsset(o);if(c)return c}this.logger.warn(this.capWarning(`CommandBinding ${t}: style reference unresolved, falling back to inline variant`))}let i=await this.getLiteralValue(e,ne.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,ne.Namespace.EXO.term("Asset_uid"));if(!t)return null;let r=await this.getLiteralValue(e,ne.Namespace.EXO.term("Asset_label"))??"",i=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("CommandBindingStyle_variant")),s=i!==null?this.coerceVariant(i,t):void 0,o=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("CommandBindingStyle_showIcon")),c=this.coerceBoolean(o),l=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("CommandBindingStyle_labelClass")),u=l!==null?this.coerceLabelClass(l,t):void 0,f=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("CommandBindingStyle_ariaLabel")),d=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("CommandBindingStyle_tooltip")),h=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("CommandBindingStyle_keyboardShortcut")),p=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("CommandBindingStyle_source")),y=p!==null?this.coerceStyleSource(p,t):void 0;return{id:t,label:r,variant:s,showIcon:c,labelClass:u,ariaLabel:f??void 0,tooltip:d??void 0,keyboardShortcut:h??void 0,source:y,inline:!1}}coerceVariant(e,t){if(e==null)return;let r=String(e).trim().toLowerCase();if(r!==""){if(Vl.COMMAND_VARIANT_VALUES.includes(r))return r;this.logger.warn(this.capWarning(`CommandBindingStyle variant "${r}" not in whitelist [${Vl.COMMAND_VARIANT_VALUES.join(",")}]; dropped (asset ${t})`))}}coerceLabelClass(e,t){if(e==null)return;let r=String(e).trim().toLowerCase();if(r!==""){if(Vl.LABEL_CLASS_VALUES.includes(r))return r;this.logger.warn(this.capWarning(`CommandBindingStyle labelClass "${r}" not in whitelist [${Vl.LABEL_CLASS_VALUES.join(",")}]; dropped (asset ${t})`))}}coerceStyleSource(e,t){if(e==null)return;let r=String(e).trim().toLowerCase();if(r!==""){if(Vl.STYLE_SOURCE_VALUES.includes(r))return r;this.logger.warn(this.capWarning(`CommandBindingStyle source "${r}" not in whitelist [${Vl.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 c=this.extractAlias(t);if(c&&r===c)return!0;let l=this.extractAlias(e);return!!(l&&l===i)}extractPathBasename(e){let t=e.match(/\/([^/]+)\.md$/);return t?t[1]:null}extractAlias(e){let t=e.replace(/["'[\]]/g,"").trim(),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,ne.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 nr.IRI)return e;if(e instanceof kt.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,ne.Namespace.EXO.term("Asset_uid")),s=await this.getLiteralValue(e,ne.Namespace.EXO.term("Asset_label"))??"";if(i&&t.has(i))return this.brokenPreconditionNode(i,s);if(r>=pc)return this.brokenPreconditionNode(i??"",s);let o=await this.tripleStore.match(e,ne.Namespace.EXOCMD.term("AllPrecondition_preconditions"),void 0),c=await this.tripleStore.match(e,ne.Namespace.EXOCMD.term("AnyPrecondition_preconditions"),void 0),l=await this.tripleStore.match(e,ne.Namespace.EXOCMD.term("NotPrecondition_precondition"),void 0);if(o.length>0||c.length>0||l.length>0){let h=new Set(t);if(i&&h.add(i),o.length>0||c.length>0){let y=o.length>0?"all":"any",_=o.length>0?o:c,S=[];for(let v of _)S.push(await this.loadChildPrecondition(v.object,h,r+1));return{id:i??"",label:s,composite:{op:y,children:S}}}let p=await this.loadChildPrecondition(l[0].object,h,r+1);return{id:i??"",label:s,not:p}}let u=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Precondition_sparqlAsk")),f=await this.getLiteralValue(e,ne.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 c=e instanceof kt.Literal?this.normalizeWikilink(e.value):"";return this.brokenPreconditionNode(c,"")}let s=await this.loadPreconditionSubject(i,t,r);if(s)return s;let o=await this.getLiteralValue(i,ne.Namespace.EXO.term("Asset_uid"));return this.brokenPreconditionNode(o??"","")}async loadPreconditionQueryRef(e){let t=await this.tripleStore.match(e,ne.Namespace.EXOCMD.term("Precondition_query"),void 0);if(t.length===0)return;let r=t[0].object;if(r instanceof nr.IRI)return await this.getLiteralValue(r,ne.Namespace.EXO.term("Asset_uid"))??void 0;if(r instanceof kt.Literal)return this.normalizeWikilink(r.value)}brokenPreconditionNode(e,t){return{id:e,label:t,broken:!0}}async loadLinkedGrounding(e,t,r){if(t>=pc)return null;let i=await this.tripleStore.match(e,ne.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 c=await this.resolveGroundingRef(o.object);if(!c)continue;let l=await this.getObsidianName(c,ne.Namespace.EXOCMD.term("Grounding_targetPrototype"));if(l&&this.matchesReference(l,r.targetClass))return this.loadGroundingDefinition(c,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 nr.IRI)return e;if(e instanceof kt.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>=pc)return null;let r=await this.getLiteralValue(e,ne.Namespace.EXO.term("Asset_uid"));if(!r)return null;let i=await this.getLiteralValue(e,ne.Namespace.EXO.term("Asset_label"))??"",s=await this.resolveGroundingTypeReference(e);if(!s)return null;let o=await this.getObsidianName(e,ne.Namespace.EXOCMD.term("Grounding_targetProperty"));if(o&&this.looksLikeUUID(o)){let se=await this.resolveLabelByUID(o);if(!se)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=se}if(s===uP.GroundingType.SERVICE_CALL){let se=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_serviceId"));se&&(o=se)}let c=await this.getObsidianName(e,ne.Namespace.EXOCMD.term("Grounding_targetValueRef")),l=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_targetValueLiteral")),u=await this.getObsidianName(e,ne.Namespace.EXOCMD.term("Grounding_targetValueSubstitution")),f=null;if(u&&this.looksLikeUUID(u)){let se=await this.resolveLabelByUID(u);if(!se)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=se}else u&&(f=u);let d=await this.getObsidianName(e,ne.Namespace.EXOCMD.term("Grounding_targetValueQuery")),h=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_serviceCallPayload")),p=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_appendExpression")),y=await this.getObsidianWikilinkValue(e,ne.Namespace.EXOCMD.term("Grounding_isDefinedBy")),_=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_sparqlUpdate")),S=await this.getObsidianName(e,ne.Namespace.EXOCMD.term("Grounding_targetClass"));if(S&&!this.looksLikeUUID(S)){let se=await this.findUidByLabel(S);se&&(S=se)}let v=await this.getObsidianName(e,ne.Namespace.EXOCMD.term("Grounding_targetPrototype")),T=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_targetFolder")),P=await this.getObsidianName(e,ne.Namespace.EXOCMD.term("Grounding_linkBackProperty")),O=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_inputSchema")),C=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_incrementBy")),F=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_shiftDelta")),X;if(C!=null&&C!==""){let se=Number.parseInt(String(C),10);Number.isFinite(se)&&(X=se)}let U=await this.resolvePropertyDefaults(e,r),j=await this.resolveInheritanceRules(e,r),K=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_propertyDefaults"));K!==null&&K!==""&&!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 N;s===uP.GroundingType.COMPOSITE&&(N=await this.loadCompositeSteps(e,t+1));let le;if(O)try{let se=JSON.parse(O);se?.properties&&(le=Object.entries(se.properties).map(([ge,Le])=>{let z=Le.type,ae=z==="string"?"text":z,_e=Le.defaultValue!==void 0?Le.defaultValue:Le.default,Ie={name:ge,type:ae,label:Le.title??ge,required:Array.isArray(se.required)&&se.required.includes(ge)};return _e!=null&&(Ie.defaultValue=String(_e)),typeof Le.targetClassUid=="string"&&(Ie.targetClassUid=Le.targetClassUid),Ie}))}catch{}let Se=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_prefillLabelWithDate")),Z=Se!==null&&String(Se).trim().toLowerCase()==="true",me=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_labelTemplate")),Y=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_direction")),ve;if(Y!=null){let se=String(Y).trim().toLowerCase();se==="forward"||se==="rollback"?ve=se:se!==""&&this.logger.warn(`Grounding ${r}: exocmd__Grounding_direction value '${Y}' is not 'forward' or 'rollback' \u2014 treating as undefined (will default to 'forward' at dispatch).`)}let ie=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_bodyTemplate")),te=await this.getObsidianName(e,ne.Namespace.EXOCMD.term("Grounding_templateRef")),pe=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_cloneTargetBody")),Ee=pe!==null&&String(pe).trim().toLowerCase()==="true",re=await this.getLiteralValue(e,ne.Namespace.EXOCMD.term("Grounding_targetsCreatedInstance")),ye=re!==null&&String(re).trim().toLowerCase()==="true",Fe={id:r,label:i,type:s,targetProperty:o??void 0,targetValueRef:c??void 0,targetValueLiteral:l??void 0,targetValueSubstitution:f??void 0,targetValueQuery:d??void 0,serviceCallPayload:h??void 0,appendExpression:p??void 0,sparqlUpdate:_??void 0,steps:N,targetClass:S??void 0,targetPrototype:v??void 0,targetFolder:T??void 0,linkBackProperty:P??void 0,incrementBy:X,shiftDelta:F??void 0,propertyDefault:U.length>0?U:void 0,inheritanceRule:j.length>0?j:void 0,isDefinedBy:y??void 0,prefillLabelWithDate:Z||void 0,labelTemplate:me??void 0,direction:ve,bodyTemplate:ie??void 0,templateRef:te??void 0,cloneTargetBody:Ee||void 0,targetsCreatedInstance:ye||void 0};return le&&(Fe.inputSchema=le),Fe}async loadCompositeSteps(e,t){if(t>=pc)return[];let r=await this.tripleStore.match(e,ne.Namespace.EXOCMD.term("Grounding_steps"),void 0),i=[];for(let s of r){let o=null;if(s.object instanceof nr.IRI)o=s.object;else if(s.object instanceof kt.Literal){let l=this.normalizeWikilink(s.object.value);o=await this.findSubjectByUID(l)}if(!o)continue;let c=await this.loadGroundingDefinition(o,t);c&&i.push(c)}return i}async resolvePropertyDefaults(e,t){let r=await this.resolvePropertyDefaultsForSubject(e,t,ne.Namespace.EXOCMD.term("Grounding_propertyDefault")),i=await this.getUniversalCache();return i&&i.propertyDefaults.length>0?(0,$m.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 c=await this.resolveRefTripleObject(o.object);if(!c)continue;let l=await this.getObsidianName(c,ne.Namespace.EXOCMD.term("PropertyDefault_property"));if(!l){this.logger.warn(`Grounding ${t}: PropertyDefault asset missing exocmd__PropertyDefault_property \u2014 entry skipped.`);continue}let u=this.looksLikeUUID(l)?await this.resolveLabelByUID(l):l;if(!u){this.logger.warn(`Grounding ${t}: PropertyDefault property UID '${l}' is not resolvable to exo__Asset_label \u2014 entry skipped.`);continue}let f=await this.getObsidianName(c,ne.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,$m.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,gP,ne.Namespace.EXOCMD.term("Template_propertyDefault")),i=await this.resolveInheritanceRulesForSubject(t,gP,ne.Namespace.EXOCMD.term("Template_inheritanceRule"));return this._universalCacheValue={propertyDefaults:r,inheritanceRules:i},this._universalCacheValue}async findUniversalSingleton(){let e=ne.Namespace.EXOCMD.term("UniversalDefaultTemplate").value,t=await this.tripleStore.match(void 0,ne.Namespace.EXO.term("Instance_class"),void 0),r=[];for(let i of t){let s=!1;if(i.object instanceof nr.IRI)s=i.object.value===e||i.object.value.includes(mP);else if(i.object instanceof kt.Literal){let o=this.unwrapWikilink(i.object.value);s=o==="exocmd__UniversalDefaultTemplate"||o===mP}s&&i.subject instanceof nr.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,ne.Namespace.EXOCMD.term("Grounding_inheritanceRule")),i=await this.getUniversalCache();return i&&i.inheritanceRules.length>0?(0,$m.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 c of i){let l=await this.resolveRefTripleObject(c.object);if(!l)continue;let u=await this.resolveLabelRef(l,ne.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(l,ne.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(l,ne.Namespace.EXOCMD.term("InheritanceRule_targetClassCondition"),void 0),h,p;if(d.length>0){let O=await this.getObsidianName(l,ne.Namespace.EXOCMD.term("InheritanceRule_targetClassCondition"));if(!O||!O.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(O)?(p=O,h=await this.resolveLabelByUID(O)??void 0):h=O}let y=await this.tripleStore.match(l,ne.Namespace.EXOCMD.term("InheritanceRule_targetClassExclusion"),void 0),_=[],S=[],v=!1;for(let O of y){let C=null;if(O.object instanceof nr.IRI?C=this.iriToObsidianName(O.object.value)??O.object.value:O.object instanceof kt.Literal&&(C=this.unwrapWikilink(O.object.value)),!C){v=!0;continue}if(this.looksLikeUUID(C)){S.push(C);let F=await this.resolveLabelByUID(C);F&&_.push(F)}else _.push(C)}if(v){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 T=await this.getLiteralValue(l,ne.Namespace.EXOCMD.term("InheritanceRule_priority")),P=50;if(T!==null&&T!==""){let O=Number.parseInt(String(T),10);Number.isFinite(O)&&(P=O)}s.push({sourcePropertyName:u,targetPropertyName:f,targetClassCondition:h,targetClassConditionUid:p,targetClassExclusion:_,targetClassExclusionUids:S,priority:P})}return s}async resolveRefTripleObject(e){if(e instanceof nr.IRI)return e;if(e instanceof kt.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,ne.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 c=o.trim();return hP.has(c)?s!==void 0?GB(c,t,s):HB.has(c)?s1.parseTimeResolve(c):qB(c,t):(this.logger.warn(`Grounding ${r}: PropertyDefault '${i}' SubstitutionToken '${t}' declares unknown resolver-id '${c}' \u2014 falling back to wikilink form. Known ids: ${Array.from(hP).join(", ")}.`),`"[[${t}]]"`)}static parseTimeResolve(e){let t=new Date,r=a(i=>i<10?`0${i}`:String(i),"pad");switch(e){case"today":return`${t.getFullYear()}-${r(t.getMonth()+1)}-${r(t.getDate())}`;case"tomorrow":{let i=new Date(t.getFullYear(),t.getMonth(),t.getDate()+1);return`${i.getFullYear()}-${r(i.getMonth()+1)}-${r(i.getDate())}`}case"todayStart":return MB.DateFormatter.getTodayStartTimestamp();case"nowDate":return`${t.getFullYear()}-${r(t.getMonth()+1)}-${r(t.getDate())}`;case"nowYear":return String(t.getFullYear());case"nowMonth":return r(t.getMonth()+1);default:return""}}async resolveTokenInvocation(e,t,r,i){let s=await this.getObsidianName(e,ne.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,ne.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 c=await this.findSubjectByUID(s);return c?this.dispatchSubstitutionToken(c,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,ne.Namespace.EXO.term("Instance_class"),void 0);for(let r of t)if(r.object instanceof nr.IRI){if(r.object.value===WB||r.object.value.includes(pP))return!0}else if(r.object instanceof kt.Literal){let i=this.unwrapWikilink(r.object.value);if(i==="exocmd__TokenInvocation"||i===pP)return!0}return!1}async assetIsSubstitutionToken(e){let t=await this.tripleStore.match(e,ne.Namespace.EXO.term("Instance_class"),void 0);for(let r of t)if(r.object instanceof nr.IRI){if(r.object.value===VB||r.object.value.includes(dP))return!0}else if(r.object instanceof kt.Literal){let i=this.unwrapWikilink(r.object.value);if(i==="exocmd__SubstitutionToken"||i===dP)return!0}return!1}async resolveGroundingTypeReference(e){let t=await this.tripleStore.match(e,ne.Namespace.EXOCMD.term("Grounding_type"),void 0);if(t.length===0)return null;let r=t[0].object;if(r instanceof nr.IRI)return(0,fP.resolveGroundingTypeFromIRI)(r.value);if(r instanceof kt.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,fP.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<pc;s++){let o=this.extractUuidFromRef(i);if(!o)break;let c=null;try{let u=await this.findSubjectByUID(o);if(!u)break;c=await this.getLinkedValue(u,ne.Namespace.EXO.term("Asset_prototype"))}catch(u){this.logger.debug(this.capWarning(`[expandPrototypeChain] store lookup failed at hop ${s} for '${i}': ${String(u)}`));break}if(!c)break;let l=this.normalizeWikilink(c).toLowerCase();if(r.has(l))break;r.add(l),t.push(c),i=c}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,ne.Namespace.EXO.term("Asset_uid"),void 0);for(let r of t)if(r.object instanceof kt.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 kt.Literal||i instanceof nr.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,ne.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]),c=await this.getLiteralValue(s,ne.Namespace.EXO.term("Asset_uid"));c&&o.add(c);let l=await this.getLiteralValue(s,ne.Namespace.EXO.term("Asset_label"));l&&o.add(l);let u=a((h,p)=>{if(o.has(h))return;let y=r.get(h);(y===void 0||p<y)&&r.set(h,p)},"setMin"),f=[{fileIRI:s,depth:0}];for(;f.length>0;){let h=f.shift();if(!h)break;let{fileIRI:p,depth:y}=h;if(y>=pc||i.has(p.value))continue;i.add(p.value);let _=await this.tripleStore.match(p,ne.Namespace.EXO.term("Class_superClass"),void 0);for(let S of _){let v=S.object;if(!(v instanceof nr.IRI))continue;let T=y+1,P=v.value.startsWith("obsidian://vault/"),O=this.iriToObsidianName(v.value);O&&u(O,T);let C=null;if(P?C=v:O&&(C=await this.resolveClassFileIRI(O)),!C)continue;let F=await this.getLiteralValue(C,ne.Namespace.EXO.term("Asset_uid"));F&&u(F,T),i.has(C.value)||f.push({fileIRI:C,depth:T})}}let d=Array.from(r.entries()).map(([h,p])=>({ref:h,depth:p}));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,ne.Namespace.EXO.term("Asset_label"),void 0);for(let r of t)if(r.object instanceof kt.Literal&&r.object.value===e&&r.subject instanceof nr.IRI){let i=await this.tripleStore.match(r.subject,ne.Namespace.EXO.term("Asset_uid"),void 0);if(i.length>0&&i[0].object instanceof kt.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 nr.IRI){let s=await this.tripleStore.match(i,ne.Namespace.EXO.term("Asset_uid"),void 0);return s.length>0&&s[0].object instanceof kt.Literal?s[0].object.value:i.value.split("/").pop()?.replace(".md","")??null}return i instanceof kt.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 nr.IRI){let c=await this.tripleStore.match(o,ne.Namespace.EXO.term("Asset_uid"),void 0);if(c.length>0&&c[0].object instanceof kt.Literal)i.push(c[0].object.value);else{let l=o.value.split("/").pop()?.replace(".md","");l&&i.push(l)}}else if(o instanceof kt.Literal){let c=this.normalizeWikilink(o.value);c&&i.push(c)}}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 kt.Literal?this.normalizeWikilink(i.value):i instanceof nr.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 kt.Literal?this.unwrapWikilink(i.value):i instanceof nr.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 kt.Literal)return this.resolveWikilinkAlias(i.value);if(i instanceof nr.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,ne.Namespace.EXO.term("Asset_label"));return s?e.replace(`[[${r}]]`,`[[${r}|${s}]]`):e}iriToObsidianName(e){return(0,kB.iriToObsidianName)(e)}normalizeWikilink(e){let t=e.replace(/["'[\]]/g,"").trim(),r=t.indexOf("|");return r>=0?t.substring(0,r):t}};ho.CommandResolver=o1;ho.CommandResolver=o1=s1=xB([(0,FB.injectable)(),DB("design:paramtypes",[Object,Object])],o1)});var c1=E(a1=>{"use strict";Object.defineProperty(a1,"__esModule",{value:!0});a1.validateExoQLAllowlist=zB;var Bm=Uf();function zB(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 Bm.ExoQLForbiddenKeywordError("LOAD");throw new Bm.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 Bm.ExoQLForbiddenKeywordError("FROM")}if(Array.isArray(e.where))for(let t of e.where)Vm(t);if(Array.isArray(e.template))for(let t of e.template)Vm(t)}}a(zB,"validateExoQLAllowlist");function Vm(n){if(!n||typeof n!="object")return;if(n.type==="service")throw new Bm.ExoQLForbiddenKeywordError("SERVICE");if(Array.isArray(n.patterns))for(let t of n.patterns)Vm(t);let e=n.where;if(Array.isArray(e))for(let t of e)Vm(t)}a(Vm,"walkPatternForBannedKeywords")});var l1=E(qm=>{"use strict";Object.defineProperty(qm,"__esModule",{value:!0});qm.DEFAULT_EVAL_CONFIG=void 0;qm.DEFAULT_EVAL_CONFIG=Object.freeze({enabled:!0,maxNestedEvalCount:100,maxAggregateEvalMillis:1e4})});var Gm=E(u1=>{"use strict";Object.defineProperty(u1,"__esModule",{value:!0});u1.evaluateWithExoEval=e8;var KB=_l(),YB=Sl(),QB=Bl(),XB=c1(),JB=l1(),ZB=Uf();async function e8(n,e={}){if(typeof n!="string")throw new TypeError("evaluateWithExoEval: sparql must be a string");let r=new KB.ExoQLParser().parse(n);if((0,XB.validateExoQLAllowlist)(r),!{...JB.DEFAULT_EVAL_CONFIG,...e.config??{}}.enabled)throw new ZB.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 c=new YB.ExoQLAlgebraTranslator().translate(r),l=new QB.ExoQLQueryExecutor(e.store);return l.isAskQuery(c)?{kind:"ask",result:await l.executeAsk(c)}:l.isConstructQuery(c)?{kind:"construct",triples:await l.executeConstruct(c)}:{kind:"select",rows:await l.executeAll(c)}}a(e8,"evaluateWithExoEval")});var Vf=E(Wm=>{"use strict";Object.defineProperty(Wm,"__esModule",{value:!0});Wm.liveClock=t8;Wm.frozenClock=r8;function t8(){return{now:a(()=>new Date,"now")}}a(t8,"liveClock");function r8(n){let e=new Date(n);return{now:a(()=>new Date(e.getTime()),"now")}}a(r8,"frozenClock")});var bP=E(po=>{"use strict";var n8=po&&po.__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 c=n.length-1;c>=0;c--)(o=n[c])&&(s=(i<3?o(s):i>3?o(e,t,s):o(e,t))||s);return i>3&&s&&Object.defineProperty(e,t,s),s},i8=po&&po.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},Gf;Object.defineProperty(po,"__esModule",{value:!0});po.PreconditionEvaluator=void 0;var s8=Xe(),o8=_l(),a8=Sl(),_P=Bl(),c8=Gm(),qf=Hr(),l8=Vf(),Wf=Gf=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,l8.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 c=await Promise.all(o.map(l=>this.evaluateNode(l,t,r,i)));return s==="all"?c.includes("no")?"no":c.includes("unknown")?"unknown":"yes":c.includes("yes")?"yes":c.includes("unknown")?"unknown":"no"}if(e.not){let s=await this.evaluateNode(e.not,t,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,c8.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,Gf.SENTINEL_IRI),i=new o8.ExoQLParser().parse(t),o=new a8.ExoQLAlgebraTranslator().translate(i);return new _P.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=Gf.TEMPORAL_TOKEN.test(e),i=r?qf.DateFormatter.toDateString(this.clock.now()):null,s=this.askCache.get(e);if(s===void 0||r&&s.day!==i){let l=this.compileAsk(e);if(!l)return!1;s={day:i,compiled:l},this.askCache.set(e,s)}let o=JSON.parse(JSON.stringify(s.compiled).replaceAll(Gf.SENTINEL_IRI,t));return await new _P.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(),c=r.getDate(),l=r.getDay(),u=qf.DateFormatter.toDateString(r),f=qf.DateFormatter.toDateString(new Date(s,o,c-1)),d=(l+6)%7,h=qf.DateFormatter.toDateString(new Date(s,o,c-d)),p=qf.DateFormatter.toDateString(new Date(s,o,c-d-7)),y=`${s}-${String(o+1).padStart(2,"0")}-01`,_=o===0?11:o-1,v=`${o===0?s-1:s}-${String(_+1).padStart(2,"0")}-01`,T=`${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,`"${h}"^^xsd:date`).replace(/\$lastWeekStart\b/g,`"${p}"^^xsd:date`).replace(/\$thisMonthStart\b/g,`"${y}"^^xsd:date`).replace(/\$lastMonthStart\b/g,`"${v}"^^xsd:date`).replace(/\$thisYearStart\b/g,`"${T}"^^xsd:date`).replace(/\$today\b/g,`"${u}"^^xsd:date`)}};po.PreconditionEvaluator=Wf;Wf.SENTINEL_IRI="urn:exocortex:cache-sentinel:target";Wf.TEMPORAL_TOKEN=/\$(?:now|today|yesterday|thisWeekStart|lastWeekStart|thisMonthStart|lastMonthStart|thisYearStart)\b/;po.PreconditionEvaluator=Wf=Gf=n8([(0,s8.injectable)(),i8("design:paramtypes",[Object,Object,Object])],Wf)});var SP=E(mo=>{"use strict";Object.defineProperty(mo,"__esModule",{value:!0});mo.hasUidFilename=mo.hasNonUidFilename=void 0;mo.registerDefaultHostFunctions=d8;var u8=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");mo.hasNonUidFilename=u8;var f8=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");mo.hasUidFilename=f8;function d8(n){n.registerHostFunction("hasNonUidFilename",mo.hasNonUidFilename),n.registerHostFunction("hasUidFilename",mo.hasUidFilename)}a(d8,"registerDefaultHostFunctions")});var zm=E(Hm=>{"use strict";Object.defineProperty(Hm,"__esModule",{value:!0});Hm.liveUidGenerator=h8;Hm.seededUidGenerator=m8;var f1=Ii();function h8(){return{next:a(()=>(0,f1.v4)(),"next")}}a(h8,"liveUidGenerator");var p8="6ba7b810-9dad-11d1-80b4-00c04fd430c8";function m8(n){let e=0,t=(0,f1.v5)(n,p8);return{next:a(()=>{let r=`${n}#${e}`;return e+=1,(0,f1.v5)(r,t)},"next")}}a(m8,"seededUidGenerator")});var Qm=E(fa=>{"use strict";Object.defineProperty(fa,"__esModule",{value:!0});fa.registerResolver=fr;fa.getResolver=y8;fa.isResolverModifierAware=_8;fa.getRegisteredResolverIds=b8;fa.clearResolvers=S8;fa.installDefaultResolvers=P8;var g8=Hr(),Ym=new Map,d1=new Set;function fr(n,e,t=!1){Ym.set(n,e),t&&d1.add(n)}a(fr,"registerResolver");function y8(n){return Ym.get(n)}a(y8,"getResolver");function _8(n){return d1.has(n)}a(_8,"isResolverModifierAware");function b8(){return Array.from(Ym.keys())}a(b8,"getRegisteredResolverIds");function S8(){Ym.clear(),d1.clear()}a(S8,"clearResolvers");function Xr(n){return n<10?`0${n}`:String(n)}a(Xr,"pad2");var w8=["January","February","March","April","May","June","July","August","September","October","November","December"],v8=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],E8=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],T8=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];function I8(n){let e=["th","st","nd","rd"],t=n%100;return`${n}${e[(t-20)%10]||e[t]||e[0]}`}a(I8,"ordinalDay");var A8=/YYYY|YY|MMMM|MMM|MM|M|Do|DD|D|dddd|ddd|HH|H|hh|h|mm|m|ss|s|A|a/g;function R8(n,e){let t=(n.getHours()+11)%12+1;return e.replace(A8,r=>{switch(r){case"YYYY":return String(n.getFullYear());case"YY":return Xr(n.getFullYear()%100);case"MMMM":return w8[n.getMonth()];case"MMM":return v8[n.getMonth()];case"MM":return Xr(n.getMonth()+1);case"M":return String(n.getMonth()+1);case"Do":return I8(n.getDate());case"DD":return Xr(n.getDate());case"D":return String(n.getDate());case"dddd":return E8[n.getDay()];case"ddd":return T8[n.getDay()];case"HH":return Xr(n.getHours());case"H":return String(n.getHours());case"hh":return Xr(t);case"h":return String(t);case"mm":return Xr(n.getMinutes());case"m":return String(n.getMinutes());case"ss":return Xr(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(R8,"formatDate");function wP(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(wP,"addMonthsClamped");function O8(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=wP(s,r,"M");break;case"y":s=wP(s,r,"y");break}return isNaN(s.getTime())?n:s}a(O8,"applyDateOffset");function C8(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(C8,"parseDateModifier");function Km(n,e){return(t,r)=>{let{offset:i,format:s}=C8(r),o=new Date;return n!==0&&o.setDate(o.getDate()+n),o=O8(o,i),R8(o,s??e)}}a(Km,"makeDateResolver");function P8(){fr("today",()=>{let n=new Date;return`${n.getFullYear()}-${Xr(n.getMonth()+1)}-${Xr(n.getDate())}`}),fr("todayStart",()=>g8.DateFormatter.getTodayStartTimestamp()),fr("date",Km(0,"YYYY-MM-DD"),!0),fr("now",Km(0,"YYYY-MM-DDTHH:mm:ss"),!0),fr("tomorrow",Km(1,"YYYY-MM-DD"),!0),fr("yesterday",Km(-1,"YYYY-MM-DD"),!0),fr("target",n=>n.targetIRI?`"[[${n.targetIRI}]]"`:""),fr("targetFolder",n=>{if(!n.targetFilePath)return"";let e=n.targetFilePath.replace(/^\/+/,""),t=e.lastIndexOf("/");return t>=0?e.slice(0,t):""}),fr("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.")}),fr("nowTimestamp",()=>{let n=new Date;return`${n.getFullYear()}-${Xr(n.getMonth()+1)}-${Xr(n.getDate())}T${Xr(n.getHours())}:${Xr(n.getMinutes())}:${Xr(n.getSeconds())}`}),fr("nowDate",()=>{let n=new Date;return`${n.getFullYear()}-${Xr(n.getMonth()+1)}-${Xr(n.getDate())}`}),fr("nowYear",()=>String(new Date().getFullYear())),fr("nowMonth",()=>Xr(new Date().getMonth()+1)),fr("userInputLabel",n=>{let e=n.userInput?.label;return typeof e=="string"?e:""}),fr("userInput",(n,e)=>{if(!e)return null;let t=n.userInput?.[e];return typeof t=="string"?t:t==null?null:String(t)}),fr("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)}),fr("labelAsArray",n=>{let e=n.userInput?.label;return typeof e=="string"&&e.length>0?[e]:[]}),fr("groundingTargetClass",n=>n.groundingTargetClassUid?`"[[${n.groundingTargetClassUid}]]"`:null),fr("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(P8,"installDefaultResolvers")});var p1=E(Xm=>{"use strict";Object.defineProperty(Xm,"__esModule",{value:!0});Xm.resolveTemplateBody=D8;Xm.stripTemplateFrontmatter=F8;var h1=Qm();(0,h1.installDefaultResolvers)();var x8=/\$([A-Za-z][A-Za-z0-9_]*)((?:[+-]\d+[dwMy])?(?::[A-Za-z0-9:./-]+)?)/g;function D8(n,e={}){return n.replace(x8,(t,r,i)=>{let s=(0,h1.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,h1.isResolverModifierAware)(r)?o:o+i})}a(D8,"resolveTemplateBody");function F8(n){let e=n.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);return e?n.slice(e[0].length):n}a(F8,"stripTemplateFrontmatter")});var Hf=E(ql=>{"use strict";Object.defineProperty(ql,"__esModule",{value:!0});ql.registerOrderSpecLoader=L8;ql.clearOrderSpecLoader=N8;ql.loadDefaultSpec=k8;ql.orderProperties=M8;var Jm=null,da,Zm=!1;function L8(n){Jm=n,da=void 0,Zm=!1}a(L8,"registerOrderSpecLoader");function N8(){Jm=null,da=void 0,Zm=!1}a(N8,"clearOrderSpecLoader");function k8(){if(da!==void 0)return da;if(!Jm)return da=null,null;try{da=Jm()}catch(n){Zm||(console.warn("[OrderSpecResolver] loader threw, falling back to insertion order:",n),Zm=!0),da=null}return da}a(k8,"loadDefaultSpec");function M8(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)),c=t.filter(u=>!r.has(u)&&!i.has(u));e.middleStrategy==="alphabetical"&&c.sort((u,f)=>u.localeCompare(f));let l={};for(let u of s)l[u]=n[u];for(let u of c)l[u]=n[u];for(let u of o)l[u]=n[u];return l}a(M8,"orderProperties")});var eg=E(mc=>{"use strict";Object.defineProperty(mc,"__esModule",{value:!0});mc.STRING_SCALAR_PROPERTIES=void 0;mc.needsYamlQuoting=vP;mc.quoteYamlString=EP;mc.serializeYamlScalar=z8;var j8=/^[-!&*?|>%@`"'#,[\]{}]/,$8=/[\u0000-\u001f\u007f]/,U8=/^(?:true|True|TRUE|false|False|FALSE)$/,B8=/^(?:null|Null|NULL|~)$/,V8=/^[-+]?(?:0b[01_]+|0o[0-7_]+|0x[0-9a-fA-F_]+|[0-9][0-9_]*)$/,q8=/^(?:[-+]?[0-9][0-9_]*(?:\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\.(?:inf|Inf|INF)|\.(?:nan|NaN|NAN))$/,G8=/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;mc.STRING_SCALAR_PROPERTIES=new Set(["exo__Asset_label","aliases"]);function W8(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(W8,"isCompleteDoubleQuotedScalar");function H8(n){return U8.test(n)||B8.test(n)||V8.test(n)||q8.test(n)||G8.test(n)}a(H8,"looksLikeNonStringScalar");function vP(n,e=!1){return n===""?!0:W8(n)?!1:!!(n!==n.trim()||/:(\s|$)/.test(n)||/\s#/.test(n)||j8.test(n)||$8.test(n)||e&&H8(n))}a(vP,"needsYamlQuoting");function EP(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
71
  `?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(EP,"quoteYamlString");function z8(n,e=!1){return typeof n!="string"?String(n):vP(n,e)?EP(n):n}a(z8,"serializeYamlScalar")});var Is=E(tg=>{"use strict";Object.defineProperty(tg,"__esModule",{value:!0});tg.FrontmatterService=void 0;var TP=Hf(),m1=eg(),zf=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,c=a(()=>{s!==null&&o!==null&&(r[s]=o),s=null,o=null},"flushArray");for(let l of i){let u=/^ {2}- (.*)$/.exec(l);if(u){s!==null&&o!==null&&o.push(u[1].trim());continue}c();let f=/^([^:\s][^:]*):\s*(.*)$/.exec(l);if(!f)continue;let d=f[1].trim(),h=f[2].trim();h===""?(s=d,o=[]):r[d]=h}return c(),r}updateProperty(e,t,r){t=n.normalizeIRI(t),typeof r=="string"&&(r=n.normalizeIRIValue(r));let i=this.parse(e),s=this.serializeValue(t,r);if(!i.exists)return`---
72
72
  ${s}
73
73
  ---
@@ -598,7 +598,7 @@ Duplicate bindings (${n.duplicates.length}) \u2014 uid claimed by >1 test (warni
598
598
  Skipped floor check for ${n.unknownPriority} requirement(s) with unparseable priority (fail-open).`),n.clean?e==="hard"&&!n.rampReady?console.error(`
599
599
  FAIL (hard gate): ramp not ready \u2014 ${n.p0Orphans} P0 requirement(s) unbound`+(n.p0Total===0?" (no P0 requirements found)":"")+"."):console.log(`
600
600
  OK: no hard findings (dangling tags + binding-class floor are clean).`):console.error(`
601
- FAIL: ${n.dangling.length} dangling + ${n.floorViolations.length} floor violation(s) + ${n.activeViolations.length} active-requirement invariant violation(s) + ${n.danglingEvidence.length} dangling evidence link(s).`)}a(_oe,"renderText");function boe(n,e,t){return!n.clean||t&&n.orphans.length>0||e==="hard"&&!n.rampReady}a(boe,"isHardFail");function I9(){return new Ue("audit").description("Audit requirement\u2194test traceability: orphans, dangling @req tags, duplicate bindings, binding-class floor, coverage, P0 ramp-readiness").requiredOption("--reqs <path>","Directory tree containing req__Requirement assets (a vault or a reqs assetspace clone)").option("--tests <path>","Test-corpus root scanned for @req:<uid> tags",".").option("--output <type>","Response format: text|json","text").option("--strict","Also exit 1 on orphan requirements",!1).option("--gate <mode>","Gate mode: soft (warn only on hard findings) | hard (also block when the P0 checklist is not ramp-ready)","soft").action(async n=>{let e=n.output??"text";Ae.setFormat(e);let t=n.gate==="hard"?"hard":"soft";try{let r=(0,$a.resolve)(n.reqs);if(!(0,Ua.existsSync)(r)||!(0,Ua.statSync)(r).isDirectory())throw new rt(r);let i=(0,$a.resolve)(n.tests??".");if(!(0,Ua.existsSync)(i)||!(0,Ua.statSync)(i).isDirectory())throw new rt(i);let[s,o]=await Promise.all([hoe(r),moe(i)]),c=goe(s,o);e==="json"?console.log(JSON.stringify({...c,gate:t},null,2)):_oe(c,t),boe(c,t,n.strict===!0)&&(process.exitCode=1)}catch(r){Ae.handle(r)}})}a(I9,"requirementsAuditCommand");function A9(){let n=new Ue("requirements").description("Requirements-management tooling (RFC 0003): traceability checker");return n.addCommand(I9()),n}a(A9,"requirementsCommand");function O_(n){let e=new Ue;return e.name("exocortex").description("CLI tool for Exocortex knowledge management system - SPARQL queries, task management, and more").version(n??"16.183.1"),e.addCommand(vj()),e.addCommand(Pj()),e.addCommand(S4()),e.addCommand(T4()),e.addCommand(q4()),e.addCommand(I4()),e.addCommand(x4()),e.addCommand(Q4()),e.addCommand(tj()),e.addCommand(lj()),e.addCommand(bj()),e.addCommand(Hj()),e.addCommand(Yj()),e.addCommand(f9()),e.addCommand(h9()),e.addCommand(g9()),e.addCommand(y9()),e.addCommand(w9()),e.addCommand(r9()),e.addCommand(c9()),e.addCommand(A9()),e}a(O_,"createProgram");O_().parse();0&&(module.exports={createProgram});
601
+ FAIL: ${n.dangling.length} dangling + ${n.floorViolations.length} floor violation(s) + ${n.activeViolations.length} active-requirement invariant violation(s) + ${n.danglingEvidence.length} dangling evidence link(s).`)}a(_oe,"renderText");function boe(n,e,t){return!n.clean||t&&n.orphans.length>0||e==="hard"&&!n.rampReady}a(boe,"isHardFail");function I9(){return new Ue("audit").description("Audit requirement\u2194test traceability: orphans, dangling @req tags, duplicate bindings, binding-class floor, coverage, P0 ramp-readiness").requiredOption("--reqs <path>","Directory tree containing req__Requirement assets (a vault or a reqs assetspace clone)").option("--tests <path>","Test-corpus root scanned for @req:<uid> tags",".").option("--output <type>","Response format: text|json","text").option("--strict","Also exit 1 on orphan requirements",!1).option("--gate <mode>","Gate mode: soft (warn only on hard findings) | hard (also block when the P0 checklist is not ramp-ready)","soft").action(async n=>{let e=n.output??"text";Ae.setFormat(e);let t=n.gate==="hard"?"hard":"soft";try{let r=(0,$a.resolve)(n.reqs);if(!(0,Ua.existsSync)(r)||!(0,Ua.statSync)(r).isDirectory())throw new rt(r);let i=(0,$a.resolve)(n.tests??".");if(!(0,Ua.existsSync)(i)||!(0,Ua.statSync)(i).isDirectory())throw new rt(i);let[s,o]=await Promise.all([hoe(r),moe(i)]),c=goe(s,o);e==="json"?console.log(JSON.stringify({...c,gate:t},null,2)):_oe(c,t),boe(c,t,n.strict===!0)&&(process.exitCode=1)}catch(r){Ae.handle(r)}})}a(I9,"requirementsAuditCommand");function A9(){let n=new Ue("requirements").description("Requirements-management tooling (RFC 0003): traceability checker");return n.addCommand(I9()),n}a(A9,"requirementsCommand");function O_(n){let e=new Ue;return e.name("exocortex").description("CLI tool for Exocortex knowledge management system - SPARQL queries, task management, and more").version(n??"16.184.0"),e.addCommand(vj()),e.addCommand(Pj()),e.addCommand(S4()),e.addCommand(T4()),e.addCommand(q4()),e.addCommand(I4()),e.addCommand(x4()),e.addCommand(Q4()),e.addCommand(tj()),e.addCommand(lj()),e.addCommand(bj()),e.addCommand(Hj()),e.addCommand(Yj()),e.addCommand(f9()),e.addCommand(h9()),e.addCommand(g9()),e.addCommand(y9()),e.addCommand(w9()),e.addCommand(r9()),e.addCommand(c9()),e.addCommand(A9()),e}a(O_,"createProgram");O_().parse();0&&(module.exports={createProgram});
602
602
  /*! Bundled license information:
603
603
 
604
604
  reflect-metadata/Reflect.js:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kitelev/exocortex-cli",
3
- "version": "16.183.1",
3
+ "version": "16.184.0",
4
4
  "description": "CLI tool for Exocortex knowledge management system - SPARQL queries, task management, and more",
5
5
  "main": "dist/index.js",
6
6
  "bin": {