snakemake_bridge (Dart)
Módulo para embarcar um monitor de workflows Snakemake numa
aplicação Dart Desktop. Contraparte do plugin Python
snakemake-logger-plugin-dart.
Arquitetura e protocolo:
ARCHITECTURE.md.
Instalação
dependencies:
snakemake_bridge: ^0.1.0
Conteúdo
| Arquivo | Papel |
|---|---|
lib/src/workflow_server.dart |
Servidor WebSocket embarcado (shelf), bind em 127.0.0.1, valida token, deduplica por seq, pede replay a cada reconexão. |
lib/src/workflow_events.dart |
Modelos tipados dos eventos (sealed classes, sem codegen; tipos desconhecidos viram UnknownEvent). |
lib/src/workflow_state.dart |
Reducer: stream de eventos → estado consultável do run (jobs, progresso, DAG, logs, erros). |
lib/src/snakemake_runner.dart |
Lança e é dono do processo snakemake (cancelamento = SIGTERM). |
example/snakemake_bridge_example.dart |
"App" headless mínimo para testar a ponte pelo terminal. |
Uso no app
final token = WorkflowServer.generateToken();
final server = WorkflowServer(token: token);
await server.start();
final state = WorkflowRunState();
server.events.listen((event) {
if (state.apply(event)) notifyUi(); // ChangeNotifier / Riverpod / Bloc
});
final runner = await SnakemakeRunner.start(
workflowDir: '/caminho/do/workflow',
serverPort: server.boundPort,
token: token,
);
// cancelar: await runner.cancel();
// desfecho: await runner.exitCode;
Teste rápido sem Snakemake
SNAKEMAKE_LOGGER_DART_TOKEN=dev dart run example/snakemake_bridge_example.dart
# em outro terminal, rode o Snakemake (ou o plugin) apontando para a porta impressa
Testes
dart pub get
dart test
Libraries
- snakemake_bridge
- Ponte desktop Snakemake ⇄ Dart.