@kitelev/exocortex-cli 16.166.4 → 16.167.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +3 -3
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
// @kitelev/exocortex-cli v16.
|
|
2
|
+
// @kitelev/exocortex-cli v16.167.0
|
|
3
3
|
// CLI tool for Exocortex knowledge management system - SPARQL queries, task management, and more
|
|
4
4
|
// License: MIT
|
|
5
5
|
|
|
@@ -90,7 +90,7 @@ ${o}`}let s=r?(0,t1.serializeYamlScalar)(t,i):String(t);return`${e}: ${s}`}escap
|
|
|
90
90
|
Stack trace:
|
|
91
91
|
${t.stack}`:"";console.error(`[Exocortex ERROR]${s} ${e}${o}`,t??"")}else{let o=t?.message?`
|
|
92
92
|
Details: ${t.message}`:"";console.error(`[Exocortex ERROR]${s} ${e}${o}`)}}};zm.LoggingService=$f;$f.isVerbose=!1;$f.isDevelopment=void 0});var hC=E(Cr=>{"use strict";var EB=Cr&&Cr.__decorate||function(n,e,t,r){var i=arguments.length,s=i<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(n,e,t,r);else for(var c=n.length-1;c>=0;c--)(o=n[c])&&(s=(i<3?o(s):i>3?o(e,t,s):o(e,t))||s);return i>3&&s&&Object.defineProperty(e,t,s),s},TB=Cr&&Cr.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},Tr;Object.defineProperty(Cr,"__esModule",{value:!0});Cr.GroundingExecutor=Cr.ServiceRegistry=Cr.CLASS_UID_TO_LABEL=Cr.STATUS_UID_BY_ENUM=void 0;var AB=Qe(),IB=Lf(),RB=Mm(),jn=Wo(),xB=e1(),Km=Yc(),OB=tl(),lc=Qc(),CB=ze(),cC=ws(),lC=Gm(),n1=Mn(),uC=xf(),lo=cc();Cr.STATUS_UID_BY_ENUM={[lc.EffortStatus.DRAFT]:"c42245d0-01de-4c35-bfcf-d910445ea28e",[lc.EffortStatus.BACKLOG]:"753a44d5-846c-4b82-9196-4fd9a4d48777",[lc.EffortStatus.ANALYSIS]:"cde3525c-57ea-4efc-b477-2e7e7ccd3a1e",[lc.EffortStatus.TODO]:"6a0e933a-6653-46f4-95ae-ed7508177c73",[lc.EffortStatus.DOING]:"027e78f4-6e16-4b36-b8fb-5510507d5745",[lc.EffortStatus.DONE]:"7b9b3116-7c3c-438c-9618-94fe301320a6",[lc.EffortStatus.TRASHED]:"5d14f18d-db2b-4847-9ac1-144cb93b2541"};var PB=Object.freeze(Object.fromEntries(Object.entries(Cr.STATUS_UID_BY_ENUM).map(([n,e])=>[e,n])));Cr.CLASS_UID_TO_LABEL=Object.freeze({"1b20a8f0-d745-4e93-91db-4531b3df120e":Km.AssetClass.TASK,"7db5eeff-718a-49b0-8d2b-39b084a356e3":Km.AssetClass.PROJECT,"1b0a5e34-dd7f-4ead-b43a-6c7c5a5ecaca":Km.AssetClass.MEETING});var i1=Um();(0,i1.installDefaultResolvers)();function DB(n){if(n){if(n==="1b20a8f0-d745-4e93-91db-4531b3df120e")return"ems__Task";if(n==="7db5eeff-718a-49b0-8d2b-39b084a356e3")return"ems__Project";if(n==="ems__Task"||n==="ems__Project")return n}}a(DB,"resolveClassFlipTarget");var fC=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,FB=/^__SUBSTITUTE__([a-zA-Z][a-zA-Z0-9_]*)__[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}__$/,LB=/^__SUBSTITUTE_P__([a-zA-Z][a-zA-Z0-9_]*)__[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}__([A-Za-z0-9_-]*)__$/,Ym=class{static{a(this,"ServiceRegistry")}constructor(){this.services=new Map}register(e,t){this.services.set(e,t)}get(e){return this.services.get(e)}has(e){return this.services.has(e)}getRegisteredIds(){return Array.from(this.services.keys())}};Cr.ServiceRegistry=Ym;var dC=20,Qm=Tr=class{static{a(this,"GroundingExecutor")}constructor(e,t,r,i,s){this.frontmatterService=new cC.FrontmatterService,this.fileReader=e,this.fileWriter=t,this.serviceRegistry=r,this.classLabelToUid=i,this.refToFolder=s?.refToFolder,this.workflowResolver=s?.workflowResolver,this.groundingLoader=s?.groundingLoader,this.templateLoader=s?.templateLoader,this.namedQueryRunner=s?.namedQueryRunner,this.clock=s?.clock??(0,IB.liveClock)(),this.uidGen=s?.uidGenerator??(0,RB.liveUidGenerator)()}async execute(e,t,r,i){try{switch(e.type){case jn.GroundingType.PROPERTY_SET:return await this.executePropertySet(e,t,r,i);case jn.GroundingType.PROPERTY_DELETE:return await this.executePropertyDelete(e,r);case jn.GroundingType.COMPOSITE:return await this.executeComposite(e,t,r,i,0);case jn.GroundingType.SERVICE_CALL:return await this.executeServiceCall(e,t,r,i);case jn.GroundingType.CREATE_INSTANCE:return await this.executeCreateInstance(e,t,r,i);case jn.GroundingType.PROPERTY_APPEND:return await this.executePropertyAppend(e,t,r,i);case jn.GroundingType.PROPERTY_INCREMENT:return await this.executePropertyIncrement(e,r);case jn.GroundingType.PROPERTY_SHIFT:return await this.executePropertyShift(e,r);case jn.GroundingType.SPARQL_UPDATE:return{success:!1,error:"sparql_update grounding not yet implemented. Use property_set/property_delete instead."};case jn.GroundingType.WORKFLOW_TRANSITION:return await this.executeWorkflowTransition(e,t,r,i);case jn.GroundingType.BODY_TEMPLATE:return await this.executeBodyTemplate(e,t,r,i);default:return{success:!1,error:`Unknown grounding type: ${e.type}`}}}catch(s){return{success:!1,error:s instanceof Error?s.message:String(s)}}}async executePropertySet(e,t,r,i){if(!e.targetProperty)return{success:!1,error:"property_set requires targetProperty"};let s;if([e.targetValueRef!==void 0,e.targetValueLiteral!==void 0,e.targetValueSubstitution!==void 0,e.targetValueQuery!==void 0].filter(Boolean).length>1)return{success:!1,error:"property_set: more than one of targetValueRef/targetValueLiteral/targetValueSubstitution/targetValueQuery set (cardinality 0..1 each, mutually exclusive)"};if(e.targetValueRef!==void 0)s=`"[[${e.targetValueRef}]]"`;else if(e.targetValueLiteral!==void 0)s=e.targetValueLiteral;else if(e.targetValueSubstitution!==void 0)s=e.targetValueSubstitution;else if(e.targetValueQuery!==void 0){let v=await this.resolveTargetValueQuery(e.targetValueQuery,t);if(!v.success)return v;s=v.value}else return{success:!1,error:"property_set requires one of targetValueRef/targetValueLiteral/targetValueSubstitution/targetValueQuery"};let c=i??{},l=a(v=>v!=null,"isProvided"),u=[...s.matchAll(/\$input\.([A-Za-z_]\w*)/g)].map(v=>v[1]),f=/\$input\b(?!\.)/.test(s)||/\$value\b/.test(s),d=u.find(v=>!l(c[v]));if(d!==void 0||f&&!l(c.value))return{success:!1,error:`property_set: value template references an input that was not provided (${d!==void 0?`--input '{"${d}":...}'`:`--input '{"value":...}'`} required)`};let h=this.substituteVariables(s,t,i),p=cC.FrontmatterService.normalizeIRI(e.targetProperty),b=lC.STRING_SCALAR_PROPERTIES.has(p)?(0,lC.serializeYamlScalar)(h,!0):h,y=await this.fileReader.readFile(r),S=this.frontmatterService.updateProperty(y,e.targetProperty,b);return await this.fileWriter.updateFile(r,S),{success:!0}}async resolveTargetValueQuery(e,t){if(!this.namedQueryRunner)return{success:!1,error:"property_set targetValueQuery requires NamedQueryRunner injection (options.namedQueryRunner). Wire the plugin/CLI before using this value-source."};let r;try{r=await this.namedQueryRunner.runScalar(e,{currentAsset:t})}catch(s){return{success:!1,error:`property_set targetValueQuery: NamedQuery '${e}' failed \u2014 ${s instanceof Error?s.message:String(s)}`}}return r===null?{success:!1,error:`property_set targetValueQuery: NamedQuery '${e}' returned no scalar value (empty result set or non-scalar shape).`}:{success:!0,value:r.kind==="iri"?`"[[${r.value}]]"`:r.value}}async executePropertyDelete(e,t){if(!e.targetProperty)return{success:!1,error:"property_delete requires targetProperty"};let r=await this.fileReader.readFile(t),i=this.frontmatterService.removeProperty(r,e.targetProperty);return await this.fileWriter.updateFile(t,i),{success:!0}}async executeComposite(e,t,r,i,s){if(s>=dC)return{success:!1,error:`Composite grounding exceeded maximum depth of ${dC}`};let o=e.steps??[];if(o.length===0)return{success:!0};let c;try{c=await this.fileReader.readFile(r)}catch{}let l=[],u;try{for(let f=0;f<o.length;f++){let d=o[f],h=d.type===jn.GroundingType.BODY_TEMPLATE&&u?u:r,p=await this.executeStep(d,t,h,i,s+1);if(!p.success)return await this.rollback(c,r,l),{success:!1,error:`Composite step ${f} failed: ${p.error}`};p.openPath&&(u=p.openPath),l.push(f)}return{success:!0}}catch(f){return await this.rollback(c,r,l),{success:!1,error:`Composite execution failed: ${f instanceof Error?f.message:String(f)}`}}}async executeServiceCall(e,t,r,i){let s=e.targetProperty;if(!s)return{success:!1,error:"service_call requires targetProperty as serviceId"};if(s==="convertToTask")return await this.executeConvertToTask(r);if(s==="updateProperty"){let l=DB(e.targetValueRef);if(l==="ems__Task")return await this.executeConvertToTask(r);if(l==="ems__Project")return await this.executeConvertToProject(r)}let o=this.serviceRegistry.get(s);if(!o)return{success:!1,error:`Service not found: "${s}". Registered services: ${this.serviceRegistry.getRegisteredIds().join(", ")||"none"}`};let c=i;if(e.isDefinedBy&&(c={isDefinedBy:e.isDefinedBy,...c??{}}),e.serviceCallPayload)try{let l=this.substituteVariables(e.serviceCallPayload,t,i),u=JSON.parse(l);typeof u=="object"&&u!==null&&(c={...u,...c??{}})}catch{}return await o.execute(t,c),{success:!0}}async executeConvertToTask(e){let t=await this.fileReader.readFile(e),r=await this.resolveClassRefToUid("ems__Task"),i=this.frontmatterService.updateProperty(t,"exo__Instance_class",`["[[${r}]]"]`);return await this.fileWriter.updateFile(e,i),{success:!0}}async executeConvertToProject(e){let t=await this.fileReader.readFile(e),r=await this.resolveClassRefToUid("ems__Project"),i=this.frontmatterService.updateProperty(t,"exo__Instance_class",`["[[${r}]]"]`);return await this.fileWriter.updateFile(e,i),{success:!0}}async executeBodyTemplate(e,t,r,i){let s=null;if(e.templateRef)if(this.templateLoader){if(s=await this.templateLoader(e.templateRef),s===null)return{success:!1,error:`body_template: templateRef "${e.templateRef}" did not resolve to a template body (asset missing or empty).`}}else{if(e.bodyTemplate===void 0)return{success:!1,error:`body_template: templateRef "${e.templateRef}" set but no TemplateLoaderPort is wired (and no inline bodyTemplate fallback).`};s=e.bodyTemplate}else if(e.bodyTemplate!==void 0)s=e.bodyTemplate;else return{success:!1,error:"body_template requires bodyTemplate or templateRef"};let o=(0,xB.resolveTemplateBody)(s,{userInput:i,targetIRI:t,targetFilePath:r}),c;try{c=await this.fileReader.readFile(r)}catch(u){return{success:!1,error:`body_template: failed to read target file "${r}": ${u instanceof Error?u.message:String(u)}`}}let l=Tr.replaceBody(c,o);return await this.fileWriter.updateFile(r,l),{success:!0}}static replaceBody(e,t){let r=e.match(/^---\r?\n[\s\S]*?\r?\n---/);return r?`${r[0]}
|
|
93
|
-
${t}`:t}async executeCreateInstance(e,t,r,i){if(!e.targetFolder)return{success:!1,error:"create_instance requires targetFolder"};let s={},o=null;if((e.inheritanceRule&&e.inheritanceRule.length>0||e.propertyDefault&&e.propertyDefault.some(S=>typeof S.value=="string"&&S.value.includes("__SUBSTITUTE"))||e.labelTemplate!==void 0&&/\$target\./.test(e.labelTemplate))&&t&&r){let S;try{S=await this.fileReader.readFile(r)}catch(v){return{success:!1,error:`create_instance: failed to read $target file "${r}": ${v instanceof Error?v.message:String(v)}`}}o=this.frontmatterService.parseObject(S)??null}let l;e.targetClass&&(l=await this.resolveClassRefToUid(e.targetClass));let u={userInput:i,targetIRI:t,targetFilePath:r,targetFm:o??void 0,groundingTargetClassUid:l};if(e.propertyDefault&&e.propertyDefault.length>0&&this.applyPropertyDefaultStep(s,e.propertyDefault,u),this.applyMissingScalarPrimitives(s,i,l,e,t,o,r),i)for(let[S,v]of Object.entries(i))S!=="label"&&S!=="body"&&S!=="plannedDate"&&v!=null&&(s[S]=v);if(e.inheritanceRule&&e.inheritanceRule.length>0&&o&&await this.applyInheritanceRuleStep(s,e.inheritanceRule,o),this.applyMissingBacklinkTopUp(s,e,t,r),t&&e.linkBackProperty&&s[e.linkBackProperty]===void 0){let S=Tr.extractBacklinkTarget(t,r);s[e.linkBackProperty]=`"[[${S}]]"`}this.applyPrototypeTimePropagation(s,o,i);let f=s.exo__Asset_uid,d=this.frontmatterService.createFrontmatter("",s),h=e.targetFolder.includes("$isDefinedByFolder")?await this.resolveIsDefinedByFolder(s,r):this.substituteVariables(e.targetFolder,t,i,void 0,r),p=h?`${h}/${f}.md`:`${f}.md`,b=i?.body,y=typeof b=="string"&&b.length>0?Tr.replaceBody(d,b):d;return await this.fileWriter.createFile(p,y),{success:!0,openPath:p}}resolveInstanceDate(e,t){let r=Tr.firstScalar(e?.plannedDate);return r&&/^\d{4}-\d{2}-\d{2}$/.test(r)?r:(t??this.clock.now().toISOString()).slice(0,10)}applyPrototypeTimePropagation(e,t,r){if(!t)return;let i=Tr.firstScalar(t.ems__EffortPrototype_startTime);if(!i)return;let s=this.resolveInstanceDate(r);if(e.ems__Effort_plannedStartTimestamp===void 0){let c=Tr.combineDateAndTime(s,i);c!==null?e.ems__Effort_plannedStartTimestamp=c:lo.LoggingService.warn(`[GroundingExecutor] prototype ems__EffortPrototype_startTime "${i}" is not a valid HH:MM[:SS] time-of-day \u2014 skipping plannedStartTimestamp stamp.`)}let o=Tr.firstScalar(t.ems__EffortPrototype_endTime);if(o&&e.ems__Effort_plannedEndTimestamp===void 0){let c=Tr.combineDateAndTime(s,o);c!==null?e.ems__Effort_plannedEndTimestamp=c:lo.LoggingService.warn(`[GroundingExecutor] prototype ems__EffortPrototype_endTime "${o}" is not a valid HH:MM[:SS] time-of-day \u2014 skipping plannedEndTimestamp stamp.`)}}static firstScalar(e){if(e==null)return null;let t=Array.isArray(e)?e[0]:e;if(typeof t!="string")return null;let r=t.trim().replace(/^["'](.*)["']$/,"$1").trim();return r.length>0?r:null}static combineDateAndTime(e,t){if(!/^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$/.test(t))return null;let r=/^\d{2}:\d{2}$/.test(t)?`${t}:00`:t;return`${e}T${r}`}async resolveIsDefinedByFolder(e,t){let r=Tr.parentFolderOf(t),i=e.exo__Asset_isDefinedBy,s=Tr.extractBareRef(i);if(s&&this.refToFolder)try{let o=await this.refToFolder(s);if(o!=null)return o}catch(o){lo.LoggingService.error(`[GroundingExecutor] $isDefinedByFolder resolution failed for ref "${s}" \u2014 falling back to host folder.`,o instanceof Error?o:new Error(String(o)))}return r}static parentFolderOf(e){let t=e.replace(/^\/+/,""),r=t.lastIndexOf("/");return r>=0?t.slice(0,r):""}static extractBareRef(e){if(typeof e!="string")return null;let t=e.trim();t=t.replace(/^["']|["']$/g,"").trim(),t=t.replace(/^\[\[/,"").replace(/\]\]$/,"");let r=t.indexOf("|");return r>=0&&(t=t.slice(0,r)),t=t.trim(),t.length>0?t:null}async resolveClassRefToUid(e){if(fC.test(e)||!this.classLabelToUid)return e;try{let t=await this.classLabelToUid(e);return t&&t.length>0?t:e}catch{return e}}applyPropertyDefaultStep(e,t,r){for(let{propertyName:i,value:s}of t){if(e[i]!==void 0)continue;let o=this.resolveSubstitutionMarker(s,r);if(o!=null){if(Array.isArray(o)){if(o.length===0)continue;e[i]=o;continue}if(i==="exo__Instance_class"&&typeof o=="string"){e[i]=[o];continue}e[i]=o}}}applyMissingScalarPrimitives(e,t,r,i,s,o,c){let l=[];e.exo__Asset_uid===void 0&&(e.exo__Asset_uid=this.uidGen.next(),l.push("exo__Asset_uid")),e.exo__Asset_createdAt===void 0&&(e.exo__Asset_createdAt=n1.DateFormatter.toLocalTimestamp(this.clock.now()),l.push("exo__Asset_createdAt"));let u=typeof e.exo__Asset_label=="string"&&e.exo__Asset_label.trim().length===0;if(e.exo__Asset_label===void 0||u){let f=t?.label;if(f===void 0&&i?.labelTemplate)try{let h=this.substituteVariables(i.labelTemplate,s??"",t,o??void 0,c);h.trim().length>0&&(f=h)}catch(h){lo.LoggingService.error(`[GroundingExecutor] labelTemplate substitution failed: ${h instanceof Error?h.message:String(h)}. Falling back to "Untitled".`)}let d=f??"Untitled";e.exo__Asset_label=d,d!=="Untitled"&&e.aliases===void 0&&(e.aliases=[d]),l.push("exo__Asset_label")}e.exo__Instance_class===void 0&&r&&(e.exo__Instance_class=[`"[[${r}]]"`],l.push("exo__Instance_class")),l.length>0&&lo.LoggingService.error(`[GroundingExecutor] Universal Default Template did not cover essential scalar primitives: ${l.join(", ")}. Filled from legacy TS fallback. Vault may be in an unhealthy state \u2014 verify UniversalDefaultTemplate singleton is present and complete.`)}applyMissingBacklinkTopUp(e,t,r,i){if(!r||t.linkBackProperty||e.exo__Asset_prototype!==void 0||e.ems__Effort_parent!==void 0)return;let s=Tr.extractBacklinkTarget(r,i);Tr.propertiesReferenceTarget(e,s)||(e.exo__Asset_prototype=`"[[${s}]]"`,lo.LoggingService.error("[GroundingExecutor] No backlink rule fired (Universal IRs absent or no class match). Falling back to legacy exo__Asset_prototype default. Bug #5 may surface if target is not a prototype-instance."))}static propertiesReferenceTarget(e,t){if(!t)return!1;let r=`[[${t}]]`,i=a(s=>typeof s=="string"&&s.includes(r),"refs");for(let s of Object.values(e))if(i(s)||Array.isArray(s)&&s.some(i))return!0;return!1}resolveSubstitutionMarker(e,t){let r=e.match(LB);if(r){let c=r[1],l=r[2],u=Tr.decodeBase64UrlSafe(l),f=(0,i1.getResolver)(c);return f?f(t,u):(lo.LoggingService.warn(`[GroundingExecutor] Parameterised marker references unknown resolver '${c}' \u2014 value left as marker.`),e)}let i=e.match(FB);if(!i)return e;let s=i[1];if(s==="target"){let c=t.targetIRI??"",l=t.targetFilePath??"";return`"[[${Tr.extractBacklinkTarget(c,l)}]]"`}if(s==="targetFolder"){let c=t.targetFilePath??"";if(!c)return"";let l=c.replace(/^\/+/,""),u=l.lastIndexOf("/");return u>=0?l.slice(0,u):""}let o=(0,i1.getResolver)(s);return o?o(t):(lo.LoggingService.warn(`[GroundingExecutor] Marker references unknown resolver '${s}' \u2014 value left as marker.`),e)}static decodeBase64UrlSafe(e){return(0,OB.base64ToUtf8)(e.replace(/-/g,"+").replace(/_/g,"/"))}async applyInheritanceRuleStep(e,t,r){let i=this.extractTargetClassNames(r),s=[];for(let o of t)!await this.inheritanceConditionMatches(o.targetClassCondition,o.targetClassConditionUid,i)||await this.inheritanceExclusionMatches(o.targetClassExclusion,o.targetClassExclusionUids,i)||s.push(o);s.sort((o,c)=>c.priority-o.priority);for(let o of s){if(e[o.targetPropertyName]!==void 0)continue;let c=r[o.sourcePropertyName];c!=null&&(e[o.targetPropertyName]=this.formatInheritedValue(c))}}async inheritanceConditionMatches(e,t,r){return!e&&!t?!0:this.classRefMatchesAny(e,t,r)}async inheritanceExclusionMatches(e,t,r){for(let i of t??[])if(i&&r.includes(i))return!0;for(let i of e)if(await this.classRefMatchesAny(i,void 0,r))return!0;return!1}async classRefMatchesAny(e,t,r){if(t&&r.includes(t)||e&&r.includes(e))return!0;if(e&&this.classLabelToUid)try{let i=await this.classLabelToUid(e);if(i&&i.length>0&&r.includes(i))return!0}catch{}return!1}extractTargetClassNames(e){let t=e.exo__Instance_class;if(t==null)return[];let r=Array.isArray(t)?t:[t],i=[];for(let s of r){let o=this.extractWikilinkInner(String(s));o&&i.push(o)}return i}extractWikilinkInner(e){let t=e.match(/\[\[([^\]|]+)(?:\|[^\]]*)?\]\]/);return t?t[1].trim():e.replace(/^["']|["']$/g,"").trim()}formatInheritedValue(e){return Array.isArray(e)?e.map(t=>this.formatInheritedScalar(String(t))):this.formatInheritedScalar(String(e))}formatInheritedScalar(e){return/^"?\[\[.+\]\]"?$/.test(e)?this.reformatWikilink(e):fC.test(e)?`"[[${e}]]"`:e}reformatWikilink(e){return e.startsWith('"[[')&&e.endsWith(']]"')?e:e.startsWith("[[")&&e.endsWith("]]")?`"${e}"`:e}async executeStep(e,t,r,i,s){return e.type===jn.GroundingType.COMPOSITE?this.executeComposite(e,t,r,i,s):this.execute(e,t,r,i)}async rollback(e,t,r){if(e!==void 0)try{await this.fileWriter.updateFile(t,e)}catch(i){lo.LoggingService.error(`[GroundingExecutor] Rollback failed for ${t}`,i instanceof Error?i:new Error(String(i)))}}substituteVariables(e,t,r,i,s){let o=this.clock.now(),c=o.toISOString(),l=n1.DateFormatter.toLocalTimestamp(o),u=this.resolveInstanceDate(r,c),f=`${u}T00:00:00`,d=`${l.slice(0,10)}-${l.slice(11,13)}-${l.slice(14,16)}`,h=e.replace(/\$target\.([A-Za-z_][\w]*)/g,(p,b)=>{if(!i)throw new Error(`$target.${b} substitution requires target frontmatter context; none was supplied (asset IRI: ${t})`);let y=i[b];if(y==null)throw new Error(`$target.${b} is undefined on asset ${t}`);if(Array.isArray(y))throw new Error(`$target.${b} resolved to an array on asset ${t}; only scalar properties are supported for substitution`);return String(y).replace(/^["'](.*)["']$/,"$1")});if(/\$targetFolder\b/.test(h)){if(!s)throw new Error("$targetFolder substitution requires targetFilePath context; none was supplied (asset IRI: "+t+")");let p=s.replace(/^\/+/,""),b=p.lastIndexOf("/"),y=b>=0?p.slice(0,b):"";h=h.replace(/\$targetFolder\b/g,y)}if(h=h.replace(/\$target/g,t).replace(/\$nowCompact\b/g,d).replace(/\$nowLocal/g,l).replace(/\$now/g,c).replace(/\$todayStart\b/g,f).replace(/\$today/g,u),r){let p=r;h=h.replace(/\$input\.([A-Za-z_]\w*)|\$(?:input|value)\b/g,(b,y)=>{let S=y!==void 0?p[y]:p.value;return S==null?b:String(S)})}return h}async executePropertyAppend(e,t,r,i){if(!e.targetProperty)return{success:!1,error:"property_append requires targetProperty"};if(e.appendExpression===void 0)return{success:!1,error:"property_append requires appendExpression"};let s=await this.fileReader.readFile(r),o=this.frontmatterService.parseObject(s)??{},c=this.substituteVariables(e.appendExpression,t,i,o),l=o[e.targetProperty],u=Array.isArray(l)?l:l!==void 0?[String(l)]:[],f=a(b=>b.replace(/^["'](.*)["']$/,"$1"),"stripQuotes"),d=new Set(u.map(f)),h;if(d.has(f(c)))h=u;else{let b=`"${f(c)}"`;h=[...u,b]}let p=this.frontmatterService.updateProperty(s,e.targetProperty,h);return await this.fileWriter.updateFile(r,p),{success:!0}}async executePropertyIncrement(e,t){if(!e.targetProperty)return{success:!1,error:"property_increment requires targetProperty"};let r=e.incrementBy??1;if(!Number.isFinite(r)||!Number.isInteger(r))return{success:!1,error:`property_increment: incrementBy must be an integer (got ${String(e.incrementBy)})`};let i=await this.fileReader.readFile(t),o=(this.frontmatterService.parseObject(i)??{})[e.targetProperty],c;if(o==null||o==="")c=0;else{if(Array.isArray(o))return{success:!1,error:`property_increment: targetProperty "${e.targetProperty}" is an array, expected integer`};{let f=String(o).replace(/^["'](.*)["']$/,"$1").trim();if(!/^-?\d+$/.test(f))return{success:!1,error:`property_increment: targetProperty "${e.targetProperty}" current value "${String(o)}" is not a valid integer`};c=Number.parseInt(f,10)}}let l=c+r,u=this.frontmatterService.updateProperty(i,e.targetProperty,l);return await this.fileWriter.updateFile(t,u),{success:!0}}async executePropertyShift(e,t){if(!e.targetProperty)return{success:!1,error:"property_shift requires targetProperty"};if(!e.shiftDelta)return{success:!1,error:"property_shift requires shiftDelta (ISO-8601 duration literal)"};let r=await this.fileReader.readFile(t),s=(this.frontmatterService.parseObject(r)??{})[e.targetProperty];if(s==null||s==="")return{success:!1,error:`property_shift: targetProperty "${e.targetProperty}" is not set on target asset`};if(Array.isArray(s))return{success:!1,error:`property_shift: targetProperty "${e.targetProperty}" is an array, expected single datetime`};let o=String(s).replace(/^["'](.*)["']$/,"$1").trim(),c=new Date(o);if(Number.isNaN(c.getTime()))return{success:!1,error:`property_shift: current value "${o}" is not a valid datetime`};let l;try{l=Tr.applyIsoDuration(c,e.shiftDelta)}catch(d){return{success:!1,error:`property_shift: invalid shiftDelta "${e.shiftDelta}": ${d instanceof Error?d.message:String(d)}`}}let u=n1.DateFormatter.toLocalTimestamp(l),f=this.frontmatterService.updateProperty(r,e.targetProperty,u);return await this.fileWriter.updateFile(t,f),{success:!0}}async executeWorkflowTransition(e,t,r,i){if(!this.workflowResolver)return{success:!1,error:"workflow_transition requires WorkflowResolver injection (options.workflowResolver). Wire the plugin/CLI before using this grounding type."};let s=await this.fileReader.readFile(r),o=this.frontmatterService.parseObject(s)??{},c=this.resolveAssetClassFromFrontmatter(o);if(!c)return{success:!1,error:"workflow_transition: target asset has no recognised ems__* class in exo__Instance_class (cannot resolve workflow)."};let l=this.resolveStatusFromFrontmatter(o);if(!l)return{success:!1,error:"workflow_transition: target asset has no parseable ems__Effort_status value (need wikilink to an ems__EffortStatus* asset)."};let u;try{u=new CB.IRI(t)}catch(C){return{success:!1,error:`workflow_transition: invalid targetIRI "${t}" \u2014 ${C instanceof Error?C.message:String(C)}`}}let f=await this.workflowResolver.resolveForAsset(u,c),d=e.direction??"forward",h=d==="rollback",p=f.transitions.find(C=>C.from===l&&C.isRollback===h);if(!p)return{success:!1,error:`workflow_transition: no ${d} transition from "${l}" defined in workflow "${f.name}" (target class: ${c}).`};let b=Cr.STATUS_UID_BY_ENUM[p.to];if(!b)return{success:!1,error:`workflow_transition: no UID mapping for destination status "${p.to}" (transition target unreachable).`};let y={id:`${e.id}.statusMutation`,label:`workflow_transition: ${p.from} \u2192 ${p.to}`,type:jn.GroundingType.PROPERTY_SET,targetProperty:"ems__Effort_status",targetValueRef:b},S=await this.executePropertySet(y,t,r,i);if(!S.success)return{success:!1,error:`workflow_transition: status mutation failed \u2014 ${S.error}`};let v=p.postActions??[],T=this.groundingLoader;if(v.length>0&&T===void 0)return{success:!1,error:"workflow_transition: transition has postActions but no GroundingLoader injected (options.groundingLoader). Wire commandResolver.loadGroundingByUid in plugin/CLI."};for(let C of v){if(T===void 0)break;let x=await T(C);if(!x)return{success:!1,error:`workflow_transition: postAction grounding UID "${C}" could not be loaded (asset missing or invalid Grounding shape).`};let O=await this.execute(x,t,r,i);if(!O.success)return{success:!1,error:`workflow_transition: postAction "${x.label}" (UID ${C}) failed \u2014 ${O.error}`}}return{success:!0}}resolveAssetClassFromFrontmatter(e){let t=e.exo__Instance_class;if(t==null)return null;let r=Array.isArray(t)?t:[t],i=new Set(Object.values(Km.AssetClass));for(let s of r){if(typeof s!="string")continue;let o=s.replace(/^\s*"?\[\[/,"").replace(/\]\]"?\s*$/,""),l=(o.includes("|")?o.split("|")[1]:o).trim();if(i.has(l))return l;let u=o.match(/^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/i);if(u){let f=Cr.CLASS_UID_TO_LABEL[u[1].toLowerCase()];if(f&&i.has(f))return f}}return null}resolveStatusFromFrontmatter(e){let t=e.ems__Effort_status;if(t==null)return null;if(Array.isArray(t)){if(t.length!==1)return null;t=t[0]}let i=String(t).trim().replace(/^["']/,"").replace(/["']$/,"").replace(/^\[\[/,"").replace(/\]\]$/,"");if(/^ems__EffortStatus[A-Za-z]+$/.test(i))return i;if(i.includes("|")){let o=i.split("|")[1].trim();if(/^ems__EffortStatus[A-Za-z]+$/.test(o))return o}let s=i.match(/^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/i);if(s){let o=PB[s[1].toLowerCase()];if(o)return o}return null}static applyIsoDuration(e,t){let r=t.trim();if(/^-?P(\d+Y)(\d+M)?$|^-?P\d+M$/.test(r)){let o=uC.DateTimeParsing.parseYearMonthDuration(r),c=new Date(e.getTime());return c.setMonth(c.getMonth()+o),c}let s=uC.DateTimeParsing.parseDayTimeDuration(r);return new Date(e.getTime()+s)}static extractBacklinkTarget(e,t){let r=Tr.resolveTargetPath(e,t),i=r.split("/").pop()??r;return Tr.UUID_BASENAME_RE.test(i)?i:r}static resolveTargetPath(e,t){if(t)return t.replace(/\.md$/i,"").replace(/^\/+/,"");if(e){let r=e.match(/^obsidian:\/\/vault\/(.+?)(?:\.md)?(?:\?|#|$)/i);if(r&&r[1])try{return decodeURIComponent(r[1])}catch{return r[1]}}return e}};Cr.GroundingExecutor=Qm;Qm.UUID_BASENAME_RE=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;Cr.GroundingExecutor=Qm=Tr=EB([(0,AB.injectable)(),TB("design:paramtypes",[Object,Object,Ym,Function,Object])],Qm)});var pC=E(s1=>{"use strict";Object.defineProperty(s1,"__esModule",{value:!0});s1.createVaultFrontmatterClassLabelResolver=NB;function NB(n){return async e=>{if(!e)return null;let t=await n.findFilesByMetadata({exo__Asset_label:e});if(t.length>0){let s=(await n.getFileMetadata(t[0])).exo__Asset_uid;if(typeof s=="string"&&s.length>0)return s}let r=await n.findFilesByMetadata({aliases:e});if(r.length>0){let s=(await n.getFileMetadata(r[0])).exo__Asset_uid;if(typeof s=="string"&&s.length>0)return s}return null}}a(NB,"createVaultFrontmatterClassLabelResolver")});var mC=E(o1=>{"use strict";Object.defineProperty(o1,"__esModule",{value:!0});o1.createVaultFrontmatterRefToFolderResolver=kB;function kB(n){return async e=>{if(!e)return null;let t=await n.findFilesByMetadata({exo__Asset_uid:e});return t.length===0?null:MB(t[0])}}a(kB,"createVaultFrontmatterRefToFolderResolver");function MB(n){let e=n.replace(/^\/+/,""),t=e.lastIndexOf("/");return t>=0?e.slice(0,t):""}a(MB,"parentFolderOf")});var yC=E(uo=>{"use strict";var jB=uo&&uo.__decorate||function(n,e,t,r){var i=arguments.length,s=i<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(n,e,t,r);else for(var c=n.length-1;c>=0;c--)(o=n[c])&&(s=(i<3?o(s):i>3?o(e,t,s):o(e,t))||s);return i>3&&s&&Object.defineProperty(e,t,s),s},$B=uo&&uo.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},Ml;Object.defineProperty(uo,"__esModule",{value:!0});uo.NamedQueryRunner=void 0;var UB=Qe(),BB=ze(),VB=Je(),gC=Lm(),qB=Op(),a1=Ml=class{static{a(this,"NamedQueryRunner")}constructor(e,t){this.queryBodyResolver=e,this.tripleStore=t}async run(e,t={}){if(!e)return null;let r=await this.queryBodyResolver.resolveSparql(e);if(!r)return null;let i=this.substitute(r,t);return(0,gC.evaluateWithExoEval)(i,{store:this.tripleStore})}async runScalar(e,t={},r){if(!e)throw new Error("NamedQueryRunner.runScalar: empty queryUid");let i=await this.queryBodyResolver.resolveSparql(e);if(!i)throw new Error(`NamedQueryRunner: query__NamedQuery '${e}' has no resolvable SPARQL body (asset missing or no \`\`\`sparql block).`);let s=this.substitute(i,t),o=await(0,gC.evaluateWithExoEval)(s,{store:this.tripleStore});if(o.kind==="ask")return{value:o.result?"true":"false",kind:"literal"};if(o.kind==="construct")return null;let c=o.rows[0];if(!c)return null;let l=c.variables(),u=r??l[0];if(!u)return null;let f=c.get(u);return f===void 0?null:f instanceof BB.IRI?{value:(0,qB.iriToObsidianName)(f.value)??f.value,kind:"iri"}:f instanceof VB.Literal?{value:f.value,kind:"literal"}:null}substitute(e,t){let r=e;t.currentAsset&&(r=r.replace(/\$currentAsset\b/g,Ml.formatIri(t.currentAsset))),t.currentClass&&(r=r.replace(/\$currentClass\b/g,Ml.formatIri(t.currentClass)));let i=t.params;if(i){let s=Object.keys(i).sort((o,c)=>c.length-o.length);for(let o of s){let c=i[o],l=c.kind==="iri"?Ml.formatIri(c.value):`"${Ml.escapeLiteral(c.value)}"`,u=o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");r=r.replace(new RegExp(`\\$${u}\\b`,"g"),l)}}return r}static formatIri(e){if(/[\s<>"{}|\\^`]/.test(e))throw new Error(`NamedQueryRunner: refusing to inject malformed IRI "${e}" \u2014 contains a character illegal in a SPARQL IRIREF (would break out of <...>). Pass a percent-encoded IRI.`);return`<${e}>`}static escapeLiteral(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t")}};uo.NamedQueryRunner=a1;uo.NamedQueryRunner=a1=Ml=jB([(0,UB.injectable)(),$B("design:paramtypes",[Object,Object])],a1)});var bC=E(Xm=>{"use strict";Object.defineProperty(Xm,"__esModule",{value:!0});Xm.extractSparqlBlock=GB;Xm.stripFrontmatter=WB;function GB(n){let e=n.match(/```sparql\s*\n([\s\S]*?)\n```/);if(!e)return null;let t=e[1].trim();return t.length>0?t:null}a(GB,"extractSparqlBlock");function WB(n){if(!n.startsWith("---"))return n;let e=n.indexOf(`
|
|
93
|
+
${t}`:t}async executeCreateInstance(e,t,r,i){if(!e.targetFolder)return{success:!1,error:"create_instance requires targetFolder"};let s={},o=null;if((e.inheritanceRule&&e.inheritanceRule.length>0||e.propertyDefault&&e.propertyDefault.some(S=>typeof S.value=="string"&&S.value.includes("__SUBSTITUTE"))||e.labelTemplate!==void 0&&/\$target\./.test(e.labelTemplate))&&t&&r){let S;try{S=await this.fileReader.readFile(r)}catch(v){return{success:!1,error:`create_instance: failed to read $target file "${r}": ${v instanceof Error?v.message:String(v)}`}}o=this.frontmatterService.parseObject(S)??null}let l;e.targetClass&&(l=await this.resolveClassRefToUid(e.targetClass));let u={userInput:i,targetIRI:t,targetFilePath:r,targetFm:o??void 0,groundingTargetClassUid:l};if(e.propertyDefault&&e.propertyDefault.length>0&&this.applyPropertyDefaultStep(s,e.propertyDefault,u),this.applyMissingScalarPrimitives(s,i,l,e,t,o,r),i)for(let[S,v]of Object.entries(i))S!=="label"&&S!=="body"&&S!=="plannedDate"&&v!=null&&(s[S]=v);if(e.inheritanceRule&&e.inheritanceRule.length>0&&o&&await this.applyInheritanceRuleStep(s,e.inheritanceRule,o),this.applyMissingBacklinkTopUp(s,e,t,r),t&&e.linkBackProperty&&s[e.linkBackProperty]===void 0){let S=Tr.extractBacklinkTarget(t,r);s[e.linkBackProperty]=`"[[${S}]]"`}this.applyPrototypeTimePropagation(s,o,i);let f=s.exo__Asset_uid,d=this.frontmatterService.createFrontmatter("",s),h=e.targetFolder.includes("$isDefinedByFolder")?await this.resolveIsDefinedByFolder(s,r):this.substituteVariables(e.targetFolder,t,i,void 0,r),p=h?`${h}/${f}.md`:`${f}.md`,b=i?.body,y=typeof b=="string"&&b.length>0?Tr.replaceBody(d,b):d;return await this.fileWriter.createFile(p,y),{success:!0,openPath:p}}resolveInstanceDate(e,t){let r=Tr.firstScalar(e?.plannedDate);return r&&/^\d{4}-\d{2}-\d{2}$/.test(r)?r:(t??this.clock.now().toISOString()).slice(0,10)}applyPrototypeTimePropagation(e,t,r){if(!t)return;let i=Tr.firstScalar(t.ems__EffortPrototype_startTime);if(!i)return;let s=this.resolveInstanceDate(r);if(e.ems__Effort_plannedStartTimestamp===void 0){let c=Tr.combineDateAndTime(s,i);c!==null?e.ems__Effort_plannedStartTimestamp=c:lo.LoggingService.warn(`[GroundingExecutor] prototype ems__EffortPrototype_startTime "${i}" is not a valid HH:MM[:SS] time-of-day \u2014 skipping plannedStartTimestamp stamp.`)}let o=Tr.firstScalar(t.ems__EffortPrototype_endTime);if(o&&e.ems__Effort_plannedEndTimestamp===void 0){let c=Tr.combineDateAndTime(s,o);c!==null?e.ems__Effort_plannedEndTimestamp=c:lo.LoggingService.warn(`[GroundingExecutor] prototype ems__EffortPrototype_endTime "${o}" is not a valid HH:MM[:SS] time-of-day \u2014 skipping plannedEndTimestamp stamp.`)}}static firstScalar(e){if(e==null)return null;let t=Array.isArray(e)?e[0]:e;if(typeof t!="string")return null;let r=t.trim().replace(/^["'](.*)["']$/,"$1").trim();return r.length>0?r:null}static combineDateAndTime(e,t){if(!/^([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$/.test(t))return null;let r=/^\d{2}:\d{2}$/.test(t)?`${t}:00`:t;return`${e}T${r}`}async resolveIsDefinedByFolder(e,t){let r=Tr.parentFolderOf(t),i=e.exo__Asset_isDefinedBy,s=Tr.extractBareRef(i);if(s&&this.refToFolder)try{let o=await this.refToFolder(s);if(o!=null)return o}catch(o){lo.LoggingService.error(`[GroundingExecutor] $isDefinedByFolder resolution failed for ref "${s}" \u2014 falling back to host folder.`,o instanceof Error?o:new Error(String(o)))}return r}static parentFolderOf(e){let t=e.replace(/^\/+/,""),r=t.lastIndexOf("/");return r>=0?t.slice(0,r):""}static extractBareRef(e){if(typeof e!="string")return null;let t=e.trim();t=t.replace(/^["']|["']$/g,"").trim(),t=t.replace(/^\[\[/,"").replace(/\]\]$/,"");let r=t.indexOf("|");return r>=0&&(t=t.slice(0,r)),t=t.trim(),t.length>0?t:null}async resolveClassRefToUid(e){if(fC.test(e)||!this.classLabelToUid)return e;try{let t=await this.classLabelToUid(e);return t&&t.length>0?t:e}catch{return e}}applyPropertyDefaultStep(e,t,r){for(let{propertyName:i,value:s}of t){if(e[i]!==void 0)continue;let o=this.resolveSubstitutionMarker(s,r);if(o!=null){if(Array.isArray(o)){if(o.length===0)continue;e[i]=o;continue}if(i==="exo__Instance_class"&&typeof o=="string"){e[i]=[o];continue}e[i]=o}}}applyMissingScalarPrimitives(e,t,r,i,s,o,c){let l=[];e.exo__Asset_uid===void 0&&(e.exo__Asset_uid=this.uidGen.next(),l.push("exo__Asset_uid")),e.exo__Asset_createdAt===void 0&&(e.exo__Asset_createdAt=n1.DateFormatter.toLocalTimestamp(this.clock.now()),l.push("exo__Asset_createdAt"));let u=typeof e.exo__Asset_label=="string"&&e.exo__Asset_label.trim().length===0;if(e.exo__Asset_label===void 0||u){let f=t?.label;if(f===void 0&&i?.labelTemplate)try{let h=this.substituteVariables(i.labelTemplate,s??"",t,o??void 0,c);h.trim().length>0&&(f=h)}catch(h){lo.LoggingService.error(`[GroundingExecutor] labelTemplate substitution failed: ${h instanceof Error?h.message:String(h)}. Falling back to "Untitled".`)}let d=f!==void 0&&f.trim().length>0?f:"Untitled";e.exo__Asset_label=d,d!=="Untitled"&&e.aliases===void 0&&(e.aliases=[d]),d==="Untitled"&&l.push("exo__Asset_label")}e.exo__Instance_class===void 0&&r&&(e.exo__Instance_class=[`"[[${r}]]"`],l.push("exo__Instance_class")),l.length>0&&lo.LoggingService.error(`[GroundingExecutor] Universal Default Template did not cover essential scalar primitives: ${l.join(", ")}. Filled from legacy TS fallback. Vault may be in an unhealthy state \u2014 verify UniversalDefaultTemplate singleton is present and complete.`)}applyMissingBacklinkTopUp(e,t,r,i){if(!r||t.linkBackProperty||e.exo__Asset_prototype!==void 0||e.ems__Effort_parent!==void 0)return;let s=Tr.extractBacklinkTarget(r,i);Tr.propertiesReferenceTarget(e,s)||(e.exo__Asset_prototype=`"[[${s}]]"`,lo.LoggingService.error("[GroundingExecutor] No backlink rule fired (Universal IRs absent or no class match). Falling back to legacy exo__Asset_prototype default. Bug #5 may surface if target is not a prototype-instance."))}static propertiesReferenceTarget(e,t){if(!t)return!1;let r=`[[${t}]]`,i=a(s=>typeof s=="string"&&s.includes(r),"refs");for(let s of Object.values(e))if(i(s)||Array.isArray(s)&&s.some(i))return!0;return!1}resolveSubstitutionMarker(e,t){let r=e.match(LB);if(r){let c=r[1],l=r[2],u=Tr.decodeBase64UrlSafe(l),f=(0,i1.getResolver)(c);return f?f(t,u):(lo.LoggingService.warn(`[GroundingExecutor] Parameterised marker references unknown resolver '${c}' \u2014 value left as marker.`),e)}let i=e.match(FB);if(!i)return e;let s=i[1];if(s==="target"){let c=t.targetIRI??"",l=t.targetFilePath??"";return`"[[${Tr.extractBacklinkTarget(c,l)}]]"`}if(s==="targetFolder"){let c=t.targetFilePath??"";if(!c)return"";let l=c.replace(/^\/+/,""),u=l.lastIndexOf("/");return u>=0?l.slice(0,u):""}let o=(0,i1.getResolver)(s);return o?o(t):(lo.LoggingService.warn(`[GroundingExecutor] Marker references unknown resolver '${s}' \u2014 value left as marker.`),e)}static decodeBase64UrlSafe(e){return(0,OB.base64ToUtf8)(e.replace(/-/g,"+").replace(/_/g,"/"))}async applyInheritanceRuleStep(e,t,r){let i=this.extractTargetClassNames(r),s=[];for(let o of t)!await this.inheritanceConditionMatches(o.targetClassCondition,o.targetClassConditionUid,i)||await this.inheritanceExclusionMatches(o.targetClassExclusion,o.targetClassExclusionUids,i)||s.push(o);s.sort((o,c)=>c.priority-o.priority);for(let o of s){if(e[o.targetPropertyName]!==void 0)continue;let c=r[o.sourcePropertyName];c!=null&&(e[o.targetPropertyName]=this.formatInheritedValue(c))}}async inheritanceConditionMatches(e,t,r){return!e&&!t?!0:this.classRefMatchesAny(e,t,r)}async inheritanceExclusionMatches(e,t,r){for(let i of t??[])if(i&&r.includes(i))return!0;for(let i of e)if(await this.classRefMatchesAny(i,void 0,r))return!0;return!1}async classRefMatchesAny(e,t,r){if(t&&r.includes(t)||e&&r.includes(e))return!0;if(e&&this.classLabelToUid)try{let i=await this.classLabelToUid(e);if(i&&i.length>0&&r.includes(i))return!0}catch{}return!1}extractTargetClassNames(e){let t=e.exo__Instance_class;if(t==null)return[];let r=Array.isArray(t)?t:[t],i=[];for(let s of r){let o=this.extractWikilinkInner(String(s));o&&i.push(o)}return i}extractWikilinkInner(e){let t=e.match(/\[\[([^\]|]+)(?:\|[^\]]*)?\]\]/);return t?t[1].trim():e.replace(/^["']|["']$/g,"").trim()}formatInheritedValue(e){return Array.isArray(e)?e.map(t=>this.formatInheritedScalar(String(t))):this.formatInheritedScalar(String(e))}formatInheritedScalar(e){return/^"?\[\[.+\]\]"?$/.test(e)?this.reformatWikilink(e):fC.test(e)?`"[[${e}]]"`:e}reformatWikilink(e){return e.startsWith('"[[')&&e.endsWith(']]"')?e:e.startsWith("[[")&&e.endsWith("]]")?`"${e}"`:e}async executeStep(e,t,r,i,s){return e.type===jn.GroundingType.COMPOSITE?this.executeComposite(e,t,r,i,s):this.execute(e,t,r,i)}async rollback(e,t,r){if(e!==void 0)try{await this.fileWriter.updateFile(t,e)}catch(i){lo.LoggingService.error(`[GroundingExecutor] Rollback failed for ${t}`,i instanceof Error?i:new Error(String(i)))}}substituteVariables(e,t,r,i,s){let o=this.clock.now(),c=o.toISOString(),l=n1.DateFormatter.toLocalTimestamp(o),u=this.resolveInstanceDate(r,c),f=`${u}T00:00:00`,d=`${l.slice(0,10)}-${l.slice(11,13)}-${l.slice(14,16)}`,h=e.replace(/\$target\.([A-Za-z_][\w]*)/g,(p,b)=>{if(!i)throw new Error(`$target.${b} substitution requires target frontmatter context; none was supplied (asset IRI: ${t})`);let y=i[b];if(y==null)throw new Error(`$target.${b} is undefined on asset ${t}`);if(Array.isArray(y))throw new Error(`$target.${b} resolved to an array on asset ${t}; only scalar properties are supported for substitution`);return String(y).replace(/^["'](.*)["']$/,"$1")});if(/\$targetFolder\b/.test(h)){if(!s)throw new Error("$targetFolder substitution requires targetFilePath context; none was supplied (asset IRI: "+t+")");let p=s.replace(/^\/+/,""),b=p.lastIndexOf("/"),y=b>=0?p.slice(0,b):"";h=h.replace(/\$targetFolder\b/g,y)}if(h=h.replace(/\$target/g,t).replace(/\$nowCompact\b/g,d).replace(/\$nowLocal/g,l).replace(/\$now/g,c).replace(/\$todayStart\b/g,f).replace(/\$today/g,u),r){let p=r;h=h.replace(/\$input\.([A-Za-z_]\w*)|\$(?:input|value)\b/g,(b,y)=>{let S=y!==void 0?p[y]:p.value;return S==null?b:String(S)})}return h}async executePropertyAppend(e,t,r,i){if(!e.targetProperty)return{success:!1,error:"property_append requires targetProperty"};if(e.appendExpression===void 0)return{success:!1,error:"property_append requires appendExpression"};let s=await this.fileReader.readFile(r),o=this.frontmatterService.parseObject(s)??{},c=this.substituteVariables(e.appendExpression,t,i,o),l=o[e.targetProperty],u=Array.isArray(l)?l:l!==void 0?[String(l)]:[],f=a(b=>b.replace(/^["'](.*)["']$/,"$1"),"stripQuotes"),d=new Set(u.map(f)),h;if(d.has(f(c)))h=u;else{let b=`"${f(c)}"`;h=[...u,b]}let p=this.frontmatterService.updateProperty(s,e.targetProperty,h);return await this.fileWriter.updateFile(r,p),{success:!0}}async executePropertyIncrement(e,t){if(!e.targetProperty)return{success:!1,error:"property_increment requires targetProperty"};let r=e.incrementBy??1;if(!Number.isFinite(r)||!Number.isInteger(r))return{success:!1,error:`property_increment: incrementBy must be an integer (got ${String(e.incrementBy)})`};let i=await this.fileReader.readFile(t),o=(this.frontmatterService.parseObject(i)??{})[e.targetProperty],c;if(o==null||o==="")c=0;else{if(Array.isArray(o))return{success:!1,error:`property_increment: targetProperty "${e.targetProperty}" is an array, expected integer`};{let f=String(o).replace(/^["'](.*)["']$/,"$1").trim();if(!/^-?\d+$/.test(f))return{success:!1,error:`property_increment: targetProperty "${e.targetProperty}" current value "${String(o)}" is not a valid integer`};c=Number.parseInt(f,10)}}let l=c+r,u=this.frontmatterService.updateProperty(i,e.targetProperty,l);return await this.fileWriter.updateFile(t,u),{success:!0}}async executePropertyShift(e,t){if(!e.targetProperty)return{success:!1,error:"property_shift requires targetProperty"};if(!e.shiftDelta)return{success:!1,error:"property_shift requires shiftDelta (ISO-8601 duration literal)"};let r=await this.fileReader.readFile(t),s=(this.frontmatterService.parseObject(r)??{})[e.targetProperty];if(s==null||s==="")return{success:!1,error:`property_shift: targetProperty "${e.targetProperty}" is not set on target asset`};if(Array.isArray(s))return{success:!1,error:`property_shift: targetProperty "${e.targetProperty}" is an array, expected single datetime`};let o=String(s).replace(/^["'](.*)["']$/,"$1").trim(),c=new Date(o);if(Number.isNaN(c.getTime()))return{success:!1,error:`property_shift: current value "${o}" is not a valid datetime`};let l;try{l=Tr.applyIsoDuration(c,e.shiftDelta)}catch(d){return{success:!1,error:`property_shift: invalid shiftDelta "${e.shiftDelta}": ${d instanceof Error?d.message:String(d)}`}}let u=n1.DateFormatter.toLocalTimestamp(l),f=this.frontmatterService.updateProperty(r,e.targetProperty,u);return await this.fileWriter.updateFile(t,f),{success:!0}}async executeWorkflowTransition(e,t,r,i){if(!this.workflowResolver)return{success:!1,error:"workflow_transition requires WorkflowResolver injection (options.workflowResolver). Wire the plugin/CLI before using this grounding type."};let s=await this.fileReader.readFile(r),o=this.frontmatterService.parseObject(s)??{},c=this.resolveAssetClassFromFrontmatter(o);if(!c)return{success:!1,error:"workflow_transition: target asset has no recognised ems__* class in exo__Instance_class (cannot resolve workflow)."};let l=this.resolveStatusFromFrontmatter(o);if(!l)return{success:!1,error:"workflow_transition: target asset has no parseable ems__Effort_status value (need wikilink to an ems__EffortStatus* asset)."};let u;try{u=new CB.IRI(t)}catch(C){return{success:!1,error:`workflow_transition: invalid targetIRI "${t}" \u2014 ${C instanceof Error?C.message:String(C)}`}}let f=await this.workflowResolver.resolveForAsset(u,c),d=e.direction??"forward",h=d==="rollback",p=f.transitions.find(C=>C.from===l&&C.isRollback===h);if(!p)return{success:!1,error:`workflow_transition: no ${d} transition from "${l}" defined in workflow "${f.name}" (target class: ${c}).`};let b=Cr.STATUS_UID_BY_ENUM[p.to];if(!b)return{success:!1,error:`workflow_transition: no UID mapping for destination status "${p.to}" (transition target unreachable).`};let y={id:`${e.id}.statusMutation`,label:`workflow_transition: ${p.from} \u2192 ${p.to}`,type:jn.GroundingType.PROPERTY_SET,targetProperty:"ems__Effort_status",targetValueRef:b},S=await this.executePropertySet(y,t,r,i);if(!S.success)return{success:!1,error:`workflow_transition: status mutation failed \u2014 ${S.error}`};let v=p.postActions??[],T=this.groundingLoader;if(v.length>0&&T===void 0)return{success:!1,error:"workflow_transition: transition has postActions but no GroundingLoader injected (options.groundingLoader). Wire commandResolver.loadGroundingByUid in plugin/CLI."};for(let C of v){if(T===void 0)break;let x=await T(C);if(!x)return{success:!1,error:`workflow_transition: postAction grounding UID "${C}" could not be loaded (asset missing or invalid Grounding shape).`};let O=await this.execute(x,t,r,i);if(!O.success)return{success:!1,error:`workflow_transition: postAction "${x.label}" (UID ${C}) failed \u2014 ${O.error}`}}return{success:!0}}resolveAssetClassFromFrontmatter(e){let t=e.exo__Instance_class;if(t==null)return null;let r=Array.isArray(t)?t:[t],i=new Set(Object.values(Km.AssetClass));for(let s of r){if(typeof s!="string")continue;let o=s.replace(/^\s*"?\[\[/,"").replace(/\]\]"?\s*$/,""),l=(o.includes("|")?o.split("|")[1]:o).trim();if(i.has(l))return l;let u=o.match(/^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/i);if(u){let f=Cr.CLASS_UID_TO_LABEL[u[1].toLowerCase()];if(f&&i.has(f))return f}}return null}resolveStatusFromFrontmatter(e){let t=e.ems__Effort_status;if(t==null)return null;if(Array.isArray(t)){if(t.length!==1)return null;t=t[0]}let i=String(t).trim().replace(/^["']/,"").replace(/["']$/,"").replace(/^\[\[/,"").replace(/\]\]$/,"");if(/^ems__EffortStatus[A-Za-z]+$/.test(i))return i;if(i.includes("|")){let o=i.split("|")[1].trim();if(/^ems__EffortStatus[A-Za-z]+$/.test(o))return o}let s=i.match(/^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/i);if(s){let o=PB[s[1].toLowerCase()];if(o)return o}return null}static applyIsoDuration(e,t){let r=t.trim();if(/^-?P(\d+Y)(\d+M)?$|^-?P\d+M$/.test(r)){let o=uC.DateTimeParsing.parseYearMonthDuration(r),c=new Date(e.getTime());return c.setMonth(c.getMonth()+o),c}let s=uC.DateTimeParsing.parseDayTimeDuration(r);return new Date(e.getTime()+s)}static extractBacklinkTarget(e,t){let r=Tr.resolveTargetPath(e,t),i=r.split("/").pop()??r;return Tr.UUID_BASENAME_RE.test(i)?i:r}static resolveTargetPath(e,t){if(t)return t.replace(/\.md$/i,"").replace(/^\/+/,"");if(e){let r=e.match(/^obsidian:\/\/vault\/(.+?)(?:\.md)?(?:\?|#|$)/i);if(r&&r[1])try{return decodeURIComponent(r[1])}catch{return r[1]}}return e}};Cr.GroundingExecutor=Qm;Qm.UUID_BASENAME_RE=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;Cr.GroundingExecutor=Qm=Tr=EB([(0,AB.injectable)(),TB("design:paramtypes",[Object,Object,Ym,Function,Object])],Qm)});var pC=E(s1=>{"use strict";Object.defineProperty(s1,"__esModule",{value:!0});s1.createVaultFrontmatterClassLabelResolver=NB;function NB(n){return async e=>{if(!e)return null;let t=await n.findFilesByMetadata({exo__Asset_label:e});if(t.length>0){let s=(await n.getFileMetadata(t[0])).exo__Asset_uid;if(typeof s=="string"&&s.length>0)return s}let r=await n.findFilesByMetadata({aliases:e});if(r.length>0){let s=(await n.getFileMetadata(r[0])).exo__Asset_uid;if(typeof s=="string"&&s.length>0)return s}return null}}a(NB,"createVaultFrontmatterClassLabelResolver")});var mC=E(o1=>{"use strict";Object.defineProperty(o1,"__esModule",{value:!0});o1.createVaultFrontmatterRefToFolderResolver=kB;function kB(n){return async e=>{if(!e)return null;let t=await n.findFilesByMetadata({exo__Asset_uid:e});return t.length===0?null:MB(t[0])}}a(kB,"createVaultFrontmatterRefToFolderResolver");function MB(n){let e=n.replace(/^\/+/,""),t=e.lastIndexOf("/");return t>=0?e.slice(0,t):""}a(MB,"parentFolderOf")});var yC=E(uo=>{"use strict";var jB=uo&&uo.__decorate||function(n,e,t,r){var i=arguments.length,s=i<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(n,e,t,r);else for(var c=n.length-1;c>=0;c--)(o=n[c])&&(s=(i<3?o(s):i>3?o(e,t,s):o(e,t))||s);return i>3&&s&&Object.defineProperty(e,t,s),s},$B=uo&&uo.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},Ml;Object.defineProperty(uo,"__esModule",{value:!0});uo.NamedQueryRunner=void 0;var UB=Qe(),BB=ze(),VB=Je(),gC=Lm(),qB=Op(),a1=Ml=class{static{a(this,"NamedQueryRunner")}constructor(e,t){this.queryBodyResolver=e,this.tripleStore=t}async run(e,t={}){if(!e)return null;let r=await this.queryBodyResolver.resolveSparql(e);if(!r)return null;let i=this.substitute(r,t);return(0,gC.evaluateWithExoEval)(i,{store:this.tripleStore})}async runScalar(e,t={},r){if(!e)throw new Error("NamedQueryRunner.runScalar: empty queryUid");let i=await this.queryBodyResolver.resolveSparql(e);if(!i)throw new Error(`NamedQueryRunner: query__NamedQuery '${e}' has no resolvable SPARQL body (asset missing or no \`\`\`sparql block).`);let s=this.substitute(i,t),o=await(0,gC.evaluateWithExoEval)(s,{store:this.tripleStore});if(o.kind==="ask")return{value:o.result?"true":"false",kind:"literal"};if(o.kind==="construct")return null;let c=o.rows[0];if(!c)return null;let l=c.variables(),u=r??l[0];if(!u)return null;let f=c.get(u);return f===void 0?null:f instanceof BB.IRI?{value:(0,qB.iriToObsidianName)(f.value)??f.value,kind:"iri"}:f instanceof VB.Literal?{value:f.value,kind:"literal"}:null}substitute(e,t){let r=e;t.currentAsset&&(r=r.replace(/\$currentAsset\b/g,Ml.formatIri(t.currentAsset))),t.currentClass&&(r=r.replace(/\$currentClass\b/g,Ml.formatIri(t.currentClass)));let i=t.params;if(i){let s=Object.keys(i).sort((o,c)=>c.length-o.length);for(let o of s){let c=i[o],l=c.kind==="iri"?Ml.formatIri(c.value):`"${Ml.escapeLiteral(c.value)}"`,u=o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");r=r.replace(new RegExp(`\\$${u}\\b`,"g"),l)}}return r}static formatIri(e){if(/[\s<>"{}|\\^`]/.test(e))throw new Error(`NamedQueryRunner: refusing to inject malformed IRI "${e}" \u2014 contains a character illegal in a SPARQL IRIREF (would break out of <...>). Pass a percent-encoded IRI.`);return`<${e}>`}static escapeLiteral(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t")}};uo.NamedQueryRunner=a1;uo.NamedQueryRunner=a1=Ml=jB([(0,UB.injectable)(),$B("design:paramtypes",[Object,Object])],a1)});var bC=E(Xm=>{"use strict";Object.defineProperty(Xm,"__esModule",{value:!0});Xm.extractSparqlBlock=GB;Xm.stripFrontmatter=WB;function GB(n){let e=n.match(/```sparql\s*\n([\s\S]*?)\n```/);if(!e)return null;let t=e[1].trim();return t.length>0?t:null}a(GB,"extractSparqlBlock");function WB(n){if(!n.startsWith("---"))return n;let e=n.indexOf(`
|
|
94
94
|
---`,3);return e<0?n:n.slice(e+4)}a(WB,"stripFrontmatter")});var SC=E(fo=>{"use strict";var HB=fo&&fo.__decorate||function(n,e,t,r){var i=arguments.length,s=i<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(n,e,t,r);else for(var c=n.length-1;c>=0;c--)(o=n[c])&&(s=(i<3?o(s):i>3?o(e,t,s):o(e,t))||s);return i>3&&s&&Object.defineProperty(e,t,s),s},zB=fo&&fo.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},Uf;Object.defineProperty(fo,"__esModule",{value:!0});fo.CommandExecutionFlow=void 0;var KB=Qe(),_C=Wo(),YB=ze(),QB=Je(),XB=Qt(),JB=Mn(),Jm=Uf=class{static{a(this,"CommandExecutionFlow")}constructor(e,t,r,i,s,o,c){this.groundingExecutor=e,this.notificationService=t,this.logger=r,this.prompts=i,this.tripleStore=s,this.fileOpener=o,this.requiredPropertyResolver=c}async run(e,t){let{command:r}=e;if(r.confirmMessage&&!await this.prompts.confirm(r.confirmMessage))return;let i=t.injectedUserInput,s=Uf.extractInputSchema(e);if(s!==null&&s.length>0){let l=await this.applyLabelDatePrefill(s,r.grounding,t.targetIRI);l=await this.applyRequiredPropertyFields(l,r.grounding,t);let u=await this.prompts.promptInputSchema(l);if(u===null)return;i={...t.injectedUserInput??{},...u}}let o=await this.groundingExecutor.execute(r.grounding,t.targetIRI??"",t.filePath??"",i),c=t.filePath??"<no-file>";if(o.success){if(r.successMessage&&this.notificationService.success(r.successMessage),await new Promise(l=>setTimeout(l,100)),t.onComplete&&await t.onComplete(),o.openPath&&this.fileOpener)try{await this.fileOpener.open(o.openPath,{sameTab:r.openInSameTab})}catch(l){this.logger.info(`[CommandExecutionFlow] Failed to open created file "${o.openPath}": ${l instanceof Error?l.message:String(l)}`)}this.logger.info(`[CommandExecutionFlow] Executed "${r.name}" on ${c}`)}else this.notificationService.error(`Command failed: ${o.error??"unknown error"}`),this.logger.info(`[CommandExecutionFlow] Failed "${r.name}": ${o.error}`)}static extractInputSchema(e){let r=e.command.grounding.inputSchema;return!r||!Array.isArray(r)?null:r}async applyLabelDatePrefill(e,t,r){if(t.type!==_C.GroundingType.CREATE_INSTANCE||!t.prefillLabelWithDate||!r||!this.tripleStore)return e;let i=await this.resolveAssetLabel(r);if(!i)return e;let s=JB.DateFormatter.toDateString(new Date),o=`${i} ${s}`;return e.map(c=>{if(typeof c!="object"||c===null)return c;let l=c;if(l.name!=="label")return c;let u=l.defaultValue;return typeof u=="string"&&u.length>0?c:{...l,defaultValue:o}})}async applyRequiredPropertyFields(e,t,r){if(t.type!==_C.GroundingType.CREATE_INSTANCE||t.targetClass||!this.requiredPropertyResolver||!r.filePath)return e;let i=Uf.basenameUid(r.filePath);if(!i)return e;let s;try{s=await this.requiredPropertyResolver(i)}catch(l){return this.logger.info(`[CommandExecutionFlow] required-property resolution failed for "${i}": ${l instanceof Error?l.message:String(l)}`),e}if(s.length===0)return e;let o=new Set(Uf.ALWAYS_COVERED);for(let l of e)l&&typeof l=="object"&&typeof l.name=="string"&&o.add(l.name);let c=s.filter(l=>!o.has(l.propertyKey)).map(l=>{let u={name:l.propertyKey,type:l.fieldType,label:l.label,required:!0};return l.targetClassUid&&(u.targetClassUid=l.targetClassUid),l.fieldType==="boolean"&&(u.defaultValue="false"),u});return c.length===0?e:[...e,...c]}static basenameUid(e){let t=e.replace(/^\/+/,"").split("/").pop()?.replace(/\.md$/i,"");return t&&/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(t)?t.toLowerCase():null}async resolveAssetLabel(e){if(!this.tripleStore)return;let t=new YB.IRI(e),r=await this.tripleStore.match(t,XB.Namespace.EXO.term("Asset_label"),void 0);if(r.length===0)return;let i=r[0].object;if(i instanceof QB.Literal)return i.value.length>0?i.value:void 0}};fo.CommandExecutionFlow=Jm;Jm.ALWAYS_COVERED=["exo__Asset_uid","exo__Asset_createdAt","exo__Asset_updatedAt","exo__Asset_label","exo__Asset_createdBy","exo__Instance_class","exo__Asset_isDefinedBy"];fo.CommandExecutionFlow=Jm=Uf=HB([(0,KB.injectable)(),zB("design:paramtypes",[Function,Object,Object,Object,Object,Object,Function])],Jm)});var EC=E(l1=>{"use strict";Object.defineProperty(l1,"__esModule",{value:!0});l1.createTripleStoreRequiredPropertyResolver=rV;var Bf=ze(),c1=Je(),wC=Qt(),vC="http://www.w3.org/2001/XMLSchema#",ZB=/\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.md$/i,eV=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Vf(n){let e=ZB.exec(n);return e?e[1].toLowerCase():eV.test(n.trim())?n.trim().toLowerCase():null}a(Vf,"uidFrom");function tV(n){for(let e of n){let t=e.value;if(t.startsWith(vC)){let r=t.slice(vC.length).toLowerCase();return r==="date"||r==="datetime"?{fieldType:"date"}:r==="boolean"?{fieldType:"boolean"}:["integer","int","long","short","decimal","float","double","nonnegativeinteger","positiveinteger"].includes(r)?{fieldType:"number"}:{fieldType:"text"}}if(e.iri){let r=Vf(t);return r?{fieldType:"assetRef",targetClassUid:r}:{fieldType:"assetRef"}}}return{fieldType:"text"}}a(tV,"fieldTypeFromRange");function rV(n){let e=wC.Namespace.EXO,t=wC.Namespace.RDFS;return async r=>{let i=Vf(r)??r.trim().toLowerCase();if(!i)return[];let s=await n.match(void 0,e.term("Class_superClass"),void 0),o=new Map;for(let h of s){let p=h.subject instanceof Bf.IRI?Vf(h.subject.value):null,b=h.object instanceof Bf.IRI?Vf(h.object.value):null;if(!p||!b)continue;let y=o.get(p);y||(y=new Set,o.set(p,y)),y.add(b)}let c=new Set([i]),l=[i];for(;l.length>0;){let h=l.shift();if(h===void 0)break;for(let p of o.get(h)??[])c.has(p)||(c.add(p),l.push(p))}let u=await n.match(void 0,e.term("Property_minCount"),void 0),f=[],d=new Set;for(let h of u){if(!((h.object instanceof c1.Literal?parseInt(h.object.value,10):NaN)>0))continue;let b=h.subject;if(!(b instanceof Bf.IRI)||!(await n.match(b,e.term("Property_domain"),void 0)).map(L=>L.object instanceof Bf.IRI?Vf(L.object.value):null).filter(L=>L!==null).some(L=>c.has(L)))continue;let v=null;for(let L of[e.term("Asset_label"),t.term("label")]){let ee=await n.match(b,L,void 0);for(let V of ee)if(V.object instanceof c1.Literal&&V.object.value.trim().length>0){v=V.object.value.trim();break}if(v)break}if(!v||d.has(v))continue;d.add(v);let C=(await n.match(b,e.term("Property_range"),void 0)).map(L=>L.object instanceof Bf.IRI?{iri:!0,value:L.object.value}:L.object instanceof c1.Literal?{iri:!1,value:L.object.value}:null).filter(L=>L!==null),{fieldType:x,targetClassUid:O}=tV(C);f.push({propertyKey:v,label:v,fieldType:x,targetClassUid:O})}return f.sort((h,p)=>h.propertyKey.localeCompare(p.propertyKey)),f}}a(rV,"createTripleStoreRequiredPropertyResolver")});var qf=E(ho=>{"use strict";var nV=ho&&ho.__decorate||function(n,e,t,r){var i=arguments.length,s=i<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(n,e,t,r);else for(var c=n.length-1;c>=0;c--)(o=n[c])&&(s=(i<3?o(s):i>3?o(e,t,s):o(e,t))||s);return i>3&&s&&Object.defineProperty(e,t,s),s},iV=ho&&ho.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)};Object.defineProperty(ho,"__esModule",{value:!0});ho.WorkflowEngine=void 0;var sV=Qe(),u1=class{static{a(this,"WorkflowEngine")}constructor(e){this.definition=e}getAvailableTransitions(e){return this.definition.transitions.filter(t=>t.from===e&&!t.isRollback)}getRollbackTransitions(e){return this.definition.transitions.filter(t=>t.from===e&&t.isRollback)}getAllTransitions(e){return this.definition.transitions.filter(t=>t.from===e)}canTransition(e,t){return this.definition.transitions.some(r=>r.from===e&&r.to===t)}getPreviousStatus(e){return this.definition.transitions.find(r=>r.from===e&&r.isRollback)?.to??null}getNextStates(e){return this.getAvailableTransitions(e).map(t=>t.to)}isTerminalState(e){return this.definition.terminalStates.includes(e)}isInitialState(e){return this.definition.initialState===e}getTimestampsForStatus(e){return this.definition.states.find(r=>r.status===e)?.timestampOnEnter??[]}getTransition(e,t){return this.definition.transitions.find(r=>r.from===e&&r.to===t)}getOrderedStates(){return this.definition.states.map(e=>e.status)}getDefinition(){return this.definition}validate(){let e=[],t=new Set(this.definition.states.map(i=>i.status));this.definition.states.length===0&&e.push("Workflow must have at least one state"),t.has(this.definition.initialState)||e.push(`Initial state "${this.definition.initialState}" is not in the states list`);for(let i of this.definition.terminalStates)t.has(i)||e.push(`Terminal state "${i}" is not in the states list`);for(let i of this.definition.transitions)t.has(i.from)||e.push(`Transition "${i.label}" references unknown source state "${i.from}"`),t.has(i.to)||e.push(`Transition "${i.label}" references unknown target state "${i.to}"`);for(let i of this.definition.states){if(this.definition.terminalStates.includes(i.status))continue;this.definition.transitions.filter(o=>o.from===i.status&&!o.isRollback).length===0&&e.push(`State "${i.status}" has no outgoing forward transitions (dead end)`)}let r=new Set;for(let i of this.definition.transitions){let s=`${i.from}\u2192${i.to}`;r.has(s)&&e.push(`Duplicate transition: ${s}`),r.add(s)}return{valid:e.length===0,errors:e}}};ho.WorkflowEngine=u1;ho.WorkflowEngine=u1=nV([(0,sV.injectable)(),iV("design:paramtypes",[Object])],u1)});var TC=E(vs=>{"use strict";Object.defineProperty(vs,"__esModule",{value:!0});vs.EFFORT_WORKFLOW_PROPERTY=vs.WorkflowTransitionProperty=vs.WorkflowStateProperty=vs.WorkflowProperty=void 0;vs.WorkflowProperty={TARGET_CLASS:"ems__Workflow_targetClass",INITIAL_STATE:"ems__Workflow_initialState",TERMINAL_STATES:"ems__Workflow_terminalStates",IS_DEFAULT:"ems__Workflow_isDefault"};vs.WorkflowStateProperty={WORKFLOW:"ems__WorkflowState_workflow",STATUS:"ems__WorkflowState_status",ORDER:"ems__WorkflowState_order",OPTIONAL:"ems__WorkflowState_optional",TIMESTAMP_ON_ENTER:"ems__WorkflowState_timestampOnEnter",BADGE_COLOR:"ems__WorkflowState_badgeColor"};vs.WorkflowTransitionProperty={WORKFLOW:"ems__WorkflowTransition_workflow",FROM:"ems__WorkflowTransition_from",TO:"ems__WorkflowTransition_to",LABEL:"ems__WorkflowTransition_label",ICON:"ems__WorkflowTransition_icon",IS_ROLLBACK:"ems__WorkflowTransition_isRollback"};vs.EFFORT_WORKFLOW_PROPERTY="ems__Effort_workflow"});var po=E(Zm=>{"use strict";Object.defineProperty(Zm,"__esModule",{value:!0});Zm.MetadataHelpers=void 0;var AC=Mf(),f1=Gm(),d1=class{static{a(this,"MetadataHelpers")}static findAllReferencingProperties(e,t){let r=[];for(let[i,s]of Object.entries(e))this.containsReference(s,t)&&r.push(i);return r}static findReferencingProperty(e,t){for(let[r,i]of Object.entries(e))if(this.containsReference(i,t))return r}static containsReference(e,t){if(!e)return!1;let r=t.replace(/\.md$/,"");if(typeof e=="string"){let i=/\[\[([^[\]]+)\]\]/g,s;for(;(s=i.exec(e))!==null;){let c=s[1].split("|")[0].trim();if(c===r||c.endsWith(`/${r}`))return!0}return!1}return Array.isArray(e)?e.some(i=>this.containsReference(i,t)):!1}static isAssetArchived(e){let t=e?.exo__Asset_isArchived;if(t!=null){if(t===!0||t===1)return!0;if(typeof t=="string"){let i=t.toLowerCase().trim();if(i==="true"||i==="yes"||i==="1")return!0}if(typeof t=="boolean")return t}let r=e?.archived;if(r==null)return!1;if(typeof r=="boolean")return r;if(typeof r=="number")return r!==0;if(typeof r=="string"){let i=r.toLowerCase().trim();return i==="true"||i==="yes"||i==="1"}return!1}static getPropertyValue(e,t){return t==="Name"||t==="title"?e.title:t==="created"?e.created:t==="modified"?e.modified:t==="path"?e.path:e.metadata?.[t]}static ensureQuoted(e){return!e||e==='""'?'""':e.startsWith('"')&&e.endsWith('"')?e:`"${e}"`}static buildFileContent(e,t){let r=(0,AC.orderProperties)(e,(0,AC.loadDefaultSpec)()),i=Object.entries(r).map(([c,l])=>{let u=f1.STRING_SCALAR_PROPERTIES.has(c);if(Array.isArray(l)){let f=l.map(d=>` - ${(0,f1.serializeYamlScalar)(d,u)}`).join(`
|
|
95
95
|
`);return`${c}:
|
|
96
96
|
${f}`}return`${c}: ${(0,f1.serializeYamlScalar)(l,u)}`}).join(`
|
|
@@ -637,7 +637,7 @@ Duplicate bindings (${n.duplicates.length}) \u2014 uid claimed by >1 test (warni
|
|
|
637
637
|
Skipped floor check for ${n.unknownPriority} requirement(s) with unparseable priority (fail-open).`),n.clean?e==="hard"&&!n.rampReady?console.error(`
|
|
638
638
|
FAIL (hard gate): ramp not ready \u2014 ${n.p0Orphans} P0 requirement(s) unbound`+(n.p0Total===0?" (no P0 requirements found)":"")+"."):console.log(`
|
|
639
639
|
OK: no hard findings (dangling tags + binding-class floor are clean).`):console.error(`
|
|
640
|
-
FAIL: ${n.dangling.length} dangling + ${n.floorViolations.length} floor violation(s) + ${n.activeViolations.length} active-requirement invariant violation(s) + ${n.danglingEvidence.length} dangling evidence link(s).`)}a(Tse,"renderText");function Ase(n,e,t){return!n.clean||t&&n.orphans.length>0||e==="hard"&&!n.rampReady}a(Ase,"isHardFail");function r9(){return new Ne("audit").description("Audit requirement\u2194test traceability: orphans, dangling @req tags, duplicate bindings, binding-class floor, coverage, P0 ramp-readiness").requiredOption("--reqs <path>","Directory tree containing req__Requirement assets (a vault or a reqs assetspace clone)").option("--tests <path>","Test-corpus root scanned for @req:<uid> tags",".").option("--output <type>","Response format: text|json","text").option("--strict","Also exit 1 on orphan requirements",!1).option("--gate <mode>","Gate mode: soft (warn only on hard findings) | hard (also block when the P0 checklist is not ramp-ready)","soft").action(async n=>{let e=n.output??"text";Se.setFormat(e);let t=n.gate==="hard"?"hard":"soft";try{let r=(0,Fa.resolve)(n.reqs);if(!(0,La.existsSync)(r)||!(0,La.statSync)(r).isDirectory())throw new Xe(r);let i=(0,Fa.resolve)(n.tests??".");if(!(0,La.existsSync)(i)||!(0,La.statSync)(i).isDirectory())throw new Xe(i);let[s,o]=await Promise.all([_se(r),wse(i)]),c=vse(s,o);e==="json"?console.log(JSON.stringify({...c,gate:t},null,2)):Tse(c,t),Ase(c,t,n.strict===!0)&&(process.exitCode=1)}catch(r){Se.handle(r)}})}a(r9,"requirementsAuditCommand");function n9(){let n=new Ne("requirements").description("Requirements-management tooling (RFC 0003): traceability checker");return n.addCommand(r9()),n}a(n9,"requirementsCommand");function mb(n){let e=new Ne;return e.name("exocortex").description("CLI tool for Exocortex knowledge management system").version(n??"16.
|
|
640
|
+
FAIL: ${n.dangling.length} dangling + ${n.floorViolations.length} floor violation(s) + ${n.activeViolations.length} active-requirement invariant violation(s) + ${n.danglingEvidence.length} dangling evidence link(s).`)}a(Tse,"renderText");function Ase(n,e,t){return!n.clean||t&&n.orphans.length>0||e==="hard"&&!n.rampReady}a(Ase,"isHardFail");function r9(){return new Ne("audit").description("Audit requirement\u2194test traceability: orphans, dangling @req tags, duplicate bindings, binding-class floor, coverage, P0 ramp-readiness").requiredOption("--reqs <path>","Directory tree containing req__Requirement assets (a vault or a reqs assetspace clone)").option("--tests <path>","Test-corpus root scanned for @req:<uid> tags",".").option("--output <type>","Response format: text|json","text").option("--strict","Also exit 1 on orphan requirements",!1).option("--gate <mode>","Gate mode: soft (warn only on hard findings) | hard (also block when the P0 checklist is not ramp-ready)","soft").action(async n=>{let e=n.output??"text";Se.setFormat(e);let t=n.gate==="hard"?"hard":"soft";try{let r=(0,Fa.resolve)(n.reqs);if(!(0,La.existsSync)(r)||!(0,La.statSync)(r).isDirectory())throw new Xe(r);let i=(0,Fa.resolve)(n.tests??".");if(!(0,La.existsSync)(i)||!(0,La.statSync)(i).isDirectory())throw new Xe(i);let[s,o]=await Promise.all([_se(r),wse(i)]),c=vse(s,o);e==="json"?console.log(JSON.stringify({...c,gate:t},null,2)):Tse(c,t),Ase(c,t,n.strict===!0)&&(process.exitCode=1)}catch(r){Se.handle(r)}})}a(r9,"requirementsAuditCommand");function n9(){let n=new Ne("requirements").description("Requirements-management tooling (RFC 0003): traceability checker");return n.addCommand(r9()),n}a(n9,"requirementsCommand");function mb(n){let e=new Ne;return e.name("exocortex").description("CLI tool for Exocortex knowledge management system").version(n??"16.167.0"),e.addCommand(X4()),e.addCommand(aj()),e.addCommand(KM()),e.addCommand(JM()),e.addCommand(S4()),e.addCommand(ZM()),e.addCommand(E4()),e.addCommand(D4()),e.addCommand(L4()),e.addCommand(K4()),e.addCommand(Ej()),e.addCommand(Ij()),e.addCommand(Vj()),e.addCommand(Gj()),e.addCommand(zj()),e.addCommand(Kj()),e.addCommand(Jj()),e.addCommand(Fj()),e.addCommand($j()),e.addCommand(n9()),e}a(mb,"createProgram");mb().parse();0&&(module.exports={createProgram});
|
|
641
641
|
/*! Bundled license information:
|
|
642
642
|
|
|
643
643
|
reflect-metadata/Reflect.js:
|
package/package.json
CHANGED