@kitelev/exocortex-cli 15.9.1 → 15.9.2
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 v15.9.
|
|
2
|
+
// @kitelev/exocortex-cli v15.9.2
|
|
3
3
|
// CLI tool for Exocortex knowledge management system - SPARQL queries, task management, and more
|
|
4
4
|
// License: MIT
|
|
5
5
|
|
|
@@ -99,7 +99,7 @@ ${s}`}return`${r}: ${i}`}).join(`
|
|
|
99
99
|
---`}};Ys.DynamicFrontmatterGenerator=cg;Ys.DynamicFrontmatterGenerator=cg=eR([(0,tR.injectable)()],cg)});var fg=v(Fn=>{"use strict";var nR=Fn&&Fn.__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},iR=Fn&&Fn.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},sR=Fn&&Fn.__param||function(n,e){return function(t,r){e(t,r,n)}};Object.defineProperty(Fn,"__esModule",{value:!0});Fn.PlanningService=void 0;var kS=Le(),aR=ts(),oR=Ht(),cR=ct(),lg=class{static{o(this,"PlanningService")}constructor(e){this.vault=e,this.frontmatterService=new aR.FrontmatterService}async planOnToday(e){let t=this.vault.getAbstractFileByPath(e);if(!t||!this.isFile(t))throw new Error(`File not found: ${e}`);let r=await this.vault.read(t),i=oR.DateFormatter.getTodayStartTimestamp(),s=this.frontmatterService.updateProperty(r,"ems__Effort_plannedStartTimestamp",i);await this.vault.modify(t,s)}isFile(e){return"basename"in e}};Fn.PlanningService=lg;Fn.PlanningService=lg=nR([(0,kS.injectable)(),sR(0,(0,kS.inject)(cR.DI_TOKENS.IVaultAdapter)),iR("design:paramtypes",[Object])],lg)});var dg=v(Nn=>{"use strict";var uR=Nn&&Nn.__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},lR=Nn&&Nn.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},fR=Nn&&Nn.__param||function(n,e){return function(t,r){e(t,r,n)}};Object.defineProperty(Nn,"__esModule",{value:!0});Nn.AssetConversionService=void 0;var jS=Le(),$S=ir(),hR=ts(),tf=rs(),dR=ct(),hg=class{static{o(this,"AssetConversionService")}constructor(e){this.vault=e,this.frontmatterService=new hR.FrontmatterService}async convertTaskToProject(e){try{let t=await this.vault.read(e),r=this.removeInstanceClassProperty(t);return r=this.frontmatterService.updateProperty(r,"exo__Instance_class",`["[[${$S.AssetClass.PROJECT}]]"]`),await this.vault.modify(e,r),tf.LoggingService.info(`Converted Task to Project: ${e.basename} (${e.path})`),e}catch(t){let r=`Failed to convert Task to Project: ${e.path}`;throw tf.LoggingService.error(r,t instanceof Error?t:void 0),new Error(r)}}async convertProjectToTask(e){try{let t=await this.vault.read(e),r=this.removeInstanceClassProperty(t);return r=this.frontmatterService.updateProperty(r,"exo__Instance_class",`["[[${$S.AssetClass.TASK}]]"]`),await this.vault.modify(e,r),tf.LoggingService.info(`Converted Project to Task: ${e.basename} (${e.path})`),e}catch(t){let r=`Failed to convert Project to Task: ${e.path}`;throw tf.LoggingService.error(r,t instanceof Error?t:void 0),new Error(r)}}removeInstanceClassProperty(e){let t=this.frontmatterService.parse(e);if(!t.exists)return e;let r=/^exo__Instance_class:.*$(\n -.*$)*/gm,i=t.content.replace(r,"").replace(/\n\n+/g,`
|
|
100
100
|
`).trim();return e.replace(/^---\n[\s\S]*?\n---/,`---
|
|
101
101
|
${i}
|
|
102
|
-
---`)}};Nn.AssetConversionService=hg;Nn.AssetConversionService=hg=uR([(0,jS.injectable)(),fR(0,(0,jS.inject)(dR.DI_TOKENS.IVaultAdapter)),lR("design:paramtypes",[Object])],hg)});var mg=v(Ln=>{"use strict";var pR=Ln&&Ln.__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},mR=Ln&&Ln.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},gR=Ln&&Ln.__param||function(n,e){return function(t,r){e(t,r,n)}};Object.defineProperty(Ln,"__esModule",{value:!0});Ln.SessionEventService=void 0;var VS=Le(),yR=vr(),US=ir(),vR=Ht(),SR=nn(),_R=ct(),pg=class{static{o(this,"SessionEventService")}constructor(e){this.vault=e,this.folderPathCache=null,this.defaultOntologyAsset=null}setDefaultOntologyAsset(e){this.defaultOntologyAsset=e,this.folderPathCache=null}async createSessionStartEvent(e){return this.createSessionEvent(e,US.AssetClass.SESSION_START_EVENT)}async createSessionEndEvent(e){return this.createSessionEvent(e,US.AssetClass.SESSION_END_EVENT)}async getOntologyAssetFolder(){if(this.folderPathCache!==null)return this.folderPathCache;if(!this.defaultOntologyAsset){let r=this.vault.getDefaultNewFileParent();return this.folderPathCache=r?.path||"",this.folderPathCache}let e=this.vault.getAllFiles();for(let r of e)if(r.basename===this.defaultOntologyAsset){let i=r.parent?.path||"";return this.folderPathCache=i,this.folderPathCache}let t=this.vault.getDefaultNewFileParent();return this.folderPathCache=t?.path||"",this.folderPathCache}async createSessionEvent(e,t){let r=(0,yR.v4)(),i=vR.DateFormatter.toLocalTimestamp(new Date),s=this.defaultOntologyAsset?`"[[${this.defaultOntologyAsset}]]"`:'"[[!kitelev]]"',a={exo__Asset_uid:r,exo__Asset_createdAt:i,exo__Asset_isDefinedBy:s,exo__Instance_class:[`"[[${t}]]"`],ems__SessionEvent_timestamp:i,ems__Session_area:`"[[${e}]]"`},c=SR.MetadataHelpers.buildFileContent(a),u=await this.getOntologyAssetFolder();u&&!await this.vault.exists(u)&&await this.vault.createFolder(u);let l=u?`${u}/${r}.md`:`${r}.md`;return await this.vault.create(l,c)}};Ln.SessionEventService=pg;Ln.SessionEventService=pg=pR([(0,VS.injectable)(),gR(0,(0,VS.inject)(_R.DI_TOKENS.IVaultAdapter)),mR("design:paramtypes",[Object])],pg)});var yg=v(Mn=>{"use strict";var wR=Mn&&Mn.__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},bR=Mn&&Mn.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},ER=Mn&&Mn.__param||function(n,e){return function(t,r){e(t,r,n)}};Object.defineProperty(Mn,"__esModule",{value:!0});Mn.URIConstructionService=void 0;var BS=Le(),TR=ct(),gg=class{static{o(this,"URIConstructionService")}constructor(e){this.fileSystem=e,this.defaultOntologyURL="https://exocortex.my/default/",this.strictValidation=!0}configure(e){e?.defaultOntologyURL&&(this.defaultOntologyURL=e.defaultOntologyURL),e?.strictValidation!==void 0&&(this.strictValidation=e.strictValidation)}async constructAssetURI(e){let t=this.extractUID(e);if(!t){if(this.strictValidation)throw new Error(`Asset missing exo__Asset_uid: ${e.path}`);return console.warn(`Asset ${e.path} missing UID, using filename fallback`),this.constructFallbackURI(e)}let r=await this.resolveOntologyURL(e);if(!this.validateOntologyURL(r))throw new Error(`Invalid ontology URL: ${r}`);return`${r.endsWith("/")?r:`${r}/`}${t}`}validateOntologyURL(e){if(!e)return!1;try{let t=new URL(e);return t.protocol==="http:"||t.protocol==="https:"}catch{return!1}}async resolveOntologyURL(e){let t=e.frontmatter?.exo__Asset_isDefinedBy;if(!t)return this.defaultOntologyURL;let r=this.extractWikiLink(t),i=r,s=await this.fileSystem.fileExists(r);return!s&&!r.endsWith(".md")&&(i=`${r}.md`,s=await this.fileSystem.fileExists(i)),s?(await this.fileSystem.getFileMetadata(i))?.exo__Ontology_url||this.defaultOntologyURL:(console.warn(`Ontology file not found: ${r}, using default`),this.defaultOntologyURL)}extractUID(e){return e.frontmatter?.exo__Asset_uid||null}extractWikiLink(e){return e.replace(/^\[\[|\]\]$/g,"")}constructFallbackURI(e){let t=e.path.split("/").pop()?.replace(".md","")||"unknown";return`${this.defaultOntologyURL}${t}`}};Mn.URIConstructionService=gg;Mn.URIConstructionService=gg=wR([(0,BS.injectable)(),ER(0,(0,BS.inject)(TR.DI_TOKENS.IFileSystemAdapter)),bR("design:paramtypes",[Object])],gg)});var qS=v(Ks=>{"use strict";var AR=Ks&&Ks.__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};Object.defineProperty(Ks,"__esModule",{value:!0});Ks.WebhookService=void 0;var CR=Le(),ka=rs(),vg=class{static{o(this,"WebhookService")}constructor(){this.webhooks=new Map,this.rateLimitStates=new Map,this.defaultRateLimitConfig={maxRequests:100,windowMs:6e4},this.dispatchHistory=[],this.maxHistorySize=100}registerWebhook(e){if(!e.id)throw new Error("Webhook ID is required");if(!e.url)throw new Error("Webhook URL is required");try{new URL(e.url)}catch{throw new Error(`Invalid webhook URL: ${e.url}`)}this.webhooks.set(e.id,{...e,timeout:e.timeout??3e4,retryCount:e.retryCount??3}),ka.LoggingService.debug(`Registered webhook: ${e.name} (${e.id})`)}unregisterWebhook(e){let t=this.webhooks.delete(e);return this.rateLimitStates.delete(e),t&&ka.LoggingService.debug(`Unregistered webhook: ${e}`),t}getWebhooks(){return Array.from(this.webhooks.values())}getWebhook(e){return this.webhooks.get(e)}updateWebhook(e,t){let r=this.webhooks.get(e);if(!r)return!1;if(t.url)try{new URL(t.url)}catch{throw new Error(`Invalid webhook URL: ${t.url}`)}return this.webhooks.set(e,{...r,...t,id:e}),ka.LoggingService.debug(`Updated webhook: ${e}`),!0}getWebhooksForEvent(e){return Array.from(this.webhooks.values()).filter(t=>t.enabled&&(t.events.length===0||t.events.includes(e)))}isRateLimited(e){let t=this.rateLimitStates.get(e);if(!t)return!1;let r=Date.now(),{maxRequests:i,windowMs:s}=this.defaultRateLimitConfig;return r-t.windowStart>=s?(this.rateLimitStates.set(e,{requests:0,windowStart:r}),!1):t.requests>=i}recordRequest(e){let t=Date.now(),r=this.rateLimitStates.get(e),{windowMs:i}=this.defaultRateLimitConfig;!r||t-r.windowStart>=i?this.rateLimitStates.set(e,{requests:1,windowStart:t}):r.requests++}setRateLimitConfig(e){this.defaultRateLimitConfig=e}async dispatchEvent(e){let t=this.getWebhooksForEvent(e.event),r=[];for(let i of t){let s=await this.dispatchToWebhook(i,e);r.push(s),this.addToHistory(s)}return r}async dispatchToWebhook(e,t){let r=e.retryCount??3,i,s=0;for(;s<=r;){if(this.isRateLimited(e.id))return{webhookId:e.id,success:!1,error:"Rate limit exceeded",timestamp:new Date().toISOString(),retryCount:s};try{this.recordRequest(e.id);let a={"Content-Type":"application/json","User-Agent":"Exocortex-Webhook/1.0","X-Webhook-Event":t.event,"X-Webhook-Timestamp":t.timestamp,...e.headers},c=JSON.stringify(t);if(e.secret){let f=await this.createHmacSignature(c,e.secret);a["X-Webhook-Signature"]=f}let u=new AbortController,l=setTimeout(()=>u.abort(),e.timeout??3e4);try{let f=await fetch(e.url,{method:"POST",headers:a,body:c,signal:u.signal});if(clearTimeout(l),f.ok)return ka.LoggingService.debug(`Webhook ${e.name} dispatched successfully: ${f.status}`),{webhookId:e.id,success:!0,statusCode:f.status,timestamp:new Date().toISOString(),retryCount:s};i=`HTTP ${f.status}: ${f.statusText}`,ka.LoggingService.warn(`Webhook ${e.name} failed: ${i}`)}finally{clearTimeout(l)}}catch(a){i=a instanceof Error?a.message:"Unknown error",a instanceof Error&&a.name==="AbortError"&&(i="Request timeout"),ka.LoggingService.warn(`Webhook ${e.name} error (attempt ${s+1}/${r+1}): ${i}`)}s++,s<=r&&await this.delay(Math.pow(2,s)*100)}return{webhookId:e.id,success:!1,error:i,timestamp:new Date().toISOString(),retryCount:s-1}}async createHmacSignature(e,t){let r=new TextEncoder,i=r.encode(t),s=r.encode(e),a=await crypto.subtle.importKey("raw",i,{name:"HMAC",hash:"SHA-256"},!1,["sign"]),c=await crypto.subtle.sign("HMAC",a,s);return"sha256="+Array.from(new Uint8Array(c)).map(l=>l.toString(16).padStart(2,"0")).join("")}delay(e){return new Promise(t=>setTimeout(t,e))}addToHistory(e){this.dispatchHistory.push(e),this.dispatchHistory.length>this.maxHistorySize&&this.dispatchHistory.shift()}getDispatchHistory(e=50){return this.dispatchHistory.slice(-e)}clearDispatchHistory(){this.dispatchHistory=[]}async testWebhook(e){let t=this.webhooks.get(e);if(!t)return{webhookId:e,success:!1,error:"Webhook not found",timestamp:new Date().toISOString(),retryCount:0};let r={event:"note.updated",timestamp:new Date().toISOString(),filePath:"/test/webhook-test.md",label:"Webhook Test",data:{test:!0,message:"This is a test webhook event from Exocortex"}},i=t.enabled;t.enabled=!0;let s=await this.dispatchToWebhook(t,r);return t.enabled=i,s}cleanup(){this.webhooks.clear(),this.rateLimitStates.clear(),this.dispatchHistory=[]}};Ks.WebhookService=vg;Ks.WebhookService=vg=AR([(0,CR.injectable)()],vg)});var _g=v(kn=>{"use strict";var xR=kn&&kn.__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},IR=kn&&kn.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},OR=kn&&kn.__param||function(n,e){return function(t,r){e(t,r,n)}};Object.defineProperty(kn,"__esModule",{value:!0});kn.GenericAssetCreationService=void 0;var GS=Le(),PR=vr(),Ic=Ht(),DR=nn(),RR=ct(),ni=Bp(),Sg=class{static{o(this,"GenericAssetCreationService")}constructor(e){this.vault=e}async createAsset(e,t){let r=(0,PR.v4)(),i=`${r}.md`,s=this.generateFrontmatter(e,t||[],r),a=DR.MetadataHelpers.buildFileContent(s),c=e.folderPath||this.getDefaultFolderPath(e);this.vault.getAbstractFileByPath(c)||await this.vault.createFolder(c);let l=c?`${c}/${i}`:i;return await this.vault.create(l,a)}generateFrontmatter(e,t,r){let i=new Date,s={},a=new Map;for(let c of t)a.set(c.name,c.fieldType);if(s.exo__Asset_uid=r,s.exo__Asset_createdAt=Ic.DateFormatter.toLocalTimestamp(i),s.exo__Instance_class=[this.formatWikilink(e.className)],e.label&&e.label.trim()!==""){let c=e.label.trim();s.exo__Asset_label=c,s.aliases=[c]}if(e.parentFile&&e.parentMetadata&&this.inheritParentContext(s,e),e.propertyValues)for(let[c,u]of Object.entries(e.propertyValues)){if(c==="exo__Asset_uid"||c==="exo__Asset_createdAt"||c==="exo__Instance_class"||c==="exo__Asset_label"||c==="aliases"||u==null)continue;let l=a.get(c);s[c]=this.formatValue(u,l)}return s}inheritParentContext(e,t){let r=t.parentMetadata||{},i=t.parentFile?.basename;if((t.className==="ems__Task"||t.className.startsWith("ems__Task"))&&(e.ems__Effort_parent=i?this.formatWikilink(i):null),t.className==="ems__Project"||t.className.startsWith("ems__Project")){let s=r.exo__Instance_class;this.isAreaClass(s)&&(e.ems__Project_area=i?this.formatWikilink(i):null)}r.exo__Asset_isDefinedBy&&(e.exo__Asset_isDefinedBy=r.exo__Asset_isDefinedBy)}isAreaClass(e){return e?(Array.isArray(e)?e:[e]).some(r=>String(r).includes("Area")||String(r).includes("ems__Area")):!1}getDefaultFolderPath(e){if(e.parentFile?.parent?.path)return e.parentFile.parent.path;let t={ems__Task:"tasks",ems__Project:"projects",ems__Area:"areas",ems__Meeting:"meetings",exo__Event:"events",ims__Concept:"concepts"};if(t[e.className])return t[e.className];for(let[r,i]of Object.entries(t))if(e.className.startsWith(r))return i;return"assets"}formatValue(e,t){if(e==null)return null;if(!t)return this.formatInferredValue(e);switch(t){case ni.PropertyFieldType.Text:return String(e);case ni.PropertyFieldType.Wikilink:case ni.PropertyFieldType.Reference:case ni.PropertyFieldType.StatusSelect:case ni.PropertyFieldType.SizeSelect:return this.formatWikilink(String(e));case ni.PropertyFieldType.Number:return typeof e=="number"?e:Number(e)||0;case ni.PropertyFieldType.Boolean:return this.formatBoolean(e);case ni.PropertyFieldType.Date:case ni.PropertyFieldType.DateTime:case ni.PropertyFieldType.Timestamp:return this.formatTimestamp(e);default:return String(e)}}formatInferredValue(e){return typeof e=="boolean"||typeof e=="number"?e:e instanceof Date?Ic.DateFormatter.toLocalTimestamp(e):typeof e=="string"?e.startsWith("[[")||e.startsWith('"[[')?this.formatWikilink(e):e:String(e)}formatWikilink(e){return e.startsWith('"[[')&&e.endsWith(']]"')?e:e.startsWith("[[")&&e.endsWith("]]")?`"${e}"`:`"[[${e}]]"`}formatBoolean(e){if(typeof e=="boolean")return e;if(typeof e=="string"){let t=e.toLowerCase().trim();return t==="true"||t==="yes"||t==="1"}return typeof e=="number"?e!==0:!!e}formatTimestamp(e){if(e instanceof Date)return Ic.DateFormatter.toLocalTimestamp(e);if(typeof e=="string"){if(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$/.test(e))return e;if(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/.test(e))return e.replace("Z","");let t=new Date(e);return isNaN(t.getTime())?e:Ic.DateFormatter.toLocalTimestamp(t)}if(typeof e=="number"){let t=new Date(e);if(!isNaN(t.getTime()))return Ic.DateFormatter.toLocalTimestamp(t)}return String(e)}};kn.GenericAssetCreationService=Sg;kn.GenericAssetCreationService=Sg=xR([(0,GS.injectable)(),OR(0,(0,GS.inject)(RR.DI_TOKENS.IVaultAdapter)),IR("design:paramtypes",[Object])],Sg)});var bg=v(sn=>{"use strict";var FR=sn&&sn.__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},NR=sn&&sn.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)};Object.defineProperty(sn,"__esModule",{value:!0});sn.EmbeddingService=sn.DEFAULT_EMBEDDING_CONFIG=void 0;var LR=Le(),WS=rs();sn.DEFAULT_EMBEDDING_CONFIG={provider:"openai",model:"text-embedding-3-small",timeout:3e4,maxTextLength:8e3};var wg=class{static{o(this,"EmbeddingService")}constructor(e={}){this.requestCount=0,this.tokenCount=0,this.config={...sn.DEFAULT_EMBEDDING_CONFIG,...e}}setConfig(e){this.config={...this.config,...e},WS.LoggingService.debug(`EmbeddingService config updated: provider=${this.config.provider}, model=${this.config.model}`)}getConfig(){let{apiKey:e,...t}=this.config;return t}isConfigured(){return this.config.provider==="openai"?!!this.config.apiKey:!0}async generateEmbedding(e){if(!this.isConfigured())throw new Error("EmbeddingService is not properly configured");let t=this.truncateText(e);if(this.config.provider==="openai")return this.generateOpenAIEmbedding(t);throw new Error(`Unsupported embedding provider: ${this.config.provider}`)}async generateBatchEmbeddings(e){if(!this.isConfigured())throw new Error("EmbeddingService is not properly configured");if(e.length===0)return[];let t=[];if(this.config.provider==="openai"){let r=e.map(i=>this.truncateText(i.text));try{let i=await this.generateOpenAIBatchEmbeddings(r);for(let s=0;s<e.length;s++)t.push({id:e[s].id,result:i[s]??null})}catch(i){let s=i instanceof Error?i.message:"Unknown error";for(let a of e)t.push({id:a.id,result:null,error:s})}}else throw new Error(`Unsupported embedding provider: ${this.config.provider}`);return t}async generateOpenAIEmbedding(e){let t=await this.generateOpenAIBatchEmbeddings([e]);if(t.length===0||!t[0])throw new Error("Failed to generate embedding");return t[0]}async generateOpenAIBatchEmbeddings(e){let r=`${this.config.baseUrl||"https://api.openai.com/v1"}/embeddings`,i=new AbortController,s=setTimeout(()=>i.abort(),this.config.timeout??3e4);try{let a=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`},body:JSON.stringify({model:this.config.model||"text-embedding-3-small",input:e}),signal:i.signal});if(clearTimeout(s),!a.ok){let u=await a.text();throw new Error(`OpenAI API error: ${a.status} - ${u}`)}let c=await a.json();return this.requestCount++,this.tokenCount+=c.usage?.total_tokens||0,c.data.map(u=>({embedding:u.embedding,tokenCount:Math.round((c.usage?.total_tokens||0)/e.length),model:c.model}))}catch(a){throw clearTimeout(s),a instanceof Error&&a.name==="AbortError"?new Error("OpenAI API request timeout"):a}}truncateText(e){let t=this.config.maxTextLength??8e3;return e.length<=t?e:(WS.LoggingService.debug(`Truncating text from ${e.length} to ${t} characters`),e.slice(0,t))}prepareTextForEmbedding(e,t){let r=[];if(t){let s=t.exo__Asset_label;typeof s=="string"&&s&&r.push(`Title: ${s}`);let a=t.exo__Instance_class;if(a){let c=Array.isArray(a)?a[0]:a;typeof c=="string"&&r.push(`Type: ${this.cleanWikiLink(c)}`)}}let i=this.cleanMarkdownContent(e);return i&&r.push(i),r.join(`
|
|
102
|
+
---`)}};Nn.AssetConversionService=hg;Nn.AssetConversionService=hg=uR([(0,jS.injectable)(),fR(0,(0,jS.inject)(dR.DI_TOKENS.IVaultAdapter)),lR("design:paramtypes",[Object])],hg)});var mg=v(Ln=>{"use strict";var pR=Ln&&Ln.__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},mR=Ln&&Ln.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},gR=Ln&&Ln.__param||function(n,e){return function(t,r){e(t,r,n)}};Object.defineProperty(Ln,"__esModule",{value:!0});Ln.SessionEventService=void 0;var VS=Le(),yR=vr(),US=ir(),vR=Ht(),SR=nn(),_R=ct(),pg=class{static{o(this,"SessionEventService")}constructor(e){this.vault=e,this.folderPathCache=null}async createSessionStartEvent(e){return this.createSessionEvent(e,US.AssetClass.SESSION_START_EVENT)}async createSessionEndEvent(e){return this.createSessionEvent(e,US.AssetClass.SESSION_END_EVENT)}getSessionEventFolder(){if(this.folderPathCache!==null)return this.folderPathCache;let e=this.vault.getDefaultNewFileParent();return this.folderPathCache=e?.path||"",this.folderPathCache}async createSessionEvent(e,t){let r=(0,yR.v4)(),i=vR.DateFormatter.toLocalTimestamp(new Date),s={exo__Asset_uid:r,exo__Asset_createdAt:i,exo__Asset_isDefinedBy:'"[[!kitelev]]"',exo__Instance_class:[`"[[${t}]]"`],ems__SessionEvent_timestamp:i,ems__Session_area:`"[[${e}]]"`},a=SR.MetadataHelpers.buildFileContent(s),c=this.getSessionEventFolder();c&&!await this.vault.exists(c)&&await this.vault.createFolder(c);let u=c?`${c}/${r}.md`:`${r}.md`;return await this.vault.create(u,a)}};Ln.SessionEventService=pg;Ln.SessionEventService=pg=pR([(0,VS.injectable)(),gR(0,(0,VS.inject)(_R.DI_TOKENS.IVaultAdapter)),mR("design:paramtypes",[Object])],pg)});var yg=v(Mn=>{"use strict";var wR=Mn&&Mn.__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},bR=Mn&&Mn.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},ER=Mn&&Mn.__param||function(n,e){return function(t,r){e(t,r,n)}};Object.defineProperty(Mn,"__esModule",{value:!0});Mn.URIConstructionService=void 0;var BS=Le(),TR=ct(),gg=class{static{o(this,"URIConstructionService")}constructor(e){this.fileSystem=e,this.defaultOntologyURL="https://exocortex.my/default/",this.strictValidation=!0}configure(e){e?.defaultOntologyURL&&(this.defaultOntologyURL=e.defaultOntologyURL),e?.strictValidation!==void 0&&(this.strictValidation=e.strictValidation)}async constructAssetURI(e){let t=this.extractUID(e);if(!t){if(this.strictValidation)throw new Error(`Asset missing exo__Asset_uid: ${e.path}`);return console.warn(`Asset ${e.path} missing UID, using filename fallback`),this.constructFallbackURI(e)}let r=await this.resolveOntologyURL(e);if(!this.validateOntologyURL(r))throw new Error(`Invalid ontology URL: ${r}`);return`${r.endsWith("/")?r:`${r}/`}${t}`}validateOntologyURL(e){if(!e)return!1;try{let t=new URL(e);return t.protocol==="http:"||t.protocol==="https:"}catch{return!1}}async resolveOntologyURL(e){let t=e.frontmatter?.exo__Asset_isDefinedBy;if(!t)return this.defaultOntologyURL;let r=this.extractWikiLink(t),i=r,s=await this.fileSystem.fileExists(r);return!s&&!r.endsWith(".md")&&(i=`${r}.md`,s=await this.fileSystem.fileExists(i)),s?(await this.fileSystem.getFileMetadata(i))?.exo__Ontology_url||this.defaultOntologyURL:(console.warn(`Ontology file not found: ${r}, using default`),this.defaultOntologyURL)}extractUID(e){return e.frontmatter?.exo__Asset_uid||null}extractWikiLink(e){return e.replace(/^\[\[|\]\]$/g,"")}constructFallbackURI(e){let t=e.path.split("/").pop()?.replace(".md","")||"unknown";return`${this.defaultOntologyURL}${t}`}};Mn.URIConstructionService=gg;Mn.URIConstructionService=gg=wR([(0,BS.injectable)(),ER(0,(0,BS.inject)(TR.DI_TOKENS.IFileSystemAdapter)),bR("design:paramtypes",[Object])],gg)});var qS=v(Ks=>{"use strict";var AR=Ks&&Ks.__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};Object.defineProperty(Ks,"__esModule",{value:!0});Ks.WebhookService=void 0;var CR=Le(),ka=rs(),vg=class{static{o(this,"WebhookService")}constructor(){this.webhooks=new Map,this.rateLimitStates=new Map,this.defaultRateLimitConfig={maxRequests:100,windowMs:6e4},this.dispatchHistory=[],this.maxHistorySize=100}registerWebhook(e){if(!e.id)throw new Error("Webhook ID is required");if(!e.url)throw new Error("Webhook URL is required");try{new URL(e.url)}catch{throw new Error(`Invalid webhook URL: ${e.url}`)}this.webhooks.set(e.id,{...e,timeout:e.timeout??3e4,retryCount:e.retryCount??3}),ka.LoggingService.debug(`Registered webhook: ${e.name} (${e.id})`)}unregisterWebhook(e){let t=this.webhooks.delete(e);return this.rateLimitStates.delete(e),t&&ka.LoggingService.debug(`Unregistered webhook: ${e}`),t}getWebhooks(){return Array.from(this.webhooks.values())}getWebhook(e){return this.webhooks.get(e)}updateWebhook(e,t){let r=this.webhooks.get(e);if(!r)return!1;if(t.url)try{new URL(t.url)}catch{throw new Error(`Invalid webhook URL: ${t.url}`)}return this.webhooks.set(e,{...r,...t,id:e}),ka.LoggingService.debug(`Updated webhook: ${e}`),!0}getWebhooksForEvent(e){return Array.from(this.webhooks.values()).filter(t=>t.enabled&&(t.events.length===0||t.events.includes(e)))}isRateLimited(e){let t=this.rateLimitStates.get(e);if(!t)return!1;let r=Date.now(),{maxRequests:i,windowMs:s}=this.defaultRateLimitConfig;return r-t.windowStart>=s?(this.rateLimitStates.set(e,{requests:0,windowStart:r}),!1):t.requests>=i}recordRequest(e){let t=Date.now(),r=this.rateLimitStates.get(e),{windowMs:i}=this.defaultRateLimitConfig;!r||t-r.windowStart>=i?this.rateLimitStates.set(e,{requests:1,windowStart:t}):r.requests++}setRateLimitConfig(e){this.defaultRateLimitConfig=e}async dispatchEvent(e){let t=this.getWebhooksForEvent(e.event),r=[];for(let i of t){let s=await this.dispatchToWebhook(i,e);r.push(s),this.addToHistory(s)}return r}async dispatchToWebhook(e,t){let r=e.retryCount??3,i,s=0;for(;s<=r;){if(this.isRateLimited(e.id))return{webhookId:e.id,success:!1,error:"Rate limit exceeded",timestamp:new Date().toISOString(),retryCount:s};try{this.recordRequest(e.id);let a={"Content-Type":"application/json","User-Agent":"Exocortex-Webhook/1.0","X-Webhook-Event":t.event,"X-Webhook-Timestamp":t.timestamp,...e.headers},c=JSON.stringify(t);if(e.secret){let f=await this.createHmacSignature(c,e.secret);a["X-Webhook-Signature"]=f}let u=new AbortController,l=setTimeout(()=>u.abort(),e.timeout??3e4);try{let f=await fetch(e.url,{method:"POST",headers:a,body:c,signal:u.signal});if(clearTimeout(l),f.ok)return ka.LoggingService.debug(`Webhook ${e.name} dispatched successfully: ${f.status}`),{webhookId:e.id,success:!0,statusCode:f.status,timestamp:new Date().toISOString(),retryCount:s};i=`HTTP ${f.status}: ${f.statusText}`,ka.LoggingService.warn(`Webhook ${e.name} failed: ${i}`)}finally{clearTimeout(l)}}catch(a){i=a instanceof Error?a.message:"Unknown error",a instanceof Error&&a.name==="AbortError"&&(i="Request timeout"),ka.LoggingService.warn(`Webhook ${e.name} error (attempt ${s+1}/${r+1}): ${i}`)}s++,s<=r&&await this.delay(Math.pow(2,s)*100)}return{webhookId:e.id,success:!1,error:i,timestamp:new Date().toISOString(),retryCount:s-1}}async createHmacSignature(e,t){let r=new TextEncoder,i=r.encode(t),s=r.encode(e),a=await crypto.subtle.importKey("raw",i,{name:"HMAC",hash:"SHA-256"},!1,["sign"]),c=await crypto.subtle.sign("HMAC",a,s);return"sha256="+Array.from(new Uint8Array(c)).map(l=>l.toString(16).padStart(2,"0")).join("")}delay(e){return new Promise(t=>setTimeout(t,e))}addToHistory(e){this.dispatchHistory.push(e),this.dispatchHistory.length>this.maxHistorySize&&this.dispatchHistory.shift()}getDispatchHistory(e=50){return this.dispatchHistory.slice(-e)}clearDispatchHistory(){this.dispatchHistory=[]}async testWebhook(e){let t=this.webhooks.get(e);if(!t)return{webhookId:e,success:!1,error:"Webhook not found",timestamp:new Date().toISOString(),retryCount:0};let r={event:"note.updated",timestamp:new Date().toISOString(),filePath:"/test/webhook-test.md",label:"Webhook Test",data:{test:!0,message:"This is a test webhook event from Exocortex"}},i=t.enabled;t.enabled=!0;let s=await this.dispatchToWebhook(t,r);return t.enabled=i,s}cleanup(){this.webhooks.clear(),this.rateLimitStates.clear(),this.dispatchHistory=[]}};Ks.WebhookService=vg;Ks.WebhookService=vg=AR([(0,CR.injectable)()],vg)});var _g=v(kn=>{"use strict";var xR=kn&&kn.__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},IR=kn&&kn.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)},OR=kn&&kn.__param||function(n,e){return function(t,r){e(t,r,n)}};Object.defineProperty(kn,"__esModule",{value:!0});kn.GenericAssetCreationService=void 0;var GS=Le(),PR=vr(),Ic=Ht(),DR=nn(),RR=ct(),ni=Bp(),Sg=class{static{o(this,"GenericAssetCreationService")}constructor(e){this.vault=e}async createAsset(e,t){let r=(0,PR.v4)(),i=`${r}.md`,s=this.generateFrontmatter(e,t||[],r),a=DR.MetadataHelpers.buildFileContent(s),c=e.folderPath||this.getDefaultFolderPath(e);this.vault.getAbstractFileByPath(c)||await this.vault.createFolder(c);let l=c?`${c}/${i}`:i;return await this.vault.create(l,a)}generateFrontmatter(e,t,r){let i=new Date,s={},a=new Map;for(let c of t)a.set(c.name,c.fieldType);if(s.exo__Asset_uid=r,s.exo__Asset_createdAt=Ic.DateFormatter.toLocalTimestamp(i),s.exo__Instance_class=[this.formatWikilink(e.className)],e.label&&e.label.trim()!==""){let c=e.label.trim();s.exo__Asset_label=c,s.aliases=[c]}if(e.parentFile&&e.parentMetadata&&this.inheritParentContext(s,e),e.propertyValues)for(let[c,u]of Object.entries(e.propertyValues)){if(c==="exo__Asset_uid"||c==="exo__Asset_createdAt"||c==="exo__Instance_class"||c==="exo__Asset_label"||c==="aliases"||u==null)continue;let l=a.get(c);s[c]=this.formatValue(u,l)}return s}inheritParentContext(e,t){let r=t.parentMetadata||{},i=t.parentFile?.basename;if((t.className==="ems__Task"||t.className.startsWith("ems__Task"))&&(e.ems__Effort_parent=i?this.formatWikilink(i):null),t.className==="ems__Project"||t.className.startsWith("ems__Project")){let s=r.exo__Instance_class;this.isAreaClass(s)&&(e.ems__Project_area=i?this.formatWikilink(i):null)}r.exo__Asset_isDefinedBy&&(e.exo__Asset_isDefinedBy=r.exo__Asset_isDefinedBy)}isAreaClass(e){return e?(Array.isArray(e)?e:[e]).some(r=>String(r).includes("Area")||String(r).includes("ems__Area")):!1}getDefaultFolderPath(e){if(e.parentFile?.parent?.path)return e.parentFile.parent.path;let t={ems__Task:"tasks",ems__Project:"projects",ems__Area:"areas",ems__Meeting:"meetings",exo__Event:"events",ims__Concept:"concepts"};if(t[e.className])return t[e.className];for(let[r,i]of Object.entries(t))if(e.className.startsWith(r))return i;return"assets"}formatValue(e,t){if(e==null)return null;if(!t)return this.formatInferredValue(e);switch(t){case ni.PropertyFieldType.Text:return String(e);case ni.PropertyFieldType.Wikilink:case ni.PropertyFieldType.Reference:case ni.PropertyFieldType.StatusSelect:case ni.PropertyFieldType.SizeSelect:return this.formatWikilink(String(e));case ni.PropertyFieldType.Number:return typeof e=="number"?e:Number(e)||0;case ni.PropertyFieldType.Boolean:return this.formatBoolean(e);case ni.PropertyFieldType.Date:case ni.PropertyFieldType.DateTime:case ni.PropertyFieldType.Timestamp:return this.formatTimestamp(e);default:return String(e)}}formatInferredValue(e){return typeof e=="boolean"||typeof e=="number"?e:e instanceof Date?Ic.DateFormatter.toLocalTimestamp(e):typeof e=="string"?e.startsWith("[[")||e.startsWith('"[[')?this.formatWikilink(e):e:String(e)}formatWikilink(e){return e.startsWith('"[[')&&e.endsWith(']]"')?e:e.startsWith("[[")&&e.endsWith("]]")?`"${e}"`:`"[[${e}]]"`}formatBoolean(e){if(typeof e=="boolean")return e;if(typeof e=="string"){let t=e.toLowerCase().trim();return t==="true"||t==="yes"||t==="1"}return typeof e=="number"?e!==0:!!e}formatTimestamp(e){if(e instanceof Date)return Ic.DateFormatter.toLocalTimestamp(e);if(typeof e=="string"){if(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$/.test(e))return e;if(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/.test(e))return e.replace("Z","");let t=new Date(e);return isNaN(t.getTime())?e:Ic.DateFormatter.toLocalTimestamp(t)}if(typeof e=="number"){let t=new Date(e);if(!isNaN(t.getTime()))return Ic.DateFormatter.toLocalTimestamp(t)}return String(e)}};kn.GenericAssetCreationService=Sg;kn.GenericAssetCreationService=Sg=xR([(0,GS.injectable)(),OR(0,(0,GS.inject)(RR.DI_TOKENS.IVaultAdapter)),IR("design:paramtypes",[Object])],Sg)});var bg=v(sn=>{"use strict";var FR=sn&&sn.__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},NR=sn&&sn.__metadata||function(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)};Object.defineProperty(sn,"__esModule",{value:!0});sn.EmbeddingService=sn.DEFAULT_EMBEDDING_CONFIG=void 0;var LR=Le(),WS=rs();sn.DEFAULT_EMBEDDING_CONFIG={provider:"openai",model:"text-embedding-3-small",timeout:3e4,maxTextLength:8e3};var wg=class{static{o(this,"EmbeddingService")}constructor(e={}){this.requestCount=0,this.tokenCount=0,this.config={...sn.DEFAULT_EMBEDDING_CONFIG,...e}}setConfig(e){this.config={...this.config,...e},WS.LoggingService.debug(`EmbeddingService config updated: provider=${this.config.provider}, model=${this.config.model}`)}getConfig(){let{apiKey:e,...t}=this.config;return t}isConfigured(){return this.config.provider==="openai"?!!this.config.apiKey:!0}async generateEmbedding(e){if(!this.isConfigured())throw new Error("EmbeddingService is not properly configured");let t=this.truncateText(e);if(this.config.provider==="openai")return this.generateOpenAIEmbedding(t);throw new Error(`Unsupported embedding provider: ${this.config.provider}`)}async generateBatchEmbeddings(e){if(!this.isConfigured())throw new Error("EmbeddingService is not properly configured");if(e.length===0)return[];let t=[];if(this.config.provider==="openai"){let r=e.map(i=>this.truncateText(i.text));try{let i=await this.generateOpenAIBatchEmbeddings(r);for(let s=0;s<e.length;s++)t.push({id:e[s].id,result:i[s]??null})}catch(i){let s=i instanceof Error?i.message:"Unknown error";for(let a of e)t.push({id:a.id,result:null,error:s})}}else throw new Error(`Unsupported embedding provider: ${this.config.provider}`);return t}async generateOpenAIEmbedding(e){let t=await this.generateOpenAIBatchEmbeddings([e]);if(t.length===0||!t[0])throw new Error("Failed to generate embedding");return t[0]}async generateOpenAIBatchEmbeddings(e){let r=`${this.config.baseUrl||"https://api.openai.com/v1"}/embeddings`,i=new AbortController,s=setTimeout(()=>i.abort(),this.config.timeout??3e4);try{let a=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`},body:JSON.stringify({model:this.config.model||"text-embedding-3-small",input:e}),signal:i.signal});if(clearTimeout(s),!a.ok){let u=await a.text();throw new Error(`OpenAI API error: ${a.status} - ${u}`)}let c=await a.json();return this.requestCount++,this.tokenCount+=c.usage?.total_tokens||0,c.data.map(u=>({embedding:u.embedding,tokenCount:Math.round((c.usage?.total_tokens||0)/e.length),model:c.model}))}catch(a){throw clearTimeout(s),a instanceof Error&&a.name==="AbortError"?new Error("OpenAI API request timeout"):a}}truncateText(e){let t=this.config.maxTextLength??8e3;return e.length<=t?e:(WS.LoggingService.debug(`Truncating text from ${e.length} to ${t} characters`),e.slice(0,t))}prepareTextForEmbedding(e,t){let r=[];if(t){let s=t.exo__Asset_label;typeof s=="string"&&s&&r.push(`Title: ${s}`);let a=t.exo__Instance_class;if(a){let c=Array.isArray(a)?a[0]:a;typeof c=="string"&&r.push(`Type: ${this.cleanWikiLink(c)}`)}}let i=this.cleanMarkdownContent(e);return i&&r.push(i),r.join(`
|
|
103
103
|
|
|
104
104
|
`)}cleanMarkdownContent(e){let t=e.replace(/^---[\s\S]*?---\n*/m,"").replace(/```[\s\S]*?```/g,r=>r.replace(/```\w*\n?|\n?```/g,"")).replace(/`([^`]+)`/g,"$1").replace(/\[\[([^\]|]+)(?:\|([^\]]+))?\]\]/g,(r,i,s)=>s||i).replace(/\[([^\]]+)\]\([^)]+\)/g,"$1").replace(/!\[[^\]]*\]\([^)]+\)/g,"").replace(/^---+$/gm,"");return t=this.removeHtmlTags(t),t.replace(/\n{3,}/g,`
|
|
105
105
|
|
|
@@ -447,7 +447,7 @@ globstar while`,e,d,t,p,S),this.matchOne(e.slice(d),t.slice(p),r))return this.de
|
|
|
447
447
|
${t}
|
|
448
448
|
Continue? (y/n): `,s=>{r.close(),i(s.toLowerCase()==="y"||s.toLowerCase()==="yes")})})}};var pd=class{static{o(this,"CLIContainer")}static setup(){Qo.container.register(xu.DI_TOKENS.ILogger,{useFactory:o(()=>new ud("exocortex-cli"),"useFactory")}),Qo.container.register(xu.DI_TOKENS.IEventBus,{useClass:ld}),Qo.container.register(xu.DI_TOKENS.IConfiguration,{useClass:fd}),Qo.container.register(xu.DI_TOKENS.INotificationService,{useClass:dd})}static reset(){Qo.container.clearInstances()}};function Iu(n){pd.setup(),wa.container.register(Ts.DI_TOKENS.IVaultAdapter,{useFactory:o(()=>new pi(n),"useFactory")})}o(Iu,"setupContainer");function oj(n){if(n.length===0)return"No practices found.";let e=[];for(let t of n){let r="\u2B1C";t.doneToday?r="\u2705":t.inProgressToday&&(r="\u{1F504}");let i=t.estimatedDuration?` (${t.estimatedDuration}m)`:"";e.push(`${r} ${t.label}${i}`)}return e.join(`
|
|
449
449
|
`)}o(oj,"formatPractices");function cj(n){let e=[`\u{1F4C5} Daily Review: ${n.date}`,"","\u{1F4CA} Tasks:",` Planned: ${n.plannedCount}`,` Completed: ${n.completedCount}`,` In Progress: ${n.inProgressCount}`,` Progress: ${n.completionPercentage}%`,"",`\u23F1\uFE0F Total time: ${Math.round(n.totalTimeMinutes)} minutes`];if(n.practicesDue.length>0){e.push(""),e.push(`\u{1F4CB} Practices due (${n.practicesDue.length}):`);for(let t of n.practicesDue){let r=t.estimatedDuration?` (${t.estimatedDuration}m)`:"";e.push(` \u2B1C ${t.label}${r}`)}}return e.join(`
|
|
450
|
-
`)}o(cj,"formatSummary");function vA(){let n=new Et("daily").description("Daily review operations for mobile-friendly workflow");return n.command("practices").description("List today's practices (recurring tasks)").option("--vault <path>","Path to Obsidian vault",process.cwd()).option("--format <type>","Output format: text|json","text").action(async e=>{let t=e.format||"text";H.setFormat(t);try{let r=(0,Yo.resolve)(e.vault);if(!(0,Ko.existsSync)(r))throw new Ft(r);Iu(r);let s=await wa.container.resolve(Ts.DailyReviewService).getPractices();if(t==="json"){let a=je.success({practices:s,count:s.length});console.log(JSON.stringify(a,null,2))}else console.log(oj(s))}catch(r){H.handle(r)}}),n.command("summary").description("Show today's daily review summary").option("--vault <path>","Path to Obsidian vault",process.cwd()).option("--format <type>","Output format: text|json","text").option("--date <value>","Date in YYYY-MM-DD format (default: today)").action(async e=>{let t=e.format||"text";H.setFormat(t);try{let r=(0,Yo.resolve)(e.vault);if(!(0,Ko.existsSync)(r))throw new Ft(r);Iu(r);let i=wa.container.resolve(Ts.DailyReviewService),s;if(e.date&&(s=new Date(e.date),isNaN(s.getTime())))throw new nt(`Invalid date format: ${e.date}`,"exocortex daily summary --date YYYY-MM-DD",{date:e.date});let a=await i.getDailyReviewSummary(s);if(t==="json"){let c=je.success(a);console.log(JSON.stringify(c,null,2))}else console.log(cj(a))}catch(r){H.handle(r)}}),n.command("log").description("Quick capture an activity").argument("<label>","Activity label/description").option("--vault <path>","Path to Obsidian vault",process.cwd()).option("--format <type>","Output format: text|json","text").option("--start","Start the task immediately (default: true)").option("--no-start","Don't start the task immediately").action(async(e,t)=>{let r=t.format||"text";H.setFormat(r);try{let i=(0,Yo.resolve)(t.vault);if(!(0,Ko.existsSync)(i))throw new Ft(i);Iu(i);let s=wa.container.resolve(Ts.DailyReviewService),a=t.start!==!1,c=await s.quickCapture(e,a);if(r==="json"){let u=je.success(c);console.log(JSON.stringify(u,null,2))}else{let u=c.started?"\u{1F504}":"\u2B1C";console.log(`${u} Created: ${c.label}`),console.log(` Path: ${c.path}`)}}catch(i){H.handle(i)}}),n.command("start").description("Start a practice (create task instance from prototype)").argument("<prototype-uid>","Practice/prototype UID to start").option("--vault <path>","Path to Obsidian vault",process.cwd()).option("--format <type>","Output format: text|json","text").action(async(e,t)=>{let r=t.format||"text";H.setFormat(r);try{let i=(0,Yo.resolve)(t.vault);if(!(0,Ko.existsSync)(i))throw new Ft(i);Iu(i);let a=await wa.container.resolve(Ts.DailyReviewService).createFromPractice({prototypeUid:e,startImmediately:!0});if(r==="json"){let c=je.success(a);console.log(JSON.stringify(c,null,2))}else console.log(`\u{1F504} Started: ${a.label}`),console.log(` Path: ${a.path}`)}catch(i){H.handle(i)}}),n.command("done").description("Mark a practice as done").argument("<prototype-uid>","Practice/prototype UID to mark as done").option("--vault <path>","Path to Obsidian vault",process.cwd()).option("--format <type>","Output format: text|json","text").action(async(e,t)=>{let r=t.format||"text";H.setFormat(r);try{let i=(0,Yo.resolve)(t.vault);if(!(0,Ko.existsSync)(i))throw new Ft(i);if(Iu(i),await wa.container.resolve(Ts.DailyReviewService).markPracticeDone(e),r==="json"){let a=je.success({prototypeUid:e,status:"done"});console.log(JSON.stringify(a,null,2))}else console.log(`\u2705 Marked as done: ${e}`)}catch(i){H.handle(i)}}),n}o(vA,"dailyReviewCommand");var Si=new Et;Si.name("exocortex").description("CLI tool for Exocortex knowledge management system").version("15.9.
|
|
450
|
+
`)}o(cj,"formatSummary");function vA(){let n=new Et("daily").description("Daily review operations for mobile-friendly workflow");return n.command("practices").description("List today's practices (recurring tasks)").option("--vault <path>","Path to Obsidian vault",process.cwd()).option("--format <type>","Output format: text|json","text").action(async e=>{let t=e.format||"text";H.setFormat(t);try{let r=(0,Yo.resolve)(e.vault);if(!(0,Ko.existsSync)(r))throw new Ft(r);Iu(r);let s=await wa.container.resolve(Ts.DailyReviewService).getPractices();if(t==="json"){let a=je.success({practices:s,count:s.length});console.log(JSON.stringify(a,null,2))}else console.log(oj(s))}catch(r){H.handle(r)}}),n.command("summary").description("Show today's daily review summary").option("--vault <path>","Path to Obsidian vault",process.cwd()).option("--format <type>","Output format: text|json","text").option("--date <value>","Date in YYYY-MM-DD format (default: today)").action(async e=>{let t=e.format||"text";H.setFormat(t);try{let r=(0,Yo.resolve)(e.vault);if(!(0,Ko.existsSync)(r))throw new Ft(r);Iu(r);let i=wa.container.resolve(Ts.DailyReviewService),s;if(e.date&&(s=new Date(e.date),isNaN(s.getTime())))throw new nt(`Invalid date format: ${e.date}`,"exocortex daily summary --date YYYY-MM-DD",{date:e.date});let a=await i.getDailyReviewSummary(s);if(t==="json"){let c=je.success(a);console.log(JSON.stringify(c,null,2))}else console.log(cj(a))}catch(r){H.handle(r)}}),n.command("log").description("Quick capture an activity").argument("<label>","Activity label/description").option("--vault <path>","Path to Obsidian vault",process.cwd()).option("--format <type>","Output format: text|json","text").option("--start","Start the task immediately (default: true)").option("--no-start","Don't start the task immediately").action(async(e,t)=>{let r=t.format||"text";H.setFormat(r);try{let i=(0,Yo.resolve)(t.vault);if(!(0,Ko.existsSync)(i))throw new Ft(i);Iu(i);let s=wa.container.resolve(Ts.DailyReviewService),a=t.start!==!1,c=await s.quickCapture(e,a);if(r==="json"){let u=je.success(c);console.log(JSON.stringify(u,null,2))}else{let u=c.started?"\u{1F504}":"\u2B1C";console.log(`${u} Created: ${c.label}`),console.log(` Path: ${c.path}`)}}catch(i){H.handle(i)}}),n.command("start").description("Start a practice (create task instance from prototype)").argument("<prototype-uid>","Practice/prototype UID to start").option("--vault <path>","Path to Obsidian vault",process.cwd()).option("--format <type>","Output format: text|json","text").action(async(e,t)=>{let r=t.format||"text";H.setFormat(r);try{let i=(0,Yo.resolve)(t.vault);if(!(0,Ko.existsSync)(i))throw new Ft(i);Iu(i);let a=await wa.container.resolve(Ts.DailyReviewService).createFromPractice({prototypeUid:e,startImmediately:!0});if(r==="json"){let c=je.success(a);console.log(JSON.stringify(c,null,2))}else console.log(`\u{1F504} Started: ${a.label}`),console.log(` Path: ${a.path}`)}catch(i){H.handle(i)}}),n.command("done").description("Mark a practice as done").argument("<prototype-uid>","Practice/prototype UID to mark as done").option("--vault <path>","Path to Obsidian vault",process.cwd()).option("--format <type>","Output format: text|json","text").action(async(e,t)=>{let r=t.format||"text";H.setFormat(r);try{let i=(0,Yo.resolve)(t.vault);if(!(0,Ko.existsSync)(i))throw new Ft(i);if(Iu(i),await wa.container.resolve(Ts.DailyReviewService).markPracticeDone(e),r==="json"){let a=je.success({prototypeUid:e,status:"done"});console.log(JSON.stringify(a,null,2))}else console.log(`\u2705 Marked as done: ${e}`)}catch(i){H.handle(i)}}),n}o(vA,"dailyReviewCommand");var Si=new Et;Si.name("exocortex").description("CLI tool for Exocortex knowledge management system").version("15.9.2");var SA=Si.command("sparql").description("SPARQL query execution and cache management");SA.addCommand(z3());SA.addCommand(Y3());Si.addCommand(rA());Si.addCommand(sA());Si.addCommand(aA());Si.addCommand(cA());Si.addCommand(uA());Si.addCommand(pA());Si.addCommand(vA());Si.parse();
|
|
451
451
|
/*! Bundled license information:
|
|
452
452
|
|
|
453
453
|
reflect-metadata/Reflect.js:
|