@rexvane/piweb 0.3.25 → 0.3.26
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 +6 -5
- package/.next/build-manifest.json +4 -4
- package/.next/next-server.js.nft.json +1 -1
- package/.next/prerender-manifest.json +4 -4
- package/.next/react-loadable-manifest.json +14 -26
- package/.next/required-server-files.js +26 -26
- package/.next/required-server-files.json +26 -26
- package/.next/routes-manifest.json +6 -0
- package/.next/server/app/_global-error/page.js +2 -2
- package/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +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/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js +1 -1
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/agent/[id]/events/route.js +2 -2
- package/.next/server/app/api/agent/[id]/events/route.js.nft.json +1 -1
- package/.next/server/app/api/agent/[id]/events/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agent/[id]/route.js +1 -1
- package/.next/server/app/api/agent/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/agent/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agent/[id]/tree/route.js +1 -1
- package/.next/server/app/api/agent/[id]/tree/route.js.nft.json +1 -1
- package/.next/server/app/api/agent/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agent/new/route.js +1 -1
- package/.next/server/app/api/agent/new/route.js.nft.json +1 -1
- package/.next/server/app/api/agent/new/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agent/resources/route.js +1 -0
- package/.next/server/app/api/agent/resources/route.js.nft.json +1 -0
- package/.next/server/app/api/agent/resources/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/config/route.js +1 -1
- package/.next/server/app/api/config/route.js.nft.json +1 -1
- package/.next/server/app/api/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/files/route.js +1 -1
- package/.next/server/app/api/files/route.js.nft.json +1 -1
- package/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/route.js +1 -1
- package/.next/server/app/api/fs/route.js.nft.json +1 -1
- package/.next/server/app/api/fs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/git/route.js +4 -4
- package/.next/server/app/api/git/route.js.nft.json +1 -1
- package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/github/route.js +4 -4
- package/.next/server/app/api/github/route.js.nft.json +1 -1
- package/.next/server/app/api/github/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/growth/route.js +1 -1
- package/.next/server/app/api/growth/route.js.nft.json +1 -1
- package/.next/server/app/api/growth/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/health/route.js +1 -1
- package/.next/server/app/api/health/route.js.nft.json +1 -1
- package/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/models/defaults/route.js +1 -1
- package/.next/server/app/api/models/defaults/route.js.nft.json +1 -1
- package/.next/server/app/api/models/defaults/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/models/route.js +1 -1
- package/.next/server/app/api/models/route.js.nft.json +1 -1
- package/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/pi-settings/route.js +1 -1
- package/.next/server/app/api/pi-settings/route.js.nft.json +1 -1
- package/.next/server/app/api/pi-settings/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/plugins/route.js +1 -1
- package/.next/server/app/api/plugins/route.js.nft.json +1 -1
- package/.next/server/app/api/plugins/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/prompts/route.js +1 -1
- package/.next/server/app/api/prompts/route.js.nft.json +1 -1
- package/.next/server/app/api/prompts/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/route.js +2 -2
- package/.next/server/app/api/remote/route.js.nft.json +1 -1
- package/.next/server/app/api/remote/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/security/route.js +1 -1
- package/.next/server/app/api/security/route.js.nft.json +1 -1
- package/.next/server/app/api/security/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/export/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/[id]/export/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/[id]/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/import/route.js +2 -2
- package/.next/server/app/api/sessions/import/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/import/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/route.js +1 -1
- package/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route.js +2 -2
- package/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/update/route.js +2 -2
- package/.next/server/app/api/update/route.js.nft.json +1 -1
- package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/version/route.js +1 -1
- package/.next/server/app/api/version/route.js.nft.json +1 -1
- package/.next/server/app/api/version/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/web-auth/route.js +2 -2
- package/.next/server/app/api/web-auth/route.js.nft.json +1 -1
- package/.next/server/app/api/web-auth/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/workspaces/route.js +1 -1
- package/.next/server/app/api/workspaces/route.js.nft.json +1 -1
- package/.next/server/app/api/workspaces/route_client-reference-manifest.js +1 -1
- package/.next/server/app/icon.svg/route.js +1 -1
- package/.next/server/app/icon.svg/route.js.nft.json +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +5 -5
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +5 -5
- package/.next/server/app/index.segments/_full.segment.rsc +5 -5
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login/page.js +1 -1
- package/.next/server/app/login/page.js.nft.json +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +1 -1
- package/.next/server/app/login.rsc +4 -4
- package/.next/server/app/login.segments/_full.segment.rsc +4 -4
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/page.js +1 -1
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +6 -5
- package/.next/server/chunks/{813.js → 1813.js} +1 -1
- package/.next/server/chunks/{430.js → 2430.js} +5 -5
- package/.next/server/chunks/{970.js → 2970.js} +1 -1
- package/.next/server/chunks/3924.js +6 -0
- package/.next/server/chunks/4807.js +1 -0
- package/.next/server/chunks/5393.js +1 -0
- package/.next/server/chunks/5802.js +2 -0
- package/.next/server/chunks/620.js +1 -1
- package/.next/server/chunks/6229.js +1 -0
- package/.next/server/chunks/7496.js +1 -0
- package/.next/server/chunks/7662.js +2 -0
- package/.next/server/chunks/8686.js +1 -0
- package/.next/server/chunks/{593.js → 974.js} +1 -1
- package/.next/server/chunks/{920.js → 9920.js} +1 -1
- package/.next/server/instrumentation.js +1 -1
- package/.next/server/instrumentation.js.nft.json +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/middleware.js +5 -5
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/preview-props.json +3 -3
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/server/webpack-runtime.js +1 -1
- package/.next/static/QJCtqgDKzGS2BdKABd9ch/_buildManifest.js +1 -0
- package/.next/static/chunks/2577.86c8538fbf05a8b2.js +1 -0
- package/.next/static/chunks/2716.fa561519675a3ff1.js +1 -0
- package/.next/static/chunks/2906.8a0e09bb47605cf1.js +1 -0
- package/.next/static/chunks/4673.ea36e55005c0f82f.js +1 -0
- package/.next/static/chunks/4686-4dc565817a160351.js +1 -0
- package/.next/static/chunks/4778.0d2c5d75b791d352.js +1 -0
- package/.next/static/chunks/app/_global-error/page-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/_not-found/page-2d40d1d7d916666a.js +1 -0
- package/.next/static/chunks/app/api/agent/[id]/events/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/agent/[id]/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/agent/[id]/tree/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/agent/new/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/agent/resources/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/config/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/files/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/fs/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/git/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/github/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/growth/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/health/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/models/defaults/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/models/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/pi-settings/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/plugins/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/prompts/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/remote/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/security/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/export/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/sessions/import/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/sessions/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/skills/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/update/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/version/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/web-auth/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/api/workspaces/route-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/app/{layout-7f64fa67ea6ce980.js → layout-50d06e2078d6ce76.js} +1 -1
- package/.next/static/chunks/app/login/{page-00dbd2f395b364d5.js → page-5e276a1eeb8867df.js} +1 -1
- package/.next/static/chunks/app/page-71f2d3b3ed864b3d.js +1 -0
- package/.next/static/chunks/main-5403f0764579e5fe.js +5 -0
- package/.next/static/chunks/{main-app-56863ace24eb152f.js → main-app-e9b53f0e1c6591b2.js} +1 -1
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/global-error-a7e260f8cc2582d7.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-f2d93969c0bcf406.js +1 -0
- package/.next/static/chunks/webpack-ffc09b5fcc8aaa6d.js +1 -0
- package/.next/static/css/7e3caf797e4cb19a.css +1 -0
- package/.next/types/app/api/agent/[id]/events/route.ts +1 -1
- package/.next/types/app/api/agent/[id]/route.ts +1 -1
- package/.next/types/app/api/agent/[id]/tree/route.ts +1 -1
- package/.next/types/app/api/agent/new/route.ts +1 -1
- package/.next/types/app/api/agent/resources/route.ts +355 -0
- package/.next/types/app/api/config/route.ts +1 -1
- package/.next/types/app/api/files/route.ts +1 -1
- package/.next/types/app/api/fs/route.ts +1 -1
- package/.next/types/app/api/git/route.ts +1 -1
- package/.next/types/app/api/github/route.ts +1 -1
- package/.next/types/app/api/growth/route.ts +1 -1
- package/.next/types/app/api/health/route.ts +1 -1
- package/.next/types/app/api/models/defaults/route.ts +1 -1
- package/.next/types/app/api/models/route.ts +1 -1
- package/.next/types/app/api/pi-settings/route.ts +1 -1
- package/.next/types/app/api/plugins/route.ts +1 -1
- package/.next/types/app/api/prompts/route.ts +1 -1
- package/.next/types/app/api/remote/route.ts +1 -1
- package/.next/types/app/api/security/route.ts +1 -1
- package/.next/types/app/api/sessions/[id]/export/route.ts +1 -1
- package/.next/types/app/api/sessions/[id]/route.ts +1 -1
- package/.next/types/app/api/sessions/import/route.ts +1 -1
- package/.next/types/app/api/sessions/route.ts +1 -1
- package/.next/types/app/api/skills/route.ts +1 -1
- package/.next/types/app/api/update/route.ts +1 -1
- package/.next/types/app/api/version/route.ts +1 -1
- package/.next/types/app/api/web-auth/route.ts +1 -1
- package/.next/types/app/api/workspaces/route.ts +1 -1
- package/.next/types/app/layout.ts +1 -1
- package/.next/types/app/login/page.ts +1 -1
- package/.next/types/app/page.ts +1 -1
- package/.next/types/routes.d.ts +2 -1
- package/.next/types/validator.ts +10 -0
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/bin/pi.js +0 -0
- package/bin/piweb.js +0 -0
- package/package.json +1 -1
- package/scripts/build-output.mjs +0 -0
- package/scripts/dev.mjs +0 -0
- package/scripts/entrypoint.mjs +0 -0
- package/scripts/install-build.mjs +0 -0
- package/scripts/launcher.mjs +0 -0
- package/scripts/pick-folder.ps1 +0 -0
- package/scripts/postinstall.mjs +0 -0
- package/scripts/process-runner.mjs +0 -0
- package/scripts/release.mjs +0 -0
- package/scripts/sync-file-icons.mjs +0 -0
- package/scripts/sync-provider-icons.mjs +0 -0
- package/src/app/api/agent/resources/route.ts +18 -0
- package/src/app/api/remote/route.ts +5 -7
- package/src/app/api/sessions/[id]/export/route.ts +3 -1
- package/src/app/globals.css +16 -0
- package/src/components/AppShell.tsx +68 -21
- package/src/components/ChatInput.tsx +98 -27
- package/src/components/ChatWindow.tsx +68 -11
- package/src/components/ContextMeter.tsx +24 -4
- package/src/components/ExtensionUI.tsx +9 -3
- package/src/components/FileViewer.tsx +24 -21
- package/src/components/GitPanel.tsx +449 -449
- package/src/components/GrowthTree.tsx +3 -1
- package/src/components/ImageViewer.tsx +72 -0
- package/src/components/MarkdownBlock.tsx +6 -3
- package/src/components/PreviewImage.tsx +33 -0
- package/src/components/ProjectPanel.tsx +5 -3
- package/src/components/PromptPanel.tsx +322 -313
- package/src/components/RemoteSection.tsx +2 -1
- package/src/components/SessionSidebar.tsx +22 -4
- package/src/components/SettingsPanel.tsx +2654 -2639
- package/src/components/composer/ComposerImages.tsx +1 -79
- package/src/hooks/usePiWeb.ts +47 -2
- package/src/i18n.tsx +24 -0
- package/src/lib/agent-manager.ts +275 -18
- package/src/lib/chat/skill-expansion.ts +10 -0
- package/src/lib/extension-ui.ts +25 -1
- package/src/lib/git-service.ts +291 -289
- package/src/lib/github-identity.ts +245 -245
- package/src/lib/growth-turns.ts +3 -1
- package/src/lib/session-reader.ts +25 -13
- package/src/lib/session-retention.ts +11 -8
- package/src/lib/slash-command-token.ts +14 -0
- package/src/lib/trajectory.ts +17 -6
- package/src/lib/types.ts +24 -2
- package/src/lib/workspace-store.ts +36 -1
- package/.next/diagnostics/build-diagnostics.json +0 -6
- package/.next/diagnostics/framework.json +0 -1
- package/.next/server/chunks/229.js +0 -1
- package/.next/server/chunks/393.js +0 -1
- package/.next/server/chunks/612.js +0 -1
- package/.next/server/chunks/662.js +0 -2
- package/.next/server/chunks/686.js +0 -1
- package/.next/server/chunks/802.js +0 -2
- package/.next/server/chunks/807.js +0 -1
- package/.next/server/chunks/924.js +0 -6
- package/.next/static/4snUelZTEIiQYCkB5nTW7/_buildManifest.js +0 -1
- package/.next/static/chunks/1966.1560d0f43ac9a41a.js +0 -1
- package/.next/static/chunks/2577.eebf2cf291a811ad.js +0 -1
- package/.next/static/chunks/2716.a5228b0eeedbe4c8.js +0 -1
- package/.next/static/chunks/2906.546a64377e12dfbc.js +0 -1
- package/.next/static/chunks/3899.55a0943bf5e7fec7.js +0 -1
- package/.next/static/chunks/4673.8eff281cb63e2799.js +0 -1
- package/.next/static/chunks/4686-f03275819a719fd8.js +0 -1
- package/.next/static/chunks/4778.2dae0c6a9e396326.js +0 -1
- package/.next/static/chunks/app/_global-error/page-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/_not-found/page-851dc3883a1937aa.js +0 -1
- package/.next/static/chunks/app/api/agent/[id]/events/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/agent/[id]/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/agent/[id]/tree/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/agent/new/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/config/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/files/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/fs/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/git/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/github/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/growth/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/health/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/models/defaults/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/models/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/pi-settings/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/plugins/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/prompts/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/remote/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/security/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/export/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/sessions/import/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/sessions/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/skills/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/update/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/version/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/web-auth/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/api/workspaces/route-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/app/page-0159987118376f42.js +0 -1
- package/.next/static/chunks/main-22ccebc2da4d291e.js +0 -5
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/global-error-c37b7707077f50ce.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-f977af7f858990a2.js +0 -1
- package/.next/static/chunks/webpack-c1b43c269867b64f.js +0 -1
- package/.next/static/css/93ed3daa6f3fbc35.css +0 -1
- package/.next/trace +0 -58
- package/.next/trace-build +0 -1
- /package/.next/static/{4snUelZTEIiQYCkB5nTW7 → QJCtqgDKzGS2BdKABd9ch}/_ssgManifest.js +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";exports.id=686,exports.ids=[686],exports.modules={3672:(a,b,c)=>{c.d(b,{H4:()=>f,Pn:()=>m,WZ:()=>n,Zt:()=>l});var d=c(29296);function e(a){return"number"==typeof a&&Number.isFinite(a)&&a>=0?a:void 0}function f(a){if(!a||"object"!=typeof a)return;let b={};return"number"==typeof a.input&&(b.input=a.input),"number"==typeof a.output&&(b.output=a.output),"number"==typeof a.cacheRead&&(b.cacheRead=a.cacheRead),"number"==typeof a.cacheWrite&&(b.cacheWrite=a.cacheWrite),Object.keys(b).length?b:void 0}function g(a){if(null==a)return"";if("string"==typeof a)return a;if(Array.isArray(a))return a.map(g).join("");if("object"==typeof a){if("string"==typeof a.text)return a.text;if("string"==typeof a.thinking)return a.thinking}return""}let h=["command","cmd","script","file_path","path","pattern","query","url"];function i(a,b){return a.length<=b?a:`${a.slice(0,b)}…`}function j(a){if(!a||"object"!=typeof a||Array.isArray(a))return"";try{let b=Object.fromEntries(Object.entries(a).map(([a,b])=>[a,"string"==typeof b?b.slice(0,100):b])),c=JSON.parse(JSON.stringify(b));if(!c||"object"!=typeof c||Array.isArray(c))return"";for(let a of h){let b=c[a];if("string"==typeof b&&b.trim())return b.trim().replace(/\s+/g," ").slice(0,80)}}catch{}return""}function k(a){let b=a&&"object"==typeof a&&!Array.isArray(a)?Object.fromEntries(Object.entries(a).map(([a,b])=>[a,"string"==typeof b&&b.length>2e3?`${b.slice(0,2e3)}…`:b])):a;try{return i(JSON.stringify(b??{},null,2),8e3)}catch{return""}}function l(a){let b,c=(a.preview??"").split("\n")[0].trim();if(c)return c.slice(0,80);if(a.argSummary)return a.argSummary.slice(0,80);try{let c=JSON.parse(a.detail??"");c&&"object"==typeof c&&!Array.isArray(c)&&(b=c)}catch{}if(b)for(let a of h){let c=b[a];if("string"==typeof c&&c.trim())return c.trim().replace(/\s+/g," ").slice(0,80)}return""}class m{constructor(a=[]){this.streamingStart=null,this.turnStartedAt=null,this.toolIndex=new Map,this.toolStart=new Map,this.pendingToolArgs=new Map,this.dirty=[],this.entries=a.map(a=>({...a})),this.nextSeq=Math.max(0,...this.entries.map(a=>a.seq))+1}push(a){let b={...a,seq:this.nextSeq++};return this.entries.push(b),this.dirty.push(b),b}touch(a){a&&!this.dirty.includes(a)&&this.dirty.push(a)}drainDirty(){let a=this.dirty;return this.dirty=[],a}onEvent(a,b=Date.now()){switch(a.type){case"turn_start":this.turnStartedAt=b;break;case"message_start":{let c=a.message;if(c?.role==="user")this.push({kind:"user",ts:c.timestamp??b,detail:g(c.content)});else if(c?.role==="assistant"){let a=this.turnStartedAt??b;this.turnStartedAt=null,this.streamingStart={seq:this.nextSeq,t0:a},this.push({kind:"message",ts:a,title:"assistant"})}else if(c?.role==="toolResult"){let a=c.toolCallId?this.toolIndex.get(c.toolCallId):void 0;if(void 0!==a){let b=this.entries[a],h=(0,d.R)(g(c.content));b.detail=h.text||b.detail,b.encodingLoss=h.encodingLoss||b.encodingLoss,b.isError=!0===c.isError,b.tokens=f(c.usage)??b.tokens;let i=e(c.durationMs);void 0!==i&&(b.timing={...b.timing,durationMs:i}),this.touch(b)}}break}case"message_update":{let c=a.assistantMessageEvent;if(!c)break;if(("text_delta"===c.type||"thinking_delta"===c.type||"toolcall_delta"===c.type)&&c.delta?.length>0&&this.streamingStart&&void 0===this.streamingStart.firstToken){this.streamingStart.firstToken=b;let a=this.entries[this.entries.length-1];a?.kind==="message"&&(a.timing={...a.timing??{},ttftMs:b-this.streamingStart.t0},this.touch(a))}"toolcall_end"===c.type&&c.toolCall&&this.pendingToolArgs.set(c.toolCall.id,c.toolCall.arguments);break}case"message_end":{let c=a.message;if(c?.role==="assistant"){let a=this.entries[this.entries.length-1],d=a?.kind==="message"?a:this.push({kind:"message",ts:b});this.streamingStart&&(d.timing={...void 0===this.streamingStart.firstToken?{}:{ttftMs:this.streamingStart.firstToken-this.streamingStart.t0,decodeMs:b-this.streamingStart.firstToken},durationMs:b-this.streamingStart.t0});let h=e(c.durationMs);for(let a of(void 0!==h&&(d.timing={...d.timing,durationMs:h}),d.tokens=f(c.usage),d.thinking=i(g((c.content??[]).filter(a=>"thinking"===a.type).map(a=>a.thinking)),1e5)||void 0,d.detail=i(g((c.content??[]).filter(a=>"text"===a.type)),1e5)||void 0,d.isError="error"===c.stopReason,"error"===c.stopReason&&(d.title="error"),this.touch(d),this.streamingStart=null,c.content??[]))"toolCall"===a.type&&(this.toolIndex.set(a.id,this.entries.length),this.push({kind:"tool",ts:b,toolName:a.name,toolCallId:a.id,title:a.name,detail:k(a.arguments),argSummary:j(a.arguments)}))}break}case"tool_execution_start":{this.toolStart.set(a.toolCallId,b);let c=this.toolIndex.get(a.toolCallId);if(void 0===c)c=this.entries.length,this.toolIndex.set(a.toolCallId,c),this.push({kind:"tool",ts:b,toolName:a.toolName,toolCallId:a.toolCallId,title:a.toolName,detail:k(a.args),argSummary:j(a.args)});else{let b=this.entries[c];b.detail=k(a.args),b.argSummary=j(a.args),this.touch(b)}break}case"tool_execution_update":{let b=this.toolIndex.get(a.toolCallId);if(void 0!==b){let c=this.entries[b],e=(0,d.R)(g(a.partialResult));e.text&&(c.preview=e.text.slice(-2e3)),c.encodingLoss=e.encodingLoss||c.encodingLoss,this.touch(c)}break}case"tool_execution_end":{let c=this.toolIndex.get(a.toolCallId);if(void 0!==c){let f=this.entries[c],h=(0,d.R)(g(a.result)),j=f.detail?.includes("\n\n---\n\n")?f.detail.slice(0,f.detail.indexOf("\n\n---\n\n")):f.detail;f.detail=[j,i(h.text,8e3)].filter(Boolean).join("\n\n---\n\n")||void 0,f.encodingLoss=h.encodingLoss||f.encodingLoss,f.isError=!0===a.isError;let k=this.toolStart.get(a.toolCallId),l=e(a.durationMs)??(void 0!==k?b-k:void 0);void 0!==l&&(f.timing={...f.timing??{},durationMs:l}),this.touch(f)}this.toolStart.delete(a.toolCallId);break}case"compaction_start":this.push({kind:"compacted",ts:b,title:`compact (${a.reason})`});break;case"compaction_end":{let b=[...this.entries].reverse().find(a=>"compacted"===a.kind);b&&(a.errorMessage&&(b.isError=!0,b.detail=a.errorMessage),a.result?.tokensBefore!=null&&(b.tokens={input:a.result.tokensBefore}),this.touch(b))}}}}function n(a){let b=[],c=1,h=a=>"number"==typeof a?.timestamp?a.timestamp:Date.now();for(let i of a)if("message"===i.type){let a=i.message;if(!a)continue;if("user"===a.role)b.push({seq:c++,kind:"user",ts:h(a),detail:g(a.content)});else if("assistant"===a.role){let d=g((a.content??[]).filter(a=>"thinking"===a.type)),i=g((a.content??[]).filter(a=>"text"===a.type)),l=e(a.durationMs);for(let e of(b.push({seq:c++,kind:"message",ts:h(a),title:"error"===a.stopReason?"error":"assistant",detail:i,thinking:d||void 0,tokens:f(a.usage),...void 0===l?{}:{timing:{durationMs:l}},isError:"error"===a.stopReason||void 0}),a.content??[]))"toolCall"===e.type&&b.push({seq:c++,kind:"tool",ts:h(a),toolName:e.name,toolCallId:e.id,title:e.name,detail:k(e.arguments),argSummary:j(e.arguments)})}else if("toolResult"===a.role){let c=b.findLast?.(b=>"tool"===b.kind&&(a.toolCallId?b.toolCallId===a.toolCallId:b.toolName===a.toolName));if(c){let b=(0,d.R)(g(a.content));c.detail=[c.detail,b.text].filter(Boolean).join("\n\n---\n\n"),c.encodingLoss=b.encodingLoss||c.encodingLoss,c.isError=!0===a.isError||void 0,c.tokens=f(a.usage)??c.tokens;let h=e(a.durationMs);void 0!==h&&(c.timing={durationMs:h})}}}else"compaction"===i.type?b.push({seq:c++,kind:"compacted",ts:h(i),title:"compact",tokens:null!=i.tokensBefore?{input:i.tokensBefore}:f(i.usage)}):"branch_summary"===i.type&&b.push({seq:c++,kind:"compacted",ts:h(i),title:"branch summary",tokens:f(i.usage),detail:i.summary});return b}},6896:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Iz:()=>E,JZ:()=>D,PY:()=>y,Tp:()=>z,XG:()=>G,X_:()=>J,cH:()=>B,qM:()=>A,qh:()=>H,r7:()=>F,vQ:()=>C});var e=c(51455),f=c.n(e),g=c(48161),h=c.n(g),i=c(76760),j=c.n(i),k=c(92584),l=c(31421),m=c(46193),n=c(87982),o=c(77598),p=c(49904),q=a([n]);function r(){return j().join((0,n.$M)(),"web-workspaces.json")}async function s(a=r()){try{let b=JSON.parse(await f().readFile(a,"utf8"));if(!b||"object"!=typeof b||Array.isArray(b))throw Error("invalid workspace registry");let c=Object.fromEntries(Object.entries("object"==typeof b.aliases&&null!==b.aliases?b.aliases:{}).filter(a=>"string"==typeof a[1])),d=Object.fromEntries(Object.entries("object"==typeof b.growthInit&&null!==b.growthInit?b.growthInit:{}).filter(a=>"boolean"==typeof a[1]));return{workspaces:Array.isArray(b.workspaces)?b.workspaces.filter(a=>"string"==typeof a):[],aliases:c,archivedSessions:Array.isArray(b.archivedSessions)?b.archivedSessions.filter(a=>"string"==typeof a):[],removedWorkspaces:Array.isArray(b.removedWorkspaces)?b.removedWorkspaces.filter(a=>"string"==typeof a):[],...Object.keys(d).length?{growthInit:d}:{}}}catch(a){if("ENOENT"!==a.code)throw a}return{workspaces:[],aliases:{},archivedSessions:[],removedWorkspaces:[]}}function t(a){let b=j().resolve(a);return"win32"===process.platform?b.toLowerCase():b}async function u(a,b){await f().mkdir(j().dirname(b),{recursive:!0});let c=`${b}.${(0,o.randomUUID)()}.tmp`;try{await f().writeFile(c,JSON.stringify(a,null,2),{encoding:"utf8",flag:"wx",mode:384}),await f().rename(c,b)}finally{await f().unlink(c).catch(()=>void 0)}}n=(q.then?(await q)():q)[0];let K=null;async function v(a){var b;let c;try{c=await f().stat(a)}catch(a){if("ENOENT"!==a.code)throw a;return K=null,{workspaces:[],aliases:{},archivedSessions:[],removedWorkspaces:[]}}let d=(b=c,`${b.mtimeMs}:${b.ctimeMs}:${b.size}:${b.ino}`);if(K&&K.path===a&&K.stamp===d)return K.data;let e=await s(a);return K={path:a,stamp:d,data:e},e}async function w(){return v(r())}async function x(a){let b=r();return(0,p.Ax)(b,()=>(0,p._i)(b,async()=>{try{return await a(await s(b),b)}finally{K=null}}))}async function y(){return(await w()).removedWorkspaces??[]}async function z(a,b){let c=t(j().resolve(a));return x(async(a,d)=>{for(let b of(a.aliases||(a.aliases={}),Object.keys(a.aliases)))b!==c&&t(b)===c&&delete a.aliases[b];return b.trim()?a.aliases[c]=b.trim():delete a.aliases[c],await u(a,d),a.aliases})}async function A(a){return(await w()).growthInit?.[t(a)]??null}async function B(a,b){let c=t(a);await x(async(a,d)=>{a.growthInit={...a.growthInit,[c]:b},await u(a,d)})}async function C(){let a=await w();return{workspaces:a.workspaces,aliases:a.aliases??{},archivedSessions:a.archivedSessions??[],removedWorkspaces:a.removedWorkspaces??[]}}async function D(a){let b=j().resolve(a),c=t(b);return x(async(a,d)=>(a.archivedSessions||(a.archivedSessions=[]),a.archivedSessions.some(a=>t(a)===c)||(a.archivedSessions.push(b),await u(a,d)),a.archivedSessions))}async function E(a){let b=t(j().resolve(a));return x(async(a,c)=>{let d=a.archivedSessions??[],e=d.filter(a=>t(a)!==b);return e.length!==d.length&&(a.archivedSessions=e,await u(a,c)),e})}async function F(a){let b=j().resolve(a),c=t(b);return x(async(a,d)=>{let e=!1;if(a.workspaces.some(a=>t(a)===c)||(a.workspaces.push(b),e=!0),a.removedWorkspaces){let b=a.removedWorkspaces.filter(a=>t(a)!==c);e||=b.length!==a.removedWorkspaces.length,a.removedWorkspaces=b}return e&&await u(a,d),{workspaces:a.workspaces,removedWorkspaces:a.removedWorkspaces??[]}})}async function G(a){let b=r(),c=await v(b),d=new Set((c.removedWorkspaces??[]).map(t)),e=new Set(c.workspaces.map(t)),f=!1;for(let b of a){if(!b||"string"!=typeof b)continue;let a=t(j().resolve(b));d.has(a)||e.has(a)||(e.add(a),f=!0)}return f?x(async(b,c)=>{let d=!1,e=new Set((b.removedWorkspaces??[]).map(t)),f=new Set(b.workspaces.map(t));for(let c of a){if(!c||"string"!=typeof c)continue;let a=j().resolve(c),g=t(a);e.has(g)||f.has(g)||(b.workspaces.push(a),f.add(g),d=!0)}return d&&await u(b,c),b.workspaces}):c.workspaces}async function H(a){let b=j().resolve(a),c=t(b);return x(async(a,d)=>{if(a.workspaces=a.workspaces.filter(a=>t(a)!==c),a.removedWorkspaces||(a.removedWorkspaces=[]),a.removedWorkspaces.some(a=>t(a)===c)||a.removedWorkspaces.push(b),a.aliases)for(let b of Object.keys(a.aliases))t(b)===c&&delete a.aliases[b];return await u(a,d),{workspaces:a.workspaces,removedWorkspaces:a.removedWorkspaces,aliases:a.aliases??{}}})}let L=!1;function I(a,b={}){let{timeoutMs:c=3e5,windowsHide:d=!1}=b;return new Promise((b,e)=>{let f,g=(0,l.spawn)(a[0],a.slice(1),{stdio:["ignore","pipe","pipe"],windowsHide:d}),h=new m.StringDecoder("utf8"),i="",j="",k=!1;g.stdout.on("data",a=>{i+=h.write(a)}),g.stderr.on("data",a=>{j=(j+a.toString("utf8")).slice(-1e3)});let n=!1,o=a=>{n||(n=!0,clearTimeout(f),k||(k=!0,i+=h.end()),a?e(a):b(i.trim()))};g.on("error",a=>o(a)),g.on("close",a=>o(0===a?void 0:Error(j||`folder picker exited with code ${a}`))),f=setTimeout(()=>{try{g.kill()}catch{}o(Error("folder picker timed out"))},c)})}async function J(){if(L)return{path:null,canceled:!0};L=!0;try{if("win32"===process.platform){let a=j().join(k.V,"scripts","pick-folder.ps1"),b=await I(["powershell.exe","-NoProfile","-STA","-ExecutionPolicy","Bypass","-File",a,"选择工作区文件夹"],{windowsHide:!0});return b?{path:b,canceled:!1}:{path:null,canceled:!0}}if("darwin"===process.platform){let a=await I(["osascript","-e",'POSIX path of (choose folder with prompt "选择工作区文件夹")']),b=function(a){let b=a.trim();if((b=b.replace(/^alias\s+/i,"").replace(/^"(.*)"$/s,"$1")).startsWith("/"))return b.replace(/\\(.)/g,"$1");if(/^[A-Za-z][A-Za-z0-9 ]*:(.+)$/.test(b)){let a=b.slice(b.indexOf(":")+1);return`/${a.split(":").filter(Boolean).join("/")}`}return b}(a);return b?{path:b,canceled:!1}:{path:null,canceled:!0}}for(let a of[["zenity","--file-selection","--directory","--title=选择工作区文件夹"],["kdialog","--getexistingdirectory",`${h().homedir()}`,"--title","选择工作区文件夹"]])try{let b=await I(a);return b?{path:b,canceled:!1}:{path:null,canceled:!0}}catch(a){if(a instanceof Error&&/ENOENT|not found|not recognized/i.test(a.message))continue;if(/exited with code (1|5)$/.test(a instanceof Error?a.message:String(a)))return{path:null,canceled:!0};throw a}throw Error("no folder picker available: install zenity or kdialog, or type the path manually")}finally{L=!1}}d()}catch(a){d(a)}})},14719:(a,b,c)=>{c.d(b,{X:()=>e});var d=c(77598);function e(a){let b=new Map,c=new Map,e=!1,f=(c,f,g,h)=>{if(e||!a.hasViewers()||f?.signal?.aborted)return Promise.resolve(g);let i=(0,d.randomUUID)();return new Promise(d=>{let e=c=>{let e=b.get(i);e&&(b.delete(i),e.timer&&clearTimeout(e.timer),e.removeAbortListener?.(),a.publish({type:"extension_ui_resolved",id:i,ts:Date.now()}),d(c?h(c):g))},j={type:"extension_ui",id:i,...c,timeout:f?.timeout,ts:Date.now()},k={request:j,resolve:a=>e(a)};k.timer=setTimeout(()=>e(null),f?.timeout??6e5),k.timer.unref?.();let l=()=>e(null);f?.signal?.addEventListener("abort",l,{once:!0}),k.removeAbortListener=()=>f?.signal?.removeEventListener("abort",l),b.set(i,k),a.publish(j)})};return{uiContext:{select:(a,b,c)=>f({method:"select",title:a,options:b},c,void 0,a=>a.cancelled?void 0:a.value),confirm:(a,b,c)=>f({method:"confirm",title:a,message:b},c,!1,a=>!a.cancelled&&!0===a.confirmed),input:(a,b,c)=>f({method:"input",title:a,placeholder:b},c,void 0,a=>a.cancelled?void 0:a.value),notify:(b,c)=>{a.publish({type:"extension_ui",id:(0,d.randomUUID)(),method:"notify",message:b,notifyType:c??"info",ts:Date.now()})},setStatus:(b,e)=>{void 0===e?c.delete(b):c.set(b,e),a.publish({type:"extension_ui",id:(0,d.randomUUID)(),method:"setStatus",statusKey:b,statusText:e,ts:Date.now()})},setWorkingMessage:b=>{a.publish({type:"extension_ui",id:(0,d.randomUUID)(),method:"setWorkingMessage",message:b,ts:Date.now()})},onTerminalInput:()=>()=>{},setWorkingVisible:()=>{},setWorkingIndicator:()=>{},setHiddenThinkingLabel:()=>{},setWidget:()=>{},setFooter:()=>{},setHeader:()=>{},setTitle:()=>{},custom:async()=>void 0,pasteToEditor:()=>{},setEditorText:()=>{},getEditorText:()=>"",editor:async()=>void 0,addAutocompleteProvider:()=>{},setEditorComponent:()=>{},getEditorComponent:()=>void 0,getAllThemes:()=>[],getTheme:()=>void 0,setTheme:()=>{},getToolsExpanded:()=>!1,setToolsExpanded:()=>{}},statuses:c,getPendingRequests:()=>[...b.values()].map(({request:a})=>({...a,options:a.options?[...a.options]:void 0})),respond(a,c){let d=b.get(a);return!!d&&(d.resolve(c),!0)},dispose(){for(let a of(e=!0,b.values()))a.resolve({cancelled:!0});b.clear()}}}},22567:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{$:()=>g});var e=c(75430),f=a([e]);function g(a,b,c){let d;if(c<=0)return null;let f=0;for(let c of a.entries)for(let a of c.messages){if("assistant"===a.role&&"error"!==a.stopReason&&"aborted"!==a.stopReason&&a.usage){let g=(0,e.calculateContextTokens)(a.usage);g>0&&(d={tokens:g,messageIndex:f,branchIndex:b.findIndex(a=>a.id===c.sourceEntry.id)})}f++}let g=b.findLastIndex(a=>"compaction"===a.type);if(g>=0&&(!d||d.branchIndex<=g))return{tokens:null,contextWindow:c,percent:null};let h=b.findLastIndex(a=>"compaction"===a.type||"context_edit"===a.type),i=d&&d.branchIndex>h?d.tokens+a.messages.slice(d.messageIndex+1).reduce((a,b)=>a+(0,e.estimateTokens)(b),0):a.messages.reduce((a,b)=>a+(0,e.estimateTokens)(b),0);return{tokens:i,contextWindow:c,percent:i/c*100}}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},28686:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{B1:()=>ao,H$:()=>x,Hx:()=>ae,Lf:()=>P,Lz:()=>an,PO:()=>am,Rq:()=>aw,SG:()=>Q,Sj:()=>ak,al:()=>ap,bS:()=>M,g7:()=>au,kQ:()=>aq,lX:()=>av,mk:()=>N,oW:()=>aj,tX:()=>al,vJ:()=>ax});var e=c(73024),f=c(77598),g=c(76760),h=c.n(g),i=c(75430),j=c(87982),k=c(14719),l=c(35851),m=c(34007),n=c(22567),o=c(3672),p=c(31374),q=c(29296),r=c(62433),s=c(53634),t=c(6896),u=c(28802),v=a([i,j,n,p,r,t,u]);[i,j,n,p,r,t,u]=v.then?(await v)():v;let ay=globalThis,az=ay.__piWebSessions??=new Map;function w(a){if(null==a)return"";if("string"==typeof a)return a;if(Array.isArray(a))return a.map(w).join("");if("object"==typeof a){if("string"==typeof a.text)return a.text;if("string"==typeof a.thinking)return a.thinking}return""}function x(a,b){if(!a||"object"!=typeof a)return{role:"other",content:[]};let c={role:"other",content:[]};b?c.id=b:"string"==typeof a.id&&(c.id=a.id),"number"==typeof a.timestamp&&(c.timestamp=a.timestamp);let d=[];for(let b of Array.isArray(a.content)?a.content:"string"==typeof a.content?[{type:"text",text:a.content}]:[])b&&"object"==typeof b&&("text"===b.type&&"string"==typeof b.text?d.push({type:"text",text:b.text}):"thinking"===b.type&&"string"==typeof b.thinking?d.push({type:"thinking",thinking:b.thinking}):"toolCall"===b.type?d.push({type:"toolCall",id:String(b.id??""),name:String(b.name??""),arguments:b.arguments}):"image"===b.type&&"string"==typeof b.data&&"string"==typeof b.mimeType&&d.push({type:"image",data:b.data,mimeType:b.mimeType}));if(c.content=d,"user"===a.role)c.role="user";else if("assistant"===a.role)c.role="assistant",c.stopReason=a.stopReason,c.errorMessage=a.errorMessage??void 0,c.usage=(0,o.H4)(a.usage),a.usage?.cost?.total!=null&&(c.usage={...c.usage,cost:{total:a.usage.cost.total}}),c.model="string"==typeof a.model?a.model:void 0,c.provider="string"==typeof a.provider?a.provider:void 0;else if("toolResult"===a.role){c.role="toolResult";let b=(0,q.R)(w(a.content));c.content=[{type:"toolResult",toolCallId:a.toolCallId,text:b.text,isError:!0===a.isError,encodingLoss:b.encodingLoss||void 0,patch:z(a.details)}]}return c}let aA=new WeakMap;function y(a,b){return{...x(b,function(a,b){if(!b||"object"!=typeof b)return;let c=a.getEntryCount,d=c?null:a.getEntries(),e=c?c.call(a):d.length,f=aA.get(a);if(!f||f.count!==e){for(let b of(f={count:e,ids:new WeakMap},d??a.getEntries()))b?.type==="message"&&b.message&&"object"==typeof b.message&&f.ids.set(b.message,b.id);aA.set(a,f)}return f.ids.get(b)}(a.sm,b)),streamId:function(a,b){if(!b||"object"!=typeof b)return;a.messageIds??=new WeakMap;let c=a.messageIds.get(b);return c||(c=(0,f.randomUUID)(),a.messageIds.set(b,c)),c}(a,b)}}function z(a){let b=a?.patch;return"string"==typeof b&&b.trim()?b.slice(0,6e4):void 0}let aB=new Map;function A(a){return{target:"string"==typeof a?.path?a.path:"string"==typeof a?.file_path?a.file_path:"",content:"string"==typeof a?.content?a.content:void 0}}function B(a){if(null!=a){if("string"==typeof a)return a.slice(-4e3);if(Array.isArray(a))return a.map(w).join("").slice(-4e3)||void 0;if("object"==typeof a){let b=w(a.content);if(b)return b.slice(-4e3);try{return JSON.stringify(a).slice(-4e3)}catch{}}}}let aC=new WeakMap;function C(a){let b=aC.get(a);if(b){for(;b.length>0&&null!==b[0].events;)for(let c of b.shift().events)D(a,c);0===b.length&&aC.delete(a)}}function D(a,b){if(a.disposed)return;a.seq+=1;let c=JSON.stringify(b);for(let b of(a.buffer.push({seq:a.seq,json:c}),a.buffer.length>400&&a.buffer.shift(),a.subscribers))try{b(a.seq,c)}catch{a.subscribers.delete(b)}}function E(a,b){let c=aC.get(a);if(!c)return D(a,b);c.push({events:[b]}),C(a)}function F(a,b){let c=b.model;E(a,{type:"model",provider:c?String(c.provider??""):void 0,model:c?String(c.id??""):void 0,thinkingLevel:String(b.thinkingLevel??""),thinkingLevels:b.getAvailableThinkingLevels(),ts:Date.now()})}function G(a,b){if(!a.desiredThinkingLevel)return;let c=(0,u.clampThinkingLevel)(b.model,a.desiredThinkingLevel);c!==b.thinkingLevel&&b.setThinkingLevel(c,{persist:!0})}function H(a){let b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;for(let k of a.ledger.entries){if("tool"===k.kind){k.timing?.durationMs!==void 0&&i++,c+=Math.max(0,k.timing?.durationMs??0);continue}"message"===k.kind&&(k.timing?.durationMs!==void 0&&h++,b+=Math.max(0,k.timing?.durationMs??0),k.timing?.ttftMs!==void 0&&(d+=Math.max(0,k.timing.ttftMs),e+=1),(k.timing?.decodeMs??0)>0&&k.tokens?.output!==void 0&&(j++,f+=Math.max(0,k.timing?.decodeMs??0),g+=Math.max(0,k.tokens.output)))}return{llmMs:b,toolMs:c,ttftMs:d,ttftSteps:e,decodeMs:f,decodeTokens:g,llmTimedSteps:h,toolTimedCalls:i,decodeSteps:j}}let aD=new WeakMap;function I(a){if(!a.session)return null;try{let b=a.session.getSessionStats();return{userMessages:b.userMessages,assistantMessages:b.assistantMessages,toolCalls:b.toolCalls,totalMessages:b.totalMessages,tokens:b.tokens,cost:b.cost,...H(a)}}catch{return null}}function J(a){if(!a.session)return null;try{let b=a.sm.getEntryCount?.()??a.sm.getEntries().length,c=a.sm.getLeafId(),d=aD.get(a);if(d&&d.entryCount===b&&d.leafId===c)return{...d.evt,ts:Date.now()}}catch{}let b=I(a),c=null;try{c=a.session.getContextUsage()??null}catch{c=null}let d={type:"usage",stats:b,contextUsage:c?{tokens:c.tokens,contextWindow:c.contextWindow,percent:c.percent}:null,ts:Date.now()};try{let b=a.sm.getEntryCount?.()??a.sm.getEntries().length;aD.set(a,{entryCount:b,leafId:a.sm.getLeafId(),evt:d})}catch{}return d}let aE=new WeakMap;function K(a,b=!1){let c=Date.now();if(!b&&c-(aE.get(a)??0)<500)return;aE.set(a,c);let d=J(a);d&&E(a,d)}function L(a){return a.growth&&a.growth.version!==l.I&&(a.growth.dispose(),a.growth=null),a.growth??=(0,l.k)({cwd:a.cwd,sessionPath:a.sessionPath,publish:b=>E(a,b),entries:()=>a.sm.getEntries(),consent:()=>(0,t.qM)(a.cwd).catch(()=>null)})}async function M(a){return O(a),L(a).recordNow()}async function N(a,b){O(a),await (0,t.cH)(a.cwd,b);let c=a=>"win32"===process.platform?h().resolve(a).toLowerCase():h().resolve(a);for(let d of az.values())d!==a&&d.growth?.getConsentRequest()&&c(d.cwd)===c(a.cwd)&&d.growth.consentAnswered(b).catch(()=>void 0);return L(a).consentAnswered(b)}function O(a){a.lastActive=Date.now()}let aF=new Set;function P(a){for(let b of a){if(!b||aF.size>=2)return;let a="win32"===process.platform?b.toLowerCase():b;!aF.has(a)&&(aF.add(a),(0,j.v9)(b)||(0,j.Df)(b).catch(()=>void 0))}}function Q(a){let b=az.get(a);if(!b){if(!(0,e.existsSync)(a))throw new r.BV("session not found");let c=(0,j.G1)(a);b=R(a,c.getCwd()||process.cwd(),c)}return O(b),b}function R(a,b,c){let d=[];try{d=(0,o.WZ)(c.getEntries())}catch{}let e={sessionPath:a,cwd:b,sm:c,session:null,creating:null,subscribers:new Set,buffer:[],seq:0,epoch:(0,f.randomUUID)().replace(/-/g,"").slice(0,12),inflight:null,ui:null,growth:null,ledger:new o.Pn(d),lastActive:Date.now(),toolPreset:"readonly",requestedTools:new Set,resourceVersion:0,resourceReloadPending:!1,resourceReloading:!1,promptSubmitting:!1,runActive:!1,disposed:!1,messageIds:new WeakMap};return az.set(a,e),e}function S(a,b=(0,j.ye)(a)){let c=b.getAgentsFiles().agentsFiles.map(a=>({path:a.path,content:a.content,source:"project"})),d=b.getAppendSystemPrompt(),e=b.getAppendSystemPromptSources();return[...c,...d.map((a,b)=>({path:e[b]?.path??`Appended system prompt ${b+1}`,content:a,source:"extension"}))]}let aG="</available_skills>";async function T(a,b){let c=a.session,d={systemPrompt:0,systemTools:0,customTools:0,memory:0,skills:0,compacted:0,autoCompactBuffer:0,...c?{}:{cold:!0}},e=b.filter(a=>"project"===a.source).map(a=>a.content).join("\n\n"),f={systemPrompt:0,systemTools:0,customTools:0,memory:0,skills:0,compacted:0};try{let b=a.sm.buildSessionProjection().messages,g=b.findLast(a=>"system"===a.role);if(g){let a="string"==typeof g.content?g.content.length:w(g.content).length;f.memory=g.sections?.project_context?.length??0,f.skills=g.sections?.skills?.length??0,f.systemPrompt=a+Object.entries(g.sections??{}).filter(([a])=>"project_context"!==a&&"skills"!==a).reduce((a,[,b])=>a+("string"==typeof b?b.length:0),0);let b=new Set(c?c.getAllTools().filter(a=>a.sourceInfo?.source==="builtin").map(a=>a.name):["read","bash","edit","write","grep","find","ls"]);for(let a of g.toolsAdded??[])f[b.has(a.name)?"systemTools":"customTools"]+=JSON.stringify(a).length;delete d.cold}else if(c){let a=c.systemPrompt??"";f.memory=e.length;let b=a.indexOf("The following skills provide specialized instructions"),d=a.indexOf(aG);f.skills=b>=0&&d>b?a.slice(b,d+aG.length).length:0,f.systemPrompt=Math.max(0,a.length-f.memory-f.skills);let g=new Set(c.getActiveToolNames());for(let a of c.getAllTools().filter(a=>g.has(a.name))){let b=JSON.stringify({name:a.name,description:a.description,parameters:a.parameters}).length;f[a.sourceInfo?.source==="builtin"?"systemTools":"customTools"]+=b}}else{f.memory=e.length;let b=(0,j.v9)(a.cwd)??(0,j.ye)(a.cwd);f.skills=(0,i.formatSkillsForPrompt)(b.getSkills().skills).trim().length}for(let a of b)("compactionSummary"===a.role||"branchSummary"===a.role)&&(f.compacted+=a.summary?.length??0);for(let a of(d.characters=f,Object.keys(f)))d[a]=Math.ceil(f[a]/4)}catch{}try{let b=(0,j.vT)(a.cwd).getCompactionSettings(c?.model);b.enabled&&(d.autoCompactBuffer=b.reserveTokens)}catch{}return d}function U(a){a.breakdownQueued||a.disposed||(a.breakdownQueued=!0,queueMicrotask(()=>{if(a.breakdownQueued=!1,a.disposed)return;let b=[];try{b=S(a.cwd,a.session?.resourceLoader)}catch{}T(a,b).then(b=>{a.disposed||E(a,{type:"context_breakdown",breakdown:b,ts:Date.now()})},()=>void 0)}))}function V(a,b,c){let d=a.ledger.entries[0]?.ts??Date.now(),e=[];b?.systemPrompt&&e.push({seq:-1,kind:"system",ts:d,title:"Initial System Prompt",detail:b.systemPrompt});try{(c??S(a.cwd,a.session?.resourceLoader)).forEach((a,b)=>e.push({seq:-2-b,kind:"context",ts:d,title:a.path,detail:a.content.length>4e3?`${a.content.slice(0,4e3)}…`:a.content}))}catch{}return e}function W(a,b){for(let c of V(a,b))E(a,{type:"traj",entry:c,ts:Date.now()})}async function X(a){if(a.disposed)throw Error("session is disposed");return a.creating?a.creating:a.session?a.session:(a.creating=(async()=>{let b;await (0,j.Df)(a.cwd);let c=(0,j.vT)(a.cwd),d=await (0,j.Yb)(a.cwd);try{var f,g;let l,m;if(a.disposed)throw Error("session is disposed");let{session:n}=await (0,j.az)({cwd:a.cwd,agentDir:(0,j.$M)(),sessionManager:a.sm,modelRuntime:await (0,j.uU)(),resourceLoader:d,settingsManager:c});if(b=n,a.disposed)throw Error("session is disposed");a.session=n,a.requestedTools=new Set(n.getActiveToolNames()),f=a,l=(g=n).setActiveToolsByName.bind(g),aH.set(g,l),g.setActiveToolsByName=a=>{let b=[...new Set(a)];for(let a of ac(g))b.includes(a)||f.requestedTools.delete(a);for(let a of b)f.requestedTools.add(a);let c=Z(f,g);l(b.filter(a=>c.includes(a)))},m=g.reload.bind(g),g.reload=async a=>{if(f.disposed)throw Error("session is disposed");if(Y(f))throw Error("session is busy");f.resourceReloading=!0;try{await (0,j.YW)(async()=>{if(f.disposed||f.runActive||!g.isIdle)throw Error("session is busy");await m({beforeSessionStart:async()=>{for(let a of ac(g))f.requestedTools.add(a);$(f,g),await a?.beforeSessionStart?.(),$(f,g)}})}),f.resourceVersion=(0,j.Ec)(f.cwd)}finally{$(f,g),f.resourceReloading=!1,f.disposed||(aa(f,g),W(f,g),ag(f))}},$(a,n),n.subscribe(b=>{a.disposed||function(a,b){a.ledger.onEvent(b),L(a).onEvent(b);let c=Date.now();switch(b.type){case"message_start":{let d=b.message,e=y(a,d);"assistant"===e.role&&(a.inflight=d,a.inflightId=e.streamId,a.inflightIndex=a.session?.messages.length,e.stopReason="pending",e.content=e.content.map(a=>"text"===a.type?{...a,text:""}:"thinking"===a.type?{...a,thinking:""}:a)),("user"===e.role||"assistant"===e.role)&&E(a,{type:"message",message:e,phase:"start",ts:c});break}case"message_update":{let d=b.assistantMessageEvent;if(b.message&&(a.inflight=b.message,a.inflightId&&a.messageIds.set(b.message,a.inflightId)),!d)break;"text_delta"===d.type&&"string"==typeof d.delta?E(a,{type:"delta",kind:"text",contentIndex:d.contentIndex,delta:d.delta,messageId:a.inflightId,ts:c}):"thinking_delta"===d.type&&"string"==typeof d.delta&&E(a,{type:"delta",kind:"thinking",contentIndex:d.contentIndex,delta:d.delta,messageId:a.inflightId,ts:c});break}case"message_end":{let d,e,f=b.message;f?.role==="assistant"&&(a.inflightId&&a.messageIds.set(f,a.inflightId),a.inflight=null,a.inflightId=void 0,a.inflightIndex=void 0),d=aC.get(a)??[],e={events:null},d.push(e),aC.set(a,d),queueMicrotask(()=>{e.events=(()=>{let b=y(a,f);"assistant"===b.role&&(b.endedAt=c,a.breakdownProjected||(a.breakdownProjected=!0,U(a)));let d=J(a);return d?[{type:"message",message:b,phase:"end",ts:c},d]:[{type:"message",message:b,phase:"end",ts:c}]})(),C(a)});break}case"tool_execution_start":b.toolName?.toLowerCase()==="write"&&function(a,b,c,d){let{target:f}=A(d);if(f)try{let d=h().isAbsolute(f)?f:h().resolve(a,f),g=(0,e.statSync)(d);if(!g.isFile()||g.size>524288)return;let i=(0,e.readFileSync)(d,"utf8");if(i.includes("\0"))return;aB.size>=256&&aB.delete(aB.keys().next().value),aB.set(`${b}\0${c}`,i)}catch{}}(a.cwd,a.sessionPath,b.toolCallId,b.args),E(a,{type:"tool",id:b.toolCallId,name:b.toolName,args:b.args,state:"running",ts:c});break;case"tool_execution_update":{let d=(0,q.R)(B(b.partialResult)??"");E(a,{type:"tool",id:b.toolCallId,name:b.toolName,state:"running",partialResult:d.text||void 0,encodingLoss:d.encodingLoss||void 0,ts:c});break}case"tool_execution_end":{let d=(0,q.R)(B(b.result)??"");E(a,{type:"tool",id:b.toolCallId,name:b.toolName,args:b.args,state:"done",result:d.text||void 0,isError:b.isError,encodingLoss:d.encodingLoss||void 0,patch:z(b.result?.details)??(b.toolName?.toLowerCase()==="write"?function(a,b,c,d){let e=`${b}\0${c}`,f=aB.get(e);if(aB.delete(e),void 0===f)return;let{target:g,content:h}=A(d);if(void 0!==h&&h!==f)try{return(0,i.generateUnifiedPatch)(g,f,h).slice(0,6e4)}catch{return}}(a.cwd,a.sessionPath,b.toolCallId,b.args):void 0),ts:c}),K(a);break}case"agent_start":a.runActive=!0,E(a,{type:"status",isStreaming:!0,state:"running",ts:c});break;case"agent_end":K(a);break;case"agent_settled":a.runActive=!1,E(a,{type:"status",isStreaming:!1,state:"idle",ts:c}),K(a,!0),a.resourceReloadPending&&queueMicrotask(()=>void ah(a));break;case"queue_update":E(a,{type:"queue",steering:[...b.steering],followUp:[...b.followUp],ts:c});break;case"compaction_start":E(a,{type:"status",isStreaming:!0,state:"compacting",ts:c}),E(a,{type:"compaction",phase:"start",reason:b.reason,ts:c});break;case"compaction_end":E(a,{type:"compaction",phase:"end",reason:b.reason,errorMessage:b.errorMessage,ts:c}),K(a,!0),U(a),"manual"===b.reason&&(E(a,{type:"status",isStreaming:Y(a),state:Y(a)?"running":"idle",ts:c}),a.resourceReloadPending&&queueMicrotask(()=>void ah(a)));break;case"session_info_changed":E(a,{type:"name",name:b.name??"",ts:c});break;case"thinking_level_changed":a.session?F(a,a.session):E(a,{type:"model",thinkingLevel:b.level,ts:c});break;case"auto_retry_start":E(a,{type:"retry",attempt:Number(b.attempt)||0,maxAttempts:Number(b.maxAttempts)||0,message:String(b.errorMessage??""),ts:c});break;case"auto_retry_end":E(a,{type:"retry_end",attempt:Number(b.attempt)||0,ts:c})}for(let b of a.ledger.drainDirty())E(a,{type:"traj",entry:b,ts:Date.now()})}(a,b)});let o=(0,k.X)({publish:b=>E(a,b),hasViewers:()=>!a.disposed&&ar(a)});if(a.ui=o,await n.bindExtensions({mode:"rpc",uiContext:o.uiContext,onError:b=>{E(a,{type:"error",message:`扩展 ${b.extensionPath.split(/[\\/]/).pop()} 在 ${b.event} 出错:${b.error}`,ts:Date.now()})},abortHandler:()=>void n.abort().catch(()=>void 0)}),a.disposed)throw Error("session is disposed");return $(a,n),a.resourceVersion=(0,j.Ec)(a.cwd),W(a,n),aa(a,n),ag(a),K(a),n}catch(e){a.ui?.dispose(),a.ui=null;let c=d.getExtensions().runtime;throw b?_(b).finally(()=>c.invalidate()):c.invalidate(),a.session=null,e}})().catch(b=>{throw a.disposed||E(a,{type:"error",message:String(b?.message??b),ts:Date.now()}),b}).finally(()=>{a.creating=null}),a.creating)}function Y(a){return a.promptSubmitting||a.resourceReloading||a.runActive||!!(a.session&&!a.session.isIdle)}function Z(a,b){let c=a.customActiveTools;return ab(b).filter(b=>c?c.includes(b):(0,j.YQ)(a.toolPreset,b))}let aH=new WeakMap;function $(a,b){let c=function(a,b){let c=Z(a,b);if(a.customActiveTools)return c;let d=new Set(b.getAllTools().filter(a=>("direct"===a.exposure||"model-only"===a.exposure)&&b.getToolDefinition(a.name)?.defaultActive!==!1).map(a=>a.name));return c.filter(b=>d.has(b)||a.requestedTools.has(b))}(a,b);(aH.get(b)??b.setActiveToolsByName.bind(b))(c)}let aI=new WeakMap;function _(a){let b,c=aI.get(a);if(c)return c;try{a.agent.abort()}catch{}let d=Promise.resolve();try{let b=a.extensionRunner;b.hasHandlers("session_shutdown")&&(d=b.emit({type:"session_shutdown",reason:"quit"}))}catch{}let e=new Promise(a=>{b=setTimeout(a,5e3),b.unref?.()}),f=Promise.race([d.then(()=>void 0,()=>void 0),e]).finally(()=>{clearTimeout(b);try{a.dispose()}catch{}});return aI.set(a,f),f}function aa(a,b){E(a,{type:"tools",active:ac(b),all:ab(b),toolPreset:a.toolPreset,customActiveTools:a.customActiveTools??null,ts:Date.now()}),U(a)}function ab(a){let b=a.getAllTools?.();return b?b.map(a=>a.name):[]}function ac(a){return a.getActiveToolNames?.()??[]}function ad(a){if(!a.disposed){for(let b of(a.disposed=!0,a.ui?.dispose(),a.ui=null,a.growth?.dispose(),a.growth=null,a.session&&_(a.session),a.creating&&a.creating.then(a=>a?_(a):void 0).catch(()=>void 0),a.subscribers))try{b(a.seq,JSON.stringify({type:"status",isStreaming:!1,state:"disposed",ts:Date.now()}))}catch{}a.subscribers.clear(),az.delete(a.sessionPath)}}async function ae(a){let b=az.get(a);if(!b)return;let c=b.session??(b.creating?await b.creating.catch(()=>null):null);c?.isStreaming&&await c.abort().catch(()=>void 0),ad(b)}{let a=globalThis;a.__piWebReaper&&clearInterval(a.__piWebReaper),a.__piWebReaper=setInterval(function(){let a=Date.now();for(let b of[...az.values()])!ar(b)&&!(a-b.lastActive<=6e5)&&(b.creating||Y(b)||ad(b));let b=[...az.values()].filter(a=>a.session);if(b.length>6)for(let a of b.filter(a=>!a.creating&&!Y(a)&&!ar(a)).sort((a,b)=>a.lastActive-b.lastActive).slice(0,b.length-6))ad(a)},6e4),a.__piWebReaper.unref?.()}function af(a){let b=a.session?.resourceLoader??(0,j.v9)(a.cwd)??(0,j.ye)(a.cwd),c=[],d=[];try{let a=b.getSkills();for(let b of(d=a.skills.map(a=>({name:String(a.name??""),description:String(a.description??"")})),a.diagnostics??[]))c.push({kind:"skill",path:b.path,message:b.message})}catch{d=[]}let e=[];try{let a=b.getPrompts();for(let b of(e=a.prompts.map(a=>({name:String(a.name??""),description:String(a.description??""),argumentHint:a.argumentHint})),a.diagnostics??[]))c.push({kind:"prompt",path:b.path,message:b.message})}catch{e=[]}try{for(let a of b.getExtensions().errors??[])c.push({kind:"extension",path:a.path,message:a.error})}catch{}let f=[];if(a.session)try{let b=a.session.extensionRunner;if(b)for(let a of(f=b.getRegisteredCommands().map(a=>({name:a.invocationName,description:String(a.description??""),source:String(a.sourceInfo?.path??"").split(/[\\/]/).pop()??""})),b.getCommandDiagnostics()??[]))c.push({kind:"command",path:a.path,message:a.message})}catch{f=[]}return{skills:d,promptTemplates:e,extensionCommands:f,projectTrust:(0,j.af)(a.cwd),resourceDiagnostics:c}}function ag(a){E(a,{type:"resources",...af(a),ts:Date.now()}),U(a)}async function ah(a){if(a.disposed||!a.session||a.creating||Y(a))return!1;a.resourceReloadPending=!1;try{await a.session.reload();try{$(a,a.session)}catch{}return ai(a.session),!0}catch(b){return E(a,{type:"error",message:`重载扩展失败:${String(b?.message??b)}`,ts:Date.now()}),!1}finally{a.resourceReloadPending&&!Y(a)&&queueMicrotask(()=>void ah(a))}}function ai(a){let b=a.model,c=b&&a.modelRuntime.getModel(b.provider,b.id);c&&c!==b&&(a.agent.state.model=c)}function aj(a,b){let c=0;for(let d of az.values()){let e=d.session?.model;d.session&&e?.provider===a&&e.id===b&&(ai(d.session),aD.delete(d),K(d,!0),c+=1)}return c}async function ak(a){let b=a=>"win32"===process.platform?a.replace(/\\/g,"/").toLowerCase():a.replace(/\\/g,"/"),c=0;for(let d of az.values())if(!a||b(d.cwd)===b(a)){if(!d.session){ar(d)&&ag(d);continue}if(d.creating||Y(d)){d.resourceReloadPending=!0,E(d,{type:"error",message:"资源已更新,将在本轮结束后生效",ts:Date.now()}),ag(d);continue}await ah(d)&&(c+=1)}return c}async function al(a){let b,c,d,e;O(a),await (0,j.Df)(a.cwd);try{a.creating||(a.session&&Y(a)?((0,j.Dc)(a.cwd)||a.resourceVersion!==(0,j.Ec)(a.cwd))&&(a.resourceReloadPending=!0):(await (0,j.jz)(a.cwd),a.session&&(a.resourceReloadPending||a.resourceVersion!==(0,j.Ec)(a.cwd))&&(a.resourceReloadPending=!0,await ah(a))))}catch{}let f=a.session,g=[],h=!1,i=["off","minimal","low","medium","high","xhigh","max"];if(f){let e=function(a,b){if(!a.inflightId||void 0===a.inflightIndex)return!1;let c=b.messages[a.inflightIndex];return!!c&&"assistant"===c.role&&(a.messageIds.set(c,a.inflightId),!0)}(a,f);if(g=f.messages.map(b=>y(a,b)),!e&&a.inflight){let b=y(a,a.inflight);"assistant"===b.role&&g.push({...b,stopReason:"pending"})}b=a.seq;let j=f.model;j&&(c={provider:String(j.provider??""),id:String(j.id??""),name:String(j.name??j.id??"")}),d=String(f.thinkingLevel??"");try{i=f.getAvailableThinkingLevels()}catch{}h=Y(a)}else{try{g=a.sm.buildContextEntries().filter(a=>"message"===a.type&&a.message).map(a=>x(a.message,a.id))}catch{g=[]}try{let b=a.sm,e=b.buildSessionContext?.();if(e?.model&&(c={provider:e.model.provider,id:e.model.modelId,name:e.model.modelId}),d=e?.thinkingLevel,e?.model){let a=(await (0,j.uU)()).getModel(e.model.provider,e.model.modelId);a&&(i=(0,u.getSupportedThinkingLevels)(a),d&&(d=(0,u.clampThinkingLevel)(a,d)))}}catch{}}let k=f?I(a):function(a){let b=0,c=0,d=0,e=0,f={input:0,output:0,cacheRead:0,cacheWrite:0,total:0},g=0,h=a=>{a&&"object"==typeof a&&(f.input+=Number(a.input??0),f.output+=Number(a.output??0),f.cacheRead+=Number(a.cacheRead??0),f.cacheWrite+=Number(a.cacheWrite??0),g+=Number(a.cost?.total??0))};for(let f of a.sm.getEntries()){if(("usage"===f.type||"branch_summary"===f.type||"compaction"===f.type)&&f.usage&&h(f.usage),"message"!==f.type||!f.message)continue;e+=1;let a=f.message;"user"===a.role?b+=1:"assistant"===a.role?(c+=1,d+=Array.isArray(a.content)?a.content.filter(a=>a?.type==="toolCall").length:0,h(a.usage)):"toolResult"===a.role&&h(a.usage)}return f.total=f.input+f.output+f.cacheRead+f.cacheWrite,{userMessages:b,assistantMessages:c,toolCalls:d,totalMessages:e,tokens:f,cost:g,...H(a)}}(a),l=null;if(f){let a=f.getContextUsage()??null;l=a?{tokens:a.tokens,contextWindow:a.contextWindow,percent:a.percent}:null}else if(c)try{let b=(await (0,j.uU)()).getModels(c.provider).find(a=>String(a.id)===c.id);l=(0,n.$)(a.sm.buildSessionProjection(),a.sm.getBranch(),Number(b?.contextWindow??0))}catch{}let p=f?{active:ac(f),all:ab(f).map(a=>({name:a}))}:{active:[],all:[]},q=f?{steering:[...f.getSteeringMessages()],followUp:[...f.getFollowUpMessages()]}:{steering:[],followUp:[]},r="";try{r=a.sm.getSessionName?.()??""}catch{r=""}let s=[],t=!1;try{s=S(a.cwd,a.session?.resourceLoader),t=!0}catch{s=[]}try{e=await T(a,s)}catch{e=void 0}let v=af(a),w=a.ledger.entries.length?a.ledger.entries:function(a){try{return(0,o.WZ)(a.sm.getEntries())}catch{return[]}}(a),z=[...V(a,f,t?s:void 0),...w];return{seq:b??a.seq,sessionPath:a.sessionPath,cwd:a.cwd,name:r,contextFiles:s.map(a=>a.path),contextResources:s,contextBreakdown:e,...v,messages:g,userTurns:(0,m.g)(a.sm.getEntries()),growthError:a.growth?.getError?.()??null,growthConsent:a.growth?.getConsentRequest?.()??null,model:c,thinkingLevel:d,thinkingLevels:i,toolPreset:a.toolPreset,customActiveTools:a.customActiveTools??null,extensionUiRequests:a.ui?.getPendingRequests()??[],extensionStatuses:Object.fromEntries(a.ui?.statuses??[]),tools:p,stats:k,contextUsage:l,queue:q,trajectory:z,isStreaming:h}}function am(a,b){return`${a.epoch}.${b}`}function an(a,b){let c=/^([A-Za-z0-9]+)\.(\d+)$/.exec(b?.trim()??"");if(!c||c[1]!==a.epoch)return;let d=Number(c[2]);return Number.isSafeInteger(d)?d:void 0}function ao(a,b,c){if(O(a),c<0||c>a.seq)return!1;let d=a.buffer.filter(a=>a.seq>c);if(d.length!==a.seq-c)return!1;let e=new Set(a.ui?.getPendingRequests().map(a=>a.id));if(d.some(a=>{let b=JSON.parse(a.json);return"extension_ui"===b.type&&["select","confirm","input"].includes(b.method)&&!e.has(b.id)}))return!1;for(let c of(a.subscribers.add(b),d))b(c.seq,c.json);return!0}function ap(a,b){a.subscribers.delete(b)}function aq(a,b){a.viewerGraceUntil=Math.max(a.viewerGraceUntil??0,Date.now()+b)}function ar(a){return a.viewerAvailable?a.viewerAvailable():a.subscribers.size>0||(a.viewerGraceUntil??0)>Date.now()}async function as(a){await Promise.race([L(a).prepare().catch(()=>void 0),new Promise(a=>setTimeout(a,5e3))])}function at(a,b,c,d={}){return new Promise(e=>{let f=!1;b.prompt(c,{...d,source:"rpc",preflightResult:a=>{a&&(f=!0,e({ok:!0,data:{accepted:!0}}))}}).then(()=>{f||e({ok:!1,error:"prompt completed without acceptance"})},b=>{let c=String(b?.message??b);f?E(a,{type:"error",message:c,ts:Date.now()}):e({ok:!1,error:c})})})}async function au(a,b){O(a);try{switch(b.cmd){case"prepare":return await X(a),{ok:!0};case"prompt":{let c=(b.text??"").trim();if(!c&&!b.images?.length)return{ok:!1,error:"empty prompt"};if(a.promptSubmitting||a.resourceReloading)return{ok:!1,error:"session is busy accepting another command"};a.promptSubmitting=!0;try{let d=await X(a);if(a.disposed)throw Error("session is disposed");if((d.isStreaming||a.runActive)&&!b.behavior)return{ok:!1,error:"session is busy; choose steer or followUp"};if(d.isStreaming||await as(a),a.disposed)throw Error("session is disposed");return await at(a,d,c,{images:b.images,streamingBehavior:b.behavior})}finally{a.promptSubmitting=!1,a.disposed||E(a,{type:"status",isStreaming:Y(a),state:Y(a)?"running":"idle",ts:Date.now()}),a.resourceReloadPending&&queueMicrotask(()=>void ah(a))}}case"steer":case"followUp":{if(a.promptSubmitting||a.resourceReloading)return{ok:!1,error:"session is busy accepting another command"};let c=await X(a);if(a.promptSubmitting||a.resourceReloading||!c.isStreaming)return{ok:!1,error:"session is not accepting queued messages"};return await c[b.cmd](b.text??"",b.images),{ok:!0}}case"clearQueue":{if(!a.session)return{ok:!0,data:{steering:[],followUp:[]}};let b=a.session.clearQueue();return E(a,{type:"queue",steering:[],followUp:[],ts:Date.now()}),{ok:!0,data:b}}case"abort":{if(!a.session)return{ok:!0,data:{steering:[],followUp:[]}};let b=a.session.clearQueue();return await a.session.abort(),E(a,{type:"status",isStreaming:!1,state:"aborted",ts:Date.now()}),{ok:!0,data:b}}case"compact":{let c=await X(a);return await c.compact(b.instructions||void 0),{ok:!0}}case"setModel":{let c=await X(a),d=(await (0,j.uU)()).getModels(b.provider).find(a=>a.id===b.modelId);if(!d)return{ok:!1,error:`unknown model ${b.provider}/${b.modelId}`};return await c.setModel(d,{persist:!1}),G(a,c),!0!==b.fresh||a.desiredThinkingLevel||function(a,b){let c=b.model;if(!c)return;let d=(0,j.vT)(a.cwd),e=(0,s.dD)({supported:b.getAvailableThinkingLevels(),modelOverride:d.getModelThinkingLevel(c.provider,c.id),defaultLevel:d.getDefaultThinkingLevel()});e!==b.thinkingLevel&&b.setThinkingLevel(e)}(a,c),aD.delete(a),F(a,c),K(a,!0),{ok:!0,data:{thinkingLevel:c.thinkingLevel,thinkingLevels:c.getAvailableThinkingLevels()}}}case"setThinkingLevel":{let c=await X(a),d=String(b.level??"medium"),e=(0,u.clampThinkingLevel)(c.model,d);return a.desiredThinkingLevel=d,c.setThinkingLevel(e,{persist:!0}),F(a,c),{ok:!0,data:{requested:d,thinkingLevel:c.thinkingLevel,clamped:c.thinkingLevel!==d}}}case"setToolPreset":{let c=b.preset;if(!Object.hasOwn(j.Ax,c))return{ok:!1,error:"invalid tool preset"};if(!a.session&&!a.creating)return a.toolPreset=c,a.customActiveTools=void 0,E(a,{type:"tools",active:[],all:[],toolPreset:c,customActiveTools:null,ts:Date.now()}),{ok:!0};let d=await X(a);if(a.disposed)return{ok:!1,error:"session is disposed"};return a.toolPreset=c,a.customActiveTools=void 0,$(a,d),W(a,d),aa(a,d),{ok:!0}}case"setActiveTools":{let c=await X(a);if(a.disposed)return{ok:!1,error:"session is disposed"};let d=Array.isArray(b.names)?b.names.map(String):[],e=ab(c),f=[...new Set(d)].filter(a=>e.includes(a));if(0===f.length)return{ok:!1,error:"cannot disable all tools"};return a.customActiveTools=f,$(a,c),W(a,c),aa(a,c),{ok:!0,data:{active:ac(c)}}}case"cycleModel":{let c=await X(a),d=await c.cycleModel(b.direction??"forward");if(d?.model)return G(a,c),F(a,c),{ok:!0,data:{model:String(d.model.id??""),thinkingLevel:c.thinkingLevel}};return{ok:!1,error:"no scoped models to cycle"}}case"navigate":{let c=await X(a),d=String(b.entryId??"");if(!d)return{ok:!1,error:"missing entryId"};let e=await c.navigateTree(d);return{ok:!e?.cancelled,data:{cancelled:e?.cancelled===!0,editorText:e?.editorText}}}case"editAndResend":{let c=String(b.entryId??""),d=(b.text??"").trim();if(!c)return{ok:!1,error:"missing entryId"};if(!d)return{ok:!1,error:"empty prompt"};if(a.promptSubmitting||a.resourceReloading)return{ok:!1,error:"session is busy accepting another command"};a.promptSubmitting=!0;try{let b=await X(a);if(a.disposed)throw Error("session is disposed");if(b.isStreaming||a.runActive){await b.abort().catch(()=>void 0);for(let c=0;c<50&&!a.disposed&&(b.isStreaming||a.runActive);c+=1)await new Promise(a=>setTimeout(a,100))}if(a.disposed)throw Error("session is disposed");let e=await b.navigateTree(c);if(e?.cancelled)return{ok:!1,error:"edit cancelled"};if(await as(a),a.disposed)throw Error("session is disposed");return await at(a,b,d)}finally{a.promptSubmitting=!1,a.disposed||E(a,{type:"status",isStreaming:Y(a),state:Y(a)?"running":"idle",ts:Date.now()}),a.resourceReloadPending&&queueMicrotask(()=>void ah(a))}}case"rename":{let c=(b.text??"").trim();return a.session?a.session.setSessionName(c):a.sm.appendSessionInfo(c),E(a,{type:"name",name:c,ts:Date.now()}),{ok:!0}}case"extensionUiResponse":return a.ui?.respond(String(b.requestId),{value:b.value,confirmed:b.confirmed,cancelled:b.cancelled})?{ok:!0}:{ok:!1,error:"no pending extension request"};case"reload":{if(Y(a))return{ok:!1,error:"session is busy"};for(let b of(await (0,j.x9)(),az.values()))b!==a&&b.session&&(Y(b)?b.resourceReloadPending=!0:ai(b.session));let b=await X(a);await b.reload();try{$(a,b)}catch{}return ai(b),{ok:!0}}case"fork":{let c=(b.entryId?j.Cv.open(a.sessionPath).createBranchedSession(b.entryId):j.Cv.forkFrom(a.sessionPath,a.cwd).getSessionFile())??"";if(!c)return{ok:!1,error:"failed to create forked session"};return{ok:!0,data:{sessionPath:c}}}default:return{ok:!1,error:"unknown cmd"}}}catch(a){return{ok:!1,error:String(a?.message??a)}}}async function av(a){let b=j.Cv.create(a),c=b.getSessionFile()??"";if(!c)throw Error("failed to create session file");return R(c,a,b),{sessionPath:c}}function aw(){let a={};for(let[b,c]of az){let d;if(c.session){for(let a=c.ledger.entries.length-1;a>=0;a-=1){let b=c.ledger.entries[a];if("tool"===b.kind){d=[b.toolName,(0,o.Zt)(b)].filter(Boolean).join(" \xb7 ");break}}a[b]={streaming:Y(c),lastStep:d}}}return a}async function ax(a,b){let d=a.sessionPath.replace(/\\/g,"/").split("/").pop()??"session";if("jsonl"===b){let{readFile:b}=await Promise.resolve().then(c.t.bind(c,51455,23));return{filename:d,content:await b(a.sessionPath,"utf8"),contentType:"application/jsonl"}}let e=await X(a),f=await e.exportToHtml(),{readFile:g,rm:h}=await Promise.resolve().then(c.t.bind(c,51455,23)),i=await g(f,"utf8");return await h(f,{force:!0}).catch(()=>void 0),{filename:d.replace(/\.jsonl$/,".html"),content:i,contentType:"text/html"}}(0,p.j8)({isActive:function(a){let b="win32"===process.platform?a.toLowerCase():a;for(let a of az.keys())if(("win32"===process.platform?a.toLowerCase():a)===b)return!0;return!1},log:a=>console.log(a)}),d()}catch(a){d(a)}})},31374:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{j8:()=>l});var e=c(51455),f=c.n(e),g=c(76760),h=c.n(g),i=c(6896),j=a([i]);async function k({now:a=Date.now(),retentionDays:b=30,isActive:d=()=>!1,log:e=console.log,dryRun:g=!1}={}){let j={scanned:0,deleted:[],missing:[],skippedActive:[],kept:0};if(!Number.isFinite(b)||b<=0)return j;let l=a-24*b*36e5,{archivedSessions:m}=await (0,i.vQ)();for(let k of m){let m;j.scanned+=1;let n=h().resolve(k);if(d(n)){j.skippedActive.push(n),j.kept+=1;continue}try{let a=await f().stat(n);if(!a.isFile())throw Object.assign(Error("not a file"),{code:"ENOENT"});m=a.mtimeMs}catch(a){if("ENOENT"!==a.code)throw a;j.missing.push(n),g||await (0,i.Iz)(n);continue}if(m>l){j.kept+=1;continue}let o=Math.floor((a-m)/864e5);if(j.deleted.push({path:n,idleDays:o}),g)continue;let{deleteSession:p}=await c.e(229).then(c.bind(c,66229));await p(n),await (0,i.Iz)(n),e(`[piweb] 归档会话已超过 ${b} 天没有活动(${o} 天),已删除:${n}`)}return j}i=(j.then?(await j)():j)[0];let m=!1;function l({intervalMs:a=216e5,delayMs:b=5e3,log:c=console.log,isActive:d}={}){if(m)return;m=!0;let e=async()=>{Date.now();try{let a=await k({log:c,isActive:d});(a.deleted.length||a.missing.length)&&c(`[piweb] 归档清理:删除 ${a.deleted.length} 个,清理失效记录 ${a.missing.length} 个,保留 ${a.kept} 个`)}catch(a){c(`[piweb] 归档清理失败:${a instanceof Error?a.message:a}`)}},f=setTimeout(()=>{e();let b=setInterval(()=>void e(),a);b.unref?.()},b);f.unref?.()}d()}catch(a){d(a)}})},34007:(a,b,c)=>{function d(a){let b=[];for(let[c,d]of a.entries()){if("message"!==d.type||d.message?.role!=="user")continue;let a="number"==typeof d.timestamp?d.timestamp:Date.parse(d.timestamp??""),e=Number.isFinite(a)?a:d.message.timestamp;b.push({id:d.id??`entry:${c}`,ts:"number"==typeof e&&Number.isFinite(e)?e:0/0})}return b}function e(a,b=0){let c=[],d="";for(let e of a.slice(Math.max(0,b)))if("message"===e.type&&e.message?.role==="user"&&e.id){var f;c.push(e.id),d||(d=("string"==typeof(f=e.message.content)?f:!Array.isArray(f)?"":f.map(a=>a&&"object"==typeof a&&"text"===a.type?String(a.text??""):"").join("")).split("\n").map(a=>a.trim()).find(Boolean)??"")}return{ids:c,title:d}}c.d(b,{S:()=>e,g:()=>d})},35851:(a,b,c)=>{c.d(b,{I:()=>f,k:()=>g});var d=c(83188),e=c(34007);let f=5;function g(a){let{cwd:b,sessionPath:c,publish:g,entries:h,consent:i}=a,j=!1,k=null,l=!1,m=0,n=!1,o=null,p=Promise.resolve(),q=null,r=0,s=!1,t=null,u=a=>{let c=a instanceof Error?a.message:String(a),e=a instanceof d.qy&&("unavailable"===a.code||"too-large"===a.code);e&&(j=!0,k=a,q=null),n=!0,o=c;let f=Date.now();(e||!(f-m<6e4))&&(m=f,console.warn(`[piweb] growth commit failed for ${b}: ${c}`),g({type:"growth_error",message:c,ts:f}))},v=a=>p=p.then(a,a).catch(u),w=a=>(n&&(n=!1,o=null,g({type:"growth_error",message:null,ts:Date.now()})),a&&!l&&g({type:"growth",round:a,ts:Date.now()}),a),x=()=>{j=!0,k=new d.qy("growth tracking was declined for this workspace","unavailable"),q=null},y=async(a,c)=>{let e=s?await i():null;if(!1===e)return void x();if(!s||null!==e)try{return await a({allowInit:!0===e,abortIf:c})}catch(f){if(!(f instanceof d.qy)||"needs-consent"!==f.code)throw f;s=!0;let e=await i();if(!1===e)return void x();if(!0===e)return a({allowInit:!0,abortIf:c});t||l||g({type:"growth_consent",request:t={cwd:b,reason:f.target?.reason??"not-git",parent:f.target?.parent},ts:Date.now()});return}},z=a=>y(a=>(0,d.uP)(b,c,a),a);return{version:f,getError:()=>o,getConsentRequest:()=>t,prepare(){if(j||l)return p;let a=r;return v(async()=>{if(j||l)return;let b=await z(()=>r!==a);void 0!==b&&w(b)})},onEvent(a){if(!l&&!j)switch(a.type){case"agent_start":null===q&&(q=h().length,r+=1);break;case"agent_settled":{if(null===q)break;let a=h().slice(q),{ids:f,title:g}=(0,e.S)(a);q=null,v(async()=>{if(j||l)return;let e=await y(e=>(0,d.qo)(b,{kind:"round",session:c,title:g,promptIds:f,status:function(a){for(let b=a.length-1;b>=0;b-=1){let c="message"===a[b].type?a[b].message:void 0;if(c?.role==="assistant"){if("aborted"===c.stopReason)return"aborted";if("error"===c.stopReason)return"error";break}}return"done"}(a)},e));void 0!==e&&w(e)})}}},async recordNow(){let a;if(j)throw k??new d.qy("growth tracking is disabled for this workspace","unavailable");let b=null;if(await v(async()=>{try{if(j)throw k??new d.qy("growth tracking is disabled for this workspace","unavailable");let a=await z();if(void 0===a)throw j?k??new d.qy("growth tracking is disabled for this workspace","unavailable"):new d.qy("growth tracking is waiting for permission to create a git repository","needs-consent");b=w(a)}catch(b){a=b,b instanceof d.qy&&"needs-consent"===b.code||u(b)}}),a)throw a;return b},async consentAnswered(a){let b=t;if(t=null,b&&!l&&g({type:"growth_consent",request:null,ts:Date.now()}),!a)return x(),null;if(j||l)return null;let c=null;return await v(async()=>{let a=await z();c=void 0===a?null:w(a)}),c},dispose(){l=!0}}}},49904:(a,b,c)=>{c.d(b,{Ax:()=>k,Jt:()=>m,_i:()=>l});var d=c(51455),e=c.n(d),f=c(76760),g=c.n(f),h=c(80974),i=c.n(h);let j=new Map;function k(a,b){let c=g().resolve(a),d="win32"===process.platform?c.toLowerCase():c,e=(j.get(d)??Promise.resolve()).then(b,b),f=e.then(()=>void 0,()=>void 0);return j.set(d,f),f.then(()=>{j.get(d)===f&&j.delete(d)}),e}async function l(a,b){await e().mkdir(g().dirname(a),{recursive:!0});let c=await i().lock(a,{realpath:!1,retries:{retries:20,minTimeout:20,maxTimeout:100}});try{return await b()}finally{await c()}}async function m(a){await a.flush();let b=a.drainErrors();if(b.length)throw Error(`Pi settings failed: ${b.map(({scope:a,error:b})=>`${a}: ${b.message}`).join("; ")}`,{cause:b[0].error})}},53634:(a,b,c)=>{c.d(b,{dD:()=>e});let d=["off","minimal","low","medium","high","xhigh","max"];function e(a){return function(a,b){if(a.includes(b))return b;let c=d.indexOf(b);if(-1===c)return a[0]??"off";for(let b=c;b<d.length;b+=1)if(a.includes(d[b]))return d[b];for(let b=c-1;b>=0;b-=1)if(a.includes(d[b]))return d[b];return a[0]??"off"}(a.supported,a.requested||a.modelOverride||a.defaultLevel||"medium")}},92584:(a,b,c)=>{c.d(b,{V:()=>e});var d=c(76760);let e=(c.n(d))().resolve(process.env.PI_WEB_ROOT??process.cwd())}};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";exports.id=802,exports.ids=[802],exports.modules={1175:(a,b,c)=>{c.d(b,{Fu:()=>h}),c(77598),c(73024);var d=c(48161),e=c.n(d),f=c(76760),g=c.n(f);function h(){let a=process.env.PI_CODING_AGENT_DIR;if(a)return"~"===a?e().homedir():a.startsWith("~/")||a.startsWith("~\\")?g().join(e().homedir(),a.slice(2)):a;return g().join(e().homedir(),".pi","agent")}},95802:(a,b,c)=>{c.r(b),c.d(b,{TOKEN_BYTES:()=>k,TOKEN_QUERY:()=>j,launchTokenFile:()=>m,publishLaunchToken:()=>n,validLaunchToken:()=>l});var d=c(77598),e=c(73024),f=c.n(e),g=c(76760),h=c.n(g),i=c(1175);let j="token",k=32;function l(a,b){if(!a||!b)return!1;let c=Buffer.from(a,"utf8"),e=Buffer.from(b,"utf8");return c.byteLength===e.byteLength&&(0,d.timingSafeEqual)(c,e)}function m(a){return h().join((0,i.Fu)(),"web-launch",`${a}.token`)}function n(a=process.env){let b=a.PI_WEB_LAUNCH_TOKEN,c=a.PIWEB_PORT;if(!b||!c)return;let d=m(c);try{f().mkdirSync(h().dirname(d),{recursive:!0}),f().writeFileSync(d,`${b}
|
|
2
|
-
`,{mode:384})}catch{return}process.once("exit",()=>{try{f().readFileSync(d,"utf8").trim()===b&&f().unlinkSync(d)}catch{}})}}};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";exports.id=807,exports.ids=[807],exports.modules={24807:(a,b,c)=>{c.d(b,{registerNode:()=>d});async function d(){if("phase-production-build"===process.env.NEXT_PHASE)return;let{authEnabled:a}=await c.e(393).then(c.bind(c,75393));a()&&(await c.e(802).then(c.bind(c,95802))).publishLaunchToken(),(await c.e(662).then(c.bind(c,47662))).ensureStartupCheck().catch(()=>{});let{remoteBlocked:b,remoteLanEnabled:d,startLan:e}=await c.e(924).then(c.bind(c,3924));if(!d())return;let f=b();if("auth"===f)return void console.warn("[远程连接] 已跳过局域网入口:认证没开。请设 PI_WEB_AUTH=1。");if("dev"===f)return void console.warn("[远程连接] 已跳过局域网入口:开发模式只服务本机(认证保护不了 Next 开发工具端点)。");let g=await e();g.running?console.log(`[远程连接] 局域网入口已就绪:${g.urls.join(" ")}`):console.warn(`[远程连接] 局域网入口启动失败:${g.error}`)}}};
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
"use strict";exports.id=924,exports.ids=[393,924],exports.modules={1175:(a,b,c)=>{c.d(b,{Fu:()=>h}),c(77598),c(73024);var d=c(48161),e=c.n(d),f=c(76760),g=c.n(f);function h(){let a=process.env.PI_CODING_AGENT_DIR;if(a)return"~"===a?e().homedir():a.startsWith("~/")||a.startsWith("~\\")?g().join(e().homedir(),a.slice(2)):a;return g().join(e().homedir(),".pi","agent")}},3924:(a,b,c)=>{c.d(b,{remoteBlocked:()=>u,remoteLanEnabled:()=>x,startLan:()=>B}),c(31421);var d=c(73024),e=c.n(d);c(44708);var f=c(48161),g=c.n(f),h=c(76760),i=c.n(h),j=c(75393),k=c(1175),l=c(37067),m=c.n(l),n=c(57075),o=c(38522),p=c.n(o);c(77030);let q=JSON.parse('{"A":"/*\\n * 手机端适配。不改 PiWeb,只在经代理的远程页面上生效\\n * (本机直连 127.0.0.1:30141 的桌面页面完全不加载它)。\\n *\\n * 取值参照 dsh-remote 为 DSH 定的那套移动适配(同作者),并针对 PiWeb 的实测问题:\\n * 390px 下输入框 304px、markdown 表格 442px 超出视口、底部统计行被截断。\\n */\\n@media (max-width: 840px) {\\n\\t/* 1) 输入框自适应高度失控。\\n\\t 实测:视口 390 → 304px,500 → 43px,700+ → 22px;而自然内容高始终 22px。\\n\\t 原因在 ChatInput 的 autoSize():它把\\"被 flex 拉伸后\\"的 scrollHeight 写进了\\n\\t inline height,写回后又把自己撑住,形成自锁。inline 样式不是 important,\\n\\t 所以这里用 max-height !important 把它夹住。 */\\n\\ttextarea {\\n\\t\\tmax-height: 132px !important;\\n\\t\\toverflow-y: auto !important;\\n\\t}\\n\\n\\t/* 2) Markdown 宽表格超出视口被裁掉(实测 442 > 390,body 又是 overflow-x:hidden,\\n\\t 等于右侧内容既看不到也滑不到)。让表格自己横向滚动。 */\\n\\t.md table {\\n\\t\\tdisplay: block !important;\\n\\t\\tmax-width: 100% !important;\\n\\t\\toverflow-x: auto !important;\\n\\t\\t-webkit-overflow-scrolling: touch;\\n\\t}\\n\\n\\t/* 3) 全局溢出护栏(dsh-remote 同款):任何一块都不许把文档撑宽 */\\n\\thtml,\\n\\tbody {\\n\\t\\tmax-width: 100vw !important;\\n\\t\\toverflow-x: hidden !important;\\n\\t}\\n\\tpre {\\n\\t\\tmax-width: 100% !important;\\n\\t\\toverflow-x: auto !important;\\n\\t\\t-webkit-overflow-scrolling: touch;\\n\\t}\\n\\timg,\\n\\tsvg,\\n\\tvideo,\\n\\tcanvas {\\n\\t\\tmax-width: 100% !important;\\n\\t}\\n\\n\\t/* 4) 底部统计行原本 nowrap + ellipsis,手机上「| 输入 2…」之后永远看不到。\\n\\t 改成可横向滑动,滚动条隐藏,信息不再丢。 */\\n\\tdiv.text-center > div.overflow-hidden.text-ellipsis.whitespace-nowrap {\\n\\t\\toverflow-x: auto !important;\\n\\t\\toverflow-y: hidden !important;\\n\\t\\ttext-overflow: clip !important;\\n\\t\\t-webkit-overflow-scrolling: touch;\\n\\t\\tscrollbar-width: none;\\n\\t}\\n\\tdiv.text-center > div.overflow-hidden.text-ellipsis.whitespace-nowrap::-webkit-scrollbar {\\n\\t\\tdisplay: none;\\n\\t}\\n\\n\\t/* 5) 给手机的手势条留位置(没有 insets 的设备 env() 为 0,等于没写) */\\n\\t.pi-main {\\n\\t\\tpadding-bottom: env(safe-area-inset-bottom) !important;\\n\\t}\\n\\n\\t/* 6) 左上角的抽屉按钮。原来是个悬浮的圆角方块(12px/12px、34px),盖在内容上、\\n\\t 和右边那排图标也不在一条水平线上。按 dsh-remote 对 DSH 左侧的做法收成贴角圆形,\\n\\t 尺寸和位置改成与右侧图标完全一致(实测右侧图标是 top 12 / 30\xd730,中心 y=27),\\n\\t 这样整行对齐,按钮底边 42 也在头部分隔线(y=43)之上,不会压住那条线。 */\\n\\t.pi-mobile-menu {\\n\\t\\twidth: 30px !important;\\n\\t\\theight: 30px !important;\\n\\t\\tborder-radius: 999px !important;\\n\\t\\tleft: calc(env(safe-area-inset-left) + 12px) !important;\\n\\t\\ttop: calc(env(safe-area-inset-top) + 12px) !important;\\n\\t}\\n\\t.pi-main > .hairline-b {\\n\\t\\tpadding-left: 52px !important;\\n\\t}\\n\\n\\t/* 7) 右侧大纲导轨是绝对定位的(right-2 + 约 34px 宽的竖条),正文和用户气泡\\n\\t 会从它下面穿过去。不动条宽——那是层级信息——而是把导轨贴边收窄,\\n\\t 再给滚动区留出它实际占的宽度。 */\\n\\t.outline-rail {\\n\\t\\tright: 2px !important;\\n\\t}\\n\\t.outline-rail > div {\\n\\t\\tpadding-left: 6px !important;\\n\\t\\tpadding-right: 2px !important;\\n\\t}\\n\\t.pi-main div.min-h-0.flex-1.overflow-y-auto {\\n\\t\\tpadding-right: 30px !important;\\n\\t}\\n\\n\\t/* 8) 设置弹窗:高度用 100vh(移动端的大视口),内容列又没有 min-height:0\\n\\t 也没有 overflow-y,于是 1986px 的内容被 overflow:hidden 裁在 828px 里,\\n\\t 手机上完全滑不动。实测 client=828 / scroll=1986。 */\\n\\t.settings-dialog {\\n\\t\\theight: calc(100vh - 16px) !important;\\n\\t}\\n\\t.settings-dialog > div:not(.settings-nav) {\\n\\t\\tmin-height: 0 !important;\\n\\t\\toverflow-y: auto !important;\\n\\t\\t-webkit-overflow-scrolling: touch;\\n\\t}\\n\\n\\t/* 9) 模型 / 思考等级浮层锚在胶囊自己的 relative 容器上,right-0 是**胶囊**右缘,\\n\\t 312px 往左展开就顶出屏幕左边(实测 left 为负)。把胶囊容器解除定位,\\n\\t 浮层改用整张输入卡(上一层 relative)做定位父级,right-0 落在卡片右缘就装得下。\\n\\t :has() 在移动端 Safari 15.4+ / Chrome 105+ 都可用。 */\\n\\tdiv.relative:has(> button.chip[aria-haspopup=\\"menu\\"]) {\\n\\t\\tposition: static !important;\\n\\t}\\n\\n\\t/* 10) 设置→模型 的提供方卡片:那一行是 nowrap,中间的名字列被右侧一串按钮挤成\\n\\t 0 宽(实测 w=0),于是「凭据: auth.json」竖着拆行、「编辑」拆成「编/辑」、\\n\\t 右侧的按钮还被裁掉。手机上让这行能换行,并给名字列一个真实的最小宽度。 */\\n\\t.settings-dialog div.flex.items-center.gap-3:has(> div.min-w-0.flex-1) {\\n\\t\\tflex-wrap: wrap !important;\\n\\t\\trow-gap: 8px !important;\\n\\t}\\n\\t.settings-dialog div.flex.items-center.gap-3:has(> div.min-w-0.flex-1) > div.min-w-0.flex-1 {\\n\\t\\tflex: 1 1 140px !important;\\n\\t\\tmin-width: 140px !important;\\n\\t}\\n\\n\\t/* 11) 设置里 Row 那一套([文字列][控件列] 两栏)。控件列是 flex-none,\\n\\t 有的行右侧很宽(「开关 + 两个数字输入框」≈272px、「繁忙时 Enter」的下拉≈233px),\\n\\t 于是 390px 下文字列只剩 70px 左右,中文按每行一两字竖排,行高被撑到\\n\\t 122px / 218px(实测 70\xd7122、69\xd7218)。\\n\\t 试过的几种写法与实测结论:\\n\\t - 只给文字列 flex 增长权重:完全没用(那行没有空闲空间)\\n\\t - 只缩小 gap:只能缓解(70\xd7122 → 86\xd798)\\n\\t - 让所有 Row 都上下排(flex:1 1 100%):能修好,但把本来正常的行也撑高\\n\\t (界面语言 53→85、字体步进 95→105),是密度回退\\n\\t - 正解:文字列 flex-basis 设 0、只留 min-width 当\\"不许被压到多窄\\"的下限。\\n\\t 换行判断用的是 flex-basis(max-content 会很大,所以上一版全换行了),\\n\\t 设成 0 之后判断就只看 min-width:\\n\\t 控件窄的行(界面语言 77px、字体步进 116px)→ 仍并排,保持紧凑\\n\\t 控件宽的行(272px / 233px)→ 控件换到下一行,文字拿满 326px\\n\\t 实测:界面语言 53 不变、界面字体 95→71、繁忙时Enter 239→135、\\n\\t 自动压缩 143→111、自动重试 119→111,全部不再竖排。 */\\n\\t.settings-dialog div.hairline-b.gap-6 {\\n\\t\\tflex-wrap: wrap !important;\\n\\t\\tgap: 8px !important;\\n\\t}\\n\\t.settings-dialog div.hairline-b.gap-6 > div.min-w-0 {\\n\\t\\tflex: 1 1 0 !important;\\n\\t\\tmin-width: 45% !important;\\n\\t}\\n\\t.settings-dialog div.hairline-b.gap-6 > div.flex-none > div.flex.items-center {\\n\\t\\tflex-wrap: wrap !important;\\n\\t\\tjustify-content: flex-end !important;\\n\\t\\trow-gap: 6px !important;\\n\\t}\\n\\n\\t/* 12) 外观主题卡片。卡片是 flex: 1 1 150px 的两列网格,但左右各留 32px 内边距,\\n\\t 159px 的卡片只剩 95px 给标题,于是「石灰与煤炭」「亚麻与苔绿」掉到第二行,\\n\\t 卡片高度变成 110px 而其余是 88px,网格参差(实测 6 张卡:4 张 88 / 2 张 110)。\\n\\t 把左右内边距收到 10px,6 张卡全部回到 88px,标题一行放得下。 */\\n\\t.settings-dialog button[aria-pressed] {\\n\\t\\tpadding-left: 10px !important;\\n\\t\\tpadding-right: 10px !important;\\n\\t}\\n\\n\\t/* 13) 可点目标偏小(实测:字体步进器 26\xd726、reset 48\xd724、开关 36\xd720)。\\n\\t 只扩**热区**,绝不改可见尺寸:开关的滑块位置在 PiWeb 里是写死的\\n\\t (left: 18px / 2px),把开关拉宽会让滑块错位、变成被拉长的怪药丸\\n\\t —— 我第一版写的 min-width:44px 就是这个后果,用户报了\\"启动按钮好丑\\"。\\n\\t 另外这里只做**纵向**扩张(左右不扩):字体步进器 −/+/ 之间只有 8px,\\n\\t 横向扩到 44px 会让两个按钮的热区重叠约 10px,点 − 反而命中 +。 */\\n\\t.settings-dialog .icon-btn,\\n\\t.settings-dialog button.h-6,\\n\\t.settings-dialog button.h-5,\\n\\t.settings-dialog [role=\\"switch\\"] {\\n\\t\\tposition: relative !important;\\n\\t}\\n\\t.settings-dialog .icon-btn::after,\\n\\t.settings-dialog button.h-6::after,\\n\\t.settings-dialog button.h-5::after,\\n\\t.settings-dialog [role=\\"switch\\"]::after {\\n\\t\\tcontent: \\"\\" !important;\\n\\t\\tposition: absolute !important;\\n\\t\\tleft: 0 !important;\\n\\t\\tright: 0 !important;\\n\\t\\ttop: 50% !important;\\n\\t\\theight: max(100%, 44px) !important;\\n\\t\\ttransform: translateY(-50%) !important;\\n\\t\\tborder-radius: 999px !important;\\n\\t}\\n}\\n\\n/* 手机上的浮层统一兜底:不许比屏幕宽,不许比屏幕高,超出就自己滚。 */\\n@media (max-width: 840px) {\\n\\t.popover {\\n\\t\\tmax-width: calc(100vw - 16px) !important;\\n\\t\\tmax-height: 420px !important;\\n\\t\\toverflow-y: auto !important;\\n\\t\\t-webkit-overflow-scrolling: touch;\\n\\t}\\n}\\n\\n/* 上下文弹窗(圆环)额外收紧:它右对齐在圆环上,而圆环离屏幕右缘还有 60-70px\\n (主输入框 ~71px、旁聊面板 ~63px)。上面「统一兜底」的 100vw-16px 在 360px 以下\\n 的机型仍会把左边顶出屏幕(实测 344px → left −15px、320px → left −39px)。\\n 这里按视口留出 96px:主输入框与旁聊面板实测 left ≥ 25px,且不越出旁聊面板左缘。 */\\n@media (max-width: 840px) {\\n\\t.popover.pw-context-popover {\\n\\t\\tmax-width: calc(100vw - 96px) !important;\\n\\t}\\n}\\n\\n/* 11) 模型名太长时跑马灯。取值与做法照搬 dsh-remote 对 DSH 的:\\n\\t 名字窗口固定 28vw 并允许被压缩,装得下就完全不动;装不下时由注入的\\n\\t mobile-fit.js 打上 data-piweb-marquee,再由这里的两份伪元素首尾相接匀速左移。\\n\\t 一份走完另一份正好接上(travel 已含间隔),所以循环处看不出接缝。 */\\n@media (max-width: 840px) {\\n\\tbutton.chip[aria-haspopup=\\"menu\\"] > span.truncate {\\n\\t\\tmin-width: 0 !important;\\n\\t\\tmax-width: 28vw !important;\\n\\t}\\n\\t[data-piweb-marquee] {\\n\\t\\tposition: relative !important;\\n\\t\\tdisplay: block !important;\\n\\t\\twidth: 28vw !important;\\n\\t\\tflex: none !important;\\n\\t\\ttext-overflow: clip !important;\\n\\t\\twhite-space: nowrap !important;\\n\\t\\toverflow: hidden !important;\\n\\t\\ttext-indent: 0 !important;\\n\\t\\tcontain: layout paint !important;\\n\\t\\tcolor: transparent !important;\\n\\t\\tline-height: 20px !important;\\n\\t}\\n\\t[data-piweb-marquee]::before,\\n\\t[data-piweb-marquee]::after {\\n\\t\\tcontent: attr(data-piweb-text);\\n\\t\\tposition: absolute;\\n\\t\\ttop: 0;\\n\\t\\tleft: 0;\\n\\t\\tcolor: var(--piweb-marquee-color, var(--dsw-label-primary));\\n\\t\\tfont-size: 13px;\\n\\t\\tline-height: 20px;\\n\\t\\twhite-space: nowrap;\\n\\t\\twill-change: transform;\\n\\t\\ttransform: translate3d(0, 0, 0);\\n\\t\\tanimation: piweb-mfit-marquee var(--piweb-marquee-duration, 8s) linear infinite both;\\n\\t}\\n\\t[data-piweb-marquee]::after {\\n\\t\\tleft: var(--piweb-marquee-text, 0px);\\n\\t}\\n\\t@keyframes piweb-mfit-marquee {\\n\\t\\tfrom { transform: translate3d(0, 0, 0); }\\n\\t\\tto { transform: translate3d(calc(-1 * var(--piweb-marquee-text, 0px)), 0, 0); }\\n\\t}\\n}\\n\\n/* dvh 是\\"实际可见高度\\",比 100vh(移动 Chrome 的大视口)可靠;\\n 不支持时上面那两条固定值兜底。 */\\n@supports (height: 100dvh) {\\n\\t@media (max-width: 840px) {\\n\\t\\ttextarea {\\n\\t\\t\\tmax-height: min(132px, 26dvh) !important;\\n\\t\\t}\\n\\t\\t.popover {\\n\\t\\t\\tmax-height: min(60dvh, 420px) !important;\\n\\t\\t}\\n\\t\\t.settings-dialog {\\n\\t\\t\\theight: calc(100dvh - 16px) !important;\\n\\t\\t}\\n\\t}\\n}\\n","js":"/*\\n * 手机端脚本(配合 mobile-fit.css)。\\n *\\n * 做两件事:\\n * 1) 模型名太长时改成「跑马灯」。做法照搬 dsh-remote 对 DSH 的处理——\\n * 名字窗口固定 28vw,装得下就完全不动;装不下时才把两份文本首尾相接匀速左移,\\n * 一份走完另一份正好接上,循环没有空档。CSS 负责动画,这里只负责\\"量\\"和\\"打标记\\"。\\n * 为什么必须用 JS 量:纯 CSS 判断不了\\"是否真的被截断\\",只能用省略号一裁了之,\\n * 名字的尾巴就永远看不到了。\\n * 2) 设置里「文字 + 开关」那种行,手机上点文字也能切开关。\\n * 手机断点下这行是上下排(见 mobile-fit.css 第 11 条),文字占满一行、开关缩在下面,\\n * 而 PiWeb 只让那个 36\xd720 的小开关可点 —— 用户点最显眼的标题文字毫无反应,\\n * 看起来就是\\"这个开关坏了\\"。实测:点文字 0 次请求,点开关才发请求。\\n */\\n(function () {\\n\\t\\"use strict\\";\\n\\n\\tvar ATTR = \\"data-piweb-marquee\\";\\n\\tvar TEXT_ATTR = \\"data-piweb-text\\";\\n\\tvar TEXT_VAR = \\"--piweb-marquee-text\\";\\n\\tvar DURATION_VAR = \\"--piweb-marquee-duration\\";\\n\\tvar COLOR_VAR = \\"--piweb-marquee-color\\";\\n\\tvar /** 两份文本之间留的间隔,也是 travel 里多出来的那一段 */\\n\\t\\tGAP = 40;\\n\\tvar /** 每秒移动多少像素,太长就慢一点 */\\n\\t\\tSPEED = 22;\\n\\tvar MIN_CYCLE = 6;\\n\\tvar ROW_BOUND_ATTR = \\"data-piweb-row-bound\\";\\n\\n\\t/** 模型胶囊里的名字(ModelSelector 里那个 span.truncate) */\\n\\tfunction label() {\\n\\t\\treturn document.querySelector(\'button.chip[aria-haspopup=\\"menu\\"] > span.truncate\');\\n\\t}\\n\\n\\tfunction apply() {\\n\\t\\tvar el = label();\\n\\t\\tif (!el) return;\\n\\t\\tvar text = el.textContent || \\"\\";\\n\\t\\tif (!text) return;\\n\\n\\t\\t// 同一个名字已经标过就别再动它:重设属性会把 CSS 动画从头开始,看起来是\\"一直重启\\"\\n\\t\\tif (el.hasAttribute(ATTR) && el.getAttribute(TEXT_ATTR) === text) return;\\n\\n\\t\\t// 量必须在\\"静止态\\"下做:先摘掉标记,否则量到的是被 28vw 框死之后的宽度\\n\\t\\tif (el.hasAttribute(ATTR)) el.removeAttribute(ATTR);\\n\\t\\tvar natural = el.scrollWidth;\\n\\t\\tvar windowWidth = el.clientWidth;\\n\\t\\tif (!windowWidth || natural <= windowWidth + 1) return; // 装得下,什么都不做\\n\\n\\t\\tel.style.setProperty(COLOR_VAR, getComputedStyle(el).color);\\n\\t\\tel.style.setProperty(TEXT_VAR, natural + GAP + \\"px\\");\\n\\t\\tel.style.setProperty(DURATION_VAR, Math.max(MIN_CYCLE, (natural + GAP) / SPEED).toFixed(1) + \\"s\\");\\n\\t\\tel.setAttribute(TEXT_ATTR, text);\\n\\t\\tel.setAttribute(ATTR, \\"\\");\\n\\t}\\n\\n\\t/**\\n\\t * 设置里「文字 + 开关」的行:把文字列变成开关的\\"大号按钮\\"。\\n\\t *\\n\\t * 只绑文字列(Row 里那个 min-w-0 的直系子元素),不碰控件列:\\n\\t * 控件列里有数字输入框,整行可点会把\\"点输入框\\"也变成切开关。\\n\\t * React 重渲染会换掉节点,所以每次轮询都重查;用属性做幂等标记,重复绑不会叠加。\\n\\t */\\n\\tfunction bindSwitchRows() {\\n\\t\\tvar switches = document.querySelectorAll(\'.settings-dialog [role=\\"switch\\"]\');\\n\\t\\tfor (var i = 0; i < switches.length; i++) {\\n\\t\\t\\tvar sw = switches[i];\\n\\t\\t\\tvar row = sw.closest(\\".hairline-b\\");\\n\\t\\t\\tif (!row || row.getAttribute(ROW_BOUND_ATTR) === \\"1\\") continue;\\n\\t\\t\\t// Row 的文字列:hairline-b 的直系子元素里带 min-w-0 的那个\\n\\t\\t\\tvar label = null;\\n\\t\\t\\tfor (var c = 0; c < row.children.length; c += 1) {\\n\\t\\t\\t\\tif (row.children[c].classList.contains(\\"min-w-0\\")) { label = row.children[c]; break; }\\n\\t\\t\\t}\\n\\t\\t\\tif (!label) continue;\\n\\t\\t\\trow.setAttribute(ROW_BOUND_ATTR, \\"1\\");\\n\\t\\t\\t(function (button, labelEl) {\\n\\t\\t\\t\\tlabelEl.style.cursor = \\"pointer\\";\\n\\t\\t\\t\\tlabelEl.addEventListener(\\"click\\", function (event) {\\n\\t\\t\\t\\t\\t// 文字里可能有链接/按钮,别抢它们\\n\\t\\t\\t\\t\\tif (event.target.closest(\\"a, button, input, select, textarea\\")) return;\\n\\t\\t\\t\\t\\tif (button.disabled) return;\\n\\t\\t\\t\\t\\tevent.preventDefault();\\n\\t\\t\\t\\t\\tbutton.click();\\n\\t\\t\\t\\t});\\n\\t\\t\\t})(sw, label);\\n\\t\\t}\\n\\t}\\n\\n\\t// 模型名会随会话/选择变化,输入卡也会整体重挂载;轮询最省事,且因为有上面的\\n\\t// 提前返回,稳态下每次只花一个 querySelector。\\n\\tfunction start() {\\n\\t\\tapply();\\n\\t\\tbindSwitchRows();\\n\\t\\tsetInterval(function () { apply(); bindSwitchRows(); }, 800);\\n\\t\\twindow.addEventListener(\\"resize\\", apply, { passive: true });\\n\\t\\twindow.addEventListener(\\"orientationchange\\", apply, { passive: true });\\n\\t}\\n\\n\\tif (document.readyState === \\"loading\\") document.addEventListener(\\"DOMContentLoaded\\", start, { once: true });\\n\\telse start();\\n})();"}'),r="piweb-mobile-fit",s=q.A,t=q.js;function u(a=process.env){return(0,j.authEnabled)(a)?"development"===a.NODE_ENV?"dev":null:"auth"}function v(){let a=globalThis,b=Symbol.for("piweb:remote-supervisor"),c=a[b];if(c)return c;let d={lan:null,tunnel:null,lanError:null,publicError:null,enginePath:null,engineChecked:!1};return a[b]=d,d}function w(a=process.env){for(let b of[a.PIWEB_PORT,a.PORT]){let a=Number(b);if(Number.isInteger(a)&&a>=1&&a<=65535)return a}return 30141}function x(a=process.env){let b;return"0"!==(b=(a.PIWEB_REMOTE_LAN??"").trim().toLowerCase())&&"false"!==b&&"off"!==b&&"no"!==b}let y=/vmware|virtualbox|vboxnet|vethernet|hyper-v|wsl|docker|^br-|^veth/i;function z(){let a=v(),b=a.lan?.port??null;return{plugin:"builtin-remote",pluginEnabled:A(),targetPort:w(),blocked:u(),lan:{running:!!a.lan,port:b,urls:b?(function(a=g().networkInterfaces()){let b=[],c=[];for(let[d,e]of Object.entries(a))for(let a of e??[])!("IPv4"!==a.family||a.internal||a.address.startsWith("169.254."))&&(/^198\.1[89]\./.test(a.address)||(y.test(d)?c:b).push(a.address));return[...b,...c]})().map(a=>`http://${a}:${b}`):[],styled:!!a.lan?.styled,error:a.lanError},public:{running:!!a.tunnel,url:a.tunnel?.url??null,ready:!!a.tunnel?.ready,engine:a.tunnel?"cloudflared":null,engineAvailable:!a.engineChecked||null!==a.enginePath,error:a.publicError}}}function A(){try{let a=JSON.parse(e().readFileSync(i().join((0,k.Fu)(),"remote-plugin.json"),"utf8"));return a?.enabled!==!1}catch{return!0}}function B(a=function(a=process.env){let b=Number(a.PIWEB_REMOTE_LAN_PORT);return Number.isInteger(b)&&b>=1&&b<=65535?b:30142}(),b="0.0.0.0",c=w()){let d=v();if(d.lan)return Promise.resolve(z().lan);if(d.lanStarting)return d.lanStarting;let e=C(a,b,c).finally(()=>{d.lanStarting===e&&(d.lanStarting=null)});return d.lanStarting=e,e}async function C(a,b,c){let d=v();d.lanError=null;let e=A(),f=function({targetPort:a,targetHost:b="127.0.0.1",css:c=null,js:d=null,log:e=()=>{}}){let f=new(m()).Agent({keepAlive:!0,scheduling:"lifo",timeout:5e3}),g=m().createServer((g,h)=>{let i,j={...g.headers},k=!!(c||d)&&!("localhost"===(i=(function(a){let b=String(a??"").trim().toLowerCase();if(b.startsWith("[")){let a=b.indexOf("]");return a>=0?b.slice(1,a):b.slice(1)}return 1===(b.match(/:/g)??[]).length?b.slice(0,b.indexOf(":")):b})(j.host).trim().toLowerCase().replace(/^\[|\]$/g,""))||i.endsWith(".localhost")||"::1"===i||"0:0:0:0:0:0:0:1"===i||/^127(?:\.\d{1,3}){3}$/.test(i));k&&String(j.accept??"").includes("text/html")&&(j["accept-encoding"]="identity");let l=m().request({host:b,port:a,method:g.method,path:g.url??"/",headers:j,agent:f},a=>{let b=String(a.headers["content-type"]??"");if(!k||!b.includes("text/html")){h.writeHead(a.statusCode??502,a.headers),(0,n.pipeline)(a,h,()=>void 0);return}let f=[];a.on("error",a=>{e(`[远程连接] 上游中途断开:${a.message}`),h.destroy()}),a.on("data",a=>f.push(a)),a.on("end",()=>{let b,g=Buffer.concat(f);try{b=Buffer.from(function(a,{css:b=null,js:c=null}={}){if(!b&&!c||a.includes(`id="${r}"`))return a;let d=[];b&&d.push(`<style id="${r}">
|
|
2
|
-
${b}
|
|
3
|
-
</style>`),c&&d.push(`<script id="${r}-js">
|
|
4
|
-
${c}
|
|
5
|
-
<\/script>`);let e=d.join("\n"),f=a.indexOf("</head>");if(f>=0)return`${a.slice(0,f)}${e}
|
|
6
|
-
${a.slice(f)}`;let g=a.indexOf("<body");if(g>=0){let b=a.indexOf(">",g);if(b>=0)return`${a.slice(0,b+1)}${e}${a.slice(b+1)}`}return e+a}((function(a,b){let c=String(b??"").toLowerCase();if(!c||"identity"===c)return a;if("gzip"===c||"x-gzip"===c)return p().gunzipSync(a);if("deflate"===c)return p().inflateSync(a);if("br"===c)return p().brotliDecompressSync(a);throw Error(`不支持的 content-encoding:${b}`)})(g,a.headers["content-encoding"]).toString("utf8"),{css:c,js:d}),"utf8")}catch(c){e(`[远程连接] 注入失败,原样返回:${c instanceof Error?c.message:String(c)}`);let b={...a.headers};delete b["content-encoding"],delete b["content-length"],h.writeHead(a.statusCode??200,b),h.end(g);return}let i={...a.headers};delete i["content-encoding"],delete i["transfer-encoding"],delete i.etag,i["content-length"]=String(b.byteLength),i["cache-control"]="no-store",h.writeHead(a.statusCode??200,i),h.end(b)})}),o=!1;l.on("error",a=>{o||(e(`[远程连接] 代理连不上 PiWeb:${a.message}`),h.headersSent||h.writeHead(502,{"content-type":"text/plain; charset=utf-8"}),h.end(`[远程连接] 连不上 PiWeb(${a.message})`))}),h.on("close",()=>{h.writableFinished||(o=!0,l.destroy())}),g.pipe(l)});return g.on("close",()=>f.destroy()),g}({targetPort:c,css:e?s:null,js:e?t:null,log:a=>console.warn(a)});try{await new Promise((c,d)=>{f.once("error",d),f.listen(a,b,c)})}catch(a){return d.lanError=a instanceof Error?a.message:String(a),f.close(),z().lan}return d.lan={server:f,port:a,styled:e},z().lan}},75393:(a,b,c)=>{function d(a=process.env){let b=(a.PI_WEB_AUTH??"").trim().toLowerCase();return"1"===b||"true"===b||"on"===b||"yes"===b}c.d(b,{authEnabled:()=>d}),c(77598)}};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:27,errorRate:1e-4,numBits:518,numHashes:14,bitArray:[0,1,1,1,0,1,0,1,1,1,1,0,0,1,0,1,0,0,0,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,0,0,1,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,1,1,0,0,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,1,1,0,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,0,1,1,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,0,1,1,1,1,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,1,0,0,1,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,1,1,0,1,1,1,0,0,1,1,0,1,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,1,0,1,1,1,0,0,1,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,1,0,1,0,1,0,0,1,1,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,1]},__routerFilterDynamic:{numItems:2,errorRate:1e-4,numBits:39,numHashes:14,bitArray:[1,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,0,1,0,0,1,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0]},sortedPages:["/_app"]},self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1966],{1966:(e,t,a)=>{Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return r}});let l=a(4252),s=a(7876),u=l._(a(4232)),n=a(8608);async function o({Component:e,ctx:t}){return{pageProps:await (0,n.loadGetInitialProps)(e,t)}}class r extends u.default.Component{static{this.origGetInitialProps=o}static{this.getInitialProps=o}render(){let{Component:e,pageProps:t}=this.props;return(0,s.jsx)(e,{...t})}}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)}}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2577],{901:e=>{e.exports={mask:"ProviderSetupModal_mask__wwU3u",dialog:"ProviderSetupModal_dialog__BxSeI",builtinDialog:"ProviderSetupModal_builtinDialog__vA7_B",header:"ProviderSetupModal_header__Nvgmb",title:"ProviderSetupModal_title__ZIIXp",body:"ProviderSetupModal_body__QAlNu",builtinBody:"ProviderSetupModal_builtinBody___4EFo",field:"ProviderSetupModal_field__ZMO8M",label:"ProviderSetupModal_label__4_BYS",hint:"ProviderSetupModal_hint__yCwPV",input:"ProviderSetupModal_input__YZYV5",select:"ProviderSetupModal_select___PTpP",providerTrigger:"ProviderSetupModal_providerTrigger__TXtau",picker:"ProviderSetupModal_picker__VQdQc",providerText:"ProviderSetupModal_providerText__l9bwJ",providerName:"ProviderSetupModal_providerName__Hwwfg",providerMeta:"ProviderSetupModal_providerMeta____3za",menu:"ProviderSetupModal_menu__zO5CU",searchWrap:"ProviderSetupModal_searchWrap__5yw1r",searchIcon:"ProviderSetupModal_searchIcon__BZeD1",search:"ProviderSetupModal_search__j_n_8",providerList:"ProviderSetupModal_providerList__bMnFj",providerRow:"ProviderSetupModal_providerRow__Zf7fg",selectedMark:"ProviderSetupModal_selectedMark___8UDb",empty:"ProviderSetupModal_empty__4V1WK",advanced:"ProviderSetupModal_advanced__kWaTH",advancedButton:"ProviderSetupModal_advancedButton__efHwl",catalog:"ProviderSetupModal_catalog__mXakU",catalogHeader:"ProviderSetupModal_catalogHeader__0MDA4",catalogStatus:"ProviderSetupModal_catalogStatus__JRz0P",discoverButton:"ProviderSetupModal_discoverButton__GGuZX",discoverControls:"ProviderSetupModal_discoverControls___0_l8",modelEmpty:"ProviderSetupModal_modelEmpty__h1N_8",modelList:"ProviderSetupModal_modelList__jkYVz",headerRow:"ProviderSetupModal_headerRow__2JBNp",modelRow:"ProviderSetupModal_modelRow__mHfRv",removeModel:"ProviderSetupModal_removeModel___LjE1",addModel:"ProviderSetupModal_addModel__Q3KOU",error:"ProviderSetupModal_error__EAOK6",footer:"ProviderSetupModal_footer__zVp_c",footerButton:"ProviderSetupModal_footerButton__FL58k",primary:"ProviderSetupModal_primary__ArzeF",modelEntry:"ProviderSetupModal_modelEntry__G067u",rowToggle:"ProviderSetupModal_rowToggle__kc_Za",capacityRow:"ProviderSetupModal_capacityRow__0miDX",capacityField:"ProviderSetupModal_capacityField___TX70",capacityHint:"ProviderSetupModal_capacityHint__z_5re",rowError:"ProviderSetupModal_rowError__2vHrG",catalogError:"ProviderSetupModal_catalogError__ZL5D7",catalogHint:"ProviderSetupModal_catalogHint__ws49_",candidateMask:"ProviderSetupModal_candidateMask__YUZn7",candidateDialog:"ProviderSetupModal_candidateDialog__upECk",candidateHeader:"ProviderSetupModal_candidateHeader__bUvHV",candidateList:"ProviderSetupModal_candidateList__JRufC",candidateRow:"ProviderSetupModal_candidateRow__Omm_o",candidateTag:"ProviderSetupModal_candidateTag__lE99_",candidateId:"ProviderSetupModal_candidateId__7Hy7u",candidateName:"ProviderSetupModal_candidateName__D4rXE",candidateActions:"ProviderSetupModal_candidateActions__iptOe",candidateAll:"ProviderSetupModal_candidateAll__yhD_R",candidatePicked:"ProviderSetupModal_candidatePicked__cJ78H"}},1669:e=>{e.exports={wrap:"CustomSelect_wrap__oiRn_",trigger:"CustomSelect_trigger__HTxwt",sizeSm:"CustomSelect_sizeSm__u7Yk8",sizeMd:"CustomSelect_sizeMd__Uw1i1",label:"CustomSelect_label__7_kg8",chevron:"CustomSelect_chevron__Nqa1g",chevronOpen:"CustomSelect_chevronOpen__3Do3Z",menu:"CustomSelect_menu___tEPS","popover-in":"CustomSelect_popover-in__SJuUo",menuFlip:"CustomSelect_menuFlip__jJRsr",option:"CustomSelect_option__5wBtO",optionSelected:"CustomSelect_optionSelected__i3yKA",check:"CustomSelect_check__hSGwB"}},2577:(e,a,t)=>{"use strict";t.r(a),t.d(a,{PluginsSection:()=>Z,SettingsPanel:()=>R});var l=t(5155),s=t(2115),i=t(7650),r=t(560),n=t(9992);let o=[[/^amazon-bedrock$/,"bedrock-color"],[/^ant-ling$/,"antgroup-color"],[/^anthropic$/,"anthropic"],[/^azure-/,"azure-color"],[/^baseten$/,"baseten"],[/^cerebras$/,"cerebras-color"],[/^cloudflare-/,"cloudflare-color"],[/^deepseek$/,"deepseek-color"],[/^fireworks$/,"fireworks-color"],[/^github-copilot$/,"githubcopilot"],[/^google-vertex(?:-|$)/,"googlecloud-color"],[/^google$/,"google-color"],[/^groq$/,"groq"],[/^huggingface$/,"huggingface-color"],[/^kimi(?:-|$)/,"kimi-color"],[/^minimax/,"minimax-color"],[/^mistral$/,"mistral-color"],[/^moonshot(?:ai)?(?:-|$)/,"moonshot"],[/^nvidia$/,"nvidia-color"],[/^openai/,"openai"],[/^opencode(?:-|$)/,"opencode"],[/^openrouter$/,"openrouter-color"],[/^qwen(?:-|$)/,"qwen-color"],[/^together$/,"together-color"],[/^vercel(?:-|$)/,"vercel"],[/^xai$/,"xai"],[/^xiaomi(?:-|$)/,"xiaomimimo"],[/^zai(?:-|$)/,"zai"]];[...new Set(o.map(([,e])=>e))];let d=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,c=["openai-completions","openai-responses","anthropic-messages","google-generative-ai"];function u(e){let a=new Set(c);return[...c,...[...new Set(e.filter(e=>e&&!a.has(e)))].sort()]}function p({id:e,name:a,size:t=36}){let s,i=o.find(([a])=>a.test(e))?.[1]??null;return(0,l.jsx)("span",{"aria-hidden":"true",className:"inline-flex flex-none items-center justify-center overflow-hidden",style:{width:t,height:t,borderRadius:Math.max(10,Math.round(.3*t)),background:"#f7f7f5",border:"0.5px solid rgba(0,0,0,.09)",color:"#18191b",fontSize:Math.max(10,Math.round(.32*t)),fontWeight:750,letterSpacing:"-0.03em"},children:i?(0,l.jsx)("img",{src:`/provider-icons/${i}.svg`,alt:"",width:Math.round(.66*t),height:Math.round(.66*t)}):(s=a.trim().split(/[\s_-]+/).filter(Boolean)).length>=2?(s[0][0]+s[1][0]).toUpperCase():(s[0]??e).slice(0,2).toUpperCase()})}var m=t(1669),h=t.n(m);function x({value:e,onChange:a,options:t,placeholder:i,disabled:r=!1,size:o="md",className:d="",style:c,"aria-label":u,"data-testid":p}){let[m,v]=(0,s.useState)(!1),[g,f]=(0,s.useState)(!1),b=(0,s.useRef)(null),y=(0,s.useRef)(null),j=t.find(a=>a.value===e);return(0,s.useEffect)(()=>{if(!m)return;if(y.current){let e=y.current.getBoundingClientRect();f(window.innerHeight-e.bottom<220&&e.top>220)}let e=e=>{b.current?.contains(e.target)||v(!1)},a=e=>{"Escape"===e.key&&(v(!1),y.current?.focus())};return document.addEventListener("mousedown",e),document.addEventListener("keydown",a),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",a)}},[m]),(0,l.jsxs)("div",{ref:b,className:`${h().wrap} ${d}`,style:c,children:[(0,l.jsx)("select",{tabIndex:-1,value:e,disabled:r,"aria-label":u,onChange:e=>a(e.target.value),style:{position:"absolute",width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",border:0,opacity:0,pointerEvents:"none"},children:t.map(e=>(0,l.jsx)("option",{value:e.value,disabled:e.disabled,children:e.label},e.value))}),(0,l.jsxs)("button",{ref:y,type:"button",disabled:r,"data-open":m?"true":void 0,"data-testid":p,"aria-label":u,"aria-haspopup":"listbox","aria-expanded":m,className:`${h().trigger} ${"sm"===o?h().sizeSm:h().sizeMd}`,onClick:()=>v(e=>!e),onKeyDown:e=>{r||("ArrowDown"===e.key||"ArrowUp"===e.key||"Enter"===e.key||" "===e.key)&&(e.preventDefault(),v(e=>!e))},children:[(0,l.jsx)("span",{className:h().label,children:j?.label??i??e}),(0,l.jsx)(n.Cd,{size:"sm"===o?13:15,className:`${h().chevron} ${m?h().chevronOpen:""}`})]}),m&&(0,l.jsx)("div",{className:`${h().menu} ${g?h().menuFlip:""}`,role:"listbox","aria-label":u,children:t.map(t=>{let s=t.value===e;return(0,l.jsxs)("button",{type:"button",role:"option","aria-selected":s,disabled:t.disabled,className:`${h().option} ${s?h().optionSelected:""}`,onClick:()=>{a(t.value),v(!1),y.current?.focus()},children:[(0,l.jsx)("span",{className:"truncate",children:t.label}),s?(0,l.jsx)(n.df,{size:14,className:h().check}):null]},t.value)})})]})}var v=t(1859),g=t(2578),f=t(901),b=t.n(f);function y({mode:e,providers:a,catalogModelIds:t,existingIds:i,onClose:r,onSaveBuiltin:o,onSaveCustom:c,onOAuthLogin:m}){let{t:h}=(0,v.s)(),[f,w]=(0,s.useState)(a[0]?.id??""),[S,N]=(0,s.useState)(!1),[k,_]=(0,s.useState)(""),[C,z]=(0,s.useState)("api_key"),[P,M]=(0,s.useState)(""),[E,T]=(0,s.useState)(!1),[$,R]=(0,s.useState)(""),[F,L]=(0,s.useState)(""),[D,O]=(0,s.useState)(""),A=u(a.flatMap(e=>e.apis)),[W,I]=(0,s.useState)(A.includes("openai-completions")?"openai-completions":A[0]??"openai-completions"),[U,H]=(0,s.useState)([]),[B,K]=(0,s.useState)(null),J=0===U.length&&!!$.trim()&&!!(P.trim()||function(e){try{let a=new URL(e.trim()).hostname.replace(/^\[|\]$/g,"").toLowerCase();if(!a)return!1;if("localhost"===a||a.endsWith(".localhost")||a.endsWith(".local"))return!0;if(a.includes(":"))return"::1"===a||/^(fc|fd|fe80)/.test(a);let t=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(a);if(!t)return!1;let l=Number(t[1]),s=Number(t[2]);return 0===l||10===l||127===l||192===l&&168===s||172===l&&s>=16&&s<=31||169===l&&254===s}catch{return!1}}($)),[V,q]=(0,s.useState)(0),G=()=>{J&&q(e=>e+1)},[Q,X]=(0,s.useState)(!1),[Z,Y]=(0,s.useState)(""),ee=(0,s.useRef)(null),ea=a.find(e=>e.id===f),et=(0,s.useMemo)(()=>new Set(t?.[f]??[]),[t,f]),el=a.filter(e=>{let a=k.trim().toLocaleLowerCase();return!a||e.name.toLocaleLowerCase().includes(a)||e.id.toLocaleLowerCase().includes(a)});(0,s.useEffect)(()=>{let e=e=>{"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),S?N(!1):r())};return document.addEventListener("keydown",e,!0),()=>document.removeEventListener("keydown",e,!0)},[r,S]),(0,s.useEffect)(()=>{if(!S)return;let e=e=>{ee.current?.contains(e.target)||N(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[S]);let es=(e,a)=>{H(t=>t.map((t,l)=>l===e?{...t,...a}:t))},ei=(0,g.aK)(U),er=F.trim(),en=d.test(er),eo=en&&!i.includes(er)&&!!$.trim()&&U.length>0&&!ei,ed=!!ea&&("oauth"===C||!ei),ec=(0,s.useRef)(!1),eu=async()=>{if(!ec.current&&("builtin"===e?ed:eo)){ec.current=!0,X(!0),Y("");try{let a;if("builtin"===e&&ea)if("oauth"===C&&m)a=await m(ea.id);else{let e=(0,g.Vt)({},{baseUrl:$,models:U},ea.apis[0]??"openai-completions",et);a=await o({providerId:ea.id,apiKey:P.trim(),config:e})}else{let e=(B??[]).map(({name:e,value:a})=>[e.trim(),a.trim()]).filter(([e,a])=>e&&a);a=await c({providerId:er,config:{name:D.trim()||er,baseUrl:$.trim(),api:W,...P.trim()?{apiKey:P.trim()}:{},...e.length?{headers:Object.fromEntries(e)}:{},models:U.map(e=>(0,g.vV)(e))}})}a.success?r():Y(a.error||h.toastError)}catch(e){Y(e instanceof Error?e.message:h.toastError)}finally{ec.current=!1,X(!1)}}},ep=async a=>{if(!$.trim())throw Error(h.apiAddress);let t=(B??[]).map(({name:e,value:a})=>[e.trim(),a.trim()]).filter(([e,a])=>e&&a),l=(0,g.iT)(t);if(l)throw Error(l);let s=await fetch("/api/models",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"discoverModels",baseUrl:$.trim(),api:"builtin"===e?ea?.apis[0]:W,apiKey:P.trim(),providerId:"builtin"===e?ea?.id:void 0,allowPrivate:a,...t.length&&"builtin"!==e?{headers:Object.fromEntries(t)}:{}})}),i=await s.json();if(!s.ok||!i.success)throw Error(i.error||h.toastError);return(i.data.models??[]).map(g.SC)};return(0,l.jsx)("div",{className:b().mask,"data-provider-modal":"true",onMouseDown:e=>{e.target===e.currentTarget&&r()},children:(0,l.jsxs)("section",{className:`${b().dialog} ${"builtin"===e?b().builtinDialog:""}`,role:"dialog","aria-modal":"true","aria-labelledby":"provider-setup-title",children:[(0,l.jsxs)("header",{className:b().header,children:[(0,l.jsx)("h2",{id:"provider-setup-title",className:b().title,children:"builtin"===e?h.addProvider:h.customProviderTitle}),(0,l.jsx)("button",{className:"icon-btn",title:h.close,"aria-label":h.close,onClick:r,children:(0,l.jsx)(n.Bh,{size:17})})]}),(0,l.jsxs)("div",{className:`${b().body} ${"builtin"===e?b().builtinBody:""}`,children:["builtin"===e?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:b().field,children:[(0,l.jsx)("label",{className:b().label,children:h.providerLabel}),(0,l.jsxs)("div",{className:b().picker,ref:ee,children:[(0,l.jsxs)("button",{className:b().providerTrigger,"data-open":S,onClick:()=>N(e=>!e),children:[ea?(0,l.jsx)(p,{id:ea.id,name:ea.name,size:34}):null,(0,l.jsxs)("span",{className:b().providerText,children:[(0,l.jsx)("span",{className:b().providerName,children:ea?.name??h.selectProvider}),ea?(0,l.jsx)("span",{className:b().providerMeta,children:ea.id}):null]}),(0,l.jsx)(n.Cd,{size:15})]}),S?(0,l.jsxs)("div",{className:b().menu,children:[(0,l.jsxs)("div",{className:b().searchWrap,children:[(0,l.jsx)("span",{className:b().searchIcon,children:(0,l.jsx)(n.FG,{size:15})}),(0,l.jsx)("input",{autoFocus:!0,className:b().search,value:k,onChange:e=>_(e.target.value),placeholder:h.searchProviders})]}),(0,l.jsxs)("div",{className:b().providerList,children:[el.map(e=>(0,l.jsxs)("button",{className:b().providerRow,"data-selected":e.id===f,onClick:()=>{w(e.id),z("api_key"),M(""),I(e.apis[0]??"openai-completions"),R(""),H([]),N(!1)},children:[(0,l.jsx)(p,{id:e.id,name:e.name,size:38}),(0,l.jsxs)("span",{className:b().providerText,children:[(0,l.jsx)("span",{className:b().providerName,children:e.name}),(0,l.jsxs)("span",{className:b().providerMeta,children:[e.id," \xb7 ",h.modelCount.replace("{count}",String(e.modelCount))]})]}),e.id===f?(0,l.jsx)("span",{className:b().selectedMark,children:(0,l.jsx)(n.df,{size:16})}):null]},e.id)),0===el.length?(0,l.jsx)("div",{className:b().empty,children:h.noProviderMatches}):null]})]}):null]})]}),ea?.authTypes.includes("oauth")&&m?(0,l.jsxs)("div",{className:b().field,children:[(0,l.jsx)("label",{className:b().label,children:h.authMethod}),(0,l.jsx)(x,{value:C,onChange:e=>z(e),options:[{value:"api_key",label:h.authMethodApiKey},{value:"oauth",label:h.oauthLogin}],"aria-label":h.authMethod})]}):null,"api_key"===C?(0,l.jsxs)("div",{className:b().field,children:[(0,l.jsx)("label",{className:b().label,children:ea?.apiKeyLabel??h.apiKey}),(0,l.jsx)("input",{className:b().input,type:"password",value:P,onChange:e=>M(e.target.value),placeholder:h.apiKeyOptional})]}):null,(0,l.jsxs)("div",{className:b().advanced,children:[(0,l.jsxs)("button",{className:b().advancedButton,"data-open":E,onClick:()=>T(e=>!e),children:[(0,l.jsx)(n.Cd,{size:15}),h.customSettings]}),E?(0,l.jsxs)("div",{children:[(0,l.jsxs)("div",{className:b().field,children:[(0,l.jsx)("label",{className:b().label,children:h.apiAddress}),(0,l.jsx)("input",{className:b().input,value:$,onChange:e=>R(e.target.value),placeholder:ea?.baseUrl||h.providerDefault})]}),(0,l.jsx)(j,{models:U,setModels:H,updateModel:es,inheritedCount:ea?.modelCount??0,catalogIds:et,discover:ep,discoverDisabled:!$.trim()})]}):null]})]}):(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:b().field,children:[(0,l.jsx)("label",{className:b().label,children:h.providerId}),(0,l.jsx)("input",{className:b().input,autoFocus:!0,value:F,onChange:e=>L(e.target.value.toLocaleLowerCase()),placeholder:"acme-gateway"}),(0,l.jsx)("div",{className:b().hint,children:h.providerIdHint}),er&&!en?(0,l.jsx)("div",{className:b().hint,style:{color:"var(--dsw-danger)"},children:h.providerIdInvalid}):null,er&&i.includes(er)?(0,l.jsx)("div",{className:b().hint,style:{color:"var(--dsw-danger)"},children:h.providerIdTaken}):null]}),(0,l.jsxs)("div",{className:b().field,children:[(0,l.jsx)("label",{className:b().label,children:h.displayName}),(0,l.jsx)("input",{className:b().input,value:D,onChange:e=>O(e.target.value),placeholder:h.displayName})]}),(0,l.jsxs)("div",{className:b().field,children:[(0,l.jsx)("label",{className:b().label,children:h.apiAddress}),(0,l.jsx)("input",{className:b().input,value:$,onChange:e=>R(e.target.value),onBlur:G,placeholder:"https://gateway.example/v1"})]}),(0,l.jsxs)("div",{className:b().field,children:[(0,l.jsx)("label",{className:b().label,children:h.apiProtocol}),(0,l.jsx)(x,{value:W,onChange:e=>{I(e),G()},options:A.map(e=>({value:e,label:e})),"aria-label":h.apiProtocol})]}),(0,l.jsxs)("div",{className:b().field,children:[(0,l.jsx)("label",{className:b().label,children:h.apiKey}),(0,l.jsx)("input",{className:b().input,type:"password",value:P,onChange:e=>M(e.target.value),onBlur:G,placeholder:h.apiKeyOptional}),(0,l.jsx)("div",{className:b().hint,children:h.customApiKeyHint})]}),(0,l.jsxs)("div",{className:b().field,children:[(0,l.jsx)("label",{className:b().label,children:h.customHeaders}),(B??[]).map((e,a)=>(0,l.jsxs)("div",{className:b().headerRow,children:[(0,l.jsx)("input",{className:b().input,value:e.name,placeholder:h.customHeaderName,onChange:e=>K(t=>(t??[]).map((t,l)=>l===a?{...t,name:e.target.value}:t))}),(0,l.jsx)("input",{className:b().input,value:e.value,placeholder:h.customHeaderValue,onChange:e=>K(t=>(t??[]).map((t,l)=>l===a?{...t,value:e.target.value}:t))}),(0,l.jsx)("button",{type:"button",className:b().removeModel,title:h.delete,"aria-label":`${h.delete} ${e.name||a+1}`,onClick:()=>K(e=>(e??[]).filter((e,t)=>t!==a)),children:(0,l.jsx)(n.Vd,{size:15})})]},a)),(0,l.jsxs)("button",{type:"button",className:b().addModel,onClick:()=>K(e=>[...e??[],{name:"",value:""}]),children:[(0,l.jsx)(n.Xh,{size:14})," ",h.customHeaderAdd]}),(0,l.jsx)("div",{className:b().hint,children:h.customHeadersHint})]}),(0,l.jsx)(j,{models:U,setModels:H,updateModel:es,discover:ep,discoverDisabled:!$.trim(),autoDiscover:J?{signature:`${$.trim()}|${W}|${P.trim()}`,trigger:V}:void 0})]}),Z?(0,l.jsx)("div",{className:b().error,children:Z}):null]}),(0,l.jsxs)("footer",{className:b().footer,children:[(0,l.jsx)("button",{className:b().footerButton,onClick:r,children:h.cancel}),(0,l.jsx)("button",{className:`${b().footerButton} ${b().primary}`,disabled:Q||("builtin"===e?!ed:!eo),onClick:eu,children:Q?h.saving:"builtin"===e?h.save:h.createProvider})]})]})})}function j({models:e,setModels:a,updateModel:t,inheritedCount:i,catalogIds:r,discover:o,discoverDisabled:d,autoDiscover:c}){let{t:u}=(0,v.s)(),[p,m]=(0,s.useState)(new Set),[h,f]=(0,s.useState)(!1),[y,w]=(0,s.useState)(""),[S,N]=(0,s.useState)(null),[k,_]=(0,s.useState)(new Set),[C,z]=(0,s.useState)({}),P=(e,a,t)=>C[`${a}:${t}`]??(0,g.sm)(e[t]),M=(e,a,l)=>{z(t=>({...t,[`${e}:${a}`]:l})),t(e,{[a]:(0,g.KM)(l)})},E=e=>r?.has(e.trim())??!1,T=(0,s.useRef)(""),$=(0,s.useRef)(0),R=(0,s.useRef)(!1),F=(0,s.useRef)(0),[L,D]=(0,s.useState)(""),[O,A]=(0,s.useState)(0);(0,s.useEffect)(()=>{R.current&&(R.current=!1,$.current+=1,T.current="",D(""))},[c?.signature]),(0,s.useEffect)(()=>{if(!c||c.trigger===F.current||(F.current=c.trigger,!o||T.current===c.signature))return;T.current=c.signature,R.current=!0;let e=++$.current;D("loading");let t=a=>e===$.current&&(R.current=!1,D(a),!0);o(!0).then(e=>{t(e.length?"done":"empty")&&(A(e.length),a(a=>a.length?a:e))},()=>void t("failed"))},[c?.trigger]);let W=async()=>{if(o&&!h){R.current&&(R.current=!1,$.current+=1,T.current="",D("")),f(!0),w("");try{let a=await o(!0);if(!a.length)return void w(u.discoverEmpty);let t=new Set(e.map(e=>e.id.trim()).filter(Boolean)),l=[...a.filter(e=>!E(e.id)),...a.filter(e=>E(e.id))];N(l),_(new Set(l.filter(e=>!t.has(e.id.trim())&&!E(e.id)).map(e=>e.id)))}catch(e){w(e instanceof Error?e.message:u.toastError)}finally{f(!1)}}},I=()=>{N(null),_(new Set)},U=S??[],H=U.filter(e=>!E(e.id)),B=H.length>0&&H.every(e=>k.has(e.id)),K=(0,g.aK)(e),J=e.some(e=>E(e.id));return(0,l.jsxs)("div",{className:b().catalog,children:[(0,l.jsxs)("div",{className:b().catalogHeader,children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("div",{className:b().label,children:u.modelCatalog}),(0,l.jsxs)("div",{className:b().catalogStatus,children:[i?u.usingDefaultModels.replace("{count}",String(i)):u.customModelsRequired,"loading"===L?` \xb7 ${u.autoDiscovering}`:null,"done"===L?` \xb7 ${u.autoDiscovered.replace("{n}",String(O))}`:null,"empty"===L?` \xb7 ${u.discoverEmpty}`:null,"failed"===L?` \xb7 ${u.autoDiscoverFailed}`:null]})]}),o?(0,l.jsx)("div",{className:b().discoverControls,children:(0,l.jsx)("button",{className:b().discoverButton,disabled:d||h,onClick:()=>void W(),children:h?u.discoveringModels:u.discoverModels})}):null]}),y?(0,l.jsx)("div",{className:b().catalogError,children:y}):null,e.length?(0,l.jsx)("div",{className:b().modelList,children:e.map((e,s)=>{let i=p.has(s),r=Number.isNaN(e.contextWindow)||Number.isNaN(e.maxTokens);return(0,l.jsxs)("div",{className:b().modelEntry,children:[(0,l.jsxs)("div",{className:b().modelRow,children:[(0,l.jsx)("button",{type:"button",className:b().rowToggle,title:u.capacityFields,onClick:()=>m(e=>{let a=new Set(e);return a.delete(s)||a.add(s),a}),children:(0,l.jsx)(n.Cd,{size:13,style:{transform:i?"rotate(0deg)":"rotate(-90deg)",transition:"transform 120ms ease"}})}),(0,l.jsx)("input",{className:b().input,style:{borderColor:e.id.trim()||K?.index!==s?void 0:"var(--dsw-danger)"},value:e.id,onChange:e=>t(s,{id:e.target.value}),placeholder:u.modelId}),(0,l.jsx)("input",{className:b().input,value:e.name,onChange:e=>t(s,{name:e.target.value}),placeholder:u.displayNameOptional}),(0,l.jsx)("button",{className:b().removeModel,title:u.delete,onClick:()=>{a(e=>e.filter((e,a)=>a!==s)),m(e=>{let a=new Set;for(let t of e)t!==s&&a.add(t>s?t-1:t);return a}),z(e=>{let a={};for(let[t,l]of Object.entries(e)){let e=Number(t.slice(0,t.indexOf(":")));e!==s&&(a[e>s?`${e-1}${t.slice(t.indexOf(":"))}`:t]=l)}return a})},children:(0,l.jsx)(n.Vd,{size:15})})]}),i?(0,l.jsxs)("div",{className:b().capacityRow,children:[(0,l.jsxs)("label",{className:b().capacityField,children:[(0,l.jsx)("span",{children:u.contextWindowLabel}),(0,l.jsx)("input",{className:b().input,style:{borderColor:Number.isNaN(e.contextWindow)?"var(--dsw-danger)":void 0},value:P(e,s,"contextWindow"),onChange:e=>M(s,"contextWindow",e.target.value),placeholder:"128K"})]}),(0,l.jsxs)("label",{className:b().capacityField,children:[(0,l.jsx)("span",{children:u.maxTokensLabel}),(0,l.jsx)("input",{className:b().input,style:{borderColor:Number.isNaN(e.maxTokens)?"var(--dsw-danger)":void 0},value:P(e,s,"maxTokens"),onChange:e=>M(s,"maxTokens",e.target.value),placeholder:"16K"})]}),(0,l.jsxs)("div",{className:b().capacityField,title:u.visionHint,children:[(0,l.jsx)("span",{children:u.visionLabel}),(0,l.jsx)(x,{size:"sm",style:{width:104},value:void 0===e.vision?"unset":e.vision?"image":"text",onChange:e=>{t(s,{vision:"unset"===e?void 0:"image"===e})},options:[{value:"unset",label:u.visionUnset},{value:"image",label:u.visionOn},{value:"text",label:u.visionOff}],"aria-label":u.visionLabel})]}),(0,l.jsxs)("div",{className:b().capacityField,title:u.reasoningHint,children:[(0,l.jsx)("span",{children:u.reasoningLabel}),(0,l.jsx)(x,{size:"sm",style:{width:104},value:void 0===e.reasoning?"unset":e.reasoning?"on":"off",onChange:e=>{t(s,{reasoning:"unset"===e?void 0:"on"===e})},options:[{value:"unset",label:u.reasoningUnset},{value:"on",label:u.reasoningOn},{value:"off",label:u.reasoningOff}],"aria-label":u.reasoningLabel})]}),(0,l.jsx)("span",{className:b().capacityHint,children:u.capacityHint})]}):null,r?(0,l.jsx)("div",{className:b().rowError,children:u.capacityInvalid.replace("{n}",String(s+1))}):null]},s)})}):(0,l.jsx)("div",{className:b().modelEmpty,children:i?u.modelCatalogEmptyBuiltin:u.modelCatalogEmptyCustom}),J?(0,l.jsx)("div",{className:b().catalogHint,children:u.catalogOverrideHint}):null,(0,l.jsxs)("button",{className:b().addModel,onClick:()=>a(e=>[...e,{id:"",name:""}]),children:[(0,l.jsx)(n.Xh,{size:14}),u.addModel]}),S?(0,l.jsx)("div",{className:b().candidateMask,children:(0,l.jsxs)("div",{className:b().candidateDialog,role:"dialog","aria-modal":"true","aria-label":u.discoverModels,children:[(0,l.jsx)("div",{className:b().candidateHeader,children:(0,l.jsx)("span",{children:u.candidateTitle.replace("{count}",String(S.length))})}),(0,l.jsxs)("div",{className:b().candidateList,children:[U.map(e=>{let a=E(e.id);return(0,l.jsxs)("label",{className:b().candidateRow,"data-disabled":a||void 0,children:[(0,l.jsx)("input",{type:"checkbox",checked:!a&&k.has(e.id),disabled:a,onChange:()=>{let a;return a=e.id,_(e=>{let t=new Set(e);return t.delete(a)||t.add(a),t})}}),(0,l.jsx)("span",{className:b().candidateId,children:e.id}),e.name?(0,l.jsx)("span",{className:b().candidateName,children:e.name}):null,a?(0,l.jsx)("span",{className:b().candidateTag,children:u.candidateInCatalog}):null]},e.id)}),0===U.length?(0,l.jsx)("div",{className:b().modelEmpty,children:"—"}):null]}),(0,l.jsxs)("div",{className:b().candidateActions,children:[(0,l.jsxs)("label",{className:b().candidateAll,children:[(0,l.jsx)("input",{type:"checkbox",checked:B,disabled:0===H.length,onChange:()=>_(e=>{let a=new Set(e);return H.every(e=>a.has(e.id))?H.forEach(e=>a.delete(e.id)):H.forEach(e=>a.add(e.id)),a})}),u.candidateAll]}),(0,l.jsx)("span",{className:b().candidatePicked,children:u.candidatePicked.replace("{n}",String(k.size))}),(0,l.jsx)("button",{className:b().footerButton,onClick:I,children:u.cancel}),(0,l.jsx)("button",{className:`${b().footerButton} ${b().primary}`,disabled:0===k.size,onClick:()=>{S&&(a(e=>{let a=new Map(e.map(e=>[e.id.trim(),e]));for(let e of S){let t=e.id.trim();!t||!k.has(t)||a.has(t)||E(t)||a.set(t,e)}return[...a.values()]}),I())},children:u.candidateAdopt.replace("{n}",String(k.size))})]})]})}):null]})}var w=t(8155);function S({tone:e}){return(0,l.jsx)("span",{className:"inline-block h-[7px] w-[7px] flex-none rounded-full",style:{background:"on"===e?"var(--dsw-success)":"pending"===e?"var(--dsw-accent)":"var(--dsw-label-caption)"}})}function N({title:e,hint:a,children:t}){return(0,l.jsxs)("div",{className:"hairline-b flex flex-wrap items-start justify-between gap-4 pb-5",children:[(0,l.jsxs)("div",{className:"min-w-0 flex-1",style:{minWidth:"45%"},children:[(0,l.jsx)("div",{style:{fontSize:14},children:e}),a?(0,l.jsx)("div",{style:{fontSize:12,color:"var(--dsw-label-caption)",lineHeight:1.55,marginTop:2},children:a}):null]}),(0,l.jsx)("div",{className:"flex-none",children:t})]})}function k({url:e,token:a}){let{t}=(0,v.s)(),[i,r]=(0,s.useState)("");(0,s.useEffect)(()=>{if(!i)return;let e=setTimeout(()=>r(""),2e3);return()=>clearTimeout(e)},[i]);let n=a?`${e.replace(/\/+$/,"")}/?token=${encodeURIComponent(a)}`:e;return(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("a",{href:n,target:"_blank",rel:"noreferrer",className:"font-mono hover:underline",style:{fontSize:12},children:e}),(0,l.jsx)("button",{type:"button",className:"btn-outline",style:{height:24,fontSize:12,paddingInline:8},onClick:()=>void(0,w.D)(n).then(e=>r(e?"ok":"fail")),children:"ok"===i?t.remoteLinkCopied:"fail"===i?t.copyFailed:t.copy})]})}function _(){let{t:e}=(0,v.s)(),[a,t]=(0,s.useState)(null),[i,r]=(0,s.useState)(!1),[n,o]=(0,s.useState)(""),d=(0,s.useRef)(!0),c=(0,s.useCallback)(async()=>{try{let a=await fetch("/api/remote",{cache:"no-store"}),l=await a.json();if(!d.current)return;l?.success?(t(l.data),o("")):o(l?.error??e.remoteFailed)}catch{d.current&&o(e.remoteFailed)}},[e]);(0,s.useEffect)(()=>(d.current=!0,c(),()=>{d.current=!1}),[c]);let u=!!(a?.public.running&&!a.public.ready);(0,s.useEffect)(()=>{if(!u)return;let e=setInterval(()=>void c(),2500);return()=>clearInterval(e)},[u,c]);let p=async a=>{if(!i){r(!0),o("");try{let l=await fetch("/api/remote",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:a})}),s=await l.json();s?.success?t(s.data):o(s?.error??e.remoteFailed)}catch{o(e.remoteFailed)}finally{d.current&&r(!1)}}},[m,h]=(0,s.useState)(!1);(0,s.useEffect)(()=>{if(!m)return;let e=setTimeout(()=>h(!1),4e3);return()=>clearTimeout(e)},[m]);let x=async()=>{if(!m)return void h(!0);h(!1),o("");try{let a=await fetch("/api/web-auth?scope=all",{method:"DELETE"}),t=await a.json().catch(()=>null);if(!a.ok||!t?.success)throw Error(t?.error??e.remoteFailed);window.location.href="/login"}catch(a){d.current&&o(a instanceof Error?a.message:e.remoteFailed)}},g=a?.lan,f=a?.public,b=a?.blocked??null,y=a?.pluginEnabled??!0,j=g?.running?"on":"off",w=f?.running?f.ready?"on":"pending":"off",_=async()=>{if(!i){r(!0),o("");try{let a=await fetch("/api/remote",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"set-plugin",enabled:!y})}),l=await a.json();l?.success?t(l.data):o(l?.error??e.remoteFailed)}catch{o(e.remoteFailed)}finally{d.current&&r(!1)}}};return(0,l.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,l.jsx)("div",{style:{fontSize:15,fontWeight:500},children:e.setRemote}),(0,l.jsx)("span",{className:"rounded-md px-2 py-[2px]",style:{fontSize:11,background:"var(--dsw-hover)",color:"var(--dsw-label-secondary)"},children:e.remoteBuiltin}),(0,l.jsx)("div",{className:"flex-1"}),(0,l.jsx)("span",{style:{fontSize:12,color:"var(--dsw-label-caption)"},children:y?e.remotePluginOn:e.remotePluginOff}),(0,l.jsx)("button",{type:"button",className:"relative h-5 w-9 flex-none rounded-full transition-colors",style:{background:y?"var(--dsw-accent)":"var(--dsw-border-l3)"},role:"switch","aria-checked":y,"aria-label":e.remotePluginToggle,title:e.remotePluginHint,disabled:i||!a,onClick:()=>void _(),children:(0,l.jsx)("span",{className:"absolute top-0.5 h-4 w-4 rounded-full bg-white transition-all",style:{left:y?18:2}})})]}),(0,l.jsx)("div",{style:{fontSize:12,color:"var(--dsw-label-secondary)",lineHeight:1.6,marginTop:-12},children:e.remotePluginHint}),(0,l.jsx)(N,{title:e.remoteLanTitle,hint:e.remoteLanHint,children:(0,l.jsxs)("div",{className:"flex flex-col items-end gap-1.5",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",style:{fontSize:13},children:[(0,l.jsx)(S,{tone:j}),(0,l.jsx)("span",{style:{color:g?.running?"var(--dsw-label-primary)":"var(--dsw-label-caption)"},children:g?.running?e.remoteRunning:e.remoteStopped}),g?.running&&!1===g.styled?(0,l.jsxs)("span",{style:{fontSize:11.5,color:"var(--dsw-label-caption)"},children:["\xb7 ",e.remoteLanPlain]}):null]}),(g?.urls??[]).map(e=>(0,l.jsx)(k,{url:e,token:a?.loginToken},e)),g?.error?(0,l.jsx)("div",{style:{fontSize:12,color:"var(--dsw-danger)"},children:g.error}):null]})}),(0,l.jsx)(N,{title:e.remotePublicTitle,hint:e.remotePublicHint,children:(0,l.jsxs)("div",{className:"flex flex-col items-end gap-2",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",style:{fontSize:13},children:[(0,l.jsx)(S,{tone:w}),(0,l.jsx)("span",{style:{color:f?.running?"var(--dsw-label-primary)":"var(--dsw-label-caption)"},children:f?.running?f.ready?e.remoteRunning:e.remotePending:e.remoteStopped})]}),f?.url?(0,l.jsx)(k,{url:f.url,token:a?.loginToken}):null,(0,l.jsx)("div",{className:"flex items-center gap-2",children:f?.running?(0,l.jsx)("button",{className:"btn-outline",style:{height:30,fontSize:13},disabled:i,onClick:()=>void p("stop"),children:e.remoteStop}):(0,l.jsx)("button",{className:"btn-primary-white",style:{height:30,fontSize:13},disabled:i||null!==b||!y,onClick:()=>void p("start"),children:i?e.remoteWorking:e.remoteStart})}),y?null:(0,l.jsx)("div",{style:{fontSize:11.5,color:"var(--dsw-label-caption)",textAlign:"right"},children:e.remotePublicNeedsPlugin})]})}),a&&"auth"!==b?(0,l.jsx)(N,{title:e.remoteSessionsTitle,hint:e.remoteSessionsHint,children:(0,l.jsx)("button",{className:"btn-outline",style:{height:30,fontSize:13,color:m?"var(--dsw-danger)":void 0},onClick:()=>void x(),children:m?e.remoteSignOutAllConfirm:e.remoteSignOutAll})}):null,b?(0,l.jsx)("div",{style:{fontSize:12,color:"var(--dsw-label-secondary)",lineHeight:1.6},children:"auth"===b?e.remoteBlockedAuth:e.remoteBlockedDev}):null,f&&!f.engineAvailable?(0,l.jsx)("div",{style:{fontSize:12,color:"var(--dsw-danger)",lineHeight:1.6},children:e.remoteEngineMissing}):null,f?.error?(0,l.jsx)("div",{style:{fontSize:12,color:"var(--dsw-danger)",lineHeight:1.6},children:f.error}):null,n?(0,l.jsx)("div",{role:"alert",style:{fontSize:12,color:"var(--dsw-danger)"},children:n}):null]})}var C=t(826),z=t(9591),P=t(3364),M=t(6540),E=t(922);let T=["xai","openai-codex","anthropic","deepseek","openrouter","moonshotai","moonshotai-cn","kimi-coding","github-copilot","vercel-ai-gateway","opencode-go"];function $(e){return T.includes(e)}function R({open:e,onClose:a,cwd:t,toolPreset:i,onToolPresetChange:r,tools:o,onSetTools:d,onOpenFileContent:c}){let{t:u,lang:p,setLang:m}=(0,v.s)(),[h,x]=(0,s.useState)("general");if((0,s.useEffect)(()=>{if(!e)return;let t=e=>{"Escape"!==e.key||document.querySelector('[data-provider-modal="true"]')||a()};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)},[e,a]),!e)return null;let g=[{id:"general",label:u.setGeneral,icon:(0,l.jsx)(n.Ec,{size:15})},{id:"models",label:u.setModels,icon:(0,l.jsx)(n.se,{size:15})},{id:"tools",label:u.toolsSection,icon:(0,l.jsx)(n.DI,{size:15})},{id:"plugins",label:u.setPlugins,icon:(0,l.jsx)(n.q2,{size:15})},{id:"skills",label:u.setSkills,icon:(0,l.jsx)(n.i7,{size:15})},{id:"remote",label:u.setRemote,icon:(0,l.jsx)(n.an,{size:15})}];return(0,l.jsx)("div",{className:"modal-mask fixed inset-0 z-[100] flex items-center justify-center",onMouseDown:e=>{e.target===e.currentTarget&&a()},children:(0,l.jsxs)("div",{className:"settings-dialog glass-modal flex overflow-hidden",style:{width:800,maxWidth:"calc(100vw - 48px)",height:"min(800px, calc(100vh - 48px))",borderRadius:32,boxShadow:"var(--dsw-elevation-prominent)"},children:[(0,l.jsxs)("div",{className:"settings-nav flex w-52 flex-none flex-col gap-1 py-4 pl-4 pr-3",children:[(0,l.jsx)("div",{className:"settings-title px-2 pb-3",style:{fontSize:16,fontWeight:500},children:u.settings}),g.map(e=>(0,l.jsxs)("button",{"data-active":h===e.id?"true":void 0,className:"isx-menu-item flex h-[42px] items-center gap-2.5 rounded-xl px-3 text-left",style:{paddingLeft:10,paddingRight:14,fontSize:14,color:h===e.id?"var(--dsw-bg-base)":"var(--dsw-label-secondary)"},onClick:()=>x(e.id),children:[(0,l.jsx)("span",{className:"isx-menu-icon",style:{display:"inline-flex"},children:e.icon}),(0,l.jsx)("span",{className:"isx-menu-shift",children:e.label})]},e.id))]}),(0,l.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2 px-6 py-3.5",children:[(0,l.jsx)("div",{className:"flex-1"}),(0,l.jsxs)("button",{className:"btn-outline",style:{height:32,fontSize:13},onClick:()=>window.open("/api/config","_blank"),children:[(0,l.jsx)(n.FQ,{size:14})," ",u.openConfigFile]}),(0,l.jsx)("button",{className:"icon-btn",onClick:a,children:(0,l.jsx)(n.Bh,{size:15})})]}),(0,l.jsxs)("div",{className:"min-h-0 flex-1 overflow-y-auto px-6 py-5",children:["general"===h&&(0,l.jsx)(F,{lang:p,setLang:m}),"models"===h&&(0,l.jsx)(K,{}),"skills"===h&&(0,l.jsx)(X,{cwd:t,onOpenFileContent:c}),"tools"===h&&(0,l.jsx)(Q,{toolPreset:i,onToolPresetChange:r,tools:o,onSetTools:d}),"plugins"===h&&(0,l.jsx)(Z,{cwd:t}),"remote"===h&&(0,l.jsx)(_,{})]})]})]})})}function F({lang:e,setLang:a}){let{t}=(0,v.s)(),[i,n]=(0,s.useState)("dsh"),[o,d]=(0,s.useState)("system"),[c,u]=(0,s.useState)(14),[p,m]=(0,s.useState)(14),[h,x]=(0,s.useState)("steer"),[g,f]=(0,s.useState)(null),[b,y]=(0,s.useState)(null),[j,w]=(0,s.useState)(null),[S,N]=(0,s.useState)(!0),[k,_]=(0,s.useState)(!1),[C,z]=(0,s.useState)(null),[P,E]=(0,s.useState)({reserveTokens:"",maxRetries:""}),T=async()=>{N(!0),z(null);let e=async e=>{let a=await fetch(e),t=await a.json();if(!a.ok||!t.success)throw Error(t.error||`request failed (${a.status})`);return t.data},[a,t,l,s]=await Promise.allSettled([e("/api/security"),e("/api/pi-settings"),e("/api/version"),e("/api/web-auth")]);"fulfilled"===t.status?(f(t.value),E({reserveTokens:String(t.value.compaction.reserveTokens),maxRetries:String(t.value.retry.maxRetries)})):f(null),"fulfilled"===l.status&&l.value?.piWeb?y({piWeb:l.value.piWeb,piEngine:l.value.piEngine}):y(null),"fulfilled"===s.status&&"boolean"==typeof s.value?.enabled?w({enabled:s.value.enabled,authenticated:!0===s.value.authenticated}):w(null),[a,t,l].some(e=>"rejected"===e.status)&&z("load"),N(!1)};(0,s.useEffect)(()=>{n((0,M.m6)()),d((0,M.Xf)());let e=parseInt(localStorage.getItem("piweb.fontSize")??"14",10);Number.isNaN(e)||u(e);let a=parseInt(localStorage.getItem("piweb.chatFontSize")??"14",10);Number.isNaN(a)||m(a),x((0,r.$h)()),T()},[]);let $=async e=>{if(!g||k)return!1;_(!0),z(null);try{let a=await fetch("/api/pi-settings",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),t=await a.json();if(!a.ok||!t.success)throw Error(t.error||"save failed");return f(t.data),!0}catch{return z("save"),!1}finally{_(!1)}},R=async(e,a)=>{if(!g)return;let t=P[a].trim(),l=Number(t);!t||!Number.isSafeInteger(l)||l<0||l>1e9?z("save"):l!==g[e][a]&&await $({[e]:{[a]:l}})},H=(e,a,t)=>(0,l.jsx)("input",{type:"number",min:0,value:P[a],disabled:!g||S||k,onChange:e=>E(t=>({...t,[a]:e.target.value})),onBlur:()=>void R(e,a),onKeyDown:e=>{"Enter"===e.key&&e.currentTarget.blur()},className:"rounded-lg px-2 py-1",title:t,style:{width:90,textAlign:"right",background:"var(--dsw-hover)"}}),B=[{id:"dsh",label:t.themeDsh,light:"#FFFFFF",dark:"#040405",accent:"#02DEFC"},{id:"silver-steel",label:t.themeSilverSteel,light:"#F3F4F6",dark:"#1A1C24",accent:"#94A3B8"},{id:"limestone-coal",label:t.themeLimestoneCoal,light:"#F0EFEB",dark:"#171717",accent:"#CEB27E"},{id:"linen-moss",label:t.themeLinenMoss,light:"#F2F2EC",dark:"#1E211E",accent:"#A3B3A3"},{id:"nord-paper",label:t.themeNordPaper,light:"#FCFBF9",dark:"#2E3440",accent:"#88C0D0"},{id:"pebrel",label:t.themePebrel,light:"#F3F4F6",dark:"#0F111A",accent:"#52A8FF"}];return(0,l.jsxs)("div",{className:"flex flex-col gap-6",children:[(S||C)&&(0,l.jsxs)("div",{role:C?"alert":"status",className:"flex items-center gap-3 rounded-lg px-3 py-2",style:{background:"var(--dsw-hover)",color:C?"var(--dsw-danger)":"var(--dsw-label-secondary)"},children:[(0,l.jsx)("span",{className:"flex-1",children:"load"===C?t.settingsLoadFailed:"save"===C?t.settingsSaveFailed:t.settingsLoading}),"load"===C&&(0,l.jsx)("button",{type:"button",className:"pw-chip",onClick:()=>void T(),children:t.settingsRetry})]}),(0,l.jsx)(A,{title:t.language,children:(0,l.jsx)(O,{value:e,options:[{value:"zh",label:"中文"},{value:"en",label:"English"}],onChange:e=>a(e)})}),(0,l.jsx)(W,{title:t.appearance,children:(0,l.jsx)("div",{className:"flex w-full flex-wrap gap-2",children:B.map(e=>(0,l.jsxs)("button",{className:"isx-card flex flex-col items-center justify-center gap-1",style:{flex:"1 1 150px",padding:"20px 32px",borderRadius:20,background:i===e.id?"var(--dsw-module-platform)":"var(--dsw-bg-elevated)",color:"var(--dsw-label-primary)",fontSize:14,lineHeight:"22px"},"aria-pressed":i===e.id,onClick:()=>{var a;n(a=e.id),(0,M.kK)(a,o)},children:[(0,l.jsxs)("span",{className:"flex items-center overflow-hidden rounded-md",style:{border:"1px solid var(--dsw-border-l3)",width:42,height:20},children:[(0,l.jsx)("span",{style:{background:e.light,flex:1,height:"100%"}}),(0,l.jsx)("span",{style:{background:e.dark,flex:1,height:"100%"}})]}),(0,l.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,l.jsx)("span",{className:"inline-block rounded-full",style:{width:8,height:8,background:e.accent}}),e.label]})]},e.id))})}),(0,l.jsx)(W,{title:t.appearanceMode,children:(0,l.jsx)("div",{className:"flex w-full flex-wrap gap-2",children:[{id:"light",label:t.themeLight},{id:"dark",label:t.themeDark},{id:"system",label:t.themeSystem}].map(e=>(0,l.jsx)("button",{className:"isx-card flex flex-col items-center justify-center gap-1",style:{flex:"1 1 120px",padding:"16px 24px",borderRadius:20,background:o===e.id?"var(--dsw-module-platform)":"var(--dsw-bg-elevated)",color:"var(--dsw-label-primary)",fontSize:14,lineHeight:"22px"},"aria-pressed":o===e.id,onClick:()=>{var a;d(a=e.id),(0,M.kK)(i,a)},children:e.label},e.id))})}),(0,l.jsx)(A,{title:t.fontUiSize,desc:t.fontUiSizeDesc,children:(0,l.jsx)(I,{value:c,onChange:e=>{let a=Math.max(12,Math.min(18,e));u(a),localStorage.setItem("piweb.fontSize",String(a)),document.documentElement.style.setProperty("--dsh-content-font-size",`${a}px`),document.documentElement.style.setProperty("--dsh-content-font-delta",`${a-14}px`)},max:18})}),(0,l.jsx)(A,{title:t.fontChatSize,desc:t.fontChatSizeDesc,children:(0,l.jsx)(I,{value:p,onChange:e=>{let a=Math.max(12,Math.min(20,e));m(a),localStorage.setItem("piweb.chatFontSize",String(a)),document.documentElement.style.setProperty("--piweb-chat-font-size",`${a}px`)},max:20})}),(0,l.jsx)(A,{title:t.fontUiFamily,desc:t.fontUiFamilyDesc,children:(0,l.jsx)(U,{})}),(0,l.jsx)(A,{title:t.enterBehavior,desc:t.enterBehaviorDesc,children:(0,l.jsx)(O,{value:h,options:[{value:"steer",label:t.enterSteer},{value:"queue",label:t.enterQueue}],onChange:e=>{x(e),(0,r.vf)(e)}})}),(0,l.jsx)(A,{title:t.autoCompact,desc:t.autoCompactDesc,children:(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("button",{disabled:!g||k,className:"relative h-5 w-9 flex-none rounded-full transition-colors",style:{background:g?.compaction.enabled?"var(--dsw-accent)":"var(--dsw-border-l3)"},role:"switch","aria-checked":g?.compaction.enabled??!1,onClick:()=>void $({compaction:{enabled:!g?.compaction.enabled}}),children:(0,l.jsx)("span",{className:"absolute top-0.5 h-4 w-4 rounded-full bg-white transition-all",style:{left:g?.compaction.enabled?18:2}})}),H("compaction","reserveTokens",t.reserveTokens)]})}),(0,l.jsx)(A,{title:t.autoRetry,desc:t.autoRetryDesc,children:(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("button",{disabled:!g||k,className:"relative h-5 w-9 flex-none rounded-full transition-colors",style:{background:g?.retry.enabled?"var(--dsw-accent)":"var(--dsw-border-l3)"},role:"switch","aria-checked":g?.retry.enabled??!1,onClick:()=>void $({retry:{enabled:!g?.retry.enabled}}),children:(0,l.jsx)("span",{className:"absolute top-0.5 h-4 w-4 rounded-full bg-white transition-all",style:{left:g?.retry.enabled?18:2}})}),H("retry","maxRetries",t.maxRetries)]})}),(0,l.jsx)(A,{title:t.versionPiweb,desc:t.versionPiwebDesc,children:(0,l.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,l.jsx)(L,{href:"https://github.com/RexVane/PiWeb",value:b?.piWeb}),(0,l.jsx)(D,{target:"piweb"})]})}),(0,l.jsx)(A,{title:t.versionPi,desc:t.versionPiDesc,children:(0,l.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,l.jsx)(L,{href:"https://github.com/earendil-works/pi",value:b?.piEngine}),(0,l.jsx)(D,{target:"pi"})]})}),j?.enabled?(0,l.jsx)(A,{title:t.webAuth,desc:t.webAuthTokenOn,children:(0,l.jsx)("button",{className:"btn-outline",style:{height:30,padding:"0 14px",fontSize:12.5},onClick:async()=>{await fetch("/api/web-auth",{method:"DELETE"}).catch(()=>{}),window.location.href="/login"},children:t.logout})}):null]})}function L({href:e,value:a}){return(0,l.jsx)("a",{href:e,target:"_blank",rel:"noreferrer",style:{fontFamily:"var(--font-mono)",fontSize:13,color:"var(--dsw-label-secondary)",textDecoration:"none"},onMouseEnter:e=>e.currentTarget.style.color="var(--dsw-accent)",onMouseLeave:e=>e.currentTarget.style.color="var(--dsw-label-secondary)",children:a??"—"})}function D({target:e}){let{t:a}=(0,v.s)(),{phase:t,latest:i,command:r,error:n,busy:o}=(0,z.M)().targets[e];if((0,s.useEffect)(()=>{(0,z.fT)()},[]),"idle"===t||"latest"===t||"error"===t){let s="latest"===t?a.upToDate:"error"===t?o?a.updateBusy:a.updateFailed:a.checkUpdate;return(0,l.jsx)("button",{type:"button",className:"btn-outline",style:{height:26,padding:"0 10px",fontSize:12,color:"latest"===t?"var(--dsw-label-tertiary)":"error"===t?"var(--dsw-danger)":"var(--dsw-label-primary)"},title:n||void 0,disabled:"checking"===t||"updating"===t,onClick:()=>void(0,z.Ug)(e),children:s})}return"available"===t?r?(0,l.jsxs)("span",{className:"flex flex-col items-end gap-0.5",style:{maxWidth:300},children:[(0,l.jsx)(C.H,{command:r}),(0,l.jsx)("span",{style:{fontSize:11,color:"var(--dsw-label-tertiary)",textAlign:"right"},children:a.updateManualHint})]}):(0,l.jsx)("button",{type:"button",className:"btn-primary-white",style:{height:26,padding:"0 12px",fontSize:12},onClick:()=>void(0,z.PG)(e),children:a.updateTo.replace("{v}",i)}):"updated"===t?(0,l.jsxs)("span",{className:"flex flex-col items-end gap-0.5",style:{maxWidth:280,textAlign:"right"},children:[(0,l.jsx)("span",{style:{fontSize:12,color:"var(--dsw-success)"},children:a.updatedTo.replace("{v}",i)}),(0,l.jsx)("span",{style:{fontSize:11,color:"var(--dsw-label-tertiary)"},children:a.updateRestartHint})]}):(0,l.jsxs)("span",{className:"flex items-center gap-1.5",style:{fontSize:12,color:"var(--dsw-label-tertiary)"},children:[(0,l.jsx)("span",{className:"h-3 w-3 flex-none animate-spin rounded-full border-2 border-current border-t-transparent"}),"updating"===t?a.updatingNow:a.checkingUpdate]})}function O({value:e,options:a,onChange:t,width:r,disabled:o}){let[d,c]=(0,s.useState)(!1),[u,p]=(0,s.useState)(null),m=(0,s.useRef)(null),h=(0,s.useRef)(null);(0,s.useEffect)(()=>{if(!d)return;let e=m.current?.getBoundingClientRect();e&&p({left:e.left,top:e.bottom+6,bottom:e.top-6});let a=e=>{m.current?.contains(e.target)||h.current?.contains(e.target)||c(!1)};return document.addEventListener("mousedown",a),()=>document.removeEventListener("mousedown",a)},[d]),(0,s.useEffect)(()=>{o&&c(!1)},[o]);let x=a.find(a=>a.value===e);return(0,l.jsxs)("div",{className:"relative",children:[(0,l.jsxs)("button",{ref:m,className:"select-chip","data-open":d,disabled:o,onClick:()=>c(e=>!e),children:[x?.label??e,(0,l.jsx)("span",{className:"chevron",children:(0,l.jsx)(n.Cd,{size:14})})]}),d&&!o&&u&&(0,i.createPortal)((0,l.jsx)("div",{ref:h,className:"popover fixed z-[130] p-1.5 shadow-xl",style:{left:u.left,top:Math.min(u.top,window.innerHeight-40),minWidth:r??140,width:"max-content",maxHeight:280,overflowY:"auto"},children:a.map(a=>{let s=a.value===e;return(0,l.jsxs)("button",{className:"flex w-full items-center justify-between gap-3 rounded-xl px-3.5 py-2 text-left transition-colors",style:{background:s?"var(--dsw-accent-soft)":"transparent"},onMouseEnter:e=>{s||(e.currentTarget.style.background="var(--dsw-hover)")},onMouseLeave:e=>{s||(e.currentTarget.style.background="transparent")},onClick:()=>{t(a.value),c(!1)},children:[(0,l.jsx)("span",{style:{fontSize:13.5,color:s?"var(--dsw-accent)":"var(--dsw-label-primary)",whiteSpace:"nowrap"},children:a.label}),s&&(0,l.jsx)("span",{style:{display:"inline-flex",color:"var(--dsw-accent)",flex:"none"},children:(0,l.jsx)(n.df,{size:14})})]},a.value)})}),document.body)]})}function A({title:e,desc:a,children:t}){return(0,l.jsxs)("div",{className:"hairline-b flex items-center justify-between gap-6 pb-5",children:[(0,l.jsxs)("div",{className:"min-w-0",children:[(0,l.jsx)("div",{style:{fontSize:14,fontWeight:400},children:e}),a&&(0,l.jsx)("div",{className:"mt-0.5",style:{fontSize:12,color:"var(--dsw-label-caption)"},children:a})]}),(0,l.jsx)("div",{className:"flex-none",children:t})]})}function W({title:e,desc:a,children:t}){return(0,l.jsxs)("div",{className:"hairline-b flex flex-col gap-3 pb-5",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("div",{style:{fontSize:14,fontWeight:400},children:e}),a&&(0,l.jsx)("div",{className:"mt-0.5",style:{fontSize:12,color:"var(--dsw-label-caption)"},children:a})]}),t]})}function I({value:e,onChange:a,max:t}){return(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("button",{className:"icon-btn",style:{width:26,height:26,border:"0.5px solid var(--dsw-border-l3)",borderRadius:8},disabled:e<=12,onClick:()=>a(e-1),"aria-label":"decrease font size",children:"−"}),(0,l.jsxs)("button",{style:{minWidth:48,textAlign:"center",fontSize:13,color:14===e?"var(--dsw-label-tertiary)":"var(--dsw-label-primary)"},title:"reset",onClick:()=>a(14),children:[e," px"]}),(0,l.jsx)("button",{className:"icon-btn",style:{width:26,height:26,border:"0.5px solid var(--dsw-border-l3)",borderRadius:8},disabled:e>=t,onClick:()=>a(e+1),"aria-label":"increase font size",children:"+"})]})}function U(){let{t:e,lang:a}=(0,v.s)(),[t,i]=(0,s.useState)(null),[r,n]=(0,s.useState)(""),[o,d]=(0,s.useState)(!1);(0,s.useEffect)(()=>{let e=(0,E.ll)(),a=e?.startsWith(E.D8)?e.slice(E.D8.length):null;i(e),d(null!==a),n(a??"")},[]);let c=e=>{n(e);let a=e.trim()?E.D8+e.trim():null;i(a),(0,E.di)(a)},u=o?E.D8:t??E.Z$[0].id;return(0,l.jsxs)("div",{className:"flex flex-col items-end gap-2",children:[(0,l.jsx)(O,{value:u,width:220,options:[...E.Z$.map(e=>({value:e.id,label:"zh"===a?e.label.zh:e.label.en})),{value:E.D8,label:e.fontCustom}],onChange:e=>{if(e===E.D8){d(!0),c(r);return}d(!1),i(e),(0,E.di)(e)}}),o&&(0,l.jsx)("input",{value:r,onChange:e=>c(e.target.value),placeholder:e.fontCustomPlaceholder,style:{height:30,width:260,padding:"0 10px",fontSize:13,background:"var(--dsw-input-major)",border:"0.5px solid var(--dsw-border-l3)",borderRadius:8,color:"var(--dsw-label-primary)"}})]})}let H={contextWindow:"",maxTokens:"",vision:""};function B({gaps:e,providerLabel:a,busy:t,onSave:i}){let{t:r}=(0,v.s)(),[o,d]=(0,s.useState)({}),c=e=>`${e.provider}\0${e.index}`,u=e=>o[c(e)]??H,p=(e,a)=>d(t=>({...t,[c(e)]:{...t[c(e)]??H,...a}})),m=e.filter(e=>e.missing.includes("input")),h=e=>d(a=>{let t={...a};for(let a of m)t[c(a)]={...t[c(a)]??H,vision:e};return t}),x=!1,f=[];for(let a of e){let e=o[c(a)];if(!e)continue;let t=a.missing.includes("contextWindow")?(0,g.KM)(e.contextWindow):void 0,l=a.missing.includes("maxTokens")?(0,g.KM)(e.maxTokens):void 0;if(Number.isNaN(t)||Number.isNaN(l)){x=!0;continue}let s=a.missing.includes("input")&&e.vision?"image"===e.vision:void 0;(void 0!==t||void 0!==l||void 0!==s)&&f.push({provider:a.provider,index:a.index,id:a.id,contextWindow:t,maxTokens:l,vision:s})}let b=async()=>{await i(f)&&d({})},y=(e,a,s)=>{if(!e.missing.includes(a))return(0,l.jsxs)("span",{className:"truncate",style:{fontFamily:"var(--font-mono)",color:"var(--dsw-label-secondary)"},children:[(0,l.jsxs)("span",{className:"sm:hidden",style:{color:"var(--dsw-label-caption)"},children:[s," "]}),(0,g.sm)(e[a])||"—"]});let i=u(e)[a];return(0,l.jsx)("input",{className:"pw-audit-field",style:{fontFamily:"var(--font-mono)"},value:i,onChange:t=>p(e,{[a]:t.target.value}),placeholder:s,"aria-label":`${e.id} ${s}`,"aria-invalid":Number.isNaN((0,g.KM)(i))||void 0,disabled:t})};return(0,l.jsxs)("section",{className:"flex flex-col gap-3 rounded-2xl p-4",style:{border:"0.5px solid var(--dsw-border-l3)",background:"var(--dsw-hover)"},"data-testid":"model-audit",children:[(0,l.jsxs)("div",{className:"flex items-start gap-2.5",children:[(0,l.jsx)(n.PP,{size:16,style:{flex:"none",marginTop:1,color:"var(--dsw-warn)"}}),(0,l.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,l.jsx)("div",{style:{fontSize:13.5,fontWeight:600},children:r.modelAuditTitle.replace("{n}",String(e.length))}),(0,l.jsx)("div",{className:"mt-1",style:{fontSize:12,color:"var(--dsw-label-caption)",lineHeight:1.65},children:r.modelAuditDesc.replace("{ctx}",(0,g.sm)(g.C.contextWindow)).replace("{out}",(0,g.sm)(g.C.maxTokens))})]})]}),(0,l.jsxs)("div",{style:{fontSize:12.5},role:"table","aria-label":r.modelAuditTitle.replace("{n}",String(e.length)),children:[(0,l.jsxs)("div",{role:"row",className:"hidden gap-x-2 px-1 pb-1.5 sm:grid sm:grid-cols-[minmax(0,1fr)_92px_92px_108px]",style:{fontSize:11.5,color:"var(--dsw-label-caption)"},children:[(0,l.jsx)("span",{role:"columnheader",children:r.modelAuditColModel}),(0,l.jsx)("span",{role:"columnheader",children:r.modelAuditColContext}),(0,l.jsx)("span",{role:"columnheader",children:r.modelAuditColOutput}),(0,l.jsx)("span",{role:"columnheader",children:r.modelAuditColVision})]}),(0,l.jsx)("div",{className:"max-h-[320px] overflow-y-auto",style:{borderTop:"0.5px solid var(--dsw-border-l2)"},children:e.map(e=>(0,l.jsxs)("div",{role:"row",className:"grid grid-cols-3 items-center gap-x-2 gap-y-1.5 px-1 py-2 sm:grid-cols-[minmax(0,1fr)_92px_92px_108px]",style:{borderBottom:"0.5px solid var(--dsw-border-l1)"},children:[(0,l.jsxs)("div",{role:"cell",className:"col-span-3 min-w-0 sm:col-span-1",title:`${e.provider} / ${e.id}`,children:[(0,l.jsx)("div",{className:"truncate",style:{fontWeight:500},children:e.name??e.id}),(0,l.jsxs)("div",{className:"truncate",style:{fontSize:11.5,fontFamily:"var(--font-mono)",color:"var(--dsw-label-caption)"},children:[a(e.provider)," / ",e.id]})]}),(0,l.jsx)("div",{role:"cell",className:"min-w-0",children:y(e,"contextWindow",r.modelAuditColContext)}),(0,l.jsx)("div",{role:"cell",className:"min-w-0",children:y(e,"maxTokens",r.modelAuditColOutput)}),(0,l.jsx)("div",{role:"cell",className:"min-w-0",children:(e.missing.includes("input"),(0,l.jsxs)("div",{className:"flex items-center gap-3",role:"group","aria-label":`${e.id} ${r.modelAuditColVision}`,children:[(0,l.jsxs)("label",{className:"flex cursor-default items-center gap-1",style:{color:"var(--dsw-label-tertiary)"},title:r.visionInputTextHint,children:[(0,l.jsx)("input",{type:"checkbox",checked:!0,disabled:!0,readOnly:!0}),r.visionInputText]}),(0,l.jsxs)("label",{className:"flex items-center gap-1",style:{color:"var(--dsw-label-secondary)"},title:r.visionInputImageHint,children:[(0,l.jsx)("input",{type:"checkbox",checked:e.missing.includes("input")?"image"===u(e).vision:!0===e.vision,disabled:t||!e.missing.includes("input"),onChange:a=>p(e,{vision:a.target.checked?"image":"text"}),"aria-label":`${e.id} ${r.visionInputImage}`}),r.visionInputImage]})]}))})]},c(e)))})]}),(0,l.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[m.length>0?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("span",{style:{fontSize:12,color:"var(--dsw-label-caption)"},children:r.modelAuditVisionQuick}),(0,l.jsx)("button",{className:"btn-outline",style:{height:28,padding:"0 11px",fontSize:12.5},disabled:t,onClick:()=>h("image"),children:r.modelAuditVisionOn}),(0,l.jsx)("button",{className:"btn-outline",style:{height:28,padding:"0 11px",fontSize:12.5},disabled:t,onClick:()=>h("text"),children:r.modelAuditVisionOff})]}):null,(0,l.jsx)("span",{className:"flex-1"}),(0,l.jsx)("button",{className:"btn-primary-white",style:{height:32},disabled:t||x||0===f.length,onClick:()=>void b(),children:t?r.saving:f.length?r.modelAuditSave.replace("{n}",String(f.length)):r.modelAuditSaveIdle})]})]})}function K(){let{t:e}=(0,v.s)(),[a,t]=(0,s.useState)([]),[i,r]=(0,s.useState)({providers:{}}),[o,d]=(0,s.useState)(null),[c,m]=(0,s.useState)(new Set),[h,x]=(0,s.useState)({}),[f,b]=(0,s.useState)(null),[w,S]=(0,s.useState)(""),[N,k]=(0,s.useState)(null),[_,C]=(0,s.useState)(""),[z,M]=(0,s.useState)(""),[E,T]=(0,s.useState)("openai-completions"),[R,F]=(0,s.useState)(""),[L,D]=(0,s.useState)([]),[A,W]=(0,s.useState)(""),[I,U]=(0,s.useState)(""),[H,K]=(0,s.useState)([]),[G,Q]=(0,s.useState)(!1),[X,Z]=(0,s.useState)(!1),[Y,ee]=(0,s.useState)(null),[ea,et]=(0,s.useState)(null),[el,es]=(0,s.useState)(null),[ei,er]=(0,s.useState)([]),[en,eo]=(0,s.useState)(""),[ed,ec]=(0,s.useState)(null),[eu,ep]=(0,s.useState)(!1),em=(0,s.useMemo)(()=>{for(let e=ei.length-1;e>=0;e--){let a=ei[e];if(a.startsWith("{"))try{let e=JSON.parse(a);if("device_code"===e.type&&"string"==typeof e.verificationUri)return{userCode:"string"==typeof e.userCode?e.userCode:"",verificationUri:e.verificationUri,instructions:""};if("auth_url"===e.type&&"string"==typeof e.url)return{userCode:"",verificationUri:e.url,instructions:"string"==typeof e.instructions?e.instructions:""}}catch{}}return null},[ei]),eh=(0,s.useRef)(null);(0,s.useEffect)(()=>{em?.verificationUri&&eh.current!==em.verificationUri&&(eh.current=em.verificationUri,window.open(em.verificationUri,"_blank","noopener"))},[em]);let ex=(0,s.useCallback)(async()=>{try{let e=await fetch("/api/models?custom=1"),a=await e.json();if(!e.ok||!a.success)throw Error(a.error||"failed to load model configuration");let l=JSON.parse(a.data.customProviders?.content??"{}");if(!l||"object"!=typeof l||Array.isArray(l)||void 0!==l.providers&&(!l.providers||"object"!=typeof l.providers||Array.isArray(l.providers)))throw Error("invalid model configuration");t(a.data.providers),x(a.data.catalogModelIds??{}),m(new Set(a.data.customProviders?.secretProviderIds??[])),r({...l,providers:l.providers??{}}),d("string"==typeof a.data.customProviders?.revision?a.data.customProviders.revision:null)}catch(e){d(null),ee({ok:!1,msg:e instanceof Error?e.message:"failed to load model configuration"})}},[]);(0,s.useEffect)(()=>{ex()},[ex]),(0,s.useEffect)(()=>{let e;if(!ea)return;let a=!0,t=!1,l=async()=>{try{let e=await fetch("/api/models",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"loginState",providerId:ea})}),l=await e.json();if(!a||!l.success)return;es(l.data.prompt),er(l.data.notifyLog??[]),l.data.done&&(t=!0,ec({ok:!l.data.error,msg:l.data.error??ea+" ✓"}),l.data.error||ex())}catch{}finally{a&&!t&&(e=setTimeout(l,1500))}};return l(),()=>{a=!1,e&&clearTimeout(e)}},[ea,ex]);let[ev,eg]=(0,s.useState)(null),[ef,eb]=(0,s.useState)(!1),[ey,ej]=(0,s.useState)(!1),ew=(0,s.useCallback)(async e=>{eb(!0),ej(!1);try{let a=await fetch("/api/models",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"providerUsage",providerId:"xai",force:e})}),t=await a.json();if(!a.ok||!t.success)throw Error(t.error||"usage probe failed");eg(t.data.usage??null)}catch{ej(!0)}finally{eb(!1)}},[]),[eS,eN]=(0,s.useState)({}),[ek,e_]=(0,s.useState)(null),[eC,ez]=(0,s.useState)({}),eP=(0,s.useCallback)(async(e,a)=>{e_(e),ez(a=>({...a,[e]:!1}));try{let t=await fetch("/api/models",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"providerUsage",providerId:e,force:a})}),l=await t.json();if(!t.ok||!l.success)throw Error(l.error||"usage probe failed");eN(a=>({...a,[e]:l.data.usage??null}))}catch{ez(a=>({...a,[e]:!0}))}finally{e_(a=>a===e?null:a)}},[]),eM=(0,s.useRef)(new Set);(0,s.useEffect)(()=>{for(let e of a)!e.authReady||!$(e.id)||"xai"===e.id||eM.current.has(e.id)||(eM.current.add(e.id),eP(e.id,!1))},[a,eP]);let eE=e=>`${"USD"===e.currency?"$":"CNY"===e.currency?"\xa5":""}${e.amount}${e.currency&&"USD"!==e.currency&&"CNY"!==e.currency?` ${e.currency}`:""}`,eT=(a,t)=>{ee({ok:a,msg:t??(a?e.toastSaved:e.toastError)}),setTimeout(()=>ee(null),2400)},e$=async a=>{try{let e=await fetch("/api/models",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}),t=await e.json();return e.ok?t:{...t,success:!1,error:t.error||`request failed (${e.status})`}}catch(a){return{success:!1,error:a instanceof Error?a.message:e.toastError}}},eR=(0,s.useMemo)(()=>(0,g.Ik)(i.providers??{}),[i]),[eF,eL]=(0,s.useState)(!1),eD=async a=>{let t=await e$(a);return eT(t.success,t.success&&t.data?.requiresSessionReopen?e.modelConfigReopen:t.error),t.success&&await ex(),t},eO=async a=>{if(ea)try{let t=await e$({action:"loginAnswer",providerId:ea,text:a});if(!t.success||t.data?.delivered!==!0)throw Error(t.error||e.toastError);eo("")}catch(a){eT(!1,a instanceof Error?a.message:e.toastError)}},eA=async()=>{if(ea)try{let a=await e$({action:"loginCancel",providerId:ea});if(!a.success)throw Error(a.error||e.toastError);et(null)}catch(a){eT(!1,a instanceof Error?a.message:e.toastError)}},eW=new Set(Object.keys(i.providers??{})),eI=a.filter(e=>e.authReady||e.authConfigured||e.keyManaged||eW.has(e.id)),eU=a.filter(e=>e.builtIn&&!eI.some(a=>a.id===e.id)),eH=async e=>{if(null===o){let e={success:!1,error:"Reload model configuration before saving."};return eT(!1,e.error),e}return eD({action:"saveCustomProviders",revision:o,content:JSON.stringify({...i,providers:e},null,2)})},eB=async e=>{let{providers:a,filled:t}=(0,g.Ki)(i.providers??{},e);if(!t)return!0;eL(!0);try{let e=await eH(a);return e.success||await ex(),!!e.success}finally{eL(!1)}},eK=e=>a.find(a=>a.id===e)?.name??e,eJ=e=>new Set(h[e]??[]),eV=(e,a)=>{let t={...i.providers};if((0,g.Gy)(a)&&!c.has(e)){if(!Object.prototype.hasOwnProperty.call(t,e))return null;delete t[e]}else t[e]=a;return t},eq=async()=>{if(!G&&!(0,g.aK)(L)&&z.trim()){Q(!0);try{let e={...i.providers},a=f??_.trim(),t=e[a]??{};a!==_.trim()&&delete e[a],e[_.trim()]=(0,g.Vt)(t,{name:A,baseUrl:z,api:E,apiKey:R,models:L}),(await eH(e)).success&&b(null)}finally{Q(!1)}}},eG=async e=>{if(!G&&!(0,g.aK)(H)){Q(!0);try{let a=(0,g.Vt)(i.providers[e.id]??{},{baseUrl:I,models:H},e.apis[0]??"openai-completions",eJ(e.id)),t=eV(e.id,a),l=t?await eH(t):{success:!0};l.success&&w.trim()&&(eD({action:"setKey",providerId:e.id,apiKey:w.trim()}),ec(null),et(e.id)),l.success&&b(null)}finally{Q(!1)}}},eQ=async t=>{if(!window.confirm(e.confirmRemoveProvider.replace("{name}",eK(t))))return;let l={...i.providers};delete l[t];let s=a.find(e=>e.id===t);if(s?.builtIn)try{await eD({action:"removeKey",providerId:t})}catch{}(await eH(l)).success&&b(null)},eX=async({providerId:e,apiKey:a,config:t})=>{let l=eV(e,{...i.providers[e],...t}),s=l?await eH(l):{success:!0};return s.success&&a&&(e$({action:"setKey",providerId:e,apiKey:a}),ec(null),et(e)),s},eZ=async({providerId:e,config:a})=>eH({...i.providers,[e]:a}),eY=async e=>{let a=await e$({action:"loginStart",providerId:e});return a.success?(ec(null),et(e),{success:!0}):{success:!1,error:a.error}};return(0,l.jsxs)("div",{className:"flex flex-col gap-5",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("div",{style:{fontSize:14,fontWeight:400},children:e.modelsTitle}),(0,l.jsx)("div",{className:"mt-0.5",style:{fontSize:12.5,color:"var(--dsw-label-caption)"},children:e.modelsDesc}),(0,l.jsx)("div",{className:"mt-1",style:{fontSize:12,color:"var(--dsw-label-caption)"},children:e.customModelIdentityNotice})]}),Y&&(0,l.jsx)("div",{className:"rounded-xl px-3 py-2",style:{fontSize:12.5,background:Y.ok?"rgba(34,197,94,.1)":"rgba(236,19,19,.1)",color:Y.ok?"var(--dsw-success)":"var(--dsw-danger)"},children:Y.msg}),(0,l.jsx)("div",{className:"flex flex-col gap-2.5",children:eI.map(t=>{var s,r,d;let m,h,x,v,y=eW.has(t.id)&&!t.builtIn,N=f===t.id;return(0,l.jsxs)("div",{children:[(0,l.jsxs)("div",{className:"flex min-w-0 flex-col overflow-hidden rounded-2xl px-4 py-3",style:{border:"0.5px solid var(--dsw-border-l2)"},children:[(0,l.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-x-3 gap-y-2",children:[(0,l.jsx)(p,{id:t.id,name:eK(t.id),size:34}),(0,l.jsxs)("div",{className:"min-w-[132px] flex-1",children:[(0,l.jsx)("div",{className:"truncate",style:{fontSize:14,fontWeight:500},children:eK(t.id)}),(0,l.jsxs)("div",{className:"truncate",style:{fontSize:11.5,color:"var(--dsw-label-caption)"},children:[t.id,t.baseUrl?` \xb7 ${t.baseUrl}`:""]})]}),y&&(0,l.jsx)("span",{className:"flex-none rounded-md px-1.5 py-0.5",style:{fontSize:10.5,border:"0.5px solid var(--dsw-border-l3)",color:"var(--dsw-label-tertiary)"},children:e.customBadge}),(0,l.jsx)("span",{className:"inline-block h-2 w-2 flex-none rounded-full",style:{background:t.authReady?"var(--dsw-success)":"var(--dsw-danger)"},title:t.authError||(t.authReady?e.providerReady:e.authUnavailable)}),(0,l.jsx)("span",{className:"flex-none rounded-md px-1.5 py-0.5",style:{fontSize:10.5,border:"0.5px solid var(--dsw-border-l3)",color:"var(--dsw-label-tertiary)"},children:e.credentialSource.replace("{source}","stored"===(m=t.authSource)?"auth.json":"runtime"===m?e.authSourceRuntime:"environment"===m?e.authSourceEnvironment:"models_json_key"===m?"models.json":"models_json_command"===m?e.authSourceCommand:"fallback"===m?e.authSourceProvider:t.resolvedAuthSource||e.authUnavailable)}),(0,l.jsx)("button",{className:"btn-outline flex-none whitespace-nowrap",style:{height:28,padding:"0 12px",fontSize:12},onClick:()=>{var e;let l;return b(f===(e=t.id)?null:e),S(""),Q(!1),Z(!1),l=i.providers[e],void(eW.has(e)&&!a.find(a=>a.id===e)?.builtIn?(C(e),M(l?.baseUrl??""),T(l?.api??"openai-completions"),F(""),W("string"==typeof l?.name?l.name:""),D((l?.models??[]).map(g.Lg))):(U("string"==typeof l?.baseUrl?l.baseUrl:""),K((0,g.xe)(l))))},children:e.edit}),"oauth"===t.storedAuthType&&(0,l.jsx)("button",{className:"flex-none whitespace-nowrap",style:{height:28,padding:"0 12px",fontSize:12,color:"var(--dsw-danger)"},onClick:async()=>{window.confirm(e.confirmRemoveOAuth.replace("{name}",eK(t.id)))&&await eD({action:"removeKey",providerId:t.id})},children:e.removeOAuth}),t.authTypes?.includes("oauth")&&(0,l.jsx)("button",{className:"btn-outline flex-none whitespace-nowrap",style:{height:28,padding:"0 12px",fontSize:12},onClick:()=>{ec(null),eD({action:"loginStart",providerId:t.id}),et(t.id)},children:e.oauthLogin}),eW.has(t.id)&&(0,l.jsx)("button",{className:"flex-none whitespace-nowrap",style:{fontSize:12.5,color:"var(--dsw-danger)"},onClick:()=>eQ(t.id),children:e.delete})]}),"xai"===t.id&&t.authReady&&(0,l.jsxs)("div",{className:"mt-3 flex items-center gap-2 pt-3",style:{borderTop:"0.5px solid var(--dsw-border-l2)",fontSize:11.5,color:"var(--dsw-label-tertiary)"},children:[ev?(0,l.jsxs)("span",{children:[e.usageQuotaLabel," \xb7 ",ev.model," \xb7 ",e.usageRequests," ",ev.requestRemaining.toLocaleString(),"/",ev.requestLimit.toLocaleString()," \xb7 Tokens ",(r=ev.tokenRemaining,(0,P.yj)(r)),"/",(d=ev.tokenLimit,(0,P.yj)(d))]}):(0,l.jsx)("span",{children:ey?e.usageProbeFailed:e.usageProbeDisclosure}),(0,l.jsx)("button",{type:"button",className:"pw-chip",disabled:ef,title:e.usageProbeDisclosure,onClick:()=>void ew(!0),children:ef?e.usageProbing:ev?e.usageRefresh:e.usageProbe})]}),$(t.id)&&"xai"!==t.id&&t.authReady&&(0,l.jsx)("div",{className:"mt-3 flex flex-col gap-1.5 pt-3",style:{borderTop:"0.5px solid var(--dsw-border-l2)",fontSize:11.5,color:"var(--dsw-label-tertiary)"},children:(h=eS[s=t.id],x=ek===s,v=eC[s],(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[!h&&(0,l.jsx)("span",{children:v?e.usageProbeFailed:x?e.queryingQuota:e.usageReadOnlyDisclosure}),h?.kind==="quota"&&h.planType&&(0,l.jsxs)("span",{children:[e.usagePlan," ",V(h.planType)]}),h?.kind==="balance"&&h.primary&&(0,l.jsxs)("span",{children:["used"===h.primaryKey?e.usageBalanceUsed:e.usageQuotaRemaining," ",(0,l.jsx)("span",{style:{color:"var(--dsw-label-secondary)"},children:eE(h.primary)})]}),(0,l.jsx)("button",{type:"button",className:"pw-chip",disabled:x,title:e.usageReadOnlyDisclosure,onClick:()=>void eP(s,!0),children:x?e.usageProbing:h?e.usageRefresh:e.usageProbe})]}),h?.kind==="balance"&&h.details.length>0&&(0,l.jsx)("span",{children:h.details.map(a=>{var t;return`${"granted"===(t=a.key)?e.usageBalanceGranted:"toppedUp"===t?e.usageBalanceToppedUp:"voucher"===t?e.usageBalanceVoucher:"cash"===t?e.usageBalanceCash:"used"===t?e.usageBalanceUsed:e.usageBalanceLimit} ${eE(a)}`}).join(" \xb7 ")}),h?.kind==="quota"&&0===h.windows.length&&(0,l.jsxs)("span",{children:[e.usageQuotaRemaining," —"]}),h?.kind==="quota"&&h.windows.map((a,t)=>{var s;return(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{style:{width:84,flex:"none"},children:(a=>{var t,l,s,i;if(void 0!==a.limitWindowSeconds){let i;return`${"weekly"==(i=604800===(l=t=a.limitWindowSeconds)?"weekly":2592e3===l?"monthly":l<86400?"hours":"days")?e.usageWindowWeekly:"monthly"===i?e.usageWindowMonthly:("hours"===i?e.usageWindowHours:e.usageWindowDays).replace("{n}",String(Math.round(t/("hours"===i?3600:86400))))}${a.variant?` (${"opus"===(s=a.variant)?e.usageVariantOpus:"code"===s?e.usageVariantCode:V(s)})`:""}`}return a.name?"premium"===(i=a.name)?e.usageWindowPremium:"chat"===i?e.usageWindowChat:"completions"===i?e.usageWindowCompletions:"rolling"===i?e.usageWindowRolling:V(i):""})(a)}),(0,l.jsxs)("span",{style:{width:92,flex:"none"},children:[e.usageQuotaRemaining," ",a.remainingPercent,"%"]}),(0,l.jsxs)("span",{children:[e.usageReset," ",function(e){if(!e)return"—";let a=new Date(e);return Number.isNaN(a.getTime())?"—":a.toLocaleString()}(a.resetAt)]}),(0,l.jsx)("div",{className:"h-1 overflow-hidden rounded-full",style:{width:120,flex:"none",background:"var(--dsw-border-l2)"},children:(0,l.jsx)("div",{className:"h-full rounded-full",style:{width:`${a.remainingPercent}%`,background:(s=a.remainingPercent)<30?"var(--dsw-danger)":s<=60?"var(--dsw-warning)":"var(--dsw-success)"}})})]},`${a.limitWindowSeconds??a.name??"window"}-${a.variant??""}-${t}`)})]}))})]}),N&&(0,l.jsx)("div",{className:"mt-2 rounded-2xl p-4",style:{border:"0.5px solid var(--dsw-border-l2)"},children:y?(0,l.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,l.jsx)(q,{label:e.apiKey,children:(0,l.jsx)("input",{type:"password",value:R,onChange:e=>F(e.target.value),className:J,placeholder:c.has(t.id)?e.apiKeyStored:e.apiKeyOptional})}),(0,l.jsx)(q,{label:e.displayName,children:(0,l.jsx)("input",{value:A,onChange:e=>W(e.target.value),className:J,placeholder:t.id})}),(0,l.jsx)(q,{label:e.baseUrl,children:(0,l.jsx)("input",{value:z,onChange:e=>M(e.target.value),className:J,placeholder:"https://api.example.com/v1"})}),(0,l.jsx)(q,{label:e.apiType,children:(0,l.jsx)(O,{value:E,options:u([E,...t.apis]).map(e=>({value:e,label:e})),onChange:T})}),(0,l.jsx)(j,{models:L,setModels:D,updateModel:(e,a)=>D(t=>t.map((t,l)=>l===e?{...t,...a}:t)),discover:async a=>{let l=await fetch("/api/models",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"discoverModels",providerId:t.id,baseUrl:z.trim(),api:E,apiKey:R.trim(),allowPrivate:a})}),s=await l.json();if(!s.success)throw Error(s.error||e.toastError);return(s.data.models??[]).map(g.SC)},discoverDisabled:!z.trim()}),(0,l.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,l.jsx)("button",{className:"btn-outline",style:{height:32},disabled:G,onClick:()=>b(null),children:e.cancel}),(0,l.jsx)("button",{className:"btn-primary-white",disabled:G||!z.trim()||!!(0,g.aK)(L)||!L.some(e=>e.id.trim()),onClick:()=>void eq(),children:G?e.saving:e.save})]})]}):(0,l.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,l.jsx)(q,{label:e.apiKey,children:(0,l.jsx)("input",{type:"password",value:w,onChange:e=>S(e.target.value),className:J,placeholder:t.keyManaged?e.apiKeyStored:t.apiKeyLabel??e.apiKey})}),(0,l.jsxs)("div",{children:[(0,l.jsxs)("button",{className:"flex w-full items-center gap-2 rounded-xl px-2 py-2 text-left transition-colors",style:{fontSize:13,color:"var(--dsw-label-secondary)",background:X?"var(--dsw-hover)":"transparent"},onClick:()=>Z(e=>!e),children:[(0,l.jsx)("span",{style:{display:"inline-flex",transform:X?"none":"rotate(-90deg)",transition:"transform 120ms ease"},children:(0,l.jsx)(n.Cd,{size:13})}),e.customSettings]}),X?(0,l.jsxs)("div",{className:"flex flex-col gap-3 pl-1 pt-2",children:[(0,l.jsx)(q,{label:e.baseUrl,children:(0,l.jsx)("input",{value:I,onChange:e=>U(e.target.value),className:J,placeholder:t.baseUrl??e.providerDefault})}),(0,l.jsx)(j,{models:H,setModels:K,updateModel:(e,a)=>K(t=>t.map((t,l)=>l===e?{...t,...a}:t)),inheritedCount:t.modelCount,catalogIds:eJ(t.id),discover:async a=>{let l=await fetch("/api/models",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"discoverModels",providerId:t.id,baseUrl:I.trim()||t.baseUrl||"",api:t.apis[0],apiKey:w.trim(),allowPrivate:a})}),s=await l.json();if(!s.success)throw Error(s.error||e.toastError);return(s.data.models??[]).map(g.SC)},discoverDisabled:!(I.trim()||t.baseUrl)})]}):null]}),(0,l.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[t.keyManaged&&(0,l.jsx)("button",{style:{fontSize:12.5,color:"var(--dsw-danger)"},disabled:G,onClick:async()=>{if("oauth"===t.storedAuthType){if(!window.confirm(e.confirmRemoveOAuth.replace("{name}",t.name)))return}else if(!window.confirm(e.confirmRemoveKey.replace("{name}",t.name)))return;(await eD({action:"removeKey",providerId:t.id})).success&&b(null)},children:"oauth"===t.storedAuthType?e.removeOAuth:e.removeKey}),(0,l.jsx)("button",{className:"btn-outline",style:{height:32},disabled:G,onClick:()=>b(null),children:e.cancel}),(0,l.jsx)("button",{className:"btn-primary-white",disabled:G||null===o||!!(0,g.aK)(H),onClick:()=>void eG({id:t.id,apis:t.apis}),children:G?e.saving:e.save})]})]})})]},t.id)})}),eR.length>0?(0,l.jsx)(B,{gaps:eR,providerLabel:eK,busy:eF||null===o,onSave:eB}):null,(0,l.jsxs)("div",{className:"flex gap-3",children:[(0,l.jsxs)("button",{className:"flex flex-1 items-center justify-center gap-2 rounded-2xl px-4 py-3.5 transition-colors",style:{border:"0.5px solid var(--dsw-border-l3)",fontSize:14},onMouseEnter:e=>e.currentTarget.style.background="var(--dsw-hover)",onMouseLeave:e=>e.currentTarget.style.background="transparent",onClick:()=>k("builtin"),children:[(0,l.jsx)(n.Xh,{size:15}),e.addProvider]}),(0,l.jsxs)("button",{className:"flex flex-1 items-center justify-center gap-2 rounded-2xl px-4 py-3.5 transition-colors",style:{border:"0.5px solid var(--dsw-border-l3)",fontSize:14},onMouseEnter:e=>e.currentTarget.style.background="var(--dsw-hover)",onMouseLeave:e=>e.currentTarget.style.background="transparent",onClick:()=>k("custom"),children:[(0,l.jsx)(n.Xh,{size:15}),e.addCustomProvider]})]}),N?(0,l.jsx)(y,{mode:N,providers:eU,catalogModelIds:h,existingIds:a.map(e=>e.id),onClose:()=>k(null),onSaveBuiltin:eX,onSaveCustom:eZ,onOAuthLogin:eY}):null,ea&&(0,l.jsx)("div",{className:"modal-mask fixed inset-0 z-[120] flex items-center justify-center",onMouseDown:e=>{e.target===e.currentTarget&&eA()},children:(0,l.jsxs)("div",{className:"glass-modal flex flex-col gap-4 p-6",style:{width:460,maxWidth:"92vw",borderRadius:24,boxShadow:"var(--dsw-elevation-prominent)"},children:[(0,l.jsxs)("div",{style:{fontSize:15,fontWeight:600},children:[e.oauthLogin," \xb7 ",ea]}),em&&!ed?(0,l.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,l.jsx)("div",{style:{fontSize:13,color:"var(--dsw-label-primary)"},children:e.oauthDevicePrompt}),em.instructions?(0,l.jsx)("div",{style:{fontSize:12,color:"var(--dsw-label-tertiary)"},children:em.instructions}):null,(0,l.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,l.jsx)("a",{href:em.verificationUri,target:"_blank",rel:"noreferrer",className:"btn-primary-white",style:{fontSize:12.5,textDecoration:"none"},children:e.oauthOpenAuth}),em.userCode?(0,l.jsx)("button",{className:"btn-outline",style:{height:32},onClick:()=>{if(!em?.userCode)return;let e=em.userCode,a=()=>{ep(!0),setTimeout(()=>ep(!1),2e3)};navigator.clipboard.writeText(e).then(a).catch(()=>{let t=document.createElement("textarea");t.value=e,document.body.appendChild(t),t.select(),document.execCommand("copy"),t.remove(),a()})},children:eu?e.oauthCodeCopied:`${e.oauthDeviceCode}: ${em.userCode}`}):null]})]}):ei.length>0?(0,l.jsx)("div",{className:"flex flex-col gap-0.5",style:{fontSize:12,color:"var(--dsw-label-tertiary)"},children:ei.slice(-3).map((e,a)=>(0,l.jsx)("div",{className:"truncate",children:e},a))}):null,ed?(0,l.jsx)("div",{style:{fontSize:13,color:ed.ok?"var(--dsw-success)":"var(--dsw-danger)"},children:ed.ok?ea+" ✓":ed.msg}):el?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("div",{style:{fontSize:13.5,color:"var(--dsw-label-primary)"},children:el.message}),el.message.match(/https?:\/\/[^\s)]+/)&&(0,l.jsx)("a",{href:el.message.match(/https?:\/\/[^\s)]+/)[0],target:"_blank",rel:"noreferrer",className:"break-all",style:{fontSize:12.5,color:"var(--dsw-accent)"},children:el.message.match(/https?:\/\/[^\s)]+/)[0]}),el.options?.length?(0,l.jsx)("div",{className:"flex flex-col gap-1.5",children:el.options.map(e=>(0,l.jsx)("button",{className:"btn-outline",style:{height:34,justifyContent:"flex-start",textAlign:"left"},onClick:()=>{eO(e.value)},children:e.label},e.value))}):(0,l.jsx)("input",{autoFocus:!0,type:"secret"===el.type?"password":"text",value:en,onChange:e=>eo(e.target.value),placeholder:el.placeholder??"",className:"w-full rounded-xl px-3 py-2",style:{fontSize:13,background:"var(--dsw-hover)"},onKeyDown:e=>{"Enter"===e.key&&!e.nativeEvent.isComposing&&en.trim()&&eO(en.trim())}}),(0,l.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,l.jsx)("span",{style:{fontSize:12,color:"var(--dsw-label-caption)"},children:e.oauthWait}),(0,l.jsxs)("div",{className:"flex gap-2",children:[(0,l.jsx)("button",{className:"btn-outline",style:{height:32},onClick:()=>{eA()},children:e.oauthCancel}),!el.options?.length&&(0,l.jsx)("button",{className:"btn-primary-white",disabled:!en.trim(),style:{opacity:en.trim()?1:.5},onClick:()=>{eO(en.trim())},children:e.confirm})]})]})]}):(0,l.jsx)("div",{style:{fontSize:13,color:"var(--dsw-label-tertiary)"},children:e.oauthWait}),ed&&(0,l.jsx)("div",{className:"flex justify-end",children:(0,l.jsx)("button",{className:"btn-primary-white",onClick:()=>et(null),children:e.close})})]})})]})}let J="w-full rounded-xl px-3 py-2";function V(e){return 0===e.length?e:e[0].toUpperCase()+e.slice(1)}function q({label:e,children:a}){return(0,l.jsxs)("div",{children:[(0,l.jsx)("div",{className:"mb-1",style:{fontSize:12,color:"var(--dsw-label-caption)"},children:e}),a]})}let G={read:{zh:"读取文件",en:"Read files"},bash:{zh:"执行 Shell 命令",en:"Run shell commands"},powershell:{zh:"执行 PowerShell",en:"Run PowerShell"},edit:{zh:"编辑文件",en:"Edit files"},write:{zh:"写入文件",en:"Write files"},grep:{zh:"搜索文件内容",en:"Search file contents"},find:{zh:"按名称查找文件",en:"Find files by name"},ls:{zh:"列出目录内容",en:"List directories"}};function Q({toolPreset:e,onToolPresetChange:a,tools:t,onSetTools:s}){let{t:i,lang:r}=(0,v.s)(),n=new Set(t?.active??[]),o=t?.all??[];return(0,l.jsxs)("div",{className:"flex flex-col gap-5",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("div",{style:{fontSize:14,fontWeight:400},children:i.toolsSection}),(0,l.jsx)("div",{className:"mt-0.5",style:{fontSize:12.5,color:"var(--dsw-label-caption)"},children:i.toolsSectionDesc})]}),(0,l.jsx)(A,{title:i.securityToolPreset,desc:i.securityToolPresetDesc,children:(0,l.jsx)(O,{value:e,options:[{value:"readonly",label:i.toolReadonly},{value:"standard",label:i.toolStandard},{value:"full",label:i.toolFull}],onChange:e=>a(e)})}),0===o.length?(0,l.jsx)("div",{className:"rounded-2xl p-4",style:{border:"0.5px dashed var(--dsw-border-l3)",fontSize:12.5,color:"var(--dsw-label-caption)"},children:i.toolsNoSession}):(0,l.jsxs)("div",{className:"flex flex-col gap-2.5",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",style:{fontSize:12,color:"var(--dsw-label-caption)"},children:[(0,l.jsx)("span",{style:{fontWeight:600},children:i.toolsCurrentSession}),(0,l.jsx)("span",{children:i.toolsActiveCount.replace("{n}",String(n.size)).replace("{total}",String(o.length))})]}),o.map(e=>{let a,t=n.has(e.name),i=e.description||((a=G[e.name])?"zh"===r?a.zh:a.en:"");return(0,l.jsxs)("div",{className:"flex items-center gap-3 rounded-2xl px-4 py-2.5",style:{border:"0.5px solid var(--dsw-border-l2)"},children:[(0,l.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,l.jsx)("div",{style:{fontSize:13.5,fontWeight:500,fontFamily:"var(--font-mono)"},children:e.name}),i&&(0,l.jsx)("div",{className:"truncate",style:{fontSize:11.5,color:"var(--dsw-label-caption)"},children:i})]}),(0,l.jsx)("button",{className:"relative h-5 w-9 flex-none rounded-full transition-colors",style:{background:t?"var(--dsw-accent)":"var(--dsw-border-l3)"},role:"switch","aria-checked":t,"aria-label":e.name,disabled:!s||t&&n.size<=1,onClick:()=>{var a;return a=e.name,void(!s||s(n.has(a)?[...n].filter(e=>e!==a):[...n,a]))},children:(0,l.jsx)("span",{className:"absolute top-0.5 h-4 w-4 rounded-full bg-white transition-all",style:{left:t?18:2}})})]},e.name)})]})]})}function X({cwd:e,onOpenFileContent:a}){let{t}=(0,v.s)(),[i,r]=(0,s.useState)([]),n=(0,s.useCallback)(async()=>{let a=await fetch(`/api/skills${e?`?cwd=${encodeURIComponent(e)}`:""}`),t=await a.json();t.success&&r(t.data.skills)},[e]);(0,s.useEffect)(()=>{n()},[n]);let o=async a=>{let t=await fetch("/api/skills",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"toggle",filePath:a.filePath,disabled:!a.disabled,cwd:e})});(await t.json()).success&&n()},d=async t=>{let l=await fetch("/api/skills",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"read",filePath:t.filePath,cwd:e})}),s=await l.json();s.success&&a?.(t.filePath,s.data.content)},[c,u]=(0,s.useState)(null),p=async a=>{if(!window.confirm(t.confirmDeleteSkill.replace("{name}",a.name)))return;u(null);let l=await fetch("/api/skills",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"delete",filePath:a.filePath,cwd:e})}),s=await l.json();s.success?n():u(s.error||t.toastError)};return(0,l.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,l.jsx)("div",{style:{fontSize:12,color:"var(--dsw-label-caption)"},children:t.skillsDesc}),c&&(0,l.jsx)("div",{role:"alert",className:"rounded-lg px-3 py-2",style:{fontSize:12.5,background:"var(--dsw-hover)",color:"var(--dsw-danger)"},children:c}),0===i.length&&(0,l.jsx)("div",{style:{fontSize:13,color:"var(--dsw-label-caption)"},children:"—"}),(0,l.jsx)("div",{className:"flex flex-col gap-2",children:i.map(e=>{let a;return(0,l.jsx)("div",{className:"rounded-2xl px-4 py-3",style:{border:"0.5px solid var(--dsw-border-l2)"},children:(0,l.jsxs)("div",{className:"flex items-center gap-3",children:[(0,l.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{style:{fontSize:13.5,fontWeight:500},children:e.name}),(0,l.jsx)("span",{className:"rounded-full px-2 py-0.5",style:{fontSize:10,background:"var(--dsw-hover)",color:"var(--dsw-label-tertiary)"},children:"global"===(a=e.scope)?t.scopeGlobal:"project"===a?t.scopeProject:t.scopePackage})]}),(0,l.jsx)("div",{className:"mt-0.5 truncate",style:{fontSize:12,color:"var(--dsw-label-caption)"},title:e.description,children:e.description})]}),(0,l.jsx)("button",{className:"rounded-lg px-2.5 py-1",style:{fontSize:11.5,color:"var(--dsw-label-tertiary)"},onClick:()=>d(e),children:t.viewSkillFile}),"package"!==e.scope&&(0,l.jsx)("button",{className:"rounded-lg px-2.5 py-1",style:{fontSize:11.5,color:"var(--dsw-danger)"},title:t.deleteSkillHint,onClick:()=>void p(e),children:t.delete}),"package"===e.scope&&(0,l.jsx)("span",{style:{fontSize:10.5,color:"var(--dsw-label-caption)"},title:t.skillDeletePackageHint,children:t.skillDeletePackageHint}),(0,l.jsx)("button",{className:"relative h-5 w-9 flex-none rounded-full transition-colors",style:{background:e.disabled?"var(--dsw-border-l3)":"var(--dsw-accent)"},role:"switch","aria-checked":!e.disabled,onClick:()=>o(e),children:(0,l.jsx)("span",{className:"absolute top-0.5 h-4 w-4 rounded-full bg-white transition-all",style:{left:e.disabled?2:18}})})]})},e.filePath)})})]})}function Z({cwd:e}){let{t:a,lang:t}=(0,v.s)(),i=e=>window.confirm(a.confirmUninstallPackage.replace("{source}",e)),[r,o]=(0,s.useState)("config"),[d,c]=(0,s.useState)([]),[u,p]=(0,s.useState)([]),[m,h]=(0,s.useState)(""),[x,g]=(0,s.useState)(new Set),[f,b]=(0,s.useState)(""),[y,j]=(0,s.useState)(!1),[w,S]=(0,s.useState)(!1),[N,k]=(0,s.useState)(null),[_,C]=(0,s.useState)(null),[z,P]=(0,s.useState)(null),M=(0,s.useRef)(null);(0,s.useEffect)(()=>{let e=e=>{e.target instanceof Node&&M.current?.contains(e.target)||P(null)};return window.addEventListener("pointerdown",e),()=>window.removeEventListener("pointerdown",e)},[]);let E=(0,s.useCallback)(async()=>{let a=await fetch(`/api/plugins${e?`?cwd=${encodeURIComponent(e)}`:""}`),t=await a.json();t.success&&(c(t.data.packages),p(t.data.extensions))},[e]);(0,s.useEffect)(()=>{E()},[E]);let T=(e,t)=>{C({ok:e,msg:t??(e?a.toastSaved:a.toastError),loading:!1}),setTimeout(()=>C(null),2600)},$=async(t,l={},s,i,r)=>{S(!0),s&&k(s),i&&C({ok:!0,msg:i,loading:!0});try{let s=await fetch("/api/plugins",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:t,cwd:e,...l})}),i=await s.json();if(i.success)return T(!0,r??("toggle"===t?l.disabled?a.disabled:a.enabled:a.toastSaved)),await E(),!0;return T(!1,i.error??a.toastError),!1}catch(e){return T(!1,e?.message??a.toastError),!1}finally{S(!1),k(null)}},R=e=>g(a=>{let t=new Set(a);return t.has(e)?t.delete(e):t.add(e),t}),F=e=>{if(e.startsWith("builtin:"))return"builtin";let a=e.replace(/\\/g,"/");return a.includes("/.pi/agent/npm/")||a.includes("/.pi/agent/git/")?"package":a.includes("/.pi/agent/")?"global":(a.includes("/.pi/"),"project")},L=u.filter(e=>"package"!==F(e.path)),D=m.trim().toLowerCase(),O=[...d.map(e=>({key:`pkg:${e.scope}:${e.source}`,kind:"package",name:e.source.replace(/^npm:/,"").replace(/^git[^:]*:/,""),p:e})),...L.map(e=>({key:`ext:${e.path}`,kind:"extension",name:e.name,e}))].filter(e=>!D||e.name.toLowerCase().includes(D));return(0,l.jsxs)("div",{className:"flex flex-col gap-5",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("div",{style:{fontSize:20,fontWeight:600,color:"var(--dsw-label-primary)"},children:a.setPlugins}),(0,l.jsx)("div",{className:"mt-1",style:{fontSize:13,color:"var(--dsw-label-tertiary)"},children:a.pluginPageDesc})]}),_&&(0,l.jsxs)("div",{className:"fixed top-6 left-1/2 -translate-x-1/2 z-[9999] flex items-center gap-2.5 px-4 py-2 rounded-xl shadow-2xl transition-all pointer-events-none",style:{fontSize:13,fontWeight:500,background:"var(--dsw-surface-l1, #1e2025)",border:_.loading?"1px solid var(--dsw-border-l3)":_.ok?"1px solid rgba(34,197,94,.4)":"1px solid rgba(236,19,19,.4)",color:_.loading?"var(--dsw-label-primary)":_.ok?"var(--dsw-success)":"var(--dsw-danger)",backdropFilter:"blur(12px)",boxShadow:"0 10px 30px rgba(0,0,0,0.5)"},children:[_.loading&&(0,l.jsx)("span",{className:"h-3.5 w-3.5 flex-none animate-spin rounded-full border-2 border-current border-t-transparent"}),(0,l.jsx)("span",{children:_.msg})]}),(0,l.jsxs)("div",{className:"hairline-b flex items-center gap-6",children:[(0,l.jsx)("button",{className:"settings-tab-underline","data-active":"config"===r,onClick:()=>o("config"),children:a.pluginConfig}),(0,l.jsx)("button",{className:"settings-tab-underline","data-active":"list"===r,onClick:()=>o("list"),children:a.pluginList})]}),"config"===r&&(0,l.jsxs)("div",{className:"flex flex-col gap-2.5",children:[(0,l.jsxs)("div",{className:"flex flex-col gap-2 rounded-2xl px-4 py-3",style:{border:"0.5px solid var(--dsw-border-l2)"},children:[(0,l.jsx)("div",{style:{fontSize:13.5,fontWeight:500},children:a.addPackage}),(0,l.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,l.jsx)("input",{value:f,onChange:e=>b(e.target.value),placeholder:a.addPackagePlaceholder,className:"min-w-0 flex-1 rounded-xl px-3 py-2",style:{fontSize:13,background:"var(--dsw-hover)",border:"0.5px solid var(--dsw-border-l2)",fontFamily:"var(--font-mono)"},onKeyDown:e=>{"Enter"===e.key&&f.trim()&&!w&&$("install",{source:f.trim(),local:y},void 0,a.installing,a.installSuccess).then(e=>{e&&b("")})}}),(0,l.jsxs)("label",{className:"flex items-center gap-1.5",style:{fontSize:12.5,color:"var(--dsw-label-secondary)"},children:[(0,l.jsx)("input",{type:"checkbox",checked:y,onChange:e=>j(e.target.checked),disabled:!e}),a.installLocal]}),(0,l.jsx)("button",{className:"btn-primary-white",style:{height:32,padding:"0 14px"},disabled:!f.trim()||w,onClick:()=>void $("install",{source:f.trim(),local:y},void 0,a.installing,a.installSuccess).then(e=>{e&&b("")}),children:a.install})]})]}),(0,l.jsx)("div",{className:"flex justify-end",children:(0,l.jsxs)("button",{className:"btn-outline",style:{height:30,fontSize:12.5},disabled:w,onClick:async()=>{S(!0);try{let t=await fetch("/api/plugins",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"reload",cwd:e})}),l=await t.json();T(l.success,l.success?a.reloadedSessions.replace("{loaders}",String(l.data?.loaders??0)).replace("{sessions}",String(l.data?.sessions??0)):l.error),l.success&&await E()}finally{S(!1)}},children:[(0,l.jsx)(n.Ct,{size:13})," ",a.reloadExtensions]})}),0===L.length&&(0,l.jsx)("div",{style:{fontSize:12.5,color:"var(--dsw-label-caption)"},children:a.extensionsEmpty}),L.map(e=>{let t,s=`ext:${e.path}`,i=x.has(s),r=F(e.path);return(0,l.jsxs)("div",{className:"rounded-2xl",style:{border:"0.5px solid var(--dsw-border-l2)"},children:[(0,l.jsxs)("button",{className:"flex w-full items-center gap-3 px-4 py-3.5 text-left",onClick:()=>R(s),children:[(0,l.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",style:{fontSize:14,fontWeight:500},children:[(0,l.jsx)("span",{children:e.name}),e.error&&(0,l.jsx)("span",{className:"rounded px-1.5 py-0.5",style:{fontSize:10.5,color:"var(--dsw-danger)",background:"var(--pw-danger-soft, rgba(236,19,19,.12))"},children:a.extensionLoadError}),!e.error&&(t=!0===e.disabled,(0,l.jsxs)("span",{className:"flex flex-none items-center gap-1.5 rounded-md px-1.5 py-0.5",style:{fontSize:10.5,...t?{background:"var(--dsw-selector)",color:"var(--dsw-label-tertiary)"}:{background:"rgba(34,197,94,.12)",color:"var(--dsw-success)"}},children:[(0,l.jsx)("span",{className:"h-1.5 w-1.5 rounded-full",style:{background:t?"var(--dsw-label-tertiary)":"var(--dsw-success)"}}),t?a.disabled:a.enabled]}))]}),(0,l.jsx)("div",{className:"truncate",style:{fontSize:12,color:e.error?"var(--dsw-danger)":"var(--dsw-label-caption)"},title:e.error??e.path,children:e.error??e.path})]}),(0,l.jsx)("span",{className:"chevron",style:{color:"var(--dsw-label-tertiary)",display:"inline-flex",transform:i?"rotate(180deg)":"none",transition:"transform 120ms var(--ds-ease-in-out)"},children:(0,l.jsx)(n.Cd,{size:14})})]}),i&&(0,l.jsxs)("div",{className:"hairline-t flex flex-col gap-1.5 px-4 py-3",style:{fontSize:12,color:"var(--dsw-label-secondary)"},children:[(0,l.jsx)("div",{className:"flex items-center gap-2",children:(0,l.jsx)("span",{className:"rounded-md px-1.5 py-0.5",style:{fontSize:10.5,border:"0.5px solid var(--dsw-border-l3)",color:"var(--dsw-label-tertiary)"},children:"global"===r?a.scopeGlobal:"project"===r?a.scopeProject:"builtin"===r?a.promptToolBuiltin:a.scopePackage})}),(0,l.jsx)("div",{className:"break-all",style:{fontFamily:"var(--font-mono)",fontSize:11.5,color:"var(--dsw-label-caption)"},children:e.path})]})]},s)})]}),"list"===r&&(0,l.jsxs)("div",{className:"flex flex-col gap-3.5",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2.5 rounded-xl px-3.5 py-2.5 transition-colors",style:{background:"var(--dsw-hover)",border:"0.5px solid var(--dsw-border-l2)"},children:[(0,l.jsx)(n.FG,{size:15,style:{color:"var(--dsw-label-caption)"}}),(0,l.jsx)("input",{value:m,onChange:e=>h(e.target.value),placeholder:a.searchPlugins,className:"w-full bg-transparent outline-none",style:{fontSize:13,color:"var(--dsw-label-primary)"}})]}),(0,l.jsxs)("div",{className:"flex items-baseline gap-2",children:[(0,l.jsx)("span",{style:{fontSize:13.5,fontWeight:600,color:"var(--dsw-label-primary)"},children:a.pluginList}),(0,l.jsx)("span",{style:{fontSize:12,color:"var(--dsw-label-caption)"},children:O.length})]}),0===O.length?(0,l.jsx)("div",{style:{fontSize:12.5,color:"var(--dsw-label-caption)"},children:a.packagesEmpty}):(0,l.jsx)("div",{className:"grid grid-cols-1 items-start sm:grid-cols-2 gap-2.5",children:O.map(e=>{let s=x.has(e.key),r="package"===e.kind?!0===e.p.disabled:!0===e.e.disabled,o=z===e.key,d=N===e.key;return(0,l.jsxs)("div",{className:"flex flex-col rounded-xl transition-colors",style:{background:"var(--dsw-hover)",border:"0.5px solid var(--dsw-border-l2)"},children:[(0,l.jsxs)("div",{className:"flex min-w-0 items-center justify-between gap-2 px-3.5",style:{height:44},children:[(0,l.jsx)("span",{className:"min-w-0 flex-1 truncate font-medium text-[var(--dsw-label-primary)] cursor-pointer select-none",style:{fontSize:13.5},onClick:()=>R(e.key),title:e.name,children:e.name}),(0,l.jsxs)("div",{ref:o?M:void 0,className:"relative flex-none",children:[(0,l.jsxs)("button",{type:"button",className:"flex min-w-[86px] items-center justify-center rounded-lg px-3 transition-colors cursor-pointer select-none disabled:cursor-wait",style:{gap:7,height:30,background:"rgba(255, 255, 255, 0.04)",border:"1px solid rgba(255, 255, 255, 0.08)"},"aria-haspopup":"menu","aria-expanded":o,disabled:d,onClick:a=>{a.stopPropagation(),P(a=>a===e.key?null:e.key)},children:[d?(0,l.jsx)("span",{className:"h-3 w-3 flex-none animate-spin rounded-full border border-[var(--dsw-label-tertiary)] border-t-transparent"}):r?null:(0,l.jsx)("span",{className:"h-2 w-2 flex-none rounded-full",style:{background:"#22c55e",boxShadow:"0 0 5px rgba(34, 197, 94, 0.4)"}}),(0,l.jsx)("span",{style:{fontSize:12,fontWeight:500,color:r?"var(--dsw-label-tertiary)":"var(--dsw-success)",lineHeight:1},children:r?a.disabled:a.enabled}),(0,l.jsx)(n.Cd,{size:13,style:{color:"var(--dsw-label-tertiary)",transform:o?"rotate(180deg)":"none",transition:"transform 140ms ease"}})]}),o&&(0,l.jsxs)("div",{className:"popover absolute right-0 top-full mt-1.5 z-50 w-36 py-1 rounded-xl shadow-xl",role:"menu",style:{background:"var(--dsw-surface-l1, #1e2025)",border:"0.5px solid var(--dsw-border-l3)",boxShadow:"0 10px 25px -5px rgba(0, 0, 0, 0.5), 0 8px 10px -6px rgba(0, 0, 0, 0.5)"},children:[(0,l.jsx)("button",{type:"button",role:"menuitem",className:"flex w-full items-center gap-2 px-3 py-1.5 text-left text-xs transition-colors hover:bg-[var(--dsw-hover)] cursor-pointer",style:{color:r?"var(--dsw-success)":"var(--dsw-label-primary)"},disabled:w,onClick:()=>{P(null),$("toggle","package"===e.kind?{kind:"package",source:e.p.source,scope:e.p.scope,disabled:!r}:{kind:"extension",path:e.e.path,disabled:!r},e.key,r?"zh"===t?"正在启用...":"Enabling...":"zh"===t?"正在停用...":"Disabling...",r?a.enabled:a.disabled)},children:r?a.enablePlugin:a.disablePlugin}),"package"===e.kind&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("button",{type:"button",role:"menuitem",className:"flex w-full items-center gap-2 px-3 py-1.5 text-left text-xs transition-colors hover:bg-[var(--dsw-hover)] cursor-pointer disabled:opacity-50",style:{color:"var(--dsw-label-secondary)"},disabled:w,onClick:()=>{P(null),$("update",{source:e.p.source},e.key,a.updating,a.updateSuccess)},children:a.update}),(0,l.jsx)("button",{type:"button",role:"menuitem",className:"flex w-full items-center gap-2 px-3 py-1.5 text-left text-xs transition-colors hover:bg-[var(--dsw-hover)] cursor-pointer disabled:opacity-50",style:{color:"var(--dsw-danger)"},disabled:w,onClick:()=>{P(null),i(e.p.source)&&$("remove",{source:e.p.source,local:"project"===e.p.scope},e.key,a.uninstalling,a.uninstallSuccess)},children:a.uninstall})]}),(0,l.jsx)("div",{className:"my-1 border-t border-[var(--dsw-border-l1)]"}),(0,l.jsx)("button",{type:"button",role:"menuitem",className:"flex w-full items-center gap-2 px-3 py-1.5 text-left text-xs transition-colors hover:bg-[var(--dsw-hover)] cursor-pointer",style:{color:"var(--dsw-label-tertiary)"},onClick:()=>{R(e.key),P(null)},children:s?"zh"===t?"收起详情":"Hide details":"zh"===t?"查看详情":"View details"})]})]})]}),s&&(0,l.jsx)("div",{className:"hairline-t flex flex-col gap-2 px-3.5 py-3",style:{fontSize:12},children:"package"===e.kind?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("div",{className:"break-all",style:{color:"var(--dsw-label-tertiary)",fontSize:11.5},children:e.p.source}),(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsx)("span",{className:"rounded-md px-1.5 py-0.5",style:{fontSize:10.5,border:"0.5px solid var(--dsw-border-l3)",color:"var(--dsw-label-tertiary)"},children:"user"===e.p.scope?a.scopeGlobal:a.scopeProject}),(0,l.jsxs)("span",{style:{color:"var(--dsw-label-caption)",fontSize:11.5},children:[a.resources,": ",e.p.resources.extensions," ext \xb7 ",e.p.resources.skills," skills \xb7 ",e.p.resources.prompts," prompts"]})]}),(0,l.jsxs)("div",{className:"flex items-center justify-end gap-3 pt-1",children:[(0,l.jsx)("button",{disabled:w,style:{fontSize:12,color:"var(--dsw-label-secondary)"},className:"hover:underline cursor-pointer disabled:opacity-50",onClick:()=>void $("update",{source:e.p.source},e.key,a.updating,a.updateSuccess),children:a.update}),(0,l.jsx)("button",{disabled:w,style:{fontSize:12,color:"var(--dsw-danger)"},className:"hover:underline cursor-pointer disabled:opacity-50",onClick:()=>{i(e.p.source)&&$("remove",{source:e.p.source,local:"project"===e.p.scope},e.key,a.uninstalling,a.uninstallSuccess)},children:a.uninstall})]})]}):(0,l.jsx)("div",{className:"break-all",style:{fontFamily:"var(--font-mono)",fontSize:11.5,color:"var(--dsw-label-caption)"},children:e.e.path})})]},e.key)})})]})]})}}}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2716],{2155:(e,t,n)=>{n.d(t,{Q:()=>d});var a=n(5155),l=n(2115),i=n(9992),r=n(1859),s=n(2253),o=n(1135);let d=(0,l.memo)(function({tree:e,expanded:t,fresh:n,filter:i="",onlyChanges:s=!1,selectedPath:d,onToggleDir:h,onExpandLazy:p,onOpenFile:u,onReference:f,onOpenEditor:m,revealPath:x,revealKey:w,emptyText:v}){let{t:g}=(0,r.s)(),y=(0,l.useMemo)(()=>(0,o.dG)(e,t,{onlyChanges:s,filter:i}),[e,t,s,i]),b=(0,l.useRef)(null),[j,k]=(0,l.useState)({top:0,height:600}),[N,C]=(0,l.useState)(null);(0,l.useEffect)(()=>{let e=b.current;if(!e)return;let t=()=>k({top:e.scrollTop,height:e.clientHeight});t(),e.addEventListener("scroll",t,{passive:!0});let n=new ResizeObserver(t);return n.observe(e),()=>{e.removeEventListener("scroll",t),n.disconnect()}},[]),(0,l.useEffect)(()=>{if(!x)return;let e=y.findIndex(e=>e.node.path===x);if(e<0)return;C((0,o.SG)(y[e].node));let t=b.current;if(!t)return;let n=22*e;(n<t.scrollTop||n+22>t.scrollTop+t.clientHeight)&&t.scrollTo({top:Math.max(0,n-t.clientHeight/2)})},[x,w,y]);let $=(0,l.useCallback)(e=>{let t=e.node;"dir"===t.kind?(t.lazy&&!e.expanded&&p&&p(t.path),h(t.path)):u(t)},[p,h,u]),S=Math.max(0,Math.floor(j.top/22)-12),z=Math.min(y.length,Math.ceil((j.top+j.height)/22)+12),M=y.slice(S,z);return(0,a.jsx)("div",{ref:b,className:"pw-tree min-h-0 flex-1 overflow-x-hidden overflow-y-auto outline-none",tabIndex:0,role:"tree",onKeyDown:e=>{if(!y.length)return;let t=Math.max(0,y.findIndex(e=>(0,o.SG)(e.node)===N)),n=y[t],a=e=>{let t=y[Math.max(0,Math.min(y.length-1,e))];C((0,o.SG)(t.node));let n=b.current;if(!n)return;let a=22*Math.max(0,Math.min(y.length-1,e));a<n.scrollTop?n.scrollTop=a:a+22>n.scrollTop+n.clientHeight&&(n.scrollTop=a+22-n.clientHeight)};if("ArrowDown"===e.key)e.preventDefault(),a(null===N?0:t+1);else if("ArrowUp"===e.key)e.preventDefault(),a(t-1);else if("ArrowRight"===e.key&&n)e.preventDefault(),"dir"!==n.node.kind||n.expanded?a(t+1):$(n);else if("ArrowLeft"===e.key&&n)if(e.preventDefault(),"dir"===n.node.kind&&n.expanded)h(n.node.path);else{let e=n.node.path.includes("/")?n.node.path.slice(0,n.node.path.lastIndexOf("/")):"",t=y.findIndex(t=>"dir"===t.node.kind&&t.node.path===e);t>=0&&a(t)}else("Enter"===e.key||" "===e.key)&&n?(e.preventDefault(),$(n)):"Home"===e.key?(e.preventDefault(),a(0)):"End"===e.key&&(e.preventDefault(),a(y.length-1))},onBlur:e=>{e.currentTarget.contains(e.relatedTarget)||C(null)},children:0===y.length?(0,a.jsx)("div",{style:{fontSize:12.5,color:"var(--dsw-label-caption)",padding:"10px 12px"},children:v??g.filesEmpty}):(0,a.jsx)("div",{style:{height:22*y.length,position:"relative"},children:M.map((e,t)=>(0,a.jsx)(c,{row:e,top:(S+t)*22,fresh:"file"===e.node.kind&&!!n?.has(e.node.path),selected:"file"===e.node.kind&&d===e.node.path,focused:N===(0,o.SG)(e.node),onActivate:$,onOpenFolder:u,onFocusRow:C,onReference:f,onOpenEditor:m,pendingLabel:g.growthPending,lazyLabel:g.growthLazyDir,deletedLabel:g.growthStatD,referenceLabel:g.fileReference,editorLabel:g.fileOpenEditor,openFolderLabel:g.viewerOpenFolder},(0,o.SG)(e.node)))})})}),c=(0,l.memo)(function({row:e,top:t,fresh:n,selected:l,focused:r,onActivate:d,onOpenFolder:c,onFocusRow:h,onReference:p,onOpenEditor:u,pendingLabel:f,lazyLabel:m,deletedLabel:x,referenceLabel:w,editorLabel:v,openFolderLabel:g}){var y;let{node:b,depth:j,expanded:k}=e,N="dir"===b.kind,C="A"===(y=b.status)?"var(--dsw-success)":"M"===y?"var(--dsw-warn)":"D"===y?"var(--dsw-danger)":"R"===y?"var(--dsw-accent)":void 0,$=N?function(e){let t=e.counts;if(!t)return null;let n=t.added+t.modified+t.deleted+t.renamed;if(t.pending&&!n)return{text:"…",color:"var(--dsw-label-caption)"};if(!n)return null;let a=t.deleted>=t.added&&t.deleted>=t.modified?"var(--dsw-danger)":t.added>=t.modified?"var(--dsw-success)":"var(--dsw-warn)";return{text:String(n),color:a}}(b):null,S=!!(b.lazy&&!b.counts),z=[N?`${b.path}/`:b.path,"D"===b.status?x:"","R"===b.status&&b.from?`← ${b.from}`:"",b.pending?f:"",S?m:""].filter(Boolean).join("\n");return(0,a.jsxs)("div",{className:"pw-tree-row group/row",role:"treeitem","aria-expanded":N?k:void 0,"aria-selected":l,"data-selected":l||void 0,"data-focused":r||void 0,"data-fresh":n?b.status??"M":void 0,"data-status":b.status,"data-pending":b.pending||void 0,"data-lazy":S?"1":void 0,style:{top:t,paddingLeft:12*j+6},title:z,onClick:()=>{h((0,o.SG)(b)),d(e)},onDoubleClick:()=>{N&&c(b)},children:[(0,a.jsx)("span",{className:"pw-tree-chevron","aria-hidden":!0,children:N&&(0,a.jsx)(i.Yq,{size:10,style:{transform:k?"rotate(90deg)":void 0,transition:"transform var(--ds-duration-fast)"}})}),(0,a.jsx)("img",{className:"pw-tree-icon","data-kind":b.kind,src:N?(0,s.Q)(b.name,k):(0,s.s)(b.name),alt:"",draggable:!1}),(0,a.jsxs)("span",{className:"pw-tree-name",style:{color:C,textDecoration:"D"===b.status?"line-through":void 0},children:[b.name,N?"/":"","D"===b.status&&(0,a.jsxs)("span",{className:"pw-tree-from",children:["(",x,")"]}),"R"===b.status&&b.from&&(0,a.jsxs)("span",{className:"pw-tree-from",children:["← ",b.from.split("/").pop()]})]}),b.pending&&(0,a.jsx)("span",{className:"pw-tree-pulse","aria-label":f}),!b.lazy&&(p||!N&&u||N)&&(0,a.jsxs)("span",{className:"pw-tree-actions",children:[N&&(0,a.jsx)("button",{type:"button",className:"icon-btn",style:{width:18,height:18,borderRadius:5},title:g,"aria-label":`${g}: ${b.path}`,onClick:e=>{e.stopPropagation(),c(b)},children:(0,a.jsx)(i.pH,{size:11})}),p&&(0,a.jsx)("button",{type:"button",className:"icon-btn",style:{width:18,height:18,borderRadius:5},title:w,onClick:e=>{e.stopPropagation(),p(N?`${b.path.replace(/[\\/]+$/,"")}/`:b.path)},children:(0,a.jsx)(i.o_,{size:11})}),!N&&u&&(0,a.jsx)("button",{type:"button",className:"icon-btn",style:{width:18,height:18,borderRadius:5},title:v,onClick:e=>{e.stopPropagation(),u(b.path)},children:(0,a.jsx)(i.lx,{size:11})})]}),!N&&b.status&&(b.add||b.del)?(0,a.jsxs)("span",{className:"pw-tree-stat",children:[b.add?(0,a.jsxs)("span",{style:{color:"var(--dsw-success)"},children:["+",b.add]}):null,b.del?(0,a.jsxs)("span",{style:{color:"var(--dsw-danger)"},children:["−",b.del]}):null]}):null,!N&&b.status&&(0,a.jsx)("span",{className:"pw-tree-badge",style:{color:C,borderColor:C},children:b.status}),$&&(0,a.jsx)("span",{className:"pw-tree-badge",style:{color:$.color,borderColor:$.color},children:$.text})]})})},2716:(e,t,n)=>{n.r(t),n.d(t,{FileViewer:()=>y});var a=n(5155),l=n(2115),i=n(8426),r=n(3437),s=n(7890),o=n(8476),d=n(1859),c=n(9665);let h=(0,l.memo)(function({lines:e,language:t,folded:n,handle:i,initialChange:r}){let{t:s}=(0,d.s)(),[o,h]=(0,l.useState)(()=>new Set),p=(0,l.useRef)(null),[u,f]=(0,l.useState)({top:0,height:800}),[m,x]=(0,l.useState)(-1),w=(0,l.useRef)(new Map);(0,l.useEffect)(()=>h(new Set),[e]);let{rows:v,blocks:g}=(0,l.useMemo)(()=>(function(e,t,n){let a=[],l=[],i=e=>"add"===e.kind||"del"===e.kind,r=-1,s=-1;for(let t=0;t<e.length;t+=1)i(e[t])&&(r<0&&(r=t),s=t);let o=0,d=!1;for(;o<e.length;){let c=e[o];if("hunk"===c.kind||"file"===c.kind){o+=1;continue}if(i(c)){d||l.push(a.length),a.push({kind:"line",line:c,index:o}),d=!0,o+=1;continue}d=!1;let h=o;for(;h<e.length&&"ctx"===e[h].kind;)h+=1;let p=h-o,u=r<0||r>=o?0:3,f=s<h?0:3;if(!t||n.has(o)||p<=u+f+2)for(let t=o;t<h;t+=1)a.push({kind:"line",line:e[t],index:t});else{for(let t=o;t<o+u;t+=1)a.push({kind:"line",line:e[t],index:t});a.push({kind:"fold",from:o,count:p-u-f});for(let t=h-f;t<h;t+=1)a.push({kind:"line",line:e[t],index:t})}o=h}return{rows:a,blocks:l}})(e,n,o),[e,n,o]),y=(0,l.useMemo)(()=>String(function(e){let t=1;for(let n of e){let e=n.new??n.old??0;e>t&&(t=e)}return t}(e)).length,[e]),b=!!t&&v.length<=6e3;(0,l.useEffect)(()=>{let e=p.current;if(!e)return;let t=()=>f({top:e.scrollTop,height:e.clientHeight});t(),e.addEventListener("scroll",t,{passive:!0});let n=new ResizeObserver(t);return n.observe(e),()=>{e.removeEventListener("scroll",t),n.disconnect()}},[]);let j=(0,l.useCallback)(e=>{let t=p.current,n=g[e];t&&void 0!==n&&(x(e),t.scrollTo({top:Math.max(0,20*n-t.clientHeight/3),behavior:"smooth"}))},[g]);(0,l.useImperativeHandle)(i,()=>({nextChange:()=>j(Math.min(g.length-1,m+1)),prevChange:()=>j(Math.max(0,m-1))}),[g.length,m,j]);let k=(0,l.useRef)(!1);(0,l.useEffect)(()=>{k.current=!1},[e]),(0,l.useEffect)(()=>{if(k.current||!r||!g.length)return;k.current=!0;let e=p.current;e&&(e.scrollTop=Math.max(0,20*g[0]-e.clientHeight/3),x(0))},[g,r,v]);let N=Math.max(0,Math.floor(u.top/20)-20),C=Math.min(v.length,Math.ceil((u.top+u.height)/20)+20);return(0,a.jsxs)("div",{className:"pw-fdiff relative min-h-0 flex-1",children:[(0,a.jsx)("div",{ref:p,className:"pw-fdiff-scroll h-full overflow-auto",children:(0,a.jsx)("div",{style:{height:20*v.length,position:"relative",minWidth:"100%"},children:v.slice(N,C).map((e,n)=>{let l=(N+n)*20;if("fold"===e.kind)return(0,a.jsx)("button",{type:"button",className:"pw-fdiff-fold",style:{top:l},onClick:()=>h(t=>new Set(t).add(e.from)),children:s.viewerFoldedLines.replace("{n}",String(e.count))},`f${e.from}`);let i=e.line,r=(e=>{if(!b||!e.trim())return null;let n=w.current.get(e);if(void 0!==n)return n;let a=(0,c.NK)(e,t);return w.current.size>5e3&&w.current.clear(),w.current.set(e,a),a})(i.text);return(0,a.jsxs)("div",{className:"pw-fdiff-row","data-kind":i.kind,style:{top:l},children:[(0,a.jsxs)("span",{className:"pw-fdiff-gutter",style:{width:`${2*y+3}ch`},children:[(0,a.jsx)("span",{children:"add"===i.kind?"":String(i.old??"").padStart(y)}),(0,a.jsx)("span",{children:"del"===i.kind?"":String(i.new??"").padStart(y)})]}),(0,a.jsx)("span",{className:"pw-fdiff-sign",children:"add"===i.kind?"+":"del"===i.kind?"−":" "}),(0,a.jsx)("span",{className:"pw-fdiff-text hljs",children:r?(0,a.jsx)("span",{dangerouslySetInnerHTML:{__html:r}}):i.text})]},e.index)})})}),v.length>0&&g.length>0&&(0,a.jsx)("div",{className:"pw-fdiff-ticks","aria-hidden":!0,children:g.map((e,t)=>{let n=v[e],l=n?.kind==="line"?n.line.kind:"add";return(0,a.jsx)("span",{className:"pw-fdiff-tick","data-kind":l,"data-current":t===m||void 0,style:{top:`${e/v.length*100}%`},onClick:()=>j(t)},t)})})]})});var p=n(2155),u=n(9992),f=n(2253),m=n(1135);let x=new Map;async function w(e){let t=await fetch(e),n=await t.json();if(!t.ok||!n.success){let e=Error(n.error||`request failed (${t.status})`);throw e.status=t.status,e}return n.data}function v(e){let t=x.get(e);return!t&&((t=w(e)).catch(()=>x.delete(e)),x.set(e,t),x.size>200&&x.delete(x.keys().next().value)),t}function g({content:e,name:t}){let n=(0,l.useMemo)(()=>(0,c.wY)(e,(0,c.f3)(t)),[e,t]),i=e.split("\n").length,r=`${String(i).length+1}ch`;return(0,a.jsxs)("div",{className:"flex min-h-0 flex-1 overflow-auto",style:{fontFamily:"var(--font-mono)",fontSize:12,lineHeight:"20px"},children:[(0,a.jsx)("pre",{"aria-hidden":!0,className:"flex-none select-none py-2 pl-3 pr-2 text-right",style:{width:r,minWidth:r,color:"var(--dsw-label-caption)",margin:0,position:"sticky",left:0,background:"var(--dsw-glass-modal)"},children:Array.from({length:i},(e,t)=>t+1).join("\n")}),null!==n?(0,a.jsx)("pre",{className:"hljs min-w-0 flex-1 py-2 pl-3 pr-4",style:{margin:0,background:"transparent",color:"var(--dsw-label-secondary)"},children:(0,a.jsx)("code",{dangerouslySetInnerHTML:{__html:n}})}):(0,a.jsx)("pre",{className:"min-w-0 flex-1 py-2 pl-3 pr-4",style:{margin:0,color:"var(--dsw-label-secondary)"},children:e})]})}function y({state:e,growth:t,cwd:n,onClose:x,onSelectTab:b,onCloseTab:j,onOpen:k,onReference:N,onOpenEditor:C}){let{t:$}=(0,d.s)(),[S,z]=(0,l.useState)(!1),[M,E]=(0,l.useState)("diff"),[D,R]=(0,l.useState)(!1),[L,T]=(0,l.useState)(!0),[F,I]=(0,l.useState)(!1),[A,H]=(0,l.useState)(""),[O,P]=(0,l.useState)(0),[U,_]=(0,l.useState)(""),[G,B]=(0,l.useState)(null),[K,W]=(0,l.useState)(null),[q,Q]=(0,l.useState)(null),[V,X]=(0,l.useState)([]),Y=(0,l.useRef)(null),J=(0,l.useRef)(null),Z=(0,l.useRef)(null),ee=e.tabs.find(t=>t.path===e.active)??null,et=(0,l.useMemo)(()=>ee?t.changes.find(e=>e.path===ee.path)??null:null,[ee,t.changes]),en=!!(ee&&/\.(md|mdx|markdown)$/i.test(ee.path)),ea=t.range;(0,l.useEffect)(()=>{R(!1),ei(null)},[e.active]),(0,l.useEffect)(()=>{!D&&ee&&E(et&&!ee.lazy?"diff":en?"render":"content")},[ee,et,en,D]);let[el,ei]=(0,l.useState)(null),er=ee?.kind==="dir"?ee.path:el,es=!!er;(0,l.useEffect)(()=>{if(!er||!n||!ee){Q(null),X([]);return}let e=er.replace(/\/+$/,""),t=`dir|${e}`,a=!0;return X([]),(async()=>{try{let l=await w(`/api/files?cwd=${encodeURIComponent(n)}&path=${encodeURIComponent(e)}&offset=0`);a&&Q({key:t,...l})}catch(n){a&&Q({key:t,dir:e,entries:[],nextOffset:null,truncated:!1,error:n instanceof Error?n.message:$.viewerLoadFailed})}})(),()=>{a=!1}},[ee,er,n,$.viewerLoadFailed]);let eo=(0,l.useCallback)(async()=>{if(ee&&n&&q?.nextOffset)try{let e=await w(`/api/files?cwd=${encodeURIComponent(n)}&path=${encodeURIComponent(ee.path)}&offset=${q.nextOffset}`);Q({key:`dir|${ee.path}`,...e,entries:[...q.entries,...e.entries]})}catch{}},[ee,n,q]);(0,l.useEffect)(()=>{if(!ee||"dir"===ee.kind)return void W(null);let e=`${ee.path}|${M}|${ea?.from??""}|${ea?.to??""}|${et?.status??""}`,a=!0,l=t=>{a&&W({key:e,diff:null,content:null,binary:!1,truncated:!1,notice:null,error:null,...t})};if(void 0!==ee.staticContent)return l({content:ee.staticContent}),()=>{a=!1};if(!n)return void W(null);let i=`cwd=${encodeURIComponent(n)}`,r=async e=>{try{let t=await w(`/api/files?read=1&${i}&path=${encodeURIComponent(ee.path)}`);l({content:t.content,binary:t.binary,truncated:t.truncated,notice:e})}catch(e){if(400!==e.status)throw e;try{await w(`/api/files?${i}&path=${encodeURIComponent(ee.path)}&offset=0`),l({notice:null}),ei(ee.path);return}catch{}l({notice:"missing"})}},s=async(e,n)=>{try{let t=await v(`/api/growth?${i}&tree=${e}&path=${encodeURIComponent(ee.path)}&content=1`);l({content:t.content,binary:t.binary,truncated:t.truncated,notice:n})}catch(n){if(404===n.status){let n=t.selected?t.rounds.findIndex(e=>e.commit===t.selected.commit):t.rounds.length-1,a=t.rounds.slice(0,n+1).reverse().find(e=>e.changes.some(e=>e.path===ee.path||e.from===ee.path)),s=a?.changes.some(e=>"D"===e.status&&e.path===ee.path||"R"===e.status&&e.from===ee.path)?a.parentTree:a?.tree;if(s&&s!==e)try{let e=await v(`/api/growth?${i}&tree=${s}&path=${encodeURIComponent(ee.path)}&content=1`);l({content:e.content,binary:e.binary,truncated:e.truncated,notice:"historical"});return}catch(e){if(404!==e.status)throw e}await r("disk");return}throw n}};return(async()=>{try{if(ee.lazy||!ea)return void await r(ee.lazy&&t.rounds.length>0?"disk":null);if("diff"===M){if(!et)return void await s(ea.to,"nochange");let e=await v(`/api/growth?${i}&from=${ea.from}&to=${ea.to}&path=${encodeURIComponent(ee.path)}${ee.from??et.from?`&renamedFrom=${encodeURIComponent(ee.from??et.from??"")}`:""}`);if(e.binary)return void l({binary:!0});let t=(0,o.rj)(e.patch);if(!t)return void await s(ea.to,"nochange");l({diff:t,truncated:e.truncated,notice:"D"===et.status?"deleted":null});return}await s(ea.to,null)}catch(e){l({error:e instanceof Error?e.message:$.viewerLoadFailed})}})(),()=>{a=!1}},[ee,n,M,ea,et,t.rounds,t.selected,$.viewerLoadFailed]),(0,l.useEffect)(()=>{if(!e.open)return;let t=t=>{let n=t.target,a=n&&("INPUT"===n.tagName||"TEXTAREA"===n.tagName||n.isContentEditable);if("Escape"===t.key){t.preventDefault(),F?I(!1):x();return}let l=t.ctrlKey||t.metaKey;if(l&&"w"===t.key.toLowerCase()){t.preventDefault(),e.active?j(e.active):x();return}if(l&&"p"===t.key.toLowerCase()){t.preventDefault(),I(!0);return}a||l||"diff"!==M||("]"===t.key?Y.current?.nextChange():"["===t.key&&Y.current?.prevChange())};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)},[e.open,e.active,F,M,x,j]),(0,l.useEffect)(()=>{F&&(H(""),P(0),setTimeout(()=>Z.current?.focus(),0))},[F]),(0,l.useEffect)(()=>{e.open&&setTimeout(()=>J.current?.focus(),0)},[e.open]);let ed=(0,l.useMemo)(()=>{if(!F)return[];let e=A.trim();return t.filePaths.map(t=>({p:t,s:(0,m.dt)(e,t)})).filter(e=>e.s>=0).sort((e,t)=>t.s-e.s||e.p.length-t.p.length).slice(0,50).map(e=>e.p)},[F,A,t.filePaths]);if(!e.open)return null;let ec=ee?ee.path.split("/"):[],eh=t.selected?t.selected.n?$.growthRoundLabel.replace("{n}",String(t.selected.n)):$.growthKindUser:"",ep=eh?`${eh}${et?` \xb7 +${et.add??0} −${et.del??0}`:""}`:"",eu="diff"===M&&!!K?.diff,ef=K?.notice==="deleted"?$.viewerDeleted:K?.notice==="historical"?$.viewerHistorical:K?.notice==="missing"?$.viewerMissing:K?.notice==="disk"?$.viewerNotInSnapshot:K?.notice==="nochange"?$.viewerNoChanges:"";return(0,a.jsx)("div",{className:"pw-viewer-mask modal-mask fixed inset-0 z-[105] flex items-center justify-center",onMouseDown:e=>e.target===e.currentTarget&&x(),children:(0,a.jsxs)("div",{ref:J,className:"pw-viewer glass-modal flex flex-col overflow-hidden outline-none","data-fullscreen":S||void 0,role:"dialog","aria-modal":"true",tabIndex:-1,"data-testid":"file-viewer",children:[(0,a.jsxs)("div",{className:"pw-viewer-tabs hairline-b",onDoubleClick:e=>e.target===e.currentTarget&&z(e=>!e),children:[(0,a.jsxs)("button",{type:"button",className:"pw-viewer-tab","data-active":null===e.active,onClick:()=>b(null),children:[(0,a.jsx)("img",{className:"pw-tree-icon",src:"/file-icons/folder-open.svg",alt:""}),(0,a.jsx)("span",{children:$.projectPanel})]}),(0,a.jsx)("div",{className:"pw-viewer-tabstrip",children:e.tabs.map(t=>(0,a.jsxs)("div",{className:"pw-viewer-tab","data-active":e.active===t.path,onAuxClick:e=>{1===e.button&&j(t.path)},children:[(0,a.jsxs)("button",{type:"button",className:"pw-viewer-tab-main",title:t.path,onClick:()=>b(t.path),children:[(0,a.jsx)("img",{className:"pw-tree-icon",src:(0,f.s)(t.path.split("/").pop()??t.path),alt:""}),(0,a.jsx)("span",{className:"truncate",children:t.path.split("/").pop()})]}),(0,a.jsx)("button",{type:"button",className:"pw-viewer-tab-close",title:$.viewerCloseTab,"aria-label":`${$.viewerCloseTab}: ${t.path}`,onClick:()=>j(t.path),children:(0,a.jsx)(u.Bh,{size:10})})]},t.path))}),(0,a.jsx)("button",{type:"button",className:"icon-btn",style:{width:26,height:26},title:`${$.viewerQuickOpen} (Ctrl/⌘+P)`,onClick:()=>I(!0),children:(0,a.jsx)(u.Xh,{size:13})}),(0,a.jsx)("div",{className:"flex-1"}),(0,a.jsx)("button",{type:"button",className:"icon-btn",style:{width:26,height:26},title:S?$.viewerExitFullscreen:$.viewerFullscreen,onClick:()=>z(e=>!e),"data-testid":"viewer-fullscreen",children:(0,a.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none","aria-hidden":!0,children:S?(0,a.jsx)("path",{d:"M6 1v5H1M10 1v5h5M6 15v-5H1M10 15v-5h5",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"}):(0,a.jsx)("path",{d:"M1 6V1h5M15 6V1h-5M1 10v5h5M15 10v5h-5",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"})})}),(0,a.jsx)("button",{type:"button",className:"icon-btn",style:{width:26,height:26},title:`${$.close} (Esc)`,onClick:x,"data-testid":"viewer-close",children:(0,a.jsx)(u.Bh,{size:13})})]}),ee?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"pw-viewer-toolbar hairline-b",children:[(0,a.jsx)("div",{className:"pw-crumb min-w-0 flex-1",children:ec.map((e,n)=>(0,a.jsxs)("span",{className:"flex items-center",children:[n>0&&(0,a.jsx)("span",{className:"pw-crumb-sep",children:"/"}),n<ec.length-1?(0,a.jsx)("button",{type:"button",onClick:()=>{let e;return e=ec.slice(0,n+1).join("/"),void(t.revealPath(e),B({path:e,key:Date.now()}),b(null))},children:e}):(0,a.jsx)("span",{style:{color:"var(--dsw-label-primary)",fontWeight:500},children:e})]},n))}),ep&&!ee.lazy&&(0,a.jsx)("span",{className:"flex-none truncate",style:{fontSize:11.5,color:"var(--dsw-label-caption)",maxWidth:220},children:ep}),!ee.lazy&&!es&&(0,a.jsx)("span",{className:"pw-seg",role:"radiogroup",children:["diff","content",...en?["render"]:[]].map(e=>(0,a.jsx)("button",{type:"button",role:"radio","aria-checked":M===e,"data-active":M===e,onClick:()=>{R(!0),E(e)},children:"diff"===e?$.viewerModeDiff:"content"===e?$.viewerModeContent:$.viewerModeRender},e))}),!es&&ee.lazy&&en&&(0,a.jsx)("span",{className:"pw-seg",role:"radiogroup",children:["content","render"].map(e=>(0,a.jsx)("button",{type:"button",role:"radio","aria-checked":M===e,"data-active":M===e,onClick:()=>{R(!0),E(e)},children:"content"===e?$.viewerModeContent:$.viewerModeRender},e))}),eu&&!es&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("button",{type:"button",className:"pw-chip","data-active":L,onClick:()=>T(e=>!e),children:L?$.viewerFold:$.viewerUnfold}),(0,a.jsx)("button",{type:"button",className:"icon-btn",style:{width:24,height:24},title:`${$.viewerPrevChange} ([)`,onClick:()=>Y.current?.prevChange(),children:(0,a.jsx)(u.tr,{size:12})}),(0,a.jsx)("button",{type:"button",className:"icon-btn",style:{width:24,height:24},title:`${$.viewerNextChange} (])`,onClick:()=>Y.current?.nextChange(),children:(0,a.jsx)(u.Cd,{size:12})})]}),N&&(0,a.jsx)("button",{type:"button",className:"icon-btn",style:{width:24,height:24},title:$.fileReference,onClick:()=>N(ee.path),children:(0,a.jsx)(u.o_,{size:13})}),C&&(0,a.jsx)("button",{type:"button",className:"icon-btn",style:{width:24,height:24},title:$.fileOpenEditor,onClick:()=>C(ee.path),children:(0,a.jsx)(u.lx,{size:13})})]}),ef&&(0,a.jsx)("div",{className:"pw-viewer-notice","data-kind":K?.notice,children:ef}),K?.truncated&&(0,a.jsx)("div",{className:"pw-viewer-notice","data-kind":"warn",children:"diff"===M?$.viewerPatchTruncated:$.filePreviewTruncated}),es?(0,a.jsxs)("div",{className:"min-h-0 flex-1 overflow-auto","data-testid":"viewer-dir",children:[(0,a.jsx)("div",{className:"px-3 py-2",style:{fontSize:11.5,color:"var(--dsw-label-caption)"},children:$.viewerDirHint.replace("{n}",String(q?.entries.length??0))}),q?.entries.map(e=>(0,a.jsxs)("button",{type:"button",className:"flex w-full items-center gap-2 px-3 py-1.5 text-left hover:bg-[var(--dsw-hover)]",onClick:()=>"dir"===e.kind?k(`${er.replace(/\/+$/,"")}/${e.name}`,{kind:"dir",lazy:!0}):k(`${er.replace(/\/+$/,"")}/${e.name}`,{lazy:!0}),children:[(0,a.jsx)("img",{className:"pw-tree-icon",src:"dir"===e.kind?"/file-icons/folder-close.svg":(0,f.s)(e.name),alt:""}),(0,a.jsx)("span",{className:"min-w-0 flex-1 truncate",style:{fontSize:12.5,fontFamily:"dir"===e.kind?"inherit":"var(--font-mono)"},children:e.name}),"file"===e.kind&&void 0!==e.size&&(0,a.jsxs)("span",{style:{fontSize:11,color:"var(--dsw-label-caption)",fontVariantNumeric:"tabular-nums"},children:[e.size," B"]})]},e.name)),q?.nextOffset?(0,a.jsx)("button",{type:"button",className:"pw-chip mx-3 my-2",onClick:()=>void eo(),children:$.viewerDirMore}):null]}):K&&K.key===`${ee.path}|${M}|${ea?.from??""}|${ea?.to??""}|${et?.status??""}`?K.error?(0,a.jsx)("div",{className:"flex min-h-0 flex-1 items-center justify-center",style:{fontSize:12.5,color:"var(--dsw-danger)"},children:K.error}):"missing"===K.notice?(0,a.jsx)("div",{className:"flex min-h-0 flex-1 items-center justify-center",style:{fontSize:12.5,color:"var(--dsw-label-caption)"},children:$.viewerMissing}):K.binary?(0,a.jsx)("div",{className:"flex min-h-0 flex-1 items-center justify-center",style:{fontSize:12.5,color:"var(--dsw-label-caption)"},children:$.fileBinary}):K.diff?(0,a.jsx)(h,{lines:K.diff,language:(0,c.f3)(ee.path),folded:L,handle:Y,initialChange:!0}):"render"===M&&null!==K.content?(0,a.jsx)("div",{className:"md min-h-0 flex-1 overflow-auto px-6 py-4",style:{fontSize:14},children:(0,a.jsx)(i.oz,{remarkPlugins:[s.A],rehypePlugins:[[r.A,{detect:!1,ignoreMissing:!0}]],children:K.content})}):null!==K.content?(0,a.jsx)(g,{content:K.content,name:ee.path}):null:(0,a.jsx)("div",{className:"flex min-h-0 flex-1 items-center justify-center",style:{fontSize:12.5,color:"var(--dsw-label-caption)"},children:$.panelLoading})]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"pw-viewer-toolbar hairline-b",children:[(0,a.jsxs)("div",{className:"flex min-w-0 flex-1 items-center gap-1.5 rounded-lg px-2",style:{background:"var(--dsw-hover)",height:26,maxWidth:360},children:[(0,a.jsx)(u.FG,{size:12,style:{flex:"none",color:"var(--dsw-label-caption)"}}),(0,a.jsx)("input",{value:U,onChange:e=>_(e.target.value),placeholder:$.growthFilter,className:"min-w-0 flex-1 bg-transparent",style:{fontSize:12}})]}),(0,a.jsx)("span",{style:{fontSize:11.5,color:"var(--dsw-label-caption)"},children:eh}),(0,a.jsx)("button",{type:"button",className:"pw-chip",onClick:t.expandAll,children:$.growthExpandAll}),(0,a.jsx)("button",{type:"button",className:"pw-chip",onClick:t.collapseAll,children:$.growthCollapseAll})]}),(0,a.jsx)(p.Q,{tree:t.tree,expanded:t.expanded,fresh:t.fresh,filter:U,selectedPath:null,onToggleDir:t.toggleDir,onExpandLazy:t.expandLazy,onOpenFile:e=>k(e.path,{from:e.from,lazy:e.lazy,kind:e.kind}),onReference:N,onOpenEditor:C,revealPath:G?.path??null,revealKey:G?.key,emptyText:$.viewerEmpty})]}),F&&(0,a.jsx)("div",{className:"pw-quick",onMouseDown:e=>e.target===e.currentTarget&&I(!1),children:(0,a.jsxs)("div",{className:"pw-quick-box popover",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 px-2",style:{height:34},children:[(0,a.jsx)(u.FG,{size:14,style:{flex:"none",color:"var(--dsw-label-caption)"}}),(0,a.jsx)("input",{ref:Z,value:A,onChange:e=>{H(e.target.value),P(0)},placeholder:$.viewerQuickOpen,className:"min-w-0 flex-1 bg-transparent",style:{fontSize:13},onKeyDown:e=>{if("ArrowDown"===e.key)e.preventDefault(),P(e=>Math.min(ed.length-1,e+1));else if("ArrowUp"===e.key)e.preventDefault(),P(e=>Math.max(0,e-1));else if("Enter"===e.key){e.preventDefault();let t=ed[O];t&&(k(t),I(!1))}}})]}),(0,a.jsx)("div",{className:"pw-quick-list",children:0===ed.length?(0,a.jsx)("div",{style:{fontSize:12.5,color:"var(--dsw-label-caption)",padding:"8px 10px"},children:$.viewerQuickOpenEmpty}):ed.map((e,t)=>(0,a.jsxs)("button",{type:"button",className:"pw-quick-item","data-active":t===O,onMouseEnter:()=>P(t),onClick:()=>{k(e),I(!1)},children:[(0,a.jsx)("img",{className:"pw-tree-icon",src:(0,f.s)(e.split("/").pop()??e),alt:""}),(0,a.jsx)("span",{className:"truncate",children:e.split("/").pop()}),(0,a.jsx)("span",{className:"min-w-0 truncate",style:{color:"var(--dsw-label-caption)",fontSize:11.5},children:e})]},e))})]})})]})})}}}]);
|