@plusonelabs/cue 0.0.24 → 0.0.25
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/cue-v0.0.25.tar.gz +0 -0
- package/dist/cli.mjs +2 -2
- package/package.json +1 -1
- package/cue-v0.0.24.tar.gz +0 -0
|
Binary file
|
package/dist/cli.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url); global.__CUE_VERSION__ = '0.0.
|
|
2
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url); global.__CUE_VERSION__ = '0.0.25';
|
|
3
3
|
var Ffe=Object.create;var _D=Object.defineProperty;var Rfe=Object.getOwnPropertyDescriptor;var Nfe=Object.getOwnPropertyNames;var Ofe=Object.getPrototypeOf,kfe=Object.prototype.hasOwnProperty;var at=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var _=(t,e)=>()=>(t&&(e=t(t=0)),e);var oe=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Oa=(t,e)=>{for(var n in e)_D(t,n,{get:e[n],enumerable:!0})},U$=(t,e,n,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Nfe(e))!kfe.call(t,i)&&i!==n&&_D(t,i,{get:()=>e[i],enumerable:!(a=Rfe(e,i))||a.enumerable});return t};var be=(t,e,n)=>(n=t!=null?Ffe(Ofe(t)):{},U$(e||!t||!t.__esModule?_D(n,"default",{value:t,enumerable:!0}):n,t)),M$=t=>U$(_D({},"__esModule",{value:!0}),t);import QD from"fs";import hw from"path";function hc(){if(typeof global.__CUE_VERSION__<"u")return global.__CUE_VERSION__;try{let t=process.argv[1],e=hw.join(hw.dirname(t),"..","package.json");if(QD.existsSync(e)){let n=QD.readFileSync(e,"utf-8");return JSON.parse(n).version}}catch{}if(process.argv[1].includes("src/cli.tsx"))try{let t=hw.join(process.cwd(),"package.json");if(QD.existsSync(t)){let e=QD.readFileSync(t,"utf-8");return JSON.parse(e).version}}catch{}return"unknown"}var Pg=_(()=>{"use strict"});function gt(t,e,n,a,i){if(a==="m")throw new TypeError("Private method is not writable");if(a==="a"&&!i)throw new TypeError("Private accessor was defined without a setter");if(typeof e=="function"?t!==e||!i:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return a==="a"?i.call(t,n):i?i.value=n:e.set(t,n),n}function Ie(t,e,n,a){if(n==="a"&&!a)throw new TypeError("Private accessor was defined without a getter");if(typeof e=="function"?t!==e||!a:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return n==="m"?a:n==="a"?a.call(t):a?a.value:e.get(t)}var Xm=_(()=>{});var gw,z$=_(()=>{gw=function(){let{crypto:t}=globalThis;if(t?.randomUUID)return gw=t.randomUUID.bind(t),t.randomUUID();let e=new Uint8Array(1),n=t?()=>t.getRandomValues(e)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,a=>(+a^n()&15>>+a/4).toString(16))}});function Zp(t){return typeof t=="object"&&t!==null&&("name"in t&&t.name==="AbortError"||"message"in t&&String(t.message).includes("FetchRequestCanceledException"))}var Z3,zg=_(()=>{Z3=t=>{if(t instanceof Error)return t;if(typeof t=="object"&&t!==null){try{if(Object.prototype.toString.call(t)==="[object Error]"){let e=new Error(t.message,t.cause?{cause:t.cause}:{});return t.stack&&(e.stack=t.stack),t.cause&&!e.cause&&(e.cause=t.cause),t.name&&(e.name=t.name),e}}catch{}try{return new Error(JSON.stringify(t))}catch{}}return new Error(t)}});var At,Xi,wr,ef,jg,$g,Hg,Gg,qg,Kg,Vg,Jg,Yg,gc=_(()=>{zg();At=class extends Error{},Xi=class t extends At{constructor(e,n,a,i){super(`${t.makeMessage(e,n,a)}`),this.status=e,this.headers=i,this.requestID=i?.get("request-id"),this.error=n}static makeMessage(e,n,a){let i=n?.message?typeof n.message=="string"?n.message:JSON.stringify(n.message):n?JSON.stringify(n):a;return e&&i?`${e} ${i}`:e?`${e} status code (no body)`:i||"(no status code or body)"}static generate(e,n,a,i){if(!e||!i)return new ef({message:a,cause:Z3(n)});let r=n;return e===400?new $g(e,r,a,i):e===401?new Hg(e,r,a,i):e===403?new Gg(e,r,a,i):e===404?new qg(e,r,a,i):e===409?new Kg(e,r,a,i):e===422?new Vg(e,r,a,i):e===429?new Jg(e,r,a,i):e>=500?new Yg(e,r,a,i):new t(e,r,a,i)}},wr=class extends Xi{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}},ef=class extends Xi{constructor({message:e,cause:n}){super(void 0,void 0,e||"Connection error.",void 0),n&&(this.cause=n)}},jg=class extends ef{constructor({message:e}={}){super({message:e??"Request timed out."})}},$g=class extends Xi{},Hg=class extends Xi{},Gg=class extends Xi{},qg=class extends Xi{},Kg=class extends Xi{},Vg=class extends Xi{},Jg=class extends Xi{},Yg=class extends Xi{}});function Ew(t){return typeof t!="object"?{}:t??{}}function $$(t){if(!t)return!0;for(let e in t)return!1;return!0}function H$(t,e){return Object.prototype.hasOwnProperty.call(t,e)}var Mfe,j$,vw,yw,G$,TD,bA=_(()=>{gc();Mfe=/^[a-z][a-z0-9+.-]*:/i,j$=t=>Mfe.test(t),vw=t=>(vw=Array.isArray,vw(t)),yw=vw;G$=(t,e)=>{if(typeof e!="number"||!Number.isInteger(e))throw new At(`${t} must be an integer`);if(e<0)throw new At(`${t} must be a positive integer`);return e},TD=t=>{try{return JSON.parse(t)}catch{return}}});var q$,K$=_(()=>{q$=t=>new Promise(e=>setTimeout(e,t))});var tf,Dw=_(()=>{tf="0.57.0"});function Lfe(){return typeof Deno<"u"&&Deno.build!=null?"deno":typeof EdgeRuntime<"u"?"edge":Object.prototype.toString.call(typeof globalThis.process<"u"?globalThis.process:0)==="[object process]"?"node":"unknown"}function zfe(){if(typeof navigator>"u"||!navigator)return null;let t=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(let{key:e,pattern:n}of t){let a=n.exec(navigator.userAgent);if(a){let i=a[1]||0,r=a[2]||0,l=a[3]||0;return{browser:e,version:`${i}.${r}.${l}`}}}return null}var Z$,Pfe,V$,J$,Y$,W$,Cw=_(()=>{Dw();Z$=()=>typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u";Pfe=()=>{let t=Lfe();if(t==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":tf,"X-Stainless-OS":J$(Deno.build.os),"X-Stainless-Arch":V$(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":typeof Deno.version=="string"?Deno.version:Deno.version?.deno??"unknown"};if(typeof EdgeRuntime<"u")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":tf,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if(t==="node")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":tf,"X-Stainless-OS":J$(globalThis.process.platform??"unknown"),"X-Stainless-Arch":V$(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};let e=zfe();return e?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":tf,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${e.browser}`,"X-Stainless-Runtime-Version":e.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":tf,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};V$=t=>t==="x32"?"x32":t==="x86_64"||t==="x64"?"x64":t==="arm"?"arm":t==="aarch64"||t==="arm64"?"arm64":t?`other:${t}`:"unknown",J$=t=>(t=t.toLowerCase(),t.includes("ios")?"iOS":t==="android"?"Android":t==="darwin"?"MacOS":t==="win32"?"Windows":t==="freebsd"?"FreeBSD":t==="openbsd"?"OpenBSD":t==="linux"?"Linux":t?`Other:${t}`:"Unknown"),W$=()=>Y$??(Y$=Pfe())});function X$(){if(typeof fetch<"u")return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function bw(...t){let e=globalThis.ReadableStream;if(typeof e>"u")throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new e(...t)}function FD(t){let e=Symbol.asyncIterator in t?t[Symbol.asyncIterator]():t[Symbol.iterator]();return bw({start(){},async pull(n){let{done:a,value:i}=await e.next();a?n.close():n.enqueue(i)},async cancel(){await e.return?.()}})}function W3(t){if(t[Symbol.asyncIterator])return t;let e=t.getReader();return{async next(){try{let n=await e.read();return n?.done&&e.releaseLock(),n}catch(n){throw e.releaseLock(),n}},async return(){let n=e.cancel();return e.releaseLock(),await n,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function eH(t){if(t===null||typeof t!="object")return;if(t[Symbol.asyncIterator]){await t[Symbol.asyncIterator]().return?.();return}let e=t.getReader(),n=e.cancel();e.releaseLock(),await n}var Zg=_(()=>{});var tH,nH=_(()=>{tH=({headers:t,body:e})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(e)})});function rH(t){let e=0;for(let i of t)e+=i.length;let n=new Uint8Array(e),a=0;for(let i of t)n.set(i,a),a+=i.length;return n}function X3(t){let e;return(aH??(e=new globalThis.TextEncoder,aH=e.encode.bind(e)))(t)}function Iw(t){let e;return(iH??(e=new globalThis.TextDecoder,iH=e.decode.bind(e)))(t)}var aH,iH,Sw=_(()=>{});function Hfe(t,e){for(let i=e??0;i<t.length;i++){if(t[i]===10)return{preceding:i,index:i+1,carriage:!1};if(t[i]===13)return{preceding:i,index:i+1,carriage:!0}}return null}function oH(t){for(let a=0;a<t.length-1;a++){if(t[a]===10&&t[a+1]===10||t[a]===13&&t[a+1]===13)return a+2;if(t[a]===13&&t[a+1]===10&&a+3<t.length&&t[a+2]===13&&t[a+3]===10)return a+4}return-1}var Ss,xs,Wp,xw=_(()=>{Xm();Sw();Wp=class{constructor(){Ss.set(this,void 0),xs.set(this,void 0),gt(this,Ss,new Uint8Array,"f"),gt(this,xs,null,"f")}decode(e){if(e==null)return[];let n=e instanceof ArrayBuffer?new Uint8Array(e):typeof e=="string"?X3(e):e;gt(this,Ss,rH([Ie(this,Ss,"f"),n]),"f");let a=[],i;for(;(i=Hfe(Ie(this,Ss,"f"),Ie(this,xs,"f")))!=null;){if(i.carriage&&Ie(this,xs,"f")==null){gt(this,xs,i.index,"f");continue}if(Ie(this,xs,"f")!=null&&(i.index!==Ie(this,xs,"f")+1||i.carriage)){a.push(Iw(Ie(this,Ss,"f").subarray(0,Ie(this,xs,"f")-1))),gt(this,Ss,Ie(this,Ss,"f").subarray(Ie(this,xs,"f")),"f"),gt(this,xs,null,"f");continue}let r=Ie(this,xs,"f")!==null?i.preceding-1:i.preceding,l=Iw(Ie(this,Ss,"f").subarray(0,r));a.push(l),gt(this,Ss,Ie(this,Ss,"f").subarray(i.index),"f"),gt(this,xs,null,"f")}return a}flush(){return Ie(this,Ss,"f").length?this.decode(`
|
|
4
4
|
`):[]}};Ss=new WeakMap,xs=new WeakMap;Wp.NEWLINE_CHARS=new Set([`
|
|
5
5
|
`,"\r"]);Wp.NEWLINE_REGEXP=/\r\n|[\n\r]/g});function ev(){}function RD(t,e,n){return!e||ND[t]>ND[n]?ev:e[t].bind(e)}function er(t){let e=t.logger,n=t.logLevel??"off";if(!e)return Gfe;let a=sH.get(e);if(a&&a[0]===n)return a[1];let i={error:RD("error",e,n),warn:RD("warn",e,n),info:RD("info",e,n),debug:RD("debug",e,n)};return sH.set(e,[n,i]),i}var ND,Bw,Gfe,sH,Xp,OD=_(()=>{bA();ND={off:0,error:200,warn:300,info:400,debug:500},Bw=(t,e,n)=>{if(t){if(H$(ND,t))return t;er(n).warn(`${e} was set to ${JSON.stringify(t)}, expected one of ${JSON.stringify(Object.keys(ND))}`)}};Gfe={error:ev,warn:ev,info:ev,debug:ev},sH=new WeakMap;Xp=t=>(t.options&&(t.options={...t.options},delete t.options.headers),t.headers&&(t.headers=Object.fromEntries((t.headers instanceof Headers?[...t.headers]:Object.entries(t.headers)).map(([e,n])=>[e,e.toLowerCase()==="x-api-key"||e.toLowerCase()==="authorization"||e.toLowerCase()==="cookie"||e.toLowerCase()==="set-cookie"?"***":n]))),"retryOfRequestLogID"in t&&(t.retryOfRequestLogID&&(t.retryOf=t.retryOfRequestLogID),delete t.retryOfRequestLogID),t)});async function*qfe(t,e){if(!t.body)throw e.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative"?new At("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api"):new At("Attempted to iterate over a response with no body");let n=new ww,a=new Wp,i=W3(t.body);for await(let r of Kfe(i))for(let l of a.decode(r)){let d=n.decode(l);d&&(yield d)}for(let r of a.flush()){let l=n.decode(r);l&&(yield l)}}async function*Kfe(t){let e=new Uint8Array;for await(let n of t){if(n==null)continue;let a=n instanceof ArrayBuffer?new Uint8Array(n):typeof n=="string"?X3(n):n,i=new Uint8Array(e.length+a.length);i.set(e),i.set(a,e.length),e=i;let r;for(;(r=oH(e))!==-1;)yield e.slice(0,r),e=e.slice(r)}e.length>0&&(yield e)}function Vfe(t,e){let n=t.indexOf(e);return n!==-1?[t.substring(0,n),e,t.substring(n+e.length)]:[t,"",""]}var tv,vc,ww,_w=_(()=>{Xm();gc();Zg();xw();Zg();zg();bA();Sw();OD();gc();vc=class t{constructor(e,n,a){this.iterator=e,tv.set(this,void 0),this.controller=n,gt(this,tv,a,"f")}static fromSSEResponse(e,n,a){let i=!1,r=a?er(a):console;async function*l(){if(i)throw new At("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");i=!0;let d=!1;try{for await(let m of qfe(e,n)){if(m.event==="completion")try{yield JSON.parse(m.data)}catch(h){throw r.error("Could not parse message into JSON:",m.data),r.error("From chunk:",m.raw),h}if(m.event==="message_start"||m.event==="message_delta"||m.event==="message_stop"||m.event==="content_block_start"||m.event==="content_block_delta"||m.event==="content_block_stop")try{yield JSON.parse(m.data)}catch(h){throw r.error("Could not parse message into JSON:",m.data),r.error("From chunk:",m.raw),h}if(m.event!=="ping"&&m.event==="error")throw new Xi(void 0,TD(m.data)??m.data,void 0,e.headers)}d=!0}catch(m){if(Zp(m))return;throw m}finally{d||n.abort()}}return new t(l,n,a)}static fromReadableStream(e,n,a){let i=!1;async function*r(){let d=new Wp,m=W3(e);for await(let h of m)for(let g of d.decode(h))yield g;for(let h of d.flush())yield h}async function*l(){if(i)throw new At("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");i=!0;let d=!1;try{for await(let m of r())d||m&&(yield JSON.parse(m));d=!0}catch(m){if(Zp(m))return;throw m}finally{d||n.abort()}}return new t(l,n,a)}[(tv=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){let e=[],n=[],a=this.iterator(),i=r=>({next:()=>{if(r.length===0){let l=a.next();e.push(l),n.push(l)}return r.shift()}});return[new t(()=>i(e),this.controller,Ie(this,tv,"f")),new t(()=>i(n),this.controller,Ie(this,tv,"f"))]}toReadableStream(){let e=this,n;return bw({async start(){n=e[Symbol.asyncIterator]()},async pull(a){try{let{value:i,done:r}=await n.next();if(r)return a.close();let l=X3(JSON.stringify(i)+`
|
|
@@ -616,7 +616,7 @@ Read about how to prevent this error on https://github.com/vadimdemedes/ink/#isr
|
|
|
616
616
|
`).filter(n=>n.trim()).map(n=>JSON.parse(n))}catch{return[]}}async getMessagesLog(){return(await this.getConversationLog()).filter(n=>n.type==="user"||n.type==="assistant")}async getUsageLog(){return[]}async getSessionSummary(){let e=await this.getConversationLog(),n=e.filter(m=>m.type==="user"||m.type==="assistant"),a=e.filter(m=>m.type==="assistant"),i=e.length>0?e[0].timestamp:void 0,r=e.length>0?e[e.length-1].timestamp:void 0,l=a.reduce((m,h)=>m+(h.metadata?.costUSD||0),0),d=a.reduce((m,h)=>{let g=h.message?.usage;return g&&(m.input+=g.input_tokens||0,m.output+=g.output_tokens||0,m.cacheCreation+=g.cache_creation_input_tokens||0,m.cacheRead+=g.cache_read_input_tokens||0),m},{input:0,output:0,cacheCreation:0,cacheRead:0});return{sessionId:this.sessionId,startTime:i,endTime:r,messageCount:n.length,totalCost:l,totalTokens:d,apiCalls:a.length,errors:0}}},UP=null});import{randomUUID as LP}from"crypto";var op,FJe,Ex=_(()=>{"use strict";MP();op=class{messages=[];maxMessages=20;addUserMessage(e){let n={type:"user",message:{role:"user",content:e},uuid:LP(),timestamp:new Date};return this.messages.push(n),this.trimHistory(),R6()&&yx()?.logUserMessage(n.message).catch(i=>console.error("Failed to log user message:",i)),n}addAssistantMessage(e,n){let a={type:"assistant",content:e,uuid:LP(),timestamp:new Date,costUSD:n?.costUSD,durationMs:n?.durationMs};if(this.messages.push(a),this.trimHistory(),R6()){let i=yx();if(i){let r={role:"assistant",content:e,...n?.costUSD||n?.durationMs?{usage:{cost_usd:n.costUSD,duration_ms:n.durationMs}}:{}},l=n?.parentUuid;l||(l=this.messages.slice().reverse().find(m=>m.type==="user")?.uuid||void 0),i.logAnthropicResponse(r,`internal-${a.uuid}`,l).catch(d=>console.error("Failed to log assistant message:",d))}}return a}addProgressMessage(e,n){let a={type:"progress",content:e,uuid:LP(),timestamp:new Date,progress:n};this.messages.push(a),this.trimHistory()}addMessage(e){if(this.messages.push(e),this.trimHistory(),R6()){let n=yx();e.type==="user"&&n?.logUserMessage(e.message).catch(a=>console.error("Failed to log user message:",a))}}getMessagesForAPI(){return this.messages.filter(e=>e.type==="user"||e.type==="assistant").map(e=>e.type==="user"?e.message:{role:"assistant",content:e.content})}getLegacyMessagesForAPI(){return this.messages.filter(e=>e.type==="user"||e.type==="assistant").map(e=>e.type==="user"?{role:"user",content:typeof e.message.content=="string"?e.message.content:JSON.stringify(e.message.content)}:{role:"assistant",content:e.content})}getConversationSummary(e=500){return this.messages.slice(-6).map(a=>{let i=a.type==="user"?typeof a.message.content=="string"?a.message.content:JSON.stringify(a.message.content):a.content,r=i.slice(0,100)+(i.length>100?"...":"");return`${a.type}: ${r}`}).join(`
|
|
617
617
|
`)}getAllMessages(){return[...this.messages]}getMessagesByType(e){return this.messages.filter(n=>n.type===e)}hasContext(){return this.messages.length>0}clear(){this.messages=[]}getMessageCount(){return this.messages.length}getMaxMessages(){return this.maxMessages}trimHistory(){if(this.messages.length>this.maxMessages){let e=this.maxMessages;this.messages=this.messages.slice(-e)}}},FJe=new op});function Ple({sessionId:t,clientId:e,resumeSessionId:n}){let[a,i]=(0,am.useState)(null),[r,l]=(0,am.useState)([]);(0,am.useEffect)(()=>{if(n){let h=WE(n);if(h){i(h);let g=h.messages.slice(-10).map(E=>({role:E.role,content:E.content}));l(g),T.info(`Resumed session ${n}`)}else{let g=XE(t,e);i(g),T.warn(`Session ${n} not found, created new session`)}}else{let h=XE(t,e);i(h),T.debug(`Created new session ${t}`)}},[]),(0,am.useEffect)(()=>{if(a&&r.length>a.messages.length){let h=r.slice(a.messages.length),g=iS(a,h);i(g),aS(g)}},[r,a]);let d=(0,am.useCallback)(h=>{l(g=>[...g,h])},[]),m=(0,am.useCallback)(()=>{l([])},[]);return{state:{sessionData:a,messages:r},actions:{addMessage:d,setMessages:l,clearMessages:m}}}var am,zle=_(()=>{"use strict";am=be(vt(),1);On()});function jle({authService:t,clientId:e,onConnectionMessage:n}){let[a,i]=(0,Uu.useState)(!1),[r,l]=(0,Uu.useState)({isConnected:!1,isAuthenticated:!1}),[d,m]=(0,Uu.useState)(!1);(0,Uu.useEffect)(()=>{let b=t.onStatusChange(D=>{l(D)});return()=>{b()}},[t]),(0,Uu.useEffect)(()=>{(async()=>{if(d||a){T.debug("Skipping auto-connection: already attempted or connecting",{hasAttemptedConnection:d,isConnecting:a});return}let D=t.getCueApiKey(),S=t.getAccessToken();if(T.debug("Auto-connection check:",{hasCueApiKey:!!D,hasAccessToken:!!S,isConnected:r.isConnected,environment:t.getCurrentEnvironment()}),(D||S)&&!r.isConnected){let x=D?"API key":"access token";T.debug(`Auto-connecting to WebSocket with stored ${x}`,{hasApiKey:!!D,hasAccessToken:!!S,authLength:(D||S).length,environment:t.getCurrentEnvironment(),baseUrl:t.getBaseUrl()}),m(!0),i(!0);try{await t.connectWebSocket(e),T.debug("WebSocket auto-connection successful")}catch(w){T.debug("Auto-connection failed",{error:w instanceof Error?w.message:String(w),environment:t.getCurrentEnvironment(),baseUrl:t.getBaseUrl()})}finally{i(!1)}}else!D&&!S?(m(!0),T.debug("No authentication found, skipping auto-connection")):T.debug("Skipping auto-connection: already connected")})().catch(D=>{T.debug("Auto-connection failed",{error:String(D)})})},[t,r.isConnected,a,d,e,n]);let h=(0,Uu.useCallback)(async()=>{if(a||r.isConnected)return;let b=t.getCueApiKey(),D=t.getAccessToken();if(!b&&!D){n?.({role:"assistant",content:"Cannot connect: No authentication available. Use `/login` or `/auth` to authenticate."});return}i(!0);try{await t.connectWebSocket(e),n?.({role:"assistant",content:"Successfully connected to WebSocket!"})}catch(S){T.error("WebSocket connection failed",{error:S instanceof Error?S.message:String(S)}),n?.({role:"assistant",content:`\u274C WebSocket connection failed: ${S instanceof Error?S.message:String(S)}
|
|
618
618
|
|
|
619
|
-
Try using \`/login\` for email/password auth or \`/auth\` for API key auth.`})}finally{i(!1)}},[t,e,a,r.isConnected,n]),g=(0,Uu.useCallback)(()=>{t.disconnect(),n?.({role:"assistant",content:"Disconnected from WebSocket."})},[t,n]),E=(0,Uu.useCallback)(()=>{m(!1),i(!1)},[]);return{state:{isConnecting:a,connectionStatus:r,hasAttemptedConnection:d},actions:{initiateConnection:h,disconnect:g,resetConnectionState:E}}}var Uu,$le=_(()=>{"use strict";Uu=be(vt(),1);On()});function Hle(t){let[e,n]=(0,sa.useState)({...hCe,...t}),a=(0,sa.useCallback)(ae=>{n(de=>({...de,showStatus:ae}))},[]),i=(0,sa.useCallback)(ae=>{n(de=>({...de,showDebug:ae}))},[]),r=(0,sa.useCallback)(ae=>{n(de=>({...de,showConnectionStatus:ae}))},[]),l=(0,sa.useCallback)(ae=>{n(de=>({...de,showClientSelector:ae}))},[]),d=(0,sa.useCallback)(ae=>{n(de=>({...de,showModelSelector:ae}))},[]),m=(0,sa.useCallback)(ae=>{n(de=>({...de,showProviderSelector:ae}))},[]),h=(0,sa.useCallback)(ae=>{n(de=>({...de,showEnvironmentSelector:ae}))},[]),g=(0,sa.useCallback)(ae=>{n(de=>({...de,showShortcuts:ae}))},[]),E=(0,sa.useCallback)(ae=>{n(de=>({...de,showApiKeyInput:ae}))},[]),b=(0,sa.useCallback)(ae=>{n(de=>({...de,showLoginInput:ae}))},[]),D=(0,sa.useCallback)(ae=>{n(de=>({...de,showMobileAuth:ae}))},[]),S=(0,sa.useCallback)(ae=>{n(de=>({...de,showLoginMethodSelector:ae}))},[]),x=(0,sa.useCallback)(ae=>{n(de=>({...de,isLoading:ae}))},[]),w=(0,sa.useCallback)(ae=>{n(de=>({...de,loadingMessage:ae}))},[]),F=(0,sa.useCallback)(ae=>{n(de=>({...de,loadingStartTime:ae}))},[]),R=(0,sa.useCallback)(ae=>{n(de=>({...de,input:ae}))},[]),L=(0,sa.useCallback)(ae=>{n(de=>({...de,chatTarget:ae}))},[]),z=(0,sa.useCallback)((ae="Thinking")=>{n(de=>({...de,isLoading:!0,loadingMessage:ae,loadingStartTime:Date.now()}))},[]),$=(0,sa.useCallback)(()=>{n(ae=>({...ae,isLoading:!1,loadingStartTime:void 0}))},[]),H=(0,sa.useCallback)(()=>{n(ae=>({...ae,showStatus:!ae.showStatus}))},[]),ne=(0,sa.useCallback)(()=>{n(ae=>({...ae,showDebug:!ae.showDebug}))},[]),J=(0,sa.useCallback)(()=>{n(ae=>({...ae,showShortcuts:!ae.showShortcuts}))},[]),j=(0,sa.useCallback)(()=>{n(ae=>({...ae,showStatus:!1,showDebug:!1,showConnectionStatus:!1,showClientSelector:!1,showModelSelector:!1,showProviderSelector:!1,showEnvironmentSelector:!1,showShortcuts:!1,showApiKeyInput:!1,showLoginInput:!1,showMobileAuth:!1,showLoginMethodSelector:!1}))},[]);return{state:e,actions:{setShowStatus:a,setShowDebug:i,setShowConnectionStatus:r,setShowClientSelector:l,setShowModelSelector:d,setShowProviderSelector:m,setShowEnvironmentSelector:h,setShowShortcuts:g,setShowApiKeyInput:E,setShowLoginInput:b,setShowMobileAuth:D,setShowLoginMethodSelector:S,setIsLoading:x,setLoadingMessage:w,setLoadingStartTime:F,setInput:R,setChatTarget:L,startLoading:z,stopLoading:$,toggleStatus:H,toggleDebug:ne,toggleShortcuts:J,hideAllDialogs:j}}}var sa,hCe,Gle=_(()=>{"use strict";sa=be(vt(),1),hCe={showStatus:!1,showDebug:!1,showConnectionStatus:!1,showClientSelector:!1,showModelSelector:!1,showProviderSelector:!1,showEnvironmentSelector:!1,showShortcuts:!1,showApiKeyInput:!1,showLoginInput:!1,showMobileAuth:!1,showLoginMethodSelector:!1,isLoading:!1,loadingMessage:"Thinking",input:"",chatTarget:null}});function qle({authService:t,clientId:e,onMessage:n,onHideInput:a}){let i=(0,PP.useCallback)(async(l,d)=>{if(a(),d==="CUE_API_KEY"&&t.setCueApiKey(l,!1,!0),d==="ANTHROPIC_API_KEY"&&t.setAnthropicApiKey(l,!0),d==="OPENAI_API_KEY"&&t.setOpenAIApiKey(l,!0),process.env[d]=l,n({role:"assistant",content:`${d} set and saved to config successfully.${d==="CUE_API_KEY"?" Testing connection...":d==="ANTHROPIC_API_KEY"?" Ready for direct Anthropic API calls.":" Ready for direct OpenAI API calls."}`}),d==="CUE_API_KEY")try{if(await t.testConnection()){n({role:"assistant",content:"Cue API key is valid! Connecting to WebSocket..."});try{await t.connectWebSocket(e),n({role:"assistant",content:"Connected successfully! You can now use WebSocket features."})}catch(h){n({role:"assistant",content:`WebSocket connection failed: ${h instanceof Error?h.message:String(h)}`})}}else n({role:"assistant",content:"Cue API key is invalid. Please check your key and try again."})}catch(m){n({role:"assistant",content:`Failed to test Cue API key: ${m instanceof Error?m.message:String(m)}`})}},[t,e,n,a]),r=(0,PP.useCallback)(()=>{a(),n({role:"assistant",content:"API key input cancelled."})},[n,a]);return{actions:{handleApiKeySubmit:i,handleApiKeyCancel:r}}}var PP,Kle=_(()=>{"use strict";PP=be(vt(),1)});var Dx,Vle=_(()=>{"use strict";On();Dx=class{wsClient=null;constructor(){}setWebSocketClient(e){this.wsClient=e,this.setupMessageHandlers(),T.debug("SessionEventHandler WebSocket configured")}setupMessageHandlers(){this.wsClient&&T.debug("SessionEventHandler handlers registered")}_isMessageForUs(e){let n=e.payload?.target_client_id||e.payload?.recipient,a=this.wsClient?.config.clientId;return n&&n!=="all"&&n!==a?(T.debug(`Message not for us - target: ${n}, we are: ${a}, skipping`),!1):!0}async sendSessionStart(e,n,a,i=!1){if(!this.wsClient)return;let r={sessionInfo:a,isResume:i};await this.wsClient.send(qd(e,Jc.START,r,{targetClientId:n})),T.debug(`\u{1F4E4} Sent session_start${i?" (resume)":""} for: ${e}`)}async sendSessionUpdate(e,n,a,i,r){if(!this.wsClient)return;let l={sessionId:e,...a};await this.wsClient.send(qd(e,Jc.UPDATE,l,{targetClientId:n,websocketRequestId:i,messageId:r})),T.debug(`Session update sent for session: ${e}${r?` with messageId: ${r}`:""}`)}async sendSessionStop(e,n,a,i,r){this.wsClient&&(await this.wsClient.send(qd(e,Jc.STOP,a,{targetClientId:n,websocketRequestId:i,messageId:r})),T.debug(`Session stop sent for session: ${e}${r?` with messageId: ${r}`:""}`))}async sendResponse(e,n,a,i){this.wsClient&&await this.sendSessionUpdate(e,n,{message:a,role:"assistant",isComplete:!0},i)}getClientId(){return this.wsClient?.config.clientId}}});import{randomUUID as gCe}from"crypto";function O9(){return zP||(zP=new jP),zP}var jP,zP,$P=_(()=>{"use strict";Ex();On();Vle();t1();jP=class{sessions=new Map;authService;eventHandler;constructor(){this.authService=i6(),this.eventHandler=new Dx,T.debug("CueCLIService initialized")}setWebSocketClient(e){this.eventHandler.setWebSocketClient(e),T.debug("CueCLIService WebSocket configured")}async handleCueCLIExecute(e){let n=e.payload?.target_client_id||e.payload?.recipient,a=this.eventHandler.getClientId(),i=e.payload?.parameters||{},{message:r,cwd:l}=i,{session_id:d}=i,m=e.client_id||"unknown",h=e.websocket_request_id;T.info(`Cue CLI Execute: session=${d}, from=${m}, target=${n}, us=${a}`),T.debug("Message parameter",{type:typeof r,value:r});let g;if(typeof r=="string")g=r;else if(r&&typeof r=="object"&&"content"in r)g=String(r.content);else if(r)g=String(r);else{T.error("No message provided in request");return}d||(d=gCe(),T.info(`Generated new session_id: ${d}`));let E=`msg_${d}_${Date.now()}_${Math.random().toString(36).substring(2,11)}`;T.info(`Generated message ID: ${E} for session: ${d}`);try{await this.eventHandler.sendSessionUpdate(d,m,{message:`Processing: "${g.slice(0,50)}${g.length>50?"...":""}"`,isStatus:!0},h,E);let b=this.sessions.get(d);if(b){let R=this.eventHandler.getClientId();if(R){let L={sessionId:d,clientId:R,cwd:process.cwd(),cliClientType:"cue",messageCount:b.conversationHistory.getLegacyMessagesForAPI().length,createdAt:b.createdAt.toISOString(),lastActivityAt:b.lastActivityAt.toISOString()};await this.eventHandler.sendSessionStart(d,m,L,!0)}}else{b={sessionId:d,conversationHistory:new op,createdAt:new Date,lastActivityAt:new Date,clientId:m},this.sessions.set(d,b),T.info(`\u{1F4C1} Created new session: ${d}`);let R=this.eventHandler.getClientId();if(R){let L={sessionId:d,clientId:R,cwd:process.cwd(),cliClientType:"cue",messageCount:0,createdAt:new Date().toISOString()};await this.eventHandler.sendSessionStart(d,m,L,!1)}}b.lastActivityAt=new Date,b.conversationHistory.addUserMessage(g);let D=await this.getAIService(i);if(!D)throw new Error("No AI service available. Please configure API keys.");await this.eventHandler.sendSessionUpdate(d,m,{message:"Generating response...",isStatus:!0},h,E);let S=async R=>{T.debug(`onProgress called, message length: ${R.length}`),await this.eventHandler.sendSessionUpdate(d,m,{messageChunk:R,role:"assistant",isComplete:!1},h,E)},x=b.conversationHistory.getLegacyMessagesForAPI(),w=await D.sendMessageWithTools(g,x,S);b.conversationHistory.addAssistantMessage(w.content);let F={sessionId:d,message:w.content,tokenUsage:w.usage?{input:w.usage.input_tokens,output:w.usage.output_tokens,total:(w.usage.input_tokens||0)+(w.usage.output_tokens||0)}:void 0};await this.eventHandler.sendSessionStop(d,m,F,h,E),T.info(`Cue CLI response sent for session: ${d}`)}catch(b){let D=b instanceof Error?b.message:String(b);T.error(`\u274C Cue CLI execution failed: ${D}`);let S=D;try{let w=JSON.parse(D);w.error?.message&&(S=w.error.message,w.error.type==="overloaded_error"?S="\u26A0\uFE0F Service is currently overloaded. Please try again in a moment.":w.error.type==="rate_limit_error"?S="\u23F1\uFE0F Rate limit exceeded. Please wait a moment before trying again.":w.error.type==="invalid_request_error"&&(S=`\u274C Invalid request: ${w.error.message}`))}catch{D.includes("overloaded")||D.includes("Overloaded")?S="\u26A0\uFE0F Service is currently overloaded. Please try again in a moment.":D.includes("rate")&&D.includes("limit")?S="\u23F1\uFE0F Rate limit exceeded. Please wait a moment before trying again.":D.includes("API key")||D.includes("authentication")?S="\u{1F511} Authentication error. Please check your API key configuration.":D.includes("network")||D.includes("ECONNREFUSED")?S="\u{1F310} Network error. Please check your internet connection.":S=`\u274C Error: ${D.substring(0,200)}${D.length>200?"...":""}`}await this.eventHandler.sendSessionUpdate(d,m,{messageChunk:S,role:"assistant",isComplete:!1},h,E);let x={sessionId:d,message:S};await this.eventHandler.sendSessionStop(d,m,x,h,E)}}async handleClearSession(e){let{session_id:n}=e.payload?.parameters||{},a=e.client_id||"unknown",i=this.sessions.get(n);i&&(i.conversationHistory=new op,i.lastActivityAt=new Date,T.info(`Cleared session: ${n}`),n&&await this.eventHandler.sendResponse(n,a,"Session cleared. Starting fresh conversation.",e.websocket_request_id))}async handleDeleteSession(e){let{session_id:n}=e.payload?.parameters||{},a=e.client_id||"unknown";n&&this.sessions.delete(n)&&(T.info(`\u{1F5D1}\uFE0F Deleted session: ${n}`),await this.eventHandler.sendResponse(n,a,"Session deleted.",e.websocket_request_id))}async getAIService(e){let n=e.provider||zs(),a=e.model||Nu();if(n==="openai"){let i=this.authService.getOpenAIApiKey()||process.env.OPENAI_API_KEY;return i?G4({apiKey:i,model:a9(a)}):null}else if(n==="cue"&&this.authService.hasCueApiKey()){let i=this.authService.getCueApiKey(),r=this.authService.getBaseUrl(),l=this.authService.getAnthropicApiKey();return i?Zf({apiKey:l||void 0,proxy:{baseUrl:r,apiKey:i}}):null}else{let i=this.authService.getAnthropicApiKey();return i?Zf({apiKey:i}):null}}getSessionInfo(e){return this.sessions.get(e)}getAllSessions(){return Array.from(this.sessions.values())}clearInactiveSessions(e=30){let n=new Date,a=e*60*1e3;for(let[i,r]of this.sessions)n.getTime()-r.lastActivityAt.getTime()>a&&(this.sessions.delete(i),T.info(`Cleaned up inactive session: ${i}`))}},zP=null});import{randomUUID as Jle}from"crypto";import*as Cx from"os";import*as bx from"fs";function Yle(){return HP||(HP=new GP),HP}var GP,HP,Zle=_(()=>{"use strict";On();On();On();$P();GP=class{wsClient=null;handlers=new Map;claudeService=null;isInitialized=!1;constructor(){this.initializeHandlers()}initializeHandlers(){this.handlers.set(Yc.CUE,{handleRun:this.handleCueRun.bind(this),handleStop:this.handleCueStop.bind(this),handleReset:this.handleCueReset.bind(this)}),this.handlers.set(Yc.CLAUDE_CODE,{handleRun:this.handleClaudeCodeRun.bind(this),handleStop:this.handleClaudeCodeStop.bind(this),handleReset:this.handleClaudeCodeReset.bind(this)})}setWebSocketClient(e){this.wsClient=e,this.setupMessageHandler(),T.debug("AgentControlRouter WebSocket configured")}setupMessageHandler(){this.wsClient&&(this.wsClient.on(Sn.AGENT_CONTROL,this.handleAgentControl.bind(this)),this.wsClient.on(Sn.SESSION_DISCOVERY,this.handleSessionDiscovery.bind(this)),this.wsClient.on(Sn.SESSION_HISTORY,this.handleSessionHistory.bind(this)),T.debug("AgentControlRouter message handlers registered (agent_control, session_discovery, session_history)"))}async handleAgentControl(e){let n=e.payload,{control_type:a,parameters:i}=n||{};if(!a||!i){T.error("Invalid agent_control message: missing control_type or parameters");return}let{cli_client_type:r}=i;if(!r){T.error("No cli_client_type specified in agent_control message");return}if(T.info(`AgentControlRouter: ${a} for ${r}`,{session_id:i.session_id,from:e.client_id}),!this.isMessageForUs(e)){T.debug("Message not for us, skipping");return}let l=this.handlers.get(r);if(!l){T.error(`No handler registered for cli_client_type: ${r}`),await this.sendErrorResponse(e,`Unsupported CLI client type: ${r}`);return}try{switch(a){case JE.RUN:await l.handleRun(e,n);break;case JE.STOP:await l.handleStop(e,n);break;case JE.RESET:await l.handleReset(e,n);break;default:T.error(`Unknown control_type: ${a}`),await this.sendErrorResponse(e,`Unknown control type: ${a}`)}}catch(d){T.error(`Error handling ${a} for ${r}:`,{error:d}),await this.sendErrorResponse(e,d instanceof Error?d.message:String(d))}}isMessageForUs(e){let n=e.payload?.target_client_id||e.payload?.recipient,a=this.wsClient?.config.clientId;return!n||n==="all"||n===a}async handleCueRun(e,n){let a=O9(),i={...e,payload:{...e.payload,parameters:{message:n.parameters.message||n.parameters.prompt,session_id:n.parameters.session_id||Jle(),cwd:n.parameters.cwd,model:n.parameters.model,provider:n.parameters.provider}}};await a.handleCueCLIExecute(i)}async handleCueStop(e,n){T.info(`Cue CLI stop requested for session: ${n.parameters.session_id}`)}async handleCueReset(e,n){let a=O9(),i={...e,payload:{...e.payload,parameters:{session_id:n.parameters.session_id}}};await a.handleClearSession(i)}async handleClaudeCodeRun(e,n){let{parameters:a}=n,i=e.client_id,r=e.websocket_request_id,l=a.prompt||a.message,d=a.session_id;if(!l){T.error("No prompt provided for Claude Code"),await this.sendErrorResponse(e,"No prompt provided");return}let m=a.cwd||process.cwd();try{this.claudeService||(this.claudeService=new e1,await this.claudeService.initialize()),!d||d.startsWith("TEMP-SESSION")?T.info("Starting new session",{providedSessionId:d,isNewSession:!0}):T.info("Continuing existing session",{sessionId:d,isNewSession:!1});let g={sessionId:d||Jle(),clientId:this.wsClient?.config.clientId||"unknown",cwd:m,cliClientType:"claude_code",messageCount:0},E={session_id:g.sessionId,client_id:g.clientId,cwd:g.cwd,cli_client_type:g.cliClientType,message_count:g.messageCount,created_at:g.createdAt,last_activity_at:g.lastActivityAt,initial_message:g.initialMessage,last_activity_message:g.lastActivityMessage};if(await this.sendSessionStart(g.sessionId,i,E,!1),m==="~"||m.startsWith("~/")){let D=Cx.homedir();m=m==="~"?D:m.replace("~",D)}try{(!bx.existsSync(m)||!bx.statSync(m).isDirectory())&&(m=Cx.homedir()||process.cwd(),T.info(`Using fallback working directory: ${m}`))}catch{m=Cx.homedir()||process.cwd()}await this.sendSessionUpdate(g.sessionId,i,{message:"Executing Claude Code command",isStatus:!0},r);let b=await this.claudeService.execute({prompt:l,cwd:m});T.info("Claude Code response:",{sessionId:b.sessionId,result:b.result,error:b.error}),await this.sendSessionUpdate(b.sessionId||g.sessionId,i,{message:b.result||b.error||"Claude Code execution completed",role:"assistant",isComplete:!1},r),await this.sendSessionStop(b.sessionId||g.sessionId,i,{message:b.result||b.error||"Claude Code execution completed"},r)}catch(h){let g=h instanceof Error?h.message:String(h);T.error("Failed to execute Claude Code:",{error:g}),await this.sendErrorResponse(e,g)}}async handleClaudeCodeStop(e,n){T.info(`Claude Code stop requested for session: ${n.parameters.session_id}`)}async handleClaudeCodeReset(e,n){T.info(`Claude Code reset requested for session: ${n.parameters.session_id}`)}async handleSessionDiscovery(e){let n=e.payload;if(n?.action==="request"){T.debug("Received session discovery request from:",{clientId:e.client_id});try{let{SessionDiscoveryService:a,getProjectsPathForClientType:i,CLI_CLIENT_TYPES:r}=await Promise.resolve().then(()=>(On(),Rh)),l=n.cli_client_type||r.CLAUDE_CODE,d=i(l);T.debug("Session discovery using client type:",{clientType:l,projectsPath:d,requestedType:n.cli_client_type});let h=await new a(d).discoverSessions(n.limit||50,this.wsClient?.config.clientId);if(T.debug("Found local sessions:",{count:h.length}),!this.wsClient){T.error("WebSocket client not available for session discovery response");return}let g=h.map(b=>rs(b)),E=e.client_id;T.debug("Preparing session discovery response",{recipientId:E,ourClientId:this.wsClient.config.clientId,requestId:e.websocket_request_id,sessionsCount:g.length}),await this.wsClient.send({type:"session_discovery",payload:{action:"response",client_id:this.wsClient.config.clientId,sessions:g,sender:this.wsClient.config.clientId,target_client_id:E},websocket_request_id:e.websocket_request_id}),T.debug("Session discovery response sent successfully",{recipientId:E,requestId:e.websocket_request_id,sessionsCount:g.length}),T.debug("Sent session discovery response",{sessionCount:h.length})}catch(a){T.error("Error handling session discovery request:",{error:a})}}}async handleSessionHistory(e){let n=e.payload;if(n?.action==="request"){let a=n.session_id,i=n.limit||20,r=n.offset||0;T.debug("Received session history request",{sessionId:a,limit:i,offset:r,clientId:e.client_id});try{let{SessionDiscoveryService:l,getProjectsPathForClientType:d,CLI_CLIENT_TYPES:m}=await Promise.resolve().then(()=>(On(),Rh)),h=n.cli_client_type||m.CLAUDE_CODE,g=d(h);T.debug("Session history using client type:",{clientType:h,projectsPath:g,sessionId:a,requestedType:n.cli_client_type});let b=await new l(g).getSessionHistory(a,i,r);if(T.debug("Found session history messages",{sessionId:a,count:b.length}),!this.wsClient){T.error("WebSocket client not available for session history response");return}let D=e.client_id;T.debug("Preparing session history response",{recipientId:D,sessionId:a,ourClientId:this.wsClient.config.clientId,requestId:e.websocket_request_id,messagesCount:b.length}),await this.wsClient.send({type:"session_history",payload:{action:"response",session_id:a,client_id:this.wsClient.config.clientId,messages:b,limit:i,offset:r,sender:this.wsClient.config.clientId,target_client_id:D},websocket_request_id:e.websocket_request_id}),T.debug("Session history response sent successfully",{recipientId:D,sessionId:a,requestId:e.websocket_request_id,messagesCount:b.length})}catch(l){T.error("Error handling session history request:",{error:l,sessionId:a})}}}async sendSessionStart(e,n,a,i,r){if(!this.wsClient)return;T.debug("sendSessionStart called with:",{sessionId:e,eventType:Jc.START,data:{sessionInfo:a,isResume:i}});let l=Jc.START,h=qd(e,l,{sessionInfo:a,isResume:i},{targetClientId:n,websocketRequestId:r});T.debug("createSessionEvent returned:",{event:h}),await this.wsClient.send(h)}async sendSessionUpdate(e,n,a,i){this.wsClient&&await this.wsClient.send(qd(e,Jc.UPDATE,{sessionId:e,...a},{targetClientId:n,websocketRequestId:i}))}async sendSessionStop(e,n,a,i){this.wsClient&&await this.wsClient.send(qd(e,Jc.STOP,{sessionId:e,...a},{targetClientId:n,websocketRequestId:i}))}async sendErrorResponse(e,n){if(!this.wsClient)return;let a=e.client_id,i=e.websocket_request_id,r=e.payload?.parameters?.session_id||"unknown";await this.sendSessionUpdate(r,a,{message:n,role:"assistant",isComplete:!0},i)}},HP=null});function Ix({authService:t}){(0,Xle.useEffect)(()=>{let e=()=>{let i=t.getWebSocketClient();return i?(Wle||(Yle().setWebSocketClient(i),Wle=!0,T.info("AgentControlRouter initialized and connected to WebSocket")),!0):((t.hasCueApiKey()||t.hasAccessToken())&&T.debug("WebSocket client not yet available for AgentControlRouter"),!1)},n=e(),a=null;return n||(t.hasCueApiKey()||t.hasAccessToken())&&(a=setInterval(()=>{e()&&(T.info("WebSocket became available, router initialized"),a&&(clearInterval(a),a=null))},1e3)),()=>{a&&clearInterval(a)}},[t])}var Xle,Wle,qP=_(()=>{"use strict";Xle=be(vt(),1);On();Zle();Wle=!1});function vCe(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){let e=Math.random()*16|0;return(t==="x"?e:e&3|8).toString(16)})}function eue({resumeSessionId:t,clientId:e}={}){let[n]=(0,ro.useState)(()=>(KP||(KP=t||vCe()),KP)),[a]=(0,ro.useState)(()=>(VP||(VP=e||Ru()),VP)),[i,r]=(0,ro.useState)(0);(0,ro.useEffect)(()=>{if(R6()){let z=Lle(n,a);return by(async $=>{await z.logUsage({eventType:$.eventType,messageId:$.messageId,apiCall:$.apiCall,error:$.error})}),z.logSessionStart().catch($=>console.error("Failed to log session start:",$)),()=>{by(null),z.logSessionEnd().catch($=>console.error("Failed to log session end:",$))}}},[n,a]);let[l]=(0,ro.useState)(()=>new op),[d]=(0,ro.useState)(()=>i6({})),m=Ple({sessionId:n,clientId:a,resumeSessionId:t}),h=(0,ro.useCallback)(z=>{m.actions.addMessage(z)},[m.actions]),g=jle({authService:d,clientId:a,onConnectionMessage:h}),E=Hle(),b=qle({authService:d,clientId:a,onMessage:m.actions.addMessage,onHideInput:()=>E.actions.setShowApiKeyInput(!1)}),D=Ix({authService:d}),S=(0,ro.useCallback)(async(z,$)=>{E.actions.setShowLoginInput(!1),E.actions.startLoading("Signing in...");try{let H=await d.login(z,$);if(H.success){try{if(d.hasAccessToken()||d.hasCueApiKey()){let J=d.getWebSocketClient();J&&(T.debug("Closing existing WebSocket before reconnecting"),J.close()),await d.connectWebSocket(),T.debug("WebSocket reconnected after login")}else T.debug("No authentication available after login, skipping WebSocket connection")}catch(J){T.debug("WebSocket reconnection failed (non-critical):",{error:J})}let ne=H.user;m.actions.addMessage({role:"assistant",content:`${H.message}
|
|
619
|
+
Try using \`/login\` for email/password auth or \`/auth\` for API key auth.`})}finally{i(!1)}},[t,e,a,r.isConnected,n]),g=(0,Uu.useCallback)(()=>{t.disconnect(),n?.({role:"assistant",content:"Disconnected from WebSocket."})},[t,n]),E=(0,Uu.useCallback)(()=>{m(!1),i(!1)},[]);return{state:{isConnecting:a,connectionStatus:r,hasAttemptedConnection:d},actions:{initiateConnection:h,disconnect:g,resetConnectionState:E}}}var Uu,$le=_(()=>{"use strict";Uu=be(vt(),1);On()});function Hle(t){let[e,n]=(0,sa.useState)({...hCe,...t}),a=(0,sa.useCallback)(ae=>{n(de=>({...de,showStatus:ae}))},[]),i=(0,sa.useCallback)(ae=>{n(de=>({...de,showDebug:ae}))},[]),r=(0,sa.useCallback)(ae=>{n(de=>({...de,showConnectionStatus:ae}))},[]),l=(0,sa.useCallback)(ae=>{n(de=>({...de,showClientSelector:ae}))},[]),d=(0,sa.useCallback)(ae=>{n(de=>({...de,showModelSelector:ae}))},[]),m=(0,sa.useCallback)(ae=>{n(de=>({...de,showProviderSelector:ae}))},[]),h=(0,sa.useCallback)(ae=>{n(de=>({...de,showEnvironmentSelector:ae}))},[]),g=(0,sa.useCallback)(ae=>{n(de=>({...de,showShortcuts:ae}))},[]),E=(0,sa.useCallback)(ae=>{n(de=>({...de,showApiKeyInput:ae}))},[]),b=(0,sa.useCallback)(ae=>{n(de=>({...de,showLoginInput:ae}))},[]),D=(0,sa.useCallback)(ae=>{n(de=>({...de,showMobileAuth:ae}))},[]),S=(0,sa.useCallback)(ae=>{n(de=>({...de,showLoginMethodSelector:ae}))},[]),x=(0,sa.useCallback)(ae=>{n(de=>({...de,isLoading:ae}))},[]),w=(0,sa.useCallback)(ae=>{n(de=>({...de,loadingMessage:ae}))},[]),F=(0,sa.useCallback)(ae=>{n(de=>({...de,loadingStartTime:ae}))},[]),R=(0,sa.useCallback)(ae=>{n(de=>({...de,input:ae}))},[]),L=(0,sa.useCallback)(ae=>{n(de=>({...de,chatTarget:ae}))},[]),z=(0,sa.useCallback)((ae="Thinking")=>{n(de=>({...de,isLoading:!0,loadingMessage:ae,loadingStartTime:Date.now()}))},[]),$=(0,sa.useCallback)(()=>{n(ae=>({...ae,isLoading:!1,loadingStartTime:void 0}))},[]),H=(0,sa.useCallback)(()=>{n(ae=>({...ae,showStatus:!ae.showStatus}))},[]),ne=(0,sa.useCallback)(()=>{n(ae=>({...ae,showDebug:!ae.showDebug}))},[]),J=(0,sa.useCallback)(()=>{n(ae=>({...ae,showShortcuts:!ae.showShortcuts}))},[]),j=(0,sa.useCallback)(()=>{n(ae=>({...ae,showStatus:!1,showDebug:!1,showConnectionStatus:!1,showClientSelector:!1,showModelSelector:!1,showProviderSelector:!1,showEnvironmentSelector:!1,showShortcuts:!1,showApiKeyInput:!1,showLoginInput:!1,showMobileAuth:!1,showLoginMethodSelector:!1}))},[]);return{state:e,actions:{setShowStatus:a,setShowDebug:i,setShowConnectionStatus:r,setShowClientSelector:l,setShowModelSelector:d,setShowProviderSelector:m,setShowEnvironmentSelector:h,setShowShortcuts:g,setShowApiKeyInput:E,setShowLoginInput:b,setShowMobileAuth:D,setShowLoginMethodSelector:S,setIsLoading:x,setLoadingMessage:w,setLoadingStartTime:F,setInput:R,setChatTarget:L,startLoading:z,stopLoading:$,toggleStatus:H,toggleDebug:ne,toggleShortcuts:J,hideAllDialogs:j}}}var sa,hCe,Gle=_(()=>{"use strict";sa=be(vt(),1),hCe={showStatus:!1,showDebug:!1,showConnectionStatus:!1,showClientSelector:!1,showModelSelector:!1,showProviderSelector:!1,showEnvironmentSelector:!1,showShortcuts:!1,showApiKeyInput:!1,showLoginInput:!1,showMobileAuth:!1,showLoginMethodSelector:!1,isLoading:!1,loadingMessage:"Thinking",input:"",chatTarget:null}});function qle({authService:t,clientId:e,onMessage:n,onHideInput:a}){let i=(0,PP.useCallback)(async(l,d)=>{if(a(),d==="CUE_API_KEY"&&t.setCueApiKey(l,!1,!0),d==="ANTHROPIC_API_KEY"&&t.setAnthropicApiKey(l,!0),d==="OPENAI_API_KEY"&&t.setOpenAIApiKey(l,!0),process.env[d]=l,n({role:"assistant",content:`${d} set and saved to config successfully.${d==="CUE_API_KEY"?" Testing connection...":d==="ANTHROPIC_API_KEY"?" Ready for direct Anthropic API calls.":" Ready for direct OpenAI API calls."}`}),d==="CUE_API_KEY")try{if(await t.testConnection()){n({role:"assistant",content:"Cue API key is valid! Connecting to WebSocket..."});try{await t.connectWebSocket(e),n({role:"assistant",content:"Connected successfully! You can now use WebSocket features."})}catch(h){n({role:"assistant",content:`WebSocket connection failed: ${h instanceof Error?h.message:String(h)}`})}}else n({role:"assistant",content:"Cue API key is invalid. Please check your key and try again."})}catch(m){n({role:"assistant",content:`Failed to test Cue API key: ${m instanceof Error?m.message:String(m)}`})}},[t,e,n,a]),r=(0,PP.useCallback)(()=>{a(),n({role:"assistant",content:"API key input cancelled."})},[n,a]);return{actions:{handleApiKeySubmit:i,handleApiKeyCancel:r}}}var PP,Kle=_(()=>{"use strict";PP=be(vt(),1)});var Dx,Vle=_(()=>{"use strict";On();Dx=class{wsClient=null;constructor(){}setWebSocketClient(e){this.wsClient=e,this.setupMessageHandlers(),T.debug("SessionEventHandler WebSocket configured")}setupMessageHandlers(){this.wsClient&&T.debug("SessionEventHandler handlers registered")}_isMessageForUs(e){let n=e.payload?.target_client_id||e.payload?.recipient,a=this.wsClient?.config.clientId;return n&&n!=="all"&&n!==a?(T.debug(`Message not for us - target: ${n}, we are: ${a}, skipping`),!1):!0}async sendSessionStart(e,n,a,i=!1){if(!this.wsClient)return;let r={sessionInfo:a,isResume:i};await this.wsClient.send(qd(e,Jc.START,r,{targetClientId:n})),T.debug(`\u{1F4E4} Sent session_start${i?" (resume)":""} for: ${e}`)}async sendSessionUpdate(e,n,a,i,r){if(!this.wsClient)return;let l={sessionId:e,...a};await this.wsClient.send(qd(e,Jc.UPDATE,l,{targetClientId:n,websocketRequestId:i,messageId:r})),T.debug(`Session update sent for session: ${e}${r?` with messageId: ${r}`:""}`)}async sendSessionStop(e,n,a,i,r){this.wsClient&&(await this.wsClient.send(qd(e,Jc.STOP,a,{targetClientId:n,websocketRequestId:i,messageId:r})),T.debug(`Session stop sent for session: ${e}${r?` with messageId: ${r}`:""}`))}async sendResponse(e,n,a,i){this.wsClient&&await this.sendSessionUpdate(e,n,{message:a,role:"assistant",isComplete:!0},i)}getClientId(){return this.wsClient?.config.clientId}}});import{randomUUID as gCe}from"crypto";function O9(){return zP||(zP=new jP),zP}var jP,zP,$P=_(()=>{"use strict";Ex();On();Vle();t1();jP=class{sessions=new Map;authService;eventHandler;constructor(){this.authService=i6(),this.eventHandler=new Dx,T.debug("CueCLIService initialized")}setWebSocketClient(e){this.eventHandler.setWebSocketClient(e),T.debug("CueCLIService WebSocket configured")}async handleCueCLIExecute(e){let n=e.payload?.target_client_id||e.payload?.recipient,a=this.eventHandler.getClientId(),i=e.payload?.parameters||{},{message:r,cwd:l}=i,{session_id:d}=i,m=e.client_id||"unknown",h=e.websocket_request_id;T.info(`Cue CLI Execute: session=${d}, from=${m}, target=${n}, us=${a}`),T.debug("Message parameter",{type:typeof r,value:r});let g;if(typeof r=="string")g=r;else if(r&&typeof r=="object"&&"content"in r)g=String(r.content);else if(r)g=String(r);else{T.error("No message provided in request");return}d||(d=gCe(),T.info(`Generated new session_id: ${d}`));let E=`msg_${d}_${Date.now()}_${Math.random().toString(36).substring(2,11)}`;T.info(`Generated message ID: ${E} for session: ${d}`);try{await this.eventHandler.sendSessionUpdate(d,m,{message:`Processing: "${g.slice(0,50)}${g.length>50?"...":""}"`,isStatus:!0},h,E);let b=this.sessions.get(d);if(b){let R=this.eventHandler.getClientId();if(R){let L={sessionId:d,clientId:R,cwd:process.cwd(),cliClientType:"cue",messageCount:b.conversationHistory.getLegacyMessagesForAPI().length,createdAt:b.createdAt.toISOString(),lastActivityAt:b.lastActivityAt.toISOString()};await this.eventHandler.sendSessionStart(d,m,L,!0)}}else{b={sessionId:d,conversationHistory:new op,createdAt:new Date,lastActivityAt:new Date,clientId:m},this.sessions.set(d,b),T.info(`\u{1F4C1} Created new session: ${d}`);let R=this.eventHandler.getClientId();if(R){let L={sessionId:d,clientId:R,cwd:process.cwd(),cliClientType:"cue",messageCount:0,createdAt:new Date().toISOString()};await this.eventHandler.sendSessionStart(d,m,L,!1)}}b.lastActivityAt=new Date,b.conversationHistory.addUserMessage(g);let D=await this.getAIService(i);if(!D)throw new Error("No AI service available. Please configure API keys.");await this.eventHandler.sendSessionUpdate(d,m,{message:"Generating response...",isStatus:!0},h,E);let S=async R=>{T.debug(`onProgress called, message length: ${R.length}`),await this.eventHandler.sendSessionUpdate(d,m,{messageChunk:R,role:"assistant",isComplete:!1},h,E)},x=b.conversationHistory.getLegacyMessagesForAPI(),w=await D.sendMessageWithTools(g,x,S);b.conversationHistory.addAssistantMessage(w.content);let F={sessionId:d,message:w.content,tokenUsage:w.usage?{input:w.usage.input_tokens,output:w.usage.output_tokens,total:(w.usage.input_tokens||0)+(w.usage.output_tokens||0)}:void 0};await this.eventHandler.sendSessionStop(d,m,F,h,E),T.info(`Cue CLI response sent for session: ${d}`)}catch(b){let D=b instanceof Error?b.message:String(b);T.error(`\u274C Cue CLI execution failed: ${D}`);let S=D;try{let w=JSON.parse(D);w.error?.message&&(S=w.error.message,w.error.type==="overloaded_error"?S="\u26A0\uFE0F Service is currently overloaded. Please try again in a moment.":w.error.type==="rate_limit_error"?S="\u23F1\uFE0F Rate limit exceeded. Please wait a moment before trying again.":w.error.type==="invalid_request_error"&&(S=`\u274C Invalid request: ${w.error.message}`))}catch{D.includes("overloaded")||D.includes("Overloaded")?S="\u26A0\uFE0F Service is currently overloaded. Please try again in a moment.":D.includes("rate")&&D.includes("limit")?S="\u23F1\uFE0F Rate limit exceeded. Please wait a moment before trying again.":D.includes("API key")||D.includes("authentication")?S="\u{1F511} Authentication error. Please check your API key configuration.":D.includes("network")||D.includes("ECONNREFUSED")?S="\u{1F310} Network error. Please check your internet connection.":S=`\u274C Error: ${D.substring(0,200)}${D.length>200?"...":""}`}await this.eventHandler.sendSessionUpdate(d,m,{messageChunk:S,role:"assistant",isComplete:!1},h,E);let x={sessionId:d,message:S};await this.eventHandler.sendSessionStop(d,m,x,h,E)}}async handleClearSession(e){let{session_id:n}=e.payload?.parameters||{},a=e.client_id||"unknown",i=this.sessions.get(n);i&&(i.conversationHistory=new op,i.lastActivityAt=new Date,T.info(`Cleared session: ${n}`),n&&await this.eventHandler.sendResponse(n,a,"Session cleared. Starting fresh conversation.",e.websocket_request_id))}async handleDeleteSession(e){let{session_id:n}=e.payload?.parameters||{},a=e.client_id||"unknown";n&&this.sessions.delete(n)&&(T.info(`\u{1F5D1}\uFE0F Deleted session: ${n}`),await this.eventHandler.sendResponse(n,a,"Session deleted.",e.websocket_request_id))}async getAIService(e){let n=e.provider||zs(),a=e.model||Nu();if(n==="openai"){let i=this.authService.getOpenAIApiKey()||process.env.OPENAI_API_KEY;return i?G4({apiKey:i,model:a9(a)}):null}else if(n==="cue"&&this.authService.hasCueApiKey()){let i=this.authService.getCueApiKey(),r=this.authService.getBaseUrl(),l=this.authService.getAnthropicApiKey();return i?Zf({apiKey:l||void 0,proxy:{baseUrl:r,apiKey:i}}):null}else{let i=this.authService.getAnthropicApiKey();return i?Zf({apiKey:i}):null}}getSessionInfo(e){return this.sessions.get(e)}getAllSessions(){return Array.from(this.sessions.values())}clearInactiveSessions(e=30){let n=new Date,a=e*60*1e3;for(let[i,r]of this.sessions)n.getTime()-r.lastActivityAt.getTime()>a&&(this.sessions.delete(i),T.info(`Cleaned up inactive session: ${i}`))}},zP=null});import{randomUUID as Jle}from"crypto";import*as Cx from"os";import*as bx from"fs";function Yle(){return HP||(HP=new GP),HP}var GP,HP,Zle=_(()=>{"use strict";On();On();On();$P();GP=class{wsClient=null;handlers=new Map;claudeService=null;isInitialized=!1;constructor(){this.initializeHandlers()}initializeHandlers(){this.handlers.set(Yc.CUE,{handleRun:this.handleCueRun.bind(this),handleStop:this.handleCueStop.bind(this),handleReset:this.handleCueReset.bind(this)}),this.handlers.set(Yc.CLAUDE_CODE,{handleRun:this.handleClaudeCodeRun.bind(this),handleStop:this.handleClaudeCodeStop.bind(this),handleReset:this.handleClaudeCodeReset.bind(this)})}setWebSocketClient(e){this.wsClient=e,this.setupMessageHandler(),T.debug("AgentControlRouter WebSocket configured")}setupMessageHandler(){this.wsClient&&(this.wsClient.on(Sn.AGENT_CONTROL,this.handleAgentControl.bind(this)),this.wsClient.on(Sn.SESSION_DISCOVERY,this.handleSessionDiscovery.bind(this)),this.wsClient.on(Sn.SESSION_HISTORY,this.handleSessionHistory.bind(this)),T.debug("AgentControlRouter message handlers registered (agent_control, session_discovery, session_history)"))}async handleAgentControl(e){let n=e.payload,{control_type:a,parameters:i}=n||{};if(!a||!i){T.error("Invalid agent_control message: missing control_type or parameters");return}let{cli_client_type:r}=i;if(!r){T.error("No cli_client_type specified in agent_control message");return}if(T.info(`AgentControlRouter: ${a} for ${r}`,{session_id:i.session_id,from:e.client_id}),!this.isMessageForUs(e)){T.debug("Message not for us, skipping");return}let l=this.handlers.get(r);if(!l){T.error(`No handler registered for cli_client_type: ${r}`),await this.sendErrorResponse(e,`Unsupported CLI client type: ${r}`);return}try{switch(a){case JE.RUN:await l.handleRun(e,n);break;case JE.STOP:await l.handleStop(e,n);break;case JE.RESET:await l.handleReset(e,n);break;default:T.error(`Unknown control_type: ${a}`),await this.sendErrorResponse(e,`Unknown control type: ${a}`)}}catch(d){T.error(`Error handling ${a} for ${r}:`,{error:d}),await this.sendErrorResponse(e,d instanceof Error?d.message:String(d))}}isMessageForUs(e){let n=e.payload?.target_client_id||e.payload?.recipient,a=this.wsClient?.config.clientId;return!n||n==="all"||n===a}async handleCueRun(e,n){let a=O9(),i={...e,payload:{...e.payload,parameters:{message:n.parameters.message||n.parameters.prompt,session_id:n.parameters.session_id||Jle(),cwd:n.parameters.cwd,model:n.parameters.model,provider:n.parameters.provider}}};await a.handleCueCLIExecute(i)}async handleCueStop(e,n){T.info(`Cue CLI stop requested for session: ${n.parameters.session_id}`)}async handleCueReset(e,n){let a=O9(),i={...e,payload:{...e.payload,parameters:{session_id:n.parameters.session_id}}};await a.handleClearSession(i)}async handleClaudeCodeRun(e,n){let{parameters:a}=n,i=e.client_id,r=e.websocket_request_id,l=a.prompt||a.message,d=a.session_id;if(!l){T.error("No prompt provided for Claude Code"),await this.sendErrorResponse(e,"No prompt provided");return}let m=a.cwd||process.cwd();try{this.claudeService||(this.claudeService=new e1,await this.claudeService.initialize());let h=!d||d.startsWith("TEMP-SESSION"),g=d||Jle();h?T.info("CREATING NEW SESSION",{providedSessionId:d,newSessionId:g,reason:d?"Temp session ID provided":"No session ID provided"}):T.info("USING EXISTING SESSION ID (new Claude Code session)",{sessionId:d,note:"Claude Code will create new session, JSONL sessions are logs only"});let E={sessionId:g,clientId:this.wsClient?.config.clientId||"unknown",cwd:m,cliClientType:"claude_code",messageCount:0},b={session_id:E.sessionId,client_id:E.clientId,cwd:E.cwd,cli_client_type:E.cliClientType,message_count:E.messageCount,created_at:E.createdAt,last_activity_at:E.lastActivityAt,initial_message:E.initialMessage,last_activity_message:E.lastActivityMessage};if(await this.sendSessionStart(E.sessionId,i,b,!1),m==="~"||m.startsWith("~/")){let S=Cx.homedir();m=m==="~"?S:m.replace("~",S)}try{(!bx.existsSync(m)||!bx.statSync(m).isDirectory())&&(m=Cx.homedir()||process.cwd(),T.info(`Using fallback working directory: ${m}`))}catch{m=Cx.homedir()||process.cwd()}await this.sendSessionUpdate(E.sessionId,i,{message:"Executing Claude Code command",isStatus:!0},r),T.info("PASSING TO CLAUDE CODE:",{sessionId:E.sessionId,cwd:m,promptLength:l.length});let D=await this.claudeService.execute({prompt:l,cwd:m,sessionId:E.sessionId});T.info("CLAUDE CODE RESPONSE:",{requestedSessionId:E.sessionId,responseSessionId:D.sessionId,sessionMatch:D.sessionId===E.sessionId,result:D.result?.substring(0,100),error:D.error}),await this.sendSessionUpdate(E.sessionId,i,{message:D.result||D.error||"Claude Code execution completed",role:"assistant",isComplete:!1},r),await this.sendSessionStop(E.sessionId,i,{message:D.result||D.error||"Claude Code execution completed"},r)}catch(h){let g=h instanceof Error?h.message:String(h);T.error("Failed to execute Claude Code:",{error:g}),await this.sendErrorResponse(e,g)}}async handleClaudeCodeStop(e,n){T.info(`Claude Code stop requested for session: ${n.parameters.session_id}`)}async handleClaudeCodeReset(e,n){T.info(`Claude Code reset requested for session: ${n.parameters.session_id}`)}async handleSessionDiscovery(e){let n=e.payload;if(n?.action==="request"){T.debug("Received session discovery request from:",{clientId:e.client_id});try{let{SessionDiscoveryService:a,getProjectsPathForClientType:i,CLI_CLIENT_TYPES:r}=await Promise.resolve().then(()=>(On(),Rh)),l=n.cli_client_type||r.CLAUDE_CODE,d=i(l);T.debug("Session discovery using client type:",{clientType:l,projectsPath:d,requestedType:n.cli_client_type});let h=await new a(d).discoverSessions(n.limit||50,this.wsClient?.config.clientId);if(T.debug("Found local sessions:",{count:h.length}),!this.wsClient){T.error("WebSocket client not available for session discovery response");return}let g=h.map(b=>rs(b)),E=e.client_id;T.debug("Preparing session discovery response",{recipientId:E,ourClientId:this.wsClient.config.clientId,requestId:e.websocket_request_id,sessionsCount:g.length}),await this.wsClient.send({type:"session_discovery",payload:{action:"response",client_id:this.wsClient.config.clientId,sessions:g,sender:this.wsClient.config.clientId,target_client_id:E},websocket_request_id:e.websocket_request_id}),T.debug("Session discovery response sent successfully",{recipientId:E,requestId:e.websocket_request_id,sessionsCount:g.length}),T.debug("Sent session discovery response",{sessionCount:h.length})}catch(a){T.error("Error handling session discovery request:",{error:a})}}}async handleSessionHistory(e){let n=e.payload;if(n?.action==="request"){let a=n.session_id,i=n.limit||20,r=n.offset||0;T.debug("Received session history request",{sessionId:a,limit:i,offset:r,clientId:e.client_id});try{let{SessionDiscoveryService:l,getProjectsPathForClientType:d,CLI_CLIENT_TYPES:m}=await Promise.resolve().then(()=>(On(),Rh)),h=n.cli_client_type||m.CLAUDE_CODE,g=d(h);T.debug("Session history using client type:",{clientType:h,projectsPath:g,sessionId:a,requestedType:n.cli_client_type});let b=await new l(g).getSessionHistory(a,i,r);if(T.debug("Found session history messages",{sessionId:a,count:b.length}),!this.wsClient){T.error("WebSocket client not available for session history response");return}let D=e.client_id;T.debug("Preparing session history response",{recipientId:D,sessionId:a,ourClientId:this.wsClient.config.clientId,requestId:e.websocket_request_id,messagesCount:b.length}),await this.wsClient.send({type:"session_history",payload:{action:"response",session_id:a,client_id:this.wsClient.config.clientId,messages:b,limit:i,offset:r,sender:this.wsClient.config.clientId,target_client_id:D},websocket_request_id:e.websocket_request_id}),T.debug("Session history response sent successfully",{recipientId:D,sessionId:a,requestId:e.websocket_request_id,messagesCount:b.length})}catch(l){T.error("Error handling session history request:",{error:l,sessionId:a})}}}async sendSessionStart(e,n,a,i,r){if(!this.wsClient)return;T.debug("sendSessionStart called with:",{sessionId:e,eventType:Jc.START,data:{sessionInfo:a,isResume:i}});let l=Jc.START,h=qd(e,l,{sessionInfo:a,isResume:i},{targetClientId:n,websocketRequestId:r});T.debug("createSessionEvent returned:",{event:h}),await this.wsClient.send(h)}async sendSessionUpdate(e,n,a,i){this.wsClient&&await this.wsClient.send(qd(e,Jc.UPDATE,{sessionId:e,...a},{targetClientId:n,websocketRequestId:i}))}async sendSessionStop(e,n,a,i){this.wsClient&&await this.wsClient.send(qd(e,Jc.STOP,{sessionId:e,...a},{targetClientId:n,websocketRequestId:i}))}async sendErrorResponse(e,n){if(!this.wsClient)return;let a=e.client_id,i=e.websocket_request_id,r=e.payload?.parameters?.session_id||"unknown";await this.sendSessionUpdate(r,a,{message:n,role:"assistant",isComplete:!0},i)}},HP=null});function Ix({authService:t}){(0,Xle.useEffect)(()=>{let e=()=>{let i=t.getWebSocketClient();return i?(Wle||(Yle().setWebSocketClient(i),Wle=!0,T.info("AgentControlRouter initialized and connected to WebSocket")),!0):((t.hasCueApiKey()||t.hasAccessToken())&&T.debug("WebSocket client not yet available for AgentControlRouter"),!1)},n=e(),a=null;return n||(t.hasCueApiKey()||t.hasAccessToken())&&(a=setInterval(()=>{e()&&(T.info("WebSocket became available, router initialized"),a&&(clearInterval(a),a=null))},1e3)),()=>{a&&clearInterval(a)}},[t])}var Xle,Wle,qP=_(()=>{"use strict";Xle=be(vt(),1);On();Zle();Wle=!1});function vCe(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){let e=Math.random()*16|0;return(t==="x"?e:e&3|8).toString(16)})}function eue({resumeSessionId:t,clientId:e}={}){let[n]=(0,ro.useState)(()=>(KP||(KP=t||vCe()),KP)),[a]=(0,ro.useState)(()=>(VP||(VP=e||Ru()),VP)),[i,r]=(0,ro.useState)(0);(0,ro.useEffect)(()=>{if(R6()){let z=Lle(n,a);return by(async $=>{await z.logUsage({eventType:$.eventType,messageId:$.messageId,apiCall:$.apiCall,error:$.error})}),z.logSessionStart().catch($=>console.error("Failed to log session start:",$)),()=>{by(null),z.logSessionEnd().catch($=>console.error("Failed to log session end:",$))}}},[n,a]);let[l]=(0,ro.useState)(()=>new op),[d]=(0,ro.useState)(()=>i6({})),m=Ple({sessionId:n,clientId:a,resumeSessionId:t}),h=(0,ro.useCallback)(z=>{m.actions.addMessage(z)},[m.actions]),g=jle({authService:d,clientId:a,onConnectionMessage:h}),E=Hle(),b=qle({authService:d,clientId:a,onMessage:m.actions.addMessage,onHideInput:()=>E.actions.setShowApiKeyInput(!1)}),D=Ix({authService:d}),S=(0,ro.useCallback)(async(z,$)=>{E.actions.setShowLoginInput(!1),E.actions.startLoading("Signing in...");try{let H=await d.login(z,$);if(H.success){try{if(d.hasAccessToken()||d.hasCueApiKey()){let J=d.getWebSocketClient();J&&(T.debug("Closing existing WebSocket before reconnecting"),J.close()),await d.connectWebSocket(),T.debug("WebSocket reconnected after login")}else T.debug("No authentication available after login, skipping WebSocket connection")}catch(J){T.debug("WebSocket reconnection failed (non-critical):",{error:J})}let ne=H.user;m.actions.addMessage({role:"assistant",content:`${H.message}
|
|
620
620
|
|
|
621
621
|
Welcome back, ${ne?.email||"user"}!${ne?.name?` (${ne.name})`:""}
|
|
622
622
|
|
package/package.json
CHANGED
package/cue-v0.0.24.tar.gz
DELETED
|
Binary file
|