commandmate 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +9 -9
  3. package/.next/app-path-routes-manifest.json +1 -1
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/cache/.tsbuildinfo +1 -1
  6. package/.next/cache/config.json +3 -3
  7. package/.next/cache/webpack/client-production/0.pack +0 -0
  8. package/.next/cache/webpack/client-production/1.pack +0 -0
  9. package/.next/cache/webpack/client-production/2.pack +0 -0
  10. package/.next/cache/webpack/client-production/index.pack +0 -0
  11. package/.next/cache/webpack/client-production/index.pack.old +0 -0
  12. package/.next/cache/webpack/edge-server-production/0.pack +0 -0
  13. package/.next/cache/webpack/edge-server-production/index.pack +0 -0
  14. package/.next/cache/webpack/server-production/0.pack +0 -0
  15. package/.next/cache/webpack/server-production/index.pack +0 -0
  16. package/.next/next-server.js.nft.json +1 -1
  17. package/.next/prerender-manifest.json +1 -1
  18. package/.next/required-server-files.json +1 -1
  19. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/app/update-check/route.js +1 -1
  21. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  22. package/.next/server/app/page_client-reference-manifest.js +1 -1
  23. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  24. package/.next/server/app/worktrees/[id]/page.js +1 -1
  25. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  26. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  27. package/.next/server/app-paths-manifest.json +10 -10
  28. package/.next/server/chunks/7536.js +1 -1
  29. package/.next/server/chunks/7566.js +2 -2
  30. package/.next/server/functions-config-manifest.json +1 -1
  31. package/.next/server/middleware-manifest.json +5 -5
  32. package/.next/server/pages/500.html +1 -1
  33. package/.next/server/server-reference-manifest.json +1 -1
  34. package/.next/static/chunks/app/worktrees/[id]/{page-9418e49bdc1de02c.js → page-a556551ce5c69dec.js} +1 -1
  35. package/.next/trace +5 -5
  36. package/dist/server/src/lib/claude-session.js +31 -6
  37. package/dist/server/src/lib/cli-patterns.js +1 -1
  38. package/dist/server/src/lib/response-poller.js +3 -2
  39. package/package.json +1 -1
  40. /package/.next/static/{clTo9tuAoPMLcGRuVENfO → hmAjbCPjxX_C0Os7rphI1}/_buildManifest.js +0 -0
  41. /package/.next/static/{clTo9tuAoPMLcGRuVENfO → hmAjbCPjxX_C0Os7rphI1}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- exports.id=7566,exports.ids=[7566],exports.modules={58359:()=>{},93739:()=>{},98241:(t,e,r)=>{"use strict";r.d(e,{s:()=>o});var n=r(55315),a=r.n(n),i=r(98838);function o(){return(0,i.Hb)("CM_LOG_DIR")||a().join(process.cwd(),"data","logs")}},40824:(t,e,r)=>{"use strict";r.d(e,{HI:()=>i,pC:()=>l,Gn:()=>h,H2:()=>w,n8:()=>m,KL:()=>f,WX:()=>d});var n=r(84770),a=r.n(n);let i="cm_auth_token",o=/^[0-9a-f]{64}$/,s={maxAttempts:5,lockoutDuration:9e5,cleanupInterval:36e5},l=86400,c=(()=>{let t=process.env.CM_AUTH_TOKEN_HASH||void 0;if(t){if(!function(t){return!!t&&o.test(t)}(t)){console.error(`[Security] CM_AUTH_TOKEN_HASH is not a valid 64-character hex string (got ${t.length} chars). Authentication will be disabled.`);return}return t}})(),u=function(){let t=process.env.CM_AUTH_EXPIRE,e=Date.now();if(t)try{return e+function(t){let e=t.match(/^(\d+)([hdm])$/);if(!e)throw Error(`Invalid duration format: "${t}". Use Nh, Nd, or Nm (e.g., "24h", "7d", "90m")`);let r=parseInt(e[1],10),n=e[2],a={h:36e5,d:864e5,m:6e4}[n];if(void 0===a)throw Error(`Invalid duration unit: "${n}"`);let i=r*a;if(i<36e5)throw Error(`Duration too short: minimum is 1h (60m). Got: "${t}"`);if(i>2592e6)throw Error(`Duration too long: maximum is 30d (720h). Got: "${t}"`);return i}(t)}catch{return e+864e5}return process.env.CM_AUTH_TOKEN_HASH?e+864e5:null}();function d(t){if(!c||!t||"string"!=typeof t||null!==u&&Date.now()>u)return!1;let e=a().createHash("sha256").update(t).digest("hex"),r=Buffer.from(e,"hex"),n=Buffer.from(c,"hex");return r.length===n.length&&a().timingSafeEqual(r,n)}function f(){return!!c}function m(){if(null===u)return 0;let t=u-Date.now();return t<=0?0:Math.floor(t/1e3)}function h(t){return{httpOnly:!0,sameSite:"strict",secure:!!process.env.CM_HTTPS_CERT,maxAge:t,path:"/"}}function w(){let t=new Map,e=setInterval(()=>{let e=Date.now();for(let[r,n]of t){let a=null===n.lockedUntil||e>n.lockedUntil,i=e-n.lastAttempt>s.lockoutDuration;a&&i&&t.delete(r)}},s.cleanupInterval);return e.unref&&e.unref(),{checkLimit(e){let r=t.get(e);if(!r)return{allowed:!0};if(null!==r.lockedUntil){let t=Date.now();if(t<r.lockedUntil)return{allowed:!1,retryAfter:Math.ceil((r.lockedUntil-t)/1e3)};r.attempts=0,r.lockedUntil=null}return{allowed:!0}},recordFailure(e){let r=Date.now(),n=t.get(e)||{attempts:0,lockedUntil:null,lastAttempt:r};n.attempts++,n.lastAttempt=r,n.attempts>=s.maxAttempts&&(n.lockedUntil=r+s.lockoutDuration),t.set(e,n)},recordSuccess(e){t.delete(e)},destroy(){clearInterval(e),t.clear()}}}},89287:(t,e,r)=>{"use strict";r.d(e,{Z:()=>o});let n=/📄 Session log: (.+?\/([^\/\s]+\.jsonl))/,a=/Request ID: ([^\s\n]+)/,i=/Summary: (.+?)(?:\n─|$)/s;function o(t){let e={content:t},r=n.exec(t);r&&(e.logFileName=r[2]);let o=a.exec(t);o&&(e.requestId=o[1]);let s=i.exec(t);return s&&(e.summary=s[1].trim()),e}},62648:(t,e,r)=>{"use strict";r.d(e,{Lm:()=>I,Uv:()=>x,YI:()=>$,_f:()=>D,xd:()=>k,ym:()=>C});var n=r(10927),a=r(19377),i=r(92900),o=r(61282),s=r(21764),l=r(20629);let c=(0,s.promisify)(o.exec);function u(t){return t instanceof Error?t.message:String(t)}let d=["$","%","#"],f=null;async function m(){if(f)return f;let t=process.env.CLAUDE_PATH;if(t&&(/^[/a-zA-Z0-9._-]+$/.test(t)?!t.includes("..")||(console.log("[claude-session] CLAUDE_PATH contains path traversal sequence, ignoring"),!1):(console.log(`[claude-session] CLAUDE_PATH contains invalid characters, ignoring: ${t.substring(0,50)}`),!1)))try{return await (0,l.access)(t,l.constants.X_OK),f=t}catch{console.log(`[claude-session] CLAUDE_PATH is not executable: ${t}`)}try{let{stdout:t}=await c("which claude",{timeout:5e3});return f=t.trim()}catch{for(let t of["/opt/homebrew/bin/claude","/usr/local/bin/claude","/usr/bin/claude"])try{return await c(`test -x "${t}"`,{timeout:1e3}),f=t}catch{}throw Error("Claude CLI not found. Set CLAUDE_PATH environment variable or install Claude CLI.")}}async function h(t,e=50){let r=await (0,n.xq)(t,{startLine:-e});return(0,a.vp)(r)}async function w(t){try{let e=(await h(t)).trim();if(""===e)return{healthy:!1,reason:"empty output"};for(let t of a.KJ)if(e.includes(t))return{healthy:!1,reason:`error pattern: ${t}`};for(let t of a.dR)if(t.test(e))return{healthy:!1,reason:`error pattern: ${t.source}`};let r=e.split("\n").filter(t=>""!==t.trim()),n=r[r.length-1]?.trim()??"";if(n.length>=40)return{healthy:!0};if(d.some(t=>!(!n.endsWith(t)||"%"===t&&/\d+%$/.test(n))))return{healthy:!1,reason:`shell prompt ending detected: ${n}`};return{healthy:!0}}catch{return{healthy:!1,reason:"capture error"}}}async function p(t){let e=await w(t);return!!e.healthy||(console.warn(`[health-check] Session ${t} unhealthy: ${e.reason}`),await (0,n.AJ)(t),!1)}async function g(t){await c("tmux set-environment -g -u CLAUDECODE 2>/dev/null || true"),await (0,n.Is)(t,"unset CLAUDECODE",!0),await new Promise(t=>setTimeout(t,100))}function y(t){return`mcbd-claude-${t}`}async function x(){try{return await c("which claude",{timeout:5e3}),!0}catch{return!1}}async function $(t){let e=y(t);return!!await (0,n.Hk)(e)&&(await w(e)).healthy}async function E(t,e=5e3){let r=Date.now();for(;Date.now()-r<e;){let e=await h(t);if(a.V7.test(e))return;await new Promise(t=>setTimeout(t,200))}throw Error(`Prompt detection timeout (${e}ms)`)}async function C(t){let{worktreeId:e,worktreePath:r}=t;if(!await x())throw Error("Claude CLI is not installed or not in PATH");let i=y(e);if(await (0,n.Hk)(i)&&await p(i)){console.log(`Claude session ${i} already exists and is healthy`);return}try{await (0,n.ed)({sessionName:i,workingDirectory:r,historyLimit:5e4}),await g(i);let t=await m();await (0,n.Is)(i,t,!0);let e=Date.now(),o=!1,s=!1;for(;Date.now()-e<15e3;){await new Promise(t=>setTimeout(t,300));try{let t=await h(i);if(a.V7.test(t)){await new Promise(t=>setTimeout(t,500)),console.log(`Claude initialized in ${Date.now()-e}ms`),o=!0;break}!s&&a.H3.test(t)&&(await (0,n.Is)(i,"",!0),s=!0,console.log("Trust dialog detected, sending Enter to confirm"))}catch{}}if(!o)throw Error("Claude initialization timeout (15000ms)");console.log(`Started Claude session: ${i}`)}catch(t){throw f=null,console.log(`[claude-session] Session start failed: ${u(t)}`),Error("Failed to start Claude session")}}async function k(t,e){let r=y(t);if(!await (0,n.Hk)(r))throw Error(`Claude session ${r} does not exist. Start the session first.`);let o=await h(r);a.V7.test(o)||await E(r,1e4),await new Promise(t=>setTimeout(t,500)),await (0,n.Is)(r,e,!1),await (0,n.Is)(r,"",!0),e.includes("\n")&&await (0,i.N)(r),console.log(`Sent message to Claude session: ${r}`)}async function I(t,e=1e3){let r=y(t);if(!await (0,n.Hk)(r))throw Error(`Claude session ${r} does not exist`);try{return await (0,n.xq)(r,{startLine:-e})}catch(t){throw Error(`Failed to capture Claude output: ${u(t)}`)}}async function D(t){let e=y(t);try{await (0,n.Hk)(e)&&(await (0,n.Is)(e,"",!1),await c(`tmux send-keys -t "${e}" C-d`),await new Promise(t=>setTimeout(t,500)));let t=await (0,n.AJ)(e);return t&&console.log(`Stopped Claude session: ${e}`),t}catch(t){return console.error(`Error stopping Claude session: ${u(t)}`),!1}}},19377:(t,e,r)=>{"use strict";r.d(e,{H3:()=>l,KJ:()=>y,Sg:()=>$,V7:()=>o,Wg:()=>w,_r:()=>f,bs:()=>function t(e){switch(e){case"claude":return{promptPattern:o,separatorPattern:s,thinkingPattern:a,skipPatterns:[/^─{10,}$/,/^[>❯]\s*$/,a,/^\s*[⎿⏋]\s+Tip:/,/^\s*Tip:/,/^\s*\?\s*for shortcuts/,/to interrupt\)/,d]};case"codex":return{promptPattern:c,separatorPattern:u,thinkingPattern:i,skipPatterns:[/^─.*─+$/,/^›\s*$/,/^›\s+(Implement|Find and fix|Type)/,i,/^\s*\d+%\s+context left/,/^\s*for shortcuts$/,/╭─+╮/,/╰─+╯/,/•\s*Ran\s+/,/^\s*└/,/^\s*│/,/\(.*esc to interrupt\)/,d]};case"gemini":return{promptPattern:h,separatorPattern:/^gemini\s+--\s+/m,thinkingPattern:/(?!)/m,skipPatterns:[/^gemini\s+--\s+/,h,/^\s*$/]};default:return t("claude")}},d8:()=>d,dR:()=>x,vp:()=>g,ww:()=>m});let n=(0,r(43895).h)("cli-patterns"),a=RegExp(`[✻✽⏺\xb7∴✢✳✶⦿◉●○◌◎⊙⊚⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏]\\s+.+…|esc to interrupt`,"m"),i=/•\s*(Planning|Searching|Exploring|Running|Thinking|Working|Reading|Writing|Analyzing|Ran|Deciding)/m,o=/^[>❯](\s*$|\s+\S)/m,s=/^─{10,}$/m,l=/Yes, I trust this folder/m,c=/^›\s*/m,u=/^─.*Worked for.*─+$/m,d=/\[Pasted text #\d+/,f=500,m=3,h=/^(%|\$|.*@.*[%$#])\s*$/m;function w(t,e){let r;let o=n.withContext({cliToolId:t});switch(o.debug("detectThinking:check",{contentLength:e.length}),t){case"claude":default:r=a.test(e);break;case"codex":r=i.test(e);break;case"gemini":r=!1}return o.debug("detectThinking:result",{isThinking:r}),r}let p=/\x1b\[[0-9;]*[a-zA-Z]|\x1b\][^\x07]*\x07|\[[0-9;]*m/g;function g(t){return t.replace(p,"")}let y=["Claude Code cannot be launched inside another Claude Code session"],x=[/Error:.*Claude/];function $(t){if("claude"===t)return{requireDefaultIndicator:!1}}},76966:(t,e,r)=>{"use strict";r.d(e,{o:()=>i});var n=r(75748),a=r(98636);async function i(t,e,r,i="claude"){let o=(0,n.vX)(t,e);if(o)try{await (0,a.xN)(e,o.content,r,i)}catch(t){console.error("[recordClaudeConversation] Failed to create log file:",t)}}},98636:(t,e,r)=>{"use strict";r.d(e,{e7:()=>f,xN:()=>d});var n=r(20629),a=r.n(n),i=r(55315),o=r.n(i),s=r(73853),l=r(98241);function c(t="claude"){return o().join((0,l.s)(),t)}async function u(t="claude"){let e=c(t);try{await a().access(e)}catch{await a().mkdir(e,{recursive:!0})}}async function d(t,e,r,n="claude"){await u(n);let i=function(t,e="claude"){let r=(0,s.WU)(new Date,"yyyy-MM-dd"),n=`${t}-${r}.md`,a=c(e);return o().join(a,n)}(t,n),l=(0,s.WU)(new Date,"yyyy-MM-dd HH:mm:ss"),d="";try{d=await a().readFile(i,"utf-8")}catch{let e="claude"===n?"Claude Code":"codex"===n?"Codex CLI":"Gemini CLI";d=`# ${e} Conversation Log: ${t}
1
+ exports.id=7566,exports.ids=[7566],exports.modules={58359:()=>{},93739:()=>{},98241:(t,e,r)=>{"use strict";r.d(e,{s:()=>o});var n=r(55315),a=r.n(n),i=r(98838);function o(){return(0,i.Hb)("CM_LOG_DIR")||a().join(process.cwd(),"data","logs")}},40824:(t,e,r)=>{"use strict";r.d(e,{HI:()=>i,pC:()=>l,Gn:()=>m,H2:()=>w,n8:()=>h,KL:()=>f,WX:()=>d});var n=r(84770),a=r.n(n);let i="cm_auth_token",o=/^[0-9a-f]{64}$/,s={maxAttempts:5,lockoutDuration:9e5,cleanupInterval:36e5},l=86400,c=(()=>{let t=process.env.CM_AUTH_TOKEN_HASH||void 0;if(t){if(!function(t){return!!t&&o.test(t)}(t)){console.error(`[Security] CM_AUTH_TOKEN_HASH is not a valid 64-character hex string (got ${t.length} chars). Authentication will be disabled.`);return}return t}})(),u=function(){let t=process.env.CM_AUTH_EXPIRE,e=Date.now();if(t)try{return e+function(t){let e=t.match(/^(\d+)([hdm])$/);if(!e)throw Error(`Invalid duration format: "${t}". Use Nh, Nd, or Nm (e.g., "24h", "7d", "90m")`);let r=parseInt(e[1],10),n=e[2],a={h:36e5,d:864e5,m:6e4}[n];if(void 0===a)throw Error(`Invalid duration unit: "${n}"`);let i=r*a;if(i<36e5)throw Error(`Duration too short: minimum is 1h (60m). Got: "${t}"`);if(i>2592e6)throw Error(`Duration too long: maximum is 30d (720h). Got: "${t}"`);return i}(t)}catch{return e+864e5}return process.env.CM_AUTH_TOKEN_HASH?e+864e5:null}();function d(t){if(!c||!t||"string"!=typeof t||null!==u&&Date.now()>u)return!1;let e=a().createHash("sha256").update(t).digest("hex"),r=Buffer.from(e,"hex"),n=Buffer.from(c,"hex");return r.length===n.length&&a().timingSafeEqual(r,n)}function f(){return!!c}function h(){if(null===u)return 0;let t=u-Date.now();return t<=0?0:Math.floor(t/1e3)}function m(t){return{httpOnly:!0,sameSite:"strict",secure:!!process.env.CM_HTTPS_CERT,maxAge:t,path:"/"}}function w(){let t=new Map,e=setInterval(()=>{let e=Date.now();for(let[r,n]of t){let a=null===n.lockedUntil||e>n.lockedUntil,i=e-n.lastAttempt>s.lockoutDuration;a&&i&&t.delete(r)}},s.cleanupInterval);return e.unref&&e.unref(),{checkLimit(e){let r=t.get(e);if(!r)return{allowed:!0};if(null!==r.lockedUntil){let t=Date.now();if(t<r.lockedUntil)return{allowed:!1,retryAfter:Math.ceil((r.lockedUntil-t)/1e3)};r.attempts=0,r.lockedUntil=null}return{allowed:!0}},recordFailure(e){let r=Date.now(),n=t.get(e)||{attempts:0,lockedUntil:null,lastAttempt:r};n.attempts++,n.lastAttempt=r,n.attempts>=s.maxAttempts&&(n.lockedUntil=r+s.lockoutDuration),t.set(e,n)},recordSuccess(e){t.delete(e)},destroy(){clearInterval(e),t.clear()}}}},89287:(t,e,r)=>{"use strict";r.d(e,{Z:()=>o});let n=/📄 Session log: (.+?\/([^\/\s]+\.jsonl))/,a=/Request ID: ([^\s\n]+)/,i=/Summary: (.+?)(?:\n─|$)/s;function o(t){let e={content:t},r=n.exec(t);r&&(e.logFileName=r[2]);let o=a.exec(t);o&&(e.requestId=o[1]);let s=i.exec(t);return s&&(e.summary=s[1].trim()),e}},62648:(t,e,r)=>{"use strict";r.d(e,{Lm:()=>I,Uv:()=>x,YI:()=>$,_f:()=>D,xd:()=>k,ym:()=>C});var n=r(10927),a=r(19377),i=r(92900),o=r(61282),s=r(21764),l=r(20629);let c=(0,s.promisify)(o.exec);function u(t){return t instanceof Error?t.message:String(t)}let d=["$","%","#"],f=null;async function h(){if(f)return f;let t=process.env.CLAUDE_PATH;if(t&&(/^[/a-zA-Z0-9._-]+$/.test(t)?!t.includes("..")||(console.log("[claude-session] CLAUDE_PATH contains path traversal sequence, ignoring"),!1):(console.log(`[claude-session] CLAUDE_PATH contains invalid characters, ignoring: ${t.substring(0,50)}`),!1)))try{return await (0,l.access)(t,l.constants.X_OK),f=t}catch{console.log(`[claude-session] CLAUDE_PATH is not executable: ${t}`)}try{let{stdout:t}=await c("which claude",{timeout:5e3});return f=t.trim()}catch{for(let t of["/opt/homebrew/bin/claude","/usr/local/bin/claude","/usr/bin/claude"])try{return await c(`test -x "${t}"`,{timeout:1e3}),f=t}catch{}throw Error("Claude CLI not found. Set CLAUDE_PATH environment variable or install Claude CLI.")}}async function m(t,e=50){let r=await (0,n.xq)(t,{startLine:-e});return(0,a.vp)(r)}async function w(t){try{let e=(await m(t)).trim();if(""===e)return{healthy:!1,reason:"empty output"};if(a.V7.test(e))return{healthy:!0};let r=e.split("\n").filter(t=>""!==t.trim()),n=r.slice(-10).join("\n");for(let t of a.KJ)if(n.includes(t))return{healthy:!1,reason:`error pattern: ${t}`};for(let t of a.dR)if(t.test(n))return{healthy:!1,reason:`error pattern: ${t.source}`};let i=r[r.length-1]?.trim()??"";if(i.length>=40)return{healthy:!0};if(d.some(t=>!(!i.endsWith(t)||"%"===t&&/\d+%$/.test(i))))return{healthy:!1,reason:`shell prompt ending detected: ${i}`};return{healthy:!0}}catch{return{healthy:!1,reason:"capture error"}}}async function p(t){let e=await w(t);return!!e.healthy||(console.warn(`[health-check] Session ${t} unhealthy: ${e.reason}`),await (0,n.AJ)(t),!1)}async function g(t){await c("tmux set-environment -g -u CLAUDECODE 2>/dev/null || true"),await (0,n.Is)(t,"unset CLAUDECODE",!0),await new Promise(t=>setTimeout(t,100))}function y(t){return`mcbd-claude-${t}`}async function x(){try{return await c("which claude",{timeout:5e3}),!0}catch{return!1}}async function $(t){let e=y(t);if(!await (0,n.Hk)(e))return!1;let r=await w(e);return!!r.healthy||(console.warn(`[isClaudeRunning] Session ${e} unhealthy: ${r.reason}`),!1)}async function E(t,e=5e3){let r=Date.now();for(;Date.now()-r<e;){let e=await m(t);if(a.V7.test(e))return;await new Promise(t=>setTimeout(t,200))}throw Error(`Prompt detection timeout (${e}ms)`)}async function C(t){let{worktreeId:e,worktreePath:r}=t;if(!await x())throw Error("Claude CLI is not installed or not in PATH");let i=y(e);if(await (0,n.Hk)(i)&&await p(i)){console.log(`Claude session ${i} already exists and is healthy`);return}try{await (0,n.ed)({sessionName:i,workingDirectory:r,historyLimit:5e4}),await g(i);let t=await h();await (0,n.Is)(i,t,!0);let e=Date.now(),o=!1,s=!1;for(;Date.now()-e<15e3;){await new Promise(t=>setTimeout(t,300));try{let t=await m(i);if(a.V7.test(t)){await new Promise(t=>setTimeout(t,500)),console.log(`Claude initialized in ${Date.now()-e}ms`),o=!0;break}!s&&a.H3.test(t)&&(await (0,n.Is)(i,"",!0),s=!0,console.log("Trust dialog detected, sending Enter to confirm"))}catch{}}if(!o)throw Error("Claude initialization timeout (15000ms)");console.log(`Started Claude session: ${i}`)}catch(t){throw f=null,console.log(`[claude-session] Session start failed: ${u(t)}`),Error("Failed to start Claude session")}}async function k(t,e){let r=y(t);if(!await (0,n.Hk)(r))throw Error(`Claude session ${r} does not exist. Start the session first.`);let o=await m(r);a.V7.test(o)||await E(r,1e4),await new Promise(t=>setTimeout(t,500)),await (0,n.Is)(r,e,!1),await (0,n.Is)(r,"",!0),e.includes("\n")&&await (0,i.N)(r),console.log(`Sent message to Claude session: ${r}`)}async function I(t,e=1e3){let r=y(t);if(!await (0,n.Hk)(r))throw Error(`Claude session ${r} does not exist`);try{return await (0,n.xq)(r,{startLine:-e})}catch(t){throw Error(`Failed to capture Claude output: ${u(t)}`)}}async function D(t){let e=y(t);try{await (0,n.Hk)(e)&&(await (0,n.Is)(e,"",!1),await c(`tmux send-keys -t "${e}" C-d`),await new Promise(t=>setTimeout(t,500)));let t=await (0,n.AJ)(e);return t&&console.log(`Stopped Claude session: ${e}`),t}catch(t){return console.error(`Error stopping Claude session: ${u(t)}`),!1}}},19377:(t,e,r)=>{"use strict";r.d(e,{H3:()=>l,KJ:()=>y,Sg:()=>$,V7:()=>o,Wg:()=>w,_r:()=>f,bs:()=>function t(e){switch(e){case"claude":return{promptPattern:o,separatorPattern:s,thinkingPattern:a,skipPatterns:[/^─{10,}$/,/^[>❯]\s*$/,a,/^\s*[⎿⏋]\s+Tip:/,/^\s*Tip:/,/^\s*\?\s*for shortcuts/,/to interrupt\)/,d]};case"codex":return{promptPattern:c,separatorPattern:u,thinkingPattern:i,skipPatterns:[/^─.*─+$/,/^›\s*$/,/^›\s+(Implement|Find and fix|Type)/,i,/^\s*\d+%\s+context left/,/^\s*for shortcuts$/,/╭─+╮/,/╰─+╯/,/•\s*Ran\s+/,/^\s*└/,/^\s*│/,/\(.*esc to interrupt\)/,d]};case"gemini":return{promptPattern:m,separatorPattern:/^gemini\s+--\s+/m,thinkingPattern:/(?!)/m,skipPatterns:[/^gemini\s+--\s+/,m,/^\s*$/]};default:return t("claude")}},d8:()=>d,dR:()=>x,vp:()=>g,ww:()=>h});let n=(0,r(43895).h)("cli-patterns"),a=RegExp(`[✻✽⏺\xb7∴✢✳✶⦿◉●○◌◎⊙⊚⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏]\\s+.+…|esc to interrupt`,"m"),i=/•\s*(Planning|Searching|Exploring|Running|Thinking|Working|Reading|Writing|Analyzing|Ran|Deciding)/m,o=/^[>❯](\s*$|\s+\S)/m,s=/^─{10,}$/m,l=/Yes, I trust this folder/m,c=/^›\s*/m,u=/^─.*Worked for.*─+$/m,d=/\[Pasted text #\d+/,f=500,h=3,m=/^(%|\$|.*@.*[%$#])\s*$/m;function w(t,e){let r;let o=n.withContext({cliToolId:t});switch(o.debug("detectThinking:check",{contentLength:e.length}),t){case"claude":default:r=a.test(e);break;case"codex":r=i.test(e);break;case"gemini":r=!1}return o.debug("detectThinking:result",{isThinking:r}),r}let p=/\x1b\[[0-9;]*[a-zA-Z]|\x1b\][^\x07]*\x07|\[[0-9;]*m/g;function g(t){return t.replace(p,"")}let y=["Claude Code cannot be launched inside another Claude Code session"],x=[/^Error:.*Claude Code/];function $(t){if("claude"===t)return{requireDefaultIndicator:!1}}},76966:(t,e,r)=>{"use strict";r.d(e,{o:()=>i});var n=r(75748),a=r(98636);async function i(t,e,r,i="claude"){let o=(0,n.vX)(t,e);if(o)try{await (0,a.xN)(e,o.content,r,i)}catch(t){console.error("[recordClaudeConversation] Failed to create log file:",t)}}},98636:(t,e,r)=>{"use strict";r.d(e,{e7:()=>f,xN:()=>d});var n=r(20629),a=r.n(n),i=r(55315),o=r.n(i),s=r(73853),l=r(98241);function c(t="claude"){return o().join((0,l.s)(),t)}async function u(t="claude"){let e=c(t);try{await a().access(e)}catch{await a().mkdir(e,{recursive:!0})}}async function d(t,e,r,n="claude"){await u(n);let i=function(t,e="claude"){let r=(0,s.WU)(new Date,"yyyy-MM-dd"),n=`${t}-${r}.md`,a=c(e);return o().join(a,n)}(t,n),l=(0,s.WU)(new Date,"yyyy-MM-dd HH:mm:ss"),d="";try{d=await a().readFile(i,"utf-8")}catch{let e="claude"===n?"Claude Code":"codex"===n?"Codex CLI":"Gemini CLI";d=`# ${e} Conversation Log: ${t}
2
2
 
3
3
  Created: ${l}
4
4
 
@@ -16,4 +16,4 @@ ${r}
16
16
 
17
17
  ---
18
18
 
19
- `,await a().writeFile(i,d,"utf-8"),i}async function f(t,e="all"){let r=[];for(let n of"all"===e?["claude","codex","gemini"]:[e]){await u(n);let e=c(n);try{let n=(await a().readdir(e)).filter(e=>e.startsWith(`${t}-`)&&e.endsWith(".md")).map(t=>o().join(e,t));r.push(...n)}catch{}}return r.sort().reverse()}},43895:(t,e,r)=>{"use strict";r.d(e,{Y:()=>l,h:()=>c});var n=r(98838);let a=[{pattern:/Bearer\s+[A-Za-z0-9\-._~+/]+=*/gi,replacement:"Bearer [REDACTED]"},{pattern:/(password|passwd|pwd)[=:]\s*\S+/gi,replacement:"$1=[REDACTED]"},{pattern:/(token|secret|api_key|apikey|auth)[=:]\s*\S+/gi,replacement:"$1=[REDACTED]"},{pattern:/Authorization:\s*\S+/gi,replacement:"Authorization: [REDACTED]"},{pattern:/-----BEGIN\s+\w+\s+PRIVATE\s+KEY-----[\s\S]*?-----END\s+\w+\s+PRIVATE\s+KEY-----/g,replacement:"[SSH_KEY_REDACTED]"}],i=/password|secret|token|key|auth/i,o={debug:0,info:1,warn:2,error:3};function s(t,e,r,s,l){let c=(0,n.LI)().level;if(o[t]<o[c])return;let u=s?function t(e){if("string"==typeof e){let t=e;for(let{pattern:e,replacement:r}of a)t=t.replace(e,r);return t}if("object"==typeof e&&null!==e){if(Array.isArray(e))return e.map(t);let r={};for(let[n,a]of Object.entries(e))i.test(n)?r[n]="[REDACTED]":r[n]=t(a);return r}return e}(s):void 0,d=function(t){if("json"===(0,n.LI)().format)return JSON.stringify(t);let{timestamp:e,level:r,module:a,action:i,data:o,worktreeId:s,cliToolId:l,requestId:c}=t,u=[s,l].filter(Boolean),d=u.length>0?` [${u.join(":")}]`:"",f=c?` (${c.slice(0,8)})`:"",m=o?` ${JSON.stringify(o)}`:"";return`[${e}] [${r.toUpperCase()}] [${a}]${d}${f} ${i}${m}`}({level:t,module:e,action:r,timestamp:new Date().toISOString(),...l,...u&&{data:u}});switch(t){case"error":console.error(d);break;case"warn":console.warn(d);break;default:console.log(d)}}function l(){return"undefined"!=typeof crypto&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,t=>{let e=16*Math.random()|0;return("x"===t?e:3&e|8).toString(16)})}function c(t){let e=r=>({debug:(e,n)=>s("debug",t,e,n,r),info:(e,n)=>s("info",t,e,n,r),warn:(e,n)=>s("warn",t,e,n,r),error:(e,n)=>s("error",t,e,n,r),withContext:t=>e({...r,...t})});return e()}},92900:(t,e,r)=>{"use strict";r.d(e,{N:()=>o});var n=r(10927),a=r(19377);let i=(0,r(43895).h)("pasted-text");async function o(t){for(let e=0;e<a.ww;e++){await new Promise(t=>setTimeout(t,a._r));let r=await (0,n.xq)(t,{startLine:-10});if(!a.d8.test((0,a.vp)(r)))return;await (0,n.Is)(t,"",!0),e===a.ww-1&&i.warn("Pasted text detection: max retries reached",{sessionName:t,maxRetries:a.ww,finalAttempt:e})}}},10927:(t,e,r)=>{"use strict";r.d(e,{AJ:()=>d,Hk:()=>i,Is:()=>s,ZV:()=>f,ed:()=>o,hL:()=>c,xq:()=>u});var n=r(61282);let a=(0,r(21764).promisify)(n.exec);async function i(t){try{return await a(`tmux has-session -t "${t}"`,{timeout:5e3}),!0}catch{return!1}}async function o(t,e){let r,n,i;"string"==typeof t?(r=t,n=e,i=5e4):(r=t.sessionName,n=t.workingDirectory,i=t.historyLimit||5e4);try{await a(`tmux new-session -d -s "${r}" -c "${n}"`,{timeout:5e3}),await a(`tmux set-option -t "${r}" history-limit ${i}`,{timeout:5e3})}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to create tmux session: ${t}`)}}async function s(t,e,r=!0){let n=e.replace(/'/g,"'\\''"),i=r?`tmux send-keys -t "${t}" '${n}' C-m`:`tmux send-keys -t "${t}" '${n}'`;try{await a(i,{timeout:5e3})}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to send keys to tmux session: ${t}`)}}let l=new Set(["Up","Down","Left","Right","Enter","Space","Tab","Escape","BSpace","DC"]);async function c(t,e){if(0!==e.length){for(let t of e)if(!l.has(t))throw Error(`Invalid special key: ${t}`);try{for(let r=0;r<e.length;r++){let n=`tmux send-keys -t "${t}" ${e[r]}`;await a(n,{timeout:5e3}),r<e.length-1&&await new Promise(t=>setTimeout(t,100))}}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to send special keys to tmux session: ${t}`)}}}async function u(t,e){let r,n;"number"==typeof e?(r=-e,n="-"):e?(r=e.startLine??-1e4,n=e.endLine??"-"):(r=-1e3,n="-");try{let{stdout:e}=await a(`tmux capture-pane -t "${t}" -p -e -S ${r} -E ${n}`,{timeout:5e3,maxBuffer:10485760});return e}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to capture pane: ${t}`)}}async function d(t){try{return await a(`tmux kill-session -t "${t}"`,{timeout:5e3}),!0}catch(e){let t=e instanceof Error?e.message:String(e);if(t?.includes("no server running")||t?.includes("can't find session"))return!1;throw Error(`Failed to kill tmux session: ${t}`)}}async function f(t,e){try{await a(`tmux send-keys -t "${t}" ${e}`,{timeout:5e3})}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to send special key: ${t}`)}}},68507:(t,e,r)=>{"use strict";r.d(e,{fM:()=>d,ps:()=>f,ZV:()=>m});var n=r(34893);r(40824);let a=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/,i=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\/(\d{1,2})$/,o=process.env.CM_ALLOWED_IPS?.trim()||"",s=process.env.CM_TRUST_PROXY?.trim()||"";""!==s&&"true"!==s&&"false"!==s&&console.warn(`[IP-RESTRICTION] CM_TRUST_PROXY has unexpected value: "${s}". Only "true" (lowercase) enables proxy trust.`),o.length>0&&function(t){let e=t.trim();if(0===e.length)return;let r=e.split(",").map(t=>t.trim()).filter(t=>t.length>0);if(r.length>256)throw Error(`CM_ALLOWED_IPS: too many entries (${r.length}). Maximum is 256.`);let n=[];for(let t of r){if(t.length>18)throw Error(`CM_ALLOWED_IPS: entry "${t}" exceeds maximum length of 18 characters.`);let e=t.match(i);if(e){let r=[parseInt(e[1],10),parseInt(e[2],10),parseInt(e[3],10),parseInt(e[4],10)],a=parseInt(e[5],10);for(let e of r)if(e<0||e>255)throw Error(`CM_ALLOWED_IPS: invalid octet in "${t}". Octets must be 0-255.`);if(a<0||a>32)throw Error(`CM_ALLOWED_IPS: invalid prefix length in "${t}". Must be 0-32.`);let i=(r[0]<<24|r[1]<<16|r[2]<<8|r[3])>>>0,o=0===a?0:4294967295<<32-a>>>0;n.push({network:(i&o)>>>0,mask:o});continue}let r=t.match(a);if(r){let e=[parseInt(r[1],10),parseInt(r[2],10),parseInt(r[3],10),parseInt(r[4],10)];for(let r of e)if(r<0||r>255)throw Error(`CM_ALLOWED_IPS: invalid octet in "${t}". Octets must be 0-255.`);let a=(e[0]<<24|e[1]<<16|e[2]<<8|e[3])>>>0;n.push({network:a,mask:4294967295});continue}throw Error(`CM_ALLOWED_IPS: invalid entry "${t}". Expected IPv4 address or CIDR notation.`)}}(o);let l=new Map,c=new Map;function u(t,e){let r=c.get(t);if(r&&0!==r.size)try{let a=JSON.stringify({type:"broadcast",worktreeId:t,data:e});r.forEach(t=>{if(t.readyState===n.XY.OPEN)try{t.send(a)}catch(t){console.error("Error sending WebSocket message to client:",t)}})}catch(e){console.error(`Error broadcasting to worktree ${t}:`,e);try{let e=JSON.stringify({type:"broadcast",worktreeId:t,data:{error:"Message encoding error"}});r.forEach(t=>{if(t.readyState===n.XY.OPEN)try{t.send(e)}catch{}})}catch(t){console.error("Failed to send fallback message:",t)}}}function d(t,e){u(t,e)}function f(t,e){e.worktreeId?u(e.worktreeId,{type:t,...e}):console.warn("broadcastMessage called without worktreeId")}function m(t){for(let e of t){let t=c.get(e);t&&(t.forEach(t=>{let r=l.get(t);r&&r.worktreeIds.delete(e)}),c.delete(e))}}}};
19
+ `,await a().writeFile(i,d,"utf-8"),i}async function f(t,e="all"){let r=[];for(let n of"all"===e?["claude","codex","gemini"]:[e]){await u(n);let e=c(n);try{let n=(await a().readdir(e)).filter(e=>e.startsWith(`${t}-`)&&e.endsWith(".md")).map(t=>o().join(e,t));r.push(...n)}catch{}}return r.sort().reverse()}},43895:(t,e,r)=>{"use strict";r.d(e,{Y:()=>l,h:()=>c});var n=r(98838);let a=[{pattern:/Bearer\s+[A-Za-z0-9\-._~+/]+=*/gi,replacement:"Bearer [REDACTED]"},{pattern:/(password|passwd|pwd)[=:]\s*\S+/gi,replacement:"$1=[REDACTED]"},{pattern:/(token|secret|api_key|apikey|auth)[=:]\s*\S+/gi,replacement:"$1=[REDACTED]"},{pattern:/Authorization:\s*\S+/gi,replacement:"Authorization: [REDACTED]"},{pattern:/-----BEGIN\s+\w+\s+PRIVATE\s+KEY-----[\s\S]*?-----END\s+\w+\s+PRIVATE\s+KEY-----/g,replacement:"[SSH_KEY_REDACTED]"}],i=/password|secret|token|key|auth/i,o={debug:0,info:1,warn:2,error:3};function s(t,e,r,s,l){let c=(0,n.LI)().level;if(o[t]<o[c])return;let u=s?function t(e){if("string"==typeof e){let t=e;for(let{pattern:e,replacement:r}of a)t=t.replace(e,r);return t}if("object"==typeof e&&null!==e){if(Array.isArray(e))return e.map(t);let r={};for(let[n,a]of Object.entries(e))i.test(n)?r[n]="[REDACTED]":r[n]=t(a);return r}return e}(s):void 0,d=function(t){if("json"===(0,n.LI)().format)return JSON.stringify(t);let{timestamp:e,level:r,module:a,action:i,data:o,worktreeId:s,cliToolId:l,requestId:c}=t,u=[s,l].filter(Boolean),d=u.length>0?` [${u.join(":")}]`:"",f=c?` (${c.slice(0,8)})`:"",h=o?` ${JSON.stringify(o)}`:"";return`[${e}] [${r.toUpperCase()}] [${a}]${d}${f} ${i}${h}`}({level:t,module:e,action:r,timestamp:new Date().toISOString(),...l,...u&&{data:u}});switch(t){case"error":console.error(d);break;case"warn":console.warn(d);break;default:console.log(d)}}function l(){return"undefined"!=typeof crypto&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,t=>{let e=16*Math.random()|0;return("x"===t?e:3&e|8).toString(16)})}function c(t){let e=r=>({debug:(e,n)=>s("debug",t,e,n,r),info:(e,n)=>s("info",t,e,n,r),warn:(e,n)=>s("warn",t,e,n,r),error:(e,n)=>s("error",t,e,n,r),withContext:t=>e({...r,...t})});return e()}},92900:(t,e,r)=>{"use strict";r.d(e,{N:()=>o});var n=r(10927),a=r(19377);let i=(0,r(43895).h)("pasted-text");async function o(t){for(let e=0;e<a.ww;e++){await new Promise(t=>setTimeout(t,a._r));let r=await (0,n.xq)(t,{startLine:-10});if(!a.d8.test((0,a.vp)(r)))return;await (0,n.Is)(t,"",!0),e===a.ww-1&&i.warn("Pasted text detection: max retries reached",{sessionName:t,maxRetries:a.ww,finalAttempt:e})}}},10927:(t,e,r)=>{"use strict";r.d(e,{AJ:()=>d,Hk:()=>i,Is:()=>s,ZV:()=>f,ed:()=>o,hL:()=>c,xq:()=>u});var n=r(61282);let a=(0,r(21764).promisify)(n.exec);async function i(t){try{return await a(`tmux has-session -t "${t}"`,{timeout:5e3}),!0}catch{return!1}}async function o(t,e){let r,n,i;"string"==typeof t?(r=t,n=e,i=5e4):(r=t.sessionName,n=t.workingDirectory,i=t.historyLimit||5e4);try{await a(`tmux new-session -d -s "${r}" -c "${n}"`,{timeout:5e3}),await a(`tmux set-option -t "${r}" history-limit ${i}`,{timeout:5e3})}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to create tmux session: ${t}`)}}async function s(t,e,r=!0){let n=e.replace(/'/g,"'\\''"),i=r?`tmux send-keys -t "${t}" '${n}' C-m`:`tmux send-keys -t "${t}" '${n}'`;try{await a(i,{timeout:5e3})}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to send keys to tmux session: ${t}`)}}let l=new Set(["Up","Down","Left","Right","Enter","Space","Tab","Escape","BSpace","DC"]);async function c(t,e){if(0!==e.length){for(let t of e)if(!l.has(t))throw Error(`Invalid special key: ${t}`);try{for(let r=0;r<e.length;r++){let n=`tmux send-keys -t "${t}" ${e[r]}`;await a(n,{timeout:5e3}),r<e.length-1&&await new Promise(t=>setTimeout(t,100))}}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to send special keys to tmux session: ${t}`)}}}async function u(t,e){let r,n;"number"==typeof e?(r=-e,n="-"):e?(r=e.startLine??-1e4,n=e.endLine??"-"):(r=-1e3,n="-");try{let{stdout:e}=await a(`tmux capture-pane -t "${t}" -p -e -S ${r} -E ${n}`,{timeout:5e3,maxBuffer:10485760});return e}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to capture pane: ${t}`)}}async function d(t){try{return await a(`tmux kill-session -t "${t}"`,{timeout:5e3}),!0}catch(e){let t=e instanceof Error?e.message:String(e);if(t?.includes("no server running")||t?.includes("can't find session"))return!1;throw Error(`Failed to kill tmux session: ${t}`)}}async function f(t,e){try{await a(`tmux send-keys -t "${t}" ${e}`,{timeout:5e3})}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to send special key: ${t}`)}}},68507:(t,e,r)=>{"use strict";r.d(e,{fM:()=>d,ps:()=>f,ZV:()=>h});var n=r(34893);r(40824);let a=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/,i=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\/(\d{1,2})$/,o=process.env.CM_ALLOWED_IPS?.trim()||"",s=process.env.CM_TRUST_PROXY?.trim()||"";""!==s&&"true"!==s&&"false"!==s&&console.warn(`[IP-RESTRICTION] CM_TRUST_PROXY has unexpected value: "${s}". Only "true" (lowercase) enables proxy trust.`),o.length>0&&function(t){let e=t.trim();if(0===e.length)return;let r=e.split(",").map(t=>t.trim()).filter(t=>t.length>0);if(r.length>256)throw Error(`CM_ALLOWED_IPS: too many entries (${r.length}). Maximum is 256.`);let n=[];for(let t of r){if(t.length>18)throw Error(`CM_ALLOWED_IPS: entry "${t}" exceeds maximum length of 18 characters.`);let e=t.match(i);if(e){let r=[parseInt(e[1],10),parseInt(e[2],10),parseInt(e[3],10),parseInt(e[4],10)],a=parseInt(e[5],10);for(let e of r)if(e<0||e>255)throw Error(`CM_ALLOWED_IPS: invalid octet in "${t}". Octets must be 0-255.`);if(a<0||a>32)throw Error(`CM_ALLOWED_IPS: invalid prefix length in "${t}". Must be 0-32.`);let i=(r[0]<<24|r[1]<<16|r[2]<<8|r[3])>>>0,o=0===a?0:4294967295<<32-a>>>0;n.push({network:(i&o)>>>0,mask:o});continue}let r=t.match(a);if(r){let e=[parseInt(r[1],10),parseInt(r[2],10),parseInt(r[3],10),parseInt(r[4],10)];for(let r of e)if(r<0||r>255)throw Error(`CM_ALLOWED_IPS: invalid octet in "${t}". Octets must be 0-255.`);let a=(e[0]<<24|e[1]<<16|e[2]<<8|e[3])>>>0;n.push({network:a,mask:4294967295});continue}throw Error(`CM_ALLOWED_IPS: invalid entry "${t}". Expected IPv4 address or CIDR notation.`)}}(o);let l=new Map,c=new Map;function u(t,e){let r=c.get(t);if(r&&0!==r.size)try{let a=JSON.stringify({type:"broadcast",worktreeId:t,data:e});r.forEach(t=>{if(t.readyState===n.XY.OPEN)try{t.send(a)}catch(t){console.error("Error sending WebSocket message to client:",t)}})}catch(e){console.error(`Error broadcasting to worktree ${t}:`,e);try{let e=JSON.stringify({type:"broadcast",worktreeId:t,data:{error:"Message encoding error"}});r.forEach(t=>{if(t.readyState===n.XY.OPEN)try{t.send(e)}catch{}})}catch(t){console.error("Failed to send fallback message:",t)}}}function d(t,e){u(t,e)}function f(t,e){e.worktreeId?u(e.worktreeId,{type:t,...e}):console.warn("broadcastMessage called without worktreeId")}function h(t){for(let e of t){let t=c.get(e);t&&(t.forEach(t=>{let r=l.get(t);r&&r.worktreeIds.delete(e)}),c.delete(e))}}}};
@@ -1 +1 @@
1
- {"version":1,"functions":{"/api/app/update-check":{},"/api/auth/status":{},"/api/external-apps/[id]/health":{},"/api/external-apps/[id]":{},"/api/external-apps":{},"/api/worktrees/[id]/logs/[filename]":{},"/api/worktrees/[id]/logs":{},"/api/worktrees":{},"/proxy/[...path]":{}}}
1
+ {"version":1,"functions":{"/api/app/update-check":{},"/api/auth/status":{},"/api/external-apps/[id]/health":{},"/api/external-apps/[id]":{},"/api/external-apps":{},"/api/worktrees/[id]/logs":{},"/api/worktrees/[id]/logs/[filename]":{},"/api/worktrees":{},"/proxy/[...path]":{}}}
@@ -17,11 +17,11 @@
17
17
  "wasm": [],
18
18
  "assets": [],
19
19
  "env": {
20
- "__NEXT_BUILD_ID": "clTo9tuAoPMLcGRuVENfO",
21
- "NEXT_SERVER_ACTIONS_ENCRYPTION_KEY": "AWVb7V/3o2X1MrEvNavRJhSme6g/3SCY8LMqww+zHi8=",
22
- "__NEXT_PREVIEW_MODE_ID": "10138fc5f5c91355346040110bdc60b6",
23
- "__NEXT_PREVIEW_MODE_ENCRYPTION_KEY": "b42f9aae64e222ed6abbe18b5a174e867da8c6e86c26d7fec58dd6b345f152b2",
24
- "__NEXT_PREVIEW_MODE_SIGNING_KEY": "4fba69e87eb230197da454564aa10aa66600c6b51615352dbafdb13c1ee03e1e"
20
+ "__NEXT_BUILD_ID": "hmAjbCPjxX_C0Os7rphI1",
21
+ "NEXT_SERVER_ACTIONS_ENCRYPTION_KEY": "EaV4fJ/hDP0joVWDwvTzr9tL4GizY0A+7a/76DL0fx4=",
22
+ "__NEXT_PREVIEW_MODE_ID": "fb1af1b4367bd359407472c65483df5e",
23
+ "__NEXT_PREVIEW_MODE_ENCRYPTION_KEY": "ce074549453eeb345992efb80361b1bd6a3c6c921fcd71a7f25c23b37a9a9e7f",
24
+ "__NEXT_PREVIEW_MODE_SIGNING_KEY": "b181896994d49a969c29351bc3c76dbdefc99fc1970853d77a8ec3074c6b9c79"
25
25
  }
26
26
  }
27
27
  },
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>500: Internal Server Error</title><meta name="next-head-count" content="3"/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-3c0ee3ce5b546818.js" defer=""></script><script src="/_next/static/chunks/framework-8e0e0f4a6b83a956.js" defer=""></script><script src="/_next/static/chunks/main-db79434ee4a6c931.js" defer=""></script><script src="/_next/static/chunks/pages/_app-3c9ca398d360b709.js" defer=""></script><script src="/_next/static/chunks/pages/_error-cf5ca766ac8f493f.js" defer=""></script><script src="/_next/static/clTo9tuAoPMLcGRuVENfO/_buildManifest.js" defer=""></script><script src="/_next/static/clTo9tuAoPMLcGRuVENfO/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"clTo9tuAoPMLcGRuVENfO","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>500: Internal Server Error</title><meta name="next-head-count" content="3"/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-3c0ee3ce5b546818.js" defer=""></script><script src="/_next/static/chunks/framework-8e0e0f4a6b83a956.js" defer=""></script><script src="/_next/static/chunks/main-db79434ee4a6c931.js" defer=""></script><script src="/_next/static/chunks/pages/_app-3c9ca398d360b709.js" defer=""></script><script src="/_next/static/chunks/pages/_error-cf5ca766ac8f493f.js" defer=""></script><script src="/_next/static/hmAjbCPjxX_C0Os7rphI1/_buildManifest.js" defer=""></script><script src="/_next/static/hmAjbCPjxX_C0Os7rphI1/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"hmAjbCPjxX_C0Os7rphI1","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- {"node":{},"edge":{},"encryptionKey":"AWVb7V/3o2X1MrEvNavRJhSme6g/3SCY8LMqww+zHi8="}
1
+ {"node":{},"edge":{},"encryptionKey":"EaV4fJ/hDP0joVWDwvTzr9tL4GizY0A+7a/76DL0fx4="}