symbi 1.14.2

AI-native agent framework for building autonomous, policy-aware agents that can safely collaborate with humans, other agents, and large language models
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
# Guia do REPL do Symbiont

## Outros idiomas


> **Procurando uma TUI interativa?** [`symbi shell`]/symbi-shell (Beta) envolve o mesmo motor `repl_core` que este guia cobre, mais um orquestrador LLM, um catálogo completo de comandos (`/spawn`, `/run`, `/chain`, …) e attach remoto. Use o REPL quando quiser uma superfície JSON-RPC scriptável para integração com IDEs; use o shell quando quiser autoria conversacional contra o mesmo runtime.

## Funcionalidades

- **Avaliação Interativa de DSL**: Execute código DSL do Symbiont em tempo real
- **Gerenciamento de Ciclo de Vida de Agentes**: Criar, iniciar, parar, pausar, retomar e destruir agentes
- **Monitoramento de Execução**: Monitoramento em tempo real da execução de agentes com estatísticas e traces
- **Imposição de Políticas**: Verificação de políticas e controle de capacidades integrados
- **Gerenciamento de Sessão**: Snapshot e restauração de sessões do REPL
- **Protocolo JSON-RPC**: Acesso programático via JSON-RPC sobre stdio
- **Suporte LSP**: Language Server Protocol para integração com IDEs

## Primeiros Passos

### Iniciando o REPL

```bash
# Modo REPL interativo
symbi repl

# Modo servidor JSON-RPC sobre stdio (para integração com IDE)
symbi repl --stdio
```

> **Nota:** A flag `--config` ainda não é suportada. A configuração é lida do local padrão `symbiont.toml`. Suporte a configuração personalizada está planejado para uma versão futura.

### Uso Básico

```rust
# Definir um agente
agent GreetingAgent {
  name: "Greeting Agent"
  version: "1.0.0"
  description: "A simple greeting agent"
}

# Definir um comportamento
behavior Greet {
  input { name: string }
  output { greeting: string }
  steps {
    let greeting = format("Hello, {}!", name)
    return greeting
  }
}

# Executar expressões
let message = "Welcome to Symbiont"
print(message)
```

## Comandos do REPL

### Gerenciamento de Agentes

| Comando | Descrição |
|---------|-----------|
| `:agents` | Listar todos os agentes |
| `:agent list` | Listar todos os agentes |
| `:agent start <id>` | Iniciar um agente |
| `:agent stop <id>` | Parar um agente |
| `:agent pause <id>` | Pausar um agente |
| `:agent resume <id>` | Retomar um agente pausado |
| `:agent destroy <id>` | Destruir um agente |
| `:agent execute <id> <behavior> [args]` | Executar comportamento do agente |
| `:agent debug <id>` | Mostrar informações de depuração de um agente |

### Comandos de Monitoramento

| Comando | Descrição |
|---------|-----------|
| `:monitor stats` | Mostrar estatísticas de execução |
| `:monitor traces [limit]` | Mostrar traces de execução |
| `:monitor report` | Mostrar relatório detalhado de execução |
| `:monitor clear` | Limpar dados de monitoramento |

### Comandos de Memória

| Comando | Descrição |
|---------|-----------|
| `:memory inspect <agent-id>` | Inspecionar estado de memória de um agente |
| `:memory compact <agent-id>` | Compactar armazenamento de memória de um agente |
| `:memory purge <agent-id>` | Limpar toda a memória de um agente |

### Comandos de Webhook

| Comando | Descrição |
|---------|-----------|
| `:webhook list` | Listar webhooks configurados |
| `:webhook add` | Adicionar um novo webhook |
| `:webhook remove` | Remover um webhook |
| `:webhook test` | Testar um webhook |
| `:webhook logs` | Mostrar logs de webhook |

### Comandos de Gravação

| Comando | Descrição |
|---------|-----------|
| `:record on <file>` | Iniciar gravação da sessão em um arquivo |
| `:record off` | Parar gravação da sessão |

### Comandos de Sessão

| Comando | Descrição |
|---------|-----------|
| `:snapshot` | Criar snapshot da sessão |
| `:clear` | Limpar a sessão |
| `:help` ou `:h` | Mostrar mensagem de ajuda |
| `:version` | Mostrar informações de versão |

## Funcionalidades da DSL

### Definições de Agentes

```rust
agent DataAnalyzer {
  name: "Data Analysis Agent"
  version: "2.1.0"
  description: "Analyzes datasets with privacy protection"

  security {
    capabilities: ["data_read", "analysis"]
    sandbox: true
  }

  resources {
    memory: 512MB
    cpu: 2
    storage: 1GB
  }
}
```

### Definições de Comportamento

```rust
behavior AnalyzeData {
  input {
    data: DataSet
    options: AnalysisOptions
  }
  output {
    results: AnalysisResults
  }

  steps {
    # Verificar requisitos de privacidade de dados
    require capability("data_read")

    if (data.contains_pii) {
      return error("Cannot process data with PII")
    }

    # Realizar análise
    # NOTA: analyze() é uma função integrada planejada (ainda não implementada).
    # Este exemplo ilustra o padrão pretendido de definição de comportamento.
    let results = analyze(data, options)
    emit analysis_completed { results: results }

    return results
  }
}
```

### Funções Integradas

| Função | Descrição | Exemplo |
|--------|-----------|---------|
| `print(...)` | Imprimir valores na saída | `print("Hello", name)` |
| `len(value)` | Obter comprimento de string, lista ou mapa | `len("hello")` -> `5` |
| `upper(string)` | Converter string para maiúsculas | `upper("hello")` -> `"HELLO"` |
| `lower(string)` | Converter string para minúsculas | `lower("HELLO")` -> `"hello"` |
| `format(template, ...)` | Formatar string com argumentos | `format("Hello, {}!", name)` |

> **Funções integradas planejadas:** Funções avançadas de E/S como `read_file()`, `read_csv()`, `write_results()`, `analyze()` e `transform_data()` ainda não foram implementadas. Estão planejadas para uma versão futura.

### Tipos de Dados

```rust
# Tipos básicos
let name = "Alice"          # String
let age = 30               # Integer
let height = 5.8           # Number
let active = true          # Boolean
let empty = null           # Null

# Coleções
let items = [1, 2, 3]      # List
let config = {             # Map
  "host": "localhost",
  "port": 8080
}

# Unidades de tempo e tamanho
let timeout = 30s          # Duration
let max_size = 100MB       # Size
```

## Arquitetura

### Componentes

```
symbi repl
├── repl-cli/          # Interface CLI e servidor JSON-RPC
├── repl-core/         # Motor principal do REPL e avaliador
├── repl-proto/        # Definições do protocolo JSON-RPC
└── repl-lsp/          # Implementação do Language Server Protocol
```

### Componentes Principais

- **DslEvaluator**: Executa programas DSL com integração ao runtime
- **ReplEngine**: Coordena avaliação e tratamento de comandos
- **ExecutionMonitor**: Rastreia estatísticas e traces de execução
- **RuntimeBridge**: Integra com o runtime do Symbiont para imposição de políticas
- **SessionManager**: Gerencia snapshots e estado da sessão

### Protocolo JSON-RPC

O REPL suporta JSON-RPC 2.0 para acesso programático:

```json
// Avaliar código DSL
{
  "jsonrpc": "2.0",
  "method": "evaluate",
  "params": {"input": "let x = 42"},
  "id": 1
}

// Resposta
{
  "jsonrpc": "2.0",
  "result": {"value": "42", "type": "integer"},
  "id": 1
}
```

## Segurança e Imposição de Políticas

### Verificação de Capacidades

O REPL impõe requisitos de capacidade definidos nos blocos de segurança dos agentes:

```rust
agent SecureAgent {
  name: "Secure Agent"
  security {
    capabilities: ["filesystem", "network"]
    sandbox: true
  }
}

behavior ReadFile {
  input { path: string }
  output { content: string }
  steps {
    # Isto verificará se o agente possui a capacidade "filesystem"
    require capability("filesystem")
    # NOTA: read_file() é uma função integrada planejada (ainda não implementada).
    # Este exemplo ilustra como a verificação de capacidades funciona.
    let content = read_file(path)
    return content
  }
}
```

### Integração com Políticas

O REPL integra-se com o motor de políticas do Symbiont para impor controles de acesso e requisitos de auditoria.

## Depuração e Monitoramento

### Traces de Execução

```
:monitor traces 10

Recent Execution Traces:
  14:32:15.123 - AgentCreated [Agent: abc-123] (2ms)
  14:32:15.125 - AgentStarted [Agent: abc-123] (1ms)
  14:32:15.130 - BehaviorExecuted [Agent: abc-123] (5ms)
  14:32:15.135 - AgentPaused [Agent: abc-123]
```

### Estatísticas

```
:monitor stats

Execution Monitor Statistics:
  Total Executions: 42
  Successful: 38
  Failed: 4
  Success Rate: 90.5%
  Average Duration: 12.3ms
  Total Duration: 516ms
  Active Executions: 2
```

### Depuração de Agentes

```
:agent debug abc-123

Agent Debug Information:
  ID: abc-123-def-456
  Name: Data Analyzer
  Version: 2.1.0
  State: Running
  Created: 2024-01-15 14:30:00 UTC
  Description: Analyzes datasets with privacy protection
  Author: data-team@company.com
  Available Functions/Behaviors: 5
  Required Capabilities: 2
    - data_read
    - analysis
  Resource Configuration:
    Memory: 512MB
    CPU: 2
    Storage: 1GB
```

## Integração com IDEs

### Language Server Protocol

O REPL oferece suporte LSP para integração com IDEs através do crate `repl-lsp`. O servidor LSP é iniciado separadamente do REPL em si:

```bash
# O servidor LSP é fornecido pelo crate repl-lsp e iniciado
# pela configuração do cliente LSP do seu editor (não via flags do symbi repl).
```

> **Nota:** A flag `--lsp` não é suportada no `symbi repl`. O LSP é implementado no crate `repl-lsp` e deve ser configurado através das configurações de LSP do seu editor.

### Funcionalidades Suportadas

- Destaque de sintaxe
- Diagnósticos de erros
- Sincronização de texto

**Funcionalidades planejadas** (ainda não implementadas):
- Autocompletar código
- Informações ao passar o cursor
- Ir para definição
- Busca de símbolos

## Boas Práticas

### Fluxo de Desenvolvimento

1. **Comece com Expressões Simples**: Teste construções básicas da DSL
2. **Defina Agentes Incrementalmente**: Comece com definições mínimas de agentes
3. **Teste Comportamentos Separadamente**: Defina e teste comportamentos antes da integração
4. **Use o Monitoramento**: Aproveite o monitoramento de execução para depuração
5. **Crie Snapshots**: Salve estados importantes da sessão

### Dicas de Desempenho

- Use `:monitor clear` periodicamente para limpar dados de monitoramento
- Limite o histórico de traces com `:monitor traces <limit>`
- Destrua agentes não utilizados para liberar recursos
- Use snapshots para estados complexos de sessão

### Considerações de Segurança

- Sempre defina capacidades apropriadas para os agentes
- Teste a imposição de políticas durante o desenvolvimento
- Use o modo sandbox para código não confiável
- Monitore traces de execução para eventos de segurança

## Solução de Problemas

### Problemas Comuns

**Falha na Criação do Agente**
```
Error: Missing capability: filesystem
```
*Solução*: Adicione as capacidades necessárias ao bloco de segurança do agente

**Timeout de Execução**
```
Error: Maximum execution depth exceeded
```
*Solução*: Verifique se há recursão infinita na lógica do comportamento

**Violação de Política**
```
Error: Policy violation: data access denied
```
*Solução*: Verifique se o agente possui as permissões apropriadas

### Comandos de Depuração

```rust
# Verificar estado do agente
:agent debug <agent-id>

# Ver traces de execução
:monitor traces 50

# Verificar estatísticas do sistema
:monitor stats

# Criar snapshot de depuração
:snapshot
```

## Exemplos

### Agente Simples

```rust
agent Calculator {
  name: "Basic Calculator"
  version: "1.0.0"
}

behavior Add {
  input { a: number, b: number }
  output { result: number }
  steps {
    return a + b
  }
}

# Testar o comportamento
let result = Add(5, 3)
print("5 + 3 =", result)
```

### Agente de Processamento de Dados

```rust
agent DataProcessor {
  name: "Data Processing Agent"
  version: "1.0.0"

  security {
    capabilities: ["data_read", "data_write"]
    sandbox: true
  }

  resources {
    memory: 256MB
    cpu: 1
  }
}

behavior ProcessCsv {
  input { file_path: string }
  output { summary: ProcessingSummary }

  steps {
    require capability("data_read")

    # NOTA: read_csv(), transform_data() e write_results() são funções
    # integradas planejadas (ainda não implementadas). Este exemplo ilustra
    # o padrão pretendido para comportamentos de processamento de dados.
    let data = read_csv(file_path)
    let processed = transform_data(data)

    require capability("data_write")
    write_results(processed)

    return {
      "rows_processed": len(data),
      "status": "completed"
    }
  }
}
```

## Veja Também

- [Guia DSL]dsl-guide.md - Referência completa da linguagem DSL
- [Arquitetura de Runtime]runtime-architecture.md - Visão geral da arquitetura do sistema
- [Modelo de Segurança]security-model.md - Detalhes da implementação de segurança
- [Referência da API]api-reference.md - Documentação completa da API