@kitelev/exocortex-cli 16.156.6 → 16.156.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +3 -3
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
// @kitelev/exocortex-cli v16.156.
|
|
2
|
+
// @kitelev/exocortex-cli v16.156.7
|
|
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=t1});var Bl=w(Mn=>{"use strict";var WU=Mn&&Mn.__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]})),HU=Mn&&Mn.__setModuleDefault||(Object.create?(function(n,e){Object.defineProperty(n,"default",{enumerable:!0,value:e})}):function(n,e){n.default=e}),qC=Mn&&Mn.__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"&&WU(t,e,r[i]);return HU(t,e),t}})();Object.defineProperty(Mn,"__esModule",{value:!0});Mn.QueryExecutor=Mn.ExoQLQueryExecutor=Mn.QueryExecutorError=void 0;var zU=ww(),KU=Cm(),YU=Uw(),QU=Vw(),XU=FC(),JU=LC(),ZU=MC(),e8=Jw(),t8=$C(),r8=BC(),n8=VC(),i8=Pe(),s8=Ge(),o8=vm(),Wr="http://www.w3.org/2001/XMLSchema#",a8=new Set([`${Wr}integer`,`${Wr}decimal`,`${Wr}float`,`${Wr}double`,`${Wr}nonPositiveInteger`,`${Wr}negativeInteger`,`${Wr}long`,`${Wr}int`,`${Wr}short`,`${Wr}byte`,`${Wr}nonNegativeInteger`,`${Wr}unsignedLong`,`${Wr}unsignedInt`,`${Wr}unsignedShort`,`${Wr}unsignedByte`,`${Wr}positiveInteger`]),Ul=class extends Error{static{a(this,"QueryExecutorError")}constructor(e,t){super(e,t?{cause:t}:void 0),this.name="QueryExecutorError"}};Mn.QueryExecutorError=Ul;var jm=class{static{a(this,"ExoQLQueryExecutor")}constructor(e,t={}){this.tripleStore=e,this.bgpExecutor=new zU.BGPExecutor(e),this.filterExecutor=new KU.FilterExecutor,this.optionalExecutor=new YU.OptionalExecutor,this.unionExecutor=new QU.UnionExecutor,this.minusExecutor=new XU.MinusExecutor,this.valuesExecutor=new JU.ValuesExecutor,this.aggregateExecutor=new ZU.AggregateExecutor,this.constructExecutor=new e8.ConstructExecutor,this.serviceExecutor=new t8.ServiceExecutor(t.serviceConfig),this.graphExecutor=new r8.GraphExecutor(e),this.sparqlGenerator=new n8.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(()=>qC(_s())),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 i8.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(()=>qC(_s()));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 s8.Literal){let i=r.datatype?.value;if(i===`${Wr}dayTimeDuration`)try{return o8.DateTimeFunctions.parseDayTimeDuration(r.value)}catch{return r.value}if(i&&a8.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}};Mn.ExoQLQueryExecutor=jm;Mn.QueryExecutor=jm});var XC=w(uo=>{"use strict";var c8=uo&&uo.__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},l8=uo&&uo.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},r1;Object.defineProperty(uo,"__esModule",{value:!0});uo.CommandResolver=void 0;var u8=Ve(),f8=ol(),Zt=Pe(),Ut=Ge(),W=zt(),GC=Yo(),WC=pf(),d8=cl(),h8=$p(),Vl=m_(),$m=jR(),p8=bl(),m8=Sl(),g8=Bl(),qf=10,Um="exo__Asset",y8=qf+1,HC="08cec529-90eb-4d43-88de-ceecccea12b0",b8=W.Namespace.EXOCMD.term("SubstitutionToken").value,zC=new Set(["today","todayStart","targetFolder","target","randomUUIDv4","nowTimestamp","nowDate","nowYear","nowMonth","userInputLabel","userInput","targetProperty","labelAsArray","groundingTargetClass","targetClassSelf"]);function _8(n,e){return`__SUBSTITUTE__${n}__${e}__`}a(_8,"buildSubstitutionMarker");function S8(n,e,t){let r=(0,d8.utf8ToBase64)(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"");return`__SUBSTITUTE_P__${n}__${e}__${r}__`}a(S8,"buildParameterisedMarker");var KC="3f28af98-c031-4718-8ba2-44ad0b012c52",w8=W.Namespace.EXOCMD.term("TokenInvocation").value,YC="29e2c8f8-2d27-4e58-b467-2e85d46f8122",QC="universal-default-template",v8=new Set(["today","todayStart","nowTimestamp","nowDate","nowYear","nowMonth"]),n1=r1=class{static{a(this,"CommandResolver")}clearUniversalCache(){this._universalCacheReady=!1,this._universalCacheValue=null,(0,$m.clearUniversalDefault)()}constructor(e,t=f8.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=await this.expandClassHierarchy(t),l=new Map;for(let[h,p]of c){let g=await this.resolveForAsset(e,h,r);for(let y of g){let b=this.getBindingPriority(y.binding)===2?p:0,S=l.get(y.binding.id);(!S||b<S.depth)&&l.set(y.binding.id,{rc:y,depth:b})}}let u=new Set;for(let{rc:h}of l.values())if(h.binding.overrides)for(let p of h.binding.overrides)u.add(p);let f=Array.from(l.entries()).filter(([h])=>!u.has(h)).map(([,h])=>h);f.sort((h,p)=>{let g=this.getBindingPriority(h.rc.binding),y=this.getBindingPriority(p.rc.binding);return g!==y?g-y:h.depth!==p.depth?h.depth-p.depth:(h.rc.binding.order??100)-(p.rc.binding.order??100)});let d=f.map(h=>h.rc);return this.multiCache.set(s,d),d}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,y8),s}async resolveForAsset(e,t,r){let i=`${e}:${t}:${r??""}`,s=this.cache.get(i);if(s)return s;let o=await this.findBindings(t,r,e),c=[];for(let l of o){let u=await this.loadCommand(l.commandRef,{targetClass:l.targetClass});if(!u)continue;let f=l.precondition?{...u,precondition:l.precondition}:u;c.push({command:f,binding:l})}return c.sort((l,u)=>{let f=this.getBindingPriority(l.binding),d=this.getBindingPriority(u.binding);return f!==d?f-d:(l.binding.order??100)-(u.binding.order??100)}),this.cache.set(i,c),c}async loadCommand(e,t){let r=await this.findSubjectByUID(e);if(!r||(await this.tripleStore.match(r,W.Namespace.RDF.term("type"),W.Namespace.EXOCMD.term("Command"))).length===0)return null;let s=await this.getLiteralValue(r,W.Namespace.EXO.term("Asset_label"))??"Unknown Command",o=await this.getLiteralValue(r,W.Namespace.EXOCMD.term("Command_labelTemplate")),c=await this.getLiteralValue(r,W.Namespace.EXOCMD.term("Command_icon")),l=await this.getLiteralValue(r,W.Namespace.EXOCMD.term("Command_confirmMessage")),u=await this.getLiteralValue(r,W.Namespace.EXOCMD.term("Command_successMessage")),f=await this.getLiteralValue(r,W.Namespace.EXOCMD.term("Command_category")),d=await this.getLiteralValue(r,W.Namespace.EXOCMD.term("Command_openInSameTab")),h=d!==null&&String(d).trim().toLowerCase()==="true",p=await this.loadLinkedPrecondition(r),g=await this.loadLinkedGrounding(r,0,t);return g?{id:e,name:s,labelTemplate:o??void 0,icon:c??void 0,precondition:p??void 0,grounding:g,confirmMessage:l??void 0,successMessage:u??void 0,category:f??void 0,openInSameTab:h||void 0}:null}async findBindings(e,t,r){let i=await this.tripleStore.match(void 0,W.Namespace.RDF.term("type"),W.Namespace.EXOCMD.term("CommandBinding")),s=[];for(let o of i){let c=o.subject,l=await this.loadBindingDefinition(c);l&&this.bindingMatches(l,e,t,r)&&s.push(l)}return s}async findPaletteEnabledCommands(){let e=await this.tripleStore.match(void 0,W.Namespace.RDF.term("type"),W.Namespace.EXOCMD.term("Command")),t=[],r=new Set;for(let i of e){let s=i.subject;if((await this.getLiteralValue(s,W.Namespace.EXOCMD.term("Command_paletteEnabled")))?.toLowerCase()!=="true")continue;let c=await this.getLiteralValue(s,W.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,W.Namespace.EXOCMD.term("Command_paletteId")),f=await this.getLiteralValue(s,W.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 p8.ExoQLParser().parse(r),c=new m8.ExoQLAlgebraTranslator().translate(s),u=await new g8.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 Ut.Literal||h instanceof Zt.IRI?h.value:String(h):""}catch{return""}}async loadBindingDefinition(e){let t=await this.getLiteralValue(e,W.Namespace.EXO.term("Asset_uid"));if(!t)return null;let r=await this.getLiteralValue(e,W.Namespace.EXO.term("Asset_label"))??"",i=await this.getLinkedUID(e,W.Namespace.EXOCMD.term("CommandBinding_command"));if(!i)return null;let s=await this.getLinkedValue(e,W.Namespace.EXOCMD.term("CommandBinding_targetClass")),o=await this.getLinkedValue(e,W.Namespace.EXOCMD.term("CommandBinding_targetPrototype")),c=await this.getLinkedValue(e,W.Namespace.EXOCMD.term("CommandBinding_targetAsset"));if(!s&&!o&&!c)return null;let l=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("CommandBinding_position")),u=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("CommandBinding_order")),f=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("CommandBinding_variant")),d=f!==null?this.coerceVariant(f,t):void 0,h=await this.loadLinkedPreconditionFromProperty(e,W.Namespace.EXOCMD.term("CommandBinding_precondition")),p=await this.loadLinkedStyle(e,t),g=await this.getLinkedUIDs(e,W.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:g.length>0?g:void 0}}async loadLinkedStyle(e,t){let r=await this.tripleStore.match(e,W.Namespace.EXOCMD.term("CommandBinding_style"),void 0);if(r.length>0){let s=r[0].object,o=null;if(s instanceof Zt.IRI)o=s;else if(s instanceof Ut.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,W.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,W.Namespace.EXO.term("Asset_uid"));if(!t)return null;let r=await this.getLiteralValue(e,W.Namespace.EXO.term("Asset_label"))??"",i=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("CommandBindingStyle_variant")),s=i!==null?this.coerceVariant(i,t):void 0,o=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("CommandBindingStyle_showIcon")),c=this.coerceBoolean(o),l=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("CommandBindingStyle_labelClass")),u=l!==null?this.coerceLabelClass(l,t):void 0,f=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("CommandBindingStyle_ariaLabel")),d=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("CommandBindingStyle_tooltip")),h=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("CommandBindingStyle_keyboardShortcut")),p=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("CommandBindingStyle_source")),g=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:g,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){return!!(e.targetAsset&&i&&this.matchesReference(e.targetAsset,i)||e.targetPrototype&&r&&this.matchesReference(e.targetPrototype,r)||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,W.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=r[0].object,s=null;if(i instanceof Zt.IRI)s=i;else if(i instanceof Ut.Literal){let h=this.normalizeWikilink(i.value);s=await this.findSubjectByUID(h)}if(!s)return null;let o=await this.getLiteralValue(s,W.Namespace.EXO.term("Asset_uid")),c=await this.getLiteralValue(s,W.Namespace.EXO.term("Asset_label"))??"",l=await this.getLiteralValue(s,W.Namespace.EXOCMD.term("Precondition_sparqlAsk")),u=await this.getLiteralValue(s,W.Namespace.EXOCMD.term("Precondition_hostFunction")),f=await this.tripleStore.match(s,W.Namespace.EXOCMD.term("Precondition_query"),void 0),d;if(f.length>0){let h=f[0].object;if(h instanceof Zt.IRI){let p=await this.getLiteralValue(h,W.Namespace.EXO.term("Asset_uid"));p&&(d=p)}else h instanceof Ut.Literal&&(d=this.normalizeWikilink(h.value))}return!o||!l&&!u&&!d?null:{id:o,label:c,...l&&{sparqlAsk:l},...u&&{hostFunction:u},...d&&{query:d}}}async loadLinkedGrounding(e,t,r){if(t>=qf)return null;let i=await this.tripleStore.match(e,W.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,W.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 Zt.IRI)return e;if(e instanceof Ut.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>=qf)return null;let r=await this.getLiteralValue(e,W.Namespace.EXO.term("Asset_uid"));if(!r)return null;let i=await this.getLiteralValue(e,W.Namespace.EXO.term("Asset_label"))??"",s=await this.resolveGroundingTypeReference(e);if(!s)return null;let o=await this.getObsidianName(e,W.Namespace.EXOCMD.term("Grounding_targetProperty"));if(o&&this.looksLikeUUID(o)){let Q=await this.resolveLabelByUID(o);if(!Q)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=Q}if(s===GC.GroundingType.SERVICE_CALL){let Q=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_serviceId"));Q&&(o=Q)}let c=await this.getObsidianName(e,W.Namespace.EXOCMD.term("Grounding_targetValueRef")),l=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_targetValueLiteral")),u=await this.getObsidianName(e,W.Namespace.EXOCMD.term("Grounding_targetValueSubstitution")),f=null;if(u&&this.looksLikeUUID(u)){let Q=await this.resolveLabelByUID(u);if(!Q)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=Q}else u&&(f=u);let d=await this.getObsidianName(e,W.Namespace.EXOCMD.term("Grounding_targetValueQuery")),h=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_serviceCallPayload")),p=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_appendExpression")),g=await this.getObsidianWikilinkValue(e,W.Namespace.EXOCMD.term("Grounding_isDefinedBy")),y=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_sparqlUpdate")),b=await this.getObsidianName(e,W.Namespace.EXOCMD.term("Grounding_targetClass"));if(b&&!this.looksLikeUUID(b)){let Q=await this.findUidByLabel(b);Q&&(b=Q)}let S=await this.getObsidianName(e,W.Namespace.EXOCMD.term("Grounding_targetPrototype")),v=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_targetFolder")),I=await this.getObsidianName(e,W.Namespace.EXOCMD.term("Grounding_linkBackProperty")),A=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_inputSchema")),T=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_incrementBy")),R=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_shiftDelta")),V;if(T!=null&&T!==""){let Q=Number.parseInt(String(T),10);Number.isFinite(Q)&&(V=Q)}let L=await this.resolvePropertyDefaults(e,r),P=await this.resolveInheritanceRules(e,r),k=await this.getLiteralValue(e,W.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 O;s===GC.GroundingType.COMPOSITE&&(O=await this.loadCompositeSteps(e,t+1));let J;if(A)try{let Q=JSON.parse(A);Q?.properties&&(J=Object.entries(Q.properties).map(([G,te])=>{let Se=te.type,X=Se==="string"?"text":Se,$e=te.defaultValue!==void 0?te.defaultValue:te.default,Be={name:G,type:X,label:te.title??G,required:Array.isArray(Q.required)&&Q.required.includes(G)};return $e!=null&&(Be.defaultValue=String($e)),typeof te.targetClassUid=="string"&&(Be.targetClassUid=te.targetClassUid),Be}))}catch{}let re=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_prefillLabelWithDate")),Y=re!==null&&String(re).trim().toLowerCase()==="true",ye=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_labelTemplate")),de=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_direction")),le;if(de!=null){let Q=String(de).trim().toLowerCase();Q==="forward"||Q==="rollback"?le=Q:Q!==""&&this.logger.warn(`Grounding ${r}: exocmd__Grounding_direction value '${de}' is not 'forward' or 'rollback' \u2014 treating as undefined (will default to 'forward' at dispatch).`)}let q=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_bodyTemplate")),M=await this.getObsidianName(e,W.Namespace.EXOCMD.term("Grounding_templateRef")),je={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:y??void 0,steps:O,targetClass:b??void 0,targetPrototype:S??void 0,targetFolder:v??void 0,linkBackProperty:I??void 0,incrementBy:V,shiftDelta:R??void 0,propertyDefault:L.length>0?L:void 0,inheritanceRule:P.length>0?P:void 0,isDefinedBy:g??void 0,prefillLabelWithDate:Y||void 0,labelTemplate:ye??void 0,direction:le,bodyTemplate:q??void 0,templateRef:M??void 0};return J&&(je.inputSchema=J),je}async loadCompositeSteps(e,t){if(t>=qf)return[];let r=await this.tripleStore.match(e,W.Namespace.EXOCMD.term("Grounding_steps"),void 0),i=[];for(let s of r){let o=null;if(s.object instanceof Zt.IRI)o=s.object;else if(s.object instanceof Ut.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,W.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,W.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,W.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,QC,W.Namespace.EXOCMD.term("Template_propertyDefault")),i=await this.resolveInheritanceRulesForSubject(t,QC,W.Namespace.EXOCMD.term("Template_inheritanceRule"));return this._universalCacheValue={propertyDefaults:r,inheritanceRules:i},this._universalCacheValue}async findUniversalSingleton(){let e=W.Namespace.EXOCMD.term("UniversalDefaultTemplate").value,t=await this.tripleStore.match(void 0,W.Namespace.EXO.term("Instance_class"),void 0),r=[];for(let i of t){let s=!1;if(i.object instanceof Zt.IRI)s=i.object.value===e||i.object.value.includes(YC);else if(i.object instanceof Ut.Literal){let o=this.unwrapWikilink(i.object.value);s=o==="exocmd__UniversalDefaultTemplate"||o===YC}s&&i.subject instanceof Zt.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,W.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,W.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,W.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,W.Namespace.EXOCMD.term("InheritanceRule_targetClassCondition"),void 0),h,p;if(d.length>0){let A=await this.getObsidianName(l,W.Namespace.EXOCMD.term("InheritanceRule_targetClassCondition"));if(!A||!A.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(A)?(p=A,h=await this.resolveLabelByUID(A)??void 0):h=A}let g=await this.tripleStore.match(l,W.Namespace.EXOCMD.term("InheritanceRule_targetClassExclusion"),void 0),y=[],b=[],S=!1;for(let A of g){let T=null;if(A.object instanceof Zt.IRI?T=this.iriToObsidianName(A.object.value)??A.object.value:A.object instanceof Ut.Literal&&(T=this.unwrapWikilink(A.object.value)),!T){S=!0;continue}if(this.looksLikeUUID(T)){b.push(T);let R=await this.resolveLabelByUID(T);R&&y.push(R)}else y.push(T)}if(S){this.logger.warn(`Grounding ${o}: InheritanceRule has unresolvable exocmd__InheritanceRule_targetClassExclusion entry \u2014 entire rule skipped (would otherwise expand scope by silently dropping the excluded class).`);continue}let v=await this.getLiteralValue(l,W.Namespace.EXOCMD.term("InheritanceRule_priority")),I=50;if(v!==null&&v!==""){let A=Number.parseInt(String(v),10);Number.isFinite(A)&&(I=A)}s.push({sourcePropertyName:u,targetPropertyName:f,targetClassCondition:h,targetClassConditionUid:p,targetClassExclusion:y,targetClassExclusionUids:b,priority:I})}return s}async resolveRefTripleObject(e){if(e instanceof Zt.IRI)return e;if(e instanceof Ut.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,W.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 zC.has(c)?s!==void 0?S8(c,t,s):v8.has(c)?r1.parseTimeResolve(c):_8(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(zC).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.toISOString().slice(0,10);case"todayStart":return new Date(new Date().setHours(0,0,0,0)).toISOString();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,W.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,W.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,W.Namespace.EXO.term("Instance_class"),void 0);for(let r of t)if(r.object instanceof Zt.IRI){if(r.object.value===w8||r.object.value.includes(KC))return!0}else if(r.object instanceof Ut.Literal){let i=this.unwrapWikilink(r.object.value);if(i==="exocmd__TokenInvocation"||i===KC)return!0}return!1}async assetIsSubstitutionToken(e){let t=await this.tripleStore.match(e,W.Namespace.EXO.term("Instance_class"),void 0);for(let r of t)if(r.object instanceof Zt.IRI){if(r.object.value===b8||r.object.value.includes(HC))return!0}else if(r.object instanceof Ut.Literal){let i=this.unwrapWikilink(r.object.value);if(i==="exocmd__SubstitutionToken"||i===HC)return!0}return!1}async resolveGroundingTypeReference(e){let t=await this.tripleStore.match(e,W.Namespace.EXOCMD.term("Grounding_type"),void 0);if(t.length===0)return null;let r=t[0].object;if(r instanceof Zt.IRI)return(0,WC.resolveGroundingTypeFromIRI)(r.value);if(r instanceof Ut.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,WC.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 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,W.Namespace.EXO.term("Asset_uid"),void 0);for(let r of t)if(r.object instanceof Ut.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 Ut.Literal||i instanceof Zt.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,W.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,W.Namespace.EXO.term("Asset_uid"));c&&o.add(c);let l=await this.getLiteralValue(s,W.Namespace.EXO.term("Asset_label"));l&&o.add(l);let u=a((h,p)=>{if(o.has(h))return;let g=r.get(h);(g===void 0||p<g)&&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:g}=h;if(g>=qf||i.has(p.value))continue;i.add(p.value);let y=await this.tripleStore.match(p,W.Namespace.EXO.term("Class_superClass"),void 0);for(let b of y){let S=b.object;if(!(S instanceof Zt.IRI))continue;let v=g+1,I=S.value.startsWith("obsidian://vault/"),A=this.iriToObsidianName(S.value);A&&u(A,v);let T=null;if(I?T=S:A&&(T=await this.resolveClassFileIRI(A)),!T)continue;let R=await this.getLiteralValue(T,W.Namespace.EXO.term("Asset_uid"));R&&u(R,v),i.has(T.value)||f.push({fileIRI:T,depth:v})}}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,W.Namespace.EXO.term("Asset_label"),void 0);for(let r of t)if(r.object instanceof Ut.Literal&&r.object.value===e&&r.subject instanceof Zt.IRI){let i=await this.tripleStore.match(r.subject,W.Namespace.EXO.term("Asset_uid"),void 0);if(i.length>0&&i[0].object instanceof Ut.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 Zt.IRI){let s=await this.tripleStore.match(i,W.Namespace.EXO.term("Asset_uid"),void 0);return s.length>0&&s[0].object instanceof Ut.Literal?s[0].object.value:i.value.split("/").pop()?.replace(".md","")??null}return i instanceof Ut.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 Zt.IRI){let c=await this.tripleStore.match(o,W.Namespace.EXO.term("Asset_uid"),void 0);if(c.length>0&&c[0].object instanceof Ut.Literal)i.push(c[0].object.value);else{let l=o.value.split("/").pop()?.replace(".md","");l&&i.push(l)}}else if(o instanceof Ut.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 Ut.Literal?this.normalizeWikilink(i.value):i instanceof Zt.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 Ut.Literal?this.unwrapWikilink(i.value):i instanceof Zt.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 Ut.Literal)return this.resolveWikilinkAlias(i.value);if(i instanceof Zt.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,W.Namespace.EXO.term("Asset_label"));return s?e.replace(`[[${r}]]`,`[[${r}|${s}]]`):e}iriToObsidianName(e){return(0,h8.iriToObsidianName)(e)}normalizeWikilink(e){let t=e.replace(/["'[\]]/g,"").trim(),r=t.indexOf("|");return r>=0?t.substring(0,r):t}};uo.CommandResolver=n1;uo.CommandResolver=n1=r1=c8([(0,u8.injectable)(),l8("design:paramtypes",[Object,Object])],n1)});var s1=w(i1=>{"use strict";Object.defineProperty(i1,"__esModule",{value:!0});i1.validateExoQLAllowlist=E8;var Bm=Bf();function E8(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(E8,"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 o1=w(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=w(a1=>{"use strict";Object.defineProperty(a1,"__esModule",{value:!0});a1.evaluateWithExoEval=O8;var T8=bl(),A8=Sl(),I8=Bl(),x8=s1(),R8=o1(),C8=Bf();async function O8(n,e={}){if(typeof n!="string")throw new TypeError("evaluateWithExoEval: sparql must be a string");let r=new T8.ExoQLParser().parse(n);if((0,x8.validateExoQLAllowlist)(r),!{...R8.DEFAULT_EVAL_CONFIG,...e.config??{}}.enabled)throw new C8.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 A8.ExoQLAlgebraTranslator().translate(r),l=new I8.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(O8,"evaluateWithExoEval")});var Gf=w(Wm=>{"use strict";Object.defineProperty(Wm,"__esModule",{value:!0});Wm.liveClock=P8;Wm.frozenClock=F8;function P8(){return{now:a(()=>new Date,"now")}}a(P8,"liveClock");function F8(n){let e=new Date(n);return{now:a(()=>new Date(e.getTime()),"now")}}a(F8,"frozenClock")});var ZC=w(fo=>{"use strict";var D8=fo&&fo.__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},L8=fo&&fo.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},Wf;Object.defineProperty(fo,"__esModule",{value:!0});fo.PreconditionEvaluator=void 0;var N8=Ve(),k8=bl(),M8=Sl(),JC=Bl(),j8=Gm(),$8=Gf(),Hf=Wf=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,$8.liveClock)()}async evaluate(e,t,r){return e?e.sparqlAsk?this.evaluateSparqlAsk(e.sparqlAsk,t):e.query?this.evaluateQueryRef(e.query,t):e.hostFunction?this.evaluateHostFunction(e.hostFunction,t,r):!0:!0}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,j8.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,Wf.SENTINEL_IRI),i=new k8.ExoQLParser().parse(t),o=new M8.ExoQLAlgebraTranslator().translate(i);return new JC.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=this.askCache.get(e);if(r===void 0){let o=this.compileAsk(e);if(!o)return!1;r=o,this.askCache.set(e,r)}let i=JSON.parse(JSON.stringify(r).replaceAll(Wf.SENTINEL_IRI,t));return await new JC.ExoQLQueryExecutor(this.tripleStore).executeAsk(i)}catch{return!1}}substituteVariables(e,t){let r=this.clock.now(),i=r.toISOString(),s=i.slice(0,10),o=new Date(r.getTime()+Wf.ALMATY_OFFSET_MS),c=o.getUTCFullYear(),l=o.getUTCMonth(),u=o.getUTCDate(),f=o.getUTCDay(),h=new Date(Date.UTC(c,l,u-1)).toISOString().slice(0,10),p=(f+6)%7,g=new Date(Date.UTC(c,l,u-p)),y=g.toISOString().slice(0,10),S=new Date(g.getTime()-10080*60*1e3).toISOString().slice(0,10),v=`${c}-${String(l+1).padStart(2,"0")}-01`,I=l===0?11:l-1,T=`${l===0?c-1:c}-${String(I+1).padStart(2,"0")}-01`,R=`${c}-01-01`;return e.replace(/\$target/g,`<${t}>`).replace(/\$now/g,`"${i}"^^xsd:dateTime`).replace(/\$yesterday/g,`"${h}"^^xsd:date`).replace(/\$thisWeekStart/g,`"${y}"^^xsd:date`).replace(/\$lastWeekStart/g,`"${S}"^^xsd:date`).replace(/\$thisMonthStart/g,`"${v}"^^xsd:date`).replace(/\$lastMonthStart/g,`"${T}"^^xsd:date`).replace(/\$thisYearStart/g,`"${R}"^^xsd:date`).replace(/\$today/g,`"${s}"^^xsd:date`)}};fo.PreconditionEvaluator=Hf;Hf.SENTINEL_IRI="urn:exocortex:cache-sentinel:target";Hf.ALMATY_OFFSET_MS=300*60*1e3;fo.PreconditionEvaluator=Hf=Wf=D8([(0,N8.injectable)(),L8("design:paramtypes",[Object,Object,Object])],Hf)});var eO=w(ho=>{"use strict";Object.defineProperty(ho,"__esModule",{value:!0});ho.hasUidFilename=ho.hasNonUidFilename=void 0;ho.registerDefaultHostFunctions=V8;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");ho.hasNonUidFilename=U8;var B8=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");ho.hasUidFilename=B8;function V8(n){n.registerHostFunction("hasNonUidFilename",ho.hasNonUidFilename),n.registerHostFunction("hasUidFilename",ho.hasUidFilename)}a(V8,"registerDefaultHostFunctions")});var zm=w(Hm=>{"use strict";Object.defineProperty(Hm,"__esModule",{value:!0});Hm.liveUidGenerator=q8;Hm.seededUidGenerator=W8;var c1=Ii();function q8(){return{next:a(()=>(0,c1.v4)(),"next")}}a(q8,"liveUidGenerator");var G8="6ba7b810-9dad-11d1-80b4-00c04fd430c8";function W8(n){let e=0,t=(0,c1.v5)(n,G8);return{next:a(()=>{let r=`${n}#${e}`;return e+=1,(0,c1.v5)(r,t)},"next")}}a(W8,"seededUidGenerator")});var Qm=w(ca=>{"use strict";Object.defineProperty(ca,"__esModule",{value:!0});ca.registerResolver=ar;ca.getResolver=H8;ca.isResolverModifierAware=z8;ca.getRegisteredResolverIds=K8;ca.clearResolvers=Y8;ca.installDefaultResolvers=sB;var Ym=new Map,l1=new Set;function ar(n,e,t=!1){Ym.set(n,e),t&&l1.add(n)}a(ar,"registerResolver");function H8(n){return Ym.get(n)}a(H8,"getResolver");function z8(n){return l1.has(n)}a(z8,"isResolverModifierAware");function K8(){return Array.from(Ym.keys())}a(K8,"getRegisteredResolverIds");function Y8(){Ym.clear(),l1.clear()}a(Y8,"clearResolvers");function yn(n){return n<10?`0${n}`:String(n)}a(yn,"pad2");var Q8=["January","February","March","April","May","June","July","August","September","October","November","December"],X8=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],J8=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],Z8=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];function eB(n){let e=["th","st","nd","rd"],t=n%100;return`${n}${e[(t-20)%10]||e[t]||e[0]}`}a(eB,"ordinalDay");var tB=/YYYY|YY|MMMM|MMM|MM|M|Do|DD|D|dddd|ddd|HH|H|hh|h|mm|m|ss|s|A|a/g;function rB(n,e){let t=(n.getHours()+11)%12+1;return e.replace(tB,r=>{switch(r){case"YYYY":return String(n.getFullYear());case"YY":return yn(n.getFullYear()%100);case"MMMM":return Q8[n.getMonth()];case"MMM":return X8[n.getMonth()];case"MM":return yn(n.getMonth()+1);case"M":return String(n.getMonth()+1);case"Do":return eB(n.getDate());case"DD":return yn(n.getDate());case"D":return String(n.getDate());case"dddd":return J8[n.getDay()];case"ddd":return Z8[n.getDay()];case"HH":return yn(n.getHours());case"H":return String(n.getHours());case"hh":return yn(t);case"h":return String(t);case"mm":return yn(n.getMinutes());case"m":return String(n.getMinutes());case"ss":return yn(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(rB,"formatDate");function tO(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(tO,"addMonthsClamped");function nB(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=tO(s,r,"M");break;case"y":s=tO(s,r,"y");break}return isNaN(s.getTime())?n:s}a(nB,"applyDateOffset");function iB(n){if(!n)return{offset:null,format:null};let e=n.indexOf(":");if(e<0)return{offset:n||null,format:null};let t=n.slice(0,e),r=n.slice(e+1);return{offset:t||null,format:r||null}}a(iB,"parseDateModifier");function Km(n,e){return(t,r)=>{let{offset:i,format:s}=iB(r),o=new Date;return n!==0&&o.setDate(o.getDate()+n),o=nB(o,i),rB(o,s??e)}}a(Km,"makeDateResolver");function sB(){ar("today",()=>new Date().toISOString().slice(0,10)),ar("todayStart",()=>new Date(new Date().setHours(0,0,0,0)).toISOString()),ar("date",Km(0,"YYYY-MM-DD"),!0),ar("now",Km(0,"YYYY-MM-DDTHH:mm:ss"),!0),ar("tomorrow",Km(1,"YYYY-MM-DD"),!0),ar("yesterday",Km(-1,"YYYY-MM-DD"),!0),ar("target",n=>n.targetIRI?`"[[${n.targetIRI}]]"`:""),ar("targetFolder",n=>{if(!n.targetFilePath)return"";let e=n.targetFilePath.replace(/^\/+/,""),t=e.lastIndexOf("/");return t>=0?e.slice(0,t):""}),ar("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.")}),ar("nowTimestamp",()=>{let n=new Date;return`${n.getFullYear()}-${yn(n.getMonth()+1)}-${yn(n.getDate())}T${yn(n.getHours())}:${yn(n.getMinutes())}:${yn(n.getSeconds())}`}),ar("nowDate",()=>{let n=new Date;return`${n.getFullYear()}-${yn(n.getMonth()+1)}-${yn(n.getDate())}`}),ar("nowYear",()=>String(new Date().getFullYear())),ar("nowMonth",()=>yn(new Date().getMonth()+1)),ar("userInputLabel",n=>{let e=n.userInput?.label;return typeof e=="string"?e:""}),ar("userInput",(n,e)=>{if(!e)return null;let t=n.userInput?.[e];return typeof t=="string"?t:t==null?null:String(t)}),ar("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)}),ar("labelAsArray",n=>{let e=n.userInput?.label;return typeof e=="string"&&e.length>0?[e]:[]}),ar("groundingTargetClass",n=>n.groundingTargetClassUid?`"[[${n.groundingTargetClassUid}]]"`:null),ar("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(sB,"installDefaultResolvers")});var f1=w(Xm=>{"use strict";Object.defineProperty(Xm,"__esModule",{value:!0});Xm.resolveTemplateBody=aB;Xm.stripTemplateFrontmatter=cB;var u1=Qm();(0,u1.installDefaultResolvers)();var oB=/\$([A-Za-z][A-Za-z0-9_]*)((?:[+-]\d+[dwMy])?(?::[A-Za-z0-9:./-]+)?)/g;function aB(n,e={}){return n.replace(oB,(t,r,i)=>{let s=(0,u1.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,u1.isResolverModifierAware)(r)?o:o+i})}a(aB,"resolveTemplateBody");function cB(n){let e=n.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);return e?n.slice(e[0].length):n}a(cB,"stripTemplateFrontmatter")});var zf=w(ql=>{"use strict";Object.defineProperty(ql,"__esModule",{value:!0});ql.registerOrderSpecLoader=lB;ql.clearOrderSpecLoader=uB;ql.loadDefaultSpec=fB;ql.orderProperties=dB;var Jm=null,la,Zm=!1;function lB(n){Jm=n,la=void 0,Zm=!1}a(lB,"registerOrderSpecLoader");function uB(){Jm=null,la=void 0,Zm=!1}a(uB,"clearOrderSpecLoader");function fB(){if(la!==void 0)return la;if(!Jm)return la=null,null;try{la=Jm()}catch(n){Zm||(console.warn("[OrderSpecResolver] loader threw, falling back to insertion order:",n),Zm=!0),la=null}return la}a(fB,"loadDefaultSpec");function dB(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(dB,"orderProperties")});var d1=w(fc=>{"use strict";Object.defineProperty(fc,"__esModule",{value:!0});fc.STRING_SCALAR_PROPERTIES=void 0;fc.needsYamlQuoting=rO;fc.quoteYamlString=nO;fc.serializeYamlScalar=vB;var hB=/^[-!&*?|>%@`"'#,[\]{}]/,pB=/[\u0000-\u001f\u007f]/,mB=/^(?:true|True|TRUE|false|False|FALSE)$/,gB=/^(?:null|Null|NULL|~)$/,yB=/^[-+]?(?:0b[01_]+|0o[0-7_]+|0x[0-9a-fA-F_]+|[0-9][0-9_]*)$/,bB=/^(?:[-+]?[0-9][0-9_]*(?:\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\.(?:inf|Inf|INF)|\.(?:nan|NaN|NAN))$/,_B=/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;fc.STRING_SCALAR_PROPERTIES=new Set(["exo__Asset_label","aliases"]);function SB(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(SB,"isCompleteDoubleQuotedScalar");function wB(n){return mB.test(n)||gB.test(n)||yB.test(n)||bB.test(n)||_B.test(n)}a(wB,"looksLikeNonStringScalar");function rO(n,e=!1){return n===""?!0:SB(n)?!1:!!(n!==n.trim()||/:(\s|$)/.test(n)||/\s#/.test(n)||hB.test(n)||pB.test(n)||e&&wB(n))}a(rO,"needsYamlQuoting");function nO(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=t1});var Bl=w(Mn=>{"use strict";var WU=Mn&&Mn.__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]})),HU=Mn&&Mn.__setModuleDefault||(Object.create?(function(n,e){Object.defineProperty(n,"default",{enumerable:!0,value:e})}):function(n,e){n.default=e}),qC=Mn&&Mn.__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"&&WU(t,e,r[i]);return HU(t,e),t}})();Object.defineProperty(Mn,"__esModule",{value:!0});Mn.QueryExecutor=Mn.ExoQLQueryExecutor=Mn.QueryExecutorError=void 0;var zU=ww(),KU=Cm(),YU=Uw(),QU=Vw(),XU=FC(),JU=LC(),ZU=MC(),e8=Jw(),t8=$C(),r8=BC(),n8=VC(),i8=Pe(),s8=Ge(),o8=vm(),Wr="http://www.w3.org/2001/XMLSchema#",a8=new Set([`${Wr}integer`,`${Wr}decimal`,`${Wr}float`,`${Wr}double`,`${Wr}nonPositiveInteger`,`${Wr}negativeInteger`,`${Wr}long`,`${Wr}int`,`${Wr}short`,`${Wr}byte`,`${Wr}nonNegativeInteger`,`${Wr}unsignedLong`,`${Wr}unsignedInt`,`${Wr}unsignedShort`,`${Wr}unsignedByte`,`${Wr}positiveInteger`]),Ul=class extends Error{static{a(this,"QueryExecutorError")}constructor(e,t){super(e,t?{cause:t}:void 0),this.name="QueryExecutorError"}};Mn.QueryExecutorError=Ul;var jm=class{static{a(this,"ExoQLQueryExecutor")}constructor(e,t={}){this.tripleStore=e,this.bgpExecutor=new zU.BGPExecutor(e),this.filterExecutor=new KU.FilterExecutor,this.optionalExecutor=new YU.OptionalExecutor,this.unionExecutor=new QU.UnionExecutor,this.minusExecutor=new XU.MinusExecutor,this.valuesExecutor=new JU.ValuesExecutor,this.aggregateExecutor=new ZU.AggregateExecutor,this.constructExecutor=new e8.ConstructExecutor,this.serviceExecutor=new t8.ServiceExecutor(t.serviceConfig),this.graphExecutor=new r8.GraphExecutor(e),this.sparqlGenerator=new n8.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(()=>qC(_s())),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 i8.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(()=>qC(_s()));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 s8.Literal){let i=r.datatype?.value;if(i===`${Wr}dayTimeDuration`)try{return o8.DateTimeFunctions.parseDayTimeDuration(r.value)}catch{return r.value}if(i&&a8.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}};Mn.ExoQLQueryExecutor=jm;Mn.QueryExecutor=jm});var XC=w(uo=>{"use strict";var c8=uo&&uo.__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},l8=uo&&uo.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},r1;Object.defineProperty(uo,"__esModule",{value:!0});uo.CommandResolver=void 0;var u8=Ve(),f8=ol(),Zt=Pe(),Ut=Ge(),W=zt(),GC=Yo(),WC=pf(),d8=cl(),h8=$p(),Vl=m_(),$m=jR(),p8=bl(),m8=Sl(),g8=Bl(),qf=10,Um="exo__Asset",y8=qf+1,HC="08cec529-90eb-4d43-88de-ceecccea12b0",b8=W.Namespace.EXOCMD.term("SubstitutionToken").value,zC=new Set(["today","todayStart","targetFolder","target","randomUUIDv4","nowTimestamp","nowDate","nowYear","nowMonth","userInputLabel","userInput","targetProperty","labelAsArray","groundingTargetClass","targetClassSelf"]);function _8(n,e){return`__SUBSTITUTE__${n}__${e}__`}a(_8,"buildSubstitutionMarker");function S8(n,e,t){let r=(0,d8.utf8ToBase64)(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"");return`__SUBSTITUTE_P__${n}__${e}__${r}__`}a(S8,"buildParameterisedMarker");var KC="3f28af98-c031-4718-8ba2-44ad0b012c52",w8=W.Namespace.EXOCMD.term("TokenInvocation").value,YC="29e2c8f8-2d27-4e58-b467-2e85d46f8122",QC="universal-default-template",v8=new Set(["today","todayStart","nowTimestamp","nowDate","nowYear","nowMonth"]),n1=r1=class{static{a(this,"CommandResolver")}clearUniversalCache(){this._universalCacheReady=!1,this._universalCacheValue=null,(0,$m.clearUniversalDefault)()}constructor(e,t=f8.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=await this.expandClassHierarchy(t),l=new Map;for(let[h,p]of c){let g=await this.resolveForAsset(e,h,r);for(let y of g){let b=this.getBindingPriority(y.binding)===2?p:0,S=l.get(y.binding.id);(!S||b<S.depth)&&l.set(y.binding.id,{rc:y,depth:b})}}let u=new Set;for(let{rc:h}of l.values())if(h.binding.overrides)for(let p of h.binding.overrides)u.add(p);let f=Array.from(l.entries()).filter(([h])=>!u.has(h)).map(([,h])=>h);f.sort((h,p)=>{let g=this.getBindingPriority(h.rc.binding),y=this.getBindingPriority(p.rc.binding);return g!==y?g-y:h.depth!==p.depth?h.depth-p.depth:(h.rc.binding.order??100)-(p.rc.binding.order??100)});let d=f.map(h=>h.rc);return this.multiCache.set(s,d),d}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,y8),s}async resolveForAsset(e,t,r){let i=`${e}:${t}:${r??""}`,s=this.cache.get(i);if(s)return s;let o=await this.findBindings(t,r,e),c=[];for(let l of o){let u=await this.loadCommand(l.commandRef,{targetClass:l.targetClass});if(!u)continue;let f=l.precondition?{...u,precondition:l.precondition}:u;c.push({command:f,binding:l})}return c.sort((l,u)=>{let f=this.getBindingPriority(l.binding),d=this.getBindingPriority(u.binding);return f!==d?f-d:(l.binding.order??100)-(u.binding.order??100)}),this.cache.set(i,c),c}async loadCommand(e,t){let r=await this.findSubjectByUID(e);if(!r||(await this.tripleStore.match(r,W.Namespace.RDF.term("type"),W.Namespace.EXOCMD.term("Command"))).length===0)return null;let s=await this.getLiteralValue(r,W.Namespace.EXO.term("Asset_label"))??"Unknown Command",o=await this.getLiteralValue(r,W.Namespace.EXOCMD.term("Command_labelTemplate")),c=await this.getLiteralValue(r,W.Namespace.EXOCMD.term("Command_icon")),l=await this.getLiteralValue(r,W.Namespace.EXOCMD.term("Command_confirmMessage")),u=await this.getLiteralValue(r,W.Namespace.EXOCMD.term("Command_successMessage")),f=await this.getLiteralValue(r,W.Namespace.EXOCMD.term("Command_category")),d=await this.getLiteralValue(r,W.Namespace.EXOCMD.term("Command_openInSameTab")),h=d!==null&&String(d).trim().toLowerCase()==="true",p=await this.loadLinkedPrecondition(r),g=await this.loadLinkedGrounding(r,0,t);return g?{id:e,name:s,labelTemplate:o??void 0,icon:c??void 0,precondition:p??void 0,grounding:g,confirmMessage:l??void 0,successMessage:u??void 0,category:f??void 0,openInSameTab:h||void 0}:null}async findBindings(e,t,r){let i=await this.tripleStore.match(void 0,W.Namespace.RDF.term("type"),W.Namespace.EXOCMD.term("CommandBinding")),s=[];for(let o of i){let c=o.subject,l=await this.loadBindingDefinition(c);l&&this.bindingMatches(l,e,t,r)&&s.push(l)}return s}async findPaletteEnabledCommands(){let e=await this.tripleStore.match(void 0,W.Namespace.RDF.term("type"),W.Namespace.EXOCMD.term("Command")),t=[],r=new Set;for(let i of e){let s=i.subject;if((await this.getLiteralValue(s,W.Namespace.EXOCMD.term("Command_paletteEnabled")))?.toLowerCase()!=="true")continue;let c=await this.getLiteralValue(s,W.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,W.Namespace.EXOCMD.term("Command_paletteId")),f=await this.getLiteralValue(s,W.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 p8.ExoQLParser().parse(r),c=new m8.ExoQLAlgebraTranslator().translate(s),u=await new g8.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 Ut.Literal||h instanceof Zt.IRI?h.value:String(h):""}catch{return""}}async loadBindingDefinition(e){let t=await this.getLiteralValue(e,W.Namespace.EXO.term("Asset_uid"));if(!t)return null;let r=await this.getLiteralValue(e,W.Namespace.EXO.term("Asset_label"))??"",i=await this.getLinkedUID(e,W.Namespace.EXOCMD.term("CommandBinding_command"));if(!i)return null;let s=await this.getLinkedValue(e,W.Namespace.EXOCMD.term("CommandBinding_targetClass")),o=await this.getLinkedValue(e,W.Namespace.EXOCMD.term("CommandBinding_targetPrototype")),c=await this.getLinkedValue(e,W.Namespace.EXOCMD.term("CommandBinding_targetAsset"));if(!s&&!o&&!c)return null;let l=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("CommandBinding_position")),u=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("CommandBinding_order")),f=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("CommandBinding_variant")),d=f!==null?this.coerceVariant(f,t):void 0,h=await this.loadLinkedPreconditionFromProperty(e,W.Namespace.EXOCMD.term("CommandBinding_precondition")),p=await this.loadLinkedStyle(e,t),g=await this.getLinkedUIDs(e,W.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:g.length>0?g:void 0}}async loadLinkedStyle(e,t){let r=await this.tripleStore.match(e,W.Namespace.EXOCMD.term("CommandBinding_style"),void 0);if(r.length>0){let s=r[0].object,o=null;if(s instanceof Zt.IRI)o=s;else if(s instanceof Ut.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,W.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,W.Namespace.EXO.term("Asset_uid"));if(!t)return null;let r=await this.getLiteralValue(e,W.Namespace.EXO.term("Asset_label"))??"",i=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("CommandBindingStyle_variant")),s=i!==null?this.coerceVariant(i,t):void 0,o=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("CommandBindingStyle_showIcon")),c=this.coerceBoolean(o),l=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("CommandBindingStyle_labelClass")),u=l!==null?this.coerceLabelClass(l,t):void 0,f=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("CommandBindingStyle_ariaLabel")),d=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("CommandBindingStyle_tooltip")),h=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("CommandBindingStyle_keyboardShortcut")),p=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("CommandBindingStyle_source")),g=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:g,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){return!!(e.targetAsset&&i&&this.matchesReference(e.targetAsset,i)||e.targetPrototype&&r&&this.matchesReference(e.targetPrototype,r)||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,W.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=r[0].object,s=null;if(i instanceof Zt.IRI)s=i;else if(i instanceof Ut.Literal){let h=this.normalizeWikilink(i.value);s=await this.findSubjectByUID(h)}if(!s)return null;let o=await this.getLiteralValue(s,W.Namespace.EXO.term("Asset_uid")),c=await this.getLiteralValue(s,W.Namespace.EXO.term("Asset_label"))??"",l=await this.getLiteralValue(s,W.Namespace.EXOCMD.term("Precondition_sparqlAsk")),u=await this.getLiteralValue(s,W.Namespace.EXOCMD.term("Precondition_hostFunction")),f=await this.tripleStore.match(s,W.Namespace.EXOCMD.term("Precondition_query"),void 0),d;if(f.length>0){let h=f[0].object;if(h instanceof Zt.IRI){let p=await this.getLiteralValue(h,W.Namespace.EXO.term("Asset_uid"));p&&(d=p)}else h instanceof Ut.Literal&&(d=this.normalizeWikilink(h.value))}return!o||!l&&!u&&!d?null:{id:o,label:c,...l&&{sparqlAsk:l},...u&&{hostFunction:u},...d&&{query:d}}}async loadLinkedGrounding(e,t,r){if(t>=qf)return null;let i=await this.tripleStore.match(e,W.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,W.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 Zt.IRI)return e;if(e instanceof Ut.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>=qf)return null;let r=await this.getLiteralValue(e,W.Namespace.EXO.term("Asset_uid"));if(!r)return null;let i=await this.getLiteralValue(e,W.Namespace.EXO.term("Asset_label"))??"",s=await this.resolveGroundingTypeReference(e);if(!s)return null;let o=await this.getObsidianName(e,W.Namespace.EXOCMD.term("Grounding_targetProperty"));if(o&&this.looksLikeUUID(o)){let Q=await this.resolveLabelByUID(o);if(!Q)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=Q}if(s===GC.GroundingType.SERVICE_CALL){let Q=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_serviceId"));Q&&(o=Q)}let c=await this.getObsidianName(e,W.Namespace.EXOCMD.term("Grounding_targetValueRef")),l=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_targetValueLiteral")),u=await this.getObsidianName(e,W.Namespace.EXOCMD.term("Grounding_targetValueSubstitution")),f=null;if(u&&this.looksLikeUUID(u)){let Q=await this.resolveLabelByUID(u);if(!Q)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=Q}else u&&(f=u);let d=await this.getObsidianName(e,W.Namespace.EXOCMD.term("Grounding_targetValueQuery")),h=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_serviceCallPayload")),p=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_appendExpression")),g=await this.getObsidianWikilinkValue(e,W.Namespace.EXOCMD.term("Grounding_isDefinedBy")),y=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_sparqlUpdate")),b=await this.getObsidianName(e,W.Namespace.EXOCMD.term("Grounding_targetClass"));if(b&&!this.looksLikeUUID(b)){let Q=await this.findUidByLabel(b);Q&&(b=Q)}let S=await this.getObsidianName(e,W.Namespace.EXOCMD.term("Grounding_targetPrototype")),v=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_targetFolder")),I=await this.getObsidianName(e,W.Namespace.EXOCMD.term("Grounding_linkBackProperty")),A=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_inputSchema")),T=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_incrementBy")),R=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_shiftDelta")),V;if(T!=null&&T!==""){let Q=Number.parseInt(String(T),10);Number.isFinite(Q)&&(V=Q)}let L=await this.resolvePropertyDefaults(e,r),P=await this.resolveInheritanceRules(e,r),k=await this.getLiteralValue(e,W.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 O;s===GC.GroundingType.COMPOSITE&&(O=await this.loadCompositeSteps(e,t+1));let J;if(A)try{let Q=JSON.parse(A);Q?.properties&&(J=Object.entries(Q.properties).map(([G,te])=>{let Se=te.type,X=Se==="string"?"text":Se,$e=te.defaultValue!==void 0?te.defaultValue:te.default,Be={name:G,type:X,label:te.title??G,required:Array.isArray(Q.required)&&Q.required.includes(G)};return $e!=null&&(Be.defaultValue=String($e)),typeof te.targetClassUid=="string"&&(Be.targetClassUid=te.targetClassUid),Be}))}catch{}let re=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_prefillLabelWithDate")),Y=re!==null&&String(re).trim().toLowerCase()==="true",ye=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_labelTemplate")),de=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_direction")),le;if(de!=null){let Q=String(de).trim().toLowerCase();Q==="forward"||Q==="rollback"?le=Q:Q!==""&&this.logger.warn(`Grounding ${r}: exocmd__Grounding_direction value '${de}' is not 'forward' or 'rollback' \u2014 treating as undefined (will default to 'forward' at dispatch).`)}let q=await this.getLiteralValue(e,W.Namespace.EXOCMD.term("Grounding_bodyTemplate")),M=await this.getObsidianName(e,W.Namespace.EXOCMD.term("Grounding_templateRef")),je={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:y??void 0,steps:O,targetClass:b??void 0,targetPrototype:S??void 0,targetFolder:v??void 0,linkBackProperty:I??void 0,incrementBy:V,shiftDelta:R??void 0,propertyDefault:L.length>0?L:void 0,inheritanceRule:P.length>0?P:void 0,isDefinedBy:g??void 0,prefillLabelWithDate:Y||void 0,labelTemplate:ye??void 0,direction:le,bodyTemplate:q??void 0,templateRef:M??void 0};return J&&(je.inputSchema=J),je}async loadCompositeSteps(e,t){if(t>=qf)return[];let r=await this.tripleStore.match(e,W.Namespace.EXOCMD.term("Grounding_steps"),void 0),i=[];for(let s of r){let o=null;if(s.object instanceof Zt.IRI)o=s.object;else if(s.object instanceof Ut.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,W.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,W.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,W.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,QC,W.Namespace.EXOCMD.term("Template_propertyDefault")),i=await this.resolveInheritanceRulesForSubject(t,QC,W.Namespace.EXOCMD.term("Template_inheritanceRule"));return this._universalCacheValue={propertyDefaults:r,inheritanceRules:i},this._universalCacheValue}async findUniversalSingleton(){let e=W.Namespace.EXOCMD.term("UniversalDefaultTemplate").value,t=await this.tripleStore.match(void 0,W.Namespace.EXO.term("Instance_class"),void 0),r=[];for(let i of t){let s=!1;if(i.object instanceof Zt.IRI)s=i.object.value===e||i.object.value.includes(YC);else if(i.object instanceof Ut.Literal){let o=this.unwrapWikilink(i.object.value);s=o==="exocmd__UniversalDefaultTemplate"||o===YC}s&&i.subject instanceof Zt.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,W.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,W.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,W.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,W.Namespace.EXOCMD.term("InheritanceRule_targetClassCondition"),void 0),h,p;if(d.length>0){let A=await this.getObsidianName(l,W.Namespace.EXOCMD.term("InheritanceRule_targetClassCondition"));if(!A||!A.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(A)?(p=A,h=await this.resolveLabelByUID(A)??void 0):h=A}let g=await this.tripleStore.match(l,W.Namespace.EXOCMD.term("InheritanceRule_targetClassExclusion"),void 0),y=[],b=[],S=!1;for(let A of g){let T=null;if(A.object instanceof Zt.IRI?T=this.iriToObsidianName(A.object.value)??A.object.value:A.object instanceof Ut.Literal&&(T=this.unwrapWikilink(A.object.value)),!T){S=!0;continue}if(this.looksLikeUUID(T)){b.push(T);let R=await this.resolveLabelByUID(T);R&&y.push(R)}else y.push(T)}if(S){this.logger.warn(`Grounding ${o}: InheritanceRule has unresolvable exocmd__InheritanceRule_targetClassExclusion entry \u2014 entire rule skipped (would otherwise expand scope by silently dropping the excluded class).`);continue}let v=await this.getLiteralValue(l,W.Namespace.EXOCMD.term("InheritanceRule_priority")),I=50;if(v!==null&&v!==""){let A=Number.parseInt(String(v),10);Number.isFinite(A)&&(I=A)}s.push({sourcePropertyName:u,targetPropertyName:f,targetClassCondition:h,targetClassConditionUid:p,targetClassExclusion:y,targetClassExclusionUids:b,priority:I})}return s}async resolveRefTripleObject(e){if(e instanceof Zt.IRI)return e;if(e instanceof Ut.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,W.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 zC.has(c)?s!==void 0?S8(c,t,s):v8.has(c)?r1.parseTimeResolve(c):_8(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(zC).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.toISOString().slice(0,10);case"todayStart":return new Date(new Date().setHours(0,0,0,0)).toISOString();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,W.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,W.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,W.Namespace.EXO.term("Instance_class"),void 0);for(let r of t)if(r.object instanceof Zt.IRI){if(r.object.value===w8||r.object.value.includes(KC))return!0}else if(r.object instanceof Ut.Literal){let i=this.unwrapWikilink(r.object.value);if(i==="exocmd__TokenInvocation"||i===KC)return!0}return!1}async assetIsSubstitutionToken(e){let t=await this.tripleStore.match(e,W.Namespace.EXO.term("Instance_class"),void 0);for(let r of t)if(r.object instanceof Zt.IRI){if(r.object.value===b8||r.object.value.includes(HC))return!0}else if(r.object instanceof Ut.Literal){let i=this.unwrapWikilink(r.object.value);if(i==="exocmd__SubstitutionToken"||i===HC)return!0}return!1}async resolveGroundingTypeReference(e){let t=await this.tripleStore.match(e,W.Namespace.EXOCMD.term("Grounding_type"),void 0);if(t.length===0)return null;let r=t[0].object;if(r instanceof Zt.IRI)return(0,WC.resolveGroundingTypeFromIRI)(r.value);if(r instanceof Ut.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,WC.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 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,W.Namespace.EXO.term("Asset_uid"),void 0);for(let r of t)if(r.object instanceof Ut.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 Ut.Literal||i instanceof Zt.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,W.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,W.Namespace.EXO.term("Asset_uid"));c&&o.add(c);let l=await this.getLiteralValue(s,W.Namespace.EXO.term("Asset_label"));l&&o.add(l);let u=a((h,p)=>{if(o.has(h))return;let g=r.get(h);(g===void 0||p<g)&&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:g}=h;if(g>=qf||i.has(p.value))continue;i.add(p.value);let y=await this.tripleStore.match(p,W.Namespace.EXO.term("Class_superClass"),void 0);for(let b of y){let S=b.object;if(!(S instanceof Zt.IRI))continue;let v=g+1,I=S.value.startsWith("obsidian://vault/"),A=this.iriToObsidianName(S.value);A&&u(A,v);let T=null;if(I?T=S:A&&(T=await this.resolveClassFileIRI(A)),!T)continue;let R=await this.getLiteralValue(T,W.Namespace.EXO.term("Asset_uid"));R&&u(R,v),i.has(T.value)||f.push({fileIRI:T,depth:v})}}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,W.Namespace.EXO.term("Asset_label"),void 0);for(let r of t)if(r.object instanceof Ut.Literal&&r.object.value===e&&r.subject instanceof Zt.IRI){let i=await this.tripleStore.match(r.subject,W.Namespace.EXO.term("Asset_uid"),void 0);if(i.length>0&&i[0].object instanceof Ut.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 Zt.IRI){let s=await this.tripleStore.match(i,W.Namespace.EXO.term("Asset_uid"),void 0);return s.length>0&&s[0].object instanceof Ut.Literal?s[0].object.value:i.value.split("/").pop()?.replace(".md","")??null}return i instanceof Ut.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 Zt.IRI){let c=await this.tripleStore.match(o,W.Namespace.EXO.term("Asset_uid"),void 0);if(c.length>0&&c[0].object instanceof Ut.Literal)i.push(c[0].object.value);else{let l=o.value.split("/").pop()?.replace(".md","");l&&i.push(l)}}else if(o instanceof Ut.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 Ut.Literal?this.normalizeWikilink(i.value):i instanceof Zt.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 Ut.Literal?this.unwrapWikilink(i.value):i instanceof Zt.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 Ut.Literal)return this.resolveWikilinkAlias(i.value);if(i instanceof Zt.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,W.Namespace.EXO.term("Asset_label"));return s?e.replace(`[[${r}]]`,`[[${r}|${s}]]`):e}iriToObsidianName(e){return(0,h8.iriToObsidianName)(e)}normalizeWikilink(e){let t=e.replace(/["'[\]]/g,"").trim(),r=t.indexOf("|");return r>=0?t.substring(0,r):t}};uo.CommandResolver=n1;uo.CommandResolver=n1=r1=c8([(0,u8.injectable)(),l8("design:paramtypes",[Object,Object])],n1)});var s1=w(i1=>{"use strict";Object.defineProperty(i1,"__esModule",{value:!0});i1.validateExoQLAllowlist=E8;var Bm=Bf();function E8(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(E8,"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 o1=w(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=w(a1=>{"use strict";Object.defineProperty(a1,"__esModule",{value:!0});a1.evaluateWithExoEval=O8;var T8=bl(),A8=Sl(),I8=Bl(),x8=s1(),R8=o1(),C8=Bf();async function O8(n,e={}){if(typeof n!="string")throw new TypeError("evaluateWithExoEval: sparql must be a string");let r=new T8.ExoQLParser().parse(n);if((0,x8.validateExoQLAllowlist)(r),!{...R8.DEFAULT_EVAL_CONFIG,...e.config??{}}.enabled)throw new C8.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 A8.ExoQLAlgebraTranslator().translate(r),l=new I8.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(O8,"evaluateWithExoEval")});var Gf=w(Wm=>{"use strict";Object.defineProperty(Wm,"__esModule",{value:!0});Wm.liveClock=P8;Wm.frozenClock=F8;function P8(){return{now:a(()=>new Date,"now")}}a(P8,"liveClock");function F8(n){let e=new Date(n);return{now:a(()=>new Date(e.getTime()),"now")}}a(F8,"frozenClock")});var ZC=w(fo=>{"use strict";var D8=fo&&fo.__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},L8=fo&&fo.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},Wf;Object.defineProperty(fo,"__esModule",{value:!0});fo.PreconditionEvaluator=void 0;var N8=Ve(),k8=bl(),M8=Sl(),JC=Bl(),j8=Gm(),$8=Gf(),Hf=Wf=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,$8.liveClock)()}async evaluate(e,t,r){return e?e.sparqlAsk?this.evaluateSparqlAsk(e.sparqlAsk,t):e.query?this.evaluateQueryRef(e.query,t):e.hostFunction?this.evaluateHostFunction(e.hostFunction,t,r):!0:!0}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,j8.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,Wf.SENTINEL_IRI),i=new k8.ExoQLParser().parse(t),o=new M8.ExoQLAlgebraTranslator().translate(i);return new JC.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=this.askCache.get(e);if(r===void 0){let o=this.compileAsk(e);if(!o)return!1;r=o,this.askCache.set(e,r)}let i=JSON.parse(JSON.stringify(r).replaceAll(Wf.SENTINEL_IRI,t));return await new JC.ExoQLQueryExecutor(this.tripleStore).executeAsk(i)}catch{return!1}}substituteVariables(e,t){let r=this.clock.now(),i=r.toISOString(),s=i.slice(0,10),o=new Date(r.getTime()+Wf.ALMATY_OFFSET_MS),c=o.getUTCFullYear(),l=o.getUTCMonth(),u=o.getUTCDate(),f=o.getUTCDay(),h=new Date(Date.UTC(c,l,u-1)).toISOString().slice(0,10),p=(f+6)%7,g=new Date(Date.UTC(c,l,u-p)),y=g.toISOString().slice(0,10),S=new Date(g.getTime()-10080*60*1e3).toISOString().slice(0,10),v=`${c}-${String(l+1).padStart(2,"0")}-01`,I=l===0?11:l-1,T=`${l===0?c-1:c}-${String(I+1).padStart(2,"0")}-01`,R=`${c}-01-01`;return e.replace(/\$target/g,`<${t}>`).replace(/\$now/g,`"${i}"^^xsd:dateTime`).replace(/\$yesterday/g,`"${h}"^^xsd:date`).replace(/\$thisWeekStart/g,`"${y}"^^xsd:date`).replace(/\$lastWeekStart/g,`"${S}"^^xsd:date`).replace(/\$thisMonthStart/g,`"${v}"^^xsd:date`).replace(/\$lastMonthStart/g,`"${T}"^^xsd:date`).replace(/\$thisYearStart/g,`"${R}"^^xsd:date`).replace(/\$today/g,`"${s}"^^xsd:date`)}};fo.PreconditionEvaluator=Hf;Hf.SENTINEL_IRI="urn:exocortex:cache-sentinel:target";Hf.ALMATY_OFFSET_MS=300*60*1e3;fo.PreconditionEvaluator=Hf=Wf=D8([(0,N8.injectable)(),L8("design:paramtypes",[Object,Object,Object])],Hf)});var eO=w(ho=>{"use strict";Object.defineProperty(ho,"__esModule",{value:!0});ho.hasUidFilename=ho.hasNonUidFilename=void 0;ho.registerDefaultHostFunctions=V8;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");ho.hasNonUidFilename=U8;var B8=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");ho.hasUidFilename=B8;function V8(n){n.registerHostFunction("hasNonUidFilename",ho.hasNonUidFilename),n.registerHostFunction("hasUidFilename",ho.hasUidFilename)}a(V8,"registerDefaultHostFunctions")});var zm=w(Hm=>{"use strict";Object.defineProperty(Hm,"__esModule",{value:!0});Hm.liveUidGenerator=q8;Hm.seededUidGenerator=W8;var c1=Ii();function q8(){return{next:a(()=>(0,c1.v4)(),"next")}}a(q8,"liveUidGenerator");var G8="6ba7b810-9dad-11d1-80b4-00c04fd430c8";function W8(n){let e=0,t=(0,c1.v5)(n,G8);return{next:a(()=>{let r=`${n}#${e}`;return e+=1,(0,c1.v5)(r,t)},"next")}}a(W8,"seededUidGenerator")});var Qm=w(ca=>{"use strict";Object.defineProperty(ca,"__esModule",{value:!0});ca.registerResolver=ar;ca.getResolver=H8;ca.isResolverModifierAware=z8;ca.getRegisteredResolverIds=K8;ca.clearResolvers=Y8;ca.installDefaultResolvers=sB;var Ym=new Map,l1=new Set;function ar(n,e,t=!1){Ym.set(n,e),t&&l1.add(n)}a(ar,"registerResolver");function H8(n){return Ym.get(n)}a(H8,"getResolver");function z8(n){return l1.has(n)}a(z8,"isResolverModifierAware");function K8(){return Array.from(Ym.keys())}a(K8,"getRegisteredResolverIds");function Y8(){Ym.clear(),l1.clear()}a(Y8,"clearResolvers");function yn(n){return n<10?`0${n}`:String(n)}a(yn,"pad2");var Q8=["January","February","March","April","May","June","July","August","September","October","November","December"],X8=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],J8=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],Z8=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];function eB(n){let e=["th","st","nd","rd"],t=n%100;return`${n}${e[(t-20)%10]||e[t]||e[0]}`}a(eB,"ordinalDay");var tB=/YYYY|YY|MMMM|MMM|MM|M|Do|DD|D|dddd|ddd|HH|H|hh|h|mm|m|ss|s|A|a/g;function rB(n,e){let t=(n.getHours()+11)%12+1;return e.replace(tB,r=>{switch(r){case"YYYY":return String(n.getFullYear());case"YY":return yn(n.getFullYear()%100);case"MMMM":return Q8[n.getMonth()];case"MMM":return X8[n.getMonth()];case"MM":return yn(n.getMonth()+1);case"M":return String(n.getMonth()+1);case"Do":return eB(n.getDate());case"DD":return yn(n.getDate());case"D":return String(n.getDate());case"dddd":return J8[n.getDay()];case"ddd":return Z8[n.getDay()];case"HH":return yn(n.getHours());case"H":return String(n.getHours());case"hh":return yn(t);case"h":return String(t);case"mm":return yn(n.getMinutes());case"m":return String(n.getMinutes());case"ss":return yn(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(rB,"formatDate");function tO(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(tO,"addMonthsClamped");function nB(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=tO(s,r,"M");break;case"y":s=tO(s,r,"y");break}return isNaN(s.getTime())?n:s}a(nB,"applyDateOffset");function iB(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(iB,"parseDateModifier");function Km(n,e){return(t,r)=>{let{offset:i,format:s}=iB(r),o=new Date;return n!==0&&o.setDate(o.getDate()+n),o=nB(o,i),rB(o,s??e)}}a(Km,"makeDateResolver");function sB(){ar("today",()=>new Date().toISOString().slice(0,10)),ar("todayStart",()=>new Date(new Date().setHours(0,0,0,0)).toISOString()),ar("date",Km(0,"YYYY-MM-DD"),!0),ar("now",Km(0,"YYYY-MM-DDTHH:mm:ss"),!0),ar("tomorrow",Km(1,"YYYY-MM-DD"),!0),ar("yesterday",Km(-1,"YYYY-MM-DD"),!0),ar("target",n=>n.targetIRI?`"[[${n.targetIRI}]]"`:""),ar("targetFolder",n=>{if(!n.targetFilePath)return"";let e=n.targetFilePath.replace(/^\/+/,""),t=e.lastIndexOf("/");return t>=0?e.slice(0,t):""}),ar("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.")}),ar("nowTimestamp",()=>{let n=new Date;return`${n.getFullYear()}-${yn(n.getMonth()+1)}-${yn(n.getDate())}T${yn(n.getHours())}:${yn(n.getMinutes())}:${yn(n.getSeconds())}`}),ar("nowDate",()=>{let n=new Date;return`${n.getFullYear()}-${yn(n.getMonth()+1)}-${yn(n.getDate())}`}),ar("nowYear",()=>String(new Date().getFullYear())),ar("nowMonth",()=>yn(new Date().getMonth()+1)),ar("userInputLabel",n=>{let e=n.userInput?.label;return typeof e=="string"?e:""}),ar("userInput",(n,e)=>{if(!e)return null;let t=n.userInput?.[e];return typeof t=="string"?t:t==null?null:String(t)}),ar("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)}),ar("labelAsArray",n=>{let e=n.userInput?.label;return typeof e=="string"&&e.length>0?[e]:[]}),ar("groundingTargetClass",n=>n.groundingTargetClassUid?`"[[${n.groundingTargetClassUid}]]"`:null),ar("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(sB,"installDefaultResolvers")});var f1=w(Xm=>{"use strict";Object.defineProperty(Xm,"__esModule",{value:!0});Xm.resolveTemplateBody=aB;Xm.stripTemplateFrontmatter=cB;var u1=Qm();(0,u1.installDefaultResolvers)();var oB=/\$([A-Za-z][A-Za-z0-9_]*)((?:[+-]\d+[dwMy])?(?::[A-Za-z0-9:./-]+)?)/g;function aB(n,e={}){return n.replace(oB,(t,r,i)=>{let s=(0,u1.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,u1.isResolverModifierAware)(r)?o:o+i})}a(aB,"resolveTemplateBody");function cB(n){let e=n.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);return e?n.slice(e[0].length):n}a(cB,"stripTemplateFrontmatter")});var zf=w(ql=>{"use strict";Object.defineProperty(ql,"__esModule",{value:!0});ql.registerOrderSpecLoader=lB;ql.clearOrderSpecLoader=uB;ql.loadDefaultSpec=fB;ql.orderProperties=dB;var Jm=null,la,Zm=!1;function lB(n){Jm=n,la=void 0,Zm=!1}a(lB,"registerOrderSpecLoader");function uB(){Jm=null,la=void 0,Zm=!1}a(uB,"clearOrderSpecLoader");function fB(){if(la!==void 0)return la;if(!Jm)return la=null,null;try{la=Jm()}catch(n){Zm||(console.warn("[OrderSpecResolver] loader threw, falling back to insertion order:",n),Zm=!0),la=null}return la}a(fB,"loadDefaultSpec");function dB(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(dB,"orderProperties")});var d1=w(fc=>{"use strict";Object.defineProperty(fc,"__esModule",{value:!0});fc.STRING_SCALAR_PROPERTIES=void 0;fc.needsYamlQuoting=rO;fc.quoteYamlString=nO;fc.serializeYamlScalar=vB;var hB=/^[-!&*?|>%@`"'#,[\]{}]/,pB=/[\u0000-\u001f\u007f]/,mB=/^(?:true|True|TRUE|false|False|FALSE)$/,gB=/^(?:null|Null|NULL|~)$/,yB=/^[-+]?(?:0b[01_]+|0o[0-7_]+|0x[0-9a-fA-F_]+|[0-9][0-9_]*)$/,bB=/^(?:[-+]?[0-9][0-9_]*(?:\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\.(?:inf|Inf|INF)|\.(?:nan|NaN|NAN))$/,_B=/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;fc.STRING_SCALAR_PROPERTIES=new Set(["exo__Asset_label","aliases"]);function SB(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(SB,"isCompleteDoubleQuotedScalar");function wB(n){return mB.test(n)||gB.test(n)||yB.test(n)||bB.test(n)||_B.test(n)}a(wB,"looksLikeNonStringScalar");function rO(n,e=!1){return n===""?!0:SB(n)?!1:!!(n!==n.trim()||/:(\s|$)/.test(n)||/\s#/.test(n)||hB.test(n)||pB.test(n)||e&&wB(n))}a(rO,"needsYamlQuoting");function nO(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(nO,"quoteYamlString");function vB(n,e=!1){return typeof n!="string"?String(n):rO(n,e)?nO(n):n}a(vB,"serializeYamlScalar")});var Es=w(eg=>{"use strict";Object.defineProperty(eg,"__esModule",{value:!0});eg.FrontmatterService=void 0;var iO=zf(),h1=d1(),Kf=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
|
---
|
|
@@ -636,7 +636,7 @@ Duplicate bindings (${n.duplicates.length}) \u2014 uid claimed by >1 test (warni
|
|
|
636
636
|
Skipped floor check for ${n.unknownPriority} requirement(s) with unparseable priority (fail-open).`),n.clean?e==="hard"&&!n.rampReady?console.error(`
|
|
637
637
|
FAIL (hard gate): ramp not ready \u2014 ${n.p0Orphans} P0 requirement(s) unbound`+(n.p0Total===0?" (no P0 requirements found)":"")+"."):console.log(`
|
|
638
638
|
OK: no hard findings (dangling tags + binding-class floor are clean).`):console.error(`
|
|
639
|
-
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(Tae,"renderText");function Aae(n,e,t){return!n.clean||t&&n.orphans.length>0||e==="hard"&&!n.rampReady}a(Aae,"isHardFail");function r9(){return new _e("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";ce.setFormat(e);let t=n.gate==="hard"?"hard":"soft";try{let r=(0,Ma.resolve)(n.reqs);if(!(0,ja.existsSync)(r)||!(0,ja.statSync)(r).isDirectory())throw new qe(r);let i=(0,Ma.resolve)(n.tests??".");if(!(0,ja.existsSync)(i)||!(0,ja.statSync)(i).isDirectory())throw new qe(i);let[s,o]=await Promise.all([_ae(r),wae(i)]),c=vae(s,o);e==="json"?console.log(JSON.stringify({...c,gate:t},null,2)):Tae(c,t),Aae(c,t,n.strict===!0)&&(process.exitCode=1)}catch(r){ce.handle(r)}})}a(r9,"requirementsAuditCommand");function n9(){let n=new _e("requirements").description("Requirements-management tooling (RFC 0003): traceability checker");return n.addCommand(r9()),n}a(n9,"requirementsCommand");function Ib(n){let e=new _e;return e.name("exocortex").description("CLI tool for Exocortex knowledge management system").version(n??"16.156.
|
|
639
|
+
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(Tae,"renderText");function Aae(n,e,t){return!n.clean||t&&n.orphans.length>0||e==="hard"&&!n.rampReady}a(Aae,"isHardFail");function r9(){return new _e("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";ce.setFormat(e);let t=n.gate==="hard"?"hard":"soft";try{let r=(0,Ma.resolve)(n.reqs);if(!(0,ja.existsSync)(r)||!(0,ja.statSync)(r).isDirectory())throw new qe(r);let i=(0,Ma.resolve)(n.tests??".");if(!(0,ja.existsSync)(i)||!(0,ja.statSync)(i).isDirectory())throw new qe(i);let[s,o]=await Promise.all([_ae(r),wae(i)]),c=vae(s,o);e==="json"?console.log(JSON.stringify({...c,gate:t},null,2)):Tae(c,t),Aae(c,t,n.strict===!0)&&(process.exitCode=1)}catch(r){ce.handle(r)}})}a(r9,"requirementsAuditCommand");function n9(){let n=new _e("requirements").description("Requirements-management tooling (RFC 0003): traceability checker");return n.addCommand(r9()),n}a(n9,"requirementsCommand");function Ib(n){let e=new _e;return e.name("exocortex").description("CLI tool for Exocortex knowledge management system").version(n??"16.156.7"),e.addCommand(Q4()),e.addCommand(oj()),e.addCommand(zM()),e.addCommand(XM()),e.addCommand(_4()),e.addCommand(JM()),e.addCommand(v4()),e.addCommand(P4()),e.addCommand(D4()),e.addCommand(z4()),e.addCommand(vj()),e.addCommand(Aj()),e.addCommand(Vj()),e.addCommand(Gj()),e.addCommand(zj()),e.addCommand(Kj()),e.addCommand(Jj()),e.addCommand(Fj()),e.addCommand($j()),e.addCommand(n9()),e}a(Ib,"createProgram");Ib().parse();0&&(module.exports={createProgram});
|
|
640
640
|
/*! Bundled license information:
|
|
641
641
|
|
|
642
642
|
reflect-metadata/Reflect.js:
|
package/package.json
CHANGED