MCPcopy Create free account
hub / github.com/astercloud/aster / monitorSubagent

Method monitorSubagent

pkg/tools/builtin/subagent_manager.go:373–417  ·  view source on GitHub ↗

monitorSubagent 监控子代理执行

(ctx context.Context, instance *SubagentInstance, cmd *exec.Cmd, outFile *os.File)

Source from the content-addressed store, hash-verified

371
372// monitorSubagent 监控子代理执行
373func (sm *FileSubagentManager) monitorSubagent(ctx context.Context, instance *SubagentInstance, cmd *exec.Cmd, outFile *os.File) {
374 defer func() {
375 _ = outFile.Close()
376 sm.mu.Lock()
377 defer sm.mu.Unlock()
378
379 now := time.Now()
380 instance.EndTime = &now
381 instance.Duration = now.Sub(instance.StartTime)
382 instance.LastUpdate = now
383 _ = sm.saveSubagent(instance)
384 }()
385
386 // 等待命令完成
387 err := cmd.Wait()
388
389 sm.mu.Lock()
390 defer sm.mu.Unlock()
391
392 // 更新实例状态
393 now := time.Now()
394 instance.EndTime = &now
395 instance.Duration = now.Sub(instance.StartTime)
396 instance.LastUpdate = now
397
398 if err != nil {
399 exitErr := &exec.ExitError{}
400 if errors.As(err, &exitErr) {
401 instance.ExitCode = exitErr.ExitCode()
402 instance.Status = "failed"
403 instance.Error = err.Error()
404 } else {
405 instance.Status = "failed"
406 instance.ExitCode = -1
407 instance.Error = err.Error()
408 }
409 } else {
410 instance.ExitCode = 0
411 instance.Status = "completed"
412 }
413
414 // 读取最终输出
415 sm.updateSubagentOutput(instance)
416 _ = sm.saveSubagent(instance)
417}
418
419// updateSubagentOutput 更新子代理输出
420func (sm *FileSubagentManager) updateSubagentOutput(instance *SubagentInstance) {

Callers 1

StartSubagentMethod · 0.95

Calls 5

saveSubagentMethod · 0.95
updateSubagentOutputMethod · 0.95
WaitMethod · 0.80
CloseMethod · 0.65
ErrorMethod · 0.65

Tested by

no test coverage detected