cuelo 0.9.3 → 0.9.5

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 (116) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +6 -6
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/required-server-files.js +2 -2
  6. package/.next/required-server-files.json +2 -2
  7. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/_global-error.html +1 -1
  9. package/.next/server/app/_global-error.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  17. package/.next/server/app/_not-found.html +1 -1
  18. package/.next/server/app/_not-found.rsc +2 -2
  19. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  20. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  22. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  23. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  24. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  25. package/.next/server/app/api/agent/[id]/account/route.js +1 -1
  26. package/.next/server/app/api/agent/[id]/events/route.js +1 -1
  27. package/.next/server/app/api/agent/[id]/route.js +1 -1
  28. package/.next/server/app/api/agent/new/route.js +1 -1
  29. package/.next/server/app/api/agent/running/route.js +1 -1
  30. package/.next/server/app/api/attachments/[id]/transcription/route.js +1 -1
  31. package/.next/server/app/api/gpt6/handles/route.js +1 -1
  32. package/.next/server/app/api/gpt6/reply/route.js +1 -1
  33. package/.next/server/app/api/gpt6/token/route.js +1 -1
  34. package/.next/server/app/api/gpt6/web6-session/route.js +1 -1
  35. package/.next/server/app/api/live/call/[callId]/route.js +1 -1
  36. package/.next/server/app/api/live/events/route.js +1 -1
  37. package/.next/server/app/api/live/offer/route.js +1 -1
  38. package/.next/server/app/api/live/voices/route.js +1 -1
  39. package/.next/server/app/api/lounge/events/route.js +1 -1
  40. package/.next/server/app/api/lounge/route.js +1 -1
  41. package/.next/server/app/api/project-trust/route.js +1 -1
  42. package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
  43. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  44. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  45. package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
  46. package/.next/server/app/api/sessions/route.js +1 -1
  47. package/.next/server/app/api/tool-image/route.js +1 -1
  48. package/.next/server/app/api/update-maintenance/route.js +59 -21
  49. package/.next/server/app/api/updates/route.js +1 -1
  50. package/.next/server/app/index.html +1 -1
  51. package/.next/server/app/index.rsc +4 -4
  52. package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  53. package/.next/server/app/index.segments/_full.segment.rsc +4 -4
  54. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  55. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  56. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  57. package/.next/server/app/office/page_client-reference-manifest.js +1 -1
  58. package/.next/server/app/office-preview/page_client-reference-manifest.js +1 -1
  59. package/.next/server/app/office-preview.html +1 -1
  60. package/.next/server/app/office-preview.rsc +2 -2
  61. package/.next/server/app/office-preview.segments/_full.segment.rsc +2 -2
  62. package/.next/server/app/office-preview.segments/_head.segment.rsc +1 -1
  63. package/.next/server/app/office-preview.segments/_index.segment.rsc +2 -2
  64. package/.next/server/app/office-preview.segments/_tree.segment.rsc +1 -1
  65. package/.next/server/app/office-preview.segments/office-preview/__PAGE__.segment.rsc +1 -1
  66. package/.next/server/app/office-preview.segments/office-preview.segment.rsc +1 -1
  67. package/.next/server/app/office.html +1 -1
  68. package/.next/server/app/office.rsc +4 -4
  69. package/.next/server/app/office.segments/_full.segment.rsc +4 -4
  70. package/.next/server/app/office.segments/_head.segment.rsc +1 -1
  71. package/.next/server/app/office.segments/_index.segment.rsc +2 -2
  72. package/.next/server/app/office.segments/_tree.segment.rsc +1 -1
  73. package/.next/server/app/office.segments/office/__PAGE__.segment.rsc +3 -3
  74. package/.next/server/app/office.segments/office.segment.rsc +1 -1
  75. package/.next/server/app/page_client-reference-manifest.js +1 -1
  76. package/.next/server/app/recover/page_client-reference-manifest.js +1 -1
  77. package/.next/server/app/recover.html +1 -1
  78. package/.next/server/app/recover.rsc +2 -2
  79. package/.next/server/app/recover.segments/_full.segment.rsc +2 -2
  80. package/.next/server/app/recover.segments/_head.segment.rsc +1 -1
  81. package/.next/server/app/recover.segments/_index.segment.rsc +2 -2
  82. package/.next/server/app/recover.segments/_tree.segment.rsc +1 -1
  83. package/.next/server/app/recover.segments/recover/__PAGE__.segment.rsc +1 -1
  84. package/.next/server/app/recover.segments/recover.segment.rsc +1 -1
  85. package/.next/server/app-paths-manifest.json +6 -6
  86. package/.next/server/chunks/1008.js +15 -0
  87. package/.next/server/chunks/5489.js +4 -4
  88. package/.next/server/chunks/5582.js +1 -1
  89. package/.next/server/chunks/6429.js +6 -6
  90. package/.next/server/chunks/7121.js +4 -1
  91. package/.next/server/chunks/7362.js +1 -1
  92. package/.next/server/instrumentation.js +1 -1
  93. package/.next/server/instrumentation.js.nft.json +1 -1
  94. package/.next/server/middleware-build-manifest.js +1 -1
  95. package/.next/server/pages/404.html +1 -1
  96. package/.next/server/pages/500.html +1 -1
  97. package/.next/server/server-reference-manifest.json +1 -1
  98. package/.next/static/chunks/6110-004be57c825af4d9.js +1 -0
  99. package/.next/static/chunks/{9575-0a61510a174f6087.js → 9575-9eb94dc1e8bcd130.js} +4 -4
  100. package/.next/static/chunks/app/{layout-db3a3e6c0fb3dfb8.js → layout-890e772919e033dc.js} +1 -1
  101. package/.next/trace +108 -108
  102. package/.next/trace-build +1 -1
  103. package/README.md +8 -4
  104. package/Tools/CUELO_Setup/files/btw-server.js +3 -0
  105. package/Tools/CUELO_Setup/files/native-runtime-patch.js +3 -3
  106. package/Tools/OMP_Global_Config/agent/extensions/command-guard/task-guard.ts +35 -14
  107. package/Tools/OMP_Global_Config/agent/extensions/lib/maker-routing.ts +31 -14
  108. package/Tools/OMP_Global_Config/agent/extensions/lib/prepared-task.ts +4 -3
  109. package/Tools/OMP_Global_Config/agent/rules/harness-policy.json +1 -1
  110. package/Tools/OMP_Global_Config/agent/rules/subagent.md +7 -2
  111. package/Tools/OMP_Global_Config/agent/rules/task-guard.md +1 -0
  112. package/Tools/OMP_Global_Config/patches/apply-core-patch.mjs +196 -162
  113. package/package.json +7 -7
  114. package/.next/static/chunks/6110-691c0f77641fc07e.js +0 -1
  115. /package/.next/static/{2K1doMCGVHZR9NtZw8xYc → b4yL-hhdDIhd8tZ_DFHIS}/_buildManifest.js +0 -0
  116. /package/.next/static/{2K1doMCGVHZR9NtZw8xYc → b4yL-hhdDIhd8tZ_DFHIS}/_ssgManifest.js +0 -0
@@ -11,4 +11,4 @@ ${a.summary}`,timestamp:N(a.timestamp)};case"custom_message":if(a.customType===r
11
11
 
12
12
  경로는 loopback shim이고 상담은 조언이다 — 분할\xb7진단\xb7판정은 그대로 Main이 소유한다.
13
13
  shim이 응답하지 않으면 막지 말고 기존 경로로 진행한 뒤 상담 없이 판정했음을 남긴다.`}class i extends Error{constructor(a,b){super(b),this.name="Gpt6Error",this.code=a}}function j(a){switch(a){case"unknown_handle":case"session_not_found":return 404;case"invalid_token":return 401;case"store_conflict":return 409;case"invalid_argument":return 400;default:return 500}}function k(a,b){if("string"!=typeof a||""===a.trim())throw new i("invalid_argument",`${b}는 비어 있지 않은 문자열이어야 합니다.`);return a.trim()}let l=/^[0-9a-f]{64}$/;function m(a){return(0,d.createHash)("sha256").update(a,"utf8").digest("hex")}function n(a,b){if(""===a||!l.test(b))return!1;let c=(0,d.createHash)("sha256").update(a,"utf8").digest(),e=Buffer.from(b,"hex");return e.length===c.length&&(0,d.timingSafeEqual)(c,e)}function o(a){let b,c=null;function d(){return{schemaVersion:2,revision:0,tokenHash:"",handles:{}}}function g(){let e=a.readStore();if(null!==c&&e===b)return c;let f=function(a){let b;if(null===a||""===a.trim())return d();try{b=JSON.parse(a)}catch{throw new i("store_unreadable","핸들 저장소(gpt6-handles.json)를 JSON으로 읽을 수 없습니다.")}if(!b||"object"!=typeof b||Array.isArray(b))throw new i("store_unreadable","핸들 저장소(gpt6-handles.json)의 형식이 올바르지 않습니다.");let c=b;if(2!==c.schemaVersion)return d();let e={};if(c.handles&&"object"==typeof c.handles)for(let[a,b]of Object.entries(c.handles)){if(b&&"object"==typeof b)"string"==typeof b.sessionId&&"string"==typeof b.cwd&&"string"==typeof b.handleKeyHash&&l.test(b.handleKeyHash)&&(e[a]={handle:"string"==typeof b.handle?b.handle:a,cwd:b.cwd,sessionId:b.sessionId,instruction:"string"==typeof b.instruction?b.instruction:"",createdAt:"string"==typeof b.createdAt?b.createdAt:new Date(0).toISOString(),expiresAt:"string"==typeof b.expiresAt?b.expiresAt:new Date(0).toISOString(),revokedAt:"string"==typeof b.revokedAt?b.revokedAt:null,..."string"==typeof b.web6RequestId&&""!==b.web6RequestId.trim()?{web6RequestId:b.web6RequestId.trim()}:{},handleKeyHash:b.handleKeyHash})}return{schemaVersion:2,revision:"number"==typeof c.revision?c.revision:0,tokenHash:"string"==typeof c.tokenHash&&l.test(c.tokenHash)?c.tokenHash:"",handles:e}}(e);return b=e,c=f,f}function h(a){return Date.parse(a.revokedAt??a.expiresAt)}function j(a,b){return h(a)>b-864e5}function o(b){for(let c=0;c<2;c+=1){let c=g(),d=b(c);if(!function(a,b){for(let c of Object.keys(a.handles)){let d=a.handles[c];d&&!j(d,b)&&delete a.handles[c]}let c=Object.keys(a.handles).length-50;if(!(c<=0))for(let[d]of Object.entries(a.handles).filter(([,a])=>h(a)<=b).sort((a,b)=>h(a[1])-h(b[1]))){if(c<=0)break;delete a.handles[d],c-=1}}(c,a.now().getTime()),g().revision===c.revision)return c.revision+=1,a.writeStore(`${JSON.stringify(c,null,2)}
14
- `),d}throw new i("store_conflict","핸들 저장소가 다른 호출과 충돌했습니다. 잠시 뒤 다시 시도하세요.")}function p(a,b){let c=a.revokedAt?"revoked":Date.parse(a.expiresAt)<=b?"expired":"active";return{handle:a.handle,cwd:a.cwd,sessionId:a.sessionId,instruction:a.instruction,createdAt:a.createdAt,expiresAt:a.expiresAt,revokedAt:a.revokedAt,status:c}}async function q(b){let c=a.getSession(b),d=c?.isAlive()?c:await a.resumeSession(b);return d&&d.isAlive()?d:void 0}return{issueHandle:function(b){let c=k(b.cwd,"cwd"),d=k(b.sessionId,"sessionId"),e="string"==typeof b.instruction?b.instruction:"",f=void 0===b.web6RequestId?void 0:k(b.web6RequestId,"web6RequestId"),g=function(a){if(null==a)return 720;if("number"!=typeof a||!Number.isInteger(a))throw new i("invalid_argument","ttlMinutes는 정수여야 합니다.");if(a<1||a>10080)throw new i("invalid_argument","ttlMinutes는 1~10080 범위여야 합니다.");return a}(b.ttlMinutes),h=a.now().getTime();return o(b=>{let j=null;""===b.tokenHash&&(b.tokenHash=m(j=a.randomToken()));let k="";for(let c=0;c<20;c+=1){let c=`H-${a.randomHandleDigits()}`;if(!b.handles[c]){k=c;break}}if(""===k)throw new i("handle_exhausted","연결번호를 발급하지 못했습니다. 4자리 번호가 소진되었습니다.");let l=a.randomHandleKey(),n={handle:k,cwd:c,sessionId:d,instruction:e,createdAt:new Date(h).toISOString(),expiresAt:new Date(h+6e4*g).toISOString(),revokedAt:null,...void 0===f?{}:{web6RequestId:f},handleKeyHash:m(l)};return b.handles[k]=n,{...p(n,h),token:j,handleKey:l,startSentence:`OMP 연결번호 ${k}에 묶인 세션의 상담이다. 작업폴더는 ${c}다.`}})},listHandles:function(){let b=g(),c=a.now().getTime();return{handles:Object.values(b.handles).filter(a=>j(a,c)).map(a=>p(a,c)).sort((a,b)=>b.createdAt.localeCompare(a.createdAt)||a.handle.localeCompare(b.handle)),tokenPresent:""!==b.tokenHash}},revokeHandle:function(b){let c=k(b,"handle");return o(b=>{let d=b.handles[c];if(!d)throw new i("unknown_handle",`연결번호 ${c}를 찾을 수 없습니다.`);return d.revokedAt||(d.revokedAt=a.now().toISOString()),{handle:c,revoked:!0}})},rotateToken:function(b){return o(c=>{if(!n(b,c.tokenHash))throw new i("invalid_token","현재 토큰이 올바르지 않습니다. 회전에는 지금 쓰는 토큰이 필요합니다.");let d=a.randomToken();return c.tokenHash=m(d),{token:d,rotatedAt:a.now().toISOString()}})},acceptsToken:a=>n(a,g().tokenHash),publishReply:async function(a){let b=k(a.sessionId,"sessionId"),c=k(a.text,"text"),d="string"==typeof a.model&&""!==a.model.trim()?a.model.trim():f,g=await q(b);if(!g)throw new i("session_not_found",`세션 ${b}의 기록을 찾을 수 없습니다.`);return{published:!0,entryId:g.appendCustomMessage(e,c,!0,{source:f,model:d}),busy:g.isRunning()}}}}},87576:(a,b,c)=>{"use strict";c.d(b,{BD:()=>d,NR:()=>g,PW:()=>k,SQ:()=>m,Yh:()=>i,c$:()=>l,hw:()=>h,p8:()=>e});let d="live-transcript";function e(a){if(!a||"object"!=typeof a||!("speaker"in a))return;let b=a.speaker;if(!b||"object"!=typeof b)return;let{alias:c,mode:d}=b;if("string"==typeof c&&""!==c.trim()&&("character"===d||"native"===d))return{alias:c,mode:d}}let f={user:"User (live voice):\n",assistant:"Voice assistant (live voice):\n"};function g(a,b){return`${f[a]}${b}`}function h(a,b){if(!b||"object"!=typeof b||!("role"in b))return null;let c=b.role;if("user"!==c&&"assistant"!==c||"string"!=typeof a)return null;let d=f[c];if(!a.startsWith(d))return null;let e=a.slice(d.length).trim();return e?{role:c,text:e}:null}function i(a,b,c,d){let e;if(b){if(a?.text)if(a.final)if(c){if(void 0!==d&&a.finalizedTurnIds?.has(d)||void 0===d&&b===a.text)return;e=b}else{if(void 0!==d&&void 0!==a.itemId&&d===a.itemId||void 0===d&&(b===a.text||a.text.endsWith(b)))return;e=b}else if(c){if(void 0!==d&&a.finalizedTurnIds?.has(d))return;e=a.text.startsWith(b)&&a.text.length>b.length?a.text:b}else e=b.startsWith(a.text)?b:a.text.endsWith(b)?a.text:a.text+b;else e=b;if(e=e.trim())return{text:e,final:c,itemId:c?a?.itemId:d??a?.itemId,finalizedTurnIds:c&&void 0!==d?(a?.finalizedTurnIds??new Set).add(d):a?.finalizedTurnIds}}}function j(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function k(a){let b=a;if("string"==typeof b)try{b=JSON.parse(b)}catch{return null}return j(b)?b:null}function l(a){let b="turn.done"===a.type?a.turn:"input_transcript.added"===a.type||"output_transcript.added"===a.type?a.item:void 0;if(!j(b))return;let c=b.id;return"string"==typeof c&&c?c:void 0}RegExp("^(?:아|어|음|응|네|자|그럼|이제|일단|그만|좀)*(?:(?:통화|전화)(?:를|좀|그만)*)?(?:좀|그만)*(?:끊어|끊을게|끊자|끊겠습니다)(?:줘|주세요|요)?$|^(?:아|어|음|응|네|자|그럼|이제|일단|그만|좀)*(?:통화|전화)(?:를|좀|그만)*(?:종료|종료해|종료할게|종료하자)(?:줘|주세요|요)?$","u");let m=24e3},92868:(a,b,c)=>{"use strict";c.d(b,{sh:()=>k});let d=/^[\t ]*(?:WORK_CLASS|PURPOSE|BLOCKS_PRIMARY|PRIMARY_DELIVERABLE|OWNED_PATHS|FINDING_ID)[\t ]*:[^\r\n]*$/i;function e(a){return Array.isArray(a)?a.filter(a=>"object"==typeof a&&null!==a):[]}function f(a){return"string"==typeof a&&a.trim()?a:null}function g(a){return"string"==typeof a?a:a.map(a=>"text"===a.type?a.text:"").join("\n")}function h(a){if(a.isError)return null;let b=a.details?.record;if("object"!=typeof b||null===b)try{let c=JSON.parse(g(a.content));b=c?.ok===!0?c.record:void 0}catch{return null}return"object"==typeof b&&null!==b?b:null}c(1060);let i=/<task-result\b([^>]*)>/g;function j(a){let b="string"==typeof a?function(a){if(!a)return null;let b=/^\s*TASK_GUARD\s*:\s*$/im.exec(a),c=a;if(b){let e=b.index+b[0].length;"\r"===a[e]&&(e+=1),"\n"===a[e]&&(e+=1);let f=e;for(;e<a.length;){let b=a.indexOf("\n",e),c=-1===b?a.length:b,g=c>e&&"\r"===a[c-1]?c-1:c;if(!d.test(a.slice(e,g)))break;f=g,e=-1===b?a.length:b+1}let g=b[0].length-b[0].trimStart().length;c=`${a.slice(0,b.index+g)}${a.slice(f)}`}let e=[...c.matchAll(/^\s*TASK_TITLE\s*:\s*(.*?)\s*$/gim)].map(a=>a[1]??"");return 1===e.length&&e[0]&&e[0]===e[0].trim()&&/[가-힣]/u.test(e[0])?e[0]:null}(a):null;return b?`TASK_TITLE: ${b}`:""}function k(a){switch(a.role){case"user":return{role:"user",content:"",timestamp:a.timestamp};case"assistant":{let b=(a.content??[]).filter(a=>"toolCall"===a.type&&"task"===a.toolName).map(a=>({type:"toolCall",toolCallId:a.toolCallId,toolName:"task",input:{tasks:e(a.input?.tasks).map(a=>({name:a.name,agent:a.agent,task:j(a.task)}))}}));if(0===b.length)return null;return{role:"assistant",content:b,model:a.model,provider:a.provider,timestamp:a.timestamp}}case"toolResult":{let b={role:"toolResult",toolCallId:a.toolCallId,toolName:a.toolName,content:[],timestamp:a.timestamp};if("task"===a.toolName){if(a.isError)return{...b,isError:!0};let c=e(a.details?.progress).map(a=>({index:a.index,id:a.id,agent:a.agent,task:j(a.task)}));return{...b,details:{progress:c}}}if("routing_verdict"===a.toolName){if(!function(a){let b=h(a);if(!b)return null;let c=b.verdict;if("accepted"!==c&&"rework"!==c&&"held"!==c)return null;let d=f(b.assignmentId),e=d?.split("#")??[];if(e.length<3)return null;let g=e[e.length-1],i=e.slice(1,-1).join("#");return/^\d+$/.test(g)&&i?{key:`${i}#${g}`,record:{verdict:c,attempt:"number"==typeof b.attempt?b.attempt:null,reason:f(b.reason)}}:null}(a))return null;let c=h(a);return{...b,details:{record:{verdict:c.verdict,assignmentId:c.assignmentId,attempt:c.attempt,reason:c.reason}}}}if("wait"===a.toolName){let c=e(a.details?.jobs).filter(a=>"task"===a.type).map(a=>({type:a.type,id:a.id,status:a.status}));return c.length>0?{...b,details:{jobs:c}}:null}return null}case"custom":{if("async-result"!==a.customType)return null;let b=[...g(a.content).matchAll(i)].map(a=>a[0]);return b.length>0?{role:"custom",customType:"async-result",display:!1,content:b.join("\n"),timestamp:a.timestamp}:null}default:return null}}},96487:()=>{}};
14
+ `),d}throw new i("store_conflict","핸들 저장소가 다른 호출과 충돌했습니다. 잠시 뒤 다시 시도하세요.")}function p(a,b){let c=a.revokedAt?"revoked":Date.parse(a.expiresAt)<=b?"expired":"active";return{handle:a.handle,cwd:a.cwd,sessionId:a.sessionId,instruction:a.instruction,createdAt:a.createdAt,expiresAt:a.expiresAt,revokedAt:a.revokedAt,status:c}}async function q(b){let c=a.getSession(b),d=c?.isAlive()?c:await a.resumeSession(b);return d&&d.isAlive()?d:void 0}return{issueHandle:function(b){let c=k(b.cwd,"cwd"),d=k(b.sessionId,"sessionId"),e="string"==typeof b.instruction?b.instruction:"",f=void 0===b.web6RequestId?void 0:k(b.web6RequestId,"web6RequestId"),g=function(a){if(null==a)return 720;if("number"!=typeof a||!Number.isInteger(a))throw new i("invalid_argument","ttlMinutes는 정수여야 합니다.");if(a<1||a>10080)throw new i("invalid_argument","ttlMinutes는 1~10080 범위여야 합니다.");return a}(b.ttlMinutes),h=a.now().getTime();return o(b=>{let j=null;""===b.tokenHash&&(b.tokenHash=m(j=a.randomToken()));let k="";for(let c=0;c<20;c+=1){let c=`H-${a.randomHandleDigits()}`;if(!b.handles[c]){k=c;break}}if(""===k)throw new i("handle_exhausted","연결번호를 발급하지 못했습니다. 4자리 번호가 소진되었습니다.");let l=a.randomHandleKey(),n={handle:k,cwd:c,sessionId:d,instruction:e,createdAt:new Date(h).toISOString(),expiresAt:new Date(h+6e4*g).toISOString(),revokedAt:null,...void 0===f?{}:{web6RequestId:f},handleKeyHash:m(l)};return b.handles[k]=n,{...p(n,h),token:j,handleKey:l,startSentence:`OMP 연결번호 ${k}에 묶인 세션의 상담이다. 작업폴더는 ${c}다.`}})},listHandles:function(){let b=g(),c=a.now().getTime();return{handles:Object.values(b.handles).filter(a=>j(a,c)).map(a=>p(a,c)).sort((a,b)=>b.createdAt.localeCompare(a.createdAt)||a.handle.localeCompare(b.handle)),tokenPresent:""!==b.tokenHash}},revokeHandle:function(b){let c=k(b,"handle");return o(b=>{let d=b.handles[c];if(!d)throw new i("unknown_handle",`연결번호 ${c}를 찾을 수 없습니다.`);return d.revokedAt||(d.revokedAt=a.now().toISOString()),{handle:c,revoked:!0}})},rotateToken:function(b){return o(c=>{if(!n(b,c.tokenHash))throw new i("invalid_token","현재 토큰이 올바르지 않습니다. 회전에는 지금 쓰는 토큰이 필요합니다.");let d=a.randomToken();return c.tokenHash=m(d),{token:d,rotatedAt:a.now().toISOString()}})},acceptsToken:a=>n(a,g().tokenHash),publishReply:async function(a){let b=k(a.sessionId,"sessionId"),c=k(a.text,"text"),d="string"==typeof a.model&&""!==a.model.trim()?a.model.trim():f,g=await q(b);if(!g)throw new i("session_not_found",`세션 ${b}의 기록을 찾을 수 없습니다.`);return{published:!0,entryId:g.appendCustomMessage(e,c,!0,{source:f,model:d}),busy:g.isRunning()}}}}},87576:(a,b,c)=>{"use strict";c.d(b,{BD:()=>d,NR:()=>g,PW:()=>k,SQ:()=>m,Yh:()=>i,c$:()=>l,hw:()=>h,p8:()=>e});let d="live-transcript";function e(a){if(!a||"object"!=typeof a||!("speaker"in a))return;let b=a.speaker;if(!b||"object"!=typeof b)return;let{alias:c,mode:d}=b;if("string"==typeof c&&""!==c.trim()&&("character"===d||"native"===d))return{alias:c,mode:d}}let f={user:"User (live voice):\n",assistant:"Voice assistant (live voice):\n"};function g(a,b){return`${f[a]}${b}`}function h(a,b){if(!b||"object"!=typeof b||!("role"in b))return null;let c=b.role;if("user"!==c&&"assistant"!==c||"string"!=typeof a)return null;let d=f[c];if(!a.startsWith(d))return null;let e=a.slice(d.length).trim();return e?{role:c,text:e}:null}function i(a,b,c,d){let e;if(b){if(a?.text)if(a.final)if(c){if(void 0!==d&&a.finalizedTurnIds?.has(d)||void 0===d&&b===a.text)return;e=b}else{if(void 0!==d&&void 0!==a.itemId&&d===a.itemId||void 0===d&&(b===a.text||a.text.endsWith(b)))return;e=b}else if(c){if(void 0!==d&&a.finalizedTurnIds?.has(d))return;e=a.text.startsWith(b)&&a.text.length>b.length?a.text:b}else e=b.startsWith(a.text)?b:a.text.endsWith(b)?a.text:a.text+b;else e=b;if(e=e.trim())return{text:e,final:c,itemId:c?a?.itemId:d??a?.itemId,finalizedTurnIds:c&&void 0!==d?(a?.finalizedTurnIds??new Set).add(d):a?.finalizedTurnIds}}}function j(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function k(a){let b=a;if("string"==typeof b)try{b=JSON.parse(b)}catch{return null}return j(b)?b:null}function l(a){let b="turn.done"===a.type?a.turn:"input_transcript.added"===a.type||"output_transcript.added"===a.type?a.item:void 0;if(!j(b))return;let c=b.id;return"string"==typeof c&&c?c:void 0}RegExp("^(?:아|어|음|응|네|자|그럼|이제|일단|그만|좀|알았어|알겠어|아니|그래)*(?:(?:통화|전화)(?:를|좀|그만)*)?(?:좀|그만)*(?:끊어|끊어봐|끊을게|끊자|끊겠습니다|끊으라고)(?:줘|주세요|요)?$|^(?:아|어|음|응|네|자|그럼|이제|일단|그만|좀|알았어|알겠어|아니|그래)*(?:통화|전화)(?:를|좀|그만)*(?:종료|종료해|종료해봐|종료할게|종료하자|종료하라고)(?:줘|주세요|요)?$","u");let m=24e3},92868:(a,b,c)=>{"use strict";c.d(b,{sh:()=>k});let d=/^[\t ]*(?:WORK_CLASS|PURPOSE|BLOCKS_PRIMARY|PRIMARY_DELIVERABLE|OWNED_PATHS|FINDING_ID)[\t ]*:[^\r\n]*$/i;function e(a){return Array.isArray(a)?a.filter(a=>"object"==typeof a&&null!==a):[]}function f(a){return"string"==typeof a&&a.trim()?a:null}function g(a){return"string"==typeof a?a:a.map(a=>"text"===a.type?a.text:"").join("\n")}function h(a){if(a.isError)return null;let b=a.details?.record;if("object"!=typeof b||null===b)try{let c=JSON.parse(g(a.content));b=c?.ok===!0?c.record:void 0}catch{return null}return"object"==typeof b&&null!==b?b:null}c(1060);let i=/<task-result\b([^>]*)>/g;function j(a){let b="string"==typeof a?function(a){if(!a)return null;let b=/^\s*TASK_GUARD\s*:\s*$/im.exec(a),c=a;if(b){let e=b.index+b[0].length;"\r"===a[e]&&(e+=1),"\n"===a[e]&&(e+=1);let f=e;for(;e<a.length;){let b=a.indexOf("\n",e),c=-1===b?a.length:b,g=c>e&&"\r"===a[c-1]?c-1:c;if(!d.test(a.slice(e,g)))break;f=g,e=-1===b?a.length:b+1}let g=b[0].length-b[0].trimStart().length;c=`${a.slice(0,b.index+g)}${a.slice(f)}`}let e=[...c.matchAll(/^\s*TASK_TITLE\s*:\s*(.*?)\s*$/gim)].map(a=>a[1]??"");return 1===e.length&&e[0]&&e[0]===e[0].trim()&&/[가-힣]/u.test(e[0])?e[0]:null}(a):null;return b?`TASK_TITLE: ${b}`:""}function k(a){switch(a.role){case"user":return{role:"user",content:"",timestamp:a.timestamp};case"assistant":{let b=(a.content??[]).filter(a=>"toolCall"===a.type&&"task"===a.toolName).map(a=>({type:"toolCall",toolCallId:a.toolCallId,toolName:"task",input:{tasks:e(a.input?.tasks).map(a=>({name:a.name,agent:a.agent,task:j(a.task)}))}}));if(0===b.length)return null;return{role:"assistant",content:b,model:a.model,provider:a.provider,timestamp:a.timestamp}}case"toolResult":{let b={role:"toolResult",toolCallId:a.toolCallId,toolName:a.toolName,content:[],timestamp:a.timestamp};if("task"===a.toolName){if(a.isError)return{...b,isError:!0};let c=e(a.details?.progress).map(a=>({index:a.index,id:a.id,agent:a.agent,task:j(a.task)}));return{...b,details:{progress:c}}}if("routing_verdict"===a.toolName){if(!function(a){let b=h(a);if(!b)return null;let c=b.verdict;if("accepted"!==c&&"rework"!==c&&"held"!==c)return null;let d=f(b.assignmentId),e=d?.split("#")??[];if(e.length<3)return null;let g=e[e.length-1],i=e.slice(1,-1).join("#");return/^\d+$/.test(g)&&i?{key:`${i}#${g}`,record:{verdict:c,attempt:"number"==typeof b.attempt?b.attempt:null,reason:f(b.reason)}}:null}(a))return null;let c=h(a);return{...b,details:{record:{verdict:c.verdict,assignmentId:c.assignmentId,attempt:c.attempt,reason:c.reason}}}}if("wait"===a.toolName){let c=e(a.details?.jobs).filter(a=>"task"===a.type).map(a=>({type:a.type,id:a.id,status:a.status}));return c.length>0?{...b,details:{jobs:c}}:null}return null}case"custom":{if("async-result"!==a.customType)return null;let b=[...g(a.content).matchAll(i)].map(a=>a[0]);return b.length>0?{role:"custom",customType:"async-result",display:!1,content:b.join("\n"),timestamp:a.timestamp}:null}default:return null}}},96487:()=>{}};
@@ -1,10 +1,10 @@
1
- "use strict";exports.id=6429,exports.ids=[6429],exports.modules={4157:(a,b,c)=>{c.d(b,{EO:()=>v,G4:()=>B,Hx:()=>C,Kg:()=>G,Ot:()=>y,Rf:()=>x,hl:()=>w,lG:()=>A,mN:()=>D,p8:()=>E,s$:()=>z}),c(77598);var d=c(73024),e=c(48161),f=c(76760);let g=/^[0-9a-f]{32}$/,h=/^[A-Za-z0-9_-]{16,128}$/,i=/^[0-9a-f]{64}$/,j=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;function k(a){return!a||"object"!=typeof a||Array.isArray(a)?null:a}function l(){let a=process.env.CUELO_EXTERNAL_UPDATE_ROOT?.trim();return(0,f.resolve)(a||(0,f.join)((0,e.homedir)(),".omp","external-update"))}function m(a){try{let b=JSON.parse((0,d.readFileSync)(a,"utf8").replace(/^\uFEFF/,""));return b&&"object"==typeof b&&!Array.isArray(b)?b:null}catch{return null}}function n(a,b){(0,d.mkdirSync)((0,f.dirname)(a),{recursive:!0});let c=`${a}.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`;(0,d.writeFileSync)(c,`${JSON.stringify(b,null,2)}
2
- `,"utf8"),(0,d.renameSync)(c,a)}function o(a){return(0,f.join)(l(),"clients",`${a}.json`)}function p(a){if(!g.test(a))return null;let b=m((0,f.join)(l(),"requests",`${a}.json`));if(!b||2!==b.schemaVersion||b.requestId!==a)return null;let c=void 0===b.completionContractVersion?0:Number(b.completionContractVersion);if(0!==c&&1!==c)return null;let d=(0,f.resolve)(String(b.maintenanceDirectory??"")),e=(0,f.resolve)((0,f.join)(l(),"maintenance",a)),h=(0,f.resolve)(String(b.transactionReceiptPath??"")),i=(0,f.resolve)((0,f.join)(l(),"transactions",`${a}.json`)),k=(0,f.resolve)((0,f.join)(l(),"results",`${a}.json`));if(d!==e||h!==i||(0,f.resolve)(String(b.resultPath??""))!==k)return null;let n=null===b.initiatorSessionId||void 0===b.initiatorSessionId?"":String(b.initiatorSessionId).trim().toLowerCase(),o=j.test(n)?n:null;return{schemaVersion:2,completionContractVersion:c,requestId:a,preparedStagePrefix:String(b.preparedStagePrefix??""),stageTransactionPath:String(b.stageTransactionPath??""),maintenanceDirectory:d,transactionReceiptPath:h,resultPath:k,initiatorSessionId:o,initiatorSessionSource:o?"explicit":"absent"}}function q(a){let b=m((0,f.join)(a.maintenanceDirectory,"command.json"));if(!b||2!==b.schemaVersion||b.requestId!==a.requestId)return null;let c=b.phase,d=String(b.stageHash??""),e=Number(b.revision);return("DRAINING"===c||"QUIESCENT"===c||"CUTOVER"===c)&&i.test(d)&&Number.isInteger(e)&&!(e<1)?{schemaVersion:2,requestId:a.requestId,stageHash:d,phase:c,revision:e,updatedAtUtc:String(b.updatedAtUtc??"")}:null}function r(a,b){if(1!==a.completionContractVersion)return null;let c=m(a.transactionReceiptPath);if(!c||2!==c.schemaVersion||"ompweb-runtime-transaction"!==c.kind||c.requestId!==a.requestId||c.stageHash!==b.stageHash||!0!==c.success||"RESUME_CONFIRMED"!==c.phase&&"RESUME_PENDING"!==c.phase)return null;let e=k(c.deployment),g=k(e?.service),h=k(e?.resume),i=k(e?.rollback),j=k(e?.cleanup);if(!e||1!==e.completionContractVersion||!0!==e.completed||!0!==e.writeSafe||e.requestId!==a.requestId||e.stageHash!==b.stageHash||!Number.isFinite(Date.parse(String(e.completedAtUtc??"")))||g?.ready!==!0||!0!==g.exact||g.requestId!==a.requestId||g.stageHash!==b.stageHash||i?.packagePresent!==!0||!0!==i.transactionRecorded||j?.owner!=="runtime-transaction")return null;let l=String(h?.status??""),n=Number(h?.targetCount),o=Number(h?.confirmedCount);if("confirmed"!==l&&"pending"!==l||!Number.isInteger(n)||n<0||!Number.isInteger(o)||o<0||o>n)return null;let p=(0,f.resolve)(String(i.transactionPath??"")),q=(0,f.dirname)(p),r=(0,f.resolve)(String(i.packagePath??"")),s=(0,f.resolve)(String(i.shimDirectory??"")),t=(0,f.basename)(r);if("cuelo"!==t&&"omp-web"!==t)return null;let u=[t,`${t}.cmd`,`${t}.ps1`],v=Array.isArray(i.backedUpShims)?i.backedUpShims.map(a=>String(a)):[];if(p!==(0,f.join)(q,"transaction.json")||r!==(0,f.join)(q,t)||s!==(0,f.join)(q,"shims")||!(0,d.existsSync)(p)||!(0,d.existsSync)(r)||u.some(a=>!v.includes(a)||!(0,d.existsSync)((0,f.join)(s,a))))return null;let w=(0,f.resolve)((0,f.join)(a.maintenanceDirectory,"cleanup.json"));return(0,f.resolve)(String(j.progressPath??""))!==w||0>=Number(j.ownerPid)?null:{completionContractVersion:1,completed:!0,writeSafe:!0,completedAtUtc:String(e.completedAtUtc),requestId:a.requestId,stageHash:b.stageHash}}function s(){let a=m((0,f.join)(l(),"active.json")),b=String(a?.requestId??"");if(a?.schemaVersion!==2||!g.test(b))return null;let c=p(b);if(!c||(0,d.existsSync)(c.resultPath))return null;let e=q(c);return!e||r(c,e)?null:{request:c,command:e}}function t(a){if(!a.startsWith("/")||a.startsWith("//"))return null;try{let b=new URL(a,"http://127.0.0.1");if("http://127.0.0.1"!==b.origin)return null;return`${b.pathname}${b.search}${b.hash}`}catch{return null}}function u(a){if(!a||2!==a.schemaVersion)return null;let b=String(a.clientId??""),c=t(String(a.resumeUrl??"")),d=null===a.sessionId?null:String(a.sessionId??"");return h.test(b)&&c&&(null===d||d)?{schemaVersion:2,clientId:b,sessionId:d,resumeUrl:c,lastSeenAtUtc:String(a.lastSeenAtUtc??""),preservationError:null===a.preservationError?null:String(a.preservationError??"")}:null}function v(a){let b=a.clientId.trim(),c=t(a.resumeUrl),d=a.sessionId?.trim()||null;if(!h.test(b)||!c)throw Error("invalid update client identity");n(o(b),{schemaVersion:2,clientId:b,sessionId:d,resumeUrl:c,lastSeenAtUtc:new Date().toISOString(),preservationError:a.preservationError?.trim()||null});let e=s();return e?{phase:e.command.phase,requestId:e.request.requestId,stageHash:e.command.stageHash}:{phase:"IDLE"}}function w(a){let b=function(a,b){let c=p(a);if(!c)throw Error("invalid update request identity");let d=q(c);if(!d||d.stageHash!==b)throw Error("update maintenance revision mismatch");return{request:c,command:d}}(a.requestId,a.stageHash);if("DRAINING"!==b.command.phase&&"QUIESCENT"!==b.command.phase&&"CUTOVER"!==b.command.phase)throw Error("update is not draining");let c=u(m(o(a.clientId)));if(!c||c.clientId!==a.clientId)throw Error("update client registration missing");return n((0,f.join)(b.request.maintenanceDirectory,"clients",`${c.clientId}.parked.json`),{...c,requestId:a.requestId,stageHash:a.stageHash,parkedAtUtc:new Date().toISOString()}),c}function x(a){let b=F();if(!b.ready||b.requestId!==a.requestId||b.stageHash!==a.stageHash)throw Error("deployed service identity mismatch");let c=p(a.requestId);if(!c)throw Error("invalid update request identity");let d=u(m(o(a.clientId)));if(!d)throw Error("update client registration missing");if((d.sessionId??null)!==(a.sessionId?.trim()||null))throw Error("resumed session identity mismatch");n((0,f.join)(c.maintenanceDirectory,"clients",`${d.clientId}.resumed.json`),{schemaVersion:2,requestId:a.requestId,stageHash:a.stageHash,clientId:d.clientId,sessionId:d.sessionId,resumeUrl:d.resumeUrl,resumedAtUtc:new Date().toISOString()})}function y(a){let b=p(a.requestId);if(!b)throw Error("invalid update request identity");let c=(0,f.join)(b.maintenanceDirectory,"wake"),e=a.sessionId?.trim().toLowerCase()||null,g=d=>(n((0,f.join)(c,`${a.clientId}.skipped.json`),{schemaVersion:1,requestId:a.requestId,stageHash:a.stageHash,clientId:a.clientId,resumedSessionId:e,initiatorSessionId:b.initiatorSessionId,initiatorSessionSource:b.initiatorSessionSource,reason:d,observedAtUtc:new Date().toISOString()}),{wake:!1,reason:d}),h=q(b);if(!(h&&h.stageHash===a.stageHash.toLowerCase()?r(b,h):null))return g("deployment-incomplete");if(!b.initiatorSessionId)return g("no-initiator");if(a.sessionBusy)return g("user-already-active");(0,d.mkdirSync)(c,{recursive:!0});try{let e=(0,d.openSync)((0,f.join)(c,`${b.initiatorSessionId}.json`),"wx");try{(0,d.writeSync)(e,`${JSON.stringify({schemaVersion:1,requestId:a.requestId,stageHash:a.stageHash,clientId:a.clientId,sessionId:b.initiatorSessionId,claimedAtUtc:new Date().toISOString()},null,2)}
1
+ "use strict";exports.id=6429,exports.ids=[6429],exports.modules={4157:(a,b,c)=>{c.d(b,{EO:()=>v,G4:()=>B,Hx:()=>C,Kg:()=>H,Ot:()=>y,Rf:()=>x,hl:()=>w,lG:()=>A,mN:()=>D,p8:()=>F,s$:()=>z}),c(31421),c(77598);var d=c(73024),e=c(48161),f=c(76760);let g=/^[0-9a-f]{32}$/,h=/^[A-Za-z0-9_-]{16,128}$/,i=/^[0-9a-f]{64}$/,j=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;function k(a){return!a||"object"!=typeof a||Array.isArray(a)?null:a}function l(){let a=process.env.CUELO_EXTERNAL_UPDATE_ROOT?.trim();return(0,f.resolve)(a||(0,f.join)((0,e.homedir)(),".omp","external-update"))}function m(a){try{let b=JSON.parse((0,d.readFileSync)(a,"utf8").replace(/^\uFEFF/,""));return b&&"object"==typeof b&&!Array.isArray(b)?b:null}catch{return null}}function n(a,b){(0,d.mkdirSync)((0,f.dirname)(a),{recursive:!0});let c=`${a}.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`;(0,d.writeFileSync)(c,`${JSON.stringify(b,null,2)}
2
+ `,"utf8"),(0,d.renameSync)(c,a)}function o(a){return(0,f.join)(l(),"clients",`${a}.json`)}function p(a){if(!g.test(a))return null;let b=m((0,f.join)(l(),"requests",`${a}.json`));if(!b||2!==b.schemaVersion||b.requestId!==a)return null;let c=void 0===b.completionContractVersion?0:Number(b.completionContractVersion);if(0!==c&&1!==c)return null;let d=(0,f.resolve)(String(b.maintenanceDirectory??"")),e=(0,f.resolve)((0,f.join)(l(),"maintenance",a)),h=(0,f.resolve)(String(b.transactionReceiptPath??"")),i=(0,f.resolve)((0,f.join)(l(),"transactions",`${a}.json`)),k=(0,f.resolve)((0,f.join)(l(),"results",`${a}.json`));if(d!==e||h!==i||(0,f.resolve)(String(b.resultPath??""))!==k)return null;let n=null===b.initiatorSessionId||void 0===b.initiatorSessionId?"":String(b.initiatorSessionId).trim().toLowerCase(),o=j.test(n)?n:null;return{schemaVersion:2,completionContractVersion:c,requestId:a,preparedStagePrefix:String(b.preparedStagePrefix??""),stageTransactionPath:String(b.stageTransactionPath??""),maintenanceDirectory:d,transactionReceiptPath:h,resultPath:k,initiatorSessionId:o,initiatorSessionSource:o?"explicit":"absent"}}function q(a){let b=m((0,f.join)(a.maintenanceDirectory,"command.json"));if(!b||2!==b.schemaVersion||b.requestId!==a.requestId)return null;let c=b.phase,d=String(b.stageHash??""),e=Number(b.revision);return("DRAINING"===c||"QUIESCENT"===c||"CUTOVER"===c)&&i.test(d)&&Number.isInteger(e)&&!(e<1)?{schemaVersion:2,requestId:a.requestId,stageHash:d,phase:c,revision:e,updatedAtUtc:String(b.updatedAtUtc??"")}:null}function r(a,b){if(1!==a.completionContractVersion)return null;let c=m(a.transactionReceiptPath);if(!c||2!==c.schemaVersion||"ompweb-runtime-transaction"!==c.kind||c.requestId!==a.requestId||c.stageHash!==b.stageHash||!0!==c.success||"RESUME_CONFIRMED"!==c.phase&&"RESUME_PENDING"!==c.phase)return null;let e=k(c.deployment),g=k(e?.service),h=k(e?.resume),i=k(e?.rollback),j=k(e?.cleanup);if(!e||1!==e.completionContractVersion||!0!==e.completed||!0!==e.writeSafe||e.requestId!==a.requestId||e.stageHash!==b.stageHash||!Number.isFinite(Date.parse(String(e.completedAtUtc??"")))||g?.ready!==!0||!0!==g.exact||g.requestId!==a.requestId||g.stageHash!==b.stageHash||i?.packagePresent!==!0||!0!==i.transactionRecorded||j?.owner!=="runtime-transaction")return null;let l=String(h?.status??""),n=Number(h?.targetCount),o=Number(h?.confirmedCount);if("confirmed"!==l&&"pending"!==l||!Number.isInteger(n)||n<0||!Number.isInteger(o)||o<0||o>n)return null;let p=(0,f.resolve)(String(i.transactionPath??"")),q=(0,f.dirname)(p),r=(0,f.resolve)(String(i.packagePath??"")),s=(0,f.resolve)(String(i.shimDirectory??"")),t=(0,f.basename)(r);if("cuelo"!==t&&"omp-web"!==t)return null;let u=[t,`${t}.cmd`,`${t}.ps1`],v=Array.isArray(i.backedUpShims)?i.backedUpShims.map(a=>String(a)):[];if(p!==(0,f.join)(q,"transaction.json")||r!==(0,f.join)(q,t)||s!==(0,f.join)(q,"shims")||!(0,d.existsSync)(p)||!(0,d.existsSync)(r)||u.some(a=>!v.includes(a)||!(0,d.existsSync)((0,f.join)(s,a))))return null;let w=(0,f.resolve)((0,f.join)(a.maintenanceDirectory,"cleanup.json"));return(0,f.resolve)(String(j.progressPath??""))!==w||0>=Number(j.ownerPid)?null:{completionContractVersion:1,completed:!0,writeSafe:!0,completedAtUtc:String(e.completedAtUtc),requestId:a.requestId,stageHash:b.stageHash}}function s(){let a=m((0,f.join)(l(),"active.json")),b=String(a?.requestId??"");if(a?.schemaVersion!==2||!g.test(b))return null;let c=p(b);if(!c||(0,d.existsSync)(c.resultPath))return null;let e=q(c);return!e||r(c,e)?null:{request:c,command:e}}function t(a){if(!a.startsWith("/")||a.startsWith("//"))return null;try{let b=new URL(a,"http://127.0.0.1");if("http://127.0.0.1"!==b.origin)return null;return`${b.pathname}${b.search}${b.hash}`}catch{return null}}function u(a){if(!a||2!==a.schemaVersion)return null;let b=String(a.clientId??""),c=t(String(a.resumeUrl??"")),d=null===a.sessionId?null:String(a.sessionId??"");return h.test(b)&&c&&(null===d||d)?{schemaVersion:2,clientId:b,sessionId:d,resumeUrl:c,lastSeenAtUtc:String(a.lastSeenAtUtc??""),preservationError:null===a.preservationError?null:String(a.preservationError??"")}:null}function v(a){let b=a.clientId.trim(),c=t(a.resumeUrl),d=a.sessionId?.trim()||null;if(!h.test(b)||!c)throw Error("invalid update client identity");n(o(b),{schemaVersion:2,clientId:b,sessionId:d,resumeUrl:c,lastSeenAtUtc:new Date().toISOString(),preservationError:a.preservationError?.trim()||null});let e=s();return e?{phase:e.command.phase,requestId:e.request.requestId,stageHash:e.command.stageHash}:{phase:"IDLE"}}function w(a){let b=function(a,b){let c=p(a);if(!c)throw Error("invalid update request identity");let d=q(c);if(!d||d.stageHash!==b)throw Error("update maintenance revision mismatch");return{request:c,command:d}}(a.requestId,a.stageHash);if("DRAINING"!==b.command.phase&&"QUIESCENT"!==b.command.phase&&"CUTOVER"!==b.command.phase)throw Error("update is not draining");let c=u(m(o(a.clientId)));if(!c||c.clientId!==a.clientId)throw Error("update client registration missing");return n((0,f.join)(b.request.maintenanceDirectory,"clients",`${c.clientId}.parked.json`),{...c,requestId:a.requestId,stageHash:a.stageHash,parkedAtUtc:new Date().toISOString()}),c}function x(a){let b=G();if(!b.ready||b.requestId!==a.requestId||b.stageHash!==a.stageHash)throw Error("deployed service identity mismatch");let c=p(a.requestId);if(!c)throw Error("invalid update request identity");let d=u(m(o(a.clientId)));if(!d)throw Error("update client registration missing");if((d.sessionId??null)!==(a.sessionId?.trim()||null))throw Error("resumed session identity mismatch");n((0,f.join)(c.maintenanceDirectory,"clients",`${d.clientId}.resumed.json`),{schemaVersion:2,requestId:a.requestId,stageHash:a.stageHash,clientId:d.clientId,sessionId:d.sessionId,resumeUrl:d.resumeUrl,resumedAtUtc:new Date().toISOString()})}function y(a){let b=p(a.requestId);if(!b)throw Error("invalid update request identity");let c=(0,f.join)(b.maintenanceDirectory,"wake"),e=a.sessionId?.trim().toLowerCase()||null,g=d=>(n((0,f.join)(c,`${a.clientId}.skipped.json`),{schemaVersion:1,requestId:a.requestId,stageHash:a.stageHash,clientId:a.clientId,resumedSessionId:e,initiatorSessionId:b.initiatorSessionId,initiatorSessionSource:b.initiatorSessionSource,reason:d,observedAtUtc:new Date().toISOString()}),{wake:!1,reason:d}),h=q(b);if(!(h&&h.stageHash===a.stageHash.toLowerCase()?r(b,h):null))return g("deployment-incomplete");if(!b.initiatorSessionId)return g("no-initiator");if(a.sessionBusy)return g("user-already-active");(0,d.mkdirSync)(c,{recursive:!0});try{let e=(0,d.openSync)((0,f.join)(c,`${b.initiatorSessionId}.json`),"wx");try{(0,d.writeSync)(e,`${JSON.stringify({schemaVersion:1,requestId:a.requestId,stageHash:a.stageHash,clientId:a.clientId,sessionId:b.initiatorSessionId,claimedAtUtc:new Date().toISOString()},null,2)}
3
3
  `)}finally{(0,d.closeSync)(e)}}catch(a){if("EEXIST"===a.code)return g("already-claimed");throw a}return{wake:!0,requestId:a.requestId,stageHash:a.stageHash,sessionId:b.initiatorSessionId}}function z(a){return p(a)?.initiatorSessionId??null}function A(a){let b=p(a.requestId);if(!b)return;let c=(0,f.join)(b.maintenanceDirectory,"wake");try{n((0,f.join)(c,`${a.sessionId}.failed.json`),{schemaVersion:1,requestId:a.requestId,stageHash:a.stageHash,clientId:a.clientId,sessionId:a.sessionId,stage:a.stage,error:a.error instanceof Error?{name:a.error.name,message:a.error.message,stack:a.error.stack??null}:{name:"unknown",message:String(a.error),stack:null},failedAtUtc:new Date().toISOString()})}finally{try{(0,d.rmSync)((0,f.join)(c,`${a.sessionId}.json`),{force:!0})}catch{}}}function B(a){let b=p(a.requestId);if(!b)throw Error("invalid update request identity");if(!h.test(a.clientId))throw Error("invalid update client identity");let c=(0,f.join)(b.maintenanceDirectory,"wake"),e=a.sessionId?.trim().toLowerCase()||null,g=d=>(n((0,f.join)(c,`${a.clientId}.failure-skipped.json`),{schemaVersion:1,requestId:a.requestId,stageHash:a.stageHash,clientId:a.clientId,resumedSessionId:e,initiatorSessionId:b.initiatorSessionId,initiatorSessionSource:b.initiatorSessionSource,reason:d,observedAtUtc:new Date().toISOString()}),{notice:!1,reason:d}),i=m(b.resultPath),j=i&&"string"==typeof i.status?i.status:null;if(null===j)return g("no-terminal-result");let k=q(b),l=k&&k.stageHash===a.stageHash.toLowerCase()?r(b,k):null;if("succeeded"===j||l?.writeSafe===!0)return g("deployment-succeeded");if(!b.initiatorSessionId)return g("no-initiator");if(a.sessionBusy)return g("user-already-active");let o="string"==typeof i?.error?i.error:null;(0,d.mkdirSync)(c,{recursive:!0});try{let e=(0,d.openSync)((0,f.join)(c,`${b.initiatorSessionId}.failure.json`),"wx");try{(0,d.writeSync)(e,`${JSON.stringify({schemaVersion:1,requestId:a.requestId,stageHash:a.stageHash,clientId:a.clientId,sessionId:b.initiatorSessionId,terminalStatus:j,terminalError:o,claimedAtUtc:new Date().toISOString()},null,2)}
4
- `)}finally{(0,d.closeSync)(e)}}catch(a){if("EEXIST"===a.code)return g("already-claimed");throw a}return{notice:!0,requestId:a.requestId,stageHash:a.stageHash,sessionId:b.initiatorSessionId,terminalError:o}}function C(a){let b=p(a.requestId);if(!b)return;let c=(0,f.join)(b.maintenanceDirectory,"wake");try{n((0,f.join)(c,`${a.sessionId}.failure-error.json`),{schemaVersion:1,requestId:a.requestId,stageHash:a.stageHash,clientId:a.clientId,sessionId:a.sessionId,stage:a.stage,error:a.error instanceof Error?{name:a.error.name,message:a.error.message,stack:a.error.stack??null}:{name:"unknown",message:String(a.error),stack:null},failedAtUtc:new Date().toISOString()})}finally{try{(0,d.rmSync)((0,f.join)(c,`${a.sessionId}.failure.json`),{force:!0})}catch{}}}function D(){let a=s();return a?{requestId:a.request.requestId,stageHash:a.command.stageHash,phase:a.command.phase}:null}function E(a){let b=[...new Set(a.filter(a=>"string"==typeof a&&a.trim()).map(a=>a.trim()))].sort();n((0,f.join)(l(),"runtime-activity",`${process.pid}.json`),{schemaVersion:2,processId:process.pid,processStartedAtUtc:new Date(Date.now()-1e3*process.uptime()).toISOString(),updatedAtUtc:new Date().toISOString(),runningSessionIds:b})}function F(){let a=process.env.CUELO_DEPLOY_REQUEST_ID?.trim()||null,b=process.env.CUELO_DEPLOY_STAGE_HASH?.trim().toLowerCase()||null,c=process.env.CUELO_DEPLOY_MARKER_PATH?.trim()||null;if(!a||!b||!c||!g.test(a)||!i.test(b))return{ready:!1,requestId:a,stageHash:b,transactionId:null};let d=m((0,f.resolve)(c)),e=d&&"string"==typeof d.transactionId?d.transactionId:null;return{ready:d?.schemaVersion===1&&d.requestId===a&&String(d.stageHash??"").toLowerCase()===b&&"string"==typeof e&&e.length>0,requestId:a,stageHash:b,transactionId:e}}function G(a,b){let c=F(),d=a&&g.test(a)?p(a):null,e=d?q(d):null,h=d?m(d.resultPath):null,i=d&&e?r(d,e):null,j=d&&e?function(a,b){let c=m((0,f.join)(a.maintenanceDirectory,"cleanup.json"));if(!c||1!==c.schemaVersion||"runtime-transaction"!==c.owner||c.requestId!==a.requestId||c.stageHash!==b.stageHash||"ARTIFACT_CLEANUP"!==c.phase)return null;let d=c.status;if("running"!==d&&"succeeded"!==d&&"failed"!==d&&"skipped"!==d&&"pending-approval"!==d)return null;let e=Number(c.ownerPid),g=Number(c.completedCount),h=Number(c.totalCount),i=Number(c.removedCount),j=Number(c.keptCount),k=Number(c.elapsedSeconds);if(!Number.isInteger(e)||e<=0||!Number.isInteger(g)||g<0||!Number.isInteger(h)||h<g||!Number.isInteger(i)||i<0||!Number.isInteger(j)||j<0||!Number.isFinite(k)||k<0||"succeeded"===d&&g!==h)return null;let l=null===c.currentTarget?null:String(c.currentTarget??"");if(null!==l&&!l)return null;let n=String(c.startedAtUtc??""),o=String(c.updatedAtUtc??""),p=null===c.finishedAtUtc?null:String(c.finishedAtUtc??"");return Number.isFinite(Date.parse(n))&&Number.isFinite(Date.parse(o))&&(null===p||Number.isFinite(Date.parse(p)))?{schemaVersion:1,owner:"runtime-transaction",ownerPid:e,requestId:a.requestId,stageHash:b.stageHash,phase:"ARTIFACT_CLEANUP",status:d,reason:null===c.reason?null:String(c.reason??""),startedAtUtc:n,updatedAtUtc:o,finishedAtUtc:p,currentTarget:l,completedCount:g,totalCount:h,removedCount:i,keptCount:j,elapsedSeconds:k,failureCount:Array.isArray(c.failures)?c.failures.length:0}:null}(d,e):null,k=b?.toLowerCase()||null,l=null!==D();return{schemaVersion:2,phase:c.ready&&c.requestId===a&&c.stageHash===k?"SERVICE_READY":e?.phase??"IDLE",service:c,mutationBlocked:l,deploymentCompleted:i?.completed===!0,writeSafe:i?.writeSafe===!0,cleanup:j,terminalStatus:h&&"string"==typeof h.status?h.status:null,terminalError:h&&"string"==typeof h.error?h.error:null}}},8102:(a,b,c)=>{c.d(b,{$:()=>g});var d=c(55511),e=c(29021),f=c(33873);function g(a,b){let c=(0,f.dirname)(a),g=(0,f.join)(c,`.${(0,f.basename)(a)}-${(0,d.randomUUID)()}.tmp`),h=!1;try{(0,e.writeFileSync)(g,b,{encoding:"utf8",flag:"wx",mode:384,flush:!0}),(0,e.renameSync)(g,a)}catch(a){throw h=!0,a}finally{try{(0,e.unlinkSync)(g)}catch(a){if("ENOENT"!==a.code&&!h)throw a}}}},18904:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{I:()=>i,p:()=>h});var e=c(88692),f=a([e]);function g(a,b){return a.provider===b.provider&&a.id===b.modelId}async function h(a,b,c){let d=(b??[]).map(a=>a.trim()).filter(Boolean);if(0===d.length)return{visible:a.getAvailable(),scopedModels:[],thinkingLevelPins:{},warnings:[]};let f=await (0,e.resolveModelScope)(d,a,void 0,c),g=[];if(await Promise.all(d.map(async b=>{let d=await (0,e.resolveModelScope)([b],a,void 0,c);0===d.length&&g.push(`No model matches "${b}" in enabledModels.`)})),0===f.length)return{visible:a.getAvailable(),scopedModels:[],thinkingLevelPins:{},warnings:g};let h={};for(let a of f)a.thinkingLevel&&(h[`${a.model.provider}/${a.model.id}`]=a.thinkingLevel);return{visible:f.map(a=>a.model),scopedModels:f,thinkingLevelPins:h,warnings:g}}function i(a,b={}){let c=b.requestedModel,d=b.defaultModel,e=c?a.visible.find(a=>g(a,c)):void 0;if(c&&!e)throw Error(`Model is not available in the enabled scope: ${c.provider}/${c.modelId}`);let f=e?a.scopedModels.find(a=>a.model===e||g(a.model,{provider:e.provider,modelId:e.id})):void 0,h=!e&&d?a.scopedModels.find(a=>g(a.model,d)):void 0,j=e?void 0:h??a.scopedModels[0],k=e||j||!d?void 0:a.visible.find(a=>g(a,d)),l=e??j?.model??k,m=f??j,n=b.thinkingLevel??m?.thinkingLevel;return{...l?{model:l}:{},...n?{thinkingLevel:n}:{},scopedModels:[...a.scopedModels]}}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},23892:(a,b,c)=>{c.d(b,{x:()=>d});let d=["implSonnet","implOpus","implDeepSeek","makerHardUiOpus","makerHardCodeOpus","makerHardCodeSonnet"]},25429:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Ex:()=>k,Ff:()=>j,R3:()=>l,Ro:()=>m});var e=c(73079),f=c(88692),g=c(96282),h=c(23892),i=a([e,f,g]);function j(a){let b=(0,g.parseModelString)(a.getModelRole("default")??"");if(!b)return;let c=void 0===b.thinkingLevel||"auto"===b.thinkingLevel?void 0:b.thinkingLevel;return{provider:b.provider,modelId:b.id,...c?{thinkingLevel:c}:{}}}function k(a){let b=new Set,c=[];for(let d of(0,e.getKnownRoleIds)(a)){let e=function(a){if(!a)return;let b=a.indexOf("/");if(b<=0)return;let c=a.slice(b+1).split(":")[0];if(c)return{provider:a.slice(0,b),modelId:c}}(a.getModelRole(d));if(!e)continue;let f=`${e.provider}/${e.modelId}`;b.has(f)||(b.add(f),c.push(e))}return c}function l(a,b,c){let d=new Set(e.MODEL_ROLE_IDS),g=(0,e.getKnownRoleIds)(a),i=new Set(g);return[...g,...h.x.filter(a=>!i.has(a))].map(g=>{var h,i;let j=(0,e.getRoleInfo)(g,a),k=a.getModelRole(g),l=(0,e.isKindRole)(g)?(0,e.roleCandidatePool)(g,a,c):b,m=k?(0,f.resolveModelRoleValue)(k,l,{settings:a}):void 0,n=m?.model?m.warning:m?m.warning??`No available model matches "${k}". The saved assignment is kept.`:void 0;return{role:g,...j.tag?{tag:j.tag}:{},name:j.name,...j.color?{color:String(j.color)}:{},builtin:d.has(g),hidden:!!e.MODEL_ROLES[g]?.hidden,...k?{selector:k}:{},source:a.getModelRoleSource(g),provenance:a.getModelRoleProvenance(g),...m?.model?{resolved:(h=m.model,i=m.thinkingLevel,{provider:h.provider,modelId:h.id,...h.name?{name:h.name}:{},...i?{thinkingLevel:i}:{}})}:{},...n?{warning:n}:{}}})}function m(a,b,c,d){"project"===d?c?a.setProjectModelRole(b,c):a.clearProjectModelRole(b):a.setModelRole(b,c)}[e,f,g]=i.then?(await i)():i,d()}catch(a){d(a)}})},28967:(a,b,c)=>{function d(){return globalThis.__ompModelsCacheState||(globalThis.__ompModelsCacheState={entries:new Map,inFlight:new Map,generation:0}),globalThis.__ompModelsCacheState}function e(){let a=d();a.generation+=1,a.entries.clear(),a.inFlight.clear()}function f(a,b){return b?{...a,modelError:b}:a}function g(a){return{...a,modelError:"Model list is temporarily unavailable. Check your configuration and try again."}}function h(a,b){let c=d(),e=c.entries.get(a);if(e){if(e.expiresAt>Date.now())return Promise.resolve(e.data);c.entries.delete(a)}let f=c.inFlight.get(a);if(f)return f;let g=c.generation,h=Promise.resolve().then(b).then(b=>{if(c.generation===g&&c.inFlight.get(a)===h){let d=Date.now();for(let[a,b]of c.entries)b.expiresAt<=d&&c.entries.delete(a);for(;c.entries.size>=32;){let a=c.entries.keys().next().value;if(void 0===a)break;c.entries.delete(a)}c.entries.set(a,{data:b,expiresAt:d+6e4})}return b}).finally(()=>{c.inFlight.get(a)===h&&c.inFlight.delete(a)});return c.inFlight.set(a,h),h}c.d(b,{Fw:()=>g,Mx:()=>f,kn:()=>e,rC:()=>h})},39873:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{zd:()=>i});var e=c(19819),f=a([e]);e=(f.then?(await f)():f)[0];let g=new Set(["set","show","pause","resume","drop","budget"]),h=["interactive","web"];class i{#a;#b;#c;#d;#e;#f;#g;#h;#i;#j;constructor(a,b){this.#e=!1,this.#f=!1,this.#g=!1,this.#h=!1,this.#i=!1,this.#a=a,this.#b=b}getStatus(){var a;return a=this.#a.getGoalModeState?.(),a?.goal?{objective:a.goal.objective,status:a.goal.status,enabled:!0===a.enabled,tokensUsed:a.goal.tokensUsed,...void 0!==a.goal.tokenBudget?{tokenBudget:a.goal.tokenBudget}:{},timeUsedSeconds:a.goal.timeUsedSeconds}:null}get enabled(){return this.#a.getGoalModeState?.()?.enabled===!0}dispose(){this.#i=!0,this.#k()}restore(){return this.#j??=this.#l(),this.#j}async #l(){if(this.#a.getGoalModeState?.())return;let a=this.#m();if(a?.mode!=="goal"&&a?.mode!=="goal_paused")return;if(!this.#n()){this.#a.goalRuntime.clearAccounting(),this.#a.sessionManager.appendModeChange("none");return}let b=function(a){if(!a||"object"!=typeof a)return;let b=a.goal;if(b&&"object"==typeof b&&"string"==typeof b.id&&"string"==typeof b.objective&&"string"==typeof b.status&&"number"==typeof b.tokensUsed&&"number"==typeof b.timeUsedSeconds&&"number"==typeof b.createdAt&&"number"==typeof b.updatedAt)return{id:b.id,objective:b.objective,status:b.status,tokenBudget:"number"==typeof b.tokenBudget?b.tokenBudget:void 0,tokensUsed:b.tokensUsed,timeUsedSeconds:b.timeUsedSeconds,createdAt:b.createdAt,updatedAt:b.updatedAt}}(a.data);if(!b)return void this.#a.sessionManager.appendModeChange("none");this.#a.setGoalModeState?.({enabled:"goal"===a.mode,mode:"active",goal:b});let c=await this.#a.goalRuntime.onThreadResumed();c?.goal&&(await this.#o(),this.#p())}async handleCommand(a){if(await this.restore().catch(()=>{}),!this.#n())return this.#q("Goal mode is disabled. Enable it in settings (goal.enabled).");if(this.#a.getPlanModeState?.()?.enabled)return this.#q("Exit plan mode first.");let{sub:b,rest:c}=function(a){let b=a.trim();if(!b)return{rest:""};let c=/^(\S+)(?:\s+([\s\S]*))?$/.exec(b);if(!c)return{rest:b};let d=c[1].toLowerCase();return g.has(d)?{sub:d,rest:c[2]?.trim()??""}:{rest:b}}(a);switch(b){case"show":return this.#r();case"pause":return await this.#s();case"resume":return await this.#t();case"drop":return await this.#u();case"budget":return await this.#v(c);case"set":return await this.#w(c)}let d=this.#a.getGoalModeState?.();return c?d?.enabled?this.#q("Goal mode is already active. Use /goal set to replace it, or /goal drop to start over."):this.#x()?this.#q("Resume the current goal first, or drop it before setting a new objective."):await this.#y(c):d?this.#r():this.#q("Usage: /goal <objective>, or /goal set <objective>.")}reconcileToolNames(a){return this.enabled||this.#x()?(this.#c=a.filter(a=>"goal"!==a),[...new Set([...a,"goal"])]):a}onUserPrompt(){this.#g=!1,this.#h=!1,this.#k()}onAbort(){this.#h=!0,this.#k()}async handleSessionEvent(a){switch(a.type){case"agent_start":this.#f=!1,this.#k();return;case"tool_execution_start":this.#f=!0,this.#e||(this.#g=!1);return;case"goal_updated":{let b=a.state;if(b?.goal?.status==="dropped")return void await this.#z({reason:"dropped"});b?.enabled&&!this.#c&&(this.#c=this.#a.getEnabledToolNames().filter(a=>"goal"!==a)),b?.enabled||this.#k(),this.#p();return}case"agent_end":if(this.#e&&(this.#g=!this.#f,this.#e=!1),this.#a.getGoalModeState?.()?.mode==="exiting")return void await this.#z({reason:"completed"});this.#A();return;default:return}}#r(){var a;let b,c,d,e,f,g=this.getStatus();if(!g)return this.#q("No goal set.");return{message:(e=g.tokensUsed.toLocaleString(),f=void 0!==g.tokenBudget?`${e} / ${g.tokenBudget.toLocaleString()} (${Math.max(0,g.tokenBudget-g.tokensUsed).toLocaleString()} left)`:`${e} (no budget)`,`Objective: ${g.objective}
4
+ `)}finally{(0,d.closeSync)(e)}}catch(a){if("EEXIST"===a.code)return g("already-claimed");throw a}return{notice:!0,requestId:a.requestId,stageHash:a.stageHash,sessionId:b.initiatorSessionId,terminalError:o}}function C(a){let b=p(a.requestId);if(!b)return;let c=(0,f.join)(b.maintenanceDirectory,"wake");try{n((0,f.join)(c,`${a.sessionId}.failure-error.json`),{schemaVersion:1,requestId:a.requestId,stageHash:a.stageHash,clientId:a.clientId,sessionId:a.sessionId,stage:a.stage,error:a.error instanceof Error?{name:a.error.name,message:a.error.message,stack:a.error.stack??null}:{name:"unknown",message:String(a.error),stack:null},failedAtUtc:new Date().toISOString()})}finally{try{(0,d.rmSync)((0,f.join)(c,`${a.sessionId}.failure.json`),{force:!0})}catch{}}}function D(){let a=s();return a?{requestId:a.request.requestId,stageHash:a.command.stageHash,phase:a.command.phase}:null}function E(a){return[...new Set(a.filter(a=>"string"==typeof a&&a.trim()).map(a=>a.trim()))].sort()}function F(a,b=[]){let c=E(a),d=globalThis.__cueloRuntimeServer;n((0,f.join)(l(),"runtime-activity",`${process.pid}.json`),{schemaVersion:2,processId:process.pid,processStartedAtUtc:new Date(Date.now()-1e3*process.uptime()).toISOString(),updatedAtUtc:new Date().toISOString(),runningSessionIds:c,...d?{recovery:{eligible:!0,origin:d.origin,startedAtMs:d.startedAtMs,waitingSessionIds:E(b).filter(a=>c.includes(a))}}:{}})}function G(){let a=process.env.CUELO_DEPLOY_REQUEST_ID?.trim()||null,b=process.env.CUELO_DEPLOY_STAGE_HASH?.trim().toLowerCase()||null,c=process.env.CUELO_DEPLOY_MARKER_PATH?.trim()||null;if(!a||!b||!c||!g.test(a)||!i.test(b))return{ready:!1,requestId:a,stageHash:b,transactionId:null};let d=m((0,f.resolve)(c)),e=d&&"string"==typeof d.transactionId?d.transactionId:null;return{ready:d?.schemaVersion===1&&d.requestId===a&&String(d.stageHash??"").toLowerCase()===b&&"string"==typeof e&&e.length>0,requestId:a,stageHash:b,transactionId:e}}function H(a,b){let c=G(),d=a&&g.test(a)?p(a):null,e=d?q(d):null,h=d?m(d.resultPath):null,i=d&&e?r(d,e):null,j=d&&e?function(a,b){let c=m((0,f.join)(a.maintenanceDirectory,"cleanup.json"));if(!c||1!==c.schemaVersion||"runtime-transaction"!==c.owner||c.requestId!==a.requestId||c.stageHash!==b.stageHash||"ARTIFACT_CLEANUP"!==c.phase)return null;let d=c.status;if("running"!==d&&"succeeded"!==d&&"failed"!==d&&"skipped"!==d&&"pending-approval"!==d)return null;let e=Number(c.ownerPid),g=Number(c.completedCount),h=Number(c.totalCount),i=Number(c.removedCount),j=Number(c.keptCount),k=Number(c.elapsedSeconds);if(!Number.isInteger(e)||e<=0||!Number.isInteger(g)||g<0||!Number.isInteger(h)||h<g||!Number.isInteger(i)||i<0||!Number.isInteger(j)||j<0||!Number.isFinite(k)||k<0||"succeeded"===d&&g!==h)return null;let l=null===c.currentTarget?null:String(c.currentTarget??"");if(null!==l&&!l)return null;let n=String(c.startedAtUtc??""),o=String(c.updatedAtUtc??""),p=null===c.finishedAtUtc?null:String(c.finishedAtUtc??"");return Number.isFinite(Date.parse(n))&&Number.isFinite(Date.parse(o))&&(null===p||Number.isFinite(Date.parse(p)))?{schemaVersion:1,owner:"runtime-transaction",ownerPid:e,requestId:a.requestId,stageHash:b.stageHash,phase:"ARTIFACT_CLEANUP",status:d,reason:null===c.reason?null:String(c.reason??""),startedAtUtc:n,updatedAtUtc:o,finishedAtUtc:p,currentTarget:l,completedCount:g,totalCount:h,removedCount:i,keptCount:j,elapsedSeconds:k,failureCount:Array.isArray(c.failures)?c.failures.length:0}:null}(d,e):null,k=b?.toLowerCase()||null,l=null!==D();return{schemaVersion:2,phase:c.ready&&c.requestId===a&&c.stageHash===k?"SERVICE_READY":e?.phase??"IDLE",service:c,mutationBlocked:l,deploymentCompleted:i?.completed===!0,writeSafe:i?.writeSafe===!0,cleanup:j,terminalStatus:h&&"string"==typeof h.status?h.status:null,terminalError:h&&"string"==typeof h.error?h.error:null}}},8102:(a,b,c)=>{c.d(b,{$:()=>g});var d=c(55511),e=c(29021),f=c(33873);function g(a,b){let c=(0,f.dirname)(a),g=(0,f.join)(c,`.${(0,f.basename)(a)}-${(0,d.randomUUID)()}.tmp`),h=!1;try{(0,e.writeFileSync)(g,b,{encoding:"utf8",flag:"wx",mode:384,flush:!0}),(0,e.renameSync)(g,a)}catch(a){throw h=!0,a}finally{try{(0,e.unlinkSync)(g)}catch(a){if("ENOENT"!==a.code&&!h)throw a}}}},18904:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{I:()=>i,p:()=>h});var e=c(88692),f=a([e]);function g(a,b){return a.provider===b.provider&&a.id===b.modelId}async function h(a,b,c){let d=(b??[]).map(a=>a.trim()).filter(Boolean);if(0===d.length)return{visible:a.getAvailable(),scopedModels:[],thinkingLevelPins:{},warnings:[]};let f=await (0,e.resolveModelScope)(d,a,void 0,c),g=[];if(await Promise.all(d.map(async b=>{let d=await (0,e.resolveModelScope)([b],a,void 0,c);0===d.length&&g.push(`No model matches "${b}" in enabledModels.`)})),0===f.length)return{visible:a.getAvailable(),scopedModels:[],thinkingLevelPins:{},warnings:g};let h={};for(let a of f)a.thinkingLevel&&(h[`${a.model.provider}/${a.model.id}`]=a.thinkingLevel);return{visible:f.map(a=>a.model),scopedModels:f,thinkingLevelPins:h,warnings:g}}function i(a,b={}){let c=b.requestedModel,d=b.defaultModel,e=c?a.visible.find(a=>g(a,c)):void 0;if(c&&!e)throw Error(`Model is not available in the enabled scope: ${c.provider}/${c.modelId}`);let f=e?a.scopedModels.find(a=>a.model===e||g(a.model,{provider:e.provider,modelId:e.id})):void 0,h=!e&&d?a.scopedModels.find(a=>g(a.model,d)):void 0,j=e?void 0:h??a.scopedModels[0],k=e||j||!d?void 0:a.visible.find(a=>g(a,d)),l=e??j?.model??k,m=f??j,n=b.thinkingLevel??m?.thinkingLevel;return{...l?{model:l}:{},...n?{thinkingLevel:n}:{},scopedModels:[...a.scopedModels]}}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},23892:(a,b,c)=>{c.d(b,{x:()=>d});let d=["implSonnet","implOpus","implDeepSeek","makerHardUiOpus","makerHardCodeOpus","makerHardCodeSonnet"]},25429:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Ex:()=>k,Ff:()=>j,R3:()=>l,Ro:()=>m});var e=c(73079),f=c(88692),g=c(96282),h=c(23892),i=a([e,f,g]);function j(a){let b=(0,g.parseModelString)(a.getModelRole("default")??"");if(!b)return;let c=void 0===b.thinkingLevel||"auto"===b.thinkingLevel?void 0:b.thinkingLevel;return{provider:b.provider,modelId:b.id,...c?{thinkingLevel:c}:{}}}function k(a){let b=new Set,c=[];for(let d of(0,e.getKnownRoleIds)(a)){let e=function(a){if(!a)return;let b=a.indexOf("/");if(b<=0)return;let c=a.slice(b+1).split(":")[0];if(c)return{provider:a.slice(0,b),modelId:c}}(a.getModelRole(d));if(!e)continue;let f=`${e.provider}/${e.modelId}`;b.has(f)||(b.add(f),c.push(e))}return c}function l(a,b,c){let d=new Set(e.MODEL_ROLE_IDS),g=(0,e.getKnownRoleIds)(a),i=new Set(g);return[...g,...h.x.filter(a=>!i.has(a))].map(g=>{var h,i;let j=(0,e.getRoleInfo)(g,a),k=a.getModelRole(g),l=(0,e.isKindRole)(g)?(0,e.roleCandidatePool)(g,a,c):b,m=k?(0,f.resolveModelRoleValue)(k,l,{settings:a}):void 0,n=m?.model?m.warning:m?m.warning??`No available model matches "${k}". The saved assignment is kept.`:void 0;return{role:g,...j.tag?{tag:j.tag}:{},name:j.name,...j.color?{color:String(j.color)}:{},builtin:d.has(g),hidden:!!e.MODEL_ROLES[g]?.hidden,...k?{selector:k}:{},source:a.getModelRoleSource(g),provenance:a.getModelRoleProvenance(g),...m?.model?{resolved:(h=m.model,i=m.thinkingLevel,{provider:h.provider,modelId:h.id,...h.name?{name:h.name}:{},...i?{thinkingLevel:i}:{}})}:{},...n?{warning:n}:{}}})}function m(a,b,c,d){"project"===d?c?a.setProjectModelRole(b,c):a.clearProjectModelRole(b):a.setModelRole(b,c)}[e,f,g]=i.then?(await i)():i,d()}catch(a){d(a)}})},28967:(a,b,c)=>{function d(){return globalThis.__ompModelsCacheState||(globalThis.__ompModelsCacheState={entries:new Map,inFlight:new Map,generation:0}),globalThis.__ompModelsCacheState}function e(){let a=d();a.generation+=1,a.entries.clear(),a.inFlight.clear()}function f(a,b){return b?{...a,modelError:b}:a}function g(a){return{...a,modelError:"Model list is temporarily unavailable. Check your configuration and try again."}}function h(a,b){let c=d(),e=c.entries.get(a);if(e){if(e.expiresAt>Date.now())return Promise.resolve(e.data);c.entries.delete(a)}let f=c.inFlight.get(a);if(f)return f;let g=c.generation,h=Promise.resolve().then(b).then(b=>{if(c.generation===g&&c.inFlight.get(a)===h){let d=Date.now();for(let[a,b]of c.entries)b.expiresAt<=d&&c.entries.delete(a);for(;c.entries.size>=32;){let a=c.entries.keys().next().value;if(void 0===a)break;c.entries.delete(a)}c.entries.set(a,{data:b,expiresAt:d+6e4})}return b}).finally(()=>{c.inFlight.get(a)===h&&c.inFlight.delete(a)});return c.inFlight.set(a,h),h}c.d(b,{Fw:()=>g,Mx:()=>f,kn:()=>e,rC:()=>h})},39873:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{zd:()=>i});var e=c(19819),f=a([e]);e=(f.then?(await f)():f)[0];let g=new Set(["set","show","pause","resume","drop","budget"]),h=["interactive","web"];class i{#a;#b;#c;#d;#e;#f;#g;#h;#i;#j;constructor(a,b){this.#e=!1,this.#f=!1,this.#g=!1,this.#h=!1,this.#i=!1,this.#a=a,this.#b=b}getStatus(){var a;return a=this.#a.getGoalModeState?.(),a?.goal?{objective:a.goal.objective,status:a.goal.status,enabled:!0===a.enabled,tokensUsed:a.goal.tokensUsed,...void 0!==a.goal.tokenBudget?{tokenBudget:a.goal.tokenBudget}:{},timeUsedSeconds:a.goal.timeUsedSeconds}:null}get enabled(){return this.#a.getGoalModeState?.()?.enabled===!0}dispose(){this.#i=!0,this.#k()}restore(){return this.#j??=this.#l(),this.#j}async #l(){if(this.#a.getGoalModeState?.())return;let a=this.#m();if(a?.mode!=="goal"&&a?.mode!=="goal_paused")return;if(!this.#n()){this.#a.goalRuntime.clearAccounting(),this.#a.sessionManager.appendModeChange("none");return}let b=function(a){if(!a||"object"!=typeof a)return;let b=a.goal;if(b&&"object"==typeof b&&"string"==typeof b.id&&"string"==typeof b.objective&&"string"==typeof b.status&&"number"==typeof b.tokensUsed&&"number"==typeof b.timeUsedSeconds&&"number"==typeof b.createdAt&&"number"==typeof b.updatedAt)return{id:b.id,objective:b.objective,status:b.status,tokenBudget:"number"==typeof b.tokenBudget?b.tokenBudget:void 0,tokensUsed:b.tokensUsed,timeUsedSeconds:b.timeUsedSeconds,createdAt:b.createdAt,updatedAt:b.updatedAt}}(a.data);if(!b)return void this.#a.sessionManager.appendModeChange("none");this.#a.setGoalModeState?.({enabled:"goal"===a.mode,mode:"active",goal:b});let c=await this.#a.goalRuntime.onThreadResumed();c?.goal&&(await this.#o(),this.#p())}async handleCommand(a){if(await this.restore().catch(()=>{}),!this.#n())return this.#q("Goal mode is disabled. Enable it in settings (goal.enabled).");if(this.#a.getPlanModeState?.()?.enabled)return this.#q("Exit plan mode first.");let{sub:b,rest:c}=function(a){let b=a.trim();if(!b)return{rest:""};let c=/^(\S+)(?:\s+([\s\S]*))?$/.exec(b);if(!c)return{rest:b};let d=c[1].toLowerCase();return g.has(d)?{sub:d,rest:c[2]?.trim()??""}:{rest:b}}(a);switch(b){case"show":return this.#r();case"pause":return await this.#s();case"resume":return await this.#t();case"drop":return await this.#u();case"budget":return await this.#v(c);case"set":return await this.#w(c)}let d=this.#a.getGoalModeState?.();return c?d?.enabled?this.#q("Goal mode is already active. Use /goal set to replace it, or /goal drop to start over."):this.#x()?this.#q("Resume the current goal first, or drop it before setting a new objective."):await this.#y(c):d?this.#r():this.#q("Usage: /goal <objective>, or /goal set <objective>.")}reconcileToolNames(a){return this.enabled||this.#x()?(this.#c=a.filter(a=>"goal"!==a),[...new Set([...a,"goal"])]):a}onUserPrompt(){this.#g=!1,this.#h=!1,this.#k()}onAbort(){this.#h=!0,this.#k()}async handleSessionEvent(a){switch(a.type){case"agent_start":this.#f=!1,this.#k();return;case"tool_execution_start":this.#f=!0,this.#e||(this.#g=!1);return;case"goal_updated":{let b=a.state;if(b?.goal?.status==="dropped")return void await this.#z({reason:"dropped"});b?.enabled&&!this.#c&&(this.#c=this.#a.getEnabledToolNames().filter(a=>"goal"!==a)),b?.enabled||this.#k(),this.#p();return}case"agent_end":if(this.#e&&(this.#g=!this.#f,this.#e=!1),this.#a.getGoalModeState?.()?.mode==="exiting")return void await this.#z({reason:"completed"});this.#A();return;default:return}}#r(){var a;let b,c,d,e,f,g=this.getStatus();if(!g)return this.#q("No goal set.");return{message:(e=g.tokensUsed.toLocaleString(),f=void 0!==g.tokenBudget?`${e} / ${g.tokenBudget.toLocaleString()} (${Math.max(0,g.tokenBudget-g.tokensUsed).toLocaleString()} left)`:`${e} (no budget)`,`Objective: ${g.objective}
5
5
  Status: ${g.status}${g.enabled?"":" (paused)"}
6
6
  Tokens: ${f}
7
- Time spent: ${a=g.timeUsedSeconds,b=Math.max(0,Math.round(a)),c=Math.floor(b/3600),d=Math.floor(b%3600/60),c>0?`${c}h ${d}m`:d>0?`${d}m ${b%60}s`:`${b}s`}`),status:g}}async #w(a){if(!a)return this.#q("Usage: /goal set <objective>");if(!this.enabled&&this.#x())return this.#q("Resume the current goal first, or drop it before setting a new objective.");if(!this.enabled)return await this.#y(a);let b=await this.#a.goalRuntime.replaceGoal({objective:a});return this.#a.setGoalModeState?.(b),this.#g=!1,this.#h=!1,this.#a.isStreaming&&await this.#a.sendGoalModeContext({deliverAs:"steer"}),{message:"Goal replaced.",prompt:a,status:this.getStatus()}}async #y(a){let b=this.#a.getEnabledToolNames().filter(a=>"goal"!==a),c=await this.#a.goalRuntime.createGoal({objective:a});return this.#c=b,await this.#a.setActiveToolsByName([...new Set([...b,"goal"])]),this.#a.setGoalModeState?.(c),this.#g=!1,this.#h=!1,this.#a.isStreaming&&await this.#a.sendGoalModeContext({deliverAs:"steer"}),this.#p(),{message:"Goal mode enabled.",prompt:a,status:this.getStatus()}}async #s(){return this.enabled?(await this.#a.goalRuntime.pauseGoal(),await this.#z({reason:"paused"}),{message:"Goal mode paused.",status:this.getStatus()}):this.#q("No active goal to pause.")}async #t(){if(!this.#x())return this.#q("No paused goal to resume.");let a=this.#a.getEnabledToolNames().filter(a=>"goal"!==a),b=await this.#a.goalRuntime.resumeGoal();return this.#c=a,await this.#a.setActiveToolsByName([...new Set([...a,"goal"])]),this.#a.setGoalModeState?.(b),this.#g=!1,this.#h=!1,this.#p(),this.#A(),{message:"Goal mode resumed.",status:this.getStatus()}}async #u(){return this.enabled||this.#x()?(await this.#a.goalRuntime.dropGoal(),await this.#z({reason:"dropped"}),{message:"Goal dropped.",status:this.getStatus()}):this.#q("No goal to drop.")}async #v(a){let b=this.#a.getGoalModeState?.();if(!this.enabled||!b?.enabled)return this.#q(this.#x()?"Resume the goal before adjusting the budget.":"No active goal.");if("complete"===b.goal.status)return this.#q("Goal is already complete.");if(!a)return this.#q("Usage: /goal budget <N|off>");let{budget:c,error:d}=function(a){let b=a.trim().toLowerCase();if("off"===b)return{};let c=Number.parseInt(b,10);return!Number.isInteger(c)||c<=0||String(c)!==b?{error:"Goal budget must be a positive integer or `off`."}:{budget:c}}(a);return d?this.#q(d):(await this.#a.goalRuntime.onBudgetMutated(c),this.#g=!1,this.#p(),this.#A(),{message:void 0===c?"Goal budget cleared.":`Goal budget set to ${c.toLocaleString()}.`,status:this.getStatus()})}async #z(a){let b=this.#c;if(b&&await this.#a.setActiveToolsByName(b),"completed"===a.reason){let a=this.#a.getGoalModeState?.()?.goal;this.#a.setGoalModeState?.(void 0),this.#a.sessionManager.appendModeChange("none"),this.#a.sessionManager.appendCustomEntry("goal-completed",{objective:a?.objective,tokensUsed:a?.tokensUsed,tokenBudget:a?.tokenBudget,timeUsedSeconds:a?.timeUsedSeconds})}this.#c=void 0,this.#e=!1,this.#k(),this.#p()}async #o(){let a=this.#a.getEnabledToolNames().filter(a=>"goal"!==a);this.#c=a,await this.#a.setActiveToolsByName([...new Set([...a,"goal"])])}#A(){var a;if(this.#k(),this.#i||this.#h||(a=e.cfgGoalContinuationModes.get(this.#a.settings),!(Array.isArray(a)&&h.some(b=>a.includes(b)))||this.#a.getPlanModeState?.()?.enabled||this.#g))return;let b=this.#a.getGoalModeState?.();!b?.enabled||"active"!==b.goal.status||this.#a.goalRuntime.buildContinuationPrompt()&&(this.#d=setTimeout(()=>{this.#d=void 0,this.#B()},this.#b.continuationDelayMs??800))}async #B(){if(this.#i||this.#h||this.#g||this.#b.isBusy())return;let a=this.#a.getGoalModeState?.();if(!a?.enabled||"active"!==a.goal.status)return;let b=this.#a.goalRuntime.buildContinuationPrompt();if(b){this.#e=!0;try{await this.#b.runContinuation(b)}catch{this.#e=!1}}}#k(){this.#d&&(clearTimeout(this.#d),this.#d=void 0)}#q(a){return{error:a,status:this.getStatus()}}#n(){return!1!==e.cfgGoalEnabled.get(this.#a.settings)}#x(){let a=this.#a.getGoalModeState?.();if(a?.goal&&!a.enabled&&"paused"===a.goal.status)return a}#m(){let a=this.#a.sessionManager.getEntries();for(let b=a.length-1;b>=0;b-=1)if(a[b]?.type==="mode_change")return a[b]}#p(){this.#b.onStatusChange?.(this.getStatus())}}d()}catch(a){d(a)}})},41761:(a,b,c)=>{c.d(b,{C1:()=>d});let d=["read","bash","edit","write","grep","glob"];Object.fromEntries(d.map(a=>[a,!0]))},45935:(a,b,c)=>{c.d(b,{Hm:()=>p,Q:()=>h,RI:()=>o,Uc:()=>m,rt:()=>n});var d=c(28967),e=c(72498);function f(){return globalThis.__cueloProjectTrustChanges??=new Map,globalThis.__cueloProjectTrustChanges}function g(){return globalThis.__cueloProjectTrustErrors??=new Map,globalThis.__cueloProjectTrustErrors}class h extends Error{constructor(){super("This project has no resources that require trust")}}function i(a,b){return[...new Set(a.sessions())].filter(a=>(0,e.LV)(a.cwd)===b)}function j(a){console.error("[cuelo] failed to shut down a session after a project trust change:",a instanceof Error?a.message:a)}function k(a,b,c){let h=i(a,b),k=(0,e.Y1)(b,c.agentDir),l=!1;for(let a of h)!k.trusted&&a.projectCodeLoaded&&(a.isSafelyIdle()&&a.beginClose({onlyWhenIdle:!0})?a.shutdown().catch(j):(l=!0,a.watchBackgroundWork()));if(c.grant){if(!k.requiresTrust||k.trusted)return void f().delete(b);if(a.isStarting(b))return;let i=h.filter(a=>!a.isSafelyIdle());if(i.length>0){for(let a of i)a.watchBackgroundWork();return}let l=[];for(let a of h){if(!a.beginClose({onlyWhenIdle:!0})){for(let a of l)a.cancelClose();return}l.push(a)}f().delete(b);try{(0,e.er)(b,c.agentDir)}catch(a){for(let a of l)a.cancelClose();g().set(b,a instanceof Error?a.message:String(a));return}for(let a of((0,d.kn)(),l))a.shutdown().catch(j);return}l||a.isStarting(b)||f().delete(b)}let l=!1;function m(a){let b=f();if(0!==b.size&&!l){l=!0;try{for(let[c,d]of[...b])try{k(a,c,d)}catch(a){console.error("[cuelo] failed to apply a project trust change:",a instanceof Error?a.message:a)}}finally{l=!1}}}function n(a){let b=f();if(0===b.size)return!1;let c=b.get((0,e.LV)(a));return void 0!==c&&!(0,e.Y1)(a,c.agentDir).trusted}function o(a,b,c){let d=(0,e.LV)(b),h=(0,e.Y1)(b,c),j=i(a,d),k=j.filter(a=>a.projectCodeLoaded).length,l=g().get(d),m=null;return f().get(d)?.grant?m="grant":h.requiresTrust&&!h.trusted&&k>0&&(m="revoke"),{...h,pending:m,runtime:{sessions:j.length,running:j.filter(a=>a.isRunning()).length,projectCodeLoaded:k},...l?{error:l}:{}}}function p(a,b,c,i){let j=(0,e.LV)(b),m=f();if(g().delete(j),"grant"===i){if(!(0,e.Y1)(b,c).requiresTrust)throw new h;m.set(j,{agentDir:c,grant:!0})}else"revoke"===i?(m.delete(j),(0,e.wK)(b,c,!1),(0,d.kn)(),m.set(j,{agentDir:c,grant:!1})):m.get(j)?.grant&&m.set(j,{agentDir:c,grant:!1});let n=m.get(j);if(n){l=!0;try{k(a,j,n)}finally{l=!1}}return o(a,b,c)}},53923:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{D:()=>i});var e=c(58505),f=c(4327),g=a([e,f]);function h(a,b){return(0,e.findConfigFile)(a,{user:!1,cwd:b})??(0,e.findConfigFile)(a,{user:!0,cwd:b})}async function i(a){let[b,c]=await Promise.all([(0,f.resolvePromptInput)(h("SYSTEM.md",a),"system prompt"),(0,f.resolvePromptInput)(h("APPEND_SYSTEM.md",a),"append system prompt")]);return{systemPrompt:b,appendPrompt:c}}[e,f]=g.then?(await g)():g,d()}catch(a){d(a)}})},56365:(a,b,c)=>{c.d(b,{G2:()=>d});function d(a,b){return a&&(void 0!==a.parentToolCallId&&void 0!==b.parentToolCallId?a.parentToolCallId===b.parentToolCallId:void 0===a.sessionFile||void 0===b.sessionFile||a.sessionFile===b.sessionFile)?{...b,index:a.index,agent:a.agent,agentSource:a.agentSource,description:a.description??b.description,task:a.task??b.task,assignment:a.assignment??b.assignment,sessionFile:b.sessionFile??a.sessionFile,parentToolCallId:b.parentToolCallId??a.parentToolCallId}:b}},56429:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{A4:()=>ag,Bp:()=>ah,CL:()=>aw,HG:()=>ai,KI:()=>R,MT:()=>ae,OF:()=>ak});var e=c(63411),f=c(92582),g=c(33594),h=c(94285),i=c(59895),j=c(28315),k=c(25167),l=c(14882),m=c(1740),n=c(9655),o=c(82512),p=c(78310),q=c(3330),r=c(34722),s=c(43696),t=c(90431),u=c(26854),v=c(55511),w=c(29021),x=c(33873),y=c(78970),z=c(36208),A=c(28967),B=c(18904),C=c(40402),D=c(72498),E=c(45935),F=c(53923),G=c(25429),H=c(38741),I=c(5908),J=c(41761),K=c(4157),L=c(39873),M=c(65667),N=c(56365),O=c(77356),P=c(71069),Q=a([e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,B,C,F,G,H,L,M]);function R(a){let b,c=null,d=!1,e=()=>{if(b&&(clearTimeout(b),b=void 0),d||!c)return;let e=c;c=null,a(e)};return{push:f=>{if(!d){if("message_update"===f.type){c=f,b||(b=setTimeout(()=>{b=void 0,e()},33));return}e(),a(f)}},flush:e,close:()=>{d=!0,c=null,clearTimeout(b),b=void 0}}}[e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,B,C,F,G,H,L,M]=Q.then?(await Q)():Q;let al=new Set(["agent_start","agent_end","agent_settled","auto_compaction_start","auto_compaction_end","compaction_start","compaction_end"]),am=new Set(["agent_end","agent_settled","auto_compaction_end","compaction_end"]),an={abort:!0,extension_ui_input:!0,extension_ui_response:!0,get_commands:!0,get_last_assistant_text:!0,get_session_stats:!0,get_state:!0,get_subagent_messages:!0,get_subagents:!0,get_tools:!0},ao={bash:!0,compact:!0,follow_up:!0,fork:!0,handoff:!0,prompt:!0,steer:!0},ap={set_model:!0,set_role_model:!0,set_thinking_level:!0,set_thinking_ceiling:!0,set_fast_mode:!0};async function S(a,b){let c=a.modelRegistry.authStorage;if(!c?.oauth)return{ok:!1,reason:"이 세션은 OAuth 계정 목록을 읽을 수 없습니다."};try{return await c.reload?.(),{ok:!0,accounts:c.oauth.accounts(b,a.sessionId)}}catch(a){return{ok:!1,reason:`계정 목록을 읽지 못했습니다: ${a instanceof Error?a.message:String(a)}`}}}async function T(a,b){let c=await S(a,b);return c.ok?{ok:!0,snapshot:{provider:b,credentialId:c.accounts.find(a=>a.active)?.credentialId}}:{ok:!1,reason:c.reason}}async function U(a,b){if(!b)return!1;let c=a.modelRegistry.authStorage;if(!c)return!1;try{if(void 0!==b.credentialId)return c.sessions?.pin(b.provider,a.sessionId,b.credentialId)??!1;return c.sessions?.release(b.provider,a.sessionId)??!1}catch{return!1}}async function V(a,b,c){if(!Number.isSafeInteger(c)||c<0)return{ok:!1,reason:`OAuth 저장 위치 ${String(c)}가 올바르지 않습니다.`};if(!a.modelRegistry.authStorage?.sessions)return{ok:!1,reason:"이 세션은 OAuth 계정 pin을 지원하지 않습니다."};let d=await S(a,b);if(!d.ok)return{ok:!1,reason:d.reason};if(0===d.accounts.length)return{ok:!1,reason:"저장된 OAuth 계정이 없습니다."};let e=d.accounts.find((a,b)=>(Number.isInteger(a.position)?a.position:b)===c);if(!e)return{ok:!1,reason:`${b} OAuth 저장 위치 ${c}의 계정이 없습니다.`};let f=!1;try{f=a.modelRegistry.authStorage.sessions.pin(b,a.sessionId,e.credentialId)}catch{f=!1}if(!f)return{ok:!1,reason:`${b} OAuth 저장 위치 ${c} 계정을 이 세션의 선호 계정으로 설정하지 못했습니다.`};let g=await S(a,b),h=g.ok?g.accounts.find((a,b)=>(Number.isInteger(a.position)?a.position:b)===c):void 0;return h?.active!==!0?{ok:!1,reason:`${b} OAuth 저장 위치 ${c}이 이 세션의 선호 계정으로 설정되지 않았습니다.`}:{ok:!0}}async function W(a,b){let c=await Y(a,b.previousModel,b.previousRole),d=void 0===b.account||await U(a,b.account),e=!0;if(void 0!==b.previousThinking&&a.configuredThinkingLevel()!==b.previousThinking){try{a.setThinkingLevel(b.previousThinking)}catch{}e=a.configuredThinkingLevel()===b.previousThinking}return{model:c,account:d,thinking:e}}function X(a){let b=[];return a.model||b.push("모델"),a.account||b.push("계정 선호"),a.thinking||b.push("thinking 강도"),0===b.length?"모델\xb7계정\xb7강도를 되돌렸습니다.":`${b.join("\xb7")} 복원에 실패했습니다 — 이전 상태로 돌아가지 않았습니다.`}async function Y(a,b,c){if(!b)return!1;let d=a.model;if(d?.provider===b.provider&&d?.id===b.id)return!0;try{return await a.setModel(b,c),!0}catch{return!1}}let aq=Object.fromEntries(J.C1.map(a=>[a,!0]));class ar extends f.Theme{constructor(){super({thinkingXhigh:""},{},"truecolor","unicode",{})}fg(...[,a]){return a}bg(...[,a]){return a}bold(a){return a}italic(a){return a}underline(a){return a}inverse(a){return a}strikethrough(a){return a}getFgAnsi(){return""}getBgAnsi(){return""}getThinkingBorderColor(){return a=>a}getBashModeBorderColor(){return a=>a}}let as=new ar,at=new u.KeybindingsManager(u.TUI_KEYBINDINGS);function Z(a,b){if(0===b.length)return[];let c=a.getAllToolNames().filter(a=>!0!==aq[a]);return[...new Set([...b,...c])]}function $(a,b,c){let d=c.name.trim();!d||b.has(d)||(b.add(d),a.push({...c,name:d}))}let au=["fork","goal"];async function _(a){let b=[],c=new Set;for(let a of au){let d=i.BUILTIN_SLASH_COMMAND_DEFS.find(b=>b.name===a);if(!d)continue;let e=d.inlineHint;$(b,c,{name:d.name,aliases:d.aliases,description:d.description,source:"builtin",...e?{input:{hint:e}}:{},...d.subcommands?{subcommands:d.subcommands}:{}})}for(let d of(await (0,g.buildAvailableSlashCommands)(a)))$(b,c,d);for(let d of a.promptTemplates)$(b,c,{name:d.name,description:d.description,source:"prompt",...d.source?{path:d.source}:{}});return b}function aa(a){let b="asyncJobManager"in a?a.asyncJobManager:void 0;if(b&&"object"==typeof b&&"getRunningJobs"in b&&"function"==typeof b.getRunningJobs&&"hasPendingDeliveries"in b&&"function"==typeof b.hasPendingDeliveries&&"waitForAll"in b&&"function"==typeof b.waitForAll)return b}async function ab(a,b){let{promise:c,resolve:d}=Promise.withResolvers(),e=setTimeout(()=>d(!1),Math.max(0,b-Date.now()));try{return await Promise.race([a.then(()=>!0),c])}finally{clearTimeout(e)}}class av{constructor(a,b){this.inner=a,this.listeners=[],this.pendingUiResponses=new Map,this.keepAliveListeners=new Set,this.pendingUiRequests=new Map,this.activeCustomUis=new Map,this.extensionStatuses=new Map,this.extensionWidgets=new Map,this.promptRunning=!1,this.modelMutations=0,this.presetMutation=!1,this.handoffRunning=!1,this.compactionStarted=null,this.extensionsBound=!1,this.extensionBindingPromise=null,this.extensionBindingError=null,this.forceEmptySystemPrompt=!1,this.unsubscribe=null,this.idleTimer=null,this.onDestroyCallback=null,this.shutdownPromise=null,this.subagentHistory=new Map,this.goalModeController=null,this._alive=!0,this.closing=!1,this.projectCodeLoaded=!1,this.backgroundSettleWatch=null,this.subagents=new s.RpcSubagentRegistry(b,a=>{this.rememberSubagentFrame(a),this.emit(a),this.resetIdleTimer(),aj()}),this.subagents.setSubscriptionLevel("progress")}rememberSubagentSnapshot(a){if(this.subagentHistory.set(a.id,(0,N.G2)(this.subagentHistory.get(a.id),a)),this.subagentHistory.size<=128)return;let b=[...this.subagentHistory.values()].filter(a=>"pending"!==a.status&&"running"!==a.status).sort((a,b)=>a.lastUpdate-b.lastUpdate);for(;this.subagentHistory.size>128&&b.length>0;){let a=b.shift();a&&this.subagentHistory.delete(a.id)}}rememberSubagentFrame(a){if("subagent_progress"===a.type){let b=a.payload,c=b?.progress?.id;if(!c)return;let d=this.subagents.getSubagents().find(a=>a.id===c);d&&this.rememberSubagentSnapshot(d);return}if("subagent_lifecycle"!==a.type)return;let b=a.payload;if(!b?.id||!b.status)return;let c=this.subagents.getSubagents().find(a=>a.id===b.id);if("started"===b.status){c&&this.rememberSubagentSnapshot(c);return}let d=c??this.subagentHistory.get(b.id),e="failed"===b.status?"failed":"aborted"===b.status?"aborted":"completed";this.rememberSubagentSnapshot({id:b.id,index:b.index??d?.index??0,agent:b.agent??d?.agent??b.id,agentSource:b.agentSource??d?.agentSource??"bundled",description:b.description??d?.description,status:e,task:d?.task,assignment:d?.assignment,sessionFile:b.sessionFile??d?.sessionFile,lastUpdate:Date.now(),parentToolCallId:b.parentToolCallId??d?.parentToolCallId,progress:d?.progress?{...d.progress,status:e}:void 0})}getSubagentSnapshots(){for(let a of this.subagents.getSubagents())this.rememberSubagentSnapshot(a);let a=new Map(this.subagentHistory);for(let b of this.subagents.getSubagents())a.has(b.id)||a.set(b.id,b);return[...a.values()].sort((a,b)=>{let c="pending"===a.status||"running"===a.status,d="pending"===b.status||"running"===b.status;return c!==d?c?-1:1:c?a.index-b.index||a.id.localeCompare(b.id):b.lastUpdate-a.lastUpdate||a.id.localeCompare(b.id)})}get sessionId(){return this.inner.sessionId}get sessionFile(){return this.inner.sessionFile??""}get cwd(){return this.inner.sessionManager.getCwd()}isAlive(){return this._alive}isRunning(){return this._alive&&(this.promptRunning||this.handoffRunning||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning||this.subagents.getSubagents().length>0)}isSafelyIdle(){if(!this._alive||this.closing||this.isRunning()||this.pendingUiResponses.size>0)return!1;let a=aa(this.inner);if(a&&(a.getRunningJobs().length>0||a.hasPendingDeliveries()))return!1;let b="hasPendingAsyncWork"in this.inner?this.inner.hasPendingAsyncWork:void 0;if("function"==typeof b&&!0===b.call(this.inner))return!1;let c=this.inner.getGoalModeState?.();return!(c?.enabled&&"active"===c.goal.status)}watchBackgroundWork(){if(this.backgroundSettleWatch||!this._alive)return;let a=aa(this.inner);a&&0!==a.getRunningJobs().length&&(this.backgroundSettleWatch=a.waitForAll().catch(()=>{}).finally(()=>{this.backgroundSettleWatch=null,this._alive&&aj()}))}beginClose({onlyWhenIdle:a=!1}={}){return!this._alive||!(a&&!this.closing&&this.isRunning())&&(this.closing=!0,!0)}cancelClose(){this._alive&&!this.shutdownPromise&&(this.closing=!1)}bindToolUiContext(a){a(this.createExtensionUiContext(),!0)}start(){this.syncPlanModeFromSession(),this.goalMode.restore().catch(a=>{console.error("[cuelo] failed to restore goal mode:",a instanceof Error?a.message:a)}),this.unsubscribe=this.inner.subscribe(a=>{if("agent_end"===a.type&&(0,C.mD)(),am.has(a.type)&&this.resetIdleTimer(),"auto_compaction_start"===a.type||"compaction_start"===a.type){let b="string"==typeof a.reason?a.reason:null;this.compactionStarted={at:this.compactionStarted?.at??Date.now(),reason:b??this.compactionStarted?.reason??null}}else("auto_compaction_end"===a.type||"compaction_end"===a.type)&&(this.compactionStarted=null);this.emit(a),al.has(a.type)&&aj(),this.goalMode.handleSessionEvent(a).catch(a=>{console.error("[cuelo] goal mode failed to handle a session event:",a instanceof Error?a.message:a)})}),this.resetIdleTimer(),aj()}setForceEmptySystemPrompt(a){this.forceEmptySystemPrompt=a,this.applyForcedEmptySystemPrompt()}beginExtensionBinding(a={}){this.ensureExtensionsBound(a).catch(a=>{console.error("[cuelo] failed to dispatch session_start to extensions:",a instanceof Error?a.message:a)})}async waitUntilReady(){await this.waitForExtensionsBound()}ensureExtensionsBound(a={}){return(a.forceEmptySystemPrompt&&(this.forceEmptySystemPrompt=!0),this.extensionsBound)?(this.applyForcedEmptySystemPrompt(),Promise.resolve()):(this.extensionBindingPromise||(this.extensionBindingError=null,this.extensionBindingPromise=(async()=>{this._alive&&(await (0,n.initializeExtensions)(this.inner,{uiContext:this.createExtensionUiContext(),reportSendError:(a,b)=>this.emit({type:"extension_error",extensionPath:a,event:"send",error:b.message}),reportRuntimeError:a=>this.emit({type:"extension_error",extensionPath:a.extensionPath,event:a.event,error:a.error}),onShutdown:()=>this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"notify",notifyType:"warning",message:"Extension requested shutdown, but shutdown is not supported in CUELO."})}),this.extensionsBound=!0,this.applyForcedEmptySystemPrompt(),console.log(`[cuelo] session_start dispatched to extensions for session ${this.inner.sessionId}`))})().catch(a=>{throw this.extensionBindingError=a,a})),this.extensionBindingPromise)}async waitForExtensionsBound(){try{this.extensionBindingPromise&&await this.extensionBindingPromise}catch(a){throw a instanceof Error?a:Error(String(a))}if(this.extensionBindingError)throw this.extensionBindingError instanceof Error?this.extensionBindingError:Error(String(this.extensionBindingError))}shouldWaitForExtensions(a){return"prompt"===a||"steer"===a||"follow_up"===a||"handoff"===a||"get_commands"===a||"execute_slash_command"===a||"goal"===a}async withFinalRunningNotification(a){try{return await a()}finally{this.resetIdleTimer(),aj()}}async shutdownAfterCommittedFork(a){try{await this.shutdown()}catch(b){console.error(`[cuelo] fork created session ${a}, but wrapper shutdown failed:`,b instanceof Error?b.message:b)}}applyForcedEmptySystemPrompt(){this.forceEmptySystemPrompt&&this.inner.agent.state&&(this.inner.agent.state.systemPrompt=[])}get goalMode(){return this.goalModeController||(this.goalModeController=new L.zd(this.inner,{isBusy:()=>this.promptRunning||this.handoffRunning||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning,runContinuation:a=>this.runGoalContinuation(a),onStatusChange:a=>this.emit({type:"goal_status",status:a})})),this.goalModeController}async runGoalContinuation(a){this.promptRunning=!0,aj();try{await this.inner.promptCustomMessage({customType:"goal-continuation",content:a,display:!1,attribution:"user"})}catch(a){throw this.emit({type:"prompt_error",errorMessage:a instanceof Error?a.message:String(a)}),a}finally{this.promptRunning=!1,this.resetIdleTimer(),this.emit({type:"prompt_done"}),aj()}}syncPlanModeFromSession(){let a=this.inner.getPlanModeState?.();if(!a){let b,c=this.inner.sessionManager.getEntries();for(let a=c.length-1;a>=0;a-=1)if(c[a]?.type==="mode_change"){b=c[a];break}let d=b?.data?.planFilePath;b?.mode==="plan"&&"string"==typeof d&&d.length>0&&(a={enabled:!0,planFilePath:d,workflow:b.data?.workflow==="sequential"?"sequential":"parallel",reentry:!0},this.inner.setPlanModeState?.(a))}a?.enabled&&this.inner.setPlanProposalHandler?.(a=>this.handlePlanProposal(a))}async handlePlanProposal(a){let b=this.inner.getPlanModeState?.();if(!b?.enabled||!this.inner.preparePlanForReview)throw Error("Plan mode is not active.");let c=await this.inner.preparePlanForReview(a),d=c.details?.planFilePath,e=c.details?.title;if(!d||!e)throw Error("The proposed plan could not be resolved.");let f=await (0,o.readPlanFile)(d,{cwd:this.cwd,localProtocolOptions:{getArtifactsDir:()=>this.inner.sessionManager.getArtifactsDir(),getSessionId:()=>this.inner.sessionManager.getSessionId()}});if(!f?.trim())throw Error(`Plan file not found at ${d}`);let g=await this.requestExtensionUi({method:"plan_review",title:e,planFilePath:d,planContent:f},JSON.stringify({action:"refine"}),a=>"value"in a?a.value:JSON.stringify({action:"refine"})),h={};try{h=JSON.parse(g)}catch{}let i={planFilePath:d,title:e,planExists:!0};if("approve"===h.action)return this.inner.setPlanReferencePath?.(d),this.inner.setPlanProposalHandler?.(null),this.inner.setPlanModeState?.(void 0),this.inner.sessionManager.appendModeChange("none"),{content:[{type:"text",text:`Plan approved at ${d}. Plan mode exited; proceed with the implementation.`}],details:i};b.planFilePath!==d&&(this.inner.setPlanModeState?.({...b,planFilePath:d}),this.inner.sessionManager.appendModeChange("plan",{planFilePath:d}));let j="string"==typeof h.feedback?h.feedback.trim():"";return{content:[{type:"text",text:["Plan refinement requested.",j?`User feedback:
8
- ${j}`:"",`Update the plan file, then write ${e} to xd://propose again when ready.`].filter(Boolean).join("\n\n")}],details:i}}publishSessionSnapshot(a,b){this.emit({type:"session_snapshot",sessionId:this.sessionId,entryId:a,context:b})}emit(a){for(let b of this.listeners)b(a)}resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=setTimeout(()=>{this.keepAliveListeners.size>0||this.isRunning()?this.resetIdleTimer():this.shutdown().catch(a=>{console.error("[pi-web] failed to shut down idle session:",a instanceof Error?a.message:a)})},6e5)}persistBashOnlySession(){let a=this.inner.sessionManager,b=a.getSessionFile();if(!b||(0,w.existsSync)(b))return;let c=a.getHeader();if(!c)return;let d=[c,...a.getEntries()].map(a=>JSON.stringify(a)).join("\n")+"\n";(0,w.writeFileSync)(b,d,{encoding:"utf8",flag:"wx"}),a.flushed=!0,(0,C.O8)(this.inner.sessionId,b)}onEvent(a,b={}){for(let c of(this.listeners.push(a),b.keepAlive&&(this.keepAliveListeners.add(a),this.resetIdleTimer()),this.pendingUiRequests.values()))a(c);return()=>{let b=this.listeners.indexOf(a);-1!==b&&this.listeners.splice(b,1),this.keepAliveListeners.delete(a)&&0===this.keepAliveListeners.size&&this._alive&&this.resetIdleTimer()}}onDestroy(a){this.onDestroyCallback=a}async sendInternalPrompt(a){return this.send({type:"prompt",message:a},!0)}async emitGenuineUserInput(a,b){let c=this.inner.extensionRunner;if(!c?.hasHandlers?.("input"))return{text:a,images:b};let d=await c.emitInput?.(a,b,"rpc");return d?!0===d.handled?(console.log(`[cuelo] input event consumed by an extension for session ${this.inner.sessionId}`),null):{text:void 0!==d.text?d.text.trim():a,images:void 0!==d.images?d.images:b}:{text:a,images:b}}async send(a,b=!1){this.resetIdleTimer();let c=a.type;if(this.shouldWaitForExtensions(c)&&await this.waitForExtensionsBound(),this.closing&&!0===ao[c])throw Error("Session is closing");if(this.handoffRunning&&!0!==an[c])throw Error("Cannot modify the session while a handoff is in progress");let d="set_model"===c&&(void 0!==a.thinkingLevel||void 0!==a.oauthPosition);if(!0===ap[c]&&(this.presetMutation||d&&this.modelMutations>0))throw Error("Cannot change the model while another model change is in progress");if("prompt"===c&&!b&&this.presetMutation)throw Error("Cannot send a prompt while a Main preset is being applied");if(("prompt"===c||"steer"===c||"follow_up"===c)&&this.syncPlanModeFromSession(),"prompt"===c||"steer"===c||"follow_up"===c){let b=(0,y.kc)(a.images);if(b)throw Error(b)}switch(c){case"prompt":{if(this.inner.isBashRunning)throw Error("Cannot send a prompt while a shell command is running");this.goalMode.onUserPrompt();let c=a.message,d=a.images,e=a.streamingBehavior;if(!b&&void 0===e){let a=await this.emitGenuineUserInput(c,d);if(null===a||(c=a.text,d=a.images,!c&&!d?.length))return null}let f=(0,k.resolveRpcSkillInvocation)(this.inner,c),g=f?(0,j.buildSkillPromptMessage)(f.skill,f,"user").then(a=>this.inner.promptCustomMessage({customType:l.SKILL_PROMPT_MESSAGE_TYPE,content:d?.length?[{type:"text",text:a.message},...d]:a.message,display:!0,details:a.details,attribution:"user"},{...e?{streamingBehavior:e}:{},queueChipText:c})):this.inner.prompt(c,{...d?.length?{images:d}:{},...e?{streamingBehavior:e}:{},userInitiated:!0});return this.promptRunning=!0,aj(),g.then(()=>{this.promptRunning=!1,this.resetIdleTimer(),e||this.emit({type:"prompt_done"}),aj()}).catch(a=>{this.promptRunning=!1,this.resetIdleTimer(),(0,C.mD)(),this.emit({type:"prompt_error",errorMessage:a instanceof Error?a.message:String(a)}),e||this.emit({type:"prompt_done"}),aj()}),null}case"abort":return this.goalMode.onAbort(),await this.withFinalRunningNotification(()=>this.inner.abort()),null;case"get_state":{let a=this.inner.model,b=this.inner.getContextUsage();return{sessionId:this.inner.sessionId,sessionFile:this.inner.sessionFile??"",isStreaming:this.inner.isStreaming,isPromptRunning:this.promptRunning,isBashRunning:this.inner.isBashRunning,isCompacting:this.inner.isCompacting,compaction:this.inner.isCompacting&&this.compactionStarted?{elapsedMs:Math.max(0,Date.now()-this.compactionStarted.at),reason:this.compactionStarted.reason}:null,isHandoffRunning:this.handoffRunning,autoCompactionEnabled:this.inner.autoCompactionEnabled,autoRetryEnabled:this.inner.autoRetryEnabled,model:a?{id:a.id,provider:a.provider}:void 0,messageCount:0,pendingMessageCount:this.inner.queuedMessageCount,queuedMessages:{steering:[...this.inner.getQueuedMessages().steering],followUp:[...this.inner.getQueuedMessages().followUp]},contextUsage:b?{percent:b.percent,contextWindow:b.contextWindow,tokens:b.tokens}:null,systemPrompt:[this.inner.agent.state?.systemPrompt??""].flat().join("\n"),thinkingLevel:this.inner.agent.state?.thinkingLevel??"off",configuredThinkingLevel:this.inner.configuredThinkingLevel()??"off",thinkingCeiling:this.inner.thinkingLevelCeiling??null,fastModeEnabled:this.inner.isFastModeEnabled(),fastModeActive:this.inner.isFastModeActive(),extensionStatuses:this.getExtensionStatuses(),extensionWidgets:this.getExtensionWidgets(),subagents:this.getSubagentSnapshots(),todoPhases:this.inner.getTodoPhases(),goal:this.goalMode.getStatus()}}case"get_subagents":return{subagents:this.getSubagentSnapshots()};case"get_subagent_messages":{let b=this.subagents.resolveSessionFile(a);return(0,s.readRpcSubagentTranscript)(b,a.fromByte)}case"set_model":{let{provider:b,modelId:c,role:d,oauthPosition:e,thinkingLevel:f}=a,g=void 0!==f||void 0!==e;this.modelMutations+=1,g&&(this.presetMutation=!0);try{let a,g=await (0,H.findModelWithRecovery)(this.inner.modelRegistry,b,c,{forceDiscovery:!0});if(g.miss)throw Error((0,I.zX)(g.miss));let h=g.model,i=this.inner.model,j=void 0!==e||void 0!==f?function(a){try{let b=a.sessionManager.getBranch();if(!Array.isArray(b))return;for(let a=b.length-1;a>=0;a-=1){let c=b[a];if(c?.type==="model_change")return"string"==typeof c.role?c.role:void 0}}catch{}}(this.inner):void 0,k=void 0!==f?this.inner.configuredThinkingLevel():void 0;if(void 0!==e){let b=await T(this.inner,h.provider);if(!b.ok)throw Error(`${b.reason} 계정 변경을 시작하지 않았습니다.`);a=b.snapshot}if(await this.inner.setModel(h,d),void 0!==e){let b=await V(this.inner,h.provider,e);if(!b.ok){let c=await W(this.inner,{previousModel:i,previousRole:j,previousThinking:k,account:a});throw Error(`${b.reason} ${X(c)}`)}}if(void 0!==f)try{this.inner.setThinkingLevel(f)}catch(d){let b=`thinking level ${f} 적용에 실패했습니다: ${d instanceof Error?d.message:String(d)}`,c=await W(this.inner,{previousModel:i,previousRole:j,previousThinking:k,account:a});throw Error(`${b} ${X(c)}`)}return(0,A.kn)(),(0,C.mD)(),{id:h.id,provider:h.provider,...d?{role:d}:{}}}finally{g&&(this.presetMutation=!1),this.modelMutations-=1}}case"set_role_model":{let b=a.role;this.modelMutations+=1;try{await (0,H.recoverMissingModelRefs)(this.inner.modelRegistry,(0,G.Ex)(this.inner.settings));let a=this.inner.resolveRoleModel(b);if(!a)throw Error(`No model configured for role "${b}"`);return await this.inner.setModel(a,b),(0,A.kn)(),(0,C.mD)(),{id:a.id,provider:a.provider,role:b}}finally{this.modelMutations-=1}}case"fork":{let b;if(this.inner.isBashRunning)throw Error("Cannot fork while a shell command is running");let c=this.inner.sessionManager,d=function(a,b){if("string"==typeof b&&b.length>0)return b;for(let b=a.length-1;b>=0;b-=1){let c=a[b];if(c?.type==="message"&&c.message?.role==="user"&&c.id)return c.id}}(c.getBranch(),a.entryId);if(!d)throw Error("No user message to fork from yet");let e=this.inner.sessionFile;if(!e)return{cancelled:!0};let g=c.getEntry(d);if(!g)throw Error("Invalid entry ID for forking");let h=c.getSessionDir();if(g.parentId){let a=(await f.SessionManager.open(e,h)).createBranchedSession(g.parentId);if(!a)throw Error("Failed to create forked session");b=a}else{let a=f.SessionManager.create(c.getCwd(),h);await a.newSession({parentSession:e}),await a.ensureOnDisk(),b=a.getSessionFile()}let i=(await f.SessionManager.open(b,h)).getSessionId();return(0,C.O8)(i,b),(0,C.mD)(),await this.shutdownAfterCommittedFork(i),{cancelled:!1,newSessionId:i}}case"handoff":{if(this.handoffRunning||this.promptRunning||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)throw Error("Cannot hand off while the session is busy");let b=a.customInstructions;this.handoffRunning=!0,aj();try{if(!await this.inner.handoff(b))return{cancelled:!0};return(0,C.mD)(),{cancelled:!1}}finally{this.handoffRunning=!1,aj()}}case"navigate_tree":if(this.inner.isBashRunning)throw Error("Cannot navigate while a shell command is running");return{cancelled:(await this.inner.navigateTree(a.targetId,{})).cancelled};case"set_thinking_level":{let b=a.level;this.modelMutations+=1;try{return this.inner.setThinkingLevel(b),"xhigh"===b&&this.inner.model?.compat?.thinkingFormat==="deepseek"&&this.inner.agent?.state&&(this.inner.agent.state.thinkingLevel="xhigh"),(0,C.mD)(),null}finally{this.modelMutations-=1}}case"set_thinking_ceiling":{let b=a.ceiling??null;if(null!==b&&!(0,O.KE)(b))throw Error(`Invalid thinking ceiling: ${String(b)}`);this.modelMutations+=1;try{this.inner.setThinkingLevelCeiling(b??void 0);let a=this.inner.sessionManager;return(0,O.hi)(a.getBranch())!==b&&a.appendCustomEntry(O.FR,{ceiling:b}),(0,C.mD)(),null}finally{this.modelMutations-=1}}case"set_fast_mode":if("boolean"!=typeof a.enabled)throw Error("set_fast_mode requires a boolean enabled");this.modelMutations+=1;try{let b=this.inner.setFastMode(a.enabled);if(a.enabled&&!b)throw Error("Fast mode is unavailable for the current model.");return(0,C.mD)(),{enabled:this.inner.isFastModeEnabled(),active:this.inner.isFastModeActive()}}finally{this.modelMutations-=1}case"compact":try{return await this.withFinalRunningNotification(()=>this.inner.compact(a.customInstructions))}finally{(0,C.mD)()}case"set_session_name":{let b=a.name?.trim();if(!b)throw Error("Session name cannot be empty");return await this.inner.sessionManager.setSessionName(b,"user"),(0,C.mD)(),null}case"get_session_stats":return{...this.inner.getSessionStats(),sessionName:this.inner.sessionManager.getSessionName()};case"get_last_assistant_text":return{text:this.inner.getLastAssistantText()??""};case"set_auto_compaction":return this.inner.setAutoCompactionEnabled(a.enabled),null;case"clear_queue":return this.inner.clearQueue();case"remove_queued_message":{let b=a.queue;if("string"!=typeof a.message)throw Error("message must be a string");if("steering"!==b&&"followUp"!==b)throw Error('queue must be "steering" or "followUp"');return{removed:this.inner.removeQueuedMessage(a.message,b)}}case"steer":{let b=a.images;var e,g=this.sessionId,i=a.message;try{(0,w.appendFileSync)((0,x.join)((0,f.getAgentDir)(),"steering-received.jsonl"),`${JSON.stringify({ts:Date.now(),sessionId:g??null,via:"steer",length:"string"==typeof i?i.length:0})}
9
- `)}catch{}return await this.inner.steer(a.message,b?.length?b:void 0),null}case"follow_up":{let b=a.images;return await this.inner.followUp(a.message,b?.length?b:void 0),null}case"get_tools":{let a=new Set(this.inner.getActiveToolNames());return(e=this.inner).getAllToolNames().map(a=>({name:a,description:e.getToolByName(a)?.description??""})).map(b=>({name:b.name,description:b.description,active:a.has(b.name)}))}case"get_commands":return{commands:await _(this.inner)};case"goal":return await this.goalMode.handleCommand(a.args??"");case"execute_slash_command":{let b=[],c=await (0,h.executeAcpBuiltinSlashCommand)(a.message,{session:this.inner,sessionManager:this.inner.sessionManager,settings:this.inner.settings,cwd:this.cwd,output:a=>{b.push(a)},refreshCommands:()=>{},reloadPlugins:async()=>{await this.waitForExtensionsBound(),this.extensionStatuses.clear(),this.extensionWidgets.clear(),await this.inner.reload(),await this.inner.refreshSkills?.(),this.applyForcedEmptySystemPrompt(),(0,A.kn)()}});if(!1===c)return{handled:!1,output:b};return{handled:!0,output:b,..."prompt"in c?{prompt:c.prompt}:{}}}case"set_tools":{let b=a.toolNames;return this.setForceEmptySystemPrompt(0===b.length),await this.inner.setActiveToolsByName(this.goalMode.reconcileToolNames(Z(this.inner,b))),this.applyForcedEmptySystemPrompt(),null}case"reload":return await this.waitForExtensionsBound(),this.extensionStatuses.clear(),this.extensionWidgets.clear(),await this.inner.reload(),await this.inner.refreshSkills?.(),this.applyForcedEmptySystemPrompt(),(0,A.kn)(),{success:!0};case"abort_compaction":return this.inner.abortCompaction(),null;case"extension_ui_response":return this.resolveExtensionUiResponse(a),null;case"extension_ui_input":return this.handleExtensionUiInput(a.id,a.data),null;case"set_auto_retry":return this.inner.setAutoRetryEnabled(a.enabled),null;case"bash":{if(this.promptRunning||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)throw Error("Cannot run a shell command while the session is busy");let b=this.inner.executeBash(a.command,void 0,{excludeFromContext:a.excludeFromContext});aj();try{let a=await b;return this.persistBashOnlySession(),a}finally{this.resetIdleTimer(),(0,C.mD)(),aj()}}case"abort_bash":return this.inner.abortBash(),null;default:throw Error(`Unsupported command: ${c}`)}}destroy(){if(this._alive){for(let a of(this._alive=!1,this.idleTimer&&clearTimeout(this.idleTimer),this.inner.isBashRunning&&this.inner.abortBash(),this.unsubscribe?.(),this.goalModeController?.dispose(),this.subagents.dispose(),this.subagentHistory.clear(),this.keepAliveListeners.clear(),this.pendingUiResponses.values()))a.cancel();for(let a of Array.from(this.activeCustomUis.keys()))this.closeCustomUi(a,void 0);this.pendingUiResponses.clear(),this.pendingUiRequests.clear();try{this.inner.dispose?.()}finally{try{this.onDestroyCallback?.()}finally{aj()}}}}async shutdown(){return this.shutdownPromise?this.shutdownPromise:this._alive?(this.shutdownPromise=(async()=>{try{try{await this.waitForExtensionsBound()}catch(a){console.error("[pi-web] extension binding failed before session shutdown:",a instanceof Error?a.message:a)}await this.inner.extensionRunner?.emit?.({type:"session_shutdown",reason:"quit"})}finally{this.destroy()}})(),this.shutdownPromise):void 0}async stopBackgroundWorkForDrain(a){let b=Date.now()+a,c=function(a){let b="asyncJobManager"in a?a.asyncJobManager:void 0;if(b&&"object"==typeof b&&"cancelAll"in b&&"waitForAll"in b&&"function"==typeof b.cancelAll&&"function"==typeof b.waitForAll)return b}(this.inner);for(let a of(c?.cancelAll(void 0,t.ASYNC_JOB_MANAGER_SHUTDOWN_REASON),this.subagents.getSubagents()))p.AgentRegistry.global().get(a.id)?.session?.abort().catch(()=>{});let d=!c||await ab(c.waitForAll(),b);for(;this.subagents.getSubagents().length>0&&Date.now()<b;)await function(){let{promise:a,resolve:b}=Promise.withResolvers();return setTimeout(b,100),a}();return d&&0===this.subagents.getSubagents().length}resolveExtensionUiResponse(a){let b=this.pendingUiResponses.get(a.id);b&&b.resolve(a)}getExtensionStatuses(){return Array.from(this.extensionStatuses,([a,b])=>({key:a,text:b}))}getExtensionWidgets(){return Array.from(this.extensionWidgets.values())}getCustomUiWidth(a){if(!a||"object"!=typeof a)return P.p1;let b=a.overlayOptions,c="function"==typeof b?b():b;if(!c||"object"!=typeof c)return P.p1;let d=c.width;return"number"==typeof d&&Number.isFinite(d)?Math.max(40,Math.min(140,Math.round(d))):92}emitCustomUiRender(a,b){let c;try{c=b.component.render(b.width)}catch(a){c=[`Extension custom UI render failed: ${a instanceof Error?a.message:String(a)}`]}let d={type:"extension_ui_request",id:a,method:"custom",lines:c};this.pendingUiRequests.set(a,d),this.emit(d)}closeCustomUi(a,b){let c=this.activeCustomUis.get(a);if(c&&!c.settled){c.settled=!0,this.activeCustomUis.delete(a),this.pendingUiRequests.delete(a);try{c.component.dispose?.()}catch{}this.emit({type:"extension_ui_request",id:a,method:"custom",lines:[],closed:!0}),c.resolve(b)}}handleExtensionUiInput(a,b){if("string"!=typeof b)return;let c=this.activeCustomUis.get(a);if(!c){"activity"===b&&this.pendingUiResponses.get(a)?.activity?.();return}try{c.component.handleInput?.(b),this.activeCustomUis.has(a)&&this.emitCustomUiRender(a,c)}catch(b){this.closeCustomUi(a,void 0),this.emit({type:"extension_error",extensionPath:`custom-ui:${a}`,event:"custom_ui_input",error:b instanceof Error?b.message:String(b)})}}requestExtensionCustomUi(a,b){if("function"!=typeof a)return Promise.resolve(void 0);let c=(0,v.randomUUID)(),d=this.getCustomUiWidth(b);return new Promise(b=>{let e=!1,f=(0,P.TQ)(()=>{let a=this.activeCustomUis.get(c);a&&this.emitCustomUiRender(c,a)},d),g=a=>{e||(e=!0,b(a))},h=a=>{this.activeCustomUis.has(c)?this.closeCustomUi(c,a):g(a)};Promise.resolve().then(()=>a(f,as,at,h)).then(a=>{if(e){try{a?.dispose?.()}catch{}return}if(!a||"object"!=typeof a||"function"!=typeof a.render)return void g(void 0);let b={component:a,width:d,resolve:a=>g(a),settled:!1};this.activeCustomUis.set(c,b),this.emitCustomUiRender(c,b)}).catch(a=>{e||(this.emit({type:"extension_error",extensionPath:`custom-ui:${c}`,event:"custom_ui",error:a instanceof Error?a.message:String(a)}),g(void 0))})})}requestExtensionUi(a,b,c,d,e,f){let g;if(e?.aborted)return Promise.resolve(b);let h=(0,v.randomUUID)(),i={type:"extension_ui_request",id:h,...a,...d?{timeout:d,expiresAt:Date.now()+d}:{}},{promise:j,resolve:k}=Promise.withResolvers(),l=!1,m=()=>{clearTimeout(g),e?.removeEventListener("abort",o),this.pendingUiRequests.delete(h),this.pendingUiResponses.delete(h)},n=(a,b=!1)=>{l||(l=!0,m(),b&&this.emit({...i,closed:!0}),k(a))},o=()=>n(b,!0),p=()=>{g&&clearTimeout(g),g=setTimeout(()=>n(f?f():b,!0),d)};return d&&p(),e?.addEventListener("abort",o,{once:!0}),this.pendingUiRequests.set(h,i),this.pendingUiResponses.set(h,{resolve:a=>n(c(a)),cancel:()=>n(b),...d&&f?{activity:()=>{p();let a=this.pendingUiRequests.get(h);a&&this.pendingUiRequests.set(h,{...a,expiresAt:Date.now()+d})}}:{}}),this.emit(i),j}createExtensionUiContext(){return{timeoutStartsOnPresentation:!1,askDialog:(a,b)=>this.requestExtensionUi({method:"ask",questions:a,...b?.timeout?{timeout:b.timeout}:{}},void 0,a=>{if("value"in a)try{return JSON.parse(a.value)}catch{return}},b?.timeout,b?.signal,()=>(function(a){let b=[];for(let c of a){let a=void 0===c.recommended?void 0:c.options[c.recommended];if(!a)return;b.push({id:c.id,question:c.question,options:c.options.map(a=>a.label),multi:c.multi??!1,selectedOptions:[a.label],timedOut:!0})}return{kind:"submit",results:b}})(a)),select:(a,b,c)=>this.requestExtensionUi({method:"select",title:a,options:b,...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),confirm:(a,b,c)=>this.requestExtensionUi({method:"confirm",title:a,message:b,...c?.timeout?{timeout:c.timeout}:{}},!1,a=>"confirmed"in a&&a.confirmed,c?.timeout,c?.signal),input:(a,b,c)=>this.requestExtensionUi({method:"input",title:a,...void 0!==b?{placeholder:b}:{},...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),editor:(a,b,c)=>this.requestExtensionUi({method:"editor",title:a,...void 0!==b?{prefill:b}:{},...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),notify:(a,b)=>{this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"notify",message:a,notifyType:b})},onTerminalInput:()=>()=>{},setStatus:(a,b)=>{void 0===b?this.extensionStatuses.delete(a):this.extensionStatuses.set(a,b),this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"setStatus",statusKey:a,statusText:b})},setWorkingMessage:()=>{},setWorkingVisible:()=>{},setWorkingIndicator:()=>{},setHiddenThinkingLabel:()=>{},setWidget:(a,b,c)=>{(void 0===b||Array.isArray(b))&&(void 0===b?this.extensionWidgets.delete(a):this.extensionWidgets.set(a,{key:a,lines:b,placement:c?.placement??"aboveEditor"}),this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"setWidget",widgetKey:a,widgetLines:b,widgetPlacement:c?.placement}))},setFooter:()=>{},setHeader:()=>{},setTitle:a=>{this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"setTitle",title:a})},custom:(a,b)=>this.requestExtensionCustomUi(a,b),pasteToEditor:a=>{this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"set_editor_text",text:a})},setEditorText:a=>{this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"set_editor_text",text:a})},getEditorText:()=>"",addAutocompleteProvider:()=>{},setEditorComponent:()=>{},getEditorComponent:()=>void 0,get theme(){return as},getAllThemes:()=>[],getTheme:()=>void 0,setTheme:()=>({success:!1,error:"Theme switching is not supported in CUELO extension UI yet"}),getToolsExpanded:()=>!1,setToolsExpanded:()=>{}}}}function ac(){if(!globalThis.__ompSessions){globalThis.__ompSessions=new Map;let a=()=>globalThis.__ompSessions?.forEach(a=>a.destroy());process.once("exit",a),process.once("SIGINT",a),process.once("SIGTERM",a)}return globalThis.__ompSessions}function ad(){return globalThis.__ompClosingSessionIds||(globalThis.__ompClosingSessionIds=new Set),globalThis.__ompClosingSessionIds}function ae(a,{onlyWhenIdle:b=!1}={}){let c=ad();if(c.has(a))return{reserved:!1,release:()=>{}};let d=ac().get(a);if(d?!d.beginClose({onlyWhenIdle:b}):b&&ai().includes(a))return{reserved:!1,release:()=>{}};c.add(a);let e=!1;return{reserved:!0,release:()=>{e||(e=!0,c.delete(a),d?.cancelClose())}}}function af(){return globalThis.__ompStartingSessionCwds||(globalThis.__ompStartingSessionCwds=new Map),globalThis.__ompStartingSessionCwds}function ag(a){return ac().get(a)}function ah(){let a=[];for(let b of ac().values()){if(!b.isAlive())continue;let c=b.inner.sessionManager,d=c.getHeader(),e=c.getEntries(),f=e.filter(a=>"message"===a.type),g=f.find(a=>"user"===a.message.role),h=c.getSessionFile()??b.sessionFile,i=!!(h&&(0,w.existsSync)(h));if(!i&&(!b.isRunning()||!g))continue;let j=d?.timestamp??e[0]?.timestamp??new Date().toISOString(),k=new Date(j).getTime(),l=Number.isNaN(k)?Date.now():k;for(let a of f){let b=function(a){if("user"!==a.message.role&&"assistant"!==a.message.role)return;if("number"==typeof a.message.timestamp)return a.message.timestamp;let b=new Date(a.timestamp).getTime();return Number.isNaN(b)?void 0:b}(a);void 0!==b&&(l=Math.max(l,b))}a.push({path:h??"",id:d?.id??b.sessionId,cwd:d?.cwd??b.cwd,name:c.getSessionName(),created:j,modified:new Date(l).toISOString(),messageCount:f.length,firstMessage:g&&function(a){if("bashExecution"===a.message.role)return"";let b=a.message.content,c="string"==typeof b?b:b.map(a=>"text"===a.type?a.text:"").filter(Boolean).join(" ");return(0,z.we)(c)}(g)||"(no messages)",transient:!i})}return a}let aw={sessions:()=>ac().values(),isStarting:a=>af().has(a)};function ai(){let a=new Set;for(let[b,c]of ac())c.isRunning()&&a.add(c.sessionId||b);return[...a]}function aj(){let a=ai();(0,K.p8)(a),(0,E.Uc)(aw)}async function ak(a,b,c,d={}){let{toolNames:g,initialModel:h,thinkingLevel:i,accountOauthPosition:j}=d,k=ac(),l=(globalThis.__ompStartLocks||(globalThis.__ompStartLocks=new Map),globalThis.__ompStartLocks);if(ad().has(a))throw Error("Session is closing");let n=k.get(a);if(n?.isAlive())return{session:n,realSessionId:a};let o=l.get(a);if(o)return o;let p=(async()=>{let d,l;await (0,f.initTheme)(!1);let n=(0,f.getAgentDir)(),o=b?await f.SessionManager.open(b,void 0):(()=>{if(!c)throw Error("cwd is required for a new session");return f.SessionManager.create(c,void 0)})(),p=o.getCwd(),s=(d=af(),l=(0,D.LV)(p),d.set(l,(d.get(l)??0)+1),()=>{let a=(d.get(l)??1)-1;a>0?d.set(l,a):d.delete(l)});try{let b,c,d=await (0,H.getOmpRuntime)(),l=await (0,H.getSettingsForCwd)(p);void 0!==g&&(b=0===g.length?[]:void 0);let[s,t]=await Promise.all([(0,f.discoverSessionExtensionPaths)({},p,l),(0,m.discoverCustomToolPaths)([],p)]),u=(0,D.qm)(p,n,{extensionPaths:s,customToolPaths:t}),v=await (0,F.D)(p),{modelRegistry:w}=d;await (0,H.recoverMissingModelRefs)(w,[...(0,G.Ex)(l),...h?[h]:[]]);let x=await (0,B.p)(w,e.cfgEnabledModels.get(l),l),y=(0,G.Ff)(l),z=h?void 0:y?.thinkingLevel,A=i??z,I=o.buildSessionContext().messages.length>0?{scopedModels:[...x.scopedModels],model:void 0,thinkingLevel:void 0}:(0,B.I)(x,{...h?{requestedModel:h}:{},...y?{defaultModel:y}:{},...A?{thinkingLevel:A}:{}}),J={cwd:p,agentDir:n,settings:l,sessionManager:o,modelRegistry:w,hasUI:!0,...I.model?{model:I.model}:{},...I.thinkingLevel?{thinkingLevel:I.thinkingLevel}:{},...I.scopedModels.length>0?{scopedModels:I.scopedModels}:{},...void 0!==b?{toolNames:b,restrictToolNames:!0}:{},...u??{}};(0,f.applyResolvedSystemPromptInputs)(J,v.systemPrompt,v.appendPrompt);let{session:K,eventBus:L,subagentEventBus:N,setToolUIContext:P}=await (0,f.createAgentSession)(J);c=(0,O.hi)(K.sessionManager.getBranch()),null!==c&&K.setThinkingLevelCeiling(c,!1),g&&g.length>0&&await K.setActiveToolsByName(Z(K,g));let Q=new av(K,L);if(Q.projectCodeLoaded=void 0===u,Q.bindToolUiContext(P),void 0!==j){let a=K.model?.provider;if(!a)throw Q.destroy(),Error("이 세션의 provider를 알 수 없어 OAuth 계정을 지정하지 못했습니다.");let b=await V(K,a,j);if(!b.ok)throw Q.destroy(),Error(b.reason)}g?.length===0&&Q.setForceEmptySystemPrompt(!0);let R=K.sessionId,S=ad();if(S.has(a)||S.has(R))throw Q.destroy(),Error("Session is closing");if(Q.projectCodeLoaded&&(0,E.rt)(p))throw Q.destroy(),Error("Project trust was revoked while this session was starting. Please try again.");Q.start();let T=K.sessionFile;T&&(0,C.O8)(R,T);let U=T?(0,M.Be)(T,(0,q.createPersistedSubagentReviverFactory)({session:K,authStorage:d.authStorage,modelRegistry:w,settings:l,enableLsp:void 0===b,eventBus:L,subagentEventBus:N}),()=>Math.trunc(Number(r.cfgTaskAgentIdleTtlMs.get(d.settings))||0)):void 0;return Q.onDestroy(()=>{U?.(),k.delete(R)}),k.set(R,Q),Q.beginExtensionBinding({forceEmptySystemPrompt:g?.length===0}),{session:Q,realSessionId:R}}finally{s()}})().finally(()=>{l.delete(a)});return l.set(a,p),p}d()}catch(a){d(a)}})},65667:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Be:()=>i});var e=c(76760),f=c.n(e),g=c(96175),h=a([g]);function i(a,b,c){let d=(globalThis.__cueloRootRevivers??=new Map,globalThis.__cueloRootRevivers);return d.set(a,b),g.AgentLifecycleManager.global().setPersistedSubagentReviverFactory(async a=>{if(!a.sessionFile)return;let b=function(a,b){let c=f().resolve(a);for(let a of b){let b=f().resolve(a);if(b.endsWith(".jsonl")&&c.startsWith(`${b.slice(0,-6)}${f().sep}`))return a}}(a.sessionFile,d.keys());return b?d.get(b)(a):void 0},c),()=>{d.get(a)===b&&d.delete(a)}}g=(h.then?(await h)():h)[0],d()}catch(a){d(a)}})},71069:(a,b,c)=>{c.d(b,{TQ:()=>e,p1:()=>d});let d=92;function e(a,b=d,c=40){return Object.freeze({terminal:Object.freeze({columns:b,rows:c,kittyProtocolActive:!1}),requestRender:a})}},72498:(a,b,c)=>{c.d(b,{LV:()=>k,TK:()=>p,Y1:()=>m,er:()=>n,qm:()=>r,wK:()=>o});var d=c(29021),e=c(33873),f=c(13229),g=c(8102);let h=[".omp/extensions",".omp/hooks",".omp/tools",".pi/extensions",".pi/hooks",".pi/tools",".claude/extensions",".claude/hooks",".claude/tools",".agents/extensions",".agents/hooks",".agents/tools"],i=[".mcp.json",".omp/.mcp.json",".omp/mcp.json",".claude/.mcp.json",".claude/mcp.json",".cursor/mcp.json"];function j(a){return(0,e.join)(a,"cuelo-trusted-projects.json")}function k(a){let b=(0,e.resolve)(a);try{return(0,d.realpathSync)(b)}catch{return b}}function l(a){try{(0,f.adoptLegacyStateFile)(j(a),"omp-web-trusted-projects.json");let b=JSON.parse((0,d.readFileSync)(j(a),"utf8"));if("object"!=typeof b||null===b||Array.isArray(b))return{};return Object.fromEntries(Object.entries(b).filter(a=>"boolean"==typeof a[1]))}catch{return{}}}function m(a,b){return a&&function(a){if(!a)return!1;for(let b of h)if((0,d.existsSync)((0,e.join)(a,b)))return!0;for(let b of i)if((0,d.existsSync)((0,e.join)(a,b)))return!0;return!1}(a)?{requiresTrust:!0,trusted:!0===l(b)[k(a)]}:{requiresTrust:!1,trusted:!0}}function n(a,b){let c=m(a,b);return c.requiresTrust?(o(a,b,!0),{requiresTrust:!0,trusted:!0}):c}function o(a,b,c){let e=l(b);e[k(a)]=c,(0,d.mkdirSync)(b,{recursive:!0}),(0,g.$)(j(b),`${JSON.stringify(e,null,2)}
7
+ Time spent: ${a=g.timeUsedSeconds,b=Math.max(0,Math.round(a)),c=Math.floor(b/3600),d=Math.floor(b%3600/60),c>0?`${c}h ${d}m`:d>0?`${d}m ${b%60}s`:`${b}s`}`),status:g}}async #w(a){if(!a)return this.#q("Usage: /goal set <objective>");if(!this.enabled&&this.#x())return this.#q("Resume the current goal first, or drop it before setting a new objective.");if(!this.enabled)return await this.#y(a);let b=await this.#a.goalRuntime.replaceGoal({objective:a});return this.#a.setGoalModeState?.(b),this.#g=!1,this.#h=!1,this.#a.isStreaming&&await this.#a.sendGoalModeContext({deliverAs:"steer"}),{message:"Goal replaced.",prompt:a,status:this.getStatus()}}async #y(a){let b=this.#a.getEnabledToolNames().filter(a=>"goal"!==a),c=await this.#a.goalRuntime.createGoal({objective:a});return this.#c=b,await this.#a.setActiveToolsByName([...new Set([...b,"goal"])]),this.#a.setGoalModeState?.(c),this.#g=!1,this.#h=!1,this.#a.isStreaming&&await this.#a.sendGoalModeContext({deliverAs:"steer"}),this.#p(),{message:"Goal mode enabled.",prompt:a,status:this.getStatus()}}async #s(){return this.enabled?(await this.#a.goalRuntime.pauseGoal(),await this.#z({reason:"paused"}),{message:"Goal mode paused.",status:this.getStatus()}):this.#q("No active goal to pause.")}async #t(){if(!this.#x())return this.#q("No paused goal to resume.");let a=this.#a.getEnabledToolNames().filter(a=>"goal"!==a),b=await this.#a.goalRuntime.resumeGoal();return this.#c=a,await this.#a.setActiveToolsByName([...new Set([...a,"goal"])]),this.#a.setGoalModeState?.(b),this.#g=!1,this.#h=!1,this.#p(),this.#A(),{message:"Goal mode resumed.",status:this.getStatus()}}async #u(){return this.enabled||this.#x()?(await this.#a.goalRuntime.dropGoal(),await this.#z({reason:"dropped"}),{message:"Goal dropped.",status:this.getStatus()}):this.#q("No goal to drop.")}async #v(a){let b=this.#a.getGoalModeState?.();if(!this.enabled||!b?.enabled)return this.#q(this.#x()?"Resume the goal before adjusting the budget.":"No active goal.");if("complete"===b.goal.status)return this.#q("Goal is already complete.");if(!a)return this.#q("Usage: /goal budget <N|off>");let{budget:c,error:d}=function(a){let b=a.trim().toLowerCase();if("off"===b)return{};let c=Number.parseInt(b,10);return!Number.isInteger(c)||c<=0||String(c)!==b?{error:"Goal budget must be a positive integer or `off`."}:{budget:c}}(a);return d?this.#q(d):(await this.#a.goalRuntime.onBudgetMutated(c),this.#g=!1,this.#p(),this.#A(),{message:void 0===c?"Goal budget cleared.":`Goal budget set to ${c.toLocaleString()}.`,status:this.getStatus()})}async #z(a){let b=this.#c;if(b&&await this.#a.setActiveToolsByName(b),"completed"===a.reason){let a=this.#a.getGoalModeState?.()?.goal;this.#a.setGoalModeState?.(void 0),this.#a.sessionManager.appendModeChange("none"),this.#a.sessionManager.appendCustomEntry("goal-completed",{objective:a?.objective,tokensUsed:a?.tokensUsed,tokenBudget:a?.tokenBudget,timeUsedSeconds:a?.timeUsedSeconds})}this.#c=void 0,this.#e=!1,this.#k(),this.#p()}async #o(){let a=this.#a.getEnabledToolNames().filter(a=>"goal"!==a);this.#c=a,await this.#a.setActiveToolsByName([...new Set([...a,"goal"])])}#A(){var a;if(this.#k(),this.#i||this.#h||(a=e.cfgGoalContinuationModes.get(this.#a.settings),!(Array.isArray(a)&&h.some(b=>a.includes(b)))||this.#a.getPlanModeState?.()?.enabled||this.#g))return;let b=this.#a.getGoalModeState?.();!b?.enabled||"active"!==b.goal.status||this.#a.goalRuntime.buildContinuationPrompt()&&(this.#d=setTimeout(()=>{this.#d=void 0,this.#B()},this.#b.continuationDelayMs??800))}async #B(){if(this.#i||this.#h||this.#g||this.#b.isBusy())return;let a=this.#a.getGoalModeState?.();if(!a?.enabled||"active"!==a.goal.status)return;let b=this.#a.goalRuntime.buildContinuationPrompt();if(b){this.#e=!0;try{await this.#b.runContinuation(b)}catch{this.#e=!1}}}#k(){this.#d&&(clearTimeout(this.#d),this.#d=void 0)}#q(a){return{error:a,status:this.getStatus()}}#n(){return!1!==e.cfgGoalEnabled.get(this.#a.settings)}#x(){let a=this.#a.getGoalModeState?.();if(a?.goal&&!a.enabled&&"paused"===a.goal.status)return a}#m(){let a=this.#a.sessionManager.getEntries();for(let b=a.length-1;b>=0;b-=1)if(a[b]?.type==="mode_change")return a[b]}#p(){this.#b.onStatusChange?.(this.getStatus())}}d()}catch(a){d(a)}})},41761:(a,b,c)=>{c.d(b,{C1:()=>d});let d=["read","bash","edit","write","grep","glob"];Object.fromEntries(d.map(a=>[a,!0]))},45935:(a,b,c)=>{c.d(b,{Hm:()=>p,Q:()=>h,RI:()=>o,Uc:()=>m,rt:()=>n});var d=c(28967),e=c(72498);function f(){return globalThis.__cueloProjectTrustChanges??=new Map,globalThis.__cueloProjectTrustChanges}function g(){return globalThis.__cueloProjectTrustErrors??=new Map,globalThis.__cueloProjectTrustErrors}class h extends Error{constructor(){super("This project has no resources that require trust")}}function i(a,b){return[...new Set(a.sessions())].filter(a=>(0,e.LV)(a.cwd)===b)}function j(a){console.error("[cuelo] failed to shut down a session after a project trust change:",a instanceof Error?a.message:a)}function k(a,b,c){let h=i(a,b),k=(0,e.Y1)(b,c.agentDir),l=!1;for(let a of h)!k.trusted&&a.projectCodeLoaded&&(a.isSafelyIdle()&&a.beginClose({onlyWhenIdle:!0})?a.shutdown().catch(j):(l=!0,a.watchBackgroundWork()));if(c.grant){if(!k.requiresTrust||k.trusted)return void f().delete(b);if(a.isStarting(b))return;let i=h.filter(a=>!a.isSafelyIdle());if(i.length>0){for(let a of i)a.watchBackgroundWork();return}let l=[];for(let a of h){if(!a.beginClose({onlyWhenIdle:!0})){for(let a of l)a.cancelClose();return}l.push(a)}f().delete(b);try{(0,e.er)(b,c.agentDir)}catch(a){for(let a of l)a.cancelClose();g().set(b,a instanceof Error?a.message:String(a));return}for(let a of((0,d.kn)(),l))a.shutdown().catch(j);return}l||a.isStarting(b)||f().delete(b)}let l=!1;function m(a){let b=f();if(0!==b.size&&!l){l=!0;try{for(let[c,d]of[...b])try{k(a,c,d)}catch(a){console.error("[cuelo] failed to apply a project trust change:",a instanceof Error?a.message:a)}}finally{l=!1}}}function n(a){let b=f();if(0===b.size)return!1;let c=b.get((0,e.LV)(a));return void 0!==c&&!(0,e.Y1)(a,c.agentDir).trusted}function o(a,b,c){let d=(0,e.LV)(b),h=(0,e.Y1)(b,c),j=i(a,d),k=j.filter(a=>a.projectCodeLoaded).length,l=g().get(d),m=null;return f().get(d)?.grant?m="grant":h.requiresTrust&&!h.trusted&&k>0&&(m="revoke"),{...h,pending:m,runtime:{sessions:j.length,running:j.filter(a=>a.isRunning()).length,projectCodeLoaded:k},...l?{error:l}:{}}}function p(a,b,c,i){let j=(0,e.LV)(b),m=f();if(g().delete(j),"grant"===i){if(!(0,e.Y1)(b,c).requiresTrust)throw new h;m.set(j,{agentDir:c,grant:!0})}else"revoke"===i?(m.delete(j),(0,e.wK)(b,c,!1),(0,d.kn)(),m.set(j,{agentDir:c,grant:!1})):m.get(j)?.grant&&m.set(j,{agentDir:c,grant:!1});let n=m.get(j);if(n){l=!0;try{k(a,j,n)}finally{l=!1}}return o(a,b,c)}},53923:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{D:()=>i});var e=c(58505),f=c(4327),g=a([e,f]);function h(a,b){return(0,e.findConfigFile)(a,{user:!1,cwd:b})??(0,e.findConfigFile)(a,{user:!0,cwd:b})}async function i(a){let[b,c]=await Promise.all([(0,f.resolvePromptInput)(h("SYSTEM.md",a),"system prompt"),(0,f.resolvePromptInput)(h("APPEND_SYSTEM.md",a),"append system prompt")]);return{systemPrompt:b,appendPrompt:c}}[e,f]=g.then?(await g)():g,d()}catch(a){d(a)}})},56365:(a,b,c)=>{c.d(b,{G2:()=>d});function d(a,b){return a&&(void 0!==a.parentToolCallId&&void 0!==b.parentToolCallId?a.parentToolCallId===b.parentToolCallId:void 0===a.sessionFile||void 0===b.sessionFile||a.sessionFile===b.sessionFile)?{...b,index:a.index,agent:a.agent,agentSource:a.agentSource,description:a.description??b.description,task:a.task??b.task,assignment:a.assignment??b.assignment,sessionFile:b.sessionFile??a.sessionFile,parentToolCallId:b.parentToolCallId??a.parentToolCallId}:b}},56429:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{A4:()=>ag,Bp:()=>ah,CL:()=>ax,HG:()=>ai,KI:()=>R,MT:()=>ae,OF:()=>ak,Yq:()=>al});var e=c(63411),f=c(92582),g=c(33594),h=c(94285),i=c(59895),j=c(28315),k=c(25167),l=c(14882),m=c(1740),n=c(9655),o=c(82512),p=c(78310),q=c(3330),r=c(34722),s=c(43696),t=c(90431),u=c(26854),v=c(55511),w=c(29021),x=c(33873),y=c(78970),z=c(36208),A=c(28967),B=c(18904),C=c(40402),D=c(72498),E=c(45935),F=c(53923),G=c(25429),H=c(38741),I=c(5908),J=c(41761),K=c(4157),L=c(39873),M=c(65667),N=c(56365),O=c(77356),P=c(71069),Q=a([e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,B,C,F,G,H,L,M]);function R(a){let b,c=null,d=!1,e=()=>{if(b&&(clearTimeout(b),b=void 0),d||!c)return;let e=c;c=null,a(e)};return{push:f=>{if(!d){if("message_update"===f.type){c=f,b||(b=setTimeout(()=>{b=void 0,e()},33));return}e(),a(f)}},flush:e,close:()=>{d=!0,c=null,clearTimeout(b),b=void 0}}}[e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,B,C,F,G,H,L,M]=Q.then?(await Q)():Q;let am=new Set(["agent_start","agent_end","agent_settled","auto_compaction_start","auto_compaction_end","compaction_start","compaction_end"]),an=new Set(["agent_end","agent_settled","auto_compaction_end","compaction_end"]),ao={abort:!0,extension_ui_input:!0,extension_ui_response:!0,get_commands:!0,get_last_assistant_text:!0,get_session_stats:!0,get_state:!0,get_subagent_messages:!0,get_subagents:!0,get_tools:!0},ap={bash:!0,compact:!0,follow_up:!0,fork:!0,handoff:!0,prompt:!0,steer:!0},aq={set_model:!0,set_role_model:!0,set_thinking_level:!0,set_thinking_ceiling:!0,set_fast_mode:!0};async function S(a,b){let c=a.modelRegistry.authStorage;if(!c?.oauth)return{ok:!1,reason:"이 세션은 OAuth 계정 목록을 읽을 수 없습니다."};try{return await c.reload?.(),{ok:!0,accounts:c.oauth.accounts(b,a.sessionId)}}catch(a){return{ok:!1,reason:`계정 목록을 읽지 못했습니다: ${a instanceof Error?a.message:String(a)}`}}}async function T(a,b){let c=await S(a,b);return c.ok?{ok:!0,snapshot:{provider:b,credentialId:c.accounts.find(a=>a.active)?.credentialId}}:{ok:!1,reason:c.reason}}async function U(a,b){if(!b)return!1;let c=a.modelRegistry.authStorage;if(!c)return!1;try{if(void 0!==b.credentialId)return c.sessions?.pin(b.provider,a.sessionId,b.credentialId)??!1;return c.sessions?.release(b.provider,a.sessionId)??!1}catch{return!1}}async function V(a,b,c){if(!Number.isSafeInteger(c)||c<0)return{ok:!1,reason:`OAuth 저장 위치 ${String(c)}가 올바르지 않습니다.`};if(!a.modelRegistry.authStorage?.sessions)return{ok:!1,reason:"이 세션은 OAuth 계정 pin을 지원하지 않습니다."};let d=await S(a,b);if(!d.ok)return{ok:!1,reason:d.reason};if(0===d.accounts.length)return{ok:!1,reason:"저장된 OAuth 계정이 없습니다."};let e=d.accounts.find((a,b)=>(Number.isInteger(a.position)?a.position:b)===c);if(!e)return{ok:!1,reason:`${b} OAuth 저장 위치 ${c}의 계정이 없습니다.`};let f=!1;try{f=a.modelRegistry.authStorage.sessions.pin(b,a.sessionId,e.credentialId)}catch{f=!1}if(!f)return{ok:!1,reason:`${b} OAuth 저장 위치 ${c} 계정을 이 세션의 선호 계정으로 설정하지 못했습니다.`};let g=await S(a,b),h=g.ok?g.accounts.find((a,b)=>(Number.isInteger(a.position)?a.position:b)===c):void 0;return h?.active!==!0?{ok:!1,reason:`${b} OAuth 저장 위치 ${c}이 이 세션의 선호 계정으로 설정되지 않았습니다.`}:{ok:!0}}async function W(a,b){let c=await Y(a,b.previousModel,b.previousRole),d=void 0===b.account||await U(a,b.account),e=!0;if(void 0!==b.previousThinking&&a.configuredThinkingLevel()!==b.previousThinking){try{a.setThinkingLevel(b.previousThinking)}catch{}e=a.configuredThinkingLevel()===b.previousThinking}return{model:c,account:d,thinking:e}}function X(a){let b=[];return a.model||b.push("모델"),a.account||b.push("계정 선호"),a.thinking||b.push("thinking 강도"),0===b.length?"모델\xb7계정\xb7강도를 되돌렸습니다.":`${b.join("\xb7")} 복원에 실패했습니다 — 이전 상태로 돌아가지 않았습니다.`}async function Y(a,b,c){if(!b)return!1;let d=a.model;if(d?.provider===b.provider&&d?.id===b.id)return!0;try{return await a.setModel(b,c),!0}catch{return!1}}let ar=Object.fromEntries(J.C1.map(a=>[a,!0]));class as extends f.Theme{constructor(){super({thinkingXhigh:""},{},"truecolor","unicode",{})}fg(...[,a]){return a}bg(...[,a]){return a}bold(a){return a}italic(a){return a}underline(a){return a}inverse(a){return a}strikethrough(a){return a}getFgAnsi(){return""}getBgAnsi(){return""}getThinkingBorderColor(){return a=>a}getBashModeBorderColor(){return a=>a}}let at=new as,au=new u.KeybindingsManager(u.TUI_KEYBINDINGS);function Z(a,b){if(0===b.length)return[];let c=a.getAllToolNames().filter(a=>!0!==ar[a]);return[...new Set([...b,...c])]}function $(a,b,c){let d=c.name.trim();!d||b.has(d)||(b.add(d),a.push({...c,name:d}))}let av=["fork","goal"];async function _(a){let b=[],c=new Set;for(let a of av){let d=i.BUILTIN_SLASH_COMMAND_DEFS.find(b=>b.name===a);if(!d)continue;let e=d.inlineHint;$(b,c,{name:d.name,aliases:d.aliases,description:d.description,source:"builtin",...e?{input:{hint:e}}:{},...d.subcommands?{subcommands:d.subcommands}:{}})}for(let d of(await (0,g.buildAvailableSlashCommands)(a)))$(b,c,d);for(let d of a.promptTemplates)$(b,c,{name:d.name,description:d.description,source:"prompt",...d.source?{path:d.source}:{}});return b}function aa(a){let b="asyncJobManager"in a?a.asyncJobManager:void 0;if(b&&"object"==typeof b&&"getRunningJobs"in b&&"function"==typeof b.getRunningJobs&&"hasPendingDeliveries"in b&&"function"==typeof b.hasPendingDeliveries&&"waitForAll"in b&&"function"==typeof b.waitForAll)return b}async function ab(a,b){let{promise:c,resolve:d}=Promise.withResolvers(),e=setTimeout(()=>d(!1),Math.max(0,b-Date.now()));try{return await Promise.race([a.then(()=>!0),c])}finally{clearTimeout(e)}}class aw{constructor(a,b){this.inner=a,this.listeners=[],this.pendingUiResponses=new Map,this.keepAliveListeners=new Set,this.pendingUiRequests=new Map,this.activeCustomUis=new Map,this.extensionStatuses=new Map,this.extensionWidgets=new Map,this.promptRunning=!1,this.modelMutations=0,this.presetMutation=!1,this.handoffRunning=!1,this.compactionStarted=null,this.extensionsBound=!1,this.extensionBindingPromise=null,this.extensionBindingError=null,this.forceEmptySystemPrompt=!1,this.unsubscribe=null,this.idleTimer=null,this.onDestroyCallback=null,this.shutdownPromise=null,this.subagentHistory=new Map,this.goalModeController=null,this._alive=!0,this.closing=!1,this.projectCodeLoaded=!1,this.backgroundSettleWatch=null,this.subagents=new s.RpcSubagentRegistry(b,a=>{this.rememberSubagentFrame(a),this.emit(a),this.resetIdleTimer(),aj()}),this.subagents.setSubscriptionLevel("progress")}rememberSubagentSnapshot(a){if(this.subagentHistory.set(a.id,(0,N.G2)(this.subagentHistory.get(a.id),a)),this.subagentHistory.size<=128)return;let b=[...this.subagentHistory.values()].filter(a=>"pending"!==a.status&&"running"!==a.status).sort((a,b)=>a.lastUpdate-b.lastUpdate);for(;this.subagentHistory.size>128&&b.length>0;){let a=b.shift();a&&this.subagentHistory.delete(a.id)}}rememberSubagentFrame(a){if("subagent_progress"===a.type){let b=a.payload,c=b?.progress?.id;if(!c)return;let d=this.subagents.getSubagents().find(a=>a.id===c);d&&this.rememberSubagentSnapshot(d);return}if("subagent_lifecycle"!==a.type)return;let b=a.payload;if(!b?.id||!b.status)return;let c=this.subagents.getSubagents().find(a=>a.id===b.id);if("started"===b.status){c&&this.rememberSubagentSnapshot(c);return}let d=c??this.subagentHistory.get(b.id),e="failed"===b.status?"failed":"aborted"===b.status?"aborted":"completed";this.rememberSubagentSnapshot({id:b.id,index:b.index??d?.index??0,agent:b.agent??d?.agent??b.id,agentSource:b.agentSource??d?.agentSource??"bundled",description:b.description??d?.description,status:e,task:d?.task,assignment:d?.assignment,sessionFile:b.sessionFile??d?.sessionFile,lastUpdate:Date.now(),parentToolCallId:b.parentToolCallId??d?.parentToolCallId,progress:d?.progress?{...d.progress,status:e}:void 0})}getSubagentSnapshots(){for(let a of this.subagents.getSubagents())this.rememberSubagentSnapshot(a);let a=new Map(this.subagentHistory);for(let b of this.subagents.getSubagents())a.has(b.id)||a.set(b.id,b);return[...a.values()].sort((a,b)=>{let c="pending"===a.status||"running"===a.status,d="pending"===b.status||"running"===b.status;return c!==d?c?-1:1:c?a.index-b.index||a.id.localeCompare(b.id):b.lastUpdate-a.lastUpdate||a.id.localeCompare(b.id)})}get sessionId(){return this.inner.sessionId}get sessionFile(){return this.inner.sessionFile??""}get cwd(){return this.inner.sessionManager.getCwd()}isAlive(){return this._alive}isWaitingForUser(){return this.pendingUiResponses.size>0}isRunning(){return this._alive&&(this.promptRunning||this.handoffRunning||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning||this.subagents.getSubagents().length>0)}isSafelyIdle(){if(!this._alive||this.closing||this.isRunning()||this.pendingUiResponses.size>0)return!1;let a=aa(this.inner);if(a&&(a.getRunningJobs().length>0||a.hasPendingDeliveries()))return!1;let b="hasPendingAsyncWork"in this.inner?this.inner.hasPendingAsyncWork:void 0;if("function"==typeof b&&!0===b.call(this.inner))return!1;let c=this.inner.getGoalModeState?.();return!(c?.enabled&&"active"===c.goal.status)}watchBackgroundWork(){if(this.backgroundSettleWatch||!this._alive)return;let a=aa(this.inner);a&&0!==a.getRunningJobs().length&&(this.backgroundSettleWatch=a.waitForAll().catch(()=>{}).finally(()=>{this.backgroundSettleWatch=null,this._alive&&aj()}))}beginClose({onlyWhenIdle:a=!1}={}){return!this._alive||!(a&&!this.closing&&this.isRunning())&&(this.closing=!0,!0)}cancelClose(){this._alive&&!this.shutdownPromise&&(this.closing=!1)}bindToolUiContext(a){a(this.createExtensionUiContext(),!0)}start(){this.syncPlanModeFromSession(),this.goalMode.restore().catch(a=>{console.error("[cuelo] failed to restore goal mode:",a instanceof Error?a.message:a)}),this.unsubscribe=this.inner.subscribe(a=>{if("agent_end"===a.type&&(0,C.mD)(),an.has(a.type)&&this.resetIdleTimer(),"auto_compaction_start"===a.type||"compaction_start"===a.type){let b="string"==typeof a.reason?a.reason:null;this.compactionStarted={at:this.compactionStarted?.at??Date.now(),reason:b??this.compactionStarted?.reason??null}}else("auto_compaction_end"===a.type||"compaction_end"===a.type)&&(this.compactionStarted=null);this.emit(a),am.has(a.type)&&aj(),this.goalMode.handleSessionEvent(a).catch(a=>{console.error("[cuelo] goal mode failed to handle a session event:",a instanceof Error?a.message:a)})}),this.resetIdleTimer(),aj()}setForceEmptySystemPrompt(a){this.forceEmptySystemPrompt=a,this.applyForcedEmptySystemPrompt()}beginExtensionBinding(a={}){this.ensureExtensionsBound(a).catch(a=>{console.error("[cuelo] failed to dispatch session_start to extensions:",a instanceof Error?a.message:a)})}async waitUntilReady(){await this.waitForExtensionsBound()}ensureExtensionsBound(a={}){return(a.forceEmptySystemPrompt&&(this.forceEmptySystemPrompt=!0),this.extensionsBound)?(this.applyForcedEmptySystemPrompt(),Promise.resolve()):(this.extensionBindingPromise||(this.extensionBindingError=null,this.extensionBindingPromise=(async()=>{this._alive&&(await (0,n.initializeExtensions)(this.inner,{uiContext:this.createExtensionUiContext(),reportSendError:(a,b)=>this.emit({type:"extension_error",extensionPath:a,event:"send",error:b.message}),reportRuntimeError:a=>this.emit({type:"extension_error",extensionPath:a.extensionPath,event:a.event,error:a.error}),onShutdown:()=>this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"notify",notifyType:"warning",message:"Extension requested shutdown, but shutdown is not supported in CUELO."})}),this.extensionsBound=!0,this.applyForcedEmptySystemPrompt(),console.log(`[cuelo] session_start dispatched to extensions for session ${this.inner.sessionId}`))})().catch(a=>{throw this.extensionBindingError=a,a})),this.extensionBindingPromise)}async waitForExtensionsBound(){try{this.extensionBindingPromise&&await this.extensionBindingPromise}catch(a){throw a instanceof Error?a:Error(String(a))}if(this.extensionBindingError)throw this.extensionBindingError instanceof Error?this.extensionBindingError:Error(String(this.extensionBindingError))}shouldWaitForExtensions(a){return"prompt"===a||"steer"===a||"follow_up"===a||"handoff"===a||"get_commands"===a||"execute_slash_command"===a||"goal"===a}async withFinalRunningNotification(a){try{return await a()}finally{this.resetIdleTimer(),aj()}}async shutdownAfterCommittedFork(a){try{await this.shutdown()}catch(b){console.error(`[cuelo] fork created session ${a}, but wrapper shutdown failed:`,b instanceof Error?b.message:b)}}applyForcedEmptySystemPrompt(){this.forceEmptySystemPrompt&&this.inner.agent.state&&(this.inner.agent.state.systemPrompt=[])}get goalMode(){return this.goalModeController||(this.goalModeController=new L.zd(this.inner,{isBusy:()=>this.promptRunning||this.handoffRunning||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning,runContinuation:a=>this.runGoalContinuation(a),onStatusChange:a=>this.emit({type:"goal_status",status:a})})),this.goalModeController}async runGoalContinuation(a){this.promptRunning=!0,aj();try{await this.inner.promptCustomMessage({customType:"goal-continuation",content:a,display:!1,attribution:"user"})}catch(a){throw this.emit({type:"prompt_error",errorMessage:a instanceof Error?a.message:String(a)}),a}finally{this.promptRunning=!1,this.resetIdleTimer(),this.emit({type:"prompt_done"}),aj()}}syncPlanModeFromSession(){let a=this.inner.getPlanModeState?.();if(!a){let b,c=this.inner.sessionManager.getEntries();for(let a=c.length-1;a>=0;a-=1)if(c[a]?.type==="mode_change"){b=c[a];break}let d=b?.data?.planFilePath;b?.mode==="plan"&&"string"==typeof d&&d.length>0&&(a={enabled:!0,planFilePath:d,workflow:b.data?.workflow==="sequential"?"sequential":"parallel",reentry:!0},this.inner.setPlanModeState?.(a))}a?.enabled&&this.inner.setPlanProposalHandler?.(a=>this.handlePlanProposal(a))}async handlePlanProposal(a){let b=this.inner.getPlanModeState?.();if(!b?.enabled||!this.inner.preparePlanForReview)throw Error("Plan mode is not active.");let c=await this.inner.preparePlanForReview(a),d=c.details?.planFilePath,e=c.details?.title;if(!d||!e)throw Error("The proposed plan could not be resolved.");let f=await (0,o.readPlanFile)(d,{cwd:this.cwd,localProtocolOptions:{getArtifactsDir:()=>this.inner.sessionManager.getArtifactsDir(),getSessionId:()=>this.inner.sessionManager.getSessionId()}});if(!f?.trim())throw Error(`Plan file not found at ${d}`);let g=await this.requestExtensionUi({method:"plan_review",title:e,planFilePath:d,planContent:f},JSON.stringify({action:"refine"}),a=>"value"in a?a.value:JSON.stringify({action:"refine"})),h={};try{h=JSON.parse(g)}catch{}let i={planFilePath:d,title:e,planExists:!0};if("approve"===h.action)return this.inner.setPlanReferencePath?.(d),this.inner.setPlanProposalHandler?.(null),this.inner.setPlanModeState?.(void 0),this.inner.sessionManager.appendModeChange("none"),{content:[{type:"text",text:`Plan approved at ${d}. Plan mode exited; proceed with the implementation.`}],details:i};b.planFilePath!==d&&(this.inner.setPlanModeState?.({...b,planFilePath:d}),this.inner.sessionManager.appendModeChange("plan",{planFilePath:d}));let j="string"==typeof h.feedback?h.feedback.trim():"";return{content:[{type:"text",text:["Plan refinement requested.",j?`User feedback:
8
+ ${j}`:"",`Update the plan file, then write ${e} to xd://propose again when ready.`].filter(Boolean).join("\n\n")}],details:i}}publishSessionSnapshot(a,b){this.emit({type:"session_snapshot",sessionId:this.sessionId,entryId:a,context:b})}emit(a){for(let b of this.listeners)b(a)}resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=setTimeout(()=>{this.keepAliveListeners.size>0||this.isRunning()?this.resetIdleTimer():this.shutdown().catch(a=>{console.error("[pi-web] failed to shut down idle session:",a instanceof Error?a.message:a)})},6e5)}persistBashOnlySession(){let a=this.inner.sessionManager,b=a.getSessionFile();if(!b||(0,w.existsSync)(b))return;let c=a.getHeader();if(!c)return;let d=[c,...a.getEntries()].map(a=>JSON.stringify(a)).join("\n")+"\n";(0,w.writeFileSync)(b,d,{encoding:"utf8",flag:"wx"}),a.flushed=!0,(0,C.O8)(this.inner.sessionId,b)}onEvent(a,b={}){for(let c of(this.listeners.push(a),b.keepAlive&&(this.keepAliveListeners.add(a),this.resetIdleTimer()),this.pendingUiRequests.values()))a(c);return()=>{let b=this.listeners.indexOf(a);-1!==b&&this.listeners.splice(b,1),this.keepAliveListeners.delete(a)&&0===this.keepAliveListeners.size&&this._alive&&this.resetIdleTimer()}}onDestroy(a){this.onDestroyCallback=a}async sendInternalPrompt(a){return this.send({type:"prompt",message:a},!0)}async emitGenuineUserInput(a,b){let c=this.inner.extensionRunner;if(!c?.hasHandlers?.("input"))return{text:a,images:b};let d=await c.emitInput?.(a,b,"rpc");return d?!0===d.handled?(console.log(`[cuelo] input event consumed by an extension for session ${this.inner.sessionId}`),null):{text:void 0!==d.text?d.text.trim():a,images:void 0!==d.images?d.images:b}:{text:a,images:b}}async send(a,b=!1){this.resetIdleTimer();let c=a.type;if(this.shouldWaitForExtensions(c)&&await this.waitForExtensionsBound(),this.closing&&!0===ap[c])throw Error("Session is closing");if(this.handoffRunning&&!0!==ao[c])throw Error("Cannot modify the session while a handoff is in progress");let d="set_model"===c&&(void 0!==a.thinkingLevel||void 0!==a.oauthPosition);if(!0===aq[c]&&(this.presetMutation||d&&this.modelMutations>0))throw Error("Cannot change the model while another model change is in progress");if("prompt"===c&&!b&&this.presetMutation)throw Error("Cannot send a prompt while a Main preset is being applied");if(("prompt"===c||"steer"===c||"follow_up"===c)&&this.syncPlanModeFromSession(),"prompt"===c||"steer"===c||"follow_up"===c){let b=(0,y.kc)(a.images);if(b)throw Error(b)}switch(c){case"prompt":{if(this.inner.isBashRunning)throw Error("Cannot send a prompt while a shell command is running");this.goalMode.onUserPrompt();let c=a.message,d=a.images,e=a.streamingBehavior;if(!b&&void 0===e){let a=await this.emitGenuineUserInput(c,d);if(null===a||(c=a.text,d=a.images,!c&&!d?.length))return null}let f=(0,k.resolveRpcSkillInvocation)(this.inner,c),g=f?(0,j.buildSkillPromptMessage)(f.skill,f,"user").then(a=>this.inner.promptCustomMessage({customType:l.SKILL_PROMPT_MESSAGE_TYPE,content:d?.length?[{type:"text",text:a.message},...d]:a.message,display:!0,details:a.details,attribution:"user"},{...e?{streamingBehavior:e}:{},queueChipText:c})):this.inner.prompt(c,{...d?.length?{images:d}:{},...e?{streamingBehavior:e}:{},userInitiated:!0});return this.promptRunning=!0,aj(),g.then(()=>{this.promptRunning=!1,this.resetIdleTimer(),e||this.emit({type:"prompt_done"}),aj()}).catch(a=>{this.promptRunning=!1,this.resetIdleTimer(),(0,C.mD)(),this.emit({type:"prompt_error",errorMessage:a instanceof Error?a.message:String(a)}),e||this.emit({type:"prompt_done"}),aj()}),null}case"abort":return this.goalMode.onAbort(),await this.withFinalRunningNotification(()=>this.inner.abort()),null;case"get_state":{let a=this.inner.model,b=this.inner.getContextUsage();return{sessionId:this.inner.sessionId,sessionFile:this.inner.sessionFile??"",isStreaming:this.inner.isStreaming,isPromptRunning:this.promptRunning,isBashRunning:this.inner.isBashRunning,isCompacting:this.inner.isCompacting,compaction:this.inner.isCompacting&&this.compactionStarted?{elapsedMs:Math.max(0,Date.now()-this.compactionStarted.at),reason:this.compactionStarted.reason}:null,isHandoffRunning:this.handoffRunning,autoCompactionEnabled:this.inner.autoCompactionEnabled,autoRetryEnabled:this.inner.autoRetryEnabled,model:a?{id:a.id,provider:a.provider}:void 0,messageCount:0,pendingMessageCount:this.inner.queuedMessageCount,queuedMessages:{steering:[...this.inner.getQueuedMessages().steering],followUp:[...this.inner.getQueuedMessages().followUp]},contextUsage:b?{percent:b.percent,contextWindow:b.contextWindow,tokens:b.tokens}:null,systemPrompt:[this.inner.agent.state?.systemPrompt??""].flat().join("\n"),thinkingLevel:this.inner.agent.state?.thinkingLevel??"off",configuredThinkingLevel:this.inner.configuredThinkingLevel()??"off",thinkingCeiling:this.inner.thinkingLevelCeiling??null,fastModeEnabled:this.inner.isFastModeEnabled(),fastModeActive:this.inner.isFastModeActive(),extensionStatuses:this.getExtensionStatuses(),extensionWidgets:this.getExtensionWidgets(),subagents:this.getSubagentSnapshots(),todoPhases:this.inner.getTodoPhases(),goal:this.goalMode.getStatus()}}case"get_subagents":return{subagents:this.getSubagentSnapshots()};case"get_subagent_messages":{let b=this.subagents.resolveSessionFile(a);return(0,s.readRpcSubagentTranscript)(b,a.fromByte)}case"set_model":{let{provider:b,modelId:c,role:d,oauthPosition:e,thinkingLevel:f}=a,g=void 0!==f||void 0!==e;this.modelMutations+=1,g&&(this.presetMutation=!0);try{let a,g=await (0,H.findModelWithRecovery)(this.inner.modelRegistry,b,c,{forceDiscovery:!0});if(g.miss)throw Error((0,I.zX)(g.miss));let h=g.model,i=this.inner.model,j=void 0!==e||void 0!==f?function(a){try{let b=a.sessionManager.getBranch();if(!Array.isArray(b))return;for(let a=b.length-1;a>=0;a-=1){let c=b[a];if(c?.type==="model_change")return"string"==typeof c.role?c.role:void 0}}catch{}}(this.inner):void 0,k=void 0!==f?this.inner.configuredThinkingLevel():void 0;if(void 0!==e){let b=await T(this.inner,h.provider);if(!b.ok)throw Error(`${b.reason} 계정 변경을 시작하지 않았습니다.`);a=b.snapshot}if(await this.inner.setModel(h,d),void 0!==e){let b=await V(this.inner,h.provider,e);if(!b.ok){let c=await W(this.inner,{previousModel:i,previousRole:j,previousThinking:k,account:a});throw Error(`${b.reason} ${X(c)}`)}}if(void 0!==f)try{this.inner.setThinkingLevel(f)}catch(d){let b=`thinking level ${f} 적용에 실패했습니다: ${d instanceof Error?d.message:String(d)}`,c=await W(this.inner,{previousModel:i,previousRole:j,previousThinking:k,account:a});throw Error(`${b} ${X(c)}`)}return(0,A.kn)(),(0,C.mD)(),{id:h.id,provider:h.provider,...d?{role:d}:{}}}finally{g&&(this.presetMutation=!1),this.modelMutations-=1}}case"set_role_model":{let b=a.role;this.modelMutations+=1;try{await (0,H.recoverMissingModelRefs)(this.inner.modelRegistry,(0,G.Ex)(this.inner.settings));let a=this.inner.resolveRoleModel(b);if(!a)throw Error(`No model configured for role "${b}"`);return await this.inner.setModel(a,b),(0,A.kn)(),(0,C.mD)(),{id:a.id,provider:a.provider,role:b}}finally{this.modelMutations-=1}}case"fork":{let b;if(this.inner.isBashRunning)throw Error("Cannot fork while a shell command is running");let c=this.inner.sessionManager,d=function(a,b){if("string"==typeof b&&b.length>0)return b;for(let b=a.length-1;b>=0;b-=1){let c=a[b];if(c?.type==="message"&&c.message?.role==="user"&&c.id)return c.id}}(c.getBranch(),a.entryId);if(!d)throw Error("No user message to fork from yet");let e=this.inner.sessionFile;if(!e)return{cancelled:!0};let g=c.getEntry(d);if(!g)throw Error("Invalid entry ID for forking");let h=c.getSessionDir();if(g.parentId){let a=(await f.SessionManager.open(e,h)).createBranchedSession(g.parentId);if(!a)throw Error("Failed to create forked session");b=a}else{let a=f.SessionManager.create(c.getCwd(),h);await a.newSession({parentSession:e}),await a.ensureOnDisk(),b=a.getSessionFile()}let i=(await f.SessionManager.open(b,h)).getSessionId();return(0,C.O8)(i,b),(0,C.mD)(),await this.shutdownAfterCommittedFork(i),{cancelled:!1,newSessionId:i}}case"handoff":{if(this.handoffRunning||this.promptRunning||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)throw Error("Cannot hand off while the session is busy");let b=a.customInstructions;this.handoffRunning=!0,aj();try{if(!await this.inner.handoff(b))return{cancelled:!0};return(0,C.mD)(),{cancelled:!1}}finally{this.handoffRunning=!1,aj()}}case"navigate_tree":if(this.inner.isBashRunning)throw Error("Cannot navigate while a shell command is running");return{cancelled:(await this.inner.navigateTree(a.targetId,{})).cancelled};case"set_thinking_level":{let b=a.level;this.modelMutations+=1;try{return this.inner.setThinkingLevel(b),"xhigh"===b&&this.inner.model?.compat?.thinkingFormat==="deepseek"&&this.inner.agent?.state&&(this.inner.agent.state.thinkingLevel="xhigh"),(0,C.mD)(),null}finally{this.modelMutations-=1}}case"set_thinking_ceiling":{let b=a.ceiling??null;if(null!==b&&!(0,O.KE)(b))throw Error(`Invalid thinking ceiling: ${String(b)}`);this.modelMutations+=1;try{this.inner.setThinkingLevelCeiling(b??void 0);let a=this.inner.sessionManager;return(0,O.hi)(a.getBranch())!==b&&a.appendCustomEntry(O.FR,{ceiling:b}),(0,C.mD)(),null}finally{this.modelMutations-=1}}case"set_fast_mode":if("boolean"!=typeof a.enabled)throw Error("set_fast_mode requires a boolean enabled");this.modelMutations+=1;try{let b=this.inner.setFastMode(a.enabled);if(a.enabled&&!b)throw Error("Fast mode is unavailable for the current model.");return(0,C.mD)(),{enabled:this.inner.isFastModeEnabled(),active:this.inner.isFastModeActive()}}finally{this.modelMutations-=1}case"compact":try{return await this.withFinalRunningNotification(()=>this.inner.compact(a.customInstructions))}finally{(0,C.mD)()}case"set_session_name":{let b=a.name?.trim();if(!b)throw Error("Session name cannot be empty");return await this.inner.sessionManager.setSessionName(b,"user"),(0,C.mD)(),null}case"get_session_stats":return{...this.inner.getSessionStats(),sessionName:this.inner.sessionManager.getSessionName()};case"get_last_assistant_text":return{text:this.inner.getLastAssistantText()??""};case"set_auto_compaction":return this.inner.setAutoCompactionEnabled(a.enabled),null;case"clear_queue":return this.inner.clearQueue();case"remove_queued_message":{let b=a.queue;if("string"!=typeof a.message)throw Error("message must be a string");if("steering"!==b&&"followUp"!==b)throw Error('queue must be "steering" or "followUp"');return{removed:this.inner.removeQueuedMessage(a.message,b)}}case"steer":{let b=a.images;var e,g=this.sessionId,i=a.message;try{(0,w.appendFileSync)((0,x.join)((0,f.getAgentDir)(),"steering-received.jsonl"),`${JSON.stringify({ts:Date.now(),sessionId:g??null,via:"steer",length:"string"==typeof i?i.length:0})}
9
+ `)}catch{}return await this.inner.steer(a.message,b?.length?b:void 0),null}case"follow_up":{let b=a.images;return await this.inner.followUp(a.message,b?.length?b:void 0),null}case"get_tools":{let a=new Set(this.inner.getActiveToolNames());return(e=this.inner).getAllToolNames().map(a=>({name:a,description:e.getToolByName(a)?.description??""})).map(b=>({name:b.name,description:b.description,active:a.has(b.name)}))}case"get_commands":return{commands:await _(this.inner)};case"goal":return await this.goalMode.handleCommand(a.args??"");case"execute_slash_command":{let b=[],c=await (0,h.executeAcpBuiltinSlashCommand)(a.message,{session:this.inner,sessionManager:this.inner.sessionManager,settings:this.inner.settings,cwd:this.cwd,output:a=>{b.push(a)},refreshCommands:()=>{},reloadPlugins:async()=>{await this.waitForExtensionsBound(),this.extensionStatuses.clear(),this.extensionWidgets.clear(),await this.inner.reload(),await this.inner.refreshSkills?.(),this.applyForcedEmptySystemPrompt(),(0,A.kn)()}});if(!1===c)return{handled:!1,output:b};return{handled:!0,output:b,..."prompt"in c?{prompt:c.prompt}:{}}}case"set_tools":{let b=a.toolNames;return this.setForceEmptySystemPrompt(0===b.length),await this.inner.setActiveToolsByName(this.goalMode.reconcileToolNames(Z(this.inner,b))),this.applyForcedEmptySystemPrompt(),null}case"reload":return await this.waitForExtensionsBound(),this.extensionStatuses.clear(),this.extensionWidgets.clear(),await this.inner.reload(),await this.inner.refreshSkills?.(),this.applyForcedEmptySystemPrompt(),(0,A.kn)(),{success:!0};case"abort_compaction":return this.inner.abortCompaction(),null;case"extension_ui_response":return this.resolveExtensionUiResponse(a),null;case"extension_ui_input":return this.handleExtensionUiInput(a.id,a.data),null;case"set_auto_retry":return this.inner.setAutoRetryEnabled(a.enabled),null;case"bash":{if(this.promptRunning||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)throw Error("Cannot run a shell command while the session is busy");let b=this.inner.executeBash(a.command,void 0,{excludeFromContext:a.excludeFromContext});aj();try{let a=await b;return this.persistBashOnlySession(),a}finally{this.resetIdleTimer(),(0,C.mD)(),aj()}}case"abort_bash":return this.inner.abortBash(),null;default:throw Error(`Unsupported command: ${c}`)}}destroy(){if(this._alive){for(let a of(this._alive=!1,this.idleTimer&&clearTimeout(this.idleTimer),this.inner.isBashRunning&&this.inner.abortBash(),this.unsubscribe?.(),this.goalModeController?.dispose(),this.subagents.dispose(),this.subagentHistory.clear(),this.keepAliveListeners.clear(),this.pendingUiResponses.values()))a.cancel();for(let a of Array.from(this.activeCustomUis.keys()))this.closeCustomUi(a,void 0);this.pendingUiResponses.clear(),this.pendingUiRequests.clear();try{this.inner.dispose?.()}finally{try{this.onDestroyCallback?.()}finally{aj()}}}}async shutdown(){return this.shutdownPromise?this.shutdownPromise:this._alive?(this.shutdownPromise=(async()=>{try{try{await this.waitForExtensionsBound()}catch(a){console.error("[pi-web] extension binding failed before session shutdown:",a instanceof Error?a.message:a)}await this.inner.extensionRunner?.emit?.({type:"session_shutdown",reason:"quit"})}finally{this.destroy()}})(),this.shutdownPromise):void 0}async stopBackgroundWorkForDrain(a){let b=Date.now()+a,c=function(a){let b="asyncJobManager"in a?a.asyncJobManager:void 0;if(b&&"object"==typeof b&&"cancelAll"in b&&"waitForAll"in b&&"function"==typeof b.cancelAll&&"function"==typeof b.waitForAll)return b}(this.inner);for(let a of(c?.cancelAll(void 0,t.ASYNC_JOB_MANAGER_SHUTDOWN_REASON),this.subagents.getSubagents()))p.AgentRegistry.global().get(a.id)?.session?.abort().catch(()=>{});let d=!c||await ab(c.waitForAll(),b);for(;this.subagents.getSubagents().length>0&&Date.now()<b;)await function(){let{promise:a,resolve:b}=Promise.withResolvers();return setTimeout(b,100),a}();return d&&0===this.subagents.getSubagents().length}resolveExtensionUiResponse(a){let b=this.pendingUiResponses.get(a.id);b&&b.resolve(a)}getExtensionStatuses(){return Array.from(this.extensionStatuses,([a,b])=>({key:a,text:b}))}getExtensionWidgets(){return Array.from(this.extensionWidgets.values())}getCustomUiWidth(a){if(!a||"object"!=typeof a)return P.p1;let b=a.overlayOptions,c="function"==typeof b?b():b;if(!c||"object"!=typeof c)return P.p1;let d=c.width;return"number"==typeof d&&Number.isFinite(d)?Math.max(40,Math.min(140,Math.round(d))):92}emitCustomUiRender(a,b){let c;try{c=b.component.render(b.width)}catch(a){c=[`Extension custom UI render failed: ${a instanceof Error?a.message:String(a)}`]}let d={type:"extension_ui_request",id:a,method:"custom",lines:c};this.pendingUiRequests.set(a,d),this.emit(d)}closeCustomUi(a,b){let c=this.activeCustomUis.get(a);if(c&&!c.settled){c.settled=!0,this.activeCustomUis.delete(a),this.pendingUiRequests.delete(a);try{c.component.dispose?.()}catch{}this.emit({type:"extension_ui_request",id:a,method:"custom",lines:[],closed:!0}),c.resolve(b)}}handleExtensionUiInput(a,b){if("string"!=typeof b)return;let c=this.activeCustomUis.get(a);if(!c){"activity"===b&&this.pendingUiResponses.get(a)?.activity?.();return}try{c.component.handleInput?.(b),this.activeCustomUis.has(a)&&this.emitCustomUiRender(a,c)}catch(b){this.closeCustomUi(a,void 0),this.emit({type:"extension_error",extensionPath:`custom-ui:${a}`,event:"custom_ui_input",error:b instanceof Error?b.message:String(b)})}}requestExtensionCustomUi(a,b){if("function"!=typeof a)return Promise.resolve(void 0);let c=(0,v.randomUUID)(),d=this.getCustomUiWidth(b);return new Promise(b=>{let e=!1,f=(0,P.TQ)(()=>{let a=this.activeCustomUis.get(c);a&&this.emitCustomUiRender(c,a)},d),g=a=>{e||(e=!0,b(a))},h=a=>{this.activeCustomUis.has(c)?this.closeCustomUi(c,a):g(a)};Promise.resolve().then(()=>a(f,at,au,h)).then(a=>{if(e){try{a?.dispose?.()}catch{}return}if(!a||"object"!=typeof a||"function"!=typeof a.render)return void g(void 0);let b={component:a,width:d,resolve:a=>g(a),settled:!1};this.activeCustomUis.set(c,b),this.emitCustomUiRender(c,b)}).catch(a=>{e||(this.emit({type:"extension_error",extensionPath:`custom-ui:${c}`,event:"custom_ui",error:a instanceof Error?a.message:String(a)}),g(void 0))})})}requestExtensionUi(a,b,c,d,e,f){let g;if(e?.aborted)return Promise.resolve(b);let h=(0,v.randomUUID)(),i={type:"extension_ui_request",id:h,...a,...d?{timeout:d,expiresAt:Date.now()+d}:{}},{promise:j,resolve:k}=Promise.withResolvers(),l=!1,m=()=>{clearTimeout(g),e?.removeEventListener("abort",o),this.pendingUiRequests.delete(h),this.pendingUiResponses.delete(h),aj()},n=(a,b=!1)=>{l||(l=!0,m(),b&&this.emit({...i,closed:!0}),k(a))},o=()=>n(b,!0),p=()=>{g&&clearTimeout(g),g=setTimeout(()=>n(f?f():b,!0),d)};return d&&p(),e?.addEventListener("abort",o,{once:!0}),this.pendingUiRequests.set(h,i),this.pendingUiResponses.set(h,{resolve:a=>n(c(a)),cancel:()=>n(b),...d&&f?{activity:()=>{p();let a=this.pendingUiRequests.get(h);a&&this.pendingUiRequests.set(h,{...a,expiresAt:Date.now()+d})}}:{}}),aj(),this.emit(i),j}createExtensionUiContext(){return{timeoutStartsOnPresentation:!1,askDialog:(a,b)=>this.requestExtensionUi({method:"ask",questions:a,...b?.timeout?{timeout:b.timeout}:{}},void 0,a=>{if("value"in a)try{return JSON.parse(a.value)}catch{return}},b?.timeout,b?.signal,()=>(function(a){let b=[];for(let c of a){let a=void 0===c.recommended?void 0:c.options[c.recommended];if(!a)return;b.push({id:c.id,question:c.question,options:c.options.map(a=>a.label),multi:c.multi??!1,selectedOptions:[a.label],timedOut:!0})}return{kind:"submit",results:b}})(a)),select:(a,b,c)=>this.requestExtensionUi({method:"select",title:a,options:b,...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),confirm:(a,b,c)=>this.requestExtensionUi({method:"confirm",title:a,message:b,...c?.timeout?{timeout:c.timeout}:{}},!1,a=>"confirmed"in a&&a.confirmed,c?.timeout,c?.signal),input:(a,b,c)=>this.requestExtensionUi({method:"input",title:a,...void 0!==b?{placeholder:b}:{},...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),editor:(a,b,c)=>this.requestExtensionUi({method:"editor",title:a,...void 0!==b?{prefill:b}:{},...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),notify:(a,b)=>{this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"notify",message:a,notifyType:b})},onTerminalInput:()=>()=>{},setStatus:(a,b)=>{void 0===b?this.extensionStatuses.delete(a):this.extensionStatuses.set(a,b),this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"setStatus",statusKey:a,statusText:b})},setWorkingMessage:()=>{},setWorkingVisible:()=>{},setWorkingIndicator:()=>{},setHiddenThinkingLabel:()=>{},setWidget:(a,b,c)=>{(void 0===b||Array.isArray(b))&&(void 0===b?this.extensionWidgets.delete(a):this.extensionWidgets.set(a,{key:a,lines:b,placement:c?.placement??"aboveEditor"}),this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"setWidget",widgetKey:a,widgetLines:b,widgetPlacement:c?.placement}))},setFooter:()=>{},setHeader:()=>{},setTitle:a=>{this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"setTitle",title:a})},custom:(a,b)=>this.requestExtensionCustomUi(a,b),pasteToEditor:a=>{this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"set_editor_text",text:a})},setEditorText:a=>{this.emit({type:"extension_ui_request",id:(0,v.randomUUID)(),method:"set_editor_text",text:a})},getEditorText:()=>"",addAutocompleteProvider:()=>{},setEditorComponent:()=>{},getEditorComponent:()=>void 0,get theme(){return at},getAllThemes:()=>[],getTheme:()=>void 0,setTheme:()=>({success:!1,error:"Theme switching is not supported in CUELO extension UI yet"}),getToolsExpanded:()=>!1,setToolsExpanded:()=>{}}}}function ac(){if(!globalThis.__ompSessions){globalThis.__ompSessions=new Map;let a=()=>globalThis.__ompSessions?.forEach(a=>a.destroy());process.once("exit",a),process.once("SIGINT",a),process.once("SIGTERM",a)}return globalThis.__ompSessions}function ad(){return globalThis.__ompClosingSessionIds||(globalThis.__ompClosingSessionIds=new Set),globalThis.__ompClosingSessionIds}function ae(a,{onlyWhenIdle:b=!1}={}){let c=ad();if(c.has(a))return{reserved:!1,release:()=>{}};let d=ac().get(a);if(d?!d.beginClose({onlyWhenIdle:b}):b&&ai().includes(a))return{reserved:!1,release:()=>{}};c.add(a);let e=!1;return{reserved:!0,release:()=>{e||(e=!0,c.delete(a),d?.cancelClose())}}}function af(){return globalThis.__ompStartingSessionCwds||(globalThis.__ompStartingSessionCwds=new Map),globalThis.__ompStartingSessionCwds}function ag(a){return ac().get(a)}function ah(){let a=[];for(let b of ac().values()){if(!b.isAlive())continue;let c=b.inner.sessionManager,d=c.getHeader(),e=c.getEntries(),f=e.filter(a=>"message"===a.type),g=f.find(a=>"user"===a.message.role),h=c.getSessionFile()??b.sessionFile,i=!!(h&&(0,w.existsSync)(h));if(!i&&(!b.isRunning()||!g))continue;let j=d?.timestamp??e[0]?.timestamp??new Date().toISOString(),k=new Date(j).getTime(),l=Number.isNaN(k)?Date.now():k;for(let a of f){let b=function(a){if("user"!==a.message.role&&"assistant"!==a.message.role)return;if("number"==typeof a.message.timestamp)return a.message.timestamp;let b=new Date(a.timestamp).getTime();return Number.isNaN(b)?void 0:b}(a);void 0!==b&&(l=Math.max(l,b))}a.push({path:h??"",id:d?.id??b.sessionId,cwd:d?.cwd??b.cwd,name:c.getSessionName(),created:j,modified:new Date(l).toISOString(),messageCount:f.length,firstMessage:g&&function(a){if("bashExecution"===a.message.role)return"";let b=a.message.content,c="string"==typeof b?b:b.map(a=>"text"===a.type?a.text:"").filter(Boolean).join(" ");return(0,z.we)(c)}(g)||"(no messages)",transient:!i})}return a}let ax={sessions:()=>ac().values(),isStarting:a=>af().has(a)};function ai(){let a=new Set;for(let[b,c]of ac())c.isRunning()&&a.add(c.sessionId||b);return[...a]}function aj(){let a=ai(),b=[];for(let[a,c]of ac())c.isWaitingForUser()&&b.push(c.sessionId||a);(0,K.p8)(a,b),(0,E.Uc)(ax)}async function ak(a,b,c,d={}){let{toolNames:g,initialModel:h,thinkingLevel:i,accountOauthPosition:j}=d,k=ac(),l=(globalThis.__ompStartLocks||(globalThis.__ompStartLocks=new Map),globalThis.__ompStartLocks);if(ad().has(a))throw Error("Session is closing");let n=k.get(a);if(n?.isAlive())return{session:n,realSessionId:a};let o=l.get(a);if(o)return o;let s=(async()=>{let d,l;await (0,f.initTheme)(!1);let n=(0,f.getAgentDir)(),o=b?await f.SessionManager.open(b,void 0):(()=>{if(!c)throw Error("cwd is required for a new session");return f.SessionManager.create(c,void 0)})(),s=o.getCwd(),t=(d=af(),l=(0,D.LV)(s),d.set(l,(d.get(l)??0)+1),()=>{let a=(d.get(l)??1)-1;a>0?d.set(l,a):d.delete(l)});try{let b,c,d=await (0,H.getOmpRuntime)(),l=await (0,H.getSettingsForCwd)(s);void 0!==g&&(b=0===g.length?[]:void 0);let[t,u]=await Promise.all([(0,f.discoverSessionExtensionPaths)({},s,l),(0,m.discoverCustomToolPaths)([],s)]),v=(0,D.qm)(s,n,{extensionPaths:t,customToolPaths:u}),w=await (0,F.D)(s),{modelRegistry:x}=d;await (0,H.recoverMissingModelRefs)(x,[...(0,G.Ex)(l),...h?[h]:[]]);let y=await (0,B.p)(x,e.cfgEnabledModels.get(l),l),z=(0,G.Ff)(l),A=h?void 0:z?.thinkingLevel,I=i??A,J=o.buildSessionContext().messages.length>0?{scopedModels:[...y.scopedModels],model:void 0,thinkingLevel:void 0}:(0,B.I)(y,{...h?{requestedModel:h}:{},...z?{defaultModel:z}:{},...I?{thinkingLevel:I}:{}}),K={cwd:s,agentDir:n,settings:l,sessionManager:o,modelRegistry:x,hasUI:!0,...J.model?{model:J.model}:{},...J.thinkingLevel?{thinkingLevel:J.thinkingLevel}:{},...J.scopedModels.length>0?{scopedModels:J.scopedModels}:{},...void 0!==b?{toolNames:b,restrictToolNames:!0}:{},...v??{}};(0,f.applyResolvedSystemPromptInputs)(K,w.systemPrompt,w.appendPrompt);let{session:L,eventBus:N,subagentEventBus:P,setToolUIContext:Q}=await (0,f.createAgentSession)(K);c=(0,O.hi)(L.sessionManager.getBranch()),null!==c&&L.setThinkingLevelCeiling(c,!1),g&&g.length>0&&await L.setActiveToolsByName(Z(L,g));let R=new aw(L,N);if(R.projectCodeLoaded=void 0===v,R.bindToolUiContext(Q),void 0!==j){let a=L.model?.provider;if(!a)throw R.destroy(),Error("이 세션의 provider를 알 수 없어 OAuth 계정을 지정하지 못했습니다.");let b=await V(L,a,j);if(!b.ok)throw R.destroy(),Error(b.reason)}g?.length===0&&R.setForceEmptySystemPrompt(!0);let S=L.sessionId,T=ad();if(T.has(a)||T.has(S))throw R.destroy(),Error("Session is closing");if(R.projectCodeLoaded&&(0,E.rt)(s))throw R.destroy(),Error("Project trust was revoked while this session was starting. Please try again.");R.start();let U=L.sessionFile;U&&(0,C.O8)(S,U);let W=U?(0,M.Be)(U,L.getAgentId()??p.MAIN_AGENT_ID,(0,q.createPersistedSubagentReviverFactory)({session:L,authStorage:d.authStorage,modelRegistry:x,settings:l,enableLsp:void 0===b,eventBus:N,subagentEventBus:P}),()=>Math.trunc(Number(r.cfgTaskAgentIdleTtlMs.get(d.settings))||0)):void 0;return R.onDestroy(()=>{W?.(),k.delete(S)}),k.set(S,R),R.beginExtensionBinding({forceEmptySystemPrompt:g?.length===0}),{session:R,realSessionId:S}}finally{t()}})().finally(()=>{l.delete(a)});return l.set(a,s),s}async function al(a,b,c={}){let d=()=>ak(`__new__${(0,v.randomUUID)()}`,"",b,c);if(!a)return d();let e=(globalThis.__ompNewSessionRequests||(globalThis.__ompNewSessionRequests=new Map),globalThis.__ompNewSessionRequests),f=Date.now();for(let[a,b]of e)b.expiresAt<=f&&e.delete(a);for(;;){let b=e.get(a);if(!b)break;let c=await b.starting.catch(()=>null);if(c?.session.isAlive())return c;if(e.get(a)===b){e.delete(a);break}}let g={starting:d(),expiresAt:f+6e5};return e.set(a,g),g.starting.catch(()=>{e.get(a)===g&&e.delete(a)}),g.starting}d()}catch(a){d(a)}})},65667:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Be:()=>m});var e=c(76760),f=c.n(e),g=c(78310),h=c(96175),i=a([g,h]);function j(){return globalThis.__cueloRootAgentIds??=new Map,globalThis.__cueloRootAgentIds}function k(a,b){let c=f().resolve(a);for(let a of b){let b=f().resolve(a);if(b.endsWith(".jsonl")&&c.startsWith(`${b.slice(0,-6)}${f().sep}`))return a}}function l(a,b){if(!a.sessionFile)return!1;let c=k(a.sessionFile,b.keys()),d=c?b.get(c):void 0;if(!c||!d||a.parentId===d)return!1;let e=f().resolve(c).slice(0,-6);return f().dirname(f().resolve(a.sessionFile))===e&&(a.parentId=d,!0)}function m(a,b,c,d,e={}){let f=(globalThis.__cueloRootRevivers??=new Map,globalThis.__cueloRootRevivers),i=j(),n=e.registry??g.AgentRegistry.global();for(let d of(f.set(a,c),i.set(a,b),!function(a){let b=globalThis.__cueloOwnershipRepairs??=new WeakMap;if(b.has(a))return;let c=j();b.set(a,a.onChange(a=>{"registered"===a.type&&l(a.ref,c)}))}(n),n.list()))l(d,i);return(e.lifecycle??h.AgentLifecycleManager.global()).setPersistedSubagentReviverFactory(async a=>{if(!a.sessionFile)return;let b=k(a.sessionFile,f.keys());return b?f.get(b)(a):void 0},d),()=>{f.get(a)===c&&(f.delete(a),i.delete(a))}}[g,h]=i.then?(await i)():i,d()}catch(a){d(a)}})},71069:(a,b,c)=>{c.d(b,{TQ:()=>e,p1:()=>d});let d=92;function e(a,b=d,c=40){return Object.freeze({terminal:Object.freeze({columns:b,rows:c,kittyProtocolActive:!1}),requestRender:a})}},72498:(a,b,c)=>{c.d(b,{LV:()=>k,TK:()=>p,Y1:()=>m,er:()=>n,qm:()=>r,wK:()=>o});var d=c(29021),e=c(33873),f=c(13229),g=c(8102);let h=[".omp/extensions",".omp/hooks",".omp/tools",".pi/extensions",".pi/hooks",".pi/tools",".claude/extensions",".claude/hooks",".claude/tools",".agents/extensions",".agents/hooks",".agents/tools"],i=[".mcp.json",".omp/.mcp.json",".omp/mcp.json",".claude/.mcp.json",".claude/mcp.json",".cursor/mcp.json"];function j(a){return(0,e.join)(a,"cuelo-trusted-projects.json")}function k(a){let b=(0,e.resolve)(a);try{return(0,d.realpathSync)(b)}catch{return b}}function l(a){try{(0,f.adoptLegacyStateFile)(j(a),"omp-web-trusted-projects.json");let b=JSON.parse((0,d.readFileSync)(j(a),"utf8"));if("object"!=typeof b||null===b||Array.isArray(b))return{};return Object.fromEntries(Object.entries(b).filter(a=>"boolean"==typeof a[1]))}catch{return{}}}function m(a,b){return a&&function(a){if(!a)return!1;for(let b of h)if((0,d.existsSync)((0,e.join)(a,b)))return!0;for(let b of i)if((0,d.existsSync)((0,e.join)(a,b)))return!0;return!1}(a)?{requiresTrust:!0,trusted:!0===l(b)[k(a)]}:{requiresTrust:!1,trusted:!0}}function n(a,b){let c=m(a,b);return c.requiresTrust?(o(a,b,!0),{requiresTrust:!0,trusted:!0}):c}function o(a,b,c){let e=l(b);e[k(a)]=c,(0,d.mkdirSync)(b,{recursive:!0}),(0,g.$)(j(b),`${JSON.stringify(e,null,2)}
10
10
  `)}function p(a){return l(a)}function q(a,b){let c=(0,e.relative)((0,e.resolve)(b),(0,e.resolve)(a));return""===c||!(0,e.isAbsolute)(c)&&".."!==c&&!c.startsWith(`..${e.sep}`)&&!c.startsWith("../")}function r(a,b,c){let d=m(a,b);if(d.requiresTrust&&!d.trusted)return{preloadedExtensionPaths:c.extensionPaths.filter(b=>!q(b,a)),preloadedCustomToolPaths:c.customToolPaths.filter(b=>b.source?.level!=="project"&&!q(b.path,a)),enableMCP:!1}}},78970:(a,b,c)=>{c.d(b,{kc:()=>d});function d(a){if(void 0===a)return null;if(!Array.isArray(a))return"images must be an array";if(a.length>10)return"A message can include at most 10 images";for(let b of a){if(!b||"object"!=typeof b||"image"!==b.type)return"Each attachment must be an image";if(!function(a){if(!a||"object"!=typeof a||"string"!=typeof a.data||"string"!=typeof a.mimeType||!a.mimeType.startsWith("image/"))return!1;let b=function(a){if(!a||a.length%4!=0)return null;let b=a.endsWith("==")?2:+!!a.endsWith("="),c=a.length-b;for(let b=0;b<c;b+=1){var d;if(!((d=a.charCodeAt(b))>=65&&d<=90||d>=97&&d<=122||d>=48&&d<=57||43===d||47===d))return null}for(let b=c;b<a.length;b+=1)if("="!==a[b])return null;return a.length/4*3-b}(a.data);return null!==b&&b<=0xa00000}(b))return"Each image must be valid base64 image data of 10MB or smaller"}return null}}};
@@ -1,4 +1,7 @@
1
1
  "use strict";exports.id=7121,exports.ids=[7121],exports.modules={3582:(a,b,c)=>{c.a(a,async(a,d)=>{try{let q;c.d(b,{RT:()=>p,dk:()=>o});var e=c(77598),f=c(51455),g=c(76760),h=c.n(g),i=c(34069),j=c(12969),k=c(50820),l=c(15395),m=a([i]);i=(m.then?(await m)():m)[0];let r=".cuelo-managed",s=/^(?:new|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/,t=/^(?:con|prn|aux|nul|com[0-9¹²³]|lpt[0-9¹²³])(?:\..*)?$/i,u=".part",v=".lease",w=".deleting",x=".cleanup-lock";function n(a){return a?.code}async function o(a){let b;try{b=await (0,f.readFile)(h().join(a,"cuelo-attachment-settings.json"),"utf8")}catch(a){if("ENOENT"===n(a))return(0,k.gP)({});throw a}try{return(0,k.gP)(JSON.parse(b))}catch{return{...(0,k.gP)({}),autoCleanupEnabled:!1}}}class y extends Error{constructor(a,b){super(b),this.code=a,this.name="ManagedAttachmentError"}}class z extends Error{constructor(a){super(`Unknown attachment ids: ${a.join(", ")}`),this.missing=a,this.name="UnknownAttachmentError"}}let A=a=>new Promise(b=>setTimeout(b,a));class B{#a;#b;#c;#d;constructor({root:a,sessionsDir:b,customSessionFilesDir:c,now:d=Date.now,state:e,deletionWaitLimitMs:f=3e4}){this.root=a,this.sessionsDir=b,this.customSessionFilesDir=c,this.now=d,this.#a=f,this.#b=e?.holds??new Map,this.#c=e?.deleting??new Map,this.#d=e?.draftQueues??new Map}get #e(){return h().join(this.root,r)}get #f(){return h().join(this.#e,"attachments")}get #g(){return h().join(this.#e,"drafts")}get #h(){return h().join(this.#e,"uploads")}get #i(){return h().join(this.#e,"handoffs")}#j(a){return h().join(this.#i,`${a}.json`)}get #k(){return h().join(this.#e,"leases")}#l(a){return h().join(this.#f,`${a}.json`)}#m(a){return h().join(this.#g,`${a}.json`)}async #n(){await (0,f.mkdir)(this.root,{recursive:!0});let a=await (0,f.realpath)(this.root);for(let b of["attachments","drafts","uploads","leases","handoffs"])await (0,f.mkdir)(h().join(a,r,b),{recursive:!0});let b=h().join(a,r);if(await (0,f.realpath)(b)!==b)throw Error("Attachment metadata folder resolves outside the attachment root");return a}isHeld(a){return(this.#b.get(a)??0)>0||this.#c.has(a)}async #o(a){let b;try{b=await (0,f.readdir)(this.#k)}catch(a){return{complete:"ENOENT"===n(a),entries:[]}}let c=[];for(let d of b){if(!d.endsWith(a))continue;let[b="",e=""]=d.slice(0,-a.length).split("~"),g=/^\d+$/.test(e)&&Number.isSafeInteger(Number(e))&&Number(e)>0?Number(e):null;if(null!==g&&!function(a){if(a===process.pid)return!0;try{return process.kill(a,0),!0}catch(a){return"ESRCH"!==n(a)}}(g)){await (0,f.unlink)(h().join(this.#k,d)).catch(()=>{});continue}c.push({name:d,key:b})}return{complete:!0,entries:c}}async liveLeaseIds(){let{complete:a,entries:b}=await this.#o(v),c=new Set(this.#b.keys());for(let{key:a}of b)c.add(a);return{complete:a,ids:c}}async #p(a){await this.#n();let b=Date.now();for(;;){let c=a.flatMap(a=>this.#c.get(a)??[]);if(c.length>0){await Promise.all(c);continue}for(let b of a)this.#b.set(b,(this.#b.get(b)??0)+1);let d=[],g=!1,i=async()=>{if(!g){for(let a of(g=!0,d.splice(0)))await (0,f.unlink)(a).catch(()=>{});for(let b of a){let a=(this.#b.get(b)??0)-1;a>0?this.#b.set(b,a):this.#b.delete(b)}}};try{for(let b of a){let a=h().join(this.#k,`${b}~${process.pid}~${(0,e.randomBytes)(6).toString("hex")}${v}`);await (0,f.writeFile)(a,"",{flag:"wx",mode:384}),d.push(a)}let b=await this.#o(w);if(b.complete&&!b.entries.some(({key:b})=>a.includes(b)))return i}catch(a){throw await i(),a}if(await i(),Date.now()-b>this.#a)throw new y("busy","Attachment is being cleaned up by another CUELO process; try again");await A(50)}}async acquireCleanupLock(){await this.#n();let a=`cleanup~${process.pid}~${(0,e.randomBytes)(6).toString("hex")}${x}`,b=h().join(this.#k,a);await (0,f.writeFile)(b,"",{flag:"wx",mode:384});let c=async()=>{await (0,f.unlink)(b).catch(()=>{})},d=await this.#o(x).catch(()=>null);return!d?.complete||d.entries.some(b=>b.name!==a)?(await c(),null):c}async #q(a,b){let c=(this.#d.get(a)??Promise.resolve()).catch(()=>{}).then(b);this.#d.set(a,c);try{return await c}finally{this.#d.get(a)===c&&this.#d.delete(a)}}async readRecord(a){let b;try{b=await (0,f.readFile)(this.#l(a),"utf8")}catch(a){if("ENOENT"===n(a))return null;throw a}try{var c;return c=JSON.parse(b),c&&"object"==typeof c&&1===c.version&&c.id===a&&"string"==typeof c.path&&"string"==typeof c.name&&"string"==typeof c.mimeType&&"number"==typeof c.size&&Number.isSafeInteger(c.size)&&!(c.size<0)&&"string"==typeof c.createdAt&&(null===c.sessionId||"string"==typeof c.sessionId)&&(null===c.orphanSince||"string"==typeof c.orphanSince&&Number.isFinite(Date.parse(c.orphanSince)))?{version:1,id:a,path:c.path,name:c.name,size:c.size,mimeType:c.mimeType,sessionId:c.sessionId,createdAt:c.createdAt,orphanSince:c.orphanSince}:null}catch{return null}}writeRecord(a){(0,j.$)(this.#l(a.id),`${JSON.stringify(a,null,2)}
2
2
  `)}async listRecords(){let a;try{a=await (0,f.readdir)(this.#f)}catch(a){if("ENOENT"===n(a))return[];throw a}let b=[];for(let c of a){let a=c.endsWith(".json")?c.slice(0,-5):"";if(!(0,l.YC)(a))continue;let d=await this.readRecord(a).catch(()=>null);d&&b.push(d)}return b}async beginUpload(){let a=await this.#n(),b=`att_${(0,e.randomBytes)(16).toString("hex")}`,c=await this.#p([b]);return{id:b,stagingPath:h().join(a,r,"uploads",`${b}${u}`),release:c}}async discardStagedUpload(a){h().dirname(a)===h().join(await (0,f.realpath)(this.root),r,"uploads")&&await (0,f.unlink)(a).catch(a=>{if("ENOENT"!==n(a))throw a})}async commitUpload(a){let b=await this.#n(),c=(a.sessionId??"new").toLowerCase();if(!s.test(c))throw Error("Invalid attachment folder");let d=h().join(b,c);if(await (0,f.mkdir)(d,{recursive:!0}),h().relative(b,await (0,f.realpath)(d))!==c)throw Error("Attachment folder resolves outside the attachment root");let e=h().join(d,a.id);await (0,f.mkdir)(e);let g=function(a){let b=a.replace(/[<>:"|?*\u0000-\u001f]/g,"_").replace(/[. ]+$/,"");if(!b)return"attachment";let c=Array.from(b);if(c.length>150){let a=Array.from(h().extname(b)).slice(0,20).join("");b=c.slice(0,150-a.length).join("")+a}return t.test(b)?`_${b}`:b}(a.fileName),i=h().join(e,g);await (0,f.rename)(a.stagingPath,i);let j={version:1,id:a.id,path:i,name:g,size:a.size,mimeType:a.mimeType,sessionId:a.sessionId?.toLowerCase()??null,createdAt:new Date(this.now()).toISOString(),orphanSince:null};try{this.writeRecord(j)}catch(a){throw await (0,f.unlink)(i).catch(()=>{}),await (0,f.rmdir)(e).catch(()=>{}),a}return await this.#q(a.draftId,async()=>{let b=await this.#r(a.draftId);this.#s(a.draftId,[...new Set([...b,a.id])])}),j}async #r(a){let b;try{b=await (0,f.readFile)(this.#m(a),"utf8")}catch(a){if("ENOENT"===n(a))return[];throw a}let c=JSON.parse(b);if(!Array.isArray(c.attachmentIds))throw Error(`Draft record ${a} is malformed`);return c.attachmentIds.filter(l.YC)}#s(a,b){(0,j.$)(this.#m(a),`${JSON.stringify({version:1,draftId:a,attachmentIds:b,updatedAt:new Date(this.now()).toISOString()},null,2)}
3
3
  `)}async setDraftAttachments(a,b,c=[]){if(!(0,l.Ly)(a))throw Error("Invalid draft id");let d=a.toLowerCase(),e=[...new Set(b)];if(e.length>256||!e.every(l.YC))throw Error("Invalid attachment ids");let g=[...new Set(c)].filter(a=>!e.includes(a));if(g.length>256||!g.every(l.YC))throw Error("Invalid attachment ids");await this.#n();let h=await this.#p([...e,...g]);try{let a=[];for(let b of e)await this.readRecord(b)||a.push(b);if(a.length>0)throw new z(a);let b=[];for(let a of g)await this.readRecord(a)&&b.push(a);return await this.#q(d,async()=>{for(let a of b)(0,j.$)(this.#j(a),`${JSON.stringify({version:1,id:a,draftId:d,handedOffAt:new Date(this.now()).toISOString()},null,2)}
4
- `);for(let a of(e.length>0?this.#s(d,e):await (0,f.unlink)(this.#m(d)).catch(a=>{if("ENOENT"!==n(a))throw a}),e))await this.removeHandoff(a)}),e}finally{await h()}}async readDraftReferences(){let a,b=new Set;try{a=await (0,f.readdir)(this.#g)}catch(a){return{complete:"ENOENT"===n(a),ids:b}}let c=!0;for(let d of a)if(!d.startsWith(".")&&d.endsWith(".json"))try{for(let a of(await this.#r(d.slice(0,-5))))b.add(a)}catch(a){"ENOENT"!==n(a)&&(c=!1)}return{complete:c,ids:b}}async readHandoffs(){let a,b=new Set;try{a=await (0,f.readdir)(this.#i)}catch(a){return{complete:"ENOENT"===n(a),ids:b}}let c=!0;for(let d of a){if(d.startsWith("."))continue;let a=d.endsWith(".json")?d.slice(0,-5):"";if(!(0,l.YC)(a)){c=!1;continue}b.add(a);try{JSON.parse(await (0,f.readFile)(h().join(this.#i,d),"utf8")).id!==a&&(c=!1)}catch(a){"ENOENT"!==n(a)&&(c=!1)}}return{complete:c,ids:b}}async removeHandoff(a){(0,l.YC)(a)&&await (0,f.unlink)(this.#j(a)).catch(a=>{if("ENOENT"!==n(a))throw a})}async #t(a){let b;try{b=await (0,f.realpath)(this.root)}catch{return null}let c=h().relative(b,a.path).split(h().sep);if(3!==c.length||!s.test(c[0])||c[1]!==a.id||c[2]!==a.name||"."===c[2]||".."===c[2]||h().join(b,...c)!==a.path)return null;let d=h().join(b,c[0],c[1]);try{if(await (0,f.realpath)(d)!==d)return null}catch{return null}try{return(await (0,f.lstat)(a.path)).isFile()?{idDirectory:d,fileMissing:!1}:null}catch(a){return"ENOENT"===n(a)?{idDirectory:d,fileMissing:!0}:null}}async withManagedAttachment(a,b){if(!(0,l.YC)(a))throw new y("invalid_id","Invalid attachment id");let c=await this.#p([a]);try{let c=await this.readRecord(a),d=c?await this.#t(c):null;if(!c||!d||d.fileMissing)throw new y("not_found","Attachment not found");return await b({id:a,path:c.path,size:c.size,mimeType:c.mimeType})}finally{await c()}}async deleteOrphan(a,b){let c;if(this.isHeld(a))return!1;this.#c.set(a,new Promise(a=>{c=a}));let d=null;try{await this.#n();let c=h().join(this.#k,`${a}~${process.pid}~${(0,e.randomBytes)(6).toString("hex")}${w}`);await (0,f.writeFile)(c,"",{flag:"wx",mode:384}),d=c;let g=await this.liveLeaseIds();if(!g.complete||g.ids.has(a))return!1;let i=await this.readHandoffs();if(!i.complete||i.ids.has(a))return!1;let j=await this.readRecord(a);if(!j?.orphanSince||this.now()-Date.parse(j.orphanSince)<b)return!1;let k=await this.readDraftReferences();if(!k.complete||k.ids.has(a))return!1;let l=await this.#t(j);if(!l)return!1;return l.fileMissing||await (0,f.unlink)(j.path),await (0,f.rmdir)(l.idDirectory).catch(()=>{}),await (0,f.unlink)(this.#l(a)).catch(a=>{if("ENOENT"!==n(a))throw a}),!0}finally{d&&await (0,f.unlink)(d).catch(()=>{}),this.#c.delete(a),c()}}async removeStaleUploads(a){let b;try{b=await (0,f.readdir)(this.#h)}catch(a){if("ENOENT"===n(a))return 0;throw a}let c=await this.liveLeaseIds();if(!c.complete)return 0;let d=0;for(let e of b){let b=e.endsWith(u)?e.slice(0,-u.length):"";if(!(0,l.YC)(b)||c.ids.has(b))continue;let g=h().join(this.#h,e);try{let b=await (0,f.stat)(g);if(!b.isFile()||this.now()-b.mtimeMs<a)continue;await (0,f.unlink)(g),d+=1}catch{}}return d}}function p(){let a=(0,i.getAgentDir)(),b=h().join(a,"cuelo-attachments");if(q?.root===b)return q;let c=globalThis.__cueloAttachmentStoreStates??=new Map,d=c.get(b);return d||(d={holds:new Map,deleting:new Map,draftQueues:new Map},c.set(b,d)),q=new B({root:b,sessionsDir:(0,i.getSessionsDir)(a),customSessionFilesDir:(0,i.getCustomSessionFilesDir)(a),state:d})}d()}catch(a){d(a)}})},12969:(a,b,c)=>{c.d(b,{$:()=>g});var d=c(55511),e=c(29021),f=c(33873);function g(a,b){let c=(0,f.dirname)(a),g=(0,f.join)(c,`.${(0,f.basename)(a)}-${(0,d.randomUUID)()}.tmp`),h=!1;try{(0,e.writeFileSync)(g,b,{encoding:"utf8",flag:"wx",mode:384,flush:!0}),(0,e.renameSync)(g,a)}catch(a){throw h=!0,a}finally{try{(0,e.unlinkSync)(g)}catch(a){if("ENOENT"!==a.code&&!h)throw a}}}},15395:(a,b,c)=>{c.d(b,{Ly:()=>g,YC:()=>f});let d=/^att_[0-9a-f]{32}$/,e=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function f(a){return"string"==typeof a&&d.test(a)}function g(a){return"string"==typeof a&&e.test(a)}},50820:(a,b,c)=>{c.d(b,{Wl:()=>d,gP:()=>g});let d=7,e=Math.floor(Number.MAX_SAFE_INTEGER/1048576),f=Object.freeze({uploadLimitMb:100,autoCleanupEnabled:!0,orphanGraceDays:7});function g(a){var b;let c=a&&"object"==typeof a?a:{};return{uploadLimitMb:"number"==typeof(b=c.uploadLimitMb)&&Number.isSafeInteger(b)&&b>=1&&b<=e?c.uploadLimitMb:f.uploadLimitMb,autoCleanupEnabled:"boolean"==typeof c.autoCleanupEnabled?c.autoCleanupEnabled:f.autoCleanupEnabled,orphanGraceDays:d}}},67121:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{ensureAttachmentCleanupScheduler:()=>p});var e=c(73024),f=c(51455),g=c(76760),h=c.n(g),i=c(34069),j=c(50820),k=c(3582),l=a([i,k]);[i,k]=l.then?(await l)():l;let q=864e5*j.Wl,r=/att_[0-9a-f]{32}/gi,s=/a\0t\0t\0_\0(?:[0-9a-f]\0){32}/gi,t=/\.jsonl\.(?:gz|zst|br|xz|bz2)$/i;async function m(a){let b=new Set,c="";for await(let d of(0,e.createReadStream)(a,{highWaterMark:1048576})){let a=c+d.toString("latin1");for(let c of a.matchAll(r))b.add(c[0].toLowerCase());for(let c of a.matchAll(s))b.add(c[0].replace(/\0/g,"").toLowerCase());c=a.slice(-72)}return[...b]}class u{#u;async scan({sessionsDir:a,customSessionFilesDir:b},{fresh:c=!1}={}){let d=new Set,e=[],g=new Set,i=new Set,j=async(a,b)=>{if(g.has(a))return;if(g.add(a),t.test(a))return void e.push(`compressed transcript ${a}`);let h=!1;try{let b=await (0,f.stat)(a);if(h=!0,!b.isFile())return;let g=c?void 0:this.#u.get(a);if(g&&g.size===b.size&&g.mtimeMs===b.mtimeMs){for(let a of g.ids)d.add(a);return}for(let c=0;;c+=1){let g=await m(a),h=await (0,f.stat)(a);if(h.size===b.size&&h.mtimeMs===b.mtimeMs){for(let c of(this.#u.set(a,{size:b.size,mtimeMs:b.mtimeMs,ids:g}),g))d.add(c);return}for(let a of g)d.add(a);if(this.#u.delete(a),1===c)return void e.push(`changed while reading ${a}`);b=h}}catch(c){this.#u.delete(a),(b||h||"ENOENT"!==c.code)&&e.push(`read ${a}: ${c.message}`)}},k=async a=>{let b,c;try{if(b=await (0,f.realpath)(a),i.has(b))return;i.add(b),c=await (0,f.readdir)(a,{withFileTypes:!0})}catch(b){e.push(`list ${a}: ${b.message}`);return}for(let b of c){let c=h().join(a,b.name);if(b.isDirectory())await k(c);else if(b.isFile())await j(c,!0);else if(b.isSymbolicLink())try{let a=await (0,f.stat)(c);a.isDirectory()?await k(c):a.isFile()&&await j(c,!0)}catch(a){"ENOENT"!==a.code&&e.push(`follow ${c}: ${a.message}`)}}};await k(a);let l=[];try{l=await (0,f.readdir)(b)}catch(a){"ENOENT"!==a.code&&e.push(`list ${b}: ${a.message}`)}for(let a of l){let c=h().join(b,a);try{let a=(await (0,f.readFile)(c,"utf8")).trim();if(!h().isAbsolute(a)){e.push(`unreadable session marker ${c}`);continue}await j(a,!1)}catch(a){e.push(`read ${c}: ${a.message}`)}}for(let a of this.#u.keys())g.has(a)||this.#u.delete(a);return{complete:0===e.length,ids:d,files:g.size,failures:e}}constructor(){this.#u=new Map}}async function n(a,{settings:b,scanner:c}){let d={skipped:null,complete:!1,records:0,marked:[],reset:[],deleted:[],handedOver:[],staleUploadsRemoved:0,failures:[]};if(!b.autoCleanupEnabled)return d.skipped="disabled",d;let e=await a.acquireCleanupLock();if(!e)return d.skipped="locked",d;try{await o(a,c,d),d.staleUploadsRemoved=await a.removeStaleUploads(864e5).catch(a=>(d.failures.push(`stale uploads: ${a.message}`),0))}finally{await e()}return d}async function o(a,b,c){let d={sessionsDir:a.sessionsDir,customSessionFilesDir:a.customSessionFilesDir},e=await a.listRecords();if(c.records=e.length,0===e.length){c.complete=!0;return}let f=await a.readHandoffs(),g=await b.scan(d,{fresh:f.ids.size>0}),h=await a.readDraftReferences(),i=await a.liveLeaseIds();if(c.complete=g.complete&&h.complete&&i.complete&&f.complete,c.failures.push(...g.failures),h.complete||c.failures.push("a draft record could not be read"),i.complete||c.failures.push("the lease folder could not be listed"),f.complete||c.failures.push("a sent-attachment handoff could not be read"),g.complete){for(let b of f.ids)if(g.ids.has(b))try{await a.removeHandoff(b),c.handedOver.push(b)}catch(a){c.failures.push(`handoff ${b}: ${a.message}`)}}let j=a.now(),k=[];for(let b of e){if(g.ids.has(b.id)||h.ids.has(b.id)||i.ids.has(b.id)||f.ids.has(b.id)){null!==b.orphanSince&&(a.writeRecord({...b,orphanSince:null}),c.reset.push(b.id));continue}c.complete&&(null===b.orphanSince?(a.writeRecord({...b,orphanSince:new Date(j).toISOString()}),c.marked.push(b.id)):j-Date.parse(b.orphanSince)>=q&&k.push(b.id))}if(k.length>0){let e=await b.scan(d,{fresh:!0});if(e.complete)for(let b of k){if(e.ids.has(b)){let d=await a.readRecord(b);d?.orphanSince&&(a.writeRecord({...d,orphanSince:null}),c.reset.push(b));continue}try{await a.deleteOrphan(b,q)&&c.deleted.push(b)}catch(a){c.failures.push(`delete ${b}: ${a.message}`)}}else c.failures.push(...e.failures)}}function p(){if(globalThis.__cueloAttachmentCleanupScheduler)return;let a={running:!1,scanner:new u};globalThis.__cueloAttachmentCleanupScheduler=a;let b=async()=>{if(!a.running){a.running=!0;try{let b=await (0,k.dk)((0,i.getAgentDir)()),c=await n((0,k.RT)(),{settings:b,scanner:a.scanner});(c.marked.length||c.reset.length||c.deleted.length||c.staleUploadsRemoved||c.failures.length)&&console.info(`[attachments] cleanup: ${c.records} managed, ${c.marked.length} newly unreferenced, ${c.reset.length} referenced again, ${c.deleted.length} deleted, ${c.staleUploadsRemoved} stale uploads removed`+(c.failures.length?`; nothing was deleted on an incomplete view: ${c.failures.slice(0,3).join("; ")}`:""))}catch(a){console.error("[attachments] cleanup failed:",a)}finally{a.running=!1}}};setTimeout(()=>void b(),6e4).unref?.(),setInterval(()=>void b(),864e5).unref?.(),console.info("[attachments] cleanup scheduled: first pass in 60s, then every 24h")}d()}catch(a){d(a)}})}};
4
+ `);for(let a of(e.length>0?this.#s(d,e):await (0,f.unlink)(this.#m(d)).catch(a=>{if("ENOENT"!==n(a))throw a}),e))await this.removeHandoff(a)}),e}finally{await h()}}async readDraftReferences(){let a,b=new Set;try{a=await (0,f.readdir)(this.#g)}catch(a){return{complete:"ENOENT"===n(a),ids:b}}let c=!0;for(let d of a)if(!d.startsWith(".")&&d.endsWith(".json"))try{for(let a of(await this.#r(d.slice(0,-5))))b.add(a)}catch(a){"ENOENT"!==n(a)&&(c=!1)}return{complete:c,ids:b}}async readHandoffs(){let a,b=new Set;try{a=await (0,f.readdir)(this.#i)}catch(a){return{complete:"ENOENT"===n(a),ids:b}}let c=!0;for(let d of a){if(d.startsWith("."))continue;let a=d.endsWith(".json")?d.slice(0,-5):"";if(!(0,l.YC)(a)){c=!1;continue}b.add(a);try{JSON.parse(await (0,f.readFile)(h().join(this.#i,d),"utf8")).id!==a&&(c=!1)}catch(a){"ENOENT"!==n(a)&&(c=!1)}}return{complete:c,ids:b}}async removeHandoff(a){(0,l.YC)(a)&&await (0,f.unlink)(this.#j(a)).catch(a=>{if("ENOENT"!==n(a))throw a})}async #t(a){let b;try{b=await (0,f.realpath)(this.root)}catch{return null}let c=h().relative(b,a.path).split(h().sep);if(3!==c.length||!s.test(c[0])||c[1]!==a.id||c[2]!==a.name||"."===c[2]||".."===c[2]||h().join(b,...c)!==a.path)return null;let d=h().join(b,c[0],c[1]);try{if(await (0,f.realpath)(d)!==d)return null}catch{return null}try{return(await (0,f.lstat)(a.path)).isFile()?{idDirectory:d,fileMissing:!1}:null}catch(a){return"ENOENT"===n(a)?{idDirectory:d,fileMissing:!0}:null}}async withManagedAttachment(a,b){if(!(0,l.YC)(a))throw new y("invalid_id","Invalid attachment id");let c=await this.#p([a]);try{let c=await this.readRecord(a),d=c?await this.#t(c):null;if(!c||!d||d.fileMissing)throw new y("not_found","Attachment not found");return await b({id:a,path:c.path,size:c.size,mimeType:c.mimeType})}finally{await c()}}async deleteOrphan(a,b){let c;if(this.isHeld(a))return!1;this.#c.set(a,new Promise(a=>{c=a}));let d=null;try{await this.#n();let c=h().join(this.#k,`${a}~${process.pid}~${(0,e.randomBytes)(6).toString("hex")}${w}`);await (0,f.writeFile)(c,"",{flag:"wx",mode:384}),d=c;let g=await this.liveLeaseIds();if(!g.complete||g.ids.has(a))return!1;let i=await this.readHandoffs();if(!i.complete||i.ids.has(a))return!1;let j=await this.readRecord(a);if(!j?.orphanSince||this.now()-Date.parse(j.orphanSince)<b)return!1;let k=await this.readDraftReferences();if(!k.complete||k.ids.has(a))return!1;let l=await this.#t(j);if(!l)return!1;return l.fileMissing||await (0,f.unlink)(j.path),await (0,f.rmdir)(l.idDirectory).catch(()=>{}),await (0,f.unlink)(this.#l(a)).catch(a=>{if("ENOENT"!==n(a))throw a}),!0}finally{d&&await (0,f.unlink)(d).catch(()=>{}),this.#c.delete(a),c()}}async removeStaleUploads(a){let b;try{b=await (0,f.readdir)(this.#h)}catch(a){if("ENOENT"===n(a))return 0;throw a}let c=await this.liveLeaseIds();if(!c.complete)return 0;let d=0;for(let e of b){let b=e.endsWith(u)?e.slice(0,-u.length):"";if(!(0,l.YC)(b)||c.ids.has(b))continue;let g=h().join(this.#h,e);try{let b=await (0,f.stat)(g);if(!b.isFile()||this.now()-b.mtimeMs<a)continue;await (0,f.unlink)(g),d+=1}catch{}}return d}}function p(){let a=(0,i.getAgentDir)(),b=h().join(a,"cuelo-attachments");if(q?.root===b)return q;let c=globalThis.__cueloAttachmentStoreStates??=new Map,d=c.get(b);return d||(d={holds:new Map,deleting:new Map,draftQueues:new Map},c.set(b,d)),q=new B({root:b,sessionsDir:(0,i.getSessionsDir)(a),customSessionFilesDir:(0,i.getCustomSessionFilesDir)(a),state:d})}d()}catch(a){d(a)}})},12969:(a,b,c)=>{c.d(b,{$:()=>g});var d=c(55511),e=c(29021),f=c(33873);function g(a,b){let c=(0,f.dirname)(a),g=(0,f.join)(c,`.${(0,f.basename)(a)}-${(0,d.randomUUID)()}.tmp`),h=!1;try{(0,e.writeFileSync)(g,b,{encoding:"utf8",flag:"wx",mode:384,flush:!0}),(0,e.renameSync)(g,a)}catch(a){throw h=!0,a}finally{try{(0,e.unlinkSync)(g)}catch(a){if("ENOENT"!==a.code&&!h)throw a}}}},15395:(a,b,c)=>{c.d(b,{Ly:()=>g,YC:()=>f,we:()=>h});let d=/^att_[0-9a-f]{32}$/,e=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function f(a){return"string"==typeof a&&d.test(a)}function g(a){return"string"==typeof a&&e.test(a)}function h(a){return function(a){let b;if(!a.startsWith(i))return null;let c=a.indexOf("\n");if(c<0)return null;let d=a.slice(0,c);if(!d.endsWith(j))return null;try{b=JSON.parse(d.slice(i.length,-j.length))}catch{return null}if(!function(a){if(!a||"object"!=typeof a||!Number.isSafeInteger(a.userMessageLength)||(a.userMessageLength??-1)<0||!Array.isArray(a.documents)||0===a.documents.length||a.documents.length>3)return!1;let b=0,c=0;for(let d of a.documents){if(!d||"object"!=typeof d||"string"!=typeof d.name||0===d.name.length||"text/markdown"!==d.mimeType&&"text/plain"!==d.mimeType&&"application/pdf"!==d.mimeType||!Number.isSafeInteger(d.size)||(d.size??-1)<0||(d.size??0)>8388608||!Number.isSafeInteger(d.textLength)||(d.textLength??-1)<0||(d.textLength??0)>12e4)return!1;b+=d.size??0,c+=d.textLength??0}return b<=0x1000000&&c<=24e4}(b))return null;let e=c+1;if(!a.startsWith(k,e))return null;let f=(e+=k.length)+b.userMessageLength;if(f>a.length)return null;let g=a.slice(e,f);if(e=f,!a.startsWith(l,e))return null;e+=l.length;let h=[];for(let c=0;c<b.documents.length;c+=1){var m,n,o;let d=b.documents[c],f=(m=c,n=d,`
5
+ --- Begin attached document ${m+1}: ${JSON.stringify(n.name)} (${n.mimeType}, ${n.size} bytes) ---
6
+ `);if(!a.startsWith(f,e))return null;let g=(e+=f.length)+d.textLength;if(g>a.length)return null;let i=a.slice(e,g);e=g;let j=(o=c,`
7
+ --- End attached document ${o+1} ---`);if(!a.startsWith(j,e))return null;e+=j.length,h.push({name:d.name,mimeType:d.mimeType,size:d.size,text:i})}return e===a.length?{message:g,documents:h}:null}(a)?.message??a}let i="\x3c!-- omp-web-document-context-v1:",j=" --\x3e",k="User message:\n",l="\n\nAttached documents (locally extracted text supplied by the user):\n"},50820:(a,b,c)=>{c.d(b,{Wl:()=>d,gP:()=>g});let d=7,e=Math.floor(Number.MAX_SAFE_INTEGER/1048576),f=Object.freeze({uploadLimitMb:100,autoCleanupEnabled:!0,orphanGraceDays:7});function g(a){var b;let c=a&&"object"==typeof a?a:{};return{uploadLimitMb:"number"==typeof(b=c.uploadLimitMb)&&Number.isSafeInteger(b)&&b>=1&&b<=e?c.uploadLimitMb:f.uploadLimitMb,autoCleanupEnabled:"boolean"==typeof c.autoCleanupEnabled?c.autoCleanupEnabled:f.autoCleanupEnabled,orphanGraceDays:d}}},67121:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{ensureAttachmentCleanupScheduler:()=>p});var e=c(73024),f=c(51455),g=c(76760),h=c.n(g),i=c(34069),j=c(50820),k=c(3582),l=a([i,k]);[i,k]=l.then?(await l)():l;let q=864e5*j.Wl,r=/att_[0-9a-f]{32}/gi,s=/a\0t\0t\0_\0(?:[0-9a-f]\0){32}/gi,t=/\.jsonl\.(?:gz|zst|br|xz|bz2)$/i;async function m(a){let b=new Set,c="";for await(let d of(0,e.createReadStream)(a,{highWaterMark:1048576})){let a=c+d.toString("latin1");for(let c of a.matchAll(r))b.add(c[0].toLowerCase());for(let c of a.matchAll(s))b.add(c[0].replace(/\0/g,"").toLowerCase());c=a.slice(-72)}return[...b]}class u{#u;async scan({sessionsDir:a,customSessionFilesDir:b},{fresh:c=!1}={}){let d=new Set,e=[],g=new Set,i=new Set,j=async(a,b)=>{if(g.has(a))return;if(g.add(a),t.test(a))return void e.push(`compressed transcript ${a}`);let h=!1;try{let b=await (0,f.stat)(a);if(h=!0,!b.isFile())return;let g=c?void 0:this.#u.get(a);if(g&&g.size===b.size&&g.mtimeMs===b.mtimeMs){for(let a of g.ids)d.add(a);return}for(let c=0;;c+=1){let g=await m(a),h=await (0,f.stat)(a);if(h.size===b.size&&h.mtimeMs===b.mtimeMs){for(let c of(this.#u.set(a,{size:b.size,mtimeMs:b.mtimeMs,ids:g}),g))d.add(c);return}for(let a of g)d.add(a);if(this.#u.delete(a),1===c)return void e.push(`changed while reading ${a}`);b=h}}catch(c){this.#u.delete(a),(b||h||"ENOENT"!==c.code)&&e.push(`read ${a}: ${c.message}`)}},k=async a=>{let b,c;try{if(b=await (0,f.realpath)(a),i.has(b))return;i.add(b),c=await (0,f.readdir)(a,{withFileTypes:!0})}catch(b){e.push(`list ${a}: ${b.message}`);return}for(let b of c){let c=h().join(a,b.name);if(b.isDirectory())await k(c);else if(b.isFile())await j(c,!0);else if(b.isSymbolicLink())try{let a=await (0,f.stat)(c);a.isDirectory()?await k(c):a.isFile()&&await j(c,!0)}catch(a){"ENOENT"!==a.code&&e.push(`follow ${c}: ${a.message}`)}}};await k(a);let l=[];try{l=await (0,f.readdir)(b)}catch(a){"ENOENT"!==a.code&&e.push(`list ${b}: ${a.message}`)}for(let a of l){let c=h().join(b,a);try{let a=(await (0,f.readFile)(c,"utf8")).trim();if(!h().isAbsolute(a)){e.push(`unreadable session marker ${c}`);continue}await j(a,!1)}catch(a){e.push(`read ${c}: ${a.message}`)}}for(let a of this.#u.keys())g.has(a)||this.#u.delete(a);return{complete:0===e.length,ids:d,files:g.size,failures:e}}constructor(){this.#u=new Map}}async function n(a,{settings:b,scanner:c}){let d={skipped:null,complete:!1,records:0,marked:[],reset:[],deleted:[],handedOver:[],staleUploadsRemoved:0,failures:[]};if(!b.autoCleanupEnabled)return d.skipped="disabled",d;let e=await a.acquireCleanupLock();if(!e)return d.skipped="locked",d;try{await o(a,c,d),d.staleUploadsRemoved=await a.removeStaleUploads(864e5).catch(a=>(d.failures.push(`stale uploads: ${a.message}`),0))}finally{await e()}return d}async function o(a,b,c){let d={sessionsDir:a.sessionsDir,customSessionFilesDir:a.customSessionFilesDir},e=await a.listRecords();if(c.records=e.length,0===e.length){c.complete=!0;return}let f=await a.readHandoffs(),g=await b.scan(d,{fresh:f.ids.size>0}),h=await a.readDraftReferences(),i=await a.liveLeaseIds();if(c.complete=g.complete&&h.complete&&i.complete&&f.complete,c.failures.push(...g.failures),h.complete||c.failures.push("a draft record could not be read"),i.complete||c.failures.push("the lease folder could not be listed"),f.complete||c.failures.push("a sent-attachment handoff could not be read"),g.complete){for(let b of f.ids)if(g.ids.has(b))try{await a.removeHandoff(b),c.handedOver.push(b)}catch(a){c.failures.push(`handoff ${b}: ${a.message}`)}}let j=a.now(),k=[];for(let b of e){if(g.ids.has(b.id)||h.ids.has(b.id)||i.ids.has(b.id)||f.ids.has(b.id)){null!==b.orphanSince&&(a.writeRecord({...b,orphanSince:null}),c.reset.push(b.id));continue}c.complete&&(null===b.orphanSince?(a.writeRecord({...b,orphanSince:new Date(j).toISOString()}),c.marked.push(b.id)):j-Date.parse(b.orphanSince)>=q&&k.push(b.id))}if(k.length>0){let e=await b.scan(d,{fresh:!0});if(e.complete)for(let b of k){if(e.ids.has(b)){let d=await a.readRecord(b);d?.orphanSince&&(a.writeRecord({...d,orphanSince:null}),c.reset.push(b));continue}try{await a.deleteOrphan(b,q)&&c.deleted.push(b)}catch(a){c.failures.push(`delete ${b}: ${a.message}`)}}else c.failures.push(...e.failures)}}function p(){if(globalThis.__cueloAttachmentCleanupScheduler)return;let a={running:!1,scanner:new u};globalThis.__cueloAttachmentCleanupScheduler=a;let b=async()=>{if(!a.running){a.running=!0;try{let b=await (0,k.dk)((0,i.getAgentDir)()),c=await n((0,k.RT)(),{settings:b,scanner:a.scanner});(c.marked.length||c.reset.length||c.deleted.length||c.staleUploadsRemoved||c.failures.length)&&console.info(`[attachments] cleanup: ${c.records} managed, ${c.marked.length} newly unreferenced, ${c.reset.length} referenced again, ${c.deleted.length} deleted, ${c.staleUploadsRemoved} stale uploads removed`+(c.failures.length?`; nothing was deleted on an incomplete view: ${c.failures.slice(0,3).join("; ")}`:""))}catch(a){console.error("[attachments] cleanup failed:",a)}finally{a.running=!1}}};setTimeout(()=>void b(),6e4).unref?.(),setInterval(()=>void b(),864e5).unref?.(),console.info("[attachments] cleanup scheduled: first pass in 60s, then every 24h")}d()}catch(a){d(a)}})}};