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 del REPL de Symbiont

## Otros idiomas


> **¿Buscas una TUI interactiva?** [`symbi shell`]/symbi-shell (Beta) envuelve el mismo motor `repl_core` que cubre esta guia, mas un orquestador LLM, un catalogo completo de comandos (`/spawn`, `/run`, `/chain`, …) y attach remoto. Usa el REPL cuando quieras una superficie JSON-RPC scriptable para integracion con IDEs; usa la shell cuando quieras autoria conversacional contra el mismo runtime.

## Caracteristicas

- **Evaluacion Interactiva de DSL**: Ejecutar codigo DSL de Symbiont en tiempo real
- **Gestion del Ciclo de Vida de Agentes**: Crear, iniciar, detener, pausar, reanudar y destruir agentes
- **Monitoreo de Ejecucion**: Monitoreo en tiempo real de la ejecucion de agentes con estadisticas y trazas
- **Aplicacion de Politicas**: Verificacion de politicas y control de capacidades integrados
- **Gestion de Sesiones**: Crear instantaneas y restaurar sesiones del REPL
- **Protocolo JSON-RPC**: Acceso programatico via JSON-RPC sobre stdio
- **Soporte LSP**: Language Server Protocol para integracion con IDEs

## Primeros Pasos

### Iniciar el REPL

```bash
# Interactive REPL mode
symbi repl

# JSON-RPC server mode over stdio (for IDE integration)
symbi repl --stdio
```

> **Nota:** El flag `--config` aun no esta soportado. La configuracion se lee desde la ubicacion predeterminada `symbiont.toml`. El soporte para configuracion personalizada esta planificado para una futura version.

### Uso Basico

```rust
# Define an agent
agent GreetingAgent {
  name: "Greeting Agent"
  version: "1.0.0"
  description: "A simple greeting agent"
}

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

# Execute expressions
let message = "Welcome to Symbiont"
print(message)
```

## Comandos del REPL

### Gestion de Agentes

| Comando | Descripcion |
|---------|-------------|
| `:agents` | Listar todos los agentes |
| `:agent list` | Listar todos los agentes |
| `:agent start <id>` | Iniciar un agente |
| `:agent stop <id>` | Detener un agente |
| `:agent pause <id>` | Pausar un agente |
| `:agent resume <id>` | Reanudar un agente pausado |
| `:agent destroy <id>` | Destruir un agente |
| `:agent execute <id> <behavior> [args]` | Ejecutar comportamiento de un agente |
| `:agent debug <id>` | Mostrar informacion de depuracion de un agente |

### Comandos de Monitoreo

| Comando | Descripcion |
|---------|-------------|
| `:monitor stats` | Mostrar estadisticas de ejecucion |
| `:monitor traces [limit]` | Mostrar trazas de ejecucion |
| `:monitor report` | Mostrar informe detallado de ejecucion |
| `:monitor clear` | Limpiar datos de monitoreo |

### Comandos de Memoria

| Comando | Descripcion |
|---------|-------------|
| `:memory inspect <agent-id>` | Inspeccionar el estado de memoria de un agente |
| `:memory compact <agent-id>` | Compactar almacenamiento de memoria de un agente |
| `:memory purge <agent-id>` | Purgar toda la memoria de un agente |

### Comandos de Webhook

| Comando | Descripcion |
|---------|-------------|
| `:webhook list` | Listar webhooks configurados |
| `:webhook add` | Agregar un nuevo webhook |
| `:webhook remove` | Eliminar un webhook |
| `:webhook test` | Probar un webhook |
| `:webhook logs` | Mostrar registros de webhook |

### Comandos de Grabacion

| Comando | Descripcion |
|---------|-------------|
| `:record on <file>` | Iniciar grabacion de la sesion a un archivo |
| `:record off` | Detener grabacion de la sesion |

### Comandos de Sesion

| Comando | Descripcion |
|---------|-------------|
| `:snapshot` | Crear una instantanea de la sesion |
| `:clear` | Limpiar la sesion |
| `:help` o `:h` | Mostrar mensaje de ayuda |
| `:version` | Mostrar informacion de version |

## Caracteristicas del DSL

### Definiciones 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
  }
}
```

### Definiciones de Comportamiento

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

  steps {
    # Check data privacy requirements
    require capability("data_read")

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

    # Perform analysis
    # NOTE: analyze() is a planned built-in function (not yet implemented).
    # This example illustrates the intended behavior definition pattern.
    let results = analyze(data, options)
    emit analysis_completed { results: results }

    return results
  }
}
```

### Funciones Integradas

| Funcion | Descripcion | Ejemplo |
|---------|-------------|---------|
| `print(...)` | Imprimir valores en la salida | `print("Hello", name)` |
| `len(value)` | Obtener la longitud de una cadena, lista o mapa | `len("hello")` -> `5` |
| `upper(string)` | Convertir cadena a mayusculas | `upper("hello")` -> `"HELLO"` |
| `lower(string)` | Convertir cadena a minusculas | `lower("HELLO")` -> `"hello"` |
| `format(template, ...)` | Formatear cadena con argumentos | `format("Hello, {}!", name)` |

> **Funciones integradas planificadas:** Las funciones avanzadas de E/S como `read_file()`, `read_csv()`, `write_results()`, `analyze()` y `transform_data()` aun no estan implementadas. Estan planificadas para una futura version.

### Tipos de Datos

```rust
# Basic types
let name = "Alice"          # String
let age = 30               # Integer
let height = 5.8           # Number
let active = true          # Boolean
let empty = null           # Null

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

# Time and size units
let timeout = 30s          # Duration
let max_size = 100MB       # Size
```

## Arquitectura

### Componentes

```
symbi repl
├── repl-cli/          # CLI interface and JSON-RPC server
├── repl-core/         # Core REPL engine and evaluator
├── repl-proto/        # JSON-RPC protocol definitions
└── repl-lsp/          # Language Server Protocol implementation
```

### Componentes Principales

- **DslEvaluator**: Ejecuta programas DSL con integracion al runtime
- **ReplEngine**: Coordina la evaluacion y el manejo de comandos
- **ExecutionMonitor**: Rastrea estadisticas y trazas de ejecucion
- **RuntimeBridge**: Se integra con el runtime de Symbiont para la aplicacion de politicas
- **SessionManager**: Gestiona instantaneas y estado de sesion

### Protocolo JSON-RPC

El REPL soporta JSON-RPC 2.0 para acceso programatico:

```json
// Evaluate DSL code
{
  "jsonrpc": "2.0",
  "method": "evaluate",
  "params": {"input": "let x = 42"},
  "id": 1
}

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

## Seguridad y Aplicacion de Politicas

### Verificacion de Capacidades

El REPL aplica los requisitos de capacidades definidos en los bloques de seguridad de los agentes:

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

behavior ReadFile {
  input { path: string }
  output { content: string }
  steps {
    # This will check if agent has "filesystem" capability
    require capability("filesystem")
    # NOTE: read_file() is a planned built-in function (not yet implemented).
    # This example illustrates how capability checking works.
    let content = read_file(path)
    return content
  }
}
```

### Integracion de Politicas

El REPL se integra con el motor de politicas de Symbiont para aplicar controles de acceso y requisitos de auditoria.

## Depuracion y Monitoreo

### Trazas de Ejecucion

```
: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]
```

### Estadisticas

```
: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
```

### Depuracion 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
```

## Integracion con IDEs

### Language Server Protocol

El REPL proporciona soporte LSP para integracion con IDEs a traves del crate `repl-lsp`. El servidor LSP se inicia por separado del REPL:

```bash
# The LSP server is provided by the repl-lsp crate and launched
# by your editor's LSP client configuration (not via symbi repl flags).
```

> **Nota:** El flag `--lsp` no esta soportado en `symbi repl`. El LSP esta implementado en el crate `repl-lsp` y debe configurarse a traves de la configuracion LSP de su editor.

### Caracteristicas Soportadas

- Resaltado de sintaxis
- Diagnosticos de errores
- Sincronizacion de texto

**Caracteristicas planificadas** (aun no implementadas):
- Autocompletado de codigo
- Informacion al pasar el cursor
- Ir a la definicion
- Busqueda de simbolos

## Mejores Practicas

### Flujo de Trabajo de Desarrollo

1. **Comenzar con Expresiones Simples**: Probar construcciones basicas del DSL
2. **Definir Agentes Incrementalmente**: Comenzar con definiciones minimas de agentes
3. **Probar Comportamientos por Separado**: Definir y probar comportamientos antes de la integracion
4. **Usar Monitoreo**: Aprovechar el monitoreo de ejecucion para depuracion
5. **Crear Instantaneas**: Guardar estados de sesion importantes

### Consejos de Rendimiento

- Usar `:monitor clear` periodicamente para reiniciar datos de monitoreo
- Limitar el historial de trazas con `:monitor traces <limit>`
- Destruir agentes no utilizados para liberar recursos
- Usar instantaneas para estados de sesion complejos

### Consideraciones de Seguridad

- Siempre definir capacidades apropiadas para los agentes
- Probar la aplicacion de politicas en desarrollo
- Usar modo sandbox para codigo no confiable
- Monitorear trazas de ejecucion para eventos de seguridad

## Solucion de Problemas

### Problemas Comunes

**Fallo en la Creacion del Agente**
```
Error: Missing capability: filesystem
```
*Solucion*: Agregar las capacidades requeridas al bloque de seguridad del agente

**Tiempo de Ejecucion Agotado**
```
Error: Maximum execution depth exceeded
```
*Solucion*: Verificar si hay recursion infinita en la logica de comportamiento

**Violacion de Politica**
```
Error: Policy violation: data access denied
```
*Solucion*: Verificar que el agente tiene los permisos apropiados

### Comandos de Depuracion

```rust
# Check agent state
:agent debug <agent-id>

# View execution traces
:monitor traces 50

# Check system statistics
:monitor stats

# Create debug snapshot
:snapshot
```

## Ejemplos

### Agente Simple

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

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

# Test the behavior
let result = Add(5, 3)
print("5 + 3 =", result)
```

### Agente de Procesamiento de Datos

```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")

    # NOTE: read_csv(), transform_data(), and write_results() are planned
    # built-in functions (not yet implemented). This example illustrates
    # the intended pattern for data processing behaviors.
    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"
    }
  }
}
```

## Vease Tambien

- [Guia DSL]dsl-guide.md - Referencia completa del lenguaje DSL
- [Arquitectura del Runtime]runtime-architecture.md - Vision general de la arquitectura del sistema
- [Modelo de Seguridad]security-model.md - Detalles de la implementacion de seguridad
- [Referencia de API]api-reference.md - Documentacion completa de la API