@surething/cockpit 1.0.257 → 1.0.259

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 (215) hide show
  1. package/.next-prod/BUILD_ID +1 -1
  2. package/.next-prod/app-path-routes-manifest.json +3 -3
  3. package/.next-prod/build-manifest.json +3 -3
  4. package/.next-prod/cockpit-build.json +1 -1
  5. package/.next-prod/prerender-manifest.json +3 -3
  6. package/.next-prod/react-loadable-manifest.json +1 -1
  7. package/.next-prod/server/app/_global-error/page.js.nft.json +1 -1
  8. package/.next-prod/server/app/_global-error/page_client-reference-manifest.js +1 -1
  9. package/.next-prod/server/app/_global-error.html +1 -1
  10. package/.next-prod/server/app/_global-error.rsc +1 -1
  11. package/.next-prod/server/app/_global-error.segments/_full.segment.rsc +1 -1
  12. package/.next-prod/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  13. package/.next-prod/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/.next-prod/server/app/_not-found/page.js +1 -1
  15. package/.next-prod/server/app/_not-found/page.js.nft.json +1 -1
  16. package/.next-prod/server/app/_not-found/page_client-reference-manifest.js +1 -1
  17. package/.next-prod/server/app/_not-found.html +2 -2
  18. package/.next-prod/server/app/_not-found.rsc +3 -3
  19. package/.next-prod/server/app/_not-found.segments/_full.segment.rsc +3 -3
  20. package/.next-prod/server/app/_not-found.segments/_index.segment.rsc +3 -3
  21. package/.next-prod/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  22. package/.next-prod/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  23. package/.next-prod/server/app/api/agent/test/route.js.nft.json +1 -1
  24. package/.next-prod/server/app/api/bash/route.js.nft.json +1 -1
  25. package/.next-prod/server/app/api/chat/codex/route.js.nft.json +1 -1
  26. package/.next-prod/server/app/api/chat/deepseek/route.js.nft.json +1 -1
  27. package/.next-prod/server/app/api/chat/glm/route.js.nft.json +1 -1
  28. package/.next-prod/server/app/api/chat/kimi/route.js.nft.json +1 -1
  29. package/.next-prod/server/app/api/chat/ollama/route.js.nft.json +1 -1
  30. package/.next-prod/server/app/api/chat/route.js.nft.json +1 -1
  31. package/.next-prod/server/app/api/chat/stop/route.js.nft.json +1 -1
  32. package/.next-prod/server/app/api/claude-stats/route.js.nft.json +1 -1
  33. package/.next-prod/server/app/api/commands/route.js.nft.json +1 -1
  34. package/.next-prod/server/app/api/comments/route.js.nft.json +1 -1
  35. package/.next-prod/server/app/api/db/columns/route.js.nft.json +1 -1
  36. package/.next-prod/server/app/api/db/connect/route.js.nft.json +1 -1
  37. package/.next-prod/server/app/api/db/disconnect/route.js.nft.json +1 -1
  38. package/.next-prod/server/app/api/db/export/route.js.nft.json +1 -1
  39. package/.next-prod/server/app/api/db/query/route.js.nft.json +1 -1
  40. package/.next-prod/server/app/api/db/schemas/route.js.nft.json +1 -1
  41. package/.next-prod/server/app/api/deepseek/balance/route.js.nft.json +1 -1
  42. package/.next-prod/server/app/api/deepseek/credentials/route.js.nft.json +1 -1
  43. package/.next-prod/server/app/api/deepseek/models/route.js.nft.json +1 -1
  44. package/.next-prod/server/app/api/dev/spans/route.js.nft.json +1 -1
  45. package/.next-prod/server/app/api/extension/version/route.js.nft.json +1 -1
  46. package/.next-prod/server/app/api/file/route.js.nft.json +1 -1
  47. package/.next-prod/server/app/api/files/blame/route.js.nft.json +1 -1
  48. package/.next-prod/server/app/api/files/clipboard/route.js.nft.json +1 -1
  49. package/.next-prod/server/app/api/files/copy/route.js.nft.json +1 -1
  50. package/.next-prod/server/app/api/files/delete/route.js.nft.json +1 -1
  51. package/.next-prod/server/app/api/files/expanded/route.js.nft.json +1 -1
  52. package/.next-prod/server/app/api/files/index/route.js.nft.json +1 -1
  53. package/.next-prod/server/app/api/files/init/route.js.nft.json +1 -1
  54. package/.next-prod/server/app/api/files/paste/route.js.nft.json +1 -1
  55. package/.next-prod/server/app/api/files/read/route.js.nft.json +1 -1
  56. package/.next-prod/server/app/api/files/readdir/route.js.nft.json +1 -1
  57. package/.next-prod/server/app/api/files/recent/route.js.nft.json +1 -1
  58. package/.next-prod/server/app/api/files/save/route.js.nft.json +1 -1
  59. package/.next-prod/server/app/api/files/search/route.js.nft.json +1 -1
  60. package/.next-prod/server/app/api/files/stat/route.js.nft.json +1 -1
  61. package/.next-prod/server/app/api/files/text/route.js.nft.json +1 -1
  62. package/.next-prod/server/app/api/git/branch-diff/route.js.nft.json +1 -1
  63. package/.next-prod/server/app/api/git/branches/route.js.nft.json +1 -1
  64. package/.next-prod/server/app/api/git/commit-diff/route.js.nft.json +1 -1
  65. package/.next-prod/server/app/api/git/commits/route.js.nft.json +1 -1
  66. package/.next-prod/server/app/api/git/current-branch/route.js.nft.json +1 -1
  67. package/.next-prod/server/app/api/git/diff/route.js.nft.json +1 -1
  68. package/.next-prod/server/app/api/git/discard/route.js.nft.json +1 -1
  69. package/.next-prod/server/app/api/git/stage/route.js.nft.json +1 -1
  70. package/.next-prod/server/app/api/git/status/route.js.nft.json +1 -1
  71. package/.next-prod/server/app/api/git/unstage/route.js.nft.json +1 -1
  72. package/.next-prod/server/app/api/git/worktree/route.js.nft.json +1 -1
  73. package/.next-prod/server/app/api/glm/credentials/route.js.nft.json +1 -1
  74. package/.next-prod/server/app/api/glm/models/route.js.nft.json +1 -1
  75. package/.next-prod/server/app/api/glm/usage/route.js.nft.json +1 -1
  76. package/.next-prod/server/app/api/global-state/route.js.nft.json +1 -1
  77. package/.next-prod/server/app/api/health/route.js.nft.json +1 -1
  78. package/.next-prod/server/app/api/html-apps/[id]/route.js.nft.json +1 -1
  79. package/.next-prod/server/app/api/html-apps/route.js.nft.json +1 -1
  80. package/.next-prod/server/app/api/jupyter/load/route.js.nft.json +1 -1
  81. package/.next-prod/server/app/api/jupyter/save/route.js.nft.json +1 -1
  82. package/.next-prod/server/app/api/jupyter/shutdown/route.js.nft.json +1 -1
  83. package/.next-prod/server/app/api/kimi/credentials/route.js.nft.json +1 -1
  84. package/.next-prod/server/app/api/kimi/models/route.js.nft.json +1 -1
  85. package/.next-prod/server/app/api/kimi/usage/route.js.nft.json +1 -1
  86. package/.next-prod/server/app/api/lsp/definition/route.js.nft.json +1 -1
  87. package/.next-prod/server/app/api/lsp/hover/route.js.nft.json +1 -1
  88. package/.next-prod/server/app/api/lsp/references/route.js.nft.json +1 -1
  89. package/.next-prod/server/app/api/lsp/status/route.js.nft.json +1 -1
  90. package/.next-prod/server/app/api/lsp/warmup/route.js.nft.json +1 -1
  91. package/.next-prod/server/app/api/mysql/columns/route.js.nft.json +1 -1
  92. package/.next-prod/server/app/api/mysql/connect/route.js.nft.json +1 -1
  93. package/.next-prod/server/app/api/mysql/disconnect/route.js.nft.json +1 -1
  94. package/.next-prod/server/app/api/mysql/export/route.js.nft.json +1 -1
  95. package/.next-prod/server/app/api/mysql/query/route.js.nft.json +1 -1
  96. package/.next-prod/server/app/api/mysql/schemas/route.js.nft.json +1 -1
  97. package/.next-prod/server/app/api/neo4j/connect/route.js.nft.json +1 -1
  98. package/.next-prod/server/app/api/neo4j/disconnect/route.js.nft.json +1 -1
  99. package/.next-prod/server/app/api/neo4j/query/route.js.nft.json +1 -1
  100. package/.next-prod/server/app/api/neo4j/schema/route.js.nft.json +1 -1
  101. package/.next-prod/server/app/api/note/route.js.nft.json +1 -1
  102. package/.next-prod/server/app/api/ollama/config/route.js.nft.json +1 -1
  103. package/.next-prod/server/app/api/ollama/models/route.js.nft.json +1 -1
  104. package/.next-prod/server/app/api/ollama/start/route.js.nft.json +1 -1
  105. package/.next-prod/server/app/api/open-cursor/route.js.nft.json +1 -1
  106. package/.next-prod/server/app/api/open-vscode/route.js.nft.json +1 -1
  107. package/.next-prod/server/app/api/pick-folder/route.js.nft.json +1 -1
  108. package/.next-prod/server/app/api/pinned-sessions/route.js.nft.json +1 -1
  109. package/.next-prod/server/app/api/project-settings/route.js.nft.json +1 -1
  110. package/.next-prod/server/app/api/project-state/route.js.nft.json +1 -1
  111. package/.next-prod/server/app/api/projectGraph/affected/route.js.nft.json +1 -1
  112. package/.next-prod/server/app/api/projectGraph/callees/route.js.nft.json +1 -1
  113. package/.next-prod/server/app/api/projectGraph/callers/route.js.nft.json +1 -1
  114. package/.next-prod/server/app/api/projectGraph/coedit/route.js.nft.json +1 -1
  115. package/.next-prod/server/app/api/projectGraph/context/route.js.nft.json +1 -1
  116. package/.next-prod/server/app/api/projectGraph/file/route.js.nft.json +1 -1
  117. package/.next-prod/server/app/api/projectGraph/file-functions/route.js.nft.json +1 -1
  118. package/.next-prod/server/app/api/projectGraph/impact/route.js.nft.json +1 -1
  119. package/.next-prod/server/app/api/projectGraph/related/route.js.nft.json +1 -1
  120. package/.next-prod/server/app/api/projectGraph/risk/route.js.nft.json +1 -1
  121. package/.next-prod/server/app/api/projectGraph/search/route.js.nft.json +1 -1
  122. package/.next-prod/server/app/api/projects/route.js.nft.json +1 -1
  123. package/.next-prod/server/app/api/prompts/config/route.js.nft.json +1 -1
  124. package/.next-prod/server/app/api/push/public-key/route.js.nft.json +1 -1
  125. package/.next-prod/server/app/api/push/subscribe/route.js.nft.json +1 -1
  126. package/.next-prod/server/app/api/push/unsubscribe/route.js.nft.json +1 -1
  127. package/.next-prod/server/app/api/redis/command/route.js.nft.json +1 -1
  128. package/.next-prod/server/app/api/redis/connect/route.js.nft.json +1 -1
  129. package/.next-prod/server/app/api/redis/delete/route.js.nft.json +1 -1
  130. package/.next-prod/server/app/api/redis/disconnect/route.js.nft.json +1 -1
  131. package/.next-prod/server/app/api/redis/get/route.js.nft.json +1 -1
  132. package/.next-prod/server/app/api/redis/keys/route.js.nft.json +1 -1
  133. package/.next-prod/server/app/api/redis/set/route.js.nft.json +1 -1
  134. package/.next-prod/server/app/api/review/[id]/comments/route.js.nft.json +1 -1
  135. package/.next-prod/server/app/api/review/[id]/replies/route.js.nft.json +1 -1
  136. package/.next-prod/server/app/api/review/[id]/route.js.nft.json +1 -1
  137. package/.next-prod/server/app/api/review/identify/route.js.nft.json +1 -1
  138. package/.next-prod/server/app/api/review/order/route.js.nft.json +1 -1
  139. package/.next-prod/server/app/api/review/route.js.nft.json +1 -1
  140. package/.next-prod/server/app/api/review/share-info/route.js.nft.json +1 -1
  141. package/.next-prod/server/app/api/review/users/route.js.nft.json +1 -1
  142. package/.next-prod/server/app/api/scheduled-tasks/route.js.nft.json +1 -1
  143. package/.next-prod/server/app/api/services/config/route.js.nft.json +1 -1
  144. package/.next-prod/server/app/api/services/scripts/route.js.nft.json +1 -1
  145. package/.next-prod/server/app/api/session/[sessionId]/fork/route.js +1 -1
  146. package/.next-prod/server/app/api/session/[sessionId]/fork/route.js.nft.json +1 -1
  147. package/.next-prod/server/app/api/session/[sessionId]/history/route.js.nft.json +1 -1
  148. package/.next-prod/server/app/api/session-by-path/route.js +1 -1
  149. package/.next-prod/server/app/api/session-by-path/route.js.nft.json +1 -1
  150. package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route.js.nft.json +1 -1
  151. package/.next-prod/server/app/api/sessions/projects/route.js.nft.json +1 -1
  152. package/.next-prod/server/app/api/sessions/route.js.nft.json +1 -1
  153. package/.next-prod/server/app/api/settings/route.js.nft.json +1 -1
  154. package/.next-prod/server/app/api/skills/[id]/route.js.nft.json +1 -1
  155. package/.next-prod/server/app/api/skills/content/route.js.nft.json +1 -1
  156. package/.next-prod/server/app/api/skills/route.js.nft.json +1 -1
  157. package/.next-prod/server/app/api/snapshots/diff/route.js.nft.json +1 -1
  158. package/.next-prod/server/app/api/snapshots/route.js.nft.json +1 -1
  159. package/.next-prod/server/app/api/terminal/aliases/route.js.nft.json +1 -1
  160. package/.next-prod/server/app/api/terminal/autocomplete/route.js.nft.json +1 -1
  161. package/.next-prod/server/app/api/terminal/bubble-order/route.js.nft.json +1 -1
  162. package/.next-prod/server/app/api/terminal/env/route.js.nft.json +1 -1
  163. package/.next-prod/server/app/api/terminal/history/route.js.nft.json +1 -1
  164. package/.next-prod/server/app/api/version/route.js.nft.json +1 -1
  165. package/.next-prod/server/app/apps/[...path]/route.js.nft.json +1 -1
  166. package/.next-prod/server/app/favicon.ico/route.js.nft.json +1 -1
  167. package/.next-prod/server/app/m/page.js +1 -1
  168. package/.next-prod/server/app/m/page.js.nft.json +1 -1
  169. package/.next-prod/server/app/m/page_client-reference-manifest.js +1 -1
  170. package/.next-prod/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  171. package/.next-prod/server/app/page.js +1 -1
  172. package/.next-prod/server/app/page.js.nft.json +1 -1
  173. package/.next-prod/server/app/page_client-reference-manifest.js +1 -1
  174. package/.next-prod/server/app/project/page.js +1 -1
  175. package/.next-prod/server/app/project/page.js.nft.json +1 -1
  176. package/.next-prod/server/app/project/page_client-reference-manifest.js +1 -1
  177. package/.next-prod/server/app/review/[id]/page.js +1 -1
  178. package/.next-prod/server/app/review/[id]/page.js.nft.json +1 -1
  179. package/.next-prod/server/app/review/[id]/page_client-reference-manifest.js +1 -1
  180. package/.next-prod/server/app-paths-manifest.json +3 -3
  181. package/.next-prod/server/chunks/151.js +1 -0
  182. package/.next-prod/server/chunks/3286.js +47 -29
  183. package/.next-prod/server/chunks/5750.js +13 -12
  184. package/.next-prod/server/chunks/6495.js +1 -1
  185. package/.next-prod/server/chunks/6548.js +1 -1
  186. package/.next-prod/server/chunks/7270.js +3 -3
  187. package/.next-prod/server/chunks/{8557.js → 9004.js} +5 -5
  188. package/.next-prod/server/middleware-build-manifest.js +1 -1
  189. package/.next-prod/server/middleware-react-loadable-manifest.js +1 -1
  190. package/.next-prod/server/pages/404.html +2 -2
  191. package/.next-prod/server/pages/500.html +1 -1
  192. package/.next-prod/server/server-reference-manifest.json +1 -1
  193. package/.next-prod/static/chunks/{1372-cc9afa045dc4eb5e.js → 1372-d94b8f9ed5cd2713.js} +1 -1
  194. package/.next-prod/static/chunks/{9592-a657fb9eb995b64d.js → 2653-3f8bfa49727caa72.js} +4 -4
  195. package/.next-prod/static/chunks/6784-ec12c61b77c64dc0.js +381 -0
  196. package/.next-prod/static/chunks/7482-3ffe7da02d3e7f45.js +26 -0
  197. package/.next-prod/static/chunks/9b0008ae.d0c8feea26186989.js +45 -0
  198. package/.next-prod/static/chunks/app/{layout-0bbc63707f5e01ad.js → layout-fef0d44c94fcb415.js} +1 -1
  199. package/.next-prod/static/chunks/app/{page-1cbf8dcf1693be8e.js → page-824be00a023f34d7.js} +1 -1
  200. package/.next-prod/static/chunks/app/project/{page-1cbf8dcf1693be8e.js → page-824be00a023f34d7.js} +1 -1
  201. package/.next-prod/static/chunks/{webpack-37498a2c8333d458.js → webpack-ce60587570394496.js} +1 -1
  202. package/.next-prod/static/css/a82580b2376d7cae.css +1 -0
  203. package/.next-prod/trace +14 -14
  204. package/.next-prod/trace-build +1 -1
  205. package/dist/scheduledTasks.mjs +66 -32
  206. package/dist/wsServer.mjs +62 -8
  207. package/package.json +2 -2
  208. package/public/html-lib/pdf-viewer.js +12 -12
  209. package/public/pdfjs/pdf.worker.min.mjs +4 -4
  210. package/.next-prod/static/chunks/6626-ff5f196a882eb10d.js +0 -25
  211. package/.next-prod/static/chunks/6784-d8d3cdd1f9772760.js +0 -381
  212. package/.next-prod/static/chunks/9b0008ae.295c31138a16177d.js +0 -45
  213. package/.next-prod/static/css/2334aed02a409f57.css +0 -1
  214. /package/.next-prod/static/{T5LH07mcmVVJLxAn03pYJ → F9dxCcbBY_bNPY4fxWaWe}/_buildManifest.js +0 -0
  215. /package/.next-prod/static/{T5LH07mcmVVJLxAn03pYJ → F9dxCcbBY_bNPY4fxWaWe}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- [{"name":"run-webpack","duration":15326895,"timestamp":776243892,"id":14,"parentId":1,"tags":{},"startTime":1786200074209,"traceId":"08b002ec83adbe12"},{"name":"run-typescript","duration":4998816,"timestamp":791574659,"id":1451,"parentId":1,"tags":{},"startTime":1786200089540,"traceId":"08b002ec83adbe12"},{"name":"static-check","duration":1315701,"timestamp":796612483,"id":1454,"parentId":1,"tags":{},"startTime":1786200094578,"traceId":"08b002ec83adbe12"},{"name":"static-generation","duration":5833215,"timestamp":798075749,"id":1758,"parentId":1,"tags":{},"startTime":1786200096041,"traceId":"08b002ec83adbe12"},{"name":"collect-build-traces","duration":23979814,"timestamp":797928735,"id":1755,"parentId":1,"tags":{},"startTime":1786200095894,"traceId":"08b002ec83adbe12"},{"name":"telemetry-flush","duration":88,"timestamp":821912722,"id":1767,"parentId":1,"tags":{},"startTime":1786200119878,"traceId":"08b002ec83adbe12"},{"name":"next-build","duration":45859104,"timestamp":776053830,"id":1,"tags":{"buildMode":"default","version":"16.3.0","bundler":"webpack","has-custom-webpack-config":"true","use-build-worker":"false"},"startTime":1786200074019,"traceId":"08b002ec83adbe12"}]
1
+ [{"name":"run-webpack","duration":15323183,"timestamp":201131876,"id":14,"parentId":1,"tags":{},"startTime":1786422449404,"traceId":"7cadf068a6784d3c"},{"name":"run-typescript","duration":4992664,"timestamp":216458882,"id":1452,"parentId":1,"tags":{},"startTime":1786422464731,"traceId":"7cadf068a6784d3c"},{"name":"static-check","duration":1327287,"timestamp":221492054,"id":1455,"parentId":1,"tags":{},"startTime":1786422469764,"traceId":"7cadf068a6784d3c"},{"name":"static-generation","duration":5965954,"timestamp":222991251,"id":1759,"parentId":1,"tags":{},"startTime":1786422471263,"traceId":"7cadf068a6784d3c"},{"name":"collect-build-traces","duration":23666069,"timestamp":222819965,"id":1756,"parentId":1,"tags":{},"startTime":1786422471092,"traceId":"7cadf068a6784d3c"},{"name":"telemetry-flush","duration":48,"timestamp":246489921,"id":1768,"parentId":1,"tags":{},"startTime":1786422494762,"traceId":"7cadf068a6784d3c"},{"name":"next-build","duration":45537601,"timestamp":200952379,"id":1,"tags":{"buildMode":"default","version":"16.3.0","bundler":"webpack","has-custom-webpack-config":"true","use-build-worker":"false"},"startTime":1786422449225,"traceId":"7cadf068a6784d3c"}]
@@ -535,7 +535,7 @@ description: "\u5B8C\u6574\u4EE3\u7801\u5BA1\u67E5:\u9759\u6001 + \u52A8\u6001\u
535
535
 
536
536
  subagent prompt \u6A21\u677F:\`\u8BFB\u672C skill (cr/SKILL.md),\u53EA\u5BF9 <\u4F60\u90A3\u5757(Part A \u5168\u90E8 / \u67D0\u4E2A\u52A8\u6001\u5207\u7247)> \u5E94\u7528\u5BF9\u5E94 Part,\u81EA\u884C triage,\u6309\u7EDF\u4E00\u683C\u5F0F\u8F93\u51FA findings\`\u3002
537
537
 
538
- **Synthesis(\u4E3B\u4F1A\u8BDD,\u53EA\u6574\u7406\u4E0D\u91CD\u5224)**:\u6C47\u603B\u5404 subagent \u7684 findings \u2192 \u53BB\u91CD(\u540C\u6839\u56E0\u6807"\u5171\u72AF")\u2192 \u5F71\u54CD \xD7 \u6982\u7387\u6392\u5E8F \u2192 \u4E00\u4EFD\u62A5\u544A + \u68AF\u5EA6\u56FE\u3002**\u7981\u6B62\u7528\u4E3B\u4F1A\u8BDD\u7684\u5F00\u53D1\u4E0A\u4E0B\u6587\u7ED9\u4EFB\u4F55 finding \u6D17\u767D / \u964D\u7EA7**\u2014\u2014subagent \u600E\u4E48\u5224\u5C31\u600E\u4E48\u6536\u3002\u8981\u8D28\u7591\u67D0\u6761,**\u91CD\u65B0 spawn \u4E00\u4E2A\u5E72\u51C0 subagent \u590D\u6838**,\u800C\u4E0D\u662F\u4E3B\u4F1A\u8BDD\u81EA\u5DF1\u62CD\u3002
538
+ **Synthesis(\u4E3B\u4F1A\u8BDD,\u53EA\u6574\u7406\u4E0D\u91CD\u5224)**:\u6C47\u603B\u5404 subagent \u7684 findings \u2192 \u53BB\u91CD(\u540C\u6839\u56E0\u6807"\u5171\u72AF")\u2192 \u5F71\u54CD \xD7 \u6982\u7387\u6392\u5E8F \u2192 \u4E00\u4EFD\u62A5\u544A + \u68AF\u5EA6\u56FE\u3002**\u7981\u6B62\u7528\u4E3B\u4F1A\u8BDD\u7684\u5F00\u53D1\u4E0A\u4E0B\u6587\u7ED9\u4EFB\u4F55 finding \u6D17\u767D / \u964D\u7EA7**\u2014\u2014subagent \u600E\u4E48\u5224\u5C31\u600E\u4E48\u6536\u3002\u8981\u8D28\u7591\u67D0\u6761,**\u91CD\u65B0 spawn \u4E00\u4E2A\u5E72\u51C0 subagent \u590D\u6838**,\u800C\u4E0D\u662F\u4E3B\u4F1A\u8BDD\u81EA\u5DF1\u62CD\u3002\u4E3B\u4F1A\u8BDD\u53EF\u4EE5\u628A\u7ED3\u679C\u6574\u7406\u6210\u77ED\u8868,\u4F46**\u5C55\u5F00\u8BE6\u60C5\u5FC5\u987B\u4FDD\u7559 subagent \u7684\u5173\u952E\u8BC1\u636E\u5BC6\u5EA6**:\u52A8\u6001 finding \u7684\u72B6\u6001\u56FE / \u65F6\u95F4\u7EBF / \u53D8\u66F4\u8F68\u8FF9 / \u53CD\u4F8B\u8DEF\u5F84,\u9759\u6001 finding \u7684\u4E09\u89D2\u6821\u9A8C\u8BC1\u636E,\u90FD\u8981\u642C\u5230\u5BF9\u5E94\u7F16\u53F7\u8BE6\u60C5\u91CC\u3002\u5141\u8BB8\u53BB\u91CD\u548C\u5220\u6389\u91CD\u590D\u63AA\u8F9E,\u4E0D\u5141\u8BB8\u628A subagent \u7684\u8BE6\u7EC6\u6A21\u578B\u538B\u6210\u4E00\u53E5\u6458\u8981\u3002
539
539
 
540
540
  > \u53D6\u820D:\u9ED8\u8BA4 2-subagent \u65E2\u9694\u79BB\u5F00\u53D1\u6C61\u67D3\u3001\u53C8\u6D88\u6389\u9759\u6001\u644A\u8584\u52A8\u6001;hard \u7684 per-slice fan-out \u662F\u989D\u5916\u6DF1\u5EA6(\u5B9E\u6D4B\u628A image/video \u6316\u5230 \u{1F534} + \u591A subagent \u72EC\u7ACB\u6536\u655B\u63D0\u7F6E\u4FE1\u5EA6),\u8D35\u4E14\u6162,\u7531\u7528\u6237\u663E\u5F0F\u9009\u7528(\u4E0D\u81EA\u52A8\u5347\u6863)\u3002
541
541
 
@@ -625,22 +625,31 @@ correctness \u8FD9\u4E2A"\u672A\u77E5\u70B9",\u9760 **\u610F\u56FE / \u8F93\u516
625
625
 
626
626
  ---
627
627
 
628
- ## \u4EA7\u51FA findings(\u76F4\u89C2\u4F18\u5148)
628
+ ## \u4EA7\u51FA findings(\u7B80\u8868 + \u8BE6\u60C5)
629
629
 
630
- \u4E25\u91CD\u5EA6 = **\u5F71\u54CD \xD7 \u6982\u7387**,\u76F4\u63A5\u7ED9\u4E58\u79EF\u7ED3\u8BBA,\u522B\u8BA9\u8BFB\u8005\u81EA\u5DF1\u6362\u7B97\u3002\u4E24\u8DEF findings \u5408\u5E76\u53BB\u91CD,\u7EDF\u4E00\u683C\u5F0F:
630
+ \u4E25\u91CD\u5EA6 = **\u5F71\u54CD \xD7 \u6982\u7387**,\u76F4\u63A5\u7ED9\u4E58\u79EF\u7ED3\u8BBA,\u522B\u8BA9\u8BFB\u8005\u81EA\u5DF1\u6362\u7B97\u3002\u4E24\u8DEF findings \u5408\u5E76\u53BB\u91CD\u540E,\u5148\u8F93\u51FA\u4E00\u5F20**\u77ED\u5217\u8868\u683C**\u7528\u4E8E\u5FEB\u901F\u626B\u63CF,\u518D\u6309\u7F16\u53F7\u5C55\u5F00\u8BC1\u636E\u3002\u4E0D\u8981\u628A\u957F\u8BC1\u636E\u585E\u8FDB\u8868\u683C cell,\u5426\u5219\u804A\u5929\u7A97\u53E3\u4F1A\u628A\u5217\u6324\u6210\u96BE\u8BFB\u7684\u7A84\u5217\u3002
631
+
632
+ | # | \u4E25\u91CD\u5EA6 | \u4F4D\u7F6E | \u95EE\u9898\u540E\u679C | \u5904\u7406\u65B9\u5411 |
633
+ |---|---|---|---|---|
634
+ | 1 | \u{1F534}/\u{1F7E1}/\u26AA | \`file:line\` | \u4E0D\u4FEE\u4F1A\u53D1\u751F\u4EC0\u4E48(\u4E00\u53E5\u5927\u767D\u8BDD\u540E\u679C,\u4E0D\u5E26\u672F\u8BED) | \u4E00\u53E5\u8BDD\u8BF4\u660E\u4FEE\u590D\u65B9\u5411 |
635
+
636
+ \u7136\u540E\u6309\u8868\u683C\u7F16\u53F7\u5C55\u5F00:
631
637
 
632
638
  \`\`\`
633
- \u{1F534}|\u{1F7E1}|\u26AA <\u4F4D\u7F6E(file:line)> \u2014 \u4E0D\u4FEE\u4F1A\u53D1\u751F\u4EC0\u4E48(\u4E00\u53E5\u5927\u767D\u8BDD\u540E\u679C,\u4E0D\u5E26\u672F\u8BED)
634
- \u5F71\u54CD: \u574F\u5230\u4EC0\u4E48\u7A0B\u5EA6 + \u574F\u7ED9\u8C01(\u5177\u4F53:\u54EA\u7C7B\u7528\u6237 / \u79DF\u6237 / \u8C03\u7528\u65B9,\u800C\u975E\u6CDB\u6307"\u7528\u6237")
635
- \u6982\u7387: \u591A\u5927\u6982\u7387\u53D1\u751F + \u53D6\u51B3\u4E8E\u4EC0\u4E48
636
- \u8BC1\u636E: \u9759\u6001 \u2192 \u4E09\u89D2\u6821\u9A8C\u91CC\u54EA\u4E2A\u53C2\u7167\u5BF9\u4E0D\u4E0A(\u610F\u56FE / \u8F93\u5165\u57DF / \u5468\u906D);\u52A8\u6001 \u2192 \u6A21\u578B\u8BC1\u636E(\u6307\u56DE\u72B6\u6001\u56FE / \u65F6\u95F4\u7EBF\u54EA\u4E00\u5904)
637
- \u6B63\u89E3: \u5E94\u8BE5\u662F\u4EC0\u4E48 / \u88AB\u7834\u574F\u7684\u4E0D\u53D8\u91CF(\u672F\u8BED\u653E\u8FD9\u91CC)
639
+ ### #1 <\u4E00\u53E5\u8BDD\u540E\u679C>
640
+ \u5F71\u54CD: \u574F\u5230\u4EC0\u4E48\u7A0B\u5EA6 + \u574F\u7ED9\u8C01(\u5177\u4F53:\u54EA\u7C7B\u7528\u6237 / \u79DF\u6237 / \u8C03\u7528\u65B9,\u800C\u975E\u6CDB\u6307"\u7528\u6237")
641
+ \u6982\u7387: \u591A\u5927\u6982\u7387\u53D1\u751F + \u53D6\u51B3\u4E8E\u4EC0\u4E48;\u82E5\u5F85\u9A8C\u8BC1,\u5199\u660E\u5982\u4F55\u5347\u964D\u6863
642
+ \u8BC1\u636E: \u9759\u6001 \u2192 \u4E09\u89D2\u6821\u9A8C\u91CC\u54EA\u4E2A\u53C2\u7167\u5BF9\u4E0D\u4E0A(\u610F\u56FE / \u8F93\u5165\u57DF / \u5468\u906D);\u52A8\u6001 \u2192 \u4FDD\u7559 subagent \u7ED9\u51FA\u7684\u72B6\u6001\u56FE / \u65F6\u95F4\u7EBF / \u53D8\u66F4\u8F68\u8FF9 / \u53CD\u4F8B\u8DEF\u5F84,\u4E0D\u8981\u53EA\u6458\u8981\u6210\u4E00\u53E5
643
+ \u6B63\u89E3: \u5E94\u8BE5\u662F\u4EC0\u4E48 / \u88AB\u7834\u574F\u7684\u4E0D\u53D8\u91CF(\u672F\u8BED\u653E\u8FD9\u91CC)
638
644
  \`\`\`
639
645
 
640
- - \u{1F534} \u9AD8\u6982\u7387 \xD7 \u5927\u5F71\u54CD(\u5361\u53D1\u5E03) | \u{1F7E1} \u8BE5\u4FEE\u4F46\u4E0D\u6D41\u8840 | \u26AA \u987A\u624B\u3002\u964D\u5E8F\u8F93\u51FA\u3002
641
- - \u4E00\u53E5\u8BDD\u7ED3\u8BBA\u8BF4**\u540E\u679C**,\u4E0D\u8BF4\u6280\u672F\u539F\u56E0(\u539F\u56E0\u653E \`\u6B63\u89E3\`)\u3002
642
- - \u6982\u7387\u53D6\u51B3\u4E8E\u5F85\u9A8C\u8BC1\u56E0\u5B50\u5C31\u663E\u5F0F\u5199,\u5E76\u5199\u660E\u5982\u4F55\u5347\u964D\u6863;\u522B\u628A"\u5F85\u9A8C\u8BC1"\u4F2A\u88C5\u6210"\u5DF2\u786E\u8BA4"\u3002
643
- - \u591A\u6761\u540C\u6839\u56E0 \u2192 \u6807 **"\u5171\u72AF"** \u5408\u5E76\u6210\u4E00\u6761,\u522B\u540C\u4E00\u95EE\u9898\u62A5\u4E24\u904D(\u5C24\u5176\u9759\u6001/\u52A8\u6001\u5BF9\u540C\u4E00\u884C\u5404\u770B\u4E00\u9762\u65F6)\u3002
646
+ - \u{1F534} \u9AD8\u6982\u7387 \xD7 \u5927\u5F71\u54CD(\u5361\u53D1\u5E03) | \u{1F7E1} \u8BE5\u4FEE\u4F46\u4E0D\u6D41\u8840 | \u26AA \u987A\u624B\u3002\u77ED\u5217\u8868\u683C\u6309\u4E25\u91CD\u5EA6\u964D\u5E8F\u8F93\u51FA\u3002
647
+ - \`\u95EE\u9898\u540E\u679C\` \u53EA\u5199**\u540E\u679C**,\u4E0D\u5199\u6280\u672F\u539F\u56E0(\u539F\u56E0\u653E\u5C55\u5F00\u8BE6\u60C5\u7684 \`\u8BC1\u636E\` / \`\u6B63\u89E3\`)\u3002
648
+ - \`\u4F4D\u7F6E\` \u7528\u53EF\u5B9A\u4F4D\u7684 \`file:line\`;\u5982\u679C\u662F\u5408\u5E76\u540E\u7684\u5171\u72AF finding,\u8868\u683C\u7528\u6700\u6838\u5FC3\u4F4D\u7F6E,\u5728\u5C55\u5F00\u8BE6\u60C5\u7684 \`\u8BC1\u636E\` \u4E2D\u8865\u5145\u5176\u5B83\u4F4D\u7F6E\u3002
649
+ - \`\u5904\u7406\u65B9\u5411\` \u5728\u77ED\u8868\u91CC\u53EA\u5199\u4E00\u53E5,\u5B8C\u6574 \`\u6B63\u89E3\` \u653E\u5C55\u5F00\u8BE6\u60C5\u3002
650
+ - \u5C55\u5F00\u8BE6\u60C5\u662F\u4FE1\u606F\u5B8C\u6574\u9762:\u5982\u679C subagent \u5DF2\u7ED9\u51FA\u52A8\u6001\u6A21\u578B\u3001\u65F6\u95F4\u7EBF\u3001\u8DEF\u5F84\u7F16\u53F7\u6216\u5173\u952E\u4EE3\u7801\u4F4D\u7F6E,\u6700\u7EC8\u62A5\u544A\u5FC5\u987B\u4FDD\u7559\u8FD9\u4E9B\u7EC6\u8282;\u77ED\u8868\u53EF\u4EE5\u7B80,\u8BE6\u60C5\u4E0D\u80FD\u628A\u8BC1\u636E\u538B\u6CA1\u3002
651
+ - \u591A\u6761\u540C\u6839\u56E0 \u2192 \u5728 \`\u95EE\u9898\u540E\u679C\` \u6216\u5C55\u5F00\u8BE6\u60C5\u7684 \`\u8BC1\u636E\` \u6807 **"\u5171\u72AF"** \u5E76\u5408\u5E76\u6210\u4E00\u6761,\u522B\u540C\u4E00\u95EE\u9898\u62A5\u4E24\u904D(\u5C24\u5176\u9759\u6001/\u52A8\u6001\u5BF9\u540C\u4E00\u884C\u5404\u770B\u4E00\u9762\u65F6)\u3002
652
+ - \u8868\u683C\u540E\u53EA\u5C55\u5F00\u6BCF\u6761 finding \u4E00\u6B21;\u4E0D\u8981\u518D\u91CD\u590D\u4E00\u5F20 7 \u5217\u957F\u8868\u3002
644
653
  - \u6536\u5C3E\u7ED9\u4E00\u5F20 **\u5F71\u54CD \xD7 \u6982\u7387** \u68AF\u5EA6\u56FE:
645
654
 
646
655
  \`\`\`
@@ -681,7 +690,7 @@ Three tiers by scale (**all enter at least one clean subagent**). **You pick bet
681
690
 
682
691
  Subagent prompt template: \`Read this skill (cr/SKILL.md); apply only the matching Part to <your chunk (all of Part A / one dynamic slice)>, triage it yourself, and output findings in the unified format\`.
683
692
 
684
- **Synthesis (main session, organize only \u2014 never re-judge)**: gather each subagent's findings \u2192 dedup (mark same-root-cause as "accomplices") \u2192 sort by impact \xD7 probability \u2192 one report + gradient chart. **It is forbidden to use the main session's dev context to whitewash / downgrade any finding** \u2014 take what the subagent judged as-is. To dispute one, **spawn a fresh clean subagent to re-check**, not the main session deciding on its own.
693
+ **Synthesis (main session, organize only \u2014 never re-judge)**: gather each subagent's findings \u2192 dedup (mark same-root-cause as "accomplices") \u2192 sort by impact \xD7 probability \u2192 one report + gradient chart. **It is forbidden to use the main session's dev context to whitewash / downgrade any finding** \u2014 take what the subagent judged as-is. To dispute one, **spawn a fresh clean subagent to re-check**, not the main session deciding on its own. The main session may organize the result into a short summary table, but the **expanded details must preserve the subagent's key evidence density**: for dynamic findings, carry over the state diagram / timeline / change trajectory / counterexample path; for static findings, carry over the triangulation evidence. Deduplication and wording cleanup are allowed; compressing a detailed subagent model into a one-line summary is not.
685
694
 
686
695
  > Trade-off: the default 2-subagent both isolates dev pollution and removes static-dilutes-dynamic; hard's per-slice fan-out is extra depth (in practice it dug image/video up to \u{1F534}, and multiple independently-converging subagents raised confidence), expensive and slow, selected explicitly by the user (never auto-escalated).
687
696
 
@@ -771,22 +780,31 @@ These two diagrams are the evidence \u2014 many bugs (a 6-second gap, a key crea
771
780
 
772
781
  ---
773
782
 
774
- ## Produce findings (intuitive first)
783
+ ## Produce findings (summary table + details)
775
784
 
776
- Severity = **impact \xD7 probability**; give the product conclusion directly, don't make the reader do the math. Merge and dedup findings from both tracks, unified format:
785
+ Severity = **impact \xD7 probability**; give the product conclusion directly, don't make the reader do the math. Merge and dedup findings from both tracks. First output a **short summary table** for scanning, then expand each finding by number. Do not put long evidence into table cells; chat windows squeeze wide Markdown tables into unreadable narrow columns.
786
+
787
+ | # | Severity | Location | Consequence | Direction |
788
+ |---|---|---|---|---|
789
+ | 1 | \u{1F534}/\u{1F7E1}/\u26AA | \`file:line\` | What happens if unfixed (one plain-language consequence, no jargon) | One-sentence repair direction |
790
+
791
+ Then expand by table number:
777
792
 
778
793
  \`\`\`
779
- \u{1F534}|\u{1F7E1}|\u26AA <location (file:line)> \u2014 what happens if unfixed (one plain-language consequence, no jargon)
780
- Impact: how bad + to whom (specific: which users / tenants / callers, not a vague "users")
781
- Probability: how likely + what it depends on
782
- Evidence: static \u2192 which reference fails in triangulation (intent / input domain / surroundings); dynamic \u2192 model evidence (point back to which spot on the state diagram / timeline)
783
- Fix: what it should be / the broken invariant (jargon goes here)
794
+ ### #1 <one-line consequence>
795
+ Impact: how bad + to whom (specific: which users / tenants / callers, not a vague "users")
796
+ Probability: how likely + what it depends on; if uncertain, say how to raise/lower the tier
797
+ Evidence: static \u2192 which triangulation reference fails (intent / input domain / surroundings); dynamic \u2192 preserve the subagent's state diagram / timeline / change trajectory / counterexample path, not a one-line summary
798
+ Fix: what it should be / the broken invariant (jargon goes here)
784
799
  \`\`\`
785
800
 
786
- - \u{1F534} high probability \xD7 big impact (blocks release) | \u{1F7E1} should fix but not bleeding | \u26AA nice-to-have. Output in descending order.
787
- - The one-line conclusion states the **consequence**, not the technical cause (cause goes in \`Fix\`).
788
- - If probability depends on a to-be-verified factor, say so explicitly and write how to raise/lower the tier; don't disguise "to be verified" as "confirmed".
789
- - Multiple same-root-cause \u2192 mark as **"accomplices"** and merge into one; don't report the same problem twice (especially when static/dynamic each see one side of the same line).
801
+ - \u{1F534} high probability \xD7 big impact (blocks release) | \u{1F7E1} should fix but not bleeding | \u26AA nice-to-have. Sort summary table rows in descending severity.
802
+ - \`Consequence\` states the **outcome**, not the technical cause (cause goes in the expanded \`Evidence\` / \`Fix\`).
803
+ - \`Location\` must be a precise \`file:line\`; for a merged accomplice finding, use the core location in the table and mention other locations in the expanded \`Evidence\`.
804
+ - Keep \`Direction\` in the summary table to one sentence; put the complete \`Fix\` in the expanded detail.
805
+ - Expanded details are the complete information surface: if a subagent provided a dynamic model, timeline, path labels, or key code locations, the final report must carry those details forward; the summary table may be short, the detail must not erase evidence.
806
+ - Multiple same-root-cause \u2192 mark as **"accomplices"** in \`Consequence\` or expanded \`Evidence\` and merge into one finding; don't report the same problem twice (especially when static/dynamic each see one side of the same line).
807
+ - Expand each finding only once after the table; don't also emit a 7-column long table.
790
808
  - Close with an **impact \xD7 probability** gradient chart:
791
809
 
792
810
  \`\`\`
@@ -1170,13 +1188,13 @@ Finally emit [Overall recap: end-to-end interaction verification + total deliver
1170
1188
  // packages/feature/agent/src/server/lib/htmlPrompt.ts
1171
1189
  var HTML_PROMPT_ZH = `---
1172
1190
  name: html
1173
- description: "\u751F\u6210\u53EF\u4EA4\u4E92\u7684\u5C0F\u5E94\u7528\uFF1A\u5185\u7F6E cockpit bash SDK\uFF0C\u6267\u884C\u547D\u4EE4\u53D6/\u6539\u6570\u636E"
1174
- argument-hint: "\u63CF\u8FF0\u4F60\u60F3\u8981\u7684\u5C0F\u5E94\u7528"
1191
+ description: "\u751F\u6210\u53EF\u4EA4\u4E92\u7684 HTML \u5E94\u7528\uFF1A\u5185\u7F6E cockpit bash SDK\uFF0C\u6267\u884C\u547D\u4EE4\u53D6/\u6539\u6570\u636E"
1192
+ argument-hint: "\u63CF\u8FF0\u4F60\u60F3\u8981\u7684 HTML \u5E94\u7528"
1175
1193
  ---
1176
1194
 
1177
- # \u751F\u6210 Cockpit \u5C0F\u5E94\u7528
1195
+ # \u751F\u6210 Cockpit HTML \u5E94\u7528
1178
1196
 
1179
- \u4E00\u4E2A\u80FD\u53D6/\u6539\u6570\u636E\u7684\u5C0F\u5E94\u7528\uFF1A\u9884\u89C8\u65F6\u6CE8\u5165\u4E86\u5168\u5C40 \`window.cockpit\` SDK \u2014\u2014 \u672C\u8D28\u5C31\u662F Bash
1197
+ \u4E00\u4E2A\u80FD\u53D6/\u6539\u6570\u636E\u7684 HTML \u5E94\u7528\uFF1A\u9884\u89C8\u65F6\u6CE8\u5165\u4E86\u5168\u5C40 \`window.cockpit\` SDK \u2014\u2014 \u672C\u8D28\u5C31\u662F Bash
1180
1198
  \u5DE5\u5177\u66B4\u9732\u7ED9\u9875\u9762\uFF0C\u9875\u9762\u6309\u94AE\u80FD \`curl\`\u3001\u8BFB\u5199\u6587\u4EF6\u3001\u8DD1\u811A\u672C\u3002
1181
1199
 
1182
1200
  **\u9ED8\u8BA4\u7528 React \u5199**\uFF08\u4E0B\u9762\u7684\u672C\u5730\u96F6\u6784\u5EFA\u6808\uFF0Cproductized\u3001AI \u6700\u719F\uFF0C\u9002\u5408\u6709\u72B6\u6001 / \u591A\u89C6\u56FE /
@@ -1187,7 +1205,7 @@ argument-hint: "\u63CF\u8FF0\u4F60\u60F3\u8981\u7684\u5C0F\u5E94\u7528"
1187
1205
 
1188
1206
  **\u522B\u4E00\u4E0A\u6765\u5C31\u5199\u6587\u4EF6**\uFF0C\u5206\u4E09\u6B65\uFF1A
1189
1207
 
1190
- 1. **\u5BF9\u9F50\u9700\u6C42** \u2014\u2014 \u5148\u590D\u8FF0\u4F60\u5BF9\u8FD9\u4E2A\u5C0F\u5E94\u7528\u7684\u7406\u89E3\uFF08\u505A\u4EC0\u4E48\u3001\u7528 React \u8FD8\u662F\u5355\u6587\u4EF6\u3001\u6570\u636E\u4ECE\u54EA\u6765\u3001
1208
+ 1. **\u5BF9\u9F50\u9700\u6C42** \u2014\u2014 \u5148\u590D\u8FF0\u4F60\u5BF9\u8FD9\u4E2A HTML \u5E94\u7528\u7684\u7406\u89E3\uFF08\u505A\u4EC0\u4E48\u3001\u7528 React \u8FD8\u662F\u5355\u6587\u4EF6\u3001\u6570\u636E\u4ECE\u54EA\u6765\u3001
1191
1209
  \u5173\u952E\u529F\u80FD\u4E0E\u4EA4\u4E92\uFF09\u3002\u4EC5\u5F53\u9700\u6C42\u6709\u6B67\u4E49\u6216\u5B58\u5728\u591A\u79CD\u5408\u7406\u89E3\u8BFB\u65F6\u624D\u56DE\u95EE\uFF1B\u5DF2\u7ECF\u6E05\u695A\u5C31\u76F4\u63A5\u7ED9\u4E00\u6BB5\u7B80\u77ED
1192
1210
  \u7684\u7406\u89E3\u6458\u8981\uFF0C\u4E0D\u5FC5\u9010\u6761\u8FFD\u95EE\u3002
1193
1211
  2. **\u544A\u77E5\u5B58\u653E\u76EE\u5F55** \u2014\u2014 \u6309\u4E0B\u9762\u300C\u5B58\u653E\u4F4D\u7F6E\u300D\u89C4\u5219\u5B9A\u51FA \`<\u76EE\u5F55>/<name>/\`\uFF0C\u660E\u786E\u544A\u8BC9\u7528\u6237\u51C6\u5907\u5B58\u54EA\u3001
@@ -18023,6 +18041,7 @@ var en_default2 = {
18023
18041
  cancel: "Cancel",
18024
18042
  delete: "Delete",
18025
18043
  close: "Close",
18044
+ minimize: "Minimize",
18026
18045
  copy: "Copy",
18027
18046
  edit: "Edit",
18028
18047
  file: "File",
@@ -18085,6 +18104,13 @@ var en_default2 = {
18085
18104
  added: "Added to HTML panel",
18086
18105
  alreadyAdded: "Already added",
18087
18106
  addFailed: "Failed to add",
18107
+ add: "Add",
18108
+ adding: "Adding...",
18109
+ addHtmlApp: "Add HTML app",
18110
+ searchPlaceholder: "Search HTML apps...",
18111
+ pathLabel: "Absolute path to the .html file",
18112
+ invalid: "Invalid",
18113
+ noDescription: "No description",
18088
18114
  emptyNoApps: "No HTML apps yet.",
18089
18115
  emptyCreatePrefix: "Use",
18090
18116
  emptyCreateSuffix: "in chat to create a new app.",
@@ -18562,7 +18588,7 @@ var en_default2 = {
18562
18588
  singleColumn: "Single column",
18563
18589
  dualColumn: "Dual column",
18564
18590
  envVars: "Environment Variables",
18565
- launchZsh: "Launch zsh terminal",
18591
+ launchShell: "Launch interactive shell",
18566
18592
  htmlApps: "HTML apps",
18567
18593
  inputPlaceholder: "Enter command or URL and press Enter... (\u2191\u2193 history, Tab complete)",
18568
18594
  scopeProject: "Project",
@@ -19218,6 +19244,7 @@ var zh_default = {
19218
19244
  cancel: "\u53D6\u6D88",
19219
19245
  delete: "\u5220\u9664",
19220
19246
  close: "\u5173\u95ED",
19247
+ minimize: "\u6700\u5C0F\u5316",
19221
19248
  copy: "\u590D\u5236",
19222
19249
  edit: "\u7F16\u8F91",
19223
19250
  file: "\u6587\u4EF6",
@@ -19275,11 +19302,18 @@ var zh_default = {
19275
19302
  current: "\u5F53\u524D"
19276
19303
  },
19277
19304
  htmlApps: {
19278
- title: "HTML \u5C0F\u5E94\u7528",
19305
+ title: "HTML \u5E94\u7528",
19279
19306
  addTooltip: "\u6DFB\u52A0\u5230 HTML \u9762\u677F",
19280
19307
  added: "\u5DF2\u6DFB\u52A0\u5230 HTML \u9762\u677F",
19281
19308
  alreadyAdded: "\u5DF2\u6DFB\u52A0\u8FC7",
19282
19309
  addFailed: "\u6DFB\u52A0\u5931\u8D25",
19310
+ add: "\u6DFB\u52A0",
19311
+ adding: "\u6DFB\u52A0\u4E2D...",
19312
+ addHtmlApp: "\u6DFB\u52A0 HTML \u5E94\u7528",
19313
+ searchPlaceholder: "\u641C\u7D22 HTML \u5E94\u7528...",
19314
+ pathLabel: ".html \u6587\u4EF6\u7684\u7EDD\u5BF9\u8DEF\u5F84",
19315
+ invalid: "\u65E0\u6548",
19316
+ noDescription: "\u65E0\u63CF\u8FF0",
19283
19317
  emptyNoApps: "\u8FD8\u6CA1\u6709 HTML \u5E94\u7528\u3002",
19284
19318
  emptyCreatePrefix: "\u5728\u804A\u5929\u91CC\u4F7F\u7528",
19285
19319
  emptyCreateSuffix: "\u521B\u5EFA\u65B0\u5E94\u7528\u3002",
@@ -19757,7 +19791,7 @@ var zh_default = {
19757
19791
  singleColumn: "\u5355\u5217\u5E03\u5C40",
19758
19792
  dualColumn: "\u53CC\u5217\u5E03\u5C40",
19759
19793
  envVars: "\u73AF\u5883\u53D8\u91CF",
19760
- launchZsh: "\u542F\u52A8 zsh \u4EA4\u4E92\u7EC8\u7AEF",
19794
+ launchShell: "\u542F\u52A8\u4EA4\u4E92\u7EC8\u7AEF",
19761
19795
  htmlApps: "HTML \u5E94\u7528",
19762
19796
  inputPlaceholder: "\u8F93\u5165\u547D\u4EE4\u6216\u7F51\u5740\u5E76\u6309 Enter... (\u2191\u2193 \u5386\u53F2, Tab \u8865\u5168)",
19763
19797
  scopeProject: "\u9879\u76EE",
package/dist/wsServer.mjs CHANGED
@@ -844,9 +844,62 @@ var runJupyterHandler = (ws, bubbleId, cwd) => {
844
844
  };
845
845
 
846
846
  // src/lib/effect/terminalHandler.ts
847
- import { spawn, execSync } from "child_process";
847
+ import { spawn, execFileSync, execSync } from "child_process";
848
848
  import * as nodePty from "node-pty";
849
849
  var HEARTBEAT5 = Schedule_exports.spaced("30 seconds");
850
+ var OPEN_PREFERRED_SHELL_COMMAND = "__cockpit_open_preferred_shell__";
851
+ function commandPath(command) {
852
+ try {
853
+ const found = execSync(`command -v ${command}`, {
854
+ encoding: "utf-8",
855
+ timeout: 3e3
856
+ }).trim().split(/\r?\n/)[0];
857
+ return found || null;
858
+ } catch {
859
+ return null;
860
+ }
861
+ }
862
+ function loginShellArgs(shell) {
863
+ if (shell === "bash") return ["--login"];
864
+ return ["-l"];
865
+ }
866
+ function resolvePreferredPtyShell(cwd) {
867
+ if (isWindows) {
868
+ try {
869
+ const wslShell = execFileSync(
870
+ "wsl.exe",
871
+ [
872
+ "sh",
873
+ "-lc",
874
+ "command -v zsh >/dev/null 2>&1 && printf zsh || { command -v bash >/dev/null 2>&1 && printf bash; }"
875
+ ],
876
+ { encoding: "utf-8", timeout: 3e3 }
877
+ ).trim();
878
+ if (wslShell === "zsh" || wslShell === "bash") {
879
+ return {
880
+ file: "wsl.exe",
881
+ args: ["--cd", cwd, "--exec", wslShell, ...loginShellArgs(wslShell)],
882
+ cwd: process.cwd(),
883
+ name: wslShell
884
+ };
885
+ }
886
+ } catch {
887
+ }
888
+ } else {
889
+ for (const shell of ["zsh", "bash", "sh"]) {
890
+ const file = commandPath(shell);
891
+ if (file) return { file, args: loginShellArgs(shell), cwd, name: shell };
892
+ }
893
+ }
894
+ const fallback = getDefaultShell();
895
+ const fallbackName = fallback.split(/[\\/]/).pop() || fallback;
896
+ return {
897
+ file: fallback,
898
+ args: isWindows ? [] : loginShellArgs(fallbackName),
899
+ cwd,
900
+ name: fallbackName
901
+ };
902
+ }
850
903
  function getDescendantPids(pid) {
851
904
  const descendants = [];
852
905
  function collect(parentPid) {
@@ -1015,21 +1068,22 @@ var dispatchMessage = (msg, projectCwd, registry, send) => Effect_exports.sync((
1015
1068
  for (const [k, v] of Object.entries(childEnv)) {
1016
1069
  if (v !== void 0) ptyEnv[k] = v;
1017
1070
  }
1071
+ const ptyTarget = command === OPEN_PREFERRED_SHELL_COMMAND ? resolvePreferredPtyShell(cwd) : { file: userShell, args: ["--login", "-c", command], cwd, name: command };
1018
1072
  const ptyProcess = nodePty.spawn(
1019
- userShell,
1020
- ["--login", "-c", command],
1073
+ ptyTarget.file,
1074
+ ptyTarget.args,
1021
1075
  {
1022
1076
  name: "xterm-256color",
1023
1077
  cols: cols || 120,
1024
1078
  rows: rows || 30,
1025
- cwd,
1079
+ cwd: ptyTarget.cwd,
1026
1080
  env: ptyEnv
1027
1081
  }
1028
1082
  );
1029
1083
  const dummyChild = spawn("true", [], { stdio: "ignore" });
1030
1084
  registerCommand({
1031
1085
  commandId,
1032
- command,
1086
+ command: ptyTarget.name,
1033
1087
  cwd,
1034
1088
  projectCwd,
1035
1089
  tabId,
@@ -1040,7 +1094,7 @@ var dispatchMessage = (msg, projectCwd, registry, send) => Effect_exports.sync((
1040
1094
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
1041
1095
  sourceId
1042
1096
  });
1043
- Effect_exports.runFork(send({ type: "pid", commandId, pid: ptyProcess.pid }));
1097
+ Effect_exports.runFork(send({ type: "pid", commandId, pid: ptyProcess.pid, command: ptyTarget.name }));
1044
1098
  Effect_exports.runFork(
1045
1099
  attachPtyListeners(registry, send, commandId, ptyProcess)
1046
1100
  );
@@ -1063,7 +1117,7 @@ var dispatchMessage = (msg, projectCwd, registry, send) => Effect_exports.sync((
1063
1117
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
1064
1118
  sourceId
1065
1119
  });
1066
- Effect_exports.runFork(send({ type: "pid", commandId, pid: child.pid }));
1120
+ Effect_exports.runFork(send({ type: "pid", commandId, pid: child.pid, command }));
1067
1121
  Effect_exports.runFork(
1068
1122
  attachPipeListeners(registry, send, commandId, child)
1069
1123
  );
@@ -1096,7 +1150,7 @@ var dispatchMessage = (msg, projectCwd, registry, send) => Effect_exports.sync((
1096
1150
  );
1097
1151
  return;
1098
1152
  }
1099
- Effect_exports.runFork(send({ type: "pid", commandId, pid: cmd.pid }));
1153
+ Effect_exports.runFork(send({ type: "pid", commandId, pid: cmd.pid, command: cmd.command }));
1100
1154
  if (cmd.usePty && cmd.ptyRingBuffer) {
1101
1155
  const snap = cmd.ptyRingBuffer.snapshot();
1102
1156
  if (snap) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@surething/cockpit",
3
- "version": "1.0.257",
3
+ "version": "1.0.259",
4
4
  "description": "The open-source Claude Code GUI — an IDE-like workbench for parallel AI coding. Drive Claude (default), Codex, DeepSeek, Kimi, or local Ollama in tabs. Terminal, browser & DB bubbles, code review. Self-host on a shared dev box — a seat for every teammate. Local-first, MIT.",
5
5
  "author": "Robert",
6
6
  "license": "MIT",
@@ -138,7 +138,7 @@
138
138
  "neo4j-driver": "^6.0.1",
139
139
  "next": "16.3.0",
140
140
  "node-pty": "^1.1.0",
141
- "pdfjs-dist": "^6.1.200",
141
+ "pdfjs-dist": "6.2.108",
142
142
  "pg": "^8.20.0",
143
143
  "react": "19.2.3",
144
144
  "react-dom": "19.2.3",