ompgui 0.4.0 → 0.4.2

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 (83) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +2 -2
  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 +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.js +1 -1
  15. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  16. package/.next/server/app/_not-found.html +1 -1
  17. package/.next/server/app/_not-found.rsc +3 -3
  18. package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  19. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  20. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  21. package/.next/server/app/api/app-update/route.js +1 -1
  22. package/.next/server/app/api/auth/all-providers/route.js +1 -1
  23. package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
  24. package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
  25. package/.next/server/app/api/mcp/route.js +1 -1
  26. package/.next/server/app/api/models-config/catalog/route.js +1 -1
  27. package/.next/server/app/api/models-config/route.js +1 -1
  28. package/.next/server/app/api/models-config/test/route.js +1 -1
  29. package/.next/server/app/api/omp-version/route.js +1 -1
  30. package/.next/server/app/api/plugins/route.js +1 -1
  31. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  32. package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
  33. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  34. package/.next/server/app/api/web-auth/session/route.js +1 -1
  35. package/.next/server/app/index.html +1 -1
  36. package/.next/server/app/index.rsc +4 -4
  37. package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  38. package/.next/server/app/index.segments/_full.segment.rsc +4 -4
  39. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  40. package/.next/server/app/login/page.js +1 -1
  41. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  42. package/.next/server/app/login.html +1 -1
  43. package/.next/server/app/login.rsc +4 -4
  44. package/.next/server/app/login.segments/_full.segment.rsc +4 -4
  45. package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  46. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +3 -3
  47. package/.next/server/app/page.js +3 -3
  48. package/.next/server/app/page_client-reference-manifest.js +1 -1
  49. package/.next/server/app-paths-manifest.json +2 -2
  50. package/.next/server/chunks/1671.js +1 -1
  51. package/.next/server/chunks/3798.js +1 -1
  52. package/.next/server/chunks/4445.js +1 -1
  53. package/.next/server/chunks/6209.js +1 -1
  54. package/.next/server/chunks/6465.js +1 -1
  55. package/.next/server/chunks/7834.js +1 -1
  56. package/.next/server/instrumentation.js +1 -1
  57. package/.next/server/middleware-build-manifest.js +1 -1
  58. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  59. package/.next/server/middleware.js +1 -1
  60. package/.next/server/pages/404.html +1 -1
  61. package/.next/server/pages/500.html +1 -1
  62. package/.next/static/chunks/4315-9e1f7675d0f49d8b.js +1 -0
  63. package/.next/static/chunks/6522.07d01cfb1ad3768e.js +1 -0
  64. package/.next/static/chunks/app/login/page-529e71a823982db0.js +1 -0
  65. package/.next/static/chunks/app/{page-60629bbe3fe259ef.js → page-0d51c0ee4910e024.js} +6 -6
  66. package/.next/static/chunks/{webpack-11f7dad1df4f814f.js → webpack-d5d95f150515a23a.js} +1 -1
  67. package/README.ja.md +28 -28
  68. package/README.ko.md +28 -28
  69. package/README.md +28 -28
  70. package/README.zh-CN.md +28 -28
  71. package/bin/node-version.js +1 -1
  72. package/bin/omp-web-options.js +1 -85
  73. package/bin/omp-web.js +1 -153
  74. package/bin/ompgui-options.js +24 -0
  75. package/bin/ompgui-security.test.mjs +8 -0
  76. package/bin/ompgui.js +31 -0
  77. package/next.config.ts +1 -0
  78. package/package.json +6 -6
  79. package/.next/static/chunks/4315-50f4eb7d435d214a.js +0 -1
  80. package/.next/static/chunks/6522.a49bd5d1f0532830.js +0 -1
  81. package/.next/static/chunks/app/login/page-e9ec076f136fb627.js +0 -1
  82. /package/.next/static/{YAZYeEe1KDqN7al9eJ-PR → VBxoKAa50kI5B1rMOpGl3}/_buildManifest.js +0 -0
  83. /package/.next/static/{YAZYeEe1KDqN7al9eJ-PR → VBxoKAa50kI5B1rMOpGl3}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- (()=>{"use strict";var e,t,a,r,d,c,f,o,n,b={},i={};function l(e){var t=i[e];if(void 0!==t)return t.exports;var a=i[e]={exports:{}},r=!0;try{b[e].call(a.exports,a,a.exports,l),r=!1}finally{r&&delete i[e]}return a.exports}l.m=b,e=[],l.O=(t,a,r,d)=>{if(a){d=d||0;for(var c=e.length;c>0&&e[c-1][2]>d;c--)e[c]=e[c-1];e[c]=[a,r,d];return}for(var f=1/0,c=0;c<e.length;c++){for(var[a,r,d]=e[c],o=!0,n=0;n<a.length;n++)(!1&d||f>=d)&&Object.keys(l.O).every(e=>l.O[e](a[n]))?a.splice(n--,1):(o=!1,d<f&&(f=d));if(o){e.splice(c--,1);var b=r();void 0!==b&&(t=b)}}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,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var d=Object.create(null);l.r(d);var c={};t=t||[null,a({}),a([]),a(a)];for(var f=2&r&&e;"object"==typeof f&&!~t.indexOf(f);f=a(f))Object.getOwnPropertyNames(f).forEach(t=>c[t]=()=>e[t]);return c.default=()=>e,l.d(d,c),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=>"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:"c74eeb0fca9a9ddf",869:"7152372b662e31af",918:"6a9bbe564e4a2d0f",934:"9006461bd0548660",973:"9efc01efd9d768a5",988:"598a97aa1337298f",1032:"d9a9179233599785",1048:"27ee8fcc7bf00d70",1063:"775c442bdbeef08b",1133:"cec7d32308adb5b9",1327:"09252bb80616cc3a",1708:"c3a1896e4cc9f8d9",1781:"9072b4c9586df549",2081:"47b6e9391094055f",2181:"ba21239d3ac39f81",2201:"9abd9168805e51f1",2258:"4defa30121ef44a5",2325:"23caf22075e51aa5",2356:"523277bb8c6bf72a",2418:"b5d9e177e10a686e",2480:"cf27ca02e5b19761",2539:"c5a4f2fd8e421c70",2619:"9431a3f48da8eef4",2695:"b732ef1965253b3f",2703:"495a65ed14b2f094",2821:"934bcf60fbdc28c6",3251:"408c817adb161919",3274:"981684293bab3573",3308:"8e27b5c43a478f0d",3336:"a76f9485fe7cb762",3716:"72bf4c9d7325debd",3995:"eca0f5bef1fc3ae5",4004:"74b9bcf5478b1663",4202:"8440832386f023c7",4238:"6f102dcbcf2ae339",4405:"7a19458960a1058e",4424:"fd0c93a807a333e1",4473:"bb35c176b3f2bf32",4559:"2e7ed39ea2757280",4854:"b64a1daa15899219",4866:"d1060b4faf2ae1e2",4970:"8a63b4953b0e4946",5020:"9ac8d0dc8390bb6e",5137:"f163e94c74a94d01",5199:"9ec1359b9aa220ab",5242:"7b643c6b3394cac1",5361:"afc00ab2626bacbf",5521:"cfdf2cfc6db31407",5526:"ff46471041fdcb79",5658:"d00c8405a87f7366",5681:"dd0e66b0de16e54b",6121:"eb9023b1cbc78ee2",6161:"4836cd7d031026bf",6195:"8710aa41b2319dff",6202:"f4317cf0a48876f9",6294:"24f510c0c3e3714c",6522:"a49bd5d1f0532830",6654:"41440ef667144967",6794:"57bf1aff78682f3a",7256:"e07cf52d87d40252",7268:"2f59c671f26160f3",7330:"7964f816a1ca64e5",7331:"2add3c4e125a2dba",7543:"89f7b805ed0f2901",7570:"db2b11eaf9806157",8133:"b2ae90f43319a29e",8200:"a36b9f8c983c6b9e",8717:"4e20eedf9544e286",8747:"ae439f2382f58c51",8863:"fa0320ea586efb3b",8885:"d9308c756376780b",8901:"e117d206a917bda0",8924:"476aa688a637649c",9365:"a3e0e5ac101ccd02",9425:"244c8a7c1c14966a",9522:"c7c6e9c330f9ba6b",9614:"3221013d7f0af27f",9698:"4d09a99b9d99f3e5",9705:"40a82b97f214e28b",9754:"d67dec946fc871d4",9764:"2669775c6e107a01",9793:"4567af813117ad25",9974:"9a0f79beca65e8c4",9981:"64e2a4c3b53b3217"})[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),r={},l.l=(e,t,a,d)=>{if(r[e])return void r[e].push(t);if(void 0!==a)for(var c,f,o=document.getElementsByTagName("script"),n=0;n<o.length;n++){var b=o[n];if(b.getAttribute("src")==e||b.getAttribute("data-webpack")=="_N_E:"+a){c=b;break}}c||(f=!0,(c=document.createElement("script")).charset="utf-8",c.timeout=120,l.nc&&c.setAttribute("nonce",l.nc),c.setAttribute("data-webpack","_N_E:"+a),c.src=l.tu(e)),r[e]=[t];var i=(t,a)=>{c.onerror=c.onload=null,clearTimeout(u);var d=r[e];if(delete r[e],c.parentNode&&c.parentNode.removeChild(c),d&&d.forEach(e=>e(a)),t)return t(a)},u=setTimeout(i.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=i.bind(null,c.onerror),c.onload=i.bind(null,c.onload),f&&document.head.appendChild(c)},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/",c={8068:0},l.f.miniCss=(e,t)=>{if(c[e])t.push(c[e]);else 0!==c[e]&&({5846:1})[e]&&t.push(c[e]=new Promise((t,a)=>{var r=l.miniCssF(e),d=l.p+r;if(((e,t)=>{for(var a=document.getElementsByTagName("link"),r=0;r<a.length;r++){var d=a[r],c=d.getAttribute("data-href")||d.getAttribute("href");if("stylesheet"===d.rel&&(c===e||c===t))return d}for(var f=document.getElementsByTagName("style"),r=0;r<f.length;r++){var d=f[r],c=d.getAttribute("data-href");if(c===e||c===t)return d}})(r,d))return t();((e,t,a,r)=>{var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onerror=d.onload=c=>{if(d.onerror=d.onload=null,"load"===c.type)a();else{var f=c&&("load"===c.type?"missing":c.type),o=c&&c.target&&c.target.href||t,n=Error("Loading CSS chunk "+e+" failed.\n("+o+")");n.code="CSS_CHUNK_LOAD_FAILED",n.type=f,n.request=o,d.parentNode.removeChild(d),r(n)}},d.href=t;if("function"==typeof _N_E_STYLE_LOAD){var c=d.href,f=d.onload,o=d.onerror;_N_E_STYLE_LOAD(0===c.indexOf(window.location.origin)?new URL(c).pathname:c).then(function(){f&&f.call(d,{type:"load"})},function(){o&&o.call(d,{})})}else document.head.appendChild(d)})(e,d,t,a)}).then(()=>{c[e]=0},t=>{throw delete c[e],t}))},f={8068:0,2859:0,2160:0,7513: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(/^(2160|2859|5846|7513|8068)$/.test(e))f[e]=0;else{var r=new Promise((t,r)=>a=f[e]=[t,r]);t.push(a[2]=r);var d=l.p+l.u(e),c=Error();l.l(d,t=>{if(l.o(f,e)&&(0!==(a=f[e])&&(f[e]=void 0),a)){var r=t&&("load"===t.type?"missing":t.type),d=t&&t.target&&t.target.src;c.message="Loading chunk "+e+" failed.\n("+r+": "+d+")",c.name="ChunkLoadError",c.type=r,c.request=d,a[1](c)}},"chunk-"+e,e)}},l.O.j=e=>0===f[e],o=(e,t)=>{var a,r,[d,c,o]=t,n=0;if(d.some(e=>0!==f[e])){for(a in c)l.o(c,a)&&(l.m[a]=c[a]);if(o)var b=o(l)}for(e&&e(t);n<d.length;n++)r=d[n],l.o(f,r)&&f[r]&&f[r][0](),f[r]=0;return l.O(b)},(n=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(o.bind(null,0)),n.push=o.bind(null,n.push.bind(n)),l.nc=void 0})();
1
+ (()=>{"use strict";var e,t,a,r,d,c,f,o,n,b={},i={};function l(e){var t=i[e];if(void 0!==t)return t.exports;var a=i[e]={exports:{}},r=!0;try{b[e].call(a.exports,a,a.exports,l),r=!1}finally{r&&delete i[e]}return a.exports}l.m=b,e=[],l.O=(t,a,r,d)=>{if(a){d=d||0;for(var c=e.length;c>0&&e[c-1][2]>d;c--)e[c]=e[c-1];e[c]=[a,r,d];return}for(var f=1/0,c=0;c<e.length;c++){for(var[a,r,d]=e[c],o=!0,n=0;n<a.length;n++)(!1&d||f>=d)&&Object.keys(l.O).every(e=>l.O[e](a[n]))?a.splice(n--,1):(o=!1,d<f&&(f=d));if(o){e.splice(c--,1);var b=r();void 0!==b&&(t=b)}}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,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var d=Object.create(null);l.r(d);var c={};t=t||[null,a({}),a([]),a(a)];for(var f=2&r&&e;"object"==typeof f&&!~t.indexOf(f);f=a(f))Object.getOwnPropertyNames(f).forEach(t=>c[t]=()=>e[t]);return c.default=()=>e,l.d(d,c),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=>"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:"c74eeb0fca9a9ddf",869:"7152372b662e31af",918:"6a9bbe564e4a2d0f",934:"9006461bd0548660",973:"9efc01efd9d768a5",988:"598a97aa1337298f",1032:"d9a9179233599785",1048:"27ee8fcc7bf00d70",1063:"775c442bdbeef08b",1133:"cec7d32308adb5b9",1327:"09252bb80616cc3a",1708:"c3a1896e4cc9f8d9",1781:"9072b4c9586df549",2081:"47b6e9391094055f",2181:"ba21239d3ac39f81",2201:"9abd9168805e51f1",2258:"4defa30121ef44a5",2325:"23caf22075e51aa5",2356:"523277bb8c6bf72a",2418:"b5d9e177e10a686e",2480:"cf27ca02e5b19761",2539:"c5a4f2fd8e421c70",2619:"9431a3f48da8eef4",2695:"b732ef1965253b3f",2703:"495a65ed14b2f094",2821:"934bcf60fbdc28c6",3251:"408c817adb161919",3274:"981684293bab3573",3308:"8e27b5c43a478f0d",3336:"a76f9485fe7cb762",3716:"72bf4c9d7325debd",3995:"eca0f5bef1fc3ae5",4004:"74b9bcf5478b1663",4202:"8440832386f023c7",4238:"6f102dcbcf2ae339",4405:"7a19458960a1058e",4424:"fd0c93a807a333e1",4473:"bb35c176b3f2bf32",4559:"2e7ed39ea2757280",4854:"b64a1daa15899219",4866:"d1060b4faf2ae1e2",4970:"8a63b4953b0e4946",5020:"9ac8d0dc8390bb6e",5137:"f163e94c74a94d01",5199:"9ec1359b9aa220ab",5242:"7b643c6b3394cac1",5361:"afc00ab2626bacbf",5521:"cfdf2cfc6db31407",5526:"ff46471041fdcb79",5658:"d00c8405a87f7366",5681:"dd0e66b0de16e54b",6121:"eb9023b1cbc78ee2",6161:"4836cd7d031026bf",6195:"8710aa41b2319dff",6202:"f4317cf0a48876f9",6294:"24f510c0c3e3714c",6522:"07d01cfb1ad3768e",6654:"41440ef667144967",6794:"57bf1aff78682f3a",7256:"e07cf52d87d40252",7268:"2f59c671f26160f3",7330:"7964f816a1ca64e5",7331:"2add3c4e125a2dba",7543:"89f7b805ed0f2901",7570:"db2b11eaf9806157",8133:"b2ae90f43319a29e",8200:"a36b9f8c983c6b9e",8717:"4e20eedf9544e286",8747:"ae439f2382f58c51",8863:"fa0320ea586efb3b",8885:"d9308c756376780b",8901:"e117d206a917bda0",8924:"476aa688a637649c",9365:"a3e0e5ac101ccd02",9425:"244c8a7c1c14966a",9522:"c7c6e9c330f9ba6b",9614:"3221013d7f0af27f",9698:"4d09a99b9d99f3e5",9705:"40a82b97f214e28b",9754:"d67dec946fc871d4",9764:"2669775c6e107a01",9793:"4567af813117ad25",9974:"9a0f79beca65e8c4",9981:"64e2a4c3b53b3217"})[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),r={},l.l=(e,t,a,d)=>{if(r[e])return void r[e].push(t);if(void 0!==a)for(var c,f,o=document.getElementsByTagName("script"),n=0;n<o.length;n++){var b=o[n];if(b.getAttribute("src")==e||b.getAttribute("data-webpack")=="_N_E:"+a){c=b;break}}c||(f=!0,(c=document.createElement("script")).charset="utf-8",c.timeout=120,l.nc&&c.setAttribute("nonce",l.nc),c.setAttribute("data-webpack","_N_E:"+a),c.src=l.tu(e)),r[e]=[t];var i=(t,a)=>{c.onerror=c.onload=null,clearTimeout(u);var d=r[e];if(delete r[e],c.parentNode&&c.parentNode.removeChild(c),d&&d.forEach(e=>e(a)),t)return t(a)},u=setTimeout(i.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=i.bind(null,c.onerror),c.onload=i.bind(null,c.onload),f&&document.head.appendChild(c)},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/",c={8068:0},l.f.miniCss=(e,t)=>{if(c[e])t.push(c[e]);else 0!==c[e]&&({5846:1})[e]&&t.push(c[e]=new Promise((t,a)=>{var r=l.miniCssF(e),d=l.p+r;if(((e,t)=>{for(var a=document.getElementsByTagName("link"),r=0;r<a.length;r++){var d=a[r],c=d.getAttribute("data-href")||d.getAttribute("href");if("stylesheet"===d.rel&&(c===e||c===t))return d}for(var f=document.getElementsByTagName("style"),r=0;r<f.length;r++){var d=f[r],c=d.getAttribute("data-href");if(c===e||c===t)return d}})(r,d))return t();((e,t,a,r)=>{var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onerror=d.onload=c=>{if(d.onerror=d.onload=null,"load"===c.type)a();else{var f=c&&("load"===c.type?"missing":c.type),o=c&&c.target&&c.target.href||t,n=Error("Loading CSS chunk "+e+" failed.\n("+o+")");n.code="CSS_CHUNK_LOAD_FAILED",n.type=f,n.request=o,d.parentNode.removeChild(d),r(n)}},d.href=t;if("function"==typeof _N_E_STYLE_LOAD){var c=d.href,f=d.onload,o=d.onerror;_N_E_STYLE_LOAD(0===c.indexOf(window.location.origin)?new URL(c).pathname:c).then(function(){f&&f.call(d,{type:"load"})},function(){o&&o.call(d,{})})}else document.head.appendChild(d)})(e,d,t,a)}).then(()=>{c[e]=0},t=>{throw delete c[e],t}))},f={8068:0,2859:0,2160:0,7513: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(/^(2160|2859|5846|7513|8068)$/.test(e))f[e]=0;else{var r=new Promise((t,r)=>a=f[e]=[t,r]);t.push(a[2]=r);var d=l.p+l.u(e),c=Error();l.l(d,t=>{if(l.o(f,e)&&(0!==(a=f[e])&&(f[e]=void 0),a)){var r=t&&("load"===t.type?"missing":t.type),d=t&&t.target&&t.target.src;c.message="Loading chunk "+e+" failed.\n("+r+": "+d+")",c.name="ChunkLoadError",c.type=r,c.request=d,a[1](c)}},"chunk-"+e,e)}},l.O.j=e=>0===f[e],o=(e,t)=>{var a,r,[d,c,o]=t,n=0;if(d.some(e=>0!==f[e])){for(a in c)l.o(c,a)&&(l.m[a]=c[a]);if(o)var b=o(l)}for(e&&e(t);n<d.length;n++)r=d[n],l.o(f,r)&&f[r]&&f[r][0](),f[r]=0;return l.O(b)},(n=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(o.bind(null,0)),n.push=o.bind(null,n.push.bind(n)),l.nc=void 0})();
package/README.ja.md CHANGED
@@ -1,17 +1,17 @@
1
- # ompweb
1
+ # ompgui
2
2
 
3
3
  [English](./README.md) | [한국어](./README.ko.md) | [日本語](./README.ja.md) | [简体中文](./README.zh-CN.md)
4
4
 
5
- [oh-my-pi (omp) コーディングエージェント](https://github.com/can1357/oh-my-pi)のローカル Web UI です。ompweb はローカルの omp セッションファイルを読み込み、セッションの閲覧、リアルタイムチャット、モデル設定、スキル管理、プロジェクトファイルのプレビューを行えるブラウザワークスペースを提供します。
5
+ [oh-my-pi (omp) コーディングエージェント](https://github.com/can1357/oh-my-pi)のローカル Web UI です。ompgui はローカルの omp セッションファイルを読み込み、セッションの閲覧、リアルタイムチャット、モデル設定、スキル管理、プロジェクトファイルのプレビューを行えるブラウザワークスペースを提供します。
6
6
 
7
- ![ompweb — ライトテーマ](docs/screenshot-light.png)
7
+ ![ompgui — ライトテーマ](docs/screenshot-light.png)
8
8
 
9
9
  <details>
10
10
  <summary>ダークテーマとコマンドパレット</summary>
11
11
 
12
- ![ompweb — ダークテーマ](docs/screenshot-dark.png)
12
+ ![ompgui — ダークテーマ](docs/screenshot-dark.png)
13
13
 
14
- ![ompweb — コマンドパレット](docs/screenshot-palette.png)
14
+ ![ompgui — コマンドパレット](docs/screenshot-palette.png)
15
15
 
16
16
  </details>
17
17
 
@@ -32,33 +32,33 @@ npx ompgui@latest
32
32
 
33
33
  ```bash
34
34
  npm install -g ompgui
35
- ompweb
35
+ ompgui
36
36
  ```
37
37
 
38
- 続いて [http://127.0.0.1:30177](http://127.0.0.1:30177) を開きます。サーバーの準備が整うと、CLI はブラウザを自動的に開こうとします。ompweb はデフォルトで `127.0.0.1` で待ち受けます。
38
+ 続いて [http://127.0.0.1:30177](http://127.0.0.1:30177) を開きます。サーバーの準備が整うと、CLI はブラウザを自動的に開こうとします。ompgui はデフォルトで `127.0.0.1` で待ち受けます。
39
39
 
40
40
  **オプション:**
41
41
 
42
42
  ```bash
43
- ompweb --port 8080 # カスタムポート
44
- ompweb --hostname 0.0.0.0 # 信頼できるネットワークに公開
45
- ompweb -p 8080 -H 0.0.0.0 # オプションを組み合わせる
46
- ompweb --no-open # ブラウザを自動的に開かない
47
-
48
- ompweb --password "a-long-random-password" # パスワードのみのサインインを有効化(Windows でも同様)
49
-
50
- PORT=8080 ompweb # 環境変数にも対応
51
- OMP_WEB_HOSTNAME=0.0.0.0 ompweb # ネットワーク公開を明示的に有効化
52
- OMP_WEB_PASSWORD='a-long-random-password' ompweb # 環境変数でも同様(POSIX)
53
- # Windows: $env:OMP_WEB_PASSWORD="secret"; ompweb
54
- OMP_WEB_NO_OPEN=1 ompweb # バックグラウンドサービスとして実行する場合に便利
43
+ ompgui --port 8080 # カスタムポート
44
+ ompgui --hostname 0.0.0.0 # 信頼できるネットワークに公開
45
+ ompgui -p 8080 -H 0.0.0.0 # オプションを組み合わせる
46
+ ompgui --no-open # ブラウザを自動的に開かない
47
+
48
+ ompgui --password "a-long-random-password" # パスワードのみのサインインを有効化(Windows でも同様)
49
+
50
+ PORT=8080 ompgui # 環境変数にも対応
51
+ OMP_WEB_HOSTNAME=0.0.0.0 ompgui # ネットワーク公開を明示的に有効化
52
+ OMP_WEB_PASSWORD='a-long-random-password' ompgui # 環境変数でも同様(POSIX)
53
+ # Windows: $env:OMP_WEB_PASSWORD="secret"; ompgui
54
+ OMP_WEB_NO_OPEN=1 ompgui # バックグラウンドサービスとして実行する場合に便利
55
55
  ```
56
56
 
57
- `OMP_WEB_PASSWORD` を設定すると、テーマに統合されたパスワードのみのサインイン画面で UI とすべての API エンドポイントを保護できます。サインイン後は HTTP-only の署名付きセッションクッキーが 30 日間有効です。未設定なら認証は無効です。リモート利用では、パスワードとセッションクッキーを守るため、信頼できるリバースプロキシまたは VPN 経由の HTTPS が必要です。ompweb をインターネットへ直接公開しないでください。
57
+ `OMP_WEB_PASSWORD` を設定すると、テーマに統合されたパスワードのみのサインイン画面で UI とすべての API エンドポイントを保護できます。サインイン後は HTTP-only の署名付きセッションクッキーが 30 日間有効です。未設定なら認証は無効です。リモート利用では、パスワードとセッションクッキーを守るため、信頼できるリバースプロキシまたは VPN 経由の HTTPS が必要です。ompgui をインターネットへ直接公開しないでください。
58
58
 
59
59
  ## リモート・モバイルアクセス(Tailscale 推奨)
60
60
 
61
- モバイル端末(iPhone、iPad、Android)や外部のノートPCから `ompweb` にアクセスする場合は、**[Tailscale](https://tailscale.com/) の利用を強く推奨します**。ポート開放やグローバルIPの公開なしに、端末間の暗号化メッシュVPNを通じて最も安全にリモートアクセスできます。
61
+ モバイル端末(iPhone、iPad、Android)や外部のノートPCから `ompgui` にアクセスする場合は、**[Tailscale](https://tailscale.com/) の利用を強く推奨します**。ポート開放やグローバルIPの公開なしに、端末間の暗号化メッシュVPNを通じて最も安全にリモートアクセスできます。
62
62
 
63
63
  ### 1. パスワードの設定(セキュリティ上必須)
64
64
 
@@ -66,18 +66,18 @@ OMP_WEB_NO_OPEN=1 ompweb # バックグラウンドサービスとして
66
66
 
67
67
  ```bash
68
68
  # CLI オプションでパスワードを設定して全インターフェースにバインド
69
- ompweb -H 0.0.0.0 --password "your-strong-password"
69
+ ompgui -H 0.0.0.0 --password "your-strong-password"
70
70
 
71
71
  # または環境変数で設定
72
- OMP_WEB_HOSTNAME=0.0.0.0 OMP_WEB_PASSWORD="your-strong-password" ompweb
72
+ OMP_WEB_HOSTNAME=0.0.0.0 OMP_WEB_PASSWORD="your-strong-password" ompgui
73
73
  ```
74
74
 
75
75
  ### 2. Tailscale 接続手順
76
76
 
77
77
  1. **Tailscale をインストール**: ホストPCとモバイル端末に [Tailscale](https://tailscale.com/download) をインストールし、同一アカウントでログインします。
78
- 2. **ホストPCで ompweb を起動**:
78
+ 2. **ホストPCで ompgui を起動**:
79
79
  ```bash
80
- ompweb --hostname 0.0.0.0 --password "your-strong-password"
80
+ ompgui --hostname 0.0.0.0 --password "your-strong-password"
81
81
  ```
82
82
  3. **モバイルブラウザからアクセス**:
83
83
  - ホストPCの Tailscale IP(例: `100.x.y.z`)または MagicDNS マシン名でアクセスします:
@@ -117,7 +117,7 @@ OMP_WEB_HOSTNAME=0.0.0.0 OMP_WEB_PASSWORD="your-strong-password" ompweb
117
117
 
118
118
  ## アーキテクチャ
119
119
 
120
- ompweb は Node 上でホストされる Next.js アプリで、インストール済みの `omp` バイナリを操作します。エージェント自体は同梱していません:
120
+ ompgui は Node 上でホストされる Next.js アプリで、インストール済みの `omp` バイナリを操作します。エージェント自体は同梱していません:
121
121
 
122
122
  - **ライブセッション**: `omp --mode rpc-ui`(stdio 上の NDJSON)を、アクティブなセッションごとに 1 つの子プロセスとして起動します。そのため、エージェントのバージョンは常にインストールされているものと完全に一致します。
123
123
  - **セッション閲覧**: omp のセッションファイル(`~/.omp/agent/sessions/<encoded-cwd>/<timestamp>_<uuid>.jsonl`)を直接読み込みます。タイトル変更、アーカイブ、削除は、OMP のライブ書き込みと競合しないよう保護されたネイティブファイルのメンテナンス操作です。
@@ -147,7 +147,7 @@ node --test lib/*.test.mjs components/*.test.mjs # テスト実行
147
147
 
148
148
  ## 国際化
149
149
 
150
- ompweb は英語、簡体字中国語(简体中文)、日本語、韓国語(한국어)をサポートし、4 言語で UI 全体の翻訳文字列を提供しています。言語は `navigator.language` から自動検出され、トップバーの言語メニューから実行時に切り替えできます。選択はセッション間で永続化されます。
150
+ ompgui は英語、簡体字中国語(简体中文)、日本語、韓国語(한국어)をサポートし、4 言語で UI 全体の翻訳文字列を提供しています。言語は `navigator.language` から自動検出され、トップバーの言語メニューから実行時に切り替えできます。選択はセッション間で永続化されます。
151
151
 
152
152
  - 辞書ファイル: `lib/i18n/locales/{en,zh-CN,ja,ko}.json`
153
153
  - フレームワーク: `lib/i18n/index.tsx` — `useSyncExternalStore` ベースの軽量ストア、`{var}` 補間と複数形サポート(`.one`/`.other`)
@@ -162,7 +162,7 @@ ompweb は英語、簡体字中国語(简体中文)、日本語、韓国語
162
162
 
163
163
  ## クレジット
164
164
 
165
- ompweb は [agegr/pi-web](https://github.com/agegr/pi-web)(MIT)のフォークです。pi-web は [badlogic/pi-mono](https://github.com/badlogic/pi-mono) の pi コーディングエージェント向け Web UI で、これを [can1357/oh-my-pi](https://github.com/can1357/oh-my-pi) 向けに適合させたものです。
165
+ ompgui は [agegr/pi-web](https://github.com/agegr/pi-web)(MIT)のフォークです。pi-web は [badlogic/pi-mono](https://github.com/badlogic/pi-mono) の pi コーディングエージェント向け Web UI で、これを [can1357/oh-my-pi](https://github.com/can1357/oh-my-pi) 向けに適合させたものです。
166
166
 
167
167
  ## ライセンス
168
168
 
package/README.ko.md CHANGED
@@ -1,15 +1,15 @@
1
- # ompweb
1
+ # ompgui
2
2
 
3
3
  [English](./README.md) | [한국어](./README.ko.md) | [日本語](./README.ja.md) | [简体中文](./README.zh-CN.md)
4
4
 
5
- [oh-my-pi (omp) 코딩 에이전트](https://github.com/can1357/oh-my-pi)를 위한 로컬 웹 UI입니다. ompweb은 로컬 omp 세션 파일을 읽어 브라우저에서 세션 탐색, 실시간 채팅, 모델 설정, 스킬 관리, 프로젝트 파일 미리보기를 제공하는 워크스페이스를 엽니다.
5
+ [oh-my-pi (omp) 코딩 에이전트](https://github.com/can1357/oh-my-pi)를 위한 로컬 웹 UI입니다. ompgui은 로컬 omp 세션 파일을 읽어 브라우저에서 세션 탐색, 실시간 채팅, 모델 설정, 스킬 관리, 프로젝트 파일 미리보기를 제공하는 워크스페이스를 엽니다.
6
6
 
7
- ![ompweb — 라이트 테마](docs/screenshot-light.png)
7
+ ![ompgui — 라이트 테마](docs/screenshot-light.png)
8
8
 
9
9
  <details>
10
10
  <summary>다크 테마</summary>
11
11
 
12
- ![ompweb — 다크 테마](docs/screenshot-dark.png)
12
+ ![ompgui — 다크 테마](docs/screenshot-dark.png)
13
13
 
14
14
  </details>
15
15
 
@@ -30,36 +30,36 @@ npx ompgui@latest
30
30
 
31
31
  ```bash
32
32
  npm install -g ompgui
33
- ompweb
33
+ ompgui
34
34
  ```
35
35
 
36
- 그다음 [http://127.0.0.1:30177](http://127.0.0.1:30177)을 여세요. 서버가 준비되면 CLI가 브라우저를 자동으로 열려고 시도합니다. ompweb은 기본적으로 `127.0.0.1`에서 수신합니다.
36
+ 그다음 [http://127.0.0.1:30177](http://127.0.0.1:30177)을 여세요. 서버가 준비되면 CLI가 브라우저를 자동으로 열려고 시도합니다. ompgui은 기본적으로 `127.0.0.1`에서 수신합니다.
37
37
 
38
38
  **옵션:**
39
39
 
40
40
  ```bash
41
- ompweb --port 8080 # 포트 지정
42
- ompweb --hostname 0.0.0.0 # 신뢰할 수 있는 네트워크에 노출
43
- ompweb -p 8080 -H 0.0.0.0 # 옵션 조합
44
- ompweb --no-open # 브라우저 자동 열기 안 함
45
- ompweb --password "a-long-random-password" # POSIX 인라인 환경 변수 없이 비밀번호만으로 로그인
41
+ ompgui --port 8080 # 포트 지정
42
+ ompgui --hostname 0.0.0.0 # 신뢰할 수 있는 네트워크에 노출
43
+ ompgui -p 8080 -H 0.0.0.0 # 옵션 조합
44
+ ompgui --no-open # 브라우저 자동 열기 안 함
45
+ ompgui --password "a-long-random-password" # POSIX 인라인 환경 변수 없이 비밀번호만으로 로그인
46
46
 
47
- PORT=8080 ompweb # 환경 변수도 지원
48
- OMP_WEB_HOSTNAME=0.0.0.0 ompweb # 네트워크에 명시적으로 노출
49
- OMP_WEB_PASSWORD='a-long-random-password' ompweb # 환경 변수 방식(POSIX: 인라인 또는 export)
50
- OMP_WEB_NO_OPEN=1 ompweb # 백그라운드 서비스로 실행할 때 유용
47
+ PORT=8080 ompgui # 환경 변수도 지원
48
+ OMP_WEB_HOSTNAME=0.0.0.0 ompgui # 네트워크에 명시적으로 노출
49
+ OMP_WEB_PASSWORD='a-long-random-password' ompgui # 환경 변수 방식(POSIX: 인라인 또는 export)
50
+ OMP_WEB_NO_OPEN=1 ompgui # 백그라운드 서비스로 실행할 때 유용
51
51
 
52
52
  # Windows (PowerShell / CMD)
53
- # $env:OMP_WEB_PASSWORD="a-long-random-password"; ompweb
53
+ # $env:OMP_WEB_PASSWORD="a-long-random-password"; ompgui
54
54
  # 또는
55
- # ompweb --password "a-long-random-password"
55
+ # ompgui --password "a-long-random-password"
56
56
  ```
57
57
 
58
- `OMP_WEB_PASSWORD`를 설정하거나 `--password`를 전달하면 테마가 적용된 비밀번호 전용 로그인 화면으로 인터페이스와 모든 API 엔드포인트를 보호합니다. 로그인에 성공하면 30일 동안 유효한 HTTP 전용 서명 세션 쿠키가 생성됩니다. 설정된 비밀번호를 변경하면 기존 세션이 무효화됩니다. 변수를 설정하지 않으면 인증이 비활성화됩니다. 원격 사용 시 비밀번호와 세션 쿠키가 가로채이지 않도록 신뢰할 수 있는 리버스 프록시나 VPN을 통해 HTTPS를 사용해야 합니다. Windows 환경 변수 문법은 `$env:OMP_WEB_PASSWORD="..."`이며, `ompweb --password "..."`는 별도 문법 없이 모든 셸에서 작동합니다.
58
+ `OMP_WEB_PASSWORD`를 설정하거나 `--password`를 전달하면 테마가 적용된 비밀번호 전용 로그인 화면으로 인터페이스와 모든 API 엔드포인트를 보호합니다. 로그인에 성공하면 30일 동안 유효한 HTTP 전용 서명 세션 쿠키가 생성됩니다. 설정된 비밀번호를 변경하면 기존 세션이 무효화됩니다. 변수를 설정하지 않으면 인증이 비활성화됩니다. 원격 사용 시 비밀번호와 세션 쿠키가 가로채이지 않도록 신뢰할 수 있는 리버스 프록시나 VPN을 통해 HTTPS를 사용해야 합니다. Windows 환경 변수 문법은 `$env:OMP_WEB_PASSWORD="..."`이며, `ompgui --password "..."`는 별도 문법 없이 모든 셸에서 작동합니다.
59
59
 
60
60
  ## 원격 및 모바일 접속 (Tailscale 권장)
61
61
 
62
- 외부나 모바일 기기(iPhone, iPad, Android)에서 로컬 PC의 `ompweb`에 접속할 때는 **[Tailscale](https://tailscale.com/) 가상 사설망(VPN)을 사용하는 것을 강력히 권장**합니다. 포트 포워딩이나 공인 IP 노출 없이 종단간 암호화(P2P)를 통해 가장 안전하게 원격 접속할 수 있습니다.
62
+ 외부나 모바일 기기(iPhone, iPad, Android)에서 로컬 PC의 `ompgui`에 접속할 때는 **[Tailscale](https://tailscale.com/) 가상 사설망(VPN)을 사용하는 것을 강력히 권장**합니다. 포트 포워딩이나 공인 IP 노출 없이 종단간 암호화(P2P)를 통해 가장 안전하게 원격 접속할 수 있습니다.
63
63
 
64
64
  ### 1. 비밀번호 설정 (보안 필수)
65
65
 
@@ -67,18 +67,18 @@ OMP_WEB_NO_OPEN=1 ompweb # 백그라운드 서비스로 실행할 때 유
67
67
 
68
68
  ```bash
69
69
  # CLI 옵션으로 비밀번호 설정 및 전체 네트워크 바인딩
70
- ompweb -H 0.0.0.0 --password "your-strong-password"
70
+ ompgui -H 0.0.0.0 --password "your-strong-password"
71
71
 
72
72
  # 또는 환경 변수로 설정
73
- OMP_WEB_HOSTNAME=0.0.0.0 OMP_WEB_PASSWORD="your-strong-password" ompweb
73
+ OMP_WEB_HOSTNAME=0.0.0.0 OMP_WEB_PASSWORD="your-strong-password" ompgui
74
74
  ```
75
75
 
76
76
  ### 2. Tailscale 연결 단계
77
77
 
78
78
  1. **Tailscale 설치**: 호스트 PC와 모바일 기기에 [Tailscale](https://tailscale.com/download)을 설치하고 동일한 계정으로 로그인합니다.
79
- 2. **호스트 PC에서 ompweb 실행**:
79
+ 2. **호스트 PC에서 ompgui 실행**:
80
80
  ```bash
81
- ompweb --hostname 0.0.0.0 --password "your-strong-password"
81
+ ompgui --hostname 0.0.0.0 --password "your-strong-password"
82
82
  ```
83
83
  3. **모바일 브라우저에서 접속**:
84
84
  - 호스트 PC의 Tailscale IP(예: `100.x.y.z`) 또는 MagicDNS 머신 이름으로 접속합니다:
@@ -91,10 +91,10 @@ OMP_WEB_HOSTNAME=0.0.0.0 OMP_WEB_PASSWORD="your-strong-password" ompweb
91
91
 
92
92
  ### 보안 및 문제 해결
93
93
 
94
- - 서버는 기본적으로 `127.0.0.1`에 바인딩됩니다. 루프백이 아닌 호스트 이름은 명시적으로 선택해야 하며 신뢰할 수 있는 네트워크 경계 뒤에서만 사용하세요. ompweb을 공개적으로 노출하는 것은 안전하지 않습니다.
94
+ - 서버는 기본적으로 `127.0.0.1`에 바인딩됩니다. 루프백이 아닌 호스트 이름은 명시적으로 선택해야 하며 신뢰할 수 있는 네트워크 경계 뒤에서만 사용하세요. ompgui을 공개적으로 노출하는 것은 안전하지 않습니다.
95
95
  - 파일 API는 선택한 워크스페이스, 유효한 Git worktree, 세션에서 참조된 디렉터리, 명시적으로 선택한 루트만 허용합니다. 경로를 정규화하여 경로 탈출과 심볼릭 링크 탈출을 차단합니다.
96
96
  - `omp`는 먼저 `OMP_WEB_OMP_BIN`, 다음으로 `PATH`에서 확인합니다. 실시간 채팅을 시작할 수 없으면 같은 터미널에서 `omp --version`을 실행하거나 실행 파일의 절대 경로를 `OMP_WEB_OMP_BIN`에 설정하세요.
97
- - 세션 기록은 기본 OMP JSONL 형식으로 유지됩니다. 실시간 세션 쓰기는 OMP가 담당하며, ompweb은 직접 파일을 읽고 실시간 OMP 쓰기와 충돌하지 않을 때만 명시적인 제목·보관·삭제 작업을 수행합니다.
97
+ - 세션 기록은 기본 OMP JSONL 형식으로 유지됩니다. 실시간 세션 쓰기는 OMP가 담당하며, ompgui은 직접 파일을 읽고 실시간 OMP 쓰기와 충돌하지 않을 때만 명시적인 제목·보관·삭제 작업을 수행합니다.
98
98
  - 세션 보관은 OMP의 기본 `archive/sessions/<cwd>/<file>.jsonl.gz` 레이아웃을 사용하며, 트랜스크립트와 함께 관련 아티팩트를 이동합니다. 원본 JSONL 바이트는 gzip 안에 보존됩니다.
99
99
 
100
100
  ## 기능
@@ -128,7 +128,7 @@ OMP_WEB_HOSTNAME=0.0.0.0 OMP_WEB_PASSWORD="your-strong-password" ompweb
128
128
 
129
129
  ## 아키텍처
130
130
 
131
- ompweb은 Node가 호스팅하는 Next.js 앱으로, 설치된 `omp` 바이너리를 구동합니다. 에이전트를 내장하지 않습니다.
131
+ ompgui은 Node가 호스팅하는 Next.js 앱으로, 설치된 `omp` 바이너리를 구동합니다. 에이전트를 내장하지 않습니다.
132
132
 
133
133
  - **실시간 세션**: `omp --mode rpc-ui`(stdio 기반 NDJSON)를 실행하며 활성 세션마다 자식 프로세스를 하나씩 사용합니다. 설치된 OMP가 RPC v2를 알리면 v2를 협상하고, 큰 프레임은 제한된 청크 재조립을 사용하며, 구버전은 v1로 폴백합니다. 실행 전 호스트 환경(`PORT`, `NEXT_*`, `NODE_ENV`)을 제거하고 POSIX(프로세스 그룹)와 Windows(`taskkill /t`) 모두 정상 종료를 지원합니다.
134
134
  - **세션 탐색**: omp 세션 파일(`~/.omp/agent/sessions/<encoded-cwd>/<timestamp>_<uuid>.jsonl`)을 직접 읽습니다. 제목·보관·삭제는 실시간 OMP 쓰기를 보호하는 제한적인 기본 파일 유지보수 작업입니다. 프로젝트는 안정적인 `projectKey`(Windows 대소문자 무시, 심볼릭 링크 해석)로 묶어 사이드바가 드라이브나 worktree 사이에서 이동하지 않게 합니다.
@@ -161,7 +161,7 @@ npm run build # 프로덕션 빌드
161
161
 
162
162
  ## 국제화
163
163
 
164
- ompweb은 영어, 중국어 간체(简体中文), 일본어(日本語), 한국어(한국어)를 지원하며 모든 언어에서 전체 UI 문자열을 번역합니다. 언어는 `navigator.language`에서 자동 감지하고 상단 바의 언어 메뉴에서 실행 중 전환할 수 있습니다. 선택한 언어는 세션 간 유지됩니다.
164
+ ompgui은 영어, 중국어 간체(简体中文), 일본어(日本語), 한국어(한국어)를 지원하며 모든 언어에서 전체 UI 문자열을 번역합니다. 언어는 `navigator.language`에서 자동 감지하고 상단 바의 언어 메뉴에서 실행 중 전환할 수 있습니다. 선택한 언어는 세션 간 유지됩니다.
165
165
 
166
166
  - 사전: `lib/i18n/locales/{en,zh-CN,ja,ko}.json`
167
167
  - 프레임워크: `lib/i18n/index.tsx` — `{var}` 보간과 복수형(`.one`/`.other`)을 지원하는 `useSyncExternalStore` 기반 경량 스토어
@@ -176,7 +176,7 @@ ompweb은 영어, 중국어 간체(简体中文), 일본어(日本語), 한국
176
176
 
177
177
  ## 크레딧
178
178
 
179
- ompweb은 [earendil-works/pi](https://github.com/earendil-works/pi) pi 코딩 에이전트의 웹 UI인 [agegr/pi-web](https://github.com/agegr/pi-web)(MIT)을 포크하여 [can1357/oh-my-pi](https://github.com/can1357/oh-my-pi)에 맞게 수정한 프로젝트입니다.
179
+ ompgui은 [earendil-works/pi](https://github.com/earendil-works/pi) pi 코딩 에이전트의 웹 UI인 [agegr/pi-web](https://github.com/agegr/pi-web)(MIT)을 포크하여 [can1357/oh-my-pi](https://github.com/can1357/oh-my-pi)에 맞게 수정한 프로젝트입니다.
180
180
 
181
181
  ## 라이선스
182
182
 
package/README.md CHANGED
@@ -1,15 +1,15 @@
1
- # ompweb
1
+ # ompgui
2
2
 
3
3
  [English](./README.md) | [한국어](./README.ko.md) | [日本語](./README.ja.md) | [简体中文](./README.zh-CN.md)
4
4
 
5
- Local web UI for the [oh-my-pi (omp) coding agent](https://github.com/can1357/oh-my-pi). ompweb reads your local omp session files and gives you a browser workspace for session browsing, real-time chat, model configuration, skill management, and project file preview.
5
+ Local web UI for the [oh-my-pi (omp) coding agent](https://github.com/can1357/oh-my-pi). ompgui reads your local omp session files and gives you a browser workspace for session browsing, real-time chat, model configuration, skill management, and project file preview.
6
6
 
7
- ![ompweb — light theme](docs/screenshot-light.png)
7
+ ![ompgui — light theme](docs/screenshot-light.png)
8
8
 
9
9
  <details>
10
10
  <summary>Dark theme</summary>
11
11
 
12
- ![ompweb — dark theme](docs/screenshot-dark.png)
12
+ ![ompgui — dark theme](docs/screenshot-dark.png)
13
13
 
14
14
  </details>
15
15
 
@@ -30,36 +30,36 @@ npx ompgui@latest
30
30
 
31
31
  ```bash
32
32
  npm install -g ompgui
33
- ompweb
33
+ ompgui
34
34
  ```
35
35
 
36
- Then open [http://127.0.0.1:30177](http://127.0.0.1:30177). The CLI will try to open the browser automatically after the server is ready. ompweb listens on `127.0.0.1` by default.
36
+ Then open [http://127.0.0.1:30177](http://127.0.0.1:30177). The CLI will try to open the browser automatically after the server is ready. ompgui listens on `127.0.0.1` by default.
37
37
 
38
38
  **Options:**
39
39
 
40
40
  ```bash
41
- ompweb --port 8080 # custom port
42
- ompweb --hostname 0.0.0.0 # expose on a trusted network
43
- ompweb -p 8080 -H 0.0.0.0 # combine options
44
- ompweb --no-open # do not open the browser automatically
45
- ompweb --password "a-long-random-password" # password-only sign-in without POSIX inline-env syntax
41
+ ompgui --port 8080 # custom port
42
+ ompgui --hostname 0.0.0.0 # expose on a trusted network
43
+ ompgui -p 8080 -H 0.0.0.0 # combine options
44
+ ompgui --no-open # do not open the browser automatically
45
+ ompgui --password "a-long-random-password" # password-only sign-in without POSIX inline-env syntax
46
46
 
47
- PORT=8080 ompweb # environment variable is also supported
48
- OMP_WEB_HOSTNAME=0.0.0.0 ompweb # explicit network exposure
49
- OMP_WEB_PASSWORD='a-long-random-password' ompweb # env-variable form (POSIX: inline or exported)
50
- OMP_WEB_NO_OPEN=1 ompweb # useful when running as a background service
47
+ PORT=8080 ompgui # environment variable is also supported
48
+ OMP_WEB_HOSTNAME=0.0.0.0 ompgui # explicit network exposure
49
+ OMP_WEB_PASSWORD='a-long-random-password' ompgui # env-variable form (POSIX: inline or exported)
50
+ OMP_WEB_NO_OPEN=1 ompgui # useful when running as a background service
51
51
 
52
52
  # Windows (PowerShell / CMD)
53
- # $env:OMP_WEB_PASSWORD="a-long-random-password"; ompweb
53
+ # $env:OMP_WEB_PASSWORD="a-long-random-password"; ompgui
54
54
  # or
55
- # ompweb --password "a-long-random-password"
55
+ # ompgui --password "a-long-random-password"
56
56
  ```
57
57
 
58
- Set `OMP_WEB_PASSWORD` (or pass `--password`) to protect the interface and every API endpoint with a themed, password-only sign-in screen. A successful sign-in creates an HTTP-only signed session cookie for 30 days; changing the configured password invalidates existing sessions. Leaving the variable unset disables authentication. Remote use still requires HTTPS through a trusted reverse proxy or VPN so the password and session cookie cannot be intercepted. On Windows the env-variable syntax is `$env:OMP_WEB_PASSWORD="..."`; `ompweb --password "..."` works in every shell without that extra step.
58
+ Set `OMP_WEB_PASSWORD` (or pass `--password`) to protect the interface and every API endpoint with a themed, password-only sign-in screen. A successful sign-in creates an HTTP-only signed session cookie for 30 days; changing the configured password invalidates existing sessions. Leaving the variable unset disables authentication. Remote use still requires HTTPS through a trusted reverse proxy or VPN so the password and session cookie cannot be intercepted. On Windows the env-variable syntax is `$env:OMP_WEB_PASSWORD="..."`; `ompgui --password "..."` works in every shell without that extra step.
59
59
 
60
60
  ## Remote & Mobile Access (Tailscale Recommended)
61
61
 
62
- For accessing `ompweb` from mobile devices (iPhone, iPad, Android) or external laptops, **using [Tailscale](https://tailscale.com/) is strongly recommended**. Tailscale creates a private, point-to-point WireGuard mesh VPN between your devices without exposing your host machine to the public internet or requiring port forwarding.
62
+ For accessing `ompgui` from mobile devices (iPhone, iPad, Android) or external laptops, **using [Tailscale](https://tailscale.com/) is strongly recommended**. Tailscale creates a private, point-to-point WireGuard mesh VPN between your devices without exposing your host machine to the public internet or requiring port forwarding.
63
63
 
64
64
  ### 1. Configure Password (Required for Remote Access)
65
65
 
@@ -67,18 +67,18 @@ When binding to external network interfaces, setting a password is required to s
67
67
 
68
68
  ```bash
69
69
  # CLI option: bind to all interfaces with a password
70
- ompweb -H 0.0.0.0 --password "your-strong-password"
70
+ ompgui -H 0.0.0.0 --password "your-strong-password"
71
71
 
72
72
  # Or via environment variables
73
- OMP_WEB_HOSTNAME=0.0.0.0 OMP_WEB_PASSWORD="your-strong-password" ompweb
73
+ OMP_WEB_HOSTNAME=0.0.0.0 OMP_WEB_PASSWORD="your-strong-password" ompgui
74
74
  ```
75
75
 
76
76
  ### 2. Steps to Connect via Tailscale
77
77
 
78
78
  1. **Install Tailscale**: Download and sign into [Tailscale](https://tailscale.com/download) on both your host machine and your mobile device using the same account.
79
- 2. **Start ompweb on your host machine**:
79
+ 2. **Start ompgui on your host machine**:
80
80
  ```bash
81
- ompweb --hostname 0.0.0.0 --password "your-strong-password"
81
+ ompgui --hostname 0.0.0.0 --password "your-strong-password"
82
82
  ```
83
83
  3. **Access from your mobile browser**:
84
84
  - Navigate to your host's Tailscale IP (e.g. `100.x.y.z`) or MagicDNS machine name:
@@ -91,10 +91,10 @@ OMP_WEB_HOSTNAME=0.0.0.0 OMP_WEB_PASSWORD="your-strong-password" ompweb
91
91
 
92
92
  ### Security and troubleshooting
93
93
 
94
- - The server binds to `127.0.0.1` by default. A non-loopback hostname is an explicit opt-in and should only be used behind a trusted network boundary; ompweb is not safe to expose publicly.
94
+ - The server binds to `127.0.0.1` by default. A non-loopback hostname is an explicit opt-in and should only be used behind a trusted network boundary; ompgui is not safe to expose publicly.
95
95
  - File APIs are allow-listed to the selected workspace, its valid Git worktrees, session-referenced directories, and explicitly selected roots. Paths are canonicalized to reject traversal and symlink escapes.
96
96
  - `omp` is resolved from `OMP_WEB_OMP_BIN` first, then `PATH`. If live chat cannot start, run `omp --version` in the same terminal or set `OMP_WEB_OMP_BIN` to the executable's absolute path.
97
- - Session history remains native OMP JSONL. OMP owns live-session writes; ompweb reads the files directly and only performs explicit title, archive, and delete maintenance when it is not racing a live OMP write.
97
+ - Session history remains native OMP JSONL. OMP owns live-session writes; ompgui reads the files directly and only performs explicit title, archive, and delete maintenance when it is not racing a live OMP write.
98
98
  - Session archive uses OMP's native `archive/sessions/<cwd>/<file>.jsonl.gz` layout and moves sibling artifacts with the transcript; the original JSONL bytes are preserved inside the gzip.
99
99
 
100
100
  ## Features
@@ -128,7 +128,7 @@ OMP_WEB_HOSTNAME=0.0.0.0 OMP_WEB_PASSWORD="your-strong-password" ompweb
128
128
 
129
129
  ## Architecture
130
130
 
131
- ompweb is a Node-hosted Next.js app that drives your installed `omp` binary — it does not embed the agent:
131
+ ompgui is a Node-hosted Next.js app that drives your installed `omp` binary — it does not embed the agent:
132
132
 
133
133
  - **Live sessions**: spawns `omp --mode rpc-ui` (NDJSON over stdio), one child process per active session, so the agent version is always exactly what you have installed. It negotiates RPC v2 when the installed OMP advertises it, uses bounded chunk reassembly for large frames, and falls back to v1 for older versions. Host env (`PORT`, `NEXT_*`, `NODE_ENV`) is stripped before spawn, and shutdown is graceful on both POSIX (process-group) and Windows (`taskkill /t`).
134
134
  - **Session browsing**: reads omp's session files (`~/.omp/agent/sessions/<encoded-cwd>/<timestamp>_<uuid>.jsonl`) directly; title, archive, and delete are narrow native-file maintenance operations guarded against live OMP writes. Projects are grouped by a stable `projectKey` (Windows case-folded, symlink-resolved) so the sidebar doesn't jump between drives or worktrees.
@@ -161,7 +161,7 @@ Avoid running `next build` / `npm run build` during local development. It writes
161
161
 
162
162
  ## Internationalization
163
163
 
164
- ompweb supports English, Simplified Chinese (简体中文), Japanese (日本語), and Korean (한국어) with translated UI strings across all languages. The language is auto-detected from `navigator.language` and can be switched at runtime via the language menu in the top bar. The choice persists across sessions.
164
+ ompgui supports English, Simplified Chinese (简体中文), Japanese (日本語), and Korean (한국어) with translated UI strings across all languages. The language is auto-detected from `navigator.language` and can be switched at runtime via the language menu in the top bar. The choice persists across sessions.
165
165
 
166
166
  - Dictionaries: `lib/i18n/locales/{en,zh-CN,ja,ko}.json`
167
167
  - Framework: `lib/i18n/index.tsx` — a lightweight store built on `useSyncExternalStore` with `{var}` interpolation and plural support (`.one`/`.other`)
@@ -176,7 +176,7 @@ ompweb supports English, Simplified Chinese (简体中文), Japanese (日本語)
176
176
 
177
177
  ## Credits
178
178
 
179
- ompweb is a fork of [agegr/pi-web](https://github.com/agegr/pi-web) (MIT), the web UI for the [earendil/pi-mono](https://github.com/earendil-works/pi) pi coding agent, adapted for [can1357/oh-my-pi](https://github.com/can1357/oh-my-pi).
179
+ ompgui is a fork of [agegr/pi-web](https://github.com/agegr/pi-web) (MIT), the web UI for the [earendil/pi-mono](https://github.com/earendil-works/pi) pi coding agent, adapted for [can1357/oh-my-pi](https://github.com/can1357/oh-my-pi).
180
180
 
181
181
  ## License
182
182
 
package/README.zh-CN.md CHANGED
@@ -1,17 +1,17 @@
1
- # ompweb
1
+ # ompgui
2
2
 
3
3
  [English](./README.md) | [한국어](./README.ko.md) | [日本語](./README.ja.md) | [简体中文](./README.zh-CN.md)
4
4
 
5
- [oh-my-pi (omp) 编程智能体](https://github.com/can1357/oh-my-pi)的本地 Web UI。ompweb 读取本机的 omp 会话文件,在浏览器中提供一个工作区,支持会话浏览、实时对话、模型配置、技能管理和项目文件预览。
5
+ [oh-my-pi (omp) 编程智能体](https://github.com/can1357/oh-my-pi)的本地 Web UI。ompgui 读取本机的 omp 会话文件,在浏览器中提供一个工作区,支持会话浏览、实时对话、模型配置、技能管理和项目文件预览。
6
6
 
7
- ![ompweb — 浅色主题](docs/screenshot-light.png)
7
+ ![ompgui — 浅色主题](docs/screenshot-light.png)
8
8
 
9
9
  <details>
10
10
  <summary>深色主题与命令面板</summary>
11
11
 
12
- ![ompweb — 深色主题](docs/screenshot-dark.png)
12
+ ![ompgui — 深色主题](docs/screenshot-dark.png)
13
13
 
14
- ![ompweb — 命令面板](docs/screenshot-palette.png)
14
+ ![ompgui — 命令面板](docs/screenshot-palette.png)
15
15
 
16
16
  </details>
17
17
 
@@ -32,33 +32,33 @@ npx ompgui@latest
32
32
 
33
33
  ```bash
34
34
  npm install -g ompgui
35
- ompweb
35
+ ompgui
36
36
  ```
37
37
 
38
- 然后打开 [http://127.0.0.1:30177](http://127.0.0.1:30177)。服务器就绪后,CLI 会尝试自动打开浏览器。ompweb 默认监听 `127.0.0.1`。
38
+ 然后打开 [http://127.0.0.1:30177](http://127.0.0.1:30177)。服务器就绪后,CLI 会尝试自动打开浏览器。ompgui 默认监听 `127.0.0.1`。
39
39
 
40
40
  **选项:**
41
41
 
42
42
  ```bash
43
- ompweb --port 8080 # 自定义端口
44
- ompweb --hostname 0.0.0.0 # 在可信网络中暴露服务
45
- ompweb -p 8080 -H 0.0.0.0 # 组合使用
46
- ompweb --no-open # 不自动打开浏览器
47
-
48
- ompweb --password "a-long-random-password" # 启用仅密码登录(Windows 同样适用)
49
-
50
- PORT=8080 ompweb # 也支持环境变量
51
- OMP_WEB_HOSTNAME=0.0.0.0 ompweb # 显式暴露到网络
52
- OMP_WEB_PASSWORD='a-long-random-password' ompweb # 环境变量形式(POSIX)
53
- # Windows: $env:OMP_WEB_PASSWORD="secret"; ompweb
54
- OMP_WEB_NO_OPEN=1 ompweb # 作为后台服务运行时很有用
43
+ ompgui --port 8080 # 自定义端口
44
+ ompgui --hostname 0.0.0.0 # 在可信网络中暴露服务
45
+ ompgui -p 8080 -H 0.0.0.0 # 组合使用
46
+ ompgui --no-open # 不自动打开浏览器
47
+
48
+ ompgui --password "a-long-random-password" # 启用仅密码登录(Windows 同样适用)
49
+
50
+ PORT=8080 ompgui # 也支持环境变量
51
+ OMP_WEB_HOSTNAME=0.0.0.0 ompgui # 显式暴露到网络
52
+ OMP_WEB_PASSWORD='a-long-random-password' ompgui # 环境变量形式(POSIX)
53
+ # Windows: $env:OMP_WEB_PASSWORD="secret"; ompgui
54
+ OMP_WEB_NO_OPEN=1 ompgui # 作为后台服务运行时很有用
55
55
  ```
56
56
 
57
- 设置 `OMP_WEB_PASSWORD` 可通过与主题集成的仅密码登录页面保护界面和所有 API 端点。登录成功后,会创建有效期为 30 天的 HTTP-only 签名会话 Cookie;留空则关闭认证。远程访问仍需通过受信任反向代理或 VPN 提供 HTTPS,以保护密码和会话 Cookie。默认仅监听 `127.0.0.1`;不要将 ompweb 直接暴露到互联网。
57
+ 设置 `OMP_WEB_PASSWORD` 可通过与主题集成的仅密码登录页面保护界面和所有 API 端点。登录成功后,会创建有效期为 30 天的 HTTP-only 签名会话 Cookie;留空则关闭认证。远程访问仍需通过受信任反向代理或 VPN 提供 HTTPS,以保护密码和会话 Cookie。默认仅监听 `127.0.0.1`;不要将 ompgui 直接暴露到互联网。
58
58
 
59
59
  ## 远程与移动端访问(推荐使用 Tailscale)
60
60
 
61
- 从移动设备(iPhone、iPad、Android)或外部笔记本访问 `ompweb` 时,**强烈推荐使用 [Tailscale](https://tailscale.com/) 虚拟专用网(VPN)**。它通过端到端加密的点对点 Mesh 网络连接设备,无需端口转发或暴露公网 IP。
61
+ 从移动设备(iPhone、iPad、Android)或外部笔记本访问 `ompgui` 时,**强烈推荐使用 [Tailscale](https://tailscale.com/) 虚拟专用网(VPN)**。它通过端到端加密的点对点 Mesh 网络连接设备,无需端口转发或暴露公网 IP。
62
62
 
63
63
  ### 1. 配置访问密码(远程访问必备)
64
64
 
@@ -66,18 +66,18 @@ OMP_WEB_NO_OPEN=1 ompweb # 作为后台服务运行时很有用
66
66
 
67
67
  ```bash
68
68
  # CLI 选项:绑定到所有网络接口并设置密码
69
- ompweb -H 0.0.0.0 --password "your-strong-password"
69
+ ompgui -H 0.0.0.0 --password "your-strong-password"
70
70
 
71
71
  # 或通过环境变量设置
72
- OMP_WEB_HOSTNAME=0.0.0.0 OMP_WEB_PASSWORD="your-strong-password" ompweb
72
+ OMP_WEB_HOSTNAME=0.0.0.0 OMP_WEB_PASSWORD="your-strong-password" ompgui
73
73
  ```
74
74
 
75
75
  ### 2. Tailscale 连接步骤
76
76
 
77
77
  1. **安装 Tailscale**:在宿主电脑和移动设备上安装 [Tailscale](https://tailscale.com/download) 并登录同一账户。
78
- 2. **在宿主电脑上启动 ompweb**:
78
+ 2. **在宿主电脑上启动 ompgui**:
79
79
  ```bash
80
- ompweb --hostname 0.0.0.0 --password "your-strong-password"
80
+ ompgui --hostname 0.0.0.0 --password "your-strong-password"
81
81
  ```
82
82
  3. **在移动端浏览器中访问**:
83
83
  - 访问宿主电脑的 Tailscale IP(如 `100.x.y.z`)或 MagicDNS 机器名:
@@ -117,7 +117,7 @@ OMP_WEB_HOSTNAME=0.0.0.0 OMP_WEB_PASSWORD="your-strong-password" ompweb
117
117
 
118
118
  ## 架构
119
119
 
120
- ompweb 是一个由 Node 托管的 Next.js 应用,驱动你已安装的 `omp` 二进制文件——它并不内嵌智能体:
120
+ ompgui 是一个由 Node 托管的 Next.js 应用,驱动你已安装的 `omp` 二进制文件——它并不内嵌智能体:
121
121
 
122
122
  - **实时会话**:启动 `omp --mode rpc-ui`(基于 stdio 的 NDJSON),每个活动会话对应一个子进程,因此智能体版本始终与你安装的完全一致。
123
123
  - **会话浏览**:直接读取 omp 的会话文件(`~/.omp/agent/sessions/<encoded-cwd>/<timestamp>_<uuid>.jsonl`);标题、归档和删除是受保护的原生文件维护操作,不会与 OMP 的实时写入竞争。
@@ -147,7 +147,7 @@ node --test lib/*.test.mjs components/*.test.mjs # 运行测试
147
147
 
148
148
  ## 多语言支持
149
149
 
150
- ompweb 支持英语、简体中文、日本語和韩语(한국어),四种语言均覆盖整个界面的翻译字符串。语言从 `navigator.language` 自动检测,可通过顶栏的语言菜单在运行时切换。选择会跨会话持久化。
150
+ ompgui 支持英语、简体中文、日本語和韩语(한국어),四种语言均覆盖整个界面的翻译字符串。语言从 `navigator.language` 自动检测,可通过顶栏的语言菜单在运行时切换。选择会跨会话持久化。
151
151
 
152
152
  - 字典文件:`lib/i18n/locales/{en,zh-CN,ja,ko}.json`
153
153
  - 框架:`lib/i18n/index.tsx` — 基于 `useSyncExternalStore` 的轻量 store,支持 `{var}` 插值和复数形式(`.one`/`.other`)
@@ -162,7 +162,7 @@ ompweb 支持英语、简体中文、日本語和韩语(한국어),四种
162
162
 
163
163
  ## 致谢
164
164
 
165
- ompweb 分叉自 [agegr/pi-web](https://github.com/agegr/pi-web)(MIT)——[badlogic/pi-mono](https://github.com/badlogic/pi-mono) pi 编程智能体的 Web UI,并针对 [can1357/oh-my-pi](https://github.com/can1357/oh-my-pi) 进行了适配。
165
+ ompgui 分叉自 [agegr/pi-web](https://github.com/agegr/pi-web)(MIT)——[badlogic/pi-mono](https://github.com/badlogic/pi-mono) pi 编程智能体的 Web UI,并针对 [can1357/oh-my-pi](https://github.com/can1357/oh-my-pi) 进行了适配。
166
166
 
167
167
  ## 许可证
168
168
 
@@ -22,7 +22,7 @@ function isNodeVersionSupported(version) {
22
22
 
23
23
  function getUnsupportedNodeVersionMessage(version) {
24
24
  return [
25
- `ompweb requires Node.js ${MIN_NODE_VERSION} or newer.`,
25
+ `ompgui requires Node.js ${MIN_NODE_VERSION} or newer.`,
26
26
  `Current Node.js version: ${version}.`,
27
27
  "Upgrade Node.js and try again: https://nodejs.org/",
28
28
  ].join("\n");