agent-log-viewer 0.4.0 → 0.6.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 (134) hide show
  1. package/dist/standalone/.next/BUILD_ID +1 -1
  2. package/dist/standalone/.next/app-path-routes-manifest.json +10 -8
  3. package/dist/standalone/.next/build-manifest.json +2 -2
  4. package/dist/standalone/.next/prerender-manifest.json +3 -3
  5. package/dist/standalone/.next/routes-manifest.json +12 -0
  6. package/dist/standalone/.next/server/app/_global-error/page.js +2 -2
  7. package/dist/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  8. package/dist/standalone/.next/server/app/_global-error.html +1 -1
  9. package/dist/standalone/.next/server/app/_global-error.rsc +1 -1
  10. package/dist/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/dist/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  12. package/dist/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  13. package/dist/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  14. package/dist/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  15. package/dist/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/dist/standalone/.next/server/app/_not-found/page.js +2 -2
  17. package/dist/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  18. package/dist/standalone/.next/server/app/_not-found.html +1 -1
  19. package/dist/standalone/.next/server/app/_not-found.rsc +2 -2
  20. package/dist/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  21. package/dist/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  22. package/dist/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  23. package/dist/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  24. package/dist/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  25. package/dist/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  26. package/dist/standalone/.next/server/app/api/access/route.js +1 -1
  27. package/dist/standalone/.next/server/app/api/answer/route.js +1 -1
  28. package/dist/standalone/.next/server/app/api/files/route.js +1 -1
  29. package/dist/standalone/.next/server/app/api/flows/[id]/route.js +1 -1
  30. package/dist/standalone/.next/server/app/api/flows/route.js +1 -1
  31. package/dist/standalone/.next/server/app/api/inbox/route.js +2 -1
  32. package/dist/standalone/.next/server/app/api/limits/route.js +2 -1
  33. package/dist/standalone/.next/server/app/api/log/route.js +1 -1
  34. package/dist/standalone/.next/server/app/api/proc/route.js +1 -1
  35. package/dist/standalone/.next/server/app/api/push/route.js +1 -1
  36. package/dist/standalone/.next/server/app/api/resources/route.js +1 -0
  37. package/dist/standalone/.next/server/app/api/resources/route.js.nft.json +1 -0
  38. package/dist/standalone/.next/server/app/api/resources/route_client-reference-manifest.js +1 -0
  39. package/dist/standalone/.next/server/app/api/spawn/route.js +1 -1
  40. package/dist/standalone/.next/server/app/api/tasks/[id]/route.js +2 -1
  41. package/dist/standalone/.next/server/app/api/tasks/[id]/send/route.js +1 -1
  42. package/dist/standalone/.next/server/app/api/tasks/[id]/spawn/route.js +1 -1
  43. package/dist/standalone/.next/server/app/api/tasks/route.js +2 -1
  44. package/dist/standalone/.next/server/app/api/timeline/route.js +1 -1
  45. package/dist/standalone/.next/server/app/api/tmux/route.js +1 -1
  46. package/dist/standalone/.next/server/app/api/transcribe/backend/route.js +2 -0
  47. package/dist/standalone/.next/server/app/api/transcribe/backend/route.js.nft.json +1 -0
  48. package/dist/standalone/.next/server/app/api/transcribe/backend/route_client-reference-manifest.js +1 -0
  49. package/dist/standalone/.next/server/app/api/transcribe/route.js +2 -1
  50. package/dist/standalone/.next/server/app/api/transcribe/token/route.js +2 -1
  51. package/dist/standalone/.next/server/app/api/transcribe/token/route.js.nft.json +1 -1
  52. package/dist/standalone/.next/server/app/api/workflows/[id]/route.js +1 -1
  53. package/dist/standalone/.next/server/app/api/workflows/route.js +1 -1
  54. package/dist/standalone/.next/server/app/favicon.ico/route.js +1 -1
  55. package/dist/standalone/.next/server/app/index.html +1 -1
  56. package/dist/standalone/.next/server/app/index.rsc +3 -3
  57. package/dist/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  58. package/dist/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
  59. package/dist/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  60. package/dist/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  61. package/dist/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  62. package/dist/standalone/.next/server/app/page.js +3 -3
  63. package/dist/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  64. package/dist/standalone/.next/server/app-paths-manifest.json +10 -8
  65. package/dist/standalone/.next/server/chunks/51.js +2 -2
  66. package/dist/standalone/.next/server/chunks/628.js +2 -1
  67. package/dist/standalone/.next/server/functions-config-manifest.json +2 -0
  68. package/dist/standalone/.next/server/middleware-build-manifest.js +1 -1
  69. package/dist/standalone/.next/server/pages/404.html +1 -1
  70. package/dist/standalone/.next/server/pages/500.html +1 -1
  71. package/dist/standalone/.next/server/server-reference-manifest.json +1 -1
  72. package/dist/standalone/.next/static/chunks/app/_global-error/page-d7076e85e83ffb98.js +1 -0
  73. package/dist/standalone/.next/static/chunks/app/api/access/route-d7076e85e83ffb98.js +1 -0
  74. package/dist/standalone/.next/static/chunks/app/api/answer/route-d7076e85e83ffb98.js +1 -0
  75. package/dist/standalone/.next/static/chunks/app/api/files/route-d7076e85e83ffb98.js +1 -0
  76. package/dist/standalone/.next/static/chunks/app/api/flows/[id]/route-d7076e85e83ffb98.js +1 -0
  77. package/dist/standalone/.next/static/chunks/app/api/flows/route-d7076e85e83ffb98.js +1 -0
  78. package/dist/standalone/.next/static/chunks/app/api/inbox/route-d7076e85e83ffb98.js +1 -0
  79. package/dist/standalone/.next/static/chunks/app/api/limits/route-d7076e85e83ffb98.js +1 -0
  80. package/dist/standalone/.next/static/chunks/app/api/log/route-d7076e85e83ffb98.js +1 -0
  81. package/dist/standalone/.next/static/chunks/app/api/proc/route-d7076e85e83ffb98.js +1 -0
  82. package/dist/standalone/.next/static/chunks/app/api/push/route-d7076e85e83ffb98.js +1 -0
  83. package/dist/standalone/.next/static/chunks/app/api/resources/route-d7076e85e83ffb98.js +1 -0
  84. package/dist/standalone/.next/static/chunks/app/api/spawn/route-d7076e85e83ffb98.js +1 -0
  85. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/route-d7076e85e83ffb98.js +1 -0
  86. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/send/route-d7076e85e83ffb98.js +1 -0
  87. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/spawn/route-d7076e85e83ffb98.js +1 -0
  88. package/dist/standalone/.next/static/chunks/app/api/tasks/route-d7076e85e83ffb98.js +1 -0
  89. package/dist/standalone/.next/static/chunks/app/api/timeline/route-d7076e85e83ffb98.js +1 -0
  90. package/dist/standalone/.next/static/chunks/app/api/tmux/route-d7076e85e83ffb98.js +1 -0
  91. package/dist/standalone/.next/static/chunks/app/api/transcribe/backend/route-d7076e85e83ffb98.js +1 -0
  92. package/dist/standalone/.next/static/chunks/app/api/transcribe/route-d7076e85e83ffb98.js +1 -0
  93. package/dist/standalone/.next/static/chunks/app/api/transcribe/token/route-d7076e85e83ffb98.js +1 -0
  94. package/dist/standalone/.next/static/chunks/app/api/workflows/[id]/route-d7076e85e83ffb98.js +1 -0
  95. package/dist/standalone/.next/static/chunks/app/api/workflows/route-d7076e85e83ffb98.js +1 -0
  96. package/dist/standalone/.next/static/chunks/app/page-09ecf578566abdf4.js +2 -0
  97. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-d7076e85e83ffb98.js +1 -0
  98. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-d7076e85e83ffb98.js +1 -0
  99. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-d7076e85e83ffb98.js +1 -0
  100. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d7076e85e83ffb98.js +1 -0
  101. package/dist/standalone/.next/static/css/c0195760cb5fe40b.css +1 -0
  102. package/dist/standalone/.next/static/oG2UHPESvNk9G8RqKOqh_/_buildManifest.js +1 -0
  103. package/dist/standalone/package.json +1 -1
  104. package/package.json +1 -1
  105. package/dist/standalone/.next/static/_Dl3LKxoOqqIiQ3cL5oOx/_buildManifest.js +0 -1
  106. package/dist/standalone/.next/static/chunks/app/_global-error/page-2c88d1e3e1518770.js +0 -1
  107. package/dist/standalone/.next/static/chunks/app/api/access/route-2c88d1e3e1518770.js +0 -1
  108. package/dist/standalone/.next/static/chunks/app/api/answer/route-2c88d1e3e1518770.js +0 -1
  109. package/dist/standalone/.next/static/chunks/app/api/files/route-2c88d1e3e1518770.js +0 -1
  110. package/dist/standalone/.next/static/chunks/app/api/flows/[id]/route-2c88d1e3e1518770.js +0 -1
  111. package/dist/standalone/.next/static/chunks/app/api/flows/route-2c88d1e3e1518770.js +0 -1
  112. package/dist/standalone/.next/static/chunks/app/api/inbox/route-2c88d1e3e1518770.js +0 -1
  113. package/dist/standalone/.next/static/chunks/app/api/limits/route-2c88d1e3e1518770.js +0 -1
  114. package/dist/standalone/.next/static/chunks/app/api/log/route-2c88d1e3e1518770.js +0 -1
  115. package/dist/standalone/.next/static/chunks/app/api/proc/route-2c88d1e3e1518770.js +0 -1
  116. package/dist/standalone/.next/static/chunks/app/api/push/route-2c88d1e3e1518770.js +0 -1
  117. package/dist/standalone/.next/static/chunks/app/api/spawn/route-2c88d1e3e1518770.js +0 -1
  118. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/route-2c88d1e3e1518770.js +0 -1
  119. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/send/route-2c88d1e3e1518770.js +0 -1
  120. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/spawn/route-2c88d1e3e1518770.js +0 -1
  121. package/dist/standalone/.next/static/chunks/app/api/tasks/route-2c88d1e3e1518770.js +0 -1
  122. package/dist/standalone/.next/static/chunks/app/api/timeline/route-2c88d1e3e1518770.js +0 -1
  123. package/dist/standalone/.next/static/chunks/app/api/tmux/route-2c88d1e3e1518770.js +0 -1
  124. package/dist/standalone/.next/static/chunks/app/api/transcribe/route-2c88d1e3e1518770.js +0 -1
  125. package/dist/standalone/.next/static/chunks/app/api/transcribe/token/route-2c88d1e3e1518770.js +0 -1
  126. package/dist/standalone/.next/static/chunks/app/api/workflows/[id]/route-2c88d1e3e1518770.js +0 -1
  127. package/dist/standalone/.next/static/chunks/app/api/workflows/route-2c88d1e3e1518770.js +0 -1
  128. package/dist/standalone/.next/static/chunks/app/page-f48448e03fac75b1.js +0 -2
  129. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-2c88d1e3e1518770.js +0 -1
  130. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-2c88d1e3e1518770.js +0 -1
  131. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-2c88d1e3e1518770.js +0 -1
  132. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-2c88d1e3e1518770.js +0 -1
  133. package/dist/standalone/.next/static/css/543219aee607c693.css +0 -1
  134. /package/dist/standalone/.next/static/{_Dl3LKxoOqqIiQ3cL5oOx → oG2UHPESvNk9G8RqKOqh_}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
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}
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)()}}},14289:(a,b,c)=>{c.d(b,{Z:()=>i,j:()=>f});var d=c(76760),e=c.n(d);let f=(0,c(91724).oy)(),g={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp"},h=/^[A-Za-z0-9._-]+\.(png|jpe?g|gif|webp)$/i;function i(a){let b=a.match(h);if(!b||e().basename(a)!==a)return null;let c=g[(b[1]??"").toLowerCase()];return c?{path:e().join(f,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),c.effort&&d.push("--effort",c.effort),{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}`),null!=c.fast&&d.push("-c",`service_tier=${c.fast?"priority":"standard"}`),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()}c(58152)},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(23921),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(23921);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"}}},23921:(a,b,c)=>{c.d(b,{$L:()=>s,$U:()=>r,$w:()=>n,BB:()=>q,Bj:()=>z,FQ:()=>p,FW:()=>y,Fe:()=>u,Ib:()=>x,SP:()=>o,Ue:()=>t,Vt:()=>w,pl:()=>m});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(59683),i=c(89333);let j=null,k=null,l=null;function m(a){return Number.isInteger(a)&&a>0&&h.B.pidAlive(a)}function n(a=!1){let b=Date.now();if(!a&&j&&b-j.at<5e3)return j.map;let c=new Map;return h.B.scanFdTargetsUnder(i.GH["claude-tasks"],(a,b)=>{a.endsWith(".output")&&!c.has(a)&&c.set(a,b)}),j={at:b,map:c},c}function o(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 e().realpathSync(a)}catch{return null}}(b);a&&c.set(a,b)}let d=[...c.keys()].sort().join("\0"),f=Date.now();if(!b&&k&&k.key===d&&f-k.at<5e3)return k.map;let g=new Map;return c.size>0&&h.B.scanFdTargetsFor([...c.keys()],(a,b,d)=>{let e=c.get(a);e&&!g.has(e)&&d()&&g.set(e,b)}),k={at:f,key:d,map:g},g}function p(a,b){return h.B.pidWritesPath(a,b)}function q(a,b){return h.B.pidHoldsPath(a,b)}function r(a){return h.B.readArgv(a)}function s(a){return h.B.readCwd(a)}function t(a){return h.B.readArgv(a).join(" ")}function u(a){for(let b of a.slice(0,2)){let a=g().basename(b);if("claude"===a||"claude.exe"===a)return"claude";if("codex"===a||"codex.exe"===a)return"codex"}return null}let v=new Set(["daemon","--bg-pty-host","--bg-spare"]);function w(a){return a.some(a=>v.has(a))}function x(a){return h.B.readPpid(a)}function y(a,b){return h.B.readEnvVar(a,b)}function z(a=!1){let b=Date.now();if(!a&&l&&b-l.at<5e3)return l.list;let c=[];for(let a of h.B.listProcesses()){let b=u(a.argv);null===b||w(a.argv)||null!==a.cwd&&c.push({pid:a.pid,engine:b,argv:a.argv,cwd:a.cwd,tty:a.tty})}return l={at:b,list:c},c}},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:()=>q,N0:()=>p,OA:()=>s,_b:()=>r,a9:()=>o});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(91724),i=c(23921);let j=(0,h.BQ)("handoff-lineage.json"),k=null,l=null,m=!1;function n(){if(k&&l)return{panes:k,children:l};k=new Map,l=new Map;let a={};try{a=JSON.parse(e().readFileSync(j,"utf8"))}catch{}for(let[b,c]of Object.entries(a.panes??{})){let a=Number(b);Number.isInteger(a)&&a>0&&"string"==typeof c&&(0,i.pl)(a)&&k.set(a,c)}for(let[b,c]of Object.entries(a.children??{}))"string"==typeof c&&e().existsSync(b)&&l.set(b,c);let b=Object.keys(a.panes??{}).length+Object.keys(a.children??{}).length;return k.size+l.size!==b&&(m=!0),{panes:k,children:l}}function o(a,b){if(!Number.isInteger(a)||a<=0)return;let c=n();c.panes.get(a)!==b&&(c.panes.set(a,b),m=!0,s())}function p(a){return n().panes.get(a)??null}function q(a,b){let c=n();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)}m=!0}}function r(a){return n().children.get(a)??null}function s(){if(!m)return;m=!1;let a=n();try{e().mkdirSync(g().dirname(j),{recursive:!0}),e().writeFileSync(j,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(23921),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:()=>r,K8:()=>w,Ny:()=>u,RK:()=>A,VO:()=>B,_F:()=>z,aL:()=>x,co:()=>v});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(91724),i=c(98590);let j=(0,h.BQ)("workflows.json"),k=(0,h.BQ)("workflow-templates.json"),l=(0,h.BQ)("workflows"),m={engine:"codex",model:null,effort:"low"},n=[{name:"fullstack",setup:"bun install",verify:"bun test && bun run build",finish:"pr",stages:[{kind:"implement",agent:{engine:"codex",model:null,effort:"high"},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:{...m},roundLimit:5,reviewerMode:"headless"}]}];function o(a,b){(0,i.Yj)(a,JSON.stringify(b,null,2)+"\n")}function p(a){try{return JSON.parse(e().readFileSync(a,"utf8"))}catch{return null}}function q(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 r(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=q(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=q(a.reviewer);return c?{kind:"review-loop",reviewer:c,fixer:(b=q(a.fixer))&&"codex"===b.engine?{engine:"codex",model:b.model,effort:"low"}:{...m},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 s(a){if(!a||"object"!=typeof a||Array.isArray(a)||"string"!=typeof a.name||!a.name.trim())return null;let b=r(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 t(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!==s(a.template)}function u(){let a=p(j);return(Array.isArray(a?.workflows)?a.workflows.filter(t):[]).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 v(a){o(j,{workflows:a})}function w(){let a=p(k),b=Array.isArray(a?.templates)?a.templates.map(s).filter(a=>null!==a):[];return b.length>0?b:(o(k,{templates:n}),n)}function x(a){let b=g().basename(a.repoDir);return{id:a.id,name:a.name,task:a.task,project:a.project,repoDir:a.repoDir,worktreeDir:g().join(g().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 y(a){return g().join(l,a)}function z(a){return g().join(y(a),"setup-stdout.log")}function A(a){return g().join(y(a),"setup-stderr.log")}function B(a){return g().join(y(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),a.effort&&e.push("--effort",a.effort),{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]}},58152:(a,b,c)=>{c.d(b,{BL:()=>e});let d={claude:["low","medium","high","xhigh","max"],codex:["low","medium","high","xhigh"]};function e(a,b){let c="string"==typeof b.effort?b.effort.trim():"";return c&&!d[a].includes(c)?{effort:null,fast:null,error:`effort для ${a} має бути одним із: ${d[a].join(", ")}`}:{effort:c||null,fast:"codex"===a&&"boolean"==typeof b.fast?b.fast:null}}},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})},59683:(a,b,c)=>{let d;c.d(b,{B:()=>B});var e=c(73024),f=c.n(e),g=c(76760),h=c.n(g),i=c(70547);let j="/proc";function k(a){try{return f().readFileSync(h().join(j,String(a),"cmdline"),"utf8").split("\0").filter(Boolean)}catch{return[]}}function l(a){try{return f().readlinkSync(h().join(j,String(a),"cwd"))}catch{return null}}function m(a){let b;try{b=f().readFileSync(h().join(j,String(a),"stat"),"utf8")}catch{return null}return b.slice(b.lastIndexOf(")")+2).trim().split(/\s+/)}function n(a){try{return(128&f().lstatSync(a).mode)!=0}catch{return!1}}function o(a){let b;try{b=f().readdirSync(j,{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(j,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,()=>n(g))}}}let p={name:"linux",pidAlive:function(a){return Number.isInteger(a)&&a>0&&f().existsSync(h().join(j,String(a)))},readArgv:k,readCwd:l,readPpid:function(a){let b=m(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(j,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(j,{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:k(a),cwd:l(a),tty:function(a){let b=m(a),c=b?Number(b[4]):NaN;return Number.isInteger(c)&&c>0?c:0}(a)})}return b},systemMemory:function(){try{return(0,i.NW)(f().readFileSync(h().join(j,"meminfo"),"utf8"))}catch{return null}},processMemory:function(a){let b=new Map;for(let c of a)if(Number.isInteger(c)&&!(c<=0))try{b.set(c,(0,i.sW)(f().readFileSync(h().join(j,String(c),"status"),"utf8")))}catch{}return b},ppidMap:function(){let a,b=new Map;try{a=f().readdirSync(j,{withFileTypes:!0})}catch{return b}for(let c of a){if(!c.isDirectory()||!/^\d+$/.test(c.name))continue;let a=Number(c.name),d=m(a),e=d?Number(d[1]):NaN;Number.isInteger(e)&&e>0&&b.set(a,e)}return b},scanFdTargetsUnder:function(a,b){o(b)},scanFdTargetsFor:function(a,b){o(b)},pidWritesPath:function(a,b){let c,d;try{c=f().realpathSync(b)}catch{c=null}let e=h().join(j,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)&&n(g))return!0}return!1},pidHoldsPath:function(a,b){let c;try{c=f().readdirSync(h().join(j,String(a),"fd"),{withFileTypes:!0})}catch{return!1}for(let d of c)try{if(f().readlinkSync(h().join(j,String(a),"fd",d.name))===b)return!0}catch{continue}return!1}};var q=c(31421),r=c(48161),s=c.n(r);function t(a,b){let c=(0,q.spawnSync)(a,b,{encoding:"utf8",maxBuffer:0x1000000,timeout:1e4});return c.error||"string"!=typeof c.stdout?"":c.stdout}let u=new Map,v=1,w=/^\s*(\d+)\s+(\d+)\s+(\S+)\s+(.*)$/;function x(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 y=null;function z(){let a=Date.now();if(y&&a-y.at<5e3)return y.byPid;let b=function(a){let b=new Map;for(let c of a.split("\n")){let a=w.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=u.get(a);return void 0===b&&(b=v,v+=1,u.set(a,b)),b}(a[3]??""),argv:f})}return b}(t("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}(t("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 y={at:a,byPid:d},d}let A={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 z().get(a)?.argv??[]},readCwd:function(a){return z().get(a)?.cwd??null},readPpid:function(a){return z().get(a)?.ppid??null},readEnvVar:function(){return null},listProcesses:function(){let a=[];for(let[b,c]of z())a.push({pid:b,argv:c.argv,cwd:c.cwd,tty:c.tty});return a},systemMemory:function(){let a=s().totalmem(),b=(0,i.Lc)(t("vm_stat",[]));if(!a||null===b)return null;let c=(0,i.yh)(t("sysctl",["-n","vm.swapusage"]));return{ramTotal:a,ramAvailable:Math.min(b,a),swapTotal:c?.swapTotal??0,swapUsed:c?.swapUsed??0}},processMemory:function(a){let b=new Set;for(let c of a)Number.isInteger(c)&&c>0&&b.add(c);let c=new Map;if(0===b.size)return c;for(let[a,d]of(0,i.CT)(t("ps",["-axo","pid=,rss="])))b.has(a)&&c.set(a,{rssBytes:d,swapBytes:0});return c},ppidMap:function(){let a=new Map;for(let[b,c]of z())null!==c.ppid&&a.set(b,c.ppid);return a},scanFdTargetsUnder:function(a,b){a&&f().existsSync(a)&&x(t("lsof",["-w","+D",a,"-Fpfan"]),b)},scanFdTargetsFor:function(a,b){let c=[...new Set(a.filter(Boolean))];0!==c.length&&x(t("lsof",["-w","-Fpfan","--",...c]),b)},pidWritesPath:function(a,b){let c=!1;return x(t("lsof",["-w","-a","-p",String(a),"-Fpfan","--",b]),(a,b,d)=>{d()&&(c=!0)}),c},pidHoldsPath:function(a,b){let c=!1;return x(t("lsof",["-w","-a","-p",String(a),"-Fpfan","--",b]),()=>{c=!0}),c}},B="portable"===(d=process.env.VIEWER_PROC_BACKEND)?A:"linux"===d||"linux"===process.platform?p:A},69232:(a,b,c)=>{c.d(b,{C:()=>aa});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(23921);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(91724),A=c(26474);let B=(0,i.E)("needle");function C(a,b){let c,d=B.get(a);if(d&&d.hits||(d={hits:{},scanned:d?.scanned??{}},B.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 D(a,b){for(let c of b)if(c&&C(a,c))return c;return null}let E=(0,i.E)("sid-slug"),F=(0,i.E)("bgcmd"),G=(0,i.E)("chain-uuid");function H(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()?H(d,b,c):e.isFile()&&b(d)&&c.push(d)}return c}function I(a,b){let c=r.GH["claude-projects"],d=b??E.get(a)??null;if(!d){let b=H(c,b=>p().basename(b)===a+".jsonl")[0];if(!b)return[null,[]];d=p().basename(p().dirname(b)),E.set(a,d)}let e=p().join(c,d,a+".jsonl"),f=H(p().join(c,d,a,"subagents"),a=>p().basename(a).startsWith("agent-")&&a.endsWith(".jsonl")).sort();return[n().existsSync(e)?e:null,f]}let J=(0,z.BQ)("codex-lineage.json"),K=(0,i.E)("codex-lineage"),L=!1,M=!1,N=(0,i.E)("model");function O(a){return a?a.trim().replace(/^claude-/,"").replace(/-20\d{6}$/,""):null}function P(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 Q=(0,i.E)("plan"),R=(0,i.E)("goal");function S(a){return"in_progress"===a||"completed"===a?a:"pending"}function T(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 U(a){return"active"===a||"complete"===a||"blocked"===a?a:null}var V=c(17341),W=c(15159),X=c(27359);let Y=new Map,Z={waiting:null,atComposer:!1};async function $(a){let b=Date.now();for(let[a,c]of Y)b-c.at>6e5&&Y.delete(a);if("running"!==a.proc||null===a.pid||a.pendingQuestion)return Y.delete(a.path),Z;if(Date.now()/1e3-a.mtime<15)return Z;let c=await (0,e.u1)(a.pid);if(null===c)return Z;let d=await (0,e.ZB)(c);if(!(0,X.cZ)(d))return Y.delete(a.path),{waiting:null,atComposer:(0,X.WM)(d)};let f=Y.get(a.path);return f&&f.screen===d?(Y.set(a.path,{...f,at:b}),b/1e3-f.since<15)?Z:{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,X.fm)(d)},atComposer:!1}:(Y.set(a.path,{screen:d,at:b,since:b/1e3}),Z)}let _=new Map;async function aa(){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)():_,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 O(c)}if("claude-projects"!==a.root&&"codex-sessions"!==a.root||!a.path.endsWith(".jsonl"))return null;let b=N.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=P(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=P(a,d)))break}catch{}}catch{}let d=O(c);return N.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,W.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,V.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=Q.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 T((0,j.Em)((0,j.xK)(b)?.plan).map(a=>{let b=(0,j.r$)(a.step)?.trim();return b?{text:b,status:S(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 T((0,j.Em)((0,j.xK)(b.input)?.todos).map(a=>{let b=S(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 Q.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=R.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:U(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:U(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 R.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 H(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]=I(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=D(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]=I(c,e);!f&&e&&([f,g]=I(c,null));let h=D(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]=I(d,c),h=function(a,b,c){if(F.has(a))return F.get(a)??null;let d="background with ID: "+a,e=null;for(let f of[...b,...c]){if(!f||!C(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 F.set(a,c),c}e??={command:"",description:"",source:f}}return e&&F.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(L)return;L=!0;let a=(0,j.Vh)(J);if(a&&"object"==typeof a&&!Array.isArray(a)){for(let[b,c]of Object.entries(a))"string"==typeof c&&!K.has(b)&&n().existsSync(b)&&K.set(b,c);K.size!==Object.keys(a).length&&(M=!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(K.get(d)!==e){for(K.set(d,e);K.size>2e3;){let a=K.keys().next().value;if(void 0===a)break;K.delete(a)}M=!0}}else{let b=K.get(a.path);b&&(a.parent=b)}}if(M){M=!1;try{n().mkdirSync(p().dirname(J),{recursive:!0}),n().writeFileSync(J,JSON.stringify(Object.fromEntries(K)))}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,A._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,A.N0)(d))));d=(0,t.Ib)(d));a&&a!==b.path&&(0,A.A6)(b.path,a)}a&&a!==b.path&&e.has(a)&&(b.parent=a,b.handoff=!0)}(0,A.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=G.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 G.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=>C(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}},70547:(a,b,c)=>{function d(a,b){let c=RegExp(`^${b}:\\s+(\\d+)\\s*kB`,"m").exec(a);if(!c)return null;let d=Number(c[1]);return Number.isFinite(d)?1024*d:null}function e(a){let b=d(a,"MemTotal"),c=d(a,"MemAvailable");if(null===b||null===c||b<=0)return null;let e=d(a,"SwapTotal")??0,f=d(a,"SwapFree")??e;return{ramTotal:b,ramAvailable:c,swapTotal:e,swapUsed:Math.max(0,e-f)}}function f(a){return{rssBytes:d(a,"VmRSS")??0,swapBytes:d(a,"VmSwap")??0}}function g(a){let b=Number(/page size of (\d+) bytes/.exec(a)?.[1]);if(!Number.isFinite(b)||b<=0)return null;let c=b=>{let c=RegExp(`^${b}:\\s+(\\d+)\\.?`,"m").exec(a);return c?Number(c[1]):null},d=c("Pages free"),e=c("Pages inactive");return null===d||null===e?null:(d+e+(c("Pages purgeable")??0))*b}c.d(b,{CT:()=>k,Lc:()=>g,NW:()=>e,mO:()=>l,sW:()=>f,yh:()=>j});let h=/([\d.]+)\s*([KMGT])/;function i(a){let b=h.exec(a);if(!b)return null;let c=Number(b[1]);return Number.isFinite(c)?Math.round(c*({K:1024,M:1048576,G:0x40000000,T:0x10000000000})[b[2]]):null}function j(a){let b=/total\s*=\s*(\S+)/.exec(a)?.[1],c=/used\s*=\s*(\S+)/.exec(a)?.[1];if(!b||!c)return null;let d=i(b),e=i(c);return null===d||null===e?null:{swapTotal:d,swapUsed:e}}function k(a){let b=new Map;for(let c of a.split("\n")){let a=/^\s*(\d+)\s+(\d+)\s*$/.exec(c);a&&b.set(Number(a[1]),1024*Number(a[2]))}return b}function l(a,b){let c=new Map;for(let[a,d]of b){if(a===d)continue;let b=c.get(d);b?b.push(a):c.set(d,[a])}let d=new Set([a]),e=[],f=[a];for(;f.length;){let a=f.pop();for(let b of(e.push(a),c.get(a)??[]))d.has(b)||(d.add(b),f.push(b))}return e}},75051:(a,b,c)=>{c.d(b,{Am:()=>W,Fu:()=>s,IJ:()=>V,HZ:()=>N,VT:()=>F,aI:()=>x,mB:()=>M,RZ:()=>L,m7:()=>v,zX:()=>E,ZB:()=>S,u1:()=>w,EW:()=>D,V1:()=>T,oF:()=>B,KY:()=>P,Tk:()=>U,WS:()=>z});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(91724);let l=(0,k.BQ)("events.ndjson");function m(a,b){try{h().mkdirSync(j().dirname(l),{recursive:!0});try{h().statSync(l).size>4194304&&h().renameSync(l,l+".1")}catch{}let c={ts:new Date().toISOString(),action:a,...b};h().appendFileSync(l,JSON.stringify(c)+"\n","utf8")}catch{}}let n={"image/png":"png","image/jpeg":"jpg","image/jpg":"jpg","image/gif":"gif","image/webp":"webp"};var o=c(14289),p=c(69232),q=c(23921),r=c(27359);function s(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===(n["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 t=null;function u(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 v(a=!1){let b,c=Date.now();if(!a&&t&&c-t.at<5e3)return t.map;let d=new Map;try{b=await u(["list-panes","-a","-F","#{session_name}:#{window_index}.#{pane_index} #{pane_id} #{pane_pid}"])}catch{return t={at:c,map:d},d}if(0===b.code)for(let a of b.stdout.split("\n")){let[b="",c="",e=""]=a.split(" "),f=Number(e.trim());b.trim()&&c.startsWith("%")&&Number.isInteger(f)&&f>0&&d.set(f,{target:b.trim(),paneId:c.trim()})}return t={at:c,map:d},d}async function w(a){if(!Number.isInteger(a)||a<=0)return null;let b=await v();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.target;if(c.has(d)||(0,q.Vt)((0,q.$U)(d)))break;c.add(d),d=(0,q.Ib)(d)}return null}async function x(){let a=new Set;for(let b of(await (0,p.C)()))null!==b.pid&&"running"===b.proc&&(0,q.pl)(b.pid)&&a.add(b.pid);return a}let y=new Map;async function z(a,b){let c=(y.get(a)??Promise.resolve()).then(b,b);y.set(a,c.catch(()=>void 0));try{return await c}finally{y.get(a)!==c&&y.size>256&&y.clear()}}async function A(a){let b=await R(a);if(null===b)throw Error("tmux-пейн недоступний");if((0,r.g2)(b))throw m("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,r.fm)(b))throw m("gate",{target:a,result:"error",reason:"select_dialog"}),Error("агент чекає на вибір у пейні — дай відповідь перед новим повідомленням");let c=(0,r._1)(b);if(null!==c)throw m("gate",{target:a,result:"error",reason:c}),Error("rate_limit"===c?"агент уперся в rate limit — повідомлення не надіслано":"агент чекає на підтвердження в пейні — дай відповідь перед новим повідомленням");let d=(0,r.ye)(b);if(null!==d){m("gate",{target:a,result:"ok",reason:d}),await u(["send-keys","-t",a,"Enter"]),await Q(700);continue}return}}async function B(a,b){await z(a,async()=>{try{await A(a),await C(a,b),m("send",{target:a,result:"ok",meta:{bytes:b.length}})}catch(b){throw m("send",{target:a,result:"error",reason:b instanceof Error?b.message:String(b)}),b}})}async function C(a,b){let c=`viewer-${Date.now()}-${Math.floor(1e6*Math.random())}`,d=await u(["load-buffer","-b",c,"-"],Buffer.from(b,"utf8"));if(0!==d.code)throw Error(d.stderr.trim()||"не вдалося завантажити буфер tmux");let e=await u(["paste-buffer","-d","-p","-b",c,"-t",a]);if(0!==e.code)throw Error(e.stderr.trim()||"не вдалося вставити текст у пейн");await Q(250);let f=await u(["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,r.dC)(await S(a));if(!(""!==g&&b.includes(g)||b.includes("[Pasted text")))return;await u(["send-keys","-t",a,"Enter"])}}async function D(a){let b=await u(["send-keys","-t",a,"Escape"]);if(m("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 E(a){let b=await u(["display-message","-p","-t",a,"#{pane_pid}"]).catch(()=>null),c=b&&0===b.code?Number(b.stdout.trim()):NaN;return Number.isInteger(c)&&c>0?c:null}async function F(a){let b=await u(["kill-pane","-t",a]);if(m("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 u(["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 u(["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 u(["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=(0,k.BQ)("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(j().dirname(H),{recursive:!0}),h().writeFileSync(H,JSON.stringify(Object.fromEntries(I)))}catch{}}async function L(a){let b=await u(["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,r.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 B(d.paneId,c),{target:d.display,spawned:!1};let e=O.get(a);if(e){let a=await e;return await B(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(),m("resume",{target:c.display,path:a,cwd:b.cwd,result:"ok"}),{target:c.display,spawned:!0}}catch(c){throw m("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 u(["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 u(["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 u(["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 u(["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 u(["send-keys","-t",e,"-l",a.command]);if(0!==i.code)throw Error(i.stderr.trim()||"не вдалося ввести команду в пейн");let j=await u(["send-keys","-t",e,"Enter"]);if(0!==j.code)throw Error(j.stderr.trim()||"не вдалося запустити агента");let k=Date.now()+6e4,l=!1,n="",o="",p=0;for(;Date.now()<k;){await Q(1e3);let b=await R(e);if(null===b)throw Error("вікно агента закрилося одразу після запуску");if((0,r.g2)(b)){if(l)throw Error(`агент завершився одразу після запуску: ${(0,r.d3)(await S(e))}`);continue}l=!0;let c=await S(e),d=c!==n?(0,r.ye)(c):null;if(null!==d){m("gate",{target:e,cwd:a.cwd,result:"ok",reason:d}),await u(["send-keys","-t",e,"Enter"]),n=c,o="",p=0;continue}if(r.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,r.g2)(q))throw m("spawn",{target:e,cwd:a.cwd,result:"error",reason:"agent_exited_on_boot"}),Error(`агент не запустився у вікні: ${(0,r.d3)(await S(e))}`);return m("spawn",{target:e,cwd:a.cwd,...a.transcript?{path:a.transcript}:{},result:"ok",meta:{window:a.windowName}}),b&&await B(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=n[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(o.j,{recursive:!0});let e=j().join(o.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:()=>A,NO:()=>z,Sn:()=>B,Vd:()=>v,WJ:()=>y,Yj:()=>p,mL:()=>t,tR:()=>x,tu:()=>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(91724);let k=(0,j.BQ)("flows.json"),l=(0,j.BQ)("review-loop-presets.json"),m=(0,j.BQ)("flows"),n=[{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 o(a,b){g().mkdirSync(i().dirname(a),{recursive:!0});let c=i().join(i().dirname(a),`.${i().basename(a)}.${process.pid}.${e().randomUUID()}.tmp`);g().writeFileSync(c,JSON.stringify(b,null,2)+"\n","utf8"),g().renameSync(c,a)}function p(a,b){g().mkdirSync(i().dirname(a),{recursive:!0});let c=i().join(i().dirname(a),`.${i().basename(a)}.${process.pid}.${e().randomUUID()}.tmp`);g().writeFileSync(c,b,"utf8"),g().renameSync(c,a)}function q(a){try{return JSON.parse(g().readFileSync(a,"utf8"))}catch{return null}}function r(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 s(a){return!(!a||"object"!=typeof a||Array.isArray(a))&&"string"==typeof a.name&&!!a.implementer&&!!a.reviewer}function t(){let a=q(k);return(Array.isArray(a?.flows)?a.flows.filter(r):[]).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 u(a){o(k,{flows:a})}function v(){let a=q(l),b=Array.isArray(a?.presets)?a.presets.filter(s):[];return b.length>0?b:(o(l,{presets:n}),n)}function w(a){return i().join(m,a)}function x(a,b){return i().join(w(a),`round-${b}-review.md`)}function y(a,b){return i().join(w(a),`round-${b}-last-message.md`)}function z(a,b){return i().join(w(a),`round-${b}-stderr.txt`)}function A(a,b){return i().join(w(a),`round-${b}-stdout.log`)}function B(a,b){let c=b.replace(/^\s*VERDICT:\s*(APPROVE|REQUEST_CHANGES|COMMENT)\s*$/im,"").trim();return`VERDICT: ${a}
4
4
  ${c?"\n"+c+"\n":"\n"}`}}};