@kitelev/exocortex-cli 16.27.2 → 16.27.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +3 -3
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- // @kitelev/exocortex-cli v16.27.2
2
+ // @kitelev/exocortex-cli v16.27.4
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 Xc(`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 Xc(`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 a=e.variables[0],c=e.bindings.map(l=>{let u=l[a];return u?this.generateValuesTerm(u):"UNDEF"}).join(" ");return`${r}VALUES ?${a} { ${c} }`}let i=e.variables.map(a=>`?${a}`).join(" "),s=e.bindings.map(a=>`(${e.variables.map(l=>{let u=a[l];return u?this.generateValuesTerm(u):"UNDEF"}).join(" ")})`);return`${r}VALUES (${i}) {
68
68
  ${s.map(a=>`${r} ${a}`).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 Xc(`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}}};Jc.SPARQLGenerator=$1});var el=b(Rn=>{"use strict";var q9=Rn&&Rn.__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:o(function(){return e[t]},"get")}),Object.defineProperty(n,r,i)}):(function(n,e,t,r){r===void 0&&(r=t),n[r]=e[t]})),W9=Rn&&Rn.__setModuleDefault||(Object.create?(function(n,e){Object.defineProperty(n,"default",{enumerable:!0,value:e})}):function(n,e){n.default=e}),AA=Rn&&Rn.__importStar||(function(){var n=o(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"&&q9(t,e,r[i]);return W9(t,e),t}})();Object.defineProperty(Rn,"__esModule",{value:!0});Rn.QueryExecutor=Rn.ExoQLQueryExecutor=Rn.QueryExecutorError=void 0;var G9=s1(),z9=pp(),H9=T1(),Q9=I1(),K9=pA(),Y9=gA(),X9=bA(),J9=k1(),Z9=vA(),e5=EA(),t5=TA(),r5=Te(),n5=Me(),i5=op(),kr="http://www.w3.org/2001/XMLSchema#",s5=new Set([`${kr}integer`,`${kr}decimal`,`${kr}float`,`${kr}double`,`${kr}nonPositiveInteger`,`${kr}negativeInteger`,`${kr}long`,`${kr}int`,`${kr}short`,`${kr}byte`,`${kr}nonNegativeInteger`,`${kr}unsignedLong`,`${kr}unsignedInt`,`${kr}unsignedShort`,`${kr}unsignedByte`,`${kr}positiveInteger`]),Zc=class extends Error{static{o(this,"QueryExecutorError")}constructor(e,t){super(e,t?{cause:t}:void 0),this.name="QueryExecutorError"}};Rn.QueryExecutorError=Zc;var Ep=class{static{o(this,"ExoQLQueryExecutor")}constructor(e,t={}){this.tripleStore=e,this.bgpExecutor=new G9.BGPExecutor(e),this.filterExecutor=new z9.FilterExecutor,this.optionalExecutor=new H9.OptionalExecutor,this.unionExecutor=new Q9.UnionExecutor,this.minusExecutor=new K9.MinusExecutor,this.valuesExecutor=new Y9.ValuesExecutor,this.aggregateExecutor=new X9.AggregateExecutor,this.constructExecutor=new J9.ConstructExecutor,this.serviceExecutor=new Z9.ServiceExecutor(t.serviceConfig),this.graphExecutor=new e5.GraphExecutor(e),this.sparqlGenerator=new t5.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 Zc(`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 a of this.execute(e.left))t.push(a);if(t.length===0)return;let r=new Set;for(let a of t)for(let c of a.variables())r.add(c);let i=this.collectOperationVariables(e.right);if([...r].some(a=>i.has(a)))for(let a of t){let c=this.substituteVariables(e.right,a);for await(let l of this.execute(c)){let u=a.merge(l);u!==null&&(yield u)}}else{let a=[];for await(let c of this.execute(e.right))a.push(c);for(let c of t)for(let l of a){let u=c.merge(l);u!==null&&(yield u)}}}async*executeLeftJoin(e){let t=[];for await(let a of this.execute(e.left))t.push(a);let r=[];for await(let a of this.execute(e.right))r.push(a);async function*i(){for(let a of t)yield a}o(i,"leftGen");async function*s(){for(let a of r)yield a}o(s,"rightGen"),yield*this.optionalExecutor.execute(i(),s())}async*executeUnion(e){let t=[];for await(let a of this.execute(e.left))t.push(a);let r=[];for await(let a of this.execute(e.right))r.push(a);async function*i(){for(let a of t)yield a}o(i,"leftGen");async function*s(){for(let a of r)yield a}o(s,"rightGen"),yield*this.unionExecutor.execute(i(),s())}async*executeMinus(e){let t=[];for await(let a of this.execute(e.left))t.push(a);let r=[];for await(let a of this.execute(e.right))r.push(a);async function*i(){for(let a of t)yield a}o(i,"leftGen");async function*s(){for(let a of r)yield a}o(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(()=>AA(is())),r=new Set(e.variables);for await(let i of this.execute(e.input)){let s=new t;for(let a of i.variables())if(r.has(a)){let c=i.get(a);c!==void 0&&s.set(a,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 a=this.getExpressionValue(s.expression,r),c=this.getExpressionValue(s.expression,i),l=0;if(a===void 0&&c===void 0?l=0:a===void 0?l=1:c===void 0?l=-1:typeof a=="number"&&typeof c=="number"?l=a-c:l=String(a).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(a=>this.filterExecutor.evaluateExpression(a,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 a=r.merge(s);a!==null&&(yield a)}}}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 r5.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(()=>AA(is()));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 n5.Literal){let i=r.datatype?.value;if(i===`${kr}dayTimeDuration`)try{return i5.DateTimeFunctions.parseDayTimeDuration(r.value)}catch{return r.value}if(i&&s5.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 Zc("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 Zc("executeAsk requires an ASK operation");for await(let t of this.execute(e.where))return!0;return!1}};Rn.ExoQLQueryExecutor=Ep;Rn.QueryExecutor=Ep});var PA=b(Hs=>{"use strict";var a5=Hs&&Hs.__decorate||function(n,e,t,r){var i=arguments.length,s=i<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,a;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--)(a=n[c])&&(s=(i<3?a(s):i>3?a(e,t,s):a(e,t))||s);return i>3&&s&&Object.defineProperty(e,t,s),s},o5=Hs&&Hs.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},B1;Object.defineProperty(Hs,"__esModule",{value:!0});Hs.CommandResolver=void 0;var c5=Ae(),l5=wc(),br=Te(),Jt=Me(),F=Yt(),V1=_o(),tl=r0(),Tp=v3(),u5=Dc(),f5=Lc(),d5=el(),U1=10,IA="08cec529-90eb-4d43-88de-ceecccea12b0",h5=F.Namespace.EXOCMD.term("SubstitutionToken").value,xA=new Set(["today","todayStart","targetFolder","target","randomUUIDv4","nowTimestamp","nowDate","nowYear","nowMonth","userInputLabel","userInput","targetProperty","labelAsArray","groundingTargetClass"]);function p5(n,e){return`__SUBSTITUTE__${n}__${e}__`}o(p5,"buildSubstitutionMarker");function m5(n,e,t){let r=Buffer.from(t,"utf-8").toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"");return`__SUBSTITUTE_P__${n}__${e}__${r}__`}o(m5,"buildParameterisedMarker");var CA="3f28af98-c031-4718-8ba2-44ad0b012c52",g5=F.Namespace.EXOCMD.term("TokenInvocation").value,RA="29e2c8f8-2d27-4e58-b467-2e85d46f8122",OA="universal-default-template",y5=new Set(["today","todayStart","nowTimestamp","nowDate","nowYear","nowMonth"]),q1=B1=class{static{o(this,"CommandResolver")}clearUniversalCache(){this._universalCacheReady=!1,this._universalCacheValue=null,(0,Tp.clearUniversalDefault)()}constructor(e,t=l5.NullLogger){this.tripleStore=e,this.logger=t,this.cache=new Map,this.multiCache=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??""}`,a=this.multiCache.get(s);if(a)return a;let c=new Set,l=[];for(let u of t){let f=await this.resolveForAsset(e,u,r);for(let d of f)c.has(d.binding.id)||(c.add(d.binding.id),l.push(d))}return l.sort((u,f)=>{let d=this.getBindingPriority(u.binding),h=this.getBindingPriority(f.binding);return d!==h?d-h:(u.binding.order??100)-(f.binding.order??100)}),this.multiCache.set(s,l),l}async resolveForAsset(e,t,r){let i=`${e}:${t}:${r??""}`,s=this.cache.get(i);if(s)return s;let a=await this.findBindings(t,r,e),c=[];for(let l of a){let u=await this.loadCommand(l.commandRef);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){let t=await this.findSubjectByUID(e);if(!t||(await this.tripleStore.match(t,F.Namespace.RDF.term("type"),F.Namespace.EXOCMD.term("Command"))).length===0)return null;let i=await this.getLiteralValue(t,F.Namespace.EXO.term("Asset_label"))??"Unknown Command",s=await this.getLiteralValue(t,F.Namespace.EXOCMD.term("Command_labelTemplate")),a=await this.getLiteralValue(t,F.Namespace.EXOCMD.term("Command_icon")),c=await this.getLiteralValue(t,F.Namespace.EXOCMD.term("Command_confirmMessage")),l=await this.getLiteralValue(t,F.Namespace.EXOCMD.term("Command_successMessage")),u=await this.getLiteralValue(t,F.Namespace.EXOCMD.term("Command_category")),f=await this.loadLinkedPrecondition(t),d=await this.loadLinkedGrounding(t,0);return d?{id:e,name:i,labelTemplate:s??void 0,icon:a??void 0,precondition:f??void 0,grounding:d,confirmMessage:c??void 0,successMessage:l??void 0,category:u??void 0}:null}async findBindings(e,t,r){let i=await this.tripleStore.match(void 0,F.Namespace.RDF.term("type"),F.Namespace.EXOCMD.term("CommandBinding")),s=[];for(let a of i){let c=a.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,F.Namespace.RDF.term("type"),F.Namespace.EXOCMD.term("Command")),t=[],r=new Set;for(let i of e){let s=i.subject;if((await this.getLiteralValue(s,F.Namespace.EXOCMD.term("Command_paletteEnabled")))?.toLowerCase()!=="true")continue;let c=await this.getLiteralValue(s,F.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,F.Namespace.EXOCMD.term("Command_paletteId")),f=await this.getLiteralValue(s,F.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()}async resolveLabel(e,t){if(!e.labelTemplate)return e.name;let r=e.labelTemplate,i=this.extractPlaceholders(e.labelTemplate);for(let{full:s,body:a}of i){let c=await this.evaluateSelectSnippet(a,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 a=e.slice(r,s),c=e.slice(r+1,s-1);t.push({full:a,body:c})}r=s}else r++;return t}async evaluateSelectSnippet(e,t){try{let r=e.replace(/\$target/g,`<${t}>`),s=new u5.ExoQLParser().parse(r),c=new f5.ExoQLAlgebraTranslator().translate(s),u=await new d5.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 Jt.Literal||h instanceof br.IRI?h.value:String(h):""}catch{return""}}async loadBindingDefinition(e){let t=await this.getLiteralValue(e,F.Namespace.EXO.term("Asset_uid"));if(!t)return null;let r=await this.getLiteralValue(e,F.Namespace.EXO.term("Asset_label"))??"",i=await this.getLinkedUID(e,F.Namespace.EXOCMD.term("CommandBinding_command"));if(!i)return null;let s=await this.getLinkedValue(e,F.Namespace.EXOCMD.term("CommandBinding_targetClass")),a=await this.getLinkedValue(e,F.Namespace.EXOCMD.term("CommandBinding_targetPrototype")),c=await this.getLinkedValue(e,F.Namespace.EXOCMD.term("CommandBinding_targetAsset"));if(!s&&!a&&!c)return null;let l=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("CommandBinding_position")),u=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("CommandBinding_order")),f=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("CommandBinding_variant")),d=f!==null?this.coerceVariant(f,t):void 0,h=await this.loadLinkedPreconditionFromProperty(e,F.Namespace.EXOCMD.term("CommandBinding_precondition")),p=await this.loadLinkedStyle(e,t);return{id:t,label:r,commandRef:i,targetClass:s??void 0,targetPrototype:a??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}}async loadLinkedStyle(e,t){let r=await this.tripleStore.match(e,F.Namespace.EXOCMD.term("CommandBinding_style"),void 0);if(r.length>0){let s=r[0].object,a=null;if(s instanceof br.IRI)a=s;else if(s instanceof Jt.Literal){let c=this.normalizeWikilink(s.value);a=await this.findSubjectByUID(c)}if(a){let c=await this.loadStyleAsset(a);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,F.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,F.Namespace.EXO.term("Asset_uid"));if(!t)return null;let r=await this.getLiteralValue(e,F.Namespace.EXO.term("Asset_label"))??"",i=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("CommandBindingStyle_variant")),s=i!==null?this.coerceVariant(i,t):void 0,a=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("CommandBindingStyle_showIcon")),c=this.coerceBoolean(a),l=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("CommandBindingStyle_labelClass")),u=l!==null?this.coerceLabelClass(l,t):void 0,f=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("CommandBindingStyle_ariaLabel")),d=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("CommandBindingStyle_tooltip")),h=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("CommandBindingStyle_keyboardShortcut")),p=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("CommandBindingStyle_source")),y=p!==null?this.coerceStyleSource(p,t):void 0;return{id:t,label:r,variant:s,showIcon:c,labelClass:u,ariaLabel:f??void 0,tooltip:d??void 0,keyboardShortcut:h??void 0,source:y,inline:!1}}coerceVariant(e,t){if(e==null)return;let r=String(e).trim().toLowerCase();if(r!==""){if(tl.COMMAND_VARIANT_VALUES.includes(r))return r;this.logger.warn(this.capWarning(`CommandBindingStyle variant "${r}" not in whitelist [${tl.COMMAND_VARIANT_VALUES.join(",")}]; dropped (asset ${t})`))}}coerceLabelClass(e,t){if(e==null)return;let r=String(e).trim().toLowerCase();if(r!==""){if(tl.LABEL_CLASS_VALUES.includes(r))return r;this.logger.warn(this.capWarning(`CommandBindingStyle labelClass "${r}" not in whitelist [${tl.LABEL_CLASS_VALUES.join(",")}]; dropped (asset ${t})`))}}coerceStyleSource(e,t){if(e==null)return;let r=String(e).trim().toLowerCase();if(r!==""){if(tl.STYLE_SOURCE_VALUES.includes(r))return r;this.logger.warn(this.capWarning(`CommandBindingStyle source "${r}" not in whitelist [${tl.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 a=this.extractPathBasename(r);if(a&&a===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,F.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 br.IRI)s=i;else if(i instanceof Jt.Literal){let h=this.normalizeWikilink(i.value);s=await this.findSubjectByUID(h)}if(!s)return null;let a=await this.getLiteralValue(s,F.Namespace.EXO.term("Asset_uid")),c=await this.getLiteralValue(s,F.Namespace.EXO.term("Asset_label"))??"",l=await this.getLiteralValue(s,F.Namespace.EXOCMD.term("Precondition_sparqlAsk")),u=await this.getLiteralValue(s,F.Namespace.EXOCMD.term("Precondition_hostFunction")),f=await this.tripleStore.match(s,F.Namespace.EXOCMD.term("Precondition_query"),void 0),d;if(f.length>0){let h=f[0].object;if(h instanceof br.IRI){let p=await this.getLiteralValue(h,F.Namespace.EXO.term("Asset_uid"));p&&(d=p)}else h instanceof Jt.Literal&&(d=this.normalizeWikilink(h.value))}return!a||!l&&!u&&!d?null:{id:a,label:c,...l&&{sparqlAsk:l},...u&&{hostFunction:u},...d&&{query:d}}}async loadLinkedGrounding(e,t){if(t>=U1)return null;let r=await this.tripleStore.match(e,F.Namespace.EXOCMD.term("Command_grounding"),void 0);if(r.length===0)return null;let i=r[0].object,s=null;if(i instanceof br.IRI)s=i;else if(i instanceof Jt.Literal){let a=this.normalizeWikilink(i.value);s=await this.findSubjectByUID(a)}return s?this.loadGroundingDefinition(s,t):null}async loadGroundingDefinition(e,t){if(t>=U1)return null;let r=await this.getLiteralValue(e,F.Namespace.EXO.term("Asset_uid"));if(!r)return null;let i=await this.getLiteralValue(e,F.Namespace.EXO.term("Asset_label"))??"",s=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("Grounding_type"));if(!s)return null;let a=this.resolveGroundingType(s);if(!a)return null;let c=await this.getObsidianName(e,F.Namespace.EXOCMD.term("Grounding_targetProperty"));if(c&&this.looksLikeUUID(c)){let le=await this.resolveLabelByUID(c);if(!le)return this.logger.warn(`Grounding ${r}: targetProperty wikilink UID '${c}' is not resolvable to exo__Asset_label \u2014 grounding skipped (would otherwise write a UUID-named frontmatter key).`),null;c=le}if(a===V1.GroundingType.SERVICE_CALL){let le=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("Grounding_serviceId"));le&&(c=le)}let l=await this.getObsidianName(e,F.Namespace.EXOCMD.term("Grounding_targetValueRef")),u=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("Grounding_targetValueLiteral")),f=await this.getObsidianName(e,F.Namespace.EXOCMD.term("Grounding_targetValueSubstitution")),d=null;if(f&&this.looksLikeUUID(f)){let le=await this.resolveLabelByUID(f);if(!le)return this.logger.warn(`Grounding ${r}: targetValueSubstitution UID '${f}' is not resolvable to exo__Asset_label (SubstitutionToken instance missing or unlabelled) \u2014 grounding skipped.`),null;d=le}else f&&(d=f);let h=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("Grounding_serviceCallPayload")),p=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("Grounding_appendExpression")),y=await this.getObsidianWikilinkValue(e,F.Namespace.EXOCMD.term("Grounding_isDefinedBy")),S=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("Grounding_sparqlUpdate")),w=await this.getObsidianName(e,F.Namespace.EXOCMD.term("Grounding_targetClass"));if(w&&!this.looksLikeUUID(w)){let le=await this.findUidByLabel(w);le&&(w=le)}let v=await this.getObsidianName(e,F.Namespace.EXOCMD.term("Grounding_targetPrototype")),E=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("Grounding_targetFolder")),I=await this.getObsidianName(e,F.Namespace.EXOCMD.term("Grounding_linkBackProperty")),k=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("Grounding_inputSchema")),j=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("Grounding_incrementBy")),ee=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("Grounding_shiftDelta")),U;if(j!=null&&j!==""){let le=Number.parseInt(String(j),10);Number.isFinite(le)&&(U=le)}let W=await this.resolvePropertyDefaults(e,r),D=await this.resolveInheritanceRules(e,r),L=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("Grounding_propertyDefaults"));L!==null&&L!==""&&!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 G;a===V1.GroundingType.COMPOSITE&&(G=await this.loadCompositeSteps(e,t+1));let Oe;if(k)try{let le=JSON.parse(k);le?.properties&&(Oe=Object.entries(le.properties).map(([se,X])=>{let q=X.type,st=q==="string"?"text":q,nt=X.defaultValue!==void 0?X.defaultValue:X.default,z={name:se,type:st,label:X.title??se,required:Array.isArray(le.required)&&le.required.includes(se)};return nt!=null&&(z.defaultValue=String(nt)),z}))}catch{}let et=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("Grounding_prefillLabelWithDate")),ft=et!==null&&String(et).trim().toLowerCase()==="true",Ze={id:r,label:i,type:a,targetProperty:c??void 0,targetValueRef:l??void 0,targetValueLiteral:u??void 0,targetValueSubstitution:d??void 0,serviceCallPayload:h??void 0,appendExpression:p??void 0,sparqlUpdate:S??void 0,steps:G,targetClass:w??void 0,targetPrototype:v??void 0,targetFolder:E??void 0,linkBackProperty:I??void 0,incrementBy:U,shiftDelta:ee??void 0,propertyDefault:W.length>0?W:void 0,inheritanceRule:D.length>0?D:void 0,isDefinedBy:y??void 0,prefillLabelWithDate:ft||void 0};return Oe&&(Ze.inputSchema=Oe),Ze}async loadCompositeSteps(e,t){if(t>=U1)return[];let r=await this.tripleStore.match(e,F.Namespace.EXOCMD.term("Grounding_steps"),void 0),i=[];for(let s of r){let a=null;if(s.object instanceof br.IRI)a=s.object;else if(s.object instanceof Jt.Literal){let l=this.normalizeWikilink(s.object.value);a=await this.findSubjectByUID(l)}if(!a)continue;let c=await this.loadGroundingDefinition(a,t);c&&i.push(c)}return i}async resolvePropertyDefaults(e,t){let r=await this.resolvePropertyDefaultsForSubject(e,t,F.Namespace.EXOCMD.term("Grounding_propertyDefault")),i=await this.getUniversalCache();return i&&i.propertyDefaults.length>0?(0,Tp.mergePropertyDefaults)(i.propertyDefaults,r):r}async resolvePropertyDefaultsForSubject(e,t,r){let i=await this.tripleStore.match(e,r,void 0),s=[];for(let a of i){let c=await this.resolveRefTripleObject(a.object);if(!c)continue;let l=await this.getObsidianName(c,F.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,F.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,Tp.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,OA,F.Namespace.EXOCMD.term("Template_propertyDefault")),i=await this.resolveInheritanceRulesForSubject(t,OA,F.Namespace.EXOCMD.term("Template_inheritanceRule"));return this._universalCacheValue={propertyDefaults:r,inheritanceRules:i},this._universalCacheValue}async findUniversalSingleton(){let e=F.Namespace.EXOCMD.term("UniversalDefaultTemplate").value,t=await this.tripleStore.match(void 0,F.Namespace.EXO.term("Instance_class"),void 0),r=[];for(let i of t){let s=!1;if(i.object instanceof br.IRI)s=i.object.value===e||i.object.value.includes(RA);else if(i.object instanceof Jt.Literal){let a=this.unwrapWikilink(i.object.value);s=a==="exocmd__UniversalDefaultTemplate"||a===RA}s&&i.subject instanceof br.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,F.Namespace.EXOCMD.term("Grounding_inheritanceRule")),i=await this.getUniversalCache();return i&&i.inheritanceRules.length>0?(0,Tp.mergeInheritanceRules)(i.inheritanceRules,r):r}async resolveInheritanceRulesForSubject(e,t,r){let i=await this.tripleStore.match(e,r,void 0),s=[],a=t;for(let c of i){let l=await this.resolveRefTripleObject(c.object);if(!l)continue;let u=await this.resolveLabelRef(l,F.Namespace.EXOCMD.term("InheritanceRule_sourceProperty"));if(!u){this.logger.warn(`Grounding ${a}: InheritanceRule missing/unresolvable exocmd__InheritanceRule_sourceProperty \u2014 entry skipped.`);continue}let f=await this.resolveLabelRef(l,F.Namespace.EXOCMD.term("InheritanceRule_targetProperty"));if(!f){this.logger.warn(`Grounding ${a}: InheritanceRule missing/unresolvable exocmd__InheritanceRule_targetProperty \u2014 entry skipped.`);continue}let d=await this.tripleStore.match(l,F.Namespace.EXOCMD.term("InheritanceRule_targetClassCondition"),void 0),h;if(d.length>0){let E=await this.resolveLabelRef(l,F.Namespace.EXOCMD.term("InheritanceRule_targetClassCondition"));if(!E){this.logger.warn(`Grounding ${a}: InheritanceRule has exocmd__InheritanceRule_targetClassCondition triple but ref is unresolvable \u2014 entire rule skipped (would otherwise apply unconditionally, broadening scope).`);continue}h=E}let p=await this.tripleStore.match(l,F.Namespace.EXOCMD.term("InheritanceRule_targetClassExclusion"),void 0),y=[],S=!1;for(let E of p){let I=null;if(E.object instanceof br.IRI?I=this.iriToObsidianName(E.object.value)??E.object.value:E.object instanceof Jt.Literal&&(I=this.unwrapWikilink(E.object.value)),!I){S=!0;continue}let k=this.looksLikeUUID(I)?await this.resolveLabelByUID(I):I;if(!k){S=!0;continue}y.push(k)}if(S){this.logger.warn(`Grounding ${a}: InheritanceRule has unresolvable exocmd__InheritanceRule_targetClassExclusion entry \u2014 entire rule skipped (would otherwise expand scope by silently dropping the excluded class).`);continue}let w=await this.getLiteralValue(l,F.Namespace.EXOCMD.term("InheritanceRule_priority")),v=50;if(w!==null&&w!==""){let E=Number.parseInt(String(w),10);Number.isFinite(E)&&(v=E)}s.push({sourcePropertyName:u,targetPropertyName:f,targetClassCondition:h,targetClassExclusion:y,priority:v})}return s}async resolveRefTripleObject(e){if(e instanceof br.IRI)return e;if(e instanceof Jt.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 a=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("SubstitutionToken_resolver"));if(!a||!a.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=a.trim();return xA.has(c)?s!==void 0?m5(c,t,s):y5.has(c)?B1.parseTimeResolve(c):p5(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(xA).join(", ")}.`),`"[[${t}]]"`)}static parseTimeResolve(e){let t=new Date,r=o(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,F.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 a=await this.getLiteralValue(e,F.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,a):(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,F.Namespace.EXO.term("Instance_class"),void 0);for(let r of t)if(r.object instanceof br.IRI){if(r.object.value===g5||r.object.value.includes(CA))return!0}else if(r.object instanceof Jt.Literal){let i=this.unwrapWikilink(r.object.value);if(i==="exocmd__TokenInvocation"||i===CA)return!0}return!1}async assetIsSubstitutionToken(e){let t=await this.tripleStore.match(e,F.Namespace.EXO.term("Instance_class"),void 0);for(let r of t)if(r.object instanceof br.IRI){if(r.object.value===h5||r.object.value.includes(IA))return!0}else if(r.object instanceof Jt.Literal){let i=this.unwrapWikilink(r.object.value);if(i==="exocmd__SubstitutionToken"||i===IA)return!0}return!1}resolveGroundingType(e){let t=e.toLowerCase().trim();return Object.values(V1.GroundingType).includes(t)?t: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,F.Namespace.EXO.term("Asset_uid"),void 0);for(let r of t)if(r.object instanceof Jt.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 Jt.Literal||i instanceof br.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,F.Namespace.EXO.term("Asset_label")):null}async findUidByLabel(e){let t=await this.tripleStore.match(void 0,F.Namespace.EXO.term("Asset_label"),void 0);for(let r of t)if(r.object instanceof Jt.Literal&&r.object.value===e&&r.subject instanceof br.IRI){let i=await this.tripleStore.match(r.subject,F.Namespace.EXO.term("Asset_uid"),void 0);if(i.length>0&&i[0].object instanceof Jt.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 br.IRI){let s=await this.tripleStore.match(i,F.Namespace.EXO.term("Asset_uid"),void 0);return s.length>0&&s[0].object instanceof Jt.Literal?s[0].object.value:i.value.split("/").pop()?.replace(".md","")??null}return i instanceof Jt.Literal?this.normalizeWikilink(i.value):null}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 Jt.Literal?this.normalizeWikilink(i.value):i instanceof br.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 Jt.Literal?this.unwrapWikilink(i.value):i instanceof br.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 Jt.Literal)return this.resolveWikilinkAlias(i.value);if(i instanceof br.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,F.Namespace.EXO.term("Asset_label"));return s?e.replace(`[[${r}]]`,`[[${r}|${s}]]`):e}iriToObsidianName(e){let t=e.lastIndexOf("#");if(t>=0){let i=e.substring(0,t+1),s=e.substring(t+1);if(i===F.Namespace.EMS.iri.value)return`ems__${s}`;if(i===F.Namespace.EXO.iri.value)return`exo__${s}`;if(i===F.Namespace.EXOCMD.iri.value)return`exocmd__${s}`;if(i===F.Namespace.IMS.iri.value)return`ims__${s}`;if(i===F.Namespace.ZTLK.iri.value)return`ztlk__${s}`;if(i===F.Namespace.PTMS.iri.value)return`ptms__${s}`;if(i===F.Namespace.LIT.iri.value)return`lit__${s}`;if(i===F.Namespace.INBOX.iri.value)return`inbox__${s}`}let r=e.match(/\/([^/]+)\.md$/);return r?r[1]:null}normalizeWikilink(e){let t=e.replace(/["'[\]]/g,"").trim(),r=t.indexOf("|");return r>=0?t.substring(0,r):t}};Hs.CommandResolver=q1;Hs.CommandResolver=q1=B1=a5([(0,c5.injectable)(),o5("design:paramtypes",[Object,Object])],q1)});var G1=b(W1=>{"use strict";Object.defineProperty(W1,"__esModule",{value:!0});W1.validateExoQLAllowlist=_5;var Ap=Gu();function _5(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 Ap.ExoQLForbiddenKeywordError("LOAD");throw new Ap.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 Ap.ExoQLForbiddenKeywordError("FROM")}if(Array.isArray(e.where))for(let t of e.where)Ip(t);if(Array.isArray(e.template))for(let t of e.template)Ip(t)}}o(_5,"validateExoQLAllowlist");function Ip(n){if(!n||typeof n!="object")return;if(n.type==="service")throw new Ap.ExoQLForbiddenKeywordError("SERVICE");if(Array.isArray(n.patterns))for(let t of n.patterns)Ip(t);let e=n.where;if(Array.isArray(e))for(let t of e)Ip(t)}o(Ip,"walkPatternForBannedKeywords")});var z1=b(xp=>{"use strict";Object.defineProperty(xp,"__esModule",{value:!0});xp.DEFAULT_EVAL_CONFIG=void 0;xp.DEFAULT_EVAL_CONFIG=Object.freeze({enabled:!0,maxNestedEvalCount:100,maxAggregateEvalMillis:1e4})});var Q1=b(H1=>{"use strict";Object.defineProperty(H1,"__esModule",{value:!0});H1.evaluateWithExoEval=A5;var b5=Dc(),S5=Lc(),v5=el(),w5=G1(),E5=z1(),T5=Gu();async function A5(n,e={}){if(typeof n!="string")throw new TypeError("evaluateWithExoEval: sparql must be a string");let r=new b5.ExoQLParser().parse(n);if((0,w5.validateExoQLAllowlist)(r),!{...E5.DEFAULT_EVAL_CONFIG,...e.config??{}}.enabled)throw new T5.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 S5.ExoQLAlgebraTranslator().translate(r),l=new v5.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)}}o(A5,"evaluateWithExoEval")});var Hu=b(Cp=>{"use strict";Object.defineProperty(Cp,"__esModule",{value:!0});Cp.liveClock=I5;Cp.frozenClock=x5;function I5(){return{now:o(()=>new Date,"now")}}o(I5,"liveClock");function x5(n){let e=new Date(n);return{now:o(()=>new Date(e.getTime()),"now")}}o(x5,"frozenClock")});var FA=b(Qs=>{"use strict";var C5=Qs&&Qs.__decorate||function(n,e,t,r){var i=arguments.length,s=i<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,a;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--)(a=n[c])&&(s=(i<3?a(s):i>3?a(e,t,s):a(e,t))||s);return i>3&&s&&Object.defineProperty(e,t,s),s},R5=Qs&&Qs.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},Qu;Object.defineProperty(Qs,"__esModule",{value:!0});Qs.PreconditionEvaluator=void 0;var O5=Ae(),P5=Dc(),D5=Lc(),DA=el(),F5=Q1(),L5=Hu(),Ku=Qu=class{static{o(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,L5.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,F5.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)}invalidateCache(){this.askCache.clear()}compileAsk(e){let t=this.substituteVariables(e,Qu.SENTINEL_IRI),i=new P5.ExoQLParser().parse(t),a=new D5.ExoQLAlgebraTranslator().translate(i);return new DA.ExoQLQueryExecutor(this.tripleStore).isAskQuery(a)?a:null}evaluateHostFunction(e,t,r){let i=this.hostFunctions.get(e);if(!i)return!0;let s=r?{...r,targetIRI:t}:{targetIRI:t};return i(s)}async evaluateSparqlAsk(e,t){try{let r=this.askCache.get(e);if(r===void 0){let a=this.compileAsk(e);if(!a)return!1;r=a,this.askCache.set(e,r)}let i=JSON.parse(JSON.stringify(r).replaceAll(Qu.SENTINEL_IRI,t));return await new DA.ExoQLQueryExecutor(this.tripleStore).executeAsk(i)}catch{return!1}}substituteVariables(e,t){let r=this.clock.now(),i=r.toISOString(),s=i.slice(0,10),a=new Date(r.getTime()+Qu.ALMATY_OFFSET_MS),c=a.getUTCFullYear(),l=a.getUTCMonth(),u=a.getUTCDate(),f=a.getUTCDay(),h=new Date(Date.UTC(c,l,u-1)).toISOString().slice(0,10),p=(f+6)%7,y=new Date(Date.UTC(c,l,u-p)),S=y.toISOString().slice(0,10),v=new Date(y.getTime()-10080*60*1e3).toISOString().slice(0,10),E=`${c}-${String(l+1).padStart(2,"0")}-01`,I=l===0?11:l-1,j=`${l===0?c-1:c}-${String(I+1).padStart(2,"0")}-01`,ee=`${c}-01-01`;return e.replace(/\$target/g,`<${t}>`).replace(/\$now/g,`"${i}"^^xsd:dateTime`).replace(/\$yesterday/g,`"${h}"^^xsd:date`).replace(/\$thisWeekStart/g,`"${S}"^^xsd:date`).replace(/\$lastWeekStart/g,`"${v}"^^xsd:date`).replace(/\$thisMonthStart/g,`"${E}"^^xsd:date`).replace(/\$lastMonthStart/g,`"${j}"^^xsd:date`).replace(/\$thisYearStart/g,`"${ee}"^^xsd:date`).replace(/\$today/g,`"${s}"^^xsd:date`)}};Qs.PreconditionEvaluator=Ku;Ku.SENTINEL_IRI="urn:exocortex:cache-sentinel:target";Ku.ALMATY_OFFSET_MS=300*60*1e3;Qs.PreconditionEvaluator=Ku=Qu=C5([(0,O5.injectable)(),R5("design:paramtypes",[Object,Object,Object])],Ku)});var LA=b(rl=>{"use strict";Object.defineProperty(rl,"__esModule",{value:!0});rl.hasNonUidFilename=void 0;rl.registerDefaultHostFunctions=k5;var N5=o(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");rl.hasNonUidFilename=N5;function k5(n){n.registerHostFunction("hasNonUidFilename",rl.hasNonUidFilename)}o(k5,"registerDefaultHostFunctions")});var Op=b(Rp=>{"use strict";Object.defineProperty(Rp,"__esModule",{value:!0});Rp.liveUidGenerator=j5;Rp.seededUidGenerator=$5;var K1=di();function j5(){return{next:o(()=>(0,K1.v4)(),"next")}}o(j5,"liveUidGenerator");var M5="6ba7b810-9dad-11d1-80b4-00c04fd430c8";function $5(n){let e=0,t=(0,K1.v5)(n,M5);return{next:o(()=>{let r=`${n}#${e}`;return e+=1,(0,K1.v5)(r,t)},"next")}}o($5,"seededUidGenerator")});var Yu=b(nl=>{"use strict";Object.defineProperty(nl,"__esModule",{value:!0});nl.registerOrderSpecLoader=V5;nl.clearOrderSpecLoader=U5;nl.loadDefaultSpec=B5;nl.orderProperties=q5;var Pp=null,ka,Dp=!1;function V5(n){Pp=n,ka=void 0,Dp=!1}o(V5,"registerOrderSpecLoader");function U5(){Pp=null,ka=void 0,Dp=!1}o(U5,"clearOrderSpecLoader");function B5(){if(ka!==void 0)return ka;if(!Pp)return ka=null,null;try{ka=Pp()}catch(n){Dp||(console.warn("[OrderSpecResolver] loader threw, falling back to insertion order:",n),Dp=!0),ka=null}return ka}o(B5,"loadDefaultSpec");function q5(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)),a=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 a)l[u]=n[u];return l}o(q5,"orderProperties")});var cs=b(Fp=>{"use strict";Object.defineProperty(Fp,"__esModule",{value:!0});Fp.FrontmatterService=void 0;var NA=Yu(),Xu=class n{static{o(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,a=null,c=o(()=>{s!==null&&a!==null&&(r[s]=a),s=null,a=null},"flushArray");for(let l of i){let u=/^ {2}- (.*)$/.exec(l);if(u){s!==null&&a!==null&&a.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,a=[]):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`---
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 Xc(`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}}};Jc.SPARQLGenerator=$1});var el=b(Rn=>{"use strict";var q9=Rn&&Rn.__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:o(function(){return e[t]},"get")}),Object.defineProperty(n,r,i)}):(function(n,e,t,r){r===void 0&&(r=t),n[r]=e[t]})),W9=Rn&&Rn.__setModuleDefault||(Object.create?(function(n,e){Object.defineProperty(n,"default",{enumerable:!0,value:e})}):function(n,e){n.default=e}),AA=Rn&&Rn.__importStar||(function(){var n=o(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"&&q9(t,e,r[i]);return W9(t,e),t}})();Object.defineProperty(Rn,"__esModule",{value:!0});Rn.QueryExecutor=Rn.ExoQLQueryExecutor=Rn.QueryExecutorError=void 0;var G9=s1(),z9=pp(),H9=T1(),Q9=I1(),K9=pA(),Y9=gA(),X9=bA(),J9=k1(),Z9=vA(),e5=EA(),t5=TA(),r5=Te(),n5=Me(),i5=op(),kr="http://www.w3.org/2001/XMLSchema#",s5=new Set([`${kr}integer`,`${kr}decimal`,`${kr}float`,`${kr}double`,`${kr}nonPositiveInteger`,`${kr}negativeInteger`,`${kr}long`,`${kr}int`,`${kr}short`,`${kr}byte`,`${kr}nonNegativeInteger`,`${kr}unsignedLong`,`${kr}unsignedInt`,`${kr}unsignedShort`,`${kr}unsignedByte`,`${kr}positiveInteger`]),Zc=class extends Error{static{o(this,"QueryExecutorError")}constructor(e,t){super(e,t?{cause:t}:void 0),this.name="QueryExecutorError"}};Rn.QueryExecutorError=Zc;var Ep=class{static{o(this,"ExoQLQueryExecutor")}constructor(e,t={}){this.tripleStore=e,this.bgpExecutor=new G9.BGPExecutor(e),this.filterExecutor=new z9.FilterExecutor,this.optionalExecutor=new H9.OptionalExecutor,this.unionExecutor=new Q9.UnionExecutor,this.minusExecutor=new K9.MinusExecutor,this.valuesExecutor=new Y9.ValuesExecutor,this.aggregateExecutor=new X9.AggregateExecutor,this.constructExecutor=new J9.ConstructExecutor,this.serviceExecutor=new Z9.ServiceExecutor(t.serviceConfig),this.graphExecutor=new e5.GraphExecutor(e),this.sparqlGenerator=new t5.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 Zc(`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 a of this.execute(e.left))t.push(a);if(t.length===0)return;let r=new Set;for(let a of t)for(let c of a.variables())r.add(c);let i=this.collectOperationVariables(e.right);if([...r].some(a=>i.has(a)))for(let a of t){let c=this.substituteVariables(e.right,a);for await(let l of this.execute(c)){let u=a.merge(l);u!==null&&(yield u)}}else{let a=[];for await(let c of this.execute(e.right))a.push(c);for(let c of t)for(let l of a){let u=c.merge(l);u!==null&&(yield u)}}}async*executeLeftJoin(e){let t=[];for await(let a of this.execute(e.left))t.push(a);let r=[];for await(let a of this.execute(e.right))r.push(a);async function*i(){for(let a of t)yield a}o(i,"leftGen");async function*s(){for(let a of r)yield a}o(s,"rightGen"),yield*this.optionalExecutor.execute(i(),s())}async*executeUnion(e){let t=[];for await(let a of this.execute(e.left))t.push(a);let r=[];for await(let a of this.execute(e.right))r.push(a);async function*i(){for(let a of t)yield a}o(i,"leftGen");async function*s(){for(let a of r)yield a}o(s,"rightGen"),yield*this.unionExecutor.execute(i(),s())}async*executeMinus(e){let t=[];for await(let a of this.execute(e.left))t.push(a);let r=[];for await(let a of this.execute(e.right))r.push(a);async function*i(){for(let a of t)yield a}o(i,"leftGen");async function*s(){for(let a of r)yield a}o(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(()=>AA(is())),r=new Set(e.variables);for await(let i of this.execute(e.input)){let s=new t;for(let a of i.variables())if(r.has(a)){let c=i.get(a);c!==void 0&&s.set(a,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 a=this.getExpressionValue(s.expression,r),c=this.getExpressionValue(s.expression,i),l=0;if(a===void 0&&c===void 0?l=0:a===void 0?l=1:c===void 0?l=-1:typeof a=="number"&&typeof c=="number"?l=a-c:l=String(a).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(a=>this.filterExecutor.evaluateExpression(a,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 a=r.merge(s);a!==null&&(yield a)}}}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 r5.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(()=>AA(is()));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 n5.Literal){let i=r.datatype?.value;if(i===`${kr}dayTimeDuration`)try{return i5.DateTimeFunctions.parseDayTimeDuration(r.value)}catch{return r.value}if(i&&s5.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 Zc("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 Zc("executeAsk requires an ASK operation");for await(let t of this.execute(e.where))return!0;return!1}};Rn.ExoQLQueryExecutor=Ep;Rn.QueryExecutor=Ep});var PA=b(Hs=>{"use strict";var a5=Hs&&Hs.__decorate||function(n,e,t,r){var i=arguments.length,s=i<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,a;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--)(a=n[c])&&(s=(i<3?a(s):i>3?a(e,t,s):a(e,t))||s);return i>3&&s&&Object.defineProperty(e,t,s),s},o5=Hs&&Hs.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},B1;Object.defineProperty(Hs,"__esModule",{value:!0});Hs.CommandResolver=void 0;var c5=Ae(),l5=wc(),br=Te(),Jt=Me(),F=Yt(),V1=_o(),tl=r0(),Tp=v3(),u5=Dc(),f5=Lc(),d5=el(),U1=10,IA="08cec529-90eb-4d43-88de-ceecccea12b0",h5=F.Namespace.EXOCMD.term("SubstitutionToken").value,xA=new Set(["today","todayStart","targetFolder","target","randomUUIDv4","nowTimestamp","nowDate","nowYear","nowMonth","userInputLabel","userInput","targetProperty","labelAsArray","groundingTargetClass"]);function p5(n,e){return`__SUBSTITUTE__${n}__${e}__`}o(p5,"buildSubstitutionMarker");function m5(n,e,t){let r=Buffer.from(t,"utf-8").toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"");return`__SUBSTITUTE_P__${n}__${e}__${r}__`}o(m5,"buildParameterisedMarker");var CA="3f28af98-c031-4718-8ba2-44ad0b012c52",g5=F.Namespace.EXOCMD.term("TokenInvocation").value,RA="29e2c8f8-2d27-4e58-b467-2e85d46f8122",OA="universal-default-template",y5=new Set(["today","todayStart","nowTimestamp","nowDate","nowYear","nowMonth"]),q1=B1=class{static{o(this,"CommandResolver")}clearUniversalCache(){this._universalCacheReady=!1,this._universalCacheValue=null,(0,Tp.clearUniversalDefault)()}constructor(e,t=l5.NullLogger){this.tripleStore=e,this.logger=t,this.cache=new Map,this.multiCache=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??""}`,a=this.multiCache.get(s);if(a)return a;let c=new Set,l=[];for(let u of t){let f=await this.resolveForAsset(e,u,r);for(let d of f)c.has(d.binding.id)||(c.add(d.binding.id),l.push(d))}return l.sort((u,f)=>{let d=this.getBindingPriority(u.binding),h=this.getBindingPriority(f.binding);return d!==h?d-h:(u.binding.order??100)-(f.binding.order??100)}),this.multiCache.set(s,l),l}async resolveForAsset(e,t,r){let i=`${e}:${t}:${r??""}`,s=this.cache.get(i);if(s)return s;let a=await this.findBindings(t,r,e),c=[];for(let l of a){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,F.Namespace.RDF.term("type"),F.Namespace.EXOCMD.term("Command"))).length===0)return null;let s=await this.getLiteralValue(r,F.Namespace.EXO.term("Asset_label"))??"Unknown Command",a=await this.getLiteralValue(r,F.Namespace.EXOCMD.term("Command_labelTemplate")),c=await this.getLiteralValue(r,F.Namespace.EXOCMD.term("Command_icon")),l=await this.getLiteralValue(r,F.Namespace.EXOCMD.term("Command_confirmMessage")),u=await this.getLiteralValue(r,F.Namespace.EXOCMD.term("Command_successMessage")),f=await this.getLiteralValue(r,F.Namespace.EXOCMD.term("Command_category")),d=await this.loadLinkedPrecondition(r),h=await this.loadLinkedGrounding(r,0,t);return h?{id:e,name:s,labelTemplate:a??void 0,icon:c??void 0,precondition:d??void 0,grounding:h,confirmMessage:l??void 0,successMessage:u??void 0,category:f??void 0}:null}async findBindings(e,t,r){let i=await this.tripleStore.match(void 0,F.Namespace.RDF.term("type"),F.Namespace.EXOCMD.term("CommandBinding")),s=[];for(let a of i){let c=a.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,F.Namespace.RDF.term("type"),F.Namespace.EXOCMD.term("Command")),t=[],r=new Set;for(let i of e){let s=i.subject;if((await this.getLiteralValue(s,F.Namespace.EXOCMD.term("Command_paletteEnabled")))?.toLowerCase()!=="true")continue;let c=await this.getLiteralValue(s,F.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,F.Namespace.EXOCMD.term("Command_paletteId")),f=await this.getLiteralValue(s,F.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()}async resolveLabel(e,t){if(!e.labelTemplate)return e.name;let r=e.labelTemplate,i=this.extractPlaceholders(e.labelTemplate);for(let{full:s,body:a}of i){let c=await this.evaluateSelectSnippet(a,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 a=e.slice(r,s),c=e.slice(r+1,s-1);t.push({full:a,body:c})}r=s}else r++;return t}async evaluateSelectSnippet(e,t){try{let r=e.replace(/\$target/g,`<${t}>`),s=new u5.ExoQLParser().parse(r),c=new f5.ExoQLAlgebraTranslator().translate(s),u=await new d5.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 Jt.Literal||h instanceof br.IRI?h.value:String(h):""}catch{return""}}async loadBindingDefinition(e){let t=await this.getLiteralValue(e,F.Namespace.EXO.term("Asset_uid"));if(!t)return null;let r=await this.getLiteralValue(e,F.Namespace.EXO.term("Asset_label"))??"",i=await this.getLinkedUID(e,F.Namespace.EXOCMD.term("CommandBinding_command"));if(!i)return null;let s=await this.getLinkedValue(e,F.Namespace.EXOCMD.term("CommandBinding_targetClass")),a=await this.getLinkedValue(e,F.Namespace.EXOCMD.term("CommandBinding_targetPrototype")),c=await this.getLinkedValue(e,F.Namespace.EXOCMD.term("CommandBinding_targetAsset"));if(!s&&!a&&!c)return null;let l=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("CommandBinding_position")),u=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("CommandBinding_order")),f=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("CommandBinding_variant")),d=f!==null?this.coerceVariant(f,t):void 0,h=await this.loadLinkedPreconditionFromProperty(e,F.Namespace.EXOCMD.term("CommandBinding_precondition")),p=await this.loadLinkedStyle(e,t);return{id:t,label:r,commandRef:i,targetClass:s??void 0,targetPrototype:a??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}}async loadLinkedStyle(e,t){let r=await this.tripleStore.match(e,F.Namespace.EXOCMD.term("CommandBinding_style"),void 0);if(r.length>0){let s=r[0].object,a=null;if(s instanceof br.IRI)a=s;else if(s instanceof Jt.Literal){let c=this.normalizeWikilink(s.value);a=await this.findSubjectByUID(c)}if(a){let c=await this.loadStyleAsset(a);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,F.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,F.Namespace.EXO.term("Asset_uid"));if(!t)return null;let r=await this.getLiteralValue(e,F.Namespace.EXO.term("Asset_label"))??"",i=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("CommandBindingStyle_variant")),s=i!==null?this.coerceVariant(i,t):void 0,a=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("CommandBindingStyle_showIcon")),c=this.coerceBoolean(a),l=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("CommandBindingStyle_labelClass")),u=l!==null?this.coerceLabelClass(l,t):void 0,f=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("CommandBindingStyle_ariaLabel")),d=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("CommandBindingStyle_tooltip")),h=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("CommandBindingStyle_keyboardShortcut")),p=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("CommandBindingStyle_source")),y=p!==null?this.coerceStyleSource(p,t):void 0;return{id:t,label:r,variant:s,showIcon:c,labelClass:u,ariaLabel:f??void 0,tooltip:d??void 0,keyboardShortcut:h??void 0,source:y,inline:!1}}coerceVariant(e,t){if(e==null)return;let r=String(e).trim().toLowerCase();if(r!==""){if(tl.COMMAND_VARIANT_VALUES.includes(r))return r;this.logger.warn(this.capWarning(`CommandBindingStyle variant "${r}" not in whitelist [${tl.COMMAND_VARIANT_VALUES.join(",")}]; dropped (asset ${t})`))}}coerceLabelClass(e,t){if(e==null)return;let r=String(e).trim().toLowerCase();if(r!==""){if(tl.LABEL_CLASS_VALUES.includes(r))return r;this.logger.warn(this.capWarning(`CommandBindingStyle labelClass "${r}" not in whitelist [${tl.LABEL_CLASS_VALUES.join(",")}]; dropped (asset ${t})`))}}coerceStyleSource(e,t){if(e==null)return;let r=String(e).trim().toLowerCase();if(r!==""){if(tl.STYLE_SOURCE_VALUES.includes(r))return r;this.logger.warn(this.capWarning(`CommandBindingStyle source "${r}" not in whitelist [${tl.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 a=this.extractPathBasename(r);if(a&&a===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,F.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 br.IRI)s=i;else if(i instanceof Jt.Literal){let h=this.normalizeWikilink(i.value);s=await this.findSubjectByUID(h)}if(!s)return null;let a=await this.getLiteralValue(s,F.Namespace.EXO.term("Asset_uid")),c=await this.getLiteralValue(s,F.Namespace.EXO.term("Asset_label"))??"",l=await this.getLiteralValue(s,F.Namespace.EXOCMD.term("Precondition_sparqlAsk")),u=await this.getLiteralValue(s,F.Namespace.EXOCMD.term("Precondition_hostFunction")),f=await this.tripleStore.match(s,F.Namespace.EXOCMD.term("Precondition_query"),void 0),d;if(f.length>0){let h=f[0].object;if(h instanceof br.IRI){let p=await this.getLiteralValue(h,F.Namespace.EXO.term("Asset_uid"));p&&(d=p)}else h instanceof Jt.Literal&&(d=this.normalizeWikilink(h.value))}return!a||!l&&!u&&!d?null:{id:a,label:c,...l&&{sparqlAsk:l},...u&&{hostFunction:u},...d&&{query:d}}}async loadLinkedGrounding(e,t,r){if(t>=U1)return null;let i=await this.tripleStore.match(e,F.Namespace.EXOCMD.term("Command_grounding"),void 0);if(i.length===0)return null;if(i.length===1||!r?.targetClass){let a=await this.resolveGroundingRef(i[0].object);return a?this.loadGroundingDefinition(a,t):null}for(let a of i){let c=await this.resolveGroundingRef(a.object);if(!c)continue;let l=await this.getObsidianName(c,F.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 br.IRI)return e;if(e instanceof Jt.Literal){let t=this.normalizeWikilink(e.value);return await this.findSubjectByUID(t)}return null}async loadGroundingDefinition(e,t){if(t>=U1)return null;let r=await this.getLiteralValue(e,F.Namespace.EXO.term("Asset_uid"));if(!r)return null;let i=await this.getLiteralValue(e,F.Namespace.EXO.term("Asset_label"))??"",s=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("Grounding_type"));if(!s)return null;let a=this.resolveGroundingType(s);if(!a)return null;let c=await this.getObsidianName(e,F.Namespace.EXOCMD.term("Grounding_targetProperty"));if(c&&this.looksLikeUUID(c)){let le=await this.resolveLabelByUID(c);if(!le)return this.logger.warn(`Grounding ${r}: targetProperty wikilink UID '${c}' is not resolvable to exo__Asset_label \u2014 grounding skipped (would otherwise write a UUID-named frontmatter key).`),null;c=le}if(a===V1.GroundingType.SERVICE_CALL){let le=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("Grounding_serviceId"));le&&(c=le)}let l=await this.getObsidianName(e,F.Namespace.EXOCMD.term("Grounding_targetValueRef")),u=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("Grounding_targetValueLiteral")),f=await this.getObsidianName(e,F.Namespace.EXOCMD.term("Grounding_targetValueSubstitution")),d=null;if(f&&this.looksLikeUUID(f)){let le=await this.resolveLabelByUID(f);if(!le)return this.logger.warn(`Grounding ${r}: targetValueSubstitution UID '${f}' is not resolvable to exo__Asset_label (SubstitutionToken instance missing or unlabelled) \u2014 grounding skipped.`),null;d=le}else f&&(d=f);let h=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("Grounding_serviceCallPayload")),p=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("Grounding_appendExpression")),y=await this.getObsidianWikilinkValue(e,F.Namespace.EXOCMD.term("Grounding_isDefinedBy")),S=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("Grounding_sparqlUpdate")),w=await this.getObsidianName(e,F.Namespace.EXOCMD.term("Grounding_targetClass"));if(w&&!this.looksLikeUUID(w)){let le=await this.findUidByLabel(w);le&&(w=le)}let v=await this.getObsidianName(e,F.Namespace.EXOCMD.term("Grounding_targetPrototype")),E=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("Grounding_targetFolder")),I=await this.getObsidianName(e,F.Namespace.EXOCMD.term("Grounding_linkBackProperty")),k=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("Grounding_inputSchema")),j=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("Grounding_incrementBy")),ee=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("Grounding_shiftDelta")),U;if(j!=null&&j!==""){let le=Number.parseInt(String(j),10);Number.isFinite(le)&&(U=le)}let W=await this.resolvePropertyDefaults(e,r),D=await this.resolveInheritanceRules(e,r),L=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("Grounding_propertyDefaults"));L!==null&&L!==""&&!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 G;a===V1.GroundingType.COMPOSITE&&(G=await this.loadCompositeSteps(e,t+1));let Oe;if(k)try{let le=JSON.parse(k);le?.properties&&(Oe=Object.entries(le.properties).map(([se,X])=>{let q=X.type,st=q==="string"?"text":q,nt=X.defaultValue!==void 0?X.defaultValue:X.default,z={name:se,type:st,label:X.title??se,required:Array.isArray(le.required)&&le.required.includes(se)};return nt!=null&&(z.defaultValue=String(nt)),z}))}catch{}let et=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("Grounding_prefillLabelWithDate")),ft=et!==null&&String(et).trim().toLowerCase()==="true",Ze={id:r,label:i,type:a,targetProperty:c??void 0,targetValueRef:l??void 0,targetValueLiteral:u??void 0,targetValueSubstitution:d??void 0,serviceCallPayload:h??void 0,appendExpression:p??void 0,sparqlUpdate:S??void 0,steps:G,targetClass:w??void 0,targetPrototype:v??void 0,targetFolder:E??void 0,linkBackProperty:I??void 0,incrementBy:U,shiftDelta:ee??void 0,propertyDefault:W.length>0?W:void 0,inheritanceRule:D.length>0?D:void 0,isDefinedBy:y??void 0,prefillLabelWithDate:ft||void 0};return Oe&&(Ze.inputSchema=Oe),Ze}async loadCompositeSteps(e,t){if(t>=U1)return[];let r=await this.tripleStore.match(e,F.Namespace.EXOCMD.term("Grounding_steps"),void 0),i=[];for(let s of r){let a=null;if(s.object instanceof br.IRI)a=s.object;else if(s.object instanceof Jt.Literal){let l=this.normalizeWikilink(s.object.value);a=await this.findSubjectByUID(l)}if(!a)continue;let c=await this.loadGroundingDefinition(a,t);c&&i.push(c)}return i}async resolvePropertyDefaults(e,t){let r=await this.resolvePropertyDefaultsForSubject(e,t,F.Namespace.EXOCMD.term("Grounding_propertyDefault")),i=await this.getUniversalCache();return i&&i.propertyDefaults.length>0?(0,Tp.mergePropertyDefaults)(i.propertyDefaults,r):r}async resolvePropertyDefaultsForSubject(e,t,r){let i=await this.tripleStore.match(e,r,void 0),s=[];for(let a of i){let c=await this.resolveRefTripleObject(a.object);if(!c)continue;let l=await this.getObsidianName(c,F.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,F.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,Tp.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,OA,F.Namespace.EXOCMD.term("Template_propertyDefault")),i=await this.resolveInheritanceRulesForSubject(t,OA,F.Namespace.EXOCMD.term("Template_inheritanceRule"));return this._universalCacheValue={propertyDefaults:r,inheritanceRules:i},this._universalCacheValue}async findUniversalSingleton(){let e=F.Namespace.EXOCMD.term("UniversalDefaultTemplate").value,t=await this.tripleStore.match(void 0,F.Namespace.EXO.term("Instance_class"),void 0),r=[];for(let i of t){let s=!1;if(i.object instanceof br.IRI)s=i.object.value===e||i.object.value.includes(RA);else if(i.object instanceof Jt.Literal){let a=this.unwrapWikilink(i.object.value);s=a==="exocmd__UniversalDefaultTemplate"||a===RA}s&&i.subject instanceof br.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,F.Namespace.EXOCMD.term("Grounding_inheritanceRule")),i=await this.getUniversalCache();return i&&i.inheritanceRules.length>0?(0,Tp.mergeInheritanceRules)(i.inheritanceRules,r):r}async resolveInheritanceRulesForSubject(e,t,r){let i=await this.tripleStore.match(e,r,void 0),s=[],a=t;for(let c of i){let l=await this.resolveRefTripleObject(c.object);if(!l)continue;let u=await this.resolveLabelRef(l,F.Namespace.EXOCMD.term("InheritanceRule_sourceProperty"));if(!u){this.logger.warn(`Grounding ${a}: InheritanceRule missing/unresolvable exocmd__InheritanceRule_sourceProperty \u2014 entry skipped.`);continue}let f=await this.resolveLabelRef(l,F.Namespace.EXOCMD.term("InheritanceRule_targetProperty"));if(!f){this.logger.warn(`Grounding ${a}: InheritanceRule missing/unresolvable exocmd__InheritanceRule_targetProperty \u2014 entry skipped.`);continue}let d=await this.tripleStore.match(l,F.Namespace.EXOCMD.term("InheritanceRule_targetClassCondition"),void 0),h;if(d.length>0){let E=await this.resolveLabelRef(l,F.Namespace.EXOCMD.term("InheritanceRule_targetClassCondition"));if(!E){this.logger.warn(`Grounding ${a}: InheritanceRule has exocmd__InheritanceRule_targetClassCondition triple but ref is unresolvable \u2014 entire rule skipped (would otherwise apply unconditionally, broadening scope).`);continue}h=E}let p=await this.tripleStore.match(l,F.Namespace.EXOCMD.term("InheritanceRule_targetClassExclusion"),void 0),y=[],S=!1;for(let E of p){let I=null;if(E.object instanceof br.IRI?I=this.iriToObsidianName(E.object.value)??E.object.value:E.object instanceof Jt.Literal&&(I=this.unwrapWikilink(E.object.value)),!I){S=!0;continue}let k=this.looksLikeUUID(I)?await this.resolveLabelByUID(I):I;if(!k){S=!0;continue}y.push(k)}if(S){this.logger.warn(`Grounding ${a}: InheritanceRule has unresolvable exocmd__InheritanceRule_targetClassExclusion entry \u2014 entire rule skipped (would otherwise expand scope by silently dropping the excluded class).`);continue}let w=await this.getLiteralValue(l,F.Namespace.EXOCMD.term("InheritanceRule_priority")),v=50;if(w!==null&&w!==""){let E=Number.parseInt(String(w),10);Number.isFinite(E)&&(v=E)}s.push({sourcePropertyName:u,targetPropertyName:f,targetClassCondition:h,targetClassExclusion:y,priority:v})}return s}async resolveRefTripleObject(e){if(e instanceof br.IRI)return e;if(e instanceof Jt.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 a=await this.getLiteralValue(e,F.Namespace.EXOCMD.term("SubstitutionToken_resolver"));if(!a||!a.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=a.trim();return xA.has(c)?s!==void 0?m5(c,t,s):y5.has(c)?B1.parseTimeResolve(c):p5(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(xA).join(", ")}.`),`"[[${t}]]"`)}static parseTimeResolve(e){let t=new Date,r=o(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,F.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 a=await this.getLiteralValue(e,F.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,a):(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,F.Namespace.EXO.term("Instance_class"),void 0);for(let r of t)if(r.object instanceof br.IRI){if(r.object.value===g5||r.object.value.includes(CA))return!0}else if(r.object instanceof Jt.Literal){let i=this.unwrapWikilink(r.object.value);if(i==="exocmd__TokenInvocation"||i===CA)return!0}return!1}async assetIsSubstitutionToken(e){let t=await this.tripleStore.match(e,F.Namespace.EXO.term("Instance_class"),void 0);for(let r of t)if(r.object instanceof br.IRI){if(r.object.value===h5||r.object.value.includes(IA))return!0}else if(r.object instanceof Jt.Literal){let i=this.unwrapWikilink(r.object.value);if(i==="exocmd__SubstitutionToken"||i===IA)return!0}return!1}resolveGroundingType(e){let t=e.toLowerCase().trim();return Object.values(V1.GroundingType).includes(t)?t: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,F.Namespace.EXO.term("Asset_uid"),void 0);for(let r of t)if(r.object instanceof Jt.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 Jt.Literal||i instanceof br.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,F.Namespace.EXO.term("Asset_label")):null}async findUidByLabel(e){let t=await this.tripleStore.match(void 0,F.Namespace.EXO.term("Asset_label"),void 0);for(let r of t)if(r.object instanceof Jt.Literal&&r.object.value===e&&r.subject instanceof br.IRI){let i=await this.tripleStore.match(r.subject,F.Namespace.EXO.term("Asset_uid"),void 0);if(i.length>0&&i[0].object instanceof Jt.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 br.IRI){let s=await this.tripleStore.match(i,F.Namespace.EXO.term("Asset_uid"),void 0);return s.length>0&&s[0].object instanceof Jt.Literal?s[0].object.value:i.value.split("/").pop()?.replace(".md","")??null}return i instanceof Jt.Literal?this.normalizeWikilink(i.value):null}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 Jt.Literal?this.normalizeWikilink(i.value):i instanceof br.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 Jt.Literal?this.unwrapWikilink(i.value):i instanceof br.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 Jt.Literal)return this.resolveWikilinkAlias(i.value);if(i instanceof br.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,F.Namespace.EXO.term("Asset_label"));return s?e.replace(`[[${r}]]`,`[[${r}|${s}]]`):e}iriToObsidianName(e){let t=e.lastIndexOf("#");if(t>=0){let i=e.substring(0,t+1),s=e.substring(t+1);if(i===F.Namespace.EMS.iri.value)return`ems__${s}`;if(i===F.Namespace.EXO.iri.value)return`exo__${s}`;if(i===F.Namespace.EXOCMD.iri.value)return`exocmd__${s}`;if(i===F.Namespace.IMS.iri.value)return`ims__${s}`;if(i===F.Namespace.ZTLK.iri.value)return`ztlk__${s}`;if(i===F.Namespace.PTMS.iri.value)return`ptms__${s}`;if(i===F.Namespace.LIT.iri.value)return`lit__${s}`;if(i===F.Namespace.INBOX.iri.value)return`inbox__${s}`}let r=e.match(/\/([^/]+)\.md$/);return r?r[1]:null}normalizeWikilink(e){let t=e.replace(/["'[\]]/g,"").trim(),r=t.indexOf("|");return r>=0?t.substring(0,r):t}};Hs.CommandResolver=q1;Hs.CommandResolver=q1=B1=a5([(0,c5.injectable)(),o5("design:paramtypes",[Object,Object])],q1)});var G1=b(W1=>{"use strict";Object.defineProperty(W1,"__esModule",{value:!0});W1.validateExoQLAllowlist=_5;var Ap=Gu();function _5(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 Ap.ExoQLForbiddenKeywordError("LOAD");throw new Ap.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 Ap.ExoQLForbiddenKeywordError("FROM")}if(Array.isArray(e.where))for(let t of e.where)Ip(t);if(Array.isArray(e.template))for(let t of e.template)Ip(t)}}o(_5,"validateExoQLAllowlist");function Ip(n){if(!n||typeof n!="object")return;if(n.type==="service")throw new Ap.ExoQLForbiddenKeywordError("SERVICE");if(Array.isArray(n.patterns))for(let t of n.patterns)Ip(t);let e=n.where;if(Array.isArray(e))for(let t of e)Ip(t)}o(Ip,"walkPatternForBannedKeywords")});var z1=b(xp=>{"use strict";Object.defineProperty(xp,"__esModule",{value:!0});xp.DEFAULT_EVAL_CONFIG=void 0;xp.DEFAULT_EVAL_CONFIG=Object.freeze({enabled:!0,maxNestedEvalCount:100,maxAggregateEvalMillis:1e4})});var Q1=b(H1=>{"use strict";Object.defineProperty(H1,"__esModule",{value:!0});H1.evaluateWithExoEval=A5;var b5=Dc(),S5=Lc(),v5=el(),w5=G1(),E5=z1(),T5=Gu();async function A5(n,e={}){if(typeof n!="string")throw new TypeError("evaluateWithExoEval: sparql must be a string");let r=new b5.ExoQLParser().parse(n);if((0,w5.validateExoQLAllowlist)(r),!{...E5.DEFAULT_EVAL_CONFIG,...e.config??{}}.enabled)throw new T5.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 S5.ExoQLAlgebraTranslator().translate(r),l=new v5.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)}}o(A5,"evaluateWithExoEval")});var Hu=b(Cp=>{"use strict";Object.defineProperty(Cp,"__esModule",{value:!0});Cp.liveClock=I5;Cp.frozenClock=x5;function I5(){return{now:o(()=>new Date,"now")}}o(I5,"liveClock");function x5(n){let e=new Date(n);return{now:o(()=>new Date(e.getTime()),"now")}}o(x5,"frozenClock")});var FA=b(Qs=>{"use strict";var C5=Qs&&Qs.__decorate||function(n,e,t,r){var i=arguments.length,s=i<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,a;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--)(a=n[c])&&(s=(i<3?a(s):i>3?a(e,t,s):a(e,t))||s);return i>3&&s&&Object.defineProperty(e,t,s),s},R5=Qs&&Qs.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},Qu;Object.defineProperty(Qs,"__esModule",{value:!0});Qs.PreconditionEvaluator=void 0;var O5=Ae(),P5=Dc(),D5=Lc(),DA=el(),F5=Q1(),L5=Hu(),Ku=Qu=class{static{o(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,L5.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,F5.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)}invalidateCache(){this.askCache.clear()}compileAsk(e){let t=this.substituteVariables(e,Qu.SENTINEL_IRI),i=new P5.ExoQLParser().parse(t),a=new D5.ExoQLAlgebraTranslator().translate(i);return new DA.ExoQLQueryExecutor(this.tripleStore).isAskQuery(a)?a:null}evaluateHostFunction(e,t,r){let i=this.hostFunctions.get(e);if(!i)return!0;let s=r?{...r,targetIRI:t}:{targetIRI:t};return i(s)}async evaluateSparqlAsk(e,t){try{let r=this.askCache.get(e);if(r===void 0){let a=this.compileAsk(e);if(!a)return!1;r=a,this.askCache.set(e,r)}let i=JSON.parse(JSON.stringify(r).replaceAll(Qu.SENTINEL_IRI,t));return await new DA.ExoQLQueryExecutor(this.tripleStore).executeAsk(i)}catch{return!1}}substituteVariables(e,t){let r=this.clock.now(),i=r.toISOString(),s=i.slice(0,10),a=new Date(r.getTime()+Qu.ALMATY_OFFSET_MS),c=a.getUTCFullYear(),l=a.getUTCMonth(),u=a.getUTCDate(),f=a.getUTCDay(),h=new Date(Date.UTC(c,l,u-1)).toISOString().slice(0,10),p=(f+6)%7,y=new Date(Date.UTC(c,l,u-p)),S=y.toISOString().slice(0,10),v=new Date(y.getTime()-10080*60*1e3).toISOString().slice(0,10),E=`${c}-${String(l+1).padStart(2,"0")}-01`,I=l===0?11:l-1,j=`${l===0?c-1:c}-${String(I+1).padStart(2,"0")}-01`,ee=`${c}-01-01`;return e.replace(/\$target/g,`<${t}>`).replace(/\$now/g,`"${i}"^^xsd:dateTime`).replace(/\$yesterday/g,`"${h}"^^xsd:date`).replace(/\$thisWeekStart/g,`"${S}"^^xsd:date`).replace(/\$lastWeekStart/g,`"${v}"^^xsd:date`).replace(/\$thisMonthStart/g,`"${E}"^^xsd:date`).replace(/\$lastMonthStart/g,`"${j}"^^xsd:date`).replace(/\$thisYearStart/g,`"${ee}"^^xsd:date`).replace(/\$today/g,`"${s}"^^xsd:date`)}};Qs.PreconditionEvaluator=Ku;Ku.SENTINEL_IRI="urn:exocortex:cache-sentinel:target";Ku.ALMATY_OFFSET_MS=300*60*1e3;Qs.PreconditionEvaluator=Ku=Qu=C5([(0,O5.injectable)(),R5("design:paramtypes",[Object,Object,Object])],Ku)});var LA=b(rl=>{"use strict";Object.defineProperty(rl,"__esModule",{value:!0});rl.hasNonUidFilename=void 0;rl.registerDefaultHostFunctions=k5;var N5=o(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");rl.hasNonUidFilename=N5;function k5(n){n.registerHostFunction("hasNonUidFilename",rl.hasNonUidFilename)}o(k5,"registerDefaultHostFunctions")});var Op=b(Rp=>{"use strict";Object.defineProperty(Rp,"__esModule",{value:!0});Rp.liveUidGenerator=j5;Rp.seededUidGenerator=$5;var K1=di();function j5(){return{next:o(()=>(0,K1.v4)(),"next")}}o(j5,"liveUidGenerator");var M5="6ba7b810-9dad-11d1-80b4-00c04fd430c8";function $5(n){let e=0,t=(0,K1.v5)(n,M5);return{next:o(()=>{let r=`${n}#${e}`;return e+=1,(0,K1.v5)(r,t)},"next")}}o($5,"seededUidGenerator")});var Yu=b(nl=>{"use strict";Object.defineProperty(nl,"__esModule",{value:!0});nl.registerOrderSpecLoader=V5;nl.clearOrderSpecLoader=U5;nl.loadDefaultSpec=B5;nl.orderProperties=q5;var Pp=null,ka,Dp=!1;function V5(n){Pp=n,ka=void 0,Dp=!1}o(V5,"registerOrderSpecLoader");function U5(){Pp=null,ka=void 0,Dp=!1}o(U5,"clearOrderSpecLoader");function B5(){if(ka!==void 0)return ka;if(!Pp)return ka=null,null;try{ka=Pp()}catch(n){Dp||(console.warn("[OrderSpecResolver] loader threw, falling back to insertion order:",n),Dp=!0),ka=null}return ka}o(B5,"loadDefaultSpec");function q5(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)),a=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 a)l[u]=n[u];return l}o(q5,"orderProperties")});var cs=b(Fp=>{"use strict";Object.defineProperty(Fp,"__esModule",{value:!0});Fp.FrontmatterService=void 0;var NA=Yu(),Xu=class n{static{o(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,a=null,c=o(()=>{s!==null&&a!==null&&(r[s]=a),s=null,a=null},"flushArray");for(let l of i){let u=/^ {2}- (.*)$/.exec(l);if(u){s!==null&&a!==null&&a.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,a=[]):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`---
71
71
  ${s}
72
72
  ---
73
73
  ${e}`;let a=i.content;if(this.hasProperty(a,t)){let c=new RegExp(`${this.escapeRegex(t)}:.*(?:
@@ -762,7 +762,7 @@ ${r}`}o(gJ,"serializeFile");function pL(n,e,t={}){let r=oy.default.dirname(n),i=
762
762
  `).map(s=>s.trim()).filter(Boolean)){let s=yJ.exec(i);if(s){r.push({sessionName:i,uuid:s[1],type:"full"});continue}let a=_J.exec(i);a&&r.push({sessionName:i,uuid:a[1],type:"short"})}return r}o(SJ,"listClaudeChildSessions");function vJ(n,e,t){let r=null,i=e.toLowerCase();function s(a){if(r)return;let c;try{c=(0,ly.readdirSync)(a,{withFileTypes:!0})}catch{return}for(let l of c){if(r)return;if(l.name.startsWith(".")||l.name==="node_modules")continue;let u=(0,mL.join)(a,l.name);if(l.isDirectory())s(u);else if(l.name.endsWith(".md")){let f=l.name.slice(0,-3).toLowerCase();(t==="full"&&f===i||t==="short"&&f.startsWith(i))&&(r=u)}}}return o(s,"walk"),s(n),r}o(vJ,"findVaultFile");function wJ(n,e){try{let i=(e??(s=>(0,ly.readFileSync)(s,"utf8")))(n).match(/ems__Effort_status\s*:.*\[\[([^\]]+)\]\]/);return i?i[1].includes(bJ):!1}catch{return!1}}o(wJ,"isTaskDoing");async function yL(n,e=cy.exec,t){let r=await SJ(e),i=[];for(let s of r){let a=vJ(n,s.uuid,s.type);if(!a){i.push({sessionName:s.sessionName,taskUuid:s.uuid,taskFilePath:null,reason:"vault task not found"});continue}wJ(a,t)||i.push({sessionName:s.sessionName,taskUuid:s.uuid,taskFilePath:a,reason:"vault task status != Doing"})}return i}o(yL,"detectOrphans");async function _L(n,e,t=cy.exec,r=pL){let i=gL(t);if(e)return{ok:!0};let s=new Date().toISOString();if(n.taskFilePath)try{r(n.taskFilePath,{ems__Effort_status:"[[ems__EffortStatusFailed]]",aiTask__Task_lastError:`orphan recovery: ${n.reason}`,exo__Asset_updatedAt:s})}catch(a){return{ok:!1,error:`vault update failed: ${a.message}`}}try{await i(`tmux kill-session -t ${JSON.stringify(n.sessionName)}`)}catch{}return{ok:!0}}o(_L,"recoverOrphan");function EJ(){return process.env.EXOCORTEX_VAULT??(0,uy.join)((0,SL.homedir)(),"vault-2025")}o(EJ,"defaultVault");function vL(){return new Ce("recover").description("Detect and recover orphaned claude-child tmux sessions. A session is orphaned when the corresponding vault task is not in Doing status. Default mode: dry-run (no changes). Use --apply to perform recovery.").option("--vault <path>","Path to Obsidian vault",EJ()).option("--dry-run","List orphans without applying changes (default)",!1).option("--apply","Apply orphan recovery: set Failed + kill tmux session",!1).action(async n=>{let e=(0,uy.resolve)(n.vault);if(!(0,bL.existsSync)(e)){console.error(`[recover] vault not found: ${e}`),process.exitCode=1;return}let t=!n.apply;console.log(`[recover] vault=${e} mode=${t?"dry-run":"apply"}`);let r=await yL(e);if(r.length===0){console.log("[recover] No orphaned claude-child sessions found.");return}console.log(`[recover] Found ${r.length} orphan(s):`);for(let a of r){let c=a.taskFilePath??"(not found in vault)";console.log(` session=${a.sessionName} uuid=${a.taskUuid} reason=${a.reason}`),console.log(` file=${c}`)}if(t){console.log("[recover] Dry-run mode: no changes applied. Use --apply to recover.");return}let i=0,s=0;for(let a of r){let c=await _L(a,!1);c.ok?(i++,console.log(`[recover] RECOVERED: ${a.sessionName}`)):(s++,console.error(`[recover] ERROR recovering ${a.sessionName}: ${c.error}`))}console.log(`[recover] Done: recovered=${i} errors=${s}`),s>0&&(process.exitCode=1)})}o(vL,"recoverCommand");var WE=require("fs"),fy=require("path"),Hn=ae(nr());function TJ(n,e){return e.concat([n])}o(TJ,"collectAlso");var AJ="https://exocortex.my/ontology/find#Alias_sparql",IJ="https://exocortex.my/ontology/exo#Asset_label";function su(n){if(n&&typeof n=="object"&&"value"in n){let e=n.value;return typeof e=="string"?e:String(e)}return String(n)}o(su,"nodeValue");async function xJ(n,e){let t=await n.match(void 0,void 0,void 0),r=[];for(let s of t)su(s.predicate)!==IJ||su(s.object)!==e||r.push(su(s.subject));if(r.length===0)return null;let i=[];for(let s of r)for(let a of t)su(a.predicate)===AJ&&su(a.subject)===s&&i.push(su(a.object));if(i.length===0)return null;if(i.length>1)throw new Ut(`Ambiguous find__Alias "${e}" \u2014 ${i.length} instances define a sparql fragment`,`Ensure exactly one find__Alias asset has exo:Asset_label "${e}"`);return i[0]}o(xJ,"resolveAliasFragment");var CJ=/^([a-z][a-zA-Z0-9]*)__([A-Za-z0-9_]+)$/,RJ="https://exocortex.my/ontology/";function OJ(n,e){let t=CJ.exec(e);if(t){let i=`<${RJ}${t[1]}#${t[2]}>`;return n.replace(/\?value\b/g,i)}let r=e.replace(/\\/g,"\\\\").replace(/"/g,'\\"');return n.replace(/\?value\b/g,`"${r}"`)}o(OJ,"bindValueLiteral");function wL(){return new Ce("find").description("Find vault assets via SPARQL \u2014 outputs file paths one per line (RFC 8e83442b T1.1)").option("--vault <path>","Path to Obsidian vault",process.cwd()).option("--also <path>","Additional vault to include (repeatable)",TJ,[]).option("--sparql <query>","SPARQL SELECT query (must bind ?path)").option("--class <value>","Filter by class label via find__Alias 'class' (e.g. ems__Task)").action(async n=>{pe.setFormat("text");try{if(n.sparql&&n.class)throw new Ut("--sparql and --class are mutually exclusive","Pass either a raw --sparql query or a find__Alias-backed flag like --class");if(!n.sparql&&!n.class)throw new Ut("one of --sparql <query> or --class <value> is required",'exocortex find --class ems__Task OR exocortex find --sparql "SELECT ?path WHERE { ... }"');let e=(0,fy.resolve)(n.vault);if(!(0,WE.existsSync)(e))throw new Fe(e);let t=new kt(e),i=await new Hn.NoteToRDFConverter(t).convertVault(),s=n.also||[];for(let v of s){let E=(0,fy.resolve)(v);if(!(0,WE.existsSync)(E))throw new Fe(E);let I=new kt(E),j=await new Hn.NoteToRDFConverter(I).convertVault();i=i.concat(j)}let a=new Hn.InMemoryTripleStore;await a.addAll(i);let c;if(n.class){let v=await xJ(a,"class");if(v===null)throw new Ut('No find__Alias with exo:Asset_label "class" was found in the vault',"Seed a find__Alias asset (label=class) or fall back to exocortex find --sparql");c=`SELECT ?path WHERE { ${OJ(v,n.class)} }`}else c=n.sparql;let l=Xl(c);l=io(l);let u=new Hn.ExoQLParser,f=so(no(e));for(let v of s){let E=so(no((0,fy.resolve)(v)));for(let[I,k]of E)f.has(I)||f.set(I,k)}f.size>0&&u.setVaultPrefixes(f);let d=u.parse(l),p=new Hn.ExoQLAlgebraTranslator().translate(d);p.type!=="construct"&&(p=new Hn.AlgebraOptimizer().optimize(p));let S=await new Hn.ExoQLQueryExecutor(a).executeAll(p),w="obsidian://vault/";for(let v of S){let I=v.toJSON().path;if(typeof I!="string"||!I.startsWith(w))continue;let k=I.slice(w.length),j;try{j=decodeURIComponent(k)}catch{j=k}process.stdout.write(j+`
763
763
  `)}}catch(e){pe.handle(e),process.exit(5)}})}o(wL,"findCommand");var HE=require("fs"),QE=require("path"),Re=ae(nr());var CL=ae(nr()),Dt=ae(AL());var IL="obsidian://vault/";function qJ(n){let e=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;return{async resolveTargetPath(t){if(!t)throw new Error("Cannot resolve empty targetIRI to a vault path");let r=t;if(r.startsWith(IL))r=decodeURI(r.slice(IL.length));else if(e.test(r)){let i=await n.findFileByUID(r);if(!i)throw new Error(`No vault file found for UID: ${r}`);r=i}if(r.endsWith(".md")||(r=`${r}.md`),!await n.fileExists(r))throw new Error(`Cannot resolve target file for IRI "${t}" (tried "${r}")`);return r}}}o(qJ,"createCliPathResolver");var WJ=["openFile","sparqlSelect","getActiveFileIRI","getActiveFilePath","trashFile","duplicateFile"],zE=class extends Error{constructor(t){super(`Service "${t}" is not implemented in the CLI (no-op stub). dyncommand exec on this service_call grounding cannot change vault state. See CLI parity issues #2865-#2868 for port status.`);this.serviceId=t;this.name="CliServiceNotImplementedError"}static{o(this,"CliServiceNotImplementedError")}};function xL(n){return{async execute(){throw new zE(n)}}}o(xL,"notImplementedService");function GJ(n){return e=>{let t=n.getFirstLinkpathDest(e,"");if(!t||!("basename"in t))return null;let i=n.getFrontmatter(t)?.exo__Asset_label;return typeof i=="string"&&i.length>0?i:null}}o(GJ,"createCliClassResolver");function RL(n,e){for(let t of WJ)n.register(t,xL(t));for(let t of["updateProperty","removeProperty","setStatus","createAsset"])n.register(t,xL(t));if(e){if(e.fsAdapter){let t=new CL.FrontmatterService,r=qJ(e.fsAdapter);n.register("updateProperty",(0,Dt.createUpdatePropertyService)(e.fsAdapter,t,r)),n.register("removeProperty",(0,Dt.createRemovePropertyService)(e.fsAdapter,t,r)),n.register("setStatus",(0,Dt.createSetStatusService)(e.fsAdapter,t,r)),n.register("createAsset",(0,Dt.createCreateAssetService)(e.vaultAdapter,e.fsAdapter,GJ(e.vaultAdapter)))}n.register("createRelatedTask",(0,Dt.createCreateRelatedTaskService)(e.vaultAdapter,e.genericAssetCreationService)),n.register("createRelatedProject",(0,Dt.createCreateRelatedProjectService)(e.vaultAdapter,e.genericAssetCreationService)),n.register("archiveAsset",(0,Dt.createArchiveAssetService)(e.vaultAdapter,e.archiveAssetService)),n.register("planForEvening",(0,Dt.createPlanForEveningService)(e.vaultAdapter,e.taskStatusService)),n.register("cleanProperties",(0,Dt.createCleanPropertiesService)(e.vaultAdapter,e.propertyCleanupService)),n.register("renameToUid",(0,Dt.createRenameToUidService)(e.vaultAdapter,e.renameToUidService)),n.register("repairFolder",(0,Dt.createRepairFolderService)(e.vaultAdapter,e.folderRepairService)),n.register("fixMissingLabel",(0,Dt.createFixMissingLabelService)(e.vaultAdapter,e.fixMissingLabelService))}}o(RL,"populateCliServiceRegistry");var zJ=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;async function HJ(){if(process.stdin.isTTY)return[];let n=[];for await(let t of process.stdin)n.push(t);return Buffer.concat(n).toString("utf-8").split(`
764
764
  `).map(t=>t.trim()).filter(t=>t.length>0)}o(HJ,"readStdinLines");function hy(n){if(n&&typeof n=="object"&&"value"in n){let e=n.value;return typeof e=="string"?e:String(e)}return String(n)}o(hy,"nodeValue");async function QJ(n,e){let t=new Re.IRI("https://exocortex.my/ontology/exocmd#Command_cliName"),r=await n.match(void 0,t,void 0),i=[];for(let s of r)if(hy(s.object)===e){let l=hy(s.subject).match(/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.md$/i);l&&i.push(l[1])}if(i.length===0)return null;if(i.length>1)throw new Ut(`Ambiguous cliName "${e}" \u2014 resolves to ${i.length} commands: ${i.join(", ")}`,"Use the UUID directly: exocortex apply <uuid> <path>");return i[0]}o(QJ,"resolveSlugToUuid");async function KJ(n,e){let t=new Re.IRI("https://exocortex.my/ontology/exocmd#Command_destructive"),r=await n.match(void 0,t,void 0);for(let i of r)if(hy(i.subject).includes(e)){let a=hy(i.object);if(a==="true"||a==="True")return!0}return!1}o(KJ,"isDestructive");async function YJ(n,e,t,r,i,s,a){let c=(0,QE.resolve)(n,r);if(!(0,HE.existsSync)(c))return console.error(`\u274C Target file not found: ${r}`),!1;let u=await new Re.CommandResolver(e).loadCommand(t);if(!u)return console.error(`\u274C Command with UID "${t}" not found.`),!1;if(await KJ(e,t)&&!i.dryRun&&!i.yes)return console.error(`\u274C Command "${u.name}" is marked destructive. Add --dry-run to preview, or --yes to apply.`),!1;let d=(0,Re.vaultPathToIRI)(r);if(!await new Re.PreconditionEvaluator(e,void 0,{clock:s}).evaluate(u.precondition,d))return console.error(`\u274C Precondition not satisfied for "${u.name}" on "${r}".`),!1;if(i.dryRun)return console.log(`\u{1F50D} Dry-run: would apply "${u.name}" to "${r}" (precondition passed).`),!0;let y=new Re.ServiceRegistry,S=new kt(n),w=new Re.GenericAssetCreationService(S).withDeterminism({clock:s,uidGenerator:a}),v=new Re.ArchiveAssetService(S),E=new Re.PropertyCleanupService(S),I=new Re.FixMissingLabelService(S),k=new Re.RenameToUidService(S),j=new Re.FolderRepairService(S),ee=new Re.TaskStatusService(S,new Re.EffortStatusWorkflow,new Re.StatusTimestampService(S)),U=new mr(n);RL(y,{vaultAdapter:S,fsAdapter:U,genericAssetCreationService:w,archiveAssetService:v,taskStatusService:ee,propertyCleanupService:E,fixMissingLabelService:I,renameToUidService:k,folderRepairService:j});let W=new Re.GroundingExecutor(U,U,y,(0,Re.createVaultFrontmatterClassLabelResolver)(U),{clock:s,uidGenerator:a}),D;if(i.input)try{let G=JSON.parse(i.input);if(typeof G!="object"||G===null||Array.isArray(G))throw new Error("must be a JSON object");D=G}catch(G){let Oe=G instanceof Error?G.message:String(G);return console.error(`\u274C --input: invalid JSON object (${Oe})`),!1}let L=await W.execute(u.grounding,d,r,D);if(L.success){let G=u.successMessage??`Applied "${u.name}" to "${r}".`;return console.log(`\u2705 ${G}`),!0}else return console.error(`\u274C "${u.name}" failed on "${r}": ${L.error}`),!1}o(YJ,"executeOnTarget");function OL(){return new Ce("apply").description("Apply an exocmd__Command to one or more vault assets (RFC 8e83442b T1.2). Pass a path arg or pipe paths via stdin.").argument("<cmd>","Command UUID or cliName slug").argument("[path]","Vault-relative path to target asset (omit to read paths from stdin)").option("--vault <path>","Path to Obsidian vault",process.cwd()).option("--dry-run","Preview without writing").option("--yes","Skip destructive-command confirmation").option("--input <json>","JSON userInput for service_call groundings").option("--seed <uuid>","Deterministic UID seed for test/replay (uses seededUidGenerator)").option("--frozen-clock <iso>","Freeze clock to ISO timestamp for test/replay (uses frozenClock)").action(async(n,e,t)=>{pe.setFormat("text");try{let r=(0,QE.resolve)(t.vault);if(!(0,HE.existsSync)(r))throw new Fe(r);Xg(r);let i=t.frozenClock?(0,Re.frozenClock)(t.frozenClock):(0,Re.liveClock)(),s=t.seed?(0,Re.seededUidGenerator)(t.seed):(0,Re.liveUidGenerator)(),a=new kt(r),l=await new Re.NoteToRDFConverter(a).convertVault(),u=new Re.InMemoryTripleStore;await u.addAll(l);let f;if(zJ.test(n))f=n;else{let y=await QJ(u,n);y||(console.error(`\u274C No command found with UUID or cliName "${n}".`),process.exit(3)),f=y}let d;if(e)d=[e];else if(d=await HJ(),d.length===0)throw new Ut("No target path provided and stdin is empty.","exocortex apply <uuid> <path> OR exocortex find ... | exocortex apply <uuid>");let h=0,p=0;for(let y of d)await YJ(r,u,f,y,t,i,s)?h++:p++;d.length>1&&console.log(`
765
- \u{1F4CA} Applied to ${h}/${d.length} target(s) (${p} failed).`),p>0&&process.exit(5)}catch(r){pe.handle(r),process.exit(5)}})}o(OL,"applyCommand");function PL(n){let e=new Ce;return e.name("exocortex").description("CLI tool for Exocortex knowledge management system").version(n??"16.27.2"),e.addCommand(wL()),e.addCommand(OL()),e.addCommand(YD()),e.addCommand(eF()),e.addCommand(IF()),e.addCommand(nF()),e.addCommand(iF()),e.addCommand(lF()),e.addCommand(RF()),e.addCommand(VF()),e.addCommand(qF()),e.addCommand(WF()),e.addCommand(zF()),e.addCommand(nL()),e.addCommand(iL()),e.addCommand(fL()),e.addCommand(vL()),e}o(PL,"createProgram");PL().parse();0&&(module.exports={createProgram});
765
+ \u{1F4CA} Applied to ${h}/${d.length} target(s) (${p} failed).`),p>0&&process.exit(5)}catch(r){pe.handle(r),process.exit(5)}})}o(OL,"applyCommand");function PL(n){let e=new Ce;return e.name("exocortex").description("CLI tool for Exocortex knowledge management system").version(n??"16.27.4"),e.addCommand(wL()),e.addCommand(OL()),e.addCommand(YD()),e.addCommand(eF()),e.addCommand(IF()),e.addCommand(nF()),e.addCommand(iF()),e.addCommand(lF()),e.addCommand(RF()),e.addCommand(VF()),e.addCommand(qF()),e.addCommand(WF()),e.addCommand(zF()),e.addCommand(nL()),e.addCommand(iL()),e.addCommand(fL()),e.addCommand(vL()),e}o(PL,"createProgram");PL().parse();0&&(module.exports={createProgram});
766
766
  /*! Bundled license information:
767
767
 
768
768
  reflect-metadata/Reflect.js:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kitelev/exocortex-cli",
3
- "version": "16.27.2",
3
+ "version": "16.27.4",
4
4
  "description": "CLI tool for Exocortex knowledge management system - SPARQL queries, task management, and more",
5
5
  "main": "dist/index.js",
6
6
  "bin": {