@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.
Files changed (359) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +18 -18
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/required-server-files.js +6 -7
  6. package/.next/required-server-files.json +6 -7
  7. package/.next/server/app/_global-error/page.js +2 -2
  8. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/_global-error.html +1 -1
  10. package/.next/server/app/_global-error.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/.next/server/app/_not-found/page.js +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 +3 -3
  18. package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  19. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
  20. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  21. package/.next/server/app/api/agent/[id]/bash-output/route.js +1 -1
  22. package/.next/server/app/api/agent/[id]/bash-output/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/agent/[id]/events/route.js +2 -2
  24. package/.next/server/app/api/agent/[id]/events/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/agent/[id]/lease/route.js +1 -1
  26. package/.next/server/app/api/agent/[id]/lease/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/agent/[id]/route.js +1 -1
  28. package/.next/server/app/api/agent/[id]/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/agent/new/route.js +1 -1
  30. package/.next/server/app/api/agent/new/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/agent/running/events/route.js +1 -1
  32. package/.next/server/app/api/agent/running/events/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/agent/running/route.js +1 -1
  34. package/.next/server/app/api/agent/running/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/app-update/route.js +1 -1
  36. package/.next/server/app/api/app-update/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
  38. package/.next/server/app/api/auth/api-key/[provider]/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/auth/combined/route.js +1 -1
  40. package/.next/server/app/api/auth/combined/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/auth/login/[provider]/route.js +2 -2
  42. package/.next/server/app/api/auth/login/[provider]/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
  44. package/.next/server/app/api/auth/logout/[provider]/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/auth/providers/route.js +1 -1
  46. package/.next/server/app/api/auth/providers/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/backup/export/route.js +1 -1
  48. package/.next/server/app/api/backup/export/route.js.nft.json +1 -1
  49. package/.next/server/app/api/backup/export/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/backup/import/route.js +1 -1
  51. package/.next/server/app/api/backup/import/route.js.nft.json +1 -1
  52. package/.next/server/app/api/backup/import/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/cwd/browse/route.js +1 -1
  54. package/.next/server/app/api/cwd/browse/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/cwd/validate/route.js +1 -1
  56. package/.next/server/app/api/cwd/validate/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/default-cwd/route.js +1 -1
  58. package/.next/server/app/api/default-cwd/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/events/route.js +2 -2
  60. package/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/features/route.js +1 -1
  62. package/.next/server/app/api/features/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/file-index/route.js +1 -1
  64. package/.next/server/app/api/file-index/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/files/[...path]/route.js +2 -2
  66. package/.next/server/app/api/files/[...path]/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/git/diff/route.js +2 -2
  68. package/.next/server/app/api/git/diff/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/git/push/route.js +1 -1
  70. package/.next/server/app/api/git/push/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/git/stash/route.js +1 -1
  72. package/.next/server/app/api/git/stash/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/git/status/route.js +1 -1
  74. package/.next/server/app/api/git/status/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/home/route.js +1 -1
  76. package/.next/server/app/api/home/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/import/discover/route.js +1 -1
  78. package/.next/server/app/api/import/discover/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/import/execute/route.js +1 -1
  80. package/.next/server/app/api/import/execute/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/import/status/route.js +1 -1
  82. package/.next/server/app/api/import/status/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/logs/route.js +1 -1
  84. package/.next/server/app/api/logs/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/mcp/restart/route.js +1 -1
  86. package/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/mcp/route.js +2 -2
  88. package/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/models/enabled/route.js +1 -1
  90. package/.next/server/app/api/models/enabled/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/models/refresh/route.js +1 -1
  92. package/.next/server/app/api/models/refresh/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/models/route.js +1 -1
  94. package/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/models-config/builtin/route.js +1 -1
  96. package/.next/server/app/api/models-config/builtin/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/models-config/catalog/route.js +1 -1
  98. package/.next/server/app/api/models-config/catalog/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/models-config/discover/route.js +1 -1
  100. package/.next/server/app/api/models-config/discover/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/models-config/route.js +1 -1
  102. package/.next/server/app/api/models-config/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/models-config/test/route.js +1 -1
  104. package/.next/server/app/api/models-config/test/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/modes/route.js +1 -1
  106. package/.next/server/app/api/modes/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/plugins/check/route.js +1 -1
  108. package/.next/server/app/api/plugins/check/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/plugins/route.js +1 -1
  110. package/.next/server/app/api/plugins/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/project-aliases/route.js +1 -1
  112. package/.next/server/app/api/project-aliases/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/project-trust/route.js +1 -1
  114. package/.next/server/app/api/project-trust/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/projects/visibility/route.js +1 -1
  116. package/.next/server/app/api/projects/visibility/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/provider-usage/query/route.js +1 -1
  118. package/.next/server/app/api/provider-usage/query/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/proxy/route.js +1 -1
  120. package/.next/server/app/api/proxy/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/proxy/test/route.js +1 -1
  122. package/.next/server/app/api/proxy/test/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
  124. package/.next/server/app/api/sessions/[id]/auto-name/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  126. package/.next/server/app/api/sessions/[id]/context/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/sessions/[id]/details/route.js +1 -1
  128. package/.next/server/app/api/sessions/[id]/details/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -1
  130. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/sessions/[id]/entries/[entryId]/tool-result-image/route.js +1 -1
  132. package/.next/server/app/api/sessions/[id]/entries/[entryId]/tool-result-image/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/sessions/[id]/export/route.js +2 -2
  134. package/.next/server/app/api/sessions/[id]/export/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/sessions/[id]/queue-recovery/route.js +1 -1
  136. package/.next/server/app/api/sessions/[id]/queue-recovery/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  138. package/.next/server/app/api/sessions/[id]/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
  140. package/.next/server/app/api/sessions/[id]/state/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/sessions/route.js +1 -1
  142. package/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/sessions/search/route.js +1 -1
  144. package/.next/server/app/api/sessions/search/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/settings/title-model/route.js +1 -1
  146. package/.next/server/app/api/settings/title-model/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/skills/check/route.js +1 -1
  148. package/.next/server/app/api/skills/check/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/skills/install/route.js +1 -1
  150. package/.next/server/app/api/skills/install/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/skills/route.js +1 -1
  152. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/skills/search/route.js +1 -1
  154. package/.next/server/app/api/skills/search/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/api/skills/update/route.js +1 -1
  156. package/.next/server/app/api/skills/update/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/snippets/[id]/route.js +1 -1
  158. package/.next/server/app/api/snippets/[id]/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/snippets/route.js +1 -1
  160. package/.next/server/app/api/snippets/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/api/subagents/[id]/route.js +1 -1
  162. package/.next/server/app/api/subagents/[id]/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/api/subagents/profiles/route.js +1 -1
  164. package/.next/server/app/api/subagents/profiles/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/subagents/settings/route.js +1 -1
  166. package/.next/server/app/api/subagents/settings/route_client-reference-manifest.js +1 -1
  167. package/.next/server/app/api/tasks/[id]/[action]/route.js +1 -1
  168. package/.next/server/app/api/tasks/[id]/[action]/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/tasks/[id]/changed-files/route.js +1 -1
  170. package/.next/server/app/api/tasks/[id]/changed-files/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/tasks/[id]/diff/route.js +2 -2
  172. package/.next/server/app/api/tasks/[id]/diff/route_client-reference-manifest.js +1 -1
  173. package/.next/server/app/api/tasks/[id]/events/route.js +1 -1
  174. package/.next/server/app/api/tasks/[id]/events/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/api/tasks/[id]/route.js +1 -1
  176. package/.next/server/app/api/tasks/[id]/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/api/tasks/batch/route.js +1 -1
  178. package/.next/server/app/api/tasks/batch/route_client-reference-manifest.js +1 -1
  179. package/.next/server/app/api/tasks/events/route.js +2 -2
  180. package/.next/server/app/api/tasks/events/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/api/tasks/route.js +1 -1
  182. package/.next/server/app/api/tasks/route_client-reference-manifest.js +1 -1
  183. package/.next/server/app/api/tasks/settings/route.js +1 -1
  184. package/.next/server/app/api/tasks/settings/route_client-reference-manifest.js +1 -1
  185. package/.next/server/app/api/tasks/templates/route.js +1 -1
  186. package/.next/server/app/api/tasks/templates/route_client-reference-manifest.js +1 -1
  187. package/.next/server/app/api/terminal/[id]/events/route.js +2 -2
  188. package/.next/server/app/api/terminal/[id]/events/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/terminal/[id]/route.js +1 -1
  190. package/.next/server/app/api/terminal/[id]/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/terminal/route.js +1 -1
  192. package/.next/server/app/api/terminal/route_client-reference-manifest.js +1 -1
  193. package/.next/server/app/api/themes/[name]/route.js +1 -1
  194. package/.next/server/app/api/themes/[name]/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/themes/route.js +1 -1
  196. package/.next/server/app/api/themes/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/tools/extension-tools/route.js +2 -2
  198. package/.next/server/app/api/tools/extension-tools/route_client-reference-manifest.js +1 -1
  199. package/.next/server/app/api/tools/settings/route.js +1 -1
  200. package/.next/server/app/api/tools/settings/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/usage/route.js +1 -1
  202. package/.next/server/app/api/usage/route_client-reference-manifest.js +1 -1
  203. package/.next/server/app/api/vision-config/route.js +2 -2
  204. package/.next/server/app/api/vision-config/route_client-reference-manifest.js +1 -1
  205. package/.next/server/app/api/web-auth/route.js +1 -1
  206. package/.next/server/app/api/web-auth/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/worktrees/route.js +1 -1
  208. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  209. package/.next/server/app/icon.ico/route.js +1 -1
  210. package/.next/server/app/icon.png/route.js +1 -1
  211. package/.next/server/app/icon.svg/route.js +1 -1
  212. package/.next/server/app/index.html +1 -1
  213. package/.next/server/app/index.rsc +5 -5
  214. package/.next/server/app/index.segments/__PAGE__.segment.rsc +5 -5
  215. package/.next/server/app/index.segments/_full.segment.rsc +5 -5
  216. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  217. package/.next/server/app/login/page.js +1 -1
  218. package/.next/server/app/login/page.js.nft.json +1 -1
  219. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  220. package/.next/server/app/login.html +1 -1
  221. package/.next/server/app/login.rsc +4 -4
  222. package/.next/server/app/login.segments/_full.segment.rsc +4 -4
  223. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  224. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +4 -4
  225. package/.next/server/app/page.js +19 -19
  226. package/.next/server/app/page.js.nft.json +1 -1
  227. package/.next/server/app/page_client-reference-manifest.js +1 -1
  228. package/.next/server/app-paths-manifest.json +18 -18
  229. package/.next/server/chunks/1625.js +1 -1
  230. package/.next/server/chunks/2430.js +4 -4
  231. package/.next/server/chunks/4253.js +1 -1
  232. package/.next/server/chunks/5437.js +3 -0
  233. package/.next/server/chunks/6429.js +1 -1
  234. package/.next/server/chunks/8692.js +1 -0
  235. package/.next/server/chunks/9280.js +1 -1
  236. package/.next/server/middleware-build-manifest.js +1 -1
  237. package/.next/server/middleware.js +7 -7
  238. package/.next/server/pages/404.html +1 -1
  239. package/.next/server/pages/500.html +1 -1
  240. package/.next/server/server-reference-manifest.json +1 -1
  241. package/.next/static/chunks/5170-1843a50074eff480.js +1 -0
  242. package/.next/static/chunks/app/_not-found/{page-4e8d0b14be117d20.js → page-0e8bb074c3dbf54e.js} +1 -1
  243. package/.next/static/chunks/app/{layout-9aea218f73c7fe87.js → layout-740df3abbdf0ae0c.js} +1 -1
  244. package/.next/static/chunks/app/login/{page-7d898795adddde04.js → page-9b153b8af0f90735.js} +1 -1
  245. package/.next/static/chunks/app/page-5588e64c6d7ae092.js +237 -0
  246. package/.next/static/chunks/{main-app-0b45ce7a4444c85e.js → main-app-8944008299d05701.js} +1 -1
  247. package/.next/static/chunks/next/dist/client/components/builtin/global-error-a57ff04541d78dd4.js +1 -0
  248. package/.next/static/css/e7f4c5cc504068dd.css +1 -0
  249. package/.next/trace +83 -84
  250. package/.next/trace-build +1 -1
  251. package/.next/types/app/api/agent/[id]/bash-output/route.ts +1 -1
  252. package/.next/types/app/api/agent/[id]/events/route.ts +1 -1
  253. package/.next/types/app/api/agent/[id]/lease/route.ts +1 -1
  254. package/.next/types/app/api/agent/[id]/route.ts +1 -1
  255. package/.next/types/app/api/agent/new/route.ts +1 -1
  256. package/.next/types/app/api/agent/running/events/route.ts +1 -1
  257. package/.next/types/app/api/agent/running/route.ts +1 -1
  258. package/.next/types/app/api/app-update/route.ts +1 -1
  259. package/.next/types/app/api/auth/api-key/[provider]/route.ts +1 -1
  260. package/.next/types/app/api/auth/combined/route.ts +1 -1
  261. package/.next/types/app/api/auth/login/[provider]/route.ts +1 -1
  262. package/.next/types/app/api/auth/logout/[provider]/route.ts +1 -1
  263. package/.next/types/app/api/auth/providers/route.ts +1 -1
  264. package/.next/types/app/api/backup/export/route.ts +1 -1
  265. package/.next/types/app/api/backup/import/route.ts +1 -1
  266. package/.next/types/app/api/cwd/browse/route.ts +1 -1
  267. package/.next/types/app/api/cwd/validate/route.ts +1 -1
  268. package/.next/types/app/api/default-cwd/route.ts +1 -1
  269. package/.next/types/app/api/events/route.ts +1 -1
  270. package/.next/types/app/api/features/route.ts +1 -1
  271. package/.next/types/app/api/file-index/route.ts +1 -1
  272. package/.next/types/app/api/files/[...path]/route.ts +1 -1
  273. package/.next/types/app/api/git/diff/route.ts +1 -1
  274. package/.next/types/app/api/git/push/route.ts +1 -1
  275. package/.next/types/app/api/git/stash/route.ts +1 -1
  276. package/.next/types/app/api/git/status/route.ts +1 -1
  277. package/.next/types/app/api/home/route.ts +1 -1
  278. package/.next/types/app/api/import/discover/route.ts +1 -1
  279. package/.next/types/app/api/import/execute/route.ts +1 -1
  280. package/.next/types/app/api/import/status/route.ts +1 -1
  281. package/.next/types/app/api/logs/route.ts +1 -1
  282. package/.next/types/app/api/mcp/restart/route.ts +1 -1
  283. package/.next/types/app/api/mcp/route.ts +1 -1
  284. package/.next/types/app/api/models/enabled/route.ts +1 -1
  285. package/.next/types/app/api/models/refresh/route.ts +1 -1
  286. package/.next/types/app/api/models/route.ts +1 -1
  287. package/.next/types/app/api/models-config/builtin/route.ts +1 -1
  288. package/.next/types/app/api/models-config/catalog/route.ts +1 -1
  289. package/.next/types/app/api/models-config/discover/route.ts +1 -1
  290. package/.next/types/app/api/models-config/route.ts +1 -1
  291. package/.next/types/app/api/models-config/test/route.ts +1 -1
  292. package/.next/types/app/api/modes/route.ts +1 -1
  293. package/.next/types/app/api/plugins/check/route.ts +1 -1
  294. package/.next/types/app/api/plugins/route.ts +1 -1
  295. package/.next/types/app/api/project-aliases/route.ts +1 -1
  296. package/.next/types/app/api/project-trust/route.ts +1 -1
  297. package/.next/types/app/api/projects/visibility/route.ts +1 -1
  298. package/.next/types/app/api/provider-usage/query/route.ts +1 -1
  299. package/.next/types/app/api/proxy/route.ts +1 -1
  300. package/.next/types/app/api/proxy/test/route.ts +1 -1
  301. package/.next/types/app/api/sessions/[id]/auto-name/route.ts +1 -1
  302. package/.next/types/app/api/sessions/[id]/context/route.ts +1 -1
  303. package/.next/types/app/api/sessions/[id]/details/route.ts +1 -1
  304. package/.next/types/app/api/sessions/[id]/entries/[entryId]/thinking/route.ts +1 -1
  305. package/.next/types/app/api/sessions/[id]/entries/[entryId]/tool-result-image/route.ts +1 -1
  306. package/.next/types/app/api/sessions/[id]/export/route.ts +1 -1
  307. package/.next/types/app/api/sessions/[id]/queue-recovery/route.ts +1 -1
  308. package/.next/types/app/api/sessions/[id]/route.ts +1 -1
  309. package/.next/types/app/api/sessions/[id]/state/route.ts +1 -1
  310. package/.next/types/app/api/sessions/route.ts +1 -1
  311. package/.next/types/app/api/sessions/search/route.ts +1 -1
  312. package/.next/types/app/api/settings/title-model/route.ts +1 -1
  313. package/.next/types/app/api/skills/check/route.ts +1 -1
  314. package/.next/types/app/api/skills/install/route.ts +1 -1
  315. package/.next/types/app/api/skills/route.ts +1 -1
  316. package/.next/types/app/api/skills/search/route.ts +1 -1
  317. package/.next/types/app/api/skills/update/route.ts +1 -1
  318. package/.next/types/app/api/snippets/[id]/route.ts +1 -1
  319. package/.next/types/app/api/snippets/route.ts +1 -1
  320. package/.next/types/app/api/subagents/[id]/route.ts +1 -1
  321. package/.next/types/app/api/subagents/profiles/route.ts +1 -1
  322. package/.next/types/app/api/subagents/settings/route.ts +1 -1
  323. package/.next/types/app/api/tasks/[id]/[action]/route.ts +1 -1
  324. package/.next/types/app/api/tasks/[id]/changed-files/route.ts +1 -1
  325. package/.next/types/app/api/tasks/[id]/diff/route.ts +1 -1
  326. package/.next/types/app/api/tasks/[id]/events/route.ts +1 -1
  327. package/.next/types/app/api/tasks/[id]/route.ts +1 -1
  328. package/.next/types/app/api/tasks/batch/route.ts +1 -1
  329. package/.next/types/app/api/tasks/events/route.ts +1 -1
  330. package/.next/types/app/api/tasks/route.ts +1 -1
  331. package/.next/types/app/api/tasks/settings/route.ts +1 -1
  332. package/.next/types/app/api/tasks/templates/route.ts +1 -1
  333. package/.next/types/app/api/terminal/[id]/events/route.ts +1 -1
  334. package/.next/types/app/api/terminal/[id]/route.ts +1 -1
  335. package/.next/types/app/api/terminal/route.ts +1 -1
  336. package/.next/types/app/api/themes/[name]/route.ts +1 -1
  337. package/.next/types/app/api/themes/route.ts +1 -1
  338. package/.next/types/app/api/tools/extension-tools/route.ts +1 -1
  339. package/.next/types/app/api/tools/settings/route.ts +1 -1
  340. package/.next/types/app/api/usage/route.ts +1 -1
  341. package/.next/types/app/api/vision-config/route.ts +1 -1
  342. package/.next/types/app/api/web-auth/route.ts +1 -1
  343. package/.next/types/app/api/worktrees/route.ts +1 -1
  344. package/.next/types/app/layout.ts +1 -1
  345. package/.next/types/app/login/page.ts +1 -1
  346. package/.next/types/app/page.ts +1 -1
  347. package/bin/fix-pi-agent-undici.js +4 -2
  348. package/bin/memory-watchdog.js +11 -2
  349. package/bin/pi-web.js +3 -1
  350. package/bin/with-memory-limit.js +28 -47
  351. package/package.json +3 -3
  352. package/.next/server/chunks/7915.js +0 -2
  353. package/.next/server/chunks/8526.js +0 -1
  354. package/.next/static/chunks/5170-6ee3710ea5c117f3.js +0 -1
  355. package/.next/static/chunks/app/page-abc85eb2cca48bce.js +0 -237
  356. package/.next/static/chunks/next/dist/client/components/builtin/global-error-9b3287a6309b286c.js +0 -1
  357. package/.next/static/css/ea3fe7c3e0049beb.css +0 -1
  358. /package/.next/static/{fs5JGinkTfT6aWXJqEdny → YMj6bx3-waKfetNnywU4u}/_buildManifest.js +0 -0
  359. /package/.next/static/{fs5JGinkTfT6aWXJqEdny → YMj6bx3-waKfetNnywU4u}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- // File: /Volumes/1T 原装/项目研发/pi-web-QT/app/api/tasks/[id]/[action]/route.ts
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: /Volumes/1T 原装/项目研发/pi-web-QT/app/api/tasks/[id]/changed-files/route.ts
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: /Volumes/1T 原装/项目研发/pi-web-QT/app/api/tasks/[id]/diff/route.ts
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: /Volumes/1T 原装/项目研发/pi-web-QT/app/api/tasks/[id]/events/route.ts
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: /Volumes/1T 原装/项目研发/pi-web-QT/app/api/tasks/[id]/route.ts
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: /Volumes/1T 原装/项目研发/pi-web-QT/app/api/tasks/batch/route.ts
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: /Volumes/1T 原装/项目研发/pi-web-QT/app/api/tasks/events/route.ts
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: /Volumes/1T 原装/项目研发/pi-web-QT/app/api/tasks/route.ts
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: /Volumes/1T 原装/项目研发/pi-web-QT/app/api/tasks/settings/route.ts
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: /Volumes/1T 原装/项目研发/pi-web-QT/app/api/tasks/templates/route.ts
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: /Volumes/1T 原装/项目研发/pi-web-QT/app/api/terminal/[id]/events/route.ts
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: /Volumes/1T 原装/项目研发/pi-web-QT/app/api/terminal/[id]/route.ts
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: /Volumes/1T 原装/项目研发/pi-web-QT/app/api/terminal/route.ts
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: /Volumes/1T 原装/项目研发/pi-web-QT/app/api/themes/[name]/route.ts
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: /Volumes/1T 原装/项目研发/pi-web-QT/app/api/themes/route.ts
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: /Volumes/1T 原装/项目研发/pi-web-QT/app/api/tools/extension-tools/route.ts
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: /Volumes/1T 原装/项目研发/pi-web-QT/app/api/tools/settings/route.ts
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: /Volumes/1T 原装/项目研发/pi-web-QT/app/api/usage/route.ts
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: /Volumes/1T 原装/项目研发/pi-web-QT/app/api/vision-config/route.ts
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: /Volumes/1T 原装/项目研发/pi-web-QT/app/api/web-auth/route.ts
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: /Volumes/1T 原装/项目研发/pi-web-QT/app/api/worktrees/route.ts
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: /Volumes/1T 原装/项目研发/pi-web-QT/app/layout.tsx
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: /Volumes/1T 原装/项目研发/pi-web-QT/app/login/page.tsx
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
 
@@ -1,4 +1,4 @@
1
- // File: /Volumes/1T 原装/项目研发/pi-web-QT/app/page.tsx
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
- const nestedVersion = require(path.join(nestedUndici, "package.json")).version;
77
- const topVersion = require(path.join(topUndici, "package.json")).version;
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
 
@@ -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
- const res = await fetch(`http://${config.hostname}:${config.port}/api/agent/running`, {
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
- opener = spawn(process.env.ComSpec || "cmd.exe", ["/c", "start", "", url], {
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
  });
@@ -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=${MEMORY_LIMIT_MB}`, `--max-semi-space-size=${SEMI_SPACE_MB}`];
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, MEMORY_LIMIT_MB, SEMI_SPACE_MB };
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 [cmd, ...args] = process.argv.slice(2);
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 (process.platform === "win32") {
40
- // spawnSync cannot execute npm's extensionless .bin shims on Windows
41
- // (ENOENT), and .cmd shims need cmd.exe (EINVAL since the Node CVE fix).
42
- // Prefer the .cmd/.bat sibling and run it through %ComSpec%.
43
- const fs = require("fs");
44
- let target = cmd;
45
- if (!/\.(exe|cmd|bat)$/i.test(target)) {
46
- for (const ext of [".cmd", ".bat"]) {
47
- if (fs.existsSync(target + ext)) {
48
- target += ext;
49
- break;
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
- result = spawnSync(cmd, args, { stdio: "inherit", env });
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.12",
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 node_modules/.bin/next dev -H 127.0.0.1 -p 0 --turbopack",
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 node_modules/.bin/next start -H 127.0.0.1 -p 0",
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:()=>{}};