agent-log-viewer 0.2.0 → 0.4.0

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 (170) hide show
  1. package/dist/standalone/.next/BUILD_ID +1 -1
  2. package/dist/standalone/.next/app-path-routes-manifest.json +14 -8
  3. package/dist/standalone/.next/build-manifest.json +3 -3
  4. package/dist/standalone/.next/prerender-manifest.json +3 -3
  5. package/dist/standalone/.next/required-server-files.json +4 -4
  6. package/dist/standalone/.next/routes-manifest.json +44 -0
  7. package/dist/standalone/.next/server/app/_global-error/page.js +3 -3
  8. package/dist/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  9. package/dist/standalone/.next/server/app/_global-error.html +1 -1
  10. package/dist/standalone/.next/server/app/_global-error.rsc +1 -1
  11. package/dist/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  12. package/dist/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  13. package/dist/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  14. package/dist/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  15. package/dist/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  16. package/dist/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  17. package/dist/standalone/.next/server/app/_not-found/page.js +2 -2
  18. package/dist/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  19. package/dist/standalone/.next/server/app/_not-found.html +1 -1
  20. package/dist/standalone/.next/server/app/_not-found.rsc +2 -2
  21. package/dist/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  22. package/dist/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  23. package/dist/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  24. package/dist/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  25. package/dist/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  26. package/dist/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  27. package/dist/standalone/.next/server/app/api/access/route.js +1 -1
  28. package/dist/standalone/.next/server/app/api/access/route_client-reference-manifest.js +1 -1
  29. package/dist/standalone/.next/server/app/api/answer/route.js +1 -1
  30. package/dist/standalone/.next/server/app/api/answer/route.js.nft.json +1 -1
  31. package/dist/standalone/.next/server/app/api/answer/route_client-reference-manifest.js +1 -1
  32. package/dist/standalone/.next/server/app/api/files/route.js +1 -1
  33. package/dist/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  34. package/dist/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  35. package/dist/standalone/.next/server/app/api/flows/[id]/route.js +1 -1
  36. package/dist/standalone/.next/server/app/api/flows/[id]/route.js.nft.json +1 -1
  37. package/dist/standalone/.next/server/app/api/flows/[id]/route_client-reference-manifest.js +1 -1
  38. package/dist/standalone/.next/server/app/api/flows/route.js +1 -1
  39. package/dist/standalone/.next/server/app/api/flows/route.js.nft.json +1 -1
  40. package/dist/standalone/.next/server/app/api/flows/route_client-reference-manifest.js +1 -1
  41. package/dist/standalone/.next/server/app/api/inbox/route.js +1 -1
  42. package/dist/standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
  43. package/dist/standalone/.next/server/app/api/limits/route.js +1 -1
  44. package/dist/standalone/.next/server/app/api/limits/route_client-reference-manifest.js +1 -1
  45. package/dist/standalone/.next/server/app/api/log/route.js +1 -1
  46. package/dist/standalone/.next/server/app/api/log/route.js.nft.json +1 -1
  47. package/dist/standalone/.next/server/app/api/log/route_client-reference-manifest.js +1 -1
  48. package/dist/standalone/.next/server/app/api/proc/route.js +1 -1
  49. package/dist/standalone/.next/server/app/api/proc/route.js.nft.json +1 -1
  50. package/dist/standalone/.next/server/app/api/proc/route_client-reference-manifest.js +1 -1
  51. package/dist/standalone/.next/server/app/api/push/route.js +1 -1
  52. package/dist/standalone/.next/server/app/api/push/route.js.nft.json +1 -1
  53. package/dist/standalone/.next/server/app/api/push/route_client-reference-manifest.js +1 -1
  54. package/dist/standalone/.next/server/app/api/spawn/route.js +1 -1
  55. package/dist/standalone/.next/server/app/api/spawn/route.js.nft.json +1 -1
  56. package/dist/standalone/.next/server/app/api/spawn/route_client-reference-manifest.js +1 -1
  57. package/dist/standalone/.next/server/app/api/tasks/[id]/route.js +1 -0
  58. package/dist/standalone/.next/server/app/api/tasks/[id]/route.js.nft.json +1 -0
  59. package/dist/standalone/.next/server/app/api/tasks/[id]/route_client-reference-manifest.js +1 -0
  60. package/dist/standalone/.next/server/app/api/tasks/[id]/send/route.js +1 -0
  61. package/dist/standalone/.next/server/app/api/tasks/[id]/send/route.js.nft.json +1 -0
  62. package/dist/standalone/.next/server/app/api/tasks/[id]/send/route_client-reference-manifest.js +1 -0
  63. package/dist/standalone/.next/server/app/api/tasks/[id]/spawn/route.js +1 -0
  64. package/dist/standalone/.next/server/app/api/tasks/[id]/spawn/route.js.nft.json +1 -0
  65. package/dist/standalone/.next/server/app/api/tasks/[id]/spawn/route_client-reference-manifest.js +1 -0
  66. package/dist/standalone/.next/server/app/api/tasks/route.js +1 -0
  67. package/dist/standalone/.next/server/app/api/tasks/route.js.nft.json +1 -0
  68. package/dist/standalone/.next/server/app/api/tasks/route_client-reference-manifest.js +1 -0
  69. package/dist/standalone/.next/server/app/api/timeline/route.js +1 -1
  70. package/dist/standalone/.next/server/app/api/timeline/route.js.nft.json +1 -1
  71. package/dist/standalone/.next/server/app/api/timeline/route_client-reference-manifest.js +1 -1
  72. package/dist/standalone/.next/server/app/api/tmux/route.js +1 -2
  73. package/dist/standalone/.next/server/app/api/tmux/route.js.nft.json +1 -1
  74. package/dist/standalone/.next/server/app/api/tmux/route_client-reference-manifest.js +1 -1
  75. package/dist/standalone/.next/server/app/api/transcribe/route.js +1 -1
  76. package/dist/standalone/.next/server/app/api/transcribe/route_client-reference-manifest.js +1 -1
  77. package/dist/standalone/.next/server/app/api/transcribe/token/route.js +1 -1
  78. package/dist/standalone/.next/server/app/api/transcribe/token/route_client-reference-manifest.js +1 -1
  79. package/dist/standalone/.next/server/app/api/workflows/[id]/route.js +1 -0
  80. package/dist/standalone/.next/server/app/api/workflows/[id]/route.js.nft.json +1 -0
  81. package/dist/standalone/.next/server/app/api/workflows/[id]/route_client-reference-manifest.js +1 -0
  82. package/dist/standalone/.next/server/app/api/workflows/route.js +1 -0
  83. package/dist/standalone/.next/server/app/api/workflows/route.js.nft.json +1 -0
  84. package/dist/standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -0
  85. package/dist/standalone/.next/server/app/favicon.ico/route.js +1 -1
  86. package/dist/standalone/.next/server/app/index.html +1 -1
  87. package/dist/standalone/.next/server/app/index.rsc +3 -3
  88. package/dist/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  89. package/dist/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
  90. package/dist/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  91. package/dist/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  92. package/dist/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  93. package/dist/standalone/.next/server/app/page.js +3 -3
  94. package/dist/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  95. package/dist/standalone/.next/server/app-paths-manifest.json +14 -8
  96. package/dist/standalone/.next/server/chunks/319.js +3 -3
  97. package/dist/standalone/.next/server/chunks/51.js +4 -0
  98. package/dist/standalone/.next/server/chunks/628.js +1 -0
  99. package/dist/standalone/.next/server/functions-config-manifest.json +7 -1
  100. package/dist/standalone/.next/server/middleware-build-manifest.js +1 -1
  101. package/dist/standalone/.next/server/middleware.js +3 -3
  102. package/dist/standalone/.next/server/pages/404.html +1 -1
  103. package/dist/standalone/.next/server/pages/500.html +1 -1
  104. package/dist/standalone/.next/server/server-reference-manifest.json +1 -1
  105. package/dist/standalone/.next/static/_Dl3LKxoOqqIiQ3cL5oOx/_buildManifest.js +1 -0
  106. package/dist/standalone/.next/static/chunks/680-e2cc45e50038da25.js +1 -0
  107. package/dist/standalone/.next/static/chunks/app/_global-error/page-2c88d1e3e1518770.js +1 -0
  108. package/dist/standalone/.next/static/chunks/app/_not-found/{page-51e53d11a3244389.js → page-811f7dc4ec7ef451.js} +1 -1
  109. package/dist/standalone/.next/static/chunks/app/api/access/route-2c88d1e3e1518770.js +1 -0
  110. package/dist/standalone/.next/static/chunks/app/api/answer/route-2c88d1e3e1518770.js +1 -0
  111. package/dist/standalone/.next/static/chunks/app/api/files/route-2c88d1e3e1518770.js +1 -0
  112. package/dist/standalone/.next/static/chunks/app/api/flows/[id]/route-2c88d1e3e1518770.js +1 -0
  113. package/dist/standalone/.next/static/chunks/app/api/flows/route-2c88d1e3e1518770.js +1 -0
  114. package/dist/standalone/.next/static/chunks/app/api/inbox/route-2c88d1e3e1518770.js +1 -0
  115. package/dist/standalone/.next/static/chunks/app/api/limits/route-2c88d1e3e1518770.js +1 -0
  116. package/dist/standalone/.next/static/chunks/app/api/log/route-2c88d1e3e1518770.js +1 -0
  117. package/dist/standalone/.next/static/chunks/app/api/proc/route-2c88d1e3e1518770.js +1 -0
  118. package/dist/standalone/.next/static/chunks/app/api/push/route-2c88d1e3e1518770.js +1 -0
  119. package/dist/standalone/.next/static/chunks/app/api/spawn/route-2c88d1e3e1518770.js +1 -0
  120. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/route-2c88d1e3e1518770.js +1 -0
  121. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/send/route-2c88d1e3e1518770.js +1 -0
  122. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/spawn/route-2c88d1e3e1518770.js +1 -0
  123. package/dist/standalone/.next/static/chunks/app/api/tasks/route-2c88d1e3e1518770.js +1 -0
  124. package/dist/standalone/.next/static/chunks/app/api/timeline/route-2c88d1e3e1518770.js +1 -0
  125. package/dist/standalone/.next/static/chunks/app/api/tmux/route-2c88d1e3e1518770.js +1 -0
  126. package/dist/standalone/.next/static/chunks/app/api/transcribe/route-2c88d1e3e1518770.js +1 -0
  127. package/dist/standalone/.next/static/chunks/app/api/transcribe/token/route-2c88d1e3e1518770.js +1 -0
  128. package/dist/standalone/.next/static/chunks/app/api/workflows/[id]/route-2c88d1e3e1518770.js +1 -0
  129. package/dist/standalone/.next/static/chunks/app/api/workflows/route-2c88d1e3e1518770.js +1 -0
  130. package/dist/standalone/.next/static/chunks/app/layout-22e93960d4e3259a.js +1 -0
  131. package/dist/standalone/.next/static/chunks/app/page-f48448e03fac75b1.js +2 -0
  132. package/dist/standalone/.next/static/chunks/{main-app-518cea4217042452.js → main-app-e6ff5fbff7d5b38f.js} +1 -1
  133. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-2c88d1e3e1518770.js +1 -0
  134. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-2c88d1e3e1518770.js +1 -0
  135. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-2b3b5eea82b805ca.js +1 -0
  136. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-2c88d1e3e1518770.js +1 -0
  137. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-2c88d1e3e1518770.js +1 -0
  138. package/dist/standalone/.next/static/css/543219aee607c693.css +1 -0
  139. package/dist/standalone/package.json +5 -1
  140. package/dist/standalone/server.js +1 -1
  141. package/package.json +5 -1
  142. package/dist/standalone/.next/server/chunks/289.js +0 -2
  143. package/dist/standalone/.next/server/chunks/871.js +0 -3
  144. package/dist/standalone/.next/static/chunks/159-d2dbe811eeab290f.js +0 -1
  145. package/dist/standalone/.next/static/chunks/app/_global-error/page-81fecd9eba007478.js +0 -1
  146. package/dist/standalone/.next/static/chunks/app/api/access/route-81fecd9eba007478.js +0 -1
  147. package/dist/standalone/.next/static/chunks/app/api/answer/route-81fecd9eba007478.js +0 -1
  148. package/dist/standalone/.next/static/chunks/app/api/files/route-81fecd9eba007478.js +0 -1
  149. package/dist/standalone/.next/static/chunks/app/api/flows/[id]/route-81fecd9eba007478.js +0 -1
  150. package/dist/standalone/.next/static/chunks/app/api/flows/route-81fecd9eba007478.js +0 -1
  151. package/dist/standalone/.next/static/chunks/app/api/inbox/route-81fecd9eba007478.js +0 -1
  152. package/dist/standalone/.next/static/chunks/app/api/limits/route-81fecd9eba007478.js +0 -1
  153. package/dist/standalone/.next/static/chunks/app/api/log/route-81fecd9eba007478.js +0 -1
  154. package/dist/standalone/.next/static/chunks/app/api/proc/route-81fecd9eba007478.js +0 -1
  155. package/dist/standalone/.next/static/chunks/app/api/push/route-81fecd9eba007478.js +0 -1
  156. package/dist/standalone/.next/static/chunks/app/api/spawn/route-81fecd9eba007478.js +0 -1
  157. package/dist/standalone/.next/static/chunks/app/api/timeline/route-81fecd9eba007478.js +0 -1
  158. package/dist/standalone/.next/static/chunks/app/api/tmux/route-81fecd9eba007478.js +0 -1
  159. package/dist/standalone/.next/static/chunks/app/api/transcribe/route-81fecd9eba007478.js +0 -1
  160. package/dist/standalone/.next/static/chunks/app/api/transcribe/token/route-81fecd9eba007478.js +0 -1
  161. package/dist/standalone/.next/static/chunks/app/layout-fdd4e6d70b3c92cb.js +0 -1
  162. package/dist/standalone/.next/static/chunks/app/page-39971eba742f6b2e.js +0 -2
  163. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-81fecd9eba007478.js +0 -1
  164. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-81fecd9eba007478.js +0 -1
  165. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-d958576418125130.js +0 -1
  166. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-81fecd9eba007478.js +0 -1
  167. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-81fecd9eba007478.js +0 -1
  168. package/dist/standalone/.next/static/css/331d03725ce2ef2f.css +0 -1
  169. package/dist/standalone/.next/static/eVZqd0xcmD_g_vTrSrlTL/_buildManifest.js +0 -1
  170. /package/dist/standalone/.next/static/{eVZqd0xcmD_g_vTrSrlTL → _Dl3LKxoOqqIiQ3cL5oOx}/_ssgManifest.js +0 -0
@@ -0,0 +1,4 @@
1
+ "use strict";exports.id=51,exports.ids=[51],exports.modules={1785:(a,b,c)=>{c.d(b,{AB:()=>k,F5:()=>l,Ku:()=>q,LJ:()=>m,X$:()=>o,dV:()=>j,m3:()=>n,yv:()=>p});var d=c(14509),e=c(69232),f=c(89333),g=c(27359),h=c(75051);function i(a,b=500){return{error:a instanceof Error?a.message:String(a),status:b}}async function j(a){return(await (0,h.aI)()).has(a)?(0,h.u1)(a):"unknown"}async function k(a){let b=(await (0,e.C)()).find(b=>b.path===a);if(b&&null!==b.pid){let a=await (0,h.u1)(b.pid);if(null!==a)return a}let c=await (0,h.mB)(a);return c?c.display:null}async function l(a){if(!a||!(0,f.EG)(a))return{error:"для переривання потрібен path розмови",status:400};let b=await k(a);if(null===b)return{error:"немає активного пейна агента для переривання",status:409};try{return await (0,h.EW)(b),{ok:!0,target:b}}catch(a){return i(a)}}async function m(a){if(!a||!(0,f.EG)(a))return{error:"для стискання потрібен path розмови",status:400};let b=await k(a);if(null===b)return{error:"немає активного пейна агента для стискання",status:409};try{return await (0,h.oF)(b,"/compact"),{ok:!0,target:b}}catch(a){return i(a)}}async function n(a,b,c,d){if(!a||!(0,f.EG)(a))return{error:"для відповіді потрібен path розмови",status:400};if(!/^([1-9]|Tab|Enter|Escape)$/.test(b))return{error:"некоректна клавіша",status:400};let e=await k(a);if(null===e)return{error:"немає активного пейна агента",status:409};try{let a=await (0,h.WS)(e,async()=>{let a=function(a,b,c,d){if(null!==(0,g._1)(a))return"blocked";if(!(0,g.cZ)(a))return"closed";let e=(0,g.fm)(a);if(/^[1-9]$/.test(b)){let a=e?.options.find(a=>String(a.value)===b);if(!a||"string"==typeof c&&c!==a.label||"string"==typeof d&&d!==e?.question)return"changed"}else if(e&&"string"==typeof d&&d!==e.question)return"changed";return null}(await (0,h.ZB)(e),b,c,d);return null===a&&await (0,h.V1)(e,[b]),a});if("blocked"===a)return{error:"пейн чекає на підтвердження, яке потребує ручного рішення",status:409};if("closed"===a)return{error:"пейн уже не чекає на відповідь",status:409};if("changed"===a)return{error:"меню на екрані вже змінилось",status:409};return{ok:!0,target:e}}catch(a){return i(a)}}async function o(a){if(!a||!(0,f.EG)(a))return{error:"для відкриття потрібен path розмови",status:400};let b=(await (0,e.C)()).find(b=>b.path===a);if(!b)return{error:"файл невідомий переглядачу",status:403};let c=(0,d.A9)(b.root,b.path);if(!c)return{error:"цю розмову неможливо відновити",status:409};try{let a=await (0,h.KY)(b.path,c,"");return{ok:!0,target:a.target,spawned:a.spawned}}catch(a){return i(a)}}async function p(a){if(!a||!(0,f.EG)(a))return{error:"для закриття потрібен path розмови",status:400};let b=(await (0,e.C)()).find(b=>b.path===a);if(b&&b.parent)return{ok:!0,target:""};let c=await k(a);if(null===c)return{ok:!0,target:""};try{return await (0,h.VT)(c),(0,h.HZ)(a),{ok:!0,target:c}}catch(a){return i(a)}}async function q(a){let{pid:b,path:c,images:g}=a,k=a.text.trim(),l=null;if(null!==b){let a=await j(b);if("unknown"===a&&!c)return{error:"процес невідомий переглядачу",status:403};l="unknown"===a?null:a}let m=[];try{if(null!==l){let a=(0,h.Am)(k,g);return m=a.imagePaths,await (0,h.oF)(l,a.payload),{ok:!0,target:l,...m.length?{imagePaths:m}:{}}}if(!c||!(0,f.EG)(c))return{error:"процес не у tmux-сесії",status:409};let a=await (0,e.C)(),b=a.find(a=>a.path===c);if(!b)return{error:"файл невідомий переглядачу",status:403};let i=(0,d.A9)(b.root,b.path);if(i){let a=(0,h.Am)(k,g);m=a.imagePaths;let c=await (0,h.KY)(b.path,i,a.payload);return{ok:!0,target:c.target,spawned:c.spawned,...m.length?{imagePaths:m}:{}}}let j=new Map(a.map(a=>[a.path,a])),n=new Set,o=b;for(;o.parent&&j.has(o.parent)&&!n.has(o.path);)n.add(o.path),o=j.get(o.parent);if(o.path===b.path)return{error:"цю розмову неможливо відновити",status:409};let p=null!==o.pid?await (0,h.u1)(o.pid):null,q=null===p?(0,d.A9)(o.root,o.path):null;if(null===p&&!q)return{error:"коренева сесія недоступна для повідомлення",status:409};let r=(0,h.Am)(k,g);m=r.imagePaths;let s=`Повідомлення від користувача для твоєї гілки \xab${b.title.slice(0,100)}\xbb — передай або обробʼи сам:
2
+ ${r.payload}`,t=m.length?{imagePaths:m}:{};if(null!==p)return await (0,h.oF)(p,s),{ok:!0,target:p,...t};let u=await (0,h.KY)(o.path,q,s);return{ok:!0,target:u.target,spawned:u.spawned,...t}}catch(a){return(0,h.IJ)(m),i(a)}}},3249:(a,b,c)=>{c.d(b,{Ec:()=>t,Hw:()=>w,iq:()=>z,w1:()=>H,xz:()=>x,zn:()=>F});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(14509),i=c(16089),j=c(75051),k=c(51906),l=c(25750),m=c(59680),n=c(98590);let o=new Set(["approved","done_comment","needs_decision","closed"]),p=/^REVIEW_READY:\s*(.*)$/m,q=/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i,r=globalThis,s=new Set;function t(){return new Date().toISOString()}function u(a){if(!a)return 0;let b=Date.parse(a);return Number.isFinite(b)?b:0}function v(a){return a.map(a=>({...a,roles:{implementer:{...a.roles.implementer},reviewer:{...a.roles.reviewer}},rounds:a.rounds.map(a=>({...a}))}))}function w(a){return a.rounds.at(-1)??null}function x(a,b,c){return{n:a.rounds.length+1,reviewerPath:null,sessionId:null,reviewerPane:null,findingsPath:null,triggeredBy:b,readyNote:c,verdict:null,findingsCount:null,startedAt:t(),spawnStartedAt:null,relayStartedAt:null,reviewedAt:null,relayedAt:null,error:null}}function y(a,b){a.state="needs_decision",a.stateDetail=b}async function z(a,b,c){let d=b.get(a.implementerPath);if(!d)throw Error("implementer transcript is missing from scanner");if(null!==d.pid){let a=await (0,j.u1)(d.pid);if(a)return void await (0,j.oF)(a,c)}let e=(0,h.A9)(d.root,d.path);if(!e)throw Error("implementer session cannot be resumed");await (0,j.KY)(d.path,e,c)}function A(a,b,c){if(c.reviewerPath)return!1;let d=u(c.startedAt)/1e3-5,e=a.roles.reviewer.engine,f=b.filter(b=>b.engine===e&&b.path!==a.implementerPath&&b.mtime>=d&&(0,i.tX)(b.path)===a.cwd).sort((a,b)=>b.mtime-a.mtime)[0];return!!f&&(c.reviewerPath=f.path,!0)}function B(a,b,c){let d=b.findingsPath??(0,n.tR)(a.id,b.n);(0,n.Yj)(d,c.content),b.findingsPath=d,b.verdict=c.verdict,b.findingsCount=c.findingsCount,b.reviewedAt=t(),"manual"===a.mode?a.state="relay_pending":a.state="relaying",a.stateDetail=null}async function C(a,b){let c=(0,m.qu)(a,b);if(a.state="reviewing",a.stateDetail=null,"pane"===a.reviewerMode){let d=(0,h.lV)(a.roles.reviewer.engine,a.cwd,{model:a.roles.reviewer.model,effort:a.roles.reviewer.effort,readOnly:!0}),e=await (0,j.Tk)(d,c);b.reviewerPane={paneId:e.paneId,windowName:d.windowName},d.transcript&&(b.reviewerPath=d.transcript),!b.reviewerPath&&e.panePid&&(b.error=null);return}let d=(0,k.gn)(a.id,b.n,a.roles.reviewer,a.cwd,c);d.pid&&(b.reviewerPid=d.pid),d.sessionId&&(b.sessionId=d.sessionId),d.reviewerPath&&(b.reviewerPath=d.reviewerPath)}async function D(a,b,c){if(!c.findingsPath)throw Error("round has no findings artifact");let d=e().readFileSync(c.findingsPath,"utf8");a.state="relaying",await z(a,b,(0,m.i0)(c,d)),c.relayedAt=t(),"APPROVE"===c.verdict?(a.state="approved",a.closedAt=t()):"COMMENT"===c.verdict?a.state="done_comment":a.roundLimit>0&&a.rounds.length>=a.roundLimit?y(a,"round limit reached"):(a.state="fixing",a.stateDetail=null)}async function E(a,b,c,d){var e;let f=JSON.stringify(a);if("closed"===a.state||"paused"===a.state)return!1;let h=c.get(a.implementerPath);if(!h){let b=a.state;return a.state="paused",a.pausedState=b,a.stateDetail="implementer transcript is missing",JSON.stringify(a)!==f}if("waiting_ready"===a.state||"fixing"===a.state){let b=function(a,b){if("live"===b.activity||"jsonl_turn_open"===b.activityReason||"jsonl_turn_stalled"===b.activityReason)return null;let c=(0,l.if)(b);if(!c)return null;let d=Math.max(...a.rounds.map(a=>u(a.startedAt)),u(a.createdAt));return c.ts<=d?null:c.text.match(p)?.[1]?.trim()??null}(a,h);return null!==b&&(a.rounds.push(x(a,"marker",b)),a.state="manual"===a.mode?"spawn_pending":"spawning",a.stateDetail=null),JSON.stringify(a)!==f}let i=w(a);if(!i)return JSON.stringify(a)!==f;if("spawning"===a.state){let b=(0,k.IL)(a.id,i.n,i,a.roles.reviewer.engine);if(i.spawnStartedAt&&"headless"===a.reviewerMode&&b)return a.state="reviewing",a.stateDetail=null,JSON.stringify(a)!==f;if(i.spawnStartedAt&&!b&&null===i.reviewerPath)return y(a,"reviewer spawn was interrupted by a restart"),JSON.stringify(a)!==f;try{i.spawnStartedAt=t(),d(),await C(a,i)}catch(b){i.error=b instanceof Error?b.message:String(b),y(a,i.error)}return JSON.stringify(a)!==f}if("reviewing"===a.state){let d=(0,l.V_)(i);if(d)return B(a,i,d),JSON.stringify(a)!==f;if("headless"===a.reviewerMode){let d,h=(0,k.IL)(a.id,i.n,i,a.roles.reviewer.engine);if(i.sessionId||(i.sessionId=h?.sessionId??(e=h?.stdout??"",(d=e.match(/session id:?\s*([0-9a-f-]{36})/i)?.[1])&&q.test(d)?d:e.split("\n").slice(0,40).join("\n").match(q)?.[0]??null)),!function(a,b,c){if(b.reviewerPath||!c)return;let d=a.find(a=>g().basename(a.path).includes(c));d&&(b.reviewerPath=d.path)}(b,i,i.sessionId??null),i.reviewerPath||i.sessionId||A(a,b,i),h?.status==="running")return JSON.stringify(a)!==f;if(h){(0,k.T)(a.id,i.n,i.reviewerPid??null);let b=(0,l.Sn)(h.finalOutput);if(b)B(a,i,b);else{let b=i.findingsPath??(0,n.tR)(a.id,i.n);(0,n.Yj)(b,h.finalOutput||h.stdout||h.stderr),i.findingsPath=b,i.error="timeout"===h.status?"reviewer timed out":h.stderr.trim()||"reviewer verdict was unparseable",y(a,i.error)}return JSON.stringify(a)!==f}let j=(0,l.J8)(i,c);return j?B(a,i,j):y(a,"reviewer process is missing after server restart"),JSON.stringify(a)!==f}if(A(a,b,i),i.reviewerPath){let b=c.get(i.reviewerPath),d=(0,l.J8)(i,c);d?B(a,i,d):b&&"live"!==b.activity&&"stalled"!==b.activity&&y(a,"reviewer verdict was unparseable")}return JSON.stringify(a)!==f}if("relaying"===a.state){let b=`${a.id}:${i.n}`;if(i.relayStartedAt&&null===i.relayedAt&&!s.has(b))return y(a,"relay was interrupted; it may have been delivered twice"),JSON.stringify(a)!==f;try{i.relayStartedAt=t(),s.add(b),d(),await D(a,c,i)}catch(b){i.error=b instanceof Error?b.message:String(b),a.state="paused",a.pausedState="relaying",a.stateDetail=i.error}}return JSON.stringify(a)!==f}async function F(a){if(r.__llvFlowTick){let b=v((0,n.mL)());return G(a,b),{flows:b,changed:!1}}r.__llvFlowTick=!0;let b=v((0,n.mL)());try{let c=new Map(a.map(a=>[a.path,a])),d=!1;for(let e of b)!o.has(e.state)&&(await E(e,a,c,()=>(0,n.tu)(b))&&(d=!0),d&&(0,n.tu)(b));return G(a,b),d&&(0,n.tu)(b),{flows:b,changed:d}}finally{r.__llvFlowTick=!1}}function G(a,b){for(let b of a)delete b.flow;let c=new Map(a.map(a=>[a.path,a]));for(let a of b){let b=c.get(a.implementerPath);for(let d of(b&&(b.flow={flowId:a.id,flowRole:"implementer",round:null}),a.rounds)){if(!d.reviewerPath)continue;let b=c.get(d.reviewerPath);b&&(b.flow={flowId:a.id,flowRole:"reviewer",round:d.n})}}}function H(){return{flows:(0,n.mL)(),presets:(0,n.Vd)()}}},7378:(a,b,c)=>{let d;c.d(b,{Bj:()=>Q,Fe:()=>L,Vt:()=>N,$w:()=>E,pl:()=>D,BB:()=>H,FQ:()=>G,$U:()=>I,Ue:()=>K,$L:()=>J,FW:()=>P,Ib:()=>O,SP:()=>F});var e=c(73024),f=c.n(e),g=c(76760),h=c.n(g);let i="/proc";function j(a){try{return f().readFileSync(h().join(i,String(a),"cmdline"),"utf8").split("\0").filter(Boolean)}catch{return[]}}function k(a){try{return f().readlinkSync(h().join(i,String(a),"cwd"))}catch{return null}}function l(a){let b;try{b=f().readFileSync(h().join(i,String(a),"stat"),"utf8")}catch{return null}return b.slice(b.lastIndexOf(")")+2).trim().split(/\s+/)}function m(a){try{return(128&f().lstatSync(a).mode)!=0}catch{return!1}}function n(a){let b;try{b=f().readdirSync(i,{withFileTypes:!0})}catch{return}for(let c of b){let b;if(!c.isDirectory()||!/^\d+$/.test(c.name))continue;let d=Number(c.name),e=h().join(i,c.name,"fd");try{b=f().readdirSync(e,{withFileTypes:!0})}catch{continue}for(let c of b){let b,g=h().join(e,c.name);try{b=f().readlinkSync(g)}catch{continue}a(b,d,()=>m(g))}}}let o={name:"linux",pidAlive:function(a){return Number.isInteger(a)&&a>0&&f().existsSync(h().join(i,String(a)))},readArgv:j,readCwd:k,readPpid:function(a){let b=l(a),c=b?Number(b[1]):NaN;return Number.isInteger(c)&&c>1?c:null},readEnvVar:function(a,b){let c;try{c=f().readFileSync(h().join(i,String(a),"environ"),"utf8")}catch{return null}let d=b+"=",e=null;for(let a of c.split("\0"))a.startsWith(d)&&(e=a.slice(d.length));return e},listProcesses:function(){let a,b=[];try{a=f().readdirSync(i,{withFileTypes:!0})}catch{return b}for(let c of a){if(!c.isDirectory()||!/^\d+$/.test(c.name))continue;let a=Number(c.name);b.push({pid:a,argv:j(a),cwd:k(a),tty:function(a){let b=l(a),c=b?Number(b[4]):NaN;return Number.isInteger(c)&&c>0?c:0}(a)})}return b},scanFdTargetsUnder:function(a,b){n(b)},scanFdTargetsFor:function(a,b){n(b)},pidWritesPath:function(a,b){let c,d;try{c=f().realpathSync(b)}catch{c=null}let e=h().join(i,String(a),"fd");try{d=f().readdirSync(e,{withFileTypes:!0})}catch{return!1}for(let a of d){let d,g=h().join(e,a.name);try{d=f().readlinkSync(g)}catch{continue}if((d===b||d===c)&&m(g))return!0}return!1},pidHoldsPath:function(a,b){let c;try{c=f().readdirSync(h().join(i,String(a),"fd"),{withFileTypes:!0})}catch{return!1}for(let d of c)try{if(f().readlinkSync(h().join(i,String(a),"fd",d.name))===b)return!0}catch{continue}return!1}};var p=c(31421);function q(a,b){let c=(0,p.spawnSync)(a,b,{encoding:"utf8",maxBuffer:0x1000000,timeout:1e4});return c.error||"string"!=typeof c.stdout?"":c.stdout}let r=new Map,s=1,t=/^\s*(\d+)\s+(\d+)\s+(\S+)\s+(.*)$/;function u(a,b){let c=0,d="";for(let e of a.split("\n")){if(!e)continue;let a=e[0],f=e.slice(1);if("p"===a)c=Number(f),d="";else if("f"===a)d="";else if("a"===a)d=f;else if("n"===a&&c>0&&f){let a="w"===d||"u"===d;b(f,c,()=>a)}}}let v=null;function w(){let a=Date.now();if(v&&a-v.at<5e3)return v.byPid;let b=function(a){let b=new Map;for(let c of a.split("\n")){let a=t.exec(c);if(!a)continue;let d=Number(a[1]),e=Number(a[2]),f=(a[4]??"").trim().split(/\s+/).filter(Boolean);b.set(d,{ppid:Number.isInteger(e)&&e>1?e:null,tty:function(a){if(!a||"?"===a||"??"===a||"-"===a)return 0;let b=r.get(a);return void 0===b&&(b=s,s+=1,r.set(a,b)),b}(a[3]??""),argv:f})}return b}(q("ps",["-axo","pid=,ppid=,tty=,args="])),c=function(a){let b=new Map,c=0;for(let d of a.split("\n")){if(!d)continue;let a=d[0],e=d.slice(1);"p"===a?c=Number(e):"n"===a&&c>0&&b.set(c,e)}return b}(q("lsof",["-w","-d","cwd","-Fpn"])),d=new Map;for(let[a,e]of b)d.set(a,{argv:e.argv,ppid:e.ppid,tty:e.tty,cwd:c.get(a)??null});return v={at:a,byPid:d},d}let x={name:"portable",pidAlive:function(a){if(!Number.isInteger(a)||a<=0)return!1;try{return process.kill(a,0),!0}catch(a){return"EPERM"===a.code}},readArgv:function(a){return w().get(a)?.argv??[]},readCwd:function(a){return w().get(a)?.cwd??null},readPpid:function(a){return w().get(a)?.ppid??null},readEnvVar:function(){return null},listProcesses:function(){let a=[];for(let[b,c]of w())a.push({pid:b,argv:c.argv,cwd:c.cwd,tty:c.tty});return a},scanFdTargetsUnder:function(a,b){a&&f().existsSync(a)&&u(q("lsof",["-w","+D",a,"-Fpfan"]),b)},scanFdTargetsFor:function(a,b){let c=[...new Set(a.filter(Boolean))];0!==c.length&&u(q("lsof",["-w","-Fpfan","--",...c]),b)},pidWritesPath:function(a,b){let c=!1;return u(q("lsof",["-w","-a","-p",String(a),"-Fpfan","--",b]),(a,b,d)=>{d()&&(c=!0)}),c},pidHoldsPath:function(a,b){let c=!1;return u(q("lsof",["-w","-a","-p",String(a),"-Fpfan","--",b]),()=>{c=!0}),c}},y="portable"===(d=process.env.VIEWER_PROC_BACKEND)?x:"linux"===d||"linux"===process.platform?o:x;var z=c(89333);let A=null,B=null,C=null;function D(a){return Number.isInteger(a)&&a>0&&y.pidAlive(a)}function E(a=!1){let b=Date.now();if(!a&&A&&b-A.at<5e3)return A.map;let c=new Map;return y.scanFdTargetsUnder(z.GH["claude-tasks"],(a,b)=>{a.endsWith(".output")&&!c.has(a)&&c.set(a,b)}),A={at:b,map:c},c}function F(a,b=!1){let c=new Map;for(let b of a){if(c.size>=512)break;if(!b)continue;c.set(b,b);let a=function(a){try{return f().realpathSync(a)}catch{return null}}(b);a&&c.set(a,b)}let d=[...c.keys()].sort().join("\0"),e=Date.now();if(!b&&B&&B.key===d&&e-B.at<5e3)return B.map;let g=new Map;return c.size>0&&y.scanFdTargetsFor([...c.keys()],(a,b,d)=>{let e=c.get(a);e&&!g.has(e)&&d()&&g.set(e,b)}),B={at:e,key:d,map:g},g}function G(a,b){return y.pidWritesPath(a,b)}function H(a,b){return y.pidHoldsPath(a,b)}function I(a){return y.readArgv(a)}function J(a){return y.readCwd(a)}function K(a){return y.readArgv(a).join(" ")}function L(a){for(let b of a.slice(0,2)){let a=h().basename(b);if("claude"===a||"claude.exe"===a)return"claude";if("codex"===a||"codex.exe"===a)return"codex"}return null}let M=new Set(["daemon","--bg-pty-host","--bg-spare"]);function N(a){return a.some(a=>M.has(a))}function O(a){return y.readPpid(a)}function P(a,b){return y.readEnvVar(a,b)}function Q(a=!1){let b=Date.now();if(!a&&C&&b-C.at<5e3)return C.list;let c=[];for(let a of y.listProcesses()){let b=L(a.argv);null===b||N(a.argv)||null!==a.cwd&&c.push({pid:a.pid,engine:b,argv:a.argv,cwd:a.cwd,tty:a.tty})}return C={at:b,list:c},c}},14289:(a,b,c)=>{c.d(b,{Z:()=>k,j:()=>h});var d=c(48161),e=c.n(d),f=c(76760),g=c.n(f);let h=g().join(e().homedir(),".claude","viewer-inbox"),i={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp"},j=/^[A-Za-z0-9._-]+\.(png|jpe?g|gif|webp)$/i;function k(a){let b=a.match(j);if(!b||g().basename(a)!==a)return null;let c=i[(b[1]??"").toLowerCase()];return c?{path:g().join(h,a),mime:c}:null}},14509:(a,b,c)=>{c.d(b,{A9:()=>p,lV:()=>o,uX:()=>m});var d=c(77598),e=c.n(d),f=c(73024),g=c.n(f),h=c(48161),i=c.n(h),j=c(76760),k=c.n(j),l=c(16089);function m(a){let b=i().homedir();for(let c of[k().join(b,".bun","bin",a),k().join(b,".npm-global","bin",a),k().join(b,".local","bin",a),k().join(b,"go","bin",a),"/usr/local/bin/"+a,"/usr/bin/"+a])try{return g().accessSync(c,g().constants.X_OK),c}catch{}return a}function n(a){return"'"+a.replace(/'/g,"'\\''")+"'"}function o(a,b,c={}){if("claude"===a){let a=e().randomUUID(),d=[m("claude")];return c.readOnly?d.push("--permission-mode","plan","--disallowedTools","Edit,Write,NotebookEdit"):d.push("--dangerously-skip-permissions"),d.push("--session-id",a),c.model&&d.push("--model",c.model),{command:d.map(n).join(" "),cwd:b,windowName:"claude-new",transcript:(0,l.eV)(b,a)}}let d=[m("codex")];return c.model&&d.push("-m",c.model),c.effort&&d.push("-c",`model_reasoning_effort=${c.effort}`),c.readOnly&&d.push("--sandbox","read-only"),{command:d.map(n).join(" "),cwd:b,windowName:"codex-new"}}function p(a,b){let c=k().basename(b);if("claude-projects"===a&&c.endsWith(".jsonl")&&!b.includes(k().sep+"subagents"+k().sep)){let a=c.slice(0,-6);return/^[0-9a-f-]{36}$/.test(a)?{command:`${m("claude")} --dangerously-skip-permissions --resume ${a}`,cwd:q(b),windowName:"claude-resume"}:null}if("codex-sessions"===a&&c.endsWith(".jsonl")){let a=c.match(/([0-9a-f-]{36})\.jsonl$/)?.[1];return a?{command:`${m("codex")} resume ${a}`,cwd:q(b),windowName:"codex-resume"}:null}return null}function q(a){return(0,l.tX)(a,{maxLines:30,requireDir:!0})??i().homedir()}},15159:(a,b,c)=>{c.d(b,{em:()=>s,tJ:()=>t,vF:()=>l});var d=c(76760),e=c.n(d),f=c(16089),g=c(52509),h=c(7378),i=c(89333);let j=/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/gi,k=(0,g.E)("codex-cwd");function l(a){return a.endsWith(".jsonl")?a.startsWith(i.GH["claude-projects"]+e().sep)?"claude":a.startsWith(i.GH["codex-sessions"]+e().sep)?"codex":null:null}function m(a){return"idle"!==a.activity&&null===a.pid&&("codex-sessions"===a.root?a.path.endsWith(".jsonl"):"claude-projects"===a.root&&!!a.path.endsWith(".jsonl")&&!e().basename(a.path).startsWith("agent-")&&!a.path.includes(e().sep+"subagents"+e().sep))}function n(a){let b=e().basename(a).match(j);return b?.at(-1)?.toLowerCase()??null}function o(a){let b=a.indexOf("--session-id"),c=b>=0?a[b+1]:void 0;return c?c.toLowerCase():null}function p(a){return e().relative(i.GH["claude-projects"],a).split(e().sep)[0]??""}function q(a){let b=k.get(a);if(void 0!==b&&""!==b)return b;let c=(0,f.tX)(a,{bytes:8192})??"";return k.set(a,c),c}function r(a,b){a.pid=b,a.proc="running"}function s(a){let b=a.filter(m).slice(0,12);if(0===b.length)return;let c=(0,h.SP)(b.map(a=>a.path)),d=new Set,e=[];for(let a of b){let b=c.get(a.path)??null;null!==b&&(0,h.pl)(b)?(r(a,b),d.add(b)):e.push(a)}if(0===e.length)return;let g=(0,h.Bj)().filter(a=>!d.has(a.pid)),i=new Map;for(let a of g){let b=o(a.argv);if(!b)continue;let c=a.engine+":"+b,d=i.get(c);d?d.push(a):i.set(c,[a])}let j=[];for(let a of e){let b=n(a.path),c="codex-sessions"===a.root?"codex":"claude",e=(b?i.get(c+":"+b)??[]:[]).filter(a=>!d.has(a.pid));1===e.length?(r(a,e[0].pid),d.add(e[0].pid)):j.push(a)}if(0===j.length)return;let k=new Map;for(let a of g){if(0===a.tty||d.has(a.pid))continue;let b="claude"===a.engine?"claude:"+(0,f.Me)(a.cwd):"codex:"+a.cwd,c=k.get(b);c?c.push(a):k.set(b,[a])}let l=new Set;for(let a of j){let b=function(a){if("claude-projects"===a.root){let b=p(a.path);return b?"claude:"+b:null}let b=q(a.path);return b?"codex:"+b:null}(a);if(null===b||l.has(b))continue;l.add(b);let c=(k.get(b)??[]).filter(a=>!d.has(a.pid));1===c.length&&(r(a,c[0].pid),d.add(c[0].pid))}}function t(a,b){let c=l(a);if(null===c||!(0,h.pl)(b))return!1;let d=(0,h.$U)(b);if((0,h.Fe)(d)!==c||(0,h.Vt)(d))return!1;if((0,h.FQ)(b,a))return!0;let e=n(a);if(null!==e&&o(d)===e)return!0;let g=(0,h.$L)(b);if(null===g)return!1;if("claude"===c)return(0,f.Me)(g)===p(a);let i=q(a);return""!==i&&i===g}},16089:(a,b,c)=>{c.d(b,{Me:()=>j,eV:()=>k,tX:()=>l});var d=c(73024),e=c.n(d),f=c(48161),g=c.n(f),h=c(76760),i=c.n(h);function j(a){return a.replace(/[^A-Za-z0-9]/g,"-")}function k(a,b){return i().join(g().homedir(),".claude","projects",j(a),b+".jsonl")}function l(a,b={}){let c=function(a,b=65536){try{let c=e().openSync(a,"r");try{let a=Buffer.alloc(b),d=e().readSync(c,a,0,a.length,0);return a.toString("utf8",0,d)}finally{e().closeSync(c)}}catch{return""}}(a,b.bytes??65536);if(!c)return null;let d=c.split("\n");for(let a of(void 0!==b.maxLines&&(d=d.slice(0,b.maxLines)),d))if(a.trim())try{let c=JSON.parse(a),d="string"==typeof c.cwd?c.cwd:"string"==typeof c.payload?.cwd?c.payload.cwd:null;if(!d||b.requireDir&&!e().existsSync(d))continue;return d}catch{}return null}},17341:(a,b,c)=>{c.d(b,{M:()=>k,x:()=>l});var d=c(23855),e=c(52509),f=c(95544);let g=(0,e.E)("questions");function h(a){return(0,f.r$)(a.timestamp)??(0,f.r$)(a.created_at)??new Date().toISOString()}function i(a){let b=(0,f.r$)(a.label)?.trim();return b?{label:b.replace(/\s*\(Recommended\)\s*$/i,"").trim()||b,description:(0,f.r$)(a.description)?.trim()??"",recommended:/\(Recommended\)\s*$/i.test(b)}:null}function j(a){let b=(0,f.r$)(a.question)?.trim();if(!b)return null;let c=(0,f.Em)(a.options).map(i).filter(a=>null!==a);return c.sort((a,b)=>Number(b.recommended)-Number(a.recommended)),{question:b,header:(0,f.r$)(a.header)?.trim()??"Питання",multiSelect:!0===a.multiSelect,options:c}}function k(a,b,c){for(let e of(0,d.He)(a,b).reverse()){let a=function(a,b){if((0,f.r$)(a.tool_use_id)===b){let b=a.content;return"string"==typeof b?b:Array.isArray(b)?b.map(a=>"string"==typeof a?a:(0,f.r$)((0,f.xK)(a)?.text)??"").filter(Boolean).join("\n"):JSON.stringify(a)}for(let c of(0,f.Em)((0,f.xK)(a.message)?.content)){if("tool_result"!==c.type||(0,f.r$)(c.tool_use_id)!==b)continue;let a=c.content;if("string"==typeof a)return a;if(Array.isArray(a))return a.map(a=>"string"==typeof a?a:(0,f.r$)((0,f.xK)(a)?.text)??"").filter(Boolean).join("\n");return JSON.stringify(c)}return null}(e,c);if(null!==a)return a.trim()||"відповідь записана в транскрипті"}return null}function l(a){if("claude-projects"!==a.root||!a.path.endsWith(".jsonl")||"running"!==a.proc||null===a.pid)return null;let b=g.get(a.path);if(b?.[0]===a.size)return b[1];let c=null,e=new Set;for(let b of(0,d.He)(a.path,a.size).reverse()){let d=function(a){let b=(0,f.r$)(a.tool_use_id);if(b)return b;for(let b of(0,f.Em)((0,f.xK)(a.message)?.content)){let a=(0,f.r$)(b.tool_use_id);if("tool_result"===b.type&&a)return a}return null}(b);if(d){e.add(d);continue}let g=function(a){if("assistant"!==a.type)return null;for(let b of(0,f.Em)((0,f.xK)(a.message)?.content)){if("tool_use"!==b.type)continue;let a=(0,f.r$)(b.id),c=(0,f.r$)(b.name),d=(0,f.xK)(b.input)??{};if(a&&("AskUserQuestion"===c||"ExitPlanMode"===c))return{id:a,name:c,input:d}}return null}(b);if(!g||e.has(g.id))break;if("AskUserQuestion"===g.name){let d=(0,f.Em)(g.input.questions).map(j).filter(a=>null!==a);if(!d.length)break;c={kind:"question",toolUseId:g.id,transcriptPath:a.path,pid:a.pid,paneTarget:null,askedAt:h(b),questions:d};break}let i=(0,f.r$)(g.input.plan)?.trim();if(!i)break;c={kind:"plan",toolUseId:g.id,transcriptPath:a.path,pid:a.pid,paneTarget:null,askedAt:h(b),plan:i};break}return g.set(a.path,[a.size,c]),c}},23855:(a,b,c)=>{c.d(b,{He:()=>j,Hz:()=>k});var d=c(73024),e=c.n(d),f=c(52509),g=c(95544),h=c(7378);let i=(0,f.E)("turn");function j(a,b,c=131072){let d,f=0;try{let g=e().openSync(a,"r");try{f=Math.max(0,b-c);let a=Buffer.alloc(Math.max(0,b-f));e().readSync(g,a,0,a.length,f),d=a.toString("utf8")}finally{e().closeSync(g)}}catch{return[]}let g=d.split("\n");f>0&&g.length&&(g=g.slice(1));let h=[];for(let a of g){let b=a.trim();if(b)try{let a=JSON.parse(b);a&&"object"==typeof a&&!Array.isArray(a)&&h.push(a)}catch{}}return h}function k(a,b,c,d,e=null){let f=Date.now()/1e3-c;if("codex-jobs"===a){let a=e??(0,g.Vh)(b.replace(/\.log$/,".json"));if(a){if("running"===a.status){let b=(0,g.Vg)(a.pid);return null!==b&&(0,h.pl)(b)?{state:"live",reason:"job_pid_alive"}:{state:f<900?"recent":"idle",reason:"job_pid_dead"}}return{state:f<900?"recent":"idle",reason:"job_finished"}}}if("claude-tasks"===a&&b.endsWith(".output"))return(0,h.$w)().has(b)?{state:"live",reason:"output_held"}:{state:f<900?"recent":"idle",reason:"output_released"};if(b.endsWith(".jsonl")){let c,e=i.get(b);if(e?.[0]===d)c=e[1];else{var l;l=a.startsWith("codex"),c=function(a,b){let c=null;for(let d of[...a].reverse()){if(b){let a=(0,g.xK)(d.payload)??{},b=(0,g.r$)(a.type);if("session_meta"===d.type||"token_count"===b||"reasoning"===b||null===b)continue;if("task_complete"===b||"turn_complete"===b||"turn_aborted"===b)return"done";if("task_started"===b||"turn_started"===b||"user_message"===b)return"busy";if("agent_message"===b||"message"===b&&"assistant"===a.role){c??="done";continue}if("message"===b)return"busy";c??="busy";continue}let a=d.type;if("assistant"===a){let a=(0,g.r$)(((0,g.xK)(d.message)??{}).stop_reason);return"end_turn"===a||"stop_sequence"===a?"done":"busy"}if("user"===a)return"busy"}return c}(j(b,d),l),i.set(b,[d,c])}if("busy"===c)return f<180?{state:"live",reason:"jsonl_turn_open"}:{state:"stalled",reason:"jsonl_turn_stalled"};if("done"===c)return{state:f<900?"recent":"idle",reason:"jsonl_turn_completed"}}return f<20?{state:"live",reason:"mtime_fresh"}:f<900?{state:"recent",reason:"mtime_recent"}:{state:"idle",reason:"mtime_old"}}},25750:(a,b,c)=>{c.d(b,{J8:()=>s,if:()=>p,Sn:()=>q,V_:()=>r});var d=c(73024),e=c.n(d);let f=/^\s*(?:VERDICT:\s*)?(REQUEST_CHANGES|APPROVE|COMMENT)\b/m,g=/^\s*(\d+)[.)]\s+(.*)$/,h=/(?:\[(P[0-3])\]|\b(Critical|High|Medium|Low|Info|P[0-3])\b)/i,i=/((?:\.{1,2}\/|\/|~\/)?[\w@.+-][\w@.+\-/]*\.(?:tsx?|jsx?|mjs|cjs|mts|cts|py|go|rs|md|json|ya?ml|toml|css|scss|html|sql|sh|env|ftl|txt))(?::(\d+))?/i,j=/\[([^\]]+)\]\(([^)\s]+)\)/,k=/([\w.-]*(?:api[_-]?key|access[_-]?token|refresh[_-]?token|authorization|bearer|secret|password|passwd|pwd|token))\b(\s*[:=]\s*)(["']?)[^\s"',}]+/gi;function l(a){let b=a.replace(k,(a,b,c,d)=>`${b}${c}${d}[redacted]`);return{raw:b.slice(0,24e3),truncated:b.length>24e3}}var m=c(23855),n=c(95544),o=c(98590);function p(a){for(let b of(0,m.He)(a.path,a.size).reverse()){let c=Date.parse(String(b.timestamp??""))||1e3*a.mtime;if("codex-sessions"===a.root){let a=(0,n.xK)(b.payload)??{},d=(0,n.r$)(a.type);if("agent_message"===d)return{text:(0,n.r$)(a.message)??"",ts:c};if("message"===d&&"assistant"===a.role){let b=(0,n.Em)(a.content).map(a=>(0,n.r$)(a.text)??(0,n.r$)(a.input_text)??"").join("\n").trim();if(b)return{text:b,ts:c}}}if("claude-projects"===a.root&&"assistant"===b.type){let a=(0,n.Em)((0,n.xK)(b.message)?.content).filter(a=>"text"===a.type).map(a=>(0,n.r$)(a.text)??"").join("\n").trim();if(a)return{text:a,ts:c}}}return null}function q(a){let b=a.match(f)?.[1];if(!b)return null;let c=function(a){let b=a.match(f)?.[1];if(!b)return null;let c=[],d=[],e=null,k=()=>{let a,b,d,f=e?.trim();f&&c.push((a=function(a){let b=a.toUpperCase();if("P0"===b||"P1"===b||"P2"===b||"P3"===b)return b;let c=a.toLowerCase();return"critical"===c?"Critical":"high"===c?"High":"medium"===c?"Medium":"low"===c?"Low":"Info"}(f.match(h)?.[1]??f.match(h)?.[2]??"Info"),b=function(a){let b=a.match(j);if(b){var c;let a,d=(a=(c=(b[2]??"").replace(/^file:\/\//,"")).match(/^(.*?):(\d+(?:-\d+)?)$/))?{target:a[1]??c,line:a[2]}:{target:c},e=d.line?Number(d.line.split("-",1)[0]):void 0;return{file:d.target||b[1],line:Number.isFinite(e)?e:void 0}}let d=a.match(i);if(!d)return{};let e=d[2]?Number(d[2]):void 0;return{file:d[1],line:Number.isFinite(e)?e:void 0}}(f),d=function(a){let b=a,c=b.match(h);if(c&&void 0!==c.index){let a=b.slice(c.index+c[0].length).replace(/^[\s.:–—-]+/,"");a&&(b=a)}return b.replace(j,"$1").replace(/`([^`]*)`/g,"$1").replace(/\s+/g," ").trim().slice(0,200)}(f)||f.slice(0,200)||"Finding",{severity:a,file:b.file,line:b.line,title:d,body:l(f).raw})),e=null};for(let b of a.split("\n")){let a=b.trimEnd(),h=a.match(g);if(h){k(),e=h[2]??"";continue}let i=a.trim();if(null!==e){i?e=`${e}
3
+ ${i}`:k();continue}!(!i||f.test(a)||/^(findings?|summary|open questions?|tests?|residual risk)\s*:?\s*$/i.test(i))&&0===c.length&&d.length<3&&i.length<=240&&d.push(i)}k();let m=c.filter(a=>h.test(a.body)).length;return b||/^findings?\s*:?$/im.test(a)||m>=2||m>=1&&/\b(review|request_changes|approve|comment)\b/i.test(a)?{kind:"review",ts:null,verdict:b,findings:c,summary:d,raw:l(a).raw}:null}(a);return{verdict:b,findingsCount:c?.findings.length??0,content:(0,o.Sn)(b,a)}}function r(a){if(!a.findingsPath)return null;try{return q(e().readFileSync(a.findingsPath,"utf8"))}catch{return null}}function s(a,b){if(!a.reviewerPath)return null;let c=b.get(a.reviewerPath);if(!c)return null;let d=p(c);return d?q(d.text):null}},26474:(a,b,c)=>{c.d(b,{A6:()=>r,N0:()=>q,OA:()=>t,_b:()=>s,a9:()=>p});var d=c(73024),e=c.n(d),f=c(48161),g=c.n(f),h=c(76760),i=c.n(h),j=c(7378);let k=i().join(g().homedir(),".claude","viewer-state","handoff-lineage.json"),l=null,m=null,n=!1;function o(){if(l&&m)return{panes:l,children:m};l=new Map,m=new Map;let a={};try{a=JSON.parse(e().readFileSync(k,"utf8"))}catch{}for(let[b,c]of Object.entries(a.panes??{})){let a=Number(b);Number.isInteger(a)&&a>0&&"string"==typeof c&&(0,j.pl)(a)&&l.set(a,c)}for(let[b,c]of Object.entries(a.children??{}))"string"==typeof c&&e().existsSync(b)&&m.set(b,c);let b=Object.keys(a.panes??{}).length+Object.keys(a.children??{}).length;return l.size+m.size!==b&&(n=!0),{panes:l,children:m}}function p(a,b){if(!Number.isInteger(a)||a<=0)return;let c=o();c.panes.get(a)!==b&&(c.panes.set(a,b),n=!0,t())}function q(a){return o().panes.get(a)??null}function r(a,b){let c=o();if(c.children.get(a)!==b){for(c.children.set(a,b);c.children.size>2e3;){let a=c.children.keys().next().value;if(void 0===a)break;c.children.delete(a)}n=!0}}function s(a){return o().children.get(a)??null}function t(){if(!n)return;n=!1;let a=o();try{e().mkdirSync(i().dirname(k),{recursive:!0}),e().writeFileSync(k,JSON.stringify({panes:Object.fromEntries([...a.panes].map(([a,b])=>[String(a),b])),children:Object.fromEntries(a.children)}))}catch{}}},27359:(a,b,c)=>{c.d(b,{EB:()=>e,WM:()=>y,_1:()=>o,cZ:()=>w,d3:()=>z,dC:()=>m,fm:()=>v,g2:()=>l,ye:()=>n});let d=/^\s*[❯›]/,e=/\? for shortcuts|bypass permissions on|Press up to edit|⏎ send|Context \d+% used/,f=/Resume from summary/,g=/Do you trust|trust this folder|trust the contents of this directory/i,h=/Enter to confirm|Press enter to continue/i,i=/Allow command\?|Do you want to proceed\?|Press enter to approve|approve this (command|action)|\(y\/n\)|Yes, (allow|proceed|run)/i,j=/You(?:'ve| have) (?:hit|reached) (?:your|the) .{0,24}limit|(?:usage|rate).?limit (?:reached|hit|exceeded)|out of (?:quota|credits)|\d+.hour limit reached|limit resets/i,k=new Set(["zsh","bash","fish","sh","dash"]);function l(a){return null!==a&&k.has(a)}function m(a){let b=a.split("\n");for(let a=b.length-1;a>=0;a-=1){let c=b[a]??"";if(d.test(c))return c}return""}function n(a){return f.test(a)?"resume_picker":g.test(a)?"trust_prompt":h.test(a)?"startup_gate":null}function o(a){let b=a.split("\n"),c=-1;for(let a=b.length-1;a>=0;a-=1)if(d.test(b[a]??"")){c=a;break}if(-1!==c){let a=b.slice(c+1).join("\n");if(e.test(a)&&!i.test(a)&&!j.test(a))return null}let f=b.slice(-14).join("\n");return i.test(f)?"approval_prompt":j.test(f)?"rate_limit":null}let p=/^\s*❯?\s*\d+\.\s+\S/m,q=/Enter to (select|confirm|submit)/,r=/^\s*[─━—]{6,}\s*$/,s=/[☐☑✔☒]/,t=/^\s*(❯\s*)?(\d{1,2})\.\s+(\S.*)$/,u=/\s*\(Recommended\)\s*$/i;function v(a){let b=a.split("\n").map(a=>a.replace(/\s+$/,"")),c=-1;for(let a=b.length-1;a>=0;a-=1)if(q.test(b[a]??"")){c=a;break}if(-1===c)return null;let d=-1;for(let a=c-1;a>=Math.max(0,c-40);a-=1){let c=t.exec(b[a]??"");if(c&&1===Number(c[2])){d=a;break}}if(-1===d)return null;let e=[];for(let a=d;a<c;a+=1){let c=b[a]??"";if(!c.trim()||r.test(c))continue;let d=t.exec(c);if(d){let a=d[3].trim(),b=a.replace(u,"").trim();e.push({value:Number(d[2]),label:b||a,description:"",recommended:u.test(a)});continue}let f=e[e.length-1];f&&/^\s{2,}\S/.test(c)&&(f.description=f.description?`${f.description} ${c.trim()}`:c.trim())}if(e.length<2||e.some((a,b)=>a.value!==b+1))return null;let f=[],g=d-1;for(;g>=0&&!(b[g]??"").trim();)g-=1;for(let a=g;a>=0&&f.length<8;a-=1){let c=b[a]??"";if(!c.trim()||r.test(c)||s.test(c)||t.test(c))break;f.unshift(c.trim())}let h=f.join(" ").trim();if(!h)return null;let i=[],j=g-f.length;for(;j>=0&&!(b[j]??"").trim();)j-=1;let k=j>=0?b[j]??"":"";if(s.test(k))for(let a of k.replace(/[←→]/g," ").split(/\s{2,}/)){let b=a.replace(/[☐☑✔☒]/g,"").trim();b&&i.push({label:b,done:/[☑✔]/.test(a)})}return{question:h,tabs:i,options:e}}function w(a){if(null!==o(a)||g.test(a))return!0;let b=a.split("\n").slice(-14).join("\n");return p.test(b)&&!e.test(b)}let x=/esc to interrupt|ctrl\+c to (?:stop|cancel)|Interrupting/i;function y(a){if(w(a))return!1;let b=a.split("\n").slice(-14).join("\n");return""!==m(a)&&e.test(b)&&!x.test(b)}function z(a){return a.split("\n").filter(a=>a.trim()).slice(-3).join(" | ").slice(0,300)}},30795:(a,b,c)=>{c.d(b,{cr:()=>d});function d(a,b=160){let c=a.replace(/\[([^\]]+)\]\(([^)]+)\)/g,"$1").replace(/`([^`]+)`/g,"$1").replace(/[*_~#>]+/g,"").replace(/\s+/g," ").trim().replace(/(?:\/[^\s)]+){3,}/g,a=>{if(a.length<=40)return a;let b=a.split("/").filter(Boolean);return b.length>=2?".../"+b.slice(-2).join("/"):a}).replace(/\s+/g," ").trim();return c.length>b?c.slice(0,b-1).trimEnd()+"…":c}},38905:(a,b,c)=>{c.d(b,{vT:()=>s,ni:()=>t,_p:()=>p,n1:()=>u});var d=c(77598),e=c.n(d),f=c(16089),g=c(1785),h=c(27359),i=c(75051),j=c(3249),k=c(51906),l=c(31421),m=c(59680),n=c(98590);function o(a){return!a||"object"!=typeof a||Array.isArray(a)||"claude"!==a.engine&&"codex"!==a.engine?null:{engine:a.engine,model:"string"==typeof a.model&&a.model.trim()?a.model.trim():null,effort:"string"==typeof a.effort&&a.effort.trim()?a.effort.trim():null}}async function p(a,b){let c=b.find(b=>b.path===a.implementerPath);if(!c)return{error:"implementer transcript is unknown",status:404};if("claude-projects"!==c.root&&"codex-sessions"!==c.root)return{error:"implementer must be a Claude or Codex session",status:400};let d=function(a){let b=(0,n.Vd)();if(a.preset){let c=b.find(b=>b.name===a.preset);return c?{implementer:{...c.implementer},reviewer:{...c.reviewer}}:null}let c=o(a.roles?.implementer),d=o(a.roles?.reviewer);return c&&d?{implementer:c,reviewer:d}:null}(a);if(!d)return{error:"invalid flow roles or preset",status:400};let g="merge-base"===a.baseMode?"merge-base":"head",h=(0,f.tX)(c.path);if(!h)return{error:"не вдалося визначити робочу директорію сесії",status:409};let i="string"==typeof a.baseRef&&a.baseRef.trim()?{ok:!0,sha:a.baseRef.trim()}:function(a,b){let c="head"===b?["rev-parse","HEAD"]:["merge-base","HEAD",function(a){let b=(0,l.spawnSync)("git",["symbolic-ref","--quiet","--short","refs/remotes/origin/HEAD"],{cwd:a,encoding:"utf8"});if(0===b.status&&b.stdout.trim())return b.stdout.trim().replace(/^origin\//,"origin/");for(let b of["origin/main","origin/master","main","master"])if(0===(0,l.spawnSync)("git",["rev-parse","--verify",b],{cwd:a,encoding:"utf8"}).status)return b;return null}(a)??"origin/main"],d=(0,l.spawnSync)("git",c,{cwd:a,encoding:"utf8"});if(0!==d.status)return{ok:!1,error:(d.stderr||d.stdout||"failed to resolve git base ref").trim()};let e=d.stdout.trim();return e?{ok:!0,sha:e}:{ok:!1,error:"git returned an empty base ref"}}(h,g);if(!i.ok)return{error:i.error,status:409};let k=(0,n.mL)();if(k.find(a=>a.implementerPath===c.path&&null===a.closedAt&&"closed"!==a.state))return{error:"implementer already has an active flow",status:409};let p={id:e().randomUUID().slice(0,8),template:"implement-review-loop",project:c.project,cwd:h,implementerPath:c.path,roles:d,baseRef:i.sha,baseMode:g,mode:"manual"===a.mode?"manual":"auto",reviewerMode:"pane"===a.reviewerMode?"pane":"headless",roundLimit:Number.isInteger(a.roundLimit)&&a.roundLimit>0?Math.min(a.roundLimit,50):5,state:"waiting_ready",pausedState:null,stateDetail:null,rounds:[],createdAt:(0,j.Ec)(),closedAt:null};k.push(p),(0,n.tu)(k);try{await (0,j.iq)(p,new Map(b.map(a=>[a.path,a])),(0,m.SB)())}catch(a){p.state="paused",p.pausedState="waiting_ready",p.stateDetail=a instanceof Error?a.message:String(a),(0,n.tu)(k)}return{flow:p}}function q(a){return"string"==typeof a.note&&a.note.trim()?a.note.trim().slice(0,2e3):null}async function r(a,b){if((0,k.T)(a.id,b.n,b.reviewerPid??null),"pane"===a.reviewerMode)try{let a=b.reviewerPane;if(a){let b=await (0,i.RZ)(a.paneId);b&&b.windowName===a.windowName&&!(0,h.g2)(b.command)&&await (0,i.VT)(a.paneId)}else if(b.reviewerPath){let a=await (0,g.AB)(b.reviewerPath);null!==a&&await (0,i.VT)(a)}}catch{}}async function s(a){let b=(0,n.mL)(),c=b.find(b=>b.id===a);if(!c)return{error:"flow not found",status:404};let d=(0,j.Hw)(c);return"reviewing"===c.state&&d?(await r(c,d),d.error="cancelled by user",c.state="needs_decision",c.stateDetail="round cancelled by user",(0,n.tu)(b),{flow:c}):{error:"no reviewer is running for this flow",status:409}}async function t(a){let b=(0,n.mL)(),c=b.find(b=>b.id===a);if(!c)return{error:"flow not found",status:404};let d=(0,j.Hw)(c);return d&&null===d.verdict&&!d.error&&await r(c,d),c.state="closed",c.closedAt=(0,j.Ec)(),c.stateDetail=null,(0,n.tu)(b),{flow:c}}function u(a,b){let c=(0,n.mL)(),d=c.find(b=>b.id===a);if(!d)return{error:"flow not found",status:404};let e=(0,j.Hw)(d);if("pause"===b.action)"paused"!==d.state&&"closed"!==d.state&&(d.pausedState=d.state,d.state="paused",d.stateDetail="paused by user");else if("resume"===b.action)"paused"===d.state&&(d.state=d.pausedState&&"paused"!==d.pausedState?d.pausedState:"waiting_ready",d.pausedState=null,d.stateDetail=null);else if("set-mode"===b.action){if("auto"!==b.mode&&"manual"!==b.mode)return{error:"mode must be auto or manual",status:400};d.mode=b.mode}else if("advance"===b.action){if("waiting_ready"===d.state)d.rounds.push((0,j.xz)(d,"button",q(b))),d.state="manual"===d.mode?"spawn_pending":"spawning";else if("spawn_pending"===d.state)d.state="spawning";else{if("relay_pending"!==d.state)return{error:"flow cannot advance from its current state",status:409};d.state="relaying"}d.stateDetail=null}else if("retry-round"===b.action){if("needs_decision"!==d.state||!e)return{error:"flow cannot retry from its current state",status:409};(0,k.T)(d.id,e.n,e.reviewerPid??null),Object.assign(e,{reviewerPath:null,sessionId:null,reviewerPid:null,reviewerPane:null,findingsPath:null,verdict:null,findingsCount:null,readyNote:q(b)??e.readyNote,startedAt:(0,j.Ec)(),spawnStartedAt:null,relayStartedAt:null,reviewedAt:null,relayedAt:null,error:null}),d.state="manual"===d.mode?"spawn_pending":"spawning",d.stateDetail=null}else if("extend"===b.action){let a=Number.isInteger(b.rounds)&&b.rounds&&b.rounds>0?Math.min(b.rounds,20):1;d.roundLimit>0&&(d.roundLimit+=a),"needs_decision"===d.state&&(d.state="waiting_ready",d.stateDetail=null)}else if("set-round-limit"===b.action){let a=b.rounds;if(!Number.isInteger(a)||void 0===a||a<0||a>50)return{error:"rounds must be an integer 0–50 (0 = unlimited)",status:400};d.roundLimit=0===a?0:Math.max(a,d.rounds.length),"needs_decision"===d.state&&"round limit reached"===d.stateDetail&&(0===d.roundLimit||d.roundLimit>d.rounds.length)&&(d.state="waiting_ready",d.stateDetail=null)}else if("another-round"===b.action){if("done_comment"!==d.state)return{error:"flow is not waiting for another round",status:409};d.closedAt=null,d.state="waiting_ready",d.stateDetail=null}return e&&"spawning"===d.state&&(e.error=null),(0,n.tu)(c),{flow:d}}},41017:(a,b,c)=>{c.d(b,{zN:()=>X,WD:()=>Y,w1:()=>W,u1:()=>U});var d=c(77598),e=c.n(d),f=c(73024),g=c.n(f),h=c(76760),i=c.n(h),j=c(14509),k=c(16089),l=c(38905),m=c(25750),n=c(98590),o=c(26474),p=c(70107),q=c(27359),r=c(75051),s=c(31421),t=c(7378),u=c(46825);let v=(a,b,c)=>{let d=(0,s.spawnSync)(a,b,{cwd:c,encoding:"utf8"});return d.error?{code:null,stdout:"",stderr:d.error.message}:{code:d.status,stdout:d.stdout??"",stderr:d.stderr??""}};function w(a,b){let c=(b.stderr||b.stdout||"no output").trim();return{ok:!1,error:`${a}: ${c}`}}function x(a){let b=a.template.setup;if(!b)return{pid:null,error:"workflow has no setup command"};let c=(0,u.VO)(a.id);g().mkdirSync(i().dirname(c),{recursive:!0}),g().rmSync(c,{force:!0});let d=g().openSync((0,u._F)(a.id),"w"),e=g().openSync((0,u.RK)(a.id),"w");try{let f=(0,s.spawn)("sh",["-c",'sh -c "$LLV_SETUP_CMD"; printf \'%s\' "$?" > "$LLV_SETUP_EXIT"'],{cwd:a.worktreeDir,env:{...process.env,LLV_SETUP_CMD:b,LLV_SETUP_EXIT:c},detached:!0,stdio:["ignore",d,e]});return f.unref(),{pid:f.pid??null}}catch(a){return{pid:null,error:a instanceof Error?a.message:String(a)}}finally{g().closeSync(d),g().closeSync(e)}}function y(a){try{return g().readFileSync(a,"utf8")}catch{return""}}function z(a){let b=y((0,u.VO)(a.id)).trim();if(""!==b){if("0"===b)return{status:"done",detail:""};let c=y((0,u.RK)(a.id)).trim().split("\n").slice(-3).join("\n");return{status:"failed",detail:`setup exited with code ${b}${c?`: ${c}`:""}`}}return null!=a.setupPid&&(0,t.pl)(a.setupPid)?{status:"running",detail:""}:{status:"failed",detail:"setup was interrupted before it finished"}}function A(a){let b=a.task.split("\n").map(a=>a.trim()).find(Boolean)??a.name;return b.length>72?b.slice(0,69)+"…":b}function B(a,b){let c=[];for(let d of a.stageRuns){if(d.index>=b||!d.doneAt)continue;let e=a.template.stages[d.index],f=e?.kind==="implement"?e.scope:`stage ${d.index+1}`;c.push(`- Stage ${d.index+1} (${f}): ${d.doneNote||"done, no note left"}`)}return c.length?["Notes from the stages already finished in this worktree:",...c,""]:[]}function C(a){return a.template.verify?[`Before declaring the stage done, verify your work: run \`${a.template.verify}\` and get it green.`]:["Before declaring the stage done, verify your work with the project's own build/test commands."]}let D=new Set(["approved","closed"]),E=new Set(["needs_decision","paused"]),F=/^STAGE_DONE:\s*(.*)$/m;function G(){return{exec:v,startSetup:x,setupStatus:z,spawnAgent:async(a,b,c)=>{let d=(0,j.lV)(a.engine,b,{model:a.model,effort:a.effort}),e=await (0,r.Tk)(d,c);return{paneId:e.paneId,transcript:d.transcript??null,panePid:e.panePid??null}},paneAgentAlive:async a=>{let b=await (0,r.RZ)(a);return null!==b&&!(0,q.g2)(b.command)},headCwd:a=>(0,k.tX)(a),lastMessage:m.if,createFlow:l._p,advanceFlow:(a,b)=>void(0,l.n1)(a,{action:"advance",note:b}),closeFlow:l.ni,getFlow:a=>(0,n.mL)().find(b=>b.id===a)??null,findFlowByImplementer:a=>(0,n.mL)().filter(b=>b.implementerPath===a).sort((a,b)=>a.createdAt<b.createdAt?1:-1)[0]??null,projectForCwd:p.hY,linkChild:(a,b)=>{(0,o.A6)(a,b),(0,o.OA)()},now:()=>new Date().toISOString()}}let H=new Set;function I(a,b){return`${a.id}:${b.index}`}function J(a,b){a.pausedState=a.state,a.state="needs_decision",a.stateDetail=b}function K(a){return a.stageRuns[a.stageIndex]??null}function L(a){if(!a)return 0;let b=Date.parse(a);return Number.isFinite(b)?b:0}function M(a,b){for(let c=b-1;c>=0;c-=1){let b=a.stageRuns[c];if(b?.agentPath)return b.agentPath}return a.srcPath??null}function N(a){a.stageIndex+=1;let b=a.template.stages[a.stageIndex];a.state=b?.kind==="review-loop"?"reviewing":"implementing",a.stateDetail=null}async function O(a,b,c,d,e,f,g){if(!b.startedAt){b.startedAt=f.now(),H.add(I(a,b)),g();try{let e=await f.spawnAgent(c,a.worktreeDir,d);if(b.paneId=e.paneId,e.transcript){b.agentPath=e.transcript;let c=M(a,b.index);c&&f.linkChild(e.transcript,c)}}catch(b){J(a,b instanceof Error?b.message:String(b))}return"spawning"}if(!b.paneId&&!H.has(I(a,b)))return J(a,"stage agent spawn was interrupted by a restart"),"spawning";if(!b.agentPath){let d,g,h,j=(d=L(b.startedAt)/1e3-5,g=function(a){let b=new Set;for(let c of a.stageRuns)c.agentPath&&b.add(c.agentPath);return a.fixerPath&&b.add(a.fixerPath),b}(a),h=e.filter(b=>b.engine===c.engine&&("claude-projects"===b.root||"codex-sessions"===b.root)&&!b.path.includes(i().sep+"subagents"+i().sep)&&b.mtime>=d&&!g.has(b.path)&&f.headCwd(b.path)===a.worktreeDir).sort((a,b)=>b.mtime-a.mtime)[0],h?.path??null);if(j){b.agentPath=j;let c=M(a,b.index);return c&&f.linkChild(j,c),"ready"}return b.paneId&&!await f.paneAgentAlive(b.paneId)&&J(a,"stage agent died before its transcript appeared"),"waiting"}return"ready"}async function P(a,b,c){if(!a.baseRef){let d=function(a,b){let c=b("git",["rev-parse","--abbrev-ref","HEAD"],a.repoDir);if(0!==c.code)return w("resolving the repo branch",c);let d=c.stdout.trim();if(!d||"HEAD"===d)return{ok:!1,error:"the repo checkout is detached; a workflow needs a branch to target"};let e=b("git",["worktree","add","-b",a.branch,a.worktreeDir,"HEAD"],a.repoDir);if(0!==e.code){let c=b("git",["rev-parse","--abbrev-ref","HEAD"],a.worktreeDir);if(0!==c.code||c.stdout.trim()!==a.branch)return w("git worktree add",e)}let f=b("git",["rev-parse","HEAD"],a.worktreeDir);if(0!==f.code)return w("resolving the workflow base ref",f);let g=f.stdout.trim();return g?{ok:!0,baseBranch:d,baseRef:g}:{ok:!1,error:"git returned an empty base ref"}}(a,b.exec);if(!d.ok)return void J(a,d.error);a.baseBranch=d.baseBranch,a.baseRef=d.baseRef,c()}if(a.template.setup){if(null==a.setupPid&&"done"!==b.setupStatus(a).status){let c=b.startSetup(a);return null==c.pid?void J(a,c.error??"setup failed to start"):void(a.setupPid=c.pid)}let c=b.setupStatus(a);if("running"===c.status)return;if("failed"===c.status)return void J(a,c.detail)}a.state="implementing",a.stateDetail=null}async function Q(a,b,c,d,e){var f,g;let h,i,j,k=K(a),l=(f=a.stageIndex,h=a.template.stages[f],h?.kind==="implement"?h.agent:h?.kind==="review-loop"?h.fixer:null);if(!k||!l)return void J(a,"stage index points outside the template");if(k.doneAt){"auto"===a.mode&&N(a);return}if("ready"!==await O(a,k,l,(g=a.stageIndex,i=a.template.stages[g],j=i?.kind==="implement"?i.scope:"",[`You are stage ${g+1} of workflow "${a.name}", running in the dedicated worktree ${a.worktreeDir} on branch ${a.branch}.`,"","Task brief:",a.task.trim(),"",`Your scope for this stage: ${j}`,"Stay inside that scope — other stages own the rest of the work.","",...B(a,g),...C(a),"Commit your work in this worktree; later stages and the final PR build on your commits.","","When the stage is complete, end your final assistant message with a line that starts exactly with:","STAGE_DONE: <one-line note for the next stage>","Do not print the STAGE_DONE marker now and never quote it at the start of a line when acknowledging these instructions — print it only when the stage is actually complete. The note travels to the next stage's kickoff, so state where the contract lives and what the next stage should build on."].join("\n")),b,d,e))return;let m=c.get(k.agentPath);if(!m)return;let n=function(a,b,c){if("live"===b.activity||"jsonl_turn_open"===b.activityReason||"jsonl_turn_stalled"===b.activityReason)return null;let d=c.lastMessage(b);return!d||d.ts<=L(a.startedAt)?null:d.text.match(F)?.[1]?.trim()??null}(k,m,d);if(null!==n){k.doneAt=d.now(),k.doneNote=n||null,"auto"===a.mode&&N(a);return}k.paneId&&!await d.paneAgentAlive(k.paneId)&&J(a,"stage agent pane died before STAGE_DONE")}async function R(a,b,c,d){let e,f,g=K(a),h=(e=a.template.stages.at(-1),e?.kind==="review-loop"?e:null);if(!g||!h)return void J(a,"the template has no review-loop stage");if(g.doneAt){"auto"===a.mode&&(a.state="finishing",a.stateDetail=null);return}if("ready"!==await O(a,g,h.fixer,(f=a.template.stages.length-1,[`You are the fixer of workflow "${a.name}", running in the dedicated worktree ${a.worktreeDir} on branch ${a.branch}.`,"","Task brief:",a.task.trim(),"",...B(a,f),"The implementation stages above are finished. A review loop starts now: a fresh reviewer examines the full workflow diff each round and its findings arrive here as messages.","","For each finding, apply the fix or argue against it. Respond to every finding with:","FIXED","or","REJECTED — <reason>","Give concrete arguments for rejections because the next reviewer is fresh and blind to previous discussion.","",...C(a),"Commit the fixes you apply. When every finding is addressed and the work is reviewable again, end your final assistant message with a line that starts exactly with:","REVIEW_READY: <one-line note>","Do not print the REVIEW_READY marker now and never quote it at the start of a line when acknowledging these instructions — print it only after addressing a round's findings."].join("\n")),b,c,d))return;if(a.fixerPath||(a.fixerPath=g.agentPath),!a.flowId){let e=c.findFlowByImplementer(a.fixerPath);if(e){a.flowId=e.id;return}let f=await c.createFlow({implementerPath:a.fixerPath,roles:{implementer:h.fixer,reviewer:h.reviewer},baseMode:"head",baseRef:a.baseRef,mode:a.mode,reviewerMode:h.reviewerMode,roundLimit:h.roundLimit},b);return f.flow?(a.flowId=f.flow.id,d(),void c.advanceFlow(a.flowId,`Workflow "${a.name}": review the full diff from the captured base ref.`)):void J(a,`creating the review flow failed: ${f.error??"unknown error"}`)}let i=c.getFlow(a.flowId);if(!i)return void J(a,"the embedded review flow record disappeared");if("approved"===i.state){g.doneAt=c.now(),g.doneNote=`review approved after ${i.rounds.length} round(s)`,"auto"===a.mode&&(a.state="finishing",a.stateDetail=null);return}"done_comment"===i.state?J(a,"review ended with a COMMENT verdict"):"needs_decision"===i.state?J(a,`review loop needs a decision: ${i.stateDetail??"unknown reason"}`):"closed"===i.state&&J(a,"the embedded review flow was closed")}async function S(a,b,c,d,e){let f=JSON.stringify(a);if("provisioning"===a.state)await P(a,d,e);else if("implementing"===a.state)await Q(a,b,c,d,e);else if("reviewing"===a.state)await R(a,b,d,e);else{var g;let b,c,e,f;"finishing"===a.state&&(b=a.flowId?d.getFlow(a.flowId):null,(f=function(a,b,c){let d=c("git",["status","--porcelain"],a.worktreeDir);if(0!==d.code)return w("checking the worktree state",d);let e=d.stdout.split("\n").filter(a=>a.trim());if(e.length){let a=e.slice(0,3).map(a=>a.slice(3).trim()||a.trim()),b=e.length>a.length?`, +${e.length-a.length} more`:"";return{ok:!1,error:`the worktree has uncommitted changes (${a.join(", ")}${b}) — commit them, then retry the finish`}}return"merge"===a.template.finish?function(a,b){let c=b("git",["rev-parse","--abbrev-ref","HEAD"],a.repoDir);if(0!==c.code)return w("resolving the repo branch",c);let d=c.stdout.trim();if(d!==a.baseBranch)return{ok:!1,error:`the repo checkout is on ${d}; check out ${a.baseBranch} before merging`};let e=b("git",["merge","--no-ff",a.branch,"-m",`Merge ${a.branch}: ${A(a)}`],a.repoDir);return 0!==e.code?(b("git",["merge","--abort"],a.repoDir),w("git merge",e)):{ok:!0,prUrl:null}}(a,c):function(a,b,c){let d=c("git",["push","-u","origin",a.branch],a.worktreeDir);if(0!==d.code)return w("git push",d);let e=c("gh",["pr","create","--title",A(a),"--body",b,"--base",a.baseBranch,"--head",a.branch],a.worktreeDir);if(0===e.code){var f;return{ok:!0,prUrl:(f=e.stdout,f.match(/https:\/\/\S+\/pull\/\d+/)?.[0]??null)}}if(/already exists/i.test(e.stderr)){let b=c("gh",["pr","view",a.branch,"--json","url","--jq",".url"],a.worktreeDir);if(0===b.code&&b.stdout.trim())return{ok:!0,prUrl:b.stdout.trim()}}return w("gh pr create",e)}(a,b,c)}(a,(g=b?.rounds??[],c=a.stageRuns.filter(a=>a.doneAt).map(b=>{let c=a.template.stages[b.index],d=c?.kind==="implement"?c.scope.split(/[.:\n]/)[0]:"review loop";return`- Stage ${b.index+1} (${d}): ${b.doneNote||"done"}`}),e=g.map(a=>`- Round ${a.n}: ${a.verdict??"no verdict"}${null!=a.findingsCount?` (${a.findingsCount} findings)`:""}`),["## Task","",a.task.trim(),"","## Stages","",...c.length?c:["- (no stage notes recorded)"],"","## Review rounds","",...e.length?e:["- (no review rounds recorded)"],"","\uD83E\uDD16 Generated with [Claude Code](https://claude.com/claude-code)"].join("\n")),d.exec)).ok?(a.prUrl=f.prUrl,a.state="approved",a.stateDetail=null,a.closedAt=d.now()):J(a,f.error))}return JSON.stringify(a)!==f}let T=globalThis;async function U(a,b=G()){if(T.__llvWorkflowTick)return{workflows:(0,u.Ny)(),changed:!1};T.__llvWorkflowTick=!0;try{let c=(0,u.Ny)(),d=new Map(a.map(a=>[a.path,a])),e=!1;for(let f of c)!(D.has(f.state)||E.has(f.state))&&(await S(f,a,d,b,()=>(0,u.co)(c))&&(e=!0),e&&(0,u.co)(c));return e&&(0,u.co)(c),{workflows:c,changed:e}}finally{T.__llvWorkflowTick=!1}}function V(a){return"needs_decision"===a.state||"paused"===a.state?a.pausedState??"provisioning":a.state}async function W(a,b,c=G()){let d=(0,u.Ny)(),e=d.find(b=>b.id===a);if(!e)return{error:"workflow not found",status:404};if("pause"===b.action)"paused"===e.state||D.has(e.state)||("needs_decision"!==e.state&&(e.pausedState=e.state),e.state="paused",e.stateDetail="paused by user");else if("resume"===b.action)("paused"===e.state||"needs_decision"===e.state)&&(e.state=e.pausedState&&!E.has(e.pausedState)?e.pausedState:"provisioning",e.pausedState=null,e.stateDetail=null);else if("advance"===b.action){let a=V(e);if(D.has(e.state)||"finishing"===a)return{error:"workflow cannot advance from its current state",status:409};if("provisioning"===a){if(!e.baseRef)return{error:"workflow has no worktree yet — retry provisioning instead",status:409};e.state="implementing"}else{let d=K(e);if(!d)return{error:"workflow has no current stage",status:409};!d.doneAt&&(d.doneAt=c.now(),d.doneNote=("string"==typeof b.note&&b.note.trim()?b.note.trim().slice(0,2e3):null)??d.doneNote??"advanced manually");if("reviewing"===a){let a=e.flowId?c.getFlow(e.flowId):null;a&&null===a.closedAt&&"closed"!==a.state&&await c.closeFlow(a.id),e.state="finishing"}else N(e)}e.pausedState=null,e.stateDetail=null}else if("retry-stage"===b.action){let a=V(e);if(D.has(e.state))return{error:"workflow is finished",status:409};if("provisioning"===a){e.setupPid=null;try{g().rmSync((0,u.VO)(e.id),{force:!0})}catch{}}else if("implementing"===a||"reviewing"===a){let b=K(e);if(b&&Object.assign(b,{agentPath:null,paneId:null,startedAt:null,doneAt:null,doneNote:null}),"reviewing"===a){let a=e.flowId?c.getFlow(e.flowId):null;a&&null===a.closedAt&&"closed"!==a.state&&await c.closeFlow(a.id),e.flowId=null,e.fixerPath=null}}e.state=a,e.pausedState=null,e.stateDetail=null}else if("close"===b.action){let a=e.flowId?c.getFlow(e.flowId):null;a&&null===a.closedAt&&"closed"!==a.state&&await c.closeFlow(a.id),e.state="closed",e.pausedState=null,e.stateDetail=null,e.closedAt=c.now()}return(0,u.co)(d),{workflow:e}}function X(a,b=G()){let c,d="string"==typeof a.task?a.task.trim():"";if(!d)return{error:"task brief is required",status:400};let f="string"==typeof a.repoDir?a.repoDir.trim():"";if(!f)return{error:"repoDir is required",status:400};if(0!==b.exec("git",["rev-parse","--git-dir"],f).code)return{error:`not a git repository: ${f}`,status:400};if(a.template){let b=(0,u.K8)().find(b=>b.name===a.template);if(!b)return{error:`unknown workflow template: ${a.template}`,status:400};c=b}else{let b=(0,u.Fl)(a.stages);if("error"in b)return{error:b.error,status:400};c={name:"ad-hoc",stages:b.stages,finish:"merge"===a.finish?"merge":"pr",..."string"==typeof a.setup&&a.setup.trim()?{setup:a.setup.trim()}:{},..."string"==typeof a.verify&&a.verify.trim()?{verify:a.verify.trim()}:{}}}let g=(0,u.aL)({id:e().randomUUID().slice(0,8),name:c.name,task:d,project:b.projectForCwd(f)??i().basename(f),repoDir:f,template:c,mode:"manual"===a.mode?"manual":"auto",now:b.now()});"string"==typeof a.src&&a.src.trim()&&(g.srcPath=a.src.trim());let h=(0,u.Ny)();return h.push(g),(0,u.co)(h),{workflow:g}}function Y(){return{workflows:(0,u.Ny)(),templates:(0,u.K8)()}}},46825:(a,b,c)=>{c.d(b,{Fl:()=>t,K8:()=>y,Ny:()=>w,RK:()=>C,VO:()=>D,_F:()=>B,aL:()=>z,co:()=>x});var d=c(73024),e=c.n(d),f=c(48161),g=c.n(f),h=c(76760),i=c.n(h),j=c(98590);let k=process.env.LLV_STATE_DIR||i().join(g().homedir(),".claude","viewer-state"),l=i().join(k,"workflows.json"),m=i().join(k,"workflow-templates.json"),n=i().join(k,"workflows"),o={engine:"codex",model:null,effort:"low"},p=[{name:"fullstack",setup:"bun install",verify:"bun test && bun run build",finish:"pr",stages:[{kind:"implement",agent:{engine:"codex",model:null,effort:"xhigh"},scope:"Backend/API: server logic, data layer, API routes. Leave UI components alone."},{kind:"implement",agent:{engine:"claude",model:"fable",effort:null},scope:"UI/frontend: components, hooks, styling, i18n labels. Build on the backend contract from the previous stage."},{kind:"review-loop",reviewer:{engine:"codex",model:null,effort:"xhigh"},fixer:{...o},roundLimit:5,reviewerMode:"headless"}]}];function q(a,b){(0,j.Yj)(a,JSON.stringify(b,null,2)+"\n")}function r(a){try{return JSON.parse(e().readFileSync(a,"utf8"))}catch{return null}}function s(a){return!a||"object"!=typeof a||Array.isArray(a)||"claude"!==a.engine&&"codex"!==a.engine?null:{engine:a.engine,model:"string"==typeof a.model&&a.model.trim()?a.model.trim():null,effort:"string"==typeof a.effort&&a.effort.trim()?a.effort.trim():null}}function t(a){if(!Array.isArray(a)||a.length<2)return{error:"a workflow needs at least one implement stage and a closing review-loop"};let b=[];for(let c of a){let a=function(a){if(!a||"object"!=typeof a||Array.isArray(a))return null;let b=a.kind;if("implement"===b){let b;return(b=s(a.agent))&&"string"==typeof a.scope&&a.scope.trim()?{kind:"implement",agent:b,scope:a.scope.trim()}:null}if("review-loop"===b){let b,c=s(a.reviewer);return c?{kind:"review-loop",reviewer:c,fixer:(b=s(a.fixer))&&"codex"===b.engine?{engine:"codex",model:b.model,effort:"low"}:{...o},roundLimit:Number.isInteger(a.roundLimit)&&a.roundLimit>=0?Math.min(a.roundLimit,50):5,reviewerMode:"pane"===a.reviewerMode?"pane":"headless"}:null}return null}(c);if(!a)return{error:"invalid stage definition"};b.push(a)}return 1!==b.filter(a=>"review-loop"===a.kind).length||b.at(-1)?.kind!=="review-loop"?{error:"stages must be implement+ followed by exactly one review-loop last"}:{stages:b}}function u(a){if(!a||"object"!=typeof a||Array.isArray(a)||"string"!=typeof a.name||!a.name.trim())return null;let b=t(a.stages);if("error"in b)return null;let c="merge"===a.finish?"merge":"pr";return{name:a.name.trim(),stages:b.stages,finish:c,..."string"==typeof a.setup&&a.setup.trim()?{setup:a.setup.trim()}:{},..."string"==typeof a.verify&&a.verify.trim()?{verify:a.verify.trim()}:{}}}function v(a){return!(!a||"object"!=typeof a||Array.isArray(a))&&"string"==typeof a.id&&"string"==typeof a.task&&"string"==typeof a.repoDir&&"string"==typeof a.worktreeDir&&"string"==typeof a.branch&&Array.isArray(a.stageRuns)&&"number"==typeof a.stageIndex&&null!==u(a.template)}function w(){let a=r(l);return(Array.isArray(a?.workflows)?a.workflows.filter(v):[]).map(a=>({...a,project:a.project??"",pausedState:a.pausedState??null,setupPid:a.setupPid??null,srcPath:a.srcPath??null,flowId:a.flowId??null,fixerPath:a.fixerPath??null,prUrl:a.prUrl??null}))}function x(a){q(l,{workflows:a})}function y(){let a=r(m),b=Array.isArray(a?.templates)?a.templates.map(u).filter(a=>null!==a):[];return b.length>0?b:(q(m,{templates:p}),p)}function z(a){let b=i().basename(a.repoDir);return{id:a.id,name:a.name,task:a.task,project:a.project,repoDir:a.repoDir,worktreeDir:i().join(i().dirname(a.repoDir),`${b}-wf-${a.id}`),branch:`wf/${a.task.toLowerCase().replace(/[^a-z0-9Ѐ-ӿ]+/gi,"-").replace(/^-+|-+$/g,"").slice(0,40).replace(/-+$/,"")||"task"}-${a.id}`,baseBranch:"",baseRef:"",template:JSON.parse(JSON.stringify(a.template)),stageRuns:a.template.stages.map((a,b)=>({index:b,agentPath:null,paneId:null,startedAt:null,doneAt:null,doneNote:null})),stageIndex:0,flowId:null,fixerPath:null,state:"provisioning",pausedState:null,stateDetail:null,mode:a.mode,setupPid:null,srcPath:null,prUrl:null,createdAt:a.now,closedAt:null}}function A(a){return i().join(n,a)}function B(a){return i().join(A(a),"setup-stdout.log")}function C(a){return i().join(A(a),"setup-stderr.log")}function D(a){return i().join(A(a),"setup-exit")}},51906:(a,b,c)=>{c.d(b,{IL:()=>v,T:()=>w,gn:()=>t});var d=c(31421),e=c(77598),f=c.n(e),g=c(73024),h=c.n(g),i=c(76760),j=c.n(i),k=c(14509),l=c(16089),m=c(98590);let n=new Map;function o(a,b){return`${a}:${b}`}function p(a){if(!a||!Number.isInteger(a)||a<=0)return!1;try{return process.kill(a,0),!0}catch{return!1}}function q(a,b=3e3){let c=b=>{try{process.kill(-a,b)}catch{try{process.kill(a,b)}catch{}}};c("SIGTERM"),setTimeout(()=>{p(a)&&c("SIGKILL")},b).unref()}let r=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,s=new Set(["session_id","sessionId","thread_id","threadId","rollout_id"]);function t(a,b,c,e,g,i=18e5){let p,r=o(a,b);if(n.has(r))return{pid:null,sessionId:null,reviewerPath:null};let s=(0,m.WJ)(a,b);h().mkdirSync(j().dirname(s),{recursive:!0});let u=function(a,b,c,d){if("claude"===a.engine){let c=f().randomUUID(),e=["-p",b,"--permission-mode","plan","--session-id",c,"--disallowedTools","Edit,Write,NotebookEdit"];return a.model&&e.push("--model",a.model),{command:(0,k.uX)("claude"),args:e,outputPath:null,sessionId:c,reviewerPath:(0,l.eV)(d,c)}}let e=["exec",b,"--json","--output-last-message",c,"--sandbox","read-only"];return a.model&&e.push("-m",a.model),a.effort&&e.push("-c",`model_reasoning_effort=${a.effort}`),{command:(0,k.uX)("codex"),args:e,outputPath:c,sessionId:null,reviewerPath:null}}(c,g,s,e),v=h().openSync((0,m.Ml)(a,b),"w"),w=h().openSync((0,m.NO)(a,b),"w");try{p=(0,d.spawn)(u.command,u.args,{cwd:e,env:process.env,detached:!0,stdio:["ignore",v,w]})}finally{h().closeSync(v),h().closeSync(w)}p.unref();let x={child:p,startedAt:Date.now(),exit:null,timer:setTimeout(()=>{!x.exit&&p.pid&&q(p.pid)},i)};return x.timer.unref(),n.set(r,x),p.on("error",()=>{clearTimeout(x.timer),x.exit={code:null,signal:null}}),p.on("close",(a,b)=>{clearTimeout(x.timer),x.exit={code:a,signal:b}}),{pid:p.pid??null,sessionId:u.sessionId,reviewerPath:u.reviewerPath}}function u(a){if(!a)return"";try{return h().readFileSync(a,"utf8")}catch{return""}}function v(a,b,c,d,e=18e5){let f=n.get(o(a,b)),g=u((0,m.Ml)(a,b)),h=f?.child.pid??c.reviewerPid??null;if(!f&&null===h&&!g)return null;let i=u((0,m.NO)(a,b)),j=function(a){let b=null,c="";for(let d of a.split("\n")){let a=d.trim();if(a.startsWith("{"))try{let d=JSON.parse(a);b||(b=function a(b,c=0){if(!b||"object"!=typeof b||c>4)return null;for(let[d,e]of Object.entries(b)){if(s.has(d)&&"string"==typeof e&&r.test(e))return e;let b=a(e,c+1);if(b)return b}return null}(d));let e=function(a){let b=a.item;if(b&&("agent_message"===b.type||"agent_message"===b.item_type)&&"string"==typeof b.text)return b.text;let c=a.msg;return c?.type==="agent_message"&&"string"==typeof c.message?c.message:null}(d);e&&(c=e)}catch{}}return{sessionId:b,lastAgentMessage:c}}(g),k=f?.startedAt??Date.parse(c.spawnStartedAt??""),l=Number.isFinite(k)?Date.now()-k:0;if(f?null===f.exit&&p(h):p(h))return!f&&l>=e&&h&&q(h),{status:"running",stdout:g,stderr:i,finalOutput:"",sessionId:j.sessionId,code:null,signal:null};let t=u("codex"===d?(0,m.WJ)(a,b):null).trim()||j.lastAgentMessage||("claude"===d?g.trim():""),w=f?.exit??null;return{status:w?.code===0||t?"done":!t&&l>=e?"timeout":"failed",stdout:g,stderr:i,finalOutput:t,sessionId:j.sessionId,code:w?.code??null,signal:w?.signal??null}}function w(a,b,c){let e=o(a,b),f=n.get(e);n.delete(e);let g=f?.child.pid??c??null;if(f&&clearTimeout(f.timer),g){p(g)&&q(g);return}!function(a){let b=(0,d.spawnSync)("ps",["-eo","pid=,args="],{encoding:"utf8"});if(!b.error&&0===b.status)for(let c of b.stdout.split("\n")){if(!c.includes(a)||!/\bcodex\b/.test(c))continue;let b=/^\s*(\d+)\s+/.exec(c),d=b?Number(b[1]):0;Number.isInteger(d)&&!(d<=0)&&d!==process.pid&&q(d)}}((0,m.WJ)(a,b))}},52509:(a,b,c)=>{c.d(b,{E:()=>e});let d=globalThis;function e(a){return d.__llvCaches??={},d.__llvCaches[a]??=new Map,d.__llvCaches[a]}},59680:(a,b,c)=>{function d(){return"You are now in an implement-review loop controlled by the local log viewer.\n\nWork normally in this long-lived implementer session. When the work is ready for a fresh independent review, end your final assistant message with a line that starts exactly with:\nREVIEW_READY: <one-line note>\nDo not print the REVIEW_READY marker now and never quote it at the start of a line when acknowledging these instructions — print it only when the work is actually ready for review.\n\nEvery review round will use a fresh reviewer who sees the full diff from the captured base ref, with no history from earlier rounds. If the reviewer sends findings back, respond to each finding before the next marker using:\nFIXED\nor\nREJECTED — <reason>\n\nGive concrete arguments for rejections because the next reviewer will be fresh and blind to previous discussion."}function e(a,b){return["You are the reviewer in an implement-review loop.\n",`Working directory: ${a.cwd}`,`Review scope: git diff ${a.baseRef}...HEAD plus uncommitted changes in the same working tree.`,b.readyNote?`Ready note: ${b.readyNote}`:"Ready note: none provided.","\nRead-only requirement: inspect files and commands as needed, but do not edit files, write notebooks, commit, stage, or mutate the working tree.\n\nOutput exactly this format:\nVERDICT: APPROVE | REQUEST_CHANGES | COMMENT\n\nThen write findings in Markdown. For each finding include severity, file, line, title, and explanation. Use REQUEST_CHANGES for required fixes, COMMENT for non-blocking notes, and APPROVE only when no blocking issues remain."].join("\n")}function f(a,b){return["Review round findings are below. Address every finding before the next review marker.\n",b.trim(),"\nFor each finding, respond with FIXED or REJECTED — <reason>. When the work is reviewable again, end your final assistant message with:\nREVIEW_READY: <one-line note>"].join("\n")}c.d(b,{SB:()=>d,i0:()=>f,qu:()=>e})},69232:(a,b,c)=>{c.d(b,{C:()=>ab});var d=c(20640),e=c(75051),f=c(23855),g=c(3249),h=c(41017),i=c(52509),j=c(95544);let k=(0,i.E)("ctx");function l(a,b){return null===a||a<=0||null===b||b<=0?null:{usedTokens:a,windowTokens:b,pct:Math.min(100,Math.round(a/b*100))}}var m=c(73024),n=c.n(m),o=c(76760),p=c.n(o),q=c(70107),r=c(89333);function s(a,b){let c=p().relative(a,b).split(p().sep);return 4===c.length&&"tasks"===c[2]&&c[3]?.endsWith(".output")?[c[0]??"",c[1]??"",c[3].slice(0,-7)]:null}var t=c(7378);let u=(0,i.E)("effort"),v=new Set(["minimal","low","medium","high","xhigh","max"]);function w(a){let b=a?.trim().toLowerCase()??"";return v.has(b)?b:null}function x(a,b){if("codex-sessions"!==a.root||"turn_context"!==b.type)return null;let c=(0,j.xK)(b.payload),d=(0,j.r$)(c?.effort);if(d)return d;let e=(0,j.xK)((0,j.xK)(c?.collaboration_mode)?.settings);return(0,j.r$)(e?.reasoning_effort)}function y(a){if(null===a.pid)return null;let b=(0,t.$U)(a.pid);for(let c=0;c<b.length-1;c++){if("codex"===a.engine&&("-c"===b[c]||"--config"===b[c])){let a=b[c+1].match(/^model_reasoning_effort\s*=\s*"?([a-z]+)"?$/i);if(a)return a[1]}if("claude"===a.engine&&"--effort"===b[c])return b[c+1]}return null}var z=c(48161),A=c.n(z),B=c(26474);let C=(0,i.E)("needle");function D(a,b){let c,d=C.get(a);if(d&&d.hits||(d={hits:{},scanned:d?.scanned??{}},C.set(a,d)),d.hits[b])return!0;let e=Buffer.from(a),f=Math.max(0,e.length-1);try{c=n().statSync(b).size}catch{return!1}let g=d.scanned[b]??0;if(c<=g)return!1;try{let a=n().openSync(b,"r");try{let h=Math.max(0,g-f),i=Buffer.alloc(0),j=!1;for(;h<c;){let b=Math.min(1048576,c-h),d=Buffer.alloc(b),g=n().readSync(a,d,0,b,h);if(!g)break;if(Buffer.concat([i,d.subarray(0,g)]).includes(e)){j=!0;break}i=f?d.subarray(Math.max(0,g-f),g):Buffer.alloc(0),h+=g}return d.scanned[b]=c,j&&(d.hits[b]=!0),j}finally{n().closeSync(a)}}catch{return!1}}function E(a,b){for(let c of b)if(c&&D(a,c))return c;return null}let F=(0,i.E)("sid-slug"),G=(0,i.E)("bgcmd"),H=(0,i.E)("chain-uuid");function I(a,b,c=[]){let d;try{d=n().readdirSync(a,{withFileTypes:!0})}catch{return c}for(let e of d){let d=p().join(a,e.name);e.isDirectory()?I(d,b,c):e.isFile()&&b(d)&&c.push(d)}return c}function J(a,b){let c=r.GH["claude-projects"],d=b??F.get(a)??null;if(!d){let b=I(c,b=>p().basename(b)===a+".jsonl")[0];if(!b)return[null,[]];d=p().basename(p().dirname(b)),F.set(a,d)}let e=p().join(c,d,a+".jsonl"),f=I(p().join(c,d,a,"subagents"),a=>p().basename(a).startsWith("agent-")&&a.endsWith(".jsonl")).sort();return[n().existsSync(e)?e:null,f]}let K=p().join(A().homedir(),".claude","viewer-state","codex-lineage.json"),L=(0,i.E)("codex-lineage"),M=!1,N=!1,O=(0,i.E)("model");function P(a){return a?a.trim().replace(/^claude-/,"").replace(/-20\d{6}$/,""):null}function Q(a,b){if("codex-sessions"===a.root){if("turn_context"===b.type||"session_meta"===b.type)return(0,j.r$)((0,j.xK)(b.payload)?.model)}else if("assistant"===b.type){let a=(0,j.r$)((0,j.xK)(b.message)?.model);if(a&&"<synthetic>"!==a)return a}return null}let R=(0,i.E)("plan"),S=(0,i.E)("goal");function T(a){return"in_progress"===a||"completed"===a?a:"pending"}function U(a,b){if(!a.length)return null;let c=a.filter(a=>"completed"===a.status).length,d=a.find(a=>"in_progress"===a.status)?.text??a.find(a=>"pending"===a.status)?.text??null;return{steps:a,done:c,total:a.length,current:d,updatedAt:b}}function V(a){return"active"===a||"complete"===a||"blocked"===a?a:null}var W=c(17341),X=c(15159),Y=c(27359);let Z=new Map,$={waiting:null,atComposer:!1};async function _(a){let b=Date.now();for(let[a,c]of Z)b-c.at>6e5&&Z.delete(a);if("running"!==a.proc||null===a.pid||a.pendingQuestion)return Z.delete(a.path),$;if(Date.now()/1e3-a.mtime<15)return $;let c=await (0,e.u1)(a.pid);if(null===c)return $;let d=await (0,e.ZB)(c);if(!(0,Y.cZ)(d))return Z.delete(a.path),{waiting:null,atComposer:(0,Y.WM)(d)};let f=Z.get(a.path);return f&&f.screen===d?(Z.set(a.path,{...f,at:b}),b/1e3-f.since<15)?$:{waiting:{since:f.since,screenTail:d.split("\n").map(a=>a.replace(/\s+$/,"")).filter(a=>a.trim()).slice(-10).join("\n").slice(-1200),target:c,menu:(0,Y.fm)(d)},atComposer:!1}:(Z.set(a.path,{screen:d,at:b,since:b/1e3}),$)}let aa=new Map;async function ab(){let a=function(){let a=[];for(let[b,c]of Object.entries(r.GH))n().existsSync(c)&&function a(b,c,d,e){let f;try{f=n().readdirSync(d,{withFileTypes:!0})}catch{return}for(let g of f){let f;if(g.isDirectory()){if(g.name.startsWith(".git"))continue;a(b,c,p().join(d,g.name),e);continue}if(!g.isFile()||!r.Rg.some(a=>g.name.endsWith(a)))continue;let h=p().join(d,g.name);if("claude-projects"===b&&h.includes(p().sep+"tool-results"+p().sep))continue;try{f=n().statSync(h)}catch{continue}let i="claude-tasks"===b?s(r.GH["claude-tasks"],h):null;if(("claude-tasks"!==b||i)&&(0!==f.size||i)){if(i){let[a,b,c]=i,d=p().join(r.GH["claude-projects"],a,b,"subagents","agent-"+c+".jsonl");if(n().existsSync(d))continue}e.push({rootName:b,root:c,path:h,st:f})}}}(b,c,c,a);return a.sort((a,b)=>b.st.mtimeMs-a.st.mtimeMs),a.slice(0,r.aA).map(a=>{let b=(0,q.q0)(a.rootName,a.root,a.path,a.st);return{path:a.path,root:a.rootName,name:p().relative(a.root,a.path),project:b.project,worktree:b.worktree,title:b.title,engine:b.engine,kind:b.kind,fmt:b.fmt,parent:null,mtime:a.st.mtimeMs/1e3,size:a.st.size,activity:"idle",proc:null,pid:null,model:null,pendingQuestion:null,waitingInput:null}})}(),b=a.some(a=>"claude-tasks"===a.root&&a.path.endsWith(".output"))?(0,t.$w)():aa,c=new Map;for(let b of a){let a="codex-jobs"===b.root?(0,j.Vh)(b.path.replace(/\.log$/,".json")):null;c.set(b.path,a);let d=(0,f.Hz)(b.root,b.path,b.mtime,b.size,a);b.activity=d.state,b.activityReason=d.reason,b.model=function(a){if("claude-projects"===a.root&&a.path.includes(p().sep+"subagents"+p().sep)){let b=(0,j.Vh)(a.path.slice(0,-6)+".meta.json")??{},c=(0,j.r$)(b.model);if(c)return P(c)}if("claude-projects"!==a.root&&"codex-sessions"!==a.root||!a.path.endsWith(".jsonl"))return null;let b=O.get(a.path);if(b?.[0]===a.size)return b[1];let c=null;for(let b of(0,f.He)(a.path,a.size).reverse())if(c=Q(a,b))break;if(!c)try{for(let b of n().readFileSync(a.path,"utf8").split("\n").slice(0,41))try{let d=JSON.parse(b);if(d&&"object"==typeof d&&!Array.isArray(d)&&(c=Q(a,d)))break}catch{}}catch{}let d=P(c);return O.set(a.path,[a.size,d]),d}(b)}for(let d of a)!function(a,b,c){if("codex-jobs"===a.root){if(!c)return;let b=(0,j.Vg)(c.pid);return(a.pid=b,"running"===c.status)?null!==b&&(0,t.pl)(b)?(a.proc="running",a.activity="live",a.activityReason="job_pid_alive"):(a.proc="killed","live"===a.activity&&(a.activity=Date.now()/1e3-a.mtime<900?"recent":"idle",a.activityReason="job_pid_dead")):a.proc="done"}if("claude-tasks"===a.root&&a.path.endsWith(".output")){let c=b.get(a.path)??null;a.pid=c,a.proc=null===c?"done":"running",null!==c&&(a.activity="live",a.activityReason="output_held")}}(d,b,c.get(d.path)??null);for(let b of((0,X.em)(a),a))b.effort=function(a){if("claude-projects"!==a.root&&"codex-sessions"!==a.root||!a.path.endsWith(".jsonl"))return null;if("codex-sessions"!==a.root)return w(y(a));let b=u.get(a.path);if(b?.[0]===a.size)return b[1]??w(y(a));let c=null;for(let b of(0,f.He)(a.path,a.size).reverse())if(c=w(x(a,b)))break;if(!c)try{for(let b of n().readFileSync(a.path,"utf8").split("\n").slice(0,41))try{let d=JSON.parse(b);if(d&&"object"==typeof d&&!Array.isArray(d)&&(c=w(x(a,d))))break}catch{}}catch{}return u.set(a.path,[a.size,c]),c??w(y(a))}(b);for(let b of(await Promise.all(a.map(async a=>{let b=(0,W.x)(a);a.pendingQuestion=b&&null!==a.pid?{...b,paneTarget:await (0,e.u1)(a.pid)}:b;let c=await _(a);a.waitingInput=c.waiting,c.atComposer&&"stalled"===a.activity&&(a.activity=Date.now()/1e3-a.mtime<900?"recent":"idle",a.activityReason="pane_at_composer"),a.plan=function(a){if("claude-projects"!==a.root&&"codex-sessions"!==a.root||!a.path.endsWith(".jsonl"))return null;let b=R.get(a.path);if(b?.[0]===a.size)return b[1];let c=null;for(let b of(0,f.He)(a.path,a.size).reverse())if(c="codex-sessions"===a.root?function(a){let b,c=(0,j.xK)(a.payload);if(!c||"function_call"!==c.type||"update_plan"!==(0,j.r$)(c.name))return null;let d=(0,j.r$)(c.arguments);if(!d)return null;try{b=JSON.parse(d)}catch{return null}return U((0,j.Em)((0,j.xK)(b)?.plan).map(a=>{let b=(0,j.r$)(a.step)?.trim();return b?{text:b,status:T(a.status)}:null}).filter(a=>null!==a),(0,j.r$)(a.timestamp))}(b):function(a){if("assistant"!==a.type)return null;for(let b of(0,j.Em)((0,j.xK)(a.message)?.content))if("tool_use"===b.type&&"TodoWrite"===(0,j.r$)(b.name))return U((0,j.Em)((0,j.xK)(b.input)?.todos).map(a=>{let b=T(a.status),c=("in_progress"===b?(0,j.r$)(a.activeForm)?.trim():null)||(0,j.r$)(a.content)?.trim()||null;return c?{text:c,status:b}:null}).filter(a=>null!==a),(0,j.r$)(a.timestamp));return null}(b))break;return R.set(a.path,[a.size,c]),c}(a),a.goal=function(a){if("codex-sessions"!==a.root||!a.path.endsWith(".jsonl"))return null;let b=S.get(a.path);if(b?.[0]===a.size)return b[1];let c=null,d=null,e=null,g=null;for(let b of(0,f.He)(a.path,a.size).reverse()){let a=function(a){let b=(0,j.xK)(a.payload);if(!b)return null;if("thread_goal_updated"===b.type){let a=(0,j.xK)(b.goal);return a?{objective:(0,j.r$)(a.objective),status:V(a.status)??void 0,tokensUsed:(0,j.Vg)(a.tokensUsed),timeUsedSeconds:(0,j.Vg)(a.timeUsedSeconds)}:null}if("function_call"===b.type&&"update_goal"===(0,j.r$)(b.name)){let a=(0,j.r$)(b.arguments);if(!a)return null;try{let b=(0,j.xK)(JSON.parse(a));if(!b)return null;return{objective:(0,j.r$)(b.objective),status:V(b.status)??((0,j.r$)(b.objective)?"active":void 0)}}catch{}}return null}(b);if(a&&(null===d&&a.status&&(d=a.status),null===c&&a.objective&&(c=a.objective),null===e&&"number"==typeof a.tokensUsed&&(e=a.tokensUsed),null===g&&"number"==typeof a.timeUsedSeconds&&(g=a.timeUsedSeconds),null!==d&&null!==c&&null!==e))break}let h=null===d&&null===c?null:{objective:c,status:d??"active",tokensUsed:e,timeUsedSeconds:g};return S.set(a.path,[a.size,h]),h}(a),a.ctx=function(a){if("claude-projects"!==a.root&&"codex-sessions"!==a.root||!a.path.endsWith(".jsonl"))return null;let b=k.get(a.path);if(b?.[0]===a.size)return b[1];let c=null;for(let b of(0,f.He)(a.path,a.size).reverse())if(c="codex-sessions"===a.root?function(a){let b=(0,j.xK)(a.payload);if(!b||"token_count"!==(0,j.r$)(b.type))return null;let c=(0,j.xK)(b.info);if(!c)return null;let d=(0,j.xK)(c.last_token_usage)??(0,j.xK)(c.total_token_usage);return d?l((0,j.Vg)(d.total_tokens),(0,j.Vg)(c.model_context_window)):null}(b):function(a){if("assistant"!==a.type)return null;let b=(0,j.xK)(a.message),c=(0,j.r$)(b?.model);if(!b||"<synthetic>"===c)return null;let d=(0,j.xK)(b.usage);if(!d)return null;let e=((0,j.Vg)(d.input_tokens)??0)+((0,j.Vg)(d.cache_read_input_tokens)??0)+((0,j.Vg)(d.cache_creation_input_tokens)??0),f=c?.includes("[1m]")||c?.includes("fable")?1e6:2e5;return e>f&&(f=1e6),l(e,f)}(b))break;return k.set(a.path,[a.size,c]),c}(a)})),a))(b.pendingQuestion||b.waitingInput)&&(0,d.M$)(b);return!function(a){let b=new Map(a.map(a=>[a.path,a])),c=new Map;if(n().existsSync(r.GH["codex-jobs"]))for(let a of I(r.GH["codex-jobs"],a=>p().basename(a).startsWith("task-")&&a.endsWith(".json"))){let b=(0,j.Vh)(a),d=(0,j.r$)(b?.threadId);d&&c.set(d,a.slice(0,-5)+".log")}for(let b of a)if("claude-projects"===b.root){let a=b.name.split(p().sep);if(a.length>=3&&"subagents"===a.at(-2)){let c=a[0]??"",[d,e]=J(a.at(-3)??"",c);b.parent=d;let f=(0,j.Vh)(b.path.slice(0,-6)+".meta.json")??{},g=(0,j.r$)(f.toolUseId),h=Number(f.spawnDepth??0);if(g&&h>=1){let a=E(g,e.filter(a=>a!==b.path).concat(d?[d]:[]));a&&(b.parent=a)}}}else if("codex-jobs"===b.root){var d;let a=(d=b.path,(0,j.Vh)(d.replace(/\.log$/,".json"))??{}),c=(0,j.r$)(a.sessionId);if(c){let d=(0,j.r$)(a.workspaceRoot)??"",e=d?d.replace(/[^A-Za-z0-9-]/g,"-"):null,[f,g]=J(c,e);!f&&e&&([f,g]=J(c,null));let h=E(p().basename(b.path).slice(0,-4),g);b.parent=h??f}}else if("codex-sessions"===b.root){let a=b.path.match(/([0-9a-f-]{36})\.jsonl$/)?.[1];a&&c.has(a)&&(b.parent=c.get(a)??null)}else if("claude-tasks"===b.root){let a=s(r.GH["claude-tasks"],b.path);if(!a)continue;let[c,d,e]=a,[f,g]=J(d,c),h=function(a,b,c){if(G.has(a))return G.get(a)??null;let d="background with ID: "+a,e=null;for(let f of[...b,...c]){if(!f||!D(d,f))continue;let b=function(a,b){let c=null;try{for(let d of n().readFileSync(b,"utf8").split("\n"))if(d.includes(a)){c=d.match(/"tool_use_id"\s*:\s*"([^"]+)"/)?.[1]??null;break}if(!c)return null;for(let a of n().readFileSync(b,"utf8").split("\n"))if(a.includes(c)&&a.includes('"tool_use"'))try{let b=JSON.parse(a);for(let a of(0,j.Em)((0,j.xK)(b.message)?.content))if("tool_use"===a.type&&a.id===c){let b=(0,j.xK)(a.input)??{};return{command:String(b.command??""),description:String(b.description??"")}}}catch{}}catch{}return null}(d,f);if(b&&(b.command||b.description)){let c={...b,source:f};return G.set(a,c),c}e??={command:"",description:"",source:f}}return e&&G.set(a,e),e}(e,(f?[f]:[]).concat(g),function(a,b){let c,d=p().join(r.GH["claude-projects"],a);try{c=n().readdirSync(d,{withFileTypes:!0})}catch{return[]}let e=[];for(let a of c){if(!a.isFile()||!a.name.endsWith(".jsonl")||a.name===b+".jsonl")continue;let c=p().join(d,a.name);try{let a=n().statSync(c);if(a.size>0x4000000)continue;e.push({pathname:c,mtime:a.mtimeMs})}catch{continue}}return e.sort((a,b)=>b.mtime-a.mtime).slice(0,8).map(a=>a.pathname)}(c,d));if(h){b.parent=h.source,b.cmd=h.command,b.cmdDesc=h.description;let a=h.description||h.command;a&&(b.title=a.split(/\s+/).join(" ").slice(0,120))}else b.title="Фонова задача "+e,b.cmd="",b.cmdDesc=""}!function(a){!function(){if(M)return;M=!0;let a=(0,j.Vh)(K);if(a&&"object"==typeof a&&!Array.isArray(a)){for(let[b,c]of Object.entries(a))"string"==typeof c&&!L.has(b)&&n().existsSync(b)&&L.set(b,c);L.size!==Object.keys(a).length&&(N=!0)}}();let b=a.filter(a=>"codex-sessions"===a.root&&!a.parent);if(0===b.length)return;let c=new Map;for(let b of a)"claude-projects"===b.root&&null!==b.pid&&c.set(b.pid,b.path);for(let a of b){let b=null,f=new Set;for(let d=a.pid;null!==d&&!f.has(d)&&(f.add(d),!(f.size>15));d=(0,t.Ib)(d)){let a=c.get(d)??(0,t.FW)(d,"CODEX_COMPANION_TRANSCRIPT_PATH");if(a){b=a;break}}if(b){a.parent=b;var d=a.path,e=b;if(L.get(d)!==e){for(L.set(d,e);L.size>2e3;){let a=L.keys().next().value;if(void 0===a)break;L.delete(a)}N=!0}}else{let b=L.get(a.path);b&&(a.parent=b)}}if(N){N=!1;try{n().mkdirSync(p().dirname(K),{recursive:!0}),n().writeFileSync(K,JSON.stringify(Object.fromEntries(L)))}catch{}}}(a);let e=new Map(a.map(a=>[a.path,a]));for(let b of a){if(b.parent||"claude-projects"!==b.root&&"codex-sessions"!==b.root||!b.path.endsWith(".jsonl")||b.path.includes(p().sep+"subagents"+p().sep))continue;let a=(0,B._b)(b.path);if(!a&&null!==b.pid){let c=new Set;for(let d=b.pid;null!==d&&!c.has(d)&&(c.add(d),!(c.size>15||(a=(0,B.N0)(d))));d=(0,t.Ib)(d));a&&a!==b.path&&(0,B.A6)(b.path,a)}a&&a!==b.path&&e.has(a)&&(b.parent=a,b.handoff=!0)}(0,B.OA)(),function(a){let b=new Map;for(let c of a){if("claude-projects"!==c.root)continue;let a=c.name.split(p().sep);if(2!==a.length)continue;let d=a[0]??"";b.set(d,(b.get(d)??[]).concat(c))}let c=(a,b,c)=>{let d=new Map(c.map(a=>[a.path,a])),e=new Set;for(let c=a;c?.parent&&!e.has(c.path);c=d.get(c.parent))if(e.add(c.path),c.parent===b.path)return!0;return!1};for(let a of b.values()){let b=[...a].sort((a,b)=>a.mtime-b.mtime);for(let d of b){let e=function(a,b){let c=H.get(a);if(c&&(null!==c[1]||c[0]>=524288||c[0]>=b))return c[1];let d=null,e=0;try{let c=n().openSync(a,"r");try{let a=Buffer.alloc(Math.min(b,524288));for(let b of(e=n().readSync(c,a,0,a.length,0),a.toString("utf8",0,e).split("\n")))if(b.includes('"compact_boundary"')){d=b.match(/"logicalParentUuid"\s*:\s*"([0-9a-f-]{36})"/)?.[1]??null;break}}finally{n().closeSync(c)}}catch{return null}return H.set(a,[e,d]),d}(d.path,d.size);if(!e)continue;let f=b.filter(a=>a!==d&&!a.parent).sort((a,b)=>b.mtime-a.mtime),g="live"===d.activity||"recent"===d.activity,h=f.find(a=>D(e,a.path))??(g?f.find(a=>"live"!==a.activity):void 0);h&&!c(d,h,a)&&(h.parent=d.path)}}}(a);let f=a=>{let c=new Set,d=a;for(;!c.has(d.path);){c.add(d.path);let a=b.get(d.parent??"");if(!a)return d.project;d=a}return a.project};for(let c of a)c.parent&&b.has(c.parent)?c.project=f(c):c.parent=null}(a),await (0,g.zn)(a),await (0,h.u1)(a),a}},70107:(a,b,c)=>{c.d(b,{hY:()=>x,q0:()=>A});var d=c(73024),e=c.n(d),f=c(48161),g=c.n(f),h=c(76760),i=c.n(h),j=c(30795),k=c(52509),l=c(95544);let m=(0,k.E)("meta"),n=(0,k.E)("title"),o=(0,k.E)("codex-project"),p=(0,k.E)("claude-cwd");function q(a,b){try{let c=e().openSync(a,"r");try{let a=Buffer.alloc(Math.min(b,131072)),d=e().readSync(c,a,0,a.length,0);return{text:a.toString("utf8",0,d),read:d}}finally{e().closeSync(c)}}catch{return null}}let r="-"+g().homedir().split(i().sep).filter(Boolean).join("-"),s=[r+"-Projects-",r+"-"],t=["<","#","Caveat:","{","[","This session is being continued"];function u(a){if(a===r)return i().basename(g().homedir());for(let b of s)if(a.startsWith(b))return a.slice(b.length)||a;return a}let v=(0,k.E)("worktree-git");function w(a){let b=function(a){let b=i().sep+".claude"+i().sep+"worktrees"+i().sep,c=a.indexOf(b);if(c<0)return null;let d=a.slice(c+b.length).split(i().sep).filter(Boolean)[0];return d?{repo:a.slice(0,c),worktree:d}:null}(a)??function(a){let b=v.get(a);if(b&&b[0]>Date.now())return b[1];let c=null;try{let b=i().join(a,".git");e().lstatSync(b).isFile()&&(c=function(a,b){let c=/^gitdir:\s*(.+?)\s*$/m.exec(b)?.[1];if(!c)return null;let d=i().resolve(a,c).split(i().sep),e=d.lastIndexOf("worktrees"),f=e>=0?d[e+1]:void 0;return f&&".git"===d[e-1]?{repo:d.slice(0,e-1).join(i().sep)||i().sep,worktree:f}:null}(a,e().readFileSync(b,"utf8")))}catch{}return v.set(a,[Date.now()+6e4,c]),c}(a),c=u((b?b.repo:a).replace(/[^a-zA-Z0-9]/g,"-"));return c?{project:c,worktree:b?.worktree}:null}function x(a){return w(a)?.project??null}function y(a){let b="string"==typeof a?a.trim():"";return b&&!t.some(a=>b.startsWith(a))?b:null}function z(a,b,c){let d=n.get(a);if(d&&(null!==d[1]||d[0]>=131072))return d[1];let e=q(a,b);if(!e)return d?.[1]??null;let f=function(a,b){for(let c of a){let a;try{let b=JSON.parse(c);if(!b||"object"!=typeof b||Array.isArray(b))continue;a=b}catch{continue}if("summary"===a.type){let b=y(a.summary);if(b)return b}if("ai-title"===a.type){let b=y(a.aiTitle);if(b)return b}if(b){let b=(0,l.xK)(a.payload)??{};if("user_message"===b.type){let a=y(b.message);if(a)return a}if("message"===b.type&&"user"===b.role){let a=y((0,l.Em)(b.content).map(a=>(0,l.r$)(a.text)??(0,l.r$)(a.input_text)??"").join(" ").trim());if(a)return a}}else if("user"===a.type){let b=(0,l.xK)(a.message)?.content;if("string"==typeof b){let a=y(b);if(a)return a}let c=y((0,l.Em)(b).filter(a=>"text"===a.type).map(a=>(0,l.r$)(a.text)??"").join(" ").trim());if(c)return c}}return null}(e.text.split("\n").slice(0,151),c);return n.set(a,[e.read,f]),f}function A(a,b,c,d){let e,f=m.get(c);if(f?.[0]===d.size)return f[1];let g=i().relative(b,c),h=i().basename(c),k="інше",n=null,r="claude",s="",t="plain";if("codex-jobs"===a){let a=g.split(i().sep)[0]??"",b=a.split("-"),d=b.at(-1)??"";k=b.length>=2&&d.length>=12?b.slice(0,-1).join("-"):a,r="codex",s="джоба";let e=(0,l.Vh)(c.replace(/\.log$/,".json"));if(e){let a=[(0,l.r$)(e.kindLabel)??"",(0,l.r$)(e.title)??""].filter(Boolean).join(" \xb7 "),b=((0,l.r$)(e.summary)??"").split(/\s+/).join(" ").trim();n=a+(b?" — "+b:"")||h}else n=h}else if("codex-sessions"===a){let a=o.get(c);if(a)k=a.project,e=a.worktree;else{k="";let a=q(c,d.size);if(a)try{let b=JSON.parse(a.text.split("\n")[0]??"{}"),c=(0,l.r$)((0,l.xK)(b.payload)?.cwd)??"",d=w(c);k=d?.project??"",e=d?.worktree}catch{k=""}k&&o.set(c,{project:k,worktree:e})}k||(k="codex"),r="codex",s="сесія",t="codex",n=z(c,d.size,!0)??"Сесія Codex"}else if("claude-projects"===a){let a=g.split(i().sep)[0]??"",b=function(a){let b="--claude-worktrees-",c=a.indexOf(b);if(c<0)return null;let d=a.slice(c+b.length);if(!d)return null;let e=a.slice(0,c),f=e.split("--").at(-1)?.split("-").filter(Boolean).at(-1);return f?{project:e.slice(e.lastIndexOf("-"+f)+1)||f,worktree:d}:null}(a);k=b?.project??u(a),e=b?.worktree;let f=function(a,b){let c=p.get(a);if(c&&(null!==c[1]||c[0]>=131072))return c[1];let d=q(a,b);if(!d)return c?.[1]??null;let e=function(a){for(let b of a)try{let a=JSON.parse(b),c=(0,l.r$)((0,l.xK)(a)?.cwd);if(c)return c}catch{continue}return null}(d.text.split("\n").slice(0,25));return p.set(a,[d.read,e]),e}(c,d.size),j=f?w(f):null;if(j&&(b||j.worktree)&&(k=j.project,e=j.worktree??e),t="claude",h.startsWith("agent-")){s="субагент";let a=(0,l.Vh)(c.slice(0,-6)+".meta.json")??{};n=(0,l.r$)(a.description)??(0,l.r$)(a.name)??"Субагент "+h.slice(6).split(".")[0]}else s="сесія",n=z(c,d.size,!1)??"Сесія Claude"}else"claude-tasks"===a&&(k=u(g.split(i().sep)[0]??""),r="shell",s="фон",n="Фонова задача "+h.split(".")[0]);let v={project:k,worktree:e,title:(0,j.cr)(n??h,120),engine:r,kind:s,fmt:t};return m.set(c,[d.size,v]),v}},75051:(a,b,c)=>{c.d(b,{Am:()=>W,Fu:()=>t,IJ:()=>V,HZ:()=>N,VT:()=>F,aI:()=>y,mB:()=>M,RZ:()=>L,ZB:()=>S,u1:()=>x,EW:()=>E,V1:()=>T,oF:()=>C,KY:()=>P,Tk:()=>U,WS:()=>A});var d=c(31421),e=c(77598),f=c.n(e),g=c(73024),h=c.n(g),i=c(48161),j=c.n(i),k=c(76760),l=c.n(k);let m=l().join(j().homedir(),".claude","viewer-state","events.ndjson");function n(a,b){try{h().mkdirSync(l().dirname(m),{recursive:!0});try{h().statSync(m).size>4194304&&h().renameSync(m,m+".1")}catch{}let c={ts:new Date().toISOString(),action:a,...b};h().appendFileSync(m,JSON.stringify(c)+"\n","utf8")}catch{}}let o={"image/png":"png","image/jpeg":"jpg","image/jpg":"jpg","image/gif":"gif","image/webp":"webp"};var p=c(14289),q=c(69232),r=c(7378),s=c(27359);function t(a){let b=Array.isArray(a.images)?a.images:a.image&&"object"==typeof a.image?[a.image]:[],c=[];for(let a of b){let b=a&&"object"==typeof a?a.base64:void 0,d=a&&"object"==typeof a?a.mime:void 0;if("string"!=typeof b||!b)return{images:[],error:{error:"некоректне зображення",status:400}};if(null===(o["string"==typeof d?d:""]??null))return{images:[],error:{error:"непідтримуваний тип зображення",status:415}};if(function(a){if(!a.length)return 0;let b=a.endsWith("==")?2:+!!a.endsWith("=");return Math.floor(3*a.length/4)-b}(b)>0xa00000)return{images:[],error:{error:"зображення завелике (ліміт 10 МБ)",status:413}};c.push({base64:b,mime:d})}return{images:c,error:null}}let u=null;function v(a,b){return new Promise((c,e)=>{let f=(0,d.spawn)("tmux",a,{stdio:["pipe","pipe","pipe"]}),g="",h="";f.stdout.on("data",a=>g+=a.toString("utf8")),f.stderr.on("data",a=>h+=a.toString("utf8")),f.on("error",e),f.on("close",a=>c({code:a,stdout:g,stderr:h})),void 0!==b?f.stdin.end(b):f.stdin.end()})}async function w(){let a,b=Date.now();if(u&&b-u.at<5e3)return u.map;let c=new Map;try{a=await v(["list-panes","-a","-F","#{session_name}:#{window_index}.#{pane_index} #{pane_pid}"])}catch{return u={at:b,map:c},c}if(0===a.code)for(let b of a.stdout.split("\n")){let a=b.lastIndexOf(" ");if(a<0)continue;let d=b.slice(0,a).trim(),e=Number(b.slice(a+1).trim());d&&Number.isInteger(e)&&e>0&&c.set(e,d)}return u={at:b,map:c},c}async function x(a){if(!Number.isInteger(a)||a<=0)return null;let b=await w();if(0===b.size)return null;let c=new Set,d=a;for(let a=0;a<64&&null!==d&&d>1;a+=1){let a=b.get(d);if(a)return a;if(c.has(d)||(0,r.Vt)((0,r.$U)(d)))break;c.add(d),d=(0,r.Ib)(d)}return null}async function y(){let a=new Set;for(let b of(await (0,q.C)()))null!==b.pid&&"running"===b.proc&&(0,r.pl)(b.pid)&&a.add(b.pid);return a}let z=new Map;async function A(a,b){let c=(z.get(a)??Promise.resolve()).then(b,b);z.set(a,c.catch(()=>void 0));try{return await c}finally{z.get(a)!==c&&z.size>256&&z.clear()}}async function B(a){let b=await R(a);if(null===b)throw Error("tmux-пейн недоступний");if((0,s.g2)(b))throw n("gate",{target:a,result:"error",reason:"shell_prompt"}),Error("у пейні немає агента (звичайний shell) — повідомлення не надіслано");for(let b=0;b<3;b+=1){let b=await S(a);if(null!==(0,s.fm)(b))throw n("gate",{target:a,result:"error",reason:"select_dialog"}),Error("агент чекає на вибір у пейні — дай відповідь перед новим повідомленням");let c=(0,s._1)(b);if(null!==c)throw n("gate",{target:a,result:"error",reason:c}),Error("rate_limit"===c?"агент уперся в rate limit — повідомлення не надіслано":"агент чекає на підтвердження в пейні — дай відповідь перед новим повідомленням");let d=(0,s.ye)(b);if(null!==d){n("gate",{target:a,result:"ok",reason:d}),await v(["send-keys","-t",a,"Enter"]),await Q(700);continue}return}}async function C(a,b){await A(a,async()=>{try{await B(a),await D(a,b),n("send",{target:a,result:"ok",meta:{bytes:b.length}})}catch(b){throw n("send",{target:a,result:"error",reason:b instanceof Error?b.message:String(b)}),b}})}async function D(a,b){let c=`viewer-${Date.now()}-${Math.floor(1e6*Math.random())}`,d=await v(["load-buffer","-b",c,"-"],Buffer.from(b,"utf8"));if(0!==d.code)throw Error(d.stderr.trim()||"не вдалося завантажити буфер tmux");let e=await v(["paste-buffer","-d","-p","-b",c,"-t",a]);if(0!==e.code)throw Error(e.stderr.trim()||"не вдалося вставити текст у пейн");await Q(250);let f=await v(["send-keys","-t",a,"Enter"]);if(0!==f.code)throw Error(f.stderr.trim()||"не вдалося натиснути Enter");let g=b.split("\n").map(a=>a.trim()).find(Boolean)?.slice(0,32)??"";for(let b=0;b<4;b+=1){await Q(400);let b=(0,s.dC)(await S(a));if(!(""!==g&&b.includes(g)||b.includes("[Pasted text")))return;await v(["send-keys","-t",a,"Enter"])}}async function E(a){let b=await v(["send-keys","-t",a,"Escape"]);if(n("interrupt",{target:a,result:0===b.code?"ok":"error",reason:b.stderr.trim()||void 0}),0!==b.code)throw Error(b.stderr.trim()||"не вдалося надіслати Escape")}async function F(a){let b=await v(["kill-pane","-t",a]);if(n("kill",{target:a,result:0===b.code?"ok":"error",reason:b.stderr.trim()||void 0}),0!==b.code)throw Error(b.stderr.trim()||"не вдалося закрити tmux-пейн")}async function G(){let a=await v(["list-clients","-F","#{client_activity} #{client_session}"]).catch(()=>null),b=a=>{let b=null;for(let c of a.split("\n")){let a=c.indexOf(" ");if(a<0)continue;let d=Number(c.slice(0,a)),e=c.slice(a+1).trim();e&&Number.isFinite(d)&&(!b||d>b.at)&&(b={at:d,name:e})}return b?.name??null};if(a&&0===a.code){let c=b(a.stdout);if(c)return c}let c=await v(["list-sessions","-F","#{session_activity} #{session_name}"]).catch(()=>null);if(c&&0===c.code){let a=b(c.stdout);if(a)return a}let d=await v(["new-session","-d","-x","220","-y","50","-s","agents"]);if(0!==d.code&&!/duplicate session/.test(d.stderr))throw Error(d.stderr.trim()||"не вдалося створити tmux-сесію");return"agents"}let H=l().join(j().homedir(),".claude","viewer-state","resume-panes.json"),I=null;function J(){if(I)return I;I=new Map;try{let a=JSON.parse(h().readFileSync(H,"utf8"));for(let[b,c]of Object.entries(a))c&&"string"==typeof c.paneId&&"string"==typeof c.windowName&&I.set(b,c)}catch{}return I}function K(){if(I)try{h().mkdirSync(l().dirname(H),{recursive:!0}),h().writeFileSync(H,JSON.stringify(Object.fromEntries(I)))}catch{}}async function L(a){let b=await v(["display-message","-p","-t",a,"#{window_name} #{pane_current_command} #{session_name}:#{window_index}.#{pane_index}"]).catch(()=>null),c=b&&0===b.code?b.stdout.trim().split(" "):null;return c&&3===c.length?{windowName:c[0]??"",command:c[1]??"",display:c[2]??a}:null}async function M(a){let b=J().get(a);if(!b)return null;let c=await L(b.paneId);return!c||c.windowName!==b.windowName||(0,s.g2)(c.command)?(J().delete(a),K(),null):{paneId:b.paneId,display:c.display}}function N(a){J().delete(a)&&K()}let O=new Map;async function P(a,b,c){let d=await M(a);if(d)return await C(d.paneId,c),{target:d.display,spawned:!1};let e=O.get(a);if(e){let a=await e;return await C(a.paneId,c),{target:a.display,spawned:!1}}let f=U(b,c);O.set(a,f);try{let c=await f;return J().set(a,{paneId:c.paneId,windowName:b.windowName}),K(),n("resume",{target:c.display,path:a,cwd:b.cwd,result:"ok"}),{target:c.display,spawned:!0}}catch(c){throw n("resume",{path:a,cwd:b.cwd,result:"error",reason:c instanceof Error?c.message:String(c)}),c}finally{O.delete(a)}}function Q(a){return new Promise(b=>setTimeout(b,a))}async function R(a){let b=await v(["display-message","-p","-t",a,"#{pane_current_command}"]).catch(()=>null);return b&&0===b.code?b.stdout.trim():null}async function S(a){let b=await v(["capture-pane","-p","-t",a]).catch(()=>null);return b&&0===b.code?b.stdout:""}async function T(a,b){if(!b.length)return;let c=await v(["send-keys","-t",a,...b]);if(0!==c.code)throw Error(c.stderr.trim()||"не вдалося надіслати клавіші")}async function U(a,b){let c=await G(),d=await v(["new-window","-d","-P","-F","#{pane_id} #{session_name}:#{window_index}.#{pane_index} #{pane_pid}","-t",c+":","-n",a.windowName,"-c",a.cwd]);if(0!==d.code)throw Error(d.stderr.trim()||"не вдалося відкрити tmux-вікно");let[e="",f="",g=""]=d.stdout.trim().split(" ");if(!e)throw Error("tmux не повернув адресу вікна");let h=Number(g),i=await v(["send-keys","-t",e,"-l",a.command]);if(0!==i.code)throw Error(i.stderr.trim()||"не вдалося ввести команду в пейн");let j=await v(["send-keys","-t",e,"Enter"]);if(0!==j.code)throw Error(j.stderr.trim()||"не вдалося запустити агента");let k=Date.now()+6e4,l=!1,m="",o="",p=0;for(;Date.now()<k;){await Q(1e3);let b=await R(e);if(null===b)throw Error("вікно агента закрилося одразу після запуску");if((0,s.g2)(b)){if(l)throw Error(`агент завершився одразу після запуску: ${(0,s.d3)(await S(e))}`);continue}l=!0;let c=await S(e),d=c!==m?(0,s.ye)(c):null;if(null!==d){n("gate",{target:e,cwd:a.cwd,result:"ok",reason:d}),await v(["send-keys","-t",e,"Enter"]),m=c,o="",p=0;continue}if(s.EB.test(c))break;if(c===o){if((p+=1)>=3)break}else p=0,o=c}let q=await R(e);if(null===q||(0,s.g2)(q))throw n("spawn",{target:e,cwd:a.cwd,result:"error",reason:"agent_exited_on_boot"}),Error(`агент не запустився у вікні: ${(0,s.d3)(await S(e))}`);return n("spawn",{target:e,cwd:a.cwd,...a.transcript?{path:a.transcript}:{},result:"ok",meta:{window:a.windowName}}),b&&await C(e,b),{paneId:e,display:f||e,...Number.isInteger(h)&&h>0?{panePid:h}:{}}}function V(a){for(let b of a)try{h().unlinkSync(b)}catch{}}function W(a,b){let c=[];try{for(let a of b)c.push(function(a,b){let c=o[b]??null;if(null===c)throw Error("непідтримуваний тип зображення");let d=Buffer.from(a,"base64");if(0===d.length)throw Error("некоректні дані зображення");if(d.length>0xa00000)throw Error("зображення завелике");h().mkdirSync(p.j,{recursive:!0});let e=l().join(p.j,`img-${Date.now()}-${f().randomUUID().slice(0,8)}.${c}`);return h().writeFileSync(e,d),{path:e}}(a.base64,a.mime).path)}catch(a){throw V(c),a}return{payload:[a,...c].filter(Boolean).join("\n"),imagePaths:c}}},89333:(a,b,c)=>{let d,e,f;c.d(b,{EG:()=>s,GH:()=>n,Rg:()=>o,aA:()=>q,jQ:()=>p});var g=c(73024),h=c.n(g),i=c(48161),j=c.n(i),k=c(76760),l=c.n(k);let m=j().homedir(),n={"codex-jobs":l().join(m,".claude/plugins/data/codex-openai-codex/state"),"codex-sessions":l().join(m,".codex/sessions"),"claude-projects":l().join(m,".claude/projects"),"claude-tasks":(d=process.getuid?.()??1e3,e=l().join(j().tmpdir(),"claude-"+d),e===(f="/tmp/claude-"+d)||h().existsSync(e)?e:h().existsSync(f)?f:e)},o=[".log",".jsonl",".output",".txt"],p=786432,q=400;function r(a){try{return h().realpathSync(a)}catch{return null}}function s(a){let b=r(a);return!!b&&Object.values(n).some(a=>{let c=r(a);return null!==c&&b.startsWith(c+l().sep)})}},95544:(a,b,c)=>{c.d(b,{Em:()=>k,Vg:()=>i,Vh:()=>g,r$:()=>h,xK:()=>j});var d=c(73024),e=c.n(d);let f=(0,c(52509).E)("json");function g(a){let b;try{b=e().statSync(a).mtimeMs}catch{return null}let c=f.get(a);if(c?.[0]===b)return c[1];let d=null;try{d=JSON.parse(e().readFileSync(a,"utf8"))}catch{d=null}let g=d&&"object"==typeof d&&!Array.isArray(d)?d:null;return f.set(a,[b,g]),g}function h(a){return"string"==typeof a?a:null}function i(a){return"number"==typeof a&&Number.isFinite(a)?a:null}function j(a){return a&&"object"==typeof a&&!Array.isArray(a)?a:null}function k(a){return Array.isArray(a)?a.filter(a=>null!==a&&"object"==typeof a&&!Array.isArray(a)):[]}},98590:(a,b,c)=>{c.d(b,{Ml:()=>C,NO:()=>B,Sn:()=>D,Vd:()=>x,WJ:()=>A,Yj:()=>r,mL:()=>v,tR:()=>z,tu:()=>w});var d=c(77598),e=c.n(d),f=c(73024),g=c.n(f),h=c(48161),i=c.n(h),j=c(76760),k=c.n(j);let l=process.env.LLV_STATE_DIR||k().join(i().homedir(),".claude","viewer-state"),m=k().join(l,"flows.json"),n=k().join(l,"review-loop-presets.json"),o=k().join(l,"flows"),p=[{name:"Codex high → Fable",implementer:{engine:"codex",model:null,effort:"high"},reviewer:{engine:"claude",model:"fable",effort:null}},{name:"Fable → Codex xhigh",implementer:{engine:"claude",model:"fable",effort:null},reviewer:{engine:"codex",model:null,effort:"xhigh"}},{name:"Sonnet → Codex xhigh",implementer:{engine:"claude",model:"sonnet",effort:null},reviewer:{engine:"codex",model:null,effort:"xhigh"}},{name:"Codex high → Codex xhigh",implementer:{engine:"codex",model:null,effort:"high"},reviewer:{engine:"codex",model:null,effort:"xhigh"}}];function q(a,b){g().mkdirSync(k().dirname(a),{recursive:!0});let c=k().join(k().dirname(a),`.${k().basename(a)}.${process.pid}.${e().randomUUID()}.tmp`);g().writeFileSync(c,JSON.stringify(b,null,2)+"\n","utf8"),g().renameSync(c,a)}function r(a,b){g().mkdirSync(k().dirname(a),{recursive:!0});let c=k().join(k().dirname(a),`.${k().basename(a)}.${process.pid}.${e().randomUUID()}.tmp`);g().writeFileSync(c,b,"utf8"),g().renameSync(c,a)}function s(a){try{return JSON.parse(g().readFileSync(a,"utf8"))}catch{return null}}function t(a){return!(!a||"object"!=typeof a||Array.isArray(a))&&"string"==typeof a.id&&"implement-review-loop"===a.template&&"string"==typeof a.cwd&&"string"==typeof a.implementerPath&&"string"==typeof a.baseRef&&Array.isArray(a.rounds)}function u(a){return!(!a||"object"!=typeof a||Array.isArray(a))&&"string"==typeof a.name&&!!a.implementer&&!!a.reviewer}function v(){let a=s(m);return(Array.isArray(a?.flows)?a.flows.filter(t):[]).map(a=>({...a,pausedState:a.pausedState??null,rounds:a.rounds.map(a=>({...a,sessionId:a.sessionId??null,reviewerPid:a.reviewerPid??null,spawnStartedAt:a.spawnStartedAt??null,relayStartedAt:a.relayStartedAt??null,error:a.error??null}))}))}function w(a){q(m,{flows:a})}function x(){let a=s(n),b=Array.isArray(a?.presets)?a.presets.filter(u):[];return b.length>0?b:(q(n,{presets:p}),p)}function y(a){return k().join(o,a)}function z(a,b){return k().join(y(a),`round-${b}-review.md`)}function A(a,b){return k().join(y(a),`round-${b}-last-message.md`)}function B(a,b){return k().join(y(a),`round-${b}-stderr.txt`)}function C(a,b){return k().join(y(a),`round-${b}-stdout.log`)}function D(a,b){let c=b.replace(/^\s*VERDICT:\s*(APPROVE|REQUEST_CHANGES|COMMENT)\s*$/im,"").trim();return`VERDICT: ${a}
4
+ ${c?"\n"+c+"\n":"\n"}`}}};
@@ -0,0 +1 @@
1
+ exports.id=628,exports.ids=[628],exports.modules={20640:(a,b,c)=>{"use strict";c.d(b,{M$:()=>A,Xn:()=>v,HR:()=>x});var d=c(77598),e=c.n(d),f=c(73024),g=c.n(f),h=c(48161),i=c.n(h),j=c(76760),k=c.n(j);let l=k().join(i().homedir(),".claude","viewer-state"),m=k().join(l,"push-keys.json"),n=k().join(l,"push-subscriptions.json"),o=k().join(l,"push-sent.json"),p=Promise.resolve();function q(a){return Buffer.from(a).toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function r(a){let b=a+"=".repeat((4-a.length%4)%4);return Buffer.from(b.replace(/-/g,"+").replace(/_/g,"/"),"base64")}function s(a,b){try{return JSON.parse(g().readFileSync(a,"utf8"))}catch{return b}}function t(a,b){try{return g().mkdirSync(k().dirname(a),{recursive:!0}),g().writeFileSync(a,JSON.stringify(b,null,2)),!0}catch{return!1}}function u(a,b,c){let d=[],f=Buffer.alloc(0),g=1;for(;Buffer.concat(d).length<c;)f=e().createHmac("sha256",a).update(f).update(b).update(Buffer.from([g])).digest(),d.push(f),g+=1;return Buffer.concat(d).subarray(0,c)}function v(){let a=s(m,null);if(a?.publicKey&&a.privateKey)return a;let b=e().generateKeyPairSync("ec",{namedCurve:"prime256v1"}),c={publicKey:q(b.publicKey.export({type:"spki",format:"der"}).subarray(-65)),privateKey:b.privateKey.export({type:"pkcs8",format:"pem"}).toString()};return t(m,c),c}async function w(a){if(!a.endpoint)return;let b=s(n,[]).filter(b=>b.endpoint!==a.endpoint);b.push(a),t(n,b)}async function x(a){p=p.then(()=>w(a),()=>w(a)),await p.catch(()=>void 0)}async function y(a,b){try{var c;let d,f,g,h,i,j=function(a,b){let c=a.keys?.p256dh,d=a.keys?.auth;if(!c||!d)return null;let f=r(c),g=r(d),h=e().randomBytes(16),i=e().createECDH("prime256v1"),j=i.generateKeys(),k=i.computeSecret(f),l=e().createHmac("sha256",g).update(k).digest(),m=u(l,Buffer.concat([Buffer.from("WebPush: info\0"),f,j]),32),n=e().createHmac("sha256",h).update(m).digest(),o=u(n,"Content-Encoding: aes128gcm\0",16),p=u(n,"Content-Encoding: nonce\0",12),q=Buffer.concat([Buffer.from(JSON.stringify(b),"utf8"),Buffer.from([2])]),s=e().createCipheriv("aes-128-gcm",o,p),t=Buffer.concat([s.update(q),s.final(),s.getAuthTag()]),v=Buffer.alloc(21);return h.copy(v,0),v.writeUInt32BE(4096,16),v.writeUInt8(j.length,20),Buffer.concat([v,j,t])}(a,b);if(!j)return"failed";let k=new Uint8Array(j.byteLength);k.set(j);let l=(c=new URL(a.endpoint).origin,d=v(),f=q(JSON.stringify({typ:"JWT",alg:"ES256"})),g=q(JSON.stringify({aud:c,exp:Math.floor(Date.now()/1e3)+43200,sub:"mailto:agent-log-viewer@localhost"})),(h=e().createSign("SHA256")).update(`${f}.${g}`),h.end(),i=h.sign({key:d.privateKey,dsaEncoding:"ieee-p1363"}),`${f}.${g}.${q(i)}`),m=new AbortController,n=setTimeout(()=>m.abort(),3e3),o=await fetch(a.endpoint,{method:"POST",signal:m.signal,headers:{authorization:`vapid t=${l}, k=${v().publicKey}`,"content-encoding":"aes128gcm","content-type":"application/octet-stream",ttl:"60",urgency:"normal"},body:k.buffer}).catch(()=>null);if(clearTimeout(n),!o)return"failed";if(o.status>=200&&o.status<300)return"sent";if(404===o.status||410===o.status)return"dead";return"failed"}catch{return"failed"}}async function z(a){let b;if(a.waitingInput&&Date.now()/1e3-a.waitingInput.since<60||!a.pendingQuestion&&!a.waitingInput)return;let c=function(a,b=Date.now()/1e3){return a.pendingQuestion?a.pendingQuestion.toolUseId:a.waitingInput?`${a.path}:waiting:${Math.floor(a.waitingInput.since)}`:"stalled"===a.activity&&"running"===a.proc&&b-a.mtime<=7200?`${a.path}:stalled:${Math.floor(a.mtime)}`:null}(a);if(!c)return;let d=new Set(s(o,[]));if(d.has(c))return;let e=s(n,[]);if(!e.length)return;let f=[],g=!1,h=!1,i=(b=a.pendingQuestion?.kind==="plan"?"plan awaiting approval":a.pendingQuestion?.questions?.[0]?.header||a.waitingInput?.menu?.question.slice(0,120)||(a.waitingInput?"waiting for an answer":"question"),{title:`${a.title||"Агент"} \xb7 ${a.engine}`,body:b,url:`/#f=${encodeURIComponent(a.path)}#question`});for(let a of e){let b=await y(a,i);"sent"===b?(g=!0,f.push(a)):"failed"===b?f.push(a):h=!0}g&&(d.add(c),t(o,[...d].slice(-500))),h&&t(n,f)}async function A(a){p=p.then(()=>z(a),()=>z(a)),await p.catch(()=>void 0)}},78335:()=>{},96487:()=>{}};
@@ -21,9 +21,15 @@
21
21
  "/api/proc": {},
22
22
  "/api/push": {},
23
23
  "/api/spawn": {},
24
+ "/api/tasks": {},
25
+ "/api/tasks/[id]": {},
26
+ "/api/tasks/[id]/send": {},
27
+ "/api/tasks/[id]/spawn": {},
24
28
  "/api/timeline": {},
25
29
  "/api/tmux": {},
26
30
  "/api/transcribe": {},
27
- "/api/transcribe/token": {}
31
+ "/api/transcribe/token": {},
32
+ "/api/workflows": {},
33
+ "/api/workflows/[id]": {}
28
34
  }
29
35
  }
@@ -1 +1 @@
1
- globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/eVZqd0xcmD_g_vTrSrlTL/_buildManifest.js","static/eVZqd0xcmD_g_vTrSrlTL/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-7dc14fd5ff1227ce.js","static/chunks/4bd1b696-215e5051988c3dde.js","static/chunks/794-0fc36bf1952fbc29.js","static/chunks/main-app-518cea4217042452.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
1
+ globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/_Dl3LKxoOqqIiQ3cL5oOx/_buildManifest.js","static/_Dl3LKxoOqqIiQ3cL5oOx/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-7dc14fd5ff1227ce.js","static/chunks/4bd1b696-215e5051988c3dde.js","static/chunks/794-0fc36bf1952fbc29.js","static/chunks/main-app-e6ff5fbff7d5b38f.js"],rootMainFilesTree:{},pages:{"/_app":[]}};