@qt4798/pi-web 0.18.12 → 0.18.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +18 -18
- package/.next/build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.js +6 -7
- package/.next/required-server-files.json +6 -7
- package/.next/server/app/_global-error/page.js +2 -2
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +3 -3
- package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/agent/[id]/bash-output/route.js +1 -1
- package/.next/server/app/api/agent/[id]/bash-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agent/[id]/events/route.js +2 -2
- package/.next/server/app/api/agent/[id]/events/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agent/[id]/lease/route.js +1 -1
- package/.next/server/app/api/agent/[id]/lease/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agent/[id]/route.js +1 -1
- package/.next/server/app/api/agent/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agent/new/route.js +1 -1
- package/.next/server/app/api/agent/new/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agent/running/events/route.js +1 -1
- package/.next/server/app/api/agent/running/events/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agent/running/route.js +1 -1
- package/.next/server/app/api/agent/running/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app-update/route.js +1 -1
- package/.next/server/app/api/app-update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
- package/.next/server/app/api/auth/api-key/[provider]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/combined/route.js +1 -1
- package/.next/server/app/api/auth/combined/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/[provider]/route.js +2 -2
- package/.next/server/app/api/auth/login/[provider]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
- package/.next/server/app/api/auth/logout/[provider]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/providers/route.js +1 -1
- package/.next/server/app/api/auth/providers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/backup/export/route.js +1 -1
- package/.next/server/app/api/backup/export/route.js.nft.json +1 -1
- package/.next/server/app/api/backup/export/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/backup/import/route.js +1 -1
- package/.next/server/app/api/backup/import/route.js.nft.json +1 -1
- package/.next/server/app/api/backup/import/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/cwd/browse/route.js +1 -1
- package/.next/server/app/api/cwd/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/cwd/validate/route.js +1 -1
- package/.next/server/app/api/cwd/validate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/default-cwd/route.js +1 -1
- package/.next/server/app/api/default-cwd/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/events/route.js +2 -2
- package/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/features/route.js +1 -1
- package/.next/server/app/api/features/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/file-index/route.js +1 -1
- package/.next/server/app/api/file-index/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/files/[...path]/route.js +2 -2
- package/.next/server/app/api/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/git/diff/route.js +2 -2
- package/.next/server/app/api/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/git/push/route.js +1 -1
- package/.next/server/app/api/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/git/stash/route.js +1 -1
- package/.next/server/app/api/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/git/status/route.js +1 -1
- package/.next/server/app/api/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/home/route.js +1 -1
- package/.next/server/app/api/home/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/import/discover/route.js +1 -1
- package/.next/server/app/api/import/discover/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/import/execute/route.js +1 -1
- package/.next/server/app/api/import/execute/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/import/status/route.js +1 -1
- package/.next/server/app/api/import/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/logs/route.js +1 -1
- package/.next/server/app/api/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/restart/route.js +1 -1
- package/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/route.js +2 -2
- package/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/models/enabled/route.js +1 -1
- package/.next/server/app/api/models/enabled/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/models/refresh/route.js +1 -1
- package/.next/server/app/api/models/refresh/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/models/route.js +1 -1
- package/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/models-config/builtin/route.js +1 -1
- package/.next/server/app/api/models-config/builtin/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/models-config/catalog/route.js +1 -1
- package/.next/server/app/api/models-config/catalog/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/models-config/discover/route.js +1 -1
- package/.next/server/app/api/models-config/discover/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/models-config/route.js +1 -1
- package/.next/server/app/api/models-config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/models-config/test/route.js +1 -1
- package/.next/server/app/api/models-config/test/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/modes/route.js +1 -1
- package/.next/server/app/api/modes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/plugins/check/route.js +1 -1
- package/.next/server/app/api/plugins/check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/plugins/route.js +1 -1
- package/.next/server/app/api/plugins/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/project-aliases/route.js +1 -1
- package/.next/server/app/api/project-aliases/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/project-trust/route.js +1 -1
- package/.next/server/app/api/project-trust/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/projects/visibility/route.js +1 -1
- package/.next/server/app/api/projects/visibility/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/provider-usage/query/route.js +1 -1
- package/.next/server/app/api/provider-usage/query/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/proxy/route.js +1 -1
- package/.next/server/app/api/proxy/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/proxy/test/route.js +1 -1
- package/.next/server/app/api/proxy/test/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/auto-name/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/context/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/[id]/details/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/details/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/[id]/entries/[entryId]/tool-result-image/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/entries/[entryId]/tool-result-image/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/[id]/export/route.js +2 -2
- package/.next/server/app/api/sessions/[id]/export/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/[id]/queue-recovery/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/queue-recovery/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/[id]/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/state/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/route.js +1 -1
- package/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/search/route.js +1 -1
- package/.next/server/app/api/sessions/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/title-model/route.js +1 -1
- package/.next/server/app/api/settings/title-model/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/check/route.js +1 -1
- package/.next/server/app/api/skills/check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/install/route.js +1 -1
- package/.next/server/app/api/skills/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/search/route.js +1 -1
- package/.next/server/app/api/skills/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/update/route.js +1 -1
- package/.next/server/app/api/skills/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/snippets/[id]/route.js +1 -1
- package/.next/server/app/api/snippets/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/snippets/route.js +1 -1
- package/.next/server/app/api/snippets/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/subagents/[id]/route.js +1 -1
- package/.next/server/app/api/subagents/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/subagents/profiles/route.js +1 -1
- package/.next/server/app/api/subagents/profiles/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/subagents/settings/route.js +1 -1
- package/.next/server/app/api/subagents/settings/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[id]/[action]/route.js +1 -1
- package/.next/server/app/api/tasks/[id]/[action]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[id]/changed-files/route.js +1 -1
- package/.next/server/app/api/tasks/[id]/changed-files/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[id]/diff/route.js +2 -2
- package/.next/server/app/api/tasks/[id]/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[id]/events/route.js +1 -1
- package/.next/server/app/api/tasks/[id]/events/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[id]/route.js +1 -1
- package/.next/server/app/api/tasks/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/batch/route.js +1 -1
- package/.next/server/app/api/tasks/batch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/events/route.js +2 -2
- package/.next/server/app/api/tasks/events/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/route.js +1 -1
- package/.next/server/app/api/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/settings/route.js +1 -1
- package/.next/server/app/api/tasks/settings/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/templates/route.js +1 -1
- package/.next/server/app/api/tasks/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/terminal/[id]/events/route.js +2 -2
- package/.next/server/app/api/terminal/[id]/events/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/terminal/[id]/route.js +1 -1
- package/.next/server/app/api/terminal/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/terminal/route.js +1 -1
- package/.next/server/app/api/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/themes/[name]/route.js +1 -1
- package/.next/server/app/api/themes/[name]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/themes/route.js +1 -1
- package/.next/server/app/api/themes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tools/extension-tools/route.js +2 -2
- package/.next/server/app/api/tools/extension-tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tools/settings/route.js +1 -1
- package/.next/server/app/api/tools/settings/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/usage/route.js +1 -1
- package/.next/server/app/api/usage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/vision-config/route.js +2 -2
- package/.next/server/app/api/vision-config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/web-auth/route.js +1 -1
- package/.next/server/app/api/web-auth/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/icon.ico/route.js +1 -1
- package/.next/server/app/icon.png/route.js +1 -1
- package/.next/server/app/icon.svg/route.js +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +5 -5
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +5 -5
- package/.next/server/app/index.segments/_full.segment.rsc +5 -5
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login/page.js +1 -1
- package/.next/server/app/login/page.js.nft.json +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +1 -1
- package/.next/server/app/login.rsc +4 -4
- package/.next/server/app/login.segments/_full.segment.rsc +4 -4
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/page.js +19 -19
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +18 -18
- package/.next/server/chunks/1625.js +1 -1
- package/.next/server/chunks/2430.js +4 -4
- package/.next/server/chunks/4253.js +1 -1
- package/.next/server/chunks/5437.js +3 -0
- package/.next/server/chunks/6429.js +1 -1
- package/.next/server/chunks/8692.js +1 -0
- package/.next/server/chunks/9280.js +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware.js +7 -7
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/5170-1843a50074eff480.js +1 -0
- package/.next/static/chunks/app/_not-found/{page-4e8d0b14be117d20.js → page-0e8bb074c3dbf54e.js} +1 -1
- package/.next/static/chunks/app/{layout-9aea218f73c7fe87.js → layout-740df3abbdf0ae0c.js} +1 -1
- package/.next/static/chunks/app/login/{page-7d898795adddde04.js → page-9b153b8af0f90735.js} +1 -1
- package/.next/static/chunks/app/page-5588e64c6d7ae092.js +237 -0
- package/.next/static/chunks/{main-app-0b45ce7a4444c85e.js → main-app-8944008299d05701.js} +1 -1
- package/.next/static/chunks/next/dist/client/components/builtin/global-error-a57ff04541d78dd4.js +1 -0
- package/.next/static/css/e7f4c5cc504068dd.css +1 -0
- package/.next/trace +83 -84
- package/.next/trace-build +1 -1
- package/.next/types/app/api/agent/[id]/bash-output/route.ts +1 -1
- package/.next/types/app/api/agent/[id]/events/route.ts +1 -1
- package/.next/types/app/api/agent/[id]/lease/route.ts +1 -1
- package/.next/types/app/api/agent/[id]/route.ts +1 -1
- package/.next/types/app/api/agent/new/route.ts +1 -1
- package/.next/types/app/api/agent/running/events/route.ts +1 -1
- package/.next/types/app/api/agent/running/route.ts +1 -1
- package/.next/types/app/api/app-update/route.ts +1 -1
- package/.next/types/app/api/auth/api-key/[provider]/route.ts +1 -1
- package/.next/types/app/api/auth/combined/route.ts +1 -1
- package/.next/types/app/api/auth/login/[provider]/route.ts +1 -1
- package/.next/types/app/api/auth/logout/[provider]/route.ts +1 -1
- package/.next/types/app/api/auth/providers/route.ts +1 -1
- package/.next/types/app/api/backup/export/route.ts +1 -1
- package/.next/types/app/api/backup/import/route.ts +1 -1
- package/.next/types/app/api/cwd/browse/route.ts +1 -1
- package/.next/types/app/api/cwd/validate/route.ts +1 -1
- package/.next/types/app/api/default-cwd/route.ts +1 -1
- package/.next/types/app/api/events/route.ts +1 -1
- package/.next/types/app/api/features/route.ts +1 -1
- package/.next/types/app/api/file-index/route.ts +1 -1
- package/.next/types/app/api/files/[...path]/route.ts +1 -1
- package/.next/types/app/api/git/diff/route.ts +1 -1
- package/.next/types/app/api/git/push/route.ts +1 -1
- package/.next/types/app/api/git/stash/route.ts +1 -1
- package/.next/types/app/api/git/status/route.ts +1 -1
- package/.next/types/app/api/home/route.ts +1 -1
- package/.next/types/app/api/import/discover/route.ts +1 -1
- package/.next/types/app/api/import/execute/route.ts +1 -1
- package/.next/types/app/api/import/status/route.ts +1 -1
- package/.next/types/app/api/logs/route.ts +1 -1
- package/.next/types/app/api/mcp/restart/route.ts +1 -1
- package/.next/types/app/api/mcp/route.ts +1 -1
- package/.next/types/app/api/models/enabled/route.ts +1 -1
- package/.next/types/app/api/models/refresh/route.ts +1 -1
- package/.next/types/app/api/models/route.ts +1 -1
- package/.next/types/app/api/models-config/builtin/route.ts +1 -1
- package/.next/types/app/api/models-config/catalog/route.ts +1 -1
- package/.next/types/app/api/models-config/discover/route.ts +1 -1
- package/.next/types/app/api/models-config/route.ts +1 -1
- package/.next/types/app/api/models-config/test/route.ts +1 -1
- package/.next/types/app/api/modes/route.ts +1 -1
- package/.next/types/app/api/plugins/check/route.ts +1 -1
- package/.next/types/app/api/plugins/route.ts +1 -1
- package/.next/types/app/api/project-aliases/route.ts +1 -1
- package/.next/types/app/api/project-trust/route.ts +1 -1
- package/.next/types/app/api/projects/visibility/route.ts +1 -1
- package/.next/types/app/api/provider-usage/query/route.ts +1 -1
- package/.next/types/app/api/proxy/route.ts +1 -1
- package/.next/types/app/api/proxy/test/route.ts +1 -1
- package/.next/types/app/api/sessions/[id]/auto-name/route.ts +1 -1
- package/.next/types/app/api/sessions/[id]/context/route.ts +1 -1
- package/.next/types/app/api/sessions/[id]/details/route.ts +1 -1
- package/.next/types/app/api/sessions/[id]/entries/[entryId]/thinking/route.ts +1 -1
- package/.next/types/app/api/sessions/[id]/entries/[entryId]/tool-result-image/route.ts +1 -1
- package/.next/types/app/api/sessions/[id]/export/route.ts +1 -1
- package/.next/types/app/api/sessions/[id]/queue-recovery/route.ts +1 -1
- package/.next/types/app/api/sessions/[id]/route.ts +1 -1
- package/.next/types/app/api/sessions/[id]/state/route.ts +1 -1
- package/.next/types/app/api/sessions/route.ts +1 -1
- package/.next/types/app/api/sessions/search/route.ts +1 -1
- package/.next/types/app/api/settings/title-model/route.ts +1 -1
- package/.next/types/app/api/skills/check/route.ts +1 -1
- package/.next/types/app/api/skills/install/route.ts +1 -1
- package/.next/types/app/api/skills/route.ts +1 -1
- package/.next/types/app/api/skills/search/route.ts +1 -1
- package/.next/types/app/api/skills/update/route.ts +1 -1
- package/.next/types/app/api/snippets/[id]/route.ts +1 -1
- package/.next/types/app/api/snippets/route.ts +1 -1
- package/.next/types/app/api/subagents/[id]/route.ts +1 -1
- package/.next/types/app/api/subagents/profiles/route.ts +1 -1
- package/.next/types/app/api/subagents/settings/route.ts +1 -1
- package/.next/types/app/api/tasks/[id]/[action]/route.ts +1 -1
- package/.next/types/app/api/tasks/[id]/changed-files/route.ts +1 -1
- package/.next/types/app/api/tasks/[id]/diff/route.ts +1 -1
- package/.next/types/app/api/tasks/[id]/events/route.ts +1 -1
- package/.next/types/app/api/tasks/[id]/route.ts +1 -1
- package/.next/types/app/api/tasks/batch/route.ts +1 -1
- package/.next/types/app/api/tasks/events/route.ts +1 -1
- package/.next/types/app/api/tasks/route.ts +1 -1
- package/.next/types/app/api/tasks/settings/route.ts +1 -1
- package/.next/types/app/api/tasks/templates/route.ts +1 -1
- package/.next/types/app/api/terminal/[id]/events/route.ts +1 -1
- package/.next/types/app/api/terminal/[id]/route.ts +1 -1
- package/.next/types/app/api/terminal/route.ts +1 -1
- package/.next/types/app/api/themes/[name]/route.ts +1 -1
- package/.next/types/app/api/themes/route.ts +1 -1
- package/.next/types/app/api/tools/extension-tools/route.ts +1 -1
- package/.next/types/app/api/tools/settings/route.ts +1 -1
- package/.next/types/app/api/usage/route.ts +1 -1
- package/.next/types/app/api/vision-config/route.ts +1 -1
- package/.next/types/app/api/web-auth/route.ts +1 -1
- package/.next/types/app/api/worktrees/route.ts +1 -1
- package/.next/types/app/layout.ts +1 -1
- package/.next/types/app/login/page.ts +1 -1
- package/.next/types/app/page.ts +1 -1
- package/bin/fix-pi-agent-undici.js +4 -2
- package/bin/memory-watchdog.js +11 -2
- package/bin/pi-web.js +3 -1
- package/bin/with-memory-limit.js +28 -47
- package/package.json +3 -3
- package/.next/server/chunks/7915.js +0 -2
- package/.next/server/chunks/8526.js +0 -1
- package/.next/static/chunks/5170-6ee3710ea5c117f3.js +0 -1
- package/.next/static/chunks/app/page-abc85eb2cca48bce.js +0 -237
- package/.next/static/chunks/next/dist/client/components/builtin/global-error-9b3287a6309b286c.js +0 -1
- package/.next/static/css/ea3fe7c3e0049beb.css +0 -1
- /package/.next/static/{fs5JGinkTfT6aWXJqEdny → YMj6bx3-waKfetNnywU4u}/_buildManifest.js +0 -0
- /package/.next/static/{fs5JGinkTfT6aWXJqEdny → YMj6bx3-waKfetNnywU4u}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// File: /
|
|
1
|
+
// File: /Users/qingtang/.pi-desktop/scratch/d4c3397a-8e9a-4118-9f12-a90626fac237/release-build/app/api/tasks/[id]/[action]/route.ts
|
|
2
2
|
import * as entry from '../../../../../../../app/api/tasks/[id]/[action]/route.js'
|
|
3
3
|
import type { NextRequest } from 'next/server.js'
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// File: /
|
|
1
|
+
// File: /Users/qingtang/.pi-desktop/scratch/d4c3397a-8e9a-4118-9f12-a90626fac237/release-build/app/api/tasks/[id]/changed-files/route.ts
|
|
2
2
|
import * as entry from '../../../../../../../app/api/tasks/[id]/changed-files/route.js'
|
|
3
3
|
import type { NextRequest } from 'next/server.js'
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// File: /
|
|
1
|
+
// File: /Users/qingtang/.pi-desktop/scratch/d4c3397a-8e9a-4118-9f12-a90626fac237/release-build/app/api/tasks/[id]/diff/route.ts
|
|
2
2
|
import * as entry from '../../../../../../../app/api/tasks/[id]/diff/route.js'
|
|
3
3
|
import type { NextRequest } from 'next/server.js'
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// File: /
|
|
1
|
+
// File: /Users/qingtang/.pi-desktop/scratch/d4c3397a-8e9a-4118-9f12-a90626fac237/release-build/app/api/tasks/[id]/events/route.ts
|
|
2
2
|
import * as entry from '../../../../../../../app/api/tasks/[id]/events/route.js'
|
|
3
3
|
import type { NextRequest } from 'next/server.js'
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// File: /
|
|
1
|
+
// File: /Users/qingtang/.pi-desktop/scratch/d4c3397a-8e9a-4118-9f12-a90626fac237/release-build/app/api/tasks/[id]/route.ts
|
|
2
2
|
import * as entry from '../../../../../../app/api/tasks/[id]/route.js'
|
|
3
3
|
import type { NextRequest } from 'next/server.js'
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// File: /
|
|
1
|
+
// File: /Users/qingtang/.pi-desktop/scratch/d4c3397a-8e9a-4118-9f12-a90626fac237/release-build/app/api/tasks/batch/route.ts
|
|
2
2
|
import * as entry from '../../../../../../app/api/tasks/batch/route.js'
|
|
3
3
|
import type { NextRequest } from 'next/server.js'
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// File: /
|
|
1
|
+
// File: /Users/qingtang/.pi-desktop/scratch/d4c3397a-8e9a-4118-9f12-a90626fac237/release-build/app/api/tasks/events/route.ts
|
|
2
2
|
import * as entry from '../../../../../../app/api/tasks/events/route.js'
|
|
3
3
|
import type { NextRequest } from 'next/server.js'
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// File: /
|
|
1
|
+
// File: /Users/qingtang/.pi-desktop/scratch/d4c3397a-8e9a-4118-9f12-a90626fac237/release-build/app/api/tasks/route.ts
|
|
2
2
|
import * as entry from '../../../../../app/api/tasks/route.js'
|
|
3
3
|
import type { NextRequest } from 'next/server.js'
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// File: /
|
|
1
|
+
// File: /Users/qingtang/.pi-desktop/scratch/d4c3397a-8e9a-4118-9f12-a90626fac237/release-build/app/api/tasks/settings/route.ts
|
|
2
2
|
import * as entry from '../../../../../../app/api/tasks/settings/route.js'
|
|
3
3
|
import type { NextRequest } from 'next/server.js'
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// File: /
|
|
1
|
+
// File: /Users/qingtang/.pi-desktop/scratch/d4c3397a-8e9a-4118-9f12-a90626fac237/release-build/app/api/tasks/templates/route.ts
|
|
2
2
|
import * as entry from '../../../../../../app/api/tasks/templates/route.js'
|
|
3
3
|
import type { NextRequest } from 'next/server.js'
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// File: /
|
|
1
|
+
// File: /Users/qingtang/.pi-desktop/scratch/d4c3397a-8e9a-4118-9f12-a90626fac237/release-build/app/api/terminal/[id]/events/route.ts
|
|
2
2
|
import * as entry from '../../../../../../../app/api/terminal/[id]/events/route.js'
|
|
3
3
|
import type { NextRequest } from 'next/server.js'
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// File: /
|
|
1
|
+
// File: /Users/qingtang/.pi-desktop/scratch/d4c3397a-8e9a-4118-9f12-a90626fac237/release-build/app/api/terminal/[id]/route.ts
|
|
2
2
|
import * as entry from '../../../../../../app/api/terminal/[id]/route.js'
|
|
3
3
|
import type { NextRequest } from 'next/server.js'
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// File: /
|
|
1
|
+
// File: /Users/qingtang/.pi-desktop/scratch/d4c3397a-8e9a-4118-9f12-a90626fac237/release-build/app/api/terminal/route.ts
|
|
2
2
|
import * as entry from '../../../../../app/api/terminal/route.js'
|
|
3
3
|
import type { NextRequest } from 'next/server.js'
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// File: /
|
|
1
|
+
// File: /Users/qingtang/.pi-desktop/scratch/d4c3397a-8e9a-4118-9f12-a90626fac237/release-build/app/api/themes/[name]/route.ts
|
|
2
2
|
import * as entry from '../../../../../../app/api/themes/[name]/route.js'
|
|
3
3
|
import type { NextRequest } from 'next/server.js'
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// File: /
|
|
1
|
+
// File: /Users/qingtang/.pi-desktop/scratch/d4c3397a-8e9a-4118-9f12-a90626fac237/release-build/app/api/themes/route.ts
|
|
2
2
|
import * as entry from '../../../../../app/api/themes/route.js'
|
|
3
3
|
import type { NextRequest } from 'next/server.js'
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// File: /
|
|
1
|
+
// File: /Users/qingtang/.pi-desktop/scratch/d4c3397a-8e9a-4118-9f12-a90626fac237/release-build/app/api/tools/extension-tools/route.ts
|
|
2
2
|
import * as entry from '../../../../../../app/api/tools/extension-tools/route.js'
|
|
3
3
|
import type { NextRequest } from 'next/server.js'
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// File: /
|
|
1
|
+
// File: /Users/qingtang/.pi-desktop/scratch/d4c3397a-8e9a-4118-9f12-a90626fac237/release-build/app/api/tools/settings/route.ts
|
|
2
2
|
import * as entry from '../../../../../../app/api/tools/settings/route.js'
|
|
3
3
|
import type { NextRequest } from 'next/server.js'
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// File: /
|
|
1
|
+
// File: /Users/qingtang/.pi-desktop/scratch/d4c3397a-8e9a-4118-9f12-a90626fac237/release-build/app/api/usage/route.ts
|
|
2
2
|
import * as entry from '../../../../../app/api/usage/route.js'
|
|
3
3
|
import type { NextRequest } from 'next/server.js'
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// File: /
|
|
1
|
+
// File: /Users/qingtang/.pi-desktop/scratch/d4c3397a-8e9a-4118-9f12-a90626fac237/release-build/app/api/vision-config/route.ts
|
|
2
2
|
import * as entry from '../../../../../app/api/vision-config/route.js'
|
|
3
3
|
import type { NextRequest } from 'next/server.js'
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// File: /
|
|
1
|
+
// File: /Users/qingtang/.pi-desktop/scratch/d4c3397a-8e9a-4118-9f12-a90626fac237/release-build/app/api/web-auth/route.ts
|
|
2
2
|
import * as entry from '../../../../../app/api/web-auth/route.js'
|
|
3
3
|
import type { NextRequest } from 'next/server.js'
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// File: /
|
|
1
|
+
// File: /Users/qingtang/.pi-desktop/scratch/d4c3397a-8e9a-4118-9f12-a90626fac237/release-build/app/api/worktrees/route.ts
|
|
2
2
|
import * as entry from '../../../../../app/api/worktrees/route.js'
|
|
3
3
|
import type { NextRequest } from 'next/server.js'
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// File: /
|
|
1
|
+
// File: /Users/qingtang/.pi-desktop/scratch/d4c3397a-8e9a-4118-9f12-a90626fac237/release-build/app/layout.tsx
|
|
2
2
|
import * as entry from '../../../app/layout.js'
|
|
3
3
|
import type { ResolvingMetadata, ResolvingViewport } from 'next/dist/lib/metadata/types/metadata-interface.js'
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// File: /
|
|
1
|
+
// File: /Users/qingtang/.pi-desktop/scratch/d4c3397a-8e9a-4118-9f12-a90626fac237/release-build/app/login/page.tsx
|
|
2
2
|
import * as entry from '../../../../app/login/page.js'
|
|
3
3
|
import type { ResolvingMetadata, ResolvingViewport } from 'next/dist/lib/metadata/types/metadata-interface.js'
|
|
4
4
|
|
package/.next/types/app/page.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// File: /
|
|
1
|
+
// File: /Users/qingtang/.pi-desktop/scratch/d4c3397a-8e9a-4118-9f12-a90626fac237/release-build/app/page.tsx
|
|
2
2
|
import * as entry from '../../../app/page.js'
|
|
3
3
|
import type { ResolvingMetadata, ResolvingViewport } from 'next/dist/lib/metadata/types/metadata-interface.js'
|
|
4
4
|
|
|
@@ -73,8 +73,10 @@ function applyUndiciFix(rootDir = path.join(__dirname, ".."), opts = {}) {
|
|
|
73
73
|
if (!fs.existsSync(topUndici)) return;
|
|
74
74
|
|
|
75
75
|
try {
|
|
76
|
-
|
|
77
|
-
|
|
76
|
+
// Read the manifests as data (never require() a path built from config —
|
|
77
|
+
// requiring would execute module code from an externally-resolved location).
|
|
78
|
+
const nestedVersion = JSON.parse(fs.readFileSync(path.join(nestedUndici, "package.json"), "utf8")).version;
|
|
79
|
+
const topVersion = JSON.parse(fs.readFileSync(path.join(topUndici, "package.json"), "utf8")).version;
|
|
78
80
|
// Already a real dir with the correct version → nothing to do.
|
|
79
81
|
if (!nestedIsSymlink && nestedVersion === topVersion) return;
|
|
80
82
|
|
package/bin/memory-watchdog.js
CHANGED
|
@@ -36,7 +36,6 @@ function resolveConfig(env) {
|
|
|
36
36
|
if (!Number.isFinite(port) || port <= 0) return null;
|
|
37
37
|
return {
|
|
38
38
|
port,
|
|
39
|
-
hostname: env.PI_WEB_HOSTNAME || "127.0.0.1",
|
|
40
39
|
restartMb: parsePositiveInt(rawRestart, DEFAULT_RESTART_MB, 1),
|
|
41
40
|
checkMinutes: parsePositiveInt(env.PI_WEB_RSS_CHECK_MINUTES, DEFAULT_CHECK_MINUTES, 1),
|
|
42
41
|
};
|
|
@@ -52,7 +51,17 @@ function basicAuthHeaders(env) {
|
|
|
52
51
|
}
|
|
53
52
|
|
|
54
53
|
async function isServerIdle(config, env) {
|
|
55
|
-
|
|
54
|
+
// Literal loopback origin: the watchdog self-checks THIS process, which
|
|
55
|
+
// always answers on 127.0.0.1 regardless of the LAN bind address (-H), so
|
|
56
|
+
// the probe target is never derived from the environment. Only the port is
|
|
57
|
+
// injected, as a validated numeric URL component.
|
|
58
|
+
const probeUrl = new URL("/api/agent/running", "http://127.0.0.1");
|
|
59
|
+
const port = Number.isFinite(config.port) && config.port >= 1024 && config.port <= 65535
|
|
60
|
+
? config.port
|
|
61
|
+
: 0;
|
|
62
|
+
if (!port) return null;
|
|
63
|
+
probeUrl.port = String(port);
|
|
64
|
+
const res = await fetch(probeUrl, {
|
|
56
65
|
headers: basicAuthHeaders(env),
|
|
57
66
|
signal: AbortSignal.timeout(RUNNING_CHECK_TIMEOUT_MS),
|
|
58
67
|
});
|
package/bin/pi-web.js
CHANGED
|
@@ -182,7 +182,9 @@ child.stdout.on("data", (chunk) => {
|
|
|
182
182
|
if (isWindows) {
|
|
183
183
|
// `start` is a cmd.exe built-in, so invoke cmd directly. The empty
|
|
184
184
|
// title argument is required by `start` before the target URL.
|
|
185
|
-
|
|
185
|
+
// Literal "cmd.exe" (not %ComSpec%): the system shell is a fixed
|
|
186
|
+
// program, never taken from the environment.
|
|
187
|
+
opener = spawn("cmd.exe", ["/c", "start", "", url], {
|
|
186
188
|
stdio: "ignore",
|
|
187
189
|
detached: true,
|
|
188
190
|
});
|
package/bin/with-memory-limit.js
CHANGED
|
@@ -6,64 +6,45 @@ const { spawnSync } = require("child_process");
|
|
|
6
6
|
/** Keep the V8 heap from ballooning during local runs. Next.js dev auto-sets
|
|
7
7
|
* --max-old-space-size to 50% of physical RAM (12GB on a 24GB machine)
|
|
8
8
|
* unless the user already capped it. A 3GB cap makes GC engage earlier and
|
|
9
|
-
* bounds RSS growth for both dev and production start.
|
|
10
|
-
|
|
11
|
-
const MEMORY_LIMIT_MB = 3072;
|
|
12
|
-
const SEMI_SPACE_MB = 128;
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Merge a heap cap into an existing NODE_OPTIONS value. If the user already
|
|
16
|
-
* set --max-old-space-size explicitly, theirs wins (we only add the semi-space
|
|
17
|
-
* hint); otherwise we append both flags so V8 and Next.js see a hard cap.
|
|
9
|
+
* bounds RSS growth for both dev and production start. Also consumed by
|
|
10
|
+
* bin/pi-web.js to seed NODE_OPTIONS before spawning the server.
|
|
18
11
|
*/
|
|
19
12
|
function mergedNodeOptions(existing) {
|
|
20
13
|
const base = existing ?? "";
|
|
21
14
|
const hasHeapLimit = /(^|\s)--max-old-space-size=\d+/.test(base);
|
|
22
|
-
const flags = hasHeapLimit ? [] : [`--max-old-space-size
|
|
15
|
+
const flags = hasHeapLimit ? [] : [`--max-old-space-size=3072`, `--max-semi-space-size=128`];
|
|
23
16
|
return [...flags, base].filter(Boolean).join(" ");
|
|
24
17
|
}
|
|
25
18
|
|
|
26
|
-
module.exports = { mergedNodeOptions
|
|
19
|
+
module.exports = { mergedNodeOptions };
|
|
20
|
+
|
|
21
|
+
// CLI: with-memory-limit <task> — runs a fixed Next.js task with the capped
|
|
22
|
+
// heap. Each task is a fully literal spawn (constant program, constant argv,
|
|
23
|
+
// relative to the package root that npm scripts guarantee as cwd), so nothing
|
|
24
|
+
// from the command line or environment ever reaches a spawn. The heap cap
|
|
25
|
+
// rides as literal V8 flags in argv, which take precedence over any inherited
|
|
26
|
+
// NODE_OPTIONS for this process tree.
|
|
27
27
|
|
|
28
|
-
// CLI: with-memory-limit <cmd> [args...] — runs cmd with the capped heap.
|
|
29
|
-
// Child processes spawned by cmd inherit NODE_OPTIONS, so next dev / next
|
|
30
|
-
// start and their next-server children all see the same limit.
|
|
31
28
|
if (require.main === module) {
|
|
32
|
-
const [
|
|
33
|
-
if (!cmd) {
|
|
34
|
-
console.error("usage: node bin/with-memory-limit.js <cmd> [args...]");
|
|
35
|
-
process.exit(1);
|
|
36
|
-
}
|
|
37
|
-
const env = { ...process.env, NODE_OPTIONS: mergedNodeOptions(process.env.NODE_OPTIONS) };
|
|
29
|
+
const [taskName] = process.argv.slice(2);
|
|
38
30
|
let result;
|
|
39
|
-
if (
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
if (/\.(cmd|bat)$/i.test(target)) {
|
|
54
|
-
// cmd.exe parses `/` as a switch character, so hand it a native path.
|
|
55
|
-
const native = require("path").win32.normalize(target);
|
|
56
|
-
const quote = (a) => (/["&<>^|()%!?\s]/.test(a) ? `"${a}"` : a);
|
|
57
|
-
const line = [native, ...args].map(quote).join(" ");
|
|
58
|
-
result = spawnSync(process.env.ComSpec || "cmd.exe", ["/d", "/s", "/c", line], {
|
|
59
|
-
stdio: "inherit",
|
|
60
|
-
env,
|
|
61
|
-
});
|
|
62
|
-
} else {
|
|
63
|
-
result = spawnSync(target, args, { stdio: "inherit", env });
|
|
64
|
-
}
|
|
31
|
+
if (taskName === "nextDev") {
|
|
32
|
+
result = spawnSync("node", [
|
|
33
|
+
"--max-old-space-size=3072",
|
|
34
|
+
"--max-semi-space-size=128",
|
|
35
|
+
"node_modules/next/dist/bin/next",
|
|
36
|
+
"dev", "-H", "127.0.0.1", "-p", "0", "--turbopack",
|
|
37
|
+
], { stdio: "inherit" });
|
|
38
|
+
} else if (taskName === "nextStart") {
|
|
39
|
+
result = spawnSync("node", [
|
|
40
|
+
"--max-old-space-size=3072",
|
|
41
|
+
"--max-semi-space-size=128",
|
|
42
|
+
"node_modules/next/dist/bin/next",
|
|
43
|
+
"start", "-H", "127.0.0.1", "-p", "0",
|
|
44
|
+
], { stdio: "inherit" });
|
|
65
45
|
} else {
|
|
66
|
-
|
|
46
|
+
console.error("usage: node bin/with-memory-limit.js nextDev|nextStart");
|
|
47
|
+
process.exit(1);
|
|
67
48
|
}
|
|
68
49
|
if (result.error) {
|
|
69
50
|
console.error(`with-memory-limit: ${result.error.message}`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qt4798/pi-web",
|
|
3
|
-
"version": "0.18.
|
|
3
|
+
"version": "0.18.14",
|
|
4
4
|
"description": "Web workspace for the pi coding agent",
|
|
5
5
|
"homepage": "https://github.com/t479842598/pi-web-QT#readme",
|
|
6
6
|
"repository": {
|
|
@@ -30,14 +30,14 @@
|
|
|
30
30
|
"package.json"
|
|
31
31
|
],
|
|
32
32
|
"scripts": {
|
|
33
|
-
"dev": "node bin/fix-pi-agent-undici.js && node bin/with-memory-limit.js
|
|
33
|
+
"dev": "node bin/fix-pi-agent-undici.js && node bin/with-memory-limit.js nextDev",
|
|
34
34
|
"dev:lan": "node bin/fix-pi-agent-undici.js && node bin/with-memory-limit.js node_modules/.bin/next dev -H 0.0.0.0 -p 0 --turbopack",
|
|
35
35
|
"postinstall": "node bin/prepare-terminal.js",
|
|
36
36
|
"theme:css": "node scripts/generate-theme-css.mjs",
|
|
37
37
|
"prebuild": "node scripts/generate-theme-css.mjs",
|
|
38
38
|
"build": "env -u TURBOPACK -u __NEXT_PRIVATE_STANDALONE_CONFIG next build --webpack",
|
|
39
39
|
"bundle:backend": "node scripts/bundle-backend.mjs",
|
|
40
|
-
"start": "node bin/fix-pi-agent-undici.js && node bin/with-memory-limit.js
|
|
40
|
+
"start": "node bin/fix-pi-agent-undici.js && node bin/with-memory-limit.js nextStart",
|
|
41
41
|
"start:lan": "node bin/fix-pi-agent-undici.js && node bin/with-memory-limit.js node_modules/.bin/next start -H 0.0.0.0 -p 0",
|
|
42
42
|
"lint": "eslint .",
|
|
43
43
|
"release": "npm version patch --no-git-tag-version && npm run build && npm publish --access public",
|
|
@@ -1,2 +0,0 @@
|
|
|
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.18.12","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/standalone","!.next/**/*.js.map","lib/theme","public","next.config.ts","package.json"],"scripts":{"dev":"node bin/fix-pi-agent-undici.js && node bin/with-memory-limit.js node_modules/.bin/next dev -H 127.0.0.1 -p 0 --turbopack","dev:lan":"node bin/fix-pi-agent-undici.js && node bin/with-memory-limit.js node_modules/.bin/next dev -H 0.0.0.0 -p 0 --turbopack","postinstall":"node bin/prepare-terminal.js","theme:css":"node scripts/generate-theme-css.mjs","prebuild":"node scripts/generate-theme-css.mjs","build":"env -u TURBOPACK -u __NEXT_PRIVATE_STANDALONE_CONFIG next build --webpack","bundle:backend":"node scripts/bundle-backend.mjs","start":"node bin/fix-pi-agent-undici.js && node bin/with-memory-limit.js node_modules/.bin/next start -H 127.0.0.1 -p 0","start:lan":"node bin/fix-pi-agent-undici.js && node bin/with-memory-limit.js node_modules/.bin/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)","test:e2e":"node e2e/run.mjs","test:terminal":"node e2e/terminal.mjs"},"dependencies":{"@earendil-works/pi-agent-core":"0.87.1","@earendil-works/pi-ai":"0.87.1","@earendil-works/pi-coding-agent":"0.87.1","@earendil-works/pi-tui":"0.87.1","@fontsource/ia-writer-quattro":"^5.3.0","@fontsource/lilex":"^5.3.0","@phosphor-icons/react":"^2.1.10","@radix-ui/react-dialog":"^1.1.23","@tanstack/react-virtual":"^3.14.9","@tauri-apps/api":"^2.11.1","@xterm/addon-fit":"0.11.0","@xterm/xterm":"6.0.0","adm-zip":"^0.6.0","ansi_up":"^6.0.6","cmdk":"^1.1.1","js-yaml":"^5.2.3","katex":"^0.16.47","lucide-react":"^1.37.0","mammoth":"^1.12.0","mermaid":"^11.16.1","next":"16.3.6","node-pty":"1.2.0-beta.15","proper-lockfile":"4.1.2","qrcode":"^1.5.4","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-frontmatter":"^5.0.0","remark-gfm":"^4.0.1","remark-math":"^6.0.0","semver":"7.8.5","undici":"^8.11.0"},"overrides":{"undici":"^8.11.0","@earendil-works/pi-coding-agent":{"undici":"^8.11.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/js-yaml":"^4.0.9","@types/node":"^25","@types/proper-lockfile":"4.1.4","@types/qrcode":"^1.5.6","@types/react":"^19","@types/react-dom":"^19","@types/react-syntax-highlighter":"^15.5.13","@types/semver":"7.8.0","eslint":"^9.39.5","eslint-config-next":"16.3.5","jiti":"^2.7.0","lightningcss":"^1.33.0","playwright":"^1.63.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:()=>l,EN:()=>k});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(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;let c=e(b.hostname);return b.port?`${c}:${b.port}`:c}catch{return null}}function h(){return[process.env.PI_WEB_HOSTNAME,...process.env.PI_WEB_ALLOWED_HOSTS?.split(",")??[]].filter(a=>!!a?.trim())}function i(a){try{return new URL(a).origin}catch{return null}}let j=new Set(["POST","PUT","PATCH","DELETE"]);function k(a,b=h()){if(!function(a,b=h()){let c=a.headers.get("host"),g=c?f(c):null;return!!g&&(!!("localhost"===g||g.endsWith(".localhost")||(0,d.isIP)(g))||b.some(a=>{let b;return((b=a?.trim())?(0,d.isIP)(b)?e(b):f(b):null)===g}))}(a,b))return!1;if(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))return!0;if(!(a.headers.has("origin")||a.headers.has("sec-fetch-site"))){if(j.has((a.method??"GET").toUpperCase())){let b=a.headers.get("host"),c=b?f(b):null;return null!==c&&!!("localhost"===c||c.endsWith(".localhost")||/^127\./.test(c)||"::1"===c||"[::1]"===c)}return!0}return function(a){let b,c,d;if("cross-site"===a.headers.get("sec-fetch-site"))return!1;let e=a.headers.get("origin");if(!e)return!0;let f=(b=new URL(a.url),(c=a.headers.get("host"))?i(`${b.protocol}//${c}`):null);if(null!==f&&(i(e)===f||function(a,b,c){let d,e;try{d=new URL(a),e=new URL(b)}catch{return!1}if(d.protocol!==e.protocol||d.hostname.toLowerCase()!==e.hostname.toLowerCase())return!1;if(!d.port)return"same-origin"===c;let f=e.port||("https:"===e.protocol?"443":"80");return d.port===f}(e,f,a.headers.get("sec-fetch-site"))))return!0;if("same-origin"!==a.headers.get("sec-fetch-site")||!a.headers.get("x-forwarded-proto"))return!1;let h=a.headers.get("host");if(!h)return!1;try{d=new URL(e).host}catch{return!1}let j=g(d);return null!==j&&j===g(h)}(a)}function l(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{return{piWebVersion:c(39006).version??"unknown",piSdkVersion:"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};if(!m){h.push({name:c,original:o,adapted:null,action:"keep",platform:e});continue}let 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
|
-
`),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:()=>{}};
|