feat(cybersecurity): auto-commit con 48 cambios

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-04 23:44:39 +02:00
parent efc9911925
commit 729921e16e
48 changed files with 3765 additions and 8 deletions
+25
View File
@@ -0,0 +1,25 @@
---
name: identity
lang: go
domain: cybersecurity
version: "1.0.0"
algebraic: product
definition: |
type Identity struct {
SignPub []byte
SignPriv []byte
KexPub []byte
KexPriv []byte
}
description: "Identidad criptográfica dual de un participante en el bus de mensajería. Contiene un par Ed25519 para firma (SignPub/SignPriv) y un par X25519 para intercambio de claves (KexPub/KexPriv)."
tags: [messaging, e2e-crypto, crypto, identity, ed25519, x25519, e2e-messaging]
uses_types: []
file_path: "functions/cybersecurity/generate_identity.go"
---
## Notas
- `SignPub` (32 bytes) y `SignPriv` (64 bytes): par Ed25519. SignPriv concatena seed (32) + pubkey (32).
- `KexPub` (32 bytes) y `KexPriv` (32 bytes): par Curve25519 para sealed box anónimo.
- Generado exclusivamente con `GenerateIdentity()`. No construir manualmente.
- Publicar solo `SignPub` + `KexPub` en el directorio de participantes; nunca las claves privadas.
+27
View File
@@ -0,0 +1,27 @@
---
name: claude_tui_parse
lang: go
domain: tui
version: "1.0.0"
algebraic: product
definition: |
type ClaudeTUIParse struct {
Turns []ClaudeTurn `json:"turns"`
Answer string `json:"answer"`
}
description: "Resultado del parseo de una pantalla capturada de la TUI de Claude Code. Turns contiene todos los bloques de conversación visibles en orden (user, assistant, tool_use, tool_result). Answer es la concatenación de los bloques assistant que siguen al último turno user — equivalente al output de `claude -p`."
tags: [terminal-capture, claude, tui, conversation]
uses_types:
- claude_turn_go_tui
file_path: "functions/tui/parse_claude_tui.go"
---
## Notas
`Answer` se calcula así:
1. Localizar el último turno con `Role == user`.
2. Concatenar con `\n` el `Text` de todos los turnos `assistant` (no `tool_use`, no `tool_result`) que aparecen después.
3. Si no hay ningún turno `user`, concatenar todos los `assistant`.
4. Hacer trim del resultado.
Este valor es el equivalente programático de lo que imprime `claude -p` cuando la respuesta termina. Es vacío si la pantalla capturada no contiene respuesta del asistente (por ejemplo, captura prematura durante el streaming).
+36
View File
@@ -0,0 +1,36 @@
---
name: claude_turn
lang: go
domain: tui
version: "1.0.0"
algebraic: product
definition: |
type ClaudeTurnRole string
const (
ClaudeTurnUser ClaudeTurnRole = "user"
ClaudeTurnAssistant ClaudeTurnRole = "assistant"
ClaudeTurnToolUse ClaudeTurnRole = "tool_use"
ClaudeTurnToolResult ClaudeTurnRole = "tool_result"
)
type ClaudeTurn struct {
Role ClaudeTurnRole `json:"role"`
Text string `json:"text"`
ToolName string `json:"tool_name,omitempty"`
}
description: "Un bloque de la conversación extraído de la pantalla renderizada de la TUI de Claude Code. El campo Role clasifica el tipo de turno; Text contiene el contenido textual (multilinea unido con \\n); ToolName solo se rellena cuando Role == tool_use."
tags: [terminal-capture, claude, tui, conversation]
uses_types: []
file_path: "functions/tui/parse_claude_tui.go"
---
## Notas
`ClaudeTurnRole` es un string enum con cuatro valores:
- `user` — mensaje escrito por el usuario (línea que empieza con ``).
- `assistant` — bloque de texto de respuesta del asistente (línea que empieza con `●` y no es una llamada a herramienta).
- `tool_use` — llamada a herramienta `● ToolName(args)`. `ToolName` contiene el identificador de la herramienta.
- `tool_result` — resultado de herramienta `⎿ ...`. Asociado al `tool_use` inmediatamente anterior.
El tipo vive en `functions/tui/parse_claude_tui.go` junto al resto de la función, en el mismo paquete `tui`.