
    Chi                        d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	g dZ
dZdZdZdZdd	Zdd
ZddZddZddZddZedk(  r e e             y)az  
Reapply OpenClaw subagent transcript hotfix after package updates.

What it patches:
1) deliverAgentCommandResult(): mirror subagent/CLI output into child transcript
2) runtimeMs math clamp: prevent negative runtime displays

Usage:
  sudo python3 scripts/reapply_subagent_transcript_fix.py --apply --restart
  sudo python3 scripts/reapply_subagent_transcript_fix.py --dry-run
    )annotationsN)z:/usr/lib/node_modules/openclaw/dist/subagent-registry-*.jsz./usr/lib/node_modules/openclaw/dist/reply-*.jsz4/usr/lib/node_modules/openclaw/dist/pi-embedded-*.jsz9/usr/lib/node_modules/openclaw/dist/plugin-sdk/reply-*.jsz:[cli-transcript] mirrored output to ${effectiveSessionKey}z=(entry.endedAt ?? now) - (entry.startedAt ?? entry.createdAt)zJMath.max(0, (entry.endedAt ?? now) - (entry.startedAt ?? entry.createdAt))ae  	const cliProvider = result?.meta?.agentMeta?.provider;
	const shouldMirrorTranscript = Boolean(effectiveSessionKey) && (opts.lane === AGENT_LANE_SUBAGENT || cliProvider && isCliProvider(cliProvider, cfg));
	if (shouldMirrorTranscript && effectiveSessionKey) {
		const providerLabel = cliProvider ?? "subagent";
		const modelLabel = result?.meta?.agentMeta?.model ?? "default";
		const transcriptText = (payloads ?? []).map((payload) => payload?.text ?? "").filter((line) => line.trim().length > 0).join("\n\n").trim() || `[${providerLabel}/${modelLabel}] completed with no text output`;
		try {
			await appendAssistantMessageToSessionTranscript({
				agentId: resolveSessionAgentId({
					sessionKey: effectiveSessionKey,
					config: cfg
				}),
				sessionKey: effectiveSessionKey,
				text: transcriptText
			});
			runtime.log(`[cli-transcript] mirrored output to ${effectiveSessionKey}`);
		} catch (e) {
			runtime.error?.(`[cli-transcript] append failed for ${effectiveSessionKey}: ${String(e)}`);
			if (!runtime.error) runtime.log(`[cli-transcript] append failed for ${effectiveSessionKey}: ${String(e)}`);
		}
	}
c                 F   g } t               }t        D ]  }t        j                  |      D ]h  }t        t	        j
                  |      j                               }||v r4|j                  |       | j                  t	        j
                  |             j  t        |       S )N)
setTARGET_GLOBSglobstrpathlibPathresolveaddappendsorted)pathsseenpatternprps        K/home/ubuntu/.openclaw/workspace/scripts/reapply_subagent_transcript_fix.pyfind_targetsr   <   s     "E5D +7# 	+AW\\!_,,./BTzHHRLLLb)*	++ %=    c                4   | j                  d      }|dk(  r| dfS | j                  d|      }|dk(  r| j                  d|      }|dk(  r| dfS | || }t        |v r| dfS |j                  d      }|dk(  r| dfS |d | t        z   ||d  z   }| d | |z   | |d  z   dfS )Nz2async function deliverAgentCommandResult(params) {Fz&
function resolveAgentRunContext(opts)z
//#endregionz)if (!payloads || payloads.length === 0) {T)findMIRROR_MARKERMIRROR_BLOCK)contentstartendsection	insert_atsection_news         r   inject_mirror_blockr"   I   s    LLMNE{~
,,@%
HC
byll+U3
by~eC G~HIIB~*9%4wyz7JJK6E?[(734=8$>>r   c                   g }d}d}	 | j                  t        |      }|dk(  r|j                  | |d         nw|j                  | ||        | t        d|t	        d      z
        | }|dk(  r|j                  t               n|j                  t
               |dz  }|t	        t              z   }dj                  |      |fS )Nr   r   zMath.max(0,     )r   RUNTIME_EXPRr   maxlenRUNTIME_EXPR_CLAMPEDjoin)r   outichangedjprefixs         r   clamp_runtime_exprsr0   `   s    
C	AG
LLq)7JJwqr{#

71Q< QC$7 78;^#JJ|$JJ+,qLGL!!  773<  r   c                d    ddd}t        |       \  }}|rd|d<   t        |      \  }}||d<   ||fS )NFr   )mirror_injectedruntime_clampedTr2   r3   )r"   r0   )r   changescontent2injectedr-   s        r   patch_contentr7   u   sN    "'A>G,W5Hh%)!"+H5Hg!(GWr   c                    t        j                  ddt        |       gdd      }|j                  dk(  ryd|j                  |j
                  z   j                         fS )Nnodez--checkTtextcapture_outputr   )Tr%   F)
subprocessrunr   
returncodestdoutstderrstrip)pathprocs     r   
node_checkrE      sP    >>69c$i8tTXYD!4;;,33555r   c            
        t        j                         } | j                  ddd       | j                  ddd       | j                  ddd       | j                         }|j                  s|j
                  s| j                  d	       t               }|st        d
       yg }g }t        dt        |       d       |D ]  }	 |j                         }t        |      \  }}	||k7  }
|
st        d|j                   d       Ct        d|j                   d|	d    d|	d           |j
                  rtt        t        j                               }t!        j"                  | d|       }	 t%        j&                  ||       |j)                  ||f       |j+                  |       |j)                  |        |j
                  rt        d       y|D ]Z  }t/        |      \  }}|rt        d| d|        t-        |      D ]  \  }}	 t%        j&                  ||        t        d        y  t        d!t        |       d"       |j0                  rrg d#}t3        j4                  |d$d$%      }|j6                  dk7  r<t        d&       t        |j8                  |j:                  z   j=                                y't        d(       y# t        $ r}t        d| d|        Y d }~'d }~ww xY w# t        $ rU}t        d| d|        t-        |      D ]+  \  }}	 t%        j&                  ||       # t        $ r Y )w xY w Y d }~ yd }~ww xY w# t        $ r Y Yw xY w))Nz--apply
store_truezWrite changes to files)actionhelpz	--dry-runzShow what would changez	--restartz.Restart gateway service after successful applyz choose one: --apply or --dry-runzNo target dist files found.r$   zFound z candidate filesz[skip] z: read failed: z[ok]   z(: already patched / no applicable changez[patch] z: mirror_injected=r2   z runtime_clamped=r3   z	.bak.fix-z[error] failed writing z:    zDry run complete.r   z[syntax-fail] 
z5Rollback complete (restored from .bak.fix-* backups).   zApplied successfully to z files.)	systemctlz--userrestartzopenclaw-gateway.serviceTr:   z[warn] restart failed:   zFGateway restarted (systemctl --user restart openclaw-gateway.service).)argparseArgumentParseradd_argument
parse_argsapplydry_runerrorr   printr(   	read_text	Exceptionr7   nameinttimer	   r
   shutilcopy2r   
write_textreversedrE   rN   r=   r>   r?   r@   rA   rB   )parserargstargetsbackupschanged_filesrC   originalepatchedr4   r-   tsbackupdstsrcokerrcmdrD   s                      r   mainrp      sU   $$&F
	,=UV
L?WX
L?opD::dll78nG+,79G(*M	F3w<. 0
12 %	~~'H
 )2X%GDII;&NOPtyyk!3G<M4N3OO`ahiza{`|}	
 << it45	LLv&NND&>*OOG$  &9%N ||!"  T"CN4&3%01$W- SLLc*
 IJ 
$S%7$8
@A||L~~cTB??a*+4;;,3356VWC  	GD645	4  	+D6A378$W- SLLc*  
 	. ! sg   K,AK/
M	K,K''K,/	M8"ML21M2	L>	;M=L>	>MM	MM__main__)returnzlist[pathlib.Path])r   r   rr   ztuple[str, bool])r   r   rr   ztuple[str, int])r   r   rr   ztuple[str, dict])rC   zpathlib.Pathrr   ztuple[bool, str])rr   r[   )__doc__
__future__r   rP   r   r	   r]   r=   sysr\   r   r   r&   r)   r   r   r"   r0   r7   rE   rp   __name__
SystemExit r   r   <module>ry      s   
 #      
  MNc 2
?.!*
6Xv z
TV
 r   