ompgui 0.7.4 → 0.7.5

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 (77) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +4 -4
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/react-loadable-manifest.json +1 -1
  6. package/.next/required-server-files.js +2 -2
  7. package/.next/required-server-files.json +2 -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 +2 -2
  17. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  18. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  19. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  20. package/.next/server/app/api/app-update/route.js +1 -1
  21. package/.next/server/app/api/auth/all-providers/route.js +1 -1
  22. package/.next/server/app/api/auth/all-providers/route.js.nft.json +1 -1
  23. package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
  24. package/.next/server/app/api/auth/login/[provider]/route.js +1 -1
  25. package/.next/server/app/api/auth/providers/route.js +1 -1
  26. package/.next/server/app/api/models/route.js +1 -1
  27. package/.next/server/app/api/models-config/connectivity/route.js +1 -1
  28. package/.next/server/app/api/models-config/connectivity/route.js.nft.json +1 -1
  29. package/.next/server/app/api/models-config/route.js +1 -1
  30. package/.next/server/app/api/models-config/route.js.nft.json +1 -1
  31. package/.next/server/app/api/models-config/test/route.js +1 -1
  32. package/.next/server/app/api/models-config/test/route.js.nft.json +1 -1
  33. package/.next/server/app/api/omp-settings/route.js +1 -1
  34. package/.next/server/app/api/providers/enable/route.js +1 -1
  35. package/.next/server/app/index.html +1 -1
  36. package/.next/server/app/index.rsc +3 -3
  37. package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  38. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  39. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  40. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  41. package/.next/server/app/login.html +1 -1
  42. package/.next/server/app/login.rsc +2 -2
  43. package/.next/server/app/login.segments/_full.segment.rsc +2 -2
  44. package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  45. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  46. package/.next/server/app/page.js +1 -1
  47. package/.next/server/app/page_client-reference-manifest.js +1 -1
  48. package/.next/server/app/pair/page_client-reference-manifest.js +1 -1
  49. package/.next/server/app/pair.html +1 -1
  50. package/.next/server/app/pair.rsc +3 -3
  51. package/.next/server/app/pair.segments/_full.segment.rsc +3 -3
  52. package/.next/server/app/pair.segments/_tree.segment.rsc +1 -1
  53. package/.next/server/app/pair.segments/pair/__PAGE__.segment.rsc +3 -3
  54. package/.next/server/app-paths-manifest.json +4 -4
  55. package/.next/server/chunks/244.js +1 -0
  56. package/.next/server/chunks/2676.js +1 -1
  57. package/.next/server/chunks/6480.js +1 -1
  58. package/.next/server/chunks/7226.js +9 -9
  59. package/.next/server/chunks/933.js +1 -1
  60. package/.next/server/middleware-build-manifest.js +1 -1
  61. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  62. package/.next/server/pages/404.html +1 -1
  63. package/.next/server/pages/500.html +1 -1
  64. package/.next/server/server-reference-manifest.json +1 -1
  65. package/.next/static/chunks/4315-f0bee51727fa8bed.js +1 -0
  66. package/.next/static/chunks/{4318.65827559038c9692.js → 4318.9c215a4cb05a3069.js} +3 -3
  67. package/.next/static/chunks/app/{page-bca40f639be6becb.js → page-e7eb05ca875bdff3.js} +1 -1
  68. package/.next/static/chunks/{webpack-b14269412e91a71d.js → webpack-6731a6d88b6564cc.js} +1 -1
  69. package/README.ja.md +1 -1
  70. package/README.ko.md +5 -4
  71. package/README.md +5 -4
  72. package/README.zh-CN.md +1 -1
  73. package/package.json +1 -1
  74. package/.next/server/chunks/1448.js +0 -1
  75. package/.next/static/chunks/4315-dfe6a33b10f1a366.js +0 -1
  76. /package/.next/static/{d7tCWD5FStyLazqHgLBLG → PqMs7GKEACvEL4dphX3Ma}/_buildManifest.js +0 -0
  77. /package/.next/static/{d7tCWD5FStyLazqHgLBLG → PqMs7GKEACvEL4dphX3Ma}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- (()=>{"use strict";var e,t,a,c,r,d,f,o,b,n={},i={};function l(e){var t=i[e];if(void 0!==t)return t.exports;var a=i[e]={exports:{}},c=!0;try{n[e].call(a.exports,a,a.exports,l),c=!1}finally{c&&delete i[e]}return a.exports}l.m=n,e=[],l.O=(t,a,c,r)=>{if(a){r=r||0;for(var d=e.length;d>0&&e[d-1][2]>r;d--)e[d]=e[d-1];e[d]=[a,c,r];return}for(var f=1/0,d=0;d<e.length;d++){for(var[a,c,r]=e[d],o=!0,b=0;b<a.length;b++)(!1&r||f>=r)&&Object.keys(l.O).every(e=>l.O[e](a[b]))?a.splice(b--,1):(o=!1,r<f&&(f=r));if(o){e.splice(d--,1);var n=c();void 0!==n&&(t=n)}}return t},l.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return l.d(t,{a:t}),t},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,l.t=function(e,c){if(1&c&&(e=this(e)),8&c||"object"==typeof e&&e&&(4&c&&e.__esModule||16&c&&"function"==typeof e.then))return e;var r=Object.create(null);l.r(r);var d={};t=t||[null,a({}),a([]),a(a)];for(var f=2&c&&e;"object"==typeof f&&!~t.indexOf(f);f=a(f))Object.getOwnPropertyNames(f).forEach(t=>d[t]=()=>e[t]);return d.default=()=>e,l.d(r,d),r},l.d=(e,t)=>{for(var a in t)l.o(t,a)&&!l.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},l.f={},l.e=e=>Promise.all(Object.keys(l.f).reduce((t,a)=>(l.f[a](e,t),t),[])),l.u=e=>4906===e?"static/chunks/4906-1472d0151646b3d8.js":587===e?"static/chunks/587-c973123b3c9a5b80.js":"static/chunks/"+(({988:"993e5495",1048:"db9d41be",7330:"d3ac728e",8133:"1ba63609",8747:"90542734",8924:"da12927c",9425:"bf2ff291"})[e]||e)+"."+({103:"23142a67b02246a8",268:"ec500965c1761e26",370:"8e8f3cf8eb0e29dd",398:"ffa02af9062a3950",484:"761e1ff01f663fb2",869:"7152372b662e31af",918:"6a9bbe564e4a2d0f",934:"9006461bd0548660",973:"9efc01efd9d768a5",988:"598a97aa1337298f",1032:"d9a9179233599785",1048:"27ee8fcc7bf00d70",1063:"775c442bdbeef08b",1133:"bea8503e209b9e2c",1327:"09252bb80616cc3a",1441:"83552e2540b12edf",1708:"c3a1896e4cc9f8d9",1781:"9072b4c9586df549",1941:"66c3a0942c0c3e5d",2081:"47b6e9391094055f",2181:"ba21239d3ac39f81",2201:"46326eb058826eb2",2258:"4defa30121ef44a5",2325:"23caf22075e51aa5",2356:"523277bb8c6bf72a",2418:"b5d9e177e10a686e",2480:"cf27ca02e5b19761",2539:"c5a4f2fd8e421c70",2619:"9431a3f48da8eef4",2695:"b732ef1965253b3f",2703:"495a65ed14b2f094",2821:"934bcf60fbdc28c6",3251:"408c817adb161919",3274:"487a15bb28a8bf64",3308:"8e27b5c43a478f0d",3336:"a76f9485fe7cb762",3688:"77dd9e68a61af45e",3716:"72bf4c9d7325debd",3944:"6215b78f025077b3",3995:"eca0f5bef1fc3ae5",4004:"74b9bcf5478b1663",4202:"8440832386f023c7",4238:"6f102dcbcf2ae339",4318:"65827559038c9692",4405:"7a19458960a1058e",4424:"fd0c93a807a333e1",4473:"c9bdafcdd251e4db",4559:"2e7ed39ea2757280",4854:"b64a1daa15899219",4866:"d1060b4faf2ae1e2",4970:"8a63b4953b0e4946",5020:"9ac8d0dc8390bb6e",5137:"f163e94c74a94d01",5242:"7b643c6b3394cac1",5361:"afc00ab2626bacbf",5521:"cfdf2cfc6db31407",5526:"ff46471041fdcb79",5658:"0fe2642c815aea9a",5681:"dd0e66b0de16e54b",6121:"eb9023b1cbc78ee2",6161:"4836cd7d031026bf",6195:"8710aa41b2319dff",6202:"f4317cf0a48876f9",6294:"24f510c0c3e3714c",6604:"4ad489ec0e9e8985",6654:"41440ef667144967",6794:"57bf1aff78682f3a",7256:"e07cf52d87d40252",7268:"2f59c671f26160f3",7330:"7964f816a1ca64e5",7331:"2add3c4e125a2dba",7488:"1403755f69bda581",7543:"89f7b805ed0f2901",8133:"b2ae90f43319a29e",8200:"a36b9f8c983c6b9e",8717:"4e20eedf9544e286",8747:"ae439f2382f58c51",8863:"fa0320ea586efb3b",8885:"d9308c756376780b",8901:"e117d206a917bda0",8924:"476aa688a637649c",9365:"a3e0e5ac101ccd02",9425:"244c8a7c1c14966a",9448:"b6c5eb8f1356d5fd",9522:"c7c6e9c330f9ba6b",9614:"3221013d7f0af27f",9668:"b62ea9e45077f781",9698:"4d09a99b9d99f3e5",9705:"40a82b97f214e28b",9754:"d67dec946fc871d4",9764:"2669775c6e107a01",9793:"4567af813117ad25",9974:"9a0f79beca65e8c4",9981:"ba92f0b30bbf53e4"})[e]+".js",l.miniCssF=e=>"static/css/2f46e0db0d4a3aed.css",l.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),c={},l.l=(e,t,a,r)=>{if(c[e])return void c[e].push(t);if(void 0!==a)for(var d,f,o=document.getElementsByTagName("script"),b=0;b<o.length;b++){var n=o[b];if(n.getAttribute("src")==e||n.getAttribute("data-webpack")=="_N_E:"+a){d=n;break}}d||(f=!0,(d=document.createElement("script")).charset="utf-8",d.timeout=120,l.nc&&d.setAttribute("nonce",l.nc),d.setAttribute("data-webpack","_N_E:"+a),d.src=l.tu(e)),c[e]=[t];var i=(t,a)=>{d.onerror=d.onload=null,clearTimeout(s);var r=c[e];if(delete c[e],d.parentNode&&d.parentNode.removeChild(d),r&&r.forEach(e=>e(a)),t)return t(a)},s=setTimeout(i.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=i.bind(null,d.onerror),d.onload=i.bind(null,d.onload),f&&document.head.appendChild(d)},l.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.tt=()=>(void 0===r&&(r={createScriptURL:e=>e},"u">typeof trustedTypes&&trustedTypes.createPolicy&&(r=trustedTypes.createPolicy("nextjs#bundler",r))),r),l.tu=e=>l.tt().createScriptURL(e),l.p="/_next/",d={8068:0},l.f.miniCss=(e,t)=>{if(d[e])t.push(d[e]);else 0!==d[e]&&({5846:1})[e]&&t.push(d[e]=new Promise((t,a)=>{var c=l.miniCssF(e),r=l.p+c;if(((e,t)=>{for(var a=document.getElementsByTagName("link"),c=0;c<a.length;c++){var r=a[c],d=r.getAttribute("data-href")||r.getAttribute("href");if("stylesheet"===r.rel&&(d===e||d===t))return r}for(var f=document.getElementsByTagName("style"),c=0;c<f.length;c++){var r=f[c],d=r.getAttribute("data-href");if(d===e||d===t)return r}})(c,r))return t();((e,t,a,c)=>{var r=document.createElement("link");r.rel="stylesheet",r.type="text/css",r.onerror=r.onload=d=>{if(r.onerror=r.onload=null,"load"===d.type)a();else{var f=d&&("load"===d.type?"missing":d.type),o=d&&d.target&&d.target.href||t,b=Error("Loading CSS chunk "+e+" failed.\n("+o+")");b.code="CSS_CHUNK_LOAD_FAILED",b.type=f,b.request=o,r.parentNode.removeChild(r),c(b)}},r.href=t;if("function"==typeof _N_E_STYLE_LOAD){var d=r.href,f=r.onload,o=r.onerror;_N_E_STYLE_LOAD(0===d.indexOf(window.location.origin)?new URL(d).pathname:d).then(function(){f&&f.call(r,{type:"load"})},function(){o&&o.call(r,{})})}else document.head.appendChild(r)})(e,r,t,a)}).then(()=>{d[e]=0},t=>{throw delete d[e],t}))},f={8068:0,6577:0},l.f.j=(e,t)=>{var a=l.o(f,e)?f[e]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^(5846|6577|8068)$/.test(e))f[e]=0;else{var c=new Promise((t,c)=>a=f[e]=[t,c]);t.push(a[2]=c);var r=l.p+l.u(e),d=Error();l.l(r,t=>{if(l.o(f,e)&&(0!==(a=f[e])&&(f[e]=void 0),a)){var c=t&&("load"===t.type?"missing":t.type),r=t&&t.target&&t.target.src;d.message="Loading chunk "+e+" failed.\n("+c+": "+r+")",d.name="ChunkLoadError",d.type=c,d.request=r,a[1](d)}},"chunk-"+e,e)}},l.O.j=e=>0===f[e],o=(e,t)=>{var a,c,[r,d,o]=t,b=0;if(r.some(e=>0!==f[e])){for(a in d)l.o(d,a)&&(l.m[a]=d[a]);if(o)var n=o(l)}for(e&&e(t);b<r.length;b++)c=r[b],l.o(f,c)&&f[c]&&f[c][0](),f[c]=0;return l.O(n)},(b=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(o.bind(null,0)),b.push=o.bind(null,b.push.bind(b)),l.nc=void 0})();
1
+ (()=>{"use strict";var e,t,a,c,d,r,f,o,b,n={},i={};function l(e){var t=i[e];if(void 0!==t)return t.exports;var a=i[e]={exports:{}},c=!0;try{n[e].call(a.exports,a,a.exports,l),c=!1}finally{c&&delete i[e]}return a.exports}l.m=n,e=[],l.O=(t,a,c,d)=>{if(a){d=d||0;for(var r=e.length;r>0&&e[r-1][2]>d;r--)e[r]=e[r-1];e[r]=[a,c,d];return}for(var f=1/0,r=0;r<e.length;r++){for(var[a,c,d]=e[r],o=!0,b=0;b<a.length;b++)(!1&d||f>=d)&&Object.keys(l.O).every(e=>l.O[e](a[b]))?a.splice(b--,1):(o=!1,d<f&&(f=d));if(o){e.splice(r--,1);var n=c();void 0!==n&&(t=n)}}return t},l.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return l.d(t,{a:t}),t},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,l.t=function(e,c){if(1&c&&(e=this(e)),8&c||"object"==typeof e&&e&&(4&c&&e.__esModule||16&c&&"function"==typeof e.then))return e;var d=Object.create(null);l.r(d);var r={};t=t||[null,a({}),a([]),a(a)];for(var f=2&c&&e;"object"==typeof f&&!~t.indexOf(f);f=a(f))Object.getOwnPropertyNames(f).forEach(t=>r[t]=()=>e[t]);return r.default=()=>e,l.d(d,r),d},l.d=(e,t)=>{for(var a in t)l.o(t,a)&&!l.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},l.f={},l.e=e=>Promise.all(Object.keys(l.f).reduce((t,a)=>(l.f[a](e,t),t),[])),l.u=e=>4906===e?"static/chunks/4906-1472d0151646b3d8.js":587===e?"static/chunks/587-c973123b3c9a5b80.js":"static/chunks/"+(({988:"993e5495",1048:"db9d41be",7330:"d3ac728e",8133:"1ba63609",8747:"90542734",8924:"da12927c",9425:"bf2ff291"})[e]||e)+"."+({103:"23142a67b02246a8",268:"ec500965c1761e26",370:"8e8f3cf8eb0e29dd",398:"ffa02af9062a3950",484:"761e1ff01f663fb2",869:"7152372b662e31af",918:"6a9bbe564e4a2d0f",934:"9006461bd0548660",973:"9efc01efd9d768a5",988:"598a97aa1337298f",1032:"d9a9179233599785",1048:"27ee8fcc7bf00d70",1063:"775c442bdbeef08b",1133:"bea8503e209b9e2c",1327:"09252bb80616cc3a",1441:"83552e2540b12edf",1708:"c3a1896e4cc9f8d9",1781:"9072b4c9586df549",1941:"66c3a0942c0c3e5d",2081:"47b6e9391094055f",2181:"ba21239d3ac39f81",2201:"46326eb058826eb2",2258:"4defa30121ef44a5",2325:"23caf22075e51aa5",2356:"523277bb8c6bf72a",2418:"b5d9e177e10a686e",2480:"cf27ca02e5b19761",2539:"c5a4f2fd8e421c70",2619:"9431a3f48da8eef4",2695:"b732ef1965253b3f",2703:"495a65ed14b2f094",2821:"934bcf60fbdc28c6",3251:"408c817adb161919",3274:"487a15bb28a8bf64",3308:"8e27b5c43a478f0d",3336:"a76f9485fe7cb762",3688:"77dd9e68a61af45e",3716:"72bf4c9d7325debd",3944:"6215b78f025077b3",3995:"eca0f5bef1fc3ae5",4004:"74b9bcf5478b1663",4202:"8440832386f023c7",4238:"6f102dcbcf2ae339",4318:"9c215a4cb05a3069",4405:"7a19458960a1058e",4424:"fd0c93a807a333e1",4473:"c9bdafcdd251e4db",4559:"2e7ed39ea2757280",4854:"b64a1daa15899219",4866:"d1060b4faf2ae1e2",4970:"8a63b4953b0e4946",5020:"9ac8d0dc8390bb6e",5137:"f163e94c74a94d01",5242:"7b643c6b3394cac1",5361:"afc00ab2626bacbf",5521:"cfdf2cfc6db31407",5526:"ff46471041fdcb79",5658:"0fe2642c815aea9a",5681:"dd0e66b0de16e54b",6121:"eb9023b1cbc78ee2",6161:"4836cd7d031026bf",6195:"8710aa41b2319dff",6202:"f4317cf0a48876f9",6294:"24f510c0c3e3714c",6604:"4ad489ec0e9e8985",6654:"41440ef667144967",6794:"57bf1aff78682f3a",7256:"e07cf52d87d40252",7268:"2f59c671f26160f3",7330:"7964f816a1ca64e5",7331:"2add3c4e125a2dba",7488:"1403755f69bda581",7543:"89f7b805ed0f2901",8133:"b2ae90f43319a29e",8200:"a36b9f8c983c6b9e",8717:"4e20eedf9544e286",8747:"ae439f2382f58c51",8863:"fa0320ea586efb3b",8885:"d9308c756376780b",8901:"e117d206a917bda0",8924:"476aa688a637649c",9365:"a3e0e5ac101ccd02",9425:"244c8a7c1c14966a",9448:"b6c5eb8f1356d5fd",9522:"c7c6e9c330f9ba6b",9614:"3221013d7f0af27f",9668:"b62ea9e45077f781",9698:"4d09a99b9d99f3e5",9705:"40a82b97f214e28b",9754:"d67dec946fc871d4",9764:"2669775c6e107a01",9793:"4567af813117ad25",9974:"9a0f79beca65e8c4",9981:"ba92f0b30bbf53e4"})[e]+".js",l.miniCssF=e=>"static/css/2f46e0db0d4a3aed.css",l.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),c={},l.l=(e,t,a,d)=>{if(c[e])return void c[e].push(t);if(void 0!==a)for(var r,f,o=document.getElementsByTagName("script"),b=0;b<o.length;b++){var n=o[b];if(n.getAttribute("src")==e||n.getAttribute("data-webpack")=="_N_E:"+a){r=n;break}}r||(f=!0,(r=document.createElement("script")).charset="utf-8",r.timeout=120,l.nc&&r.setAttribute("nonce",l.nc),r.setAttribute("data-webpack","_N_E:"+a),r.src=l.tu(e)),c[e]=[t];var i=(t,a)=>{r.onerror=r.onload=null,clearTimeout(s);var d=c[e];if(delete c[e],r.parentNode&&r.parentNode.removeChild(r),d&&d.forEach(e=>e(a)),t)return t(a)},s=setTimeout(i.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=i.bind(null,r.onerror),r.onload=i.bind(null,r.onload),f&&document.head.appendChild(r)},l.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.tt=()=>(void 0===d&&(d={createScriptURL:e=>e},"u">typeof trustedTypes&&trustedTypes.createPolicy&&(d=trustedTypes.createPolicy("nextjs#bundler",d))),d),l.tu=e=>l.tt().createScriptURL(e),l.p="/_next/",r={8068:0},l.f.miniCss=(e,t)=>{if(r[e])t.push(r[e]);else 0!==r[e]&&({5846:1})[e]&&t.push(r[e]=new Promise((t,a)=>{var c=l.miniCssF(e),d=l.p+c;if(((e,t)=>{for(var a=document.getElementsByTagName("link"),c=0;c<a.length;c++){var d=a[c],r=d.getAttribute("data-href")||d.getAttribute("href");if("stylesheet"===d.rel&&(r===e||r===t))return d}for(var f=document.getElementsByTagName("style"),c=0;c<f.length;c++){var d=f[c],r=d.getAttribute("data-href");if(r===e||r===t)return d}})(c,d))return t();((e,t,a,c)=>{var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onerror=d.onload=r=>{if(d.onerror=d.onload=null,"load"===r.type)a();else{var f=r&&("load"===r.type?"missing":r.type),o=r&&r.target&&r.target.href||t,b=Error("Loading CSS chunk "+e+" failed.\n("+o+")");b.code="CSS_CHUNK_LOAD_FAILED",b.type=f,b.request=o,d.parentNode.removeChild(d),c(b)}},d.href=t;if("function"==typeof _N_E_STYLE_LOAD){var r=d.href,f=d.onload,o=d.onerror;_N_E_STYLE_LOAD(0===r.indexOf(window.location.origin)?new URL(r).pathname:r).then(function(){f&&f.call(d,{type:"load"})},function(){o&&o.call(d,{})})}else document.head.appendChild(d)})(e,d,t,a)}).then(()=>{r[e]=0},t=>{throw delete r[e],t}))},f={8068:0,6577:0},l.f.j=(e,t)=>{var a=l.o(f,e)?f[e]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^(5846|6577|8068)$/.test(e))f[e]=0;else{var c=new Promise((t,c)=>a=f[e]=[t,c]);t.push(a[2]=c);var d=l.p+l.u(e),r=Error();l.l(d,t=>{if(l.o(f,e)&&(0!==(a=f[e])&&(f[e]=void 0),a)){var c=t&&("load"===t.type?"missing":t.type),d=t&&t.target&&t.target.src;r.message="Loading chunk "+e+" failed.\n("+c+": "+d+")",r.name="ChunkLoadError",r.type=c,r.request=d,a[1](r)}},"chunk-"+e,e)}},l.O.j=e=>0===f[e],o=(e,t)=>{var a,c,[d,r,o]=t,b=0;if(d.some(e=>0!==f[e])){for(a in r)l.o(r,a)&&(l.m[a]=r[a]);if(o)var n=o(l)}for(e&&e(t);b<d.length;b++)c=d[b],l.o(f,c)&&f[c]&&f[c][0](),f[c]=0;return l.O(n)},(b=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(o.bind(null,0)),b.push=o.bind(null,b.push.bind(b)),l.nc=void 0})();
package/README.ja.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](./README.md) | [한국어](./README.ko.md) | [日本語](./README.ja.md) | [简体中文](./README.zh-CN.md)
4
4
 
5
- > **Android APK (Android 12+)** — Kotlin 製のコンパニオンアプリでリモートの ompgui サーバーに接続し、最新セッションの読み取り専用オフラインスナップショットを利用できます。[ompgui Remote v0.7.4 をダウンロード](https://github.com/dbc-hbin/ompgui/releases/download/v0.7.4/ompgui-remote-v0.7.4.apk) · [リリースノート](https://github.com/dbc-hbin/ompgui/releases/tag/v0.7.4)
5
+ > **Android APK (Android 12+)** — Kotlin 製のコンパニオンアプリでリモートの ompgui サーバーに接続し、最新セッションの読み取り専用オフラインスナップショットを利用できます。[ompgui Remote v0.7.5 をダウンロード](https://github.com/dbc-hbin/ompgui/releases/download/v0.7.5/ompgui-remote-v0.7.5.apk) · [リリースノート](https://github.com/dbc-hbin/ompgui/releases/tag/v0.7.5)
6
6
 
7
7
  > `android/` の実験的なネイティブ Compose クライアントは、認証済みの `/relay` WebSocket を使用し、セッション・履歴の操作、リンク付きメッセージ、オフラインの Mermaid 図とコードの構文強調、画像/PDF/音声/HTML/Markdown/DOCX のインラインプレビューを提供します。ファイルの自動更新は表示中のみ動作し、未保存の編集を保持します。許可された隠しファイルの閲覧とアーカイブ検索にも対応します。モデル・設定には公開 models.dev カタログ、高度な OMP 設定、構成とは別に表示されるセッションごとの実際の MCP 実行状態が含まれます。添付ファイルは端末上で巨大な単一 JSON にまとめず、ストリーミングでステージングします。画像は各 10 MiB で最大 10 件、テキスト添付は独立した枠で各 256 KiB、最大 10 件です。OMP 自体の画像正規化とプロバイダーごとの画像数制限は引き続き適用されます。
8
8
  >
package/README.ko.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](./README.md) | [한국어](./README.ko.md) | [日本語](./README.ja.md) | [简体中文](./README.zh-CN.md)
4
4
 
5
- > **Android APK (Android 12+)** — Kotlin 보조 앱으로 원격 ompgui 서버에 연결하고, 최신 세션의 읽기 전용 오프라인 스냅샷을 이용할 수 있습니다. [ompgui Remote v0.7.4 다운로드](https://github.com/dbc-hbin/ompgui/releases/download/v0.7.4/ompgui-remote-v0.7.4.apk) · [릴리스 노트](https://github.com/dbc-hbin/ompgui/releases/tag/v0.7.4)
5
+ > **Android APK (Android 12+)** — Kotlin 보조 앱으로 원격 ompgui 서버에 연결하고, 최신 세션의 읽기 전용 오프라인 스냅샷을 이용할 수 있습니다. [ompgui Remote v0.7.5 다운로드](https://github.com/dbc-hbin/ompgui/releases/download/v0.7.5/ompgui-remote-v0.7.5.apk) · [릴리스 노트](https://github.com/dbc-hbin/ompgui/releases/tag/v0.7.5)
6
6
 
7
7
  > `android/`의 실험용 네이티브 Compose 클라이언트는 인증된 `/relay` WebSocket을 사용하며, 세션/기록 제어와 링크·도구 호출·결과·오류·미디어 참조를 포함하는 풍부한 온라인 대화 기록, 오프라인 Mermaid 다이어그램 및 코드 구문 강조, 이미지/PDF/오디오/HTML/Markdown/DOCX 인라인 미리보기를 제공합니다. 온라인 기록은 보호된 오프라인 스냅샷과 별개입니다. 크기가 제한된 미리보기에서 `sessions.content`로 전체 텍스트를 나누어 가져오고 미디어 참조도 페이지 단위로 조회하므로 대화 기록을 4,000자로 잘라내지 않습니다. 오프라인 캐시의 개인정보 보호 제한은 그대로 유지됩니다. 파일 자동 새로고침은 화면에 보일 때만 동작하며 저장하지 않은 편집 내용을 보존합니다. 허용된 숨김 파일 탐색과 아카이브 검색도 지원합니다. 모델/설정에서는 공개 models.dev 카탈로그, 고급 OMP 설정, 구성 상태와 구분되는 세션별 실제 MCP 실행 상태를 확인할 수 있습니다. 첨부 파일은 휴대폰에서 하나의 거대한 JSON으로 묶지 않고 스트리밍으로 스테이징하며, 이미지는 개당 10 MiB로 최대 10개, 텍스트 첨부는 별도로 개당 256 KiB로 최대 10개까지 지원합니다. OMP 자체의 이미지 정규화와 제공자별 이미지 개수 제한은 계속 적용됩니다.
8
8
  >
@@ -174,9 +174,10 @@ ompgui은 Node가 호스팅하는 Next.js 앱으로, 설치된 `omp` 바이너
174
174
  - **파일 접근**: 파일 탐색과 미리보기는 선택한 프로젝트 디렉터리 및 세션에 나타난 작업 디렉터리로 제한됩니다. `isWindowsAbsolutePath`/`samePath` 단일 헬퍼로 경로를 정규화하고 `realpath` 해석 뒤 심볼릭 링크 탈출을 거부합니다. Windows에서는 루트에서 드라이브 목록을 제공하는 디렉터리 선택기를 사용합니다.
175
175
  - **포크와 세션 내 브랜치**: 포크는 새 `.jsonl` 파일을 만듭니다. “여기서 편집”은 같은 세션 파일 안에 다른 브랜치를 만듭니다.
176
176
 
177
- - **메시지 대기열**: 웹과 현재 Android 클라이언트는 서버 소유의 메모리 내 대기열을 공유합니다. Android에서는 **Session controls → Queue**를 직접 열며, 입력 중 Execution/Queue 막대가 자동으로 나타나지 않습니다. 전송 전 항목은 텍스트와 이미지를 입력창으로 회수하거나 삭제할 수 있고, 후속 메시지를 안전한 전송 시점을 따르는 조종 메시지로 승격할 수 있습니다. 전송 중 항목은 편집할 수 없습니다. 스냅샷에는 이미지 메타데이터만 포함되고 원본 바이트는 비공개로 보관되며 개수·바이트·메모리 제한이 적용됩니다. 15 MiB를 초과하는 Relay 회수는 변경 전에 거부하고 웹 사용을 안내합니다. 서버 프로세스 재시작 시 대기열은 보존되지 않으며, 기존 배포 클라이언트의 프롬프트 진입점은 호환됩니다.
178
- - **세션 검색**: 메타데이터 또는 색인 기반 본문 모드를 선택하고, 시작일 포함·종료일 제외 필터와 읽기 전용 일치 문맥을 사용할 수 있습니다. 비공개 Node/SQLite 파생 색인은 표시되는 대화 텍스트를 대상으로 하며 자격 증명, 숨겨진 추론, 불투명 페이로드는 색인하지 않습니다. 검색은 기록을 수정하지 않습니다.
179
- - **공급자 확인**: 구성 검증은 네트워크 테스트가 아닙니다. 실제 연결 테스트는 비용 발생 가능성에 대한 명시적 승인 후 고정 프롬프트와 최대 32 출력 토큰으로 공급자 요청을 한 번 이하 전송합니다. 직접 입력한 후보 자격 증명의 OpenAI Chat Completions·OpenAI Responses·Anthropic Messages API 형식만 지원하며 저장된 OAuth 자격 증명은 사용하지 않습니다.
177
+ - **메시지 대기열**: 웹과 현재 Android 클라이언트는 서버 소유의 메모리 내 대기열을 공유합니다. Android는 간결한 입력창에 기본 Steer/Queue 동작을 유지하며, **Session controls → Queue**를 직접 열어 항목 수를 확인하고 관리합니다. 입력 중 Execution/Queue 막대가 자동으로 나타나지 않습니다. 회수는 텍스트와 이미지를 입력창으로 복원하며, 가능한 항목은 삭제하거나 후속 메시지에서 조종 메시지로 승격할 수 있습니다. 승격도 안전한 전송 시점을 따르고 전송 중 항목은 편집할 수 없습니다. 스냅샷에는 이미지 메타데이터만 포함되며, 비공개 페이로드 저장량은 총 100 MiB로 제한되고 별도 이미지 개수·바이트 제한도 적용됩니다. 이미지 바이트는 일회성 회수 응답으로만 반환됩니다. 15 MiB를 초과하는 Relay 회수는 변경 전에 거부하고 웹 사용을 안내합니다. 브라우저 재연결 시 대기 항목을 복구하지만 서버 프로세스 재시작 시에는 보존하지 않습니다. 기존 배포 클라이언트의 프롬프트 진입점은 호환됩니다.
178
+ - **세션 검색**: Metadata 또는 Body 모드에서 시작일 포함·종료일 제외 필터, 결과 발췌문, 읽기 전용 일치 문맥을 제공합니다. 비공개 Node/SQLite 파생 색인은 현재 OMP 프로필 범위의 표시되는 대화 텍스트를 대상으로 하며, 세션 메타데이터·이미지·자격 증명·숨겨진 추론·불투명 페이로드는 제외합니다. 과거 문맥 미리보기는 활성 에이전트를 전환하거나 기록을 수정하지 않습니다.
179
+ - **공급자 확인**: 구성 확인은 구조만 검증하며 네이티브 OMP를 시작하거나 공급자에 접속하지 않습니다. 별도의 실제 연결 테스트는 과금 가능성에 대한 명시적 승인 후 고정 프롬프트와 최대 32 출력 토큰으로 상위 공급자 요청을 한 번 이하 전송하며 도구를 실행하지 않습니다. OpenAI Chat Completions·OpenAI Responses·Anthropic Messages API 형식에서 제출한 리터럴 후보 자격 증명 또는 명시적 무인증 모드만 사용하며, 저장된 OAuth 자격 증명은 사용하지 않습니다. 구성 확인만으로 연결 성공을 보장하지 않습니다.
180
+ - **공유 사용량**: 웹 HTTP, Relay 스냅샷, Relay 사용량 요청은 동일한 서버 측 사용량 서비스를 사용합니다.
180
181
 
181
182
  ## 개발
182
183
 
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](./README.md) | [한국어](./README.ko.md) | [日本語](./README.ja.md) | [简体中文](./README.zh-CN.md)
4
4
 
5
- > **Android APK (Android 12+)** — Use the Kotlin companion app to connect to a remote ompgui server, with a read-only offline snapshot of the latest session. [Download ompgui Remote v0.7.4](https://github.com/dbc-hbin/ompgui/releases/download/v0.7.4/ompgui-remote-v0.7.4.apk) · [Release notes](https://github.com/dbc-hbin/ompgui/releases/tag/v0.7.4)
5
+ > **Android APK (Android 12+)** — Use the Kotlin companion app to connect to a remote ompgui server, with a read-only offline snapshot of the latest session. [Download ompgui Remote v0.7.5](https://github.com/dbc-hbin/ompgui/releases/download/v0.7.5/ompgui-remote-v0.7.5.apk) · [Release notes](https://github.com/dbc-hbin/ompgui/releases/tag/v0.7.5)
6
6
 
7
7
  > The Kotlin companion app in `android/` uses authenticated `/relay` WebSockets for session/history controls and rich online transcripts with linked messages, tool calls/results/errors, and media references, plus offline Mermaid diagrams and code highlighting and inline image/PDF/audio/HTML/Markdown/DOCX previews. Online history is independent of the protected offline snapshot: bounded previews fetch full text through `sessions.content` and paginate media references, rather than truncating the transcript at 4,000 characters. Offline cache privacy restrictions remain unchanged. Visible-only file auto-refresh preserves unsaved edits; browsing supports allowed hidden files and archive search. Models/settings include the public models.dev catalog, advanced OMP settings, and actual per-session MCP runtime status shown separately from configuration. Attachments are streamed into staging rather than packed into one giant phone JSON payload: up to 10 images at 10 MiB each and, independently, 10 text attachments at 256 KiB each. OMP's own image normalization and provider-specific image-count limi…
8
8
  >
@@ -176,9 +176,10 @@ ompgui is a Node-hosted Next.js app that drives your installed `omp` binary —
176
176
  - **File access**: file browsing and preview are scoped to the selected project directory and working directories that appear in sessions; paths are canonicalized via a single `isWindowsAbsolutePath`/`samePath` helper and symlink escapes are rejected after `realpath` resolution. On Windows the directory picker offers a drive list at the root.
177
177
  - **Forks vs in-session branches**: Fork creates a new `.jsonl` file. "Edit from here" creates another branch inside the same session file.
178
178
 
179
- - **Queued messages**: web and current Android clients share a server-owned, in-memory queue. On Android, open **Session controls → Queue** explicitly; typing does not add an automatic Execution/Queue bar. Recall restores text and images, delete discards an eligible item, and promotion changes a follow-up to steering subject to safe dispatch. Sending items cannot be edited. Snapshots expose image metadata, not private image bytes; count, byte, and memory limits apply. Relay recalls over 15 MiB are refused before mutation and direct you to the web client. A server-process restart does not preserve pending items; older deployed clients retain compatible prompt entry points.
180
- - **Session search**: choose metadata or indexed body search, with inclusive start/exclusive end dates and read-only match context. The private Node/SQLite index covers visible conversation text, not credentials, hidden reasoning, or opaque payloads; search does not modify history.
181
- - **Provider checks**: configuration validation is not a network test. A real connectivity test requires explicit approval of possible cost, uses a fixed prompt with a 32-token output limit, and sends at most one provider request. It supports OpenAI Chat Completions, OpenAI Responses, and Anthropic Messages API shapes with literal candidate credentials only—not stored OAuth credentials.
179
+ - **Queued messages**: web and current Android clients share a server-owned, in-memory queue. Android keeps primary Steer/Queue actions in the compact composer; open **Session controls → Queue** explicitly to see the queue count and manage items. Typing does not add an automatic Execution/Queue bar. Recall restores text and images, delete discards an eligible item, and promotion changes a follow-up to steering subject to safe dispatch. Sending items cannot be edited. Snapshots expose image metadata only; private payload storage is bounded to 100 MiB total, with additional image count and byte limits. Image bytes return only in the one-shot recall response. Relay recalls over 15 MiB are refused before mutation and direct you to the web client. Browser reconnects recover pending items, but server-process restarts do not; older deployed clients retain compatible prompt entry points.
180
+ - **Session search**: choose Metadata or Body mode, with inclusive start/exclusive end dates, result snippets, and read-only match context. The private, derived Node/SQLite index is scoped to the current OMP profile and covers visible conversation text—not session metadata, images, credentials, hidden reasoning, or opaque payloads. Historical previews neither switch the active agent nor modify history.
181
+ - **Provider checks**: configuration checks validate structure only, without starting native OMP or contacting providers. A separate real connectivity test requires explicit approval of possible charges, uses a fixed prompt with a 32-token output limit, and sends at most one upstream request without tools. It supports OpenAI Chat Completions, OpenAI Responses, and Anthropic Messages API shapes with submitted literal candidate credentials or explicit no-auth mode—not stored OAuth credentials. A configuration check alone does not establish connectivity.
182
+ - **Shared usage**: web HTTP, Relay snapshots, and Relay usage requests use the same server-side usage service.
182
183
 
183
184
  ## Development
184
185
 
package/README.zh-CN.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](./README.md) | [한국어](./README.ko.md) | [日本語](./README.ja.md) | [简体中文](./README.zh-CN.md)
4
4
 
5
- > **Android APK(Android 12+)** — 使用 Kotlin 配套应用连接远程 ompgui 服务器,并查看最新会话的只读离线快照。[下载 ompgui Remote v0.7.4](https://github.com/dbc-hbin/ompgui/releases/download/v0.7.4/ompgui-remote-v0.7.4.apk) · [发行说明](https://github.com/dbc-hbin/ompgui/releases/tag/v0.7.4)
5
+ > **Android APK(Android 12+)** — 使用 Kotlin 配套应用连接远程 ompgui 服务器,并查看最新会话的只读离线快照。[下载 ompgui Remote v0.7.5](https://github.com/dbc-hbin/ompgui/releases/download/v0.7.5/ompgui-remote-v0.7.5.apk) · [发行说明](https://github.com/dbc-hbin/ompgui/releases/tag/v0.7.5)
6
6
 
7
7
  > `android/` 中的实验性原生 Compose 客户端使用经过身份验证的 `/relay` WebSocket,提供会话/历史记录控制、带链接的消息、离线 Mermaid 图表与代码语法高亮,以及图片/PDF/音频/HTML/Markdown/DOCX 内联预览。文件仅在界面可见时自动刷新,并保留未保存的编辑;支持浏览允许访问的隐藏文件和搜索归档。模型与设置包括公开的 models.dev 目录、高级 OMP 设置,以及与配置状态分开显示的各会话实际 MCP 运行状态。附件通过流式传输暂存,而不是在手机端打包成一个巨大的 JSON:图片最多 10 个,每个 10 MiB;文本附件独立计数,最多 10 个,每个 256 KiB。OMP 自身的图像规范化处理和各提供商的图片数量限制仍然适用。
8
8
  >
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ompgui",
3
- "version": "0.7.4",
3
+ "version": "0.7.5",
4
4
  "description": "Web UI & Browser GUI for the oh-my-pi (omp) coding agent",
5
5
  "homepage": "https://github.com/dbc-hbin/ompgui#readme",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- "use strict";exports.id=1448,exports.ids=[1448],exports.modules={58112:(a,b,c)=>{c.d(b,{D:()=>f});var d=c(55511),e=c(29021);function f(a,b){let c=`${a}.tmp-${(0,d.randomUUID)()}`,f=(0,e.openSync)(c,"wx",384);try{try{(0,e.writeFileSync)(f,b,"utf8")}finally{(0,e.closeSync)(f)}(0,e.renameSync)(c,a)}finally{try{(0,e.unlinkSync)(c)}catch(a){if(!(a instanceof Error&&"code"in a&&"ENOENT"===a.code))throw a}}}},73209:(a,b,c)=>{c.d(b,{T4:()=>i,_6:()=>j,jd:()=>g});var d=c(21820),e=c(13798);let f=["--no-session","--no-skills","--no-lsp"];function g(){let a=globalThis.__ompUtilityRpcState;if(!a)return;a.idleTimer&&(clearTimeout(a.idleTimer),a.idleTimer=null);let b=a.proc;a.proc=null,b&&b.dispose()}async function h(a){let b=new e.X({cwd:(0,d.homedir)(),extraArgs:f,onExit:()=>{a.proc===b&&(a.proc=null)}});try{let a=await b.waitReady(6e4);await b.negotiateProtocol(a)}catch(a){throw b.dispose(),a}return b}function i(a,b=6e4){let c=function(){if(!globalThis.__ompUtilityRpcState){globalThis.__ompUtilityRpcState={proc:null,idleTimer:null,queue:Promise.resolve()};let a=()=>g();process.once("exit",a),process.once("SIGINT",a),process.once("SIGTERM",a)}return globalThis.__ompUtilityRpcState}(),d=c.queue.then(async()=>{c.idleTimer&&(clearTimeout(c.idleTimer),c.idleTimer=null);try{return c.proc&&c.proc.isAlive||(c.proc=await h(c)),await c.proc.sendCommand(a,b)}finally{c.idleTimer&&clearTimeout(c.idleTimer),c.idleTimer=setTimeout(()=>{c.idleTimer=null;let a=c.proc;c.proc=null,a&&a.dispose()},3e5),c.idleTimer.unref?.()}});return c.queue=d.then(()=>void 0,()=>void 0),d}async function j(a,b={}){let c=new e.X({cwd:b.cwd??(0,d.homedir)(),extraArgs:f,env:b.env});try{let d=await c.waitReady(6e4);return await c.negotiateProtocol(d),await c.sendCommand(a,b.timeoutMs??6e4)}finally{await c.dispose()}}},80244:(a,b,c)=>{c.d(b,{Cc:()=>k,F3:()=>t,IX:()=>B,Iy:()=>u,Jz:()=>o,V6:()=>x,YM:()=>j,hH:()=>w,kx:()=>p,v7:()=>A});var d=c(29021),e=c(33873),f=c(58112),g=c(63294),h=c(85887),i=c(20565);let j="models_config_invalid";class k extends Error{constructor(a){const b=a.length>0?a:[{path:"",message:"Invalid models configuration"}];super(b.map(a=>a.path?`${a.path} ${a.message}`:a.message).join("; ")),this.code=j,this.name="ModelsConfigValidationError",this.issues=b}}function l(a,b,c){a.push({path:b,message:c})}function m(a){if("string"!=typeof a||""===a.trim())return!1;try{let b=new URL(a);return("http:"===b.protocol||"https:"===b.protocol)&&b.hostname.length>0}catch{return!1}}function n(a,b,c){(!(0,i.u4)(a)||Object.values(a).some(a=>"string"!=typeof a))&&l(c,b,"must map header names to strings")}function o(a){let b=[];if(!(0,i.u4)(a))throw new k([{path:"",message:"must be an object"}]);let c=v(a).providers,d=void 0===c?{}:c;if((0,i.u4)(d))for(let[a,c]of Object.entries(d)){let d=`providers.${a}`;if(!(0,i.u4)(c)){l(b,d,"must be an object");continue}if(void 0===c.baseUrl||m(c.baseUrl)||l(b,`${d}.baseUrl`,"must be a valid HTTP(S) URL"),void 0!==c.api&&("string"!=typeof c.api||""===c.api.trim())&&l(b,`${d}.api`,"must be a non-empty API identifier"),void 0!==c.auth&&"none"!==c.auth&&"apiKey"!==c.auth&&"oauth"!==c.auth&&l(b,`${d}.auth`,"must be one of apiKey, none, or oauth"),void 0!==c.apiKey&&"string"!=typeof c.apiKey&&l(b,`${d}.apiKey`,"must be a string"),void 0!==c.headers&&n(c.headers,`${d}.headers`,b),void 0!==c.models&&!Array.isArray(c.models)){l(b,`${d}.models`,"must be an array");continue}let e=Array.isArray(c.models)?c.models:[],f=new Map;for(let[a,g]of(e.length>0&&(("string"!=typeof c.baseUrl||""===c.baseUrl.trim())&&l(b,`${d}.baseUrl`,"is required when defining custom models"),"apiKey"===(c.auth??"apiKey")&&("string"!=typeof c.apiKey||""===c.apiKey.trim())&&l(b,`${d}.apiKey`,"is required when defining custom models unless auth is none or oauth")),e.entries())){let e=`${d}.models[${a}]`;if(!(0,i.u4)(g)){l(b,e,"must be an object");continue}if("string"!=typeof g.id||""===g.id.trim())l(b,`${e}.id`,"is required");else{let c=f.get(g.id);void 0!==c?l(b,`${e}.id`,`duplicates the model id at index ${c}`):f.set(g.id,a)}for(let a of(void 0===g.baseUrl||m(g.baseUrl)||l(b,`${e}.baseUrl`,"must be a valid HTTP(S) URL"),void 0!==g.api&&("string"!=typeof g.api||""===g.api.trim())&&l(b,`${e}.api`,"must be a non-empty API identifier"),("string"!=typeof c.api||""===c.api.trim())&&("string"!=typeof g.api||""===g.api.trim())&&l(b,`${e}.api`,"must be specified at provider or model level"),["contextWindow","maxTokens"]))void 0!==g[a]&&("number"!=typeof g[a]||!Number.isFinite(g[a])||g[a]<=0)&&l(b,`${e}.${a}`,"must be a positive finite number");if(void 0!==g.headers&&n(g.headers,`${e}.headers`,b),void 0!==g.cost)if((0,i.u4)(g.cost))for(let a of["input","output","cacheRead","cacheWrite"]){let c=g.cost[a];void 0===c?l(b,`${e}.cost.${a}`,"is required (cost needs input, output, cacheRead, and cacheWrite)"):("number"!=typeof c||!Number.isFinite(c)||c<0)&&l(b,`${e}.cost.${a}`,"must be a finite non-negative number")}else l(b,`${e}.cost`,"must be an object")}}else l(b,"providers","must be an object");if(b.length>0)throw new k(b)}function p(a){let b={...a,providers:{}};for(let[c,d]of Object.entries(a.providers??{})){if(!(0,i.u4)(d)){b.providers[c]=d;continue}let a={...d},e="string"==typeof d.apiKey&&d.apiKey.length>0,f=(0,i.u4)(d.headers)&&Object.keys(d.headers).length>0;delete a.apiKey,delete a.headers,a.originalName=c,Array.isArray(d.models)&&(a.models=d.models.map(a=>{if(!(0,i.u4)(a))return a;let b={...a};return delete b.headers,"string"==typeof a.id?b.originalId=a.id:delete b.originalId,b})),a.apiKeyConfigured=e,a.headersConfigured=f,b.providers[c]=a}return b}function q(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function r(a){if(!(0,i.u4)(a))return a;let b={...a};return delete b.originalId,b}function s(a){if(!(0,i.u4)(a))return a;let b={...a};return delete b.originalName,delete b.apiKeyConfigured,delete b.headersConfigured,Array.isArray(b.models)&&(b.models=b.models.map(r)),b}function t(a,b,c){if("full"!==c&&"partial"!==c)throw new k([{path:"mode",message:"must be full or partial"}]);let d="full"===c?{...b,providers:{}}:{...a,...b,providers:{}},e=(0,i.u4)(a.providers)?a.providers:{},f=q(b,"providers"),g=f?b.providers:void 0;if(f&&!(0,i.u4)(g))return d.providers=g,d;if(!f&&"partial"===c)return d.providers=Object.fromEntries(Object.entries(e).map(([a,b])=>[a,s(b)])),(0,i.u4)(a.providers)||(d.providers=a.providers),d;let h=(0,i.u4)(g)?Object.entries(g):[],j=[],m=[],n=new Map;for(let[a,b]of h){let d,f=`providers.${a}`;if((0,i.u4)(b)&&q(b,"originalName")){let a=b.originalName;"string"!=typeof a?l(j,`${f}.originalName`,"must be a string identifying an existing provider"):q(e,a)?d=a:l(j,`${f}.originalName`,"must identify a provider in the current configuration")}else q(e,a)&&(d=a);if(void 0!==d){let b=n.get(d);void 0!==b?l(j,`${f}.originalName`,`duplicates the provider identity used by providers.${b}`):n.set(d,a),"partial"===c&&d!==a&&q(e,a)&&l(j,f,"rename conflicts with an existing provider; choose an unused name")}m.push({targetName:a,incoming:b,sourceName:d,previous:void 0!==d&&(0,i.u4)(e[d])?e[d]:void 0})}let o="partial"===c?Object.fromEntries(Object.entries(e).map(([a,b])=>[a,s(b)])):{};for(let{targetName:a,incoming:b,sourceName:d,previous:e}of m){if(!(0,i.u4)(b)){"partial"===c&&void 0!==d&&d!==a&&delete o[d],o[a]=b;continue}"partial"===c&&void 0!==d&&d!==a&&delete o[d];let f=e?s(e):{},g={..."partial"===c?f:{},...b};q(b,"apiKey")&&void 0!==b.apiKey?null===b.apiKey?delete g.apiKey:g.apiKey=b.apiKey:e&&q(e,"apiKey")?g.apiKey=e.apiKey:delete g.apiKey,q(b,"headers")&&void 0!==b.headers?null===b.headers?delete g.headers:g.headers=b.headers:e&&q(e,"headers")?g.headers=e.headers:delete g.headers,Array.isArray(b.models)?g.models=function(a,b,c,d,e){let f=Array.isArray(a)?a:[],g=new Map,h=new Set;for(let a of f)(0,i.u4)(a)&&"string"==typeof a.id&&(h.has(a.id)||(g.has(a.id)?(g.delete(a.id),h.add(a.id)):g.set(a.id,a)));let j=new Map,k=new Map;return b.map((a,b)=>{let f,m=`${d}[${b}]`;if(!(0,i.u4)(a))return a;if(q(a,"originalId")){let b=a.originalId;"string"!=typeof b?l(e,`${m}.originalId`,"must be a string identifying an existing model"):h.has(b)?l(e,`${m}.originalId`,"must identify exactly one existing model"):g.has(b)?f=b:l(e,`${m}.originalId`,"must identify an existing model in the current configuration")}else"string"==typeof a.id&&(h.has(a.id)?l(e,`${m}.id`,"matches multiple existing models; supply originalId"):g.has(a.id)&&(f=a.id));let n=void 0===f?void 0:g.get(f);if(void 0!==f){let c=j.get(f);void 0!==c?l(e,q(a,"originalId")?`${m}.originalId`:`${m}.id`,`duplicates the existing model identified at index ${c}`):j.set(f,b)}let o={..."partial"===c&&n?r(n):{},...a};if(delete o.originalId,q(a,"headers")&&void 0!==a.headers?null===a.headers?delete o.headers:o.headers=a.headers:n&&q(n,"headers")?o.headers=n.headers:void 0===o.headers&&delete o.headers,"string"==typeof o.id){let a=k.get(o.id);void 0!==a?l(e,`${m}.id`,`duplicates the model id at index ${a}`):k.set(o.id,b)}return o})}(e?.models,b.models,c,`providers.${a}.models`,j):"full"!==c||q(b,"models")&&void 0!==b.models?"partial"===c&&q(b,"models")&&void 0===b.models&&(e&&q(e,"models")?g.models=f.models:delete g.models):delete g.models,o[a]=s(g)}if(j.length>0)throw new k(j);return d.providers=o,d}class u extends Error{constructor(a,b){super(`${a} is not valid YAML: ${b}`),this.name="ModelsConfigParseError",this.path=a,this.detail=b}}function v(a){if(!(0,i.u4)(a.providers))return a;let b=Object.fromEntries(Object.entries(a.providers).map(([a,b])=>{if(!(0,i.u4)(b)||!Array.isArray(b.models))return[a,b];let c=b.models.filter(a=>!(0,i.u4)(a)||"string"!=typeof a.id||a.id.trim().length>0);return[a,{...b,models:c}]}));return{...a,providers:b}}function w(){let a,b=(0,h.OK)();if(!(0,d.existsSync)(b))return{path:b,exists:!1,config:{providers:{}}};try{a=(0,d.readFileSync)(b,"utf8")}catch(a){return{path:b,exists:!0,config:{providers:{}},parseError:String(a)}}let c=(0,g.Tp)(a);if(c.errors.length>0)return{path:b,exists:!0,source:a,config:{providers:{}},parseError:c.errors[0].message};let e=c.toJS();return null==e?{path:b,exists:!0,source:a,config:{providers:{}}}:(0,i.u4)(e)?{path:b,exists:!0,source:a,config:v(e)}:{path:b,exists:!0,source:a,config:{providers:{}},parseError:"the top level of models.yml must be a mapping"}}function x(){return w().config}function y(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function z(a){return(0,g.jn)(a)&&("string"==typeof a.value||"number"==typeof a.value)?String(a.value):"string"==typeof a?a:void 0}function A(a,b){if(void 0===b||""===b.trim())return(0,g.As)(a);let c=(0,g.Tp)(b);return c.errors.length>0?(0,g.As)(a):((0,g.jh)(c.contents)?!function a(b,c,d){if((0,g.jh)(c)&&y(d)){let e=new Map(Object.entries(d).filter(([,a])=>void 0!==a));for(let[d,f]of(c.items=c.items.filter(a=>{let b=z(a.key);return void 0===b||e.has(b)}),e)){let e=c.items.find(a=>z(a.key)===d);e?e.value=a(b,e.value,f):c.set(b.createNode(d),b.createNode(f))}return c}if((0,g.oP)(c)&&Array.isArray(d)){let e=[...c.items],f=new Map;for(let a of e){let b=function(a){if(!(0,g.jh)(a))return;let b=a.get("id");return"string"==typeof b?b:void 0}(a);void 0===b||f.has(b)||f.set(b,a)}return c.items=d.map((c,d)=>{let g,h=y(c)&&"string"==typeof c.id?c.id:void 0;return void 0!==h?void 0!==(g=f.get(h))&&f.delete(h):g=e[d],a(b,g,c)}),c}if((0,g.jn)(c)&&!y(d)&&!Array.isArray(d)&&typeof c.value==typeof d)return c.value=d,c;let e=b.createNode(d);return c&&e&&"object"==typeof c&&"object"==typeof e&&(null!=c.comment&&(e.comment=c.comment),null!=c.commentBefore&&(e.commentBefore=c.commentBefore),c.spaceBefore&&(e.spaceBefore=c.spaceBefore)),e}(c,c.contents,a):c.contents=c.createNode(a),c.toString())}function B(a,b={}){let c=w();if(c.parseError&&!b.overwriteUnparseable)throw new u(c.path,c.parseError);let g=A(v(a),c.parseError?void 0:c.source),h=(0,e.dirname)(c.path);(0,d.existsSync)(h)||(0,d.mkdirSync)(h,{recursive:!0}),(0,f.D)(c.path,g)}}};