@qt4798/pi-web 0.9.18 → 0.9.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +7 -7
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/required-server-files.js +1 -1
  5. package/.next/required-server-files.json +1 -1
  6. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  7. package/.next/server/app/_global-error.html +1 -1
  8. package/.next/server/app/_global-error.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  15. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  16. package/.next/server/app/_not-found.html +1 -1
  17. package/.next/server/app/_not-found.rsc +1 -1
  18. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  22. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  23. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  24. package/.next/server/app/api/opencode-zen/route.js +1 -1
  25. package/.next/server/app/index.html +1 -1
  26. package/.next/server/app/index.rsc +3 -3
  27. package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  28. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  29. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  30. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  31. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  32. package/.next/server/app/page.js +3 -3
  33. package/.next/server/app/page_client-reference-manifest.js +1 -1
  34. package/.next/server/app-paths-manifest.json +7 -7
  35. package/.next/server/chunks/2303.js +1 -1
  36. package/.next/server/chunks/7915.js +1 -1
  37. package/.next/server/middleware-build-manifest.js +1 -1
  38. package/.next/server/pages/404.html +1 -1
  39. package/.next/server/pages/500.html +1 -1
  40. package/.next/static/chunks/app/{page-e338f2229748dfe6.js → page-451c953ad6232c59.js} +8 -8
  41. package/.next/trace +9 -9
  42. package/.next/trace-build +1 -1
  43. package/README.md +81 -158
  44. package/package.json +1 -1
  45. /package/.next/static/{dy7f924eC9cpK9w3AxudQ → rddGyDxw8t2Q1B_osP7Xr}/_buildManifest.js +0 -0
  46. /package/.next/static/{dy7f924eC9cpK9w3AxudQ → rddGyDxw8t2Q1B_osP7Xr}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"27123":{"*":{"id":"81921","name":"*","chunks":[],"async":false}},"34642":{"*":{"id":"26571","name":"*","chunks":[],"async":false}},"39247":{"*":{"id":"55100","name":"*","chunks":[],"async":false}},"57121":{"*":{"id":"35421","name":"*","chunks":[],"async":false}},"61304":{"*":{"id":"60440","name":"*","chunks":[],"async":false}},"64777":{"*":{"id":"82265","name":"*","chunks":[],"async":false}},"74581":{"*":{"id":"61335","name":"*","chunks":[],"async":false}},"78616":{"*":{"id":"84342","name":"*","chunks":[],"async":false}},"86869":{"*":{"id":"74661","name":"*","chunks":[],"async":false}},"90484":{"*":{"id":"70664","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/client/components/builtin/global-error.js":{"id":27123,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/client/components/builtin/global-error.js":{"id":27123,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/client/components/client-page.js":{"id":61304,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/client/components/client-page.js":{"id":61304,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/client/components/client-segment.js":{"id":78616,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/client/components/client-segment.js":{"id":78616,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":64777,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":64777,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/client/components/layout-router.js":{"id":57121,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/client/components/layout-router.js":{"id":57121,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/client/components/render-from-template-context.js":{"id":74581,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":74581,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/lib/framework/boundary-components.js":{"id":90484,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":90484,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":86869,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":86869,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/katex/dist/katex.min.css":{"id":84559,"name":"*","chunks":["7177","static/chunks/app/layout-7b635840991e69cb.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/app/globals.css":{"id":66872,"name":"*","chunks":["7177","static/chunks/app/layout-7b635840991e69cb.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/@fontsource/ia-writer-quattro/index.css":{"id":26408,"name":"*","chunks":["7177","static/chunks/app/layout-7b635840991e69cb.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/@fontsource/ia-writer-quattro/400-italic.css":{"id":8057,"name":"*","chunks":["7177","static/chunks/app/layout-7b635840991e69cb.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/@fontsource/ia-writer-quattro/700.css":{"id":35279,"name":"*","chunks":["7177","static/chunks/app/layout-7b635840991e69cb.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/@fontsource/ia-writer-quattro/700-italic.css":{"id":48276,"name":"*","chunks":["7177","static/chunks/app/layout-7b635840991e69cb.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/@fontsource/lilex/index.css":{"id":12043,"name":"*","chunks":["7177","static/chunks/app/layout-7b635840991e69cb.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/components/AppShell.tsx":{"id":34642,"name":"*","chunks":["7330","static/chunks/d3ac728e-7964f816a1ca64e5.js","9103","static/chunks/9103-7c410d401717ec38.js","8974","static/chunks/app/page-e338f2229748dfe6.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/hooks/useI18n.tsx":{"id":39247,"name":"*","chunks":["7330","static/chunks/d3ac728e-7964f816a1ca64e5.js","9103","static/chunks/9103-7c410d401717ec38.js","8974","static/chunks/app/page-e338f2229748dfe6.js"],"async":false}},"entryCSSFiles":{"/Volumes/1T 原装/项目研发/pi-web-QT/":[],"/Volumes/1T 原装/项目研发/pi-web-QT/app/layout":[{"inlined":false,"path":"static/css/3790610024d16435.css"},{"inlined":false,"path":"static/css/dda15933a7f70fbf.css"}],"/Volumes/1T 原装/项目研发/pi-web-QT/app/page":[]},"rscModuleMapping":{"8057":{"*":{"id":"17","name":"*","chunks":[],"async":false}},"12043":{"*":{"id":"47561","name":"*","chunks":[],"async":false}},"26408":{"*":{"id":"77222","name":"*","chunks":[],"async":false}},"27123":{"*":{"id":"95547","name":"*","chunks":[],"async":false}},"34642":{"*":{"id":"35790","name":"*","chunks":[],"async":false}},"35279":{"*":{"id":"10289","name":"*","chunks":[],"async":false}},"39247":{"*":{"id":"73884","name":"*","chunks":[],"async":false}},"48276":{"*":{"id":"64388","name":"*","chunks":[],"async":false}},"57121":{"*":{"id":"98099","name":"*","chunks":[],"async":false}},"61304":{"*":{"id":"15098","name":"*","chunks":[],"async":false}},"64777":{"*":{"id":"33859","name":"*","chunks":[],"async":false}},"66872":{"*":{"id":"82704","name":"*","chunks":[],"async":false}},"74581":{"*":{"id":"16237","name":"*","chunks":[],"async":false}},"78616":{"*":{"id":"47644","name":"*","chunks":[],"async":false}},"84559":{"*":{"id":"25319","name":"*","chunks":[],"async":false}},"86869":{"*":{"id":"36675","name":"*","chunks":[],"async":false}},"90484":{"*":{"id":"98562","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}};
1
+ globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"27123":{"*":{"id":"81921","name":"*","chunks":[],"async":false}},"34642":{"*":{"id":"26571","name":"*","chunks":[],"async":false}},"39247":{"*":{"id":"55100","name":"*","chunks":[],"async":false}},"57121":{"*":{"id":"35421","name":"*","chunks":[],"async":false}},"61304":{"*":{"id":"60440","name":"*","chunks":[],"async":false}},"64777":{"*":{"id":"82265","name":"*","chunks":[],"async":false}},"74581":{"*":{"id":"61335","name":"*","chunks":[],"async":false}},"78616":{"*":{"id":"84342","name":"*","chunks":[],"async":false}},"86869":{"*":{"id":"74661","name":"*","chunks":[],"async":false}},"90484":{"*":{"id":"70664","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/client/components/builtin/global-error.js":{"id":27123,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/client/components/builtin/global-error.js":{"id":27123,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/client/components/client-page.js":{"id":61304,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/client/components/client-page.js":{"id":61304,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/client/components/client-segment.js":{"id":78616,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/client/components/client-segment.js":{"id":78616,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":64777,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":64777,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/client/components/layout-router.js":{"id":57121,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/client/components/layout-router.js":{"id":57121,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/client/components/render-from-template-context.js":{"id":74581,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":74581,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/lib/framework/boundary-components.js":{"id":90484,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":90484,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":86869,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":86869,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/katex/dist/katex.min.css":{"id":84559,"name":"*","chunks":["7177","static/chunks/app/layout-7b635840991e69cb.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/app/globals.css":{"id":66872,"name":"*","chunks":["7177","static/chunks/app/layout-7b635840991e69cb.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/@fontsource/ia-writer-quattro/index.css":{"id":26408,"name":"*","chunks":["7177","static/chunks/app/layout-7b635840991e69cb.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/@fontsource/ia-writer-quattro/400-italic.css":{"id":8057,"name":"*","chunks":["7177","static/chunks/app/layout-7b635840991e69cb.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/@fontsource/ia-writer-quattro/700.css":{"id":35279,"name":"*","chunks":["7177","static/chunks/app/layout-7b635840991e69cb.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/@fontsource/ia-writer-quattro/700-italic.css":{"id":48276,"name":"*","chunks":["7177","static/chunks/app/layout-7b635840991e69cb.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/@fontsource/lilex/index.css":{"id":12043,"name":"*","chunks":["7177","static/chunks/app/layout-7b635840991e69cb.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/components/AppShell.tsx":{"id":34642,"name":"*","chunks":["7330","static/chunks/d3ac728e-7964f816a1ca64e5.js","9103","static/chunks/9103-7c410d401717ec38.js","8974","static/chunks/app/page-451c953ad6232c59.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/hooks/useI18n.tsx":{"id":39247,"name":"*","chunks":["7330","static/chunks/d3ac728e-7964f816a1ca64e5.js","9103","static/chunks/9103-7c410d401717ec38.js","8974","static/chunks/app/page-451c953ad6232c59.js"],"async":false}},"entryCSSFiles":{"/Volumes/1T 原装/项目研发/pi-web-QT/":[],"/Volumes/1T 原装/项目研发/pi-web-QT/app/layout":[{"inlined":false,"path":"static/css/3790610024d16435.css"},{"inlined":false,"path":"static/css/dda15933a7f70fbf.css"}],"/Volumes/1T 原装/项目研发/pi-web-QT/app/page":[]},"rscModuleMapping":{"8057":{"*":{"id":"17","name":"*","chunks":[],"async":false}},"12043":{"*":{"id":"47561","name":"*","chunks":[],"async":false}},"26408":{"*":{"id":"77222","name":"*","chunks":[],"async":false}},"27123":{"*":{"id":"95547","name":"*","chunks":[],"async":false}},"34642":{"*":{"id":"35790","name":"*","chunks":[],"async":false}},"35279":{"*":{"id":"10289","name":"*","chunks":[],"async":false}},"39247":{"*":{"id":"73884","name":"*","chunks":[],"async":false}},"48276":{"*":{"id":"64388","name":"*","chunks":[],"async":false}},"57121":{"*":{"id":"98099","name":"*","chunks":[],"async":false}},"61304":{"*":{"id":"15098","name":"*","chunks":[],"async":false}},"64777":{"*":{"id":"33859","name":"*","chunks":[],"async":false}},"66872":{"*":{"id":"82704","name":"*","chunks":[],"async":false}},"74581":{"*":{"id":"16237","name":"*","chunks":[],"async":false}},"78616":{"*":{"id":"47644","name":"*","chunks":[],"async":false}},"84559":{"*":{"id":"25319","name":"*","chunks":[],"async":false}},"86869":{"*":{"id":"36675","name":"*","chunks":[],"async":false}},"90484":{"*":{"id":"98562","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}};
@@ -35,17 +35,17 @@
35
35
  "/icon.svg/route": "app/icon.svg/route.js",
36
36
  "/api/agent/[id]/bash-output/route": "app/api/agent/[id]/bash-output/route.js",
37
37
  "/api/agent/running/events/route": "app/api/agent/running/events/route.js",
38
+ "/api/agent/[id]/events/route": "app/api/agent/[id]/events/route.js",
38
39
  "/api/agent/running/route": "app/api/agent/running/route.js",
39
40
  "/api/auth/all-providers/route": "app/api/auth/all-providers/route.js",
40
- "/api/agent/[id]/events/route": "app/api/agent/[id]/events/route.js",
41
41
  "/api/auth/combined/route": "app/api/auth/combined/route.js",
42
42
  "/api/auth/api-key/[provider]/route": "app/api/auth/api-key/[provider]/route.js",
43
43
  "/api/auth/logout/[provider]/route": "app/api/auth/logout/[provider]/route.js",
44
44
  "/api/auth/providers/route": "app/api/auth/providers/route.js",
45
45
  "/api/backup/export/route": "app/api/backup/export/route.js",
46
46
  "/api/auth/login/[provider]/route": "app/api/auth/login/[provider]/route.js",
47
- "/api/events/route": "app/api/events/route.js",
48
47
  "/api/deepseek/balance/route": "app/api/deepseek/balance/route.js",
48
+ "/api/events/route": "app/api/events/route.js",
49
49
  "/api/features/route": "app/api/features/route.js",
50
50
  "/api/backup/import/route": "app/api/backup/import/route.js",
51
51
  "/api/git/diff/route": "app/api/git/diff/route.js",
@@ -57,13 +57,13 @@
57
57
  "/api/models-config/catalog/route": "app/api/models-config/catalog/route.js",
58
58
  "/api/models-config/route": "app/api/models-config/route.js",
59
59
  "/api/models-config/builtin/route": "app/api/models-config/builtin/route.js",
60
- "/api/models-config/discover/route": "app/api/models-config/discover/route.js",
60
+ "/api/models-config/test/route": "app/api/models-config/test/route.js",
61
61
  "/api/modes/route": "app/api/modes/route.js",
62
62
  "/api/opencode-zen/external/key/route": "app/api/opencode-zen/external/key/route.js",
63
63
  "/api/models/route": "app/api/models/route.js",
64
+ "/api/models-config/discover/route": "app/api/models-config/discover/route.js",
64
65
  "/api/opencode-zen/import/route": "app/api/opencode-zen/import/route.js",
65
66
  "/api/opencode-zen/key/route": "app/api/opencode-zen/key/route.js",
66
- "/api/models-config/test/route": "app/api/models-config/test/route.js",
67
67
  "/api/opencode-zen/test/route": "app/api/opencode-zen/test/route.js",
68
68
  "/api/opencode-zen/external/test/route": "app/api/opencode-zen/external/test/route.js",
69
69
  "/api/opencode-zen/route": "app/api/opencode-zen/route.js",
@@ -72,14 +72,14 @@
72
72
  "/api/proxy/test/route": "app/api/proxy/test/route.js",
73
73
  "/api/sessions/[id]/export/route": "app/api/sessions/[id]/export/route.js",
74
74
  "/api/settings/title-model/route": "app/api/settings/title-model/route.js",
75
+ "/api/plugins/route": "app/api/plugins/route.js",
75
76
  "/api/skills/check/route": "app/api/skills/check/route.js",
76
77
  "/api/skills/install/route": "app/api/skills/install/route.js",
77
78
  "/api/skills/route": "app/api/skills/route.js",
78
- "/api/plugins/route": "app/api/plugins/route.js",
79
+ "/api/skills/update/route": "app/api/skills/update/route.js",
79
80
  "/api/snippets/[id]/route": "app/api/snippets/[id]/route.js",
80
- "/api/snippets/route": "app/api/snippets/route.js",
81
81
  "/api/skills/search/route": "app/api/skills/search/route.js",
82
- "/api/skills/update/route": "app/api/skills/update/route.js",
82
+ "/api/snippets/route": "app/api/snippets/route.js",
83
83
  "/api/tasks/[id]/changed-files/route": "app/api/tasks/[id]/changed-files/route.js",
84
84
  "/api/subagents/route": "app/api/subagents/route.js",
85
85
  "/api/tasks/events/route": "app/api/tasks/events/route.js",
@@ -1 +1 @@
1
- "use strict";exports.id=2303,exports.ids=[2303],exports.modules={8102:(a,b,c)=>{c.d(b,{$:()=>g});var d=c(55511),e=c(29021),f=c(33873);function g(a,b){let c=(0,f.dirname)(a),g=(0,f.join)(c,`.${(0,f.basename)(a)}-${(0,d.randomUUID)()}.tmp`),h=!1;try{(0,e.writeFileSync)(g,b,{encoding:"utf8",flag:"wx",mode:384,flush:!0}),(0,e.renameSync)(g,a)}catch(a){throw h=!0,a}finally{try{(0,e.unlinkSync)(g)}catch(a){if("ENOENT"!==a.code&&!h)throw a}}}},11301:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{hH:()=>s,oH:()=>r,wF:()=>q});var e=c(73024),f=c(76760),g=c(75430),h=c(8102),i=a([g]);g=(i.then?(await i)():i)[0];let t=new Set([400,401,403,404,408,409,413,429,500,502,503,504]);function j(){return(0,f.join)((0,g.getAgentDir)(),"pi-web-error-log.json")}function k(){globalThis.__piErrorLogState||(globalThis.__piErrorLogState={loaded:!1,entries:[]});let a=globalThis.__piErrorLogState;if(!a.loaded){a.loaded=!0;try{if((0,e.existsSync)(j())){let b=JSON.parse((0,e.readFileSync)(j(),"utf8"));Array.isArray(b)&&(a.entries=b.filter(l).slice(-500))}}catch{a.entries=[]}}return a}function l(a){return!(!a||"object"!=typeof a||Array.isArray(a))&&"string"==typeof a.id&&"string"==typeof a.timestamp&&("error"===a.level||"warning"===a.level||"info"===a.level)&&"string"==typeof a.source&&"string"==typeof a.message}function m(a){return a.replace(/https?:\/\/[^\s/@]+:[^\s/@]+@/gi,"https://[redacted]@").replace(/Bearer\s+[A-Za-z0-9._~+/=-]+/gi,"Bearer [redacted]").replace(/\bsk-[A-Za-z0-9_-]{8,}\b/g,"sk-[redacted]").replace(/\b(?:oc|opencode|zen)[_-]?[A-Za-z0-9._~-]{12,}\b/gi,"[key-redacted]").replace(/((?:api[_-]?key|token|password|secret)\s*[:=]\s*)([^\s,;]+)/gi,"$1[redacted]")}function n(a){return a.length>2e4?`${a.slice(0,2e4)}…`:a}function o(a){let b=a.match(/\bHTTP\s+(\d{3})\b|\bstatus(?:\s+code)?\s*[:=]?\s*(\d{3})\b|\b(4\d{2}|5\d{2})\b/i),c=Number(b?.[1]??b?.[2]??b?.[3]);return t.has(c)?c:void 0}function p(a){try{(0,h.$)(j(),JSON.stringify(a,null,2))}catch{}}function q(a){let b=k(),c=n(m(a.message.trim())),d=a.details?n(m(a.details)):void 0,e={id:`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date().toISOString(),level:a.level??"error",source:a.source??"unknown",...void 0!==a.statusCode?{statusCode:a.statusCode}:void 0!==o(c)?{statusCode:o(c)}:{},...a.provider?{provider:a.provider}:{},...a.model?{model:a.model}:{},...a.sessionId?{sessionId:a.sessionId}:{},message:c||"Unknown error",...d?{details:d}:{}};return b.entries.push(e),b.entries.length>500&&b.entries.splice(0,b.entries.length-500),p(b.entries),e}function r(a={}){let b=a.query?.trim().toLocaleLowerCase(),c=Math.min(Math.max(a.limit??200,1),500);return k().entries.filter(b=>void 0===a.statusCode||b.statusCode===a.statusCode).filter(b=>!a.level||b.level===a.level).filter(b=>!a.source||b.source===a.source).filter(a=>!b||[a.message,a.details,a.provider,a.model,a.source].filter(Boolean).some(a=>a.toLocaleLowerCase().includes(b))).slice().reverse().slice(0,c)}function s(){k().entries=[],p([])}d()}catch(a){d(a)}})},62303:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{DW:()=>x,KT:()=>C,MO:()=>y,Tn:()=>L,ZX:()=>F,av:()=>M,gS:()=>K,iO:()=>A,py:()=>J,qk:()=>m,rY:()=>n,tJ:()=>N,xl:()=>I,zB:()=>z});var e=c(73024),f=c(76760),g=c(47774),h=c(75430),i=c(8102),j=c(11301),k=a([h,j]);function l(a=Date.now()){let b=new Date(a);return Date.UTC(b.getUTCFullYear(),b.getUTCMonth(),b.getUTCDate()+1,0,0,0)}[h,j]=k.then?(await k)():k;let N=["opencode"];function m(a){return"opencode"===a||"opencode-go"===a}function n(a){return globalThis.__piOpenCodeZenSwitchListeners??=new Set,globalThis.__piOpenCodeZenSwitchListeners.add(a),()=>globalThis.__piOpenCodeZenSwitchListeners?.delete(a)}function o(a){for(let b of globalThis.__piOpenCodeZenSwitchListeners??[])b(a)}function p(){return(0,f.join)((0,h.getAgentDir)(),"opencode-zen.json")}function q(){return{protocol:"http",enabled:!1,url:"",port:0,username:"",password:""}}function r(){return{accounts:[],autoSwitch:!0,cooldownMs:6e4,externalAccess:{enabled:!1,port:7474,apiKey:""}}}function s(a,b){let c=t(a)?a:{},d=Number(c.port);return{enabled:!0===c.enabled,port:Number.isInteger(d)&&d>0&&d<=65535?d:b.port,apiKey:"string"==typeof c.apiKey?c.apiKey.trim():b.apiKey}}function t(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function u(a,b){if(!t(a))return null;let c="string"==typeof a.apiKey?a.apiKey.trim():"";if(!c)return null;let d="string"==typeof a.id&&a.id.trim()?a.id.trim():`account-${b+1}`;return{id:d,note:"string"==typeof a.note&&a.note.trim()?a.note.trim():d,apiKey:c,enabled:!1!==a.enabled,proxy:function(a){let b=t(a)?a:{},c=Number(b.port),d="string"==typeof b.url?b.url.trim():"",e="string"==typeof b.protocol?b.protocol.toLowerCase():void 0,f="https"===e||"socks5"===e?e:"http";if(d&&(void 0===e||"http"===e||"https"===e||"socks5"===e))try{let a=d.match(/^([a-z][a-z0-9+.-]*):\/\//i)?.[1]?.toLowerCase();("socks5"===a||"https"===a)&&(f=a)}catch{}if(d)try{let a=new URL(/^(https?|socks5):\/\//i.test(d)?d:`http://${d}`);d="http:"!==a.protocol&&"https:"!==a.protocol&&"socks5:"!==a.protocol||a.username||a.password||"/"!==a.pathname&&""!==a.pathname||a.search||a.hash?"":`${a.protocol}//${a.hostname}`}catch{d=""}return{protocol:f,enabled:!1!==b.enabled,url:d,port:Number.isInteger(c)&&c>0&&c<=65535?c:0,username:"string"==typeof b.username?b.username:"",password:"string"==typeof b.password?b.password:""}}(a.proxy)}}function v(a){let b=t(a)?a:{},c=Array.isArray(b.accounts)?b.accounts.map(u).filter(a=>null!==a):[],d=Number(b.cooldownMs),e=r().externalAccess;return{accounts:c,autoSwitch:!1!==b.autoSwitch,cooldownMs:Number.isFinite(d)?Math.min(Math.max(d,0),6e5):6e4,externalAccess:s(b.externalAccess,e)}}function w(){return globalThis.__piOpenCodeZenState||(globalThis.__piOpenCodeZenState={config:function(){try{if((0,e.existsSync)(p()))return v(JSON.parse((0,e.readFileSync)(p(),"utf8")));let a=(0,f.join)((0,h.getAgentDir)(),"auth.json");if((0,e.existsSync)(a)){let b=JSON.parse((0,e.readFileSync)(a,"utf8")),c=t(b.opencode)?b.opencode:null,d=c&&"string"==typeof c.key?c.key.trim():"";if(d)return v({accounts:[{id:"legacy-opencode",note:"默认 OpenCode Zen",apiKey:d,enabled:!0,proxy:q()}]})}return r()}catch{return r()}}(),activeIndex:0,cooldownUntil:new Map,dispatchers:new Map}),globalThis.__piOpenCodeZenState}function x(){return structuredClone(w().config)}function y(){return w().config.accounts.find(a=>a.enabled&&a.apiKey)?.apiKey??null}async function z(a){let b=y();if(b)for(let c of(await Promise.allSettled(N.map(c=>a.setRuntimeApiKey(c,b)))))"rejected"===c.status&&(0,j.wF)({level:"warning",source:"opencode-zen-runtime",provider:"opencode",message:`设置 OpenCode Zen runtime Key 失败:${c.reason instanceof Error?c.reason.message:String(c.reason)}`})}function A(a,b){var c;let d,g=w();for(let c of(g.config=v(a),g.activeIndex=b?Math.max(0,g.config.accounts.findIndex(a=>a.id===b)):0,g.cooldownUntil.clear(),g.dispatchers.values()))c.close().catch(()=>{});g.dispatchers.clear(),c=g.config,d=p(),(0,e.mkdirSync)((0,f.dirname)(d),{recursive:!0,mode:448}),(0,i.$)(d,JSON.stringify(c,null,2))}function B(a){return a.length<=8?"••••••••":`${a.slice(0,4)}••••${a.slice(-4)}`}function C(){let a=w(),b=a.config.accounts[a.activeIndex],c=a.config.externalAccess;return{accounts:a.config.accounts.map(a=>({id:a.id,note:a.note,enabled:a.enabled,apiKeyMasked:B(a.apiKey),hasApiKey:!!a.apiKey,proxy:{protocol:a.proxy.protocol,enabled:a.proxy.enabled,url:a.proxy.url,port:a.proxy.port,username:a.proxy.username,password:"",hasPassword:!!a.proxy.password}})),autoSwitch:a.config.autoSwitch,cooldownMs:a.config.cooldownMs,externalAccess:{enabled:c.enabled,port:c.port,apiKeyMasked:B(c.apiKey),hasApiKey:!!c.apiKey,status:globalThis.__piOpenCodeZenExternalStatus??{running:!1}},...b?{activeAccountId:b.id}:{},...a.lastSwitch?{lastSwitch:a.lastSwitch}:{}}}function D(a){if(!a.enabled||!a.url||!a.port)return null;if(!Number.isInteger(a.port)||a.port<1||a.port>65535)throw Error("代理端口无效,必须为 1-65535 的整数");let b=a.url.trim();if(b.includes("://")&&!/^(https?|socks5):\/\//i.test(b))throw Error("OpenCode Zen 账号代理仅支持 http/https/socks5");/^(https?|socks5):\/\//i.test(b)||(b=`http://${b}`);let c=new URL(b);if(c.username||c.password||"/"!==c.pathname||c.search||c.hash)throw Error("代理 URL 只允许主机名,用户名和密码请填写独立字段");if(c.port=String(a.port),a.username&&(c.username=a.username),a.password&&(c.password=a.password),"http:"!==c.protocol&&"https:"!==c.protocol&&"socks5:"!==c.protocol)throw Error("OpenCode Zen 账号代理仅支持 http/https/socks5");return c.toString()}function E(a,b){return"socks5"===b?new g.EV(a):new g.kT(a)}async function F(a){let b=D(a);if(!b)return{ok:!0,latencyMs:0};let c=E(b,a.protocol),d=Date.now();try{let a=await (0,g.Em)("https://opencode.ai/zen/v1/models",{dispatcher:c,headers:{Accept:"application/json","User-Agent":"pi-web-opencode-zen-test"},headersTimeout:15e3,bodyTimeout:15e3});return await a.body.text(),{ok:a.statusCode<500,status:a.statusCode,latencyMs:Date.now()-d}}catch(a){return{ok:!1,latencyMs:Date.now()-d,error:(a instanceof Error?a.message:String(a)).replace(/https?:\/\/[^\s/@]+:[^\s/@]+@/gi,"[proxy]@").replace(/(password|pass|secret|token|key)\s*[:=]\s*[^\s,;]+/gi,"$1=[redacted]")}}finally{await c.close().catch(()=>{})}}function G(a,b=new Set,c=!1){let d=Date.now(),e=a.config.accounts.length;if(0===e)return null;let f=null;for(let c=0;c<e;c++){let g=(a.activeIndex+c)%e,h=a.config.accounts[g];if(!h.enabled||!h.apiKey||b.has(h.id))continue;let i=a.cooldownUntil.get(h.id),j=i?.until??0;if(j>d){i?.daily||f&&!(j<f.until)||(f={account:h,index:g,until:j});continue}return a.activeIndex=(g+1)%e,h}return c&&f?(a.activeIndex=(f.index+1)%e,f.account):null}async function H(a,b){let c=b?.body;if(null!==c){if(void 0===c&&a instanceof Request&&null!==a.body)try{return await a.clone().arrayBuffer()}catch{return}if(void 0!==c&&("string"==typeof c||c instanceof ArrayBuffer||ArrayBuffer.isView(c)||c instanceof Blob))return c}}function I(a=globalThis.fetch.bind(globalThis),b,c){let d=c?{config:v(c),activeIndex:0,cooldownUntil:new Map,dispatchers:new Map}:w();return async(c,e)=>{let f;if(!function(a){try{let b="string"==typeof a||a instanceof URL?a.toString():a.url;return"opencode.ai"===new URL(b).hostname}catch{return!1}}(c))return a(c,e);let h=d.config.accounts.filter(a=>a.enabled&&a.apiKey);if(0===h.length)return new Response("OpenCode Zen accounts are unavailable",{status:503});let i=async b=>{let f,h,i=(f=new Headers(c instanceof Request?c.headers:void 0),e?.headers&&new Headers(e.headers).forEach((a,b)=>f.set(b,a)),f.set("authorization",`Bearer ${b.apiKey}`),h=function(a,b){let c=D(b.proxy);if(!c)return;let d=a.dispatchers.get(b.id);if(d)return d;let e=E(c,b.proxy.protocol);return a.dispatchers.set(b.id,e),e}(d,b),{...e,...c instanceof Request&&e?.method===void 0?{method:c.method}:{},headers:f,...void 0!==k?{body:k}:{},...h?{dispatcher:h}:{}});return i.dispatcher?await (0,g.hd)("string"==typeof c||c instanceof URL?c.toString():c.url,i):await a(c,i)},k=await H(c,e),m=!(c instanceof Request?null!==c.body:e?.body!==void 0&&null!==e.body)||void 0!==k,n=new Set,p=G(d,n)??G(d,n,!0);if(!p){let a=1/0;for(let b of d.cooldownUntil.values())b.until<a&&(a=b.until);let b=Number.isFinite(a)?Math.max(1,Math.ceil((a-Date.now())/1e3)):Math.ceil(d.config.cooldownMs/1e3);return new Response("OpenCode Zen accounts are cooling down",{status:503,headers:{"Retry-After":String(b)}})}let q=null,r=d.config.autoSwitch&&m?Math.min(Math.max(h.length,1),3):1;for(let a=0;a<r&&p;a++){n.add(p.id);let c=await i(p);if(429!==c.status||!d.config.autoSwitch)return c.ok&&(d.lastSuccessId=p.id),c.ok&&f&&o({sessionId:b,from:f,to:p.note,statusCode:429}),c;let e=await c.arrayBuffer();q=new Response(e,{status:c.status,statusText:c.statusText,headers:c.headers});let g=p;if(d.cooldownUntil.set(g.id,{until:l(),daily:!0}),a===r-1||!(p=G(d,n,!0)))break;d.lastSwitch={timestamp:new Date().toISOString(),from:g.note,to:p.note,statusCode:429},f=g.note,(0,j.wF)({level:"info",source:"opencode-zen-switch",provider:"opencode",message:`OpenCode Zen 429,已从 ${g.note} 切换到 ${p.note}`})}if(q&&d.config.autoSwitch&&n.size>0){let a=Date.now()+1e4;for(let b of n){let c=d.cooldownUntil.get(b);c&&!c.daily&&c.until>a&&d.cooldownUntil.set(b,{until:a,daily:!1})}}if(q&&d.config.autoSwitch&&m&&d.lastSuccessId&&!n.has(d.lastSuccessId)){let a=d.config.accounts.find(a=>a.id===d.lastSuccessId&&a.enabled&&a.apiKey&&!d.cooldownUntil.get(a.id)?.daily);if(a){n.add(a.id),(0,j.wF)({level:"info",source:"opencode-zen-switch",provider:"opencode",message:`OpenCode Zen 全败后回退最近成功账号 ${a.note}`});let c=await i(a);if(429!==c.status)return c.ok&&(d.activeIndex=Math.max(0,d.config.accounts.findIndex(b=>b.id===a.id)),d.lastSuccessId=a.id,f&&o({sessionId:b,from:f,to:a.note,statusCode:429})),c;let e=await c.arrayBuffer();q=new Response(e,{status:c.status,statusText:c.statusText,headers:c.headers}),d.cooldownUntil.set(a.id,{until:l(),daily:!0})}}return q??new Response("OpenCode Zen accounts are unavailable",{status:503})}}function J(a){return w().config.accounts.find(b=>b.id===a)?.apiKey??null}function K(a){return w().config.accounts.find(b=>b.id===a)?.proxy??null}function L(a){let b=x();if(!t(a))return b;let c=(Array.isArray(a.accounts)?a.accounts:b.accounts).map((a,c)=>{let d=t(a)?a:{},e="string"==typeof d.id&&d.id.trim()?d.id.trim():`account-${c+1}`,f=b.accounts.find(a=>a.id===e),g=f?.proxy??q(),h=t(d.proxy)?d.proxy:{};return{id:e,note:"string"==typeof d.note&&d.note.trim()?d.note.trim():f?.note??e,apiKey:"string"==typeof d.apiKey&&d.apiKey.trim()?d.apiKey.trim():f?.apiKey??"",enabled:!1!==d.enabled,proxy:{protocol:"http"===h.protocol||"https"===h.protocol||"socks5"===h.protocol?h.protocol:g.protocol,enabled:"boolean"==typeof h.enabled?h.enabled:g.enabled,url:"string"==typeof h.url?h.url.trim():g.url,port:Number.isInteger(Number(h.port))?Number(h.port):g.port,username:"string"==typeof h.username?h.username:g.username,password:"string"==typeof h.password&&h.password?h.password:g.password}}}).filter(a=>a.apiKey),d=t(a.externalAccess)?a.externalAccess:{},e=s({enabled:"boolean"==typeof d.enabled?d.enabled:b.externalAccess.enabled,port:Number.isInteger(Number(d.port))?Number(d.port):b.externalAccess.port,apiKey:"string"==typeof d.apiKey&&d.apiKey.trim()?d.apiKey.trim():b.externalAccess.apiKey},b.externalAccess);return v({accounts:c,autoSwitch:"boolean"==typeof a.autoSwitch?a.autoSwitch:b.autoSwitch,cooldownMs:"number"==typeof a.cooldownMs?a.cooldownMs:b.cooldownMs,externalAccess:e})}function M(a){let b=x(),c=function(a){let b=[];for(let[c,d]of a.split(/\r?\n/).entries()){let a=d.trim();if(!a)continue;let e=a.indexOf("-");if(e<=0||e===a.length-1)throw Error(`第 ${c+1} 行格式错误:需要 账号-apikey`);let f=a.slice(0,e).trim(),g=a.slice(e+1).trim();if(!f||!g)throw Error(`第 ${c+1} 行账号或 API Key 为空`);b.push({note:f,apiKey:g})}return b}(a),d=[...b.accounts];for(let a of c){let b=d.find(b=>b.apiKey===a.apiKey);if(b){b.note!==a.note&&(b.note=a.note);continue}d.push({id:`account-${Date.now().toString(36)}-${d.length}`,note:a.note,apiKey:a.apiKey,enabled:!0,proxy:q()})}return A({...b,accounts:d}),C()}d()}catch(a){d(a)}})}};
1
+ "use strict";exports.id=2303,exports.ids=[2303],exports.modules={8102:(a,b,c)=>{c.d(b,{$:()=>g});var d=c(55511),e=c(29021),f=c(33873);function g(a,b){let c=(0,f.dirname)(a),g=(0,f.join)(c,`.${(0,f.basename)(a)}-${(0,d.randomUUID)()}.tmp`),h=!1;try{(0,e.writeFileSync)(g,b,{encoding:"utf8",flag:"wx",mode:384,flush:!0}),(0,e.renameSync)(g,a)}catch(a){throw h=!0,a}finally{try{(0,e.unlinkSync)(g)}catch(a){if("ENOENT"!==a.code&&!h)throw a}}}},11301:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{hH:()=>s,oH:()=>r,wF:()=>q});var e=c(73024),f=c(76760),g=c(75430),h=c(8102),i=a([g]);g=(i.then?(await i)():i)[0];let t=new Set([400,401,403,404,408,409,413,429,500,502,503,504]);function j(){return(0,f.join)((0,g.getAgentDir)(),"pi-web-error-log.json")}function k(){globalThis.__piErrorLogState||(globalThis.__piErrorLogState={loaded:!1,entries:[]});let a=globalThis.__piErrorLogState;if(!a.loaded){a.loaded=!0;try{if((0,e.existsSync)(j())){let b=JSON.parse((0,e.readFileSync)(j(),"utf8"));Array.isArray(b)&&(a.entries=b.filter(l).slice(-500))}}catch{a.entries=[]}}return a}function l(a){return!(!a||"object"!=typeof a||Array.isArray(a))&&"string"==typeof a.id&&"string"==typeof a.timestamp&&("error"===a.level||"warning"===a.level||"info"===a.level)&&"string"==typeof a.source&&"string"==typeof a.message}function m(a){return a.replace(/https?:\/\/[^\s/@]+:[^\s/@]+@/gi,"https://[redacted]@").replace(/Bearer\s+[A-Za-z0-9._~+/=-]+/gi,"Bearer [redacted]").replace(/\bsk-[A-Za-z0-9_-]{8,}\b/g,"sk-[redacted]").replace(/\b(?:oc|opencode|zen)[_-]?[A-Za-z0-9._~-]{12,}\b/gi,"[key-redacted]").replace(/((?:api[_-]?key|token|password|secret)\s*[:=]\s*)([^\s,;]+)/gi,"$1[redacted]")}function n(a){return a.length>2e4?`${a.slice(0,2e4)}…`:a}function o(a){let b=a.match(/\bHTTP\s+(\d{3})\b|\bstatus(?:\s+code)?\s*[:=]?\s*(\d{3})\b|\b(4\d{2}|5\d{2})\b/i),c=Number(b?.[1]??b?.[2]??b?.[3]);return t.has(c)?c:void 0}function p(a){try{(0,h.$)(j(),JSON.stringify(a,null,2))}catch{}}function q(a){let b=k(),c=n(m(a.message.trim())),d=a.details?n(m(a.details)):void 0,e={id:`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date().toISOString(),level:a.level??"error",source:a.source??"unknown",...void 0!==a.statusCode?{statusCode:a.statusCode}:void 0!==o(c)?{statusCode:o(c)}:{},...a.provider?{provider:a.provider}:{},...a.model?{model:a.model}:{},...a.sessionId?{sessionId:a.sessionId}:{},message:c||"Unknown error",...d?{details:d}:{}};return b.entries.push(e),b.entries.length>500&&b.entries.splice(0,b.entries.length-500),p(b.entries),e}function r(a={}){let b=a.query?.trim().toLocaleLowerCase(),c=Math.min(Math.max(a.limit??200,1),500);return k().entries.filter(b=>void 0===a.statusCode||b.statusCode===a.statusCode).filter(b=>!a.level||b.level===a.level).filter(b=>!a.source||b.source===a.source).filter(a=>!b||[a.message,a.details,a.provider,a.model,a.source].filter(Boolean).some(a=>a.toLocaleLowerCase().includes(b))).slice().reverse().slice(0,c)}function s(){k().entries=[],p([])}d()}catch(a){d(a)}})},62303:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{DW:()=>x,KT:()=>C,MO:()=>y,Tn:()=>L,ZX:()=>F,av:()=>M,gS:()=>K,iO:()=>A,py:()=>J,qk:()=>m,rY:()=>n,tJ:()=>N,xl:()=>I,zB:()=>z});var e=c(73024),f=c(76760),g=c(47774),h=c(75430),i=c(8102),j=c(11301),k=a([h,j]);function l(a=Date.now()){let b=new Date(a);return Date.UTC(b.getUTCFullYear(),b.getUTCMonth(),b.getUTCDate()+1,0,0,0)}[h,j]=k.then?(await k)():k;let N=["opencode"];function m(a){return"opencode"===a||"opencode-go"===a}function n(a){return globalThis.__piOpenCodeZenSwitchListeners??=new Set,globalThis.__piOpenCodeZenSwitchListeners.add(a),()=>globalThis.__piOpenCodeZenSwitchListeners?.delete(a)}function o(a){for(let b of globalThis.__piOpenCodeZenSwitchListeners??[])b(a)}function p(){return(0,f.join)((0,h.getAgentDir)(),"opencode-zen.json")}function q(){return{protocol:"http",enabled:!1,url:"",port:0,username:"",password:""}}function r(){return{accounts:[],autoSwitch:!0,cooldownMs:6e4,externalAccess:{enabled:!1,port:7474,apiKey:""}}}function s(a,b){let c=t(a)?a:{},d=Number(c.port);return{enabled:!0===c.enabled,port:Number.isInteger(d)&&d>0&&d<=65535?d:b.port,apiKey:"string"==typeof c.apiKey?c.apiKey.trim():b.apiKey}}function t(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function u(a,b){if(!t(a))return null;let c="string"==typeof a.apiKey?a.apiKey.trim():"";if(!c)return null;let d="string"==typeof a.id&&a.id.trim()?a.id.trim():`account-${b+1}`;return{id:d,note:"string"==typeof a.note&&a.note.trim()?a.note.trim():d,apiKey:c,enabled:!1!==a.enabled,proxy:function(a){let b=t(a)?a:{},c=Number(b.port),d="string"==typeof b.url?b.url.trim():"",e="string"==typeof b.protocol?b.protocol.toLowerCase():void 0,f="https"===e||"socks5"===e?e:"http";if(d&&(void 0===e||"http"===e||"https"===e||"socks5"===e))try{let a=d.match(/^([a-z][a-z0-9+.-]*):\/\//i)?.[1]?.toLowerCase();("socks5"===a||"https"===a)&&(f=a)}catch{}if(d)try{let a=new URL(/^(https?|socks5):\/\//i.test(d)?d:`http://${d}`);d="http:"!==a.protocol&&"https:"!==a.protocol&&"socks5:"!==a.protocol||a.username||a.password||"/"!==a.pathname&&""!==a.pathname||a.search||a.hash?"":`${a.protocol}//${a.hostname}`}catch{d=""}return{protocol:f,enabled:!1!==b.enabled,url:d,port:Number.isInteger(c)&&c>0&&c<=65535?c:0,username:"string"==typeof b.username?b.username:"",password:"string"==typeof b.password?b.password:""}}(a.proxy)}}function v(a){let b=t(a)?a:{},c=Array.isArray(b.accounts)?b.accounts.map(u).filter(a=>null!==a):[],d=Number(b.cooldownMs),e=r().externalAccess;return{accounts:c,autoSwitch:!1!==b.autoSwitch,cooldownMs:Number.isFinite(d)?Math.min(Math.max(d,0),6e5):6e4,externalAccess:s(b.externalAccess,e)}}function w(){return globalThis.__piOpenCodeZenState||(globalThis.__piOpenCodeZenState={config:function(){try{if((0,e.existsSync)(p()))return v(JSON.parse((0,e.readFileSync)(p(),"utf8")));let a=(0,f.join)((0,h.getAgentDir)(),"auth.json");if((0,e.existsSync)(a)){let b=JSON.parse((0,e.readFileSync)(a,"utf8")),c=t(b.opencode)?b.opencode:null,d=c&&"string"==typeof c.key?c.key.trim():"";if(d)return v({accounts:[{id:"legacy-opencode",note:"默认 OpenCode Zen",apiKey:d,enabled:!0,proxy:q()}]})}return r()}catch{return r()}}(),activeIndex:0,cooldownUntil:new Map,dispatchers:new Map}),globalThis.__piOpenCodeZenState}function x(){return structuredClone(w().config)}function y(){return w().config.accounts.find(a=>a.enabled&&a.apiKey)?.apiKey??null}async function z(a){let b=y();if(b)for(let c of(await Promise.allSettled(N.map(c=>a.setRuntimeApiKey(c,b)))))"rejected"===c.status&&(0,j.wF)({level:"warning",source:"opencode-zen-runtime",provider:"opencode",message:`设置 OpenCode Zen runtime Key 失败:${c.reason instanceof Error?c.reason.message:String(c.reason)}`})}function A(a,b){var c;let d,g=w();for(let c of(g.config=v(a),g.activeIndex=b?Math.max(0,g.config.accounts.findIndex(a=>a.id===b)):0,g.cooldownUntil.clear(),g.dispatchers.values()))c.close().catch(()=>{});g.dispatchers.clear(),c=g.config,d=p(),(0,e.mkdirSync)((0,f.dirname)(d),{recursive:!0,mode:448}),(0,i.$)(d,JSON.stringify(c,null,2))}function B(a){return a.length<=8?"••••••••":`${a.slice(0,4)}••••${a.slice(-4)}`}function C(){let a=w(),b=a.config.accounts[a.activeIndex],c=a.config.externalAccess;return{accounts:a.config.accounts.map(a=>({id:a.id,note:a.note,enabled:a.enabled,apiKeyMasked:B(a.apiKey),hasApiKey:!!a.apiKey,proxy:{protocol:a.proxy.protocol,enabled:a.proxy.enabled,url:a.proxy.url,port:a.proxy.port,username:a.proxy.username,password:"",hasPassword:!!a.proxy.password}})),autoSwitch:a.config.autoSwitch,cooldownMs:a.config.cooldownMs,externalAccess:{enabled:c.enabled,port:c.port,apiKeyMasked:B(c.apiKey),hasApiKey:!!c.apiKey,status:globalThis.__piOpenCodeZenExternalStatus??{running:!1}},...b?{activeAccountId:b.id}:{},...a.lastSwitch?{lastSwitch:a.lastSwitch}:{}}}function D(a){if(!a.enabled||!a.url||!a.port)return null;if(!Number.isInteger(a.port)||a.port<1||a.port>65535)throw Error("代理端口无效,必须为 1-65535 的整数");let b=a.url.trim();if(b.includes("://")&&!/^(https?|socks5):\/\//i.test(b))throw Error("OpenCode Zen 账号代理仅支持 http/https/socks5");/^(https?|socks5):\/\//i.test(b)||(b=`http://${b}`);let c=new URL(b);if(c.username||c.password||"/"!==c.pathname||c.search||c.hash)throw Error("代理 URL 只允许主机名,用户名和密码请填写独立字段");if(c.port=String(a.port),a.username&&(c.username=a.username),a.password&&(c.password=a.password),"http:"!==c.protocol&&"https:"!==c.protocol&&"socks5:"!==c.protocol)throw Error("OpenCode Zen 账号代理仅支持 http/https/socks5");return c.toString()}function E(a,b){return"socks5"===b?new g.EV(a):new g.kT(a)}async function F(a){let b=D(a);if(!b)return{ok:!0,latencyMs:0};let c=E(b,a.protocol),d=Date.now();try{let a=await (0,g.Em)("https://opencode.ai/zen/v1/models",{dispatcher:c,headers:{Accept:"application/json","User-Agent":"pi-web-opencode-zen-test"},headersTimeout:15e3,bodyTimeout:15e3});return await a.body.text(),{ok:a.statusCode<500,status:a.statusCode,latencyMs:Date.now()-d}}catch(a){return{ok:!1,latencyMs:Date.now()-d,error:(a instanceof Error?a.message:String(a)).replace(/https?:\/\/[^\s/@]+:[^\s/@]+@/gi,"[proxy]@").replace(/(password|pass|secret|token|key)\s*[:=]\s*[^\s,;]+/gi,"$1=[redacted]")}}finally{await c.close().catch(()=>{})}}function G(a,b=new Set,c=!1){let d=Date.now(),e=a.config.accounts.length;if(0===e)return null;let f=null;for(let c=0;c<e;c++){let g=(a.activeIndex+c)%e,h=a.config.accounts[g];if(!h.enabled||!h.apiKey||b.has(h.id))continue;let i=a.cooldownUntil.get(h.id),j=i?.until??0;if(j>d){i?.daily||f&&!(j<f.until)||(f={account:h,index:g,until:j});continue}return a.activeIndex=(g+1)%e,h}return c&&f?(a.activeIndex=(f.index+1)%e,f.account):null}async function H(a,b){let c=b?.body;if(null!==c){if(void 0===c&&a instanceof Request&&null!==a.body)try{return await a.clone().arrayBuffer()}catch{return}if(void 0!==c&&("string"==typeof c||c instanceof ArrayBuffer||ArrayBuffer.isView(c)||c instanceof Blob))return c}}function I(a=globalThis.fetch.bind(globalThis),b,c){let d=c?{config:v(c),activeIndex:0,cooldownUntil:new Map,dispatchers:new Map}:w();return async(c,e)=>{let f;if(!function(a){try{let b="string"==typeof a||a instanceof URL?a.toString():a.url;return"opencode.ai"===new URL(b).hostname}catch{return!1}}(c))return a(c,e);let h=d.config.accounts.filter(a=>a.enabled&&a.apiKey);if(0===h.length)return new Response("OpenCode Zen accounts are unavailable",{status:503});let i=async b=>{let f,h,i=(f=new Headers(c instanceof Request?c.headers:void 0),e?.headers&&new Headers(e.headers).forEach((a,b)=>f.set(b,a)),f.set("authorization",`Bearer ${b.apiKey}`),h=function(a,b){let c=D(b.proxy);if(!c)return;let d=a.dispatchers.get(b.id);if(d)return d;let e=E(c,b.proxy.protocol);return a.dispatchers.set(b.id,e),e}(d,b),{...e,...c instanceof Request&&e?.method===void 0?{method:c.method}:{},headers:f,...void 0!==k?{body:k}:{},...h?{dispatcher:h}:{}});return i.dispatcher?await (0,g.hd)("string"==typeof c||c instanceof URL?c.toString():c.url,i):await a(c,i)},k=await H(c,e),m=!(c instanceof Request?null!==c.body:e?.body!==void 0&&null!==e.body)||void 0!==k,n=new Set,p=G(d,n)??G(d,n,!0);if(!p){let a=1/0;for(let b of d.cooldownUntil.values())b.until<a&&(a=b.until);let b=Number.isFinite(a)?Math.max(1,Math.ceil((a-Date.now())/1e3)):Math.ceil(d.config.cooldownMs/1e3);return new Response("OpenCode Zen accounts are cooling down",{status:503,headers:{"Retry-After":String(b)}})}let q=null,r=d.config.autoSwitch&&m?Math.min(Math.max(h.length,1),3):1;for(let a=0;a<r&&p;a++){n.add(p.id);let c=await i(p);if(429!==c.status||!d.config.autoSwitch)return c.ok&&(d.lastSuccessId=p.id),c.ok&&f&&o({sessionId:b,from:f,to:p.note,statusCode:429}),c;let e=await c.arrayBuffer();q=new Response(e,{status:c.status,statusText:c.statusText,headers:c.headers});let g=p;if(d.cooldownUntil.set(g.id,{until:l(),daily:!0}),a===r-1||!(p=G(d,n,!0)))break;d.lastSwitch={timestamp:new Date().toISOString(),from:g.note,to:p.note,statusCode:429},f=g.note,(0,j.wF)({level:"info",source:"opencode-zen-switch",provider:"opencode",message:`OpenCode Zen 429,已从 ${g.note} 切换到 ${p.note}`})}if(q&&d.config.autoSwitch&&n.size>0){let a=Date.now()+1e4;for(let b of n){let c=d.cooldownUntil.get(b);c&&!c.daily&&c.until>a&&d.cooldownUntil.set(b,{until:a,daily:!1})}}if(q&&d.config.autoSwitch&&m&&d.lastSuccessId&&!n.has(d.lastSuccessId)){let a=d.config.accounts.find(a=>a.id===d.lastSuccessId&&a.enabled&&a.apiKey&&!d.cooldownUntil.get(a.id)?.daily);if(a){n.add(a.id),(0,j.wF)({level:"info",source:"opencode-zen-switch",provider:"opencode",message:`OpenCode Zen 全败后回退最近成功账号 ${a.note}`});let c=await i(a);if(429!==c.status)return c.ok&&(d.activeIndex=Math.max(0,d.config.accounts.findIndex(b=>b.id===a.id)),d.lastSuccessId=a.id,f&&o({sessionId:b,from:f,to:a.note,statusCode:429})),c;let e=await c.arrayBuffer();q=new Response(e,{status:c.status,statusText:c.statusText,headers:c.headers}),d.cooldownUntil.set(a.id,{until:l(),daily:!0})}}return q??new Response("OpenCode Zen accounts are unavailable",{status:503})}}function J(a){return w().config.accounts.find(b=>b.id===a)?.apiKey??null}function K(a){return w().config.accounts.find(b=>b.id===a)?.proxy??null}function L(a){let b=x();if(!t(a))return b;let c=(Array.isArray(a.accounts)?a.accounts:b.accounts).map((a,c)=>{let d=t(a)?a:{},e="string"==typeof d.id&&d.id.trim()?d.id.trim():`account-${c+1}`,f=b.accounts.find(a=>a.id===e),g=f?.proxy??q(),h=t(d.proxy)?d.proxy:{};return{id:e,note:"string"==typeof d.note&&d.note.trim()?d.note.trim():f?.note??e,apiKey:"string"==typeof d.apiKey&&d.apiKey.trim()?d.apiKey.trim():f?.apiKey??"",enabled:!1!==d.enabled,proxy:{protocol:"http"===h.protocol||"https"===h.protocol||"socks5"===h.protocol?h.protocol:g.protocol,enabled:"boolean"==typeof h.enabled?h.enabled:g.enabled,url:"string"==typeof h.url?h.url.trim():g.url,port:Number.isInteger(Number(h.port))?Number(h.port):g.port,username:"string"==typeof h.username?h.username:g.username,password:"string"==typeof h.password&&h.password?h.password:g.password}}}).filter(a=>a.apiKey),d=t(a.externalAccess)?a.externalAccess:{},e=s({enabled:"boolean"==typeof d.enabled?d.enabled:b.externalAccess.enabled,port:Number.isInteger(Number(d.port))?Number(d.port):b.externalAccess.port,apiKey:"string"==typeof d.apiKey&&d.apiKey.trim()?d.apiKey.trim():b.externalAccess.apiKey},b.externalAccess);return v({accounts:c,autoSwitch:"boolean"==typeof a.autoSwitch?a.autoSwitch:b.autoSwitch,cooldownMs:"number"==typeof a.cooldownMs?a.cooldownMs:b.cooldownMs,externalAccess:e})}function M(a){let b=x(),c=function(a){let b=[];for(let[c,d]of a.split(/\r?\n/).entries()){let a=d.trim();if(!a)continue;let e=a.indexOf("-");if(e<=0||e===a.length-1)throw Error(`第 ${c+1} 行格式错误:需要 账号-apikey`);let f=a.slice(0,e).trim(),g=a.slice(e+1).trim();if(!f||!g)throw Error(`第 ${c+1} 行账号或 API Key 为空`);b.push({note:f,apiKey:g})}return b}(a),d=[...b.accounts],e=w(),f=e.config.accounts[e.activeIndex]?.id;for(let a of c){let b=d.find(b=>b.apiKey===a.apiKey);if(b){b.note!==a.note&&(b.note=a.note);continue}d.push({id:`account-${Date.now().toString(36)}-${d.length}`,note:a.note,apiKey:a.apiKey,enabled:!0,proxy:q()})}return A({...b,accounts:d},f),C()}d()}catch(a){d(a)}})}};
@@ -1,2 +1,2 @@
1
- exports.id=7915,exports.ids=[7915],exports.modules={8102:(a,b,c)=>{"use strict";c.d(b,{$:()=>g});var d=c(55511),e=c(29021),f=c(33873);function g(a,b){let c=(0,f.dirname)(a),g=(0,f.join)(c,`.${(0,f.basename)(a)}-${(0,d.randomUUID)()}.tmp`),h=!1;try{(0,e.writeFileSync)(g,b,{encoding:"utf8",flag:"wx",mode:384,flush:!0}),(0,e.renameSync)(g,a)}catch(a){throw h=!0,a}finally{try{(0,e.unlinkSync)(g)}catch(a){if("ENOENT"!==a.code&&!h)throw a}}}},39006:a=>{"use strict";a.exports=JSON.parse('{"name":"@qt4798/pi-web","version":"0.9.18","description":"Web workspace for the pi coding agent","homepage":"https://github.com/t479842598/pi-web-QT#readme","repository":{"type":"git","url":"git+https://github.com/t479842598/pi-web-QT.git"},"bugs":{"url":"https://github.com/t479842598/pi-web-QT/issues"},"license":"MIT","engines":{"node":">=22.19.0"},"bin":{"pi-web":"bin/pi-web.js"},"files":["bin",".next","!.next/cache","!.next/dev","!.next/**/*.js.map","lib/theme","public","next.config.ts","package.json"],"scripts":{"dev":"node bin/fix-pi-agent-undici.js && next dev -H 127.0.0.1 -p 0 --turbopack","dev:lan":"node bin/fix-pi-agent-undici.js && next dev -H 0.0.0.0 -p 0 --turbopack","build":"env -u TURBOPACK next build --webpack","start":"node bin/fix-pi-agent-undici.js && next start -H 127.0.0.1 -p 0","start:lan":"node bin/fix-pi-agent-undici.js && next start -H 0.0.0.0 -p 0","lint":"eslint .","release":"npm version patch --no-git-tag-version && npm run build && npm publish --access public","test":"node --experimental-strip-types --test $(find app components hooks lib -name \'*.test.mjs\' -print)"},"dependencies":{"@earendil-works/pi-agent-core":"0.84.0","@earendil-works/pi-ai":"0.84.0","@earendil-works/pi-coding-agent":"0.84.0","@earendil-works/pi-tui":"0.84.0","@fontsource/ia-writer-quattro":"^5.3.0","@fontsource/lilex":"^5.3.0","@phosphor-icons/react":"^2.1.10","@types/react-syntax-highlighter":"^15.5.13","adm-zip":"^0.6.0","katex":"^0.16.47","mammoth":"^1.12.0","mermaid":"^11.14.0","next":"16.2.12","proper-lockfile":"4.1.2","react":"^19.2.4","react-dom":"^19.2.4","react-markdown":"^10.1.0","react-syntax-highlighter":"^16.1.1","rehype-katex":"^7.0.1","rehype-raw":"^7.0.0","rehype-sanitize":"^6.0.0","remark-gfm":"^4.0.1","remark-math":"^6.0.0","undici":"^8.10.0"},"overrides":{"undici":"^8.10.0","@earendil-works/pi-coding-agent":{"undici":"^8.10.0"},"intersection-observer":"npm:noop2@2.0.0","node-domexception":"npm:@profoundlogic/node-domexception@1.0.2"},"allowScripts":{"@google/genai@1.52.0":true,"protobufjs@7.6.5":true,"sharp@0.34.5":true,"unrs-resolver@1.12.2":true},"devDependencies":{"@resvg/resvg-js":"^2.6.2","@tailwindcss/postcss":"^4.2.2","@types/node":"^25","@types/proper-lockfile":"4.1.4","@types/react":"^19","@types/react-dom":"^19","eslint":"^9.39.5","eslint-config-next":"16.2.12","jiti":"^2.7.0","lightningcss":"^1.33.0","postcss":"^8","tailwindcss":"^4.2.2","to-ico":"^1.1.5","typescript":"^5.9.3"}}')},50593:(a,b,c)=>{"use strict";function d(a){return/^[a-zA-Z]:[\\/]/.test(a)||a.startsWith("\\\\")?a.replace(/\\/g,"/"):a}c.d(b,{A0:()=>d})},66544:(a,b,c)=>{"use strict";c.d(b,{E2:()=>k,EN:()=>j});var d=c(77030);function e(a){return(a.startsWith("[")&&a.endsWith("]")?a.slice(1,-1):a).toLowerCase().replace(/\.$/,"")}function f(a){if(!a||/[\s/@\\]/.test(a))return null;try{let b=new URL(`http://${a}`);if(b.username||b.password||"/"!==b.pathname||b.search||b.hash)return null;return e(b.hostname)}catch{return null}}function g(){return[process.env.PI_WEB_HOSTNAME,...process.env.PI_WEB_ALLOWED_HOSTS?.split(",")??[]].filter(a=>!!a?.trim())}function h(a){try{return new URL(a).origin}catch{return null}}let i=new Set(["POST","PUT","PATCH","DELETE"]);function j(a,b=g()){return!!function(a,b=g()){let c=a.headers.get("host"),h=c?f(c):null;return!!h&&(!!("localhost"===h||h.endsWith(".localhost")||(0,d.isIP)(h))||b.some(a=>{let b;return((b=a?.trim())?(0,d.isIP)(b)?e(b):f(b):null)===h}))}(a,b)&&(!!function(a){if("GET"!==a.method||"navigate"!==a.headers.get("sec-fetch-mode")||"document"!==a.headers.get("sec-fetch-dest")||"?1"!==a.headers.get("sec-fetch-user"))return!1;try{return/^\/api\/sessions\/[^/]+\/export$/.test(new URL(a.url).pathname)}catch{return!1}}(a)||(a.headers.has("origin")||a.headers.has("sec-fetch-site")?function(a){let b,c;if("cross-site"===a.headers.get("sec-fetch-site"))return!1;let d=a.headers.get("origin");if(!d)return!0;let e=(b=new URL(a.url),(c=a.headers.get("host"))?h(`${b.protocol}//${c}`):null);return null!==e&&h(d)===e}(a):!i.has((a.method??"GET").toUpperCase())))}function k(a){let b=a.headers.get("content-type")?.split(";",1)[0]?.trim().toLowerCase();return"application/json"===b||!!(b?.startsWith("application/")&&b.endsWith("+json"))}},78335:()=>{},89628:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{DT:()=>y,dH:()=>A,g3:()=>z,jE:()=>v,lz:()=>B,uj:()=>t});var e=c(26106),f=c.n(e),g=c(29021),h=c(21820),i=c(33873),j=c(75430),k=c(50593),l=c(8102),m=a([j]);j=(m.then?(await m)():m)[0];let D="pi-backup",E="${agentDir}",F="${home}";function n(a){if(!(0,g.existsSync)(a))return null;try{let b=JSON.parse((0,g.readFileSync)(a,"utf8"));return null!==b&&"object"==typeof b?b:null}catch{return null}}function o(a){let b=[],c=[""];for(;c.length>0;){let d,e=c.pop(),f=(0,i.join)(a,e);try{d=(0,g.readdirSync)(f)}catch{continue}for(let a of d){let d;if("node_modules"===a||".git"===a)continue;let h=e?`${e}/${a}`:a,j=(0,i.join)(f,a);try{d=(0,g.statSync)(j)}catch{continue}d.isDirectory()?c.push(h):d.isFile()&&b.push(h)}}return b}function p(a){let b=(0,k.A0)((0,j.getAgentDir)()),c=(0,k.A0)((0,h.homedir)());return r(a,a=>{let d=(0,k.A0)(a);return d===b?E:d===c?F:d.startsWith(b+"/")?E+d.slice(b.length):d.startsWith(c+"/")?F+d.slice(c.length):a})}function q(a){let b=(0,j.getAgentDir)(),c=(0,h.homedir)();return r(a,a=>a===E?b:a===F?c:a.startsWith(E+"/")?(0,i.join)(b,...a.slice(E.length+1).split("/")):a.startsWith(F+"/")?(0,i.join)(c,...a.slice(F.length+1).split("/")):a)}function r(a,b){if("string"==typeof a)return b(a);if(Array.isArray(a))return a.map(a=>r(a,b));if(null!==a&&"object"==typeof a){let c={};for(let[d,e]of Object.entries(a))c[d]=r(e,b);return c}return a}function s(a,b,c){a.addFile(`${D}/${b}`,Buffer.isBuffer(c)?c:Buffer.from(c,"utf8"))}function t(a){let b=(0,j.getAgentDir)(),d=new(f()),e={formatVersion:1,createdAt:new Date().toISOString(),...function(){try{let a=c(39006),b=c(Object(function(){var a=Error("Cannot find module '@earendil-works/pi-coding-agent/package.json'");throw a.code="MODULE_NOT_FOUND",a}()));return{piWebVersion:a.version??"unknown",piSdkVersion:b.version??"unknown"}}catch{return{piWebVersion:"unknown",piSdkVersion:"unknown"}}}(),sourcePlatform:process.platform,includeSecrets:a.includeSecrets,includeSessions:a.includeSessions,files:[],mcpBinScripts:[],localPackages:[],absolutePaths:[],warnings:[]};for(let c of["models.json","auth.json","settings.json","mcp.json","models-store.json","AGENTS.md","APPEND_SYSTEM.md"]){let f=(0,i.join)(b,c);if(!(0,g.existsSync)(f)||"auth.json"===c&&!a.includeSecrets)continue;let h=(0,g.readFileSync)(f,"utf8");if("models.json"!==c||a.includeSecrets){if("settings.json"===c||"mcp.json"===c||"models.json"===c){let a=n(f);a&&(h=JSON.stringify(p(a),null,2))}}else{let a=n(f);a&&(h=JSON.stringify(function(a){let b=a.providers??{},c={};for(let[a,d]of Object.entries(b))c[a]={...d},"string"==typeof c[a].apiKey&&(c[a].apiKey="");return{...a,providers:c}}(a),null,2))}s(d,c,String(h)),e.files.push(`${D}/${c}`)}let h=(0,i.join)(b,"skills");if((0,g.existsSync)(h))for(let a of o(h))d.addFile(`${D}/skills/${a}`,(0,g.readFileSync)((0,i.join)(h,a))),e.files.push(`${D}/skills/${a}`);let l=n((0,i.join)(b,"settings.json"));for(let a of l?.packages??[]){let b="string"==typeof a?a:a?.source;if(!b||b.startsWith("npm:"))continue;let c=(0,k.A0)(b);if((0,i.isAbsolute)(c)&&(0,g.existsSync)(c)){let a=(0,i.basename)(c);for(let b of o(c))d.addFile(`${D}/local-packages/${a}/${b}`,(0,g.readFileSync)((0,i.join)(c,b))),e.files.push(`${D}/local-packages/${a}/${b}`);e.localPackages.push(a)}else e.warnings.push(`Local package skipped (not found or not absolute): ${b}`)}let m=n((0,i.join)(b,"mcp.json")),q=new Set;if(m?.mcpServers)for(let a of Object.values(m.mcpServers))!function a(b,c){if("string"==typeof b){let a=`${E}/bin/`;if(b.startsWith(a)){let d=b.slice(a.length).split("/")[0];d&&c.add(d)}return}if(Array.isArray(b)){for(let d of b)a(d,c);return}if(null!==b&&"object"==typeof b)for(let d of Object.values(b))a(d,c)}(p(a),q);for(let a of q){let c=(0,i.join)(b,"bin",a);(0,g.existsSync)(c)&&(0,g.statSync)(c).isFile()?(d.addFile(`${D}/bin/${a}`,(0,g.readFileSync)(c)),e.files.push(`${D}/bin/${a}`),e.mcpBinScripts.push(a)):e.warnings.push(`MCP bin script referenced but missing: ${a}`)}if(a.includeSessions){let a=(0,i.join)(b,"sessions");if((0,g.existsSync)(a))for(let b of o(a))d.addFile(`${D}/sessions/${b}`,(0,g.readFileSync)((0,i.join)(a,b))),e.files.push(`${D}/sessions/${b}`)}return s(d,"manifest.json",JSON.stringify(e,null,2)),d.toBuffer()}let G=new Set(["npx","uvx","node","uv","npm","git","python3","python","bun","deno"]);function u(a){let b=a.toString("utf8",0,256).split(/\r?\n/,1)[0]??"";return b.startsWith("#!")?b:null}function v(a,b,c){let d=(0,j.getAgentDir)(),e=c??process.platform,f="win32"===e,g=[],h=[];for(let[c,j]of Object.entries(a)){let a,l=q(j),m="string"==typeof l.command?l.command:"",n=Array.isArray(l.args)?l.args.map(String):[],o={command:m,args:n},p=function(a,b){if(!a)return"manual";if((0,k.A0)(a).startsWith((0,k.A0)(b)+"/bin/"))return"restore-script";if(a.includes("/")||a.includes("\\")||a.includes(":"))return"keep-with-warning";let c=a.split(/[\s]/)[0];return G.has(c),"keep"}(m,d),r=null;if("restore-script"===p){let j=(0,i.basename)((0,k.A0)(m)),l=b.get(j);if(!l){r=null,a=`bin script ${j} missing from backup`,h.push({name:c,original:o,adapted:r,action:"manual",platform:e,reason:a,installPrompt:C({name:c,original:o,adapted:r,action:"manual",platform:e,reason:a})});continue}if(!w(j)){a=`bin script name rejected (unsafe): ${j}`;let b={name:c,original:o,adapted:null,action:"manual",platform:e,reason:a};h.push({...b,installPrompt:C(b)}),g.push(`${c}: ${a}`);continue}if(!x(l)){a="bin script content rejected (unrecognized shebang)";let b={name:c,original:o,adapted:null,action:"manual",platform:e,reason:a};h.push({...b,installPrompt:C(b)}),g.push(`${c}: ${a}`);continue}if(f){let b=u(l);if(b&&b.includes("node"))r={command:(0,i.join)(d,"bin",`${j}.cmd`),args:n},h.push({name:c,original:o,adapted:r,action:"generate-cmd",platform:e,reason:(0,i.join)(d,"bin",j)});else{a="bash/other shebang wrapper cannot run on Windows; reinstall or adjust manually";let b={name:c,original:o,adapted:null,action:"manual",platform:e,reason:a};h.push({...b,installPrompt:C(b)}),g.push(`${c}: ${a}`)}}else r={command:(0,i.join)(d,"bin",j),args:n},h.push({name:c,original:o,adapted:r,action:"restore-script",platform:e});continue}if("keep-with-warning"===p){r={command:m,args:n},a="absolute path outside agentDir/bin — verify it exists on this machine",h.push({name:c,original:o,adapted:r,action:"keep-with-warning",platform:e,reason:a}),g.push(`${c}: ${a}`);continue}r={command:m,args:n},h.push({name:c,original:o,adapted:r,action:"keep",platform:e})}return{servers:h,warnings:g}}function w(a){return/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(a)&&!a.includes("..")}function x(a){let b=u(a);if(!b)return!1;let c=b.slice(2).trim().split(/\s+/);if(0===c.length)return!1;let d=c[0],e=d.split("/").pop()??d;return!!["node","bash","sh","python3","python","zsh"].includes(e)||"env"===e&&c.length>1&&["node","bash","sh","python3","python"].includes(c[1].split("/").pop()??"")}function y(a){let b;try{b=new(f())(a)}catch(a){throw Error(`Not a valid zip archive: ${a instanceof Error?a.message:String(a)}`)}let c=b.getEntries(),d=(0,g.mkdtempSync)((0,i.join)((0,h.tmpdir)(),"pi-backup-")),e=(0,i.join)(d,D);(0,g.mkdirSync)(e,{recursive:!0});let j=0,k=0;for(let a of c){if(a.isDirectory)continue;let c=a.entryName.replace(/\\/g,"/");if(!c.startsWith(`${D}/`))throw(0,g.rmSync)(d,{recursive:!0,force:!0}),Error(`Unexpected entry outside ${D}/: ${c}`);let f=(0,i.resolve)(e,c.slice(D.length+1));if(!f.startsWith((0,i.resolve)(e)+i.sep))throw(0,g.rmSync)(d,{recursive:!0,force:!0}),Error(`Path traversal blocked: ${c}`);let h="number"==typeof a.header.size?a.header.size:0;if(j+=h,h>0x20000000||j>0x40000000)throw(0,g.rmSync)(d,{recursive:!0,force:!0}),Error(`Backup archive too large when extracted (entry: ${c})`);(0,g.mkdirSync)((0,i.dirname)(f),{recursive:!0}),b.extractEntryTo(a,(0,i.dirname)(f),!1,!0);let l=(0,g.statSync)(f).size;if(k+=l,l>0x20000000||k>0x40000000)throw(0,g.rmSync)(d,{recursive:!0,force:!0}),Error(`Backup archive too large when extracted (entry: ${c})`)}let l=(0,i.join)(e,"manifest.json");if(!(0,g.existsSync)(l))throw(0,g.rmSync)(d,{recursive:!0,force:!0}),Error("Backup manifest.json missing — not a pi-web backup");let m=n(l);if(!m||1!==m.formatVersion)throw(0,g.rmSync)(d,{recursive:!0,force:!0}),Error(`Unsupported backup format version: ${m?.formatVersion??"unknown"} (expected 1)`);let o=n((0,i.join)(e,"mcp.json"))?.mcpServers??{},p=new Map;for(let a of m.mcpBinScripts??[]){let b=(0,i.join)(e,"bin",a);(0,g.existsSync)(b)&&p.set(a,(0,g.readFileSync)(b))}let q=["core","skills","packages","mcp"];return m.includeSessions&&q.push("sessions"),{manifest:m,tempDir:d,servers:o,binScripts:p,categories:q}}function z(a){(0,g.rmSync)(a.tempDir,{recursive:!0,force:!0})}function A(a,b){let c=(0,j.getAgentDir)(),{manifest:d}=a,e={restored:[],needsRestart:[],manual:[],warnings:[]},f=new Set(b.categories),h=new Set(b.skippedMcpServers),m=b=>{let d=(0,i.join)(c,b),f=(0,i.join)(a.tempDir,D,b);(0,g.existsSync)(f)&&((0,g.mkdirSync)((0,i.dirname)(d),{recursive:!0}),(0,l.$)(d,(0,g.readFileSync)(f,"utf8")),e.restored.push(b))};if(f.has("core"))for(let a of["models.json","auth.json","settings.json","mcp.json","models-store.json","AGENTS.md","APPEND_SYSTEM.md"])("auth.json"!==a||d.includeSecrets)&&(m(a),e.needsRestart.push(a));if(f.has("skills")){let b=(0,i.join)(a.tempDir,D,"skills");if((0,g.existsSync)(b)){for(let a of o(b)){let d=(0,i.join)(c,"skills",a);(0,g.mkdirSync)((0,i.dirname)(d),{recursive:!0}),(0,l.$)(d,(0,g.readFileSync)((0,i.join)(b,a),"utf8"))}e.restored.push("skills/")}}if(f.has("packages")){let b=(0,i.join)(c,"settings.json"),f=n(b)??{},h=f.packages??[],j=d.localPackages??[],m=(0,i.join)(a.tempDir,D,"local-packages");for(let a of j){if(!w(a)){e.warnings.push(`Local package ${a} not restored (unsafe name)`);continue}let b=(0,i.join)(m,a);if(!(0,g.existsSync)(b)){e.warnings.push(`Local package ${a} missing from backup`);continue}let d=(0,i.join)(c,"local-packages",a);for(let a of o(b)){let c=(0,i.join)(d,a);(0,g.mkdirSync)((0,i.dirname)(c),{recursive:!0}),(0,l.$)(c,(0,g.readFileSync)((0,i.join)(b,a),"utf8"))}e.restored.push(`local-packages/${a}`)}let p=!1,q=h.map(a=>{let b="string"==typeof a?a:a?.source;if("string"!=typeof b||b.startsWith("npm:"))return a;let d=(0,i.basename)((0,k.A0)(b));if(j.includes(d)){p=!0;let b=(0,i.join)(c,"local-packages",d);return"string"==typeof a?b:{...a,source:b}}return a});if(p){let a={...f,packages:q};(0,l.$)(b,JSON.stringify(a,null,2)),e.restored.push("settings.json (packages paths)"),e.needsRestart.push("settings.json (packages paths)")}for(let a of h.map(a=>"string"==typeof a?a:a?.source).filter(a=>"string"==typeof a&&a.startsWith("npm:")))e.restored.push(`npm package ${a} (queued for reinstall)`)}if(f.has("mcp")){let b=v(a.servers,a.binScripts);e.warnings.push(...b.warnings);let d=n((0,i.join)(c,"mcp.json"))??{},f={};for(let d of b.servers){if(h.has(d.name))continue;if("manual"===d.action){e.manual.push({server:d.name,message:d.reason??"cannot be adapted automatically"});continue}let b=a.servers[d.name]??{},j=q(b);if(f[d.name]={...j,command:d.adapted?.command??j.command,...d.adapted?{args:d.adapted.args}:{}},"restore-script"===d.action){let b=(0,i.basename)((0,k.A0)(String(d.adapted?.command??""))),f=a.binScripts.get(b);if(f&&w(b)&&x(f)){let a=(0,i.join)(c,"bin",b);(0,g.mkdirSync)((0,i.dirname)(a),{recursive:!0}),(0,l.$)(a,f.toString("utf8"));try{(0,g.chmodSync)(a,493)}catch{}e.restored.push(`bin/${b}`)}else e.warnings.push(`bin script ${b} not restored (unsafe name or content)`)}if("generate-cmd"===d.action){let b=(0,i.basename)((0,k.A0)(String(d.adapted?.command??""))).replace(/\.cmd$/,""),f=a.binScripts.get(b);if(f&&w(b)&&x(f)){let a=(0,i.join)(c,"bin",b);(0,g.mkdirSync)((0,i.dirname)(a),{recursive:!0}),(0,l.$)(a,f.toString("utf8"));let d=(0,i.join)(c,"bin",`${b}.cmd`),h=`%~dp0${b}`;(0,l.$)(d,`@node "${h}" %*\r
1
+ exports.id=7915,exports.ids=[7915],exports.modules={8102:(a,b,c)=>{"use strict";c.d(b,{$:()=>g});var d=c(55511),e=c(29021),f=c(33873);function g(a,b){let c=(0,f.dirname)(a),g=(0,f.join)(c,`.${(0,f.basename)(a)}-${(0,d.randomUUID)()}.tmp`),h=!1;try{(0,e.writeFileSync)(g,b,{encoding:"utf8",flag:"wx",mode:384,flush:!0}),(0,e.renameSync)(g,a)}catch(a){throw h=!0,a}finally{try{(0,e.unlinkSync)(g)}catch(a){if("ENOENT"!==a.code&&!h)throw a}}}},39006:a=>{"use strict";a.exports=JSON.parse('{"name":"@qt4798/pi-web","version":"0.9.19","description":"Web workspace for the pi coding agent","homepage":"https://github.com/t479842598/pi-web-QT#readme","repository":{"type":"git","url":"git+https://github.com/t479842598/pi-web-QT.git"},"bugs":{"url":"https://github.com/t479842598/pi-web-QT/issues"},"license":"MIT","engines":{"node":">=22.19.0"},"bin":{"pi-web":"bin/pi-web.js"},"files":["bin",".next","!.next/cache","!.next/dev","!.next/**/*.js.map","lib/theme","public","next.config.ts","package.json"],"scripts":{"dev":"node bin/fix-pi-agent-undici.js && next dev -H 127.0.0.1 -p 0 --turbopack","dev:lan":"node bin/fix-pi-agent-undici.js && next dev -H 0.0.0.0 -p 0 --turbopack","build":"env -u TURBOPACK next build --webpack","start":"node bin/fix-pi-agent-undici.js && next start -H 127.0.0.1 -p 0","start:lan":"node bin/fix-pi-agent-undici.js && next start -H 0.0.0.0 -p 0","lint":"eslint .","release":"npm version patch --no-git-tag-version && npm run build && npm publish --access public","test":"node --experimental-strip-types --test $(find app components hooks lib -name \'*.test.mjs\' -print)"},"dependencies":{"@earendil-works/pi-agent-core":"0.84.0","@earendil-works/pi-ai":"0.84.0","@earendil-works/pi-coding-agent":"0.84.0","@earendil-works/pi-tui":"0.84.0","@fontsource/ia-writer-quattro":"^5.3.0","@fontsource/lilex":"^5.3.0","@phosphor-icons/react":"^2.1.10","@types/react-syntax-highlighter":"^15.5.13","adm-zip":"^0.6.0","katex":"^0.16.47","mammoth":"^1.12.0","mermaid":"^11.14.0","next":"16.2.12","proper-lockfile":"4.1.2","react":"^19.2.4","react-dom":"^19.2.4","react-markdown":"^10.1.0","react-syntax-highlighter":"^16.1.1","rehype-katex":"^7.0.1","rehype-raw":"^7.0.0","rehype-sanitize":"^6.0.0","remark-gfm":"^4.0.1","remark-math":"^6.0.0","undici":"^8.10.0"},"overrides":{"undici":"^8.10.0","@earendil-works/pi-coding-agent":{"undici":"^8.10.0"},"intersection-observer":"npm:noop2@2.0.0","node-domexception":"npm:@profoundlogic/node-domexception@1.0.2"},"allowScripts":{"@google/genai@1.52.0":true,"protobufjs@7.6.5":true,"sharp@0.34.5":true,"unrs-resolver@1.12.2":true},"devDependencies":{"@resvg/resvg-js":"^2.6.2","@tailwindcss/postcss":"^4.2.2","@types/node":"^25","@types/proper-lockfile":"4.1.4","@types/react":"^19","@types/react-dom":"^19","eslint":"^9.39.5","eslint-config-next":"16.2.12","jiti":"^2.7.0","lightningcss":"^1.33.0","postcss":"^8","tailwindcss":"^4.2.2","to-ico":"^1.1.5","typescript":"^5.9.3"}}')},50593:(a,b,c)=>{"use strict";function d(a){return/^[a-zA-Z]:[\\/]/.test(a)||a.startsWith("\\\\")?a.replace(/\\/g,"/"):a}c.d(b,{A0:()=>d})},66544:(a,b,c)=>{"use strict";c.d(b,{E2:()=>k,EN:()=>j});var d=c(77030);function e(a){return(a.startsWith("[")&&a.endsWith("]")?a.slice(1,-1):a).toLowerCase().replace(/\.$/,"")}function f(a){if(!a||/[\s/@\\]/.test(a))return null;try{let b=new URL(`http://${a}`);if(b.username||b.password||"/"!==b.pathname||b.search||b.hash)return null;return e(b.hostname)}catch{return null}}function g(){return[process.env.PI_WEB_HOSTNAME,...process.env.PI_WEB_ALLOWED_HOSTS?.split(",")??[]].filter(a=>!!a?.trim())}function h(a){try{return new URL(a).origin}catch{return null}}let i=new Set(["POST","PUT","PATCH","DELETE"]);function j(a,b=g()){return!!function(a,b=g()){let c=a.headers.get("host"),h=c?f(c):null;return!!h&&(!!("localhost"===h||h.endsWith(".localhost")||(0,d.isIP)(h))||b.some(a=>{let b;return((b=a?.trim())?(0,d.isIP)(b)?e(b):f(b):null)===h}))}(a,b)&&(!!function(a){if("GET"!==a.method||"navigate"!==a.headers.get("sec-fetch-mode")||"document"!==a.headers.get("sec-fetch-dest")||"?1"!==a.headers.get("sec-fetch-user"))return!1;try{return/^\/api\/sessions\/[^/]+\/export$/.test(new URL(a.url).pathname)}catch{return!1}}(a)||(a.headers.has("origin")||a.headers.has("sec-fetch-site")?function(a){let b,c;if("cross-site"===a.headers.get("sec-fetch-site"))return!1;let d=a.headers.get("origin");if(!d)return!0;let e=(b=new URL(a.url),(c=a.headers.get("host"))?h(`${b.protocol}//${c}`):null);return null!==e&&h(d)===e}(a):!i.has((a.method??"GET").toUpperCase())))}function k(a){let b=a.headers.get("content-type")?.split(";",1)[0]?.trim().toLowerCase();return"application/json"===b||!!(b?.startsWith("application/")&&b.endsWith("+json"))}},78335:()=>{},89628:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{DT:()=>y,dH:()=>A,g3:()=>z,jE:()=>v,lz:()=>B,uj:()=>t});var e=c(26106),f=c.n(e),g=c(29021),h=c(21820),i=c(33873),j=c(75430),k=c(50593),l=c(8102),m=a([j]);j=(m.then?(await m)():m)[0];let D="pi-backup",E="${agentDir}",F="${home}";function n(a){if(!(0,g.existsSync)(a))return null;try{let b=JSON.parse((0,g.readFileSync)(a,"utf8"));return null!==b&&"object"==typeof b?b:null}catch{return null}}function o(a){let b=[],c=[""];for(;c.length>0;){let d,e=c.pop(),f=(0,i.join)(a,e);try{d=(0,g.readdirSync)(f)}catch{continue}for(let a of d){let d;if("node_modules"===a||".git"===a)continue;let h=e?`${e}/${a}`:a,j=(0,i.join)(f,a);try{d=(0,g.statSync)(j)}catch{continue}d.isDirectory()?c.push(h):d.isFile()&&b.push(h)}}return b}function p(a){let b=(0,k.A0)((0,j.getAgentDir)()),c=(0,k.A0)((0,h.homedir)());return r(a,a=>{let d=(0,k.A0)(a);return d===b?E:d===c?F:d.startsWith(b+"/")?E+d.slice(b.length):d.startsWith(c+"/")?F+d.slice(c.length):a})}function q(a){let b=(0,j.getAgentDir)(),c=(0,h.homedir)();return r(a,a=>a===E?b:a===F?c:a.startsWith(E+"/")?(0,i.join)(b,...a.slice(E.length+1).split("/")):a.startsWith(F+"/")?(0,i.join)(c,...a.slice(F.length+1).split("/")):a)}function r(a,b){if("string"==typeof a)return b(a);if(Array.isArray(a))return a.map(a=>r(a,b));if(null!==a&&"object"==typeof a){let c={};for(let[d,e]of Object.entries(a))c[d]=r(e,b);return c}return a}function s(a,b,c){a.addFile(`${D}/${b}`,Buffer.isBuffer(c)?c:Buffer.from(c,"utf8"))}function t(a){let b=(0,j.getAgentDir)(),d=new(f()),e={formatVersion:1,createdAt:new Date().toISOString(),...function(){try{let a=c(39006),b=c(Object(function(){var a=Error("Cannot find module '@earendil-works/pi-coding-agent/package.json'");throw a.code="MODULE_NOT_FOUND",a}()));return{piWebVersion:a.version??"unknown",piSdkVersion:b.version??"unknown"}}catch{return{piWebVersion:"unknown",piSdkVersion:"unknown"}}}(),sourcePlatform:process.platform,includeSecrets:a.includeSecrets,includeSessions:a.includeSessions,files:[],mcpBinScripts:[],localPackages:[],absolutePaths:[],warnings:[]};for(let c of["models.json","auth.json","settings.json","mcp.json","models-store.json","AGENTS.md","APPEND_SYSTEM.md"]){let f=(0,i.join)(b,c);if(!(0,g.existsSync)(f)||"auth.json"===c&&!a.includeSecrets)continue;let h=(0,g.readFileSync)(f,"utf8");if("models.json"!==c||a.includeSecrets){if("settings.json"===c||"mcp.json"===c||"models.json"===c){let a=n(f);a&&(h=JSON.stringify(p(a),null,2))}}else{let a=n(f);a&&(h=JSON.stringify(function(a){let b=a.providers??{},c={};for(let[a,d]of Object.entries(b))c[a]={...d},"string"==typeof c[a].apiKey&&(c[a].apiKey="");return{...a,providers:c}}(a),null,2))}s(d,c,String(h)),e.files.push(`${D}/${c}`)}let h=(0,i.join)(b,"skills");if((0,g.existsSync)(h))for(let a of o(h))d.addFile(`${D}/skills/${a}`,(0,g.readFileSync)((0,i.join)(h,a))),e.files.push(`${D}/skills/${a}`);let l=n((0,i.join)(b,"settings.json"));for(let a of l?.packages??[]){let b="string"==typeof a?a:a?.source;if(!b||b.startsWith("npm:"))continue;let c=(0,k.A0)(b);if((0,i.isAbsolute)(c)&&(0,g.existsSync)(c)){let a=(0,i.basename)(c);for(let b of o(c))d.addFile(`${D}/local-packages/${a}/${b}`,(0,g.readFileSync)((0,i.join)(c,b))),e.files.push(`${D}/local-packages/${a}/${b}`);e.localPackages.push(a)}else e.warnings.push(`Local package skipped (not found or not absolute): ${b}`)}let m=n((0,i.join)(b,"mcp.json")),q=new Set;if(m?.mcpServers)for(let a of Object.values(m.mcpServers))!function a(b,c){if("string"==typeof b){let a=`${E}/bin/`;if(b.startsWith(a)){let d=b.slice(a.length).split("/")[0];d&&c.add(d)}return}if(Array.isArray(b)){for(let d of b)a(d,c);return}if(null!==b&&"object"==typeof b)for(let d of Object.values(b))a(d,c)}(p(a),q);for(let a of q){let c=(0,i.join)(b,"bin",a);(0,g.existsSync)(c)&&(0,g.statSync)(c).isFile()?(d.addFile(`${D}/bin/${a}`,(0,g.readFileSync)(c)),e.files.push(`${D}/bin/${a}`),e.mcpBinScripts.push(a)):e.warnings.push(`MCP bin script referenced but missing: ${a}`)}if(a.includeSessions){let a=(0,i.join)(b,"sessions");if((0,g.existsSync)(a))for(let b of o(a))d.addFile(`${D}/sessions/${b}`,(0,g.readFileSync)((0,i.join)(a,b))),e.files.push(`${D}/sessions/${b}`)}return s(d,"manifest.json",JSON.stringify(e,null,2)),d.toBuffer()}let G=new Set(["npx","uvx","node","uv","npm","git","python3","python","bun","deno"]);function u(a){let b=a.toString("utf8",0,256).split(/\r?\n/,1)[0]??"";return b.startsWith("#!")?b:null}function v(a,b,c){let d=(0,j.getAgentDir)(),e=c??process.platform,f="win32"===e,g=[],h=[];for(let[c,j]of Object.entries(a)){let a,l=q(j),m="string"==typeof l.command?l.command:"",n=Array.isArray(l.args)?l.args.map(String):[],o={command:m,args:n},p=function(a,b){if(!a)return"manual";if((0,k.A0)(a).startsWith((0,k.A0)(b)+"/bin/"))return"restore-script";if(a.includes("/")||a.includes("\\")||a.includes(":"))return"keep-with-warning";let c=a.split(/[\s]/)[0];return G.has(c),"keep"}(m,d),r=null;if("restore-script"===p){let j=(0,i.basename)((0,k.A0)(m)),l=b.get(j);if(!l){r=null,a=`bin script ${j} missing from backup`,h.push({name:c,original:o,adapted:r,action:"manual",platform:e,reason:a,installPrompt:C({name:c,original:o,adapted:r,action:"manual",platform:e,reason:a})});continue}if(!w(j)){a=`bin script name rejected (unsafe): ${j}`;let b={name:c,original:o,adapted:null,action:"manual",platform:e,reason:a};h.push({...b,installPrompt:C(b)}),g.push(`${c}: ${a}`);continue}if(!x(l)){a="bin script content rejected (unrecognized shebang)";let b={name:c,original:o,adapted:null,action:"manual",platform:e,reason:a};h.push({...b,installPrompt:C(b)}),g.push(`${c}: ${a}`);continue}if(f){let b=u(l);if(b&&b.includes("node"))r={command:(0,i.join)(d,"bin",`${j}.cmd`),args:n},h.push({name:c,original:o,adapted:r,action:"generate-cmd",platform:e,reason:(0,i.join)(d,"bin",j)});else{a="bash/other shebang wrapper cannot run on Windows; reinstall or adjust manually";let b={name:c,original:o,adapted:null,action:"manual",platform:e,reason:a};h.push({...b,installPrompt:C(b)}),g.push(`${c}: ${a}`)}}else r={command:(0,i.join)(d,"bin",j),args:n},h.push({name:c,original:o,adapted:r,action:"restore-script",platform:e});continue}if("keep-with-warning"===p){r={command:m,args:n},a="absolute path outside agentDir/bin — verify it exists on this machine",h.push({name:c,original:o,adapted:r,action:"keep-with-warning",platform:e,reason:a}),g.push(`${c}: ${a}`);continue}r={command:m,args:n},h.push({name:c,original:o,adapted:r,action:"keep",platform:e})}return{servers:h,warnings:g}}function w(a){return/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(a)&&!a.includes("..")}function x(a){let b=u(a);if(!b)return!1;let c=b.slice(2).trim().split(/\s+/);if(0===c.length)return!1;let d=c[0],e=d.split("/").pop()??d;return!!["node","bash","sh","python3","python","zsh"].includes(e)||"env"===e&&c.length>1&&["node","bash","sh","python3","python"].includes(c[1].split("/").pop()??"")}function y(a){let b;try{b=new(f())(a)}catch(a){throw Error(`Not a valid zip archive: ${a instanceof Error?a.message:String(a)}`)}let c=b.getEntries(),d=(0,g.mkdtempSync)((0,i.join)((0,h.tmpdir)(),"pi-backup-")),e=(0,i.join)(d,D);(0,g.mkdirSync)(e,{recursive:!0});let j=0,k=0;for(let a of c){if(a.isDirectory)continue;let c=a.entryName.replace(/\\/g,"/");if(!c.startsWith(`${D}/`))throw(0,g.rmSync)(d,{recursive:!0,force:!0}),Error(`Unexpected entry outside ${D}/: ${c}`);let f=(0,i.resolve)(e,c.slice(D.length+1));if(!f.startsWith((0,i.resolve)(e)+i.sep))throw(0,g.rmSync)(d,{recursive:!0,force:!0}),Error(`Path traversal blocked: ${c}`);let h="number"==typeof a.header.size?a.header.size:0;if(j+=h,h>0x20000000||j>0x40000000)throw(0,g.rmSync)(d,{recursive:!0,force:!0}),Error(`Backup archive too large when extracted (entry: ${c})`);(0,g.mkdirSync)((0,i.dirname)(f),{recursive:!0}),b.extractEntryTo(a,(0,i.dirname)(f),!1,!0);let l=(0,g.statSync)(f).size;if(k+=l,l>0x20000000||k>0x40000000)throw(0,g.rmSync)(d,{recursive:!0,force:!0}),Error(`Backup archive too large when extracted (entry: ${c})`)}let l=(0,i.join)(e,"manifest.json");if(!(0,g.existsSync)(l))throw(0,g.rmSync)(d,{recursive:!0,force:!0}),Error("Backup manifest.json missing — not a pi-web backup");let m=n(l);if(!m||1!==m.formatVersion)throw(0,g.rmSync)(d,{recursive:!0,force:!0}),Error(`Unsupported backup format version: ${m?.formatVersion??"unknown"} (expected 1)`);let o=n((0,i.join)(e,"mcp.json"))?.mcpServers??{},p=new Map;for(let a of m.mcpBinScripts??[]){let b=(0,i.join)(e,"bin",a);(0,g.existsSync)(b)&&p.set(a,(0,g.readFileSync)(b))}let q=["core","skills","packages","mcp"];return m.includeSessions&&q.push("sessions"),{manifest:m,tempDir:d,servers:o,binScripts:p,categories:q}}function z(a){(0,g.rmSync)(a.tempDir,{recursive:!0,force:!0})}function A(a,b){let c=(0,j.getAgentDir)(),{manifest:d}=a,e={restored:[],needsRestart:[],manual:[],warnings:[]},f=new Set(b.categories),h=new Set(b.skippedMcpServers),m=b=>{let d=(0,i.join)(c,b),f=(0,i.join)(a.tempDir,D,b);(0,g.existsSync)(f)&&((0,g.mkdirSync)((0,i.dirname)(d),{recursive:!0}),(0,l.$)(d,(0,g.readFileSync)(f,"utf8")),e.restored.push(b))};if(f.has("core"))for(let a of["models.json","auth.json","settings.json","mcp.json","models-store.json","AGENTS.md","APPEND_SYSTEM.md"])("auth.json"!==a||d.includeSecrets)&&(m(a),e.needsRestart.push(a));if(f.has("skills")){let b=(0,i.join)(a.tempDir,D,"skills");if((0,g.existsSync)(b)){for(let a of o(b)){let d=(0,i.join)(c,"skills",a);(0,g.mkdirSync)((0,i.dirname)(d),{recursive:!0}),(0,l.$)(d,(0,g.readFileSync)((0,i.join)(b,a),"utf8"))}e.restored.push("skills/")}}if(f.has("packages")){let b=(0,i.join)(c,"settings.json"),f=n(b)??{},h=f.packages??[],j=d.localPackages??[],m=(0,i.join)(a.tempDir,D,"local-packages");for(let a of j){if(!w(a)){e.warnings.push(`Local package ${a} not restored (unsafe name)`);continue}let b=(0,i.join)(m,a);if(!(0,g.existsSync)(b)){e.warnings.push(`Local package ${a} missing from backup`);continue}let d=(0,i.join)(c,"local-packages",a);for(let a of o(b)){let c=(0,i.join)(d,a);(0,g.mkdirSync)((0,i.dirname)(c),{recursive:!0}),(0,l.$)(c,(0,g.readFileSync)((0,i.join)(b,a),"utf8"))}e.restored.push(`local-packages/${a}`)}let p=!1,q=h.map(a=>{let b="string"==typeof a?a:a?.source;if("string"!=typeof b||b.startsWith("npm:"))return a;let d=(0,i.basename)((0,k.A0)(b));if(j.includes(d)){p=!0;let b=(0,i.join)(c,"local-packages",d);return"string"==typeof a?b:{...a,source:b}}return a});if(p){let a={...f,packages:q};(0,l.$)(b,JSON.stringify(a,null,2)),e.restored.push("settings.json (packages paths)"),e.needsRestart.push("settings.json (packages paths)")}for(let a of h.map(a=>"string"==typeof a?a:a?.source).filter(a=>"string"==typeof a&&a.startsWith("npm:")))e.restored.push(`npm package ${a} (queued for reinstall)`)}if(f.has("mcp")){let b=v(a.servers,a.binScripts);e.warnings.push(...b.warnings);let d=n((0,i.join)(c,"mcp.json"))??{},f={};for(let d of b.servers){if(h.has(d.name))continue;if("manual"===d.action){e.manual.push({server:d.name,message:d.reason??"cannot be adapted automatically"});continue}let b=a.servers[d.name]??{},j=q(b);if(f[d.name]={...j,command:d.adapted?.command??j.command,...d.adapted?{args:d.adapted.args}:{}},"restore-script"===d.action){let b=(0,i.basename)((0,k.A0)(String(d.adapted?.command??""))),f=a.binScripts.get(b);if(f&&w(b)&&x(f)){let a=(0,i.join)(c,"bin",b);(0,g.mkdirSync)((0,i.dirname)(a),{recursive:!0}),(0,l.$)(a,f.toString("utf8"));try{(0,g.chmodSync)(a,493)}catch{}e.restored.push(`bin/${b}`)}else e.warnings.push(`bin script ${b} not restored (unsafe name or content)`)}if("generate-cmd"===d.action){let b=(0,i.basename)((0,k.A0)(String(d.adapted?.command??""))).replace(/\.cmd$/,""),f=a.binScripts.get(b);if(f&&w(b)&&x(f)){let a=(0,i.join)(c,"bin",b);(0,g.mkdirSync)((0,i.dirname)(a),{recursive:!0}),(0,l.$)(a,f.toString("utf8"));let d=(0,i.join)(c,"bin",`${b}.cmd`),h=`%~dp0${b}`;(0,l.$)(d,`@node "${h}" %*\r
2
2
  `),e.restored.push(`bin/${b}`,`bin/${b}.cmd`)}else e.warnings.push(`bin script ${b} not restored (unsafe name or content)`)}}(0,l.$)((0,i.join)(c,"mcp.json"),JSON.stringify({...d,mcpServers:f},null,2)),e.restored.push("mcp.json"),e.needsRestart.push("mcp.json")}return{report:e,npmPackages:B(a)}}function B(a){let b=n((0,i.join)(a.tempDir,D,"settings.json"));return(b?.packages??[]).map(a=>"string"==typeof a?a:a?.source).filter(a=>"string"==typeof a&&a.startsWith("npm:"))}function C(a){let b=(0,j.getAgentDir)(),c="win32"===process.platform?"Windows":"darwin"===process.platform?"macOS":"Linux",d=JSON.stringify(a.original,null,2);return[`请在当前环境(${c})安装 MCP server「${a.name}」。`,"\n## 原始配置(来自备份)\n```json",d,"```\n\n## 统一安装约定",`- 脚本类工具统一安装到 \`${(0,i.join)(b,"bin")}\`(Windows 上同时生成同名 \`.cmd\` 包装)。`,`- npm 类工具统一通过 \`npx <pkg>\` 运行,或安装到 \`${(0,i.join)(b,"npm")}\` 后引用。`,"- 依赖(node/npx/uv 等)统一从 PATH 解析,不要硬编码本机绝对路径。\n- 安装完成后,输出可直接写入 `~/.pi/agent/mcp.json` 的完整 server 配置片段(含 command/args/transport/lifecycle)。\n- 不要修改 mcp.json 中其它 server 的配置。\n\n安装过程中如遇障碍,请说明原因并给出替代方案。"].join("\n")}d()}catch(a){d(a)}})},96487:()=>{}};
@@ -1 +1 @@
1
- globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/dy7f924eC9cpK9w3AxudQ/_buildManifest.js","static/dy7f924eC9cpK9w3AxudQ/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-06a1a811cd141d40.js","static/chunks/4bd1b696-df4c0fb946159b6a.js","static/chunks/3794-3dbd06ff79d82322.js","static/chunks/main-app-1fba0c581dfd167b.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
1
+ globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/rddGyDxw8t2Q1B_osP7Xr/_buildManifest.js","static/rddGyDxw8t2Q1B_osP7Xr/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-06a1a811cd141d40.js","static/chunks/4bd1b696-df4c0fb946159b6a.js","static/chunks/3794-3dbd06ff79d82322.js","static/chunks/main-app-1fba0c581dfd167b.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en" data-language="en" translate="no" class="notranslate"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/3790610024d16435.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/dda15933a7f70fbf.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-06a1a811cd141d40.js"/><script src="/_next/static/chunks/4bd1b696-df4c0fb946159b6a.js" async=""></script><script src="/_next/static/chunks/3794-3dbd06ff79d82322.js" async=""></script><script src="/_next/static/chunks/main-app-1fba0c581dfd167b.js" async=""></script><meta name="robots" content="noindex"/><meta name="google" content="notranslate"/><title>404: This page could not be found.</title><title>Pi Agent Web</title><meta name="description" content="Pi Coding Agent Web Interface"/><link rel="icon" href="/favicon.svg"/><script>(function(){try{var h=document.documentElement,m=localStorage.getItem("pi-theme-mode")||"dark",t=localStorage.getItem("pi-theme")||"",q=localStorage.getItem("pi-locale"),g=localStorage.getItem("pi-language"),l=q||g,r=m;if(!q&&g){localStorage.setItem("pi-locale",g);localStorage.removeItem("pi-language")}if(!l){var n=(navigator.languages&&navigator.languages[0])||navigator.language||"";if(/^zh(?:-|$)/i.test(n))l="zh-CN"}if(!t){var od=localStorage.getItem("pi-theme-dark"),ol=localStorage.getItem("pi-theme-light");if(od){t=od.replace(/-dark$/i,"");try{localStorage.setItem("pi-theme",t);localStorage.removeItem("pi-theme-dark");localStorage.removeItem("pi-theme-light")}catch(e){}}else if(ol){t=ol.replace(/-light$/i,"");try{localStorage.setItem("pi-theme",t);localStorage.removeItem("pi-theme-dark");localStorage.removeItem("pi-theme-light")}catch(e){}}}if(m==="system"){r=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(r==="dark")h.classList.add("dark");if(t){h.dataset.theme=t}h.dataset.themeMode=m;h.dataset.themeResolvedMode=r;if(l==="zh-CN"){h.lang=l;h.dataset.language=l}else{h.lang="en";h.dataset.language="en"}}catch(e){var n=(navigator.languages&&navigator.languages[0])||navigator.language||"";h.lang=/^zh(?:-|$)/i.test(n)?"zh-CN":"en";h.dataset.language=h.lang}})();</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body translate="no" class="notranslate" style="height:100dvh;display:flex;flex-direction:column"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-06a1a811cd141d40.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n3:I[57121,[],\"\"]\n4:I[74581,[],\"\"]\n5:I[90484,[],\"OutletBoundary\"]\n6:\"$Sreact.suspense\"\n9:I[90484,[],\"ViewportBoundary\"]\nb:I[90484,[],\"MetadataBoundary\"]\nd:I[27123,[],\"default\",1]\n:HL[\"/_next/static/css/3790610024d16435.css\",\"style\"]\n:HL[\"/_next/static/css/dda15933a7f70fbf.css\",\"style\"]\n2:T51d,(function(){try{var h=document.documentElement,m=localStorage.getItem(\"pi-theme-mode\")||\"dark\",t=localStorage.getItem(\"pi-theme\")||\"\",q=localStorage.getItem(\"pi-locale\"),g=localStorage.getItem(\"pi-language\"),l=q||g,r=m;if(!q\u0026\u0026g){localStorage.setItem(\"pi-locale\",g);localStorage.removeItem(\"pi-language\")}if(!l){var n=(navigator.languages\u0026\u0026navigator.languages[0])||navigator.language||\"\";if(/^zh(?:-|$)/i.test(n))l=\"zh-CN\"}if(!t){var od=localStorage.getItem(\"pi-theme-dark\"),ol=localStorage.getItem(\"pi-theme-light\");if(od){t=od.replace(/-dark$/i,\"\");try{localStorage.setItem(\"pi-theme\",t);localStorage.removeItem(\"pi-theme-dark\");localStorage.removeItem(\"pi-theme-light\")}catch(e){}}else if(ol){t=ol.replace(/-light$/i,\"\");try{localStorage.setItem(\"pi-theme\",t);localStorage.removeItem(\"pi-theme-dark\");localStorage.removeItem(\"pi-theme-light\")}catch(e){}}}if(m===\"system\"){r=window.matchMedia(\"(prefers-color-scheme: dark)\").matches?\"dark\":\"light\"}if(r===\"dark\")h.classList.add(\"dark\");if(t){h.dataset.theme=t}h.dataset.themeMode=m;h.dataset.themeResolvedMode=r;if(l===\"zh-CN\"){h.lang=l;h.dataset.language=l}else{h.lang=\"en\";h.dataset.language=\"en\"}}catch(e){var n=(navigator.languages\u0026\u0026navigator.languages[0])||navigator.language||\"\";h.lang=/^zh(?:-|$)/i.test(n)?\"zh-CN\":\"en\";h.dataset.language=h.lang}})();"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/3790610024d16435.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/dda15933a7f70fbf.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"data-language\":\"en\",\"translate\":\"no\",\"className\":\"notranslate\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"meta\",null,{\"name\":\"google\",\"content\":\"notranslate\"}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"$2\"}}]]}],[\"$\",\"body\",null,{\"translate\":\"no\",\"className\":\"notranslate\",\"style\":{\"height\":\"100dvh\",\"display\":\"flex\",\"flexDirection\":\"column\"},\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L5\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@7\"}]}]]}],{},null,false,null]},null,false,\"$@8\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L9\",null,{\"children\":\"$La\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lc\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$d\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"dy7f924eC9cpK9w3AxudQ\"}\n"])</script><script>self.__next_f.push([1,"e:[]\n8:\"$We\"\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"f:I[86869,[],\"IconMark\"]\n7:null\nc:[[\"$\",\"title\",\"0\",{\"children\":\"Pi Agent Web\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Pi Coding Agent Web Interface\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.svg\"}],[\"$\",\"$Lf\",\"3\",{}]]\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en" data-language="en" translate="no" class="notranslate"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/3790610024d16435.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/dda15933a7f70fbf.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-06a1a811cd141d40.js"/><script src="/_next/static/chunks/4bd1b696-df4c0fb946159b6a.js" async=""></script><script src="/_next/static/chunks/3794-3dbd06ff79d82322.js" async=""></script><script src="/_next/static/chunks/main-app-1fba0c581dfd167b.js" async=""></script><meta name="robots" content="noindex"/><meta name="google" content="notranslate"/><title>404: This page could not be found.</title><title>Pi Agent Web</title><meta name="description" content="Pi Coding Agent Web Interface"/><link rel="icon" href="/favicon.svg"/><script>(function(){try{var h=document.documentElement,m=localStorage.getItem("pi-theme-mode")||"dark",t=localStorage.getItem("pi-theme")||"",q=localStorage.getItem("pi-locale"),g=localStorage.getItem("pi-language"),l=q||g,r=m;if(!q&&g){localStorage.setItem("pi-locale",g);localStorage.removeItem("pi-language")}if(!l){var n=(navigator.languages&&navigator.languages[0])||navigator.language||"";if(/^zh(?:-|$)/i.test(n))l="zh-CN"}if(!t){var od=localStorage.getItem("pi-theme-dark"),ol=localStorage.getItem("pi-theme-light");if(od){t=od.replace(/-dark$/i,"");try{localStorage.setItem("pi-theme",t);localStorage.removeItem("pi-theme-dark");localStorage.removeItem("pi-theme-light")}catch(e){}}else if(ol){t=ol.replace(/-light$/i,"");try{localStorage.setItem("pi-theme",t);localStorage.removeItem("pi-theme-dark");localStorage.removeItem("pi-theme-light")}catch(e){}}}if(m==="system"){r=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(r==="dark")h.classList.add("dark");if(t){h.dataset.theme=t}h.dataset.themeMode=m;h.dataset.themeResolvedMode=r;if(l==="zh-CN"){h.lang=l;h.dataset.language=l}else{h.lang="en";h.dataset.language="en"}}catch(e){var n=(navigator.languages&&navigator.languages[0])||navigator.language||"";h.lang=/^zh(?:-|$)/i.test(n)?"zh-CN":"en";h.dataset.language=h.lang}})();</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body translate="no" class="notranslate" style="height:100dvh;display:flex;flex-direction:column"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-06a1a811cd141d40.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n3:I[57121,[],\"\"]\n4:I[74581,[],\"\"]\n5:I[90484,[],\"OutletBoundary\"]\n6:\"$Sreact.suspense\"\n9:I[90484,[],\"ViewportBoundary\"]\nb:I[90484,[],\"MetadataBoundary\"]\nd:I[27123,[],\"default\",1]\n:HL[\"/_next/static/css/3790610024d16435.css\",\"style\"]\n:HL[\"/_next/static/css/dda15933a7f70fbf.css\",\"style\"]\n2:T51d,(function(){try{var h=document.documentElement,m=localStorage.getItem(\"pi-theme-mode\")||\"dark\",t=localStorage.getItem(\"pi-theme\")||\"\",q=localStorage.getItem(\"pi-locale\"),g=localStorage.getItem(\"pi-language\"),l=q||g,r=m;if(!q\u0026\u0026g){localStorage.setItem(\"pi-locale\",g);localStorage.removeItem(\"pi-language\")}if(!l){var n=(navigator.languages\u0026\u0026navigator.languages[0])||navigator.language||\"\";if(/^zh(?:-|$)/i.test(n))l=\"zh-CN\"}if(!t){var od=localStorage.getItem(\"pi-theme-dark\"),ol=localStorage.getItem(\"pi-theme-light\");if(od){t=od.replace(/-dark$/i,\"\");try{localStorage.setItem(\"pi-theme\",t);localStorage.removeItem(\"pi-theme-dark\");localStorage.removeItem(\"pi-theme-light\")}catch(e){}}else if(ol){t=ol.replace(/-light$/i,\"\");try{localStorage.setItem(\"pi-theme\",t);localStorage.removeItem(\"pi-theme-dark\");localStorage.removeItem(\"pi-theme-light\")}catch(e){}}}if(m===\"system\"){r=window.matchMedia(\"(prefers-color-scheme: dark)\").matches?\"dark\":\"light\"}if(r===\"dark\")h.classList.add(\"dark\");if(t){h.dataset.theme=t}h.dataset.themeMode=m;h.dataset.themeResolvedMode=r;if(l===\"zh-CN\"){h.lang=l;h.dataset.language=l}else{h.lang=\"en\";h.dataset.language=\"en\"}}catch(e){var n=(navigator.languages\u0026\u0026navigator.languages[0])||navigator.language||\"\";h.lang=/^zh(?:-|$)/i.test(n)?\"zh-CN\":\"en\";h.dataset.language=h.lang}})();"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/3790610024d16435.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/dda15933a7f70fbf.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"data-language\":\"en\",\"translate\":\"no\",\"className\":\"notranslate\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"meta\",null,{\"name\":\"google\",\"content\":\"notranslate\"}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"$2\"}}]]}],[\"$\",\"body\",null,{\"translate\":\"no\",\"className\":\"notranslate\",\"style\":{\"height\":\"100dvh\",\"display\":\"flex\",\"flexDirection\":\"column\"},\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L5\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@7\"}]}]]}],{},null,false,null]},null,false,\"$@8\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L9\",null,{\"children\":\"$La\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lc\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$d\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"rddGyDxw8t2Q1B_osP7Xr\"}\n"])</script><script>self.__next_f.push([1,"e:[]\n8:\"$We\"\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"f:I[86869,[],\"IconMark\"]\n7:null\nc:[[\"$\",\"title\",\"0\",{\"children\":\"Pi Agent Web\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Pi Coding Agent Web Interface\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.svg\"}],[\"$\",\"$Lf\",\"3\",{}]]\n"])</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-06a1a811cd141d40.js"/><script src="/_next/static/chunks/4bd1b696-df4c0fb946159b6a.js" async=""></script><script src="/_next/static/chunks/3794-3dbd06ff79d82322.js" async=""></script><script src="/_next/static/chunks/main-app-1fba0c581dfd167b.js" async=""></script><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-06a1a811cd141d40.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[57121,[],\"\"]\n3:I[74581,[],\"\"]\n4:I[90484,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[90484,[],\"ViewportBoundary\"]\na:I[90484,[],\"MetadataBoundary\"]\nc:I[27123,[],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{}]}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"dy7f924eC9cpK9w3AxudQ\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\nb:[]\n"])</script></body></html>
1
+ <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-06a1a811cd141d40.js"/><script src="/_next/static/chunks/4bd1b696-df4c0fb946159b6a.js" async=""></script><script src="/_next/static/chunks/3794-3dbd06ff79d82322.js" async=""></script><script src="/_next/static/chunks/main-app-1fba0c581dfd167b.js" async=""></script><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-06a1a811cd141d40.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[57121,[],\"\"]\n3:I[74581,[],\"\"]\n4:I[90484,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[90484,[],\"ViewportBoundary\"]\na:I[90484,[],\"MetadataBoundary\"]\nc:I[27123,[],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{}]}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"rddGyDxw8t2Q1B_osP7Xr\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\nb:[]\n"])</script></body></html>