@surething/cockpit 1.0.219 → 1.0.221

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 (196) hide show
  1. package/.next-prod/BUILD_ID +1 -1
  2. package/.next-prod/app-path-routes-manifest.json +2 -2
  3. package/.next-prod/build-manifest.json +2 -2
  4. package/.next-prod/prerender-manifest.json +3 -3
  5. package/.next-prod/server/app/_global-error/page.js.nft.json +1 -1
  6. package/.next-prod/server/app/_global-error/page_client-reference-manifest.js +1 -1
  7. package/.next-prod/server/app/_global-error.html +1 -1
  8. package/.next-prod/server/app/_global-error.rsc +1 -1
  9. package/.next-prod/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/.next-prod/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  11. package/.next-prod/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  12. package/.next-prod/server/app/_global-error.segments/_head.segment.rsc +1 -1
  13. package/.next-prod/server/app/_global-error.segments/_index.segment.rsc +1 -1
  14. package/.next-prod/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  15. package/.next-prod/server/app/_not-found/page.js +1 -1
  16. package/.next-prod/server/app/_not-found/page.js.nft.json +1 -1
  17. package/.next-prod/server/app/_not-found/page_client-reference-manifest.js +1 -1
  18. package/.next-prod/server/app/_not-found.html +1 -1
  19. package/.next-prod/server/app/_not-found.rsc +2 -2
  20. package/.next-prod/server/app/_not-found.segments/_full.segment.rsc +2 -2
  21. package/.next-prod/server/app/_not-found.segments/_head.segment.rsc +1 -1
  22. package/.next-prod/server/app/_not-found.segments/_index.segment.rsc +2 -2
  23. package/.next-prod/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  24. package/.next-prod/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  25. package/.next-prod/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  26. package/.next-prod/server/app/api/agent/test/route.js.nft.json +1 -1
  27. package/.next-prod/server/app/api/bash/route.js.nft.json +1 -1
  28. package/.next-prod/server/app/api/chat/codex/route.js +2 -2
  29. package/.next-prod/server/app/api/chat/codex/route.js.nft.json +1 -1
  30. package/.next-prod/server/app/api/chat/deepseek/route.js +2 -2
  31. package/.next-prod/server/app/api/chat/deepseek/route.js.nft.json +1 -1
  32. package/.next-prod/server/app/api/chat/kimi/route.js +2 -2
  33. package/.next-prod/server/app/api/chat/kimi/route.js.nft.json +1 -1
  34. package/.next-prod/server/app/api/chat/ollama/route.js +2 -2
  35. package/.next-prod/server/app/api/chat/ollama/route.js.nft.json +1 -1
  36. package/.next-prod/server/app/api/chat/pty-input/route.js.nft.json +1 -1
  37. package/.next-prod/server/app/api/chat/route.js +4 -2
  38. package/.next-prod/server/app/api/chat/route.js.nft.json +1 -1
  39. package/.next-prod/server/app/api/claude-stats/route.js.nft.json +1 -1
  40. package/.next-prod/server/app/api/commands/route.js +1 -1
  41. package/.next-prod/server/app/api/commands/route.js.nft.json +1 -1
  42. package/.next-prod/server/app/api/comments/route.js.nft.json +1 -1
  43. package/.next-prod/server/app/api/db/columns/route.js.nft.json +1 -1
  44. package/.next-prod/server/app/api/db/connect/route.js.nft.json +1 -1
  45. package/.next-prod/server/app/api/db/disconnect/route.js.nft.json +1 -1
  46. package/.next-prod/server/app/api/db/export/route.js.nft.json +1 -1
  47. package/.next-prod/server/app/api/db/query/route.js.nft.json +1 -1
  48. package/.next-prod/server/app/api/db/schemas/route.js.nft.json +1 -1
  49. package/.next-prod/server/app/api/dev/spans/route.js.nft.json +1 -1
  50. package/.next-prod/server/app/api/extension/version/route.js.nft.json +1 -1
  51. package/.next-prod/server/app/api/file/route.js.nft.json +1 -1
  52. package/.next-prod/server/app/api/files/blame/route.js.nft.json +1 -1
  53. package/.next-prod/server/app/api/files/clipboard/route.js.nft.json +1 -1
  54. package/.next-prod/server/app/api/files/copy/route.js.nft.json +1 -1
  55. package/.next-prod/server/app/api/files/delete/route.js.nft.json +1 -1
  56. package/.next-prod/server/app/api/files/expanded/route.js.nft.json +1 -1
  57. package/.next-prod/server/app/api/files/index/route.js.nft.json +1 -1
  58. package/.next-prod/server/app/api/files/init/route.js.nft.json +1 -1
  59. package/.next-prod/server/app/api/files/paste/route.js.nft.json +1 -1
  60. package/.next-prod/server/app/api/files/read/route.js.nft.json +1 -1
  61. package/.next-prod/server/app/api/files/readdir/route.js.nft.json +1 -1
  62. package/.next-prod/server/app/api/files/recent/route.js.nft.json +1 -1
  63. package/.next-prod/server/app/api/files/save/route.js.nft.json +1 -1
  64. package/.next-prod/server/app/api/files/search/route.js.nft.json +1 -1
  65. package/.next-prod/server/app/api/files/stat/route.js.nft.json +1 -1
  66. package/.next-prod/server/app/api/files/text/route.js.nft.json +1 -1
  67. package/.next-prod/server/app/api/git/branch-diff/route.js.nft.json +1 -1
  68. package/.next-prod/server/app/api/git/branches/route.js.nft.json +1 -1
  69. package/.next-prod/server/app/api/git/commit-diff/route.js.nft.json +1 -1
  70. package/.next-prod/server/app/api/git/commits/route.js.nft.json +1 -1
  71. package/.next-prod/server/app/api/git/diff/route.js.nft.json +1 -1
  72. package/.next-prod/server/app/api/git/discard/route.js.nft.json +1 -1
  73. package/.next-prod/server/app/api/git/stage/route.js.nft.json +1 -1
  74. package/.next-prod/server/app/api/git/status/route.js.nft.json +1 -1
  75. package/.next-prod/server/app/api/git/unstage/route.js.nft.json +1 -1
  76. package/.next-prod/server/app/api/git/worktree/route.js.nft.json +1 -1
  77. package/.next-prod/server/app/api/global-state/route.js.nft.json +1 -1
  78. package/.next-prod/server/app/api/jupyter/load/route.js.nft.json +1 -1
  79. package/.next-prod/server/app/api/jupyter/save/route.js.nft.json +1 -1
  80. package/.next-prod/server/app/api/jupyter/shutdown/route.js.nft.json +1 -1
  81. package/.next-prod/server/app/api/lsp/definition/route.js.nft.json +1 -1
  82. package/.next-prod/server/app/api/lsp/hover/route.js.nft.json +1 -1
  83. package/.next-prod/server/app/api/lsp/references/route.js.nft.json +1 -1
  84. package/.next-prod/server/app/api/lsp/status/route.js.nft.json +1 -1
  85. package/.next-prod/server/app/api/lsp/warmup/route.js.nft.json +1 -1
  86. package/.next-prod/server/app/api/mysql/columns/route.js.nft.json +1 -1
  87. package/.next-prod/server/app/api/mysql/connect/route.js.nft.json +1 -1
  88. package/.next-prod/server/app/api/mysql/disconnect/route.js.nft.json +1 -1
  89. package/.next-prod/server/app/api/mysql/export/route.js.nft.json +1 -1
  90. package/.next-prod/server/app/api/mysql/query/route.js.nft.json +1 -1
  91. package/.next-prod/server/app/api/mysql/schemas/route.js.nft.json +1 -1
  92. package/.next-prod/server/app/api/neo4j/connect/route.js.nft.json +1 -1
  93. package/.next-prod/server/app/api/neo4j/disconnect/route.js.nft.json +1 -1
  94. package/.next-prod/server/app/api/neo4j/query/route.js.nft.json +1 -1
  95. package/.next-prod/server/app/api/neo4j/schema/route.js.nft.json +1 -1
  96. package/.next-prod/server/app/api/note/route.js.nft.json +1 -1
  97. package/.next-prod/server/app/api/ollama/models/route.js.nft.json +1 -1
  98. package/.next-prod/server/app/api/ollama/start/route.js.nft.json +1 -1
  99. package/.next-prod/server/app/api/open-cursor/route.js.nft.json +1 -1
  100. package/.next-prod/server/app/api/open-vscode/route.js.nft.json +1 -1
  101. package/.next-prod/server/app/api/pick-folder/route.js.nft.json +1 -1
  102. package/.next-prod/server/app/api/pinned-sessions/route.js.nft.json +1 -1
  103. package/.next-prod/server/app/api/project-settings/route.js.nft.json +1 -1
  104. package/.next-prod/server/app/api/project-state/route.js.nft.json +1 -1
  105. package/.next-prod/server/app/api/projectGraph/affected/route.js.nft.json +1 -1
  106. package/.next-prod/server/app/api/projectGraph/callees/route.js.nft.json +1 -1
  107. package/.next-prod/server/app/api/projectGraph/callers/route.js.nft.json +1 -1
  108. package/.next-prod/server/app/api/projectGraph/coedit/route.js.nft.json +1 -1
  109. package/.next-prod/server/app/api/projectGraph/context/route.js.nft.json +1 -1
  110. package/.next-prod/server/app/api/projectGraph/file/route.js.nft.json +1 -1
  111. package/.next-prod/server/app/api/projectGraph/file-functions/route.js.nft.json +1 -1
  112. package/.next-prod/server/app/api/projectGraph/impact/route.js.nft.json +1 -1
  113. package/.next-prod/server/app/api/projectGraph/related/route.js.nft.json +1 -1
  114. package/.next-prod/server/app/api/projectGraph/risk/route.js.nft.json +1 -1
  115. package/.next-prod/server/app/api/projectGraph/search/route.js.nft.json +1 -1
  116. package/.next-prod/server/app/api/projects/route.js.nft.json +1 -1
  117. package/.next-prod/server/app/api/redis/command/route.js.nft.json +1 -1
  118. package/.next-prod/server/app/api/redis/connect/route.js.nft.json +1 -1
  119. package/.next-prod/server/app/api/redis/delete/route.js.nft.json +1 -1
  120. package/.next-prod/server/app/api/redis/disconnect/route.js.nft.json +1 -1
  121. package/.next-prod/server/app/api/redis/get/route.js.nft.json +1 -1
  122. package/.next-prod/server/app/api/redis/keys/route.js.nft.json +1 -1
  123. package/.next-prod/server/app/api/redis/set/route.js.nft.json +1 -1
  124. package/.next-prod/server/app/api/review/[id]/comments/route.js.nft.json +1 -1
  125. package/.next-prod/server/app/api/review/[id]/replies/route.js.nft.json +1 -1
  126. package/.next-prod/server/app/api/review/[id]/route.js.nft.json +1 -1
  127. package/.next-prod/server/app/api/review/identify/route.js.nft.json +1 -1
  128. package/.next-prod/server/app/api/review/order/route.js.nft.json +1 -1
  129. package/.next-prod/server/app/api/review/route.js.nft.json +1 -1
  130. package/.next-prod/server/app/api/review/share-info/route.js.nft.json +1 -1
  131. package/.next-prod/server/app/api/review/users/route.js.nft.json +1 -1
  132. package/.next-prod/server/app/api/scheduled-tasks/route.js +1 -1
  133. package/.next-prod/server/app/api/scheduled-tasks/route.js.nft.json +1 -1
  134. package/.next-prod/server/app/api/services/config/route.js.nft.json +1 -1
  135. package/.next-prod/server/app/api/services/scripts/route.js.nft.json +1 -1
  136. package/.next-prod/server/app/api/session/[sessionId]/fork/route.js.nft.json +1 -1
  137. package/.next-prod/server/app/api/session/[sessionId]/history/route.js.nft.json +1 -1
  138. package/.next-prod/server/app/api/session-by-path/route.js +1 -1
  139. package/.next-prod/server/app/api/session-by-path/route.js.nft.json +1 -1
  140. package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route.js.nft.json +1 -1
  141. package/.next-prod/server/app/api/sessions/projects/route.js.nft.json +1 -1
  142. package/.next-prod/server/app/api/sessions/route.js.nft.json +1 -1
  143. package/.next-prod/server/app/api/settings/route.js.nft.json +1 -1
  144. package/.next-prod/server/app/api/skills/[id]/route.js.nft.json +1 -1
  145. package/.next-prod/server/app/api/skills/content/route.js.nft.json +1 -1
  146. package/.next-prod/server/app/api/skills/route.js.nft.json +1 -1
  147. package/.next-prod/server/app/api/terminal/aliases/route.js.nft.json +1 -1
  148. package/.next-prod/server/app/api/terminal/autocomplete/route.js.nft.json +1 -1
  149. package/.next-prod/server/app/api/terminal/bubble-order/route.js.nft.json +1 -1
  150. package/.next-prod/server/app/api/terminal/env/route.js.nft.json +1 -1
  151. package/.next-prod/server/app/api/terminal/history/route.js.nft.json +1 -1
  152. package/.next-prod/server/app/api/version/route.js.nft.json +1 -1
  153. package/.next-prod/server/app/favicon.ico/route.js.nft.json +1 -1
  154. package/.next-prod/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  155. package/.next-prod/server/app/page.js +1 -1
  156. package/.next-prod/server/app/page.js.nft.json +1 -1
  157. package/.next-prod/server/app/page_client-reference-manifest.js +1 -1
  158. package/.next-prod/server/app/project/page.js +1 -1
  159. package/.next-prod/server/app/project/page.js.nft.json +1 -1
  160. package/.next-prod/server/app/project/page_client-reference-manifest.js +1 -1
  161. package/.next-prod/server/app/review/[id]/page.js +1 -1
  162. package/.next-prod/server/app/review/[id]/page.js.nft.json +1 -1
  163. package/.next-prod/server/app/review/[id]/page_client-reference-manifest.js +1 -1
  164. package/.next-prod/server/app-paths-manifest.json +2 -2
  165. package/.next-prod/server/chunks/{1921.js → 3408.js} +2 -2
  166. package/.next-prod/server/chunks/3863.js +2 -2
  167. package/.next-prod/server/chunks/8555.js +836 -0
  168. package/.next-prod/server/chunks/8916.js +1 -1
  169. package/.next-prod/server/chunks/9658.js +6 -6
  170. package/.next-prod/server/middleware-build-manifest.js +1 -1
  171. package/.next-prod/server/pages/404.html +1 -1
  172. package/.next-prod/server/pages/500.html +1 -1
  173. package/.next-prod/server/server-reference-manifest.json +1 -1
  174. package/.next-prod/static/chunks/{5204-babf0d0290febbec.js → 2759-50f11ab1460db5e0.js} +2 -2
  175. package/.next-prod/static/chunks/6345-bab6a02df39cb716.js +14 -0
  176. package/.next-prod/static/chunks/9403-de4673c851686913.js +29 -0
  177. package/.next-prod/static/chunks/app/{layout-a21c32c2b18fbae2.js → layout-de73b7c59e956b47.js} +1 -1
  178. package/.next-prod/static/chunks/app/{page-c5dc8ea6f9fc740b.js → page-d539c7c36a32fd49.js} +1 -1
  179. package/.next-prod/static/chunks/app/project/{page-c5dc8ea6f9fc740b.js → page-d539c7c36a32fd49.js} +1 -1
  180. package/.next-prod/trace +13 -13
  181. package/.next-prod/trace-build +1 -1
  182. package/README.md +2 -1
  183. package/README.zh.md +2 -1
  184. package/dist/{chunk-O4P2J44N.mjs → chunk-4S74IEU4.mjs} +1 -1
  185. package/dist/{chunk-GCYLMG43.mjs → chunk-6BFKFQG5.mjs} +7 -0
  186. package/dist/{chunk-WOM47O75.mjs → chunk-ICB7IS3A.mjs} +1 -1
  187. package/dist/httpApi.mjs +2 -2
  188. package/dist/scheduledTasks.mjs +74 -14
  189. package/dist/{server-SNB4H35J.mjs → server-Z6V4HKGV.mjs} +2 -2
  190. package/dist/wsServer.mjs +14 -4
  191. package/package.json +1 -1
  192. package/.next-prod/server/chunks/9877.js +0 -511
  193. package/.next-prod/static/chunks/6321-a2227f1f162bd000.js +0 -29
  194. package/.next-prod/static/chunks/6345-d9033e1e3d07c277.js +0 -14
  195. /package/.next-prod/static/{2xsVtkHy1Q-18e5b3DPua → QNr0r0SO5D70hTak_CnhT}/_buildManifest.js +0 -0
  196. /package/.next-prod/static/{2xsVtkHy1Q-18e5b3DPua → QNr0r0SO5D70hTak_CnhT}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- "use strict";exports.id=3863,exports.ids=[3863],exports.modules={3863:(a,b,c)=>{c.d(b,{FP:()=>o,Yp:()=>n});var d=c(29021),e=c(21820),f=c(33873),g=c(55511),h=c(14566),i=c(79646);let j=a=>`'${a.replace(/'/g,"'\\''")}'`;function k(a){try{return(0,i.execSync)(`command -v ${a}`,{stdio:"ignore"}),!0}catch{return!1}}let l=null,m=new Map;function n(a,b){let c=m.get(a);if(!c)return!1;try{return c(b),!0}catch{return!1}}function o(a){let{cwd:b,prompt:c,onJsonlLine:n,onPtyData:o,onSubmit:p,onComplete:q,signal:r,debug:s=!1,idleMs:t=3e3,timeoutMs:u,cols:v=80,rows:w=24,stuckMs:x=1e4,graceMs:y=3e4,onStuck:z}=a,A=a.sessionId||g.randomUUID(),B=!0===a.resume,C=f.join(function(a){let b=a;try{b=d.realpathSync(a)}catch{}let c=b.replace(/\//g,"-");return f.join(e.homedir(),".claude","projects",c)}(b),`${A}.jsonl`),D=function(){if(l&&d.existsSync(l))return l;let a=f.join(e.tmpdir(),"cockpit-claude-stophook.json"),b=JSON.stringify({hooks:{Stop:[{hooks:[{type:"command",command:"true"}]}]}});return d.writeFileSync(a,b),l=a,a}(),E=(...a)=>{s&&console.error("[driver]",...a)},F={"image/png":"png","image/jpeg":"jpg","image/webp":"webp","image/gif":"gif"},G=[];for(let b of a.images||[])try{let a=f.join(e.tmpdir(),`cockpit-pty-img-${g.randomUUID()}.${F[b.media_type]||"png"}`);d.writeFileSync(a,Buffer.from(b.data,"base64")),G.push({path:a,isPng:"image/png"===b.media_type})}catch{}let H=G.length>0&&("darwin"===process.platform||"linux"===process.platform&&(k("wl-copy")||k("xclip"))),I=!H&&G.length?`${c}
1
+ "use strict";exports.id=3863,exports.ids=[3863],exports.modules={3863:(a,b,c)=>{c.d(b,{FP:()=>n,Yp:()=>m});var d=c(29021),e=c(21820),f=c(33873),g=c(55511),h=c(14566),i=c(79646);let j=a=>`'${a.replace(/'/g,"'\\''")}'`;function k(a){try{return(0,i.execSync)(`command -v ${a}`,{stdio:"ignore"}),!0}catch{return!1}}let l=new Map;function m(a,b){let c=l.get(a);if(!c)return!1;try{return c(b),!0}catch{return!1}}function n(a){let{cwd:b,prompt:c,onJsonlLine:m,onPtyData:n,onSubmit:o,onComplete:p,onQuestionEsc:q,signal:r,debug:s=!1,idleMs:t=3e3,timeoutMs:u,cols:v=80,rows:w=24,stuckMs:x=1e4,graceMs:y=3e4,onStuck:z}=a,A=a.sessionId||g.randomUUID(),B=!0===a.resume,C=f.join(function(a){let b=a;try{b=d.realpathSync(a)}catch{}let c=b.replace(/\//g,"-");return f.join(e.homedir(),".claude","projects",c)}(b),`${A}.jsonl`),D=function(){let a=f.join(e.tmpdir(),"cockpit-claude-hooks-v2.json"),b=JSON.stringify({hooks:{Stop:[{hooks:[{type:"command",command:"true"}]}],PreToolUse:[{matcher:"AskUserQuestion",hooks:[{type:"command",command:`echo ${j("Interactive questions cannot be displayed in this session. Do NOT retry this tool. Instead, present your questions as plain text in your reply - each question with its options and your recommended choice - then end your turn and wait for the user to answer in the next message.")} >&2; exit 2`}]}]}});try{if(d.readFileSync(a,"utf8")===b)return a}catch{}let c=`${a}.${process.pid}.tmp`;return d.writeFileSync(c,b),d.renameSync(c,a),a}(),E=(...a)=>{s&&console.error("[driver]",...a)},F={"image/png":"png","image/jpeg":"jpg","image/webp":"webp","image/gif":"gif"},G=[];for(let b of a.images||[])try{let a=f.join(e.tmpdir(),`cockpit-pty-img-${g.randomUUID()}.${F[b.media_type]||"png"}`);d.writeFileSync(a,Buffer.from(b.data,"base64")),G.push({path:a,isPng:"image/png"===b.media_type})}catch{}let H=G.length>0&&("darwin"===process.platform||"linux"===process.platform&&(k("wl-copy")||k("xclip"))),I=!H&&G.length?`${c}
2
2
 
3
3
  [Attached image(s)]:
4
- ${G.map(a=>a.path).join("\n")}`:c,J=()=>{for(let a of G){try{d.unlinkSync(a.path)}catch{}try{d.unlinkSync(`${a.path}.png`)}catch{}}};return new Promise(a=>{let c,e=0;try{e=d.readFileSync(C,"utf8").split("\n").filter(Boolean).length}catch{}let f=B?["-r",A,"--dangerously-skip-permissions"]:["--session-id",A,"--dangerously-skip-permissions"];f.push("--settings",D);let g=`claude ${f.join(" ")}`;E("spawn:",g,"| jsonl:",C,"| baseline:",e);let l=process.env.SHELL||("darwin"===process.platform?"/bin/zsh":"/bin/bash");try{c=h.spawn(l,["--login","-c",g],{name:"xterm-256color",cols:v,rows:w,cwd:b,env:process.env})}catch(b){J(),a({sessionId:A,jsonlPath:C,completed:!1,completedVia:null,exitCode:null,crashed:!0,crashError:`spawn failed: ${String(b)}`,newLines:[]});return}m.set(A,a=>{try{c.write(a)}catch{}});let s="",F=Date.now(),K=!1,L=!1,M=!1,N=null,O=!1,P=!1,Q=e,R=0,S=!1,T=!1,U="",V=!1,W=[];c.onData(a=>{if((s+=a).length>2e5&&(s=s.slice(-15e4)),F=Date.now(),o?.(a),!T&&/claude-code\/cli\.js:\d+:\d+/.test(s)){T=!0;let a=s.match(/Cannot read properties of [^\n\x1b]+/);E("CRASH detected:",U=(a?a[0]:"claude-code internal crash").trim()),setTimeout(()=>{if(!P)try{c.kill()}catch{}},100),setTimeout(()=>{if(!P)try{c.kill("SIGKILL")}catch{}},1e3);return}!K&&/Bypass Permissions mode|Yes, I accept/i.test(s)&&(K=!0,E("accept menu → Down + Enter"),setTimeout(()=>c.write("\x1b[B"),400),setTimeout(()=>c.write("\r"),700))});let X=0,Y=setInterval(()=>{if(L||P)return;let a=/bypass permissions on|shift\+tab/i.test(s);if(a&&!X&&(X=Date.now()),!a)return;let b=Date.now()-F>2200,c=Date.now()-X>4e3;(b||c)&&ac()},300),Z=null,$=setTimeout(()=>{L||P||(E(`not ready after ${x}ms → prompt for manual handling, grace ${y}ms`),z?.(),Z=setTimeout(()=>{if(!L&&!P){V=!0,E("grace window elapsed and still not ready → kill");try{c.kill()}catch{}setTimeout(()=>{if(!P)try{c.kill("SIGKILL")}catch{}},1500)}},y))},x),_=()=>{clearTimeout($),Z&&clearTimeout(Z)},aa=null,ab=a=>new Promise(b=>{let c=Date.now(),d=setInterval(()=>{((s.match(/\[Image/g)||[]).length>=a||Date.now()-c>2500||P)&&(clearInterval(d),b())},100)});async function ac(){if(!L){if(L=!0,_(),H){aa=function(){try{if("darwin"===process.platform)return(0,i.execSync)("pbpaste",{encoding:"utf8"});if(k("wl-paste"))return(0,i.execSync)("wl-paste -n",{encoding:"utf8"});if(k("xclip"))return(0,i.execSync)("xclip -o -selection clipboard",{encoding:"utf8"})}catch{}return null}();for(let a=0;a<G.length&&!P;a++){if(!function(a,b){try{if("darwin"===process.platform){let c=a;return b||(c=`${a}.png`,(0,i.execSync)(`sips -s format png ${j(a)} --out ${j(c)}`,{stdio:"ignore"})),(0,i.execSync)(`osascript -e 'set the clipboard to (read (POSIX file ${JSON.stringify(c)}) as \xabclass PNGf\xbb)'`,{stdio:"ignore"}),!0}if("linux"===process.platform){if(k("wl-copy"))return(0,i.execSync)(`wl-copy --type image/png < ${j(a)}`,{shell:"/bin/bash",stdio:"ignore"}),!0;if(k("xclip"))return(0,i.execSync)(`xclip -selection clipboard -t image/png -i ${j(a)}`,{stdio:"ignore"}),!0}}catch{}return!1}(G[a].path,G[a].isPng)){E("clipboard set failed, skipping this image");continue}c.write("\x16"),await ab(a+1)}}E("paste prompt + Enter"+(G.length?` (${H?"clipboard":"path"} x${G.length} img)`:"")),c.write("\x1b[200~"+I+"\x1b[201~"),setTimeout(()=>c.write("\r"),250),null!=aa&&setTimeout(()=>{null!=aa&&function(a){try{if("darwin"===process.platform)return void(0,i.execSync)("pbcopy",{input:a});if(k("wl-copy"))return void(0,i.execSync)("wl-copy",{input:a});k("xclip")&&(0,i.execSync)("xclip -selection clipboard",{input:a})}catch{}}(aa)},800),p?.()}}let ad=setInterval(()=>{let a;try{a=d.readFileSync(C,"utf8")}catch{return}let b=a.split("\n").filter(Boolean);for(let a=Q;a<b.length;a++){let c;try{c=JSON.parse(b[a])}catch{continue}W.push(c),R=Date.now(),n?.(c);let d=Array.isArray(c.message?.content)?c.message.content.map(a=>a.type).join(","):"";"assistant"===c.type&&d.includes("text")&&(S=!0),"system"!==c.type||"stop_hook_summary"!==c.subtype||M||af("stop_hook_summary")}Q=b.length},150),ae=setInterval(()=>{!M&&L&&S&&Date.now()-R>t&&Date.now()-F>t&&af("idle")},300);function af(a){M||(M=!0,N=a,E("complete via",a),q?.(a),setTimeout(ag,200))}function ag(){if(!O){O=!0,E("exit: Ctrl+C x2 → SIGHUP → SIGKILL");try{c.write("\x03")}catch{}setTimeout(()=>{try{c.write("\x03")}catch{}},150),setTimeout(()=>{if(!P)try{c.kill()}catch{}},900),setTimeout(()=>{if(!P)try{c.kill("SIGKILL")}catch{}},2e3)}}let ah=()=>{E("aborted → interrupt + guaranteed kill");try{c.write("\x1b"),c.write("\x03")}catch{}setTimeout(()=>{if(!P)try{c.kill()}catch{}},500),setTimeout(()=>{if(!P)try{c.kill("SIGKILL")}catch{}},1500)},ai=!1;r&&(r.aborted?ah():(r.addEventListener("abort",ah,{once:!0}),ai=!0));let aj=u?setTimeout(()=>{if(!P){E("TIMEOUT, killing");try{c.kill()}catch{}setTimeout(()=>{if(!P)try{c.kill("SIGKILL")}catch{}},1500)}},u):null;c.onExit(({exitCode:b})=>{P=!0,clearInterval(ad),clearInterval(Y),clearInterval(ae),_(),aj&&clearTimeout(aj),m.delete(A),J(),ai&&r?.removeEventListener("abort",ah),E("exit code",b,"completed",M,"via",N),a({sessionId:A,jsonlPath:C,completed:M,completedVia:N,exitCode:b,crashed:T,crashError:U,timedOut:V,newLines:W})})})}}};
4
+ ${G.map(a=>a.path).join("\n")}`:c,J=()=>{for(let a of G){try{d.unlinkSync(a.path)}catch{}try{d.unlinkSync(`${a.path}.png`)}catch{}}};return new Promise(a=>{let c,e=0;try{e=d.readFileSync(C,"utf8").split("\n").filter(Boolean).length}catch{}let f=B?["-r",A,"--dangerously-skip-permissions"]:["--session-id",A,"--dangerously-skip-permissions"];f.push("--settings",D);let g=`claude ${f.join(" ")}`;E("spawn:",g,"| jsonl:",C,"| baseline:",e);let s=process.env.SHELL||("darwin"===process.platform?"/bin/zsh":"/bin/bash");try{c=h.spawn(s,["--login","-c",g],{name:"xterm-256color",cols:v,rows:w,cwd:b,env:process.env})}catch(b){J(),a({sessionId:A,jsonlPath:C,completed:!1,completedVia:null,exitCode:null,crashed:!0,crashError:`spawn failed: ${String(b)}`,newLines:[]});return}l.set(A,a=>{try{c.write(a)}catch{}});let F="",K=Date.now(),L=!1,M=!1,N=0,O=!1,P=!1,Q=null,R=!1,S=!1,T=e,U=0,V=!1,W=!1,X="",Y=!1,Z=[];c.onData(a=>{if((F+=a).length>2e5&&(F=F.slice(-15e4)),K=Date.now(),n?.(a),!W&&/claude-code\/cli\.js:\d+:\d+/.test(F)){W=!0;let a=F.match(/Cannot read properties of [^\n\x1b]+/);E("CRASH detected:",X=(a?a[0]:"claude-code internal crash").trim()),setTimeout(()=>{if(!S)try{c.kill()}catch{}},100),setTimeout(()=>{if(!S)try{c.kill("SIGKILL")}catch{}},1e3);return}!L&&/Bypass Permissions mode|Yes, I accept/i.test(F)&&(L=!0,E("accept menu → Down + Enter"),setTimeout(()=>c.write("\x1b[B"),400),setTimeout(()=>c.write("\r"),700)),!M&&O&&!P&&/Enter to select.*Esc to cancel/i.test(F)&&(M=!0,E("AskUserQuestion UI detected → ESC + end turn"),q?.(),setTimeout(()=>{try{c.write("\x1b")}catch{}},300),setTimeout(()=>ai("question_esc"),600))});let $=0,_=setInterval(()=>{if(O||S)return;let a=/bypass permissions on|shift\+tab/i.test(F);if(a&&!$&&($=Date.now()),!a)return;let b=Date.now()-K>2200,c=Date.now()-$>4e3;(b||c)&&af()},300),aa=null,ab=setTimeout(()=>{O||S||(E(`not ready after ${x}ms → prompt for manual handling, grace ${y}ms`),z?.(),aa=setTimeout(()=>{if(!O&&!S){Y=!0,E("grace window elapsed and still not ready → kill");try{c.kill()}catch{}setTimeout(()=>{if(!S)try{c.kill("SIGKILL")}catch{}},1500)}},y))},x),ac=()=>{clearTimeout(ab),aa&&clearTimeout(aa)},ad=null,ae=a=>new Promise(b=>{let c=Date.now(),d=setInterval(()=>{((F.match(/\[Image/g)||[]).length>=a||Date.now()-c>2500||S)&&(clearInterval(d),b())},100)});async function af(){if(!O){if(O=!0,ac(),H){ad=function(){try{if("darwin"===process.platform)return(0,i.execSync)("pbpaste",{encoding:"utf8"});if(k("wl-paste"))return(0,i.execSync)("wl-paste -n",{encoding:"utf8"});if(k("xclip"))return(0,i.execSync)("xclip -o -selection clipboard",{encoding:"utf8"})}catch{}return null}();for(let a=0;a<G.length&&!S;a++){if(!function(a,b){try{if("darwin"===process.platform){let c=a;return b||(c=`${a}.png`,(0,i.execSync)(`sips -s format png ${j(a)} --out ${j(c)}`,{stdio:"ignore"})),(0,i.execSync)(`osascript -e 'set the clipboard to (read (POSIX file ${JSON.stringify(c)}) as \xabclass PNGf\xbb)'`,{stdio:"ignore"}),!0}if("linux"===process.platform){if(k("wl-copy"))return(0,i.execSync)(`wl-copy --type image/png < ${j(a)}`,{shell:"/bin/bash",stdio:"ignore"}),!0;if(k("xclip"))return(0,i.execSync)(`xclip -selection clipboard -t image/png -i ${j(a)}`,{stdio:"ignore"}),!0}}catch{}return!1}(G[a].path,G[a].isPng)){E("clipboard set failed, skipping this image");continue}c.write("\x16"),await ae(a+1)}}E("paste prompt + Enter"+(G.length?` (${H?"clipboard":"path"} x${G.length} img)`:"")),c.write("\x1b[200~"+I+"\x1b[201~"),setTimeout(()=>c.write("\r"),250),null!=ad&&setTimeout(()=>{null!=ad&&function(a){try{if("darwin"===process.platform)return void(0,i.execSync)("pbcopy",{input:a});if(k("wl-copy"))return void(0,i.execSync)("wl-copy",{input:a});k("xclip")&&(0,i.execSync)("xclip -selection clipboard",{input:a})}catch{}}(ad)},800),o?.()}}let ag=setInterval(()=>{let a;try{a=d.readFileSync(C,"utf8")}catch{return}let b=a.split("\n").filter(Boolean);for(let a=T;a<b.length;a++){let c;try{c=JSON.parse(b[a])}catch{continue}Z.push(c),U=Date.now(),m?.(c);let d=Array.isArray(c.message?.content)?c.message.content.map(a=>a.type).join(","):"";"assistant"===c.type&&d.includes("text")&&(V=!0),"assistant"===c.type&&Array.isArray(c.message?.content)&&(N+=c.message.content.filter(a=>"tool_use"===a.type&&"AskUserQuestion"===a.name).length)>=3&&!P&&(E(`AskUserQuestion x${N} → break retry loop, end turn`),q?.(),ai("question_loop")),"system"!==c.type||"stop_hook_summary"!==c.subtype||P||ai("stop_hook_summary")}T=b.length},150),ah=setInterval(()=>{!P&&O&&V&&Date.now()-U>t&&Date.now()-K>t&&ai("idle")},300);function ai(a){P||(P=!0,Q=a,E("complete via",a),p?.(a),setTimeout(aj,200))}function aj(){if(!R){R=!0,E("exit: Ctrl+C x2 → SIGHUP → SIGKILL");try{c.write("\x03")}catch{}setTimeout(()=>{try{c.write("\x03")}catch{}},150),setTimeout(()=>{if(!S)try{c.kill()}catch{}},900),setTimeout(()=>{if(!S)try{c.kill("SIGKILL")}catch{}},2e3)}}let ak=()=>{E("aborted → interrupt + guaranteed kill");try{c.write("\x1b"),c.write("\x03")}catch{}setTimeout(()=>{if(!S)try{c.kill()}catch{}},500),setTimeout(()=>{if(!S)try{c.kill("SIGKILL")}catch{}},1500)},al=!1;r&&(r.aborted?ak():(r.addEventListener("abort",ak,{once:!0}),al=!0));let am=u?setTimeout(()=>{if(!S){E("TIMEOUT, killing");try{c.kill()}catch{}setTimeout(()=>{if(!S)try{c.kill("SIGKILL")}catch{}},1500)}},u):null;c.onExit(({exitCode:b})=>{S=!0,clearInterval(ag),clearInterval(_),clearInterval(ah),ac(),am&&clearTimeout(am),l.delete(A),J(),al&&r?.removeEventListener("abort",ak),E("exit code",b,"completed",P,"via",Q),a({sessionId:A,jsonlPath:C,completed:P,completedVia:Q,exitCode:b,crashed:W,crashError:X,timedOut:Y,newLines:Z})})})}}};