vault backup: 2025-10-21 15:57:10

This commit is contained in:
CrazyJasonwell committed 2025-10-21 15:57:10 +08:00
1 parent a540f5b81a
commit 6f343b7538
38 files changed
+44893 -4450

No files matched your search

+4 -4
View File
@@ -153,10 +153,10 @@ Assistant:`;J.DEFAULT_TIMEOUT=6e5;J.AnthropicError=B;J.APIError=le;J.APIConnecti
`).filter(i=>i!==""))try{yield JSON.parse(o)}catch(i){console.warn("invalid json: ",o)}},JS=t=>{if(!t)return em;let e=t.includes("://");t.startsWith(":")&&(t=`http://127.0.0.1${t}`,e=!0),e||(t=`http://${t}`);let r=new URL(t),n=r.port;n||(e?n=r.protocol==="https:"?"443":"80":n=Zp);let s="";r.username&&(s=r.username,r.password&&(s+=`:${r.password}`),s+="@");let o=`${r.protocol}//${s}${r.hostname}:${n}${r.pathname}`;return o.endsWith("/")&&(o=o.slice(0,-1)),o},zS=Object.defineProperty,XS=(t,e,r)=>e in t?zS(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,xu=(t,e,r)=>(XS(t,typeof e!="symbol"?e+"":e,r),r),Pu=class{constructor(e){var r,n;xu(this,"config"),xu(this,"fetch"),xu(this,"ongoingStreamedRequests",[]),this.config={host:"",headers:e==null?void 0:e.headers},e!=null&&e.proxy||(this.config.host=JS((r=e==null?void 0:e.host)!=null?r:em)),this.fetch=(n=e==null?void 0:e.fetch)!=null?n:fetch}abort(){for(let e of this.ongoingStreamedRequests)e.abort();this.ongoingStreamedRequests.length=0}async processStreamableRequest(e,r){var o;r.stream=(o=r.stream)!=null?o:!1;let n=`${this.config.host}/api/${e}`;if(r.stream){let i=new AbortController,a=await ps(this.fetch,n,r,{signal:i.signal,headers:this.config.headers});if(!a.body)throw new Error("Missing body");let c=GS(a.body),l=new Au(i,c,()=>{let f=this.ongoingStreamedRequests.indexOf(l);f>-1&&this.ongoingStreamedRequests.splice(f,1)});return this.ongoingStreamedRequests.push(l),l}return await(await ps(this.fetch,n,r,{headers:this.config.headers})).json()}async encodeImage(e){if(typeof e!="string"){let r=new Uint8Array(e),n="",s=r.byteLength;for(let o=0;o<s;o++)n+=String.fromCharCode(r[o]);return btoa(n)}return e}async generate(e){return e.images&&(e.images=await Promise.all(e.images.map(this.encodeImage.bind(this)))),this.processStreamableRequest("generate",e)}async chat(e){if(e.messages)for(let r of e.messages)r.images&&(r.images=await Promise.all(r.images.map(this.encodeImage.bind(this))));return this.processStreamableRequest("chat",e)}async create(e){return this.processStreamableRequest("create",{...e})}async pull(e){return this.processStreamableRequest("pull",{name:e.model,stream:e.stream,insecure:e.insecure})}async push(e){return this.processStreamableRequest("push",{name:e.model,stream:e.stream,insecure:e.insecure})}async delete(e){return await KS(this.fetch,`${this.config.host}/api/delete`,{name:e.model},{headers:this.config.headers}),{status:"success"}}async copy(e){return await ps(this.fetch,`${this.config.host}/api/copy`,{...e},{headers:this.config.headers}),{status:"success"}}async list(){return await(await Qp(this.fetch,`${this.config.host}/api/tags`,{headers:this.config.headers})).json()}async show(e){return await(await ps(this.fetch,`${this.config.host}/api/show`,{...e},{headers:this.config.headers})).json()}async embed(e){return await(await ps(this.fetch,`${this.config.host}/api/embed`,{...e},{headers:this.config.headers})).json()}async embeddings(e){return await(await ps(this.fetch,`${this.config.host}/api/embeddings`,{...e},{headers:this.config.headers})).json()}async ps(){return await(await Qp(this.fetch,`${this.config.host}/api/ps`,{headers:this.config.headers})).json()}},CN=new Pu;var YS=t=>async function*(e,r,n){let{parameters:s,...o}=t,i={...o,...s},{baseURL:a,model:c,...l}=i,f=new Pu({host:a}),u=await f.chat({model:c,messages:e,stream:!0,...l});for await(let d of u){if(r.signal.aborted){f.abort();break}yield d.message.content}},La={name:"Ollama",defaultOptions:{apiKey:"",baseURL:"http://127.0.0.1:11434",model:"llama3.1",parameters:{}},sendRequestFunc:YS,models:[],websiteToObtainKey:"https://ollama.com",capabilities:["Text Generation"]};var QS=t=>async function*(e,r,n){var p,y;let{parameters:s,...o}=t,i={...o,...s},{apiKey:a,baseURL:c,model:l,...f}=i;if(!a)throw new Error(m("API key is required"));let u=await Promise.all(e.map(g=>ZS(g,n))),h=await new D({apiKey:a,baseURL:c,dangerouslyAllowBrowser:!0}).chat.completions.create({model:l,messages:u,stream:!0,...f},{signal:r.signal});for await(let g of h){let S=(y=(p=g.choices[0])==null?void 0:p.delta)==null?void 0:y.content;S&&(yield S)}},ZS=async(t,e)=>{let r=t.embeds?await Promise.all(t.embeds.map(n=>lt(n,e))):[];return t.content.trim()&&r.push({type:"text",text:t.content}),{role:t.role,content:r}},tm={name:"OpenAI",defaultOptions:{apiKey:"",baseURL:"https://api.openai.com/v1",model:"gpt-4.1",parameters:{}},sendRequestFunc:QS,models:[],websiteToObtainKey:"https://platform.openai.com/api-keys",capabilities:["Text Generation","Image Vision"]};var ex=t=>async function*(e,r,n){var S;let{parameters:s,...o}=t,i={...o,...s},{apiKey:a,baseURL:c,model:l,...f}=i;if(!a)throw new Error(m("API key is required"));if(!l)throw new Error(m("Model is required"));let u=await Promise.all(e.map(_=>rx(_,n))),d={model:l,messages:u,stream:!0,...f},p=(S=(await fetch(c,{method:"POST",headers:{Authorization:`Bearer ${a}`,"Content-Type":"application/json"},body:JSON.stringify(d),signal:r.signal})).body)==null?void Line truncated
`);if(C===-1)break;let x=g.slice(0,C).trim();if(g=g.slice(C+1),x.startsWith("data: ")){let P=x.slice(6);if(P==="[DONE]")break;try{let O=JSON.parse(P).choices[0].delta.content;O&&(yield O)}catch(k){}}}}}finally{p.cancel()}},tx=async(t,e)=>{let r=Or(t.link);if(["image/png","image/jpeg","image/gif","image/webp"].includes(r)){let n=await e(t),s=Mr(n);return{type:"image_url",image_url:{url:`data:${r};base64,${s}`}}}else if(r==="application/pdf"){let n=await e(t),s=Mr(n);return{type:"file",file:{filename:t.link,file_data:`data:${r};base64,${s}`}}}else throw new Error(m("Only PNG, JPEG, GIF, WebP, and PDF files are supported."))},rx=async(t,e)=>{let r=t.embeds?await Promise.all(t.embeds.map(n=>tx(n,e))):[];return t.content.trim()&&r.push({type:"text",text:t.content}),{role:t.role,content:r}},Na={name:"OpenRouter",defaultOptions:{apiKey:"",baseURL:"https://openrouter.ai/api/v1/chat/completions",model:"",parameters:{}},sendRequestFunc:ex,models:[],websiteToObtainKey:"https://openrouter.ai",capabilities:["Text Generation","Image Vision","PDF Vision"]};var Wr=require("obsidian");var nx=async(t,e)=>{if(!t||!e)throw new Error("Invalid API key secret");let r={grant_type:"client_credentials",client_id:t,client_secret:e},n=new URLSearchParams(r).toString(),o=(await(0,Wr.requestUrl)(`https://aip.baidubce.com/oauth/2.0/token?${n}`)).json;return{accessToken:o.access_token,exp:Date.now()+o.expires_in,apiKey:t,apiSecret:e}},sx=async(t,e,r)=>{let n=Date.now();if(t&&t.apiKey===e&&t.apiSecret===r&&t.exp>n+180*1e3)return{isValid:!0,token:t};let s=await nx(e,r);return console.debug("create new token",s),{isValid:!1,token:s}},ox=(t,e)=>{let r=e.endsWith(`
`)||e.endsWith("\r"),n=e.split(/\r\n|[\n\r]/g);return n.length===1&&!r?(t.push(n[0]),[]):(t.length>0&&(n=[t.join("")+n[0],...n.slice(1)],t=[]),r||(t=[n.pop()||""]),n)},ix=t=>async function*(e,r,n){let{parameters:s,...o}=t,i={...o,...s},{apiKey:a,apiSecret:c,baseURL:l,model:f,token:u,...d}=i;if(!a)throw new Error(m("API key is required"));if(!c)throw new Error(m("API secret is required"));if(!f)throw new Error(m("Model is required"));let{token:h}=await sx(u,a,c);if(t.token=h,Wr.Platform.isDesktopApp){let p={messages:e,stream:!0,...d},y=await ar.post(l+`/${f}?access_token=${h.accessToken}`,p,{headers:{"Content-Type":"application/json"},adapter:"fetch",responseType:"stream",withCredentials:!1,signal:r.signal}),g=[],S=new TextDecoder("utf-8");for await(let _ of y.data){let v=S.decode(Buffer.from(_)),C=ox(g,v);for(let x of C)if(x.startsWith("data: ")){let P=x.slice(6),O=JSON.parse(P).result;O&&(yield O)}}}else{let p={messages:e,stream:!1,...d};new Wr.Notice(m("This is a non-streaming request, please wait..."),5*1e3);let y=await(0,Wr.requestUrl)({url:l+`/${f}?access_token=${h.accessToken}`,method:"POST",body:JSON.stringify(p),headers:{"Content-Type":"application/json"}});console.debug("response",y.json),yield y.json.result}},rm=["ernie-4.0-8k-latest","ernie-4.0-turbo-8k","ernie-3.5-128k","ernie_speed","ernie-speed-128k","gemma_7b_it","yi_34b_chat","mixtral_8x7b_instruct","llama_2_70b"],nm={name:"QianFan",defaultOptions:{apiKey:"",apiSecret:"",baseURL:"https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat",model:rm[0],parameters:{}},sendRequestFunc:ix,models:rm,websiteToObtainKey:"https://qianfan.cloud.baidu.com",capabilities:["Text Generation"]};var ax=t=>async function*(e,r,n){var p,y;let{parameters:s,...o}=t,i={...o,...s},{apiKey:a,baseURL:c,model:l,...f}=i;if(!a)throw new Error(m("API key is required"));let u=await Promise.all(e.map(g=>lx(g,n))),h=await new D({apiKey:a,baseURL:c,dangerouslyAllowBrowser:!0}).chat.completions.create({model:l,messages:u,stream:!0,...f},{signal:r.signal});for await(let g of h){let S=(y=(p=g.choices[0])==null?void 0:p.delta)==null?void 0:y.content;S&&(yield S)}},lx=async(t,e)=>{let r=t.embeds?await Promise.all(t.embeds.map(n=>lt(n,e))):[];return t.content.trim()&&r.push({type:"text",text:t.content}),{role:t.role,content:r}},sm=["qwen-turbo","qwen-plus","qwen-max","qwen-vl-max"],om={name:"Qwen",defaultOptions:{apiKey:"",baseURL:"https://dashscope.aliyuncs.com/compatible-mode/v1",model:sm[0],parameters:{}},sendRequestFunc:ax,models:sm,websiteToObtainKey:"https://dashscope.console.aliyun.com",capabilities:["Text Generation","Image Vision"]};var cx=t=>async function*(e,r,n){var y;let{parameters:s,...o}=t,i={...o,...s},{apiKey:a,baseURL:c,model:l,...f}=i;if(!a)throw new Error(m("API key is required"));let u=await Promise.all(e.map(g=>ux(g,n))),h=await new D({apiKey:a,baseURL:c,dangerouslyAllowBrowser:!0}).chat.completions.create({model:l,messages:u,stream:!0,...f},{signal:r.signal}),p=!1;for await(let g of h){let S=(y=g.choices[0])==null?void 0:y.delta,_=S==null?void 0:S.reasoning_content;if(_)yield(p?"":(p=!0,Me))+_.replace(/\n/g,`
> `);else{let v=p?(p=!1,Le):"";S!=null&&S.content&&(yield v+(S==null?void 0:S.content))}}},ux=async(t,e)=>{let r=t.embeds?await Promise.all(t.embeds.map(n=>lt(n,e))):[];return t.content.trim()&&r.push({type:"text",text:t.content}),{role:t.role,content:r}},Da={name:"SiliconFlow",defaultOptions:{apiKey:"",baseURL:"https://api.siliconflow.cn/v1",model:"",parameters:{}},sendRequestFunc:cx,models:[],websiteToObtainKey:"https://siliconflow.cn",capabilities:["Text Generation","Image Vision","Reasoning"]};var ms=crypto,Ba=t=>t instanceof CryptoKey;var kt=new TextEncoder,No=new TextDecoder,zN=2**32;function im(...t){let e=t.reduce((s,{length:o})=>s+o,0),r=new Uint8Array(e),n=0;for(let s of t)r.set(s,n),n+=s.length;return r}var fx=t=>{let e=t;typeof e=="string"&&(e=kt.encode(e));let r=32768,n=[];for(let s=0;s<e.length;s+=r)n.push(String.fromCharCode.apply(null,e.subarray(s,s+r)));return btoa(n.join(""))},Fa=t=>fx(t).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_"),dx=t=>{let e=atob(t),r=new Uint8Array(e.length);for(let n=0;n<e.length;n++)r[n]=e.charCodeAt(n);return r},qa=t=>{let e=t;e instanceof Uint8Array&&(e=No.decode(e)),e=e.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"");try{return dx(e)}catch(r){throw new TypeError("The input to be decoded is not correctly encoded.")}};var pe=class extends Error{constructor(e,r){var n;super(e,r),this.code="ERR_JOSE_GENERIC",this.name=this.constructor.name,(n=Error.captureStackTrace)==null||n.call(Error,this,this.constructor)}};pe.code="ERR_JOSE_GENERIC";var Ru=class extends pe{constructor(e,r,n="unspecified",s="unspecified"){super(e,{cause:{claim:n,reason:s,payload:r}}),this.code="ERR_JWT_CLAIM_VALIDATION_FAILED",this.claim=n,this.reason=s,this.payload=r}};Ru.code="ERR_JWT_CLAIM_VALIDATION_FAILED";var Tu=class extends pe{constructor(e,r,n="unspecified",s="unspecified"){super(e,{cause:{claim:n,reason:s,payload:r}}),this.code="ERR_JWT_EXPIRED",this.claim=n,this.reason=s,this.payload=r}};Tu.code="ERR_JWT_EXPIRED";var Iu=class extends pe{constructor(){super(...arguments),this.code="ERR_JOSE_ALG_NOT_ALLOWED"}};Iu.code="ERR_JOSE_ALG_NOT_ALLOWED";var Fe=class extends pe{constructor(){super(...arguments),this.code="ERR_JOSE_NOT_SUPPORTED"}};Fe.code="ERR_JOSE_NOT_SUPPORTED";var ku=class extends pe{constructor(e="decryption operation failed",r){super(e,r),this.code="ERR_JWE_DECRYPTION_FAILED"}};ku.code="ERR_JWE_DECRYPTION_FAILED";var Ou=class extends pe{constructor(){super(...arguments),this.code="ERR_JWE_INVALID"}};Ou.code="ERR_JWE_INVALID";var Ot=class extends pe{constructor(){super(...arguments),this.code="ERR_JWS_INVALID"}};Ot.code="ERR_JWS_INVALID";var Do=class extends pe{constructor(){super(...arguments),this.code="ERR_JWT_INVALID"}};Do.code="ERR_JWT_INVALID";var Mu=class extends pe{constructor(){super(...arguments),this.code="ERR_JWK_INVALID"}};Mu.code="ERR_JWK_INVALID";var Lu=class extends pe{constructor(){super(...arguments),this.code="ERR_JWKS_INVALID"}};Lu.code="ERR_JWKS_INVALID";var Nu=class extends pe{constructor(e="no applicable key found in the JSON Web Key Set",r){super(e,r),this.code="ERR_JWKS_NO_MATCHING_KEY"}};Nu.code="ERR_JWKS_NO_MATCHING_KEY";var Du=class extends pe{constructor(e="multiple matching keys found in the JSON Web Key Set",r){super(e,r),this.code="ERR_JWKS_MULTIPLE_MATCHING_KEYS"}};Du.code="ERR_JWKS_MULTIPLE_MATCHING_KEYS";var Bu=class extends pe{constructor(e="request timed out",r){super(e,r),this.code="ERR_JWKS_TIMEOUT"}};Bu.code="ERR_JWKS_TIMEOUT";var Fu=class extends pe{constructor(e="signature verification failed",r){super(e,r),this.code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED"}};Fu.code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED";function Mt(t,e="algorithm.name"){return new TypeError(`CryptoKey does not support this operation, its ${e} must be ${t}`)}function Ua(t,e){return t.name===e}function qu(t){return parseInt(t.name.slice(4),10)}function hx(t){switch(t){case"ES256":return"P-256";case"ES384":return"P-384";case"ES512":return"P-521";default:throw new Error("unreachable")}}function px(t,e){if(e.length&&!e.some(r=>t.usages.includes(r))){let r="CryptoKey does not support this operation, its usages must include ";if(e.length>2){let n=e.pop();r+=`one of ${e.join(", ")}, or ${n}.`}else e.length===2?r+=`one of ${e[0]} or ${e[1]}.`:r+=`${e[0]}.`;throw new TypeError(r)}}function am(t,e,...r){switch(e){case"HS256":case"HS384":case"HS512":{if(!Ua(t.algorithm,"HMAC"))throw Mt("HMAC");let n=parseInt(e.slice(2),10);if(qu(t.algorithm.hash)!==n)throw Mt(`SHA-${n}`,"algorithm.hash");break}case"RS256":case"RS384":case"RS512":{if(!Ua(t.algorithm,"RSASSA-PKCS1-v1_5"))throw Mt("RSASSA-PKCS1-v1_5");let n=parseInt(e.slice(2),10);if(qu(t.algorithm.hash)!==n)throw Mt(`SHA-${n}`,"algorithm.hash");break}case"PS256":case"PS384":case"PS512":{if(!Ua(t.algorithm,"RSA-PSS"))throw Mt("RSA-PSS");let n=parseInt(e.slice(2),10);if(qu(t.algorithm.hash)!==n)throw Mt(`SHA-${n}`,"algorithm.hash");break}case"EdDSA":{if(t.algorithm.name!=="Ed25519"&&t.algorithm.name!=="Ed448")throw Line truncated
> `);else{let v=p?(p=!1,Le):"";S!=null&&S.content&&(yield v+(S==null?void 0:S.content))}}},ux=async(t,e)=>{let r=t.embeds?await Promise.all(t.embeds.map(n=>lt(n,e))):[];return t.content.trim()&&r.push({type:"text",text:t.content}),{role:t.role,content:r}},Da={name:"SiliconFlow",defaultOptions:{apiKey:"",baseURL:"https://api.siliconflow.cn/v1",model:"",parameters:{}},sendRequestFunc:cx,models:[],websiteToObtainKey:"https://siliconflow.cn",capabilities:["Text Generation","Image Vision","Reasoning"]};var ms=crypto,Ba=t=>t instanceof CryptoKey;var kt=new TextEncoder,No=new TextDecoder,zN=2**32;function im(...t){let e=t.reduce((s,{length:o})=>s+o,0),r=new Uint8Array(e),n=0;for(let s of t)r.set(s,n),n+=s.length;return r}var fx=t=>{let e=t;typeof e=="string"&&(e=kt.encode(e));let r=32768,n=[];for(let s=0;s<e.length;s+=r)n.push(String.fromCharCode.apply(null,e.subarray(s,s+r)));return btoa(n.join(""))},Fa=t=>fx(t).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_"),dx=t=>{let e=atob(t),r=new Uint8Array(e.length);for(let n=0;n<e.length;n++)r[n]=e.charCodeAt(n);return r},qa=t=>{let e=t;e instanceof Uint8Array&&(e=No.decode(e)),e=e.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"");try{return dx(e)}catch(r){throw new TypeError("The input to be decoded is not correctly encoded.")}};var pe=class extends Error{constructor(e,r){var n;super(e,r),this.code="ERR_JOSE_GENERIC",this.name=this.constructor.name,(n=Error.captureStackTrace)==null||n.call(Error,this,this.constructor)}};pe.code="ERR_JOSE_GENERIC";var Ru=class extends pe{constructor(e,r,n="unspecified",s="unspecified"){super(e,{cause:{claim:n,reason:s,payload:r}}),this.code="ERR_JWT_CLAIM_VALIDATION_FAILED",this.claim=n,this.reason=s,this.payload=r}};Ru.code="ERR_JWT_CLAIM_VALIDATION_FAILED";var Tu=class extends pe{constructor(e,r,n="unspecified",s="unspecified"){super(e,{cause:{claim:n,reason:s,payload:r}}),this.code="ERR_JWT_EXPIRED",this.claim=n,this.reason=s,this.payload=r}};Tu.code="ERR_JWT_EXPIRED";var Iu=class extends pe{constructor(){super(...arguments),this.code="ERR_JOSE_ALG_NOT_ALLOWED"}};Iu.code="ERR_JOSE_ALG_NOT_ALLOWED";var Fe=class extends pe{constructor(){super(...arguments),this.code="ERR_JOSE_NOT_SUPPORTED"}};Fe.code="ERR_JOSE_NOT_SUPPORTED";var ku=class extends pe{constructor(e="decryption operation failed",r){super(e,r),this.code="ERR_JWE_DECRYPTION_FAILED"}};ku.code="ERR_JWE_DECRYPTION_FAILED";var Ou=class extends pe{constructor(){super(...arguments),this.code="ERR_JWE_INVALID"}};Ou.code="ERR_JWE_INVALID";var Ot=class extends pe{constructor(){super(...arguments),this.code="ERR_JWS_INVALID"}};Ot.code="ERR_JWS_INVALID";var Do=class extends pe{constructor(){super(...arguments),this.code="ERR_JWT_INVALID"}};Do.code="ERR_JWT_INVALID";var Mu=class extends pe{constructor(){super(...arguments),this.code="ERR_JWK_INVALID"}};Mu.code="ERR_JWK_INVALID";var Lu=class extends pe{constructor(){super(...arguments),this.code="ERR_JWKS_INVALID"}};Lu.code="ERR_JWKS_INVALID";var Nu=class extends pe{constructor(e="no applicable key found in the JSON Web Key Set",r){super(e,r),this.code="ERR_JWKS_NO_MATCHING_KEY"}};Nu.code="ERR_JWKS_NO_MATCHING_KEY";var Du=class extends pe{constructor(e="multiple matching keys found in the JSON Web Key Set",r){super(e,r),this.code="ERR_JWKS_MULTIPLE_MATCHING_KEYS"}};Du.code="ERR_JWKS_MULTIPLE_MATCHING_KEYS";var Bu=class extends pe{constructor(e="request timed out",r){super(e,r),this.code="ERR_JWKS_TIMEOUT"}};Bu.code="ERR_JWKS_TIMEOUT";var Fu=class extends pe{constructor(e="signature verification failed",r){super(e,r),this.code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED"}};Fu.code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED";function Mt(t,e="algorithm.name"){return new TypeError(`CryptoKey does not support this operation, its ${e} must be ${t}`)}function Ua(t,e){return t.name===e}function qu(t){return parseInt(t.name.slice(4),10)}function hx(t){switch(t){case"ES256":return"P-256";case"ES384":return"P-384";case"ES512":return"P-521";default:throw new Error("unreachable")}}function px(t,e){if(e.length&&!e.some(r=>t.usages.includes(r))){let r="CryptoKey does not support this operation, its usages must include ";if(e.length>2){let n=e.pop();r+=`one of ${e.join(", ")}, or ${n}.`}else e.length===2?r+=`one of ${e[0]} or ${e[1]}.`:r+=`${e[0]}.`;throw new TypeError(r)}}function am(t,e,...r){switch(e){case"HS256":case"HS384":case"HS512":{if(!Ua(t.algorithm,"HMAC"))throw Mt("HMAC");let n=parseInt(e.slice(2),10);if(qu(t.algorithm.hash)!==n)throw Mt(`SHA-${n}`,"algorithm.hash");break}case"RS256":case"RS384":case"RS512":{if(!Ua(t.algorithm,"RSASSA-PKCS1-v1_5"))throw Mt("RSASSA-PKCS1-v1_5");let n=parseInt(e.slice(2),10);if(qu(t.algorithm.hash)!==n)throw Mt(`SHA-${n}`,"algorithm.hash");break}case"PS256":case"PS384":case"PS512":{if(!Ua(t.algorithm,"RSA-PSS"))throw Mt("RSA-PSS");let n=parseInt(e.slice(2),10);if(qu(t.algorithm.hash)!==n)throw Mt(`SHA-${n}`,"algorithm.hash");break}case"EdDSA":{if(t.algorithm.name!=="Ed25519"&&t.algorithm.name!=="Ed448")throw Line truncated
`).trim()},Lx=(t,e)=>{var r;return(r=t.embeds)==null?void 0:r.filter(n=>e[0]<=n.position.start.offset&&n.position.end.offset<=e[1])},Nx=async(t,e,r)=>{let{tags:n,options:{newChatTags:s}}=t,o=n.findLast(l=>s.some(f=>l.tag.slice(1).split("/")[0].toLowerCase()===f.toLowerCase())&&e<=l.position.start.offset&&l.position.end.offset<=r),i=o?o.position.end.offset:e,a=Cm(t,i,r);return await Promise.all(a.map(async l=>{let f={...l,content:await Pm(t,l)},u=Lx(t,l.contentRange);return u&&u.length>0&&(f.embeds=u),f}))},Dx=(0,ze.debounce)(t=>{t.isTextInserting=!1},1e3,!0),Bx=(t,e,r,n)=>{r.isTextInserting=!0;let s=t.getCursor("to");n!==null&&(n.line!==s.line||n.ch!==s.ch)&&(s=n);let o=t.getLine(s.line);o.length>s.ch&&(s={line:s.line,ch:o.length});let i=e.split(`
`),a={line:s.line+i.length-1,ch:i.length===1?s.ch+e.length:i[i.length-1].length};return t.replaceRange(e,s),t.setCursor(a),Dx(r),a},Rm=async t=>{let{tags:e,options:{newChatTags:r}}=t,o=[0,...e.filter(c=>r.some(l=>c.tag.slice(1).split("/")[0].toLowerCase()===l.toLowerCase())).flatMap(c=>[c.position.start.offset-1,c.position.end.offset+1]),1/0],i=o.filter((c,l)=>l%2===0).map((c,l)=>({startOffset:c,endOffset:o[l*2+1]}));return console.debug("ranges",i),(await Promise.all(i.map(async c=>{let l=Cm(t,c.startOffset,c.endOffset);return Promise.all(l.map(async u=>({...u,content:await Pm(t,u)})))}))).filter(c=>c.length>0)},Tm=(t,e)=>{let{tags:r,sections:n,options:{systemTags:s,userTags:o,assistantTags:i}}=t,a=[...s,...o,...i],c=r.filter(y=>a.some(g=>y.tag.slice(1).split("/")[0].toLowerCase()===g.toLowerCase()));console.debug("msgTagsInMeta",c);let l=c.findLastIndex(y=>y.position.start.line<=e);if(l<0)return[-1,-1];console.debug("msgTag",c[l]);let f=c[l].position.end.offset+2,u=l+1,d=u<c.length?c[u].position.start.offset:1/0;console.debug("nextTag",c[u]);let h=n.findLast(y=>y.position.end.offset<=d&&y.position.start.line>=e);if(!h)return[-1,-1];let p=h.position.end.offset;return console.debug("startOff",f,"endOffset",p),[f,p]},Fx=t=>`${(t/1e3).toFixed(2)}s`,qx=async(t,e,r)=>t.options.enableStreamLog?(await t.vault.adapter.exists((0,ze.normalizePath)(qe))||await t.vault.createFolder(qe),console.debug("Using stream logging"),Am(e.sendRequestFunc(r.options),t.createPlainText)):e.sendRequestFunc(r.options),Gr=async(t,e,r,n,s,o,i)=>{var a;try{let c=qo.find(P=>P.name===r.vendor);if(!c)throw new Error("No vendor found "+r.vendor);let f=(await Nx(t,0,n)).map(P=>P.embeds?{role:P.role,content:P.content,embeds:P.embeds}:{role:P.role,content:P.content});console.debug("messages",f);let u=f.last();if(!u||u.role!=="user"||u.content.trim().length===0)throw new Error(m("Please add a user message first, or wait for the user message to be parsed."));t.options.enableDefaultSystemMsg&&((a=f[0])==null?void 0:a.role)!=="system"&&t.options.defaultSystemMsg&&(f.unshift({role:"system",content:t.options.defaultSystemMsg}),console.debug("Default system message added:",t.options.defaultSystemMsg));let d=f.filter(P=>P.role==="assistant").length+1,h=await qx(t,c,r),p=new Date;s.setGeneratingStatus(d);let y="",g=i.getController(),S=null,_=null;for await(let P of h(f,g,t.resolveEmbed,t.saveAttachment))_==null&&(_=e.getCursor("to")),S=Bx(e,P,o,S),y+=P,s.updateGeneratingProgress(y.length);let v=new Date,C=Fx(v.getTime()-p.getTime()),x={round:d,characters:y.length,duration:C,model:r.options.model,vendor:r.vendor,startTime:p,endTime:v};if(s.setSuccessStatus(x),y.length===0)throw new Error(m("No text generated"));if(console.debug("\u2728 "+m("AI generate")+" \u2728 ",y),_){let P=e.getCursor("to"),k=e.getRange(_,P),O=Ux(y);k!==O&&(console.debug("format text with leading breaks"),e.replaceRange(O,_,P))}if(g.signal.aborted)throw new DOMException("Operation was aborted","AbortError");new ze.Notice(m("Text generated successfully"))}finally{i.cleanup()}},Ux=t=>{let e=t.split(`
`).trim()},Lx=(t,e)=>{var r;return(r=t.embeds)==null?void 0:r.filter(n=>e[0]<=n.position.start.offset&&n.position.end.offset<=e[1])},Nx=async(t,e,r)=>{let{tags:n,options:{newChatTags:s}}=t,o=n.findLast(l=>s.some(f=>l.tag.slice(1).toLowerCase()===f.toLowerCase())&&e<=l.position.start.offset&&l.position.end.offset<=r),i=o?o.position.end.offset:e,a=Cm(t,i,r);return await Promise.all(a.map(async l=>{let f={...l,content:await Pm(t,l)},u=Lx(t,l.contentRange);return u&&u.length>0&&(f.embeds=u),f}))},Dx=(0,ze.debounce)(t=>{t.isTextInserting=!1},1e3,!0),Bx=(t,e,r,n)=>{r.isTextInserting=!0;let s=t.getCursor("to");n!==null&&(n.line!==s.line||n.ch!==s.ch)&&(s=n);let o=t.getLine(s.line);o.length>s.ch&&(s={line:s.line,ch:o.length});let i=e.split(`
`),a={line:s.line+i.length-1,ch:i.length===1?s.ch+e.length:i[i.length-1].length};return t.replaceRange(e,s),t.setCursor(a),Dx(r),a},Rm=async t=>{let{tags:e,options:{newChatTags:r}}=t,o=[0,...e.filter(c=>r.some(l=>c.tag.slice(1).toLowerCase()===l.toLowerCase())).flatMap(c=>[c.position.start.offset-1,c.position.end.offset+1]),1/0],i=o.filter((c,l)=>l%2===0).map((c,l)=>({startOffset:c,endOffset:o[l*2+1]}));return console.debug("ranges",i),(await Promise.all(i.map(async c=>{let l=Cm(t,c.startOffset,c.endOffset);return Promise.all(l.map(async u=>({...u,content:await Pm(t,u)})))}))).filter(c=>c.length>0)},Tm=(t,e)=>{let{tags:r,sections:n,options:{systemTags:s,userTags:o,assistantTags:i}}=t,a=[...s,...o,...i],c=r.filter(y=>a.some(g=>y.tag.slice(1).toLowerCase()===g.toLowerCase()));console.debug("msgTagsInMeta",c);let l=c.findLastIndex(y=>y.position.start.line<=e);if(l<0)return[-1,-1];console.debug("msgTag",c[l]);let f=c[l].position.end.offset+2,u=l+1,d=u<c.length?c[u].position.start.offset:1/0;console.debug("nextTag",c[u]);let h=n.findLast(y=>y.position.end.offset<=d&&y.position.start.line>=e);if(!h)return[-1,-1];let p=h.position.end.offset;return console.debug("startOff",f,"endOffset",p),[f,p]},Fx=t=>`${(t/1e3).toFixed(2)}s`,qx=async(t,e,r)=>t.options.enableStreamLog?(await t.vault.adapter.exists((0,ze.normalizePath)(qe))||await t.vault.createFolder(qe),console.debug("Using stream logging"),Am(e.sendRequestFunc(r.options),t.createPlainText)):e.sendRequestFunc(r.options),Gr=async(t,e,r,n,s,o,i)=>{var a;try{let c=qo.find(P=>P.name===r.vendor);if(!c)throw new Error("No vendor found "+r.vendor);let f=(await Nx(t,0,n)).map(P=>P.embeds?{role:P.role,content:P.content,embeds:P.embeds}:{role:P.role,content:P.content});console.debug("messages",f);let u=f.last();if(!u||u.role!=="user"||u.content.trim().length===0)throw new Error(m("Please add a user message first, or wait for the user message to be parsed."));t.options.enableDefaultSystemMsg&&((a=f[0])==null?void 0:a.role)!=="system"&&t.options.defaultSystemMsg&&(f.unshift({role:"system",content:t.options.defaultSystemMsg}),console.debug("Default system message added:",t.options.defaultSystemMsg));let d=f.filter(P=>P.role==="assistant").length+1,h=await qx(t,c,r),p=new Date;s.setGeneratingStatus(d);let y="",g=i.getController(),S=null,_=null;for await(let P of h(f,g,t.resolveEmbed,t.saveAttachment))_==null&&(_=e.getCursor("to")),S=Bx(e,P,o,S),y+=P,s.updateGeneratingProgress(y.length);let v=new Date,C=Fx(v.getTime()-p.getTime()),x={round:d,characters:y.length,duration:C,model:r.options.model,vendor:r.vendor,startTime:p,endTime:v};if(s.setSuccessStatus(x),y.length===0)throw new Error(m("No text generated"));if(console.debug("\u2728 "+m("AI generate")+" \u2728 ",y),_){let P=e.getCursor("to"),k=e.getRange(_,P),O=Ux(y);k!==O&&(console.debug("format text with leading breaks"),e.replaceRange(O,_,P))}if(g.signal.aborted)throw new DOMException("Operation was aborted","AbortError");new ze.Notice(m("Text generated successfully"))}finally{i.cleanup()}},Ux=t=>{let e=t.split(`
`)[0];return e.startsWith("#")||e.startsWith("```")?`
`+t:e.startsWith("| ")?`
@@ -166,7 +166,7 @@ Assistant:`;J.DEFAULT_TIMEOUT=6e5;J.AnthropicError=B;J.APIError=le;J.APIConnecti
`)){this.close();return}console.debug("element",e);try{let s=this.settings.providers.find(a=>a.tag===e.tag);if(!s)throw new Error("No provider found "+e.tag);let o=await Xe(this.app,this.settings),i=n.posToOffset(this.context.start);console.debug("endOffset",i),await Gr(o,n,s,i,this.statusBarManager,this.settings.editorStatus,this.requestController)}catch(s){if(console.error("error",s),s.name==="AbortError"){this.statusBarManager.setCancelledStatus(),new Jr.Notice(m("Generation cancelled"));return}this.statusBarManager.setErrorStatus(s),new Jr.Notice(`\u{1F534} ${Jr.Platform.isDesktopApp?m("Click status bar for error details. "):""}${s}`,10*1e3)}this.close()}};var Gu=`
`,Vx=t=>{let e=t.listSelections();if(e.length===0)throw new Error("No selection");if(e.length>1)throw new Error("Multiple selections");return e[0]},_s=(t,e,r)=>{let n=Ju(t,e);return Kx(t,e,n,r)},Ju=(t,e)=>{let r=Vx(e);console.debug("anchor",r.anchor),console.debug("head",r.head);let n=e.getCursor(),{sections:s}=Om(t);if(!s)return console.debug("No sections"),{from:{line:n.line,ch:0},to:{line:n.line,ch:e.getLine(n.line).length}};let o=e.posToOffset(r.anchor),i=e.posToOffset(r.head),[a,c]=o<i?[o,i]:[i,o],l=s.filter(f=>a<=f.position.end.offset&&f.position.start.offset<=c);return l.length===0?(console.debug("No overlapping sections"),{from:{line:n.line,ch:0},to:{line:n.line,ch:e.getLine(n.line).length}}):{from:{line:l[0].position.start.line,ch:l[0].position.start.col},to:{line:l[l.length-1].position.end.line,ch:l[l.length-1].position.end.col}}},Ss=(t,e)=>{let{from:r,to:n}=e;return t.getRange(r,n).trim().length===0},xs=(t,e,r)=>{let n=e.line,s="";return e.line>0&&t.getLine(e.line-1).trim().length>0?(s=`
`+r,n+=1):s=r,t.replaceRange(s,e,e),t.setSelection({line:n,ch:t.getLine(n).length}),n},Es=(t,e,r)=>{let{from:n,to:s}=e,o="",i=s.line;n.line>0&&t.getLine(n.line-1).trim().length>0&&n.ch===0?(o=`
`+r,i+=1):o=r,t.replaceRange(o,n,n),t.setSelection({line:i,ch:t.getLine(i).length})},Ga=(t,e,r,n)=>{let{to:s}=e;r&&(t.replaceRange("#"+n,r.from,r.to),t.setSelection({line:s.line,ch:t.getLine(s.line).length}))},Kx=(t,e,r,n)=>{let{tags:s}=Om(t);if(!s)return{tagContent:null,role:null,range:r,tagRange:null};let{from:o,to:i}=r,a=s.find(c=>e.posToOffset(o)<=c.position.start.offset&&c.position.end.offset<=e.posToOffset(i));if(a){let c=n.userTags,l=n.providers.map(p=>p.tag),f=n.systemTags,u=n.newChatTags,d=a.tag.slice(1).split("/")[0].toLowerCase();if(u.some(p=>p.toLowerCase()===d)){let p=s.find(y=>a.position.end.offset<=y.position.start.offset&&y.position.end.offset<=e.posToOffset(i));return p?{tagContent:p.tag.slice(1),role:km(p,{userTags:c,assistantTags:l,systemTags:f,newChatTags:u}),range:{from:e.offsetToPos(a.position.end.offset+1),to:r.to},tagRange:{from:e.offsetToPos(p.position.start.offset),to:e.offsetToPos(p.position.end.offset)}}:{tagContent:a.tag.slice(1),role:null,range:{from:e.offsetToPos(a.position.end.offset+1),to:r.to},tagRange:{from:e.offsetToPos(a.position.start.offset),to:e.offsetToPos(a.position.end.offset)}}}return{tagContent:a.tag.slice(1),role:km(a,{userTags:c,assistantTags:l,systemTags:f,newChatTags:u}),range:r,tagRange:{from:e.offsetToPos(a.position.start.offset),to:e.offsetToPos(a.position.end.offset)}}}else return{tagContent:null,role:null,range:r,tagRange:null}},km=(t,e)=>{let{userTags:r,assistantTags:n,systemTags:s,newChatTags:o}=e,i=t.tag.slice(1).split("/")[0].toLowerCase();return r.some(c=>c.toLowerCase()===i)?"user":n.some(c=>c.toLowerCase()===i)?"assistant":s.some(c=>c.toLowerCase()===i)?"system":o.some(c=>c.toLowerCase()===i)?"newChat":null},Om=t=>{let e=t.workspace.getActiveFile();if(!e)throw new Error("No active file");let r=t.metadataCache.getFileCache(e);if(!r)throw new Error(m("Waiting for metadata to be ready. Please try again."));let n=r.tags;return{sections:r.sections,tags:n}},$o=(t,e)=>{let r=t.getCursor("to"),n=e.split(`
`+r,i+=1):o=r,t.replaceRange(o,n,n),t.setSelection({line:i,ch:t.getLine(i).length})},Ga=(t,e,r,n)=>{let{to:s}=e;r&&(t.replaceRange("#"+n,r.from,r.to),t.setSelection({line:s.line,ch:t.getLine(s.line).length}))},Kx=(t,e,r,n)=>{let{tags:s}=Om(t);if(!s)return{tagContent:null,role:null,range:r,tagRange:null};let{from:o,to:i}=r,a=s.find(c=>e.posToOffset(o)<=c.position.start.offset&&c.position.end.offset<=e.posToOffset(i));if(a){let c=n.userTags,l=n.providers.map(p=>p.tag),f=n.systemTags,u=n.newChatTags,d=a.tag.slice(1).toLowerCase();if(u.some(p=>p.toLowerCase()===d)){let p=s.find(y=>a.position.end.offset<=y.position.start.offset&&y.position.end.offset<=e.posToOffset(i));return p?{tagContent:p.tag.slice(1),role:km(p,{userTags:c,assistantTags:l,systemTags:f,newChatTags:u}),range:{from:e.offsetToPos(a.position.end.offset+1),to:r.to},tagRange:{from:e.offsetToPos(p.position.start.offset),to:e.offsetToPos(p.position.end.offset)}}:{tagContent:a.tag.slice(1),role:null,range:{from:e.offsetToPos(a.position.end.offset+1),to:r.to},tagRange:{from:e.offsetToPos(a.position.start.offset),to:e.offsetToPos(a.position.end.offset)}}}return{tagContent:a.tag.slice(1),role:km(a,{userTags:c,assistantTags:l,systemTags:f,newChatTags:u}),range:r,tagRange:{from:e.offsetToPos(a.position.start.offset),to:e.offsetToPos(a.position.end.offset)}}}else return{tagContent:null,role:null,range:r,tagRange:null}},km=(t,e)=>{let{userTags:r,assistantTags:n,systemTags:s,newChatTags:o}=e,i=t.tag.slice(1).toLowerCase();return r.some(c=>c.toLowerCase()===i)?"user":n.some(c=>c.toLowerCase()===i)?"assistant":s.some(c=>c.toLowerCase()===i)?"system":o.some(c=>c.toLowerCase()===i)?"newChat":null},Om=t=>{let e=t.workspace.getActiveFile();if(!e)throw new Error("No active file");let r=t.metadataCache.getFileCache(e);if(!r)throw new Error(m("Waiting for metadata to be ready. Please try again."));let n=r.tags;return{sections:r.sections,tags:n}},$o=(t,e)=>{let r=t.getCursor("to"),n=e.split(`
`),s={line:r.line+n.length-1,ch:n.length===1?r.ch+e.length:n[n.length-1].length};return t.replaceRange(e,r),t.setCursor(s),s.line};var Xu=({id:t,name:e,tag:r},n,s,o,i)=>({id:t,name:e,editorCallback:async(a,c)=>{try{let l=s.providers.find(g=>g.tag===r);if(!l){new yt.Notice(`Assistant ${r} not found`);return}let f=gt(s.userTags[0]),u=gt(r),{range:d,role:h,tagContent:p,tagRange:y}=_s(n,a,s);if(console.debug("asstTagCmd",{range:d,role:h,tagContent:p,tagRange:y}),Ss(a,d)){let g=xs(a,d.from,u),S=a.posToOffset({line:g,ch:0}),_=await Xe(n,s);await Gr(_,a,l,S,o,s.editorStatus,i);return}if(h===null){Es(a,d,f),a.setCursor({line:d.to.line,ch:a.getLine(d.to.line).length}),$o(a,Gu+`
`);let g=await Gx(a,u,s.answerDelayInMilliseconds),S=a.posToOffset({line:g,ch:0}),_=await Xe(n,s);await Gr(_,a,l,S,o,s.editorStatus,i)}else if(h==="assistant")if(s.confirmRegenerate){let g=async()=>{await Mm(n,s,o,i,a,l,d,u)};new zu(n,g).open()}else await Mm(n,s,o,i,a,l,d,u);else{a.setCursor({line:d.to.line,ch:a.getLine(d.to.line).length});let g=$o(a,Gu+`
`+u),S=a.posToOffset({line:g,ch:0}),_=await Xe(n,s);await Gr(_,a,l,S,o,s.editorStatus,i)}}catch(l){if(console.error(l),l.name==="AbortError"){o.setCancelledStatus(),new yt.Notice(m("Generation cancelled"));return}o.setErrorStatus(l),new yt.Notice(`\u{1F534} ${yt.Platform.isDesktopApp?m("Click status bar for error details. "):""}${l}`,10*1e3)}}}),Mm=async(t,e,r,n,s,o,i,a)=>{s.replaceRange(a,i.from,i.to),s.setCursor({line:i.from.line,ch:s.getLine(i.from.line).length});let c=s.posToOffset({line:i.from.line,ch:0}),l=await Xe(t,e);await Gr(l,s,o,c,r,e.editorStatus,n)},zu=class extends yt.Modal{constructor(e,r){super(e),this.onConfirm=r}onOpen(){let{contentEl:e}=this;e.createEl("h2",{text:m("Regenerate?")}),e.createEl("p",{text:m("This will delete the current response content. You can configure this in settings to not require confirmation.")}),new yt.Setting(e).addButton(r=>r.setButtonText(m("Yes")).setCta().onClick(async()=>{this.close(),await this.onConfirm()}))}},Gx=async(t,e,r)=>{let n=e.length-2;if(n<=0)throw new Error("mark length must be greater than 2");let s=Math.round(r/n),o=$o(t,e[0]+e[1]);for(let i=2;i<e.length;i++)await new Promise(a=>setTimeout(a,s)),o=$o(t,e[i]);return o};var As=require("obsidian");var Ja="export-to-jsonl",Ho=(t,e)=>({id:Ja,name:m("Export conversations to JSONL"),callback:async()=>{await Jx(t,e)}}),Jx=async(t,e)=>{var f,u,d;let r=await Xe(t,e),n=await Rm(r);console.debug("conversations",n);let s=[];try{s=n.map(zx)}catch(h){console.error("error",h),new As.Notice(`\u{1F534}${m("Error")}: ${h}`,10*1e3);return}if(s.length===0){new As.Notice(m("No conversation found"));return}let o=s.map(h=>JSON.stringify(h)).join(`
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "tars",
"name": "Tars",
"version": "3.5.0",
"version": "3.5.1",
"minAppVersion": "1.5.8",
"description": "Text generation based on tag suggestions, using DeepSeek, Claude, OpenAI, OpenRouter, SiliconFlow, Gemini, Qwen & more.",
"author": "Tarslab",