agent-log-viewer 0.1.1 → 0.2.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.
- package/README.md +171 -51
- package/bin/cli.mjs +89 -22
- package/bin/tailscale.mjs +101 -41
- package/dist/standalone/.next/BUILD_ID +1 -1
- package/dist/standalone/.next/app-path-routes-manifest.json +6 -5
- package/dist/standalone/.next/build-manifest.json +2 -2
- package/dist/standalone/.next/prerender-manifest.json +3 -3
- package/dist/standalone/.next/routes-manifest.json +6 -0
- package/dist/standalone/.next/server/app/_global-error/page.js +2 -2
- package/dist/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/dist/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_not-found/page.js +2 -2
- package/dist/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/standalone/.next/server/app/_not-found.rsc +4 -4
- package/dist/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
- package/dist/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/dist/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/dist/standalone/.next/server/app/api/access/route.js +1 -1
- package/dist/standalone/.next/server/app/api/answer/route.js +1 -1
- package/dist/standalone/.next/server/app/api/files/route.js +1 -1
- package/dist/standalone/.next/server/app/api/flows/[id]/route.js +1 -1
- package/dist/standalone/.next/server/app/api/flows/[id]/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/flows/route.js +1 -1
- package/dist/standalone/.next/server/app/api/flows/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/inbox/route.js +1 -1
- package/dist/standalone/.next/server/app/api/limits/route.js +1 -1
- package/dist/standalone/.next/server/app/api/log/route.js +1 -1
- package/dist/standalone/.next/server/app/api/proc/route.js +1 -1
- package/dist/standalone/.next/server/app/api/push/route.js +1 -1
- package/dist/standalone/.next/server/app/api/spawn/route.js +1 -1
- package/dist/standalone/.next/server/app/api/timeline/route.js +1 -1
- package/dist/standalone/.next/server/app/api/tmux/route.js +2 -2
- package/dist/standalone/.next/server/app/api/transcribe/route.js +1 -1
- package/dist/standalone/.next/server/app/api/transcribe/token/route.js +1 -0
- package/dist/standalone/.next/server/app/api/transcribe/token/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/transcribe/token/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/favicon.ico/route.js +1 -1
- package/dist/standalone/.next/server/app/index.html +1 -1
- package/dist/standalone/.next/server/app/index.rsc +5 -5
- package/dist/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/standalone/.next/server/app/index.segments/_full.segment.rsc +5 -5
- package/dist/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/dist/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/dist/standalone/.next/server/app/page.js +3 -6
- package/dist/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/standalone/.next/server/app-paths-manifest.json +6 -5
- package/dist/standalone/.next/server/chunks/289.js +2 -0
- package/dist/standalone/.next/server/chunks/871.js +2 -3
- package/dist/standalone/.next/server/functions-config-manifest.json +2 -1
- package/dist/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/standalone/.next/server/middleware.js +3 -3
- package/dist/standalone/.next/server/pages/404.html +1 -1
- package/dist/standalone/.next/server/pages/500.html +1 -1
- package/dist/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/standalone/.next/static/chunks/159-d2dbe811eeab290f.js +1 -0
- package/dist/standalone/.next/static/chunks/app/_global-error/page-81fecd9eba007478.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/access/route-81fecd9eba007478.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/answer/route-81fecd9eba007478.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/files/route-81fecd9eba007478.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/flows/[id]/route-81fecd9eba007478.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/flows/route-81fecd9eba007478.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/inbox/route-81fecd9eba007478.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/limits/route-81fecd9eba007478.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/log/route-81fecd9eba007478.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/proc/route-81fecd9eba007478.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/push/route-81fecd9eba007478.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/spawn/route-81fecd9eba007478.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/timeline/route-81fecd9eba007478.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/tmux/route-81fecd9eba007478.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/transcribe/route-81fecd9eba007478.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/transcribe/token/route-81fecd9eba007478.js +1 -0
- package/dist/standalone/.next/static/chunks/app/page-39971eba742f6b2e.js +2 -0
- package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-81fecd9eba007478.js +1 -0
- package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-81fecd9eba007478.js +1 -0
- package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-81fecd9eba007478.js +1 -0
- package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-81fecd9eba007478.js +1 -0
- package/dist/standalone/.next/static/css/331d03725ce2ef2f.css +1 -0
- package/dist/standalone/.next/static/eVZqd0xcmD_g_vTrSrlTL/_buildManifest.js +1 -0
- package/dist/standalone/package.json +4 -2
- package/package.json +4 -2
- package/dist/standalone/.next/static/0YxRBiEgYCSV92_fZOmmC/_buildManifest.js +0 -1
- package/dist/standalone/.next/static/chunks/703-1f675e3bf3e228de.js +0 -1
- package/dist/standalone/.next/static/chunks/app/_global-error/page-b58291c8001879c8.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/access/route-b58291c8001879c8.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/answer/route-b58291c8001879c8.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/files/route-b58291c8001879c8.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/flows/[id]/route-b58291c8001879c8.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/flows/route-b58291c8001879c8.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/inbox/route-b58291c8001879c8.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/limits/route-b58291c8001879c8.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/log/route-b58291c8001879c8.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/proc/route-b58291c8001879c8.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/push/route-b58291c8001879c8.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/spawn/route-b58291c8001879c8.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/timeline/route-b58291c8001879c8.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/tmux/route-b58291c8001879c8.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/transcribe/route-b58291c8001879c8.js +0 -1
- package/dist/standalone/.next/static/chunks/app/page-169f116d08445993.js +0 -5
- package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-b58291c8001879c8.js +0 -1
- package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-b58291c8001879c8.js +0 -1
- package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-b58291c8001879c8.js +0 -1
- package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-b58291c8001879c8.js +0 -1
- package/dist/standalone/.next/static/css/e3457e19c8be328e.css +0 -1
- /package/dist/standalone/.next/static/{0YxRBiEgYCSV92_fZOmmC → eVZqd0xcmD_g_vTrSrlTL}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"484":{"*":{"id":"70664","name":"*","chunks":[],"async":false}},"1304":{"*":{"id":"60440","name":"*","chunks":[],"async":false}},"4581":{"*":{"id":"61335","name":"*","chunks":[],"async":false}},"4777":{"*":{"id":"82265","name":"*","chunks":[],"async":false}},"6869":{"*":{"id":"74661","name":"*","chunks":[],"async":false}},"7121":{"*":{"id":"35421","name":"*","chunks":[],"async":false}},"7123":{"*":{"id":"81921","name":"*","chunks":[],"async":false}},"
|
|
1
|
+
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"484":{"*":{"id":"70664","name":"*","chunks":[],"async":false}},"1304":{"*":{"id":"60440","name":"*","chunks":[],"async":false}},"4581":{"*":{"id":"61335","name":"*","chunks":[],"async":false}},"4777":{"*":{"id":"82265","name":"*","chunks":[],"async":false}},"6869":{"*":{"id":"74661","name":"*","chunks":[],"async":false}},"7121":{"*":{"id":"35421","name":"*","chunks":[],"async":false}},"7123":{"*":{"id":"81921","name":"*","chunks":[],"async":false}},"8616":{"*":{"id":"84342","name":"*","chunks":[],"async":false}},"9996":{"*":{"id":"55096","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/latand/.agents/tools/live-log-viewer-next/node_modules/next/dist/client/components/builtin/global-error.js":{"id":7123,"name":"*","chunks":[],"async":false},"/home/latand/.agents/tools/live-log-viewer-next/node_modules/next/dist/esm/client/components/builtin/global-error.js":{"id":7123,"name":"*","chunks":[],"async":false},"/home/latand/.agents/tools/live-log-viewer-next/node_modules/next/dist/client/components/client-page.js":{"id":1304,"name":"*","chunks":[],"async":false},"/home/latand/.agents/tools/live-log-viewer-next/node_modules/next/dist/esm/client/components/client-page.js":{"id":1304,"name":"*","chunks":[],"async":false},"/home/latand/.agents/tools/live-log-viewer-next/node_modules/next/dist/client/components/client-segment.js":{"id":8616,"name":"*","chunks":[],"async":false},"/home/latand/.agents/tools/live-log-viewer-next/node_modules/next/dist/esm/client/components/client-segment.js":{"id":8616,"name":"*","chunks":[],"async":false},"/home/latand/.agents/tools/live-log-viewer-next/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":4777,"name":"*","chunks":[],"async":false},"/home/latand/.agents/tools/live-log-viewer-next/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":4777,"name":"*","chunks":[],"async":false},"/home/latand/.agents/tools/live-log-viewer-next/node_modules/next/dist/client/components/layout-router.js":{"id":7121,"name":"*","chunks":[],"async":false},"/home/latand/.agents/tools/live-log-viewer-next/node_modules/next/dist/esm/client/components/layout-router.js":{"id":7121,"name":"*","chunks":[],"async":false},"/home/latand/.agents/tools/live-log-viewer-next/node_modules/next/dist/client/components/render-from-template-context.js":{"id":4581,"name":"*","chunks":[],"async":false},"/home/latand/.agents/tools/live-log-viewer-next/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":4581,"name":"*","chunks":[],"async":false},"/home/latand/.agents/tools/live-log-viewer-next/node_modules/next/dist/lib/framework/boundary-components.js":{"id":484,"name":"*","chunks":[],"async":false},"/home/latand/.agents/tools/live-log-viewer-next/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":484,"name":"*","chunks":[],"async":false},"/home/latand/.agents/tools/live-log-viewer-next/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":6869,"name":"*","chunks":[],"async":false},"/home/latand/.agents/tools/live-log-viewer-next/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":6869,"name":"*","chunks":[],"async":false},"/home/latand/.agents/tools/live-log-viewer-next/src/app/globals.css":{"id":1743,"name":"*","chunks":["177","static/chunks/app/layout-fdd4e6d70b3c92cb.js"],"async":false},"/home/latand/.agents/tools/live-log-viewer-next/src/components/Viewer.tsx":{"id":9996,"name":"*","chunks":["159","static/chunks/159-d2dbe811eeab290f.js","974","static/chunks/app/page-39971eba742f6b2e.js"],"async":false}},"entryCSSFiles":{"/home/latand/.agents/tools/live-log-viewer-next/src/":[],"/home/latand/.agents/tools/live-log-viewer-next/src/app/layout":[{"inlined":false,"path":"static/css/331d03725ce2ef2f.css"}],"/home/latand/.agents/tools/live-log-viewer-next/src/app/page":[]},"rscModuleMapping":{"484":{"*":{"id":"98562","name":"*","chunks":[],"async":false}},"1304":{"*":{"id":"15098","name":"*","chunks":[],"async":false}},"1743":{"*":{"id":"61135","name":"*","chunks":[],"async":false}},"4581":{"*":{"id":"16237","name":"*","chunks":[],"async":false}},"4777":{"*":{"id":"33859","name":"*","chunks":[],"async":false}},"6869":{"*":{"id":"36675","name":"*","chunks":[],"async":false}},"7121":{"*":{"id":"98099","name":"*","chunks":[],"async":false}},"7123":{"*":{"id":"95547","name":"*","chunks":[],"async":false}},"8616":{"*":{"id":"47644","name":"*","chunks":[],"async":false}},"9996":{"*":{"id":"27074","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}};
|
|
@@ -3,18 +3,19 @@
|
|
|
3
3
|
"/_global-error/page": "app/_global-error/page.js",
|
|
4
4
|
"/favicon.ico/route": "app/favicon.ico/route.js",
|
|
5
5
|
"/api/files/route": "app/api/files/route.js",
|
|
6
|
+
"/api/flows/[id]/route": "app/api/flows/[id]/route.js",
|
|
6
7
|
"/api/access/route": "app/api/access/route.js",
|
|
7
|
-
"/api/flows/route": "app/api/flows/route.js",
|
|
8
8
|
"/api/limits/route": "app/api/limits/route.js",
|
|
9
9
|
"/api/inbox/route": "app/api/inbox/route.js",
|
|
10
|
-
"/api/
|
|
10
|
+
"/api/flows/route": "app/api/flows/route.js",
|
|
11
11
|
"/api/push/route": "app/api/push/route.js",
|
|
12
|
-
"/api/
|
|
12
|
+
"/api/proc/route": "app/api/proc/route.js",
|
|
13
13
|
"/api/timeline/route": "app/api/timeline/route.js",
|
|
14
|
+
"/api/answer/route": "app/api/answer/route.js",
|
|
14
15
|
"/api/log/route": "app/api/log/route.js",
|
|
16
|
+
"/api/tmux/route": "app/api/tmux/route.js",
|
|
15
17
|
"/api/spawn/route": "app/api/spawn/route.js",
|
|
16
|
-
"/api/answer/route": "app/api/answer/route.js",
|
|
17
18
|
"/api/transcribe/route": "app/api/transcribe/route.js",
|
|
18
|
-
"/api/
|
|
19
|
+
"/api/transcribe/token/route": "app/api/transcribe/token/route.js",
|
|
19
20
|
"/page": "app/page.js"
|
|
20
21
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";exports.id=289,exports.ids=[289],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(24116),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)}}},35961:(a,b,c)=>{c.d(b,{W:()=>g});var d=c(23211);let e=["localhost","127.0.0.1","::1"];function f(a){if(a.startsWith("[")){let b=a.indexOf("]");return -1===b?a:a.slice(1,b)}let b=a.lastIndexOf(":");return -1===b?a:a.slice(0,b)}function g(a){let b=new Set(e),c=process.env.LLV_TS_HOST;c&&b.add(f(c));let d=a.headers.get("host");if(null===d||!b.has(f(d)))return h();let g=a.headers.get("origin");if(null!==g){let a;try{a=new URL(g).host}catch{a=null}if(null===a||!b.has(f(a)))return h()}let i=a.headers.get("sec-fetch-site");return null!==i&&"same-origin"!==i&&"none"!==i?h():null}function h(){return d.NextResponse.json({error:"заборонено: запит з іншого origin"},{status:403})}},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(92285),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=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}}}};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
exports.id=871,exports.ids=[871],exports.modules={7378:(a,b,c)=>{"use strict";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)=>{"use strict";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}},15159:(a,b,c)=>{"use strict";c.d(b,{em:()=>u,tJ:()=>v,vF:()=>m});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(52509),i=c(7378),j=c(89333);let k=/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/gi,l=(0,h.E)("codex-cwd");function m(a){return a.endsWith(".jsonl")?a.startsWith(j.GH["claude-projects"]+g().sep)?"claude":a.startsWith(j.GH["codex-sessions"]+g().sep)?"codex":null:null}function n(a){return"idle"!==a.activity&&null===a.pid&&("codex-sessions"===a.root?a.path.endsWith(".jsonl"):"claude-projects"===a.root&&!!a.path.endsWith(".jsonl")&&!g().basename(a.path).startsWith("agent-")&&!a.path.includes(g().sep+"subagents"+g().sep))}function o(a){let b=g().basename(a).match(k);return b?.at(-1)?.toLowerCase()??null}function p(a){let b=a.indexOf("--session-id"),c=b>=0?a[b+1]:void 0;return c?c.toLowerCase():null}function q(a){return a.replace(/[^A-Za-z0-9]/g,"-")}function r(a){return g().relative(j.GH["claude-projects"],a).split(g().sep)[0]??""}function s(a){let b=l.get(a);if(void 0!==b&&""!==b)return b;let c="";try{let b=e().openSync(a,"r");try{let a=Buffer.alloc(8192),d=e().readSync(b,a,0,a.length,0);c=a.toString("utf8",0,d)}finally{e().closeSync(b)}}catch{return""}let d="";try{let a=JSON.parse(c.split("\n")[0]??"{}");d="string"==typeof a.payload?.cwd?a.payload.cwd:""}catch{d=""}return l.set(a,d),d}function t(a,b){a.pid=b,a.proc="running"}function u(a){let b=a.filter(n).slice(0,12);if(0===b.length)return;let c=(0,i.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,i.pl)(b)?(t(a,b),d.add(b)):e.push(a)}if(0===e.length)return;let f=(0,i.Bj)().filter(a=>!d.has(a.pid)),g=new Map;for(let a of f){let b=p(a.argv);if(!b)continue;let c=a.engine+":"+b,d=g.get(c);d?d.push(a):g.set(c,[a])}let h=[];for(let a of e){let b=o(a.path),c="codex-sessions"===a.root?"codex":"claude",e=(b?g.get(c+":"+b)??[]:[]).filter(a=>!d.has(a.pid));1===e.length?(t(a,e[0].pid),d.add(e[0].pid)):h.push(a)}if(0===h.length)return;let j=new Map;for(let a of f){if(0===a.tty||d.has(a.pid))continue;let b="claude"===a.engine?"claude:"+q(a.cwd):"codex:"+a.cwd,c=j.get(b);c?c.push(a):j.set(b,[a])}let k=new Set;for(let a of h){let b=function(a){if("claude-projects"===a.root){let b=r(a.path);return b?"claude:"+b:null}let b=s(a.path);return b?"codex:"+b:null}(a);if(null===b||k.has(b))continue;k.add(b);let c=(j.get(b)??[]).filter(a=>!d.has(a.pid));1===c.length&&(t(a,c[0].pid),d.add(c[0].pid))}}function v(a,b){let c=m(a);if(null===c||!(0,i.pl)(b))return!1;let d=(0,i.$U)(b);if((0,i.Fe)(d)!==c||(0,i.Vt)(d))return!1;if((0,i.FQ)(b,a))return!0;let e=o(a);if(null!==e&&p(d)===e)return!0;let f=(0,i.$L)(b);if(null===f)return!1;if("claude"===c)return q(f)===r(a);let g=s(a);return""!==g&&g===f}},17341:(a,b,c)=>{"use strict";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)=>{"use strict";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]:(c=function(a,b,c){let d=null;for(let e of j(a,b).reverse()){if(c){let a=(0,g.xK)(e.payload)??{},b=(0,g.r$)(a.type);if("session_meta"===e.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){d??="done";continue}if("message"===b)return"busy";d??="busy";continue}let a=e.type;if("assistant"===a){let a=(0,g.xK)(e.message)??{},b=(0,g.r$)(a.stop_reason);if("end_turn"===b||"stop_sequence"===b)return"done";if(b)return"busy";let c=(0,g.Em)(a.content);if(c.some(a=>"tool_use"===a.type))return"busy";if(c.some(a=>"text"===a.type&&((0,g.r$)(a.text)??"").trim()))return"done";return"busy"}if("user"===a)return"busy"}return d}(b,d,a.startsWith("codex")),i.set(b,[d,c])),"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"}}},24116:(a,b,c)=>{"use strict";c.d(b,{C:()=>ak});var d=c(67981),e=c(75051),f=c(23855),g=c(54389),h=c(52509),i=c(95544);let j=(0,h.E)("ctx");function k(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 l=c(73024),m=c.n(l),n=c(76760),o=c.n(n),p=c(48161),q=c.n(p),r=c(30795);let s=(0,h.E)("meta"),t=(0,h.E)("title"),u=(0,h.E)("codex-project");function v(a,b){try{let c=m().openSync(a,"r");try{let a=Buffer.alloc(Math.min(b,131072)),d=m().readSync(c,a,0,a.length,0);return{text:a.toString("utf8",0,d),read:d}}finally{m().closeSync(c)}}catch{return null}}let w="-"+q().homedir().split(o().sep).filter(Boolean).join("-"),x=[w+"-Projects-",w+"-"],y=["<","#","Caveat:","{","[","This session is being continued"];function z(a){if(a===w)return o().basename(q().homedir());for(let b of x)if(a.startsWith(b))return a.slice(b.length)||a;return a}function A(a){let b=function(a){let b=o().sep+".claude"+o().sep+"worktrees"+o().sep,c=a.indexOf(b);if(c<0)return null;let d=a.slice(c+b.length).split(o().sep).filter(Boolean)[0];return d?{repo:a.slice(0,c),worktree:d}:null}(a);if(b)return{project:o().basename(b.repo),worktree:b.worktree};let c=o().basename(a);return c?{project:c}:null}function B(a){let b="string"==typeof a?a.trim():"";return b&&!y.some(a=>b.startsWith(a))?b:null}function C(a,b,c){let d=t.get(a);if(d&&(null!==d[1]||d[0]>=131072))return d[1];let e=v(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=B(a.summary);if(b)return b}if("ai-title"===a.type){let b=B(a.aiTitle);if(b)return b}if(b){let b=(0,i.xK)(a.payload)??{};if("user_message"===b.type){let a=B(b.message);if(a)return a}if("message"===b.type&&"user"===b.role){let a=B((0,i.Em)(b.content).map(a=>(0,i.r$)(a.text)??(0,i.r$)(a.input_text)??"").join(" ").trim());if(a)return a}}else if("user"===a.type){let b=(0,i.xK)(a.message)?.content;if("string"==typeof b){let a=B(b);if(a)return a}let c=B((0,i.Em)(b).filter(a=>"text"===a.type).map(a=>(0,i.r$)(a.text)??"").join(" ").trim());if(c)return c}}return null}(e.text.split("\n").slice(0,151),c);return t.set(a,[e.read,f]),f}var D=c(89333);function E(a,b){let c=o().relative(a,b).split(o().sep);return 4===c.length&&"tasks"===c[2]&&c[3]?.endsWith(".output")?[c[0]??"",c[1]??"",c[3].slice(0,-7)]:null}var F=c(7378);let G=(0,h.E)("effort"),H=new Set(["minimal","low","medium","high","xhigh","max"]);function I(a){let b=a?.trim().toLowerCase()??"";return H.has(b)?b:null}function J(a,b){if("codex-sessions"!==a.root||"turn_context"!==b.type)return null;let c=(0,i.xK)(b.payload),d=(0,i.r$)(c?.effort);if(d)return d;let e=(0,i.xK)((0,i.xK)(c?.collaboration_mode)?.settings);return(0,i.r$)(e?.reasoning_effort)}function K(a){if(null===a.pid)return null;let b=(0,F.$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 L=c(26474);let M=(0,h.E)("needle");function N(a,b){let c,d=M.get(a);if(d&&d.hits||(d={hits:{},scanned:d?.scanned??{}},M.set(a,d)),d.hits[b])return!0;let e=Buffer.from(a),f=Math.max(0,e.length-1);try{c=m().statSync(b).size}catch{return!1}let g=d.scanned[b]??0;if(c<=g)return!1;try{let a=m().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=m().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{m().closeSync(a)}}catch{return!1}}function O(a,b){for(let c of b)if(c&&N(a,c))return c;return null}let P=(0,h.E)("sid-slug"),Q=(0,h.E)("bgcmd"),R=(0,h.E)("chain-uuid");function S(a,b,c=[]){let d;try{d=m().readdirSync(a,{withFileTypes:!0})}catch{return c}for(let e of d){let d=o().join(a,e.name);e.isDirectory()?S(d,b,c):e.isFile()&&b(d)&&c.push(d)}return c}function T(a,b){let c=D.GH["claude-projects"],d=b??P.get(a)??null;if(!d){let b=S(c,b=>o().basename(b)===a+".jsonl")[0];if(!b)return[null,[]];d=o().basename(o().dirname(b)),P.set(a,d)}let e=o().join(c,d,a+".jsonl"),f=S(o().join(c,d,a,"subagents"),a=>o().basename(a).startsWith("agent-")&&a.endsWith(".jsonl")).sort();return[m().existsSync(e)?e:null,f]}let U=o().join(q().homedir(),".claude","viewer-state","codex-lineage.json"),V=(0,h.E)("codex-lineage"),W=!1,X=!1,Y=(0,h.E)("model");function Z(a){return a?a.trim().replace(/^claude-/,"").replace(/-20\d{6}$/,""):null}function $(a,b){if("codex-sessions"===a.root){if("turn_context"===b.type||"session_meta"===b.type)return(0,i.r$)((0,i.xK)(b.payload)?.model)}else if("assistant"===b.type){let a=(0,i.r$)((0,i.xK)(b.message)?.model);if(a&&"<synthetic>"!==a)return a}return null}let _=(0,h.E)("plan"),aa=(0,h.E)("goal");function ab(a){return"in_progress"===a||"completed"===a?a:"pending"}function ac(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 ad(a){return"active"===a||"complete"===a||"blocked"===a?a:null}var ae=c(17341),af=c(15159),ag=c(27359);let ah=new Map;async function ai(a){let b=Date.now();for(let[a,c]of ah)b-c.at>6e5&&ah.delete(a);if("running"!==a.proc||null===a.pid||a.pendingQuestion)return ah.delete(a.path),null;if(Date.now()/1e3-a.mtime<15)return null;let c=await (0,e.u1)(a.pid);if(null===c)return null;let d=await (0,e.ZB)(c);if(!(0,ag.cZ)(d))return ah.delete(a.path),null;let f=ah.get(a.path);return f&&f.screen===d?(ah.set(a.path,{...f,at:b}),b/1e3-f.since<15)?null:{since:f.since,screenTail:(0,e.d3)(d),target:c}:(ah.set(a.path,{screen:d,at:b,since:b/1e3}),null)}let aj=new Map;async function ak(){let a=function(){let a=[];for(let[b,c]of Object.entries(D.GH))m().existsSync(c)&&function a(b,c,d,e){let f;try{f=m().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,o().join(d,g.name),e);continue}if(!g.isFile()||!D.Rg.some(a=>g.name.endsWith(a)))continue;let h=o().join(d,g.name);if("claude-projects"===b&&h.includes(o().sep+"tool-results"+o().sep))continue;try{f=m().statSync(h)}catch{continue}let i="claude-tasks"===b?E(D.GH["claude-tasks"],h):null;if(("claude-tasks"!==b||i)&&(0!==f.size||i)){if(i){let[a,b,c]=i,d=o().join(D.GH["claude-projects"],a,b,"subagents","agent-"+c+".jsonl");if(m().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,D.aA).map(a=>{let b=function(a,b,c,d){let e,f=s.get(c);if(f?.[0]===d.size)return f[1];let g=o().relative(b,c),h=o().basename(c),j="інше",k=null,l="claude",m="",n="plain";if("codex-jobs"===a){let a=g.split(o().sep)[0]??"",b=a.split("-"),d=b.at(-1)??"";j=b.length>=2&&d.length>=12?b.slice(0,-1).join("-"):a,l="codex",m="джоба";let e=(0,i.Vh)(c.replace(/\.log$/,".json"));if(e){let a=[(0,i.r$)(e.kindLabel)??"",(0,i.r$)(e.title)??""].filter(Boolean).join(" \xb7 "),b=((0,i.r$)(e.summary)??"").split(/\s+/).join(" ").trim();k=a+(b?" — "+b:"")||h}else k=h}else if("codex-sessions"===a){let a=u.get(c);if(a)j=a.project,e=a.worktree;else{j="";let a=v(c,d.size);if(a)try{let b=JSON.parse(a.text.split("\n")[0]??"{}"),c=(0,i.r$)((0,i.xK)(b.payload)?.cwd)??"",d=A(c);j=d?.project??"",e=d?.worktree}catch{j=""}j&&u.set(c,{project:j,worktree:e})}j||(j="codex"),l="codex",m="сесія",n="codex",k=C(c,d.size,!0)??"Сесія Codex"}else if("claude-projects"===a){let a=g.split(o().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);if(j=b?.project??z(a),e=b?.worktree,b){let a=v(c,d.size),b=a?function(a){for(let b of a)try{let a=JSON.parse(b),c=(0,i.r$)((0,i.xK)(a)?.cwd);if(c)return c}catch{continue}return null}(a.text.split("\n").slice(0,25)):null,f=b?A(b):null;j=f?.project??j,e=f?.worktree??e}if(n="claude",h.startsWith("agent-")){m="субагент";let a=(0,i.Vh)(c.slice(0,-6)+".meta.json")??{};k=(0,i.r$)(a.description)??(0,i.r$)(a.name)??"Субагент "+h.slice(6).split(".")[0]}else m="сесія",k=C(c,d.size,!1)??"Сесія Claude"}else"claude-tasks"===a&&(j=z(g.split(o().sep)[0]??""),l="shell",m="фон",k="Фонова задача "+h.split(".")[0]);let p={project:j,worktree:e,title:(0,r.cr)(k??h,120),engine:l,kind:m,fmt:n};return s.set(c,[d.size,p]),p}(a.rootName,a.root,a.path,a.st);return{path:a.path,root:a.rootName,name:o().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,F.$w)():aj,c=new Map;for(let b of a){let a="codex-jobs"===b.root?(0,i.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(o().sep+"subagents"+o().sep)){let b=(0,i.Vh)(a.path.slice(0,-6)+".meta.json")??{},c=(0,i.r$)(b.model);if(c)return Z(c)}if("claude-projects"!==a.root&&"codex-sessions"!==a.root||!a.path.endsWith(".jsonl"))return null;let b=Y.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=$(a,b))break;if(!c)try{for(let b of m().readFileSync(a.path,"utf8").split("\n").slice(0,41))try{let d=JSON.parse(b);if(d&&"object"==typeof d&&!Array.isArray(d)&&(c=$(a,d)))break}catch{}}catch{}let d=Z(c);return Y.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,i.Vg)(c.pid);return(a.pid=b,"running"===c.status)?null!==b&&(0,F.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,af.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 I(K(a));let b=G.get(a.path);if(b?.[0]===a.size)return b[1]??I(K(a));let c=null;for(let b of(0,f.He)(a.path,a.size).reverse())if(c=I(J(a,b)))break;if(!c)try{for(let b of m().readFileSync(a.path,"utf8").split("\n").slice(0,41))try{let d=JSON.parse(b);if(d&&"object"==typeof d&&!Array.isArray(d)&&(c=I(J(a,d))))break}catch{}}catch{}return G.set(a.path,[a.size,c]),c??I(K(a))}(b);for(let b of(await Promise.all(a.map(async a=>{let b=(0,ae.x)(a);a.pendingQuestion=b&&null!==a.pid?{...b,paneTarget:await (0,e.u1)(a.pid)}:b,a.waitingInput=await ai(a),a.plan=function(a){if("claude-projects"!==a.root&&"codex-sessions"!==a.root||!a.path.endsWith(".jsonl"))return null;let b=_.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,i.xK)(a.payload);if(!c||"function_call"!==c.type||"update_plan"!==(0,i.r$)(c.name))return null;let d=(0,i.r$)(c.arguments);if(!d)return null;try{b=JSON.parse(d)}catch{return null}return ac((0,i.Em)((0,i.xK)(b)?.plan).map(a=>{let b=(0,i.r$)(a.step)?.trim();return b?{text:b,status:ab(a.status)}:null}).filter(a=>null!==a),(0,i.r$)(a.timestamp))}(b):function(a){if("assistant"!==a.type)return null;for(let b of(0,i.Em)((0,i.xK)(a.message)?.content))if("tool_use"===b.type&&"TodoWrite"===(0,i.r$)(b.name))return ac((0,i.Em)((0,i.xK)(b.input)?.todos).map(a=>{let b=ab(a.status),c=("in_progress"===b?(0,i.r$)(a.activeForm)?.trim():null)||(0,i.r$)(a.content)?.trim()||null;return c?{text:c,status:b}:null}).filter(a=>null!==a),(0,i.r$)(a.timestamp));return null}(b))break;return _.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=aa.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,i.xK)(a.payload);if(!b)return null;if("thread_goal_updated"===b.type){let a=(0,i.xK)(b.goal);return a?{objective:(0,i.r$)(a.objective),status:ad(a.status)??void 0,tokensUsed:(0,i.Vg)(a.tokensUsed),timeUsedSeconds:(0,i.Vg)(a.timeUsedSeconds)}:null}if("function_call"===b.type&&"update_goal"===(0,i.r$)(b.name)){let a=(0,i.r$)(b.arguments);if(!a)return null;try{let b=(0,i.xK)(JSON.parse(a));if(!b)return null;return{objective:(0,i.r$)(b.objective),status:ad(b.status)??((0,i.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 aa.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=j.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,i.xK)(a.payload);if(!b||"token_count"!==(0,i.r$)(b.type))return null;let c=(0,i.xK)(b.info);if(!c)return null;let d=(0,i.xK)(c.last_token_usage)??(0,i.xK)(c.total_token_usage);return d?k((0,i.Vg)(d.total_tokens),(0,i.Vg)(c.model_context_window)):null}(b):function(a){if("assistant"!==a.type)return null;let b=(0,i.xK)(a.message),c=(0,i.r$)(b?.model);if(!b||"<synthetic>"===c)return null;let d=(0,i.xK)(b.usage);if(!d)return null;let e=((0,i.Vg)(d.input_tokens)??0)+((0,i.Vg)(d.cache_read_input_tokens)??0)+((0,i.Vg)(d.cache_creation_input_tokens)??0),f=c?.includes("[1m]")||c?.includes("fable")?1e6:2e5;return e>f&&(f=1e6),k(e,f)}(b))break;return j.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(m().existsSync(D.GH["codex-jobs"]))for(let a of S(D.GH["codex-jobs"],a=>o().basename(a).startsWith("task-")&&a.endsWith(".json"))){let b=(0,i.Vh)(a),d=(0,i.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(o().sep);if(a.length>=3&&"subagents"===a.at(-2)){let c=a[0]??"",[d,e]=T(a.at(-3)??"",c);b.parent=d;let f=(0,i.Vh)(b.path.slice(0,-6)+".meta.json")??{},g=(0,i.r$)(f.toolUseId),h=Number(f.spawnDepth??0);if(g&&h>=1){let a=O(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,i.Vh)(d.replace(/\.log$/,".json"))??{}),c=(0,i.r$)(a.sessionId);if(c){let d=(0,i.r$)(a.workspaceRoot)??"",e=d?d.replace(/[^A-Za-z0-9-]/g,"-"):null,[f,g]=T(c,e);!f&&e&&([f,g]=T(c,null));let h=O(o().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=E(D.GH["claude-tasks"],b.path);if(!a)continue;let[c,d,e]=a,[f,g]=T(d,c),h=function(a,b,c){if(Q.has(a))return Q.get(a)??null;let d="background with ID: "+a,e=null;for(let f of[...b,...c]){if(!f||!N(d,f))continue;let b=function(a,b){let c=null;try{for(let d of m().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 m().readFileSync(b,"utf8").split("\n"))if(a.includes(c)&&a.includes('"tool_use"'))try{let b=JSON.parse(a);for(let a of(0,i.Em)((0,i.xK)(b.message)?.content))if("tool_use"===a.type&&a.id===c){let b=(0,i.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 Q.set(a,c),c}e??={command:"",description:"",source:f}}return e&&Q.set(a,e),e}(e,(f?[f]:[]).concat(g),function(a,b){let c,d=o().join(D.GH["claude-projects"],a);try{c=m().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=o().join(d,a.name);try{let a=m().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(W)return;W=!0;let a=(0,i.Vh)(U);if(a&&"object"==typeof a&&!Array.isArray(a)){for(let[b,c]of Object.entries(a))"string"==typeof c&&!V.has(b)&&m().existsSync(b)&&V.set(b,c);V.size!==Object.keys(a).length&&(X=!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,F.Ib)(d)){let a=c.get(d)??(0,F.FW)(d,"CODEX_COMPANION_TRANSCRIPT_PATH");if(a){b=a;break}}if(b){a.parent=b;var d=a.path,e=b;if(V.get(d)!==e){for(V.set(d,e);V.size>2e3;){let a=V.keys().next().value;if(void 0===a)break;V.delete(a)}X=!0}}else{let b=V.get(a.path);b&&(a.parent=b)}}if(X){X=!1;try{m().mkdirSync(o().dirname(U),{recursive:!0}),m().writeFileSync(U,JSON.stringify(Object.fromEntries(V)))}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(o().sep+"subagents"+o().sep))continue;let a=(0,L._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,L.N0)(d))));d=(0,F.Ib)(d));a&&a!==b.path&&(0,L.A6)(b.path,a)}a&&a!==b.path&&e.has(a)&&(b.parent=a,b.handoff=!0)}(0,L.OA)(),function(a){let b=new Map;for(let c of a){if("claude-projects"!==c.root)continue;let a=c.name.split(o().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=R.get(a);if(c&&(null!==c[1]||c[0]>=524288||c[0]>=b))return c[1];let d=null,e=0;try{let c=m().openSync(a,"r");try{let a=Buffer.alloc(Math.min(b,524288));for(let b of(e=m().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{m().closeSync(c)}}catch{return null}return R.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=>N(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),a}},26474:(a,b,c)=>{"use strict";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)=>{"use strict";c.d(b,{EB:()=>e,_1:()=>o,cZ:()=>q,dC:()=>m,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=/rate.?limit|usage limit (reached|hit)|out of (quota|credits)|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){if(e.test(m(a)))return null;let b=a.split("\n").slice(-14).join("\n");return i.test(b)?"approval_prompt":j.test(b)?"rate_limit":null}let p=/❯?\s*\d\.\s+\S/;function q(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(m(a))}},30795:(a,b,c)=>{"use strict";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}c.d(b,{cr:()=>d})},52509:(a,b,c)=>{"use strict";c.d(b,{E:()=>e});let d=globalThis;function e(a){return d.__llvCaches??={},d.__llvCaches[a]??=new Map,d.__llvCaches[a]}},54389:(a,b,c)=>{"use strict";c.d(b,{_p:()=>ab,w1:()=>_,n1:()=>ad,zn:()=>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);let k=/^\s*(?:VERDICT:\s*)?(REQUEST_CHANGES|APPROVE|COMMENT)\b/m,l=/^\s*(\d+)[.)]\s+(.*)$/,m=/(?:\[(P[0-3])\]|\b(Critical|High|Medium|Low|Info|P[0-3])\b)/i,n=/((?:\.{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,o=/\[([^\]]+)\]\(([^)\s]+)\)/,p=/([\w.-]*(?:api[_-]?key|access[_-]?token|refresh[_-]?token|authorization|bearer|secret|password|passwd|pwd|token))\b(\s*[:=]\s*)(["']?)[^\s"',}]+/gi;function q(a){let b=a.replace(p,(a,b,c,d)=>`${b}${c}${d}[redacted]`);return{raw:b.slice(0,24e3),truncated:b.length>24e3}}var r=c(23855),s=c(95544),t=c(75051),u=c(48161),v=c.n(u),w=c(98590);let x=new Map;function y(a,b){return`${a}:${b}`}let z=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,A=new Set(["session_id","sessionId","thread_id","threadId","rollout_id"]);function B(a){let b=a.stdout.lastIndexOf("\n");if(b<a.scanned)return;let c=a.stdout.slice(a.scanned,b);for(let d of(a.scanned=b+1,c.split("\n"))){let b=d.trim();if(b.startsWith("{"))try{let c=JSON.parse(b);a.sessionId||(a.sessionId=function a(b,c=0){if(!b||"object"!=typeof b||c>4)return null;for(let[d,e]of Object.entries(b)){if(A.has(d)&&"string"==typeof e&&z.test(e))return e;let b=a(e,c+1);if(b)return b}return null}(c));let d=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}(c);d&&(a.lastAgentMessage=d)}catch{}}}function C(a){let b=v().homedir();for(let c of[j().join(b,".bun","bin",a),j().join(b,".npm-global","bin",a),j().join(b,".local","bin",a),j().join(b,"go","bin",a),"/usr/local/bin/"+a,"/usr/bin/"+a])try{return h().accessSync(c,h().constants.X_OK),c}catch{}return a}function D(a,b){let c=x.get(y(a,b));return c?c.result??{status:"running",stdout:c.stdout,stderr:c.stderr,finalOutput:"",sessionId:c.sessionId,code:null,signal:null}:null}function E(a,b){x.delete(y(a,b))}let F=new Set(["approved","done_comment","needs_decision","closed"]),G=/^REVIEW_READY:\s*(.*)$/m,H=/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i,I=globalThis,J=new Set;function K(){return new Date().toISOString()}function L(a){if(!a)return 0;let b=Date.parse(a);return Number.isFinite(b)?b:0}function M(a){return a.map(a=>({...a,roles:{implementer:{...a.roles.implementer},reviewer:{...a.roles.reviewer}},rounds:a.rounds.map(a=>({...a}))}))}function N(a){return a.rounds.at(-1)??null}function O(a){for(let b of(0,r.He)(a.path,a.size).reverse()){let c=Date.parse(String(b.timestamp??""))||1e3*a.mtime;if("codex-sessions"===a.root){let a=(0,s.xK)(b.payload)??{},d=(0,s.r$)(a.type);if("agent_message"===d)return{text:(0,s.r$)(a.message)??"",ts:c};if("message"===d&&"assistant"===a.role){let b=(0,s.Em)(a.content).map(a=>(0,s.r$)(a.text)??(0,s.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,s.Em)((0,s.xK)(b.message)?.content).filter(a=>"text"===a.type).map(a=>(0,s.r$)(a.text)??"").join("\n").trim();if(a)return{text:a,ts:c}}}return null}function P(a){let b=a.match(k)?.[1];if(!b)return null;let c=function(a){let b=a.match(k)?.[1];if(!b)return null;let c=[],d=[],e=null,f=()=>{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(m)?.[1]??f.match(m)?.[2]??"Info"),b=function(a){let b=a.match(o);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(n);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(m);if(c&&void 0!==c.index){let a=b.slice(c.index+c[0].length).replace(/^[\s.:–—-]+/,"");a&&(b=a)}return b.replace(o,"$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:q(f).raw})),e=null};for(let b of a.split("\n")){let a=b.trimEnd(),g=a.match(l);if(g){f(),e=g[2]??"";continue}let h=a.trim();if(null!==e){h?e=`${e}
|
|
2
|
-
${h}`:f();continue}!(!h||k.test(a)||/^(findings?|summary|open questions?|tests?|residual risk)\s*:?\s*$/i.test(h))&&0===c.length&&d.length<3&&h.length<=240&&d.push(h)}f();let g=c.filter(a=>m.test(a.body)).length;return b||/^findings?\s*:?$/im.test(a)||g>=2||g>=1&&/\b(review|request_changes|approve|comment)\b/i.test(a)?{kind:"review",ts:null,verdict:b,findings:c,summary:d,raw:q(a).raw}:null}(a);return{verdict:b,findingsCount:c?.findings.length??0,content:(0,w.Sn)(b,a)}}function Q(a,b){if(!a.reviewerPath)return null;let c=b.get(a.reviewerPath);if(!c)return null;let d=O(c);return d?P(d.text):null}function R(a,b,c){return{n:a.rounds.length+1,reviewerPath:null,sessionId:null,findingsPath:null,triggeredBy:b,readyNote:c,verdict:null,findingsCount:null,startedAt:K(),spawnStartedAt:null,relayStartedAt:null,reviewedAt:null,relayedAt:null,error:null}}function S(a,b){a.state="needs_decision",a.stateDetail=b}async function T(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,t.u1)(d.pid);if(a)return void await (0,t.oF)(a,c)}let e=(0,t.A9)(d.root,d.path);if(!e)throw Error("implementer session cannot be resumed");await (0,t.KY)(d.path,e,c)}function U(a,b,c){if(c.reviewerPath)return!1;let d=L(c.startedAt)/1e3-5,e=a.roles.reviewer.engine,f=b.filter(b=>b.engine===e&&b.path!==a.implementerPath&&b.mtime>=d&&ac(b)===a.cwd).sort((a,b)=>b.mtime-a.mtime)[0];return!!f&&(c.reviewerPath=f.path,!0)}function V(a,b,c){let d=b.findingsPath??(0,w.tR)(a.id,b.n);(0,w.Yj)(d,c.content),b.findingsPath=d,b.verdict=c.verdict,b.findingsCount=c.findingsCount,b.reviewedAt=K(),"manual"===a.mode?a.state="relay_pending":a.state="relaying",a.stateDetail=null}async function W(a,b){let c=["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?`Implementer ready note: ${b.readyNote}`:"Implementer 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");if(a.state="reviewing",a.stateDetail=null,"pane"===a.reviewerMode){let d=(0,t.lV)(a.roles.reviewer.engine,a.cwd,{model:a.roles.reviewer.model,effort:a.roles.reviewer.effort,readOnly:!0}),e=await (0,t.Tk)(d,c);d.transcript&&(b.reviewerPath=d.transcript),!b.reviewerPath&&e.panePid&&(b.error=null);return}let e=function(a,b,c,e,g,i=18e5){let k=y(a,b);if(x.has(k))return{sessionId:null,reviewerPath:null};let l=(0,w.WJ)(a,b);h().mkdirSync(j().dirname(l),{recursive:!0});let m=function(a,b,c,d){if("claude"===a.engine){let c=f().randomUUID(),e=["-p",b,"--dangerously-skip-permissions","--session-id",c,"--disallowedTools","Edit,Write,NotebookEdit"];return a.model&&e.push("--model",a.model),{command:C("claude"),args:e,outputPath:null,sessionId:c,reviewerPath:j().join(v().homedir(),".claude","projects",d.replace(/[^A-Za-z0-9]/g,"-"),c+".jsonl")}}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:C("codex"),args:e,outputPath:c,sessionId:null,reviewerPath:null}}(c,g,l,e),n=(0,d.spawn)(m.command,m.args,{cwd:e,env:process.env,stdio:["ignore","pipe","pipe"]}),o={child:n,startedAt:Date.now(),stdout:"",stderr:"",outputPath:m.outputPath,sessionId:m.sessionId,lastAgentMessage:"",scanned:0,result:null,timer:setTimeout(()=>{o.result||(n.kill("SIGTERM"),setTimeout(()=>{o.result||n.kill("SIGKILL")},3e3).unref())},i)};return o.timer.unref(),x.set(k,o),n.stdout?.on("data",a=>{o.stdout+=a.toString("utf8"),B(o)}),n.stderr?.on("data",a=>{o.stderr+=a.toString("utf8")}),n.on("error",a=>{clearTimeout(o.timer),o.result={status:"failed",stdout:o.stdout,stderr:`${o.stderr}
|
|
3
|
-
${a instanceof Error?a.message:String(a)}`.trim(),finalOutput:o.lastAgentMessage,sessionId:o.sessionId,code:null,signal:null}}),n.on("close",(c,d)=>{if(o.result)return;clearTimeout(o.timer),B(o);let e=Date.now()-o.startedAt>=i&&null===c,f=function(a){if(!a)return"";try{return h().readFileSync(a,"utf8")}catch{return""}}(o.outputPath)||o.lastAgentMessage;o.stderr.trim()&&(0,w.Yj)((0,w.NO)(a,b),o.stderr),o.result={status:e?"timeout":0===c?"done":"failed",stdout:o.stdout,stderr:o.stderr,finalOutput:f,sessionId:o.sessionId,code:c,signal:d}}),{sessionId:m.sessionId,reviewerPath:m.reviewerPath}}(a.id,b.n,a.roles.reviewer,a.cwd,c);e.sessionId&&(b.sessionId=e.sessionId),e.reviewerPath&&(b.reviewerPath=e.reviewerPath)}async function X(a,b,c){if(!c.findingsPath)throw Error("round has no findings artifact");let d=h().readFileSync(c.findingsPath,"utf8");a.state="relaying",await T(a,b,["Review round findings are below. Address every finding before the next review marker.\n",d.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.relayedAt=K(),"APPROVE"===c.verdict?(a.state="approved",a.closedAt=K()):"COMMENT"===c.verdict?a.state="done_comment":a.rounds.length>=a.roundLimit?S(a,"round limit reached"):(a.state="fixing",a.stateDetail=null)}async function Y(a,b,c,d){var e;let f=JSON.stringify(a);if("closed"===a.state||"paused"===a.state)return!1;let g=c.get(a.implementerPath);if(!g){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=O(b);if(!c)return null;let d=Math.max(...a.rounds.map(a=>L(a.startedAt)),L(a.createdAt));return c.ts<=d?null:c.text.match(G)?.[1]?.trim()??null}(a,g);return null!==b&&(a.rounds.push(R(a,"marker",b)),a.state="manual"===a.mode?"spawn_pending":"spawning",a.stateDetail=null),JSON.stringify(a)!==f}let i=N(a);if(!i)return JSON.stringify(a)!==f;if("spawning"===a.state){let b=D(a.id,i.n);if(i.spawnStartedAt&&!b&&null===i.reviewerPath)return S(a,"reviewer spawn was interrupted by a restart"),JSON.stringify(a)!==f;try{i.spawnStartedAt=K(),d(),await W(a,i)}catch(b){i.error=b instanceof Error?b.message:String(b),S(a,i.error)}return JSON.stringify(a)!==f}if("reviewing"===a.state){let d=function(a){if(!a.findingsPath)return null;try{return P(h().readFileSync(a.findingsPath,"utf8"))}catch{return null}}(i);if(d)return V(a,i,d),JSON.stringify(a)!==f;if("headless"===a.reviewerMode){let d,g=D(a.id,i.n);if(i.sessionId||(i.sessionId=g?.sessionId??(e=g?.stdout??"",(d=e.match(/session id:?\s*([0-9a-f-]{36})/i)?.[1])&&H.test(d)?d:e.split("\n").slice(0,40).join("\n").match(H)?.[0]??null)),!function(a,b,c){if(b.reviewerPath||!c)return;let d=a.find(a=>j().basename(a.path).includes(c));d&&(b.reviewerPath=d.path)}(b,i,i.sessionId??null),i.reviewerPath||i.sessionId||U(a,b,i),g?.status==="running")return JSON.stringify(a)!==f;if(g){E(a.id,i.n);let b=P(g.finalOutput);if(b)V(a,i,b);else{let b=i.findingsPath??(0,w.tR)(a.id,i.n);(0,w.Yj)(b,g.finalOutput||g.stdout||g.stderr),i.findingsPath=b,i.error="timeout"===g.status?"reviewer timed out":g.stderr.trim()||"reviewer verdict was unparseable",S(a,i.error)}return JSON.stringify(a)!==f}let h=Q(i,c);return h?V(a,i,h):S(a,"reviewer process is missing after server restart"),JSON.stringify(a)!==f}if(U(a,b,i),i.reviewerPath){let b=c.get(i.reviewerPath),d=Q(i,c);d?V(a,i,d):b&&"live"!==b.activity&&"stalled"!==b.activity&&S(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&&!J.has(b))return S(a,"relay was interrupted — можливо, доставлено двічі"),JSON.stringify(a)!==f;try{i.relayStartedAt=K(),J.add(b),d(),await X(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 Z(a){if(I.__llvFlowTick){let b=M((0,w.mL)());return $(a,b),{flows:b,changed:!1}}I.__llvFlowTick=!0;let b=M((0,w.mL)());try{let c=new Map(a.map(a=>[a.path,a])),d=!1;for(let e of b)!F.has(e.state)&&(await Y(e,a,c,()=>(0,w.tu)(b))&&(d=!0),d&&(0,w.tu)(b));return $(a,b),d&&(0,w.tu)(b),{flows:b,changed:d}}finally{I.__llvFlowTick=!1}}function $(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 _(){return{flows:(0,w.mL)(),presets:(0,w.Vd)()}}function aa(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 ab(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 e=function(a){let b=(0,w.Vd)();if(a.preset){let c=b.find(b=>b.name===a.preset);return c?{implementer:{...c.implementer},reviewer:{...c.reviewer}}:null}let c=aa(a.roles?.implementer),d=aa(a.roles?.reviewer);return c&&d?{implementer:c,reviewer:d}:null}(a);if(!e)return{error:"invalid flow roles or preset",status:400};let g="merge-base"===a.baseMode?"merge-base":"head",h=ac(c);if(!h)return{error:"не вдалося визначити робочу директорію сесії",status:409};let i=function(a,b){let c="head"===b?["rev-parse","HEAD"]:["merge-base","HEAD",function(a){let b=(0,d.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,d.spawnSync)("git",["rev-parse","--verify",b],{cwd:a,encoding:"utf8"}).status)return b;return null}(a)??"origin/main"],e=(0,d.spawnSync)("git",c,{cwd:a,encoding:"utf8"});if(0!==e.status)return{ok:!1,error:(e.stderr||e.stdout||"failed to resolve git base ref").trim()};let f=e.stdout.trim();return f?{ok:!0,sha:f}:{ok:!1,error:"git returned an empty base ref"}}(h,g);if(!i.ok)return{error:i.error,status:409};let j=(0,w.mL)();if(j.find(a=>a.implementerPath===c.path&&null===a.closedAt&&"closed"!==a.state))return{error:"implementer already has an active flow",status:409};let k={id:f().randomUUID().slice(0,8),template:"implement-review-loop",project:c.project,cwd:h,implementerPath:c.path,roles:e,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:K(),closedAt:null};j.push(k),(0,w.tu)(j);try{await T(k,new Map(b.map(a=>[a.path,a])),"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.")}catch(a){k.state="paused",k.pausedState="waiting_ready",k.stateDetail=a instanceof Error?a.message:String(a),(0,w.tu)(j)}return{flow:k}}function ac(a){for(let b of function(a){let b="";try{let c=h().openSync(a,"r");try{let a=Buffer.alloc(65536),d=h().readSync(c,a,0,a.length,0);b=a.toString("utf8",0,d)}finally{h().closeSync(c)}}catch{return[]}let c=[];for(let a of b.split("\n"))if(a.trim())try{let b=JSON.parse(a);b&&"object"==typeof b&&!Array.isArray(b)&&c.push(b)}catch{}return c}(a.path)){let a="string"==typeof b.cwd?b.cwd:null,c=(0,s.xK)(b.payload),d=c?(0,s.r$)(c.cwd):null,e=a??d;if(e)return e}return null}function ad(a,b){let c=(0,w.mL)(),d=c.find(b=>b.id===a);if(!d)return{error:"flow not found",status:404};let e=N(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(R(d,"button",null)),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};E(d.id,e.n),Object.assign(e,{reviewerPath:null,sessionId:null,findingsPath:null,verdict:null,findingsCount:null,startedAt:K(),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+=a,"needs_decision"===d.state&&(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}else"close"===b.action&&(d.state="closed",d.closedAt=K(),d.stateDetail=null);return e&&"spawning"===d.state&&(e.error=null),(0,w.tu)(c),{flow:d}}},67981:(a,b,c)=>{"use strict";c.d(b,{HR:()=>x,M$:()=>A,Xn:()=>v});var d=c(77598),e=c.n(d),f=c(73024),g=c.n(f),h=c(48161),i=c.n(h),j=c(76760),k=c.n(j);let l=k().join(i().homedir(),".claude","viewer-state"),m=k().join(l,"push-keys.json"),n=k().join(l,"push-subscriptions.json"),o=k().join(l,"push-sent.json"),p=Promise.resolve();function q(a){return Buffer.from(a).toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function r(a){let b=a+"=".repeat((4-a.length%4)%4);return Buffer.from(b.replace(/-/g,"+").replace(/_/g,"/"),"base64")}function s(a,b){try{return JSON.parse(g().readFileSync(a,"utf8"))}catch{return b}}function t(a,b){try{return g().mkdirSync(k().dirname(a),{recursive:!0}),g().writeFileSync(a,JSON.stringify(b,null,2)),!0}catch{return!1}}function u(a,b,c){let d=[],f=Buffer.alloc(0),g=1;for(;Buffer.concat(d).length<c;)f=e().createHmac("sha256",a).update(f).update(b).update(Buffer.from([g])).digest(),d.push(f),g+=1;return Buffer.concat(d).subarray(0,c)}function v(){let a=s(m,null);if(a?.publicKey&&a.privateKey)return a;let b=e().generateKeyPairSync("ec",{namedCurve:"prime256v1"}),c={publicKey:q(b.publicKey.export({type:"spki",format:"der"}).subarray(-65)),privateKey:b.privateKey.export({type:"pkcs8",format:"pem"}).toString()};return t(m,c),c}async function w(a){if(!a.endpoint)return;let b=s(n,[]).filter(b=>b.endpoint!==a.endpoint);b.push(a),t(n,b)}async function x(a){p=p.then(()=>w(a),()=>w(a)),await p.catch(()=>void 0)}async function y(a,b){try{var c;let d,f,g,h,i,j=function(a,b){let c=a.keys?.p256dh,d=a.keys?.auth;if(!c||!d)return null;let f=r(c),g=r(d),h=e().randomBytes(16),i=e().createECDH("prime256v1"),j=i.generateKeys(),k=i.computeSecret(f),l=e().createHmac("sha256",g).update(k).digest(),m=u(l,Buffer.concat([Buffer.from("WebPush: info\0"),f,j]),32),n=e().createHmac("sha256",h).update(m).digest(),o=u(n,"Content-Encoding: aes128gcm\0",16),p=u(n,"Content-Encoding: nonce\0",12),q=Buffer.concat([Buffer.from(JSON.stringify(b),"utf8"),Buffer.from([2])]),s=e().createCipheriv("aes-128-gcm",o,p),t=Buffer.concat([s.update(q),s.final(),s.getAuthTag()]),v=Buffer.alloc(21);return h.copy(v,0),v.writeUInt32BE(4096,16),v.writeUInt8(j.length,20),Buffer.concat([v,j,t])}(a,b);if(!j)return"failed";let k=new Uint8Array(j.byteLength);k.set(j);let l=(c=new URL(a.endpoint).origin,d=v(),f=q(JSON.stringify({typ:"JWT",alg:"ES256"})),g=q(JSON.stringify({aud:c,exp:Math.floor(Date.now()/1e3)+43200,sub:"mailto:agent-log-viewer@localhost"})),(h=e().createSign("SHA256")).update(`${f}.${g}`),h.end(),i=h.sign({key:d.privateKey,dsaEncoding:"ieee-p1363"}),`${f}.${g}.${q(i)}`),m=new AbortController,n=setTimeout(()=>m.abort(),3e3),o=await fetch(a.endpoint,{method:"POST",signal:m.signal,headers:{authorization:`vapid t=${l}, k=${v().publicKey}`,"content-encoding":"aes128gcm","content-type":"application/octet-stream",ttl:"60",urgency:"normal"},body:k.buffer}).catch(()=>null);if(clearTimeout(n),!o)return"failed";if(o.status>=200&&o.status<300)return"sent";if(404===o.status||410===o.status)return"dead";return"failed"}catch{return"failed"}}async function z(a){let b;if(a.waitingInput&&Date.now()/1e3-a.waitingInput.since<60)return;let c=a.pendingQuestion?.toolUseId??(a.waitingInput?`${a.path}:waiting:${Math.floor(a.waitingInput.since)}`:null);if(!c)return;let d=new Set(s(o,[]));if(d.has(c))return;let e=s(n,[]);if(!e.length)return;let f=[],g=!1,h=!1,i=(b=a.pendingQuestion?.kind==="plan"?"план на затвердження":a.pendingQuestion?.questions?.[0]?.header||(a.waitingInput?"чекає на відповідь":"питання"),{title:`${a.title||"Агент"} \xb7 ${a.engine}`,body:b,url:`/#f=${encodeURIComponent(a.path)}#question`});for(let a of e){let b=await y(a,i);"sent"===b?(g=!0,f.push(a)):"failed"===b?f.push(a):h=!0}g&&(d.add(c),t(o,[...d].slice(-500))),h&&t(n,f)}async function A(a){p=p.then(()=>z(a),()=>z(a)),await p.catch(()=>void 0)}},75051:(a,b,c)=>{"use strict";c.d(b,{Am:()=>_,Fu:()=>t,IJ:()=>$,HZ:()=>R,lV:()=>L,VT:()=>F,aI:()=>y,mB:()=>Q,ZB:()=>W,u1:()=>x,A9:()=>J,d3:()=>X,EW:()=>E,V1:()=>Y,oF:()=>C,KY:()=>T,Tk:()=>Z});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(24116),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 V(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 W(a),c=(0,s.ye)(b);if(null!==c){n("gate",{target:a,result:"ok",reason:c}),await v(["send-keys","-t",a,"Enter"]),await U(700);continue}let d=(0,s._1)(b);if(null!==d)throw n("gate",{target:a,result:"error",reason:d}),Error("rate_limit"===d?"агент уперся в rate limit — повідомлення не надіслано":"агент чекає на підтвердження в пейні — дай відповідь перед новим повідомленням");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 U(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 U(400);let b=(0,s.dC)(await W(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"}function H(a){let b=j().homedir();for(let c of[l().join(b,".bun","bin",a),l().join(b,".npm-global","bin",a),l().join(b,".local","bin",a),l().join(b,"go","bin",a),"/usr/local/bin/"+a,"/usr/bin/"+a])try{return h().accessSync(c,h().constants.X_OK),c}catch{}return a}function I(a){try{for(let b of h().readFileSync(a,"utf8").split("\n").slice(0,30))try{let a=JSON.parse(b),c="string"==typeof a.cwd?a.cwd:null,d=a.payload&&"object"==typeof a.payload?a.payload:null,e=d&&"string"==typeof d.cwd?d.cwd:null,f=c??e;if(f&&h().existsSync(f))return f}catch{}}catch{}return j().homedir()}function J(a,b){let c=l().basename(b);if("claude-projects"===a&&c.endsWith(".jsonl")&&!b.includes(l().sep+"subagents"+l().sep)){let a=c.slice(0,-6);return/^[0-9a-f-]{36}$/.test(a)?{command:`${H("claude")} --dangerously-skip-permissions --resume ${a}`,cwd:I(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:`${H("codex")} resume ${a}`,cwd:I(b),windowName:"codex-resume"}:null}return null}function K(a){return"'"+a.replace(/'/g,"'\\''")+"'"}function L(a,b,c={}){if("claude"===a){let a=f().randomUUID(),d=[H("claude"),"--dangerously-skip-permissions","--session-id",a];return c.model&&d.push("--model",c.model),c.readOnly&&d.push("--disallowedTools","Edit,Write,NotebookEdit"),{command:d.map(K).join(" "),cwd:b,windowName:"claude-new",transcript:l().join(j().homedir(),".claude","projects",b.replace(/[^A-Za-z0-9]/g,"-"),a+".jsonl")}}let d=[H("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(K).join(" "),cwd:b,windowName:"codex-new"}}let M=l().join(j().homedir(),".claude","viewer-state","resume-panes.json"),N=null;function O(){if(N)return N;N=new Map;try{let a=JSON.parse(h().readFileSync(M,"utf8"));for(let[b,c]of Object.entries(a))c&&"string"==typeof c.paneId&&"string"==typeof c.windowName&&N.set(b,c)}catch{}return N}function P(){if(N)try{h().mkdirSync(l().dirname(M),{recursive:!0}),h().writeFileSync(M,JSON.stringify(Object.fromEntries(N)))}catch{}}async function Q(a){let b=O().get(a);if(!b)return null;let c=await v(["display-message","-p","-t",b.paneId,"#{window_name} #{pane_current_command} #{session_name}:#{window_index}.#{pane_index}"]).catch(()=>null),d=c&&0===c.code?c.stdout.trim().split(" "):null;return!d||3!==d.length||d[0]!==b.windowName||(0,s.g2)(d[1]??"")?(O().delete(a),P(),null):{paneId:b.paneId,display:d[2]??b.paneId}}function R(a){O().delete(a)&&P()}let S=new Map;async function T(a,b,c){let d=await Q(a);if(d)return await C(d.paneId,c),{target:d.display,spawned:!1};let e=S.get(a);if(e){let a=await e;return await C(a.paneId,c),{target:a.display,spawned:!1}}let f=Z(b,c);S.set(a,f);try{let c=await f;return O().set(a,{paneId:c.paneId,windowName:b.windowName}),P(),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{S.delete(a)}}function U(a){return new Promise(b=>setTimeout(b,a))}async function V(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 W(a){let b=await v(["capture-pane","-p","-t",a]).catch(()=>null);return b&&0===b.code?b.stdout:""}function X(a){return a.split("\n").filter(a=>a.trim()).slice(-3).join(" | ").slice(0,300)}async function Y(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 Z(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 U(1e3);let b=await V(e);if(null===b)throw Error("вікно агента закрилося одразу після запуску");if((0,s.g2)(b)){if(l)throw Error(`агент завершився одразу після запуску: ${X(await W(e))}`);continue}l=!0;let c=await W(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 V(e);if(null===q||(0,s.g2)(q))throw n("spawn",{target:e,cwd:a.cwd,result:"error",reason:"agent_exited_on_boot"}),Error(`агент не запустився у вікні: ${X(await W(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 $(a){for(let b of a)try{h().unlinkSync(b)}catch{}}function _(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 $(c),a}return{payload:[a,...c].filter(Boolean).join("\n"),imagePaths:c}}},78335:()=>{},89333:(a,b,c)=>{"use strict";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)=>{"use strict";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)):[]}},96487:()=>{},98590:(a,b,c)=>{"use strict";c.d(b,{NO:()=>B,Sn:()=>C,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=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:"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,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){let c=b.replace(/^\s*VERDICT:\s*(APPROVE|REQUEST_CHANGES|COMMENT)\s*$/im,"").trim();return`VERDICT: ${a}
|
|
1
|
+
exports.id=871,exports.ids=[871],exports.modules={7378:(a,b,c)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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"}}},24116:(a,b,c)=>{"use strict";c.d(b,{C:()=>am});var d=c(67981),e=c(75051),f=c(23855),g=c(92285),h=c(52509),i=c(95544);let j=(0,h.E)("ctx");function k(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 l=c(73024),m=c.n(l),n=c(76760),o=c.n(n),p=c(48161),q=c.n(p),r=c(30795);let s=(0,h.E)("meta"),t=(0,h.E)("title"),u=(0,h.E)("codex-project"),v=(0,h.E)("claude-cwd");function w(a,b){try{let c=m().openSync(a,"r");try{let a=Buffer.alloc(Math.min(b,131072)),d=m().readSync(c,a,0,a.length,0);return{text:a.toString("utf8",0,d),read:d}}finally{m().closeSync(c)}}catch{return null}}let x="-"+q().homedir().split(o().sep).filter(Boolean).join("-"),y=[x+"-Projects-",x+"-"],z=["<","#","Caveat:","{","[","This session is being continued"];function A(a){if(a===x)return o().basename(q().homedir());for(let b of y)if(a.startsWith(b))return a.slice(b.length)||a;return a}let B=(0,h.E)("worktree-git");function C(a){let b=function(a){let b=o().sep+".claude"+o().sep+"worktrees"+o().sep,c=a.indexOf(b);if(c<0)return null;let d=a.slice(c+b.length).split(o().sep).filter(Boolean)[0];return d?{repo:a.slice(0,c),worktree:d}:null}(a)??function(a){let b=B.get(a);if(b&&b[0]>Date.now())return b[1];let c=null;try{let b=o().join(a,".git");m().lstatSync(b).isFile()&&(c=function(a,b){let c=/^gitdir:\s*(.+?)\s*$/m.exec(b)?.[1];if(!c)return null;let d=o().resolve(a,c).split(o().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(o().sep)||o().sep,worktree:f}:null}(a,m().readFileSync(b,"utf8")))}catch{}return B.set(a,[Date.now()+6e4,c]),c}(a),c=A((b?b.repo:a).replace(/[^a-zA-Z0-9]/g,"-"));return c?{project:c,worktree:b?.worktree}:null}function D(a){let b="string"==typeof a?a.trim():"";return b&&!z.some(a=>b.startsWith(a))?b:null}function E(a,b,c){let d=t.get(a);if(d&&(null!==d[1]||d[0]>=131072))return d[1];let e=w(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=D(a.summary);if(b)return b}if("ai-title"===a.type){let b=D(a.aiTitle);if(b)return b}if(b){let b=(0,i.xK)(a.payload)??{};if("user_message"===b.type){let a=D(b.message);if(a)return a}if("message"===b.type&&"user"===b.role){let a=D((0,i.Em)(b.content).map(a=>(0,i.r$)(a.text)??(0,i.r$)(a.input_text)??"").join(" ").trim());if(a)return a}}else if("user"===a.type){let b=(0,i.xK)(a.message)?.content;if("string"==typeof b){let a=D(b);if(a)return a}let c=D((0,i.Em)(b).filter(a=>"text"===a.type).map(a=>(0,i.r$)(a.text)??"").join(" ").trim());if(c)return c}}return null}(e.text.split("\n").slice(0,151),c);return t.set(a,[e.read,f]),f}var F=c(89333);function G(a,b){let c=o().relative(a,b).split(o().sep);return 4===c.length&&"tasks"===c[2]&&c[3]?.endsWith(".output")?[c[0]??"",c[1]??"",c[3].slice(0,-7)]:null}var H=c(7378);let I=(0,h.E)("effort"),J=new Set(["minimal","low","medium","high","xhigh","max"]);function K(a){let b=a?.trim().toLowerCase()??"";return J.has(b)?b:null}function L(a,b){if("codex-sessions"!==a.root||"turn_context"!==b.type)return null;let c=(0,i.xK)(b.payload),d=(0,i.r$)(c?.effort);if(d)return d;let e=(0,i.xK)((0,i.xK)(c?.collaboration_mode)?.settings);return(0,i.r$)(e?.reasoning_effort)}function M(a){if(null===a.pid)return null;let b=(0,H.$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 N=c(26474);let O=(0,h.E)("needle");function P(a,b){let c,d=O.get(a);if(d&&d.hits||(d={hits:{},scanned:d?.scanned??{}},O.set(a,d)),d.hits[b])return!0;let e=Buffer.from(a),f=Math.max(0,e.length-1);try{c=m().statSync(b).size}catch{return!1}let g=d.scanned[b]??0;if(c<=g)return!1;try{let a=m().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=m().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{m().closeSync(a)}}catch{return!1}}function Q(a,b){for(let c of b)if(c&&P(a,c))return c;return null}let R=(0,h.E)("sid-slug"),S=(0,h.E)("bgcmd"),T=(0,h.E)("chain-uuid");function U(a,b,c=[]){let d;try{d=m().readdirSync(a,{withFileTypes:!0})}catch{return c}for(let e of d){let d=o().join(a,e.name);e.isDirectory()?U(d,b,c):e.isFile()&&b(d)&&c.push(d)}return c}function V(a,b){let c=F.GH["claude-projects"],d=b??R.get(a)??null;if(!d){let b=U(c,b=>o().basename(b)===a+".jsonl")[0];if(!b)return[null,[]];d=o().basename(o().dirname(b)),R.set(a,d)}let e=o().join(c,d,a+".jsonl"),f=U(o().join(c,d,a,"subagents"),a=>o().basename(a).startsWith("agent-")&&a.endsWith(".jsonl")).sort();return[m().existsSync(e)?e:null,f]}let W=o().join(q().homedir(),".claude","viewer-state","codex-lineage.json"),X=(0,h.E)("codex-lineage"),Y=!1,Z=!1,$=(0,h.E)("model");function _(a){return a?a.trim().replace(/^claude-/,"").replace(/-20\d{6}$/,""):null}function aa(a,b){if("codex-sessions"===a.root){if("turn_context"===b.type||"session_meta"===b.type)return(0,i.r$)((0,i.xK)(b.payload)?.model)}else if("assistant"===b.type){let a=(0,i.r$)((0,i.xK)(b.message)?.model);if(a&&"<synthetic>"!==a)return a}return null}let ab=(0,h.E)("plan"),ac=(0,h.E)("goal");function ad(a){return"in_progress"===a||"completed"===a?a:"pending"}function ae(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 af(a){return"active"===a||"complete"===a||"blocked"===a?a:null}var ag=c(17341),ah=c(15159),ai=c(27359);let aj=new Map;async function ak(a){let b=Date.now();for(let[a,c]of aj)b-c.at>6e5&&aj.delete(a);if("running"!==a.proc||null===a.pid||a.pendingQuestion)return aj.delete(a.path),null;if(Date.now()/1e3-a.mtime<15)return null;let c=await (0,e.u1)(a.pid);if(null===c)return null;let d=await (0,e.ZB)(c);if(!(0,ai.cZ)(d))return aj.delete(a.path),null;let f=aj.get(a.path);return f&&f.screen===d?(aj.set(a.path,{...f,at:b}),b/1e3-f.since<15)?null:{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,ai.fm)(d)}:(aj.set(a.path,{screen:d,at:b,since:b/1e3}),null)}let al=new Map;async function am(){let a=function(){let a=[];for(let[b,c]of Object.entries(F.GH))m().existsSync(c)&&function a(b,c,d,e){let f;try{f=m().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,o().join(d,g.name),e);continue}if(!g.isFile()||!F.Rg.some(a=>g.name.endsWith(a)))continue;let h=o().join(d,g.name);if("claude-projects"===b&&h.includes(o().sep+"tool-results"+o().sep))continue;try{f=m().statSync(h)}catch{continue}let i="claude-tasks"===b?G(F.GH["claude-tasks"],h):null;if(("claude-tasks"!==b||i)&&(0!==f.size||i)){if(i){let[a,b,c]=i,d=o().join(F.GH["claude-projects"],a,b,"subagents","agent-"+c+".jsonl");if(m().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,F.aA).map(a=>{let b=function(a,b,c,d){let e,f=s.get(c);if(f?.[0]===d.size)return f[1];let g=o().relative(b,c),h=o().basename(c),j="інше",k=null,l="claude",m="",n="plain";if("codex-jobs"===a){let a=g.split(o().sep)[0]??"",b=a.split("-"),d=b.at(-1)??"";j=b.length>=2&&d.length>=12?b.slice(0,-1).join("-"):a,l="codex",m="джоба";let e=(0,i.Vh)(c.replace(/\.log$/,".json"));if(e){let a=[(0,i.r$)(e.kindLabel)??"",(0,i.r$)(e.title)??""].filter(Boolean).join(" \xb7 "),b=((0,i.r$)(e.summary)??"").split(/\s+/).join(" ").trim();k=a+(b?" — "+b:"")||h}else k=h}else if("codex-sessions"===a){let a=u.get(c);if(a)j=a.project,e=a.worktree;else{j="";let a=w(c,d.size);if(a)try{let b=JSON.parse(a.text.split("\n")[0]??"{}"),c=(0,i.r$)((0,i.xK)(b.payload)?.cwd)??"",d=C(c);j=d?.project??"",e=d?.worktree}catch{j=""}j&&u.set(c,{project:j,worktree:e})}j||(j="codex"),l="codex",m="сесія",n="codex",k=E(c,d.size,!0)??"Сесія Codex"}else if("claude-projects"===a){let a=g.split(o().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);j=b?.project??A(a),e=b?.worktree;let f=function(a,b){let c=v.get(a);if(c&&(null!==c[1]||c[0]>=131072))return c[1];let d=w(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,i.r$)((0,i.xK)(a)?.cwd);if(c)return c}catch{continue}return null}(d.text.split("\n").slice(0,25));return v.set(a,[d.read,e]),e}(c,d.size),l=f?C(f):null;if(l&&(b||l.worktree)&&(j=l.project,e=l.worktree??e),n="claude",h.startsWith("agent-")){m="субагент";let a=(0,i.Vh)(c.slice(0,-6)+".meta.json")??{};k=(0,i.r$)(a.description)??(0,i.r$)(a.name)??"Субагент "+h.slice(6).split(".")[0]}else m="сесія",k=E(c,d.size,!1)??"Сесія Claude"}else"claude-tasks"===a&&(j=A(g.split(o().sep)[0]??""),l="shell",m="фон",k="Фонова задача "+h.split(".")[0]);let p={project:j,worktree:e,title:(0,r.cr)(k??h,120),engine:l,kind:m,fmt:n};return s.set(c,[d.size,p]),p}(a.rootName,a.root,a.path,a.st);return{path:a.path,root:a.rootName,name:o().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,H.$w)():al,c=new Map;for(let b of a){let a="codex-jobs"===b.root?(0,i.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(o().sep+"subagents"+o().sep)){let b=(0,i.Vh)(a.path.slice(0,-6)+".meta.json")??{},c=(0,i.r$)(b.model);if(c)return _(c)}if("claude-projects"!==a.root&&"codex-sessions"!==a.root||!a.path.endsWith(".jsonl"))return null;let b=$.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=aa(a,b))break;if(!c)try{for(let b of m().readFileSync(a.path,"utf8").split("\n").slice(0,41))try{let d=JSON.parse(b);if(d&&"object"==typeof d&&!Array.isArray(d)&&(c=aa(a,d)))break}catch{}}catch{}let d=_(c);return $.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,i.Vg)(c.pid);return(a.pid=b,"running"===c.status)?null!==b&&(0,H.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,ah.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 K(M(a));let b=I.get(a.path);if(b?.[0]===a.size)return b[1]??K(M(a));let c=null;for(let b of(0,f.He)(a.path,a.size).reverse())if(c=K(L(a,b)))break;if(!c)try{for(let b of m().readFileSync(a.path,"utf8").split("\n").slice(0,41))try{let d=JSON.parse(b);if(d&&"object"==typeof d&&!Array.isArray(d)&&(c=K(L(a,d))))break}catch{}}catch{}return I.set(a.path,[a.size,c]),c??K(M(a))}(b);for(let b of(await Promise.all(a.map(async a=>{let b=(0,ag.x)(a);a.pendingQuestion=b&&null!==a.pid?{...b,paneTarget:await (0,e.u1)(a.pid)}:b,a.waitingInput=await ak(a),a.plan=function(a){if("claude-projects"!==a.root&&"codex-sessions"!==a.root||!a.path.endsWith(".jsonl"))return null;let b=ab.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,i.xK)(a.payload);if(!c||"function_call"!==c.type||"update_plan"!==(0,i.r$)(c.name))return null;let d=(0,i.r$)(c.arguments);if(!d)return null;try{b=JSON.parse(d)}catch{return null}return ae((0,i.Em)((0,i.xK)(b)?.plan).map(a=>{let b=(0,i.r$)(a.step)?.trim();return b?{text:b,status:ad(a.status)}:null}).filter(a=>null!==a),(0,i.r$)(a.timestamp))}(b):function(a){if("assistant"!==a.type)return null;for(let b of(0,i.Em)((0,i.xK)(a.message)?.content))if("tool_use"===b.type&&"TodoWrite"===(0,i.r$)(b.name))return ae((0,i.Em)((0,i.xK)(b.input)?.todos).map(a=>{let b=ad(a.status),c=("in_progress"===b?(0,i.r$)(a.activeForm)?.trim():null)||(0,i.r$)(a.content)?.trim()||null;return c?{text:c,status:b}:null}).filter(a=>null!==a),(0,i.r$)(a.timestamp));return null}(b))break;return ab.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=ac.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,i.xK)(a.payload);if(!b)return null;if("thread_goal_updated"===b.type){let a=(0,i.xK)(b.goal);return a?{objective:(0,i.r$)(a.objective),status:af(a.status)??void 0,tokensUsed:(0,i.Vg)(a.tokensUsed),timeUsedSeconds:(0,i.Vg)(a.timeUsedSeconds)}:null}if("function_call"===b.type&&"update_goal"===(0,i.r$)(b.name)){let a=(0,i.r$)(b.arguments);if(!a)return null;try{let b=(0,i.xK)(JSON.parse(a));if(!b)return null;return{objective:(0,i.r$)(b.objective),status:af(b.status)??((0,i.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 ac.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=j.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,i.xK)(a.payload);if(!b||"token_count"!==(0,i.r$)(b.type))return null;let c=(0,i.xK)(b.info);if(!c)return null;let d=(0,i.xK)(c.last_token_usage)??(0,i.xK)(c.total_token_usage);return d?k((0,i.Vg)(d.total_tokens),(0,i.Vg)(c.model_context_window)):null}(b):function(a){if("assistant"!==a.type)return null;let b=(0,i.xK)(a.message),c=(0,i.r$)(b?.model);if(!b||"<synthetic>"===c)return null;let d=(0,i.xK)(b.usage);if(!d)return null;let e=((0,i.Vg)(d.input_tokens)??0)+((0,i.Vg)(d.cache_read_input_tokens)??0)+((0,i.Vg)(d.cache_creation_input_tokens)??0),f=c?.includes("[1m]")||c?.includes("fable")?1e6:2e5;return e>f&&(f=1e6),k(e,f)}(b))break;return j.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(m().existsSync(F.GH["codex-jobs"]))for(let a of U(F.GH["codex-jobs"],a=>o().basename(a).startsWith("task-")&&a.endsWith(".json"))){let b=(0,i.Vh)(a),d=(0,i.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(o().sep);if(a.length>=3&&"subagents"===a.at(-2)){let c=a[0]??"",[d,e]=V(a.at(-3)??"",c);b.parent=d;let f=(0,i.Vh)(b.path.slice(0,-6)+".meta.json")??{},g=(0,i.r$)(f.toolUseId),h=Number(f.spawnDepth??0);if(g&&h>=1){let a=Q(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,i.Vh)(d.replace(/\.log$/,".json"))??{}),c=(0,i.r$)(a.sessionId);if(c){let d=(0,i.r$)(a.workspaceRoot)??"",e=d?d.replace(/[^A-Za-z0-9-]/g,"-"):null,[f,g]=V(c,e);!f&&e&&([f,g]=V(c,null));let h=Q(o().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=G(F.GH["claude-tasks"],b.path);if(!a)continue;let[c,d,e]=a,[f,g]=V(d,c),h=function(a,b,c){if(S.has(a))return S.get(a)??null;let d="background with ID: "+a,e=null;for(let f of[...b,...c]){if(!f||!P(d,f))continue;let b=function(a,b){let c=null;try{for(let d of m().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 m().readFileSync(b,"utf8").split("\n"))if(a.includes(c)&&a.includes('"tool_use"'))try{let b=JSON.parse(a);for(let a of(0,i.Em)((0,i.xK)(b.message)?.content))if("tool_use"===a.type&&a.id===c){let b=(0,i.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 S.set(a,c),c}e??={command:"",description:"",source:f}}return e&&S.set(a,e),e}(e,(f?[f]:[]).concat(g),function(a,b){let c,d=o().join(F.GH["claude-projects"],a);try{c=m().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=o().join(d,a.name);try{let a=m().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(Y)return;Y=!0;let a=(0,i.Vh)(W);if(a&&"object"==typeof a&&!Array.isArray(a)){for(let[b,c]of Object.entries(a))"string"==typeof c&&!X.has(b)&&m().existsSync(b)&&X.set(b,c);X.size!==Object.keys(a).length&&(Z=!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,H.Ib)(d)){let a=c.get(d)??(0,H.FW)(d,"CODEX_COMPANION_TRANSCRIPT_PATH");if(a){b=a;break}}if(b){a.parent=b;var d=a.path,e=b;if(X.get(d)!==e){for(X.set(d,e);X.size>2e3;){let a=X.keys().next().value;if(void 0===a)break;X.delete(a)}Z=!0}}else{let b=X.get(a.path);b&&(a.parent=b)}}if(Z){Z=!1;try{m().mkdirSync(o().dirname(W),{recursive:!0}),m().writeFileSync(W,JSON.stringify(Object.fromEntries(X)))}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(o().sep+"subagents"+o().sep))continue;let a=(0,N._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,N.N0)(d))));d=(0,H.Ib)(d));a&&a!==b.path&&(0,N.A6)(b.path,a)}a&&a!==b.path&&e.has(a)&&(b.parent=a,b.handoff=!0)}(0,N.OA)(),function(a){let b=new Map;for(let c of a){if("claude-projects"!==c.root)continue;let a=c.name.split(o().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=T.get(a);if(c&&(null!==c[1]||c[0]>=524288||c[0]>=b))return c[1];let d=null,e=0;try{let c=m().openSync(a,"r");try{let a=Buffer.alloc(Math.min(b,524288));for(let b of(e=m().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{m().closeSync(c)}}catch{return null}return T.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=>P(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),a}},26474:(a,b,c)=>{"use strict";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)=>{"use strict";c.d(b,{EB:()=>e,_1:()=>o,cZ:()=>w,d3:()=>x,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)}function x(a){return a.split("\n").filter(a=>a.trim()).slice(-3).join(" | ").slice(0,300)}},30795:(a,b,c)=>{"use strict";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}c.d(b,{cr:()=>d})},51906:(a,b,c)=>{"use strict";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)=>{"use strict";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)=>{"use strict";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})},67981:(a,b,c)=>{"use strict";c.d(b,{HR:()=>x,M$:()=>A,Xn:()=>v});var d=c(77598),e=c.n(d),f=c(73024),g=c.n(f),h=c(48161),i=c.n(h),j=c(76760),k=c.n(j);let l=k().join(i().homedir(),".claude","viewer-state"),m=k().join(l,"push-keys.json"),n=k().join(l,"push-subscriptions.json"),o=k().join(l,"push-sent.json"),p=Promise.resolve();function q(a){return Buffer.from(a).toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function r(a){let b=a+"=".repeat((4-a.length%4)%4);return Buffer.from(b.replace(/-/g,"+").replace(/_/g,"/"),"base64")}function s(a,b){try{return JSON.parse(g().readFileSync(a,"utf8"))}catch{return b}}function t(a,b){try{return g().mkdirSync(k().dirname(a),{recursive:!0}),g().writeFileSync(a,JSON.stringify(b,null,2)),!0}catch{return!1}}function u(a,b,c){let d=[],f=Buffer.alloc(0),g=1;for(;Buffer.concat(d).length<c;)f=e().createHmac("sha256",a).update(f).update(b).update(Buffer.from([g])).digest(),d.push(f),g+=1;return Buffer.concat(d).subarray(0,c)}function v(){let a=s(m,null);if(a?.publicKey&&a.privateKey)return a;let b=e().generateKeyPairSync("ec",{namedCurve:"prime256v1"}),c={publicKey:q(b.publicKey.export({type:"spki",format:"der"}).subarray(-65)),privateKey:b.privateKey.export({type:"pkcs8",format:"pem"}).toString()};return t(m,c),c}async function w(a){if(!a.endpoint)return;let b=s(n,[]).filter(b=>b.endpoint!==a.endpoint);b.push(a),t(n,b)}async function x(a){p=p.then(()=>w(a),()=>w(a)),await p.catch(()=>void 0)}async function y(a,b){try{var c;let d,f,g,h,i,j=function(a,b){let c=a.keys?.p256dh,d=a.keys?.auth;if(!c||!d)return null;let f=r(c),g=r(d),h=e().randomBytes(16),i=e().createECDH("prime256v1"),j=i.generateKeys(),k=i.computeSecret(f),l=e().createHmac("sha256",g).update(k).digest(),m=u(l,Buffer.concat([Buffer.from("WebPush: info\0"),f,j]),32),n=e().createHmac("sha256",h).update(m).digest(),o=u(n,"Content-Encoding: aes128gcm\0",16),p=u(n,"Content-Encoding: nonce\0",12),q=Buffer.concat([Buffer.from(JSON.stringify(b),"utf8"),Buffer.from([2])]),s=e().createCipheriv("aes-128-gcm",o,p),t=Buffer.concat([s.update(q),s.final(),s.getAuthTag()]),v=Buffer.alloc(21);return h.copy(v,0),v.writeUInt32BE(4096,16),v.writeUInt8(j.length,20),Buffer.concat([v,j,t])}(a,b);if(!j)return"failed";let k=new Uint8Array(j.byteLength);k.set(j);let l=(c=new URL(a.endpoint).origin,d=v(),f=q(JSON.stringify({typ:"JWT",alg:"ES256"})),g=q(JSON.stringify({aud:c,exp:Math.floor(Date.now()/1e3)+43200,sub:"mailto:agent-log-viewer@localhost"})),(h=e().createSign("SHA256")).update(`${f}.${g}`),h.end(),i=h.sign({key:d.privateKey,dsaEncoding:"ieee-p1363"}),`${f}.${g}.${q(i)}`),m=new AbortController,n=setTimeout(()=>m.abort(),3e3),o=await fetch(a.endpoint,{method:"POST",signal:m.signal,headers:{authorization:`vapid t=${l}, k=${v().publicKey}`,"content-encoding":"aes128gcm","content-type":"application/octet-stream",ttl:"60",urgency:"normal"},body:k.buffer}).catch(()=>null);if(clearTimeout(n),!o)return"failed";if(o.status>=200&&o.status<300)return"sent";if(404===o.status||410===o.status)return"dead";return"failed"}catch{return"failed"}}async function z(a){let b;if(a.waitingInput&&Date.now()/1e3-a.waitingInput.since<60)return;let c=a.pendingQuestion?.toolUseId??(a.waitingInput?`${a.path}:waiting:${Math.floor(a.waitingInput.since)}`:null);if(!c)return;let d=new Set(s(o,[]));if(d.has(c))return;let e=s(n,[]);if(!e.length)return;let f=[],g=!1,h=!1,i=(b=a.pendingQuestion?.kind==="plan"?"plan awaiting approval":a.pendingQuestion?.questions?.[0]?.header||a.waitingInput?.menu?.question.slice(0,120)||(a.waitingInput?"waiting for an answer":"question"),{title:`${a.title||"Агент"} \xb7 ${a.engine}`,body:b,url:`/#f=${encodeURIComponent(a.path)}#question`});for(let a of e){let b=await y(a,i);"sent"===b?(g=!0,f.push(a)):"failed"===b?f.push(a):h=!0}g&&(d.add(c),t(o,[...d].slice(-500))),h&&t(n,f)}async function A(a){p=p.then(()=>z(a),()=>z(a)),await p.catch(()=>void 0)}},75051:(a,b,c)=>{"use strict";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(24116),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}}},78335:()=>{},89333:(a,b,c)=>{"use strict";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)})}},92285:(a,b,c)=>{"use strict";c.d(b,{w1:()=>S,Ec:()=>E,Hw:()=>H,xz:()=>I,iq:()=>K,zn:()=>Q});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);let l=/^\s*(?:VERDICT:\s*)?(REQUEST_CHANGES|APPROVE|COMMENT)\b/m,m=/^\s*(\d+)[.)]\s+(.*)$/,n=/(?:\[(P[0-3])\]|\b(Critical|High|Medium|Low|Info|P[0-3])\b)/i,o=/((?:\.{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,p=/\[([^\]]+)\]\(([^)\s]+)\)/,q=/([\w.-]*(?:api[_-]?key|access[_-]?token|refresh[_-]?token|authorization|bearer|secret|password|passwd|pwd|token))\b(\s*[:=]\s*)(["']?)[^\s"',}]+/gi;function r(a){let b=a.replace(q,(a,b,c,d)=>`${b}${c}${d}[redacted]`);return{raw:b.slice(0,24e3),truncated:b.length>24e3}}var s=c(23855),t=c(95544),u=c(98590);function v(a){for(let b of(0,s.He)(a.path,a.size).reverse()){let c=Date.parse(String(b.timestamp??""))||1e3*a.mtime;if("codex-sessions"===a.root){let a=(0,t.xK)(b.payload)??{},d=(0,t.r$)(a.type);if("agent_message"===d)return{text:(0,t.r$)(a.message)??"",ts:c};if("message"===d&&"assistant"===a.role){let b=(0,t.Em)(a.content).map(a=>(0,t.r$)(a.text)??(0,t.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,t.Em)((0,t.xK)(b.message)?.content).filter(a=>"text"===a.type).map(a=>(0,t.r$)(a.text)??"").join("\n").trim();if(a)return{text:a,ts:c}}}return null}function w(a){let b=a.match(l)?.[1];if(!b)return null;let c=function(a){let b=a.match(l)?.[1];if(!b)return null;let c=[],d=[],e=null,f=()=>{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(n)?.[1]??f.match(n)?.[2]??"Info"),b=function(a){let b=a.match(p);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(o);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(n);if(c&&void 0!==c.index){let a=b.slice(c.index+c[0].length).replace(/^[\s.:–—-]+/,"");a&&(b=a)}return b.replace(p,"$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:r(f).raw})),e=null};for(let b of a.split("\n")){let a=b.trimEnd(),g=a.match(m);if(g){f(),e=g[2]??"";continue}let h=a.trim();if(null!==e){h?e=`${e}
|
|
2
|
+
${h}`:f();continue}!(!h||l.test(a)||/^(findings?|summary|open questions?|tests?|residual risk)\s*:?\s*$/i.test(h))&&0===c.length&&d.length<3&&h.length<=240&&d.push(h)}f();let g=c.filter(a=>n.test(a.body)).length;return b||/^findings?\s*:?$/im.test(a)||g>=2||g>=1&&/\b(review|request_changes|approve|comment)\b/i.test(a)?{kind:"review",ts:null,verdict:b,findings:c,summary:d,raw:r(a).raw}:null}(a);return{verdict:b,findingsCount:c?.findings.length??0,content:(0,u.Sn)(b,a)}}function x(a,b){if(!a.reviewerPath)return null;let c=b.get(a.reviewerPath);if(!c)return null;let d=v(c);return d?w(d.text):null}var y=c(59680);let z=new Set(["approved","done_comment","needs_decision","closed"]),A=/^REVIEW_READY:\s*(.*)$/m,B=/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i,C=globalThis,D=new Set;function E(){return new Date().toISOString()}function F(a){if(!a)return 0;let b=Date.parse(a);return Number.isFinite(b)?b:0}function G(a){return a.map(a=>({...a,roles:{implementer:{...a.roles.implementer},reviewer:{...a.roles.reviewer}},rounds:a.rounds.map(a=>({...a}))}))}function H(a){return a.rounds.at(-1)??null}function I(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:E(),spawnStartedAt:null,relayStartedAt:null,reviewedAt:null,relayedAt:null,error:null}}function J(a,b){a.state="needs_decision",a.stateDetail=b}async function K(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 L(a,b,c){if(c.reviewerPath)return!1;let d=F(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 M(a,b,c){let d=b.findingsPath??(0,u.tR)(a.id,b.n);(0,u.Yj)(d,c.content),b.findingsPath=d,b.verdict=c.verdict,b.findingsCount=c.findingsCount,b.reviewedAt=E(),"manual"===a.mode?a.state="relay_pending":a.state="relaying",a.stateDetail=null}async function N(a,b){let c=(0,y.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 O(a,b,c){if(!c.findingsPath)throw Error("round has no findings artifact");let d=e().readFileSync(c.findingsPath,"utf8");a.state="relaying",await K(a,b,(0,y.i0)(c,d)),c.relayedAt=E(),"APPROVE"===c.verdict?(a.state="approved",a.closedAt=E()):"COMMENT"===c.verdict?a.state="done_comment":a.roundLimit>0&&a.rounds.length>=a.roundLimit?J(a,"round limit reached"):(a.state="fixing",a.stateDetail=null)}async function P(a,b,c,d){var f;let h=JSON.stringify(a);if("closed"===a.state||"paused"===a.state)return!1;let i=c.get(a.implementerPath);if(!i){let b=a.state;return a.state="paused",a.pausedState=b,a.stateDetail="implementer transcript is missing",JSON.stringify(a)!==h}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=v(b);if(!c)return null;let d=Math.max(...a.rounds.map(a=>F(a.startedAt)),F(a.createdAt));return c.ts<=d?null:c.text.match(A)?.[1]?.trim()??null}(a,i);return null!==b&&(a.rounds.push(I(a,"marker",b)),a.state="manual"===a.mode?"spawn_pending":"spawning",a.stateDetail=null),JSON.stringify(a)!==h}let j=H(a);if(!j)return JSON.stringify(a)!==h;if("spawning"===a.state){let b=(0,k.IL)(a.id,j.n,j,a.roles.reviewer.engine);if(j.spawnStartedAt&&"headless"===a.reviewerMode&&b)return a.state="reviewing",a.stateDetail=null,JSON.stringify(a)!==h;if(j.spawnStartedAt&&!b&&null===j.reviewerPath)return J(a,"reviewer spawn was interrupted by a restart"),JSON.stringify(a)!==h;try{j.spawnStartedAt=E(),d(),await N(a,j)}catch(b){j.error=b instanceof Error?b.message:String(b),J(a,j.error)}return JSON.stringify(a)!==h}if("reviewing"===a.state){let d=function(a){if(!a.findingsPath)return null;try{return w(e().readFileSync(a.findingsPath,"utf8"))}catch{return null}}(j);if(d)return M(a,j,d),JSON.stringify(a)!==h;if("headless"===a.reviewerMode){let d,e=(0,k.IL)(a.id,j.n,j,a.roles.reviewer.engine);if(j.sessionId||(j.sessionId=e?.sessionId??(f=e?.stdout??"",(d=f.match(/session id:?\s*([0-9a-f-]{36})/i)?.[1])&&B.test(d)?d:f.split("\n").slice(0,40).join("\n").match(B)?.[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,j,j.sessionId??null),j.reviewerPath||j.sessionId||L(a,b,j),e?.status==="running")return JSON.stringify(a)!==h;if(e){(0,k.T)(a.id,j.n,j.reviewerPid??null);let b=w(e.finalOutput);if(b)M(a,j,b);else{let b=j.findingsPath??(0,u.tR)(a.id,j.n);(0,u.Yj)(b,e.finalOutput||e.stdout||e.stderr),j.findingsPath=b,j.error="timeout"===e.status?"reviewer timed out":e.stderr.trim()||"reviewer verdict was unparseable",J(a,j.error)}return JSON.stringify(a)!==h}let i=x(j,c);return i?M(a,j,i):J(a,"reviewer process is missing after server restart"),JSON.stringify(a)!==h}if(L(a,b,j),j.reviewerPath){let b=c.get(j.reviewerPath),d=x(j,c);d?M(a,j,d):b&&"live"!==b.activity&&"stalled"!==b.activity&&J(a,"reviewer verdict was unparseable")}return JSON.stringify(a)!==h}if("relaying"===a.state){let b=`${a.id}:${j.n}`;if(j.relayStartedAt&&null===j.relayedAt&&!D.has(b))return J(a,"relay was interrupted; it may have been delivered twice"),JSON.stringify(a)!==h;try{j.relayStartedAt=E(),D.add(b),d(),await O(a,c,j)}catch(b){j.error=b instanceof Error?b.message:String(b),a.state="paused",a.pausedState="relaying",a.stateDetail=j.error}}return JSON.stringify(a)!==h}async function Q(a){if(C.__llvFlowTick){let b=G((0,u.mL)());return R(a,b),{flows:b,changed:!1}}C.__llvFlowTick=!0;let b=G((0,u.mL)());try{let c=new Map(a.map(a=>[a.path,a])),d=!1;for(let e of b)!z.has(e.state)&&(await P(e,a,c,()=>(0,u.tu)(b))&&(d=!0),d&&(0,u.tu)(b));return R(a,b),d&&(0,u.tu)(b),{flows:b,changed:d}}finally{C.__llvFlowTick=!1}}function R(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 S(){return{flows:(0,u.mL)(),presets:(0,u.Vd)()}}},95544:(a,b,c)=>{"use strict";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)):[]}},96487:()=>{},98590:(a,b,c)=>{"use strict";c.d(b,{Ml:()=>C,NO:()=>B,Sn:()=>D,Vd:()=>x,WJ:()=>A,Yj:()=>r,mL:()=>v,tR:()=>z,tu:()=>w});var d=c(77598),e=c.n(d),f=c(73024),g=c.n(f),h=c(48161),i=c.n(h),j=c(76760),k=c.n(j);let l=process.env.LLV_STATE_DIR||k().join(i().homedir(),".claude","viewer-state"),m=k().join(l,"flows.json"),n=k().join(l,"review-loop-presets.json"),o=k().join(l,"flows"),p=[{name:"Codex high → Fable",implementer:{engine:"codex",model:null,effort:"high"},reviewer:{engine:"claude",model:"fable",effort:null}},{name:"Fable → Codex xhigh",implementer:{engine:"claude",model:"fable",effort:null},reviewer:{engine:"codex",model:null,effort:"xhigh"}},{name:"Sonnet → Codex xhigh",implementer:{engine:"claude",model:"sonnet",effort:null},reviewer:{engine:"codex",model:null,effort:"xhigh"}},{name:"Codex high → Codex xhigh",implementer:{engine:"codex",model:null,effort:"high"},reviewer:{engine:"codex",model:null,effort:"xhigh"}}];function q(a,b){g().mkdirSync(k().dirname(a),{recursive:!0});let c=k().join(k().dirname(a),`.${k().basename(a)}.${process.pid}.${e().randomUUID()}.tmp`);g().writeFileSync(c,JSON.stringify(b,null,2)+"\n","utf8"),g().renameSync(c,a)}function r(a,b){g().mkdirSync(k().dirname(a),{recursive:!0});let c=k().join(k().dirname(a),`.${k().basename(a)}.${process.pid}.${e().randomUUID()}.tmp`);g().writeFileSync(c,b,"utf8"),g().renameSync(c,a)}function s(a){try{return JSON.parse(g().readFileSync(a,"utf8"))}catch{return null}}function t(a){return!(!a||"object"!=typeof a||Array.isArray(a))&&"string"==typeof a.id&&"implement-review-loop"===a.template&&"string"==typeof a.cwd&&"string"==typeof a.implementerPath&&"string"==typeof a.baseRef&&Array.isArray(a.rounds)}function u(a){return!(!a||"object"!=typeof a||Array.isArray(a))&&"string"==typeof a.name&&!!a.implementer&&!!a.reviewer}function v(){let a=s(m);return(Array.isArray(a?.flows)?a.flows.filter(t):[]).map(a=>({...a,pausedState:a.pausedState??null,rounds:a.rounds.map(a=>({...a,sessionId:a.sessionId??null,reviewerPid:a.reviewerPid??null,spawnStartedAt:a.spawnStartedAt??null,relayStartedAt:a.relayStartedAt??null,error:a.error??null}))}))}function w(a){q(m,{flows:a})}function x(){let a=s(n),b=Array.isArray(a?.presets)?a.presets.filter(u):[];return b.length>0?b:(q(n,{presets:p}),p)}function y(a){return k().join(o,a)}function z(a,b){return k().join(y(a),`round-${b}-review.md`)}function A(a,b){return k().join(y(a),`round-${b}-last-message.md`)}function B(a,b){return k().join(y(a),`round-${b}-stderr.txt`)}function C(a,b){return k().join(y(a),`round-${b}-stdout.log`)}function D(a,b){let c=b.replace(/^\s*VERDICT:\s*(APPROVE|REQUEST_CHANGES|COMMENT)\s*$/im,"").trim();return`VERDICT: ${a}
|
|
4
3
|
${c?"\n"+c+"\n":"\n"}`}}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/
|
|
1
|
+
globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/eVZqd0xcmD_g_vTrSrlTL/_buildManifest.js","static/eVZqd0xcmD_g_vTrSrlTL/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-7dc14fd5ff1227ce.js","static/chunks/4bd1b696-215e5051988c3dde.js","static/chunks/794-0fc36bf1952fbc29.js","static/chunks/main-app-518cea4217042452.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
|