@henlii/pidance 0.2.6 → 0.2.8
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 +12 -8
- package/.next/build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.json +4 -2
- package/.next/routes-manifest.json +26 -0
- package/.next/server/app/_global-error/page.js +3 -3
- 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 +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js +2 -2
- 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/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/about/route.js +1 -1
- 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]/route.js +1 -1
- package/.next/server/app/api/agent/new/route.js +1 -1
- package/.next/server/app/api/agent/running/events/route.js +2 -2
- package/.next/server/app/api/agent/running/route.js +1 -1
- package/.next/server/app/api/agent-settings/route.js +2 -2
- package/.next/server/app/api/attachments/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 +2 -2
- 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/auth/ui-session/route.js +1 -1
- package/.next/server/app/api/auth/ui-sessions/[id]/route.js +1 -0
- package/.next/server/app/api/auth/ui-sessions/[id]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/auth/ui-sessions/route.js +1 -0
- package/.next/server/app/api/auth/ui-sessions/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/cwd/browse/route.js +1 -1
- package/.next/server/app/api/cwd/validate/route.js +1 -1
- 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 +2 -2
- package/.next/server/app/api/git/diff/route.js +1 -1
- package/.next/server/app/api/git/status/route.js +1 -1
- package/.next/server/app/api/home/route.js +1 -1
- package/.next/server/app/api/models/route.js +1 -1
- package/.next/server/app/api/models-config/raw/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/plugins/route.js +1 -1
- package/.next/server/app/api/plugins/search/route.js +1 -1
- package/.next/server/app/api/plugins/updates/route.js +1 -1
- package/.next/server/app/api/preferences/route.js +1 -1
- package/.next/server/app/api/project-assets/route.js +2 -2
- package/.next/server/app/api/prompts/route.js +1 -1
- package/.next/server/app/api/pty/route.js +3 -0
- package/.next/server/app/api/pty/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]/auto-name/route.js +2 -2
- package/.next/server/app/api/sessions/[id]/command-entry/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/context/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 +3 -3
- package/.next/server/app/api/sessions/[id]/info/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/tool-results/[toolCallId]/route.js +1 -1
- package/.next/server/app/api/sessions/route.js +1 -1
- package/.next/server/app/api/sessions/search/route.js +1 -1
- package/.next/server/app/api/settings/raw/route.js +2 -2
- package/.next/server/app/api/settings/remote/route.js +1 -0
- package/.next/server/app/api/settings/remote/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/skills/check/route.js +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/subagent-runs/route.js +1 -1
- package/.next/server/app/api/update/apply/route.js +3 -3
- package/.next/server/app/api/update/check/route.js +2 -2
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/icon.png/route.js +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +6 -5
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -3
- package/.next/server/app/index.segments/_full.segment.rsc +6 -5
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +3 -3
- package/.next/server/app/index.segments/_tree.segment.rsc +3 -2
- package/.next/server/app/page.js +22 -6
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +12 -8
- package/.next/server/chunks/188.js +1 -1
- package/.next/server/chunks/329.js +1 -0
- package/.next/server/chunks/5582.js +1 -1
- package/.next/server/chunks/7594.js +1 -1
- package/.next/server/functions-config-manifest.json +3 -0
- package/.next/server/instrumentation.js +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware.js +3 -3
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/Sc36XikGMPPmKsuJFVoCS/_buildManifest.js +1 -0
- package/.next/static/chunks/7874-4f48b670898adf75.js +1 -0
- package/.next/static/chunks/9780-e3ccfd6965a6273f.js +1 -0
- package/.next/static/chunks/app/_global-error/page-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/about/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/agent/[id]/bash-output/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/agent/[id]/events/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/agent/[id]/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/agent/new/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/agent/running/events/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/agent/running/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/agent-settings/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/attachments/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/auth/all-providers/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/auth/api-key/[provider]/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/auth/login/[provider]/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/[provider]/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/auth/providers/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/auth/ui-session/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/auth/ui-sessions/[id]/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/auth/ui-sessions/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/cwd/browse/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/cwd/validate/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/default-cwd/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/file-index/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/files/[...path]/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/git/diff/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/git/status/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/home/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/models/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/models-config/raw/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/models-config/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/models-config/test/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/plugins/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/plugins/search/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/plugins/updates/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/preferences/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/project-assets/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/prompts/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/pty/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/archive/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/command-entry/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/context/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/export/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/info/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/state/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/tool-results/[toolCallId]/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/sessions/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/sessions/search/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/settings/raw/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/settings/remote/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/skills/check/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/skills/install/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/skills/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/skills/search/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/skills/update/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/subagent-runs/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/update/apply/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/update/check/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/app/page-23c183e276008d31.js +25 -0
- package/.next/static/chunks/e868780c-16e43c5968ccf2bf.js +18 -0
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-81c6f790083aee21.js +1 -0
- package/.next/static/chunks/{webpack-9f5e68be126b5e81.js → webpack-d2379fd13c5c78c6.js} +1 -1
- package/.next/static/css/659eccb5db697b76.css +1 -0
- package/.next/static/css/{6faea79e75763a6a.css → b890757d9e0dd456.css} +1 -1
- package/README.md +7 -4
- package/bin/pidance-auth-gate.js +10 -7
- package/bin/pidance-http-server.js +101 -0
- package/bin/pidance-options.js +3 -2
- package/bin/pidance-server-config.js +46 -0
- package/bin/pidance.js +62 -77
- package/bin/pty-manager.cjs +149 -0
- package/bin/pty-worker.js +48 -0
- package/bin/pty-ws.js +271 -0
- package/package.json +13 -3
- package/.next/static/HW-Jlwn4MNQKUjCkayKg3/_buildManifest.js +0 -1
- package/.next/static/chunks/1-a030cc9570b4428a.js +0 -1
- package/.next/static/chunks/9780-6931a654abc0ac16.js +0 -1
- package/.next/static/chunks/app/_global-error/page-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/about/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/agent/[id]/bash-output/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/agent/[id]/events/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/agent/[id]/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/agent/new/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/agent/running/events/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/agent/running/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/agent-settings/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/attachments/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/auth/all-providers/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/auth/api-key/[provider]/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/auth/login/[provider]/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/[provider]/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/auth/providers/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/auth/ui-session/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/cwd/browse/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/cwd/validate/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/default-cwd/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/file-index/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/files/[...path]/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/git/diff/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/git/status/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/home/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/models/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/models-config/raw/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/models-config/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/models-config/test/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/plugins/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/plugins/search/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/plugins/updates/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/preferences/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/project-assets/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/prompts/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/archive/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/command-entry/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/context/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/export/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/info/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/state/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/tool-results/[toolCallId]/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/sessions/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/sessions/search/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/settings/raw/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/skills/check/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/skills/install/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/skills/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/skills/search/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/skills/update/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/subagent-runs/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/update/apply/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/update/check/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/app/page-dc174ab4b86d5192.js +0 -25
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-c74291295bcd24a9.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-c74291295bcd24a9.js +0 -1
- /package/.next/static/{HW-Jlwn4MNQKUjCkayKg3 → Sc36XikGMPPmKsuJFVoCS}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[552,796,885,976,1004,1097,1273,1541,2053,2138,2504,2718,2835,2837,3032,3432,3507,3851,3943,3955,4016,4037,4133,4428,4459,4629,4896,5221,5403,5408,5418,5907,6061,6132,6444,6450,6709,6801,6819,6849,6919,6988,7032,7067,7074,7198,7483,7769,7812,7837,7851,8167,8197,8429,8658,8743,8933,9043,9156,9258,9293,9560,9742,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([[552,796,885,976,1004,1097,1273,1541,2053,2138,2504,2718,2835,2837,3032,3432,3507,3851,3943,3955,4016,4037,4133,4428,4459,4629,4896,5221,5403,5408,5418,5907,6061,6132,6444,6450,6709,6801,6819,6849,6919,6988,7032,7067,7074,7198,7483,7769,7812,7837,7851,8167,8197,8429,8658,8743,8933,9043,9156,9258,9293,9560,9742,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([[552,796,885,976,1004,1097,1273,1541,2053,2138,2504,2718,2835,2837,3032,3432,3507,3851,3943,3955,4016,4037,4133,4428,4459,4629,4896,5221,5403,5408,5418,5907,6061,6132,6444,6450,6709,6801,6819,6849,6919,6988,7032,7067,7074,7198,7483,7769,7812,7837,7851,8167,8197,8429,8658,8743,8933,9043,9156,9258,9293,9560,9742,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-81c6f790083aee21.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[552,796,885,976,1004,1097,1273,1541,2053,2138,2504,2718,2835,2837,3032,3432,3507,3851,3943,3955,4016,4037,4133,4428,4459,4629,4896,5221,5403,5408,5418,5907,6061,6132,6444,6450,6709,6801,6819,6849,6919,6988,7032,7067,7074,7198,7483,7769,7812,7837,7851,8167,8197,8429,8658,8743,8933,9043,9156,9258,9293,9560,9742,9968],{84441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{"use strict";var e,t,a,c,r,f,d,o,b={},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var a=n[e]={exports:{}},c=!0;try{b[e].call(a.exports,a,a.exports,i),c=!1}finally{c&&delete n[e]}return a.exports}i.m=b,e=[],i.O=(t,a,c,r)=>{if(a){r=r||0;for(var f=e.length;f>0&&e[f-1][2]>r;f--)e[f]=e[f-1];e[f]=[a,c,r];return}for(var d=1/0,f=0;f<e.length;f++){for(var[a,c,r]=e[f],o=!0,b=0;b<a.length;b++)(!1&r||d>=r)&&Object.keys(i.O).every(e=>i.O[e](a[b]))?a.splice(b--,1):(o=!1,r<d&&(d=r));if(o){e.splice(f--,1);var n=c();void 0!==n&&(t=n)}}return t},i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,i.t=function(e,c){if(1&c&&(e=this(e)),8&c||"object"==typeof e&&e&&(4&c&&e.__esModule||16&c&&"function"==typeof e.then))return e;var r=Object.create(null);i.r(r);var f={};t=t||[null,a({}),a([]),a(a)];for(var d=2&c&&e;"object"==typeof d&&!~t.indexOf(d);d=a(d))Object.getOwnPropertyNames(d).forEach(t=>f[t]=()=>e[t]);return f.default=()=>e,i.d(r,f),r},i.d=(e,t)=>{for(var a in t)i.o(t,a)&&!i.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce((t,a)=>(i.f[a](e,t),t),[])),i.u=e=>"static/chunks/"+(({279:"050357b0",2041:"66d203d7",2280:"28f0fb3b",4952:"d2c09beb",8747:"90542734",8924:"da12927c"})[e]||e)+"."+({127:"394be8b7a579a747",249:"973d23a3940a5fc9",279:"986bc6597f184c3b",339:"1a094bb1c6eaf9dc",370:"57cfa27da8567918",776:"fe8e64ab3669a915",869:"7152372b662e31af",934:"9006461bd0548660",1212:"c32f02f461182c5b",1327:"09252bb80616cc3a",1377:"e883e13864574c26",1390:"3e7d84d187924556",1438:"d742ea00e0f072ca",1474:"605367a77b6161a0",1576:"93e0666990c12243",1951:"4b73bf47740c2bfb",2041:"3e90bc8f1f096a8e",2081:"47b6e9391094055f",2178:"2adcd2b51553bd50",2217:"4bf1455eb89bdd9b",2280:"5f2b0099c24fbe32",2325:"23caf22075e51aa5",2356:"52627097a8b56ec1",2418:"b5d9e177e10a686e",2554:"ca4cb2f8bc69f32e",2566:"505384571dedf726",2646:"c653cac657d7b035",2784:"3d8e0d20edb71dcd",2821:"934bcf60fbdc28c6",2847:"b66f6d92e4f5e495",2866:"4ecb766127917d99",3308:"23eadd1744bb967c",3316:"5c51b238308a838b",3341:"6042c7cb7225d88d",3708:"81252290870c8487",3832:"5d713641634c65b5",4368:"e43e952c5535cba6",4424:"fd0c93a807a333e1",4866:"d1060b4faf2ae1e2",4952:"4f5ff7197b5bbbea",5020:"9ac8d0dc8390bb6e",5166:"7d3648847337fe52",5242:"7b643c6b3394cac1",5361:"afc00ab2626bacbf",5460:"0337c14f29b9ff9a",5521:"cfdf2cfc6db31407",5715:"048f1bae2c41fa89",6121:"5b8cb3199531d194",6294:"24f510c0c3e3714c",6467:"b354ed428e3bef01",6787:"a15de946178e8ef7",7176:"2979806e91c0df29",7256:"e07cf52d87d40252",7543:"89f7b805ed0f2901",8118:"f905a690db2b859b",8233:"a465d18b04719c6d",8249:"7a48897e80a16391",8365:"dc22e1ff76d04a3b",8498:"1083c36ddbbedd69",8511:"c7c064a8f58f1355",8747:"b75ad0df50bf68f5",8782:"9ab86081b5661687",8863:"fa0320ea586efb3b",8924:"00775c0e4542fd3e",8953:"e5e7399c7952a1ff",9165:"02dc1f4804b94791",9522:"c7c6e9c330f9ba6b",9667:"f6918525b31688b4",9705:"40a82b97f214e28b",9793:"4567af813117ad25"})[e]+".js",i.miniCssF=e=>{},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),c={},i.l=(e,t,a,r)=>{if(c[e])return void c[e].push(t);if(void 0!==a)for(var f,d,o=document.getElementsByTagName("script"),b=0;b<o.length;b++){var n=o[b];if(n.getAttribute("src")==e||n.getAttribute("data-webpack")=="_N_E:"+a){f=n;break}}f||(d=!0,(f=document.createElement("script")).charset="utf-8",f.timeout=120,i.nc&&f.setAttribute("nonce",i.nc),f.setAttribute("data-webpack","_N_E:"+a),f.src=i.tu(e)),c[e]=[t];var u=(t,a)=>{f.onerror=f.onload=null,clearTimeout(l);var r=c[e];if(delete c[e],f.parentNode&&f.parentNode.removeChild(f),r&&r.forEach(e=>e(a)),t)return t(a)},l=setTimeout(u.bind(null,void 0,{type:"timeout",target:f}),12e4);f.onerror=u.bind(null,f.onerror),f.onload=u.bind(null,f.onload),d&&document.head.appendChild(f)},i.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.tt=()=>(void 0===r&&(r={createScriptURL:e=>e},"u">typeof trustedTypes&&trustedTypes.createPolicy&&(r=trustedTypes.createPolicy("nextjs#bundler",r))),r),i.tu=e=>i.tt().createScriptURL(e),i.p="/_next/",f={8068:0,7389:0,7513:0},i.f.j=(e,t)=>{var a=i.o(f,e)?f[e]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^(7389|7513|8068)$/.test(e))f[e]=0;else{var c=new Promise((t,c)=>a=f[e]=[t,c]);t.push(a[2]=c);var r=i.p+i.u(e),d=Error();i.l(r,t=>{if(i.o(f,e)&&(0!==(a=f[e])&&(f[e]=void 0),a)){var c=t&&("load"===t.type?"missing":t.type),r=t&&t.target&&t.target.src;d.message="Loading chunk "+e+" failed.\n("+c+": "+r+")",d.name="ChunkLoadError",d.type=c,d.request=r,a[1](d)}},"chunk-"+e,e)}},i.O.j=e=>0===f[e],d=(e,t)=>{var a,c,[r,d,o]=t,b=0;if(r.some(e=>0!==f[e])){for(a in d)i.o(d,a)&&(i.m[a]=d[a]);if(o)var n=o(i)}for(e&&e(t);b<r.length;b++)c=r[b],i.o(f,c)&&f[c]&&f[c][0](),f[c]=0;return i.O(n)},(o=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(d.bind(null,0)),o.push=d.bind(null,o.push.bind(o))})();
|
|
1
|
+
(()=>{"use strict";var e,t,a,c,r,f,d,o,b={},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var a=n[e]={exports:{}},c=!0;try{b[e].call(a.exports,a,a.exports,i),c=!1}finally{c&&delete n[e]}return a.exports}i.m=b,e=[],i.O=(t,a,c,r)=>{if(a){r=r||0;for(var f=e.length;f>0&&e[f-1][2]>r;f--)e[f]=e[f-1];e[f]=[a,c,r];return}for(var d=1/0,f=0;f<e.length;f++){for(var[a,c,r]=e[f],o=!0,b=0;b<a.length;b++)(!1&r||d>=r)&&Object.keys(i.O).every(e=>i.O[e](a[b]))?a.splice(b--,1):(o=!1,r<d&&(d=r));if(o){e.splice(f--,1);var n=c();void 0!==n&&(t=n)}}return t},i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,i.t=function(e,c){if(1&c&&(e=this(e)),8&c||"object"==typeof e&&e&&(4&c&&e.__esModule||16&c&&"function"==typeof e.then))return e;var r=Object.create(null);i.r(r);var f={};t=t||[null,a({}),a([]),a(a)];for(var d=2&c&&e;"object"==typeof d&&!~t.indexOf(d);d=a(d))Object.getOwnPropertyNames(d).forEach(t=>f[t]=()=>e[t]);return f.default=()=>e,i.d(r,f),r},i.d=(e,t)=>{for(var a in t)i.o(t,a)&&!i.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce((t,a)=>(i.f[a](e,t),t),[])),i.u=e=>"static/chunks/"+(({279:"050357b0",2041:"66d203d7",2280:"28f0fb3b",4952:"d2c09beb",8747:"90542734",8924:"da12927c"})[e]||e)+"."+({127:"394be8b7a579a747",249:"973d23a3940a5fc9",279:"986bc6597f184c3b",339:"1a094bb1c6eaf9dc",370:"57cfa27da8567918",776:"fe8e64ab3669a915",869:"7152372b662e31af",934:"9006461bd0548660",1212:"c32f02f461182c5b",1327:"09252bb80616cc3a",1377:"e883e13864574c26",1390:"3e7d84d187924556",1438:"d742ea00e0f072ca",1474:"605367a77b6161a0",1576:"93e0666990c12243",1951:"4b73bf47740c2bfb",2041:"3e90bc8f1f096a8e",2081:"47b6e9391094055f",2178:"2adcd2b51553bd50",2217:"4bf1455eb89bdd9b",2280:"5f2b0099c24fbe32",2325:"23caf22075e51aa5",2356:"52627097a8b56ec1",2418:"b5d9e177e10a686e",2554:"ca4cb2f8bc69f32e",2566:"505384571dedf726",2646:"c653cac657d7b035",2784:"3d8e0d20edb71dcd",2821:"934bcf60fbdc28c6",2847:"b66f6d92e4f5e495",2866:"4ecb766127917d99",3308:"23eadd1744bb967c",3316:"5c51b238308a838b",3341:"6042c7cb7225d88d",3708:"81252290870c8487",3832:"5d713641634c65b5",4368:"e43e952c5535cba6",4424:"fd0c93a807a333e1",4866:"d1060b4faf2ae1e2",4952:"4f5ff7197b5bbbea",5020:"9ac8d0dc8390bb6e",5166:"7d3648847337fe52",5242:"7b643c6b3394cac1",5361:"afc00ab2626bacbf",5460:"0337c14f29b9ff9a",5521:"cfdf2cfc6db31407",5715:"048f1bae2c41fa89",6121:"5b8cb3199531d194",6294:"24f510c0c3e3714c",6467:"b354ed428e3bef01",6787:"a15de946178e8ef7",7176:"2979806e91c0df29",7256:"e07cf52d87d40252",7543:"89f7b805ed0f2901",8118:"f905a690db2b859b",8233:"a465d18b04719c6d",8249:"7a48897e80a16391",8365:"dc22e1ff76d04a3b",8498:"1083c36ddbbedd69",8511:"c7c064a8f58f1355",8747:"b75ad0df50bf68f5",8782:"9ab86081b5661687",8863:"fa0320ea586efb3b",8924:"00775c0e4542fd3e",8953:"e5e7399c7952a1ff",9165:"02dc1f4804b94791",9522:"c7c6e9c330f9ba6b",9667:"f6918525b31688b4",9705:"40a82b97f214e28b",9793:"4567af813117ad25"})[e]+".js",i.miniCssF=e=>{},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),c={},i.l=(e,t,a,r)=>{if(c[e])return void c[e].push(t);if(void 0!==a)for(var f,d,o=document.getElementsByTagName("script"),b=0;b<o.length;b++){var n=o[b];if(n.getAttribute("src")==e||n.getAttribute("data-webpack")=="_N_E:"+a){f=n;break}}f||(d=!0,(f=document.createElement("script")).charset="utf-8",f.timeout=120,i.nc&&f.setAttribute("nonce",i.nc),f.setAttribute("data-webpack","_N_E:"+a),f.src=i.tu(e)),c[e]=[t];var u=(t,a)=>{f.onerror=f.onload=null,clearTimeout(l);var r=c[e];if(delete c[e],f.parentNode&&f.parentNode.removeChild(f),r&&r.forEach(e=>e(a)),t)return t(a)},l=setTimeout(u.bind(null,void 0,{type:"timeout",target:f}),12e4);f.onerror=u.bind(null,f.onerror),f.onload=u.bind(null,f.onload),d&&document.head.appendChild(f)},i.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.tt=()=>(void 0===r&&(r={createScriptURL:e=>e},"u">typeof trustedTypes&&trustedTypes.createPolicy&&(r=trustedTypes.createPolicy("nextjs#bundler",r))),r),i.tu=e=>i.tt().createScriptURL(e),i.p="/_next/",f={8068:0,7389:0,7513:0,1838:0},i.f.j=(e,t)=>{var a=i.o(f,e)?f[e]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^(1838|7389|7513|8068)$/.test(e))f[e]=0;else{var c=new Promise((t,c)=>a=f[e]=[t,c]);t.push(a[2]=c);var r=i.p+i.u(e),d=Error();i.l(r,t=>{if(i.o(f,e)&&(0!==(a=f[e])&&(f[e]=void 0),a)){var c=t&&("load"===t.type?"missing":t.type),r=t&&t.target&&t.target.src;d.message="Loading chunk "+e+" failed.\n("+c+": "+r+")",d.name="ChunkLoadError",d.type=c,d.request=r,a[1](d)}},"chunk-"+e,e)}},i.O.j=e=>0===f[e],d=(e,t)=>{var a,c,[r,d,o]=t,b=0;if(r.some(e=>0!==f[e])){for(a in d)i.o(d,a)&&(i.m[a]=d[a]);if(o)var n=o(i)}for(e&&e(t);b<r.length;b++)c=r[b],i.o(f,c)&&f[c]&&f[c][0](),f[c]=0;return i.O(n)},(o=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(d.bind(null,0)),o.push=d.bind(null,o.push.bind(o))})();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#FFF;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;right:0;left:0;top:0;bottom:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm .xterm-cursor-pointer,.xterm.xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:transparent}.xterm .xterm-accessibility-tree{font-family:monospace;user-select:text;white-space:pre}.xterm .xterm-accessibility-tree>div{transform-origin:left;width:fit-content}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;background:rgba(0,0,0,0);transition:opacity .1s linear;z-index:11}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{position:absolute;display:none}.xterm .xterm-scrollable-element>.shadow.top{display:block;top:0;left:3px;height:3px;width:100%;box-shadow:var(--vscode-scrollbar-shadow,#000) 0 6px 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.left{display:block;top:3px;left:0;height:100%;width:3px;box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.top-left-corner{display:block;top:0;left:0;height:3px;width:3px}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
/*! 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-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--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);--radius-xs:.125rem;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--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-text-muted:var(--text-muted);--color-status-running:var(--status-running)}}@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}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden}.absolute,.sr-only{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)}.z-50{z-index:50}.row-0{grid-row:0}.row-399{grid-row:399}.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)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.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}.table{display:table}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.h-\[720px\]{height:720px}.h-full{height:100%}.min-h-0{min-height:calc(var(--spacing) * 0)}.w-\[720px\]{width:720px}.w-full{width:100%}.max-w-\[760px\]{max-width:760px}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-\[drop-ripple_2\.4s_ease-out_infinite_backwards\]{animation:drop-ripple 2.4s ease-out infinite backwards}.animate-\[drop-zone-in_0\.15s_ease_both\]{animation:drop-zone-in .15s both}.animate-\[pulse_1\.5s_ease-in-out_infinite\]{animation:pulse 1.5s ease-in-out infinite}.animate-spin{animation:var(--animate-spin)}.resize{resize:both}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}.overflow-hidden{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-solid{--tw-border-style:solid;border-style:solid}.border-\[color-mix\(in_srgb\,var\(--accent\)_50\%\,transparent\)\]{border-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.border-\[color-mix\(in_srgb\,var\(--accent\)_50\%\,transparent\)\]{border-color:color-mix(in srgb,var(--accent) 50%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--accent\)_6\%\,transparent\)\]{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[color-mix\(in_srgb\,var\(--accent\)_6\%\,transparent\)\]{background-color:color-mix(in srgb,var(--accent) 6%,transparent)}}.bg-status-running{background-color:var(--color-status-running)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-4{padding-inline:calc(var(--spacing) * 4)}.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-4{padding-top:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[13px\]{font-size:13px}.break-all{word-break:break-all}.text-\[var\(--error-text\)\]{color:var(--error-text)}.text-text-muted{color:var(--color-text-muted)}.capitalize{text-transform:capitalize}.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}.underline{text-decoration-line:underline}.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))}.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 (min-width:520px){.min-\[520px\]\:flex{display:flex}}}:root{color-scheme:light;--bg:#fdfcfa;--bg-panel:#f7f6f4;--bg-elevated:#fff;--bg-hover:#0000000d;--bg-selected:#b350172b;--bg-subtle:#f4f3f1;--border:#e5e1de;--border-strong:#cbc7c2;--text:#393a34;--text-muted:#5c5c54;--text-dim:#797970;--accent:#b35017;--accent-hover:#9a4310;--accent-foreground:#fff;--user-bg:#f7f2ee;--assistant-bg:#fdfcfa;--tool-bg:#efeeec80;--code-bg:#f4f3f1;--status-running:#b35017;--status-unread:#2d72c4;--status-success:#5f8d3d;--status-warning:#8d6c15;--status-danger:#b7493f;--status-success-bg:#5f8d3d14;--status-success-border:#5f8d3d59;--status-success-foreground:#fff;--status-warning-bg:#8d6c1514;--status-warning-border:#8d6c1566;--status-danger-bg:#b7493f12;--status-danger-border:#b7493f66;--error-text:#a43d35;--diff-added-text:#47752b;--diff-added-bg:#5f8d3d17;--diff-added-border:#5f8d3d99;--diff-removed-text:#a43d35;--diff-removed-bg:#b7493f17;--diff-removed-border:#b7493f99;--diff-hunk-bg:#2d72c41f;--live-indicator-glow:0 0 6px #5f8d3d99;--warning:var(--status-warning);--danger:var(--status-danger);--success:var(--status-success);--focus:#b35017;--focus-ring:#b3501755;--overlay:#39393420;--disabled-opacity:.48;--shadow-float:0 18px 50px #39393424;--shadow-input:0 1px 2px #39393412,0 0 0 1px #ffffff80 inset;--radius-xs:4px;--radius-sm:6px;--radius-md:9px;--radius-lg:13px;--radius-pill:999px}html.dark{color-scheme:dark;--bg:#120f0e;--bg-panel:#171615;--bg-elevated:#1c1a18;--bg-hover:#ffffff12;--bg-selected:#b9a5992b;--bg-subtle:#171616;--border:#242323;--border-strong:#504e4c;--text:#c9c5ba;--text-muted:#8f8b81;--text-dim:#77736b;--accent:#da7c47;--accent-hover:#eb8c57;--accent-foreground:#120f0e;--user-bg:#25170e;--assistant-bg:#120f0e;--tool-bg:#120f0e80;--code-bg:#0e0c0b;--status-running:#da7c47;--status-unread:#479fe6;--status-success:#76ad4f;--status-warning:#c67f13;--status-danger:#da5b4a;--status-success-bg:#76ad4f1f;--status-success-border:#76ad4f70;--status-success-foreground:#120f0e;--status-warning-bg:#c67f131f;--status-warning-border:#c67f1370;--status-danger-bg:#da5b4a1f;--status-danger-border:#da5b4a7a;--error-text:#ed7665;--diff-added-text:#8bc766;--diff-added-bg:#76ad4f1f;--diff-added-border:#76ad4fb3;--diff-removed-text:#ed7665;--diff-removed-bg:#da5b4a24;--diff-removed-border:#da5b4ab3;--diff-hunk-bg:#479fe624;--live-indicator-glow:0 0 6px #76ad4fb3;--warning:var(--status-warning);--danger:var(--status-danger);--success:var(--status-success);--focus:#da7c47;--focus-ring:#da7c4755;--overlay:#0009;--disabled-opacity:.48;--shadow-float:0 20px 60px #00000070;--shadow-input:0 1px 2px #00000040,0 0 0 1px #ffffff08 inset}html[data-theme-style=fusion]{--bg:#fbfcfd;--bg-panel:#f3f6f7;--bg-elevated:#fff;--bg-hover:#163b4d0a;--bg-selected:#2e6f9520;--bg-subtle:#eef2f3;--border:#dce4e6;--border-strong:#bdcbd0;--text:#263439;--text-muted:#607077;--text-dim:#819096;--accent:#286e98;--accent-hover:#1e5c82;--accent-foreground:#fff;--user-bg:#eaf2f7;--assistant-bg:#fbfcfd;--tool-bg:#f0f5f4;--code-bg:#172126;--status-running:#27836e;--status-unread:#286e98;--status-success:#49805d;--status-warning:#9a6a1a;--status-danger:#b34f58;--status-success-bg:#49805d14;--status-success-border:#49805d59;--status-success-foreground:#fff;--status-warning-bg:#9a6a1a14;--status-warning-border:#9a6a1a66;--status-danger-bg:#b34f5812;--status-danger-border:#b34f5866;--error-text:#a23f49;--diff-added-text:#39704d;--diff-added-bg:#49805d17;--diff-added-border:#49805d99;--diff-removed-text:#a23f49;--diff-removed-bg:#b34f5817;--diff-removed-border:#b34f5899;--diff-hunk-bg:#286e981f;--live-indicator-glow:0 0 6px #49805d99;--focus:#286e98;--focus-ring:#286e9844;--overlay:#18343d30;--shadow-float:0 18px 48px #163b4d20;--shadow-input:0 1px 2px #163b4d12,0 0 0 1px #fff inset}html.dark[data-theme-style=fusion]{--bg:#101719;--bg-panel:#141d20;--bg-elevated:#192428;--bg-hover:#d8edf212;--bg-selected:#6ba7c426;--bg-subtle:#172124;--border:#263337;--border-strong:#46585e;--text:#ced8d8;--text-muted:#8d9c9e;--text-dim:#708084;--accent:#69a7ca;--accent-hover:#7fb8d6;--accent-foreground:#0f1719;--user-bg:#162832;--assistant-bg:#101719;--tool-bg:#121d1f;--code-bg:#0b1113;--status-running:#5eb39b;--status-unread:#69a7ca;--status-success:#79ad78;--status-warning:#d0a356;--status-danger:#dd777e;--status-success-bg:#79ad781f;--status-success-border:#79ad7870;--status-success-foreground:#101719;--status-warning-bg:#d0a3561f;--status-warning-border:#d0a35670;--status-danger-bg:#dd777e1f;--status-danger-border:#dd777e7a;--error-text:#ed8f95;--diff-added-text:#91c590;--diff-added-bg:#79ad781f;--diff-added-border:#79ad78b3;--diff-removed-text:#ed8f95;--diff-removed-bg:#dd777e24;--diff-removed-border:#dd777eb3;--diff-hunk-bg:#69a7ca24;--live-indicator-glow:0 0 6px #79ad78b3;--focus:#69a7ca;--focus-ring:#69a7ca55;--overlay:#0009;--shadow-float:0 20px 60px #0006;--shadow-input:0 1px 2px #0000003d,0 0 0 1px #ffffff08 inset}::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}body,html{background:var(--bg);height:100%;color:var(--text);overscroll-behavior:none;margin:0;padding:0;font-family:Aptos,Segoe UI Variable,Noto Sans SC,-apple-system,BlinkMacSystemFont,sans-serif;font-size:14px}body{height:100dvh}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}::-webkit-scrollbar-thumb:hover{background:var(--text-dim)}:root{--font-mono:var(--font-noto-mono),"JetBrains Mono","Fira Code","Consolas",ui-monospace,"PingFang SC","Microsoft YaHei",monospace}code,pre{font-family:var(--font-mono)}.markdown-body{color:var(--text);word-break:break-word;font-size:14px;line-height:1.72}.markdown-body.markdown-body--extension{font-size:inherit;color:inherit;line-height:1.5}.markdown-body.markdown-body--extension p{margin:0 0 4px}.markdown-body.markdown-body--extension p:last-child{margin-bottom:0}.markdown-body.markdown-body--extension h1,.markdown-body.markdown-body--extension h2,.markdown-body.markdown-body--extension h3,.markdown-body.markdown-body--extension h4,.markdown-body.markdown-body--extension h5,.markdown-body.markdown-body--extension h6{margin:0 0 4px;font-size:1em;font-weight:650;line-height:1.35}.markdown-body.markdown-body--extension ol,.markdown-body.markdown-body--extension ul{margin:2px 0 4px}.markdown-body p{margin:0 0 8px}.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{color:var(--text);letter-spacing:0;margin:10px 0 5px;font-weight:600;line-height:1.35}.markdown-body h1{font-size:1.16em}.markdown-body h2{font-size:1.08em}.markdown-body h3{color:var(--text);font-size:.98em}@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:5px 0 8px;padding-left:22px;list-style-position:outside}.markdown-body li{margin:3px 0;padding-left:2px}.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 .markdown-inline-code{background:var(--bg-subtle);color:var(--text);font-family:var(--font-mono);box-shadow:inset 0 0 0 1px var(--border);border-radius:5px;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) 70%,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{background:var(--bg-subtle);color:var(--text-muted);border-radius:0 6px 6px 0;margin:6px 0;padding:6px 11px}.markdown-table-wrap{border:1px solid var(--border);border-radius:var(--radius-md);width:100%;margin:8px 0;overflow:auto hidden}.markdown-body table{border-collapse:separate;border-spacing:0;min-width:100%;font-size:13px}.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}.compaction-file-details{border-top:1px solid var(--border);color:var(--text-muted);margin-top:10px;padding-top:8px;font-size:12px}.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);margin-bottom:4px;font-size:11px;font-weight:650}.compaction-file-list{border:1px solid var(--border);background:var(--bg-panel);max-height:180px;font-family:var(--font-mono);border-radius:6px;margin:0;padding:7px 8px;font-size:11px;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-md);background:var(--code-bg);box-shadow:none;margin:6px 0;position:relative;overflow:hidden}.markdown-code-header{background:var(--bg-panel);padding:5px 10px}@supports (color:color-mix(in lab,red,red)){.markdown-code-header{background:color-mix(in srgb,var(--bg-panel) 88%,var(--code-bg))}}.markdown-code-header{border-bottom:1px solid var(--border);color:var(--text-dim);justify-content:space-between;align-items:center;gap:8px;font-size:11px;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);background:var(--bg);color:var(--text-muted);cursor:pointer;font:inherit;border-radius:5px;padding:2px 7px;font-size:11px;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:disabled{color:var(--text-dim);cursor:not-allowed;opacity:var(--disabled-opacity)}.chat-input-shell:focus-within{border-color:var(--focus)!important;box-shadow:var(--shadow-input),0 0 0 3px var(--focus-ring)!important}@supports (color:color-mix(in lab,red,red)){.chat-input-shell:focus-within{box-shadow:var(--shadow-input),0 0 0 3px color-mix(in srgb,var(--focus-ring) 72%,transparent)!important}}.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}.mermaid-block-error{color:var(--text-muted);font-family:var(--font-mono);font-size:12px}.file-viewer-toolbar{min-height:35px}.file-viewer-path{flex:auto;min-width:48px}.file-viewer-meta{text-overflow:ellipsis;flex:0 auto;min-width:0;overflow:hidden}.file-viewer-controls{gap:6px}.file-viewer-action-slot{flex:0 0 24px;justify-content:center;align-items:center;width:24px;height:24px;display:flex}.file-viewer-mode-switch{border:1px solid var(--border);border-radius:5px;height:24px;display:flex;overflow:hidden}.file-viewer-mode-button{border:0;border-left:1px solid var(--border);height:22px;font:inherit;letter-spacing:0;cursor:pointer;white-space:nowrap;padding:0 8px;font-size:11px;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);width:24px;height:24px;flex:0 0 24px}.file-viewer-icon-button:hover{color:var(--text);background:var(--bg-hover)!important}.file-viewer-icon-button:focus-visible,.file-viewer-mode-button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@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:6px;margin:12px 0;padding:12px 16px;font-size:13px;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}@keyframes drop-zone-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}@keyframes drop-icon-float{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}@keyframes drop-ring-pulse{0%,to{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.06)}}@keyframes drop-ripple{0%{opacity:.6;transform:scale(0)}to{opacity:0;transform:scale(1)}}@keyframes blink{0%,to{opacity:1}50%{opacity:.3}}@keyframes spin{to{transform:rotate(1turn)}}@keyframes sidebar-running-spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes pulse{50%{opacity:.5}}@keyframes notice-shelf-in{0%{opacity:0;transform:translateY(-6px)scale(.995)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes notice-shelf-out{0%{opacity:1;transform:translateY(0)scale(1)}to{opacity:0;transform:translateY(-5px)scale(.995)}}@media (prefers-reduced-motion:reduce){.notice-shelf-item{animation-duration:.001ms!important}}.chat-jump-bottom{z-index:45;border:1px solid var(--border);background:var(--bg-panel);width:32px;height:32px;color:var(--text-muted);cursor:pointer;opacity:0;pointer-events:none;border-radius:50%;justify-content:center;align-items:center;padding:0;transition:opacity .15s,transform .15s,background-color .15s,color .15s;display:flex;position:absolute;bottom:14px;left:50%;transform:translate(-50%)translateY(6px)scale(.92);box-shadow:0 1px 2px #0f172a0f,0 8px 24px -12px #0f172a2e}.chat-jump-bottom.is-visible{opacity:1;pointer-events:auto;transform:translate(-50%)translateY(0)scale(1)}.chat-jump-bottom:hover{background:var(--bg-hover);color:var(--text)}@media (prefers-reduced-motion:reduce){.chat-jump-bottom,.chat-jump-bottom.is-visible{transition:opacity .001ms;transform:translate(-50%)}}@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{transform:scale(1);box-shadow:0 0 #0000}}@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{transition:width .2s,min-width .2s;position:relative;overflow:hidden}.sidebar-container.sidebar-dragging{transition:none}.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-inner{width:var(--sidebar-width,260px);min-width:var(--sidebar-width,260px)}}.sidebar-inner{flex-direction:column;flex:auto;min-width:0;height:100%;min-height:0;display:flex}.sidebar-resize-handle{cursor:col-resize;z-index:10;touch-action:none;width:5px;position:absolute;top:0;bottom:0;right:0}.sidebar-resize-handle.dragging,.sidebar-resize-handle:hover{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.sidebar-resize-handle.dragging,.sidebar-resize-handle:hover{background:color-mix(in srgb,var(--accent) 35%,transparent)}}.sidebar-resize-handle:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (max-width:640px){.sidebar-resize-handle{display:none}}.sidebar-pagination-btn{height:22px;color:var(--text-dim);cursor:pointer;background:0 0;border:none;border-radius:6px;align-items:center;gap:4px;padding:0 8px;font-size:11px;transition:background .12s,color .12s;display:inline-flex}.sidebar-pagination-btn:hover{background:var(--bg-hover);color:var(--text)}.sidebar-pagination-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (min-width:641px){.workspace-container{flex-shrink:0;transition:width .2s,min-width .2s;overflow:hidden}.workspace-container.workspace-dragging{transition:none}.workspace-container.workspace-closed{border-left:none!important}}@media (max-width:640px){.chat-stats-center{display:none!important}.sidebar-container{width:280px;max-width:85vw;transition:transform .25s,box-shadow .25s;top:0;bottom:0;left:0;position:fixed!important}.sidebar-container.sidebar-open{transform:translate(0);box-shadow:4px 0 20px #00000026}.sidebar-container.sidebar-closed{box-shadow:none;transform:translate(-100%)}.workspace-container{transition:transform .25s,box-shadow .25s;top:0;bottom:0;right:0;width:100%!important;min-width:0!important;position:fixed!important}.workspace-container.workspace-open{transform:translate(0);box-shadow:-4px 0 20px #00000026}.workspace-container.workspace-closed{box-shadow:none;transform:translate(100%);border-left:none!important}.workspace-container>.workspace-inner{width:100%!important;min-width:0!important}}.sidebar-icon-btn{width:24px;height:24px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;padding:0;transition:background .12s,color .12s;display:inline-flex}.sidebar-icon-btn:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.sidebar-icon-btn:active:not(:disabled){background:var(--bg-selected)}.sidebar-icon-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.sidebar-icon-btn:disabled{color:var(--text-dim)}@media (hover:hover) and (pointer:fine){.sidebar-indent-indicator{opacity:0;pointer-events:none}.sidebar-row:focus-within>.sidebar-indent-indicator,.sidebar-row:hover>.sidebar-indent-indicator{opacity:1;pointer-events:auto}.sidebar-row:focus-within .sidebar-indicator-icon,.sidebar-row:hover .sidebar-indicator-icon{opacity:0;pointer-events:none}}@media (hover:none),(pointer:coarse){.sidebar-indent-indicator{opacity:1;pointer-events:auto}.sidebar-indicator-icon{opacity:0;pointer-events:none}}.sidebar-chevron-always{opacity:1;pointer-events:auto}.sidebar-indicator-icon{transition:opacity .12s}.extension-card-btn{border:1px solid var(--border);background:var(--bg);height:26px;color:var(--text-muted);font:inherit;cursor:pointer;border-radius:6px;align-items:center;gap:5px;padding:0 12px;font-size:12px;transition:background .12s,color .12s,border-color .12s;display:inline-flex}.extension-card-btn:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.extension-card-btn:disabled{cursor:not-allowed;opacity:.55}.guide-selectors{flex-wrap:wrap;align-items:center;gap:4px;margin-bottom:10px;display:flex}.guide-selector{background:0 0;border:1px solid #0000;border-radius:6px;align-items:center;gap:5px;height:28px;padding:0 6px;transition:background .12s,border-color .12s;display:inline-flex}.guide-selector:hover{background:var(--bg-hover)}.guide-selector:focus-within{background:var(--bg-hover);border-color:var(--accent)}.guide-selector-icon{color:var(--text-dim);flex-shrink:0}.guide-select{width:160px;min-width:0;max-width:160px;color:var(--text);font:inherit;cursor:pointer;text-overflow:ellipsis;background:0 0;border:none;outline:none;font-size:12.5px}.guide-select:disabled{color:var(--text-dim);cursor:default}.guide-new-worktree-btn{width:18px;height:18px;color:var(--text-dim);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:5px;justify-content:center;align-items:center;padding:0;transition:background .12s,color .12s;display:inline-flex}.guide-new-worktree-btn:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.guide-new-worktree-btn:disabled{cursor:default;opacity:.5}.guide-worktree-form{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.guide-worktree-input{border:1px solid var(--border);background:var(--bg-panel);min-width:160px;max-width:260px;height:28px;color:var(--text);font:inherit;border-radius:6px;outline:none;padding:0 8px;font-size:12.5px}.guide-worktree-input:focus{border-color:var(--accent)}.guide-worktree-error{color:var(--danger,#e5484d);font-size:11px}@media (max-width:640px){.guide-selectors{flex-wrap:nowrap}.guide-selector{flex:1;min-width:0}.guide-select{width:100%;max-width:none}.guide-new-worktree-btn{flex-shrink:0}}.sidebar-icon-btn--active,.sidebar-icon-btn--active:hover:not(:disabled){background:var(--bg-selected);color:var(--accent)}.sidebar-icon-btn--danger:hover:not(:disabled){background:var(--status-danger-bg);color:var(--status-danger)}.sidebar-icon-btn--done,.sidebar-icon-btn--done:hover:not(:disabled){background:var(--status-success)}@supports (color:color-mix(in lab,red,red)){.sidebar-icon-btn--done,.sidebar-icon-btn--done:hover:not(:disabled){background:color-mix(in srgb,var(--status-success) 18%,transparent)}}.sidebar-icon-btn--done,.sidebar-icon-btn--done:hover:not(:disabled){color:var(--status-success)}.sidebar-row .sidebar-icon-btn--hover{opacity:0}.sidebar-row .sidebar-icon-btn--hover:focus-visible,.sidebar-row:focus-within .sidebar-icon-btn--hover,.sidebar-row:hover .sidebar-icon-btn--hover{opacity:1}@media (max-width:640px){.sidebar-toolbar{gap:12px!important}}.settings-layout{height:min(72dvh,660px);min-height:0;display:flex}.settings-nav-list{flex-direction:column;gap:2px;padding:10px 8px;display:flex}.settings-nav-item{border-radius:var(--radius-sm);width:100%;color:var(--text-muted);text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;font-size:13px;font-weight:400;transition:background .12s,color .12s;display:flex;position:relative}.settings-nav-item:hover{background:var(--bg-hover);color:var(--text)}.settings-nav-item.is-active{background:var(--bg-selected);color:var(--text);font-weight:600}.settings-nav-item.is-active:before{border-radius:var(--radius-pill);background:var(--accent);content:"";width:2px;position:absolute;top:7px;bottom:7px;left:3px}.settings-content-pane,.settings-scroll-region{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.settings-content-pane{background:var(--bg);overflow:hidden}.settings-scroll-region{scrollbar-gutter:stable;overflow-y:auto}.settings-page-content{width:min(100%,700px);padding:24px 28px 32px}.settings-choice{margin-bottom:26px}.settings-segmented-control{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-panel);width:fit-content;max-width:100%;box-shadow:var(--shadow-input);gap:2px;padding:3px;display:flex}.settings-segmented-option{border-radius:var(--radius-sm);min-width:96px;height:32px;color:var(--text-muted);white-space:nowrap;cursor:pointer;background:0 0;border:none;padding:0 14px;font-size:12.5px;transition:background .12s,color .12s,box-shadow .12s}.settings-segmented-option:hover{color:var(--text)}.settings-segmented-option.is-active{background:var(--bg-elevated);color:var(--text);box-shadow:0 1px 3px var(--text)}@supports (color:color-mix(in lab,red,red)){.settings-segmented-option.is-active{box-shadow:0 1px 3px color-mix(in srgb,var(--text) 12%,transparent)}}.settings-segmented-option.is-active{font-weight:600}.settings-empty-state{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:10px;height:100%;padding:32px 24px;display:flex}.app-top-bar{height:36px}.app-top-bar,.workspace-header{border-bottom:1px solid var(--border);background:var(--bg-panel);flex-shrink:0;align-items:center;display:flex}.workspace-header{gap:4px;height:40px;padding:0 8px 0 12px}.changes-panel{border-left:1px solid var(--border);background:var(--bg-panel);flex-direction:column;flex-shrink:0;align-self:stretch;min-width:0;height:100%;min-height:0;display:flex;position:relative;overflow:hidden}.changes-panel>.changes-panel{border-left:none;flex:auto;height:100%;min-height:0;width:100%!important;min-width:0!important}.changes-panel-content{flex:1;grid-template-rows:minmax(120px,36%) minmax(0,1fr);min-height:0;display:grid}.changes-panel-diff,.changes-panel-list{min-height:0;overflow:auto}.changes-panel-list{border-bottom:1px solid var(--border)}.changes-panel-hint{color:var(--text-dim);padding:18px 14px;font-size:11.5px;line-height:1.5}.changes-panel-hint.is-error{color:var(--status-danger)}.changes-panel-resize-handle{z-index:10;cursor:col-resize;touch-action:none;width:6px;position:absolute;top:0;bottom:0;left:-3px}.changes-panel-resize-handle.dragging,.changes-panel-resize-handle:hover{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.changes-panel-resize-handle.dragging,.changes-panel-resize-handle:hover{background:color-mix(in srgb,var(--accent) 35%,transparent)}}.secondary-panel-inner{flex-direction:column;width:100%;min-width:0;height:100%;min-height:0;display:flex;overflow:hidden}.secondary-panel-tabs{flex:none;min-width:0;min-height:0}.secondary-panel-body{flex-direction:column;flex:auto;min-width:0;min-height:0;display:flex;overflow:hidden}.workspace-navigation-rail{border-left:1px solid var(--border);background:var(--bg);flex-direction:column;align-items:center;gap:4px;padding:8px 0;display:flex}.workspace-resize-handle{cursor:col-resize;z-index:10;touch-action:none;width:5px;position:absolute;top:0;bottom:0;left:0}.workspace-resize-handle.dragging,.workspace-resize-handle:hover{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.workspace-resize-handle.dragging,.workspace-resize-handle:hover{background:color-mix(in srgb,var(--accent) 35%,transparent)}}@media (max-width:640px){.workspace-resize-handle{display:none}}.file-row-actions{background:var(--bg-panel);border:1px solid var(--border);opacity:0;visibility:hidden;border-radius:6px;align-items:center;gap:2px;padding:1px;transition:opacity .12s,visibility .12s;display:flex;position:absolute;top:50%;right:4px;transform:translateY(-50%)}.file-row{border-radius:var(--radius-xs);transition:background .12s}.file-row:focus-within,.file-row:hover{background:var(--bg-hover)}.file-row:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.file-row-actions:has([data-menu-open=true]),.file-row:focus-within .file-row-actions,.file-row:hover .file-row-actions{opacity:1;visibility:visible}.file-row-action-btn{width:24px;height:24px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:5px;flex-shrink:0;justify-content:center;align-items:center;padding:0;text-decoration:none;transition:background .12s,color .12s;display:inline-flex}.file-row-action-btn:hover{background:var(--bg-hover);color:var(--text)}.file-row-action-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (pointer:coarse){.file-row-actions{opacity:1;visibility:visible}.file-row .file-row-badge{display:none}}.git-file-row{cursor:pointer;width:100%;height:26px;color:var(--text);text-align:left;border-radius:var(--radius-xs);background:0 0;border:none;align-items:center;gap:6px;padding:0 8px;font-size:12px;transition:background .12s,color .12s;display:flex}.git-file-row:hover{background:var(--bg-hover)}.git-file-row.is-selected{background:var(--bg-selected);color:var(--text)}@media (max-width:640px){.changes-panel{display:none!important}}.git-file-row:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (hover:none),(pointer:coarse){.sidebar-row .sidebar-icon-btn--hover{opacity:1}.sidebar-icon-btn{width:28px;height:28px;position:relative}.sidebar-icon-btn:after{content:"";position:absolute;inset:-4px -2px}}@media (max-width:640px){.app-top-bar{height:44px}.app-top-bar>button:not(.app-top-bar-stats){width:44px!important;height:44px!important}.app-top-bar-stats{min-width:0;max-width:min(48vw,168px);overflow:hidden;gap:4px!important;height:44px!important;padding:0 8px!important}.app-top-bar-stats>span{text-overflow:ellipsis;min-width:0;overflow:hidden}.workspace-header{height:44px;padding-right:6px}.workspace-header .sidebar-icon-btn,.workspace-navigation-rail .sidebar-icon-btn{width:36px;height:36px}.workspace-navigation-rail{gap:8px;padding-top:8px}.settings-layout{height:min(78dvh,680px)}.settings-nav-list{padding:10px}.settings-page-content{padding:20px 16px 28px}.settings-segmented-control{width:100%;overflow-x:auto}.settings-segmented-option{flex:1 0 auto;min-width:0;height:40px}.chat-input-shell{padding:9px 8px 9px 12px!important}.chat-input-shell button{min-height:40px}.file-row{min-height:44px}.file-row>svg{width:12px;height:12px}.file-row-icon svg{width:18px;height:18px}.file-row-action-btn{width:32px;height:32px}}.sidebar-row .sidebar-icon-btn--hover.sidebar-icon-btn--active{opacity:1}@media (hover:none),(pointer:coarse){.sidebar-chevron-btn:after{content:"";position:absolute;inset:-5px -3px}}.file-viewer-toolbar{min-width:0}.file-viewer-path{text-overflow:ellipsis;white-space:nowrap;min-width:72px;overflow:hidden}.file-viewer-meta{white-space:nowrap;flex-shrink:0}.file-viewer-controls{flex-shrink:0;align-items:center;gap:3px;margin-left:auto;display:flex}.file-viewer-icon-button{width:26px;height:26px;color:var(--text-muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:5px;flex:none;justify-content:center;align-items:center;padding:0;text-decoration:none;transition:color .12s,background .12s,border-color .12s;display:inline-flex}.file-viewer-icon-button:hover:not(:disabled),.file-viewer-icon-button[data-active=true]{color:var(--text);background:var(--bg-selected);border-color:var(--border)}.file-viewer-icon-button.is-save:not(:disabled){color:var(--accent)}.file-close-confirm__button:focus-visible,.file-editor-notice button:focus-visible,.file-viewer-icon-button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.file-viewer-icon-button:disabled{opacity:.34;cursor:not-allowed}.file-viewer-toolbar-separator{background:var(--border);flex:none;width:1px;height:16px;margin:0 2px}.file-viewer-live-indicator{border-radius:50%;flex:none;width:6px;height:6px}.file-source-editor{box-sizing:border-box;resize:none;background:var(--bg);width:100%;min-width:max-content;height:100%;min-height:0;color:var(--text);caret-color:var(--accent);font-family:var(--font-mono);tab-size:2;white-space:pre;border:0;outline:0;flex:auto;margin:0;padding:14px 18px;font-size:13px;line-height:1.6;display:block;overflow:auto}.file-source-editor.is-wrapped{white-space:pre-wrap;overflow-wrap:anywhere;min-width:100%}.file-close-confirm,.file-editor-notice{border-bottom:1px solid var(--border);background:var(--accent);align-items:center;gap:10px;min-height:34px;padding:5px 10px 5px 12px;display:flex}@supports (color:color-mix(in lab,red,red)){.file-close-confirm,.file-editor-notice{background:color-mix(in srgb,var(--accent) 7%,var(--bg-panel))}}.file-close-confirm,.file-editor-notice{color:var(--text-muted);flex:none;font-size:11.5px}.file-editor-notice.is-warning{background:var(--status-warning)}@supports (color:color-mix(in lab,red,red)){.file-editor-notice.is-warning{background:color-mix(in srgb,var(--status-warning) 10%,var(--bg-panel))}}.file-editor-notice.is-warning{color:var(--status-warning)}@supports (color:color-mix(in lab,red,red)){.file-editor-notice.is-warning{color:color-mix(in srgb,var(--status-warning) 72%,var(--text))}}.file-editor-notice.is-error{background:var(--status-danger)}@supports (color:color-mix(in lab,red,red)){.file-editor-notice.is-error{background:color-mix(in srgb,var(--status-danger) 9%,var(--bg-panel))}}.file-editor-notice.is-error{color:var(--status-danger)}.file-editor-notice.is-success{background:var(--status-success)}@supports (color:color-mix(in lab,red,red)){.file-editor-notice.is-success{background:color-mix(in srgb,var(--status-success) 8%,var(--bg-panel))}}.file-editor-notice.is-success{color:var(--status-success)}.file-editor-notice__actions{align-items:center;gap:5px;margin-left:auto;display:flex}.file-close-confirm__button,.file-editor-notice button{border:1px solid var(--border);background:var(--bg);min-height:24px;color:var(--text-muted);font:inherit;cursor:pointer;white-space:nowrap;border-radius:5px;padding:2px 8px}.file-close-confirm__button:hover,.file-editor-notice button:hover{color:var(--text);background:var(--bg-hover)}.file-close-confirm__button.is-danger,.file-editor-notice button.is-danger{color:var(--status-danger);border-color:var(--status-danger)}@supports (color:color-mix(in lab,red,red)){.file-close-confirm__button.is-danger,.file-editor-notice button.is-danger{border-color:color-mix(in srgb,var(--status-danger) 35%,var(--border))}}.file-close-confirm{background:var(--status-warning);min-height:36px}@supports (color:color-mix(in lab,red,red)){.file-close-confirm{background:color-mix(in srgb,var(--status-warning) 7%,var(--bg-panel))}}.file-close-confirm__message{text-overflow:ellipsis;white-space:nowrap;min-width:0;margin-right:auto;overflow:hidden}.file-close-confirm__button{align-items:center;gap:5px;display:inline-flex}.file-tab-dirty-dot{background:var(--accent);width:8px;height:8px;box-shadow:0 0 0 2px var(--accent);border-radius:50%}@supports (color:color-mix(in lab,red,red)){.file-tab-dirty-dot{box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 12%,transparent)}}.file-save-spinner,.file-tab-dirty-dot.is-saving{animation:file-editor-pulse .9s ease-in-out infinite alternate}.file-save-spinner{border:2px solid var(--accent);width:11px;height:11px}@supports (color:color-mix(in lab,red,red)){.file-save-spinner{border:2px solid color-mix(in srgb,var(--accent) 28%,transparent)}}.file-save-spinner{border-top-color:var(--accent);border-radius:50%;animation-name:file-editor-spin;animation-duration:.65s;animation-timing-function:linear;animation-iteration-count:infinite}.file-viewer-context-label{z-index:2;border-bottom:1px solid var(--border);background:var(--bg-panel);color:var(--text-dim);padding:5px 12px;font-size:10.5px;position:sticky;top:0}@keyframes file-editor-spin{to{transform:rotate(1turn)}}@keyframes file-editor-pulse{to{opacity:.45}}@media (max-width:640px){.file-viewer-toolbar{gap:6px!important;padding-left:8px!important;padding-right:0!important}.file-viewer-meta{display:none}.file-viewer-controls{scrollbar-width:none;max-width:68vw;padding-right:8px;overflow-x:auto}.file-viewer-controls::-webkit-scrollbar{display:none}.file-close-confirm,.file-editor-notice{flex-wrap:wrap;align-items:flex-start}.file-editor-notice__actions{width:100%;margin-left:0}.file-close-confirm__message{flex-basis:100%;width:100%}.file-close-confirm__button span{display:none}.file-close-confirm__button{justify-content:center;width:28px;padding:0}.file-source-editor{padding:12px}}@media (prefers-reduced-motion:reduce){.file-save-spinner,.file-tab-dirty-dot.is-saving{animation:none}}@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-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-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}
|
|
1
|
+
/*! 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-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--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);--radius-xs:.125rem;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--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-text-muted:var(--text-muted);--color-status-running:var(--status-running)}}@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}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden}.absolute,.sr-only{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)}.z-50{z-index:50}.row-0{grid-row:0}.row-399{grid-row:399}.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)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.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}.table{display:table}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.h-\[720px\]{height:720px}.h-full{height:100%}.min-h-0{min-height:calc(var(--spacing) * 0)}.w-\[720px\]{width:720px}.w-full{width:100%}.max-w-\[760px\]{max-width:760px}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-\[drop-ripple_2\.4s_ease-out_infinite_backwards\]{animation:drop-ripple 2.4s ease-out infinite backwards}.animate-\[drop-zone-in_0\.15s_ease_both\]{animation:drop-zone-in .15s both}.animate-\[pulse_1\.5s_ease-in-out_infinite\]{animation:pulse 1.5s ease-in-out infinite}.animate-spin{animation:var(--animate-spin)}.resize{resize:both}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}.overflow-hidden{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-solid{--tw-border-style:solid;border-style:solid}.border-\[color-mix\(in_srgb\,var\(--accent\)_50\%\,transparent\)\]{border-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.border-\[color-mix\(in_srgb\,var\(--accent\)_50\%\,transparent\)\]{border-color:color-mix(in srgb,var(--accent) 50%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--accent\)_6\%\,transparent\)\]{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[color-mix\(in_srgb\,var\(--accent\)_6\%\,transparent\)\]{background-color:color-mix(in srgb,var(--accent) 6%,transparent)}}.bg-status-running{background-color:var(--color-status-running)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-4{padding-inline:calc(var(--spacing) * 4)}.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-4{padding-top:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[13px\]{font-size:13px}.break-all{word-break:break-all}.text-\[var\(--error-text\)\]{color:var(--error-text)}.text-text-muted{color:var(--color-text-muted)}.capitalize{text-transform:capitalize}.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}.underline{text-decoration-line:underline}.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))}.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 (min-width:520px){.min-\[520px\]\:flex{display:flex}}}:root{color-scheme:light;--bg:#fdfcfa;--bg-panel:#f7f6f4;--bg-elevated:#fff;--bg-hover:#0000000d;--bg-selected:#b350172b;--bg-subtle:#f4f3f1;--border:#e5e1de;--border-strong:#cbc7c2;--text:#393a34;--text-muted:#5c5c54;--text-dim:#797970;--accent:#b35017;--accent-hover:#9a4310;--accent-foreground:#fff;--user-bg:#f7f2ee;--assistant-bg:#fdfcfa;--tool-bg:#efeeec80;--code-bg:#f4f3f1;--status-running:#b35017;--status-unread:#2d72c4;--status-success:#5f8d3d;--status-warning:#8d6c15;--status-danger:#b7493f;--status-success-bg:#5f8d3d14;--status-success-border:#5f8d3d59;--status-success-foreground:#fff;--status-warning-bg:#8d6c1514;--status-warning-border:#8d6c1566;--status-danger-bg:#b7493f12;--status-danger-border:#b7493f66;--error-text:#a43d35;--diff-added-text:#47752b;--diff-added-bg:#5f8d3d17;--diff-added-border:#5f8d3d99;--diff-removed-text:#a43d35;--diff-removed-bg:#b7493f17;--diff-removed-border:#b7493f99;--diff-hunk-bg:#2d72c41f;--live-indicator-glow:0 0 6px #5f8d3d99;--warning:var(--status-warning);--danger:var(--status-danger);--success:var(--status-success);--focus:#b35017;--focus-ring:#b3501755;--overlay:#39393420;--disabled-opacity:.48;--shadow-float:0 18px 50px #39393424;--shadow-input:0 1px 2px #39393412,0 0 0 1px #ffffff80 inset;--radius-xs:4px;--radius-sm:6px;--radius-md:9px;--radius-lg:13px;--radius-pill:999px}html.dark{color-scheme:dark;--bg:#120f0e;--bg-panel:#171615;--bg-elevated:#1c1a18;--bg-hover:#ffffff12;--bg-selected:#b9a5992b;--bg-subtle:#171616;--border:#242323;--border-strong:#504e4c;--text:#c9c5ba;--text-muted:#8f8b81;--text-dim:#77736b;--accent:#da7c47;--accent-hover:#eb8c57;--accent-foreground:#120f0e;--user-bg:#25170e;--assistant-bg:#120f0e;--tool-bg:#120f0e80;--code-bg:#0e0c0b;--status-running:#da7c47;--status-unread:#479fe6;--status-success:#76ad4f;--status-warning:#c67f13;--status-danger:#da5b4a;--status-success-bg:#76ad4f1f;--status-success-border:#76ad4f70;--status-success-foreground:#120f0e;--status-warning-bg:#c67f131f;--status-warning-border:#c67f1370;--status-danger-bg:#da5b4a1f;--status-danger-border:#da5b4a7a;--error-text:#ed7665;--diff-added-text:#8bc766;--diff-added-bg:#76ad4f1f;--diff-added-border:#76ad4fb3;--diff-removed-text:#ed7665;--diff-removed-bg:#da5b4a24;--diff-removed-border:#da5b4ab3;--diff-hunk-bg:#479fe624;--live-indicator-glow:0 0 6px #76ad4fb3;--warning:var(--status-warning);--danger:var(--status-danger);--success:var(--status-success);--focus:#da7c47;--focus-ring:#da7c4755;--overlay:#0009;--disabled-opacity:.48;--shadow-float:0 20px 60px #00000070;--shadow-input:0 1px 2px #00000040,0 0 0 1px #ffffff08 inset}html[data-theme-style=fusion]{--bg:#fbfcfd;--bg-panel:#f3f6f7;--bg-elevated:#fff;--bg-hover:#163b4d0a;--bg-selected:#2e6f9520;--bg-subtle:#eef2f3;--border:#dce4e6;--border-strong:#bdcbd0;--text:#263439;--text-muted:#607077;--text-dim:#819096;--accent:#286e98;--accent-hover:#1e5c82;--accent-foreground:#fff;--user-bg:#eaf2f7;--assistant-bg:#fbfcfd;--tool-bg:#f0f5f4;--code-bg:#172126;--status-running:#27836e;--status-unread:#286e98;--status-success:#49805d;--status-warning:#9a6a1a;--status-danger:#b34f58;--status-success-bg:#49805d14;--status-success-border:#49805d59;--status-success-foreground:#fff;--status-warning-bg:#9a6a1a14;--status-warning-border:#9a6a1a66;--status-danger-bg:#b34f5812;--status-danger-border:#b34f5866;--error-text:#a23f49;--diff-added-text:#39704d;--diff-added-bg:#49805d17;--diff-added-border:#49805d99;--diff-removed-text:#a23f49;--diff-removed-bg:#b34f5817;--diff-removed-border:#b34f5899;--diff-hunk-bg:#286e981f;--live-indicator-glow:0 0 6px #49805d99;--focus:#286e98;--focus-ring:#286e9844;--overlay:#18343d30;--shadow-float:0 18px 48px #163b4d20;--shadow-input:0 1px 2px #163b4d12,0 0 0 1px #fff inset}html.dark[data-theme-style=fusion]{--bg:#101719;--bg-panel:#141d20;--bg-elevated:#192428;--bg-hover:#d8edf212;--bg-selected:#6ba7c426;--bg-subtle:#172124;--border:#263337;--border-strong:#46585e;--text:#ced8d8;--text-muted:#8d9c9e;--text-dim:#708084;--accent:#69a7ca;--accent-hover:#7fb8d6;--accent-foreground:#0f1719;--user-bg:#162832;--assistant-bg:#101719;--tool-bg:#121d1f;--code-bg:#0b1113;--status-running:#5eb39b;--status-unread:#69a7ca;--status-success:#79ad78;--status-warning:#d0a356;--status-danger:#dd777e;--status-success-bg:#79ad781f;--status-success-border:#79ad7870;--status-success-foreground:#101719;--status-warning-bg:#d0a3561f;--status-warning-border:#d0a35670;--status-danger-bg:#dd777e1f;--status-danger-border:#dd777e7a;--error-text:#ed8f95;--diff-added-text:#91c590;--diff-added-bg:#79ad781f;--diff-added-border:#79ad78b3;--diff-removed-text:#ed8f95;--diff-removed-bg:#dd777e24;--diff-removed-border:#dd777eb3;--diff-hunk-bg:#69a7ca24;--live-indicator-glow:0 0 6px #79ad78b3;--focus:#69a7ca;--focus-ring:#69a7ca55;--overlay:#0009;--shadow-float:0 20px 60px #0006;--shadow-input:0 1px 2px #0000003d,0 0 0 1px #ffffff08 inset}::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}body,html{background:var(--bg);height:100%;color:var(--text);overscroll-behavior:none;margin:0;padding:0;font-family:Aptos,Segoe UI Variable,Noto Sans SC,-apple-system,BlinkMacSystemFont,sans-serif;font-size:14px}body{height:100dvh}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}::-webkit-scrollbar-thumb:hover{background:var(--text-dim)}:root{--font-mono:var(--font-noto-mono),"JetBrains Mono","Fira Code","Consolas",ui-monospace,"PingFang SC","Microsoft YaHei",monospace}code,pre{font-family:var(--font-mono)}.markdown-body{color:var(--text);word-break:break-word;font-size:14px;line-height:1.72}.markdown-body.markdown-body--extension{font-size:inherit;color:inherit;line-height:1.5}.markdown-body.markdown-body--extension p{margin:0 0 4px}.markdown-body.markdown-body--extension p:last-child{margin-bottom:0}.markdown-body.markdown-body--extension h1,.markdown-body.markdown-body--extension h2,.markdown-body.markdown-body--extension h3,.markdown-body.markdown-body--extension h4,.markdown-body.markdown-body--extension h5,.markdown-body.markdown-body--extension h6{margin:0 0 4px;font-size:1em;font-weight:650;line-height:1.35}.markdown-body.markdown-body--extension ol,.markdown-body.markdown-body--extension ul{margin:2px 0 4px}.markdown-body p{margin:0 0 8px}.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{color:var(--text);letter-spacing:0;margin:10px 0 5px;font-weight:600;line-height:1.35}.markdown-body h1{font-size:1.16em}.markdown-body h2{font-size:1.08em}.markdown-body h3{color:var(--text);font-size:.98em}@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:5px 0 8px;padding-left:22px;list-style-position:outside}.markdown-body li{margin:3px 0;padding-left:2px}.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 .markdown-inline-code{background:var(--bg-subtle);color:var(--text);font-family:var(--font-mono);box-shadow:inset 0 0 0 1px var(--border);border-radius:5px;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) 70%,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{background:var(--bg-subtle);color:var(--text-muted);border-radius:0 6px 6px 0;margin:6px 0;padding:6px 11px}.markdown-table-wrap{border:1px solid var(--border);border-radius:var(--radius-md);width:100%;margin:8px 0;overflow:auto hidden}.markdown-body table{border-collapse:separate;border-spacing:0;min-width:100%;font-size:13px}.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}.compaction-file-details{border-top:1px solid var(--border);color:var(--text-muted);margin-top:10px;padding-top:8px;font-size:12px}.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);margin-bottom:4px;font-size:11px;font-weight:650}.compaction-file-list{border:1px solid var(--border);background:var(--bg-panel);max-height:180px;font-family:var(--font-mono);border-radius:6px;margin:0;padding:7px 8px;font-size:11px;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-md);background:var(--code-bg);box-shadow:none;margin:6px 0;position:relative;overflow:hidden}.markdown-code-header{background:var(--bg-panel);padding:5px 10px}@supports (color:color-mix(in lab,red,red)){.markdown-code-header{background:color-mix(in srgb,var(--bg-panel) 88%,var(--code-bg))}}.markdown-code-header{border-bottom:1px solid var(--border);color:var(--text-dim);justify-content:space-between;align-items:center;gap:8px;font-size:11px;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);background:var(--bg);color:var(--text-muted);cursor:pointer;font:inherit;border-radius:5px;padding:2px 7px;font-size:11px;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:disabled{color:var(--text-dim);cursor:not-allowed;opacity:var(--disabled-opacity)}.chat-input-shell:focus-within{border-color:var(--focus)!important;box-shadow:var(--shadow-input),0 0 0 3px var(--focus-ring)!important}@supports (color:color-mix(in lab,red,red)){.chat-input-shell:focus-within{box-shadow:var(--shadow-input),0 0 0 3px color-mix(in srgb,var(--focus-ring) 72%,transparent)!important}}.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}.mermaid-block-error{color:var(--text-muted);font-family:var(--font-mono);font-size:12px}.file-viewer-toolbar{min-height:35px}.file-viewer-path{flex:auto;min-width:48px}.file-viewer-meta{text-overflow:ellipsis;flex:0 auto;min-width:0;overflow:hidden}.file-viewer-controls{gap:6px}.file-viewer-action-slot{flex:0 0 24px;justify-content:center;align-items:center;width:24px;height:24px;display:flex}.file-viewer-mode-switch{border:1px solid var(--border);border-radius:5px;height:24px;display:flex;overflow:hidden}.file-viewer-mode-button{border:0;border-left:1px solid var(--border);height:22px;font:inherit;letter-spacing:0;cursor:pointer;white-space:nowrap;padding:0 8px;font-size:11px;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);width:24px;height:24px;flex:0 0 24px}.file-viewer-icon-button:hover{color:var(--text);background:var(--bg-hover)!important}.file-viewer-icon-button:focus-visible,.file-viewer-mode-button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@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:6px;margin:12px 0;padding:12px 16px;font-size:13px;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}@keyframes drop-zone-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}@keyframes drop-icon-float{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}@keyframes drop-ring-pulse{0%,to{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.06)}}@keyframes drop-ripple{0%{opacity:.6;transform:scale(0)}to{opacity:0;transform:scale(1)}}@keyframes blink{0%,to{opacity:1}50%{opacity:.3}}@keyframes spin{to{transform:rotate(1turn)}}@keyframes sidebar-running-spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes pulse{50%{opacity:.5}}@keyframes notice-shelf-in{0%{opacity:0;transform:translateY(-6px)scale(.995)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes notice-shelf-out{0%{opacity:1;transform:translateY(0)scale(1)}to{opacity:0;transform:translateY(-5px)scale(.995)}}@media (prefers-reduced-motion:reduce){.notice-shelf-item{animation-duration:.001ms!important}}.chat-jump-bottom{z-index:45;border:1px solid var(--border);background:var(--bg-panel);width:32px;height:32px;color:var(--text-muted);cursor:pointer;opacity:0;pointer-events:none;border-radius:50%;justify-content:center;align-items:center;padding:0;transition:opacity .15s,transform .15s,background-color .15s,color .15s;display:flex;position:absolute;bottom:14px;left:50%;transform:translate(-50%)translateY(6px)scale(.92);box-shadow:0 1px 2px #0f172a0f,0 8px 24px -12px #0f172a2e}.chat-jump-bottom.is-visible{opacity:1;pointer-events:auto;transform:translate(-50%)translateY(0)scale(1)}.chat-jump-bottom:hover{background:var(--bg-hover);color:var(--text)}@media (prefers-reduced-motion:reduce){.chat-jump-bottom,.chat-jump-bottom.is-visible{transition:opacity .001ms;transform:translate(-50%)}}@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{transform:scale(1);box-shadow:0 0 #0000}}@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{transition:width .2s,min-width .2s;position:relative;overflow:hidden}.sidebar-container.sidebar-dragging{transition:none}.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-inner{width:var(--sidebar-width,260px);min-width:var(--sidebar-width,260px)}}.sidebar-inner{flex-direction:column;flex:auto;min-width:0;height:100%;min-height:0;display:flex}.sidebar-resize-handle{cursor:col-resize;z-index:10;touch-action:none;width:5px;position:absolute;top:0;bottom:0;right:0}.sidebar-resize-handle.dragging,.sidebar-resize-handle:hover{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.sidebar-resize-handle.dragging,.sidebar-resize-handle:hover{background:color-mix(in srgb,var(--accent) 35%,transparent)}}.sidebar-resize-handle:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (max-width:640px){.sidebar-resize-handle{display:none}}.sidebar-pagination-btn{height:22px;color:var(--text-dim);cursor:pointer;background:0 0;border:none;border-radius:6px;align-items:center;gap:4px;padding:0 8px;font-size:11px;transition:background .12s,color .12s;display:inline-flex}.sidebar-pagination-btn:hover{background:var(--bg-hover);color:var(--text)}.sidebar-pagination-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (min-width:641px){.workspace-container{flex-shrink:0;transition:width .2s,min-width .2s;overflow:hidden}.workspace-container.workspace-dragging{transition:none}.workspace-container.workspace-closed{border-left:none!important}}@media (max-width:640px){.chat-stats-center{display:none!important}.sidebar-container{width:280px;max-width:85vw;transition:transform .25s,box-shadow .25s;top:0;bottom:0;left:0;position:fixed!important}.sidebar-container.sidebar-open{transform:translate(0);box-shadow:4px 0 20px #00000026}.sidebar-container.sidebar-closed{box-shadow:none;transform:translate(-100%)}.workspace-container{transition:transform .25s,box-shadow .25s;top:0;bottom:0;right:0;width:100%!important;min-width:0!important;position:fixed!important}.workspace-container.workspace-open{transform:translate(0);box-shadow:-4px 0 20px #00000026}.workspace-container.workspace-closed{box-shadow:none;transform:translate(100%);border-left:none!important}.workspace-container>.workspace-inner{width:100%!important;min-width:0!important}}.sidebar-icon-btn{width:24px;height:24px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;padding:0;transition:background .12s,color .12s;display:inline-flex}.sidebar-icon-btn:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.sidebar-icon-btn:active:not(:disabled){background:var(--bg-selected)}.sidebar-icon-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.sidebar-icon-btn:disabled{color:var(--text-dim)}@media (hover:hover) and (pointer:fine){.sidebar-indent-indicator{opacity:0;pointer-events:none}.sidebar-row:focus-within>.sidebar-indent-indicator,.sidebar-row:hover>.sidebar-indent-indicator{opacity:1;pointer-events:auto}.sidebar-row:focus-within .sidebar-indicator-icon,.sidebar-row:hover .sidebar-indicator-icon{opacity:0;pointer-events:none}}@media (hover:none),(pointer:coarse){.sidebar-indent-indicator{opacity:1;pointer-events:auto}.sidebar-indicator-icon{opacity:0;pointer-events:none}}.sidebar-chevron-always{opacity:1;pointer-events:auto}.sidebar-indicator-icon{transition:opacity .12s}.extension-card-btn{border:1px solid var(--border);background:var(--bg);height:26px;color:var(--text-muted);font:inherit;cursor:pointer;border-radius:6px;align-items:center;gap:5px;padding:0 12px;font-size:12px;transition:background .12s,color .12s,border-color .12s;display:inline-flex}.extension-card-btn:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.extension-card-btn:disabled{cursor:not-allowed;opacity:.55}.guide-selectors{flex-wrap:wrap;align-items:center;gap:4px;margin-bottom:10px;display:flex}.guide-selector{background:0 0;border:1px solid #0000;border-radius:6px;align-items:center;gap:5px;height:28px;padding:0 6px;transition:background .12s,border-color .12s;display:inline-flex}.guide-selector:hover{background:var(--bg-hover)}.guide-selector:focus-within{background:var(--bg-hover);border-color:var(--accent)}.guide-selector-icon{color:var(--text-dim);flex-shrink:0}.guide-select{width:160px;min-width:0;max-width:160px;color:var(--text);font:inherit;cursor:pointer;text-overflow:ellipsis;background:0 0;border:none;outline:none;font-size:12.5px}.guide-select:disabled{color:var(--text-dim);cursor:default}.guide-new-worktree-btn{width:18px;height:18px;color:var(--text-dim);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:5px;justify-content:center;align-items:center;padding:0;transition:background .12s,color .12s;display:inline-flex}.guide-new-worktree-btn:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.guide-new-worktree-btn:disabled{cursor:default;opacity:.5}.guide-worktree-form{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.guide-worktree-input{border:1px solid var(--border);background:var(--bg-panel);min-width:160px;max-width:260px;height:28px;color:var(--text);font:inherit;border-radius:6px;outline:none;padding:0 8px;font-size:12.5px}.guide-worktree-input:focus{border-color:var(--accent)}.guide-worktree-error{color:var(--danger,#e5484d);font-size:11px}@media (max-width:640px){.guide-selectors{flex-wrap:nowrap}.guide-selector{flex:1;min-width:0}.guide-select{width:100%;max-width:none}.guide-new-worktree-btn{flex-shrink:0}}.sidebar-icon-btn--active,.sidebar-icon-btn--active:hover:not(:disabled){background:var(--bg-selected);color:var(--accent)}.sidebar-icon-btn--danger:hover:not(:disabled){background:var(--status-danger-bg);color:var(--status-danger)}.sidebar-icon-btn--done,.sidebar-icon-btn--done:hover:not(:disabled){background:var(--status-success)}@supports (color:color-mix(in lab,red,red)){.sidebar-icon-btn--done,.sidebar-icon-btn--done:hover:not(:disabled){background:color-mix(in srgb,var(--status-success) 18%,transparent)}}.sidebar-icon-btn--done,.sidebar-icon-btn--done:hover:not(:disabled){color:var(--status-success)}.sidebar-row .sidebar-icon-btn--hover{opacity:0}.sidebar-row .sidebar-icon-btn--hover:focus-visible,.sidebar-row:focus-within .sidebar-icon-btn--hover,.sidebar-row:hover .sidebar-icon-btn--hover{opacity:1}@media (max-width:640px){.sidebar-toolbar{gap:12px!important}}.settings-layout{height:min(72dvh,660px);min-height:0;display:flex}.settings-nav-list{flex-direction:column;gap:2px;padding:10px 8px;display:flex}.settings-nav-item{border-radius:var(--radius-sm);width:100%;color:var(--text-muted);text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;font-size:13px;font-weight:400;transition:background .12s,color .12s;display:flex;position:relative}.settings-nav-item:hover{background:var(--bg-hover);color:var(--text)}.settings-nav-item.is-active{background:var(--bg-selected);color:var(--text);font-weight:600}.settings-nav-item.is-active:before{border-radius:var(--radius-pill);background:var(--accent);content:"";width:2px;position:absolute;top:7px;bottom:7px;left:3px}.settings-content-pane,.settings-scroll-region{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.settings-content-pane{background:var(--bg);overflow:hidden}.settings-scroll-region{scrollbar-gutter:stable;overflow-y:auto}.settings-page-content{width:min(100%,700px);padding:24px 28px 32px}.settings-choice{margin-bottom:26px}.settings-segmented-control{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-panel);width:fit-content;max-width:100%;box-shadow:var(--shadow-input);gap:2px;padding:3px;display:flex}.settings-segmented-option{border-radius:var(--radius-sm);min-width:96px;height:32px;color:var(--text-muted);white-space:nowrap;cursor:pointer;background:0 0;border:none;padding:0 14px;font-size:12.5px;transition:background .12s,color .12s,box-shadow .12s}.settings-segmented-option:hover{color:var(--text)}.settings-segmented-option.is-active{background:var(--bg-elevated);color:var(--text);box-shadow:0 1px 3px var(--text)}@supports (color:color-mix(in lab,red,red)){.settings-segmented-option.is-active{box-shadow:0 1px 3px color-mix(in srgb,var(--text) 12%,transparent)}}.settings-segmented-option.is-active{font-weight:600}.settings-empty-state{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:10px;height:100%;padding:32px 24px;display:flex}.app-top-bar{height:36px}.app-top-bar,.workspace-header{border-bottom:1px solid var(--border);background:var(--bg-panel);flex-shrink:0;align-items:center;display:flex}.workspace-header{gap:4px;height:40px;padding:0 8px 0 12px}.changes-panel{border-left:1px solid var(--border);background:var(--bg-panel);flex-direction:column;flex-shrink:0;align-self:stretch;min-width:0;height:100%;min-height:0;display:flex;position:relative;overflow:hidden}.changes-panel>.changes-panel{border-left:none;flex:auto;height:100%;min-height:0;width:100%!important;min-width:0!important}.changes-panel-content{flex:1;grid-template-rows:minmax(120px,36%) minmax(0,1fr);min-height:0;display:grid}.changes-panel-diff,.changes-panel-list{min-height:0;overflow:auto}.changes-panel-list{border-bottom:1px solid var(--border)}.changes-panel-hint{color:var(--text-dim);padding:18px 14px;font-size:11.5px;line-height:1.5}.changes-panel-hint.is-error{color:var(--status-danger)}.changes-panel-resize-handle{z-index:10;cursor:col-resize;touch-action:none;width:6px;position:absolute;top:0;bottom:0;left:-3px}.changes-panel-resize-handle.dragging,.changes-panel-resize-handle:hover{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.changes-panel-resize-handle.dragging,.changes-panel-resize-handle:hover{background:color-mix(in srgb,var(--accent) 35%,transparent)}}.secondary-panel-inner{flex-direction:column;width:100%;min-width:0;height:100%;min-height:0;display:flex;overflow:hidden}.secondary-panel-tabs{flex:none;min-width:0;min-height:0}.secondary-panel-body{flex-direction:column;flex:auto;min-width:0;min-height:0;display:flex;overflow:hidden}.workspace-navigation-rail{border-left:1px solid var(--border);background:var(--bg);flex-direction:column;align-items:center;gap:4px;padding:8px 0;display:flex}.workspace-resize-handle{cursor:col-resize;z-index:10;touch-action:none;width:5px;position:absolute;top:0;bottom:0;left:0}.workspace-resize-handle.dragging,.workspace-resize-handle:hover{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.workspace-resize-handle.dragging,.workspace-resize-handle:hover{background:color-mix(in srgb,var(--accent) 35%,transparent)}}@media (max-width:640px){.workspace-resize-handle{display:none}}.file-row-actions{background:var(--bg-panel);border:1px solid var(--border);opacity:0;visibility:hidden;border-radius:6px;align-items:center;gap:2px;padding:1px;transition:opacity .12s,visibility .12s;display:flex;position:absolute;top:50%;right:4px;transform:translateY(-50%)}.file-row{border-radius:var(--radius-xs);transition:background .12s}.file-row:focus-within,.file-row:hover{background:var(--bg-hover)}.file-row:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.file-row-actions:has([data-menu-open=true]),.file-row:focus-within .file-row-actions,.file-row:hover .file-row-actions{opacity:1;visibility:visible}.file-row-action-btn{width:24px;height:24px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:5px;flex-shrink:0;justify-content:center;align-items:center;padding:0;text-decoration:none;transition:background .12s,color .12s;display:inline-flex}.file-row-action-btn:hover{background:var(--bg-hover);color:var(--text)}.file-row-action-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (pointer:coarse){.file-row-actions{opacity:1;visibility:visible}.file-row .file-row-badge{display:none}}.git-file-row{cursor:pointer;width:100%;height:26px;color:var(--text);text-align:left;border-radius:var(--radius-xs);background:0 0;border:none;align-items:center;gap:6px;padding:0 8px;font-size:12px;transition:background .12s,color .12s;display:flex}.git-file-row:hover{background:var(--bg-hover)}.git-file-row.is-selected{background:var(--bg-selected);color:var(--text)}@media (max-width:640px){.changes-panel{display:none!important}}.git-file-row:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (hover:none),(pointer:coarse){.sidebar-row .sidebar-icon-btn--hover{opacity:1}.sidebar-icon-btn{width:28px;height:28px;position:relative}.sidebar-icon-btn:after{content:"";position:absolute;inset:-4px -2px}}@media (max-width:640px){.app-top-bar{height:44px}.app-top-bar>button:not(.app-top-bar-stats){width:44px!important;height:44px!important}.app-top-bar-stats{min-width:0;max-width:min(48vw,168px);overflow:hidden;gap:4px!important;height:44px!important;padding:0 8px!important}.app-top-bar-stats>span{text-overflow:ellipsis;min-width:0;overflow:hidden}.workspace-header{height:44px;padding-right:6px}.workspace-header .sidebar-icon-btn,.workspace-navigation-rail .sidebar-icon-btn{width:36px;height:36px}.workspace-navigation-rail{gap:8px;padding-top:8px}.settings-layout{height:min(78dvh,680px)}.settings-nav-list{padding:10px}.settings-page-content{padding:20px 16px 28px}.settings-segmented-control{width:100%;overflow-x:auto}.settings-segmented-option{flex:1 0 auto;min-width:0;height:40px}.chat-input-shell{padding:9px 8px 9px 12px!important}.chat-input-shell button{min-height:40px}.file-row{min-height:44px}.file-row>svg{width:12px;height:12px}.file-row-icon svg{width:18px;height:18px}.file-row-action-btn{width:32px;height:32px}}.sidebar-row .sidebar-icon-btn--hover.sidebar-icon-btn--active{opacity:1}@media (hover:none),(pointer:coarse){.sidebar-chevron-btn:after{content:"";position:absolute;inset:-5px -3px}}.file-viewer-toolbar{min-width:0}.file-viewer-path{text-overflow:ellipsis;white-space:nowrap;min-width:72px;overflow:hidden}.file-viewer-meta{white-space:nowrap;flex-shrink:0}.file-viewer-controls{flex-shrink:0;align-items:center;gap:3px;margin-left:auto;display:flex}.file-viewer-icon-button{width:26px;height:26px;color:var(--text-muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:5px;flex:none;justify-content:center;align-items:center;padding:0;text-decoration:none;transition:color .12s,background .12s,border-color .12s;display:inline-flex}.file-viewer-icon-button:hover:not(:disabled),.file-viewer-icon-button[data-active=true]{color:var(--text);background:var(--bg-selected);border-color:var(--border)}.file-viewer-icon-button.is-save:not(:disabled){color:var(--accent)}.file-close-confirm__button:focus-visible,.file-editor-notice button:focus-visible,.file-viewer-icon-button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.file-viewer-icon-button:disabled{opacity:.34;cursor:not-allowed}.file-viewer-toolbar-separator{background:var(--border);flex:none;width:1px;height:16px;margin:0 2px}.file-viewer-live-indicator{border-radius:50%;flex:none;width:6px;height:6px}.file-source-editor{box-sizing:border-box;resize:none;background:var(--bg);width:100%;min-width:max-content;height:100%;min-height:0;color:var(--text);caret-color:var(--accent);font-family:var(--font-mono);tab-size:2;white-space:pre;border:0;outline:0;flex:auto;margin:0;padding:14px 18px;font-size:13px;line-height:1.6;display:block;overflow:auto}.file-source-editor.is-wrapped{white-space:pre-wrap;overflow-wrap:anywhere;min-width:100%}.file-close-confirm,.file-editor-notice{border-bottom:1px solid var(--border);background:var(--accent);align-items:center;gap:10px;min-height:34px;padding:5px 10px 5px 12px;display:flex}@supports (color:color-mix(in lab,red,red)){.file-close-confirm,.file-editor-notice{background:color-mix(in srgb,var(--accent) 7%,var(--bg-panel))}}.file-close-confirm,.file-editor-notice{color:var(--text-muted);flex:none;font-size:11.5px}.file-editor-notice.is-warning{background:var(--status-warning)}@supports (color:color-mix(in lab,red,red)){.file-editor-notice.is-warning{background:color-mix(in srgb,var(--status-warning) 10%,var(--bg-panel))}}.file-editor-notice.is-warning{color:var(--status-warning)}@supports (color:color-mix(in lab,red,red)){.file-editor-notice.is-warning{color:color-mix(in srgb,var(--status-warning) 72%,var(--text))}}.file-editor-notice.is-error{background:var(--status-danger)}@supports (color:color-mix(in lab,red,red)){.file-editor-notice.is-error{background:color-mix(in srgb,var(--status-danger) 9%,var(--bg-panel))}}.file-editor-notice.is-error{color:var(--status-danger)}.file-editor-notice.is-success{background:var(--status-success)}@supports (color:color-mix(in lab,red,red)){.file-editor-notice.is-success{background:color-mix(in srgb,var(--status-success) 8%,var(--bg-panel))}}.file-editor-notice.is-success{color:var(--status-success)}.file-editor-notice__actions{align-items:center;gap:5px;margin-left:auto;display:flex}.file-close-confirm__button,.file-editor-notice button{border:1px solid var(--border);background:var(--bg);min-height:24px;color:var(--text-muted);font:inherit;cursor:pointer;white-space:nowrap;border-radius:5px;padding:2px 8px}.file-close-confirm__button:hover,.file-editor-notice button:hover{color:var(--text);background:var(--bg-hover)}.file-close-confirm__button.is-danger,.file-editor-notice button.is-danger{color:var(--status-danger);border-color:var(--status-danger)}@supports (color:color-mix(in lab,red,red)){.file-close-confirm__button.is-danger,.file-editor-notice button.is-danger{border-color:color-mix(in srgb,var(--status-danger) 35%,var(--border))}}.file-close-confirm{background:var(--status-warning);min-height:36px}@supports (color:color-mix(in lab,red,red)){.file-close-confirm{background:color-mix(in srgb,var(--status-warning) 7%,var(--bg-panel))}}.file-close-confirm__message{text-overflow:ellipsis;white-space:nowrap;min-width:0;margin-right:auto;overflow:hidden}.file-close-confirm__button{align-items:center;gap:5px;display:inline-flex}.file-tab-dirty-dot{background:var(--accent);width:8px;height:8px;box-shadow:0 0 0 2px var(--accent);border-radius:50%}@supports (color:color-mix(in lab,red,red)){.file-tab-dirty-dot{box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 12%,transparent)}}.file-save-spinner,.file-tab-dirty-dot.is-saving{animation:file-editor-pulse .9s ease-in-out infinite alternate}.file-save-spinner{border:2px solid var(--accent);width:11px;height:11px}@supports (color:color-mix(in lab,red,red)){.file-save-spinner{border:2px solid color-mix(in srgb,var(--accent) 28%,transparent)}}.file-save-spinner{border-top-color:var(--accent);border-radius:50%;animation-name:file-editor-spin;animation-duration:.65s;animation-timing-function:linear;animation-iteration-count:infinite}.file-viewer-context-label{z-index:2;border-bottom:1px solid var(--border);background:var(--bg-panel);color:var(--text-dim);padding:5px 12px;font-size:10.5px;position:sticky;top:0}@keyframes file-editor-spin{to{transform:rotate(1turn)}}@keyframes file-editor-pulse{to{opacity:.45}}@media (max-width:640px){.file-viewer-toolbar{gap:6px!important;padding-left:8px!important;padding-right:0!important}.file-viewer-meta{display:none}.file-viewer-controls{scrollbar-width:none;max-width:68vw;padding-right:8px;overflow-x:auto}.file-viewer-controls::-webkit-scrollbar{display:none}.file-close-confirm,.file-editor-notice{flex-wrap:wrap;align-items:flex-start}.file-editor-notice__actions{width:100%;margin-left:0}.file-close-confirm__message{flex-basis:100%;width:100%}.file-close-confirm__button span{display:none}.file-close-confirm__button{justify-content:center;width:28px;padding:0}.file-source-editor{padding:12px}}@media (prefers-reduced-motion:reduce){.file-save-spinner,.file-tab-dirty-dot.is-saving{animation:none}}.pidance-terminal-surface{background:var(--bg)}.pidance-terminal-xterm{min-width:0;min-height:0}.pidance-terminal-xterm .xterm{height:100%}.pidance-terminal-xterm .xterm-viewport{background:0 0!important}.pidance-terminal-xterm .xterm-screen{background:0 0}@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-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-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.md
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
Pidance 是面向 [Pi](https://github.com/badlogic/pi-mono) coding agent 的开源 Web 客户端。它直接读取本机 Pi 会话文件,并沿用 Pi SDK 的会话与运行时语义,把实时对话、项目文件、Git、工作树、子代理和配置管理汇集到一个浏览器工作区。Pi 仍是数据与执行语义的事实来源;Pidance 负责提供更清晰、更完整的操作界面。
|
|
12
12
|
|
|
13
|
-
> 当前版本:`0.2.
|
|
13
|
+
> 当前版本:`0.2.8` · npm 包:`@henlii/pidance` · CLI:`pidance`
|
|
14
14
|
|
|
15
15
|
## 界面预览
|
|
16
16
|
|
|
@@ -60,17 +60,20 @@ pidance -p 8080 -H 127.0.0.1
|
|
|
60
60
|
pidance --no-open
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
-
也可使用 `PORT` 与 `PIDANCE_NO_OPEN=1
|
|
63
|
+
也可使用 `PORT` 与 `PIDANCE_NO_OPEN=1`。监听端口同样可在 **设置 → 通用 → 服务与远程访问** 中配置
|
|
64
|
+
(默认 31415,重启后生效)。Pidance 默认读取 `~/.pi/agent`;可通过 `PI_CODING_AGENT_DIR` 指向其他 Pi agent 目录。
|
|
64
65
|
|
|
65
66
|
### 远程或局域网访问
|
|
66
67
|
|
|
67
|
-
|
|
68
|
+
默认仅绑定 `127.0.0.1`(本机),无需密码。推荐在 **设置 → 通用 → 服务与远程访问** 中设置密码并
|
|
69
|
+
开启「远程访问」开关(监听 `0.0.0.0`,重启后生效);也可用 CLI 显式绑定并设置密码:
|
|
68
70
|
|
|
69
71
|
```bash
|
|
70
72
|
PIDANCE_PASSWORD='请使用强密码' pidance --hostname 0.0.0.0
|
|
71
73
|
```
|
|
72
74
|
|
|
73
|
-
|
|
75
|
+
绑定 `0.0.0.0`、`::`、局域网 IP 或其他非回环地址且未设置密码时,CLI 会拒绝启动
|
|
76
|
+
(fail-closed)。兼容旧变量 `PI_WEB_PASSWORD`,新部署优先使用 `PIDANCE_PASSWORD`。
|
|
74
77
|
|
|
75
78
|
### HTTP 代理
|
|
76
79
|
|
package/bin/pidance-auth-gate.js
CHANGED
|
@@ -9,7 +9,7 @@ const { isIP } = require("net");
|
|
|
9
9
|
|
|
10
10
|
/** host 是否为回环(localhost / *.localhost / IPv4 127.x / IPv6 ::1)。 */
|
|
11
11
|
function isLoopbackHost(host) {
|
|
12
|
-
if (typeof host !== "string" || host.length === 0) return false; // 未指定 →
|
|
12
|
+
if (typeof host !== "string" || host.length === 0) return false; // 未指定 → Pidance 默认绑定 127.0.0.1
|
|
13
13
|
let hostname = host.toLowerCase().replace(/\.$/, "");
|
|
14
14
|
if (hostname.startsWith("[") && hostname.endsWith("]")) hostname = hostname.slice(1, -1);
|
|
15
15
|
if (hostname === "localhost" || hostname.endsWith(".localhost")) return true;
|
|
@@ -28,17 +28,20 @@ function resolvePassword(env) {
|
|
|
28
28
|
return typeof p === "string" && p.length > 0 ? p : null;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
/**
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
/**
|
|
32
|
+
* 是否需要强制认证:非回环监听地址 + 未设置密码(env 明文或设置 → 通用 保存的服务端密码)。
|
|
33
|
+
* serverConfig 来自 bin/pidance-server-config.js 的 { passwordSet, remoteEnabled } 投影。
|
|
34
|
+
*/
|
|
35
|
+
function shouldRequireAuth(host, password, serverConfig) {
|
|
36
|
+
const hasPassword =
|
|
37
|
+
(typeof password === "string" && password.length > 0) ||
|
|
38
|
+
Boolean(serverConfig && serverConfig.passwordSet);
|
|
34
39
|
return !isLoopbackHost(host) && !hasPassword;
|
|
35
40
|
}
|
|
36
41
|
|
|
37
42
|
/** 人类可读的监听地址描述(拒绝启动报错用)。 */
|
|
38
43
|
function describeHost(host) {
|
|
39
|
-
return typeof host === "string" && host.length > 0
|
|
40
|
-
? host
|
|
41
|
-
: "0.0.0.0(Next 默认绑定所有网卡)";
|
|
44
|
+
return typeof host === "string" && host.length > 0 ? host : "127.0.0.1(默认本机绑定)";
|
|
42
45
|
}
|
|
43
46
|
|
|
44
47
|
module.exports = { isLoopbackHost, resolvePassword, shouldRequireAuth, describeHost };
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// Pidance 自管 HTTP server:持有 TCP,把普通请求交给 Next,/api/pty upgrade 进 PTY。
|
|
4
|
+
// 正式入口是 bin/pidance.js。
|
|
5
|
+
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
7
|
+
const http = require("http");
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
9
|
+
const next = require("next");
|
|
10
|
+
|
|
11
|
+
function loadPtyUpgrade() {
|
|
12
|
+
try {
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
14
|
+
const loaded = require("./pty-ws.js");
|
|
15
|
+
if (typeof loaded.handlePtyUpgrade === "function") return loaded.handlePtyUpgrade;
|
|
16
|
+
} catch (error) {
|
|
17
|
+
console.warn("[pidance] PTY upgrade 未加载:", error instanceof Error ? error.message : error);
|
|
18
|
+
}
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
let defaultPtyUpgrade;
|
|
23
|
+
function getDefaultPtyUpgrade() {
|
|
24
|
+
if (defaultPtyUpgrade === undefined) defaultPtyUpgrade = loadPtyUpgrade();
|
|
25
|
+
return defaultPtyUpgrade;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @param {{
|
|
30
|
+
* dir: string,
|
|
31
|
+
* hostname?: string | null,
|
|
32
|
+
* port: number,
|
|
33
|
+
* createNext?: typeof next,
|
|
34
|
+
* createHttpServer?: typeof http.createServer,
|
|
35
|
+
* onUpgrade?: (req: import("http").IncomingMessage, socket: import("net").Socket, head: Buffer) => void,
|
|
36
|
+
* }} options
|
|
37
|
+
*/
|
|
38
|
+
async function startPidanceHttpServer(options) {
|
|
39
|
+
const {
|
|
40
|
+
dir,
|
|
41
|
+
hostname,
|
|
42
|
+
port,
|
|
43
|
+
createNext = next,
|
|
44
|
+
createHttpServer = http.createServer,
|
|
45
|
+
onUpgrade,
|
|
46
|
+
} = options;
|
|
47
|
+
if (!dir) throw new Error("startPidanceHttpServer: dir 必填");
|
|
48
|
+
if (!Number.isInteger(port) || port < 0) throw new Error("startPidanceHttpServer: port 无效");
|
|
49
|
+
|
|
50
|
+
// 不把 port/hostname 传给 next():Next 16 会自己 listen,upgrade 就到不了我们的 server。
|
|
51
|
+
const app = createNext({
|
|
52
|
+
dev: false,
|
|
53
|
+
dir,
|
|
54
|
+
});
|
|
55
|
+
await app.prepare();
|
|
56
|
+
const handle = app.getRequestHandler();
|
|
57
|
+
const server = createHttpServer((req, res) => {
|
|
58
|
+
installUpgradeHandler();
|
|
59
|
+
void handle(req, res);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
function onHttpUpgrade(req, socket, head) {
|
|
63
|
+
const upgrade = onUpgrade === undefined ? getDefaultPtyUpgrade() : onUpgrade;
|
|
64
|
+
const url = req.url || "";
|
|
65
|
+
if (url.startsWith("/api/pty") && typeof upgrade === "function") {
|
|
66
|
+
void Promise.resolve(upgrade(req, socket, head)).catch((error) => {
|
|
67
|
+
console.warn("[pidance] PTY upgrade 异常", error instanceof Error ? error.message : error);
|
|
68
|
+
try { socket.destroy(); } catch { /* 已断开 */ }
|
|
69
|
+
});
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
socket.destroy();
|
|
73
|
+
}
|
|
74
|
+
function installUpgradeHandler() {
|
|
75
|
+
server.removeAllListeners("upgrade");
|
|
76
|
+
server.on("upgrade", onHttpUpgrade);
|
|
77
|
+
}
|
|
78
|
+
installUpgradeHandler();
|
|
79
|
+
|
|
80
|
+
const listenHost = hostname || undefined;
|
|
81
|
+
await new Promise((resolve, reject) => {
|
|
82
|
+
const onError = (error) => reject(error);
|
|
83
|
+
server.once("error", onError);
|
|
84
|
+
server.listen(port, listenHost, () => {
|
|
85
|
+
server.off("error", onError);
|
|
86
|
+
resolve();
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
return { server, app };
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function destroyUpgrade(req, socket) {
|
|
94
|
+
try {
|
|
95
|
+
socket.destroy();
|
|
96
|
+
} catch {
|
|
97
|
+
/* 已断开 */
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
module.exports = { startPidanceHttpServer, destroyUpgrade };
|
package/bin/pidance-options.js
CHANGED
|
@@ -21,8 +21,9 @@ function parseLaunchOptions(args = process.argv.slice(2), env = process.env) {
|
|
|
21
21
|
});
|
|
22
22
|
|
|
23
23
|
return {
|
|
24
|
-
//
|
|
25
|
-
|
|
24
|
+
// 显式端口(-p / PORT env);未指定时由 pidance.js 回退到配置文件 port,再回退产品默认 31415。
|
|
25
|
+
// 30141 留给上游 pi-web,避免同机抢端口。
|
|
26
|
+
port: cliArgs.port ?? env.PORT ?? null,
|
|
26
27
|
hostname: cliArgs.hostname ?? env.HOSTNAME ?? null,
|
|
27
28
|
// PIDANCE_NO_OPEN 为产品正式变量。
|
|
28
29
|
openBrowser:
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// 读取 ~/.pi/agent/pidance-server.json(设置 → 通用 保存的服务端配置:密码哈希 + 远程开关)。
|
|
4
|
+
// JSON 形状与 lib/pidance-server-config.ts 兼容;bin 侧(启动门禁/默认绑定)只需布尔投影。
|
|
5
|
+
// 缺失/损坏一律降级为 { passwordSet: false, remoteEnabled: false }(fail-safe:默认仅本机)。
|
|
6
|
+
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
8
|
+
const path = require("path");
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
10
|
+
const os = require("os");
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
12
|
+
const fs = require("fs");
|
|
13
|
+
|
|
14
|
+
const SERVER_CONFIG_FILE_NAME = "pidance-server.json";
|
|
15
|
+
|
|
16
|
+
function configFilePath(agentDir) {
|
|
17
|
+
const root =
|
|
18
|
+
agentDir || process.env.PI_CODING_AGENT_DIR || path.join(os.homedir(), ".pi", "agent");
|
|
19
|
+
return path.join(root, SERVER_CONFIG_FILE_NAME);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function loadServerConfig(agentDir) {
|
|
23
|
+
const fallback = { passwordSet: false, remoteEnabled: false, port: null };
|
|
24
|
+
try {
|
|
25
|
+
const filePath = configFilePath(agentDir);
|
|
26
|
+
if (!fs.existsSync(filePath)) return fallback;
|
|
27
|
+
const parsed = JSON.parse(fs.readFileSync(filePath, "utf8"));
|
|
28
|
+
const hash = parsed && parsed.passwordHash;
|
|
29
|
+
const port =
|
|
30
|
+
parsed && typeof parsed.port === "number" &&
|
|
31
|
+
Number.isInteger(parsed.port) && parsed.port >= 1 && parsed.port <= 65535
|
|
32
|
+
? parsed.port
|
|
33
|
+
: null;
|
|
34
|
+
return {
|
|
35
|
+
passwordSet: Boolean(
|
|
36
|
+
hash && typeof hash.salt === "string" && typeof hash.hash === "string",
|
|
37
|
+
),
|
|
38
|
+
remoteEnabled: Boolean(parsed && parsed.remoteEnabled === true),
|
|
39
|
+
port,
|
|
40
|
+
};
|
|
41
|
+
} catch {
|
|
42
|
+
return fallback;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
module.exports = { loadServerConfig, configFilePath };
|