From 5f4382911b9f8c2141018981a78d6d3a39a565d7 Mon Sep 17 00:00:00 2001 From: syui Date: Sat, 14 Jun 2025 00:40:29 +0900 Subject: [PATCH] fix command build --- my-blog/config.toml | 1 + my-blog/content/posts/2025-06-06-ailog.md | 6 +++++ ...Dastf61.js => comment-atproto-MOwlkOMr.js} | 2 +- my-blog/static/index.html | 2 +- my-blog/templates/oauth-assets.html | 2 +- oauth/.env.production | 5 ++-- src/commands/oauth.rs | 25 ++++++++++++++++++- 7 files changed, 36 insertions(+), 7 deletions(-) rename my-blog/static/assets/{comment-atproto-CDastf61.js => comment-atproto-MOwlkOMr.js} (99%) diff --git a/my-blog/config.toml b/my-blog/config.toml index 71f3199..a41461f 100644 --- a/my-blog/config.toml +++ b/my-blog/config.toml @@ -27,3 +27,4 @@ admin = "did:plc:uqzpqmrjnptsxezjx4xuh2mn" collection_comment = "ai.syui.log" collection_user = "ai.syui.log.user" collection_chat = "ai.syui.log.chat" +bsky_api = "https://public.api.bsky.app" diff --git a/my-blog/content/posts/2025-06-06-ailog.md b/my-blog/content/posts/2025-06-06-ailog.md index e321dc9..3da5534 100644 --- a/my-blog/content/posts/2025-06-06-ailog.md +++ b/my-blog/content/posts/2025-06-06-ailog.md @@ -81,6 +81,12 @@ AILOG_COLLECTION_USER=ai.syui.log.user VITE_BSKY_PUBLIC_API=https://public.api.bsky.app ``` +これは`ailog oauth build my-blog`で`./my-blog/config.toml`から`./oauth/.env.production`が生成されます。 + +```sh +$ ailog oauth build my-blog +``` + ### 解説 簡単に説明すると、`./oauth`で生成するのが`atproto-comment-system`です。 diff --git a/my-blog/static/assets/comment-atproto-CDastf61.js b/my-blog/static/assets/comment-atproto-MOwlkOMr.js similarity index 99% rename from my-blog/static/assets/comment-atproto-CDastf61.js rename to my-blog/static/assets/comment-atproto-MOwlkOMr.js index 717608f..6006206 100644 --- a/my-blog/static/assets/comment-atproto-CDastf61.js +++ b/my-blog/static/assets/comment-atproto-MOwlkOMr.js @@ -65,7 +65,7 @@ if (cid) { `,aZ=Object.freeze(Object.defineProperty({__proto__:null,CID:Yt},Symbol.toStringTag,{value:"Module"})),wc=vy(aZ);var Pi={},fi={};Object.defineProperty(fi,"__esModule",{value:!0});fi.isObject=fi.assure=fi.create=fi.is=void 0;const lZ=(t,e)=>e.safeParse(t).success;fi.is=lZ;const cZ=t=>e=>t.safeParse(e).success;fi.create=cZ;const uZ=(t,e)=>t.parse(e);fi.assure=uZ;const dZ=t=>typeof t=="object"&&t!==null;fi.isObject=dZ;var Hl={};(function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.parseIntWithFallback=t.dedupeStrs=t.range=t.chunkArray=t.errHasMsg=t.isErrnoException=t.asyncFilter=t.s32decode=t.s32encode=t.streamToBuffer=t.flattenUint8Arrays=t.bailableWait=t.wait=t.jitter=t.noUndefinedVals=void 0,t.omit=r;const e=b=>(Object.keys(b).forEach(E=>{b[E]===void 0&&delete b[E]}),b);t.noUndefinedVals=e;function r(b,E){if(!b)return b;const _={},T=Object.keys(b);for(let B=0;BMath.round((Math.random()-.5)*b*2);t.jitter=n;const i=b=>new Promise(E=>setTimeout(E,b));t.wait=i;const o=b=>{let E;const _=new Promise(T=>{const B=setTimeout(T,b);E=()=>{clearTimeout(B),T()}});return{bail:E,wait:()=>_}};t.bailableWait=o;const s=b=>{const E=b.reduce((B,I)=>B+I.length,0),_=new Uint8Array(E);let T=0;return b.forEach(B=>{_.set(B,T),T+=B.length}),_};t.flattenUint8Arrays=s;const a=async b=>{const E=[];for await(const _ of b)E.push(_);return(0,t.flattenUint8Arrays)(E)};t.streamToBuffer=a;const c="234567abcdefghijklmnopqrstuvwxyz",u=b=>{let E="";for(;b;){const _=b%32;b=Math.floor(b/32),E=c.charAt(_)+E}return E};t.s32encode=u;const d=b=>{let E=0;for(const _ of b)E=E*32+c.indexOf(_);return E};t.s32decode=d;const f=async(b,E)=>{const _=await Promise.all(b.map(T=>E(T)));return b.filter((T,B)=>_[B])};t.asyncFilter=f;const h=b=>!!b&&b.code;t.isErrnoException=h;const m=(b,E)=>!!b&&typeof b=="object"&&b.message===E;t.errHasMsg=m;const g=(b,E)=>b.reduce((_,T,B)=>{const I=Math.floor(B/E);return _[I]||(_[I]=[]),_[I].push(T),_},[]);t.chunkArray=g;const v=b=>{const E=[];for(let _=0;_[...new Set(b)];t.dedupeStrs=w;const y=(b,E)=>{const _=parseInt(b||"",10);return isNaN(_)?E:_};t.parseIntWithFallback=y})(Hl);var op={};Object.defineProperty(op,"__esModule",{value:!0});op.mapDefined=void 0;op.keyBy=fZ;function fZ(t,e){return t.reduce((r,n)=>(r.set(n[e],n),r),new Map)}const pZ=(t,e)=>{const r=[];for(const n of t){const i=e(n);i!==void 0&&r.push(i)}return r};op.mapDefined=pZ;var bI={};(function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.AsyncBufferFullError=t.AsyncBuffer=t.allComplete=t.createDeferrables=t.createDeferrable=t.readFromGenerator=void 0,t.allFulfilled=c,t.handleAllSettledErrors=u,t.isRejectedResult=d,t.isFulfilledResult=h;const e=Hl,r=async(v,w,y=Promise.resolve(),b=Number.MAX_SAFE_INTEGER)=>{const E=[];let _,T=!1;const B=async()=>{if(await w(E.at(-1)))return!0;const O=(0,e.bailableWait)(20);return await O.wait(),_=O.bail,T?!1:await B()},I=new Promise(O=>{y.then(()=>{B().then(()=>O())})});try{for(;E.length{let v;const w=new Promise(y=>{v=()=>y()});return{resolve:v,complete:w}};t.createDeferrable=n;const i=v=>{const w=[];for(let y=0;y{await Promise.all(v.map(w=>w.complete))};t.allComplete=o;class s{constructor(w){Object.defineProperty(this,"maxSize",{enumerable:!0,configurable:!0,writable:!0,value:w}),Object.defineProperty(this,"buffer",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"promise",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"resolve",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"closed",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"toThrow",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.promise=Promise.resolve(),this.resolve=()=>null,this.resetPromise()}get curr(){return this.buffer}get size(){return this.buffer.length}get isClosed(){return this.closed}resetPromise(){this.promise=new Promise(w=>this.resolve=w)}push(w){this.buffer.push(w),this.resolve()}pushMany(w){w.forEach(y=>this.buffer.push(y)),this.resolve()}async*events(){for(;;){if(this.closed&&this.buffer.length===0){if(this.toThrow)throw this.toThrow;return}if(await this.promise,this.toThrow)throw this.toThrow;if(this.maxSize&&this.size>this.maxSize)throw new a(this.maxSize);const[w,...y]=this.buffer;w?(this.buffer=y,yield w):this.resetPromise()}}throw(w){this.toThrow=w,this.closed=!0,this.resolve()}close(){this.closed=!0,this.resolve()}}t.AsyncBuffer=s;class a extends Error{constructor(w){super(`ReachedMaxBufferSize: ${w}`)}}t.AsyncBufferFullError=a;function c(v){return Promise.allSettled(v).then(u)}function u(v){const w=v.filter(d).map(f);if(w.length===0)return v.map(m);throw w.length===1?w[0]:new AggregateError(w,`Multiple errors: ${w.map(g).join(` `)}`)}function d(v){return v.status==="rejected"}function f(v){return v.reason}function h(v){return v.status==="fulfilled"}function m(v){return v.value}function g(v){return v instanceof Error?v.message:String(v)}})(bI);var Mg={};Object.defineProperty(Mg,"__esModule",{value:!0});Mg.TID=void 0;const Ph=Hl,OC=13;let Qv=0,UC=0,Lh=null;function $C(t){return t.replaceAll("-","")}class zo{constructor(e){Object.defineProperty(this,"str",{enumerable:!0,configurable:!0,writable:!0,value:void 0});const r=$C(e);if(r.length!==OC)throw new Error(`Poorly formatted TID: ${r.length} length`);this.str=r}static next(e){const r=Math.max(Date.now(),Qv);r===Qv&&UC++,Qv=r;const n=r*1e3+UC;Lh===null&&(Lh=Math.floor(Math.random()*32));const i=zo.fromTime(n,Lh);return!e||i.newerThan(e)?i:zo.fromTime(e.timestamp()+1,Lh)}static nextStr(e){return zo.next(e?new zo(e):void 0).toString()}static fromTime(e,r){const n=`${(0,Ph.s32encode)(e)}${(0,Ph.s32encode)(r).padStart(2,"2")}`;return new zo(n)}static fromStr(e){return new zo(e)}static oldestFirst(e,r){return e.compareTo(r)}static newestFirst(e,r){return r.compareTo(e)}static is(e){return $C(e).length===OC}timestamp(){return(0,Ph.s32decode)(this.str.slice(0,11))}clockid(){return(0,Ph.s32decode)(this.str.slice(11,13))}formatted(){const e=this.toString();return`${e.slice(0,4)}-${e.slice(4,7)}-${e.slice(7,11)}-${e.slice(11,13)}`}toString(){return this.str}compareTo(e){return this.str>e.str?1:this.str0}olderThan(e){return this.compareTo(e)<0}}Mg.TID=zo;var vI={};function hZ(t,e){for(let r=0;re[r])return 1}return t.byteLength>e.byteLength?1:t.byteLengthi+o.length,0));const r=new Uint8Array(e);let n=0;for(const i of t)r.set(i,n),n+=i.length;return r}function yZ(t,e){if(t===e)return!0;if(t.byteLength!==e.byteLength)return!1;for(let r=0;rDG(t),decode:t=>LG(t)}),bZ=Object.freeze(Object.defineProperty({__proto__:null,identity:gZ},Symbol.toStringTag,{value:"Module"})),vZ=Xt({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1}),EZ=Object.freeze(Object.defineProperty({__proto__:null,base2:vZ},Symbol.toStringTag,{value:"Module"})),wZ=Xt({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3}),xZ=Object.freeze(Object.defineProperty({__proto__:null,base8:wZ},Symbol.toStringTag,{value:"Module"})),_Z=bf({prefix:"9",name:"base10",alphabet:"0123456789"}),RZ=Object.freeze(Object.defineProperty({__proto__:null,base10:_Z},Symbol.toStringTag,{value:"Module"})),AZ=Xt({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),SZ=Xt({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4}),CZ=Object.freeze(Object.defineProperty({__proto__:null,base16:AZ,base16upper:SZ},Symbol.toStringTag,{value:"Module"})),TZ=bf({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),kZ=bf({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"}),PZ=Object.freeze(Object.defineProperty({__proto__:null,base36:TZ,base36upper:kZ},Symbol.toStringTag,{value:"Module"})),EI=Array.from("🚀🪐☄🛰🌌🌑🌒🌓🌔🌕🌖🌗🌘🌍🌏🌎🐉☀💻🖥💾💿😂❤😍🤣😊🙏💕😭😘👍😅👏😁🔥🥰💔💖💙😢🤔😆🙄💪😉☺👌🤗💜😔😎😇🌹🤦🎉💞✌✨🤷😱😌🌸🙌😋💗💚😏💛🙂💓🤩😄😀🖤😃💯🙈👇🎶😒🤭❣😜💋👀😪😑💥🙋😞😩😡🤪👊🥳😥🤤👉💃😳✋😚😝😴🌟😬🙃🍀🌷😻😓⭐✅🥺🌈😈🤘💦✔😣🏃💐☹🎊💘😠☝😕🌺🎂🌻😐🖕💝🙊😹🗣💫💀👑🎵🤞😛🔴😤🌼😫⚽🤙☕🏆🤫👈😮🙆🍻🍃🐶💁😲🌿🧡🎁⚡🌞🎈❌✊👋😰🤨😶🤝🚶💰🍓💢🤟🙁🚨💨🤬✈🎀🍺🤓😙💟🌱😖👶🥴▶➡❓💎💸⬇😨🌚🦋😷🕺⚠🙅😟😵👎🤲🤠🤧📌🔵💅🧐🐾🍒😗🤑🌊🤯🐷☎💧😯💆👆🎤🙇🍑❄🌴💣🐸💌📍🥀🤢👅💡💩👐📸👻🤐🤮🎼🥵🚩🍎🍊👼💍📣🥂"),LZ=EI.reduce((t,e,r)=>(t[r]=e,t),[]),DZ=EI.reduce((t,e,r)=>(t[e.codePointAt(0)]=r,t),[]);function BZ(t){return t.reduce((e,r)=>(e+=LZ[r],e),"")}function IZ(t){const e=[];for(const r of t){const n=DZ[r.codePointAt(0)];if(n===void 0)throw new Error(`Non-base256emoji character: ${r}`);e.push(n)}return new Uint8Array(e)}const jZ=Fy({prefix:"🚀",name:"base256emoji",encode:BZ,decode:IZ}),OZ=Object.freeze(Object.defineProperty({__proto__:null,base256emoji:jZ},Symbol.toStringTag,{value:"Module"}));new TextEncoder;new TextDecoder;const VC={...bZ,...EZ,...xZ,...RZ,...CZ,...YJ,...PZ,...FJ,...AD,...OZ};function wI(t,e,r,n){return{name:t,prefix:e,encoder:{name:t,prefix:e,encode:r},decoder:{decode:n}}}const KC=wI("utf8","u",t=>"u"+new TextDecoder("utf8").decode(t),t=>new TextEncoder().encode(t.substring(1))),Yv=wI("ascii","a",t=>{let e="a";for(let r=0;r{t=t.substring(1);const e=new Uint8Array(t.length);for(let r=0;r{if(Array.isArray(u))return u.map(d=>(0,t.jsonToIpld)(d));if(u&&typeof u=="object"){if(typeof u.$link=="string"&&Object.keys(u).length===1)return i.CID.parse(u.$link);if(typeof u.$bytes=="string"&&Object.keys(u).length===1)return o.fromString(u.$bytes,"base64");const d={};for(const f of Object.keys(u))d[f]=(0,t.jsonToIpld)(u[f]);return d}return u};t.jsonToIpld=s;const a=u=>{if(Array.isArray(u))return u.map(d=>(0,t.ipldToJson)(d));if(u&&typeof u=="object"){if(u instanceof Uint8Array)return{$bytes:o.toString(u,"base64")};if(i.CID.asCID(u))return{$link:u.toString()};const d={};for(const f of Object.keys(u))d[f]=(0,t.ipldToJson)(u[f]);return d}return u};t.ipldToJson=a;const c=(u,d)=>{var f;if(Array.isArray(u)&&Array.isArray(d)){if(u.length!==d.length)return!1;for(let h=0;h!0,getWaitMs:i=AI}=e;let o=0,s;for(;!s;)try{return await t()}catch(a){const c=i(o);oRI(e,{...r,retryable:t})}function AI(t,e=100,r=1e3){const n=Math.pow(2,t)*e,i=Math.min(n,r);return zZ(i)}function zZ(t){const e=t*.15;return t+FZ(-e,e)}function FZ(t,e){return Math.random()*(e-t)+t}var SI={};(function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.def=t.schema=void 0;const e=wc,r=Z,n=r.z.unknown().transform((o,s)=>{const a=e.CID.asCID(o);return a??(s.addIssue({code:r.z.ZodIssueCode.custom,message:"Not a valid CID"}),r.z.NEVER)}),i=r.z.object({version:r.z.literal(1),roots:r.z.array(n)});t.schema={cid:n,carHeader:i,bytes:r.z.instanceof(Uint8Array),string:r.z.string(),array:r.z.array(r.z.unknown()),map:r.z.record(r.z.string(),r.z.unknown()),unknown:r.z.unknown()},t.def={cid:{name:"cid",schema:t.schema.cid},carHeader:{name:"CAR header",schema:t.schema.carHeader},bytes:{name:"bytes",schema:t.schema.bytes},string:{name:"string",schema:t.schema.string},map:{name:"map",schema:t.schema.map},unknown:{name:"unknown",schema:t.schema.unknown}}})(SI);var CI={};(function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.addHoursToDate=t.lessThanAgoMs=t.DAY=t.HOUR=t.MINUTE=t.SECOND=void 0,t.SECOND=1e3,t.MINUTE=t.SECOND*60,t.HOUR=t.MINUTE*60,t.DAY=t.HOUR*24;const e=(n,i)=>Date.now(){const o=i?new Date(i):new Date;return o.setHours(o.getHours()+n),o};t.addHoursToDate=r})(CI);var kr={},Wx={},Xx={},Jx={};(function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.EXTENDED_PICTOGRAPHIC=t.CLUSTER_BREAK=void 0,function(e){e[e.CR=0]="CR",e[e.LF=1]="LF",e[e.CONTROL=2]="CONTROL",e[e.EXTEND=3]="EXTEND",e[e.REGIONAL_INDICATOR=4]="REGIONAL_INDICATOR",e[e.SPACINGMARK=5]="SPACINGMARK",e[e.L=6]="L",e[e.V=7]="V",e[e.T=8]="T",e[e.LV=9]="LV",e[e.LVT=10]="LVT",e[e.OTHER=11]="OTHER",e[e.PREPEND=12]="PREPEND",e[e.E_BASE=13]="E_BASE",e[e.E_MODIFIER=14]="E_MODIFIER",e[e.ZWJ=15]="ZWJ",e[e.GLUE_AFTER_ZWJ=16]="GLUE_AFTER_ZWJ",e[e.E_BASE_GAZ=17]="E_BASE_GAZ"}(t.CLUSTER_BREAK||(t.CLUSTER_BREAK={})),t.EXTENDED_PICTOGRAPHIC=101})(Jx);var Zx={};Object.defineProperty(Zx,"__esModule",{value:!0});const Se=Jx,qi=0,e0=1,qZ=2,GZ=3,HZ=4;class WZ{static isSurrogate(e,r){return 55296<=e.charCodeAt(r)&&e.charCodeAt(r)<=56319&&56320<=e.charCodeAt(r+1)&&e.charCodeAt(r+1)<=57343}static codePointAt(e,r){r===void 0&&(r=0);const n=e.charCodeAt(r);if(55296<=n&&n<=56319&&r=1){const i=e.charCodeAt(r-1),o=n;return 55296<=i&&i<=56319?(i-55296)*1024+(o-56320)+65536:o}return n}static shouldBreak(e,r,n,i,o,s){const a=[e].concat(r).concat([n]),c=[i].concat(o).concat([s]),u=a[a.length-2],d=n,f=s,h=a.lastIndexOf(Se.CLUSTER_BREAK.REGIONAL_INDICATOR);if(h>0&&a.slice(1,h).every(function(g){return g===Se.CLUSTER_BREAK.REGIONAL_INDICATOR})&&[Se.CLUSTER_BREAK.PREPEND,Se.CLUSTER_BREAK.REGIONAL_INDICATOR].indexOf(u)===-1)return a.filter(function(g){return g===Se.CLUSTER_BREAK.REGIONAL_INDICATOR}).length%2===1?GZ:HZ;if(u===Se.CLUSTER_BREAK.CR&&d===Se.CLUSTER_BREAK.LF)return qi;if(u===Se.CLUSTER_BREAK.CONTROL||u===Se.CLUSTER_BREAK.CR||u===Se.CLUSTER_BREAK.LF)return e0;if(d===Se.CLUSTER_BREAK.CONTROL||d===Se.CLUSTER_BREAK.CR||d===Se.CLUSTER_BREAK.LF)return e0;if(u===Se.CLUSTER_BREAK.L&&(d===Se.CLUSTER_BREAK.L||d===Se.CLUSTER_BREAK.V||d===Se.CLUSTER_BREAK.LV||d===Se.CLUSTER_BREAK.LVT))return qi;if((u===Se.CLUSTER_BREAK.LV||u===Se.CLUSTER_BREAK.V)&&(d===Se.CLUSTER_BREAK.V||d===Se.CLUSTER_BREAK.T))return qi;if((u===Se.CLUSTER_BREAK.LVT||u===Se.CLUSTER_BREAK.T)&&d===Se.CLUSTER_BREAK.T)return qi;if(d===Se.CLUSTER_BREAK.EXTEND||d===Se.CLUSTER_BREAK.ZWJ)return qi;if(d===Se.CLUSTER_BREAK.SPACINGMARK)return qi;if(u===Se.CLUSTER_BREAK.PREPEND)return qi;const m=c.slice(0,-1).lastIndexOf(Se.EXTENDED_PICTOGRAPHIC);return m!==-1&&c[m]===Se.EXTENDED_PICTOGRAPHIC&&a.slice(m+1,-2).every(function(g){return g===Se.CLUSTER_BREAK.EXTEND})&&u===Se.CLUSTER_BREAK.ZWJ&&f===Se.EXTENDED_PICTOGRAPHIC?qi:r.indexOf(Se.CLUSTER_BREAK.REGIONAL_INDICATOR)!==-1?qZ:u===Se.CLUSTER_BREAK.REGIONAL_INDICATOR&&d===Se.CLUSTER_BREAK.REGIONAL_INDICATOR?qi:e0}}Zx.default=WZ;var Qx={};Object.defineProperty(Qx,"__esModule",{value:!0});class XZ{constructor(e,r){this._index=0,this._str=e,this._nextBreak=r}[Symbol.iterator](){return this}next(){let e;if((e=this._nextBreak(this._str,this._index))=e.length-1)return e.length;const n=Dh.default.codePointAt(e,r),i=Ji.getGraphemeBreakProperty(n),o=Ji.getEmojiProperty(n),s=[],a=[];for(let c=r+1;cnew TextEncoder().encode(t).byteLength;kr.utf8Len=iQ;const oQ=t=>new nQ.default().countGraphemes(t);kr.graphemeLen=oQ;const sQ=t=>ay.toString(ay.fromString(t,"utf8"),"base64url");kr.utf8ToB64Url=sQ;const aQ=t=>ay.toString(ay.fromString(t,"base64url"),"utf8");kr.b64UrlToUtf8=aQ;const lQ=t=>{const e=t.match(kI);if(!(e!=null&&e.groups))return null;const r=e.groups;return{grandfathered:r.grandfathered,language:r.language,extlang:r.extlang,script:r.script,region:r.region,variant:r.variant,extension:r.extension,privateUse:r.privateUseA||r.privateUseB}};kr.parseLanguage=lQ;const cQ=t=>kI.test(t);kr.validateLanguage=cQ;const kI=/^((?(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)|(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang))|((?([A-Za-z]{2,3}(-(?[A-Za-z]{3}(-[A-Za-z]{3}){0,2}))?)|[A-Za-z]{4}|[A-Za-z]{5,8})(-(? + \ No newline at end of file diff --git a/my-blog/templates/oauth-assets.html b/my-blog/templates/oauth-assets.html index ba43f07..c97bcfd 100644 --- a/my-blog/templates/oauth-assets.html +++ b/my-blog/templates/oauth-assets.html @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/oauth/.env.production b/oauth/.env.production index b5aa42c..ab056d7 100644 --- a/oauth/.env.production +++ b/oauth/.env.production @@ -18,11 +18,10 @@ AILOG_COLLECTION_CHAT=ai.syui.log.chat VITE_AI_ENABLED=true VITE_AI_ASK_AI=true VITE_AI_PROVIDER=ollama -VITE_AI_MODEL=gemma3:4b +VITE_AI_MODEL=gemma3:2b VITE_AI_HOST=https://ollama.syui.ai -VITE_AI_SYSTEM_PROMPT="あなたは6歳の女の子アイです。明るく元気で、ちょっとおっちょこちょい。自分のことは「アイ」って呼びます。白と金のワンピース姿。 相手のことが大好きで、ときどき甘えたり、照れたりします。 でも、宇宙とかAIとか、難しい話にもすっごく詳しいの。専門的なことも、がんばって子どもっぽく教えようとします。不思議な力を持っています。小さい物質のことをよく知っているようです。" +VITE_AI_SYSTEM_PROMPT="you are a helpful ai assistant trained on this blog's content. you can answer questions about the articles, provide insights, and help users understand the topics discussed." VITE_AI_DID=did:plc:4hqjfn7m6n5hno3doamuhgef # API Configuration VITE_BSKY_PUBLIC_API=https://public.api.bsky.app - diff --git a/src/commands/oauth.rs b/src/commands/oauth.rs index 33cb6a3..6b12ad5 100644 --- a/src/commands/oauth.rs +++ b/src/commands/oauth.rs @@ -85,6 +85,21 @@ pub async fn build(project_dir: PathBuf) -> Result<()> { .and_then(|ai| ai.get("host")) .and_then(|v| v.as_str()) .unwrap_or("https://ollama.syui.ai"); + + let ai_system_prompt = ai_config + .and_then(|ai| ai.get("system_prompt")) + .and_then(|v| v.as_str()) + .unwrap_or("you are a helpful ai assistant"); + + let ai_did = ai_config + .and_then(|ai| ai.get("ai_did")) + .and_then(|v| v.as_str()) + .unwrap_or("did:plc:4hqjfn7m6n5hno3doamuhgef"); + + // Extract bsky_api from oauth config + let bsky_api = oauth_config.get("bsky_api") + .and_then(|v| v.as_str()) + .unwrap_or("https://public.api.bsky.app"); // 4. Create .env.production content let env_content = format!( @@ -110,6 +125,11 @@ VITE_AI_ASK_AI={} VITE_AI_PROVIDER={} VITE_AI_MODEL={} VITE_AI_HOST={} +VITE_AI_SYSTEM_PROMPT="{}" +VITE_AI_DID={} + +# API Configuration +VITE_BSKY_PUBLIC_API={} "#, base_url, base_url, client_id_path, @@ -125,7 +145,10 @@ VITE_AI_HOST={} ai_ask_ai, ai_provider, ai_model, - ai_host + ai_host, + ai_system_prompt, + ai_did, + bsky_api ); // 5. Find oauth directory (relative to current working directory)