@ingeniomaps/cauce 0.6.0 → 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,19 @@ 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
+
11
24
  ## [0.6.0] - 2026-08-15
12
25
 
13
26
  ### Cambiado
@@ -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
  }
@@ -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.6.0",
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": {