ompgui 0.7.8 → 0.7.11

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.
Files changed (132) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +3 -3
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +5 -5
  5. package/.next/react-loadable-manifest.json +13 -13
  6. package/.next/required-server-files.js +3 -2
  7. package/.next/required-server-files.json +3 -2
  8. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/_global-error.html +1 -1
  10. package/.next/server/app/_global-error.rsc +2 -2
  11. package/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
  12. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +2 -2
  13. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  15. package/.next/server/app/_not-found.html +1 -1
  16. package/.next/server/app/_not-found.rsc +3 -3
  17. package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  18. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
  19. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  20. package/.next/server/app/api/agent/[id]/events/route.js +2 -2
  21. package/.next/server/app/api/agent/[id]/events/route.js.nft.json +1 -1
  22. package/.next/server/app/api/agent/[id]/route.js +1 -1
  23. package/.next/server/app/api/agent/[id]/route.js.nft.json +1 -1
  24. package/.next/server/app/api/agent/new/route.js +1 -1
  25. package/.next/server/app/api/agent/new/route.js.nft.json +1 -1
  26. package/.next/server/app/api/agent/running/events/route.js +2 -2
  27. package/.next/server/app/api/agent/running/events/route.js.nft.json +1 -1
  28. package/.next/server/app/api/agents/[name]/route.js +1 -1
  29. package/.next/server/app/api/agents/[name]/route.js.nft.json +1 -1
  30. package/.next/server/app/api/agents/route.js +1 -1
  31. package/.next/server/app/api/agents/route.js.nft.json +1 -1
  32. package/.next/server/app/api/agents/unpack/route.js +1 -1
  33. package/.next/server/app/api/agents/unpack/route.js.nft.json +1 -1
  34. package/.next/server/app/api/app-update/route.js +1 -1
  35. package/.next/server/app/api/auth/login/[provider]/route.js +2 -2
  36. package/.next/server/app/api/auth/login/[provider]/route.js.nft.json +1 -1
  37. package/.next/server/app/api/mcp/route.js +3 -3
  38. package/.next/server/app/api/mcp/route.js.nft.json +1 -1
  39. package/.next/server/app/api/model-roles/route.js +1 -1
  40. package/.next/server/app/api/model-roles/route.js.nft.json +1 -1
  41. package/.next/server/app/api/models/route.js +1 -1
  42. package/.next/server/app/api/models/route.js.nft.json +1 -1
  43. package/.next/server/app/api/omp-settings/route.js +1 -1
  44. package/.next/server/app/api/omp-settings/route.js.nft.json +1 -1
  45. package/.next/server/app/api/omp-update/route.js +2 -2
  46. package/.next/server/app/api/omp-update/route.js.nft.json +1 -1
  47. package/.next/server/app/api/providers/enable/route.js +1 -1
  48. package/.next/server/app/api/providers/enable/route.js.nft.json +1 -1
  49. package/.next/server/app/api/sessions/[id]/archive/route.js +1 -1
  50. package/.next/server/app/api/sessions/[id]/archive/route.js.nft.json +1 -1
  51. package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
  52. package/.next/server/app/api/sessions/[id]/auto-name/route.js.nft.json +1 -1
  53. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  54. package/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  55. package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
  56. package/.next/server/app/api/sessions/[id]/state/route.js.nft.json +1 -1
  57. package/.next/server/app/api/sessions/[id]/subagents/route.js +1 -1
  58. package/.next/server/app/api/sessions/[id]/subagents/route.js.nft.json +1 -1
  59. package/.next/server/app/api/sessions/route.js +1 -1
  60. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  61. package/.next/server/app/index.html +1 -1
  62. package/.next/server/app/index.rsc +4 -4
  63. package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
  64. package/.next/server/app/index.segments/_full.segment.rsc +4 -4
  65. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  66. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  67. package/.next/server/app/login.html +1 -1
  68. package/.next/server/app/login.rsc +4 -4
  69. package/.next/server/app/login.segments/_full.segment.rsc +4 -4
  70. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  71. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +4 -4
  72. package/.next/server/app/page.js +2 -2
  73. package/.next/server/app/page.js.nft.json +1 -1
  74. package/.next/server/app/page_client-reference-manifest.js +1 -1
  75. package/.next/server/app/pair/page_client-reference-manifest.js +1 -1
  76. package/.next/server/app/pair.html +1 -1
  77. package/.next/server/app/pair.rsc +4 -4
  78. package/.next/server/app/pair.segments/_full.segment.rsc +4 -4
  79. package/.next/server/app/pair.segments/_tree.segment.rsc +2 -2
  80. package/.next/server/app/pair.segments/pair/__PAGE__.segment.rsc +4 -4
  81. package/.next/server/app-paths-manifest.json +3 -3
  82. package/.next/server/chunks/3100.js +2 -2
  83. package/.next/server/chunks/3294.js +1 -1
  84. package/.next/server/chunks/4008.js +18 -0
  85. package/.next/server/chunks/4367.js +1 -1
  86. package/.next/server/chunks/4674.js +1 -1
  87. package/.next/server/chunks/4980.js +1 -1
  88. package/.next/server/chunks/6429.js +1 -0
  89. package/.next/server/chunks/7077.js +1 -1
  90. package/.next/server/chunks/8015.js +107 -0
  91. package/.next/server/chunks/8501.js +1 -1
  92. package/.next/server/chunks/933.js +1 -1
  93. package/.next/server/chunks/9848.js +1 -0
  94. package/.next/server/instrumentation.js +1 -1
  95. package/.next/server/instrumentation.js.nft.json +1 -1
  96. package/.next/server/middleware-build-manifest.js +1 -1
  97. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  98. package/.next/server/pages/404.html +1 -1
  99. package/.next/server/pages/500.html +1 -1
  100. package/.next/server/server-reference-manifest.json +1 -1
  101. package/.next/server/webpack-runtime.js +1 -1
  102. package/.next/static/chunks/3274.f8f023fd73e607bc.js +2 -0
  103. package/.next/static/chunks/4315-fad7ccd6e548e08e.js +1 -0
  104. package/.next/static/chunks/4906-3ebc61b9b2c31745.js +1 -0
  105. package/.next/static/chunks/4996.c5525823b73ac947.js +1 -0
  106. package/.next/static/chunks/5806.06789869309659d0.js +1 -0
  107. package/.next/static/chunks/6268.c8711c205efe98a6.js +17 -0
  108. package/.next/static/chunks/9668.6c511d3f22a0d3ad.js +1 -0
  109. package/.next/static/chunks/app/page-66dfb84af2e0fea1.js +59 -0
  110. package/.next/static/chunks/webpack-7f93c1ded461bdcd.js +1 -0
  111. package/.next/static/css/d45df4610e8c9637.css +3 -0
  112. package/README.ja.md +12 -3
  113. package/README.ko.md +13 -5
  114. package/README.md +11 -5
  115. package/README.zh-CN.md +12 -3
  116. package/next.config.ts +1 -1
  117. package/package.json +3 -1
  118. package/.next/server/chunks/6480.js +0 -18
  119. package/.next/server/chunks/7226.js +0 -107
  120. package/.next/server/chunks/7779.js +0 -1
  121. package/.next/static/chunks/1941.66c3a0942c0c3e5d.js +0 -1
  122. package/.next/static/chunks/3274.487a15bb28a8bf64.js +0 -2
  123. package/.next/static/chunks/4315-f0bee51727fa8bed.js +0 -1
  124. package/.next/static/chunks/4318.196416c4ae7baadf.js +0 -17
  125. package/.next/static/chunks/4906-1472d0151646b3d8.js +0 -1
  126. package/.next/static/chunks/7488.1403755f69bda581.js +0 -1
  127. package/.next/static/chunks/9668.b62ea9e45077f781.js +0 -1
  128. package/.next/static/chunks/app/page-9304c484c09df22f.js +0 -59
  129. package/.next/static/chunks/webpack-afa1355fdf81dfd5.js +0 -1
  130. package/.next/static/css/63b622301ba107de.css +0 -3
  131. /package/.next/static/{PPk0j6NqdLVIbLaafEqjL → RCJWKG4f3VN3XnWbJ4581}/_buildManifest.js +0 -0
  132. /package/.next/static/{PPk0j6NqdLVIbLaafEqjL → RCJWKG4f3VN3XnWbJ4581}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- "use strict";exports.id=7779,exports.ids=[7779],exports.modules={28967:(a,b,c)=>{function d(){return globalThis.__piModelsCacheState||(globalThis.__piModelsCacheState={entries:new Map,inFlight:new Map,generation:0}),globalThis.__piModelsCacheState}function e(){let a=d();a.generation+=1,a.entries.clear(),a.inFlight.clear()}function f(a){return{...a,modelError:"Model list is temporarily unavailable. Check your configuration and try again."}}function g(a,b){var c,e,f;let g,h,i=d(),j=i.entries.get(a);if(j&&j.expiresAt>Date.now())return Promise.resolve(j.data);let k=i.inFlight.get(a)??(c=i,e=a,f=b,g=c.generation,h=Promise.resolve().then(f).then(a=>{if(c.generation===g&&c.inFlight.get(e)===h){for(c.entries.delete(e);c.entries.size>=32;){let a=c.entries.keys().next().value;if(void 0===a)break;c.entries.delete(a)}c.entries.set(e,{data:a,expiresAt:Date.now()+6e4})}return a}).finally(()=>{c.inFlight.get(e)===h&&c.inFlight.delete(e)}),c.inFlight.set(e,h),h);return j?(k.catch(()=>{}),Promise.resolve(j.data)):k}c.d(b,{Fw:()=>f,kn:()=>e,rC:()=>g})},87779:(a,b,c)=>{c.d(b,{A4:()=>T,HG:()=>U,rb:()=>P,Te:()=>V,OF:()=>$,Fn:()=>X});var d=c(29021),e=c(21820),f=c(78970),g=c(28967),h=c(13798),i=c(88501),j=c(78573),k=c(77598);let l={revision:0,items:[]},m="enqueue_message",n="recall_queued_message",o="delete_queued_message",p="promote_queued_message",q="get_message_queue",r="queue_stale_revision",s="queue_item_missing",t="queue_item_sending",u="queue_invalid",v="This message may already have been handed to the agent. It was not confirmed and will not be retried.",w=new Set([m,n,o,p,q]);class x extends Error{constructor(a,b){super(a),this.name="SessionQueueError",this.code=b}}function y(a){return"steer"===a||"followUp"===a}function z(a){return{type:"message_queue_update",queue:a}}function A(a,b){return b?{queue:a,recalled:b}:{queue:a}}function B(a){return Buffer.byteLength(a,"utf8")}function C(a){let b={id:a.id,text:a.text,lane:a.lane,status:a.status,...a.error?{error:a.error}:{},...a.attachments?{attachments:Object.freeze(a.attachments.map(a=>Object.freeze({...a})))}:{}};return Object.freeze(b),b}class D{getSnapshot(){return this.snapshot}hasSending(){return this.items.some(a=>"sending"===a.status)}selectDispatchCandidate(a){if(!this.hasSending())return this.items.find(b=>"queued"===b.status&&b.lane===a)}getImages(a){return this.imagePayloads.get(a)}enqueue(a){if(!y(a.lane))throw new x("lane must be steer or followUp",u);let b=(0,f.kc)(a.images);if(b)throw new x(b,u);let c=[],d=[],e=0;if(Array.isArray(a.images))for(let b of a.images){if("object"!=typeof b||null===b||!("data"in b)||!("mimeType"in b)||"string"!=typeof b.data||"string"!=typeof b.mimeType)throw new x("Each attachment must be an image",u);let a=(0,f.Si)(b.data);if(null===a)throw new x("Invalid image data",u);e+=a,c.push(Object.freeze({type:"image",data:b.data,mimeType:b.mimeType})),d.push({mimeType:b.mimeType,bytes:a})}if(this.imageBytes+e>0x6400000)throw new x("Queue image capacity exceeds 100MiB; remove or recall queued images first","queue_images_too_large");let g=this.assertText(a.text,c.length>0);if(this.items.length>=32)throw new x("The queue already holds 32 messages","queue_full");this.assertTotalBytes(B(g));let h=C({id:(0,k.randomUUID)(),lane:a.lane,text:g,status:"queued",...d.length?{attachments:d}:{}});return c.length&&this.imagePayloads.set(h.id,Object.freeze(c)),this.imageBytes+=e,this.items=[...this.items,h],this.publish()}promote(a,b){let c=this.requireMutable(a,b);if("followUp"!==c.lane||"queued"!==c.status)throw new x("Only a queued follow-up can be promoted to steer",u);let d=C({...c,lane:"steer",status:"queued"});return this.items=[d,...this.items.filter(b=>b.id!==a)],this.publish()}recall(a,b,c){let d=this.requireMutable(a,b),e=this.imagePayloads.get(a);if(void 0!==c){if(!Number.isSafeInteger(c)||c<=0)throw new x("Invalid recall response capacity",u);let a=B(JSON.stringify({queue:this.snapshot,recalled:d}))+256;for(let b of e??[])a+=b.data.length+B(JSON.stringify({type:"image",data:"",mimeType:b.mimeType}))+1;if(a>c)throw new x("These queued images exceed the remote recall transfer limit. Recall them from the web app instead; the queued message has not changed.","queue_recall_too_large")}return this.releaseImages(d),this.items=this.items.filter(b=>b.id!==a),{item:e?{...d,images:e}:d,snapshot:this.publish()}}delete(a,b){let c=this.requireMutable(a,b);return this.releaseImages(c),this.items=this.items.filter(b=>b.id!==a),this.publish()}markSending(a){let b=this.items.find(b=>b.id===a);if(!b)throw new x("Queued message was not found",s);if("queued"!==b.status)throw new x("Queued message is already being sent",t);return this.replace(a,{...b,status:"sending"}),this.publish()}markFailed(a,b){let c=this.items.find(b=>b.id===a);return c?(this.replace(a,{...c,status:"failed",error:b}),this.publish()):this.snapshot}remove(a){let b=this.items.find(b=>b.id===a);return b?(this.releaseImages(b),this.items=this.items.filter(b=>b.id!==a),this.publish()):this.snapshot}failSending(a){return this.hasSending()?(this.items=this.items.map(b=>"sending"===b.status?C({...b,status:"failed",error:a}):b),this.publish()):this.snapshot}reset(){return this.imagePayloads.clear(),this.imageBytes=0,this.items=[],this.revision=0,this.snapshot=l,this.snapshot}releaseImages(a){if(this.imagePayloads.delete(a.id))for(let b of a.attachments??[])this.imageBytes-=b.bytes}requireMutable(a,b){this.assertCas(b);let c=this.items.find(b=>b.id===a);if(!c)throw new x("Queued message was not found",s);if("sending"===c.status)throw new x("Queued message is already being sent",t);return c}assertCas(a){if("number"!=typeof a||a!==this.revision)throw new x("Queue revision is stale; reload the queue and retry",r)}assertText(a,b){if("string"!=typeof a)throw new x("Message text is required",u);if(!b&&0===a.trim().length)throw new x("Message text cannot be empty",u);if(B(a)>262144)throw new x("Message exceeds 262144 bytes","queue_item_too_large");return a}assertTotalBytes(a){let b=a;for(let a of this.items)b+=B(a.text);if(b>1048576)throw new x("Queue exceeds 1048576 bytes","queue_too_large")}replace(a,b){this.items=this.items.map(c=>c.id===a?C(b):c)}publish(){let a;this.revision+=1;let b={revision:this.revision,items:(Object.freeze(a=this.items.map(a=>C(a))),a)};return Object.freeze(b),this.snapshot=b,b}constructor(){this.revision=0,this.items=[],this.imagePayloads=new Map,this.imageBytes=0,this.snapshot=l}}let E="This session is restarting — retry in a moment.";class F extends Error{constructor(a,b){super(a),this.name="WebRpcError",this.code=b}}let G=new Set(["select","confirm","input","editor","open_url"]),H=new Set(["abort","abort_and_prompt","set_thinking_level","cycle_thinking_level","cycle_model","get_available_models","set_auto_compaction","set_auto_retry","abort_retry","abort_bash","set_todos","set_steering_mode","set_follow_up_mode","set_interrupt_mode","get_branch_messages","get_messages","get_messages_page","export_html","handoff","get_subagents","get_subagent_messages","set_subagent_subscription","get_login_providers","login"]),I={navigate_tree:"Branch navigation is not supported over the omp RPC protocol",clear_queue:"Recalling queued messages is not supported over the omp RPC protocol",get_tools:"Per-session tool listing is not supported over the omp RPC protocol",set_tools:"Changing tools on a running session is not supported over the omp RPC protocol; tool presets apply to new sessions",extension_ui_input:"Extension custom UI is not supported over the omp RPC protocol"},J={find:"glob",search:"grep"},K=new Set(["ls"]),L=["bash","read","edit","write","grep","find","ls","task"].map(a=>a.toLowerCase()).sort().join(",");function M(a,b,c=!1){let d=[];if(a)d.push("--resume",a);else if(void 0!==b){let a=b.map(a=>a.toLowerCase()).sort().join(",");if(0===b.length)d.push("--no-tools");else if(a===L);else{let a=function(a){let b=[];for(let c of a){let a=c.toLowerCase();if(K.has(a))continue;let d=J[a]??a;b.includes(d)||b.push(d)}return b}(b);a.length>0&&d.push("--tools",a.join(","))}}return c&&!a&&d.push("--advisor"),d}function N(a){return a?.length?a:void 0}function O(a){return"string"==typeof a.toolCallId&&a.toolCallId?a.toolCallId:"string"==typeof a.id&&a.id?a.id:""}function P(a){if(a&&(0,d.existsSync)(a))return{cwd:a,fellBack:!1};try{let a=process.cwd();if(a&&(0,d.existsSync)(a))return{cwd:a,fellBack:!0}}catch{}return{cwd:(0,e.homedir)(),fellBack:!0}}function Q(a){a&&"object"==typeof a&&void 0===a.estimatedTokensAfter&&(a.estimatedTokensAfter=Math.round((a.summary?.length??0)/4))}class R{constructor(a,b,c){this.listeners=[],this.pendingUiRequests=new Map,this.uiExpiryTimers=new Map,this.extensionStatuses=new Map,this.extensionWidgets=new Map,this.promptRunning=!1,this.bashRunning=!1,this.streaming=!1,this.compacting=!1,this.fastModeEnabled=!1,this.idleTimer=null,this.destroyListeners=[],this.onIdentityChangeCallback=null,this.unsubscribeFrames=null,this.initPromise=null,this.restarting=!1,this.mcpListWaiter=null,this._alive=!0,this.hostToolNames=new Set,this.pendingHostTools=new Map,this.hostUriSchemes=new Map,this.pendingHostUris=new Map,this.messageQueue=new D,this.queueEpoch=0,this.queueDispatching=!1,this.queueDispatchAgain=!1,this.abortHoldsDispatch=!1,this.activeToolIds=new Set,this.nativeFollowUpDepth=0,this.nativeHandoffPending=0,this.nativeQueuedCount=0,this.nativeQueueStale=!1,this.nativeReconcileGeneration=0,this.destroyPromise=null,this._sessionId="",this._sessionFile="",this.sessionFileSignalTimer=null,this.proc=a,this.cwd=b,this.recordedCwd=c??null}get sessionId(){return this._sessionId}get sessionFile(){return this._sessionFile}isAlive(){return this._alive&&this.proc.isAlive}isRunning(){return this.isAlive()&&(this.promptRunning||this.streaming||this.compacting||this.bashRunning)}start(){this.unsubscribeFrames=this.proc.onFrame(a=>this.handleFrame(a)),this.resetIdleTimer(),Z()}waitUntilReady(){return this.initPromise||(this.initPromise=this.initialize()),this.initPromise}async initialize(){let a=await this.proc.waitReady(12e4);await this.proc.negotiateProtocol(a),await this.proc.sendCommand({type:"set_subagent_subscription",level:"events"}).catch(()=>{});let b=await this.proc.sendCommand({type:"get_state"});this.applyIdentity(b),this.recordedCwd&&this.recordedCwd!==this.cwd&&this.emit({type:"notice",level:"warning",message:`This session's working directory no longer exists; the agent is running in ${this.cwd}.`})}applyIdentity(a){this._sessionId=a.sessionId,this._sessionFile=a.sessionFile??"",this._sessionName=a.sessionName,this.streaming=a.isStreaming,this.compacting=a.isCompacting,this.fastModeEnabled=a.fastModeEnabled??a.fastMode??this.fastModeEnabled,this._sessionFile&&(0,j.O8)(this._sessionId,this._sessionFile)}handleProcessExit(a){if(!this._alive||this.restarting)return;let b=a.trim().split("\n").pop()??"";this.emit({type:"notice",level:"error",message:`The omp process for this session exited unexpectedly${b?`: ${b}`:"."}`}),(this.streaming||this.promptRunning)&&this.emit({type:"agent_end",isTerminal:!0,messages:[]}),this.destroy()}handleFrame(a){this.resetIdleTimer();let b=!1,c=!1;switch(a.type){case"command_output":{let b=this.mcpListWaiter;if(b&&"string"==typeof a.text){clearTimeout(b.timer),this.mcpListWaiter=null,b.resolve(a.text),Z();return}break}case"agent_start":!this.streaming&&this.nativeFollowUpDepth>0&&(this.nativeFollowUpDepth-=1),this.streaming=!0,(0,j.mD)(),b=!0,this._sessionFile&&!(0,d.existsSync)(this._sessionFile)&&this.signalWhenSessionFileAppears();break;case"agent_end":!1!==a.isTerminal&&(this.streaming=!1,this.promptRunning=!1,this.activeToolIds.clear(),(0,j.mD)(),this.nativeQueuedCount>0||this.nativeQueueStale?this.beginNativeQueueReconcile():c=!0);break;case"prompt_result":this.promptRunning=!1,c=!0;break;case"auto_compaction_start":this.compacting=!0;break;case"auto_compaction_end":this.compacting=!1,Q(a.result),(0,j.mD)(),c=!0;break;case"tool_execution_start":{let b=O(a);b&&this.activeToolIds.add(b);break}case"tool_execution_end":{let b=O(a);b&&this.activeToolIds.delete(b),c=!0;break}case"session_info_update":"string"==typeof a.title&&(this._sessionName=a.title),(0,j.mD)(),b=!0;break;case"response":if(!1===a.success&&"prompt"===a.command){this.promptRunning=!1,this.emit({type:"prompt_error",errorMessage:a.error??"Prompt failed"}),Z(),this.scheduleQueueDispatch();return}break;case"extension_ui_request":if(this.trackExtensionUiRequest(a))return void Z();break;case"host_tool_call":{let b="string"==typeof a.id?a.id:"",c="string"==typeof a.toolName?a.toolName:"";if(b&&c&&this.hostToolNames.has(c)&&this.listeners.length>0){this.pendingHostTools.set(b,a),this.emit(a),Z();return}this.rejectUnexpectedHostTool(a);return}case"host_tool_cancel":{let b="string"==typeof a.targetId?a.targetId:"";if(b&&this.pendingHostTools.delete(b)){this.emit(a),Z();return}break}case"host_uri_request":{let b="string"==typeof a.id?a.id:"",c=("string"==typeof a.url?a.url:"").split(":")[0]??"",d="write"===a.operation?"write":"read",e=this.hostUriSchemes.get(c);if(b&&c&&e&&("write"!==d||e.writable)&&this.listeners.length>0){this.pendingHostUris.set(b,a),this.emit(a),Z();return}this.proc.sendFrame({type:"host_uri_result",id:b,isError:!0,error:`URI scheme "${c}" is not registered by omp-web`});return}case"host_uri_cancel":{let b="string"==typeof a.targetId?a.targetId:"";if(b&&this.pendingHostUris.delete(b)){this.emit(a),Z();return}}}this.emit(a),Z({refreshSessionList:b}),c&&this.scheduleQueueDispatch()}forgetPendingUiRequest(a){this.pendingUiRequests.delete(a);let b=this.uiExpiryTimers.get(a);b&&(clearTimeout(b),this.uiExpiryTimers.delete(a))}clearPendingUiRequests(){for(let a of this.uiExpiryTimers.values())clearTimeout(a);this.uiExpiryTimers.clear(),this.pendingUiRequests.clear()}trackExtensionUiRequest(a){let b=a.method,c=a.id;if("cancel"===b)return this.forgetPendingUiRequest(a.targetId),!1;let d=!1;try{d=(0,i.rk)().settings.tools?.approval?.extension==="allow"}catch{}if("confirm"===b&&"string"==typeof a.title&&/^allow tool\s*:/i.test(a.title)&&d)return this.forgetPendingUiRequest(c),this.proc.sendFrame({type:"extension_ui_response",id:c,confirmed:!0}),!0;if(G.has(b)){this.forgetPendingUiRequest(c);let b="number"==typeof a.timeout?a.timeout:void 0;if(void 0!==b&&Number.isFinite(b)&&b>0&&b<=0x7fffffff){a.expiresAt=Date.now()+b;let d=setTimeout(()=>{this.forgetPendingUiRequest(c),this.emit({type:"extension_ui_request",method:"cancel",id:`expired:${c}`,targetId:c})},b);d.unref?.(),this.uiExpiryTimers.set(c,d)}return this.pendingUiRequests.set(c,a),!1}if("setStatus"===b){let b=a.statusKey,c=a.statusText;return void 0===c?this.extensionStatuses.delete(b):this.extensionStatuses.set(b,c),!1}if("setWidget"===b){let b=a.widgetKey,c=a.widgetLines;void 0===c?this.extensionWidgets.delete(b):this.extensionWidgets.set(b,{key:b,lines:c,placement:a.widgetPlacement??"aboveEditor"})}return!1}rejectUnexpectedHostTool(a){let b="string"==typeof a.id?a.id:"";if(!b)return;let c="string"==typeof a.toolName?a.toolName:"unknown";this.proc.sendFrame({type:"host_tool_result",id:b,isError:!0,result:{content:[{type:"text",text:`Host tool "${c}" is not available in ompgui. Use OMP's built-in tools within the selected workspace.`}]}}),this.emit({type:"notice",level:"warning",message:`Rejected unavailable host tool: ${c}`})}rejectPendingHostTools(a){for(let b of this.pendingHostTools.keys())this.proc.sendFrame({type:"host_tool_result",id:b,isError:!0,result:{content:[{type:"text",text:a}]}});this.pendingHostTools.clear()}rejectPendingHostUris(a){for(let b of this.pendingHostUris.keys())this.proc.sendFrame({type:"host_uri_result",id:b,isError:!0,error:a});this.pendingHostUris.clear()}emit(a){for(let b of this.listeners)try{b(a)}catch{}}signalWhenSessionFileAppears(){if(this.sessionFileSignalTimer)return;let a=0,b=()=>{if(this.sessionFileSignalTimer=null,this._alive&&this._sessionFile){if(!(0,d.existsSync)(this._sessionFile)){(a+=1)<40&&(this.sessionFileSignalTimer=setTimeout(b,250));return}(0,j.mD)(),Z({refreshSessionList:!0})}};this.sessionFileSignalTimer=setTimeout(b,250)}resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=setTimeout(()=>{this.isRunning()?this.resetIdleTimer():this.destroy()},6e5)}onEvent(a){this.listeners.push(a);let b=Date.now();for(let[a,c]of this.pendingUiRequests){let d=c.expiresAt;if(void 0!==d&&d<=b){this.forgetPendingUiRequest(a);continue}}for(let b of(a({type:"extension_ui_pending",ids:[...this.pendingUiRequests.keys()]}),this.pendingUiRequests.values()))a(b);return a(z(this.messageQueue.getSnapshot())),()=>{let b=this.listeners.indexOf(a);-1!==b&&this.listeners.splice(b,1),0===this.listeners.length&&(this.rejectPendingHostTools("The web UI disconnected while the agent was waiting for this host tool"),this.rejectPendingHostUris("The web UI disconnected while the agent was waiting for this URI request"))}}onDestroy(a){return this._alive?(this.destroyListeners.push(a),()=>{let b=this.destroyListeners.indexOf(a);-1!==b&&this.destroyListeners.splice(b,1)}):(a(),()=>{})}onIdentityChange(a){this.onIdentityChangeCallback=a}async withFinalRunningNotification(a){try{return await a()}finally{Z()}}async getMcpList(){let a,b;if(this.restarting)throw new F(E,"session_restarting");if(!this.isAlive())throw Error("Session is no longer running");if(this.isRunning())throw new F("Wait for the current run to finish","session_busy");if(this.mcpListWaiter)throw new F("MCP list is already loading","mcp_list_loading");this.promptRunning=!0,Z();let c=new Promise((c,d)=>{a=c,b=d});c.catch(()=>{});let d={resolve:a,reject:b,timer:void 0};d.timer=setTimeout(()=>{this.mcpListWaiter===d&&(this.mcpListWaiter=null,b(new F("Timed out while loading MCP servers","mcp_list_timeout")))},15e3),d.timer.unref?.(),this.mcpListWaiter=d;try{return await this.proc.sendCommand({type:"prompt",message:"/mcp list"}),await c}catch(a){throw this.mcpListWaiter===d&&(clearTimeout(d.timer),this.mcpListWaiter=null,d.reject(a instanceof Error?a:Error(String(a)))),a}finally{this.mcpListWaiter===d&&(clearTimeout(d.timer),this.mcpListWaiter=null),this.promptRunning=!1,Z()}}buildWebState(a){return this.streaming=a.isStreaming,this.compacting=a.isCompacting,this._sessionName=a.sessionName,this.nativeQueuedCount=a.queuedMessageCount??0,this.nativeQueueStale=!1,a.sessionId&&(this._sessionId=a.sessionId,this._sessionFile=a.sessionFile??this._sessionFile),{sessionId:a.sessionId,sessionFile:a.sessionFile??"",sessionName:a.sessionName,isStreaming:a.isStreaming,isPromptRunning:this.promptRunning,isBashRunning:this.bashRunning,isCompacting:a.isCompacting,autoCompactionEnabled:a.autoCompactionEnabled,autoRetryEnabled:a.autoRetryEnabled,interruptMode:a.interruptMode,steeringMode:a.steeringMode,followUpMode:a.followUpMode,model:a.model?{id:a.model.id,provider:a.model.provider,name:a.model.name,reasoning:a.model.reasoning,thinking:a.model.thinking?{efforts:a.model.thinking.efforts}:void 0}:void 0,messageCount:a.messageCount,queuedMessageCount:a.queuedMessageCount,messageQueue:this.queueSnapshotForClient(),contextUsage:a.contextUsage??null,systemPrompt:a.systemPrompt?.join("\n\n")??"",thinkingLevel:a.thinkingLevel??"off",fastModeEnabled:a.fastModeEnabled??a.fastMode??this.fastModeEnabled,fastModeActive:a.fastModeActive,todoPhases:a.todoPhases??[],extensionStatuses:Array.from(this.extensionStatuses,([a,b])=>({key:a,text:b})),extensionWidgets:Array.from(this.extensionWidgets.values())}}async refreshIdentityAfterSessionChange(){let a=this._sessionId,b=await this.proc.sendCommand({type:"get_state"});return this.applyIdentity(b),a&&a!==this._sessionId&&(this.clearPendingUiRequests(),this.emit({type:"extension_ui_pending",ids:[]}),this.discardQueue("Queued messages were discarded because the session changed."),this.onIdentityChangeCallback?.(a,this._sessionId)),(0,j.mD)(),this._sessionId}async restart(){if(this.restarting)throw new F(E,"session_restarting");let a=this._sessionFile,b=!!a&&(0,d.existsSync)(a),c=this.proc;this.restarting=!0,this.queueEpoch+=1,this.abortHoldsDispatch=!1,this.activeToolIds.clear(),this.nativeFollowUpDepth=0,this.nativeHandoffPending=0,this.nativeQueuedCount=0,this.nativeQueueStale=!1,this.nativeReconcileGeneration+=1,this.messageQueue.failSending(v),this.emitQueueSnapshot(),this.unsubscribeFrames?.();try{if(await c.dispose(),!this._alive)return;this.extensionStatuses.clear(),this.extensionWidgets.clear(),this.clearPendingUiRequests(),this.promptRunning=!1,this.bashRunning=!1,this.streaming=!1,this.compacting=!1;let d=new h.X({cwd:this.cwd,extraArgs:M(b?a:""),onExit:({stderrTail:a})=>{this.proc===d&&this.handleProcessExit(a)}});this.proc=d,this.unsubscribeFrames=d.onFrame(a=>this.handleFrame(a));try{let a=await d.waitReady(12e4);await d.negotiateProtocol(a),await d.sendCommand({type:"set_subagent_subscription",level:"events"}).catch(()=>{});let b=await d.sendCommand({type:"get_state"});this.applyIdentity(b)}catch(a){throw this.unsubscribeFrames?.(),this.unsubscribeFrames=null,d.dispose(),this.destroy(),a}}finally{this.restarting=!1}Z(),this.scheduleQueueDispatch()}async send(a){if(this.restarting)throw new F(E,"session_restarting");if(!this.isAlive())throw Error("Session is no longer running");this.resetIdleTimer();let b=a.type;if("prompt"===b||"steer"===b||"follow_up"===b){let b=(0,f.kc)(a.images);if(b)throw Error(b)}let c=I[b];if(c)throw new h.x(b,c,"unsupported");if("string"==typeof b&&w.has(b))return this.handleQueueCommand(a);switch(b){case"prompt":{if(this.bashRunning)throw Error("Cannot send a prompt while a shell command is running");let b=a.streamingBehavior;b||(this.abortHoldsDispatch=!1,this.promptRunning=!0,Z());try{let c=await this.forwardNativeHandoff({type:"prompt",message:a.message,...N(a.images)?{images:N(a.images)}:{},...b?{streamingBehavior:b}:{}},"followUp"===b);c?.agentInvoked===!1&&(b||(this.promptRunning=!1,this.emit({type:"prompt_result",agentInvoked:!1}),Z()),this.scheduleQueueDispatch())}catch(a){throw this.promptRunning=!1,Z(),a}return null}case"steer":case"follow_up":return await this.forwardNativeHandoff({type:b,message:a.message,...N(a.images)?{images:N(a.images)}:{}},"follow_up"===b),null;case"abort":return this.abortHoldsDispatch=!0,await this.withFinalRunningNotification(async()=>{await this.proc.sendCommand({type:"abort"}),this.promptRunning=!1}),null;case"get_state":{let a=await this.proc.sendCommand({type:"get_state"});return this.buildWebState(a)}case"set_model":{let{provider:b,modelId:c}=a,d=await this.proc.sendCommand({type:"set_model",provider:b,modelId:c});return(0,g.kn)(),(0,j.mD)(),{id:d.id,provider:d.provider}}case"set_fast_mode":{let b=!0===a.enabled,c=await this.proc.sendCommand({type:"set_fast_mode",enabled:b});return this.fastModeEnabled=c?.enabled??b,{enabled:this.fastModeEnabled,active:c?.active??!1}}case"fork":if(this.bashRunning)throw Error("Cannot fork while a shell command is running");if(this.queueEpoch+=1,this.messageQueue.failSending(v),this.emitQueueSnapshot(),(await this.proc.sendCommand({type:"branch",entryId:a.entryId})).cancelled)return{cancelled:!0};return{cancelled:!1,newSessionId:await this.refreshIdentityAfterSessionChange()};case"new_session":case"switch_session":{this.queueEpoch+=1,this.messageQueue.failSending(v),this.emitQueueSnapshot();let b=await this.proc.sendCommand(a);if(!b.cancelled)return{cancelled:!1,newSessionId:await this.refreshIdentityAfterSessionChange()};return b}case"compact":try{return await this.withFinalRunningNotification(async()=>{this.compacting=!0,Z();try{let b=await this.proc.sendCommand({type:"compact",...a.customInstructions?{customInstructions:a.customInstructions}:{}});return Q(b),b}finally{this.compacting=!1}})}finally{(0,j.mD)(),this.scheduleQueueDispatch()}case"abort_compaction":return this.abortHoldsDispatch=!0,await this.withFinalRunningNotification(()=>this.proc.sendCommand({type:"abort"})),null;case"set_session_name":{let b=a.name?.trim();if(!b)throw Error("Session name cannot be empty");return await this.proc.sendCommand({type:"set_session_name",name:b}),this._sessionName=b,(0,j.mD)(),null}case"get_session_stats":return{...await this.proc.sendCommand({type:"get_session_stats"}),sessionName:this._sessionName};case"get_last_assistant_text":return{text:(await this.proc.sendCommand({type:"get_last_assistant_text"})).text??""};case"get_commands":return await this.proc.sendCommand({type:"get_available_commands"});case"reload":return await this.restart(),{success:!0};case"extension_ui_response":{let b,c=a.id,d="string"==typeof c?this.pendingUiRequests.get(c):void 0;if(!d||"string"!=typeof c)throw new F("This dialog is no longer pending in this session","dialog_not_pending");if("number"==typeof d.expiresAt&&d.expiresAt<=Date.now())throw this.forgetPendingUiRequest(c),this.emit({type:"extension_ui_request",method:"cancel",id:`expired:${c}`,targetId:c}),new F("This dialog has expired","dialog_not_pending");if(!0===a.cancelled)b={cancelled:!0,...!0===a.timedOut?{timedOut:!0}:{}};else if("confirm"===d.method||"open_url"===d.method){if("boolean"!=typeof a.confirmed)throw new F("A boolean confirmation is required","invalid_dialog_response");b={confirmed:a.confirmed}}else{if("string"!=typeof a.value||a.value.length>3145728)throw new F("A dialog value of at most 3Mi characters is required","invalid_dialog_response");if("select"===d.method&&(!Array.isArray(d.options)||!d.options.includes(a.value)))throw new F("Select one of the offered options","invalid_dialog_response");b={value:a.value}}return this.proc.sendFrame({type:"extension_ui_response",id:c,...b}),this.forgetPendingUiRequest(c),this.emit({type:"extension_ui_request",method:"cancel",id:`answered:${c}`,targetId:c}),null}case"bash":if(!0===a.excludeFromContext)throw new F("omp cannot run a shell command with its output excluded from the model context (`!!`): the RPC bash command has no exclusion option, so the output would silently enter the context anyway. Run it with a single `!` to share the output with the model, or use a terminal outside ompgui.","bash_exclude_unsupported");if(this.isRunning())throw Error("Cannot run a shell command while the session is busy");this.bashRunning=!0,Z();try{return await this.proc.sendCommand({type:"bash",command:a.command})}finally{this.bashRunning=!1,(0,j.mD)(),Z(),this.scheduleQueueDispatch()}case"set_host_tools":{let b=(Array.isArray(a.tools)?a.tools:[]).filter(a=>"string"==typeof a.name&&a.name);return this.hostToolNames=new Set(b.map(a=>a.name)),await this.proc.sendCommand({type:"set_host_tools",tools:b}),null}case"host_tool_result":return"string"==typeof a.id&&this.pendingHostTools.delete(a.id),await this.proc.sendCommand(a),null;case"set_host_uri_schemes":{let b=Array.isArray(a.schemes)?a.schemes:[];for(let a of(this.hostUriSchemes=new Map,b))"string"==typeof a.scheme&&a.scheme&&this.hostUriSchemes.set(a.scheme,{writable:!0===a.writable});return await this.proc.sendCommand({type:"set_host_uri_schemes",schemes:b}),null}case"host_uri_result":return"string"==typeof a.id&&this.pendingHostUris.delete(a.id),await this.proc.sendCommand(a),null;default:if(H.has(b)){let c=await this.proc.sendCommand(a);return"set_thinking_level"===b&&(0,j.mD)(),c??null}throw Error(`Unsupported command: ${b}`)}}handleQueueCommand(a){try{let b=a.type;switch(b){case m:if(!y(a.lane))throw new x("lane must be steer or followUp",u);if("string"!=typeof a.message)throw new x("message is required",u);return this.messageQueue.enqueue({lane:a.lane,text:a.message,images:a.images}),this.abortHoldsDispatch=!1,this.emitQueueSnapshot(),this.finishQueueCommand();case p:if("string"!=typeof a.id)throw new x("id is required",u);return this.messageQueue.promote(a.id,this.requireExpectedRevision(a)),this.abortHoldsDispatch=!1,this.emitQueueSnapshot(),this.finishQueueCommand();case n:{if("string"!=typeof a.id)throw new x("id is required",u);let b=a.__relayRecallMaxBytes;if(void 0!==b&&"number"!=typeof b)throw new x("Invalid recall response capacity",u);let{item:c}=this.messageQueue.recall(a.id,this.requireExpectedRevision(a),b);this.emitQueueSnapshot();let d=A(this.queueSnapshotForClient(),c);return this.scheduleQueueDispatch(),Promise.resolve(d)}case o:if("string"!=typeof a.id)throw new x("id is required",u);return this.messageQueue.delete(a.id,this.requireExpectedRevision(a)),this.emitQueueSnapshot(),this.finishQueueCommand();case q:return Promise.resolve(A(this.queueSnapshotForClient()));default:throw Error(`Unsupported command: ${b}`)}}catch(a){if(a instanceof x)throw new F(a.message,a.code);throw a}}requireExpectedRevision(a){if("number"!=typeof a.expectedRevision)throw new x("Queue revision is stale; reload the queue and retry",r);return a.expectedRevision}async finishQueueCommand(){return await this.drainQueueDispatch(),A(this.queueSnapshotForClient())}queueSnapshotForClient(){return{...this.messageQueue.getSnapshot(),nativeQueuedCount:this.nativeQueuedCount}}emitQueueSnapshot(){this.emit(z(this.queueSnapshotForClient()))}beginNativeQueueReconcile(){this.nativeQueueStale=!0,this.nativeReconcileGeneration+=1;let a=this.nativeReconcileGeneration,b=this.queueEpoch,c=this.proc;this.refreshNativeQueuedCount(a,b,c)}async refreshNativeQueuedCount(a,b,c){try{let d=await c.sendCommand({type:"get_state"});if(!this.nativeReconcileStillValid(a,b,c))return;this.nativeQueuedCount=d.queuedMessageCount??0,this.nativeQueueStale=!1}catch{if(!this.nativeReconcileStillValid(a,b,c))return;this.nativeQueuedCount=0,this.nativeQueueStale=!1}this.scheduleQueueDispatch()}nativeReconcileStillValid(a,b,c){return this._alive&&this.queueEpoch===b&&this.proc===c&&this.nativeReconcileGeneration===a}discardQueue(a){this.queueEpoch+=1;let b=this.messageQueue.getSnapshot().items.length>0;this.messageQueue.reset(),this.emitQueueSnapshot(),b&&this.emit({type:"notice",level:"warning",message:a})}scheduleQueueDispatch(){this.drainQueueDispatch()}async drainQueueDispatch(){if(this.queueDispatching){this.queueDispatchAgain=!0;return}this.queueDispatching=!0;try{do this.queueDispatchAgain=!1,await this.dispatchNextQueueItem();while(this.queueDispatchAgain)}catch{}finally{this.queueDispatching=!1,this.queueDispatchAgain&&this.scheduleQueueDispatch()}}canDispatchSteer(){return this.isAlive()&&!this.restarting&&this.streaming&&!this.compacting&&!this.bashRunning&&0===this.activeToolIds.size&&0===this.pendingHostTools.size&&0===this.nativeHandoffPending}canDispatchFollowUp(){return this.isAlive()&&!this.restarting&&!this.abortHoldsDispatch&&!this.promptRunning&&!this.streaming&&!this.compacting&&!this.bashRunning&&0===this.activeToolIds.size&&0===this.pendingHostTools.size&&0===this.nativeFollowUpDepth&&0===this.nativeHandoffPending&&!this.nativeQueueStale&&0===this.nativeQueuedCount}canDispatchIdlePrompt(){return this.canDispatchFollowUp()}async dispatchNextQueueItem(){for(;this.isAlive()&&!this.restarting;){if(this.messageQueue.hasSending())return;let a=this.messageQueue.selectDispatchCandidate("steer");if(a){if(this.canDispatchSteer()){await this.forwardQueueItem(a,"steer");continue}if(this.canDispatchIdlePrompt()){await this.forwardQueueItem(a);continue}return}let b=this.messageQueue.selectDispatchCandidate("followUp");if(b&&this.canDispatchFollowUp()){await this.forwardQueueItem(b);continue}return}}async forwardQueueItem(a,b){let c=this.queueEpoch,d=this.proc,e=this._sessionId,f=this.messageQueue.getImages(a.id);this.messageQueue.markSending(a.id),this.emitQueueSnapshot(),b||(this.promptRunning=!0,Z());try{let g=await d.sendCommand({type:"prompt",message:a.text,...f?{images:f}:{},...b?{streamingBehavior:b}:{}},3e4);if(!this.queueForwardStillValid(c,d,e,a.id))return;this.messageQueue.remove(a.id),this.emitQueueSnapshot(),g?.agentInvoked!==!1||b||(this.promptRunning=!1,this.emit({type:"prompt_result",agentInvoked:!1}),Z())}catch(g){if(b||(this.promptRunning=!1),!this.queueForwardStillValid(c,d,e,a.id))return;let f=g instanceof Error&&/timed out/i.test(g.message)?v:`${v} ${g instanceof Error?g.message:String(g)}`;this.messageQueue.markFailed(a.id,f),this.emitQueueSnapshot(),this.emit({type:"notice",level:"warning",message:f}),Z()}}queueForwardStillValid(a,b,c,d){return!!this._alive&&this.queueEpoch===a&&this.proc===b&&(!c||this._sessionId===c)&&this.messageQueue.getSnapshot().items.some(a=>a.id===d&&"sending"===a.status)}async forwardNativeHandoff(a,b){this.nativeHandoffPending+=1,b&&(this.nativeFollowUpDepth+=1);try{var c;let d=await this.proc.sendCommand(a);return b&&(c=d)&&"object"==typeof c&&!1===c.agentInvoked&&(this.nativeFollowUpDepth=Math.max(0,this.nativeFollowUpDepth-1)),d}catch(a){throw b&&(this.nativeFollowUpDepth=Math.max(0,this.nativeFollowUpDepth-1)),a}finally{this.nativeHandoffPending=Math.max(0,this.nativeHandoffPending-1),this.scheduleQueueDispatch()}}destroy(){this.destroyAndWait()}async destroyAndWait(){if(this.destroyPromise)return this.destroyPromise;if(!this._alive)return;this._alive=!1,this.queueEpoch+=1,this.abortHoldsDispatch=!0,this.discardQueue("Queued messages were discarded because the session shut down."),this.idleTimer&&clearTimeout(this.idleTimer),this.sessionFileSignalTimer&&(clearTimeout(this.sessionFileSignalTimer),this.sessionFileSignalTimer=null),this.unsubscribeFrames?.(),this.clearPendingUiRequests(),this.mcpListWaiter&&(clearTimeout(this.mcpListWaiter.timer),this.mcpListWaiter.reject(Error("Session was closed while loading MCP servers")),this.mcpListWaiter=null);let a=this.proc.dispose().catch(()=>{}).then(()=>{for(let[a,b]of S())b===this&&S().delete(a)});for(let b of(this.destroyPromise=a,this.pendingHostTools.clear(),this.hostToolNames.clear(),this.pendingHostUris.clear(),this.hostUriSchemes.clear(),this.destroyListeners.splice(0)))try{b()}catch{}Z(),await a}}function S(){if(!globalThis.__ompSessions){globalThis.__ompSessions=new Map;let a=()=>globalThis.__ompSessions?.forEach(a=>a.destroy());process.once("exit",a),process.once("SIGINT",a),process.once("SIGTERM",a)}return globalThis.__ompSessions}function T(a){return S().get(a)}function U(){let a=new Set;for(let[b,c]of S())c.isRunning()&&a.add(c.sessionId||b);return[...a]}async function V(){let a=[...new Set(S().values())];return await Promise.all(a.map(a=>a.destroyAndWait())),a.length}function W(){return globalThis.__ompRunningListeners||(globalThis.__ompRunningListeners=new Set),globalThis.__ompRunningListeners}function X(a){let b=W();return b.add(a),()=>{b.delete(a)}}let Y="";function Z({refreshSessionList:a=!1}={}){let b=U(),c=JSON.stringify([...b].sort());if(c===Y&&!a)return;Y=c;let d={ids:b,refreshSessionList:a};for(let a of W())try{a(d)}catch{}}async function $(a,b,c,d,e=!1,f){let g=S(),i=(globalThis.__ompStartLocks||(globalThis.__ompStartLocks=new Map),globalThis.__ompStartLocks),j=g.get(a);for(;j&&!j.isAlive()&&j.destroyPromise;)await j.destroyPromise,j=g.get(a);if(j?.isAlive())return{session:j,realSessionId:a};let k=i.get(a);if(k)return k;let l=(async()=>{let a={},i=new R(new h.X({cwd:c,extraArgs:M(b,d,e),onExit:({stderrTail:b})=>a.wrapper?.handleProcessExit(b)}),c,f);a.wrapper=i,i.start();try{await i.waitUntilReady()}catch(a){throw await i.destroyAndWait(),a}let j=i.sessionId;return i.onIdentityChange((a,b)=>{g.get(a)===i&&g.delete(a),g.set(b,i)}),g.set(j,i),{session:i,realSessionId:j}})().finally(()=>i.delete(a));return i.set(a,l),l}}};
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1941],{12651:(e,t,n)=>{n.d(t,{A:()=>i});let i=(0,n(99537).A)("cpu",[["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M17 20v2",key:"1rnc9c"}],["path",{d:"M17 2v2",key:"11trls"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M2 17h2",key:"7oei6x"}],["path",{d:"M2 7h2",key:"asdhe0"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"M20 17h2",key:"1fpfkl"}],["path",{d:"M20 7h2",key:"1o8tra"}],["path",{d:"M7 20v2",key:"4gnj0m"}],["path",{d:"M7 2v2",key:"1i4yhu"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1",key:"z9xiuo"}]])},34140:(e,t,n)=>{n.d(t,{NN:()=>s,RJ:()=>o});let i="ompgui-sound-enabled",a="omp-sound-enabled";function s(){try{let e=function(){let e=window.localStorage,t=e.getItem(i);if(null!==t)return t;let n=e.getItem(a);if(null===n)return null;if("true"===n||"false"===n)try{return e.setItem(i,n),e.removeItem(a),n}catch{return null}try{e.removeItem(a)}catch{}return null}();return null===e||"true"===e}catch{return!0}}function o(e){try{window.localStorage.setItem(i,String(e))}catch{}}},35893:(e,t,n)=>{n.d(t,{t_:()=>o,vR:()=>r,vz:()=>s});let i="omp-web:submit-during-run",a="ompgui:submit-during-run-change";function s(){try{let e=window.localStorage.getItem(i);if("steer"===e||"queue"===e)return e}catch{}return"steer"}function o(e){try{window.localStorage.setItem(i,e),window.dispatchEvent(new Event(a))}catch{}}function r(e){let t=t=>{t.key===i&&e()};return window.addEventListener(a,e),window.addEventListener("storage",t),()=>{window.removeEventListener(a,e),window.removeEventListener("storage",t)}}},41941:(e,t,n)=>{n.r(t),n.d(t,{SettingsConfig:()=>ei});var i=n(95155),a=n(12115),s=n(35893),o=n(37206),r=n(65377),l=n(70299),d=n(47603),c=n(78890),p=n(86272),g=n(82749),u=n(99314),f=n(92298),b=n(99537);let x=(0,b.A)("external-link",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);var h=n(31590),m=n(30808),v=n(34906);let y=(0,b.A)("smartphone",[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]]);var C=n(66763),k=n(50981),w=n(12651);let j=(0,b.A)("key-round",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]]);var S=n(90710);let A=(0,b.A)("cable",[["path",{d:"M17 19a1 1 0 0 1-1-1v-2a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2a1 1 0 0 1-1 1z",key:"trhst0"}],["path",{d:"M17 21v-2",key:"ds4u3f"}],["path",{d:"M19 14V6.5a1 1 0 0 0-7 0v11a1 1 0 0 1-7 0V10",key:"1mo9zo"}],["path",{d:"M21 21v-2",key:"eo0ou"}],["path",{d:"M3 5V3",key:"1k5hjh"}],["path",{d:"M4 10a2 2 0 0 1-2-2V6a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2a2 2 0 0 1-2 2z",key:"1dd30t"}],["path",{d:"M7 5V3",key:"1t1388"}]]);var R=n(4315);let M=[{id:"relay",label:"Connect Phone",description:"Pair ompgui Remote over Relay with a QR or link",Icon:y},{id:"general",label:"Interface & Behavior",description:"UI preferences, completion sound, submission mode",Icon:C.A},{id:"safety",label:"Safety & Approvals",description:"Tool safety rules, YOLO mode, terminal permissions",Icon:k.A},{id:"models",label:"AI Model Defaults",description:"Reasoning budget, verbosity, personality, scratchpad",Icon:w.A},{id:"providers",label:"API Keys & Providers",description:"Connected OAuth accounts, API keys, and model registry",Icon:j},{id:"intelligence",label:"Agent & Intelligence",description:"Advisor, memory, autolearn, compaction and retry",Icon:p.A},{id:"agents",label:"Agents & Subagents",description:"Configured subagents, model routing, prewalk, and advisor",Icon:S.A},{id:"extensions",label:"Extensions & Tools",description:"Optional tools, MCP servers, managed skills, and OMP plugins",Icon:A},{id:"system",label:"System & Updates",description:"App updates, runtime version, and active session restart",Icon:g.A}],D=[{id:"tools",label:"Optional Tools",description:"Toggle optional built-in tool capabilities"},{id:"mcp",label:"MCP Servers",description:"Configure global and project MCP servers"},{id:"skills",label:"Skills",description:"Manage reusable workspace skills"},{id:"plugins",label:"Plugins",description:"Manage OMP plugins for this workspace"}],T=e=>"tools"===e||"mcp"===e||"skills"===e||"plugins"===e||"extensions"===e?"extensions":e;function z({active:e,onSelect:t,layout:n="vertical"}){let{t:a}=(0,R.s9)(),s=T(e),o=(e,n)=>{let i=M.findIndex(e=>e.id===n);if(i<0||0===M.length)return;let a=null;("ArrowRight"===e.key||"ArrowDown"===e.key)&&(a=(i+1)%M.length),("ArrowLeft"===e.key||"ArrowUp"===e.key)&&(a=(i-1+M.length)%M.length),"Home"===e.key&&(a=0),"End"===e.key&&(a=M.length-1),null!==a&&(e.preventDefault(),t(M[a].id))};return"vertical"===n?(0,i.jsx)("nav",{"aria-label":"Settings sections",role:"tablist","aria-orientation":"vertical",style:{display:"flex",flexDirection:"column",gap:4,padding:"12px 8px",width:230,flexShrink:0,borderRight:"1px solid var(--border)",background:"var(--bg-panel)",overflowY:"auto"},children:M.map(({id:e,label:n,description:r,Icon:l})=>{let d=e===s,c=a(`settingsTabs.${e}`)||n,p=a(`settingsTabs.${e}Desc`)||r;return(0,i.jsxs)("button",{type:"button",role:"tab",id:`settings-tab-${e}`,"aria-selected":d,"aria-controls":`settings-panel-${e}`,tabIndex:d?0:-1,onClick:()=>t(e),onKeyDown:t=>o(t,e),style:{display:"flex",alignItems:"flex-start",gap:10,minHeight:"var(--control-touch, 44px)",padding:"8px 10px",border:d?"1px solid var(--accent)":"1px solid transparent",borderRadius:"var(--radius-control)",background:d?"var(--bg-selected)":"transparent",color:d?"var(--text)":"var(--text-muted)",cursor:"pointer",textAlign:"left",transition:"background var(--dur-fast) var(--ease-out-warm), color var(--dur-fast) var(--ease-out-warm), border-color var(--dur-fast) var(--ease-out-warm)",width:"100%",boxSizing:"border-box",touchAction:"manipulation"},children:[(0,i.jsx)(l,{size:16,"aria-hidden":"true",style:{marginTop:2,flexShrink:0,color:d?"var(--accent)":"currentColor"}}),(0,i.jsxs)("div",{style:{flex:1,minWidth:0,display:"flex",flexDirection:"column",gap:2},children:[(0,i.jsx)("div",{style:{fontSize:"var(--text-base)",fontWeight:d?600:500,lineHeight:1.3,color:d?"var(--text)":"inherit"},children:c}),(0,i.jsx)("div",{style:{fontSize:"var(--text-sm)",color:"var(--text-dim)",lineHeight:1.3,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:p})]})]},e)})}):(0,i.jsx)("nav",{"aria-label":"Settings sections",role:"tablist",style:{display:"flex",gap:6,padding:"8px 12px",borderBottom:"1px solid var(--border)",background:"var(--bg-panel)",flexShrink:0,overflowX:"auto",WebkitOverflowScrolling:"touch"},children:M.map(({id:e,label:n,description:r,Icon:l})=>{let d=e===s,c=a(`settingsTabs.${e}`)||n,p=a(`settingsTabs.${e}Desc`)||r;return(0,i.jsxs)("button",{type:"button",role:"tab",id:`settings-tab-${e}`,"aria-selected":d,"aria-controls":`settings-panel-${e}`,"aria-label":`${c}: ${p}`,title:p,tabIndex:d?0:-1,onClick:()=>t(e),onKeyDown:t=>o(t,e),style:{display:"inline-flex",alignItems:"flex-start",gap:7,minHeight:"var(--control-touch, 44px)",padding:"6px 10px",border:d?"1px solid var(--accent)":"1px solid var(--border)",borderRadius:"var(--radius-control)",background:d?"var(--bg-selected)":"var(--bg)",color:d?"var(--text)":"var(--text-muted)",fontWeight:d?600:500,cursor:"pointer",fontSize:"var(--text-sm)",whiteSpace:"nowrap",textAlign:"left",flexShrink:0,boxSizing:"border-box",touchAction:"manipulation",transition:"all var(--dur-fast) var(--ease-out-warm)"},children:[(0,i.jsx)(l,{size:14,"aria-hidden":"true",style:{marginTop:2,flexShrink:0,color:d?"var(--accent)":"currentColor"}}),(0,i.jsxs)("span",{style:{display:"flex",flexDirection:"column",gap:1,minWidth:0},children:[(0,i.jsx)("span",{style:{fontWeight:d?600:500,fontSize:"var(--text-base)",color:d?"var(--text)":"inherit"},children:c}),(0,i.jsx)("span",{style:{fontSize:"var(--text-sm)",color:"var(--text-dim)",lineHeight:1.25,maxWidth:180,overflow:"hidden",textOverflow:"ellipsis"},children:p})]})]},e)})})}function I({active:e,onSelect:t}){let{t:n}=(0,R.s9)(),a=Math.max(0,D.findIndex(t=>t.id===e)),s=e=>{let n=null;("ArrowRight"===e.key||"ArrowDown"===e.key)&&(n=(a+1)%D.length),("ArrowLeft"===e.key||"ArrowUp"===e.key)&&(n=(a-1+D.length)%D.length),"Home"===e.key&&(n=0),"End"===e.key&&(n=D.length-1),null!==n&&(e.preventDefault(),t(D[n].id))};return(0,i.jsx)("div",{role:"tablist","aria-label":n("settingsConfig.extensionsTabsAria"),"aria-orientation":"horizontal",style:{display:"flex",gap:4,padding:4,border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"var(--bg-panel)",alignSelf:"flex-start",maxWidth:"100%",overflowX:"auto"},children:D.map(a=>{let o=a.id===e,r=n(`settingsConfig.extensionsTab.${a.id}`)||a.label,l=n(`settingsConfig.extensionsTab.${a.id}Desc`)||a.description;return(0,i.jsx)("button",{type:"button",role:"tab",id:`settings-extension-tab-${a.id}`,"aria-selected":o,"aria-controls":`settings-extension-panel-${a.id}`,"aria-label":`${r}: ${l}`,tabIndex:o?0:-1,onClick:()=>t(a.id),onKeyDown:s,style:{display:"inline-flex",alignItems:"center",justifyContent:"center",minHeight:"var(--control-touch, 44px)",padding:"6px 12px",border:o?"1px solid var(--accent)":"1px solid transparent",borderRadius:"calc(var(--radius-control) - var(--space-1))",background:o?"var(--bg-selected)":"transparent",color:o?"var(--text)":"var(--text-muted)",fontSize:"var(--text-sm)",fontWeight:o?600:500,cursor:"pointer",whiteSpace:"nowrap",boxSizing:"border-box",touchAction:"manipulation",transition:"all var(--dur-fast) var(--ease-out-warm)"},children:r},a.id)})})}var P=n(7834);function N(e){if("object"!=typeof e||null===e||!("supported"in e)||"boolean"!=typeof e.supported||!("installed"in e)||"boolean"!=typeof e.installed||!("running"in e)||"boolean"!=typeof e.running||!("autoStart"in e)||"boolean"!=typeof e.autoStart||!("label"in e)||"string"!=typeof e.label||!("pid"in e)||null!==e.pid&&("number"!=typeof e.pid||!Number.isSafeInteger(e.pid)||e.pid<=0)||!("logPath"in e)||null!==e.logPath&&"string"!=typeof e.logPath)throw Error("Invalid daemon status response");return{supported:e.supported,installed:e.installed,running:e.running,autoStart:e.autoStart,label:e.label,pid:e.pid,logPath:e.logPath,..."error"in e&&"string"==typeof e.error?{error:e.error}:{},..."accepted"in e&&!0===e.accepted?{accepted:!0}:{},..."cliAvailable"in e&&"boolean"==typeof e.cliAvailable?{cliAvailable:e.cliAvailable}:{}}}var O=n(96793),W=n(34140),F=n(90071);function L(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function E(e){return Object.assign({},e)}function U(e){return e.mounted&&e.requestGeneration===e.latestGeneration}let $=()=>(0,i.jsx)("div",{role:"status",style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"var(--text-muted)",fontSize:"var(--text-sm)"},children:"Loading settings…"}),H=(0,o.default)(()=>n.e(7488).then(n.bind(n,47488)).then(e=>e.BuiltInToolsConfig),{loadableGenerated:{webpack:()=>[47488]},loading:$}),q=(0,o.default)(()=>Promise.all([n.e(1441),n.e(3274)]).then(n.bind(n,33274)).then(e=>e.ModelsConfig),{loadableGenerated:{webpack:()=>[33274]},loading:$}),B=(0,o.default)(()=>n.e(9981).then(n.bind(n,99981)).then(e=>e.SkillsConfig),{loadableGenerated:{webpack:()=>[99981]},loading:$}),V=(0,o.default)(()=>n.e(2201).then(n.bind(n,42201)).then(e=>e.PluginsConfig),{loadableGenerated:{webpack:()=>[42201]},loading:$}),K=(0,o.default)(()=>n.e(4473).then(n.bind(n,24473)).then(e=>e.McpConfig),{loadableGenerated:{webpack:()=>[24473]},loading:$}),G=(0,o.default)(()=>n.e(9668).then(n.bind(n,79668)).then(e=>e.AgentsConfig),{loadableGenerated:{webpack:()=>[79668]},ssr:!1}),_=(0,o.default)(()=>Promise.all([n.e(587),n.e(3944)]).then(n.bind(n,63944)).then(e=>e.RelayPairPanel),{loadableGenerated:{webpack:()=>[63944]},loading:$}),Y=["default","smol","slow","vision","plan","designer","commit","tiny","task","advisor"],J=Array.from({length:21},(e,t)=>t),Q={fontSize:"var(--text-xs)",padding:"1px 6px",borderRadius:"calc(var(--radius-control) / 2)",background:"var(--bg-subtle)",color:"var(--text-muted)",fontWeight:500};function X(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}let Z=(0,a.createContext)(null),ee=[{tab:"relay",section:"Connect Phone",label:"Pair phone via Relay",description:"Create a QR or link so ompgui Remote can connect over Tailscale Funnel.",scope:"UI",labelKey:"relayPair.title",descriptionKey:"relayPair.description",sectionKey:"settingsTabs.relay"},{tab:"general",section:"Appearance",label:"Color mode",description:"Choose between light, dark, or system color mode.",scope:"UI"},{tab:"general",section:"Appearance",label:"Theme palette",description:"Select warm paper/ember or canonical OMP birch/graphite palette.",scope:"UI"},{tab:"general",section:"Interface & Behavior",label:"Keep tool calls collapsed",description:"Show only compact headers while tools execute.",scope:"UI"},{tab:"general",section:"Interface & Behavior",label:"Completion sound",description:"Play a tone when the agent completes a run.",scope:"UI"},{tab:"general",section:"Interface & Behavior",label:"Message during active run",description:"What composer does on submit while agent runs. Steer interrupts; Queue follow-up delivers after finish.",scope:"UI"},{tab:"safety",section:"Tool Safety & Approvals",label:"Approval Mode",description:"Choose when OMP asks before tool calls.",scope:"New sessions"},{tab:"safety",section:"Tool Safety & Approvals",label:"Bash Override",description:"Override default approval policy specifically for terminal commands.",scope:"New sessions"},{tab:"safety",section:"Tool Safety & Approvals",label:"Extension Tool Requests",description:"Automatically approve extension tool authorization requests.",scope:"New sessions"},{tab:"models",section:"AI Model Defaults",label:"Reasoning",description:"Default effort level for thinking-capable models.",scope:"New sessions"},{tab:"models",section:"AI Model Defaults",label:"Verbosity",description:"Response detail level for supporting providers.",scope:"New sessions"},{tab:"models",section:"AI Model Defaults",label:"Personality",description:"Style included in OMP's system prompt.",scope:"New sessions"},{tab:"models",section:"AI Model Defaults",label:"Thinking Blocks",description:"Hide model reasoning from output view.",scope:"New sessions"},{tab:"models",section:"AI Model Defaults",label:"External Thinking",description:"Private scratchpad reasoning via think tool.",scope:"New sessions"},{tab:"intelligence",section:"Advisor Review",label:"Enable Advisor",description:"Enable Advisor for new sessions with the advisor role.",scope:"New sessions"},{tab:"intelligence",section:"Advisor Review",label:"Advisor Backlog",description:"Wait briefly when advisor falls behind.",scope:"New sessions"},{tab:"intelligence",section:"Advisor Review",label:"Review Subagents",description:"Apply Advisor passive review to subagent tasks.",scope:"New sessions"},{tab:"intelligence",section:"Context Compaction",label:"Automatic Compaction",description:"Compact context before model context limit is hit.",scope:"New sessions"},{tab:"intelligence",section:"Context Compaction",label:"Continue After Compaction",description:"Resume task execution after compaction completes.",scope:"New sessions"},{tab:"intelligence",section:"Context Compaction",label:"Maintenance Strategy",description:"Select algorithm used to reduce context pressure.",scope:"New sessions"},{tab:"intelligence",section:"Context Compaction",label:"Compact Mid-Turn",description:"Check context limits between tool execution steps.",scope:"New sessions"},{tab:"intelligence",section:"Memory & Auto-Learn",label:"Memory Backend",description:"Where durable knowledge is stored across sessions.",scope:"New sessions"},{tab:"intelligence",section:"Memory & Auto-Learn",label:"Enable Auto-Learn",description:"Capture reusable lessons after completed runs.",scope:"New sessions"},{tab:"intelligence",section:"Memory & Auto-Learn",label:"Private Capture Turn",description:"Run private lesson-capture turn at completion.",scope:"New sessions"},{tab:"intelligence",section:"Memory & Auto-Learn",label:"Memory Scope",description:"Scoping for Mnemopi knowledge storage.",scope:"New sessions"},{tab:"intelligence",section:"Memory & Auto-Learn",label:"Recall on Session Start",description:"Load relevant memories into first turn.",scope:"New sessions"},{tab:"intelligence",section:"Memory & Auto-Learn",label:"Retain Completed Turns",description:"Store completed conversation turns in memory.",scope:"New sessions"},{tab:"intelligence",section:"Automatic Retry",label:"Automatic Retry",description:"Retry failed turns automatically.",scope:"New sessions"},{tab:"intelligence",section:"Automatic Retry",label:"Max Attempts",description:"Retry limit before giving up.",scope:"New sessions"},{tab:"intelligence",section:"Automatic Retry",label:"Model Fallback",description:"Fall back to alternative model when retries exhaust.",scope:"New sessions"},{tab:"intelligence",section:"Automatic Retry",label:"Return to primary",description:"Choose when OMP should leave a fallback model after its cooldown.",scope:"New sessions"},{tab:"intelligence",section:"Automatic Retry",label:"Fallback chain",description:"Choose ordered fallback models for each native model role.",scope:"New sessions"},{tab:"mcp",section:"Extensions & Tools",label:"Load Project MCP Servers",description:"Allow project-root MCP configuration to be discovered.",scope:"New sessions"},{tab:"mcp",section:"Extensions & Tools",label:"Render MCP Markdown",description:"Render non-JSON MCP results as Markdown in transcript.",scope:"New sessions"},{tab:"mcp",section:"Extensions & Tools",label:"MCP Resource Updates",description:"Inject server resource updates into conversation.",scope:"New sessions"},{tab:"system",section:"System & Updates",label:"Background service",description:"Manage the macOS background service and automatic start at login.",labelKey:"daemon.title",descriptionKey:"daemon.description",sectionKey:"settingsConfig.systemUpdates"},{tab:"system",section:"System & Updates",label:"Active session system prompt",description:"Inspect the system prompt used by the active session.",labelKey:"settingsConfig.sessionSystemPrompt",descriptionKey:"settingsConfig.sessionSystemPromptDescription",sectionKey:"settingsConfig.systemUpdates"}];function et({results:e,query:t,onSelect:n}){return(0,i.jsxs)("div",{style:{flex:1,minHeight:0,overflowY:"auto",background:"var(--bg)",padding:16,display:"flex",flexDirection:"column",gap:10},children:[(0,i.jsx)("div",{style:{fontSize:"var(--text-base)",color:"var(--text-muted)"},children:0===e.length?`No settings match “${t}”.`:`${e.length} result${1===e.length?"":"s"} for “${t}”.`}),e.map(e=>(0,i.jsxs)("button",{type:"button",onClick:()=>n(e),style:{textAlign:"left",display:"flex",flexDirection:"column",gap:4,padding:"10px 12px",border:"1px solid var(--border)",borderRadius:"var(--radius-card)",background:"var(--bg-panel)",color:"var(--text)",cursor:"pointer",transition:"border-color var(--dur-fast) var(--ease-out-warm), background var(--dur-fast) var(--ease-out-warm)"},children:[(0,i.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,i.jsx)("span",{style:{fontSize:"var(--text-base)",fontWeight:600},children:e.label}),"category"===e.kind&&(0,i.jsx)("span",{style:Q,children:"Section"}),e.scope&&(0,i.jsx)("span",{style:Q,children:e.scope})]}),(0,i.jsx)("div",{style:{fontSize:"var(--text-sm)",color:"var(--text-muted)",lineHeight:1.45},children:e.description}),e.section&&(0,i.jsx)("div",{style:{fontSize:"var(--text-xs)",color:"var(--text-dim)"},children:e.section})]},e.id))]})}function en({label:e,description:t,scope:n,compact:s=!1,hideDescription:o=!1,children:r}){let{t:l}=(0,R.s9)(),d=(0,a.useRef)(null),c=(0,a.useContext)(Z),p=null!==c&&c===X(e);return(0,a.useEffect)(()=>{p&&d.current&&d.current.scrollIntoView({behavior:"smooth",block:"center"})},[p]),(0,i.jsxs)("div",{ref:d,"data-search-id":X(e),style:{minWidth:0,padding:s?"8px 10px":"12px 14px",border:"1px solid var(--border)",borderRadius:"var(--radius-card)",background:"var(--bg-panel)",display:"flex",flexDirection:"column",gap:s?4:8,transition:"box-shadow var(--dur-fast) var(--ease-out-warm), border-color var(--dur-fast) var(--ease-out-warm)",...p?{borderColor:"var(--accent)",boxShadow:"0 0 0 2px var(--accent)"}:{}},children:[(0,i.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:10,flexWrap:"wrap"},children:[(0,i.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,i.jsx)("span",{style:{fontSize:"var(--text-base)",fontWeight:600,color:"var(--text)"},children:e}),n&&(0,i.jsx)("span",{style:Q,children:"New sessions"===n?l("settingsConfig.newSessions"):n})]}),(0,i.jsx)("span",{style:{flexShrink:0},children:r})]}),!o&&(0,i.jsx)("span",{style:{color:"var(--text-muted)",fontSize:"var(--text-sm)",lineHeight:s?1.3:1.45},children:t})]})}function ei({activeTab:e,advisorEnabled:t,onAdvisorChange:n,toolCallsDefaultCollapsed:o,onToolCallsDefaultCollapsedChange:b,cwd:y,sessionId:C,systemPrompt:k,systemPromptLoading:w,onLoadSystemPrompt:j,onModelsSaved:S,onPluginsReloaded:A,onOmpSessionsRestarted:D,onOmpUpdateAvailabilityChange:$,onAppUpdateAvailabilityChange:ea,onSelectTab:es,onClose:eo,runtimeReady:er}){let{t:el}=(0,R.s9)(),ed=(0,h.a)(),[ec,ep]=(0,a.useState)(T(e)),[eg,eu]=(0,a.useState)(()=>"mcp"===e||"skills"===e||"plugins"===e?e:"tools"),[ef,eb]=(0,a.useState)(()=>new Set([T(e)])),[ex,eh]=(0,a.useState)(!1),[em,ev]=(0,a.useState)(null),[ey,eC]=(0,a.useState)(!1),[ek,ew]=(0,a.useState)(0),[ej,eS]=(0,a.useState)(null),[eA,eR]=(0,a.useState)(!1),[eM,eD]=(0,a.useState)(null),[eT,ez]=(0,a.useState)(null),[eI,eP]=(0,a.useState)(null),[eN,eO]=(0,a.useState)(null),[eW,eF]=(0,a.useState)(!1),[eL,eE]=(0,a.useState)(null),[eU,e$]=(0,a.useState)(!1),[eH,eq]=(0,a.useState)(!1),[eB,eV]=(0,a.useState)(null),[eK,eG]=(0,a.useState)(!1),e_=(0,a.useRef)(0),eY=(0,a.useRef)(0),eJ=(0,a.useRef)(!1),eQ=(0,a.useRef)(!1),[eX,eZ]=(0,a.useState)(null),[e0,e1]=(0,a.useState)(!1),[e2,e4]=(0,a.useState)("steer"),[e6,e5]=(0,a.useState)(""),[e8,e9]=(0,a.useState)(null),[e3,e7]=(0,a.useState)([]),[te,tt]=(0,a.useState)("default"),[tn,ti]=(0,a.useState)(""),{preference:ta,setTheme:ts,palette:to,setPalette:tr}=(0,O.DP)(),tl=(0,a.useRef)({}),td=(0,a.useRef)(0),tc=(0,a.useRef)(!0),tp=(0,a.useRef)(Promise.resolve()),tg=(0,a.useRef)(null),tu=(0,a.useCallback)(async()=>{let e=td.current;try{let t=await fetch("/api/omp-settings");if(!t.ok)return;let n=await t.json();if(!U({mounted:tc.current,requestGeneration:e,latestGeneration:td.current}))return;let i=n.settings??{};tl.current=i,eZ(i)}catch{}},[]);(0,a.useEffect)(()=>(tc.current=!0,()=>{tc.current=!1,tg.current&&(clearTimeout(tg.current),tg.current=null)}),[]),(0,a.useEffect)(()=>{tu()},[tu]),(0,a.useEffect)(()=>{e1((0,W.NN)()),e4((0,s.vz)())},[]),(0,a.useEffect)(()=>{let e=!1;return(async()=>{try{let t=await (0,F.aQ)();if(e)return;let n=t.modelList.map(e=>({id:e.id,provider:e.provider,name:e.name}));e7(n)}catch{}})(),()=>{e=!0}},[]);let tf=(0,a.useCallback)(async e=>{let t=function(e,t){let n=E(e);for(let[e,i]of Object.entries(t))if(void 0!==i)if(L(i)){let t=n[e],a=L(t)?E(t):{},s={...a,...i};if("tools"===e&&L(i.approval)){let e=L(a.approval)?a.approval:{};s.approval=0===Object.keys(i.approval).length?{}:{...e,...i.approval}}n[e]=s}else n[e]=i;return n}(tl.current,e);tl.current=t,eZ(t);let n=++td.current,i=!1;return tp.current=tp.current.then(async()=>{if(tc.current)try{let e=await fetch("/api/omp-settings",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:tl.current})});if(!e.ok)return;let t=await e.json();if(i=!0,!U({mounted:tc.current,requestGeneration:n,latestGeneration:td.current}))return;t.settings&&(tl.current=t.settings,eZ(t.settings)),t.application?.restartRequired&&eV(el("settingsConfig.restartPrompt"))}catch{i=!1}}),await tp.current,i},[el]),tb=(0,a.useCallback)((e,t)=>tf({[e]:t}),[tf]),tx=(0,a.useCallback)(e=>tf({tools:{approval:e}}),[tf]),th=(0,a.useMemo)(()=>eX?.retry??{},[eX?.retry]),tm=(0,a.useMemo)(()=>th.fallbackChains??{},[th.fallbackChains]),tv=(0,a.useMemo)(()=>tm[te]??[],[tm,te]),ty=(0,a.useMemo)(()=>{let e=new Set;for(let t of e3)t.id&&e.add(t.id),t.provider&&t.id&&e.add(`${t.provider}/${t.id}`);return Array.from(e).sort((e,t)=>e.localeCompare(t))},[e3]),tC=(0,a.useCallback)(e=>{let t={...tl.current.retry?.fallbackChains??{}};return 0===e.length?delete t[te]:t[te]=e,tb("retry",{fallbackChains:t})},[te,tb]),tk=(0,a.useCallback)(e=>{if(ex){ev(()=>e),eC(!0);return}e()},[ex]),tw=(0,a.useCallback)(()=>{tk(()=>{eo()})},[eo,tk]),tj=(0,a.useCallback)(e=>{"tools"===e||"mcp"===e||"skills"===e||"plugins"===e?tk(()=>{ep("extensions"),eu(e),eb(e=>new Set([...e,"extensions"])),es(e)}):tk(()=>{let t=T(e);ep(t),eb(e=>new Set([...e,t])),es(t)})},[es,tk]),tS=(0,a.useCallback)(()=>{eh(!1),ew(e=>e+1),eC(!1),ev(null),em&&em()},[em]);(0,a.useEffect)(()=>{let t=T(e);ep(t),("tools"===e||"mcp"===e||"skills"===e||"plugins"===e)&&eu(e),eb(e=>new Set([...e,t]))},[e]);let tA=(0,a.useCallback)(async(e=!1)=>{if(!e&&eJ.current)return;let t=++e_.current;eJ.current=!0,eF(!0),e&&eV(null);try{let e=await fetch("/api/omp-update",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"check"})});if(!e.ok)throw Error("Failed to check OMP updates");let n=await e.json();if(t!==e_.current||!tc.current)return;eO(n),$&&"boolean"==typeof n.updateAvailable&&$(n.updateAvailable),n.updateAvailable||eV(el("settingsConfig.upToDate",{version:n.currentVersion??"current"}))}catch{if(t!==e_.current||!tc.current)return;eV(el("settingsConfig.updateCheckFailed"))}finally{t===e_.current&&(eJ.current=!1,tc.current&&eF(!1))}},[$,el]),tR=(0,a.useCallback)(async(e=!1)=>{if(!e&&eQ.current)return;let t=++eY.current;eQ.current=!0,e$(!0),e&&(eV(null),eG(!1));try{let n=await fetch(e?"/api/app-update?force=1":"/api/app-update");if(!n.ok)throw Error("Failed to check ompgui updates");let i=await n.json();if(t!==eY.current||!tc.current)return;if(eE(i),i.lookupFailed){e&&(eG(!0),eV(el("settingsConfig.appUpdateCheckFailed")));return}ea&&"boolean"==typeof i.updateAvailable&&ea(i.updateAvailable),eG(!1),e&&(i.updateAvailable?eV(null):eV(el("settingsConfig.upToDate",{version:i.currentVersion??"current"})))}catch{if(t!==eY.current||!tc.current)return;e&&(eG(!0),eV(el("settingsConfig.appUpdateCheckFailed")))}finally{t===eY.current&&(eQ.current=!1,tc.current&&e$(!1))}},[ea,el]);(0,a.useEffect)(()=>{"system"===ec&&(tA(),tR(!1))},[ec,tA,tR]);let tM=(0,a.useCallback)(async()=>{eR(!0),eD(null);try{let e=await fetch("/api/daemon",{cache:"no-store",signal:AbortSignal.timeout(5e3)});if(!e.ok)throw Error(el("daemon.unavailable"));let t=N(await e.json());tc.current&&eS(t)}catch(e){tc.current&&eD(e instanceof Error?e.message:el("daemon.unavailable"))}finally{tc.current&&eR(!1)}},[el]);(0,a.useEffect)(()=>{"system"===ec&&tM()},[ec,tM]),(0,a.useEffect)(()=>{let e;if(!eT)return;let t=!1,n=async()=>{try{let e=await fetch("/api/daemon",{cache:"no-store",signal:AbortSignal.timeout(4e3)});if(e.ok){let n=N(await e.json());if(t)return;if(eS(n),"restart"===eT.action?n.running&&n.pid!==eT.pid:"uninstall"===eT.action?!n.installed:!n.running){ez(null),eD(n.error??null);return}}}catch{}if(!t){if(Date.now()>=eT.deadline){ez(null),eS(null),eD(el("daemon.readbackFailed"));return}e=window.setTimeout(()=>void n(),2e3)}};return e=window.setTimeout(()=>void n(),2e3),()=>{t=!0,window.clearTimeout(e)}},[eT,el]);let tD=(0,a.useCallback)(async e=>{eR(!0),eD(null),eP(null);let t="restart"===e||"stop"===e||"uninstall"===e,n=!1;try{let t=await fetch("/api/daemon",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:e}),signal:AbortSignal.timeout(2e4)});n=!t.ok;let i=await t.json();if(!t.ok)throw Error("object"==typeof i&&null!==i&&"error"in i&&"string"==typeof i.error?i.error:el("daemon.actionFailed"));if("object"==typeof i&&null!==i&&"error"in i&&"string"==typeof i.error&&i.error)throw n=!0,Error(i.error);let a=N(i);if(!tc.current)return;eS(a),a.accepted?ez({action:e,pid:ej?.pid??null,deadline:Date.now()+6e4}):await tM()}catch(i){if(!tc.current)return;eD(i instanceof Error?i.message:el("daemon.actionFailed")),t&&!n&&ez({action:e,pid:ej?.pid??null,deadline:Date.now()+6e4})}finally{tc.current&&eR(!1)}},[ej?.pid,tM,el]),tT=(0,a.useCallback)(async()=>{eq(!0),eV(null);try{if(!(await fetch("/api/omp-update",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"restart"})})).ok)throw Error("Failed to restart sessions");eV(el("settingsConfig.sessionsRestarted")),D()}catch{eV(el("settingsConfig.restartFailed"))}finally{eq(!1)}},[D,el]),tz=(0,a.useMemo)(()=>{let e=e6.trim().toLowerCase();if(!e)return[];let t=[];for(let n of M){let i=el(`settingsTabs.${n.id}`)||n.label,a=el(`settingsTabs.${n.id}Desc`)||n.description;(i.toLowerCase().includes(e)||a.toLowerCase().includes(e)||n.id.toLowerCase().includes(e))&&t.push({id:`cat-${n.id}`,kind:"category",tab:n.id,label:i,description:a})}for(let n of ee){let i=(n.labelKey?el(n.labelKey):null)||n.label,a=(n.descriptionKey?el(n.descriptionKey):null)||n.description,s=(n.sectionKey?el(n.sectionKey):null)||n.section;(i.toLowerCase().includes(e)||a.toLowerCase().includes(e)||s.toLowerCase().includes(e))&&t.push({id:`setting-${n.tab}-${X(n.label)}`,kind:"setting",tab:n.tab,label:i,description:a,scope:n.scope,section:s})}return t},[e6,el]),tI=(0,a.useCallback)(e=>{e5(""),tj(e.tab),"setting"===e.kind&&(e9(X(e.label)),tg.current&&clearTimeout(tg.current),tg.current=setTimeout(()=>{tg.current=null,e9(null)},2500))},[tj]);return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(m.lG,{open:!0,onOpenChange:e=>{e||tw()},children:(0,i.jsxs)(m.Cf,{ariaLabel:el("settingsConfig.title"),style:{width:860,maxWidth:"96vw",height:ed?"92dvh":"80vh",maxHeight:"92dvh",display:"flex",flexDirection:"column",overflow:"hidden",padding:0,borderRadius:"var(--radius-modal)",boxShadow:"var(--shadow-modal)",background:"var(--bg)"},children:[(0,i.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:ed?"12px 14px":"16px 20px",borderBottom:"1px solid var(--border)",background:"var(--bg-panel)",gap:12},children:[(0,i.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,minWidth:0},children:[(0,i.jsx)(m.L3,{style:{margin:0,fontSize:"var(--text-lg)",fontWeight:650,whiteSpace:"nowrap"},children:el("settingsConfig.title")}),ex&&(0,i.jsx)("span",{style:{fontSize:"var(--text-xs)",padding:"2px 6px",borderRadius:"calc(var(--radius-control) / 2)",background:"var(--status-warning-bg)",color:"var(--status-warning)",border:"1px solid var(--status-warning-border)"},children:el("settingsConfig.unsavedChanges")})]}),(0,i.jsxs)("div",{style:{position:"relative",flex:1,maxWidth:280,minWidth:120},children:[(0,i.jsx)(r.A,{size:13,"aria-hidden":"true",style:{position:"absolute",left:9,top:"50%",transform:"translateY(-50%)",color:"var(--text-dim)",pointerEvents:"none"}}),(0,i.jsx)("input",{type:"search",value:e6,onChange:e=>e5(e.target.value),placeholder:el("settingsConfig.searchPlaceholder"),"aria-label":el("settingsConfig.searchPlaceholder"),style:{width:"100%",height:28,padding:"0 8px 0 28px",borderRadius:"var(--radius-control)",border:"1px solid var(--border)",background:"var(--bg)",color:"var(--text)",fontSize:"var(--text-sm)",outline:"none",boxSizing:"border-box"}})]})]}),(0,i.jsx)("div",{style:{display:"flex",flex:1,minHeight:0,flexDirection:ed?"column":"row"},children:e6.trim()?(0,i.jsx)(et,{results:tz,query:e6.trim(),onSelect:tI}):(0,i.jsxs)(Z.Provider,{value:e8,children:[(0,i.jsx)(z,{active:ec,onSelect:tj,layout:ed?"horizontal":"vertical"}),(0,i.jsxs)("div",{style:{flex:1,minWidth:0,overflowY:"auto",display:"flex",flexDirection:"column"},children:["relay"===ec&&(0,i.jsx)("div",{role:"tabpanel",id:"settings-panel-relay","aria-labelledby":"settings-tab-relay",style:{padding:ed?"12px 14px":20,display:"flex",flexDirection:"column",gap:16},children:(0,i.jsx)(_,{embedded:!0})}),"general"===ec&&(0,i.jsxs)("div",{role:"tabpanel",id:"settings-panel-general","aria-labelledby":"settings-tab-general",style:{padding:ed?"12px 14px":20,display:"flex",flexDirection:"column",gap:16},children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("h3",{style:{fontSize:"var(--text-base)",fontWeight:600,margin:0},children:el("settingsConfig.generalTitle")}),(0,i.jsx)("p",{style:{margin:"4px 0 0",fontSize:"var(--text-sm)",color:"var(--text-muted)"},children:el("settingsConfig.generalDescription")})]}),(0,i.jsxs)("div",{style:{display:"grid",gridTemplateColumns:ed?"1fr":"repeat(2, minmax(0, 1fr))",gap:10},children:[(0,i.jsx)(en,{label:el("settingsConfig.themeMode"),description:el("settingsConfig.themeModeDesc"),scope:"UI",children:(0,i.jsx)("div",{style:{display:"inline-flex",padding:2,background:"var(--bg)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",gap:2},children:["system","light","dark"].map(e=>{let t=ta===e,n="system"===e?l.A:"light"===e?d.A:c.A,a="system"===e?el("settingsConfig.themeModeSystem"):"light"===e?el("settingsConfig.themeModeLight"):el("settingsConfig.themeModeDark");return(0,i.jsxs)("button",{type:"button","aria-label":a,"aria-pressed":t,onClick:()=>ts(e),title:a,className:"ui-focus-ring",style:{display:"inline-flex",alignItems:"center",gap:4,height:24,padding:"0 8px",border:"none",borderRadius:"calc(var(--radius-control) - var(--space-1))",background:t?"var(--bg-selected)":"transparent",color:t?"var(--text)":"var(--text-muted)",fontWeight:t?600:500,fontSize:"var(--text-sm)",cursor:"pointer",transition:"background var(--dur-fast) var(--ease-out-warm), color var(--dur-fast) var(--ease-out-warm)"},children:[(0,i.jsx)(n,{size:12,"aria-hidden":"true"}),(0,i.jsx)("span",{children:a})]},e)})})}),(0,i.jsx)(en,{label:el("settingsConfig.themePalette"),description:el("settingsConfig.themePaletteDesc"),scope:"UI",children:(0,i.jsx)("div",{style:{display:"inline-flex",padding:2,background:"var(--bg)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",gap:2},children:["warm","omp"].map(e=>{let t=to===e,n="warm"===e?el("settingsConfig.paletteWarm"):el("settingsConfig.paletteOmp");return(0,i.jsxs)("button",{type:"button","aria-label":n,"aria-pressed":t,onClick:()=>tr(e),title:n,className:"ui-focus-ring",style:{display:"inline-flex",alignItems:"center",gap:5,height:24,padding:"0 8px",border:"none",borderRadius:"calc(var(--radius-control) - var(--space-1))",background:t?"var(--bg-selected)":"transparent",color:t?"var(--text)":"var(--text-muted)",fontWeight:t?600:500,fontSize:"var(--text-sm)",cursor:"pointer",transition:"background var(--dur-fast) var(--ease-out-warm), color var(--dur-fast) var(--ease-out-warm)"},children:[(0,i.jsxs)("span",{"aria-hidden":"true",style:{display:"inline-flex",alignItems:"center",gap:2.5,padding:"2px 3px",borderRadius:"calc(var(--radius-control) / 2)",background:"var(--bg-subtle)",flexShrink:0},children:[(0,i.jsx)("span",{style:{width:6,height:6,borderRadius:"50%",background:`var(--palette-${e}-preview-bg)`,border:"1px solid var(--border)",flexShrink:0}}),(0,i.jsx)("span",{style:{width:6,height:6,borderRadius:"50%",background:`var(--palette-${e}-preview-panel)`,border:"1px solid var(--border)",flexShrink:0}}),(0,i.jsx)("span",{style:{width:6,height:6,borderRadius:"50%",background:`var(--palette-${e}-preview-accent)`,flexShrink:0}})]}),(0,i.jsx)("span",{children:n})]},e)})})})]}),(0,i.jsxs)("div",{style:{display:"grid",gridTemplateColumns:ed?"1fr":"repeat(2, minmax(0, 1fr))",gap:10},children:[(0,i.jsx)(en,{label:el("settingsConfig.toolCallsCollapsed"),description:el("settingsConfig.toolCallsCollapsedDesc"),scope:"UI",children:(0,i.jsx)(v.dO,{checked:o,onChange:e=>b(e),"aria-label":el("settingsConfig.toolCallsCollapsed")})}),(0,i.jsx)(en,{label:el("settingsConfig.completionSound"),description:el("settingsConfig.completionSoundDesc"),scope:"UI",children:(0,i.jsx)(v.dO,{checked:e0,onChange:e=>{e1(e),(0,W.RJ)(e),window.dispatchEvent(new CustomEvent("omp-sound-pref-change",{detail:e}))},"aria-label":el("settingsConfig.completionSound")})})]}),(0,i.jsx)(en,{label:el("settingsConfig.submitBehavior"),description:el("settingsConfig.submitBehaviorDesc"),scope:"UI",children:(0,i.jsx)(v.l6,{value:e2,onChange:e=>{(0,s.t_)(e),e4(e)},required:!0,options:[{value:"steer",label:el("settingsConfig.steerCurrent")},{value:"queue",label:el("settingsConfig.queueFollowUp")}],"aria-label":el("settingsConfig.submitBehavior")})})]}),"agents"===ec&&(0,i.jsxs)("div",{role:"tabpanel",id:"settings-panel-agents","aria-labelledby":"settings-tab-agents",style:{padding:ed?"12px 14px":20,display:"flex",flexDirection:"column",gap:16,minHeight:0},children:[(0,i.jsx)(en,{label:el("settingsConfig.preferTaskDelegation"),description:el("settingsConfig.preferTaskDelegationDesc"),scope:"New sessions",compact:!0,hideDescription:ed,children:(0,i.jsx)(v.l6,{value:eX?.task?.eager??"default",onChange:e=>tb("task",{eager:e}),required:!0,options:[{value:"default",label:el("settingsConfig.delegationDefault")},{value:"preferred",label:el("settingsConfig.delegationPreferred")},{value:"always",label:el("settingsConfig.delegationAlways")}],"aria-label":el("settingsConfig.preferTaskDelegation")})}),(0,i.jsx)(G,{cwd:y??void 0,onSaved:S})]}),"safety"===ec&&(0,i.jsxs)("div",{role:"tabpanel",id:"settings-panel-safety","aria-labelledby":"settings-tab-safety",style:{padding:ed?"12px 14px":20,display:"flex",flexDirection:"column",gap:16},children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("h3",{style:{fontSize:"var(--text-base)",fontWeight:600,margin:0},children:el("settingsConfig.safetyTitle")}),(0,i.jsx)("p",{style:{margin:"4px 0 0",fontSize:"var(--text-sm)",color:"var(--text-muted)"},children:el("settingsConfig.safetyDescription")})]}),(0,i.jsx)(en,{label:el("settingsConfig.approvalMode"),description:el("settingsConfig.approvalModeDesc"),scope:"New sessions",compact:!0,hideDescription:ed,children:(0,i.jsx)(v.l6,{value:eX?.tools?.approvalMode??"yolo",onChange:e=>tb("tools",{approvalMode:e}),required:!0,options:[{value:"always-ask",label:el("settingsConfig.approvalAlwaysAsk")},{value:"write",label:el("settingsConfig.approvalWrite")},{value:"yolo",label:el("settingsConfig.approvalYolo")}],"aria-label":el("settingsConfig.approvalMode")})}),(0,i.jsxs)("div",{style:{display:"grid",gridTemplateColumns:ed?"1fr":"repeat(2, minmax(0, 1fr))",gap:10},children:[(0,i.jsx)(en,{label:el("settingsConfig.bashApproval"),description:el("settingsConfig.bashApprovalDesc"),scope:"New sessions",children:(0,i.jsx)(v.l6,{value:eX?.tools?.approval?.bash??"prompt",onChange:e=>tx({bash:e}),required:!0,options:[{value:"allow",label:el("settingsConfig.allow")},{value:"prompt",label:el("settingsConfig.alwaysAsk")},{value:"deny",label:el("settingsConfig.deny")}],"aria-label":el("settingsConfig.bashApproval")})}),(0,i.jsx)(en,{label:el("settingsConfig.extensionApproval"),description:el("settingsConfig.extensionApprovalDesc"),scope:"New sessions",children:(0,i.jsx)(v.l6,{value:eX?.tools?.approval?.extension??"prompt",onChange:e=>tx({extension:e}),required:!0,options:[{value:"prompt",label:el("settingsConfig.askEveryTime")},{value:"allow",label:el("settingsConfig.autoApprove")}],"aria-label":el("settingsConfig.extensionApproval")})})]})]}),"models"===ec&&(0,i.jsxs)("div",{role:"tabpanel",id:"settings-panel-models","aria-labelledby":"settings-tab-models",style:{padding:20,display:"flex",flexDirection:"column",gap:16},children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("h3",{style:{fontSize:"var(--text-base)",fontWeight:600,margin:0},children:el("settingsConfig.modelsTitle")}),(0,i.jsx)("p",{style:{margin:"4px 0 0",fontSize:"var(--text-sm)",color:"var(--text-muted)"},children:el("settingsConfig.modelsDescription")})]}),(0,i.jsxs)("div",{style:{display:"grid",gridTemplateColumns:ed?"1fr":"repeat(2, minmax(0, 1fr))",gap:10},children:[(0,i.jsx)(en,{label:el("settingsConfig.reasoning"),description:el("settingsConfig.reasoningDesc"),scope:"New sessions",children:(0,i.jsx)(v.l6,{value:eX?.defaultThinkingLevel??"high",onChange:e=>tf({defaultThinkingLevel:e}),required:!0,options:["auto","minimal","low","medium","high","xhigh","max"],"aria-label":el("settingsConfig.reasoning")})}),(0,i.jsx)(en,{label:el("settingsConfig.verbosity"),description:el("settingsConfig.verbosityDesc"),scope:"New sessions",children:(0,i.jsx)(v.l6,{value:eX?.textVerbosity??"medium",onChange:e=>tf({textVerbosity:e}),required:!0,options:["low","medium","high"],"aria-label":el("settingsConfig.verbosity")})}),(0,i.jsx)(en,{label:el("settingsConfig.personality"),description:el("settingsConfig.personalityDesc"),scope:"New sessions",children:(0,i.jsx)(v.l6,{value:eX?.personality??"default",onChange:e=>tf({personality:e}),required:!0,options:["default","friendly","pragmatic","none"],"aria-label":el("settingsConfig.personality")})}),(0,i.jsx)(en,{label:el("settingsConfig.hideThinking"),description:el("settingsConfig.hideThinkingDesc"),scope:"New sessions",children:(0,i.jsx)(v.dO,{checked:eX?.hideThinkingBlock??!1,onChange:e=>tf({hideThinkingBlock:e}),"aria-label":el("settingsConfig.hideThinking")})}),(0,i.jsx)(en,{label:el("settingsConfig.externalThinking"),description:el("settingsConfig.externalThinkingDesc"),scope:"New sessions",children:(0,i.jsx)(v.dO,{checked:eX?.externalThinking??!1,onChange:e=>tf({externalThinking:e}),"aria-label":el("settingsConfig.externalThinking")})})]})]}),(ef.has("providers")||ef.has("models"))&&(0,i.jsx)("div",{role:"tabpanel",id:"settings-panel-providers","aria-labelledby":"settings-tab-providers",style:{display:"providers"===ec?"flex":"none",height:"100%",minHeight:0,flexDirection:"column"},children:(0,i.jsx)(q,{onSaved:()=>{eh(!1),S()},onDirtyChange:eh},ek)}),"intelligence"===ec&&(0,i.jsxs)("div",{role:"tabpanel",id:"settings-panel-intelligence","aria-labelledby":"settings-tab-intelligence",style:{padding:20,display:"flex",flexDirection:"column",gap:18},children:[(0,i.jsxs)("section",{style:{display:"flex",flexDirection:"column",gap:10},children:[(0,i.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,fontSize:"var(--text-md)",fontWeight:600},children:[(0,i.jsx)(p.A,{size:14,"aria-hidden":"true",style:{color:"var(--accent)"}})," ",el("settingsConfig.advisorReview")]}),(0,i.jsx)("p",{style:{margin:0,color:"var(--text-muted)",fontSize:"var(--text-sm)"},children:el("settingsConfig.advisorReviewDesc")}),(0,i.jsxs)("div",{style:{display:"grid",gridTemplateColumns:ed?"1fr":"repeat(2, minmax(0, 1fr))",gap:10},children:[(0,i.jsx)(en,{label:el("settingsConfig.enableAdvisor"),description:el("settingsConfig.enableAdvisorDesc"),scope:"New sessions",children:(0,i.jsx)(v.dO,{checked:eX?.advisor?.enabled??t,onChange:e=>{n(e),tb("advisor",{enabled:e})},"aria-label":el("settingsConfig.enableAdvisor")})}),(eX?.advisor?.enabled??t)&&(0,i.jsx)(en,{label:el("settingsConfig.advisorBacklog"),description:el("settingsConfig.advisorBacklogDesc"),scope:"New sessions",children:(0,i.jsx)(v.l6,{value:eX?.advisor?.syncBacklog??"off",onChange:e=>tb("advisor",{syncBacklog:e}),required:!0,options:[{value:"off",label:el("settingsConfig.backlogOff")},{value:"1",label:el("settingsConfig.backlog1")},{value:"3",label:el("settingsConfig.backlog3")},{value:"5",label:el("settingsConfig.backlog5")}],"aria-label":el("settingsConfig.advisorBacklog")})})]}),(eX?.advisor?.enabled??t)&&(0,i.jsx)(en,{label:el("settingsConfig.reviewSubagents"),description:el("settingsConfig.reviewSubagentsDesc"),scope:"New sessions",children:(0,i.jsx)(v.dO,{checked:eX?.advisor?.subagents??!1,onChange:e=>tb("advisor",{subagents:e}),"aria-label":el("settingsConfig.reviewSubagents")})})]}),(0,i.jsxs)("section",{style:{display:"flex",flexDirection:"column",gap:10,borderTop:"1px solid var(--border)",paddingTop:16},children:[(0,i.jsx)("div",{style:{fontSize:"var(--text-md)",fontWeight:600},children:el("settingsConfig.contextCompaction")}),(0,i.jsx)("p",{style:{margin:0,color:"var(--text-muted)",fontSize:"var(--text-sm)"},children:el("settingsConfig.contextCompactionDesc")}),(0,i.jsxs)("div",{style:{display:"grid",gridTemplateColumns:ed?"1fr":"repeat(2, minmax(0, 1fr))",gap:10},children:[(0,i.jsx)(en,{label:el("settingsConfig.autoCompaction"),description:el("settingsConfig.autoCompactionDesc"),scope:"New sessions",children:(0,i.jsx)(v.dO,{checked:eX?.compaction?.enabled??!0,onChange:e=>tb("compaction",{enabled:e}),"aria-label":el("settingsConfig.autoCompaction")})}),(0,i.jsx)(en,{label:el("settingsConfig.autoContinueCompaction"),description:el("settingsConfig.autoContinueCompactionDesc"),scope:"New sessions",children:(0,i.jsx)(v.dO,{checked:eX?.compaction?.autoContinue??!0,onChange:e=>tb("compaction",{autoContinue:e}),"aria-label":el("settingsConfig.autoContinueCompaction")})}),(0,i.jsx)(en,{label:el("settingsConfig.compactionStrategy"),description:el("settingsConfig.compactionStrategyDesc"),scope:"New sessions",children:(0,i.jsx)(v.l6,{value:eX?.compaction?.strategy??"snapcompact",onChange:e=>tb("compaction",{strategy:e}),required:!0,options:[{value:"snapcompact",label:"Snapcompact"},{value:"handoff",label:"Handoff"},{value:"context-full",label:"Context full"},{value:"shake",label:"Shake"},{value:"off",label:"Off"}],"aria-label":el("settingsConfig.compactionStrategy")})}),(0,i.jsx)(en,{label:el("settingsConfig.compactMidTurn"),description:el("settingsConfig.compactMidTurnDesc"),scope:"New sessions",children:(0,i.jsx)(v.dO,{checked:eX?.compaction?.midTurnEnabled??!0,onChange:e=>tb("compaction",{midTurnEnabled:e}),"aria-label":el("settingsConfig.compactMidTurn")})})]})]}),(0,i.jsxs)("section",{style:{display:"flex",flexDirection:"column",gap:10,borderTop:"1px solid var(--border)",paddingTop:16},children:[(0,i.jsx)("div",{style:{fontSize:"var(--text-md)",fontWeight:600},children:el("settingsConfig.memoryAndAutoLearn")}),(0,i.jsx)("p",{style:{margin:0,color:"var(--text-muted)",fontSize:"var(--text-sm)"},children:el("settingsConfig.memoryAndAutoLearnDesc")}),(0,i.jsxs)("div",{style:{display:"grid",gridTemplateColumns:ed?"1fr":"repeat(2, minmax(0, 1fr))",gap:10},children:[(0,i.jsx)(en,{label:el("settingsConfig.memoryBackend"),description:el("settingsConfig.memoryBackendDesc"),scope:"New sessions",children:(0,i.jsx)(v.l6,{value:eX?.memory?.backend??"mnemopi",onChange:e=>tb("memory",{backend:e}),required:!0,options:[{value:"off",label:el("settingsConfig.backlogOff")},{value:"local",label:el("settingsConfig.memoryLocal")},{value:"mnemopi",label:el("settingsConfig.memoryMnemopi")},{value:"hindsight",label:el("settingsConfig.memoryHindsight")}],"aria-label":el("settingsConfig.memoryBackend")})}),(0,i.jsx)(en,{label:el("settingsConfig.enableAutolearn"),description:el("settingsConfig.enableAutolearnDesc"),scope:"New sessions",children:(0,i.jsx)(v.dO,{checked:eX?.autolearn?.enabled??!0,onChange:e=>tb("autolearn",{enabled:e}),"aria-label":el("settingsConfig.enableAutolearn")})}),(0,i.jsx)(en,{label:el("settingsConfig.privateCaptureTurn"),description:el("settingsConfig.privateCaptureTurnDesc"),scope:"New sessions",children:(0,i.jsx)(v.dO,{checked:eX?.autolearn?.autoContinue??!0,onChange:e=>tb("autolearn",{autoContinue:e}),"aria-label":el("settingsConfig.privateCaptureTurn")})}),(0,i.jsx)(en,{label:el("settingsConfig.memoryScope"),description:el("settingsConfig.memoryScopeDesc"),scope:"New sessions",children:(0,i.jsx)(v.l6,{value:eX?.mnemopi?.scoping??"per-project",onChange:e=>tb("mnemopi",{scoping:e}),required:!0,options:[{value:"per-project",label:el("settingsConfig.scopePerProject")},{value:"per-project-tagged",label:el("settingsConfig.scopePerProjectTagged")},{value:"global",label:el("settingsConfig.scopeGlobal")}],"aria-label":el("settingsConfig.memoryScope")})}),(0,i.jsx)(en,{label:el("settingsConfig.autoRecall"),description:el("settingsConfig.autoRecallDesc"),scope:"New sessions",children:(0,i.jsx)(v.dO,{checked:eX?.mnemopi?.autoRecall??!0,onChange:e=>tb("mnemopi",{autoRecall:e}),"aria-label":el("settingsConfig.autoRecall")})}),(0,i.jsx)(en,{label:el("settingsConfig.autoRetain"),description:el("settingsConfig.autoRetainDesc"),scope:"New sessions",children:(0,i.jsx)(v.dO,{checked:eX?.mnemopi?.autoRetain??!0,onChange:e=>tb("mnemopi",{autoRetain:e}),"aria-label":el("settingsConfig.autoRetain")})})]})]}),(0,i.jsxs)("section",{style:{display:"flex",flexDirection:"column",gap:10,borderTop:"1px solid var(--border)",paddingTop:16},children:[(0,i.jsx)("div",{style:{fontSize:"var(--text-md)",fontWeight:600},children:el("settingsConfig.autoRetry")}),(0,i.jsx)("p",{style:{margin:0,color:"var(--text-muted)",fontSize:"var(--text-sm)"},children:el("settingsConfig.autoRetryDesc")}),(0,i.jsxs)("div",{style:{display:"grid",gridTemplateColumns:ed?"1fr":"repeat(2, minmax(0, 1fr))",gap:10},children:[(0,i.jsx)(en,{label:el("settingsConfig.enableRetry"),description:el("settingsConfig.enableRetryDesc"),scope:"New sessions",children:(0,i.jsx)(v.dO,{checked:th.enabled??!0,onChange:e=>tb("retry",{enabled:e}),"aria-label":el("settingsConfig.enableRetry")})}),(0,i.jsx)(en,{label:el("settingsConfig.maxAttempts"),description:el("settingsConfig.maxAttemptsDesc"),scope:"New sessions",children:(0,i.jsx)(v.l6,{value:String(th.maxRetries??10),onChange:e=>tb("retry",{maxRetries:Number(e)}),required:!0,options:J.map(String),"aria-label":el("settingsConfig.maxAttempts")})}),(0,i.jsx)(en,{label:el("settingsConfig.modelFallback"),description:el("settingsConfig.modelFallbackDesc"),scope:"New sessions",children:(0,i.jsx)(v.dO,{checked:th.modelFallback??!0,onChange:e=>tb("retry",{modelFallback:e}),"aria-label":el("settingsConfig.modelFallback")})}),(0,i.jsx)(en,{label:el("settingsConfig.fallbackRevertPolicy"),description:el("settingsConfig.fallbackRevertPolicyDesc"),scope:"New sessions",children:(0,i.jsx)(v.l6,{value:th.fallbackRevertPolicy??"cooldown-expiry",onChange:e=>tb("retry",{fallbackRevertPolicy:e}),required:!0,options:[{value:"cooldown-expiry",label:el("settingsConfig.fallbackRevertCooldown")},{value:"never",label:el("settingsConfig.fallbackRevertNever")}],"aria-label":el("settingsConfig.fallbackRevertPolicy")})})]}),(0,i.jsxs)("section",{"data-search-id":X("Fallback chain"),style:{display:"flex",flexDirection:"column",gap:10,marginTop:4,border:"1px solid var(--border)",borderRadius:"var(--radius-card)",overflow:"hidden"},children:[(0,i.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap",padding:"10px 12px",background:"var(--bg-panel)",borderBottom:"1px solid var(--border)"},children:[(0,i.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:8,color:"var(--text)",fontSize:"var(--text-base)",fontWeight:600},children:[el("settingsConfig.fallbackChainFor"),(0,i.jsx)("span",{style:Q,children:el("settingsConfig.newSessions")})]}),(0,i.jsx)(v.l6,{"aria-label":el("settingsConfig.fallbackChainRole"),value:te,onChange:e=>{tt(e),ti("")},required:!0,options:Y,style:{width:"auto",minWidth:120}})]}),(0,i.jsxs)("div",{style:{display:"flex",gap:8,padding:"10px 12px"},children:[(0,i.jsx)(v.l6,{"aria-label":el("settingsConfig.selectFallbackModel"),value:tn,onChange:e=>ti(e),placeholder:el("settingsConfig.selectFallbackModel"),options:ty.filter(e=>!tv.includes(e)),style:{flex:1,minWidth:0}}),(0,i.jsx)("button",{type:"button",disabled:!tn,onClick:()=>{tC([...tv,tn]),ti("")},style:{padding:"6px 10px",border:"none",borderRadius:"var(--radius-control)",background:"var(--accent)",color:"var(--on-accent)",cursor:tn?"pointer":"not-allowed",opacity:tn?1:.5,fontSize:"var(--text-sm)",whiteSpace:"nowrap"},children:el("settingsConfig.addFallback")})]}),0===tv.length?(0,i.jsx)("div",{style:{padding:"0 12px 12px",color:"var(--text-dim)",fontSize:"var(--text-sm)"},children:el("settingsConfig.noFallbackChain")}):(0,i.jsx)("div",{style:{borderTop:"1px solid var(--border)"},children:tv.map((e,t)=>(0,i.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"7px 12px",color:"var(--text-muted)",fontSize:"var(--text-sm)"},children:[(0,i.jsx)("span",{style:{width:18,color:"var(--text-dim)",fontFamily:"var(--font-mono)"},children:t+1}),(0,i.jsx)("code",{style:{flex:1},children:e}),(0,i.jsx)("button",{type:"button","aria-label":el("settingsConfig.moveFallbackUp",{model:e}),title:el("settingsConfig.moveFallbackUp",{model:e}),disabled:0===t,onClick:()=>{let e=[...tv],n=e[t-1];e[t-1]=e[t],e[t]=n,tC(e)},className:"ui-focus-ring",style:{width:24,height:24,padding:0,display:"inline-flex",alignItems:"center",justifyContent:"center",border:"none",borderRadius:"calc(var(--radius-control) / 2)",background:"transparent",color:"var(--text-muted)",cursor:0===t?"default":"pointer"},children:(0,i.jsx)("span",{"aria-hidden":"true",children:"↑"})}),(0,i.jsx)("button",{type:"button","aria-label":el("settingsConfig.moveFallbackDown",{model:e}),title:el("settingsConfig.moveFallbackDown",{model:e}),disabled:t===tv.length-1,onClick:()=>{let e=[...tv],n=e[t+1];e[t+1]=e[t],e[t]=n,tC(e)},className:"ui-focus-ring",style:{width:24,height:24,padding:0,display:"inline-flex",alignItems:"center",justifyContent:"center",border:"none",borderRadius:"calc(var(--radius-control) / 2)",background:"transparent",color:"var(--text-muted)",cursor:t===tv.length-1?"default":"pointer"},children:(0,i.jsx)("span",{"aria-hidden":"true",children:"↓"})}),(0,i.jsx)("button",{type:"button","aria-label":el("settingsConfig.removeFallback",{model:e}),title:el("settingsConfig.removeFallback",{model:e}),onClick:()=>tC(tv.filter((e,n)=>n!==t)),className:"ui-focus-ring",style:{width:24,height:24,padding:0,display:"inline-flex",alignItems:"center",justifyContent:"center",border:"none",borderRadius:"calc(var(--radius-control) / 2)",background:"transparent",color:"var(--text-muted)",cursor:"pointer"},children:(0,i.jsx)("span",{"aria-hidden":"true",children:"\xd7"})})]},`${e}-${t}`))})]})]})]}),"extensions"===ec&&(0,i.jsxs)("div",{role:"tabpanel",id:"settings-panel-extensions","aria-labelledby":"settings-tab-extensions",style:{display:"flex",height:"100%",minHeight:0,flexDirection:"column",overflowY:"hidden",padding:20,gap:16},children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("h3",{style:{fontSize:"var(--text-base)",fontWeight:600,margin:0},children:el("settingsTabs.extensions")}),(0,i.jsx)("p",{style:{margin:"4px 0 0",fontSize:"var(--text-sm)",color:"var(--text-muted)"},children:el("settingsTabs.extensionsDesc")})]}),(0,i.jsx)(I,{active:eg,onSelect:tj}),"tools"===eg&&(0,i.jsx)("div",{role:"tabpanel",id:"settings-extension-panel-tools","aria-labelledby":"settings-extension-tab-tools",style:{display:"flex",flex:1,minHeight:0,flexDirection:"column",overflowY:"auto"},children:(0,i.jsx)(H,{settings:eX,onPatch:tf})}),"mcp"===eg&&(0,i.jsxs)("div",{role:"tabpanel",id:"settings-extension-panel-mcp","aria-labelledby":"settings-extension-tab-mcp",style:{display:"flex",flex:1,minHeight:0,flexDirection:"column",overflowY:"auto",gap:12},children:[(0,i.jsxs)("div",{style:{display:"grid",gridTemplateColumns:ed?"1fr":"repeat(2, minmax(0, 1fr))",gap:10},children:[(0,i.jsx)(en,{label:el("settingsConfig.loadProjectMcp"),description:el("settingsConfig.loadProjectMcpDesc"),scope:"New sessions",children:(0,i.jsx)(v.dO,{checked:eX?.mcp?.enableProjectConfig??!0,onChange:e=>tb("mcp",{enableProjectConfig:e}),"aria-label":el("settingsConfig.loadProjectMcp")})}),(0,i.jsx)(en,{label:el("settingsConfig.renderMcpMarkdown"),description:el("settingsConfig.renderMcpMarkdownDesc"),scope:"New sessions",children:(0,i.jsx)(v.dO,{checked:eX?.mcp?.renderMarkdownResults??!0,onChange:e=>tb("mcp",{renderMarkdownResults:e}),"aria-label":el("settingsConfig.renderMcpMarkdown")})}),(0,i.jsx)(en,{label:el("settingsConfig.mcpResourceUpdates"),description:el("settingsConfig.mcpResourceUpdatesDesc"),scope:"New sessions",children:(0,i.jsx)(v.dO,{checked:eX?.mcp?.notifications??!1,onChange:e=>tb("mcp",{notifications:e}),"aria-label":el("settingsConfig.mcpResourceUpdates")})})]}),(0,i.jsx)(K,{cwd:y??null,sessionId:C??void 0}),!y&&(0,i.jsx)("p",{role:"status",style:{margin:0,color:"var(--text-muted)",fontSize:"var(--text-sm)"},children:el("settingsConfig.noWorkspaceMcpHint")})]}),"skills"===eg&&(0,i.jsx)("div",{role:"tabpanel",id:"settings-extension-panel-skills","aria-labelledby":"settings-extension-tab-skills",style:{display:"flex",flex:1,minHeight:0,flexDirection:"column",overflowY:"auto"},children:y?(0,i.jsx)(B,{cwd:y}):(0,i.jsx)("div",{role:"status",style:{padding:16,border:"1px solid var(--border)",borderRadius:"var(--radius-card)",color:"var(--text-muted)",fontSize:"var(--text-sm)"},children:el("settingsConfig.workspaceRequired")})}),"plugins"===eg&&(0,i.jsx)("div",{role:"tabpanel",id:"settings-extension-panel-plugins","aria-labelledby":"settings-extension-tab-plugins",style:{display:"flex",flex:1,minHeight:0,flexDirection:"column",overflowY:"auto"},children:y?(0,i.jsx)(V,{cwd:y,sessionId:C??null,onReloaded:A,runtimeReady:er}):(0,i.jsx)("div",{role:"status",style:{padding:16,border:"1px solid var(--border)",borderRadius:"var(--radius-card)",color:"var(--text-muted)",fontSize:"var(--text-sm)"},children:el("settingsConfig.workspaceRequired")})})]}),"system"===ec&&(0,i.jsxs)("div",{role:"tabpanel",id:"settings-panel-system","aria-labelledby":"settings-tab-system",style:{padding:20,display:"flex",flexDirection:"column",gap:18},children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("h3",{style:{fontSize:"var(--text-base)",fontWeight:600,margin:0},children:el("settingsConfig.systemUpdates")}),(0,i.jsx)("p",{style:{margin:"4px 0 0",fontSize:"var(--text-sm)",color:"var(--text-muted)"},children:el("settingsConfig.systemUpdatesDescription")})]}),(0,i.jsxs)("section",{"data-search-id":X("Background service"),"aria-label":el("daemon.title"),style:{padding:14,border:"1px solid var(--border)",borderRadius:"var(--radius-card)",background:"var(--bg-panel)",display:"flex",flexDirection:"column",gap:12},children:[(0,i.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12},children:[(0,i.jsx)("h4",{style:{margin:0,fontSize:"var(--text-md)",fontWeight:600},children:el("daemon.title")}),(0,i.jsx)("button",{type:"button",className:"ui-focus-ring",disabled:eA||!!eT,onClick:()=>void tM(),style:{padding:"6px 10px",minHeight:32,border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"transparent",color:"var(--text)",fontSize:"var(--text-sm)",cursor:eA||eT?"wait":"pointer"},children:el("settingsConfig.refresh")})]}),(0,i.jsx)("div",{role:"status","aria-live":"polite",style:{fontSize:"var(--text-sm)",color:"var(--text-muted)"},children:eT?el("restart"===eT.action?"daemon.reconnecting":"daemon.stopping"):eA?el("daemon.loading"):ej?ej.supported?ej.cliAvailable?ej.installed?ej.running?el("daemon.running",{pid:ej.pid??"—"}):el("daemon.stopped"):el("daemon.notInstalled"):el("daemon.cliMissing"):el("daemon.unsupported"):el("daemon.unknown")}),(0,i.jsx)("p",{style:{margin:0,fontSize:"var(--text-sm)",color:"var(--text-muted)",lineHeight:1.5},children:el("daemon.description")}),ej?.supported&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12},children:[(0,i.jsx)("span",{style:{fontSize:"var(--text-sm)"},children:el("daemon.autoStart")}),(0,i.jsx)(v.dO,{"aria-label":el("daemon.autoStart"),checked:ej.autoStart,disabled:eA||!!eT||!ej.cliAvailable,onChange:e=>{e?tD(ej.installed?"enable":"install"):eP("disable")}})]}),(0,i.jsx)("div",{style:{display:"flex",gap:8,flexWrap:"wrap"},children:["start","stop","restart","uninstall"].map(e=>(0,i.jsx)("button",{type:"button",className:"ui-focus-ring",style:{padding:"6px 10px",minHeight:32,border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"transparent",color:"var(--text)",fontSize:"var(--text-sm)"},disabled:eA||!!eT||!ej.cliAvailable||!ej.installed||("start"===e?ej.running:("stop"===e||"restart"===e)&&!ej.running),onClick:()=>"start"===e?void tD(e):eP(e),children:el(`daemon.${e}`)},e))}),ej.logPath&&(0,i.jsxs)("div",{style:{fontSize:"var(--text-sm)",overflowWrap:"anywhere"},children:[el("daemon.logs"),": ",(0,i.jsx)("code",{children:ej.logPath})]}),!ej.cliAvailable&&(0,i.jsx)("code",{style:{fontSize:"var(--text-sm)",overflowWrap:"anywhere"},children:"npm install -g ompgui@latest"}),!ej.installed&&ej.cliAvailable&&(0,i.jsx)("code",{style:{fontSize:"var(--text-sm)",overflowWrap:"anywhere"},children:"ompgui service install"})]}),(eM||ej?.error)&&(0,i.jsx)("div",{role:"alert",style:{fontSize:"var(--text-sm)",color:"var(--danger)",overflowWrap:"anywhere"},children:eM||ej?.error}),(0,i.jsxs)("p",{style:{margin:0,fontSize:"var(--text-sm)",color:"var(--text-muted)",lineHeight:1.5},children:[el("daemon.disconnectWarning")," ",(0,i.jsx)("code",{children:"ompgui start"})]})]}),(0,i.jsxs)("section",{"data-search-id":X("Active session system prompt"),style:{padding:"var(--space-5)",border:"1px solid var(--border)",borderRadius:"var(--radius-card)",background:"var(--bg-panel)",display:"flex",flexDirection:"column",gap:"var(--space-4)",...e8===X("Active session system prompt")?{borderColor:"var(--accent)",boxShadow:"0 0 0 2px var(--accent)"}:{}},children:[(0,i.jsxs)("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:"var(--space-4)",flexWrap:"wrap"},children:[(0,i.jsxs)("div",{style:{minWidth:0,flex:1},children:[(0,i.jsx)("div",{style:{fontSize:"var(--text-md)",fontWeight:650},children:el("settingsConfig.sessionSystemPrompt")}),(0,i.jsx)("div",{style:{marginTop:"var(--space-1)",color:"var(--text-muted)",fontSize:"var(--text-sm)",lineHeight:1.45},children:el("settingsConfig.sessionSystemPromptDescription")})]}),(0,i.jsxs)("button",{type:"button",onClick:j,disabled:!C||w,"aria-label":el("settingsConfig.systemPromptActionAria"),style:{display:"inline-flex",alignItems:"center",gap:"var(--space-2)",flexShrink:0,padding:"var(--space-3) var(--space-4)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"var(--bg)",color:"var(--text)",cursor:!C||w?"not-allowed":"pointer",opacity:!C||w?.65:1,fontSize:"var(--text-sm)"},children:[(0,i.jsx)(g.A,{size:13,"aria-hidden":"true",className:w?"icon-spin":void 0}),w?el("settingsConfig.systemPromptLoading"):null===k?el("settingsConfig.loadSystemPrompt"):el("settingsConfig.reloadSystemPrompt")]})]}),(0,i.jsx)("div",{"aria-live":"polite","aria-busy":w,style:{minHeight:"var(--control-height-lg)",maxHeight:"45dvh",overflowY:"auto",padding:"var(--space-4)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"var(--bg)",color:"var(--text-muted)",fontSize:"var(--text-sm)",lineHeight:1.5},children:w?(0,i.jsx)("div",{role:"status",children:el("settingsConfig.systemPromptLoading")}):C?null===k?(0,i.jsx)("div",{style:{fontStyle:"italic"},children:el("settingsConfig.systemPromptUnavailable")}):0===k.length?(0,i.jsx)("div",{style:{fontStyle:"italic"},children:el("settingsConfig.systemPromptEmpty")}):(0,i.jsx)("pre",{"aria-label":el("settingsConfig.sessionSystemPrompt"),style:{margin:0,color:"var(--text)",fontFamily:"var(--font-mono)",fontSize:"var(--text-sm)",lineHeight:1.5,whiteSpace:"pre-wrap",overflowWrap:"anywhere"},children:k}):(0,i.jsx)("div",{style:{fontStyle:"italic"},children:el("settingsConfig.systemPromptNoSession")})})]}),(0,i.jsxs)("section",{style:{padding:14,border:"1px solid var(--border)",borderRadius:"var(--radius-card)",background:"var(--bg-panel)",display:"flex",flexDirection:"column",gap:10},children:[(0,i.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12},children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("div",{style:{fontSize:"var(--text-md)",fontWeight:600},children:el("settingsConfig.appLabel")}),(0,i.jsx)("div",{style:{marginTop:4,color:eL?.updateAvailable?"var(--accent)":"var(--text-muted)",fontFamily:"var(--font-mono)",fontSize:"var(--text-sm)"},children:eU?el("settingsConfig.checkingUpdates"):eL?.updateAvailable?el("appShell.updateVersion",{current:eL.currentVersion??"?",available:eL.availableVersion??"?"}):eK||eL?.lookupFailed?el("settingsConfig.appUpdateCheckFailed"):eL?.currentVersion&&eL?.availableVersion?el("settingsConfig.upToDate",{version:eL.currentVersion}):el("settingsConfig.versionUnavailable")})]}),(0,i.jsxs)("button",{type:"button",onClick:()=>void tR(!0),disabled:eU,"aria-label":el("settingsConfig.checkAppUpdates"),style:{padding:"6px 10px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"transparent",color:"var(--text)",cursor:eU?"wait":"pointer",fontSize:"var(--text-sm)",display:"inline-flex",alignItems:"center",gap:5},children:[(0,i.jsx)(g.A,{size:13,"aria-hidden":"true"})," ",el("settingsConfig.refresh")]})]}),eL?.updateAvailable&&(0,i.jsxs)("div",{style:{marginTop:6,padding:"10px 12px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"var(--bg)",display:"flex",flexDirection:"column",gap:6},children:[(0,i.jsx)("div",{style:{fontSize:"var(--text-sm)",color:"var(--text-muted)"},children:el("settingsConfig.runAppUpdateCommand")}),(0,i.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,i.jsx)("code",{style:{flex:1,fontFamily:"var(--font-mono)",fontSize:"var(--text-sm)",color:"var(--accent)",wordBreak:"break-all"},children:eL.updateCommand||"ompgui update"}),(0,i.jsxs)("button",{type:"button",onClick:()=>{(0,P.D)(eL.updateCommand||"ompgui update").then(()=>eV(el("appShell.commandCopied"))).catch(()=>eV(el("appShell.commandCopyFailed")))},style:{display:"inline-flex",alignItems:"center",gap:5,padding:"4px 8px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"var(--bg-subtle)",color:"var(--text)",cursor:"pointer",fontSize:"var(--text-xs)"},children:[(0,i.jsx)(u.A,{size:12,"aria-hidden":"true"})," ",el("appShell.copyCommand")]})]})]})]}),(0,i.jsxs)("section",{style:{padding:14,border:"1px solid var(--border)",borderRadius:"var(--radius-card)",background:"var(--bg-panel)",display:"flex",flexDirection:"column",gap:10},children:[(0,i.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12},children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("div",{style:{fontSize:"var(--text-md)",fontWeight:600},children:el("settingsConfig.ompLabel")}),(0,i.jsx)("div",{style:{marginTop:4,color:eN?.updateAvailable?"var(--accent)":"var(--text-muted)",fontFamily:"var(--font-mono)",fontSize:"var(--text-sm)"},children:eW?el("settingsConfig.checkingUpdates"):eN?.updateAvailable?el("appShell.updateVersion",{current:eN.currentVersion??"?",available:eN.availableVersion??"?"}):eN?.currentVersion?el("settingsConfig.upToDate",{version:eN.currentVersion}):el("settingsConfig.versionUnavailable")})]}),(0,i.jsxs)("button",{type:"button",onClick:()=>void tA(!0),disabled:eW,"aria-label":el("settingsConfig.checkOmpUpdates"),style:{padding:"6px 10px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"transparent",color:"var(--text)",cursor:eW?"wait":"pointer",fontSize:"var(--text-sm)",display:"inline-flex",alignItems:"center",gap:5},children:[(0,i.jsx)(g.A,{size:13,"aria-hidden":"true"})," ",el("settingsConfig.refresh")]})]}),eN?.updateAvailable&&(0,i.jsxs)("div",{style:{marginTop:6,padding:"10px 12px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"var(--bg)",display:"flex",flexDirection:"column",gap:6},children:[(0,i.jsx)("div",{style:{fontSize:"var(--text-sm)",color:"var(--text-muted)"},children:el("settingsConfig.runOmpUpdateCommand")}),(0,i.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,i.jsx)("code",{style:{flex:1,fontFamily:"var(--font-mono)",fontSize:"var(--text-sm)",color:"var(--accent)",wordBreak:"break-all"},children:eN.updateCommand||"omp update"}),(0,i.jsxs)("button",{type:"button",onClick:()=>{(0,P.D)(eN.updateCommand||"omp update").then(()=>eV(el("appShell.commandCopied"))).catch(()=>eV(el("appShell.commandCopyFailed")))},style:{display:"inline-flex",alignItems:"center",gap:5,padding:"4px 8px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"var(--bg-subtle)",color:"var(--text)",cursor:"pointer",fontSize:"var(--text-xs)"},children:[(0,i.jsx)(u.A,{size:12,"aria-hidden":"true"})," ",el("appShell.copyCommand")]})]})]}),(0,i.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:8,marginTop:6},children:[(0,i.jsxs)("button",{type:"button",onClick:()=>void tT(),disabled:eH,style:{display:"inline-flex",alignItems:"center",gap:6,padding:"7px 12px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"var(--bg-subtle)",color:"var(--text)",cursor:eH?"wait":"pointer",fontSize:"var(--text-sm)"},children:[(0,i.jsx)(f.A,{size:13,"aria-hidden":"true"})," ",eH?el("settingsConfig.restarting"):el("settingsConfig.restartSessions")]}),(0,i.jsxs)("a",{href:"https://github.com/can1357/oh-my-pi/releases",target:"_blank",rel:"noreferrer",style:{display:"inline-flex",alignItems:"center",gap:6,padding:"7px 12px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",color:"var(--text-muted)",textDecoration:"none",fontSize:"var(--text-sm)"},children:[(0,i.jsx)(x,{size:13,"aria-hidden":"true"})," ",el("settingsConfig.changelog")]})]}),eB&&(0,i.jsx)("p",{role:"status",style:{margin:"4px 0 0",color:"var(--text-muted)",fontSize:"var(--text-sm)",lineHeight:1.5},children:eB})]})]})]})]})})]})}),(0,i.jsx)(v.TM,{open:null!==eI,onOpenChange:e=>{e||eP(null)},title:eI?el(`daemon.${eI}`):el("daemon.title"),description:el("disable"===eI?"daemon.disableConfirm":"daemon.disconnectConfirm"),confirmLabel:eI?el(`daemon.${eI}`):el("daemon.title"),cancelLabel:el("settingsConfig.cancel"),danger:!0,onConfirm:()=>{eI&&tD(eI)}}),(0,i.jsx)(v.TM,{open:ey,onOpenChange:e=>{eC(e),e||ev(null)},title:el("settingsConfig.unsavedChangesTitle"),description:el("settingsConfig.unsavedChangesDescription"),confirmLabel:el("settingsConfig.discardChanges"),cancelLabel:el("settingsConfig.cancel"),danger:!0,onConfirm:tS})]})}},50981:(e,t,n)=>{n.d(t,{A:()=>i});let i=(0,n(99537).A)("shield-check",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]])},70299:(e,t,n)=>{n.d(t,{A:()=>i});let i=(0,n(99537).A)("monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]])},86272:(e,t,n)=>{n.d(t,{A:()=>i});let i=(0,n(99537).A)("sparkles",[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]])},90071:(e,t,n)=>{function i(){return globalThis.__ompClientModelStore||(globalThis.__ompClientModelStore={globalGeneration:0,entries:new Map,inFlight:new Map,listeners:new Map}),globalThis.__ompClientModelStore}n.d(t,{aQ:()=>r,dU:()=>o});function a(e,t){t.snapshot={status:t.status,data:t.data,error:t.error,cwd:e,expiresAt:t.expiresAt};let n=i().listeners.get(e);if(n)for(let e of[...n])try{e(t.snapshot)}catch{}return t.snapshot}function s(e,t){let n=e.entries.get(t);if(n)return n;let i={data:null,error:null,status:"idle",expiresAt:null,generation:0,snapshot:{status:"idle",data:null,error:null,cwd:t,expiresAt:null}};return e.entries.set(t,i),i}function o(e){let t=i();if(void 0===e){for(let[e,n]of(t.globalGeneration+=1,t.entries))n.generation+=1,n.data=null,n.error=null,n.status="idle",n.expiresAt=null,a(e,n);t.inFlight.clear();return}let n=e??"",o=s(t,n);o.generation+=1,o.data=null,o.error=null,o.status="idle",o.expiresAt=null,t.inFlight.delete(n),a(n,o)}function r(e,t){let n=e??"";t?.force&&o(n);let r=i(),l=s(r,n),d=Date.now();if(l.data&&null!==l.expiresAt&&l.expiresAt>d&&!t?.force)return Promise.resolve(l.data);let c=r.inFlight.get(n);if(c)return c;let p=l.generation,g=r.globalGeneration;"ready"!==l.status&&(l.status="loading",l.error=null,a(n,l));let u=(async()=>{let e=await fetch(n?`/api/models?cwd=${encodeURIComponent(n)}`:"/api/models",{cache:"no-store"});if(!e.ok)throw Error(`HTTP ${e.status}`);var t=await e.json();if(!t||"object"!=typeof t)throw Error("invalid models response");return{models:t.models&&"object"==typeof t.models?t.models:{},modelList:Array.isArray(t.modelList)?t.modelList:[],defaultModel:t.defaultModel??null,thinkingLevels:t.thinkingLevels&&"object"==typeof t.thinkingLevels?t.thinkingLevels:{},...t.thinkingLevelMaps?{thinkingLevelMaps:t.thinkingLevelMaps}:{},...t.connectedProviders?{connectedProviders:t.connectedProviders}:{},..."string"==typeof t.modelError?{modelError:t.modelError}:{}}})().then(e=>{let t=i(),s=t.entries.get(n);return s&&s.generation===p&&t.globalGeneration===g&&(s.data=e,s.error=null,s.status="ready",s.expiresAt=Date.now()+3e4,a(n,s)),e}).catch(e=>{let t=i(),s=t.entries.get(n);throw s&&s.generation===p&&t.globalGeneration===g&&(s.status="error",s.error=e instanceof Error?e.message:String(e),s.expiresAt=null,a(n,s)),e}).finally(()=>{let e=i();e.inFlight.get(n)===u&&e.inFlight.delete(n)});return r.inFlight.set(n,u),u}},90710:(e,t,n)=>{n.d(t,{A:()=>i});let i=(0,n(99537).A)("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"}]])},99314:(e,t,n)=>{n.d(t,{A:()=>i});let i=(0,n(99537).A)("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]])}}]);
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3274],{33274:(e,r,t)=>{t.r(r),t.d(r,{ModelsConfig:()=>eR,modelsConfigFingerprint:()=>eT});var o=t(95155),n=t(12115),i=t(31590),a=t(4315);function s(e){if("string"!=typeof e)return!1;let r=e.trim();if(!r||r.startsWith("//"))return!1;try{let e=new URL(r);return"http:"===e.protocol||"https:"===e.protocol||"mailto:"===e.protocol}catch{return!1}}function l(e){return Object.entries(e).every(([e,r])=>"id"===e?"string"==typeof r&&""===r.trim():void 0===r)}var d=t(18136),c=t(90071),p=t(30808),x=t(34906),u=t(38158),g=t(19805),v=t(88074),h=t(65738),m=t(12651),f=t(86272),y=t(82749),b=t(64577),j=t(35484),C=t(2125),k=t(19707),S=t(40557),w=t(80846),z=t(51087),I=t(84111);function T({open:e,providerName:r,providerBaseUrl:t,existingIds:i,onAdd:s,onClose:l}){let{t:d}=(0,a.s9)(),[c,x]=(0,n.useState)(""),[u,g]=(0,n.useState)(null),[v,h]=(0,n.useState)(!1),[m,f]=(0,n.useState)(null),y=(0,n.useRef)(null),b=(0,n.useRef)(0);(0,n.useEffect)(()=>{if(!e)return;y.current?.focus();let o=c.trim();if(!o){b.current+=1,g(null),f(null),h(!1);return}let n=new URLSearchParams({q:o,limit:String(30)});r&&n.set("provider",r),t&&n.set("baseUrl",t);let i=new AbortController,a=b.current+1;b.current=a,h(!0);let s=setTimeout(async()=>{try{let e=await fetch(`/api/models-config/catalog?${n.toString()}`,{signal:i.signal}),r=await e.json();if(b.current!==a)return;if(!e.ok)throw Error(r.error??`HTTP ${e.status}`);g(r.models??[]),f(null)}catch(e){if(b.current!==a)return;"AbortError"!==e.name&&f(e instanceof Error?e.message:String(e))}finally{b.current===a&&h(!1)}},250);return()=>{clearTimeout(s),i.abort()}},[c,e,r,t]);let j={display:"flex",flexDirection:"row",alignItems:"center",gap:10,padding:"9px 12px",background:"var(--bg-panel)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",marginBottom:"var(--space-3)",minWidth:0};return(0,o.jsx)(p.lG,{open:!0,onOpenChange:e=>{e||l()},children:(0,o.jsxs)(p.Cf,{ariaLabel:d("modelsConfig.catalogTitle"),style:{width:720,maxWidth:"min(92vw, 720px)",maxHeight:"min(72dvh, calc(100dvh - 32px))",padding:0,display:"flex",flexDirection:"column",overflow:"hidden"},children:[(0,o.jsx)(p.L3,{style:{margin:"14px 18px 8px",fontSize:18},children:d("modelsConfig.catalogTitle")}),(0,o.jsx)("div",{style:{padding:"8px 14px 12px",flexShrink:0},children:(0,o.jsx)("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-4)",padding:"6px 10px",background:"var(--bg)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)"},children:(0,o.jsx)("input",{ref:y,value:c,onChange:e=>x(e.target.value),"aria-label":d("modelsConfig.catalogSearchPlaceholder"),placeholder:d("modelsConfig.catalogSearchPlaceholder"),style:{flex:1,background:"none",border:"none",outline:"none",color:"var(--text)",fontSize:"var(--text-base)",boxSizing:"border-box",minWidth:0}})})}),(0,o.jsx)("div",{style:{flex:1,overflowY:"auto",padding:"4px 14px 14px"},children:m?(0,o.jsx)("div",{role:"alert",style:{padding:"20px 0",fontSize:"var(--text-md)",color:"var(--status-error)",textAlign:"center"},children:d("modelsConfig.catalogError",{error:m})}):v?(0,o.jsx)("div",{role:"status","aria-live":"polite",style:{padding:"20px 0",fontSize:"var(--text-md)",color:"var(--text-dim)",textAlign:"center"},children:d("modelsConfig.catalogLoading")}):null===u?(0,o.jsx)("div",{style:{padding:"20px 0",fontSize:"var(--text-md)",color:"var(--text-dim)",textAlign:"center"},children:d("modelsConfig.catalogSearchPlaceholder")}):0===u.length?(0,o.jsx)("div",{style:{padding:"20px 0",fontSize:"var(--text-md)",color:"var(--text-dim)",textAlign:"center"},children:d("modelsConfig.catalogNoResults")}):u.map(e=>{var r;let n=i.has(e.id),a=!!e.providerBaseUrl&&!t;return(0,o.jsxs)("div",{style:j,children:[(0,o.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-3)",minWidth:0},children:[(0,o.jsx)("span",{style:{fontSize:"var(--text-md)",fontFamily:"var(--font-mono)",color:"var(--text)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.id}),e.reasoning&&(0,o.jsx)("span",{style:{fontSize:9,padding:"1px 4px",background:"var(--accent-subtle)",color:"var(--accent)",borderRadius:3,flexShrink:0},children:"T"})]}),(0,o.jsxs)("div",{style:{fontSize:"var(--text-sm)",color:"var(--text-dim)",marginTop:2,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:[e.providerName,void 0!==e.contextWindow?` \xb7 ${d("modelsConfig.catalogContext",{n:(r=e.contextWindow,(0,I.wk)(r))})}`:"",void 0!==e.cost.input&&void 0!==e.cost.output?` \xb7 ${d("modelsConfig.catalogPrice",{input:e.cost.input,output:e.cost.output})}`:"",a?` \xb7 ${d("modelsConfig.catalogSetBaseUrl")}`:""]})]}),n?(0,o.jsx)("span",{style:{flexShrink:0,padding:"5px 12px",background:"none",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",color:"var(--text-dim)",fontSize:12},children:d("modelsConfig.catalogAdded")}):(0,o.jsx)("button",{type:"button","aria-label":"Add "+e.id+" ("+e.providerName+")",onClick:()=>{let r;return s((r=void 0!==e.cost.input&&void 0!==e.cost.output,{id:e.id,...e.name&&e.name!==e.id?{name:e.name}:{},...void 0!==e.reasoning?{reasoning:e.reasoning}:{},...e.input?{input:e.input}:{},...void 0!==e.contextWindow?{contextWindow:e.contextWindow}:{},...void 0!==e.maxTokens?{maxTokens:e.maxTokens}:{},...r?{cost:{input:e.cost.input,output:e.cost.output,cacheRead:e.cost.cacheRead??0,cacheWrite:e.cost.cacheWrite??0}}:{}}),e.providerBaseUrl)},style:{flexShrink:0,padding:"5px 12px",background:"var(--accent)",border:"none",borderRadius:"var(--radius-control)",color:"var(--on-accent)",cursor:"pointer",fontSize:"var(--text-md)",fontWeight:600},children:d("modelsConfig.catalogAdd")})]},e.key)})})]})})}var R=t(67381),A=t(64433),M=t(70350),O=t(88195),P=t(9312),$=t(87275),W=t(22008),E=t(95476),N=t(35029),L=t(14489),U=t(78728),D=t(19872),H=t(7751),F=t(92526),K=t(48238),B=t(57794),_=t(41098),J=t(84604),q=t(15315),Y=t(74278),V=t(55457),X=t(71437),Z=t(29167),G=t(97283),Q=t(34166),ee=t(33889),er=t(85486),et=t(74068),eo=t(83546),en=t(83709);let ei={anthropic:{Icon:R.A,hasColor:!1},openai:{Icon:A.A,hasColor:!1},"openai-codex":{Icon:A.A,hasColor:!1},google:{Icon:M.A,hasColor:!0},"google-vertex":{Icon:M.A,hasColor:!0},"ant-ling":{Icon:ee.A,hasColor:!0},deepseek:{Icon:O.A,hasColor:!0},groq:{Icon:P.A,hasColor:!1},mistral:{Icon:$.A,hasColor:!0},moonshotai:{Icon:W.A,hasColor:!1},"moonshotai-cn":{Icon:W.A,hasColor:!1},moonshot:{Icon:W.A,hasColor:!1},minimax:{Icon:E.A,hasColor:!0},"minimax-cn":{Icon:E.A,hasColor:!0},fireworks:{Icon:N.A,hasColor:!0},huggingface:{Icon:L.A,hasColor:!0},cerebras:{Icon:U.A,hasColor:!0},openrouter:{Icon:D.A,hasColor:!1},xai:{Icon:H.A,hasColor:!1},"cloudflare-ai-gateway":{Icon:F.A,hasColor:!0},"cloudflare-workers-ai":{Icon:F.A,hasColor:!0},"vercel-ai-gateway":{Icon:K.A,hasColor:!1},"github-copilot":{Icon:B.A,hasColor:!1},"amazon-bedrock":{Icon:_.A,hasColor:!0},"azure-openai-responses":{Icon:J.A,hasColor:!0},"kimi-coding":{Icon:q.A,hasColor:!0},nvidia:{Icon:er.A,hasColor:!0},opencode:{Icon:et.A,hasColor:!1},"opencode-go":{Icon:et.A,hasColor:!1},qwen:{Icon:Y.A,hasColor:!0},xiaomi:{Icon:eo.A,hasColor:!1},"xiaomi-token-plan-ams":{Icon:eo.A,hasColor:!1},"xiaomi-token-plan-cn":{Icon:eo.A,hasColor:!1},"xiaomi-token-plan-sgp":{Icon:eo.A,hasColor:!1},zai:{Icon:en.A,hasColor:!1},"zai-coding-cn":{Icon:en.A,hasColor:!1},zhipu:{Icon:V.A,hasColor:!0},cohere:{Icon:X.A,hasColor:!0},perplexity:{Icon:Z.A,hasColor:!0},together:{Icon:G.A,hasColor:!0},grok:{Icon:Q.A,hasColor:!1}};function ea({models:e,connectedProviders:r,onChanged:t}){let[i,a]=(0,n.useState)(null),[s,l]=(0,n.useState)(null),[d,c]=(0,n.useState)(!1);(0,n.useEffect)(()=>{fetch("/api/omp-settings").then(e=>e.ok?e.json():Promise.reject(Error(`HTTP ${e.status}`))).then(e=>a(e.settings??{})).catch(e=>l(e instanceof Error?e.message:String(e)))},[]);let p=(0,n.useRef)(null),x=(0,n.useRef)(!1),v=e=>{a(e),c(!0),l(null),p.current=e,x.current||(x.current=!0,(async()=>{try{for(;null!==p.current;){let e=p.current;p.current=null;try{let r=await fetch("/api/omp-settings",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:e})}),o=await r.json();if(!r.ok||o.error)throw Error(o.error||`HTTP ${r.status}`);null===p.current&&a(o.settings??e),await t()}catch(e){l(e instanceof Error?e.message:String(e));break}}}finally{x.current=!1,c(!1)}})())};if(!i)return(0,o.jsx)("div",{style:{color:"var(--text-muted)",fontSize:"var(--text-md)"},children:"Loading native OMP registry settings..."});let h=!0===i.registryHasScopedEntries,m=e.map(e=>`${e.provider}/${e.id}`),f=(i.enabledModels?.length??0)>0,y=new Set(i.enabledModels??m),b=[...new Set([...e.map(e=>e.provider),...r.map(e=>e.id),...i.disabledProviders??[]])].sort(),j=new Set(i.disabledProviders??[]),C=i.modelProviderOrder??[],k=[...C,...b.filter(e=>!C.includes(e))];return(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:14},children:[(0,o.jsxs)("div",{children:[(0,o.jsx)(ex,{children:"Native OMP Model Registry"}),(0,o.jsxs)("p",{style:{margin:"4px 0 0",color:"var(--text-muted)",fontSize:"var(--text-md)",lineHeight:1.5},children:["These settings affect the models OMP itself can resolve. They are saved in ",(0,o.jsx)("code",{children:"~/.omp/agent/config.yml"}),", unlike the Composer picker."]})]}),(0,o.jsxs)("section",{style:{border:"1px solid var(--border)",borderRadius:"var(--radius-card)",overflow:"hidden"},children:[(0,o.jsxs)("label",{style:{display:"flex",alignItems:"center",gap:"var(--space-4)",padding:"10px 12px",background:"var(--bg-panel)",color:"var(--text)",fontSize:"var(--text-md)",fontWeight:600},children:[(0,o.jsx)("input",{type:"checkbox",checked:f,disabled:d||h,onChange:e=>void v({...i,enabledModels:e.target.checked?m:[]})})," Restrict OMP to selected models"]}),(0,o.jsx)("p",{style:{margin:0,padding:"8px 12px",color:"var(--text-muted)",fontSize:"var(--text-sm)",lineHeight:1.45},children:f?"Unchecked models are unavailable to every OMP session.":"All currently available OMP models are allowed."}),f&&(0,o.jsx)("div",{style:{maxHeight:260,overflowY:"auto",borderTop:"1px solid var(--border)"},children:e.map(e=>{let r=`${e.provider}/${e.id}`;return(0,o.jsxs)("label",{style:{display:"flex",alignItems:"center",gap:"var(--space-4)",padding:"6px 12px",color:"var(--text-muted)",fontSize:"var(--text-md)"},children:[(0,o.jsx)("input",{type:"checkbox",checked:y.has(r),disabled:d||h,onChange:e=>{let t=new Set(y);e.target.checked?t.add(r):t.delete(r),v({...i,enabledModels:[...t]})}}),(0,o.jsx)("code",{children:r})]},r)})})]}),(0,o.jsxs)("section",{style:{border:"1px solid var(--border)",borderRadius:"var(--radius-card)",overflow:"hidden"},children:[(0,o.jsx)("div",{style:{padding:"10px 12px",background:"var(--bg-panel)",color:"var(--text)",fontSize:"var(--text-md)",fontWeight:600},children:"Disabled Providers"}),(0,o.jsx)("p",{style:{margin:0,padding:"8px 12px",color:"var(--text-muted)",fontSize:"var(--text-sm)",lineHeight:1.45},children:"Disabling a provider removes it from OMP's model registry, even if it has credentials."}),(0,o.jsx)("div",{style:{borderTop:"1px solid var(--border)"},children:b.map(e=>(0,o.jsxs)("label",{style:{display:"flex",alignItems:"center",gap:"var(--space-4)",padding:"7px 12px",color:"var(--text-muted)",fontSize:"var(--text-md)"},children:[(0,o.jsx)("input",{type:"checkbox",checked:j.has(e),disabled:d||h,onChange:r=>{let t=new Set(j);r.target.checked?t.add(e):t.delete(e),v({...i,disabledProviders:[...t]})}}),(0,o.jsx)(ez,{id:e,size:14}),(0,o.jsx)("code",{children:e})]},e))})]}),(0,o.jsxs)("section",{style:{border:"1px solid var(--border)",borderRadius:"var(--radius-card)",overflow:"hidden"},children:[(0,o.jsx)("div",{style:{padding:"10px 12px",background:"var(--bg-panel)",color:"var(--text)",fontSize:"var(--text-md)",fontWeight:600},children:"Provider Preference"}),(0,o.jsx)("p",{style:{margin:0,padding:"8px 12px",color:"var(--text-muted)",fontSize:"var(--text-sm)",lineHeight:1.45},children:"Sets OMP's provider order when a model id is ambiguous."}),(0,o.jsx)("div",{style:{borderTop:"1px solid var(--border)"},children:k.map((e,r)=>(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-4)",padding:"7px 12px",color:"var(--text-muted)",fontSize:"var(--text-md)"},children:[(0,o.jsx)(ez,{id:e,size:14}),(0,o.jsx)("code",{style:{flex:1},children:e}),(0,o.jsx)("button",{type:"button",disabled:d||h||0===r,onClick:()=>{let e=[...k];[e[r-1],e[r]]=[e[r],e[r-1]],v({...i,modelProviderOrder:e})},title:"Move provider up","aria-label":`Move provider ${e} up`,className:"ui-focus-ring",style:{width:24,height:24,padding:0,display:"inline-flex",alignItems:"center",justifyContent:"center",border:"none",borderRadius:4,background:"transparent",color:"var(--text-muted)",cursor:"pointer"},children:(0,o.jsx)(u.A,{size:14})}),(0,o.jsx)("button",{type:"button",disabled:d||h||r===k.length-1,onClick:()=>{let e=[...k];[e[r+1],e[r]]=[e[r],e[r+1]],v({...i,modelProviderOrder:e})},title:"Move provider down","aria-label":`Move provider ${e} down`,className:"ui-focus-ring",style:{width:24,height:24,padding:0,display:"inline-flex",alignItems:"center",justifyContent:"center",border:"none",borderRadius:4,background:"transparent",color:"var(--text-muted)",cursor:"pointer"},children:(0,o.jsx)(g.A,{size:14})})]},e))})]}),h&&(0,o.jsxs)("div",{role:"status",style:{padding:"9px 11px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",color:"var(--text-muted)",fontSize:"var(--text-md)",lineHeight:1.45},children:["OMP path-scoped registry entries are configured. Edit ",(0,o.jsx)("code",{children:"config.yml"})," directly to preserve their path rules."]}),s&&(0,o.jsx)("div",{role:"alert",style:{color:"var(--status-error)",fontSize:"var(--text-md)"},children:s})]})}let es="omp-composer-models",el=["default","smol","slow","vision","plan","designer","commit","tiny","task","advisor"];function ed({models:e}){let[r,t]=(0,n.useState)({}),[i,a]=(0,n.useState)(!0),[s,l]=(0,n.useState)(!1),[d,c]=(0,n.useState)(null);(0,n.useEffect)(()=>{fetch("/api/model-roles").then(e=>e.ok?e.json():Promise.reject(Error(`HTTP ${e.status}`))).then(e=>t(e.roles??{})).catch(e=>c(e instanceof Error?e.message:String(e))).finally(()=>a(!1))},[]);let p=async()=>{l(!0),c(null);try{let e=await fetch("/api/model-roles",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({roles:r})}),t=await e.json();if(!e.ok||t.error)throw Error(t.error||`HTTP ${e.status}`);z.oR.success("OMP model roles saved")}catch(e){c(e instanceof Error?e.message:String(e))}finally{l(!1)}};return(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:14},children:[(0,o.jsxs)("div",{children:[(0,o.jsx)(ex,{children:"OMP Model Roles"}),(0,o.jsxs)("p",{style:{margin:"4px 0 0",fontSize:"var(--text-md)",color:"var(--text-muted)",lineHeight:1.5},children:["Saved natively in ",(0,o.jsx)("code",{children:"~/.omp/agent/config.yml"}),". Choose an OMP model and its supported reasoning level for each role."]})]}),i?(0,o.jsx)("div",{style:{color:"var(--text-muted)",fontSize:"var(--text-md)"},children:"Loading roles..."}):el.map(n=>{let i,a,s,l,d;return(0,o.jsxs)("div",{className:"model-role-row",style:{display:"grid",gridTemplateColumns:"82px minmax(0, 1fr) minmax(110px, 0.35fr)",alignItems:"center",gap:10,fontSize:"var(--text-md)"},children:[(0,o.jsx)("code",{style:{color:"var(--text-muted)"},children:n}),(a=(i=r[n]??"").replace(/:([^,:]+)$/,""),s=i.match(/:([^,:]+)$/)?.[1]??"",l=e.find(e=>`${e.provider}/${e.id}`===a),d=!a||!!l,(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)("select",{"aria-label":`Model override for ${n}`,value:a,onChange:e=>{var o;let i,a;return o=e.target.value,i=r[n]??"",a=i.match(/:([^,:]+)$/)?.[1]??"",void t(e=>({...e,[n]:o?`${o}${a?`:${a}`:""}`:""}))},style:{minWidth:0,padding:"7px 9px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"var(--bg)",color:"var(--text)",fontSize:"var(--text-md)"},children:[(0,o.jsx)("option",{value:"",children:"No override"}),!d&&(0,o.jsxs)("option",{value:a,children:[a," (not currently available)"]}),e.map(e=>(0,o.jsxs)("option",{value:`${e.provider}/${e.id}`,children:[e.name||e.id," (",e.provider,"/",e.id,")"]},`${e.provider}:${e.id}`))]}),(0,o.jsxs)("select",{"aria-label":`Thinking level for ${n}`,value:s,disabled:!l,onChange:e=>{var o;let i;return o=e.target.value,i=(r[n]??"").replace(/:([^,:]+)$/,""),void t(e=>({...e,[n]:i?`${i}${o?`:${o}`:""}`:""}))},style:{minWidth:0,padding:"7px 9px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"var(--bg)",color:"var(--text)",fontSize:"var(--text-md)",opacity:l?1:.55},children:[(0,o.jsx)("option",{value:"",children:"Model default"}),(l?.thinkingLevels??[]).filter(e=>"off"!==e).map(e=>(0,o.jsx)("option",{value:e,children:e},e))]})]}))]},n)}),d&&(0,o.jsx)("div",{role:"alert",style:{color:"var(--status-error)",fontSize:"var(--text-md)"},children:d}),(0,o.jsx)("button",{type:"button",onClick:()=>void p(),disabled:i||s,style:{alignSelf:"flex-start",padding:"7px 12px",border:"none",borderRadius:"var(--radius-control)",background:"var(--accent)",color:"var(--on-accent)",cursor:s?"wait":"pointer",fontSize:"var(--text-md)",fontWeight:600},children:s?"Saving...":"Save OMP roles"})]})}let ec=["openai-completions","openai-responses","openai-codex-responses","azure-openai-responses","anthropic-messages","bedrock-converse-stream","google-generative-ai","google-gemini-cli","google-vertex"];function ep({text:e}){let r=e.split("`");return 1===r.length?(0,o.jsx)(o.Fragment,{children:e}):(0,o.jsx)(o.Fragment,{children:r.map((e,r)=>r%2==1?(0,o.jsx)("code",{style:{fontFamily:"var(--font-mono)"},children:e},r):e)})}function ex({children:e}){return(0,o.jsx)("div",{style:{fontSize:"var(--text-sm)",fontWeight:600,color:"var(--text-dim)",textTransform:"uppercase",letterSpacing:"0.06em",marginBottom:2},children:e})}function eu({icon:e,label:r,selected:t,onClick:n}){return(0,o.jsxs)("button",{type:"button",onClick:n,style:{width:"100%",padding:"8px 10px",border:"none",borderRadius:"var(--radius-control)",background:t?"var(--bg-selected)":"none",color:t?"var(--text)":"var(--text-muted)",cursor:"pointer",fontSize:"var(--text-md)",textAlign:"left",display:"flex",alignItems:"center",gap:"var(--space-4)",fontWeight:t?600:400},children:[(0,o.jsx)(e,{size:14,style:{color:t?"var(--accent)":"currentColor",flexShrink:0}}),r]})}let eg=e=>({onMouseEnter:r=>{e||(r.currentTarget.style.background="var(--bg-hover)")},onMouseLeave:r=>{e||(r.currentTarget.style.background="none")}}),ev={onMouseEnter:e=>{e.currentTarget.style.color="var(--accent)",e.currentTarget.style.borderColor="var(--accent)"},onMouseLeave:e=>{e.currentTarget.style.color="var(--text-muted)",e.currentTarget.style.borderColor="var(--border)"}},eh=[{label:"\uD83E\uDD99 Ollama",baseUrl:"http://localhost:11434/v1",auth:"none"},{label:"⚡ LM Studio / vLLM",baseUrl:"http://localhost:1234/v1",auth:"none"},{label:"\uD83C\uDF10 OpenRouter",baseUrl:"https://openrouter.ai/api/v1",auth:"apiKey"},{label:"\uD83E\uDD16 Local Proxy (:2455)",baseUrl:"http://127.0.0.1:2455/v1",auth:"keep"}],em={padding:"4px 8px",fontSize:"var(--text-sm)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"var(--bg)",color:"var(--text)",cursor:"pointer"};function ef({name:e,provider:r,onChange:t,onRename:i,onDelete:s}){let{t:l}=(0,a.s9)(),[d,c]=(0,n.useState)(e),[p,u]=(0,n.useState)(!1);(0,n.useEffect)(()=>c(e),[e]);let g=(e,o)=>t({...r,[e]:o}),m=(0,x.JT)(()=>d.trim()?null:l("modelsConfig.errorNameRequired")),f=(0,x.JT)(()=>{let e=r.baseUrl??"";if(!e.trim())return null;try{let r=new URL(e);if("http:"!==r.protocol&&"https:"!==r.protocol)return l("modelsConfig.errorUrlInvalid");return null}catch{return l("modelsConfig.errorUrlInvalid")}}),y=!0===r.apiKeyConfigured,b=y&&void 0===r.apiKey,j=(0,x.JT)(()=>"none"===r.auth||"oauth"===r.auth||!r.models?.length||b||"string"==typeof r.apiKey&&r.apiKey.trim()?null:l("modelsConfig.errorApiKeyRequired")),C=d.trim(),k=r.baseUrl?r.baseUrl.replace(/^https?:\/\//,"").split("/")[0]||r.baseUrl:"Default endpoint";return(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"var(--space-6)"},children:[(0,o.jsxs)("div",{style:{padding:"14px 16px",border:"1px solid var(--border)",borderRadius:"var(--radius-card)",background:"var(--bg-panel)",display:"flex",flexDirection:"column",gap:10,boxShadow:"var(--shadow-card)"},children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"var(--space-5)"},children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10},children:[(0,o.jsx)("div",{style:{width:"var(--control-height-lg)",height:"var(--control-height-lg)",borderRadius:"var(--radius-control)",background:"var(--bg-subtle)",border:"1px solid var(--border)",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:(0,o.jsx)(ez,{id:e,size:20})}),(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:2},children:[(0,o.jsx)("div",{style:{fontSize:15,fontWeight:700,fontFamily:"var(--font-mono)",color:"var(--text)"},children:e}),(0,o.jsx)("div",{style:{fontSize:"var(--text-sm)",color:"var(--text-muted)",fontFamily:"var(--font-mono)"},children:k})]})]}),(0,o.jsx)("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-3)"},children:"none"===r.auth?(0,o.jsx)("span",{style:{fontSize:"var(--text-xs)",padding:"2px 7px",borderRadius:4,background:"var(--bg-subtle)",color:"var(--text-muted)",fontWeight:500},children:"Auth: None"}):b||"string"==typeof r.apiKey&&r.apiKey.length>0?(0,o.jsx)("span",{style:{fontSize:"var(--text-xs)",padding:"2px 7px",borderRadius:4,background:"color-mix(in srgb, var(--accent) 15%, transparent)",color:"var(--accent)",fontWeight:600},children:"Key Set"}):null===r.apiKey?(0,o.jsx)("span",{style:{fontSize:"var(--text-xs)",padding:"2px 7px",borderRadius:4,background:"color-mix(in srgb, var(--status-warning) 15%, transparent)",color:"var(--status-warning)",fontWeight:600},children:"Key Will Clear"}):(0,o.jsx)("span",{style:{fontSize:"var(--text-xs)",padding:"2px 7px",borderRadius:4,background:"color-mix(in srgb, var(--status-error) 15%, transparent)",color:"var(--status-error)",fontWeight:600},children:"Key Missing"})})]}),(0,o.jsxs)("div",{style:{borderTop:"1px solid var(--border)",paddingTop:10,marginTop:4},children:[(0,o.jsx)("div",{style:{fontSize:"var(--text-xs)",fontWeight:700,color:"var(--text-dim)",textTransform:"uppercase",letterSpacing:"0.06em",marginBottom:6},children:"Quick Endpoint Presets"}),(0,o.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:"var(--space-3)"},children:eh.map(e=>(0,o.jsx)("button",{type:"button",onClick:()=>{t({...r,baseUrl:e.baseUrl,api:"openai-completions",auth:"keep"===e.auth?r.auth:e.auth}),z.oR.success(`Applied ${e.baseUrl} endpoint preset`)},style:em,children:e.label},e.baseUrl))})]})]}),(0,o.jsxs)(x.M_,{label:(0,o.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:"var(--space-3)"},children:[(0,o.jsx)(v.A,{size:12,"aria-hidden":"true"})," Configuration Details"]}),children:[(0,o.jsx)(x.D0,{label:l("modelsConfig.providerName"),required:!0,error:m.error,children:(0,o.jsx)(x.ks,{value:d,onChange:e=>{c(e),m.onChange()},placeholder:"provider-name",mono:!0,invalid:!!m.error,error:m.error,onBlurValidate:m.onBlur})}),C!==e&&(0,o.jsx)("button",{type:"button",onClick:()=>{m.onSubmit()||i(C)},style:{alignSelf:"flex-start",padding:"5px 12px",background:"var(--accent)",border:"none",borderRadius:"var(--radius-control)",color:"var(--on-accent)",cursor:"pointer",fontSize:"var(--text-sm)",fontWeight:600},children:l("modelsConfig.rename")}),(0,o.jsx)(x.D0,{label:l("modelsConfig.baseUrl"),error:f.error,children:(0,o.jsx)(x.ks,{value:r.baseUrl??"",onChange:e=>{g("baseUrl",e||void 0),f.onChange()},placeholder:"https://api.example.com/v1",mono:!0,invalid:!!f.error,error:f.error,onBlurValidate:f.onBlur})}),(0,o.jsxs)(x.D0,{label:l("modelsConfig.apiKey"),hint:(0,o.jsxs)("span",{children:[(0,o.jsx)(ep,{text:l("modelsConfig.apiKeyHint")}),b&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("br",{}),"A configured key is retained unless you replace it or explicitly clear it."]})]}),error:j.error,children:[(0,o.jsx)(x.L4,{value:"string"==typeof r.apiKey?r.apiKey:"",onChange:e=>{g("apiKey",e||(y?null:void 0)),j.onChange()},placeholder:l("modelsConfig.apiKeyPlaceholder"),invalid:!!j.error,error:j.error,onBlurValidate:j.onBlur,showLabel:l("modelsConfig.showApiKey"),hideLabel:l("modelsConfig.hideApiKey")}),y&&(0,o.jsx)("button",{type:"button",onClick:()=>{g("apiKey",null),j.onChange(),j.onBlur()},style:{alignSelf:"flex-start",padding:"4px 9px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"none",color:"var(--text-muted)",cursor:"pointer",fontSize:"var(--text-sm)"},children:"Clear stored API key"})]}),(0,o.jsx)(x.Jl,{label:l("modelsConfig.noApiKeyRequired"),checked:"none"===r.auth,onChange:e=>{g("auth",e?"none":void 0),e&&j.onChange(),j.onBlur()}}),(0,o.jsx)(x.D0,{label:l("modelsConfig.api"),children:(0,o.jsx)(x.l6,{value:r.api??"openai-completions",onChange:e=>g("api",e),options:r.api&&!ec.includes(r.api)?[r.api,...ec]:ec,required:!0,placeholder:l("modelsConfig.inheritNone")})})]}),(0,o.jsxs)("section",{style:{padding:"14px 16px",border:"1px solid color-mix(in srgb, var(--status-error) 25%, transparent)",borderRadius:"var(--radius-card)",background:"var(--bg-panel)",display:"flex",alignItems:"center",justifyContent:"space-between",gap:"var(--space-5)"},children:[(0,o.jsxs)("div",{children:[(0,o.jsx)("div",{style:{fontSize:12.5,fontWeight:600,color:"var(--text)"},children:"Remove Provider"}),(0,o.jsxs)("div",{style:{fontSize:"var(--text-sm)",color:"var(--text-muted)",marginTop:2},children:["Delete ",e," and remove its models from models.yml configuration."]})]}),(0,o.jsxs)("button",{type:"button",onClick:()=>u(!0),style:{padding:"6px 12px",background:"none",border:"1px solid var(--status-error)",borderRadius:"var(--radius-control)",color:"var(--status-error)",cursor:"pointer",fontSize:"var(--text-md)",display:"inline-flex",alignItems:"center",gap:5,fontWeight:500,flexShrink:0},children:[(0,o.jsx)(h.A,{size:13,"aria-hidden":"true"})," ",l("modelsConfig.delete")]})]}),(0,o.jsx)(x.TM,{open:p,onOpenChange:u,title:l("modelsConfig.deleteProviderTitle",{name:e}),description:l("modelsConfig.deleteProviderBody",{name:e}),confirmLabel:l("modelsConfig.delete"),cancelLabel:l("modelsConfig.cancel"),danger:!0,onConfirm:()=>{u(!1),s()}})]})}let ey=["minimal","low","medium","high","xhigh","max"],eb={minimal:"var(--text-dim)",low:"color-mix(in srgb, var(--accent) 45%, var(--text-muted))",medium:"var(--accent)",high:"var(--accent-hover)",xhigh:"var(--status-warning)",max:"var(--status-error)"};function ej({value:e,onChange:r}){let{t}=(0,a.s9)(),n=e?.efforts,i=e?.effortMap??{},s=(t,o)=>{let a=new Set(n??[...ey]),s={...i};null===o?(a.delete(t),delete s[t]):(a.add(t),"omit"===o?delete s[t]:s[t]=o);let l=ey.filter(e=>a.has(e));0===l.length||l.length===ey.length&&0===Object.keys(s).length?r(void 0):r({...e??{},mode:e?.mode??"effort",efforts:l,effortMap:Object.keys(s).length?s:void 0})};return(0,o.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:2},children:ey.map(e=>{let r=void 0!==n&&!n.includes(e),a=r?null:i[e],l=r?"null":"string"==typeof a?"string":"omit",d="string"==typeof a?a:"",c=eb[e],p={padding:"4px 10px",fontSize:"var(--text-xs)",border:"none",cursor:"pointer",fontWeight:400,transition:"background var(--dur-fast) var(--ease-out-warm), color var(--dur-fast) var(--ease-out-warm)",whiteSpace:"nowrap",background:"var(--bg-panel)",color:"var(--text-dim)"},x={background:"var(--accent)",color:"var(--on-accent)",fontWeight:600};return(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-4)",padding:"5px 4px",borderRadius:"var(--radius-control)",background:"transparent",border:"1px solid transparent"},children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:5,width:68,flexShrink:0},children:[(0,o.jsx)("span",{style:{width:6,height:6,borderRadius:"50%",background:c,flexShrink:0,opacity:"null"===l?.3:1}}),(0,o.jsx)("span",{style:{fontSize:"var(--text-sm)",fontFamily:"var(--font-mono)",color:"null"===l?"var(--text-dim)":"var(--text-muted)",textDecoration:"null"===l?"line-through":"none"},children:e})]}),(0,o.jsxs)("div",{style:{display:"flex",borderRadius:"var(--radius-control)",border:"1px solid var(--border)",overflow:"hidden",flexShrink:0},children:[(0,o.jsx)("button",{onClick:()=>s(e,"omit"),style:{...p,..."omit"===l?x:{}},children:t("modelsConfig.default")}),(0,o.jsx)("button",{onClick:()=>s(e,null),style:{...p,borderLeft:"1px solid var(--border)",..."null"===l?{background:"var(--status-error)",color:"var(--on-accent)",fontWeight:600}:{}},children:t("modelsConfig.disabled")})]}),(0,o.jsxs)("div",{style:{display:"flex",borderRadius:"var(--radius-control)",border:`1px solid ${"string"===l?"var(--accent)":"var(--border)"}`,overflow:"hidden",transition:"border-color var(--dur-fast) var(--ease-out-warm)"},children:[(0,o.jsx)("button",{onClick:()=>s(e,d||e),style:{...p,..."string"===l?x:{},borderRight:"1px solid var(--border)",flexShrink:0},children:t("modelsConfig.custom")}),(0,o.jsx)("input",{value:d,onChange:r=>s(e,r.target.value),onFocus:()=>{"string"!==l&&s(e,d||e)},placeholder:e,maxLength:10,style:{width:"12ch",background:"string"===l?"var(--bg)":"var(--bg-panel)",border:"none",outline:"none",color:"string"===l?"var(--text)":"var(--text-dim)",fontFamily:"var(--font-mono)",fontSize:"var(--text-sm)",padding:"4px 7px",transition:"background var(--dur-fast) var(--ease-out-warm), color var(--dur-fast) var(--ease-out-warm)"}})]})]},e)})})}let eC={input:"modelsConfig.costInput",output:"modelsConfig.costOutput",cacheRead:"modelsConfig.costCacheRead",cacheWrite:"modelsConfig.costCacheWrite"};function ek({providerName:e,provider:r,model:t,onChange:i,onDelete:s}){let{t:l}=(0,a.s9)(),[c,p]=(0,n.useState)({phase:"idle"}),[u,g]=(0,n.useState)(!1),[v,C]=(0,n.useState)(null),[k,S]=(0,n.useState)({phase:"idle"}),[w,z]=(0,n.useState)(""),I=(0,n.useRef)(!1),T=async()=>{if(v&&!I.current){I.current=!0,C(null),z(`${v.providerName} / ${v.modelId}`),S({phase:"testing"});try{let e=await fetch("/api/models-config/connectivity",{method:"POST",headers:{"Content-Type":"application/json"},body:v.body}),r=await e.json();if("object"!=typeof r||null===r)throw Error();let t="latencyMs"in r&&"number"==typeof r.latencyMs&&Number.isFinite(r.latencyMs)?r.latencyMs:void 0;if(!e.ok||!("ok"in r)||!0!==r.ok||!("responseText"in r)||"string"!=typeof r.responseText||!r.responseText.trim()){let e=(0,d.v)(r);S(null===e?{phase:"idle"}:{phase:"error",latencyMs:t,message:e});return}S({phase:"success",latencyMs:t,responseText:r.responseText.slice(0,1e3)})}catch(e){S(e instanceof Error&&"AbortError"===e.name?{phase:"idle"}:{phase:"error",message:l("modelsConfig.connectionFailed")})}finally{I.current=!1}}},R=(e,r)=>i({...t,[e]:r}),A=(0,x.JT)(()=>t.id.trim()?null:l("modelsConfig.errorIdRequired")),M=(()=>{if("idle"===c.phase)return null;if("testing"===c.phase)return l("modelsConfig.validatingConfig");let e=[void 0!==c.latencyMs?`${c.latencyMs}ms`:null,void 0!==c.status?`HTTP ${c.status}`:null].filter(Boolean);return"success"===c.phase?[l("modelsConfig.ok"),...e,c.responseText||null].filter(Boolean).join(" \xb7 "):[l("modelsConfig.failed"),...e,c.message].filter(Boolean).join(" \xb7 ")})();(0,n.useEffect)(()=>{p({phase:"idle"})},[e,r.baseUrl,r.api,r.apiKey,t.id,t.api]);let O=(0,n.useCallback)(async()=>{if(t.id.trim()&&"testing"!==c.phase){p({phase:"testing"});try{let o=await fetch("/api/models-config/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerName:e,provider:r,model:t})}),n=await o.json();if(!o.ok||!n.ok)return void p({phase:"error",message:n.error||n.code?(0,d.K)(n):`HTTP ${o.status}`,latencyMs:n.latencyMs,status:n.status});p({phase:"success",latencyMs:n.latencyMs,status:n.status,responseText:n.responseText})}catch(e){p({phase:"error",message:e instanceof Error?e.message:String(e)})}}},[t,r,e,c.phase]);return(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:14},children:[(0,o.jsxs)(x.M_,{label:(0,o.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:5},children:[(0,o.jsx)(m.A,{size:11,"aria-hidden":"true"})," ",l("modelsConfig.model")]}),children:[(0,o.jsxs)("div",{className:"model-detail-grid-2",style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:10},children:[(0,o.jsx)(x.D0,{label:l("modelsConfig.idRequired"),required:!0,error:A.error,children:(0,o.jsx)(x.ks,{value:t.id,onChange:e=>{R("id",e),A.onChange()},placeholder:"model-id",mono:!0,invalid:!!A.error,error:A.error,onBlurValidate:A.onBlur})}),(0,o.jsx)(x.D0,{label:l("modelsConfig.name"),children:(0,o.jsx)(x.ks,{value:t.name??"",onChange:e=>R("name",e||void 0),placeholder:l("modelsConfig.displayNamePlaceholder")})})]}),(0,o.jsx)(x.D0,{label:l("modelsConfig.apiOverride"),children:(0,o.jsx)(x.l6,{value:t.api??"",onChange:e=>R("api",e||void 0),options:t.api&&!ec.includes(t.api)?[t.api,...ec]:ec,placeholder:l("modelsConfig.inheritNone")})}),(0,o.jsxs)("div",{style:{display:"flex",gap:20,flexWrap:"wrap"},children:[(0,o.jsx)(x.Jl,{label:l("modelsConfig.reasoningThinking"),checked:t.reasoning??!1,onChange:e=>R("reasoning",e||void 0)}),(0,o.jsx)(x.Jl,{label:l("modelsConfig.imageInput"),checked:t.input?.includes("image")??!1,onChange:e=>R("input",e?["text","image"]:void 0)})]})]}),t.reasoning&&(0,o.jsxs)(x.M_,{label:(0,o.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:5},children:[(0,o.jsx)(f.A,{size:11,"aria-hidden":"true"})," ",l("modelsConfig.thinkingLevels")]}),children:[(0,o.jsx)("div",{style:{display:"flex",justifyContent:"flex-end"},children:t.thinking&&(0,o.jsxs)("button",{type:"button",onClick:()=>R("thinking",void 0),style:{fontSize:"var(--text-xs)",padding:"3px 9px",background:"none",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",color:"var(--text-dim)",cursor:"pointer",display:"inline-flex",alignItems:"center",gap:"var(--space-2)"},children:[(0,o.jsx)(y.A,{size:10,"aria-hidden":"true"})," ",l("modelsConfig.resetToAuto")]})}),(0,o.jsx)(ej,{value:t.thinking,onChange:e=>R("thinking",e)})]}),(0,o.jsx)(x.M_,{label:l("modelsConfig.tokenLimits"),children:(0,o.jsxs)("div",{className:"model-detail-grid-2",style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:10},children:[(0,o.jsx)(x.D0,{label:l("modelsConfig.contextWindowTokens"),children:(0,o.jsx)(x.XZ,{value:void 0!==t.contextWindow?String(t.contextWindow):"",onChange:e=>R("contextWindow",e?parseInt(e):void 0),placeholder:"128000"})}),(0,o.jsx)(x.D0,{label:l("modelsConfig.maxOutputTokens"),children:(0,o.jsx)(x.XZ,{value:void 0!==t.maxTokens?String(t.maxTokens):"",onChange:e=>R("maxTokens",e?parseInt(e):void 0),placeholder:"16384"})})]})}),(0,o.jsx)(x.M_,{label:l("modelsConfig.costPerMillion"),children:(0,o.jsx)("div",{className:"model-detail-grid-4",style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr 1fr",gap:10},children:["input","output","cacheRead","cacheWrite"].map(e=>(0,o.jsx)(x.D0,{label:l(eC[e]),children:(0,o.jsx)(x.XZ,{value:t.cost?.[e]!==void 0?String(t.cost[e]):"",onChange:r=>{let o;return o=parseFloat(r),void i({...t,cost:{...t.cost??{},[e]:isNaN(o)?void 0:o}})},placeholder:"0"})},e))})}),(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",flexWrap:"wrap",gap:"var(--space-4)"},children:[M&&(0,o.jsxs)("span",{title:M,style:{maxWidth:360,padding:"4px 10px",border:`1px solid ${"error"===c.phase?"color-mix(in srgb, var(--accent) 30%, transparent)":"success"===c.phase?"color-mix(in srgb, var(--accent) 25%, transparent)":"var(--border)"}`,borderRadius:"var(--radius-control)",background:"error"===c.phase?"color-mix(in srgb, var(--accent) 10%, var(--bg-panel))":"success"===c.phase?"color-mix(in srgb, var(--accent) 8%, var(--bg-panel))":"var(--bg-panel)",color:"error"===c.phase||"success"===c.phase?"var(--text)":"var(--text-muted)",fontSize:"var(--text-sm)",display:"inline-flex",alignItems:"center",gap:"var(--space-3)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:["success"===c.phase?(0,o.jsx)(b.A,{size:11,"aria-hidden":"true"}):null,"error"===c.phase?(0,o.jsx)(j.A,{size:11,"aria-hidden":"true"}):null,M]}),(0,o.jsxs)("div",{style:{display:"flex",gap:"var(--space-4)",marginLeft:"auto"},children:[(0,o.jsxs)("button",{type:"button",onClick:O,disabled:!t.id.trim()||"testing"===c.phase,title:l("modelsConfig.testTitle"),style:{padding:"5px 12px",background:"success"===c.phase?"color-mix(in srgb, var(--accent) 18%, var(--bg-panel))":"none",border:`1px solid ${"success"===c.phase?"color-mix(in srgb, var(--accent) 30%, transparent)":"var(--border)"}`,borderRadius:"var(--radius-control)",color:"success"===c.phase?"var(--accent)":t.id.trim()&&"testing"!==c.phase?"var(--text-muted)":"var(--text-dim)",cursor:t.id.trim()&&"testing"!==c.phase?"pointer":"not-allowed",fontSize:"var(--text-sm)",display:"inline-flex",alignItems:"center",justifyContent:"center",gap:5},children:["success"===c.phase&&(0,o.jsx)(b.A,{size:11,"aria-hidden":"true"}),"testing"===c.phase?l("modelsConfig.testing"):"success"===c.phase?l("modelsConfig.ok"):l("modelsConfig.test")]}),(0,o.jsxs)("button",{type:"button",onClick:()=>g(!0),style:{padding:"5px 12px",background:"none",border:"1px solid color-mix(in srgb, var(--accent) 30%, transparent)",borderRadius:"var(--radius-control)",color:"var(--accent)",cursor:"pointer",fontSize:"var(--text-sm)",display:"inline-flex",alignItems:"center",gap:"var(--space-2)"},children:[(0,o.jsx)(h.A,{size:11,"aria-hidden":"true"})," ",l("modelsConfig.remove")]})]})]}),(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",alignItems:"flex-start",gap:"var(--space-3)"},children:[(0,o.jsx)("button",{type:"button",disabled:!t.id.trim()||"testing"===k.phase||null!==v,onClick:()=>{I.current||C({providerName:e,modelId:t.id,body:JSON.stringify({providerName:e,provider:r,model:t,confirm:!0})})},style:{padding:"5px 12px",background:"none",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",color:"var(--text)",fontSize:"var(--text-sm)"},children:l("testing"===k.phase?"modelsConfig.connectionTesting":"modelsConfig.connectionTest")}),(0,o.jsx)("p",{style:{margin:0,color:"var(--text-muted)",fontSize:"var(--text-sm)"},children:l("modelsConfig.connectionIsolation")}),"idle"!==k.phase&&(0,o.jsxs)("div",{role:"status","aria-live":"polite",style:{fontSize:"var(--text-sm)",color:"var(--text)",whiteSpace:"pre-wrap",overflowWrap:"anywhere",maxWidth:"100%"},children:[w," \xb7 ","testing"===k.phase?l("modelsConfig.connectionTesting"):(0,o.jsxs)(o.Fragment,{children:["success"===k.phase?l("modelsConfig.connectionSuccess"):k.message,void 0!==k.latencyMs?` \xb7 ${k.latencyMs}ms`:"","success"===k.phase?`
2
- ${k.responseText}`:""]})]})]}),(0,o.jsx)(x.TM,{open:null!==v,onOpenChange:e=>{e||C(null)},title:l("modelsConfig.connectionConfirmTitle"),description:l("modelsConfig.connectionConfirmBody",{provider:v?.providerName??"",model:v?.modelId??""}),confirmLabel:l("modelsConfig.connectionTest"),cancelLabel:l("modelsConfig.cancel"),onConfirm:T}),(0,o.jsx)(x.TM,{open:u,onOpenChange:g,title:l("modelsConfig.removeModelTitle",{id:t.id}),description:l("modelsConfig.removeModelBody",{id:t.id}),confirmLabel:l("modelsConfig.remove"),cancelLabel:l("modelsConfig.cancel"),danger:!0,onConfirm:()=>{g(!1),s()}})]})}function eS({provider:e,onRefresh:r}){let{t,tn:i}=(0,a.s9)(),[l,c]=(0,n.useState)({phase:"idle"}),[p,x]=(0,n.useState)(""),u=(0,n.useRef)(null),g=(0,n.useRef)(null);(0,n.useEffect)(()=>{("auth"===l.phase||"prompt"===l.phase)&&setTimeout(()=>g.current?.focus(),50)},[l.phase]),(0,n.useEffect)(()=>{c({phase:"idle"}),x(""),u.current?.close(),u.current=null},[e.id]),(0,n.useEffect)(()=>()=>{u.current?.close()},[]);let v=(0,n.useCallback)(()=>{u.current?.close(),c({phase:"connecting"}),x("");let o=new EventSource(`/api/auth/login/${encodeURIComponent(e.id)}`);u.current=o,o.onmessage=e=>{let t;try{t=JSON.parse(e.data)}catch{return}"auth"===t.type?(c({phase:"auth",url:t.url,instructions:t.instructions??null,token:t.token}),s(t.url)&&window.open(t.url,"_blank","noopener,noreferrer")):"device_code"===t.type?(c({phase:"device_code",userCode:t.userCode,verificationUri:t.verificationUri,intervalSeconds:t.intervalSeconds??null,expiresInSeconds:t.expiresInSeconds??null}),s(t.verificationUri)&&window.open(t.verificationUri,"_blank","noopener,noreferrer")):"prompt_request"===t.type?c({phase:"prompt",message:t.message,placeholder:t.placeholder??null,token:t.token}):"select_request"===t.type?c({phase:"select",message:t.message,options:t.options??[],token:t.token}):"progress"===t.type?c({phase:"progress",message:t.message}):"success"===t.type?(o.close(),c({phase:"success"}),r()):"error"===t.type?(o.close(),c({phase:"error",message:t.message})):"cancelled"===t.type&&(o.close(),c({phase:"idle"}))},o.onerror=()=>{o.close(),c(e=>"success"===e.phase?e:{phase:"error",message:t("modelsConfig.connectionLost")})}},[e.id,r,t]),h=(0,n.useCallback)(async(r,o)=>{if(o.trim()){c({phase:"progress",message:t("modelsConfig.verifying")});try{let n=await fetch(`/api/auth/login/${encodeURIComponent(e.id)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:r,code:o.trim()})});if(!n.ok){let e=await n.json().catch(()=>({}));c({phase:"error",message:e.error||e.code?(0,d.K)(e):t("modelsConfig.serverError",{status:n.status})});return}x("")}catch(e){c({phase:"error",message:e instanceof Error?e.message:t("modelsConfig.networkError")})}}},[e.id,t]),m=(0,n.useCallback)(async(r,o)=>{c({phase:"progress",message:t("modelsConfig.continuing")});try{let n=await fetch(`/api/auth/login/${encodeURIComponent(e.id)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:r,code:o})});if(!n.ok){let e=await n.json().catch(()=>({}));c({phase:"error",message:e.error||e.code?(0,d.K)(e):t("modelsConfig.serverError",{status:n.status})})}}catch(e){c({phase:"error",message:e instanceof Error?e.message:t("modelsConfig.networkError")})}},[e.id,t]),f="connecting"===l.phase||"progress"===l.phase||"auth"===l.phase||"device_code"===l.phase||"prompt"===l.phase||"select"===l.phase;return(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"var(--space-6)"},children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[(0,o.jsx)(ex,{children:t("modelsConfig.subscription")}),(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-3)"},children:[(0,o.jsx)("span",{style:{width:7,height:7,borderRadius:"50%",background:e.loggedIn?"var(--status-success)":"var(--border)",display:"inline-block"}}),(0,o.jsx)("span",{style:{fontSize:"var(--text-sm)",color:e.loggedIn?"var(--status-success)":"var(--text-dim)"},children:e.loggedIn?t("modelsConfig.connected"):t("modelsConfig.notConnected")})]})]}),(0,o.jsxs)("div",{style:{minHeight:48},children:["idle"===l.phase&&(0,o.jsx)("p",{style:{margin:0,fontSize:"var(--text-md)",color:"var(--text-muted)",lineHeight:1.5},children:e.loggedIn?t("modelsConfig.alreadyConnected"):t("modelsConfig.connectAccount",{name:e.name})}),"connecting"===l.phase&&(0,o.jsx)("p",{style:{margin:0,fontSize:"var(--text-md)",color:"var(--text-muted)"},children:t("modelsConfig.openingBrowser")}),"select"===l.phase&&(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:10},children:[(0,o.jsx)("p",{style:{margin:0,fontSize:"var(--text-md)",color:"var(--text-muted)",lineHeight:1.5},children:l.message}),(0,o.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:"var(--space-3)"},children:l.options.map(e=>(0,o.jsx)("button",{onClick:()=>m(l.token,e.id),style:{padding:"6px 9px",background:"var(--bg)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",color:"var(--text)",cursor:"pointer",fontSize:"var(--text-md)",textAlign:"left"},children:e.label},e.id))})]}),("auth"===l.phase||"prompt"===l.phase)&&(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:10},children:[(0,o.jsx)("p",{style:{margin:0,fontSize:"var(--text-md)",color:"var(--text-muted)",lineHeight:1.5},children:"auth"===l.phase?t("modelsConfig.completeSignIn"):l.message}),"auth"===l.phase&&(0,o.jsx)("p",{style:{margin:0,fontSize:"var(--text-sm)",color:"var(--text-dim)",lineHeight:1.5},children:(0,o.jsx)("a",{href:l.url,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--accent)",wordBreak:"break-all"},children:t("modelsConfig.browserNotOpened")})}),(0,o.jsxs)("div",{style:{display:"flex",gap:"var(--space-3)"},children:[(0,o.jsx)("input",{ref:g,value:p,onChange:e=>x(e.target.value),onKeyDown:e=>{"Enter"===e.key&&h(l.token,p)},placeholder:"auth"===l.phase?"http://localhost:1455/auth/callback?code=…":l.placeholder??t("modelsConfig.enterValue"),style:{flex:1,padding:"6px 9px",background:"var(--bg)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",color:"var(--text)",fontSize:"var(--text-md)",outline:"none",fontFamily:"var(--font-mono)",boxSizing:"border-box"}}),(0,o.jsx)("button",{onClick:()=>h(l.token,p),disabled:!p.trim(),style:{padding:"6px 12px",background:p.trim()?"var(--accent)":"var(--bg-panel)",border:"none",borderRadius:"var(--radius-control)",color:p.trim()?"var(--on-accent)":"var(--text-dim)",cursor:p.trim()?"pointer":"not-allowed",fontSize:"var(--text-md)",fontWeight:600,flexShrink:0},children:t("modelsConfig.submit")})]})]}),"device_code"===l.phase&&(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:10},children:[(0,o.jsx)("p",{style:{margin:0,fontSize:"var(--text-md)",color:"var(--text-muted)",lineHeight:1.5},children:t("modelsConfig.deviceCodeInstructions")}),(0,o.jsx)("div",{style:{padding:"8px 10px",background:"var(--bg)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",color:"var(--text)",fontSize:16,fontWeight:700,fontFamily:"var(--font-mono)",letterSpacing:0},children:l.userCode}),(0,o.jsxs)("p",{style:{margin:0,fontSize:"var(--text-sm)",color:"var(--text-dim)",lineHeight:1.5},children:[(0,o.jsx)("a",{href:l.verificationUri,target:"_blank",rel:"noopener noreferrer",style:{color:"var(--accent)",wordBreak:"break-all"},children:l.verificationUri}),l.expiresInSeconds?" "+i("modelsConfig.expiresInMinutes",Math.ceil(l.expiresInSeconds/60)):""]})]}),"progress"===l.phase&&(0,o.jsx)("p",{style:{margin:0,fontSize:"var(--text-md)",color:"var(--text-muted)"},children:l.message}),"success"===l.phase&&(0,o.jsx)("p",{style:{margin:0,fontSize:"var(--text-md)",color:"var(--status-success)"},children:t("modelsConfig.connectedSuccessfully")}),"error"===l.phase&&(0,o.jsx)("p",{style:{margin:0,fontSize:"var(--text-md)",color:"var(--status-error)"},children:l.message})]}),(0,o.jsx)("div",{style:{display:"flex",gap:"var(--space-4)"},children:f?(0,o.jsx)("button",{onClick:()=>{u.current?.close(),c({phase:"idle"})},style:{padding:"5px 12px",background:"none",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",color:"var(--text-muted)",cursor:"pointer",fontSize:"var(--text-md)"},children:t("modelsConfig.cancel")}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("button",{onClick:v,style:{padding:"5px 14px",background:"var(--accent)",border:"none",borderRadius:"var(--radius-control)",color:"var(--on-accent)",cursor:"pointer",fontSize:"var(--text-md)",fontWeight:600},children:e.loggedIn?t("modelsConfig.relogin"):t("modelsConfig.login")}),e.loggedIn&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("button",{type:"button",disabled:!0,title:"Disconnect this OMP account from the OMP terminal",style:{padding:"5px 12px",background:"none",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",color:"var(--text-dim)",cursor:"not-allowed",fontSize:"var(--text-md)",opacity:.7},children:t("modelsConfig.disconnect")}),(0,o.jsx)("span",{style:{alignSelf:"center",color:"var(--text-dim)",fontSize:"var(--text-sm)"},children:"Use the OMP terminal to disconnect this account."})]})]})})]})}function ew({provider:e}){let{t:r,tn:t}=(0,a.s9)();return(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"var(--space-6)"},children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[(0,o.jsx)(ex,{children:r("modelsConfig.apiKey")}),(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-3)"},children:[(0,o.jsx)("span",{style:{width:7,height:7,borderRadius:"50%",background:e.configured?"var(--status-success)":"var(--border)",display:"inline-block"}}),(0,o.jsx)("span",{style:{fontSize:"var(--text-sm)",color:e.configured?"var(--status-success)":"var(--text-dim)"},children:r(e.configured?"modelsConfig.configured":"modelsConfig.notConfigured")})]})]}),(0,o.jsx)("p",{style:{margin:0,fontSize:"var(--text-md)",color:"var(--text-muted)",lineHeight:1.5},children:e.configured?t("modelsConfig.providerConfigured",e.modelCount,{name:e.displayName}):r("modelsConfig.providerNotConfigured",{name:e.displayName})}),(0,o.jsx)("p",{style:{margin:0,fontSize:"var(--text-sm)",color:"var(--text-dim)",lineHeight:1.5},children:(0,o.jsx)(ep,{text:r("modelsConfig.apiKeyManageHint")})})]})}function ez({id:e,size:r}){let t=ei[e];if(!t){let t=e.split(/[-_]/).filter(Boolean).slice(0,2).map(e=>e[0]).join("").toUpperCase()||"?";return(0,o.jsx)("span",{"aria-hidden":"true",style:{width:r,height:r,border:"1px solid var(--border)",borderRadius:4,color:"var(--text-dim)",display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0,fontSize:Math.max(8,Math.floor(.42*r)),fontWeight:700,lineHeight:1},children:t})}return t.hasColor?(0,o.jsx)(t.Icon,{size:r}):(0,o.jsx)(t.Icon,{size:r,style:{color:"var(--text-muted)"}})}function eI({oauthProviders:e,apiKeyProviders:r,onSelectOAuth:t,onSelectApiKey:i,onAddCustom:s,onClose:l}){let{t:d,tn:c}=(0,a.s9)(),[x,u]=(0,n.useState)(""),g=(0,n.useRef)(null),v=x.trim().toLowerCase(),h=e.filter(e=>!e.loggedIn&&(!v||e.name.toLowerCase().includes(v))),m=r.filter(e=>!e.configured&&(!v||e.displayName.toLowerCase().includes(v)||e.id.toLowerCase().includes(v))),f=!v||"custom".includes(v)||"openai-compatible".includes(v)||"anthropic-compatible".includes(v),y=h.length+m.length+ +!!f,b={display:"flex",flexDirection:"row",alignItems:"center",gap:"var(--space-4)",padding:"10px 12px",background:"var(--bg-panel)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",boxSizing:"border-box",cursor:"pointer",minWidth:0,textAlign:"left",transition:"border-color var(--dur-fast) var(--ease-out-warm), background var(--dur-fast) var(--ease-out-warm)",width:"100%"};return(0,o.jsx)(p.lG,{open:!0,onOpenChange:e=>{e||l()},children:(0,o.jsxs)(p.Cf,{ariaLabel:d("modelsConfig.addProvider"),style:{width:820,maxWidth:"min(92vw, 820px)",maxHeight:"min(72dvh, calc(100dvh - 32px))",padding:0,display:"flex",flexDirection:"column",overflow:"hidden"},children:[(0,o.jsx)(p.L3,{style:{margin:"14px 18px 8px",fontSize:18},children:d("modelsConfig.addProvider")}),(0,o.jsx)("div",{style:{padding:"8px 14px 12px",flexShrink:0},children:(0,o.jsx)("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-4)",padding:"6px 10px",background:"var(--bg)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)"},children:(0,o.jsx)("input",{ref:g,value:x,onChange:e=>u(e.target.value),placeholder:d("modelsConfig.searchProviders"),style:{flex:1,background:"none",border:"none",outline:"none",color:"var(--text)",fontSize:"var(--text-base)",boxSizing:"border-box",minWidth:0}})})}),(0,o.jsx)("div",{style:{flex:1,overflowY:"auto",padding:"4px 14px 14px"},children:0===y?(0,o.jsx)("div",{style:{padding:"20px 0",fontSize:"var(--text-md)",color:"var(--text-dim)",textAlign:"center"},children:d("modelsConfig.noProvidersMatch")}):(0,o.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(min(240px, 100%), 1fr))",gap:"var(--space-4)"},children:[f&&(0,o.jsx)("div",{style:{gridColumn:"1 / -1",fontSize:"var(--text-xs)",fontWeight:600,color:"var(--text-dim)",textTransform:"uppercase",letterSpacing:"0.07em"},children:d("modelsConfig.customSection")}),f&&(0,o.jsxs)("button",{type:"button",onClick:()=>{s(),l()},style:b,onMouseEnter:e=>{e.currentTarget.style.borderColor="var(--accent)",e.currentTarget.style.background="var(--bg-hover)"},onMouseLeave:e=>{e.currentTarget.style.borderColor="var(--border)",e.currentTarget.style.background="var(--bg-panel)"},children:[(0,o.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,o.jsx)("div",{style:{fontSize:"var(--text-md)",fontWeight:600,color:"var(--text)",lineHeight:1.3,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:d("modelsConfig.openaiAnthropicCompatible")}),(0,o.jsx)("div",{style:{fontSize:"var(--text-xs)",color:"var(--text-dim)",marginTop:2},children:d("modelsConfig.customEndpointFormat")})]}),(0,o.jsx)("span",{style:{width:26,height:26,borderRadius:"var(--radius-control)",background:"var(--bg-hover)",border:"1px dashed var(--border)",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:(0,o.jsx)(C.A,{size:13,"aria-hidden":"true"})})]}),h.length>0&&(0,o.jsx)("div",{style:{gridColumn:"1 / -1",paddingTop:6*!!f,fontSize:"var(--text-xs)",fontWeight:600,color:"var(--text-dim)",textTransform:"uppercase",letterSpacing:"0.07em"},children:d("modelsConfig.subscriptions")}),h.map(e=>(0,o.jsxs)("button",{type:"button",onClick:()=>{t(e.id),l()},style:b,onMouseEnter:e=>{e.currentTarget.style.borderColor="var(--accent)",e.currentTarget.style.background="var(--bg-hover)"},onMouseLeave:e=>{e.currentTarget.style.borderColor="var(--border)",e.currentTarget.style.background="var(--bg-panel)"},children:[(0,o.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,o.jsx)("div",{style:{fontSize:"var(--text-md)",fontWeight:600,color:"var(--text)",lineHeight:1.3,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.name}),(0,o.jsx)("div",{style:{fontSize:"var(--text-xs)",color:"var(--text-dim)",marginTop:2},children:"OAuth"})]}),(0,o.jsx)(ez,{id:e.id,size:28})]},e.id)),m.length>0&&(0,o.jsx)("div",{style:{gridColumn:"1 / -1",paddingTop:6*(h.length>0),fontSize:"var(--text-xs)",fontWeight:600,color:"var(--text-dim)",textTransform:"uppercase",letterSpacing:"0.07em"},children:d("modelsConfig.apiKey")}),m.map(e=>(0,o.jsxs)("button",{type:"button",onClick:()=>{i(e.id),l()},style:b,onMouseEnter:e=>{e.currentTarget.style.borderColor="var(--accent)",e.currentTarget.style.background="var(--bg-hover)"},onMouseLeave:e=>{e.currentTarget.style.borderColor="var(--border)",e.currentTarget.style.background="var(--bg-panel)"},children:[(0,o.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,o.jsx)("div",{style:{fontSize:"var(--text-md)",fontWeight:600,color:"var(--text)",lineHeight:1.3,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.displayName}),(0,o.jsx)("div",{style:{fontSize:"var(--text-xs)",color:"var(--text-dim)",marginTop:2},children:c("modelsConfig.modelCount",e.modelCount)})]}),(0,o.jsx)(ez,{id:e.id,size:28})]},e.id))]})})]})})}function eT(e){return Array.isArray(e)?`[${e.map(eT).join(",")}]`:e&&"object"==typeof e?`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${eT(e[r])}`).join(",")}}`:JSON.stringify(e)??"undefined"}function eR({onSaved:e,onDirtyChange:r}){let{t}=(0,a.s9)(),s=(0,i.a)(),[p,x]=(0,n.useState)({providers:{}}),u=(0,n.useRef)(p),g=(0,n.useCallback)(e=>{let r=u.current,t="function"==typeof e?e(r):e;t!==r&&(u.current=t,x(t))},[]),v=(0,n.useRef)(eT({providers:{}})),[h,m]=(0,n.useState)(!0),[f,b]=(0,n.useState)(!1),[j,I]=(0,n.useState)(null),[R,A]=(0,n.useState)([]),[M,O]=(0,n.useState)(!1),[P,$]=(0,n.useState)(null),[W,E]=(0,n.useState)([]),[N,L]=(0,n.useState)([]),[U,D]=(0,n.useState)([]),[H,F]=(0,n.useState)([]),[K,B]=(0,n.useState)(!0),[_,J]=(0,n.useState)(null),[q,Y]=(0,n.useState)(!1),[V,X]=(0,n.useState)(null),[Z,G]=(0,n.useState)(null),Q=(0,n.useCallback)(()=>{fetch("/api/auth/providers").then(e=>e.json()).then(e=>{Array.isArray(e.providers)&&E(e.providers)}).catch(()=>{})},[]),ee=(0,n.useCallback)(()=>{fetch("/api/auth/all-providers").then(e=>e.json()).then(e=>{Array.isArray(e.providers)&&L(e.providers)}).catch(()=>{})},[]),er=(0,n.useCallback)(async e=>{B(!0);try{e?.force&&(0,c.dU)();let r=await (0,c.aQ)("",{force:e?.force});D(r.modelList??[]),F(r.connectedProviders??[])}catch{}finally{B(!1)}},[]),et=(0,n.useCallback)(async(e=eT(u.current))=>{m(!0);try{let r=await fetch("/api/models-config"),t=await r.json();if(eT(u.current)!==e)return;if(t.parseError){G({message:t.parseError,path:t.path}),g({providers:{}}),$(null);return}if(!r.ok)throw Error(`HTTP ${r.status}`);G(null),I(null),A([]);let o=t.providers?t:{...t,providers:{}};v.current=eT(o),g(o);let n=Object.keys(o.providers??{});n.length>0?$({type:"provider",name:n[0]}):$(null)}catch{}finally{m(!1)}},[g]);(0,n.useEffect)(()=>{et(),Q(),ee(),er()},[et,Q,ee,er]),(0,n.useEffect)(()=>{r?.(v.current!==eT(p))},[p,r]),(0,n.useEffect)(()=>{try{let e=JSON.parse(localStorage.getItem(es)??"null");Array.isArray(e)&&J(new Set(e.filter(e=>"string"==typeof e)))}catch{}},[]);let eo=(0,n.useCallback)((e,r)=>{J(t=>{let o=new Set(t??U.map(e=>`${e.provider}:${e.id}`)),n=`${e.provider}:${e.id}`;return r?o.add(n):o.delete(n),localStorage.setItem(es,JSON.stringify([...o])),window.dispatchEvent(new Event("omp-composer-models-change")),o})},[U]),en=(0,n.useCallback)((e,r)=>{J(t=>{let o=new Set(t??U.map(e=>`${e.provider}:${e.id}`));for(let t of U){if(t.provider!==e)continue;let n=`${t.provider}:${t.id}`;r?o.add(n):o.delete(n)}return localStorage.setItem(es,JSON.stringify([...o])),window.dispatchEvent(new Event("omp-composer-models-change")),o})},[U]),ei=(0,n.useCallback)(async e=>{let r=await fetch("/api/providers/enable",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:e})}),t=await r.json();if(!r.ok||t.error)throw Error(t.error||`HTTP ${r.status}`);await er({force:!0})},[er]),el=(0,n.useCallback)(()=>{let e="new-provider",r=1;for(;p.providers?.[e];)e=`new-provider-${r++}`;g(r=>({...r,providers:{...r.providers??{},[e]:{api:"openai-completions"}}})),$({type:"provider",name:e})},[p.providers,g]),ec=(0,n.useCallback)((e,r)=>{g(t=>({...t,providers:{...t.providers??{},[e]:r}}))},[g]),ep=(0,n.useCallback)((e,r)=>{g(t=>{let o=Object.entries(t.providers??{}),n=o.findIndex(([r])=>r===e);return -1===n?t:(o[n]=[r,o[n][1]],{...t,providers:Object.fromEntries(o)})}),$(t=>t?"provider"===t.type&&t.name===e?{type:"provider",name:r}:"model"===t.type&&t.providerName===e?{...t,providerName:r}:t:t)},[g]),eh=(0,n.useCallback)(e=>{g(r=>{let t={...r.providers??{}};return delete t[e],{...r,providers:t}}),g(e=>{let r=Object.keys(e.providers??{});return $(r.length>0?{type:"provider",name:r[0]}:null),e})},[g]),em=(0,n.useCallback)(e=>{g(r=>{let t=r.providers?.[e]??{},o=[...t.models??[],{id:""}];return{...r,providers:{...r.providers??{},[e]:{...t,models:o}}}}),g(r=>{let t=(r.providers?.[e]?.models?.length??1)-1;return $({type:"model",providerName:e,index:t}),r})},[g]),ey=(0,n.useCallback)((e,r,t)=>{let o,n=(o={...r,id:r.id,...void 0!==r.cost?{cost:{...r.cost}}:{}},delete o.originalId,o);g(r=>{let o=r.providers?.[e]??{},i=[...o.models??[],n],a={...o,models:i};return t&&!o.baseUrl&&(a.baseUrl=t),{...r,providers:{...r.providers??{},[e]:a}}}),g(r=>{let t=(r.providers?.[e]?.models?.length??1)-1;return $({type:"model",providerName:e,index:t}),r}),X(null)},[g]),eb=(0,n.useCallback)((e,r,t)=>{g(o=>{let n=o.providers?.[e]??{},i=[...n.models??[]];return i[r]=t,{...o,providers:{...o.providers??{},[e]:{...n,models:i}}}})},[g]),ej=(0,n.useCallback)((e,r)=>{g(t=>{let o=t.providers?.[e]??{},n=[...o.models??[]];return n.splice(r,1),{...t,providers:{...t.providers??{},[e]:{...o,models:n.length?n:void 0}}}}),$({type:"provider",name:e})},[g]),eC=(0,n.useCallback)(async()=>{if(Z)return;let o=u.current,n=function(e){if(!e.providers)return e;let r=!1,t={};for(let[o,n]of Object.entries(e.providers)){let e=n.models;if(!e?.some(l)){t[o]=n;continue}r=!0;let i=e.filter(e=>!l(e));t[o]={...n,models:i.length>0?i:void 0}}return r?{...e,providers:t}:e}(o),i=eT(o),a=eT(n);b(!0),I(null),A([]),O(!1);try{let o=await fetch("/api/models-config?mode=full",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)}),s=await o.json();if(!o.ok||s.error){let e=Array.isArray(s.issues)?s.issues.filter(e=>"string"==typeof e.path&&"string"==typeof e.message):[],r=e.map(e=>e.path?`${e.path}: ${e.message}`:e.message).join("; ");A(e);let n=s.error||s.code?(0,d.K)(s):`HTTP ${o.status}`;I(n),z.oR.error(t("modelsConfig.saveErrorTitle"),r?`${n}: ${r}`:n),"models_config_unparseable"===s.code&&G({message:s.error??(0,d.K)(s)})}else{v.current=a;let o=eT(u.current)!==i;o&&r?.(!0),o||(g(n),r?.(!1),await et(a)),await er({force:!0}),ee(),e?.(),o&&r?.(!0),O(!0),setTimeout(()=>O(!1),2e3),z.oR.success(t("modelsConfig.saveSuccessTitle"))}}catch(r){let e=r instanceof Error?r.message:String(r);I(e),z.oR.error(t("modelsConfig.saveErrorTitle"),e)}finally{b(!1)}},[ee,et,er,r,e,Z,g,t]),eA=Object.entries(p.providers??{}),eM=W.filter(e=>e.loggedIn),eO=N.filter(e=>e.configured),eP=U.reduce((e,r)=>((e[r.provider]??=[]).push(r),e),{}),e$=(()=>{if(!P)return null;if("oauth"===P.type){let e=W.find(e=>e.id===P.providerId);return e?(0,o.jsx)(eS,{provider:e,onRefresh:()=>{Q(),ee(),er({force:!0})}},e.id):null}if("apikey"===P.type){let e=N.find(e=>e.id===P.providerId);return e?(0,o.jsx)(ew,{provider:e},e.id):null}if("roles"===P.type)return(0,o.jsx)(ed,{models:U});if("registry"===P.type)return(0,o.jsx)(ea,{models:U,connectedProviders:H,onChanged:()=>er({force:!0})});if("picker"===P.type)return(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:14},children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:"var(--space-5)"},children:[(0,o.jsxs)("div",{children:[(0,o.jsx)(ex,{children:"Composer Model Picker"}),(0,o.jsx)("p",{style:{margin:"4px 0 0",color:"var(--text-muted)",fontSize:"var(--text-md)",lineHeight:1.5},children:"Choose which native OMP models are available in the composer. This changes only omp-web's picker, not OMP's model registry."})]}),(0,o.jsx)("button",{type:"button",onClick:()=>void er({force:!0}),disabled:K,title:"Refresh OMP runtime models",style:{padding:7,border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"transparent",color:"var(--text-muted)",cursor:K?"wait":"pointer"},children:(0,o.jsx)(y.A,{size:14,"aria-hidden":"true"})})]}),K?(0,o.jsx)("div",{style:{color:"var(--text-muted)",fontSize:"var(--text-md)"},children:"Loading OMP runtime models..."}):Object.entries(eP).map(([e,r])=>{let t=r.every(e=>null===_||_.has(`${e.provider}:${e.id}`)),n=r.some(e=>null===_||_.has(`${e.provider}:${e.id}`));return(0,o.jsxs)("section",{style:{border:"1px solid var(--border)",borderRadius:"var(--radius-card)",overflow:"hidden"},children:[(0,o.jsxs)("label",{style:{display:"flex",alignItems:"center",gap:"var(--space-4)",padding:"9px 11px",background:"var(--bg-panel)",color:"var(--text)",fontSize:"var(--text-md)",fontWeight:600},children:[(0,o.jsx)("input",{type:"checkbox",checked:t,ref:e=>{e&&(e.indeterminate=n&&!t)},onChange:r=>en(e,r.target.checked),"aria-label":`Show all ${e} models in composer`}),(0,o.jsx)(ez,{id:e,size:15}),(0,o.jsx)("span",{children:e}),(0,o.jsxs)("span",{style:{marginLeft:"auto",color:"var(--text-dim)",fontSize:"var(--text-sm)",fontWeight:400},children:[r.length," model",1===r.length?"":"s"]})]}),(0,o.jsx)("div",{style:{padding:"4px 0"},children:r.map(e=>(0,o.jsxs)("label",{style:{display:"flex",alignItems:"center",gap:9,padding:"7px 11px",color:"var(--text-muted)",cursor:"pointer"},children:[(0,o.jsx)("input",{type:"checkbox",checked:null===_||_.has(`${e.provider}:${e.id}`),onChange:r=>eo(e,r.target.checked),"aria-label":`Show ${e.provider}/${e.id} in composer`}),(0,o.jsx)("span",{style:{minWidth:0,flex:1,fontSize:"var(--text-md)"},children:e.name||e.id}),(0,o.jsxs)("code",{style:{color:"var(--text-dim)",fontSize:"var(--text-sm)",fontFamily:"var(--font-mono)",whiteSpace:"nowrap"},children:[e.provider,"/",e.id]})]},`${e.provider}:${e.id}`))})]},e)}),!K&&0===U.length&&(0,o.jsx)("div",{style:{color:"var(--text-muted)",fontSize:"var(--text-md)"},children:"OMP did not report any configured models."}),H.filter(e=>!eP[e.id]).map(e=>(0,o.jsxs)("section",{style:{border:"1px solid var(--border)",borderRadius:"var(--radius-card)",padding:12},children:[(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-4)",color:"var(--text)",fontSize:"var(--text-md)",fontWeight:600},children:[(0,o.jsx)(ez,{id:e.id,size:15}),e.name]}),(0,o.jsx)("p",{style:{margin:"6px 0 0",color:"var(--text-muted)",fontSize:"var(--text-md)",lineHeight:1.5},children:e.disabled?"Connected, but disabled in OMP. Enable it to discover its models.":"Connected, but OMP has not reported models for this provider yet."}),e.disabled&&(0,o.jsx)("button",{type:"button",onClick:()=>void ei(e.id).catch(e=>z.oR.error("Could not enable provider",e instanceof Error?e.message:String(e))),style:{marginTop:8,padding:"6px 10px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"transparent",color:"var(--text)",cursor:"pointer",fontSize:"var(--text-md)"},children:"Enable in OMP"})]},e.id))]});if("provider"===P.type){let e=p.providers?.[P.name];return e?(0,o.jsx)(ef,{name:P.name,provider:e,onChange:e=>ec(P.name,e),onRename:e=>ep(P.name,e),onDelete:()=>eh(P.name)},P.name):null}let e=p.providers?.[P.providerName],r=e?.models?.[P.index];return r?(0,o.jsx)(ek,{providerName:P.providerName,provider:e,model:r,onChange:e=>eb(P.providerName,P.index,e),onDelete:()=>ej(P.providerName,P.index)},`${P.providerName}-${P.index}`):null})();return(0,o.jsxs)(o.Fragment,{children:[Z?(0,o.jsxs)("div",{style:{flex:1,overflowY:"auto",padding:"var(--space-8)",display:"flex",flexDirection:"column",gap:"var(--space-5)"},children:[(0,o.jsx)("div",{style:{fontSize:"var(--text-base)",fontWeight:600,color:"var(--status-error)"},children:t("modelsConfig.parseErrorTitle")}),(0,o.jsx)("div",{style:{fontSize:"var(--text-md)",color:"var(--text-muted)",lineHeight:1.6},children:t("modelsConfig.parseErrorBody")}),Z.path&&(0,o.jsx)("code",{style:{fontSize:"var(--text-sm)",color:"var(--text-dim)",fontFamily:"var(--font-mono)",wordBreak:"break-all"},children:Z.path}),(0,o.jsx)("pre",{style:{margin:0,padding:"10px 12px",background:"var(--bg-panel)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",color:"var(--text-muted)",fontSize:"var(--text-sm)",fontFamily:"var(--font-mono)",whiteSpace:"pre-wrap",wordBreak:"break-word",overflowX:"auto"},children:Z.message}),(0,o.jsx)("button",{onClick:()=>{et()},disabled:h,style:{alignSelf:"flex-start",padding:"5px 12px",background:"none",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",color:"var(--text-muted)",cursor:h?"default":"pointer",fontSize:"var(--text-md)"},children:h?t("modelsConfig.loading"):t("modelsConfig.reload")})]}):(0,o.jsxs)("div",{style:{flex:1,display:"flex",flexDirection:s?"column":"row",overflow:"hidden"},children:[(0,o.jsxs)("div",{style:{width:s?"100%":235,maxHeight:s?"40vh":void 0,borderRight:s?"none":"1px solid var(--border)",borderBottom:s?"1px solid var(--border)":"none",display:"flex",flexDirection:"column",flexShrink:0,background:"var(--bg-panel)"},children:[(0,o.jsxs)("div",{style:{flex:1,overflowY:"auto",padding:"8px 6px"},children:[(0,o.jsx)(eu,{icon:k.A,label:"Native OMP registry",selected:P?.type==="registry",onClick:()=>$({type:"registry"})}),(0,o.jsx)(eu,{icon:S.A,label:"Composer model picker",selected:P?.type==="picker",onClick:()=>$({type:"picker"})}),(0,o.jsx)(eu,{icon:w.A,label:"OMP model roles",selected:P?.type==="roles",onClick:()=>$({type:"roles"})}),(eM.length>0||eO.length>0)&&(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-3)",padding:"14px 10px 6px",color:"var(--text-dim)",fontSize:"var(--text-xs)",fontWeight:700,letterSpacing:"0.06em",textTransform:"uppercase"},children:[(0,o.jsx)("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:"50%",background:"var(--accent)",flexShrink:0}}),"Connected through OMP"]}),eM.map(e=>{let r=P?.type==="oauth"&&P.providerId===e.id;return(0,o.jsxs)("button",{type:"button",onClick:()=>$({type:"oauth",providerId:e.id}),style:{display:"flex",alignItems:"center",gap:"var(--space-4)",padding:"7px 10px",borderRadius:"var(--radius-control)",cursor:"pointer",width:"100%",border:"none",textAlign:"left",fontFamily:"inherit",background:r?"var(--bg-selected)":"none",fontWeight:r?600:400},...eg(r),children:[(0,o.jsx)(ez,{id:e.id,size:16}),(0,o.jsx)("span",{style:{fontSize:"var(--text-md)",color:"var(--text)",flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.name}),(0,o.jsx)("span",{title:`OMP OAuth provider: ${e.id}`,style:{padding:"2px 5px",borderRadius:4,background:"var(--bg-subtle)",color:"var(--text-muted)",fontSize:9,fontWeight:500,flexShrink:0},children:"OAuth"})]},e.id)}),eO.map(e=>{let r=P?.type==="apikey"&&P.providerId===e.id;return(0,o.jsxs)("button",{type:"button",onClick:()=>$({type:"apikey",providerId:e.id}),style:{display:"flex",alignItems:"center",gap:"var(--space-4)",padding:"7px 10px",borderRadius:"var(--radius-control)",cursor:"pointer",width:"100%",border:"none",textAlign:"left",fontFamily:"inherit",background:r?"var(--bg-selected)":"none",fontWeight:r?600:400},...eg(r),children:[(0,o.jsx)(ez,{id:e.id,size:16}),(0,o.jsx)("span",{style:{fontSize:"var(--text-md)",color:"var(--text)",flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.displayName}),(0,o.jsx)("span",{title:`OMP API-key provider: ${e.id}`,style:{padding:"2px 5px",borderRadius:4,background:"var(--bg-subtle)",color:"var(--text-muted)",fontSize:9,fontWeight:500,flexShrink:0},children:"API key"})]},e.id)}),(eM.length>0||eO.length>0)&&eA.length>0&&(0,o.jsx)("div",{style:{margin:"8px 10px",borderTop:"1px solid var(--border)"}}),eA.length>0&&(0,o.jsx)("div",{style:{padding:"10px 10px 4px",fontSize:"var(--text-xs)",fontWeight:700,color:"var(--text-dim)",textTransform:"uppercase",letterSpacing:"0.06em"},children:"Configured Providers"}),h?(0,o.jsx)("div",{style:{padding:"10px 8px",fontSize:"var(--text-md)",color:"var(--text-muted)"},children:t("modelsConfig.loading")}):eA.map(([e,r])=>{let n=P?.type==="provider"&&P.name===e,i=r.models??[];return(0,o.jsxs)("div",{style:{marginBottom:6,padding:"4px 6px",borderRadius:"var(--radius-control)",background:n?"var(--bg-panel)":"transparent",border:n?"1px solid var(--border)":"1px solid transparent"},children:[(0,o.jsxs)("button",{type:"button",onClick:()=>$({type:"provider",name:e}),style:{display:"flex",alignItems:"center",gap:7,padding:"6px 8px",borderRadius:"var(--radius-control)",cursor:"pointer",width:"100%",border:"none",textAlign:"left",fontFamily:"inherit",background:n?"var(--bg-selected)":"none"},...eg(n),children:[(0,o.jsx)(ez,{id:e,size:15}),(0,o.jsx)("span",{style:{fontSize:"var(--text-md)",fontWeight:n?600:500,color:"var(--text)",fontFamily:"var(--font-mono)",flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e}),(0,o.jsxs)("span",{style:{fontSize:"var(--text-xs)",color:"var(--text-dim)",padding:"1px 5px",borderRadius:4,background:"var(--bg-subtle)"},children:[i.length," model",1===i.length?"":"s"]})]}),i.map((r,n)=>{let i=P?.type==="model"&&P.providerName===e&&P.index===n;return(0,o.jsxs)("button",{type:"button",onClick:()=>$({type:"model",providerName:e,index:n}),style:{display:"flex",alignItems:"center",gap:"var(--space-3)",padding:"5px 8px 5px 28px",borderRadius:"var(--radius-control)",cursor:"pointer",width:"100%",border:"none",textAlign:"left",fontFamily:"inherit",background:i?"var(--bg-selected)":"none",marginTop:1},...eg(i),children:[(0,o.jsx)("span",{style:{fontSize:"var(--text-sm)",fontFamily:"var(--font-mono)",color:r.id?"var(--text-muted)":"var(--text-dim)",flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:r.id||t("modelsConfig.newModel")}),r.reasoning&&(0,o.jsx)("span",{style:{fontSize:9,padding:"1px 4px",background:"var(--accent-subtle)",color:"var(--accent)",borderRadius:3,flexShrink:0},children:"T"})]},n)}),(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"var(--space-3)",padding:"6px 8px 4px 10px",marginTop:2,flexWrap:"nowrap"},children:[(0,o.jsxs)("button",{type:"button",onClick:r=>{r.stopPropagation(),em(e)},style:{display:"inline-flex",alignItems:"center",gap:"var(--space-2)",padding:"3px 8px",borderRadius:"var(--radius-control)",cursor:"pointer",color:"var(--text-muted)",border:"1px solid var(--border)",background:"var(--bg-subtle)",fontFamily:"inherit",fontSize:"var(--text-sm)",whiteSpace:"nowrap",flexShrink:0},...ev,children:[(0,o.jsx)(C.A,{size:11,"aria-hidden":"true"}),(0,o.jsx)("span",{children:t("modelsConfig.addModel")})]}),(0,o.jsxs)("button",{type:"button",onClick:r=>{r.stopPropagation(),X(e)},style:{display:"inline-flex",alignItems:"center",gap:"var(--space-2)",padding:"3px 8px",borderRadius:"var(--radius-control)",cursor:"pointer",color:"var(--text-muted)",border:"1px solid var(--border)",background:"var(--bg-subtle)",fontFamily:"inherit",fontSize:"var(--text-sm)",whiteSpace:"nowrap",flexShrink:0},...ev,children:[(0,o.jsx)(S.A,{size:11,"aria-hidden":"true"}),(0,o.jsx)("span",{children:t("modelsConfig.addFromCatalog")})]})]})]},e)})]}),(0,o.jsx)("div",{style:{borderTop:"1px solid var(--border)",padding:"8px 6px"},children:(0,o.jsx)("button",{onClick:()=>Y(!0),style:{display:"flex",alignItems:"center",justifyContent:"center",gap:5,width:"100%",padding:"6px 0",background:"none",border:"1px dashed var(--border)",borderRadius:"var(--radius-control)",color:"var(--text-muted)",cursor:"pointer",fontSize:"var(--text-md)"},onMouseEnter:e=>{e.currentTarget.style.borderColor="var(--accent)",e.currentTarget.style.color="var(--accent)"},onMouseLeave:e=>{e.currentTarget.style.borderColor="var(--border)",e.currentTarget.style.color="var(--text-muted)"},children:t("modelsConfig.addProvider")})})]}),(0,o.jsx)("div",{style:{flex:1,overflowY:"auto",padding:20},children:h?(0,o.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:10},children:[(0,o.jsx)("div",{className:"skeleton",style:{height:18,width:"40%"}}),(0,o.jsx)("div",{className:"skeleton",style:{height:12,width:"70%"}}),(0,o.jsx)("div",{className:"skeleton",style:{height:12,width:"55%"}}),(0,o.jsx)("div",{className:"skeleton",style:{height:90,width:"100%"}})]}):e$??(0,o.jsx)("div",{style:{height:"100%",display:"flex",alignItems:"center",justifyContent:"center",color:"var(--text-dim)",fontSize:"var(--text-base)"},children:t("modelsConfig.selectProviderOrModel")})})]}),(0,o.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"flex-end",gap:10,padding:"10px 18px",borderTop:"1px solid var(--border)",flexShrink:0},children:[(j||R.length>0)&&(0,o.jsxs)("div",{role:"alert",style:{fontSize:"var(--text-md)",color:"var(--status-error)",flex:1,minWidth:0},children:[j,R.length>0&&(0,o.jsx)("ul",{style:{margin:"4px 0 0",paddingLeft:18},children:R.map((e,r)=>(0,o.jsxs)("li",{children:[e.path?`${e.path}: `:"",e.message]},`${e.path}-${r}`))})]}),(0,o.jsxs)("button",{onClick:eC,disabled:f||M||null!==Z,style:{position:"relative",padding:"6px 16px",minWidth:92,background:M?"var(--status-success)":f||Z?"var(--bg-panel)":"var(--accent)",border:"none",borderRadius:"var(--radius-control)",color:M?"var(--on-accent)":f||Z?"var(--text-muted)":"var(--on-accent)",cursor:f||M||Z?"default":"pointer",fontSize:"var(--text-base)",fontWeight:600,display:"inline-flex",alignItems:"center",justifyContent:"center",gap:"var(--space-3)",transition:"background-color var(--dur-med) var(--ease-out-warm), color var(--dur-med) var(--ease-out-warm)",animation:M?"saved-pop var(--dur-theme) var(--ease-out-warm)":void 0},children:[M&&(0,o.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",style:{strokeDasharray:18,animation:"saved-check-draw 0.35s ease forwards",flexShrink:0},children:(0,o.jsx)("polyline",{points:"20 6 9 17 4 12"})}),(0,o.jsx)("span",{children:M?t("modelsConfig.saved"):f?t("modelsConfig.saving"):t("modelsConfig.save")})]})]}),q&&(0,o.jsx)(eI,{oauthProviders:W,apiKeyProviders:N,onSelectOAuth:e=>$({type:"oauth",providerId:e}),onSelectApiKey:e=>$({type:"apikey",providerId:e}),onAddCustom:el,onClose:()=>Y(!1)}),null!==V&&(0,o.jsx)(T,{open:!0,providerName:V,providerBaseUrl:p.providers?.[V]?.baseUrl??"",existingIds:new Set((p.providers?.[V]?.models??[]).map(e=>e.id)),onAdd:(e,r)=>ey(V,e,r),onClose:()=>X(null)})]})}}}]);