@minimalcorp/tsunagi 0.1.24 → 0.1.26
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/.next/standalone/apps/web/.next/BUILD_ID +1 -1
- package/.next/standalone/apps/web/.next/build-manifest.json +3 -3
- package/.next/standalone/apps/web/.next/prerender-manifest.json +3 -3
- package/.next/standalone/apps/web/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/index.html +1 -1
- package/.next/standalone/apps/web/.next/server/app/index.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/app/settings.html +1 -1
- package/.next/standalone/apps/web/.next/server/app/settings.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/settings.segments/_full.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/settings.segments/_index.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_03hz06e._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_0836rl_._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_0amxree._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/apps_web_src_app_settings_page_tsx_0i6itlb._.js +1 -1
- package/.next/standalone/apps/web/.next/server/middleware-build-manifest.js +3 -3
- package/.next/standalone/apps/web/.next/server/pages/404.html +1 -1
- package/.next/standalone/apps/web/.next/server/pages/500.html +1 -1
- package/.next/standalone/apps/web/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/apps/web/.next/static/chunks/{0y9ehkcn04ljq.js → 0.1pdl3yo~xet.js} +2 -2
- package/.next/standalone/apps/web/.next/static/chunks/001oo2jah4cv9.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/0nhpg19g1rl_7.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/164p.6qr5~-7x.js +1 -0
- package/dist/server/lib/voice-debug-log.d.ts +9 -0
- package/dist/server/lib/voice-debug-log.js +28 -0
- package/dist/server/routes/whisper.js +30 -5
- package/npm-shrinkwrap.json +25 -40
- package/package.json +1 -1
- package/.next/standalone/apps/web/.next/static/chunks/0~0s04z6h.rs..js +0 -1
- package/.next/standalone/apps/web/.next/static/chunks/12dmkv54xstku.js +0 -1
- package/.next/standalone/apps/web/.next/static/chunks/13ohhwsmmfexn.js +0 -1
- /package/.next/standalone/apps/web/.next/static/{gWwRKXTSig4Dz-gNeqxJy → 7jfNq7gWy6LmFypqM6QZf}/_buildManifest.js +0 -0
- /package/.next/standalone/apps/web/.next/static/{gWwRKXTSig4Dz-gNeqxJy → 7jfNq7gWy6LmFypqM6QZf}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/apps/web/.next/static/{gWwRKXTSig4Dz-gNeqxJy → 7jfNq7gWy6LmFypqM6QZf}/_ssgManifest.js +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
module.exports=[46058,(a,b,c)=>{"use strict";function d(a){if("function"!=typeof WeakMap)return null;var b=new WeakMap,c=new WeakMap;return(d=function(a){return a?c:b})(a)}c._=function(a,b){if(!b&&a&&a.__esModule)return a;if(null===a||"object"!=typeof a&&"function"!=typeof a)return{default:a};var c=d(b);if(c&&c.has(a))return c.get(a);var e={__proto__:null},f=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var g in a)if("default"!==g&&Object.prototype.hasOwnProperty.call(a,g)){var h=f?Object.getOwnPropertyDescriptor(a,g):null;h&&(h.get||h.set)?Object.defineProperty(e,g,h):e[g]=a[g]}return e.default=a,c&&c.set(a,e),e}},39118,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={DEFAULT_SEGMENT_KEY:function(){return l},NOT_FOUND_SEGMENT_KEY:function(){return m},PAGE_SEGMENT_KEY:function(){return k},addSearchParamsIfPageSegment:function(){return i},computeSelectedLayoutSegment:function(){return j},getSegmentValue:function(){return f},getSelectedLayoutSegmentPath:function(){return function a(b,c,d=!0,e=[]){let g;if(d)g=b[1][c];else{let a=b[1];g=a.children??Object.values(a)[0]}if(!g)return e;let h=f(g[0]);return!h||h.startsWith(k)?e:(e.push(h),a(g,c,!1,e))}},isGroupSegment:function(){return g},isParallelRouteSegment:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});function f(a){return Array.isArray(a)?a[1]:a}function g(a){return"("===a[0]&&a.endsWith(")")}function h(a){return a.startsWith("@")&&"@children"!==a}function i(a,b){if(a.includes(k)){let a=JSON.stringify(b);return"{}"!==a?k+"?"+a:k}return a}function j(a,b){if(!a||0===a.length)return null;let c="children"===b?a[0]:a[a.length-1];return c===l?null:c}let k="__PAGE__",l="__DEFAULT__",m="/_not-found"},57997,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={UnrecognizedActionError:function(){return f},unstable_isUnrecognizedActionError:function(){return g}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});class f extends Error{constructor(...a){super(...a),this.name="UnrecognizedActionError"}}function g(a){return!!(a&&"object"==typeof a&&a instanceof f)}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},75718,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ReadonlyURLSearchParams",{enumerable:!0,get:function(){return e}});class d extends Error{constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams")}}class e extends URLSearchParams{append(){throw new d}delete(){throw new d}set(){throw new d}sort(){throw new d}}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},15128,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"RedirectStatusCode",{enumerable:!0,get:function(){return e}});var d,e=((d={})[d.SeeOther=303]="SeeOther",d[d.TemporaryRedirect=307]="TemporaryRedirect",d[d.PermanentRedirect=308]="PermanentRedirect",d);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},11026,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={REDIRECT_ERROR_CODE:function(){return g},isRedirectError:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(15128),g="NEXT_REDIRECT";function h(a){if("object"!=typeof a||null===a||!("digest"in a)||"string"!=typeof a.digest)return!1;let b=a.digest.split(";"),[c,d]=b,e=b.slice(2,-2).join(";"),h=Number(b.at(-2));return c===g&&("replace"===d||"push"===d)&&"string"==typeof e&&!isNaN(h)&&h in f.RedirectStatusCode}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},48685,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={getRedirectError:function(){return i},getRedirectStatusCodeFromError:function(){return n},getRedirectTypeFromError:function(){return m},getURLFromRedirectError:function(){return l},permanentRedirect:function(){return k},redirect:function(){return j}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(15128),g=a.r(11026),h=a.r(20635).actionAsyncStorage;function i(a,b,c=f.RedirectStatusCode.TemporaryRedirect){let d=Object.defineProperty(Error(g.REDIRECT_ERROR_CODE),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return d.digest=`${g.REDIRECT_ERROR_CODE};${b};${a};${c};`,d}function j(a,b){throw i(a,b??=h?.getStore()?.isAction?"push":"replace",f.RedirectStatusCode.TemporaryRedirect)}function k(a,b="replace"){throw i(a,b,f.RedirectStatusCode.PermanentRedirect)}function l(a){return(0,g.isRedirectError)(a)?a.digest.split(";").slice(2,-2).join(";"):null}function m(a){if(!(0,g.isRedirectError)(a))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return a.digest.split(";",2)[1]}function n(a){if(!(0,g.isRedirectError)(a))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return Number(a.digest.split(";").at(-2))}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},8535,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={HTTPAccessErrorStatus:function(){return f},HTTP_ERROR_FALLBACK_ERROR_CODE:function(){return h},getAccessFallbackErrorTypeByStatus:function(){return k},getAccessFallbackHTTPStatus:function(){return j},isHTTPAccessFallbackError:function(){return i}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f={NOT_FOUND:404,FORBIDDEN:403,UNAUTHORIZED:401},g=new Set(Object.values(f)),h="NEXT_HTTP_ERROR_FALLBACK";function i(a){if("object"!=typeof a||null===a||!("digest"in a)||"string"!=typeof a.digest)return!1;let[b,c]=a.digest.split(";");return b===h&&g.has(Number(c))}function j(a){return Number(a.digest.split(";")[1])}function k(a){switch(a){case 401:return"unauthorized";case 403:return"forbidden";case 404:return"not-found";default:return}}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},28102,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"notFound",{enumerable:!0,get:function(){return f}});let d=a.r(8535),e=`${d.HTTP_ERROR_FALLBACK_ERROR_CODE};404`;function f(){let a=Object.defineProperty(Error(e),"__NEXT_ERROR_CODE",{value:"E1041",enumerable:!1,configurable:!0});throw a.digest=e,a}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},64177,(a,b,c)=>{"use strict";function d(){throw Object.defineProperty(Error("`forbidden()` is experimental and only allowed to be enabled when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E488",enumerable:!1,configurable:!0})}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"forbidden",{enumerable:!0,get:function(){return d}}),a.r(8535).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},88213,(a,b,c)=>{"use strict";function d(){throw Object.defineProperty(Error("`unauthorized()` is experimental and only allowed to be used when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E411",enumerable:!1,configurable:!0})}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unauthorized",{enumerable:!0,get:function(){return d}}),a.r(8535).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},88644,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"InvariantError",{enumerable:!0,get:function(){return d}});class d extends Error{constructor(a,b){super(`Invariant: ${a.endsWith(".")?a:a+"."} This is a bug in Next.js.`,b),this.name="InvariantError"}}},54427,(a,b,c)=>{"use strict";function d(){let a,b,c=new Promise((c,d)=>{a=c,b=d});return{resolve:a,reject:b,promise:c}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"createPromiseWithResolvers",{enumerable:!0,get:function(){return d}})},40656,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d,e={RenderStage:function(){return i},StagedRenderingController:function(){return j}};for(var f in e)Object.defineProperty(c,f,{enumerable:!0,get:e[f]});let g=a.r(88644),h=a.r(54427);var i=((d={})[d.Before=1]="Before",d[d.EarlyStatic=2]="EarlyStatic",d[d.Static=3]="Static",d[d.EarlyRuntime=4]="EarlyRuntime",d[d.Runtime=5]="Runtime",d[d.Dynamic=6]="Dynamic",d[d.Abandoned=7]="Abandoned",d);class j{constructor(a,b,c){this.abortSignal=a,this.abandonController=b,this.shouldTrackSyncIO=c,this.currentStage=1,this.syncInterruptReason=null,this.staticStageEndTime=1/0,this.runtimeStageEndTime=1/0,this.staticStageListeners=[],this.earlyRuntimeStageListeners=[],this.runtimeStageListeners=[],this.dynamicStageListeners=[],this.staticStagePromise=(0,h.createPromiseWithResolvers)(),this.earlyRuntimeStagePromise=(0,h.createPromiseWithResolvers)(),this.runtimeStagePromise=(0,h.createPromiseWithResolvers)(),this.dynamicStagePromise=(0,h.createPromiseWithResolvers)(),a&&a.addEventListener("abort",()=>{let{reason:b}=a;this.staticStagePromise.promise.catch(k),this.staticStagePromise.reject(b),this.earlyRuntimeStagePromise.promise.catch(k),this.earlyRuntimeStagePromise.reject(b),this.runtimeStagePromise.promise.catch(k),this.runtimeStagePromise.reject(b),this.dynamicStagePromise.promise.catch(k),this.dynamicStagePromise.reject(b)},{once:!0}),b&&b.signal.addEventListener("abort",()=>{this.abandonRender()},{once:!0})}onStage(a,b){if(this.currentStage>=a)b();else if(3===a)this.staticStageListeners.push(b);else if(4===a)this.earlyRuntimeStageListeners.push(b);else if(5===a)this.runtimeStageListeners.push(b);else if(6===a)this.dynamicStageListeners.push(b);else throw Object.defineProperty(new g.InvariantError(`Invalid render stage: ${a}`),"__NEXT_ERROR_CODE",{value:"E881",enumerable:!1,configurable:!0})}shouldTrackSyncInterrupt(){if(!this.shouldTrackSyncIO)return!1;switch(this.currentStage){case 1:case 5:case 6:case 7:default:return!1;case 2:case 3:case 4:return!0}}syncInterruptCurrentStageWithReason(a){if(1!==this.currentStage&&7!==this.currentStage){if(this.abandonController)return void this.abandonController.abort();if(this.abortSignal){this.syncInterruptReason=a,this.currentStage=7;return}switch(this.currentStage){case 2:case 3:case 4:this.syncInterruptReason=a,this.advanceStage(6);return;case 5:return}}}getSyncInterruptReason(){return this.syncInterruptReason}getStaticStageEndTime(){return this.staticStageEndTime}getRuntimeStageEndTime(){return this.runtimeStageEndTime}abandonRender(){let{currentStage:a}=this;switch(a){case 2:this.resolveStaticStage();case 3:this.resolveEarlyRuntimeStage();case 4:this.resolveRuntimeStage();case 5:this.currentStage=7;return}}advanceStage(a){if(a<=this.currentStage)return;let b=this.currentStage;if(this.currentStage=a,b<3&&a>=3&&this.resolveStaticStage(),b<4&&a>=4&&this.resolveEarlyRuntimeStage(),b<5&&a>=5&&(this.staticStageEndTime=performance.now()+performance.timeOrigin,this.resolveRuntimeStage()),b<6&&a>=6){this.runtimeStageEndTime=performance.now()+performance.timeOrigin,this.resolveDynamicStage();return}}resolveStaticStage(){let a=this.staticStageListeners;for(let b=0;b<a.length;b++)a[b]();a.length=0,this.staticStagePromise.resolve()}resolveEarlyRuntimeStage(){let a=this.earlyRuntimeStageListeners;for(let b=0;b<a.length;b++)a[b]();a.length=0,this.earlyRuntimeStagePromise.resolve()}resolveRuntimeStage(){let a=this.runtimeStageListeners;for(let b=0;b<a.length;b++)a[b]();a.length=0,this.runtimeStagePromise.resolve()}resolveDynamicStage(){let a=this.dynamicStageListeners;for(let b=0;b<a.length;b++)a[b]();a.length=0,this.dynamicStagePromise.resolve()}getStagePromise(a){switch(a){case 3:return this.staticStagePromise.promise;case 4:return this.earlyRuntimeStagePromise.promise;case 5:return this.runtimeStagePromise.promise;case 6:return this.dynamicStagePromise.promise;default:throw Object.defineProperty(new g.InvariantError(`Invalid render stage: ${a}`),"__NEXT_ERROR_CODE",{value:"E881",enumerable:!1,configurable:!0})}}waitForStage(a){return this.getStagePromise(a)}delayUntilStage(a,b,c){var d,e,f;let g,h=(d=this.getStagePromise(a),e=b,f=c,g=new Promise((a,b)=>{d.then(a.bind(null,f),b)}),void 0!==e&&(g.displayName=e),g);return this.abortSignal&&h.catch(k),h}}function k(){}},35710,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={delayUntilRuntimeStage:function(){return o},getRuntimeStage:function(){return n},isHangingPromiseRejectionError:function(){return g},makeDevtoolsIOAwarePromise:function(){return m},makeHangingPromise:function(){return k}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(40656);function g(a){return"object"==typeof a&&null!==a&&"digest"in a&&a.digest===h}let h="HANGING_PROMISE_REJECTION";class i extends Error{constructor(a,b){super(`During prerendering, ${b} rejects when the prerender is complete. Typically these errors are handled by React but if you move ${b} to a different context by using \`setTimeout\`, \`after\`, or similar functions you may observe this error and you should handle it in that context. This occurred at route "${a}".`),this.route=a,this.expression=b,this.digest=h}}let j=new WeakMap;function k(a,b,c){if(a.aborted)return Promise.reject(new i(b,c));{let d=new Promise((d,e)=>{let f=e.bind(null,new i(b,c)),g=j.get(a);if(g)g.push(f);else{let b=[f];j.set(a,b),a.addEventListener("abort",()=>{for(let a=0;a<b.length;a++)b[a]()},{once:!0})}});return d.catch(l),d}}function l(){}function m(a,b,c){return b.stagedRendering?b.stagedRendering.delayUntilStage(c,void 0,a):new Promise(b=>{setTimeout(()=>{b(a)},0)})}function n(a){return a.currentStage===f.RenderStage.EarlyStatic||a.currentStage===f.RenderStage.EarlyRuntime?f.RenderStage.EarlyRuntime:f.RenderStage.Runtime}function o(a,b){let{stagedRendering:c}=a;return c?c.waitForStage(n(c)).then(()=>b):b}},31101,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"isPostpone",{enumerable:!0,get:function(){return e}});let d=Symbol.for("react.postpone");function e(a){return"object"==typeof a&&null!==a&&a.$$typeof===d}},41997,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={BailoutToCSRError:function(){return g},isBailoutToCSRError:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f="BAILOUT_TO_CLIENT_SIDE_RENDERING";class g extends Error{constructor(a){super(`Bail out to client-side rendering: ${a}`),this.reason=a,this.digest=f}}function h(a){return"object"==typeof a&&null!==a&&"digest"in a&&a.digest===f}},77747,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"isNextRouterError",{enumerable:!0,get:function(){return f}});let d=a.r(8535),e=a.r(11026);function f(a){return(0,e.isRedirectError)(a)||(0,d.isHTTPAccessFallbackError)(a)}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},3326,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={DynamicServerError:function(){return g},isDynamicServerError:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f="DYNAMIC_SERVER_USAGE";class g extends Error{constructor(a){super(`Dynamic server usage: ${a}`),this.description=a,this.digest=f}}function h(a){return"object"==typeof a&&null!==a&&"digest"in a&&"string"==typeof a.digest&&a.digest===f}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},99392,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={StaticGenBailoutError:function(){return g},isStaticGenBailoutError:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f="NEXT_STATIC_GEN_BAILOUT";class g extends Error{constructor(...a){super(...a),this.code=f}}function h(a){return"object"==typeof a&&null!==a&&"code"in a&&a.code===f}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},86389,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={METADATA_BOUNDARY_NAME:function(){return f},OUTLET_BOUNDARY_NAME:function(){return h},ROOT_LAYOUT_BOUNDARY_NAME:function(){return i},VIEWPORT_BOUNDARY_NAME:function(){return g}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f="__next_metadata_boundary__",g="__next_viewport_boundary__",h="__next_outlet_boundary__",i="__next_root_layout_boundary__"},76383,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={atLeastOneTask:function(){return h},scheduleImmediate:function(){return g},scheduleOnNextTick:function(){return f},waitAtLeastOneReactRenderTask:function(){return i}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a=>{Promise.resolve().then(()=>{process.nextTick(a)})},g=a=>{setImmediate(a)};function h(){return new Promise(a=>g(a))}function i(){return new Promise(a=>setImmediate(a))}},21177,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"INSTANT_VALIDATION_BOUNDARY_NAME",{enumerable:!0,get:function(){return d}});let d="__next_instant_validation_boundary__"},54110,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d,e,f,g={DynamicHoleKind:function(){return $},Postpone:function(){return D},PreludeState:function(){return af},abortAndThrowOnSynchronousRequestDataAccess:function(){return C},abortOnSynchronousPlatformIOAccess:function(){return B},accessedDynamicData:function(){return L},annotateDynamicAccess:function(){return Q},consumeDynamicAccess:function(){return M},createDynamicTrackingState:function(){return u},createDynamicValidationState:function(){return v},createHangingInputAbortSignal:function(){return P},createInstantValidationState:function(){return _},createRenderInBrowserAbortSignal:function(){return O},formatDynamicAPIAccesses:function(){return N},getFirstDynamicReason:function(){return w},getNavigationDisallowedDynamicReasons:function(){return aj},getStaticShellDisallowedDynamicReasons:function(){return ai},isDynamicPostpone:function(){return G},isPrerenderInterruptedError:function(){return K},logDisallowedDynamicError:function(){return ag},markCurrentScopeAsDynamic:function(){return x},postponeWithTracking:function(){return E},throwIfDisallowedDynamic:function(){return ah},throwToInterruptStaticGeneration:function(){return y},trackAllowedDynamicAccess:function(){return Z},trackDynamicDataInDynamicRender:function(){return z},trackDynamicHoleInNavigation:function(){return aa},trackDynamicHoleInRuntimeShell:function(){return ac},trackDynamicHoleInStaticShell:function(){return ad},trackThrownErrorInNavigation:function(){return ab},useDynamicRouteParams:function(){return R},useDynamicSearchParams:function(){return S}};for(var h in g)Object.defineProperty(c,h,{enumerable:!0,get:g[h]});let i=(d=a.r(72131))&&d.__esModule?d:{default:d},j=a.r(3326),k=a.r(99392),l=a.r(32319),m=a.r(56704),n=a.r(35710),o=a.r(86389),p=a.r(76383),q=a.r(41997),r=a.r(88644),s=a.r(21177),t="function"==typeof i.default.unstable_postpone;function u(a){return{isDebugDynamicAccesses:a,dynamicAccesses:[],syncDynamicErrorWithStack:null}}function v(){return{hasSuspenseAboveBody:!1,hasDynamicMetadata:!1,dynamicMetadata:null,hasDynamicViewport:!1,hasAllowedDynamic:!1,dynamicErrors:[]}}function w(a){var b;return null==(b=a.dynamicAccesses[0])?void 0:b.expression}function x(a,b,c){if(b)switch(b.type){case"cache":case"unstable-cache":case"private-cache":return}if(!a.forceDynamic&&!a.forceStatic){if(a.dynamicShouldError)throw Object.defineProperty(new k.StaticGenBailoutError(`Route ${a.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${c}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E553",enumerable:!1,configurable:!0});if(b)switch(b.type){case"prerender-ppr":return E(a.route,c,b.dynamicTracking);case"prerender-legacy":b.revalidate=0;let d=Object.defineProperty(new j.DynamicServerError(`Route ${a.route} couldn't be rendered statically because it used ${c}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`),"__NEXT_ERROR_CODE",{value:"E550",enumerable:!1,configurable:!0});throw a.dynamicUsageDescription=c,a.dynamicUsageStack=d.stack,d}}}function y(a,b,c){let d=Object.defineProperty(new j.DynamicServerError(`Route ${b.route} couldn't be rendered statically because it used \`${a}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`),"__NEXT_ERROR_CODE",{value:"E558",enumerable:!1,configurable:!0});throw c.revalidate=0,b.dynamicUsageDescription=a,b.dynamicUsageStack=d.stack,d}function z(a){switch(a.type){case"cache":case"unstable-cache":case"private-cache":return}}function A(a,b,c){let d=J(`Route ${a} needs to bail out of prerendering at this point because it used ${b}.`);c.controller.abort(d);let e=c.dynamicTracking;e&&e.dynamicAccesses.push({stack:e.isDebugDynamicAccesses?Error().stack:void 0,expression:b})}function B(a,b,c,d){let e=d.dynamicTracking;A(a,b,d),e&&null===e.syncDynamicErrorWithStack&&(e.syncDynamicErrorWithStack=c)}function C(a,b,c,d){if(!1===d.controller.signal.aborted){A(a,b,d);let e=d.dynamicTracking;e&&null===e.syncDynamicErrorWithStack&&(e.syncDynamicErrorWithStack=c)}throw J(`Route ${a} needs to bail out of prerendering at this point because it used ${b}.`)}function D({reason:a,route:b}){let c=l.workUnitAsyncStorage.getStore();E(b,a,c&&"prerender-ppr"===c.type?c.dynamicTracking:null)}function E(a,b,c){(function(){if(!t)throw Object.defineProperty(Error("Invariant: React.unstable_postpone is not defined. This suggests the wrong version of React was loaded. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E224",enumerable:!1,configurable:!0})})(),c&&c.dynamicAccesses.push({stack:c.isDebugDynamicAccesses?Error().stack:void 0,expression:b}),i.default.unstable_postpone(F(a,b))}function F(a,b){return`Route ${a} needs to bail out of prerendering at this point because it used ${b}. React throws this special object to indicate where. It should not be caught by your own try/catch. Learn more: https://nextjs.org/docs/messages/ppr-caught-error`}function G(a){return"object"==typeof a&&null!==a&&"string"==typeof a.message&&H(a.message)}function H(a){return a.includes("needs to bail out of prerendering at this point because it used")&&a.includes("Learn more: https://nextjs.org/docs/messages/ppr-caught-error")}if(!1===H(F("%%%","^^^")))throw Object.defineProperty(Error("Invariant: isDynamicPostpone misidentified a postpone reason. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E296",enumerable:!1,configurable:!0});let I="NEXT_PRERENDER_INTERRUPTED";function J(a){let b=Object.defineProperty(Error(a),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return b.digest=I,b}function K(a){return"object"==typeof a&&null!==a&&a.digest===I&&"name"in a&&"message"in a&&a instanceof Error}function L(a){return a.length>0}function M(a,b){return a.dynamicAccesses.push(...b.dynamicAccesses),a.dynamicAccesses}function N(a){return a.filter(a=>"string"==typeof a.stack&&a.stack.length>0).map(({expression:a,stack:b})=>(b=b.split("\n").slice(4).filter(a=>!(a.includes("node_modules/next/")||a.includes(" (<anonymous>)")||a.includes(" (node:"))).join("\n"),`Dynamic API Usage Debug - ${a}:
|
|
2
2
|
${b}`))}function O(){let a=new AbortController;return a.abort(Object.defineProperty(new q.BailoutToCSRError("Render in Browser"),"__NEXT_ERROR_CODE",{value:"E721",enumerable:!1,configurable:!0})),a.signal}function P(a){switch(a.type){case"prerender":case"prerender-runtime":let b=new AbortController;if(a.cacheSignal)a.cacheSignal.inputReady().then(()=>{b.abort()});else if("prerender-runtime"===a.type&&a.stagedRendering){let{stagedRendering:c}=a;c.waitForStage((0,n.getRuntimeStage)(c)).then(()=>(0,p.scheduleOnNextTick)(()=>b.abort()))}else(0,p.scheduleOnNextTick)(()=>b.abort());return b.signal;case"prerender-client":case"validation-client":case"prerender-ppr":case"prerender-legacy":case"request":case"cache":case"private-cache":case"unstable-cache":case"generate-static-params":return}}function Q(a,b){let c=b.dynamicTracking;c&&c.dynamicAccesses.push({stack:c.isDebugDynamicAccesses?Error().stack:void 0,expression:a})}function R(a){let b=m.workAsyncStorage.getStore(),c=l.workUnitAsyncStorage.getStore();if(b&&c)switch(c.type){case"prerender-client":case"prerender":{let d=c.fallbackRouteParams;d&&d.size>0&&i.default.use((0,n.makeHangingPromise)(c.renderSignal,b.route,a));break}case"prerender-ppr":{let d=c.fallbackRouteParams;if(d&&d.size>0)return E(b.route,a,c.dynamicTracking);break}case"validation-client":case"prerender-legacy":case"request":case"unstable-cache":break;case"prerender-runtime":throw Object.defineProperty(new r.InvariantError(`\`${a}\` was called during a runtime prerender. Next.js should be preventing ${a} from being included in server components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E771",enumerable:!1,configurable:!0});case"cache":case"private-cache":throw Object.defineProperty(new r.InvariantError(`\`${a}\` was called inside a cache scope. Next.js should be preventing ${a} from being included in server components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E745",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(new r.InvariantError(`\`${a}\` was called in \`generateStaticParams\`. Next.js should be preventing ${a} from being included in server component files statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1130",enumerable:!1,configurable:!0})}}function S(a){let b=m.workAsyncStorage.getStore(),c=l.workUnitAsyncStorage.getStore();if(b)switch(!c&&(0,l.throwForMissingRequestStore)(a),c.type){case"validation-client":case"request":return;case"prerender-client":i.default.use((0,n.makeHangingPromise)(c.renderSignal,b.route,a));break;case"prerender-legacy":case"prerender-ppr":if(b.forceStatic)return;throw Object.defineProperty(new q.BailoutToCSRError(a),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});case"prerender":case"prerender-runtime":throw Object.defineProperty(new r.InvariantError(`\`${a}\` was called from a Server Component. Next.js should be preventing ${a} from being included in server components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E795",enumerable:!1,configurable:!0});case"cache":case"unstable-cache":case"private-cache":throw Object.defineProperty(new r.InvariantError(`\`${a}\` was called inside a cache scope. Next.js should be preventing ${a} from being included in server components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E745",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(new r.InvariantError(`\`${a}\` was called in \`generateStaticParams\`. Next.js should be preventing ${a} from being included in server component files statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1130",enumerable:!1,configurable:!0})}}let T=/\n\s+at Suspense \(<anonymous>\)/,U=RegExp(`\\n\\s+at Suspense \\(<anonymous>\\)(?:(?!\\n\\s+at (?:body|div|main|section|article|aside|header|footer|nav|form|p|span|h1|h2|h3|h4|h5|h6) \\(<anonymous>\\))[\\s\\S])*?\\n\\s+at ${o.ROOT_LAYOUT_BOUNDARY_NAME} \\([^\\n]*\\)`),V=RegExp(`\\n\\s+at ${o.METADATA_BOUNDARY_NAME}[\\n\\s]`),W=RegExp(`\\n\\s+at ${o.VIEWPORT_BOUNDARY_NAME}[\\n\\s]`),X=RegExp(`\\n\\s+at ${o.OUTLET_BOUNDARY_NAME}[\\n\\s]`),Y=RegExp(`\\n\\s+at ${s.INSTANT_VALIDATION_BOUNDARY_NAME}[\\n\\s]`);function Z(a,b,c,d){if(!X.test(b)){if(V.test(b)){c.hasDynamicMetadata=!0;return}if(W.test(b)){c.hasDynamicViewport=!0;return}if(U.test(b)){c.hasAllowedDynamic=!0,c.hasSuspenseAboveBody=!0;return}else if(T.test(b)){c.hasAllowedDynamic=!0;return}else{if(d.syncDynamicErrorWithStack)return void c.dynamicErrors.push(d.syncDynamicErrorWithStack);let e=ae(Object.defineProperty(Error(`Route "${a.route}": Uncached data was accessed outside of <Suspense>. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/blocking-route`),"__NEXT_ERROR_CODE",{value:"E1079",enumerable:!1,configurable:!0}),b,null);return void c.dynamicErrors.push(e)}}}var $=((e={})[e.Runtime=1]="Runtime",e[e.Dynamic=2]="Dynamic",e);function _(a){return{hasDynamicMetadata:!1,hasAllowedClientDynamicAboveBoundary:!1,dynamicMetadata:null,hasDynamicViewport:!1,hasAllowedDynamic:!1,dynamicErrors:[],validationPreventingErrors:[],thrownErrorsOutsideBoundary:[],createInstantStack:a}}function aa(a,b,c,d,e,f){if(X.test(b))return;if(V.test(b)){let d=ae(Object.defineProperty(Error(`Route "${a.route}": ${1===e?"Runtime data such as `cookies()`, `headers()`, `params`, or `searchParams` was accessed inside `generateMetadata` or you have file-based metadata such as icons that depend on dynamic params segments.":"Uncached data or `connection()` was accessed inside `generateMetadata`."} Except for this instance, the page would have been entirely prerenderable which may have been the intended behavior. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`),"__NEXT_ERROR_CODE",{value:"E1076",enumerable:!1,configurable:!0}),b,c.createInstantStack);c.dynamicMetadata=d;return}if(W.test(b)){let d=ae(Object.defineProperty(Error(`Route "${a.route}": ${1===e?"Runtime data such as `cookies()`, `headers()`, `params`, or `searchParams` was accessed inside `generateViewport`.":"Uncached data or `connection()` was accessed inside `generateViewport`."} This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`),"__NEXT_ERROR_CODE",{value:"E1086",enumerable:!1,configurable:!0}),b,c.createInstantStack);c.dynamicErrors.push(d);return}let g=Y.exec(b);if(g){let a=T.exec(b);if(a&&a.index<g.index){c.hasAllowedDynamic=!0;return}}else if(f.expectedIds.size===f.renderedIds.size){c.hasAllowedClientDynamicAboveBoundary=!0,c.hasAllowedDynamic=!0;return}else{let d=ae(Object.defineProperty(Error(`Route "${a.route}": Could not validate \`unstable_instant\` because a Client Component in a parent segment prevented the page from rendering.`),"__NEXT_ERROR_CODE",{value:"E1082",enumerable:!1,configurable:!0}),b,c.createInstantStack);c.validationPreventingErrors.push(d);return}if(d.syncDynamicErrorWithStack){let a=d.syncDynamicErrorWithStack;null!==c.createInstantStack&&void 0===a.cause&&(a.cause=c.createInstantStack()),c.dynamicErrors.push(a);return}let h=ae(Object.defineProperty(Error(`Route "${a.route}": ${1===e?"Runtime data such as `cookies()`, `headers()`, `params`, or `searchParams` was accessed outside of `<Suspense>`.":"Uncached data or `connection()` was accessed outside of `<Suspense>`."} This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/blocking-route`),"__NEXT_ERROR_CODE",{value:"E1078",enumerable:!1,configurable:!0}),b,c.createInstantStack);c.dynamicErrors.push(h)}function ab(a,b,c,d){let e=Y.exec(d);if(e){let f=T.exec(d);if(f&&f.index<e.index)return;let g=ae(Object.defineProperty(Error(`Route "${a.route}": Could not validate \`unstable_instant\` because an error prevented the target segment from rendering.`,{cause:c}),"__NEXT_ERROR_CODE",{value:"E1112",enumerable:!1,configurable:!0}),d,null);b.validationPreventingErrors.push(g)}else{let a=ae(Object.defineProperty(Error("An error occurred while attempting to validate instant UI. This error may be preventing the validation from completing.",{cause:c}),"__NEXT_ERROR_CODE",{value:"E1118",enumerable:!1,configurable:!0}),d,null);b.thrownErrorsOutsideBoundary.push(a)}}function ac(a,b,c,d){if(X.test(b))return;if(V.test(b)){c.dynamicMetadata=ae(Object.defineProperty(Error(`Route "${a.route}": Uncached data or \`connection()\` was accessed inside \`generateMetadata\`. Except for this instance, the page would have been entirely prerenderable which may have been the intended behavior. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`),"__NEXT_ERROR_CODE",{value:"E1080",enumerable:!1,configurable:!0}),b,null);return}if(W.test(b)){let d=ae(Object.defineProperty(Error(`Route "${a.route}": Uncached data or \`connection()\` was accessed inside \`generateViewport\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`),"__NEXT_ERROR_CODE",{value:"E1077",enumerable:!1,configurable:!0}),b,null);c.dynamicErrors.push(d);return}if(U.test(b)){c.hasAllowedDynamic=!0,c.hasSuspenseAboveBody=!0;return}if(T.test(b)){c.hasAllowedDynamic=!0;return}else if(d.syncDynamicErrorWithStack)return void c.dynamicErrors.push(d.syncDynamicErrorWithStack);let e=ae(Object.defineProperty(Error(`Route "${a.route}": Uncached data or \`connection()\` was accessed outside of \`<Suspense>\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/blocking-route`),"__NEXT_ERROR_CODE",{value:"E1084",enumerable:!1,configurable:!0}),b,null);c.dynamicErrors.push(e)}function ad(a,b,c,d){if(!X.test(b)){if(V.test(b)){c.dynamicMetadata=ae(Object.defineProperty(Error(`Route "${a.route}": Runtime data such as \`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` was accessed inside \`generateMetadata\` or you have file-based metadata such as icons that depend on dynamic params segments. Except for this instance, the page would have been entirely prerenderable which may have been the intended behavior. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`),"__NEXT_ERROR_CODE",{value:"E1085",enumerable:!1,configurable:!0}),b,null);return}if(W.test(b)){let d=ae(Object.defineProperty(Error(`Route "${a.route}": Runtime data such as \`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` was accessed inside \`generateViewport\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`),"__NEXT_ERROR_CODE",{value:"E1081",enumerable:!1,configurable:!0}),b,null);c.dynamicErrors.push(d);return}if(U.test(b)){c.hasAllowedDynamic=!0,c.hasSuspenseAboveBody=!0;return}else if(T.test(b)){c.hasAllowedDynamic=!0;return}else{if(d.syncDynamicErrorWithStack)return void c.dynamicErrors.push(d.syncDynamicErrorWithStack);let e=ae(Object.defineProperty(Error(`Route "${a.route}": Runtime data such as \`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` was accessed outside of \`<Suspense>\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/blocking-route`),"__NEXT_ERROR_CODE",{value:"E1083",enumerable:!1,configurable:!0}),b,null);return void c.dynamicErrors.push(e)}}}function ae(a,b,c){return null!==c&&(a.cause=c()),a.stack=a.name+": "+a.message+b,a}var af=((f={})[f.Full=0]="Full",f[f.Empty=1]="Empty",f[f.Errored=2]="Errored",f);function ag(a,b){console.error(b),console.error(`To get a more detailed stack trace and pinpoint the issue, try one of the following:
|
|
3
3
|
- Start the app in development mode by running \`next dev\`, then open "${a.route}" in your browser to investigate the error.
|
|
4
|
-
- Rerun the production build with \`next build --debug-prerender\` to generate better stack traces.`)}function ah(a,b,c,d){if(d.syncDynamicErrorWithStack)throw ag(a,d.syncDynamicErrorWithStack),new k.StaticGenBailoutError;if(0!==b){if(c.hasSuspenseAboveBody)return;let d=c.dynamicErrors;if(d.length>0){for(let b=0;b<d.length;b++)ag(a,d[b]);throw new k.StaticGenBailoutError}if(c.hasDynamicViewport)throw console.error(`Route "${a.route}" has a \`generateViewport\` that depends on Request data (\`cookies()\`, etc...) or uncached external data (\`fetch(...)\`, etc...) without explicitly allowing fully dynamic rendering. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`),new k.StaticGenBailoutError;if(1===b)throw console.error(`Route "${a.route}" did not produce a static shell and Next.js was unable to determine a reason. This is a bug in Next.js.`),new k.StaticGenBailoutError}else if(!1===c.hasAllowedDynamic&&c.hasDynamicMetadata)throw console.error(`Route "${a.route}" has a \`generateMetadata\` that depends on Request data (\`cookies()\`, etc...) or uncached external data (\`fetch(...)\`, etc...) when the rest of the route does not. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`),new k.StaticGenBailoutError}function ai(a,b,c,d){if(d||c.hasSuspenseAboveBody)return[];if(0!==b){let d=c.dynamicErrors;if(d.length>0)return d;if(1===b)return[Object.defineProperty(new r.InvariantError(`Route "${a.route}" did not produce a static shell and Next.js was unable to determine a reason.`),"__NEXT_ERROR_CODE",{value:"E936",enumerable:!1,configurable:!0})]}else if(!1===c.hasAllowedDynamic&&0===c.dynamicErrors.length&&c.dynamicMetadata)return[c.dynamicMetadata];return[]}function aj(a,b,c,d,e){if(d){let{missingSampleErrors:a}=d;if(a.length>0)return a}let{validationPreventingErrors:f}=c;if(f.length>0)return f;if(e.renderedIds.size<e.expectedIds.size){let{thrownErrorsOutsideBoundary:b,createInstantStack:d}=c;if(0===b.length){let b=`Route "${a.route}": Could not validate \`unstable_instant\` because the target segment was prevented from rendering for an unknown reason.`,c=null!==d?d():Error();return c.name="Error",c.message=b,[c]}if(1===b.length){let c=`Route "${a.route}": Could not validate \`unstable_instant\` because the target segment was prevented from rendering, likely due to the following error.`,e=null!==d?d():Error();return e.name="Error",e.message=c,[e,b[0]]}{let c=`Route "${a.route}": Could not validate \`unstable_instant\` because the target segment was prevented from rendering, likely due to one of the following errors.`,e=null!==d?d():Error();return e.name="Error",e.message=c,[e,...b]}}if(0!==b){let d=c.dynamicErrors;if(d.length>0)return d;if(1===b)return c.hasAllowedClientDynamicAboveBoundary?[]:[Object.defineProperty(new r.InvariantError(`Route "${a.route}" failed to render during instant validation and Next.js was unable to determine a reason.`),"__NEXT_ERROR_CODE",{value:"E1055",enumerable:!1,configurable:!0})]}else{let a=c.dynamicErrors;if(a.length>0)return a;if(!1===c.hasAllowedDynamic&&c.dynamicMetadata)return[c.dynamicMetadata]}return[]}},44753,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unstable_rethrow",{enumerable:!0,get:function(){return function a(b){if((0,g.isNextRouterError)(b)||(0,f.isBailoutToCSRError)(b)||(0,i.isDynamicServerError)(b)||(0,h.isDynamicPostpone)(b)||(0,e.isPostpone)(b)||(0,d.isHangingPromiseRejectionError)(b)||(0,h.isPrerenderInterruptedError)(b))throw b;b instanceof Error&&"cause"in b&&a(b.cause)}}});let d=a.r(35710),e=a.r(31101),f=a.r(41997),g=a.r(77747),h=a.r(54110),i=a.r(3326);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},47083,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unstable_rethrow",{enumerable:!0,get:function(){return d}});let d=a.r(44753).unstable_rethrow;("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},21066,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={ReadonlyURLSearchParams:function(){return f.ReadonlyURLSearchParams},RedirectType:function(){return m},forbidden:function(){return i.forbidden},notFound:function(){return h.notFound},permanentRedirect:function(){return g.permanentRedirect},redirect:function(){return g.redirect},unauthorized:function(){return j.unauthorized},unstable_isUnrecognizedActionError:function(){return l},unstable_rethrow:function(){return k.unstable_rethrow}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(75718),g=a.r(48685),h=a.r(28102),i=a.r(64177),j=a.r(88213),k=a.r(47083);function l(){throw Object.defineProperty(Error("`unstable_isUnrecognizedActionError` can only be used on the client."),"__NEXT_ERROR_CODE",{value:"E776",enumerable:!1,configurable:!0})}let m={push:"push",replace:"replace"};("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},74137,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={ReadonlyURLSearchParams:function(){return h.ReadonlyURLSearchParams},RedirectType:function(){return l.RedirectType},ServerInsertedHTMLContext:function(){return j.ServerInsertedHTMLContext},forbidden:function(){return l.forbidden},notFound:function(){return l.notFound},permanentRedirect:function(){return l.permanentRedirect},redirect:function(){return l.redirect},unauthorized:function(){return l.unauthorized},unstable_isUnrecognizedActionError:function(){return k.unstable_isUnrecognizedActionError},unstable_rethrow:function(){return l.unstable_rethrow},useParams:function(){return u},usePathname:function(){return s},useRouter:function(){return t},useSearchParams:function(){return r},useSelectedLayoutSegment:function(){return w},useSelectedLayoutSegments:function(){return v},useServerInsertedHTML:function(){return j.useServerInsertedHTML}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(46058)._(a.r(72131)),g=a.r(9270),h=a.r(36313),i=a.r(39118),j=a.r(18341),k=a.r(57997),l=a.r(21066),m=a.r(54110).useDynamicRouteParams,n=a.r(54110).useDynamicSearchParams,{instrumentParamsForClientValidation:o,instrumentSearchParamsForClientValidation:p,expectCompleteParamsInClientValidation:q}={};function r(){n?.("useSearchParams()");let a=(0,f.useContext)(h.SearchParamsContext);return(0,f.useMemo)(()=>a?new h.ReadonlyURLSearchParams(a):null,[a])}function s(){return m?.("usePathname()"),(0,f.useContext)(h.PathnameContext)}function t(){let a=(0,f.useContext)(g.AppRouterContext);if(null===a)throw Object.defineProperty(Error("invariant expected app router to be mounted"),"__NEXT_ERROR_CODE",{value:"E238",enumerable:!1,configurable:!0});return a}function u(){return m?.("useParams()"),(0,f.useContext)(h.PathParamsContext)}function v(a="children"){m?.("useSelectedLayoutSegments()");let b=(0,f.useContext)(g.LayoutRouterContext);return b?(0,i.getSelectedLayoutSegmentPath)(b.parentTree,a):null}function w(a="children"){m?.("useSelectedLayoutSegment()"),(0,f.useContext)(h.NavigationPromisesContext);let b=v(a);return(0,i.computeSelectedLayoutSegment)(b,a)}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},50944,(a,b,c)=>{b.exports=a.r(74137)},33441,34157,a=>{"use strict";let b=(0,a.i(60137).default)("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);a.s(["default",0,b],34157),a.s(["Check",0,b],33441)},67060,96221,a=>{"use strict";var b=a.i(87924),c=a.i(4650);a.s(["Loader2",()=>c.default],96221);var c=c;a.s(["LoadingSpinner",0,function({size:a="md",message:d}){return(0,b.jsxs)("div",{className:"flex flex-col items-center justify-center gap-3",children:[(0,b.jsx)(c.default,{className:`${{sm:"w-4 h-4",md:"w-8 h-8",lg:"w-12 h-12"}[a]} text-primary animate-spin`}),d&&(0,b.jsx)("p",{className:"text-sm text-muted-foreground",children:d})]})}],67060)},28503,67669,52034,a=>{"use strict";var b,c=a.i(87924),d=a.i(72131);a.s([],7774),a.i(7774);var e=a.i(71812),f=a.i(21376),g=a.i(37388);let h=((b={}).disabled="data-disabled",b.valid="data-valid",b.invalid="data-invalid",b.touched="data-touched",b.dirty="data-dirty",b.filled="data-filled",b.focused="data-focused",b),i={badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valid:null,valueMissing:!1},j={valid:null,touched:!1,dirty:!1,filled:!1,focused:!1},k={disabled:!1,...j},l={valid:a=>null===a?null:a?{[h.valid]:""}:{[h.invalid]:""}},m=d.createContext({invalid:void 0,name:void 0,validityData:{state:i,errors:[],error:"",value:"",initialValue:null},setValidityData:g.NOOP,disabled:void 0,touched:j.touched,setTouched:g.NOOP,dirty:j.dirty,setDirty:g.NOOP,filled:j.filled,setFilled:g.NOOP,focused:j.focused,setFocused:g.NOOP,validate:()=>null,validationMode:"onSubmit",validationDebounceTime:0,shouldValidateOnChange:()=>!1,state:k,markedDirtyRef:{current:!1},validation:{getValidationProps:(a=g.EMPTY_OBJECT)=>a,getInputValidationProps:(a=g.EMPTY_OBJECT)=>a,inputRef:{current:null},commit:async()=>{}}});function n(a=!0){let b=d.useContext(m);if(b.setValidityData===g.NOOP&&!a)throw Error((0,f.default)(28));return b}let o=d.createContext({legendId:void 0,setLegendId:()=>{},disabled:void 0}),p=d.createContext({formRef:{current:{fields:new Map}},errors:{},clearErrors:g.NOOP,validationMode:"onSubmit",submitAttemptedRef:{current:!1}});function q(){return d.useContext(p)}var r=a.i(95337),s=a.i(84991),t=a.i(98134);let u=d.createContext({controlId:void 0,registerControlId:g.NOOP,labelId:void 0,setLabelId:g.NOOP,messageIds:[],setMessageIds:g.NOOP,getDescriptionProps:a=>a});function v(){return d.useContext(u)}let w=function(a){let b=(0,t.useBaseUiId)(),f=void 0===a.controlId?b:a.controlId,[g,h]=d.useState(f),[i,j]=d.useState(a.labelId),[k,l]=d.useState([]),m=(0,r.useRefWithInit)(()=>new Map),{messageIds:n}=v(),o=(0,e.useStableCallback)((a,b)=>{let c=m.current;void 0===b?c.delete(a):(c.set(a,b),h(a=>{let b;if(0!==c.size){for(let d of c.values()){if(void 0!==a&&d===a)return a;void 0===b&&(b=d)}return b}}))}),p=d.useCallback(a=>(0,s.mergeProps)({"aria-describedby":n.concat(k).join(" ")||void 0},a),[n,k]),q=d.useMemo(()=>({controlId:g,registerControlId:o,labelId:i,setLabelId:j,messageIds:k,setMessageIds:l,getDescriptionProps:p}),[g,o,i,j,k,l,p]);return(0,c.jsx)(u.Provider,{value:q,children:a.children})};var x=a.i(2840),y=a.i(76093);function z(a,b){return{...a,state:{...a.state,valid:!b&&a.state.valid}}}let A=Object.keys(i),B=d.forwardRef(function(a,b){let{errors:h,validationMode:j,submitAttemptedRef:k}=q(),{render:n,className:p,validate:r,validationDebounceTime:t=0,validationMode:u=j,name:w,disabled:B=!1,invalid:C,dirty:D,touched:E,actionsRef:F,...G}=a,{disabled:H}=function(a=!1){let b=d.useContext(o);if(!b&&!a)throw Error((0,f.default)(86));return b}(),I=(0,e.useStableCallback)(r||(()=>null)),J=H||B,[K,L]=d.useState(!1),[M,N]=d.useState(!1),[O,P]=d.useState(!1),[Q,R]=d.useState(!1),S=D??M,T=E??K,U=d.useRef(!1),V=(0,e.useStableCallback)(a=>{void 0===D&&(a&&(U.current=!0),N(a))}),W=(0,e.useStableCallback)(a=>{void 0===E&&L(a)}),X=(0,e.useStableCallback)(()=>"onChange"===u||"onSubmit"===u&&k.current),Y=!!w&&Object.hasOwn(h,w)&&void 0!==h[w],Z=!0===C||Y,[$,_]=d.useState({state:i,error:"",errors:[],value:null,initialValue:null}),aa=!Z&&$.state.valid,ab=d.useMemo(()=>({disabled:J,touched:T,dirty:S,valid:aa,filled:O,focused:Q}),[J,T,S,aa,O,Q]),ac=function(a){let{formRef:b,clearErrors:c}=q(),{setValidityData:f,validate:h,validityData:j,validationDebounceTime:k,invalid:l,markedDirtyRef:m,state:n,name:o,shouldValidateOnChange:p}=a,{controlId:r,getDescriptionProps:t}=v(),u=(0,y.useTimeout)(),w=d.useRef(null),x=(0,e.useStableCallback)(async(a,c=!1)=>{let d,e=w.current;if(!e)return;if(c){if(!1!==n.valid)return;let c=e.validity;if(!c.valueMissing){let c={value:a,state:{...i,valid:!0},error:"",errors:[],initialValue:j.initialValue};if(e.setCustomValidity(""),r){let a=b.current.fields.get(r);a&&b.current.fields.set(r,{...a,...z(c,!1)})}f(c);return}let d=A.reduce((a,b)=>(a[b]=c[b],a),{});if(!d.valid&&!function(a){if(!a||a.valid||!a.valueMissing)return!1;let b=!1;for(let c of A)"valid"!==c&&("valueMissing"===c&&(b=a[c]),a[c]&&(b=!1));return b}(d))return}u.clear();let g=null,k=[],o=function(a){let b=A.reduce((b,c)=>(b[c]=a.validity[c],b),{}),c=!1;for(let a of A)if("valid"!==a){if("valueMissing"===a&&b[a])c=!0;else if(b[a])return b}return c&&!m.current&&(b.valid=!0,b.valueMissing=!1),b}(e),q=p();if(e.validationMessage&&!q)d=e.validationMessage,k=[e.validationMessage];else{let c=h(a,Array.from(b.current.fields.values()).reduce((a,b)=>(b.name&&(a[b.name]=b.getValue()),a),{}));null!==(g="object"==typeof c&&null!==c&&"then"in c?await c:c)?(o.valid=!1,o.customError=!0,Array.isArray(g)?(k=g,e.setCustomValidity(g.join("\n"))):g&&(k=[g],e.setCustomValidity(g))):q&&(e.setCustomValidity(""),o.customError=!1,e.validationMessage?(d=e.validationMessage,k=[e.validationMessage]):e.validity.valid&&!o.valid&&(o.valid=!0))}let s={value:a,state:o,error:d??(Array.isArray(g)?g[0]:g??""),errors:k,initialValue:j.initialValue};if(r){let a=b.current.fields.get(r);a&&b.current.fields.set(r,{...a,...z(s,l)})}f(s)}),B=d.useCallback((a={})=>(0,s.mergeProps)(t,!1===n.valid?{"aria-invalid":!0}:g.EMPTY_OBJECT,a),[t,n.valid]),C=d.useCallback((a={})=>(0,s.mergeProps)({onChange(a){if(a.nativeEvent.defaultPrevented)return;if(c(o),!p())return void x(a.currentTarget.value,!0);let b=a.currentTarget;""===b.value?x(b.value):(u.clear(),k?u.start(k,()=>{x(b.value)}):x(b.value))}},B(a)),[B,c,o,u,x,k,p]);return d.useMemo(()=>({getValidationProps:B,getInputValidationProps:C,inputRef:w,commit:x}),[B,C,x])}({setValidityData:_,validate:I,validityData:$,validationDebounceTime:t,invalid:Z,markedDirtyRef:U,state:ab,name:w,shouldValidateOnChange:X}),ad=d.useCallback(()=>{U.current=!0,ac.commit($.value)},[ac,$]);d.useImperativeHandle(F,()=>({validate:ad}),[ad]);let ae=d.useMemo(()=>({invalid:Z,name:w,validityData:$,setValidityData:_,disabled:J,touched:T,setTouched:W,dirty:S,setDirty:V,filled:O,setFilled:P,focused:Q,setFocused:R,validate:I,validationMode:u,validationDebounceTime:t,shouldValidateOnChange:X,state:ab,markedDirtyRef:U,validation:ac}),[Z,w,$,J,T,W,S,V,O,P,Q,R,I,u,t,X,ab,ac]),af=(0,x.useRenderElement)("div",a,{ref:b,state:ab,props:G,stateAttributesMapping:l});return(0,c.jsx)(m.Provider,{value:ae,children:af})}),C=d.forwardRef(function(a,b){return(0,c.jsx)(w,{children:(0,c.jsx)(B,{...a,ref:b})})});var D=a.i(26476),E=a.i(632),F=a.i(6239),G=a.i(17585);function H(a,b){let c=(0,t.useBaseUiId)(a);return(0,G.useIsoLayoutEffect)(()=>(b(c),()=>{b(void 0)}),[c,b]),c}a.s(["useRegisteredLabelId",0,H],67669);let I=d.forwardRef(function(a,b){let{render:c,className:f,id:g,nativeLabel:h=!0,...i}=a,j=n(!1),{labelId:k}=v(),m=d.useRef(null),o=function(a={}){let{id:b,fallbackControlId:c,native:d=!1,setLabelId:f,focusControl:g}=a,{controlId:h,setLabelId:i}=v(),j=H(b,(0,e.useStableCallback)(a=>{i(a),f?.(a)})),k=h??c;function l(a){let b=(0,F.getTarget)(a.nativeEvent);b?.closest("button,input,select,textarea")||(!a.defaultPrevented&&a.detail>1&&a.preventDefault(),d||function(a){if(g)return g(a,k);if(!k)return;let b=(0,E.ownerDocument)(a.currentTarget).getElementById(k);(0,D.isHTMLElement)(b)&&b.focus({focusVisible:!0})}(a))}return d?{id:j,htmlFor:k??void 0,onMouseDown:l}:{id:j,onClick:l,onPointerDown(a){a.preventDefault()}}}({id:k??g,native:h});return(0,x.useRenderElement)("label",a,{ref:[b,m],state:j.state,props:[o,i],stateAttributesMapping:l})});var J=a.i(2471),K=a.i(58418),L=a.i(77717);let M={...l,...K.transitionStatusMapping},N=d.forwardRef(function(a,b){let{render:e,id:f,className:g,match:h,...i}=a,j=(0,t.useBaseUiId)(f),{validityData:k,state:l,name:m}=n(!1),{setMessageIds:o}=v(),{errors:p}=q(),r=m?p[m]:null,s=!1;s=!!r||!0===h||(h?!!k.state[h]:!1===k.state.valid);let{mounted:u,transitionStatus:w,setMounted:y}=(0,L.useTransitionStatus)(s);(0,G.useIsoLayoutEffect)(()=>{if(s&&j)return o(a=>a.concat(j)),()=>{o(a=>a.filter(a=>a!==j))}},[s,j,o]);let z=d.useRef(null),[A,B]=d.useState(null),[C,D]=d.useState(null),E=r||(k.errors.length>1?(0,c.jsx)("ul",{children:k.errors.map(a=>(0,c.jsx)("li",{children:a},a))}):k.error),F=k.error;null!=r?F=Array.isArray(r)?JSON.stringify(r):r:k.errors.length>1&&(F=JSON.stringify(k.errors)),s&&F!==C&&(D(F),B(E)),(0,J.useOpenChangeComplete)({open:s,ref:z,onComplete(){s||y(!1)}});let H={...l,transitionStatus:w},I=(0,x.useRenderElement)("div",a,{ref:[b,z],state:H,props:[{id:j,children:s?E:A},i],stateAttributesMapping:M,enabled:u});return u?I:null}),O=d.forwardRef(function(a,b){let{render:c,id:d,className:e,...f}=a,g=(0,t.useBaseUiId)(d),h=n(!1),{setMessageIds:i}=v();return(0,G.useIsoLayoutEffect)(()=>{if(g)return i(a=>a.concat(g)),()=>{i(a=>a.filter(a=>a!==g))}},[g,i]),(0,x.useRenderElement)("p",a,{ref:b,state:h.state,props:[{id:g},f],stateAttributesMapping:l})});function P({controlled:a,default:b,name:c,state:e="value"}){let{current:f}=d.useRef(void 0!==a),[g,h]=d.useState(b),i=d.useCallback(a=>{f||h(a)},[]);return[f?a:g,i]}a.s(["useControlled",0,P],52034);var Q=a.i(35112),R=a.i(62255),S=a.i(74348);let T=d.forwardRef(function(a,b){let{render:c,className:f,id:h,name:i,value:j,disabled:k=!1,onValueChange:m,defaultValue:o,autoFocus:p=!1,...s}=a,{state:u,name:w,disabled:y,setTouched:A,setDirty:B,validityData:C,setFocused:H,setFilled:I,validationMode:J,validation:K}=n(),L=y||k,M=w??i,N={...u,disabled:L},{labelId:O}=v(),T=function(a={}){let{id:b,implicit:c=!1,controlRef:f}=a,{controlId:h,registerControlId:i}=v(),j=(0,t.useBaseUiId)(b),k=c?h:void 0,l=(0,r.useRefWithInit)(()=>Symbol("labelable-control")),m=d.useRef(!1),n=d.useRef(null!=b),o=(0,e.useStableCallback)(()=>{m.current&&i!==g.NOOP&&(m.current=!1,i(l.current,void 0))});return(0,G.useIsoLayoutEffect)(()=>{let a;if(i!==g.NOOP){if(c){let c=f?.current;a=(0,D.isElement)(c)&&null!=c.closest("label")?b??null:k??j}else if(null!=b)n.current=!0,a=b;else{if(!n.current)return void o();a=j}if(void 0===a)return void o();m.current=!0,i(l.current,a)}},[b,f,k,i,c,j,l,o]),d.useEffect(()=>o,[o]),h??j}({id:h});(0,G.useIsoLayoutEffect)(()=>{let a=null!=j;K.inputRef.current?.value||a&&""!==j?I(!0):a&&""===j&&I(!1)},[K.inputRef,I,j]);let U=d.useRef(null);(0,G.useIsoLayoutEffect)(()=>{p&&U.current===(0,F.activeElement)((0,E.ownerDocument)(U.current))&&H(!0)},[p,H]);let[V]=P({controlled:j,default:o,name:"FieldControl",state:"value"}),W=void 0!==j,X=W?V:void 0;return!function(a){let{enabled:b=!0,value:c,id:d,name:f,controlRef:g,commit:h}=a,{formRef:i}=q(),{invalid:j,markedDirtyRef:k,validityData:l,setValidityData:m}=n(),o=(0,e.useStableCallback)(a.getValue);(0,G.useIsoLayoutEffect)(()=>{if(!b)return;let a=c;void 0===a&&(a=o()),null===l.initialValue&&null!==a&&m(b=>({...b,initialValue:a}))},[b,m,c,l.initialValue,o]),(0,G.useIsoLayoutEffect)(()=>{b&&d&&i.current.fields.set(d,{getValue:o,name:f,controlRef:g,validityData:z(l,j),validate(a=!0){let b=c;void 0===b&&(b=o()),k.current=!0,a?Q.flushSync(()=>h(b)):h(b)}})},[h,g,b,i,o,d,j,k,f,l,c]),(0,G.useIsoLayoutEffect)(()=>{let a=i.current.fields;return()=>{d&&a.delete(d)}},[i,d])}({id:T,name:M,commit:K.commit,value:X,getValue:()=>K.inputRef.current?.value,controlRef:K.inputRef}),(0,x.useRenderElement)("input",a,{ref:[b,U],state:N,props:[{id:T,disabled:L,name:M,ref:K.inputRef,"aria-labelledby":O,autoFocus:p,...W?{value:X}:{defaultValue:o},onChange(a){let b=a.currentTarget.value;m?.(b,(0,R.createChangeEventDetails)(S.REASONS.none,a.nativeEvent)),B(b!==C.initialValue),I(""!==b)},onFocus(){H(!0)},onBlur(a){A(!0),H(!1),"onBlur"===J&&K.commit(a.currentTarget.value)},onKeyDown(a){"INPUT"===a.currentTarget.tagName&&"Enter"===a.key&&(A(!0),K.commit(a.currentTarget.value))}},K.getInputValidationProps(),s],stateAttributesMapping:l})}),U=d.createContext({disabled:!1}),V=d.createContext(void 0),W=d.forwardRef(function(a,b){let{render:e,className:g,disabled:h=!1,...i}=a,{state:j,disabled:k}=n(!1),m=k||h,o=function(a=!0){let b=d.useContext(V);if(void 0===b&&!a)throw Error((0,f.default)(3));return b}(),p=o?.parent.id,q=o?.allValues!==void 0,r=d.useMemo(()=>({disabled:m}),[m]),s=(0,x.useRenderElement)("div",a,{ref:b,state:j,props:i,stateAttributesMapping:l});return(0,c.jsx)(w,{controlId:q?p:void 0,children:(0,c.jsx)(U.Provider,{value:r,children:s})})});a.s(["Control",0,T,"Description",0,O,"Error",0,N,"Item",0,W,"Label",0,I,"Root",0,C,"Validity",0,function(a){let{children:b}=a,{validityData:e,invalid:f}=n(!1),g=d.useMemo(()=>z(e,f),[e,f]),h=!1===g.state.valid,{transitionStatus:i}=(0,L.useTransitionStatus)(h),j=d.useMemo(()=>({...g,validity:g.state,transitionStatus:i}),[g,i]);return(0,c.jsx)(d.Fragment,{children:b(j)})}],12944);var X=a.i(12944),X=X;let Y=d.forwardRef(function(a,b){return(0,c.jsx)(X.Control,{ref:b,...a})});var Z=a.i(760);a.s(["Input",0,function({className:a,type:b,...d}){return(0,c.jsx)(Y,{type:b,"data-slot":"input",className:(0,Z.cn)("h-9 w-full min-w-0 rounded-md border border-input bg-input/20 px-3 py-1 text-sm transition-colors outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",a),...d})}],28503)},97463,a=>{"use strict";var b=a.i(87924),c=a.i(760);a.s(["Textarea",0,function({className:a,...d}){return(0,b.jsx)("textarea",{"data-slot":"textarea",className:(0,c.cn)("flex field-sizing-content min-h-16 w-full resize-none rounded-md border border-input bg-input/20 px-2 py-2 text-sm transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 md:text-xs/relaxed dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",a),...d})}])},77156,a=>{"use strict";let b=(0,a.i(60137).default)("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);a.s(["Eye",0,b],77156)},81560,a=>{"use strict";let b=(0,a.i(60137).default)("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]);a.s(["Trash2",0,b],81560)},67453,a=>{"use strict";var b=a.i(67511);a.s(["CheckCircle2",()=>b.default])},65025,a=>{"use strict";var b,c=a.i(87924);a.s([],5993),a.i(5993);var d=a.i(72131),e=a.i(35850),f=a.i(49538);let g=new Map;function h(a,b,c){return null==a?"":(function(a,b){let c=JSON.stringify({locale:a,options:b}),d=g.get(c);if(d)return d;let e=new Intl.NumberFormat(a,b);return g.set(c,e),e})(b,c).format(a)}var i=a.i(2840),j=a.i(21376);let k=d.createContext(void 0);function l(){let a=d.useContext(k);if(void 0===a)throw Error((0,j.default)(51));return a}let m=((b={}).complete="data-complete",b.indeterminate="data-indeterminate",b.progressing="data-progressing",b),n={status:a=>"progressing"===a?{[m.progressing]:""}:"complete"===a?{[m.complete]:""}:"indeterminate"===a?{[m.indeterminate]:""}:null};function o(a,b){return null==b?"indeterminate progress":a||`${b}%`}let p=d.forwardRef(function(a,b){var g;let{format:j,getAriaValueText:l=o,locale:m,max:p=100,min:q=0,value:r,render:s,className:t,children:u,...v}=a,[w,x]=d.useState(),y=(0,e.useValueAsRef)(j),z="indeterminate";Number.isFinite(r)&&(z=r===p?"complete":"progressing");let A=(g=y.current,null==r?"":g?h(r,m,g):h(r/100,m,{style:"percent"})),B=d.useMemo(()=>({status:z}),[z]),C={"aria-labelledby":w,"aria-valuemax":p,"aria-valuemin":q,"aria-valuenow":r??void 0,"aria-valuetext":l(A,r),role:"progressbar",children:(0,c.jsxs)(d.Fragment,{children:[u,(0,c.jsx)("span",{role:"presentation",style:f.visuallyHidden,children:"x"})]})},D=d.useMemo(()=>({formattedValue:A,max:p,min:q,setLabelId:x,state:B,status:z,value:r}),[A,p,q,x,B,z,r]),E=(0,i.useRenderElement)("div",a,{state:B,ref:b,props:[C,v],stateAttributesMapping:n});return(0,c.jsx)(k.Provider,{value:D,children:E})}),q=d.forwardRef(function(a,b){let{render:c,className:d,...e}=a,{state:f}=l();return(0,i.useRenderElement)("div",a,{state:f,ref:b,props:e,stateAttributesMapping:n})}),r=d.forwardRef(function(a,b){let{render:c,className:e,...f}=a,{max:g,min:h,value:j,state:k}=l(),m=Number.isFinite(j)&&null!==j?(j-h)*100/(g-h):null,o=d.useCallback(()=>null==m?{}:{insetInlineStart:0,height:"inherit",width:`${m}%`},[m]);return(0,i.useRenderElement)("div",a,{state:k,ref:b,props:[{style:o()},f],stateAttributesMapping:n})}),s=d.forwardRef(function(a,b){let{className:c,render:d,children:e,...f}=a,{value:g,formattedValue:h,state:j}=l(),k=null==g?"indeterminate":h,m=null==g?null:h;return(0,i.useRenderElement)("span",a,{state:j,ref:b,props:[{"aria-hidden":!0,children:"function"==typeof e?e(k,g):m},f],stateAttributesMapping:n})});var t=a.i(67669);let u=d.forwardRef(function(a,b){let{render:c,className:d,id:e,...f}=a,{setLabelId:g,state:h}=l(),j=(0,t.useRegisteredLabelId)(e,g);return(0,i.useRenderElement)("span",a,{state:h,ref:b,props:[{id:j,role:"presentation"},f],stateAttributesMapping:n})});a.s(["Indicator",0,r,"Label",0,u,"Root",0,p,"Track",0,q,"Value",0,s],85806);var v=a.i(85806),v=v,w=a.i(760);function x({className:a,...b}){return(0,c.jsx)(v.Track,{className:(0,w.cn)("relative flex h-1 w-full items-center overflow-x-hidden rounded-md bg-muted",a),"data-slot":"progress-track",...b})}function y({className:a,...b}){return(0,c.jsx)(v.Indicator,{"data-slot":"progress-indicator",className:(0,w.cn)("h-full bg-primary",a),style:{transition:"width 500ms ease-in-out"},...b})}a.s(["Progress",0,function({className:a,children:b,value:d,...e}){return(0,c.jsxs)(v.Root,{value:d,"data-slot":"progress",className:(0,w.cn)("flex flex-wrap gap-3",a),...e,children:[b,(0,c.jsx)(x,{children:(0,c.jsx)(y,{})})]})}],65025)},82434,a=>{"use strict";let b=(0,a.i(60137).default)("bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);a.s(["Bot",0,b],82434)},92e3,a=>{"use strict";let b=(0,a.i(60137).default)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);a.s(["AlertCircle",0,b],92e3)},4975,48124,a=>{"use strict";var b=a.i(60137);let c=(0,b.default)("mic",[["path",{d:"M12 19v3",key:"npa21l"}],["path",{d:"M19 10v2a7 7 0 0 1-14 0v-2",key:"1vc78b"}],["rect",{x:"9",y:"2",width:"6",height:"13",rx:"3",key:"s6n7sd"}]]);a.s(["Mic",0,c],4975);let d=(0,b.default)("square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);a.s(["Square",0,d],48124)},6828,a=>{"use strict";var b=a.i(23292);function c(a){let{type:c,title:d,description:e,duration:f}=a,g=a.id??crypto.randomUUID(),h={id:g,description:e,duration:f};switch(c){case"loading":b.toast.loading(d,h);break;case"success":b.toast.success(d,h);break;case"error":b.toast.error(d,h);break;case"warning":b.toast.warning(d,h);break;case"info":b.toast.info(d,h);break;default:(0,b.toast)(d,h)}return g}a.s(["toaster",0,{create:a=>c(a),update:(a,b)=>{c({...b,id:a})},dismiss:a=>{b.toast.dismiss(a)}}])},36620,a=>{"use strict";let b=(0,a.i(60137).default)("circle-question-mark",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);a.s(["CircleHelp",0,b],36620)},92552,a=>{"use strict";var b=a.i(87924),c=a.i(760);a.s(["Card",0,function({className:a,size:d="default",...e}){return(0,b.jsx)("div",{"data-slot":"card","data-size":d,className:(0,c.cn)("group/card flex flex-col gap-4 overflow-hidden rounded-lg bg-card py-4 text-xs/relaxed text-card-foreground ring-1 ring-foreground/10 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 *:[img:first-child]:rounded-t-lg *:[img:last-child]:rounded-b-lg",a),...e})},"CardContent",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-content",className:(0,c.cn)("px-4 group-data-[size=sm]/card:px-3",a),...d})},"CardDescription",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-description",className:(0,c.cn)("text-xs/relaxed text-muted-foreground",a),...d})},"CardHeader",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-header",className:(0,c.cn)("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-lg px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3",a),...d})},"CardTitle",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-title",className:(0,c.cn)("font-heading text-sm font-medium",a),...d})}])},56026,19768,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(96221),e=a.i(4975),f=a.i(48124),g=a.i(39524),h=a.i(91399),i=a.i(6828),j=a.i(82434),k=a.i(67453),l=a.i(36620),m=a.i(92552),n=a.i(90002),o=a.i(65025);let p="tsunagi:local-llm-enabled",q={not_running:"停止中",installing_deps:"依存関係をインストール中...",downloading_model:"モデルをダウンロード中...",starting_server:"サーバーを起動中... (モデルのロードに数十秒かかる場合があります)",running:"実行中",running_external:"実行中 (tsunagi外で起動)",error:"エラー"},r=["installing_deps","downloading_model","starting_server"],s=["running","running_external"];function t(a){let b=a/0x40000000;return b>=.1?`${b.toFixed(2)} GB`:`${(a/1048576).toFixed(0)} MB`}a.s(["LOCAL_LLM_ENABLED_STORAGE_KEY",0,p,"LocalLlmSection",0,function(){let[a,e]=(0,c.useState)(!1),[u,v]=(0,c.useState)(!1),[w,x]=(0,c.useState)(null),y=(0,c.useRef)(null),z=(0,c.useCallback)(a=>{e(a),localStorage.setItem(p,String(a))},[]),A=(0,c.useCallback)(async()=>{let a=await fetch((0,h.apiUrl)("/api/llm/server/status")),b=await a.json();return x(b),b},[]);(0,c.useEffect)(()=>{e("true"===localStorage.getItem(p)),A()},[A]),(0,c.useEffect)(()=>{w&&s.includes(w.step)&&!a&&(z(!0),i.toaster.create({type:"success",title:"ローカルLLMが有効化されました"}))},[w,a,z]),(0,c.useEffect)(()=>(w&&r.includes(w.step)&&!y.current&&(y.current=setInterval(()=>{A().then(a=>{!r.includes(a.step)&&y.current&&(clearInterval(y.current),y.current=null)})},1e3)),()=>{y.current&&(clearInterval(y.current),y.current=null)}),[w,A]);let B=(0,c.useCallback)(()=>{A(),v(!0)},[A]),C=(0,c.useCallback)(async()=>{try{let a=await fetch((0,h.apiUrl)("/api/llm/server/start"),{method:"POST"});if(!a.ok){let b=await a.json().catch(()=>null);throw Error(b?.error||`HTTPエラー: ${a.status}`)}x(await a.json())}catch(a){i.toaster.create({type:"error",title:"サーバーの起動に失敗しました",description:a instanceof Error?a.message:String(a)})}},[]),D=(0,c.useCallback)(async()=>{try{let a=await fetch((0,h.apiUrl)("/api/llm/server/stop"),{method:"POST"});if(!a.ok){let b=await a.json().catch(()=>null);throw Error(b?.error||`HTTPエラー: ${a.status}`)}x(await a.json())}catch(a){i.toaster.create({type:"error",title:"サーバーの停止に失敗しました",description:a instanceof Error?a.message:String(a)})}},[]),E=(0,c.useCallback)(()=>{z(!1),w&&s.includes(w.step)&&D()},[z,D,w]),F=w?.serverDir,G=w?.downloadProgress,H=G?G.downloadedBytes/G.totalBytes*100:0;return(0,b.jsxs)(m.Card,{children:[(0,b.jsxs)(m.CardHeader,{children:[(0,b.jsxs)("div",{className:"flex items-center gap-1",children:[(0,b.jsx)(m.CardTitle,{children:"ローカルLLM (実験的機能)"}),(0,b.jsx)(g.Button,{variant:"ghost",size:"icon-sm",onClick:B,title:"ローカルLLMについて",children:(0,b.jsx)(l.CircleHelp,{})})]}),(0,b.jsxs)(m.CardDescription,{children:["ローカルで動作するLLM(Qwen3-30B-A3B, MoE)を利用します。",(0,b.jsx)("strong",{className:"font-medium text-foreground",children:"有効にすると、音声入力の文字起こし結果がこのLLMで自動整形されるようになります"}),"(無効時は文字起こし結果をそのまま使用)。"]})]}),(0,b.jsx)(m.CardContent,{className:"flex flex-col gap-3",children:a?(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsxs)("span",{className:"flex items-center gap-2 text-success",children:[(0,b.jsx)(k.CheckCircle2,{className:"size-4"}),"ローカルLLM: 有効"]}),w&&(0,b.jsxs)("span",{className:"text-xs/relaxed text-muted-foreground",children:["(",q[w.step],")"]}),(0,b.jsx)(g.Button,{size:"default",variant:"outline",onClick:E,children:"無効にする"})]}):(0,b.jsxs)(g.Button,{size:"default",onClick:B,children:[(0,b.jsx)(j.Bot,{}),"ローカルLLMを有効化する"]})}),(0,b.jsx)(n.Dialog,{open:u,onOpenChange:({open:a})=>v(a),title:"ローカルLLMについて",maxWidth:"2xl",children:(0,b.jsxs)("div",{className:"space-y-4 text-sm",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"font-medium text-foreground",children:"実験的機能です"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"音声入力の文字起こし結果を、ローカルで動作するLLM(mlx-lm / Qwen3-30B-A3B, MoE構成)で整形します。MoE構成のため実計算に使うアクティブパラメータは約3Bで、denseな同規模モデルより高速に動作します。精度・速度は環境に依存し、今後変更される可能性があります。"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"font-medium text-foreground",children:"対応環境"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"Apple Silicon Mac (M1/M2/M3/M4) のみ対応。Windows/Linuxでは利用できません。メモリ32GB以上を推奨します。"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"font-medium text-foreground",children:"必要なもの(事前に手動でインストール)"}),(0,b.jsx)("ul",{className:"list-disc pl-5 text-muted-foreground",children:(0,b.jsx)("li",{children:"Python 3.9以降(Xcode Command Line Tools または Homebrew経由で入手可能)"})})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"mb-1 font-medium text-foreground",children:"セットアップ・起動"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"下のボタンから、依存関係のインストール・モデルのダウンロード・サーバー起動まで自動で行われます(初回はモデルサイズが大きく数分〜数十分かかります)。"}),w&&!F&&(0,b.jsx)("p",{className:"mt-1 text-destructive",children:"llm-serverが見つかりませんでした。インストールが壊れている可能性があります。"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"mb-1 font-medium text-foreground",children:"アンインストール"}),(0,b.jsxs)("p",{className:"text-muted-foreground",children:["ローカルLLMのためにダウンロードされるもの(Pythonの依存関係・LLMモデル、合計約17GB)は全て",(0,b.jsx)("code",{className:"rounded bg-muted px-1",children:"~/.tsunagi/llm"}),"に保存されます。不要になった場合はこのディレクトリを削除するだけで、関連リソースを完全に削除できます。"]})]}),(0,b.jsxs)("div",{className:"border-t border-border pt-4",children:[(!w||"not_running"===w.step||"error"===w.step)&&(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)(g.Button,{size:"default",onClick:()=>void C(),disabled:!w,children:[w?(0,b.jsx)(j.Bot,{}):(0,b.jsx)(d.Loader2,{className:"animate-spin"}),"LLMサーバーを起動"]}),w?.step==="error"&&w.error&&(0,b.jsx)("p",{className:"text-xs/relaxed text-destructive",children:w.error})]}),w?.step==="installing_deps"&&(0,b.jsxs)(g.Button,{size:"default",disabled:!0,children:[(0,b.jsx)(d.Loader2,{className:"animate-spin"}),"依存関係をインストール中... (数分かかる場合があります)"]}),w?.step==="downloading_model"&&(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs/relaxed text-muted-foreground",children:[(0,b.jsx)(d.Loader2,{className:"size-4 animate-spin"}),"モデルをダウンロード中... (約17GB)"]}),G&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(o.Progress,{value:H}),(0,b.jsxs)("p",{className:"text-xs/relaxed text-muted-foreground",children:[t(G.downloadedBytes)," / ",t(G.totalBytes)," (",H.toFixed(0),"%) ・ ",function(a){if(null===a)return"残り時間を計算中...";if(a<60)return`残り約${a}秒`;let b=Math.floor(a/60);return`残り約${b}分${a%60}秒`}(G.etaSeconds)]})]})]}),w?.step==="starting_server"&&(0,b.jsxs)(g.Button,{size:"default",disabled:!0,children:[(0,b.jsx)(d.Loader2,{className:"animate-spin"}),"サーバーを起動中... (モデルのロードに数十秒かかる場合があります)"]}),w&&s.includes(w.step)&&(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsxs)("span",{className:"flex items-center gap-2 text-success",children:[(0,b.jsx)(k.CheckCircle2,{className:"size-4"}),"サーバーは起動しています"]}),(0,b.jsxs)(g.Button,{size:"default",variant:"outline",onClick:()=>void D(),children:[(0,b.jsx)(f.Square,{}),"サーバーを停止"]})]})]})]})})]})}],19768);let u="tsunagi:whisper-prompt",v=["running","running_external"];a.s(["VoiceInputButton",0,function({onTranscribed:a}){let[j,k]=(0,c.useState)(!1),[l,m]=(0,c.useState)("idle"),[n,o]=(0,c.useState)(0),[q,r]=(0,c.useState)(null),s=(0,c.useRef)(null),t=(0,c.useRef)([]),w=(0,c.useRef)(null),x=(0,c.useRef)(null),y=(0,c.useRef)(null),z=(0,c.useRef)(0),A=(0,c.useRef)(0);(0,c.useEffect)(()=>{k("true"===localStorage.getItem("tsunagi:voice-input-enabled"))},[]),(0,c.useEffect)(()=>{if(!j)return;let a=!1,b=async()=>{try{let b=await fetch((0,h.apiUrl)("/api/whisper/server/status")),c=await b.json();a||r(c.step)}catch{a||r("not_running")}};b();let c=setInterval(b,5e3);return()=>{a=!0,clearInterval(c)}},[j]);let B=(0,c.useCallback)(()=>{y.current&&(clearInterval(y.current),y.current=null),x.current?.close(),x.current=null,o(0)},[]);(0,c.useEffect)(()=>()=>{B()},[B]);let C=(0,c.useCallback)(a=>{let b=new AudioContext,c=b.createMediaStreamSource(a),d=b.createAnalyser();d.fftSize=2048,c.connect(d),x.current=b,z.current=0,A.current=0;let e=new Float32Array(d.fftSize);y.current=setInterval(()=>{d.getFloatTimeDomainData(e);let a=0;for(let b=0;b<e.length;b++)a+=e[b]*e[b];let b=Math.sqrt(a/e.length),c=Math.min(1,Math.max(0,((b>0?20*Math.log10(b):-60)- -60)/50));A.current=Math.max(A.current,c),z.current=.3*z.current+.7*c,o(z.current)},50)},[]),D=(0,c.useCallback)(async b=>{m("transcribing");try{let c=new FormData,d=localStorage.getItem(u);d&&c.append("prompt",d);let e="true"===localStorage.getItem(p);c.append("useLlm",String(e)),c.append("file",b,"recording.webm");let f=await fetch((0,h.apiUrl)("/api/whisper/transcribe"),{method:"POST",body:c});if(!f.ok){let a=await f.json().catch(()=>null);throw Error(a?.error||`HTTPエラー: ${f.status}`)}let g=await f.json();g.warning&&i.toaster.create({type:"error",title:"LLM整形をスキップしました",description:g.warning}),g.text&&a(g.text)}catch(a){i.toaster.create({type:"error",title:"文字起こしに失敗しました",description:a instanceof Error?a.message:String(a)})}finally{m("idle")}},[a]),E=(0,c.useCallback)(async()=>{try{let a=await navigator.mediaDevices.getUserMedia({audio:!0});w.current=a,t.current=[],C(a);let b=new MediaRecorder(a,{audioBitsPerSecond:128e3});b.ondataavailable=a=>{a.data.size>0&&t.current.push(a.data)},b.onstop=()=>{w.current?.getTracks().forEach(a=>a.stop()),w.current=null;let a=A.current;if(B(),a<.15){i.toaster.create({type:"error",title:"音声が検出されませんでした",description:"マイクに向かって話してから、もう一度お試しください。"}),m("idle");return}let b=new Blob(t.current,{type:"audio/webm"});D(b)},s.current=b,b.start(),m("recording")}catch(a){i.toaster.create({type:"error",title:"マイクにアクセスできませんでした",description:a instanceof Error?a.message:String(a)})}},[D,C,B]),F=(0,c.useCallback)(()=>{s.current?.stop()},[]);if(!j)return null;let G=null!==q&&v.includes(q);return(0,b.jsxs)("div",{className:"recording"===l?"inline-flex items-center gap-2 rounded-md bg-destructive/10 p-1":"inline-flex",children:[(0,b.jsx)(g.Button,{size:"icon",variant:"recording"===l?"destructive":"default",onClick:"recording"===l?F:()=>void E(),disabled:"transcribing"===l||"idle"===l&&!G,title:"recording"===l?"停止して入力":"idle"!==l||G?"音声入力":"Whisperサーバーが起動していません(Settingsから起動してください)",children:"transcribing"===l?(0,b.jsx)(d.Loader2,{className:"w-4 h-4 animate-spin"}):"recording"===l?(0,b.jsx)(f.Square,{className:"w-4 h-4"}):(0,b.jsx)(e.Mic,{className:"w-4 h-4"})}),"recording"===l&&(0,b.jsx)("div",{"aria-hidden":!0,className:"h-1.5 w-16 overflow-hidden rounded-full bg-background/60",children:(0,b.jsx)("div",{className:"h-full rounded-full bg-destructive",style:{width:`${Math.round(100*n)}%`}})})]})},"WHISPER_PROMPT_STORAGE_KEY",0,u],56026)},78512,a=>{"use strict";var b=a.i(72131);a.s(["useDocumentTitle",0,function(a){(0,b.useEffect)(()=>{let b=a?`繋 | ${a}`:"繋",c=document.title;return document.title=b,()=>{document.title=c}},[a])}])}];
|
|
4
|
+
- Rerun the production build with \`next build --debug-prerender\` to generate better stack traces.`)}function ah(a,b,c,d){if(d.syncDynamicErrorWithStack)throw ag(a,d.syncDynamicErrorWithStack),new k.StaticGenBailoutError;if(0!==b){if(c.hasSuspenseAboveBody)return;let d=c.dynamicErrors;if(d.length>0){for(let b=0;b<d.length;b++)ag(a,d[b]);throw new k.StaticGenBailoutError}if(c.hasDynamicViewport)throw console.error(`Route "${a.route}" has a \`generateViewport\` that depends on Request data (\`cookies()\`, etc...) or uncached external data (\`fetch(...)\`, etc...) without explicitly allowing fully dynamic rendering. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`),new k.StaticGenBailoutError;if(1===b)throw console.error(`Route "${a.route}" did not produce a static shell and Next.js was unable to determine a reason. This is a bug in Next.js.`),new k.StaticGenBailoutError}else if(!1===c.hasAllowedDynamic&&c.hasDynamicMetadata)throw console.error(`Route "${a.route}" has a \`generateMetadata\` that depends on Request data (\`cookies()\`, etc...) or uncached external data (\`fetch(...)\`, etc...) when the rest of the route does not. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`),new k.StaticGenBailoutError}function ai(a,b,c,d){if(d||c.hasSuspenseAboveBody)return[];if(0!==b){let d=c.dynamicErrors;if(d.length>0)return d;if(1===b)return[Object.defineProperty(new r.InvariantError(`Route "${a.route}" did not produce a static shell and Next.js was unable to determine a reason.`),"__NEXT_ERROR_CODE",{value:"E936",enumerable:!1,configurable:!0})]}else if(!1===c.hasAllowedDynamic&&0===c.dynamicErrors.length&&c.dynamicMetadata)return[c.dynamicMetadata];return[]}function aj(a,b,c,d,e){if(d){let{missingSampleErrors:a}=d;if(a.length>0)return a}let{validationPreventingErrors:f}=c;if(f.length>0)return f;if(e.renderedIds.size<e.expectedIds.size){let{thrownErrorsOutsideBoundary:b,createInstantStack:d}=c;if(0===b.length){let b=`Route "${a.route}": Could not validate \`unstable_instant\` because the target segment was prevented from rendering for an unknown reason.`,c=null!==d?d():Error();return c.name="Error",c.message=b,[c]}if(1===b.length){let c=`Route "${a.route}": Could not validate \`unstable_instant\` because the target segment was prevented from rendering, likely due to the following error.`,e=null!==d?d():Error();return e.name="Error",e.message=c,[e,b[0]]}{let c=`Route "${a.route}": Could not validate \`unstable_instant\` because the target segment was prevented from rendering, likely due to one of the following errors.`,e=null!==d?d():Error();return e.name="Error",e.message=c,[e,...b]}}if(0!==b){let d=c.dynamicErrors;if(d.length>0)return d;if(1===b)return c.hasAllowedClientDynamicAboveBoundary?[]:[Object.defineProperty(new r.InvariantError(`Route "${a.route}" failed to render during instant validation and Next.js was unable to determine a reason.`),"__NEXT_ERROR_CODE",{value:"E1055",enumerable:!1,configurable:!0})]}else{let a=c.dynamicErrors;if(a.length>0)return a;if(!1===c.hasAllowedDynamic&&c.dynamicMetadata)return[c.dynamicMetadata]}return[]}},44753,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unstable_rethrow",{enumerable:!0,get:function(){return function a(b){if((0,g.isNextRouterError)(b)||(0,f.isBailoutToCSRError)(b)||(0,i.isDynamicServerError)(b)||(0,h.isDynamicPostpone)(b)||(0,e.isPostpone)(b)||(0,d.isHangingPromiseRejectionError)(b)||(0,h.isPrerenderInterruptedError)(b))throw b;b instanceof Error&&"cause"in b&&a(b.cause)}}});let d=a.r(35710),e=a.r(31101),f=a.r(41997),g=a.r(77747),h=a.r(54110),i=a.r(3326);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},47083,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unstable_rethrow",{enumerable:!0,get:function(){return d}});let d=a.r(44753).unstable_rethrow;("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},21066,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={ReadonlyURLSearchParams:function(){return f.ReadonlyURLSearchParams},RedirectType:function(){return m},forbidden:function(){return i.forbidden},notFound:function(){return h.notFound},permanentRedirect:function(){return g.permanentRedirect},redirect:function(){return g.redirect},unauthorized:function(){return j.unauthorized},unstable_isUnrecognizedActionError:function(){return l},unstable_rethrow:function(){return k.unstable_rethrow}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(75718),g=a.r(48685),h=a.r(28102),i=a.r(64177),j=a.r(88213),k=a.r(47083);function l(){throw Object.defineProperty(Error("`unstable_isUnrecognizedActionError` can only be used on the client."),"__NEXT_ERROR_CODE",{value:"E776",enumerable:!1,configurable:!0})}let m={push:"push",replace:"replace"};("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},74137,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={ReadonlyURLSearchParams:function(){return h.ReadonlyURLSearchParams},RedirectType:function(){return l.RedirectType},ServerInsertedHTMLContext:function(){return j.ServerInsertedHTMLContext},forbidden:function(){return l.forbidden},notFound:function(){return l.notFound},permanentRedirect:function(){return l.permanentRedirect},redirect:function(){return l.redirect},unauthorized:function(){return l.unauthorized},unstable_isUnrecognizedActionError:function(){return k.unstable_isUnrecognizedActionError},unstable_rethrow:function(){return l.unstable_rethrow},useParams:function(){return u},usePathname:function(){return s},useRouter:function(){return t},useSearchParams:function(){return r},useSelectedLayoutSegment:function(){return w},useSelectedLayoutSegments:function(){return v},useServerInsertedHTML:function(){return j.useServerInsertedHTML}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(46058)._(a.r(72131)),g=a.r(9270),h=a.r(36313),i=a.r(39118),j=a.r(18341),k=a.r(57997),l=a.r(21066),m=a.r(54110).useDynamicRouteParams,n=a.r(54110).useDynamicSearchParams,{instrumentParamsForClientValidation:o,instrumentSearchParamsForClientValidation:p,expectCompleteParamsInClientValidation:q}={};function r(){n?.("useSearchParams()");let a=(0,f.useContext)(h.SearchParamsContext);return(0,f.useMemo)(()=>a?new h.ReadonlyURLSearchParams(a):null,[a])}function s(){return m?.("usePathname()"),(0,f.useContext)(h.PathnameContext)}function t(){let a=(0,f.useContext)(g.AppRouterContext);if(null===a)throw Object.defineProperty(Error("invariant expected app router to be mounted"),"__NEXT_ERROR_CODE",{value:"E238",enumerable:!1,configurable:!0});return a}function u(){return m?.("useParams()"),(0,f.useContext)(h.PathParamsContext)}function v(a="children"){m?.("useSelectedLayoutSegments()");let b=(0,f.useContext)(g.LayoutRouterContext);return b?(0,i.getSelectedLayoutSegmentPath)(b.parentTree,a):null}function w(a="children"){m?.("useSelectedLayoutSegment()"),(0,f.useContext)(h.NavigationPromisesContext);let b=v(a);return(0,i.computeSelectedLayoutSegment)(b,a)}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},50944,(a,b,c)=>{b.exports=a.r(74137)},33441,34157,a=>{"use strict";let b=(0,a.i(60137).default)("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);a.s(["default",0,b],34157),a.s(["Check",0,b],33441)},67060,96221,a=>{"use strict";var b=a.i(87924),c=a.i(4650);a.s(["Loader2",()=>c.default],96221);var c=c;a.s(["LoadingSpinner",0,function({size:a="md",message:d}){return(0,b.jsxs)("div",{className:"flex flex-col items-center justify-center gap-3",children:[(0,b.jsx)(c.default,{className:`${{sm:"w-4 h-4",md:"w-8 h-8",lg:"w-12 h-12"}[a]} text-primary animate-spin`}),d&&(0,b.jsx)("p",{className:"text-sm text-muted-foreground",children:d})]})}],67060)},28503,67669,52034,a=>{"use strict";var b,c=a.i(87924),d=a.i(72131);a.s([],7774),a.i(7774);var e=a.i(71812),f=a.i(21376),g=a.i(37388);let h=((b={}).disabled="data-disabled",b.valid="data-valid",b.invalid="data-invalid",b.touched="data-touched",b.dirty="data-dirty",b.filled="data-filled",b.focused="data-focused",b),i={badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valid:null,valueMissing:!1},j={valid:null,touched:!1,dirty:!1,filled:!1,focused:!1},k={disabled:!1,...j},l={valid:a=>null===a?null:a?{[h.valid]:""}:{[h.invalid]:""}},m=d.createContext({invalid:void 0,name:void 0,validityData:{state:i,errors:[],error:"",value:"",initialValue:null},setValidityData:g.NOOP,disabled:void 0,touched:j.touched,setTouched:g.NOOP,dirty:j.dirty,setDirty:g.NOOP,filled:j.filled,setFilled:g.NOOP,focused:j.focused,setFocused:g.NOOP,validate:()=>null,validationMode:"onSubmit",validationDebounceTime:0,shouldValidateOnChange:()=>!1,state:k,markedDirtyRef:{current:!1},validation:{getValidationProps:(a=g.EMPTY_OBJECT)=>a,getInputValidationProps:(a=g.EMPTY_OBJECT)=>a,inputRef:{current:null},commit:async()=>{}}});function n(a=!0){let b=d.useContext(m);if(b.setValidityData===g.NOOP&&!a)throw Error((0,f.default)(28));return b}let o=d.createContext({legendId:void 0,setLegendId:()=>{},disabled:void 0}),p=d.createContext({formRef:{current:{fields:new Map}},errors:{},clearErrors:g.NOOP,validationMode:"onSubmit",submitAttemptedRef:{current:!1}});function q(){return d.useContext(p)}var r=a.i(95337),s=a.i(84991),t=a.i(98134);let u=d.createContext({controlId:void 0,registerControlId:g.NOOP,labelId:void 0,setLabelId:g.NOOP,messageIds:[],setMessageIds:g.NOOP,getDescriptionProps:a=>a});function v(){return d.useContext(u)}let w=function(a){let b=(0,t.useBaseUiId)(),f=void 0===a.controlId?b:a.controlId,[g,h]=d.useState(f),[i,j]=d.useState(a.labelId),[k,l]=d.useState([]),m=(0,r.useRefWithInit)(()=>new Map),{messageIds:n}=v(),o=(0,e.useStableCallback)((a,b)=>{let c=m.current;void 0===b?c.delete(a):(c.set(a,b),h(a=>{let b;if(0!==c.size){for(let d of c.values()){if(void 0!==a&&d===a)return a;void 0===b&&(b=d)}return b}}))}),p=d.useCallback(a=>(0,s.mergeProps)({"aria-describedby":n.concat(k).join(" ")||void 0},a),[n,k]),q=d.useMemo(()=>({controlId:g,registerControlId:o,labelId:i,setLabelId:j,messageIds:k,setMessageIds:l,getDescriptionProps:p}),[g,o,i,j,k,l,p]);return(0,c.jsx)(u.Provider,{value:q,children:a.children})};var x=a.i(2840),y=a.i(76093);function z(a,b){return{...a,state:{...a.state,valid:!b&&a.state.valid}}}let A=Object.keys(i),B=d.forwardRef(function(a,b){let{errors:h,validationMode:j,submitAttemptedRef:k}=q(),{render:n,className:p,validate:r,validationDebounceTime:t=0,validationMode:u=j,name:w,disabled:B=!1,invalid:C,dirty:D,touched:E,actionsRef:F,...G}=a,{disabled:H}=function(a=!1){let b=d.useContext(o);if(!b&&!a)throw Error((0,f.default)(86));return b}(),I=(0,e.useStableCallback)(r||(()=>null)),J=H||B,[K,L]=d.useState(!1),[M,N]=d.useState(!1),[O,P]=d.useState(!1),[Q,R]=d.useState(!1),S=D??M,T=E??K,U=d.useRef(!1),V=(0,e.useStableCallback)(a=>{void 0===D&&(a&&(U.current=!0),N(a))}),W=(0,e.useStableCallback)(a=>{void 0===E&&L(a)}),X=(0,e.useStableCallback)(()=>"onChange"===u||"onSubmit"===u&&k.current),Y=!!w&&Object.hasOwn(h,w)&&void 0!==h[w],Z=!0===C||Y,[$,_]=d.useState({state:i,error:"",errors:[],value:null,initialValue:null}),aa=!Z&&$.state.valid,ab=d.useMemo(()=>({disabled:J,touched:T,dirty:S,valid:aa,filled:O,focused:Q}),[J,T,S,aa,O,Q]),ac=function(a){let{formRef:b,clearErrors:c}=q(),{setValidityData:f,validate:h,validityData:j,validationDebounceTime:k,invalid:l,markedDirtyRef:m,state:n,name:o,shouldValidateOnChange:p}=a,{controlId:r,getDescriptionProps:t}=v(),u=(0,y.useTimeout)(),w=d.useRef(null),x=(0,e.useStableCallback)(async(a,c=!1)=>{let d,e=w.current;if(!e)return;if(c){if(!1!==n.valid)return;let c=e.validity;if(!c.valueMissing){let c={value:a,state:{...i,valid:!0},error:"",errors:[],initialValue:j.initialValue};if(e.setCustomValidity(""),r){let a=b.current.fields.get(r);a&&b.current.fields.set(r,{...a,...z(c,!1)})}f(c);return}let d=A.reduce((a,b)=>(a[b]=c[b],a),{});if(!d.valid&&!function(a){if(!a||a.valid||!a.valueMissing)return!1;let b=!1;for(let c of A)"valid"!==c&&("valueMissing"===c&&(b=a[c]),a[c]&&(b=!1));return b}(d))return}u.clear();let g=null,k=[],o=function(a){let b=A.reduce((b,c)=>(b[c]=a.validity[c],b),{}),c=!1;for(let a of A)if("valid"!==a){if("valueMissing"===a&&b[a])c=!0;else if(b[a])return b}return c&&!m.current&&(b.valid=!0,b.valueMissing=!1),b}(e),q=p();if(e.validationMessage&&!q)d=e.validationMessage,k=[e.validationMessage];else{let c=h(a,Array.from(b.current.fields.values()).reduce((a,b)=>(b.name&&(a[b.name]=b.getValue()),a),{}));null!==(g="object"==typeof c&&null!==c&&"then"in c?await c:c)?(o.valid=!1,o.customError=!0,Array.isArray(g)?(k=g,e.setCustomValidity(g.join("\n"))):g&&(k=[g],e.setCustomValidity(g))):q&&(e.setCustomValidity(""),o.customError=!1,e.validationMessage?(d=e.validationMessage,k=[e.validationMessage]):e.validity.valid&&!o.valid&&(o.valid=!0))}let s={value:a,state:o,error:d??(Array.isArray(g)?g[0]:g??""),errors:k,initialValue:j.initialValue};if(r){let a=b.current.fields.get(r);a&&b.current.fields.set(r,{...a,...z(s,l)})}f(s)}),B=d.useCallback((a={})=>(0,s.mergeProps)(t,!1===n.valid?{"aria-invalid":!0}:g.EMPTY_OBJECT,a),[t,n.valid]),C=d.useCallback((a={})=>(0,s.mergeProps)({onChange(a){if(a.nativeEvent.defaultPrevented)return;if(c(o),!p())return void x(a.currentTarget.value,!0);let b=a.currentTarget;""===b.value?x(b.value):(u.clear(),k?u.start(k,()=>{x(b.value)}):x(b.value))}},B(a)),[B,c,o,u,x,k,p]);return d.useMemo(()=>({getValidationProps:B,getInputValidationProps:C,inputRef:w,commit:x}),[B,C,x])}({setValidityData:_,validate:I,validityData:$,validationDebounceTime:t,invalid:Z,markedDirtyRef:U,state:ab,name:w,shouldValidateOnChange:X}),ad=d.useCallback(()=>{U.current=!0,ac.commit($.value)},[ac,$]);d.useImperativeHandle(F,()=>({validate:ad}),[ad]);let ae=d.useMemo(()=>({invalid:Z,name:w,validityData:$,setValidityData:_,disabled:J,touched:T,setTouched:W,dirty:S,setDirty:V,filled:O,setFilled:P,focused:Q,setFocused:R,validate:I,validationMode:u,validationDebounceTime:t,shouldValidateOnChange:X,state:ab,markedDirtyRef:U,validation:ac}),[Z,w,$,J,T,W,S,V,O,P,Q,R,I,u,t,X,ab,ac]),af=(0,x.useRenderElement)("div",a,{ref:b,state:ab,props:G,stateAttributesMapping:l});return(0,c.jsx)(m.Provider,{value:ae,children:af})}),C=d.forwardRef(function(a,b){return(0,c.jsx)(w,{children:(0,c.jsx)(B,{...a,ref:b})})});var D=a.i(26476),E=a.i(632),F=a.i(6239),G=a.i(17585);function H(a,b){let c=(0,t.useBaseUiId)(a);return(0,G.useIsoLayoutEffect)(()=>(b(c),()=>{b(void 0)}),[c,b]),c}a.s(["useRegisteredLabelId",0,H],67669);let I=d.forwardRef(function(a,b){let{render:c,className:f,id:g,nativeLabel:h=!0,...i}=a,j=n(!1),{labelId:k}=v(),m=d.useRef(null),o=function(a={}){let{id:b,fallbackControlId:c,native:d=!1,setLabelId:f,focusControl:g}=a,{controlId:h,setLabelId:i}=v(),j=H(b,(0,e.useStableCallback)(a=>{i(a),f?.(a)})),k=h??c;function l(a){let b=(0,F.getTarget)(a.nativeEvent);b?.closest("button,input,select,textarea")||(!a.defaultPrevented&&a.detail>1&&a.preventDefault(),d||function(a){if(g)return g(a,k);if(!k)return;let b=(0,E.ownerDocument)(a.currentTarget).getElementById(k);(0,D.isHTMLElement)(b)&&b.focus({focusVisible:!0})}(a))}return d?{id:j,htmlFor:k??void 0,onMouseDown:l}:{id:j,onClick:l,onPointerDown(a){a.preventDefault()}}}({id:k??g,native:h});return(0,x.useRenderElement)("label",a,{ref:[b,m],state:j.state,props:[o,i],stateAttributesMapping:l})});var J=a.i(2471),K=a.i(58418),L=a.i(77717);let M={...l,...K.transitionStatusMapping},N=d.forwardRef(function(a,b){let{render:e,id:f,className:g,match:h,...i}=a,j=(0,t.useBaseUiId)(f),{validityData:k,state:l,name:m}=n(!1),{setMessageIds:o}=v(),{errors:p}=q(),r=m?p[m]:null,s=!1;s=!!r||!0===h||(h?!!k.state[h]:!1===k.state.valid);let{mounted:u,transitionStatus:w,setMounted:y}=(0,L.useTransitionStatus)(s);(0,G.useIsoLayoutEffect)(()=>{if(s&&j)return o(a=>a.concat(j)),()=>{o(a=>a.filter(a=>a!==j))}},[s,j,o]);let z=d.useRef(null),[A,B]=d.useState(null),[C,D]=d.useState(null),E=r||(k.errors.length>1?(0,c.jsx)("ul",{children:k.errors.map(a=>(0,c.jsx)("li",{children:a},a))}):k.error),F=k.error;null!=r?F=Array.isArray(r)?JSON.stringify(r):r:k.errors.length>1&&(F=JSON.stringify(k.errors)),s&&F!==C&&(D(F),B(E)),(0,J.useOpenChangeComplete)({open:s,ref:z,onComplete(){s||y(!1)}});let H={...l,transitionStatus:w},I=(0,x.useRenderElement)("div",a,{ref:[b,z],state:H,props:[{id:j,children:s?E:A},i],stateAttributesMapping:M,enabled:u});return u?I:null}),O=d.forwardRef(function(a,b){let{render:c,id:d,className:e,...f}=a,g=(0,t.useBaseUiId)(d),h=n(!1),{setMessageIds:i}=v();return(0,G.useIsoLayoutEffect)(()=>{if(g)return i(a=>a.concat(g)),()=>{i(a=>a.filter(a=>a!==g))}},[g,i]),(0,x.useRenderElement)("p",a,{ref:b,state:h.state,props:[{id:g},f],stateAttributesMapping:l})});function P({controlled:a,default:b,name:c,state:e="value"}){let{current:f}=d.useRef(void 0!==a),[g,h]=d.useState(b),i=d.useCallback(a=>{f||h(a)},[]);return[f?a:g,i]}a.s(["useControlled",0,P],52034);var Q=a.i(35112),R=a.i(62255),S=a.i(74348);let T=d.forwardRef(function(a,b){let{render:c,className:f,id:h,name:i,value:j,disabled:k=!1,onValueChange:m,defaultValue:o,autoFocus:p=!1,...s}=a,{state:u,name:w,disabled:y,setTouched:A,setDirty:B,validityData:C,setFocused:H,setFilled:I,validationMode:J,validation:K}=n(),L=y||k,M=w??i,N={...u,disabled:L},{labelId:O}=v(),T=function(a={}){let{id:b,implicit:c=!1,controlRef:f}=a,{controlId:h,registerControlId:i}=v(),j=(0,t.useBaseUiId)(b),k=c?h:void 0,l=(0,r.useRefWithInit)(()=>Symbol("labelable-control")),m=d.useRef(!1),n=d.useRef(null!=b),o=(0,e.useStableCallback)(()=>{m.current&&i!==g.NOOP&&(m.current=!1,i(l.current,void 0))});return(0,G.useIsoLayoutEffect)(()=>{let a;if(i!==g.NOOP){if(c){let c=f?.current;a=(0,D.isElement)(c)&&null!=c.closest("label")?b??null:k??j}else if(null!=b)n.current=!0,a=b;else{if(!n.current)return void o();a=j}if(void 0===a)return void o();m.current=!0,i(l.current,a)}},[b,f,k,i,c,j,l,o]),d.useEffect(()=>o,[o]),h??j}({id:h});(0,G.useIsoLayoutEffect)(()=>{let a=null!=j;K.inputRef.current?.value||a&&""!==j?I(!0):a&&""===j&&I(!1)},[K.inputRef,I,j]);let U=d.useRef(null);(0,G.useIsoLayoutEffect)(()=>{p&&U.current===(0,F.activeElement)((0,E.ownerDocument)(U.current))&&H(!0)},[p,H]);let[V]=P({controlled:j,default:o,name:"FieldControl",state:"value"}),W=void 0!==j,X=W?V:void 0;return!function(a){let{enabled:b=!0,value:c,id:d,name:f,controlRef:g,commit:h}=a,{formRef:i}=q(),{invalid:j,markedDirtyRef:k,validityData:l,setValidityData:m}=n(),o=(0,e.useStableCallback)(a.getValue);(0,G.useIsoLayoutEffect)(()=>{if(!b)return;let a=c;void 0===a&&(a=o()),null===l.initialValue&&null!==a&&m(b=>({...b,initialValue:a}))},[b,m,c,l.initialValue,o]),(0,G.useIsoLayoutEffect)(()=>{b&&d&&i.current.fields.set(d,{getValue:o,name:f,controlRef:g,validityData:z(l,j),validate(a=!0){let b=c;void 0===b&&(b=o()),k.current=!0,a?Q.flushSync(()=>h(b)):h(b)}})},[h,g,b,i,o,d,j,k,f,l,c]),(0,G.useIsoLayoutEffect)(()=>{let a=i.current.fields;return()=>{d&&a.delete(d)}},[i,d])}({id:T,name:M,commit:K.commit,value:X,getValue:()=>K.inputRef.current?.value,controlRef:K.inputRef}),(0,x.useRenderElement)("input",a,{ref:[b,U],state:N,props:[{id:T,disabled:L,name:M,ref:K.inputRef,"aria-labelledby":O,autoFocus:p,...W?{value:X}:{defaultValue:o},onChange(a){let b=a.currentTarget.value;m?.(b,(0,R.createChangeEventDetails)(S.REASONS.none,a.nativeEvent)),B(b!==C.initialValue),I(""!==b)},onFocus(){H(!0)},onBlur(a){A(!0),H(!1),"onBlur"===J&&K.commit(a.currentTarget.value)},onKeyDown(a){"INPUT"===a.currentTarget.tagName&&"Enter"===a.key&&(A(!0),K.commit(a.currentTarget.value))}},K.getInputValidationProps(),s],stateAttributesMapping:l})}),U=d.createContext({disabled:!1}),V=d.createContext(void 0),W=d.forwardRef(function(a,b){let{render:e,className:g,disabled:h=!1,...i}=a,{state:j,disabled:k}=n(!1),m=k||h,o=function(a=!0){let b=d.useContext(V);if(void 0===b&&!a)throw Error((0,f.default)(3));return b}(),p=o?.parent.id,q=o?.allValues!==void 0,r=d.useMemo(()=>({disabled:m}),[m]),s=(0,x.useRenderElement)("div",a,{ref:b,state:j,props:i,stateAttributesMapping:l});return(0,c.jsx)(w,{controlId:q?p:void 0,children:(0,c.jsx)(U.Provider,{value:r,children:s})})});a.s(["Control",0,T,"Description",0,O,"Error",0,N,"Item",0,W,"Label",0,I,"Root",0,C,"Validity",0,function(a){let{children:b}=a,{validityData:e,invalid:f}=n(!1),g=d.useMemo(()=>z(e,f),[e,f]),h=!1===g.state.valid,{transitionStatus:i}=(0,L.useTransitionStatus)(h),j=d.useMemo(()=>({...g,validity:g.state,transitionStatus:i}),[g,i]);return(0,c.jsx)(d.Fragment,{children:b(j)})}],12944);var X=a.i(12944),X=X;let Y=d.forwardRef(function(a,b){return(0,c.jsx)(X.Control,{ref:b,...a})});var Z=a.i(760);a.s(["Input",0,function({className:a,type:b,...d}){return(0,c.jsx)(Y,{type:b,"data-slot":"input",className:(0,Z.cn)("h-9 w-full min-w-0 rounded-md border border-input bg-input/20 px-3 py-1 text-sm transition-colors outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",a),...d})}],28503)},97463,a=>{"use strict";var b=a.i(87924),c=a.i(760);a.s(["Textarea",0,function({className:a,...d}){return(0,b.jsx)("textarea",{"data-slot":"textarea",className:(0,c.cn)("flex field-sizing-content min-h-16 w-full resize-none rounded-md border border-input bg-input/20 px-2 py-2 text-sm transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 md:text-xs/relaxed dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",a),...d})}])},77156,a=>{"use strict";let b=(0,a.i(60137).default)("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);a.s(["Eye",0,b],77156)},81560,a=>{"use strict";let b=(0,a.i(60137).default)("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]);a.s(["Trash2",0,b],81560)},67453,a=>{"use strict";var b=a.i(67511);a.s(["CheckCircle2",()=>b.default])},65025,a=>{"use strict";var b,c=a.i(87924);a.s([],5993),a.i(5993);var d=a.i(72131),e=a.i(35850),f=a.i(49538);let g=new Map;function h(a,b,c){return null==a?"":(function(a,b){let c=JSON.stringify({locale:a,options:b}),d=g.get(c);if(d)return d;let e=new Intl.NumberFormat(a,b);return g.set(c,e),e})(b,c).format(a)}var i=a.i(2840),j=a.i(21376);let k=d.createContext(void 0);function l(){let a=d.useContext(k);if(void 0===a)throw Error((0,j.default)(51));return a}let m=((b={}).complete="data-complete",b.indeterminate="data-indeterminate",b.progressing="data-progressing",b),n={status:a=>"progressing"===a?{[m.progressing]:""}:"complete"===a?{[m.complete]:""}:"indeterminate"===a?{[m.indeterminate]:""}:null};function o(a,b){return null==b?"indeterminate progress":a||`${b}%`}let p=d.forwardRef(function(a,b){var g;let{format:j,getAriaValueText:l=o,locale:m,max:p=100,min:q=0,value:r,render:s,className:t,children:u,...v}=a,[w,x]=d.useState(),y=(0,e.useValueAsRef)(j),z="indeterminate";Number.isFinite(r)&&(z=r===p?"complete":"progressing");let A=(g=y.current,null==r?"":g?h(r,m,g):h(r/100,m,{style:"percent"})),B=d.useMemo(()=>({status:z}),[z]),C={"aria-labelledby":w,"aria-valuemax":p,"aria-valuemin":q,"aria-valuenow":r??void 0,"aria-valuetext":l(A,r),role:"progressbar",children:(0,c.jsxs)(d.Fragment,{children:[u,(0,c.jsx)("span",{role:"presentation",style:f.visuallyHidden,children:"x"})]})},D=d.useMemo(()=>({formattedValue:A,max:p,min:q,setLabelId:x,state:B,status:z,value:r}),[A,p,q,x,B,z,r]),E=(0,i.useRenderElement)("div",a,{state:B,ref:b,props:[C,v],stateAttributesMapping:n});return(0,c.jsx)(k.Provider,{value:D,children:E})}),q=d.forwardRef(function(a,b){let{render:c,className:d,...e}=a,{state:f}=l();return(0,i.useRenderElement)("div",a,{state:f,ref:b,props:e,stateAttributesMapping:n})}),r=d.forwardRef(function(a,b){let{render:c,className:e,...f}=a,{max:g,min:h,value:j,state:k}=l(),m=Number.isFinite(j)&&null!==j?(j-h)*100/(g-h):null,o=d.useCallback(()=>null==m?{}:{insetInlineStart:0,height:"inherit",width:`${m}%`},[m]);return(0,i.useRenderElement)("div",a,{state:k,ref:b,props:[{style:o()},f],stateAttributesMapping:n})}),s=d.forwardRef(function(a,b){let{className:c,render:d,children:e,...f}=a,{value:g,formattedValue:h,state:j}=l(),k=null==g?"indeterminate":h,m=null==g?null:h;return(0,i.useRenderElement)("span",a,{state:j,ref:b,props:[{"aria-hidden":!0,children:"function"==typeof e?e(k,g):m},f],stateAttributesMapping:n})});var t=a.i(67669);let u=d.forwardRef(function(a,b){let{render:c,className:d,id:e,...f}=a,{setLabelId:g,state:h}=l(),j=(0,t.useRegisteredLabelId)(e,g);return(0,i.useRenderElement)("span",a,{state:h,ref:b,props:[{id:j,role:"presentation"},f],stateAttributesMapping:n})});a.s(["Indicator",0,r,"Label",0,u,"Root",0,p,"Track",0,q,"Value",0,s],85806);var v=a.i(85806),v=v,w=a.i(760);function x({className:a,...b}){return(0,c.jsx)(v.Track,{className:(0,w.cn)("relative flex h-1 w-full items-center overflow-x-hidden rounded-md bg-muted",a),"data-slot":"progress-track",...b})}function y({className:a,...b}){return(0,c.jsx)(v.Indicator,{"data-slot":"progress-indicator",className:(0,w.cn)("h-full bg-primary",a),style:{transition:"width 500ms ease-in-out"},...b})}a.s(["Progress",0,function({className:a,children:b,value:d,...e}){return(0,c.jsxs)(v.Root,{value:d,"data-slot":"progress",className:(0,w.cn)("flex flex-wrap gap-3",a),...e,children:[b,(0,c.jsx)(x,{children:(0,c.jsx)(y,{})})]})}],65025)},82434,a=>{"use strict";let b=(0,a.i(60137).default)("bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);a.s(["Bot",0,b],82434)},92e3,a=>{"use strict";let b=(0,a.i(60137).default)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);a.s(["AlertCircle",0,b],92e3)},4975,48124,a=>{"use strict";var b=a.i(60137);let c=(0,b.default)("mic",[["path",{d:"M12 19v3",key:"npa21l"}],["path",{d:"M19 10v2a7 7 0 0 1-14 0v-2",key:"1vc78b"}],["rect",{x:"9",y:"2",width:"6",height:"13",rx:"3",key:"s6n7sd"}]]);a.s(["Mic",0,c],4975);let d=(0,b.default)("square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);a.s(["Square",0,d],48124)},6828,a=>{"use strict";var b=a.i(23292);function c(a){let{type:c,title:d,description:e,duration:f}=a,g=a.id??crypto.randomUUID(),h={id:g,description:e,duration:f};switch(c){case"loading":b.toast.loading(d,h);break;case"success":b.toast.success(d,h);break;case"error":b.toast.error(d,h);break;case"warning":b.toast.warning(d,h);break;case"info":b.toast.info(d,h);break;default:(0,b.toast)(d,h)}return g}a.s(["toaster",0,{create:a=>c(a),update:(a,b)=>{c({...b,id:a})},dismiss:a=>{b.toast.dismiss(a)}}])},36620,a=>{"use strict";let b=(0,a.i(60137).default)("circle-question-mark",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);a.s(["CircleHelp",0,b],36620)},92552,a=>{"use strict";var b=a.i(87924),c=a.i(760);a.s(["Card",0,function({className:a,size:d="default",...e}){return(0,b.jsx)("div",{"data-slot":"card","data-size":d,className:(0,c.cn)("group/card flex flex-col gap-4 overflow-hidden rounded-lg bg-card py-4 text-xs/relaxed text-card-foreground ring-1 ring-foreground/10 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 *:[img:first-child]:rounded-t-lg *:[img:last-child]:rounded-b-lg",a),...e})},"CardContent",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-content",className:(0,c.cn)("px-4 group-data-[size=sm]/card:px-3",a),...d})},"CardDescription",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-description",className:(0,c.cn)("text-xs/relaxed text-muted-foreground",a),...d})},"CardHeader",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-header",className:(0,c.cn)("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-lg px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3",a),...d})},"CardTitle",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-title",className:(0,c.cn)("font-heading text-sm font-medium",a),...d})}])},56026,19768,a=>{"use strict";a.s(["LLM_SYSTEM_PROMPT_STORAGE_KEY",()=>z,"VoiceInputButton",()=>B,"WHISPER_PROMPT_STORAGE_KEY",()=>y],56026);var b=a.i(87924),c=a.i(72131),d=a.i(96221),e=a.i(4975),f=a.i(48124),g=a.i(39524),h=a.i(91399),i=a.i(6828);a.s(["LOCAL_LLM_ENABLED_STORAGE_KEY",()=>s,"LocalLlmSection",()=>x],19768);var j=a.i(92e3),k=a.i(82434),l=a.i(67453),m=a.i(36620),n=a.i(92552),o=a.i(90002),p=a.i(65025),q=a.i(97463);let r="tsunagi:local-llm-enabled",s=r,t={not_running:"停止中",installing_deps:"依存関係をインストール中...",downloading_model:"モデルをダウンロード中...",starting_server:"サーバーを起動中... (モデルのロードに数十秒かかる場合があります)",running:"実行中",running_external:"実行中 (tsunagi外で起動)",error:"エラー"},u=["installing_deps","downloading_model","starting_server"],v=["running","running_external"];function w(a){let b=a/0x40000000;return b>=.1?`${b.toFixed(2)} GB`:`${(a/1048576).toFixed(0)} MB`}function x(){let[a,e]=(0,c.useState)(!1),[s,x]=(0,c.useState)(!1),[y,A]=(0,c.useState)(null),[B,C]=(0,c.useState)(""),D=(0,c.useRef)(null),E=(0,c.useCallback)(a=>{e(a),localStorage.setItem(r,String(a))},[]),F=(0,c.useCallback)(a=>{C(a),localStorage.setItem(z,a)},[]),G=(0,c.useCallback)(async()=>{let a=await fetch((0,h.apiUrl)("/api/llm/server/status")),b=await a.json();return A(b),b},[]);(0,c.useEffect)(()=>{e("true"===localStorage.getItem(r)),C(localStorage.getItem(z)??""),G()},[G]),(0,c.useEffect)(()=>{y&&v.includes(y.step)&&!a&&(E(!0),i.toaster.create({type:"success",title:"ローカルLLMが有効化されました"}))},[y,a,E]),(0,c.useEffect)(()=>(y&&u.includes(y.step)&&!D.current&&(D.current=setInterval(()=>{G().then(a=>{!u.includes(a.step)&&D.current&&(clearInterval(D.current),D.current=null)})},1e3)),()=>{D.current&&(clearInterval(D.current),D.current=null)}),[y,G]);let H=(0,c.useCallback)(()=>{G(),x(!0)},[G]),I=(0,c.useCallback)(async()=>{try{let a=await fetch((0,h.apiUrl)("/api/llm/server/start"),{method:"POST"});if(!a.ok){let b=await a.json().catch(()=>null);throw Error(b?.error||`HTTPエラー: ${a.status}`)}A(await a.json())}catch(a){i.toaster.create({type:"error",title:"サーバーの起動に失敗しました",description:a instanceof Error?a.message:String(a)})}},[]),J=(0,c.useCallback)(async()=>{try{let a=await fetch((0,h.apiUrl)("/api/llm/server/stop"),{method:"POST"});if(!a.ok){let b=await a.json().catch(()=>null);throw Error(b?.error||`HTTPエラー: ${a.status}`)}A(await a.json())}catch(a){i.toaster.create({type:"error",title:"サーバーの停止に失敗しました",description:a instanceof Error?a.message:String(a)})}},[]),K=(0,c.useCallback)(()=>{E(!1),y&&v.includes(y.step)&&J()},[E,J,y]),L=y?.serverDir,M=y?.downloadProgress,N=M?M.downloadedBytes/M.totalBytes*100:0,O=null!==y,P=O&&v.includes(y.step);return(0,b.jsxs)(n.Card,{children:[(0,b.jsxs)(n.CardHeader,{children:[(0,b.jsxs)("div",{className:"flex items-center gap-1",children:[(0,b.jsx)(n.CardTitle,{children:"ローカルLLM (実験的機能)"}),(0,b.jsx)(g.Button,{variant:"ghost",size:"icon-sm",onClick:H,title:"ローカルLLMについて",children:(0,b.jsx)(m.CircleHelp,{})})]}),(0,b.jsxs)(n.CardDescription,{children:["ローカルで動作するLLM(Qwen3-30B-A3B, MoE)を利用します。",(0,b.jsx)("strong",{className:"font-medium text-foreground",children:"有効にすると、音声入力の文字起こし結果がこのLLMで自動整形されるようになります"}),"(無効時は文字起こし結果をそのまま使用)。"]})]}),(0,b.jsx)(n.CardContent,{className:"flex flex-col gap-3",children:a?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[O?P?(0,b.jsxs)("span",{className:"flex items-center gap-2 text-success",children:[(0,b.jsx)(l.CheckCircle2,{className:"size-4"}),"ローカルLLM: 有効"]}):(0,b.jsxs)("span",{className:"flex items-center gap-2 text-warning",children:[(0,b.jsx)(j.AlertCircle,{className:"size-4"}),"ローカルLLM: 有効化済み(サーバー停止中)"]}):(0,b.jsxs)("span",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,b.jsx)(d.Loader2,{className:"size-4 animate-spin"}),"状態を確認中..."]}),y&&(0,b.jsxs)("span",{className:"text-xs/relaxed text-muted-foreground",children:["(",t[y.step],")"]}),O&&!P&&(0,b.jsxs)(g.Button,{size:"default",onClick:H,children:[(0,b.jsx)(k.Bot,{}),"サーバーを起動"]}),(0,b.jsx)(g.Button,{size:"default",variant:"outline",onClick:K,children:"無効にする"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"mb-1 block text-xs font-medium text-muted-foreground",children:"整形システムプロンプト (任意)"}),(0,b.jsx)(q.Textarea,{value:B,onChange:a=>F(a.target.value),placeholder:"例: 句読点の追加と誤字修正のみ行い、言い回しは変えないでください。",className:"min-h-16 text-xs"}),(0,b.jsx)("p",{className:"mt-1 text-[0.65rem] text-muted-foreground",children:"文字起こし結果をLLMで整形する際の指示です。空欄の場合は既定のプロンプト(句読点の追加・誤字修正のみを行う指示)を使用します。"})]})]}):(0,b.jsxs)(g.Button,{size:"default",onClick:H,children:[(0,b.jsx)(k.Bot,{}),"ローカルLLMを有効化する"]})}),(0,b.jsx)(o.Dialog,{open:s,onOpenChange:({open:a})=>x(a),title:"ローカルLLMについて",maxWidth:"2xl",children:(0,b.jsxs)("div",{className:"space-y-4 text-sm",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"font-medium text-foreground",children:"実験的機能です"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"音声入力の文字起こし結果を、ローカルで動作するLLM(mlx-lm / Qwen3-30B-A3B, MoE構成)で整形します。MoE構成のため実計算に使うアクティブパラメータは約3Bで、denseな同規模モデルより高速に動作します。精度・速度は環境に依存し、今後変更される可能性があります。"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"font-medium text-foreground",children:"対応環境"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"Apple Silicon Mac (M1/M2/M3/M4) のみ対応。Windows/Linuxでは利用できません。メモリ32GB以上を推奨します。"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"font-medium text-foreground",children:"必要なもの(事前に手動でインストール)"}),(0,b.jsx)("ul",{className:"list-disc pl-5 text-muted-foreground",children:(0,b.jsx)("li",{children:"Python 3.9以降(Xcode Command Line Tools または Homebrew経由で入手可能)"})})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"mb-1 font-medium text-foreground",children:"セットアップ・起動"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"下のボタンから、依存関係のインストール・モデルのダウンロード・サーバー起動まで自動で行われます(初回はモデルサイズが大きく数分〜数十分かかります)。"}),y&&!L&&(0,b.jsx)("p",{className:"mt-1 text-destructive",children:"llm-serverが見つかりませんでした。インストールが壊れている可能性があります。"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"mb-1 font-medium text-foreground",children:"アンインストール"}),(0,b.jsxs)("p",{className:"text-muted-foreground",children:["ローカルLLMのためにダウンロードされるもの(Pythonの依存関係・LLMモデル、合計約17GB)は全て",(0,b.jsx)("code",{className:"rounded bg-muted px-1",children:"~/.tsunagi/llm"}),"に保存されます。不要になった場合はこのディレクトリを削除するだけで、関連リソースを完全に削除できます。"]})]}),(0,b.jsxs)("div",{className:"border-t border-border pt-4",children:[(!y||"not_running"===y.step||"error"===y.step)&&(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)(g.Button,{size:"default",onClick:()=>void I(),disabled:!y,children:[y?(0,b.jsx)(k.Bot,{}):(0,b.jsx)(d.Loader2,{className:"animate-spin"}),"LLMサーバーを起動"]}),y?.step==="error"&&y.error&&(0,b.jsx)("p",{className:"text-xs/relaxed text-destructive",children:y.error})]}),y?.step==="installing_deps"&&(0,b.jsxs)(g.Button,{size:"default",disabled:!0,children:[(0,b.jsx)(d.Loader2,{className:"animate-spin"}),"依存関係をインストール中... (数分かかる場合があります)"]}),y?.step==="downloading_model"&&(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs/relaxed text-muted-foreground",children:[(0,b.jsx)(d.Loader2,{className:"size-4 animate-spin"}),"モデルをダウンロード中... (約17GB)"]}),M&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(p.Progress,{value:N}),(0,b.jsxs)("p",{className:"text-xs/relaxed text-muted-foreground",children:[w(M.downloadedBytes)," / ",w(M.totalBytes)," (",N.toFixed(0),"%) ・ ",function(a){if(null===a)return"残り時間を計算中...";if(a<60)return`残り約${a}秒`;let b=Math.floor(a/60);return`残り約${b}分${a%60}秒`}(M.etaSeconds)]})]})]}),y?.step==="starting_server"&&(0,b.jsxs)(g.Button,{size:"default",disabled:!0,children:[(0,b.jsx)(d.Loader2,{className:"animate-spin"}),"サーバーを起動中... (モデルのロードに数十秒かかる場合があります)"]}),y&&v.includes(y.step)&&(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsxs)("span",{className:"flex items-center gap-2 text-success",children:[(0,b.jsx)(l.CheckCircle2,{className:"size-4"}),"サーバーは起動しています"]}),(0,b.jsxs)(g.Button,{size:"default",variant:"outline",onClick:()=>void J(),children:[(0,b.jsx)(f.Square,{}),"サーバーを停止"]})]})]})]})})]})}let y="tsunagi:whisper-prompt",z="tsunagi:llm-system-prompt",A=["running","running_external"];function B({onTranscribed:a}){let[j,k]=(0,c.useState)(!1),[l,m]=(0,c.useState)("idle"),[n,o]=(0,c.useState)(0),[p,q]=(0,c.useState)(null),r=(0,c.useRef)(null),t=(0,c.useRef)([]),u=(0,c.useRef)(null),v=(0,c.useRef)(null),w=(0,c.useRef)(null),x=(0,c.useRef)(0),C=(0,c.useRef)(0);(0,c.useEffect)(()=>{k("true"===localStorage.getItem("tsunagi:voice-input-enabled"))},[]),(0,c.useEffect)(()=>{if(!j)return;let a=!1,b=async()=>{try{let b=await fetch((0,h.apiUrl)("/api/whisper/server/status")),c=await b.json();a||q(c.step)}catch{a||q("not_running")}};b();let c=setInterval(b,5e3);return()=>{a=!0,clearInterval(c)}},[j]);let D=(0,c.useCallback)(()=>{w.current&&(clearInterval(w.current),w.current=null),v.current?.close(),v.current=null,o(0)},[]);(0,c.useEffect)(()=>()=>{D()},[D]);let E=(0,c.useCallback)(a=>{let b=new AudioContext,c=b.createMediaStreamSource(a),d=b.createAnalyser();d.fftSize=2048,c.connect(d),v.current=b,x.current=0,C.current=0;let e=new Float32Array(d.fftSize);w.current=setInterval(()=>{d.getFloatTimeDomainData(e);let a=0;for(let b=0;b<e.length;b++)a+=e[b]*e[b];let b=Math.sqrt(a/e.length),c=Math.min(1,Math.max(0,((b>0?20*Math.log10(b):-60)- -60)/50));C.current=Math.max(C.current,c),x.current=.3*x.current+.7*c,o(x.current)},50)},[]),F=(0,c.useCallback)(async b=>{m("transcribing");try{let c=new FormData,d=localStorage.getItem(y);d&&c.append("prompt",d);let e="true"===localStorage.getItem(s);c.append("useLlm",String(e));let f=localStorage.getItem(z);f&&c.append("systemPrompt",f),c.append("file",b,"recording.webm");let g=await fetch((0,h.apiUrl)("/api/whisper/transcribe"),{method:"POST",body:c});if(!g.ok){let a=await g.json().catch(()=>null);throw Error(a?.error||`HTTPエラー: ${g.status}`)}let j=await g.json();j.warning&&i.toaster.create({type:"error",title:"LLM整形をスキップしました",description:j.warning}),j.text&&a(j.text)}catch(a){i.toaster.create({type:"error",title:"文字起こしに失敗しました",description:a instanceof Error?a.message:String(a)})}finally{m("idle")}},[a]),G=(0,c.useCallback)(async()=>{try{let a=await navigator.mediaDevices.getUserMedia({audio:!0});u.current=a,t.current=[],E(a);let b=new MediaRecorder(a,{audioBitsPerSecond:128e3});b.ondataavailable=a=>{a.data.size>0&&t.current.push(a.data)},b.onstop=()=>{u.current?.getTracks().forEach(a=>a.stop()),u.current=null;let a=C.current;if(D(),a<.15){i.toaster.create({type:"error",title:"音声が検出されませんでした",description:"マイクに向かって話してから、もう一度お試しください。"}),m("idle");return}let b=new Blob(t.current,{type:"audio/webm"});F(b)},r.current=b,b.start(),m("recording")}catch(a){i.toaster.create({type:"error",title:"マイクにアクセスできませんでした",description:a instanceof Error?a.message:String(a)})}},[F,E,D]),H=(0,c.useCallback)(()=>{r.current?.stop()},[]);if(!j)return null;let I=null!==p&&A.includes(p);return(0,b.jsxs)("div",{className:"recording"===l?"inline-flex items-center gap-2 rounded-md bg-destructive/10 p-1":"inline-flex",children:[(0,b.jsx)(g.Button,{size:"icon",variant:"recording"===l?"destructive":"default",onClick:"recording"===l?H:()=>void G(),disabled:"transcribing"===l||"idle"===l&&!I,title:"recording"===l?"停止して入力":"idle"!==l||I?"音声入力":"Whisperサーバーが起動していません(Settingsから起動してください)",children:"transcribing"===l?(0,b.jsx)(d.Loader2,{className:"w-4 h-4 animate-spin"}):"recording"===l?(0,b.jsx)(f.Square,{className:"w-4 h-4"}):(0,b.jsx)(e.Mic,{className:"w-4 h-4"})}),"recording"===l&&(0,b.jsx)("div",{"aria-hidden":!0,className:"h-1.5 w-16 overflow-hidden rounded-full bg-background/60",children:(0,b.jsx)("div",{className:"h-full rounded-full bg-destructive",style:{width:`${Math.round(100*n)}%`}})})]})}},78512,a=>{"use strict";var b=a.i(72131);a.s(["useDocumentTitle",0,function(a){(0,b.useEffect)(()=>{let b=a?`繋 | ${a}`:"繋",c=document.title;return document.title=b,()=>{document.title=c}},[a])}])}];
|
|
5
5
|
|
|
6
6
|
//# sourceMappingURL=_0amxree._.js.map
|
|
@@ -2,6 +2,6 @@ module.exports=[40006,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(50944
|
|
|
2
2
|
flex items-center gap-2 px-2 py-1.5 rounded cursor-pointer
|
|
3
3
|
transition-colors
|
|
4
4
|
${c?"bg-accent":"hover:bg-accent"}
|
|
5
|
-
`,style:{paddingLeft:`${16*e+8}px`},children:[o&&(0,b.jsx)(m.Button,{variant:"ghost",size:"icon-xs",onClick:a=>{a.stopPropagation(),g&&g()},className:"size-4",children:d?(0,b.jsx)(l,{className:"w-3 h-3 text-muted-foreground"}):(0,b.jsx)(k.default,{className:"w-3 h-3 text-muted-foreground"})}),!o&&(0,b.jsx)("div",{className:"w-3"}),(0,b.jsx)("div",{className:"text-foreground",children:(()=>{switch(a.type){case"global":return(0,b.jsx)(h,{className:"w-4 h-4"});case"owner":return(0,b.jsx)(i,{className:"w-4 h-4"});case"repo":return(0,b.jsx)(j.GitBranch,{className:"w-4 h-4"})}})()}),(0,b.jsx)("span",{className:"text-sm text-foreground truncate",children:a.label})]})}function o({selectedNode:a,onNodeSelect:d,refreshKey:e}){let[g,h]=(0,c.useState)([]),[i,j]=(0,c.useState)(new Set),[k,l]=(0,c.useState)(!0);(0,c.useEffect)(()=>{let a=localStorage.getItem("tsunagi:env-tree-expanded");if(a)try{let b=JSON.parse(a);j(new Set(b))}catch(a){console.error("Failed to parse expanded owners:",a)}},[]),(0,c.useEffect)(()=>{localStorage.setItem("tsunagi:env-tree-expanded",JSON.stringify([...i]))},[i]),(0,c.useEffect)(()=>{(async()=>{l(!0);try{let a=await fetch((0,f.apiUrl)("/api/owners"));if(!a.ok)throw Error("Failed to fetch owners");let b=((await a.json()).data.owners||[]).map(a=>({id:`owner:${a.name}`,type:"owner",label:a.name,scope:"owner",owner:a.name,children:a.repositories.map(a=>({id:`repo:${a.owner}/${a.repo}`,type:"repo",label:a.repo,scope:"repo",owner:a.owner,repo:a.repo}))}));h([{id:"global",type:"global",label:"Global",scope:"global"},...b])}catch(a){console.error("Failed to load tree:",a)}finally{l(!1)}})()},[e]);let m=(c,e=0)=>{let f=a?.scope===c.scope&&a?.owner===c.owner&&a?.repo===c.repo,g=i.has(c.id);return(0,b.jsxs)("div",{children:[(0,b.jsx)(n,{node:c,isSelected:f,isExpanded:g,depth:e,onSelect:()=>{d({scope:c.scope,owner:c.owner,repo:c.repo,label:c.label})},onToggle:()=>{var a;return a=c.id,void j(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c})}}),g&&c.children?.map(a=>m(a,e+1))]},c.id)};return k?(0,b.jsx)("div",{className:"p-4 text-muted-foreground text-sm",children:"Loading..."}):0===g.length?(0,b.jsx)("div",{className:"p-4 text-muted-foreground text-sm",children:"No repositories found"}):(0,b.jsx)("div",{className:"h-full overflow-y-auto",children:(0,b.jsx)("div",{className:"p-2",children:g.map(a=>m(a))})})}var p=a.i(15618),q=a.i(33508),r=a.i(33441),s=a.i(77156);let t=(0,g.default)("eye-off",[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);var u=a.i(81560),v=a.i(99464),w=a.i(28503);function x({variable:a,onToggle:d,onDelete:e,onUpdate:f,isDeletable:g=!0}){let[h,i]=(0,c.useState)(!1),[j,k]=(0,c.useState)(!1),[l,n]=(0,c.useState)(!1),[o,p]=(0,c.useState)(a.value),y=async b=>{k(!0);try{await d(a.key,b.target.checked)}finally{k(!1)}},z=async()=>{await e(a.key)},A=async()=>{try{await f(a.key,o),n(!1)}catch(a){console.error("Failed to update variable:",a),alert("Failed to update variable")}};return(0,b.jsxs)("div",{className:"border border-border rounded p-3 space-y-2",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("span",{className:"text-sm font-mono text-foreground",children:a.key}),!l&&(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsxs)("label",{className:"flex items-center gap-2 cursor-pointer",children:[(0,b.jsx)("input",{type:"checkbox",checked:a.enabled,onChange:y,disabled:j,className:"w-4 h-4 cursor-pointer"}),(0,b.jsx)("span",{className:"text-xs text-muted-foreground",children:"Enabled"})]}),(0,b.jsx)(m.Button,{variant:"ghost",size:"icon-lg",onClick:()=>i(!h),title:h?"Hide value":"Show value",children:h?(0,b.jsx)(t,{className:"w-4 h-4 text-muted-foreground"}):(0,b.jsx)(s.Eye,{className:"w-4 h-4 text-muted-foreground"})}),(0,b.jsx)(m.Button,{variant:"ghost",size:"icon-lg",onClick:()=>{n(!0),p(a.value)},title:"Edit",children:(0,b.jsx)(v.Pencil,{className:"w-4 h-4 text-muted-foreground"})}),g&&(0,b.jsx)(m.Button,{variant:"ghost",size:"icon-lg",onClick:z,title:"Delete",children:(0,b.jsx)(u.Trash2,{className:"w-4 h-4 text-destructive"})})]})]}),l?(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsx)(w.Input,{type:"password",value:o,onChange:a=>p(a.target.value),className:"w-full font-mono",autoFocus:!0}),(0,b.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,b.jsx)(m.Button,{variant:"outline",size:"sm",onClick:()=>{n(!1),p(a.value)},className:"active:scale-95",children:(0,b.jsx)(q.X,{className:"w-4 h-4"})}),(0,b.jsx)(m.Button,{size:"sm",onClick:A,className:"active:scale-95",children:(0,b.jsx)(r.Check,{className:"w-4 h-4"})})]})]}):(0,b.jsx)("div",{children:(0,b.jsx)(w.Input,{type:h?"text":"password",value:a.value,readOnly:!0,className:"w-full font-mono"})})]})}var y=a.i(67060);let z=["ANTHROPIC_API_KEY","CLAUDE_CODE_OAUTH_TOKEN"];function A({selectedNode:a}){let[d,e]=(0,c.useState)([]),[g,h]=(0,c.useState)(!0),[i,j]=(0,c.useState)(null),[k,l]=(0,c.useState)(!1),[n,o]=(0,c.useState)(""),[s,t]=(0,c.useState)(""),[u,v]=(0,c.useState)("");(0,c.useEffect)(()=>{(async()=>{h(!0),j(null);try{let b=new URLSearchParams({scope:a.scope});a.owner&&b.set("owner",a.owner),a.repo&&b.set("repo",a.repo);let c=await fetch((0,f.apiUrl)(`/api/env/list?${b}`));if(!c.ok)throw Error("Failed to fetch environment variables");let d=((await c.json()).data.envVars||[]).filter(a=>!z.includes(a.key));e(d)}catch(a){console.error("Failed to load environment variables:",a),j("Failed to load environment variables")}finally{h(!1)}})()},[a]);let B=async(b,c)=>{if("global"===a.scope&&!c&&("ANTHROPIC_API_KEY"===b||"CLAUDE_CODE_OAUTH_TOKEN"===b)&&!d.find(a=>a.key!==b&&("ANTHROPIC_API_KEY"===a.key||"CLAUDE_CODE_OAUTH_TOKEN"===a.key)&&a.enabled))return void alert("Cannot disable the last enabled Claude Token. Please add or enable another Claude Token first.");try{if(!(await fetch((0,f.apiUrl)("/api/env/toggle"),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:b,scope:a.scope,owner:a.owner,repo:a.repo,enabled:c})})).ok)throw Error("Failed to toggle environment variable");e(a=>a.map(a=>a.key===b?{...a,enabled:c}:a))}catch(a){console.error("Failed to toggle environment variable:",a),e(a=>a.map(a=>a.key===b?{...a,enabled:!c}:a))}},C=async b=>{if(confirm(`Delete ${b}?`))try{let c=new URLSearchParams({key:b,scope:a.scope});if(a.owner&&c.set("owner",a.owner),a.repo&&c.set("repo",a.repo),!(await fetch((0,f.apiUrl)(`/api/env?${c}`),{method:"DELETE"})).ok)throw Error("Failed to delete environment variable");e(a=>a.filter(a=>a.key!==b))}catch(a){console.error("Failed to delete environment variable:",a),alert("Failed to delete environment variable")}},D=async(b,c)=>{try{if(!(await fetch((0,f.apiUrl)("/api/env"),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:b,value:c,scope:a.scope,owner:a.owner,repo:a.repo})})).ok)throw Error("Failed to update environment variable");e(a=>a.map(a=>a.key===b?{...a,value:c}:a))}catch(a){throw console.error("Failed to update environment variable:",a),a}},E=async()=>{var b;if(v(""),!n.trim())return void v("Key is required");if(!s.trim())return void v("Value is required");if(b=n.trim(),/^[A-Z0-9_]+$/.test(b)?z.includes(b)?(v("Claude tokens should be added in the Tokens section"),!1):!d.some(a=>a.key===b)||(v(`Key "${b}" already exists in this scope`),!1):(v("Key must contain only uppercase letters, numbers, and underscores"),!1))try{if(!(await fetch((0,f.apiUrl)("/api/env"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:n.trim(),value:s.trim(),scope:a.scope,owner:a.owner,repo:a.repo})})).ok)throw Error("Failed to add environment variable");let b=new URLSearchParams({scope:a.scope});a.owner&&b.set("owner",a.owner),a.repo&&b.set("repo",a.repo);let c=await fetch((0,f.apiUrl)(`/api/env/list?${b}`));if(c.ok){let a=((await c.json()).data.envVars||[]).filter(a=>!z.includes(a.key));e(a)}l(!1),o(""),t("")}catch(a){console.error("Failed to add environment variable:",a),v("Failed to add environment variable")}};return g?(0,b.jsx)("div",{className:"h-full flex items-center justify-center",children:(0,b.jsx)(y.LoadingSpinner,{size:"md",message:"Loading variables..."})}):i?(0,b.jsx)("div",{className:"h-full flex items-center justify-center",children:(0,b.jsx)("div",{className:"text-destructive text-sm",children:i})}):(0,b.jsxs)("div",{className:"h-full flex flex-col",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,b.jsx)("h2",{className:"text-lg font-bold text-foreground",children:"Environment Variables"}),!k&&(0,b.jsxs)(m.Button,{size:"sm",onClick:()=>l(!0),className:"active:scale-95",children:[(0,b.jsx)(p.Plus,{className:"w-4 h-4"}),"Add Variable"]})]}),(0,b.jsxs)("div",{className:"flex-1 overflow-y-auto space-y-3",children:[k&&(0,b.jsxs)("div",{className:"border border-border rounded p-3 bg-accent space-y-2",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-foreground",children:"New Variable"}),(0,b.jsx)(w.Input,{type:"text",value:n,onChange:a=>o(a.target.value.toUpperCase()),placeholder:"VARIABLE_NAME",className:"w-full font-mono",autoFocus:!0}),(0,b.jsx)(w.Input,{type:"password",value:s,onChange:a=>t(a.target.value),placeholder:"value",className:"w-full font-mono"}),u&&(0,b.jsx)("div",{className:"text-xs text-destructive",children:u}),(0,b.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,b.jsx)(m.Button,{variant:"outline",size:"sm",onClick:()=>{l(!1),o(""),t(""),v("")},className:"active:scale-95",children:(0,b.jsx)(q.X,{className:"w-4 h-4"})}),(0,b.jsx)(m.Button,{size:"sm",onClick:E,className:"active:scale-95",children:(0,b.jsx)(r.Check,{className:"w-4 h-4"})})]})]}),0!==d.length||k?d.map(a=>(0,b.jsx)(x,{variable:a,onToggle:B,onDelete:C,onUpdate:D,isDeletable:!0},a.key)):(0,b.jsx)("div",{className:"text-center text-muted-foreground text-sm py-4",children:"No environment variables"})]})]})}var B=a.i(92e3);let C=["ANTHROPIC_API_KEY","CLAUDE_CODE_OAUTH_TOKEN"],D={ANTHROPIC_API_KEY:"API Key",CLAUDE_CODE_OAUTH_TOKEN:"OAuth Token"};function E(a){return a.startsWith("sk-ant-api")?"ANTHROPIC_API_KEY":a.startsWith("sk-ant-oat")?"CLAUDE_CODE_OAUTH_TOKEN":null}function F({selectedNode:a,onboardingStatus:d,onSwitchToGlobal:e}){let[g,h]=(0,c.useState)([]),[i,j]=(0,c.useState)(!0),[k,l]=(0,c.useState)(null),[n,o]=(0,c.useState)(null),[x,z]=(0,c.useState)(""),[A,G]=(0,c.useState)(""),[H,I]=(0,c.useState)(null),[J,K]=(0,c.useState)({}),[L,M]=(0,c.useState)(!1),[N,O]=(0,c.useState)(""),[P,Q]=(0,c.useState)(""),[R,S]=(0,c.useState)(null);(0,c.useEffect)(()=>{T()},[a]);let T=async()=>{j(!0),l(null);try{let b=new URLSearchParams({scope:a.scope});a.owner&&b.set("owner",a.owner),a.repo&&b.set("repo",a.repo);let c=await fetch((0,f.apiUrl)(`/api/env/list?${b}`));if(!c.ok)throw Error("Failed to fetch tokens");let d=((await c.json()).data.envVars||[]).filter(a=>C.includes(a.key)).map(a=>({key:a.key,value:a.value,label:D[a.key]||a.key}));h(d)}catch(a){console.error("Failed to load tokens:",a),l("Failed to load tokens")}finally{j(!1)}},U=()=>{o(null),z(""),G(""),I(null)},V=async b=>{if(!x.trim())return void G("Token value is required");let c=E(x);if(!c)return void G("Invalid token format");try{if(c!==b){let d=new URLSearchParams({key:b,scope:a.scope});a.owner&&d.set("owner",a.owner),a.repo&&d.set("repo",a.repo),await fetch((0,f.apiUrl)(`/api/env?${d}`),{method:"DELETE"}),await fetch((0,f.apiUrl)("/api/env"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:c,value:x.trim(),scope:a.scope,owner:a.owner,repo:a.repo})})}else if(!(await fetch((0,f.apiUrl)("/api/env"),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:b,value:x.trim(),scope:a.scope,owner:a.owner,repo:a.repo})})).ok)throw Error("Failed to update token");await T(),o(null),z(""),G(""),I(null)}catch(a){console.error("Failed to update token:",a),G("Failed to update token")}},W=async()=>{if(!N.trim())return void Q("Token value is required");let b=E(N);if(!b)return void Q("Invalid token format");if(g.length>0)return void Q("Only one Claude token is allowed per scope. Please edit the existing token.");try{if(!(await fetch((0,f.apiUrl)("/api/env"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:b,value:N.trim(),scope:a.scope,owner:a.owner,repo:a.repo})})).ok)throw Error("Failed to add token");await T(),M(!1),O(""),S(null)}catch(a){console.error("Failed to add token:",a),Q("Failed to add token")}},X=async b=>{if(confirm("Are you sure you want to delete this token?"))try{let c=new URLSearchParams({key:b,scope:a.scope});if(a.owner&&c.set("owner",a.owner),a.repo&&c.set("repo",a.repo),!(await fetch((0,f.apiUrl)(`/api/env?${c}`),{method:"DELETE"})).ok)throw Error("Failed to delete token");await T()}catch(a){console.error("Failed to delete token:",a),alert("Failed to delete token")}};if(i)return(0,b.jsxs)("div",{className:"border-2 border-primary rounded-xl p-4 bg-card",children:[(0,b.jsx)("h2",{className:"text-lg font-bold text-foreground mb-4",children:"Claude Tokens"}),(0,b.jsx)("div",{className:"flex items-center justify-center py-8",children:(0,b.jsx)(y.LoadingSpinner,{size:"sm",message:"Loading tokens..."})})]});if(k)return(0,b.jsxs)("div",{className:"border-2 border-primary rounded-xl p-4 bg-card",children:[(0,b.jsx)("h2",{className:"text-lg font-bold text-foreground mb-4",children:"Claude Tokens"}),(0,b.jsx)("div",{className:"text-destructive text-sm",children:k})]});let Y=d&&!d.completed&&"global"!==a.scope;return(0,b.jsxs)("div",{className:"border-2 border-primary rounded-xl p-4 bg-card",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,b.jsx)("h2",{className:"text-lg font-bold text-foreground",children:"Claude Tokens"}),!L&&0===g.length&&(0,b.jsxs)(m.Button,{size:"sm",onClick:()=>M(!0),className:"active:scale-95",children:[(0,b.jsx)(p.Plus,{className:"w-4 h-4"}),"Add Token"]})]}),Y&&(0,b.jsxs)("div",{className:"mb-4 border-2 border-warning bg-warning/10 rounded-xl p-3 flex items-start gap-3",children:[(0,b.jsx)(B.AlertCircle,{className:"w-5 h-5 text-warning flex-shrink-0 mt-0.5"}),(0,b.jsx)("div",{className:"flex-1",children:(0,b.jsx)("p",{className:"text-sm text-warning",children:"オンボーディングを完了するには、Globalスコープにトークンを追加してください"})}),e&&(0,b.jsx)(m.Button,{size:"sm",onClick:e,className:"bg-warning text-white hover:bg-warning/80 active:scale-95 whitespace-nowrap",children:"Switch to Global"})]}),(0,b.jsxs)("div",{className:"space-y-3",children:[L&&(0,b.jsxs)("div",{className:"border border-border rounded p-3 bg-accent",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-foreground mb-2",children:"New Token"}),(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsx)(w.Input,{type:"password",value:N,onChange:a=>{var b;let c;return O(b=a.target.value),Q(""),void(S(c=E(b)),b&&!c&&Q("Invalid token format. Must start with sk-ant-api or sk-ant-oat"))},placeholder:"sk-ant-api... or sk-ant-oat...",className:"w-full font-mono",autoFocus:!0}),R&&!P&&(0,b.jsxs)("div",{className:"text-xs text-success",children:["→ Detected: ",D[R]]}),P&&(0,b.jsx)("div",{className:"text-xs text-destructive",children:P}),(0,b.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,b.jsx)(m.Button,{variant:"outline",size:"sm",onClick:()=>{M(!1),O(""),Q(""),S(null)},className:"active:scale-95",children:(0,b.jsx)(q.X,{className:"w-4 h-4"})}),(0,b.jsx)(m.Button,{size:"sm",onClick:W,disabled:!R||!!P,className:"active:scale-95",children:(0,b.jsx)(r.Check,{className:"w-4 h-4"})})]})]})]}),0!==g.length||L?g.map(c=>(0,b.jsx)("div",{className:"border border-border rounded p-3 space-y-2",children:n===c.key?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:"text-sm font-medium text-foreground mb-2",children:"Edit Token"}),(0,b.jsx)(w.Input,{type:"password",value:x,onChange:a=>{var b;let c;return z(b=a.target.value),G(""),void(I(c=E(b)),b&&!c&&G("Invalid token format. Must start with sk-ant-api or sk-ant-oat"))},placeholder:"sk-ant-api... or sk-ant-oat...",className:"w-full font-mono",autoFocus:!0}),H&&!A&&(0,b.jsxs)("div",{className:"text-xs text-success",children:["→ Detected: ",D[H]]}),A&&(0,b.jsx)("div",{className:"text-xs text-destructive",children:A}),(0,b.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,b.jsx)(m.Button,{variant:"outline",size:"sm",onClick:U,className:"active:scale-95",children:(0,b.jsx)(q.X,{className:"w-4 h-4"})}),(0,b.jsx)(m.Button,{size:"sm",onClick:()=>V(c.key),disabled:!H||!!A,className:"active:scale-95",children:(0,b.jsx)(r.Check,{className:"w-4 h-4"})})]})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("span",{className:"text-sm font-medium text-foreground",children:c.label}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(m.Button,{variant:"ghost",size:"icon-lg",onClick:()=>K(a=>({...a,[c.key]:!a[c.key]})),title:J[c.key]?"Hide value":"Show value",children:J[c.key]?(0,b.jsx)(t,{className:"w-4 h-4 text-muted-foreground"}):(0,b.jsx)(s.Eye,{className:"w-4 h-4 text-muted-foreground"})}),(0,b.jsx)(m.Button,{variant:"ghost",size:"icon-lg",onClick:()=>{o(c.key),z(""),G(""),I(null)},title:"Edit",children:(0,b.jsx)(v.Pencil,{className:"w-4 h-4 text-muted-foreground"})}),"global"!==a.scope&&(0,b.jsx)(m.Button,{variant:"ghost",size:"icon-lg",onClick:()=>X(c.key),className:"hover:bg-destructive/10",title:"Delete",children:(0,b.jsx)(u.Trash2,{className:"w-4 h-4 text-destructive"})})]})]}),(0,b.jsx)(w.Input,{type:J[c.key]?"text":"password",value:c.value,readOnly:!0,className:"w-full font-mono"})]})},c.key)):(0,b.jsx)("div",{className:"text-center text-muted-foreground text-sm py-4",children:"No Claude tokens configured"})]})]})}var G=a.i(49594),H=a.i(90002);function I(){let[a,d]=(0,c.useState)([]),[e,g]=(0,c.useState)({}),[h,i]=(0,c.useState)(null),[j,k]=(0,c.useState)(!1),l=(0,c.useCallback)(async()=>{try{let[a,b]=await Promise.all([fetch((0,f.apiUrl)("/api/repos")).then(a=>a.json()),fetch((0,f.apiUrl)("/api/tasks")).then(a=>a.json())]);d(a.data?.repos??[]);let c={};for(let a of b.data?.tasks??[]){let b=`${a.owner}/${a.repo}`;c[b]=(c[b]??0)+1}g(c)}catch(a){console.error("Failed to load repositories:",a)}},[]);(0,c.useEffect)(()=>{l()},[l]);let n=async()=>{if(h){k(!0);try{if(!(await fetch((0,f.apiUrl)(`/api/repos/${h.owner}/${h.repo}`),{method:"DELETE"})).ok)throw Error("Failed to delete repository");await l()}catch(a){console.error("Failed to delete repository:",a)}finally{k(!1),i(null)}}};return 0===a.length?(0,b.jsx)("div",{className:"text-sm text-muted-foreground",children:"No repositories cloned yet."}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(H.ConfirmDialog,{open:null!==h,onOpenChange:a=>{a.open||i(null)},title:"Delete Repository",message:h?`Delete ${h.owner}/${h.repo}? This will also delete ${e[`${h.owner}/${h.repo}`]??0} associated task(s), all worktrees, and the bare repository. This action cannot be undone.`:"",confirmLabel:j?"Deleting...":"Delete",cancelLabel:"Cancel",onConfirm:n,variant:"danger"}),(0,b.jsx)("div",{className:"space-y-2",children:a.map(a=>{let c=`${a.owner}/${a.repo}`,d=(0,G.getRepoColor)(a.owner,a.repo),f=e[c]??0;return(0,b.jsxs)("div",{className:"flex items-center justify-between rounded-md border border-border p-3",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("span",{className:`inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${d.bg} ${d.text}`,children:c}),(0,b.jsxs)("span",{className:"text-xs text-muted-foreground",children:[f," task",1!==f?"s":""]})]}),(0,b.jsx)(m.Button,{variant:"ghost",size:"icon",onClick:()=>i(a),className:"text-muted-foreground hover:text-destructive",children:(0,b.jsx)(u.Trash2,{className:"size-4"})})]},a.id)})})]})}var J=a.i(26807);function K({owner:a,repo:d,onDeleted:e}){let[g,h]=(0,c.useState)(!1),[i,j]=(0,c.useState)(""),[k,l]=(0,c.useState)(!1),n=`${a}/${d}`,o=i===n,p=async()=>{if(o){l(!0);try{if(!(await fetch((0,f.apiUrl)(`/api/repos/${a}/${d}`),{method:"DELETE"})).ok)throw Error("Failed to delete repository");e()}catch(a){console.error("Failed to delete repository:",a)}finally{l(!1),h(!1),j("")}}};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"rounded-md border border-destructive/30 p-4 space-y-3",children:[(0,b.jsxs)("div",{className:"space-y-1",children:[(0,b.jsx)("h3",{className:"text-sm font-semibold text-destructive",children:"Remove Repository"}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground",children:"Remove this repository and all associated data including tasks, worktrees, and environment variables. This action cannot be undone."})]}),(0,b.jsxs)(m.Button,{variant:"destructive",size:"sm",onClick:()=>h(!0),children:[(0,b.jsx)(u.Trash2,{className:"size-4"}),"Remove Repository"]})]}),(0,b.jsx)(J.Dialog,{open:g,onOpenChange:h,children:(0,b.jsxs)(J.DialogContent,{showCloseButton:!1,children:[(0,b.jsxs)(J.DialogHeader,{children:[(0,b.jsx)(J.DialogTitle,{children:"Remove Repository"}),(0,b.jsxs)(J.DialogDescription,{children:["This will permanently delete ",(0,b.jsx)("strong",{children:n})," and all associated tasks, worktrees, and environment variables."]})]}),(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsxs)("label",{className:"text-xs text-muted-foreground",children:["Type ",(0,b.jsx)("strong",{children:n})," to confirm"]}),(0,b.jsx)(w.Input,{value:i,onChange:a=>j(a.target.value),placeholder:n,autoComplete:"off"})]}),(0,b.jsxs)(J.DialogFooter,{children:[(0,b.jsx)(m.Button,{variant:"outline",size:"sm",onClick:()=>{h(!1),j("")},disabled:k,children:"Cancel"}),(0,b.jsx)(m.Button,{variant:"destructive",size:"sm",onClick:p,disabled:!o||k,children:k?"Removing...":"Remove"})]})]})})]})}var L=a.i(67453),M=a.i(36620),N=a.i(96221),O=a.i(4975),P=a.i(48124),Q=a.i(92552),R=a.i(65025),S=a.i(97463),T=a.i(6828),U=a.i(56026);let V="tsunagi:voice-input-enabled",W={not_running:"停止中",installing_deps:"依存関係をインストール中...",downloading_model:"モデルをダウンロード中...",starting_server:"サーバーを起動中...",running:"実行中",running_external:"実行中 (tsunagi外で起動)",error:"エラー"},X=["installing_deps","downloading_model","starting_server"],Y=["running","running_external"];function Z(a){let b=a/0x40000000;return b>=.1?`${b.toFixed(2)} GB`:`${(a/1048576).toFixed(0)} MB`}function $(){let[a,d]=(0,c.useState)(!1),[e,g]=(0,c.useState)(!1),[h,i]=(0,c.useState)(null),[j,k]=(0,c.useState)(""),l=(0,c.useRef)(null),n=(0,c.useCallback)(a=>{d(a),localStorage.setItem(V,String(a))},[]),o=(0,c.useCallback)(a=>{k(a),localStorage.setItem(U.WHISPER_PROMPT_STORAGE_KEY,a)},[]),p=(0,c.useCallback)(async()=>{let a=await fetch((0,f.apiUrl)("/api/whisper/server/status")),b=await a.json();return i(b),b},[]);(0,c.useEffect)(()=>{d("true"===localStorage.getItem(V)),k(localStorage.getItem(U.WHISPER_PROMPT_STORAGE_KEY)??""),p()},[p]),(0,c.useEffect)(()=>{h&&Y.includes(h.step)&&!a&&(n(!0),T.toaster.create({type:"success",title:"音声入力が有効化されました"}))},[h,a,n]),(0,c.useEffect)(()=>(h&&X.includes(h.step)&&!l.current&&(l.current=setInterval(()=>{p().then(a=>{!X.includes(a.step)&&l.current&&(clearInterval(l.current),l.current=null)})},1e3)),()=>{l.current&&(clearInterval(l.current),l.current=null)}),[h,p]);let q=(0,c.useCallback)(()=>{p(),g(!0)},[p]),r=(0,c.useCallback)(async()=>{try{let a=await fetch((0,f.apiUrl)("/api/whisper/server/start"),{method:"POST"});if(!a.ok){let b=await a.json().catch(()=>null);throw Error(b?.error||`HTTPエラー: ${a.status}`)}i(await a.json())}catch(a){T.toaster.create({type:"error",title:"サーバーの起動に失敗しました",description:a instanceof Error?a.message:String(a)})}},[]),s=(0,c.useCallback)(async()=>{try{let a=await fetch((0,f.apiUrl)("/api/whisper/server/stop"),{method:"POST"});if(!a.ok){let b=await a.json().catch(()=>null);throw Error(b?.error||`HTTPエラー: ${a.status}`)}i(await a.json())}catch(a){T.toaster.create({type:"error",title:"サーバーの停止に失敗しました",description:a instanceof Error?a.message:String(a)})}},[]),t=(0,c.useCallback)(()=>{n(!1),h&&Y.includes(h.step)&&s()},[n,s,h]),u=h?.serverDir,v=h?.downloadProgress,w=v?v.downloadedBytes/v.totalBytes*100:0;return(0,b.jsxs)(Q.Card,{children:[(0,b.jsxs)(Q.CardHeader,{children:[(0,b.jsxs)("div",{className:"flex items-center gap-1",children:[(0,b.jsx)(Q.CardTitle,{children:"音声入力 (実験的機能)"}),(0,b.jsx)(m.Button,{variant:"ghost",size:"icon-sm",onClick:q,title:"音声入力について",children:(0,b.jsx)(M.CircleHelp,{})})]}),(0,b.jsx)(Q.CardDescription,{children:"ローカルで動作するWhisperを使って音声入力を行います。下記のローカルLLMも有効にすると、 文字起こし結果がLLMで自動整形されます(無効時は文字起こし結果をそのまま使用)。"})]}),(0,b.jsx)(Q.CardContent,{className:"flex flex-col gap-3",children:a?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsxs)("span",{className:"flex items-center gap-2 text-success",children:[(0,b.jsx)(L.CheckCircle2,{className:"size-4"}),"音声入力: 有効"]}),h&&(0,b.jsxs)("span",{className:"text-xs/relaxed text-muted-foreground",children:["(",W[h.step],")"]}),(0,b.jsx)(m.Button,{size:"default",variant:"outline",onClick:t,children:"無効にする"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"mb-1 block text-xs font-medium text-muted-foreground",children:"文字起こしプロンプト (任意)"}),(0,b.jsx)(S.Textarea,{value:j,onChange:a=>o(a.target.value),placeholder:"例: 句読点を適切に打ってください。固有名詞は正確に表記してください。",className:"min-h-16 text-xs"}),(0,b.jsx)("p",{className:"mt-1 text-[0.65rem] text-muted-foreground",children:"Whisperの文字起こしスタイル(表記ゆれ・句読点・固有名詞など)を誘導するヒントです。空でも構いません。"})]})]}):(0,b.jsxs)(m.Button,{size:"default",onClick:q,children:[(0,b.jsx)(O.Mic,{}),"音声入力を有効化する"]})}),(0,b.jsx)(H.Dialog,{open:e,onOpenChange:({open:a})=>g(a),title:"音声入力について",maxWidth:"2xl",children:(0,b.jsxs)("div",{className:"space-y-4 text-sm",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"font-medium text-foreground",children:"実験的機能です"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"音声入力はローカルで動作するWhisper (mlx-whisper) を利用します。精度・速度は環境に依存し、今後変更される可能性があります。"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"font-medium text-foreground",children:"対応環境"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"Apple Silicon Mac (M1/M2/M3/M4) のみ対応。Windows/Linuxでは利用できません。"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"font-medium text-foreground",children:"必要なもの(事前に手動でインストール)"}),(0,b.jsx)("ul",{className:"list-disc pl-5 text-muted-foreground",children:(0,b.jsx)("li",{children:"Python 3.9以降(Xcode Command Line Tools または Homebrew経由で入手可能)"})})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"mb-1 font-medium text-foreground",children:"セットアップ・起動"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"下のボタンから、依存関係のインストール・モデルのダウンロード・サーバー起動まで自動で行われます(初回は数分かかります)。"}),h&&!u&&(0,b.jsx)("p",{className:"mt-1 text-destructive",children:"whisper-serverが見つかりませんでした。インストールが壊れている可能性があります。"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"mb-1 font-medium text-foreground",children:"アンインストール"}),(0,b.jsxs)("p",{className:"text-muted-foreground",children:["音声入力のためにダウンロードされるもの(Pythonの依存関係・Whisperモデル、合計約2.6GB)は全て",(0,b.jsx)("code",{className:"rounded bg-muted px-1",children:"~/.tsunagi/whisper"}),"に保存されます。不要になった場合はこのディレクトリを削除するだけで、関連リソースを完全に削除できます。"]})]}),(0,b.jsxs)("div",{className:"border-t border-border pt-4",children:[(!h||"not_running"===h.step||"error"===h.step)&&(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)(m.Button,{size:"default",onClick:()=>void r(),disabled:!h,children:[h?(0,b.jsx)(O.Mic,{}):(0,b.jsx)(N.Loader2,{className:"animate-spin"}),"Whisperサーバーを起動"]}),h?.step==="error"&&h.error&&(0,b.jsx)("p",{className:"text-xs/relaxed text-destructive",children:h.error})]}),h?.step==="installing_deps"&&(0,b.jsxs)(m.Button,{size:"default",disabled:!0,children:[(0,b.jsx)(N.Loader2,{className:"animate-spin"}),"依存関係をインストール中... (数分かかる場合があります)"]}),h?.step==="downloading_model"&&(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs/relaxed text-muted-foreground",children:[(0,b.jsx)(N.Loader2,{className:"size-4 animate-spin"}),"モデルをダウンロード中..."]}),v&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(R.Progress,{value:w}),(0,b.jsxs)("p",{className:"text-xs/relaxed text-muted-foreground",children:[Z(v.downloadedBytes)," / ",Z(v.totalBytes)," (",w.toFixed(0),"%) ・ ",function(a){if(null===a)return"残り時間を計算中...";if(a<60)return`残り約${a}秒`;let b=Math.floor(a/60);return`残り約${b}分${a%60}秒`}(v.etaSeconds)]})]})]}),h?.step==="starting_server"&&(0,b.jsxs)(m.Button,{size:"default",disabled:!0,children:[(0,b.jsx)(N.Loader2,{className:"animate-spin"}),"サーバーを起動中..."]}),h&&Y.includes(h.step)&&(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsxs)("span",{className:"flex items-center gap-2 text-success",children:[(0,b.jsx)(L.CheckCircle2,{className:"size-4"}),"サーバーは起動しています"]}),(0,b.jsxs)(m.Button,{size:"default",variant:"outline",onClick:()=>void s(),children:[(0,b.jsx)(P.Square,{}),"サーバーを停止"]})]})]})]})})]})}var _=a.i(19768),aa=a.i(78512);a.s(["default",0,function(){let a=(0,d.useRouter)();(0,aa.useDocumentTitle)("settings");let g=()=>({scope:"global",label:"Global"}),[h,i]=(0,c.useState)(null),[j,k]=(0,c.useState)(0),[l,n]=(0,c.useState)({completed:!0,hasGlobalToken:!0});return(0,c.useEffect)(()=>{fetch((0,f.apiUrl)("/api/onboarding/status")).then(a=>a.json()).then(a=>{let b=a.data;n(b),b.completed||b.hasGlobalToken?i(g()):i({scope:"global",label:"Global"})}).catch(a=>{console.error("Failed to fetch onboarding status:",a),i(g())})},[]),(0,c.useEffect)(()=>{h&&localStorage.setItem("tsunagi:env-selected-node",JSON.stringify(h))},[h]),(0,b.jsxs)("div",{className:"h-screen flex flex-col bg-background",children:[(0,b.jsx)("div",{className:"sticky top-0 z-50 p-4 border-b border-border bg-card",children:(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsxs)(m.Button,{variant:"ghost",onClick:()=>a.push("/"),className:"text-primary font-medium hover:bg-primary/10 hover:text-foreground",children:[(0,b.jsx)(e.ArrowLeft,{className:"w-4 h-4"}),"Back to Board"]}),(0,b.jsx)("h1",{className:"text-xl font-bold text-foreground absolute left-1/2 -translate-x-1/2",children:"Settings"})]})}),(0,b.jsxs)("div",{className:"flex-1 flex min-h-0",children:[(0,b.jsx)("div",{className:"w-64 border-r border-border bg-card",children:(0,b.jsx)(o,{selectedNode:h,onNodeSelect:a=>{i(a)},refreshKey:j})}),(0,b.jsx)("div",{className:"flex-1 bg-card p-4 overflow-y-auto",children:h?(0,b.jsxs)("div",{className:"space-y-6",children:[(0,b.jsx)(F,{selectedNode:h,onboardingStatus:l,onSwitchToGlobal:()=>{i({scope:"global",label:"Global"})}}),(0,b.jsx)(A,{selectedNode:h}),"global"===h.scope&&(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsx)("h2",{className:"text-sm font-semibold text-foreground",children:"Repositories"}),(0,b.jsx)(I,{})]}),"global"===h.scope&&(0,b.jsx)($,{}),"global"===h.scope&&(0,b.jsx)(_.LocalLlmSection,{}),"repo"===h.scope&&h.owner&&h.repo&&(0,b.jsx)(K,{owner:h.owner,repo:h.repo,onDeleted:()=>{i({scope:"global",label:"Global"}),k(a=>a+1)}})]}):(0,b.jsx)("div",{className:"h-full flex items-center justify-center text-muted-foreground text-sm",children:"Select a node from the left panel"})})]})]})}],40006)}];
|
|
5
|
+
`,style:{paddingLeft:`${16*e+8}px`},children:[o&&(0,b.jsx)(m.Button,{variant:"ghost",size:"icon-xs",onClick:a=>{a.stopPropagation(),g&&g()},className:"size-4",children:d?(0,b.jsx)(l,{className:"w-3 h-3 text-muted-foreground"}):(0,b.jsx)(k.default,{className:"w-3 h-3 text-muted-foreground"})}),!o&&(0,b.jsx)("div",{className:"w-3"}),(0,b.jsx)("div",{className:"text-foreground",children:(()=>{switch(a.type){case"global":return(0,b.jsx)(h,{className:"w-4 h-4"});case"owner":return(0,b.jsx)(i,{className:"w-4 h-4"});case"repo":return(0,b.jsx)(j.GitBranch,{className:"w-4 h-4"})}})()}),(0,b.jsx)("span",{className:"text-sm text-foreground truncate",children:a.label})]})}function o({selectedNode:a,onNodeSelect:d,refreshKey:e}){let[g,h]=(0,c.useState)([]),[i,j]=(0,c.useState)(new Set),[k,l]=(0,c.useState)(!0);(0,c.useEffect)(()=>{let a=localStorage.getItem("tsunagi:env-tree-expanded");if(a)try{let b=JSON.parse(a);j(new Set(b))}catch(a){console.error("Failed to parse expanded owners:",a)}},[]),(0,c.useEffect)(()=>{localStorage.setItem("tsunagi:env-tree-expanded",JSON.stringify([...i]))},[i]),(0,c.useEffect)(()=>{(async()=>{l(!0);try{let a=await fetch((0,f.apiUrl)("/api/owners"));if(!a.ok)throw Error("Failed to fetch owners");let b=((await a.json()).data.owners||[]).map(a=>({id:`owner:${a.name}`,type:"owner",label:a.name,scope:"owner",owner:a.name,children:a.repositories.map(a=>({id:`repo:${a.owner}/${a.repo}`,type:"repo",label:a.repo,scope:"repo",owner:a.owner,repo:a.repo}))}));h([{id:"global",type:"global",label:"Global",scope:"global"},...b])}catch(a){console.error("Failed to load tree:",a)}finally{l(!1)}})()},[e]);let m=(c,e=0)=>{let f=a?.scope===c.scope&&a?.owner===c.owner&&a?.repo===c.repo,g=i.has(c.id);return(0,b.jsxs)("div",{children:[(0,b.jsx)(n,{node:c,isSelected:f,isExpanded:g,depth:e,onSelect:()=>{d({scope:c.scope,owner:c.owner,repo:c.repo,label:c.label})},onToggle:()=>{var a;return a=c.id,void j(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c})}}),g&&c.children?.map(a=>m(a,e+1))]},c.id)};return k?(0,b.jsx)("div",{className:"p-4 text-muted-foreground text-sm",children:"Loading..."}):0===g.length?(0,b.jsx)("div",{className:"p-4 text-muted-foreground text-sm",children:"No repositories found"}):(0,b.jsx)("div",{className:"h-full overflow-y-auto",children:(0,b.jsx)("div",{className:"p-2",children:g.map(a=>m(a))})})}var p=a.i(15618),q=a.i(33508),r=a.i(33441),s=a.i(77156);let t=(0,g.default)("eye-off",[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);var u=a.i(81560),v=a.i(99464),w=a.i(28503);function x({variable:a,onToggle:d,onDelete:e,onUpdate:f,isDeletable:g=!0}){let[h,i]=(0,c.useState)(!1),[j,k]=(0,c.useState)(!1),[l,n]=(0,c.useState)(!1),[o,p]=(0,c.useState)(a.value),y=async b=>{k(!0);try{await d(a.key,b.target.checked)}finally{k(!1)}},z=async()=>{await e(a.key)},A=async()=>{try{await f(a.key,o),n(!1)}catch(a){console.error("Failed to update variable:",a),alert("Failed to update variable")}};return(0,b.jsxs)("div",{className:"border border-border rounded p-3 space-y-2",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("span",{className:"text-sm font-mono text-foreground",children:a.key}),!l&&(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsxs)("label",{className:"flex items-center gap-2 cursor-pointer",children:[(0,b.jsx)("input",{type:"checkbox",checked:a.enabled,onChange:y,disabled:j,className:"w-4 h-4 cursor-pointer"}),(0,b.jsx)("span",{className:"text-xs text-muted-foreground",children:"Enabled"})]}),(0,b.jsx)(m.Button,{variant:"ghost",size:"icon-lg",onClick:()=>i(!h),title:h?"Hide value":"Show value",children:h?(0,b.jsx)(t,{className:"w-4 h-4 text-muted-foreground"}):(0,b.jsx)(s.Eye,{className:"w-4 h-4 text-muted-foreground"})}),(0,b.jsx)(m.Button,{variant:"ghost",size:"icon-lg",onClick:()=>{n(!0),p(a.value)},title:"Edit",children:(0,b.jsx)(v.Pencil,{className:"w-4 h-4 text-muted-foreground"})}),g&&(0,b.jsx)(m.Button,{variant:"ghost",size:"icon-lg",onClick:z,title:"Delete",children:(0,b.jsx)(u.Trash2,{className:"w-4 h-4 text-destructive"})})]})]}),l?(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsx)(w.Input,{type:"password",value:o,onChange:a=>p(a.target.value),className:"w-full font-mono",autoFocus:!0}),(0,b.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,b.jsx)(m.Button,{variant:"outline",size:"sm",onClick:()=>{n(!1),p(a.value)},className:"active:scale-95",children:(0,b.jsx)(q.X,{className:"w-4 h-4"})}),(0,b.jsx)(m.Button,{size:"sm",onClick:A,className:"active:scale-95",children:(0,b.jsx)(r.Check,{className:"w-4 h-4"})})]})]}):(0,b.jsx)("div",{children:(0,b.jsx)(w.Input,{type:h?"text":"password",value:a.value,readOnly:!0,className:"w-full font-mono"})})]})}var y=a.i(67060);let z=["ANTHROPIC_API_KEY","CLAUDE_CODE_OAUTH_TOKEN"];function A({selectedNode:a}){let[d,e]=(0,c.useState)([]),[g,h]=(0,c.useState)(!0),[i,j]=(0,c.useState)(null),[k,l]=(0,c.useState)(!1),[n,o]=(0,c.useState)(""),[s,t]=(0,c.useState)(""),[u,v]=(0,c.useState)("");(0,c.useEffect)(()=>{(async()=>{h(!0),j(null);try{let b=new URLSearchParams({scope:a.scope});a.owner&&b.set("owner",a.owner),a.repo&&b.set("repo",a.repo);let c=await fetch((0,f.apiUrl)(`/api/env/list?${b}`));if(!c.ok)throw Error("Failed to fetch environment variables");let d=((await c.json()).data.envVars||[]).filter(a=>!z.includes(a.key));e(d)}catch(a){console.error("Failed to load environment variables:",a),j("Failed to load environment variables")}finally{h(!1)}})()},[a]);let B=async(b,c)=>{if("global"===a.scope&&!c&&("ANTHROPIC_API_KEY"===b||"CLAUDE_CODE_OAUTH_TOKEN"===b)&&!d.find(a=>a.key!==b&&("ANTHROPIC_API_KEY"===a.key||"CLAUDE_CODE_OAUTH_TOKEN"===a.key)&&a.enabled))return void alert("Cannot disable the last enabled Claude Token. Please add or enable another Claude Token first.");try{if(!(await fetch((0,f.apiUrl)("/api/env/toggle"),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:b,scope:a.scope,owner:a.owner,repo:a.repo,enabled:c})})).ok)throw Error("Failed to toggle environment variable");e(a=>a.map(a=>a.key===b?{...a,enabled:c}:a))}catch(a){console.error("Failed to toggle environment variable:",a),e(a=>a.map(a=>a.key===b?{...a,enabled:!c}:a))}},C=async b=>{if(confirm(`Delete ${b}?`))try{let c=new URLSearchParams({key:b,scope:a.scope});if(a.owner&&c.set("owner",a.owner),a.repo&&c.set("repo",a.repo),!(await fetch((0,f.apiUrl)(`/api/env?${c}`),{method:"DELETE"})).ok)throw Error("Failed to delete environment variable");e(a=>a.filter(a=>a.key!==b))}catch(a){console.error("Failed to delete environment variable:",a),alert("Failed to delete environment variable")}},D=async(b,c)=>{try{if(!(await fetch((0,f.apiUrl)("/api/env"),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:b,value:c,scope:a.scope,owner:a.owner,repo:a.repo})})).ok)throw Error("Failed to update environment variable");e(a=>a.map(a=>a.key===b?{...a,value:c}:a))}catch(a){throw console.error("Failed to update environment variable:",a),a}},E=async()=>{var b;if(v(""),!n.trim())return void v("Key is required");if(!s.trim())return void v("Value is required");if(b=n.trim(),/^[A-Z0-9_]+$/.test(b)?z.includes(b)?(v("Claude tokens should be added in the Tokens section"),!1):!d.some(a=>a.key===b)||(v(`Key "${b}" already exists in this scope`),!1):(v("Key must contain only uppercase letters, numbers, and underscores"),!1))try{if(!(await fetch((0,f.apiUrl)("/api/env"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:n.trim(),value:s.trim(),scope:a.scope,owner:a.owner,repo:a.repo})})).ok)throw Error("Failed to add environment variable");let b=new URLSearchParams({scope:a.scope});a.owner&&b.set("owner",a.owner),a.repo&&b.set("repo",a.repo);let c=await fetch((0,f.apiUrl)(`/api/env/list?${b}`));if(c.ok){let a=((await c.json()).data.envVars||[]).filter(a=>!z.includes(a.key));e(a)}l(!1),o(""),t("")}catch(a){console.error("Failed to add environment variable:",a),v("Failed to add environment variable")}};return g?(0,b.jsx)("div",{className:"h-full flex items-center justify-center",children:(0,b.jsx)(y.LoadingSpinner,{size:"md",message:"Loading variables..."})}):i?(0,b.jsx)("div",{className:"h-full flex items-center justify-center",children:(0,b.jsx)("div",{className:"text-destructive text-sm",children:i})}):(0,b.jsxs)("div",{className:"h-full flex flex-col",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,b.jsx)("h2",{className:"text-lg font-bold text-foreground",children:"Environment Variables"}),!k&&(0,b.jsxs)(m.Button,{size:"sm",onClick:()=>l(!0),className:"active:scale-95",children:[(0,b.jsx)(p.Plus,{className:"w-4 h-4"}),"Add Variable"]})]}),(0,b.jsxs)("div",{className:"flex-1 overflow-y-auto space-y-3",children:[k&&(0,b.jsxs)("div",{className:"border border-border rounded p-3 bg-accent space-y-2",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-foreground",children:"New Variable"}),(0,b.jsx)(w.Input,{type:"text",value:n,onChange:a=>o(a.target.value.toUpperCase()),placeholder:"VARIABLE_NAME",className:"w-full font-mono",autoFocus:!0}),(0,b.jsx)(w.Input,{type:"password",value:s,onChange:a=>t(a.target.value),placeholder:"value",className:"w-full font-mono"}),u&&(0,b.jsx)("div",{className:"text-xs text-destructive",children:u}),(0,b.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,b.jsx)(m.Button,{variant:"outline",size:"sm",onClick:()=>{l(!1),o(""),t(""),v("")},className:"active:scale-95",children:(0,b.jsx)(q.X,{className:"w-4 h-4"})}),(0,b.jsx)(m.Button,{size:"sm",onClick:E,className:"active:scale-95",children:(0,b.jsx)(r.Check,{className:"w-4 h-4"})})]})]}),0!==d.length||k?d.map(a=>(0,b.jsx)(x,{variable:a,onToggle:B,onDelete:C,onUpdate:D,isDeletable:!0},a.key)):(0,b.jsx)("div",{className:"text-center text-muted-foreground text-sm py-4",children:"No environment variables"})]})]})}var B=a.i(92e3);let C=["ANTHROPIC_API_KEY","CLAUDE_CODE_OAUTH_TOKEN"],D={ANTHROPIC_API_KEY:"API Key",CLAUDE_CODE_OAUTH_TOKEN:"OAuth Token"};function E(a){return a.startsWith("sk-ant-api")?"ANTHROPIC_API_KEY":a.startsWith("sk-ant-oat")?"CLAUDE_CODE_OAUTH_TOKEN":null}function F({selectedNode:a,onboardingStatus:d,onSwitchToGlobal:e}){let[g,h]=(0,c.useState)([]),[i,j]=(0,c.useState)(!0),[k,l]=(0,c.useState)(null),[n,o]=(0,c.useState)(null),[x,z]=(0,c.useState)(""),[A,G]=(0,c.useState)(""),[H,I]=(0,c.useState)(null),[J,K]=(0,c.useState)({}),[L,M]=(0,c.useState)(!1),[N,O]=(0,c.useState)(""),[P,Q]=(0,c.useState)(""),[R,S]=(0,c.useState)(null);(0,c.useEffect)(()=>{T()},[a]);let T=async()=>{j(!0),l(null);try{let b=new URLSearchParams({scope:a.scope});a.owner&&b.set("owner",a.owner),a.repo&&b.set("repo",a.repo);let c=await fetch((0,f.apiUrl)(`/api/env/list?${b}`));if(!c.ok)throw Error("Failed to fetch tokens");let d=((await c.json()).data.envVars||[]).filter(a=>C.includes(a.key)).map(a=>({key:a.key,value:a.value,label:D[a.key]||a.key}));h(d)}catch(a){console.error("Failed to load tokens:",a),l("Failed to load tokens")}finally{j(!1)}},U=()=>{o(null),z(""),G(""),I(null)},V=async b=>{if(!x.trim())return void G("Token value is required");let c=E(x);if(!c)return void G("Invalid token format");try{if(c!==b){let d=new URLSearchParams({key:b,scope:a.scope});a.owner&&d.set("owner",a.owner),a.repo&&d.set("repo",a.repo),await fetch((0,f.apiUrl)(`/api/env?${d}`),{method:"DELETE"}),await fetch((0,f.apiUrl)("/api/env"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:c,value:x.trim(),scope:a.scope,owner:a.owner,repo:a.repo})})}else if(!(await fetch((0,f.apiUrl)("/api/env"),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:b,value:x.trim(),scope:a.scope,owner:a.owner,repo:a.repo})})).ok)throw Error("Failed to update token");await T(),o(null),z(""),G(""),I(null)}catch(a){console.error("Failed to update token:",a),G("Failed to update token")}},W=async()=>{if(!N.trim())return void Q("Token value is required");let b=E(N);if(!b)return void Q("Invalid token format");if(g.length>0)return void Q("Only one Claude token is allowed per scope. Please edit the existing token.");try{if(!(await fetch((0,f.apiUrl)("/api/env"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:b,value:N.trim(),scope:a.scope,owner:a.owner,repo:a.repo})})).ok)throw Error("Failed to add token");await T(),M(!1),O(""),S(null)}catch(a){console.error("Failed to add token:",a),Q("Failed to add token")}},X=async b=>{if(confirm("Are you sure you want to delete this token?"))try{let c=new URLSearchParams({key:b,scope:a.scope});if(a.owner&&c.set("owner",a.owner),a.repo&&c.set("repo",a.repo),!(await fetch((0,f.apiUrl)(`/api/env?${c}`),{method:"DELETE"})).ok)throw Error("Failed to delete token");await T()}catch(a){console.error("Failed to delete token:",a),alert("Failed to delete token")}};if(i)return(0,b.jsxs)("div",{className:"border-2 border-primary rounded-xl p-4 bg-card",children:[(0,b.jsx)("h2",{className:"text-lg font-bold text-foreground mb-4",children:"Claude Tokens"}),(0,b.jsx)("div",{className:"flex items-center justify-center py-8",children:(0,b.jsx)(y.LoadingSpinner,{size:"sm",message:"Loading tokens..."})})]});if(k)return(0,b.jsxs)("div",{className:"border-2 border-primary rounded-xl p-4 bg-card",children:[(0,b.jsx)("h2",{className:"text-lg font-bold text-foreground mb-4",children:"Claude Tokens"}),(0,b.jsx)("div",{className:"text-destructive text-sm",children:k})]});let Y=d&&!d.completed&&"global"!==a.scope;return(0,b.jsxs)("div",{className:"border-2 border-primary rounded-xl p-4 bg-card",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,b.jsx)("h2",{className:"text-lg font-bold text-foreground",children:"Claude Tokens"}),!L&&0===g.length&&(0,b.jsxs)(m.Button,{size:"sm",onClick:()=>M(!0),className:"active:scale-95",children:[(0,b.jsx)(p.Plus,{className:"w-4 h-4"}),"Add Token"]})]}),Y&&(0,b.jsxs)("div",{className:"mb-4 border-2 border-warning bg-warning/10 rounded-xl p-3 flex items-start gap-3",children:[(0,b.jsx)(B.AlertCircle,{className:"w-5 h-5 text-warning flex-shrink-0 mt-0.5"}),(0,b.jsx)("div",{className:"flex-1",children:(0,b.jsx)("p",{className:"text-sm text-warning",children:"オンボーディングを完了するには、Globalスコープにトークンを追加してください"})}),e&&(0,b.jsx)(m.Button,{size:"sm",onClick:e,className:"bg-warning text-white hover:bg-warning/80 active:scale-95 whitespace-nowrap",children:"Switch to Global"})]}),(0,b.jsxs)("div",{className:"space-y-3",children:[L&&(0,b.jsxs)("div",{className:"border border-border rounded p-3 bg-accent",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-foreground mb-2",children:"New Token"}),(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsx)(w.Input,{type:"password",value:N,onChange:a=>{var b;let c;return O(b=a.target.value),Q(""),void(S(c=E(b)),b&&!c&&Q("Invalid token format. Must start with sk-ant-api or sk-ant-oat"))},placeholder:"sk-ant-api... or sk-ant-oat...",className:"w-full font-mono",autoFocus:!0}),R&&!P&&(0,b.jsxs)("div",{className:"text-xs text-success",children:["→ Detected: ",D[R]]}),P&&(0,b.jsx)("div",{className:"text-xs text-destructive",children:P}),(0,b.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,b.jsx)(m.Button,{variant:"outline",size:"sm",onClick:()=>{M(!1),O(""),Q(""),S(null)},className:"active:scale-95",children:(0,b.jsx)(q.X,{className:"w-4 h-4"})}),(0,b.jsx)(m.Button,{size:"sm",onClick:W,disabled:!R||!!P,className:"active:scale-95",children:(0,b.jsx)(r.Check,{className:"w-4 h-4"})})]})]})]}),0!==g.length||L?g.map(c=>(0,b.jsx)("div",{className:"border border-border rounded p-3 space-y-2",children:n===c.key?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:"text-sm font-medium text-foreground mb-2",children:"Edit Token"}),(0,b.jsx)(w.Input,{type:"password",value:x,onChange:a=>{var b;let c;return z(b=a.target.value),G(""),void(I(c=E(b)),b&&!c&&G("Invalid token format. Must start with sk-ant-api or sk-ant-oat"))},placeholder:"sk-ant-api... or sk-ant-oat...",className:"w-full font-mono",autoFocus:!0}),H&&!A&&(0,b.jsxs)("div",{className:"text-xs text-success",children:["→ Detected: ",D[H]]}),A&&(0,b.jsx)("div",{className:"text-xs text-destructive",children:A}),(0,b.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,b.jsx)(m.Button,{variant:"outline",size:"sm",onClick:U,className:"active:scale-95",children:(0,b.jsx)(q.X,{className:"w-4 h-4"})}),(0,b.jsx)(m.Button,{size:"sm",onClick:()=>V(c.key),disabled:!H||!!A,className:"active:scale-95",children:(0,b.jsx)(r.Check,{className:"w-4 h-4"})})]})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("span",{className:"text-sm font-medium text-foreground",children:c.label}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(m.Button,{variant:"ghost",size:"icon-lg",onClick:()=>K(a=>({...a,[c.key]:!a[c.key]})),title:J[c.key]?"Hide value":"Show value",children:J[c.key]?(0,b.jsx)(t,{className:"w-4 h-4 text-muted-foreground"}):(0,b.jsx)(s.Eye,{className:"w-4 h-4 text-muted-foreground"})}),(0,b.jsx)(m.Button,{variant:"ghost",size:"icon-lg",onClick:()=>{o(c.key),z(""),G(""),I(null)},title:"Edit",children:(0,b.jsx)(v.Pencil,{className:"w-4 h-4 text-muted-foreground"})}),"global"!==a.scope&&(0,b.jsx)(m.Button,{variant:"ghost",size:"icon-lg",onClick:()=>X(c.key),className:"hover:bg-destructive/10",title:"Delete",children:(0,b.jsx)(u.Trash2,{className:"w-4 h-4 text-destructive"})})]})]}),(0,b.jsx)(w.Input,{type:J[c.key]?"text":"password",value:c.value,readOnly:!0,className:"w-full font-mono"})]})},c.key)):(0,b.jsx)("div",{className:"text-center text-muted-foreground text-sm py-4",children:"No Claude tokens configured"})]})]})}var G=a.i(49594),H=a.i(90002);function I(){let[a,d]=(0,c.useState)([]),[e,g]=(0,c.useState)({}),[h,i]=(0,c.useState)(null),[j,k]=(0,c.useState)(!1),l=(0,c.useCallback)(async()=>{try{let[a,b]=await Promise.all([fetch((0,f.apiUrl)("/api/repos")).then(a=>a.json()),fetch((0,f.apiUrl)("/api/tasks")).then(a=>a.json())]);d(a.data?.repos??[]);let c={};for(let a of b.data?.tasks??[]){let b=`${a.owner}/${a.repo}`;c[b]=(c[b]??0)+1}g(c)}catch(a){console.error("Failed to load repositories:",a)}},[]);(0,c.useEffect)(()=>{l()},[l]);let n=async()=>{if(h){k(!0);try{if(!(await fetch((0,f.apiUrl)(`/api/repos/${h.owner}/${h.repo}`),{method:"DELETE"})).ok)throw Error("Failed to delete repository");await l()}catch(a){console.error("Failed to delete repository:",a)}finally{k(!1),i(null)}}};return 0===a.length?(0,b.jsx)("div",{className:"text-sm text-muted-foreground",children:"No repositories cloned yet."}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(H.ConfirmDialog,{open:null!==h,onOpenChange:a=>{a.open||i(null)},title:"Delete Repository",message:h?`Delete ${h.owner}/${h.repo}? This will also delete ${e[`${h.owner}/${h.repo}`]??0} associated task(s), all worktrees, and the bare repository. This action cannot be undone.`:"",confirmLabel:j?"Deleting...":"Delete",cancelLabel:"Cancel",onConfirm:n,variant:"danger"}),(0,b.jsx)("div",{className:"space-y-2",children:a.map(a=>{let c=`${a.owner}/${a.repo}`,d=(0,G.getRepoColor)(a.owner,a.repo),f=e[c]??0;return(0,b.jsxs)("div",{className:"flex items-center justify-between rounded-md border border-border p-3",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("span",{className:`inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${d.bg} ${d.text}`,children:c}),(0,b.jsxs)("span",{className:"text-xs text-muted-foreground",children:[f," task",1!==f?"s":""]})]}),(0,b.jsx)(m.Button,{variant:"ghost",size:"icon",onClick:()=>i(a),className:"text-muted-foreground hover:text-destructive",children:(0,b.jsx)(u.Trash2,{className:"size-4"})})]},a.id)})})]})}var J=a.i(26807);function K({owner:a,repo:d,onDeleted:e}){let[g,h]=(0,c.useState)(!1),[i,j]=(0,c.useState)(""),[k,l]=(0,c.useState)(!1),n=`${a}/${d}`,o=i===n,p=async()=>{if(o){l(!0);try{if(!(await fetch((0,f.apiUrl)(`/api/repos/${a}/${d}`),{method:"DELETE"})).ok)throw Error("Failed to delete repository");e()}catch(a){console.error("Failed to delete repository:",a)}finally{l(!1),h(!1),j("")}}};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"rounded-md border border-destructive/30 p-4 space-y-3",children:[(0,b.jsxs)("div",{className:"space-y-1",children:[(0,b.jsx)("h3",{className:"text-sm font-semibold text-destructive",children:"Remove Repository"}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground",children:"Remove this repository and all associated data including tasks, worktrees, and environment variables. This action cannot be undone."})]}),(0,b.jsxs)(m.Button,{variant:"destructive",size:"sm",onClick:()=>h(!0),children:[(0,b.jsx)(u.Trash2,{className:"size-4"}),"Remove Repository"]})]}),(0,b.jsx)(J.Dialog,{open:g,onOpenChange:h,children:(0,b.jsxs)(J.DialogContent,{showCloseButton:!1,children:[(0,b.jsxs)(J.DialogHeader,{children:[(0,b.jsx)(J.DialogTitle,{children:"Remove Repository"}),(0,b.jsxs)(J.DialogDescription,{children:["This will permanently delete ",(0,b.jsx)("strong",{children:n})," and all associated tasks, worktrees, and environment variables."]})]}),(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsxs)("label",{className:"text-xs text-muted-foreground",children:["Type ",(0,b.jsx)("strong",{children:n})," to confirm"]}),(0,b.jsx)(w.Input,{value:i,onChange:a=>j(a.target.value),placeholder:n,autoComplete:"off"})]}),(0,b.jsxs)(J.DialogFooter,{children:[(0,b.jsx)(m.Button,{variant:"outline",size:"sm",onClick:()=>{h(!1),j("")},disabled:k,children:"Cancel"}),(0,b.jsx)(m.Button,{variant:"destructive",size:"sm",onClick:p,disabled:!o||k,children:k?"Removing...":"Remove"})]})]})})]})}var L=a.i(67453),M=a.i(36620),N=a.i(96221),O=a.i(4975),P=a.i(48124),Q=a.i(92552),R=a.i(65025),S=a.i(97463),T=a.i(6828),U=a.i(56026);let V="tsunagi:voice-input-enabled",W={not_running:"停止中",installing_deps:"依存関係をインストール中...",downloading_model:"モデルをダウンロード中...",starting_server:"サーバーを起動中...",running:"実行中",running_external:"実行中 (tsunagi外で起動)",error:"エラー"},X=["installing_deps","downloading_model","starting_server"],Y=["running","running_external"];function Z(a){let b=a/0x40000000;return b>=.1?`${b.toFixed(2)} GB`:`${(a/1048576).toFixed(0)} MB`}function $(){let[a,d]=(0,c.useState)(!1),[e,g]=(0,c.useState)(!1),[h,i]=(0,c.useState)(null),[j,k]=(0,c.useState)(""),l=(0,c.useRef)(null),n=(0,c.useCallback)(a=>{d(a),localStorage.setItem(V,String(a))},[]),o=(0,c.useCallback)(a=>{k(a),localStorage.setItem(U.WHISPER_PROMPT_STORAGE_KEY,a)},[]),p=(0,c.useCallback)(async()=>{let a=await fetch((0,f.apiUrl)("/api/whisper/server/status")),b=await a.json();return i(b),b},[]);(0,c.useEffect)(()=>{d("true"===localStorage.getItem(V)),k(localStorage.getItem(U.WHISPER_PROMPT_STORAGE_KEY)??""),p()},[p]),(0,c.useEffect)(()=>{h&&Y.includes(h.step)&&!a&&(n(!0),T.toaster.create({type:"success",title:"音声入力が有効化されました"}))},[h,a,n]),(0,c.useEffect)(()=>(h&&X.includes(h.step)&&!l.current&&(l.current=setInterval(()=>{p().then(a=>{!X.includes(a.step)&&l.current&&(clearInterval(l.current),l.current=null)})},1e3)),()=>{l.current&&(clearInterval(l.current),l.current=null)}),[h,p]);let q=(0,c.useCallback)(()=>{p(),g(!0)},[p]),r=(0,c.useCallback)(async()=>{try{let a=await fetch((0,f.apiUrl)("/api/whisper/server/start"),{method:"POST"});if(!a.ok){let b=await a.json().catch(()=>null);throw Error(b?.error||`HTTPエラー: ${a.status}`)}i(await a.json())}catch(a){T.toaster.create({type:"error",title:"サーバーの起動に失敗しました",description:a instanceof Error?a.message:String(a)})}},[]),s=(0,c.useCallback)(async()=>{try{let a=await fetch((0,f.apiUrl)("/api/whisper/server/stop"),{method:"POST"});if(!a.ok){let b=await a.json().catch(()=>null);throw Error(b?.error||`HTTPエラー: ${a.status}`)}i(await a.json())}catch(a){T.toaster.create({type:"error",title:"サーバーの停止に失敗しました",description:a instanceof Error?a.message:String(a)})}},[]),t=(0,c.useCallback)(()=>{n(!1),h&&Y.includes(h.step)&&s()},[n,s,h]),u=h?.serverDir,v=h?.downloadProgress,w=v?v.downloadedBytes/v.totalBytes*100:0,x=null!==h,y=x&&Y.includes(h.step);return(0,b.jsxs)(Q.Card,{children:[(0,b.jsxs)(Q.CardHeader,{children:[(0,b.jsxs)("div",{className:"flex items-center gap-1",children:[(0,b.jsx)(Q.CardTitle,{children:"音声入力 (実験的機能)"}),(0,b.jsx)(m.Button,{variant:"ghost",size:"icon-sm",onClick:q,title:"音声入力について",children:(0,b.jsx)(M.CircleHelp,{})})]}),(0,b.jsx)(Q.CardDescription,{children:"ローカルで動作するWhisperを使って音声入力を行います。下記のローカルLLMも有効にすると、 文字起こし結果がLLMで自動整形されます(無効時は文字起こし結果をそのまま使用)。"})]}),(0,b.jsx)(Q.CardContent,{className:"flex flex-col gap-3",children:a?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[x?y?(0,b.jsxs)("span",{className:"flex items-center gap-2 text-success",children:[(0,b.jsx)(L.CheckCircle2,{className:"size-4"}),"音声入力: 有効"]}):(0,b.jsxs)("span",{className:"flex items-center gap-2 text-warning",children:[(0,b.jsx)(B.AlertCircle,{className:"size-4"}),"音声入力: 有効化済み(サーバー停止中)"]}):(0,b.jsxs)("span",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,b.jsx)(N.Loader2,{className:"size-4 animate-spin"}),"状態を確認中..."]}),h&&(0,b.jsxs)("span",{className:"text-xs/relaxed text-muted-foreground",children:["(",W[h.step],")"]}),x&&!y&&(0,b.jsxs)(m.Button,{size:"default",onClick:q,children:[(0,b.jsx)(O.Mic,{}),"サーバーを起動"]}),(0,b.jsx)(m.Button,{size:"default",variant:"outline",onClick:t,children:"無効にする"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"mb-1 block text-xs font-medium text-muted-foreground",children:"文字起こしプロンプト (任意)"}),(0,b.jsx)(S.Textarea,{value:j,onChange:a=>o(a.target.value),placeholder:"例: 誤字、句読点、音声入力、Whisper、固有名詞や専門用語など",className:"min-h-16 text-xs"}),(0,b.jsx)("p",{className:"mt-1 text-[0.65rem] text-muted-foreground",children:"よく使う単語(固有名詞・専門用語・同音異義語で誤変換されやすい単語など)を列挙すると、 Whisperがその表記を優先しやすくなり誤変換が減ります。文章でなく単語の羅列でも構いません。空でも可。"})]})]}):(0,b.jsxs)(m.Button,{size:"default",onClick:q,children:[(0,b.jsx)(O.Mic,{}),"音声入力を有効化する"]})}),(0,b.jsx)(H.Dialog,{open:e,onOpenChange:({open:a})=>g(a),title:"音声入力について",maxWidth:"2xl",children:(0,b.jsxs)("div",{className:"space-y-4 text-sm",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"font-medium text-foreground",children:"実験的機能です"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"音声入力はローカルで動作するWhisper (mlx-whisper) を利用します。精度・速度は環境に依存し、今後変更される可能性があります。"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"font-medium text-foreground",children:"対応環境"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"Apple Silicon Mac (M1/M2/M3/M4) のみ対応。Windows/Linuxでは利用できません。"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"font-medium text-foreground",children:"必要なもの(事前に手動でインストール)"}),(0,b.jsx)("ul",{className:"list-disc pl-5 text-muted-foreground",children:(0,b.jsx)("li",{children:"Python 3.9以降(Xcode Command Line Tools または Homebrew経由で入手可能)"})})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"mb-1 font-medium text-foreground",children:"セットアップ・起動"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"下のボタンから、依存関係のインストール・モデルのダウンロード・サーバー起動まで自動で行われます(初回は数分かかります)。"}),h&&!u&&(0,b.jsx)("p",{className:"mt-1 text-destructive",children:"whisper-serverが見つかりませんでした。インストールが壊れている可能性があります。"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"mb-1 font-medium text-foreground",children:"アンインストール"}),(0,b.jsxs)("p",{className:"text-muted-foreground",children:["音声入力のためにダウンロードされるもの(Pythonの依存関係・Whisperモデル、合計約2.6GB)は全て",(0,b.jsx)("code",{className:"rounded bg-muted px-1",children:"~/.tsunagi/whisper"}),"に保存されます。不要になった場合はこのディレクトリを削除するだけで、関連リソースを完全に削除できます。"]})]}),(0,b.jsxs)("div",{className:"border-t border-border pt-4",children:[(!h||"not_running"===h.step||"error"===h.step)&&(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)(m.Button,{size:"default",onClick:()=>void r(),disabled:!h,children:[h?(0,b.jsx)(O.Mic,{}):(0,b.jsx)(N.Loader2,{className:"animate-spin"}),"Whisperサーバーを起動"]}),h?.step==="error"&&h.error&&(0,b.jsx)("p",{className:"text-xs/relaxed text-destructive",children:h.error})]}),h?.step==="installing_deps"&&(0,b.jsxs)(m.Button,{size:"default",disabled:!0,children:[(0,b.jsx)(N.Loader2,{className:"animate-spin"}),"依存関係をインストール中... (数分かかる場合があります)"]}),h?.step==="downloading_model"&&(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs/relaxed text-muted-foreground",children:[(0,b.jsx)(N.Loader2,{className:"size-4 animate-spin"}),"モデルをダウンロード中..."]}),v&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(R.Progress,{value:w}),(0,b.jsxs)("p",{className:"text-xs/relaxed text-muted-foreground",children:[Z(v.downloadedBytes)," / ",Z(v.totalBytes)," (",w.toFixed(0),"%) ・ ",function(a){if(null===a)return"残り時間を計算中...";if(a<60)return`残り約${a}秒`;let b=Math.floor(a/60);return`残り約${b}分${a%60}秒`}(v.etaSeconds)]})]})]}),h?.step==="starting_server"&&(0,b.jsxs)(m.Button,{size:"default",disabled:!0,children:[(0,b.jsx)(N.Loader2,{className:"animate-spin"}),"サーバーを起動中..."]}),h&&Y.includes(h.step)&&(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsxs)("span",{className:"flex items-center gap-2 text-success",children:[(0,b.jsx)(L.CheckCircle2,{className:"size-4"}),"サーバーは起動しています"]}),(0,b.jsxs)(m.Button,{size:"default",variant:"outline",onClick:()=>void s(),children:[(0,b.jsx)(P.Square,{}),"サーバーを停止"]})]})]})]})})]})}var _=a.i(19768),aa=a.i(78512);a.s(["default",0,function(){let a=(0,d.useRouter)();(0,aa.useDocumentTitle)("settings");let g=()=>({scope:"global",label:"Global"}),[h,i]=(0,c.useState)(null),[j,k]=(0,c.useState)(0),[l,n]=(0,c.useState)({completed:!0,hasGlobalToken:!0});return(0,c.useEffect)(()=>{fetch((0,f.apiUrl)("/api/onboarding/status")).then(a=>a.json()).then(a=>{let b=a.data;n(b),b.completed||b.hasGlobalToken?i(g()):i({scope:"global",label:"Global"})}).catch(a=>{console.error("Failed to fetch onboarding status:",a),i(g())})},[]),(0,c.useEffect)(()=>{h&&localStorage.setItem("tsunagi:env-selected-node",JSON.stringify(h))},[h]),(0,b.jsxs)("div",{className:"h-screen flex flex-col bg-background",children:[(0,b.jsx)("div",{className:"sticky top-0 z-50 p-4 border-b border-border bg-card",children:(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsxs)(m.Button,{variant:"ghost",onClick:()=>a.push("/"),className:"text-primary font-medium hover:bg-primary/10 hover:text-foreground",children:[(0,b.jsx)(e.ArrowLeft,{className:"w-4 h-4"}),"Back to Board"]}),(0,b.jsx)("h1",{className:"text-xl font-bold text-foreground absolute left-1/2 -translate-x-1/2",children:"Settings"})]})}),(0,b.jsxs)("div",{className:"flex-1 flex min-h-0",children:[(0,b.jsx)("div",{className:"w-64 border-r border-border bg-card",children:(0,b.jsx)(o,{selectedNode:h,onNodeSelect:a=>{i(a)},refreshKey:j})}),(0,b.jsx)("div",{className:"flex-1 bg-card p-4 overflow-y-auto",children:h?(0,b.jsxs)("div",{className:"space-y-6",children:[(0,b.jsx)(F,{selectedNode:h,onboardingStatus:l,onSwitchToGlobal:()=>{i({scope:"global",label:"Global"})}}),(0,b.jsx)(A,{selectedNode:h}),"global"===h.scope&&(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsx)("h2",{className:"text-sm font-semibold text-foreground",children:"Repositories"}),(0,b.jsx)(I,{})]}),"global"===h.scope&&(0,b.jsx)($,{}),"global"===h.scope&&(0,b.jsx)(_.LocalLlmSection,{}),"repo"===h.scope&&h.owner&&h.repo&&(0,b.jsx)(K,{owner:h.owner,repo:h.repo,onDeleted:()=>{i({scope:"global",label:"Global"}),k(a=>a+1)}})]}):(0,b.jsx)("div",{className:"h-full flex items-center justify-center text-muted-foreground text-sm",children:"Select a node from the left panel"})})]})]})}],40006)}];
|
|
6
6
|
|
|
7
7
|
//# sourceMappingURL=apps_web_src_app_settings_page_tsx_0i6itlb._.js.map
|
|
@@ -7,9 +7,9 @@ globalThis.__BUILD_MANIFEST = {
|
|
|
7
7
|
"static/chunks/03~yq9q893hmn.js"
|
|
8
8
|
],
|
|
9
9
|
"lowPriorityFiles": [
|
|
10
|
-
"static/
|
|
11
|
-
"static/
|
|
12
|
-
"static/
|
|
10
|
+
"static/7jfNq7gWy6LmFypqM6QZf/_buildManifest.js",
|
|
11
|
+
"static/7jfNq7gWy6LmFypqM6QZf/_ssgManifest.js",
|
|
12
|
+
"static/7jfNq7gWy6LmFypqM6QZf/_clientMiddlewareManifest.js"
|
|
13
13
|
],
|
|
14
14
|
"rootMainFiles": [
|
|
15
15
|
"static/chunks/0apjd6p1xsnc3.js",
|