@iseoane/agent-depot 0.4.1 → 0.5.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 +29 -0
- package/README.es.md +969 -0
- package/README.md +244 -23
- package/dist/src/app-flow.js +52 -51
- package/dist/src/app-recipe-removal.js +63 -0
- package/dist/src/cli.js +122 -11
- package/dist/src/executable-resolution.js +54 -0
- package/dist/src/git-source.js +129 -6
- package/dist/src/package-bundles.js +614 -0
- package/dist/src/package-cli.js +412 -0
- package/dist/src/package-content.js +158 -0
- package/dist/src/package-flow.js +636 -0
- package/dist/src/package-host-plans.js +240 -0
- package/dist/src/package-host-state.js +349 -0
- package/dist/src/package-model.js +33 -0
- package/dist/src/package-owned-skills.js +122 -0
- package/dist/src/package-state.js +404 -0
- package/dist/src/profile-cli.js +15 -9
- package/dist/src/profile-export.js +44 -9
- package/dist/src/profile-import.js +80 -17
- package/dist/src/profile.js +78 -3
- package/dist/src/skill-discovery.js +2 -2
- package/dist/src/skill-install.js +16 -0
- package/dist/src/sources.js +11 -0
- package/dist/src/tui/app-actions.js +1 -1
- package/dist/src/tui/app.js +5 -6
- package/dist/src/tui/catalog-browse.js +10 -3
- package/dist/src/tui/catalog-panel.js +7 -3
- package/dist/src/tui/catalog-state.js +57 -6
- package/dist/src/tui/catalog-tree.js +52 -10
- package/dist/src/tui/catalog-view.js +27 -4
- package/dist/src/tui/environment.js +8 -1
- package/dist/src/tui/installations-browse.js +20 -2
- package/dist/src/tui/installations-rows.js +2 -1
- package/dist/src/tui/installations-tree.js +14 -1
- package/dist/src/tui/installations-view.js +8 -2
- package/dist/src/tui/installations.js +12 -2
- package/dist/src/tui/manage-actions.js +2 -0
- package/dist/src/tui/manage-panel.js +5 -0
- package/dist/src/tui/package-actions.js +165 -0
- package/dist/src/tui/package-rows.js +87 -0
- package/dist/src/tui/profile-view.js +36 -14
- package/dist/src/tui/sources-mode.js +2 -0
- package/dist/src/tui/sources-recipes.js +116 -53
- package/dist/src/tui/sources-view.js +57 -19
- package/dist/src/tui/tree.js +3 -4
- package/dist/src/tui/updates-flow.js +4 -1
- package/dist/src/tui/updates-panel.js +2 -2
- package/dist/src/tui/updates.js +72 -4
- package/dist/src/user-global-skill-inventory.js +7 -2
- package/package.json +2 -1
- package/skills/agent-depot-apprecipe/SKILL.md +29 -5
package/README.es.md
ADDED
|
@@ -0,0 +1,969 @@
|
|
|
1
|
+
# Agent Depot
|
|
2
|
+
|
|
3
|
+
[English](README.md) · **Español**
|
|
4
|
+
|
|
5
|
+
Agent Depot es un gestor multiplataforma de los recursos reutilizables que usan los
|
|
6
|
+
agentes de programación. Descubre Skills a partir de Sources de Git, las instala en
|
|
7
|
+
uno o varios Hosts (Pi, Claude Code, Codex y OpenCode), gestiona Apps globales de
|
|
8
|
+
usuario y Packages nativos del Host, registra lo que ha instalado y lo actualiza de
|
|
9
|
+
forma segura, todo desde una CLI o una TUI interactiva.
|
|
10
|
+
|
|
11
|
+
Qué hace:
|
|
12
|
+
|
|
13
|
+
- **Sources y catálogo**: registra repositorios Git (además de la Source integrada
|
|
14
|
+
`builtin:agent-depot`) y descubre los Skills que contienen.
|
|
15
|
+
- **Instalar Skills** a nivel global de usuario o por proyecto, en varios Hosts a la
|
|
16
|
+
vez, fijados a una versión o siguiendo la última. Un manifiesto de proyecto permite
|
|
17
|
+
que un checkout nuevo reinstale los mismos Skills.
|
|
18
|
+
- **Actualizaciones**: comprueba y aplica actualizaciones por lotes; cada cambio se
|
|
19
|
+
previsualiza antes y requiere confirmación explícita.
|
|
20
|
+
- **Instalaciones existentes**: informa de los Skills no gestionados que ya hay en
|
|
21
|
+
disco, adopta los que coinciden exactamente con una Source o los elimina mediante
|
|
22
|
+
una ruta explícita.
|
|
23
|
+
- **Apps**: instala, actualiza y desinstala aplicaciones globales de usuario mediante
|
|
24
|
+
App recipes escritas por el usuario que deben aprobarse antes de ejecutarse.
|
|
25
|
+
- **Packages**: instala, actualiza y desinstala bundles nativos del Host (paquetes de
|
|
26
|
+
Pi y plugins de Claude Code) delegando el ciclo de vida en la CLI de cada Host y
|
|
27
|
+
leyendo la versión instalada de los propios archivos de estado del Host. Un bundle
|
|
28
|
+
reserva sus Skills solo mientras lo hayas seleccionado o un Host demuestre que está
|
|
29
|
+
instalado, así que los Skills de un bundle no seleccionado siguen siendo instalables
|
|
30
|
+
por separado.
|
|
31
|
+
- **Profiles**: exporta tus Sources, selecciones de Skills, App recipes y selecciones
|
|
32
|
+
de Packages globales de usuario a un archivo portable e impórtalos, solo añadiendo,
|
|
33
|
+
en otra máquina.
|
|
34
|
+
|
|
35
|
+
Agent Depot nunca sobrescribe ni elimina contenido sin una previsualización y una
|
|
36
|
+
confirmación, y rechaza rutas y enlaces inseguros.
|
|
37
|
+
|
|
38
|
+
Requiere Node.js >= 24 (Active LTS). La [TUI interactiva](#tui-interactiva)
|
|
39
|
+
necesita un terminal interactivo.
|
|
40
|
+
|
|
41
|
+
## Instalación
|
|
42
|
+
|
|
43
|
+
Agent Depot se publica como el paquete con ámbito `@iseoane/agent-depot` y expone el
|
|
44
|
+
comando `agent-depot`. Requiere Node.js >= 24.
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
# Ejecutar sin instalar
|
|
48
|
+
npx @iseoane/agent-depot --version
|
|
49
|
+
npx @iseoane/agent-depot tui
|
|
50
|
+
pnpm dlx @iseoane/agent-depot tui
|
|
51
|
+
|
|
52
|
+
# O instalar globalmente
|
|
53
|
+
npm install --global @iseoane/agent-depot
|
|
54
|
+
pnpm add --global @iseoane/agent-depot
|
|
55
|
+
agent-depot --version
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Los ejemplos siguientes usan el comando `agent-depot`; `npx @iseoane/agent-depot <args>`
|
|
59
|
+
funciona igual sin instalación global.
|
|
60
|
+
|
|
61
|
+
### Actualización
|
|
62
|
+
|
|
63
|
+
`npx` puede reutilizar una copia en caché de una versión anterior. Añade `@latest`
|
|
64
|
+
para forzar la versión más reciente:
|
|
65
|
+
|
|
66
|
+
```sh
|
|
67
|
+
npx @iseoane/agent-depot@latest tui
|
|
68
|
+
pnpm dlx @iseoane/agent-depot@latest tui
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Una instalación global se actualiza con el gestor de paquetes que la instaló:
|
|
72
|
+
|
|
73
|
+
```sh
|
|
74
|
+
npm install --global @iseoane/agent-depot@latest
|
|
75
|
+
pnpm add --global @iseoane/agent-depot@latest
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Un Agent Depot en ejecución nunca degrada los Skills integrados: un Skill instalado
|
|
79
|
+
por un Agent Depot más reciente se notifica como no actualizable (actualiza primero
|
|
80
|
+
Agent Depot).
|
|
81
|
+
|
|
82
|
+
## Uso
|
|
83
|
+
|
|
84
|
+
Con el paquete instalado (o mediante `npx @iseoane/agent-depot`). `agent-depot --help`
|
|
85
|
+
(también `-h` o `help`) muestra el uso y termina con código 0; ejecutarlo sin
|
|
86
|
+
argumentos o con un comando desconocido es un error de uso y termina con código 1.
|
|
87
|
+
|
|
88
|
+
```sh
|
|
89
|
+
agent-depot source list
|
|
90
|
+
agent-depot source add https://github.com/example/skills.git
|
|
91
|
+
agent-depot source refresh git:<source-id>
|
|
92
|
+
agent-depot source refresh git:<source-id> --yes
|
|
93
|
+
agent-depot source remove git:<source-id> --yes
|
|
94
|
+
agent-depot source remove git:<source-id> --skill <id|path> --yes
|
|
95
|
+
agent-depot source migrate git:<old-source-id> git:<new-source-id> --skill <path> --yes
|
|
96
|
+
agent-depot discover builtin:agent-depot git:<source-id>
|
|
97
|
+
agent-depot install --scope project --source builtin:agent-depot --skill architecture --host pi --version latest --portable-v1 --yes
|
|
98
|
+
agent-depot install --scope user-global --source builtin:agent-depot --skill architecture --host pi --version latest --portable-v1 --yes
|
|
99
|
+
# Only for an explicitly reviewed, untracked real-directory conflict:
|
|
100
|
+
agent-depot install --scope project --source builtin:agent-depot --skill architecture --host pi --version latest --portable-v1 --overwrite --yes
|
|
101
|
+
agent-depot install --scope project --manifest --portable-v1 --yes
|
|
102
|
+
agent-depot update check --scope project
|
|
103
|
+
agent-depot update apply --scope project --all --yes
|
|
104
|
+
agent-depot update apply --scope user-global --skill 0 --yes
|
|
105
|
+
agent-depot skill remove <id|path>... --yes
|
|
106
|
+
agent-depot skill remove <id|path> --host <host>... --yes
|
|
107
|
+
agent-depot skill host add <id|path> --host <host>... --yes --confirm-additional-host
|
|
108
|
+
agent-depot uninstall --cli
|
|
109
|
+
agent-depot uninstall --skills --yes
|
|
110
|
+
agent-depot uninstall --unmanaged-skill <exact-global-path> --yes
|
|
111
|
+
agent-depot uninstall --data --yes
|
|
112
|
+
agent-depot app list
|
|
113
|
+
agent-depot app approve <name> --yes
|
|
114
|
+
agent-depot app install <name> --yes
|
|
115
|
+
agent-depot package list
|
|
116
|
+
agent-depot package discover <source-id>
|
|
117
|
+
agent-depot package inspect <source-id>::<bundle-path> --host <host>
|
|
118
|
+
agent-depot package approve <source-id>::<bundle-path> --host <host> --action install
|
|
119
|
+
agent-depot package install <source-id>::<bundle-path> --host <host> --yes
|
|
120
|
+
agent-depot package forget <source-id>::<bundle-path> --host <host> --yes
|
|
121
|
+
agent-depot update check --scope user-global --package <selection>
|
|
122
|
+
agent-depot export --out profile.json
|
|
123
|
+
agent-depot import profile.json --yes
|
|
124
|
+
agent-depot tui
|
|
125
|
+
agent-depot --version
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
También se admiten URLs de directorios de GitHub, como
|
|
129
|
+
`https://github.com/cursor/plugins/tree/main/pstack`: Agent Depot clona el
|
|
130
|
+
repositorio, lee la referencia de la URL y solo descubre Skills dentro de ese
|
|
131
|
+
directorio. Las rutas de los Skills siguen siendo relativas al repositorio.
|
|
132
|
+
La URL completa conserva la identidad de la Source; si ya está registrada,
|
|
133
|
+
basta con refrescarla. La referencia ocupa un segmento de la URL: codifica los
|
|
134
|
+
`/` del nombre de una rama como `%2F` (por ejemplo `tree/release%2Fstable/pstack`).
|
|
135
|
+
Una referencia explícita de versión fija sustituye la de la URL, pero mantiene
|
|
136
|
+
el directorio seleccionado.
|
|
137
|
+
|
|
138
|
+
Los grupos del Catálogo muestran nombres de repositorios en lugar de IDs Git.
|
|
139
|
+
Catálogo e Installations empiezan con todos los grupos contraídos; usa Enter o
|
|
140
|
+
la flecha derecha para abrirlos. Un filtro del Catálogo expande automáticamente
|
|
141
|
+
las Sources con coincidencias.
|
|
142
|
+
|
|
143
|
+
El Catálogo de la TUI avisa por cada Source no disponible y permite seguir
|
|
144
|
+
navegando por las demás. Para crear una caché ausente, ve a Sources (`1`) y
|
|
145
|
+
refresca con `r`; abrir el Catálogo no inicia acceso a la red.
|
|
146
|
+
|
|
147
|
+
`refresh` primero muestra como previsualización la URL registrada. Requiere
|
|
148
|
+
confirmación explícita con `--yes` antes de cualquier acceso a la red y, en caso
|
|
149
|
+
contrario, falla de forma cerrada. La Source `builtin:agent-depot`, propiedad del
|
|
150
|
+
paquete, se lista como de solo lectura y no puede refrescarse.
|
|
151
|
+
|
|
152
|
+
La eliminación de una Source es solo global de usuario y nunca lee manifiestos de
|
|
153
|
+
proyecto ni borra cachés de Sources. Previsualiza todos los Skills globales de
|
|
154
|
+
usuario dependientes y mantiene todos ellos registrados por defecto. Pasa
|
|
155
|
+
`--skill <id|path>` para un subconjunto seleccionado o `--all` para todos los Skills
|
|
156
|
+
dependientes. Se aceptan índices numéricos para la lista de dependientes, pero una
|
|
157
|
+
ruta de Skill literal compuesta solo por dígitos tiene prioridad sobre su índice
|
|
158
|
+
numérico. El borrado de Skills siempre requiere `--yes`; el contenido adoptado y el
|
|
159
|
+
contenido modificado localmente (o que carece de una línea base de confianza)
|
|
160
|
+
reciben advertencias.
|
|
161
|
+
La comprobación previa rechaza rutas inseguras, enlaces inesperados, instalaciones
|
|
162
|
+
inexistentes, destinos seleccionados que se solapan y otros fallos de inspección
|
|
163
|
+
antes de cambiar el estado de la Source o de borrar ningún Skill. Una segunda
|
|
164
|
+
comprobación previa compara el resumen del contenido de cada destino, el indicador
|
|
165
|
+
de adopción y el estado de modificación antes del primer borrado.
|
|
166
|
+
|
|
167
|
+
`skill remove <id|path>...` elimina los Skills gestionados globales de usuario
|
|
168
|
+
seleccionados sin tocar su Source. Cada `<id|path>` es la ruta exacta del Skill o su
|
|
169
|
+
último segmento de ruta cuando es único; las selecciones desconocidas o ambiguas
|
|
170
|
+
fallan antes de cambiar nada. Previsualiza cada borrado (con advertencias de
|
|
171
|
+
adoptado/modificado), requiere `--yes`, vuelve a comprobar los destinos y después
|
|
172
|
+
borra los archivos y sus registros de instalación. Es solo global de usuario: las
|
|
173
|
+
instalaciones y manifiestos de proyecto nunca se leen ni se modifican, y la caché de
|
|
174
|
+
Git se conserva.
|
|
175
|
+
|
|
176
|
+
`skill host add <id|path> --host <host>... [--yes] [--confirm-additional-host]`
|
|
177
|
+
expone un Skill global de usuario ya instalado a más Hosts sin cambiar su contenido
|
|
178
|
+
ni su versión, y después registra los nuevos Hosts. Los Hosts distintos de Claude
|
|
179
|
+
comparten la ubicación canónica `~/.agents/skills/<skill>` y Claude es un enlace
|
|
180
|
+
simbólico a ella, por lo que solo se crea, como mucho, el enlace simbólico de Claude
|
|
181
|
+
que falte. La previsualización lista las nuevas ubicaciones; como expone el Skill a
|
|
182
|
+
más Hosts, necesita tanto `--yes` como `--confirm-additional-host`. Rechaza una
|
|
183
|
+
ubicación de Claude que ya contenga algo distinto del enlace simbólico gestionado, y
|
|
184
|
+
un Skill que no esté instalado en la ubicación canónica (exponerlo requeriría
|
|
185
|
+
copiarlo).
|
|
186
|
+
|
|
187
|
+
`skill remove <id|path> --host <host>... [--yes]` elimina únicamente esos Hosts. Por
|
|
188
|
+
esta vía solo se puede borrar el enlace simbólico gestionado de Claude; el
|
|
189
|
+
directorio canónico respalda a todos los Hosts restantes (incluido el enlace
|
|
190
|
+
simbólico de Claude) y permanece hasta que se elimina el último Host. Eliminar todos
|
|
191
|
+
los Hosts registrados es una eliminación completa con las advertencias habituales de
|
|
192
|
+
adoptado/modificado. Los destinos se vuelven a comprobar antes de borrar y el
|
|
193
|
+
registro se actualiza después. Las instalaciones de proyecto no se ven afectadas.
|
|
194
|
+
|
|
195
|
+
Para sustituir la URL de una Source, registra primero la nueva Source Git y después
|
|
196
|
+
migra explícitamente las identidades globales de usuario con `source migrate <old-id> <new-id> (--skill <path>... |
|
|
197
|
+
--all) [--yes]`. La migración reescribe solo los registros globales de usuario
|
|
198
|
+
seleccionados: nunca mueve instalaciones físicas ni reescribe manifiestos de
|
|
199
|
+
proyecto. Las colisiones de identidad se rechazan. Las políticas de versión fija se
|
|
200
|
+
conservan solo cuando la Source de reemplazo aporta evidencia de commit coincidente;
|
|
201
|
+
en caso contrario se elimina la evidencia de la Source resuelta anterior. Las líneas
|
|
202
|
+
base de contenido siguen ligadas a la instalación sin cambios, y los métodos
|
|
203
|
+
proporcionados por el usuario se conservan para su revisión en lugar de reescribirse.
|
|
204
|
+
|
|
205
|
+
## Opciones de desinstalación
|
|
206
|
+
|
|
207
|
+
La desinstalación es solo global de usuario y nunca lee ni cambia manifiestos de
|
|
208
|
+
proyecto. Las opciones son independientes: `--skills` elimina todos los Skills
|
|
209
|
+
gestionados globales de usuario, `--unmanaged-skill <exact-global-path>` elimina
|
|
210
|
+
únicamente directorios reales no gestionados seleccionados explícitamente bajo
|
|
211
|
+
`~/.agents/skills` o `~/.claude/skills`, `--data` elimina el archivo de estado de
|
|
212
|
+
catálogo/configuración y `--cli` muestra el traspaso al gestor de paquetes para
|
|
213
|
+
eliminar la CLI persistente. La eliminación de no gestionados nunca busca ni infiere
|
|
214
|
+
una Source, rechaza enlaces simbólicos, rutas transitorias/de copia de seguridad,
|
|
215
|
+
árboles inválidos, rutas gestionadas y solapamientos, y solo borra de forma
|
|
216
|
+
permanente después de mover el árbol sin cambios a un área de preparación del mismo
|
|
217
|
+
directorio padre. Los Skills y los datos del catálogo se conservan cuando se omiten
|
|
218
|
+
sus indicadores. Eliminar Skills reconcilia sus registros de instalación; eliminar
|
|
219
|
+
los datos conservando los Skills deja esos Skills sin registrar. Todo borrado del
|
|
220
|
+
sistema de archivos requiere `--yes` tras la previsualización completa, y la
|
|
221
|
+
previsualización de no gestionados advierte de que Agent Depot no puede garantizar la
|
|
222
|
+
recuperación sin una Source resoluble. Inmediatamente antes de cada eliminación
|
|
223
|
+
destructiva, Agent Depot vuelve a leer los registros de instalación gestionados y
|
|
224
|
+
falla de forma cerrada si han cambiado o si ahora reclaman la ruta seleccionada. El
|
|
225
|
+
almacén de estado de las Sources serializa las actualizaciones cooperantes, pero un
|
|
226
|
+
proceso no cooperante aún puede provocar una condición de carrera entre la última
|
|
227
|
+
comprobación y el renombrado/borrado en el sistema de archivos; los fallos de
|
|
228
|
+
preparación restauran la ruta original cuando se conoce el resultado y, en caso
|
|
229
|
+
contrario, conservan la ruta de preparación con un error de estado incierto. Agent
|
|
230
|
+
Depot nunca invoca ni infiere un gestor de paquetes, y las cachés de las Sources Git
|
|
231
|
+
se conservan. `uninstall --cli` muestra los comandos exactos
|
|
232
|
+
(`npm uninstall --global @iseoane/agent-depot`, `pnpm remove --global @iseoane/agent-depot`);
|
|
233
|
+
las ejecuciones con `npx`/`pnpm dlx` no necesitan desinstalación, solo dejan una
|
|
234
|
+
entrada de caché.
|
|
235
|
+
|
|
236
|
+
## Actualizaciones por lotes
|
|
237
|
+
|
|
238
|
+
Comprueba cualquiera de los dos ámbitos de instalación independientes antes de
|
|
239
|
+
aplicar actualizaciones:
|
|
240
|
+
|
|
241
|
+
```sh
|
|
242
|
+
agent-depot update check --scope project
|
|
243
|
+
agent-depot update check --scope user-global
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
La comprobación informa por separado de los Skills gestionados `Updateable`,
|
|
247
|
+
`Current` y `Unknown`. `Unknown` significa que una selección gestionada registrada
|
|
248
|
+
no pudo evaluarse de forma segura (por ejemplo, porque no está disponible la
|
|
249
|
+
evidencia de su Source o de su versión); sigue siendo gestionada, pero no es
|
|
250
|
+
actualizable. Solo para `--scope user-global`, la comprobación también informa de los
|
|
251
|
+
directorios de Skill reales `Unmanaged` encontrados en ubicaciones absolutas exactas
|
|
252
|
+
bajo las raíces globales de usuario admitidas. Estos no son candidatos a
|
|
253
|
+
actualización, no se incluyen en los recuentos de estado de los gestionados y nunca
|
|
254
|
+
se buscan a través de una Source. Las comprobaciones de proyecto no inventarían ni
|
|
255
|
+
informan de directorios no gestionados.
|
|
256
|
+
|
|
257
|
+
Las entradas globales omitidas o inseguras se muestran por separado con
|
|
258
|
+
orientaciones y no son entradas Unmanaged ni candidatas a eliminación. Pueden ser
|
|
259
|
+
enlaces simbólicos, raíces o archivos de Skill inseguros, o rutas transitorias de
|
|
260
|
+
Agent Depot; inspecciónalas manualmente. El flujo posterior de eliminación de no
|
|
261
|
+
gestionados requiere su propia previsualización de ruta exacta y confirmación
|
|
262
|
+
explícita.
|
|
263
|
+
|
|
264
|
+
Aplica todos los Skills actualizables o selecciona uno o varios por su ID de
|
|
265
|
+
actualización impreso, su índice numérico o una ruta de Skill inequívoca:
|
|
266
|
+
|
|
267
|
+
```sh
|
|
268
|
+
agent-depot update apply --scope project --all --yes
|
|
269
|
+
agent-depot update apply --scope user-global --skill 0 --yes
|
|
270
|
+
agent-depot update apply --scope user-global --package git:<source-id>::pi:. --yes
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
Solo para `--scope user-global`, la comprobación también evalúa cada Package
|
|
274
|
+
registrado y `update apply` acepta `--package <selection>` repetible o incluye los
|
|
275
|
+
Packages actualizables con `--all`. Un Package con estado de versión `unknown`
|
|
276
|
+
nunca se ofrece como actualización. Los Packages se ejecutan después de los Skills
|
|
277
|
+
y las Apps, cada Package seleccionado previsualiza su plan congelado y se aprueba
|
|
278
|
+
mediante `package approve --action update` el recibo de actualización que falte antes de ejecutar desde la CLI. El ámbito de proyecto nunca lee ni
|
|
279
|
+
selecciona un Package.
|
|
280
|
+
|
|
281
|
+
Un Skill registrado en una ruta de proyecto no canónica (fuera de
|
|
282
|
+
`.agents/skills/<name>` y `.claude/skills/<name>`) está controlado por el
|
|
283
|
+
repositorio, por lo que `--yes` por sí solo no lo actualiza. La previsualización
|
|
284
|
+
imprime la ruta relativa; repite el comando con `--confirm-path` (una vez por cada
|
|
285
|
+
ruta de ese tipo):
|
|
286
|
+
|
|
287
|
+
```sh
|
|
288
|
+
agent-depot update apply --scope project --all --yes --confirm-path vendor/alpha
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
Aplicar siempre previsualiza primero cada candidato seleccionado. `--yes` es
|
|
292
|
+
obligatorio y confirma cada candidato de forma independiente; sin él no se cambian
|
|
293
|
+
archivos ni estado. Las instalaciones modificadas se señalan y nunca se sobrescriben
|
|
294
|
+
sin esa confirmación explícita. Los comandos de actualización externos muestran su
|
|
295
|
+
vector de argumentos exacto, el directorio de trabajo, el destino, los cambios
|
|
296
|
+
declarados y una advertencia de que los efectos secundarios no pueden verificarse ni
|
|
297
|
+
revertirse. Los Skills de versión desconocida se notifican pero no pueden
|
|
298
|
+
seleccionarse para su aplicación, y los fallos independientes se resumen después de
|
|
299
|
+
que terminen los candidatos restantes.
|
|
300
|
+
|
|
301
|
+
`discover` requiere uno o más ID de Source en cada invocación. Usa `source list` para
|
|
302
|
+
encontrar los ID registrados. Lee el HEAD actual del espejo Git en caché sin
|
|
303
|
+
refrescarlo, así que ejecuta primero `source refresh <id> --yes` cuando un espejo no
|
|
304
|
+
esté disponible o esté obsoleto. Imprime una línea `Candidate:` separada por
|
|
305
|
+
tabuladores por cada Skill reconocido con este formato:
|
|
306
|
+
|
|
307
|
+
```text
|
|
308
|
+
Candidate: <source-id>\t<skill-path>\t<name>\t<description>
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
El descubrimiento solo presenta candidatos. No persiste la selección de Sources, no
|
|
312
|
+
selecciona candidatos ni instala nada automáticamente.
|
|
313
|
+
|
|
314
|
+
## Instalación global de usuario
|
|
315
|
+
|
|
316
|
+
Las instalaciones globales de usuario usan las mismas ubicaciones canónicas de Host
|
|
317
|
+
bajo el directorio personal del usuario (`.agents/skills/<skill>` y, cuando se
|
|
318
|
+
solicita, un enlace simbólico de Claude en `.claude/skills/<skill>`). Son
|
|
319
|
+
independientes de los manifiestos de proyecto y se registran en el estado compartido
|
|
320
|
+
de Sources por usuario, de modo que distintas invocaciones de la CLI reutilizan los
|
|
321
|
+
mismos registros de instalación. La Source, el Skill, los Hosts y la ubicación real
|
|
322
|
+
adoptada o instalada seleccionados se previsualizan antes de la confirmación con
|
|
323
|
+
`--yes`.
|
|
324
|
+
|
|
325
|
+
Una instalación directa de proyecto o global de usuario puede configurar su método de
|
|
326
|
+
instalación antes de la primera instalación con `--method <json>`. El valor debe ser
|
|
327
|
+
un único objeto de método JSON estricto, por ejemplo:
|
|
328
|
+
|
|
329
|
+
```sh
|
|
330
|
+
agent-depot install --scope user-global --source builtin:agent-depot \
|
|
331
|
+
--skill architecture --host pi --version latest \
|
|
332
|
+
--method '{"kind":"command","argv":["node","scripts/install.mjs"],"cwd":"tools"}' \
|
|
333
|
+
--portable-v1 --yes
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
El método se almacena como `methods.install`, tiene prioridad sobre los metadatos de
|
|
337
|
+
la Source y se ejecuta a partir de un vector de argumentos sin shell. El comando y
|
|
338
|
+
los cambios previstos se previsualizan antes de la confirmación. Esta opción solo
|
|
339
|
+
configura el método de instalación; la ejecución de actualizaciones no forma parte de
|
|
340
|
+
este ciclo de vida.
|
|
341
|
+
|
|
342
|
+
## Instalación de proyecto
|
|
343
|
+
|
|
344
|
+
La instalación de proyecto requiere un `--scope project` explícito, un ID de Source,
|
|
345
|
+
la ruta del Skill, uno o más valores de `--host` (`pi`, `claude`, `codex` u
|
|
346
|
+
`opencode`) y una política de versión (`--version latest` o
|
|
347
|
+
`--version fixed:<value>`). Las Sources externas requieren un commit de Git fijo de
|
|
348
|
+
40 o 64 caracteres. Para la Source integrada, `latest` sigue el paquete de Agent
|
|
349
|
+
Depot instalado, mientras que una política fija solo se acepta cuando su valor es
|
|
350
|
+
exactamente igual a la versión actual de ese paquete; los demás valores fallan de
|
|
351
|
+
forma cerrada porque la versión de paquete solicitada no puede reproducirse. Un
|
|
352
|
+
manifiesto escrito por otro Agent Depot sigue siendo cargable: un Skill integrado
|
|
353
|
+
fijado a una versión distinta aparece como desconocido en `update check` ("pinned to
|
|
354
|
+
Agent Depot X; running Y") y `install --manifest` lo omite, mientras que los demás
|
|
355
|
+
Skills siguen funcionando. La Source integrada no admite `--ref`, y la CLI lo rechaza
|
|
356
|
+
explícitamente. Un `latest` externo puede seguir una ref mutable segura explícita,
|
|
357
|
+
pero una ref de commit inmutable debe usar una política fija que coincida con ese
|
|
358
|
+
commit. El indicador `--portable-v1` exige la regla de formato portable validada; la
|
|
359
|
+
compatibilidad se deriva de los bytes de origen y de las exclusiones en lugar de
|
|
360
|
+
confiar en una afirmación del llamante. Se admite un directorio `agents/` relativo
|
|
361
|
+
al Skill: sus archivos permanecen dentro del árbol del Skill seleccionado y se
|
|
362
|
+
instalan en `.agents/skills/<skill>/agents/`, en lugar de tratarse como un
|
|
363
|
+
directorio `agents/` a nivel de Host. Otros directorios de primer nivel específicos
|
|
364
|
+
de Host, como `.claude`, `.codex`, `.opencode`, `.pi`, `extensions`, `plugins` y
|
|
365
|
+
`mcp`, quedan fuera del formato portable V1.
|
|
366
|
+
|
|
367
|
+
La CLI lee el árbol inmutable del Skill seleccionado antes de pedir `--yes`. Las
|
|
368
|
+
incompatibilidades con el formato portable se rechazan antes de la confirmación o de
|
|
369
|
+
cualquier escritura, mostrando en el error la ruta de origen rechazada y el motivo.
|
|
370
|
+
La identidad y el contenido del destino inspeccionados se arrastran a través de la
|
|
371
|
+
confirmación y se comprueban de nuevo inmediatamente antes del reemplazo; si hay
|
|
372
|
+
deriva, se aborta sin mover el destino. Una previsualización correcta lista los
|
|
373
|
+
archivos seleccionados exactos, incluidos los archivos de agents relativos al Skill
|
|
374
|
+
admitidos, y solo un `--yes` confirmado procede a la instalación.
|
|
375
|
+
|
|
376
|
+
Una instalación confirmada escribe `agent-depot.json` en la raíz del proyecto. El
|
|
377
|
+
manifiesto almacena la identidad integrada o una URL canónica externa, la ruta del
|
|
378
|
+
Skill, la política de versión y los Hosts, de modo que
|
|
379
|
+
`install --scope project --manifest` pueda resolverlo sin el catálogo global de
|
|
380
|
+
Sources. Los manifiestos portables rechazan las Sources de ruta local porque su
|
|
381
|
+
identidad no es resoluble de forma independiente. Las Sources Git externas solo se
|
|
382
|
+
refrescan tras la confirmación.
|
|
383
|
+
|
|
384
|
+
El árbol completo del Skill se copia byte a byte y se conservan los modos
|
|
385
|
+
ejecutables. Antes de la confirmación se inspeccionan las ubicaciones de Host
|
|
386
|
+
existentes y se muestran los conflictos. El contenido idéntico se adopta en su sitio;
|
|
387
|
+
un Skill ya registrado como gestionado debe cambiarse con `update apply`, no con una
|
|
388
|
+
nueva instalación. Por defecto no se sobrescribe ninguna ruta existente. Para un
|
|
389
|
+
directorio real sin registrar cuyo contenido difiere, el reemplazo requiere tanto
|
|
390
|
+
`--overwrite` como `--yes`:
|
|
391
|
+
|
|
392
|
+
```sh
|
|
393
|
+
agent-depot install --scope project --source builtin:agent-depot \
|
|
394
|
+
--skill architecture --host pi --version latest --portable-v1 --overwrite --yes
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
La previsualización es explícita sobre esta distinción: sin `--yes` no se modifica
|
|
398
|
+
ningún archivo ni estado de instalación; con ambos indicadores, informa de que el
|
|
399
|
+
destino será reemplazado y muestra el patrón de copia de seguridad
|
|
400
|
+
`.agent-depot-backup-<generated-suffix>`. El mismo contrato se aplica a
|
|
401
|
+
`--scope user-global`. Los enlaces simbólicos, los archivos especiales, los árboles
|
|
402
|
+
inseguros, las ubicaciones ambiguas de Claude y las condiciones de carrera entre la
|
|
403
|
+
previsualización y la mutación fallan de forma cerrada. El reemplazo primero mueve el
|
|
404
|
+
directorio original exacto a una copia de seguridad persistente junto a la
|
|
405
|
+
instalación y después instala el árbol inmutable de la previsualización. La CLI
|
|
406
|
+
imprime la ruta de la copia de seguridad; las copias de seguridad correctas nunca se
|
|
407
|
+
borran automáticamente. Los fallos de reemplazo en el sistema de archivos y de
|
|
408
|
+
manifiesto/estado global se restauran dentro del proceso antes de devolver el error.
|
|
409
|
+
La reversión verifica la copia de seguridad retenida y el contenido de reemplazo
|
|
410
|
+
antes de borrar el reemplazo y falla de forma cerrada cuando alguno de los dos ha
|
|
411
|
+
cambiado. Estas son las comprobaciones portables del sistema de archivos más fuertes
|
|
412
|
+
disponibles, no un compare-and-swap atómico entre procesos: un escritor externo aún
|
|
413
|
+
puede provocar una condición de carrera tras la comprobación final, por lo que Agent
|
|
414
|
+
Depot no afirma serializar escritores concurrentes. Esto no es una recuperación ante
|
|
415
|
+
caídas: una caída del proceso después de mover el original puede dejar el directorio
|
|
416
|
+
`.agent-depot-backup-*` retenido sin un estado de reemplazo garantizado. Detén la
|
|
417
|
+
CLI, inspecciona la copia de seguridad y el destino, y renombra manualmente la copia
|
|
418
|
+
de seguridad retenida a la ruta de instalación prevista cuando sea necesaria la
|
|
419
|
+
recuperación; después vuelve a ejecutar la instalación. Los métodos de instalación
|
|
420
|
+
externos solo se ejecutan después de que la transacción del sistema de archivos y del
|
|
421
|
+
estado del ámbito seleccionado haya tenido éxito.
|
|
422
|
+
Claude se expone mediante un enlace simbólico a la instalación canónica
|
|
423
|
+
`.agents/skills/<skill>`.
|
|
424
|
+
|
|
425
|
+
## Métodos de instalación proporcionados por el usuario
|
|
426
|
+
|
|
427
|
+
Una selección de proyecto puede persistir métodos portables de instalación y de
|
|
428
|
+
futura actualización en su campo `methods`:
|
|
429
|
+
|
|
430
|
+
```json
|
|
431
|
+
{
|
|
432
|
+
"source": { "kind": "external", "url": "https://example.com/skills.git", "ref": "main" },
|
|
433
|
+
"path": "portable/example",
|
|
434
|
+
"version": { "policy": "latest" },
|
|
435
|
+
"hosts": ["pi"],
|
|
436
|
+
"methods": {
|
|
437
|
+
"install": { "kind": "command", "argv": ["node", "scripts/install.mjs"], "cwd": "tools" },
|
|
438
|
+
"update": { "kind": "command", "argv": ["node", "scripts/update.mjs"] }
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
La misma forma de selección se almacena bajo `userGlobalInstallations` en el estado
|
|
444
|
+
compartido `sources.json` global de usuario. `methods.install` tiene prioridad sobre
|
|
445
|
+
un método declarado por la Source seleccionada; el método de la Source solo se usa
|
|
446
|
+
cuando no existe un método de instalación configurado. El método `update` configurado
|
|
447
|
+
actualmente solo se persiste; la ejecución de actualizaciones pertenece al flujo de
|
|
448
|
+
actualización.
|
|
449
|
+
|
|
450
|
+
Antes de ejecutar cualquier método configurado o de la Source, la CLI previsualiza el
|
|
451
|
+
argv exacto, el cwd resuelto del proyecto o global de usuario, los archivos
|
|
452
|
+
seleccionados y las ubicaciones de instalación previstas. Requiere `--yes`
|
|
453
|
+
explícito; rechazar la previsualización no realiza ninguna instalación ni ejecuta
|
|
454
|
+
ningún método. Los métodos son vectores de argumentos, nunca cadenas de shell: deben
|
|
455
|
+
usar un único comando portable sin variantes específicas del sistema operativo, y se
|
|
456
|
+
rechazan los intérpretes de shell y la sintaxis de shell. La configuración no debe
|
|
457
|
+
contener credenciales literales. La validación rechaza patrones evidentes de
|
|
458
|
+
credenciales con el mejor esfuerzo posible; no puede detectar todos los secretos, por
|
|
459
|
+
lo que los usuarios siguen siendo responsables de evitar secretos en los argumentos o
|
|
460
|
+
en los archivos del repositorio.
|
|
461
|
+
|
|
462
|
+
Un método confirmado se ejecuta como código arbitrario de un proceso hijo, sin
|
|
463
|
+
sandbox. Puede cambiar cualquier ubicación del sistema de archivos o sistema externo
|
|
464
|
+
disponible para ese proceso; Agent Depot no puede previsualizar ni revertir esos
|
|
465
|
+
efectos secundarios. La instalación gestionada del Skill y el manifiesto/estado se
|
|
466
|
+
persisten antes de la ejecución del método, y un fallo del método conserva esos
|
|
467
|
+
registros. Los metadatos de la Source se leen de la misma instantánea de árbol
|
|
468
|
+
inmutable mostrada en la previsualización, no de una relectura mutable de la última
|
|
469
|
+
versión.
|
|
470
|
+
|
|
471
|
+
Una Source puede declarar un método de instalación únicamente mediante un archivo de
|
|
472
|
+
metadatos JSON explícito dentro del Skill seleccionado (`.agent-depot.json`,
|
|
473
|
+
`agent-depot-method.json` o `installation-method.json`), nunca a partir de la prosa
|
|
474
|
+
de `SKILL.md`. El archivo puede contener el objeto de método o
|
|
475
|
+
`{ "method": { "kind": "command", "argv": ["executable", "arg", ...],
|
|
476
|
+
"cwd": "optional/project-relative-directory" } }`. El ejecutable debe ser un nombre
|
|
477
|
+
de comando simple y seguro, y `cwd` debe permanecer por debajo de la raíz del
|
|
478
|
+
proyecto tras resolver el realpath. Un método confirmado sigue pasando por la
|
|
479
|
+
validación de compatibilidad, la instalación canónica y la ruta del enlace simbólico
|
|
480
|
+
de Claude. Se rechazan las instalaciones por lotes que contengan métodos porque los
|
|
481
|
+
efectos secundarios de procesos hijos arbitrarios no se pueden revertir. Las entradas
|
|
482
|
+
de manifiesto que identifican una ruta local externa son rechazadas por el
|
|
483
|
+
resolvedor exclusivo de Git con un error accionable de Source no admitida; las
|
|
484
|
+
Sources por URL siguen siendo autocontenidas y resolubles en una máquina nueva.
|
|
485
|
+
|
|
486
|
+
## TUI interactiva
|
|
487
|
+
|
|
488
|
+
```sh
|
|
489
|
+
agent-depot tui
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
La TUI es un front end de [Ink](https://github.com/vadimdemedes/ink) (React para
|
|
493
|
+
terminales) sobre las mismas operaciones que la CLI. Necesita Node.js >= 24 y un
|
|
494
|
+
terminal interactivo; en caso contrario, `tui` falla con un error. Cambia de vista
|
|
495
|
+
con `1`-`5` y sal con `q` (no mientras haya un aviso abierto). Toda lista se
|
|
496
|
+
desplaza cuando es más alta que el terminal. `j`/`k` o las flechas mueven la
|
|
497
|
+
selección.
|
|
498
|
+
|
|
499
|
+
| Vista | Propósito |
|
|
500
|
+
| --- | --- |
|
|
501
|
+
| 1 Sources | Sources de Git (sus skills y Packages) y recetas App del usuario en una sola lista, con tipos `skills`/`app` y acciones contextuales. |
|
|
502
|
+
| 2 Catalog | Skills que se pueden instalar: los que aún no están instalados, como Source y luego Skills. Cada Source muestra además un grupo Packages, y los Skills que posee un bundle se marcan y se atenúan. |
|
|
503
|
+
| 3 Installations | Lo que hay en disco: instalaciones gestionadas (globales de usuario y de proyecto), selecciones de Packages y skills globales de usuario no gestionados. |
|
|
504
|
+
| 4 Updates | Skills y Packages gestionados con una versión más reciente disponible, para el ámbito global de usuario y de proyecto. |
|
|
505
|
+
| 5 Import/Export | Transferir las elecciones portables de Sources globales de usuario, las selecciones de Skills, las App recipes y las selecciones de Packages. |
|
|
506
|
+
|
|
507
|
+
Teclas por vista (los avisos también aceptan `Esc` para cancelar y `y`/`n` para
|
|
508
|
+
confirmar):
|
|
509
|
+
|
|
510
|
+
| Vista | Teclas |
|
|
511
|
+
| --- | --- |
|
|
512
|
+
| Sources | `j`/`k` recorren Sources de Git y recetas App, sin cambiar de sección con Tab. `Enter` abre el Catálogo de una Source de Git (sus skills y Packages) o previsualiza/aprueba una receta. `n` añade una Source de Git reutilizable o guía la creación de recetas; `r` refresca Sources o recarga el estado de recetas; `d` elimina. `space`/`a` solo marcan Sources de Git. |
|
|
513
|
+
| Catalog | `Enter`/flechas expandir y contraer, `space` marcar, `a` marcar todos los listados, `i` instalar las Skills marcadas (o el skill resaltado) o previsualizar el bundle de Package resaltado, `/` filtrar, `s` alternar entre una Source o todas (cuando se abre desde una Source) |
|
|
514
|
+
| Installations | `Enter`/flechas expandir y contraer, `u` desinstalar (todos los Hosts o los Hosts elegidos) o eliminar un skill no gestionado, `h` o `i` añadir Hosts a una instalación, `A` o `Enter` adoptar un skill no gestionado, `space` marca una hoja y `a` marca todas las hojas visibles: con marcas, `u` y `h` actúan sobre todas ellas con una única previsualización combinada y una única confirmación (las instalaciones de proyecto se omiten con un motivo). En una fila de Package: `i` previsualiza el plan de instalación congelado y lo ejecuta, aprobando antes el recibo si falta; `Enter` solo aprueba la declaración de instalación; `U` actualiza, `u` desinstala, `f` olvida el registro de selección. Las filas de Package no se pueden marcar para acciones por lotes. |
|
|
515
|
+
| Updates | `space` marcar, `a` marcar todo, `t`/`p`/`g` mostrar todo, proyecto o global de usuario, `Enter` previsualizar las marcas, `r` comprobar de nuevo, las flechas pliegan la línea "cannot assess". Un Package marcado se une al lote y se aprueba antes de ejecutar su actualización. |
|
|
516
|
+
| Import/Export | `e` exportar, `i` importar; introduce una ruta de archivo, `space` alterna opciones, `a` alterna todas, `Enter` previsualiza, `y` aplica; `j`/`k` desplazan las previsualizaciones y los resultados |
|
|
517
|
+
|
|
518
|
+
Al eliminar una receta App se comprueban su comando de versión aprobado y su
|
|
519
|
+
seguimiento. Si la App está instalada o sigue registrada, la TUI ofrece el flujo
|
|
520
|
+
existente de desinstalación: `n` cancela la eliminación y un fallo conserva la
|
|
521
|
+
receta. Tras verificar la desinstalación —o si no está instalada— se confirma por
|
|
522
|
+
separado el borrado exclusivo del archivo o enlace de la receta. No se eliminan
|
|
523
|
+
implícitamente datos de la App ni configuración de Hosts. Las recetas inválidas
|
|
524
|
+
deben repararse antes de poder comprobar el estado de su App.
|
|
525
|
+
|
|
526
|
+
Modelo de seguridad:
|
|
527
|
+
|
|
528
|
+
- No se escribe nada antes de una previsualización y un `y` explícito. Exponer un
|
|
529
|
+
skill a un Host adicional necesita una segunda confirmación, separada, como
|
|
530
|
+
`--confirm-additional-host`.
|
|
531
|
+
- Una instalación refresca su Source Git antes de la previsualización, de modo que el
|
|
532
|
+
contenido que confirmas es el contenido que se aplica. La vista Updates refresca
|
|
533
|
+
las Sources Git en uso cuando entras en ella y con `r`.
|
|
534
|
+
- Una acción de Package previsualiza la declaración congelada y los comandos exactos
|
|
535
|
+
del Host. Si falta el recibo de la acción, el primer `y` lo aprueba y un segundo `y`
|
|
536
|
+
ejecuta el comando del Host; una acción ya aprobada se ejecuta con el primer `y`.
|
|
537
|
+
`n` o `Esc` en cualquiera de las dos puertas cancela sin aprobar ni ejecutar nada.
|
|
538
|
+
Listar y recargar Packages nunca ejecuta un comando del Host.
|
|
539
|
+
- La Source integrada es fija: se muestra como una fila no seleccionable y no puede
|
|
540
|
+
refrescarse ni eliminarse.
|
|
541
|
+
- La eliminación es solo global de usuario. Las instalaciones de proyecto se listan,
|
|
542
|
+
pero la desinstalación de proyecto no está admitida (`u` sobre una fila de proyecto
|
|
543
|
+
muestra un mensaje).
|
|
544
|
+
- Los skills no gestionados se eliminan solo desde las rutas listadas en la
|
|
545
|
+
previsualización. Un enlace simbólico se elimina como enlace; su destino nunca se
|
|
546
|
+
toca.
|
|
547
|
+
- Las instalaciones y eliminaciones por lotes se aplican elemento a elemento; un
|
|
548
|
+
fallo no detiene a los demás y cada elemento informa de su propio resultado.
|
|
549
|
+
|
|
550
|
+
Consulta [CONTEXT.md](https://github.com/iseoane/agent-depot/blob/main/CONTEXT.md) para ver los términos del dominio y [docs/adr](https://github.com/iseoane/agent-depot/tree/main/docs/adr) para ver las decisiones que hay detrás de la TUI.
|
|
551
|
+
|
|
552
|
+
## Configuración y caché
|
|
553
|
+
|
|
554
|
+
El catálogo de Sources y los registros de instalación globales de usuario se
|
|
555
|
+
almacenan juntos en:
|
|
556
|
+
|
|
557
|
+
- Linux y otras plataformas Unix: `$XDG_STATE_HOME/agent-depot/sources.json`,
|
|
558
|
+
o `~/.local/state/agent-depot/sources.json` cuando `XDG_STATE_HOME` no está
|
|
559
|
+
definida.
|
|
560
|
+
- Windows: `%APPDATA%/Agent Depot/sources.json` (con respaldo en el directorio
|
|
561
|
+
`AppData/Roaming` del usuario).
|
|
562
|
+
|
|
563
|
+
Los espejos Git se almacenan en caché por separado del catálogo:
|
|
564
|
+
|
|
565
|
+
- Linux y otras plataformas Unix: `$XDG_CACHE_HOME/agent-depot/git-sources`,
|
|
566
|
+
o `~/.cache/agent-depot/git-sources`.
|
|
567
|
+
- Windows: `%LOCALAPPDATA%/Agent Depot/git-sources`.
|
|
568
|
+
|
|
569
|
+
## Limitaciones
|
|
570
|
+
|
|
571
|
+
Los Packages están limitados a los Hosts Pi y Claude Code en V1. El empaquetado de
|
|
572
|
+
Codex y OpenCode, los paquetes de Pi procedentes de npm, los Packages de ámbito de
|
|
573
|
+
proyecto y los marketplace de Claude externos quedan aplazados, y una selección de
|
|
574
|
+
Claude de versión fija se rechaza; consulta [Packages](#packages).
|
|
575
|
+
|
|
576
|
+
Solo se aceptan URL de repositorios Git que usen `git:`, `http:`, `https:` o `ssh:`.
|
|
577
|
+
`refresh` usa la URL registrada y ejecuta Git con matrices de argumentos, sin shell.
|
|
578
|
+
Crea u obtiene un espejo bare, sincroniza explícitamente todas las refs y poda las
|
|
579
|
+
refs eliminadas; no hace checkout de archivos, no instala skills ni elige Sources
|
|
580
|
+
automáticamente. Se requiere acceso a la red para un refresh confirmado.
|
|
581
|
+
|
|
582
|
+
## Desarrollo
|
|
583
|
+
|
|
584
|
+
Desde un checkout de código fuente, compila y ejecuta la CLI directamente:
|
|
585
|
+
|
|
586
|
+
```sh
|
|
587
|
+
pnpm install
|
|
588
|
+
pnpm build
|
|
589
|
+
node dist/src/cli.js --version
|
|
590
|
+
```
|
|
591
|
+
|
|
592
|
+
## Análisis estático
|
|
593
|
+
|
|
594
|
+
[Fallow](https://docs.fallow.tools) 3.30.0 se ejecuta mediante `npx --yes fallow@3.30.0`
|
|
595
|
+
(fijado, sin instalar ninguna dependencia) y lee `.fallowrc.json`, que define los
|
|
596
|
+
puntos de entrada y los límites de las capas de módulos (`cli` -> `tui` -> `application`
|
|
597
|
+
-> `core` -> `infrastructure`; las importaciones solo pueden apuntar hacia abajo, y
|
|
598
|
+
`cli` también puede usar directamente las capas inferiores). `scripts/**` forma una
|
|
599
|
+
zona aislada `tooling`. Todo archivo fuente debe pertenecer a una zona; los módulos
|
|
600
|
+
de App y Profile están en `application`, excepto `atomic-file.ts`, que está en
|
|
601
|
+
`infrastructure`.
|
|
602
|
+
|
|
603
|
+
- `pnpm audit:dead-code`: archivos, exportaciones y dependencias sin usar, además de
|
|
604
|
+
violaciones de límites. Debe salir limpio.
|
|
605
|
+
- `pnpm audit:dupes`: duplicación de código (umbral del 6%).
|
|
606
|
+
- `pnpm audit:health`: complejidad y puntuaciones CRAP usando cobertura real; falla
|
|
607
|
+
cuando la puntuación de salud cae por debajo de 85.
|
|
608
|
+
- `pnpm audit:all`: ejecuta las tres comprobaciones en orden.
|
|
609
|
+
- `pnpm test:coverage`: ejecuta los tests con la cobertura V8 integrada
|
|
610
|
+
(`NODE_V8_COVERAGE`, source maps) en `coverage/v8`, que Fallow lee.
|
|
611
|
+
Recompila `dist/` con source maps; no se necesitan dependencias adicionales.
|
|
612
|
+
|
|
613
|
+
## App recipes globales de usuario
|
|
614
|
+
|
|
615
|
+
Coloca recipes JSON propiedad del usuario en `apps/`, junto al `sources.json` por
|
|
616
|
+
usuario (Linux/WSL: `${XDG_STATE_HOME:-~/.local/state}/agent-depot/apps`; Windows:
|
|
617
|
+
`%APPDATA%\Agent Depot\apps`). Las recipes nunca se reescriben ni las suministran las
|
|
618
|
+
Sources.
|
|
619
|
+
|
|
620
|
+
```sh
|
|
621
|
+
agent-depot app schema
|
|
622
|
+
agent-depot app validate /path/to/example.json
|
|
623
|
+
agent-depot app list
|
|
624
|
+
agent-depot app approve example --yes
|
|
625
|
+
```
|
|
626
|
+
|
|
627
|
+
La validación previsualiza cada argv declarado y su ejecutable resuelto, pero nunca
|
|
628
|
+
aprueba recipes (`validate --yes` se rechaza). Revisa la previsualización antes de
|
|
629
|
+
usar `app approve <name> --yes`: la aprobación autoriza los comandos de versión, no
|
|
630
|
+
solo un comportamiento de solo lectura. Los recibos de aprobación privados y escritos
|
|
631
|
+
de forma atómica viven en el directorio hermano `app-approvals/` y están ligados a la
|
|
632
|
+
ruta canónica del archivo y al hash exacto de su contenido. Si cambian los bytes, se
|
|
633
|
+
requiere una nueva aprobación; restaurar los bytes aprobados restaura la aprobación.
|
|
634
|
+
`app list` nunca aprueba recipes. Las recipes inválidas se muestran con sus motivos;
|
|
635
|
+
la validación termina con código distinto de cero para recipes inválidas. Las recipes
|
|
636
|
+
de otras plataformas se notifican como no aplicables y nunca se ejecutan. WSL cuenta
|
|
637
|
+
como Linux y nunca ejecuta ejecutables cuyo realpath esté bajo `/mnt/<drive>/`; omite
|
|
638
|
+
esos candidatos del PATH mientras busca ejecutables de Linux. Los comandos lanzan el
|
|
639
|
+
candidato del PATH en lugar del realpath para que los shims y los binarios multicall
|
|
640
|
+
conserven su identidad.
|
|
641
|
+
|
|
642
|
+
Los campos obligatorios son `name`, `install`, `update`, `uninstall` y `version`. Los
|
|
643
|
+
pasos del ciclo de vida contienen `argv`, `manual` o ambos; el texto manual nunca se
|
|
644
|
+
ejecuta. `version` contiene un `argv` seguro sin shell y un `pattern` de expresión
|
|
645
|
+
regular de JavaScript con un grupo de captura. Los comandos se ejecutan desde el
|
|
646
|
+
directorio personal del usuario. Una comprobación de versión sin éxito o no
|
|
647
|
+
resoluble significa no instalado. El esquema describe la estructura; `app validate`
|
|
648
|
+
además impone la seguridad del argv y la semántica de la expresión regular.
|
|
649
|
+
|
|
650
|
+
### Instalar, actualizar y desinstalar
|
|
651
|
+
|
|
652
|
+
```sh
|
|
653
|
+
agent-depot app install example # solo previsualización; termina con código distinto de cero hasta que se confirma
|
|
654
|
+
agent-depot app install example --yes
|
|
655
|
+
agent-depot app update example --yes
|
|
656
|
+
agent-depot app uninstall example --yes
|
|
657
|
+
agent-depot app setup example --host pi --host codex --yes
|
|
658
|
+
agent-depot app teardown example --host pi --yes
|
|
659
|
+
```
|
|
660
|
+
|
|
661
|
+
Cada paso previsualiza su texto argv/manual, el ejecutable resuelto, el directorio de
|
|
662
|
+
trabajo (el personal del usuario) y el entorno. El recurso manual solo se produce
|
|
663
|
+
cuando un proceso no puede lanzarse, nunca tras una salida con código distinto de
|
|
664
|
+
cero (que se notifica con stdout/stderr). Ejecuta tú mismo las instrucciones manuales
|
|
665
|
+
mostradas y después certifica la finalización sin volver a ejecutar el argv:
|
|
666
|
+
|
|
667
|
+
```sh
|
|
668
|
+
agent-depot app install example --manual-done --yes
|
|
669
|
+
agent-depot app uninstall example --manual-done --yes
|
|
670
|
+
```
|
|
671
|
+
|
|
672
|
+
`--yes` por sí solo no certifica la finalización manual. La instalación registra una
|
|
673
|
+
versión solo cuando la comprobación de versión tiene éxito. La desinstalación
|
|
674
|
+
mantiene el seguimiento mientras la versión siga teniendo éxito;
|
|
675
|
+
`agent-depot app uninstall example --forget --yes` elimina explícitamente el
|
|
676
|
+
seguimiento sin ejecutar ningún comando de la recipe, incluso si la recipe ya no
|
|
677
|
+
existe. Los registros atómicos por App viven en el directorio hermano
|
|
678
|
+
`app-installations/`. La desinstalación no ejecuta implícitamente el teardown de Host.
|
|
679
|
+
|
|
680
|
+
`app list` y `update check --scope user-global` resuelven las últimas versiones desde
|
|
681
|
+
GitHub Releases, npm o un `latest.argv` aprobado. Las consultas ausentes o fallidas
|
|
682
|
+
son desconocidas y nunca se ofrecen como actualizaciones. Las peticiones HTTP
|
|
683
|
+
públicas no envían credenciales, rechazan redirecciones, limitan las respuestas a
|
|
684
|
+
1 MiB y expiran a los cinco segundos.
|
|
685
|
+
|
|
686
|
+
```sh
|
|
687
|
+
agent-depot update apply --scope user-global --all --yes
|
|
688
|
+
agent-depot update apply --scope user-global --skill 0 --app example --yes
|
|
689
|
+
agent-depot app update example --manual-done --yes
|
|
690
|
+
```
|
|
691
|
+
|
|
692
|
+
`--all` incluye Apps y Skills; repite `--app <name>` para seleccionar Apps junto con
|
|
693
|
+
Skills. Las actualizaciones de Apps se ejecutan **después de los Skills** en el mismo
|
|
694
|
+
lote. Las Apps son solo globales de usuario; `--all --scope project` omite las Apps.
|
|
695
|
+
Cada paso seleccionado se previsualiza antes de la confirmación del lote; los fallos
|
|
696
|
+
independientes no detienen las actualizaciones restantes. Los resultados manuales del
|
|
697
|
+
lote se completan por separado con `app update --manual-done`. Las actualizaciones
|
|
698
|
+
registran la versión confirmada por el comando de versión de la recipe, no la
|
|
699
|
+
respuesta del registro. Las actualizaciones requieren un cambio de versión; las
|
|
700
|
+
versiones sin cambios fallan sin reescribir el seguimiento de lo instalado. Una `v`
|
|
701
|
+
inicial y los cambios de SemVer que solo afectan a los metadatos de compilación
|
|
702
|
+
cuentan como sin cambios, igual que en las comprobaciones de disponibilidad. Los
|
|
703
|
+
resultados correctos muestran `installed <old> -> <new> (latest <latest>)`, incluso
|
|
704
|
+
cuando new difiere de latest. Una previsualización/recurso manual de actualización
|
|
705
|
+
confirmado guarda evidencia privada de versión en el directorio hermano
|
|
706
|
+
`app-pending-updates/`, de modo que una invocación posterior de `--manual-done` pueda
|
|
707
|
+
comparar con la versión previa a la actualización. Una finalización manual
|
|
708
|
+
certificada consume esta evidencia incluso en caso de fallo; obtén una nueva
|
|
709
|
+
previsualización confirmada antes de reintentar.
|
|
710
|
+
|
|
711
|
+
La comparación estricta de SemVer ignora una `v` inicial, ordena las prereleases y no
|
|
712
|
+
ofrece una degradación cuando la versión instalada es igual o posterior a la última.
|
|
713
|
+
Las versiones que no son SemVer usan una desigualdad opaca y **pueden ofrecer una
|
|
714
|
+
degradación**. GitHub `/releases/latest` excluye borradores y prereleases; npm usa
|
|
715
|
+
`dist-tags.latest` de los metadatos del paquete. `app list` comprueba las Apps de
|
|
716
|
+
forma concurrente, conservando el orden del listado. El fallo de la comprobación de
|
|
717
|
+
una App no oculta otras Apps ni las actualizaciones de Skills. Los fallos de consulta
|
|
718
|
+
muestran sus motivos (redirección, límite de peticiones, estado HTTP, tiempo de
|
|
719
|
+
espera agotado, respuesta demasiado grande o inválida).
|
|
720
|
+
|
|
721
|
+
|
|
722
|
+
Los comandos del ciclo de vida de las Apps no son interactivos: stdin se ignora
|
|
723
|
+
(EOF), como en el ejecutor de comandos de Skills existente, y no hay tiempo límite de
|
|
724
|
+
ejecución. Las recipes deben usar indicadores no interactivos; los instaladores que
|
|
725
|
+
requieren un terminal pertenecen a los pasos `manual`. EOF hace que los avisos
|
|
726
|
+
basados en stdin fallen en lugar de esperar una entrada, pero un proceso que ignore
|
|
727
|
+
EOF aún puede quedarse colgado; cancélalo manualmente. Los stdout y stderr
|
|
728
|
+
capturados de las Apps están limitados cada uno a 1 MiB; los fallos muestran solo
|
|
729
|
+
sus últimos 4 KiB.
|
|
730
|
+
|
|
731
|
+
El setup/teardown de Apps solo acepta Hosts declarados para esa acción. Todos los
|
|
732
|
+
pasos seleccionados se previsualizan antes de la ejecución; cada Host obtiene un
|
|
733
|
+
resultado y los fallos no detienen a los Hosts restantes. Para la finalización
|
|
734
|
+
manual, vuelve a ejecutar el Host seleccionado con `--manual-done --yes`. Esto
|
|
735
|
+
comprueba la versión de la App, no la integración con el Host. Las acciones de Host
|
|
736
|
+
nunca cambian el seguimiento de Apps instaladas.
|
|
737
|
+
|
|
738
|
+
## Packages
|
|
739
|
+
|
|
740
|
+
Un Package es un bundle nativo del Host descubierto dentro de una Source registrada:
|
|
741
|
+
un paquete de Pi (un `package.json` con una clave `pi`, o los directorios
|
|
742
|
+
convencionales `extensions/`, `skills/`, `prompts/` y `themes/`) o un plugin de Claude
|
|
743
|
+
Code (un `.claude-plugin/plugin.json` vinculado por un
|
|
744
|
+
`.claude-plugin/marketplace.json` dentro del repositorio). Un mismo repositorio puede
|
|
745
|
+
ser ambas cosas, como `pstack-claude`. V1 solo admite los Hosts Pi y Claude Code; el
|
|
746
|
+
empaquetado de Codex y OpenCode, los paquetes de Pi procedentes de npm y los Packages
|
|
747
|
+
de ámbito de proyecto quedan aplazados.
|
|
748
|
+
|
|
749
|
+
Agent Depot no copia el contenido de un bundle. Lee el manifiesto del bundle en un
|
|
750
|
+
inventario de componentes tipado, deriva los comandos propios del Host a partir de esa
|
|
751
|
+
declaración, los ejecuta mediante el ejecutor de comandos sin shell tras la aprobación
|
|
752
|
+
y lee la versión instalada de los archivos de estado del Host. El Host posee lo que
|
|
753
|
+
está instalado. Agent Depot posee el registro de selección y el recibo de lo que
|
|
754
|
+
delegó. Los Skills propios de un bundle nunca se ofrecen para adopción ni se instalan
|
|
755
|
+
por segunda vez, porque el Host posee sus archivos y ubicaciones.
|
|
756
|
+
|
|
757
|
+
### Añadir una Source y descubrir sus bundles
|
|
758
|
+
|
|
759
|
+
El descubrimiento lee el espejo Git en caché y nunca lo refresca. El primer
|
|
760
|
+
descubrimiento de una Source cuyo espejo falta falla hasta que refresques esa Source:
|
|
761
|
+
|
|
762
|
+
```sh
|
|
763
|
+
agent-depot source add https://github.com/michael-denyer/pstack-claude.git
|
|
764
|
+
agent-depot source list
|
|
765
|
+
agent-depot source refresh git:<source-id> --yes
|
|
766
|
+
agent-depot package discover git:<source-id>
|
|
767
|
+
```
|
|
768
|
+
|
|
769
|
+
`package discover` imprime una línea por bundle de la Source junto con su inventario
|
|
770
|
+
de componentes. `pstack-claude` produce un bundle de Pi en la raíz del repositorio y
|
|
771
|
+
un bundle de Claude desde su marketplace dentro del repositorio:
|
|
772
|
+
|
|
773
|
+
```text
|
|
774
|
+
Package git:<source-id>::pi:.: pstack
|
|
775
|
+
Package git:<source-id>::claude:.#pstack: pstack
|
|
776
|
+
```
|
|
777
|
+
|
|
778
|
+
Cada línea de componente indica un tipo, una propiedad (`skill-category` o
|
|
779
|
+
`host-only`), un efecto y las rutas declaradas. Las definiciones de agente y los
|
|
780
|
+
servidores MCP aparecen como `host-only`: Agent Depot los informa y los deja al Host.
|
|
781
|
+
|
|
782
|
+
### Seleccionar, aprobar y ejecutar una acción de ciclo de vida
|
|
783
|
+
|
|
784
|
+
Una selección es `<source-id>::<bundle-path>` más `--host`, o una selección
|
|
785
|
+
cualificada por Host `<source-id>::<host>:<bundle-path>`. La ruta de un bundle de
|
|
786
|
+
Claude termina en `#<plugin-name>` cuando la Source ofrece más de un plugin.
|
|
787
|
+
|
|
788
|
+
`approve` es por acción. Escribe el recibo de la declaración exacta de esa única
|
|
789
|
+
acción, por lo que aprobar `install` no autoriza `update`. `--yes` confirma la
|
|
790
|
+
ejecución y nunca sustituye a la aprobación. Planificar una acción de ciclo de vida
|
|
791
|
+
refresca primero la Source Git de la selección, de modo que el manifiesto
|
|
792
|
+
previsualizado es el que usan los comandos.
|
|
793
|
+
|
|
794
|
+
```sh
|
|
795
|
+
# Paquete de Pi en la raíz del repositorio
|
|
796
|
+
agent-depot package inspect git:<source-id>::pi:. --host pi
|
|
797
|
+
agent-depot package install git:<source-id>::pi:. --host pi
|
|
798
|
+
agent-depot package approve git:<source-id>::pi:. --host pi --action install
|
|
799
|
+
agent-depot package install git:<source-id>::pi:. --host pi --yes
|
|
800
|
+
|
|
801
|
+
# Plugin de Claude Code desde el marketplace dentro del repositorio
|
|
802
|
+
agent-depot package inspect git:<source-id>::claude:.#pstack --host claude
|
|
803
|
+
agent-depot package approve git:<source-id>::claude:.#pstack --host claude --action install
|
|
804
|
+
agent-depot package install git:<source-id>::claude:.#pstack --host claude --yes
|
|
805
|
+
```
|
|
806
|
+
|
|
807
|
+
Los comandos `install`, `update` y `uninstall` imprimen la previsualización completa y
|
|
808
|
+
después terminan con código distinto de cero hasta que exista el recibo de la acción
|
|
809
|
+
y se indique `--yes`. La previsualización muestra el origen y el commit resueltos, el
|
|
810
|
+
descriptor, el inventario de componentes con su propiedad y efecto, cada comando del
|
|
811
|
+
Host con el nombre de su ejecutable, las coordenadas registradas que la acción puede
|
|
812
|
+
cambiar (`affects`), el directorio de trabajo, el entorno y cualquier advertencia.
|
|
813
|
+
Inmediatamente antes de la ejecución, Agent Depot vuelve a derivar la declaración y se
|
|
814
|
+
detiene con `stale plan` si el manifiesto, el commit, la identidad de instalación o
|
|
815
|
+
los comandos ordenados cambiaron desde la previsualización. Cuando el Host ya informa
|
|
816
|
+
del bundle como instalado, el plan no ejecuta ningún comando y solo registra la
|
|
817
|
+
selección.
|
|
818
|
+
|
|
819
|
+
Los comandos del Host para los dos Hosts de V1:
|
|
820
|
+
|
|
821
|
+
| Host | Instalar | Actualizar | Desinstalar |
|
|
822
|
+
| --- | --- | --- | --- |
|
|
823
|
+
| Pi | `pi install <source>` | `pi update <source>` | `pi remove <source>` |
|
|
824
|
+
| Claude Code | `claude plugin marketplace add <source>`, después `claude plugin install <plugin>@<marketplace>` | `claude plugin marketplace update <marketplace>`, después `claude plugin update <plugin>@<marketplace>` | `claude plugin uninstall <plugin>@<marketplace>` |
|
|
825
|
+
|
|
826
|
+
Agent Depot omite el paso `marketplace add` cuando el Host ya conoce el marketplace y
|
|
827
|
+
siempre nombra el marketplace en el verbo de actualización con ámbito. Cada acción de
|
|
828
|
+
V1 afecta solo a su propia selección.
|
|
829
|
+
|
|
830
|
+
### Estado instalado, versiones y eliminación
|
|
831
|
+
|
|
832
|
+
`package list` muestra cada selección registrada con su ID de instalación y la
|
|
833
|
+
evidencia de versión que Agent Depot registró. La evidencia en vivo procede de
|
|
834
|
+
`~/.pi/agent/settings.json` y `~/.claude/plugins/installed_plugins.json`, que Agent
|
|
835
|
+
Depot lee y nunca escribe. Un archivo de Host ausente es una vista vacía. Un archivo
|
|
836
|
+
desviado o ilegible deja la búsqueda afectada en `unknown` y nunca lanza una
|
|
837
|
+
excepción. Un paquete git de Pi sin versión se informa como `unknown`, nunca como
|
|
838
|
+
`current`.
|
|
839
|
+
|
|
840
|
+
Una actualización registra una versión nueva solo cuando el estado del Host cambió de
|
|
841
|
+
una forma que Agent Depot puede verificar, es decir, cuando las dos observaciones
|
|
842
|
+
coinciden en una versión o en un commit hexadecimal y difieren, o cuando el Host pasó
|
|
843
|
+
de no tener nada instalado a instalado. Una actualización no verificable falla y deja
|
|
844
|
+
el registro intacto. `uninstall` delega el comando del Host y después elimina el
|
|
845
|
+
registro de selección:
|
|
846
|
+
|
|
847
|
+
```sh
|
|
848
|
+
agent-depot package approve git:<source-id>::pi:. --host pi --action uninstall
|
|
849
|
+
agent-depot package uninstall git:<source-id>::pi:. --host pi --yes
|
|
850
|
+
agent-depot package forget git:<source-id>::pi:. --host pi --yes
|
|
851
|
+
```
|
|
852
|
+
|
|
853
|
+
`forget` elimina solo el registro de selección de Agent Depot. No ejecuta ningún
|
|
854
|
+
comando del Host y deja la instalación del Host tal cual.
|
|
855
|
+
|
|
856
|
+
### Límites de los Packages
|
|
857
|
+
|
|
858
|
+
- Una selección de Claude de versión fija no puede delegarse. `claude plugin install`
|
|
859
|
+
toma `<plugin>@<marketplace>` y no tiene hueco para un pin, así que planificar un
|
|
860
|
+
`install` o `update` de Claude con una política de versión `fixed` falla en cerrado
|
|
861
|
+
en lugar de reclamar un pin que el Host ignoraría. Usa `latest` para una selección
|
|
862
|
+
de Claude, o un pin fijo para una selección de Pi, hasta que se verifique una forma
|
|
863
|
+
de pin admitida por Claude.
|
|
864
|
+
- Un plugin de Claude sin vinculación a un marketplace dentro del repositorio se
|
|
865
|
+
informa pero no es instalable.
|
|
866
|
+
- Agent Depot no lee la salida en prosa de la CLI del Host, incluido `pi list`. La
|
|
867
|
+
evidencia instalada procede solo de los archivos de estado del Host.
|
|
868
|
+
|
|
869
|
+
## Exportar un Profile global de usuario
|
|
870
|
+
|
|
871
|
+
Exporta las elecciones portables a otra máquina o guárdalas en git:
|
|
872
|
+
|
|
873
|
+
```sh
|
|
874
|
+
agent-depot export > profile.json
|
|
875
|
+
agent-depot export --out profile.json
|
|
876
|
+
agent-depot export --no-apps --source <source-id> --skill doctor-md-agents
|
|
877
|
+
agent-depot export --no-sources --no-skills --app my-tool --app another-tool
|
|
878
|
+
agent-depot export --package git:<source-id>::pi:.
|
|
879
|
+
```
|
|
880
|
+
|
|
881
|
+
Todo lo portable se selecciona por defecto. `--no-sources`, `--no-skills`,
|
|
882
|
+
`--no-apps` y `--no-packages` excluyen bloques; `--source <id|url>`,
|
|
883
|
+
`--skill <path|name>`, `--app <name>` y `--package <selection>`, que son repetibles,
|
|
884
|
+
restringen cada bloque de forma independiente. Las selecciones desconocidas y
|
|
885
|
+
combinar el filtro de inclusión de un bloque con su indicador `--no-*` son errores.
|
|
886
|
+
|
|
887
|
+
La salida estándar contiene solo JSON; stderr muestra la previsualización y los
|
|
888
|
+
motivos de exclusión. `--out` requiere un archivo nuevo (los archivos existentes y
|
|
889
|
+
los enlaces simbólicos no se reemplazan). Los Profiles contienen URL de Git
|
|
890
|
+
canónicas con su inclusión en el descubrimiento, las políticas de versión/Hosts/
|
|
891
|
+
métodos de usuario registrados de los Skills, recipes de App completas, incluidas
|
|
892
|
+
las recipes de otras plataformas, y selecciones de Package solo como declaraciones:
|
|
893
|
+
su Source, coordenadas de Host y política de versión. La exportación por CLI siempre
|
|
894
|
+
escribe
|
|
895
|
+
`included: true`; las elecciones de descubrimiento son transitorias, mientras que la
|
|
896
|
+
TUI puede pasar elecciones de inclusión explícitas al núcleo de exportación
|
|
897
|
+
compartido. La exportación no refresca Sources ni ejecuta comandos de Apps, y un
|
|
898
|
+
recibo de Package nunca viaja en un Profile.
|
|
899
|
+
|
|
900
|
+
Las rutas locales y las credenciales evidentes no son portables. Los elementos no
|
|
901
|
+
portables o inválidos se excluyen con sus motivos, al igual que los Skills no
|
|
902
|
+
gestionados, propiedad de Apps y de proyecto, las ubicaciones/evidencia de
|
|
903
|
+
instalación, los recibos de aprobación, el estado de las Apps instaladas, las
|
|
904
|
+
actualizaciones pendientes y los recibos/estado instalado de los Packages. Las
|
|
905
|
+
comprobaciones de portabilidad del texto libre de las
|
|
906
|
+
recipes son conservadoras; revisa los Profiles antes de compartirlos: los secretos
|
|
907
|
+
arbitrarios no pueden detectarse automáticamente.
|
|
908
|
+
|
|
909
|
+
## Importar un Profile global de usuario
|
|
910
|
+
|
|
911
|
+
Primero previsualiza y después confirma explícitamente la misma selección:
|
|
912
|
+
|
|
913
|
+
```sh
|
|
914
|
+
agent-depot import profile.json
|
|
915
|
+
agent-depot import profile.json --yes
|
|
916
|
+
agent-depot import profile.json --no-apps --skill doctor-md-agents --yes
|
|
917
|
+
```
|
|
918
|
+
|
|
919
|
+
La importación usa los mismos filtros independientes por bloque/nombre que la
|
|
920
|
+
exportación, incluidos `--no-packages` y `--package <selection>`. Informa de **add**
|
|
921
|
+
(añadir), **same** (igual, omitido) y **conflict**
|
|
922
|
+
(conflicto, con la diferencia mostrada, omitido). Sin `--yes` no se escribe nada. Las
|
|
923
|
+
elecciones existentes y los archivos en conflicto nunca se reemplazan. Un Profile
|
|
924
|
+
producido por una versión más reciente de Agent Depot genera una advertencia, no un
|
|
925
|
+
error.
|
|
926
|
+
|
|
927
|
+
Las adiciones confirmadas se ejecutan en orden: registro de Sources, Skills globales
|
|
928
|
+
de usuario mediante las previsualizaciones de instalación refrescadas y las
|
|
929
|
+
comprobaciones de seguridad normales, después las App recipes y a continuación las
|
|
930
|
+
selecciones de Packages. Se conservan los
|
|
931
|
+
Hosts, las políticas de versión y los métodos de usuario registrados. Incluso sin
|
|
932
|
+
`--yes`, la previsualización de cada Skill a añadir muestra su Source, Hosts,
|
|
933
|
+
política de versión y el argv completo de cada método proporcionado por el usuario,
|
|
934
|
+
marcado como que se ejecuta solo tras la confirmación. La previsualización de
|
|
935
|
+
instalación normal sigue apareciendo antes de la ejecución. Cada fallo se notifica
|
|
936
|
+
de forma independiente y los elementos restantes continúan; cualquier elemento
|
|
937
|
+
fallido hace que el comando termine con código distinto de cero.
|
|
938
|
+
|
|
939
|
+
Una selección de Package es solo una selección. La importación la reproduce mediante
|
|
940
|
+
la acción `select` del flujo, que escribe un recibo solo para esa acción, cuya
|
|
941
|
+
declaración no contiene ningún argv. No autoriza ninguna instalación ni actualización
|
|
942
|
+
y no ejecuta ningún comando del Host, así que la importación nunca instala un Package.
|
|
943
|
+
|
|
944
|
+
Las recipes, incluidas las de otras plataformas, llegan **sin aprobar** a `apps/`.
|
|
945
|
+
Una recipe de destino con el mismo nombre bloquea la importación solo cuando su
|
|
946
|
+
plataforma se solapa con la de la recipe entrante: las plataformas iguales se
|
|
947
|
+
solapan, y una plataforma ausente se solapa con todas las plataformas. Las recipes
|
|
948
|
+
de plataformas disjuntas pueden añadirse ambas. El JSON de recipe inválido usa su
|
|
949
|
+
nombre y plataforma en bruto para la misma comprobación; los archivos de nombre
|
|
950
|
+
desconocido se notifican con detalles de lectura/análisis sin bloquear Apps no
|
|
951
|
+
relacionadas. Un Profile no puede contener recipes del mismo nombre cuya aplicabilidad
|
|
952
|
+
de plataforma se solape. La importación nunca instala Apps ni ejecuta comandos de
|
|
953
|
+
recipes. Revisa y aprueba las recipes aplicables con
|
|
954
|
+
`agent-depot app approve <name> --yes` antes de usar sus comandos de ciclo de vida.
|
|
955
|
+
La inclusión de una Source en el descubrimiento sigue siendo una elección transitoria
|
|
956
|
+
del frontend, no un cambio persistente en una Source existente. Los Skills llevan su
|
|
957
|
+
propia identidad de Source, por lo que omitir su bloque de Sources no fuerza el
|
|
958
|
+
registro; la previsualización nombra las Sources no registradas que se obtendrán sin
|
|
959
|
+
registrarse. Las filas de Sources existentes explican cuándo la inclusión en el
|
|
960
|
+
descubrimiento difiere pero no se importa.
|
|
961
|
+
|
|
962
|
+
La pestaña **5 Import/Export** de la TUI ofrece listas de verificación agrupadas y
|
|
963
|
+
las mismas previsualizaciones del núcleo compartido que la CLI. Las exclusiones y los
|
|
964
|
+
conflictos no pueden seleccionarse. La exportación solo crea un archivo nuevo; las
|
|
965
|
+
exportaciones vacías no escriben nada (la CLI informa de un error). La importación
|
|
966
|
+
añade las elecciones que faltan sin reemplazar las existentes. Las recipes importadas
|
|
967
|
+
permanecen sin aprobar y la importación nunca instala Apps. Las selecciones de Package
|
|
968
|
+
importadas se registran sin instalar ningún bundle y sin ejecutar ningún comando del
|
|
969
|
+
Host.
|