ompgui 0.6.5 → 0.7.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.
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +10 -4
- package/.next/build-manifest.json +3 -3
- package/.next/prerender-manifest.json +31 -3
- package/.next/react-loadable-manifest.json +16 -9
- package/.next/required-server-files.js +2 -2
- package/.next/required-server-files.json +2 -2
- package/.next/routes-manifest.json +40 -2
- package/.next/server/app/_global-error/page.js +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +2 -2
- package/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +3 -3
- package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/agent/[id]/bash-output/route.js +1 -1
- package/.next/server/app/api/agent/[id]/events/route.js +2 -2
- package/.next/server/app/api/agent/[id]/events/route.js.nft.json +1 -1
- package/.next/server/app/api/agent/[id]/route.js +1 -1
- package/.next/server/app/api/agent/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/agent/new/route.js +1 -1
- package/.next/server/app/api/agent/new/route.js.nft.json +1 -1
- package/.next/server/app/api/agent/running/events/route.js +2 -2
- package/.next/server/app/api/agent/running/events/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/[name]/route.js +1 -1
- package/.next/server/app/api/agents/route.js +1 -1
- package/.next/server/app/api/agents/unpack/route.js +1 -1
- package/.next/server/app/api/app-update/route.js +1 -1
- package/.next/server/app/api/auth/all-providers/route.js +1 -1
- package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
- package/.next/server/app/api/auth/login/[provider]/route.js +1 -1
- package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
- package/.next/server/app/api/auth/providers/route.js +1 -1
- package/.next/server/app/api/cwd/browse/route.js +1 -1
- package/.next/server/app/api/cwd/validate/route.js +2 -1
- package/.next/server/app/api/daemon/route.js +1 -0
- package/.next/server/app/api/daemon/route.js.nft.json +1 -0
- package/.next/server/app/api/daemon/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/default-cwd/route.js +1 -1
- package/.next/server/app/api/file-index/route.js +1 -1
- package/.next/server/app/api/files/[...path]/route.js +5 -5
- package/.next/server/app/api/files/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/git/diff/route.js +2 -2
- package/.next/server/app/api/git/status/route.js +2 -2
- package/.next/server/app/api/home/route.js +1 -1
- package/.next/server/app/api/mcp/route.js +3 -3
- package/.next/server/app/api/mcp/route.js.nft.json +1 -1
- package/.next/server/app/api/model-roles/route.js +1 -1
- package/.next/server/app/api/models/route.js +1 -1
- package/.next/server/app/api/models-config/catalog/route.js +1 -1
- package/.next/server/app/api/models-config/route.js +1 -1
- package/.next/server/app/api/models-config/test/route.js +1 -1
- package/.next/server/app/api/omp-settings/route.js +1 -1
- package/.next/server/app/api/omp-update/route.js +2 -2
- package/.next/server/app/api/omp-update/route.js.nft.json +1 -1
- package/.next/server/app/api/omp-version/route.js +1 -1
- package/.next/server/app/api/plugins/route.js +1 -1
- package/.next/server/app/api/projects/route.js +2 -2
- package/.next/server/app/api/providers/enable/route.js +1 -1
- package/.next/server/app/api/relay/devices/[id]/route.js +1 -0
- package/.next/server/app/api/relay/devices/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/relay/devices/[id]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/relay/devices/route.js +1 -0
- package/.next/server/app/api/relay/devices/route.js.nft.json +1 -0
- package/.next/server/app/api/relay/devices/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/relay/pair/route.js +1 -0
- package/.next/server/app/api/relay/pair/route.js.nft.json +1 -0
- package/.next/server/app/api/relay/pair/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/sessions/[id]/archive/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/archive/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/auto-name/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/entries/[entryId]/media/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/state/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/[id]/subagents/[subagentId]/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/subagents/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/subagents/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/archive/route.js +1 -1
- package/.next/server/app/api/sessions/import/route.js +1 -1
- package/.next/server/app/api/sessions/route.js +1 -1
- package/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/check/route.js +1 -1
- package/.next/server/app/api/skills/check/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/install/route.js +1 -1
- package/.next/server/app/api/skills/route.js +2 -2
- package/.next/server/app/api/skills/search/route.js +1 -1
- package/.next/server/app/api/skills/update/route.js +1 -1
- package/.next/server/app/api/skills/update/route.js.nft.json +1 -1
- package/.next/server/app/api/usage/route.js +1 -1
- package/.next/server/app/api/web-auth/session/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/apple-icon.png/route.js +1 -1
- package/.next/server/app/favicon.ico/route.js +1 -1
- package/.next/server/app/icon.svg/route.js +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +4 -4
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login/page.js +1 -1
- package/.next/server/app/login/page.js.nft.json +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +1 -1
- package/.next/server/app/login.rsc +3 -3
- package/.next/server/app/login.segments/_full.segment.rsc +3 -3
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/manifest.webmanifest/route.js +2 -2
- package/.next/server/app/page.js +2 -2
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/pair/page.js +1 -0
- package/.next/server/app/pair/page.js.nft.json +1 -0
- package/.next/server/app/pair/page_client-reference-manifest.js +1 -0
- package/.next/server/app/pair.html +1 -0
- package/.next/server/app/pair.meta +26 -0
- package/.next/server/app/pair.rsc +23 -0
- package/.next/server/app/pair.segments/_full.segment.rsc +23 -0
- package/.next/server/app/pair.segments/_tree.segment.rsc +4 -0
- package/.next/server/app/pair.segments/pair/__PAGE__.segment.rsc +25 -0
- package/.next/server/app/relay/route.js +1 -0
- package/.next/server/app/relay/route.js.nft.json +1 -0
- package/.next/server/app/relay/route_client-reference-manifest.js +1 -0
- package/.next/server/app-paths-manifest.json +10 -4
- package/.next/server/chunks/1448.js +1 -1
- package/.next/server/chunks/1671.js +1 -1
- package/.next/server/chunks/2043.js +12 -0
- package/.next/server/chunks/2676.js +4 -0
- package/.next/server/chunks/2865.js +1 -1
- package/.next/server/chunks/3100.js +2 -2
- package/.next/server/chunks/3798.js +4 -5
- package/.next/server/chunks/5318.js +1 -1
- package/.next/server/chunks/6209.js +4 -4
- package/.next/server/chunks/{8353.js → 6332.js} +2 -2
- package/.next/server/chunks/7077.js +1 -0
- package/.next/server/chunks/714.js +1 -1
- package/.next/server/chunks/7779.js +1 -0
- package/.next/server/chunks/795.js +105 -0
- package/.next/server/chunks/8501.js +1 -1
- package/.next/server/chunks/8672.js +1 -0
- package/.next/server/chunks/8834.js +18 -0
- package/.next/server/chunks/9145.js +2 -0
- package/.next/server/chunks/933.js +1 -1
- package/.next/server/functions-config-manifest.json +1 -0
- package/.next/server/instrumentation.js +1 -1
- package/.next/server/instrumentation.js.nft.json +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/middleware.js +2 -2
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/prefetch-hints.json +14 -0
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/Na7qed083WBP3X-plluRO/_buildManifest.js +1 -0
- package/.next/static/chunks/1012.477e42e5184b6aaa.js +17 -0
- package/.next/static/chunks/1941.66c3a0942c0c3e5d.js +1 -0
- package/.next/static/chunks/3944.6215b78f025077b3.js +1 -0
- package/.next/static/chunks/4315-142781649334beb2.js +1 -0
- package/.next/static/chunks/484.761e1ff01f663fb2.js +1 -0
- package/.next/static/chunks/5658.0fe2642c815aea9a.js +1 -0
- package/.next/static/chunks/587-c973123b3c9a5b80.js +1 -0
- package/.next/static/chunks/9448.b6c5eb8f1356d5fd.js +2 -0
- package/.next/static/chunks/9668.b62ea9e45077f781.js +1 -0
- package/.next/static/chunks/app/_global-error/page-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/agent/[id]/bash-output/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/agent/[id]/events/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/agent/[id]/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/agent/new/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/agent/running/events/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/agents/[name]/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/agents/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/agents/unpack/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/app-update/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/auth/all-providers/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/auth/api-key/[provider]/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/auth/login/[provider]/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/[provider]/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/auth/providers/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/cwd/browse/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/cwd/validate/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/daemon/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/default-cwd/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/file-index/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/files/[...path]/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/git/diff/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/git/status/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/home/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/mcp/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/model-roles/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/models/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/models-config/catalog/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/models-config/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/models-config/test/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/omp-settings/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/omp-update/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/omp-version/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/plugins/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/projects/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/providers/enable/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/relay/devices/[id]/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/relay/devices/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/relay/pair/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/archive/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/context/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/media/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/export/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/state/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/subagents/[subagentId]/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/subagents/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/sessions/archive/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/sessions/import/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/sessions/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/skills/check/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/skills/install/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/skills/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/skills/search/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/skills/update/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/usage/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/web-auth/session/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/app/{page-2845a463e3b265c2.js → page-f53564bcb292e1e5.js} +2 -2
- package/.next/static/chunks/app/pair/page-d72423ffc5654e29.js +1 -0
- package/.next/static/chunks/app/relay/route-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-710453b8adcf7d31.js +1 -0
- package/.next/static/chunks/webpack-4e02c722bd171663.js +1 -0
- package/.next/static/css/63b622301ba107de.css +3 -0
- package/README.ja.md +32 -1
- package/README.ko.md +34 -1
- package/README.md +35 -2
- package/README.zh-CN.md +32 -1
- package/bin/ompgui-options.js +18 -3
- package/bin/ompgui-pair.js +108 -0
- package/bin/ompgui-service.js +223 -0
- package/bin/ompgui-update.js +85 -22
- package/bin/ompgui.js +30 -11
- package/next.config.ts +3 -1
- package/package.json +9 -5
- package/.next/server/chunks/2118.js +0 -1
- package/.next/server/chunks/3379.js +0 -1
- package/.next/server/chunks/6777.js +0 -1
- package/.next/server/chunks/7834.js +0 -5
- package/.next/server/chunks/8816.js +0 -18
- package/.next/static/chunks/4315-6b59cc5d91fe9083.js +0 -1
- package/.next/static/chunks/484.3215a9f03ff865da.js +0 -1
- package/.next/static/chunks/5658.eb16997c19c2372b.js +0 -1
- package/.next/static/chunks/6139.8971a8cbb6c07ac8.js +0 -17
- package/.next/static/chunks/7194.651566324b8fac6f.js +0 -1
- package/.next/static/chunks/9448.3ded6700334581bd.js +0 -2
- package/.next/static/chunks/9668.5e681bc0055ed4d0.js +0 -1
- package/.next/static/chunks/app/_global-error/page-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/agent/[id]/bash-output/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/agent/[id]/events/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/agent/[id]/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/agent/new/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/agent/running/events/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/agents/[name]/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/agents/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/agents/unpack/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/app-update/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/auth/all-providers/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/auth/api-key/[provider]/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/auth/login/[provider]/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/[provider]/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/auth/providers/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/cwd/browse/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/cwd/validate/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/default-cwd/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/file-index/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/files/[...path]/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/git/diff/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/git/status/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/home/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/mcp/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/model-roles/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/models/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/models-config/catalog/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/models-config/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/models-config/test/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/omp-settings/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/omp-update/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/omp-version/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/plugins/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/projects/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/providers/enable/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/archive/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/context/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/media/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/export/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/state/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/subagents/[subagentId]/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/subagents/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/sessions/archive/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/sessions/import/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/sessions/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/skills/check/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/skills/install/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/skills/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/skills/search/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/skills/update/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/usage/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/web-auth/session/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-129e1f8238bd66db.js +0 -1
- package/.next/static/chunks/webpack-9c013878cb300763.js +0 -1
- package/.next/static/css/dd19cac539e3e218.css +0 -3
- package/.next/static/wMrrM4WHr4pqT7Bavv79j/_buildManifest.js +0 -1
- /package/.next/static/{wMrrM4WHr4pqT7Bavv79j → Na7qed083WBP3X-plluRO}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[863,3944],{30808:(e,r,t)=>{"use strict";t.d(r,{Cf:()=>k,HM:()=>P,L3:()=>z,Nt:()=>$,R6:()=>H,je:()=>I,lG:()=>S,m_:()=>R,sA:()=>j});var a=t(95155),i=t(53474),n=t(72222),l=t(45477),o=t(59567),s=t(11975),d=t(52579),c=t(3683),u=t(11412),p=t(80403),x=t(15383),h=t(96238),v=t(27443),y=t(98197),f=t(11827),m=t(977),g=t(12115),b=t(77482);let j={top:"max(8px, env(safe-area-inset-top, 0px))",left:"max(8px, env(safe-area-inset-left, 0px))",right:"max(8px, env(safe-area-inset-right, 0px))",bottom:"max(8px, env(safe-area-inset-bottom, 0px))",width:"auto",height:"auto",maxWidth:"none",maxHeight:"none",transform:"none",animation:"none"};function w({open:e,onOpenChange:r}){return(0,b.LG)(e,()=>r(!1)),null}function S({open:e,onOpenChange:r,children:t}){return(0,a.jsxs)(i.D,{open:e,onOpenChange:r,children:[(0,a.jsx)(w,{open:e,onOpenChange:r}),t]})}function k({children:e,className:r,style:t,ariaLabel:i}){return(0,a.jsxs)(n.Z,{children:[(0,a.jsx)(l.X,{style:{position:"fixed",inset:0,background:"var(--overlay-backdrop)",backdropFilter:"blur(2px)",zIndex:"var(--z-dialog-backdrop)"}}),(0,a.jsx)(o.h,{"aria-label":i,className:r,style:{position:"fixed",top:"50%",left:"50%",transform:"translate(-50%, -50%)",animation:"dialog-pop-in var(--dur-med) var(--ease-out-warm) both",zIndex:"var(--z-dialog)",background:"var(--bg)",color:"var(--text)",border:"1px solid var(--border)",borderRadius:"var(--radius-modal)",boxShadow:"var(--shadow-modal)",padding:"calc(var(--space-6) + var(--space-2))",maxWidth:"min(92vw, 560px)",maxHeight:"85dvh",overflow:"auto",...t},children:e})]})}function z({children:e,style:r}){return(0,a.jsx)(s.L,{className:"display-serif",style:{fontSize:"calc(var(--text-xl) + var(--space-3) / 2)",margin:"0 0 var(--space-5)",...r},children:e})}let P=d.H,C="(hover: none), (pointer: coarse)";function E(e){if(!window.matchMedia)return()=>{};let r=window.matchMedia(C);return r.addEventListener("change",e),()=>r.removeEventListener("change",e)}function L(){return!!window.matchMedia&&window.matchMedia(C).matches}function O(){return!1}function R({content:e,children:r,side:t="top"}){let i=(0,g.useSyncExternalStore)(E,L,O),n=r.props,l=!i||"string"!=typeof e||n["aria-label"]||n["aria-labelledby"]?r:g.cloneElement(r,{"aria-label":e});return(0,a.jsx)(c.B,{delay:350,closeDelay:0,children:(0,a.jsxs)(u.s,{disabled:i||!e,children:[(0,a.jsx)(p.k,{render:l}),i||!e?null:(0,a.jsx)(x.K,{children:(0,a.jsx)(h.o,{side:t,sideOffset:6,style:{zIndex:"var(--z-tooltip)"},children:(0,a.jsx)(v.o,{style:{background:"var(--bg-panel)",color:"var(--text)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",boxShadow:"var(--shadow-pop)",padding:"var(--space-2) calc(var(--space-4) + var(--space-1) / 2)",fontSize:"var(--text-md)",lineHeight:1.4,maxWidth:260},children:e})})})]})})}function $({open:e,onOpenChange:r,defaultOpen:t,children:i}){return(0,a.jsx)(y.N,{open:e,onOpenChange:r,defaultOpen:t,children:i})}let H=f.R;function I({children:e,style:r}){return(0,a.jsx)(m.j,{style:r,children:e})}},63944:(e,r,t)=>{"use strict";t.r(r),t.d(r,{RelayPairPanel:()=>d});var a=t(95155),i=t(51128),n=t(12115),l=t(34906),o=t(4315),s=t(28594);function d({embedded:e=!1}){let{t:r}=(0,o.s9)(),[t,c]=(0,n.useState)(""),[u,p]=(0,n.useState)(),[x,h]=(0,n.useState)(null),[v,y]=(0,n.useState)([]),[f,m]=(0,n.useState)(null),[g,b]=(0,n.useState)(!1),[j,w]=(0,n.useState)(!1),S=(0,n.useMemo)(()=>x?function(e){let r=function(e){let r=e.trim();if(!r||r.length>2048)return null;try{let{data:e}=(0,s.lF)(r,{ecc:"M"});if(!Array.isArray(e)||e.length<21)return null;return e}catch{return null}}(e);if(!r)return null;let t=r.length,a=[];for(let e=0;e<t;e+=1){let i=r[e];if(!i||i.length!==t)return null;for(let r=0;r<t;r+=1)i[r]&&a.push(`M${r} ${e}h1v1h-1z`)}let i=a.join("");return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${t} ${t}" width="100%" height="100%" shape-rendering="crispEdges" role="img"><rect width="${t}" height="${t}" fill="#fff"/><path fill="#000" d="${i}"/></svg>`}(x.uri):null,[x]),k=(0,n.useCallback)(async()=>{try{let[e,r]=await Promise.all([fetch("/api/relay/pair"),fetch("/api/relay/devices")]);if(e.ok){let r=await e.json(),t=null!==r&&"object"==typeof r&&"relayUrl"in r&&"string"==typeof r.relayUrl?r.relayUrl:void 0;t&&c(e=>e||t),p(t)}if(r.ok){let e=await r.json();y(e.devices??[])}}catch{}},[]);async function z(){b(!0),m(null),w(!1);try{let e=await fetch("/api/relay/pair",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t.trim()?{url:t.trim()}:{})}),a=await e.json();if(!e.ok)return void m(a.error??r("relayPair.createFailed"));h(a),c(a.relayUrl),await k()}catch{m(r("relayPair.createFailed"))}finally{b(!1)}}async function P(){if(x)try{await navigator.clipboard.writeText(x.uri),w(!0)}catch{w(!1)}}async function C(e){m(null);try{if(!(await fetch(`/api/relay/devices/${encodeURIComponent(e)}`,{method:"DELETE"})).ok)return void m(r("relayPair.revokeFailed"));await k()}catch{m(r("relayPair.revokeFailed"))}}(0,n.useEffect)(()=>{k()},[k]);let E=(0,a.jsxs)(a.Fragment,{children:[e?null:(0,a.jsx)("div",{style:{width:40,height:40,display:"grid",placeItems:"center",borderRadius:"50%",background:"var(--user-bg)",color:"var(--accent)",marginBottom:20},children:(0,a.jsx)(i.A,{size:19,"aria-hidden":"true"})}),e?(0,a.jsx)("h3",{style:{margin:0,fontSize:"var(--text-base)",fontWeight:600,color:"var(--text)"},children:r("relayPair.title")}):(0,a.jsx)("h1",{className:"display-serif",style:{margin:0,fontSize:"calc(var(--text-xl) + var(--space-5) - var(--space-1))",color:"var(--text)"},children:r("relayPair.title")}),(0,a.jsx)("p",{style:{margin:e?"4px 0 16px":"10px 0 24px",color:"var(--text-muted)",fontSize:"var(--text-base)",lineHeight:1.5},children:r("relayPair.description")}),(0,a.jsx)("p",{style:{margin:"0 0 16px",color:"var(--text-dim)",fontSize:"var(--text-sm)",lineHeight:1.45},children:r("relayPair.steps")}),(0,a.jsxs)("div",{style:{display:"grid",gap:14},children:[(0,a.jsx)(l.D0,{label:r("relayPair.urlLabel"),hint:u&&!t?u:void 0,children:(0,a.jsx)(l.ks,{value:t,onChange:c,placeholder:"wss://machine.tailnet.ts.net/relay",autoComplete:"off",spellCheck:!1,mono:!0})}),(0,a.jsx)(l.$n,{type:"button",variant:"primary",busy:g,disabled:g,onClick:()=>void z(),children:g?r("relayPair.creating"):r("relayPair.create")}),f?(0,a.jsx)("p",{style:{margin:0,color:"var(--danger, #c44)",fontSize:"var(--text-sm)"},children:f}):null,x?(0,a.jsxs)("div",{style:{display:"grid",gap:8},children:[S?(0,a.jsxs)("div",{style:{display:"grid",justifyItems:"center",gap:8},children:[(0,a.jsx)("div",{role:"img","aria-label":r("relayPair.qrHint"),className:"relay-pair-qr",style:{width:212,height:212,boxSizing:"border-box",background:"#fff",color:"#000",padding:12,borderRadius:"var(--radius-control)",border:"1px solid var(--border)",isolation:"isolate"},dangerouslySetInnerHTML:{__html:S}}),(0,a.jsx)("p",{style:{margin:0,color:"var(--text-dim)",fontSize:"var(--text-sm)",textAlign:"center"},children:r("relayPair.qrHint")})]}):null,(0,a.jsx)("label",{style:{color:"var(--text-muted)",fontSize:"var(--text-sm)"},children:r("relayPair.linkLabel")}),(0,a.jsx)("textarea",{readOnly:!0,value:x.uri,rows:4,style:{width:"100%",resize:"vertical",fontFamily:"var(--font-mono)",fontSize:"var(--text-sm)",padding:10,borderRadius:"var(--radius-control)",border:"1px solid var(--border)",background:"var(--bg)",color:"var(--text)"}}),(0,a.jsx)(l.$n,{type:"button",variant:"secondary",onClick:()=>void P(),children:j?r("relayPair.copied"):r("relayPair.copy")}),(0,a.jsx)("p",{style:{margin:0,color:"var(--text-dim)",fontSize:"var(--text-sm)"},children:r("relayPair.expires",{time:new Date(x.expiresAt).toLocaleTimeString()})})]}):null,(0,a.jsxs)("div",{children:[(0,a.jsx)("h2",{style:{margin:"16px 0 8px",fontSize:"var(--text-base)",color:"var(--text)"},children:r("relayPair.devicesTitle")}),0===v.length?(0,a.jsx)("p",{style:{margin:0,color:"var(--text-muted)",fontSize:"var(--text-sm)"},children:r("relayPair.noDevices")}):(0,a.jsx)("ul",{style:{listStyle:"none",margin:0,padding:0,display:"grid",gap:8},children:v.map(e=>(0,a.jsxs)("li",{style:{display:"flex",justifyContent:"space-between",gap:12,alignItems:"center"},children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{style:{color:"var(--text)",fontSize:"var(--text-sm)"},children:e.label||e.id}),(0,a.jsx)("div",{style:{color:"var(--text-dim)",fontSize:"var(--text-sm)",fontFamily:"var(--font-mono)"},children:e.id})]}),(0,a.jsx)(l.$n,{type:"button",variant:"secondary",onClick:()=>void C(e.id),children:r("relayPair.revoke")})]},e.id))})]})]})]});return e?(0,a.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:0,maxWidth:520},children:E}):(0,a.jsx)("main",{style:{flex:1,display:"grid",placeItems:"center",padding:20,background:"var(--bg)"},children:(0,a.jsx)("section",{style:{width:"min(100%, 520px)",padding:32,background:"var(--bg-panel)",border:"1px solid var(--border)",borderRadius:"var(--radius-modal)",boxShadow:"var(--shadow-modal)"},children:E})})}},77482:(e,r,t)=>{"use strict";t.d(r,{LG:()=>u,Mi:()=>d,pJ:()=>c});var a=t(12115);let i=[],n=new Set,l=!1;function o(){for(let e of n)e()}function s(e){let r=i[i.length-1];r&&(e.preventDefault(),r())}function d(){return i.length}function c(e){return n.add(e),()=>{n.delete(e)}}function u(e,r){let t=(0,a.useRef)(r);t.current=r,(0,a.useEffect)(()=>{if(e){var r;return r=()=>{t.current()},0===i.length&&(l||(window.addEventListener("ompgui:overlay-back",s),l=!0)),i.push(r),o(),()=>{let e=i.lastIndexOf(r);-1!==e&&i.splice(e,1),0===i.length&&l&&(window.removeEventListener("ompgui:overlay-back",s),l=!1),o()}}},[e])}},99848:(e,r,t)=>{Promise.resolve().then(t.bind(t,63944))}},e=>{e.O(0,[7224,587,4315,4906,8441,3794,7358],()=>e(e.s=99848)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,90,154,552,633,976,1004,1005,1097,1236,1337,1541,1697,1728,1907,2053,2086,2138,2202,2504,2835,2837,3004,3432,3507,3851,3943,3955,4016,4037,4288,4896,5221,5907,6450,6709,6819,6849,6919,6988,7067,7074,7347,7453,7472,7483,7769,7812,7851,8167,8429,8589,8658,8704,8743,8933,9043,9156,9174,9183,9223,9742,9747,9755,9761,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,90,154,552,633,976,1004,1005,1097,1236,1337,1541,1697,1728,1907,2053,2086,2138,2202,2504,2835,2837,3004,3432,3507,3851,3943,3955,4016,4037,4288,4896,5221,5907,6450,6709,6819,6849,6919,6988,7067,7074,7347,7453,7472,7483,7769,7812,7851,8167,8429,8589,8658,8704,8743,8933,9043,9156,9174,9183,9223,9742,9747,9755,9761,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,90,154,552,633,976,1004,1005,1097,1236,1337,1541,1697,1728,1907,2053,2086,2138,2202,2504,2835,2837,3004,3432,3507,3851,3943,3955,4016,4037,4288,4896,5221,5907,6450,6709,6819,6849,6919,6988,7067,7074,7347,7453,7472,7483,7769,7812,7851,8167,8429,8589,8658,8704,8743,8933,9043,9156,9174,9183,9223,9742,9747,9755,9761,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,90,154,552,633,976,1004,1005,1097,1236,1337,1541,1697,1728,1907,2053,2086,2138,2202,2504,2835,2837,3004,3432,3507,3851,3943,3955,4016,4037,4288,4896,5221,5907,6450,6709,6819,6849,6919,6988,7067,7074,7347,7453,7472,7483,7769,7812,7851,8167,8429,8589,8658,8704,8743,8933,9043,9156,9174,9183,9223,9742,9747,9755,9761,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-710453b8adcf7d31.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[64,90,154,552,633,976,1004,1005,1097,1236,1337,1541,1697,1728,1907,2053,2086,2138,2202,2504,2835,2837,3004,3432,3507,3851,3943,3955,4016,4037,4288,4896,5221,5907,6450,6709,6819,6849,6919,6988,7067,7074,7347,7453,7472,7483,7769,7812,7851,8167,8429,8589,8658,8704,8743,8933,9043,9156,9174,9183,9223,9742,9747,9755,9761,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(()=>{"use strict";var e,t,a,c,d,r,f,b,o,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],b=!0,o=0;o<a.length;o++)(!1&d||f>=d)&&Object.keys(l.O).every(e=>l.O[e](a[o]))?a.splice(o--,1):(b=!1,d<f&&(f=d));if(b){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-7dff29185f63f908.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",1012:"477e42e5184b6aaa",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:"2a04ea2716225057",3308:"8e27b5c43a478f0d",3336:"a76f9485fe7cb762",3688:"77dd9e68a61af45e",3716:"72bf4c9d7325debd",3944:"6215b78f025077b3",3995:"eca0f5bef1fc3ae5",4004:"74b9bcf5478b1663",4202:"8440832386f023c7",4238:"6f102dcbcf2ae339",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,b=document.getElementsByTagName("script"),o=0;o<b.length;o++){var n=b[o];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),b=r&&r.target&&r.target.href||t,o=Error("Loading CSS chunk "+e+" failed.\n("+b+")");o.code="CSS_CHUNK_LOAD_FAILED",o.type=f,o.request=b,d.parentNode.removeChild(d),c(o)}},d.href=t;if("function"==typeof _N_E_STYLE_LOAD){var r=d.href,f=d.onload,b=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(){b&&b.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],b=(e,t)=>{var a,c,[d,r,b]=t,o=0;if(d.some(e=>0!==f[e])){for(a in r)l.o(r,a)&&(l.m[a]=r[a]);if(b)var n=b(l)}for(e&&e(t);o<d.length;o++)c=d[o],l.o(f,c)&&f[c]&&f[c][0](),f[c]=0;return l.O(n)},(o=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(b.bind(null,0)),o.push=b.bind(null,o.push.bind(o)),l.nc=void 0})();
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
@font-face{font-family:Noto Sans Mono;font-style:normal;font-weight:100 900;font-stretch:100%;font-display:swap;src:url(/_next/static/media/1cdd02902f937a18-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:Noto Sans Mono;font-style:normal;font-weight:100 900;font-stretch:100%;font-display:swap;src:url(/_next/static/media/7deddc85b7ffd1dc-s.p.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:Noto Sans Mono;font-style:normal;font-weight:100 900;font-stretch:100%;font-display:swap;src:url(/_next/static/media/1a3dce5cfb5f7760-s.woff2) format("woff2");unicode-range:u+1f??}@font-face{font-family:Noto Sans Mono;font-style:normal;font-weight:100 900;font-stretch:100%;font-display:swap;src:url(/_next/static/media/15605e25b523335c-s.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-family:Noto Sans Mono;font-style:normal;font-weight:100 900;font-stretch:100%;font-display:swap;src:url(/_next/static/media/641a7b8a5800ee0e-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:Noto Sans Mono;font-style:normal;font-weight:100 900;font-stretch:100%;font-display:swap;src:url(/_next/static/media/4c4b3b30b6bcb2be-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Noto Sans Mono;font-style:normal;font-weight:100 900;font-stretch:100%;font-display:swap;src:url(/_next/static/media/ec14413c594b3356-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Noto Sans Mono Fallback;src:local("Arial");ascent-override:79.43%;descent-override:21.77%;line-gap-override:0.00%;size-adjust:134.59%}.__className_66b8ca{font-family:Noto Sans Mono,Noto Sans Mono Fallback;font-style:normal}.__variable_66b8ca{--font-noto-mono:"Noto Sans Mono","Noto Sans Mono Fallback"}@font-face{font-family:Pretendard Variable;font-weight:45 920;font-style:normal;font-display:swap;src:url(/_next/static/media/PretendardVariable.ff840cfe.woff2) format("woff2-variations")}
|
|
2
|
+
|
|
3
|
+
/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-ease:initial}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-lg:1.125rem;--text-xl:1.25rem;--font-weight-medium:500;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-border:var(--border);--color-text:var(--text);--color-text-muted:var(--text-muted);--color-text-dim:var(--text-dim);--color-accent:var(--accent);--color-accent-hover:var(--accent-hover);--color-bg-subtle:var(--bg-subtle)}}@layer base{*,::backdrop,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}:host,html{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.isolate{isolation:isolate}.\!container{width:100%!important}@media (min-width:40rem){.\!container{max-width:40rem!important}}@media (min-width:48rem){.\!container{max-width:48rem!important}}@media (min-width:64rem){.\!container{max-width:64rem!important}}@media (min-width:80rem){.\!container{max-width:80rem!important}}@media (min-width:96rem){.\!container{max-width:96rem!important}}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-\[720px\]{height:720px}.h-full{height:100%}.min-h-\[44px\]{min-height:44px}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-\[720px\]{width:720px}.w-full{width:100%}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.resize{resize:both}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-2{gap:calc(var(--spacing) * 2)}.truncate{text-overflow:ellipsis;white-space:nowrap}.overflow-hidden,.truncate{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded-full{border-radius:3.40282e+38px}.border{border-style:var(--tw-border-style);border-width:1px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-solid{--tw-border-style:solid;border-style:solid}.border-border{border-color:var(--color-border)}.bg-accent{background-color:var(--color-accent)}.bg-bg-subtle{background-color:var(--color-bg-subtle)}.px-2{padding-inline:calc(var(--spacing) * 2)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-8{padding-block:calc(var(--spacing) * 8)}.pt-6{padding-top:calc(var(--spacing) * 6)}.text-center{text-align:center}.text-left{text-align:left}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.break-all{word-break:break-all}.text-accent{color:var(--color-accent)}.text-text{color:var(--color-text)}.text-text-dim{color:var(--color-text-dim)}.text-text-muted{color:var(--color-text-muted)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a)}.ring,.shadow{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-\[1px\]{--tw-backdrop-blur:blur(1px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.\[scrollbar-width\:none\]{scrollbar-width:none}@media (hover:hover){.hover\:text-accent-hover:hover{color:var(--color-accent-hover)}.hover\:text-text:hover{color:var(--color-text)}}}:root,html[data-palette=warm]{--bg:#faf9f6;--bg-panel:#f2f0ea;--bg-hover:#eae7df;--bg-selected:#e5e0d4;--border:#e2ddd2;--text:#2b2823;--text-muted:#69635a;--text-dim:#6a6458;--accent:#b03e22;--accent-strong:#b03e22;--accent-hover:#96331b;--user-bg:#f5ede1;--tool-bg:#f6f3ed;--bg-subtle:#3c32230a;--status-error:#b42318;--status-success:#18794e;--status-warning:#8a5a00;--status-modified:#a87b1f;--status-renamed:#2563eb;--on-accent:#fff;--overlay-backdrop:var(--text)}@supports (color:color-mix(in lab,red,red)){:root,html[data-palette=warm]{--overlay-backdrop:color-mix(in srgb,var(--text) 24%,transparent)}}:root,html[data-palette=warm]{--border-muted:#e2ddd2;--border-accent:#b03e22;--focus-ring-color:#b03e22;--custom-message-bg:#f3eee6;--tool-pending-bg:#f3f0ea;--tool-success-bg:#edf3ec;--tool-error-bg:#f7ece8;--source-project:#b03e22;--source-user:#69635a;--source-extension:#6a6458;--switch-track:#e2ddd2;--switch-thumb:#fff;--switch-thumb-shadow:0 1px 2px #3c322338}html.dark:not([data-palette]),html[data-palette=warm].dark{--bg:#1b1916;--bg-panel:#231f1b;--bg-hover:#2b2721;--bg-selected:#332e26;--border:#38322b;--text:#ebe6dc;--text-muted:#a39b8e;--text-dim:#938c81;--accent:#e07b54;--accent-strong:#c2542e;--accent-hover:#e89371;--user-bg:#2c2721;--tool-bg:#26221d;--bg-subtle:#ebe1d20d;--status-error:#ff8a80;--status-success:#69d5a5;--status-warning:#f0c36a;--status-modified:#e0b24d;--status-renamed:#7ca8ff;--on-accent:#fff;--overlay-backdrop:var(--text)}@supports (color:color-mix(in lab,red,red)){html.dark:not([data-palette]),html[data-palette=warm].dark{--overlay-backdrop:color-mix(in srgb,var(--text) 24%,transparent)}}html.dark:not([data-palette]),html[data-palette=warm].dark{--border-muted:#38322b;--border-accent:#e07b54;--focus-ring-color:#e07b54;--custom-message-bg:#2a252f;--tool-pending-bg:#25242a;--tool-success-bg:#202923;--tool-error-bg:#302221;--source-project:#e07b54;--source-user:#a39b8e;--source-extension:#938c81;--switch-track:#38322b;--switch-thumb:#ebe6dc;--switch-thumb-shadow:0 1px 2px #00000073}html[data-palette=omp]{--bg:#f9f7f1;--bg-panel:#f1eee6;--bg-hover:#ebe7dc;--bg-selected:#ede9df;--border:#c8c4b8;--text:#3a3832;--text-muted:#68645c;--text-dim:#746f65;--accent:#608058;--accent-strong:#4a603f;--accent-hover:#526f4b;--user-bg:#f2efe7;--tool-bg:#eef0ed;--bg-subtle:#3a38320b;--status-error:#a8463e;--status-success:#4a713f;--status-warning:#876a20;--status-modified:#876a20;--status-renamed:#456f68;--on-accent:#fff;--overlay-backdrop:var(--text)}@supports (color:color-mix(in lab,red,red)){html[data-palette=omp]{--overlay-backdrop:color-mix(in srgb,var(--text) 24%,transparent)}}html[data-palette=omp]{--border-muted:#d8d3c7;--border-accent:#608058;--focus-ring-color:#608058;--custom-message-bg:#eef5ec;--tool-pending-bg:#eef0ed;--tool-success-bg:#ecf2ea;--tool-error-bg:#f5efed;--source-project:#608058;--source-user:#68645c;--source-extension:#746f65;--switch-track:#c8c4b8;--switch-thumb:#fff;--switch-thumb-shadow:0 1px 2px #3a383238}html[data-palette=omp].dark{--bg:#18181e;--bg-panel:#1e1e24;--bg-hover:#272a31;--bg-selected:#31363f;--border:#3d424a;--text:#e7e8ea;--text-muted:#a0a4ac;--text-dim:#858b96;--accent:#febc38;--accent-strong:#956000;--accent-hover:#ffd06a;--user-bg:#221d1a;--tool-bg:#1d2129;--bg-subtle:#e7e8ea0d;--status-error:#ff6b78;--status-success:#89d281;--status-warning:#e4c00f;--status-modified:#e4c00f;--status-renamed:#64b5d2;--on-accent:#fff;--overlay-backdrop:var(--text)}@supports (color:color-mix(in lab,red,red)){html[data-palette=omp].dark{--overlay-backdrop:color-mix(in srgb,var(--text) 24%,transparent)}}html[data-palette=omp].dark{--border-muted:#3d424a;--border-accent:#febc38;--focus-ring-color:#febc38;--custom-message-bg:#2a2530;--tool-pending-bg:#1d2129;--tool-success-bg:#161a1f;--tool-error-bg:#291d1d;--source-project:#febc38;--source-user:#a0a4ac;--source-extension:#858b96;--switch-track:#3d424a;--switch-thumb:#e7e8ea;--switch-thumb-shadow:0 1px 2px #00000080}:root{--app-viewport-height:100dvh;--app-viewport-offset-top:0px;--radius-control:8px;--radius-card:12px;--radius-modal:16px;--control-height-sm:28px;--control-height:32px;--control-height-lg:36px;--shell-topbar-height:36px;--shell-file-toggle-size:28px;--control-touch:44px;--control-touch-icon:40px;--space-1:2px;--space-2:4px;--space-3:6px;--space-4:8px;--space-5:12px;--space-6:16px;--space-8:24px;--text-xs:12px;--text-sm:12px;--text-md:13px;--text-base:14px;--text-lg:16px;--text-xl:18px;--composer-ring-size:26px;--composer-control-h:var(--control-height-sm);--composer-attachment-w:var(--control-height-sm);--composer-thinking-max-w:66px;--composer-send-size:var(--control-height);--composer-shell-padding:var(--space-5) var(--space-5) var(--space-4) calc(var(--space-5) + var(--space-1));--composer-toolbar-separation:var(--space-2);--sidebar-mobile-width:280px;--accent-subtle:var(--accent)}@supports (color:color-mix(in lab,red,red)){:root{--accent-subtle:color-mix(in srgb,var(--accent) 12%,transparent)}}:root{--status-success-subtle:var(--status-success)}@supports (color:color-mix(in lab,red,red)){:root{--status-success-subtle:color-mix(in srgb,var(--status-success) 12%,transparent)}}:root{--status-warning-subtle:var(--status-warning)}@supports (color:color-mix(in lab,red,red)){:root{--status-warning-subtle:color-mix(in srgb,var(--status-warning) 12%,transparent)}}:root{--code-bg:var(--bg)}@supports (color:color-mix(in lab,red,red)){:root{--code-bg:color-mix(in srgb,var(--bg) 88%,var(--bg-panel))}}:root{--code-font-size:12.5px;--code-line-height:1.62;--code-padding-block:11px;--code-padding-inline:13px;--control-padding-inline:10px;--z-dropdown:50;--z-extension-dialog:90;--z-tooltip:120;--z-sidebar-backdrop:199;--z-sidebar:200;--z-resize-handle:205;--z-file-toggle:300;--z-branch-popover:600;--z-dialog-backdrop:1000;--z-dialog:1001;--z-directory-picker:1002;--z-command-palette:2000;--z-toast:2100;--dur-spin:.8s;--shadow-live-indicator:0 0 4px var(--status-success);--focus-ring:0 0 0 2px var(--focus-ring-color)}@supports (color:color-mix(in lab,red,red)){:root{--focus-ring:0 0 0 2px color-mix(in srgb,var(--focus-ring-color) 22%,transparent)}}:root{--shadow-card:0 1px 2px #3c32230d,0 2px 8px #3c32230f;--shadow-pop:0 2px 6px #3c322312,0 8px 24px #3c32231a;--shadow-modal:0 4px 12px #3c322314,0 16px 48px #3c322324;--ease-out-warm:cubic-bezier(.22,1,.36,1);--dur-fast:.15s;--dur-med:.22s;--dur-slow:.32s;--dur-theme:.45s;--palette-warm-preview-bg:#faf9f6;--palette-warm-preview-panel:#f2f0ea;--palette-warm-preview-accent:#b03e22;--palette-omp-preview-bg:#f9f7f1;--palette-omp-preview-panel:#ebe7dc;--palette-omp-preview-accent:#608058}html.dark{--shadow-card:0 1px 2px #00000059,0 0 0 1px #ebe1d208;--shadow-pop:0 2px 8px #00000073,0 0 0 1px #ebe1d20a;--shadow-modal:0 8px 32px #0000008c,0 0 0 1px #ebe1d20d}::view-transition-old(root){mix-blend-mode:normal;animation:none}::view-transition-new(root){mix-blend-mode:normal;animation:none}::view-transition-old(root){z-index:1}::view-transition-new(root){z-index:2}*{box-sizing:border-box}html{scroll-behavior:smooth}body,html{background:var(--bg);height:100%;color:var(--text);font-family:var(--font-sans);overscroll-behavior:none;margin:0;padding:0;font-size:14px;overflow:hidden}body{height:var(--app-viewport-height,100dvh)}a,button,html,input,select,textarea{touch-action:manipulation;-webkit-tap-highlight-color:transparent}a:active,button:active:not(:disabled){opacity:.85}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--focus-ring-color);outline-offset:1px}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--text-dim)}@supports (color:color-mix(in lab,red,red)){::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--text-dim) 45%,transparent)}}::-webkit-scrollbar-thumb{background-clip:content-box;border:2px solid #0000;border-radius:8px}::-webkit-scrollbar-thumb:hover{background:var(--text-dim)}@supports (color:color-mix(in lab,red,red)){::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--text-dim) 75%,transparent)}}::-webkit-scrollbar-thumb:hover{background-clip:content-box}*{scrollbar-width:thin;scrollbar-color:var(--text-dim) transparent}@supports (color:color-mix(in lab,red,red)){*{scrollbar-color:color-mix(in srgb,var(--text-dim) 45%,transparent) transparent}}:focus-visible{outline:2px solid var(--focus-ring-color);outline-offset:2px;border-radius:var(--radius-control)}:focus:not(:focus-visible){outline:none}:root{--font-sans:"Pretendard Variable","Pretendard",-apple-system,BlinkMacSystemFont,system-ui,sans-serif;--font-mono:var(--font-noto-mono),"SFMono-Regular","Consolas",var(--font-sans),monospace;--font-serif:var(--font-sans)}code,pre{font-family:var(--font-mono)}.display-serif{font-family:var(--font-sans);letter-spacing:-.012em;font-weight:600}.markdown-body{font-size:var(--text-base,14px);color:var(--text);word-break:break-word;line-height:1.5}.markdown-body p{margin:0 0 10px}.markdown-body p:last-child{margin-bottom:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{font-family:var(--font-sans);color:var(--text);letter-spacing:.005em;font-weight:600;line-height:1.35}.markdown-body h1{margin:14px 0 8px;font-size:1.2em}.markdown-body h2{margin:12px 0 6px;font-size:1.1em}.markdown-body h3{color:var(--text);margin:10px 0 5px;font-size:1em}@supports (color:color-mix(in lab,red,red)){.markdown-body h3{color:color-mix(in srgb,var(--text) 88%,var(--text-muted))}}.markdown-body ol,.markdown-body ul{margin:6px 0 10px;padding-left:22px;list-style-position:outside}.markdown-body li{margin:2px 0;padding-left:2px}.markdown-body li>ol,.markdown-body li>ul{margin:2px 0 4px}.markdown-body ul>li{list-style-type:disc}.markdown-body ol>li{list-style-type:decimal}.markdown-body li>p{margin:0}.markdown-body li::marker{color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.markdown-body li::marker{color:color-mix(in srgb,var(--accent) 72%,var(--text-muted))}}.markdown-body li::marker{font-weight:600}.markdown-body strong{color:var(--text)}@supports (color:color-mix(in lab,red,red)){.markdown-body strong{color:color-mix(in srgb,var(--text) 88%,var(--accent))}}.markdown-body strong{font-weight:700}.markdown-body em{color:var(--text-muted)}.markdown-body a{color:var(--accent);text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1px;-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.markdown-body a{-webkit-text-decoration-color:color-mix(in srgb,var(--accent) 45%,transparent);text-decoration-color:color-mix(in srgb,var(--accent) 45%,transparent)}}.markdown-body a:hover{-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}.markdown-body img{border-radius:var(--radius-control);max-width:100%;height:auto;margin:8px 0;display:block}.markdown-body .markdown-inline-code{background:var(--bg-panel)}@supports (color:color-mix(in lab,red,red)){.markdown-body .markdown-inline-code{background:color-mix(in srgb,var(--bg-panel) 62%,var(--bg))}}.markdown-body .markdown-inline-code{border-radius:calc(var(--radius-control) - var(--space-1));color:var(--text);font-family:var(--font-mono);box-shadow:inset 0 0 0 1px var(--border);padding:1px 5px;font-size:.92em}@supports (color:color-mix(in lab,red,red)){.markdown-body .markdown-inline-code{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--border) 60%,transparent)}}.markdown-body .contains-task-list{padding-left:0;list-style:none}.markdown-body .task-list-item{padding-left:25px;display:block;position:relative}.markdown-body .task-list-item::marker{content:""}.markdown-body .task-list-item>input[type=checkbox],.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child{appearance:none;border:1px solid var(--border);background:var(--bg);border-radius:4px;place-content:center;width:14px;height:14px;margin:0;display:inline-grid;position:absolute;top:.35em;left:0}.markdown-body .task-list-item>input[type=checkbox]:checked,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked{border-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.markdown-body .task-list-item>input[type=checkbox]:checked,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked{border-color:color-mix(in srgb,var(--accent) 55%,var(--border))}}.markdown-body .task-list-item>input[type=checkbox]:checked,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.markdown-body .task-list-item>input[type=checkbox]:checked,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked{background:color-mix(in srgb,var(--accent) 10%,var(--bg))}}.markdown-body .task-list-item>input[type=checkbox]:checked:before,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked:before{content:"";border:solid var(--accent);border-width:0 1.5px 1.5px 0;width:4px;height:8px;transform:rotate(45deg)translateY(-1px)}.markdown-body blockquote{border-left:3px solid var(--border)}@supports (color:color-mix(in lab,red,red)){.markdown-body blockquote{border-left:3px solid color-mix(in srgb,var(--border) 75%,var(--text-muted))}}.markdown-body blockquote{border-radius:0 var(--radius-control) var(--radius-control) 0;background:var(--bg-subtle);color:var(--text-muted);margin:6px 0;padding:6px 11px}.markdown-table-wrap{border:1px solid var(--border);border-radius:var(--radius-control);width:100%;margin:8px 0;overflow:auto hidden}.markdown-body table{border-collapse:separate;border-spacing:0;min-width:100%;font-size:var(--text-md)}.markdown-body td,.markdown-body th{border:0;border-bottom:1px solid var(--border);text-align:left;vertical-align:top;padding:6px 10px}.markdown-body tr:last-child td{border-bottom:0}.markdown-body th{background:var(--bg-panel);color:var(--text)}@supports (color:color-mix(in lab,red,red)){.markdown-body th{color:color-mix(in srgb,var(--text) 88%,var(--text-muted))}}.markdown-body th{font-weight:650}.markdown-body tbody tr:nth-child(2n) td{background:var(--bg-subtle)}.markdown-body hr{background:linear-gradient(90deg,transparent,var(--border),transparent);border:none;height:1px;margin:12px 0}.markdown-body .katex-display{margin:.6em 0;padding:2px 0;overflow:auto hidden}.markdown-body .katex{font-size:1.05em}.markdown-user-message p{white-space:pre-wrap}.markdown-custom-message{line-height:1.32}.markdown-custom-message p{margin:0}.markdown-custom-message h1,.markdown-custom-message h2,.markdown-custom-message h3,.markdown-custom-message h4,.markdown-custom-message h5,.markdown-custom-message h6{margin:4px 0 2px;line-height:1.18}.markdown-custom-message ol,.markdown-custom-message ul{margin:2px 0 3px}.markdown-custom-message li{margin:0}.markdown-custom-message blockquote{margin:3px 0;padding:4px 8px}.markdown-custom-message .markdown-code-block,.markdown-custom-message .markdown-table-wrap{margin:4px 0}.markdown-compaction-message{line-height:1.5}.markdown-compaction-message p{margin:0 0 7px}.markdown-compaction-message h1,.markdown-compaction-message h2,.markdown-compaction-message h3,.markdown-compaction-message h4,.markdown-compaction-message h5,.markdown-compaction-message h6{margin:8px 0 3px;line-height:1.25}.markdown-compaction-message ol,.markdown-compaction-message ul{margin:4px 0 8px}.markdown-compaction-message li{margin:2px 0}.markdown-compaction-message .markdown-code-block,.markdown-compaction-message .markdown-table-wrap{margin:6px 0}.markdown-subagent-text{font-size:var(--text-md);line-height:1.55}.markdown-subagent-text p{margin:0 0 6px}.markdown-subagent-text p:last-child{margin-bottom:0}.markdown-subagent-text h1,.markdown-subagent-text h2,.markdown-subagent-text h3,.markdown-subagent-text h4,.markdown-subagent-text h5,.markdown-subagent-text h6{margin:7px 0 3px;line-height:1.25}.markdown-subagent-text ol,.markdown-subagent-text ul{margin:3px 0 6px}.markdown-subagent-text li{margin:1px 0}.markdown-subagent-text blockquote{margin:4px 0;padding:4px 8px}.markdown-subagent-text .markdown-code-block,.markdown-subagent-text .markdown-table-wrap{margin:5px 0}.compaction-file-details{border-top:1px solid var(--border);color:var(--text-muted);font-size:var(--text-sm);margin-top:10px;padding-top:8px}.compaction-file-details summary{cursor:pointer;font-weight:600;line-height:1.4}.compaction-file-section{margin-top:8px}.compaction-file-title{color:var(--text);font-size:var(--text-sm);margin-bottom:4px;font-weight:650}.compaction-file-list{border:1px solid var(--border);border-radius:var(--radius-control);background:var(--bg-panel);max-height:180px;font-family:var(--font-mono);font-size:var(--text-sm);margin:0;padding:7px 8px;line-height:1.45;list-style:none;overflow:auto}.compaction-file-list li{overflow-wrap:anywhere}.compaction-file-list li+li{margin-top:3px}.markdown-code-block{border:1px solid var(--border);border-radius:var(--radius-control);background:var(--bg);box-shadow:0 1px 0 var(--border);margin:6px 0;position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.markdown-code-block{box-shadow:0 1px 0 color-mix(in srgb,var(--border) 42%,transparent)}}.markdown-code-header{background:var(--bg-panel);border-bottom:1px solid var(--border);color:var(--text-dim);font-size:var(--text-sm);justify-content:space-between;align-items:center;gap:8px;padding:5px 10px;display:flex}.markdown-code-lang{color:var(--text-muted);font-family:var(--font-mono);font-weight:650}.markdown-code-actions{align-items:center;gap:6px;display:flex}.markdown-code-action{border:1px solid var(--border);border-radius:calc(var(--radius-control) - var(--space-1));background:var(--bg);color:var(--text-muted);cursor:pointer;font:inherit;font-size:var(--text-sm);padding:2px 7px;line-height:1.25}.markdown-code-action:hover:not(:disabled){color:var(--text);border-color:var(--border)}@supports (color:color-mix(in lab,red,red)){.markdown-code-action:hover:not(:disabled){border-color:color-mix(in srgb,var(--border) 70%,var(--text-muted))}}.markdown-code-action:hover:not(:disabled){background:var(--bg-hover)}.markdown-code-action.is-copied{color:var(--status-success);border-color:var(--status-success)}@supports (color:color-mix(in lab,red,red)){.markdown-code-action.is-copied{border-color:color-mix(in srgb,var(--status-success) 45%,var(--border))}}.markdown-code-action.is-copied{background:var(--bg-panel)}.markdown-code-action:disabled{color:var(--text-dim);cursor:not-allowed;opacity:.75}.markdown-code-action.is-active{background:var(--bg-selected);color:var(--text)}.mermaid-block{background:var(--bg);padding:12px;overflow-x:auto}@supports (color:color-mix(in lab,red,red)){.mermaid-block{background:color-mix(in srgb,var(--bg) 92%,var(--bg-panel))}}.mermaid-block svg{max-width:none;display:block}.mermaid-block-loading{min-height:120px;color:var(--text-muted);justify-content:center;align-items:center;gap:8px;font-size:12px;animation:pulse 1.4s ease-in-out infinite;display:flex}.mermaid-block-loading:after{content:"";border:2px solid var(--border);border-top-color:var(--accent);width:14px;height:14px;animation:spin var(--dur-spin) linear infinite;border-radius:50%}.mermaid-block-error{color:var(--text-muted);font-family:var(--font-mono);align-items:center;gap:10px;padding:12px;font-size:12px;display:flex}.mermaid-preview-button{width:100%;color:inherit;cursor:zoom-in;text-align:left;border:0}.mermaid-preview-button:hover{opacity:.85}.mermaid-preview-button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.mermaid-zoom-dialog{background:var(--bg);width:100vw;max-width:none;height:100dvh;max-height:none;color:var(--text);border:0;margin:0;padding:0}.mermaid-zoom-dialog::backdrop{background:var(--overlay-backdrop)}.mermaid-zoom-layout{grid-template-rows:auto minmax(0,1fr);height:100%;display:grid}.mermaid-zoom-toolbar{background:var(--bg-panel);border-bottom:1px solid var(--border);align-items:center;gap:10px;min-height:40px;padding:7px 10px;display:flex}.mermaid-zoom-title{min-width:0;color:var(--text-muted);font-family:var(--font-mono);font-size:var(--text-sm);text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.mermaid-zoom-actions{align-items:center;gap:6px;margin-left:auto;display:flex}.mermaid-zoom-stepper{border:1px solid var(--border);border-radius:var(--radius-control);background:var(--bg);align-items:center;height:24px;display:flex;overflow:hidden}.mermaid-zoom-icon-button,.mermaid-zoom-stepper button{width:24px;height:24px;color:var(--text-muted);cursor:pointer;touch-action:manipulation;background:0 0;border:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.mermaid-zoom-stepper button{height:22px}.mermaid-zoom-stepper button+.mermaid-zoom-value,.mermaid-zoom-value+button{border-left:1px solid var(--border)}.mermaid-zoom-icon-button{border:1px solid var(--border);border-radius:var(--radius-control);flex:0 0 24px}.mermaid-zoom-icon-button:hover,.mermaid-zoom-stepper button:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.mermaid-zoom-stepper button:disabled{opacity:.35;cursor:default}.mermaid-zoom-icon-button:focus-visible,.mermaid-zoom-stepper button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.mermaid-zoom-value{min-width:48px;height:22px;color:var(--text-muted);font-family:var(--font-mono);font-size:var(--text-sm);text-align:center;-webkit-user-select:none;user-select:none;line-height:22px}.mermaid-zoom-viewport{background:var(--bg);-webkit-overflow-scrolling:touch;min-width:0;min-height:0;padding:24px;overflow:auto}.mermaid-zoom-canvas{border:1px solid var(--border);border-radius:var(--radius-card);background:var(--bg-panel);transition:transform var(--dur-fast) var(--ease-out-warm);margin:0 auto;padding:12px}.mermaid-zoom-canvas svg{height:auto;display:block;width:100%!important;max-width:none!important}@media (max-width:480px){.mermaid-zoom-toolbar{padding-inline:8px}.mermaid-zoom-title{font-size:var(--text-sm)}.mermaid-zoom-viewport{padding:12px}}.image-clickable{cursor:zoom-in;background:0 0;border:none;max-width:100%;padding:0;line-height:0;display:inline-block}.markdown-body .image-clickable{width:fit-content;display:block}.image-clickable:hover img{opacity:.85}.image-clickable:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--radius-control)}.image-lightbox-dialog{background:var(--bg);width:100vw;max-width:none;height:100dvh;max-height:none;color:var(--text);border:0;margin:0;padding:0}.image-lightbox-dialog::backdrop{background:var(--overlay-backdrop)}.image-lightbox-layout{grid-template-rows:auto minmax(0,1fr);height:100%;display:grid}.image-lightbox-toolbar{background:var(--bg-panel);border-bottom:1px solid var(--border);align-items:center;gap:10px;min-height:40px;padding:7px 10px;display:flex}.image-lightbox-title{min-width:0;color:var(--text-muted);font-family:var(--font-mono);font-size:var(--text-sm);text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.image-lightbox-actions{align-items:center;gap:6px;margin-left:auto;display:flex}.image-lightbox-stepper{border:1px solid var(--border);border-radius:var(--radius-control);background:var(--bg);align-items:center;height:24px;display:flex;overflow:hidden}.image-lightbox-icon-button,.image-lightbox-stepper button{width:24px;height:24px;color:var(--text-muted);cursor:pointer;touch-action:manipulation;background:0 0;border:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.image-lightbox-stepper button{height:22px}.image-lightbox-stepper button+.image-lightbox-zoom-value,.image-lightbox-zoom-value+button{border-left:1px solid var(--border)}.image-lightbox-icon-button{border:1px solid var(--border);border-radius:var(--radius-control);flex:0 0 24px}.image-lightbox-icon-button:hover,.image-lightbox-stepper button:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.image-lightbox-stepper button:disabled{opacity:.35;cursor:default}.image-lightbox-icon-button:focus-visible,.image-lightbox-stepper button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.image-lightbox-zoom-value{min-width:48px;height:22px;color:var(--text-muted);font-family:var(--font-mono);font-size:var(--text-sm);text-align:center;-webkit-user-select:none;user-select:none;line-height:22px}.image-lightbox-viewport{background:var(--bg);-webkit-overflow-scrolling:touch;min-width:0;min-height:0;padding:24px;display:flex;overflow:auto}.image-lightbox-dialog .image-lightbox-img{max-width:none;height:auto;transition:transform var(--dur-fast) var(--ease-out-warm);margin:auto;display:block}@media (max-width:480px){.image-lightbox-toolbar{padding-inline:8px}.image-lightbox-title{font-size:var(--text-sm)}.image-lightbox-viewport{padding:12px}}.file-viewer-toolbar{min-width:0;min-height:35px}.file-viewer-path{flex:auto;min-width:48px}.file-viewer-meta,.file-viewer-path{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.file-viewer-meta{flex:0 auto;min-width:0}.file-viewer-live-indicator{border-radius:50%;flex:0 0 7px;width:7px;height:7px}.file-viewer-controls{gap:6px}.file-viewer-actions,.file-viewer-controls{flex-shrink:0;align-items:center;display:flex}.file-viewer-actions{order:-1;gap:4px;height:24px}.file-viewer-mode-switch{border:1px solid var(--border);border-radius:var(--radius-control);height:24px;display:flex;overflow:hidden}.file-viewer-mode-button{border:0;border-left:1px solid var(--border);height:22px;font:inherit;font-size:var(--text-sm);letter-spacing:0;cursor:pointer;white-space:nowrap;padding:0 8px;font-weight:500}.file-viewer-mode-button:first-child{border-left:0}.file-viewer-mode-button:hover{filter:brightness(1.08)}.file-viewer-icon-button{box-sizing:border-box;border:1px solid var(--border);border-radius:var(--radius-control);width:24px;height:24px;color:var(--text-muted);cursor:pointer;background:0 0;flex:0 0 24px;justify-content:center;align-items:center;padding:0;text-decoration:none;display:inline-flex}.file-viewer-icon-button:hover{color:var(--text);background:var(--bg-hover)!important}.file-viewer-icon-button:disabled{color:var(--text-dim);cursor:not-allowed;opacity:.55}.file-viewer-icon-button:disabled:hover{color:var(--text-dim);background:0 0!important}.file-viewer-icon-button:focus-visible,.file-viewer-mode-button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.directory-picker-path:focus-visible{box-shadow:0 0 0 3px var(--accent);border-color:var(--accent)!important}@supports (color:color-mix(in lab,red,red)){.directory-picker-path:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 18%,transparent)}}.directory-picker-action:focus-visible,.directory-picker-back:focus-visible,.directory-picker-entry:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.session-item-button{font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:none;padding:0}.session-item-button:focus-visible,.session-item-icon-button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;border-radius:var(--radius-control)}.sidebar-new-session:focus-visible,.sidebar-project-action:focus-visible,.sidebar-project-header>button:focus-visible,.sidebar-project-identity:focus-visible,.sidebar-settings-row:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.sidebar-menu-item{text-align:left;cursor:pointer;width:100%;transition:background var(--dur-fast) var(--ease-out-warm);background:0 0;border:none;display:block}.sidebar-menu-item:hover:not(:disabled){background:var(--bg-hover)}.sidebar-menu-item:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;border-radius:var(--radius-control)}.sidebar-project{isolation:isolate;transition:margin var(--dur-med) var(--ease-out-warm);position:relative}.sidebar-project-header{z-index:1;position:relative}.sidebar-project-worktree{animation:sidebar-worktree-in var(--dur-fast) var(--ease-out-warm) both;margin:0 0 0 32px;padding:0 0 2px 6px}.sidebar-project-worktree>div{width:auto!important;margin:0!important}.sidebar-project-worktree button{width:100%!important;max-width:none!important}@keyframes sidebar-worktree-in{0%{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:translateY(0)}}@keyframes sidebar-sessions-in{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.sidebar-project-activity{transition:transform var(--dur-fast) var(--ease-out-warm),opacity var(--dur-fast) var(--ease-out-warm)}.sidebar-project:hover .sidebar-project-activity{transform:translate(-1px)}.chat-input-shell{transition:border-color var(--dur-med) var(--ease-out-warm),box-shadow var(--dur-med) var(--ease-out-warm),transform var(--dur-med) var(--ease-out-warm)}.chat-input-shell:focus-within{transform:none}.composer-control-shelf{animation:ui-slide-up var(--dur-fast) var(--ease-out-warm) both}.composer-control-shelf>button{transition:background var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm),border-color var(--dur-fast) var(--ease-out-warm),transform var(--dur-fast) var(--ease-out-warm)}.composer-control-shelf>button:hover:not(:disabled){transform:none;background:var(--bg-hover)!important;color:var(--text)!important}@media (min-width:641px){.composer-control-shelf{border-top:1px solid var(--border);justify-content:flex-end;max-width:min(100%,760px);padding-top:4px;gap:4px!important}@supports (color:color-mix(in lab,red,red)){.composer-control-shelf{border-top:1px solid color-mix(in srgb,var(--border) 72%,transparent)}}.composer-control-shelf>button{border-radius:var(--radius-control)!important;height:28px!important;font-size:var(--text-sm)!important;padding-inline:8px!important}}@media (max-width:640px){.file-viewer-meta{display:none}}@media (max-width:380px){.file-viewer-toolbar{gap:6px!important;padding-inline:8px!important}.file-viewer-mode-button{padding-inline:6px}}.markdown-file-preview h1{font-size:1.8em}.markdown-file-preview h2{font-size:1.4em}.markdown-file-preview h3{font-size:1.15em}.markdown-file-preview p{margin:0 0 12px}.markdown-file-preview pre{border:1px solid var(--border);border-radius:var(--radius-card);font-size:var(--text-md);margin:12px 0;padding:12px 16px;overflow-x:auto}.markdown-file-preview code,.markdown-file-preview pre{background:var(--bg-panel);font-family:var(--font-mono)}.markdown-file-preview code{border-radius:3px;padding:1px 5px;font-size:.9em}.markdown-file-preview pre code{background:0 0;padding:0}.markdown-body span.linenumber,span.linenumber{color:var(--text-dim)!important;font-style:normal!important}span.token.table{display:inline}@keyframes drop-zone-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}@keyframes drop-ripple{0%{opacity:.6;transform:scale(0)}to{opacity:0;transform:scale(1)}}.drop-zone-overlay{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.drop-zone-overlay{background:color-mix(in srgb,var(--accent) 6%,transparent)}}.drop-zone-overlay{animation:drop-zone-in var(--dur-fast) var(--ease-out-warm) both}.drop-ripple-ring{border-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.drop-ripple-ring{border-color:color-mix(in srgb,var(--accent) 50%,transparent)}}.drop-ripple-ring{animation:drop-ripple 2.4s var(--ease-out-warm) infinite backwards}.drop-zone-illustration{filter:drop-shadow(0 6px 18px var(--accent))}@supports (color:color-mix(in lab,red,red)){.drop-zone-illustration{filter:drop-shadow(0 6px 18px color-mix(in srgb,var(--accent) 18%,transparent))}}@keyframes spin{to{transform:rotate(1turn)}}.icon-spin{animation:spin var(--dur-spin) linear infinite}@keyframes pulse{50%{opacity:.5}}@keyframes skeleton-shimmer{0%{background-position:-150% 0}to{background-position:150% 0}}.skeleton{background:linear-gradient(90deg,var(--bg-subtle) 0,var(--text-dim) 50%,var(--bg-subtle) 100%)}@supports (color:color-mix(in lab,red,red)){.skeleton{background:linear-gradient(90deg,var(--bg-subtle) 0,color-mix(in srgb,var(--text-dim) 10%,var(--bg-subtle)) 50%,var(--bg-subtle) 100%)}}.skeleton{border-radius:var(--radius-control);background-size:200% 100%;animation:skeleton-shimmer 1.6s ease-in-out infinite}.skeleton-lines{gap:var(--space-4);flex-direction:column;width:100%;display:flex}.skeleton-line{border-radius:var(--radius-control);background:linear-gradient(90deg,var(--bg-subtle) 0,var(--text-dim) 50%,var(--bg-subtle) 100%);height:12px;display:block}@supports (color:color-mix(in lab,red,red)){.skeleton-line{background:linear-gradient(90deg,var(--bg-subtle) 0,color-mix(in srgb,var(--text-dim) 10%,var(--bg-subtle)) 50%,var(--bg-subtle) 100%)}}.skeleton-line{background-size:200% 100%;animation:skeleton-shimmer 1.6s ease-in-out infinite}.skeleton-line:first-child{width:85%}.skeleton-line:nth-child(2){width:65%}.skeleton-line:nth-child(3){width:45%}.skeleton-lines>.skeleton:first-child{width:85%}.skeleton-lines>.skeleton:nth-child(2){width:65%}.skeleton-lines>.skeleton:nth-child(3){width:45%}.chat-input-shell:focus-within{border-color:var(--accent)!important}@supports (color:color-mix(in lab,red,red)){.chat-input-shell:focus-within{border-color:color-mix(in srgb,var(--accent) 45%,transparent)!important}}.chat-input-shell:focus-within{box-shadow:var(--shadow-card),0 0 0 3px var(--accent)!important}@supports (color:color-mix(in lab,red,red)){.chat-input-shell:focus-within{box-shadow:var(--shadow-card),0 0 0 3px color-mix(in srgb,var(--accent) 14%,transparent)!important}}@keyframes ui-fade-in{0%{opacity:0}to{opacity:1}}@keyframes ui-scale-in{0%{opacity:0;transform:scale(.96)translateY(-4px)}to{opacity:1;transform:scale(1)translateY(0)}}@keyframes ui-slide-down{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}@keyframes ui-slide-up{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@keyframes ui-sheet-slide-up{0%{opacity:.8;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes ui-sheet-backdrop-in{0%{opacity:0}to{opacity:1}}.animate-fade-in{animation:ui-fade-in var(--dur-fast) var(--ease-out-warm) both}.animate-scale-in{animation:ui-scale-in var(--dur-med) var(--ease-out-warm) both}.animate-slide-down{animation:ui-slide-down var(--dur-med) var(--ease-out-warm) both}.animate-slide-up{animation:ui-slide-up var(--dur-med) var(--ease-out-warm) both}@keyframes dialog-backdrop-in{0%{opacity:0}to{opacity:1}}.dialog-backdrop-animate{animation:dialog-backdrop-in var(--dur-med) var(--ease-out-warm) both;transition:opacity var(--dur-med) var(--ease-out-warm)}.dialog-popup-animate{animation:dialog-pop-in var(--dur-med) var(--ease-out-warm) both;transition:width var(--dur-med) var(--ease-out-warm),height var(--dur-med) var(--ease-out-warm),max-width var(--dur-med) var(--ease-out-warm),max-height var(--dur-med) var(--ease-out-warm),border-radius var(--dur-med) var(--ease-out-warm),box-shadow var(--dur-med) var(--ease-out-warm);will-change:transform,opacity}.accordion-flow{transition:grid-template-rows var(--dur-med) var(--ease-out-warm),opacity var(--dur-med) var(--ease-out-warm);opacity:0;grid-template-rows:0fr;display:grid}.accordion-flow.is-open{opacity:1;grid-template-rows:1fr}.accordion-flow-inner{min-height:0;overflow:hidden}.chevron-smooth{transition:transform var(--dur-med) var(--ease-out-warm)}@keyframes dialog-pop-in{0%{opacity:0;transform:translate(-50%,-46%)scale(.97)}to{opacity:1;transform:translate(-50%,-50%)scale(1)}}.dropdown-surface{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius-control);box-shadow:var(--shadow-pop);color:var(--text);animation:ui-scale-in var(--dur-fast) var(--ease-out-warm) both;overflow:hidden}.dropdown-item{color:var(--text-muted);transition:background-color var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm)}.dropdown-item:focus-visible,.dropdown-item:hover{background:var(--bg-hover);color:var(--text);outline:none}.dropdown-item[aria-current=true],.dropdown-item[aria-selected=true],.dropdown-item[data-active=true]{background:var(--bg-selected);color:var(--text)}.dropdown-surface :is(select,option){color-scheme:light}html.dark .dropdown-surface :is(select,option){color-scheme:dark}@keyframes chat-message-in{0%{opacity:0;transform:translateY(7px)scale(.995)}to{opacity:1;transform:translateY(0)scale(1)}}.chat-message-card{animation:chat-message-in var(--dur-med) var(--ease-out-warm) both;transition:border-color var(--dur-fast) var(--ease-out-warm),transform var(--dur-fast) var(--ease-out-warm)}.chat-message-card:hover{transform:none}.chat-action-row{align-items:center;gap:var(--space-2);min-width:0;display:flex}.chat-action-group{align-items:center;gap:calc(var(--space-3) / 2);display:flex}.chat-action-btn{align-items:center;gap:var(--space-2);padding:calc(var(--space-3) / 2) var(--space-4);height:calc(var(--control-height-sm) - var(--space-2));min-height:calc(var(--control-height-sm) - var(--space-2));border-radius:calc(var(--radius-control) - var(--space-3) / 2);cursor:pointer;color:var(--text-dim);font-size:var(--text-sm);white-space:nowrap;touch-action:manipulation;transition:color var(--dur-fast) var(--ease-out-warm),background-color var(--dur-fast) var(--ease-out-warm),opacity var(--dur-fast) var(--ease-out-warm);background:0 0;border:none;font-weight:400;display:inline-flex}.chat-action-btn:hover{color:var(--accent)}.chat-action-btn:focus-visible{outline:2px solid var(--focus-ring-color);outline-offset:1px;color:var(--accent)}.chat-action-btn[disabled]{cursor:not-allowed;opacity:.6}.chat-action-btn.is-active{color:var(--accent)}@media (hover:hover) and (pointer:fine){.chat-action-group{opacity:0;pointer-events:none;transition:opacity var(--dur-fast) var(--ease-out-warm)}.chat-action-group.is-visible,.chat-action-group:focus-within,.chat-message-container:focus-within .chat-action-group,.chat-message-container:hover .chat-action-group,.chat-message:focus-within .chat-action-group,.chat-message:hover .chat-action-group{opacity:1;pointer-events:auto}}@media (hover:none),(max-width:640px),(pointer:coarse){.chat-action-group{opacity:1!important;pointer-events:auto!important}.chat-action-btn{min-height:var(--control-touch,44px);min-width:var(--control-touch,44px);padding:var(--space-2) var(--space-3);font-size:var(--text-md)}}.chat-message,.chat-message--live{animation:chat-message-in var(--dur-med) var(--ease-out-warm) both}.chat-message--live{position:relative}.chat-message--live:before{content:"";background:var(--accent);opacity:0;width:3px;animation:live-text-pulse 2.4s ease-in-out var(--dur-med) infinite;pointer-events:none;border-radius:2px;position:absolute;top:4px;bottom:4px;left:0}@keyframes live-text-pulse{0%,to{opacity:0}50%{opacity:.3}}@keyframes toast-in{0%{opacity:0;transform:translate(18px,8px)scale(.97)}to{opacity:1;transform:translate(0)scale(1)}}.toast-card{animation:toast-in var(--dur-med) var(--ease-out-warm) both;transition:transform var(--dur-fast) var(--ease-out-warm),border-color var(--dur-fast) var(--ease-out-warm),box-shadow var(--dur-fast) var(--ease-out-warm)}.toast-card:hover{border-color:var(--accent)!important}@supports (color:color-mix(in lab,red,red)){.toast-card:hover{border-color:color-mix(in srgb,var(--accent) 30%,var(--border))!important}}.toast-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-modal)!important}.live-status-dot{isolation:isolate;box-shadow:0 0 0 3px var(--accent);position:relative}@supports (color:color-mix(in lab,red,red)){.live-status-dot{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 10%,transparent)}}.live-pulse:after{content:"";border:1.5px solid var(--accent);border-radius:9999px;position:absolute;inset:0}@supports (color:color-mix(in lab,red,red)){.live-pulse:after{border:1.5px solid color-mix(in srgb,var(--accent) 55%,transparent)}}.live-pulse:after{animation:live-dot-pulse 1.5s var(--ease-out-warm) infinite;pointer-events:none;will-change:transform,opacity}@keyframes live-dot-pulse{0%{opacity:.9;transform:scale(1)}70%{opacity:0;transform:scale(2.6)}to{opacity:0;transform:scale(2.6)}}.mcp-editor-grid>:first-child{min-width:0}@media (max-width:640px){.mcp-editor-grid{grid-template-columns:1fr!important}.mcp-editor-grid>:first-child{border-bottom:1px solid var(--border);border-right:0!important}.empty-chat-brand{margin-left:0!important;margin-right:0!important}.model-role-row{gap:6px!important}.model-detail-grid-2,.model-role-row{grid-template-columns:1fr!important}.model-detail-grid-4{grid-template-columns:1fr 1fr!important}}.ui-smooth{transition:background-color var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm),border-color var(--dur-fast) var(--ease-out-warm),opacity var(--dur-fast) var(--ease-out-warm),transform var(--dur-fast) var(--ease-out-warm)}.ui-focus-ring:focus-visible{outline-offset:-2px;outline:2px solid var(--accent)!important}.ui-control{min-height:var(--control-height);padding-inline:var(--control-padding-inline);font:inherit}.ui-control,.ui-icon-button{border-radius:var(--radius-control)}.ui-icon-button{width:var(--control-height);height:var(--control-height);flex:0 0 var(--control-height);justify-content:center;align-items:center;padding:0;display:inline-flex}.ui-compact-surface{border:1px solid var(--border);border-radius:var(--radius-control);background:var(--bg-panel);color:var(--text-muted)}.shell-toolbar-btn{border-radius:var(--radius-control);width:28px;height:28px;color:var(--text);cursor:pointer;transition:background var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.shell-toolbar-btn:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.shell-toolbar-btn:disabled{color:var(--text-dim);cursor:default;opacity:.5}.shell-toolbar-btn[aria-pressed=true]:not([data-theme-toggle]){background:var(--bg-selected);color:var(--text)}.shell-toolbar-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-1px}.shell-toolbar-utility{flex:none;order:1}.shell-session-actions,.shell-toolbar-utility{align-items:center;gap:var(--space-2);min-width:0;height:100%;display:flex}.shell-session-actions{flex:auto;order:3;overflow:hidden}.shell-session-actions>*{flex:none;min-width:0}.shell-toolbar-divider{width:1px;height:18px;margin:0 var(--space-4);background:var(--border);flex:none;order:2}.shell-topbar{min-width:0;height:var(--shell-topbar-height);border-bottom:1px solid var(--border);background:var(--bg-panel);padding-right:calc(var(--shell-file-toggle-size) + var(--space-2) + (var(--shell-topbar-height) - var(--shell-file-toggle-size)) / 2);flex-shrink:0}.shell-stats-btn,.shell-topbar{align-items:center;display:flex}.shell-stats-btn{min-width:var(--control-touch-icon);justify-content:center;gap:var(--control-padding-inline);padding:0 var(--control-padding-inline);height:100%;font-size:var(--text-sm);color:var(--text-muted);white-space:nowrap;cursor:pointer;font-variant-numeric:tabular-nums;transition:color var(--dur-fast) var(--ease-out-warm),background var(--dur-fast) var(--ease-out-warm);background:0 0;border:none;flex:none;order:4;overflow:hidden}.shell-stats-btn:hover{background:var(--bg-hover);color:var(--text)}.shell-stats-btn[aria-pressed=true]{background:var(--bg-selected);color:var(--text)}.shell-file-toggle{top:calc((var(--shell-topbar-height) - var(--shell-file-toggle-size)) / 2);right:calc((var(--shell-topbar-height) - var(--shell-file-toggle-size)) / 2);z-index:var(--z-file-toggle);width:var(--shell-file-toggle-size);height:var(--shell-file-toggle-size);position:fixed}@media (max-width:640px){:root{--shell-topbar-height:calc(44px + env(safe-area-inset-top,0px));--shell-file-toggle-size:44px;--composer-ring-size:28px;--composer-control-h:var(--control-height);--composer-thinking-max-w:66px;--control-touch:44px;--control-touch-icon:44px;--composer-shell-padding:var(--space-5) max(var(--space-5),env(safe-area-inset-right,0px)) var(--space-2) max(calc(var(--space-5) + var(--space-1)),env(safe-area-inset-left,0px))}.shell-topbar{height:var(--shell-topbar-height);padding-top:env(safe-area-inset-top,0);padding-left:env(safe-area-inset-left,0);padding-right:calc(var(--shell-file-toggle-size) + var(--space-2) + env(safe-area-inset-right,0px))}.shell-file-toggle{top:env(safe-area-inset-top,0);right:env(safe-area-inset-right,0);min-width:var(--shell-file-toggle-size);min-height:var(--shell-file-toggle-size);width:var(--shell-file-toggle-size);height:var(--shell-file-toggle-size)}.shell-session-actions,.shell-toolbar-utility{gap:var(--space-2)}.shell-stats-btn{padding:0 var(--space-3);order:3;min-width:44px;min-height:44px}.shell-session-actions{order:4}.shell-session-actions button,.shell-toolbar-btn{min-width:44px;min-height:44px}.shell-toolbar-btn{width:44px;height:44px}.shell-toolbar-divider{margin:0 var(--space-2)}.tabbar-scroll{height:44px!important}.tabbar-close,.tabbar-tab{height:44px!important;min-height:44px!important}.tabbar-close{width:44px!important;min-width:44px!important}.chat-input-textarea{font-size:16px!important}}.process-details-toggle{border-radius:var(--radius-control);width:auto;min-height:24px;color:var(--text-muted);cursor:pointer;font:inherit;font-size:var(--text-sm);text-align:left;transition:background var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm);background:0 0;border:none;align-items:center;gap:6px;margin-left:-8px;padding:2px 8px;display:flex}.process-details-toggle:hover{background:var(--bg-hover);color:var(--text)}.process-details-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:0}.process-details-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.tabbar-scroll{border-bottom:1px solid var(--border);scrollbar-width:thin;scrollbar-color:var(--border) transparent}.tabbar-tab{transition:background var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm)}.tabbar-tab[aria-selected=true]{box-shadow:inset 0 1px 0 var(--accent);background:var(--bg-selected)!important;color:var(--text)!important}@supports (color:color-mix(in lab,red,red)){.tabbar-tab[aria-selected=true]{box-shadow:inset 0 1px 0 color-mix(in srgb,var(--accent) 14%,transparent)}}.tabbar-tab:hover:not([aria-selected=true]){background:var(--bg-hover)!important;color:var(--text)!important}.tabbar-close{transition:background var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm)}@keyframes notice-shelf-in{0%{opacity:0;transform:translateY(-6px)scale(.995)}to{opacity:1;transform:translateY(0)}}@keyframes notice-shelf-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-5px)}}@media (prefers-reduced-motion:reduce){.notice-shelf-item{animation-duration:.001ms!important}html{scroll-behavior:auto}*,:after,:before{scroll-behavior:auto!important;transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}.skeleton,.skeleton-line,.skeleton-lines>.skeleton{background:var(--bg-subtle)!important;animation:none!important}.live-pulse:after{display:none!important}.live-pulse:after,.mermaid-block-loading,.mermaid-block-loading:after{animation:none!important}.chat-message--live:before{opacity:.3!important;animation:none!important}}@keyframes saved-pop{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--status-success) 55%,transparent);transform:scale(1)}40%{box-shadow:0 0 0 6px color-mix(in srgb,var(--status-success) 25%,transparent);transform:scale(1.08)}to{box-shadow:0 0 0 0 color-mix(in srgb,var(--status-success) 0%,transparent);transform:scale(1)}}@keyframes saved-check-draw{0%{stroke-dashoffset:18px;opacity:0}to{stroke-dashoffset:0;opacity:1}}@media (min-width:641px){.sidebar-overlay-backdrop{display:none!important}.sidebar-container{--sidebar-width:260px;transition:width var(--dur-med) var(--ease-out-warm),min-width var(--dur-med) var(--ease-out-warm);position:relative;overflow:hidden}.sidebar-container.sidebar-open{width:var(--sidebar-width,260px);min-width:var(--sidebar-width,260px)}.sidebar-container.sidebar-closed{width:0;min-width:0;border-right:none!important}.sidebar-container>*{width:var(--sidebar-width,260px);min-width:var(--sidebar-width,260px)}.sidebar-container.sidebar-resizing{transition:none}.right-panel-container{transition:width var(--dur-med) var(--ease-out-warm),min-width var(--dur-med) var(--ease-out-warm);flex-shrink:0;overflow:hidden}.right-panel-container.right-panel-open{width:var(--right-panel-width);min-width:300px;max-width:calc(100vw - 360px)}.right-panel-container.right-panel-closed{width:0;min-width:0;border-left:none!important}.right-panel-container>*{width:var(--right-panel-width);min-width:300px}.right-panel-container.right-panel-resizing{transition:none}}.composer-attachment{width:var(--composer-attachment-w);height:var(--composer-attachment-w);border-radius:var(--radius-control);color:var(--text-muted);cursor:pointer;transition:background var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:flex}.composer-attachment[data-has-attachments=true]{color:var(--accent)}.composer-attachment:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.composer-attachment[data-has-attachments=true]:hover:not(:disabled){color:var(--accent)}.composer-attachment:disabled{cursor:not-allowed;opacity:.5}.composer-model-button,.composer-thinking-button{align-items:center;gap:var(--space-2,4px);height:var(--composer-control-h,var(--control-height-sm));padding:0 var(--space-4);border-radius:var(--radius-control);color:var(--text-muted);font-size:var(--text-sm);transition:background var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm);border:none;display:flex}.composer-model-button{max-width:190px;overflow:hidden}.composer-model-button:disabled,.composer-thinking-button:disabled{cursor:not-allowed;opacity:.5}.composer-fast-toggle{gap:var(--space-2,4px);height:var(--composer-control-h,var(--control-height-sm));padding:0 var(--space-4);border-radius:var(--radius-control);transition:background var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm);background:0 0}.composer-fast-toggle,.composer-primary-action{align-items:center;font-size:var(--text-md);border:none;font-weight:600;display:flex}.composer-primary-action{justify-content:center;gap:var(--space-3);width:var(--composer-send-size);min-width:var(--composer-send-size);height:var(--composer-send-size);border-radius:50%;padding:0}.composer-primary-label{display:none}.composer-primary-action[data-state=stop]{background:var(--accent-strong);color:var(--on-accent);cursor:pointer;transition:background var(--dur-fast) var(--ease-out-warm)}.composer-primary-action[data-state=run-submit],.composer-primary-action[data-state=send]{background:var(--accent-strong);color:var(--on-accent);cursor:pointer;box-shadow:var(--shadow-card);transition:background var(--dur-fast) var(--ease-out-warm),box-shadow var(--dur-fast) var(--ease-out-warm)}.composer-primary-action[data-state=run-submit]:disabled,.composer-primary-action[data-state=send]:disabled{background:var(--bg-panel);color:var(--text-dim);cursor:not-allowed;box-shadow:none}.composer-context-ring-wrap{width:var(--composer-ring-size);height:var(--composer-ring-size)}.composer-context-ring,.composer-context-ring-wrap{flex-shrink:0;justify-content:center;align-items:center;display:inline-flex;position:relative}.composer-context-ring{width:100%;height:100%;color:inherit;cursor:pointer;font:inherit;background:0 0;border:0;border-radius:9999px;padding:0}.composer-context-ring:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.composer-context-ring-popup{z-index:20;white-space:nowrap;flex-direction:column;gap:5px;min-width:190px;padding:12px 14px;display:flex;position:absolute;bottom:calc(100% + 8px);right:0}.composer-context-ring-popup-title{color:var(--text);font-size:var(--text-base);font-weight:600}.composer-context-ring-popup-used{color:var(--text);font-size:var(--text-md);font-variant-numeric:tabular-nums;font-weight:500}.composer-context-ring-popup-meta{color:var(--text-muted);font-size:var(--text-sm);font-variant-numeric:tabular-nums}.composer-context-ring-label{color:var(--text-muted);font-variant-numeric:tabular-nums;font-size:8px;font-weight:600}.composer-model-name{white-space:nowrap;text-align:left;direction:rtl;unicode-bidi:plaintext;min-width:0;line-height:1.2}.composer-model-name,.model-option-name{text-overflow:ellipsis;overflow:hidden}.composer-queue-action{align-items:center;gap:var(--space-2,4px);height:var(--composer-control-h,var(--control-height-sm));padding:0 var(--space-4,8px);border-radius:var(--radius-control);font-size:var(--text-md,12px);cursor:pointer;transition:background var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm);background:0 0;border:none;flex-shrink:0;font-weight:600;display:inline-flex}.composer-queue-action-steer{color:var(--status-warning);background:var(--status-warning-subtle)}.composer-queue-action-followup{color:var(--accent);background:var(--accent-subtle)}.composer-queue-action:disabled{color:var(--text-dim);cursor:not-allowed;background:0 0}@media (max-width:640px){.chat-stats-center{display:none!important}.model-option-name{white-space:normal;overflow-wrap:anywhere;line-height:1.35}.composer-toolbar{grid-template-columns:var(--composer-attachment-w) minmax(0,1fr) minmax(0,var(--composer-thinking-max-w)) var(--composer-ring-size) var(--composer-send-size);align-items:center;gap:var(--space-3)!important;display:grid!important}.composer-attachment{touch-action:manipulation;order:1;grid-area:1/1;width:var(--composer-attachment-w)!important;height:var(--composer-send-size)!important;min-width:var(--composer-attachment-w)!important;min-height:var(--composer-send-size)!important;border-radius:var(--radius-control)!important}.composer-model-control{order:2;grid-area:1/2;min-width:0}.composer-model-button{touch-action:manipulation;width:100%;max-width:none!important;height:var(--composer-control-h)!important;min-height:var(--composer-control-h)!important;padding-inline:var(--space-4)!important;border-radius:var(--radius-control)!important;font-size:var(--text-md)!important}.composer-thinking-control{min-width:0;max-width:var(--composer-thinking-max-w);order:3;grid-area:1/3}.composer-thinking-button{touch-action:manipulation;justify-content:center;width:100%;min-width:0;overflow:hidden;height:var(--composer-control-h)!important;min-height:var(--composer-control-h)!important;gap:var(--space-1)!important;padding-inline:var(--space-2)!important;border-radius:var(--radius-control)!important;font-size:var(--text-md)!important}.composer-primary-action{touch-action:manipulation;order:5;grid-area:1/5;justify-content:center;width:var(--composer-send-size)!important;min-width:var(--composer-send-size)!important;height:var(--composer-send-size)!important;min-height:var(--composer-send-size)!important;font-size:var(--text-base)!important;border-radius:50%!important;padding-inline:0!important}.composer-primary-label,.composer-queue-action{display:none}.composer-fast-toggle{order:8;grid-area:2/1/auto/span 2;justify-self:start;height:var(--control-height-lg,36px)!important}.composer-toolbar-spacer{display:none}.composer-context-ring-wrap{order:4;grid-area:1/4;justify-self:end}.sidebar-container{width:var(--sidebar-mobile-width);box-sizing:border-box;max-width:85vw;padding-top:env(safe-area-inset-top,0);padding-left:env(safe-area-inset-left,0);padding-bottom:env(safe-area-inset-bottom,0);transition:transform var(--dur-slow) var(--ease-out-warm),box-shadow var(--dur-slow) var(--ease-out-warm);top:0;bottom:0;left:0;position:fixed!important}.sidebar-container.sidebar-open{box-shadow:var(--shadow-modal);transform:translate(0)}.sidebar-container.sidebar-closed{box-shadow:none;transform:translate(-100%)}.right-panel-container{transition:width var(--dur-med) var(--ease-out-warm),min-width var(--dur-med) var(--ease-out-warm);flex-shrink:0;overflow:hidden}.right-panel-container.right-panel-open{box-sizing:border-box;width:100%;min-width:0;padding:env(safe-area-inset-top,0) env(safe-area-inset-right,0) env(safe-area-inset-bottom,0) env(safe-area-inset-left,0)}.right-panel-container.right-panel-closed{border-left:none!important;width:0!important;min-width:0!important;display:none!important}.directory-picker-action,.directory-picker-back,.directory-picker-entry{min-height:44px!important}.directory-picker-back{min-width:44px!important}.directory-picker-footer{flex-wrap:wrap;padding-bottom:max(10px,env(safe-area-inset-bottom))!important}}@media (max-width:420px){.composer-toolbar{grid-template-columns:var(--composer-attachment-w) minmax(0,1fr) minmax(0,var(--composer-thinking-max-w)) var(--composer-ring-size) var(--composer-send-size);gap:var(--space-1,2px)!important}}.sidebar-shell{word-break:keep-all;flex-direction:column;height:100%;display:flex;overflow:hidden}.sidebar-path-label{text-overflow:ellipsis;white-space:nowrap;text-align:left;direction:rtl;min-width:0;line-height:1.35;display:block;overflow:hidden}.sidebar-path-label-text{unicode-bidi:plaintext}.sidebar-icon-button{width:calc(var(--control-height-sm) - var(--space-1));height:calc(var(--control-height-sm) - var(--space-1));border-radius:var(--radius-control);color:var(--text-dim);cursor:pointer;transition:background var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm),border-color var(--dur-fast) var(--ease-out-warm);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;line-height:0;display:flex}.sidebar-icon-button:hover:not(:disabled),.sidebar-icon-button[aria-pressed=true]{background:var(--bg-hover);color:var(--accent)}.sidebar-icon-button:disabled{cursor:default;opacity:.5}.sidebar-portal-menu{z-index:var(--z-dialog-backdrop);padding:var(--space-2);border:1px solid var(--border);border-radius:var(--radius-control);background:var(--bg-panel);box-shadow:var(--shadow-pop);position:fixed}.sidebar-worktree-menu{overflow:hidden}.sidebar-brand{min-width:6ch;color:var(--text);cursor:pointer;font-family:var(--font-mono);font-size:var(--text-lg);letter-spacing:-.01em;background:0 0;border:none;padding:0;font-weight:700;line-height:1}.sidebar-brand-accent,.sidebar-brand-dynamic[data-version=true]{color:var(--accent)}.sidebar-brand-dynamic[data-version=false],.sidebar-brand-name{color:var(--text)}.sidebar-shell .sidebar-header{gap:var(--space-4);padding:calc(var(--space-5) - var(--space-1)) calc(var(--space-5) - var(--space-1)) var(--space-4);border-bottom:1px solid var(--border);flex-direction:column;flex-shrink:0;display:flex}.sidebar-header-actions,.sidebar-header-row{align-items:center;display:flex}.sidebar-header-row{justify-content:space-between}.sidebar-header-actions{gap:var(--space-1)}.sidebar-import-input{display:none}.sidebar-new-session{width:100%;height:calc(var(--control-height-lg) + var(--space-1));box-sizing:border-box;justify-content:center;align-items:center;gap:calc(var(--space-4) - var(--space-1) / 2);padding:0 var(--space-5);border:1px solid var(--border);border-radius:calc(var(--radius-control) + var(--space-1) / 2);background:var(--bg-hover);color:var(--text);cursor:pointer;font-size:calc(var(--text-base) - var(--space-1) / 4);letter-spacing:-.01em;opacity:1;transition:background var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm),border-color var(--dur-fast) var(--ease-out-warm);font-weight:600;display:flex}.sidebar-new-session:hover:not(:disabled){background:var(--bg-selected);border-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.sidebar-new-session:hover:not(:disabled){border-color:color-mix(in srgb,var(--accent) 30%,transparent)}}.sidebar-new-session:disabled{color:var(--text-dim);cursor:not-allowed;opacity:.65}.sidebar-new-session-icon{color:var(--accent);flex-shrink:0}.sidebar-workspaces-header{align-items:center;gap:var(--space-1);padding:var(--space-2) calc(var(--space-5) - var(--space-1)) var(--space-1);flex-shrink:0;display:flex}.sidebar-section-label{color:var(--text-muted);font-size:var(--text-sm);letter-spacing:.08em;text-transform:uppercase;flex:1;font-weight:600}.sidebar-search-wrap{padding:0 calc(var(--space-5) - var(--space-1)) var(--space-3);flex-shrink:0}.sidebar-search-input{width:100%;height:calc(var(--control-height-sm) - var(--space-1) / 2);box-sizing:border-box;padding:0 calc(var(--space-4) + var(--space-1) / 2);border:1px solid var(--border);border-radius:var(--radius-control);background:var(--bg);color:var(--text);font-size:var(--text-md);transition:border-color var(--dur-fast) var(--ease-out-warm),box-shadow var(--dur-fast) var(--ease-out-warm);outline:none;display:block}.sidebar-search-input:focus{border-color:var(--accent);box-shadow:var(--focus-ring)}.sidebar-workspaces-list{min-height:80px;padding:var(--space-1) calc(var(--space-5) - var(--space-1)) var(--space-4);transition:flex var(--dur-med) var(--ease-out-warm);overflow-y:auto}.sidebar-state-message{padding:var(--space-5) var(--space-2);font-size:var(--text-md);line-height:1.5}.sidebar-state-message-muted{color:var(--text-muted)}.sidebar-state-message-error{color:var(--accent)}.sidebar-state-message-dim{color:var(--text-dim);font-size:var(--text-sm)}.sidebar-state-message-empty{padding-block:var(--space-5)}.sidebar-state-message-no-matches{padding-block:calc(var(--space-5) + var(--space-1))}.sidebar-explorer{border-top:1px solid var(--border);min-height:0;transition:flex var(--dur-med) var(--ease-out-warm);flex-direction:column;flex-shrink:0;display:flex;overflow:hidden}.sidebar-explorer-actions,.sidebar-explorer-header{align-items:center;display:flex}.sidebar-explorer-header{flex-shrink:0}.sidebar-explorer-toggle{align-items:center;gap:var(--space-3);padding:var(--space-3) calc(var(--space-5) - var(--space-1));color:var(--text-muted);cursor:pointer;font-size:var(--text-sm);letter-spacing:.05em;text-align:left;text-transform:uppercase;background:0 0;border:none;flex:1;font-weight:600;display:flex}.sidebar-explorer-chevron{transition:transform var(--dur-med) var(--ease-out-warm);flex-shrink:0}.sidebar-explorer-chevron[data-open=true]{transform:rotate(90deg)}.sidebar-explorer-actions{opacity:1;pointer-events:auto;transition:opacity var(--dur-fast) var(--ease-out-warm)}.sidebar-explorer-actions[data-open=false]{opacity:0;pointer-events:none}.sidebar-explorer-icon-button{width:calc(var(--control-height-sm) - var(--space-1));height:calc(var(--control-height-sm) - var(--space-1));margin-right:var(--space-3);border-radius:var(--radius-control);color:var(--text-dim);cursor:pointer;transition:color var(--dur-fast) var(--ease-out-warm),background var(--dur-fast) var(--ease-out-warm);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;line-height:0;display:flex}.sidebar-explorer-upload{margin-right:0}.sidebar-explorer-icon-button:hover:not(:disabled){background:var(--bg-hover);color:var(--text-muted)}.sidebar-explorer-icon-button:disabled{cursor:default;opacity:.6}.sidebar-explorer-refresh[data-refreshing=true]{color:var(--accent)}.sidebar-explorer-flow{min-height:0}.sidebar-explorer-flow-inner{height:100%;overflow:hidden auto}.sidebar-footer{border-top:1px solid var(--border);flex-shrink:0;display:flex}.sidebar-settings-row{min-width:0;height:var(--control-height-lg);box-sizing:border-box;align-items:center;gap:var(--space-4);padding:0 calc(var(--space-5) - var(--space-1));color:var(--text-muted);cursor:pointer;text-align:left;transition:background var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm);background:0 0;border:none;flex:1;display:flex}.sidebar-settings-row:hover{background:var(--bg-hover);color:var(--text)}.sidebar-footer-icon{color:var(--accent);flex-shrink:0;display:inline-flex;position:relative}.sidebar-update-dot{border:1px solid var(--bg-panel);background:var(--accent);border-radius:50%;width:6px;height:6px;position:absolute;top:-3px;right:-4px}.sidebar-footer-label{min-width:0;color:inherit;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-md);flex:1;font-weight:500;overflow:hidden}.sidebar-footer-chevron{color:var(--text-dim);flex-shrink:0}.sidebar-footer-divider{background:var(--border);align-self:stretch;width:1px}.sidebar-project{margin-bottom:var(--space-5)}.sidebar-project-header{align-items:center;gap:var(--space-1);height:calc(var(--control-height) - var(--space-1));padding:0 var(--space-3) 0 0;border-radius:var(--radius-control);transition:background var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm),border-color var(--dur-fast) var(--ease-out-warm);background:0 0;margin:0;display:flex}.sidebar-project-header:hover{background:var(--bg-hover)}.sidebar-project-identity{align-self:stretch;align-items:center;gap:calc(var(--space-4) - var(--space-1) / 2);min-width:0;padding:0 var(--space-2) 0 calc(var(--space-5) - var(--space-1));color:var(--text-muted);cursor:pointer;text-align:left;background:0 0;border:none;flex:0 auto;display:flex}.sidebar-project-header:hover .sidebar-project-identity{color:var(--text)}.sidebar-project-folder-icon{color:var(--text-dim);transition:color var(--dur-fast) var(--ease-out-warm);flex-shrink:0}.sidebar-project-identity[data-active=true] .sidebar-project-folder-icon{color:var(--accent)}.sidebar-project-header:hover .sidebar-project-folder-icon{color:var(--text-muted)}.sidebar-project-header:hover .sidebar-project-identity[data-active=true] .sidebar-project-folder-icon,.sidebar-project-identity[data-active=true] .sidebar-project-folder-icon{color:var(--accent)}.sidebar-project-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-family:var(--font-mono);font-size:var(--text-md);letter-spacing:-.01em;font-weight:600;line-height:1.25;overflow:hidden}.sidebar-project-worktree-toggle{align-items:center;gap:calc(var(--space-4) - var(--space-3) / 2);min-width:0;max-width:104px;height:calc(var(--control-height-sm) - var(--space-2));padding:0 var(--space-3);border-radius:var(--radius-control);color:var(--text-dim);cursor:pointer;font-family:var(--font-mono);font-size:calc(var(--text-md) - var(--space-3) / 4);transition:color var(--dur-fast) var(--ease-out-warm),background var(--dur-fast) var(--ease-out-warm);background:0 0;border:none;flex-shrink:0;line-height:1;display:inline-flex}.sidebar-project-header:hover .sidebar-project-worktree-toggle{color:var(--text-muted)}.sidebar-project-worktree-toggle[data-open=true]{background:var(--bg-selected);color:var(--accent)}.sidebar-project-worktree-dot{opacity:.7;flex-shrink:0}.sidebar-project-worktree-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.sidebar-project-spacer{flex:1}.sidebar-project-activity{margin:0 var(--space-1) 0 0;flex-shrink:0;align-items:center;line-height:0;display:flex}.sidebar-project-activity-dot{background:var(--accent);border-radius:50%;width:7px;height:7px}.sidebar-project-activity[data-running=true] .sidebar-project-activity-dot{box-shadow:0 0 0 calc(var(--space-3) / 2) var(--accent)}@supports (color:color-mix(in lab,red,red)){.sidebar-project-activity[data-running=true] .sidebar-project-activity-dot{box-shadow:0 0 0 calc(var(--space-3) / 2) color-mix(in srgb,var(--accent) 13%,transparent)}}.sidebar-project-action-slot{flex-shrink:0}.sidebar-project-action{width:calc(var(--control-height-sm) - var(--space-2));height:calc(var(--control-height-sm) - var(--space-2));border-radius:var(--radius-control);color:var(--text-dim);cursor:pointer;transition:background var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm),border-color var(--dur-fast) var(--ease-out-warm);background:0 0;border:none;justify-content:center;align-items:center;padding:0;line-height:0;display:flex}.sidebar-project-action[data-open=true]{background:var(--bg-selected)}.sidebar-project-action:disabled{cursor:default;opacity:.5}.sidebar-menu-item{padding:var(--space-3) calc(var(--space-4) + var(--space-1) / 2);border-radius:calc(var(--radius-control) - var(--space-1));color:var(--text-muted);font-size:var(--text-sm)}.sidebar-menu-item-danger{color:var(--status-error)}.sidebar-menu-item:disabled{color:var(--text-dim);cursor:not-allowed;opacity:.55}.sidebar-project-remove-item:disabled{color:var(--status-error);cursor:default;opacity:1}.sidebar-project-toggle{width:calc(var(--control-height-sm) - var(--space-3));height:calc(var(--control-height-sm) - var(--space-1));border-radius:var(--radius-control);color:var(--text-dim);cursor:pointer;transition:color var(--dur-fast) var(--ease-out-warm),background var(--dur-fast) var(--ease-out-warm);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;line-height:0;display:flex}.sidebar-project-toggle-icon,.sidebar-show-more-icon{transition:transform var(--dur-fast) var(--ease-out-warm)}.sidebar-project-toggle[data-expanded=true] .sidebar-project-toggle-icon{transform:rotate(90deg)}.sidebar-project-sessions{margin:var(--space-1) 0 0;animation:sidebar-sessions-in var(--dur-med) var(--ease-out-warm) both;transform-origin:top}.sidebar-project-empty{padding:var(--space-3) var(--space-5) var(--space-4) calc(var(--space-8) + var(--space-5) - var(--space-1))}.sidebar-project-empty,.sidebar-show-more{color:var(--text-dim);font-size:var(--text-sm)}.sidebar-show-more{align-items:center;gap:calc(var(--space-4) - var(--space-3) / 2);width:100%;margin:var(--space-1) 0 0;padding:calc(var(--space-3) - var(--space-1) / 2) var(--space-4) calc(var(--space-3) - var(--space-1) / 2) calc(var(--space-8) + var(--space-5) - var(--space-1));border-radius:var(--radius-control);cursor:pointer;font-variant-numeric:tabular-nums;text-align:left;transition:background var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm);background:0 0;border:none;font-weight:600;display:flex}.sidebar-show-more:hover{background:var(--bg-hover);color:var(--accent)}.sidebar-show-more-icon[data-expanded=true]{transform:rotate(180deg)}.sidebar-worktree-list{max-height:min(40vh,300px);overflow-y:auto}.sidebar-worktree-confirm-row{align-items:center;gap:var(--space-3);padding:calc(var(--space-4) - var(--space-1) / 2) var(--space-5);border-bottom:1px solid var(--border);background:var(--accent);display:flex}@supports (color:color-mix(in lab,red,red)){.sidebar-worktree-confirm-row{background:color-mix(in srgb,var(--accent) 6%,transparent)}}.sidebar-worktree-confirm-text{min-width:0;color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm);flex:1;overflow:hidden}.sidebar-worktree-cancel-button,.sidebar-worktree-force-button{padding:calc(var(--space-1) + 1px) calc(var(--space-4) + var(--space-1) / 2);border-radius:var(--radius-control);cursor:pointer;font-size:var(--text-sm);flex-shrink:0}.sidebar-worktree-force-button{background:var(--accent-strong);color:var(--on-accent);border:none;font-weight:600}.sidebar-worktree-cancel-button{border:1px solid var(--border);background:var(--bg-hover);color:var(--text-muted)}.sidebar-worktree-row{border-bottom:1px solid var(--border);align-items:center;display:flex}.sidebar-worktree-select{align-items:center;gap:calc(var(--space-4) - var(--space-3) / 2);min-width:0;padding:var(--space-4) calc(var(--space-5) - var(--space-1));background:var(--bg);color:var(--text-muted);cursor:pointer;font-family:var(--font-mono);font-size:var(--text-sm);text-align:left;border:none;flex:1;display:flex}.sidebar-worktree-select[aria-pressed=true]{color:var(--text)}.sidebar-worktree-select .sidebar-path-label{flex:1}.sidebar-worktree-check,.sidebar-worktree-check-spacer{flex-shrink:0;width:10px}.sidebar-worktree-check{color:var(--accent)}.sidebar-worktree-main-badge{color:var(--text-dim);font-size:var(--text-xs);flex-shrink:0}.sidebar-worktree-remove{width:calc(var(--control-height-lg) - var(--space-1));height:var(--control-height);margin-right:var(--space-2);border-radius:var(--radius-control);color:var(--text-dim);cursor:pointer;transition:color var(--dur-fast) var(--ease-out-warm),background var(--dur-fast) var(--ease-out-warm);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:flex}.sidebar-worktree-remove:hover:not(:disabled){background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.sidebar-worktree-remove:hover:not(:disabled){background:color-mix(in srgb,var(--accent) 8%,transparent)}}.sidebar-worktree-remove:hover:not(:disabled){color:var(--accent)}.sidebar-worktree-new{align-items:center;gap:calc(var(--space-4) - var(--space-3) / 2);width:100%;padding:var(--space-4) calc(var(--space-5) - var(--space-1));color:var(--text-muted);cursor:pointer;font-size:var(--text-sm);text-align:left;background:0 0;border:none;display:flex}.sidebar-worktree-new-icon{flex-shrink:0}.sidebar-worktree-form{padding:var(--space-3) var(--space-4)}.sidebar-worktree-input{box-sizing:border-box;width:100%;padding:calc(var(--space-2) + 1px) var(--space-4);border:1px solid var(--accent);border-radius:var(--radius-control);background:var(--bg);color:var(--text);font-family:var(--font-mono);font-size:var(--text-sm);outline:none;display:block}.sidebar-worktree-form-actions{gap:calc(var(--space-4) - var(--space-3) / 2);margin-top:calc(var(--space-3) - var(--space-1) / 2);display:flex}.sidebar-worktree-create,.sidebar-worktree-form-cancel{padding:var(--space-2) 0;border-radius:var(--radius-control);cursor:pointer;font-size:var(--text-sm);flex:1}.sidebar-worktree-create{background:var(--accent-strong);color:var(--on-accent);border:none;font-weight:600}.sidebar-worktree-form-cancel{border:1px solid var(--border);background:var(--bg-hover);color:var(--text-muted)}.sidebar-worktree-create:disabled{cursor:not-allowed;opacity:.65}.sidebar-worktree-error{padding:var(--space-2) var(--space-5) var(--space-4);overflow-wrap:anywhere;color:var(--accent);font-size:var(--text-sm);line-height:1.35}.sidebar-session-tree-row{position:relative}.sidebar-session-indent-line{pointer-events:none;background:var(--border);width:1px;position:absolute;top:0;bottom:0}.sidebar-session-indicator{color:var(--accent);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.sidebar-session-indicator-svg{display:block}.sidebar-session-row{align-items:center;gap:var(--space-3);width:100%;min-height:calc(var(--control-height) - var(--space-1));margin:calc(var(--space-1) / 2) 0;padding:0 var(--space-4) 0 0;cursor:pointer;transition:background var(--dur-fast) var(--ease-out-warm),opacity var(--dur-fast) var(--ease-out-warm);background:0 0;display:flex;position:relative;overflow:hidden}.sidebar-session-row[data-interactive=true]:hover{background:var(--bg-hover)}.sidebar-session-row[data-interactive=false]{cursor:default}.sidebar-session-row[data-selected=true]{background:var(--bg-selected)}@supports (color:color-mix(in lab,red,red)){.sidebar-session-row[data-selected=true]{background:color-mix(in srgb,var(--bg-selected) 70%,transparent)}}.sidebar-session-row[data-confirming=true]{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.sidebar-session-row[data-confirming=true]{background:color-mix(in srgb,var(--accent) 6%,transparent)}}.sidebar-session-row[data-deleting=true]{opacity:.5}.sidebar-session-selection-indicator{width:var(--space-1);border-radius:calc(var(--space-1) / 2);pointer-events:none;background:var(--accent);position:absolute;top:0;bottom:0}.sidebar-session-confirm-text{min-width:0;color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-md);flex:1;overflow:hidden}.sidebar-session-cancel-button,.sidebar-session-confirm-button{height:var(--control-height);padding:0 var(--space-5);border-radius:var(--radius-control);cursor:pointer;font-size:var(--text-sm)}.sidebar-session-confirm-button{background:var(--accent-strong);color:var(--on-accent);border:none;font-weight:600}.sidebar-session-cancel-button{border:1px solid var(--border);background:var(--bg);color:var(--text-muted)}.sidebar-session-rename-input{height:calc(var(--control-height-sm) - var(--space-3) / 2);padding:calc(var(--space-2) - var(--space-1) / 2) calc(var(--space-3) + var(--space-1) / 2);border:1px solid var(--accent);border-radius:var(--radius-control);background:var(--bg);color:var(--text);font-size:var(--text-md);outline:none;flex:1}.sidebar-session-branch-icon{color:var(--text-dim);flex-shrink:0}.sidebar-session-content{flex:1;align-items:center;min-width:0;display:flex}.sidebar-session-title{min-width:0;color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-size:calc(var(--text-base) - var(--space-1) / 4);letter-spacing:-.005em;font-weight:500;line-height:1.35;overflow:hidden}.sidebar-session-row[data-selected=true] .sidebar-session-title{font-weight:600}.sidebar-session-worktree{align-items:center;gap:var(--space-1);min-width:0;max-width:56px;color:var(--text-dim);font-size:var(--text-xs);flex-shrink:1;display:flex;overflow:hidden}.sidebar-session-worktree-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.sidebar-session-time{min-width:30px;color:var(--text-dim);font-size:var(--text-xs);font-variant-numeric:tabular-nums;text-align:right;flex-shrink:0}.sidebar-session-time[data-selected=true]{color:var(--accent)}.sidebar-session-action,.sidebar-session-collapse{width:calc(var(--control-height-sm) - var(--space-2));height:calc(var(--control-height-sm) - var(--space-2));border-radius:var(--radius-control);color:var(--text-dim);cursor:pointer;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;line-height:0;display:flex}.sidebar-session-collapse[data-collapsed=true]{transform:rotate(-90deg)}.sidebar-session-collapse{transition:transform var(--dur-fast) var(--ease-out-warm),background var(--dur-fast) var(--ease-out-warm)}.sidebar-session-action-slot{flex-shrink:0;position:relative}.sidebar-session-action[data-open=true]{background:var(--bg-selected);color:var(--text)}@media (max-width:640px){.sidebar-brand,.sidebar-explorer-icon-button,.sidebar-explorer-toggle,.sidebar-icon-button,.sidebar-menu-item,.sidebar-new-session,.sidebar-project-action,.sidebar-project-identity,.sidebar-project-toggle,.sidebar-project-worktree-toggle,.sidebar-search-input,.sidebar-session-action,.sidebar-session-cancel-button,.sidebar-session-collapse,.sidebar-session-confirm-button,.sidebar-session-content,.sidebar-session-rename-input,.sidebar-session-row,.sidebar-settings-row,.sidebar-show-more,.sidebar-worktree-cancel-button,.sidebar-worktree-create,.sidebar-worktree-force-button,.sidebar-worktree-form-cancel,.sidebar-worktree-input,.sidebar-worktree-new,.sidebar-worktree-remove,.sidebar-worktree-select{min-height:var(--control-touch-anchor,var(--control-touch))}.sidebar-explorer-icon-button,.sidebar-icon-button,.sidebar-session-action,.sidebar-session-collapse{min-width:var(--control-touch-icon)}.sidebar-project-header{height:var(--control-touch)}.sidebar-project-worktree-toggle,.sidebar-session-cancel-button,.sidebar-session-confirm-button,.sidebar-worktree-cancel-button,.sidebar-worktree-create,.sidebar-worktree-force-button,.sidebar-worktree-form-cancel{min-height:var(--control-touch)}.subagent-hub-content{gap:var(--space-2)!important;padding:var(--space-3) var(--space-4) var(--space-4)!important}.subagent-hub-activity-line,.subagent-hub-activity-preview,.subagent-hub-detached,.subagent-hub-filters,.subagent-hub-freshness,.subagent-hub-group-label,.subagent-hub-observe-only,[data-subagent-activity-line],[data-subagent-activity-preview],[data-subagent-detached],[data-subagent-filter-row],[data-subagent-freshness],[data-subagent-group-label],[data-subagent-observe-only]{display:none!important}.subagent-hub-nested,[data-subagent-row-wrap][data-subagent-depth]:not([data-subagent-depth="0"]){border-left:none!important;margin-left:0!important;padding-left:0!important}.subagent-hub-row{padding:var(--space-2) var(--space-4)!important;gap:0!important}}.relay-pair-qr{color:#000!important;filter:none!important;opacity:1!important;background:#fff!important}.relay-pair-qr svg{color:#000;width:100%;height:100%;display:block}.relay-pair-qr svg path{fill:#000!important}.relay-pair-qr svg rect{fill:#fff!important}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}
|
package/README.ja.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
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.2 をダウンロード](https://github.com/dbc-hbin/ompgui/releases/download/v0.7.2/ompgui-remote-v0.7.2.apk) · [リリースノート](https://github.com/dbc-hbin/ompgui/releases/tag/v0.7.2)
|
|
6
|
+
|
|
7
|
+
> `android/` の実験的なネイティブ Compose クライアントは、認証済みの `/relay` WebSocket を使用し、セッション・履歴の操作、リンク付きメッセージ、オフラインの Mermaid 図とコードの構文強調、画像/PDF/音声/HTML/Markdown/DOCX のインラインプレビューを提供します。ファイルの自動更新は表示中のみ動作し、未保存の編集を保持します。許可された隠しファイルの閲覧とアーカイブ検索にも対応します。モデル・設定には公開 models.dev カタログ、高度な OMP 設定、構成とは別に表示されるセッションごとの実際の MCP 実行状態が含まれます。添付ファイルは端末上で巨大な単一 JSON にまとめず、ストリーミングでステージングします。画像は各 10 MiB で最大 10 件、テキスト添付は独立した枠で各 256 KiB、最大 10 件です。OMP 自体の画像正規化とプロバイダーごとの画像数制限は引き続き適用されます。
|
|
8
|
+
>
|
|
9
|
+
> このクライアントは公開済みの v0.7.2 APK を置き換えるものではなく、ホスト型/E2E リレーを追加するものでもありません。JDK 21 を使用し、リポジトリのルートで `npm install` を実行してから、`android/` で `./gradlew :app:assembleDebug` を実行します。オフラインアセットはインストール済みの npm 依存パッケージから生成されます。出力先は `android/app/build/outputs/apk/debug/app-debug.apk` です。サーバーで無効化されている更新、ログアウト、保存済み API キーの変更操作は引き続き利用できません。
|
|
10
|
+
|
|
5
11
|
[oh-my-pi (omp) コーディングエージェント](https://github.com/can1357/oh-my-pi)のローカル Web UI です。ompgui はローカルの omp セッションファイルを読み込み、セッションの閲覧、リアルタイムチャット、モデル設定、スキル管理、プロジェクトファイルのプレビューを行えるブラウザワークスペースを提供します。
|
|
6
12
|
|
|
7
13
|

|
|
@@ -33,7 +39,7 @@ npm install -g ompgui
|
|
|
33
39
|
ompgui
|
|
34
40
|
```
|
|
35
41
|
|
|
36
|
-
グローバルインストールは `ompgui update` で更新できます。
|
|
42
|
+
グローバルインストールは `ompgui update` で更新できます。macOS では、このインストールに紐づく管理対象のバックグラウンドサービスが稼働中の場合、完全に停止してから更新し、再起動します。その間、ブラウザとモバイルクライアントの接続が一時的に切れます。停止中のサービスは停止したまま、未インストールのサービスは追加しません。認証、リレー、ログイン時の自動起動を含むサービス設定は保持されます。サービス停止後にインストールやバージョン検証が失敗した場合、残っているインストールを使ってサービスの再起動を試みます。これは復旧の試みであり、パッケージのロールバックではなく、復旧も失敗する可能性があります。
|
|
37
43
|
|
|
38
44
|
続いて [http://127.0.0.1:30177](http://127.0.0.1:30177) を開きます。サーバーの準備が整うと、CLI はブラウザを自動的に開こうとします。ompgui はデフォルトで `127.0.0.1` で待ち受けます。
|
|
39
45
|
|
|
@@ -56,6 +62,31 @@ OMP_WEB_NO_OPEN=1 ompgui # バックグラウンドサービスとして
|
|
|
56
62
|
|
|
57
63
|
`OMP_WEB_PASSWORD` を設定すると、テーマに統合されたパスワードのみのサインイン画面で UI とすべての API エンドポイントを保護できます。サインイン後は HTTP-only の署名付きセッションクッキーが 30 日間有効です。未設定なら認証は無効です。リモート利用では、パスワードとセッションクッキーを守るため、信頼できるリバースプロキシまたは VPN 経由の HTTPS が必要です。ompgui をインターネットへ直接公開しないでください。
|
|
58
64
|
|
|
65
|
+
### macOS のバックグラウンドサービス
|
|
66
|
+
|
|
67
|
+
引数なしの `ompgui` はフォアグラウンドで動作します。macOS のユーザー別 LaunchAgent として動かすには、Mac のターミナルで公開済み npm パッケージをインストールします。開発用チェックアウトのサービス化はサポートしません。
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
npm install -g ompgui@latest
|
|
71
|
+
ompgui service install # インストール、ログイン時の自動起動を有効化、即時起動
|
|
72
|
+
ompgui status # 状態確認
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
新規インストールでは上記の `--port`、`--hostname`、`--password` を指定できます。既存の `com.hanbinnoh.ompgui` 定義は検証して再利用し、パス・環境変数・秘密情報を保持します。再設定時の新しいオプションで既存設定を上書きしません。
|
|
76
|
+
|
|
77
|
+
以下は必要に応じて個別に使うコマンドです。
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
ompgui service enable # ログイン時の自動起動を有効化
|
|
81
|
+
ompgui service disable # 自動起動のみ無効化。稼働中のサーバーと設定は保持
|
|
82
|
+
ompgui start # インストール済みサービスを今すぐ起動
|
|
83
|
+
ompgui stop # 今すぐ停止。自動起動設定は変更しない
|
|
84
|
+
ompgui restart # 今すぐ再起動
|
|
85
|
+
ompgui service uninstall # 停止し、保存された秘密情報を含むサービス定義を削除
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
macOS のブラウザ GUI では **Settings → System & Updates → Background service**(設定 → システムと更新 → バックグラウンドサービス)から操作できます。Android APK にデーモン操作はありません。停止・削除するとブラウザとモバイルの接続が切れ、このページからは起動できません。Mac のターミナルで停止後は `ompgui start`、削除後は `ompgui service install` を実行して再接続してください。フォアグラウンドの `ompgui` が設定ポートを使用中なら、先に**そのターミナルで Ctrl+C** を押して終了してください。サービスコマンドはポートを占有する任意のプロセスを強制終了しません。
|
|
89
|
+
|
|
59
90
|
## リモート・モバイルアクセス(Tailscale 推奨)
|
|
60
91
|
|
|
61
92
|
モバイル端末(iPhone、iPad、Android)や外部のノートPCから `ompgui` にアクセスする場合は、**[Tailscale](https://tailscale.com/) の利用を強く推奨します**。ポート開放やグローバルIPの公開なしに、端末間の暗号化メッシュVPNを通じて最も安全にリモートアクセスできます。
|
package/README.ko.md
CHANGED
|
@@ -2,6 +2,14 @@
|
|
|
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.2 다운로드](https://github.com/dbc-hbin/ompgui/releases/download/v0.7.2/ompgui-remote-v0.7.2.apk) · [릴리스 노트](https://github.com/dbc-hbin/ompgui/releases/tag/v0.7.2)
|
|
6
|
+
|
|
7
|
+
> `android/`의 실험용 네이티브 Compose 클라이언트는 인증된 `/relay` WebSocket을 사용하며, 세션/기록 제어와 링크가 포함된 메시지, 오프라인 Mermaid 다이어그램 및 코드 구문 강조, 이미지/PDF/오디오/HTML/Markdown/DOCX 인라인 미리보기를 제공합니다. 파일 자동 새로고침은 화면에 보일 때만 동작하며 저장하지 않은 편집 내용을 보존합니다. 허용된 숨김 파일 탐색과 아카이브 검색도 지원합니다. 모델/설정에서는 공개 models.dev 카탈로그, 고급 OMP 설정, 구성 상태와 구분되는 세션별 실제 MCP 실행 상태를 확인할 수 있습니다. 첨부 파일은 휴대폰에서 하나의 거대한 JSON으로 묶지 않고 스트리밍으로 스테이징하며, 이미지는 개당 10 MiB로 최대 10개, 텍스트 첨부는 별도로 개당 256 KiB로 최대 10개까지 지원합니다. OMP 자체의 이미지 정규화와 제공자별 이미지 개수 제한은 계속 적용됩니다.
|
|
8
|
+
>
|
|
9
|
+
> 네이티브 인터페이스는 웹 앱의 Warm 및 OMP 색상 팔레트를 따르며, 간결한 프로젝트/세션 트리와 설정/사용량 하단 메뉴, 도구 모음을 한 줄로 정리한 메시지 입력창을 제공합니다. 기록, 세션 정보, 명령 및 런타임 제어는 세션 메뉴에 모았고, 보조 워크스페이스 작업은 더보기 메뉴에 유지했습니다. 런타임 제어는 펼칠 수 있는 트리 카테고리로 구성하고 현재 값을 일정한 열에 맞춰 표시합니다. 설정은 간결한 행 단위 선택 컨트롤을 사용하며, 드롭다운 메뉴는 해당 컨트롤에 붙어 열립니다. Android 네이티브 컨트롤, 파일 선택기, 시트 탐색 방식과 서로 겹치지 않는 최소 48dp 터치 영역을 유지합니다.
|
|
10
|
+
>
|
|
11
|
+
> 이 클라이언트는 배포된 v0.7.2 APK를 대체하거나 호스팅형/E2E 릴레이를 추가하지 않습니다. JDK 21을 사용하여 저장소 루트에서 `npm install`을 실행한 뒤, `android/`에서 `./gradlew :app:assembleDebug`로 빌드합니다. 오프라인 에셋은 설치된 npm 의존성에서 생성되며, 출력 경로는 `android/app/build/outputs/apk/debug/app-debug.apk`입니다. 서버에서 비활성화된 업데이트, 로그아웃, 저장된 API 키 변경 작업은 여전히 사용할 수 없습니다.
|
|
12
|
+
|
|
5
13
|
[oh-my-pi (omp) 코딩 에이전트](https://github.com/can1357/oh-my-pi)를 위한 로컬 웹 UI입니다. ompgui은 로컬 omp 세션 파일을 읽어 브라우저에서 세션 탐색, 실시간 채팅, 모델 설정, 스킬 관리, 프로젝트 파일 미리보기를 제공하는 워크스페이스를 엽니다.
|
|
6
14
|
|
|
7
15
|

|
|
@@ -33,7 +41,7 @@ npm install -g ompgui
|
|
|
33
41
|
ompgui
|
|
34
42
|
```
|
|
35
43
|
|
|
36
|
-
전역 설치본은 `ompgui update`로 업데이트할 수 있습니다.
|
|
44
|
+
전역 설치본은 `ompgui update`로 업데이트할 수 있습니다. macOS에서는 이 설치본에 연결된 관리형 백그라운드 서비스가 실행 중이면 완전히 중지한 뒤 업데이트하고 다시 시작하므로 브라우저와 모바일 클라이언트 연결이 잠시 끊깁니다. 중지된 서비스는 그대로 중지 상태를 유지하며, 미설치 서비스는 설치하지 않습니다. 인증, 릴레이, 로그인 시 자동 시작을 포함한 서비스 설정은 유지됩니다. 서비스를 중지한 뒤 설치나 버전 검증에 실패하면 남아 있는 설치본으로 서비스 재시작을 시도합니다. 이는 패키지 롤백이 아닌 복구 시도이며, 복구도 실패할 수 있습니다.
|
|
37
45
|
|
|
38
46
|
그다음 [http://127.0.0.1:30177](http://127.0.0.1:30177)을 여세요. 서버가 준비되면 CLI가 브라우저를 자동으로 열려고 시도합니다. ompgui은 기본적으로 `127.0.0.1`에서 수신합니다.
|
|
39
47
|
|
|
@@ -59,6 +67,31 @@ OMP_WEB_NO_OPEN=1 ompgui # 백그라운드 서비스로 실행할 때 유
|
|
|
59
67
|
|
|
60
68
|
`OMP_WEB_PASSWORD`를 설정하거나 `--password`를 전달하면 테마가 적용된 비밀번호 전용 로그인 화면으로 인터페이스와 모든 API 엔드포인트를 보호합니다. 로그인에 성공하면 30일 동안 유효한 HTTP 전용 서명 세션 쿠키가 생성됩니다. 설정된 비밀번호를 변경하면 기존 세션이 무효화됩니다. 변수를 설정하지 않으면 인증이 비활성화됩니다. 원격 사용 시 비밀번호와 세션 쿠키가 가로채이지 않도록 신뢰할 수 있는 리버스 프록시나 VPN을 통해 HTTPS를 사용해야 합니다. Windows 환경 변수 문법은 `$env:OMP_WEB_PASSWORD="..."`이며, `ompgui --password "..."`는 별도 문법 없이 모든 셸에서 작동합니다.
|
|
61
69
|
|
|
70
|
+
### macOS 백그라운드 서비스
|
|
71
|
+
|
|
72
|
+
인수 없이 `ompgui`를 실행하면 포그라운드에서 동작합니다. macOS 사용자별 LaunchAgent로 실행하려면 Mac 터미널에서 배포된 npm 패키지를 설치하고 서비스를 설정하세요. 개발 체크아웃을 서비스로 설치하는 방식은 지원하지 않습니다.
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
npm install -g ompgui@latest
|
|
76
|
+
ompgui service install # 설치, 로그인 시 자동 시작 활성화, 즉시 시작
|
|
77
|
+
ompgui status # 서비스 상태 확인
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
새 서비스 설치 시 위의 `--port`, `--hostname`, `--password` 옵션을 사용할 수 있습니다. 기존 `com.hanbinnoh.ompgui` 서비스 정의는 검증 후 재사용하며 경로, 환경 변수, 비밀 값을 보존합니다. 설정을 다시 실행해도 새로 전달한 옵션으로 기존 설정을 덮어쓰지 않습니다.
|
|
81
|
+
|
|
82
|
+
아래 명령은 순서대로 실행하는 절차가 아니라 필요에 따라 선택하는 제어 명령입니다.
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
ompgui service enable # 로그인 시 자동 시작 활성화
|
|
86
|
+
ompgui service disable # 자동 시작만 비활성화; 실행 중인 서버와 설정 유지
|
|
87
|
+
ompgui start # 설치된 서비스 즉시 시작
|
|
88
|
+
ompgui stop # 지금 중지; 로그인 자동 시작 설정은 유지
|
|
89
|
+
ompgui restart # 지금 재시작
|
|
90
|
+
ompgui service uninstall # 중지 후 서비스 정의와 저장된 서비스 비밀 값 제거
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
macOS 브라우저 GUI의 **Settings → System & Updates → Background service**(설정 → 시스템 및 업데이트 → 백그라운드 서비스)에서도 제어할 수 있습니다. Android APK에는 데몬 제어가 없습니다. 서버를 중지하거나 제거하면 브라우저와 모바일 클라이언트 연결이 끊기므로 이 페이지에서 다시 시작할 수 없습니다. 중지 후에는 Mac 터미널에서 `ompgui start`를, 제거 후에는 `ompgui service install`을 실행하고 다시 접속하세요. 포그라운드 `ompgui`가 설정된 포트를 사용 중이면 **해당 터미널에서 Ctrl+C**로 중지한 뒤 서비스를 설치하거나 시작하세요. 서비스 명령은 포트를 점유한 임의의 프로세스를 강제로 종료하지 않습니다.
|
|
94
|
+
|
|
62
95
|
## 원격 및 모바일 접속 (Tailscale 권장)
|
|
63
96
|
|
|
64
97
|
외부나 모바일 기기(iPhone, iPad, Android)에서 로컬 PC의 `ompgui`에 접속할 때는 **[Tailscale](https://tailscale.com/) 가상 사설망(VPN)을 사용하는 것을 강력히 권장**합니다. 포트 포워딩이나 공인 IP 노출 없이 종단간 암호화(P2P)를 통해 가장 안전하게 원격 접속할 수 있습니다.
|
package/README.md
CHANGED
|
@@ -2,7 +2,15 @@
|
|
|
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.
|
|
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.2](https://github.com/dbc-hbin/ompgui/releases/download/v0.7.2/ompgui-remote-v0.7.2.apk) · [Release notes](https://github.com/dbc-hbin/ompgui/releases/tag/v0.7.2)
|
|
6
|
+
|
|
7
|
+
> The Kotlin companion app in `android/` uses authenticated `/relay` WebSockets for session/history controls and linked messages, offline Mermaid diagrams and code highlighting, and inline image/PDF/audio/HTML/Markdown/DOCX previews. 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
|
+
>
|
|
9
|
+
> New in v0.7.0: Settings redesigned with tabbed categories and always-visible search (web-like parity), all Strings migrated to string resources (English/Korean/Japanese/Chinese complete), Usage sheet redesigned with capacity chips and color-coded progress bars, tighter session/message spacing, and no regressions.
|
|
10
|
+
>
|
|
11
|
+
> Its native interface follows the web app’s Warm and OMP palettes, with a compact project/session tree, a Settings/Usage footer, and a compact composer with a single-row toolbar. History, session information, commands, and runtime controls live in the session menu; secondary workspace actions remain in overflow menus. Runtime controls use expandable tree categories with aligned current values. Settings use compact row selectors, and dropdown menus are anchored to their triggers. Native Android controls, file pickers, sheet navigation, and distinct touch regions of at least 48 dp are retained.
|
|
12
|
+
>
|
|
13
|
+
> This companion client does not replace the published v0.7.2 APK or add a hosted/E2E relay. To build, use JDK 21, run `npm install` at the repository root, then run `./gradlew :app:assembleDebug` from `android/`; offline assets are generated from the installed npm dependencies. Output: `android/app/build/outputs/apk/debug/app-debug.apk`. Server-disabled update, logout, and stored API-key mutations remain unavailable.
|
|
6
14
|
|
|
7
15
|
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.
|
|
8
16
|
|
|
@@ -35,7 +43,7 @@ npm install -g ompgui
|
|
|
35
43
|
ompgui
|
|
36
44
|
```
|
|
37
45
|
|
|
38
|
-
Update a global installation with `ompgui update`.
|
|
46
|
+
Update a global installation with `ompgui update`. On macOS, a running managed background service belonging to this installation is fully stopped before updating, then restarted; browser and mobile clients briefly disconnect. A stopped service stays stopped, and an uninstalled service is not installed. Service settings, including authentication, relay, and login auto-start, are retained. If installation or version verification fails after stopping the service, the updater attempts to start it again using the installation still available; this is recovery, not a package rollback, and recovery can fail.
|
|
39
47
|
|
|
40
48
|
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.
|
|
41
49
|
|
|
@@ -61,6 +69,31 @@ OMP_WEB_NO_OPEN=1 ompgui # useful when running as a background service
|
|
|
61
69
|
|
|
62
70
|
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.
|
|
63
71
|
|
|
72
|
+
### macOS background service
|
|
73
|
+
|
|
74
|
+
Bare `ompgui` runs in the foreground. For a persistent per-user macOS LaunchAgent, install the published npm package and set up the service from a terminal on the Mac. Installing a development checkout as the service is not supported.
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
npm install -g ompgui@latest
|
|
78
|
+
ompgui service install # install, enable login auto-start, and start now
|
|
79
|
+
ompgui status # inspect service state
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
For a new service, `service install` accepts `--port`, `--hostname`, and `--password` as above. An existing `com.hanbinnoh.ompgui` service definition is validated and reused, preserving its paths, environment, and secrets; rerunning setup does not replace its settings with newly supplied flags.
|
|
83
|
+
|
|
84
|
+
Use these commands as needed (not as a sequence):
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
ompgui service enable # enable login auto-start
|
|
88
|
+
ompgui service disable # disable login auto-start; keep running and retain configuration
|
|
89
|
+
ompgui start # start the installed service now
|
|
90
|
+
ompgui stop # stop now; leave login auto-start unchanged
|
|
91
|
+
ompgui restart # restart now
|
|
92
|
+
ompgui service uninstall # stop and remove the service definition, including saved service secrets
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
The browser GUI exposes these controls under **Settings → System & Updates → Background service** on macOS; the Android APK has no daemon controls. Stopping or uninstalling the server disconnects browser and mobile clients, so this page cannot start it again. After stopping, run `ompgui start` in the Mac's terminal to reconnect; after uninstalling, run `ompgui service install` again. If a foreground `ompgui` occupies the configured port, stop it with **Ctrl+C in its terminal** before installing or starting the service. The service commands do not kill an arbitrary process occupying the port.
|
|
96
|
+
|
|
64
97
|
## Remote & Mobile Access (Tailscale Recommended)
|
|
65
98
|
|
|
66
99
|
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.
|
package/README.zh-CN.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
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.2](https://github.com/dbc-hbin/ompgui/releases/download/v0.7.2/ompgui-remote-v0.7.2.apk) · [发行说明](https://github.com/dbc-hbin/ompgui/releases/tag/v0.7.2)
|
|
6
|
+
|
|
7
|
+
> `android/` 中的实验性原生 Compose 客户端使用经过身份验证的 `/relay` WebSocket,提供会话/历史记录控制、带链接的消息、离线 Mermaid 图表与代码语法高亮,以及图片/PDF/音频/HTML/Markdown/DOCX 内联预览。文件仅在界面可见时自动刷新,并保留未保存的编辑;支持浏览允许访问的隐藏文件和搜索归档。模型与设置包括公开的 models.dev 目录、高级 OMP 设置,以及与配置状态分开显示的各会话实际 MCP 运行状态。附件通过流式传输暂存,而不是在手机端打包成一个巨大的 JSON:图片最多 10 个,每个 10 MiB;文本附件独立计数,最多 10 个,每个 256 KiB。OMP 自身的图像规范化处理和各提供商的图片数量限制仍然适用。
|
|
8
|
+
>
|
|
9
|
+
> 此客户端不会替代已发布的 v0.7.2 APK,也不会添加托管式/E2E 中继。构建时使用 JDK 21,先在仓库根目录运行 `npm install`,再在 `android/` 中运行 `./gradlew :app:assembleDebug`;离线资源从已安装的 npm 依赖生成。输出文件为 `android/app/build/outputs/apk/debug/app-debug.apk`。服务器禁用的更新、退出登录以及已存储 API 密钥的修改操作仍不可用。
|
|
10
|
+
|
|
5
11
|
[oh-my-pi (omp) 编程智能体](https://github.com/can1357/oh-my-pi)的本地 Web UI。ompgui 读取本机的 omp 会话文件,在浏览器中提供一个工作区,支持会话浏览、实时对话、模型配置、技能管理和项目文件预览。
|
|
6
12
|
|
|
7
13
|

|
|
@@ -33,7 +39,7 @@ npm install -g ompgui
|
|
|
33
39
|
ompgui
|
|
34
40
|
```
|
|
35
41
|
|
|
36
|
-
可使用 `ompgui update`
|
|
42
|
+
可使用 `ompgui update` 更新全局安装。在 macOS 上,如果属于当前安装的托管后台服务正在运行,更新程序会先等待其完全停止,再更新并重新启动;浏览器和移动客户端会短暂断开连接。已停止的服务保持停止,未安装的服务不会被安装。认证、中继及登录时自动启动等服务设置均会保留。如果停止服务后安装或版本验证失败,更新程序会尝试使用仍可用的安装重新启动服务;这只是恢复尝试,并非软件包回滚,恢复也可能失败。
|
|
37
43
|
|
|
38
44
|
然后打开 [http://127.0.0.1:30177](http://127.0.0.1:30177)。服务器就绪后,CLI 会尝试自动打开浏览器。ompgui 默认监听 `127.0.0.1`。
|
|
39
45
|
|
|
@@ -56,6 +62,31 @@ OMP_WEB_NO_OPEN=1 ompgui # 作为后台服务运行时很有用
|
|
|
56
62
|
|
|
57
63
|
设置 `OMP_WEB_PASSWORD` 可通过与主题集成的仅密码登录页面保护界面和所有 API 端点。登录成功后,会创建有效期为 30 天的 HTTP-only 签名会话 Cookie;留空则关闭认证。远程访问仍需通过受信任反向代理或 VPN 提供 HTTPS,以保护密码和会话 Cookie。默认仅监听 `127.0.0.1`;不要将 ompgui 直接暴露到互联网。
|
|
58
64
|
|
|
65
|
+
### macOS 后台服务
|
|
66
|
+
|
|
67
|
+
不带参数运行 `ompgui` 仍在前台启动。要使用 macOS 用户级 LaunchAgent,请在 Mac 终端中安装已发布的 npm 包。不支持将开发检出目录安装为服务。
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
npm install -g ompgui@latest
|
|
71
|
+
ompgui service install # 安装、启用登录时自动启动,并立即启动
|
|
72
|
+
ompgui status # 查看服务状态
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
新安装可使用上述 `--port`、`--hostname` 和 `--password` 选项。已有的 `com.hanbinnoh.ompgui` 服务定义经过验证后会复用,保留路径、环境变量和机密值;再次安装不会用新传入的选项覆盖已有配置。
|
|
76
|
+
|
|
77
|
+
以下命令按需单独使用,并非依次执行的步骤:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
ompgui service enable # 启用登录时自动启动
|
|
81
|
+
ompgui service disable # 仅禁用自动启动,保留运行中的服务器及配置
|
|
82
|
+
ompgui start # 立即启动已安装的服务
|
|
83
|
+
ompgui stop # 立即停止,不改变自动启动设置
|
|
84
|
+
ompgui restart # 立即重启
|
|
85
|
+
ompgui service uninstall # 停止并删除服务定义,包括保存的服务机密值
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
macOS 浏览器 GUI 的 **Settings → System & Updates → Background service**(设置 → 系统与更新 → 后台服务)也可控制服务。Android APK 不提供守护进程控制。停止或卸载服务器会断开浏览器和移动客户端连接,无法从此页面重新启动。停止后请在 Mac 终端运行 `ompgui start`;卸载后请运行 `ompgui service install`,然后重新连接。如果前台 `ompgui` 占用了配置的端口,请先在**其终端中按 Ctrl+C** 停止,再安装或启动服务。服务命令不会强制终止任意占用端口的进程。
|
|
89
|
+
|
|
59
90
|
## 远程与移动端访问(推荐使用 Tailscale)
|
|
60
91
|
|
|
61
92
|
从移动设备(iPhone、iPad、Android)或外部笔记本访问 `ompgui` 时,**强烈推荐使用 [Tailscale](https://tailscale.com/) 虚拟专用网(VPN)**。它通过端到端加密的点对点 Mesh 网络连接设备,无需端口转发或暴露公网 IP。
|
package/bin/ompgui-options.js
CHANGED
|
@@ -6,21 +6,36 @@ function isEnabled(value) { return typeof value === "string" && TRUE_VALUES.has(
|
|
|
6
6
|
function printHelp() {
|
|
7
7
|
console.log(`Usage: ompgui [options]
|
|
8
8
|
ompgui update
|
|
9
|
+
ompgui pair [--url wss://host/relay]
|
|
10
|
+
ompgui devices
|
|
11
|
+
ompgui devices revoke <id>
|
|
9
12
|
|
|
10
13
|
Options:
|
|
11
14
|
-p, --port <port> Server port (default 30177, env OMPGUI_PORT)
|
|
12
15
|
-H, --hostname <host> Bind hostname (default 127.0.0.1, env OMPGUI_HOSTNAME)
|
|
13
16
|
--password <pass> Password for the web sign-in screen (env OMPGUI_PASSWORD)
|
|
17
|
+
--url <wss> Relay WebSocket URL for pairing (env OMPGUI_RELAY_URL)
|
|
14
18
|
--no-open Do not open the browser automatically
|
|
15
19
|
-h, --help Show this help
|
|
16
20
|
--version Show version
|
|
17
21
|
|
|
18
22
|
Commands:
|
|
19
|
-
|
|
23
|
+
service [action] Install if absent; repair/restart if already installed
|
|
24
|
+
Actions: install, repair, start, stop, restart, status,
|
|
25
|
+
enable, disable, uninstall (alias: remove)
|
|
26
|
+
start | stop | restart Control the installed service now (not login startup)
|
|
27
|
+
status Show service state and log path (--json for JSON)
|
|
28
|
+
service enable | disable Toggle login auto-start without stopping or removing config
|
|
29
|
+
service uninstall Stop service and remove its configuration
|
|
30
|
+
update Update ompgui to the latest version
|
|
31
|
+
pair Create a one-time phone pairing link
|
|
32
|
+
devices List or revoke paired phone devices`);
|
|
20
33
|
}
|
|
21
34
|
function parseLaunchOptions(args = process.argv.slice(2), env = process.env) {
|
|
22
|
-
const { values: cliArgs, positionals } = parseArgs({ args, options: { port:{type:"string",short:"p"}, hostname:{type:"string",short:"H"}, password:{type:"string"}, help:{type:"boolean",short:"h"}, version:{type:"boolean"}, "no-open":{type:"boolean"} }, strict:false, allowPositionals:true });
|
|
23
|
-
const result = { command: positionals[0], extraPositionals: positionals.slice(1), port: cliArgs.port ?? env.OMPGUI_PORT ?? env.PORT ?? env.OMP_WEB_PORT ?? "30177", hostname: cliArgs.hostname ?? env.OMPGUI_HOSTNAME ?? env.OMP_WEB_HOSTNAME ?? "127.0.0.1", password: cliArgs.password ?? env.OMPGUI_PASSWORD ?? env.OMP_WEB_PASSWORD, openBrowser: !cliArgs["no-open"] && !isEnabled(env.OMPGUI_NO_OPEN) && !isEnabled(env.OMP_WEB_NO_OPEN) };
|
|
35
|
+
const { values: cliArgs, positionals } = parseArgs({ args, options: { port:{type:"string",short:"p"}, hostname:{type:"string",short:"H"}, password:{type:"string"}, help:{type:"boolean",short:"h"}, version:{type:"boolean"}, "no-open":{type:"boolean"}, url:{type:"string"}, json:{type:"boolean"}, defer:{type:"boolean"} }, strict:false, allowPositionals:true });
|
|
36
|
+
const result = { json: Boolean(cliArgs.json), defer: Boolean(cliArgs.defer), command: positionals[0], extraPositionals: positionals.slice(1), port: cliArgs.port ?? env.OMPGUI_PORT ?? env.PORT ?? env.OMP_WEB_PORT ?? "30177", hostname: cliArgs.hostname ?? env.OMPGUI_HOSTNAME ?? env.OMP_WEB_HOSTNAME ?? "127.0.0.1", password: cliArgs.password ?? env.OMPGUI_PASSWORD ?? env.OMP_WEB_PASSWORD, relayUrl: cliArgs.url ?? env.OMPGUI_RELAY_URL ?? env.OMP_WEB_RELAY_URL, openBrowser: !cliArgs["no-open"] && !isEnabled(env.OMPGUI_NO_OPEN) && !isEnabled(env.OMP_WEB_NO_OPEN) };
|
|
37
|
+
if (result.hostname.startsWith("[") && result.hostname.endsWith("]")) result.hostname = result.hostname.slice(1, -1);
|
|
38
|
+
result.baseUrl = `http://${result.hostname.includes(":") ? `[${result.hostname}]` : result.hostname}:${result.port}`;
|
|
24
39
|
if (cliArgs.help) { printHelp(); result.help = true; }
|
|
25
40
|
if (cliArgs.version) { try { result.version = true; console.log(require("../package.json").version ?? "0.0.0"); } catch { result.version = true; } }
|
|
26
41
|
return result;
|