fix(team): add permission_request interception in stdout handler + diagnostic logging
- Parse raw user text for permission_request in handleStreamJsonMessage (covers case where permission_request arrives without <teammate-message> wrapper) - Add [PERM-TRACE] logger.warn diagnostics to trace the exact flow: where permission_request is detected, whether it reaches handleTeammatePermissionRequest, and whether relay or stdout interception triggers - These logs will help diagnose why ToolApprovalSheet may not appear
This commit is contained in:
parent
ed1726c298
commit
bdd0dc6f39
1 changed files with 31 additions and 1 deletions
|
|
@ -4055,6 +4055,9 @@ export class TeamProvisioningService {
|
|||
);
|
||||
const permissionRequestIds = new Set(permissionRequestMsgs.map((m) => m.messageId));
|
||||
if (permissionRequestMsgs.length > 0) {
|
||||
logger.warn(
|
||||
`[${run.teamName}] [PERM-TRACE] relay intercepted ${permissionRequestMsgs.length} permission_request(s) from inbox`
|
||||
);
|
||||
for (const msg of permissionRequestMsgs) {
|
||||
const perm = parsePermissionRequest(msg.text)!;
|
||||
this.handleTeammatePermissionRequest(run, perm, msg.timestamp);
|
||||
|
|
@ -4907,6 +4910,24 @@ export class TeamProvisioningService {
|
|||
// {"type":"assistant","content":[{"type":"text","text":"..."},...]}
|
||||
// {"type":"result","subtype":"success",...}
|
||||
if (msg.type === 'user') {
|
||||
// Check for permission_request in raw user message text BEFORE teammate-message parsing.
|
||||
// The permission_request may arrive as plain JSON without <teammate-message> wrapper,
|
||||
// and handleNativeTeammateUserMessage only processes <teammate-message> blocks.
|
||||
const rawUserText = this.extractStreamUserText(msg);
|
||||
if (rawUserText) {
|
||||
const perm = parsePermissionRequest(rawUserText);
|
||||
if (perm) {
|
||||
logger.warn(
|
||||
`[${run.teamName}] [PERM-TRACE] Intercepted permission_request from stdout user message: agent=${perm.agentId} tool=${perm.toolName} requestId=${perm.requestId}`
|
||||
);
|
||||
this.handleTeammatePermissionRequest(run, perm, new Date().toISOString());
|
||||
} else if (rawUserText.includes('permission_request')) {
|
||||
// Log near-miss: text contains "permission_request" but wasn't parsed
|
||||
logger.warn(
|
||||
`[${run.teamName}] [PERM-TRACE] stdout user message contains "permission_request" but parsePermissionRequest returned null. Text preview: ${rawUserText.slice(0, 300)}`
|
||||
);
|
||||
}
|
||||
}
|
||||
this.handleNativeTeammateUserMessage(run, msg);
|
||||
return;
|
||||
}
|
||||
|
|
@ -5586,7 +5607,16 @@ export class TeamProvisioningService {
|
|||
messageTimestamp: string
|
||||
): void {
|
||||
// Skip if already tracked (idempotency — relay can be called multiple times)
|
||||
if (run.pendingApprovals.has(perm.requestId)) return;
|
||||
if (run.pendingApprovals.has(perm.requestId)) {
|
||||
logger.warn(
|
||||
`[${run.teamName}] [PERM-TRACE] Duplicate permission_request skipped: ${perm.requestId}`
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
logger.warn(
|
||||
`[${run.teamName}] [PERM-TRACE] handleTeammatePermissionRequest: agent=${perm.agentId} tool=${perm.toolName} requestId=${perm.requestId}`
|
||||
);
|
||||
|
||||
const approval: ToolApprovalRequest = {
|
||||
requestId: perm.requestId,
|
||||
|
|
|
|||
Loading…
Reference in a new issue