@ingeniomaps/cauce 0.5.5 → 0.6.1

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 CHANGED
@@ -8,6 +8,32 @@ esa operación sea confiable en vez de sólo cómoda: acá se lee qué cambió a
8
8
  un cambio en el protocolo, en las reglas del sistema o en un guard es visible para el usuario y sube
9
9
  minor aunque no toque una sola línea de código.
10
10
 
11
+ ## [0.6.1] - 2026-08-15
12
+
13
+ ### Corregido
14
+
15
+ - **El bridge de Antigravity negaba cada llamada a herramienta.** Resolvía la raíz ops subiendo por el
16
+ árbol, y en sidecar es un *hermano* de los repos de producto: no la encontraba y, como falla cerrado,
17
+ bloqueaba todo. Ahora `automation install` le deja escrito dónde quedó, con el recorrido hacia arriba
18
+ como respaldo.
19
+ - **`automation install antigravity` copiaba el plugin y lo dejaba inerte.** Antigravity exige un
20
+ registro explícito —`agy plugin install`—, así que los archivos quedaban en su lugar, `doctor` daba
21
+ verde y no se ejecutaba nada. `install` ahora dice el comando exacto y `doctor` avisa si falta, sin
22
+ tocar por su cuenta la configuración global del usuario.
23
+
24
+ ## [0.6.0] - 2026-08-15
25
+
26
+ ### Cambiado
27
+
28
+ - **Gemini deja de ser el runner sin guards.** Gemini CLI ganó hooks y skills nativas, y el adaptador
29
+ seguía tratándolo como si no los tuviera: los guards se pedían como prechecks manuales —o sea,
30
+ nadie lo detenía— y los 47 cargos no llegaban. Ahora recibe hooks reales en `.gemini/settings.json`
31
+ con sus propios eventos (`BeforeTool`, `AfterAgent`) y variable (`$GEMINI_PROJECT_DIR`), y el
32
+ catálogo completo en `.gemini/skills/`.
33
+ - `GEMINI.md` avisa de dos cosas que sólo se ven usándolo: Gemini **desactiva los hooks si la carpeta
34
+ no es de confianza**, y `gemini hooks migrate --from-claude` reescribe `settings.json` entero y se
35
+ lleva puesta el resto de la configuración.
36
+
11
37
  ## [0.5.5] - 2026-08-15
12
38
 
13
39
  ### Corregido
@@ -11,7 +11,22 @@ function readInput() {
11
11
  } catch { return {} }
12
12
  }
13
13
 
14
+ // Dónde quedó la raíz ops respecto de la carpeta que Antigravity abre. Lo completa
15
+ // `automation install`, que es el único momento en que se sabe: en modo sidecar la raíz ops es un
16
+ // hermano de los repos de producto, y ninguna búsqueda hacia arriba la encuentra. Sin esto el bridge
17
+ // no hallaba `ops.config.json` y, como falla cerrado, negaba cada llamada a herramienta.
18
+ const OPS_DIR = '{{OPS_DIR}}'
19
+
20
+ function declaredRoot() {
21
+ // El plugin vive en <raíz-de-instalación>/.agents/plugins/cauce/.
22
+ const installed = path.resolve(__dirname, '..', '..', '..')
23
+ const root = OPS_DIR.startsWith('{{') ? installed : path.join(installed, OPS_DIR)
24
+ return fs.existsSync(path.join(root, 'ops.config.json')) ? root : ''
25
+ }
26
+
14
27
  function findRoot(input) {
28
+ const declared = declaredRoot()
29
+ if (declared) return declared
15
30
  const args = input.toolCall && input.toolCall.args || {}
16
31
  const starts = [args.Cwd, process.cwd(), ...(input.workspacePaths || [])].filter(Boolean)
17
32
  for (const start of starts) {
@@ -48,5 +48,13 @@
48
48
  "checkpointing": false,
49
49
  "nativeSkills": true
50
50
  },
51
- "roleSkills": ".agents/plugins/cauce/skills"
51
+ "roleSkills": ".agents/plugins/cauce/skills",
52
+ "activation": {
53
+ "hint": "agy plugin install .agents/plugins/cauce",
54
+ "verify": [
55
+ "plugin",
56
+ "list"
57
+ ],
58
+ "expect": "cauce"
59
+ }
52
60
  }
@@ -3,10 +3,25 @@
3
3
  @{{OPS_DIR}}AGENTS.md
4
4
  @{{OPS_DIR}}planning/PROTOCOL.md
5
5
 
6
- `{{OPS_DIR}}planning/PROTOCOL.md` es la fuente de verdad. Ejecuta `/ops:autobuild` fase por fase; los workflows JS de
7
- Claude son referencia, no un runtime compatible. `{{OPS_DIR}}planning/WIP.md` es el mutex y
8
- `{{OPS_DIR}}planning/AWAITING_REVIEW.md` bloquea una corrida nueva.
6
+ `{{OPS_DIR}}planning/PROTOCOL.md` es la fuente de verdad. Ejecuta `/ops:autobuild` fase por fase; los
7
+ workflows JS de Claude son referencia, no un runtime compatible. `{{OPS_DIR}}planning/WIP.md` es el mutex
8
+ y `{{OPS_DIR}}planning/AWAITING_REVIEW.md` bloquea una corrida nueva.
9
9
 
10
- Gemini no tiene guards nativos configurados por este toolkit. Antes de cada commit ejecuta los wrappers de
11
- `{{OPS_DIR}}automatization/hooks/` como prechecks y al cerrar ejecuta `node {{OPS_DIR}}tools/ops.js check planning`. Nunca omitas
12
- aprobaciones, inventes credenciales, escribas remoto, hagas push/deploy o promociones trabajo desde INBOX.
10
+ Los hooks de `.gemini/settings.json` son obligatorios y bloquean por su cuenta. **Requieren que la
11
+ carpeta esté marcada como confiable**: si no lo está, Gemini los desactiva y avisa con
12
+ `Project hooks disabled because the folder is not trusted`, y entonces nada te detiene. Confía en la
13
+ carpeta antes de trabajar.
14
+
15
+ Los cargos llegan como skills en `.gemini/skills/`. Cada uno conserva nombre y descripción, y remite al
16
+ contrato completo; leé ese `SKILL.md` antes de actuar en su terreno. Para la lista:
17
+
18
+ ```bash
19
+ node {{OPS_DIR}}tools/ops.js agents list
20
+ node {{OPS_DIR}}tools/ops.js team list
21
+ ```
22
+
23
+ Nunca omitas aprobaciones, inventes credenciales, escribas remoto, hagas push/deploy o promociones
24
+ trabajo desde INBOX.
25
+
26
+ > No corras `gemini hooks migrate --from-claude`: reescribe `.gemini/settings.json` entero y se lleva
27
+ > puesto el resto de la configuración. `cauce automation install . gemini` ya deja los hooks puestos.
@@ -31,10 +31,11 @@
31
31
  }
32
32
  ],
33
33
  "capabilities": {
34
- "nativeHooks": false,
34
+ "nativeHooks": true,
35
35
  "nativeWorkflows": false,
36
36
  "projectInstructions": true,
37
37
  "checkpointing": true,
38
- "nativeSkills": false
39
- }
38
+ "nativeSkills": true
39
+ },
40
+ "roleSkills": ".gemini/skills"
40
41
  }
@@ -1,9 +1,43 @@
1
1
  {
2
2
  "general": {
3
- "checkpointing": { "enabled": true }
3
+ "checkpointing": {
4
+ "enabled": true
5
+ }
4
6
  },
5
7
  "context": {
6
8
  "fileName": ["AGENTS.md", "GEMINI.md"],
7
9
  "loadFromIncludeDirectories": true
10
+ },
11
+ "hooks": {
12
+ "BeforeTool": [
13
+ {
14
+ "matcher": "run_shell_command",
15
+ "hooks": [
16
+ {
17
+ "type": "command",
18
+ "command": "$GEMINI_PROJECT_DIR/{{OPS_DIR}}automatization/hooks/guard-shell.sh"
19
+ }
20
+ ]
21
+ },
22
+ {
23
+ "matcher": "replace|write_file",
24
+ "hooks": [
25
+ {
26
+ "type": "command",
27
+ "command": "$GEMINI_PROJECT_DIR/{{OPS_DIR}}automatization/hooks/guard-files.sh"
28
+ }
29
+ ]
30
+ }
31
+ ],
32
+ "AfterAgent": [
33
+ {
34
+ "hooks": [
35
+ {
36
+ "type": "command",
37
+ "command": "$GEMINI_PROJECT_DIR/{{OPS_DIR}}automatization/hooks/guard-planning-drift.sh"
38
+ }
39
+ ]
40
+ }
41
+ ]
8
42
  }
9
43
  }
@@ -182,6 +182,15 @@ function installRoleSkills(root, runner, output) {
182
182
  return roles.length
183
183
  }
184
184
 
185
+ // Runners que además de los archivos necesitan un registro propio para que el wiring cuente. Copiar
186
+ // y quedarse ahí deja un plugin inerte: los archivos están, `doctor` da verde y nada se ejecuta.
187
+ function activated(runner) {
188
+ if (!runner.activation) return true
189
+ const result = spawnSync(runner.command, runner.activation.verify, { encoding: 'utf8' })
190
+ if (result.status !== 0) return null
191
+ return `${result.stdout || ''}`.includes(runner.activation.expect)
192
+ }
193
+
185
194
  function hasHooks(config) {
186
195
  if (config.hooks && Object.keys(config.hooks).length) return true
187
196
  const events = [
@@ -423,6 +432,10 @@ function doctor(root, name, output = console) {
423
432
  ['-c', 'command -v "$1" >/dev/null 2>&1', 'runner-doctor', runner.command],
424
433
  )
425
434
  if (executable.status !== 0) warnings.push(`${runner.command}: CLI no encontrado en PATH`)
435
+ else if (activated(runner) === false) {
436
+ warnings.push(`el plugin está copiado pero no registrado, así que no se ejecuta. `
437
+ + `Corré desde ${paths.install}: ${runner.activation.hint}`)
438
+ }
426
439
  for (const warning of warnings) output.warn(`⚠ ${name}: ${warning}`)
427
440
  for (const error of errors) output.error(`✗ ${name}: ${error}`)
428
441
  return { runner, errors, warnings }
@@ -516,6 +529,10 @@ function install(root, name, output = console, options = {}) {
516
529
  }
517
530
  }
518
531
  installRoleSkills(root, runner, output)
532
+ if (runner.activation && activated(runner) !== true) {
533
+ output.log(` ${name}: falta registrarlo para que corra. Desde ${paths.install}:`)
534
+ output.log(` ${runner.activation.hint}`)
535
+ }
519
536
  M.write(root, undefined, entregado)
520
537
  return runner
521
538
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ingeniomaps/cauce",
3
- "version": "0.5.5",
3
+ "version": "0.6.1",
4
4
  "description": "Sistema portable de planificación y ejecución verificable para cualquier proyecto",
5
5
  "type": "commonjs",
6
6
  "bin": {