Skip to content

Commit 7482946

Browse files
WSmithDRclaude
andcommitted
feat: dogfood multi-CLI + SSoT de versión + auditoría determinista + health
Cierra varias brechas de "no practica lo que predica" del meta-plugin y endurece la verificación. Bump 1.1.0 → 1.2.0. multi-cli-compat (dogfooding): el repo ahora trae manifiestos para Gemini CLI, OpenCode, Codex, Cursor y Copilot + GEMINI.md, tool-mapping y un instalador por symlink (bin/install-skills.sh). Antes se distribuía solo para Claude Code. SSoT de versión: el post-commit de `versioning` (1.2.0) ahora sincroniza también marketplace.json. validate-catalog.py verifica que TODOS los manifiestos compartan la versión de plugin.json (falla en CI ante drift). Se quitó el conteo de features hardcodeado de las descripciones (era el vector de drift). Auditoría determinista: nueva `bin/audit-catalog-gaps.py` + test reemplazan el "adivinar señales a ojo" de la Parte A de plugin-audit (cumple bundled-scripts). validate-catalog endurecido: semver, enum de cli_compat, secciones requeridas de README (CONTRIBUTING), y sincronía de versión entre manifiestos. health: nueva skill `cli-plugin-template-health` (dogfooding de health-check). CI: parse de shell/JSON ampliado a bin/ y manifiestos; corre test-catalog-gaps y la auditoría de portabilidad (bloquea ante CRITICAL). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 7efb942 commit 7482946

24 files changed

Lines changed: 922 additions & 30 deletions

File tree

.claude-plugin/marketplace.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@
66
},
77
"metadata": {
88
"description": "Catálogo vivo de features reusables para plugins multi-CLI, instalable como meta-plugin de desarrollo.",
9-
"version": "1.1.0"
9+
"version": "1.2.0"
1010
},
1111
"plugins": [
1212
{
1313
"name": "cli-plugin-template",
1414
"source": "./",
15-
"description": "Meta-plugin de desarrollo de plugins multi-CLI. Cataloga 33 features reusables y los entrega on-demand (auditar, integrar, recomendar, promover) con un aviso proactivo en proyectos de plugin.",
16-
"version": "1.1.0",
15+
"description": "Meta-plugin de desarrollo de plugins multi-CLI. Cataloga features reusables y los entrega on-demand (auditar, integrar, recomendar, promover) con un aviso proactivo en proyectos de plugin.",
16+
"version": "1.2.0",
1717
"author": {
1818
"name": "WSmithDR"
1919
},

.claude-plugin/plugin.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "cli-plugin-template",
3-
"version": "1.1.0",
4-
"description": "Meta-plugin de desarrollo de plugins multi-CLI. Cataloga 33 features reusables y los entrega on-demand (auditar, integrar, recomendar, promover) con un aviso proactivo en proyectos de plugin.",
3+
"version": "1.2.0",
4+
"description": "Meta-plugin de desarrollo de plugins multi-CLI. Cataloga features reusables y los entrega on-demand (auditar, integrar, recomendar, promover) con un aviso proactivo en proyectos de plugin.",
55
"author": { "name": "WSmithDR", "url": "https://github.com/WSmithDR" },
66
"repository": "https://github.com/WSmithDR/cli-plugin-template",
77
"license": "MIT",

.codex-plugin/plugin.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"name": "cli-plugin-template",
3+
"description": "Meta-plugin de desarrollo de plugins multi-CLI. Cataloga features reusables y los entrega on-demand (auditar, integrar, recomendar, promover) vía skills. Las instrucciones de arranque están en AGENTS.md.",
4+
"version": "1.2.0",
5+
"skills": "./skills/"
6+
}

.copilot-plugin/plugin.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"name": "cli-plugin-template",
3+
"displayName": "cli-plugin-template",
4+
"description": "Meta-plugin de desarrollo de plugins multi-CLI. Cataloga features reusables y los entrega on-demand (auditar, integrar, recomendar, promover) vía skills. Las instrucciones de arranque están en AGENTS.md.",
5+
"version": "1.2.0",
6+
"skills": "./skills/"
7+
}

.cursor-plugin/plugin.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"name": "cli-plugin-template",
3+
"displayName": "cli-plugin-template",
4+
"description": "Meta-plugin de desarrollo de plugins multi-CLI. Cataloga features reusables y los entrega on-demand (auditar, integrar, recomendar, promover) vía skills.",
5+
"version": "1.2.0",
6+
"skills": "./skills/"
7+
}

.github/workflows/validate.yml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,21 @@ jobs:
2121
fail=0
2222
while IFS= read -r f; do
2323
bash -n "$f" || { echo "✗ $f"; fail=1; }
24-
done < <(find features \( -name '*.sh' -o -name 'pre-commit' -o -name 'post-commit' \))
24+
done < <(find features bin \( -name '*.sh' -o -name 'pre-commit' -o -name 'post-commit' \))
2525
exit $fail
2626
- name: Validate JSON files parse
2727
run: |
2828
fail=0
2929
while IFS= read -r f; do
3030
python3 -c "import json,sys; json.load(open(sys.argv[1]))" "$f" \
3131
|| { echo "✗ $f"; fail=1; }
32-
done < <(find features -name '*.json')
32+
done < <(find features .claude-plugin .codex-plugin .cursor-plugin .copilot-plugin \
33+
-name '*.json' 2>/dev/null; \
34+
ls gemini-extension.json opencode.json 2>/dev/null)
3335
exit $fail
3436
- name: Run meta-plugin hook tests
3537
run: bash bin/test-hooks.sh
38+
- name: Run catalog-gap audit tests
39+
run: bash bin/test-catalog-gaps.sh
40+
- name: Portability audit (block on CRITICAL)
41+
run: python3 features/portability-audit/files/audit-portability.py . --quiet
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// Plugin de OpenCode para cli-plugin-template.
2+
//
3+
// Este plugin NO expone un MCP server: es 100% basado en skills (estrategia B).
4+
// OpenCode no auto-descubre AGENTS.md ni el skill de entrada, así que inyectamos
5+
// el bootstrap (la regla de "usar las skills del catálogo" + el path al entry skill
6+
// y al tool-mapping) en el primer mensaje de cada sesión.
7+
//
8+
// El contenido se lee de AGENTS.md (estándar de facto) para no duplicar la guía.
9+
10+
import { readFileSync } from "node:fs";
11+
import { dirname, join } from "node:path";
12+
import { fileURLToPath } from "node:url";
13+
14+
// Raíz del repo, resuelta relativa a este archivo (.opencode/plugins/ → repo root).
15+
const REPO_ROOT = join(dirname(fileURLToPath(import.meta.url)), "..", "..");
16+
17+
function loadBootstrap() {
18+
let agents = "";
19+
try {
20+
agents = readFileSync(join(REPO_ROOT, "AGENTS.md"), "utf8");
21+
} catch {
22+
agents = "";
23+
}
24+
return [
25+
"## cli-plugin-template — bootstrap (OpenCode)",
26+
"",
27+
"Este proyecto es el meta-plugin cli-plugin-template. Para guiar el desarrollo",
28+
"de plugins, usá las skills del catálogo en `skills/` en vez de improvisar:",
29+
"el entry point es `skills/plugin-dev/SKILL.md` (router), que enruta a",
30+
"`plugin-audit`, `plugin-feature`, `plugin-recommend` y `plugin-promote`.",
31+
"",
32+
"Las skills nombran tools de Claude Code (`Skill`, `Task`, `Read`, `Edit`).",
33+
"Traducí esos nombres con `skills/plugin-dev/references/tool-mapping.md`.",
34+
"",
35+
"--- AGENTS.md ---",
36+
agents,
37+
].join("\n");
38+
}
39+
40+
export const CliPluginTemplate = async () => {
41+
const bootstrap = loadBootstrap();
42+
return {
43+
"experimental.chat.messages.transform": async ({ messages }) => {
44+
if (Array.isArray(messages) && messages.length > 0) {
45+
messages.unshift({ role: "system", content: bootstrap });
46+
}
47+
return { messages };
48+
},
49+
};
50+
};
51+
52+
export default CliPluginTemplate;

AGENTS.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,10 @@ Regla de decisión rápida:
3939

4040
## Modo plugin
4141

42-
Este repo también es un plugin instalable (`.claude-plugin/plugin.json`). Instalado en
43-
otro proyecto, expone las skills `plugin-dev` (router), `plugin-audit`, `plugin-feature`,
44-
`plugin-recommend`, `plugin-promote` y el comando `/plugin`, que leen el catálogo de
45-
`features/` localmente. El hook `SessionStart` sugiere una auditoría la primera vez en un
46-
proyecto de plugin. El propio repo se excluye con el sentinel `.catalog-root`.
42+
Este repo también es un plugin instalable (`.claude-plugin/plugin.json`), con manifiestos
43+
para Gemini CLI, OpenCode, Codex, Cursor y Copilot (dogfooding de `multi-cli-compat`).
44+
Instalado en otro proyecto, expone las skills `plugin-dev` (router), `plugin-audit`,
45+
`plugin-feature`, `plugin-recommend`, `plugin-promote`, `cli-plugin-template-health`
46+
(diagnóstico) y el comando `/plugin`, que leen el catálogo de `features/` localmente. El
47+
hook `SessionStart` sugiere una auditoría la primera vez en un proyecto de plugin. El
48+
propio repo se excluye con el sentinel `.catalog-root`.

CATALOG.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ Para el flujo de uso completo ver [AGENTS.md](AGENTS.md).
88
| Feature | Versión | CLIs | Descripción |
99
|---|---|---|---|
1010
| [`git-hooks`](features/git-hooks/README.md) | 1.0.0 | todos | Git hooks de desarrollo: instalación via symlink editor-agnóstica, pre-commit que corre tests, y arnés de testing con tmpdir aislado |
11-
| [`versioning`](features/versioning/README.md) | 1.1.0 | todos | Versionado semántico automático: `post-commit` bumpea según el prefijo del commit (conventional commits) y amenda el commit (con guard de recursión via sentinel) |
12-
| [`docs-conventions`](features/docs-conventions/README.md) | 1.0.0 | todos | Secciones estándar de README: install, update, verificación de versión, tabla de conventional commits |
11+
| [`versioning`](features/versioning/README.md) | 1.2.0 | todos | Versionado semántico automático: `post-commit` bumpea según el prefijo del commit (conventional commits), sincroniza `marketplace.json`, y amenda el commit (con guard de recursión via sentinel) |
12+
| [`docs-conventions`](features/docs-conventions/README.md) | 1.1.0 | todos | Secciones estándar de README: install, update, verificación de versión, tabla de conventional commits |
1313

1414
## Integración con el CLI
1515

GEMINI.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# cli-plugin-template — contexto para Gemini CLI
2+
3+
Este repo es el meta-plugin **cli-plugin-template**: un catálogo vivo de features
4+
reusables para plugins multi-CLI. Cuando guíes el desarrollo de un plugin, **no
5+
improvises**: usá las skills del catálogo en `skills/`.
6+
7+
El entry point es el router `plugin-dev`, que enruta a `plugin-audit`,
8+
`plugin-feature`, `plugin-recommend` y `plugin-promote` según la intención. Activá
9+
el skill (`activate_skill`) en vez de responder a mano.
10+
11+
Las skills están escritas con los nombres de tools de Claude Code (`Skill`, `Task`,
12+
`Read`, `Edit`…). En Gemini CLI esos nombres cambian: consultá la tabla de mapeo
13+
incluida abajo.
14+
15+
Los `@`-includes siguientes se cargan automáticamente en cada sesión porque
16+
`gemini-extension.json` declara `"contextFileName": "GEMINI.md"`:
17+
18+
@./skills/plugin-dev/SKILL.md
19+
@./skills/plugin-dev/references/tool-mapping.md

0 commit comments

Comments
 (0)