claude-code-arcane 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/agents/engineering/e2e-tester.md +65 -0
- package/agents/engineering/nestjs-engineer.md +74 -0
- package/agents/engineering/nextjs-engineer.md +72 -0
- package/agents/engineering/nextjs-reviewer.md +40 -0
- package/dist/cli.js +105 -6
- package/docs/trusted-publishing-setup.md +163 -0
- package/package.json +1 -1
- package/profiles/backend-nestjs.yaml +58 -0
- package/profiles/backend-nextjs.yaml +56 -0
- package/rules/nestjs-code.md +73 -0
- package/rules/nextjs-code.md +60 -0
- package/rules/react-perf.md +59 -0
- package/skills/ai-sdk-setup/SKILL.md +82 -0
- package/skills/nestjs-best-practices/SKILL.md +70 -0
- package/skills/nestjs-best-practices/references/api-design.md +34 -0
- package/skills/nestjs-best-practices/references/architecture.md +53 -0
- package/skills/nestjs-best-practices/references/database.md +37 -0
- package/skills/nestjs-best-practices/references/dependency-injection.md +45 -0
- package/skills/nestjs-best-practices/references/error-handling.md +43 -0
- package/skills/nestjs-best-practices/references/microservices-devops.md +41 -0
- package/skills/nestjs-best-practices/references/performance.md +32 -0
- package/skills/nestjs-best-practices/references/security.md +50 -0
- package/skills/nestjs-best-practices/references/testing.md +32 -0
- package/skills/nestjs-scaffold/SKILL.md +75 -0
- package/skills/nextjs-best-practices/SKILL.md +64 -0
- package/skills/nextjs-best-practices/references/advanced.md +21 -0
- package/skills/nextjs-best-practices/references/bundle-size.md +32 -0
- package/skills/nextjs-best-practices/references/client-fetching.md +20 -0
- package/skills/nextjs-best-practices/references/javascript.md +47 -0
- package/skills/nextjs-best-practices/references/rendering.md +46 -0
- package/skills/nextjs-best-practices/references/rerender.md +55 -0
- package/skills/nextjs-best-practices/references/server.md +47 -0
- package/skills/nextjs-best-practices/references/waterfalls.md +41 -0
- package/skills/nextjs-scaffold/SKILL.md +76 -0
- package/skills/pgvector-search/SKILL.md +67 -0
- package/skills/seo-nextjs/SKILL.md +81 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pgvector-search
|
|
3
|
+
description: "Búsqueda semántica con Postgres + pgvector: embeddings, schema con columna vector, índices HNSW/IVFFlat, queries de similitud y RAG. Usar para implementar semantic search o retrieval sobre Postgres."
|
|
4
|
+
category: "backend"
|
|
5
|
+
argument-hint: "[setup|index|query|rag]"
|
|
6
|
+
user-invocable: true
|
|
7
|
+
allowed-tools: Read, Glob, Grep, Bash, Write, Edit, Task
|
|
8
|
+
---
|
|
9
|
+
# pgvector-search — Búsqueda semántica con Postgres
|
|
10
|
+
|
|
11
|
+
## MANDATORY WORKFLOW
|
|
12
|
+
|
|
13
|
+
**Antes de generar o modificar código/schema, completar estos pasos en orden.**
|
|
14
|
+
|
|
15
|
+
### Step 0: Gather Requirements
|
|
16
|
+
1. **Modelo de embeddings** y dimensión (ej: OpenAI `text-embedding-3-small` = 1536; Cohere = 1024)
|
|
17
|
+
2. **Volumen** de vectores (define el índice: HNSW para alta recall, IVFFlat para datasets grandes/escritura frecuente)
|
|
18
|
+
3. **Métrica de distancia:** cosine (`<=>`, default para texto) / L2 (`<->`) / inner product (`<#>`)
|
|
19
|
+
4. ¿Es para RAG (retrieval + LLM) o solo ranking de similitud?
|
|
20
|
+
|
|
21
|
+
### Step 1: Habilitar extensión + schema
|
|
22
|
+
```sql
|
|
23
|
+
CREATE EXTENSION IF NOT EXISTS vector;
|
|
24
|
+
CREATE TABLE documents (
|
|
25
|
+
id bigserial PRIMARY KEY,
|
|
26
|
+
content text NOT NULL,
|
|
27
|
+
embedding vector(1536) NOT NULL,
|
|
28
|
+
metadata jsonb
|
|
29
|
+
);
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Step 2: Índice
|
|
33
|
+
```sql
|
|
34
|
+
-- HNSW: mejor recall/latencia, recomendado por defecto
|
|
35
|
+
CREATE INDEX ON documents USING hnsw (embedding vector_cosine_ops);
|
|
36
|
+
-- IVFFlat (alternativa para datasets muy grandes): definir lists ≈ rows/1000
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Step 3: Insertar embeddings
|
|
40
|
+
Generar el embedding del `content` con el modelo y guardarlo. (Si usás Next + AI SDK, ver skill `ai-sdk-setup`.)
|
|
41
|
+
```ts
|
|
42
|
+
const { embedding } = await embed({ model, value: content });
|
|
43
|
+
await sql`INSERT INTO documents (content, embedding) VALUES (${content}, ${JSON.stringify(embedding)})`;
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Step 4: Query de similitud
|
|
47
|
+
```sql
|
|
48
|
+
SELECT content, 1 - (embedding <=> $1) AS similarity
|
|
49
|
+
FROM documents
|
|
50
|
+
ORDER BY embedding <=> $1 -- usa el índice
|
|
51
|
+
LIMIT 5;
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Step 5: Buenas prácticas
|
|
55
|
+
- **Chunking** del contenido antes de embeddear (no documentos enteros)
|
|
56
|
+
- Filtrar por `metadata` (jsonb) + similitud para hybrid search
|
|
57
|
+
- `SET hnsw.ef_search` para tunear recall vs latencia
|
|
58
|
+
- Re-embeddear si cambia el modelo (la dimensión debe matchear)
|
|
59
|
+
- No mezclar embeddings de modelos distintos en la misma columna
|
|
60
|
+
|
|
61
|
+
## Cierre
|
|
62
|
+
|
|
63
|
+
Verificar que el índice se usa (`EXPLAIN ANALYZE` debe mostrar Index Scan, no Seq Scan) y medir recall/latencia con queries reales. Schema + índice + query validados → setup **READY**. Confirmar cambios de schema con el usuario antes de aplicarlos. Siguiente paso: skill `ai-sdk-setup` para generar embeddings, o `database-indexing` para tuning.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
_Inspirado en `postgres-semantic-search` de [laguagu/claude-code-nextjs-skills](https://github.com/laguagu/claude-code-nextjs-skills). Adaptado al formato Arcane. Relacionado: skill `database-indexing`._
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: seo-nextjs
|
|
3
|
+
description: "SEO técnico para Next.js App Router: Metadata API, generateMetadata dinámico, sitemap.ts, robots.ts, JSON-LD structured data, Open Graph y canonical. Usar al agregar o auditar SEO en una app Next."
|
|
4
|
+
category: "frontend"
|
|
5
|
+
argument-hint: "[metadata|sitemap|jsonld|audit]"
|
|
6
|
+
user-invocable: true
|
|
7
|
+
allowed-tools: Read, Glob, Grep, Bash, Write, Edit, Task
|
|
8
|
+
---
|
|
9
|
+
# seo-nextjs — SEO técnico para Next.js
|
|
10
|
+
|
|
11
|
+
## MANDATORY WORKFLOW
|
|
12
|
+
|
|
13
|
+
**Antes de generar o modificar código, completar estos pasos en orden.**
|
|
14
|
+
|
|
15
|
+
### Step 0: Determinar scope
|
|
16
|
+
1. ¿App nueva o auditoría de SEO existente?
|
|
17
|
+
2. ¿Contenido estático, dinámico (DB/CMS) o mixto?
|
|
18
|
+
3. ¿Necesita structured data (JSON-LD) para rich results? (artículos, productos, FAQ, breadcrumbs)
|
|
19
|
+
|
|
20
|
+
### Step 1: Metadata base (`app/layout.tsx`)
|
|
21
|
+
```ts
|
|
22
|
+
export const metadata: Metadata = {
|
|
23
|
+
metadataBase: new URL('https://example.com'),
|
|
24
|
+
title: { default: 'Site', template: '%s · Site' },
|
|
25
|
+
description: '...',
|
|
26
|
+
openGraph: { type: 'website', siteName: 'Site', images: ['/og.png'] },
|
|
27
|
+
twitter: { card: 'summary_large_image' },
|
|
28
|
+
alternates: { canonical: '/' },
|
|
29
|
+
};
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Step 2: Metadata dinámica (`generateMetadata`)
|
|
33
|
+
```ts
|
|
34
|
+
export async function generateMetadata({ params }): Promise<Metadata> {
|
|
35
|
+
const post = await getPost(params.slug);
|
|
36
|
+
return {
|
|
37
|
+
title: post.title,
|
|
38
|
+
description: post.excerpt,
|
|
39
|
+
alternates: { canonical: `/blog/${post.slug}` },
|
|
40
|
+
openGraph: { images: [post.cover] },
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
Nunca tags `<meta>` manuales en el body — siempre la Metadata API.
|
|
45
|
+
|
|
46
|
+
### Step 3: sitemap.ts y robots.ts
|
|
47
|
+
```ts
|
|
48
|
+
// app/sitemap.ts
|
|
49
|
+
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
|
|
50
|
+
const posts = await getAllPosts();
|
|
51
|
+
return [{ url: 'https://example.com', changeFrequency: 'daily' },
|
|
52
|
+
...posts.map(p => ({ url: `https://example.com/blog/${p.slug}`, lastModified: p.updatedAt }))];
|
|
53
|
+
}
|
|
54
|
+
// app/robots.ts → reglas + link al sitemap
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Step 4: JSON-LD structured data
|
|
58
|
+
```tsx
|
|
59
|
+
<script type="application/ld+json"
|
|
60
|
+
dangerouslySetInnerHTML={{ __html: JSON.stringify({
|
|
61
|
+
'@context': 'https://schema.org', '@type': 'Article',
|
|
62
|
+
headline: post.title, datePublished: post.date, author: {...} }) }} />
|
|
63
|
+
```
|
|
64
|
+
Validar con Rich Results Test de Google.
|
|
65
|
+
|
|
66
|
+
### Step 5: Checklist
|
|
67
|
+
- [ ] `metadataBase` seteado (evita URLs OG rotas)
|
|
68
|
+
- [ ] Canonical en cada page indexable
|
|
69
|
+
- [ ] OG image 1200×630 por page importante
|
|
70
|
+
- [ ] sitemap.ts + robots.ts presentes
|
|
71
|
+
- [ ] JSON-LD donde aplique rich result
|
|
72
|
+
- [ ] Sin `noindex` accidental en prod
|
|
73
|
+
- [ ] LCP/CLS sanos (ver skill `nextjs-best-practices`)
|
|
74
|
+
|
|
75
|
+
## Cierre
|
|
76
|
+
|
|
77
|
+
Validar el structured data con el Rich Results Test de Google y los meta tags con el inspector del navegador. Si el checklist pasa → SEO **READY**. Confirmar cambios con el usuario antes de escribir. Siguiente paso: skill `nextjs-best-practices` para Web Vitals, o `ai-seo` para estrategia de contenido.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
_Inspirado en las skills de SEO de [laguagu/claude-code-nextjs-skills](https://github.com/laguagu/claude-code-nextjs-skills). Adaptado al formato Arcane. Relacionado: skill `ai-seo`._
|