process-lifecycle

star 35

Gerencia o ciclo de vida completo de processos background com suporte cross-platform (Windows taskkill + Unix killpg/SIGTERM). Inspirado pelo SimulationRunner do MiroFish-Offline (simulation_runner.py). Inicia, monitora, pausa, retoma e finaliza processos com tracking de estado dual-platform e ingestão de logs em tempo real. Use quando precisar executar scripts Python ou binários em background com monitoramento de progresso, logs de saída e limpeza garantida.

MarceloClaro By MarceloClaro schedule Updated 6/7/2026

name: process-lifecycle description: > Gerencia o ciclo de vida completo de processos background com suporte cross-platform (Windows taskkill + Unix killpg/SIGTERM). Inspirado pelo SimulationRunner do MiroFish-Offline (simulation_runner.py). Inicia, monitora, pausa, retoma e finaliza processos com tracking de estado dual-platform e ingestão de logs em tempo real. Use quando precisar executar scripts Python ou binários em background com monitoramento de progresso, logs de saída e limpeza garantida. license: MIT compatibility: opencode allowed-tools: Read, Grep, Glob, Bash, Write metadata: author: Reversa Engine (padrão MiroFish-Offline SimulationRunner) version: "1.0.0" domain: process triggers: processo, background, runner, lifecycle, daemon, subprocess role: orchestrator scope: system output-format: json related-skills: machine-states, file-ipc, graph-memory-updater inspired-by: MiroFish-Offline simulation_runner.py

Process Lifecycle Manager (P11)

Visão Geral

runner.py implementa um gerenciador de ciclo de vida para processos background com suporte cross-platform. Inspirado pelo SimulationRunner do MiroFish-Offline (~2100 linhas em simulation_runner.py), este módulo fornece controle completo sobre subprocessos: iniciação, monitoramento por thread, parsing de logs em tempo real, pausa/resume, finalização controlada e limpeza de recursos.

Arquitetura

┌─────────────────────────────────────────────────────────────┐
│                    ProcessRunner (singleton)                 │
├─────────────┬───────────────┬────────────────┬──────────────┤
│  _processes │   _states     │ _monitor_threads│  IS_WINDOWS │
│  Dict[str,  │  Dict[str,    │ Dict[str,       │  bool       │
│  Popen]     │  ProcessState]│ Thread]         │             │
├─────────────┴───────┬───────┴────────────────┴──────────────┤
│                     Métodos                                │
│  start()  stop()  pause()  resume()                         │
│  get_state()  cleanup_all()  demo()                         │
│  _monitor()  _kill_process()                                │
└─────────────────────────────────────────────────────────────┘
         │
         ▼
┌─────────────────────────────────────────────────────────────┐
│                    ProcessState                              │
├─────────────────────────────────────────────────────────────┤
│  process_id: str               Identificador único           │
│  status: RunnerStatus          Estado atual                  │
│  pid: Optional[int]            PID do processo               │
│  started_at: Optional[str]     Timestamp de início           │
│  completed_at: Optional[str]   Timestamp de fim              │
│  current_step: int             Passo atual                   │
│  total_steps: int              Total de passos               │
│  progress_percent: float       Progresso 0-100%             │
│  error: Optional[str]          Mensagem de erro             │
│  log_path: Optional[str]       Caminho do arquivo de log    │
│  sub_status: Dict[str,bool]    Tracking dual-platform        │
└─────────────────────────────────────────────────────────────┘

Estados do RunnerStatus

Estado Descrição
IDLE Estado inicial, processo não iniciado
STARTING Inicializando processo
RUNNING Processo em execução
PAUSED Processo pausado (SIGSTOP no Unix)
STOPPING Processo sendo finalizado
STOPPED Processo finalizado normalmente
COMPLETED Processo concluído com exit_code=0
FAILED Processo concluído com exit_code != 0

Tracking Dual-Platform

O campo sub_status (Dict[str, bool]) permite tracking simultâneo de dois subsistemas ou plataformas (ex: twitter + reddit). Cada chave representa um subsistema; o valor bool indica se foi concluído:

{
  "sub_status": {
    "twitter": true,
    "reddit": false
  }
}

Métodos

start(process_id, cmd, cwd, env, total_steps, log_dir) → ProcessState

Inicia um processo em background. Cria diretório de logs, configura ambiente (PYTHONUTF8=1, encoding=utf-8), inicia subprocess.Popen com start_new_session=True, persiste estado em JSON, inicia thread monitor.

stop(process_id, timeout=10) → ProcessState

Finaliza processo. Windows: taskkill /T /PID. Unix: killpg(SIGTERM) com fallback killpg(SIGKILL). Fallback genérico: process.terminate() → process.kill(). Define status=STOPPED.

pause(process_id) → ProcessState

Pausa processo. Unix: SIGSTOP para o grupo. Windows: suspensão via thread. Define status=PAUSED.

resume(process_id) → ProcessState

Retoma processo pausado. Unix: SIGCONT para o grupo. Define status=RUNNING.

get_state(process_id) → Optional[ProcessState]

Retorna o estado atual, in-memory ou de arquivo JSON.

get_actions(process_id, limit=50) → List[Dict]

Parseia o arquivo de log e extrai ações registradas. Cada ação inclui agent_id, action_type, args, confidence, timestamp.

get_timeline(process_id) → List[Dict]

Retorna timeline completa de eventos do processo (início, cada passo, erros, conclusão) a partir do log.

get_agent_stats(process_id) → Dict

Agrega estatísticas por agente: total de ações por tipo, confiança média, taxa de sucesso.

cleanup_logs(process_id)

Remove arquivos de log antigos do processo.

cleanup_all()

Finaliza todos os processos e limpa threads.

Tipos de Ação (Simulação)

Tipo Descrição
CREATE_POST Criar postagem
LIKE_POST Curtir postagem
REPLY_POST Responder postagem
RETWEET Retweetar
FOLLOW Seguir usuário
UNFOLLOW Deixar de seguir
SEND_MESSAGE Enviar mensagem direta
REPORT Denunciar conteúdo
BLOCK Bloquear usuário
SEARCH Pesquisar conteúdo
SCRAPE Coletar dados
ANALYZE Analisar dados

Escala de Confiança

Nível Valor Descrição
CONFIRMADO 1.0 Ação verificada e confirmada
INFERIDO 0.7 Ação inferida por padrão de log
LACUNA 0.3 Ação inferida com baixa confiança
DESCONHEC 0.0 Sem informação disponível

Exemplos de Uso

from skills.process-lifecycle.scripts.runner import ProcessRunner, RunnerStatus

# Iniciar processo
state = ProcessRunner.start("sim1", ["python", "simulate.py"],
                            cwd="simulacoes", total_steps=50)

# Verificar status
print(ProcessRunner.get_state("sim1").to_dict())

# Pausar e retomar
ProcessRunner.pause("sim1")
ProcessRunner.resume("sim1")

# Parar
ProcessRunner.stop("sim1")

# Modo demo
ProcessRunner.demo()

Arquivos

Arquivo Descrição
scripts/runner.py Implementação principal
references/pseudocode.md Pseudocódigo e diagramas

Dependências

  • Python 3.10+
  • subprocess, threading, atexit (stdlib)
  • signal (Unix), taskkill (Windows)
Install via CLI
npx skills add https://github.com/MarceloClaro/OpenCode_Ecosystem --skill process-lifecycle
Repository Details
star Stars 35
call_split Forks 17
navigation Branch main
article Path SKILL.md
More from Creator
MarceloClaro
MarceloClaro Explore all skills →