Skip to content

Commit a1cdc01

Browse files
committed
docs: add Spanish versions of the community files
- SECURITY.es.md, CONTRIBUTING.es.md and CODE_OF_CONDUCT.es.md with bidirectional language switchers, matching the existing README/docs convention (English base, Spanish mirror). - Heading parity verified against the English originals (5/5, 7/7, 12/12), no broken internal links. - CODE_OF_CONDUCT.es.md points at the official Contributor Covenant translations and states that the English text is canonical for enforcement. - CONTRIBUTING and the pull request template now list the community file pairs as part of the bilingual docs requirement; CHANGELOG reflects the full doc set.
1 parent 2210ff6 commit a1cdc01

8 files changed

Lines changed: 310 additions & 5 deletions

‎.github/pull_request_template.md‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
- [ ] `bun run typecheck` passes
1717
- [ ] Regression test added that fails before this change (bug fixes)
1818
- [ ] `CHANGELOG.md` updated under `## [Unreleased]`
19-
- [ ] Docs updated in both languages (`README.md`/`docs/*` and `README.es.md`/`docs/es/*`)
19+
- [ ] Docs updated in both languages: `README.md`/`docs/*` and `README.es.md`/`docs/es/*`
20+
(plus `SECURITY`/`CONTRIBUTING`/`CODE_OF_CONDUCT` pairs when they are affected)
2021
- [ ] No secrets, keys, personal paths or private hosts in code, tests, docs or logs
2122

2223
## Guarantees affected

‎CHANGELOG.md‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,9 @@ structured package with dynamic model discovery.
2929
`COMMANDCODE_LIVE_TESTS`.
3030
- Strict typecheck configuration (`allowImportingTsExtensions`, `strict`,
3131
`noUncheckedIndexedAccess`) with `bun-types`.
32-
- Documentation: `README.md`, `docs/ARCHITECTURE.md`, `docs/CONFIGURATION.md`,
33-
`docs/TROUBLESHOOTING.md`, `LICENSE`.
32+
- Documentation in English and Spanish: `README.md` / `README.es.md`,
33+
`docs/{ARCHITECTURE,CONFIGURATION,TROUBLESHOOTING}.md` / `docs/es/*`,
34+
`SECURITY`, `CONTRIBUTING` and `CODE_OF_CONDUCT` pairs, plus `LICENSE`.
3435

3536
### Changed
3637

‎CODE_OF_CONDUCT.es.md‎

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
# Codigo de Conducta del Contributor Covenant
2+
3+
[English](CODE_OF_CONDUCT.md) | **Espanol**
4+
5+
## Nuestro compromiso
6+
7+
Nosotros, como miembros, contribuyentes y lideres, nos comprometemos a hacer de la
8+
participacion en nuestra comunidad una experiencia libre de acoso para todos, sin
9+
importar la edad, el tamano corporal, la discapacidad visible o invisible, la etnia,
10+
las caracteristicas sexuales, la identidad y expresion de genero, el nivel de
11+
experiencia, la educacion, el nivel socioeconomico, la nacionalidad, la apariencia
12+
personal, la raza, la religion o la identidad y orientacion sexual.
13+
14+
Nos comprometemos a actuar e interactuar de maneras que contribuyan a una comunidad
15+
abierta, acogedora, diversa, inclusiva y saludable.
16+
17+
## Nuestros estandares
18+
19+
Ejemplos de comportamiento que contribuye a un entorno positivo:
20+
21+
- Demostrar empatia y amabilidad hacia otras personas.
22+
- Respetar las opiniones, puntos de vista y experiencias diferentes.
23+
- Dar y aceptar con gracia la retroalimentacion constructiva.
24+
- Asumir la responsabilidad y disculparse ante las personas afectadas por nuestros
25+
errores, y aprender de la experiencia.
26+
- Centrarse en lo que es mejor no solo para nosotros como individuos, sino para la
27+
comunidad en general.
28+
29+
Ejemplos de comportamiento inaceptable:
30+
31+
- El uso de lenguaje o imagenes sexualizadas, y la atencion o insinuaciones sexuales de
32+
cualquier tipo.
33+
- Trolleo, comentarios insultantes o despectivos, y ataques personales o politicos.
34+
- Acoso publico o privado.
35+
- Publicar informacion privada de otras personas, como una direccion fisica o de correo
36+
electronico, sin su permiso explicito.
37+
- Otra conducta que razonablemente pueda considerarse inapropiada en un entorno
38+
profesional.
39+
40+
## Responsabilidades de aplicacion
41+
42+
Los lideres de la comunidad son responsables de aclarar y hacer cumplir nuestros
43+
estandares de comportamiento aceptable, y tomaran acciones correctivas apropiadas y
44+
justas en respuesta a cualquier comportamiento que consideren inapropiado, amenazante,
45+
ofensivo o danino.
46+
47+
Los lideres de la comunidad tienen el derecho y la responsabilidad de eliminar, editar
48+
o rechazar comentarios, commits, codigo, ediciones de wiki, issues y otras
49+
contribuciones que no esten alineadas con este Codigo de Conducta, y comunicaran los
50+
motivos de las decisiones de moderacion cuando corresponda.
51+
52+
## Alcance
53+
54+
Este Codigo de Conducta aplica en todos los espacios de la comunidad, y tambien cuando
55+
un individuo representa oficialmente a la comunidad en espacios publicos.
56+
57+
## Aplicacion
58+
59+
Los casos de comportamiento abusivo, acosador o inaceptable pueden reportarse a los
60+
lideres de la comunidad responsables de la aplicacion a traves de GitHub (reporte
61+
privado o mensaje directo al mantenedor). Todas las quejas seran revisadas e
62+
investigadas de forma rapida y justa.
63+
64+
Todos los lideres de la comunidad estan obligados a respetar la privacidad y la
65+
seguridad de quien reporta cualquier incidente.
66+
67+
## Guias de aplicacion
68+
69+
Los lideres de la comunidad seguiran estas Guias de Impacto Comunitario para determinar
70+
las consecuencias de cualquier accion que consideren una violacion de este Codigo de
71+
Conducta:
72+
73+
### 1. Correccion
74+
75+
**Impacto comunitario**: uso de lenguaje inapropiado u otro comportamiento considerado
76+
poco profesional o no bienvenido en la comunidad.
77+
78+
**Consecuencia**: una advertencia privada por escrito de los lideres de la comunidad,
79+
que aporte claridad sobre la naturaleza de la violacion y una explicacion de por que el
80+
comportamiento fue inapropiado. Se puede solicitar una disculpa publica.
81+
82+
### 2. Advertencia
83+
84+
**Impacto comunitario**: una violacion a traves de un incidente unico o una serie de
85+
acciones.
86+
87+
**Consecuencia**: una advertencia con consecuencias por comportamiento continuado. No
88+
interactuar con las personas involucradas, incluida la interaccion no solicitada con
89+
quienes aplican el Codigo de Conducta, durante un periodo de tiempo especificado. Esto
90+
incluye evitar interacciones en espacios de la comunidad y tambien en canales externos
91+
como redes sociales. Violar estos terminos puede llevar a una expulsion temporal o
92+
permanente.
93+
94+
### 3. Expulsion temporal
95+
96+
**Impacto comunitario**: una violacion grave de los estandares de la comunidad, incluido
97+
comportamiento inapropiado sostenido.
98+
99+
**Consecuencia**: una expulsion temporal de cualquier tipo de interaccion o comunicacion
100+
publica con la comunidad durante un periodo de tiempo especificado. No se permite la
101+
interaccion publica ni privada con las personas involucradas, incluida la interaccion no
102+
solicitada con quienes aplican el Codigo de Conducta, durante este periodo. Violar estos
103+
terminos puede llevar a una expulsion permanente.
104+
105+
### 4. Expulsion permanente
106+
107+
**Impacto comunitario**: demostrar un patron de violacion de los estandares de la
108+
comunidad, incluido comportamiento inapropiado sostenido, acoso a un individuo, o
109+
agresion o menosprecio hacia clases de individuos.
110+
111+
**Consecuencia**: una expulsion permanente de cualquier tipo de interaccion publica
112+
dentro de la comunidad.
113+
114+
## Atribucion
115+
116+
Este Codigo de Conducta esta adaptado del [Contributor Covenant](https://www.contributor-covenant.org),
117+
version 2.1, disponible en
118+
https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.
119+
120+
Las traducciones oficiales, incluida la version en espanol, estan disponibles en
121+
https://www.contributor-covenant.org/translations. La version en ingles es la
122+
canonica para efectos de aplicacion.

‎CODE_OF_CONDUCT.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# Contributor Covenant Code of Conduct
22

3+
**English** | [Espanol](CODE_OF_CONDUCT.es.md)
4+
35
## Our Pledge
46

57
We as members, contributors, and leaders pledge to make participation in our

‎CONTRIBUTING.es.md‎

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
# Como contribuir
2+
3+
[English](CONTRIBUTING.md) | **Espanol**
4+
5+
Gracias por tomarte el tiempo de mejorar este plugin. Corre dentro de cada request de
6+
modelo de una sesion de OpenCode, asi que el estandar para cualquier cambio es:
7+
predecible, fail-open y testeable sin red.
8+
9+
## Setup
10+
11+
```bash
12+
git clone git@github.com:JoshRob297/opencode-commandcode.git
13+
cd opencode-commandcode
14+
bun install
15+
bun test # suite offline, sin red, sin consumir cuota
16+
bun run typecheck # tsc estricto, sin emit
17+
```
18+
19+
La suite con red es opt-in y llama a la API real (consume una cantidad insignificante
20+
de cuota):
21+
22+
```bash
23+
COMMANDCODE_LIVE_TESTS=1 bun test
24+
```
25+
26+
## Reglas de base
27+
28+
No son preferencias de estilo: protegen las garantias del plugin. Un cambio que rompa
29+
alguna vuelve atras.
30+
31+
1. **Fail-open.** Cualquier error del plugin debe dejar el request original intacto.
32+
Nunca dejes que un hook lance una excepcion hacia la sesion de OpenCode.
33+
2. **Credenciales solo tras coincidencia exacta de host.** Nunca introduzcas una
34+
verificacion por substring, prefijo o path en la ruta de inyeccion. Los hosts
35+
confiables nuevos entran por `COMMANDCODE_ALLOWED_HOSTS`.
36+
3. **Nunca sobrescribas la cabecera `authorization` de un llamador.**
37+
4. **Sin secretos en los logs.** El plugin escribe ids de sesion, ids de modelo, codigos
38+
de estado y mensajes de error. Nunca cuerpos, cabeceras ni la key.
39+
5. **Exactitud del catalogo antes que tamano.** No registres modelos que el transporte
40+
compatible con OpenAI no puede servir. Un modelo que falla al seleccionarlo es peor
41+
que un modelo ausente.
42+
6. **Sin rutas de usuario hardcodeadas.** Usa `XDG` y `os.homedir()`; los tests deben
43+
pasar para cualquier usuario.
44+
7. **Los helpers puros siguen siendo puros.** `src/hooks/resilience.ts` no tiene acceso
45+
a red y solo hace una revision de filesystem (el centinela del kill-switch), para que
46+
sus reglas se puedan testear en aislamiento.
47+
8. **Reconstrui el Request solo cuando el cuerpo haya cambiado realmente.** Devolve
48+
`modified: false` para payloads limpios.
49+
50+
## Mensajes de commit
51+
52+
Conventional Commits, imperativo, asunto en minusculas:
53+
54+
```
55+
<tipo>(<alcance>): <asunto>
56+
57+
<cuerpo: que y por que, con lineas de 72 columnas>
58+
59+
<pie: refs, cambios incompatibles>
60+
```
61+
62+
Tipos: `feat`, `fix`, `docs`, `test`, `refactor`, `perf`, `chore`, `security`.
63+
Alcances: `auth`, `catalog`, `sanitizer`, `watchdog`, `quota`, `telemetry`, `docs`.
64+
65+
Ejemplos:
66+
67+
```
68+
fix(auth): require an exact hostname match before injecting the API key
69+
feat(catalog): tag free and promo tiers in the model selector
70+
docs(troubleshooting): document the retired free-tier 403 payload
71+
```
72+
73+
Mantene los commits atomicos: un cambio logico mas sus tests. Cada commit debe pasar
74+
`bun test` y `bun run typecheck`.
75+
76+
## Pull requests
77+
78+
- Completa la plantilla de pull request. Indica el modo de fallo que observaste, no solo
79+
el cambio que hiciste.
80+
- Agrega o actualiza tests. Los fixes de bugs necesitan un test de regresion que falle
81+
antes del fix.
82+
- Actualiza `CHANGELOG.md` bajo `## [Unreleased]`.
83+
- La documentacion vive en dos idiomas: `README.md` + `docs/*.md` (ingles) y
84+
`README.es.md` + `docs/es/*.md` (espanol), mas los pares de los archivos de comunidad
85+
(`SECURITY`, `CONTRIBUTING`, `CODE_OF_CONDUCT`). Los cambios de comportamiento deben
86+
reflejarse en ambos, o decilo explicitamente en el PR para que quede registrado.
87+
88+
## Agregar un hook o una regla nueva
89+
90+
1. Pone la logica pura en `src/hooks/resilience.ts` y exportala.
91+
2. Testeala en `tests/` (sin red, sin instancia de OpenCode).
92+
3. Documenta la regla en `docs/ARCHITECTURE.md` (tabla de reglas) y, si es configurable,
93+
en `docs/CONFIGURATION.md`.
94+
4. Cableala en `src/index.ts` detras de una verificacion de capacidad
95+
(`typeof ctx.x?.transform === "function"`) y envuelta para que no pueda lanzar.
96+
97+
## Reportar bugs
98+
99+
Abre un issue con la plantilla de bug report. Incluye la version de OpenCode, el commit
100+
del plugin, el id del modelo, y las lineas relevantes de
101+
`<state>/commandcode-*.log`. Nunca pegues una API key en un issue.

‎CONTRIBUTING.md‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# Contributing
22

3+
**English** | [Espanol](CONTRIBUTING.es.md)
4+
35
Thanks for taking the time to improve this plugin. It runs inside every model
46
request of an OpenCode session, so the bar for changes is: predictable, fail-open,
57
and testable without a network.
@@ -78,8 +80,9 @@ Keep commits atomic: one logical change plus its tests. Every commit must pass
7880
- Add or update tests. Bug fixes need a regression test that fails before the fix.
7981
- Update `CHANGELOG.md` under `## [Unreleased]`.
8082
- Docs live in two languages: `README.md` + `docs/*.md` (English) and
81-
`README.es.md` + `docs/es/*.md` (Spanish). Behaviour changes must be reflected in
82-
both, or say so explicitly in the PR so it can be tracked.
83+
`README.es.md` + `docs/es/*.md` (Spanish), plus the community file pairs
84+
(`SECURITY`, `CONTRIBUTING`, `CODE_OF_CONDUCT`). Behaviour changes must be reflected
85+
in both, or say so explicitly in the PR so it can be tracked.
8386

8487
## Adding a new hook or rule
8588

‎SECURITY.es.md‎

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# Politica de Seguridad
2+
3+
[English](SECURITY.md) | **Espanol**
4+
5+
## Alcance
6+
7+
Este plugin es una integracion del lado del cliente para el proveedor Command Code.
8+
La propiedad mas sensible al seguridad del codigo es que **maneja una API key**, por
9+
lo que los defectos en el manejo de credenciales se tratan como vulnerabilidades,
10+
no como bugs.
11+
12+
Dentro de alcance:
13+
14+
- Fuga de credenciales o inyeccion de credenciales dirigida al host equivocado.
15+
- Manipulacion de requests que altere un payload mas alla de las reparaciones
16+
documentadas.
17+
- Cualquier ruta que permita a un tercero influir en que host recibe la API key.
18+
- Telemetria que escriba secretos en disco o dentro de un archivo de log.
19+
20+
Fuera de alcance:
21+
22+
- Vulnerabilidades en OpenCode mismo (reportalas aguas arriba).
23+
- Vulnerabilidades en la API o el servicio de Command Code (reportalas a Command Code).
24+
- Calidad de la salida de los modelos, precios, politica de cuota o cambios de catalogo.
25+
- Todo lo que requiera un host ya comprometido, acceso de shell como el usuario, o la
26+
capacidad de editar los propios archivos del plugin.
27+
28+
## Como reportar una vulnerabilidad
29+
30+
Usa el reporte privado de vulnerabilidades de GitHub en este repositorio
31+
(pestana `Security` -> `Report a vulnerability`). No abras un issue publico.
32+
33+
Incluye, cuando sea posible:
34+
35+
- Version afectada o sha del commit.
36+
- Una reproduccion minima: la URL del Request, la forma del payload, y que hizo el
37+
plugin frente a que deberia haber hecho.
38+
- Si esta afectada una credencial, un payload o un stream.
39+
40+
Acuse de recibo en 72 horas, y un fix o un plan de mitigacion dentro de 14 dias para
41+
los problemas confirmados. Credito en el changelog si lo pedis.
42+
43+
## Notas del modelo de amenazas
44+
45+
El plugin asume:
46+
47+
- El host y la cuenta de usuario son confiables. Quien pueda leer la API key en disco
48+
ya la tiene; el plugin no intenta proteger contra eso.
49+
- `opencode.json` y la ruta del plugin son configuracion confiable.
50+
- La API key es una credencial bearer con todos los privilegios de la cuenta. Acotala
51+
o rotala si sospechas que se expuso.
52+
53+
Reglas de diseno que existen por este modelo de amenazas:
54+
55+
| Regla | Motivo |
56+
| --- | --- |
57+
| Las credenciales se adjuntan solo tras una coincidencia exacta de hostname | la coincidencia por substring es trivialmente explotable (`api.commandcode.ai.evil.com`, coincidencias por path, query strings) |
58+
| `COMMANDCODE_ALLOWED_HOSTS` es la unica allow-list | un opt-in explicito y auditable en lugar de una coincidencia difusa |
59+
| Una cabecera `authorization` existente nunca se sobrescribe | una credencial provista por el llamador no debe reemplazarse en silencio |
60+
| Los logs nunca registran la key, la cabecera `authorization` ni los cuerpos de request | los archivos `commandcode-*.log` son texto plano en disco |
61+
| El sanitizador nunca reescribe campos distintos de `messages` | limita el radio de impacto de una modificacion de payload en vuelo |
62+
| Todos los hooks son fail-open | un atacante no debe poder desactivar los requests de modelo induciendo un error del plugin |
63+
64+
## Checklist de endurecimiento para despliegues
65+
66+
- Mantene el archivo de la key en modo `600` y fuera de cualquier directorio
67+
sincronizado o respaldado.
68+
- No habilites `COMMANDCODE_ALLOWED_HOSTS` salvo que un gateway propio realmente
69+
termine tu trafico hacia Command Code.
70+
- Trata el directorio de estado como sensible: contiene metadatos de requests (ids de
71+
sesion, ids de modelo, mensajes de error) aunque nunca contiene la key.
72+
- Revisa el diff antes de actualizar el plugin: corre con acceso completo a cada request
73+
de modelo de la sesion de OpenCode.

‎SECURITY.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# Security Policy
22

3+
**English** | [Espanol](SECURITY.es.md)
4+
35
## Scope
46

57
This plugin is a client-side integration for the Command Code provider. The most

0 commit comments

Comments
 (0)