cuelo 0.9.4 → 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.
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +7 -7
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.js +1 -1
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/api/agent/[id]/account/route.js +1 -1
- package/.next/server/app/api/agent/[id]/events/route.js +1 -1
- package/.next/server/app/api/agent/[id]/route.js +1 -1
- package/.next/server/app/api/agent/new/route.js +1 -1
- package/.next/server/app/api/agent/running/route.js +1 -1
- package/.next/server/app/api/attachments/[id]/transcription/route.js +1 -1
- package/.next/server/app/api/gpt6/handles/route.js +1 -1
- package/.next/server/app/api/gpt6/reply/route.js +1 -1
- package/.next/server/app/api/gpt6/token/route.js +1 -1
- package/.next/server/app/api/gpt6/web6-session/route.js +1 -1
- package/.next/server/app/api/live/call/[callId]/route.js +1 -1
- package/.next/server/app/api/live/events/route.js +1 -1
- package/.next/server/app/api/live/offer/route.js +1 -1
- package/.next/server/app/api/live/voices/route.js +1 -1
- package/.next/server/app/api/lounge/events/route.js +1 -1
- package/.next/server/app/api/lounge/route.js +1 -1
- package/.next/server/app/api/project-trust/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
- package/.next/server/app/api/sessions/route.js +1 -1
- package/.next/server/app/api/tool-image/route.js +1 -1
- package/.next/server/app/api/update-maintenance/route.js +59 -21
- package/.next/server/app/api/updates/route.js +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +4 -4
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/office/page_client-reference-manifest.js +1 -1
- package/.next/server/app/office-preview/page_client-reference-manifest.js +1 -1
- package/.next/server/app/office-preview.html +1 -1
- package/.next/server/app/office-preview.rsc +2 -2
- package/.next/server/app/office-preview.segments/_full.segment.rsc +2 -2
- package/.next/server/app/office-preview.segments/_head.segment.rsc +1 -1
- package/.next/server/app/office-preview.segments/_index.segment.rsc +2 -2
- package/.next/server/app/office-preview.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/office-preview.segments/office-preview/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/office-preview.segments/office-preview.segment.rsc +1 -1
- package/.next/server/app/office.html +1 -1
- package/.next/server/app/office.rsc +4 -4
- package/.next/server/app/office.segments/_full.segment.rsc +4 -4
- package/.next/server/app/office.segments/_head.segment.rsc +1 -1
- package/.next/server/app/office.segments/_index.segment.rsc +2 -2
- package/.next/server/app/office.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/office.segments/office/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/office.segments/office.segment.rsc +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/recover/page_client-reference-manifest.js +1 -1
- package/.next/server/app/recover.html +1 -1
- package/.next/server/app/recover.rsc +2 -2
- package/.next/server/app/recover.segments/_full.segment.rsc +2 -2
- package/.next/server/app/recover.segments/_head.segment.rsc +1 -1
- package/.next/server/app/recover.segments/_index.segment.rsc +2 -2
- package/.next/server/app/recover.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/recover.segments/recover/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/recover.segments/recover.segment.rsc +1 -1
- package/.next/server/app-paths-manifest.json +7 -7
- package/.next/server/chunks/1008.js +15 -0
- package/.next/server/chunks/5489.js +4 -4
- package/.next/server/chunks/5582.js +1 -1
- package/.next/server/chunks/6429.js +6 -6
- package/.next/server/chunks/7121.js +4 -1
- package/.next/server/chunks/7362.js +1 -1
- package/.next/server/instrumentation.js +1 -1
- package/.next/server/instrumentation.js.nft.json +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/6110-004be57c825af4d9.js +1 -0
- package/.next/static/chunks/{9575-08609cfc6c1cf3e1.js → 9575-9eb94dc1e8bcd130.js} +4 -4
- package/.next/static/chunks/app/{layout-76b01721b96d2c1a.js → layout-890e772919e033dc.js} +1 -1
- package/.next/trace +108 -108
- package/.next/trace-build +1 -1
- package/README.md +7 -3
- package/Tools/CUELO_Setup/files/native-runtime-patch.js +1 -1
- package/Tools/OMP_Global_Config/agent/extensions/command-guard/task-guard.ts +35 -14
- package/Tools/OMP_Global_Config/agent/extensions/lib/maker-routing.ts +31 -14
- package/Tools/OMP_Global_Config/agent/extensions/lib/prepared-task.ts +4 -3
- package/Tools/OMP_Global_Config/agent/rules/harness-policy.json +1 -1
- package/Tools/OMP_Global_Config/agent/rules/subagent.md +7 -2
- package/Tools/OMP_Global_Config/agent/rules/task-guard.md +1 -0
- package/Tools/OMP_Global_Config/patches/apply-core-patch.mjs +145 -159
- package/package.json +1 -1
- package/.next/static/chunks/6110-691c0f77641fc07e.js +0 -1
- /package/.next/static/{6tGLEaiCe3Wa8PkWKUhB4 → b4yL-hhdDIhd8tZ_DFHIS}/_buildManifest.js +0 -0
- /package/.next/static/{6tGLEaiCe3Wa8PkWKUhB4 → 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("^(
|
|
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:()=>
|
|
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=
|
|
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)}
|
|
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)}})}};
|