feat: adicionar plugin acidaos e skill prompt-refine

Plugin acidaos (novo):
- rust-dev: desenvolvimento Core em Rust (Axum, crates, debug compiler)
- spoke-dev: desenvolvimento Spokes em Next.js/TypeScript + Storybook
- devops: pipelines Gitea Actions CI/CD (adaptado de GitHub para Gitea)
- docs: rustdoc, TypeDoc, Outline e ADRs

dev-tools:
- prompt-refine: skill genérica de engenharia de prompts para agentes IA

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-12 22:11:22 +00:00
parent 6b3a6f2698
commit 24b0b68ed0
6 changed files with 1138 additions and 0 deletions
+232
View File
@@ -0,0 +1,232 @@
---
name: rust-dev
description: Desenvolvimento do AcidaOS Core em Rust — criar crates, definir endpoints Axum, debugar erros do compilador. Usar quando "rust", "axum", "cargo", "crate", "core", "acidaos core", "rust error", "borrow checker", desenvolvimento do motor central do AcidaOS.
allowed-tools: Read, Write, Edit, Bash, mcp__memory-supabase__search_memories, mcp__gitea__get_file_content, mcp__gitea__create_file, mcp__gitea__update_file
---
# AcidaOS Rust Dev
Skill para desenvolvimento do **Core do AcidaOS** em Rust.
## Contexto do Projecto
```
acidaos-core (Rust)
├── src/
│ ├── api/ ← endpoints Axum (REST/gRPC)
│ ├── kernel/ ← Agent Kernel & Scheduler
│ ├── security/ ← Sandboxing, isolamento WASM
│ ├── memory/ ← Context & Memory Engine
│ ├── registry/ ← Parsers de skills/plugins
│ ├── observability/← Logging, tracing
│ └── ethics/ ← Constitution Engine
├── crates/ ← bibliotecas internas
└── Cargo.toml
```
**Stack:** Rust stable | Axum | Tokio | Serde | Tracing | SQLx | wasmtime
## Protocolo Inicial
```
mcp__memory-supabase__search_memories "acidaos core [componente]"
mcp__gitea__get_file_content acidaos-core/Cargo.toml # verificar dependências actuais
```
---
## Operações
### 1. Criar novo crate (`/rust-create-crate`)
**Input:** Nome do crate e propósito
**Passos:**
1. Criar directório `crates/<nome>/`
2. Gerar `Cargo.toml` com dependências mínimas
3. Criar `src/lib.rs` com estrutura base
4. Adicionar ao workspace `Cargo.toml`
5. Criar `src/error.rs` com tipo de erro custom usando `thiserror`
**Template `Cargo.toml`:**
```toml
[package]
name = "acidaos-<nome>"
version = "0.1.0"
edition = "2021"
description = "<descrição>"
[dependencies]
tracing = "0.1"
serde = { version = "1", features = ["derive"] }
thiserror = "1"
tokio = { version = "1", features = ["full"] }
```
**Template `src/lib.rs`:**
```rust
//! # acidaos-<nome>
//!
//! <Descrição do módulo>
//!
//! ## Exemplo
//! ```rust
//! use acidaos_<nome>::<TipoPrincipal>;
//! ```
mod error;
pub use error::Error;
pub type Result<T> = std::result::Result<T, Error>;
```
**Template `src/error.rs`:**
```rust
use thiserror::Error;
#[derive(Debug, Error)]
pub enum Error {
#[error("Erro de inicialização: {0}")]
Init(String),
#[error("Operação não suportada: {0}")]
Unsupported(String),
}
```
---
### 2. Definir endpoint Axum (`/rust-define-api-endpoint`)
**Input:** Definição do endpoint (método, path, request/response types) de uma SPEC.md
**Template de endpoint:**
```rust
use axum::{
extract::{Path, State},
http::StatusCode,
response::Json,
routing::{get, post},
Router,
};
use serde::{Deserialize, Serialize};
use tracing::instrument;
// --- Tipos ---
#[derive(Debug, Deserialize)]
pub struct <NomeRequest> {
// campos do request
}
#[derive(Debug, Serialize)]
pub struct <NomeResponse> {
// campos do response
}
// --- Handler ---
#[instrument(skip(state))]
pub async fn <nome_handler>(
State(state): State<AppState>,
Json(req): Json<<NomeRequest>>,
) -> Result<Json<<NomeResponse>>, StatusCode> {
tracing::info!("Processando <nome>");
// lógica do handler
Ok(Json(<NomeResponse> {
// preencher response
}))
}
// --- Router ---
pub fn <nome>_router() -> Router<AppState> {
Router::new()
.route("/<path>", post(<nome_handler>))
}
```
**Princípios obrigatórios:**
- `#[instrument]` em todos os handlers (observabilidade)
- Erros retornam `StatusCode` ou tipo de erro custom (nunca `.unwrap()`)
- Estado partilhado via `State<AppState>` (não globals)
- Validação de input antes de processamento
---
### 3. Debugar erro do compilador (`/rust-debug-compiler-error`)
**Input:** Output completo de `cargo build` ou `cargo check`
**Protocolo de análise:**
1. **Identificar categoria do erro:**
| Código | Categoria | Solução típica |
|--------|-----------|----------------|
| E0382 | Move após uso | Usar `clone()` ou referências `&` |
| E0502 | Borrow conflict | Reordenar operações, usar `Arc<Mutex<>>` |
| E0308 | Type mismatch | Verificar tipos, usar `.into()` ou cast explícito |
| E0277 | Trait not impl | Implementar trait ou usar tipo diferente |
| E0499 | Multiple mut borrows | Usar `RefCell` ou reestruturar lógica |
2. **Analisar mensagem de erro completa** (incluindo `help:` e `note:`)
3. **Gerar código corrigido** com explicação da causa raiz
4. **Verificar:** `cargo check` passa antes de `cargo build`
**Padrões comuns no AcidaOS Core:**
```rust
// ❌ Move não intencional
let data = fetch_data();
process(data);
log(data); // ERRO: data foi moved
// ✅ Correcto
let data = fetch_data();
process(&data); // ou process(data.clone())
log(&data);
// ❌ Async + lifetime
async fn handler(req: &Request) -> Response { ... } // lifetime issue
// ✅ Correcto — owned ou Arc
async fn handler(req: Arc<Request>) -> Response { ... }
```
---
## Quality Gate
Antes de fazer commit:
```bash
cargo check # zero erros
cargo clippy # zero warnings
cargo test # todos os testes passam
cargo fmt --check # formatação correcta
```
**Standards:**
- Zero `unwrap()` em código de produção — usar `?` ou `expect("mensagem descritiva")`
- Funções async < 50 linhas
- `tracing::instrument` em todas as funções públicas async
- Documentação `///` em todos os tipos e funções públicas
---
## Checklist Entrega
- [ ] `cargo check` sem erros
- [ ] `cargo clippy -- -D warnings` limpo
- [ ] `cargo test` 100% pass
- [ ] Documentação `///` completa
- [ ] Observabilidade: `#[instrument]` nos handlers
- [ ] Sem `.unwrap()` em paths críticos
- [ ] CHANGELOG.md actualizado
---
**Versão**: 1.0.0 | **Autor**: Descomplicar® | **Plugin**: acidaos