shennian 0.3.76 → 0.3.78
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
import a from"node:fs";import h from"node:os";import s from"node:path";import{resolveProtectedShennianDirectories as y}from"../security/managed-agent-credential-paths.js";const i="shennian-managed",E={".env":"deny",".env.*":"deny","**/.env":"deny","**/.env.*":"deny","*.key":"deny","**/*.key":"deny","*.pem":"deny","**/*.pem":"deny",".ssh":"deny","**/.ssh":"deny",".aws":"deny","**/.aws":"deny",".azure":"deny","**/.azure":"deny",".config/gcloud":"deny","**/.config/gcloud":"deny"},l=e=>({commandNetwork:{allow:e,deny:!0},webSearch:{allow:e,deny:!0},browser:{allow:e,deny:!0},computerUse:{allow:e,deny:!0},mcp:{allow:e,deny:!0}}),I={minimumRuntimeVersion:"0.138.0",maximumRuntimeVersionExclusive:"0.
|
|
1
|
+
import a from"node:fs";import h from"node:os";import s from"node:path";import{resolveProtectedShennianDirectories as y}from"../security/managed-agent-credential-paths.js";const i="shennian-managed",E={".env":"deny",".env.*":"deny","**/.env":"deny","**/.env.*":"deny","*.key":"deny","**/*.key":"deny","*.pem":"deny","**/*.pem":"deny",".ssh":"deny","**/.ssh":"deny",".aws":"deny","**/.aws":"deny",".azure":"deny","**/.azure":"deny",".config/gcloud":"deny","**/.config/gcloud":"deny"},l=e=>({commandNetwork:{allow:e,deny:!0},webSearch:{allow:e,deny:!0},browser:{allow:e,deny:!0},computerUse:{allow:e,deny:!0},mcp:{allow:e,deny:!0}}),I={minimumRuntimeVersion:"0.138.0",maximumRuntimeVersionExclusive:"0.154.0",platforms:{darwin:{level:"hard",fileAccess:{"workspace-read":!0,"workspace-write":!0,"host-full":!0},externalCapabilities:l(!0)},linux:{level:"hard",fileAccess:{"workspace-read":!0,"workspace-write":!0,"host-full":!0},externalCapabilities:l(!0)},win32:{level:"partial",fileAccess:{"workspace-read":!1,"workspace-write":!1,"host-full":!1},externalCapabilities:l(!0),knownGaps:["sandbox.nativeWindowsReadIsolationUnavailable"]}}};function M(e,n,r={}){const t=O(n),o=e.effectivePolicy,m=g(x(e.platform)),f=o.fileAccess==="workspace-write"?"write":"read",c=o.fileAccess==="workspace-read"?":read-only":o.fileAccess==="workspace-write"?":workspace":null,_={":root":o.fileAccess==="host-full"?"write":"deny",...o.fileAccess==="host-full"?{}:{":minimal":"read",":tmpdir":"deny",":slash_tmp":"deny",...Object.fromEntries(m.map(w=>[w,"read"]))},...b(),glob_scan_max_depth:8,":workspace_roots":{".":o.fileAccess==="host-full"?"write":f,...E}},d=o.externalCapabilities.commandNetwork,p={enabled:!0,domains:d?{"*":"allow"}:{},unix_sockets:{},allow_local_binding:d,dangerously_allow_all_unix_sockets:!1};return{profileId:i,threadConfig:{default_permissions:i,permissions:{[i]:{description:"Shennian managed Agent permissions",...c?{extends:c}:{},workspace_roots:{[t]:!0},filesystem:_,network:p}},web_search:o.externalCapabilities.webSearch?"live":"disabled",features:v(o.externalCapabilities),allow_login_shell:!1,shell_environment_policy:A(r.shellSubprocessPolicy),...P(o.externalCapabilities.mcp,r.configuredMcpServerNames),...e.platform==="win32"?{windows:{sandbox:"elevated"}}:{}}}}function x(e){return e==="darwin"&&a.existsSync("/System/Library/OpenSSL")?["/System/Library/OpenSSL"]:[]}function b(){const e=s.normalize(h.homedir()),n=[...y(),...e&&s.isAbsolute(e)?[".shennian",".ssh",".aws",".azure",s.join(".config","gcloud"),".netrc",".npmrc"].map(r=>s.join(e,r)):[]].filter(r=>r&&s.isAbsolute(r));return Object.fromEntries([...new Set(n)].map(r=>[r,"deny"]))}function A(e){const n=[...new Set(e?.allowedEnvKeys??["PATH","HOME","USERPROFILE","LANG","LC_ALL","LC_CTYPE","TMPDIR","TMP","TEMP"])].filter(u).filter(t=>!S.has(t)).sort(),r=[...new Set(e?.deniedEnvKeys??["OPENAI_BASE_URL","OPENAI_API_KEY"])].filter(u).sort();return{inherit:"all",experimental_use_profile:!1,ignore_default_excludes:!0,filters:{...Object.fromEntries(n.map(t=>[t,"include"])),...Object.fromEntries(r.map(t=>[t,"exclude"]))}}}const S=new Set(["SHENNIAN_MANAGED_ROOM_CONTEXT","SHENNIAN_MANAGED_ROOM_IPC_ROOT"]);function u(e){return/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)}function D(e){if(!e||typeof e!="object")throw new Error("codex_managed_config_read_invalid");const n=e.config;if(!n||typeof n!="object"||Array.isArray(n))throw new Error("codex_managed_config_read_invalid");const r=n.mcp_servers;if(r===void 0)return[];if(!r||typeof r!="object"||Array.isArray(r))throw new Error("codex_managed_config_read_invalid");return Object.keys(r).sort()}function j(e,n=i){if((e&&typeof e=="object"?e.activePermissionProfile:void 0)?.id!==n)throw new Error("codex_managed_permission_profile_unavailable")}function v(e){return{network_proxy:!0,apps:e.mcp,plugins:e.mcp,hooks:e.mcp,request_permissions_tool:!1,browser_use:e.browser,browser_use_external:e.browser,browser_use_full_cdp_access:!1,computer_use:e.computerUse}}function P(e,n){if(e)return{};const r=[...new Set(n??[])].filter(Boolean).sort();return r.length?{mcp_servers:Object.fromEntries(r.map(t=>[t,{enabled:!1}]))}:{}}function O(e){const n=s.normalize(e.trim());if(!n||!s.isAbsolute(n))throw new Error("codex_managed_workdir_invalid");let r;try{r=a.realpathSync(n)}catch{throw new Error("codex_managed_workdir_unavailable")}if(s.normalize(r)!==n)throw new Error("codex_managed_workdir_not_realpath");return n}function g(e){const n=[...new Set(e??[])].map(r=>s.normalize(r.trim())).filter(r=>r&&s.isAbsolute(r)).flatMap(r=>{try{const t=a.realpathSync(r);return t===r?[r]:[r,t]}catch{try{const t=a.realpathSync(s.dirname(r)),o=s.join(t,s.basename(r));return o===r?[r]:[r,o]}catch{return[r]}}});return[...new Set(n)].sort()}export{i as CODEX_MANAGED_PERMISSION_PROFILE_ID,I as CODEX_MANAGED_RUNTIME_SECURITY,j as assertCodexManagedPermissionProfile,M as compileCodexManagedPermissions,D as extractCodexMcpServerNames};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import re from"node:os";import{createHash as V}from"node:crypto";import{createAgent as Ae}from"../../agents/adapter.js";import{buildApprovalPendingPayload as ke,buildUserMessagePayload as oe}from"@shennian/wire";import{ManagerModeAdapter as we}from"../../agents/manager.js";import{reportLog as D}from"../../log-reporter.js";import{lookupClaudeTranscriptCwd as Ee}from"../../native-fusion/parsers.js";import{appendMessage as b,getDaemonInstallationId as se,getMessageDeliveryStatus as xe,recordSession as N,upsertMessage as F}from"../store.js";import{mergeProjectedSessions as Te}from"../projection.js";import{buildManagedAgentEnv as Me}from"../../agents/config-status.js";import{parsePersonalAttachmentReferences as _e}from"../attachment-reference.js";import{assertFinishedAttachmentReferences as De,markAttachmentReferences as be}from"../attachment-transfer-store.js";import{requestSessionIndexPublish as x}from"../index-publisher.js";import{writeToolDetail as qe}from"../tool-detail-store.js";import{getPersonalSyncIdentity as de}from"../../personal-sync/epoch.js";import{getManagedRoomIpcRoot as $e,MANAGED_ROOM_IPC_ROOT_ENV as Pe}from"../../daemon-ipc/paths.js";function Ce(e,t,a){if(!e.managedAgentPolicy)throw new Error("managed_agent_policy_missing");const s=e.managedRoomPromptSnapshot;if(!s)throw new Error("managed_room_prompt_snapshot_missing");if(!t?.trim())throw new Error("managed_room_prompt_incomplete");if(!a||!/^mrc_[A-Za-z0-9_-]{43}$/.test(a))throw new Error("managed_room_context_unavailable");const r=V("sha256").update(JSON.stringify({requestedPolicy:e.managedAgentPolicy.requestedPolicy,enforcement:e.managedAgentPolicy.enforcement})).digest("hex"),l=V("sha256").update(e.managedAgentPolicy.adapterPolicy.workDir).digest("hex");if(s.runtimePermissionPolicyHash!==r||s.resolvedWorkDirHash!==l||s.enforcementLevel!==e.managedAgentPolicy.enforcement.level)throw new Error("managed_room_prompt_snapshot_mismatch")}function ve(e){const t=e.indexOf(`
|
|
2
|
-
`),a=t>0?Math.min(t,80):Math.min(e.length,80);return e.slice(0,a)}function ie(e,t,a){return`${e}:${V("sha256").update(`${t}\0${a??""}`).digest("hex")}`}function Oe(e,t,a={}){if(e.state==="tool-call"||e.state==="tool-result"){const s={runId:e.runId,sourceSeq:e.seq};return{state:e.state,runId:e.runId,seq:e.seq,sessionId:t,detailRef:s,status:e.state==="tool-call"?"running":"completed",detailAvailable:!0,...e.durationMs!==void 0?{durationMs:e.durationMs}:{},...e.name?{name:e.name}:{},...e.source?{source:e.source}:{},...e.agentSessionId?{agentSessionId:e.agentSessionId}:{},...a}}return{...e,sessionId:t,...a}}const We=3e4;function Ne(e){return e.state==="heartbeat"?e.runPhase??null:e.state==="tool-call"||e.state==="tool-result"?"tool_running":e.state==="approval-pending"?"waiting_approval":e.state==="delta"?e.thinking?"thinking":"streaming_text":e.state==="init"||e.state==="start"?"thinking":null}function le(e,t){return`Agent send failed: ${t instanceof Error?t.message:String(t)}`}function ce(e,t){return e!=="manager"?e:t==="claude"?"claude":"codex"}function Fe(e,t){N({sessionId:t.sessionId,agentType:t.agentType,sessionMode:t.sessionMode,managerConfig:t.managerConfig,workDir:t.workDir,agentSessionId:t.agentSessionId??null,modelId:t.modelId??null,managerDefaultWorkerAgentType:t.managerDefaultWorkerAgentType,managerDefaultWorkerModelId:t.managerDefaultWorkerModelId}),e.client.sendEvent({type:"event",event:"session.update",payload:{session:{id:t.sessionId,agentType:t.agentType,sessionMode:t.sessionMode,managerConfig:t.managerConfig,agentSessionId:t.agentSessionId??null,modelId:t.modelId??null,workDir:t.workDir,status:"active",externalChannel:null}}})}function ue(e){return Me(e)}function ge(e,t,a){return{}}function j(e,t,a,s,r,l,c,h){const S=a==="codex";e.configure?.({sessionId:t,externalChannel:s??null,env:{...ue(a),...ge(t,s,r),...l&&!S?{SHENNIAN_MANAGED_ROOM_CONTEXT:l,[Pe]:$e()}:{}},...c?{managedAgentPolicy:c}:{},...S?{managedRoomContextToken:l??null,managedRoomExecutor:h??null}:{}})}function fe(e,t,a){const s=t.managedRoomContextToken;s&&s!==a&&e.revokeManagedRoomContextToken?.(s),t.managedRoomContextToken=a}function P(e,t){const a=t?.managedRoomContextToken;!t||!a||(t.managedRoomContextToken=null,e.revokeManagedRoomContextToken?.(a))}function He(e,t,a){if(e!=="claude"||!a)return t;const s=t.trim();return!!s&&s.startsWith("-")&&!s.includes("/")?Ee(a)??t:t}function ze(e,t,a,s){let r=null;function l(n,o={}){e.client.sendAgentEvent({type:"event",event:"agent",payload:Oe(n,t,o),seq:n.seq,id:`agent-evt-${n.runId}-${n.seq}`})}function c(n){n?.heartbeatTimer&&(clearInterval(n.heartbeatTimer),n.heartbeatTimer=null)}function h(n){if(!n.currentRunId||!n.currentRunPhase)return;const o=n.heartbeatSeq++;e.client.sendAgentEvent({type:"event",event:"agent",payload:{state:"heartbeat",sessionId:t,runId:n.currentRunId,seq:o,runPhase:n.currentRunPhase},seq:o,id:`agent-heartbeat-${n.currentRunId}-${o}-${Date.now()}`})}function S(n){!n||n.heartbeatTimer||(n.heartbeatTimer=setInterval(()=>{h(n)},We),n.heartbeatTimer.unref?.())}function y(n){const o=n?.pendingTextEvent;!n||!o||!o.text||(b(t,{id:`agent-${o.runId}-${o.seq}`,sessionId:t,role:"agent",ts:Date.now(),payload:o.text}),x(e.client),l({state:"delta",runId:o.runId,seq:o.seq,text:o.text,thinking:o.thinking||void 0}),n.pendingTextEvent=null)}s.on("agentEvent",n=>{const o=e.sessions.get(t),T=Ne(n),M=n.state==="final"||n.state==="error"||n.state==="aborted";if(o&&(o.nextEventSeq=n.seq+1,M||(o.currentRunId=n.runId),!M&&T&&(o.currentRunPhase=T,S(o)),n.agentSessionId&&(o.agentSessionId=n.agentSessionId)),e.managerRuntime?.noteAgentEvent(t,n),n.state==="delta"&&n.thinking)return;n.state!=="delta"&&D({level:"info",sessionId:t,wsEvent:`agent.${n.state}`,wsDirection:"out",metadata:{runId:n.runId,seq:n.seq,agentType:a}});let k=!1;if(n.state==="tool-call"||n.state==="tool-result"){const m=`agent-${n.runId}-${n.seq}`;qe({sessionId:t,toolCallId:m,detailRevision:n.seq,ts:Date.now(),name:n.name??"tool",...n.args!==void 0?{args:n.args}:{},...n.result!==void 0?{result:n.result}:{},status:n.state==="tool-call"?"running":"completed",...n.durationMs!==void 0?{durationMs:n.durationMs}:{},detailRef:{runId:n.runId,sourceSeq:n.seq}}),b(t,{id:m,sessionId:t,role:"agent",ts:Date.now(),payload:JSON.stringify({v:1,type:n.state==="tool-call"?"tool_use":"tool_result",name:n.name,toolCallId:m,status:n.state==="tool-call"?"running":"completed",...n.durationMs!==void 0?{durationMs:n.durationMs}:{},detailRef:{runId:n.runId,sourceSeq:n.seq},detailRevision:n.seq,detailAvailable:!0,resultOmitted:n.state==="tool-result"})}),k=!0}else n.state==="approval-pending"?(b(t,{id:`agent-${n.runId||"run"}-${n.seq}`,sessionId:t,role:"agent",ts:Date.now(),payload:ke(n.approval)}),k=!0,o&&N({sessionId:t,agentType:a,workDir:o.workDir,agentSessionId:o.agentSessionId,attentionId:ie("approval",n.runId,n.seq)})):(n.state==="error"||n.state==="aborted")&&n.message&&(b(t,{id:`agent-${n.runId||"run"}-${n.seq}`,sessionId:t,role:"agent",ts:Date.now(),payload:n.message}),k=!0);k&&x(e.client);const A=`${t}:${n.runId}`;if(n.state==="delta"&&!n.thinking&&n.text&&e.runTextAcc.set(A,(e.runTextAcc.get(A)??"")+n.text),n.agentSessionId&&n.agentSessionId!==r&&(r=n.agentSessionId,e.nativeFusion?.noteManagedSourceSession(t,ce(a,n.source),n.agentSessionId),o&&N({sessionId:t,agentType:a,workDir:o.workDir,agentSessionId:n.agentSessionId}),e.client.sendEvent({type:"event",event:"session.update",payload:{session:{id:t,agentType:a,agentSessionId:n.agentSessionId}}})),n.state==="delta"){const m=n.text??"";if(!m)return;o?.pendingTextEvent&&o.pendingTextEvent.runId!==n.runId&&y(o),o&&!o.pendingTextEvent&&(o.pendingTextEvent={runId:n.runId,seq:n.seq,text:"",thinking:!1}),o?.pendingTextEvent&&(o.pendingTextEvent.text+=m,o.pendingTextEvent.seq=n.seq);return}let C={};if(n.state==="final"){y(o);const m=e.runTextAcc.get(A)??"";m&&(C={messageSummary:ve(m)}),e.runTextAcc.delete(A)}else n.state==="error"||n.state==="aborted"?(y(o),e.runTextAcc.delete(A)):(n.state==="tool-call"||n.state==="tool-result"||n.state==="approval-pending")&&y(o);M&&o?.currentRunId===n.runId&&(P(e,o),o.currentRunId=null,o.currentRunPhase=null,o.nextEventSeq=0,c(o),e.chatQueue?.noteTerminal(t),N({sessionId:t,agentType:a,workDir:o.workDir,agentSessionId:o.agentSessionId,status:n.state==="final"?"completed":"failed",attentionId:ie("terminal",n.runId),lastActivityAt:new Date().toISOString()}),x(e.client)),l(n,C)}),s.on("error",n=>{console.error(`[chat.send] adapter error sessionId=${t} agentType=${a}: ${n.message}`),P(e,e.sessions.get(t)),e.sessions.delete(t),e.chatQueue?.noteTerminal(t),e.client.sendEvent({type:"event",event:"agent",payload:{state:"error",sessionId:t,message:n.message,runId:"",seq:0}})})}function Be(e,t){if(e.processedReqIds.add(t),e.processedReqIds.size>1e3){const a=e.processedReqIds.values().next().value;e.processedReqIds.delete(a)}}async function H(e,t){P(e,t),t.heartbeatTimer&&(clearInterval(t.heartbeatTimer),t.heartbeatTimer=null),t.adapter.removeAllListeners(),await t.adapter.stop().catch(()=>{})}function me(e,t,a,s,r,l,c){return c?e.send(t,a,s,r,l,c):l?.trim()?e.send(t,a,s,r,l):r?.length?e.send(t,a,s,r):s?e.send(t,a,s):e.send(t,a)}function Le(e,t,a,s,r,l,c){return e.prepareSend?e.prepareSend(t,a,s,r,l,c):Promise.resolve()}async function Ue(e,t,a,s,r,l,c,h,S){e.evictIdleSessions();const y=Ae(a);if(!y)throw new Error(`Unsupported agent: ${a}`);const n=s==="manager"&&a!=="manager"?new we(y,a==="claude"?"claude":"codex"):y;j(n,t,a,c,h,null,S,e.managedRoomExecutor),await n.start(t,r,l);const o={adapter:n,workDir:r,agentType:a,sessionMode:s,agentSessionId:l??null,lastActiveAt:Date.now(),currentRunId:null,currentRunPhase:null,nextEventSeq:0,heartbeatSeq:0,heartbeatTimer:null,pendingTextEvent:null,externalChannel:c??null,externalReplyTarget:h??null,externalChannelEnv:{...ue(a),...ge(t,c,h)},managedRoomContextToken:null};return e.sessions.set(t,o),ze(e,t,a,n),o}function Je(e,t){const a=e.sessions.get(t),s=a?.currentRunId;if(!a||!s)return;const r=a.nextEventSeq;e.runTextAcc.delete(`${t}:${s}`),P(e,a),a.pendingTextEvent=null,a.currentRunId=null,a.currentRunPhase=null,a.nextEventSeq=0,a.heartbeatTimer&&(clearInterval(a.heartbeatTimer),a.heartbeatTimer=null),e.client.sendAgentEvent({type:"event",event:"agent",payload:{state:"aborted",sessionId:t,runId:s,seq:r},seq:r,id:`agent-evt-${s}-${r}`}),e.chatQueue?.noteTerminal(t)}async function ct(e,t,a){const s=a?t.params.managedRoomContextToken??null:null;let r=!1;try{await Qe(e,t,a,()=>{r=!0})}finally{s&&!r&&e.revokeManagedRoomContextToken?.(s)}}async function Qe(e,t,a,s){if(e.processedReqIds.has(t.id)){e.client.sendRes({type:"res",id:t.id,ok:!0});return}const{sessionId:r,text:l,agentType:c,sessionMode:h,managerConfig:S,workDir:y,agentSessionId:n,modelId:o,systemPrompt:T,managerDefaultWorkerAgentType:M,managerDefaultWorkerModelId:k,reasoningEffort:A,clientMessageId:C,sessionListProjection:m,waitForDispatch:G,responseId:pe,managedRoomContextToken:q,suppressExternalOwnerEcho:he,queuedBatchItems:z}=t.params,I=pe||t.id;Te(m);const v=null,B="";if(a?.source==="room_activation"&&(Ce(a,T,q),c==="manager"||h!=="standard"))throw new Error("managed_agent_manager_mode_unsupported");if(Be(e,t.id),!r||!l){e.processedReqIds.delete(t.id),e.client.sendRes({type:"res",id:I,ok:!1,error:"sessionId and text are required"});return}const g=c,$=g==="manager"||h==="manager"?"manager":"standard";$==="manager"&&e.managerRuntime?.setManagerWorkerDefaults(r,M??null,k??null);const O=(g==="claude"||g==="codex"||g==="workbuddy")&&typeof A=="string"&&A.trim()?A.trim():void 0,_=e.resolvePath(He(g,y||re.homedir(),n)||re.homedir()),ye=_,W=_e(t.params.attachments);W?.length&&De(_,W);const p={text:l,attachments:W,localized:!1};let i=e.sessions.get(r);if(i){if(i.lastActiveAt=Date.now(),i.agentType!==g||(i.sessionMode??(i.agentType==="manager"?"manager":"standard"))!==$||i.workDir!==_||JSON.stringify(i.externalChannel??null)!==JSON.stringify(v??null)){e.sessions.delete(r);try{await H(e,i)}catch{e.processedReqIds.delete(t.id)}i=void 0}else if(n&&i.agentSessionId!==n)try{await i.adapter.resume(n),i.agentSessionId=n}catch{e.sessions.delete(r);try{await H(e,i)}catch{e.processedReqIds.delete(t.id)}i=void 0}}if(!i)try{i=await Ue(e,r,g,$,_,n,v,B,a?.managedAgentPolicy)}catch(d){const f=d instanceof Error&&d.message.startsWith("Unsupported agent:")?d.message:`Failed to start ${c}: ${d instanceof Error?d.message:String(d)}`;console.error(`[chat.send] start failed reqId=${t.id} sessionId=${r} agentType=${c} workDir=${_} agentSessionId=${n??""}: ${f}`),e.client.sendEvent({type:"event",event:"agent",payload:{state:"error",sessionId:r,message:f,runId:"",seq:0}}),e.processedReqIds.delete(t.id),e.client.sendRes({type:"res",id:I,ok:!1,error:f});return}const R={id:C??`user-${t.id}`,sessionId:r,role:"user",ts:Date.now(),payload:oe(p.text,p.attachments)},K=Array.isArray(z)&&z.length>0?z.map(d=>({id:d.clientMessageId??d.id,sessionId:r,role:"user",ts:Date.parse(d.createdAt),payload:oe(d.text,d.attachments)})):null,L=K??[R],w=xe(r,R.id),X=w.state==="queued";if(w.state!=="not_found"&&!X){e.client.sendRes({type:"res",id:I,ok:!0,payload:w});return}if(G)try{await Le(i.adapter,p.text,o,O,p.attachments,T,a?{source:a.source}:void 0)}catch(d){e.processedReqIds.delete(t.id),e.sessions.delete(r),await H(e,i),e.client.sendRes({type:"res",id:I,ok:!1,error:d instanceof Error?d.message:String(d)});return}D({level:"info",sessionId:r,wsEvent:"chat.send.start",metadata:{reqId:t.id,agentType:g,sessionMode:$,managerConfig:S??null,modelId:o,managerDefaultWorkerAgentType:M??null,managerDefaultWorkerModelId:k??null,reasoningEffort:O,...a?.source==="room_activation"?{managedRoomPromptSnapshot:a.managedRoomPromptSnapshot}:{}}});const U=(d,f)=>({...de(se()),sessionId:r,clientMessageId:R.id,messageId:R.id,deliveryState:d,bodyRevision:f,committedAt:new Date(R.ts).toISOString()}),Y=d=>{e.nativeFusion?.registerManagedSend({sessionId:r,agentType:g,sourceAgentType:ce(g,o),canonicalMessageId:R.id,sourceSessionKey:i.agentSessionId??n??null,text:p.text,managedEchoPolicy:d?.deliveryMode==="external_owner_queue"&&!he?"import_following":"suppress_following",externalRunId:d?.deliveryMode==="external_owner_queue"?`codex-external-${d.queuedSubmissionId??R.id}`:null})},Z=()=>{i.currentRunId||(i.currentRunId=`dispatch:${t.id}`,i.currentRunPhase="thinking",i.nextEventSeq=0)},ee=()=>{if(Y(),X)return{...de(se()),sessionId:r,clientMessageId:w.clientMessageId,messageId:w.messageId,deliveryState:w.deliveryState,bodyRevision:w.bodyRevision,committedAt:w.committedAt};try{Fe(e,{sessionId:r,agentType:g,sessionMode:$,managerConfig:S??null,workDir:ye,agentSessionId:i.agentSessionId??n??null,modelId:o,managerDefaultWorkerAgentType:M??null,managerDefaultWorkerModelId:k??null});let d=0;for(const[f,u]of L.entries()){const E=K?F(r,u,"committed"):b(r,u,"committed");f===0&&(d=E)}return be(_,W??[]),x(e.client),U("committed",d)}catch(d){throw e.nativeFusion?.cancelManagedSend?.(R.id),d}},te=d=>{i.currentRunId||(i.nextEventSeq=0),Y(d);const f=d?.deliveryMode==="external_owner_queue"?"queued":"executing";let u=0;for(const[E,J]of L.entries()){const Q=F(r,J,f);E===0&&(u=Q)}return x(e.client),U(f,u)},ne=async(d,f)=>{e.nativeFusion?.cancelManagedSend?.(R.id);const u=le(g,d);console.error(`[chat.send] send failed reqId=${t.id} sessionId=${r} agentType=${c} workDir=${_} agentSessionId=${i.agentSessionId??n??""}: ${u}`),e.sessions.delete(r);try{await H(e,i)}catch{}if(e.client.sendEvent({type:"event",event:"agent",payload:{state:"error",sessionId:r,message:u,runId:"",seq:0}}),!f){const E={id:`agent-error-${t.id}-${Date.now()}`,sessionId:r,role:"agent",ts:Date.now(),payload:u};b(r,E),x(e.client)}f&&(e.processedReqIds.delete(t.id),e.client.sendRes({type:"res",id:I,ok:!1,error:u}))};if(G){try{ee()}catch(u){e.processedReqIds.delete(t.id),e.client.sendRes({type:"res",id:I,ok:!1,error:`Durable message commit failed: ${u instanceof Error?u.message:String(u)}`});return}Z();let d;try{a?.source==="room_activation"&&(j(i.adapter,r,g,v,B,q,a.managedAgentPolicy,e.managedRoomExecutor),fe(e,i,q),s());const u=p.attachments;d=await me(i.adapter,p.text,o,O,u,T,a?{source:a.source}:void 0),D({level:"info",sessionId:r,wsEvent:"chat.send.done",metadata:{reqId:t.id}})}catch(u){let E=0;for(const[Q,Re]of L.entries()){const Se=F(r,Re,"failed");Q===0&&(E=Se)}x(e.client);const J=le(g,u);await ne(u,!1),e.client.sendRes({type:"res",id:I,ok:!0,payload:{...U("failed",E),failureMessage:J}});return}const f=te(d??void 0);e.client.sendRes({type:"res",id:I,ok:!0,payload:{...f,...p.localized?{localizedAttachments:!0}:{},...d?.deliveryMode==="external_owner_queue"?{queued:!0,deliveryMode:d.deliveryMode,queuedSubmissionId:d.queuedSubmissionId}:{}}}),D({level:"info",sessionId:r,wsEvent:"chat.send.res",metadata:{reqId:t.id,ok:!0}});return}let ae;try{ae=ee()}catch(d){e.processedReqIds.delete(t.id),e.client.sendRes({type:"res",id:I,ok:!1,error:`Durable message commit failed: ${d instanceof Error?d.message:String(d)}`});return}Z(),a?.source==="room_activation"&&(j(i.adapter,r,g,v,B,q,a.managedAgentPolicy,e.managedRoomExecutor),fe(e,i,q),s()),te(),e.client.sendRes({type:"res",id:I,ok:!0,payload:{...ae,...p.localized?{localizedAttachments:!0}:{}}}),D({level:"info",sessionId:r,wsEvent:"chat.send.res",metadata:{reqId:t.id,ok:!0}});const Ie=p.attachments;me(i.adapter,p.text,o,O,Ie,T,a?{source:a.source}:void 0).then(()=>{D({level:"info",sessionId:r,wsEvent:"chat.send.done",metadata:{reqId:t.id}})}).catch(d=>{F(r,R,"failed"),x(e.client),ne(d,!1)})}async function ut(e,t){const{sessionId:a}=t.params,s=e.sessions.get(a);if(s){P(e,s);try{await s.adapter.stop()}catch{e.client.sendRes({type:"res",id:t.id,ok:!1,error:"agent_stop_failed"});return}Je(e,a),e.activityPublisher?.publish(a,null)}e.client.sendRes({type:"res",id:t.id,ok:!0})}export{ut as handleChatAbort,ct as handleChatSend,Fe as sendSessionUpdateEvent};
|
|
2
|
+
`),a=t>0?Math.min(t,80):Math.min(e.length,80);return e.slice(0,a)}function ie(e,t,a){return`${e}:${V("sha256").update(`${t}\0${a??""}`).digest("hex")}`}function Oe(e,t,a={}){if(e.state==="tool-call"||e.state==="tool-result"){const s={runId:e.runId,sourceSeq:e.seq};return{state:e.state,runId:e.runId,seq:e.seq,sessionId:t,detailRef:s,status:e.state==="tool-call"?"running":"completed",detailAvailable:!0,...e.durationMs!==void 0?{durationMs:e.durationMs}:{},...e.name?{name:e.name}:{},...e.source?{source:e.source}:{},...e.agentSessionId?{agentSessionId:e.agentSessionId}:{},...a}}return{...e,sessionId:t,...a}}const We=3e4;function Ne(e){return e.state==="heartbeat"?e.runPhase??null:e.state==="tool-call"||e.state==="tool-result"?"tool_running":e.state==="approval-pending"?"waiting_approval":e.state==="delta"?e.thinking?"thinking":"streaming_text":e.state==="init"||e.state==="start"?"thinking":null}function le(e,t){return`Agent send failed: ${t instanceof Error?t.message:String(t)}`}function ce(e,t){return e!=="manager"?e:t==="claude"?"claude":"codex"}function Fe(e,t){N({sessionId:t.sessionId,agentType:t.agentType,sessionMode:t.sessionMode,managerConfig:t.managerConfig,workDir:t.workDir,agentSessionId:t.agentSessionId??null,modelId:t.modelId??null,managerDefaultWorkerAgentType:t.managerDefaultWorkerAgentType,managerDefaultWorkerModelId:t.managerDefaultWorkerModelId}),e.client.sendEvent({type:"event",event:"session.update",payload:{session:{id:t.sessionId,agentType:t.agentType,sessionMode:t.sessionMode,managerConfig:t.managerConfig,agentSessionId:t.agentSessionId??null,modelId:t.modelId??null,workDir:t.workDir,status:"active",externalChannel:null}}})}function ue(e){return Me(e)}function ge(e,t,a){return{}}function j(e,t,a,s,r,l,c,h){const S=a==="codex";e.configure?.({sessionId:t,externalChannel:s??null,env:{...ue(a),...ge(t,s,r),...l&&!S?{SHENNIAN_MANAGED_ROOM_CONTEXT:l,[Pe]:$e()}:{}},...c?{managedAgentPolicy:c}:{},...S?{managedRoomContextToken:l??null,managedRoomExecutor:h??null}:{}})}function fe(e,t,a){const s=t.managedRoomContextToken;s&&s!==a&&e.revokeManagedRoomContextToken?.(s),t.managedRoomContextToken=a}function P(e,t){const a=t?.managedRoomContextToken;!t||!a||(t.managedRoomContextToken=null,e.revokeManagedRoomContextToken?.(a))}function He(e,t,a){if(e!=="claude"||!a)return t;const s=t.trim();return!!s&&s.startsWith("-")&&!s.includes("/")?Ee(a)??t:t}function ze(e,t,a,s){let r=null;function l(n,o={}){e.client.sendAgentEvent({type:"event",event:"agent",payload:Oe(n,t,o),seq:n.seq,id:`agent-evt-${n.runId}-${n.seq}`})}function c(n){n?.heartbeatTimer&&(clearInterval(n.heartbeatTimer),n.heartbeatTimer=null)}function h(n){if(!n.currentRunId||!n.currentRunPhase)return;const o=n.heartbeatSeq++;e.client.sendAgentEvent({type:"event",event:"agent",payload:{state:"heartbeat",sessionId:t,runId:n.currentRunId,seq:o,runPhase:n.currentRunPhase},seq:o,id:`agent-heartbeat-${n.currentRunId}-${o}-${Date.now()}`})}function S(n){!n||n.heartbeatTimer||(n.heartbeatTimer=setInterval(()=>{h(n)},We),n.heartbeatTimer.unref?.())}function y(n){const o=n?.pendingTextEvent;!n||!o||!o.text||(b(t,{id:`agent-${o.runId}-${o.seq}`,sessionId:t,role:"agent",ts:Date.now(),payload:o.text}),x(e.client),l({state:"delta",runId:o.runId,seq:o.seq,text:o.text,thinking:o.thinking||void 0}),n.pendingTextEvent=null)}s.on("agentEvent",n=>{const o=e.sessions.get(t),T=Ne(n),M=n.state==="final"||n.state==="error"||n.state==="aborted";if(o&&(o.nextEventSeq=n.seq+1,M||(o.currentRunId=n.runId),!M&&T&&(o.currentRunPhase=T,S(o)),n.agentSessionId&&(o.agentSessionId=n.agentSessionId)),e.managerRuntime?.noteAgentEvent(t,n),n.state==="delta"&&n.thinking)return;n.state!=="delta"&&D({level:"info",sessionId:t,wsEvent:`agent.${n.state}`,wsDirection:"out",metadata:{runId:n.runId,seq:n.seq,agentType:a}});let k=!1;if(n.state==="tool-call"||n.state==="tool-result"){const m=`agent-${n.runId}-${n.seq}`;qe({sessionId:t,toolCallId:m,detailRevision:n.seq,ts:Date.now(),name:n.name??"tool",...n.args!==void 0?{args:n.args}:{},...n.result!==void 0?{result:n.result}:{},status:n.state==="tool-call"?"running":"completed",...n.durationMs!==void 0?{durationMs:n.durationMs}:{},detailRef:{runId:n.runId,sourceSeq:n.seq}}),b(t,{id:m,sessionId:t,role:"agent",ts:Date.now(),payload:JSON.stringify({v:1,type:n.state==="tool-call"?"tool_use":"tool_result",name:n.name,toolCallId:m,status:n.state==="tool-call"?"running":"completed",...n.durationMs!==void 0?{durationMs:n.durationMs}:{},detailRef:{runId:n.runId,sourceSeq:n.seq},detailRevision:n.seq,detailAvailable:!0,resultOmitted:n.state==="tool-result"})}),k=!0}else n.state==="approval-pending"?(b(t,{id:`agent-${n.runId||"run"}-${n.seq}`,sessionId:t,role:"agent",ts:Date.now(),payload:ke(n.approval)}),k=!0,o&&N({sessionId:t,agentType:a,workDir:o.workDir,agentSessionId:o.agentSessionId,attentionId:ie("approval",n.runId,n.seq)})):(n.state==="error"||n.state==="aborted")&&n.message&&(b(t,{id:`agent-${n.runId||"run"}-${n.seq}`,sessionId:t,role:"agent",ts:Date.now(),payload:n.message}),k=!0);k&&x(e.client);const A=`${t}:${n.runId}`;if(n.state==="delta"&&!n.thinking&&n.text&&e.runTextAcc.set(A,(e.runTextAcc.get(A)??"")+n.text),n.agentSessionId&&n.agentSessionId!==r&&(r=n.agentSessionId,e.nativeFusion?.noteManagedSourceSession(t,ce(a,n.source),n.agentSessionId),o&&N({sessionId:t,agentType:a,workDir:o.workDir,agentSessionId:n.agentSessionId}),e.client.sendEvent({type:"event",event:"session.update",payload:{session:{id:t,agentType:a,agentSessionId:n.agentSessionId}}})),n.state==="delta"){const m=n.text??"";if(!m)return;o?.pendingTextEvent&&o.pendingTextEvent.runId!==n.runId&&y(o),o&&!o.pendingTextEvent&&(o.pendingTextEvent={runId:n.runId,seq:n.seq,text:"",thinking:!1}),o?.pendingTextEvent&&(o.pendingTextEvent.text+=m,o.pendingTextEvent.seq=n.seq);return}let C={};if(n.state==="final"){y(o);const m=e.runTextAcc.get(A)??"";m&&(C={messageSummary:ve(m)}),e.runTextAcc.delete(A)}else n.state==="error"||n.state==="aborted"?(y(o),e.runTextAcc.delete(A)):(n.state==="tool-call"||n.state==="tool-result"||n.state==="approval-pending")&&y(o);M&&o?.currentRunId===n.runId&&(P(e,o),o.currentRunId=null,o.currentRunPhase=null,o.nextEventSeq=0,c(o),e.chatQueue?.noteTerminal(t),N({sessionId:t,agentType:a,workDir:o.workDir,agentSessionId:o.agentSessionId,status:n.state==="final"?"completed":"failed",attentionId:ie("terminal",n.runId),lastActivityAt:new Date().toISOString()}),x(e.client)),l(n,C)}),s.on("error",n=>{console.error(`[chat.send] adapter error sessionId=${t} agentType=${a}: ${n.message}`),P(e,e.sessions.get(t)),e.sessions.delete(t),e.chatQueue?.noteTerminal(t),e.client.sendEvent({type:"event",event:"agent",payload:{state:"error",sessionId:t,message:n.message,runId:"",seq:0}})})}function Be(e,t){if(e.processedReqIds.add(t),e.processedReqIds.size>1e3){const a=e.processedReqIds.values().next().value;e.processedReqIds.delete(a)}}async function H(e,t){P(e,t),t.heartbeatTimer&&(clearInterval(t.heartbeatTimer),t.heartbeatTimer=null),t.adapter.removeAllListeners(),await t.adapter.stop().catch(()=>{})}function me(e,t,a,s,r,l,c){return c?e.send(t,a,s,r,l,c):l?.trim()?e.send(t,a,s,r,l):r?.length?e.send(t,a,s,r):s?e.send(t,a,s):e.send(t,a)}function Le(e,t,a,s,r,l,c){return e.prepareSend?e.prepareSend(t,a,s,r,l,c):Promise.resolve()}async function Ue(e,t,a,s,r,l,c,h,S){e.evictIdleSessions();const y=Ae(a);if(!y)throw new Error(`Unsupported agent: ${a}`);const n=s==="manager"&&a!=="manager"?new we(y,a==="claude"?"claude":"codex"):y;j(n,t,a,c,h,null,S,e.managedRoomExecutor),await n.start(t,r,l);const o={adapter:n,workDir:r,agentType:a,sessionMode:s,agentSessionId:l??null,lastActiveAt:Date.now(),currentRunId:null,currentRunPhase:null,nextEventSeq:0,heartbeatSeq:0,heartbeatTimer:null,pendingTextEvent:null,externalChannel:c??null,externalReplyTarget:h??null,externalChannelEnv:{...ue(a),...ge(t,c,h)},managedRoomContextToken:null};return e.sessions.set(t,o),ze(e,t,a,n),o}function Je(e,t){const a=e.sessions.get(t),s=a?.currentRunId;if(!a||!s)return;const r=a.nextEventSeq;e.runTextAcc.delete(`${t}:${s}`),P(e,a),a.pendingTextEvent=null,a.currentRunId=null,a.currentRunPhase=null,a.nextEventSeq=0,a.heartbeatTimer&&(clearInterval(a.heartbeatTimer),a.heartbeatTimer=null),e.client.sendAgentEvent({type:"event",event:"agent",payload:{state:"aborted",sessionId:t,runId:s,seq:r},seq:r,id:`agent-evt-${s}-${r}`}),e.chatQueue?.noteTerminal(t)}async function ct(e,t,a){const s=a?t.params.managedRoomContextToken??null:null;let r=!1;try{await Qe(e,t,a,()=>{r=!0})}finally{s&&!r&&e.revokeManagedRoomContextToken?.(s)}}async function Qe(e,t,a,s){if(e.processedReqIds.has(t.id)){e.client.sendRes({type:"res",id:t.id,ok:!0});return}const{sessionId:r,text:l,agentType:c,sessionMode:h,managerConfig:S,workDir:y,agentSessionId:n,modelId:o,systemPrompt:T,managerDefaultWorkerAgentType:M,managerDefaultWorkerModelId:k,reasoningEffort:A,clientMessageId:C,sessionListProjection:m,waitForDispatch:G,responseId:pe,managedRoomContextToken:q,suppressExternalOwnerEcho:he,queuedBatchItems:z}=t.params,I=pe||t.id;Te(m);const v=null,B="";if(a?.source==="room_activation"&&(Ce(a,T,q),c==="manager"||h!=="standard"))throw new Error("managed_agent_manager_mode_unsupported");if(Be(e,t.id),!r||!l){e.processedReqIds.delete(t.id),e.client.sendRes({type:"res",id:I,ok:!1,error:"sessionId and text are required"});return}const g=c,$=g==="manager"||h==="manager"?"manager":"standard";$==="manager"&&e.managerRuntime?.setManagerWorkerDefaults(r,M??null,k??null);const O=(g==="claude"||g==="codex"||g==="workbuddy")&&typeof A=="string"&&A.trim()?A.trim():void 0,_=e.resolvePath(He(g,y||re.homedir(),n)||re.homedir()),ye=_,W=_e(t.params.attachments);W?.length&&De(_,W);const p={text:l,attachments:W,localized:!1};let i=e.sessions.get(r);if(i){if(i.lastActiveAt=Date.now(),i.agentType!==g||(i.sessionMode??(i.agentType==="manager"?"manager":"standard"))!==$||i.workDir!==_||JSON.stringify(i.externalChannel??null)!==JSON.stringify(v??null)){e.sessions.delete(r);try{await H(e,i)}catch{e.processedReqIds.delete(t.id)}i=void 0}else if(n&&i.agentSessionId!==n)try{await i.adapter.resume(n),i.agentSessionId=n}catch{e.sessions.delete(r);try{await H(e,i)}catch{e.processedReqIds.delete(t.id)}i=void 0}}if(!i)try{i=await Ue(e,r,g,$,_,n,v,B,a?.managedAgentPolicy)}catch(d){const f=d instanceof Error&&d.message.startsWith("Unsupported agent:")?d.message:`Failed to start ${c}: ${d instanceof Error?d.message:String(d)}`;console.error(`[chat.send] start failed reqId=${t.id} sessionId=${r} agentType=${c} workDir=${_} agentSessionId=${n??""}: ${f}`),e.client.sendEvent({type:"event",event:"agent",payload:{state:"error",sessionId:r,message:f,runId:"",seq:0}}),e.processedReqIds.delete(t.id),e.client.sendRes({type:"res",id:I,ok:!1,error:f});return}const R={id:C??`user-${t.id}`,sessionId:r,role:"user",ts:Date.now(),payload:oe(p.text,p.attachments)},K=Array.isArray(z)&&z.length>0?z.map(d=>({id:d.clientMessageId??d.id,sessionId:r,role:"user",ts:Date.parse(d.createdAt),payload:oe(d.text,d.attachments)})):null,L=K??[R],w=xe(r,R.id),X=w.state==="queued";if(w.state!=="not_found"&&!X){e.client.sendRes({type:"res",id:I,ok:!0,payload:w});return}if(G){a?.source==="room_activation"&&j(i.adapter,r,g,v,B,q,a.managedAgentPolicy,e.managedRoomExecutor);try{await Le(i.adapter,p.text,o,O,p.attachments,T,a?{source:a.source}:void 0)}catch(d){e.processedReqIds.delete(t.id),e.sessions.delete(r),await H(e,i),e.client.sendRes({type:"res",id:I,ok:!1,error:d instanceof Error?d.message:String(d)});return}}D({level:"info",sessionId:r,wsEvent:"chat.send.start",metadata:{reqId:t.id,agentType:g,sessionMode:$,managerConfig:S??null,modelId:o,managerDefaultWorkerAgentType:M??null,managerDefaultWorkerModelId:k??null,reasoningEffort:O,...a?.source==="room_activation"?{managedRoomPromptSnapshot:a.managedRoomPromptSnapshot}:{}}});const U=(d,f)=>({...de(se()),sessionId:r,clientMessageId:R.id,messageId:R.id,deliveryState:d,bodyRevision:f,committedAt:new Date(R.ts).toISOString()}),Y=d=>{e.nativeFusion?.registerManagedSend({sessionId:r,agentType:g,sourceAgentType:ce(g,o),canonicalMessageId:R.id,sourceSessionKey:i.agentSessionId??n??null,text:p.text,managedEchoPolicy:d?.deliveryMode==="external_owner_queue"&&!he?"import_following":"suppress_following",externalRunId:d?.deliveryMode==="external_owner_queue"?`codex-external-${d.queuedSubmissionId??R.id}`:null})},Z=()=>{i.currentRunId||(i.currentRunId=`dispatch:${t.id}`,i.currentRunPhase="thinking",i.nextEventSeq=0)},ee=()=>{if(Y(),X)return{...de(se()),sessionId:r,clientMessageId:w.clientMessageId,messageId:w.messageId,deliveryState:w.deliveryState,bodyRevision:w.bodyRevision,committedAt:w.committedAt};try{Fe(e,{sessionId:r,agentType:g,sessionMode:$,managerConfig:S??null,workDir:ye,agentSessionId:i.agentSessionId??n??null,modelId:o,managerDefaultWorkerAgentType:M??null,managerDefaultWorkerModelId:k??null});let d=0;for(const[f,u]of L.entries()){const E=K?F(r,u,"committed"):b(r,u,"committed");f===0&&(d=E)}return be(_,W??[]),x(e.client),U("committed",d)}catch(d){throw e.nativeFusion?.cancelManagedSend?.(R.id),d}},te=d=>{i.currentRunId||(i.nextEventSeq=0),Y(d);const f=d?.deliveryMode==="external_owner_queue"?"queued":"executing";let u=0;for(const[E,J]of L.entries()){const Q=F(r,J,f);E===0&&(u=Q)}return x(e.client),U(f,u)},ne=async(d,f)=>{e.nativeFusion?.cancelManagedSend?.(R.id);const u=le(g,d);console.error(`[chat.send] send failed reqId=${t.id} sessionId=${r} agentType=${c} workDir=${_} agentSessionId=${i.agentSessionId??n??""}: ${u}`),e.sessions.delete(r);try{await H(e,i)}catch{}if(e.client.sendEvent({type:"event",event:"agent",payload:{state:"error",sessionId:r,message:u,runId:"",seq:0}}),!f){const E={id:`agent-error-${t.id}-${Date.now()}`,sessionId:r,role:"agent",ts:Date.now(),payload:u};b(r,E),x(e.client)}f&&(e.processedReqIds.delete(t.id),e.client.sendRes({type:"res",id:I,ok:!1,error:u}))};if(G){try{ee()}catch(u){e.processedReqIds.delete(t.id),e.client.sendRes({type:"res",id:I,ok:!1,error:`Durable message commit failed: ${u instanceof Error?u.message:String(u)}`});return}Z();let d;try{a?.source==="room_activation"&&(fe(e,i,q),s());const u=p.attachments;d=await me(i.adapter,p.text,o,O,u,T,a?{source:a.source}:void 0),D({level:"info",sessionId:r,wsEvent:"chat.send.done",metadata:{reqId:t.id}})}catch(u){let E=0;for(const[Q,Re]of L.entries()){const Se=F(r,Re,"failed");Q===0&&(E=Se)}x(e.client);const J=le(g,u);await ne(u,!1),e.client.sendRes({type:"res",id:I,ok:!0,payload:{...U("failed",E),failureMessage:J}});return}const f=te(d??void 0);e.client.sendRes({type:"res",id:I,ok:!0,payload:{...f,...p.localized?{localizedAttachments:!0}:{},...d?.deliveryMode==="external_owner_queue"?{queued:!0,deliveryMode:d.deliveryMode,queuedSubmissionId:d.queuedSubmissionId}:{}}}),D({level:"info",sessionId:r,wsEvent:"chat.send.res",metadata:{reqId:t.id,ok:!0}});return}let ae;try{ae=ee()}catch(d){e.processedReqIds.delete(t.id),e.client.sendRes({type:"res",id:I,ok:!1,error:`Durable message commit failed: ${d instanceof Error?d.message:String(d)}`});return}Z(),a?.source==="room_activation"&&(j(i.adapter,r,g,v,B,q,a.managedAgentPolicy,e.managedRoomExecutor),fe(e,i,q),s()),te(),e.client.sendRes({type:"res",id:I,ok:!0,payload:{...ae,...p.localized?{localizedAttachments:!0}:{}}}),D({level:"info",sessionId:r,wsEvent:"chat.send.res",metadata:{reqId:t.id,ok:!0}});const Ie=p.attachments;me(i.adapter,p.text,o,O,Ie,T,a?{source:a.source}:void 0).then(()=>{D({level:"info",sessionId:r,wsEvent:"chat.send.done",metadata:{reqId:t.id}})}).catch(d=>{F(r,R,"failed"),x(e.client),ne(d,!1)})}async function ut(e,t){const{sessionId:a}=t.params,s=e.sessions.get(a);if(s){P(e,s);try{await s.adapter.stop()}catch{e.client.sendRes({type:"res",id:t.id,ok:!1,error:"agent_stop_failed"});return}Je(e,a),e.activityPublisher?.publish(a,null)}e.client.sendRes({type:"res",id:t.id,ok:!0})}export{ut as handleChatAbort,ct as handleChatSend,Fe as sendSessionUpdateEvent};
|